mapnik-3.0.9/000077500000000000000000000000001262555547000130155ustar00rootroot00000000000000mapnik-3.0.9/.gitattributes000066400000000000000000000000221262555547000157020ustar00rootroot00000000000000*.svg text eol=lf mapnik-3.0.9/.gitignore000066400000000000000000000021441262555547000150060ustar00rootroot00000000000000.DS_Store *.gcov *.gcda *.gcno *~ *.o *.pyc *.os *.so *.so.* *.a *.swp *.dylib mapnik-gyp plugins/input/*.input plugins/input/templates/*.input demo/c++/rundemo bindings/python/mapnik/paths.py config.cache config.log config.py mapnik-settings.env mason_packages/ .mason/ .sconf_temp/ .sconsign.dblite demo/viewer/viewer.ini tests/cpp_tests/font_registration_test tests/python_tests/raster_colorizer_test.png tests/python_tests/raster_colorizer_test_save.xml utils/mapnik-config/mapnik-config utils/shapeindex/shapeindex utils/mapnik-index/mapnik-index utils/ogrindex/ogrindex utils/pgsql2sqlite/pgsql2sqlite utils/svg2png/svg2png utils/mapnik-render/mapnik-render demo/python/demo* demo/python/map.xml tests/data/sqlite/*index demo/c++/cairo-demo.pdf demo/c++/cairo-demo.png demo/c++/cairo-demo256.png demo/c++/cairo-demo.svg demo/c++/demo.tif demo/c++/demo.jpg demo/c++/demo.png demo/c++/demo256.png demo/viewer/Makefile demo/viewer/Makefile.Debug demo/viewer/Makefile.Release demo/viewer/release/ demo/viewer/ui_about.h demo/viewer/ui_info.h demo/viewer/ui_layer_info.h test/standalone/*-bin test/unit/run test/visual/run mapnik-3.0.9/.gitmodules000066400000000000000000000003501262555547000151700ustar00rootroot00000000000000[submodule "test/data"] path = test/data url = https://github.com/mapnik/test-data.git branch = master [submodule "test/data-visual"] path = test/data-visual url = https://github.com/mapnik/test-data-visual.git branch = mastermapnik-3.0.9/.travis.yml000066400000000000000000000060201262555547000151240ustar00rootroot00000000000000language: cpp sudo: false git: depth: 10 submodules: true env: global: - secure: "N3a5nzzsgpuu45k8qWdYsHNxrSnqeAGLTOYpfYoAH7B94vuf7pa7XV1tQjXbxrnx2D6ryTdtUtyRKwy7zXbwXxGt4DpczWEo8f6DUd6+obAp3kdnXABg2Sj4oA7KMs0F0CmoADy0jdUZD5YyOJHu64LCIIgzEQ9q49PFMNbU3IE=" - secure: "iQYPNpMtejcgYeUkWZGIWz1msIco5qydJrhZTSCQOYahAQerdT7q5WZEpEo3G6IWOGgO1eo7GFuY8DvqQjw1+jC9b9mhkRNdo3LhGTKS9Gsbl5Q27k0rjlaFZmmQHrfPlQJwhfAIp+KLugHtQw5bCoLh+95E3j0F0DayF1tuJ3s=" addons: postgresql: "9.4" apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.5 packages: - clang-3.5 cache: directories: - $HOME/.ccache matrix: include: - os: linux compiler: clang env: JOBS=8 MASON_PUBLISH=true - os: linux compiler: gcc env: JOBS=6 - os: osx compiler: clang env: JOBS=8 MASON_PUBLISH=true - os: osx compiler: clang env: JOBS=8 COVERAGE=true before_install: - export COVERAGE=${COVERAGE:-false} - export MASON_PUBLISH=${MASON_PUBLISH:-false} - if [[ ${TRAVIS_BRANCH} != 'master' ]]; then export MASON_PUBLISH=false; fi - if [[ ${TRAVIS_PULL_REQUEST} != 'false' ]]; then export MASON_PUBLISH=false; fi install: - if [[ $(uname -s) == 'Linux' ]]; then export CXX="ccache clang++-3.5 -Qunused-arguments"; export CC="ccache clang-3.5 -Qunused-arguments"; export PYTHONPATH=$(pwd)/mason_packages/.link/lib/python2.7/site-packages; else brew rm postgis --force; brew install postgis --force; pg_ctl -w start -l postgres.log --pgdata /usr/local/var/postgres; createuser -s postgres; export PYTHONPATH=$(pwd)/mason_packages/.link/lib/python/site-packages; fi - psql -c 'create database template_postgis;' -U postgres; - psql -c 'create extension postgis;' -d template_postgis -U postgres; - if [[ ${COVERAGE} == true ]]; then PYTHONUSERBASE=$(pwd)/mason_packages/.link pip install --user cpp-coveralls; fi script: - source bootstrap.sh - if [[ ${COVERAGE} == true ]]; then ./configure CUSTOM_LDFLAGS='--coverage' CUSTOM_CXXFLAGS='--coverage' CUSTOM_CFLAGS='--coverage' DEBUG=True; elif [[ ${MASON_PUBLISH} == true ]]; then export MASON_NAME=mapnik; export MASON_VERSION=latest; export MASON_LIB_FILE=lib/libmapnik-wkt.a; source ./.mason/mason.sh; ./configure PREFIX=${MASON_PREFIX} PATH_REPLACE='' MAPNIK_BUNDLED_SHARE_DIRECTORY=True RUNTIME_LINK='static'; else ./configure; fi - make - make test || TEST_RESULT=$? - if [[ ${COVERAGE} == true ]]; then ./mason_packages/.link/bin/cpp-coveralls --build-root . --gcov-options '\-lp' --exclude mason_packages --exclude .sconf_temp --exclude benchmark --exclude deps --exclude scons --exclude test --exclude demo --exclude docs --exclude fonts --exclude utils > /dev/null; fi - if [[ ${COVERAGE} != true ]]; then make bench; fi - if [[ ${TEST_RESULT} != 0 ]]; then exit $TEST_RESULT ; fi; - if [[ ${MASON_PUBLISH} == true ]]; then ./mason_latest.sh build; ./mason_latest.sh link; ./mason_latest.sh publish; fi mapnik-3.0.9/AUTHORS.md000066400000000000000000000025711262555547000144710ustar00rootroot00000000000000## Mapnik Contributors Mapnik is written by Artem Pavlenko with contributions from: * Andy Allen * AJ Ashton * Matt Amos * Lucio Asnaghi * Alexandre Bonnasseau * Justin Bronn * Joel Brown * Christopher Brown * Jon Burgess * Stephan Bösch-Plepelits * Manel Clos * Toby Collet * Robert Coup * Berteun Damman * Petr Dlouhy * Jiri Drbalek * Jean-Francois Doyon * David Eastcott * Seth Fitzsimmons * Sean Gillies * Krzysztof Godlewski * Beau Gunderson * John Hague * Dominic Hargreaves * Axel Haustant * Aubrey Holland * Jordan Hollinger * Tom Hughes * Konstantin Käfer * Mak Kolybabi * Peter Körner * Hermann Kraus * Stella Laurenzo * XinGang Li * lightmare * David Leaver * Carlos López * Dennis Luxen * Tom MacWright * Sara Metz * Michal Migurski * Andrii Mishkovskyi * Ben Moores * Mike Morris * Dražen Odobašić * Cameron Patrick * Clint Pells * Igor Podolskiy * Reid Priedhorsky * Brian Quinion * Even Rouault * Marcin Rudowski * Sandro Santilli * Christopher Schmidt * Andreas Schneider * Vincent Schut * Ehud Shabtai * David Siegel * Steve Singer * Paul Smith * Vince Spader * Philipp Spitzer * Dane Springmeyer * Craig de Stigter * Dave Stubbs * River Tarnell * Cezary Tarnowski * Blake Thompson * Oliver Tonnhofer * Jochen Topf * Alberto Valverde * Martijn van Oosterhout * Andreas Volz * Lennard voor den Dag * Shaun Walbridge * Rich Wareham * Nick Whitelegg * Leslie Wu * Roman Galacz mapnik-3.0.9/CHANGELOG.md000066400000000000000000001600741262555547000146360ustar00rootroot00000000000000# Mapnik Changelog A simple log of core changes affecting Mapnik usage. Developers: Please commit along with changes. For a complete change history, see the git log. ## 3.0.9 Released: November 26, 2015 (Packaged from 03a0926) #### Summary - Fixed offsetting of complex paths and sharp angles (https://github.com/mapnik/mapnik/pull/3160) (via @winni159) - Fixed mapnik.util.variant issue when compiling with gcc-5.x and SSO enabled by default (https://github.com/mapnik/mapnik/issues/3103) (via @nkovacs) - Fixed issue with complex scripts where some character sequences weren't rendered correctly (https://github.com/mapnik/mapnik/issues/3050) (via @jkroll20) - Revived postgis.input tests - JSON: geometry grammar has been refactored and optimized to have expectation points - Filled missing specializations for value_bool in `mapnik::value` comparison operators - `mapnik.Image` - fixed copy semantics implementation for internal buffer - JSON parsing: unified error_handler across all grammars - Improved unit test coverage - Raster scaling: fixed nodata handling, acurracy when working with small floats and clipping floats by \[0; 255\] (https://github.com/mapnik/mapnik/pull/3147) - Added [`code of conduct`](http://contributor-covenant.org) - GeoJSON plug-in is updated to skip feature with empty geometries - GeoJSON plug-in : ensure original order of features is preserved (fixed) (https://github.com/mapnik/mapnik/issues/3182) - Shapeindex utility: fixed `empty` shapes handling and ported tests to c++ - Centroid algorithm: fixed invalid input handling, particularly empty geometries (https://github.com/mapnik/mapnik/pull/3185) - Updated SCons build system to the latest version 2.4.1 (http://scons.org/) ## 3.0.8 Released: October 23, 2015 (Packaged from 2d15567) #### Summary - Renamed `SHAPE_MEMORY_MAPPED_FILE` define to `MAPNIK_MEMORY_MAPPED_FILE`. Pass `./configure MEMORY_MAPPED_FILE=True|False` to request support for memory mapped files across Mapnik plugins (currently shape, csv, and geojson). - Unified `mapnik-index` utility supporing GeoJSON and CSV formats - Increased unit test coverage for GeoJSON and CSV plugins - shape.input - refactor to support *.shx and improve handling various bogus shapefiles - geojson.input - make JSON parser stricter + support single Feature/Geometry as well as FeatureCollection - maintain 'FT_LOAD_NO_HINTING' + support >= harfbuzz 1.0.5 - geojson.input - implement on-disk-index support ## 3.0.7 Released: October 12, 2015 (Packaged from e161253) #### Summary - Removed `MAPNIK_VERSION_IS_RELEASE` define / `mapnik-config --version` not longer reports `-pre` for non-release versions. Use `mapnik-config --git-revision` instead (https://github.com/mapnik/mapnik/issues/3123) - Renamed `nik2img` command to `mapnik-render` - PostGIS: Fixed handling of all attributes when `key_field_as_attribute=false` (https://github.com/mapnik/mapnik/issues/3120) - PostGIS: Fixed parsing of `key_field_as_attribute` as boolean: now `true/false` can be used in addition to `0/1` ## 3.0.6 Released: October 7, 2015 (Packaged from 3cebe97) #### Summary - PostGIS plugin: added `key_field_as_attribute` option. Defaults to `True` to preserve current behavior of having the `key_field` added both as an attribute and as the `feature.id` value. If `key_field_as_attribute=false` is passed then the attribute is discarded (https://github.com/mapnik/mapnik/issues/3115) - CSV plugin has been further optimized and has gained experimental support for on-disk indexes (https://github.com/mapnik/mapnik/issues/3089) - SVG parser now fallsback to using `viewbox` if explicit dimensions are lacking (https://github.com/mapnik/mapnik/issues/3081) - Visual tests: new command line arguments `--agg`, `--cairo`, `--svg`, `--grid` for selecting renderers (https://github.com/mapnik/mapnik/pull/3074) - Visual tests: new command line argument `--scale-factor` or abbreviated `-s` for setting scale factor (https://github.com/mapnik/mapnik/pull/3074) - Fixed parsing colors in hexadecimal notation (https://github.com/mapnik/mapnik/pull/3075) - Removed mapnik::Feature type alias of mapnik::feature_impl (https://github.com/mapnik/mapnik/pull/3099) - Fixed linking order for plugins to avoid possible linking errors on linux systems (https://github.com/mapnik/mapnik/issues/3105) ## 3.0.5 Released: September 16, 2015 (Packaged from 165c704) #### Summary - `scale-hsla` image filter: parameters are no longer limited by interval \[0, 1\] (https://github.com/mapnik/mapnik/pull/3054) - Windows: Fixed SVG file loading from unicode paths - `colorize-alpha` image filter: fixed normalization of color components (https://github.com/mapnik/mapnik/pull/3058) - `colorize-alpha` image filter: added support for transparent colors (https://github.com/mapnik/mapnik/pull/3061) - Enable reading optional `MAPNIK_LOG_FORMAT` environment variable(https://github.com/mapnik/mapnik/commit/6d1ffc8a93008b8c0a89d87d68b59afb2cb3757f) - CSV.input uses memory mapped file by default on *nix. - Updated bundled fonts to the latest version - Topojson.input - fixed geometry_index logic which was causing missing features - Fixed SVG file loading from unicode paths (https://github.com/mapnik/node-mapnik/issues/517) - CSV.input - improved support for LF/CR/CRLF line endings on all platforms (https://github.com/mapnik/mapnik/issues/3065) - Revive `zero allocation image interface` and add unit tests - Benchmark: use return values of test runner. ## 3.0.4 Released: August 26, 2015 (Packaged from 17bb81c) #### Summary - CSV.input: plug-in has been refactored to minimise memory usage and to improve handling of larger input. (NOTE: [large_csv](https://github.com/mapnik/mapnik/tree/large_csv) branch adds experimental trunsduction parser with deferred string initialisation) - CSV.input: added internal spatial index (boost::geometry::index::tree) for fast `bounding box` queries (https://github.com/mapnik/mapnik/pull/3010) - Fixed deadlock in recursive datasource registration via @zerebubuth (https://github.com/mapnik/mapnik/pull/3038) - Introduced new command line argument `--limit` or `-l` to limit number of failed tests via @talaj (https://github.com/mapnik/mapnik/pull/2996) ## 3.0.3 Released: August 12, 2015 (Packaged from 3d262c7) #### Summary - Fixed an issue with fields over size of `int32` in `OGR` plugin (https://github.com/mapnik/node-mapnik/issues/499) - Added 3 new image-filters to simulate types of colorblindness (`color-blind-protanope`,`color-blind-deuteranope`,`color-blind-tritanope`) - Fix so that null text boxes have no bounding boxes when attempting placement ( 162f82cba5b0fb984c425586c6a4b354917abc47 ) - Patch to add legacy method for setting JPEG quality in images ( #3024 ) - Added `filter_image` method which can modify an image in place or return a new image that is filtered - Added missing typedef's in `mapnik::geometry` to allow experimenting with different containers ## 3.0.2 Released: July 31, 2015 (Packaged from 8305e74) #### Summary This release is centered around improvements to the SVG parsing within mapnik. Most work was done in pull request #3003. - Added container to log SVG parsing errors - Reimplemented to use rapidxml for parsing XML (DOM) - Support both xml:id and id attributes ( xml:id takes precedence ) - Added parse_id_from_url using boost::spirit - Added error tracking when parsing doubles - Unit tests for svg_parser to improve coverage - Fixed rx/ry validation for rounded_rect - Fixed dimensions parsing - Remove libxml2 dependency ## 3.0.1 Released: July 27th, 2015 (Packaged from 28f6f4d) #### Summary The 3.0.1 fixes a few bugs in geojson parsing, svg parsing, and rendering. It also avoids a potential hang when using `line-geometry-transform` and includes a speedup for text rendering compared to v3.0.0. It is fully back compatible with v3.0.0 and everyone is encouraged to upgrade. - Fixed text placement performance after #2949 (#2963) - Fixed rendering behavior for `text-minimum-path-length` which regressed in 3.0.0 (#2990) - Fixed handling of `xml:id` in SVG parsing (#2989) - Fixed handling of out of range `rx` and `ry` in SVG `rect` (#2991) - Fixed reporting of envelope from `mapnik::memory_datasource` when new features are added (#2985) - Fixed parsing of GeoJSON when unknown properties encountered at `FeatureCollection` level (#2983) - Fixed parsing of GeoJSON when properties contained `{}` (#2964) - Fixed potential hang due to invalid use of `line-geometry-transform` (6d6cb15) - Moved unmaintained plugins out of core: `osm`, `occi`, and `rasterlite` (#2980) ## 3.0.0 Released: July 7th, 2015 (Packaged from e6891a0) #### Summary The 3.0 release is a major milestone for Mapnik and includes many performance and design improvements. The is the first release to provide text shaping using the harfbuzz library. This harfbuzz support unlocks improved rendering and layer for many new languages, particularly SE Asian scripts. The internal storage for working with images and geometries has been made more flexible, faster, and strongly typed. The python bindings that were previously bundled with Mapnik have now been moved to and are versioned independently. #### Notice - Mapnik 3.0.0 requires a compiler capable of `std=c++11`. - It is highly recommended you use the `clang++` compiler on both OS X and Linux since it has robust c++11 support lower memory requirements. ##### Major Changes - Improved support for International Text (now uses harfbuzz library for text shaping) - Uses latest C++11 features for better performance (especially map loading) - Expressions everywhere: all symbolizer properties can now be data driven expressions (with the exception of `face-name` and `fontset-name` on the `TextSymbolizer`). - Rewritten geometry storage based on `std::vector` (#2739) - Separate storage of polygon exterior rings and interior rings to allow for more robust clipping of parts. - Enforces consistent winding order per OGC spec (exterior rings are CCW, interior CW) - Reduced memory consumption for layers with many points - Ability to adapt Mapnik geometries to boost::geometry operations (in a zero-copy way) - Ability to have i/o grammars for json/wkt work on geometries rather than paths for better efficiency and simpler code - Added new and experimental `dot` symbolizer for fast rendering of points - New functions supported in expressions: `exp`, `sin`, `cos`, `tan`, `atan`, `abs`. - New constants supported in expressions: `PI`, `DEG_TO_RAD`, `RAD_TO_DEG` - Added support for a variety of different grayscale images: - `mapnik.imageType.null` - `mapnik.imageType.rgba8` - `mapnik.imageType.gray8` - `mapnik.imageType.gray8s` - `mapnik.imageType.gray16` - `mapnik.imageType.gray16s` - `mapnik.imageType.gray32` - `mapnik.imageType.gray32s` - `mapnik.imageType.gray32f` - `mapnik.imageType.gray64` - `mapnik.imageType.gray64s` - `mapnik.imageType.gray64f` - Pattern symbolizers now support SVG input and applying transformations on them dynamically - Experimental / interface may change: `@variables` can be passed to renderer and evaluated in expressions - Supports being built with clang++ using `-fvisibility=hidden -flto` for smaller binaries - Supports being built with Visual Studio 2014 CTP #3 - Shield icons are now pixel snapped for crisp rendering - `MarkersSymbolizer` now supports `avoid-edges`, `offset`, `geometry-transform`, `simplify` for `line` placement and two new `placement` options called `vertex-last` and `vertex-first` to place a single marker at the end or beginning of a path. Also `clip` is now respected when rendering markers on a LineString geometry. - `TextSymbolizer` now supports `smooth`, `simplify`, `halo-opacity`, `halo-comp-op`, and `halo-transform` - `ShieldSymbolizer` now supports `smooth`, `simplify`, `halo-opacity`, `halo-comp-op`, and `halo-transform` - The `text-transform` property of `TextSymbolizer` now supports `reverse` value to flip direction of text. - The `TextSymbolizer` now supports `font-feature-settings` for advanced control over Opentype font rendering (https://developer.mozilla.org/en-US/docs/Web/CSS/font-feature-settings) - New GroupSymbolizer for applying multiple symbolizers in a single layout - AGG renderer: fixed geometry offsetting to work after smoothing to produce more consistent results (#2202) - AGG renderer: increased `vertex_dist_epsilon` to ensure nearly coincident points are discarded more readily (#2196) - GDAL plugin - Now keeps datasets open for the lifetime of the datasource (rather than per featureset) - Added back support for user driven `nodata` on rgb(a) images (#2023) - Allowed nodata to override alpha band if set on rgba images (#2023) - Added `nodata_tolerance` option to set nearby pixels transparent (has similar effect to the `nearblack` program) (#2023) - At process exit Mapnik core no longer calls `dlclose` on gdal.input (#2716) - TopoJSON plugin - Now supporting optional `bbox` property on layer - Fixed support for reporting correct `feature.id()` - Now supports `inline` string for passing data from memory - Faster parsing via static initialization of grammars - Fix crash on invalid arc index - GeoJSON plugin - Now supporting optional `bbox` property on layer - Fixed support for reporting correct `feature.id()` - Now supports `inline` string for passing data from memory - Faster parsing via static initialization of grammars - SQLite plugin - Fixed support for handling all column types - CSV Plugin - Added the ability to pass an `extent` in options - PostGIS plugin - Added Async support to - https://github.com/mapnik/mapnik/wiki/PostGIS-Async - Added support for rendering 3D and 4D geometries (previously silently skipped) (#44) - Added support for web fonts: `.woff` format (#2113) - Added missing support for `geometry-transform` in `line-pattern` and `polygon-pattern` symbolizers (#2065) - Dropped support for Sun compiler - Upgraded unifont to `unifont-6.3.20131020` - Fixed crash when rendering to cairo context from python (#2031) - Moved `label-position-tolerance` from `unsigned` type to `double` - Added support for more seamless blurring by rendering to a larger internal image to avoid edge effects (#1478) - Fixed rendering of large shapes at high zoom levels, which might dissapear due to integer overflow. This bug was previously fixable when geometries were clipped, but would, until now, re-appear if clipping was turned off for a symbolizer (#2000) - Added single color argument support to `colorize-alpha` to allow colorizing alpha with one color. - Added `color-to-alpha` `image-filter` to allow for applying alpha in proportion to color similiarity (#2023) - Fixed alpha handling bug with `comp-op:dst-over` (#1995) - Fixed alpha handling bug with building-fill-opacity (#2011) - Optimized mapnik.Path.to_wkb - Python: added `__geo_interface__` to mapnik.Feature and mapnik.Path (#2009) - Python: Exposed optimized WKTReader for parsing WKT into geometry paths (6bfbb53) - Optimized expression evaluation of text by avoiding extra copy (1dd1275) - Added Map level `background-image-comp-op` to control the compositing operation used to blend the `background-image` onto the `background-color`. Has no meaning if `background-color` or `background-image` are not set. (#1966) - Added Map level `background-image-opacity` to dynamically set the opacity of the `background-image` (#1966) - Removed `RENDERING_STATS` compile option since it should be replaced with a better solution (#1956) - Added support to experimental `svg_renderer` for grouping layers for inkscape and illustrator (#1917) - Fixed compile of python bindings against Python 3.x - Optimized SVG loading by improving color parsing speed (#1918) - Fixed startup problem when fonts cannot be read due to lacking permissions (#1919) - Fixed bad behavior when negative image dimensions are requested (#1927) - Fixed handling of `marker-ignore-placement:true` when `marker-placement:line` (#1931) - Fixed handling of svg `opacity` in Cairo renderer (#1943) - Fixed handling of SVG files which contain empty `` (#1944) - Fixed various 32bit test failures - Fixed compile against icu when by using `U_NAMESPACE_QUALIFIER` - Fixed missing support for using PathExpression in `marker-file` (#1952) - Added support for `line-pattern-offset` (#1991) - Added support for building on Android (tested with `android-ndk-r9`) - Added support for compiling with both -ansi (aka -std=c++98) and -std=c++11 - Added support for compiling and linking on OS X against libc++ - Fixed regression in handling `F` type dbf fields, introduced in v2.2.0. - Added the ability to create a mapnik Feature from a geojson feature with `mapnik.Feature.from_geojson` in python. - Added to python bindings: `has_tiff`, `has_png`, `has_webp`, `has_proj4`, `has_svg_renderer`, and `has_grid_renderer` - Made it possible to disable compilation of `grid_renderer` with `./configure GRID_RENDERER=False` (#1962) - Added `premultiplied` property on mapnik::image_32 / mapnik.Image to enable knowledge of premultiplied status of image buffer. - Added `webp` image encoding and decoding support (#1955) - Added `scale-hsla` image-filter that allows scaling colors in HSL color space. RGB is converted to HSL (hue-saturation-lightness) and then each value (and the original alpha value) is stretched based on the specified scaling values. An example syntax is `scale-hsla(0,1,0,1,0,1,0,1)` which means no change because the full range will be kept (0 for lowest, 1 for highest). Other examples are: 1) `scale-hsla(0,0,0,1,0,1,0,1)` which would force all colors to be red in hue in the same way `scale-hsla(1,1,0,1,0,1,0,1)` would, 2) `scale-hsla(0,1,1,1,0,1,0,1)` which would cause all colors to become fully saturated, 3) `scale-hsla(0,1,1,1,0,1,.5,1)` which would force no colors to be any more transparent than half, and 4) `scale-hsla(0,1,1,1,0,1,0,.5)` which would force all colors to be at least half transparent. (#1954) - The `shapeindex` tool now works correctly with point 3d geometry types ## 2.2.0 Released June 3rd, 2013 (Packaged from 9231205) Summary: The 2.2.0 release is primarily a performance and stability release. The code line represents development in the master branch since the release of 2.1.0 in Aug 2012 and therefore includes nearly a year of bug-fixes and optimizations. Nearly 500 new tests have been added bring the total coverage to 925. Shapefile and PostGIS datasources have benefited from numerous stability fixes, 64 bit integer support has been added to support OSM data in the grid renderer and in attribute filtering, and many fixes have landed for higher quality output when using a custom `scale_factor` during rendering. Critical code paths have been optimized include raster rendering, xml map loading, string to number conversion, vector reprojection when using `epsg:4326` and `epsg:3857`, `hextree` encoding, halo rendering, and rendering when using a custom `gamma`. Mapnik 2.2 also compiles faster than previous releases in the 2.x series and drops several unneeded and hard to install dependencies making builds on OS X and Windows easier than any previous release. - Removed 3 depedencies without loosing any functionality: `ltdl`, `cairomm` and `libsigc++` (#1804,#806,#1681) - Added 64 bit integer support in expressions, feature ids, and the grid_renderer (#1661,#1662,#1662) - Added the ability to disable the need for various dependencies: `proj4`, `libpng`, `libtiff`, `libjpeg` - Added faster reprojection support between `epsg:3857` and `epsg:4326` (#1705,#1703,#1579) - Added `colorize-alpha` image filter that applies user provided color gradients based on level of alpha. Accepts one or more colors separated by commas. Each color can be paired with an `offset` value separated by a space that is either `0-100%` or `0.0-1.0`. An `offset` of `0` is implied and the default. For background on where this design came from see http://www.w3.org/TR/SVG/pservers.html#GradientStops. A simple example of colorizing alpha into a "rainbow" is `colorize-alpha(blue,cyan,lightgreen, yellow, orange, red)`. An example of using offsets and the variety of supported color encodings is to produce a ramp which sharp contrast between `blue` and `cyan` is `colorize-alpha(blue 30%, cyan, yellow 0.7 , rgb(0%,80%,0%) 90%)` (#1371). - Fixed concurrency problem when using cursors in postgis plugin (#1823,#1588) - Fixed postgres connection pool leaks when using `persist_connection=false` (#1764) - Fixed postgres connection key to respect highest value of `max_size` and `initial_size` for any layer in map (#1599) - Fixed potential crash in wkb parsing when postgis returns null geometry (#1843) - Fixed blurry rendering of image and SVG icons (#1316) - Added detection of invalid srs values when loading xml (#646) - Added support for specifying a base_path as a third, optional argument to load_xml - Removed muffling of projection errors while rendering (#646) - Improved logging system (https://github.com/mapnik/mapnik/wiki/Logging) - Added support for reading images from in memory streams (#1805) - Optimized halo rendering. When halo radius is < 1 new method will be used automatically (#1781) - Added `text-halo-rasterizer` property. Set to `fast` for lower quality but faster halo rendering (#1298) which matched new default method when radius is < 1. - Added support in `shape`, `sqlite`, `geojson`, and `csv` plugin for handling non-latin characters in the paths to file-based resources (#1177) - Fixed rendering of markers when their size is greater than the specified `spacing` value (#1487) - Fixed handling of alpha premultiplication in image scaling (#1489) - Optimized rendering when a style with no symbolizers is encountered (#1517) - Optimized string handling and type conversion by removing `boost::to_lower`, `boost::trim`, and `boost::lexical_cast` usage (#1687,#1687,#1633) - Optimized alpha preserving `hextree` method for quantization of png images (#1629) - Faster rendering of rasters by reducing memory allocation of temporary buffers (#1516) - Fixed some raster reprojection artifacts (#1501) - Fixed raster alignment when width != height and raster is being scaled (#1748,#1622) - Added support for caching rasters for re-use during rendering when styling more than once per layer (#1543) - Improved compile speeds of the code - in some cases by up to 2x and removed need for freetype dependency when building code against mapnik (#1688, #1756) - Removed internal rule cache on `mapnik::Map` c++ object (#1723) - Improved the scaled rendering of various map features when using `scale_factor` > 1 (#1280,#1100,#1273,#1792,#1291,#1344,#1279,#1624,#1767,#1766) - Added C++ api for overriding scale_denominator to enable rendering at fixed scale (#1582) - Added Layer `buffer-size` that can be used to override Map `buffer-size` to avoid over-fetching of data that does not need to be buffered as much as other layers. Map level `buffer-size` will be default if layers do not set the option. Renamed a previously undocumented parameter by the same name that impacted clipping extent and was not needed (clipping padding should likely be a symbolizer level option) (#1566) - Fixed potential file descriptor leaks in image readers when invalid images were encountered (#1783) - Fixed alpha handling in the `blur` and `invert` image filters (#1541) - Fixed error reporting in the python plugin (#1422) - Added the ability to run tests without installing with `make test-local` - Reduced library binary size by adding support for `-fvisibility-inlines-hidden` and `-fvisibility=hidden` (#1826,#1832) - Added `mapnik::map_request` class, a special object to allow passing mutable map objects to renderer (#1737) - Added the ability to use `boost::hash` on `mapnik::value` types (#1729) - Removed obsolete `geos` plugin (functionality replaced by `csv` plugin) and unmaintained `kismet` plugin (#1809,#1833) - Added new `mapnik-config` flags: `--all-flags`, `--defines`, `--git-describe`, `--includes`, `--dep-includes`, `--cxxflags`, `--cxx` (#1443) - Added support for unicode strings as arguments in python bindings (#163) - Added DebugSymbolizer which is able to render the otherwise invisible collision boxes (#1366) - Optimized rendering by reducing overhead of using `gamma` property (#1174) - Fixed rendering artifacts when using `polygon-gamma` or `line-gamma` equal to 0 (#761,#1763) - Fixed and optimized the display of excessive precision of some float data in labels (#430,#1697) - Removed the `bind` option for datasources (#1654) - Added ability to access style list from map by (name,obj) in python (#1725) - Added `is_solid` method to python mapnik.Image and mapnik.ImageView classes (#1728) - Changed scale_denominator C++ interface to take scale as first argument rather than map. - Added support for `background-image` in cairo_renderer (#1724) - Fixed building symbolizer rendering to be fully sensitive to alpha (8b66128c892 / bc8ea1c5a7a) - `[attr]` now returns false if attr is an empty string (#1665) - `[attr]!=null` now returns true if attr is not null (#1642) - Added support for DBF `Logical` type: #1614 - Added serialization of `line-offset` to save_map (#1562) - Enabled default input plugin directory and fonts path to be set inherited from environment settings in python bindings to make it easier to run tests locally (#1594). New environment settings are: - MAPNIK_INPUT_PLUGINS_DIRECTORY - MAPNIK_FONT_DIRECTORY - Added support for controlling rendering behavior of markers on multi-geometries `marker-multi-policy` (#1555,#1573) - Added alternative PNG/ZLIB implementation (`miniz`) that can be enabled with `e=miniz` (#1554) - Added support for setting zlib `Z_FIXED` strategy with format string: `png:z=fixed` - Fixed handling of transparency level option in `octree` png encoding (#1556) - Added ability to pass a pre-created collision detector to the cairo renderer (#1444) - Tolerance parameter is now supported for querying datasources at a given point (#503/#1499) - Improved detection of newlines in CSV files - now more robust in the face of mixed newline types (#1497) - Allow style level compositing operations to work outside of featureset extents across tiled requests (#1477) - Support for encoding `literal` postgres types as strings 69fb17cd3/#1466 - Fixed zoom_all behavior when Map maximum-extent is provided. Previously maximum-extent was used outright but now the combined layer extents will be again respected: they will be clipped to the maximum-extent if possible and only when back-projecting fails for all layers will the maximum-extent be used as a fallback (#1473) - Compile time flag called `PLUGIN_LINKING` to allow input datasource plugins to be statically linked with the mapnik library (#249) - Fixed `dasharray` rendering in cairo backend (#1740) - Fixed handling of `opacity` in svg rendering (#1744) - Fixed uneven rendering of markers along lines (#1693) - Fixed handling of extra bytes in some shapefile fields (#1605) - Fixed handling (finally) of null shapes and partially corrupt shapefiles (#1630,#1621) - Added ability to re-use `mapnik::image_32` and `mapnik::grid` by exposing a `clear` method (#1571) - Added support for writing RGB (no A) png images by using the format string of `png:t=0` (#1559) - Added experimental support for geometry simplification at symbolizer level (#1385) ## Mapnik 2.1.0 Released Aug 23, 2012 (Packaged from a25aac8) - Feature-level compositing (comp-op) for all symbolizers (except building) in AGG and Cairo renderers (#1409) - Style-level compositing (comp-op) (#1409) and style-level opacity for AGG renderer (#314) - New experimental framework for image manipulation called `image-filters` to allow things to be done across entire layer canvas like burring (#1412) - Support for recoloring stroke, fill, and opacity of SVG files (#1410 / #659) - Support for data-driven transform expressions (#664) - New support for offsetting geometries / parallel lines in line_symbolizer (#927/#1269) - New support for clipping geometries - now default enabled on all symbolizers (#1116) - Framework for chainable geometry transformations (called `vertex_converters`) so that you can do things like clip, smooth, and offset at the same time (#927) - WKT parsing now is more robust and supports multi-geometries (#745) - New support for outputting WKT/WKB/GeoJSON/SVG from mapnik.Geometry objects (#1411) - New experimental python datasource plugin (#1337) - New experimental geojson datasource plugin using in-memory rtree indexing (#1413) - Cairo rendering is now much more similiar to AGG rendering as cairo backend now supports `scale_factor` (#1280) and other fixed have landed (#1343, #1233, #1344, #1242, #687, #737, #1006, #1071) - mapnik::Feature objects and datasource plugins now use a `Context` to store attribute schemas to reduce the memory footprint of features (#834) - Added Stroke `miterlimit` (#786) - Python: exposed Map `background_image` (and aliased `background` to `background_color`) - Python: exposed BuildingSymbolizer - Support in the CSV plugin for reading JSON encoded geometries (#1392) - Increased grid encoding performance (#1315) - Added support for setting opacity dynamically on images in polygon pattern and markers symbolizers - Added support for filtering on a features geometry type, either `point`, `linestring`, `polygon`, or `collection` using the expression keyword of `[mapnik::geometry_type]` (#546) - MarkersSymbolizer width and height moved to expressions (#1102) - PostGIS: Added `simplify_geometries` option - will trigger ST_Simplify on geometries before returning to Mapnik (#1179) - Improved error feedback for invalid values passed to map.query_point - Fixed rendering of thin svg lines (#1129) - Improved logging/debugging system with release logs and file redirection (https://github.com/mapnik/mapnik/wiki/Runtime-Logging) (#937 and partially #986, #467) - GDAL: allow setting `nodata` value on the fly (will override value if `nodata` is set in data) (#1161) - GDAL: respect `nodata` for paletted/colormapped images (#1160) - PostGIS: Added a new option called `autodetect_key_field` (by default false) that if true will trigger autodetection of the table primary key allowing for feature.id() to represent globally unique ids. This option has no effect if the user has not manually supplied the `key_field` option. (#804) - Cairo: Add full rendering support for markers to match AGG renderer functionality (#1071) - Fix Markers rendering so that ellipse height/width units are pixels (previously were unintentionally radii) (#1134) - Added `ignore-placement` attribute to markers-symbolizer (#1135) - Removed PointDatasource - use more robust MemoryDatasource instead (#1032) - SQLite - Added support for !intersects! token in sql subselects (#809) allow custom positioning of rtree spatial filter. - New CSV plugin - reads tabular files - autodetecting geo columns, newlines, and delimiters. Uses in-memory featureset for fast rendering and is not designed for large files (#902) - Fixed bug in shield line placement when dx/dy are used to shift the label relative to the placement point (Matt Amos) (#908) - Added parameter in OGR plugin to select a layer by SQL query (besides name or index): see http://www.gdal.org/ogr/ogr_sql.html for specifications (kunitoki) (#472) - Added support for output maps as tiff files (addresses #967 partially) - Added support for justify-alignment=auto. This is the new default. (#1125) - Added support for grouped rendering using the `group-by` layer option: https://github.com/mapnik/mapnik/wiki/Grouped-rendering ## Mapnik 2.0.2 Released Aug 3, 2012 (Packaged from adb2ec741) - Fixed handling of empty WKB geometries (#1334) - Fixed naming of `stroke-dashoffset` in save_map (cc3cd5f63f28) - Fixed support for boost 1.50 (8dea5a5fe239233) - Fixed TextSymbolizer placement in Cairo backend so it respects avoid-edges and minimum-padding across all renderers (#1242) - Fixed ShieldSymbolizer placement so it respects avoid-edges and minimum-padding across all renderers (#1242) - Rolled back change made in 2.0.1 to marker width/height meaning that Mapnik > 2.0.2 will stick to assuming width/heigh are radii for back compatibility with 2.0.0. The reverted change is seen below as "Fix Markers rendering so that ellipse height/width units are pixels (previously were unintentionally radii)". Issue tracking this is #1163 - XML: Fixed to avoid throwing if a `` element is encountered (which is supported in >= 2.1.x) - Support for PostGIS 2.0 in the pgsql2sqlite command (e69c44e/47e5b3c) - Fixed reference counting of Py_None when returning null attributes from Postgres during UTFGrid encoding, which could cause a Fatal Python error: deallocating None (#1221) - Fixed possible breakage registering plugins via python if a custom PREFIX or DESTDIR was used (e.g. macports/homebrew) (#1171) - Fixed memory leak in the case of proj >= 4.8 and a projection initialization error (#1173) ## Mapnik 2.0.1 Released April 10, 2012 (Packaged from 57347e9106) - Support for PostGIS 2.0 (#956,#1083) - Switched back to "libmapnik" and "import mapnik" rather than "mapnik2" (mapnik2 will still work from python) (#941) - Restored Python 2.5 compatibility (#904) - Fixed `mapnik-config --version` (#903) - Cairo: Add full rendering support for markers to match AGG renderer functionality (#1071) - Fix Markers rendering so that ellipse height/width units are pixels (previously were unintentially radii) (#1134) - Added `ignore-placement` attribute to markers-symbolizer (#1135) - Removed svn_revision info from mapnik-config and python bindings as git is now used - Removed OGCServer from core - now at https://github.com/mapnik/OGCServer (e7f6267) - Fixed SQLite open stability across platforms/versions (#854) - Workaround for boost interprocess compile error with recent gcc versions (#950,#1001,#1082) - Fix possible memory corruption when using `hextree` mode for png color reduction (#1087) - Fixed bug in shield line placement when dx/dy are used to shift the label relative to the placement point (Matt Amos) (#908) - Fix to avoid modifying a feature if an attribute is requested that does not exist (0f5ab18ed) - Fixed ability to save to jpeg format from python (7387afd9) (#896) ## Mapnik 2.0.0 Released September 26, 2011 (Packaged from 5b4c20eab3) - Add minimum-path-length property to text_symbolizer to allow labels to be placed only on lines of a certain length (#865) - Add support for png quantization using fixed palettes (#843) - Add AlsoFilter functionality - https://github.com/mapnik/mapnik/wiki/AlsoFilter - SQLite Plugin: optimize i/o using shared cache and no mutexes (#797) - Directly link input plugins to libmapnik to avoid having to set dlopen flags from binding languages (#790) - Throw an error during registration for fonts which Freetype2 does not report a family or style name (r2985). - Fixed quoting syntax for "table"."attribute" in PostGIS plugin (previously if table aliases were used quoting like "table.attribute" would cause query failure) (r2979). - Added the ability to control the PostGIS feature id by suppling a key_field to reference and integer attribute name (r2979). - Added alternative, more robust proj_transform functions to project a bbox using more points than just the four corners to ensure an optimally sized bbox despite proj4 out of bounds conditions. (olt) - Added map.base parameter that can be set to control where files with relative paths should be interpreted from when a map is loaded from a string or saved to a string. It defaults to an empty string which means that the base path will be the current working directory of the mapnik process. When a stylesheet is read from a file that files directory is used. And a custom value can still be passed as an argument to load_map_from_string(). - Added python function `render_grid` to allow conversion of grid buffer to python object containing list of grid pixels, list of keys, and a and dictionary of feature attributes. - Added new rendering backend, grid_renderer, that collects the attributes of rendered features and burns their ids into a grid buffer. - Added optional `maximum-extent` parameter to map object. If set will be used, instead of combined layer extents, for return value of map.zoom_all(). Useful in cases where the combined layer extents cannot possibly be projected into the map srs or the user wishes to control map bounds without modifying the extents of each layer. - Support for `nodata` values with grey and rgb images in GDAL plugin (#727) - Print warning if invalid XML property names are used (#110) - Made XML property names use consistent dashes, never underscores (#644) - Added support for drawing only first matching rule using filter-mode="first" in Style (#706) - Added support to PointSymbolizer (`ignore_placement`) for skipping adding placed points to collision detector (#564) - Added ability to register fonts within XML using Map level `font-directory` parameter (#168) - TextSymbolizer: Change text_convert to text_transform to better match css naming (r2211) - Shapefile Plugin: Throw error if attribute name is requested that does not exist (#604) - Upgraded to the latest proj4 string literal for EPSG:4326 (WGS84) as global default projection (#333) - Added `mapnik_version_from_string()` function in python bindings to easily convert string representation of version number to the integer format used in `mapnik/version.hpp`. e.g. `0.7.1` --> `701`. - Added xinclude (http://www.w3.org/TR/xinclude/) support to libxml2-based xml parser (oldtopos) (#567) - Optimized rendering speeds by avoiding locking in the projection code (r2063) (r2713) - Added support for setting global alignment of polygon pattern fills (#203) - Added support for choosing OGR layer by index number using `layer_by_index` parameter (r1904) - Added support for fractional halo widths (using FT Stroker) (#93) - Added support for reading jpeg images (in addition to png/tiff) for image symbolizers (#518) - Made libjpeg dependency optional at compile time and added mapnik2.has_jpeg() method to check for support in python (#545). - Fixed reading of PostGIS data on Big Endian systems (#515) - PostGIS: Added better support for alternative schemas (#500) - AGG Renderer - Enforced default gamma function on all symbolizers to ensure proper antialiasing even when gamma is modified on the PolygonSymbolizer. (#512) - Added ability to read pre 2.0.0 stylesheets, but prints a warning for deprecated syntax (r1592, #501) - Rasterlite Plugin: Experimental support for Rasterlite, to practically use sqlite database with wavelet compressed rasters (#469) - PNG: fixed png256 for large images and some improvements to reduce color corruptions (#522) - Implement MarkersSymbolizer in Cairo render and improve the markers placement finder. (#553) # Mapnik 0.7.2 Released Oct 18, 2011 (Packaged from bc5cabeb6a) - Added forward compatibility for Mapnik 2.0 XML syntax (https://github.com/mapnik/mapnik/wiki/Mapnik2/Changes) - Build fixes to ensure boost_threads are not used unless THREADING=multi build option is used - Fixes for the clang compiler - Support for latest libpng (>= 1.5.x) (r2999) - Fixes to the postgres pool - Fix for correct transparency levels in png256/png8 output (#540) - Various build system fixes, especially for gcc compiler on open solaris. - When plugins are not found, report the searched directories (#568) - Improved font loading support (#559) - Fix to shapeindex for allowing indexing of directory of shapefiles like `shapeindex dir/*shp` - Fixed handling of null and multipatch shapes in shapefile driver - avoiding inf loop (#573) - Fixed raster alpha blending (#589,#674) - Enhanced support for faster reprojection if proj >= 4.8 is used (#575) - Allow for late-binding of datasources (#622) - Fix to OSM plugin to avoid over-caching of data (#542) - Various fixes to sqlite, ogr, and occi driver backported from trunk. - Ensured that `\n` triggers linebreaks in text rendering (#584) - Support for boost filesystem v3 - Fixes to cairo renderer to avoid missing images (r2526) - Fixed reading of label_position_tolerance on text_symbolizer and height for building_symbolizer # Mapnik 0.7.1 Released March 23, 2010 (Packaged from r1745/db89f1ca75) - Rasters: Various fixes and improvements to 8bit png output ([#522](https://github.com/mapnik/mapnik/issues/522),[#475](https://github.com/mapnik/mapnik/issues/475)) - XML: Save map buffer_size when serializing map. - SCons: Added new build options `PRIORITIZE_LINKING` and `LINK_PRIORITY`. The first is a boolean (default True) of whether to use the new sorting implementation that gives explcit preference to custom or local paths during compile and linking that will affect builds when duplicate libraries and include directories are on the system. LINK_PRIORITY defaults to prioritizing internal sources of the mapnik source folder, then local/user installed libraries over system libraries, but the option can be customized. Sorting not only ensures that compiling and linking will more likely match the desired libraries but also gives more likelyhood to avoid the scenario where libraries are linked that don`t match the includes libmapnik compiled against. - XML: Fixed behavior of PolygonPatternSymbolizer and LinePatternSymbolizer whereby width, height, and type of images is actually allowed to be optionally ommitted ([#508](https://github.com/mapnik/mapnik/issues/508)). This was added in r1543 but only worked correctly for PointSymbolizer and ShieldSymbolizer. - Fixed reading of PostGIS data on Big Endian systems ([#515](https://github.com/mapnik/mapnik/issues/515)) - PostGIS: Added better support for alterative schemas ([#500](https://github.com/mapnik/mapnik/issues/500)) - AGG Renderer - Enforced default gamma function on all symbolizers to ensure proper antialiasing even when gamma is modified on the PolygonSymbolizer. ([#512](https://github.com/mapnik/mapnik/issues/512)) - PNG: fixed png256 for large images and some improvements to reduce color corruptions ([#522](https://github.com/mapnik/mapnik/issues/522)) - PNG: Added new quantization method for indexed png format using `hextree` with full support for alpha channel. Also new method has some optimizations for color gradients common when using elevation based rasters. By default old method using `octree` is used. (r1680, r1683, [#477](https://github.com/mapnik/mapnik/issues/477)) - PNG: Added initial support for passing options to png writter like number of colors, transparency support, quantization method and possibly other in future using type parameter. For example "png8:c=128:t=1:m=h" limits palette to 128 colors, uses only binary transparency (0 - none, 1 - binary, 2 - full), and new method of quantization using `hextree` (h - `hextree`, o - `octree`). Existing type "png256" can be also written using "png8:c=256:m=o:t=2" (r1680, r1683, [#477](https://github.com/mapnik/mapnik/issues/477)) # Mapnik 0.7.0 Released January, 19 2010 (Packaged from r1574/a0da946be9) - Core: Fixed linking to external libagg (r1297,r1299) - Core: Completed full support for PPC (Big endian) architectures (r1352 -> r1357) - Gdal Plugin: Added support for Gdal overviews, enabling fast loading of > 1GB rasters (#54) * Use the gdaladdo utility to add overviews to existing GDAL datasets - PostGIS: Added an optional `geometry_table` parameter. The `geometry_table` used by Mapnik to look up metadata in the geometry_columns and calculate extents (when the `geometry_field` and `srid` parameters are not supplied). If `geometry_table` is not specified Mapnik will attempt to determine the name of the table to query based on parsing the `table` parameter, which may fail for complex queries with more than one `from` keyword. Using this parameter should allow for existing metadata and table indexes to be used while opening the door to much more complicated subqueries being passed to the `table` parameter without failing (#260, #426). - PostGIS Plugin: Added optional `geometry_field` and `srid` parameters. If specified these will allow Mapnik to skip several queries to try to determine these values dynamically, and can be helpful to avoid possible query failures during metadata lookup with complex subqueries as discussed in #260 and #436, but also solvable by specifying the `geometry_table` parameter. (r1300,#376) - PostGIS: Added an optional `extent_from_subquery` parameter that when true (while the `extent` parameter is not provided and `estimate_extent` is false) will direct Mapnik to calculate the extent upon the exact table or sql provided in the `table` parameter. If a sub-select is used for the table parameter then this will, in cases where the subquery limits results, provide a faster and more accurate layer extent. It will have no effect if the `table` parameter is simply an existing table. This parameter is false by default. (#456) - PostGIS Plugin: Added `!bbox!` token substitution ability in sql query string. This opens the door for various complex queries that may aggregate geometries to be kept fast by allowing proper placement of the bbox query to be used by indexes. (#415) * Pass the bbox token inside a subquery like: !bbox! * Valid Usages include: (Select ST_Union(geom) as geom from table where ST_Intersects(geometry,!bbox!)) as map (Select * from table where geom && !bbox!) as map - PostGIS Plugin: Added `scale_denominator` substitution ability in sql query string (#415/#465) * Pass the scale_denominator token inside a subquery like: !scale_denominator! * e.g. (Select * from table where field_value > !scale_denominator!) as map - PostGIS Plugin: Added support for quoted table names (r1454) (#393) - PostGIS: Add a `persist_connection` option (default true), that when false will release the idle psql connection after datasource goes out of scope (r1337) (#433,#434) - PostGIS: Added support for BigInt (int8) postgres type (384) - PostGIS Plugin: Throw and report errors if SQL execution fails (r1291) (#363, #242) - PostGIS Plugin: Fixed problem in conversion of long numbers to strings (r1302,1303) - PostGIS Plugin: Added missing support for BigInt(int8) postgres datatypes (r1250) (#384) - OGR Plugin: Added support for reading multipoint features (#458) - Shape Plugin: Fixed bug in file extension stripping (#413) - Shape Plugin: Fixed missing compiler flags that causes crashing on newer g++ versions (#436) - PNG: Fixed problem with garbled/striped png256 output along sharp edges(#416,#445,#447,#202) - PNG: Added support for semi-transparency in png256 output (#477,#202) - PolygonSymbolizer: Added `gamma` attribute to allow for dilation of polygon edges - a solution to gap artifacts or "ghost lines" between adjacent polygons and allows for slight sharpening of the edges of non overlapping polygons. Accepts any values but 0-1 is the recommended range. - TextSymbolizer: Large set of new attributes: `text_transform`, `line_spacing`, `character_spacing`, `wrap_character`, `wrap_before`, `horizontal_alignment`, `justify_alignment`, and `opacity`. * More details at changesets: r1254 and r1341 - SheildSymbolizer: Added special new attributes: `unlock_image`, `VERTEX` placement, `no_text` and many attributes previously only supported in the TextSymbolizer: `allow_overlap`, `vertical_alignment`, `horizontal_alignment`, `justify_alignment`, `wrap_width`, `wrap_character`, `wrap_before`, `text_transform`, `line_spacing`, `character_spacing`, and `opacity`. * More details at changeset r1341 - XML: Added support for using CDATA with libxml2 parser (r1364) - XML: Fixed memory leak in libxml2 implementation (#473) - XML: Added function to serialize map to string, called `mapnik.save_map_to_string()` (#396) - XML: Added parameter to called `minimum_version` to allow for enforcing the minimum Mapnik version needed for XML features used in the mapfiles. Uses Major.Minor.Point syntax, for example would throw an error if the user is running Mapnik less than 0.6.1. - XML: Added support for relative paths when using entities and `mapnik.load_map_from_string()` (#440) - XML: Made width and height optional for symbolizers using images (r1543) - XML: Ensured that default values for layers are not serialized in save_map() (r1366) - XML: Added missing serialization of PointSymbolizer `opacity` and `allow_overlap` attributes (r1358) - XML: Default text vertical_alignment now dependent on dy (#485, r1527) - Python: Exposed ability to write to Cairo formats using `mapnik.render_to_file()` and without pycairo (#381) - Python: Fixed potential crash if pycairo support is enabled but python-cairo module is missing (#392) - Python: Added `mapnik.has_pycairo()` function to test for pycairo support (r1278) (#284) - Python: Added `mapnik.register_plugins()` and `mapnik.register_fonts()` functions (r1256) - Python: Pickling support for point_symbolizer (r1295) (#345) - Python: Ensured mapnik::config_errors now throw RuntimeError exception instead of UserWarning exception (#442) - Filters: Added support for `!=` as an alias to `<>` for not-equals filters (avoids <>) (r1326) (#427) - SCons: Improved boost auto-detection (r1255,r1279) - SCons: Fixed support for JOBS=N and FAST=True to enable faster compiling (r1440) - SCons: Ensured that -h or --help will properly print help on custom Mapnik options before a user has been able to properly run `configure`. (r1514) - SCons: Added ability to link to custom icu library name using ICU_LIB_NAME (r1414) - SCons: Improved reliability of python linking on OSX (#380) - Fonts: Added unifont to auto-installed fonts, which is used by the OSM styles as a fallback font (r1328) # Mapnik 0.6.1 Released July 14, 2009 (Packaged from r1247/353ff576c7) - Plugins: expose list of registered plugins as a `plugin_names()` method of DatasourceCache (r1180) - XML: Fixed serialization and parsing bugs related to handling of integers and Enums (#328,#353) - SCons: Added the ability to set the PKG_CONFIG_PATH env setting (#217) - SCons: Improved linking to only required libraries for libmapnik (#371) - Shape Plugin: Added compile time flag to allow disabling the use of memory mapped files (r1213) (#342) - Core: Improved support for PPC (Big endian) architectures (r1198 -> r1213) - Scons: Improved auto-detection of boost libs/headers (r1200) (#297) - Plugins: Exposed list of available/registered plugins (r1180) (#246) - SCons: Improve build support for SunCC (patches from River Tarnell) (r1168, r1169) - Python: Pickling support for text_symbolizer (r1164) (#345) - Python: Pickling support for proj_transform and view/coord_transform (r1163) (#345) - Python: Pickling support for parameters (r1162) (#345) - Python: Pickling support for stroke objects (r1161) (#345) - Python: Pickling support for line_symbolizer (r1160) (#345) - Python: Pickling support for projection objects (r1159) (#345) - Python: Pickling support for shield_symbolizer (r1158) (#345) - Python: Pickling support for polygon_symbolizer (r1157) (#345) - Python: Pickling support for query objects (r1156) (#345) - Python: Pickling support for pattern symbolizers (r1155) (#345) - Python: Pickling support for raster_symbolizer (r1154) (#345) - Python: Added `mapnik.has_cairo()` function to test for cairo support (r1152) (#284) - Python: Exposed dash_array get method (r1151) (#317) - Python: Pickling support for Coord objects (#345) - GDAL Plugin: Added an experimental option to open files in `shared mode` (r1143) - Python: Exposed RasterSymbolizer options in Python (r1139) - Plugins: Fixed support for non-file based sources in GDAL and OGR plugins (#336,#337) - Plugins: Formal inclusion of new plugin for Kismet server (r1127) (#293) - Python: Made access to features and featuresets more Pythonic (r1121) (#171,#280,#283) - XML: Ensured relative paths in XML are interpreted relative to XML file location (r1124) (#326) - XML: Added ability to serialize all default symbolizer values by passing third argument to save_map(m,`file.xml`,True)(r1117) (#327) - Core: Added support for alpha transparency when writing to png256 (patch from Marcin Rudowski) (#202) - SCons: Ensured ABI compatibility information is embedded in libmapnik.dylib on Mac OS X (#322) - SCons: Ensured that the full `install_name` path would be added to libmapnik.dylib on Mac OS X (#374) - Tests: Added testing framework in Python using nose (r1101-r1105) - Raster Plugin: Added a tile/bbox-based read policy for large (rasters width * height > 1024*1024 will be loaded in chunks) (r1089) - OGCServer: Made lxml dependency optional (r1085) (#303) - Rasters: Handle rounding to allow better alignment of raster layers (r1079) (#295) - AGG Renderer: Added option to control output JPEG quality (r1078) (#198) - Plugins: Fixed segfault in OGR Plugin with empty geometries (r1074) (#292) # Mapnik 0.6.0 Released April 1, 2009 (Packaged from r1066/c88e03436f) - Python: Added support for aspect_fix_mode (r1013) - OGCServer Fixed axis-ordering for WMS 1.3.0 request (r1051) (#241) - Plugins: Added option to all plugins to support using a `base` path argument (r1042) - Symbolizers: RasterSymbolizer now support composing modes for hillshading (r1027) - SCons: Added options to build the rundemo and pgsql2sqlite tools (r989) - OGCServer: Added content-length output (r986) - SCons: Replaced LIBS/INCLUDES options for postgres and gdal with pg_config and gdal-config (r977) - SCons: Created an optional configure stage (r973) - Python: Added further pickling/copy support to Map, Layers, Datasources, Styles,and Rules (r907,r913,r921) - Plugins: Added Sqlite driver for reading sqlite databases (r881) - Python: Exposed a number of properties for the Text Symbolizer (r869) - Plugins: PostGIS plugin now accepts multi-line queries (r862) - Filter parsing: Allow numbers in the filter field name. This allows for shapefiles with columns like `1970`. - Plugins: Added OGR driver for reading all OGR supported formats (kunitoki) (r836) (#170) - XML: Added serialization of Fontsets (r807) - XML: Added support for reading xml from a string (r806) - C++: renamed mapnik::Color to mapnik::color (r796) - Python: Made available the scale_denominator property from the map in c++ and python (r794) - Python: Added ability to resize map and clear all layers and styles from python (r793) - Python: Exposed Proj to/from transformation for projected coordinate systems (r792,r822) (#117) - Memory Datasource: Added support for dynamically adding Points to map using Point Datasource (r790) - XML: Added xml serialization for abstract, title, minzoom, maxzoom, and queryable attributes (r787) - Core: Transformation is now skipped if srs values match exactly (r777) - Symbolizers: `min_distance` now honored for POINT placement using Text Symbolizer (r771) - Plugins: PostGIS plugin now accepts a geometry_field,record_limit, cursor_size options (r769,r872) - Python: Added ability to transform as a method on Coord and Envelope objects (r764) - Python: Added docstrings to the Layer object (r763) - Plugins: Loosened the type checking in Shapefile Plugin dbf reader (r762) - Fonts: Added support for Right-to-left Hebrew text (r749) - Core: Added a Map buffer parameter - helps to avoid cut labels at tile edges (r744) - Symbolizers: Added opacity support to Point Symbolizer (r743) - Symbolizers: Added support of using Points with Shield Symbolizer (r741) - Plugins: PostGIS plugin now accepts alternate schemas (r773) - Core: Added a Map aspect_fix_mode to ensure proper syncing of map dimensions and bbox (r705) - Fonts: Added support for fallback fonts (r704) - Cairo: Cairo support exposed in Python (r666) - Plugins: Added OSM plugin for reading directly from OSM data (r663) - Filters: Added support for boolean expressions (r660) - Python: Added ability to open Image32 files (r652) - Cairo: Cairo rendering support added (r656) - Core: Added unicode support based on ICU (r650) - Core: Added support for single and multi threaded variants of Mapnik (r632,r634) - Plugins: Use memory mapped files for reading shape file (r628) - Core: Use streams to write images (i/o refactor) (r628) (#15) # Mapnik 0.5.1 Released April 15, 2008 (Packaged from c29cb7386d) # Mapnik 0.5.0 Released April 15, 2008 (Packaged from 0464a3563c) # Mapnik 0.4.0 Released February 26, 2007 (Packaged from 8d73e3a8dc) # Mapnik 0.3.0 Released May 22, 2006 (Packaged from 3ae046ebe2) mapnik-3.0.9/CODE_OF_CONDUCT.md000066400000000000000000000036741262555547000156260ustar00rootroot00000000000000# Contributor Code of Conduct As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery * Personal attacks * Trolling or insulting/derogatory comments * Public or private harassment * Publishing other's private information, such as physical or electronic addresses, without explicit permission * Other unethical or unprofessional conduct. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)mapnik-3.0.9/COPYING000066400000000000000000000636311262555547000140610ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! mapnik-3.0.9/INSTALL.md000066400000000000000000000121361262555547000144500ustar00rootroot00000000000000# Mapnik Installation Mapnik runs on Linux, OS X, Windows, and BSD systems. To configure and build Mapnik do: ```bash ./configure make ``` To trigger parallel compilation you can pass a JOBS value to make: ```bash JOBS=4 make ``` Mapnik needs > 2 GB of RAM to build. If you use parallel compilation it needs more. If you are on a system with less memory make sure you only build with one JOB: ```bash JOBS=1 make ``` To use a Python interpreter that is not named `python` for your build, do something like the following instead: ```bash $ PYTHON=python2 ./configure $ make PYTHON=python2 ``` NOTE: the above will not work on windows, rather see https://github.com/mapnik/mapnik/wiki/WindowsInstallation Then to run the tests locally (without needing to install): git submodule update --init make test Install like: make install If you need to uninstall do: make uninstall For more details see the `Building` Section below. Platform specific install guides at https://github.com/mapnik/mapnik/wiki/Mapnik-Installation For troubleshooting help see https://github.com/mapnik/mapnik/wiki/InstallationTroubleshooting ## Depends Build system dependencies are: * C++ compiler supporting `-std=c++11` (like >= g++ 4.8 or >= clang++ 3.4) * >= 2 GB RAM (> 5 GB for g++) * Python 2.4-2.7 * Scons (a copy is bundled) Mapnik Core depends on: * Boost - >= 1.47 is required and >= 1.56 recommended - These libraries are used: - filesystem - system - regex (optionally built with icu regex support) - program_options (optionally for mapnik command line programs) * libicuuc >= 4.0 (ideally >= 4.2) - International Components for Unicode * libz - Zlib compression * libfreetype - Freetype2 for font support (Install requires freetype-config) * libxml2 - XML parsing (Install requires xml2-config) * libharfbuzz - an OpenType text shaping engine (>=0.9.34 needed for CSS font-feature-settings support) Mapnik Core optionally depends on: * libpng >= 1.2.x - PNG graphics (Default enabled, if found) * libjpeg - JPEG graphics (Default enabled, if found) * libtiff - TIFF graphics (Default enabled, if found) * libwebp - WEBP graphics (Default enabled, if found) * libproj - PROJ.4 projection library (Default enabled, if found) Additional optional dependencies: * Cairo >= 1.6.0 - Graphics library for output formats like PDF, PS, and SVG - pkg-config - Required for building with cairo support * PostgreSQL (for PostGIS plugin support) - libpq - PostreSQL libraries - pg_config - PostgreSQL installation capabilities * libgdal - GDAL/OGR input (For gdal and ogr plugin support) * libsqlite3 - SQLite input (needs RTree support builtin) (sqlite plugin support) Instructions for installing many of these dependencies on various platforms can be found at the Mapnik Wiki: https://github.com/mapnik/mapnik/wiki/Mapnik-Installation ## Building The build system uses SCons, a pure python equivalent to autotools or cmake. We provide a simple Makefile wrapper that can be used like: ./configure && make && make install For help on what options are accepted do: ./configure --help To interact with the local copy of scons directly you can do: python scons/scons.py configure You can also use a globally installed scons: scons configure If you want to clean your build do: make clean If you experience odd configure errors, try cleaning the configure caches: make distclean To install in a custom location do: ./configure PREFIX=/opt/mapnik To pass custom CXXFLAGS or LDFLAGS do: ./configure CUSTOM_CXXFLAGS="-g -I/usr/include" CUSTOM_LDFLAGS="-L/usr/lib" To pass custom paths to a dependency, like boost, do: ./configure BOOST_INCLUDES=/opt/boost/include BOOST_LIBS=/opt/boost/lib To pass custom paths to a dependency, like icu, do: ./configure ICU_INCLUDES=/usr/local/include ICU_LIBS=/usr/local/include For more details on usage see: https://github.com/mapnik/mapnik/wiki/UsingScons ## Testing Installation You can run the Mapnik tests locally (without installing) like: make test ## Python Bindings Python bindings are not included by default. You'll need to add those separately. * Build from source: https://github.com/mapnik/python-mapnik ## Learning Mapnik ### Help Mapnik has an active community of talented users and developers making beautiful maps. If you need help or want to participate starting points include: - Sign up and post to the mailing list: http://mapnik.org/contact/ - Join and ask questions on the #mapnik channel on irc://irc.freenode.net/mapnik - Add your help questions to https://github.com/mapnik/mapnik-support ### Cartographers TileMill, which uses Mapnik internally, offers great step by step tutorials for learning advanced map styling: http://mapbox.com/tilemill/docs/crashcourse/introduction/ ### Programmers Mapnik is great for building your own mapping applications. Visit https://github.com/mapnik/mapnik/wiki/LearningMapnik for basic tutorials on how to programmatically use Mapnik. ### Contributers Read docs/contributing.md for resources for getting involved with Mapnik development. mapnik-3.0.9/Makefile000077500000000000000000000100051262555547000144540ustar00rootroot00000000000000 OS := $(shell uname -s) PYTHON = python ifeq ($(JOBS),) JOBS:=1 endif all: mapnik install: $(PYTHON) scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 install release: export MAPNIK_VERSION=$(shell ./utils/mapnik-config/mapnik-config --version) && \ export TARBALL_NAME="mapnik-v$${MAPNIK_VERSION}" && \ cd /tmp/ && \ rm -rf $${TARBALL_NAME} && \ git clone --depth 1 --branch v$${MAPNIK_VERSION} git@github.com:mapnik/mapnik.git $${TARBALL_NAME} && \ cd $${TARBALL_NAME} && \ git checkout "tags/v$${MAPNIK_VERSION}" && \ git submodule update --depth 1 --init && \ rm -rf test/data/.git && \ rm -rf test/data/.gitignore && \ rm -rf test/data-visual/.git && \ rm -rf test/data-visual/.gitignore && \ rm -rf .git && \ rm -rf .gitignore && \ cd ../ && \ tar cjf $${TARBALL_NAME}.tar.bz2 $${TARBALL_NAME}/ && \ aws s3 cp --acl public-read $${TARBALL_NAME}.tar.bz2 s3://mapnik/dist/v$${MAPNIK_VERSION}/ python: if [ ! -d ./bindings/python ]; then git clone git@github.com:mapnik/python-mapnik.git --recursive ./bindings/python; else (cd bindings/python && git pull && git submodule update --init); fi; make python bindings/python/test/visual.py -q src/json/libmapnik-json.a: # we first build memory intensive files with -j1 $(PYTHON) scons/scons.py -j1 \ --config=cache --implicit-cache --max-drift=1 \ src/renderer_common/process_group_symbolizer.os \ src/json/libmapnik-json.a \ src/wkt/libmapnik-wkt.a \ src/css_color_grammar.os \ src/expression_grammar.os \ src/transform_expression_grammar.os \ src/image_filter_types.os \ src/agg/process_markers_symbolizer.os \ src/agg/process_group_symbolizer.os \ src/grid/process_markers_symbolizer.os \ src/grid/process_group_symbolizer.os \ src/cairo/process_markers_symbolizer.os \ src/cairo/process_group_symbolizer.os \ mapnik: src/json/libmapnik-json.a # then install the rest with -j$(JOBS) $(PYTHON) scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 clean: @$(PYTHON) scons/scons.py -j$(JOBS) -c --config=cache --implicit-cache --max-drift=1 @if test -e ".sconsign.dblite"; then rm ".sconsign.dblite"; fi @if test -e "config.log"; then rm "config.log"; fi @if test -e "config.cache"; then rm "config.cache"; fi @if test -e ".sconf_temp/"; then rm -r ".sconf_temp/"; fi @find ./ -name "*.pyc" -exec rm {} \; @find ./ -name "*.os" -exec rm {} \; @find ./src/ -name "*.dylib" -exec rm {} \; @find ./src/ -name "*.so" -exec rm {} \; @find ./ -name "*.o" -exec rm {} \; @find ./src/ -name "*.a" -exec rm {} \; distclean: if test -e "config.py"; then mv "config.py" "config.py.backup"; fi reset: distclean rebuild: make uninstall && make clean && time make && make install uninstall: @$(PYTHON) scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 uninstall test/data: git submodule update --init test: ./test/data @./test/run check: test bench: ./benchmark/run demo: cd demo/c++; ./rundemo `mapnik-config --prefix` pep8: # https://gist.github.com/1903033 # gsed on osx @pep8 -r --select=W293 -q --filename=*.py `pwd`/tests/ | xargs gsed -i 's/^[ \r\t]*$$//' @pep8 -r --select=W391 -q --filename=*.py `pwd`/tests/ | xargs gsed -i -e :a -e '/^\n*$$/{$$d;N;ba' -e '}' @pep8 -r --select=W391 -q --filename=*.py `pwd`/tests/ | xargs ged -i '/./,/^$$/!d' # note: pass --gen-suppressions=yes to create new suppression entries grind: @source localize.sh && \ valgrind --suppressions=./test/unit/valgrind.supp --leak-check=full --log-fd=1 ./test/visual/run | grep definitely; @source localize.sh && \ for FILE in test/standalone/*-bin; do \ valgrind --suppressions=./test/unit/valgrind.supp --leak-check=full --log-fd=1 $${FILE} | grep definitely; \ done @source localize.sh && \ valgrind --suppressions=./test/unit/valgrind.supp --leak-check=full --log-fd=1 ./test/unit/run | grep definitely; render: @for FILE in tests/data/good_maps/*xml; do \ nik2img.py $${FILE} /tmp/$$(basename $${FILE}).png; \ done .PHONY: install mapnik clean distclean reset uninstall test demo pep8 grind render mapnik-3.0.9/README.md000066400000000000000000000041141262555547000142740ustar00rootroot00000000000000``` _/ _/ _/ _/ _/_/ _/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/ _/ _/ ``` [![Build Status Linux](https://secure.travis-ci.org/mapnik/mapnik.png)](http://travis-ci.org/mapnik/mapnik) [![Build status Windows](https://ci.appveyor.com/api/projects/status/hc9l7okdjtucfqqn?svg=true)](https://ci.appveyor.com/project/Mapbox/mapnik) [![Coverage Status](https://coveralls.io/repos/mapnik/mapnik/badge.svg?branch=master&service=github)](https://coveralls.io/github/mapnik/mapnik?branch=master) Mapnik is an open source toolkit for developing mapping applications. At the core is a C++ shared library providing algorithms and patterns for spatial data access and visualization. Mapnik is basically a collection of geographic objects like maps, layers, datasources, features, and geometries. The library doesn't rely on any OS specific "windowing systems" and it can be deployed to any server environment. It is intended to play fair in a multi-threaded environment and is aimed primarily, but not exclusively, at web-based development. For further information see [http://mapnik.org](http://mapnik.org) and also our [wiki documentation](https://github.com/mapnik/mapnik/wiki). # Installation See [INSTALL.md](https://github.com/mapnik/mapnik/blob/master/INSTALL.md) for installation instructions and the [Install](https://github.com/mapnik/mapnik/wiki/Mapnik-Installation) page on the wiki for guides. # Code of Conduct Please note that this project is released with a [Contributor Code of Conduct](https://github.com/mapnik/mapnik/blob/master/CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. # License Mapnik software is free and is released under the LGPL ([GNU Lesser General Public License](http://www.gnu.org/licenses/lgpl.html_)). Please see [COPYING](https://github.com/mapnik/mapnik/blob/master/COPYING) for more information. mapnik-3.0.9/SConstruct000066400000000000000000002541241262555547000150570ustar00rootroot00000000000000# This file is part of Mapnik (c++ mapping toolkit) # # Copyright (C) 2015 Artem Pavlenko # # Mapnik is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import os import sys import re import platform from glob import glob from copy import copy from subprocess import Popen, PIPE from SCons.SConf import SetCacheMode import pickle try: import distutils.sysconfig HAS_DISTUTILS = True except: HAS_DISTUTILS = False LIBDIR_SCHEMA_DEFAULT='lib' severities = ['debug', 'warn', 'error', 'none'] ICU_INCLUDES_DEFAULT='/usr/include' ICU_LIBS_DEFAULT='/usr/' DEFAULT_CC = "cc" DEFAULT_CXX = "c++" DEFAULT_CXX11_CXXFLAGS = " -std=c++11" DEFAULT_CXX11_LINKFLAGS = "" if sys.platform == 'darwin': # homebrew default ICU_INCLUDES_DEFAULT='/usr/local/opt/icu4c/include/' ICU_LIBS_DEFAULT='/usr/local/opt/icu4c/' py3 = None # local file to hold custom user configuration variables # Todo check timestamp, reload if changed? SCONS_LOCAL_CONFIG = 'config.py' # build log SCONS_LOCAL_LOG = 'config.log' # local pickled file to cache configured environment SCONS_CONFIGURE_CACHE = 'config.cache' # directory SCons uses to stash build tests SCONF_TEMP_DIR = '.sconf_temp' # auto-search directories for boost libs/headers BOOST_SEARCH_PREFIXES = ['/usr/local','/opt/local','/sw','/usr',] BOOST_MIN_VERSION = '1.47' #CAIRO_MIN_VERSION = '1.8.0' HARFBUZZ_MIN_VERSION = (0, 9, 34) HARFBUZZ_MIN_VERSION_STRING = "%s.%s.%s" % HARFBUZZ_MIN_VERSION DEFAULT_LINK_PRIORITY = ['internal','other','frameworks','user','system'] pretty_dep_names = { 'clntsh':'Oracle database library | configure with OCCI_LIBS & OCCI_INCLUDES | more info: https://github.com/mapnik/mapnik/wiki/OCCI', 'gdal':'GDAL C++ library | configured using gdal-config program | try setting GDAL_CONFIG SCons option | more info: https://github.com/mapnik/mapnik/wiki/GDAL', 'ogr':'OGR-enabled GDAL C++ Library | configured using gdal-config program | try setting GDAL_CONFIG SCons option | more info: https://github.com/mapnik/mapnik/wiki/OGR', 'cairo':'Cairo C library | configured using pkg-config | try setting PKG_CONFIG_PATH SCons option', 'proj':'Proj.4 C Projections library | configure with PROJ_LIBS & PROJ_INCLUDES | more info: http://trac.osgeo.org/proj/', 'pg':'Postgres C Library required for PostGIS plugin | configure with pg_config program or configure with PG_LIBS & PG_INCLUDES | more info: https://github.com/mapnik/mapnik/wiki/PostGIS', 'sqlite3':'SQLite3 C Library | configure with SQLITE_LIBS & SQLITE_INCLUDES | more info: https://github.com/mapnik/mapnik/wiki/SQLite', 'jpeg':'JPEG C library | configure with JPEG_LIBS & JPEG_INCLUDES', 'tiff':'TIFF C library | configure with TIFF_LIBS & TIFF_INCLUDES', 'png':'PNG C library | configure with PNG_LIBS & PNG_INCLUDES', 'webp':'WEBP C library | configure with WEBP_LIBS & WEBP_INCLUDES', 'icuuc':'ICU C++ library | configure with ICU_LIBS & ICU_INCLUDES or use ICU_LIB_NAME to specify custom lib name | more info: http://site.icu-project.org/', 'harfbuzz':'HarfBuzz text shaping library | configure with HB_LIBS & HB_INCLUDES', 'harfbuzz-min-version':'HarfBuzz >= %s (required for font-feature-settings support)' % HARFBUZZ_MIN_VERSION_STRING, 'z':'Z compression library | more info: http://www.zlib.net/', 'm':'Basic math library, part of C++ stlib', 'pkg-config':'pkg-config tool | more info: http://pkg-config.freedesktop.org', 'pg_config':'pg_config program | try setting PG_CONFIG SCons option', 'pq':'libpq library (postgres client) | try setting PG_CONFIG SCons option or configure with PG_LIBS & PG_INCLUDES', 'xml2-config':'xml2-config program | try setting XML2_CONFIG SCons option or avoid the need for xml2-config command by configuring with XML2_LIBS & XML2_INCLUDES', 'libxml2':'libxml2 library | try setting XML2_CONFIG SCons option to point to location of xml2-config program or configure with XML2_LIBS & XML2_INCLUDES', 'gdal-config':'gdal-config program | try setting GDAL_CONFIG SCons option', 'freetype-config':'freetype-config program | try setting FREETYPE_CONFIG SCons option or configure with FREETYPE_LIBS & FREETYPE_INCLUDES', 'freetype':'libfreetype library | try setting FREETYPE_CONFIG SCons option or configure with FREETYPE_LIBS & FREETYPE_INCLUDES', 'osm':'more info: https://github.com/mapnik/mapnik/wiki/OsmPlugin', 'boost_regex_icu':'libboost_regex built with optional ICU unicode support is needed for unicode regex support in mapnik.', 'sqlite_rtree':'The SQLite plugin requires libsqlite3 built with RTREE support (-DSQLITE_ENABLE_RTREE=1)', 'pgsql2sqlite_rtree':'The pgsql2sqlite program requires libsqlite3 built with RTREE support (-DSQLITE_ENABLE_RTREE=1)' } # Core plugin build configuration # opts.AddVariables still hardcoded however... PLUGINS = { # plugins with external dependencies # configured by calling project, hence 'path':None 'postgis': {'default':True,'path':None,'inc':'libpq-fe.h','lib':'pq','lang':'C'}, 'pgraster': {'default':True,'path':None,'inc':'libpq-fe.h','lib':'pq','lang':'C'}, 'gdal': {'default':True,'path':None,'inc':'gdal_priv.h','lib':'gdal','lang':'C++'}, 'ogr': {'default':True,'path':None,'inc':'ogrsf_frmts.h','lib':'gdal','lang':'C++'}, 'sqlite': {'default':True,'path':'SQLITE','inc':'sqlite3.h','lib':'sqlite3','lang':'C'}, # plugins without external dependencies requiring CheckLibWithHeader... 'shape': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'}, 'csv': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'}, 'raster': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'}, 'geojson': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'}, 'topojson':{'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'} } def init_environment(env): env.Decider('MD5-timestamp') env.SourceCode(".", None) if os.environ.get('RANLIB'): env['RANLIB'] = os.environ['RANLIB'] if os.environ.get('AR'): env['AR'] = os.environ['AR'] #### SCons build options and initial setup #### env = Environment(ENV=os.environ) init_environment(env) def fix_path(path): return os.path.abspath(path) def color_print(color,text,newline=True): # 1 - red # 2 - green # 3 - yellow # 4 - blue text = "\033[9%sm%s\033[0m" % (color,text) if not newline: print text, else: print text def regular_print(color,text,newline=True): if not newline: print text, else: print text def call(cmd, silent=False): stdin, stderr = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE).communicate() if not stderr: return stdin.strip() elif not silent: color_print(1,'Problem encounted with SCons scripts, please post bug report to: https://github.com/mapnik/mapnik/issues \nError was: %s' % stderr) def strip_first(string,find,replace=''): if string.startswith(find): return string.replace(find,replace,1) return string # http://www.scons.org/wiki/InstallTargets def create_uninstall_target(env, path, is_glob=False): if 'uninstall' in COMMAND_LINE_TARGETS: if is_glob: all_files = Glob(path,strings=True) for filei in all_files: env.Command( "uninstall-"+filei, filei, [ Delete("$SOURCE"), ]) env.Alias("uninstall", "uninstall-"+filei) else: if os.path.exists(path): env.Command( "uninstall-"+path, path, [ Delete("$SOURCE"), ]) env.Alias("uninstall", "uninstall-"+path) def shortest_name(libs): name = '-'*200 for lib in libs: if len(name) > len(lib): name = lib return name def rm_path(item,set,_env): for i in _env[set]: if i.startswith(item): _env[set].remove(i) def sort_paths(items,priority): """Sort paths such that compiling and linking will globally prefer custom or local libs over system libraries by fixing up the order libs are passed to the compiler and the linker. Ideally preference could be by-target instead of global, but our SCons implementation is not currently utilizing different SCons build env()'s as we should. Overally the current approach within these scripts is to prepend paths of preference and append all others, but this does not give enough control (particularly due to the approach of assuming /usr/LIBSCHEMA and letting paths be parsed and added by pkg-config). In effect /usr/lib is likely to come before /usr/local/lib which makes linking against custom built icu or boost impossible when those libraries are available in both places. Sorting using a priority list allows this to be controlled, and fine tuned. """ new = [] path_types = {'internal':[],'other':[],'frameworks':[],'user':[],'system':[]} # parse types of paths into logical/meaningful groups # based on commonly encountered lib directories on linux and osx for i in items: # internal paths for code kept inside # the mapnik sources if i.startswith('#'): path_types['internal'].append(i) # Mac OS X user installed frameworks elif '/Library/Frameworks' in i: path_types['frameworks'].append(i) # various 'local' installs like /usr/local or /opt/local elif 'local' in i or '/sw' in i: if '/usr/local' in i: path_types['user'].insert(0,i) else: path_types['user'].append(i) # key system libs (likely others will fall into 'other') elif '/usr/' in i or '/System' in i or i.startswith('/lib'): path_types['system'].append(i) # anything not yet matched... # likely a combo of rare system lib paths and # very custom user paths that should ideally be # in 'user' else: path_types['other'].append(i) # build up new list based on priority list for path in priority: if path_types.has_key(path): dirs = path_types[path] new.extend(dirs) path_types.pop(path) else: color_print(1,'\nSorry, "%s" is NOT a valid value for option "LINK_PRIORITY": values include: %s' % (path,','.join(path_types.keys()))) color_print(1,'\tinternal: the local directory of the Mapnik sources (prefix #) (eg. used to link internal agg)') color_print(1,'\tframeworks: on osx the /Library/Frameworks directory') color_print(1,'\tuser: any path with "local" or "/sw" inside it') color_print(1,'\tsystem: any path not yet matched with "/usr/","/lib", or "/System" (osx) inside it') color_print(1,'\tother: any paths you specified not matched by criteria used to parse the others') color_print(1,'\tother: any paths you specified not matched by criteria used to parse the others') color_print(1,'The Default priority is: %s' % ','.join(DEFAULT_LINK_PRIORITY)) color_print(1,'Any priority groups not listed will be appended to the list at the end') Exit(1) # append remaining paths potentially not requested # by any custom priority list defined by user for k,v in path_types.items(): new.extend(v) return new def pretty_dep(dep): pretty = pretty_dep_names.get(dep) if pretty: return '%s (%s)' % (dep,pretty) elif 'boost' in dep: return '%s (%s)' % (dep,'more info see: https://github.com/mapnik/mapnik/wiki/Mapnik-Installation & http://www.boost.org') return dep DEFAULT_PLUGINS = [] for k,v in PLUGINS.items(): if v['default']: DEFAULT_PLUGINS.append(k) # All of the following options may be modified at the command-line, for example: # `python scons/scons.py PREFIX=/opt` opts = Variables() opts.AddVariables( # Compiler options ('CXX', 'The C++ compiler to use to compile mapnik', DEFAULT_CXX), ('CC', 'The C compiler used for configure checks of C libs.', DEFAULT_CC), ('CUSTOM_CXXFLAGS', 'Custom C++ flags, e.g. -I if you have headers in a nonstandard directory ', ''), ('CUSTOM_DEFINES', 'Custom Compiler DEFINES, e.g. -DENABLE_THIS', ''), ('CUSTOM_CFLAGS', 'Custom C flags, e.g. -I if you have headers in a nonstandard directory (only used for configure checks)', ''), ('CUSTOM_LDFLAGS', 'Custom linker flags, e.g. -L if you have libraries in a nonstandard directory ', ''), EnumVariable('LINKING', "Set library format for libmapnik",'shared', ['shared','static']), EnumVariable('RUNTIME_LINK', "Set preference for linking dependencies",'shared', ['shared','static']), EnumVariable('OPTIMIZATION','Set compiler optimization level','3', ['0','1','2','3','4','s']), # Note: setting DEBUG=True will override any custom OPTIMIZATION level BoolVariable('DEBUG', 'Compile a debug version of Mapnik', 'False'), BoolVariable('DEBUG_UNDEFINED', 'Compile a version of Mapnik using clang/llvm undefined behavior asserts', 'False'), ListVariable('INPUT_PLUGINS','Input drivers to include',DEFAULT_PLUGINS,PLUGINS.keys()), ('WARNING_CXXFLAGS', 'Compiler flags you can set to reduce warning levels which are placed after -Wall.', ''), # SCons build behavior options ('HOST', 'Set the target host for cross compiling', ''), ('CONFIG', "The path to the python file in which to save user configuration options. Currently : '%s'" % SCONS_LOCAL_CONFIG,SCONS_LOCAL_CONFIG), BoolVariable('USE_CONFIG', "Use SCons user '%s' file (will also write variables after successful configuration)", 'True'), BoolVariable('NO_ATEXIT', 'Will prevent Singletons from being deleted atexit of main thread', 'False'), # http://www.scons.org/wiki/GoFastButton # http://stackoverflow.com/questions/1318863/how-to-optimize-an-scons-script BoolVariable('FAST', "Make SCons faster at the cost of less precise dependency tracking", 'False'), BoolVariable('PRIORITIZE_LINKING', 'Sort list of lib and inc directories to ensure preferential compiling and linking (useful when duplicate libs)', 'True'), ('LINK_PRIORITY','Priority list in which to sort library and include paths (default order is internal, other, frameworks, user, then system - see source of `sort_paths` function for more detail)',','.join(DEFAULT_LINK_PRIORITY)), # Install Variables ('PREFIX', 'The install path "prefix"', '/usr/local'), ('LIBDIR_SCHEMA', 'The library sub-directory appended to the "prefix", sometimes lib64 on 64bit linux systems', LIBDIR_SCHEMA_DEFAULT), ('DESTDIR', 'The root directory to install into. Useful mainly for binary package building', '/'), ('PATH', 'A custom path (or multiple paths divided by ":") to append to the $PATH env to prioritize usage of command line programs (if multiple are present on the system)', ''), ('PATH_REMOVE', 'A path prefix to exclude from all known command and compile paths (create multiple excludes separated by :)', ''), ('PATH_REPLACE', 'Two path prefixes (divided with a :) to search/replace from all known command and compile paths', ''), ('MAPNIK_NAME', 'Name of library', 'mapnik'), BoolVariable('MAPNIK_BUNDLED_SHARE_DIRECTORY', 'For portable packaging: instruct mapnik-config to report relative paths to bundled GDAL_DATA, PROJ_LIB, and ICU_DATA','False'), # Boost variables # default is '/usr/include', see FindBoost method below ('BOOST_INCLUDES', 'Search path for boost include files', '',False), # default is '/usr/' + LIBDIR_SCHEMA, see FindBoost method below ('BOOST_LIBS', 'Search path for boost library files', '',False), ('BOOST_TOOLKIT','Specify boost toolkit, e.g., gcc41.','',False), ('BOOST_ABI', 'Specify boost ABI, e.g., d.','',False), ('BOOST_VERSION','Specify boost version, e.g., 1_35.','',False), # Variables for required dependencies ('FREETYPE_CONFIG', 'The path to the freetype-config executable.', 'freetype-config'), ('XML2_CONFIG', 'The path to the xml2-config executable.', 'xml2-config'), PathVariable('ICU_INCLUDES', 'Search path for ICU include files', ICU_INCLUDES_DEFAULT, PathVariable.PathAccept), PathVariable('ICU_LIBS','Search path for ICU include files',ICU_LIBS_DEFAULT + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), ('ICU_LIB_NAME', 'The library name for icu (such as icuuc, sicuuc, or icucore)', 'icuuc', PathVariable.PathAccept), PathVariable('HB_INCLUDES', 'Search path for HarfBuzz include files', '/usr/include', PathVariable.PathAccept), PathVariable('HB_LIBS','Search path for HarfBuzz include files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), BoolVariable('PNG', 'Build Mapnik with PNG read and write support', 'True'), PathVariable('PNG_INCLUDES', 'Search path for libpng include files', '/usr/include', PathVariable.PathAccept), PathVariable('PNG_LIBS','Search path for libpng library files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), BoolVariable('JPEG', 'Build Mapnik with JPEG read and write support', 'True'), PathVariable('JPEG_INCLUDES', 'Search path for libjpeg include files', '/usr/include', PathVariable.PathAccept), PathVariable('JPEG_LIBS', 'Search path for libjpeg library files', '/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), BoolVariable('TIFF', 'Build Mapnik with TIFF read and write support', 'True'), PathVariable('TIFF_INCLUDES', 'Search path for libtiff include files', '/usr/include', PathVariable.PathAccept), PathVariable('TIFF_LIBS', 'Search path for libtiff library files', '/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), BoolVariable('WEBP', 'Build Mapnik with WEBP read', 'True'), PathVariable('WEBP_INCLUDES', 'Search path for libwebp include files', '/usr/include', PathVariable.PathAccept), PathVariable('WEBP_LIBS','Search path for libwebp library files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), BoolVariable('PROJ', 'Build Mapnik with proj4 support to enable transformations between many different projections', 'True'), PathVariable('PROJ_INCLUDES', 'Search path for PROJ.4 include files', '/usr/include', PathVariable.PathAccept), PathVariable('PROJ_LIBS', 'Search path for PROJ.4 library files', '/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), ('PG_INCLUDES', 'Search path for libpq (postgres client) include files', ''), ('PG_LIBS', 'Search path for libpq (postgres client) library files', ''), ('FREETYPE_INCLUDES', 'Search path for Freetype include files', ''), ('FREETYPE_LIBS', 'Search path for Freetype library files', ''), ('XML2_INCLUDES', 'Search path for libxml2 include files', ''), ('XML2_LIBS', 'Search path for libxml2 library files', ''), ('PKG_CONFIG_PATH', 'Use this path to point pkg-config to .pc files instead of the PKG_CONFIG_PATH environment setting',''), # Variables affecting rendering back-ends BoolVariable('GRID_RENDERER', 'build support for native grid renderer', 'True'), BoolVariable('SVG_RENDERER', 'build support for native svg renderer', 'False'), BoolVariable('CPP_TESTS', 'Compile the C++ tests', 'True'), BoolVariable('BENCHMARK', 'Compile the C++ benchmark scripts', 'False'), # Variables for optional dependencies # Note: cairo and and pycairo are optional but configured automatically through pkg-config # Therefore, we use a single boolean for whether to attempt to build cairo support. BoolVariable('CAIRO', 'Attempt to build with Cairo rendering support', 'True'), PathVariable('CAIRO_INCLUDES', 'Search path for cairo include files', '',PathVariable.PathAccept), PathVariable('CAIRO_LIBS', 'Search path for cairo library files','',PathVariable.PathAccept), ('GDAL_CONFIG', 'The path to the gdal-config executable for finding gdal and ogr details.', 'gdal-config'), ('PG_CONFIG', 'The path to the pg_config executable.', 'pg_config'), PathVariable('OCCI_INCLUDES', 'Search path for OCCI include files', '/usr/lib/oracle/10.2.0.3/client/include', PathVariable.PathAccept), PathVariable('OCCI_LIBS', 'Search path for OCCI library files', '/usr/lib/oracle/10.2.0.3/client/'+ LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), PathVariable('SQLITE_INCLUDES', 'Search path for SQLITE include files', '/usr/include/', PathVariable.PathAccept), PathVariable('SQLITE_LIBS', 'Search path for SQLITE library files', '/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), PathVariable('RASTERLITE_INCLUDES', 'Search path for RASTERLITE include files', '/usr/include/', PathVariable.PathAccept), PathVariable('RASTERLITE_LIBS', 'Search path for RASTERLITE library files', '/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept), # Variables for logging and statistics BoolVariable('ENABLE_LOG', 'Enable logging, which is enabled by default when building in *debug*', 'False'), BoolVariable('ENABLE_STATS', 'Enable global statistics during map processing', 'False'), ('DEFAULT_LOG_SEVERITY', 'The default severity of the logger (eg. ' + ', '.join(severities) + ')', 'error'), # Plugin linking EnumVariable('PLUGIN_LINKING', "Set plugin linking with libmapnik", 'shared', ['shared','static']), # Other variables BoolVariable('MEMORY_MAPPED_FILE', 'Utilize memory-mapped files in Shapefile Plugin (higher memory usage, better performance)', 'True'), ('SYSTEM_FONTS','Provide location for python bindings to register fonts (if provided then the bundled DejaVu fonts are not installed)',''), ('LIB_DIR_NAME','Name to use for the subfolder beside libmapnik where fonts and plugins are installed','mapnik'), PathVariable('PYTHON','Full path to Python executable used to build bindings', sys.executable), BoolVariable('FULL_LIB_PATH', 'Embed the full and absolute path to libmapnik when linking ("install_name" on OS X/rpath on Linux)', 'True'), BoolVariable('ENABLE_SONAME', 'Embed a soname in libmapnik on Linux', 'True'), EnumVariable('THREADING','Set threading support','multi', ['multi','single']), EnumVariable('XMLPARSER','Set xml parser','ptree', ['libxml2','ptree']), BoolVariable('DEMO', 'Compile demo c++ application', 'True'), BoolVariable('PGSQL2SQLITE', 'Compile and install a utility to convert postgres tables to sqlite', 'False'), BoolVariable('SHAPEINDEX', 'Compile and install a utility to generate shapefile indexes in the custom format (.index) Mapnik supports', 'True'), BoolVariable('MAPNIK_INDEX', 'Compile and install a utility to generate spatial indexes for CSV and GeoJSON in the custom format (.index) Mapnik supports', 'True'), BoolVariable('SVG2PNG', 'Compile and install a utility to generate render an svg file to a png on the command line', 'False'), BoolVariable('MAPNIK_RENDER', 'Compile and install a utility to render a map to an image', 'True'), BoolVariable('COLOR_PRINT', 'Print build status information in color', 'True'), BoolVariable('BIGINT', 'Compile support for 64-bit integers in mapnik::value', 'True'), ) # variables to pickle after successful configure step # these include all scons core variables as well as custom # env variables needed in SConscript files pickle_store = [# Scons internal variables 'CC', # compiler user to check if c deps compile during configure 'CXX', # C++ compiler to compile mapnik 'CFLAGS', 'CPPDEFINES', 'CPPFLAGS', # c preprocessor flags 'CPPPATH', 'CXXFLAGS', # C++ flags built up during configure 'LIBPATH', 'LIBS', 'LINKFLAGS', 'CUSTOM_LDFLAGS', # user submitted 'CUSTOM_DEFINES', # user submitted 'CUSTOM_CXXFLAGS', # user submitted 'CUSTOM_CFLAGS', # user submitted 'MAPNIK_LIB_NAME', 'LINK', 'RUNTIME_LINK', # Mapnik's SConstruct build variables 'PLUGINS', 'ABI_VERSION', 'MAPNIK_VERSION_STRING', 'MAPNIK_VERSION', 'PLATFORM', 'BOOST_ABI', 'BOOST_APPEND', 'LIBDIR_SCHEMA', 'REQUESTED_PLUGINS', 'COLOR_PRINT', 'HAS_CAIRO', 'MAPNIK_HAS_DLFCN', 'HAS_PYCAIRO', 'PYCAIRO_PATHS', 'HAS_LIBXML2', 'PKG_CONFIG_PATH', 'PATH', 'PATH_REMOVE', 'PATH_REPLACE', 'MAPNIK_LIB_DIR', 'MAPNIK_LIB_DIR_DEST', 'INSTALL_PREFIX', 'MAPNIK_INPUT_PLUGINS', 'MAPNIK_INPUT_PLUGINS_DEST', 'MAPNIK_FONTS', 'MAPNIK_FONTS_DEST', 'MAPNIK_BUNDLED_SHARE_DIRECTORY', 'MAPNIK_LIB_BASE', 'MAPNIK_LIB_BASE_DEST', 'EXTRA_FREETYPE_LIBS', 'LIBMAPNIK_CPPATHS', 'LIBMAPNIK_DEFINES', 'LIBMAPNIK_CXXFLAGS', 'CAIRO_LIBPATHS', 'CAIRO_ALL_LIBS', 'CAIRO_CPPPATHS', 'GRID_RENDERER', 'SVG_RENDERER', 'SQLITE_LINKFLAGS', 'BOOST_LIB_VERSION_FROM_HEADER', 'BIGINT', 'HOST' ] # Add all other user configurable options to pickle pickle_store # We add here more options than are needed for the build stage # but helpful so that scons -h shows the exact cached options for opt in opts.options: if opt.key not in pickle_store: pickle_store.append(opt.key) # Method of adding configure behavior to Scons adapted from: # http://freeorion.svn.sourceforge.net/svnroot/freeorion/trunk/FreeOrion/SConstruct preconfigured = False force_configure = False command_line_args = sys.argv[1:] HELP_REQUESTED = False if ('-h' in command_line_args) or ('--help' in command_line_args): HELP_REQUESTED = True if 'configure' in command_line_args and not HELP_REQUESTED: force_configure = True elif HELP_REQUESTED: # to ensure config gets skipped when help is requested preconfigured = True # need no-op for clean on fresh checkout # https://github.com/mapnik/mapnik/issues/2112 if not os.path.exists(SCONS_LOCAL_LOG) and not os.path.exists(SCONS_CONFIGURE_CACHE) \ and ('-c' in command_line_args or '--clean' in command_line_args): print 'all good: nothing to clean, but you might want to run "make distclean"' Exit(0) # initially populate environment with defaults and any possible custom arguments opts.Update(env) # if we are not configuring overwrite environment with pickled settings if not force_configure: if os.path.exists(SCONS_CONFIGURE_CACHE): try: pickled_environment = open(SCONS_CONFIGURE_CACHE, 'r') pickled_values = pickle.load(pickled_environment) for key, value in pickled_values.items(): env[key] = value preconfigured = True except: preconfigured = False else: preconfigured = False # check for missing keys in pickled settings # which can occur when keys are added or changed between # rebuilds, e.g. for folks following trunk for opt in pickle_store: if not opt in env: #print 'missing opt', opt preconfigured = False # if custom arguments are supplied make sure to accept them if opts.args: # since we have custom arguments update environment with all opts to # make sure to absorb the custom ones opts.Update(env) # now since we've got custom arguments we'll disregard any # pickled environment and force another configuration preconfigured = False elif preconfigured: if not HELP_REQUESTED: color_print(4,'Using previous successful configuration...') color_print(4,'Re-configure by running "python scons/scons.py configure".') if env.has_key('COLOR_PRINT') and env['COLOR_PRINT'] == False: color_print = regular_print if sys.platform == "win32": color_print = regular_print color_print(4,'\nWelcome to Mapnik...\n') #### Custom Configure Checks ### def prioritize_paths(context,silent=True): env = context.env prefs = env['LINK_PRIORITY'].split(',') if not silent: context.Message( 'Sorting lib and inc compiler paths...') env['LIBPATH'] = sort_paths(env['LIBPATH'],prefs) env['CPPPATH'] = sort_paths(env['CPPPATH'],prefs) if silent: context.did_show_result=1 ret = context.Result( True ) return ret def CheckPKGConfig(context, version): context.Message( 'Checking for pkg-config... ' ) ret = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0] context.Result( ret ) return ret def CheckPKG(context, name): context.Message( 'Checking for %s... ' % name ) ret = context.TryAction('pkg-config --exists \'%s\'' % name)[0] context.Result( ret ) return ret def CheckPKGVersion(context, name, version): context.Message( 'Checking for at least version %s for %s... ' % (version,name) ) ret = context.TryAction('pkg-config --atleast-version=%s \'%s\'' % (version,name))[0] context.Result( ret ) return ret def parse_config(context, config, checks='--libs --cflags'): env = context.env tool = config.lower().replace('_','-') toolname = tool if config in ('GDAL_CONFIG'): toolname += ' %s' % checks context.Message( 'Checking for %s... ' % toolname) cmd = '%s %s' % (env[config],checks) ret = context.TryAction(cmd)[0] parsed = False if ret: try: if 'gdal-config' in cmd: env.ParseConfig(cmd) # hack for potential -framework GDAL syntax # which will not end up being added to env['LIBS'] # and thus breaks knowledge below that gdal worked # TODO - upgrade our scons logic to support Framework linking if env['PLATFORM'] == 'Darwin': value = call(cmd,silent=True) if value and '-framework GDAL' in value: env['LIBS'].append('gdal') if os.path.exists('/Library/Frameworks/GDAL.framework/unix/lib'): env['LIBPATH'].insert(0,'/Library/Frameworks/GDAL.framework/unix/lib') if 'GDAL' in env.get('FRAMEWORKS',[]): env["FRAMEWORKS"].remove("GDAL") else: env.ParseConfig(cmd) parsed = True except OSError, e: ret = False print ' (xml2-config not found!)' if not parsed: if config in ('GDAL_CONFIG'): # optional deps... if tool not in env['SKIPPED_DEPS']: env['SKIPPED_DEPS'].append(tool) conf.rollback_option(config) else: # freetype and libxml2, not optional if tool not in env['MISSING_DEPS']: env['MISSING_DEPS'].append(tool) context.Result( ret ) return ret def get_pkg_lib(context, config, lib): libpattern = r'-l([^\s]*)' libname = None env = context.env context.Message( 'Checking for name of %s library... ' % lib) cmd = '%s --libs' % env[config] ret = context.TryAction(cmd)[0] parsed = False if ret: try: value = call(cmd,silent=True) if ' ' in value: parts = value.split(' ') if len(parts) > 1: value = parts[1] libnames = re.findall(libpattern,value) if libnames: libname = libnames[0] else: # osx 1.8 install gives '-framework GDAL' libname = 'gdal' except Exception, e: ret = False print ' unable to determine library name:'# %s' % str(e) return None context.Result( libname ) return libname def parse_pg_config(context, config): # TODO - leverage `LDFLAGS_SL` if RUNTIME_LINK==static env = context.env tool = config.lower() context.Message( 'Checking for %s... ' % tool) ret = context.TryAction(env[config])[0] if ret: lib_path = call('%s --libdir' % env[config]) inc_path = call('%s --includedir' % env[config]) env.AppendUnique(CPPPATH = fix_path(inc_path)) env.AppendUnique(LIBPATH = fix_path(lib_path)) lpq = env['PLUGINS']['postgis']['lib'] env.Append(LIBS = lpq) else: env['SKIPPED_DEPS'].append(tool) conf.rollback_option(config) context.Result( ret ) return ret def ogr_enabled(context): env = context.env context.Message( 'Checking if gdal is ogr enabled... ') ret = context.TryAction('%s --ogr-enabled' % env['GDAL_CONFIG'])[0] if not ret: if 'ogr' not in env['SKIPPED_DEPS']: env['SKIPPED_DEPS'].append('ogr') context.Result( ret ) return ret def rollback_option(context,variable): global opts env = context.env for item in opts.options: if item.key == variable: env[variable] = item.default def FindBoost(context, prefixes, thread_flag): """Routine to auto-find boost header dir, lib dir, and library naming structure. """ context.Message( 'Searching for boost libs and headers... ' ) env = context.env BOOST_LIB_DIR = None BOOST_INCLUDE_DIR = None BOOST_APPEND = None env['BOOST_APPEND'] = str() if env['THREADING'] == 'multi': search_lib = 'libboost_thread' else: search_lib = 'libboost_filesystem' # note: must call normpath to strip trailing slash otherwise dirname # does not remove 'lib' and 'include' prefixes.insert(0,os.path.dirname(os.path.normpath(env['BOOST_INCLUDES']))) prefixes.insert(0,os.path.dirname(os.path.normpath(env['BOOST_LIBS']))) for searchDir in prefixes: libItems = glob(os.path.join(searchDir, env['LIBDIR_SCHEMA'], '%s*.*' % search_lib)) if not libItems: libItems = glob(os.path.join(searchDir, 'lib/%s*.*' % search_lib)) incItems = glob(os.path.join(searchDir, 'include/boost*/')) if len(libItems) >= 1 and len(incItems) >= 1: BOOST_LIB_DIR = os.path.dirname(libItems[0]) BOOST_INCLUDE_DIR = incItems[0].rstrip('boost/') shortest_lib_name = shortest_name(libItems) match = re.search(r'%s(.*)\..*' % search_lib, shortest_lib_name) if hasattr(match,'groups'): BOOST_APPEND = match.groups()[0] break msg = str() if BOOST_LIB_DIR: msg += '\nFound boost libs: %s' % BOOST_LIB_DIR env['BOOST_LIBS'] = BOOST_LIB_DIR elif not env['BOOST_LIBS']: env['BOOST_LIBS'] = '/usr/' + env['LIBDIR_SCHEMA'] msg += '\nUsing default boost lib dir: %s' % env['BOOST_LIBS'] else: msg += '\nUsing boost lib dir: %s' % env['BOOST_LIBS'] if BOOST_INCLUDE_DIR: msg += '\nFound boost headers: %s' % BOOST_INCLUDE_DIR env['BOOST_INCLUDES'] = BOOST_INCLUDE_DIR elif not env['BOOST_INCLUDES']: env['BOOST_INCLUDES'] = '/usr/include' msg += '\nUsing default boost include dir: %s' % env['BOOST_INCLUDES'] else: msg += '\nUsing boost include dir: %s' % env['BOOST_INCLUDES'] if not env['BOOST_TOOLKIT'] and not env['BOOST_ABI'] and not env['BOOST_VERSION']: if BOOST_APPEND: msg += '\nFound boost lib name extension: %s' % BOOST_APPEND env['BOOST_APPEND'] = BOOST_APPEND else: # Creating BOOST_APPEND according to the Boost library naming order, # which goes ---. See: # http://www.boost.org/doc/libs/1_35_0/more/getting_started/unix-variants.html#library-naming append_params = [''] if env['BOOST_TOOLKIT']: append_params.append(env['BOOST_TOOLKIT']) if thread_flag: append_params.append(thread_flag) if env['BOOST_ABI']: append_params.append(env['BOOST_ABI']) if env['BOOST_VERSION']: append_params.append(env['BOOST_VERSION']) # Constructing the BOOST_APPEND setting that will be used to find the # Boost libraries. if len(append_params) > 1: env['BOOST_APPEND'] = '-'.join(append_params) msg += '\nFound boost lib name extension: %s' % env['BOOST_APPEND'] env.AppendUnique(CPPPATH = fix_path(env['BOOST_INCLUDES'])) env.AppendUnique(LIBPATH = fix_path(env['BOOST_LIBS'])) if env['COLOR_PRINT']: msg = "\033[94m%s\033[0m" % (msg) ret = context.Result(msg) return ret def CheckBoost(context, version, silent=False): # Boost versions are in format major.minor.subminor v_arr = version.split(".") version_n = 0 if len(v_arr) > 0: version_n += int(v_arr[0])*100000 if len(v_arr) > 1: version_n += int(v_arr[1])*100 if len(v_arr) > 2: version_n += int(v_arr[2]) if not silent: context.Message('Checking for Boost version >= %s... ' % (version)) ret = context.TryRun(""" #include int main() { return BOOST_VERSION >= %d ? 0 : 1; } """ % version_n, '.cpp')[0] if silent: context.did_show_result=1 context.Result(ret) return ret def CheckCairoHasFreetype(context, silent=False): if not silent: context.Message('Checking for cairo freetype font support ... ') context.env.AppendUnique(CPPPATH=copy(env['CAIRO_CPPPATHS'])) ret = context.TryRun(""" #include int main() { #ifdef CAIRO_HAS_FT_FONT return 0; #else return 1; #endif } """, '.cpp')[0] if silent: context.did_show_result=1 context.Result(ret) for item in env['CAIRO_CPPPATHS']: rm_path(item,'CPPPATH',context.env) return ret def CheckHasDlfcn(context, silent=False): if not silent: context.Message('Checking for dlfcn.h support ... ') ret = context.TryCompile(""" #include int main() { return 0; } """, '.cpp') if silent: context.did_show_result=1 context.Result(ret) return ret def GetBoostLibVersion(context): ret = context.TryRun(""" #include #include int main() { std::cout << BOOST_LIB_VERSION << std::endl; return 0; } """, '.cpp') # hack to avoid printed output context.did_show_result=1 context.Result(ret[0]) return ret[1].strip() def CheckBoostScopedEnum(context, silent=False): if not silent: context.Message('Checking whether Boost was compiled with C++11 scoped enums ... ') ret = context.TryLink(""" #include int main() { boost::filesystem::path a, b; boost::filesystem::copy_file(a, b); return 0; } """, '.cpp') if silent: context.did_show_result=1 context.Result(ret) return ret def icu_at_least_four_two(context): ret = context.TryRun(""" #include #include int main() { std::cout << U_ICU_VERSION_MAJOR_NUM << "." << U_ICU_VERSION_MINOR_NUM << std::endl; return 0; } """, '.cpp') # hack to avoid printed output context.Message('Checking for ICU version >= 4.2... ') context.did_show_result=1 result = ret[1].strip() if not result: context.Result('error, could not get major and minor version from unicode/uversion.h') return False major, minor = map(int,result.split('.')) if major >= 4 and minor >= 0: color_print(4,'found: icu %s' % result) return True color_print(1,'\nFound insufficient icu version... %s' % result) return False def harfbuzz_version(context): ret = context.TryRun(""" #include "harfbuzz/hb.h" #include int main() { std::cout << HB_VERSION_ATLEAST(%s, %s, %s) << ";" << HB_VERSION_STRING; return 0; } """ % HARFBUZZ_MIN_VERSION, '.cpp') # hack to avoid printed output context.Message('Checking for HarfBuzz version >= %s... ' % HARFBUZZ_MIN_VERSION_STRING) context.did_show_result=1 result = ret[1].strip() if not result: context.Result('error, could not get version from hb.h') return False items = result.split(';') if items[0] == '1': color_print(4,'found: HarfBuzz %s' % items[1]) return True color_print(1,'\nHarfbuzz >= %s required but found ... %s' % (HARFBUZZ_MIN_VERSION_STRING,items[1])) return False def harfbuzz_with_freetype_support(context): ret = context.TryRun(""" #include "harfbuzz/hb-ft.h" #include int main() { return 0; } """, '.cpp') context.Message('Checking for HarfBuzz with freetype support\n') context.Result(ret[0]) if ret[0]: return True return False def boost_regex_has_icu(context): if env['RUNTIME_LINK'] == 'static': # re-order icu libs to ensure linux linker is happy for lib_name in ['icui18n',env['ICU_LIB_NAME'],'icudata']: if lib_name in context.env['LIBS']: context.env['LIBS'].remove(lib_name) context.env.Append(LIBS=lib_name) ret = context.TryRun(""" #include #include int main() { U_NAMESPACE_QUALIFIER UnicodeString ustr; try { boost::u32regex pattern = boost::make_u32regex(ustr); } // an exception is fine, still indicates support is // likely compiled into regex catch (...) { return 0; } return 0; } """, '.cpp') context.Message('Checking if boost_regex was built with ICU unicode support... ') context.Result(ret[0]) if ret[0]: return True return False def sqlite_has_rtree(context, silent=False): """ check an sqlite3 install has rtree support. PRAGMA compile_options; http://www.sqlite.org/c3ref/compileoption_get.html """ ret = context.TryRun(""" #include #include int main() { sqlite3* db; int rc; rc = sqlite3_open(":memory:", &db); if (rc != SQLITE_OK) { printf("error 1: %s\\n", sqlite3_errmsg(db)); } const char * sql = "create virtual table foo using rtree(pkid, xmin, xmax, ymin, ymax)"; rc = sqlite3_exec(db, sql, 0, 0, 0); if (rc != SQLITE_OK) { printf("error 2: %s\\n", sqlite3_errmsg(db)); sqlite3_close(db); } else { printf("yes, has rtree!\\n"); sqlite3_close(db); return 0; } return -1; } """, '.c') if not silent: context.Message('Checking if SQLite supports RTREE... ') if silent: context.did_show_result=1 context.Result(ret[0]) if ret[0]: return True return False def supports_cxx11(context,silent=False): ret = context.TryRun(""" int main() { #if __cplusplus >= 201103 return 0; #else return -1; #endif } """, '.cpp') if not silent: context.Message('Checking if compiler (%s) supports -std=c++11 flag... ' % context.env.get('CXX','CXX')) if silent: context.did_show_result=1 context.Result(ret[0]) if ret[0]: return True return False conf_tests = { 'prioritize_paths' : prioritize_paths, 'CheckPKGConfig' : CheckPKGConfig, 'CheckPKG' : CheckPKG, 'CheckPKGVersion' : CheckPKGVersion, 'FindBoost' : FindBoost, 'CheckBoost' : CheckBoost, 'CheckCairoHasFreetype' : CheckCairoHasFreetype, 'CheckHasDlfcn' : CheckHasDlfcn, 'GetBoostLibVersion' : GetBoostLibVersion, 'parse_config' : parse_config, 'parse_pg_config' : parse_pg_config, 'ogr_enabled' : ogr_enabled, 'get_pkg_lib' : get_pkg_lib, 'rollback_option' : rollback_option, 'icu_at_least_four_two' : icu_at_least_four_two, 'harfbuzz_version' : harfbuzz_version, 'harfbuzz_with_freetype_support': harfbuzz_with_freetype_support, 'boost_regex_has_icu' : boost_regex_has_icu, 'sqlite_has_rtree' : sqlite_has_rtree, 'supports_cxx11' : supports_cxx11, 'CheckBoostScopedEnum' : CheckBoostScopedEnum, } def GetMapnikLibVersion(): ver = [] for line in open('include/mapnik/version.hpp').readlines(): if line.startswith('#define MAPNIK_MAJOR_VERSION'): ver.append(line.split(' ')[2].strip()) if line.startswith('#define MAPNIK_MINOR_VERSION'): ver.append(line.split(' ')[2].strip()) if line.startswith('#define MAPNIK_PATCH_VERSION'): ver.append(line.split(' ')[2].strip()) version_string = ".".join(ver) return version_string if not preconfigured: color_print(4,'Configuring build environment...') if not env['FAST']: SetCacheMode('force') if env['USE_CONFIG']: if not env['CONFIG'].endswith('.py'): color_print(1,'SCons CONFIG file specified is not a python file, will not be read...') else: # Accept more than one file as comma-delimited list user_confs = env['CONFIG'].split(',') # If they exist add the files to the existing `opts` for conf in user_confs: if os.path.exists(conf): opts.files.append(conf) color_print(4,"SCons CONFIG found: '%s', variables will be inherited..." % conf) optfile = file(conf) #print optfile.read().replace("\n", " ").replace("'","").replace(" = ","=") optfile.close() elif not conf == SCONS_LOCAL_CONFIG: # if default missing, no worries # but if the default is overridden and the file is not found, give warning color_print(1,"SCons CONFIG not found: '%s'" % conf) # Recreate the base environment using modified `opts` env = Environment(ENV=os.environ,options=opts) init_environment(env) env['USE_CONFIG'] = True else: color_print(4,'SCons USE_CONFIG specified as false, will not inherit variables python config file...') conf = Configure(env, custom_tests = conf_tests) if env['DEBUG']: mode = 'debug mode' else: mode = 'release mode' env['PLATFORM'] = platform.uname()[0] color_print(4,"Configuring on %s in *%s*..." % (env['PLATFORM'],mode)) env['MISSING_DEPS'] = [] env['SKIPPED_DEPS'] = [] env['HAS_CAIRO'] = False env['CAIRO_LIBPATHS'] = [] env['CAIRO_ALL_LIBS'] = [] env['CAIRO_CPPPATHS'] = [] env['HAS_PYCAIRO'] = False env['PYCAIRO_PATHS'] = [] env['HAS_LIBXML2'] = False env['LIBMAPNIK_LIBS'] = [] env['LIBMAPNIK_LINKFLAGS'] = [] env['LIBMAPNIK_CPPATHS'] = [] env['LIBMAPNIK_DEFINES'] = [] env['LIBMAPNIK_CXXFLAGS'] = [] env['PLUGINS'] = PLUGINS env['EXTRA_FREETYPE_LIBS'] = [] env['SQLITE_LINKFLAGS'] = [] # previously a leading / was expected for LIB_DIR_NAME # now strip it to ensure expected behavior if env['LIB_DIR_NAME'].startswith(os.path.sep): env['LIB_DIR_NAME'] = strip_first(env['LIB_DIR_NAME'],os.path.sep) # base install location env['MAPNIK_LIB_BASE'] = os.path.join(env['PREFIX'],env['LIBDIR_SCHEMA']) # directory for plugins and fonts env['MAPNIK_LIB_DIR'] = os.path.join(env['MAPNIK_LIB_BASE'],env['LIB_DIR_NAME']) # input plugins sub directory env['MAPNIK_INPUT_PLUGINS'] = os.path.join(env['MAPNIK_LIB_DIR'],'input') # fonts sub directory if env['SYSTEM_FONTS']: env['MAPNIK_FONTS'] = os.path.normpath(env['SYSTEM_FONTS']) else: env['MAPNIK_FONTS'] = os.path.join(env['MAPNIK_LIB_DIR'],'fonts') # install prefix is a pre-pended base location to # re-route the install and only intended for package building # we normalize to ensure no trailing slash and proper pre-pending to the absolute prefix install_prefix = os.path.normpath(fix_path(env['DESTDIR'])) + fix_path(env['PREFIX']) env['INSTALL_PREFIX'] = strip_first(install_prefix,'//','/') # all values from above based on install_prefix # if env['DESTDIR'] == '/' these should be unchanged env['MAPNIK_LIB_BASE_DEST'] = os.path.join(env['INSTALL_PREFIX'],env['LIBDIR_SCHEMA']) env['MAPNIK_LIB_DIR_DEST'] = os.path.join(env['MAPNIK_LIB_BASE_DEST'],env['LIB_DIR_NAME']) env['MAPNIK_INPUT_PLUGINS_DEST'] = os.path.join(env['MAPNIK_LIB_DIR_DEST'],'input') if env['SYSTEM_FONTS']: env['MAPNIK_FONTS_DEST'] = os.path.normpath(env['SYSTEM_FONTS']) else: env['MAPNIK_FONTS_DEST'] = os.path.join(env['MAPNIK_LIB_DIR_DEST'],'fonts') if env['LINKING'] == 'static': env['MAPNIK_LIB_NAME'] = '${LIBPREFIX}${MAPNIK_NAME}${LIBSUFFIX}' else: env['MAPNIK_LIB_NAME'] = '${SHLIBPREFIX}${MAPNIK_NAME}${SHLIBSUFFIX}' if env['PKG_CONFIG_PATH']: env['ENV']['PKG_CONFIG_PATH'] = fix_path(env['PKG_CONFIG_PATH']) # otherwise this variable == os.environ["PKG_CONFIG_PATH"] if env['PATH']: env['ENV']['PATH'] = fix_path(env['PATH']) + ':' + env['ENV']['PATH'] if env['SYSTEM_FONTS']: if not os.path.isdir(env['SYSTEM_FONTS']): color_print(1,'Warning: Directory specified for SYSTEM_FONTS does not exist!') # Set up for libraries and headers dependency checks env['CPPPATH'] = ['#include'] env['LIBPATH'] = ['#src','#src/json','#src/wkt'] # set any custom cxxflags and ldflags to come first if sys.platform == 'darwin' and not env['HOST']: DEFAULT_CXX11_CXXFLAGS += ' -stdlib=libc++' DEFAULT_CXX11_LINKFLAGS = ' -stdlib=libc++' env.Append(CPPDEFINES = env['CUSTOM_DEFINES']) env.Append(CXXFLAGS = DEFAULT_CXX11_CXXFLAGS) env.Append(CXXFLAGS = env['CUSTOM_CXXFLAGS']) env.Append(CFLAGS = env['CUSTOM_CFLAGS']) env.Append(LINKFLAGS = DEFAULT_CXX11_LINKFLAGS) env.Append(LINKFLAGS = env['CUSTOM_LDFLAGS']) ### platform specific bits thread_suffix = 'mt' if env['PLATFORM'] == 'FreeBSD': thread_suffix = '' env.Append(LIBS = 'pthread') if env['MEMORY_MAPPED_FILE']: env.Append(CPPDEFINES = '-DMAPNIK_MEMORY_MAPPED_FILE') # allow for mac osx /usr/lib/libicucore.dylib compatibility # requires custom supplied headers since Apple does not include them # details: http://lists.apple.com/archives/xcode-users/2005/Jun/msg00633.html # To use system lib download and make && make install one of these: # http://www.opensource.apple.com/tarballs/ICU/ # then copy the headers to a location that mapnik will find if 'core' in env['ICU_LIB_NAME']: env.Append(CPPDEFINES = '-DU_HIDE_DRAFT_API') env.Append(CPPDEFINES = '-DUDISABLE_RENAMING') if os.path.exists(env['ICU_LIB_NAME']): #-sICU_LINK=" -L/usr/lib -licucore env['ICU_LIB_NAME'] = os.path.basename(env['ICU_LIB_NAME']).replace('.dylib','').replace('lib','') # Adding the required prerequisite library directories to the include path for # compiling and the library path for linking, respectively. for required in ('ICU', 'SQLITE', 'HB'): inc_path = env['%s_INCLUDES' % required] lib_path = env['%s_LIBS' % required] env.AppendUnique(CPPPATH = fix_path(inc_path)) env.AppendUnique(LIBPATH = fix_path(lib_path)) REQUIRED_LIBSHEADERS = [ ['z', 'zlib.h', True,'C'], [env['ICU_LIB_NAME'],'unicode/unistr.h',True,'C++'], ['harfbuzz', 'harfbuzz/hb.h',True,'C++'] ] if env.get('FREETYPE_LIBS') or env.get('FREETYPE_INCLUDES'): REQUIRED_LIBSHEADERS.insert(0,['freetype','ft2build.h',True,'C']) if env.get('FREETYPE_INCLUDES'): inc_path = env['FREETYPE_INCLUDES'] env.AppendUnique(CPPPATH = fix_path(inc_path)) if env.get('FREETYPE_LIBS'): lib_path = env['FREETYPE_LIBS'] env.AppendUnique(LIBPATH = fix_path(lib_path)) elif conf.parse_config('FREETYPE_CONFIG'): # check if freetype links to bz2 if env['RUNTIME_LINK'] == 'static': temp_env = env.Clone() temp_env['LIBS'] = [] try: # TODO - freetype-config accepts --static as of v2.5.3 temp_env.ParseConfig('%s --libs' % env['FREETYPE_CONFIG']) if 'bz2' in temp_env['LIBS']: env['EXTRA_FREETYPE_LIBS'].append('bz2') except OSError,e: pass # libxml2 should be optional but is currently not # https://github.com/mapnik/mapnik/issues/913 if env.get('XMLPARSER') and env['XMLPARSER'] == 'libxml2': if env.get('XML2_LIBS') or env.get('XML2_INCLUDES'): OPTIONAL_LIBSHEADERS.insert(0,['libxml2','libxml/parser.h',True,'C']) if env.get('XML2_INCLUDES'): inc_path = env['XML2_INCLUDES'] env.AppendUnique(CPPPATH = fix_path(inc_path)) if env.get('XML2_LIBS'): lib_path = env['XML2_LIBS'] env.AppendUnique(LIBPATH = fix_path(lib_path)) elif conf.parse_config('XML2_CONFIG',checks='--cflags'): env['HAS_LIBXML2'] = True else: env['MISSING_DEPS'].append('libxml2') if not env['HOST']: if conf.CheckHasDlfcn(): env.Append(CPPDEFINES = '-DMAPNIK_HAS_DLCFN') else: env['SKIPPED_DEPS'].extend(['dlfcn']) OPTIONAL_LIBSHEADERS = [] if env['JPEG']: OPTIONAL_LIBSHEADERS.append(['jpeg', ['stdio.h', 'jpeglib.h'], False,'C','-DHAVE_JPEG']) inc_path = env['%s_INCLUDES' % 'JPEG'] lib_path = env['%s_LIBS' % 'JPEG'] env.AppendUnique(CPPPATH = fix_path(inc_path)) env.AppendUnique(LIBPATH = fix_path(lib_path)) else: env['SKIPPED_DEPS'].extend(['jpeg']) if env['PROJ']: OPTIONAL_LIBSHEADERS.append(['proj', 'proj_api.h', False,'C','-DMAPNIK_USE_PROJ4']) inc_path = env['%s_INCLUDES' % 'PROJ'] lib_path = env['%s_LIBS' % 'PROJ'] env.AppendUnique(CPPPATH = fix_path(inc_path)) env.AppendUnique(LIBPATH = fix_path(lib_path)) else: env['SKIPPED_DEPS'].extend(['proj']) if env['PNG']: OPTIONAL_LIBSHEADERS.append(['png', 'png.h', False,'C','-DHAVE_PNG']) inc_path = env['%s_INCLUDES' % 'PNG'] lib_path = env['%s_LIBS' % 'PNG'] env.AppendUnique(CPPPATH = fix_path(inc_path)) env.AppendUnique(LIBPATH = fix_path(lib_path)) else: env['SKIPPED_DEPS'].extend(['png']) if env['WEBP']: OPTIONAL_LIBSHEADERS.append(['webp', 'webp/decode.h', False,'C','-DHAVE_WEBP']) inc_path = env['%s_INCLUDES' % 'WEBP'] lib_path = env['%s_LIBS' % 'WEBP'] env.AppendUnique(CPPPATH = fix_path(inc_path)) env.AppendUnique(LIBPATH = fix_path(lib_path)) else: env['SKIPPED_DEPS'].extend(['webp']) if env['TIFF']: OPTIONAL_LIBSHEADERS.append(['tiff', 'tiff.h', False,'C','-DHAVE_TIFF']) inc_path = env['%s_INCLUDES' % 'TIFF'] lib_path = env['%s_LIBS' % 'TIFF'] env.AppendUnique(CPPPATH = fix_path(inc_path)) env.AppendUnique(LIBPATH = fix_path(lib_path)) else: env['SKIPPED_DEPS'].extend(['tiff']) # if requested, sort LIBPATH and CPPPATH before running CheckLibWithHeader tests if env['PRIORITIZE_LINKING']: conf.prioritize_paths(silent=True) # test for C++11 support, which is required if not env['HOST'] and not conf.supports_cxx11(): color_print(1,"C++ compiler does not support C++11 standard (-std=c++11), which is required. Please upgrade your compiler to at least g++ 4.7 (ideally 4.8)") Exit(1) if not env['HOST']: for libname, headers, required, lang in REQUIRED_LIBSHEADERS: if not conf.CheckLibWithHeader(libname, headers, lang): if required: color_print(1, 'Could not find required header or shared library for %s' % libname) env['MISSING_DEPS'].append(libname) else: color_print(4, 'Could not find optional header or shared library for %s' % libname) env['SKIPPED_DEPS'].append(libname) else: if libname == env['ICU_LIB_NAME']: if env['ICU_LIB_NAME'] not in env['MISSING_DEPS']: if not conf.icu_at_least_four_two(): # expression_string.cpp and map.cpp use fromUTF* function only available in >= ICU 4.2 env['MISSING_DEPS'].append(env['ICU_LIB_NAME']) elif libname == 'harfbuzz': if not conf.harfbuzz_version(): env['SKIPPED_DEPS'].append('harfbuzz-min-version') if not conf.harfbuzz_with_freetype_support(): env['MISSING_DEPS'].append('harfbuzz-with-freetype-support') if env['BIGINT']: env.Append(CPPDEFINES = '-DBIGINT') if env['THREADING'] == 'multi': thread_flag = thread_suffix else: thread_flag = '' conf.FindBoost(BOOST_SEARCH_PREFIXES,thread_flag) has_boost_devel = True if not env['HOST']: if not conf.CheckHeader(header='boost/version.hpp',language='C++'): env['MISSING_DEPS'].append('boost development headers') has_boost_devel = False if has_boost_devel: if not env['HOST']: env['BOOST_LIB_VERSION_FROM_HEADER'] = conf.GetBoostLibVersion() # The other required boost headers. BOOST_LIBSHEADERS = [ ['system', 'boost/system/system_error.hpp', True], ['filesystem', 'boost/filesystem/operations.hpp', True], ['regex', 'boost/regex.hpp', True], ['program_options', 'boost/program_options.hpp', False] ] if env['THREADING'] == 'multi': BOOST_LIBSHEADERS.append(['thread', 'boost/thread/mutex.hpp', True]) # on solaris the configure checks for boost_thread # require the -pthreads flag to be able to check for # threading support, so we add as a global library instead # of attaching to cxxflags after configure if env['PLATFORM'] == 'SunOS': env.Append(CXXFLAGS = '-pthreads') # if requested, sort LIBPATH and CPPPATH before running CheckLibWithHeader tests if env['PRIORITIZE_LINKING']: conf.prioritize_paths(silent=True) if not env['HOST']: # if the user is not setting custom boost configuration # enforce boost version greater than or equal to BOOST_MIN_VERSION if not conf.CheckBoost(BOOST_MIN_VERSION): color_print(4,'Found boost lib version... %s' % env.get('BOOST_LIB_VERSION_FROM_HEADER') ) color_print(1,'Boost version %s or greater is required' % BOOST_MIN_VERSION) if not env['BOOST_VERSION']: env['MISSING_DEPS'].append('boost version >= %s' % BOOST_MIN_VERSION) else: color_print(4,'Found boost lib version... %s' % env.get('BOOST_LIB_VERSION_FROM_HEADER') ) if not env['HOST']: for count, libinfo in enumerate(BOOST_LIBSHEADERS): if not conf.CheckLibWithHeader('boost_%s%s' % (libinfo[0],env['BOOST_APPEND']), libinfo[1], 'C++'): if libinfo[2]: color_print(1,'Could not find required header or shared library for boost %s' % libinfo[0]) env['MISSING_DEPS'].append('boost ' + libinfo[0]) else: color_print(4,'Could not find optional header or shared library for boost %s' % libinfo[0]) env['SKIPPED_DEPS'].append('boost ' + libinfo[0]) # Boost versions before 1.57 are broken when the system package and # Mapnik are compiled against different standards. On Ubuntu 14.04 # using boost 1.54, it breaks scoped enums. It's a bit of a hack to # just turn it off like this, but seems the only available work- # around. See https://svn.boost.org/trac/boost/ticket/6779 for more # details. boost_version = [int(x) for x in env.get('BOOST_LIB_VERSION_FROM_HEADER').split('_')] if not conf.CheckBoostScopedEnum(): if boost_version < [1, 51]: env.Append(CXXFLAGS = '-DBOOST_NO_SCOPED_ENUMS') elif boost_version < [1, 57]: env.Append(CXXFLAGS = '-DBOOST_NO_CXX11_SCOPED_ENUMS') if not env['HOST'] and env['ICU_LIB_NAME'] not in env['MISSING_DEPS']: # http://lists.boost.org/Archives/boost/2009/03/150076.php # we need libicui18n if using static boost libraries, so it is # important to try this check with the library linked if conf.boost_regex_has_icu(): # TODO - should avoid having this be globally defined... env.Append(CPPDEFINES = '-DBOOST_REGEX_HAS_ICU') else: env['SKIPPED_DEPS'].append('boost_regex_icu') for libname, headers, required, lang, define in OPTIONAL_LIBSHEADERS: if not env['HOST']: if not conf.CheckLibWithHeader(libname, headers, lang): if required: color_print(1, 'Could not find required header or shared library for %s' % libname) env['MISSING_DEPS'].append(libname) else: color_print(4, 'Could not find optional header or shared library for %s' % libname) env['SKIPPED_DEPS'].append(libname) else: env.Append(CPPDEFINES = define) else: env.Append(CPPDEFINES = define) env['REQUESTED_PLUGINS'] = [ driver.strip() for driver in Split(env['INPUT_PLUGINS'])] SQLITE_HAS_RTREE = None if env['HOST']: SQLITE_HAS_RTREE = True CHECK_PKG_CONFIG = conf.CheckPKGConfig('0.15.0') if len(env['REQUESTED_PLUGINS']): if env['HOST']: for plugin in env['REQUESTED_PLUGINS']: details = env['PLUGINS'][plugin] if details['lib']: env.AppendUnique(LIBS=details['lib']) else: color_print(4,'Checking for requested plugins dependencies...') for plugin in env['REQUESTED_PLUGINS']: details = env['PLUGINS'][plugin] if plugin == 'gdal': if conf.parse_config('GDAL_CONFIG',checks='--libs'): conf.parse_config('GDAL_CONFIG',checks='--cflags') libname = conf.get_pkg_lib('GDAL_CONFIG','gdal') if libname: if not conf.CheckLibWithHeader(libname, details['inc'], details['lang']): env['SKIPPED_DEPS'].append('gdal') if libname in env['LIBS']: env['LIBS'].remove(libname) else: details['lib'] = libname elif plugin == 'postgis' or plugin == 'pgraster': if env.get('PG_LIBS') or env.get('PG_INCLUDES'): libname = details['lib'] if env.get('PG_INCLUDES'): inc_path = env['PG_INCLUDES'] env.AppendUnique(CPPPATH = fix_path(inc_path)) if env.get('PG_LIBS'): lib_path = env['PG_LIBS'] env.AppendUnique(LIBPATH = fix_path(lib_path)) if not conf.CheckLibWithHeader(libname, details['inc'], details['lang']): env['SKIPPED_DEPS'].append(libname) if libname in env['LIBS']: env['LIBS'].remove(libname) else: details['lib'] = libname else: conf.parse_pg_config('PG_CONFIG') elif plugin == 'ogr': if conf.ogr_enabled(): if conf.parse_config('GDAL_CONFIG',checks='--libs'): conf.parse_config('GDAL_CONFIG',checks='--cflags') libname = conf.get_pkg_lib('GDAL_CONFIG','ogr') if libname: if not conf.CheckLibWithHeader(libname, details['inc'], details['lang']): if 'gdal' not in env['SKIPPED_DEPS']: env['SKIPPED_DEPS'].append('gdal') if libname in env['LIBS']: env['LIBS'].remove(libname) else: details['lib'] = libname elif details['path'] and details['lib'] and details['inc']: backup = env.Clone().Dictionary() # Note, the 'delete_existing' keyword makes sure that these paths are prepended # to the beginning of the path list even if they already exist incpath = env['%s_INCLUDES' % details['path']] libpath = env['%s_LIBS' % details['path']] env.PrependUnique(CPPPATH = fix_path(incpath),delete_existing=True) env.PrependUnique(LIBPATH = fix_path(libpath),delete_existing=True) if not conf.CheckLibWithHeader(details['lib'], details['inc'], details['lang']): env.Replace(**backup) env['SKIPPED_DEPS'].append(details['lib']) if plugin == 'sqlite': sqlite_backup = env.Clone().Dictionary() # if statically linking, on linux we likely # need to link sqlite to pthreads and dl if env['RUNTIME_LINK'] == 'static' and not env['PLATFORM'] == 'Darwin': if CHECK_PKG_CONFIG and conf.CheckPKG('sqlite3'): sqlite_env = env.Clone() try: sqlite_env.ParseConfig('pkg-config --static --libs sqlite3') for lib in sqlite_env['LIBS']: if not lib in env['LIBS']: env["SQLITE_LINKFLAGS"].append(lib) env.Append(LIBS=lib) except OSError,e: for lib in ["sqlite3","dl","pthread"]: if not lib in env['LIBS']: env["SQLITE_LINKFLAGS"].append("lib") env.Append(LIBS=lib) else: for lib in ["sqlite3","dl","pthread"]: if not lib in env['LIBS']: env["SQLITE_LINKFLAGS"].append("lib") env.Append(LIBS=lib) SQLITE_HAS_RTREE = conf.sqlite_has_rtree() if not SQLITE_HAS_RTREE: env.Replace(**sqlite_backup) if details['lib'] in env['LIBS']: env['LIBS'].remove(details['lib']) env['SKIPPED_DEPS'].append('sqlite_rtree') else: env.Replace(**sqlite_backup) elif details['lib'] and details['inc']: if not conf.CheckLibWithHeader(details['lib'], details['inc'], details['lang']): env['SKIPPED_DEPS'].append(details['lib']) # re-append the local paths for mapnik sources to the beginning of the list # to make sure they come before any plugins that were 'prepended' env.PrependUnique(CPPPATH = '#include', delete_existing=True) env.PrependUnique(LIBPATH = '#src', delete_existing=True) if not env['HOST']: if env['PGSQL2SQLITE']: if 'sqlite3' not in env['LIBS']: env.AppendUnique(LIBS='sqlite3') env.AppendUnique(CPPPATH = fix_path(env['SQLITE_INCLUDES'])) env.AppendUnique(LIBPATH = fix_path(env['SQLITE_LIBS'])) if 'pq' not in env['LIBS']: if not conf.parse_pg_config('PG_CONFIG'): env['PGSQL2SQLITE'] = False if not SQLITE_HAS_RTREE: env['SKIPPED_DEPS'].append('pgsql2sqlite_rtree') env['PGSQL2SQLITE'] = False # we rely on an internal, patched copy of agg with critical fixes # prepend to make sure we link locally env.Prepend(CPPPATH = '#deps/agg/include') env.Prepend(LIBPATH = '#deps/agg') # prepend deps dir for auxillary headers env.Prepend(CPPPATH = '#deps') if env['CAIRO']: if env['CAIRO_LIBS'] or env['CAIRO_INCLUDES']: c_inc = env['CAIRO_INCLUDES'] if env['CAIRO_LIBS']: env["CAIRO_LIBPATHS"].append(fix_path(env['CAIRO_LIBS'])) if not env['CAIRO_INCLUDES']: c_inc = env['CAIRO_LIBS'].replace('lib','',1) if c_inc: c_inc = os.path.normpath(fix_path(env['CAIRO_INCLUDES'])) if c_inc.endswith('include'): c_inc = os.path.dirname(c_inc) env["CAIRO_CPPPATHS"].extend( [ os.path.join(c_inc,'include/cairo'), os.path.join(c_inc,'include/pixman-1'), #os.path.join(c_inc,'include/freetype2'), #os.path.join(c_inc,'include/libpng'), ] ) env["CAIRO_ALL_LIBS"] = ['cairo'] if env['RUNTIME_LINK'] == 'static': env["CAIRO_ALL_LIBS"].extend( ['pixman-1','expat'] ) # todo - run actual checkLib? env['HAS_CAIRO'] = True else: if not CHECK_PKG_CONFIG: env['HAS_CAIRO'] = False env['SKIPPED_DEPS'].append('pkg-config') env['SKIPPED_DEPS'].append('cairo') elif not conf.CheckPKG('cairo'): env['HAS_CAIRO'] = False env['SKIPPED_DEPS'].append('cairo') else: print 'Checking for cairo lib and include paths... ', cmd = 'pkg-config --libs --cflags cairo' if env['RUNTIME_LINK'] == 'static': cmd += ' --static' cairo_env = env.Clone() try: cairo_env.ParseConfig(cmd) for lib in cairo_env['LIBS']: if not lib in env['LIBS']: env["CAIRO_ALL_LIBS"].append(lib) for lpath in cairo_env['LIBPATH']: if not lpath in env['LIBPATH']: env["CAIRO_LIBPATHS"].append(lpath) for inc in cairo_env['CPPPATH']: if not inc in env['CPPPATH']: env["CAIRO_CPPPATHS"].append(inc) env['HAS_CAIRO'] = True print 'yes' except OSError,e: color_print(1,'no') env['SKIPPED_DEPS'].append('cairo') color_print(1,'pkg-config reported: %s' % e) else: color_print(4,'Not building with cairo support, pass CAIRO=True to enable') if not env['HOST'] and env['HAS_CAIRO']: if not conf.CheckCairoHasFreetype(): env['SKIPPED_DEPS'].append('cairo') env['HAS_CAIRO'] = False #### End Config Stage for Required Dependencies #### if env['MISSING_DEPS']: # if required dependencies are missing, print warnings and then let SCons finish without building or saving local config color_print(1,'\nExiting... the following required dependencies were not found:\n - %s' % '\n - '.join([pretty_dep(dep) for dep in env['MISSING_DEPS']])) color_print(1,"\nSee '%s' for details on possible problems." % (fix_path(SCONS_LOCAL_LOG))) if env['SKIPPED_DEPS']: color_print(4,'\nAlso, these OPTIONAL dependencies were not found:\n - %s' % '\n - '.join([pretty_dep(dep) for dep in env['SKIPPED_DEPS']])) color_print(4,"\nSet custom paths to these libraries and header files on the command-line or in a file called '%s'" % SCONS_LOCAL_CONFIG) color_print(4," ie. $ python scons/scons.py BOOST_INCLUDES=/usr/local/include BOOST_LIBS=/usr/local/lib") color_print(4, "\nOnce all required dependencies are found a local '%s' will be saved and then install:" % SCONS_LOCAL_CONFIG) color_print(4," $ sudo python scons/scons.py install") color_print(4,"\nTo view available path variables:\n $ python scons/scons.py --help or -h") color_print(4,'\nTo view overall SCons help options:\n $ python scons/scons.py --help-options or -H\n') color_print(4,'More info: https://github.com/mapnik/mapnik/wiki/Mapnik-Installation') if not HELP_REQUESTED: Exit(1) else: # Save the custom variables in a SCONS_LOCAL_CONFIG # that will be reloaded to allow for `install` without re-specifying custom variables color_print(4,"\nAll Required dependencies found!\n") if env['USE_CONFIG']: if os.path.exists(SCONS_LOCAL_CONFIG): action = 'Overwriting and re-saving' os.unlink(SCONS_LOCAL_CONFIG) else: action = 'Saving new' color_print(4,"%s file '%s'..." % (action,SCONS_LOCAL_CONFIG)) color_print(4,"Will hold custom path variables from commandline and python config file(s)...") opts.Save(SCONS_LOCAL_CONFIG,env) else: color_print(4,"Did not use user config file, no custom path variables will be saved...") if env['SKIPPED_DEPS']: color_print(4,'\nNote: will build without these OPTIONAL dependencies:\n - %s' % '\n - '.join([pretty_dep(dep) for dep in env['SKIPPED_DEPS']])) print # fetch the mapnik version header in order to set the # ABI version used to build libmapnik.so on linux in src/build.py abi = GetMapnikLibVersion() abi_split = abi.split('.') env['ABI_VERSION'] = abi_split env['MAPNIK_VERSION_STRING'] = abi env['MAPNIK_VERSION'] = str(int(abi_split[0])*100000+int(abi_split[1])*100+int(abi_split[2])) # Common DEFINES. env.Append(CPPDEFINES = '-D%s' % env['PLATFORM'].upper()) if env['THREADING'] == 'multi': env.Append(CPPDEFINES = '-DMAPNIK_THREADSAFE') if env['NO_ATEXIT']: env.Append(CPPDEFINES = '-DMAPNIK_NO_ATEXIT') # Mac OSX (Darwin) special settings if env['PLATFORM'] == 'Darwin': pthread = '' else: pthread = '-pthread' # Common debugging flags. # http://lists.fedoraproject.org/pipermail/devel/2010-November/144952.html debug_flags = ['-g', '-fno-omit-frame-pointer'] debug_defines = ['-DDEBUG', '-DMAPNIK_DEBUG'] ndebug_defines = ['-DNDEBUG'] # faster compile # http://www.boost.org/doc/libs/1_47_0/libs/spirit/doc/html/spirit/what_s_new/spirit_2_5.html#spirit.what_s_new.spirit_2_5.breaking_changes env.Append(CPPDEFINES = '-DBOOST_SPIRIT_NO_PREDEFINED_TERMINALS=1') env.Append(CPPDEFINES = '-DBOOST_PHOENIX_NO_PREDEFINED_TERMINALS=1') # c++11 support / https://github.com/mapnik/mapnik/issues/1683 # - upgrade to PHOENIX_V3 since that is needed for c++11 compile env.Append(CPPDEFINES = '-DBOOST_SPIRIT_USE_PHOENIX_V3=1') # Enable logging in debug mode (always) and release mode (when specified) if env['DEFAULT_LOG_SEVERITY']: if env['DEFAULT_LOG_SEVERITY'] not in severities: severities_list = ', '.join(["'%s'" % s for s in severities]) color_print(1,"Cannot set default logger severity to '%s', available options are %s." % (env['DEFAULT_LOG_SEVERITY'], severities_list)) Exit(1) else: log_severity = severities.index(env['DEFAULT_LOG_SEVERITY']) else: severities_list = ', '.join(["'%s'" % s for s in severities]) color_print(1,"No logger severity specified, available options are %s." % severities_list) Exit(1) log_enabled = ['-DMAPNIK_LOG', '-DMAPNIK_DEFAULT_LOG_SEVERITY=%d' % log_severity] if env['DEBUG']: debug_defines += log_enabled else: if env['ENABLE_LOG']: ndebug_defines += log_enabled # Enable statistics reporting if env['ENABLE_STATS']: debug_defines.append('-DMAPNIK_STATS') ndebug_defines.append('-DMAPNIK_STATS') # Add rdynamic to allow using statics between application and plugins # http://stackoverflow.com/questions/8623657/multiple-instances-of-singleton-across-shared-libraries-on-linux if env['PLATFORM'] != 'Darwin' and env['CXX'] == 'g++': env.MergeFlags('-rdynamic') if env['DEBUG']: env.Append(CXXFLAGS = debug_flags) env.Append(CPPDEFINES = debug_defines) else: env.Append(CPPDEFINES = ndebug_defines) # Common flags for g++/clang++ CXX compiler. # TODO: clean up code more to make -Wextra -Wsign-compare -Wsign-conversion -Wconversion viable common_cxx_flags = '-Wall %s %s -ftemplate-depth-300 -Wsign-compare -Wshadow ' % (env['WARNING_CXXFLAGS'], pthread) if env['DEBUG']: env.Append(CXXFLAGS = common_cxx_flags + '-O0') else: # TODO - add back -fvisibility-inlines-hidden # https://github.com/mapnik/mapnik/issues/1863 env.Append(CXXFLAGS = common_cxx_flags + '-O%s' % (env['OPTIMIZATION'])) if env['DEBUG_UNDEFINED']: env.Append(CXXFLAGS = '-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrapv -fwrapv') # if requested, sort LIBPATH and CPPPATH one last time before saving... if env['PRIORITIZE_LINKING']: conf.prioritize_paths(silent=True) # finish config stage and pickle results env = conf.Finish() env_cache = open(SCONS_CONFIGURE_CACHE, 'w') pickle_dict = {} for i in pickle_store: pickle_dict[i] = env.get(i) pickle.dump(pickle_dict,env_cache) env_cache.close() # fix up permissions on configure outputs # this is hackish but avoids potential problems # with a non-root configure following a root install # that also triggered a re-configure try: os.chmod(SCONS_CONFIGURE_CACHE,0666) except: pass try: os.chmod(SCONS_LOCAL_CONFIG,0666) except: pass try: os.chmod('.sconsign.dblite',0666) except: pass try: os.chmod(SCONS_LOCAL_LOG,0666) except: pass try: for item in glob('%s/*' % SCONF_TEMP_DIR): os.chmod(item,0666) except: pass if 'configure' in command_line_args: color_print(4,'\nConfigure completed: run `make` to build or `make install`') if not HELP_REQUESTED: Exit(0) # autogenerate help on default/current SCons options Help(opts.GenerateHelpText(env)) #### Builds #### if not HELP_REQUESTED: if 'uninstall' in COMMAND_LINE_TARGETS: # dummy action in case there is nothing to uninstall, to avoid phony error.. env.Alias("uninstall", "") env['create_uninstall_target'] = create_uninstall_target if env['PKG_CONFIG_PATH']: env['ENV']['PKG_CONFIG_PATH'] = fix_path(env['PKG_CONFIG_PATH']) # otherwise this variable == os.environ["PKG_CONFIG_PATH"] if env['PATH']: env['ENV']['PATH'] = fix_path(env['PATH']) + ':' + env['ENV']['PATH'] if env['PATH_REMOVE']: for p in env['PATH_REMOVE'].split(':'): if p in env['ENV']['PATH']: env['ENV']['PATH'].replace(p,'') rm_path(p,'LIBPATH',env) rm_path(p,'CPPPATH',env) rm_path(p,'CXXFLAGS',env) rm_path(p,'CAIRO_LIBPATHS',env) rm_path(p,'CAIRO_CPPPATHS',env) if env['PATH_REPLACE']: searches,replace = env['PATH_REPLACE'].split(':') for search in searches.split(','): if search in env['ENV']['PATH']: env['ENV']['PATH'] = os.path.abspath(env['ENV']['PATH'].replace(search,replace)) def replace_path(set,s,r): idx = 0 for i in env[set]: if s in i: env[set][idx] = os.path.abspath(env[set][idx].replace(s,r)) idx +=1 replace_path('LIBPATH',search,replace) replace_path('CPPPATH',search,replace) replace_path('CXXFLAGS',search,replace) replace_path('CAIRO_LIBPATHS',search,replace) replace_path('CAIRO_CPPPATHS',search,replace) # export env so it is available in build.py files Export('env') plugin_base = env.Clone() Export('plugin_base') if env['FAST']: # caching is 'auto' by default in SCons # But let's also cache implicit deps... EnsureSConsVersion(0,98) SetOption('implicit_cache', 1) SetOption('max_drift', 1) # Build agg first, doesn't need anything special if env['RUNTIME_LINK'] == 'shared': SConscript('deps/agg/build.py') # Build spirit grammars SConscript('src/json/build.py') SConscript('src/wkt/build.py') # Build the core library SConscript('src/build.py') # Install headers SConscript('include/build.py') # Install auxiliary headers SConscript('deps/mapnik/build.py') # Build the requested and able-to-be-compiled input plug-ins GDAL_BUILT = False OGR_BUILT = False POSTGIS_BUILT = False PGRASTER_BUILT = False for plugin in env['PLUGINS']: if env['PLUGIN_LINKING'] == 'static' or plugin not in env['REQUESTED_PLUGINS']: if os.path.exists('plugins/input/%s.input' % plugin): os.unlink('plugins/input/%s.input' % plugin) elif plugin in env['REQUESTED_PLUGINS']: details = env['PLUGINS'][plugin] if details['lib'] in env['LIBS']: if env['PLUGIN_LINKING'] == 'shared': SConscript('plugins/input/%s/build.py' % plugin) # hack to avoid breaking on plugins with the same dep if plugin == 'ogr': OGR_BUILT = True if plugin == 'gdal': GDAL_BUILT = True if plugin == 'postgis': POSTGIS_BUILT = True if plugin == 'pgraster': PGRASTER_BUILT = True if plugin == 'ogr' or plugin == 'gdal': if GDAL_BUILT and OGR_BUILT: env['LIBS'].remove(details['lib']) elif plugin == 'postgis' or plugin == 'pgraster': if POSTGIS_BUILT and PGRASTER_BUILT: env['LIBS'].remove(details['lib']) else: env['LIBS'].remove(details['lib']) elif not details['lib']: if env['PLUGIN_LINKING'] == 'shared': # build internal datasource input plugins SConscript('plugins/input/%s/build.py' % plugin) else: color_print(1,"Notice: dependencies not met for plugin '%s', not building..." % plugin) if os.path.exists('plugins/input/%s.input' % plugin): os.unlink('plugins/input/%s.input' % plugin) create_uninstall_target(env, env['MAPNIK_LIB_DIR_DEST'], False) create_uninstall_target(env, env['MAPNIK_INPUT_PLUGINS_DEST'] , False) if 'install' in COMMAND_LINE_TARGETS: # if statically linking plugins still make sure # to create the dynamic plugins directory if env['PLUGIN_LINKING'] == 'static': if not os.path.exists(env['MAPNIK_INPUT_PLUGINS_DEST']): os.makedirs(env['MAPNIK_INPUT_PLUGINS_DEST']) # before installing plugins, wipe out any previously # installed plugins that we are no longer building for plugin in PLUGINS.keys(): plugin_path = os.path.join(env['MAPNIK_INPUT_PLUGINS_DEST'],'%s.input' % plugin) if os.path.exists(plugin_path): if plugin not in env['REQUESTED_PLUGINS'] or env['PLUGIN_LINKING'] == 'static': color_print(4,"Notice: removing out of date plugin: '%s'" % plugin_path) os.unlink(plugin_path) # Build the c++ rundemo app if requested if not env['HOST']: if env['DEMO']: SConscript('demo/c++/build.py') # Build shapeindex and remove its dependency from the LIBS if not env['HOST']: if 'boost_program_options%s' % env['BOOST_APPEND'] in env['LIBS']: if env['SHAPEINDEX']: SConscript('utils/shapeindex/build.py') if env['MAPNIK_INDEX']: SConscript('utils/mapnik-index/build.py') # Build the pgsql2psqlite app if requested if env['PGSQL2SQLITE']: SConscript('utils/pgsql2sqlite/build.py') if env['SVG2PNG']: SConscript('utils/svg2png/build.py') if env['MAPNIK_RENDER']: SConscript('utils/mapnik-render/build.py') # devtools not ready for public #SConscript('utils/ogrindex/build.py') env['LIBS'].remove('boost_program_options%s' % env['BOOST_APPEND']) else : color_print(1,"WARNING: Cannot find boost_program_options. 'shapeindex' and other command line programs will not be available") # Configure fonts and if requested install the bundled DejaVu fonts SConscript('fonts/build.py') # build C++ tests SConscript('test/build.py') if env['BENCHMARK']: SConscript('benchmark/build.py') if os.path.exists('./bindings/python/build.py'): SConscript('./bindings/python/build.py') # install mapnik-config script SConscript('utils/mapnik-config/build.py') # write the viewer.ini file SConscript('demo/viewer/build.py') mapnik-3.0.9/appveyor.yml000066400000000000000000000007271262555547000154130ustar00rootroot00000000000000environment: msvs_toolset: 14 BOOST_VERSION: 59 FASTBUILD: 1 matrix: - platform: x64 configuration: Release os: Visual Studio 2015 shallow_clone: true install: - scripts\build-appveyor.bat artifacts: - path: mapnik-gyp\msbuild-summary.txt name: msbuild-summary.txt - path: mapnik-gyp\msbuild-errors.txt name: msbuild-errors.txt - path: mapnik-gyp\msbuild-warnings.txt name: msbuild-warnings.txt build: off test: off deploy: off mapnik-3.0.9/benchmark/000077500000000000000000000000001262555547000147475ustar00rootroot00000000000000mapnik-3.0.9/benchmark/.gitignore000066400000000000000000000002461262555547000167410ustar00rootroot00000000000000multicolor-hextree-actual.png multicolor-hextree-actual.png polygon_clipping_boost_actual.png polygon_clipping_clipper_actual.png polygon_clipping_agg_actual.png out mapnik-3.0.9/benchmark/bench_framework.hpp000066400000000000000000000112041262555547000206120ustar00rootroot00000000000000#ifndef __MAPNIK_BENCH_FRAMEWORK_HPP__ #define __MAPNIK_BENCH_FRAMEWORK_HPP__ // mapnik #include #include #include #include "../test/cleanup.hpp" // stl #include #include #include #include #include #include #include namespace benchmark { class test_case { protected: mapnik::parameters params_; std::size_t threads_; std::size_t iterations_; public: test_case(mapnik::parameters const& params) : params_(params), threads_(mapnik::safe_cast(*params.get("threads",0))), iterations_(mapnik::safe_cast(*params.get("iterations",0))) {} std::size_t threads() const { return threads_; } std::size_t iterations() const { return iterations_; } virtual bool validate() const = 0; virtual bool operator()() const = 0; virtual ~test_case() {} }; void handle_args(int argc, char** argv, mapnik::parameters & params) { if (argc > 0) { for (int i=1;i int run(T const& test_runner, std::string const& name) { try { if (!test_runner.validate()) { std::clog << "test did not validate: " << name << "\n"; return -1; } // run test once before timing // if it returns false then we'll abort timing if (test_runner()) { std::chrono::high_resolution_clock::time_point start; std::chrono::high_resolution_clock::duration elapsed; std::stringstream s; s << name << ":" << std::setw(45 - (int)s.tellp()) << std::right << " t:" << test_runner.threads() << " i:" << test_runner.iterations(); if (test_runner.threads() > 0) { using thread_group = std::vector >; using value_type = thread_group::value_type; thread_group tg; for (std::size_t i=0;ijoinable()) t->join();}); elapsed = std::chrono::high_resolution_clock::now() - start; } else { start = std::chrono::high_resolution_clock::now(); test_runner(); elapsed = std::chrono::high_resolution_clock::now() - start; } s << std::setw(65 - (int)s.tellp()) << std::right << std::chrono::duration_cast(elapsed).count() << " milliseconds\n"; std::clog << s.str(); } return 0; } catch (std::exception const& ex) { std::clog << "test runner did not complete: " << ex.what() << "\n"; return -1; } return 0; } } #endif // __MAPNIK_BENCH_FRAMEWORK_HPP__ mapnik-3.0.9/benchmark/build.py000066400000000000000000000035121262555547000164210ustar00rootroot00000000000000import os import glob from copy import copy Import ('env') test_env = env.Clone() test_env['LIBS'] = [env['MAPNIK_NAME']] test_env.AppendUnique(LIBS=copy(env['LIBMAPNIK_LIBS'])) test_env.AppendUnique(LIBS='mapnik-wkt') if env['PLATFORM'] == 'Linux': test_env.AppendUnique(LIBS='dl') test_env.AppendUnique(LIBS='rt') test_env.AppendUnique(CXXFLAGS='-g') test_env['CXXFLAGS'] = copy(test_env['LIBMAPNIK_CXXFLAGS']) test_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES']) if test_env['HAS_CAIRO']: test_env.PrependUnique(CPPPATH=test_env['CAIRO_CPPPATHS']) test_env.Append(CPPDEFINES = '-DHAVE_CAIRO') test_env['LINKFLAGS'] = copy(test_env['LIBMAPNIK_LINKFLAGS']) if env['PLATFORM'] == 'Darwin': test_env.Append(LINKFLAGS='-F/ -framework CoreFoundation') test_env_local = test_env.Clone() #benchmarks = glob.glob('test*cpp') benchmarks = [ #"test_array_allocation.cpp", #"test_png_encoding1.cpp", #"test_png_encoding2.cpp", #"test_to_string1.cpp", #"test_to_string2.cpp", #"test_to_bool.cpp", #"test_to_double.cpp", #"test_to_int.cpp", #"test_utf_encoding.cpp" "test_polygon_clipping.cpp", #"test_polygon_clipping_rendering.cpp", "test_proj_transform1.cpp", "test_expression_parse.cpp", "test_face_ptr_creation.cpp", "test_font_registration.cpp", "test_rendering.cpp", "test_rendering_shared_map.cpp", "test_offset_converter.cpp", "test_marker_cache.cpp", "test_quad_tree.cpp", "test_noop_rendering.cpp", "test_getline.cpp", # "test_numeric_cast_vs_static_cast.cpp", ] for cpp_test in benchmarks: test_program = test_env_local.Program('out/'+cpp_test.replace('.cpp',''), source=[cpp_test]) if 'install' in COMMAND_LINE_TARGETS: env.Alias('install',test_program) #Depends(test_program, env.subst('../src/%s' % env['MAPNIK_LIB_NAME'])) mapnik-3.0.9/benchmark/compare_images.hpp000066400000000000000000000022221262555547000204310ustar00rootroot00000000000000#ifndef __MAPNIK_COMPARE_IMAGES_HPP__ #define __MAPNIK_COMPARE_IMAGES_HPP__ #include #include #include using namespace mapnik; namespace benchmark { bool compare_images(std::string const& src_fn,std::string const& dest_fn) { std::unique_ptr reader1(mapnik::get_image_reader(dest_fn,"png")); if (!reader1.get()) { throw mapnik::image_reader_exception("Failed to load: " + dest_fn); } std::unique_ptr reader2(mapnik::get_image_reader(src_fn,"png")); if (!reader2.get()) { throw mapnik::image_reader_exception("Failed to load: " + src_fn); } const image_any desc_any = reader1->read(0,0,reader1->width(), reader1->height()); const image_any src_any = reader2->read(0,0,reader2->width(), reader2->height()); image_rgba8 const& dest = util::get(desc_any); image_rgba8 const& src = util::get(src_any); return compare(dest, src, 0, true) == 0; } } #endif // __MAPNIK_COMPARE_IMAGES_HPP__ mapnik-3.0.9/benchmark/data/000077500000000000000000000000001262555547000156605ustar00rootroot00000000000000mapnik-3.0.9/benchmark/data/gdal-wgs.xml000066400000000000000000000006571262555547000201170ustar00rootroot00000000000000 style ./valid.geotiff.tif gdal mapnik-3.0.9/benchmark/data/multicolor-hextree-expected.png000066400000000000000000002006071262555547000240250ustar00rootroot00000000000000PNG  IHDRkXTPLTE^^c^_a]^_^__^^_^^^^^^`__^__a_]^^]_^\__^a_]]ޠ^__^^^\_`]__^]a_`]^__a^^]^^]ޟ_`]]_`_^^__ߠ__^_^___`_^_^bݞ^^]\__``]ߠ]ܞ_ޠ``^_^]_^^^_a\`_a_a^a^ߟ_`ݞ_`]ݝ^\__ߠ_`ޞ_ߠ^_`^ߠ\^_^_a]_ݠ___^___aޟ`_ݝ_]^ߠߡ]_ߞ]]`_^^`_^ߠ__aݠ_^ޞ]ޟ^_ߠ_ޢ^^ߞ_`ߞߡݞߟ]ߟݟ__ޟޞߠ߬jtRNS!_###_`_"!# #` _ ]_!_""`!""""ߞ_]`!^_$_"``b!!!_ "$#"_ߝ^ _`"__`` !#^`!"``""!#[^^]_!!#`_``aa_"!"""$^ޝݞݠ^^^`"_!!`baA_ߞߠ^_ޟࢡߟܡIDATx c[m'{gcg۶m۶mɶ;۶];u ‰4X | R~NWCJ&JQDs/;Ekj[#v\f?g n%Q I9WX-:;&E,^@V=9V@@ or:ѵI%:+MR G_kn;҉jW^Pre7Il!tP:a=7wM|-nwE)hݏ Jg]k$q?Sߴd1wy8Q.H?E/*. BRRG΄9ApG kcw8wI<1oa-oi{+޸ߢ4߀-U|JĜ.=d^zC:,&a+dU5}ه[*'лG5SzTmqOO/*lzG]qBSM'69rzaeE${Jo Z mv[sMzeqh(F?3BzS";J~Sw3_М5-闒ϔVЉvr; Y 2}prJ_&-GbY NC1XR'w;Ibw9=[<(/ꆌaSSDL3MRF+2AV+]>|Ah70mƱ(/, `G&2)Nݾ87rE8ܤXs-mm~X_ʶFwN2 6.* NOV-Tc]i(%]13Jídaݒ:W+ZXnxI*Tl+R1f/)O=NhMw]h\rm}m̈́A!MSj *(հ" *@z% /{vfNMN"tFG[5,"{֥yQ R"҉^Cc1) 6W'nT} +#PȟH:*1DU//S,<GP=-JӴh-w v7-*\aogs?#(9] %_gs;"|""Q[aty3LGm~Baq+_{`db=o6"k"LJf'nܟ AIeܟNN(+ ۾Aq/>}5o`SJ!.VXNzL>>,ʘ<+-V笈A6yai"qދy8+IVP^iނxNqOa3!-}8c͢(Ԩaxye'?jB\gI>Sh6مʋ,TgPOm%َCm4%)l"geB=}Oj> oŌ@<3?,DZe𭁳g32O~&!}>퉗}ilVXo|TӯG'`KD,K J8stqҶ? J3{ZzYms9MbɋE\&!&Zt7gؽ͑d'/=dkPz dq6m2c E_Xm lr$Yh{̛=PjWUKfɲF{ϟw.-rʍVr(ɼxtBdh?yB$! ^s{".ǂ2WdZ[54s>~r$)M~ix N*-4*$ޔN1┸=t.~<rbi0=:.. ȕmM0@;*,4&3m8" :7KNTc ;\ jMo[j MKmY>`؞D9UЖ58,<8-6&]ik5˜xPf^|24Kl=URrX\[twBZt.@ ЕੋoL:]p,_80^56VN z}<1d]h#"!o{|{m\&mW3xK+}SmGZ2}qi#ִfᩛq.:9vʿ|6DD%ȱy#bٸm0z2H>^~'$+H `;4f9]VĹkV*I|{R)4 U2c6иXzm ̸2xёؿN흅+!Q椻XkTxJ;&ڞ`SmQ4lN)!+_p;@yKkØn2#n=c%px|Cyo7}E7rrB9Y:'um؛Us`WA>v@Ju&o*Q=|{ߝ\Ż)/Jh`t$hKنa;oy*jC2<8~{~k^Cs Jn6!Ȟo!_1cжK"V q.L<3{"O/:_bzzZ |!$Aԟ-YD'W@-!ߢ^6V[^]_R %WتgMU^ay)6$<Ry]pp,_ʳ7Խx?z"o@z],Ha.hzٱ8i'/}&hP;Zԓ{4V-`q RÄc3z j*Y6_K>rNž75F)S"UT[艁xȀywL#a.sb_Ii xe m .m]#Ŕ @M8C"IЙtI "`_?6Ev+_H&h^Qcs-ںw0lnISK#m:Y2*v \UA/bk6֓'nP3z-K·~%^6!I٘PoGascz.Cgbo{rձslUrA3LxbFdR,Qgf~ I6L?Ɗ8.xQ<>)¥#'tLTkBq&ai<ߋn6HsH>n,Z"=>h{`oI9XX/n[Zu7K 2 GHHj$G&Uh}{/taԇv 򠫅zDb>T>J,9˜!gwf@*7xY{^.{ .4}O:cIؖiv0^bw#UԥRxt 4w%W{џ!{7˒!zbhuŕjfS2҆d4^.Q +DUPP a1IKn:PW&6/Lkkj QHq9*P ^(v^_a<7 Fmx9PwZ)w¿K ""]ÎluD!HB#5kvQ*5(4RۍqC/rn]gci#Obbf#\Űƣ3MʷXa3&Q A<.'v>j?ܚ(?01bg } #2EQAł0.Dždht8?VT禍ù4c,*P8,@XWS[ }gG !̸tOG.͆Sp23iS:v?u0d}oݬG$%=\+з&_QjO'[1:I Nij\Ѿ H<:L )g>iO k~0QXbG~ 7e6+T֝oɸ$ 8Y ,G+b6}Ј3F*>QkY Vmr&vE]l'OЂsR J+0;>P$w9Wxbo7 b◐B3-m46v 4}VD@g8ȓī5{Lѐ9Tgnш%OQnPƺdڌ?T-\xJS 3 er8^OgV Ug>[dĎ)C}8I9aݘ N;`A@Kq OATcO]|R ;픢 魍ЁhC>JZR2Kا)[ZYl2T x=& VV3#Ti0r׌7Ӕry6}xtbv9 7ǚoP3m8=2@-{XU_i-{,OFo4lu=#߳#f%#ztڲұz(Ycp 920B_;w0ŷxu}LUQ wOοLrmG oJU\+JC(eMzV{`PBk6#Z[@-H:c>8r,ܺʐ["bGIoW5>Ԛ礮Q)MDZKj]ϡ^]|ıBRGOZw5OExFc̍i^DN2a \dUJ0r;$nARg[BF鹴Ԍ؇wTE鋧dQC>a} 6xזGIIس%l5*DrXEG wXD6#19w2 '#tJEIoc# goJ}NKo'^DĿo6x6wt b%fٴ-:,Tж٢:y t}*@YCe6jp?[VX 6.DƢrz%m xzދ0AHEW z2Ck!+ ˊ>>oWVA0^B]A.nFض)PU';rvo~Tt4k .xIDB;} Eu%#^ݢqx+W]gmƧhsʭ xZہ=\u efS ^+gun0u9 n0Qd> f}`n}c\2b;5SPjgc Ǚe3 1uuA(9W_lxߤiPW~ oC1HAρ{+qEi?~aP֭&KN bMj鎐YINm`t:oq"S'9(-x|&͌U.W˭J*zŠ( r;gS5I`xG&kάY!TLvc4{zJ@j#E9KTA!*"8Gӓ Qi91֩Z1eN3s> uIsmvL[/9Et.ciԐRW  =܊֬ Cc5)yvߧ 5,$d:DɉZX%<&uh34)8@i= Ǩք$ fQ>aE(cH.9TnU9CU^IAG!!"mUX7Mf*ޚjIj6˶m%Dn¿fJNHy1KG򋚜hNʶȫZu =эcΏK e҃Pu\'"\4Z4j~Cg6)Imz\/icI5 '3I s2u]qQ >fG)Z \mp@n}vX3x8(n[GQOeOjG}@]?GOo -& p%Iru“JZ1c'w(U4d샬&/hKcֲh(d}Z4 +/FTi I/4xJGv"3f,-7Bەղ̕4{zU>h&T!M @볞Kg`/Ip7/#{en=xLOk&61q>]MP*̟g͍Z7^ɲ{(!ɷTOL.,IhXO;-uد~(`j@{3Kt)N&z_"!N'r3z{*Ow1Tlc=ab70' ;؅ЋՍ/l1ޔq}L Ԍb;f/5%Ų 1Ψ86N-5ty1ၶn\pea,vm Wsb"͡ B)(&IQwXK6P]#VQ(5u\]%Gʜ~D2uUzk'~۸d9 'rڜ7om,Æck%+FfSfWEOt$1s1<C{Η߅|&KYom|Mj.7LeM_W>'֣zm}Wbt[IRKj U8eG3C~z3 !ȗ^PHxⵊ @JF7e |" !4Q (MC/I!^u((FwHPp_-]ϳDŽ3sjU3kP¾d >H{ϰ40 U4J9&Jclm+pOj?V+97Y ~[}~dd) "O(Z]RtKp&*WCk+^vқE2-\9J;HiTG!hp'D,_Hӗܘ%=ScT=6du\t|aFX4-*#=|8-kxAX3]ca·t=ӛ;gvqI~Xa)y4^{y0ʁADz;LdN1lo(Ez哳^V|ATqHI-.7WKӱ42ܔR^l 1J5/U (̥ғ%rT`(~$sc3wlւĈ%p(MGf)@0nQJ_v pŒQg{dH&-RY#yD:Rp%#͇;Dz>u31u_kOc:fZ5e~ #JӬ[.Oɷsl]uj¿j{ yUXg@X7ԛ}z臌~ u˧"1׻)'?.pyXy;7(]Y}5Ha" e/Q5 a5B{Q1 ^*mP`)F96b![{:<0i3<'/ƇY1:*IW@!7$ 曓+Ҿ5ugGhv|JsfL++պ=Y7nBd]Mal5: ff;zS8E  b}5'ISCK'&.[o9#xaԺ:=3v5פ+(ދѿpNIN]"헀fZݿ(̧fڱ@aZm< !䉛e24zˉx%Hߎkg|^Ej,rB1e#$}Ś NW\Q!X SE`z1j,=#[:&2Qorfڈ_ߔD,+ WūrAb,[[BlDPPE~Y68/ l&UN@*WQ1abJCx5fHZd7} |qjjd4L+H 牰l  <"-R+Ψ5ЌS<}Q2211%4QD;D^%qy3%FCb`M@l|eGݶODo~CvE_g+i$_xi'skDf4rl+/ո4Գo9)8s|])!R,"t'W7 ;gJwF?nz[6kV*]HBlI$Ãŕ?5b؝St#)¿t,jջ]Ͽ$pt7<_i/XkWNzx"*/Jnpڬ+K] M5K6GJ詿#oxr4vKZ I6\2)WM˻y]쎇=RCcƊ /qqu1c5Eϡ}SYhyhJ=^8CcO!i3UE+nZ2Apiv9 e\^;e&Yš4@6c GeW2hD8r: ͢{D`~T9yGReʆ9!My7^Ŧ"Uy ]&Эhy:k6Sܪ?V~axY3QG 4mڑ7~٢cO NGN DoT^=?T~ZyfZwG wPo.Ev&l(pA& 8nnaNU!hjxгy`~*[eGajRRK_@ˢG77Q|`\ L> S5# ?..<iOvZ*haQ{!דl+ޙO"2~ը% ҳAV;|%79y(šۖZ5ʛ . kZUN[SjM(3͈#XzE'2 %MjIpD퇫~>(͆gq<(5ҋ&܇TIv[4첑WybЉN$*TGQլdBI}`N,R"i>65af4TI`,aFi68 {>9u1[l]jj [J=NsC.L~z_GqR/*Z& Fj4WqaqH l*W7̀sJ[s@"DQ;5ɡPU.Kup5Sftsa;DwwhЦJ^O[j=eja<߱] Pw* εj|dw䣴oXIS$,\Q"/5G %tw@i~m:%Yz$hӎqvw 5Ksvc{,1 Z?iy_ oP]nWycG.nv=\j#HLCFs<dʳ`t-97]lKuؼx<ը//1,?Z<MWa),H>X5 !40D}Q mnz4^ʹ4Q N)xKmkP<§7~yNN롂r?Z/hNvm*a<\>_s˙&Xh.Ć\R(Ni}MÙMz)OfLDŸ>S8/!Ij°Bpz/UΪ* 4^?>o6%:NQ$~ &5ݎiT[kⴂ`rks^+ rNE0* V"| e] Nҿ%d2Af Q"iBG273?e2#wl@eb<ɤ!%}xI3ж5,DMTG$ SڬfKڦݏ{~N!P1 =G8t'5èΝ,xDq݃%W%5Um D>& xPWݹA[ye m$S;a'8[CyXq:)M,7l!W}α(Xm'5K#t+tIS/CsO@!R__ө⌟Yܗii g{k4 cqu}. }Dlu J3ՊP, Sk60Eյ>HMYP /(ԏ.|t!?|8/Q5$ۛTurh15GKѴj0JY)WX+\@TKs^qN&{h-E¤q 0ZH[QwŔ%dLfda1 =Xus*v0- hIM)Ƒ{?ǪAl'JÊ.4l/G%B 8h`_i>xqPEBKk=`&ZiЌx_M:ԃL'cvǛv2Kibyх*L(*w# 9tBvX~ u[j!]:qwѶHE7ngv{^72 gEKaRm$POsE7qk+oGV{zE(Se~8d6+ڜNb$3 $.Vs^7W|`s2'#MmF ~i5 *Ň1WuAhX~,yT"eAG`iLCBp{P` rJձUqVD lF)xjIyk|c2ec2ӌye8jrd}E `tc&ZKt=]`xa_t0( 8W\WM~o_"c5K}cL|d :/uq*⸰F $;_H&UI7Z,> C5%3std/oY] =iRR/ml}IG IcUPUsL\o_NVi&{=8)I ߁l-s*9'H恝@QnS9iG*2b5R0gؓlJOt8=7U$G2Uo KpRc; X8:r(h MA: f[d~J`m5ˬq?;2nwkYLK"􇵌j&4<qaKG`,r/g29K7 5F IgVR$]mgeft9v1 ʢ2ڽQY) U¯.\M]bp^0;TB6aJE]5)(6MV!H C >ʋH9{1ze x{KkQoǐFj$򞪦|1SEz~_,}=N2&-eۆ&h)vf ieq)GD0B]j pQGif%tqb_ <7 k$A{$OI%5:U ԭC[bt`ӾI†wL?b:matjn/0X'x.$g.+'=eiB]UO7wL#\8J S_.(1=tأ G @L.t /bC#5oz~d@yIg"' ғn{VP6 5wìW"v:e ]~tKoUYnZM:3n=|ZB@L&pKlkTm\rDضcsǶm֎mNLĶm;+U~U6_vL`~܁K+1 pwB,~.#Oh]Rs)Fh4݇O,TB1 )j'p:tޡlS&SvRˆd V,v pt<" -&9ssGڕ!r y}+ $_HfBgtiGq |RU\'HHUpi_#ak&Pfr~~ _Y Yo;}>o qec{K+PיjD[̱&J5MnQU[K'\DOϻh>vL(n=p|O{ wSc@{B¾?[ޱK)qi*l'ʢB!^&%_u $tp0Pf5|wryN|*ihQO7]:u”+k2 \EU>oBTe 4;0Y!/k- \b—E'{ `ڐK{W91R&/9:i%4CIтfBal[Eպ`-e@EGEL<#2#r؆[>-YoEP-QN00jԻR /@둌y,5ze|QL%*3x+3rn'j=;d/H+y:כih~RheVU22^k@9Ȋ5O \d*}xbr(Kl9^j&cfS[12CzY~Ի<]件ާed6Ѫp0^GQoٜ*T5`gl/nٽ}JI#"id(*#鵜?xj=?L7GwsiVPn f ='y?+;Vv4:1h`/< sԼEBF&(?} Ijwz׃Owe*P4 m 6N^p {(|suٝ{ b qui<1EJ[%>ٿHդ+)f3BYݎ3E3e<ԃ(oi'Ve :\LҨQhإ$&KrzU${nu̻w{S-LM*ʳ,b|VxEyl1.:g;4->䃶:+ѓvD4Iw{N{l* BjқQyIӸEվh*? kc_S8;GT'N:dXXtzEz̜(]UW^:G2I,2S-=Ÿ|u9<{em/PQ}Elyʻ!,z%qHRrrLȬ8&9 ݷ\A >vU(@OҮvam  c짢\- J~jcߴl/:WhbPt0[+F!k PZְm'qXe U$0]U9z8z(dݞ8,NVg@f׭o_|ƎlRR?eiRsE1^Fݻ?aEJcVbT1<9C6Y5%^= &OJiC^+d"RPc3{0GhM2:9S?exi|i32f7I4Ʒ I+unPVH[!{m+.u<]Ս=TtCe3~mbuCߐiu'N\Xmtn]u!` zfL}u$L&gkz(qKKb,G Q g~>;GLv92}hp@=:DtU{M_alY9U*NI&vtu2G\:sI{A7@[4Er^$}ߺ`,!3k%p-Y[[pީ#A@1q'2b4vpf7HSp]/IA]VYmyhIէD[!t FH%Y70xDq&.-!R}pE15$L.jpI rH8*#ΉnhAqHtibgjaY?LT xEqkvxP.&eZ FCv_wb垄jCV BuG,|)&_~V[5ٟnCLrF Wv;>&) KNtίB-~0ߎd 8O]X!J;y/~Dü\|=v V>чcp!Ye4fh`}HE~kqc.#~s4WKqz]\i2 nȼɩӡLTmZIzbj[_li-3;ybU~ά9ShQbWTrdJ1H!aE>G~B;siRg@Ϟ"G;MZcb?贀6 ъ[+vt*-X<4W2ZkoFw_+[v98Xn4jc6s`j lo@%627^%E$sLdB}2AmwkpbbbIV%;r3ܪ ~z^<0ޙT:EZKv}2cʯ{p@rPv@>e&@X*I2$dۉH7gg%AɹuT҆v% j(}צrmlgd8x*K׺Ԗu*TU:+ Y\[ƏJҋ?b_`}}($Te:&9]! %uT tޗ :nwa2&P?lGE WZ2"AnnVʣ#)ˬn-=*g+fUJ*=/"xT dc<2{bGOa<1ܫCG.`#$E M+F 8 3nW\6L~TڦKx7!D{ $DJ4BPY[BFF8qL/xmź2Fvn' \,lݼ?|<6s͇ 'b-~['vӂoUz8:P10 C&zs" B}㎇"Y7Xa$n;ܦ9 }̘9F, ȟ59|t1jwn噿_irH}!!1w="WkiDAE VnL( Xs}br-2wxӠEt)Fe|eP?%옘H *S '=M5g aFBB?@ o@?|@u~VZ'*O*e y0ı{Ŏ ck:>&-޼:xZ|նY?62G#S'z. 9LX#fo44e*7սz=[$gU7z"U?8S6:y``}钴"PigVT$^BYl!r=jr(JxcRn4SBee .¾{G/Fzڜ c`SPR0UѼ/ RFV2O$No+1$ ;, k'JZu2':zU95Swzg/?@o 4/flkRJ >W_5XeQ{q1us'RfǽpnHжY9g5N3x! \:%(nli-ul֙r6 wOܿ`J)Ŋ?F1r48~ދ8dJO#T{SVaG6=M[;flX.SWR$;=V6<Ƞ16\6&,Z{L`M+%͞Eޅt6KQ ψu qoݬ.,fʟhs2c۹״MԀ,;^PLԠr J&=%F:|R1E Ժ2 Ռ8])m$仆Ӻֵ:6e(e:s;Tڭ=%q΀cȄ&=!37MnButPɠ#9Zu֕.x q/eSyďf< ;Y5;)3Hb'Y"28qf$덛J^'M)͖<"38zs󵄭(N "8yp,/IS YA#=lc ý8=USP|+h$Byc7]:t f6'3Zxǂ2^}s3r~b_Z3(|,6M&$u%KH ̭DcV 8<̀Wj=f#TD11+ʻ" yM.SnesoO[)6>P] :SFR^XqTpu16i2{Rp`@\@^Er}.ho OK@ۏHQOےGu\ބn.ޡ0++~"}{NHdFZhKt%ۙ1`,?JH}=x`fl$)Ԝ;_~Օvl^mT%~4+yP;R;YuŢ.ofݪRA$4W_aE5r_C.!CjQs{eO,n*'2_c B[v FBQlo6 `s wDXY0f5WE»2}UE7P P w /99!za!Ht2F}v~I[NQRq­=͈™Yʠ~)Oqȷ :‹IezzwEyraYB4;^3Y,&Tڣu߉mXW2Sog9imضv BA LiMeq/!_?O}^⡐{ K"-^dhfqAء\;. W:<[[ύ9S(rO6ҖQ~#}|ܒz ئLBױoDĎʖ:45`kQ ֆE[ϕ`Sn꠲^m<\=o{α \;o.s.# am:49}) N]|z6` v5IbX ȵrdi9>;.`hq=g3fKZ~PO<%vTKl/4=Ip^iZ cRϹ__+m>:s \[bg,<=E z/P_UY;m`]SI2' }  2/u\Ψ:dyA`N, rV9xUMR - &沞[@ak1uBS-]JQT\@H6~-m&bD^q5;x# 놵w4ό=)U:/|G!HLx=mOw@mHуQY[5"Ο׋@@ :6gFvQ{4wL{RCF7mRID ,V M)/osѽ'HOd˪ض'0 _BY. ~x$1`Ͽ% ~~FQj=__TkvI/WDnt'o~]M`(,;Iӱ$ Wp*>!8p6[b{=:HI'\*N7[Fo;ca2:HzKgv90˭j$|>>y%7F:9t-t<^ǭ]T֞Twk7C|ʆ5\b k(%eqmjS G5S8|59k<= ,_4ߒ!8FVF\(A?dz7V3hP؍/ܣƄM%Aн/ksݏEbl \l?0\Д">Ysy9{'r;d"g0@wJw28RJD"4FR!jg%č & q91HdG=rsht"dnhZs(+hm{TJʘ||gXeugBbwPK3!{=%"9GX HQϖw{vVHPD%A}ewMK OX$,Ϩgt]BXtxO@Q&9ڡ?!'g wjbLTc^F5"UP \Ct.̪u9}G=c`*PE6_|vN&qEnt-jXDUm_G]wy}]bg8G8}ǡ]$*%v#+; V"5B>||dYcl7g?՗i گ3OLapgeb.Tp Hq<6y2 ׬'i4v':,9F\T֪!P sMgKm2[6/XcTPBxۦ'|M#54|{xP"GYZbw/GMri)N;B($?"Z!rĜny}fD;v7{H! i0zE; %E_!>|^rhڂox )@#P|+P;^DRdյ3o#{{ZPΞVSQoSѹK)2)d%:aIGW;z[8c6ă2g'$mrnXʎm[k {],\r @i'SHey}ΩҍX[nΛqS4B/P/HoVMx?<ʃus)V]AY&m*$+e~솵jhvSG?nC=%@;\$iAUv{a46:kN׃}9ufD2cqb؎ho`sԫb_[kѧ"ϴ!D_˕L4v>]fmzJk0&z D]ڬPV)*720b!aL'nWSئ0֩,9X+Ύyd:Pك+Ov1E,(v%^<%ZGڇGJH8O>4K!.̓AH$PgG!s85PRK G~ZBX4eAOe|),H~=%fy)D9_Tg<7czyr5nay~>tez~/(n7s[jGd|0z Xw$7MVG: 2CǛFG%l?-PE@^K5{@Ɖ!lLao)xbdrMu~1 e"Oad&'##Ʃ)a 5yQ,2PấS%N)T 29)‡TfG抽:370&$%CU+yDQ>a{Y} sHメ PfyQ.H\؟ |\]ߵ"/^|Λxچ/u绹2kEv+ƅ ~__wE]m:qTC(ϵ 3H o&>oe*S9LaҶMhPrQZ&ϷS HȎ~$}Wߔfh7|eЂK0ͨi7NY7=9WނA׺S/M0*>ezCvӣhFAh!t8T.,oC-Pd?B?G̽[U obRѥ64p o.>dєԫ^_Iyns2 "/Ag\w`ɠ\X bo6kO‚&UxGM>n-{O@C(km6 /`ԻxH{b*P>)PV\2>,:1Yl>\$PЙgd$\*'Yo_|_~PF> 2Ծ{lphڎ[g%>vbOF6fpYߑICe Ѭ>:?)8+,^eGJ ;B zopy1"v;{{@Yɋ.ݦKkl%!~L\=P2I3g̗|khZPR8C:pTRG $VdZAowF%;a͹4[K#}֮5958N6%&@&IfGnU>tF`8_]*dsUH#`.';}&1@J$s*PLAa\ل $X~gmb vO;ԗc EydٶL&~>kXWCQΑі4 t,s*E,lҡ[#ntY T ")ĸrmg a]]s;rDA8/H&$q_/ ;uSi]G ?0c|tB"C^5L%Ǭ|_AN{FF? V' " >6LPq_z%PrG" EYP~Π<Ɡ?:8͛*^E;WU7OBb$[2M- xh.*k'Pı=iu7[Cko{^롑xYwm`'#ʕs{gjatQ+5`)҅F:|lF߅Ұm]7S8ѐPs'7j͆zyk%-ђNiJ,(; b4DB<WaRHE梵H)ݿm/Y/D)c9`QRD`+aɓ:/2HZѭ/K[r /fߙݙDLS*RdPz) ]0Y@@yy4,n. H^&*!=̩.kj5>Eq+W8b vi,S`I@ii~v8cpR4K 0*t2~`[d~Y?xϟ|Un ҹ`WU~_?FؗʱO*' NMt"K$gstRxx ^I]!W:mg=ۧ^Xi6qӿݯ1+`kj} B{{iCDou_"!Uf5j%ERmu/dzA Vk(*B5N ~!0sz4kx^| 6c)|3^9}mU={#J wJ2ħ%%5LYw8 l 岒y{-δ <  cG)W:\V)D;S[vq8YrdS 3g>6>Cl:oAߥ`2nR^ ĸU6]FAAgdi{bdܲ2 jSDl<| H<bJΪ-Ț!J 7<@n~c=Fxb}O} sÃVeyy1FdJF$a;prكDqďJ g8P*-cZFu,|ZS9 l{fJ/%).^- Q)Ӛ&?^n55IS=3o̥?gY˝g}PB9&Pwq/tIz1Ɨ͖ڭD;3uC+0q0rZ/Tk E{J|3/}yp'=mzB3Sm RH)hpLeqVI;$!!f!zSkbD\Vk(c ?X[#Ql$/{}zU3sR8;s~VbR ,0FT(:gxd57dOEk^frW'"w3FV+GNNVGR`Š!Bw:DW;gOhM ܁Xo̟`Ϸ5|ŬYW൵Z/>]S< % ͢'NiH?Rγ+8,<z@)A{h`zU8SfI/7֞_b8e܄>!e½onOsp?&r% <94^l yKxreT/q%d'&PǡCjz}2ps xq:q8-p_¬2Z Կ3ֈԤ.qw"frҔ DZ'43u !*QmkU7*?FWqK7v{@ofsKמswW|LZ+7mҕ0 SUkc_z~Wn(/+$qT#C02sMRYot4x\MjL#I$A=o9dn+IacZwu@}%cC<4*אwnMͬdfp2]>y7k*(s,]ݝWir6x4ݟ%=L`mDotmEAwL;4J]%SYO6Q DOY~1YL ~~opVe/u$Bt=SW9?#9ԗy{BabVeHO.SVwzϵ<7^ʚfm r˅0 a/*>Woi:SAѰ ,Jeq%~F2}K,K??`C*#.)wìo\vH2'--_4hhaDJi@T(Hdr2GDW"\(> sat=uA rG_Ӯ]~ ˟U&g+g5h4I4F}R?j6wr?n 0Rm|3YoHR,W2R]Vj*/F'F>ũZaj6U^^x}rs[6wVLbt\Ur^`S*=f*$9<ÎJ)_@q[4+PJ8ϸ8i5.ǮX ?'ۮm۶m۶m\SdݓmT}?{uk^#V(` A¾pU3`Ǔp`]3a0m;'nQھtvJi%7'~W_!cHo7S^[6&ۑi;ŸR}jλ. >"CsxώU!al_ό."pRx6:9F0:)R}RVu>B1\:#g ^QoR4nVbV~)Mlֶ[)qRŞ7V~NOq".Tha+Z #<΅'O7Yy6v,'e0hQ=V) tғT~ujhOVh.zџ tGY#I"F1qc~yMcaMhP F`?ZmX{z43iP@\$30@|-h!hJArau%EܺrQe3H?<ഌ`9xFv{ 0|1O3qRpЕ6+;\7m3FܒlwdfCMh26['dͬb71g ԇ%QiIg@̷`J7VR8gd͕4 x}abR_?nEY1QѦQoͳ熫2Bɯo5Xš+Bj w^<a*mfD8F ;XpeLTnQ -hC1ˮ}Y0EGې;I:lW3mJ/p}<rۻvdRR=^GݾWw`Зd:A)uSٔ^wZ3SY h||פp_ 9@F\mQ ??ſP7 K.jml *™\* (sAh7bat´kx?Ǩ)6O=C8 cCWkoG}1]:RT`AD#i `"HU`L(|Qc fy`pȗ:6 U,a ͭs!a3ޱPW^lf몊B">,rR4\l^ LѲL _l2c!NMSEJdhxLT3n;knad?24{s2klOExȀu((l &t z?'v<&Dy2I7?rHg#Ƴ(3=' 0و1>mY_-秱z}q6 Vᛥ=2ƬF(=߷VLg}…)ʺz`jp$9Ҙv̗lG~CR2:R-%k{XLq rpQϣz}Zr(U{lצ[hӁ|mIYccmlK¼ɺGg9M[n ǡsApm !@V?Q L9+>:ۻb_욊-2 <_jǟWKeA?} @V൝2E5W,9ɾ 4̄ 4b+9j_txB >6s iw].:g/v u (=C&|O0d W4ݒۉ E-RM9[X] Z_n@bKf(G~jhkaKS@7t_B)w0$ AP,! %-t#d+ӝ0}dpk6kiQYYY\uPfyՌk+Zk rO2Udc]ej|hi~t,/\S6E E+zFFfN9Iz:"f4ҩwNvg!6rRCvpі{#Hug>DU YR>/e*5za26nerM=+ s1p^<-O5%Sǿ8!C&7n|ŪtMSe_JB#ftNJˋqd\@?A*&=?*ƿ8/EPU^M;in39iH f @6{$0vPgS.'MӃ>I_2\3WewQjP*҉_PM>?p}qig_~_|oM-6F!-Ų' \J{׷fŝ"X 5Fm;ϛ"fn rɚ`SmV,wNx\{W>7:r?<\8LXg`T{ kM&%#C#3NQ39'a_ |VgJ;c]) @Hw8qdؓGU@ wo֤42=b`d].pFzWN3lA@b[ 2nQLOjjQ)7:?dQvE ¾6s@!̭ãJ=ŨwkYߝ\'0 >q6dm Ź~uH>dr9$fUrgtIY;W|Q.Wufz)]_}X4WYҡb2G%gۡ5Tءê<(n}e>?Ka; ⓷"f:mW_<6FTql˗Tڧp(F3kVXC>RGs," CMOIir5.Cj#þAucr9O+}J+ \Ij-~J]"RBK:_Xbj G Ut۞mR'Tݓ)ٝS P\ ?j=NvP$s{XiE?{/{O܂8$ek ̪nE7u>5K] Swj7 By+ŽJ.εTWЈ`]˹#W RwUK^:x'flj_fWls+Dž(uxyzz/b( wm)!SF9B3.ĎY6{YL4?Kul'Ŗ1@s?HbO#ts}I/)iQUoΔmh@,,x&]&q6o8c3Ɵh}@r@R򲗨=, 4T5M'1q7hpQOatX(M/F6c\Ȣ[wۆAGZs Px Rw5zS{8.'r6"Eѹ3Z8"=^hj/M: % o\ }1S'-ֺbS Ƈ^mZsQUa׶v0i.QnoH!,pcF7uBv^cY3E(qiD93Tbp. \0kϖDP JTT| A"q"5TQEl:{^J7l eQ%}%dQͅTA>=YjI}*lKhE,18Kf`KdJMiicLx&R-QF}$a\ݠ-Pi^uuJ7`A cj̑DÕK^>0&/HTXqT4b]EGtb1g&mLΔP9d2B3;nn-ݵ<-)m V9.= k$Ȟ˶Yt#o!JoCeɐ,aK/F|yxq2ߟI[o<@."ɸN:t{7ڇ>ޙ?5 S< +ZDlVZ{lnFә cvQg࿥ˇ3XG%h((zcS +?_cvcS$Q~8o$w*Obm!UO_+h g# y3 ˋ|s٫e8&0n?7&3JcȐj/H^ -ZхT~_ZR6vלx[ѕ{btGmLu&Pd3ɖ@#J,^fE.CSBjYE=ȷ1IM2oI=tP3t&5%<.Uk`zHU^UNJ5`Zڂ }aoԧGVTbz}&g LU-M2y(ᔻ]l'ăt Ƃ7۸ʂk_4`26GyХ6^O;O 9 =CJ_M(r|i0W'?lQ , r,@Ŭ=~wA>*jT7My.7' o,"3`_=aQ.ys5ڴgm@輬6a |gag6rXrF7àԏnPXB}Sz]aLum'|6"B/&s3zk'{{*~.c*"]xi?̹JtǖoX6Q#3!: {._^e|]G0Z[Vd)M^I1C.p^m$/bH]Oȳ"B@-bO UMA2 @T &%ѳHp +ѓda\ nKNoL']qQ@3A$ey_J1k< Wa(wֵqzN1S)Ucjz=gùkJvUzZE|L2'g,_P^vFwjqu0f><@m~zD:=uD3SnkR[^@YTr{RjCQǠhoa|a`f|jnS&9:rsS՚Lj(z(eIJ"ku_?@`[aW dYNĺ+ًFZfyhvNΝU.AC4]" K*@IZuBts%|MX+2sG K݀0פ37Wq3' >Pݱ˽=p/cAfl >!jDrs Kc&hk9LV:),ghprUlzZ tDR MAJMV44́p\p [A4#rqv99OOǖ&D1 \35y67{PPlXT\,QI=^WlУSC~؃!?dd֧~wXWgo\hmk}ʔ!A ӥW d!9R(7rR_z*^%y*o4z"{DmM: }%uT\G.gR4k bG1(&q\[GK-T}4=1aDTB{#!O#IʼnZnhCi޶ڴƶ5&Eo,t]R[jM_F &Z8~9[ixHwΜmא>-§_]Y!:>9 /FPnEbv^aQ_MlET7{G-o,$"n /п D}߾ "TzD?DN>>~C^5 @ƳNe6eg5%mIB2љzȭŷN`Lu{nh!-%dh+D%τ>>O$W0ln-;CK0]&I.G̼:IuFL r~yJ| o: B,e3vPl&MuS/@Z_̾\i%Ĭwe)ˑ$$|Ȕ10;ΗJJ2wAsOJcP~I]]ncV`\)fG},]5"0cv 7SP>/2(@#OEDfOɎboFsUВtBW)'U+JI8EDp3|_͚pA8{5ˡ:(bV?ث=)B:?b7Zf X@riXNN4f;&HtJ.E\.n8.(ͺ$*i 5O{ 3By5oI<حgxeVvM`Q7O~,+swx<۔9F@/t^8hm)q4& p\+K N{}-Mptכ6Ѻ:;6 Eh'[a  _ ;"g^f@(:題'd Y)XdN2(2RJT<,ʴnmT\Tii&/v{/t^ qSHڣcrN* 񨭌hj E,̀9w,* Ŗcz<3(sUx% /ھ|{%T䑗,IawŰΫ 3 yG0:}{ x  ٻ/FuaO(VR}[ͧEȜ롴+ias96ψ-O .DZWfBc_1@Z`!?Y=![R:jtmu-Kf=`M6Z=) q? ur۲k,on,ԄEK?ghQ3GpFXjG01'Zd!bH!T81@8A 39HqHL:)bW()0HZcAHב%g Ln Xc?(W>)'9lC !_7=vĸl6%kU#pZjk&}b~"gnlcPU9WM%]4zD%%lYd8_udyZm @}71CvZq2=FmUXQ}[1җ}Ed={%61fo]J1qĶ'׵sJ6ܷ7 TB*-׷=e~ٞf"cK/ȢtUi`f)گ _f?8Aln\ǺϐS';ERѺ7-U;7aߏwSt\~X{5ښ"xK|NZqc&NQD\8:[]`gjN7޳/rBs%ƈ9 pBz$6ajBi0&$P׵a؆&FY:4aCY:i Wy+nRNkm3exHHī꺰Աc RI[AK0l;+s lq?cv [)6YW0*aogl[Ls$h'#LfGEh^yQJV + vיeNpWք3aڬZKOy CSAoHDuLu#YvZFe4d9SbhN˲[‛؄ŶR%HYvɱ\`;(m]nZnWٜBX>, ؈"W4!=eך J}'9\h5oc%Ț݁kSJ/jCoBk9W s N{Bi 6E.9!ճD!.g( |7pEip~iWkZM7$:RV aZ}q˯jdebkK|bWǝцKbsNF=rBy|Ζm4W֪~vO: )|){%rGdveBYw> Ɠx #wt#{xRjDv h0v4^6ۧ>W+D=΢a}ns\PG&3W~"&.SYfYEs6>?6\óPٳ@ۿqJp`+Uf4L4FkV HN!ok׍1l~pvBi3ˆp>KC$CqP'|J!q&suIzِ|=4 >LVH P Κx~IX}-_c\漡5PYZPHD_/A!c꣘LDpĭ,pcgd!4hFq66#g]|>\8<h@Cd%<,L_q`:A`[ >Rʳd-T2y?Bp󻲭쐐vӭlMƢMj䶸MZJ~V}>6/4Q8? FM$3إݬeT@rL'2BK8޾ v{I
MSY8Sto 0~!uV=ޛgPe`Ւh+ 0k }α0`{Lʩ l˳\Al [.#:Ur$'JN6`+2F fu^{mp9Zm B \qv, g9CV/ѽĻ]CIwb#6d7|()IufOPe"g&PIu3Rhv$WQlUi!o gXIfq&#  ^_1M.MDQI^h/GETmAr6 %羓4n>: 3ًm'ɪ`?s\M%.e^\8@( #:\J~eZt(Z:x:O-T2h:W~^Vd ( i &xҔ|M*|O4+>xuMGEʒC9NX&a0<:mU Bxlbםgw:m(bG^A}Xnw^h.Zh|bPkw>j̃%6+и"`&{@"XTL?{MW &)@3 6F 2tړe#9Ò[śDŽG't2n^&հ \uh[g)mKǎGF:=L@ {ĕT<&Ԑf7 }j"˻riWԿ2NriEni{X_1$|$o"ZS; }J׼>iF^i+XTabm [e=W}]>_;Ef_UVpM;SXP9VL)EQ=qrȴRDj}KSGTc0bT3(u4S3⑮6\'>F[3<^`[.{N^fNu:Y)Gl/:ʄ#*OH#j՟EguQ M^2孛ɳ8PݬT'oJPv p}pGꥭU?5ok0ЇBYt_TT-k[e1\c&͈߲ϳiX9UƦpHMZfb~bP#(bg:P swRVB2^OXo;5%bc h"CU<фXȤozO̟;Z <6zn`stbf1YTe>^#ތʞNWQܛSpЂD N|CK6\TO3e 1Y4*pǬց#MgD;虨=;)^)LY [+Tض|z^wF7X oMIN~]mi*΅WͫCKPc2U"K6d?摴`(ۨZըڠV vF$7/Q"=!!"L&DrCgU"t /l!Lx!vCGMv۹]4u}φ7^ڜbS-NypZP6p9L%G&%_oDw`ՋV0LY6J )A֯Ŧj1"w<#㗿պJh\=0}HkmM-1$V`!Hu\:KƘh->V,27vO[`Ej.StG'DL,GU@R'quVdh')dO&uFbL"Z+fzrAKM EsHGd'<@G1[qq`PhB"e!mҥp`hft|@YjXUiYlcwXݛ]Ja?OxRa?Z`( -c KsHx ج!\2RpIk nu˸6•۲Kǒ+a-U4Ty(Iȏ6x!Ϝ# ">v(i/rՒ a)/r˻n8xmIq!>whRm'&ZmnD}W_W}JV'#vBZ 9iez<(;ҍDZ{E83YOˍ!Gr/g%GM9$@l-Y!ʡ!掝P,.H ~m۶m'۶mtVXI`VIg+qVT387ݴvjbDܧ&pY5kU:-{16n2)|wCbH?l'z=÷T>xm0M nimǑ=M\@J%?RMŦ[\DgEb&.ϊPMa8J* p> kM"ZcVk%l%iZ>N-t@a%ly_զn+"57gT(N85H,q[!۔->5aeBU }ȻgX@]|M cktҒ&I]y:UG$0MvSm7QyʒY]`^[k I ܶx#2 fzhJNN ?AS ~C3utJSY*ƲѸUڻNUjU Sݑ\0!^RW!w'?&S̊O *4nVc>*λOOӅ1+0hd AiȂLbq(ۇ[2ed~w}*szm$FHY!٪3Q5[;1h"Yju ~COn7w>smFb* iO`oHLb3_}ȝG 7zaaymѹ{G&hs6u׭Lcv&tIA6i -b^P/yNpJ p)vVA9QXj-'8dM['^$k"1-5ޒ`w9pc\֩Ze $(Og]̕J7⪞:H+]Un6f^:̅>K-n4,sc9DPQ_ Mˁȅ~sήOhӞ;(&$?`؆mXHȫg|P k$d/e` h~#wrY{v*8dJMR |NF9A/-'0k}R?]D-MWMԾV KW}Q(ϙ.>Fֱx^01XzWE] C->آ}/f7+MXYPbiyYdAff6)߻-t>$ô0.+jXЕp})8%U2,ư3+);H`O34jJyWlCƯ2h4|58eyKʑv!w`h~N6̸KvQ鯵M @]H!(5;PߧQ^[xɀ QȰaq/] 옉qV<%h<)s^Fzmjt=:w^zG҈M"ۏe6};Y"O#HD?UG|x%A/hT :W?)G"^Sjc= EӍR:.yl"}ZI\H^8zgCcUPFݫI:d=P/)@;R~5a/%,S2^i$DK-Zv^q3l,5k'b|Tp7C=kp5·:~WO2y,[#iaR*l;ϼkʜ>BcWv-BEƎ?4|*a?lX/*<3;qncT]|:{Px+qRSO+B8 fʼnůVIrPV>f0~$Pkܧ65_U~qn/VS`OБ(|įZ2HgT\/TӈbdzkiŽLRƕA<>UϢk]|rcfu?xnΤ>rI(J^O7~8 t2Oϣ`WYEIh,^/^鶯g|}[L;RAD7^&}{ugXä\Cqq(>HH֐Jup|4c) 6Yls\!/ه;)Z<525o"Јǐ+[m?MG!W6CL ~sn~n$/ejJgr[&ʱQo~LD02ZI;CpP,pP. B.cA0dZ AVں{ u}Jh&澠5)K "睵Hw-7]5z;LEĄ-+hgCS9ldleөlqJ:*"$/.:'Q7|ڕֹdx<ήymT$P = Zs1!DB40y+|Y(h7RZ =Wh̸qF;S(L/KmYh"tlAn~bBj4:z7On\Ya> \'5:C>jic޷>2% w6c)ϹzҾ)oTq#i"Y8q:{n] I*|od6̤?Q8Wtۣ{y){A~!E䔮i7oa@K1@KΆA^6?|kکĩ!逑0Vz_Fźf%|/Xj1/6ۇ8l@yF?y9r*r*Vٻ:<3E&@@K7M/mq L1/ H{6%;I~ѿ5_,w+Mx-Zd /=ȄUf٘G0.^M&z=p𑇁h_xYO.{%J97!"Zp?~#4퍁Pw?c7qڨ77P|j$܀Ir]'"0t>1ēpbf(ã󺄾Ԑ¿O)(s:-v=?/睔\h;~ Wsj_ѷ$ 4i?Jު*]{6GM+[dX{\L%ᄄ&].QnW9egMgkqL-%NU"__dik75='Rf\(OQħAqUbɅeF:ЂDK[ NzھΪ(.[H"RKZ~I}2,T>8N%S|I C!Ϟj阇;\0VN4@2Jy8 ֒˅8c4> [$1]>_'cl Z4$r%;>qh:pk=Gzp_40\eo%vbJu[(ٌRDPTGQj8t֡ױ^֌c062~@'dz=F5>IC3 \ 4;_mɹ0TlF"ߖ g=D48 y >n[#5G{{: >]aV87%E̢s )WLs)u7DKR Dn͟~8. iwunI&E׉9he~k~J'~( Ǔ"j&DZo!GlI$sُ3{l{baTZ4•90, 4+LѦp(5Zg*ZS>1 ^.|g˥/c]#j3 @t,:q5V'^Ek 7髸t(,/x"t#I<87s,tǖ-&Ap96F[/= 2oHp@_Kyr#qxK_wg<.ƒv5fR8yб!D2 ˰MLJޤN8xeCH 88s#NeK GI8qA}tF {]n; *0ӯrn 9KtsPs/^ Pku{7cg>kQsR(,i;b դZρx\&A=UY(q^H|rNwףuS˒#!@JȐf257a/meHC$L3T3+@?>'m kn/BۢV g#M':e^ UFiCgo ;[0M(Q0 bۑw"-!0طiTx:wJuHF4J$ e9׈g['uƾPy@vjujLvcJ !O|VmDŽ43|!6MY֯Aֵ,"h7zӻ4))j KJE1R~탅taoellp&IW*zjhe]Բ93tu/|yG ԖǪ_oR\4H侗KTr#5/HdS$3~|#.enş8i8v;~҈@_K_I Lڿ-2Ӡ]Cټ(X,j'` 9m;3șMhZ cPF儼blpE_aoѐ$zi2"Q!_A 6}ڄvu3uϞd:{r&v4F!?mڇ3BUM 6tMU%mL[~4eB:"Ɣ[y|\ QmA";kۘ6[/De~ Z*\`|"/doPP!M?cgtF&,ɑ'&\׊Q OWYhsljVᜤIHHZAYZ8is[Un\~rЫWFvGA55 _i_(9 -4$<xfA2#ּY8P%/r- q,ayñ<2}ϔ6` ve~#^p^tz*\i~ahc"]6䛪^MA[3r۴jA&1jIẇ02;!HeuN+D2عdVάMi@I.liR֎n)Q]Nrψ BmCԆX;O_Fɥ9f.Λso.Şݽn22 ^mJE: 7。\7=KK}|u__p/Ѕ)+#9մ6ti^4բ+GoeһXݗ,׾?{O(Y{9Ё'Vt =m}DPVH|kso;Fhs]{,LrnϹ<֥\2]^/N&cs5_0Kf5tNф_bLt0GH%耊P3zߡ{?|Xy`Àt~A!t"5B?" 63wۣmF"?ŝAl=&rDKDXrp _t?7<OX䗯F]FQ;&OiсѿG ^赐LK 4Y6 oi `g#g8zޤ~+4poBlHZSƏ?Rdo5H@Г$v8~(;m"ZSbT'"sXOFę.R/"5ʔG&ެe@.8o0@Zק66`tdW& p#,3Z L5CO>RhV L45L1MO8膧R}9*Kn;ŘӈsDa7H6vHq݅Q h*҄[E ¿&9aqPE lg@е4ᆹ`P ]Y㑺[F팻)ѺsSIv _CjRDeaܩ:h>^@*3uh=z[DBkt{ ژpq;Bi2f!ԭ6h9yΣΤgNlh~;󵬦$!R-p?w 0=t HaNU^:20NZP^ٷAĮ\TŽZ,>ه&r:&~|)ZFδ0a|H_"vnTҔƽixU>q6lԣ^oS WO./"taJç͟?LT b<YSZ6\~D5'e.m[ Ɛm?^`}vB@JIjz?RBhCޖՑ~00t2ϼ~dwPFF5;{{EtiG[GeXrHa|1MHY"p?n-QHi@8+u=KUu<bJ w<YzIJAsZ&,OW蓨l{gs/g6 2ɇķ0ه[[fW)Q|c..&_tns/o<8@VcҔRS6+o;?*ztm撅)P( 1rnW⚶!HWp7w!z.I݌^*.1H}+,;"B&ھB?U{d#T:bAh0*mA=ƗKb)m2n]љl&m<2O֘ޚ2{Uj;*U4;BZߓVf۾, ki$&7fg~}%4o*^ވ5 DgJXܚ;Դ̩XW huf`T2>lZע;>h N/+$ 宠WWA*α4~#hq` *goF%NpR}C^ꊨE $whŘnCGeGJ027aCbuV]-L }q)t.DW^uOM2HŇyiLL :XWvNZ$O?Q:樯 ?~w_MOۼvoe{>I E.v{̀Hj[RpP*ЀjqV0ïB[G]jJ.ؔ@qL9ʠГIҶ룐竐,RvF.XpC/+tEf;ok}ؖh>gMU&0p즘dGK6j{M H1\( N+B&q1?u8͓JGʩpH"'q:pktk aܶFU69G' PUZ>+BpՔ GaQ/t ~oVcvB W}J;zZ'N[NJj,L5tT2c({2 Eҳw6U*i>] DGOYE$4tH+M8`r/A,S*~*LjE|\9d0u?4|0#7+ N.[URqp㷷9S{O>ҿ *7ҩc[mR3{׬=EF+U8vp*/9>TJEővJ0Vk1qg9_B;sCc*NǸΐY!!+73; ݑMJRxW.FYbLA<O*A/|M(e9ձOo۝amzo69$p.DF<~VrMcBJk xE_F wy✦63ݘca`G^B[9%-gc†FxR%\݄lY!ISihxk䘌H?7X_z N͠yoBXX[Zk+z,}87>,L4yP-˛xo_~㩴H]90^4 m jThv_\>t+%_e00(案%snՂ(smhzxatʼ8sK!܈VrLCņg|."r ^=]3x=X'b AAkr+gOvz$zeֲ+c^%l&=NQ9{aIF,%4YhdNW=jl) t`󗃫;/{"M6C̟;-FhXoH0C9L>g34^n[xUy:&o̤9\/rb!cmFQ/Ysq<1\ ܱJE_6u_ᚾoL(D͟|fBW{ca DV|=V.ouڿӤkvuCTǂ&rP0 |»:'7rA=u0r//Zߏi*T/z\S%pCyΓv*8$.Q[4֯ٮ&xhތP]cn!}C*Gz;YRlY~DlҠ Zs:GDb$4x1p^ҊMCǺ*'[eE)߀.O"[`X3_Yy/3hoIAp}U%^؍6M"B`"oKxhN&>+8oV)8˩^sZ"k)Ԓ9O}4aNB #% nj^ݯy s,AKdf3C`j)Պ0S>=,WbGʢxbҷט2ޘ9}G!:(Xxj)!E ?* }^Ke ing4 V]"]S ď.oPR'p0ڼq ^9%-z&1Dc/k7Y[+0d@^ xs 2I.,%@m-xuz-U`+M*{A jQ} qdy}K(5cvO noz_2$|'J Oy=!k^pjh?]Hak -uccʏ܇GӕynmI%"jmrLIV ?hL/{u\/7 S6q\7XjGr{i;^ڂضĚJ} jZ:d΁鏞4zTO??31d}qA1Q? M-柏&:ʈUVV!CSȗ 7@9*D,zAޫ$L9 0V42ߨ /ԝ2[k^eW3E-h타}TE JQsz=dN, j.2dAaO}7:PYev^[7^I}o 򘜿;El{Sݏ!Dv3̹;UyuuRMM;yk9YfO"4#}h9_C|:W墋!Ē=U} m\EcԒWl_Ne<%@o n-4j:K"vL'E8Rw<Ũ{A7.irP`x'b}$!8j1p~9 u-%9usaKPYR\PS9>jot>OBvnr ټ!v{ß?DYQtN}RUpXI9MN hǨ}zv-]̆Y1>:;G3KxI) N_GyHLql>=V>v9H*P錝U77,J2#͍MQrG42k#]fx_lEUXzAϥkѥIZs?1KIg!|R=|2I@jxd,ԾFo:\ UtعQyJR9N4ƿS钫D[ىb ._@ a\23i0ERu;^7S/2WCzv]hYR4a*{mNKɤZ><YRs*3u z2w.<ɔF^5SO s}c|q^:_H-Ͼeu rR(_G3hJcnCށJhÑ BA =2lq33(O: 5}tWD3e+b͚Rlf^ײZcNg.'uKK3߶KgP2v?ÑB8PY?ƛe1##,2񜼴9gفڄXv[븥V9oTΑqz5F>n| tiv"XS茇N?&׵2>R ,#{>5 hQ7 Qt^©ܛ 젠avŝu-HY V$pU.-p珍EX]?v?47Y*V_mZU8Pf3 &U-SG+ZMv7 XP$LGFc/nIuo,$a "!NV8~!ZB[3,tWS豓-BP Q;݄;hwFSǕ)/4Y6k PBGٛߡ]vOz祶mX#jmcˉ70jAT,+fERڝRzC m4)$\~aaxs\,އ|n;,]r½9CehLFVur襮p*~R5JcIENDB`mapnik-3.0.9/benchmark/data/multicolor.png000066400000000000000000010007641262555547000205670ustar00rootroot00000000000000PNG  IHDR\rfIDATx@Q*K5)ox@5zMjGmwl:3ܜzXwu6uMd?TOS%o]=:+aʽN :c2 r5u\MM^"K 1nzǓ$84?uJL!UiZuḱG;,fgiq. TcE5DMCnE(rZdh p,| .%Y,|*`T YV:?_jʺNwU$-X" Yޛb$~Z$5tDM;o12ydY1]@aTx+WnB.E T~,nPb!r=[* 4 {*/!i"Reoe7 }<[SBA/pr,zr \8SFjRBvFGRwv"f(ѳe?+Gb/!`7x֪g8q-QקZEoj락)Ҿb{W6t۫_NI}g_פ.pc,vDU"&aQQl zZw!LUWh@P A?{xGEjiP=R;`Փ;$=m%X-r>1-L}@-`uMb0`;=(PY|>b",M' MFif h.`_)+AM9Ƕ,)屶`?iL^4 *pKASQ7SyE꓌"#^ {jjL3Њ4M5LZxIj3JG@Ӭsv5B>K kИ- @e?y> 'd"q,IUBBER- Q>s\{aeΉ1!mGUe\)Mkrwh7f`=hEnm\}1I6Zl'NJPY&Ѫ-FbT\2M ñ_{) 5nX6U/>gly3}ύ!EeqEƖś}|$e܀ | V, {EwT^\ښqXɗq1?[މT4GPe܀&N+[mOvn6 w Wƈe7dYå ZNq[ۜO'/g\_'wc޶ӛF_jaCc#.#kD}3封bw&5kE UuΡ@d C7t°rX|s ٺ N_!hF\0ZduJ"::GѲkxc sLV 04X6XCt>Ȁ?tZSd)S RT(uw]*7UTPџ=3iP3Mo{3AoxV 8Z Eam"ã,J!2?vwIMk'f1βKΒ+uWc/ /"hKE:Rz+wE3Qs]PNZ=T2+`͜-I:+?P\ rXU#1e wP.׹V!"T!6Ɨ$^6%)Z:'.oƥOV ]Zh,8B-gq1eq`$}Ɯ1B;GxZUr1٦PZB%Jo_ќ;ӻmAW36\F=D01>rώf9R£K Y+9>o/80]6(ӜF vV^xh.0Vw!.R4qOfҢ2%\#rF :΋wg@O&D%U(z-xM()1LJRx ~Y(xoST]G'>ǎ`=Y=eYM]֥e];DJɏ^x]@[3P$+3beܩ0%ct0WƉcrUx<{nh%7ks {n76!8eB:i]%)~;Ru=H-)2dBajDdm|f*Xu'EAT~V{wU%N+/OM۠"-lkCCԆO0s#hmAXλfOMӿsKW<7ۢbţ1OFL~LSmGK<fzk, 6E9m1arc8v0/)㒳AyԊ+^ZP _+k5T/-H Y̺pi2Y +ZLnx+V,Bh*H稡t哂22 ^}~-*ne*jϥV JB|UL~5lۓt9{@T6VlӬeT6(| ;Em2B[[)f;1QB;YgV/To+a kV՝hjv&c$BIgat*$RPzI:ɭ~e2ݪ mIv\[A9n_nߍ$K% ?&j"Dؑ oz?pؤV/Bmjvn,nk'PKuzk,.r}KdR k*`~˛!/9vUKCa/*V092<喳pЏhܧ`R8 #ptK@u $5ޥ*לbR1pO+4 AKñgi Rg:ޛWH@b9EԳ*l4=H5Gx CS ӾPD~'*@ag/M*6wv) ̴W {G ^iHĖѶ+V _dݍlE'1 4k]=#H kTc)GgIQO:jY^4mLs7i FN@ђ خqC2[Z)&?)QtYû Eҡ_:90S*6"FbzD!R` JsidU/ѱTTz\o`cy \븃v?9 XOwG ›]B 6RmZq:yk5h&"8HP"VQXrb kJ)4#Ri6y;V =nr>k667e9H] )\,P`X)rʒÆgYU 6CC^忡*kre=*d~LaMi(IX Uk|eKQއdۆX"Ηm_1:|3a:<}h~3Ha2>EPd=.)᯾-Q Cs>'5$r_E8}k'97/ Ut@%U~c{v_)N[ Ǎf>9ι7n1+`Qte&oN 2F8IR|ڬ^DJ B3,b2Sk'?A [TTHCe䄨6f+(uI/N ԅDoR+dzg7=&hd3 VrKǙX%ku~@n^u8mL>C]$ K#Ļ.1^#jːIQĹJ\؊4gE =sؾhp'c/n>)Ą#1\ey!C`:!86h—rP~+"¾Tr^U!W=XݞbK"<6_[w-S(^2^]ԎD%oKM .L@ dAyzUxi A# >t=jG#|q uB Tmл,>E2>KaFtkDvtn>{HNW}TDz K`cH )v[cKЖ"]R;qscf>"UyέB'+>H3"vw+e̖,;l؅XBFfLs˜qs\lJ5SCx쐖$δ7s5殨/%7:kW@I } LuxԧST?Tjj0vr>7oj;>)/]P4M Pcd=r9tNv %UtgmngEk3YYl,4y]gV!g D~ {x>uTA%"0)=ؚ(g&9-[O(1;RU]c_ ل[,FVz8+%vK o+aSJ~ _;tf0GvH:~rf-WIy$(2h(BɤpV>D\[;T~!->lHCB $h{R);כ21h1jEQ^ [Mk`tnU~o_ "faYdsZol9/#+{0[wx5!@g Wպ[fl"G%>ۅz^Me7 Go(DTu Ѵ8aar)yz"BU~'g\B8s Nh viӢ?\z=YB[*?Cab+nX--7oߺ@K50S50 e, 3ۋde)9TK5?8K2`<"VjQmp`TsGGQV,H#q1jb \s}Wў 묟^W4K@@cbyny?. [Į} ZDVx!%q%X|a5]הCQNRE(@!`뀡jPbzxkV|Icz = C+Nǻ*Q_;e(&ȉW`qM/K7dB࿮hࠟPssnռO~6I{ف˨@;Z`R$n#c3N%]y\}6XUmCOU2X~WW]2GyVoV瓕AlrSs܌?\AؓZ,V /P|LCt!djgUʹl3,8t{ǟPM)DySl.5X+|0i&QvAJƧ{AWY{z}? & ]BňX,Jr<{nC ,`Lm^{Â>ٜ@.sHXX+.2NIJ 7`%=lxY}7Æe-G JpޔёĒ x6Swao/i&=p)F7Ł$cin ߳!چ sSYx!Ye 1G HٿMf7=m`_̽Xzbr4Y׈6ba0-t.(>4u"*g--ã=l1LYZKC UEi!ed&Kh }&+(~ENÐqMWY<ӕcWtqLKsC6ˮ%4<#FSM`  w޲]-Z:8:\ͻN)0Ѣ_7jE(Čzƀ2*JT(ˤ@ ؤV"f8]gEnꤘFXu/jB 9'X2P]]Jap] ԥ-nYQ?;JwRN kj%IRbJ@z8JibPhuǹkg!ɮLbOUYNyg!gBkHγ's sgDکg(vpZBm5p W"$t(={+:bONO]N^aK5;r(}MQ3 X+vyێti?yQlGemcCjV5k̩;qꨲ 2WSHLEO 8 Dgכ^(J 9 ~ۦt\; ]*i@?6T"CG lT 4{ 'mT-fA鵂Eo2TX$"\k5( !h0%*h,giC\/O`lq-slBɵ /B&3 Y*U$Ku/9 w i珻Pd!뙝'_A|X*a ZdzT+]ݧ&wJ(6u4챵ӇrnF2C"4A#C v*xIUh4ob뭩UWkGX>PIK39u7]3NPظPD2e4IQuAC\;D|&EB;.߇mIC{,@XE6@Q\&`%T1\8kA D_7t aɒJ:}thR { ؒĮ^j)n71I2{)QB7~Nw/=!<!)wb(I˗;w_cwL ϕߨaVKA藈[a@>ˊͽ[ɞ\Ncwp-Ȱ+V-陼Dz$H-3%[,{V ((+O"<0LcR(Ox>_ DF&/>7$KN_9 u> 6G9)ZHu×5Y 𝆐-AgztCGs+˟9At}JWЂM՞ :ť˃ KC)&S+o[[pDS AAS""y^=L4.:}A͡WpK48Sc 񯻐xn䯿Fm mNkȑGRC;@]"hΥ.[0<-̩q-3#jh~^kws`񭭞ڭ!nP"g:b*YwsDS5X2,|FeDJ<}P#$_R; \ʻ^JR"J{WNk֗o#N(lvb1R["hvo hyCCƛ2ɬhaȭ/tlQ&b-; =TBhS[yjroS$"*u8oV'S.>!IZs6$4Rt/LK^Fbcad'aY3UZ*㩒^tzVʸBN_deRPz& ?y鲈b"rW q}{ R Q3틤>lo#*J[jFi ^fL\pi 6/Mk,A;6 t/ʭ hv,$X8STKu?fOJ݉:'!ta"ݤ:Ǽ9ɬ:B$eJNz" 1z!fS3ܠ2U L:သP+bz`Y!c hn7WgM~NMs/Y/|o2kmi⑉[b_VY-6z(z㵞¢g/ q/ q"q>P'qhc'xo?h(yQ*wURG\ [K7 'k74,%9!nZk!:9ȑp){ +ce"j#<`슿69r6' 8"IFs&B{{|~WՖw Nx:U̿䗌X|]Jꑉ024L 侏HWyT^nvdʊ(ׯnB۷?0IpLJ7kv!? 3vi3~|;RAR%/^lGj1KJ/.mO}?7KٍH `eiXӧCv%:134 >^Zu\3f1CWx=7E'DxRR(3ؓ~&WC_Y#PSPhB- "GVz sig6jj݁AApIW+he0x zジRF梘{qOW0!"eٔԇa $Y&$Ov'綛|]H=o'L[hhւ{Up8n6*Xiu? 5LJ-daeU҈lX2u٨ * ΄ (/2 AN7Q5k;()ёCV⿤Nnqbe'. Rmg_/㱋<Ļ1Q`aD+E8{C3H&a889 [S AR*>? ꬉKX;)6Y]2} ydh1hLV[}iwq=g$0he~0"å]Zd3j\ھJ %c{sE)5TgJed}Nwi>= ]?_oe~uܭf2$jf~5^;|O̓3B".3MaWh9NDrjӏaXjV%S~D'pMpndp ;nMN#J)({DQ9;,L{)<ک {xD+(a j גmҬ7|@M f(JWG,Sqդ$`ݓcjKs6qI!&othc"2L&\E3~Xz .;Q#ɯYIei1=\t]rh:y6ߙ{eoh>J 0ʺmb.߂8^g IX ~5MDpa9ļ;vTvph5mD,< )G~ÛtK%Lj@>v.dߥKnBg=b3CU1}ߘrc ^99) :aTOsfv}}ӫ-/%X5 ZRA9<؅I{=KȤib"V1趎bAijLV (79n҆b! 䙠Y)7}RLr} VkK%@?>a*+z4HlRW8tX7.F FWqi-H"*fk;ysU֭!p7<$V#}컼uE5[1G61Ji!+m7|:HpV+"Bv' Y9 .9oei?7`H=9SʄV3HHڡ |9]pm}v4@v->T @VF>*تAgK1nhoŵ(v>0t xsSBqjURZKqOKw-˫J 闹?wnL2]KyI=JuR^ =3 fb_t/[ gR(C(Hztu6Yf,뚨S(lJ Kdu(f.w"tZu;I-_9>C95{;"?vyjƥ{\ vzIӿ} v_x1|EiIS@H+[O"WhT{*Ѯ(dO<.WI]= PŠT$X)}]ThEؤ QY ;3bfXQk6gxcTNWS8+."K+kiS݃!.L7.(ΜCg1ab7VڈD ۞07C1 Q]_(k 4@-cA AqT`Ўz Gu* |1ƊȴP30 Qc3jf 4!q#|yUBYБ`Op|>M&BA&^yiذڦ?QeBgh.MڃF* >bICsK|,~~O3h rP()=~b_"}u~;PVg82?aytYhjN7gïf()ItL=ncb(f(Ròwi-@Otm&vE҄mbKך3xwc=HzC*Kp3/`Gwژq-D1Uh"@Ȃ6*mPep#}ȈrQwV^B\}sWŪƜD l#G{5`*B/u]8.y8:oi_[㞟F5Y @/?.&"2_˼hZ%Cb)0:ch}ѬwpA 1чTTձtSsI۶Y=B48[dFž )zTi,{F:㣭./pI!$f۬iyj#iX(o_܃Ȇh>+UFawR߯[̛#hs߮:ޟe+W~ ֵ0Py.݌mŐq&HѶ(6/5zXjF&s LOp\< )A)+/х*TO1H[l(HN+eE+P2>4<5~AuQw&5pnjE,x @/LYRڀ- I&r#|p0 B'_j\݅Cq AܲUj~au6h)w<7KtJr4ؖi; 80te_ ^ ܑAmNQ3$yg]0 wth>x{{ RgrA=*~T%P/fIA܇4`(EtUkRcv@ե5--nZX+)$7E_"%5 - !d8ϊ_+_p~2ਖ਼˓Al\u&MjTOi@j< KX %G<ժwнK%>"r)/,eȺ_` iqitΚ$eyQv╓.ՏAy j1mzҌnE/_S݃&PNTPg1& _~c^/¸$zc9=N䒙 `Fek˝ ':ܒItNF!XSRˤ3L( iO.EH̱a,+N-@^:;΍n7_: mG"ۅIc<ܰWLC[f-B7!@z>&B&lf +2ۯP?=?ವUtb+K Y${N&rV~Wɡ^NzAְ!󬉦QQ΂na}2>SЫ#xOFXX w[N'zoE@ަ~X]Uau\= 53$rNRÄ;ٵ.DzN+\Hɍdk*+G a rmBoz:ʴ.[3 Zr"5ptwT2f_8unj.K|4k3[BB!!ߺZ>ra<7HȐfآi=mNbocE/j$DfnrXYnFΥB z+ -w!/n c2bUIӦ#$$f-|P6l2,eNW܄C'=̯G-P0G 6߆uj w |gs=Iv#lۤ3,Re 4;hʣtQ=(ItL<ї=_\F#\K>t11ӥZmPһZ7wV$9>N:>SD8 A ~)njo=Y+/~M)Z1þ'Ks]W85wm$\!, ]Tvg'ܴ.SD)O)-= Nf;,巒dVDʪXfOڠ%dLyѦlv-"AlsxH=NvX6$Fuߏ_$`zAg2S dk3yѕ sa+F'>RAmwPKP'N [bLaJxFrtHϭC)x$˧Z^wL(&'(=]%R_N!7!b |Ft}0Hfh WEWeB{t:$,Ch:5[ʁ7"[Ov,#u"}M$q Ki)rc&㥭1'8:v/n1WgޔV=.T/ۄ֛p^+ˈ+SV%rj$uIT&shjJtg]mN9>q^э'+nҙ]앏oZXŠ( ,ebMmlZ (1O~[Y Jw=3s/B lN=;./CBy;黚`0+, MPn,c>U JAlud(oXAj@$W "c8]wS1|)Tm\5F }^+-h"s`/׺<'mm E8T<|C 9̝ZjOr iK}^UD*WE+2XOtt1Ui埔#x7= n?2*00 LpzNv0{(YH\G\!:Ǒ`0]}:~O}"XJqd5oHw ?a?ޗ3R+ SXɕ馣$J`@XrPHWFh9lWF2<&ICwc+M <ێkkn:?/50{(%'C/~']rv[Hgh,X`.~ -:Q%$Us:ӑi5%YcRaCfXjvΑ`VyFY᫊m*~kHP!gD O>sh6)ؒ-Z}|kQ{| 1'Go^\ ПIcez 8KpEgS<:#7brfgz8:|$x?s|JpLC*/E{Bv# ',t5D]cƨ;tm%p1@ thd/[!{6#iHl{k`vɡRR=U$qk*DX!jIMu;\8=9b7UgiD yc&ʂ=U@x ‚&c4%d!;B8Je7{H,-dHd,%a.'w۲[FmAފ^JBRB͞au.ھMkR)`^(F*w<;'}[)ja=\o,yq$"h󇣹*0ە2;:˭^̀!y=DQ[5}okH[7wgz'f]~O;83dNӒ _73g'i mؠ@)ѳI,ѽ>$1;RQ:&:Y3Ebc06+\tG⑎DpELL2.8s!V) GzԻnn{* 1@?EYjEJw. &'5&4}cҝZyDe.y"GޅS[9rL5nDk "PX4&u-$MEKTLVjaS6- *<;/~"olv}N7ߠ0RYj;NJfMUjc-)91gߜ\x'lផ@ Ijx+"ԗUHqpE~:][$y-fq&ʛi)[p&!0Q*o 5p>Y33eA[ }}HAGn5?>ԀɃbz'Z4 Og*bP/qt,tK/6œwOطZb;;p%6JEڋA1-ih鐘E 0XV-z2ʼny+)H.4քp« cHHm֜mR%,w6ޒۻKB%n욁=sA&'myt}Brq-rqYbMp1h5웥w4)-ʵXuRqHTnХrI Y[d 'Pr"C@A!Ѯ2) U*걺qeAߢafS09XEڑ5Qkw~)> PgUT\^ID.`bh7TLp$7v4,Al7#,uqܥ)tOu# {) @݋Bl9#A*KcpvK PX '7;Ïob_!~F.V? L}&&VQ-XGg̰9g$gΪcL 5h0A__}^yA~;ԝȞĨ[Ҷr8 m$T" %=R'OB gJ-ȐJ2DIM DuHԯsTgEFTCQb(ޣ0-9{^vilJP$MO}1̓Kuf0|?n9gѶ4X0^ᕑ(R~97N566TtRL|"hXez^U^.JDę$ܺ_}j!N=m p|(%@/8 S8΀𾫍#ePgP>W}S:2+"y{ b5*:xqw >j3$bHyIu*$L&(~߃k3U4Ovw5!9&R= D:OꜢRqU|D)rnx =;I)Q9khz{N%z&*ᖥlL/do]Ȗ0k >二%E+IuUJX=-|"gelL JT;"Oz( I1d5GO Qbv@iNP_Mm=a*(`"`$ 6.!Ak3}3#miJD]s~mVV(vt$+UX @ c*StTq~nd-O^&h=R>h(ih24Je_Sq?y={fHI\- ` 2u$_UcԫwްgHp@g^AI7 [Zv O>7ySex펯ϪtMR,b_zȏ2V=uc'f@~3z<6ZYr w'Iwe)*r0HGELBvï]"7/+~e<ݡ}kl":\Mz3߄&Z؜_ǯ /Z,!F]3[SΎ+75>Q 5Q ݪhTzVm(I[Vc > >pVS5GT'&j9xMm1hP!eM) C'B`݃H)kSO2;\7w%TußVk~&Wd6s 3.lj.JGm8x/J¯tp](a36Q5r&T $&X]x!?Dx|G?rX' <2i>?=lEﲴMyb"NWǣkzʯρ_h* nP}rDF)$ H}j?dѳrqZ:(Z`k|!/Ku{~#Kh #HgWԇ4)1M| E:!"U%QP,6]=P]4s@Q ][.̻[cUL7j 70>W.ra*ciEp:sq1HpmѹJݳ9 3PBu:H}{oXPȊ K\u˲:{4x uODԝN!Ģ3L)J ĦVNS;ky4 g](t{lAryvLG(%¢8}n<3_+3ϐG+RbĦGd3+m(b#.N=;A%:말c{U{T*xQaI&L jy tQ}Y;pxf7Fl5ooȍhF^ h8SL0|qCi6!&o,^a- /,։zzx~dČK (Q4z$-d=5kՉiV]axhrfҥ(S ưD d*0Ǻcѐ%!ݬ~K{:c! mV du o:Z;G6_*g+X Z]>կ!zdHG{TGg/0}\DS\* Z=@RTm<{[[CzQ~M}JCu`דc-%8))¸^)籖+9= E3.njNW= 튡*&57*n=R .Fdױ~JU[Ryz1[,{\iCeIjD5gWoIh%5?@*Ɲs_O%IJtVѧkpV ؜[H.-O*] EJ$cj0h4sN6s&Y9Vhk{dx|vndO}NP5/kN!>4.}9$(kt"r-YA~O}++[*̶gWU~`Hs lK Ǖx6nWlJT8zu2sa8ۮ}{d"Vt:.37T3[5&P#SiD WFıAy)",Z($ ('6=oVIiԮd\OZs\ǑCIyt Yݘso} LzvXND?;pIA|٬jQT gIIkE'gng9鯳08ٯg.KCh'  Sx`՞zrerC4+-j;uAHݴv~yjmee%s IUYR0]zc7WPUkx"VܥAoY$;k;Q0+   yXC(cRDp3Ǥ>Wlg*f^}"eL;`D% |jxC\dNHZRu~ېb,Q;XQM!T4z*V 7: RoZyA?g%h+7?LumXꝡ*u[zɹ1Ւ-w1 |Fv(PAT@+{r!SyeFڅmo4} \np nj1뀳ҫ f ^HZL=t%@=Qu[ĝtFTKp!7#Gg*~ )W2jQ߹$ ⢱N#jboXBm0 ,9sZBP%%#l>Q@Kx[秧 f[`B!?P s#)a:UOi>?T5EvF!֡uɾ.k|`tL?R1܁)5{(F^0!$ 9{?!|ؐFE&+S|;@ihkᴴ6#cgĺLB>~D`^kt(1_b%%]&'՗xx{*!{A7i#Ƥ )z!͊AsGn<3u/ E088ʷ(>U L @f/ UwBa[@Uc JAzH7}.s,(;<*2'73+jevRn(s<,4`^) lOy@k{vCE|Xi+*<ʺK1ѰG#prO8vl1mpt|_u2{nO3YE@Dd~/B:-De͟Fd:zD҉m?®0 j6#!Mh'2ZՐ_MbpI!4ܛ9RY6#q#aҳU\^c,8v U*͖L oaw$ddm&ػ%jWmDht]_Cgrs{:M4xvڨ11&P!˾LLùFlXض,-|D{ܿSUrTvWp5'y3DU/cpYs~O|ZX#gvؤU攫Оh1u^{NSH#Nr95!`\%A]K3 ]ۦ=u~&|uv6&lzfLs)kSO0Us:#8>e3g| Ly n9dP7*)­Gz,H+o@Aߨ0 <[y^mƂǐdj> zV1%0[lsA ^(c~8س A@2v֗1ŎUh Ϛp16 mT~_]'tX%SP{OVX4NP:lLe=,D;XK 5HR.i4 xk|Cͫ:;bP!K,bǭ&C`PQ7 쟫Ԓi̬u+qDA$:['DQ(뎨]S7>.__lӰk]i o3SHwi k_Aͳ1fx4!e.b?wٷ? QQTW4Ʊ=@:/خ.)"cleHfl*hnQNFZ/'>8,wQVE:߅#j!.7T^` sf93F}jd  u/ҋ-̜>Rބ’ ;7`Ap%џD]U)yo2AFR6Cb$C*PN f w=+W%h5 )4;'.Z&_Ѽ[H͡#;4)f4?&.ѾX g)qI*Қ&T/N!qML5c'ņ>̭0P190]DjE V R[ʦ9i`=Nd?3 @aRnc^6y:#Sq)Iѫ\æ!XWEa(S(hM̡o}9ӢYb[q٘TGl#FDRe"Izdn ROEsl }K;/]l>m&ڟi:2Ed7 ]z%{EZm d^G\xz OWʔV6+TmxRpECE3 K9V4 {N5R9ZmN}zcq-G`"|F'7]q%SπK֖$΄_;FN Y1o"lEuLFG #fIngiQ(oӍ}hʡf8|$k5o\:p )h3ﳂzҗf(T] ($oQصr#š."ܽU/?X8!sv%  "VÉ I_P_(Ήv& F3$=IN̪M7 Q<Y2h%QP'|vPN~>BB ȊmW7|/ INqX 4R|{*Q$@ <fŝ{ %FBo R֜H?atZeeF8ڄK |{ax#dӂn/>w/m4rԤr<|&o Yru2ca%4g!Znzj`wrV|*G0YIhUmȿEmI3Иfnegx/ >66a"qڹC.x|IjrR tW"ԌHDڣ1Q"J!Y{ ]Ð ZKsm$",xl\(7(]Jps6},'][0V0c|ȪTd'%l¿ڏgĝkl1LP~+ШA= &` Sن ,H֚{x䣰xST/(Fyq>Oi &9]N)\ rǫf;*{8 >o YS 8(?LTAp5e'eax/jIiJ9քvgF*Rx9 m)X{kz⺋)fixfW?d!!8g-LJA5遘sGp6KA-b$J!p%)>"ZГx ~Xk}=INߊ`(pD*(m;pd޿F4Yy]}%/ b S$ 5Ş!4ZSś}+邱 Ԏ/Z< V+ SݷCwMk\֨&t`.H|Bhm٫XIDAT_F>l6+q@쿸 *Kt'jc Wo($l+Wi]. N"m=;.e%iʮ!Kr{IB7?nN$ 7VIXT1rSeкn"5klCC 0gHe@I;qyv&(.ׇ>)5NFڲuj'Pt)<"-Oڙ -0m1$~=)`HB gI:NfU-r<haě^lY/!c 3,DN/3ۢ~ \E8EX.@~!%kj#>ڔBh mhR 锃=,YQn8ksbٵLQ9?ۜY 9p:(#6٠nt $oXSo$Zm))u(yI9oX@g0gNN| wY4ô; R,I@1#Ҭ! ч5qvrU!Y!l4,[Vn=zLKBy, ÑmiAh).)t1{m%27 AFFPcaV&ɎޱgсfzKl9;4Q04X(n: O+#kV Be W:7.^owˎMݽ7@ A@98Yyex(Ũ6噕eE2D1l:8X,N`Z:GGJ!ϲATQVǏa3k*2I}+wfe ř\xk_'nhh%IhrЇx*T Jzϐ#w W4Rg̠ )NyaN P򮌲^r>á`_b\;WЉCZͶEwlǞ MY> LqBKF o(!xNww@Eݱ e!V.cp|җ&JgNٛ 6YU'~`Pg A!C%ւ6,݄5[|h{8,emhqS˙nt{9Bt38B(ly$qoyF;r'4Fq9jFbWLxޝ{]]얩bg@u'_V{1`Hcz+_')&Ş\vM>w`(^z;i}n6Wl$ ImJ#hΕӌXO7,Ïzl"01_vPL/ B$mit}yB2͠._PH6*=wX6Z̖Jz>RSw8,WeÿI;}y7=;/Zȍ.Ыc~iܠF%Σzc6.__$gn8S7IKSAJ7{9s`Q#v;X}ѦEtStXdp~Ui.n3NIp?$a^ؠy[=n6,M*Ƅ'#46(K9sӹџ w䕶iHB%|nKvfƾLU1׉dKt IjV<+鲱sp3-5*1z@gn|t:s'0姖]h#ZL. /~z#f{\FQj}r>qϸ:h[\y(q RT q{uKx51BTR)^Z2nSݗEܗ\M=DVlMt |FW`S\%{OF/=(-wJ)XaZSܩgW򀟬럝m_?]wkk}">eE[}Zmm JA0mYU%u$,?#;}ۮɌ|C@e-($$"XUc|çvbBp{d F8]M想tHSSo@VD u4]L7(ӎD,UTzS~'4 o/H|+-d)+dѿsg<%IqEy&kK.5ÿr(4]df–NfDak4<#z>̢4RG/:,t0j0mU'2GtO{+y0M9>:鯾.3pO30Oۏ;e74;!;-OKyU;je5T2k.6\4iOWd!y£h bzi3Q59vc3%b(uՠ#˭9, }H箋uB7q ]/ݡYCq,n `i<#6oz0AVGඤ{oacV"se~6UeL'Vm6|w$QJR՝賌Gf@lrŇǝJr 9-u $i"t=ۦKi9ɘRU-"{0-wȳ?hO/Kҡ*}:>jY1amaLpm!J깽IT,V{) e;_uuz#b9V.ex\CSiO``NCdYǍ$)6x+=r SR"vTU0 :{0jhӫh\e kCGyi BôN.Y`c*"tGu$f]#2>Ëi%Wr8DrӪ2O}&EJ"KrBFE_q^='MWnlwe uQH>u?bUzq>U<*y2ALor*'R*=YS>U]H9Xk?_=#gA2_ɨ;͂ f^H&2+ @oOg.CsX G] T=n.*T1ߔD\ zP9LI:çE:+3HSY {s~>~vͷZ #ZaC謰/*M@D37гkӠ01<[ -S:,19Pi:G^5sPV.7>Yf4|4]*Ű 72ƥ~bZ5|#ˤW}leRNdWu]gŽxs0~yX%'֪3-(7~ : t^"wwyڭ aDs@}jAeaQLTlo/P1f:}O"aiD}aGk(;UtwD&MP}e%iݶ_|l4gy5ߏ:?Ni:쬗4!WEovod%;udKVXo~lGzֹWC|sPfE ]>hf:`M)=[:P%Y0YGq^_a!zmu^%xzi%gc_e09u*XV9yi 5'+äٛ^8^Pqq:nF'<,/i԰dw.!faX zS 6#sA"'/k\!Ymҧgb>dAbps"GiVjyb^9ZLih]V6j33jhϻ5b&g_y=u7WgXYB_˦ǡܣ: QHضۧF2 cjjXǶ(\~',#lL([.ݖܖnQh}o. Dtjc3$vA@`>RqbS^lShx{?FtbeVZ%V@,m!3FIoQۋmP-BӘrӣןqE X s9YfY$'b.oӖ\b3U_HšK6rV{s Q ZaDi 5" bCS)_4/nu:8(V;"E)/H$L:‘#~mC|q1kJSK ji8`9:XEܮAfy> 2/tT_%"\ c&A|Kf_"~/D6{~gBg2rN2z GH:2pR>]s t{:W 68!]TjYlaBc(~q8* TWn;>4sSws%$5'>ITܠ6EꁘM,-) zjǩTBqjA{݉bsW3m; G[geWz$LJ2 ؃,?t"T[@'Q6-Kt<@49o/>>fuHé qs"tmNfYv?Š4+a3tܡv 5ox UG%7&E+fq#@)\2ӔGp-4ﴈXknP&:8;DwJS\ LƉX%@ErDnhqe/XT$Sc2ǝI_[v~Y86/w&FzkXUW{_j k8i7bq"pv;Aηb"IOm&9Oq /tȚ_jdZ 'x4zSΨèl/Tri1Jw>{m0ohudG+R:>a$6u2jq,qmlTy)wMS0bK!|@MvLIjrΚGxED:h4 |;"ZN trxCv5F3 TM ̝ݖze![iH,(>;HپRF#{Q`„>ylr,xy;n(c;J'2u:'TϻCoM :Zлh__DZY՝b#ʅd5jϦu UQax[T𣥽r#)>@COjZ.ā;qdN#xXHh{N(}9?J񚸉2 M7%Vds(oh-PZTf*NJ^فO"]D=,-Orge`xoY(.Wd'k5t?oGHɍdl7%+rv _ض|2KF}KlИf|IN*rBYCm6۳$NE)8|9Xµӣjxg-$@|i!jfgܔr^a{Z<9SrF{7ʵy#c*3 [%J:{6Z[(b!H;9\\]Ӛ TNj[Ǫ!Yv<`Hi]<u>L$.~eJf +3媻d=D MD택<6`#=1sV NGcA9qI맥g}-f qՅ}>0LapM`Wf`u5ъq1?Ax9ע2ca}#bBk&y@J\yR}㍺l^{Nmn6΅YBoR 0~P Aut>/)/ɷ U-ȱ&V6S?1,=xlvC?)0DQ)F#}˰]48|k6 ]?Uh`2g J&[eσwNQўGGX;ha?Ae{c2dIcUlLiW' ;QQJ9f2=ݸ$<C}:FshlcV(bPg8N,#a:Ϡ1#v97ouop+"O4SKxz`ع*5HʰAIkY46Zfj +̮mvUanVVeKBZ׵ĽljND5^4Ʃ3J.jx5C_NFQ(Eɓ1f& }^ 47%V 9?Y'pPҦ,EDq cN^+ӵ8rYGVʙ|u*iԳ#0yj *ʼnW<ML$1IJ}7_0uR{Oyw;WENqs)L2]kmj:LHLċ:592i83 ܝ e21$wG X?eDWP'i(N+1kcƨԈ'SϩZD~X k=BU ?TvQ E&<0@TѯtJjK%or C\iRIMsTǗ )$qW{oѿ;f/C׽i%QݏןLW^'\jvXQ\Pw)5Sr8cy*ciHBg٬:?#۪Ƞe'/I"b4\B fSK!]}q7t\We L E/㢹 ;(7s,0CL+x/{jl%SET"WW(ki_lQ.VEv/iAdV:S'QDĉP\2 ЛQM`B@79nx(%}JB=sUSt i$GdoˍAv"s q;)Z9c(Xza03JʉY>ڱ %X'ZJv8<̛)A5WOfoA@v+V.M*ʤS8P"P8:ރi E2% S"KCf˩8RsZLwؓ@Yf}+Y@lR1~յF"Ƙ } 9SWrعה5ܩvJD]K6E顸y.xʃfjXyߣDVǐ䃈!,k;tDktkYlm+2K[N4lM @Ϗ-ȯ-7wǠގ8볣calFXjS5<. `` fL3o%G, q!W^H\ vY7Y A/VA#jhA=ÔtLJu+翻$*zCE/&#ȢbFAwXlv&ڏ8O dQ令B͔[ 9/( ExXtn= {(De7l! / #sPe$ƕ*i,fyK.̘*uZ.ҕnf974߈vG9-};+xW0<4 ]ZQ[NW30e I$3'\l*GFxt ~SH&GHDLxPRǀl?elM~B52VYfEWbpQBا괿Kٞ= DG'J\TucdVJQO%8v}MxMA B(j.YUؠ#P25q&*H 8Yid]$D\A.ac:7b7lk\GKUL4DiCH3"mkR>5XJMjX'G>N_jzEn;FBFM++qUg1/ 3 v0?HBJeGxuwDp,B閹Ղpb7pǺEɖƙ_#з[GV6&W(fpѲUXT UjQTlJwk" [i Uպ A:ɰ`-7?7:lMw&v+\Ok, $`^D|lGa?$m,71#hGz:Ng~ӐwWAȽA{l䤽*D>쏟 =!``Rk%pAϱNY?4lÿSYdX9nmg y iiZ0mVV9÷L|]֊y?vq5!iAdCX4n2#/`irk5l-G~e_خa;dbBtʴHV@1 ēկ߰6͔-K t9vdA3Mb?Ȕi,AyBb.>w|N? A#MB?{)&X C TpS\bӪY[mK:eMڞPՋRSrFb?F֘} p<%ߟr)sĹ*<9PY-_R&{]{b؜Dن=O"j߿hU ~ut nH=jG x'papOQ,^]k˚cP  (&S:(ԿɭBແҌKW=+<AH3boKH;v`ܣI*F/7-ՃpƁa.yzijfƵՈĮENWD'ZO>#~1lnT#C1شZCb[u8@] Plze >4'AjlNr}HgbQz6 @N59e*dkX2A! ysK%(}wi1ZZ}EWf##n[MѼ`k+$S>0Y[$sHF5G{)kmh`p@a!\k.=8m?bzPYО-A|NlGh>Lnt5s8uJolC%Ef{Au"/YЙlxtyO{f~yeTNAnQ46I.Q#_lom$PuQ{iqqgkܥ)\FAP̶$1s<K}4O\('$ܮxl:S x9 {gO ڭFbQ F(8ʜ.9eB'v,>~~j>**m\e#7TvE+S]\HdXb +ZLC40;Zb%CNOf:[s@+}N12gBOջYS ۇ^ b;4n̰=X!yB!wPEj-7CO d$UT]D.jiO{ZhrSI řz lBݒ( ! sfoѹre@\9VպLj1=q Bbx?߿I:,+2gRW[[Nj& slf/B٘9 k6Ƀe=?74:) eXvuXJ !ƽ+yw>9 m]mYHd|pj&UOk mt:R(WfeFZd<!SD2B|A{0CPDG1?>vq轍0IHf԰7q~(Ol\ b>yr)tG_㜬@/F=YCr@s5ީ M.[`JdDQ`{eڍ"坲`V/ nTv)1-A ;,=v 몷,ŹjOqt/aO+T + e bPd`I^+࿩6m0'\<^g*C("CY0@=?[~t0߲EŸɕ`u|Y΁QPh/|.X4*X-kdM,P@C$v"WlZyZ Ѿґ2SL?C:P{"L9efE) Oj0ʹFANu~F2޸#M&9k0JQ(ϔY=ZW|SM%%K/,9kOgB7kw)O&xGRFuoW1`y"A`Kh?<Ɖ=E?hE"x|rHGmת E7"S(ݠr\B<^Fwq~h:2d-$f?&p dA hOເ!/%9^!~={jq(EvZ6.hz@ *h9C!PQd~Ⱦ@ 0<Ó 0Iu15 ɺq{[;Rngq ޮc7s&@SeIrU-Ϲtȝ 4Ϳ3$J ;'dlύ@jGZIp5 ;%sLPuu9\} 7X8*#jatۂ=e -֨һkav*^~CaEp!o9=DARo* 2Ȼ珱 '{?+!=&sP\,7? ْp厲fR+uW|E6-i;^"L׉iti*0tJ7)vQ NK$v% 2\Bx@|bAoˎ8B|n[;UŸdLK'=?ЅtK؜kR2[G4;vY$5dY$iɟPRS,ehZ3C~Ȯb*HqN2cJX"sܠJa|elzK]ta<ʣytNnsf6r 0.*!'pivAzfKqzX;ƬϿ=(3KA_O`L0a9LIuDI1E}#K)?~cVRcO Ge C5k^'q+PڛޞoĕqύDLpIx.Vl?Y7]q,8۠kl95) :ɎkSnD-蛳3z>H5|heQC:Gs _JKj4+!'|9ɊX~".MRe|3J2 qyɪ8LUh~b Us5D56(ȝOzcTNZeYkb~dlEP?-}cנxë z,)(4Unr^S*:9~KqBZ~wCi ݩkkr;?tNLel @~>^ʉQ^J~Lq@{!$ZXre X}^EcJtjB/rOtG gv7Iҹ:A=J;..p)kZ91Gy#cxñ^ױoPl] .iN>`F (V~nPb$&؍@h~:ЧPncJ6<<(N#9odyRkZ-h%7k> Kk]:pV'i%W[btQh%_XWj˜~桴Ymhި\Vw0c$, 6j6> #/tb-IAZa6qGqqYZكAF'Qݘ@cx藁}n+= 'b$ ;s V"ZURѣR#5x5ζ2}E`'S Lg%N FDF7.jCExf߂$TDS! !M X, 0N@=hT X 3Э7YK vҸmQ!E6 Q햍ֱMI"ƾ>D(f@yM½];jsU?V9a L&m {ew"+ ._e2xBh<<>V{z)FʾgID[#~0ʽA B[2r"P>p.9ju(o?\L5b{N 1;Xhe{pE8~)[C'U?[D ar$Tm P~ ݡ ̷@j܂l ɰo)X`IUh_sb|-" Pn`zh)JiIVKur,غ-j$-iË1 &]$՘7Z]5t;hR~HMˡYj7(Q K"ydpූvob5rynxTU%Wyo1$нكL`ΗLe|{0A> +'F*tl*_;pV{8P6Q!r>#<1j4hA:MV%1x߻ѱOoTYƣm7# EMv?D\Im-a b5)a&31tـr <ѱ>E̅ /&9wUb陔KP} (j$27/gp>P̿X%oBi_c{s)3`AF<,(&jK%%U49W@2١)4K8Vѷ/q;ZgѨVqtR}LQ-';t{v`ab4hN50 O3NsBj\ڂpap=} =*u)&@Fѷ\9+j}w ۿHU"7{\ˀ&aC?0TU,eS 򆍩h*JwuJUڼ#$!slB0!&\t?>Mqɠܶ=G3+3SzftnϘAƋ1PGג|%*9X_i^ tUkeflqFuZaga{j oPy™]&h0nwљ_DUG?;%A܆-3r;CH5`@K4:@(wQa&RF]doBF\E eOs`4%2[6}HPS1H1b5ݒ.WŃʠa;6|ZLȐ:Y\!2x XR 0~A G6xtʔ"[зKPZ2g6}>YgA"2>ޡ1^ -u0ic !6\5'Ճh4AɈ꯷Ҫ¼c C@]7u$ D]_x50ЮQuhä>W$km;E!B)*nmv@J2 `B~A̢=K@b=jsej;/xjU<_vtnq?K0&:~ 1g2ll(#DcѴP¶[IBiߛ]Zz/Z\H9,@(mȍϻ֨#ziȾS;\[`IКW8|{!PĦ,(k&GU"Hq"fHnª׹q%\Tfεco;@|IlG4\_̰0݆ȞFqguO2ʌK$Zb}6a,$Zұčą7RŊ:uͷMۊDD0|::sڙ3=%~sն 5=yؼB RNC/|UGBI5F\rl7Pz)Z(|mQ,V+%/!8˺OtҒ5,( ^}۰|Y&u?Xj`/S&iKƫf .E!<:8 ! 1OA5àK*nn_0|ȡܭʎ"1|.p<((|'eg/ bHĕ&ݻaonmm\ģٜ)=G3<"4O zH_ Tࢷ!];I?ZYq>IK;k΃Xj4loFO7:&n\hVL][]?qBhc3Ab~]uB!k*"֧:fPsl%5(Ę- P\ż6D [@- v>nSWuM[g%Oy̶R'u-:'PotC@h9R#RDXJk}zP9rڕ=Rǣ?vQ2lcB, رke{&RG&TU'[kpdr=/4@EXkŔJJ`]8xOi!GTJ`~vf'( T#Ssf84oaj Lg__~p, C{7"#F3M=@09LezJ#\-,Fە]&# 2_ṣ m`so; FlE]_xϼ: E P0aKUUM}u)#|Q=pN`͖d`/><;_7+v*u{PAW46 Ni.\nV'q_~?;4Wf278i?~M%r=@D}R( ! DٖuE 6m~xRf'YE^X+35ic08CRv 9P Xa7Hq˃Li1J*d== 29X Wsk3ӟ5K%/+kn/#؜k7{z@%rA0^" 90HFwnyAd|ۼQmƌ0iK,CEBv2t*nldG^D\E_(D5%Iش qUl@Sp#17?Ԯ#RЋ2 [׺N=q$fnPnׅ):?8Fs3N$?:z2 ]QƲj+r٨ e9}[iw~jzQD&=V}/yڦ"_ݠs*OwSD*%Ɨivx#u|Ԡր=Ys -7;|:E-jmgǗkXK) ΋;sE oƴ>810dw8ǕsFM=)Ks#$Xͷ`O.zX?zSa *IEkr"$1̋4gX6'r*";a%flإi̴cJ2[J^3i]6nMy=m.paS=3>cE?a;=\6[2݂qb%eY+S3F5_˼ӪP nH6J嗑fDA,n!С:~WCފ̧̓'P[drC6o"b ~Q]ؖg~1e['fSc/ ȴ5" ߕW]ƈfRL1Տ?Iy5 "|`93NيV3ň{ 6"V(DM|u> BAl WzSUt#hoI 2+yUf>NxCBjV3,Ô. E1Q^w]{VuZpBb$bEu .$%fh_yعi uBlfȢkvs"_nOo[ <} (R'GM~0Ħbs(g:;3l>Eĉ؅\; Ze<*qvλEaȕYs >9m{t {I<}&-Mc[D ܏A+h'f) Փ> .,Ċ2F𑸶udLEZC1V#Ӭ(q!NċKU\ WጣtlԓwDQ7Q_)ybFG$T$$K(=nJVhOS ]#ɏCZ<3 `c=IO\ G|5yqxAXB&P.n,T4L2!q{+&ѐ@Og^\qGeDS~4p3P{e$'5ZJrCIn:*_B5m*R4f2O[<0slr{@z1kνQe%꤇rS+unB̓O TV%΁:ZJDIo1ZMA3d%6Rt)ʡ'C9 |t-%e3JkX7oc@دuvoLn48ߣ|3mgWˏA>hg׳?==1ax#QO8γkaKI Uml}T`(Sz[k w7֩ ¥L@+=K@KNp6,V3MDŽͭg!ͮoÓOejOݧC+=LH]a6*FTc| 4&QbMؓvRL R?)7Clay&7R> 8=՟P6yg=/7-@D=dU2)XAfZ^q'ɬQ5Ü8ps[-Ru Aί!^VMYZr1`-,=31[>0\?aҞ{Vi3HH[y~rV&Fl2DԞ0=@A #V:b iXRj>Gb"R+\>'Pk %ďZ췍 Zn?EN$J- =y&e.{~ .ZsS?D_u<6_U-ZZ4HPOKzļegblKڦ > Gzv^z1DZk IɮC|qDkvJ#gٍe#Ѐ6WyU_ XvI.")v%Nم± >4E_N#8:r,;Zs*4!?t_%յ7l[fPH uhZ(S:n1$e9p5k=6;G ڤBPc03 {C Ҩu?ADnC *CYaCȏ53!m͞)' "XhqYn*5Fk€{3 Cx𮼘I*l'YX\CL[LL*3)1P,q~2lU焔%zS#F A݇A@-\9o^Ym3)>[zue'Ea&p~{3E/Qgnăd@qFb:ߞb>aWdXXn9cEkĿ9`4ehhtZs9DNS^霿^6 \z0kncO ,k 8xžSZ_xĘfns{KIqC(I .Bn\Vʻ& f#&" pxm,1NqL=НxKa#;(=OsT&waۻ~)CE|0a@D X7~n3#7kHA`@(.Ro sj"9I͚.Eycl]H`hC CAiB/{s\|ԀS!0M1_ kW}PՓUwv7ϐh釀X ꎗ↺WuTgג2 J"S}F n^e7$Jh')W/|,5bX~&8r?I#_Q\ܩ3]u7=hYs㥳<$:mx*CY:E$}ǭd"́,q"[fMf].6L;Z_W_Φq# f%5BA_'N&yChWnmV;,R;4,D'VrS־ӎquoV!̤r>fEԛ"뢪N{=MjP6c`G(8Y]/5'e__$3?QײDF?\ኤ(':MX2B=K*d_$sYƓDGKCT~6i?- tӠAFOĵeƟoA6bX:slc1CMay|dتA u4d49[)Q|k J-n9{*zrx0!:l  =Z-XumhPu-Ë?Sq\3>ZYfw";U<""{ :[u)V]M2%7\&F"zן;4y54αjY8+& Zc^a3Ex+aka+%87$>fdaVћ&͒g8|P <3PqOkN61tbZDu:}haA5i6~q#̌s[FFGz+RBioLVõ CUl3l/c}qZ{,*JlW  4:iS2rE/^‡m王B)yP|N=KTokb 3`zH݈F3 Lhg[E?q伛oB\D5X Ot|6b+f~uAu\a`*ʜ90_o(bVW F[s:GpPsүR1*f6qT9~HK;1܇Ci ʬbPEHwֽ1YiJ4h`V,fBu$rQ0 8 9Egx=E bG^Z;i6"dw285/Yci':DvL:+M~rmLa \megu+gt:(d{4rT#JmɆx5)(`Ͱ1 Vpx~S&`ymگ3^N ?ӻ@Q w±qKL*_fgH>"$  ҃[%̗M/K7`ZWH|\jTʠᾤ)0]@ ŞƖOX٧s91Ұi]RNA ~}ȗ^99hO‘&% mtvnpc֫L!M0lT 0Qɏ/W ݨG'KSmrLd0s|ːf`-1HBz009ſMﻉoO{YGD <KªҧHc>5c]>v!M3`.b_ZQ29zp,ÄRxgW'QޘRl~.6c smji̍d"罅G v_@i4z~]ݍ4517iɭ<:^%Yw~ 嫈lnz28|}'JhM [@z\4n0 ʶhBSO+|w <%OI49=~H4KV(_%^qS8X%yzƆٸ`GwYé $3 cˆT9I%4v h6;ߚ:Ɵ iBa"!Nt2ѓ~<;qb1aM6lUJ$3i=Tk:;rz]Ne,Ϳe#)|SgssRա>{r+ ^h;8crVɁ6MckfC/r2+[]$Yߦ㶞oq)wO0yTB m5 4z 7[ɐGC7$ ܂Zbz?,𤣚 ?}KzN@k|co]x m̸ iwÈL"qa`*M3,}.n|P6H~A;)]>d$YtD~*K,#a9y]`t#"cXKo 5^!b%q4 J><ᝏP! D0q! .Ձ^]{^ J^Kv+PkB`\+TJ?.xbu^! J Ou#?D}[,x-"b@uHYG[td4vTu~+8n8MZwb+|È?b:牝2o4{&]=R^pڍv]@aI[#yKHXN9)W9dDױATHNFZ!̸eA$u#N yėfWsFL+ƲZ|?['9"=Ѳ4AM"<: Dϱp%\uEi`$(#.LlCǀ-(dzV9:XiuLҡ $ZzԕɑK^&GU=WK"3NuT;A3vQ.!Cϓh{ke5$I4( ur"dAEgn$.}%YJAT JHQ&R#{r )qp-pUAa Rb'9;_2P':WhIw 4á(DK. _U _la{㶚oa OP8%ZX)e Eh.Q# 3au{>m\nuX;^RST`;"";9F(MGw8$N현}`k3YٌNs4_k%(_zjEu\?Y{MG0uNn_;T7m4s\!&ezώ~Bm+j_C;->5πQnN-Gێ#:FЖzFr$t/ [gF-DG\/]X?k+-] R6B񄂨Wkn4)E7ckHhtgCFM5;kxGZM_QOܠ~WO=yEj,Jc]Wl*f4*zdNoXn>nҞ9_޿zWE!~Q4?aКlNRQn+5tفlC'6OPs[5XSټ#dw˳^qfϢL#O2m"~o-bӏ86N!H8玲 l zAUzvO=r=]5LM>_ n}E_M:i򨨇8 x.N:^7xC_:_yY%ʓ},3y/E*L8Зl x11d`0L?Hlf16:D4I\u&xuLrB;M{oI 繵t"F:{]K"8f9K;HHDzɸaE LtCE>֬ {W$i<%ג.=ohh\G-BHSg=1Zi&w-NˉuC=9VI@U=FG qʍVٯuvE U" Eb{{[͟"k6Xի-V#Z7vn55rE 5D^]+fԖi"j=$LEsB =E돌wH z7 i&nQҴLĺOPڲnu/3낱0 o3iPcŸ2 ,]alw!4U"Fhq0f.Ou Xq.F+jg 0 cq]c@]dalQ$Y0A\f̋eIr'Kx.'w'`;E 8ǖnAQS.;tpU9bTJ%S/㐆^(ZXteu0{^hsx4R>aHD=,ds`u΃40!g01]Y٧?PAJ=̆.FE.RP[:yDJ59$D.Ǚ~d#~ރAv ^ENW^ !zñᯂdny+D󙖘 ]#a)zNƌ|nOC4 _+(C{}D-ϔ?:2Wr?}Hq$06Y3ˬޛs,fQ{~!au[G.HYت!^&Vw}^'qO/fNMTb4{jTKũR#R l,n9ÿpBpvtޟl}]1`$ tJ/j;T [=Xqda96U>^ 7'dd>#6X Ȃ;~AR7-,-բ|[xn0-勚Ŀ%G K tjh *+.c'grcS][Ӫ}Aᶼ^97يxZP׶Owt 3DMd'%G.vΑGaBg ěFa:rSsÞI1Nsnu(&ovb0uHZ1͝w;ϴ(Ƹ!4Pd~eә|] 7Ӣ]yd%"8#9 [1S> W%y8"GY߷,Squ=kV\3u #3D W0ѶL^q׍m6&^&Ϫ-m mYh? Tk:Gp$Cĕ&זYU?2bt2U۶ĴԸ3i XE|rf"2 ~ekȠF]_ ତrQ &yA=wΊI0'5CZNmspy9p'yϧ27Q,"IV"kʃG':Q:˖֭/!1\C+Ihï;3DUBR>{hz^?%TN'+|KMubF>`?Wt#ZpkF\RO:b=1Sg8_|(~әR .4uWg; *vWȌ3/eN<5E(ǷfL,*How*P[/,-w~[eiY4n_}hxTNo?#՟PyKg-?-lq?˗ oH`,SϿVZ{޻z& ]%6y&'*p,gO; |hkn]S]OBܠ˾l Ӭ;nKɯߪ=1lf؋& dJ~*k@W`qvꘝgM-E$`s=ZWx$+,勞` i٘ 16=yFrZ!InV/q "odCVX"NQى܁ K7 4>'CIMl; s N#,(~ōސ_` &Bbz' o>\XO/pGRz 9HWKY3TT6  GtL?9n ŋ,f;:+ jWίջp)#Τw_ Eo܇">uv/gi݄O>ZL|'`a,Xt=ⱸ حʥWS]|jf>]ix2DWcv Hy>FoH&FK_j O3ֶO0A.Am,[N(k8z!9ϼ2.JaQ[&8yi' "(Qߨ?5ȸYɰ I2ƥ50"Fj4Z|c $^b < = f,y2J̽zUaǝ,#Tͫl?c, jFi%Io큕 n6%|2]lcZ6> wjȟ]L[iRd|lS\"sg?FcbTU$@H+q Yb0O36_]3p:&IToum`)_߇=ȱvpקvܳ L[~;O|:^q[3sZ!~q|UtIoǬ%~R`1]D3#B|rPO]íkY8PMg] @>*ҎzM_F0*Iޢj p緼rMUu.ƞͼ&kzQod7K? - a4d`V 65PH@4yw ^/nT3҅gvh|G~ QJriMqʙ孠voq+2>EDߴRi ^BnrELo'%ڎMkgȪΰcE_'(Re9'QlQd|<7=X 3׎G5קЄLǗ5Zf{/)0p 1~;N Hv6?4UжLh2ؑt(|T?zHP c:` r ˺fe8n"sҐ>Qsk_W،)($"ggu]rlf~T0ɐuu·F =^nZ)j.K/(dx&gRڧ?߼ 6vޡ!hDG7~x;p̚JbK bh[Lp *c[I͛N]'݀M24#ddHJN~}>8xtp~^=ˤ0DcI_4R?7@Z) 8<* rwT֣)د::JE&^}2+ Fm2Qȅk]Vֳ F*e HDcSg2~9Zy‚/D$Z,V?NtiFȈ䅗:԰4A'HWYIC kF波4D1/ugKq>Y[YšLͶҾlOF a9MFrjo5Akc^I`tX ?YJr$thJcf3MO, 3ץD}VGyسbT;05Cp QD-"X+y>bnlw?ękUߎ!_ʧ$<.Cd+!^PqǢ \@t}4W9Ձ"KcB];aldډy.d)ݣHtD\btYN&| ??N^'ځȻwMv5:ƧϚ8YZ4kL1"^,t"D\#L=/F~j-G ~Lw¢(y(gi:[ j ŐNyu`uy:1yE,Jƭ+ӎ:|aU֒ŨV`vIAӌ$F]J4wiQ4OEuuKQJb1ڪ^:%ayo9ۅh DqtG9_ ZkcQtqqd!`eZn ySmJz\VB}yv("峇PT'BNИ/N.E >4[$:(Ye+R'OD 5Ō(@^7 Ͼ>32}n>V6_N$QF1;B. Ey7*l@KMEԥ'77yW:ݧuhk]–ּ#Л5j8%twڴP=u9d|wF4~T8Woz#!Q߼m1RDiG(jq{|2M',Ft3>:2AkYAKh+V$1R?Ky&Kl $1M1#GQ K)c.\/e1bO&ЀXr``J%;qI93e;ֻyMzh.wP /&cw+OܗXa}tScUgFSNaƺ''b4&*-qV) nVMUE4߭ +eAtۓ!Z jtsE*Kgy%9zg` K_,Gz#!ww(|BHK8HYm!u cz#puׂ0&FGոq{ kcK I9fB84뤞n"^e,q-3co4R8TtZ%dִV[RS9̜byd{p>4ݨUrjD#-*ʕNZC693y5B0r J䈱:(b=3)c *RW@Jo\ɘXcvB-ϩ,= \wr[k=8CJzB+O`,fSNMm&φ˖$.(rigsعq2^CפW9X_]wyK="u.֭.˃w)-TIe42zt)p45҅ʶa_GP޸Dx3̩_=?u[dbFUFUe7%*/͘C|ҴPuQL Ҹd 2%j'֭Z+i21w,?0o?88eOlt WHl|*%Iuv"~J; 0n)H",^ LN@YAe]Sư+vL*,FF$"$Q 03/h\hD|!3u̷ϹT[$6=[nOoVt0kXaݨCkV~YfcaCsBP13,ޠw-[r(_2K3fIL*e;fE ?6Ҡ#M~o%'62xǩ@ͫ^K1F9&%k93.Ix *떠ۏߝy&R dVa& a EWJzlxtQ{DHڬ=l4HXrH"ONIf""ZiJL0jQ"eveT:ԱP[c^y-hDl /]`@.Fj>`b8i9/)MKOྡྷTa;ltiԾ>= (QU~c,ׅ;9ƺt@AUR,8@1CQo2$v#w戛8ꖞxs;RM*'C26|*52I*ڝ%z/4R _h¾Wo.B Tt!B; P\նGlcdfԑ=FmscU(?9tS4VqH_BvAv/ %u$@Nh :XR>˦q}άc}˨} nHzZ~+:#D4JfiJ/0ĿJV#2 E٬Ug W6wbA  ÝzfNlIQRǩqa,T6YDgٲ#C\iJ:deIGnq%bbb]S< gRY>%$cPtW]@WTB<ŽLא}UW);W%Kܛ: w|BSǪeBkNܬ${ɵA'(?B%&锱$kKS0% ƍ'J;Bw>يE&2d>)C8Wb5ArO)#Ь|VR۳#-l8GLEV9  S+iV[9$5ʚĸey=卥udfPTYmye ?ʔlMt6H s[DxV<@/ځ >D\Y^W?%ƬY̲E`+&vKi4́zm)5NGxPm|/:hr},(/T3b Ѽ{+݇lͻΓΙOQ>3DP1P*l3 c)8C/VAxmk t.73U + M~<./q{r{D%I;W`$kGaJ2AQ &TYh?)H%d-O@v8FHϰ"\rxS=8̲!ī/ o{!tu;'@獨$vΤ zH V;b&urSRlvt݈"?=A=6D+ Zqg8β֫y%R~iTL/M/xJ& h1P4p 4C E1 3z2=,hx\}멞È+6(Q!&ck-v7EuرP2^u#΄gѷveKڂg,rPaM#LRIwNx2 [-( %[:86<{!BMrP3EY]`3 Ud(?;Q1Q}iVp P|#S%VdZ@fHY'c7Vc*-9]?N&|m!4[p3?n1{ TG8oLacz)}1_{6R{KS,ʚ = i$鐒n=Y'h,cinz>J$_a*h>ْ#J)}E/!m7@мŒNyA{z G&ک6D"\g,:l0T]Lȇ$a@0&맬1!-˨|R1#[OW1Rg$DͺyJj:@*.~WC E8MJ*h ) ,MD|~"BpV#u³a3j~[~f;-a/PLǩf\)j iF>'ԪMvMfA*M &;+7 4r$1Bx)J. 3|ӄV?a i }97G|t twp07=BS muEs3KDpTF0&Gzn£Ly^\O'@S,!V2Mk/[N9\ڞ8Bq?TJtZ܏Ub?eN?Gt j ؓ#ma oSş1WJH_0F!CP Y*ުaD8tRUQPQ☓י{Ƚ=%eay^=O2xb?]c0H^ecJǞ`FYK }xhcfTh lruh 8Yి+%VܐVe]eonyܣdߚOA[fNf8~2@sJͦb߲~e3-_ὖ=%YSV8$9xhdtj) l1w8)qR"sӞeQ=[LgAK i=EXz3gBϫ9C }(RLwƊv)5Aʨ5d,g/+`Cɣ/3QaV8X{)u8_r9[䷅3vOh5{ !dF'O!@oCBF>0XJ+b9l:F+UiM`dq Q~+7f/bG=R+~) PjQIU-/F8fd_w<"%5j K,ûoNhb!6$NpK >vYHTGEkV9yJѺh,3Nnk* ŗib)z9r}Z2xeC*gS"Uߪ҄7t$c Zt)_UƈM j5?,4~9pVU0w 9L˟1kPC;-vtSbґ*DCrbގDb;HAN-W2PT?ѷiM몎[Ђd&h 6 diRe|ʼnzBZs-8q\3k [/Ũ 3zL6ۼK SZ9K>vѓ[}k7WaG͏u *X Z`}MJpS# &K|rqGC}z|+ڏn*njMzlm׷ BMV֠p\/pfAJ~?cElƣ8pm_zCaf6!I-82섐2s ,}),q8}ty r{H;4N"Oֆ~SJ$HWqYZ:ix zd4冚~5 Cu3c퀣91wNk)LBl/.?;J\wRlNuvnj6IUdyTwi!M)M jUҚU,G(Qbԋ}3xYQ\R#pxs׶%!+] |BML2h5H& ´ƫW`պ Z0P`y\aai < gҴŮǡWx`w}z̯VTJkMhQPb~"@ة9dfTÍO/dvncv]UxkXM&sdTbկ i;fe93Ksƌn~|? 紾Pe$ ,^H>줼{?h4 k-B߸&6vDP;̑&s΍ԉ&V WV\'N998fXH\$ü:6N]X-A:A&cc eS% *ndBEW|-<ϩ^D<2'r`VSmĐ!F1{6Sk)kGcPI|es ~9Mu˵ d۟Ьti #}{jS^CZtxVp:z`*7SOΏS`BF`Π6t_.1vq#b:{n_07_-d}4N.(!pbP̏fײ|b[r ='HF$}zHojIiZx)JwݎU0ӳcM [vIV.FbV4zAn5Fκ_7n *m׮^,5&U촬2BU6.07%^GdB\aj~^[6&fA[%H8pQ6J qsVM2¤=a3bLu<0.BȈ Mӈ"P++U 4 g.>gWGH~ܚP:;Pt}w\1 W*0>[ۏX <tN05,a~AhpWj MREGMR9Œ!PcξzrmsC%UI1uF@6UK_7W{uRoӰWňzMM褆$OTtnzS_XjV*2,a{&x4?s'W|"H wT+3>%v"ha]}0u !j3n+VgwjuPO!Ү 0'v<3ΎfoVAsrYP <<:z0f%u%aziZ+ [m+-3O\r] LRCHÏf`>ՇlV?v.1XmH2|:7  N婹}D+zZ du Qm<cxM3ɉNBVqFN>6ҦA0Ju3Nn~ƪPI HF'vvˢDN7r=-ar;ig7pz*rZ>_Da@(@]\]+P"n'|BG[ FR[3 t^Q$ۆ`G ;c\qCQ5Hq?2B?L j$9WU5 6k5':-JI}1ڊJk kB E]acCϡ܉:P*U2qk`LyKhO.ϙa6Qҵ7CqRwAc֯0pԚIU٦Dgl9oD zd;ٶQtUMUxHIdPGWn~B2}X;QTc滿 p]vAYH6](W2d|b7kߵzg<v}=f[DgUicukliI"20$:qTe'Ѵ\Fx-H2{ːJ2׍lLtv@C?!E ^=:Ydz`W@0YDsbI`r3_ V$HQW8{PvTQEd]_ֽyɊE sJH&)mlz{EE2JVroA?ecq))0dFf[.L܏bL&/B"VN@Y)gg)ՠEa^ϻҡ< G Xm""oZg$Nnf|v#6[8 6-5蜙wJCu;(C4d:4'WH/h (z*":l k8x:1&GXaONijzC *_Bk2SðQݷf{&XV'Ƣfwk?engv=.cQqQ/T<5fuozY2[Ax̟9S}Wî>.$EJyU= m|p,2J8[}y`")lIkPi,0'_淄gA w~^DmnL-)ԭn\ȖKξ[.Y >n+,\^wվ?"cQzȑ@rAXey #ՒLt?0Ru]ѷEɿlTfE7(q.vT =!T"7@{:V&٪AW,ˁWֻi"|5/a'“}V0r%~bR4tr s_@"5 J-QH" 󂄋k6{Q>p1opj_-gxB~ak#_>أ`'w#e/T瞇U3ȳy59d 6K.GPŮ#P3TyUJED͛v8'c (e'Xئf~M]~o$Rd_?B5y]^NU°^ѹ_^S#(NCzJ`lqSO<\z$Ň84!ԯUxKQ|8:*D&s/뻂Cv/.<-7Ёg9!-- `;@v)cORZ6;¢~;G[])nn;^ݳR6c8O8ZfFf|R`Xeϻym p=5χC" "!y+FL #E)3ÁZ8vV3Wj^مKŪjR@eW0OWs*n5,W}Ԑ(as]X'Lz"]So{X\o6JrBqSC'j`G۰oyѽJ5){kWaB2 !X9u,&}-xaX-#(`Mq0\J+R oe7%'܅^k+omOJzӡnL+bt%aɡQgfϰ ?Vb5q_{tUz2ɇSqR:TArner0tVu^>FX9[9kgS YtGMR wyV^TmoO泣CK|HBW,q@dJE #aX1ҹ sĤ]} ʷlKr"Ly݋=5rGI)u[2&\ecvPngO ?@ޔ=':p$X'erq_5Y'DE\>`Ms; κ'̃m@p/T %SD&%#fcT!u}e|YFM?'tRhھM^dm˯GّeO#R "={'!r{SVg6!(D{O1Gkғ؊dQÊ4+ w9#C5?=eĂK)‹ O$eW6HN~PAXLz}qYG㯈)K,[eYJ4U*na(µ9u' -|@"Jq ZajMx[}۵MWnbZ{K? 6hph$xC}Fb(Q!,G>0H:<,t'9GeAi 'AgnНo`DM!,[4A\F ѳ[ xv?Gʚ%rc7\ @:M$DTk"Ep{ȏ,8-e ĀZkEjCcWG tY=@ }Llg@x]}ʢc "abySo/gڅ\Z+3n)~A)NfǒS{;hoL-!th/U^5-ë5K;ϑ%gNk4 cL=2EPM 2l#Aq7j%OӕJUO cTXKyXHL$ᖥjL^P FKp!1)#]/GXJ=*H--ַͣ9:E!S vӋ !!3'ɘVӌ9W3{En[Ezƒ垘ڱ9CKuj3\M&7mVpfG*QA&aT{s`+`7/Uhocˆ~hjV=P8t%rB\ϚSMW )C9?vD\\t{ JCj6?mu oE^IWH$rYm/r5h40{&,b[jDr'<(nC'Ѩ"O+RtiQ~My7ْ7 Gfzmt6܅TB!B]~2X/^ [3bUV !{`dzՃ߱O0js+~TEdC8^[Ӭ$Pt2ֱ+ZrPz!7n|If"S#R=_'(po%GcJH3 _wxoY y8 Wb}E: /qn6*eH*ߎM8 e,%."VoJiڷ '߂uEh#[0[uDgt Q .PЯ-[Âq ܿ;33P/jO@C&nO?[2+c bǚ^Lck Ew1h2 UY:,Z?- Gn w1P-YʄyS;i/}VzW85lܕOZ` 6SeO|hbspN_ 11c'^eciOڸ` |CdIKF/tӖ|JHG_VP PqOI"ug$7b>=c^h'R)='iI~'(B?0ݭt=s- qt܄Q8Lb4m?:*W/ݮ"xI$͠׊J-7B2J~+ǒAaA߽'6 C_s݁!Z%LAR^x'+fG',eP 4V Ou^9D '8ɚ!h.xjV`tnfx كGܠёC}TE;=,έq`tsM y䜖cr`ʐ1 ]f,`8urӕ?T!&rP]PQe4ϪWxߴ^j8)1Jc/ 0$OSW.yG4?U] KG!e]L>4`L"v)E<j\4SyZZuŦtS"9퉝2LZ&MЏ !p*㬾7{҂{ ک~.NYk q1S?zHEi}!,:|A8B'rns} 4B s??&l#:Zv= a-.pό'L8 j]g7yUzc2lM 1xJ*0`W ߱ / NQP˪꜄ln#>k1 Ui͡w<7ӫ!PK輄u@Y} @﯑/xIʶ)2򳰉Q"o 4ٗZxG9LgsP%C8+dse+phīC,#!sQV~q*+ͥP5ipRh̿1wYب†7y#d8m-'^JFs.֯ic ,ن1Qwux̀%H^bH{_656Rtd[r94  m@ӖunHFrnu7#CD8usƘD8O 8Dy6 K&LB 3ю)0Y"ȃŵ0+t< Z̥"͏-xRRt_OEF8g֩w QPc} g*ysœ4sZxG,ZU>Ҍ4Ίx |F7Z|5oɃZ^Kze8햽(5#'ʖYkF7TKŸ %aЩȫ;\"'zr9#>t:'K)UEhda;`PS[Rb;FΟr}2_™^lBA 8 JzB,o'HrM3>_6y=:f&SqZF<'cVqۢg"9#d`OI[>e@w!CB%#KU9#~޼x=sxG9Zݫ\Cd'w䜙ۛ9lBZiZ3ks4 0Rŗ؇y Ev &%i#3߫5X̊jIw(]iļWv9?c20b}C_?VD^ rn4BY;}$@;Ʃ> >0F%"269}YÄʚX>Hj[n2ʢa-ﳭD ea̩ f eHqf̚B>.< &DĆ\lk|˥9ܽ mٓuy -<"d@plіB ʉMayz҃Oܿ&鋒z!oFK E_F}-g'*- 6h@muY%kpC8}db\6DYp褕^pl//'Y)}#ܺ0V-^#L#,Di7]( 8Fn'B<fG5YaCbRM3ٱ!5;lА&lܰ0Y| Gaֿ/=ԲI+JN:eD7c^>dMy:fDznO6dⴣ&RR>R,pebے6^hYQ>Vb* G {~@i~r*r$BB02rV,2 3R`{zӯuDoNJODv捯GV+%no*Y Oc:Z2ުN P8Pxwv9rUd͒ ' KoSc~f7&)7if.i˔c9Hl$߅V~ ˠdb)Xh67jVS2 A^l)2)5gU;׺qR*O#QO9wkVo N)_FQȄ0ڐν|:Щ_91G1?ۘ gf켓5 @oI' )yc0v40A頢쁪yoΝshzBa։/+ƞ6`3pd(ygl/xyh JwݍkeeX>zɤz^41n&s-g?,/uj!L#e:ig4XylciRԘ-^ͮ(v}Жʏܽ d]5̵ad> }˰ρW;<}ǼR/(H8/z @ܚa(r8N^[r= ZoAHxh]-yYǺ97B45Ţ.-~|]Ԇo*s1%ih"SFD섩'$I;PfRak)TuDfY$wFwXCy1:BSoy>MyY{PP[؃Ls[<cV~u0O#4Մ,^a濗c&|LEɢPQg58ibmx<ISsýGGt*ޯg\LqZsw ACJ=fVl`/d>e;?X! Z.c-0WfLq_M Xzg=.Dϩ4+^p6i;.E~x~6Ps̴i99ntG,tOzAnξ@R,?s̓NN]\W̯P/xmQU ڳS l`\6Y$[9$nѡ²&! A?m ~Gq³ǰ\> Ǵ*CUnklvh|1~G+b@;V|'#ОHa'ÁzKRݳR@Zw `P@>K?ta~twFE[T|du >D:qR;ITþ׹d_mM4Lb&UY8}k)<, _vXHԿ7?nyU8y2DA[ro<5>SL!j OnLpkۘɠۮ: {^;b)JbHඤ!OI&# ؤӑ .SQ>j6@pAx5&"h$c⃑`0O=!ـR' Sg~9V Q @v$V8`wSg<}بq2$oP`;AG}.7TJK9\a'w!%ٺ(ҕ 5hMAuYR3A@))4=;]$VR!PʈѬL)yMYx16Wg 9Ҿ%KmU9 dRO26R Ke0@B*ZqL IJ# /`ʖw0+A\{Jg"+d1]pjrN Gv?j5p6=K0&%W@jgw!,qUGT! OlNZ/ޯWg~"յKv6wȦo|sV˲Ln>ѱh{}FLsaiZqT{w/<#QhYzop_{AC^X.)&A_^ dWϩezǬNjhxe'U'ne}ҿ㑈I[N85Exl9[՜/o]Des8 SY,S#GST`x.gIlo|Gd'Yr˽+.,!ՙz.;C+w"W*(q@`KR)<UaBol'6ıIaSƾLsN93Ot)Z/?,Z0] '!rF}%6է&n+?t@ J1p4o޿1ɿ ~ք|2C$Ps#tP86I^/EuIO,3R.{OY 88 eG\^ )5wvĐ3'mn>f" ύ~{$aȦ-k*_SLM ]`sSh^P#jҍv Ξ ǧ4Xxt6`c޺Z$ )ZC:2??(qz6VM.xH' x.eןo wUXǒ↓K$.p&9-bZA$90 1)ᓢ-~ Cbu`!ϊ(TGDzK0]@EC#\׳vɢD?b]˾|I%`$PkB@%ќ%-}Vzـ>*^3Y&aW۪k7hiJTkX`JY;I%8\۟&@ dPi3&k}DVOY;#1˾9\)R.:L ?Kr_¼{m5:+:Mr,PYt4v#*M!7&ϕ$0|19~#Ј/a5{[{\}Q ϩFNUqi&eA +n:%Jo@AN P>$Hh oL W8vYW z/?l+z7%,1bu`/.tҍ2b |~K5 K&gCvIѵNWT`z]C@A}{@Kmtb7ÅNpx^?X4XO@"b?Y7Hrrh" tU%bP&n̲ZC[ zHcG鐞 ϻ00p(ڌ$'cM aIt\[gA.lpmKr>lfH"rvT:b!A[!JR֍5~b0k5dܡ_7W)WpbpVZW7I)M҉PB^_j/Ɂ$bi9"2Korj2'ET ZU-R3Ľ O$D*C߇z_"XhDF=JGqW-Q ~6Q"D8.fsPڜT'e_Ωjf}ܒ:b"7v[@'`}jĠe-zl;5~*6ݎT+0VGLA͹>!`@4 7w^viq1 ikD ̰_#k)\c!Ldf}"vAd6 3[yL(rE}O?vb"g9EySeW6ZTa(f 84Qe;0.f }44;sRt-Uk孔98w )|OK  u_a䬉t9uGUhxOeL *rObZ6~S/Ә2拸fIJCnt(L"p ;h7do*>S% 7 ELnւ$/(Z>ۋ}@<3W@pO3V`='uk4EI` gXBͧWzVv(@i[#sP|2Oeu M=3:f0' Uo9x@,lnZ_xzzs~ -2"-k ]^O oy\pRܑշ7lՠUzӍiTX[.IIqI vH<5jIPbL_1@$Kz㯞sWNNXFv>XڌsX!&s (Au LÈê }1 |y'ԦlgPwo)'f}Up"_6]"~k\d'V-1KSZtIi?"–^>c2 l0L[XUreXr=w4!QՒ%Ne{(-5`olj,Z.~}"O 0+ej?шõO:!QM|װ֚U/QD~Á\TbmZS)v{ԞGP&O,N>q6~,K@`Rg;qGXqN g´?\H:K8Ԝ1B`M/=w&/P= R?QĴuj3]cv-r f%--@#xdzt$On.mNj# YodaN"qq菼#6rԯ뎻~zOc\9tdwFS,ɱ-+H.hj-D^"zivyu @ fp MG6JF%)M6zy]c\/=!9!֥7BwҰfT!bgZZ3V۵J˧HCHfsA8Jj%=³N[吭5S7h,<PjաSr%D 23~dЀ&% :>r.#RXDH[siM&lfNyE*Cqb%ς+i0 Ԡ-,u}('Rj؝8HHHf4셹 ˼tChgN u _ɱ](֢}C⽆C4I؊J>i88q{kv`'vzuNK ?&_CleͳM XKXLh|-ґHK\c~[]p-mNW6 S3?Mo **^~+4 ~ 4?VVt8yڕd%|aIvۻ8ѱ]H鑔ĺB׽VЮֻʪ!MyGHg%̕`g O%Bd¼b8*,k%Dڛ8$i=|vxK"DUF+WԚG@+V_2̝ho_ > 5I{v龦ĹƳ঩rnJ0c*%.XmuBW'mE :I>lߙ2zl %U1NP  ;z,BEbw6֧G>&Ie!7r/_28Q2bUt8ҺALn_06ܗEʈDوZI~:-"Q'AM"Dݩ{Rj3׻۾]+/`53!O0+(IDAT>r#17vүCʋ=\irRk5?*J8 ^qxJ` e/+!-e{88U3FN61.T7k7g=2saHXQؒ^P@ChlkP2f . 0i|8( TLL`$ > C!>+MOfw#^Ά>M_t$M;u@Tլ>ս#1ρCVY[ûjpeGrb1LAB FU션eIod036*j t.fiD2R?߈,Lo DAL s\;NQs)/Oa| 8I+\#>&Xʡ¥*j\}x%tQ&ۘkŒsV.ap6L;6zS?0LV%u͒T "X3 +Ֆ;[I;mNt; !(K"=b`sA="'8r?GY x2c,/&^?櫅>Q[ZsB8 {Uie3K]zAK6;no(}*\3o9HK+LJwɜW"dI_7<*a`ZդI}3>1Jzk[$y:F UA{F; ¹x,+rsЂ59jAҫpmtO0@JD#RIg `tSY{0dnuԲW7n.|O><6qO"DF2)OU^M-$zUVD] [. G6Dn4?܅^bF} QpL* !+1e[>xFEbe?$ IQ;Tg Б]ZA1Ŀ%{܂]ZU9="˩vpwSILWREë ,܅,55֚O!ZxuJDop)\z~]I;p\.-1-DVܫ*Vyb5$c>c ޘ~y5Sle ua <9jlwj:Ɨ#KC W}Q)n%H{MǚsI*5 D|=5K4Ѐ?L/kڏظL▪:qh]g.K#h!TcJKE=l|. OYsF[|2HˆhMhF(-.$^|ZY6| 2o0 ҠS.!ÃsW'8[}x[h~Y|lfJDb]+j&L7f]#&QBC!?.݃Wms++~>dJఽ02`8.1@mx4m;JEΆ(fXd?3;G>C_ ¨SAmdԼ[e1wC6=)Q_4W<º[4F|>asoYߒ_ګ{/5sN>Ti?˘a*c=DTw9Gr ":pU9:`a4>SX{>sjLC`=|q`QFUT}% 9\lԤMq &FjiC3";MHӔ{EF}~@ dlC|-@r=ּ8ӆFC!1cUB輽󠳒Y&LQJG'g꭯lb!s{W@G#c;mDT?3δ+㙴F.[r;67Q|R_nC1ӏ U{P8#/. dFc!6k]8YF8{y3:qFH˄@n~*I? s;*!zۀTNv&?7;oI"m]ᬢ)^W `7Tɨ81{UHWyN9FǫvHReO#:r1 U$g5ƫԶm8>I㈮|ڲ'G f:kЉrv7;X-řb@0'(މ91#uzVlv M"5";Ѣ?S=pv"%u{&,jBj+mEF}γň ) a<g%-D>_^ \$^~Ux1P (z]/JܼR6]H&O06 ΰօ .Yq9gvT7ҙICD+gN9mJפ*4 YQ VNN$;'e 6aZX̊|y?C}唓#ʺI[V58T~a'QfD-UZO/:`;bxU\&1S2Krݩ?gY M~v\<IƲ[r|B Y[Nvwat+/=v1X26Va!ǛVk27bd렮X-=c A0bͳ fJ$^+ie{݊?c#'[ ;pP&+$Ea#R6%OF/'-Y". Uk;ڕY!h\Jk)&`#[*α [xҏ( Eo'#UU/~?‡\@fefMM'mGH[|xY9Z6X̖ #^]g^2J"9h,&c/YLWT1^K"v0 AsV9"F >=c2ƮBiK3v. ׂ &ZFkio K©-\f^W͂<8T[b'l,>ɂH?ƶ,)؃ek4ls~Pu{Jg1G.3#ƀn*<|]u9-JJ\&&sfp\tRnLX˓GQb:ʆr7v9w:nKtOo̢ ie#?%8yxEHFׅ^V85)k3x&=> e 0]Zn|H>Xƃu5ҁNmj~rsCTKn9O@Le1%GOeq1C&(~/efIk@,@[8gt3.',}ȶ#6y"!nӠ;">W8Dg$'ҟP``< 1pmpHDf.i t1aipr5|m c_l+/ n0ֽXd\~C._2L_7`TI% yt?e4l85ݖ4z~b7H6̱:N.}MeS{ \ !Qܕ,+'&;k6Rhk[jA<.#ߧCE4i#Yf\,SVU哏-*$ g+&3đDCQ602O2! ӃA4k1Đ&pq8CiTL ?Bm7\$681-bZ; F*s}#J+n:o3v3stp;["I sx& :oXamt55⌗EL(ۗ7U;7`*V(\+k sGYn(bWG 3`Y<7P8tMv` #Iݧѵl0vbuY~O=Hba_'@V^hy˵a@f2?CkB4 10AthgBSs] ȷiG I0}5' NW,u$] =xS}U%ڦ+(~'ÓӋɀ?l4/ZPc4úUM,٩Fab\phɐJ88j;s폞iLk 33/VLL6?H 00]D梌R`( 8a gگ42J@[O5Zd9 -iOZ6?,ڧ#Q]Jl*F_3smT~nN9w)āaer;$N̴n<$Zq0n9l,ѩ>IsUtY'7`7 L R?!Bڍ# B3Xjd\o/yf&OZm],fKgE<&E|I )!McIj9xﵿ&lZ a ](~譙'Xu2]oɥwQn*@$}bY\^TؼžeQp3oLX8^ss ;^^u8g/XAMq,s=} G?|ň/^ݷfVc1d8ċ*EA$ښ$6C$t ҸNx#{ o@q9d}%L3 n_1 yhLN6- )qiZwM %fC[mL_%S]ԅQ5ja,4]Owre?duLQ7ysg{CCcΚEKV9Q@v5D_=>}g+a'$~&ǂXsgFrhU[njD낼ZYG9fV*@Wu|wcd;}/sBr4x\&dߟ{aAޡrYfDτS 9lewkqW6YN(avuFJݼ2J ԙBd։sBED+!+%`AS`ʥBep8irmTG^PE-trl;Kxe"j`^zS*G2 p0>k*s<$e%ݲ>~XW+RLrBZr0Y$1xD A%";7YlSV~^$!ЪG t*:u^&W ;|Qv{E^JalKZEvPA0*!;҃gާ7u :9!KUey$XbZ-q_tj̤-4dg"R=Eٻ+!(01A'^T y5L9[`]Ƌ$^11_Q\QSм`ksh}Y v>Z53i -?ކdȶ$Л;k㮸ÝfZqS/Alo/2WT=) ?MNJŞX^ ʙ./Qi4db ~?7uɽTt3_ rx,.lN0}ۖ[Ӆ֭1Kӱ?%c%d )N $ab~ R/5l sߵ>5MUjrÛ:{Kƨ18'õ |LGϟuYHT֢j_2=1RzD6 :a\ ":@jDXJYUhɪCva{b؞]|A%5PN4=]vnȚ~Ry͂ۦ'_+P1;}[,6I `ڱϻ6(LsRV@F4w-&kex/eʢDf?!G,gsyX- v{`~oh3^{}NzRLYb ]?djҶ4ZSdFy}Z9FP6qƵYv=x "MN\P?!)A9E1'8.dv& _LdH۰XSvQp<*^ ta9lжWIM,i'zJ'O,VAʆ%`au>dU4r;٨ ni*;CED uZTPK쩎ORUŌo.a/4EhIne;QU䦟Ԭ)0Bc0X!*fZ#&/D5.unt',߽4zg q"F'be1b/JCuL" &;87 OH)y?uM?"zh~, d}{v̨[S )8\sС \@ f<uV!f\2e8Q󰴈ñcENHTDڇ5H-h&D UU7UZ;{P;Qj~!N21eg.,ifho.v"+O,'V4h;|ؒfL=-鳋v#,;=*(wOL/_s̋ݒu`Ӵ5]vd)\r:{xk&& 2y:ⲫ:=gl>v鸼1m AQ- YQCJ^mcev l ]>Kj3>A8RjN>HmN8cA0sœrG<f&qR6ķ.wpI} P,*Qj vV; `tomb&6̎8-iIΣrn!F7CC;֛>wMׇ!2 PN=G.}kY~֑xm ѸgO C- + ۾ۦF6^!Bпo^Xt^Ĭү~M>ԢP_32Tϣd6LWg@P_7?aIYμHS#2LFXʡFHֻUrQ20ss)R&DJ~ȻzQbG|E&$X18NJd{REy[Mw]PWZOH>YY뷉"3`ghL`>h/RD ̌G_ qVzZjW[k~'RO%c!9jK~1snBa,g`0Sh@mϮ-w]*l2WqK[;J5byyAL4x>~99s0;=2kQ<[yL8 H*j떜MeuLm/V9煛WF)\YhUIݧswߘ:/VyY&!\aU{@۪gdQP@*Õ.χn;u?~X}Jx FAa^K׫v 8=M5`p.;tbxʤZD}}tm^ ՗Y[N%_y?]dk<BQ8"/7M@DD (- 5ؓ+Y SA̿_Ym 9U#h"åB΢#j{ 6'Avy[Zk>]ؤ˺a~De@y(z.&,|糶< ^섈>3I(9eb D m j8t#?*xBeXk(S Vi2% y'u! Vmc74I5%Olru['x!F.zXDlDylF U1'a^h;na]\4;[1I/rAlV0IJleRح?̖VRk0ſӟʂi-?`Qix Uo8M|׫ݣ l=V")l7- 7_ @yCnuqF|!34Sx<ڨ. BNNnk_vJ[bAM4""0y(]plĺ-1rZnT%wC6mt+gw&:fY^T B&yUs's/r3+BTU;NA84Mi`Dyah^^?ͨ#ZAE\/f##%0 ՚Mkk&EV *0"lPt zvZk$%X4-ǭ,h 2͓p\DIw/S;U\Jg\doP*Nٛaޟؿ(P4j.TM#iYXf][e5 &6<[Ϟ6Wh'NePzb9m%DbZwɂ,1K>\wdлe. >x{ä+ؑE%g|1 (! k[+2dArɗ!*1*}3Pjwxk.[J?]g(sܷ$NVR䁿 !֛&+kX ȴzJLV;G/f֟k3<8H)r=wT;5k_ßJvݘtu[5?R?of[*S:z]%[չSogc>/)nJA#ӒatEͥP<*{$x+[}_S| U0QJ.f|z8Y_ˢcihIOr[}S*Mq )e=cZe+]QztT\2v+iIB)'ߙ3pl x_s@m.{;eڡH3@֯7__vB23|}*b@GZ`v ѓC4n mP" x#X4@ 4/nY?P{(4p@0K uUD dgy *eWwq1]N{EPEȹeBՊ5 KWbAKZFDaٖ}NhM`qmAފ1mªzL5ud:ExrQQz*`ue?zo<ODt=姫m2F=zQsHf/섷_$݊<5@/'ɠXDz*jZ`@ǕzYm}LДDl Ǜ7lɮ+jra0ckSiLln9 QΦg9bvgw'ҭ2)(t tn@ uHװI{d_W960g N5iG9a׹,| 7#ȇl@$/Jl0q1?{˞~!pxj§segz,[0i#cqKy)bQPZc֜YHy/#)552R>s!nM{u97pd*DN-:]p3 0%ʾM_4+hffbǛPi ' AVz tN `,s[\7Qi8δ)`Qe"Dtwa)9U`>ps|̼Fv y,',Uo8,ݯyj-&Y9h|Ӎ@_Vv3G2H+=_[uZUrq8_Vh]>TSᮋȾI {ݔ]^3s:]4-thb}zi;V<ر` "x%{΃%ɥ@j1%dH!c/9W1dO7Z3ʜl+&zڼXak=w0-Êj֪Tz l !@!ksLdl"}js^lZF?lG{l/q{Oq0?⛩EFI,Ebiکصϗ[a/*VZ?'%Ac.7gz{ģӘ^F?] <i; 5o*Ğ>B L]HVuk$xSnC4.F4!n^iA 0#xI<șcSTFre(xĠAZsIڇeN >$S=D,~o֬tY3 4OUi-"b2%:T7l^Ӕ 8#}?EC3٠NB\RS5l#cTdW^gXQI\ex#cY< Ui^|c\[o&g:z}RA R:Q;PvD廬#ӑ"5 CSHr7|mX{ۙ5[BOkR^(%O Rnœa*5egEC{!>ZH58&4P`.0+{1^C1=CKrO gYE#)@VaUT,o,L"Z_ICU$#pX-Oz&`p x*Y c\86)Rd37\&%ӘB'.@n7RV >lc^@dυX${9+Rv0%nurA#qi`t71MoBoꞥk {׳=9#=hmBwu2D=HP^^J:טnǥ &";֘}]YOAa!m4 P'Ñi^,'|D՜.T6UR7!.\W<Ɨtm;?]QMCmlpbn)x~*puz&bF_r/xԥB똣*TҮ1*; P. B],#je4jn)7yD2i Ȃ??N',֋T2w 4;,7n&HQD y c|,TwqUP4z2pX$˨$Sv=$-ΖGy&`|Z6w8@L'W}XT& lohZ N#y2 >oq QaTimTbz` gxu8"|.XHQw& 4qpHG$hp^zg\7F2<:~ƾ&~K%Jd%Z91f9[;A#ٳE[yk[vfx8u0 ߈00}_4݋hE3zQU%;CԾ!xdt+cCWȪqˬCnHwXǛLJmMكV ;9.L #w]-~i.σG~]$m>6S{J8XZ oxk5kJW):GݪM؜V_jl)b_]nFfI ֙@:+S<$.'T{02}"μx'1([Ol6&ۨ_bRRx0lʺDPX3(-t>{=0kgN qn(&z^/l]Yg`c!{xW~. Wœ4/z}>buQ_lY޲@uI@-]]eH*3<V:]ڰ젯G(1&ZBaL6$2JˎhU-*X= o䇆"fZFw*G:2I:l_6āU[{SR=9MLXMeWp L6.ԃ[ܸ'ty{\}`1v]Y(\F#nݕ$zrOk|2͊G,^^{7.\V3M730\O{L{ aCV93҇ןd]QA}[ ,#TԚXMu>;̥ caiZJtSBa^ <F{+4BuDWDt)˗uߎ#xJozu\lܾDrʑt]𙾞>}s/_ kE JT+opA+hOrM5i]z 3v,FŲp1r/>7 Vs WT9@Ƣm L@U%yBGu'㧠Mp6 P*D}~CR䈍Z$xeé^l--cj] ޢЬ%0Vì<D崌n'޳xg 1\'{Rbc~5+l->Nkg"19ːþ_e! i%rcnD)zJFH17WI"[@lvːua%[<:m%*xO4}わq8Vu&x4;  ;OΈ\/=MAIHzՋ?Haִ0*Bu7kZWU~mSr*dɞJsl_l`?;U({K}*W;?'FRn0vsAmESOy*&Ca*x'?3zP7dM(ҍ n"6*BAN,\*C+7u'LY$$"+WG'2ō"J3CP sdܯ jha뒌9ZqɲL#d_ر1//˕xVweԺ5GlמҢSQ^`Mq<@0qţ?]I 1R߭X۳'ӋqypL ,faDF4װ]ޑYt7någ$#_,䲊^H(<DoXلqtf)ի( !ѻא3u+ӳs7A,i.Sdԡ@Fδ7I7 )8*_%6i!n|H0NAى=p?6I0qW){ÎY)c< en DG)\VzeH޹FkK)>&v%Xކmaҫlb<(IwB,^968X "'gCM#  (C}.Y@d4Q+3LA/Xװ $^/jyGO?ѯ6ШвPRqg_=W@g^3͐+oFe=uqAvjЀ^BUKs' Htb|X!5ğVKidj=dA0|,}rI/C@CT`g3%d(ߎHPeXnkl8Rӌ=#(}1$+1םn<o+`5><@7SUE{߮o Rhũ ]҇-iF$-9_3CԄs1$0\2JO AbxTՐ0Fud۝2⼽ry56o;7~ +&a?U}9BSf6;m*7@3Q-aeF% aj ,k/#L-(XKH6;#iiO۩O; QL $wRAUQ'N+NTUIrYtCyRY6W:8?@h'fVA=-!ùR6oһfCrdZֲ7m*|m6? h'8uQa aˡ+RwցQI {aPÃlSgGJ_r,Ƿ5hvI1 iV=Lk9X92>DAo`/cn0-im'5Ü9ڤV)a0[>Ϩfl$ow`OxjЕ8hkRd#/ʍ^t&(XYV'kƚt˸NEFidlX~R}ݮ8+x zǟDd9Sr64 >Eې\{RoO eㅣtQ8&ۼ1HOqRu ݌$x*M8%S&~o=6cSv!gX{) 1-MN? ;˭˼Pϰ=s"b4VC>$ŰuLгI{1Rމj- U<,p?O1eHp:~;5ct&EX)g(ݕ]v!=˪/[M?s4?~XD}ZLd~iά1:w^$w2/Qل87YA>y'K&U_0pLQk ]V yɴ}dv#̳ ~5$ ߒ(PW`2(i mQJo]S%pn&#3-ZY veywa*XuDѧM˟{zQqn-+>d[(ެ7FIȿS$ VTXMy"[SY h Zp?1 s EAHUqӉ*uU#9GmnT^M Ml}\:; gwj^OT*S>C&_#:r)ώnǹc;-P}]a}㙠z VQix'<W.yl)Ա2)n*.Òg~x?xӷ"j5SZU%!p6Jd{ͣ)f[Ag or'ӵ2QYZ(m9T2e_HKFh ,|/D.x iZX*cmlӒi%~"?'.&?>r.gkC9M 9 ٗ)0Ͻ(Ll^Hɩ:8 Eid!فlq<@}b"32Z U!8_͘/52O sZ) @.f/'E@Wi{A眜+ùA VަcwE .谧HVrBo?RavP2!'Pʰ%CfDG|u@ֳ/TSmB}Ƴ7aӇEm_Kn7-wf'2?套}YER@@ SJMXVwmYL=_n UAo65@_HwTʲU0}VgkR~@/w̕vw~apI[?q/@n>q)uNhƌhNAh/vGKU0׸Iwʊ\b[iE>3LIPf1=Ue!r FBHxOF~(b}ŕX =WåMZ+%61sFo]uRK0l:g[8PµvqOA10E}qZ63JД" g}^K(\d_5hwl$-5Zqpt Rw3ިvasmj?D8`PF=&:|!SHۻTi/S^IvL 7(Nk@!ZJ6dƈS0z;#"V=†+]&xytǾ#'!p*JbK)|TzA,9bLRyHXbzS\{e;#o JT.M,:^+r '.c*vbq8`DYܳdbʟ^pJΞ%鯿mE]~g`ęd*BuLOwrYW׆)K >ٞa⻼GXv y8+m^-h5@[qkXvXsbwmN9-wUJI“iAgp'6ͪsLv1փ17}rHrYS.@wڤ ~֌<\ K!7Ӯ-Gd8ZIh|ϯÕ+`LĦJym"q7mqX6|E!"^hY s /(*o`-эt} ˬ˜F?/:_:XZ甜ITƧxȨx0&2rx)#ĝ' )\ɮװ"s f8 dCA#9>HB c RMG5\ e,b [Z$g oC6~%]֫4Y`e' *q/`a̒F`~0V-OUu?4 ͢Ԁ|4ǐgEWu(6-&A`uU(!K8Qy]d9Zc5OthU£u;(N G7Q3H5c=ᴟ_G,٩H1\"NS7o8W3 ؚTz\9WSL4.dk?g8Zw{kόGl;r.;BGZ.m=L- <8sF7C_k^T\JFSʨ++;gP`C^4Eg82ƁK dUA޻[mX"i0':VKⶍz nXNd@M#?8̋A%0o}%]N;ZeQ֌tG7iN / = W4MݞTL|҉`3M"[o?29˶V%hv$9K4O$$X2åu1gy?E?uu+c PP$Z.qIi\aXh_EqJ:f5֤ԍyE}~\F?R3tE([K-〈a`|AʮDg1"fpx%uayqO:a9CpFH.x_\91:Y}w?|E/ٔ1k& yj3"%=_.P*/|Re[h1 v^JC7>\y¿ ,?8QZ4/bYEĚ!tkc(~q/%O+sdݎ54׿! &JQU^V+\^A45#Ip@|W?V^J5H` 3/ 8#90ab_:>b34Pa'-Jhvl^LkLۮH|ʹ Zk]k חW)AP\}WyBqi@9m_MΖǘJzV<@+b`VP;nqGVs ^X;Y6sqb%]h* Qj2SUI `BBxGm}@+e݀KoR)XlCrTVsz k"D-Tߵ WSvWᗵҘ5Ac*k+1iMtE3Se p$ssEyL gi@\^pZy$ըURt/NdT$*G_pbC )oi%!;;;T`MBPi;%@Jxs=A~l .l#>CӵB/I1=GI]fņciyMh b)d'}ٷK}"w*Vw?lxǶ,t##_(5C9qPأ5/p#(Zc]ZH @Kl4N"2 'yȥ*lGFnڌfRD'O_Ũ=XKo#LlIm"S]kO>)/#ZӕldY"ì ɤ#U%u2@)fxv73~څn}zO`jtppRT+ R#XO$jyt. 6 vXm>~b\SOؗAXZVx~kRx-=q\!zsg:[`'v=mػ(⵴ T)>V]+yl`,FZS,vN̳\GxHчzȳNϼ`DlXR[;ϡCd^o;gLKP*`49Հ0*zk˳ǖ0Wҙ"wmN^ fM&z- gv$0"_3\CuFtM7ݡj$&&HA9߭knK.ǰ"H"9~ӂzAsqLn_+ >(tz0(jC 0^}$h @Z1O܆2cmk'VZjRs} Iؽ!,nv `a;;xRS HJ^ rݠeb2oe{ Ǐ*`NrKSDz>4 TcJX^6MYvuTnnXe)PJ 13y̨i^ 9۠zEJ%5xjDYTxԃAԦ0K?L'[a@\UDzs/W)vRkj,].y)PʎB3%do }QSuEB dWk3{pڍ"?Kb}S/+Z rk$lsߔdg=F,J2cQ 'tk`~ef -?]_y H20p_ᾗk~Uذ/3V<hH=pɊ˞*.n5>(cՒː!r }iwOYOo+Yx2 #q&9A?5d*P(soF\Rkt$+#MKs[f2V05`V~f^ZXKE[ui]Me_DJ?P .c}:n@~e Tt+p:f>$NN&ksQ3H/Sț 0:Vm%M)ҙjQ e C 9P2,QE] UPSԑUJqˤ古 %.vMlz#s-?!>k\Ɏ(RZ膫s]*x~C];igLJM ZRCPh S_Nix9w/sGA`@? )^fM\k7Gۺ \4:T#+ޭYҕdt\0g-,JH-Ad%ުl>y[&Ĝdt|Txw=}!vm--0jVX\oZ9E9%!)Stt9H4:u9V^&֮5+NXd8]~6黠ȗ[ [稷xO]ʆ2V[PFOa铲8cֆGt`B_(r/z*V4RWn7M!̫ t.Mf0ii 0{ClV"Hç]uy݀V*N2~y_bʃ WVD}iQKRgtW4OJ{FGPPQ kU^/B.0^>b3Dˈ$Q u =]X?y}戳 %&A%K7aM@TO6 %l,@^!vL%i&zggl!k8r >l:f!#4 o1~"w+cH&%h]%).kd~عt̽hk~t:7seSbe|ba+.èaN93Sdg(swl=$B_2!Ti)Ď6HNNґ*/VrqB=I w@mZovJFI?R<OOHWrM=БT YSdnw|YM|x2؋dn녮 g fX,Zv`?^2+i GLVdǨ<GRw};R)8E-.[]qc+JtL/[襤b5aMIP݊)PD« L'>eƵ%#򞑠&1Ӽ,|v@٠ ew Sm FuIe%* /zQF1(w#[Gb-_KA E @=*蚩MgfxR~b?:FM41YCf)?R{7dGЇ{{w ^URިR /hK:V3UgPW |d=3DxM{4V7iƠlL<t"`t@␕qy-Ch^/ZBm>p BjkJ%[@^7%3ucvl2_kZ=>쨠i@Oj_xsa.o5?Mcz0%jvzc+YT21,6g@"|戊6nB췋Ґ! Q_GF힀N5C%@W}N -5l5G3aerŷw6g Gkyy]ŲŭS,ɝ:^9 %-1Ui]pf> *\Sd1ix |{pkb_YҼ)Eج" b~E?;ϑ:9 DE6AX^#[/¸2[Zl `]a5ohC(Yjcz/ʦWLX|g] QwE9e&@%߲9Yfmm}8$[| CK^.XԍӅ޲$[2fwW{5ӎ0sNj&+=ky٘o-欰θfnWMF?#HQg8 NlO`&i5Gsì.SPwMߦ4?M Bۯԅ2G[{IzH9VRdW5m~/hl^ 3FoCmIDATfjuL)X\ $q"4eN_-2H-WD[]WF Ahf;KP >MsFɣ$c eɺS*> @ 3bc"cqHtR3m9cw`:~g@Iƶ˼>/XrwmWMg'FwᗰeBg; Vvilr9ךXLo]xd{E NDQlǕjZ5l߉E>vdClx)Ej7#ITͻ"Uca 0$5є)6LR,nj(JgLPI9.WMibe؈j;[Pcgf;`n427 ?POҦ]B^* Q|d͏ NK=~xU-R؍1G-F^42<3ؿPP #p"}4Jw덓2W2do^S QܖJq׍=mb:"@0mё#2ʄ4ua `e,AyX%Lg8I{Y(iPyڡuk5䫳3GFe! qtk=&;՚saŅ8?æe eJݤ fOIvq T #Amf1lxj1 9n=XtfܹG{(Qٰ3bfP C9h N 䄟o) Zץ" .bP]H}`JR.ko{< aԷ|0M];.?/[LCT!"W=Ѐ_J;a-]`*'!mtUO=߱%mFA2R& QLNttPg(>1تU^[']}5l}X!.uqݙ!>وN\d-} , b yrIS+$i+~uP][ZFD`bX7 MFZ0a0~PKshtV!^ Xu"gw9, #f. *'B;^ 3 ;-4.^cfK)Q@#e-BUKs^G BhJ833v:Df.!/ i+o"e6y..c-Ha 2өߏTXY _>Ԑqߊ9tÖB3l}p `5lYө;L^`犛Edn=Zˍ57[a&xDuGKkg2J1XL<*6=L1k<ؖV8-{'{ɪFUaOpNi+b7p=a]R7'+%[NҡJW &@Etk/PwRK@HPo |'K(ٹ}}<خELY+2^zʻܦAf?z~{/KϚ7+О9u%.[&Y,N:o 54)q?ݞnY/n>{*Tq-oha)dI!C@҆wijAp(@FE(R{)ҿkwӿ0\!NB1&\+R,|?y12Z*42YDx'~pu3N7)-mQ 3Z_|J:qx@ԖytS+u6 ibM7ѽ(5p$JB/T>Ume"ig|ԀQH(>3/lV_+uXSP\ n#5$sז){O ͶTgn")O)4^x?V-ս8𼱊J/7(|I+'#j7ɼ3i=xF=f;g7:ǺhA1m#NͷG؊AT,wcݩIp(Zlg(f(r - xr<~Sƿ kƫI @=S$* Q4+q@zO^^g5cO#@$, N1=INUh)LQM ״G3?H&fX '?]j?ӄmL%7񒡶"~lչG)7$85e^+'ҰLן/~S0^~&%:o=7vt"$87,V#&QaifugN/rwh[SaU%!@-O(n\r~Oa-CZ%Փ^G5.gCܸ~F_]Z: +&:jO:*aVtX'_isEr ?\>@{ÐS_+I-Գm캣BImgGŔQJ 8B4VNf|WsK94[NPa@ SXd W)4`p;S.g F_JgCO4l! y@(''wZrzճU|ӌ[`ī% J ʋH↯5|^3V4=B޲g[u0 ert;y 5}9 @FIJ$.>=xBmWsV󸮢EOlpJ#ìćӤ87~FS!HpF9t8I84O *kC@7Ǣ\Xӟ@M)sT_?{FZYzȴ3UQ,Tpfe+WV;]lP>6ߒh wH鈁>_屛pR8."#YKq[CW0:J/+ϴݑjv:-캳O\ v 1c*T4)>Lx 3,es(EUQq0%GPyia+'u!+?8ne갏R'c+^ <*4LN+tjZNųmvm.< `:NGxzz;QB}O,VM !T@uyB/_ajcC3QYJJIAGq0JO_ %JP+ z`1P1>~K}kUdʉu&5o=ˠ"ܤyߵ T|%QlFpYtmjs `!MOa|"Q sHZІQ L5XOFn<A+5_TM\~sɻl1TSPd-*n*I)hGrQ`)#B-9c>q-5#uݳyz?'*gI rS`E݆wnA8D|"rmO5-3$1+@ԖԞHDB-aPXX! s{'}r Isv ɩӘnvi]VtB$<9X;r-o55mmptIfhYyk9k.lSuP֐\";zz)R$T g`Nm@Ֆf~6魨 ?K &7x} Y: C"^<\>+u/>vį +~{O ,p^E"l? .g^>~\8_mxRІ^av>t#X"buVm׵ӣw>OEFZu=T='4\JHLQ6.q67š CL̸u!sXk܉?Ӕ7r5W3P (ZMy?!N>܂WĘfoMÇHY̊0NJ (+&h:uӗ&ߓc;QWAJJY]KBH((RZCe<` KnƿI7^'o}IJ?\I=&K/rȃ9[fNE{b#ZqkO-5&@cZ6pX7FW! PJK~ߣlӢA͌x r0={I_?c[d'E.o-cˀCk#̨6gŢ[<K)ͥbիB15=gK~ V~h&wE^$>tAOfлc5!n3i^݉9ھItMV )gƆG${o.6 G+֢hceFk,Nh C-}:}׷)N`=z;8ݟKADP_k{ًݹ*L8ϧ8HS05^vpܽe@2ȞemJ> <8LDen .V2$Ӄ=287fs JlŬnAqNGbrW>KZioE|ld9a#l#^hO쒫sNH~q*Ju (fPSKd5.&$7VP_V\(ҐVyh*9$NE"e ZJi$PC%C#<2 FEoqD Ȫ _ SGcEH{# #G֌*)Qg÷+AUn|B6rszmeZg75k|?Za:lW@4Uv%6>#ji-!{bJˡ! 7 h, ݿo9a$4p&OM&5f_7*'Yڸ9HP?vFLSw$¥;hIO\1>kWzyJvUKTFxZ8bo d.i]t,f/]@FD< $ft=vߧrhu)!Qu(>`x/4hH)١%wvJȵ ?H;#KnRԕũ6Kf-@Fpj97iXn3xTqw?8MɠAþq Kg& 3̺_Ml!O8.u~f˱ hpd%juE@Tj4j@.G8A%o.MO7P,"²P0k^#mY8NԞ]utrC}hh(l`{hFJ1dtrM 8|w=Q 8!쵀r΢`r7kP|*J*rw3q7ET{qgf1J]ihٌDTzQu1Xn;q9zM?y& Rd VR}nSDl")YȀ]u, ^3B~[3}F58!8JɧȹM粑9W}l; N/;\ ߠȷ$2?7sPOG+s#.P1ox*}>st ^AH`_}ӏpqnPβ/pB}$c~01uT[.,\= 5,G?NFb,\7,xxHչHvi55K?FFFn Lw>Qjz=#. "44JxLrk)ǀvc->b5!^$Q(w0 q Xd8dpv1MXJ{IѰH8Em !љH)V5H:. O6>oF5uLr(E~'-;T/ՠ1r]xvw$`pFp#zcv`o763Yڱuyڥpք.cژV&3qsD`^N̉bdsF;[y uO]WWRP'>r3~XbTsT 0(>+tnڴ辌f&ҖS­wg`>ȵDO&=v;c[N"ԑf ޺ۺ A]/nJL_;TEm8!7vdt:ټٱ`5&Dw$K}2AB. /u{׾~-4ޥX`M(/AK^=O4:? zң.qw }W>HV`rnU)1}EN\, BA #v 3hf֞TwAF>C,mqO76iP?Md1': LI;UT!\fYwu!xd~tpj qr fL3:toʌ49F4W6Xݓ`4[G`1Q'a%nO>6-܍7]%Ud09lȤ0jѨl7a%q VB Mϭ7c!#2ئl|g g9K [P LҬX1Wr , WN?1v)[f+T*L_]O@2Jkad[\~e& χ4W3x#4k%4ah$.>$ᴚ:q7k'4ӭlX"Ct%A~)KHEߋ3P%#)M2i?vf8O<6F֥EQҎzZ/{l{f m 䐰! K( .3\%Lh>6OEEJXЏ%fqTk1U)?d \QxΆznX¶ЎviJܵۖ{.΋ 4M$mBu1i1 )B ;V0HR@3k%Hfs‰@YHvmH7O Σ/(鲬`4{Uh>r*)(9z&bxw5{R67b$:cQlDsG6UȔh~^|"Mny ERmV&Xz(`afG!1AۉD=3MzG&t`)!~SƸ& dd|ߘ%#J0 ?cT\rx!q#/lӭE/hu *aSyvdl 7-럊9HSC߽|u%R8-v>^˽pO6W}GÛeK!]wūbreS|oFͼ[l YoZf{+2 W3q$ўCRAm>1Aכ q>G7IoRZoDuYjC2 m}ek}ku9<rÜtn`=C]Z I>ZEMs~v:?G?d?AJIJeT q‰" G1RAi̢>Y|?BU!`iV/?\aSBqY9B/W'J>ڞbP*[1 SVٙ?jXIGض4D&c2 8׏Qd뙑mvp{#ALPT.>[qFD{#[Y56Gyw MyOw8Q_%S3F5D gc$&nVM{'7#Şd:oj{91yN2up{/eNh\=5QVvMFkǤo!;,^V6j#D{x%=^!:}U)#79!W6L.EI_zz\v wqɕfmk͘O.s,oW㸪lm #ydb&DtPFĮRPT94ZFD(`xdmz_ŮeG_c}φv5Ĺk="}ݸ s4=v0!"nʁKT_ǏH7;Q5ToGuA@yݳ& $f9`2 YFlZrey"ZKQbX_WA8F\>ڒYT0UbxC)G&aҕ/.(>D2 {p@%%]ĔcTy,v'܌Qe9]6vg\M}KM ۔q9XV[w:sp]g)֊4^wg{|t*e"3僤Ԣ2[d /NU|?J n|?*yƓDwˋV]c][YN{6D/׿ѶKCύSlccg7`JJޞYl@E:SS VyPGhp6s.p ¾;Esa)`Etֆ=|9 XǶkCG-tGS@dwC/Aw5,́c29š"μ@Kt񽒦VhqEYnNgKUPl 䈞J.k.1?&MY\͵֋]6'prK SI$CΨ2 ,] RjV>G^,)WM?k[bYs]4 雱w˲>](鷚Ǩ)2򛾥ZUMedK( W%'T-Z|ai?x񓡓?w"{ Cj EE^u98 -^~{ zPWqSJOV;ء 8S14p؝z!CP//JTL?= _y,MfDyw#%2P/_eR<ՒR8ۤ^Yҷ"t~| 玲TUw5!:s3|kkIV?]d-A HE%z,w_=Qo5|!,nk?M&+Yq5!=?a [gZXAOϦ%+W26y4gB[AI ;CPXPk4uL EtI8_4e֋$=-}18I7l tu)dz}d~2anJjUZʭ/B@8LP9B>^!5Y_{IAK,Iy$<@A!:;uky;*y}"4#~$faI_ȨyIxԞL{;PxiƩ]쏳9NJѐp瑝fkfl/VOx͌7GP<N$iյ[wy*Ƥ0E .(Q0IZι}rA3 !rOָ N W⸮Re Lu GU8nTvU37ONU@[gfBw;i.I} RkQ{ztMD+hTHdj'M4 9hӠdafys(ըTDW"%>PgMqX@_ t7]֗yMdN;e0@ǛSDVA 8A | aY 3nfBW0&R WU%Z:Vy*Ұ̹v lv~L80 @s2m<9I2+GGG is Sfus^~mC+y > &^@`} 1]|Ax0%IȪB9l[X9!H&%{WٟOV4e:UV_@*tͼP1白<CW˸gmE+EdР#u/\Y.@hmĂ#R mȳ^եAk=3HyKl395~\ߨ6ct[drV](`)6H~ϛBR"w-r>-aH_$)clh\B" kjxU дl. p~kGg.f1LB6 >7\sݚҁ  1 G[Rfrt ~i&YsGMŷV&!cq+GlmOQ漎O#}p?)0{˰]ى~hڜ=\穳KN IM<6?ؗlj!Ꮲl)͗pL&o8d 25L]dzak%@Hw56q![f"_i 8,H%PY& U)v&@OK \:GӣI5)CZtBË bS]R&bS;h_b+][u}?(kJ`l%p٣?fGŪרC1ze1LxL)ٛknH]F˭ME!^#Or?E> pM8z/Y1z8ZFFEw!ŝŲexʂ )O/?Ta.9ZU אt+1].`8%-^t"Iެ6F8rͪ2Z, JY̭0δlerm~^U|Hqn^[UE]G{Xճ[+dtZ\ 4\j#A@;/ lHGuƭQ2㛥K{-@gX]ท"rO'߅v:-G,`?n[hl`Zc$9jJ]Hhz&<$b7%F(1V9Nx*i\ϝ${ EwBfN說WCL֯T/^2Z.O& Mujj\%W/ 3 r&# Z2`L+'^H'VՖ~\.`.29(OdҎ h$L_07Y,^>Sͪ-wmc!("Alqؤ$1>Zȣfۜ,Z. ĆUKF1 Sc6zx {&0NV؇q[` 5ߦ|(h)pPЊah0쐍eE,ĐE4;Ir'n6%FzyD~gMecWP'iqㆭ7^2TG >2p^“8c* 3+S ^:{a/o,}sÒdt]f U 跊[:9S /txQT -1FT[B/>fP S1CǡVuKv`6Fkxa^)?keF2G # ~tfዕ: B9[)25ynk |#g' &;weL#hdW>_ϼqc%wmm(9u-ewZzɑH ]6\F>D`{ B*{OݣKYK/`;ߖ,j,((byFd67{hiAbŢ i]2W+<=efSG?mΐ}3pV-!PM;>6s2HY臌B95^,ip`(`?@{j`Hhpv PLZ+$z.٨G[_(7V_PfnmBςQSt:?X{\PLdBiSH.Ф䡄J9wOGUb_0ӳiPQ Շ8W\E+Ak9E"΍svS]an{/\\~FDlA{ 9%{S`W $~1yBGH:F>5:Jߨc>j"۝5L&X50GBUIf9 17 >Noqp 0"43%W=ɗgn dr"$Sz+g;˜<Í7WSB1saDLhg$G&י[՘7cxGq\<:WrQmD VH+m~3<1ODYTcyUӖyp0؁%Ϣ;pum态f'ɤRN~VB=}fA[(8=Ꞝ[zB=na( Y?[,>.?STi>[y?lo~qw74YL~bF%SrOPS‹7Pi,(II2IsD"JZ0|_Nnivׄ6 #h shG16(簌5MP㨡cñg=D'YmUקpHQ<ڍyPC{"C3]xˍe3+rnhVߺZݘ5< d\[z-Iv ĬeϚ f IA0bTtKeagjuT.R](~̾=O_ֆwd˖b,6&^+z!ӿ-c9umFZ8f@uʜ-n԰$IVn4vtCrBM֢/חZ 2'.}DJck$:6:~w Mha+# XcU]qQn{|ZB1{b)s -1nM[`~m *E)t;ZlJI9<3/_DtDW9eOu66":_C2 7]vU` TcSkۋ *&n6+_DKL}ٵds5o O r;l "oB[t(XN&m)*&4OBT[TF9j(Z}ObjjI#L7FTTŰ[:c1l Vf#S'YP@a!1Ϡ}.aWÂ]u(V=[|E,TV4Z^'g(v@-8gm8++p|1X}R:*,>*|/> RHTR[~#(^GrO5m`}V5%Đ>gT9KJc9qS"pR[EQ2NۃT-:&WeZ++Д#U*km˵(98h;#c!r@*xts/.ykk96nўlMqIX4+ҹXKa4 W=UFnP%l /WDp5YSW;Z4c,U,]Q`nWjImB)-(đ7xJ''x͗;l r%11&6"zx0VpW;/=WeQRlwDbIW 3LiԺ2 :McM }%Bw؜kؒ)@I_)B8\ ~i ֎69yX1+ \$jV.DS~x;onygT3H!h "P|.ѦI0rm@P\~رl0/_lB`hSpnɕh"V-0}V_/&C]: Xbn6T͌bE7cp#3)R\LJB ,NQa^[7MC=^g^8Sv h@YY;2Zl3(ۻ%MpDI "AfII6:5L 0zb5 *r_S/'<p$d#+q5&GV} 3Yc<BBy34W~uKo\nO1ܕmqxIRUmiowD9.xBIka@j/V~cUGz\'< ~o3OTuf4/=}TE7W ~2MkXLԾKdJZ4 ዮq6f>F ۶ȩa44 4@*d_ {sVZjr鷐 ز.ZB :*͎h?ga.cַjWʆU9GxW.yD{H[{dtK%nFV~IvekaLHVp<ڋ=Xcbĕ k阷lL2?? .0H3gU=lm)BѺkS229\Pe]@bdF y&f SQ:Be+E_egz׭괛uR8br 0^ ўjT1X{FABD w5mV@;ohPD? 0r`e:wlmxˬ 8+]˙TLᰥ C+ds 3!tPq!YB~?+xr:^U_J.Bݨl!Շ*>p,aB6ݲ"-'FhOli1 >m&̄>Xi;s ʳHXT Mޣ4=ϖ1Fj;U蛮}QJ+̯ g*d;iيNQ sKSs] [H &$E`Fq~SW=pۡH|{Pw'Yc6b0gp>=Kr1"P'P`Tۭڐ H}_F..;G*rCh@ؗzP,2&3dpEL_9_:r^fΦݭ<[8X4)/ 9]mXo/hngy7IJ/< +}1UzW̗m uQPsq.g e '{ \$h;q A l+ZI}]E˸A7k&"M!βž .ӵFЂ52b&ܸ!A7:%?y@iyQڛl|jaRH z&ZMsw'!~lP"x>J2IGz>ⴞ g!$|ňeNup_ok5:mxMnĵNr#:=WzL,K#;%:+LdIv2lqXδW[q1Oz(6p3~hVP |Kxo>:ƱݤMi cJ0YX،0jI6hK XU4ȈgfrOB0K/Tk儌©UGs%d&AQ2!zDDĨcϰE?jeY~G|T:p͵v6zZ17vxe6RV80f4zhKa/s]0E% lAN6-Q:kiR0݆RҥM=ǜ:" ФxWNkwg-g oa_b{%$>fR@ƝOj);Y^)Ķ'` =r7h`ķ=姙8̟p%p-lJ}6-ZUΎCc☰͙]psґT^셢~\dK]/H%>P_] R$#˭gx?{ aiU֦7=|rȨiZ{7eUPM$+ԍfLnLWD[76紱X͔1E.:ЮUE_$>0z~[ 6j!DrA ˎ4uBȑ`M&ȱӚ?\] ٳ2˻>za_~;0-xjSlp6<[ ]~|cPzJKB)dE4k3*CQE_ַ9Jy?vԓKJ(EůC^+ ;:htR<"ho|*M91G7$7c0~%)VZB~8p#DLL HFY5F!15،JSg]U"]8y\wb ǷatYܘf"IW x M$"w 6HTq%í+]kNw[艛YKi37]ĉ}{;"JNwLq r4DE^?[2q-!f$k 9`UBti0}'a`blΧH$tD`kѰ!j8!mM7UIR(uuOt:zcPs8Ď;XKҵAI_>H8nq@}%jHFlv@d37; $ ͦt*DqשE1.MiˣT7#g]`W(\8Ҹ| {|УV3J@pcUoFю˒>L\l.^bM7q; aH%(ۍe\.um{ɏO~т͠hFXSxyϘ3Thmrc.1v4,,ha$sSCێD2C__~s4)yx]`-{,%Ij <:ECSCBR#0{uYޔs717q"wÁht1 eVޚ(E~''P"XyE+P(w<2H'tw1m9oiR[oÕ1\20zf.PGL. FiWg<*-~Yg^>P 5U^yf}9"Gi 8Q~iA_E;̗C ً+ \mz!"=*k.L *pĦA+EC0px<^ttH/|#ۇ mVQ>^rwո:ÝMm:U7V8sMXS2^ln4cgAFKo+7T,Otb3̧ڒ 7sMMR ns$U7/<֭ _#Ly“ \{ /_i`c!+*Oڕh~ܷ/&scSuW1(A_ڦl*ȵ"z87@Zv2E"!gX T>[9֓ XF:I+ ӛe7h|4<4Yjӿ$aWqf8&YΧEqE+@[K 5}i?6g8쯛Up_ Xj. % ̌iU:lvTC@Q} l\#?^L2'R5'^4&yaw* 6CB͐;%]1zIPb[9 [r.oVB"e}X[[3y>2pe(u5gܭΞ`[ʯjZĦgGeşHQ<)N`4&:- Jl#ܘl&c\嘪(}x+a%{16 (x%Ny3Ytc")7?5 zuLm@?O6%09&ÁE4؏\vj`k? YVSyЋ?+T4qY-W'ac-j3A/'Olbo&Ri+ .eAoKƶbCqذv~dZM];hdznA2Qϛ۫́V8J)%dڹ~vobjU_K$NҾ1~fc*a=XTYN6J' +BI1=bxj@.g-'>vdf14p7Uc2)>z&4,PZTY<@" eg*|n9=5_ Ć~$+GwXTP:>24,-D0"3GNLQ2e;aPOܲaqs!.tٷ]Nb3k!Z%*g˕,0%![Q(#+ӪUc"y]Ȅb `Y7g*Ӟ&srI.iYcJuQ:rD K\ -x v<-F0Ptl7p|8j[;bzl,ֿvE=#a3dՁVJ*">MhjNfg onц: y{絯}w-8NI3L/s-nfr9|߁Np+| Tu኿?[3:Z2M=ESz1Ăӝīn|hTK $xX.๨iYukgˁN/^ޥa-|Ȫ= l,EUؤ7>0>JS ,), Z]O fI9N-:KƤ3kU ~$J|,eJ e-' Wt=-JÎY&`;y%+d='pJi6 GjUkGhw+sWfm,Ӣ#9\j^nֿ4M+ZB-gYc24Np/ٖNݐ*BYB og G?y' ̞u緥6TcUSoV`;.T`:|3 2 4{L~P~nXM憚\%@Ѿ ieziZv!-^@B&SoxԄlPqpnvAX4wTTq$pώ!퓜Y-<)u4!eg%://W^ /O;kIU8R -biƎ}8nXxTAOaEH{o'I!f@^2R+ Egʳ1Mm|}~S!Rj>qPQŇ:!|^ѫ&3IԱ^Ao7sU"S7I OGqb+OgdO3SzàmA*ɂVCx@u݌^U8)  |X s[/Y0ՃƯ*Jc0R#h_ 0𥰩#Gܚ_wA7P H˺imw#ⅻOyfeS? R =GN/ұ ۉ-]F}lMS5_p4.^dH{!/+DĦcB4l\]]%!JxSHvp@J%4TQJupR^w*"etFr0 &"p_&͍%Mq2V<@q@S%q-~|ϸ*`P~37X`s_e\&Z}GO gJ"Vp;~6̽*n 1 بS_\v3*赋 ~%Xf= +\G8l9޳^T(DڀF'U{<$ꤟ@а4hGEb1O\K^|2:kHY?3;[ @"mM'oc^(|^v'4_!BXeh`עD'VcO7|OI-;&ӂjbYtʟe/= Qi|Pmz$ ;gPe5c!Q_V]8B$&ڐ*CQ%UMBbAΨbDmğn}X, )HV!MC9тбMhFE‘,ыd Ь78KzX{h^x~*7%9(L$Y z'A3/uKQc BjĂn${ ڏ4xJE N\FV9 {os( זC`8fD[~%ݘ5JIDAT/&jّ0`E)$1{Wl!I1*WA 68uufߩ.efI$JG=:t9C3@:,SRG i-85~N(BV=Eo+*= @ u 2A҅;'΀>@`hfp02cYn/=B9$WLRFK< Y}Aٟ뼏\ai== \Wٶ['@TRHZ96y}C8Lj5OOkx5yӍTʐ@f#pX+9hwnS"J"GWc,U:Hß1b Q;ti@u`c+7#Wq`>F+E섐9,CO\奴 &9L[K! ̬CCvvB?&*RKR17ϐ‍YV@nު^1FltS@]S:P;'Vr]:|h!˙$jļ,ByAţx'ӳ 8o'%M:ά?$J& ;3/EnLWbB Hu"`&*+\|7 dHy{`(R\NH!cٖb3U%1ؾ^$RD dtS)3ptֱK]0 ˜ÌYFB@ ܙPRiK%Rh)~["~΢Tmf?r<Jz*M~4 #h\j/PBp5]_A-)]h㤝ΊqR.&_Ʋ ,jurep#Us?(;[dUEbg\tyCvϢHۏZ%=\Nmmd/h̟eDb}V~Tq sY$my9XdSz(s"l K N6Ypq0Ro)uygs~l6wblW Qh+&õ Pűl(r2=\ON"o"$;ŋƾn"-q(j&aZG EG9g^ AoL|r Ʃ.u7x|oqܳJoј9X;[u[cbiuN! q(c5k{20=Ori':Uk.Y[A .yS3}` /Ac7t!"r#!<[~hsE@au5؈7G#Q+E-S 8'" pVpP ΅D~ Ɲ6}C]`y';Mn'iT%vvp ۭj5+̛gp-tF7"Q~%Bhdo"z_2gzmo [V=,V' dtC@u d69JA]DZx|@Hצ!1ZDk%yl[g6̾JfW47ET-U`ˇdwIX߆iͥL,]BF HH#l d(1(=Xz-p$ #S``ebkqRm!{Kutc_ )-oPۭjש9=%It}D 8MC=yXp{g~;DWQ<w 2AEoK̏ɧ"N&~$Zl߼ܝ+FY\N:SQ\rɘBݐ'13|K>u^bwmy(; Dڐz=,}GO7Vư@* M.`< 1>W'8  śaHƅ+Ni8pʨX⬃5qM8fH,K _hr7V> UIc3Q.xY;H/.KA\b~Ož"Dӟr梈OΨD.5gܴw 6w{ΔœIOPz-K5+co}~Snq(5@PhxI 5ٿrȘ@ Mq9 c;C<#v3\Ŵ66MM$M?S NXy>7c䊦.j\TR6!ê!۸)0o k iHR%`?wqϗ΢#ޤJ͠b¤.Mpa6Fװ h0^J4cK+]uB5ؑ(wQPcG4D3*pqi3mώ]&|}X"푾H8V`u++o0~6ͻ>_p*HDVQ,Xѣׁѕ!U})p&BoMZ[_vgJ$8.Rt,P[2H'gy$6TA"\m[` ɼQ9^^ޙEYbe/S2z)4xRȫ\jk⊇=bej[9-=nĉ@+4۽ f_n@ YcYZd3y\*È&Yo^oZ/Vk^hkMIok${]BƥV)3S(d!YVY->5RDU}* ;a7}gpZ)+ 0;x? }н(a d}S H2`շxuYA-Z`Y9yL*;U9r) ɎwuE ,QIʺ1lLr&Yw!ڠ|~W\$*0S$nAr|.76ʀAJn7a USKÇM\+WT0G;h Fj)If5Uz0sG< !Z7F0D\*.'4FV/9skKڠRG5m9Wf2nbP񩔀L򞈓0 _ɵZlP1%nFz  ~nYrvjX>Վ{6ԾmSU0 [e5A˻sߎNלφ #Y,%ޮgwMW|<{zhorC:pg.Vj\AϿLewPݞv[ 0m!4S65ҝ*,I"uȳĘOF+&T*wM@N0Me2UY@&,jG/nȸŷPw  &P"j9r LϔB ֞~-5D|D2@ާ*ZfĈ@usbpCWR`x}q&s")`P?uFY\<۟p mZ~Pwn>vd´C``?|Cс:`JX}J%*X#VmNQ|<@Se ! wDӣf@CֳϭUyjUz)];W3(p# L񖴙?ȳGA^}YcZOf3~a+&4`\O1K*@&y1պ2ЫtJ֪HM(ȼ/50Z!W? BVGl%&~&\^1e綉\ҿLLM]l!c?&RCҿ\oh*][BbtȨ4mrj˂9/ke(@AU{ UDɟFԨ:\ug뚶<@)2.2/lM+d-m2::9n{kDJX᭸n"jHQ~tn T\HQ`ݧ6ʲXQ0EVߋcP):XO` KzuJLZ+B=_Զ#@#%F=ws%xk͕sv3WeSvNR%k/ !Lzx͋R; Lvqs0O;_.D 'oI4o_SKe&2E(OE<(}0&;Q;3OxjHᰃ#5B1 qFtpњ]p\+xTp%~&N`/4^!{yYQEUъ 6^~}}~aZ>7ѻ)3R3fy0rSUF@nעFH'R 9y!ꗙ8[4/9-_͕]݆S-TX 0kk7=u2G[xwiYцE+ֈ*/@. V;J*hz LAD!l3#qSJ٢Q^XZF6WHzM'#H =*~^x;$#ݫi'OVua|}m%y4Cp1lqqKʭA=$SzB_@q7$ܸP`V'4  JZ֋=Ӟ'5ᥝQ!Ӹl ỊzqiJZo!\m3RPZ$Q ̒Vڭ4;wۢȢeEɼuj^BhhYK&L`ѕ&K:܋o/84ntkMlc}4L8# =~# m3u" 97th B}Kٖ2s\wzl6g{>(u'Gy >6oO#j1w\4xgIIT8⛐!Z9_/k4~Bʇr!tS #]_L]M#9a{Ll>N]]?#?hyt ɔv44f\CYy0ݱ<}'H8/I M O`R]Upg&*.}HCkϸ!+mL=ǡcGO(m_?X?0BBoD yNup=UMS]Fh*;mL*lp^*#n C0]62ߤOGL*^1ÿ́kl֡\|&GĈ=Hb.[{#(k7Mh~^Xox||I'ڔۣ&{Y(ɥG.'ꖮ4 &wر6nY K,ݞ+ruk_?kMmql=ԙ/n`Ŷ@]R RU?-GDHyJbh߿lG߽Ͼyiu(RO},PBqH=,׻ =Ow4*OO$YDA:ɾ|6.~,6q nj~͌u }y\nyJy$JcbF2(~W3ЌT6jn-|Bt˴촻'Yo7zl)^<S_%e/9қ2Fۘg,1#Y(]5VәA"P<޽â"=rP`7R]D{%0;Yғ5^aߵ E`眸'#m9,keb#i >>=CutHߛ1*>> mON-|iq+M ٢%<-JI12?|?IprTct;KwwbwZ+~\]-#Nmjoooi;+X;Gq}&??luMO, _yuV{Ps 0q1$jC+~:~5nsϺLi5W5cji\>Eti@v3a0fg PU %`9KP]; M'OØQ^FUC oW_eɧk ld:0-ق]y+YNݲE ,/)5Ѣ3TYBUg2JD H.X?ѼX mDv0ȰZZuozfᚦ -9]Nl*& e\[bQ~sx+аMWӶPa*R—ETkt,KCU-.ا>Ǖ{9)|eᗃ T! 9Nf+zEПy~Kr1ra8~TPMcB|U ?L}2>ulCO3b.]N+\p^o2()viN:u纁 2A)ϑa}Ȏ"( Fo<nV997`i8\"_G"C6>ҲWLv5:c{Eu5X-DُQzooO͐Ju-\h?!vQ^X㵛sݝ =3dS L2^y*}^}U>y@ؚ6ύO]XD|C#Q\/u0̸65 þJAeeUNQ ' _͖DWN dg'!>QXZ60|XTVS }GW[+aYຐ{럹:LCZ ~ZX\=!e$^K`ӀSiU|"7ſw˶#,@bo`p+,Ѣ*(3\ig84X\`u"-3G2Cq O$N{_`ycAOQ͂D~M*kD'2ъ!Fd R\WPe8dbhbz3R?2#o9]>sh} -%Vi%F'_] lgbݼFͭ@{VZKG5!%ߕ}:PTNf)n2%$T3nRuLj9F!`3J',IOjM^c;ֿ-aWLY\  [*L&9C;SB0gqFC`(g>8*HL:N5EP"Iz]XX' ʖz_av 2xٻ&r~P/@ur E9 鴈qd"1Q2bseU)Ǧ`1]jAo'A`{t%PQZX]SOקO?'1޸ycP Qpc #30p[<]7Lo礩D֏C%0?pHp=q|T2!Q*v'.+adQKĬ3ӴW=+@{[8YCr fʛXL8kOGJ`XApb-4|vރxQɬaMfoSڟ]Is=l[_i.D!dM#m^΂QU2v;!WRY-LoW$ Z e/U(uw Uh`FǾǎ\&pU}Qa4y<|Gh &39-91Ey vJy_4owcơAKQ;Z(A:|!}qdlD\kB4".P$zkwao[&nMn*݁mƐ Mvxֿ0D&ܓjo6E;1b}lm]!#V*RC%b#h AH;FH(RKm&>Yǫwz!h$2*y~D4WQy2{y$N !I3yb5i+@}lƖk@g}P-ܚ%5譳Ҥ$z'#uU}6O¾:4#"@U)2s3߂#,m/0l/ v4DÎ.j{m sZy=^=l54,% b|c!oܬ̀n&l=`M@9-5ɮ13 @7uڙ݂s_`O67|vUR?Xo4g^:UbXGO ݩ`]nx؇sضMAz_NpZӋ,ӲBݥ;d^)Lх{cm%nتbr`vϨ #gtϐm1F;.VՕ_iY`IEx+Vf]&7 q6DzȎ46:y@Uj weLl9S~ Ǻzk~ ~@p;!HžMoI튙"9zbf71,̑{A]M!=-BssaY ux׽-CwO2N1Գ\RVf7\V-+ui6 MDv?-Yɟ#ce\E:t?GĀ;y vSmdvf%$e{޾ͦ BpW_s' H5*$%bAk-pR} ?)<8tMvhKՀ~g3lpz݀;r4)P"Ђ$hkdq^P}Hw㖘ՠ GiG}Ep6-O-KmXZsTvzJiҾ 7φ.ҀnV0KM<n|pѩS\I6:Nj6ʌI mLNfy\1)#E=I\U8Kޢ @ڙWcL+JzClM*7L>T?;rĞ_g_͈ϓb,5*jJVǎ9L*}[woƻTFr=J,['n֑s] C:b{E!̶aOt63|K?Zc1L~^.G~CmNP{}np_`99dx$be=cuWZ8OAmҁ5js|^ԚWL6[Ϋ*)?pYJ$0MO{]CMMw<|G.~ bj{KHv/[$CU w</bS2]ݕY1*IQ&{!oe67i~(. KW@ |] B${*hO6P(VC;(ͪ;yNl HMKFՈ mS{S؀?+YI;:a~,i~e?-SCE0 !G^OyeuĦ8Pq*3+?{NwђXyx@796u\iRnHYʳ[ TۭfFfuR}stU<m| RQ*G࿛ĉ'9%]B-6l>K[EXb@iNEG6߂Q#Wt?b|Poo͖ WnjKҳ<W6:E~ ‹ͫ{\/WC@þVM&t%L}{et[ d=r Q&& E -"] vC^8 ^C\/O~cXgܭlCAWh UȸɡRͱ]*m khVmD{f>(}u } x7}|&$-HgL Qp88k7s4qPJwh ]qKox&-C4;U"QYnpmxu9r?xdŎ>ij _= @ :8<`}+Ju5yl mE>N96m*-%MXkV,ou[JHz9pɃ_ ZߨƄ1|??w am+abNRlzxUw'El!ptC`/h-Pהhߧl+ "~Nou L$?iObJvB?AckHAwaq[p{4!ytHA5兼7OQ/x1>ڋ,s{O.:¬xnK?+Y+R٧4!՚ 飻I:`>濸j/BhᐎKl@b_s%[eU "mnj3)1#{yxUzżM\m(2ovp#94g5s&,ǠGHZDt2S{NGs;h[Cc+=v+4o1Y^^'z䘣^IC-lfSjOӴ*$ pj;TtIJ*L]?JkM6]kUA0Ē(߷8c 7H$,dJh|{$%Jm >ʯoCJВiZ9S-#5]}3.: >- 5!!oԂp{ݑYE@05o"wE¦N=G9vuqzo13/̸G1DH<T &IS">PyęQ;zm|ws3D:7i/E& 4jJ hB޸ QQSː#-< 2\ K$ `'"Ug ٝAtauaHS$LP a #chR;iQx:$oC1q#^bYY|==0gEV.NIû$~( PJGìfk{j7 6'u&:)Cn~S-em|+ Kg␑3pQAn˽9|pAȄJ~IĒP';:f .jsyЊ9qԫ,>iApq$-+K~*Tcoc'M5Q9B,XT&vlSM_hpB`5*8䑇Dy2PgU] tE7e5줞@9k pZBk.H;R))xJgt ~dm.Me yj&ՓֻEjdt;Wm=]Xiw!(eC,2y3Z;?GiaS̨ T0LC^Vv _B&a~w5.GrӐJA#+eon]6T|2R~SQT Zv{潩K'̩JOͿ<:csR<- 2 Ա="j9.Jq%CǣkwsXAW#cW^_ kH9$P=8"K: CLS;|-lp~KY* H6,rU<"V!PPo p%:hfFPf,%%QbyWLA@Ts;}~M0v Gp!u ,1d_QMV(J2(=UR.kQ^,%W[$e?W|HM<~lMELl F`b{ߣEM}R9K1Q$^SЕ h~D:]Dj[>Lh樥_i$ .6%t]0 @-X CSadIwD:8ny,?Iz^^pMewv{؛h?B- # ·'kd*eQm] (P8.;!J)v1 GRo^8w)r+ԴS_Rލ?A,Y_7L`j 7-E٭%qT>Wviܘ'Q_B.0~<~Ԫr԰WQ]xK xuN> =gUţ5v&잚TFӹLʒM]ܸ*=~C1Qv[ZP_zTמS)H=Է;E5f 7|vG??;s24Y-^,p=Qf03J_8 1:?% a,ɓ>14zNOťdaj8lPwhy5lgSQcSN pބUg+%%5N1A'=g!\E.{BIDLpQ^xu: kRz$ʅv(\Rւּ6)Ge^L'w6]{q/.sWgEۖ=mňvI\wJ/9RӻWݻ{TؤĭAC#@ΛM4F0];~@Al~Uo2iHSg{&55.t,2q/~Af{uc^ppj(Zl}ETi(q@Jp4'phM>8-ŎL˱vlٟ28w1k,dׂFF]E6Axy00:nqOO[)kc:L,z_(c:ћ>v9̇CMi]O?RCN;Yy| `:*MއM~s[>lODSi/ŊXdc/SnwrY;XQcyEWU5e^o@Ai_jO:}T{-Lvy,H K-gsXP oKT(1BK|Ӫ" o\cW=v4Ty-l. ~wx5 ]R..)6TGFHDك-&y@EYO ݄tYN SJn{$WvHHnjqTIn07GN/64wp?Gۀ5o.>%7q-xꤞ]1p> qZ8T샕G?S8h?8zƹq|Qi‹{@vP\OɜuPh9iN"䬑ӏ0՛(HJ@'dEýv.T(}{3b2X*\|.ߖ'SXo 8EdW5mm8v0--+>|Ü,nbb\G蜟32\njE 7=9m!_ǢTԉT{)U&ac/yeIgt_T+]"ؼ28k!& `].cGs\95P"z"]L;׺z0(4"+5_I:DG1͜J%\%JDlI($?(dߦMVűJ5GoM"iN Rg\j tkBM4+ #,n9s8a4վbClj>{``UjPCCM-^K0:)&8Wӎᐟ)<F<%7̎#2L&(©*(xprLL \8Õp(ό?ipڍM?yy(}Q3 ʰ:rλĦӯ'{̔I6<ġ6vehRiH^(>&+_4 !ށ+7nG /4'|ǰ6<֓ъOrS)#g{꒶IJœ<(*t|KD)%Ӿ;[;Z'ۤ2KNǵb"jP':JqŖJ'zE>(_ɦ¾;uF(KVuoHZkrbghájvay9D:ۨ*6րKc5*<^TW1FBfaZ$788S@t~o`nߴ E H[{rSsGռ5 UАUept,)|En$Pot6]/ h i6sG[2׸)݉(WKV ZݰUy_noBz.Q`3J@ 2dwc1ŒZ bV5Or&b^*6ܦ2XJ љQf7lX[fǰ!{ѓ  as7xiTLS8|c%rAY>q̢e;W[]h9J襤Ȍ[qņB_n)҂@M7a~Ϊ *Ԥn,f5ȨB.̊̐L #N1&^pT9tQ=͖=%O .; v E!7P=KnQ#VT&]VY.}ۏaX@5U5}ch4Ӎ8O5QZ;D]\i;%:Fъ/B[ہ)-Yܓ%70&&Ab/m`HBB'k}s؀';2 Vܣmkr5 ItjY]CΕ/; У8}; H]0+pZ"`TQ;_d4T}1GUԣKjdh$yx.&,T}cXbI58l4HR\9TvW/[8A}i+Lے>\7ۿ!OGmO_.;!δmFݰx9x;bArΒI@~v\mwL@Rɥv.aH)JI_ e}hBUq [3薅c)> q̬ 'W.{7 ,Vl 9Eΰ!_fb/Z41klGz3|&F(/+ԗRlsI ȍi x(=9IgkϼJG =.mJo׾wdF鉚=8Й2`,ӕEzTo42M:c`Y=`D*\೎aURN89z03䛥 ʢbWx;y:#sj#7p)9H@S &.R>qE Kt0J1tM3:q6/b?mX_L׭H%jg'.YV%nh857xQ=X[W;hw#\ 9g:` -bݘml ?(À=J8'M_Ɉy!VW- a0vܚTNc%> 4vgCXymV jXuS2/cZi [$Gx%!RslSł. 'u_Ƿ;qbXfl,eV$?.T ibjO6ԙ4e^/S,}*eU=:靈F2E}i6s:7K"{cګ:př6p !dJeT7q%C!ig$ #%¤n|n0R9j'Sv% B! Cl9ɣ͢Sl"@B)ܩۍ\*LPF0 $C3M9Vd#6k 2e(vV ٙ= đ6@tL7T\.uǯ^5ԍ*A?JGЉ`g%bVa_kWͿp.|d݄m ܣM/〛!sa{ȣuK&ɦNrݩl&p߇%꥚u)0&M:{ͷlTp޼18Aΐ+v˄/(ЊӆD3&ҵpMbf@zuU 9;97MQ|UTӊtxHϪ {?5K ޕoORc=ث]U0XO|9u 9C٧!98^itkLItvuQ4%PYm08X(?tHcl:Ʈ<Z XlNF^ F^UzaihT(ڋM(b;GYI+7Pko(&qS24/JeN/aj"CHxӉCj\H|~EVnS6*ڐj+ULpj"@:I}BM;8-CC+> v%bXe N[ ey`OOʝ: B ezhtRU'e)+ \jXSǎʕgSw,Di|M3&e}Ҷ#BTŏdsȋ**t 3\Z8Q 07<7=]voC,oߓ+.Asq!egW晭0LPyoA1o10A*Sgf~∾ I|AGnZMWញυ*6~($kVL3!7KOy؂+_'ȓ૦e-LoG^ tV9Ld#IlnI8`Re $2- op<8Srͥq3۲734s>PF#,d`qXGA/wH5%^Q1?N["`u4z~;t~>S5vX҉sR0 I4 }ĔO`·ckWٚy ?'j'f3.gPHX|'Nc7L2{"ɭ6l 9Z/#7/g)BfK?QD=Y|޷ywľ#R#L[:y[x\ ߪ<26]N)H]/0O=ŃɷWYʟn@Uɟ[#6.hY{}^*E$y063  G?j7f3:$Ѐ֌xI6 `]Je݌}fxAzOeXmDjm|^}!]6w3"rlx Qj*Z}S:9 pފ{1uT9~v:`YNͼ* TTM B$D !c sfUJjaR`Tv&M a%,tz]wQY$/TFȿo"D>mJ=VVMhkͲxBѴn:k:q: vHf_A玢oQ|cՈ+3/^Z4n%NP|駌(4-ݥ=7#^+B*x/~ 婣~/[ySKEV©aQH~, 2L rCq7y)ZTCZueskVHxp a=SQ 2E]Ui,p}x6Y|] :fgs !, {h̒ ULu%>TNNhV7>u \u95NR\7J-X5m_3{l:̽ Q7 L3@*T}ECB48ǂJ]y R"9[ɴ2,.0plpr(^ xߚzetjjl7:4L%Gy ;ʴd6B֋m-Xlyx_Qƙox^ˢN-6 3WɽD0Wz4Ƙ ӅÂi-}h^CGhJl!ZuD_r^? .,=Fk Y (Ny/3=SCcO~wLV947WKkT2Ri5WДOO/^(Y(x'bBBԪ hGZED BՕDE+* ]ɚI x%LbiQegpܧSS@r,d25K{AžT<&OЪV5-P%%vLˊl>A;@cd7&^]Ew8̈́Rd1S15:iPl_w $%C^<d,׀DJߢm::(3Đ&{ ^OIR 16OSLN" ÇcZ9?Ljclj%Z4RtR@&- Uzzbݳ|1"bUHh=[}3ۨ:a5ULq؇g-%$] BM+Deq˯ϥ3q˷RݬHYX5mg5qܕuVY|Ԕ:j`hcM@?v<W~Mn|Q_XX/b iKoF !&q!gVtR=bt{X KfnCJi"]s2r` g1*:_tXWA= ,"*+U=Rŭ:h+Y'ABJ%o! ~_բrc>l+uEx:a4 $GXU"iFtf3KIzr2- 1_`[5C;1*rS 7Cu?F!89 Uփ= 1-|.0ۃp.ر/Ex'6]leWRhWIwih|L~׊ 89 AHeJ%%6_,֧ML${`47-sf3#ݺHd1M4@1Ȳ2q<>~18)iXu?qًFB{*95p{T4}2̷.љb;őj4FI|FBGE&oiG#-wg>s^ -LɹeO'V DfLTу pHMWa4h!MKX]w3C!Ae9{ ]Li3G|WFPv/4beXүӝ" ~hǡT`5 Z=^V| +ZsOp01:')f ߣ ״zCx^Ϯ /ɨwMw IZH[@|t!ğ`:*&k;l JU-!+/C =4WvJ@4-. u["Ո*c3o!y'&i]"Ca}K0 72"oyLuǠx.$V(eqĖ;v_j`|%T]lB;c;;SU ̐akq pϤ<9 f=~GH+K?Df7TU!$?N5 F^cDPkTs) U򣡽(3/MO-?#|j@Uڊ|眧 6/L aU j3EbEKR8-ͻo8Pa)AkoX( UF_vs"/jj"ƛj)ku-;ay9-~ר+ /-q5ZbvL[n7 Zm8xV?$^DS2PgG*"#CUt`eіm k@j?rg,lyy&26/#uoBU+FlϜe*f(; yJ3-izzjHN 4 RUCP bB7НjjSeC 3rz$WmPa5}yt`'ekwrxnwXƀY-:2Fl !(t٠SX ,5wc^-#T!!vxk\M.nX`G̃E|t}V/ϥi̴1}Ķ}[C63c¯3 3muKR|I8LyF7FVs-r/HKd^8;N4U{+cc+ɂ4E^(TY8Qo7- 1Ekg=KYC1[&Qf&Ƃ MQ= seQEׯNZ}CPc)՘ٺ [[QhRucGEhCWI2+#<>&og<0GmSr>͊]WЂWz1\w'SViJwi4OK!ڪ|2L}l)ma/S .&6Y<:$Zekz{޴L7ҢOyxa8yDeglqI1i=-f#Bq|8cAJ<=όj~.5l+CKo. vVAȅ;S,T\Wo}wjg$ūnTmzDfZ&a^D{. h:޿aٲxn!؍aK{g+~すG~, OMbwR{J|F)M;3D*U̳'S#pu?xԿDݠE`PgdYe"]Q iɬ:V)9+mv1 "U")鷮70mKc{ aId=X-r>HRZ.Biv@s0u1oRD3ˍ tGC@V[Tw }b"ytخ?'T]A/e*,?vGC gFAvtvmSdKg%m8ahj~qQBL+TtadwQjYn 8vK~PXCZDB o%/ghs\n%]G z"Dsu Kya =B{F~G7l MNj">(_B\T>5SE}UyHFvOq3F0;wF6XD">FDѵGۘN!oLق%h+`7:!3 d+Xی;c'D䟲q|塯:PMhJ8%`7m${fĮw+l6sui1,ѡA|0$*b:gsGQ4G?4B`{InLI| M**v\wz'bї aVR}IKЁo%jvftSV ۶8GCP>GّGMA-{6m`\ p>"쁌2cAC|@Pn`J:[N"/;yn:!׎{w\kwK!['RnG0^%*L+\_/Wm[EԚ]3N?_OgoeeF'V-8WiT=Z:ZfZrg.@SӁ6؄RknH7 Noc󽤹,Z([!bG\HY >ZwI9ߢֵIq]EƗf*XS~ն%[J#v4/ <_.pLڀS%_qxj)Qצƌ^%㗀dك-oՀAY:#* O!ɭQ"[HC9HX86ǟ^ Ѯ &~s P.Ѯ2Lŗͭ(EP'Y!(eꦓ+q_vuR AۅcشV/Rה.ͽ {vkeQ7f[.:L^-?8 Q8ïޛ8$YFIJki@G &8c&/{d%w+PiGޚ'!bks:f=EeLYaQH@Z=R$h? 踨$Oh5=]am>m n#<3w7d & I !0詾nrҖ&N6Oْ0c6*{%WEmDLem(Uni=iȤ6>2v?(.>!;Ĵ]7[l{H$O VPʛU؆"iNP/eS͛l(6ɌgzG6sƗ;C eaQOO ea3 W+c8[ܢ2x[roZ|T_YfDl[_OvS 抟ơ^XR)K!W L.74r,I1%*V.]v)Zuj!4}uUY%T1qBUuizMǷ1B2aOMy `$3-'N$#UL2NF`kJtKU*G/1 o v^aaLVo2^eue)oeD"U֟ OdV0/_gt0E8G)/k!J\ }S.^q8)|U@gujx?5BZf·5?UC`P*'TՊCJEԲ~ƬHf~Da A.B|9*AB!UGcMY5GLgOʸk96U&Nq`QMǖ1*rqӛ/z90>j='=?`SU4fg gGs~uA~ K#N7WEs!=vB2[]VC(}r@3z$g!L )-Y}] :zo @qFXo}i7e=$aG`z+n1YnNK،r]b0bZ]lq-ܯxh |P5hwX;$ sȎ1onBxN, ;hWϭ DR'QbwԬ'9^[@Fiy  Lz44!Yȥ:WQV!ܧ,B>lr QN)ZxJr|kL*^tKAHÚw Q?.:C(,?Xv[rv8m>"E &$~FD#:T8Q( Ⱦ؅]T5, ZlA7C)uqt~fR*u`pbN%[8(*Z#~]%߰{bln%=@"7X8\(0wmU7S"@b!wXN=ˤ5v2So) ׍YXB*|7ݚ΀v~ZK:c=U֜MVQA_Yv4BJ9wTP߼`keTn., N#MJv5$Fex0?U:BB"')xN*["Ay+_>5J sqQMװbptЊUU<:h++X< HeHE:~؅dk udpXo`;}Sg%^Ku}A0fc0tͰX- U⛽޲0PKµ!LŠ.QJQS);zKw2R \=o%81*SODR\qA;AibGI~  gH*0-n nb>^5 `ҹDZ޴A; Q5zA; `ԋuQXG n:ڶ5lLsǙMnxԟkʸY@ϲ3 b882KuDuĉx8%,^QLJJW(TQEC[n?64=8 |\W*agPCAҵa?&)/]+1g--7p#aV9Tz}Fl~_^ 鎎5*k\mfxq<4lnvMwllkc! -ܬQ:.1wl/mԏ/Mwp_[砜E`]k$W>6kmxg5f=0_.Q6Zd)B;`߾5_rɠsk'z Y񬭇ya~yc}Ec'0][c y,A8Ѯ0-HCˤMm4㪞z<B:ӍqU]6<:7'v-ceǔ0!nbY';I@R+2HoZMgve\d3s!O8ZtZ߯ΖLa: ]䲅2a f.Ib;uU{ Zq<,8Mޙ!8m$}9,.kGى:oڥȮscAzp[/+Y!{٦?jŒ'(c`OZb-[ϯ˺!3 d%Jŕg+op3U VSmI+j@d=iot%S4+WIJ\ i R)'iJZt c Ͱq&dpw׶+% ;W *O,׺NDd_RZZr{d?^nȞ\6̟ȭۍӵ )tݸzEAk.%5[V 6@E0&zYƛ 7RQOWǗ M>عJk%]utj骼Z8Z~a*ur2.6Бm8.w[ P alefxωZ29mٔ7=dHI:ãcߦA>ȐU}݁Cx ã3fEj[*)l9mXeZX^AN`$i|/x` z]Y(hUHZ/**9+[]d?lל/{ Q0~$c,D"`eKE=:u/GLVv3Cʹl| &-ngdaY](>Q38̔Q"OFnb2ɓ*'<#A|d{č2JP } z?ף CvIMˮ9ov3FvWChEݿtBsS_fYҿz2)#vdbMɩ#s?q˲Wgȳv;i7pX#aѻh,ɲ'ft;E׷2"z]AL# I$PX%6}։ Y a;ITp=n? ,%}zqµ~1 iwZ^z=)0`%J##8ETbxw~8n(k'+T#nAYңL)UW ,ndkqjdkپόԹh*+fnVf8y"*\ӏ{_9! (-N?g/%軯e8tbTS_!E䱰lJ!mQ{m&&$KP  f@d\| ig ƪCKSl-e$̘o8);u*$gHEËs#AO:v#CBZϦP;N(}IBƤ`pdm ׇ͔?.9pATR-UXo[vǿv{Ġ̇ͥ-XDnߘ(dQX+uN|gM=WX'j%X6"RM)I- ;Nl)-+ŏ۫:C1~{>ֹ`8넎|6Cق =R#$y>ՙVF{< b/]@e`tf_g7h QC2?!L Xg]Ítop(JF6oD* 5{Bڮ "h'Ns>4YW&Esz U=9PЦ35Fl4I?\Xm@cҽ\./^ O 'ቕJh4jC/ O!vC>U,9/8!AX;$]׎ PF3uuf)_;p謙dBnLS (q :2O2p' i.pJ)J'_"pꮚHh_N)0<1ӭ&a&3†%]xA#T)kӛvkjQ-ס-zzG]j|fYm |)B= NBM{Cx$Q9_ +œ;!گȒ]gQ9C4W?RϹ缦RPi# |Qb9>uۏ%{Bf.Lg#)/p@W)4 ƿl?( ?]LXO`/zMbVZLfjr ٺZba ڛ6mdTJ:d(,Au/%"\M}!cf O]~b wvg`1*9 їh_@18v<tqO͚zН Yt/@r? ϫ3^Zg8ǀ^Fپ]K2! r|ക_N8yJRg-DkCW'@1 :cW.6#"Xa]v8=u4|9LQ gO~V&@iturU`u`_7-ăajPZ\YG|ޜKj4~rkOњ`IXi^rĠ:!}$=Ш f&ui@^hZ;Yj-ظ9G<ߗʺQ"V mpʝ.$[Xղt}ppf9r64EUzi'ć:.yEƄd p{>}O ϶|ܶ*?a6b  S60t-e:5'Hbs[/Pm~%C cCw)R4iy;SUY$Qk⛣Ų'XLoˆTtyF#Wwʍ=rc7 orSCt|`Ś ju_92DӾU#Od.}h" $*&,+owWoWZԎv' VWR uyx'Ŵya2v!kGŮUX'q=@pZR~>0sNlM>g:xվafn^~X*+@oa0ZlTWǢ,@<6e'F7E/1=-"Ag:1 #,jzCz $k꧂gޕJy%G \ܞhx'3z,o2Ii'W Ò˻5?M"u'7N<]a{FND͑y_eKXa,PnjBf%~$X#tV .ފDQGi%%[ 񛟬uVfyq]d@n=xfAG*g%yy{nl)5&L'5d}+A(_@n0lZ}ǭM" g ]iYĺquLpQD3OQ Em5≘2GYmU3k$jZt IJna F~T" /ۯW2IAyjq])KC:r Ӌ籚ڶʼnbF&^4٨Tc<zRqw"Ѵ`D 0AEܪ `H^xA(ea†hHYR"ıB0J}(Y{z& Mxץ=۹x:^6;_@`7eȋv켏KJڞ&˧iMk]ζ R ]&k9 QcB-T{jyuͥIbL^ c[?dFGve|i<t=CQFfdj[k$ݩlG vcлW4hDkU٠]t,Q56FMxW˜^ꦄLKb`an t4"w'~G7e*EyjodOEOj@fX=sItETBȃ!e)6YftXw: qn;$yz%9o:ԼH|9a~7&$ ci@:ayA^Hr5RZ#c{#@9v#ETKpݥ0-k!+˶b_RZMkhWIOk_'gĹްp W*]#s.;H MWpp7j5sZX X35$d)۞_/-MGaYUdTtY) 0(W˺`uV )z`@ґ&A{BP)v'?Z8.S^ߘ8.]d-kH]6t#c:$90ɞoHavncF k_JYavawKńE:V!d|Q'd]}s ~M<^|sװ㒧š ` !"w]-YW\Uĕ;Zېq0O62FÅF}o#'>\Igl#:Z˿T): w Ģdٗ >F(8wg ׈*f6KN&tAY~tMZmbB' q :Cߨ2kG&`S?>X}}%9o\`ŪF`+(sJ]j}pU#\:KЧ\EoghU$6iӇM*j4yxFBR~! ): z Ɔe;Q_>>$&·T?qXEĢ,$h }f& ;d-;e#=irG_P >n3䌊*< RvN>%C*Pn,u꺼 UCQQ[!. }2=>ю.$W&Q,>F4UٸэqʼzI$oBPYk-xDZwji_ۿb6@_@ש3H C]Ȼ ]l o8Z2j;2@ _F]|\ vk4ſޣ BR]VV"OYߴv/ *kܕF2iF2eOO&b m o<$ KOջ. 7Jc$\K* ?[cCEԳvAΙZhG+z3W XVf;!@ J`#Վ,nP-򮴭*Cn)l/o{s\_톚W[X dgի}iԍ(G74j:>UK,da\d)~{ ߕl>02@~$7x1"qS~4>eT|ȅSOwYWxD:ыz&%Zku91~dՎ_+ņyv?Iv"+QxDkTġ:Nue 8l&l_ň4'5mEQQ3sL?WɷECT#dT¹Ț%.UGx*W1oLl6*ߕy/ ) |.=,.9wyc=bUn>-l#Ŏ}~܋`Q}`;z)TT^)>E8L"bqIO5R˿KU^LQ4٧T'zC2ЃR@?L:Ҝs-ď((L v&OBBI#݉F[ I.ʶ8ʦ i連xh W37wf}}hYTrh=9R[8H{`._]f , IF"õOI:l|Cu5 Z|9'?)qvTvHB\D_jR< \þ݈@ R/'^-ݎW %B"Gp圾q^,r*ӠTJDב9N|d0%Ac(LR2ǤQpęukGtpomI E+:va@|\|֝)Kb1 A`:5Cs)qPRC݄MИum'[~@MT]h+@]V.vH, Fg($Q8Ϣў 8 gXOo:3>![]{0,mQDL*s{vAd+]$2 dlO tSr кNV%[?.Q$i(Kaz?7HP=K>?_ Wp۲.P k * sۼݟY(TJn 79+<{ߍǺڂGNF16qrX3K#z+,qsw`.y8``bkh4)f!tŽU^j;d22?eO/˗l*QcdGlJȌ8:PPMbO+ d3w# τǟ^V.cHDtIƦ:΢cx8hos{.iOєnjZЧaHcQ@?^@ |zaAF9RWqU*)))S{pkTnj< cF@Sb)HfiwR;ЪhЬ96q@a%efx|q*h/#Tl կxPp?=3OZND="9*0?ML>ucx4" b$[PޟҙԚ>z4ew!.pԋ εٚɭc/ >59jNܦdCAk'$2: "*鳙PĨcڳhX0 cIHŲ%ˍD2qEP|,OB^桨׺l{7QX h ZNdlʷ #Up?+GhtqPF10'M!< |JU9dmxn|Wijס cCuJu *&x3DfԆ/(KgrrQG+Lao8Z}5se+q$qhPpm\c[X+cW 4ˌitR$ѺUCf-LNbek{^׶V OW DO0IP@^/ݼM|!YFf!Yk>s}T}0AR:AIr<-yzW3M6͝fL+q>+wmgYl&HR ܺb=ͧ ӾEZ]ƴTAp!CHp~~[UЉ ]-IZ¹6-:O>ab7YRt%Fi48@^v'Bd3 e)vRD_=Ɗ.W+Ǯ RT|ܢ7LbDa҃Ӓ.ӟG~j\0ޒV.^Fa!se&wι7Y|TQB]`ͳW486g>z\˥~:m"x~cP<j*c!Fwu9/i7*Hp!nl>RFqXM _AVir`1ʵ 8Jts^y |#hZOen9vKٲ‚f)N'U#USe\uNs<l]JQ%&Z];fםcE`TB)gJYV'9v2J03$T {yXwdVhJRq,uA^ڋ+딙vsS򂁤U=U %@z8%߃94{`J w[/T`'H$ގJd;m{>A;mMyPeo ;hbiMÒeCmVv3 :!o%=7Fs]]i[֏&Q(8VC$c3KN&(!kvw񋅽 ?[i}#D7 ";Mרp[;kMr4 JhDi躗yfkbѠ!mo?:svZ͎>m@u wG[/vZ++n/nW~iN^QU*se@_4a(#'-US'ɳtYwrPW뎆MWZIR0)?2P-鶃wŧhUhz-UR=b8'vR!$r=A|eFs${_$ʤwϞydX;JߟJ#ѽzƺ͙8*^NƖ[BÐ1l?z4R] O`ZCS@ѶAE=~ NC(7nE/<KIG)8S{{@GX,WǟQa[}3zjFWUk)n,Óxph0'RqeSP >1_}M1VEM ;S-8b'/|LM?t{j7\p'] gZ}>GœD>ۓbtK*f l$}#x/&IBGVD^jk!E?l, VWOS>;g)3S 3x,!a +|'XN ^*jrQ^fG34GGHf,3x>EV~P3_} U*j" p4b>Vjarٖ-ve M64ߞ,=t㠍๦: -LJߘz]æQ4X@Ql\W^еutē&օt]x2y2A"%oa If}jScAϚv VĺoS {~ .;rn$T%Who$<0LRjɔ9[8wn[jca͆m q=jrNGB˘LGIXɸ#M뷫W46U.p4v' W\fm Rc SX!n$48t!V4)uӫ/dtpF&ZJ,K^e~-+-="46_pV.(t~ɀ> W1yxЄ (l [z;@n'dͦLll_Bv~5v0憄Q  -*] DŽ0nɿ"|I_ 9fUkQNy.q^nT*1JHA?E[7Y5E9og}wN?eadBTsr뻓mb$w(1B0ns7BE䳊/OyH3UϫSH7Q̨߉ j;q$ßjKz@e՘Y2IE|ִ4g4W֯ k瘎]J 5'!Ӄ s)%ttбWE\_Ѣbʋu-q_AV:(}yDYM43~,Fczw/ֵr$In~}dSnH+95x~ ͉ SׁN92Mhl'\{(e}z)"S1ާgm2)숩4{4ؠdv.+OfF ƹ,w89tK)>Q~{QkI}{\]U>|\w`3ݍ-b˱̍uou>#X78[*=vbGB^>n,Z1:,r4Rd'I߼IPQnK#r A3߷Fo7; \2wydW 97ȻlZ {+n\l>;}D 9?;X#B3׫J=f'I@ *B kzqw`K;+}#[$6gA@5{ASO0ή$X@*^Fv^#1*g2 TJ}_*K5NV*2cry7Pwoʙ?.qJx;<^U֮k_8Sl._UaiDnGk:]R T)PƷZz|dMҿ_Jz?%bpDEߟ6L2ͨ:0-לO7hA\N 8<>%nFG1cяx1G,?^6{ݗ˼̘Ypʋvf#~jͲw'31zEVa&pbGPZ##r%y*>N%yb6p.un4)yڰ.!bH>@ Zcv 6[#l'K'KO&W yX.+dU?\S[V]#D(j]ڥ)k܁5 RYMJX5`bptAHt[ˇ2Tn W"b]PDri[@I<1c,O!;fzvٻ. pׁU-."=YJٍ1;f(pkD  Armhkj7L̦Z&~maW)cJڈxu"! U?Kek'duW?k;iQ$x}Z6wC[FwS?8Kg^!Y #~2QpTٿ: 1y YHÓp)BUA?ü)}9&HEum#ֳqMP6 U Uo}dk6tuZ\9 )r5`ĥVF4p)]^~N d"՛@Z={2!OGwHJ L ?\43;?! I3=GQvo֭ˀלQn!-Jcu$wVVAu0c@9,xֈ[cGċR-&U@+@; @ǥdJӒa(* e]pBrocsH~<Yn^毞N*P˨"D9^`SVj3P+m}K'p#sv)cLf!CsZH.ʢ)8VQm+&cӲw xԡqQJ(PQdQ8LiȂo1Dt¾H:AÒW94G8|yw0g&,`A@du\}{?x~ ¥K$ 7qR.іՎdžoT9+2n#G c*.DagHf1#DpT6`uٜ-'}quLppPS٦y)s0,*?Yp˰d8k:..P> c3L8ZZ$0lgR?̻KtooT?DcKvZݎD3۽~Ğ&\Rr7/ND=ء*^5'BG<Y!iX-pퟥ¢-kMĔ}/h˖?LB >n뺹2iYjѕ*6:6$eD?q /A*[`׊i[+OkTPrQLΘoA䵏=HV%Hp=@"s08lJ"5~vє{˦[׷W.' OȥVq37/ޱ"R!,Fˎ8d^#o )/,M~8+GDrj?~XנbƢwo3'IhiY_lf0N&B+IFFCOD(ϯXtڍAֳ ,;7uo3NWDW[aO7hڣH_PfXd՛w.BGؐjWGGR؋3DBh$P3!1UP=u+J#`ܵ+lc S,c-"rXMҽ~js6Fř?s8/ {b庾WWZ2gE7꿽BZCHj*gg5d(уB6EqSd#j|U,'\sR7tQ wk/Yظ^$Ept?WQu,4)cB,ZhkץY SjM;zbkvU.pBzM`?GVwiM6!ϧpu.#|A-sl3of8"x[33'FM̴.mqfkh!>vT^h G&va38j8zѹQsv3ا,u!g٣́TVfcU[~{}h:bhj;\G@Tf+S&{ZO^P3 F<*96̲^۫@{OMAUts,LjtYv<>Z:Á\md7I,P)E'bϫmDp&#!g'Z#dӠnCk p9}eHZB?4s߮ȹ1By7>٢4i{l|A3\V??DP&F 1`riI#eS[M4&L<_ݣÛ߶a5`yPʝM) +b{Xn},V$u:h9F%E^"GS|ت(ާNFW"k ߁RIs}z_?*rPs+9cL Ѕ&ϫyܛ-ޫ.5=Y*Fyآ-<63#\8'"(B3nfWqcFnpBu8Ƈ1;e[~Y =E4$mؙcRAH@X6glj x#e2r퓷5`:Jv4S7<]* ȖlvBg j ܺy ?f;7 6ÍM>l佋wLIp[bEUQ/729H$a9" :wyaH 8v0TWYK: (x|CXBA7;ʅ/} ,z(ǾMLm]qyeY()@|XS@SըCty*b' nxP]SOs5ӚB(X]..}n(9jJ1c;A.+λ|)P?h(Ye?V0+[6$rT/`P{ @:G_F2 i/OZ>法ZyA\*hԂ[ ]]a{=-%n^8,bA%.DIDjٶ!nis۵b Y7SɈ/Pfk'o}|6eNSM;ϸW뛋z+W 4_c,Q߈`Í:3uY6X>ѿ~"AP!y=\2xצSt ߰v KGݙ?:WqZ$$9L ۡP^T[qh* Hg= x ,|e~W;Z^m[PvA9#ivĻ}Ϧj$_) =@t6^S sM %YWM4B POQg8Gm1F;G[&|K,Q(e#Wl EqȮ[(B1oe)7}[l~WK;o#\t&JbMk:mqXXrйY?0 z2m!DD!Vu=|/Vn%vwm0r**ІH 5`|.ӫ4d+L0d^د}oCf1jd^1;D(iVvfK{Q6J64 })Ҏ 8'z Tl') ҉T@|2(0L>LcM3|nsGpp2p温4;|Sb$bRF\9'<2Mw]ay {Ѻq 0yԤBtG`~!IPX=4;R4 '! s |Ѩqu]ti|T5gIo8$ e'=tKxcP:R26j̵3eLmrL_n}[9!_\u'ӻ q#X6]b]tlt'!H"{I=! ?mv@X4rǾgKnÀ2Pq^G cG>)4YaoIɨE!amJ+x\CzN"j#Hm5K5t9, : m띷I$neu-{3!\˓)b7!0ʭCGܖ8!*3G?[@ ]4u#R k@![Ҝ!4|H22nO}ɟ){sXh2+ h-IHzV42 O.*ZeDws _#ug}xub«3j~QG̩5,4fѧ!Z"'{AgUX['kYW{REE4(sX8q ID ĥQOnm&/=tcc-{4_IhY`O0ktU "u 9G[WTT{;w~r)Qގi:Nƒ,LSu;AyZTnB|S'}){ t#&dR7.4Q2|MFV;bpN3 B]!eEgqqkuT+LvkJaJfU=u驄vKĺKQ bAKٿwIʤ^;S G(68WcdK(Z~Hڬ ):0p!u3%欥,U3-r[ !i{[3liU,Ӗ=XVlv.0au TGuNL~_sm:*; ' v#:TlRބb/dGu&(|WPJWaQu,7|ttKÞG"J&py@_VO= w"(sn o~rCOY|覎p݆v1?f'Gl}rKv;:y<9tsp&4eOyxp/~*^I, ѿ#'};MZK% U;tߙo֖k-U/_Ojc]} R6"ofc֏Yx}-BQ&4UnS͞ow_qվ}70^O%Ӫ˞d c-Q-؜^ ^hg܇ocBLj~3Ҫ BCб4=9ctecf?RXwREUBy~h! l3gL`b`x oޟь TWΥkiw5X,UdFp2]Y)"-gqK&J|Xa4|6F#tOyC$RU r(GelG#:O1>3WTRbrr3ts5,uW]Bx1n1Sn# B"=L)Ss_Ǹ̓R2nNarj7WrY+wo$`e !E{MOs},.׎I-De` +@P ̐t #~)o0R,z;3|=`Mt"76Kq䝷:BH 5^DĊ2Ux fk*m*NfDOM?.r|Pϻml|SjUJG-R@6N14.~O䗞b8 ]DXmkVo(+cM 984FX7͌W בJ+y5?TP~1ňf3 ?Lm\LF8qL\W}RĶbm c1{g6Llϙ07ʍ,|,!HGyÛ6?~>0:(0^9'Lƕ ~md*l2."ash Ӳvi0Do1Ѹ ORpڎ,hd @?3-18vpkwT sO?`'RAQ}dOPn>ti8pwj8K_aVHڴgRi(<٦[C;ѯXv^ѪW4}YlVUk~ີ * =3e*ۡ/n9Qp7MN2؜d&a}]̩}}& (W]]Y?,?FFw݇Sψk ?{T<n`8Լpx.7pq{"JL]5o2_MIV^AQVx&2,$IHQeS}31'L, Ս8͟< Ol}=K9d `7 ĺL\\HOBt޷ 0ɃWfuUấA2~qBLi21UP_\]!{cޓx@0Lœaq*2"U*Vkw:oo<I\&ւk d +b&HۑBtm9%·ѿ Cn<4%b`ũa4ѺC;DfFĖTOsq)ʳj='r$l'v) A o:[v7UNl` wf?+>ԙCJC`'UvWtt]64C>5 (¾6qބǗ,#?.yVsy<}g fdYkvΉFsPAiHfO/]z-AHԴKFefOG#16TʀVѹ{+ s#AO,*Շ,dʲIz]'ߵ%*fK? BW $~0)ڍJZt[5S!V,JFPΞs(kiL&! xkg )[pUu8\7ǕԘm&t=.tJdک18 {i2Ilm;N p:}^_]>@)t+pV$ط1$]Do$x?bO>hza^]+Q&]6nh+Cս<=ݔ2U 9"rӅ_R`CCjQ̳K;2[f[5v[r2zQp`0" > Hez{.W}qeq?xb[;+ :|[N4$!+rYi^?toLjh8P(6wV`'K2d?"G# 1"Tvɡ k7&)*3k<!wO(p]pC1iDWmr<~+MF8G` 3Yz,7>)}5{:88!|Bj6أ[9cyv4n2IYoaL 7\jreL[;m%gR>%+.1]lmt1ɥbIt2}gX83zgfXj%ދ^U2r#V#ŝBu0buXTf窓iqі߯MOCcm)_}.?UB*^NՃH9p\{F/Egy+-`C~t'Egx:_WQ&3ƠXiKo<c\qJR[>C`9[p~Ty0r*TK@o)ʆY|~T{'$((,P @YO!lv{hCv;{liˣg,ۍ/) \!_\zο -\% hr'.@u2t#eҙP^OGEq=hvQdgy6>"ьvSU 1j G4ydWMgC2G$c= &uȧK/~OXHj"5Q(Jh;QZ<t1#/&j Azw}7Ǟ\դnyM; C^RNWfe͕L.6DBvlƯKC2'>9#古4~ X?@@iF@@v'*qA[8%LJ ,փ&e߿$>.ٓP]@up.[Ш|pv??}s_Nq6 tu GAlCSNA`eF6G6 dFun g۝IO"` kJ-l{ Զ @ᩔ@CI~9D8]ʵn`T[k{ Q*zo$ZDȹdFCr&3-Js آ ݻqKl)NHhis0;Unb"xH *eo 8D(<ĜhD< R/16ʞw/`G[,f>9~$_D,+Q*A"3x:W Ryߧ!>"v$%4[¦JO1?ELZbepvQ8z%S,ռ8v=4V1u,ni) ØNmWkts '>"ʪ!_4M|HŧhvITj(AX]e@76wc!5IuTɹrCKF仨 {8v%쏪dZ7":sbZ)璚W/'3.$d|69j λ^ 2'HgQdDJ@{sC;I/:}0Mļ!0d{U&y{b㥡?8`#_Йxuawvǭ߯3[mdz "966:'0HNdVLN`K" {n'ˆT@ܮH*oIj}ҭfEY ^ҋIF<n4u>XJ^6ef^$(8YW¯ IGqիRrk'צZ"_VtK)!23@%TVb.h$<}?LEu U׍|~2U~H\ Rf o>h#!>EnO>7۷HZCJ{6m(mٟu` 'zLoz\= r8 1n / G2 B+etpZ{WN8[Jd*LU|DC5bkIZFW Et>;=ݣK| nRD h |'ELFjʠ,^,ʧW:P&ꂇdػfԋ9eFpêbh@LKBݼVVs8&t1r|BQYpsT'Ƽ r. :V| :30]e[6WhsuW/ fiw4 Q)KJ]Н4-NE<.)2nEw)OxE:zXy%ֹvş Ahnh^$JSKhKJ\bY71qא 9?a\ &&`uaboi8:KA2deZ]& Rahº~Ѹ 'K̉NU:TVZ6Ip!Ft #7UO^=MBԈE}z_%U`z]5ho%/c95&4^!~xJPEs,IKJ'7~Gu$)tqRj~M/EUvPYziyqQ Yt{.ǢޯFSA _>}u/j27֑SU8?O>]/h KBnKDpVO笝 yr̂B1'/]q]E862* uIB:6B*]rzg+8sx5A)9&F-t1:?rPv\RB}:&dd7Z ҭ[d,L0ODaֲTm-v**" &8y`~'x5B~n)p0h.aє95?#Q%t-FS-2eB^è$e+  Dӣ ЛFWŜڬT#O+'`,wxV6Uz"#;–vS1ZKF̯"LTy\P J=}c)7dR't"p!ۚKL 0J3Ŷ,v>0f ;Lb,C'4Yd†Oi#I75u38]8D"-6 H*օ^ :. WW/PMX̷G@RPy9 &b"~f¼&+xBk괉u0X_H*8FsBqGm,׈#=nOTb2#Y^?z\ȏz%6^JKZڢ=oKΧ<egemf}j ޙƽȻ- TNy'7j=Pm A/邺)[{<. fpTcf'mo5ds"}s~9ӻ i{Cm b-M7ЉiyJWޥ0Sy`¼NDc?G.ɜi!c}xŸxj.M}XhPKDS H"s)wfP9Ao18eKu-[9ڗo[~1gy%p.}]4բ穟.I'5L8DdF2(֤߯h7]9lzT,1!*Cfb37\*% k[ oT< T 9߯HסO U>8t=3:GpXs2&{rUkm9 *+7YFdM_L̋P=Qi8M4zۥL\#)u_[aŠW @e:˷kCެM⭊5sr,Q` Y.+UhPmM~ 37Y|i|4焅wYY]ehTB7sCe; %[BJ__JUѕB>2D ?NV:Umy>hT؂U. 22ѝ(.7r~XP{Aueǜ1> x)!C)%aE$,VXHptyzr/yΨ4cf0Nqp/%1~)`z*8Δjt?o27h@dj7W!~7!>b{O/Ks),oT+CJcxf;Hp?}3;fCɄ7aY:WYLe*еۤg?sCP>Y1 5^w0pH.R̤PDc*xu}d0?=}I\*6pH jkʆ'B2*sd9if%'a`Qݎjhelhtm{<4ckVZrb/6ߪoDcha hєԖtˣr1L[7i&R|{NuCЖ `Y elt(IDAT9{lУh!o肁?Y7c$)ʅaG'݉&+0*GԎߺF.{Ґ4fz=(T܋i)6 5@9_GŘO&}]`~ZXx#>eC'^1 ICQ7t[[Ϙ(3_VKy@.;z|ޫs[ItI}3pC&}S `p@V3c'yQ8O2i55ZF!tݞXʆot:c6n?2)2oCgg`:|W!Vh<`YBgOŸdss;kEoJeޗx^#`zDg5#'"!'v?atZt~_JwX abX-7{.RObT2xH"v˵u3|m_,<Y>=H ]l^$B~z~mU1l 삺Z2%a?/ Ye㔌5kN_.W`oU7'c*TMqQJ4G ; q1t3z W_paa%`J<ZdQ?i.Zae(ng ,{GTD 'lMKAyjӲjĵk9 aKP_*$_О5XcwU|,mZ⇝'67AKp,ѩLa0>9"ĐqOJ ʔ>EShbʂpQԁ/5Dj{/_Z̶SB'=+ B]kҴtFp_k 7 EEL|Cґo'fDzGh6^文oLu0G柅zfGyܠ"BMXjoh@; t9 A+N'*ߙX~jl:D\n̈nJyhO/jqJ٫9u Ї{)C.<8#f@F1+7~jMw[iDn}j]ggbs&\úN|Q=[A~oͭ96,Ĝ%ɴE2"_#Yg M&O4ll:Aˮ(/y7ٕs>WFw GJüv@ [,]hh8cTbWlB^X=#ܯ`@F@Ժnh2,R(E/a :97>:I\zW?myDV+"{ N촿(jtT%DC["g{(M:Zޟ1CweͩBd`y a~' crf+c YAy8s/eǬX69% =AGvVAp?%sh؁,S R0fe'Mq8ݺHlm}n/lNLl"w6LmZ{z ~2i5[vP9`Y%0#:|+F:ΛN@ki827_9dELy7]0!a\ 籱UkGkH#*ϻNwBNMV-@9|I\tbW:YXsȕIi 1_)(ԗzB9=LL`^.5seԆ 1zeQr|/xNpmS}S2pYgFl-0{iR#  +ͪ8/ą+R?DU?_= '4HO-?L  mKU@6b*wUCrL"HӧKJqS H3X60eTё<"쌿i;o5% %55}\Yy;ŸF?)uk-874&j%y)e>qm0= pc%D7FNWq[ZCۢBʀ~Y4nްD͞FjYKW6S2_@G~=?Q0i*X^Q{-8tsjF W%IY~+ߣҮ9%M:] [;8c#' ]Y)L}!”:O%<=; Rf]o{v2-_jhGn<_U/2Gl%H^LGR@!f!Z.AȭБVY8;)lV}n%ȧBWG8,wOmWs&ׇw^N{ec]VϪ@%)ι@dJXM:P %ҦCwÿf[x5^`V Y˳%*9lF%۞e[ap_(L).f6!MMHjΤi4#4T?s~Qg$Fz8(Wk h l}׍Բ &Ը_SRAT1 "Y*"|~SYcn]SY>v5w%T/6`I088<ќ+㟕mgL ӳz{> RCJ:%FRl)ZL}ة/MqSUxb>pᖻE,;TL0^"i20ksVjCJ֍D0* $ijA")?b{gPD @Z7~ q}V5\爰iԽi hHip\y.T˒T 11>* 2ܴ/hrs)⤎5'$iwN [8&X3dfU!L=_J=UB#r$4 "Qu(d?m6J#1 k'9DevA7 b9mX3|)_<<&[⏻. s14~KK*Ҳk !u뉩 9]skk3Ud;,zֵ^(W)sY4:OL,fњqDp,ƶA0cFmzbHE%D*ɗRw4TM| `MroE@\N{,ݦ7iO,?@'C K*5N^}N.@ A?\lTG~\"l[ѾJƱ:0l/)RMFj45>LaaMFwչ4N:DJ7)z;K/C6Ҁ]7/ yNV+~C, 7C,y %0n-yE|šmSuz[@iJu(6"Hʦh@5(>cAaر@)qžN''nO]f)JXmTX@*n ?#*e?Xh%_b?w_e_=b?k Bk?[f'v<%I.[q DZtaZ<,N6 T5&7F APƮհ/ΉwHGqe? $cX-dJH|'Rska/ }oZ_,=P /4h:_ t8$!1pUd#)ɩݮm0v?ۭ\w?a0 .l9 akg%ëT:$ch!ּЅ\Z=Ri˷V2ѯ-8!&kFA8`L0P2! oc&bEyP m|Z1YDMZՍ3z+o:v?FNkXt ֥لA]&"kecI_JQPf/[s(BtQ= =lJ(Gb;1AӢG JoEX{b[9 Z<%{I}" F Dq[ANy|Zh3O݊e 6F9]~?c~E 7.KNRyūW@;o$<Ŋ)0R10_TtQ`2Ѵ|ݺn:z KPVLt .Վm4*ů]¢9 Rk-GZe@/̟WZe.Fדr~| Vm6Tk^N>'|Fn& Bz G[ҥ(|,;@"~>dKl%E2ZICt@%b-}"sL8\7+oZIjJ' E s`c01I$ (7B /eGg)ԖMYz\mziqEA94uqS;-e}Fv_I]v$sMig>R6FmdH;PLoXT[=ZF~×& @ɾ==YG#BKN6ʥ3,9n,%3#yo9gQGrEmF\}vt_Wu7ʴ3E>ɞ(^I(JÈL$";< ,wV<("8ѠVހHj~TN3\ 4]vp=T:ML~C@⨓'Tk',L @ui%!gզ& Ed W c}ȚnS3h.d^*:B nf(yW7s#I>}ШQM-Dj6acG/]˲_açQZ#@$K7Ãjփ+PX}'L-O* UtAg R`es3;vh8f P0:^~c R֔KF\ɍs3*bB14TG[ A3yoJ|]:UI2}e=kZ;l|f ǫjqW8~^X30mG 3M>pAE@xgqӕ, lZQ"m>]I\8}y3:l֏7>.2⥺[{?9c]{gHB;PP g,-:$q~~-en:Yk,9@T# &Uٴtz^^֦>'(nD]E}|d`Tb&|MzZ]X3LQGkoG6_cߚa}$o$G¬]}]*ydkMm0܏3SN?6;6f2b p08]'#fXa߾UR`xG[O*؇bO׷V ϫ7}T[:mVh4~ow]Nb`D&W27b8bp?IS_РO-k =S/ _0)|(aΦJ1S/_f޸qո߾ ԌzyH. `?B :9kIE|F*ө 9.9M uy(fBDwe&2u%Z8+ǎr3° ErհSmoKO[&o#K]fP*fulmb}!Ό T/4}^*ucoIZ9c0 ǁR:/XސC_ YkLi"u18TW}c0韬ЎDz4 !pEZ5RV:?VGI,. .]&X"a?%eul mɎ$es0gߣy1s3~,Ձ!(UL 22U@a1 xӯ/^ K*iW Idm$vmxBބϲ_Yx);Hl|ّh<RGNιfءݶxm(䂻.%l,AƒQ"* iKi#g{M; +AcB,xcb/|@'Gh_MJ:sl;a+KW1nQZx1S lU`V~HQ{p6Әڭcw&[fzo3`]poOnTVSE5H{2,XHy: 4uh#zܺ8IaU?s2P"9a?yie@/|ˎ1\*#t՚o"m[;,kȹ]EB2.B8z?Ye'!By~c\B+ff[ {r_hSAjpnŶm{& ☔kЊ1:qjJ'_~zx8L]*|/ 5VO:r%?%Yɸs^")U wSN0X,G=w(@/I*gWC_~4e 튡7kJ!gQY42MȔ3rek. lYTbAuAz"ɧt,Yz]N Fmu` h"@: KY'ϴ\,@!GU ~Wў=4P+k_;!rš?G)5$ezP)6Tq4vKVV[α' ̈́b <&&/zoOV\=G5O wgyHagñGBHƈG4`xxhX9 _i/ќKb'LaoߞVjA3S[F5/# [o賃YȴذFu*^s 5?ɽA3Η,8+ɞ ENB5,YWX==i _Ov.4hT\9O ~{}|+v#RXm zM61yd6Q**MsٔzL?Ȱu COi؉~%A0W C'/t_ړY:d"E.PYgcf-e/ b|Lq 'TZy5Øߝ%@F@~ƴl@?0{N*i.L\1hOmԠnL3lvH#BeEhQ낉,[x,jL_U@ɀT=UD+c NĈӍQ}=)KQQpZ&d'`EZVqW6%U*EBLl,Gj^ u:\c{ +M:[VQ[i oE(fިQHk ڏw2JMj[i+d9~G "_xBt8Tr5=T-q: xW Ư NmwTr4\?ܼhcCބӝֹ9Z˙p3KծT6o+MA,)cu8u6 uf c *9Jw U/W&ұ3DI,[^@vm;c,c8aGF$5)잛b1ӄ)&M4 .gP}w*#LprP +3)WLn̠O(i\|Ns}ʝՎϝ1*9M.`pzb2B:[V7Lh5!HBiqbnyhHRYPta;eAZag_5l ZҬ,zO^QWgBX@Iɋ| l3R؅hy}-2=#Ͼ6N_%Bbq'?C{qhDqlvsq $M P3#YM@&Q-͑rq4~xԯᴱIe8+ j(G,i:s(uAq$w~/s҆l)̗cخB%_*52uH|ڝYPN %Q!vDcrq{/U:Vq-2(יOG cZr0V.d2L;#cCs o-{Ѭ2i㾬o*bEHiƮ@"f-O. 07*7k5,5xQLdC.bH/iDÆA^*vg2++ͪ`]|LvNRUw@&CI / .D6٢ 8!=s:‡{Ą}-2bưx-ٳJ2%|MOό^3/i7[ՖwiHS-2Br||7K\᠒k?w$^VTCI`#t%령̲9%"ƫ8:׭Tp qT кナËI%2Pʐ3S٥=:Xs;!yi^'Y |F}3*%aɠe;aĵJɴ.m^kј|kUW֣kwҬiz3;NV.|猤NNb-QC 42}BoflU+~2`!:R+܏p񶷏~jdoQ>zIhE=b lQ͖kPgkΣ= Fy]sLȍF,mTԪ$@B-b$!ۖ\[bƶI yn$V2Y'lCwYg~emCetwL\UШEisZI"|Ŧ, Sfee9gގ٦o738}lmɉ*٭dhb+ړ„wj2&L ~ҽ􊵫~3|z+ucxek3B$HsވբY@t6lr]SȇOtTǛLBt%B '@ۣTr[Pf+((q*m= 4˵1k/l[i#Ġ:ByIsQn%HP/ ΒOtsx A% EYV4/iR94=*~٢@=Vˡh p89@9juT4E{O ~PPQ9 Gjm|v%Ye^{([HY7* ]w+3Rv5.Q$i-(CH69@tvcTT#a= w%'D?2Z)v*+Na~LO`b74\RQS-2QbeH^!aOm9..t`(!t@Q1o.k9**AYsC[,W Q`YA6_B G<5;G&< zAl#MD")h`. eb{ WmIlX^v:ߍymeإ@=K0()p4 5޷N.1oN8#OCMwuϕfkޜ 8{xL3E.O6v KG 까u F=G28Sʵc㈈u&6:ߋ!(Nܱ&=:`$.oJ.q,6NmĈN^mbʛKV0"d|$yt YzV=,%0u9L,=Ē4%tQwPqB?{"-; 2,k{?ODO0Ʊ_6T6+#}c@k5ŷ^. Hk)Dj-k+@m\ 5 G;khE0"Խ㧯{ /Q#;7b0XS_]_7J$pyT͞O2[.ǃ:Y(qD,&`Y7Cס@gP2x)r?E;,Kc[kY,:uI "Ge4:YH4WÜd4q+YHF_<ʀK:Sm h8Ik y&KO5XO 6' PRqDž했jsi:|c!#ځ3Y$9`#\6B Um7 s)ֺ6 ZV'٠*_w$`ڷЋ-٧S8!l2}( .ޔH4jY{{Zu21VlH{XԒ ?RrU,\=$Cpp;SG&XsO͔xz@8ԽvGECE̯ﯹl/=K.*4broGrW PK+'CW+4@N iihA#1Rog|q]vUee>q0![stu@*C$V;(*rWhZWMzVհDBmaʿb?w$W~3#tw&2$X5ԹhW0x k2_7!O=ר6^dܺJ 8[g!78o'wS\;حmzdɬ*.X;d_Uu)j}SIh?Xi79=J-IW<}W~E͸.M gk~|7([FvyͶk\ FBV;d1ۉkUKIy]ivPzzw:g.mCp[k6\Ÿ H!Qٔ!xڵfް? 4Ii„_-±Җ oh >qN]b$>Z-DQ?-0??\ ȖHl G̼h' ŠbXɊv ɹ ]W`0QE' !p m6}aۋ̽\3>L"@_yn$BkDme" 94sg$.d6YG]a%N<޶R<-ٜfN"Όo6?dRvmBҵ1s:0J)30Ok9@d]Z6߰O@Qbl$.kCmdY4w˳u%T2o 񳌸E%q(Z!cܺ;4ȗyNo %$C,{<^K:~lesQq"S%RJY qe)- HUq.ga.KVzrB,54Ls+{If<L%+:щJx)B=p0{u-?8|~y=ͫT&AtA4ZR)#j]}%GdsnThUg@(K MCTO 3%Q5! M;JU\&ndͩ B4-P|~qX/5iݩx HuESQP!X[X#Pat)e׭/=L,rsMbydBɕ,re%'KELlc)H0 2^}.#dlr?L*usЧ#εc#T=WWa{_ٰoH'1}x* ^ vA y;dc*\ M먤%x6FIKF{ʥY=@Qce\<}Z sa?Amʇ|/ I{8L&LxA]SnJ|+8 e1AN[3* ;#]YY_0:KOXEⶅ,F:Sa&*Q.JRZf8-jWO+sgk>֗tn$ G7fh\BTWFZZZ fÑx>,id.$*_|2ǮC8 tI[bCZ7ހBl9-d;8Bk81.cY3L$3ȒbW y4uTӆy.,C_վW)}ZI73}߉{fߘ=I2w"k6v~L͸e]c˷惹ZhǦH#?Kx{&p>o&ǘZeԣ !}xA8pp4We\5`?P le%fhڃI 7o4<ŻKH6%Bd&5D,ȒWfS" B+?:Ufyi`TIS5?&& Dxحʺ'u(h)ΚlSۛ,#ʤkZ|`qF}k8'*m|_7@$k'pS4~9j 9-6@(',ݎ cԒ PP*bs6'm<|pR.-BQ,d>b>EO:tt:P %;ү5]bdsJ3D=<<"a1 KAV:@9r_8*%,]ů\cؐ7(έd&iy1}Ӱ Wu4(Evi`GudFEAbNF8d@i&E> 8=`"$ߒ.9%XKzgw rq5tPr^?-<"u[0DP|+_̕>Ğ0XJѝ6͡ЄǏw )81Pv/μ<֜V\- $jQ2$x< ؐvÚg i.Bd<ԔaZi`kJq3n,u9iN*8*͑:5ųG Nθdh pM¹:8_6Cn9O:9sv6W-1ɒURW*{ x5^-X̪Tż%e)sQ-Ky W`N_CRZ|ZrԣbB|8_8P?oL=l&; {]S0t kNH&?lzN<3*X$fdEXOzX ΓTֆ@`IXN)Y~oTZSQvY K_lcKk\N{px4S]gC;Q2ceի.֗1ZO}Y^xCQ`XT}R6jb%E1]N=NXYBoKW OJmO!F*[]R#ۓīdOIj_63;% ohcpCˤ" 䳧uX`OKZEkr>n}>{Q{k[n'~M?\xnNGOapKOt Tۅ4P`6- +z4hb|vLBP.*\\g39.NmLHSldKp1\Ӆ}W꯵O }i~#- vM̈_8o~DG˾ȪHѻJq-+m3}1{e՗(kjPA% 8PEv)sHEtԽdưЍL xel+/35Hܗ"uyϐ&Qtz)ݩ/q`r4cr1kK1,F An[ץ-o@ĒE.C[XX >D{ʰ씳-rR}\ |*gy߫.XH@W}T>yrΚ.>`7Hϑm\eyD8lfƾMPa1,e;7z\dQmZPg`-ih7*7E-3.;k I}m)*a{f>6@\䏙U%Ml:L{Ue^>TRv\5QujY\?"z7+QH4{Ǝs.3_64:NBv#~ۭ4AR!MFc*.b݊:!ƨu_mI eU@]޸FCOSWBsl5ٶTu1CbZ(aR/JnI= wr>5/6|H3H/s:L,ӝg+؋fALtcK$/ٺ wv!^Ǥ n}KPKQ//^qTF%Z ٩FQ QѴehӺ"~C{{D=bx @#E࡚8?Qq^<,WRCIػ+jEM{jj8p5M$&2-_,h=ƒ-'vx B3 Bn;-? ϼ̤&2mɯ]7L1C`^'!:O붬0&?Q%.Y=JbWSӹȋvC{a}ڷT$<_)VX!Ɛ [O)fRe & #l?b{@ޖNٴdX`H"xS$lK1s_i{4 15)|KCPC`Mf9 W25Μso&9KLi|Zk Z3!K\ϩ^amUzSOSr S&f-xt`&U.`֠L55,J0!)*o{5`3LFA{!EQf/7hFJ&*`"\Ry0d`?1AF|46fށe/hǓ22؃r/ޔ^@ws!^%n PG>YsO?ѭs~.r\$k3Z Mw?|3' ͬI2? Q\hTˮjy+5KZ|3U&{+ /`g nJQ:hr˵CH1VU2>uHۿnwSd4l|)ҧ5={KGSC#}*):56'#pxk68u55푿צҕ!U]P5wx?KP} fHi"2# ~U\NP HP-̇vYir;/a򑝐{t=?Tvd-o%@Dz^d,:%T~{~v3G{RpDF ̌{S/x:1yǓ2MB<] SV2+np2[%(lFLKٜ&pm1_`-MƩ:zK9u|OM9i%YNfWwȼʰd:Y?0LeQ2n&0\qUoD|ٵ#'3<һ4j<]f'k[ve>8#6TUnEݫA]~]in3J!t1pd;뗊\b>xJKSxfy 5Xnd鉷ԃm+|j.;A-fh X ]Tr|sT$iDQ]7`[p&ȯfISD T1.;vAEqp'7 T}Uԇ9j3Z ۩r|Rq-U3$c`U#8E(O&˰͙n-S-C/}gsRU1BO:7%&8RbƄgl c7k-> BD y",&]$֋>8*\eFV>#șt&=6*OmN7$NYlq(/vo![,&'gr@,߷39N+ )ၙ#&2YEj^^87`gZt hOԳ^[?ϼ0ֳOI0 5BjpVY@,$D[;yCӞI >diTrPa@`=$.?<Ѝʊ xtm[h=`J._a+L/5 6# >EA2>WѸ&/qvȓԩه;.==w_yͩXa`K~!NM ]t iw'Y셏}.8-LyQ$& {/Ld[#-$oR?VbG{'@+$&). 'V ̥F. F?hIi)l㎐ aTB>}kf1gT;.Se+^wyZj6s7AF9ui9 z!|)@G'" :6sDiv 7,ka`Q-iS87vE?xZr=fãO/ˇ]b4ЊG7by͖J:MR7GY.Z|rx:y(ƃOghzWJ;%T `mg܍]CL #lGI=W܇p2А8_/MF/~존Ƴ>qbK9p$!,v?'Rc+ 4TQդ}0]gt[୳, 9/ҁ* !H4($vF n;vVBlIk˂W=Qĥd˾.㦐\n=6[^{kYc77Tç2 4ʒ{Xhw-C(STV(3Z _iڶߵ[Y ]XwV\85~[KL/"D}9fTœ@LF;pܩ=o#@ǙZH|(ݷ? yDAf@9(kkzo{,-QБ`)aNm<'xZbg ռ W%b82PɏHHk ^3 \@hL6 ;3kx*K#hxOTAh"tYE tFM2VǏOEliOq9ʙDl/%/ 7!sn~c3D2?¢"w[P4zesGQX@0lIj,K:T>R? ĺ}BҢK_*B_90s~^f)%Ĥ\%}_9ꠔlIT!JmqA}VF+d>Om.Fn|0Z(pנp!N?J$@'3ּ OqwzFn["G§Z>@߃)F~= I|zyTCa%l5@p~bѼ& DmCq~cR==,#TtAnҎe(@\E}V\1 刂8 ]&MC%3AP,Z!ֶTC+MlfN=M.8r3hZz`hd"?MɶYr6_ѫx1/[L8dTl5WZZ+^=6]6c d.|<ڪ|Sd#]m #q@dIC6 d 94;Qf0~A(` Y0S\<38XYo /sω_I]HgO0}7UE"`mu"녰RXIt`dp@Zdˇ~m'b6~ ȝ)s*UJ!hclmSVDkuy^XxKmpt*rCPd&Ry-.י]rdzװw1^`k~'hOR Vj7i&/Įי8aC;oml);ST8V^XmyJi>y?l>P kۉ0d'9tOŤۆ%}AZ$|$F(gDmJH:]gm5Fk3Q#\WC(I*_<ӔvٟȟߐLI\d݊k6*=bu>ѲA UUV.5yź;4`jB=]`/ }&%PKN˕XҽhW0pQ曘nŠnebFb^N9,8#/0[ϳ԰yB=lGbD;!.L2鿝CPo2Ǣ=a9¶{?$&J8dEt2c]Omycam\&Y'Gs}d2{A#&z:M=_mxel|8.D`"pzc+IeʺƸM\aku$&2+;kon#ĭ# «*S Im%":oišb031QhKA%n}l^#CJRf80;T]]1ۀA"!xV=qa3 5NVA+BBb~hQ,1-QXпD蠖ذnZ )۠1}MĻ^殎*B% ᛫)ݘL3^wLZb߫kFGwa#o-Nr; 5݁4WwĒ`g\ym_A"&b̪l#ĉou5yAbng,VZ `O8+O9>*&"BFAO9`(7#Rho1iAH:ߋ6?̔ "1g6=Xjh$h ?b2A!^ƒal15J:v>Ҳ4A3qG!p\,A Vh[(970,UY@mYxn P >t5W~e&z1#j@>msE[To-* Êu_"K~at;ωJk-g(G͈Myf$ctlYINDFYRSz?)J猺[>]g?z[J,? ^ͯ{r{ &)i=w>Fdy/!Irf}o w){.T LYtύnX\A^ u_fŖA?wEԌl껗?87!w @5ifyкғow=ю ̦eIV֫56݅<]w<WJoz%ΰShůXꝅcU4`BUPT+I׆ (Bnǐzb ;oUVVqz1UdWۼӑ#cgtl JIl16q/V7S7#l5,N~U s5Li>֑jg9@[:\zTK&n5]ā~SO5 2݄6%k:R"9-.!3}ҔG|r *OB`NRkqofF55N5Yg+((.Ai'R[#0Z7{o#u HАOEZCF\dq_wb Y@NsME*~F~æ2ĵUk+ȰqIkɔ߶ؖ*Z]tk\@7(=e .85D *jhaڸ%2gA+9ΔZVZS>+eD 8 ,'k 0Ȃ Bu@^r(ҠM+Z[tR|L֙||*`UYe(:@l2q.DoIqV kfZZjk(&#.AwlY*ևT96ki0=dG:s9MpV0ӻ>j`Iφ2D0/=8QJ6\VU'Ʉ 2Cgs,Z6p̫]͚dpl>~l@`$*.'t8*wO^tFr=+(Au ww^Q6P[4Gxtbi91Гbx1oaY?ۙ3LoRs[}M7&=#`:U? 5M/+-)bo <2AI5`r{ؠc).R^I5x;Rc](\wr+:Ze^|VRQqpVcM*k% UN%kY ӏ-qը0,wP|tA_P;p$2a:ux8GLLCb _턼\J+}_PM PVia9΄ͳ]%ˊiMhp#t4]J3P:Y*y-NanO[ksʖe"U8wkհρlkhLR;1a&4)ԛ1\=,rgB^K폅GUXIm$c ڃ8ZiH˽]tBPSyБR hccW;n2GRX\p1<) k[֮3`4h6SU<4b@Dnx KqbO1L(fhpfIB7]RU_N9'Q#N~:tvzO(~ѐWXȮ][&I5ЃwZ M^q~[E* EPrR? Zq`x9@i9r(%z+H]5RoeXJm+ሲP%) {FedR~&IlbnNH׭ lB&cjGFulsTf¹M@-bKj,H"mr1#AbϦ2F汒tɰUvX40\՚bPv ~VcsB'G=AE.Cۍ ޠiO=\ibFMzts"ZqWYlHMZ[C'׊ l*6!Q #;.X0 #& &bXzvMw\XR+l;ѳg{`sWW T\Ļ%8tV91(eˣl\,WS*I[Yٹ}# a#yAyEC|N dO`lxT6Q]OآhsO0\:e#޵Asȗ&Y.{,,js ݺ&3s8%~圐*MkԔp~^6?F,N-.$PƐ{IӮ~Pޒk=J( Od]1E'4 鿄˳S@H|;축,+ԓcgc}Yi5cܜZ54S8ɀ(snqR/c0zĤixuo.k;H^\=؜e\:lnQF MJ0X~@1`bs쇉iS-ģf(?X>^|/_}a&j+?`q%^]I~)]8rSp׸]0l)!ϷwطaGpYP+`]h`a3SvU8lOor4:%!鵈?),:\0T\_eK-g ɳ]\K艡s^Pnqfƺ2wj6J#ڔ#U¡.ke?jYK(tY)J3#T@a4:1)V?d+eqj’S#=/WPIq߸a'a[ 3u2N0m#U<ڞeqP2>k#.U-<3B`AA6jX+^W0d"zᎴvvܝxuCʹ(T#\:reo}O|K Āt_@Y J V8dES#ߍ'Zy@)s\>ێNr0e&w = ac`a͋Cő"C YT` UK;eql!"*yOGvA綤>YOG`pžXBӲ!qɿ܄)Z㾜oK"^ќ2<W4hK&Oʁ]tdlS|<ƾ`&P9WULu75Բ7&;ܭ?6ƶk#:])/0tOL)G!(4"s h;t„Vbl䈤Z)[IDAT\;hLDZi&L Hׄ 7i5fJʸ5ľ mflKLxp(]~㒦V/8Z*(mVOoO [{"gN^KʍRkZ ASS?T>ӠD;D3[i͹zN^BaNߛo4 핛_YkC~Fjj*07E g7qV_ڋGރr`nӶ6Hp`z@ίݭ@MM 暮beMqsoLԣ&ncn|o&fdt Ɏw@IENDB`mapnik-3.0.9/benchmark/data/polygon.wkt000066400000000000000000000003771262555547000201050ustar00rootroot00000000000000POLYGON ((155 203, 233 454, 315 340, 421 446, 463 324, 559 466, 665 253, 528 178, 394 229, 329 138, 212 134, 183 228, 200 264, 155 203),(313 190, 440 256, 470 248, 510 305, 533 237, 613 263, 553 397, 455 262, 405 378, 343 287, 249 334, 229 191, 313 190)) mapnik-3.0.9/benchmark/data/polygon_clipping_agg.png000066400000000000000000000212641262555547000225650ustar00rootroot00000000000000PNG  IHDR\rf"{IDATx흋󟛇 o•+OQ"  !I49x3S{VΝU@ 0?s@`1B9F@ 0&ݻޗ@`80/C!7r=w}7o;SgE / P_K0Żh]vy_(իW?}Iŭ[e\ `d/^Úޗ;߰a\?>l1d/W^<}iñcdžcn;ؼysٳŐbd޹sQ.6 {ؽ{qXoܸ񁱥"n"[> {Xbć裏2=VY}?h6(of`hD"/}gHm'C Ctd-J3|zKgyfG`"… ޷Y oA)Hǧ}*tʽ{zJgd-ģ<'|rr_ױK*ɏxOx xGd+ġƌ8R mӦM3O?ŋo2RO?=|?јkѧ|%$:p0V|M?d1\rEtCB%dФ>uM kBJM}Sa]~|XL2g9u<ɖ8Ԙ+RojP'[ 9PHYb<_~e5(yvy T~B͖ f<ҥK޷ Y ]ۇOZaM1T'?|饗oCu~ }:K*_yh uH%n-[t~ }pNK$R*N<>Gv4d'Hj@)fHleUI+@P_~˗/{R2 [M~Zi @7{b"/rsVǠ o; Do]Zd͛&N JBvPJ}H/Gb+,,&|DJd%Qf5hl?޷f&֭[^R2޻w_Wt^ܸqCE쫽U֢k0%m;ot]%DUW9X6 + R롐Ub, (YXXPhm*5XJ=JVvZՇda*_ݧzl,hV F>ct:8ι1&PV]+!j|g&&`8-)t+?SalQeWD,fN:eRH$GX}@RXBe6`xngX/G$O#mԎ;bqS}`m`Lm۶ع-m:HiIBf`r>̚ɂ6̭!d)TIޫ=02,Jy,JcU+nm!9,̡yd~ݫsY1._[%鹃V[cL֬Y#v?&]~HMX#19̙3cT'TOp~#y?o~Y H~@K;v&|۸H.'=իW 2Ps: @0C:r\WՈg"/icո /dEٳ2pJI Qr*X)pNM09m!يaTD!i1z$AW \xIȶY$Ϻ@u mX'|yA7^hJ}-1_+W];UyajWдnK}Z K*qTCA8NU* p2~36"Kot<߿otM͛Ů7 BcJ&m` 9Ҵ2XUD ^XH& ^Z۸A|$pR5`ӦM*MVwVvd6mݻw]++6WY9rDxEHtq"aՊ4]Z`{!u |[Ghi*<0sb)$nJ`~_䗷$ʡ۲XJe& ~%YTSLgnBI>ֺKIL'4\XK-g{LrYZZ#z9JMCBڒImH&Xp׳+pW0|I䖲ChI# D[ܺuK`\Xi7&=$r㴗_UJIi)HO@S @2kI=..:VK`@6b+JMIR҆H-Z|p ٳ용nd: |:/S'5mnDGh s =Yk~gwN3 iBV'|K>'`.|J%G/d& 8td޽d/BvZlS`/&9plϵlSI˥Kğ)\zU|>3T8Ke+סiF$K:E db'._WCR_AB0 w^hiFzi0M>)8> SKF|ڀTx4F:{ʇE !yŋֶI*شɺPfN2a)Sp$&O"Ϣ-n? >Rѡ6g4m!YL9zCiI6]̤I;w%Zj{3ʅ:w5 KHl z"H?T 3(M*)f ҟw<0ߤia#n)F= LDIY¬XJ6LɷT8ibTt9rS0rdj81ͅr[ +":u{!z(e`"pmE*ŞԲɊD7$]u8t^m.EdGrl2z@]O۶mVM c鯟T8pZ).&dӨ nQõޜLq SQ*+Tï1I?W,.$6HN[ <|ߖZah96"| |ty]ù:Xr%q[~V泠.J8RuWpՍHtot{*>3YvצHWx4hC] H8\"쑅A-RKe! ]WO>z@4κȕЄ0(RfqGH~1D[4[<S"hx?tlU ;Mz@孂!RZ%rߝújKr)3Mn9B㚺JBUXI8^zǃ[u- dNPi(Gb&Z )Q5  m<[nx l LÂ܋%$pKiF>$ U\GU=8-A_^%It5<%DžS&pX%=xFD|e$XJatBIZ=@,0lMT8+{!w0^(H߿T: z9R'[ ?7M2 B_V#XJtӠ&/M}1--[uwetYA@M4#&K_zB,'$sjʦg<[1(J8|axMJ*Q]ˆi* a+ǟ"Bji9 z?݂Kę3gDǡ( !' 6RKha}﹈_pf!9E s]VYQhw$޲6=gdH\4ЈN<6ߞ[ 6طo߾};A"rbj˗D+@RS8S ja6#/_6{I `K aߔO?t6~w#@dl.b@rӄVɀV'O4XLH6:TEl1sNJkcHǰlּ'sy^v6 .>)dzɧuO9WiS_tlrB.aRrI1t[^iuLtp۷o<.E{dcKD&i|~ip [&U.<!%pRΖ@Ν;޷3-!z^2g]ǦVŘD9ѥ-%pӺu뒾%Ĵd/<<957a-@,țHLUr7 KKK'{`/,B4KJW%7^RxŞUr"/{BrM!p MoԨ@@f/֩AzScŊYf@*Ƚ9Lwg;DO\[D)R:>&3*|.\z^hMXڲqq*$t tO !~W^QSiffXҩ ym$t ;ۄzjom۶OϚqG_/Vh%}S={vQ{^)V4!4!_IzhLs#o~nйmRȩSP60P)`jާ~߱tejwH!@(\ WvpzR Ek͛7%.;4&M[0)Wn  yƍ6<74'H:B}Tvq(RHLwnj;r6u~nG:6ਫ਼cǎvV|A|e,g;]c؃iN~g hzB#(NhyE]6`Ç>}tu# xdޥ8â޽{GApIZ4 %iGbAAQ.NHY@DZtgyf_rd^V|4Y,Fxi2l+ 7^_2)L_}a?J{(B ^&˗/K\r`˗[D |'Gmܽ)rR^J!>rx5Lt;gtڦaS4 45mDsfL) ;GKSibX X_&;rV7<RƎu+dlzU,ͬƍ?gZa˝{|D>Rl߾zRTA ,..J_܁ { !jx_G#ɒ^s3$ 4@;@F,'NH 0zVXT4A58lڴ'uM,1 AG;"̼ի%AYhLLQwi@%iV;1 F{`p^ L=>sL~l$Vi:9N63o SD??fܱcG@ӈ|1εq% R$]<\M|73 ?Yٞ;w9DÀk ˣOxqc;m$[*zJx@TVo~,1RsRd [q Dր;b;m52emh=9N`8Y ̋?ygׇ_(G9(hp(v/ M]{l]4DS'M ^uWiڣqNa"^|=)}P1Q9/p _~ܻw/{߼IFOpchcڵk>2lJ> )i^Qe~ N(z'Y$JSʡrH7MeֵG-f8 Dڐ$,JKic-[h\f6}@L q^fs -$vZSյG, a&#*ru\rp] מexl)C'7"jKX",$ҸL7 vjUV_C*|>QLU2TRTآt]{`׮].TD@R: XK K.\{ڒ)ivgݺu.U7nj@xHjk%0ε ×ɓCKI+>J> ;R>jX"BO%- i|1tcDz=si 5`J 8o0͵ }][ݻwNO Y]x{T&(D(̪ArF)-E\|yhm=pŊiP ц쪒ĵ - [Ni$W}N‚%kO[>J>;t n=S*>2׮ ޭ;Oi'L%Y4a$ `]\kJ0@ҾÖd S@G DY*F<X^bZ_[+æ SN͛7{?bVaA{,]S\{ڒ*ATggx[6!Ղ DUA]jMf6<(ކF|P''Pd lJ- I%TKC][{Oҙ78{i[[A%Au =JΝ;Q|ĉI$y(umL.?P|Yx(\[" {"HJi`4rҨD{O9o1i)C~nң%? M!'Z|7,E 0`=r$v_}w S 5b@qp9H`.l{OK/Y?@G ]m']N>`=rݻ?x@?>r Q@l>m6{z@.@o> ͛7W =ؼ'' ^у֭ XXXp|}2ZIa npy iSNy w 0np= i'xbX 7 sVCM ,..OL bEw@ 7 Ғ W =sx'k׮r|uD83:,E} |ɏ?>47%#>GO t}G~ժU7n:رc^8p`k@_'N H>ڵk[n #|#6W vc`9&ȢI&m^:q=端E@; ! cs@`1B9F@ 0?g`IENDB`mapnik-3.0.9/benchmark/data/polygon_clipping_boost.png000066400000000000000000000210751262555547000231550ustar00rootroot00000000000000PNG  IHDR\rf"IDATxqǍ@ `@ D nl"3K&ϐf]˽=9~'ݷ[U ` sL8 c pAPÍ7?e jؽ{ԩSޗJ8 ?8x[lU:4{? _=`O$5'O=KR#@jժ;@d| *lڴix/Mbٳg/!9_~ɏ_ޗ(N1/`ii2`gΜDqpw`֭ޗ7o9m۶y_8E82-ٷo?/ޗ*Jѣ?}9A`R?#3ַ"/x{cׯ{_R} {&?}vr;®]/|Ww}2-_@OۀՇaw}}iɰvڹ:l裏O}ޗ-FҥK«}i㭷>})f_>ر>|v)?x_^o`_ ]vϓ'#4w=B7AwX["L{fٹs/_SO=UzViYo5/e7ub} GgXz[|3ΐN~6 kpřbٲexLZW ]>/ Nđ#G/HXGvKTaҖ ޷ҙ&'oޗ[>m\}<"3(K&kPfe'Nb`OgyRASb޷ԉl~)O尷wi4BWBPR2:6)}Ҡҿj$􅺬.V6 [Ф>{V^}Y )5OAtvXɇ::q>? m̩ٗW4&?sNkMn08  81k9RJt]{߰aC$mdnݺIk%@}`gM18:1K$Kw~ ?o# nܸ1,_2w֐&(u\Y_;wu,ʱc'h+V9]X#Cb)w1fK슃\b(:;0=SX-Kd [M~ iҶ9]/W'm׿U~7o+1hb9w/{ߒ9):Mʕ+WL&&Y@Zv{ߖx$##罤b+~܈84NY9*f5hlcվ [l4Y'xAcr5_ľ[UyU_l~x qe%m;r/0`}oѹf%DUW]YNe)ۀZLcMٸqD{x԰RQrVR}(Al7ozn-|uRҧqt\Ҩ17 qr"8̲R8>#mSk}˵Lqa~$`w{'K׬/5,G> )+xLqZz0N8&6O뱘el9șlVw%ϦϺ|ms)󣾌8Y8zY??[Cϗ:KIcTIMHs& @Kfnҿjl2<%k( E~7o2VU K}!˗/{S-Y8JBR+ c)#g(QɢCY8ZUf_4,fFUjKڵkM*(x#wKsB S@yX}es Eo:FŸ R!bMq?Xy5uҘ:ɽOE!hT]˄٤R5݈H6$8\HU{_J_]#TT8K<r0u/KZTQ]T8RȆkC]sKHa8$4 wͼϛ_[&p c3- Bk gN2a)fxyHY֬M-"L=P+9lB:=UL3pE68#߁.9R$_2%$I?Ñbf@)'wxUlR*Y R)O $FF%f &m Y"٨td*#L'҃Uk52ĚT]ĉ ԃG)4;ȗxdYj3l<͛ŞZZ m$Æ b ݊1ii8Ɏ9߳ʱI$To8RE?ԪU@.Jz~7رT8pZ).&aCCª1 >-=@aFWp`]N2B5SN6^u@ZnSmt1 ]oϞ=[jAbs~Mͻ,:ΫiK礄5yrg'|%g(I!ds6) IMKP>3u}UmR7'iRqjC YUp`! ?p`T] X {mG,IUhu@Z>('>%"mܸQ݅qr"#<6@FkxTYZ҃1fpA>l Vq́JC6RsFCV+$rEuꫯ6&r歛sHG9p6̳NS$V58@Y)@cmxCh%@K]GГHl Р/iKWtt*wfF[tPsJ)uv_LR#$].9VSz twAPat %84&cVSkzƓ $)Ii(D [EKf IrB VQ@0p4RE!(H?K:$mn%r)q(H41*`jb|Irn!g9V/FWUp:[4:Hwɠ#5E98h2%MSvrE*Ֆ/W[n9m9_g*R6[$ڰ%Ұojjw72hU Q>-OTnǎ3,ZYoHU$,4<ܙd"sy{3]ZZM1~A& l Ӻ޴Á/zaBJ<͗cI5ltMOP=]3/_l"ڕ[v"{dΦ,=){=c,S0:tǦ@ƋQgHpRN.+]̱k׮yLu&ʏCWtS.:6E8TkuR4'SeK} 69ݹsV w֬Yi|pօ4 jn%hHU)H*9(wP:htHeƋYR›r/%eHuOW)!kD^C5aL C|s@ M_`{ g8"No˳jtz*9~'̈́Yt)x("jRBKq$))(M՝3YgC㔵`y#J[6={vqbH#QVi9핑hJ:5A\DLFP6t  *rMmӧ]D嗇_/VOYğ{8VRV1:FMtC-'&2tΝGBA?mdK8%SRc8F(ȃp~ A%gϞp]̹>yF-q͹B `P %ZOT{QB5%I_rƬyp`6b')Q6唴bOPr͚G6n8޽;7tf;R$`+Tm %m@B81˭iƼ3R3)]EU$pc'PˤLڤxDќiP9oԅi;rm1ϰ-l ϵ7дn8QzǤp`{'~݄u4*F OÁh5R%φ1)%@I`kӦMI̙3b8J&b:*c?Ӥ;K;1RÎl߾=@х'6lH7/^}GJ&{ XJB: QYムMlRĉ(Z矋O~ !a۪Fd/4I>> J5@L|4SutCAF^rEⲃ `@К4mɓz mYg[2C9t\a.9E:R:SZJ+ _pme4WFjE:N%R;V[!2.̢$53o(yFn8`–n\Ȃ-Kܔ]K~ /8wNe˖GqNrQ,54MgC&VғdyYHht*bE9^eV;6b` 8,֭[7ט*`񕬳[n  hCQ`a۶m1.Y[@m} S5A2kY1A!/1@O>kf̅88r2nR Vh^{Jr4pq _&2ߥXja8+)@=<&m> yq뜌&ws5sX`cW]:Kї ҠB/ؚrƍ;-b;jۧ6hyM.<%9 AI6e^ymSYG.EW_f mԁ99NeT tNyI X\\TM^8%Peʯ{/UVQdj0 ֭[ݯ'ŲvUʢ5[lܹ^~)#y!ƊqʮVk:N "qSA.#-LXi 9:~ 0Dh_F,[7 DsΞ=+y_F HT9cg#x90{4\xj p>@StٱwZg| 59Fd=4#RCL;x^{a7`Uߦ%믿HN煶=X:ujcOB,z, ;M' m6{m$)㼦uqХT!*(믿9GP3U@냰*sJS՞.6O J S CyAܺuaya %)ݵkSAYy=o94cyIB3HW&R;CIͥޝիW{?ʛIfA/D> =|Y5]g{0O:t2F༂嫬dq28yC1 XZ6V^P_JSk T#el %Ɩmc|;U'P  g/mk+Ӣ4;mdetP#G ~cJ4'RևS HA8fE}|;۴i4+E'ܷ4ꮘ8o'SF }VXq{,*% {2f|Dy+9 @\Wa-M08J1V%}bHfXXħ+9Cb3[ޓj10s_Er72~WGv3J7 S$e/dP6رc-Wۿ!-=A` 5m; r:Xn(YP6qKIK֏ nctRm߾zyt[|9Q  '!k޸8^{}z*IA8s{ {܅~$4+ \rW)dW 7OFc>I!䄛8wǏ{ wL{BZ?r_Av9XlĴ2ڣAn:-[OL {GPD\'曞: .ON ̗<'xbw}䈫ydRe>`IK[zʣfL+ǁOUٍn݊~P8o}衇~ʕk/PyhϞ=þG|x">ɾtʕ+CV G 莻pA0DŽ9&@1` sL8 c *sIENDB`mapnik-3.0.9/benchmark/data/polygon_clipping_clipper.png000066400000000000000000000210231262555547000234560ustar00rootroot00000000000000PNG  IHDR\rf!IDATxE܌ċ% "IT$)^DA@0bvgqY6LT螭{gzk~NS/ ? pA0ń)&@L1`7oܹs2T #رcGޗJ8 /yG;֭Uy:?p_5gg]8q;v֯_}Ijfffq|s Kj5%TئM/W"%Ky۷ov}0ghѢIÚZaٲeSugU= >7|Z{۹sz_+WLvm:8p`CDҿ? vuKR믿Nmdzn_|=cKE\nM3gx_;'|rC3gNzW/KQLKI}kPnh6R R:Y;sM|k~̚aK~C>Ξ=}+;Ç/H<|Sm֭޷Ҙڵk+= v/- N)q7wLqxO,X ߻?b`bŊc{_8|JL}޷Ԉl~)bS^CUSVAWB->}:aQA*K~#Y-*mbT$u?SҥK/;kX!0R!$Z*:իWzm=ɜ:mQ!Acc%WfnEVp?h(,{Ɖy`j9Jdا6y `jժIlܾ}K{f-t'Ol0vD&(}N~^Zdic/_,yftXر6jC8Ktm@Ja,@Akk'8K!X;/>H}ĭgv"Lrl8~R|7bW^7$V!!aɏ͟?m@vѣb/W'u /TfT/p*@J=mB}U+-r ?ho'.@槟~-3XH.{FbVI[~HbV Y9$h*Pv}k&h,T=j/^d4O2m?T}xUaԳ"+ fd~ADnU!\YDP*e@cM Tb,*u'S쩧͉ԩx0Zڗ@V` !F,nݺ}#'e5㬔sl_&mXJM"8L2ڔ@6@Ci#o-_zG2ǁ Q/exR̚jLꫯbȝl@Fvqm nn9nIV¡i6ƒچK/|ms3FJrd4O?kCϗ:JIcH}Kޮ]g,Y8X=mko֭)Y@߶m~oѢEC4,@&Vb[5kָU%mb+Ӕf]z{Fb ܒ8v8 3tx{ꕎ3={8hp1r;_&ҙirh*nHW K+ .Vu-333be˖{~ZJ>3w!o{P'㓺B[4%k޽N#5wP 0ܖ橱 DP8aXa_\: b^X]&zN饅ErwurE'Npq8=g+@WrrqupZS`Jks\(ǸH w.. yÑhTr~zdtp$.uNBZ]8d9(Ǚe._LNw}`$Jw 7%_rmC Ɇ'+V7ܹ#*1tRQJh`Ԑ{aQN!oYPy_(D~~H$JW<0JϓmdXjsi* rx״3VK^:RiрUr3Hu@9&v!`)}O|Iql-5UW Jr7n@ra,m)7Jκ~e}UGR/$B!".@ YCmܹ&# s޼y"yBɺy ϟ}(R8& -jzJ`%~ uf"奃R]p X,N&$F>FYHFBJC8Vj-XN7.@ g_xЕ RkBRc $-ɖCHmle#qgR@ʺ%aW[p7Pt4s`Tږ-[&:K^q|M;,%K$!$H7bkLj_MZ#&$uH&yW뒔!Ǫ$haJTM̮F8$ÁR%;EKki#녹vF.pbt'!u(KR =h.\P9@셹l*m&hǪVI%Jܹ G4,G STs7olz( Ux,*Mؾ}uh;wNy5:&& Umפ2a6&uhʻUֲ8rHq(X6e/ _mѭwM[gE9^K_?{8Na VybĻdVX!6E9{F |Kx0ÁU{ T%9L+A٭D:FweU"m*X7E[^RU Y\zX*A@b4ShiSUo=0!\B|9TS:pH'5Á)ŋ&MAݷçz*9~'̈́I4)6\[D –`,><#=J:#Mdvc&(+mٌc=v=9M/8)!<A6m<$k􀣮tjރm(h$W[lUFZUAc2᯽ZkTԛ@)+~GTJj*XqR2֔N^x03337;Vxt!S'HdZR<%:Ms  RÁ{M"$]42 U+ NA6 %u83=H#%Z*1_B5%I_9ip`6b')QdSߋbOPr͚FV^=ر#7mۖ^)4\UsI@V:Ys K US!4c)2)UBU$p&0*UIyΝj&Rw)=-Դ?Q͛7'NҥPrm1Ͱ- uToU/^ P cX80UT#* ʛ`4 d0HxUH![lP$AlIW 8J*lӦM(/$K ;zqp)F _$&?\)iHr@Uy*VJB:F#wȪ qznK\vDjE_->1DrCOm5"[`4(p 28LQ*|W\ X-*&M]8VV8MChdԇrD’Mrt?ud)|k7z1lhV%tπRt }4`ox'~KGqrN:|>2,MiѴ䷪+q/B6}޼yQؽ{w!7i5RKd`{6zPeUِ$ft^ }XQ&sc)pRb|a_Qvmq6.{(P/@o @I'16h~7A>np-0=+p.^^c !|V8 qp嚓eФ>$*dkyzzgϞU'NH\r0pUdK¤AQF_{(K?k%x"X*Kĭs2&ne>hڹ UЫfTmik!]plUyf`5@sUi 5ud$LhQ&ڄ&OaK{,՟{9\P*F88{ܷ_Q딗@Y䕜sAHXUkX_x *94~Ruܯ'ŲvЕEk֮]+}SkRFMC$]$auf&cE8⦚A]G[>:~ 0o V(x!4O>C ʕ+_wR1rji, 7ڪkwsTyiHүSG6Z5s|k +hW=ul$%TZ!?`4T{;($'"5b*AS=0R_r0uV=^C$-k蚥h2NgR;"yb#^ LDÀUeׯڃCUSNNV(Bk_&OgA GؙfrO o5`/*jԁt'GM;'QY ̋?TUPtR{j' 8uRNv/ T{TY2uD3fvnt r`54JU՞$$ݻUtNIAhU&s0W9Fz=J3{Rw,52}6~2>V]p9*R$3HPB]~ N?ޙ?$X iFb I' 9:{m$)}AѣG]G<ڴ[hRM}@/%'@,Zr`5u(sDN@Gih22ܓ\rpO ՞ܚ$#tԈHZ{*抒cESU{*mm6ڳM-+$abHO>};cPJ̙35 فܹsZi =K,~F.\,]eJ[=)9CR~4dx8|ip>@{RPsH z=Ʃ5>KH2DJ;(%'5R}jO;rpƍnk֖ܓTQKdjO]cܶ/333c>7 mEHF4&41ְUb3 یC` ] UU{moܹqDS#T[jrO ]aUڔ=Mlڣ2XAֱTQՒQuon0GY{XDB i8۷oࠫWv<:p@WC3$>;yd7]HJ-%5bW^RL2 KA'I5EQqߞ6fggxeiMzN@1,4,,5rA1 0 XIPQ٦t_lJ-+RL$PwzOҍ>^V裏ou{l6l~DEÝk=J5aO*oC:qqo6Tp) i+W p IiVA8R9Х\pqzjal ݻ'!)侂psOvvQ9yOHK[`A}`޼yh֮]>1-'A:}ON 1e䈫8{0|sXpa7O Wp-3ΝYhQwReӦM]5cXGܔx>~n}v,puxݯ9sɒ%e˖u֯_ٲeKWyh׮]w>9vX78;;۹tRڵkHĝ;wZA0;c 8&:ydM :W\j@??As@~)&@L1` SL8 b 8bIENDB`mapnik-3.0.9/benchmark/data/polygon_rendering_clip.xml000066400000000000000000000012461262555547000231400ustar00rootroot00000000000000 style ../../test/data/shp/world_merc.shp shape mapnik-3.0.9/benchmark/data/polygon_rendering_no_clip.xml000066400000000000000000000012471262555547000236350ustar00rootroot00000000000000 style ../../test/data/shp/world_merc.shp shape mapnik-3.0.9/benchmark/data/raster-wgs.xml000066400000000000000000000006611262555547000205030ustar00rootroot00000000000000 style ./valid.geotiff.tif raster mapnik-3.0.9/benchmark/data/roads.csv000066400000000000000000010337351262555547000175210ustar00rootroot00000000000000WKT,fid,type,tunnel,bridge,oneway,class,z_order,z "LINESTRING (1478464.087426564656198 6892271.151913832873106,1478475.106973737478256 6892349.655597596429288)",312,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478267.685692099155858 6891978.835526627488434,1478231.305324257584289 6891833.51674110814929,1478229.896389777539298 6891821.759523851796985,1478231.40796187100932 6891811.979739548638463,1478234.552405048860237 6891804.43797043338418,1478240.58003204013221 6891797.938565328717232,1478264.75585483526811 6891788.741302938200533,1478317.1663514142856 6891772.262900795787573,1478340.17583771632053 6891781.920006790198386,1478348.685428757686168 6891803.794161200523376,1478402.16895490931347 6892023.780644913204014,1478450.679222259437665 6892216.85436431504786,1478464.087426564656198 6892271.151913832873106,1478454.672758408589289 6892353.104810423217714)",313,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478426.895288528874516 6891709.308051269501448,1478411.676929988665506 6891698.869274341501296,1478398.007466310635209 6891695.573628057725728,1478379.514034900348634 6891705.552542590536177,1478372.413378342054784 6891719.700855853967369,1478378.730256776325405 6891746.357388046570122,1478416.519559100735933 6891913.901618065312505,1478440.583413592772558 6892016.652565392665565,1478431.719256255310029 6892045.870066974312067,1478463.555577126098797 6892169.547425043769181,1478450.679222259437665 6892216.85436431504786)",315,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478079.075085395481437 6891736.240464904345572,1478104.715826825471595 6891790.366151860915124,1478111.42459432175383 6891812.884139166213572,1478111.919120994396508 6891834.559102791361511,1478109.614440086763352 6891846.147721174173057)",334,service,1,0,0,minorroads,-10,-1 "LINESTRING (1478454.672758408589289 6892353.104810423217714,1478458.218421341385692 6892374.581942255608737,1478466.532067854423076 6892390.463712620548904,1478477.467638794099912 6892401.945822895504534,1478492.303438970819116 6892407.924498297274113)",352,service,1,0,0,minorroads,-10,-1 "LINESTRING (1478295.649775819852948 6892148.408088837750256,1478302.451850236626342 6892175.740540593862534,1478344.449294621357694 6892185.352142740041018,1478371.359010152285919 6892210.707205789163709,1478358.342694909079 6892292.506188929080963)",371,footway,1,0,0,minorroads,-10,-1 "LINESTRING (1478404.315014054765925 6892179.250996824353933,1478397.699553476180881 6892180.93724271748215,1478392.530350143555552 6892182.255580662749708,1478371.359010152285919 6892210.707205789163709,1478418.786917239660397 6892247.360282902605832)",372,footway,1,0,0,minorroads,-10,-1 "LINESTRING (1478380.437773400917649 6892134.381656404584646,1478402.747457809513435 6892127.958631582558155)",386,footway,1,0,0,minorroads,-10,-1 "LINESTRING (1478402.16895490931347 6892023.780644913204014,1478431.719256255310029 6892045.870066974312067)",387,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478302.451850236626342 6892175.740540593862534,1478279.339726323960349 6892178.407874005846679)",388,footway,1,0,0,minorroads,-10,-1 "LINESTRING (1478440.583413592772558 6892016.652565392665565,1478459.888615197036415 6892053.703318660147488,1478482.851448043249547 6892145.54148262552917,1478463.555577126098797 6892169.547425043769181)",390,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478402.16895490931347 6892023.780644913204014,1478391.01877805008553 6892079.79377365577966,1478402.747457809513435 6892127.958631582558155,1478416.584873942658305 6892184.692973483353853,1478450.679222259437665 6892216.85436431504786)",391,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478392.530350143555552 6892182.255580662749708,1478380.437773400917649 6892134.381656404584646,1478354.479788446333259 6892046.069347251206636)",392,footway,1,0,0,minorroads,-10,-1 "LINESTRING (1478352.147115462692454 6891731.442595199681818,1478363.101347791031003 6891774.746155516244471,1478421.539471358293667 6892018.967274392023683,1478431.719256255310029 6892045.870066974312067)",393,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478289.006323162466288 6891573.850262156687677,1478287.961285665631294 6891604.6449805945158,1478304.653893533628434 6891631.25514588970691)",397,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478316.746470273472369 6891546.32058884575963,1478314.525765596190467 6891576.70133616309613)",400,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478352.874909435166046 6891537.000988053157926,1478335.267893759533763 6891583.292532620951533,1478318.957844263641164 6891610.699705163016915,1478266.771284291520715 6891649.189465964213014)",402,path,1,0,1,minorroads,-10,-1 "LINESTRING (1478304.653893533628434 6891544.619147759862244,1478289.006323162466288 6891573.850262156687677)",403,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478304.653893533628434 6891631.25514588970691,1478325.004132634960115 6891655.259552592411637,1478338.570958702359349 6891679.785201796330512,1478352.147115462692454 6891731.442595199681818)",404,service,1,0,1,minorroads,-10,-1 "LINESTRING (1478189.345202641561627 6892164.39671871624887,1478191.565907321637496 6892107.493896978907287)",417,footway,1,0,0,minorroads,-10,-1 "LINESTRING (1477341.726486198138446 6891879.672032723203301,1477366.966007873183116 6891868.589220155961812)",487,service,1,0,0,minorroads,-10,-1 "LINESTRING (1477280.535808509448543 6891906.926925845444202,1477314.966061739251018 6891890.785518474876881,1477341.726486198138446 6891879.672032723203301)",488,service,1,0,0,minorroads,-10,-1 "LINESTRING (1477246.96397894108668 6891938.244107788428664,1477280.535808509448543 6891906.926925845444202)",489,service,1,0,0,minorroads,-10,-1 "LINESTRING (1477089.116663535358384 6890956.187384136021137,1477095.414880589582026 6891011.595310922712088)",498,footway,1,0,0,minorroads,-10,-1 "LINESTRING (1477776.443423286313191 6890246.309983272105455,1477868.845265486976132 6890131.995495325885713)",499,footway,1,0,0,minorroads,-10,-1 "LINESTRING (1477507.896778806811199 6891126.826628868468106,1477488.684884120011702 6891123.347287161275744,1477444.914608268765733 6891146.583800435997546,1477413.610136836534366 6891170.065622186288238,1477406.453496126458049 6891175.721502039581537)",571,service,1,0,0,minorroads,-10,-1 "LINESTRING (1477741.089431561529636 6891515.342154928483069,1477664.167207277147099 6891575.812291472218931,1477687.456614337861538 6891609.488759884610772)",584,service,1,0,0,minorroads,-10,-1 "LINESTRING (1477226.557755685178563 6892508.796153583563864,1477223.683902570279315 6892523.712388763204217)",605,footway,1,0,0,minorroads,-10,-1 "LINESTRING (1478367.953307596268132 6891647.825229956768453,1478351.279361113905907 6891651.197499162517488,1478335.519822442205623 6891655.826707382686436,1478312.034470850601792 6891667.031854874454439,1478293.233126608654857 6891676.167663832195103,1478279.554332237923518 6891684.153840911574662)",40,motorway_link,1,0,1,motorways,-7,0 "LINESTRING (1478264.074714324669912 6891662.709210627712309,1478309.907073091017082 6891635.777043334208429,1478332.132781271822751 6891620.126690473407507,1478345.130435132188722 6891607.143511951901019,1478354.162544921739027 6891591.585185151547194,1478362.989379487698898 6891563.457646118476987)",321,unclassified,1,0,1,minorroads,-7,0 "LINESTRING (1477870.207546508172527 6890978.105273565277457,1477871.81242551933974 6890936.997784550301731)",115,secondary,1,0,0,mainroads,-5,0 "LINESTRING (1477698.952026794664562 6891185.101994454860687,1477704.662410258548334 6891180.672316116280854,1477801.412354895845056 6891105.552087247371674)",143,secondary,1,0,0,mainroads,-5,0 "LINESTRING (1479215.254780515097082 6891069.072816937230527,1479243.134888005442917 6891128.374706505797803,1479276.548095814418048 6891179.446108014322817)",694,light_rail,1,0,0,railways,-3,0 "LINESTRING (1477683.612369260750711 6890631.518402252346277,1477781.108769256155938 6890678.065286220051348)",734,light_rail,1,0,0,railways,-3,0 "LINESTRING (1477349.396314963698387 6890405.439559964463115,1477377.099139308556914 6890438.206881085410714,1477405.483104167273268 6890465.763412615284324)",756,light_rail,1,0,0,railways,-3,0 "LINESTRING (1477401.172324493527412 6890470.315307054668665,1477373.534814990125597 6890442.390931232832372,1477344.973566989181563 6890408.949243260547519)",763,light_rail,1,0,0,railways,-3,0 "LINESTRING (1477714.347668485715985 6890670.003475363366306,1477654.761869808426127 6890641.77187445666641)",765,light_rail,1,0,0,railways,-3,0 "LINESTRING (1479016.87493935925886 6890040.272282585501671,1478980.289296296890825 6890061.804538452997804,1478944.888651107437909 6890084.838752162642777,1478893.905750391772017 6890130.064469543285668,1478869.048787088599056 6890161.77319775428623,1478842.530960619682446 6890196.347961265593767,1478810.134798231767491 6890258.739233900792897,1478777.253439866937697 6890329.912772791460156)",19,motorway,1,0,1,motorways,-1,0 "LINESTRING (1478758.974614370847121 6890316.165379947982728,1478791.501406445167959 6890245.313804953359067,1478827.919097055448219 6890179.964776864275336,1478850.14480523345992 6890142.815378563478589,1478874.553895328659564 6890110.171865802258253,1478923.16680029197596 6890062.616788381710649,1478958.455477175069973 6890037.95814321283251,1478997.037888313643634 6890015.629031332209706)",21,motorway,1,0,1,motorways,-1,0 "LINESTRING (1479020.635208208812401 6892437.128092028200626,1479011.145894512534142 6892381.664349486120045,1479006.648501003393903 6892345.654512577690184,1479018.862376742530614 6892314.12112672906369,1479040.462928561726585 6892294.161799130029976,1479017.65871748351492 6892284.044186560437083)",180,footway,0,0,0,minorroads,0,0 "LINESTRING (1479020.635208208812401 6892437.128092028200626,1479068.343036052072421 6892505.88342846557498,1479114.138072055066004 6892537.938793009147048,1479148.503010437591001 6892548.945877370424569,1479190.491124129621312 6892566.407007291913033,1479238.338912354782224 6892590.107600770890713,1479258.381238624453545 6892602.448493731208146,1479338.130662565119565 6892645.69542468432337,1479404.201292129000649 6892683.055686702951789,1479430.168607773724943 6892698.094889210537076,1479544.040372106945142 6892763.203769372776151)",181,footway,0,0,0,minorroads,0,0 "LINESTRING (1479045.072290376992896 6892170.589830297976732,1479020.971113116247579 6892174.437533211894333,1479002.925554922781885 6892173.946989312767982,1478997.952296121278778 6892171.632235683500767,1478992.381873039528728 6892169.087540414184332,1478988.360344814369455 6892166.251585789956152,1478981.390317942481488 6892158.372236031107605,1478979.636147862067446 6892149.9870221093297,1478980.55055566970259 6892139.19509603176266,1478990.749001952353865 6892115.465173177421093,1479012.517506226664409 6892082.706344389356673,1479051.342515352414921 6892039.569746791385114,1479037.383800225798041 6892032.27303178049624,1479034.351325348485261 6892030.126940387301147)",182,footway,0,0,0,minorroads,0,0 "LINESTRING (1478942.052120761480182 6892225.622887848876417,1478944.244833362754434 6892195.132381286472082,1478953.267612462397665 6892164.350730281323195,1478960.172324489569291 6892134.611597723327577,1478974.215015846770257 6892108.95018723513931,1478994.714546022936702 6892084.208618130534887,1479019.207612342899665 6892056.370611586607993,1479031.37483462318778 6892040.750098372809589,1479037.383800225798041 6892032.27303178049624)",183,footway,0,0,0,minorroads,0,0 "LINESTRING (1479511.261651349952444 6891082.208400661125779,1479481.459421321051195 6891103.084366684779525,1479360.328378667356446 6891034.478972747921944,1479352.322644991567358 6891022.952833535149693,1479317.873730378691107 6890999.440786958672106,1479303.915015249047428 6890990.106492877937853,1479242.089850508607924 6890937.610870090313256,1479204.841728321043774 6890955.758223262615502)",184,service,0,0,0,minorroads,0,0 "LINESTRING (1479453.616636599646881 6890482.744903990067542,1479446.292043434455991 6890501.872114131227136)",186,footway,0,0,0,minorroads,0,0 "LINESTRING (1478987.24999247584492 6890117.681394563056529,1478974.429621760733426 6890121.788649991154671,1478968.140735402470455 6890127.643025163561106,1478961.749211427755654 6890132.608519486151636,1478951.065569168189541 6890141.650631228461862)",187,path,0,0,0,minorroads,0,0 "LINESTRING (1478973.720489174127579 6890696.33466696832329,1478974.793518746970221 6890708.27415887080133,1478934.484929603524506 6890755.082042676396668,1478897.694011319894344 6890797.568019906058908)",189,service,0,0,0,minorroads,0,0 "LINESTRING (1479085.427532981848344 6890674.279605968855321,1479067.307329247938469 6890686.387658378109336,1478977.630049095954746 6890791.621195725165308)",190,footway,0,0,0,minorroads,0,0 "LINESTRING (1478977.630049095954746 6890791.621195725165308,1478928.056082863127813 6890850.737115069292486,1478879.415185823803768 6890912.75028891582042,1478830.093148273881525 6890892.73313207551837,1478828.898819707566872 6890880.302901268936694)",191,footway,0,0,0,minorroads,0,0 "LINESTRING (1478934.484929603524506 6890755.082042676396668,1478977.630049095954746 6890791.621195725165308)",192,footway,0,0,0,minorroads,0,0 "LINESTRING (1478842.60560615430586 6890756.859950644895434,1478850.378072533290833 6890746.820906506851315,1478913.714809364406392 6890737.854747919365764,1478934.484929603524506 6890755.082042676396668)",193,footway,0,0,0,minorroads,0,0 "LINESTRING (1479375.994610418565571 6891635.010619860142469,1479355.719016854884103 6891632.650036015547812,1479354.972561499569565 6891634.887992111966014,1479352.901147891534492 6891636.420839112251997,1479350.960363967344165 6891637.417189817875624,1479346.481631841277704 6891681.977185339666903)",194,footway,0,0,0,minorroads,0,0 "LINESTRING (1479310.493153058923781 6891678.712203078903258,1479316.203536522807553 6891629.262446126900613,1479319.264003475895151 6891603.648633949458599)",195,footway,0,0,0,minorroads,0,0 "LINESTRING (1479383.543140193447471 6891577.667022745124996,1479380.146768330130726 6891605.043519286438823)",196,footway,0,0,0,minorroads,0,0 "LINESTRING (1479596.926733975531533 6891723.011840671300888,1479608.944665183546022 6891709.660609316080809)",198,pedestrian,0,0,0,minorroads,0,0 "LINESTRING (1479434.777969588991255 6891585.561131720431149,1479482.392490514554083 6891545.140309852547944)",199,pedestrian,0,0,0,minorroads,0,0 "LINESTRING (1478963.578027048613876 6890644.591964773833752,1478967.31030381959863 6890667.658501483500004)",205,service,0,0,0,minorroads,0,0 "LINESTRING (1479401.150155866052955 6890069.130116234533489,1479393.65761024877429 6890062.678090267814696,1479327.960208358010277 6889996.932087614201009)",207,footway,0,0,0,minorroads,0,0 "LINESTRING (1478944.664714500773698 6890030.004252052865922,1478958.623429630184546 6890021.192146747373044,1478992.307227504905313 6890002.081405482254922,1479026.690827270271257 6889979.154706041328609,1479038.44749910547398 6889972.901981176808476,1479054.701564449816942 6889964.273841869086027,1479095.672632720787078 6889942.527293800376356,1479155.734296685084701 6889930.205808525905013,1479283.12623362406157 6889933.470080768689513)",209,footway,0,0,0,minorroads,0,0 "LINESTRING (1478877.884952347259969 6890822.336283389478922,1478872.855709397001192 6890815.577114805579185,1478875.6642476671841 6890806.963398001156747,1478885.032262367196381 6890797.506712420843542,1478891.367802187101915 6890795.698141722939909,1478897.694011319894344 6890797.568019906058908,1478901.986129605211318 6890803.192983939312398,1478902.536640429403633 6890810.013449692167342,1478892.618114905199036 6890821.953110418282449,1478886.105291939806193 6890826.198667988181114,1478877.884952347259969 6890822.336283389478922)",210,footway,0,0,0,minorroads,0,0 "LINESTRING (1478892.618114905199036 6890821.953110418282449,1478928.056082863127813 6890850.737115069292486)",211,footway,0,0,0,minorroads,0,0 "LINESTRING (1479085.175604299176484 6891455.347645132802427,1479072.933736484264955 6891457.646864391863346,1479028.836886418517679 6891467.809421390295029,1478969.717622337630019 6891487.352836342528462,1478948.182385357562453 6891496.258518047630787,1478911.130207701120526 6891514.514429982751608,1478900.287943673552945 6891515.526093818247318,1478903.68431553686969 6891509.823990211822093,1478916.467363483039662 6891497.224194971844554,1478942.947867186041549 6891484.103261307813227,1478965.024284297600389 6891474.477169387042522,1478945.691090611740947 6891413.149424462579191,1478898.029916227562353 6891434.746669919230044,1478844.462413848377764 6891469.14297055080533,1478793.47951313527301 6891520.001941416412592,1478771.944276155205444 6891540.035988440737128,1478758.237489708466455 6891558.935789356008172,1478748.08569689001888 6891566.799223258160055,1478780.789772106800228 6891606.361762794665992)",212,footway,0,0,0,minorroads,0,0 "LINESTRING (1478965.024284297600389 6891474.477169387042522,1479027.586573694832623 6891454.795832606963813,1479057.939314550952986 6891448.388678853400052,1479088.058788104215637 6891445.828884401358664)",213,footway,0,0,0,minorroads,0,0 "LINESTRING (1478945.691090611740947 6891413.149424462579191,1479018.255881766555831 6891391.138380916789174,1479047.694214809220284 6891380.316817537881434)",214,footway,0,0,0,minorroads,0,0 "LINESTRING (1478991.019592018099502 6890132.409286628477275,1479002.59898070525378 6890131.244540799409151,1479038.382184260990471 6890132.45526344049722,1479064.209539529168978 6890130.202399942092597)",217,footway,0,0,0,minorroads,0,0 "LINESTRING (1479317.873730378691107 6890999.440786958672106,1479295.08818068052642 6891012.499620502814651,1479265.976421855157241 6891029.635539894923568,1479237.909700526855886 6891045.959146456792951)",219,service,0,0,0,minorroads,0,0 "LINESTRING (1479265.976421855157241 6891029.635539894923568,1479332.858821619069204 6891062.006893378682435,1479344.43821030925028 6891037.498456098139286,1479352.322644991567358 6891022.952833535149693)",220,service,0,0,0,minorroads,0,0 "LINESTRING (1479295.08818068052642 6891012.499620502814651,1479344.43821030925028 6891037.498456098139286)",221,service,0,0,0,minorroads,0,0 "LINESTRING (1479352.742526129353791 6891350.626569028012455,1479161.827238515252247 6891268.591924785636365)",222,footway,0,0,0,minorroads,0,0 "LINESTRING (1479401.896611221367493 6891423.296597149223089,1479090.344807628775015 6891287.537070981226861)",223,footway,0,0,0,minorroads,0,0 "LINESTRING (1479465.690551959211007 6891463.594181259162724,1479453.709943517111242 6891455.914785820990801,1479425.409954888978973 6891447.760226246900856,1479401.896611221367493 6891423.296597149223089,1479373.596622593235224 6891386.126125248149037,1479360.179087595082819 6891365.494671508669853,1479352.742526129353791 6891350.626569028012455,1479336.908341917209327 6891318.483971345238388,1479321.559353690594435 6891301.699976419098675,1479307.162096040323377 6891284.670771724544466,1479300.210730554070324 6891269.067085674032569,1479294.696291621308774 6891260.682799293659627,1479263.55977264419198 6891258.99674641340971,1479232.815142731880769 6891257.326021636836231,1479201.156105006346479 6891259.012074161320925,1479161.827238515252247 6891268.591924785636365,1479090.344807628775015 6891287.537070981226861)",224,footway,0,0,0,minorroads,0,0 "LINESTRING (1479037.383800225798041 6892032.27303178049624,1479057.752700712764636 6891999.744479458779097,1479091.725750033278018 6891954.630875697359443,1479132.724810380022973 6891911.878190251998603,1479161.743262287694961 6891876.376312308013439,1479180.040749166859314 6891847.818568326532841,1479192.609191199066117 6891807.42708539031446,1479193.822181151015684 6891798.107181905768812,1479196.416113504674286 6891778.103149225004017,1479199.467249767621979 6891738.493778496980667,1479205.933419276727363 6891698.869274341501296,1479220.787880830932409 6891680.980829110369086,1479229.549400552175939 6891674.880065969191492,1479240.596939800772816 6891673.745753734372556,1479255.068842985900119 6891677.547233199700713,1479267.637285018106923 6891689.365553838200867,1479275.447074165800586 6891698.256130744703114)",225,footway,0,0,0,minorroads,0,0 "LINESTRING (1479229.549400552175939 6891674.880065969191492,1479216.271825936157256 6891656.777074966579676,1479171.10194629477337 6891595.187356659211218)",226,footway,0,0,0,minorroads,0,0 "LINESTRING (1479051.342515352414921 6892039.569746791385114,1479074.529284805525094 6892052.660928558558226)",227,footway,0,0,0,minorroads,0,0 "LINESTRING (1479558.661566364113241 6892730.994200934655964,1479535.32550584175624 6892695.871967596933246,1479509.208899124991149 6892661.945660936646163,1479484.967761487932876 6892632.250678585842252,1479458.813832005020231 6892615.448610161431134,1479373.167410765308887 6892570.024945888668299,1479300.957185906590894 6892532.435256485827267,1479252.782823463901877 6892527.974175323732197,1479204.001966048264876 6892521.336213783361018,1479171.325882901670411 6892514.928209916688502,1479142.64333590422757 6892504.442396434023976,1479120.930815778905526 6892491.151187589392066,1479098.593139297328889 6892472.555796183645725,1479066.934101571794599 6892412.370182883925736,1479042.375720410142094 6892360.26384799182415,1479040.780172086087987 6892331.70438495837152,1479040.462928561726585 6892294.161799130029976,1479080.986123618902639 6892292.26091337017715,1479193.756866306532174 6892289.164310114458203,1479216.402455622563139 6892282.403908143751323,1479220.871857058489695 6892272.516255625523627,1479224.174922001315281 6892272.577574365772307,1479229.232157027581707 6892272.286310367286205,1479219.024380057584494 6892224.105258090421557,1479209.292468371335417 6892223.185482617467642,1479204.58046894823201 6892214.079711130820215,1479197.18123024282977 6892205.249881953001022,1479179.490238342434168 6892197.692414339631796,1479135.346734812250361 6892196.512039718218148,1479051.137240131385624 6892183.788532035425305,1479045.072290376992896 6892170.589830297976732,1479049.149802750907838 6892124.877421021461487,1479058.424510530428961 6892087.581070398911834,1479071.254211938474327 6892057.964856051839888,1479074.529284805525094 6892052.660928558558226,1479095.532672341447324 6892018.691348779946566,1479112.467878199182451 6891998.625450547784567,1479173.910484564956278 6891937.309035980142653,1479213.509941124590114 6891907.87732311245054,1479228.280426451237872 6891875.471905553713441,1479240.065090362215415 6891839.295718602836132,1479248.854602162260562 6891812.393617324531078,1479261.460366960382089 6891762.237917317077518,1479267.515986024634913 6891728.959353854879737,1479271.630821167491376 6891712.113187463954091,1479275.447074165800586 6891698.256130744703114,1479285.748158059082925 6891687.204225420951843,1479299.772188033210114 6891680.474986762739718,1479310.493153058923781 6891678.712203078903258,1479332.560239477548748 6891680.720243656076491,1479334.09980364702642 6891680.858200660906732)",228,footway,0,0,0,minorroads,0,0 "LINESTRING (1479414.754304702393711 6890467.663866545073688,1479442.774372574873269 6890432.367605943232775,1479416.368514406494796 6890410.742400817573071)",229,footway,0,0,0,minorroads,0,0 "LINESTRING (1479416.368514406494796 6890410.742400817573071,1479439.378000711556524 6890381.009754501283169)",230,steps,0,0,0,minorroads,0,0 "LINESTRING (1479051.137240131385624 6892183.788532035425305,1479170.150215718429536 6892218.908528059720993)",231,footway,0,0,0,minorroads,0,0 "LINESTRING (1479506.027133178431541 6892443.306083716452122,1479501.464424824807793 6892426.182480680756271,1479502.845367229077965 6892406.974041910842061,1479509.358190197264776 6892389.145340526476502,1479520.33108390844427 6892376.789445140399039,1479537.816800587577745 6892362.747284359298646,1479546.046470873057842 6892354.515155650675297,1479550.012014943640679 6892345.179288049228489,1479549.91870802314952 6892327.672649290412664,1479550.151975322980434 6892285.929740659892559,1479551.467602882767096 6892272.914827428758144)",232,footway,0,0,0,minorroads,0,0 "LINESTRING (1478902.919198798481375 6890060.471222716383636,1478914.64787855790928 6890058.708794203586876,1478926.861754297045991 6890049.774053867906332,1478938.058584614889696 6890042.172635945491493,1478948.424983350094408 6890035.276194448582828)",233,path,0,0,0,minorroads,0,0 "LINESTRING (1479491.368616155348718 6890886.081193597055972,1479515.021920202299953 6890883.996716304682195,1479588.379820165457204 6890877.528709341771901,1479587.465412357822061 6890868.70034805405885,1479683.07701257779263 6890859.764707515016198)",234,service,0,0,0,minorroads,0,0 "LINESTRING (1479098.593139297328889 6892472.555796183645725,1479020.635208208812401 6892437.128092028200626,1478995.227734078653157 6892424.526843289844692,1478961.786534196697176 6892387.259762216359377,1478945.541799542261288 6892336.609921579249203,1478949.302068391814828 6892240.109368146397173)",237,footway,0,0,0,minorroads,0,0 "LINESTRING (1479433.219744036672637 6891903.615865284577012,1479430.597819601651281 6891902.512178732082248,1479418.225322103127837 6891896.365260567516088,1479414.045172115787864 6891896.319273664616048,1479410.387540879659355 6891897.668222876265645,1479407.756285757524893 6891900.350793006829917,1479391.679503558436409 6891935.208957064896822,1479391.408913492690772 6891939.347799245268106,1479394.180128997191787 6891944.268425508402288,1479406.673925491981208 6891951.089859411120415,1479410.060966662364081 6891952.4388178139925)",238,footway,0,0,0,minorroads,0,0 "LINESTRING (1479406.673925491981208 6891951.089859411120415,1479430.597819601651281 6891902.512178732082248)",239,footway,0,0,0,minorroads,0,0 "LINESTRING (1479452.32900111284107 6891899.875594805926085,1479453.635297982487828 6891897.116379988379776)",240,steps,0,0,0,minorroads,0,0 "LINESTRING (1479410.060966662364081 6891952.4388178139925,1479414.446391870733351 6891954.676862930878997)",241,steps,0,0,0,minorroads,0,0 "LINESTRING (1479419.643587276339531 6891968.243108676746488,1479421.313781131990254 6891964.763402775861323)",242,steps,0,0,0,minorroads,0,0 "LINESTRING (1479437.483870248775929 6891905.623962035402656,1479433.219744036672637 6891903.615865284577012)",243,steps,0,0,0,minorroads,0,0 "LINESTRING (1479414.446391870733351 6891954.676862930878997,1479424.038343177642673 6891959.060980518348515)",244,footway,0,0,0,minorroads,0,0 "LINESTRING (1479447.374403697205707 6891910.237987771630287,1479437.483870248775929 6891905.623962035402656)",245,footway,0,0,0,minorroads,0,0 "LINESTRING (1479421.313781131990254 6891964.763402775861323,1479424.038343177642673 6891959.060980518348515,1479447.374403697205707 6891910.237987771630287,1479452.32900111284107 6891899.875594805926085)",246,footway,0,0,0,minorroads,0,0 "LINESTRING (1479450.229595429031178 6891990.2404032535851,1479444.976415869081393 6891987.649777974933386,1479416.667096548015252 6891974.466727374121547,1479419.643587276339531 6891968.243108676746488)",247,footway,0,0,0,minorroads,0,0 "LINESTRING (1479453.635297982487828 6891897.116379988379776,1479455.45478290761821 6891893.330125654116273,1479482.747056807857007 6891906.22179246135056,1479488.485432347515598 6891908.93502342607826)",248,footway,0,0,0,minorroads,0,0 "LINESTRING (1479571.146032168995589 6890409.056526175700128,1479584.125024646287784 6890393.883670332841575)",249,footway,0,0,0,minorroads,0,0 "LINESTRING (1479124.859037083573639 6890282.417699187062681,1479141.76625086273998 6890264.731641499325633,1479190.089904377469793 6890264.731641499325633,1479210.813371154945344 6890280.333378406241536,1479221.870241096476093 6890288.900553298182786)",250,service,0,0,0,minorroads,0,0 "LINESTRING (1478931.471116109518334 6891338.793418453074992,1478931.601745795924217 6891332.723570773378015)",251,footway,0,0,0,minorroads,0,0 "LINESTRING (1479038.970017851097509 6891272.239934901706874,1479061.484977483516559 6891259.410595729015768)",253,footway,0,0,0,minorroads,0,0 "LINESTRING (1479300.518643385730684 6891457.738833180628717,1479254.406363858142868 6891450.381333781406283,1479213.62190942815505 6891446.33471198566258,1479156.919294558465481 6891446.212087113410234,1479127.704898122698069 6891446.917180147953331,1479088.058788104215637 6891445.828884401358664,1479094.702240758575499 6891400.411828546784818,1479047.694214809220284 6891380.316817537881434,1478962.775587541749701 6891344.388105345889926,1478953.202297617914155 6891347.637623907066882)",254,footway,0,0,0,minorroads,0,0 "LINESTRING (1479263.55977264419198 6891258.99674641340971,1479214.013798487139866 6891247.240369359962642,1479177.754729644861072 6891220.830734963528812,1479149.939936996437609 6891199.249391805380583,1479148.055137223796919 6891171.123225434683263,1479200.400318960892037 6891168.364260731264949,1479207.734242819016799 6891139.14994818624109,1478898.141884530894458 6890996.773844690993428,1478872.053269889904186 6891032.103237913921475,1478847.513550108298659 6891072.260914628393948,1478835.010422920808196 6891095.865138819441199,1478857.982586456928402 6891105.383485198020935,1478904.402778816176578 6891101.950135124847293,1478961.124055066145957 6891130.857762338593602,1478959.257916682166979 6891138.521519755013287,1478997.224502151831985 6891155.550414878875017,1479010.977942057419568 6891164.624332321807742,1479041.769225431373343 6891166.509623884223402,1479062.08214176655747 6891176.656485269777477,1479078.64411994535476 6891173.376380642876029,1479096.782985062338412 6891175.09307074919343,1479103.650374323595315 6891176.487881724722683,1479123.655377824557945 6891171.812966760247946,1479148.055137223796919 6891171.123225434683263)",255,footway,0,0,0,minorroads,0,0 "LINESTRING (1479349.467453256715089 6892329.95678826700896,1479339.194361444795504 6892336.594591772183776,1479340.202076172921807 6892354.714443584904075,1479352.994454809231684 6892359.236747993156314)",256,service,0,0,0,minorroads,0,0 "LINESTRING (1479593.00784336659126 6892275.26026960555464,1479592.009459325810894 6892313.845190985128284,1479549.91870802314952 6892327.672649290412664)",257,footway,0,0,0,minorroads,0,0 "LINESTRING (1479592.009459325810894 6892313.845190985128284,1479591.281665356131271 6892346.405673980712891,1479550.012014943640679 6892345.179288049228489)",258,footway,0,0,0,minorroads,0,0 "LINESTRING (1479007.749522649217397 6892003.975329895503819,1479015.932539475848898 6891989.627237430773675)",259,steps,0,0,0,minorroads,0,0 "LINESTRING (1478994.0800589711871 6892008.788691441528499,1478986.037002523662522 6892003.868025694973767,1479006.424564396496862 6891979.418033379130065,1479038.531475333031267 6891954.814824637956917,1479057.276835423195735 6891941.953738008625805,1479083.216158994706348 6891928.663459150120616,1479132.724810380022973 6891911.878190251998603,1479185.1912911105901 6891905.991857678629458,1479213.509941124590114 6891907.87732311245054)",261,footway,0,0,0,minorroads,0,0 "LINESTRING (1479344.391556847607717 6891681.793242639862001,1479346.481631841277704 6891681.977185339666903,1479371.403909988934174 6891684.245812286622822)",262,footway,0,0,0,minorroads,0,0 "LINESTRING (1478964.949638760183007 6892198.842130050994456,1478992.540494801709428 6892200.957607388496399,1479023.751659313682467 6892197.355164431966841)",263,steps,0,0,0,minorroads,0,0 "LINESTRING (1479332.560239477548748 6891680.720243656076491,1479337.094955755397677 6891635.807700280100107,1479335.769997502909973 6891634.887992111966014,1479334.062480878317729 6891633.339816934429109,1479333.260041374014691 6891630.994562047533691,1479316.203536522807553 6891629.262446126900613)",264,footway,0,0,0,minorroads,0,0 "LINESTRING (1478922.522982550086454 6892195.055733603425324,1478944.244833362754434 6892195.132381286472082,1478964.949638760183007 6892198.842130050994456)",265,footway,0,0,0,minorroads,0,0 "LINESTRING (1478944.244833362754434 6892195.132381286472082,1478948.518290270585567 6892151.075413181446493,1478957.111857536714524 6892107.018686534836888,1478968.99915905832313 6892072.619656547904015,1478994.415963881416246 6892026.73918299935758)",266,footway,0,0,0,minorroads,0,0 "LINESTRING (1479034.351325348485261 6892030.126940387301147,1479031.645424688700587 6892028.762639727443457,1479025.907049149041995 6892025.604821115732193,1478994.0800589711871 6892008.788691441528499)",267,steps,0,0,0,minorroads,0,0 "LINESTRING (1479023.751659313682467 6892197.355164431966841,1479051.137240131385624 6892183.788532035425305)",269,footway,0,0,0,minorroads,0,0 "LINESTRING (1479015.932539475848898 6891989.627237430773675,1479030.637709960807115 6891967.752577354200184,1479038.531475333031267 6891954.814824637956917)",270,footway,0,0,0,minorroads,0,0 "LINESTRING (1478986.037002523662522 6892003.868025694973767,1478968.961836289614439 6891994.609211077913642)",271,footway,0,0,0,minorroads,0,0 "LINESTRING (1479175.076821058290079 6892272.807519636116922,1479168.890572307631373 6892273.788619532249868)",272,steps,0,0,0,minorroads,0,0 "LINESTRING (1478966.694478150689974 6892266.047131421044469,1478949.302068391814828 6892240.109368146397173)",273,footway,0,0,0,minorroads,0,0 "LINESTRING (1479176.037882324540988 6892219.889621376991272,1479174.98351413779892 6892237.625969672575593)",274,footway,0,0,0,minorroads,0,0 "LINESTRING (1479175.095482441131026 6892253.338843335397542,1479175.076821058290079 6892272.807519636116922)",275,footway,0,0,0,minorroads,0,0 "LINESTRING (1479017.65871748351492 6892284.044186560437083,1478966.694478150689974 6892266.047131421044469)",276,steps,0,0,0,minorroads,0,0 "LINESTRING (1479168.890572307631373 6892273.788619532249868,1479040.462928561726585 6892294.161799130029976)",277,footway,0,0,0,minorroads,0,0 "LINESTRING (1479170.150215718429536 6892218.908528059720993,1479176.037882324540988 6892219.889621376991272)",278,steps,0,0,0,minorroads,0,0 "LINESTRING (1479176.065874400548637 6891773.136638476513326,1479193.822181151015684 6891798.107181905768812)",279,steps,0,0,0,minorroads,0,0 "LINESTRING (1479380.146768330130726 6891605.043519286438823,1479379.689564426196739 6891608.752995756454766)",280,steps,0,0,0,minorroads,0,0 "LINESTRING (1479319.525262851500884 6891600.613609550520778,1479323.005610939580947 6891573.329098201356828)",281,footway,0,0,0,minorroads,0,0 "LINESTRING (1479319.264003475895151 6891603.648633949458599,1479319.525262851500884 6891600.613609550520778)",282,steps,0,0,0,minorroads,0,0 "LINESTRING (1479379.689564426196739 6891608.752995756454766,1479375.994610418565571 6891635.010619860142469,1479371.403909988934174 6891684.245812286622822)",283,footway,0,0,0,minorroads,0,0 "LINESTRING (1479112.365240588784218 6891776.922836208716035,1479157.544450920075178 6891796.972852283157408,1479167.155063610058278 6891794.903467575088143,1479173.182690595509484 6891787.484344554133713,1479176.065874400548637 6891773.136638476513326,1479180.367323384154588 6891714.09057914186269,1479184.668772364966571 6891697.750287312082946,1479189.819314308930188 6891682.835584651678801,1479216.271825936157256 6891656.777074966579676)",284,footway,0,0,0,minorroads,0,0 "LINESTRING (1479098.593139297328889 6892472.555796183645725,1479118.924717012792826 6892513.39519539475441,1479148.503010437591001 6892548.945877370424569,1479229.493416403187439 6892660.412618377245963,1479234.933209798531607 6892661.685043681412935)",286,footway,0,0,0,minorroads,0,0 "LINESTRING (1479070.41444966266863 6892513.732458561658859,1479068.343036052072421 6892505.88342846557498)",287,footway,0,0,0,minorroads,0,0 "LINESTRING (1479074.566607571439818 6892534.336199035868049,1479070.41444966266863 6892513.732458561658859)",288,steps,0,0,0,minorroads,0,0 "LINESTRING (1477868.43471504189074 6891004.698037818074226,1477945.356939326506108 6891019.718773512169719,1478003.72041735611856 6891029.390302868559957,1478039.289015 6891037.053963554091752,1478070.117621140554547 6891046.449621527455747,1478085.634561822284013 6891052.51925307046622,1478099.238710658624768 6891059.35525771882385,1478109.306527255102992 6891066.405851566232741,1478116.089940288802609 6891073.793654355220497,1478123.5731552161742 6891084.292929342016578,1478128.854326849337667 6891095.068111938424408,1478131.298968139104545 6891104.89300652872771,1478132.073415567399934 6891115.208392390981317,1478133.986207413021475 6891124.680779177695513,1478132.25069871544838 6891137.371955673210323,1478130.169954414712265 6891151.105425273999572,1478121.949614822166041 6891169.866363619454205,1478117.396237158449367 6891177.591468608006835,1478104.967755505582318 6891189.056519051082432,1478093.948208335554227 6891197.226143856532872,1478082.126221658429131 6891203.740390969440341,1478067.458373942412436 6891210.99037102330476,1478049.823366191005334 6891215.036874360404909,1478034.912920482223853 6891216.998816108331084,1478020.459678680170327 6891214.347129329107702,1478000.622627634555101 6891210.745128460228443,1477978.45290360529907 6891202.43754112534225,1477942.063205073587596 6891174.296036006882787,1477908.155470594996586 6891145.7101308433339,1477869.451760460156947 6891113.706299720332026,1477831.671788828447461 6891088.967793419025838,1477825.746799453394488 6891083.940398719161749)",291,service,0,0,1,minorroads,0,0 "LINESTRING (1478121.949614822166041 6891169.866363619454205,1478201.437779386993498 6891217.397335584275424)",292,service,0,0,0,minorroads,0,0 "LINESTRING (1477908.155470594996586 6891145.7101308433339,1478070.117621140554547 6891046.449621527455747)",293,service,0,0,0,minorroads,0,0 "LINESTRING (1477942.063205073587596 6891174.296036006882787,1478116.089940288802609 6891073.793654355220497)",294,service,0,0,0,minorroads,0,0 "LINESTRING (1477978.45290360529907 6891202.43754112534225,1478132.073415567399934 6891115.208392390981317)",295,service,0,0,0,minorroads,0,0 "LINESTRING (1478502.968419844750315 6890668.378852861002088,1478491.659621223341674 6890662.079612115398049,1478357.717538550263271 6890547.713233261369169,1478130.104639569995925 6890358.679689854383469,1477868.845265486976132 6890131.995495325885713,1477851.947382397949696 6890112.623956055380404,1477704.587764723692089 6890002.725070449523628,1477682.39004861866124 6889990.909228938631713,1477667.638224675087258 6889991.169759628362954,1477650.339121833909303 6890011.138695799745619,1477637.518751118797809 6890024.67101151868701,1477629.102466995362192 6890037.329800856299698,1477626.90975439385511 6890045.283699262887239,1477621.115394705208018 6890055.337192909792066,1477617.560401076916605 6890072.379119392484426)",297,service,0,0,0,minorroads,0,0 "LINESTRING (1478249.052300312556326 6891837.149678730405867,1478207.735996438423172 6891845.090029121376574)",298,footway,0,0,0,minorroads,0,0 "LINESTRING (1478305.754915182245895 6892111.878097912296653,1478297.767842886503786 6892113.47235338576138,1478285.376684002345428 6892102.711135057732463,1478249.565488368039951 6891961.345014753751457,1478246.71029663621448 6891935.132311857305467,1478251.254343609558418 6891925.459692790172994,1478266.19278139132075 6891904.336327421478927)",299,service,0,0,1,minorroads,0,0 "LINESTRING (1478245.217385928379372 6892482.137093056924641,1478249.798755665076897 6892400.458819705992937,1478255.873036114964634 6892389.436608762480319,1478265.017114208079875 6892376.636146306991577,1478275.60744954738766 6892369.308465602807701,1478290.592540793586522 6892365.292040934786201,1478302.666456150589511 6892364.924124269746244,1478313.993916155071929 6892364.556207627058029,1478330.81715370924212 6892374.796560563147068,1478343.973429331788793 6892389.068690993823111,1478352.007155086379498 6892407.709879103116691,1478350.187670158455148 6892440.240082282572985,1478345.708938032155856 6892489.756148488260806)",300,service,0,0,0,minorroads,0,0 "LINESTRING (1477998.047356663970277 6891324.661103413440287,1478020.413025221321732 6891332.049143535085022,1478049.879350342787802 6891330.792256562970579,1478086.632945860503241 6891324.339218001812696,1478122.32284249830991 6891312.122909786179662,1478158.218014360172674 6891292.917132769711316,1478184.875801208429039 6891269.342985554598272)",301,service,0,0,1,minorroads,0,0 "LINESTRING (1477965.529895279556513 6891284.946672138758004,1477998.047356663970277 6891324.661103413440287,1478031.899106987984851 6891366.506316591985524,1478044.019675809424371 6891373.311932296492159,1478056.233551548561081 6891375.8870316343382,1478074.745644338661805 6891370.552898212336004,1478103.446852721972391 6891365.862542429938912,1478147.40374241117388 6891349.476974621415138,1478163.508516683243215 6891340.49481596890837,1478174.164166870061308 6891331.252093238756061,1478176.888728912686929 6891309.486519484780729,1478184.875801208429039 6891269.342985554598272,1478190.875436118105426 6891248.466587806120515)",302,service,0,0,1,minorroads,0,0 "LINESTRING (1478298.215716100297868 6890783.32936832588166,1478344.18803524854593 6890790.609622975811362,1478360.563399586360902 6890795.406931225210428,1478380.503088242607191 6890801.30777757242322,1478412.759290251415223 6890816.649998326785862,1478421.474156513577327 6890821.386014446616173)",303,service,0,0,0,minorroads,0,0 "LINESTRING (1477950.162245669867843 6891274.998935245908797,1477965.529895279556513 6891284.946672138758004,1478000.743926630821079 6891290.280748765915632,1478023.613452556543052 6891292.687215525656939,1478047.994550570147112 6891291.46099033113569,1478072.963482179446146 6891288.364772556349635,1478095.851669488241896 6891280.823494642972946,1478111.704515080433339 6891274.615740698762238,1478129.106255532009527 6891265.219816066324711,1478142.495798451593146 6891260.667471537366509,1478156.566481890156865 6891257.203399649821222,1478178.49360792664811 6891255.563330735079944,1478190.875436118105426 6891248.466587806120515,1478201.437779386993498 6891217.397335584275424)",304,service,0,0,1,minorroads,0,0 "LINESTRING (1478600.64210298541002 6890542.839440878480673,1478535.252613929333165 6890495.358435696922243,1478534.422182349255309 6890488.415626615285873,1478532.957263714633882 6890483.311976070515811,1478532.593366731191054 6890467.096795568242669,1478530.577937269350514 6890451.785894272848964,1478523.999799459474161 6890439.785478501580656,1478517.244378498755395 6890430.773683805018663,1478478.139448614558205 6890386.052035748027265,1478464.246048329630867 6890364.151086367666721,1478458.572987634688616 6890346.725391098298132,1478458.750270782737061 6890330.817005697637796)",305,footway,0,0,0,minorroads,0,0 "LINESTRING (1478340.343790168641135 6890286.463735183700919,1478368.121260051382706 6890284.593975868076086,1478383.470248277997598 6890287.291333702392876,1478397.167704032035545 6890294.509835544042289,1478446.153836674522609 6890326.924207131378353,1478458.750270782737061 6890330.817005697637796,1478503.892158345319331 6890335.016325954347849,1478531.492345079779625 6890335.338171758688986,1478549.220659751677886 6890332.02775839343667,1478568.049996066605672 6890323.322603833861649,1478581.206271691946313 6890309.513918485492468,1478611.904248145408928 6890269.283422131091356,1478624.873909929767251 6890255.781346369534731,1478640.418842690298334 6890243.183516338467598,1478661.786127212457359 6890232.056982149370015,1478685.187502576736733 6890226.662304446101189,1478711.509384517557919 6890225.466893401928246,1478734.892098498763517 6890232.961204051040113,1478757.192452211398631 6890244.976636931300163,1478770.059476385358721 6890257.712402357719839,1478779.343514857813716 6890266.785306516103446)",306,footway,0,0,0,minorroads,0,0 "LINESTRING (1478306.762629910372198 6890306.402752917259932,1478312.267738147405908 6890297.314478134736419,1478325.470667231595144 6890295.873841928318143,1478340.343790168641135 6890286.463735183700919)",307,steps,0,0,0,minorroads,0,0 "LINESTRING (1478502.221964489435777 6891308.628160036168993,1478503.920150421094149 6891293.882785264402628,1478500.98098246450536 6891258.506258369423449,1478495.905086055397987 6891238.197014091536403,1478490.232025357428938 6891222.68538433779031,1478483.513927168212831 6891211.634132778272033,1478480.528105752775446 6891201.47189961373806,1478468.724780458724126 6891168.793432957492769,1478460.224520107498392 6891146.093319251202047,1478452.750635873060673 6891121.906502928584814,1478444.203722060192376 6891086.377458564005792,1478440.9659719618503 6891055.921927305869758,1478442.906755883479491 6891021.588703794404864,1478448.719776954967529 6890994.842611184343696,1478458.880900469142944 6890968.127261942252517,1478497.388666070066392 6890895.277423369698226,1478576.074391131056473 6890758.086094295606017,1478645.634699478745461 6890649.848983596079051,1478661.468883685301989 6890629.219419246539474,1478670.46367070893757 6890619.165207961574197,1478673.300201055128127 6890616.375779623165727,1478677.396374812116846 6890611.777822931297123)",308,cycleway,0,0,0,minorroads,0,0 "LINESTRING (1478340.343790168641135 6890286.463735183700919,1478296.209617334185168 6890250.693169337697327)",309,footway,0,0,0,minorroads,0,0 "LINESTRING (1478828.898819707566872 6890880.302901268936694,1478825.987643823958933 6890825.386340913362801,1478839.097265987657011 6890775.359412892721593,1478842.60560615430586 6890756.859950644895434)",310,footway,0,0,0,minorroads,0,0 "LINESTRING (1478828.898819707566872 6890880.302901268936694,1478877.884952347259969 6890822.336283389478922)",311,footway,0,0,0,minorroads,0,0 "LINESTRING (1478454.476813877699897 6891793.539206840097904,1478436.776491281576455 6891737.267485307529569,1478426.895288528874516 6891709.308051269501448)",314,service,0,0,1,minorroads,0,0 "LINESTRING (1478656.850191182689741 6891252.574420961551368,1478692.222844290314242 6891238.886761170811951,1478723.359363270457834 6891253.156875086948276)",316,footway,0,0,0,minorroads,0,0 "LINESTRING (1478466.158840178279206 6891481.390173728577793,1478483.747194468043745 6891486.157237827777863,1478497.845869976794347 6891492.978283021599054,1478514.510485763195902 6891508.551747220568359,1478523.122714417753741 6891524.799684935249388,1478528.851759261917323 6891543.914046152494848,1478534.506158574018627 6891569.711608147248626,1478542.959765463601798 6891648.515012176707387)",319,service,0,0,0,minorroads,0,0 "LINESTRING (1478186.172767387935892 6892076.850545356050134,1478159.738917143782601 6891950.645316352136433,1478153.524676317116246 6891922.393888857215643)",324,service,0,0,1,minorroads,0,0 "LINESTRING (1477992.150359361898154 6891880.024598241783679,1478001.098492924124002 6891901.362505401484668,1478010.111941330833361 6891922.884417406283319,1478034.241110664559528 6892064.219202788546681)",325,service,0,0,0,minorroads,0,0 "LINESTRING (1478153.524676317116246 6891922.393888857215643,1478129.796726738568395 6891820.855123235844076)",326,service,0,0,1,minorroads,0,0 "LINESTRING (1478475.106973737478256 6892349.655597596429288,1478483.35530540603213 6892391.046249195933342)",327,service,0,0,1,minorroads,0,0 "LINESTRING (1478523.77586285257712 6892467.619516485370696,1478535.821786136599258 6892493.496693428605795,1478543.360985215753317 6892518.883388736285269,1478545.749642353737727 6892539.471812217496336,1478544.443345481297001 6892557.070893596857786,1478539.078197620576248 6892576.92356213927269)",328,service,0,0,0,minorroads,0,0 "LINESTRING (1478418.469673712505028 6892336.287995646707714,1478428.005640867631882 6892332.746811239980161,1478435.218265729257837 6892330.96855472587049,1478454.252877273596823 6892323.31899023335427,1478520.995316658169031 6892314.458381541073322,1478516.460600377526134 6892285.055947243236005,1478513.745369025040418 6892253.890710676088929,1478514.221234314609319 6892241.45837504696101)",331,service,0,0,0,minorroads,0,0 "LINESTRING (1478129.796726738568395 6891820.855123235844076,1478087.482038826216012 6891839.403020612895489,1478076.089263980044052 6891843.971021738834679,1477992.150359361898154 6891880.024598241783679)",332,service,0,0,1,minorroads,0,0 "LINESTRING (1478010.111941330833361 6891922.884417406283319,1478076.369184735696763 6891897.95947330724448,1478085.34531037369743 6891892.333743230439723,1478092.147384793264791 6891886.891964479349554,1478098.258988006506115 6891878.798283461481333,1478103.689450711710379 6891867.148302355781198,1478106.675272129941732 6891858.380169824697077,1478109.614440086763352 6891846.147721174173057)",333,service,0,0,0,minorroads,0,0 "LINESTRING (1478054.423397313337773 6892200.32909594848752,1478083.927045200718567 6892187.697559367865324,1478108.522749131079763 6892177.21217271219939)",336,service,0,0,0,minorroads,0,0 "LINESTRING (1478515.340917346067727 6892220.410827253945172,1478514.398517462657765 6892233.394996258430183,1478514.221234314609319 6892241.45837504696101)",337,service,0,0,0,minorroads,0,0 "LINESTRING (1478550.844200145918876 6890545.552211744710803,1478554.819074909435585 6890541.383434292860329,1478590.24771217443049 6890558.411064649000764)",339,steps,0,0,0,minorroads,0,0 "LINESTRING (1478292.038798042573035 6890286.525038770399988,1478306.762629910372198 6890306.402752917259932,1478342.517841390101239 6890336.334361232817173,1478380.587064470164478 6890360.65674867015332,1478421.67010104469955 6890401.592703618109226,1478455.680473136715591 6890423.769625853747129,1478497.174060156103224 6890463.020016191527247,1478511.655294034164399 6890478.330938881263137,1478535.252613929333165 6890495.358435696922243)",340,path,0,0,0,minorroads,0,0 "LINESTRING (1478535.252613929333165 6890495.358435696922243,1478532.378760814433917 6890516.49342564959079,1478534.599465494509786 6890529.290926621295512,1478543.332993139745668 6890539.498289315961301,1478550.844200145918876 6890545.552211744710803)",341,path,0,0,0,minorroads,0,0 "LINESTRING (1478529.290301782777533 6892221.10065860580653,1478531.958879676647484 6892233.824225340969861,1478532.938602331560105 6892274.263839844614267,1478537.202728543663397 6892321.908650481142104,1478524.886215194128454 6892336.410634094849229,1478436.459247756982222 6892347.892667171545327,1478423.265649365726858 6892349.165043009445071)",342,footway,0,0,0,minorroads,0,0 "LINESTRING (1478454.252877273596823 6892323.31899023335427,1478448.91572148585692 6892291.325800381600857,1478445.295413015875965 6892261.908121032640338,1478513.745369025040418 6892253.890710676088929)",343,service,0,0,0,minorroads,0,0 "LINESTRING (1478448.91572148585692 6892291.325800381600857,1478516.460600377526134 6892285.055947243236005)",344,service,0,0,0,minorroads,0,0 "LINESTRING (1478344.18803524854593 6890790.609622975811362,1478348.937357440358028 6890749.870935382321477,1478348.666767374845222 6890739.923860553652048,1478342.881738376105204 6890733.302702005021274,1478318.04343645600602 6890728.520757546648383)",345,service,0,0,0,minorroads,0,0 "LINESTRING (1478684.179787848610431 6890636.959331315010786,1478689.386313944123685 6890639.28896967228502,1478714.775126691674814 6890647.488689003512263,1478731.701001853682101 6890650.768579075112939,1478743.644287527073175 6890644.500005290843546)",347,path,0,0,0,minorroads,0,0 "LINESTRING (1478431.579295878997073 6892449.652710394002497,1478423.079035527771339 6892454.803599508479238,1478359.453047247836366 6892490.139400960877538,1478345.708938032155856 6892489.756148488260806)",348,service,0,0,0,minorroads,0,0 "LINESTRING (1478875.6642476671841 6890806.963398001156747,1478839.097265987657011 6890775.359412892721593)",349,footway,0,0,0,minorroads,0,0 "LINESTRING (1478600.660764371277764 6890704.365850842557847,1478605.186149956192821 6890712.81086390838027,1478611.820271917851642 6890722.313430053181946,1478614.516841887496412 6890727.034063856117427,1478654.694801344303414 6890781.137629794888198,1478763.126772282179445 6890832.75859528966248)",350,service,0,0,0,minorroads,0,0 "LINESTRING (1478614.516841887496412 6890727.034063856117427,1478637.041132210055366 6890686.939418164081872,1478692.633394738193601 6890709.071147411130369)",351,footway,0,0,0,minorroads,0,0 "LINESTRING (1478492.303438970819116 6892407.924498297274113,1478509.257306208834052 6892408.369066645391285,1478526.360464518889785 6892406.008255694061518,1478540.33784103137441 6892401.240646092221141,1478552.645023687975481 6892388.946051742881536,1478560.342844535131007 6892378.199794524349272,1478570.681251191534102 6892353.135470101609826)",353,service,0,0,0,minorroads,0,0 "LINESTRING (1478953.202297617914155 6891347.637623907066882,1478931.471116109518334 6891338.793418453074992,1478901.864830611506477 6891359.991937587969005,1478864.206157973501831 6891384.041518303565681,1478830.662320480914786 6891409.348070020787418,1478812.290188067127019 6891426.132289689965546,1478755.130369296530262 6891480.654421320185065,1478703.251722156070173 6891549.692815471440554,1478689.134385264245793 6891571.535681317560375,1478657.522001 6891627.055148504674435,1478637.796918255276978 6891670.128218493424356,1478618.799629485467449 6891717.401561643928289,1478619.667383834253997 6891757.486018202267587,1478668.280288797570392 6891771.649751598015428,1478672.507092240964994 6891756.075777715072036,1478697.168111018836498 6891710.1971107237041,1478713.935364418663085 6891684.552383543923497,1478733.277888791868463 6891659.076351834461093,1478767.045662891119719 6891621.092382272705436,1478780.789772106800228 6891606.361762794665992,1478810.078814079985023 6891579.583067904226482,1478855.052749193273485 6891541.890711458399892,1478900.287943673552945 6891515.526093818247318)",354,footway,0,0,0,minorroads,0,0 "LINESTRING (1478668.280288797570392 6891771.649751598015428,1478660.134594739647582 6891790.028919039294124,1478649.525598014704883 6891813.849854120984674,1478640.558803069638088 6891829.010061269626021,1478646.213202378945425 6891861.185358035378158,1478648.508552593644708 6891887.934333082288504,1478650.589296894380823 6891930.487613770179451,1478650.160085063660517 6891985.994230893440545,1478651.48504331917502 6892023.887949385680258)",355,footway,0,0,0,minorroads,0,0 "LINESTRING (1478782.749217414064333 6891635.179233017377555,1478773.446517555741593 6891671.001945073716342,1478739.286854397272691 6891804.361326470971107,1478712.246509179938585 6891906.574359148740768,1478678.739994450472295 6892037.714908943511546,1478666.423481103731319 6892094.096039024181664)",356,footway,0,0,0,minorroads,0,0 "LINESTRING (1478755.130369296530262 6891480.654421320185065,1478793.47951313527301 6891520.001941416412592)",357,footway,0,0,0,minorroads,0,0 "LINESTRING (1478773.446517555741593 6891671.001945073716342,1478818.709704117616639 6891683.065513053908944)",358,footway,0,0,0,minorroads,0,0 "LINESTRING (1478767.045662891119719 6891621.092382272705436,1478782.749217414064333 6891635.179233017377555)",359,footway,0,0,0,minorroads,0,0 "LINESTRING (1477846.171684092143551 6889939.00248887296766,1478169.946694119600579 6890214.401686768047512,1478195.494128623511642 6890209.911240221001208)",360,footway,0,0,0,minorroads,0,0 "LINESTRING (1478245.217385928379372 6892482.137093056924641,1478237.435588859487325 6892526.349177302792668,1478234.711026813834906 6892557.270186549983919,1478232.518314209766686 6892588.957829094491899,1478340.996938606491312 6892596.776279703713953)",361,service,0,0,0,minorroads,0,0 "LINESTRING (1478345.708938032155856 6892489.756148488260806,1478245.217385928379372 6892482.137093056924641)",362,service,0,0,0,minorroads,0,0 "LINESTRING (1478036.723074720241129 6891729.495856549590826,1478044.626170785399154 6891741.988715119659901)",363,footway,0,0,0,minorroads,0,0 "LINESTRING (1478321.449139009229839 6892126.425690860487521,1478312.127777771092951 6892118.009851474314928,1478305.754915182245895 6892111.878097912296653,1478300.501735622063279 6892101.944667064584792,1478292.346710877027363 6892075.516895382665098,1478267.685692099155858 6891978.835526627488434)",364,service,0,0,1,minorroads,0,0 "LINESTRING (1478253.503040365641937 6891040.058120541274548,1478253.16713545517996 6891093.259474310092628,1478229.616469018859789 6891186.251565363258123,1478201.437779386993498 6891217.397335584275424)",365,track,0,0,0,minorroads,0,0 "LINESTRING (1478663.092424082104117 6890614.521270107477903,1478670.46367070893757 6890619.165207961574197)",366,footway,0,0,0,minorroads,0,0 "LINESTRING (1478362.765442883595824 6892306.640205512754619,1478358.342694909079 6892292.506188929080963)",367,steps,0,0,0,minorroads,0,0 "LINESTRING (1478318.136743376497179 6892116.154995526187122,1478312.127777771092951 6892118.009851474314928,1478290.126006194157526 6892125.138020876795053)",368,footway,0,0,0,minorroads,0,0 "LINESTRING (1478439.062510809162632 6892244.340345094911754,1478418.786917239660397 6892247.360282902605832)",369,steps,0,0,0,minorroads,0,0 "LINESTRING (1478423.918797800550237 6892177.089536693878472,1478404.315014054765925 6892179.250996824353933)",370,steps,0,0,0,minorroads,0,0 "LINESTRING (1477934.290738694835454 6891718.244636114686728,1477948.034847910283133 6891709.921195707283914,1477965.940445724641904 6891696.585314678959548,1477976.76404836634174 6891682.437042098492384,1477981.336087410105392 6891672.028957143425941,1477988.007532143266872 6891667.445725190453231,1477996.741059794323519 6891667.445725190453231,1478005.073367684613913 6891672.85669831186533,1478008.824305844027549 6891681.593971388414502,1478008.824305844027549 6891692.845140528865159,1478014.64665760868229 6891701.582435327582061,1478025.890141385374591 6891713.247505113482475,1478032.132374287815765 6891720.329329716973007,1478036.723074720241129 6891729.495856549590826,1478027.560335241258144 6891739.060939160175622,1478017.147283044410869 6891743.644211953505874,1478005.073367684613913 6891745.315037799067795,1477993.008783017750829 6891739.474813184700906,1477976.353497921489179 6891744.042757529765368,1477985.926787842530757 6891771.95632619317621)",373,footway,0,0,0,minorroads,0,0 "LINESTRING (1478002.040892810327932 6891541.829398297704756,1478017.091298892628402 6891529.934653213247657,1478018.332280920585617 6891528.96897236444056,1478035.687367916340008 6891514.468445266596973,1478046.73490715934895 6891504.82698876876384,1478070.192266677971929 6891511.939286240376532,1478108.914638193091378 6891556.621212807483971)",374,service,0,0,0,minorroads,0,0 "LINESTRING (1478035.687367916340008 6891514.468445266596973,1478084.262950108153746 6891571.137144286185503)",375,service,0,0,0,minorroads,0,0 "LINESTRING (1478215.200549985514954 6891534.686417824588716,1478178.904158371733502 6891520.431132415309548)",377,service,0,0,1,minorroads,0,0 "LINESTRING (1478284.536921729333699 6891783.682813100516796,1478291.20836645970121 6891823.66029835306108)",379,steps,0,0,0,minorroads,0,0 "LINESTRING (1478265.091759745730087 6891789.477083542384207,1478284.536921729333699 6891783.682813100516796)",380,footway,0,0,0,minorroads,0,0 "LINESTRING (1478207.735996438423172 6891845.090029121376574,1478215.228542061522603 6891874.245591463521123)",381,steps,0,0,0,minorroads,0,0 "LINESTRING (1478052.874502453953028 6891606.26979230903089,1478077.890087522100657 6891607.710663352161646,1478084.682831245940179 6891608.109202195890248,1478111.340618094196543 6891607.894604350440204,1478134.574041006155312 6891600.184414274990559,1478181.7500194106251 6891550.612513891421258)",382,footway,0,0,0,minorroads,0,0 "LINESTRING (1478201.437779386993498 6891217.397335584275424,1478240.664008267689496 6891229.552189072594047)",383,service,0,0,0,minorroads,0,0 "LINESTRING (1478641.370573266642168 6892632.0667141424492,1478562.768824436236173 6892499.644068215973675,1478577.007460321532562 6892490.660624356009066,1478665.649033669615164 6892636.067941721528769,1478671.144811219535768 6892649.037451725453138,1478668.858791697770357 6892665.502320799045265)",384,service,0,0,0,minorroads,0,0 "LINESTRING (1478577.50198699417524 6892657.315873299725354,1478578.043167128227651 6892638.551463293842971,1478576.540925727691501 6892624.723470226861537,1478569.626883004792035 6892561.378688556142151,1478562.768824436236173 6892499.644068215973675)",385,service,0,0,0,minorroads,0,0 "LINESTRING (1478354.479788446333259 6892046.069347251206636,1478380.7830090012867 6892040.244233387522399)",389,steps,0,0,0,minorroads,0,0 "LINESTRING (1478279.339726323960349 6892178.407874005846679,1478258.466968471417204 6892184.15644040890038)",394,steps,0,0,0,minorroads,0,0 "LINESTRING (1478330.751838867552578 6891513.839987489394844,1478314.572419055039063 6891526.363167470321059,1478304.653893533628434 6891544.619147759862244)",395,service,0,0,1,minorroads,0,0 "LINESTRING (1478266.771284291520715 6891649.189465964213014,1478247.857971743447706 6891659.628178384155035,1478237.248975021298975 6891675.033351420424879)",396,path,0,0,1,minorroads,0,0 "LINESTRING (1478502.221964489435777 6891308.628160036168993,1478500.943659695796669 6891361.524732173420489,1478492.462060733232647 6891398.051313592121005,1478467.679742961889133 6891433.934281352907419,1478439.631683016428724 6891460.022724987007678,1478405.05213871714659 6891485.467469537630677,1478373.747667287709191 6891508.950281143188477,1478352.874909435166046 6891537.000988053157926)",398,path,0,0,1,minorroads,0,0 "LINESTRING (1478314.572419055039063 6891526.363167470321059,1478287.214830313343555 6891523.757363410666585)",399,service,0,0,1,minorroads,0,0 "LINESTRING (1478034.241110664559528 6892064.219202788546681,1478039.344999152235687 6892078.598087023943663,1478054.283436933998019 6892089.251967732794583,1478158.106046056607738 6892095.843584448099136,1478176.534162622177973 6892091.444062924012542,1478186.172767387935892 6892076.850545356050134)",401,service,0,0,1,minorroads,0,0 "LINESTRING (1478483.047392571577802 6891339.299239296466112,1478488.347225587582216 6891367.196074674837291,1478478.951218814589083 6891390.17271673399955,1478463.807505809003487 6891415.739864616654813,1478443.457266707671806 6891438.701317322440445,1478427.287177590886131 6891453.830160783603787,1478398.585969207808375 6891473.143619342707098,1478366.227129588602111 6891491.920637429691851,1478330.751838867552578 6891513.839987489394844,1478321.794374612625688 6891529.076270229183137,1478316.746470273472369 6891546.32058884575963)",405,service,0,0,1,minorroads,0,0 "LINESTRING (1478057.465202880557626 6892224.90239691734314,1478093.024469834985211 6892209.925397932529449,1478146.34004353149794 6892186.425209088250995)",406,service,0,0,0,minorroads,0,0 "LINESTRING (1478066.245383990462869 6892248.387368608266115,1478102.47646076255478 6892233.011756023392081,1478190.418232214171439 6892193.645416352897882)",407,service,0,0,0,minorroads,0,0 "LINESTRING (1478266.323411077726632 6892206.675530795939267,1478258.466968471417204 6892184.15644040890038)",408,footway,0,0,0,minorroads,0,0 "LINESTRING (1478294.147534419083968 6892193.936677500605583,1478302.395866084843874 6892198.198289232328534,1478342.172605789732188 6892190.916759766638279,1478366.684333492536098 6892186.885094705037773,1478394.974991430528462 6892184.217758473940194,1478408.691108567407355 6892187.253003220073879,1478423.946789876557887 6892198.397573292255402)",409,cycleway,0,0,1,minorroads,0,0 "LINESTRING (1478426.568714311579242 6892198.351584662683308,1478423.918797800550237 6892177.089536693878472)",410,footway,0,0,0,minorroads,0,0 "LINESTRING (1478290.126006194157526 6892125.138020876795053,1478295.649775819852948 6892148.408088837750256)",411,steps,0,0,0,minorroads,0,0 "LINESTRING (1478379.915254652500153 6892302.271228101104498,1478362.765442883595824 6892306.640205512754619)",412,footway,0,0,0,minorroads,0,0 "LINESTRING (1478435.358226108597592 6892223.185482617467642,1478439.258455337258056 6892236.184985723346472,1478439.062510809162632 6892244.340345094911754)",413,footway,0,0,0,minorroads,0,0 "LINESTRING (1478083.927045200718567 6892187.697559367865324,1478093.024469834985211 6892209.925397932529449,1478102.47646076255478 6892233.011756023392081,1478106.442004830343649 6892242.715404408052564,1478115.819350223056972 6892267.411472347564995)",414,service,0,0,0,minorroads,0,0 "LINESTRING (1478258.466968471417204 6892184.15644040890038,1478255.191895604366437 6892172.015472995117307,1478188.91599081363529 6892168.2597481533885,1478009.794697806239128 6892157.437138617038727,1477988.875286494847387 6892163.798869086429477,1478001.574358213692904 6892194.411893087439239,1477860.755555583396927 6892253.814062429592013,1477862.994921646546572 6892261.662846405990422,1477820.493619899032637 6892278.142251771874726,1477774.316025526728481 6892297.166425926610827,1477770.956976432120427 6892291.555746189318597,1477604.488101679133251 6892361.919472146779299)",415,footway,0,0,0,minorroads,0,0 "LINESTRING (1478148.495433366857469 6891955.366671485826373,1478146.871892969822511 6891953.542511217296124)",416,steps,0,0,0,minorroads,0,0 "LINESTRING (1478159.738917143782601 6891950.645316352136433,1478148.495433366857469 6891955.366671485826373)",418,footway,0,0,0,minorroads,0,0 "LINESTRING (1478188.91599081363529 6892168.2597481533885,1478189.345202641561627 6892164.39671871624887)",419,footway,0,0,0,minorroads,0,0 "LINESTRING (1478136.794745683437213 6891958.003273610956967,1478133.109122371301055 6891956.638985191471875)",420,footway,0,0,0,minorroads,0,0 "LINESTRING (1478191.565907321637496 6892107.493896978907287,1478186.172767387935892 6892076.850545356050134)",421,footway,0,0,0,minorroads,0,0 "LINESTRING (1478146.871892969822511 6891953.542511217296124,1478136.794745683437213 6891958.003273610956967)",422,footway,0,0,0,minorroads,0,0 "LINESTRING (1478174.164166870061308 6891331.252093238756061,1478183.056316283298656 6891328.90692647267133,1478203.341240539913997 6891334.992099165916443)",423,footway,0,0,0,minorroads,0,0 "LINESTRING (1478742.832517329836264 6890551.621465139091015,1478732.372811674140394 6890553.414654522202909)",424,footway,0,0,0,minorroads,0,0 "LINESTRING (1478670.46367070893757 6890619.165207961574197,1478689.983478227397427 6890631.901566152460873,1478689.386313944123685 6890639.28896967228502)",425,steps,0,0,0,minorroads,0,0 "LINESTRING (1478744.437396341003478 6890562.901705839671195,1478742.832517329836264 6890551.621465139091015)",426,footway,0,0,0,minorroads,0,0 "LINESTRING (1478711.369424138218164 6890558.916836394928396,1478701.861449058866128 6890559.085426985286176,1478696.636261577485129 6890557.292236343957484)",427,footway,0,0,0,minorroads,0,0 "LINESTRING (1478942.192081137793139 6890130.999331175349653,1478929.446355960331857 6890151.520337683148682,1478917.950943500734866 6890148.838351035490632,1478911.232845311518759 6890147.79620789270848,1478903.646992770954967 6890148.57781523745507,1478894.801496819360182 6890155.535656509920955,1478878.239518640562892 6890175.397721116431057,1478845.694065183168277 6890222.738904757425189,1478818.970963490428403 6890267.812139219604433,1478806.281222464516759 6890296.624811832793057,1478797.323758209589869 6890324.257487938739359,1478792.845026083523408 6890342.311500664800406,1478787.022674316074699 6890377.546061621978879,1478784.932599325431511 6890395.446932943537831,1478779.85670291329734 6890416.060571308247745,1478771.794985085725784 6890435.172296620905399,1478761.046027981443331 6890455.172988045029342,1478735.965128068579361 6890488.553563161753118,1478725.962626316817477 6890506.531313234940171,1478713.720758504699916 6890536.540298494510353,1478704.016838894458488 6890553.276716859079897,1478701.861449058866128 6890559.085426985286176,1478700.424522500019521 6890562.96301154140383,1478697.149449632968754 6890575.208834332413971,1478693.557133241556585 6890582.672818078659475,1478677.396374812116846 6890611.777822931297123)",428,cycleway,0,0,1,minorroads,0,0 "LINESTRING (1478732.372811674140394 6890553.414654522202909,1478711.369424138218164 6890558.916836394928396)",429,steps,0,0,0,minorroads,0,0 "LINESTRING (1478677.396374812116846 6890611.777822931297123,1478687.081633039517328 6890607.195195377804339,1478692.78268580744043 6890602.581917437724769,1478698.707675185520202 6890595.562383316457272,1478713.562136739492416 6890570.764165580272675,1478718.376773776020855 6890564.786856304854155,1478726.401168837677687 6890560.541436778381467,1478737.066149717196822 6890558.610308059491217,1478744.437396341003478 6890562.901705839671195)",430,cycleway,0,0,0,minorroads,0,0 "LINESTRING (1478643.236711653415114 6892266.522351266816258,1478653.985668757697567 6892305.935037068091333)",431,steps,0,0,0,minorroads,0,0 "LINESTRING (1478772.90533742448315 6891164.83891832921654,1478775.947142997290939 6891159.152391017414629)",433,steps,0,0,0,minorroads,0,0 "LINESTRING (1478772.90533742448315 6891164.83891832921654,1478769.872862547170371 6891170.280208340846002)",434,steps,0,0,0,minorroads,0,0 "LINESTRING (1478723.359363270457834 6891253.156875086948276,1478731.085176187567413 6891239.193315446376801)",435,steps,0,0,0,minorroads,0,0 "LINESTRING (1478786.593462488148361 6891171.828294342383742,1478772.90533742448315 6891164.83891832921654)",436,steps,0,0,0,minorroads,0,0 "LINESTRING (1478668.765484777279198 6892171.203009921126068,1478681.837784175062552 6892208.622385010123253)",437,footway,0,0,0,minorroads,0,0 "LINESTRING (1478710.221749030752108 6891380.163537707179785,1478748.841482935240492 6891408.183139178901911,1478750.819589622784406 6891407.692642033100128,1478767.596173715544865 6891418.790147279389203,1478786.602793178288266 6891409.302085905335844,1478804.489729615394026 6891405.224828724749386,1478817.935256686527282 6891406.941568339243531,1478830.662320480914786 6891409.348070020787418)",438,footway,0,0,0,minorroads,0,0 "LINESTRING (1478666.796708779875189 6891437.429085585288703,1478710.221749030752108 6891380.163537707179785,1478724.544361143605784 6891353.262972820550203,1478732.932653188472614 6891356.113968593068421,1478780.79910279950127 6891268.009469541721046)",439,footway,0,0,0,minorroads,0,0 "LINESTRING (1478650.160085063660517 6891985.994230893440545,1478681.333926809718832 6891992.585762946866453,1478677.928224253468215 6892027.842886608093977,1478677.741610415279865 6892034.388465284369886,1478678.739994450472295 6892037.714908943511546)",440,footway,0,0,0,minorroads,0,0 "LINESTRING (1478168.15520126442425 6892347.494091650471091,1478160.606671495363116 6892351.387868744321167)",441,service,0,0,0,minorroads,0,0 "LINESTRING (1478168.15520126442425 6892347.494091650471091,1478229.02863542875275 6892316.635208372958004,1478258.448307088343427 6892304.662668073549867,1478284.107709898613393 6892296.859831305220723,1478311.735888709081337 6892290.911897944286466,1478306.995897207176313 6892268.867791567929089,1478278.453310589306056 6892275.014994577504694,1478250.899777316488326 6892283.385009210556746,1478219.585975191090256 6892296.139333989471197,1478179.24006327916868 6892316.972463291138411,1478168.15520126442425 6892347.494091650471091)",442,service,0,0,-1,minorroads,0,0 "LINESTRING (1478466.102856026496738 6890932.568242912180722,1478535.261944622267038 6890968.449133092537522,1478563.813861930277199 6890983.239892659708858)",443,service,0,0,0,minorroads,0,0 "LINESTRING (1478535.261944622267038 6890968.449133092537522,1478551.870576259680092 6890937.856104321777821)",444,service,0,0,0,minorroads,0,0 "LINESTRING (1478201.335141776595265 6891732.714873464778066,1478206.95221831719391 6891742.801134817302227,1478218.783535687020048 6891781.920006790198386,1478228.459463221486658 6891817.743372742086649,1478231.855835082009435 6891832.934244934469461,1478232.47166075091809 6891843.219907283782959,1478248.548442946979776 6891921.397502834908664,1478245.795888828579336 6891933.921317706815898,1478285.656604760792106 6892105.271138682030141,1478298.74756553885527 6892115.112597333267331)",445,cycleway,0,0,0,minorroads,0,0 "LINESTRING (1478294.147534419083968 6892193.936677500605583,1478283.305270394310355 6892188.264751724898815,1478292.328049491159618 6892184.800280102528632,1478299.932563415030017 6892178.361885491758585,1478303.198305588914081 6892173.471774934791028,1478305.997513171983883 6892166.573504913598299,1478306.128142858389765 6892160.089136488735676,1478302.031969098607078 6892141.893076196312904,1478301.080238522263244 6892130.840560940094292,1478301.957323563983664 6892124.540174165740609,1478298.74756553885527 6892115.112597333267331)",446,cycleway,0,0,0,minorroads,0,0 "LINESTRING (1478201.335141776595265 6891732.714873464778066,1478215.956336030969396 6891726.108225850388408,1478246.253092732280493 6891712.113187463954091)",447,cycleway,0,0,0,minorroads,0,0 "LINESTRING (1478001.098492924124002 6891901.362505401484668,1478060.320394612615928 6891876.636904109269381,1478078.972447784850374 6891865.860673903487623,1478082.060906813945621 6891858.579445453360677,1478079.243037850596011 6891849.841980019584298,1478076.089263980044052 6891843.971021738834679)",448,service,0,0,1,minorroads,0,0 "LINESTRING (1477667.806177130201831 6890740.184415513649583,1477692.989714653696865 6890752.445835038088262,1477718.966360991122201 6890765.105770315043628,1477746.939775401959196 6890778.731316149234772,1477774.325356219662353 6890792.081001562997699,1477799.844798653386533 6890804.495769085362554,1477826.689199339831248 6890817.569612891413271,1477853.21635650168173 6890830.490208609960973,1477870.412821729434654 6890838.874046353623271,1477884.222245789365843 6890845.602580599486828,1477896.118878001114354 6890851.39617495983839,1477908.761965568177402 6890857.557621157728136,1477917.271556612337008 6890861.695908572524786)",450,service,0,0,0,minorroads,0,0 "LINESTRING (1478824.485402423189953 6889940.611638756468892,1478826.332879424327984 6889961.990374932065606,1478873.471535062883049 6890004.119678050279617,1478895.202716574305668 6890003.031577592715621)",451,service,0,0,0,minorroads,0,0 "LINESTRING (1478826.332879424327984 6889961.990374932065606,1478844.583712844643742 6889961.729845183901489,1478857.460067708510906 6889965.62246694136411,1478866.314894350245595 6889971.446077805943787,1478871.148192772408947 6889978.863525116816163,1478873.051653927890584 6889986.694763084873557,1478873.471535062883049 6890004.119678050279617)",452,service,0,0,0,minorroads,0,0 "LINESTRING (1477976.540111759677529 6891214.653682666830719,1477971.902757871197537 6891228.034747345373034)",453,steps,0,0,0,minorroads,0,0 "LINESTRING (1477938.965415351791307 6891251.148941309191287,1477930.74507576203905 6891262.215574943460524)",454,footway,0,0,0,minorroads,0,0 "LINESTRING (1477687.951141010504216 6891192.24466432724148,1477663.122169780312106 6891154.109624875709414)",455,steps,0,0,0,minorroads,0,0 "LINESTRING (1477691.104914883850142 6891132.620425897650421,1477676.838286919984967 6891143.564276114106178,1477663.122169780312106 6891154.109624875709414)",456,footway,0,0,0,minorroads,0,0 "LINESTRING (1477462.521623944398016 6891132.436495768837631,1477442.441974906018004 6891104.218598398379982,1477409.887190758716315 6891028.072153965942562,1477358.950943501666188 6890905.500577809289098,1477348.043364635203034 6890881.83560439478606,1477342.883491998305544 6890867.014377377927303)",457,service,0,0,1,minorroads,0,0 "LINESTRING (1477831.671788828447461 6891088.967793419025838,1477945.356939326506108 6891019.718773512169719)",458,service,0,0,0,minorroads,0,0 "LINESTRING (1477869.451760460156947 6891113.706299720332026,1478003.72041735611856 6891029.390302868559957)",459,service,0,0,0,minorroads,0,0 "LINESTRING (1477845.527866347460076 6891886.3401223346591,1477791.073948236415163 6891868.1293527437374)",460,footway,0,0,0,minorroads,0,0 "LINESTRING (1477453.480183461913839 6891871.563030050136149,1477488.80618311651051 6891880.361834840849042,1477497.931599820964038 6891882.584530951455235)",461,footway,0,0,0,minorroads,0,0 "LINESTRING (1477532.912363875191659 6891765.932137601077557,1477528.760205966420472 6891769.565044686198235,1477518.44979138020426 6891779.850625957362354,1477476.415024229325354 6891823.798257810994983,1477453.480183461913839 6891871.563030050136149,1477446.790077348472551 6891924.126067938283086,1477455.001086245523766 6891954.247648754157126,1477479.27954665129073 6891990.056453500874341,1477520.185300080571324 6892012.866254753433168,1477559.542158647440374 6892023.489389923401177,1477605.402509489562362 6892027.306364,1477641.698901103343815 6892021.588568172417581,1477698.606791194295511 6891999.713821127079427,1477758.453849244629964 6891976.490170946344733,1477766.870133368065581 6891969.990626736544073,1477805.835102870129049 6891944.375728919170797,1477826.847821102011949 6891917.074721806682646,1477845.527866347460076 6891886.3401223346591,1477851.910059632034972 6891830.496958760544658,1477838.539178092731163 6891786.549290280789137,1477791.7177659785375 6891729.219940873794258,1477778.748104193946347 6891722.337380684912205,1477750.625398713862523 6891707.238689129240811,1477722.110804171767086 6891695.68092814553529,1477715.271406986285001 6891692.891126264818013,1477715.271406986285001 6891689.074310968630016)",462,footway,0,0,0,minorroads,0,0 "LINESTRING (1477698.606791194295511 6891999.713821127079427,1477684.106895933393389 6891965.959072479978204)",463,footway,0,0,0,minorroads,0,0 "LINESTRING (1477641.698901103343815 6892021.588568172417581,1477630.651361857540905 6891980.675021766684949)",464,footway,0,0,0,minorroads,0,0 "LINESTRING (1477758.453849244629964 6891976.490170946344733,1477733.382280024467036 6891937.293706933036447)",465,footway,0,0,0,minorroads,0,0 "LINESTRING (1477589.372380752116442 6891940.098922687582672,1477608.183055686764419 6891941.662485988810658,1477621.553937226068228 6891941.61649882979691,1477645.869720400776714 6891935.300931309349835,1477672.452861708588898 6891925.796931291930377,1477690.274483300978318 6891915.112609200179577,1477708.749253325397149 6891903.569878341630101,1477733.260981028201059 6891876.943482707254589,1477740.81884149601683 6891855.620969253592193,1477739.204631788888946 6891837.83947719540447,1477727.531936184270307 6891822.342019217088819,1477711.119249074719846 6891813.175386519171298,1477692.793770122574642 6891811.21329927444458,1477669.625662055332214 6891811.627177014946938,1477646.289601535769179 6891816.425094575621188,1477623.009525167988613 6891825.009235370904207,1477603.237788961268961 6891833.317466095089912,1477582.868888476863503 6891847.971857075579464,1477568.835527812829241 6891862.702919281087816,1477557.713343029376119 6891874.904735265299678,1477552.590793161420152 6891893.192165004089475,1477556.323069932172075 6891914.928661165758967,1477568.508953595301136 6891930.993471848778427,1477589.372380752116442 6891940.098922687582672)",466,footway,0,0,0,minorroads,0,0 "LINESTRING (1477630.651361857540905 6891980.675021766684949,1477621.553937226068228 6891941.61649882979691)",467,footway,0,0,0,minorroads,0,0 "LINESTRING (1477733.382280024467036 6891937.293706933036447,1477725.65646710456349 6891926.732001763768494)",468,footway,0,0,0,minorroads,0,0 "LINESTRING (1477692.793770122574642 6891811.21329927444458,1477692.383219677722082 6891764.399265908636153)",469,footway,0,0,0,minorroads,0,0 "LINESTRING (1477623.009525167988613 6891825.009235370904207,1477605.701091633876786 6891783.682813100516796)",470,footway,0,0,0,minorroads,0,0 "LINESTRING (1477568.835527812829241 6891862.702919281087816,1477532.959017333807424 6891828.534867286682129)",471,footway,0,0,0,minorroads,0,0 "LINESTRING (1477712.416215251665562 6892167.769204625859857,1477622.598974722903222 6892203.119073937647045,1477613.996076758485287 6892205.019938614219427,1477434.361595695605502 6891964.472149926237762,1477394.239620390348136 6891910.743844576179981,1477429.593612115131691 6891873.494474177248776,1477436.890213207341731 6891866.151923180557787,1477441.835479930043221 6891855.605640362016857,1477443.235083720181137 6891845.319962166249752,1477442.451305598951876 6891835.080283679999411,1477436.778244903776795 6891818.847047658637166,1477420.038983579957858 6891781.7513905512169,1477621.376654078019783 6891628.511351731605828,1477646.028342162957415 6891609.810656713321805,1477673.292623987188563 6891591.493214836344123)",472,service,0,0,0,minorroads,0,0 "LINESTRING (1477815.604337325086817 6892123.712386487983167,1477827.603607150260359 6892118.301109884865582,1477942.464424828533083 6892069.323857038281858,1477932.499245842685923 6892029.866343609988689,1477907.651613229420036 6891922.531850008293986,1477868.882588252890855 6891831.89188345707953,1477820.43763574725017 6891737.451429275795817,1477790.495445336448029 6891720.130057509988546,1477761.831559722078964 6891708.204391392879188,1477715.271406986285001 6891689.074310968630016,1477648.389007219579071 6891687.173568284139037,1477635.969856259413064 6891687.173568284139037)",473,service,0,0,0,minorroads,0,0 "LINESTRING (1477679.992060790536925 6892101.331492725759745,1477711.445823292247951 6892094.893164958804846,1477740.706873192451894 6892082.721673713997006,1477770.406465607928112 6892066.840511322021484)",474,footway,0,0,0,minorroads,0,0 "LINESTRING (1477679.992060790536925 6892101.331492725759745,1477656.320095360744745 6892053.243440655060112,1477653.212974948808551 6892047.832211491651833,1477641.698901103343815 6892021.588568172417581)",475,footway,0,0,0,minorroads,0,0 "LINESTRING (1477656.320095360744745 6892053.243440655060112,1477710.120865036733449 6892026.509244767017663,1477767.52328180288896 6891994.900465020909905)",476,footway,0,0,0,minorroads,0,0 "LINESTRING (1477710.120865036733449 6892026.509244767017663,1477698.606791194295511 6891999.713821127079427)",477,footway,0,0,0,minorroads,0,0 "LINESTRING (1477648.389007219579071 6891687.173568284139037,1477621.376654078019783 6891628.511351731605828)",478,service,0,0,0,minorroads,0,0 "LINESTRING (1477932.499245842685923 6892029.866343609988689,1477886.685548456618562 6892048.276759926229715,1477859.551896321587265 6892044.52109289355576,1477838.193942492129281 6892048.522028035484254,1477825.345579701242968 6892061.076699531637132,1477818.552835974609479 6892075.225638516247272,1477816.938626270508394 6892089.72717712726444,1477827.603607150260359 6892118.301109884865582)",479,service,0,0,0,minorroads,0,0 "LINESTRING (1477793.089377692667767 6892048.154125873930752,1477798.221258256351575 6892062.103761437349021,1477809.315450964029878 6892056.815160491503775,1477818.552835974609479 6892075.225638516247272)",480,footway,0,0,0,minorroads,0,0 "LINESTRING (1477653.212974948808551 6892047.832211491651833,1477598.712403376353905 6892069.354515632614493,1477624.567750717513263 6892151.274696073494852,1477622.598974722903222 6892203.119073937647045)",481,footway,0,0,0,minorroads,0,0 "LINESTRING (1477420.038983579957858 6891781.7513905512169,1477396.65626959851943 6891799.042237523943186,1477337.518344137584791 6891842.192873341962695,1477394.239620390348136 6891910.743844576179981)",482,service,0,0,0,minorroads,0,0 "LINESTRING (1476971.260693745920435 6891517.24285698775202,1477003.171660154126585 6891536.188589158467948,1476982.261579535668716 6891598.958142179064453,1476967.575070433784276 6891697.474372724071145,1476966.875268540112302 6891701.980978826992214,1476966.007514191325754 6891708.173734177835286,1476958.244378502713516 6891776.202385487966239,1476938.295359153533354 6891904.612249108031392,1476921.612081981264055 6892006.780568920075893,1476991.209713097894564 6892086.753286531195045,1477034.942666180199012 6892055.404867491684854,1477081.764078291598707 6892021.849164674989879,1477195.953086152207106 6891932.158478451892734,1477145.837939785327762 6891865.492780096828938)",483,service,0,0,0,minorroads,0,0 "LINESTRING (1477366.966007873183116 6891868.589220155961812,1477374.589183179894462 6891866.535145924426615,1477381.72716250969097 6891866.059949724003673,1477387.073648984543979 6891867.378236030228436,1477393.241236352361739 6891869.064416506327689,1477400.024649386061355 6891868.911127359606326,1477405.669718005461618 6891867.424222765490413,1477410.885574793908745 6891865.109557402320206,1477415.000409936532378 6891861.675882850773633,1477418.340797648299485 6891857.813000736758113,1477420.710793400416151 6891853.612884988076985,1477422.185042725177482 6891848.309092325158417,1477422.492955556837842 6891842.898001108318567,1477421.839807122014463 6891837.241651857271791,1477418.331466958159581 6891830.450972235761583,1477407.787785074906424 6891815.995887773111463,1477396.65626959851943 6891799.042237523943186)",484,service,0,0,0,minorroads,0,0 "LINESTRING (1477698.644113963004202 6891577.758992903865874,1477820.43763574725017 6891737.451429275795817)",485,service,0,0,1,minorroads,0,0 "LINESTRING (1477687.456614337861538 6891609.488759884610772,1477698.756082263542339 6891624.587267857044935,1477700.855487952940166 6891631.31645973585546,1477700.70619688089937 6891638.674124730750918,1477699.073325790930539 6891646.231066821143031,1477695.555654934141785 6891652.009909689426422,1477690.4051129873842 6891656.97634560521692,1477684.937327513471246 6891659.873434635810554,1477677.034231450874358 6891661.329643805511296,1477668.60861663450487 6891660.256647552363575,1477661.470637307269499 6891656.961017092689872,1477656.077497370773926 6891652.5923927500844,1477652.401204751804471 6891646.859534942544997,1477649.816603085491806 6891639.394563124515116,1477650.255145606352016 6891626.01281373295933,1477656.189465674338862 6891614.179257809184492,1477665.128268546424806 6891606.315777552314103,1477673.292623987188563 6891591.493214836344123,1477691.888693005079404 6891579.199858834967017,1477698.644113963004202 6891577.758992903865874)",486,service,0,0,0,minorroads,0,0 "LINESTRING (1477181.042640446452424 6891986.515421602874994,1477192.79931227886118 6892009.585808921605349,1477209.538573602680117 6892019.396492030471563,1477223.357328352984041 6892015.226950248703361,1477241.897413221886382 6892003.868025694973767,1477254.251249337336048 6892002.672350356355309,1477481.09903157921508 6892286.972161007113755,1477529.711936542764306 6892276.82389810308814,1477549.437019285047427 6892291.479097588919103,1477584.352468494558707 6892335.368207341991365,1477604.488101679133251 6892361.919472146779299)",490,service,0,0,0,minorroads,0,0 "LINESTRING (1477583.904595280997455 6891294.219997277483344,1477610.217146528884768 6891274.416479538194835,1477654.062067914754152 6891332.033815642818809,1477629.401049136882648 6891352.74182316660881)",491,service,0,0,0,minorroads,0,0 "LINESTRING (1477868.005503211170435 6891418.483586152084172,1477848.45770361693576 6891433.290501792915165,1477828.732620871858671 6891448.066788487136364,1477807.514627421740443 6891462.582523957826197)",492,service,0,0,0,minorroads,0,0 "LINESTRING (1477807.514627421740443 6891462.582523957826197,1477751.623782749054953 6891507.58606893569231,1477629.401049136882648 6891352.74182316660881)",493,service,0,0,0,minorroads,0,0 "LINESTRING (1477629.401049136882648 6891352.74182316660881,1477583.904595280997455 6891294.219997277483344)",494,service,0,0,0,minorroads,0,0 "LINESTRING (1477583.904595280997455 6891294.219997277483344,1477558.161216243170202 6891260.008378100581467)",495,service,0,0,0,minorroads,0,0 "LINESTRING (1477601.101060511544347 6890443.310502992011607,1477582.691605331841856 6890428.290844186209142,1477188.208611846435815 6890073.681786119006574)",496,service,0,0,0,minorroads,0,0 "LINESTRING (1477130.610250554978848 6890845.357349183410406,1477112.210126065183431 6890858.29331654496491)",500,steps,0,0,0,minorroads,0,0 "LINESTRING (1477083.490256302058697 6890932.47628013510257,1477087.66107559367083 6890947.466226569376886,1477089.116663535358384 6890956.187384136021137)",502,footway,0,0,0,minorroads,0,0 "LINESTRING (1477087.66107559367083 6890947.466226569376886,1477145.95923878159374 6890906.512165016494691,1477156.708195885876194 6890900.657222660258412,1477187.527471335837618 6890885.774652787484229,1477210.406327954260632 6890875.919371928088367,1477223.142722439020872 6890877.1455337414518)",503,footway,0,0,0,minorroads,0,0 "LINESTRING (1477406.453496126458049 6891175.721502039581537,1477391.981592941563576 6891187.615723043680191,1477374.197294117882848 6891201.563865466974676,1477022.420877606840804 6891477.159598301164806,1476986.90826411684975 6891504.980270971544087,1476971.260693745920435 6891517.24285698775202,1476941.243857803056017 6891507.294832653366029)",505,service,0,0,0,minorroads,0,0 "LINESTRING (1477358.950943501666188 6890905.500577809289098,1477336.324015568709001 6890915.141315577551723,1477320.424516517668962 6890921.931222087703645,1477285.014540638308972 6890925.701691834256053,1477178.570007083471864 6890971.238683593459427,1477158.975554024800658 6890984.971869397908449,1477098.400702007813379 6891032.118565235286951)",506,service,0,0,0,minorroads,0,0 "LINESTRING (1477095.414880589582026 6891011.595310922712088,1477098.400702007813379 6891032.118565235286951,1477105.977223855676129 6891139.563791322521865)",507,footway,0,0,0,minorroads,0,0 "LINESTRING (1477677.911316492594779 6891115.560924383811653,1477665.996022895211354 6891125.600428977049887,1477664.307167656254023 6891126.872611372731626,1477657.943635757779703 6891131.777412844821811)",508,service,0,0,0,minorroads,0,0 "LINESTRING (1477768.558988607022911 6891022.355068786069751,1477796.73767824168317 6891035.567212809808552,1477831.550489834975451 6891054.557791966944933,1477842.486060780240223 6891060.520138014107943)",509,service,0,0,0,minorroads,0,0 "LINESTRING (1477556.62165207369253 6890751.633515411056578,1477574.769847880583256 6890734.436881551519036,1477588.150060110026971 6890725.838578412309289,1477599.608149800915271 6890720.106381432153285,1477612.997692723292857 6890719.156124571338296,1477625.40751299331896 6890720.106381432153285,1477644.516770066693425 6890726.804162795655429,1477667.806177130201831 6890740.184415513649583)",510,service,0,0,0,minorroads,0,0 "LINESTRING (1477782.620341347064823 6891064.459273951128125,1477796.73767824168317 6891035.567212809808552,1477810.771038905717432 6891005.403092133812606)",511,service,0,0,0,minorroads,0,0 "LINESTRING (1477872.456243261462077 6890928.291974918916821,1477851.564824028639123 6890914.007110533304513)",512,service,0,0,0,minorroads,0,0 "LINESTRING (1477853.21635650168173 6890830.490208609960973,1477820.027085299603641 6890898.649376915767789)",513,service,0,0,0,minorroads,0,0 "LINESTRING (1477799.844798653386533 6890804.495769085362554,1477766.64619676116854 6890872.63939,1477751.77307382132858 6890903.186189386062324)",514,service,0,0,0,minorroads,0,0 "LINESTRING (1477724.163556393934414 6890895.04751749522984,1477741.136085020378232 6890860.209190255962312,1477774.325356219662353 6890792.081001562997699)",515,service,0,0,0,minorroads,0,0 "LINESTRING (1477695.984866762068123 6890883.337653747759759,1477713.750504202675074 6890846.874718683771789,1477746.939775401959196 6890778.731316149234772)",516,service,0,0,0,minorroads,0,0 "LINESTRING (1477668.114089961862192 6890869.497352491132915,1477685.777089789044112 6890833.233730419538915,1477718.966360991122201 6890765.105770315043628)",517,service,0,0,0,minorroads,0,0 "LINESTRING (1477754.656257629161701 6891051.660921058617532,1477768.558988607022911 6891022.355068786069751,1477783.898646140703931 6890993.049323340877891)",518,service,0,0,0,minorroads,0,0 "LINESTRING (1477642.893229672452435 6890855.289227482862771,1477659.791112761478871 6890820.589014776051044,1477692.989714653696865 6890752.445835038088262)",519,service,0,0,0,minorroads,0,0 "LINESTRING (1477623.998578510247171 6890830.107035243883729,1477634.607575237983838 6890808.327491325326264,1477667.806177130201831 6890740.184415513649583)",520,service,0,0,0,minorroads,0,0 "LINESTRING (1477781.379359321901575 6890910.619823455810547,1477793.499928140547127 6890885.713344623334706,1477826.689199339831248 6890817.569612891413271)",521,service,0,0,0,minorroads,0,0 "LINESTRING (1477870.412821729434654 6890838.874046353623271,1477837.214219840010628 6890907.017958667129278)",522,service,0,0,0,minorroads,0,0 "LINESTRING (1477091.775910733500496 6890789.490762358531356,1476942.736768513685092 6890783.32936832588166)",524,footway,0,0,0,minorroads,0,0 "LINESTRING (1477536.616648569935933 6891975.447790859267116,1477569.955210844287649 6891984.997836984694004,1477600.793147677090019 6891986.469434185884893,1477630.651361857540905 6891980.675021766684949,1477684.106895933393389 6891965.959072479978204,1477713.899795272154734 6891950.844594269990921,1477733.382280024467036 6891937.293706933036447,1477770.46244975971058 6891905.470672187395394,1477791.073948236415163 6891868.1293527437374,1477793.630557826953009 6891835.402189544402063,1477787.742891217814758 6891810.416201460175216,1477774.064096846850589 6891789.768330050632358,1477751.353192683542147 6891775.144702635705471,1477724.723397911060601 6891766.315355568192899,1477692.383219677722082 6891764.399265908636153,1477662.301068890141323 6891765.901480161584914,1477631.080573685467243 6891773.381898197345436,1477605.701091633876786 6891783.682813100516796,1477577.802322755102068 6891796.129769561812282,1477555.511299735167995 6891809.818378160707653,1477532.959017333807424 6891828.534867286682129,1477517.423415269004181 6891848.12514582183212,1477505.610759282018989 6891863.929231609217823,1477497.931599820964038 6891882.584530951455235,1477494.936447712592781 6891903.999089813791215,1477496.830578175140545 6891922.010663450695574,1477500.497540106996894 6891936.419951410032809,1477507.775479810545221 6891951.089859411120415,1477523.27375910943374 6891966.464932785369456,1477536.616648569935933 6891975.447790859267116)",535,footway,0,0,0,minorroads,0,0 "LINESTRING (1477161.457518077688292 6890758.668512595817447,1477029.446888633305207 6890709.37768148444593)",538,footway,0,0,0,minorroads,0,0 "LINESTRING (1477131.048793075839058 6890631.24252425506711,1477164.126095974352211 6890700.488198084756732,1477179.391107973642647 6890738.498471793718636)",539,service,0,0,0,minorroads,0,0 "LINESTRING (1477519.588135797530413 6890535.436799609102309,1477529.833235539030284 6890516.294183277525008,1477567.697183395503089 6890475.526233145967126,1477601.101060511544347 6890443.310502992011607,1477654.556594587164 6890383.078775299713016,1477699.67982076969929 6890328.610064546577632,1477708.963859239360318 6890318.096450427547097,1477743.879308448871598 6890287.352637302130461,1477755.803932736394927 6890280.6858737943694,1477780.185030752792954 6890271.551650473847985,1477786.39927157945931 6890262.126246342435479,1477776.443423286313191 6890246.309983272105455,1477725.507176032289863 6890206.493598283268511,1477672.238255794625729 6890175.474349547177553,1477612.512496743584052 6890149.129538116045296,1477598.469805386383086 6890135.673640975728631,1477603.097828581929207 6890120.148812685161829,1477617.560401076916605 6890072.379119392484426,1477630.968605382135138 6890069.988343353383243,1477642.156105010071769 6890079.5361262653023,1478111.629869545809925 6890480.982382909394801)",540,service,0,0,0,minorroads,0,0 "LINESTRING (1477457.678994829300791 6890649.726370869204402,1477478.663720985176042 6890623.471964616328478,1477502.205056728795171 6890571.39254963491112)",542,service,0,0,0,minorroads,0,0 "LINESTRING (1477394.202297621639445 6890700.610811580903828,1477457.678994829300791 6890649.726370869204402)",543,service,0,0,0,minorroads,0,0 "LINESTRING (1477202.689845727290958 6890575.867871635593474,1477215.379586750175804 6890595.455097910948098,1477325.491082236869261 6890699.476636806502938,1477343.788569116033614 6890718.313154872506857,1477379.665079592028633 6890708.013604944571853,1477394.202297621639445 6890700.610811580903828)",544,service,0,0,0,minorroads,0,0 "LINESTRING (1477179.129848600830883 6890751.863417183049023,1477161.457518077688292 6890758.668512595817447,1477091.775910733500496 6890789.490762358531356,1477003.218313615769148 6890845.05080992449075,1476929.076635525561869 6890897.699098956771195,1476846.1361149456352 6890928.598517356440425,1476697.29291725391522 6891011.472692683339119,1476669.580762218683958 6891010.522401385009289,1476642.055221018847078 6890998.321897276677191)",545,footway,0,0,0,minorroads,0,0 "LINESTRING (1477179.391107973642647 6890738.498471793718636,1477173.72737796837464 6890740.307029619812965,1477160.067244980484247 6890746.192508741281927,1477144.335698384558782 6890708.933207083493471,1477164.126095974352211 6890700.488198084756732)",546,service,0,0,0,minorroads,0,0 "LINESTRING (1477825.784122222103179 6891305.424640764482319,1477810.183205312816426 6891318.392004153691232,1477807.579942266456783 6891320.553233419544995,1477805.405891042202711 6891322.361922188661993)",547,service,0,0,0,minorroads,0,0 "LINESTRING (1477434.361595695605502 6891964.472149926237762,1477445.68905570008792 6891957.957286356948316,1477455.001086245523766 6891954.247648754157126,1477500.497540106996894 6891936.419951410032809)",548,footway,0,0,0,minorroads,0,0 "LINESTRING (1477654.071398604661226 6891729.08198303822428,1477655.685608308762312 6891734.416354355402291)",549,footway,0,0,0,minorroads,0,0 "LINESTRING (1477751.353192683542147 6891775.144702635705471,1477778.748104193946347 6891722.337380684912205)",550,footway,0,0,0,minorroads,0,0 "LINESTRING (1477530.710320580750704 6892072.497022124007344,1477532.408506509615108 6892059.927003527060151,1477512.972675218945369 6892026.631878494285047,1477520.185300080571324 6892012.866254753433168,1477536.616648569935933 6891975.447790859267116)",551,footway,0,0,0,minorroads,0,0 "LINESTRING (1477188.460540529107675 6890785.490453751757741,1477179.129848600830883 6890751.863417183049023,1477173.72737796837464 6890740.307029619812965)",555,footway,0,0,0,minorroads,0,0 "LINESTRING (1477233.434475639369339 6890900.503951973281801,1477229.739521637326106 6890892.028087645769119,1477223.142722439020872 6890877.1455337414518,1477221.817764186300337 6890863.182627168484032)",557,footway,0,0,0,minorroads,0,0 "LINESTRING (1477682.39004861866124 6889990.909228938631713,1477660.640205727424473 6889979.016778235323727,1477638.041269867448136 6889962.005700208246708,1477601.502280263695866 6889935.768864835612476,1477037.424630233086646 6889460.654818921349943,1476851.809175638016313 6889334.68986457772553,1476836.674793327925727 6889326.736669098958373,1476816.165932461619377 6889319.151258772239089,1476789.40550800296478 6889310.018127746880054,1476760.433709556935355 6889300.195426267571747,1476743.535826465114951 6889295.567574185319245,1476724.081333788577467 6889290.40338478051126,1476703.572472922271118 6889300.655146818608046)",558,service,0,0,0,minorroads,0,0 "LINESTRING (1477637.518751118797809 6890024.67101151868701,1477572.987685721367598 6889974.54178845603019,1477564.646047132555395 6889952.427406344562769,1477559.635465567931533 6889940.856842578388751,1477558.403814232908189 6889935.079229551367462)",560,service,0,0,0,minorroads,0,0 "LINESTRING (1477699.67982076969929 6890328.610064546577632,1477733.204996876418591 6890359.445991663262248,1477739.904433685587719 6890365.024671027436852)",561,service,0,0,0,minorroads,0,0 "LINESTRING (1477962.600058013107628 6891779.436749854125082,1477953.866530364844948 6891751.538483916781843,1477943.453478170791641 6891735.30541658680886)",562,footway,0,0,0,minorroads,0,0 "LINESTRING (1477349.881510943174362 6890675.812269823625684,1477337.537005520658568 6890685.851225290447474)",563,footway,0,0,0,minorroads,0,0 "LINESTRING (1477178.570007083471864 6890971.238683593459427,1477201.355556778842583 6891033.344750871881843,1477171.068130770465359 6891047.170006854459643,1477173.083560226485133 6891051.921486127190292,1477200.823707337491214 6891117.231619697995484,1477217.040449918713421 6891155.381811781786382,1477226.044567629694939 6891176.595174888148904,1477236.019077305682003 6891188.397431484423578,1477262.11702263681218 6891201.349278477951884,1477343.11675929534249 6891166.862158128991723)",564,service,0,0,0,minorroads,0,0 "LINESTRING (1477555.511299735167995 6891809.818378160707653,1477539.014636401087046 6891785.00108590349555)",565,footway,0,0,0,minorroads,0,0 "LINESTRING (1477397.141465578228235 6890736.030863894149661,1477364.94124772422947 6890746.376430032774806)",566,steps,0,0,0,minorroads,0,0 "LINESTRING (1477192.883288506418467 6890795.897391020320356,1477199.097529330058023 6890810.090084169991314,1477209.725187440868467 6890834.291289354674518)",567,steps,0,0,0,minorroads,0,0 "LINESTRING (1476986.90826411684975 6891504.980270971544087,1476978.417334458557889 6891488.410481329075992,1476982.625476519111544 6891477.634771515615284,1477001.21221484686248 6891429.979636301286519,1477055.871408184524626 6891387.674252809025347,1476926.19345171796158 6891217.903148794546723,1476932.389031158527359 6891202.544834636151791,1477041.110253545222804 6891117.369567033834755,1477044.021429431624711 6891042.633113135583699,1477037.135378784500062 6891030.999671006575227,1477030.258658833103254 6891020.699720491655171)",568,service,0,0,0,minorroads,0,0 "LINESTRING (1477851.564824028639123 6890914.007110533304513,1477837.214219840010628 6890907.017958667129278,1477820.027085299603641 6890898.649376915767789,1477793.499928140547127 6890885.713344623334706,1477766.64619676116854 6890872.63939,1477741.136085020378232 6890860.209190255962312,1477713.750504202675074 6890846.874718683771789,1477685.777089789044112 6890833.233730419538915,1477659.791112761478871 6890820.589014776051044,1477634.607575237983838 6890808.327491325326264)",569,service,0,0,0,minorroads,0,0 "LINESTRING (1477657.943635757779703 6891131.777412844821811,1477634.971472224220634 6891151.028787543997169)",572,service,0,0,1,minorroads,0,0 "LINESTRING (1477547.608203666983172 6890950.087170991115272,1477521.230337577406317 6890965.031168691813946,1477512.394172318745404 6890970.012507430277765,1477494.852471484802663 6890979.95986695215106,1477486.482840825803578 6890984.695979272015393,1477470.17279132688418 6890993.938303586095572,1477464.826304849237204 6890996.973098964430392,1477447.863106921315193 6891006.567964611575007,1477439.782727705081925 6891011.135492536239326,1477421.92378334957175 6891021.251503217034042,1477409.887190758716315 6891028.072153965942562)",573,service,0,0,1,minorroads,0,0 "LINESTRING (1477634.971472224220634 6891151.028787543997169,1477612.559150202432647 6891120.695631274022162)",574,service,0,0,1,minorroads,0,0 "LINESTRING (1477805.405891042202711 6891322.361922188661993,1477795.459373445017263 6891330.2404525866732,1477820.325667443918064 6891360.42112004570663,1477845.29459905042313 6891389.191724671050906,1477868.005503211170435 6891418.483586152084172,1477915.246796463150531 6891483.398165013641119,1477941.960567463189363 6891518.177879937924445,1478007.443363436963409 6891603.372722592204809,1478079.075085395481437 6891736.240464904345572)",575,service,0,0,0,minorroads,0,0 "LINESTRING (1477604.488101679133251 6892361.919472146779299,1477636.333753245649859 6892365.016103434376419,1477641.120398203376681 6892375.777672911994159,1477651.720064238179475 6892399.615673690102994,1477661.713235300034285 6892422.135367657989264,1477671.743729121983051 6892444.701114750467241,1477677.360805668402463 6892457.31772515270859,1477696.218134059105068 6892478.028631558641791,1477711.763066816842183 6892498.678270866163075)",576,service,0,0,0,minorroads,0,0 "LINESTRING (1477022.420877606840804 6891477.159598301164806,1477104.59628144861199 6891583.522458178922534,1477116.763503728900105 6891599.280038581229746,1477202.167326975846663 6891709.829224040731788,1477215.323602598393336 6891726.859329365193844,1477316.235035840189084 6891857.49109398201108,1477337.518344137584791 6891842.192873341962695)",577,service,0,0,0,minorroads,0,0 "LINESTRING (1476941.243857803056017 6891507.294832653366029,1476903.80912177474238 6891496.304502658545971,1476881.984633348649368 6891489.881987628526986,1476860.79463197151199 6891483.674072253517807,1476837.299949686974287 6891476.761065948754549,1476802.673751928843558 6891462.735805360600352,1476793.585657987510785 6891460.084037529304624)",578,service,0,0,0,minorroads,0,0 "LINESTRING (1477751.623782749054953 6891507.58606893569231,1477741.089431561529636 6891515.342154928483069)",579,service,0,0,0,minorroads,0,0 "LINESTRING (1477612.559150202432647 6891120.695631274022162,1477582.075779662933201 6891143.656241306103766,1477566.754783512093127 6891124.2362818159163,1477529.049457415007055 6891078.468512326478958)",580,service,0,0,0,minorroads,0,0 "LINESTRING (1477634.971472224220634 6891151.028787543997169,1477614.761193496640772 6891168.440898629836738,1477601.101060511544347 6891175.721502039581537,1477585.4534901403822 6891184.105699811130762,1477566.950728042982519 6891186.788031838834286,1477558.702396374428645 6891184.381596778519452,1477547.496235363651067 6891176.426571349613369,1477507.896778806811199 6891126.826628868468106)",581,service,0,0,0,minorroads,0,0 "LINESTRING (1477793.089377692667767 6892048.154125873930752,1477767.52328180288896 6891994.900465020909905,1477758.453849244629964 6891976.490170946344733)",582,footway,0,0,0,minorroads,0,0 "LINESTRING (1477215.323602598393336 6891726.859329365193844,1477568.294347681337968 6891455.945442079566419,1477586.535850405925885 6891442.410717039369047)",585,service,0,0,0,minorroads,0,0 "LINESTRING (1476860.79463197151199 6891483.674072253517807,1476960.819649475859478 6891630.565365144982934,1476941.281180571764708 6891746.219429916702211,1476922.526489791693166 6891772.308886986225843,1476902.138927918858826 6891980.215147942304611,1476921.612081981264055 6892006.780568920075893)",586,service,0,0,0,minorroads,0,0 "LINESTRING (1477202.167326975846663 6891709.829224040731788,1477555.511299735167995 6891439.437065890990198,1477573.715479691047221 6891425.779744077473879)",587,service,0,0,0,minorroads,0,0 "LINESTRING (1477696.218134059105068 6892478.028631558641791,1477691.039600039366633 6892481.830491381697357,1477655.918875608593225 6892510.237186400219798,1477625.398182300385088 6892475.315208514221013,1477531.120871023042127 6892361.674194470979273,1477492.827711335849017 6892391.613455899991095,1477584.249830884160474 6892505.760787431150675,1477625.398182300385088 6892475.315208514221013)",588,service,0,0,0,minorroads,0,0 "LINESTRING (1477584.249830884160474 6892505.760787431150675,1477550.510048857657239 6892529.55318315140903,1477537.027199015021324 6892540.912850533612072)",589,service,0,0,0,minorroads,0,0 "LINESTRING (1478066.245383990462869 6892248.387368608266115,1478062.709051750600338 6892246.839075284078717,1478053.341037050588056 6892250.855440765619278,1478053.117100443691015 6892255.760928054340184)",590,path,0,0,0,minorroads,0,0 "LINESTRING (1478057.465202880557626 6892224.90239691734314,1478055.188514051726088 6892228.182930614799261,1478045.251327144447714 6892231.816046603955328,1478042.116214653942734 6892230.589678158052266)",591,path,0,0,0,minorroads,0,0 "LINESTRING (1477784.906360871624202 6892316.451251152902842,1477641.120398203376681 6892375.777672911994159)",592,service,0,0,0,minorroads,0,0 "LINESTRING (1477794.470320102758706 6892339.154669879004359,1477651.720064238179475 6892399.615673690102994)",593,service,0,0,0,minorroads,0,0 "LINESTRING (1477818.590158740524203 6892272.577574365772307,1477820.493619899032637 6892278.142251771874726,1477867.380346852121875 6892398.006031540222466)",594,footway,0,0,0,minorroads,0,0 "LINESTRING (1477804.024948637932539 6892361.87348258215934,1477661.713235300034285 6892422.135367657989264)",595,service,0,0,0,minorroads,0,0 "LINESTRING (1478053.117100443691015 6892255.760928054340184,1477964.606156779220328 6892292.444870038889349,1477895.484390949364752 6892321.126831811852753)",596,service,0,0,0,minorroads,0,0 "LINESTRING (1478032.020405984483659 6892209.480840558186173,1477946.392646130407229 6892246.195230620913208,1477870.356837577652186 6892278.801428685896099)",597,service,0,0,0,minorroads,0,0 "LINESTRING (1478042.116214653942734 6892230.589678158052266,1477955.219480698928237 6892268.637846413999796,1477881.059141225880012 6892301.121497599408031)",598,service,0,0,0,minorroads,0,0 "LINESTRING (1477974.254092237679288 6892334.525068153627217,1477970.353863011812791 6892307.008119508624077,1477964.606156779220328 6892292.444870038889349,1477955.219480698928237 6892268.637846413999796,1477946.392646130407229 6892246.195230620913208,1477939.861161776585504 6892229.639242734760046)",599,service,0,0,0,minorroads,0,0 "LINESTRING (1477813.588907869067043 6892385.481493636965752,1477671.743729121983051 6892444.701114750467241)",600,service,0,0,0,minorroads,0,0 "LINESTRING (1477315.871138856979087 6890705.699273365549743,1477293.813383128261194 6890711.002312272787094)",601,steps,0,0,0,minorroads,0,0 "LINESTRING (1477327.739778992719948 6890696.79446735791862,1477325.491082236869261 6890699.476636806502938,1477315.871138856979087 6890705.699273365549743)",602,footway,0,0,0,minorroads,0,0 "LINESTRING (1477191.548999560764059 6890584.63460551109165,1477193.573759709950536 6890604.436424199491739,1477192.715336051303893 6890631.717647477984428,1477189.860144322039559 6890651.550235321745276,1477182.722164992243052 6890668.118300231173635,1477164.126095974352211 6890700.488198084756732)",603,footway,0,0,0,minorroads,0,0 "LINESTRING (1477337.537005520658568 6890685.851225290447474,1477327.739778992719948 6890696.79446735791862)",604,steps,0,0,0,minorroads,0,0 "LINESTRING (1477317.485348558053374 6890876.701050061732531,1477328.215644282288849 6890898.603395721875131,1477336.324015568709001 6890915.141315577551723,1477340.560149707831442 6890923.770475399680436,1477391.543050420703366 6891037.789675366133451,1477433.661793799139559 6891131.76208533346653,1477423.286064371000975 6891138.966017907485366,1477419.021938158897683 6891141.924230385571718,1477415.15903169894591 6891144.591220805421472,1477411.258802472846583 6891147.304194730706513,1477406.565464430022985 6891150.59961626958102,1477402.814526273403317 6891153.297264670953155,1477398.149180306354538 6891156.699981558136642)",606,footway,0,0,0,minorroads,0,0 "LINESTRING (1477001.21221484686248 6891429.979636301286519,1477012.810264917090535 6891381.604368223808706,1476990.127352835144848 6891349.568942168727517,1476972.175101556349546 6891324.201267114840448,1476953.905606755753979 6891298.404492945410311,1476935.21623081760481 6891272.010018249042332,1476926.622663548681885 6891259.870428316295147,1476909.556828004540876 6891253.110891866497695,1476842.273208488477394 6891436.264150676317513,1476866.915565874893218 6891446.33471198566258,1476891.623238111380488 6891456.405285906977952,1476916.274926193524152 6891463.640165685676038,1476941.495786485727876 6891471.074317997321486,1476963.730825359700248 6891477.604115179739892,1476982.625476519111544 6891477.634771515615284)",607,service,0,0,0,minorroads,0,0 "LINESTRING (1477430.340067470446229 6891165.329400658607483,1477423.817913812352344 6891156.408757981844246)",608,steps,0,0,0,minorroads,0,0 "LINESTRING (1477438.401785300811753 6891159.091080768965185,1477431.627702959813178 6891150.078479750081897)",609,steps,0,0,0,minorroads,0,0 "LINESTRING (1477391.543050420703366 6891037.789675366133451,1477409.887190758716315 6891028.072153965942562)",610,footway,0,0,0,minorroads,0,0 "LINESTRING (1476990.127352835144848 6891349.568942168727517,1476941.495786485727876 6891471.074317997321486)",611,service,0,0,0,minorroads,0,0 "LINESTRING (1477422.772876315517351 6891171.353139204904437,1477416.036116740433499 6891162.723713628947735)",612,steps,0,0,0,minorroads,0,0 "LINESTRING (1477391.981592941563576 6891187.615723043680191,1477474.922113521490246 6891297.515479031950235,1477487.751814926741645 6891314.146186651661992,1477573.715479691047221 6891425.779744077473879,1477586.535850405925885 6891442.410717039369047,1477691.888693005079404 6891579.199858834967017)",614,service,0,0,0,minorroads,0,0 "LINESTRING (1477374.197294117882848 6891201.563865466974676,1477456.410020725568756 6891311.233894356526434,1477469.668933961540461 6891328.61569665838033,1477555.511299735167995 6891439.437065890990198,1477568.294347681337968 6891455.945442079566419,1477673.292623987188563 6891591.493214836344123)",615,service,0,0,0,minorroads,0,0 "LINESTRING (1477173.083560226485133 6891051.921486127190292,1477137.272364595206454 6891079.863306542858481,1477118.508343119407073 6891093.428076104260981)",616,footway,0,0,0,minorroads,0,0 "LINESTRING (1477088.584814094239846 6891117.76808157004416,1477048.864058541134 6891148.239174656569958,1477017.643563339253888 6891172.196156406775117,1476959.317408075323328 6891216.922177751548588)",617,footway,0,0,0,minorroads,0,0 "LINESTRING (1477024.818865434965119 6891578.770664696581662,1477055.012984525877982 6891556.5139145758003)",618,steps,0,0,0,minorroads,0,0 "LINESTRING (1477044.683908559381962 6891600.613609550520778,1477072.899920959956944 6891578.770664696581662)",619,steps,0,0,0,minorroads,0,0 "LINESTRING (1477081.764078291598707 6892021.849164674989879,1477121.027629941003397 6892015.901434796862304,1477150.913836200255901 6892003.71473397128284,1477181.042640446452424 6891986.515421602874994,1477246.96397894108668 6891938.244107788428664)",620,service,0,0,0,minorroads,0,0 "LINESTRING (1477137.272364595206454 6891079.863306542858481,1477179.68035942222923 6891133.754661783576012,1477203.753544606966898 6891164.777608038857579,1477227.313541733426973 6891196.827625382691622,1477267.108942821156234 6891248.650520586408675,1477275.89845462096855 6891259.655839771032333)",621,footway,0,0,0,minorroads,0,0 "LINESTRING (1477038.329707350814715 6891342.288181316107512,1477049.825119810411707 6891333.827179099433124,1477076.091017599450424 6891312.613401100039482)",622,steps,0,0,0,minorroads,0,0 "LINESTRING (1477050.459606862161309 6891150.522978541441262,1477048.864058541134 6891148.239174656569958,1477039.906594285974279 6891136.728199865669012)",623,steps,0,0,0,minorroads,0,0 "LINESTRING (1477019.500371033092961 6891174.066122156567872,1477017.643563339253888 6891172.196156406775117,1477008.994011918548495 6891161.221612081862986)",624,steps,0,0,0,minorroads,0,0 "LINESTRING (1477236.019077305682003 6891188.397431484423578,1477227.313541733426973 6891196.827625382691622)",625,footway,0,0,0,minorroads,0,0 "LINESTRING (1476959.317408075323328 6891216.922177751548588,1477000.549735719105229 6891270.170685262419283,1477025.378706949297339 6891302.251778436824679,1477049.825119810411707 6891333.827179099433124,1477089.85378819797188 6891385.528333493508399,1477098.167434711009264 6891396.257935808971524)",626,footway,0,0,0,minorroads,0,0 "LINESTRING (1477203.753544606966898 6891164.777608038857579,1477217.040449918713421 6891155.381811781786382)",627,footway,0,0,0,minorroads,0,0 "LINESTRING (1477227.313541733426973 6891196.827625382691622,1477200.506463813129812 6891216.600296653807163)",628,steps,0,0,0,minorroads,0,0 "LINESTRING (1477176.405286555178463 6891136.161081690341234,1477179.68035942222923 6891133.754661783576012,1477200.823707337491214 6891117.231619697995484)",629,footway,0,0,0,minorroads,0,0 "LINESTRING (1476989.203614334575832 6891279.551287890411913,1477000.549735719105229 6891270.170685262419283,1477004.487287716707215 6891266.890542482957244)",630,steps,0,0,0,minorroads,0,0 "LINESTRING (1477014.592427076306194 6891310.758730973117054,1477025.378706949297339 6891302.251778436824679)",631,steps,0,0,0,minorroads,0,0 "LINESTRING (1477657.813006068347022 6891744.87050611898303,1477663.094177704304457 6891744.042757529765368,1477667.983460275456309 6891744.012100178748369,1477687.633897485909984 6891746.357388046570122,1477693.166997798951343 6891746.265415959060192,1477698.485492197796702 6891744.747876695357263,1477702.80560256447643 6891741.75878503266722,1477705.595479451818392 6891737.66603057552129,1477709.299764146795496 6891729.863744132220745,1477713.694520050892606 6891719.654869962483644,1477722.110804171767086 6891695.68092814553529)",632,footway,0,0,0,minorroads,0,0 "LINESTRING (1477488.80618311651051 6891880.361834840849042,1477485.269850873854011 6891887.59709616843611,1477482.47064329078421 6891890.678215784020722,1477476.881558825960383 6891894.065915833227336,1477471.292474361369386 6891894.939666754566133,1477465.274178063031286 6891895.246246046386659,1477471.124521903228015 6891926.686014686711133,1477472.029599023750052 6891931.560646092519164)",633,footway,0,0,0,minorroads,0,0 "LINESTRING (1477471.124521903228015 6891926.686014686711133,1477496.830578175140545 6891922.010663450695574)",634,footway,0,0,0,minorroads,0,0 "LINESTRING (1477105.706633787136525 6892515.296133446507156,1477093.642049120273441 6892467.834137276746333,1477084.078089892165735 6892430.22959574777633,1477075.652475078590214 6892397.070906250737607,1477065.827256471849978 6892358.362946599721909)",635,footway,0,0,0,minorroads,0,0 "LINESTRING (1477084.078089892165735 6892430.22959574777633,1477114.505476279882714 6892422.533946882933378,1477144.70892606372945 6892414.914955166168511)",636,footway,0,0,0,minorroads,0,0 "LINESTRING (1477136.208665715297684 6892506.573284320533276,1477124.26538004190661 6892460.322412922978401,1477114.505476279882714 6892422.533946882933378)",637,footway,0,0,0,minorroads,0,0 "LINESTRING (1477166.915972861694172 6892497.804454318247736,1477154.860718884970993 6892452.826025616377592,1477144.70892606372945 6892414.914955166168511,1477135.490202432963997 6892380.483947849832475,1477125.282425462966785 6892342.404590574093163)",638,footway,0,0,0,minorroads,0,0 "LINESTRING (1477093.642049120273441 6892467.834137276746333,1477124.26538004190661 6892460.322412922978401,1477154.860718884970993 6892452.826025616377592,1477172.812970160972327 6892448.211688437499106,1477176.834498385898769 6892435.687072315253317,1477157.23071463429369 6892374.474633106961846,1477135.490202432963997 6892380.483947849832475,1477075.652475078590214 6892397.070906250737607,1477052.30708386329934 6892403.555465837940574,1477067.898670082679018 6892466.684383096173406,1477073.991611915640533 6892473.5982407303527,1477093.642049120273441 6892467.834137276746333)",639,footway,0,0,0,minorroads,0,0 "LINESTRING (1477104.59628144861199 6891583.522458178922534,1477136.936459684744477 6891559.073744270019233,1477456.410020725568756 6891311.233894356526434,1477474.922113521490246 6891297.515479031950235)",640,service,0,0,0,minorroads,0,0 "LINESTRING (1477116.763503728900105 6891599.280038581229746,1477149.467578951269388 6891573.988217326812446,1477469.668933961540461 6891328.61569665838033,1477487.751814926741645 6891314.146186651661992)",641,service,0,0,0,minorroads,0,0 "LINESTRING (1477358.950943501666188 6890905.500577809289098,1477389.145062592579052 6890890.97052111569792,1477415.597574219573289 6890878.233752502128482,1477438.168518 6890867.382225495763123,1477521.230337577406317 6890965.031168691813946)",642,service,0,0,0,minorroads,0,0 "LINESTRING (1477293.813383128261194 6890711.002312272787094,1477245.060517788399011 6890724.566459476016462,1477179.129848600830883 6890751.863417183049023)",643,footway,0,0,0,minorroads,0,0 "LINESTRING (1477623.578697375254706 6892624.202238139696419,1477621.787204523105174 6892605.299932564608753,1477625.295544689754024 6892598.999173911288381,1477697.6923833838664 6892539.977708619087934,1477702.124462053878233 6892533.431718253530562,1477700.025056370068341 6892524.555547795258462,1477695.331718327244744 6892512.33741554338485)",644,service,0,0,0,minorroads,0,0 "LINESTRING (1476916.274926193524152 6891463.640165685676038,1476972.175101556349546 6891324.201267114840448)",645,service,0,0,0,minorroads,0,0 "LINESTRING (1477411.258802472846583 6891147.304194730706513,1477420.178943959064782 6891159.366976878605783)",646,footway,0,0,0,minorroads,0,0 "LINESTRING (1476866.915565874893218 6891446.33471198566258,1476935.21623081760481 6891272.010018249042332)",647,service,0,0,0,minorroads,0,0 "LINESTRING (1477412.387816194444895 6891165.681934850290418,1477402.814526273403317 6891153.297264670953155)",648,footway,0,0,0,minorroads,0,0 "LINESTRING (1477427.587513351812959 6891153.35857486911118,1477419.021938158897683 6891141.924230385571718)",649,footway,0,0,0,minorroads,0,0 "LINESTRING (1477423.817913812352344 6891156.408757981844246,1477415.15903169894591 6891144.591220805421472)",650,footway,0,0,0,minorroads,0,0 "LINESTRING (1477431.627702959813178 6891150.078479750081897,1477423.286064371000975 6891138.966017907485366)",651,footway,0,0,0,minorroads,0,0 "LINESTRING (1477420.178943959064782 6891159.366976878605783,1477426.701097617158666 6891168.180329788476229)",652,steps,0,0,0,minorroads,0,0 "LINESTRING (1477434.221635316265747 6891162.217903890646994,1477427.587513351812959 6891153.35857486911118)",653,steps,0,0,0,minorroads,0,0 "LINESTRING (1477416.036116740433499 6891162.723713628947735,1477406.565464430022985 6891150.59961626958102)",654,footway,0,0,0,minorroads,0,0 "LINESTRING (1477790.178201811853796 6892050.76009990926832,1477793.089377692667767 6892048.154125873930752)",655,footway,0,0,0,minorroads,0,0 "LINESTRING (1477418.975284700049087 6891174.204070466570556,1477412.387816194444895 6891165.681934850290418)",656,steps,0,0,0,minorroads,0,0 "LINESTRING (1477426.897042148280889 6891184.442907216027379,1477421.92378334957175 6891178.005313728936017,1477418.975284700049087 6891174.204070466570556)",657,footway,0,0,0,minorroads,0,0 "LINESTRING (1477446.136928913649172 6891169.391208594664931,1477441.434260177891701 6891163.137557985261083,1477438.401785300811753 6891159.091080768965185)",658,footway,0,0,0,minorroads,0,0 "LINESTRING (1477430.68530307081528 6891181.484679089859128,1477425.721374965040013 6891175.108398336917162,1477422.772876315517351 6891171.353139204904437)",659,footway,0,0,0,minorroads,0,0 "LINESTRING (1477437.991234855726361 6891175.767484820447862,1477433.279235429828987 6891169.360553430393338,1477430.340067470446229 6891165.329400658607483)",660,footway,0,0,0,minorroads,0,0 "LINESTRING (1477426.701097617158666 6891168.180329788476229,1477429.630934883840382 6891172.134846064262092,1477434.426910537295043 6891178.633745247498155)",661,footway,0,0,0,minorroads,0,0 "LINESTRING (1477442.022093768231571 6891172.610001250170171,1477437.282102269353345 6891166.29503783211112,1477434.221635316265747 6891162.217903890646994)",662,footway,0,0,0,minorroads,0,0 "LINESTRING (1477655.685608308762312 6891734.416354355402291,1477657.066550716059282 6891741.436882919631898)",663,steps,0,0,0,minorroads,0,0 "LINESTRING (1476887.153836678247899 6891470.844395658001304,1476887.788323727203533 6891469.020345328375697,1476891.623238111380488 6891456.405285906977952,1476953.905606755753979 6891298.404492945410311)",664,service,0,0,0,minorroads,0,0 "LINESTRING (1477657.066550716059282 6891741.436882919631898,1477657.813006068347022 6891744.87050611898303,1477662.301068890141323 6891765.901480161584914)",665,footway,0,0,0,minorroads,0,0 "LINESTRING (1477421.92378334957175 6891178.005313728936017,1477425.721374965040013 6891175.108398336917162,1477429.630934883840382 6891172.134846064262092,1477433.279235429828987 6891169.360553430393338,1477437.282102269353345 6891166.29503783211112,1477441.434260177891701 6891163.137557985261083)",666,footway,0,0,0,minorroads,0,0 "LINESTRING (1477539.014636401087046 6891785.00108590349555,1477533.500197465298697 6891776.708233860321343)",667,steps,0,0,0,minorroads,0,0 "LINESTRING (1477533.500197465298697 6891776.708233860321343,1477528.760205966420472 6891769.565044686198235)",668,footway,0,0,0,minorroads,0,0 "LINESTRING (1477725.65646710456349 6891926.732001763768494,1477719.451556970831007 6891918.224397381767631)",669,steps,0,0,0,minorroads,0,0 "LINESTRING (1477936.222191923297942 6891522.408476941287518,1477941.960567463189363 6891518.177879937924445,1477949.331814086996019 6891512.996934459544718)",670,footway,0,0,0,minorroads,0,0 "LINESTRING (1477719.451556970831007 6891918.224397381767631,1477708.749253325397149 6891903.569878341630101)",671,footway,0,0,0,minorroads,0,0 "LINESTRING (1478201.335141776595265 6891732.714873464778066,1478199.170421248069033 6891718.367265134118497,1478194.67302773357369 6891689.365553838200867,1478190.492877749027684 6891669.729676574468613,1478176.459517084760591 6891671.952314448542893,1478125.448624295881018 6891656.102620540186763,1478117.200292630353943 6891651.01355717331171,1478098.249657313572243 6891632.772663729265332,1478077.890087522100657 6891607.710663352161646,1478071.806476379279047 6891600.000473447144032,1478068.064868915593252 6891592.627515465021133,1478066.105423611123115 6891589.776435805484653,1478059.704568943707272 6891578.923948316834867,1478057.315911811310798 6891574.923246877267957,1478048.171833718195558 6891567.15177505556494,1478038.029371589887887 6891557.050405757501721,1478027.616319393040612 6891542.335231919772923,1478017.091298892628402 6891529.934653213247657,1478008.619030622998253 6891518.208536428399384,1477996.181218277197331 6891503.953280243091285,1477988.81930234329775 6891498.389138715341687,1477984.340570217231289 6891494.189210750162601,1477973.75956556503661 6891481.405501900240779,1477964.279582561692223 6891469.204283156432211,1477824.468494659755379 6891286.004290502518415,1477785.690138992853463 6891237.798493586480618,1477740.902817723574117 6891179.430780413560569,1477721.830883413087577 6891153.404557520523667,1477715.85924057662487 6891139.548463800922036,1477708.441340490942821 6891129.35566674452275,1477696.861951803788543 6891119.883274444378912,1477597.909963869256899 6890988.619750818237662,1477466.533821473829448 6890820.497053281404078,1477454.497228882741183 6890826.259975696913898)",672,cycleway,0,0,0,minorroads,0,0 "LINESTRING (1477589.045806534821168 6891029.896104246377945,1477596.715635302942246 6891048.580122988671064,1477609.377384255873039 6891053.929370147176087,1477622.487006419571117 6891070.574901269748807,1477627.208336535375565 6891077.31895683798939,1477664.307167656254023 6891126.872611372731626,1477676.838286919984967 6891143.564276114106178,1477704.662410258548334 6891180.672316116280854,1477726.981425359845161 6891210.59185186214745,1477777.273854869185016 6891277.482036370784044,1477789.347770228981972 6891292.610576447099447,1477801.375032129930332 6891307.248653976246715,1477810.183205312816426 6891318.392004153691232,1477819.504566551186144 6891330.317092030309141,1477831.130608697189018 6891345.016549870371819,1477837.186227764235809 6891351.546244668774307,1477920.080094882519916 6891460.482569055631757,1477950.526142653310671 6891500.044585375115275,1477975.830979173071682 6891532.080611075274646,1477989.668395306216553 6891550.167992977425456,1478002.740694703999907 6891567.504326873458922,1478032.43095642933622 6891605.273445462808013,1478058.668862139806151 6891638.781424059532583,1478073.476670235162601 6891658.003355883061886,1478079.08441608841531 6891667.491710782982409,1478084.160312497522682 6891677.731175800785422,1478088.34979317500256 6891684.015883849933743,1478112.348332822322845 6891705.245970531366765,1478127.809289352502674 6891712.573045953176916,1478164.394932417897508 6891727.472475146874785,1478182.552458914928138 6891731.795154212042689,1478189.961028310470283 6891733.036775229498744,1478196.977708644000813 6891735.489360507577658,1478202.594785184599459 6891737.880631879903376,1478206.95221831719391 6891742.801134817302227)",673,cycleway,0,0,0,minorroads,0,0 "LINESTRING (1477469.444997354643419 6891153.312592218630016,1477547.748164046322927 6891253.907934416085482,1477616.375403200741857 6891265.342438179068267)",674,footway,0,0,0,minorroads,0,0 "LINESTRING (1477486.482840825803578 6890984.695979272015393,1477514.00838202284649 6891053.086365345865488)",675,service,0,0,0,minorroads,0,0 "LINESTRING (1477415.597574219573289 6890878.233752502128482,1477494.852471484802663 6890979.95986695215106)",676,service,0,0,0,minorroads,0,0 "LINESTRING (1477512.394172318745404 6890970.012507430277765,1477536.094129821518436 6891031.597436398267746)",677,service,0,0,0,minorroads,0,0 "LINESTRING (1477389.145062592579052 6890890.97052111569792,1477470.17279132688418 6890993.938303586095572)",678,service,0,0,0,minorroads,0,0 "LINESTRING (1477521.230337577406317 6890965.031168691813946,1477558.301176619715989 6891013.066729949787259,1477560.223299158038571 6891021.864595185033977,1477555.007442369591445 6891030.080032028257847,1477480.333914841059595 6891086.638024752959609,1477468.241338095627725 6891086.377458564005792,1477453.414868617197499 6891080.61434968188405,1477444.084176685893908 6891074.008237943053246,1477421.92378334957175 6891021.251503217034042)",679,service,0,0,1,minorroads,0,0 "LINESTRING (1477383.406687055714428 6890923.126736690290272,1477447.863106921315193 6891006.567964611575007)",680,service,0,0,0,minorroads,0,0 "LINESTRING (1477439.782727705081925 6891011.135492536239326,1477466.832403615349904 6891077.579522733576596)",681,service,0,0,0,minorroads,0,0 "LINESTRING (1477464.826304849237204 6890996.973098964430392,1477491.913303528213874 6891070.406299953348935)",682,service,0,0,0,minorroads,0,0 "LINESTRING (1476973.733327108668163 6890098.677702718414366,1477072.200119063491002 6890203.842244775034487,1477138.13078825105913 6890280.302726635709405,1477353.800401557935402 6890557.690723114646971)",4,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1477470.023500254843384 6890738.375857715494931,1477739.381914934143424 6891078.698423445224762,1477864.478501664241776 6891247.500940763391554,1477920.91052646539174 6891323.312250348739326,1477948.986578486626968 6891354.964373402297497,1477973.404999271966517 6891376.300886962562799,1477996.311847963603213 6891392.272653280757368,1478013.694927032105625 6891401.822006645612419,1478036.583114340901375 6891411.340715271420777,1478065.797510776668787 6891417.502590633928776,1478093.948208335554227 6891419.311301215551794,1478129.507475286955014 6891418.805475333705544,1478152.834205113584176 6891412.950159872882068,1478174.593378700781614 6891405.071548422798514,1478206.345723341219127 6891389.345004675909877,1478223.448881654068828 6891375.381208484992385,1478234.179177372483537 6891364.345074972137809,1478247.979270739946514 6891351.914114957675338)",5,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1479792.936579379020259 6889681.205510908737779,1479674.082225559744984 6889811.252340968698263,1479538.255343108437955 6889942.328065656125546,1479396.046267381170765 6890098.233262076042593,1479391.875448089325801 6890102.84625062905252,1479387.424708036473021 6890104.271526698023081,1479382.180859172018245 6890104.700642123818398,1479371.861113895662129 6890102.84625062905252)",7,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478196.94038587808609 6891352.28198526147753,1478211.0204 6891326.638399799354374,1478222.487820381997153 6891308.47488157171756,1478233.955240765586495 6891291.292384384199977,1478245.422661152202636 6891275.99524116050452,1478258.80287338164635 6891260.713454801589251,1478269.309232496190816 6891247.347663466818631,1478277.566894857445732 6891232.878299727104604,1478286.524359109578654 6891203.050646905787289,1478290.247305190423504 6891173.43769099842757,1478299.419375359313563 6891131.670120283961296)",9,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478588.708148004952818 6890605.53993255738169,1478609.123701951000839 6890560.234908378683031,1478633.962003871100023 6890512.462600218132138,1478661.664828216191381 6890461.824570003896952,1478680.783415985293686 6890415.018393527716398)",10,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478511.935214792611077 6890776.462944713421166,1478487.162227714201435 6890850.829076912254095,1478480.472121600992978 6890872.792660155333579,1478469.0513546760194 6890901.760771677829325,1478458.311728261876851 6890927.096459547057748,1478444.334351749392226 6890965.598274794407189)",11,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478747.693807828007266 6890450.713059439323843,1478695.917798298178241 6890536.494319370947778,1478652.86598572623916 6890592.926227985881269,1478605.848629083950073 6890639.948012223467231,1478534.739425873849541 6890732.521037810482085)",12,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478394.816369665553793 6891123.469907105900347,1478413.981610896298662 6891149.388740294612944,1478422.575178162194788 6891163.720005629584193,1478432.139137393329293 6891182.83350836019963,1478437.868182237260044 6891200.015773738734424,1478443.606557776918635 6891221.045322466641665,1478449.326271930942312 6891243.975563655607402,1478452.200125048635527 6891268.821841340512037,1478455.055316777899861 6891293.652867992408574,1478456.016378046944737 6891316.583316278643906,1478453.151855624979362 6891339.513829967938364,1478447.422810775460675 6891364.360402925871313,1478439.771643395768479 6891385.375053562223911,1478430.767525678966194 6891400.534452718682587,1478420.186521029798314 6891416.536923290230334)",13,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478505.114478987408802 6892450.388551495037973,1478533.022578559117392 6892428.221367940306664,1478547.111923375166953 6892412.922061143442988,1478557.151747890049592 6892398.465929266996682,1478563.580594633240253 6892385.098246153444052,1478568.479207897325978 6892368.143395646475255,1478570.681251191534102 6892353.135470101609826,1478571.632981767877936 6892338.326860104687512,1478570.699912574607879 6892311.990289855748415,1478550.256366555579007 6892207.533986137248576)",14,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478037.180278623942286 6891587.247253092937171,1478066.105423611123115 6891589.776435805484653,1478080.782602020073682 6891593.133352279663086,1478089.777389043709263 6891593.945756936445832,1478098.884144365321845 6891592.826784512028098,1478108.280151141108945 6891589.991033161990345,1478117.424229234224185 6891583.093263810500503,1478125.476616371888667 6891573.681650285609066,1478129.395506983622909 6891564.699241130612791,1478130.711134545970708 6891555.425603993237019,1478130.459205863298848 6891544.006015922874212,1478127.743974510813132 6891534.318539171479642,1478122.014929663855582 6891524.998952300287783,1478111.527231932384893 6891513.242186243645847,1478097.792453409638256 6891504.566409018822014,1478038.747834869194776 6891476.270564619451761)",15,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478508.650811232859269 6892023.658011235296726,1478483.16869156784378 6891955.519962281920016,1478463.396955363918096 6891854.103409341536462,1478457.220037306193262 6891812.31697329133749,1478454.476813877699897 6891793.539206840097904,1478438.726605898933485 6891697.918901789933443,1478429.171977360732853 6891676.535548973828554,1478420.335812099277973 6891665.75958699919283,1478408.149928435916081 6891657.88072778377682,1478399.071165190311149 6891653.864658541046083,1478385.448354968335479 6891648.729611102491617,1478367.953307596268132 6891647.825229956768453)",16,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1477868.43471504189074 6891004.698037818074226,1477841.366377748781815 6890998.337224533781409,1477822.247789982473478 6890988.803677652962506,1477801.393693512771279 6890979.193505993112922,1477780.595581200672314 6890971.77513572294265,1477763.119195208651945 6890968.602405070327222,1477746.32394973305054 6890970.012507430277765,1477735.211095642531291 6890976.940405210480094,1477727.559928260045126 6890986.489265248179436,1477721.952182406792417 6890998.613115126267076,1477719.236951056867838 6891012.116438466124237,1477720.869822144042701 6891025.681093722581863,1477726.029694780707359 6891040.45663124602288,1477739.381914934143424 6891078.698423445224762)",17,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478394.816369665553793 6891123.469907105900347,1478404.940170413581654 6891151.136080365628004,1478410.678545950446278 6891170.249553177505732,1478414.494798951782286 6891184.58085570205003,1478417.368652066681534 6891201.778452461585402,1478418.320382643025368 6891218.041097856126726,1478418.320382643025368 6891238.089720109477639,1478416.407590797403827 6891256.253079305402935,1478411.630276529816911 6891276.317124638706446,1478407.814023525686935 6891294.449914567172527,1478403.027378567960113 6891311.663074205629528,1478399.211125569650903 6891327.895286121405661,1478395.394872565520927 6891349.875500658527017,1478393.444757953984663 6891367.855176903307438,1478392.315744229592383 6891385.528333493508399,1478394.909676586044952 6891406.956896369345486,1478402.159624219173566 6891432.263520221225917)",22,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478458.908892544917762 6890873.620319033972919,1478432.279097772669047 6890943.113314905203879,1478416.715503631858155 6890979.362105399370193)",28,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478178.904158371733502 6891520.431132415309548,1478160.308089353842661 6891514.3304911153391,1478117.685488610062748 6891501.086903820745647,1478038.747834869194776 6891476.270564619451761)",31,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1477490.821612572530285 6890732.214502855204046,1477527.397924944991246 6890777.857686535455287,1477549.996860799379647 6890805.108844520524144,1477565.439155949512497 6890821.738533561117947,1477585.817387126618996 6890841.295704958960414,1477601.213028812082484 6890855.31988144479692,1477614.901153875980526 6890865.680928098037839,1477632.489508171333 6890878.494311951100826,1477649.452706102281809 6890888.77875323779881,1477668.282042416976765 6890898.771993438713253,1477686.439568916801363 6890907.033285750076175,1477707.200358462985605 6890915.171969769522548,1477725.833750249585137 6890922.13047450594604,1477746.855799174401909 6890927.847488413564861,1477770.742370518157259 6890933.595160651952028,1477794.628941864939407 6890937.411617287434638,1477821.380035630892962 6890941.228075731545687,1477850.043921245029196 6890945.059863138943911,1477902.482409899821505 6890949.82660922780633,1477940.458326059626415 6890951.343998450785875,1478028.540057893376797 6890957.306267951615155,1478070.472187433857471 6890961.96573100425303,1478111.23798048379831 6890968.004644367843866,1478151.201334026642144 6890975.683573756366968,1478187.992252313066274 6890986.795809898525476,1478222.38518277136609 6890997.340953027829528)",35,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1477811.713438789127395 6891164.670315036550164,1477832.45556695247069 6891186.404841492883861,1477851.910059632034972 6891203.111957489512861,1477871.719118598848581 6891219.497226990759373,1477905.897443146212026 6891245.355058864690363,1477930.74507576203905 6891262.215574943460524,1477950.162245669867843 6891274.998935245908797)",36,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1477917.271556612337008 6890861.695908572524786,1477919.660213744733483 6890873.497702899388969,1477929.681376882363111 6890876.225912362337112,1477939.068052962422371 6890882.433358696289361,1477964.755447848467156 6890903.79927234724164,1477993.242050317581743 6890920.735707654617727,1478017.072637509787455 6890931.70992370788008,1478043.179913533618674 6890940.982841396704316,1478070.173605292104185 6890947.926041314378381,1478124.907444161828607 6890961.429279524832964,1478156.893056107452139 6890970.763540306128561,1478188.804022510070354 6890982.151659685187042,1478222.38518277136609 6890997.340953027829528)",37,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478269.187933499692008 6891469.572158829309046,1478243.696483144769445 6891462.383258138783276,1478210.012685272842646 6891459.041724401526153,1478135.451126047875732 6891458.290645903907716,1478102.224532076856121 6891458.014739540405571,1478074.335093893809244 6891455.730848299339414,1478037.478860765462741 6891447.7142419135198,1478001.229122610529885 6891433.137220955453813,1477972.136025168234482 6891416.506267188116908,1477933.730897177709267 6891384.440046058036387,1477898.6754875916522 6891342.364820868708193,1477840.787874848581851 6891266.277431831695139,1477763.688367415918037 6891163.168213126249611)",38,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478396.486563521204516 6891050.220149672590196,1478391.046770125860348 6891088.599935160949826,1478387.930319021223113 6891118.01332129817456,1478386.372093471698463 6891145.495545344427228,1478382.163951405556872 6891187.385808815248311,1478378.506320169428363 6891208.921137149445713,1478372.991881239460781 6891239.009382877498865,1478369.520863838493824 6891260.422227461822331,1478362.756112190661952 6891278.784898377023637,1478355.926045695319772 6891294.327292013913393,1478345.830237028654665 6891312.904630331322551,1478327.989954053191468 6891332.294389794580638,1478310.998764046467841 6891350.411978059448302,1478297.571898355614394 6891364.145811591297388,1478283.641175301978365 6891375.396536458283663,1478263.253613431937993 6891389.712876693345606,1478242.194241744000465 6891402.603735917247832,1478220.360422622412443 6891413.885170697234571,1478198.479950044536963 6891423.005363918840885,1478177.131326905218884 6891429.734387061558664,1478158.199352977098897 6891435.007247400470078,1478137.298603048780933 6891440.096174038946629,1478114.988918640185148 6891442.518013746477664,1478088.275147637585178 6891441.828249195590615,1478056.961345518007874 6891437.214492295868695,1478035.164849167922512 6891430.991289503872395,1478017.959053244441748 6891424.292921440675855,1478000.762588013662025 6891417.594558958895504,1477984.517853362252936 6891408.04518685489893,1477967.237411904148757 6891395.414895111694932,1477937.668449172284454 6891367.441322010941803,1477910.376175272278488 6891334.287015947513282,1477853.272340653231367 6891256.406356768682599,1477773.756184012396261 6891153.373902422375977)",39,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478279.554332237923518 6891684.153840911574662,1478256.003665801370516 6891694.469970066100359,1478242.875382254831493 6891699.988261526450515)",41,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1477739.381914934143424 6891078.698423445224762,1477811.713438789127395 6891164.670315036550164)",42,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478697.42003969871439 6892579.422395704314113,1478646.241194454720244 6892500.149962106719613,1478632.450431780423969 6892479.929561247117817,1478614.591487424913794 6892458.988699334673584,1478590.975506143877283 6892442.984153510071337,1478571.063809560844675 6892437.419361997395754,1478552.589039536425844 6892437.266062008216977,1478536.241667274385691 6892440.991252523846924,1478522.674841206986457 6892446.663356624543667,1478512.373757313471287 6892454.711619316600263)",43,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478524.373027135850862 6892700.593760442920029,1478524.317042984068394 6892666.928051271475852,1478522.40425114124082 6892647.811019618995488,1478513.801353176590055 6892615.325967458076775,1478499.973267736379057 6892576.157048926688731,1478487.572778159286827 6892544.546107861213386,1478482.29160652612336 6892521.520175693556666,1478482.29160652612336 6892500.594535555690527,1478486.285142672481015 6892481.140637652948499,1478493.348476464860141 6892465.0440674116835,1478505.114478987408802 6892450.388551495037973)",45,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478512.373757313471287 6892454.711619316600263,1478501.456847751280293 6892464.492185577750206,1478494.216230813646689 6892477.461418758146465,1478490.399977812543511 6892496.578045293688774,1478490.399977812543511 6892516.629856382496655,1478495.335913845105097 6892541.725350976921618,1478506.187508562812582 6892572.999015279114246,1478520.015594006050378 6892612.183248752728105,1478528.618491964880377 6892644.66828821413219,1478531.91222621477209 6892665.68628600705415,1478531.977541062282398 6892701.467599032446742)",46,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1477773.756184012396261 6891153.373902422375977,1477609.890572311356664 6890941.044149981811643,1477495.477627843851224 6890800.066300450824201)",47,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1477763.688367415918037 6891163.168213126249611,1477606.559515292756259 6890944.523412792012095,1477495.477627843851224 6890800.066300450824201)",48,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478038.747834869194776 6891476.270564619451761,1478016.783386061200872 6891466.046684342436492,1477987.559658932499588 6891449.476974944584072,1477960.565967173781246 6891425.565151103772223,1477940.439664676785469 6891408.397731687873602,1477893.683567407075316 6891346.396062412299216,1477835.012176543008536 6891269.78749094158411,1477773.252326647052541 6891185.147977290675044,1477763.688367415918037 6891163.168213126249611)",50,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1477353.800401557935402 6890557.690723114646971,1477430.918570373440161 6890653.711285330355167)",51,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478431.31803650339134 6891617.70479725766927,1478395.805423010606319 6891558.521924624219537)",59,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478247.979270739946514 6891351.914114957675338,1478261.359482969157398 6891334.716197027824819,1478269.953050238080323 6891318.483971345238388,1478276.643156351288781 6891303.20210421551019,1478282.381531891180202 6891285.988962695933878,1478286.19778489228338 6891267.825536315329373,1478290.023368583526462 6891245.860873832367361,1478291.926829739008099 6891217.565939981490374,1478294.632730398792773 6891179.905936032533646,1478299.419375359313563 6891131.670120283961296,1478305.633616185979918 6891110.012379135005176,1478315.561472400324419 6891089.36630654707551,1478323.389922930859029 6891076.905116900801659,1478350.271646386012435 6891029.512921379879117)",62,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1478222.38518277136609 6890997.340953027829528,1478265.38101119431667 6891016.607333100400865,1478304.32731931633316 6891039.64428252261132)",63,motorway_link,0,0,1,motorways,3,0 "LINESTRING (1479505.653905502287671 6891073.088594046421349,1479511.261651349952444 6891082.208400661125779,1479521.71202631550841 6891092.493102550506592,1479746.936268157558516 6891225.214452367275953,1479755.165938443038613 6891230.977664898149669,1479832.228123104199767 6891286.387485591694713,1479913.489119135309011 6891344.817286965437233,1479959.526753128273413 6891366.429676809348166,1480017.134445112897083 6891393.45290981978178,1480128.822827531956136 6891445.108463356271386)",165,residential,0,0,0,minorroads,3,0 "LINESTRING (1479467.789957643020898 6890509.550598309375346,1479441.747996460879222 6890586.856943410821259,1479449.529793532565236 6890590.320726469159126,1479457.666156894760206 6890598.397783920168877,1479463.22724928939715 6890607.670317178592086,1479467.556690343189985 6890622.843576487153769,1479469.021608978044242 6890645.833417885005474,1479472.46463430300355 6890697.59145475551486,1479478.305647450499237 6890719.830500395968556,1479480.489029361866415 6890744.552544073201716,1479485.7422089218162 6890800.280876728706062,1479493.141447621630505 6890875.21432897169143,1479491.368616155348718 6890886.081193597055972,1479490.071649975609034 6890894.005277621559799,1479503.097295911749825 6891055.03294020332396,1479505.653905502287671 6891073.088594046421349)",166,residential,0,0,0,minorroads,3,0 "LINESTRING (1478892.478154525859281 6890538.8086022362113,1478857.935932998079807 6890331.031569452024996,1479014.271676310105249 6890305.038744745776057,1479049.942911565070972 6890299.475432928651571,1479065.637135392287746 6890291.306720341555774,1479071.926021756138653 6890284.80853839032352,1479078.233569500269368 6890275.796917401254177)",167,residential,0,0,0,minorroads,3,0 "LINESTRING (1479046.145319949602708 6890513.27489566989243,1479014.271676310105249 6890305.038744745776057)",168,residential,0,0,0,minorroads,3,0 "LINESTRING (1479203.460785916773602 6890490.040212746709585,1479046.145319949602708 6890513.27489566989243,1478892.478154525859281 6890538.8086022362113,1478782.002762058749795 6890554.196301298215985,1478765.692712562624365 6890556.571894911117852,1478744.437396341003478 6890562.901705839671195,1478733.203243254218251 6890567.423002410680056,1478725.150856119580567 6890575.346772366203368,1478720.952044752193615 6890584.603952579200268,1478718.61004107282497 6890595.868913067504764,1478718.684686610475183 6890607.517052077688277,1478721.138658590381965 6890619.165207961574197)",169,residential,0,0,0,minorroads,3,0 "LINESTRING (1479490.071649975609034 6890894.005277621559799,1479245.458230298943818 6890915.64710977114737,1479232.777819963172078 6890911.35552369710058)",170,residential,0,0,0,minorroads,3,0 "LINESTRING (1479186.796170124784112 6890329.437667407095432,1479194.335369206732139 6890321.713377351872623,1479221.870241096476093 6890288.900553298182786,1479238.29225889313966 6890269.344725587405264,1479371.861113895662129 6890102.84625062905252,1479378.177992332726717 6890095.842478349804878,1479401.150155866052955 6890069.130116234533489,1479433.070452967192978 6890027.628814021125436,1479445.853500913595781 6890008.594684292562306)",171,residential,0,0,0,minorroads,3,0 "LINESTRING (1479356.241535600507632 6892244.984189610928297,1479596.926733975531533 6891723.011840671300888)",173,residential,0,0,0,minorroads,3,0 "LINESTRING (1479565.510294239735231 6892254.902467562817037,1479723.329617572249845 6891860.342268580570817)",174,residential,0,0,0,minorroads,3,0 "LINESTRING (1479608.944665183546022 6891709.660609316080809,1479997.390700987540185 6891805.618287485092878)",175,residential,0,0,0,minorroads,3,0 "LINESTRING (1479584.125024646287784 6890393.883670332841575,1479781.721087680663913 6890154.202325228601694)",176,residential,0,0,0,minorroads,3,0 "LINESTRING (1479482.392490514554083 6891545.140309852547944,1479497.461557985516265 6891543.408212435431778,1480046.890021679922938 6891672.780055603943765)",177,residential,0,0,0,minorroads,3,0 "LINESTRING (1479238.29225889313966 6890269.344725587405264,1479244.002642357023433 6890273.712598342448473,1479250.888693001354113 6890278.75481229275465,1479261.31107589113526 6890279.383173528127372,1479275.157822717214003 6890275.015297694131732,1479297.010303219081834 6890236.869282925501466,1479430.597819601651281 6890091.566655383445323,1479511.784170098369941 6889997.928235160186887,1479526.340049513848498 6889979.62979072984308,1479584.209000873845071 6889912.566501155495644,1479958.248448334634304 6889556.784876331686974,1479970.714252753648907 6889544.877743250690401,1479991.111145313596353 6889525.645538517273962,1480003.334351745434105 6889522.212862986139953,1480012.739689214387909 6889526.059298608452082,1480015.688187863910571 6889532.327000443823636,1480017.050468885339797 6889535.238648432306945,1480013.766065325355157 6889548.034587628208101,1480003.222383442102 6889555.972677503712475,1479990.989846320124343 6889554.624121142551303,1479970.714252753648907 6889544.877743250690401)",178,unclassified,0,0,0,minorroads,3,0 "LINESTRING (1478735.713199388701469 6892210.431273595429957,1478737.803274379577488 6892156.517370771616697,1478747.012667317176238 6892105.30179741140455,1478856.713612355990335 6891712.665017653256655,1478875.897514964221045 6891664.70191867928952,1478898.291175603168085 6891642.306974301114678,1478920.675505543360487 6891632.711349874734879,1479150.145212217466906 6891598.774201380088925)",179,residential,0,0,1,minorroads,3,0 "LINESTRING (1479232.777819963172078 6890911.35552369710058,1479225.509210946969688 6890904.029178469441831,1479219.015049364650622 6890835.992580109275877,1479415.566074902191758 6890596.129463358782232,1479426.510976537596434 6890588.466222968883812,1479433.854231088422239 6890586.182578745298088,1479441.747996460879222 6890586.856943410821259)",185,residential,0,0,0,minorroads,3,0 "LINESTRING (1479723.329617572249845 6891860.342268580570817,1479596.926733975531533 6891723.011840671300888)",188,residential,0,0,0,minorroads,3,0 "LINESTRING (1479094.002438864903525 6890258.861840659752488,1479102.166794305900112 6890249.972855378873646,1479110.592409119475633 6890237.283079625107348,1479113.904804755235091 6890222.585646998137236,1479107.16804518038407 6890125.037674428895116,1479369.173874618951231 6890088.94599081762135,1479378.177992332726717 6890095.842478349804878)",197,residential,0,0,0,minorroads,3,0 "LINESTRING (1479150.145212217466906 6891598.774201380088925,1479134.525633922312409 6891683.923912476748228,1479122.50770271429792 6891741.850757068023086,1479112.365240588784218 6891776.922836208716035,1479083.458756984677166 6891830.404985710047185,1479039.623166288714856 6891874.843419559299946,1478994.845175709342584 6891943.793224707245827,1478968.961836289614439 6891994.609211077913642,1478956.608000173931941 6892018.875299187377095,1478935.147408731281757 6892081.709938492625952,1478923.026839912869036 6892143.012125051580369,1478922.522982550086454 6892195.055733603425324,1478922.243061791639775 6892224.595805050805211)",200,residential,0,0,1,minorroads,3,0 "LINESTRING (1478948.648919956991449 6892418.042266790755093,1478932.982688202988356 6892462.407298980280757,1478924.323806092375889 6892507.707714077085257,1478923.16680029197596 6892543.764267535880208,1478928.690569914877415 6892595.135937471874058,1478954.200681655900553 6892647.565733219496906,1478981.091735800961033 6892698.110219702124596,1478998.14824065216817 6892739.042748300358653,1479008.262710707494989 6892770.393833446316421,1479017.257497728569433 6892806.252266069874167,1479018.65710151870735 6892835.779252862557769,1479019.179620267124847 6892907.067596364766359)",201,residential,0,0,0,minorroads,3,0 "LINESTRING (1478917.605707900365815 6892380.08537070825696,1478948.648919956991449 6892418.042266790755093,1478994.257342116441578 6892488.667711554095149,1479021.055089343804866 6892527.437619337812066,1479045.053628993919119 6892554.863341205753386,1479059.282934189308435 6892565.96243020426482,1479069.22945178928785 6892573.719537409953773,1479138.341886926209554 6892625.474657708778977,1479163.90798281878233 6892643.380535209551454,1479204.5151541037485 6892671.818462022580206,1479218.987057288642973 6892679.161748955026269,1479293.669915507314727 6892716.982082463800907,1479382.861999682616442 6892764.108276013284922)",202,residential,0,0,0,minorroads,3,0 "LINESTRING (1478922.690935002407059 6892238.254484030418098,1478923.446721050655469 6892317.493675459176302,1478917.605707900365815 6892380.08537070825696)",203,residential,0,0,0,minorroads,3,0 "LINESTRING (1479434.777969588991255 6891585.561131720431149,1479383.543140193447471 6891577.667022745124996)",204,residential,0,0,0,minorroads,3,0 "LINESTRING (1479354.879254579078406 6892263.487076595425606,1479349.467453256715089 6892329.95678826700896,1479349.355484956176952 6892342.527229115366936,1479352.994454809231684 6892359.236747993156314,1479354.991222882410511 6892368.404003384523094,1479365.450928538106382 6892387.980267693288624,1479382.470110620604828 6892403.647445440292358,1479415.538082826416939 6892422.043387837707996,1479449.315187618602067 6892436.146972191520035,1479465.634567807661369 6892439.780182166956365,1479506.027133178431541 6892443.306083716452122,1479520.704311587382108 6892443.949944161809981,1479571.528590538073331 6892439.105662046931684,1479589.126275520771742 6892444.087914266623557,1479616.297250424511731 6892460.996934827417135,1479667.821331271668896 6892498.969543068669736,1479700.124186736298725 6892523.865690400823951,1479709.174957911716774 6892527.560260701924562,1479717.899154869839549 6892526.05790411029011,1479767.417136950884014 6892498.601620291359723,1479779.584359225351363 6892492.408255994319916)",215,residential,0,0,1,minorroads,3,0 "LINESTRING (1479064.209539529168978 6890130.202399942092597,1479107.16804518038407 6890125.037674428895116)",216,residential,0,0,0,minorroads,3,0 "LINESTRING (1479511.784170098369941 6889997.928235160186887,1479577.425587837351486 6890050.785533404909074)",218,unclassified,0,0,0,minorroads,3,0 "LINESTRING (1478743.644287527073175 6890644.500005290843546,1478764.862280979752541 6890650.661292929202318,1478794.823132770834491 6890656.071581743657589,1478844.219815858406946 6890657.343689843080938,1478888.745877755107358 6890655.642436888068914,1478931.480446802219376 6890650.891191814094782,1478963.578027048613876 6890644.591964773833752,1479008.439993852749467 6890630.675441741943359,1479056.194475160446018 6890605.585912075825036,1479095.672632720787078 6890583.837629308924079,1479133.965792407980189 6890555.943512021563947,1479203.460785916773602 6890490.040212746709585,1479266.862837587017566 6890414.650566106662154)",235,residential,0,0,0,minorroads,3,0 "LINESTRING (1479383.543140193447471 6891577.667022745124996,1479323.005610939580947 6891573.329098201356828,1479299.119039598386735 6891575.842948182485998,1479238.852100410265848 6891583.553114917129278,1479171.10194629477337 6891595.187356659211218,1479150.145212217466906 6891598.774201380088925)",236,residential,0,0,0,minorroads,3,0 "LINESTRING (1479596.926733975531533 6891723.011840671300888,1479465.550591580104083 6891589.531181692145765,1479434.777969588991255 6891585.561131720431149)",285,residential,0,0,0,minorroads,3,0 "LINESTRING (1478721.138658590381965 6890619.165207961574197,1478727.371560799656436 6890630.690768297761679,1478735.050720260944217 6890638.997764837928116,1478743.644287527073175 6890644.500005290843546)",289,residential,0,0,0,minorroads,3,0 "LINESTRING (1478553.951320560649037 6891315.418398878537118,1478529.78482845518738 6891312.260860466398299,1478502.221964489435777 6891308.628160036168993,1478489.158995784586295 6891306.911441416479647)",296,unclassified,0,0,0,minorroads,3,0 "LINESTRING (1478598.850610133260489 6891319.848151468671858,1478619.014235399430618 6891314.222825936973095,1478629.520594513742253 6891309.455863785929978,1478638.123492472805083 6891299.891292298212647,1478656.850191182689741 6891252.574420961551368)",318,unclassified,0,0,0,minorroads,3,0 "LINESTRING (1478362.989379487698898 6891563.457646118476987,1478372.702629790874198 6891539.468841813504696,1478383.955444257706404 6891522.730370282195508,1478405.789263379527256 6891501.899299177341163,1478420.401126943761483 6891493.03959580976516,1478439.109164268011227 6891484.793029486201704,1478451.080442011589184 6891482.585771531797945,1478466.158840178279206 6891481.390173728577793,1478478.036811004159972 6891474.906357950530946,1478487.899352376582101 6891463.640165685676038,1478507.064593604533002 6891401.454134074039757,1478520.276853378862143 6891359.056933037005365,1478529.78482845518738 6891312.260860466398299)",320,unclassified,0,0,1,minorroads,3,0 "LINESTRING (1478237.248975021298975 6891675.033351420424879,1478264.074714324669912 6891662.709210627712309)",322,unclassified,0,0,1,minorroads,3,0 "LINESTRING (1478917.605707900365815 6892380.08537070825696,1478763.248071275651455 6892276.22604011092335,1478747.908413741970435 6892253.584117701277137,1478739.464137542527169 6892228.489522617310286)",323,residential,0,0,1,minorroads,3,0 "LINESTRING (1478079.187053699046373 6892810.37622603494674,1478145.453627796843648 6892613.685621440410614,1478151.313302329974249 6892587.37880960572511,1478163.71379190729931 6892357.366506541147828,1478160.606671495363116 6892351.387868744321167,1478139.976511632790789 6892311.59171611443162)",330,residential,0,0,0,minorroads,3,0 "LINESTRING (1478763.248071275651455 6892276.22604011092335,1478726.867703434312716 6892307.789936803281307)",335,residential,0,0,1,minorroads,3,0 "LINESTRING (1478755.606234583305195 6889945.040633909404278,1478753.161593299126253 6889966.633935891091824,1478748.785498783690855 6889984.227385916747153,1478740.005317673785612 6890001.008630651049316,1478657.895228676730767 6890098.125983302481472)",338,residential,0,0,0,minorroads,3,0 "LINESTRING (1477786.39927157945931 6890262.126246342435479,1478094.340097397565842 6890523.819417727179825,1478155.810695839114487 6890564.786856304854155)",346,unclassified,0,0,0,minorroads,3,0 "LINESTRING (1477842.131494486937299 6889810.838566199876368,1477906.373308435780928 6889868.935817634686828,1478137.494547579903156 6890058.632166887633502,1478153.804597075795755 6890076.363747696392238,1478161.362457540817559 6890099.060841219499707,1478176.627469539875165 6890170.079709811136127,1478184.745171522023156 6890192.792393619194627,1478195.494128623511642 6890209.911240221001208,1478209.71410313132219 6890228.547376076690853,1478261.070231520570815 6890273.49803611356765,1478292.038798042573035 6890286.525038770399988)",432,residential,0,0,0,minorroads,3,0 "LINESTRING (1478726.867703434312716 6892307.789936803281307,1478725.262824423145503 6892320.069077261723578,1478849.314373653382063 6892600.225598565302789)",449,residential,0,0,1,minorroads,3,0 "LINESTRING (1477170.004431890556589 6892330.416682093404233,1477226.473779457621276 6892480.77271568775177)",497,residential,0,0,0,minorroads,3,0 "LINESTRING (1477206.375469039194286 6890495.557677546516061,1477167.625105448300019 6890527.559048051945865,1477202.689845727290958 6890575.867871635593474)",504,residential,0,0,1,minorroads,3,0 "LINESTRING (1477056.785815992159769 6892691.840049274265766,1477047.42713198508136 6892531.960020915605128,1477034.205541517818347 6892466.163161252625287,1477014.965654755244032 6892407.817188702523708,1477005.485671751899645 6892378.107815207913518,1476984.137048612581566 6892331.842353134416044,1476956.555523263756186 6892281.284839883446693,1476909.892732914770022 6892184.90758672170341)",523,residential,0,0,0,minorroads,3,0 "LINESTRING (1476392.496534616453573 6892429.171826844103634,1476550.259873797185719 6892335.797441869974136,1476622.861987715121359 6892298.960004699416459,1476700.521336662117392 6892264.85141708701849,1476909.892732914770022 6892184.90758672170341,1477091.430675133131444 6892112.736543129198253,1477219.41977636096999 6892066.212010371498764,1477229.84215924795717 6892055.54283092636615)",525,residential,0,0,0,minorroads,3,0 "LINESTRING (1477005.485671751899645 6892378.107815207913518,1477065.827256471849978 6892358.362946599721909,1477125.282425462966785 6892342.404590574093163,1477170.004431890556589 6892330.416682093404233)",526,residential,0,0,0,minorroads,3,0 "LINESTRING (1477226.473779457621276 6892480.77271568775177,1477166.915972861694172 6892497.804454318247736,1477136.208665715297684 6892506.573284320533276,1477105.706633787136525 6892515.296133446507156,1477047.42713198508136 6892531.960020915605128)",527,residential,0,0,0,minorroads,3,0 "LINESTRING (1477091.430675133131444 6892112.736543129198253,1477170.004431890556589 6892330.416682093404233)",528,residential,0,0,0,minorroads,3,0 "LINESTRING (1477226.473779457621276 6892480.77271568775177,1477255.268294758396223 6892486.061595555394888,1477275.814478393411264 6892495.91885052062571)",529,residential,0,0,0,minorroads,3,0 "LINESTRING (1477275.814478393411264 6892495.91885052062571,1477328.626194727374241 6892664.521173093467951)",530,residential,0,0,0,minorroads,3,0 "LINESTRING (1477459.5917866777163 6892447.751787870191038,1477537.027199015021324 6892540.912850533612072,1477573.267606480047107 6892584.466056008823216,1477587.123683996265754 6892602.264529967680573)",531,residential,0,0,0,minorroads,3,0 "LINESTRING (1477275.814478393411264 6892495.91885052062571,1477459.5917866777163 6892447.751787870191038)",532,residential,0,0,0,minorroads,3,0 "LINESTRING (1476599.497935119783506 6892427.807458454743028,1476729.035931204212829 6892369.20115651935339,1476956.555523263756186 6892281.284839883446693)",533,residential,0,0,0,minorroads,3,0 "LINESTRING (1476699.578936775680631 6892648.255601234734058,1476829.256893242476508 6892551.184088567271829,1477014.965654755244032 6892407.817188702523708)",534,residential,0,0,0,minorroads,3,0 "LINESTRING (1477131.048793075839058 6890631.24252425506711,1476933.564698341768235 6890379.676385825499892)",536,residential,0,0,0,minorroads,3,0 "LINESTRING (1477050.235670255264267 6890288.333494927734137,1476933.564698341768235 6890379.676385825499892,1476902.820068429457024 6890398.910633538849652,1476831.654881067806855 6890456.920177238993347)",537,residential,0,0,1,minorroads,3,0 "LINESTRING (1476942.736768513685092 6890783.32936832588166,1476752.110732350964099 6890533.904162514954805,1476753.948878661962226 6890517.596921934746206,1476575.592702392954379 6890272.946304704993963,1476409.226465250365436 6890059.260510915890336,1476395.724954024655744 6890059.306487303227186,1476182.322698862291873 6889785.015997536480427)",552,residential,0,0,1,minorroads,3,0 "LINESTRING (1475786.729353038361296 6891662.356654640287161,1475992.471110128099099 6891500.68837027810514,1476100.436546466313303 6891415.663224364630878,1476197.223813875345513 6891340.402848524972796,1476278.139574306318536 6891277.49736415874213,1476321.676582857733592 6891244.343429019674659,1476489.871635615592822 6891115.576251862570643,1476493.678557923762128 6891113.246475487947464,1476512.825137766078115 6891098.624078639782965,1476574.920892572263256 6891049.53041878528893,1476642.055221018847078 6890998.321897276677191,1476664.887424173066393 6890986.290011228993535,1476689.865686475299299 6890974.840577159076929,1476942.736768513685092 6890783.32936832588166,1477029.446888633305207 6890709.37768148444593,1477131.048793075839058 6890631.24252425506711,1477191.548999560764059 6890584.63460551109165,1477202.689845727290958 6890575.867871635593474,1477245.125832630088553 6890544.065551890060306)",553,residential,0,0,0,minorroads,3,0 "LINESTRING (1476209.33505200385116 6889063.703335772268474,1476378.08994627604261 6889279.645944504998624,1476389.286776594119146 6889290.434032781980932,1476403.721357013098896 6889290.434032781980932,1476463.493769522989169 6889363.667758987285197,1476927.490417897468433 6889968.91740414686501,1477296.220701646525413 6890447.448577187024057,1477305.336787663633004 6890453.180579769425094)",554,unclassified,0,0,0,minorroads,3,0 "LINESTRING (1477029.446888633305207 6890709.37768148444593,1476831.654881067806855 6890456.920177238993347,1476647.672297562239692 6890213.635398782789707)",559,residential,0,0,0,minorroads,3,0 "LINESTRING (1479591.626900956500322 6890520.325010627508163,1479593.922251174226403 6890511.037251781672239,1479600.099169231951237 6890495.251151624135673,1479608.85135826584883 6890481.411518443375826,1479619.36704807030037 6890469.027902306057513,1479629.257581518730149 6890462.728817746974528,1479643.738815393997356 6890454.146131407469511,1479658.985166010214016 6890448.720652269199491,1479858.307407052256167 6890380.24345064163208,1480100.522838903823867 6890293.513651255518198)",67,tertiary,0,0,0,mainroads,4,0 "LINESTRING (1477367.992383987177163 6890698.603015801869333,1477349.881510943174362 6890675.812269823625684,1477245.125832630088553 6890544.065551890060306)",76,tertiary,0,0,0,mainroads,4,0 "LINESTRING (1477245.125832630088553 6890544.065551890060306,1477206.375469039194286 6890495.557677546516061,1477050.235670255264267 6890288.333494927734137,1476863.48187124566175 6890045.559557152912021,1476700.614643579581752 6889836.354716989211738,1476482.229798923013732 6889550.532479927875102,1476148.77886136691086 6889111.926746366545558,1476140.558521774364635 6889102.134934161789715,1476127.560867911204696 6889083.470761761069298,1476121.029383563203737 6889075.579109120182693)",98,tertiary,0,0,0,mainroads,4,0 "LINESTRING (1477440.221270225942135 6890807.515166061930358,1477433.064629515865818 6890796.72504198551178,1477425.628068044548854 6890779.620272696949542,1477416.483989951433614 6890762.960017169825733)",140,tertiary,0,0,0,mainroads,4,0 "LINESTRING (1477601.352989191422239 6891019.243627357296646,1477589.045806534821168 6891029.896104246377945,1477529.049457415007055 6891078.468512326478958,1477462.521623944398016 6891132.436495768837631)",65,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478347.248502201633528 6892208.147168586961925,1478342.172605789732188 6892190.916759766638279,1478325.657281069783494 6892141.203251630999148)",66,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479405.974123598309234 6890464.384051165543497,1479414.754304702393711 6890467.663866545073688,1479438.323632521787658 6890477.058859107084572,1479453.616636599646881 6890482.744903990067542)",68,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478942.192081137793139 6890130.999331175349653,1478922.700265695340931 6890097.880774687975645,1478913.39756584004499 6890080.455656515434384)",69,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478371.433655687142164 6890928.767115697264671,1478421.474156513577327 6890821.386014446616173,1478431.82189386873506 6890796.433831455186009,1478464.609945313073695 6890729.379055060446262,1478502.968419844750315 6890668.378852861002088,1478530.932503562653437 6890635.120143613778055,1478590.24771217443049 6890558.411064649000764,1478600.64210298541002 6890542.839440878480673,1478604.346387683181092 6890537.306617256253958,1478629.184689603513107 6890499.098052786663175,1478658.809636487159878 6890449.410331619903445,1478680.783415985293686 6890415.018393527716398)",70,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479356.241535600507632 6892244.984189610928297,1479354.879254579078406 6892263.487076595425606)",71,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478687.930726005230099 6892209.189578847959638,1478735.713199388701469 6892210.431273595429957,1478922.243061791639775 6892224.595805050805211)",72,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478357.316318792523816 6892236.261633796617389,1478331.460971454158425 6892240.814530819654465,1478302.573149230098352 6892246.517152946442366,1478272.724265742348507 6892252.940272497013211,1478243.276602006983012 6892261.908121032640338,1478210.040677348850295 6892275.42889619525522,1478139.976511632790789 6892311.59171611443162,1478016.484803919447586 6892382.200895741581917,1477743.403443159302697 6892544.331485021859407,1477660.07103352015838 6892595.227919272147119,1477634.187694100197405 6892612.566507063806057,1477623.578697375254706 6892624.202238139696419,1477615.778238917700946 6892632.756580822169781,1477604.963966968702152 6892661.623721974901855,1477604.609400675399229 6892681.859910343773663)",73,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478512.980252289446071 6892501.529672888107598,1478525.371411173837259 6892530.396342795342207,1478531.641636149259284 6892551.858618092723191,1478539.078197620576248 6892576.92356213927269,1478543.603583205491304 6892616.000502363778651,1478545.647004743106663 6892654.541068081744015,1478545.684327509021387 6892718.913729729130864,1478543.836850505322218 6892759.263800947926939,1478540.533785562496632 6892805.838337119668722,1478537.08142954739742 6892857.456974725238979)",74,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478185.743555557215586 6892242.623426643200219,1478266.323411077726632 6892206.675530795939267,1478294.147534419083968 6892193.936677500605583)",75,secondary,0,0,1,mainroads,5,0 "LINESTRING (1477462.521623944398016 6891132.436495768837631,1477504.994933616137132 6891184.151682637631893,1477516.453023307025433 6891195.61674244236201,1477529.674613774055615 6891209.641537031158805,1477544.967617851914838 6891218.546911101788282,1477559.924717016518116 6891225.87354295141995,1477576.020160598680377 6891231.130941885523498,1477592.899382304633036 6891232.878299727104604,1477611.047578108729795 6891232.878299727104604,1477626.340582186589018 6891228.111385807394981,1477641.6242555687204 6891222.363503010012209,1477687.951141010504216 6891192.24466432724148,1477698.952026794664562 6891185.101994454860687)",77,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478086.567631015786901 6891649.909905299544334,1478125.196695613209158 6891674.772766153328121,1478142.915679592173547 6891681.685942734591663,1478159.589626074302942 6891686.315168510191143,1478175.087905370397493 6891688.721753821708262,1478194.67302773357369 6891689.365553838200867,1478206.467022337485105 6891687.633425346575677)",78,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478237.248975021298975 6891675.033351420424879,1478242.875382254831493 6891699.988261526450515)",79,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478347.248502201633528 6892208.147168586961925,1478371.750899214530364 6892203.548301403410733)",80,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478371.750899214530364 6892203.548301403410733,1478382.453202857170254 6892232.153297962620854)",81,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478357.316318792523816 6892236.261633796617389,1478347.248502201633528 6892208.147168586961925)",82,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478382.453202857170254 6892232.153297962620854,1478357.316318792523816 6892236.261633796617389)",83,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479591.626900956500322 6890520.325010627508163,1479585.384668057085946 6890546.502448085695505)",84,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478242.875382254831493 6891699.988261526450515,1478212.02811472909525 6891713.140204788185656)",85,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478913.39756584004499 6890080.455656515434384,1478902.919198798481375 6890060.471222716383636,1478901.482272242428735 6890051.766362176276743,1478896.611651054350659 6890025.77444030251354,1478895.202716574305668 6890003.031577592715621,1478891.041227969806641 6889935.293782743625343)",86,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478206.467022337485105 6891687.633425346575677,1478237.248975021298975 6891675.033351420424879)",87,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478891.041227969806641 6889935.293782743625343,1478923.241445826832205 6889993.42258417326957,1478944.664714500773698 6890030.004252052865922,1478948.424983350094408 6890035.276194448582828,1478965.164244676940143 6890062.325604433193803)",88,secondary,0,0,1,mainroads,5,0 "LINESTRING (1480004.127460559597239 6892298.699399212375283,1479952.398104491410777 6892295.096912450157106,1479897.916194301797077 6892292.076956707052886,1479756.929439219413325 6892285.025287828408182,1479744.82753178384155 6892283.798911259509623,1479593.00784336659126 6892275.26026960555464,1479563.980060763191432 6892273.619992980733514,1479551.467602882767096 6892272.914827428758144,1479354.879254579078406 6892263.487076595425606,1479238.124306440819055 6892256.75735551957041)",89,secondary,0,0,1,mainroads,5,0 "LINESTRING (1477166.010895744198933 6890934.453480053693056,1477233.434475639369339 6890900.503951973281801,1477338.096847037784755 6890853.449989835731685,1477440.221270225942135 6890807.515166061930358)",90,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478922.690935002407059 6892238.254484030418098,1478922.243061791639775 6892224.595805050805211)",91,secondary,0,0,0,mainroads,5,0 "LINESTRING (1477743.403443159302697 6892544.331485021859407,1477711.763066816842183 6892498.678270866163075)",93,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478394.097906388808042 6892344.934010887518525,1478418.469673712505028 6892336.287995646707714)",94,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478206.467022337485105 6891687.633425346575677,1478203.621161298360676 6891671.952314448542893,1478190.950081655522808 6891606.959570964798331,1478184.297298308229074 6891568.669280803762376,1478181.7500194106251 6891550.612513891421258,1478178.904158371733502 6891520.431132415309548,1478177.205972440075129 6891489.069593496620655)",95,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478739.464137542527169 6892228.489522617310286,1478735.713199388701469 6892210.431273595429957)",96,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478544.135432646842673 6892221.683182909153402,1478529.290301782777533 6892221.10065860580653,1478515.340917346067727 6892220.410827253945172,1478479.884288007859141 6892219.751655120402575,1478450.119380745105445 6892221.514557450078428,1478435.358226108597592 6892223.185482617467642,1478397.102389190113172 6892229.700561141595244,1478382.453202857170254 6892232.153297962620854)",99,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478371.750899214530364 6892203.548301403410733,1478390.356298925122246 6892200.773652814328671,1478423.946789876557887 6892198.397573292255402,1478426.568714311579242 6892198.351584662683308,1478451.742921142140403 6892197.86103930324316,1478527.237549557816237 6892200.804311908781528)",100,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478472.802292829845101 6892429.708376270718873,1478484.279043906368315 6892448.686919055879116)",101,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478431.579295878997073 6892449.652710394002497,1478394.097906388808042 6892344.934010887518525,1478379.915254652500153 6892302.271228101104498,1478363.931779373902828 6892254.166644357144833,1478357.316318792523816 6892236.261633796617389)",103,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478382.453202857170254 6892232.153297962620854,1478389.077994128456339 6892251.89785656798631,1478418.469673712505028 6892336.287995646707714,1478423.265649365726858 6892349.165043009445071,1478442.53352820710279 6892385.251545143313706,1478472.802292829845101 6892429.708376270718873)",104,secondary,0,0,1,mainroads,5,0 "LINESTRING (1480128.794835455948487 6890683.199713693931699,1480037.745943589601666 6890661.297954847104847,1479908.067987125832587 6890628.069927993230522,1479700.842650018632412 6890575.729933591559529,1479627.876639111666009 6890557.491479728370905,1479585.384668057085946 6890546.502448085695505)",105,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479285.906779821496457 6890425.80800533015281,1479266.862837587017566 6890414.650566106662154)",106,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479220.367999695939943 6892255.622961183078587,1479175.095482441131026 6892253.338843335397542,1478949.302068391814828 6892240.109368146397173,1478922.690935002407059 6892238.254484030418098,1478739.464137542527169 6892228.489522617310286)",108,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478973.058010046370327 6890074.815872622653842,1478987.24999247584492 6890117.681394563056529,1478991.019592018099502 6890132.409286628477275,1478995.115765775088221 6890146.44755226187408,1479000.21032356726937 6890161.589289834722877,1479007.926805797265843 6890178.493510303087533,1479018.778400514973328 6890192.562507837079465,1479037.449115067487583 6890212.026194254867733,1479094.002438864903525 6890258.861840659752488,1479124.859037083573639 6890282.417699187062681,1479175.655323958257213 6890321.176968595944345,1479186.796170124784112 6890329.437667407095432)",111,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479233.776204001158476 6892239.772116457112134,1479356.241535600507632 6892244.984189610928297,1479565.510294239735231 6892254.902467562817037,1479746.880284008570015 6892264.08493363391608,1479758.142429168568924 6892264.774768739938736,1479997.623968284577131 6892279.721210523508489)",113,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479173.966468716738746 6890346.066372577100992,1479186.796170124784112 6890329.437667407095432)",114,secondary,0,0,0,mainroads,5,0 "LINESTRING (1479078.233569500269368 6890275.796917401254177,1479094.002438864903525 6890258.861840659752488)",116,secondary,0,0,0,mainroads,5,0 "LINESTRING (1477871.81242551933974 6890936.997784550301731,1477872.456243261462077 6890928.291974918916821,1477877.485486214514822 6890906.496837940067053,1477884.352875475771725 6890890.617998971603811,1477892.591876451391727 6890882.540647934190929,1477899.328636026475579 6890876.057315123267472,1477917.271556612337008 6890861.695908572524786)",117,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478191.472600403940305 6891373.802427344955504,1478196.94038587808609 6891352.28198526147753,1478203.341240539913997 6891334.992099165916443,1478208.361152797238901 6891321.442249881103635,1478221.190854205284268 6891283.076680599711835,1478240.664008267689496 6891229.552189072594047,1478281.392478548688814 6891130.99570990819484,1478329.772116212407127 6891020.117283202707767)",118,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478420.186521029798314 6891416.536923290230334,1478405.378712934441864 6891441.123156609944999,1478385.07512729219161 6891463.931400388479233)",119,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478385.07512729219161 6891463.931400388479233,1478355.739431857131422 6891480.838359414599836,1478325.330706852255389 6891498.09790275990963,1478305.652277571614832 6891510.099898357875645,1478287.214830313343555 6891523.757363410666585,1478269.365216647740453 6891538.748412380926311,1478261.592750268988311 6891547.424226494506001,1478253.922921500634402 6891557.556240336969495,1478246.822264939546585 6891571.428382882848382,1478241.718376454431564 6891583.645085142925382,1478236.801101807504892 6891598.774201380088925,1478234.319137751823291 6891611.496783165261149,1478233.152801261516288 6891624.955150639638305,1478233.227446796139702 6891641.785805906169116,1478234.375121903605759 6891657.788756710477173,1478237.248975021298975 6891675.033351420424879)",121,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478922.243061791639775 6892224.595805050805211,1478942.052120761480182 6892225.622887848876417,1479174.98351413779892 6892237.625969672575593,1479215.245449822163209 6892238.729702232405543)",122,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478436.51523190876469 6891092.385810512118042,1478442.458882669685408 6891118.810350452549756,1478447.432141468161717 6891137.770471206866205,1478455.363229612121359 6891162.769696334376931,1478465.543014509370551 6891191.432300264947116,1478473.483433340443298 6891211.542166809551418,1478480.826687894295901 6891235.974496131762862,1478485.594671468948945 6891257.954459356144071,1478487.899352376582101 6891275.734668834134936,1478489.158995784586295 6891289.759603191167116,1478489.158995784586295 6891306.911441416479647)",123,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478739.464137542527169 6892228.489522617310286,1478695.637877542292699 6892227.661724239587784)",124,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479563.980060763191432 6892273.619992980733514,1479565.510294239735231 6892254.902467562817037)",126,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478942.192081137793139 6890130.999331175349653,1478922.401683553820476 6890133.711963083595037,1478910.029186052503064 6890135.275175113230944,1478897.096847034059465 6890139.121904042549431,1478884.817656453233212 6890149.711912300437689,1478838.360141325276345 6890218.141173175536096,1478809.602948790416121 6890263.490247231908143,1478795.187029757071286 6890294.724398334510624,1478786.481494184816256 6890326.46442789491266,1478781.480243310332298 6890359.43066562525928,1478776.385685515357181 6890382.649645018391311,1478763.472007882548496 6890417.455250608734787,1478747.693807828007266 6890450.713059439323843)",127,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478680.783415985293686 6890415.018393527716398,1478708.486240330385044 6890367.231622180901468,1478737.150125944754109 6890321.376206131651998,1478779.343514857813716 6890266.785306516103446,1478790.773612475488335 6890251.980539125390351,1478894.400277064414695 6890106.524382934905589,1478899.942708073183894 6890099.612560700625181,1478913.39756584004499 6890080.455656515434384)",128,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478809.602948790416121 6890263.490247231908143,1478790.773612475488335 6890251.980539125390351)",129,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478747.693807828007266 6890450.713059439323843,1478714.336584170814604 6890522.455372669734061,1478696.636261577485129 6890557.292236343957484,1478687.492183484369889 6890575.28546657320112,1478674.457206855295226 6890599.087476109154522,1478663.092424082104117 6890614.521270107477903,1478635.884126409655437 6890651.596215098164976,1478600.660764371277764 6890704.365850842557847,1478580.217218346660957 6890739.310790088959038,1478575.94376144465059 6890746.238489062525332,1478525.688654698198661 6890826.290629548951983,1478502.744483237853274 6890866.248027193360031,1478484.400342902867123 6890899.676290327683091,1478466.102856026496738 6890932.568242912180722,1478451.155087549006566 6890967.130994181148708)",130,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478212.02811472909525 6891713.140204788185656,1478199.170421248069033 6891718.367265134118497,1478187.143159347353503 6891720.421301508322358,1478175.936998336343095 6891718.750480834394693,1478161.875645596301183 6891715.209568447433412,1478141.842650016769767 6891706.65620210301131,1478116.659112496068701 6891686.514439879916608,1478086.567631015786901 6891649.909905299544334)",131,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479186.796170124784112 6890329.437667407095432,1479194.130093982676044 6890335.261541805230081,1479279.664546919055283 6890398.466176299378276,1479297.47683781851083 6890409.209787493571639)",132,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478086.567631015786901 6891649.909905299544334,1478075.426784849492833 6891635.39383159019053,1478052.874502453953028 6891606.26979230903089,1478037.180278623942286 6891587.247253092937171,1478002.040892810327932 6891541.829398297704756,1477825.784122222103179 6891305.424640764482319,1477691.104914883850142 6891132.620425897650421,1477677.911316492594779 6891115.560924383811653,1477601.352989191422239 6891019.243627357296646,1477547.608203666983172 6890950.087170991115272,1477456.633957332465798 6890828.666303563863039,1477454.497228882741183 6890826.259975696913898,1477452.211209358181804 6890823.685052404180169,1477440.221270225942135 6890807.515166061930358)",133,secondary,0,0,0,mainroads,5,0 "LINESTRING (1479627.876639111666009 6890557.491479728370905,1479634.464107617270201 6890532.50946301408112)",134,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478016.484803919447586 6892382.200895741581917,1477995.042873862665147 6892323.962841073982418)",136,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478472.802292829845101 6892429.708376270718873,1478431.579295878997073 6892449.652710394002497)",137,secondary,0,0,0,mainroads,5,0 "LINESTRING (1476901.859007160179317 6891178.373176074586809,1476933.797965641599149 6891127.102523874491453,1476969.217272213893011 6891077.533540516160429,1477002.779771094908938 6891043.859300371259451,1477030.258658833103254 6891020.699720491655171,1477070.79118458321318 6890988.573769110254943,1477117.099408636335284 6890959.789270952343941,1477166.010895744198933 6890934.453480053693056)",139,secondary,0,0,0,mainroads,5,0 "LINESTRING (1477342.883491998305544 6890867.014377377927303,1477338.096847037784755 6890853.449989835731685)",141,secondary,0,0,0,mainroads,5,0 "LINESTRING (1477452.211209358181804 6890823.685052404180169,1477342.883491998305544 6890867.014377377927303,1477317.485348558053374 6890876.701050061732531,1477166.010895744198933 6890934.453480053693056)",142,secondary,0,0,1,mainroads,5,0 "LINESTRING (1477801.412354895845056 6891105.552087247371674,1477825.746799453394488 6891083.940398719161749,1477842.486060780240223 6891060.520138014107943,1477854.112102926243097 6891041.897400882095098,1477860.41031997743994 6891025.880348713137209,1477868.43471504189074 6891004.698037818074226,1477870.207546508172527 6890978.105273565277457)",144,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478212.02811472909525 6891713.140204788185656,1478206.467022337485105 6891687.633425346575677)",145,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478325.657281069783494 6892141.203251630999148,1478321.449139009229839 6892126.425690860487521,1478318.136743376497179 6892116.154995526187122,1478308.647429679986089 6892080.483592945151031,1478266.19278139132075 6891904.336327421478927,1478249.052300312556326 6891837.149678730405867,1478217.355939821107313 6891730.72214855439961,1478215.956336030969396 6891726.108225850388408,1478212.02811472909525 6891713.140204788185656)",146,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478185.743555557215586 6892242.623426643200219,1478218.251686245668679 6892235.403175389394164,1478245.870534363202751 6892229.562594718299806,1478299.018155604368076 6892218.111389826983213,1478347.248502201633528 6892208.147168586961925)",147,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479585.384668057085946 6890546.502448085695505,1479467.789957643020898 6890509.550598309375346)",148,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479591.626900956500322 6890520.325010627508163,1479634.464107617270201 6890532.50946301408112)",149,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478973.058010046370327 6890074.815872622653842,1478972.078287394251674 6890093.298440041951835,1478970.389432155527174 6890104.179573393426836,1478967.524909733561799 6890114.463024233467877,1478959.080633534118533 6890122.340371028520167,1478942.192081137793139 6890130.999331175349653)",150,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478965.164244676940143 6890062.325604433193803,1478973.058010046370327 6890074.815872622653842)",151,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478913.39756584004499 6890080.455656515434384,1478927.160336438566446 6890063.367736498825252,1478940.176651681773365 6890058.325657619163394,1478952.801077865762636 6890058.877374304458499,1478965.164244676940143 6890062.325604433193803)",152,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478242.875382254831493 6891699.988261526450515,1478246.253092732280493 6891712.113187463954091,1478248.763048860942945 6891721.111089956946671,1478265.091759745730087 6891789.477083542384207,1478290.042029966600239 6891901.331847446970642,1478313.816633009817451 6892003.132225465960801,1478335.35186998709105 6892086.538675913587213,1478348.993341592140496 6892131.4230787018314,1478366.684333492536098 6892186.885094705037773,1478371.750899214530364 6892203.548301403410733)",153,secondary,0,0,1,mainroads,5,0 "LINESTRING (1477711.763066816842183 6892498.678270866163075,1477867.380346852121875 6892398.006031540222466,1477903.396817710250616 6892373.278902645222843,1477936.726049288874492 6892354.607134696096182,1477974.254092237679288 6892334.525068153627217,1477995.042873862665147 6892323.962841073982418,1478115.819350223056972 6892267.411472347564995,1478185.743555557215586 6892242.623426643200219)",154,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478512.00052963453345 6892854.268168974667788,1478514.146588779985905 6892802.557567667216063,1478515.00501243583858 6892781.048631047829986,1478514.333202617941424 6892738.414194788783789,1478511.673955417005345 6892685.2786047719419,1478511.56198711367324 6892666.652103416621685,1478509.882462567882612 6892647.565733219496906,1478505.338415597099811 6892630.104427010752261,1478498.247089728945866 6892607.768114305101335,1478458.563656944548711 6892511.739540040493011,1478431.579295878997073 6892449.652710394002497)",155,secondary,0,0,1,mainroads,5,0 "LINESTRING (1477587.123683996265754 6892602.264529967680573,1477695.331718327244744 6892512.33741554338485,1477711.763066816842183 6892498.678270866163075)",156,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478115.819350223056972 6892267.411472347564995,1478139.976511632790789 6892311.59171611443162)",157,secondary,0,0,0,mainroads,5,0 "LINESTRING (1478489.158995784586295 6891306.911441416479647,1478483.047392571577802 6891339.299239296466112,1478476.786498283268884 6891360.712351007387042,1478468.631473538232967 6891378.140244230628014,1478458.498342099832371 6891397.361552857793868,1478446.163167367456481 6891415.663224364630878,1478431.457996882498264 6891431.757693529129028,1478410.566577647114173 6891449.216396995820105,1478385.07512729219161 6891463.931400388479233)",158,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478294.147534419083968 6892193.936677500605583,1478305.512317192507908 6892186.823776624165475,1478311.166716501815245 6892179.726211540400982,1478316.130644607590511 6892167.67722771782428,1478325.657281069783494 6892141.203251630999148)",159,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479634.464107617270201 6890532.50946301408112,1479915.066006073495373 6890602.474631934426725,1480044.492033854592592 6890635.825165513902903,1480127.133972293231636 6890656.025601936504245)",160,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479266.862837587017566 6890414.650566106662154,1479180.236693697748706 6890350.648851290345192,1479173.966468716738746 6890346.066372577100992,1479161.817907822318375 6890337.253920855000615,1479078.233569500269368 6890275.796917401254177)",161,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479467.789957643020898 6890509.550598309375346,1479446.292043434455991 6890501.872114131227136,1479396.176897070370615 6890481.549454870633781)",162,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479453.616636599646881 6890482.744903990067542,1479477.671160398516804 6890489.641729325987399,1479591.626900956500322 6890520.325010627508163)",163,secondary,0,0,1,mainroads,5,0 "LINESTRING (1479078.233569500269368 6890275.796917401254177,1479020.719184436369687 6890226.708281797356904,1478981.269018949009478 6890181.160181148909032,1478961.497282745083794 6890155.520330861210823,1478951.065569168189541 6890141.650631228461862,1478942.192081137793139 6890130.999331175349653)",164,secondary,0,0,1,mainroads,5,0 "LINESTRING (1478662.672542944317684 6890646.814319248311222,1478692.838669959222898 6890659.106249583885074,1478720.354880469152704 6890669.221817328594625,1478746.378180262632668 6890677.222320823930204,1478774.342263983329758 6890683.613533364608884,1478827.965750514063984 6890691.230884444899857,1478891.339810111327097 6890693.790438639931381,1478955.012451852904633 6890686.755498230457306,1478996.935250700218603 6890678.03463292773813,1479037.234509153524414 6890665.926593106240034,1479067.913824223913252 6890655.213292057625949,1479097.352157269604504 6890641.112831750884652,1479130.522767085814849 6890623.793821963481605,1479163.77735312958248 6890603.80803756415844,1479240.186389355920255 6890541.674635590054095,1479271.705466702114791 6890510.700072621926665,1479303.32718165894039 6890476.185262273997068,1479403.389521929202601 6890361.407724624499679,1479517.373254568781704 6890228.70063394960016,1479567.199149484280497 6890173.895804021507502)",683,rail,0,0,0,railways,7,0 "LINESTRING (1476778.273992526577786 6891183.002112032845616,1476810.838107366813347 6891118.825677935034037,1476844.288637944497168 6891066.17594079952687,1476886.575333778047934 6891009.372855611145496,1476930.149665095610544 6890957.382903834804893,1476992.422703049844131 6890898.036294349469244,1477053.594719349872321 6890849.986093406565487,1477124.750576021615416 6890812.741637612693012,1477186.743693214608356 6890783.666558920405805,1477242.522569580934942 6890762.929363554343581,1477299.747703199042007 6890745.947280360385776,1477363.233731099637225 6890724.581786209717393,1477492.921018256340176 6890688.380124446004629,1477610.926279115257785 6890655.443191071972251,1477670.204164955532178 6890644.070861050859094,1477770.350481458939612 6890631.3498101439327,1477885.024685293668881 6890629.909114081412554,1477979.656562864314765 6890634.936224867589772,1478114.718328571645543 6890651.703501258045435,1478209.443513062782586 6890670.325334578752518,1478311.623920405516401 6890696.625873879529536,1478387.155871592927724 6890721.531766928732395,1478441.24589272052981 6890743.985453568398952)",684,rail,0,0,0,railways,7,0 "LINESTRING (1479267.721261245664209 6890576.89474381506443,1479349.710051246453077 6890499.956325806677341)",685,light_rail,0,0,0,railways,7,0 "LINESTRING (1480035.058704312890768 6891629.36974533367902,1479728.956024808576331 6891543.530838788487017,1479512.717239294666797 6891494.143226150423288,1479401.821965686744079 6891469.265595769509673,1479333.754568046657369 6891453.922129524871707,1479271.490860788151622 6891437.490397951565683,1479207.566290363902226 6891415.111414563842118)",686,light_rail,0,0,0,railways,7,0 "LINESTRING (1476557.509821424959227 6892224.91772651206702,1476579.56757715344429 6892197.033244075253606,1476602.661039686063305 6892155.474967340938747,1476614.604325356660411 6892127.820666904561222,1476626.193044736748561 6892100.902270716615021,1476640.860892452765256 6892073.416780357249081,1476659.326331784250215 6892043.785288944840431,1476691.171983344946057 6891992.432471443898976,1476760.032489801989868 6891879.840651011094451,1476778.273992526577786 6891853.275649514980614,1476800.042496806709096 6891828.059673327021301,1476826.420362893491983 6891804.192709765397012,1476842.833050002809614 6891792.113631258718669,1476896.139293009182438 6891750.480804309248924,1476928.358172246254981 6891725.740338440053165,1476937.716856256127357 6891718.275293369777501,1476958.085756740299985 6891704.908741282299161,1476967.575070433784276 6891697.474372724071145,1477252.002552584279329 6891480.071950710378587,1477319.762037389911711 6891425.979008984751999,1477450.111803674371913 6891326.285858543589711)",687,rail,0,0,0,railways,7,0 "LINESTRING (1479344.55950930272229 6890482.33109465893358,1479381.891607720637694 6890430.850314672105014,1479559.622627633390948 6890217.144998343661427,1479616.707800869364291 6890150.324937810190022,1479735.832744759973139 6890003.951099094934762,1479757.517272809520364 6889977.315668813884258,1479906.463108111871406 6889794.287592766806483,1479968.549532222328708 6889699.85574609786272,1480013.924687087535858 6889632.978685894981027,1480063.200071178842336 6889572.814326574094594,1480595.105495428200811 6888922.40596410445869,1480676.674404293997213 6888823.617269230075181,1481192.549699805909768 6888190.108256537467241,1481629.319389119045809 6887662.561815643683076,1481736.099827584112063 6887530.067787102423608,1481774.91550601972267 6887482.558607625775039,1481844.793057894799858 6887399.016058546490967,1481868.278409486636519 6887371.761121637187898)",688,light_rail,0,0,0,railways,7,0 "LINESTRING (1479315.839639539364725 6890486.729735681787133,1479082.600333325797692 6890751.342306513339281,1478999.1466246873606 6890835.195578991435468,1478910.113162280060351 6890921.118885340169072,1478875.048422001069412 6890958.17991707008332,1478845.218199896393344 6890996.482626908458769,1478808.305982613703236 6891048.641432393342257,1478761.083350750152022 6891124.619469199329615)",689,rail,0,0,0,railways,7,0 "LINESTRING (1476557.509821424959227 6892224.91772651206702,1476576.040575603721663 6892207.426679218187928,1476622.861987715121359 6892172.689970703795552,1476647.1591095039621 6892154.43256404530257,1476668.713007867103443 6892134.718903675675392,1476686.254708698019385 6892114.39211630821228,1476697.955396381672472 6892099.200712250545621,1476709.628091989317909 6892081.188741613179445,1476879.773259358713403 6891804.805861446075141,1476894.207839777693152 6891782.165266772732139,1476907.783996538026258 6891763.433556890115142,1476948.400498515926301 6891721.019118160009384,1476956.704814333235845 6891716.067971306852996,1476966.007514191325754 6891708.173734177835286,1477005.746931127505377 6891679.095416892319918,1477256.22935602767393 6891486.632411575876176,1477326.153561364393681 6891432.983940120786428,1477454.375929886475205 6891332.524308172985911)",690,rail,0,0,0,railways,7,0 "LINESTRING (1478578.537693798076361 6892046.973773205652833,1478584.938548462698236 6892094.35663787741214,1478595.808804563246667 6892162.1739446753636,1478606.221856760093942 6892214.478280032984912,1478616.578924805158749 6892272.623563419096172,1478646.530445903539658 6892364.080981981940567,1478711.369424138218164 6892514.636937133036554,1478787.84377520903945 6892676.55557119846344,1478826.81807540403679 6892755.92172808945179,1478854.548891827696934 6892815.098086142912507,1478923.894594261655584 6892997.93432189617306,1478943.321094862185419 6893067.721645668148994,1478958.240871261106804 6893144.040726294741035,1478968.271365088876337 6893217.554868974722922,1478973.869780246401206 6893291.606290957890451,1478974.466944529442117 6893364.12521836720407)",691,rail,0,0,0,railways,7,0 "LINESTRING (1479276.548095814418048 6891179.446108014322817,1479307.358040571212769 6891231.606100558303297,1479339.17570005916059 6891279.306043236516416,1479366.542619493789971 6891318.974463047459722,1479402.260508207604289 6891358.597094771452248,1479431.306952188257128 6891389.360332677140832,1479472.697901599807665 6891421.380589242093265,1479515.283179575111717 6891449.063115849159658,1479565.827537767123431 6891472.499836646020412,1479622.035625964170322 6891492.334498732350767,1479731.885862075258046 6891519.496109201572835,1480048.737498683854938 6891593.869114982895553)",692,light_rail,0,0,0,railways,7,0 "LINESTRING (1478602.097690927330405 6891164.808263186365366,1478585.890279041836038 6891284.364215715788305,1478582.717843782622367 6891342.10424639005214,1478565.502717171795666 6891616.09531166497618,1478560.296191073488444 6891715.332197420299053,1478556.013403475517407 6891851.006974860094488,1478567.415509017417207 6891960.501914793625474,1478578.537693798076361 6892046.973773205652833)",693,rail,0,0,0,railways,7,0 "LINESTRING (1475827.439161936519668 6888429.393967813812196,1475897.979192936560139 6888504.029522120021284,1476023.309046963695437 6888628.280639900825918,1476225.150574827333912 6888800.601991452276707,1476400.138371311826631 6888947.490241937339306,1476464.28687833994627 6889000.647103982046247,1476631.903428197605535 6889142.129735194146633,1476745.103382710367441 6889237.949506449513137,1476791.197000852320343 6889272.33640996273607,1476838.662230708403513 6889305.65077849291265,1477053.790663880994543 6889449.851177944801748,1477102.916756902821362 6889486.154534038156271,1477127.755058822920546 6889504.834965611808002,1477167.513137144735083 6889537.935754880309105,1477506.179931489285082 6889826.255522099323571,1477606.680814286228269 6889910.988007251173258,1477636.93091752869077 6889934.542846583761275,1477663.88728651846759 6889953.79135469160974,1477695.201088640838861 6889973.530318510718644,1477754.889524928759784 6890008.701961868442595,1477817.227877719327807 6890043.245416264049709,1477908.538028964074329 6890093.375067686662078,1477952.914799788501114 6890118.462998975068331,1478006.174389333231375 6890147.750230991281569,1478042.330820570699871 6890171.137181520462036,1478075.501430386910215 6890194.033776975236833,1478102.308508307440206 6890215.076020252890885,1478166.429023256991059 6890265.697170505300164,1478183.560173645848408 6890279.046004079282284)",695,rail,0,0,0,railways,7,0 "LINESTRING (1478598.449390378547832 6890845.709869343787432,1478556.414623227668926 6890825.447648616507649)",696,rail,0,0,0,railways,7,0 "LINESTRING (1478927.88813040801324 6890978.978924939408898,1479441.859964764444157 6891217.979787161573768,1479558.960148505866528 6891274.753690734505653,1479694.432464661076665 6891336.67816798388958,1479814.882366804173216 6891392.165357237681746,1480077.364061532309279 6891515.142887800931931)",697,rail,0,0,0,railways,7,0 "LINESTRING (1478569.785504766972736 6890803.361579650081694,1478595.75282041169703 6890816.082902735099196)",700,rail,0,0,0,railways,7,0 "LINESTRING (1478850.574017061386257 6890963.099942809902132,1478627.402527447091416 6890858.032757756300271)",703,rail,0,0,0,railways,7,0 "LINESTRING (1478183.560173645848408 6890279.046004079282284,1478405.86390891415067 6890456.521695459261537,1478453.245162542676553 6890498.408369177952409,1478496.56756518012844 6890547.360726167447865,1478533.153208245523274 6890597.539500389248133)",704,rail,0,0,0,railways,7,0 "LINESTRING (1478343.516225425293669 6890759.5421401290223,1478223.607503416249529 6890749.472439081408083,1478071.965098144253716 6890723.922736717388034,1477935.876956322928891 6890680.27232330199331,1477861.231420873198658 6890651.795460822060704)",705,rail,0,0,0,railways,7,0 "LINESTRING (1479207.566290363902226 6891415.111414563842118,1479145.39589002286084 6891388.195404731668532,1479060.327971686143428 6891345.599010691978037,1478962.775587541749701 6891295.568845461122692,1478908.82552679348737 6891268.132091694511473,1478785.175197315169498 6891204.261530964635313,1478658.75365233537741 6891138.674794974736869)",708,light_rail,0,0,0,railways,7,0 "LINESTRING (1478183.560173645848408 6890279.046004079282284,1478275.262213947018608 6890340.70227038115263,1478305.01779051986523 6890362.756416314281523,1478420.541087323101237 6890454.559939289465547,1478460.187197338789701 6890491.067073968239129,1478510.171714016469195 6890538.195547109469771,1478530.773881800472736 6890556.893749584443867,1478551.954552487237379 6890575.162854988127947)",709,rail,0,0,0,railways,7,0 "LINESTRING (1478575.831793141085654 6891339.988995048217475,1478579.592061987845227 6891283.046025006100535,1478593.50412365840748 6891161.252267209812999)",710,rail,0,0,0,railways,7,0 "LINESTRING (1477781.108769256155938 6890678.065286220051348,1477905.421577859437093 6890735.141912166029215,1478103.250908190850168 6890828.69695742521435,1478294.856667005689815 6890931.571979558095336,1478411.714252757374197 6890990.995472802780569,1478613.145230175927281 6891098.501459069550037,1478665.191829765914008 6891124.772744154557586)",713,light_rail,0,0,0,railways,7,0 "LINESTRING (1478604.868906431598589 6891027.229151873849332,1478611.251099710585549 6890982.580821967683733,1478613.247867786558345 6890914.635521415621042,1478611.652319462504238 6890865.451023075729609,1478607.640121933305636 6890811.484831825830042,1478591.227434826781973 6890756.093610955402255)",714,rail,0,0,0,railways,7,0 "LINESTRING (1478625.956270195310935 6890829.907785100862384,1478861.276320709846914 6890948.416510410606861)",715,rail,0,0,0,railways,7,0 "LINESTRING (1479616.707800869364291 6890150.324937810190022,1479664.443620794219896 6890101.926717818714678,1479699.98422635695897 6890058.524888642132282,1479734.657077576732263 6890015.874237441457808,1479788.523162097437307 6889964.457745274528861)",718,light_rail,0,0,0,railways,7,0 "LINESTRING (1478782.273352124495432 6891113.062545800581574,1478812.280857374193147 6891067.999899725429714,1478834.945108078885823 6891038.540714574977756,1478859.28888332657516 6891009.74071024172008,1478876.867906926199794 6890991.439962794072926,1478897.348775716731325 6890970.962793939746916,1478936.528351138578728 6890935.541706578806043,1478983.667006774339825 6890894.219856407493353,1479029.200783401727676 6890851.304213112220168,1479066.794141192454845 6890814.289654764346778,1479101.980180467711762 6890775.926505616866052,1479143.14719326980412 6890729.808203851804137,1479181.440352956997231 6890681.77433499135077,1479267.721261245664209 6890576.89474381506443,1479344.55950930272229 6890482.33109465893358)",719,light_rail,0,0,0,railways,7,0 "LINESTRING (1479735.832744759973139 6890003.951099094934762,1479699.98422635695897 6890058.524888642132282,1479669.062313296599314 6890105.972662986256182,1479632.952535520773381 6890164.209978073835373)",720,light_rail,0,0,0,railways,7,0 "LINESTRING (1478572.827310339780524 6890796.249909016303718,1478594.185264169238508 6890806.013130874373019)",723,rail,0,0,0,railways,7,0 "LINESTRING (1478714.065994105068967 6891217.213403515517712,1478673.654767348431051 6891300.887601297348738,1478632.870312915416434 6891389.360332677140832,1478605.372763794381171 6891470.307910224422812,1478585.83429489005357 6891564.484644450247288,1478578.593677949858829 6891611.80335165001452,1478569.23499394278042 6891715.255554312840104,1478573.153884557308629 6891842.852014512754977,1478573.49912015767768 6891933.752698284573853,1478578.537693798076361 6892046.973773205652833)",724,rail,0,0,0,railways,7,0 "LINESTRING (1478438.502669292036444 6890750.315412051975727,1478385.625638116383925 6890728.62804473284632,1478310.177663156529889 6890703.384942455217242,1478208.071901348652318 6890677.774079982191324,1478114.541045426623896 6890658.554491711780429,1477979.628570788539946 6890640.561075114645064,1477885.481889200396836 6890636.698779699392617,1477771.03162196977064 6890638.5839474638924,1477672.135618184227496 6890651.933400171808898,1477611.794033464044333 6890663.01453560963273,1477495.402982309227809 6890694.725365828722715,1477367.273920707637444 6890730.942382912151515,1477302.826831534970552 6890753.058906504884362,1477244.845911874435842 6890771.420418604277074,1477189.309633497847244 6890792.32623135112226,1477128.520175561308861 6890819.209592456929386,1477058.07345147873275 6890859.25891683716327,1476996.164310513529927 6890906.328240063972771,1476934.367137851659209 6890964.709297677502036,1476892.463000384392217 6891013.940385126508772,1476850.120320399058983 6891069.716567330062389,1476816.053964158287272 6891122.121087796986103,1476784.497564045945182 6891185.623133247718215)",727,rail,0,0,0,railways,7,0 "LINESTRING (1477785.139628168661147 6890619.962187672965229,1477670.577392631676048 6890570.948082859627903,1477610.665019739652053 6890546.318531366065145,1477551.331149747828022 6890517.719532645307481)",728,rail,0,0,0,railways,7,0 "LINESTRING (1478598.971909126965329 6890754.806160444393754,1478614.376881508156657 6890813.262752261944115,1478617.549316764576361 6890865.542985087260604,1478618.976912630489096 6890914.083746002987027,1478617.614631609292701 6890981.584552413783967,1478611.950901604257524 6891032.133892551995814)",730,rail,0,0,0,railways,7,0 "LINESTRING (1478624.789933702209964 6890819.929957416839898,1478866.398870577802882 6890942.408266056329012)",731,rail,0,0,0,railways,7,0 "LINESTRING (1478565.502717171795666 6891616.09531166497618,1478561.677133480552584 6891537.138942591845989)",735,rail,0,0,0,railways,7,0 "LINESTRING (1478595.276955124922097 6890826.290629548951983,1478565.344095406820998 6890811.423524235375226)",736,rail,0,0,0,railways,7,0 "LINESTRING (1476576.040575603721663 6892207.426679218187928,1476618.149988292017952 6892167.615909783169627,1476640.273058862425387 6892146.093342563137412,1476655.827322310302407 6892126.916231859475374,1476670.784421477932483 6892106.114253824576735,1476680.329719322966412 6892090.386338596232235,1476691.657179324654862 6892070.780140379443765,1476829.630120918620378 6891846.576929586008191,1476847.059853446204215 6891819.168952871114016,1476865.683914539869875 6891793.661837009713054,1476884.354629097972065 6891773.197953407652676,1476901.187197342514992 6891757.54733301512897,1476948.400498515926301 6891721.019118160009384)",737,rail,0,0,0,railways,7,0 "LINESTRING (1476937.716856256127357 6891718.275293369777501,1476957.72185975429602 6891707.821176195517182,1476966.875268540112302 6891701.980978826992214,1477005.746931127505377 6891679.095416892319918)",739,rail,0,0,0,railways,7,0 "LINESTRING (1477252.002552584279329 6891480.071950710378587,1477286.414144428446889 6891458.857786803506315,1477326.153561364393681 6891432.983940120786428)",741,rail,0,0,0,railways,7,0 "LINESTRING (1478855.416646176483482 6890957.168323368765414,1478625.368436602409929 6890839.900952127762139)",742,rail,0,0,0,railways,7,0 "LINESTRING (1477256.22935602767393 6891486.632411575876176,1477286.414144428446889 6891458.857786803506315,1477319.762037389911711 6891425.979008984751999)",743,rail,0,0,0,railways,7,0 "LINESTRING (1478430.310321775265038 6890777.137325343675911,1478363.717173459939659 6890762.914036750793457)",746,rail,0,0,0,railways,7,0 "LINESTRING (1478932.544145682128146 6890972.940003331750631,1479191.92805068846792 6891093.642660211771727,1479300.29470678162761 6891144.070084678940475,1479955.859791199443862 6891450.764536706730723,1480073.361194689990953 6891504.167875309474766,1480081.059015537146479 6891508.153213307261467)",747,rail,0,0,0,railways,7,0 "LINESTRING (1478614.35822012508288 6895547.603960990905762,1478615.365934853209183 6895453.089168295264244,1478618.7716374094598 6895322.46029799990356,1478627.934376885648817 6895235.953195017762482,1478677.928224253468215 6894754.545370802283287,1478689.899502002634108 6894669.838488157838583,1478708.728838320123032 6894564.201485143043101,1478728.612542824819684 6894486.274192513898015,1478750.604983708821237 6894401.156126040033996,1478775.648560852976516 6894316.60630351677537,1478799.17123521049507 6894234.572051984257996,1478819.176238714251667 6894162.305936777964234,1478835.234359527472407 6894088.062495077960193,1478888.839184675598517 6893836.372824227437377,1478909.506667304085568 6893747.121864621527493,1478924.529081313405186 6893665.614724689163268,1478939.710117084905505 6893584.200404370203614,1478951.018915706546977 6893509.088375779800117,1478957.755675281397998 6893436.798119088634849,1478962.271730176173151 6893365.505077449604869,1478961.907833192963153 6893291.146342131309211,1478955.684261673595756 6893219.30265864636749,1478946.036326214903966 6893145.742505932226777,1478932.404185302788392 6893069.54605878982693,1478912.567134257173166 6893000.47927956096828,1478842.764227916719392 6892818.547498689033091,1478815.686559933237731 6892760.919507294893265,1478777.505368549609557 6892681.10871759429574,1478695.451263701310381 6892523.329134689643979,1478630.239057793281972 6892371.377998174168169,1478598.673326985212043 6892274.539774225093424,1478586.73937200778164 6892214.110370276495814,1478576.382303962484002 6892165.36247589904815,1478565.717323085758835 6892097.821070521138608,1478557.963518089847639 6892049.073881317861378,1478550.666917 6892009.018629167228937,1478547.363852057838812 6891970.695765716023743,1478545.954917574767023 6891928.402865662239492,1478544.294054409023374 6891850.393819660879672,1478547.634442123584449 6891714.841681536287069,1478555.74281340977177 6891610.715033587068319,1478561.677133480552584 6891537.138942591845989,1478566.193188372533768 6891473.710761290974915,1478575.831793141085654 6891339.988995048217475)",749,rail,0,0,0,railways,7,0 "LINESTRING (1477556.565667921910062 6890511.175188716500998,1477614.798516265349463 6890538.701317588798702,1477682.334064466878772 6890563.668027113191783,1477739.55919808219187 6890579.638179088011384,1477786.753837872762233 6890589.339832002297044,1477886.918815756216645 6890608.05347993876785,1477979.441956950351596 6890621.326249268837273,1478115.203524554148316 6890637.250536070205271,1478210.255283262813464 6890657.389669657684863,1478313.182145957835019 6890686.479618338868022,1478388.508821921423078 6890711.523420327343047,1478445.080807101679966 6890735.663021787069738)",750,rail,0,0,0,railways,7,0 "LINESTRING (1478347.229840818792582 6891012.392329533584416,1478476.030712238047272 6891063.922815636731684)",751,light_rail,0,0,0,railways,7,0 "LINESTRING (1478094.470727083971724 6890836.620984894223511,1478107.888262082124129 6890843.119612865149975,1478290.601871486520395 6890940.323774167336524,1478460.821684390539303 6891029.313666300848126,1478546.72936500585638 6891074.130857136100531,1478570.382669050013646 6891085.365848724730313,1478660.983687705593184 6891132.375185729004443,1478788.133026657626033 6891198.023180870339274,1478968.12207401660271 6891290.617960623465478,1479014.626242603408173 6891313.885613084770739,1479051.445152965839952 6891332.922833372838795,1479137.968659247271717 6891374.814073477871716,1479237.54580354061909 6891417.272669827565551,1479286.979809394106269 6891432.999268201179802)",753,light_rail,0,0,0,railways,7,0 "LINESTRING (1477521.612895943690091 6890502.255271850153804,1477475.761875794501975 6890473.181315985508263,1477442.637919437140226 6890448.153582629747689,1477408.198335519991815 6890419.110474707558751,1477351.449067191453651 6890359.875120709650218,1477284.827926800120622 6890281.743360051885247,1477035.661129459738731 6889969.653018221259117,1477000.447098108474165 6889923.002958968281746,1476967.005898226518184 6889873.855176855809987,1476902.036290308227763 6889765.446070476435125,1476666.398996269330382 6889354.24341909494251,1476618.523215968394652 6889274.71162486448884,1476574.892900496488437 6889215.837150192819536,1476535.629348847083747 6889162.648217984475195,1476495.936585372779518 6889113.780909334309399,1476444.403173832688481 6889058.600589515641332,1476398.720106138614938 6889012.645371961407363,1476350.088539789430797 6888967.02753147855401,1476127.411576841957867 6888777.08111983910203,1476049.882857584161684 6888709.813339100219309,1475992.648393273120746 6888654.528531948104501,1475915.940774908289313 6888571.127032433636487,1475859.518080794485286 6888503.707749617286026,1475810.438641237094998 6888443.337326082400978)",754,rail,0,0,0,railways,7,0 "LINESTRING (1478087.146133915986866 6890851.273559163324535,1478099.686583872418851 6890857.588275128975511,1478284.284993046661839 6890953.198585663922131,1478356.989744574995711 6890988.497132927179337,1478420.373134867986664 6891017.419679494574666)",755,light_rail,0,0,0,railways,7,0 "LINESTRING (1477405.483104167273268 6890465.763412615284324,1477442.693903588689864 6890498.193800956942141,1477484.448749980889261 6890527.267847270704806,1477538.921329480595887 6890561.752224069088697,1477579.621807685820386 6890584.404708518646657,1477683.612369260750711 6890631.518402252346277)",757,light_rail,0,0,0,railways,7,0 "LINESTRING (1478638.020854862174019 6891161.880697418935597,1478549.817824034951627 6891106.839593932963908,1478476.030712238047272 6891063.922815636731684)",758,light_rail,0,0,0,railways,7,0 "LINESTRING (1477654.761869808426127 6890641.77187445666641,1477570.934933496639132 6890599.225414553657174,1477528.592253511305898 6890576.43495028745383,1477478.915649668080732 6890539.130456198938191,1477438.289816997246817 6890504.661502741277218,1477401.172324493527412 6890470.315307054668665)",759,light_rail,0,0,0,railways,7,0 "LINESTRING (1478908.82552679348737 6891268.132091694511473,1478968.12207401660271 6891290.617960623465478)",760,light_rail,0,0,0,railways,7,0 "LINESTRING (1477344.973566989181563 6890408.949243260547519,1477311.504375034244731 6890367.109013764187694,1476949.016324184834957 6889894.743330676108599,1476911.338990163756534 6889833.412309887818992,1476874.352127346210182 6889766.059066688641906,1476800.67698385566473 6889633.913489734753966,1476653.438665177905932 6889368.648105666041374,1476600.757578530581668 6889286.419145964086056,1476556.250178016955033 6889229.536690140143037)",761,light_rail,0,0,0,railways,7,0 "LINESTRING (1478951.550765147898346 6891271.872068259865046,1479014.626242603408173 6891313.885613084770739)",762,light_rail,0,0,0,railways,7,0 "LINESTRING (1478665.191829765914008 6891124.772744154557586,1478570.382669050013646 6891085.365848724730313)",764,light_rail,0,0,0,railways,7,0 "LINESTRING (1478613.145230175927281 6891098.501459069550037,1478512.373757313471287 6891032.731658027507365,1478391.186730505200103 6890953.244567170739174)",766,light_rail,0,0,0,railways,7,0 "LINESTRING (1475352.861508915899321 6893202.392042903229594,1475384.884443622082472 6893185.496794159524143,1475415.40513693029061 6893166.639162816107273,1475452.914518496021628 6893139.104034236632288,1475485.021429432556033 6893109.6065957788378,1475514.525077319936827 6893077.932231985032558,1475539.596646539866924 6893046.978557553142309,1475559.415036202641204 6893018.186688029207289,1475577.078036027029157 6892989.057638514786959,1475610.024709239369258 6892929.052129200659692,1475653.543056407710537 6892853.762252791784704,1475678.120098955230787 6892816.385866651311517,1475710.124372278340161 6892775.744226446375251,1475739.320107336854562 6892744.73039329610765,1475768.805093838367611 6892714.682502984069288,1475840.838035549037158 6892642.246086311526597,1475907.869726384989917 6892584.328083496540785,1475976.898185294354334 6892529.445871927775443,1476109.086097889812663 6892446.571376527659595,1476194.667204285040498 6892393.790303630754352,1476235.65693393885158 6892368.557302054949105,1476273.334267959930003 6892339.721872925758362,1476309.854596180841327 6892310.288686713203788,1476343.585047514177859 6892278.724780205637217,1476371.26921047619544 6892251.223352207802236,1476396.396763845114037 6892220.564123103395104,1476441.333376189693809 6892160.288419598713517,1476485.271604493027553 6892090.876877398230135,1476503.046572620980442 6892057.520307081751525,1476521.353390193078667 6892020.162952153012156,1476548.636333400150761 6891949.31168732047081,1476565.347602651221678 6891885.28242499101907,1476579.390294005395845 6891822.020113877020776,1476596.904002760536969 6891745.790226866491139,1476612.318305834662169 6891669.8369763167575,1476641.18746667006053 6891532.141924168914557,1476660.623297963757068 6891452.527270408347249,1476674.292761641787365 6891406.190494714304805,1476690.145607233978808 6891361.524732173420489,1476706.138413205510005 6891325.274218517355621,1476725.210347512969747 6891292.150741980411112,1476789.237555547850206 6891203.280561587773263,1476851.547916265204549 6891125.75370395090431,1476899.52633417956531 6891059.339930346235633,1476944.845504887402058 6891000.314440655522048,1476973.220139053184539 6890965.077150264754891,1476999.598005142761394 6890935.066565403714776,1477026.824964198283851 6890910.297954620793462,1477054.87302414374426 6890884.992973770014942,1477130.479620868572965 6890828.405745735391974,1477242.401270584436134 6890777.627784022130072,1477373.040288320509717 6890737.992688745260239,1477489.468662241240963 6890705.561333095654845)",767,light_rail,0,0,0,railways,7,0 "LINESTRING (1478411.714252757374197 6890990.995472802780569,1478512.373757313471287 6891032.731658027507365,1478671.266110216034576 6891093.428076104260981)",768,light_rail,0,0,0,railways,7,0 "LINESTRING (1477489.468662241240963 6890705.561333095654845,1477590.081513338722289 6890676.256742395460606,1477641.279019968351349 6890665.849960001185536,1477684.806697827065364 6890661.926345975138247,1477737.515776550164446 6890662.217551639303565,1477788.27474065637216 6890666.984130036085844,1477827.081088401842862 6890675.505737031809986,1477872.446912571322173 6890688.977864359505475,1477922.702019314747304 6890709.776175797916949,1478339.364067516522482 6890923.509914490394294,1478391.186730505200103 6890953.244567170739174,1478671.266110216034576 6891093.428076104260981,1478812.467471212381497 6891164.624332321807742,1478920.47023032233119 6891225.199124677106738,1478966.713139536324888 6891258.153720107860863,1479043.168829224305227 6891308.045701892115176,1479111.833391147432849 6891342.71736282389611,1479235.297106784768403 6891399.41550721321255)",769,light_rail,0,0,0,railways,7,0 "LINESTRING (1478460.821684390539303 6891029.313666300848126,1478493.917648672126234 6891050.955862689763308,1478535.485881229164079 6891075.832198646850884)",770,light_rail,0,0,0,railways,7,0 "LINESTRING (1478546.72936500585638 6891074.130857136100531,1478493.917648672126234 6891050.955862689763308,1478458.08779165497981 6891036.594143707305193)",772,light_rail,0,0,0,railways,7,0 "LINESTRING (1478560.296191073488444 6891715.332197420299053,1478571.828926299000159 6891609.948612500913441,1478579.424109532730654 6891563.518959445878863,1478599.410451650619507 6891468.039343643933535,1478627.72910166461952 6891387.229740903712809,1478666.022261348785833 6891297.469495555385947,1478708.467578947311267 6891213.902627007104456)",773,rail,0,0,0,railways,7,0 "LINESTRING (1478749.074750232277438 6891229.766776816919446,1478697.252087243599817 6891335.283329210244119,1478680.839400137076154 6891369.265349286608398,1478665.275805993471295 6891403.860634117387235,1478650.579966201679781 6891440.893235126510262,1478636.807864910224453 6891480.31720149051398,1478625.71367220277898 6891516.50710129737854,1478615.524556615622714 6891556.452601296827197,1478606.27784091187641 6891606.162493411451578,1478598.524035915965214 6891650.400417221710086,1478592.160504020052031 6891714.366494299843907,1478591.815268416889012 6891798.812305805273354,1478593.541446424322203 6891856.908596065826714,1478596.872503443155438 6891908.797062506899238,1478605.195480649126694 6892008.037561585195363,1478619.499431378906593 6892103.09436908364296,1478629.772523196646944 6892163.722221702337265,1478641.538525721756741 6892218.479299768805504,1478655.889129913412035 6892270.998617016710341,1478670.920874612871557 6892319.547864924184978,1478688.173323994968086 6892364.908794411458075,1478723.713929563527927 6892447.276557306759059,1478779.240877247182652 6892575.543838411569595,1478816.097110378323123 6892663.448042929172516,1478871.092208620626479 6892789.173881882801652,1478923.194792367983609 6892912.464073054492474,1478951.923992824042216 6892984.013724349439144,1478964.156529946019873 6893022.080790019594133,1478974.028402008581907 6893060.37800376676023,1478982.360709904693067 6893100.990420570597053,1478987.305976627394557 6893130.380508157424629)",774,light_rail,0,0,0,railways,7,0 "LINESTRING (1478162.239542582305148 6890271.275784828700125,1478102.308508307440206 6890215.076020252890885)",775,rail,0,0,0,railways,7,0 "LINESTRING (1477639.31024397094734 6890001.207860252819955,1477597.219492668518797 6889960.565124080516398,1477572.390521438326687 6889934.420244771055877,1477555.05409582844004 6889916.489749496802688,1477065.258084264583886 6889497.847038632258773,1477030.715862737037241 6889473.036882025189698,1476963.954761966597289 6889426.634892208501697,1476919.242086228914559 6889398.606871547177434)",776,rail,0,0,0,railways,7,0 "LINESTRING (1477532.455159971257672 6889929.485523279756308,1477564.646047132555395 6889952.427406344562769,1477596.025164099410176 6889970.817740640603006,1477639.31024397094734 6890001.207860252819955)",777,rail,0,0,0,railways,7,0 "LINESTRING (1478526.565739739919081 6890602.627896940335631,1478491.594306378625333 6890551.6980971544981,1478448.131943361833692 6890503.527355609461665,1478399.733644315274432 6890460.41455677524209,1478162.239542582305148 6890271.275784828700125,1478101.907288549700752 6890224.102898960933089,1478071.293288323795423 6890200.317325276322663,1478038.579882414080203 6890177.742551427334547,1478001.96624727291055 6890154.355581684969366,1477949.630396228516474 6890124.501278791576624,1477904.553823507856578 6890099.152794464491308,1477813.999458313919604 6890050.080562806688249,1477751.007957082940266 6890014.740159252658486,1477691.636764322407544 6889979.752393233589828,1477660.929457176011056 6889961.024882393889129,1477632.35887848213315 6889940.381760180927813,1477601.996806936105713 6889916.796253352425992,1477500.964074700837955 6889831.695906238630414,1477162.465232811402529 6889543.621135639958084,1477122.604516879189759 6889510.397727609612048,1477098.494008928304538 6889492.268960924819112,1477048.098941802745685 6889454.93884819932282,1476833.278421464608982 6889311.933632552623749,1476738.459930056007579 6889246.285711977630854,1476692.198359458940104 6889212.803027050569654,1476648.502729142317548 6889177.5735699608922,1476570.432829750468954 6889112.309837851673365,1476404.710410355357453 6888972.559274631552398)",778,rail,0,0,0,railways,7,0 "LINESTRING (1477852.236633849330246 6890212.394012399949133,1478308.479477224871516 6890605.202749434858561,1478362.784104266436771 6890650.676619523204863,1478396.178650686750188 6890676.946441259235144,1478453.133194239344448 6890714.128961123526096)",779,rail,0,0,0,railways,7,0 "LINESTRING (1482784.748301694169641 6886965.537159140221775,1482693.28885937994346 6886972.002020028419793,1482596.454938515089452 6886983.813426220789552,1482487.295173607533798 6887003.177429282106459,1482381.643748866859823 6887039.102067950181663,1482275.889686515787616 6887083.636586944572628,1482198.407620716840029 6887123.973706754855812,1482126.533300768584013 6887170.745409660041332,1482052.44760683295317 6887226.985180730931461,1481981.702300606062636 6887286.71834568399936,1481968.443387370323762 6887300.031594241969287,1481893.564584620529786 6887373.415718881413341,1481786.998752072220668 6887491.950112945400178,1481743.732333586551249 6887544.959467724896967,1481636.671974362805486 6887667.648355164565146,1481197.382998225279152 6888196.696677305735648,1480772.771200496470556 6888722.807162684388459,1480690.84772533737123 6888841.269510939717293,1480527.495301691815257 6889044.931987857446074,1480432.555511289509013 6889146.512319353409111,1480354.168368370272219 6889229.996406652964652,1480070.375373274553567 6889577.472987326793373,1480025.877303453860804 6889645.238416977226734,1479985.932611293857917 6889713.004417773336172,1479958.108487955294549 6889763.959554866887629,1479928.418226227164268 6889811.788715708069503,1479883.397637658054009 6889871.648361132480204,1479800.475778460968286 6889970.710463566705585,1479752.823934766696766 6890021.713210099376738,1479702.307568650459871 6890079.44417324475944,1479632.952535520773381 6890164.209978073835373,1479578.181373882573098 6890234.309874192811549,1479501.660369355697185 6890327.797787746414542,1479399.125395719893277 6890440.429178510792553,1479372.187688112957403 6890474.959161611273885,1479349.710051246453077 6890499.956325806677341,1479267.189411807339638 6890593.876469925045967,1479186.413611755473539 6890685.71328535862267,1479147.700570930493996 6890733.747177755460143,1479106.981431342195719 6890780.861746666021645,1479071.1049208662007 6890819.224919372238219,1479033.035697785904631 6890855.687729027122259,1478987.819164683111012 6890899.323767800815403,1478941.10039018210955 6890940.752934218384326,1478905.223879706114531 6890974.625996216200292,1478886.235921626212075 6890995.65495538059622,1478870.345753268105909 6891016.116859840229154,1478849.874215167714283 6891047.476553818210959,1478830.513029411667958 6891078.085327141918242,1478803.090125825256109 6891124.665451684966683)",780,light_rail,0,0,0,railways,7,0 "LINESTRING (1477856.34213829645887 6890206.462946793064475,1478312.584981674794108 6890600.190983732230961,1478372.161449659382924 6890649.036674340255558,1478398.940535501111299 6890670.218048175796866,1478437.774875319562852 6890694.98591932002455)",781,rail,0,0,0,railways,7,0 "LINESTRING (1482783.740586966043338 6886947.980951749719679,1482690.806895327055827 6886951.780197567306459,1482595.2606099487748 6886967.00783793721348,1482485.121122389100492 6886988.62378338817507,1482377.426276116399094 6887024.134725640527904,1482269.460839775390923 6887069.113434969447553,1482189.804722755216062 6887109.159404909238219,1482114.440724022919312 6887154.138589794747531,1482034.290080333128572 6887211.098286444321275,1481972.978103650966659 6887259.325908213853836,1481901.262405461864546 6887325.861504116095603,1481730.342790664173663 6887524.123379080556333,1481461.170989822829142 6887854.10595522634685,1481188.752108187647536 6888186.614863532595336,1480670.170912018744275 6888817.763843473047018,1480055.054377123713493 6889565.443227421492338,1479862.077006594510749 6889808.447867930866778,1479841.60546849691309 6889834.730262932367623,1479692.510342122521251 6890026.310829350724816,1479549.928038716083393 6890208.225407693535089,1479413.634621670935303 6890373.821827123872936,1479315.839639539364725 6890486.729735681787133)",782,rail,0,0,0,railways,7,0 "LINESTRING (1477861.343389173736796 6890200.087439280003309,1478318.509971052641049 6890594.719426577910781,1478390.477597918594256 6890656.393440401181579,1478437.774875319562852 6890694.98591932002455,1478455.288584077497944 6890709.31637466698885)",783,rail,0,0,0,railways,7,0 "LINESTRING (1480071.877614675322548 6891532.785711640492082,1479083.878638119669631 6891071.034723062068224,1478918.445470173377544 6890994.888592929579318)",784,rail,0,0,0,railways,7,0 "LINESTRING (1477866.363301434088498 6890193.696611104533076,1478323.520552617264912 6890589.707667414098978,1478345.643623190466315 6890607.563031607307494,1478390.477597918594256 6890656.393440401181579)",785,rail,0,0,0,railways,7,0 "LINESTRING (1479235.297106784768403 6891399.41550721321255,1479323.42549207736738 6891429.473809752613306,1479404.817117797909304 6891454.412629490718246,1479515.861682475078851 6891481.696737250313163,1479730.990115647669882 6891529.674072655849159,1480047.17927313153632 6891600.766893580555916)",786,light_rail,0,0,0,railways,7,0 "LINESTRING (1477872.288290809141472 6890185.972451457753778,1478330.359949802746996 6890582.412268224172294,1478408.961698635946959 6890650.630639746785164,1478459.636686514364555 6890694.801999206654727,1478463.210341525729746 6890697.438187943771482)",787,rail,0,0,0,railways,7,0 "LINESTRING (1478805.488113650586456 6894342.55076818075031,1478857.320107331965119 6894072.714029368944466,1478926.292582089779899 6893755.217427032999694,1478940.615194202633575 6893690.161840692162514,1478969.521677806740627 6893554.241368629038334,1478978.189890613080934 6893508.015132857486606,1478983.816297846613452 6893465.484164356254041,1478989.190776400035247 6893405.965717462822795,1478991.168883087579161 6893344.040629624389112,1478990.7023484937381 6893285.075020092539489,1478985.887711454415694 6893222.721581661142409,1478980.597209128318354 6893177.72376514505595,1478972.638128911377862 6893132.434905360452831,1478968.709907609736547 6893107.061603565700352,1478959.323231523856521 6893066.157863318920135,1478950.49639695812948 6893030.804198566824198,1478937.797325239283964 6892990.912695890292525,1478857.497390477219597 6892791.243522559292614,1478802.642252611462027 6892668.445764632895589,1478757.547018504701555 6892584.742001041769981,1478697.793267377885059 6892455.217510379850864,1478660.498491725884378 6892373.738798955455422,1478642.947460204828531 6892327.228085407055914,1478624.09013180853799 6892263.195812923833728,1478611.559012545039877 6892213.55850566457957,1478604.887567814672366 6892161.637413104996085,1478597.898879556916654 6892089.83448248077184,1478592.841644530883059 6892002.932946247048676,1478584.938548462698236 6891893.805323468521237,1478581.840758743695915 6891800.866362730972469,1478581.532845909241587 6891711.040184433571994,1478585.181146452436224 6891648.944210037589073,1478590.415664629545063 6891604.461039665155113,1478597.721596408868209 6891552.206658062525094,1478605.596700401278213 6891511.44878276437521,1478616.131051591597497 6891471.442193754017353,1478628.074337264988571 6891433.029924367554486,1478641.19329012138769 6891395.13899090141058,1478656.962159483227879 6891360.574399496428668,1478672.087211105972528 6891325.688071240670979,1478697.252087243599817 6891275.382129811681807,1478725.31880857469514 6891220.416887637227774)",788,light_rail,0,0,0,railways,7,0 "LINESTRING (1477882.775988540612161 6890173.665918780490756,1478339.476035819854587 6890570.105128699913621,1478400.685374894412234 6890626.399334325455129,1478459.636686514364555 6890694.801999206654727)",789,rail,0,0,0,railways,7,0 "LINESTRING (1477908.538028964074329 6890093.375067686662078,1477813.999458313919604 6890050.080562806688249)",790,rail,0,0,0,railways,7,0 "LINESTRING (1477877.298872376326472 6890180.041405342519283,1478334.922658159164712 6890576.036462583579123,1478373.15050300443545 6890608.819805517792702,1478408.961698635946959 6890650.630639746785164)",791,rail,0,0,0,railways,7,0 "LINESTRING (1478441.880379769485444 6890723.922736717388034,1478448.113281978992745 6890727.11069754883647)",792,rail,0,0,0,railways,7,0 "LINESTRING (1477872.288290809141472 6890238.830985979177058,1478303.935430257115513 6890611.578578202985227,1478358.687930509448051 6890655.504497475922108,1478392.194445233326405 6890681.43714867066592,1478448.794422489590943 6890719.355371965095401)",793,rail,0,0,0,railways,7,0 "LINESTRING (1478374.52211471600458 6890689.882137652486563,1478441.880379769485444 6890723.922736717388034)",794,rail,0,0,0,railways,7,0 "LINESTRING (1477881.404376826249063 6890257.972941686399281,1478297.543906279606745 6890617.050146820954978,1478351.223376962356269 6890659.979866296984255,1478385.718945034081116 6890686.908764844760299,1478441.880379769485444 6890723.922736717388034)",795,rail,0,0,0,railways,7,0 "LINESTRING (1477639.31024397094734 6890001.207860252819955,1477650.339121833909303 6890011.138695799745619,1477667.871491971891373 6890027.245678919367492,1477711.333854988683015 6890056.072814892046154,1477872.288290809141472 6890185.972451457753778)",796,rail,0,0,0,railways,7,0 "LINESTRING (1477711.333854988683015 6890056.072814892046154,1477765.601159261539578 6890092.271629626862705,1477877.298872376326472 6890180.041405342519283)",797,rail,0,0,0,railways,7,0 "LINESTRING (1477765.601159261539578 6890092.271629626862705,1477828.779274330707267 6890136.347967855632305,1477882.775988540612161 6890173.665918780490756)",798,rail,0,0,0,railways,7,0 "LINESTRING (1477667.871491971891373 6890027.245678919367492,1477709.663661133032292 6890068.854257536120713,1477866.363301434088498 6890193.696611104533076)",799,rail,0,0,0,railways,7,0 "LINESTRING (1477709.663661133032292 6890068.854257536120713,1477738.43018435779959 6890100.348186734132469,1477861.343389173736796 6890200.087439280003309)",800,rail,0,0,0,railways,7,0 "LINESTRING (1477738.43018435779959 6890100.348186734132469,1477767.485959034180269 6890134.800081231631339,1477856.34213829645887 6890206.462946793064475)",801,rail,0,0,0,railways,7,0 "LINESTRING (1477767.485959034180269 6890134.800081231631339,1477796.280474334955215 6890170.96859906706959,1477852.236633849330246 6890212.394012399949133)",802,rail,0,0,0,railways,7,0 "LINESTRING (1477796.280474334955215 6890170.96859906706959,1477825.522862849291414 6890206.815438941121101,1477872.288290809141472 6890238.830985979177058)",803,rail,0,0,0,railways,7,0 "LINESTRING (1477825.522862849291414 6890206.815438941121101,1477854.522653371095657 6890233.896077645942569,1477881.404376826249063 6890257.972941686399281)",804,rail,0,0,0,railways,7,0 "LINESTRING (1477335.922795813763514 6889793.260820533148944,1477382.669562393333763 6889831.527330902405083,1477414.291277347132564 6889860.415065491572022,1477448.665546425385401 6889897.256655850447714,1477629.102466995362192 6890037.329800856299698,1477696.330102362437174 6890102.263879836536944,1477741.44399785483256 6890151.443709483370185,1477774.763898740522563 6890185.328771825879812,1477834.890877549303696 6890236.608744276687503,1478292.505332639208063 6890623.870454665273428,1478342.340558242052794 6890664.056745544075966,1478374.52211471600458 6890689.882137652486563)",805,rail,0,0,0,railways,7,0 "LINESTRING (1477335.922795813763514 6889793.260820533148944,1477374.542529721045867 6889835.496514805592597,1477399.390162334311754 6889867.6638342756778,1477427.400899513624609 6889893.532643830403686,1477590.072182645788416 6890022.694035316817462,1477621.115394705208018 6890055.337192909792066,1477774.763898740522563 6890185.328771825879812)",806,rail,0,0,0,railways,7,0 "LINESTRING (1478113.020142643013969 6890567.867468994110823,1478206.914895548252389 6890612.88133230060339,1478324.761534644989297 6890666.15649242606014)",807,rail,0,0,0,railways,7,0 "LINESTRING (1478632.758344612084329 6890816.420094702392817,1478872.753071786370128 6890934.054974609985948)",808,rail,0,0,0,railways,7,0 "LINESTRING (1477627.702863208018243 6890097.421008551493287,1477642.613308914005756 6890109.068425429053605,1477684.3868166890461 6890145.849852683022618,1477714.636919934535399 6890174.52415706217289,1477745.222928084433079 6890205.788614028133452,1477770.891661590430886 6890232.807946092449129,1478127.641336897388101 6890537.229985372163355,1478178.017742637079209 6890574.044024353846908,1478255.014612456317991 6890619.533044742420316)",809,rail,0,0,0,railways,7,0 "LINESTRING (1477633.282616982702166 6890089.78889452945441,1477648.622274519409984 6890102.432460854761302,1477690.694364438997582 6890138.202367076650262,1477719.246281747007743 6890165.696567691862583,1477750.653390789870173 6890198.846054994501173,1477777.712397390045226 6890226.217856734059751,1478134.965930065372959 6890527.988186067901552,1478179.100102899828926 6890562.058752524666488,1478255.014612456317991 6890619.533044742420316)",810,rail,0,0,0,railways,7,0 "LINESTRING (1478119.13174585881643 6890559.131406237371266,1478211.729532587574795 6890605.67787111364305,1478274.851663501933217 6890634.675673317164183)",811,rail,0,0,0,railways,7,0 "LINESTRING (1478578.658992794342339 6890784.938687206245959,1478592.291133706457913 6890793.812937114387751)",814,rail,0,0,0,railways,7,0 "LINESTRING (1478576.662224721163511 6890790.042529220692813,1478592.869636606657878 6890797.951191720552742)",816,rail,0,0,0,railways,7,0 "LINESTRING (1478255.014612456317991 6890619.533044742420316,1478274.851663501933217 6890634.675673317164183,1478324.761534644989297 6890666.15649242606014,1478374.52211471600458 6890689.882137652486563)",819,rail,0,0,0,railways,7,0 "LINESTRING (1478624.575327788246796 6890811.791369803249836,1478632.758344612084329 6890816.420094702392817)",821,rail,0,0,0,railways,7,0 "LINESTRING (1478624.575327788246796 6890812.481080299243331,1478632.758344612084329 6890816.420094702392817)",823,rail,0,0,0,railways,7,0 "LINESTRING (1479311.071655961917713 6890483.128060797229409,1479409.174550930503756 6890368.840857767499983,1479522.103915374726057 6890231.44395041000098,1479567.199149484280497 6890173.895804021507502,1479618.872521397890523 6890109.175704349763691,1479907.088264473713934 6889740.297941270284355,1480050.090449015144259 6889560.462758839130402,1480664.171277103479952 6888813.320146127603948,1481185.187783869216219 6888181.696536475792527,1481455.404622207395732 6887849.387007832527161,1481725.210910100489855 6887521.289062367752194,1481896.998279252555221 6887321.387990654446185,1481969.926967390812933 6887255.449916490353644,1482031.50020344578661 6887206.440996480174363,1482112.350649032043293 6887148.7459767004475,1482187.733309147180989 6887103.322546837851405,1482267.604032081319019 6887064.410267961211503,1482375.364193198736757 6887018.619642356410623,1482484.141399736981839 6886983.154683265835047,1482594.028958613984287 6886961.53875251673162,1482690.424336957978085 6886945.468548243865371,1482783.236729600699618 6886939.279460026882589)",824,rail,0,0,0,railways,7,0 "LINESTRING (1479076.507391492836177 6891028.424682137556374,1479191.92805068846792 6891093.642660211771727)",825,rail,0,0,0,railways,7,0 "LINESTRING (1478938.59976474638097 6890964.157518833875656,1479076.507391492836177 6891028.424682137556374,1479885.31042950367555 6891405.531389341689646,1479995.26330322236754 6891461.448241677135229,1480073.361194689990953 6891504.167875309474766)",827,rail,0,0,0,railways,7,0 "LINESTRING (1475815.159971352899447 6888439.460763610899448,1475864.211418837308884 6888499.693255602382123,1475920.802065403433517 6888566.576213048771024,1475997.071141253225505 6888649.85508313588798,1476055.490603434853256 6888704.557588589377701,1476132.328851491678506 6888770.982559802941978,1476354.128729394637048 6888961.802259580232203,1476403.460097637493163 6889007.343453120440245,1476449.217810868984088 6889054.064817779697478,1476500.732561023207381 6889108.907986088655889,1476539.548239458817989 6889157.376847730018198,1476580.500646346947178 6889211.990862969309092,1476624.84009440545924 6889271.003225136548281,1476671.465561988530681 6889351.255216074176133,1476907.158840176416561 6889762.457714626565576,1476971.960495642386377 6889870.391702450811863,1477004.384650106076151 6889919.784666567109525,1477040.15852296887897 6889966.741212910972536,1477288.289613505359739 6890277.007661812007427,1477353.996346088824794 6890353.8979682167992,1477413.740766525734216 6890414.619913823902607,1477448.021728683495894 6890442.958000471815467,1477480.277930689277127 6890466.284504777751863,1477526.68879235861823 6890495.281804216094315)",828,rail,0,0,0,railways,7,0 "LINESTRING (1475804.159085565945134 6888448.485649089328945,1475830.975494176382199 6888481.704669660888612,1475911.042161641409621 6888576.367373092100024,1475986.294192070141435 6888660.810877257026732,1476043.97652958938852 6888715.605394661426544,1476111.773337163729593 6888773.20439646858722,1476344.24752664193511 6888971.976985700428486,1476393.14968305407092 6889017.380325557664037,1476438.403538923012093 6889064.254984210245311,1476487.604277476668358 6889117.994917658157647,1476533.557935239281505 6889174.907231950201094,1476567.698937014909461 6889219.606819932349026,1476608.427407295908779 6889281.208990493789315,1476659.587591157061979 6889363.897621073760092,1476806.275399013189599 6889630.894533473998308,1476879.651960362214595 6889764.051504278555512,1476916.340241038240492 6889830.99095484893769,1476954.605408649425954 6889891.371798135340214,1477316.729562512831762 6890362.909676750190556,1477349.396314963698387 6890405.439559964463115)",829,light_rail,0,0,0,railways,7,0 "LINESTRING (1478755.951470183674246 6891121.998467871919274,1478802.306347704026848 6891043.660044934600592,1478839.731753036612645 6890992.834741913713515,1478870.849610630888492 6890954.65466683357954,1478904.841321337036788 6890917.057202836498618,1478994.527932184981182 6890830.566843283362687,1479078.056286355247721 6890746.790252956561744,1479311.071655961917713 6890483.128060797229409)",831,rail,0,0,0,railways,7,0 "LINESTRING (1478476.030712238047272 6891063.922815636731684,1478281.896335911471397 6890962.59414563048631,1477896.856002663495019 6890755.863709062337875,1477714.347668485715985 6890670.003475363366306)",832,light_rail,0,0,0,railways,7,0 "LINESTRING (1478476.030712238047272 6891063.922815636731684,1478633.626098963664845 6891126.550733875483274)",833,light_rail,0,0,0,railways,7,0 "LINESTRING (1478633.626098963664845 6891126.550733875483274,1478535.485881229164079 6891075.832198646850884,1478458.08779165497981 6891036.594143707305193,1478420.373134867986664 6891017.419679494574666,1478287.233491696184501 6890945.580986365675926,1478057.745123639237136 6890824.282802382484078,1478049.450138514628634 6890819.79201518651098)",834,light_rail,0,0,0,railways,7,0 "LINESTRING (1479207.566290363902226 6891415.111414563842118,1479099.610184715595096 6891375.703095939941704,1478899.448181400541216 6891294.403931108303368,1478781.23764532036148 6891236.143100920133293,1478638.020854862174019 6891161.880697418935597)",835,light_rail,0,0,0,railways,7,0 "LINESTRING (1478638.020854862174019 6891161.880697418935597,1478347.229840818792582 6891012.392329533584416,1478274.310483370674774 6890973.691036481410265,1477887.81456218380481 6890777.459188850596547,1477799.630192739423364 6890730.620521273463964,1477771.712762480368838 6890717.776719653978944,1477743.422104542376474 6890708.212852067314088,1477709.010512698208913 6890701.438452739268541,1477673.143332915147766 6890694.740692501887679,1477614.537256892537698 6890691.997217950411141,1477570.645682045025751 6890694.648732445202768,1477526.22225776175037 6890703.461575921624899,1477450.475700660608709 6890727.95366817060858,1477383.070782145252451 6890752.73704397585243,1477250.239051808137447 6890804.419134659692645,1477138.028150640428066 6890855.948287741281092,1477061.32986296294257 6890902.18992966786027,1477035.62380669103004 6890922.253091386519372,1477009.283263367367908 6890945.443041983060539,1476980.022213472751901 6890972.051025399938226,1476950.705179423559457 6891005.096546770073473,1476903.846444540657103 6891063.493649013340473,1476855.672082100762054 6891129.723526864312589,1476793.529673835728317 6891209.472932793200016,1476732.255019919481128 6891296.519170454703271,1476712.110056042205542 6891330.976191231049597,1476696.051935228751972 6891364.161139542236924,1476680.646962850354612 6891407.355425265617669,1476666.734901179792359 6891453.354988979175687,1476646.729897676035762 6891533.07694885134697,1476618.121996216243133 6891670.986616539768875,1476602.045214017154649 6891746.771262445487082,1476585.455243762582541 6891822.893856970593333,1476570.768734660698101 6891886.907293429598212,1476553.786875346908346 6891951.166504768654704,1476526.279995532939211 6892021.971798327751458,1476508.187783877598122 6892059.191198166459799,1476490.170217757113278 6892094.923823652788997,1476446.866476502502337 6892164.733967241831124,1476401.873880009399727 6892224.289213199168444,1476348.166417250875384 6892284.197483622469008,1476315.499664797214791 6892317.447686146944761,1476280.761498738545924 6892349.870215245522559,1476244.129202214302495 6892379.34953604824841,1476205.294862395850942 6892409.380842979066074,1476120.198951980331913 6892465.657269499264657,1475994.131973290815949 6892548.271348089911044,1475918.823958713328466 6892599.934322696179152,1475847.500149589264765 6892656.135431186296046,1475775.420554416952655 6892722.209795576520264,1475745.310411553597078 6892752.058416236191988,1475710.488269264576957 6892789.52648729365319,1475659.496037861565128 6892857.211681927554309,1475614.400803754804656 6892932.133648023940623,1475582.536490808241069 6892991.587262314744294,1475563.931091094622388 6893021.605525500141084,1475543.394238155335188 6893050.612043621018529,1475518.527944159228355 6893081.657719410024583,1475488.809690357884392 6893114.466613277792931,1475455.89100922155194 6893143.642111292108893,1475418.689540492836386 6893171.989819569513202,1475387.095817609224468 6893190.74014341738075,1475353.1974138233345 6893208.371313671581447)",836,light_rail,0,0,0,railways,7,0 "LINESTRING (1478658.75365233537741 6891138.674794974736869,1478633.626098963664845 6891126.550733875483274)",837,light_rail,0,0,0,railways,7,0 "LINESTRING (1478665.191829765914008 6891124.772744154557586,1478792.53711324906908 6891190.098797177895904,1478951.550765147898346 6891271.872068259865046,1479057.696716560982168 6891325.611431846395135,1479110.443118050228804 6891347.499672620557249,1479235.297106784768403 6891399.41550721321255)",838,light_rail,0,0,0,railways,7,0 "LINESTRING (1478557.963518089847639 6892049.073881317861378,1478556.050726244226098 6892008.252170108258724,1478555.892104479251429 6891960.287307545542717,1478556.013403475517407 6891851.006974860094488)",839,rail,0,0,0,railways,7,0 "LINESTRING (1478566.193188372533768 6891473.710761290974915,1478566.314487369032577 6891421.901743350550532,1478564.35504206456244 6891386.677933054976165,1478562.041030463995412 6891340.556127598509192,1478559.988278241828084 6891280.026449425145984,1478552.421087084105238 6891228.617199691012502,1478536.680209795245901 6891184.841425079852343,1478515.882097477559 6891146.093319251202047,1478490.17604120564647 6891115.22371987067163,1478460.448456714395434 6891086.806626409292221,1478416.528889790875837 6891054.77237503696233,1478271.417968872701749 6890980.772209639661014,1477885.407243662746623 6890784.019076376222074,1477796.569725786335766 6890736.781874912790954,1477769.296113269403577 6890724.014697107486427,1477741.248053323943168 6890714.527455672621727,1477707.312326766550541 6890707.385210207663476,1477672.322232022183016 6890701.285185849294066,1477614.070722295902669 6890697.269594454206526,1477572.231899673352018 6890700.074377545155585,1477526.175604302901775 6890708.120891856960952,1477455.775533676613122 6890734.314267538487911,1477389.107739823870361 6890759.603447327390313,1477324.548682353226468 6890788.141999081708491,1477257.99285680684261 6890813.109483245760202,1477200.954337026691064 6890839.057969767600298,1477139.474407889414579 6890870.033797833137214,1477067.376151334261522 6890914.604867226444185,1477017.195690128253773 6890957.275613599456847,1476964.794524239376187 6891008.238637273199856,1476915.929690593155101 6891070.344990382902324,1476870.666504034306854 6891132.22191062476486,1476788.761690261075273 6891251.961311405524611,1476754.90060923830606 6891323.971348975785077,1476738.030718227848411 6891370.399618566036224,1476719.761223427485675 6891450.917817885056138,1476702.368813663022593 6891509.915959592908621,1476623.253876777132973 6891838.284014022909105,1476608.446068681776524 6891899.1704620430246,1476585.417920996667817 6891971.646170520223677,1476560.598280456615612 6892035.553486871533096,1476540.061427514301613 6892081.755926453508437,1476514.971196911530569 6892126.241737992502749,1476469.894624190637842 6892196.55802833661437,1476420.703216326888651 6892263.563724930398166,1476371.01728179352358 6892312.496171937324107,1476327.321651474107057 6892356.41605613194406,1476278.49414059962146 6892398.205320552922785,1476225.598448038101196 6892436.177632182836533,1476038.051540214335546 6892556.212400928139687,1476025.800341709284112 6892564.613368845544755)",840,rail,0,0,0,railways,7,0 "LINESTRING (1478564.35504206456244 6891386.677933054976165,1478557.991510165855289 6891469.69478405546397,1478557.17973996582441 6891485.973299608565867)",841,rail,0,0,0,railways,7,0 "LINESTRING (1479372.187688112957403 6890474.959161611273885,1479284.45119188237004 6890585.155705378390849,1479257.214902134146541 6890621.678759607486427,1479238.068322289036587 6890653.343446989543736,1479217.820720798335969 6890695.077879380434752,1479200.521617954364046 6890742.973886811174452,1479189.595377702033147 6890782.241162405349314,1479182.326768688624725 6890823.608417795971036,1479178.603822610806674 6890869.190812314860523,1479179.844804635737091 6890923.985054980032146,1479185.153968344675377 6890968.203897933475673,1479195.361745317699388 6891013.066729949787259,1479215.254780515097082 6891069.072816937230527)",842,light_rail,0,0,0,railways,7,0 "LINESTRING (1479618.872521397890523 6890109.175704349763691,1479692.510342122521251 6890026.310829350724816)",843,rail,0,0,0,railways,7,0 "LINESTRING (1479213.220689673209563 6891123.270649696700275,1479083.878638119669631 6891071.034723062068224)",844,rail,0,0,0,railways,7,0 "LINESTRING (1479300.29470678162761 6891144.070084678940475,1479441.859964764444157 6891217.979787161573768)",845,rail,0,0,0,railways,7,0 "LINESTRING (1479384.009674790082499 6891203.495148631744087,1479558.960148505866528 6891274.753690734505653)",846,rail,0,0,0,railways,7,0 "LINESTRING (1480034.237603422952816 6891507.38680200651288,1479869.214985921513289 6891429.1672482220456,1479384.009674790082499 6891203.495148631744087,1479213.220689673209563 6891123.270649696700275,1478922.187077639857307 6890988.451151218265295)",847,rail,0,0,0,railways,7,0 "LINESTRING (1476931.73588272370398 6891636.221568983048201,1476803.457530052866787 6891734.431683016009629,1476778.572574671125039 6891759.448092334903777,1476760.209772950038314 6891782.226581771858037,1476741.193822791567072 6891808.684046884998679,1476723.484169505303726 6891841.487745635211468,1476712.809857935877517 6891868.19066839851439,1476703.031292790779844 6891897.499604214914143,1476694.307095838477835 6891943.869869998656213)",848,rail,0,0,0,railways,7,0 "LINESTRING (1476934.208516089478508 6891653.941301063634455,1476814.523730684537441 6891746.801919807679951,1476788.603068495867774 6891772.722762719728053,1476773.235418886179104 6891792.128960026428103,1476754.74198747612536 6891818.172579637728631,1476737.676151934778318 6891848.401065579615533,1476720.880906458944082 6891883.688214769586921,1476708.900298016844317 6891916.369587530381978,1476699.78421199973673 6891943.992502459324896)",849,rail,0,0,0,railways,7,0 "LINESTRING (1476935.00162490340881 6891674.266924197785556,1476822.473480205750093 6891761.793384700082242,1476799.939859193284065 6891783.790114367380738,1476785.346657011890784 6891800.345184058882296,1476766.722595915198326 6891824.54937045276165,1476723.736098188208416 6891895.798088805750012,1476711.624860059702769 6891917.672553083859384,1476699.78421199973673 6891943.992502459324896)",850,rail,0,0,0,railways,7,0 "LINESTRING (1476691.171983344946057 6891992.432471443898976,1476706.772900257259607 6891960.961787490174174,1476716.439497095998377 6891939.271154,1476729.035931204212829 6891916.139652455225587,1476782.090245527913794 6891832.382406485266984,1476799.4173404420726 6891808.806677283719182,1476812.181727005401626 6891794.474261927418411,1476832.625273029785603 6891774.68484057392925,1476935.253553586313501 6891694.699898800812662)",851,rail,0,0,0,railways,7,0 "LINESTRING (1478630.015121186384931 6891858.76339219789952,1478635.520229423418641 6891908.122586939483881,1478636.070740247843787 6891978.06907045096159,1478638.916601286735386 6892047.004431717097759,1478643.134074043016881 6892094.463943293318152,1478650.887879036134109 6892145.250223226845264,1478658.464400883996859 6892179.312314847484231,1478671.471385437063873 6892218.341333535499871,1478691.635010700207204 6892270.921968608163297,1478834.935777385951951 6892617.579527481459081)",1,motorway,0,0,1,motorways,9,0 "LINESTRING (1478313.583365709986538 6891281.068739344365895,1478311.064078888390213 6891244.052202273160219,1478311.791872860630974 6891206.913214413449168,1478314.357813141075894 6891179.61471161711961,1478320.152172832516953 6891150.063152204267681,1478327.019562090979889 6891118.93297032918781,1478335.622460052836686 6891089.810801983810961,1478345.895551870344207 6891061.240524603053927,1478354.07856869418174 6891040.180739216506481)",2,motorway,0,0,1,motorways,9,0 "LINESTRING (1478376.7148273200728 6891043.997246447019279,1478366.012523674638942 6891069.379364733584225,1478349.170624737394974 6891124.496849230490625,1478341.099576216889545 6891155.581069990992546,1478337.404622212052345 6891183.400629828684032,1478334.409470103681087 6891212.032651987858117,1478334.120218652067706 6891244.757277576252818,1478336.770135160302743 6891278.29440912604332)",3,motorway,0,0,1,motorways,9,0 "LINESTRING (1478997.037888313643634 6890015.629031332209706,1479043.672686586854979 6889994.847840843722224,1479081.350020605139434 6889979.614465416409075,1479123.524748138152063 6889968.564922427758574,1479170.215530562913045 6889961.760495744645596,1479209.572389130014926 6889960.028739424422383,1479277.229236325016245 6889958.00580330286175,1479339.371644590049982 6889955.538434940390289,1479394.28276660759002 6889949.515607272274792,1479445.900154372444376 6889934.450895222835243,1479482.691072656074539 6889919.309585420414805,1479513.939559936523438 6889901.930829749442637,1479538.787192549789324 6889886.636329824104905,1479557.066018043085933 6889872.138764577917755,1479576.044645432848483 6889857.028222269378603,1479623.267277299193665 6889818.424440407194197,1479929.099366740556434 6889533.936068938113749)",6,motorway,0,0,1,motorways,9,0 "LINESTRING (1479942.302295821951702 6889547.176416218280792,1479792.936579379020259 6889681.205510908737779,1479634.277493779081851 6889834.561687532812357,1479584.358291943091899 6889878.774539081379771,1479537.527549138991162 6889912.305973013862967,1479500.783284314209595 6889934.512196131981909,1479450.145619201473892 6889955.569085474126041,1479395.169182339450344 6889971.124246567487717,1479341.666994804749265 6889978.327139240689576,1479278.190297594293952 6889979.032103547826409,1479243.788036443060264 6889981.116346220485866,1479210.038923726649955 6889982.848107086494565,1479169.683681121794507 6889986.541509824804962,1479130.242846327135339 6889994.863166186027229,1479095.224759506992996 6890005.008548954501748,1479058.321872920030728 6890019.537004569545388,1479016.87493935925886 6890040.272282585501671)",8,motorway,0,0,1,motorways,9,0 "LINESTRING (1478777.253439866937697 6890329.912772791460156,1478754.393244634149596 6890382.84888407215476,1478729.78821000806056 6890439.463628521189094,1478709.120727382134646 6890476.890270238742232,1478688.985094192204997 6890512.937716416083276,1478670.454340018797666 6890542.195732670836151,1478633.747397957136855 6890586.473781661130488,1478588.71747869788669 6890651.550235321745276,1478534.739425873849541 6890732.521037810482085,1478511.935214792611077 6890776.462944713421166,1478472.820954215712845 6890853.679894518107176,1478458.908892544917762 6890873.620319033972919,1478415.84774928027764 6890956.907761368900537)",18,motorway,0,0,1,motorways,9,0 "LINESTRING (1478394.163221230730414 6890950.225115459412336,1478448.831745258299634 6890845.265387403778732,1478487.684746459824964 6890764.078874094411731,1478528.161288061179221 6890690.694451033137739,1478570.830542263807729 6890627.870682856999338,1478588.708148004952818 6890605.53993255738169,1478636.835856985999271 6890548.770754639059305,1478661.664828216191381 6890514.378391520120203,1478677.918893560534343 6890487.618659947998822,1478693.202566948253661 6890460.874343669973314,1478710.613638089969754 6890427.81573298573494,1478734.294934212695807 6890372.963567573577166,1478758.974614370847121 6890316.165379947982728)",20,motorway,0,0,1,motorways,9,0 "LINESTRING (1477398.289140685694292 6890680.900715908035636,1477271.680981867713854 6890519.972504733130336,1476953.084505865816027 6890110.692934914492071,1476865.413324474124238 6889991.261711636558175)",32,motorway,0,0,1,motorways,9,0 "LINESTRING (1476973.733327108668163 6890098.677702718414366,1477006.950590386521071 6890149.282794474624097,1477137.477639816235751 6890317.958516811951995,1477307.492177499225363 6890529.505495676770806,1477414.468560495181009 6890666.92282354272902)",44,motorway,0,0,1,motorways,9,0 "LINESTRING (1476882.217900645453483 6889977.560873750597239,1476973.733327108668163 6890098.677702718414366)",49,motorway,0,0,1,motorways,9,0 "LINESTRING (1478361.561783624347299 6891449.124428308568895,1478345.746260801097378 6891406.083198485895991,1478336.760804470162839 6891379.550418416969478)",53,motorway,0,0,1,motorways,9,0 "LINESTRING (1478843.389384278329089 6893924.490144995972514,1478859.260891250800341 6893860.031164361163974,1478879.54581551020965 6893775.931677811779082,1478890.938590359175578 6893720.826675555668771,1478904.066873905947432 6893655.58737968839705,1478915.562286365544423 6893583.970421583391726,1478926.843092911178246 6893487.393564508296549,1478932.180248695891351 6893415.977419194765389,1478936.435044218087569 6893333.093783299438655,1478934.214339534984902 6893251.146226578392088,1478925.770063341362402 6893158.988803039304912,1478919.71444427408278 6893114.221312643960118,1478911.20485323574394 6893073.302204750478268,1478903.451048239832744 6893044.080968570895493,1478888.521941148210317 6892996.8458161521703,1478859.027623953763396 6892921.984570599161088,1478827.620514913694933 6892843.919889785349369,1478773.241242334712297 6892718.913729729130864,1478735.255995481973514 6892636.665826476179063,1478681.044675360899419 6892531.377474130131304,1478640.75474760052748 6892447.521837593987584,1478616.914829715620726 6892391.18421838991344,1478585.778310738503933 6892312.450182654894888,1478550.256366555579007 6892207.533986137248576,1478535.308598081115633 6892151.82655640784651,1478521.71377993770875 6892092.363823323510587,1478508.650811232859269 6892023.658011235296726,1478497.593941294122487 6891948.391943287104368,1478489.672183843096718 6891879.334796157665551,1478479.958933542715386 6891808.776019685901701,1478470.609580228338018 6891754.910796630196273,1478462.314595098374411 6891717.861420435830951,1478450.408632193692029 6891673.592468312941492,1478431.31803650339134 6891617.70479725766927,1478396.617193207610399 6891531.804702173918486)",57,motorway,0,0,1,motorways,9,0 "LINESTRING (1478357.829506850801408 6891368.391655500978231,1478371.993497204268351 6891403.906618202105165,1478390.850825597764924 6891440.249455007724464)",61,motorway,0,0,1,motorways,9,0 "LINESTRING (1477495.477627843851224 6890800.066300450824201,1477451.250148088904098 6890745.763359077274799)",64,motorway,0,0,1,motorways,9,0 "LINESTRING (1478967.31030381959863 6890667.658501483500004,1478973.720489174127579 6890696.33466696832329)",206,service,0,1,0,minorroads,10,1 "LINESTRING (1479327.960208358010277 6889996.932087614201009,1479283.12623362406157 6889933.470080768689513)",208,footway,0,1,0,minorroads,10,1 "LINESTRING (1478931.601745795924217 6891332.723570773378015,1479038.970017851097509 6891272.239934901706874)",252,footway,0,1,0,minorroads,10,1 "LINESTRING (1479334.09980364702642 6891680.858200660906732,1479344.391556847607717 6891681.793242639862001)",260,footway,0,1,0,minorroads,10,1 "LINESTRING (1478994.415963881416246 6892026.73918299935758,1479007.749522649217397 6892003.975329895503819)",268,footway,0,1,0,minorroads,10,1 "LINESTRING (1478550.844200145918876 6890545.552211744710803,1478684.179787848610431 6890636.959331315010786)",290,path,0,1,0,minorroads,10,1 "LINESTRING (1478483.35530540603213 6892391.046249195933342,1478493.69371206802316 6892418.992724485695362,1478523.77586285257712 6892467.619516485370696)",329,service,0,1,1,minorroads,10,1 "LINESTRING (1478314.525765596190467 6891576.70133616309613,1478278.31335021276027 6891560.652561791241169,1478215.200549985514954 6891534.686417824588716)",376,service,0,1,1,minorroads,10,1 "LINESTRING (1478215.228542061522603 6891874.245591463521123,1478297.571898355614394 6891853.750844960100949,1478291.20836645970121 6891823.66029835306108)",378,footway,0,1,0,minorroads,10,1 "LINESTRING (1477112.210126065183431 6890858.29331654496491,1477075.419207778759301 6890879.996360674500465,1477069.279612489743158 6890889.912954720668495,1477083.490256302058697 6890932.47628013510257)",501,footway,0,1,0,minorroads,10,1 "LINESTRING (1477502.205056728795171 6890571.39254963491112,1477519.588135797530413 6890535.436799609102309)",541,service,0,1,0,minorroads,10,1 "LINESTRING (1477221.817764186300337 6890863.182627168484032,1477209.725187440868467 6890834.291289354674518,1477200.338511357782409 6890838.981335008516908,1477183.972477710107341 6890800.265549850650132,1477192.883288506418467 6890795.897391020320356,1477188.460540529107675 6890785.490453751757741)",556,footway,0,1,0,minorroads,10,1 "LINESTRING (1477943.453478170791641 6891735.30541658680886,1477934.290738694835454 6891718.244636114686728)",570,footway,0,1,0,minorroads,10,1 "LINESTRING (1477770.406465607928112 6892066.840511322021484,1477790.178201811853796 6892050.76009990926832)",583,footway,0,1,0,minorroads,10,1 "LINESTRING (1477118.508343119407073 6891093.428076104260981,1477088.584814094239846 6891117.76808157004416)",613,footway,0,1,0,minorroads,10,1 "LINESTRING (1478304.32731931633316 6891039.64428252261132,1478336.73281239438802 6891063.202428812161088,1478362.868080493994057 6891085.381176148541272,1478384.421978857368231 6891108.402995181269944,1478394.816369665553793 6891123.469907105900347)",23,motorway_link,0,1,1,motorways,13,1 "LINESTRING (1478416.715503631858155 6890979.362105399370193,1478402.775449885288253 6891019.994664833880961,1478396.486563521204516 6891050.220149672590196)",29,motorway_link,0,1,1,motorways,13,1 "LINESTRING (1478444.334351749392226 6890965.598274794407189,1478436.291295301867649 6890993.279232017695904,1478432.251105696661398 6891019.442882195115089,1478432.932246207259595 6891054.266572091728449)",30,motorway_link,0,1,1,motorways,13,1 "LINESTRING (1477430.918570373440161 6890653.711285330355167,1477490.821612572530285 6890732.214502855204046)",34,motorway_link,0,1,1,motorways,13,1 "LINESTRING (1478402.159624219173566 6891432.263520221225917,1478419.636010205605999 6891465.801433998160064,1478516.63788352557458 6891599.647920207120478,1478542.959765463601798 6891648.515012176707387)",55,motorway_link,0,1,1,motorways,13,1 "LINESTRING (1478395.805423010606319 6891558.521924624219537,1478375.240577995311469 6891530.716394937597215,1478359.005174034042284 6891515.434124372899532,1478339.886586264939979 6891502.06790954247117,1478316.951745497528464 6891488.686388740316033,1478294.97796599916182 6891479.136932187713683,1478269.187933499692008 6891469.572158829309046)",58,motorway_link,0,1,1,motorways,13,1 "LINESTRING (1478350.271646386012435 6891029.512921379879117,1478380.699032773729414 6890977.676111518405378)",60,motorway_link,0,1,1,motorways,13,1 "LINESTRING (1479445.853500913595781 6890008.594684292562306,1479466.810234990902245 6889974.786993312649429,1479481.711350003723055 6889943.24758021812886,1479491.517907224595547 6889916.918854899704456,1479498.478603403549641 6889887.111409046687186)",172,residential,0,1,0,minorroads,13,1 "LINESTRING (1478553.951320560649037 6891315.418398878537118,1478598.850610133260489 6891319.848151468671858)",317,unclassified,0,1,0,minorroads,13,1 "LINESTRING (1477416.483989951433614 6890762.960017169825733,1477397.141465578228235 6890736.030863894149661,1477367.992383987177163 6890698.603015801869333)",135,tertiary,0,1,0,mainroads,14,1 "LINESTRING (1478177.205972440075129 6891489.069593496620655,1478177.317940743407235 6891468.652469684369862,1478178.577584154205397 6891445.077807144261897,1478182.907025211025029 6891420.261640835553408,1478186.732608902268112 6891397.361552857793868,1478191.472600403940305 6891373.802427344955504)",92,secondary,0,1,1,mainroads,15,1 "LINESTRING (1478695.637877542292699 6892227.661724239587784,1478544.135432646842673 6892221.683182909153402)",97,secondary,0,1,1,mainroads,15,1 "LINESTRING (1478527.237549557816237 6892200.804311908781528,1478681.837784175062552 6892208.622385010123253,1478687.930726005230099 6892209.189578847959638)",102,secondary,0,1,1,mainroads,15,1 "LINESTRING (1479238.124306440819055 6892256.75735551957041,1479220.367999695939943 6892255.622961183078587)",107,secondary,0,1,1,mainroads,15,1 "LINESTRING (1479396.176897070370615 6890481.549454870633781,1479348.459738528588787 6890459.663571572862566,1479285.906779821496457 6890425.80800533015281)",109,secondary,0,1,1,mainroads,15,1 "LINESTRING (1479215.245449822163209 6892238.729702232405543,1479233.776204001158476 6892239.772116457112134)",110,secondary,0,1,1,mainroads,15,1 "LINESTRING (1479297.47683781851083 6890409.209787493571639,1479361.448061698814854 6890444.184096252545714,1479405.974123598309234 6890464.384051165543497)",112,secondary,0,1,1,mainroads,15,1 "LINESTRING (1478329.772116212407127 6891020.117283202707767,1478371.433655687142164 6890928.767115697264671)",120,secondary,0,1,1,mainroads,15,1 "LINESTRING (1478451.155087549006566 6890967.130994181148708,1478439.454399868380278 6891002.920075045898557,1478435.899406239856035 6891020.515792922116816,1478432.932246207259595 6891054.266572091728449,1478436.51523190876469 6891092.385810512118042)",125,secondary,0,1,1,mainroads,15,1 "LINESTRING (1478484.279043906368315 6892448.686919055879116,1478512.980252289446071 6892501.529672888107598)",138,secondary,0,1,1,mainroads,15,1 "LINESTRING (1478441.24589272052981 6890743.985453568398952,1478569.785504766972736 6890803.361579650081694)",698,rail,0,1,0,railways,17,1 "LINESTRING (1478556.414623227668926 6890825.447648616507649,1478501.363540833583102 6890799.943685433827341,1478430.310321775265038 6890777.137325343675911)",699,rail,0,1,0,railways,17,1 "LINESTRING (1478627.402527447091416 6890858.032757756300271,1478598.449390378547832 6890845.709869343787432)",701,rail,0,1,0,railways,17,1 "LINESTRING (1478595.75282041169703 6890816.082902735099196,1478625.956270195310935 6890829.907785100862384)",702,rail,0,1,0,railways,17,1 "LINESTRING (1477861.231420873198658 6890651.795460822060704,1477785.139628168661147 6890619.962187672965229)",706,rail,0,1,0,railways,17,1 "LINESTRING (1478533.153208245523274 6890597.539500389248133,1478563.608586709247902 6890651.657521475106478,1478583.986817886354402 6890702.90981500223279,1478598.971909126965329 6890754.806160444393754)",707,rail,0,1,0,railways,17,1 "LINESTRING (1478551.954552487237379 6890575.162854988127947,1478588.605510394554585 6890603.547487018629909,1478617.885221674805507 6890622.138555723242462,1478642.714192904997617 6890636.468881220556796,1478662.672542944317684 6890646.814319248311222)",711,rail,0,1,0,railways,17,1 "LINESTRING (1478591.227434826781973 6890756.093610955402255,1478577.12875931779854 6890705.745253457687795,1478556.750528137898073 6890657.573588914237916,1478526.565739739919081 6890602.627896940335631)",712,rail,0,1,0,railways,17,1 "LINESTRING (1478593.50412365840748 6891161.252267209812999,1478604.868906431598589 6891027.229151873849332)",716,rail,0,1,0,railways,17,1 "LINESTRING (1478861.276320709846914 6890948.416510410606861,1478927.88813040801324 6890978.978924939408898)",717,rail,0,1,0,railways,17,1 "LINESTRING (1478445.080807101679966 6890735.663021787069738,1478572.827310339780524 6890796.249909016303718)",721,rail,0,1,0,railways,17,1 "LINESTRING (1478725.31880857469514 6891220.416887637227774,1478753.684112047543749 6891165.635952131822705,1478782.273352124495432 6891113.062545800581574)",722,light_rail,0,1,0,railways,17,1 "LINESTRING (1478565.344095406820998 6890811.423524235375226,1478438.502669292036444 6890750.315412051975727)",725,rail,0,1,0,railways,17,1 "LINESTRING (1478761.083350750152022 6891124.619469199329615,1478714.065994105068967 6891217.213403515517712)",726,rail,0,1,0,railways,17,1 "LINESTRING (1478594.185264169238508 6890806.013130874373019,1478624.789933702209964 6890819.929957416839898)",729,rail,0,1,0,railways,17,1 "LINESTRING (1478611.950901604257524 6891032.133892551995814,1478602.097690927330405 6891164.808263186365366)",732,rail,0,1,0,railways,17,1 "LINESTRING (1478625.368436602409929 6890839.900952127762139,1478595.276955124922097 6890826.290629548951983)",733,rail,0,1,0,railways,17,1 "LINESTRING (1478918.445470173377544 6890994.888592929579318,1478850.574017061386257 6890963.099942809902132)",738,rail,0,1,0,railways,17,1 "LINESTRING (1478922.187077639857307 6890988.451151218265295,1478855.416646176483482 6890957.168323368765414)",740,rail,0,1,0,railways,17,1 "LINESTRING (1478363.717173459939659 6890762.914036750793457,1478343.516225425293669 6890759.5421401290223)",744,rail,0,1,0,railways,17,1 "LINESTRING (1478866.398870577802882 6890942.408266056329012,1478932.544145682128146 6890972.940003331750631)",745,rail,0,1,0,railways,17,1 "LINESTRING (1477526.68879235861823 6890495.281804216094315,1477556.565667921910062 6890511.175188716500998)",748,rail,0,1,0,railways,17,1 "LINESTRING (1477551.331149747828022 6890517.719532645307481,1477521.612895943690091 6890502.255271850153804)",752,rail,0,1,0,railways,17,1 "LINESTRING (1478803.090125825256109 6891124.665451684966683,1478749.074750232277438 6891229.766776816919446)",771,light_rail,0,1,0,railways,17,1 "LINESTRING (1478455.288584077497944 6890709.31637466698885,1478485.305420020362362 6890732.873553024604917,1478551.777269339188933 6890776.279022733680904)",812,rail,0,1,0,railways,17,1 "LINESTRING (1478463.210341525729746 6890697.438187943771482,1478515.826113325776532 6890741.441210155375302,1478545.09649391612038 6890764.354756650514901,1478578.658992794342339 6890784.938687206245959)",813,rail,0,1,0,railways,17,1 "LINESTRING (1478448.113281978992745 6890727.11069754883647,1478488.795098801376298 6890745.211595254950225,1478551.777269339188933 6890776.279022733680904,1478576.662224721163511 6890790.042529220692813)",815,rail,0,1,0,railways,17,1 "LINESTRING (1478448.794422489590943 6890719.355371965095401,1478488.795098801376298 6890745.211595254950225)",817,rail,0,1,0,railways,17,1 "LINESTRING (1478453.133194239344448 6890714.128961123526096,1478485.305420020362362 6890732.873553024604917)",818,rail,0,1,0,railways,17,1 "LINESTRING (1478592.291133706457913 6890793.812937114387751,1478624.575327788246796 6890811.791369803249836)",820,rail,0,1,0,railways,17,1 "LINESTRING (1478592.869636606657878 6890797.951191720552742,1478624.575327788246796 6890812.481080299243331)",822,rail,0,1,0,railways,17,1 "LINESTRING (1478872.753071786370128 6890934.054974609985948,1478938.59976474638097 6890964.157518833875656)",826,rail,0,1,0,railways,17,1 "LINESTRING (1478708.467578947311267 6891213.902627007104456,1478755.951470183674246 6891121.998467871919274)",830,rail,0,1,0,railways,17,1 "LINESTRING (1478556.050726244226098 6890567.974754032678902,1478593.896012717625126 6890597.156338127329946,1478621.766789517831057 6890615.134331055916846,1478643.236711653415114 6890627.472192604094744,1478666.591433558845893 6890639.610827658325434)",852,rail,0,1,0,railways,17,1 "LINESTRING (1477451.250148088904098 6890745.763359077274799,1477398.289140685694292 6890680.900715908035636)",24,motorway,0,1,1,motorways,19,1 "LINESTRING (1478390.850825597764924 6891440.249455007724464,1478416.4169214903377 6891479.535464659333229,1478439.883611699100584 6891511.923958003520966,1478473.362134346971288 6891559.089072591625154,1478503.668221738422289 6891600.536967532709241,1478542.959765463601798 6891648.515012176707387,1478591.927236720221117 6891731.335294630378485,1478610.709919579094276 6891779.927269681356847,1478623.922179353423417 6891826.787379971705377,1478630.015121186384931 6891858.76339219789952)",25,motorway,0,1,1,motorways,19,1 "LINESTRING (1478354.07856869418174 6891040.180739216506481,1478380.699032773729414 6890977.676111518405378,1478394.163221230730414 6890950.225115459412336)",26,motorway,0,1,1,motorways,19,1 "LINESTRING (1478415.84774928027764 6890956.907761368900537,1478376.7148273200728 6891043.997246447019279)",27,motorway,0,1,1,motorways,19,1 "LINESTRING (1477414.468560495181009 6890666.92282354272902,1477470.023500254843384 6890738.375857715494931)",33,motorway,0,1,1,motorways,19,1 "LINESTRING (1478336.770135160302743 6891278.29440912604332,1478342.517841390101239 6891313.25717099942267,1478349.375899961218238 6891340.387520620599389,1478357.829506850801408 6891368.391655500978231)",52,motorway,0,1,1,motorways,19,1 "LINESTRING (1478336.760804470162839 6891379.550418416969478,1478326.310429504606873 6891342.334165048785508,1478318.892529421718791 6891313.10389244556427,1478313.583365709986538 6891281.068739344365895)",54,motorway,0,1,1,motorways,19,1 "LINESTRING (1478396.617193207610399 6891531.804702173918486,1478382.845091919181868 6891499.554082627408206,1478361.561783624347299 6891449.124428308568895)",56,motorway,0,1,1,motorways,19,1 mapnik-3.0.9/benchmark/data/roads.xml000066400000000000000000000061031262555547000175120ustar00rootroot00000000000000 labels ./roads.csv 1477001.12245,6890242.37746,1480004.49012,6892244.62256 csv mapnik-3.0.9/benchmark/data/valid.geotiff.tif000066400000000000000000123413001262555547000211110ustar00rootroot00000000000000II*FRRSd  j      +RKj>* (rHh^J%E6eڄ~"j#BVbB. ?v_bN<\:|ޛ&n:YZyF27Vzvµf R4Ss>* r1 Q p ^  J  . 6N m ~ " j  + VK j B . ( vH h b  N % E :e ބ & n#BZbF2 ?z_žf R<\>|*r:Y^yJ67V~v"ƵjV4SsB.v1QpbN.:Nm&n +ZKjF2 (zHh‡f R%E>e*r#B^bJ6 ?~_"ƞjV<\B|.v:YbyN:7Vv&ʵnZ4SsF2z1Qpf R . >N m * r  !+!^K!k!!J!!!6 "("~H""h"Ƈ"j"""V#%#E#Be###.##v$#$B$bb$$$N$$%: %?%_%&%ʞ%n%%%Z&<&\&F|&&&2&&z':'Y'fy' ''R''(>7(V(v(*(ε(r(()^4)T)s)J))??fV@#  mtr@@TXAWGS 84|"/--=;;JHHVPP]ddoww}}UUb*!.++<99HLLZWWcccmbbl`aiNNZ.#0--=AAOQQ_ccouuxx33C ",''6&&4..;55@??IAAJ) &*,&&212=77ACDLAAK, &,&'4,-934???I:;D$%0  (%%5..=,),:QR^\]g]^gDFR." 100@;;IKKXZZfiit||<@AKijsXXe*$""322BCCRTTaeepuuUUc(#1//???NMMZ^^jjjunnx[[d33@  '(((6$$1%%1!!,,-7BBM$%5"0//???MJJWRR^]]hbblbckABMIIVSS_ddnyytt}44C .22@:;F[\fbblabj89D##/++;99HHHUZZfiiswweep((8 -)):*,:+/9&*3!,($ BBPXXdeeptu~ww>>J /!!0)*700=)*7 &%%677FIIV[[giitss|ܩST_$$##355DOO\eeqyy񺺿Ű˺kmk`cadfdgihmomqspwxwxyxyyx~~{||{|{rsrvwvtutoqppqpjkjQSS1676<:AHEBMEIUJBOC?L@@MACOECNFBPEnrpwxwާrvĹsv}CHMEJLadfyz}jmmȲlmo^^h&&5++955B==Hkktzzllqssw}~{}|ڱ{~pvrȶϺ͏ʬĎ~~}~ʐvw~klryy~۴nooijkWY^LNT35?  !!!233CGGT[[fppy̤]]h) )&&588BOOXaaijjq{{Ʀ}}|tutprpnpo|~}z}{wywuzv{|prtWY^-06&11=kkqDPUqx}Ͷßơȣœo{qè{{~prvqqqPSP045!% )%%311=>>HVV^ssxЁm{t|}imkdgf^``[\\]`_Z]]UXX\^`ceg^abprrӴɰx{zcfefggikjz{|ףDZı~ORR,03( ')+1116+-2=>AQRTnqs}ĻŮur{|{Ž~V\W(2,.450598?A@EJ06;=CDPTTZ^\osoz|{noq=>?DEDJLL7:?01;12>ABKHKRABK/0=#$ ///;<M:+9.+(  !!.81>HUU\mmqzz{}}}{{{~~~|||xxxyyyyyyyyy֥zywyyylqp`zzg|npky{ux{~wy|sxzjqy`}ye~yk~j|w_svrawq\ٿ̼ɧz{ycebRTS<@>.519?:?FAGMHFMFCIC-5/&.(+3-$.&'2))9+-=V>8T:) !!0>>Icchzzz{{{zzz|||~}y˸҄{{vwvòƶdfg9<<588;?AFHITUU___eeefff[[[kkkwwwstsrrq~}{vuqkhbnlgRMFXUOkha}zuҲ{~{RbS>R@=S?BYCIbILdMMfM7K="+% "-7"!;'),')83/'" $! 0ss}Ñ259*-1(*.acfvw{VV\HHR//=11@PP[kkrbchYZ_lmp}}iimhimHIQ66B""1#..;KKTiin|||yyyzzz}}}{{{}}}xxxxxxqqqmmmlllwww㱱괵ĸyz~@EJ*-0,//587ghh{yvyxtxtp}tg`Q`XLOF=C8,=4&5. <5'RMC\VM~{vֺͷz}zowo_k`@RC+:3  '"3##=(4$0#*!    (./5DFH?AD:?BFGH?@A<=?-.2!#'%&,cdgˬǠijohhkqrszz|nnptuvtuvvwyyz{jkn\]cLLU,,9"&4 #8+#  /NNVpps{{{yyy{{{yyyyyzqqriijooonoovvv}}}~~mmmttt}}}yyyuuu{{{|}|{{{̴|||~~~vvvlllllldddZZZ[[[dddSSSnnn~~}~~}nnnddd@AC==>]]]nonwxw˿ļdhj"#      _bg꽹š۸]db679.02!#'&).`be~~svsvwv}}}vwvopoqrqqspmomsssstsyyywy|HMRFKP;@G48@STYWX[suusuthkjfhhZZ_;;F  ,"5#&:$(;#'; $8#7!5"5 41/)# $:;D^_addeddennodegQRWuvzegjvvwddeeefiiippptttsyybfi`cehiiooo|||ooobbbXXXOOOCCCCCCGHH==>445:::<<) )228@@CHHJMMNVVW````aaOOP567234789:;<@ABGGGFGG9::<>><==?@@@AAABCIJKfgguuutttpppkkkcccmmmoooooosssxxxyyyvvvvvvuuusssyyy}}}|||ghk14;$*$',1&,2*06%,2INS9?C -/5JLN57:CFG/17@BHWW`::FSS]BBK"%JKR@@J22>+$/ #7"&9$(;%)="&:#';$(;$';$':#'9$(:$(:$(:"&7#'8),;/2>14>>?GHIOZ[^]^`PQU67=+,3%'/./6EFKRRV^^a\]`CELPRWwyzVVYTUX``brrr~~~}}}~~~}}}~~~vwvgihPQQHIIGHG`bbmmn\\\=>>001556@@@QQQqqqyyyyyyqqqlllUUUDDD444777??@FFFjjjۺϴļùǺ宯wxxKQQ               '34;NQShlnȘǧûþêz~zdjeCQD5F7%4*')-08:=E@CJgim{y}~y}}w{{w|zntoT^X8H?'6. 0&-%#  -1:7=AOVU\aaw}yZb`ahfnuqMUVtzxpsvdemBCN"#2  &((145:99>BCEFFIEEG89;33588:::<>>?::=;<>>>@335002124668@@B@AA).,),+698PQQSTSYYYVWWVVVQQQMOMZ[Z]^]abaqrqvvvqqquuu}}}Į`af'(3    =EA(4-'+-_adccf^^bVV\00;''4%%2,  +,7JKP`aeceeQRV;=C#  ) 3%(;%)<%)<%(;#':$(;%(;#':#'9"&9"&8"&7%(9FITXZaach^_ecdhijm`aeOPUVW\qrt~uuwXZ^=>F@AFCDIDEIEFJHIMLMQBCICEKKLQZ[^cdgdfjdfjWYaNQ[Y\afhibed\`^PRURTWVWZbbcsssxxx~~~~~~xxx|||zzznnn{{{yyylml`abXYZIKK013 "$'(245ABCEFFBCC<<<888>>>GGGOOOooo~~~tttKKKXXXddd___^^^___yzz}}}̿ŭ߼yJOT27>(/4",/%%        &'1JKSPQX,.7 &(1>@FKPSOTVWZ\Y\]ehhLPSY[\cearunᬱLXMISKHSHGSIFOI=H@NYP|}\dbmtp|~wxmxmt~s]k_frgiyjeyegzhm}nfphLYS6?@#&1  (+",-*43OZTRZW179gljsysw~{_gdszw,56!'18=chiT\\otuflmx}|v{ztywputX]`TW]9;E, './5==?78;::===?@ABEEFCCE88;225558CCFKKM77:'','(,#$)'(/%(,*=A=JLJD>BGBGMHNRNYZYgggpppxyxwww˸{{|mmpcdf""#&FFHTUWFGKLMR\\d ,$  .09XZ[npowxykknPPX  2$'9%(9%(9#'8"%6 $5!%5!%5"%6!0()!$3?CN\^dtuwY[`57>'!+35=MNSMNS9;@67?FGMACJ9;B78?78>57>57B>@KHIPVW[^^___`^^_ddedddjjjwww{{{{{{~~~~~~}}}}}}kklOOPVWWbbbsssvvviiigggdddlllrrrilmbdhlnqvvwnnnzzyopq_adORV279266;?>+/-##)++???CCCAAAEEEFGFEEEBCCOOOMNN?@BEFIMOObecknkǬŽŸsvyntykpx9?K )       (kmoڵş}uwȻĿϳ*%.>1:H=DLG@MAr|rvwlxm{{{{oznuvl{m?o@8n:HoM7X@.- #-. #  !*,"%;B>=E?1;7()2;<'21EMMbjhirmmvo;FD  $)U[]zbki`mgTe[m|pm{ps}tivjardkymaqe_idBKN !0%$--189;45889<==@>?@::>448235779<?AEFGHILGHLbcf[]aSUYNPUY[^[]_).2',+&.''0(292@F@OTOJOJ=B=292'$$,%MPNƩyzxyzwjjfkkizzyvvvnnniihffe[[YRRQGGGHHL33;)*/004-.2*-1' " '#$/;=B57?&)3'+,7!!/ !(*5,  ++922?. &, 0 0/. /)#)-.8;13=68B;=FPPSaaacccbbbbbbcddiiikkjssrxxxffg.27 !-BGOjkjLNM<>1746<93866<:gkjcfeqssCEF?@ALNMSWT|||}~xzxprqSVTXYXMONUVU`a`gggêwwuCCC112\\[dddjjjhhibdeikkgijPQUNPUMOU9AE>AC15:8;@-07038*%'2'    "%6IOXTY]38>%(1)     *(" *+8ZZa~~~~~yy|yybcl..= (35=68;=C?3=4[_\xyyWZ[$$VY]^`aACF\_^mpnyzy~~}}}~~~klqVWZGHJDEEEFFWWX\\]nooyzzeeennnoos7;C  *  %*2;;Z^`|||yyytuujlr:>JZ]f5:H_bjđܾȠk{v/<<              $*16>@4?>EMKw{xþrxruxtzzQ_QEUHNZS?LE*;1:G@glmafh|VZ[fkjgni[g\fre|m{lfzfasbOYT6<@*    ! # %'-"0 3?&(L8/TC:_RAcVC[S9HF.7;"&0*!-PQ]`clDzsspMNF%7/  &$"7*-J6DaR_lhpyuv}{x}|inpKOU./;"        #    "143(++HJJIKK@CCBEErur`egDIL589DGH;?@>@AY[[ded_ebBKEZ`]~_bbRWXpsplnlegfgignpnjljsurstr·STSLMNSTUrrryyy;;>IJN/44%),AEFORUdfgijknoomoodgg\_`RUW<=D$%1!         $&'  "#$(   !#/*'  (&<+*:/)8$H%*I+G`FZhXiqfsxp~|xyzwx{__eJKT33A)#388dgevwxvxyz{|~~~NRR$! $;A?JNN\a]X^YY^YtutxxxttuqrsXXXnnnzzz|||hiivvw}ANJ2;9 )&'4+'/+%&*.3DH?KUP@GE+5;;FFDNRSZ`ԪyywnnlVWUHJE380$,$%$! ,!?$%Q*3i60o4-g72d>8k@NwTXw\[jaPYX/5<#             #587>@AJLLMPPNSQX\X\b]svswywwzwjmj@FDBJIOVPcidsqmZojVso_hcNjhX|~tz~~47?acfTWX$#*&3:6bgdxyxhij>@G&      !"#%(&,2")0  &-(DHF5;9()&)!*,%+'%$1 2G31E3-A/-B0.D0*@+.$$-2L1M^JYeWSaNZgV\hX_j\`k]YeWcm`nul{zrrwQQZ77C&&5  22>KMQ&!$.PRWwwydei89D::FUV\Z[aILSGLN~~X[] 085ELIgjj\b\2>3&4&eieyyxzzzvvvrrrpppTUW-.1!##& (()4RTXuvxwxzOSO9A9BHC  "  7?Ceik^bcU]XEPH2E77J>IVMO_U`lfsyu{{v{xlpoY_]MYSR^VQZTWbXakaV_V1B37H:ATDHYII[LDVJ9L=)      (02Z_bY]a"     #+18@FLSU[aint}jqr-9;(16>FK]di08?>DK09; ,/3>AFNRFNODMK(41   !",8BD䯮ttyxBLJESJWdYclfr|slsoXa^H]NfzhcwdkwjryrR[Wfnh`las|rptrJOR&+3        !"+7=INRVghgcgmʢqvu5>8 -%+-, #% !   $9'F)2Q4&E(!8'!               .39BGJ\_]_`\noi~~wzy}|~xkomgkb]`^nohyxkvvn}m|zesuwnvtsoUvs\}{dtoWzsa~?AE"%($%`acghiEGJMNV)        !',?BFPSWrss~~|xyzfhgMQMAFB=B>ADBOSPnomqsqwwqWYXEJN(/6!' '%0;8)3/*622?8%6*?JBcidIQK@JCCLDT[Tcibkpimul`k^P_MT`QXdWL[JHXFN\Nrwsccj!!0 018Z[[gihdff27: (*0),1 ##-LMSuvwz{|RSZ./8:AAornvzvz|zghhQSU=>@9:K?8J;@RA@RA2F5,#"%#,2.6:3:?FMOaeiprtgjl\bdjorZ_g,3<3:B,3;                       '5)*77?HQRX_ջ}wnpzs?VF]x^[z\SoSOjQ*>0)<23&&        " '     #1)T[VKQP2<7,55! !)(%+*&/0(;9*>=-JI>bbUqsguvhz{ppqctxv|v_pjSslRzu]{h}{k|~o~l~}jzw[zvWhaDpmYt~wzufu}z{}#&/+,2MNSABK)      !(TVX*04 "$4:<5:B79:<>Asstzz{\_a/46 "./6#$.,.678=OPScdfmmmqrqW[^~}~z|{|wxyLSR,>31&>+'A)%C*`ncȻĹúsxtU]X>EFafh}~~{|}͉LQZ                      "(+8@PV`Ēwykyb~tE}qExGgJ1U47   ()$(0  ,/4v{~ιfmq_ifp~zr}anjp{ur}r:G@                            %&/6: &+    #%""%!"!!!%%1/@;$>:'?<)B>*HC1KG3QL8TP=dbSsvkik\rwhrtg~tvtdd[@\N.^Q4`W=c^FaV;h]@siIfT*jU&o[+dunQndEldEldFaW7UI)YL%]P)e[9ldDpjIqkLyv^x}uzwvg~qy{{ye~{fzwb~}lpmZ|c_LYT=d_InjYusg{wywoy~}zrtw?BH'+-    =AEuvusts8<<%,-7:@DJPZ\Zyyy||{rslabV^^QrrkxwpvunedYtsiolb`vpRicMQYR'2+68%>=$AA!NM,QR.NO.QP7hiQtZeYdkdVXVFHI:@@6<=-23,240688>B49?;@EDINWZ^>DL$*5 /,                   EFKVWZ^`aacd^`b}}|~}vvvrss{~sHLL<@Guw_aaghgghi]_`ZZ[_`_vvsywp}}}wyxMOQGHH==>@AF9;@  $,Ķche\acBKJ1$2& KOQ~õíè˵ÿĈ                 )4SXb綼qah}\<@C!&048kmg޶?JI5A;&8/*F0NhQh{jj{kl{n\m_DUI2?:")  $%$$$ $ " "     -43';#-5#!;(/$#"        !!'#-%"((41503.3/1-0+1-95!?<*D@3OK>a_QgdSgfTb_MlkYtygps`gdPoiRqmUwt_ldJeW7j[7kW-kU,hR(kT%sZ&pV lSiRjT%q^0rb9whBuf@ukJ~xY{}jeeMjgJ{waozxfuqZtpYjgPpo_xvgsp^daKVP4olVjdLZT3RK%JBF?A;C<KD'miWebMVP3G@ JB$OH0SO:`]Oc^Qc_RSM;TN=OH7OI9XTH]ZJrpdzxo{ynkiZfcO[XAWU@e`LheYoqjpspUYVDIE;A=(--!$$#1)=DB]_aAHS +8 )5JMOqrryyx||{|||wvuuuruuqppjYYK;<%>>-jgXu{{`pjKkeH\U:VQ8JR@FN=GH1LH,?>!9999CB*VYF~`s`^q[iqcuul~|pxui_]PDB4CA5?=3?=3>>6@A3B=/;6'ID6tsnlllmoodgg]`a6:? $+%*0FIJOTPDJLNTUVZYZ^\HMM045.44',-$)+-/3=?DDEH57; "'.05EGIVXWXYYOPR/06  "%=BEJNUUX`DIO7=D7;CAFKIPVMUUHONAIFBGG,36 (1JOU`cf`ch"%DINݴڻ(2-   ()>-B!%6*!0.!      1nr|ͭƬjle^b_KONUYZINQ      &'"DD=˚cjh=CC #!+=5,=6#8+ 1(+"    " * *           $8#1$,+ 6&/"9%.K0!';" 6(         %''**&'$41"40<5;4;4<6=7:5;6=7;68594=6Em[1viDqc=o^3m\2iX.iV*fR!lU!pW!qW!v]+nFtLe|tUmb@cU/\N)k[-cU+`Q"PI'?>RP'soN{Z~Xjtq`d_HLH*TZBQVD(.20QN3]Y@YU;RJ)<6,,EB'IE*JE*SP9\XCLE)SK0haKQI,G@$IA$G@ B<G?IAOG%c[Bc\BaX;~v^}|{tWXW25;),4" $++.43*3/2;4;BS[JEM=:C/8C.;G7CL::443)0--*+(+()',)/-.,((+-!OYR_hj'28 #                        %[]_zz{}~}yxuxwqxwppnefdZlkdnldKG7ONESVUCGI %*  " &(!((%' %!&!%(!%$ %#&+),1 #( &%&+/14&)-268/26-04/26/05@BECEH9<@'DFLoqsikngjjY\\EKL!'+ $57=  $.NRW6:A5;>HLNUWYQUWPSUNQS068$$  ,07UW\_ae?CLNQYgim?AJ,0=ѱͼɖġuyp%.6LRQ˧OWZ%  %9Ab&Be&Be%Ef)7@8@7@7=5<4@6G;L@HBKCKAH?I@QH!ZQ'\R#e\4jb:kc;ogAl_4o_/q^)xh3{k8rB{Q^j}Uh}]vmMumMmfIcV-g[7`S/\Q.d`IjhSdaIrn[vtac_H?= *2IM9TW?X\?hkO_cKZ_BZY3VT/NL$HF5;HFJH+[ZDYXBGC+^\H^ZFTN8UO9B= C>#xucvq]hbG\R2h_Ed]AVO2GB#JC$JB"KB"H@!JD)UQ=WVHEF=SY\nttjqr9BJ6@I&1    BIK]a_\_^VXXRSV[\^abdddfefhmmoyyyxws~}{kmmORSCEGEGHVWXUVWHIJ67;,-1(*/)/1&,.$,,055'+.$,-1&(*)*,'(*002$%''(*)*+"$&'.+6<8>D@AGAAGC9@;072$)( " "%)*-,-0..1,-1().%&,"#)(+/'*.&*.&). #) &!#*(*/+-1')-*,2,05+14.27(-1$,-0=52B6CSE:I=-74&-/!$)    *44C;?E&-4 )&,5%*4" %/!#'   "+$+   "01G#>Y,Ee,Gj,Bb(4P"%=5+ !      !+-/768=UVYȚw}xiZTEgbYXTK/02148SWZ9=A7;@ ).2.svsɷ}OTM'//&$   .)/E85I<##                        #         %((73>:B<MBOBK@H@F=K@MAMAODLBKBLCF?NCUJSIXM]U aY'gpn|wXvoMuj?}sExi6|rF|uOm|e}f|z`omTtr^v~irpSssVssZ{ikoHquHjj4YV!b\(bX#63 ! 30%( !'D>E>>8KBTI cX+cZ1bZ7uoUg`CbZ?c[@miRyd]E[P1RG&VL-smYsnYhbIpkU]W:XO0WM-YP2WL+LB"IA%UR?BE428-'-'#!;7$FA.JG9GC4[ZS[a['3* +#&.)!(#   $                   12>Z]]Z`[IPL3@9!2%$$"-51$0&&      !4(A);>B79:,.2!"%  &   *"*3.FLH7:;   '(9!2E%8M&6L#2I!*A 5!    "*/2QVXѼƲ˽NJjz]{tvghm`[cZ-87    #!*%!!MSFRSBWXFrzn;syxswu|=C; +& $+B4NaRUfX>PD&8/0)#                                                    %'-:7D=D<B<H@MFKDNDQDSDNCJ@K@J@LASH$MC!RJ(^X7snQf^8{tP{X{tLwmCymCyMU~TtlF`W4miO_^I^X>_[?a_EnlTnkL|y[pjEh](e[#ic)vo:yr5yp/xn.vn.he'HO&ok6h[-eX+`R%()QCYEH7 R@ZH]L[M"ZL#UH"UI"TG TJ$]S2ZR5^S3_S1YM)_S1\P/[Q5}xc~[P1YN0[R5UL-ZP1\T9jdPkgUbbSZ`T-7*  "#/0$78(47-"(&  2;2Z]YHNI394)0,                             %&16=;JUGlsgtzpemc/;1)!'5*",%:>>WZZ;@?          &(78+<=2(6+&-#6$.C/9M:HZH]h]bjbbia^i^jshw~urzq\g_FYKBVG>UE7M<2H85G<4E;5F==KD0'  TT`yyYYd,,9  $//152'HA1C<,@8&HB1^ZJWRAb\JmhQkgQidOowv`jiM]\DkkWln]z}jǰĩzyycxzf{uvsnnnmnnxxxkmlUXXAFF9?>$+)(.-&,*##"# #$ !#    #!''*102756;DDF??A=>@99=)*0-/502928:/876D96J8!6#-B.8L9;J?BJFBIFBKF?KB:H>=KA>NB@MDHOKJPNW[Ycdecegkln|}}\]`fgksttijmUW]PSXWZ]cgg¾8;D    #1966>=CNHBKERVYY[`[]b\]cY\`HIOPSV037         ,- '(    )-,quvٳŶϾ wĹ{wW{]ZDX\IXZJaiX\f\-3@"-K1;L?FMJ69>"$/  EH;nrc[X>[W8oqYh|d3HA1E>1D;->84E>8J@CVHE[I0?:                                                            (,/1<9#?=#54%*+/23=;MEJCME!KB$IA#ND SG!SE"WK']MaR!hY-m_5k^5eZ0UQ2k`9rhBsjDjb@c]>gdFWP-RI'MG#PF!RI+XQ7a^GaZ>c[8aT#\OMEYM]O^NYMaQ`NfRhQoYtd)g[ tc$wb%pZjX @86-lSiQfPcLaN`O`P%[O'`U/_S,cQ%aO$hV*lX*gT&WGTE QD!TG$e]@_U8^T8VM1TL0_W>aYCyviprjWTB\Q7SH.MF1KH8FB+GE5/3)  AFA:=6   !!                                          1@0BO@FPEdm^FVE$6$%#'+&$$+4A8""            %!*3-( &%*(,,/$-1)(0#"2!"1!%6$4E4+B-5I6IUELYJT^Tgkg{|swuhnk{}ktnjxmq|uu~yhsnQ[Y(-7 033A<52?46B84A6DMFJQK:@<7;:59:167'         (-/889B*,7Y[]OQT<=BGIN`bfy{z[a^*210:5=GABIF '5ȩnnuMNY"#1          &)(dgiҺ͌{rueqxcUnRMkJq|bjzr`vo\}h{tZk`ARF-A: YT;UN8XR;YTAmtfJTN B!6Q6WmUP^O:N8F@IBLDJDICVK!WM!LEEBJE!FCA???B@SJWMXM#[O&YO&`T%dV&^O"[K!SDVH"gT!jWhV"gU'fU*gV%`P]Q$XM%XP*WP)QKMGQHOHRI!VL"WL WM WN YNWMPHTGSGTHVHaNfQjRlReOkRgP^KjUhRmSlUdR hR ]JeNbLdNeO!eN"eN!bP#jRdLcJ^G^HYG[G!OA!F> F>!H@#?9:8!==)PO=ZZItyzwXYO17(?@2>?/@<%<5A8H=OC"PE#K@ J@G>LA!QF&OD)#!+' )'#-,#/- 3/62:5 40//98(,+"#         (**BB:20%1-!2-4.62%*("       " !<=S8?N<*7)   "%*"2%(%             $!! !"**202121527587"57'?A8",($#&-8,8B8JRKKRNorp{}{z{Y[a(,,;LLX' #PPHQK9QL8`\GkgQicKbZ@haIgaJieNkkUklWqr^np[ddOggPps\dcIrvYnoUrsYd^GliPrrYrrZ|zdhqnPljNaaHX[CW]LT\SFRN:G?CMF[`^imjfkgX`Z[a\aeabfb^b_PWRBSC2L3* !" !(,2.09 "/-& -08dfhegj@BINOVUW[JQNbferst&/.3<87A<@FDBCIMKPTRRVUGPJ0?33;7LQPehhuuuwwx_`d*,4gikĮ{}14=!),;AAiklצqqpUVVXYX~}Ʈlpr07B܁<>K                  !&%Y_^»y`c[z{rvvjntcX^EQ[@YhMJT?R`G`kY[aRYYHeaMbaKafSjydxqUiP'!  #&!5@60@2:HMJ-78'12#-/              ))$$ "# !                                 )(73956363;7D>H@JDKFHBF@A;A;D<NG%RG"SDTG HBA@GBKC"QH'SI"fW%jX$iX gV!dU#cX b[c[#`U ^SmZ#hVWLHCXMWK]N]P^OXKYOTMOIHEPISJOGKDOHRIOGTLIDTHVHVIUGWJ]LZKUFZGVDdJcHjT"hV'l\+hY%[NbR"nZ$rZ%nV \IcMgS&fOeMcK]EgLcH]GWE \I$UG$OD&TI)TI*OE'LH368',0(9B.vypgjaeh[UUFCB187"=8!B;D=F=NB PCK@J>I<D;E;J>I>H>D<62 ''4110@:?9@:@9?7=5=6<6=7;5;4732/''&&                !/,<8)>9,71!;6&3.,*('('('** $"$!!& $      " ) "      "%%$&!!$""    %$&//293292.72,") *,134"88&<:'=;%<:%@=+A?0/3.%$!*, +'#-'5:4GJFGNK_ddz~}Y^aOTV|{~JMT"  /eflgim"#1  >@?OM=C:$F=%YS;idLfaId_Id^Jc^HeeMeeOhgQa^I][FdcNggP_]G]ZDidImjPnnWln]|}fy}py~vejfRXXFMNIPO_gasxl{y}vyxQXRfjf~hmlU\\LVR?MD1D52D50D32E5XhY[j\{||vwxTVXDIIoqrtvw{}~RZV 0$+=.4C7>ECJNLUXVVZWUXUsutsutijlFHL8:=58G?H>F?G?LBLCMDKAL@QAVFTGXJNFRHYLVKWOUO [R!TNRJRKQIVP]R!VO"_U ]R![PYOVOSMJDIBVOZSUPbXWL]R ]O^PWP_U#[O!YM!RH@=D>LCJCH@IAKBRHVJXK]N"YK!KBWH"QD#SD!MA\J"]HdMfP!hU$fS$WK!PF cL`I[F\F`HWCSCVD UE"YH$\K&ZK'UJ([M+ZL*H>"*)G?#FB'E>#D>"D=#E<#G=@8B:C<C=<;>?"KC ND MBODQFKAE>B<;8:7<8@<C?+-&)+*((((#('*-.11 :4 =5 ?7A7C8D:A8?6<5<520)( ##   %%"       +(**()&))++,'+%)#(%)&) & $ & # " " !                   " #      "&"%*# !&"$31A2>K=DQBBQ?AP=IVDT\SU]T>K>:E;3@58D:2@5.924=:5?=>GF'13%*/6<"*.%%!*(!  "',""   ST]hinJLSOQV"$/%  DD?MH9F=(@7 A8 B8G=%XS>[UAXP)+A,5H7@OCAPDCNGANCKYKbicwwxkllhhirts{|{xZ[^!.(+7prtxzx}~{[^cVX]nqsHJQ   !))"+-%04(^ccûrssBEE.02IIIrme~|~xz|rv}n|qźabU.23 ;;7OQKVYYAFJ-2;"'3%)37;Eeiry}cgnHNS &-              '*%'*(13+#9<9̽|{|xx^VK3QF.93:9!YS8xwb~z]u^D]E+J.+I.2Q63L7.A3$7)8D= '   31 JH8wypkl^po_w}\p^-I6G^LYj\EWK=ND(33          !KF+42+*,*+*&(&(((''         #$          !''''    62>9?9@8?8A9B:C<F?G@F>B;3. LAVJ[LWHUI\K\M[N[OUN[S]U!_X$[S$aW"POUQPMQOXSZTVPFGCEYTLLCDHENMHGSLdYVLXNbV"cV!^ReZ!aX&ULLHFCGAICG@IBQHOH ME!SI"TI$D<JA"PF#SJ$RI"OF ODRDPBUERCNAOAP@O?J;M<U?YCSCQD!RF"OC"QF%PF$GA!74538643:8:7>9=8?:?:A:@9@8D;H?KAC=C>><C?GALCLDRFSGPFRHODK@I?F?:81072:4:4;4:5<65200.0 /0 94:3<4;4;493B8C9C9B8?6;4=683:5515162<7D<<5;5;4;55331/1-.84<835=;HA-2*0)/%, $+ %, %+ ") # # " # #)%*#  " %*%%1,)                 %)8736*1'1"(2!+7%2?*>J5GR=[cUV_ODU95J+,@('7(,/%+ -"("(")!!   (-.$  !# %%GB.A8 C9!@8B9!A8 ?7D;"ND-QG1XO9UO8VO7]WB`\EgfPtway{fq,69.4;vxyor`VS<`_GilTorUnnQvv\v̿ýNRT{|{nomfokL\NP[QORQOSRAIE#3&2-& .71SXT~zOQU129*-5[]`LPS   ,02KNNPSS>BF&-8ǹqrqklkxzfjhVure{xl½%"(/(   $jig{ytNJhmqx{}suzCFK        ./)21'*)''DA2LJNL3f^DqhOwmKhcDgoXu~l_m^3J8/!<'!C&>$"C'!E%0/&       22MK6^]Lvuj~VcS"8-!5,1D8RaVU`YX_]cfg\`a[^`KMS8:D            #8381925/0.3/622.4/1/4050,*#        #&65   ""!     96B=<:>:C<D;B:A;D>D@GANFLEIBKB\LdQaR cTdVaT_T^T`VZQVNOFPIPKPIUNQMSOIJIIRR^Vh_[XLL?C=@EDKIHFJGJDKDNFXM!VO"\T$WM^W\U^SQGMDNGTK#TJ$KBB<HAGAGAG@D=H@ C= B< B=F>@:<8=9>:C;B;A:C;B;MAJ@F>?;66-0%+' 55;8=:A=C>C=C=H?J@E=KALBKBMCK@LDF?F=J@ G?K@MANCOCLASGTDRBVDVDUEN?E;>8:7;7@7A9@9=5<5:5<79571:36162<5@8>6503/71@8!F=!D;B9F:H>J@E=A9<7=7I>!OC'PB'QB(PD)OC(QE'SG&QG'PG%FA!::03%,)/)/-2/1%'!$"&#'#'#'$                                 !  %',,..'*$*/055225476:9=#RD'UG)ZO1WL/QF)`X>b[Btt\htk*;2 #',IMN}pzzuweWR;fcJqpW|~e{|dmĩuyubcbaaa```]^^RUS6>9!.9C;\]\jjjpqqxxwooo|lmnLMR]]`xyv_ccKMN+.1 %'-Y[[Z[\OPP68:27;V[`HINJLNPSVY\\MRMOWP\d]u}npt7:B'?B>ch_JNHx}HNVfkqոdhk$*4           "$#$GE7GE7efZxwoZZV̳vzk[eHM^=SkOatY|m{kp_,"$ +1(@,1    ('RN:tqe|5J9'916E7:3$%        "$@>!+,   $'*,,/=7=9<6=7<732       $& ;;B>NHULOFSGL@NASDVF"ZJ ^N]N]O]P`SaSbW]UZSROPLRNUPTPUS]YPMRRNPOMJHTRSQTPQO?><<@?ECICF@C?GCRKKFVLSHSK#TL$NDH@F@D=?9:785=9A;C<C950.-! %5453D=D>D>E>D=>:99,1$+"* -2.3-3)1+3-4163738<<==FAJCNDODNCQDQDOBPDSDPDPDPBQCQCQDMAMBI?I>I?I>MBQEREPEMCC>67@;E=E9?6?7A8?6B8C:E=A:A:;6=8=7?8=5;5;4@7@9A9D=GA$I?MD PH MELDMCND"MC!JB HA LC#PF%XJ(XK+UJ,XP1UM.TJ*VJ'PG&IE&@A$;:77 /.#=9<873,+%&$!) #)%                      !# !#%+-23:6;7:7 :89855021122667766873387#76"33/2*,"'%*#($(*+///0)-(-*.&+ '#               %(1./;   77B::F$$2$ #  .EEP33@/ !66A,,9,  $,.QSIPM=NJ7XQ8kdLqnZRJ-KB%PG'UK+ZU4XL,ZL.jaDxsXxs\mgNliSzzgOaP%  $'Y\XzxkloTgeFyx\zszƱ˻ikn+-4PSTqsrijibbb^__^^^VWV9<ME7AA^bc|oss_ecOUT03;                 ))=8=6>7?692713..+3.:3>6>6 >63/       #/.@:12  '+76:9/1+-!+/(><KG!EC@@:<:;978573+)   B< MBODQFSEUCTBG;I?I@UJgX hZ!`U[P_TUKUMTNTNWMQFB>MJQMFFGCEFABCBJFLHFDDC@A9;;:><C@@?EADBFCHCKFMF!JBB?=:4343<8@:C<B;@9E=>8;5<7>7;866:797987889;97815*1#,)!*(.+1(2 ,6 3;??:>6<6;::8@?E@KCNEPE OEH@B=B=88A<C;?8<8;9<9C>LEG?I?C;@: ?9 @8A9E;E=C;C<B<B;C<E=K?LBJBLDNDPFMEJENJJHCE?D=BDKMOONRO!ZS)\P)YL)XM+UL-PG(KD'9576<:E>OH*ID+20                  ()%*(- *- 12;:<;<;8968 99 B>?<=;889976989934887778'(+ " *,8564334322025464'*!           '+3 )    ""  .5:3;>8(QG-^T4eZ8SI.a[DzxdrxSZV   =A=^_PYXIYT=QM9[VBxwj~~m|}~{}{kkkfff___WWWSSSRRRNNNQQQYYYXXYWXX[[[]]]^^^^^^WWYYZ\~ynoo0259:FTXYz}nZYEWTAljVhkcY[Ropg¿ĒW]entxfkq>DK '&"&    &'')*))**4959(F@-PK>@<,A>.FF:?A>"(+234HJIglmͲҸywv{nʼӴ|tfh\?l\CYI1XK0SG,710/#+8)+90"! "             !     69@A"<<"MJ5^\Krpc}zeuqSd^4.5""P[WeliORW                  ''D<#G=$H>!H? J?#G99;:=;::<<A@CBKGGEGGHEA@A?GCFAEAFC><:9664465=954:696:7:6:7?9;99823592818(4%2$0&1&1(2)1'/#-%.!,"+ - %1 ,5194; 6=9>D?TO(hb=og@pgBc[;plNtsRkfEhb@d\;?:A;A>GGA<:796 :797=8>9:8:989<:;9:6>7D:F<I>E@C@B=@>=>5<;@@BBBCBIFGGEJJKHKCIOQfZ+eX2`V5[Q3RG(ND%IB$>@$NJ(^S,i]:WL,>8 &&%       "63,."              %'/197?<><9:6947478;89::/1+.8:9;04.203).,0/2'/2$-/<;?<=:8798778745-/', $      #/*5B99G<2$"4( 2(( +#) '$      !#$*)'0 #7)3!1 - 0%,#&##&#        !   #)7=A%-4$"$!"   "" " & - ' " $/!)B.9O>JYMQZTGPK8F>5I<1J8)D0">)-)0$C)9<. ! % kmo~~nnnaj^z~sw|my}mmmnnnlllddd^^^\\\^^^^^^QQQHHHFFFHHHFFF?@B67:78<44:@AE|}|stu459014335??@GHILMNHIKIJQPPT`aaKLN%)&" <9>B?rrp¤gjaW[XIML_`Z~x[zqvy{/5:cigmss|yUZV!**'&    !"!!$)'$&&#'&9D;BIGFMKOTVBFKXZ\PQU?@H"#0+   ., 10%EC6>;2,+# #)*EJJs{xIJx{oruslrp]c`ohX\R9VJ.C9!PF'`W7ME):3QH5.0$HVMq|y!-,              $),47&-2%*3     !!,.&HJ;HJLI!9C" " (>'9Z;w{z~gmnRX[CHN      *4,' ( !     *,67<8D?!KD%TL/[U8WO0YK+QC%NB&ME0KC/B;'B;(&'    #%879<=;>9>9@;=70/ ')!()()%(46">?$GI,LK%BE =A9>9=6;39;@>C9=>@5788@>;944;9?<<:3311 >6_R_SXG\KZO!UJRESFRITLVMQHTKSKPIJEECB?::?<79B?@>CAB@@<<:?=7777?>DCOJJEB>:9==89689:66233485;897;;.1,2.02121 +0 .2 %- ,5,5)6$2 "/ *3,5-508-5*3&0&2(6 ,7/72:)6,8:ALJ$XT/jdAytOupMtpLkeA`Y5XN-WN(VJ(SF%UF#UC XF XE UE"SB"O?"N>!M@"RE%gR&nV'[LNF@?:=9<6;8;?;XO,E>"D<L@!MB#ME%HC#@=69272869;:97:7=976;7>8>88455.2027484B:KB!PH&HB"FA"53.3,4,5+72:A?PG!\R,j`7ti@xj?wm@cdT$gZ.wrFVQ$NN_U*cT-aR/aU1ZP-QI%NQ2nkgOPF!bV1LF+D?"NK7CMB3E29I9?K?0<1.   00//..0/$&! %$"#!    ! " $&$&),2345787857579;8:588;69/4/6,3,2+2.4150569:;=<;;;:::8:25573737.2&, " &## & $      ! '+!-"-!-*##&*/3#7#9463/,*(''&$ #-(<,+?/(<*7H98F<:BA37=!#. )(FE=ONHSSNGHAVWS^`a&)  " "       !        #,:*(=.4 (# #$(%!*"-"1". $6(#8** $$$"%'*&@+/F2IYJcdc>C>C>CHC.4/$*%!!#         ??:wvnZ[J.5&*4+"            "'(%$#&$,(@<.PK:mk_nmbuthwweoZ\^iiitttwwwvvvooonnniii^^^[[[[[[SSSDDD999677234//1#$)$*+/,-1/14+,2#"%&)#$(-/9|~w192lolʐmmmnonVWVOPPGIHEFFPPQbb`WXUfgdpufhm_W]UDJGBD%=*$ !"',)5?7U`WhoiOQTSVY]`clnnjnmkom`cc8;B        %$ ehibfj:AAZ^`elnlqtלčfji-31( *(+&'$ 0)80=4F>!<5"sognnj!(%                         %/0[a`~nrq47?      15'AD>HJBMO>DE2NK7TP:a\J|xk}zk^\JHH'QW%:V,< "?,A`EzMWT2L9?#/              &#        ORCID!LBJ??:?<B>HA KD$MC NF&QF$TF&TD"TG%UJ*TH)WM0LE.=9%'*   @AKFIAF?JC%MF%>=#57$23 1277!11./89#:;%45"..03;AFK#>C !)06SFLEHDLGLFHBHCNGOFD@B@>>BA;<::99<<<;;:::8988654375:66555:9::<<6959593828(1%0(2(3 070717+3 ,5.5 ,4 (2 &. !0 !/ - - #1)4*5(4$2 0 "1 '7 /=:A9?4=KC ECWO)cR/^M(dS/dW0^O(\K!ZHpa5dU+THTM\N(k\2oa:\Q,MG#05ssYwsYqfDZT7F?HB#JH3]_LeicDNB'9'%;%,@,2C1,<-!()./-/-.113274968697,.',!)% %%' ' '$$  # %*),,.(*,/,/./-/149::<:;9:9;477927/4482727/6699<7<278<:=5926/4+1/4/4)026+1,2*1(.#)"(!'!' %!' %"'"%     ( .#(4'0;+1<)5@,:B1=E:=F>:E73>)0<"0=!+8-;!.>%-;!$2-)'&&" .1D15G5;M;:K:/>2 #1%8>348,/3*'.%'.'(2))5,'!%       $%!&' $*     $"""&(/ *4)*4))2'-5),2$"+#'5G:GVKjrkxzyuwv~~SZT.;/&2')3*) #                                     CD@wvppneRM>=5$LC/tqZ|zf|{n~|ovxŻȺ¶w{||zzzgghuuuuuummmccc```___\\\TTTOOOJJJ>?@234*+/&013779789013*+.-.1==?<==899%%(+-3{}~tuxnzYZYyy{z{zeeehihggg`a`QSRfghuutjndzy|lkjY}{xlJH6@;%HC)B>#B>$C?%=:#@=#:9#??.58'X[Qnpjuwpeha>A8CD8ED653&1.84$?:+UPCb_Vgf_yzt}~ƽή`ig`gjxs3H<5M-         36+02@<C@E@D@A>D@D@C@D@HAG?OB$OC)RG)PG&J@"C;!95=8:5/.!%   D>NEHBJFHGHG FH#ADMLFH/606AFDG">C;<#*.287=386;5:5:37::?A=@@D:>@ADG'/   ?=IDKELEHBCBHDEAJFGAFAEACAB@DAKGLGDA@??@A>B??>789999987656764477753505361405,4+3)1)1)2+4+4,6,4,5+4(4 ,7(2 &1 '/ $- * , - , * - 0 %4&4%3 %3 0: J="PD/WK1XK/\P6ZO0XK,TG(UG#\L&RDPBNAMBJAHDFDBE9=2:7</7.64;1:/:/8286<29/7/7074705.4.6.7/617.4,2.4.3.3+1)1/5/4*3(2+4,518?=C=;==@UK&]L&TBTDUF!UF"PDKAIAA=C>HGk`2f]1OJ%KF#TM+9=4:UR-b\>~j{xeOH-;7"?;%:7=<$<<0%)'/ +/088HDA@,1)-+,;6?9E@!@=<<67-1)."(%&#%% %'(13.1,/+.*/(--1/236<=HFDA<<:<485816274848167:49483705064849*1%/06-4)0)/(0$,,3(0+1%-(/%,$*$+#)%+%+%+")&*$'&)"13#35!57!?= DAEBC@LC LC E?436411./,-//.0%*#        2*1# 0=5&1+ *%'$!)&%#!                  !# ! !"   !!"!  !   #!$ #"$ $"&" # !$'+$& .71KQM8A;,5/:A=3DE7RTHKNA^bRko]otbmqgce^[^V^aVPSLOVNhnd{n}}~~~vwxwwwcccRRRHIIBCCDDDFFFCCCBBCMOSPRX%(.+,.779668::;;<LI9NK9UQ?LH5^\L^^QLNB9;3=@<\_XX[SstrJKD792PQJlld\\QLH;RPGWULLK?cdX{}u{~sqtcszഺendlugVaW?O@SdQkrk365$'%')'/3/9?:AJBOWQSYUbkd`fd23>       # *%daW}uutCEE).5$+2&+++0+jmdھcd[$%$pqnŵ{[YJ+-   %"-'/(2*KC5TWW             " '+ (7<$$*  6<$.3# '4816$!%IL-4#                 ,C1ESKS[V:I>+      /4% 12DB@?@???CBB@GCME OE!MC!M@ J> H;A7:5;4;25120-.  20IG9>?CDHBF6<:=:>$@E(?B$?C%EG&CC"CC!=>>@AC @B6;4;6;:=7:-6#0"- & # EDHENK#YQ+VO'LI >A9=9;;=BDBBAA=>?==;6789894606072586:7;9<:798:>=<=D@DD=C3;:A@D8=18,5,50716.5-4+1 )3&2 (2 +3 38'5 $3 #2 / - . . !3 '7 *95=5==AAC>BDE#\U:WK,SH%SJ(TM+VO/QK*NG#HBEAB?D@GAFALGSL#RJ$ND(QG)PF)TG)XK1YI/XJ0]N1h\<\L%YG WDTCM?J=H>I@MEJDGC@B8>,90=A@GBF@B<D:B<@;?<4;2:4<+6-6/6,5+4(5,7LL)WS5c]@uoXPL754#;976B@)D@+A="B=62,+B<VLGBA@:;7916/57;@BCCFA;;36-2(.#*&-%+#)#)!&$ !( 17189:7804-3277:;<AABC?@<=;<9;584805075:5:6;495937-3154969275:2727*1/718-6.5)0-3/3A@?@9=29(1$.!*#+&-%,(.)--0-0-0,.*,*.(+(,)-34:978.2/202/1+.%*',$( $ "& #'          !"!#    !!0LLU88D%%4$BBNPPZ44A+  )3>'4+$!  01<+-8, %%6Z^b;KBnqoQWTE@CJEEKG@HB6@9/$/&6B;9F="0(.@5&7.-())'  &&        *)!#         !            # $).27049#*%($*4$+3$/53@CqzlwcwwPywSakpqqZ\]FHI<<>)*-$%).05)*1./5 ( %*+.9::BBB??@==>@@@AAA::;99:EEE~~mxyhv}}~uefZkmbooc_a`296;A8-:7,;9/IH;]]PuumoohaaXVVKce`FIE6;;#$360=?5IKAVVLcc[qrm~~{|{wqpkmmcnnc{|s`bRr~vpylDZΨz}uFJA'/'.#*40" ! # $!%+%4?3BLC49<       0/(DC<@?4PL;írxvOUOsxoʾ@FGWYQegbTVPEGC !)-,44!# %  /24              ',".4& (-%,&0"-*  *)117% & &.-4& " % /659$* 77>>%,0(*!&                        !%               #/+PYUW_[&7,     ,.#?=A>>>;<48:<<>;=<<?>@=C:=5>5?6=572-,*,33!   8:IIEH?E?D6?.7,306;>>B=>9;>< ?@AB8>&3&1,5"/, ',( !-8CDNLTP$NL#KK%;?4836078@?A<<>=9939-5.6*8$5 *80:7<8:?<;;A;A=I@J? KA#NC%TE%QF&QG&\S1aU2RD&JB$EAEB>ACD?ABB5<?@@AAC;@A@BAKDTK+ZU4XV.WV'SR'LG'LI-NI+KD$MC"PH&QH%TH"VH"RDJ>H?NATGNCI@DA=A9B)9 +8+7+51:19)5)6&3&3'4'4(4,7+5-7-6+4,5.6,6*5,606.506/607.608162827384:7;7:7:3:493;7998?;;7=9?;A>7;+8+7*0* 1,74;5;6>2;@C BB NK'UP3IG4MK?433286;8!A=TKQGMFJC ODFA==37,4*4/80728>=?=.4798;:<==::05*0&, $, $0 &4 (5 ,5 -7 1: 28 24 75F@ F@E??;@>A?=?=@=@5:6=9>4:39184;2:08398=38270516*0.4/5-4*2$-",&/<>DDIGFF?C@DAD9@4<5;1817/4-3*1-31705.337-3)0%.&-*0.215485658/4*1,1*.)-)-&*"' !& #  !  "'#.%1(#       78CmqoV`[3D<7B@:?E%  9.*I?1SK3VN2WI)E<<.@H-/:-LLX¯agcDMI2;7$.,       &*(,-1366917;<;<9=1906+1.2.1+..0-//114.2+/"($)*-"'+-%(*+21*,'*)+$(%(&)'*,/02/156625362A9#E;$G;#H<#;4605/209562--(,'*!&%((,+,#( ''& &/)3:48<4 ($+37+HH@UVOVYUQWRIOJ;F>/>3!0%& # " #)#                           $'*0143"     ),*!#        27;KNSgkl}|}h~eklLtxXjiDft~quwa~iqq\pqXnqZjo\ir]or`z{lpr^~~}{}~~~~~]^bbdg8;B   ,,-EEECCC:::??@||xuy~yytkldqsnproZ_\OVP^c^gjhrsrttt{{{PQQ9::799:;;67:%%/MMT44?dekzz{tttjlngifY[Xkjfxyw|}|qroUWR=?:GIB==575.20*&'###%%FGAef`[]WTWQZ[QxyrzVXZ  QPEfe]PMBed\HE:IG;DA584'72'GD9jf_Ϛqxh~vsylü̞jpk2=87;:mjcebXEG7*6)$"%" ! A>/}zvVRMJGCYYWIKKED;QPC滽uz}z~uyxkroٰosv]bfNTX8>B8>B7=@$%                 !  &+"DI<)/ ',%* #,+1!* +339% CD,LM4`_MppaRT=-4&/"/ , * *'$    &%                       48!?A'AC(58##                :8><;<9:;>4:6;@@@=9:9;.2(.$(0-502/*,*.+1     ABGGDFEH;C3<,5199>9=;?;?79440101004323232666A=DBFG$GH 3<!8 )7'53:1 - %%2,7-6095=5<4;8>@A@C@F=G?!F?!K@#QC(KB%OC(WH*WI)SD&PA$SE'TF'VH&TF&RD%MD$MD#JA#D?A=></7:?MF%LG%@@LCOC?>IBOEODPD!\P)hcDcZ7SH'[O._T3k`"I@ QK&ZY.TV+U\&GMAC@?AB==DAQJ&XO0daKc_DNG%TG UJ$QM+RL)SH%QBP@SE ]T5aY>cX>liPVP-PHFBHEHDE?:<2:.91=1?4F /A(9+9+8*4%4&4(5(5+6*5*5+7.8.8,4)3*4)4-6/7,5+5+5+7094;481726261668::;:69586;6;.5;;D@<<A>;:28*6)5&1 .5C8;>>7<-86>4;/9 /:+6 392; ;?NJ!TM VKWKPCPFKEHCB@BA:@7;=?8<9=6=196;8=3:4;,5)1'1)4 ,!,+"-,46;?BGHHHHIDFFHHJMMNOFJ?F?D/70908/7(1*2084:26171726.3,2.3,2)0!)&- 08)3!)")&*&(&(),)-%,%.'  #(*)*2%1''71R[TglgjnklqmlrmipkdjfS\UITM1@7+:0!1$ / /=1+:0,$($$$ ,"&8'0!            ('+432;;LSQKSPtyvł̻T[V;E@           )-978:8;9>;A9@?GFJCIAJ@JBIGHEFEFDEAABBDGCHDGCE@C<@??=>;<3576234422120223/246250314<=!/3/1=:KE&ME&OD'KC&B?";9<8LG'OH$RH$B??>=>A@B@A?MKMKHBJBC>?>@=??=9;784=8@8<3:5@@2BF=JRI@KA,                 ')0,2-3-448%(    "!95'   {}wsu]z{dvh~xsub]cUy}kvyx{dgkQqvZptYkiMTR:KI.<95444<9><#RS;EF/\^IgjYilZchXpug~tz~ouweteiXnshoqivwnij^cg]prny{zgkoknrz{|ghk   **/bcdhhg__]ppo~~~rrrbbbrrr}zz{tzy{pedZytticcXmoefjcDKD=D>\a\JSL9E9?L?MXMvwv{{|jjjGHI::<@AA===VXWӋ12689;ABB;<=KKLXYY^_bADIDHNPSXHJO69?24;$(1!'15;674#$ '(%!"! !$*$)/:?EbecAGF48<,18  "#.&/2+-0,-,%EB7TSIKI=@=152'84(<8,ID9_\Rٿ¼ǥmnf><3>:-97* !"($-# &%23/YXQnmf}|yŲNOM/20  02)!&$&+,״SSN041!"$*(      (&! $)# !"4:)#25BB+5: +' !+ '/%.6;NP9"/ , )327AD(:?,5(3$0$/&/%1 #0 %/ "* % #                                      !'05!EG-FH/,0               @<A===:=8;49.52698>::813*/',).&+,,/0/5-529    16EIKMDH=@04280:8?8?8>9>5923220.304051454:47>=A?DC DCFC>?:=:>5>=B7?&7!7 3 + $ /*73<2<)3%4$3)7*5+7.9.9(7$2$'"1)4:<IG*RM6]XCVT>EE)SR9ML2PN4YXCZWDYS?h_LyalbH\P2YM-XK(OD$F?!E? A>A?===<KA$JB#==4:3;8<;>DAF@E>QG*XI(YJ#cT._Q)YM&XL%VK&XM'bU1qgBi`>XO0\T3SJ+LB%F<?<GECC?C:;9==ICMB&NE)QL+^X;ZR3XL(XJ"^S-\T1UM)VL'YO,e`@heJgdLc\ClnVVT4IF"A?<>:>9<;<3;&5%5#4 ';-A):&6'4,6(5'4(3)4(3)4+5(1+40;08/8,5+3.3/4.4(4 %4'6)7/9.8.6/6/6-618185827.617,7(93:7<:>69'5!4-%4-94ASY Z]gf)ge3XX'EI;@9:*+=<-a`ZHG;@ :>?>@=A=IBHE(<=6:39)23:4=08;<C?ADFFVM$SINFOL&OI"SL#g]4f[-siGur_ogJg_>h^>?:<8:28-6,6*5#/&1$1, + ( ,5DDGFEEPL!OJ LJJISO!_Y&RROQLLLKKKGICF?D<@=@=@:>7;9=5;0809/6+33:.6/6,45;*1+3(1%/%/&/(1(3$.+228/3$(+0 ',"##   !#-2"!3%"5&.+&()  -+@9"G?&>:$+,  D:A8?8 >:&B>'EA"C@D@01 $;:#(,),%(&+$)$(!( !    -,/;:T^\ajg2;;knrmro6:?           269>5;8=CGHKGKFIJNMPLNKPHRHRNPNNONOOPMPNMPNSLPIMFKCJJN!JM IJFFCDAB:<;=>@=??@A?>=CAIE ;;?<NG$QI%KF"LF!QK$SJ%PG$G@ GB"MJPMHG IG MH NKNKQLDALJ%TT6PO5HC(HD'?=<==<<::::;<<<:;8:9888714,2%+%$%!                $ $ & * * "-#/$1"1 $2 (3*37=HG%)+  "'$%'&!   ""-+1+3-D=*IB.VP;VQCLLD$'(59=svm}zz~im^ccSWU>WV?kmYcePNK1?;"?;!;8 8678!DE.ddMcgUegQehSqub|~m~p~rikWQP=CA4A@2FE8X\S]a`jnpOU[5'  EFA"$+- SWHѤytsLIE52.  %;,      $- )19(08>4DK>CI9QTA07SVCDE.PO<373535-3"- !+ &.")%-*1$. * +.#1 2827)2!- !+ ", ", "+ % !   (&! " #*0(/                                      '+&)66A?GF%BA!=< 8756/2-0(.!'           "./&)03252726-/22<8:52/*,/30408(0*31;/;1;  -1NPJMAG7@5;5:7=5;4:28163453224385:6<998:977;9B>E@GBEB<:99<=>A;A:@;@:@:@:A!+83 ') . #2 - #0 ) 0 &7"5'6-9(4 -*5<TQ:YZCKQ3CK+/<+ &29=(;C'JM7TR=HI3ZSAsm\vq^d]J`XCVM7KE-VM6LG.=="A>#TL6^[FZR>PH1E? ;9B>$H@%8;;>DBNG*]V;\O,YI!aR,]P(SF!SF"SF!RC_Q+wmG`bX5SI+LE&IB#IC$8746261456597;:=C?LA#GAHBJBXJ']N'_P+ZM&SK!RJ"XR,`]=?>@;=3;,8.8+8-:2;.9+60:/8+9*7)7+71;1<-7(5,<0=4@4>5</6+3/6-70707+7*6-5 *4 *4 ,5.607493839,8(8*=3=9>3<)76 5. -;1<*:.=5C=GGL IL!AC:;2178"%$&-/88%TTHEA.;7$E>IBCAECCB=< := 4: 3<?BGEJE;=,5)5 )6+6,8'4.:18/7+58<OG SJ#YL"WK#VH aT.}rNl[3qcBxjEk]8l`=mb?[O%QGNFcW._Q%^R$PISL UL"NGQFRHOI LFIDD?<=4;,8)5+6,8+7)5)4'1".* %14;9?4>5>9A@CML`Y)bY)XS%KH"HE >?3:5<09+4)3!+!,'0)2-6/7073;-4/5,408+3,2)1%/",(0+3(2(2)4)6",!(%       ! & ' !* +-%)&- (/ !)(''''$      " "% !#    $A;LDICGD$LI(EA(E@"NIPMOIHDNINLOLOLOM@@34-0+../0/**!#  ##% +.6AEIX]^fkilpox|zx}ypur8#;<&OM?URAQP><;"RP=\\MedW?>,;9&76 ;9"87#75#54 443363 96<: <;=<::7:7914%             ! "  ! ) , ,!.&3(7&6%2$0)7+70838583633/0'*#$)+')''!#""!1.300-1-3-5.:1 H=)hcPwvhxxkSN@CA9894&'$#%%    6;:TWQhkaqsj{}sy|soqgjmafh]svjsqqWZU8d`DhgNdcKbbMnpZj}~dcfMZ_K~pytfjRbdPx}for[UXBHG076 86;8$DA+GC-#!!af\ZaPEO@dl\dmZKR@LO?QRANL:LL=STDWXHcfdVZXrtt\`d( #&/%!!%jkljmp`ad~xxwjjjjjjZZZrrpz{xdfez|vJTGLSGxyqruntvr|qrjde[bd\nqly{nrt"$+@ABSSUnno㳴mnmjkjmmm~~~nprDGK`bgxxs_\Qpng}}xyyvstrMPP048GJO&,3     %-4^cd3;@!')39`c^;?4#+*"  -+ 2/!41#<8(GA2B=.TM?ni[wtghfUVQ?^ZJjgWx~~pvtfʪbec`_[c`WTQGLLE?B?!'/!'0;AI-1</1/QSMklg\^\MPR$)(   13$39+ͩvwy^\Z+,)  (8   "*'  & ! *( ,-7!JQ@:A3EJ7QS@bbTJJ5;=#043758(/'/'."+ "- &/'/$. %/ , - 0 0 %1 )1'0+ ) & % !   " "''& ") %,!) '  !        58*A26;*"'       !#'.05%(+#            (+8;IJ&DE$II'SS*RO)><98587;>@>@:=68!%        '+76567847-2./1111002225.3%-'3,4.7     DH9::7;=?@@D@HBHBB?9:7:55 ::A=?8;8858/5,4*3)4 $3 &5 '5#31.& 1 2 %6+84= 5:8:&54"+1'0+# & ) &2=D(6?!?;986725055877=:A=HAC@FBQKWP!\S'ZP%PJ!IHJKIIGIKGCB==<=:<??=<>>=>@@7<<>??2;3;195;3<2;4=8=5<-8.7090:-7/8+4,5+6.7.83;295;8::=172928174818-6-6-6+4+5*5+6-6-708(9*=-?0</9!22 1 0!3%7):'9 .=2?:C;B6<25*-'(42"46IK5ghcTSFGE4GB#JDKCE@FAHD>@?B9?6=9@FE>@/8'5 !1 !1 "1 #/ .<*:'4+5173:<=GB!C@B=A<F>G>UK!d[5cU-^LYM"[Q*UN(RL"LBD;?=?@HEFFIHEBHBAA=?8>9=;<9:8=;?:=9=6<19195;%-"+/8#/ - -76>/9&0(3#0!/!/$.'1%.%.!+#,'/)0'/&.&,+/(0*2,5)3&0)0)2+5-6*2&0!,#-&1"* !$$  ! #   #,'/ ,0-1,1*1(1 ,1-234;97713.2.213.3,2)0*0*0*.+/*.&)        !NINBJD MHGBF@F@!LG KEMFMHPJPJNIDB7823,//.,-,.2/4041203166644458(IC1:7-93>ICdlgiokptq]d`NVQLQR'*"$        /6MQ LT!JR OT$QT%JP!LQ#SS&PP"LLPO#VRUSSRYWYXWYUVUSSPRPTS_\ZYRQQPUQONRQOPMOKOLPLTSVRTOSMSJONPQTTVRVMRNSTW TU!WU ZV RPPQHJNPMOHI GIIIHG#GJ$^`I_`K]^DZ]@jlXX\P<>'<>'JJ9`aWqro;;)ML=>=:;06$,  " ! " " $ $       " & )( ) - , + ,#.'3)6%2%1%0)4-5.404,1+0*.+.,-//3143/0+.,-0-4184D>$HD,D@(6392>6!C9#D9#K>'UJ4faQnlZhfZ\VDOH5KC0<4!81 51#$#      $*+#(-%(-      #trrYXY@@>*@=*@?-A@-HF2OO=JJ:CF3CH6GL:_dNhmZkoZfiWTT@B?*FE2JK8CB2RSE=@5"&   % $( %/33FKD]aSoq`swdrwfoscacQ[\Njkfzzv~yzzjlnEIO$#GIOZ\a*+ijntvxtttqqqpqqqqr___lml}tuqnofPREXXL\^Wmoluvp}{|uw{sbf\RVSZ]]x}|lllȦnto?ED@DFGKPgjpvzy~{}|}yzzMPT   %,6Y\asut09<  !"%/7#,.$$#$$ $(74&63%-- +*1.!72&>:/D@6F@4JD9]WLli_{ypa_P[XJ`_Opn_}q{{zmֶehl',1 !!#     EHBNPFMQG]cTͽقRUV.46   '              " ) - * - .!/7A(OVA[`MCH,4;9=#HI09>"/7*4#-$.* * !+ &. */&-%- %. %/ ". . + , "- , ' "      #  " + "-( % -) $ + ) % ! %* %-$,$+(/)1%.!)     &,,4.5/6.3+/$(            ! #%*/3-16#',36:'+/!'-.           !'8<>DDH?D:=@A?B7<7<5;187907-56:CA>;,/$*    +-11)++.'.*.+116::DCJINK:=/5+2-3      %          " ''-,1133566688=>@B@DCBA7:7;799:<;A?>>==<=8<9>5:-4&2 '2 )3)2*2&0* * $ + + #0*3/667B=G=!VN/EA35,2#1=F'^aMceSOU;5="4>(FN8NS>Y]K[]Iqscywyk{~nrucgiYmresxjw|{p]WFKA*G=#J?%L@&SH/^YBTL5MC+UL7`^JYP/RJJDJAE>IAF>E@G<C:B;?;E?B<97:8:8*2#/ %0'1)1+3-4.53<3B9J:J7H6C1A->/?1@0A=C7>:?;>9=9==>;?6=3;5=-;*:+:+809/8*6&7 +7*8,71535-4,4/5.5,6/92807.404/404-5/60707+6)5'4(5)5'4'4(3&4$3 &4 %5 %5#4#6&81:'30, 0 )7+8)9):-;7A1?1=/9*0+0,/'(;9.TTFvum`ZCe_BVM(VM&VKPGLEIDAAAE?CJGLGKF 7>*6)6%3!1$10 3 "3 -7/808-6'3 )4 *5 /9 <@OHHA?:?: OC^NcU(i^2bZ1TMOHJ@;<9=HLPP>F4<0:7>1<1;:;9;6:4;4;06,3)/(1$0$1!-%0&0 ,%/#/!/%1(5(6.9+8.,+ )')'%.%.'/$. *$*(-!)!+'&*%-"+!*", ++#.'2)4,6(3&0(3)3#*$#   "! " $" # $ &1+3*1/3.1.1+0)//265>;"B?"UQ1WR8NI+HE(?@JCKEJBKDTL[QVKRIMK&NJ3>8"?;86343183NF/D?#@;!;9;9666725 & ?>43#&""'$ ##+)&61:G@P[T9F="3'"0''' 1$* #    ;=(+0+0-2.528296?;DCLEM EL GN!NQ&KN!LN$NN$NPHNMP SP!XQXRWRYQYQUTVVSUXZXWWR]\]`\^TYSVPNSKXQVQROXTTVTV_Yc\XW]_hj-gl1cb"\_"WZ!]\"^W![X$_X"XU NNFFFFJHLH DC BBJI(KK.NO=lnc{~ynqiX[M^bUBG5EG4LL=Z\SMNBSSEKK>;&E@)B>$B>%B>"IF.HD+FC$88C@NL+NM-B@@?>><==@>C>BA?;>28+."&"   & %. ) $    " ) , , .0#0 /!0$0$- )"*(!*$0%-$*%+%+#("' &")#*#*,/+,,*500/74@; TO2_Y?phUng^@UJ,znOz]{cnbHXK.@9#_R4YP7"E=)@;(86&:8*65)B@0**BB2__MYYHZ\IDD413&'/&%,/-243142*,*$&!'':8.XXJLL=AB:"&*$&','6C@MYT #)2.5:DILcfhjnmuvwdfePTVbffHPS1;?rrga]MUP>ifZyssl~y||ccVeja578Y]\|}|svseifW[[mpruxuuwpX[W`ca{{zRUR!%      ")0'05'' %$# ("(4==ab\6:1""'%'#%$,'/*0+!D@8OKDVRKusndaZTPEMI<[XK~snbok^ظy~JUT8@B0<9 # %%9EBIUN6=@ !      $"1/ șz~UZ_/7;       $ % $   "*#1.:4A&FM5MS>W[J2;">D(CF,06+2*3,6/8/9&3. "0 - , + $-'.(.'.$,"* '$& #!" #     ! # & ' # ! "#!$ $ + ( 0. ((&(/ ,&6 '54?:C1:$-& &.$*$*$*$                    &'!            $$&0.:>+BL;ZcUjpctvt&"( '!)".&2#   &)&,.66>6>5<0<.;.92;4;2;2:5;5<4=6>6=4<;?9=:::;6<3 &  ),-0,/)-.304-216289>&TO8[YDefP^[BWQ2LD!HDB?D>NF KC ?;@>=;693807-4,2%.#- #- !.!. - -+-0 !4 &7 '8'8&9*80:5=/939/807372929292:49494:59482858372859285928-805*4&5,6/5-4/56>5=7A-5/5-4,5-5*3*4-6/7%3%4&4'3'2)5*6*8$2 #1 "1 $1"0/ 0 3 0 ./ 4 ':,9)5(7!5 %5&5 (5+6(3'3%0)20903#kki|edROH-G@D@"KEGA@@ABLINHSIODG?KB?; RK^P%[O&YO"ZS*EC@@;?6=?D4?/=1<-8099>=?;<4726-4&1&1)1&0%/"/#/".".&0*3%.$.#. .,-+ ,-"0,-+ - +!,!,#.(1&1%.!)$,&,!)!)'' % )!+)".*!,$/)4&1$.%+ )!** ) )&%%(!-( ) . !0"/$0)3(2&0+326.4.447DE,FD,A<"IC%SN-FB PL$JE)::9:46569:>??=?<>A,1!##$'*/279?BIIKKLHOEKBLDJDJBKGSL_T&aV+[R+^R$aU([T:[T8]R/i]5\T6PI+TI+PF'PE*VM6GB*:97689DB$SP5DA EE,>=!888767BM09E1  !,+" "$% 0%/&&      CC"GE%?>>?\]RMOE?@4CD7>>078*:;,==+;<%79??'IG0?? ;;45B?(KI4@<$@=&@>%A>"C>"?= 988957779:9:<;JFGDB@A?CA@>;?'rdBn]=dU7ylU{k~ntyDE;%' ,.*-,"+)&$'' 01*,/)  10'0-2/-+42"><)97"/.$$78/! +("      ',6#/  '    "*#' ,OT[quxsuvKMNacahkjEHN *     $-6:<>:\R;OD)e^H~{p||xxmlhZnjXmiUYYNIJKqsqtwkⳳqrsvwwwwxoppijkwzzUYV9>(-1(-+0:=16-1*.27#>M7%(.3/1/1,.*.-4280:0;,7-7-9/;3>0;4>$=:A:H?$XS-/$+,5'3$0&/)2'1"., + *, . $0%1#1 /#2 0#2%2*4%4!5%7+7,8093;6=9>9>=@>??>:<496;695848-6%4 '5%5#4 $5#5&4'2)3,5,53<)5'3(3&3&2&5(6(6,9*7&2'3'2%2'3'4(5)8"40 / -. - , (%/ 3 "7 &9(8+8.;0=3=.:*6'4%."+$-),-/#cca{|qJE.A= 76>< E@D?;<??A?C?&IE*G@$OI,KI&NH-LG*D@!DAEEFCDAKHTUKOABDC<@>AFEDCAB??MEOFPFUI%RH-UJ'QH*XM+aU.bT,^R2\M,YL*VJ+^S0cW2bX3d[6^T0\R8l`AnbFfZJGPHMCLHLGD GFML!NK$MG!NI KHJIKIHFMF%NI&PJ'RJ)RK-OH,LJ(GH%KF-WO2WR-XS3UN+^Y4^\1__5WV/^^>dfKhgU[ZIUVBIJ4``RPP=NM=CC.FD1YYGLL9BA+><&45867503478:5:*0.5;>6=;>C@AB?B>?<@??9::;9;8<1:$ & ) + !- '1(1-5,7"1!.,!/!/"0'0%0$.'0'0$-#-+",#*!( (('!'!#"##& ##"2/63<6F?&E=&^T=~xz[bwoQtiLdX7MC(TG,l];]P2D:"53.0E;%D:"=6<6B;!=995637453,,F?'F>(QI0XN1YK.IC.TVG:;2*+"&)'            !" '%@<-=>6"$#(*)+-/!!)(30B<*JC+HC/;:+$'$         (   ,&2hmpggayvjybc_KPRRW[OTZ* # "  !);=8e]Ji[@fW/?2 #/%.$/!+PTX#+2'-*-+*("/>>*89.9=INKY[UAD8*,"&!#*"/73Za]rsoLUNWYSnnhmke@<32.$73*C?4USHNJ=PL?HA3PJ>YTGnk\olZvs_{bokWcb*<6       ""$$#$PQEgg\t}Ϳipuirus|}DRS-?='           '&/GNB=D4\`UkmcdfYRXGKRB3;$4:% +% ' , !/ $4#4 2 3 /+*&'&&' ""$##""!#' ( !+(&0)3&2'4-, * +'  (&4(6-+ (0* '  ' 1 #3* ' . . , #/ &/ !* $ & & !&!& $ # #              *.-0.1,/,0*.#(     %*#*',,016)-#+,26$*      $&()+,797;9?/4)-&)'*28AH(>D$7=3805/6*/).*//1.2283=2<1<3=4<2:/8+8*:*:)7*8,8,83=/<-:0:=E!;=;:::77474818&+ '+.1 *--0/1-0-101.1)+./*-*..3161:19#    +2@C!4524765615.437*2$   (/*0#-#-&.,2+1-1*1*.&,59?@=A9@5>2:0:+82;/8,6.6/6-6,5+5)4- + + ' / 0 . *     % ) % '  %% +$,18@H3JP@SYFOR=@I/>E-PR>XUBgiWTXFZ[IbbPZ\K]`LchR]_ISU>KM6HK37926?;;>@>C= MA%OE)HF ?A4>6=8>5<4;3;-6!/$2&4$2$0#0%/#- $. - - - %1 &3(5%2%3&2$2+6)5)5*6'5-86<>@9<8==@BB<=A@B?9<<=.71827.7.7-6/9,8)6(5(3+3.5)3$2'6'7(7&4%4,5)5'4'3&3$1%2.9-8(4,8)6*6&4"2 #1!11 / 1 1 3 + %) 0 3 4 %6*8-71:.8/:.6-2'/%+'0&0$*IIDb`QA>%=;$B?*QP=CABB4:.75:,:*8/7+8'8%9#8%8+<!4 6 %8 +:4=;@BAA@8=7>>>:< >> LEXWB3;'4$1 &3%2'5%3%1)4*3)4'2'1".(2/6*3#-%/$2%5#4$0(2#,!.%/* +)+)$ * ' # +#-"+!,+ ,* ++ +&$(&% ' )%0'0&0$0%/)4.7,7&3"0"/!.,* . .!0./#3.. 0+5,5*3*4*4-73:4<9A;B?DCBD?#C>%B= C>EA!PI"PG$PJ(ID#HCHF LI%QNTXQVEGDFBNDLFEIFHGGCQBQBVF!XI'WJ+SJ.[Q2\M-]O/\N0_O,aO)cS-fW3gV0o_6k`9`U3cW2hZ8cV7lbFzs]ZQ5QH-QL6C@(97JH7[YJ:9=<(<:'?;(2143322200*+,+,-#%%         $:>CE?D;ALBO>N@MAM=MAQBQ@N@K>GAHCHBHAECCAACEFH FI AFCFFF$JH(IH%FF$BF!AC!DD%HJ"JJ!JH$GG%FJ$IL&KN#LL*HJ'OO/Z\DU[EWYJ^`PY\HX[CTS9BE(DD)=>#9;8:58/357/379 3717)2-7.:-9,509:?CH$4>,7)1,407/9)5+5&2.5/5#. #. "- ) + ".%.,409099?>A@A>?6635DC+=:<8 99.4"  !+ * ) % '!-". -*#.".#."0"0#0&0(0-3*2$.'/#.#*"('(' &#&!!#" !"#!"'%.-++.+:6 XP5|sU]ndFWN3PG,LB(J@'C;#TI,PF*=6>6 =6 :4:484:7>:A>@>A>?=B@ EC#C@#DA%JF)QL.98#              .-)44063+74&;8"A>,QP=YXGUR=NE,E>'A<&32%1/#0.#>9+85)!     $ $'2/7AqupvffVEF=TRDe`OgdRc`Qqmpl&"(]`WbcYWVLeaPkfQywc|r~}i~}jxxyixwhuugʳ{{|yyy_ad||}||{ABEORP{wzvjpdYcSEKB%>>&AB-??$5918/6/4.5*112+-001032.124B@ QL)=A'-"'/,3567:5:      "37/1/0121401/3.5#  ( *",".&027292:/7/5.41648>@=#::;? CG-@F,?H-JP7KS;IQ38@!?G-OYC^bIaeN_dM`aLQP;HK5FN5XT:[WBLO8RWCaeRadO[aMkp[sxcfhRZYEQS>BC'7>#29093;??HB!AA ?B9>8>6?1:,7*5"0-"0'5,8&7*6&2"/ 0 1 0 "/ *3)1(0)2(3,5,6+7.91:1:4<086:498:574:9:EBEAFBHBBA7=6:3:8>:>4<8>393:080815583819,6$4!6!6$5'5'3)5'2#1#1#1 #1%2&5(7'7'6(8"33 1 1 2 3 2 . () - 3 #4 3 %4 &6,8.8.9%5&4$2*/).%*&.(0!*)-qrmmn]KI/;:?>HF(DA@@??A@3;/80;,8-:.;3<3<-="8!7#85 5 '9(81:+:'96?4=18+4&2 &3 #0 %2 $1'1#-'1$1"."/$3%1(5-7'4 0 / !2 #3#3(3+0%1$0(217*2$.!, +)#/$4#0 ,*"/"0#0 ,*)+*$ $ $$-#2#0"0!0#1#3!3%5'5*:/=3?,: 1. ,+- . /"0!/ /$1)4)5)4)56:591;4@1<5@:Ch_7QM0UP5eZ>dZArlXibMPI3YU=QM5IG.==%CA,87 >< ;:B@#CA$;9??$;::9876602/2011. #            !,.46383=-9%0+519495;AD MR0G9?8=DCI IL"HL =G.?+>3@5B6C5A2?3?9C;E"9E=E$LO0HJ*GG'>@%,2,2)0*/.4-417*3"-#,*6+72;4@6C(6%1$1#.$/&1!,#-*5-76<6<6=2:/8(2)3&2$0 "/+ "0 !1 '5)6.;4:24+1.1.2/5-5&2 %   ') ( !"&$&' " '()*"/"-$.%.%.%/&.#-+)&%# ! $#"% $ "!#"%#$#$###$!""$+)94HC$851.40305272940/31/,)*/-1.0-5285>;!DA$C@%B?"BA FD FC KI%HG$IH$DC!;;:: 22%'! !#%%(01+*,,'' ! ++#@A5BE<11%/.B>'JB'TQ>OJ6H@'KB%EB.FA*B:@8E=!E?$F=!D=";7$++ /.&33+,0,+.*01)+* 61!E>-ID5USFXXLNMCJKDJI?[WHhcMFF;'--+11EG?]U=[O5d[DZ_]$,0)gcO~rt~vzy||wv}}njiT|{e}xzl|oy~~~~uuuiij^_aacb[]T}xfi_PUHGM>U]LQYJFJID4^[I|uu`jeLm`@~oEvLwǨ|ink\]VS\SX_V161    !  #+1.16:[]G֗~ERQ(59&-!)' "    "*,zz|TUZ+       !#%'+#$/"1(   (%/CH5JN=IK7@"8=;>5<)5&0*2+0 /1./-,,*()-.56;:D@>?D$CE(AG'-9&1IR1OW9QZAXaHWX?PU;WX?KF-UQ=LM7@B(CE)CD%VS5BH/YY@_bKZ]D[]CimUpu_knX]]HNP;AG-;D#2>;???4=2<0;0:5<-7'4%3* & (/ "3!1 / %1 "/ 0 $2&2(2'1(0(1)3-5-5+3191:194;2:4</7+4/547391:7=9=7??C:@::??>?3=4=6=6;595<0:.9.91;1;2;,8)6,6'6-7,6*4)2)2)3'3%3%3$3%3&4&6'7!4 !3 2 1 0 0 2 2 / ' , !0#0* / 2 2 $3 (61=-9,6*3/6,3(,/6/57;.CFAik^MN2?@"==;<CB;<=>8</76=<@:=/81=-:,:0:+8/9%6%9$:%:);%61 3 0 3 &7*< '= 5BNQ2MK1DB_`Hrv_t{^kk=QO MQ$IM!BM;G0@4D/??EFFBC:A3@/>):)6+3'2*4%1'3"/- "0#1%1%2'5"2$2%4195;2:,819/8+4+4(2&1".&0-4$/5@8G6?3:'3'61@5B1<)5$3*.' ' ( ) / $53A2@.?2>,<):,<)7%4&71=>D";A4;(5%5$3"1!0"0$2$2(5-8/7.74;5<5:8<?@;?@D=A9=7@:B<@AB#BD#KM'KN%HH"MI%PM+NJ(WV5YW5YT2XQ.h`9ulBuk@bY1\T.]V/dZ1cV.^P/PE)RG)UI+WM/RH,UN.UO-RK+SK-SN2ZS6`W7meBpgDpfDrmKutTqoQtqWe]Bd\?SM6a^K\YFGD,>;"GF3CA.IF5KG%NJ%\Q'^T)ZP%VO$VM(RJ&JF EC??:;:;9::65.62/.,'5E<"5+3)        #-0,2$)#'-0460458EE*CC*55-0.45>%1%0*4-7.9.:1;096<4<5=9@#2<IN5HM1SW0=2=+9)9"4!2 "2!2 %4(7+95=+418:>28-2*1%/%.(0$/$/$0 + -,+ + ,!.,) !+$/"."+"+&/*3'0,4%0'3+4#.%-&.* * - !/ !.!/ &5)8(4%1"/".(288;!?< FH%CD"DA%IF,>9#;6 ;7=9 86:6!:8(:9*65$75&/1 21!0.!/.,-+-/.0.=9&D>(EB(C?,,24&'*%'( HH7LM=><):5 8262 73=8!<6>:"IC'KC"OF&UM,\Q*RJ)GC'@<$;8"HD.ZV?iiVZWBLH6MK:WWFa_KfdPop^__OC>,KE.PK3_\Ea^J\U>TI/[S:h^Ab[Bc]Cc`NCKI $&'/5.QPA_ZD^ZErs[xyixzzv}yzskllrq~ejuprx|k~lkmiY[WUWMUVNUTJTSIORDGJ;JN@KPAGH7A@1:8(GE3B>/B=.B=-:6'20"BA6BB9!    #(242:=KPN||z22###JH<86(RSNjlmZ^`389589:=ANOQZ\^qrs,-(-(+).,+(/,.,!/,":4'D>0IC3VR@AB ^]A׆\chKSYwyNX[/9?(   '.      ""1|||'              %$%5=*WZM8>1(/4;"CG1z|til`SWKFK9*2' )"*$.2;.9(3$1+ + '&&$#!! "!!!!"""#%% % # & % $ % % & & ' ( ( + * - ) &' ' #       ' ) ' !  % ' ( ) !+ + + (( *&)/(..203/2/2,0,0+0(-(.'-$)       $,$,& !      %/*5*3(0'/%/"-#-%.%-'.(.'-%+% ((-9:55(.',(,.0-0(,).+/,1/5.5,3+2,2*/).).(.*/'.&-)/+/(-)/(.*1)/+1+3,4-5,5*4&1'2%0)2)2)4*6+7'5)6/:.:1;;=KL0DG,=>!EA'5:.8+4%.", &. +1/2-.**+,-.-/*,.0.1*/.428*1%*   % ,0 146625371569;>3737,3' %%+',  '%.+2-3+1-4*3'2)5*4-2-5/7/8(3%0*36=09/9$3#1%3'5%2% ( % 0 "2 $ "0&4*86?BEEF @@8;:?9;35,1(5*8*72<3=8=7@@F(DJ,CL1`gP\\DOL/B?#G@(OO38="89FC%<><=LN6?B%;> NO6NN8JK4SS=TT?QR :@ 09,5)3%3"1!0 0!1"231 0 . *- $."/$/'2(2)2)3'2(3+5.6+4+4*4)4)5,609/7-5.5.4,4&3'6)5&6&90<7<=A8?0<8@:@9>6<2<.:.8-8-8/9-:+;+6+5.6)4*4*3*4*4*5*5*4(6&6(5(5"6$7$5#5 2 1 0 1 2 10 $ 0 , - 0 2 2 #3 &4)72=+8+8/9/3,125'9<,EE>@B"BA"DA!MHFC4;792;:A5=2=(8(9+8,;*9+:-:*7(<)=5C-7)1.'40!45 "5 %5&20:=A DD*AA%Y\HfgNolloCTZ"VS&PO@N?TBRUZ HP =J/B.@6E8E6A3<2:-7*4%1(3%2$1&1&1#/!0!0 %1(41;8A0;,8.7*4)4,7-8(5'4)6(4!/-$2".#-(-)85F4E5>&7.;$41#3%4'6.9193:7<4<;?8;39597:9<;=9==BBEHG"HF#@A>DBEGF&??$BA FC&RM2OL2]Y>c`IplUf_E[S9]V<[S6_S3ZK-F=#WK)^O'ZM,]Q-XL+[O&XO+XL*_R/XP3UM1YP3_V9e[9j^8ka?xoKtnMnjN]WNK4IF&bZ:WO1UL-fT)ZP$^U!]T*bY+^V(_Y2]U1YO(KF!GCI@D>LEG@"E=!"&0"0!#                 #&-..0&)*,,.&,")$+(+%)%,,25= +% '"+"+(#-$/,%2&1&1)4.8.74<-8:A!4?2?1=5?0<.;/, #3"2 20 - / - !1, 0 - !0&2&0*3&0"- ,+$.&1(3#/ .+( ')&& '& % $ % )!*!*) ( ' ' ) ) *!+ *"+ *%/$1)4&2$0"1 &50 - ) ,- "037:;:@(80 - ( (*'# ( +. .+ +*( $ ** * +,*!+)$""$$%"!$!$"  !"& $"!&#&"& $#%$&*)**&(&(())*(*'(&'%&'&+()'%$)&)&&%,*.,.++)-*/,-+5164:764=9B=">8!6262730011/0"21!12"/. 42&75'=:):8'76!54=<(B?*E>%C>%@;#A=#GAGA F?JF+12!;9$94518397'86&CA.84 84GA&OF'JA%SK.MI/E@$D?"??&DC.VU:klTdbFqt]x|k|kny|f^^Itu^eeQux`hhRijR}zc~}gjhPm{|aonUnlRffNqveqjm\WYJhbFmlUtwhtxg|o|otwbyd|hlluplljornpkqwbkpYpv^[aN`bMnpYSWPgj^GI:PTDejW\cTORCHH6OM:QL9QN<263()'FEDC/3./2+#+'##)209?@&(!)),13;>?156"+(1)06)-,B:!^\G|nWTC0+40$50#4.!;6':7'A=+IC2WR=WR558/492 $(    <=0PSHfibikarrha^Q=9&63"<;!MP*GL#EJ$IP)ikL蕚TYa,2=&-7'/9# !")   #0+||~noo!    !1!             %   #'! ! ".HN:y{TVE^_P]_OvznrujUYG8?(*115)$#)&1:G'FU5/>( & ' ( $"!# % #"!!!!!" $ & % % $ # $%% & % ' ( ' ) ) * ) ) ) ( & "    # #  ! # " # $ % % ' ( &. #, * # " $ #*)/(0.4-3+3+3-3)/(.%,&.       $$+ ' #       %,'1$2.579-3,1-1+/,/,/&,&-'/ ' %$+$,$,#*,0)0(/'.).+/(.+0.2.2+1*0+0'+'-'.(.(/(.&,)0*1(0*2+5)2*3.4+2+5*4(3*3-5-5-5+3,4)4'4)4)5.94=MR:@G)9@PT?GK4CG*:<5;5<27-4'0(0-0*.,.+-*-*-*-(,'+*,)-'+*09;      "+062423132514244433-.01+/ '&(,4-527/5$,"   #("+(0'0)1.5-2-4-5)0)! !.!/*3'3!0!0!0"1+ !/ % + 0 '7"2 2 (62<-9'2 / ,( #. - )5.8)6:E%?I'=F&BI,FM27@&2DL/EN1JQ3@G%CD"A? EA!A> <= 8=27184736;; LL7EB/?B+CF/RT=dhS\`KMR;JQ9HO7:B'*7)4'2%2&3. !0"1 0/ 0 , - - %0(2(3)3(4)3)3*6/94:,9(8.;.8-7+6*7,5)5)5'4*4+5+4)3)4&5&6+;7BHO#EO!*;(;0;6;5<4;3;592707.7/83:0:0908,7&6'5(3)4(5&5$3$3%5&4%6*8&6)8%7#6 &5#3"2%1).)+)1, $ + . 0 #2$4&4&5)8(7*9.<1=1805,1.2+/%)@@3WU?@@!AB!=?:=AA6=/86?4?-:,9,:'8,</>+:1=2>1>0>3;-5/;*9)7$5!44 "4%6&5#1&5)6.8=="OK,mpVggI[W2}ifln<_V'VU'FT7J5FDLAN/A9FCJ"QS:ffQdiGkrUIP*>A?AEC$HELI'HE$EEAD=B<@?B>ADDDCJD!QH&RL/b^AhcG^V6aW7^T7\Q0[P)]Q)cR&jW+eV-WK-UM'TJ%[R(^T']S+VO.[R.\T/_Y,^Y1ndAj`AkeGe_Dd]<_^D\\FYT7ZT9ZS7ZS0^U-bX8f[8lcDh_0hd4g_/d[0g^4liAppYonUfeQjjU\U5WR0VQ1KF'LH,MH'GA#A< B='+ %$614/!# # #&)')                  !%$)!("(") ($ '(!++2!+(/&/#-%/%0$/%1(3&2&1$0(6"4/ /./ , * + . - , (&') ) ) . '5+69?9?3;+5,+ +#-)(()*)&''&'"+&'('( ' ) ) (&'")+17;"%-#,'009*5&1$1%0#/$/- , - - ."0)458-7"2, . + ,+'),- - +,) )*)*((&))$'"#  ##" !# ##  "#%  $ $%($("'!%"&"&')()&(&)!&#& !"    "$$&''-,302.2.0,8353<99674856373.,/,302041*+0.34'87)32$86&<:(:8%?;%A< JE.KE,G?%I@%D=#D>$C>%IC*E?"00"$$&55 :794:5820-96%733/;6E>$a[=my{fjjTddN]_KVU=_X7bV5_U2d^Apt]mttt}h|}dx{b|~cqlQ_Q5leLt}f~}drhkV^cQnqZgjSZZGwunhnlknkiruttmrmygnt\inWZ^IQTB[`O=?1>?0FF5OP@PSBMPCPUGQUF@A355,::053*:7(?;-95(73'2.#-)$"#!""%)      !   ()(---22046+05%582=7<4TQ7mmZ|ikV'4%&-!51#72"<7&95$<7&:6':6(84%;8(>:)?<+@<+GG2W`JrƼw–UWH87+34*:=4(+(6;=[^_IJH#&,  57.67,+, 01%)+-.+.3749#6<&QT7VZ2hm;~򔚤-4E!0+#.%-7)1% +XY\037                    )26='SZH(24;!$2MS=PTEGK8=;;==9:7824(/" "-/7383;3;6<)1 *'&!   # ".&1'2'2$0, , / &0%/",'2) ) + - . , &* - #4 !4 /) % && ) !. #0 *3 07-8'61>5B9ECM.>H,9C$=F%;G&+7;E&-9;A EI.@D*@B'LO3NO2=D'+6285699!9:#>>*?@+>C+QT=LQ7VX>PQ9EJ1;D+5?EK"?D=D.=.=,<3=2<5<19/919/8-8+8)9)7+8+:/;+:'6*5(5'3%3"4$7$6#6$4%4'7&6$57 7 "65 "4-4.2/1(2!1') . 2 $5'5'3(5)5&6+:1<1<.6.3)/+1,/,/21!@?@@EC BA9=7=9@396=4<-:(8'8(<+:-<*9,:5@4?.?,;/78A+="8 "6 (70:-:-90908*7'6,88@MM$SO&bfIkkOxfka/^X']\1DG"6C:F:E6B/;.='8 1!3"2 2- - -."0"12"6(6*6)6(421 %6#4%4)6'6'6&610 2#6'6'5(9#6!4"4%5"321 $3)6'5'4%3(5(4'4+7,91<)7*9/=2>3>>EEF"HH)JD,JE'IF'KG&UT2MO1WU;LI$LH QM#SQ#QO VQ"UO#QK$WM([S-cZ0\Q'VM+dY5na6m^3cX+bY,[S(VQ"XR%[T&[Q$bU(]U,_X*]Y/ca:abFe]9i[5h^9dZ7d\8bY7bY;^T7[O,`R*hX,dT(jX*iW)aY/l|X|}_ppVpnNvx\z}diiSebFnnYjhSVQ6TO3[W?MH/KG/B>#>;#' 53958689?>!ED&IG+LI.JI-68,                    $!#! !' '")#,'1'1,6+6*6+7/;0;)4!0. !1!0, "0, + , * . -., + (&' ) * * 0 /96:+3+ ( ( - + ) !,$-$.#-)) )$ & ( -"/!, - - -& $ & + )"$"& ')*2!/,%0%3"2 #0*3!/ "1 - , - . / / "0&1'2:<A2AB/;9#96!>;'<8$@>,[\Kln\TWE\]IkmWvwc}ltxay}iv|ldi\adNhjTbbKikTkmUx|apqXmfiRijUrrYd_C_X?g\@vlNbkuoUz{gk}tqshv}doywwwrkminx^ily{wpgsm{kmu^elYY_MII8CC1=<,@>-IF4GF5B@1><.BA3FJG'7C;H'?I*LS4]dJ@I-%21;2:IO58A)@D(HJ-KR9@I1:E)3<1::>'@E1DJ6DK1DK/=C&FF)@D(=B$EJ.AH-3='7$3"3'4-8)6,6,4-5%2/ 2 2#3&5&5,7/7+42:4::>6<2:6=8??B:@FJ*KR0KQ,DI'@D$FM.IP2BG%,4+7*84?>IFN$;A7;8@;B1=6>58:;#CD4;=,8:(=>,PP=^]=MK!:=<>=?>BFG!;?>A1=4?(8)9):+;+;3<4;.;.=*;(9):0<1;>B);A!5>-;&6*8-8/58:5;4=IJ WY5VX4QU-lqKrwOgytIbb7HLB@DJL%``:[X5QO*NL'[Z7TQ%RP"OL"ML!MK!OL%WQ'VO(WP'UP"YQ$`U,eY,pc2g^.b`*VY$VZ#WU#QL"LG!UO$bW)ka4gc@ba>b\2cY,fV(cV*bV1hZ5h[8j[8vfDvf@s_9s`8tf=oa7a]FXUBXV@JI4QSARO7DC&ksHiuZifAa[?bZ>XO1ZS(13$;:'>>,>:)ED3egUko\\_KQO=LK7VQ9JG4^cQq{jnwc_hZgo]lq]KN=imXy~fy}gy~dpt]rv`vyagjWkm[ooZQP>B>+_^Ik}i|~e|~e{}lvs{g~lekXv}dpu[hiRp}vwlorsrlnnvwyoplov^W^LSWGCD4><-?<,A?/><,+2(" 00'@?2B@366/990 !!%%            ! "DGJVYYBEG28>Y[T\VAHA$;6>8GB&UR4gdNpmWomWY[F6E62?8!#"#"-,40 0-0-+)$$$$85#FA$inJ}w~w|tɟY[]``]NQR    [^T]`X}_\HWS?^]DPP:WX@bfN}Ƽݭ/4B    (" ,28>LH?HG5<:T]Xvyy.2.HMH%0)4(@YO1PF5(      -'.   $0);GB39=/2:*  ",;B1MUA3?'9H*CN4=H*BG/?C(ZZG_aQHM3+7, .'6$0'(')209( & $ & * % " # # % ! !!   !"  "### $ $ % % # % ! # !  % & # " $ !  ! ! "  !'%          !& ) $ + & $ !, #.$. #-$+"*#       $ % $ ' ( ( ( ( ", &.%,$+$+$.$.#-#.#/ #/ !. !-!,#.#-%0%/(/!*("-!* *( "+ #, "*#-$.#.-#2 ,*()' ,!.#. - --.- - - 0 , 0 2 3 #6 $6"5 !5 %6 %5 (4(5-913/3275:9<=>AB!:;02.236/2577857-2,2.4"5!017(1,61:-51605,204;@HJ#DM"6B*' #/#. ,#0"0"1 &3&5%6$5!4#8&:#6!41 / !6* (.-,/- 0 '5)8+:&6"1$4/ 2 &86A7@ '5"4)8$6#5,8&4)4+6(4&3 2 "3$4&3-72:-84<8><>6=9>@E;>BF%>C&HM/DF(AB&WYBA?!??AD"4;:@5<4<9@CG9?9>;@:>?C ;@5=3;391:2:-:/9*8)8'6&3$4&5)4(3(3&3%3$4&4)5(7%6"5#5 6 %9&;$:#9!8!6 1.402+2*1&/!0/ & ! + 0 3 "4$6&8,;.</<6=6?,9,469 06YZPYYECE(GF!>?QM$JHCEGE ?AGH!1;/<-</<2>2>,:+91=-91;.:1;9A9@4?5?,;)8'7.9.64=5;>@ BC$FE"EGKL+WW5\Z2kmJtzTuxM{LblzwmrUV[2BJ5?.=*8'4*5/71;:?#BF%IK2NOCXYVY[^ORR@B=5; -:-=*;)9&7&8*9*;&5#0%3"3"3,,!1%5#3%4%3#2!3%4,859(4 0+60<$4$5 7$9$7!6&9&8!2#4#43!3#6%6(8,8184:3=)<(;,;/<4>2>1>5??C CI'4>/=.=.;3@7D=FCJGL!EH!>A6>3>1@;IMQ.BI!FJ"BGIJ"_]>]X:WR-_\8\X2QN+OM&KI$GF!KKJI KIPN"TR!^W(`W*_W)\U(RP#QO#MO LP NVKL KG"RN&aX,fY1tv[uqBg\.[V&e`-gb+bZ/dY2e\1e^2`Y1d]7i`=bvnJld@,++TQBMJ651 "KE&UQ0`Z8ztOsqoS\U9UN*VO6TP9SQ:JG)FC"DB#C@$A> 98?;@;?;<898E>(=988<875><$97000.       $$ "'055968;=7<36&&00-%5 *:&"/0"&35>@=@7:8;8<,4*22:/8'1&1%/(2*2.6&0)25<*7& ) ---, (7'5- 1 .0 / - -. 0 )6"2, ) & % % & % $ % # ' ( !+ +' # & ( ' "-", * *!+,- * )*,) ' + + + )!+**1)1+0BG2HO9&/!,*". .-!/ . - - .$149OU5-<%3$/'/".,$.$.".&.'.&,%,%+$)$)%+$*!) (&# # &% &% ' (%! (%&("(!().&+        "#"           "" "$ &"( &!&%*$(".-/-0..-.,0-.-53 53;:$@>(NN;MK9GD0?9"=7 <8#A>-TVCII897&@>)@=%;7$?<*95"94 83=6!A>-IG6IG5[_KbiZ_cQZ`LY_Ljr`]cOnv`txa{foqtldjYuzg~jin[[_P\[I_aPcgVwzc{hqx_SYIMM:UV@QR>ZZAppYquwquxv|zy{klm|mwiymylxpxmuvqw~k]aMJK9GG5@>-;9,<9-86)=9+=8,84("$  +-+GJFSVR,26!"!        +DIRJPWHNUVZZ@<):4>7!:4@;"plBY´z0:0&)22!'(43!;;%@?(EB(@>(67(//$&&'%"   &'FF6vwn``SOTJxzu½ė{~jnpLQS     HKBx}wŷżFO]ֻ{$-3        *46/@: *+*<:(+ $LOC!'!372^b[153."#=0+"   !'-;"3%4&7':"5!4 %7 3 4 !4 '82@FN0IR3?H)6@+5;CCL+=F(/<1C &6$7.:*6+6/:%4&4 2 2*6,5-5-9*7+629:>090:>B?BBF"6<=@!@B#=<XY;DD(=>89=>6:087;;$CA)edSljVSQ1QL%ABRQ';E.>4A:D;B/<0=7>>A:@.94<7;8=5<09/86=:AA@#FA*D?*FB'PHRM&_`CeshniFifFfc@\X4Z\?J!/?+:,:$8'8);,;/>>DFJ"DG!CC#@D.CE5pvk`jY=H,0:0=1=)8"3#4#5%6+:(6.,, . -!2&5%5&6'6-90='7)7(4/88>6E1?2;6=6=.9(6$5'8!3!2*8,:(7)72:09/>1@3@/;-:0;:@BE ?CCE!BF AF"@F#@J!KS4Y`CKS,V\8_bA[_8PT-TT1MS)IL(MM.OS*VS9SS*MM&GE!CFMJ(MJ-GF%EG#MO'Z[!>9<7C< ?8 B;%B<&D@,1/1.73''            &&42789<=?GEGE?B>BBEAF@C;?:?6::<:::;9<:<??:%74:5"73 6175#=;(GI8JK6<8"=9%>8#;5<5 ;5!=:'=;*B>+JI7:6%@<*:5%C?/ON=IE3NH4HA,EA.GI9KO?UYDSVCFK>_iWV_Y[cVY_Q[aOFI:HF2`cLipXqx^]`IRT@ML9[\DfjPoprtqzpyeu}byfnw]enXlrZs|cnpon|x{aqyrxidi^\aQYZIRRAQP=HE4C>0B>0A=0<8+?<184'*' <>@TWREK@KJ@..-;:1!""        '26\`e[`gNU_>DICA4@;'3/RL&utFqɺZ]D:=)<='>?*@?(?<'B@(@?)A?)=<';;*7:,9;+     74)ZWOZVL]ZOǔ^`^QTU") $#-67#!""8=7ruoǿJT[`hfmuqlxuCPR9DI          $'64## %02   FF3efSvwi/3hhV~`bW   IM&7;"BI.~j}UYC)0>B%WU@%"& # " $& )' #"-*31$)     $#  "&+)*34;#&/BI8077>#6@&BG1!,*3%/)(% # #   ! $ # " " # # # # " "              ! ! ! " % ' ) ( & & ' & & # " ' &$! !'&    $  "!"#      , %4) & $#%$ # & !!'' $ ( ' ' %$$ % & + !, , ) ( $- %0 &0"+ "+ !+ !+ !+ * ' & ' ) $ ' (&'% ' ' ( & ' % & ( ( * * ' ' ' & ( & ( ( , . / / 1 $7 5"7"8!61 #5 (7:I,MW;Y`GhiXD>))/ (( ) ) %/$ !#& )*)*",!*!) '!)",', * !+#,#,#.%0&0'0&0, % & * &.)1,2.41625141223//,-2313*.'+),',$) & ++4(4-:+9+7&2'2*3)31=6F$.+"+' $.$-!.!/#/, - ,+ + , - - + * + , . + ) " & % & % * . . . / 1 "6 $6(8+9/=)8!3 / 1 $50=;F)=G)IT3>K*$34?!FQ7:C%/9(3)2.6-79A&/9.9*4-517,4)1)/).&/%0 '3(2 .67F ,:/95=8?4?/<0<+9*8'6(8&6%5#7#9!6 "3%7$9#:"7!6$4'1$2$0&1&1&3!42 0 ' ! ('42"5'63 '7,8*6*6,829)5'/13 ?@212 88(Z[O\[NddUDB$CC#;A@G @E>? 9@9A?A8B.>9A7A;?9>4<498;<>@C?A;@AC#;@6=7>:?2;5>;@>@BBDC#UV:[YBcaF`^<]W9okTrtcsxhlsa^bP]aNCE*=A#6?@G&CL+8@!;D0?->.B0A4=.=-=1>2=4>BF#QU:acRmrWhwDYe3C8>7@-:-:&5$4&4$0-+) ."3%4+7-9,8,8-7295=,90:4=2>:@5;+809.609)7+=$50=3D,=(9-7/6'6-;1=8?:@;= 8<6<8=8@@D!BD!CC#DD&OO2PQ7Y[>X\:UU,VU.ZX7\Y9[Y4OP/RQ2RR6XW7MO(IK(FH(BF#AGBG AB FF(@F!:DLN'U[1LS'AHFI!LK%KI$NP%FM@DGC$JD IHGI DGHDJD?EBCLJ RO$QO*SR6MR*EL@DIIPP[X(XU'TQ"SNMJSP TK"TJ#TH%H?;795:7;7&'"    #"5/?8#H@-52*$"@B:DF":8;661!#$$%%54%$$        64UR8[Z0;&4( % & ' (( * , +'1*3.639;@ ?C5:.438/6)3(0!+*(!- +!*$-&0+* !+*)(')0313/0::$>>'?>&9:#)/+318JR8AG0EK5/8$/&3!0/.,)"-.6-6,9+7+4;F#EN*HP+BJ!5;=E@H8?*2.6+1$,!* (&$# # & '!((+%.!,!**!.'-"!)#,!+) )'!)$$      "!     !  !!#$"&!#')+%'!$')*+,,)**+)*&'"$46$IL;QTGUXJLO>=>,::(:5"8363!94<8!:7 =8"?;%@:#83938393 73":5#<5":4!93!:5$;5#;6$>;*>8'B;(I@*KI5Y`J`gQKI5OM8zhpxat~denZFM?SYE?=.EC1aeOV]L=@5[aNX]IX]JagPpx]uc~d}b|cv{[syZetuXTS:HF0CA*AA+FG3QUARVAUWCNO<]^Kx{frxwv}flbOUJ" ! :7*A<+B>0A=195(54) !  bdcvyqLYJ=@< "!              *&RZXsx}x|pv|!,:'09!*/MQJXT&\T[X'vzQy_dODE-AA*ED-CC+GF,GF-BA)HG/GF1AA-::)55%-)-)"     ''$XYWhf`DA4jib@A= #369"$&#'*+86*13$'   8?:johzxŪ~ouwdLN7cdQݻpwHRSNXZ"%-jnoOUW>DEgrl]m`$61    ),') +)NL5FD1><)OQEFH=34#;9%HH-AB%)- #:ANS*5<DN*zST8JM-9=20"&# #  ($)()+ML96:$!   ")&  &,HJ6,4"-&1))328-5!-$ &(& $ # " % # $ #  " " # $ "  " "            % ' & ' ' % ' % % % ' ( % #"$#$ !'   ' % !  $ ! #$% #       "(, &3& %$#$#"' !"& ' ' ( ( ' & & ) !* &&!) !* "*"* "+ ", * #, ) * * + #. "- + !, * ' &' & & & ' ' ( ) ' ' ( ' ( ( * ) ' ' ) * + ( ) , - 0 / $84(;2.<-;0>NV?cjVhl^;B**1$+"*!*) ))# !  !"() )",#,"-#/&1(1'.&.",!,(/(0'/'0'0'/(/'.*1*0'/$1'0% (.)1+2.//201/0,.-.03/3-3+1'-#+#,%-!*+'3+3 , %0#0".".#.#/$0$0"/ * *' ( !.$3"1"1#2/!3$3.- + + * + + + , * ) + ' " ' * , %4 $3 "1 / "4%7':&7&6-;1=3@*9(6%4 1 , (7CO0JX9AN.6D#"1'5*8-9,7)4*5*5*8*4/818-4+2,1&.%.%.$. '12@%3#2 "4 !5 "5)5.;6?3:17/7*61<.;+7)6#2-(4'3(3'4)4+5)2*4&3(5*7296>@G!?>@7<7>3=4;2<2=0:-8,:+:/>-=*:'9-<->+;&:"6!432 "4"6"8!; 9!77 8"4-6)1&1&2&3!3 3/  #02&8+8&5(6(7*6)6-61 0 %0)/03;<.FF=QRH[[JPO:@=!CB!NJ#PJ#UO&IJ!=@8:8917296=4<8<:=>@;@9?7<:?BCEF)dfZsufkmYacMefRhiW]^LUXESSATRCdeV^aR^aRPVBgoZkoY?E"ceJloUfkNJP,@E"IK*MQ(PQ!NHLK;B2:4>MS&UV*WT*TU+JO#:A:DRZACJ)3<&6'5#2$0 , -!.&6&4*4.7,8+82;4>,7-;.;+:&9'9(5*7%6$6(;-<,:,;.</=+;0;3;0:-;*8)7-84<AB&>A#?C"@E IK&SR-^Z5bb>`[4_Y5b]?@JII;:7<=CFHMI!NN#ML%KK!OO"FM;BEEKFVO YU$UN MGOKYN"VH"NFME C=:6:58500!$         0."XS?feU][DNK-MJ.SR9FE+C?$JC)TO4QL0<9''                 )E/.>0!&*(BACI7B6@;A>$2444;8:;.8;)9<.8<0:<,106385>:!B?%FB'EA&IC$GA%>8 95!;5 =6!;5C<"A:#;5>7!B;$KE/II7EH8DD384$?;*75%HH6BA/>9'US>Y]JioZpy`U\M`iQC@/LK8NN=WZH_eRAA0EE4Y_KPVE_hSZeP`lUXbMhrX~b{dtyXhjMMK4HJ5KN7DF1HK7BB/?@.@@-A@.?<)B?,GD0GC.KI5NK8MJ9^]MacTlsbVYK.1-+-* !" -)0-#)' NXOrwqllk!&                  +&&$'& ??9bb_WXTVWRfgc891?=/HH;B<&:5!WT-cnjS]GBK6:=(AB+FF-GG,JI-JJ1TS9RS:DD194'4/!3/ 1- ,('#   !$QRQ.-(CA9ZYS_b`  *$$J6*U8[hQ}diYmscᓖ@( ' %1'>K=HUGW`V(-2(  &$3CH2BG3+4`dU?F-6<.6)3*!,&/*# #  " && # # # " ! $ " # " # " !      # % % $ $ # $ $ % $ ' ' %% % $ $ $ " ! # # # $ ' ( $ $ ! & $&$#       #$' ' % $%&'( $!$"&!+ !+ ) * .* ) ) "/ +5(0 #+ !- !, #- !, ' ( ) !,( * * , "- * + "- , * ( ' $ $ ) ( * , + * ' ' ( !+ "- ". !, ) + ) & & + - - + . 2.CWaIJS8HS:AL1@J,SZDV[K+4$.( () * * )!) ))!   "' (( * ) + -#/&1&1&0&0'1$0".*22709/;)2+3-5+2'-$)&,$/ )1(0.2/6*2+2*0(+*,12-2*4'4'2%+() *!/*;?!0=)2%/",",'0&0!-"."- + ) ' ! + !-/ #2"1!2 0 0&6 /. - ' + . , * ) * , ) % % ) - . &5.8%4 1 $6*9+:'7)8,;/<1>.:0:)6'3&5!2"2/>6C%-;,8(4#1&2(50<3<2<2:3:,6)4*6+616;@"8> 4>,6#1 !1 / 1 2 4 "0"3)7+90:,6.77;59-7'4%3(6&3&5)7,:.=4?+5%2(4*5$3&5#3'6+7.;1<385:0919-7*6,95=197>39387;7:5<2:8?2<2;1;2=3=+9-<,;->*<':*;+<%;!: 8 !8 !75 1 65 7!876 6 54 6 '83:>?$25)2+3$4% */&6#7 4$3#5(6$2(4&4%5&4(3-325+/??.FC-E@$C@"MI%OLON#VT'CG FG BGFH JH 9C8BAD 8>>BBC >B9=39398;06/67;:=5;=@FFACABBDHFMIHEBAGEKGHDLJ+VV?eeQ]ZFNK4YY?X\ENS@`dT&;D*4<GL1bdNKM*PS7LJ.GH#hiRwzdacI|p\a@6:.509?B'baKnq\RV7HL+DI*rueX`>3?(6&5%2!/-,#0"2(6%1)4+8*9-9*61</>':-?&73(6'6"5->*8(3-63<2<3?5@6?5=7>1;1=:@1=+8.:0:1;3?6DGCKIM =D;B:A?FOQ2P[2;KFRAIDE>C%9$5*78EFON#NQ!MM HFGF;:21                 .0GH;B'04<8C 6@5=;?;?DG'?<$843186JH.8;#&*.1)0$--0/4'2)3.66=@? EG+PR9afL^bJAE,UYAIL5UZBVYCVXFnpbqucQT;fjONR8/5;>&FG1b_HOO5WX?zjjVdaMMK7c`PksoPwv_ihPNL3KJ5?@'<<$KI189 15-2#-) ,, -&,#,'& )' )")$*(,         $#"!       ""!"%&'%&!$'"&#(%(&($&%'!$(*;=.SVK-1'36&,/.1 25#47%59-58(?C3DF8FI8!;7:6:6;6HA#G>"<6!:4A>+A?+75&CA-CA./."41 63">=.BE6?>/CA0Y[FimX`cOckU^eQJK;IC1NK8JI6TWDHG4EE4LOMP8&:4%<5&C>/MJ;*?:);5&?:*73$    .01FIG   &$!/'#D+L`C{}pcfWFI6OQ<`bPFL9en\ѓOSbDLR\de-8?(  #-4(38#04*/*37   $%')+/IG >=54322/822-.++'4/$QJ>B:,+&'#*&&#!% ! #!&&)*)+,0477: 0518&'1&gmd||;hl_lnbMO:BD+7:>@(26(/) ) !*!*!*!* *#+"+)    ! " ) ) ) + , ", ".%1#0!. + - "/ %/'.4:6:4:-4)2(0*2,1*.-2,2(--0-/-3.3/3,-&+&('('+&/$,%+ ** * - +47(.%-&0%0%+%+%- *"+('# $ !,"-!- #. . - 0 2$6+>$40 - + , . , , ) +.+ $ & ) * !2 "2 *5%52 1 (5)6$3$5,9/;,8&3%2 0!0$1!/. 0+;)6,71;/<&4 /%4.:/;1<3<AK%1;'4 0 (2-406;B4?.:'6$4'53 0 1 2 4 !8 ,>5A-9+619+6&4!2 !4 3#3&5&6'6,:*9+:)6,;'7"4!2 "4 %6"5(5-7.;/:)5'4*5&4"2-74;1:091<3<1</:+:(8.=+9'6%5(8*8+9+9&6$7(9$8$8#8$8$7#7$7 6114 4 6 4 3 21 0 0 &22;@C%)/"-++  $"./2 3 &6%4%4*6,7/8.:/8-2,2=>"A@$?<"BB&PK-TQ5JH%KN$KM#ML&JH%JH(ADFG CF>BBDAF=ADDEDGD"BB?B8=6<3<4>;ABFQP'OL!RN'TN!TO$RQ#ON&MK&LL%EGDGFFMJ)LI/NL0CC NN0_bKTT__FWV=WV>JJ2OQ7lpYjlV}}pFN*7>8=>Ca]5m|mNS-BJ%HO+TY;DO%,;,7,6%5!2 /#3#4"32&8,:+9.;*6&6%52&:&72#4$4$5&6%3&6,9+8.9/:0<6?5?2;0:2>:A6A(7,8/:2=2<0<6?EK%MO3RQ:MI,JI(MP1OS4GN%RT*WV6NN)KK!RN)YU8VW7@L=J=JBJ">G;H9F>LDR@N;F8EGP&acCEK(;E9<;>:CBPJ"PH!OI$FC!D@!@=96.-##      '& "0,93=8"JD/xxmY[L45&         :57579180;4BBK >D?G5:&('(-,87IH1/3"  '/$/)3078<39&/%1!0+ ( ** -, 00 . ' ( "$%%&&"!!! ! ! # " & ) !( (&( ' & & & & & ( ) %.&0+* ' ( & ' ' ( $ '% &$**.)0-5048858.1,/).'& * ',1>A$78>>%CA+SS:HF*><=;@@"?A%7926365789$@@,KL8PR=z|m|pPR?VTHWQBA@)JG0^YCqt]a`I]]Cmwu`faKHG0uqarp]tr^[Y@_]AVT9YV?WU:[W8"=7 @;%72:362<:)HE2A>,XYAYYBinVkq\^bLZ\JRSDOP?JK;FH8BD6=B7//!40 ;5 ?9$NQ@8:-8<4ep]jt]WbL<>.40 =<*43#0.//(%1,6/4/1/32"75%<:*96'84%:5&:4'82%<7*?8*81#81"3-!1+!,&,(   BJ@y]]L[YKTOCURFmne{|vstqOTV/6:(,  " $*047 %*    ,&6/"93&:4)6/%60'70&4-#,&!" '"%"%!$ %!+& 83)FB6[YMtwfmQVbN6@9*.&@E3,0#UW6LQ3GL.HM1KO5RU9SV:ST8^_=jnHT\BY`IPT=@C.AD27<0%*(HPN     $+#--/1!-0;>)7<*9>2BJ=hl\8?S3>G*4=+3#)'+$.-    $  58+(-!#+$ ".,=8HF(77101/64!^]Z3,*$}}};:4>=;z{JLS7;A.04GHJ;;3>>144">=.::'48*4% *$3@5jni|}|==H       "   %&+*1AE,.87>(!+6?&5>'*2?E,2:*3&$$" ! " % &)#.'6%3" # $ $ $ # ' & ' (       $ * * ( ' % & $ $ $ & & $ # # ## # # " " # " & $  " ( & ' ' " "( ( #                & ' ' ) ) ( !,$!!#%!+ ) ) #+ ) % ' ' ) & # % $3,:' # " % % $ % ( * ) ())% % ' ( ( ) ( ) ( ( ' ' ( *) ' & ' ' ( ) ( % % ( & & , '33=CH3OS;GK7(2"+#- + +* + + &/'/#+!*) * )!* ( !) #  " $ ( ) %' ) ' ", $-#/ , !, #. &, %- )2.4(+(.#*!$$%+(-%,%,+/*.*.4848*.*,)*')#&"##$!"$&"%#%'&+ )$* %'& !( ) + "+!* !* ' % # + "+%-#/"0!/!- !,!1 0!1"4 3 . / - , , + + / +( & ') + / 0 !4 +9+7!0$3 2 "2"2$2#2!2!1/#3/!0!0!/!/"/$0+6)3&/%/$0$1&4%39HeoH)3$-2929,4(1#/".#22 "6#4"4230 0 3 8 7 *<+=)8'9(< (8&8"4$41@(6*83G/?*8(7+7(6(8.>(7(6(6$2(4+6'5'5&2,7'4#2(3'5,5+3)5(5+6&4"4 "5&5&5"2!4 5!5"4'6&6"4$6%5%5%5%5$5$5"4"2"42 0 31 / / 01- . .%.&/$.%/(/'.&-$.&    -2'4(4'4)6,6.6180504.479;< /64:AB%GH-5:?C)>>%BB JF#XS5LJ)HFMH%@B?AHE#CBEB!NE%NE$NF"KF'NJ*FG"7?:@GI$FH$KJ'JK$NL'OL'ZX.QR&OP$HI CFCGBD>AFG)BB%>?:?>C@C$DFCG>C:@=E'FN5.:3>?D"NO+GH$FF#@B KL/heLkiOc^6vw^}juy\hlK[X'\U$[Y)PU.GN(RT-OR*KO*?I!2G-@);"6"4 223 64 5"75):(61 3/ 0 1/#5,;'5"2"1)5*7.:-9199?D;AAB"A@#>@!3<.9/</<2@CI"EJ&HL)MP.NP2RR5UV>VU2>6?+93 !1%1)92DJU"fi4]c.Zd-Q_'AH,7$3/8;=C?A>=>@A?A?<$%'(11#'6:DFLK,IE%GB#75&&           .,FB2]\PQQKFG?34)      !%%' 13     &1*56=:>:>7=-7"1+ & +",$/"0. + ( ( # &    ! ! " ! "# " $ ' ) ' , )"&"'#& )' ' ) * ( ' () !+))% ( & & ' # " $ '&% " $ !($*#+")#)#)',$*"*('"*$*%+(/2:FK,EG+RS7DG&IJ,DG+=@#8;!EH0BC+FG0MN:GH3CF1W[H^`Lmn_LL;TTD_\HnjY?@)KN2WY=hkM^`BlnSyz`feOacOjjWrm]Z>YW;OP1ijMceFojOc\BXR:TN6LJ2ON;24*1!+&+,. '%&#,!*(--1'-&*&)!&!&"&"& !% $#!!!!"!! % &! !#  #"#$$&#$"$ #!##%!#%&$%#$'()+-/)-$(&)+. %)-0!-/!%(&(/.GE:MK?C@4B?2D@2>:+:6'63756577:75496;895;5835/82;472;4;67341;6<684!AC4>=+>;'00"+-"-.$/2*$'!75'FB/JH4@>-62!;8'1,95$SUH_eWGK;PVF\bUU\N>A41. /+*)(&*(/+.)/*0+1.52#1/!1/!/,.+0.!4/$1,!/+!2,!3,1*-',%(%  {zMM9EA,E@-A<)<5":4EA+WVCgf\ih`mmfTWO      +*":5,@:2C=4KF.03%FF0NR5oϦدprFSW3X`jsOv[z]]gKU`HP^Fdt[r|t7??      ((%'" %".1&7:3gh]ind񕙥18H$3  "69F=@NQTZ#'5    ##//0- 0-;4&^ZUB=2&".(!-)$*'!!LJNˌ~RR;[\:CL-  369ijkEEP       " ) **)1AC+IL7.5%.')04:$(& " $ (%" " # %&')$ $ $ # $ ( ( % & & "        " # % $ % $ ' ) ! " # # # $ $ %%% $  ! # % % "  $ ) * ' $ " ! # #         " $ ('''" !% + !-& ( ( + !. - ) % !!' ' ( ' # " $ $ ' ' ! !  ! # '( % & * *$.!*(( )(& '% ' ) * ( & ' % % $ & ( ' & & ' ( * ) " ' ) % ( ' ' ( (1OSCX[G%0& ' ' ( + ) ) ( "* !, + * * ,!*!+"*!,!*   % ) ) ) + * "+ %/#. , , + - %2 &1 !+ & ' &  '#+!*% )#)%-/6"*&,!&"%#(!&&),-%'%&!#""%(%!! & "+ , !+ !+ !, !, ) $ ( +!-$2,=&2".". - / 0 #5!2 . - + * + )*/. ' * ** , , / 1 $61 1 2 1 / / - . /--$3 /, 2"4&6 .#0".!-$-%-)4/:%0#1&5+76?#-,2+32;*3#0/// / 0 1 0 %5 52 21 3%7/B6B3?$6 %7 !5 6 '?7O0E#1,;3A'*8$5$4&5)8+9)8*7*9'5%2!1!2!2!2$3"1!2'5"3*5*5#32 2 2 2 2 $4#2%4'4!4!33 210!2"3#3$3&3$3"2$3"2!42/ 12!0!0 121 . - --"-#-$.$-%-$-!./) % % '"/$1&2(3+5.5.4+1*2,4/6+448 08.9)8$7)8/548 HK8CD028>?'WW?XX<@A#QP4PL4D@$SO8RO3HE%KH(JI$AH!7?>C!CH$HG$GG$IH$LK%VS(b_.ZW*SR'DEII$A@ ED!JG(CC#<==@=@ 9>8@3<7A6A3A0=?I,5A!1?(<5B4?5>@E>CNM#g_:h_:~uPe]gwyY_b0X[*VW+NS%[[.OS!EK;F0D(?)?":*=641 0 35"3"6334!2(98$4#3&3*5$4&6$2'54?1;/;1<7A$@?"FB'=@ G?J:GJR+>HAJCG#FG&HJ(QQ2WY?DK'6D8BC#=C$?E$5@:D(:&7':%7*<4C>GDLHNNY(Tb0HR ;D4>'!/<=H[c=T^2@H6923/0<9D?'(           */+$*(  3&                       %&5,9,9-92=2<&5, ) $/08*6"2.+ * ) ' !$ ! " # # $ $ !&) ( ) ( *%/%/ +)!'* ", )"+' ) ",")' ( ) !+) ( & $ % $ " #$ % $ # # %$)'!(!(%+%*%("'!((& (")!( ( ("+$-7>:A#9?28498< AF-8;"@C+8;$6:"<@&27-3+1)//3+4-53:>F&6@0<1:?C#IK,RT8WZ=egLwy`^_Bpu`|okq]Y\C||fegOUT3[X7\Z=^`LVVASR=II5ON/85%0.0/6488874396;7=8 :563506100212062;683;55084"EE4:9&210/,-0.*(*(.+.,43#53$:7)hkcSVJQVB_h\agaFLHEHGV]YLQJ>B621"+((&*(.,+(&$&$*'++-, 20"/, ,**()&+',(+'+'.(.(-'(%  cdTsq^~~rlk]TP;C>)IE0HC/SQ7_^IIF0=9&A>,><++-(     $,,++))%$$"   ($84'=<-BB/SX={XXouhv_Yb>\g>q}TgrFiuL[b?ajLt~\u_V_D_bEfqQcpXЃ~>FD ('      !"*.,6:6<@7+/$24$9:(y︻Įaeu8=M*  (,   %17*+9    '%&).,&&,+))),+' ,' ҿx{}r`h`|}SS^  $ '!)& '$#))'-/2^]NJM<+1QTCAE2 )"  ! !  # # " ! # # &&' & $ $ ) ( & ' ' (       $ $ # $ $ # ' # & ' "   " $ $ "    # # ' % & ( & # $ # & %" ' & # ! $ $ !          *!,)* ,+*' * ) & ) + - ( * &""#$% & ' $ " " " " $ ' $   ! # # $ & !+#, *& & & '$# % ' % ' & ' ( & ' & # $ & ' ' ( * * ( & " " $ ( $ $ # # % '0NT@0<& $ % & $ & ) ( ' ' * + !+ ","*#+#-", *) $  & ( ' () + + , - - - + - #1 . * ( ' ( * !- - !, ' & "*&.$+%-#("#'!))...- $  #"$!$ "&($   $ & % & ' * ) * ( & ,".$2&4"- , , , . 1 1 0 - - ** - , , . . ( ,-- . . . 2 2 / 0 0 0 / . --.!.$1$3/.+ ,+,-"0!/ ,!,#.0:)4+5%1"-'2*) $1$5&6"1!11 / 0 1 2 1 0 1 #8%8'; 74 5 "9%6 "6 #4 "3 4 .H3I.B#2ET=8I+'6#4(<$4#1+6&2#0%5#3 10 1 !42 0 !3$2$3 3+81@8B19'7'9"43 $62 1 "4!3!3210 2!1!2"1"2!2 2 . 0231. - 1!05?7B!39:<061:1/ . / .!-#+&+%*$-!--)) + ( + .1#3$1&3(6#4$5*92;2<0;$8&7+;.<3D4G4?!,7FL8MR?FK6TWGCE5=<(28>@!@@#@A$9?@F":C1<095=4=:B9?JM+^]/WX%UT+MK*KH)NI+PK(OL(OK(MJ)IE&DE#EI$;E6A6@1=/;/80;,=IT9gq]]fNHQ8GM):D0<4A@JOS(WW+ni;qj>qa6ve;pgchA[_9Y`7DO$AL8C6B,>)<.?5A-;3!443!41&2&5$4441#4$5"3'4+6#4$4)8+87>2<6=9>=CAC"HG'HJ$=A68?A JH+UT>]^FQT3CK!:E@J!DM&HQ)7@:B@F#AE#GJ%IM(@G$3B/=/=4@4B3@1>8C7C8E9E8G:H7D9GDN-IR4OQ.GK&GK 5;1:.92?6A/=1A-='51@2=8DAKHN"JP'AN;L>H7D2C6A:F[b?`gENQ)5@#7-869::76,0*,"#%'   (  &    "                 %5%3(4&2(5-( & /(5*5"0,) ) ' ' * ' % $ $ $#%( * ' ' )*& (!+* !*)'( *"-'2'0"-$/'0=*lnXwzzjRWU184GKC`c^vyqbeZFIB$%$     -.&99*?@+]e*(1,306IQ>_iMGQ?bj_bjU{WWa       ##*$*  ' '&*9:">?()-ef[=A-##")%#  "   ! " $ ! # %&$ % & & ' ) * ( ( '      ! $ $ % & & % ' ) ' $ & & & &%$ # " # #  $ # $ ' ) ! " ( $ # # $ & % % $ % $  " !   ' & &     % -,"/!/.'2$.+ * ) ) * ) ') ( *''$') !* ) %       ! "  " ( $ % * ) * )"+( ' $ " # & ' ( ) * & & ' ' & # % ( ' % & ( ( * & & ( ". + % & '$ % &2-7++& $% & $ % & ' ) ", ", %. $- ) ) + * * ' ' & & ' ' ' ( ) * -. 0 !0 #3 + &$ &% ' % ( ' ' ( "+ ("*(-)-(+"'#%#$"$# !$ !"$#&$!"" $ $ % ( ) % & * "-* ( ( !.'1"-+ + , + %1#1 / - + - + * . . * . + % + () , . 3 / - / . , - 0 , , , , #1(4'4#1#0 -%0"/ -++,) ) ( +#0 +(1!-)( ( .1"6021 0 121 / 1 2 1 3 !531 2 3 4 2 1 1 3 !5'?8L)/(7.C-D/ 0%4$3$1#/#0"2 210 360 0 )>+9/:&:,@1D.>1=0<'6#4 4 "5 3 3 3 3 5 43 2 1 !1!2 0 1 2"3.- 1 2 2 / - . - . / 0 +6=@$CF(?H&10 &6/ .-!*"*&-&,),0/ 0 + ( ( . 1 43!2%8);&<&;-;#9#9':';)=%:!5/@?N-5E"1A4A ;B&7<$+57;9>:B7@0?0=-8,91;5<6<>F!IQ)HL)EG%NM-HG%MK'LI$RM([Y;XU6RP.QQ2KL(EI%HM&DH%=E!4<:BDG&7@0<1==E#Y_GdiYY\BCH MO&AH8AJR%TY&OUb[,i[6h^`e;S[1bgDWZ5PT5QX4DP$-?3@/=%7$53 3 1 50- 2$5#54%8 3"5&7'8%6!4'6+9,8,54?1<-62<?DBB&NI*MH&KG#LG*IH+ST8Z]BRT5IL*;CE HK*GL&BG#9B?GGJ#IK$GI'CH)8E7E3A5@8C7C4B4B/=0A/?-?/@0A1E:I?D;BGM#GO$.9+9:H8C=EBLHP%Y^;RV4MR0SW7CL!7J9KV\9OW.MT'AI6A5=;>;;8:67:7<:9876)*      "9$1F. 5"!.     $*               .9,81<+8,( & )'/,1"-%-$.-, !+#. /' ' %( &3#2.8=G6B/* & ' '")**!,$0*72<+248/4-3DI*0807EK.ST7edJnreio`PVE;C')42;yxnrsgSRA@?*03)-*/(/!,,'/)0)/&-( )&, %% %!&#' %"% % %#!!#%&%% %%"""!  $!%%)!*#)#!!!! "!$!%  $#! % " ##$&''(''+*-,++66('(()*,.203/04385>;">;"?9 =9!86#9451716284;6 421/,+-,)(-++*+**(,+**$&#% @?-JJ8WXJegZ[^Q^bP?@2BB5/,-*31 74#32%-))&)&+)**,,'',,,+$#('##(%#""!'%&##""!!"%XZ]\^aHJO;=B+.3   jj_wxh:;(><'=>,`bU|gkl#,/   9;/\]U{{k*+,     & "     /4)*>A,DD+EG-WaGxednULP9O[G|jteXcX"!     %(`d\ᡦ(       %%      $. -2 02BE9LNIMW3CMO`'y`usx}x\\d    ! ).;,#7!0",%+)-&)69'$+1+1!($!   " $       " % %$ " # ! # & & %      % ' % % & & # # ' & $ # ' ' ')23L;C4?48300")&# $ # "    & % % & & ( $ ! ' %    " " )( & $" !  % ' ' * * .+ * * , ", ) * ( ##$"$$# $) ( & & ( "       ' & & $ & ) ) ( ) ) & '& & # !+ ) ( ' + ' & & ' & $ $ ' ( ( ' & & & & ( ) ) & & $" % 'DL.#/($ ( & * ' & ' % ( ) ) + ' ' ( * , + $  $ % ( + + ' &%&'(' & !, & "$$ "   " " # % $$ " !##(+,0.!$# !"!  !#!  % & ) ) ( ' ) ' , !/ "1#0 / ) ( . . + "/ / / . !0 !0 !0 * * , - , + ' , . ) , - . , + ) + + + + - , + , - #3&5'5%1%3&2$0 ,!, * +!--%3 0.*) /* ) +* , - 1. 430 10/ / 1 4 4 2&8'73 2 2 2 1 2 %:0G0L4P 1G&8%6$3!10 . !/#1"0!/#3 211!2#432 6 &A$;!45#8)8%9$8*9%6"6 6!5 4 !3 $4 2 "1 #3!40"1!3 3211///./ / / . / 0 0 0 001110../- /*5=,3/618#1/0 0 / / 3 0 * * / 3 4 3 !4#9#93 5 4 6535 !7$9(=,D,?.?$;.@0<+;+;+:-<*9%5&7,;/<2=4A5B9B =C"AD$HG(QL/YS5XU9a_CWV8XY:VV1dfDJL#FH"EE#?D 3>2;?E CF#BF$=E"EM)OT2chSikWoqZWT.BC8@:BAHJOUR)]X0WR0_]B|evw_US1Z]7RV3rvVgjHTX5E%-:!3 3 3'7);)@3E '7"5#4"9,>&8 5':&<,=0<0A%91<0:1;0:7; 8;5;=CHH#LI&KF'GC%IF,GF,AD'=A>D"AF#>C BF!FH$HJ&QX9HO/8>>BCEEG"?B"9@>E">G"?F >ECL#DM'AL%LR2QX@@J*6B2@9F6C/=5<?D=B@C;@9??E">E?H?G=DCM":H8ICM>G?MLU+MQ'LP)W\>QZ5@JDNAJDKCC8?;A:@:@8<48173<8@==:9       #/+.>7NURIRK1?465        # "'1:.:*54;.9* ) . - %."- (0(1&/%/)/#--!/) *$(6%3,8VXE`iQ~lwfxbjx|^c\  @A1ikVyoX[EHJ6bhVpsgx}o|EISZ_Xa_Q[WRXW\]_ggkppv      ! %("2)"/!,)/#*37(-&#+)$"     !        ! ! !  !       & ( ' $ $ & % & ! # $ ! !  " # " #(J8L;H7F6H7E6<42)<.B43.!%  !  ! # # $ ' $    " "     & ' & &$%$$%# $ #$ $ % ) & ( ( !- ", ' " " " #+ , *  !# ! # ! ! " # !    $ %$ % %#$ & ' % !  # $ ' $ # ' ) & % % % ' ' ) & % & )) ( & & ( ' * !. &  " %" *7A"!2$ % #$ & ( '% $ $( ( & ( ( ' ( ) ( $  $& ' % & ' ( )'%$( ( %&&&$ "    " $ % % ' ( ' ( ) ) % $ ' "( "( !'#"! ""  !   # ' ) ' ' ' ' ' * "0#3(? 1 !/ , . . . * , 0 / . . - - , - 2 / * ( - . + + , , , * * + , , , - , - - + , ,+ +".&1%2'2#/".#1&5,+ .!-+* "1+0%5!2. - , - / 0 . / "1 0 0$0"2!2$3$5%4!34 2 1 1 3$8%:,D0J$.H (>)B*=*=&:"6"3#2#1!0 211 //- / / 3 0 1 3 333 3%7&7);(9#65 5 6 4 4 3 3#42331001 21./ .0 1000 1!1#/%1)0'/$/)6/ 1$0)4".,2'/02$2_`=4!333 64!52/ ) + ) - & . - / 1 1 2 . / . 0!4%5%5!4,?%8(9*8,8(9';':)8%86 5$4#7(:+:,71;2;4:=?%QS<^`HVV:XW;LK+MN*MO'CF =@:?1;/:1909.:.:/<3>U\3=4;099@ 2=2@4F7G 6A+;!5):+;4=(7$8$9,=@C(6>):(92=0<4@7>BB%9?:>FF!JF%JG-C@'CB'CEL#=F>DGE'JI-AD&>A"EF+EI-ED*KJ-?B$7<3:3::>!@C*FI2:A(=E(LT8LT6:H!;E"+6+2)7.97??C?EHM&OT'NS%MU$KY$ET"I\%GZ!BXCU";LAN@JAHFGKN%HI"EJ >H;C9F7C1C2@5D0B:F-=8E FR09E .>0A3@0:,5! '#&0)/5  *)-/)+""!%23485:8::;9@+9"1$2.+ ( - . !- %/ &. %- $1'1&4!0.. $2* * (40<$68D>H5D'4(3(4-8-7/8)8);KZ3r~fʵoodNS17F=CfiOt{|hvlq[SX9LS15>$/&0%-#*&.'0+0'.)2'/)/%.#- "* ) ) ) + !/ "3 ".#.&-&)+) ) %1,9+".&3*) #/'3'11:".+)!-!--77A(.82   .2#VZNrvm~޻ļ[dfKQWIMS'+5     "  ##3;;HHHS        ''-(2'3/ + , + *+(015-2/3.3+1!*&##$         !          !&*!.+'  % % & % $       "H7N8"V@#T>"P9"K7!>2<1A3I2#E.$;.1. 0- "&  !  !         !   " $ ' #+ ")'&%%% !#' ( &&#$ & ( #  " % ( ' )              ! " # ) '& ' & % & $ & ' ' ' % ) ' ' % ' & & % $ % ( ' (+*(& ( ' & &$!!% " " (.5#0( + & ' $%(( ( ) ' + ,* !, * ' %  *  " & % % % & % # % %%$$$$" ! ! ! !!"%&&(()*++'((( * "&"& &"'#(!' ' % $ " ! % % % ( % $ $ ) *,$2"5- - - . , , -+ + - , - - 0 1 / 3 1 / , ) ) + ) + * ) * ) * ) * ) * ) * + ,+ +)!-,9/>)5$2$0#0 1%3 0.0, 0/31/. 000 0 . - 2 0 , / , - . 1!2#4#5$4$4!4 32 "4"5"7"4$:%<$8 3#4$4&8"4#4#3#4!1 1!12!4"43 1 0 $ , & * & , . 45 3 521 3 2 23 43 22224331//#2"2 2"4%5$2"1 1!1%1)1'2(.'-&-&.&-'.%+$*&,05)+75,,*,04-5%6!7*8+8"3 5!5!.111 3!20 0 -. - - + + - - .-. / 1 - 2 . . 0#2$2%5&6%6&5$4$3!5"82!3*649+4(3/48;&GH6PQ9NN3ceOcdJGI%9;<@5:DK+dgOFD"KO)2>1>0;'50=6=4:9B$LP6OT;.@*?$:1#54<:>!5<):)<,B/B:A7?+:/<6?6A:D=FAD!IG&HG#EDEC!HC'LG,EB&HJ$FK"AI$EH%DH MN.@O"1D9C?B$LL4JP8LQ;PT?;C&29FK4JN7:>".5*4,2'-)-,2+1164;3<E!7@'0   "),'2&72;4814?=AC8@3<6=7=9?2</- + * ) , / 0 #1 $1'0&/,6(4+8-8/ / - ) +38-7>FTY'T['6B,8092:)5+:4BnyYü{g>I&.A9F;GJN(?A$;< 6:<=!69-3-4/6/617/7.6+5.6*3.5EJ.NP;QP0OR/;@:=6=?F$CD$;B5>5<6?7<5;/9FK(NQ1aeJqwaCK*1;6>0;.:.94=9>6?,86<=AAF%VZ9=J+/='7&7&6&4&51=8F%,<&; 7!4*96+<%6#7+<0>-<,=,=3B>GEIG&LN*?D=ADFJK#LP->K!4D/@>G$NS4=L>N"5G3@1?0:1:1;0:09/91:8;38,3<>$>A'=E/%*"($+).1367-3$-#/*5:EDI!KG%OL%OP#QT#T^(IS GP"cjH\dBU]:PX/@M!?N!=M?MA'FE/<<"7:39+3&.(0'/&.$-#,$-$-*3+4)3.7/65=HJ)UT8MP5.7*1&-'-(-(0'1'1)3(1*/*1(1(1(1+5&1%1.,"-"-$.+* ) #-,* . .. %2'1".,(4&3*+".+ ,) ++)6;F)QX@`eRUZEHO:~ҷmo]{~s~UWH\]M<>&9?$5B)9 - +)& ' *!-(!)%*#)$)"'!&"'!'!'!'#'$'#'&)$'"%'('))*&)$)"(%*/4(+1##)$#" ! !   ""#"$"    %$)')-,1-0-DB3vwnA@3=:,:5&73#0,30 1.-*/-+(+(-*!#)''&$$&'"$$$  """$$('&%480%(&(+,01,,-++, '&""%$&%&%%&#$#$#$!"          +.(bb^qui&))               !=>1#$#   73$C@-KJ6Z_HadPvVZ` :>: !2;6|Ȃoxt2:,6*2&/27+3)1#* ' &""'"                 ('')"-) ' % ( % ! $ $ $ "  $"L6"N8!G4L5"J4!<,8-7*L6 N7"M7!9)70'(  !     # "  # $ !      " ' ( % # $ % $ $ # & " ""# $ " $ !!  ! #(            ! $ % $ & ' % ' ' % ' ) ) ' ' ) , ) * & "  ! "!# $ $ " $ $ & ++ * ) * !   " " ,**! #% ' % & * , !/ "/ $/ + ( ' ' ' +* ) %# $ % $$ ##$$#           #   ! $+4%*'' !)' # " $ * * , / / - !.$1- / ,*+ +,/ . $10 / . - 1!421 . - . + + 1 ( ) * ) ) ) ( - , ) -.+***)!*!*#-'4$3!0 3!4+>! 3. - - , !10 0 2!43 2 0/0 0 0 / / / 2 1 1 3 3 3!3 43 2 !0!/-"-#/!/ ."1$1"0!/!/ / 1//. 3$5#5$6$8!6 53 2 (  .!30 31 !4!5 4 4 #73 4 $5!3 23#4&5%4111.-0 1"2"1#1$0#3'5/9)5%2&2%1%1%0'0%0#1"2#1$1%1%0%1!2#4%3(1)0&.%1"2!0#321*1&/00 0 01#3/7 0// /!0. . 0 / . / 0 0 221. - + + - /1 2$5$3$3 21 2-7<>(.8&4%0@D5Y^NJM4PU;fkZ{|jghO_aBHL,BG%DG!?B!795:68:<:?:@Z`@mqUx|dhnX7A>D$3;.:.:/9-:/;0;:>=A!0;5=HFK(TVBBF*7= 45-19: GG+QS8XZBIL1GG/AA-     (,#*)2?@.7%3ADKP"CG7B):- (136.8 0, , - . .#3,5,2(3#2)5%51$5 /011 , 2 :HDO U\&V^'^e+WZ.UU.SR,CE"TO-rlUz]F^3!;"E '<"6'@&<#8!9)A6GJP4iiXom]rn_pnkFKS:I/<(1%"*'!(#+$,+4/9MN-uNQ1OO5EE)II/PQ9Y\GdgT9="/4*0'.(-%+$)"($#)"*%.6>8B;D@H$6?0:&-$-!++*) !(-, "02<'4- /)5TU;(C?.ED6FC6qriosn    " (2:diaPTB^dSw|3:A+2:""/**4HIKCEG"  !  %(+2 GL27.135&+"* ' ''.!)&&"         ! %        ''((% ) & % $ # " " $ # # " # 6.A2G5H5H4 G4&CJ2DH1glVwtq__=EH'fhPbbJWY@KN6UW:@TT>9>"8=#8<299>8>FH&Z^ATV;MS8LS51B;I$:H#VdAAQ#0F(A)=4>4627468;1:&3$2$4)4   #"'"%%**-'-#.!+&.FR'QX*UW(VW(PO&EF HP"X`,W^-OP*KN(OL-abFWW6c`DegHrx[u|_pz]U_;8D5D7EBP%JW-7G4A8C=E 2>2A7?;ABEGG".5$  !(3#@K;'-!  #=)// # $ ' ")06*6 09AFI"9<5A#0 (.0=<8?+7!2+ +-!0!/14.7"/%2"0!1 0!,$,%/$2, * * . . "1(7@H eaAjaDg^;SP+VS/[Z5ZaAD!6;)4$1* ( ' &&& ( ' -. .#/!-) - -(1%1+#/"--+,-9C'inX~uy]aGuyhMUCAJ1|xnogUTGdaQYV6OR-'1#.)1')&'&$ # %&#"#% & $"%"!!%&+&.&/%*!#! "##$#(&    '"   !"""!  !!#!"$%&(!$%''(**(()( #%%$$(&,)0+71,*$&((*+!#!!&%""!" ##!!#!!!$!##%#%)+')58(+-**##"#&%)),-35'/2& "#$$$####""               fj[w_hS  ,%/(6.LI4lo\v}i~mr{[jrWwl}|]k]YeQWcNsnj}fpk^oV9@3    .,%FE;wuo}y""      !@D9lojAFM&,5!-$+@ "    '     &! (&1:$IO@]aPRWKyY]LPTAEK4FI3[[FFJ0DG*IH(:<#(36-0&*&*$*"*(1%" $ !      !  " %      ## # # $ "        ! !!!!!#%',+-'?, P3$W:%T8$9'6*          ! $       " ! "  % $ $ $  ! # # $  !!  % # $   # #"%!$&+ /+ ' !          % & & % ' & ' $ $ % & ' % ' ' % " ! ! "  " ! " " ! ! " # # $ ' * ) # ! $ ! % '!+% % % & ( ' ' ' ' & & & & & ) ' % & ( ) ) & * & ) #  "#$ # """ !! #      !           $$ & & $ " # ' & + !  # % & # $## # & & - & % ( + ++ + + * * - * + * ' & ' & % % % $ ( ( ( * , - + ( ) **+ ,($&')(+,)"0(90F8R3E*; /"1$5!1"0#0 / 0!1/. / // 110 22 1 22 4 3 200!/. .!... ."/$0%1!0"3$5#4!10 3!8 9 8775 3 30- + 2 5 $52 0 2 2 21!2#2'5$5!2 131 0 1./00- ."/!/ /. /(2%1(3+3*4&2#0$1%2&4'5'3'3)3'3'3&2+5*2$3%3#4 4!4"4!3 3$3#2#322"0&1*2&0!025;&70$3 21 3 2 1 3"4#2"1 10- - 0-,- - + ,1 2#315!3!2*3/'4:A"FM2R[EFM0HL4koaLQ7MV9y|jhiN~t{`j{yw}ffmNxcjbhHEQ-/A,<-=*:*;.<-;NV<}sRXA:C%-7/:1?,91:095>=D$?G(5?,:1>2=2?3?1=3>5<7@:>^_KY^I3:.3.123OP<;=$CE,@D+CG/]bMAI,&5'7/<0;0</<-9-5/6,4-0,0/3/207*6&    (1#0#1!-!/$3%0!*"'&,.94@8B:BF>D@F FG&IH(KH*GE'CD%AB"OM4XVA^aJ_cMafOSZ=DM+BI)U[=PW7FN+2?(b`Wfh^.3.3ML4:C$?H2+@*;"9 3 / , , * - &9 FO#NS/lpT^fDTe2hu>[{$]$\!Rv&`3Qo7;d1^3X+F)C*<5DQ[1ۑ~HG)CC(6723280:$)!&#)+/598<C-,3'.;=*cbN>>(.2' -( )!,*!,' $ !     ""&&($'#'%)&*',&,(, '%#     "#!"     ##&""!"" ! #$ %#%&& !#%%&&('(''%&$*''&$$*())%&0/ 10!$&,+,+ ""$!%!#!##'+-/ $'!$!")+!$'(*)(*&& "!!!.1#+,'(&'##         hmZpd  !3+NL3hmRjsV`jOafImxY{yrmkxjijhw]MW@>I8       "!        &)BC;bb\"&- %2  ! '9?.KRC5>-'009%ek\vylrti`cTX[L4<$/9DK1uwjddQHK1))& ' & ' ) ) ) & % % & ( ) ( ) ) ' ' ) ) ( * * ( ' ' %!"# # ""!! !#" "  %""&!    " !      !    # " & & ' ' ' ' & & ( & #- ( ( & % $ " ! "      " " #%'( ( ' & & ' & ' ' # $ % & $ # % $ # $ $ & ' ) )*& $&*($ &&'(( -*'),&7,?.@4F-=(9%6--".+.#/0.//. / 112!0- 0!1"20//!0!/#0#/ .//$1$2"0#1#0#3 2 /0/ 2"9":9866 7 8 6"62 3 #5#4!21 1 221 2!3!3"4%5&5$4!3!32 1 1 110/ /!/ . /$1#1#0$3&3%2#0$0&/%/%2&3(4'3&2+5)4'3'6$4&8'4'0&2&0(0&2#1#2&6'9&8$:#6#6 3 10#3,:!0"2 221 2 1 2&7'81/ - . 5--, , , * * ../"3.$4*7,625+57>%2<?D'EJ,CI,LT9oxiJQ58D SZ:]cFuu`yyg}}vzkhlLv}axduckNDQ'5J3I8I;J!,>4@*7?L-5C"BN3$1EP8aiSipZ;C#5?4>4?6@1>,8+:5=9@;@CE)prb8=#)2CD.HH4HJ8AD2#($ & & %%%'#,,04BE/9<$7<%=C-5:"37-/   $'1"/$/$.%-*2%/%+'-&0+44@5>6?:D;F>GBF">DEI&FJ)FH-9@ 7@OM8hgYdgVPT@UZHciY\cOU\FAH-MU;IM6DB*1413"(*  #" )")%,'C,/ &$,!* #+"*% #* (/)1.1.0//..-,%,#+&.%. '!%!$#)#1#0%0'2(2%3*6$2#0"."0* ) "+",!.* ( ( * * . X^JwwrstjAC0OM7B@'}ѥHZ.*D&8 &< #7 . * ) '34@1=4?Uc7nzYʾɼʻ®dx7BjUoJeD#qu]y}dwy|srudHJ5BL.DH0)-)/,19<JL/>@"X\7OP.=< #)',?>CD&14!) +*" # % & + )3 ,499#+1-:008+4#0.' &       !"$ %"'#(&&* ' $ #     "         #%#"%!! !!""  $%&$$%$""#$%&$%$%!#!" $%"#"#"% $&&'$% "11"==.()))$&" #!!!!%"%$&'(++((')17,-/ ()&&"# !$$&'&)*-'+!# !     8=8    52NN4KM2MP3VW9`aH{h}tmomzefuZ`mPbnPVdKAL9             HHHadf#*(    *+>?5KMD{򯳹NU[;AFAKT  3:&2;#"*1 *#+158;,1-1/3#)&%) &&&# " ! ! # $ $ # $ &   $    ! #                   !" " "#!     " & % % & # !  ! &# !      !    # ! ! $ % # $ # ( ( ". + ( & &' + ' $ %& ) &%&& +% & ' # " ! # ! " !# $ $ ! # ! ! $ $ $ % ' '$ "   !) 2:!9?)# ' ( ' ( * ' ( ' & % ' ) ) ) ( ( ( ) ( ( ) + * ) ' $#    !" !    ! & $ # # # #%!     $ % $  " % & $ # $ $ % & ' ( & ** & ' ) ( ! !) & % $ & % # !   ! ! # & ( '%( )))' &%% & & % $ % & $ % $ & % & # $ % # # & ) )(%% $ $ &'&%$ %+()).,+ & ' & ( ( * * + + . - -/ 0/. 1/// . 0 1&3 0"2"1"0"0"1 /"1!0. /"1 /$1$3$4(5%40 0 : <<;:766 7!8'<%; 7$7&5&5!4 2 2 2 1 12 323#4$3332 4 4 2 2!3!/!/0#/ .#0(2$1#3(4+5'1#0#0"0&2'4*4(3&1&3(3#4$5#5$6!653"3$3*6+3(4)6(5'3#3!1112'5'5%."12123 32 1 2 0 . 110 . - - - . - ( ( * --- %2)5 1'1*50:5=!)72=CL%EL)NW8RZ@9F$HQ3;H!hpXtNV;NU6QR5GO3pw`quyjdnNzd~`lIzg_gDow]gpRGS'8K=K8G5C5A/;.8.8,99C$ZbJBI(FP1BK.lra>G)1@:E9E7@2?4?EM3DI/1>2>+:/;3;BD(}qWWF58NQ??B--1"    $(+/?B-NO;=A))0$-!   &0*2(.+-*,).(.'.(/)3+71=3A6B:F>J;F9E:J9I9CDH,;A!4?2=V[CHM0FI/dhXszku|jX_GDM1;@#EG1#      &3(@+)  %+!) ' ' & ',7;?A!2354:59350.+$'#%"$ $!'#-*-,/-3+2*0153=9@)61>,9"0( ( ,"/"1, + * , . . ;A)W[I:C,jk_`dQ3:ZaK@O)/G#9 #6 $4'%#+*/3<BF#Wd>~uʺe{BVl4qUlRi{P?K(3@=G$8D,82?FN-\^KоsuhNP:KK3-2#/7=!ZY=_\>JI*0203.1;;-3$- *%("& & & -8< *3 , ,-8.:-;2?+98D/<9E,),6B'QY>;E*&07@'LQ=-86?%(&%$#(!+(0,468 '1 0 1,8$0- ( & "       !#&&&%#% & ( %     %))* (!+(,#)$ #" ! %$%#$$!#!!! ! " "    " "!$&"#!"$)*23%(),,)+$%$%$%!"**))$$$$%%+*(,!#"$$%"$#"$#%$''()%( #          IJ.agBr|Ux\steZ}\w~Y~]s|YisSXaF]lSTdL            &!!$**   Sb>gzXʴ}׹ς &-     !+#.2:#Z_NqvielZEN9'?D2KO>[]PMO>suladY;?,28!(0%.!..739(/'!*&( (#+%, '$*%# # # % ! # # # $ ' '*   &*# # $ !   !                       """##%$ '      ( % # % #   #  "  !  ! ! "       !$!!" ! # "#') / , ) ( ) ( & % # &%& ## $ ( $ # % & #   " ! ! " " ! &%    !   $ % $ # # '  ! " " !*)2& ) ) ) ) ( ( ( ( ( ( ( ( ( * * ( ( ( ( ) ( ) * ( % ##"$! # + , ) !+ , !. , * # ! $ # ( !(#(!'( ) ' + * * ) ) ' % " & & & & ( ) ' ' ) &   % & $ " # " ! # # $ % # % ' ' ' ) ( ( ) &'&'' ' & % $ % % % & $ & & $  " " # $ % '% '% & % & " " ! #" " (+& ' *#2,' $ & ( ) + ---..#./ 100-- . 00 10!1"10!0!0$2 0/./!20 0"1%6%7'7(8%834 8 < : : 9 9 8 5 7!8#:'>%<%8"431 53 1 0 0 1 1 0 33 223 55311"2"1$1"1!0"2 0!/"1$8"4$2!20!0!1"2"3#4"3!2(3#4%5#4#4!4555"6$8#9'9-9(8'<$7!2/2-00/// / 0 0 1 32 1 0 / 10 . / . - - --!.+) + + . 0,5/6"1%3%5&2+86D 8E;I#EO*YaEPX:4F!3@HR2LV8[aKJT9@J+JQ18G#[fLT`AHT0[dEES1kupzhwmy\O`9m{\urxVT[7irMgoMLS,>J"GQ1AK-2?/<:C#7@?F%LO0EH'6=0?5B;F ;C$6A":C$,;OT:kn^_aR6:#KN>MP@" "'(.,2)016(/   03,*#&-/.213(1'1)5-83>2?1?0@3D0C9KAT 7I;DAF(QV>5G*<2ABM&EK%7ALQ6dlWV`D^cJIO7%  "    ( ) &,).'-.0+++)&&  $#$$23,3+400522;6B0>%1,37@4@4A%3!*#/* +, /"2. 1 1 - , , !0*,5fj^lsaȭPc>%8$8)$#!/4;AIO0d{hY}]U|Uvn{{YvXEqBb[yb}K{hK^5WdFVaBT[=biMYdE@M(LV7MU<]cObgW}}qon^08(5>:C" /# 4@%?N2+%0**5&'&%" &$ +#/",.5-6/ %5"2. * % $ " ! ! ! " " !    $ &#)#)#( &!!  !     !ி)+,, -)/$*"'"%#$!# !"###"!" !  ! !##!$''('()*#%)*))$%$%''((%&/-%%$%#$!"# !!"$$##%$'%('&&$$!"!        AA,jwOpzW_iDu^_fNw~j]cSnz^zrivzU{~TrzWq}[waiuXhsT]hMXaIXfUZg]LPKFHF++-            "4Y>qjŪȽȽymS^9IV(IT(˽אdil&*2 ().OSFDI;;B3TYM&,KOEBF6FI5AC0MP>CJ5+5!*$,(0)''!+%,(% & '% % &!( '% %&! " " "  ! # $ % #             (' $ ((% % "  ""#& $!                ' ""!#"# " %    ! ' ' & $ # "!) # #"  " !  ! !  # %"  "%#!""#$ ##$&(. & ((), - ' "$%#$' ( $ $ $ $ $ " " " ! ! "  !     " # " ! " $ " # # & * ' $ # ',4%/) - ) * ) ( ( ( ( ( ) ) ) ) "* !*#,#,( * !* ' ' $%$!!#! ##$"!& - #3 * & ' * !. + #. #- %.%-"-#-+ ( ".$1, + ( ( ( / . / - ) $#,) ( ( ) ) !* !* ' % % " # # " ! % ' ) ' & ' & % %%& & & * - , ( ' ) ' ( & $ % & % & & % & $ ( ! ! " # % % ''%% % & & $ & " " !  ! $ # % $ ( +& ' )' * -!/!2 /#0. 1'8 3 11.- /"1"010"2 0!1"3 10/0!1!10%4"21!3#5"6658 9 : :#:85 4 7 ;3 !6$95 6!7"513 30 0 0 / 2 1 1/ . 0 / 1 4 2000 0$3#6!3$5#2.!1!4"9!1#210 1"2%4%41 2 2#5$4!43!5 5 5440/2"311/../10 0 0 1 2 2 1 3 2 2 1 1 421 1 / / .-.0!/ /.+ - , - /,5-8&3(8%40=AN12B;J'=J"GM)NT5CN,3D&:-AS^@ZbGqxdLW;4C /BGZ54E6D6E4FQ^:CT+ZhGK[9XgCOa:-F:M!=M%O[3zd^iEQV0W\9aiMx}j^cK:C!9F!9E1=;E#R[A=E%6>=B$IM.8AFK(efJfkUEJ,9A"1=2?:D"?G(X\DceUY^LEN5rxhFK6+0 '  !#)0349$  101,-+0113A@),5&1*2*5(6*92=5B2C@L(3F6@:F AN*1D.?.=0=FM2hnZsxebfV$."            $+IQ):A! &%(!$''+(('%'#&+*)-+2.32312243>=H0<,:*7/;'3&4 +#.(4"0.#2$6(9"3 2!1,-&4%2.5UXLeu_"8*" $ '$.7A7A3?D(9A#'6&5(9(79C$chS6=#2;6?#)6)8-9*52>9F#?L,3A 6C#4B -?.>,;7FDO-0?6D.?LU7BM,EN05=:?3:@E$FJ-JN0`cISW>FI09?;AAF#9?IH*QT9_dM`ePTXBEF/VVAX[HAG1DH5@D1X[LQSAZ^L/5$  '.-1  #%--.,--*0-3+4+5&2&/#/"1&5&6.<->7D8D 3C4E,@-:2=AJ(;H&&60=9E$EL/MW>/8&(!   +,+'      #07HR"-4/4./))2-5/%(%("$!(+44135:2>3=;HF#5=!>G+5@!/;(8);-@6D;G4B&7'3-:,9/91<2:8A+WbR|x0H&   ' $ # &'61>1<=E.~8?4         !$1el_IQ>2?(nwiyԻnQYr9`j?CT)3PH_ ^i4FV%io:pwGan<1UD 943 + $ & (" )) '$'0/5-2%,%! %"              !   ! ))4)" # # # % & & $ $   $ %%% %('(''( % %(& %%!& '!'"'"&$ %#& %#&$)$.#-)-(- %$&#'$'!% %#!! $$&#""!"" ""   "###&#&#$'(++**'(*),+('$#'%#"&%('*((&$#      011223!32..22"21 :<-59,8;,48.OUFGK;DH98=3OUJ_dT[aOV^K]hSepYjq]gmYY^KNP?QVFA@/94$72""! [aZ,01        "/#$/%):<5ikirtqÒLQW%,   XX\TTY   -%/CI/QXC/9!;C/gm]SVB?F(.6$,#*''!)" '!+""$%(# #" " " ! !    # # ##  ! !!     #-(%%&(&#$%&(&&$#!                 # $ # #$%# # " " # % % ( '' ( ( )(*& (**)($!! # !"##$( + % ' & & & $ % % ( ) * ) * ) ( * ' # # % $ $ " $ $ # # #  "# "!  # " # # # " ! $ ' $. ", % ' *%.)+-' $ & * ( 1!/* - ) ' % & ( ) ) * - ' * !* ( )" "($(#( ! # % " # $ !   !  ##"!  # $ $&$ ! " $ ! " # " % # % $ ! # & ) ' ) - - ' % % ( ( & & ' & ( ( * ) ' ' ' % & ( ' ( ( ( ' ( ( ) ( ' & % $ # # % # $ $ && ' ) ( ( " ! # " $&(**+ + ))(( * ( ( ( $ $ # $ (*) ' ) ' ' & & & (+ ,.+-%5+ ) ( (' & ' ( ) ) +* -, - ./ /#2&3. / ., . - - - -, . - . / / - . 2@W*5K#"3 0, + + ,) * * * * * ( ) -- . * * ) * +- -!.,+*** + . - 02/ 0 / 3/ / 00/ / 134 2 . / / 0 1 462--0.+*+-,/213 4 321 3 433 2 1 2 3 431011.. 3$4!30 -'2'5'6&2"1#4@J-BK+/:?F%IM34;093;-7)2)5*3:@%8< 3816)2(0)2,2-4-6/8>F(1?(:-=&5,6292:/8(5.8(5/8,5&3(5/8AG%5=CI,UX>wxeMO27=?E&SW8FH)FG)FG+BC(RT;SU<;@$9?$CF.9>%+1'.05.5(0!)      %",$0%/(../,--,*-%.'0$0#.. (7+"21?1<?I.4=&",&(4*96?2:!,    " !  $)AD&GK,08   +2'-%$'0266*1&%,+18<9;9>7D7B9EAP:D^cGrxdp{hM\?4?l"fzGm}W^tBp}NcuURn26[3X ;&8%1 )&#! " '''--2)/02,/"'##   %      "*0 !-3#$,'!  ! ! # $ # # % $ $ % % % ''&$ $ % $ $ # # $ $ $ % $)&)"&!$" &)%*%+ &#'&&**-(0)2(126#.$-"*&&!(!(%'*%)$)%%%%$ $"#!# $#! $"&* &"&%'$&  "$&#&#!! #+-)++-00-.00,.%'--/.//**-- # #  $(,/255601)+.//1"$2368%KL6HI3RR:GH2>>'HF-GD*DB'NM4^[Ab`Ia`H[[DLJ2?<&86!6565&'+-.CED MM:   "$   795GHCXYS\^_"0EFOUUZJKQ* (*&019*V\Nw`bOLL5>=%;;"ML2DF-8=%$+"*"*"%%($ * *$$# ! !  !         $ $ "   %!             !%%#!%""#             * % % % $ $ # #%'%&( & ( (    &()' ( ) ) * %!! !!" # ##" !$ ' )& & % & ( ( * + ) -) ) ( ( ' % % % ' & $ " # " " " # # # # # & ,& $ % ' ' ( ",$,)& &*!+*)*%3+)50:%3=*18$)& ( ' ' & ('* ***+ % "+"+$,)(%-'-$)!($#"#" $%%$#     " !       $$%'%%$#"## " % $ % %$ $ # $ & %)/#4%2&.$+!)!) )( (()( +)!+( % $ # % $ $ " " " # ' ( & % & $ $ % & % %&" %("+&, )'' % $ %&)),* ,--,,, ..,+) ' (% ' ( ' ) ' ' ' & % % & ) ++*) & $ # " # ( ' ' ) ( ) ) , . - , .0 "4/- - / . , + , ,+ + - + 0 / 1 . - #2!2, / 1- * ( ' ) ) ) ) ( ( * * ) ) , , ) ) + ) + %/&0#,+ * ) ) ) + .&0-0)+ / 1!0 .!010/ / 0 1 . - . 0 - + /#2, -* , -, ,, - / 2 5 !6"5#5"4333 3 43 1 1 1 2 2442 . / 01"4#4$5#5 21#2'5!1!34B=F$GM//<3?/<.;.86<*5.73;/8=B$6<19,6,5,5+6,619,6,7MQ6DJ/(5)7/8-819-6'2'5*6&4+8,9,7(5)6/9/9:?EI,AG)-:4@BK)IN.TR5?B#;@ VV;abHpq[:?!06.48:!05#-+ &46A(7"2'3*5-81908-5(2+71=/A',%4<@.  07<>""  )'/2">?&JK+EH&4:!+    $"(#+ &#*%38>>:<;?:E&+#/)4*6,7:@?G4A.>/@1B6F6E3D#6):4@FL1]dM}q{qR^E(   +!3"3!.\aP𠢞&/('.)394OSP"#                  >HBmyoRaWFb>𲺰§v]@p'^@tTmULf9H`3,>&1%"*&!""&"((-&+1389!)-"&!           "$*(-)-" ! # # %# $ # $ $ $ & % % % % '( ( '&$%$ # %!(%# % % '+&,$,&/&-'-%,")"' & '&#*)/%,(/ +!* *"*!(#(%% ' &$%!' '&$%% %##$'   #682"%!$#&"&$!% "&()$'" !%!%!"((,*,,.,.!#..-.)++-+,,-,,++&' "'-.327-2+/,/02#&.0.0>?)QS:KL268$44;:<: CA%@?$LJ0DB'A?$;: 864311./01!:9!ZZC?A:  )!$,246-//BCB-.//1/QQPXYZBBE  )ttuHHOGHO66B   )jp_UV@CC*UU5>.:1?7@3>9C4B.?EP@QZE&/0#/=J>$0;  -#'       !  #134>@     (. HL!AE>I9I9I8H;K"6?=DBL BL!@I 9C5A(5$#1.<&5* +(-9$szgagc"$              +9,erbEPD>Q?a|`ℤvɽɳH~2i²uq^VkA&3' -268 57"',$ ! ',2468!77!?>&89!-0!          #"(&*/%  % # " # # # $ $ $ % % % % % '' (%*%+$ (")&$ % $ % & !)((",&0$.$+#)$*!) )")%($+ **&0#,!*$(%""& ($!$%$#$#!  $"# %#!$ $#!$$($(#!#%(" %'*'*,.,/),"*,-..0,-+,..**$%  -1.2+/-1.0+.+.$'.0&)==&PR9Y[B?A)/13488<>6687--4343./*+././5512 DB(`_JgjTwzlBG=  ",#'/   '$ QRXnnp;-;-:,;,7'4$4#3):-:-8/8/7,5)5,8%4-7,5'2)4&3.9/8-7)7)7*4*7(9(9)9&6,#%2*94A-:3>2:3;2;,8-:-9&1"/$1%1  +(92?:B!;B"FK,=I!:M/.KM^;AREHW/,4>!(=4*1<(3$' . &)3@AJ06>$      %5&6.A.?#3!200#6#2 0. - -"/"/--/"0"0%3%1". .!/".#. .- -, * * ) ( ) ) ) ( ) +!-%/ ./0/"3"3%4%4$3#1"20./ 000- /. . , , - - * / 1/ 2 2$5%4$4+;-;*:(:);4@3>-:2=1<'7)8,;3?0;+83<,6%6&7%4&4/5$*!+$/$.".& ''$/ -*&0&3+5'1".(5$2    )"-&2&4196<4;19%. #    %9%8/?>G#nq_uyfgjTW]A1>$1 #3)+(3 %3HLPPTXUV]SS_)+A "  1 )%      ,4/91:1<0<&4(4+:+=%7#/'(-4.4*3.73;19+7.;.;-=)5'1$2+'*3FI.KN3:@ EG.>C*LN68=;A"/9'5%5)5&5$3"3$4!1"21 1'9';$6#5"1 /$2(4!/./-!."/#1#/#0'3%0$/". -- , , ,* + 0/+ * ( ) ,,,++-* - . /!0!."1 20.+( ( ' * ,"/. - - / /!3!21!2 2'5$4):*:%6'7&7*83>.:,;8E -;&7&8&5+6-7(:'6/$             )$-,2 ( &.(0$")#    3)A-D/A=I$\`Bqt}fMW9.:(6 .   "$.##  #(.6@<'2/7C# #""3,+>..C:;K      (08,5",#%1)%3%)%)!&")*1,7/9,5.77<7B5E->$2/:KQ7V\ELS:"2+4JU?IPK  ")    4>2ƍnvlmwd7P-qe&6#VcOz֨TdD+E.?4A5A ,7+ )08DK(.8/7'/39<@'<@&;@'KN4ddNaaPPQ?X[EbeRHP54:#AD/acRv}qDI4!+$,$  " ' ( ( ,( ' ' *&1#-+* * ) ( ' ( ( ( #*( ) ,,* -!-"-)0-0,.(+%+ )&*' !-!,++#.".". ..$0!+% %'/NN0edF@#>B"FG*?C$2;+8'5'4#4#4 1 1 1$4#3/ /..-.!0!0!1#2$3. /#2.!.!."-(1&2&1'0#/!.., /#1+ ++ + + +,* ) ) ) * , * * ) * , !0!2"3, -)="4( * )** /2!1&2#1#0!1 1/ 1)7(4#3%6&6%5%5)8(82;2:+9+93=7>2;+8(5$5$7!.#     #  $"           )>+C+>/AHT*{b\eL2?'4& -"1"$+IKMbcdkmmyzzvwwFFO %"!  $) '%2=1=)9-.+%53< 0:DJ.AG*2< QWN')     &u}r鰶(D!"7L/Ge7G_;bp\ti\mNeoZ;M*5B")9)7/8-417#,"+5=)2 +)1;@%BF-[[FQR@]^MYZJMO@@B0EH4)005 LP@}tjl\9=)kl_SUF@D2MP@&&&& $ $ ( ( , ,"--, ( ) * + ( ' ( ' * ( & ) ,,'3$0,$/#/ ,#-$- +( * *+-!-'1#.$0((%#'-+4)5$-".5'0*1.3+1+126-3,0142503/3-1.103-2-105/4.311&+$ ! !" $$( %#)$* '$"& & #&#&# $"%$)#&!$!$!#!# #"%#*-*.'+(,%)(,(-*.$('+*,%)(,)-)-*,1201103255666636.002022446474805$4:041614-/ %/3=,65?5>NS5lmZ`dLlnZbeJklWlkX\]JUWJ          !(efhmmp. %%'%,#  !  #%(* $ !   $" &%#,   (   !$!!"%    '$5!2"0-/,"2 / /,"0,#!$ " $ $ & $ ',) ' ' ' -& % & & & # % ( ( & & * ( ( + * ' ,#1+ - #&)' ,+ /$3#2"0"0+-#1 / 0#3#2"1'5&5$2"0!0,/././-/100.1 3'8+<&6%6'6$5%4$1"1!0"31/ . . . /010 2"1.-/"2$3!/,+&# & & & $ & % ' * /1>#1' ) ( ' ' ) -+.,**( *)))'(** ) "+#+' & % % % $ $ $ &!.*% $ $ $ " $ %$$"$&&&&&& &'&&$#$&(%%'&&% %'))+* ) +,!-, * .. / "1"3#4"2,(!+&-#,#+%*(#+$,*!+!*(('()% '&# % %$&& $ ! ! # $ ! $ ( ' % $ % "   # % *''*')(&&*' ( +,) )( & & $ " !  $ % $ # " ! # # # " ' ) & % $ % ( )&1%1 -+) ( ( * ( * ' % & % ' % % % '*(' ' $ % & *(*+&0#.'1)4.718-6/7.8*7)7'6#3$40>(7#3#/!2!1#1!.!- ."0#1#3"2#2. / /!0!1.!/+4,4'2%/%1$1!/, .-"/!.+4!0- - + + * + + ( ' ) * , * * ) * "2,B9P"* +.&6* ( + , - 0#2!0%1'4#1 /1 . /$3/9#4&6)6&5%5(8098<0:-:2:9>6>5;/8/:."/(          ';+F)?)>5DbjNzjFU1*;  (*ijkuuutttoopiiiSSW    "/6E7E6DG*+5EF(PP307(*3%.$.*EH5XYIDG5:>,/3).$)?B3^`Snpbz~~SVC*4*&"++ & ( ) * + )* ) * ) ) ' & ' ( ' & ( "-#/%0-91:5:9<JG'6<$2 . -* , ,+#,'0*3!0%5"2&!+#2$1$/(1&.,3,3+4,4-3*004.3/3-10232+-)-*.)/)0,2)-&*44-."'     "#"$ &$($*',$+!'%+#)"(#'#&%("&$$!&!&####%%&%&%&'(%'%'"    $(,,1,1)-(-+0(,/1,/,.'+*.+-+,./334367<< ::78576958689;894605+3,7.5.3*0.30202(* '*51>0=0<6?>A!VYAuxyiro\nlYiiW`_JDC-15!/2   2*1*1+0+/)$$&     (2lmnDDM       ( *(()%$"&#%)1*1)&!+  ,0-2 (($'#*/.  $*"-*)"2 /!+"0&4!/ $# % & & ( *) , * * )$% & % % # $ ( + !0( , ) ) * -' /!1- - .+  ,0"2$3$3%4#2%4(7)7%4*8$0)7(5)6'5#1 -++!1,*-00//"4&7);.?*=8E5A#4%5%4"1#3#2&5(9):)9%6%7$6$6!4"5!30!0 /&5*6(5%3%3!.*,)#& % % & ' !/,( * (6&5( ( ( & ( +-. 0/,-+,*))' )' )**+*( & % % % $ " ),' % %$ # $ %'&%%% ) *&% &&&%$&%# ''&'(''('% $ (*( ( ++ + ,+ , , , -+ * .!1"3!0 -+* +* ,++***(( % ' ' % # $ &'') / . - ( & % ' ) * * , ,'$ $ " ! $ $ &)& &$" % '*) ' )(% % % $ % $ $ # "   # # $ " " % & ( $ * ( ' $ ! ( ' "+!+ -* ) ) ( ( , ) ( & & & % & $ % % % # % ' $ & & .'0!,***!-+42918295;18+7&5"3#3$3'4EO/W]C2>&5"2#3%4+519*7'4%4'3,7)6'4%2%4!/,, -+#.(2%2$1"0!/ -#/)32939,5$1&3&3 1.,-, + +#1#/"1,, $1akOmv`BS,+=$4+!."-*+ -"."2(5#5 0!0 .!0"1#2&4%4"3'7#4$3,7'5+8.9088=CB$9>9>5<.9.8'          "$%7/E0H,E)?1@PY4{ox]-A!2#$ 02746;,/479=),2 #.0<+6"-/<8J=L!Xc:gkRZZBacO;A0 &  ("! %+%   (4-G`=Om=2R#!=(,@%/BO=cuYwuzcOY='5&3$3 /0:$?H2GM:dgYkl_DI67=',3+3,2AD0UVEbdUNQANQA/4!58#@D/IM=_bTxyo``Q:?:<;;5512/126)2&.)1,3-6(2'/(1.5(/)2)2(1+6096==C DH#KL,ghRlkWa^GfdMZZ>UT:MJ.3703!" )'+(  *'81801-:296    ,#$?CL]^bggj'     &*)$  "#%$!,%/), -$  $ !  " "$0*!     ++0!2.(#1.!0!0!/ "( ( ( $ ( + .101&!"' ) ' ( ' ' ) ( )* * * , + ) & .#5%7'9&9 1/ 1!&-"3'7'8(7*8'6$3'4+9,:*8(6*7.:*7 /$2#1+,,(* 1%7-+*-10//!2!/-/ 1&6)70<*8&5)8.;0;+9-9/<*9,:,:(6(5$3%4+7*6%2$1$/,+&% # ) ( 01/"4"2):.( * ) ' ( .//-,-/!2&3#/"/-) + , ) (*( * ) )())(',, 0++(& & &%&'' $ &#& '!' ('&&'&%&''('(*+".#0)(*(' & ( ) + , , - . +)* ( ( ( "/$5#4 -*) ( ) ) ' ) *( ' & '' *((*) + , + * ) + - + ) ( ( * * - . /+' % )*&&(&& !   % *- + - .-+( ' ( & " " " ! " "   " " % & ( '+& ( $ # & % % & & ( ( ' ' ( ) % & & ' ' ( ) ( ,' ( $ # # & $ +,7'0*+- /!2&5)4%4&4(6(6%3(5)5-74>0:-8]cJ-9'4&4+74=5:9=IO*EP'9?/8-62>/<'5"1!.*6*6,9&2$0$1$0"/#0#0$1)2+418,41617*4 /"0%0"/ .'24: VXAadOlnZTYAIQ7V[C\fB4A,9*6/;"-$/#/ -/!1 1)8%622!0 -.-/"0!22%3&3&3)4+5*6297<?A!>? 39.9)8,9"       /)@(?+C+E(A&>4Eqx``jF@U)4F   ")"&,$ $.*9&2FX&Wq-%1     &'#    (,+9'9!7/C%'=! >O2$3!'wsý︼cuS0J/H.C;H0Q^GUbKIV>:F/AJ8AG7KPBY]QMRD9@-nrdgjYil]oresui<@.7;'*0/5"AF2dh[z^_O[]M*4&2(( ) &+*& $ & & ' ( ' ' ' & ( ( , * + "0- . '2&1** .,+ ,)(& % % & & )#,$,!+ -"/&-*/)/*//2,0(,-0*,&)(*(*---.(*'*#$&*,-//+,(*#&%#        "$ %!&!& &#!(#)&" &!'!&##""&"'!%% &%$('+,.)+()''))-,%(       *++.'+%)&*+-(*')/.-,0/104455659899=? HK%BF$;;SX2CE&584749,5)3)5,9(4&2"/".&0(1$.%-*2,4/2/3b_GnlYyweWX9JH,SO2CA%A@*FE6000"     1-=821-/6>& FMSUY^6?H$.>%+@UW_?@M)*@)+?(*=-.>""2    '&  ! $ % ! $ # % !   +*#   , /!4!3./"2!1!1"2 .-$)!0+-)02!31. 1 21+-+, . # % " " % % ) * 0%7#3 0"3':-@,>);%7%8%9#5 /#4"4&8.>,<.>+:#.1<*8-;(6#2-:)7&4$2"0%3(4*+*, 1'9"3 0!3!40$63!5!3%8(<1 3"5);+;)9+<)9%5&5)6$3%3.9.:*8)70/#2 0 2$1, -&) .%1,% ' ) ) 1!5 20 0+<&6-,+7#2 0#3/."/$3#2 /!0...$2 0, + ) * * ,* , *(++,-+(* 1-/-*+.-( ' ()(*+(((( ) ' % ''( '')+-6#0.(&$ ' & " $#-6B,*)%0* . ,) ( ) "0/%5$4"1 - -++) * + ' & & & & ) * , , ) ) ( * - , * ) ( ( ( # & ( . - - * . , ++) ( ' ) * % ' # # & -( ) , , + ( # # % $ $ " ! $ !    " * & ! " $ " # $ % & % $ % & # $ ' #1-<+ ( ' ( & -) * -% $ )& +*".9B((3'3!0/ "3/'4!210#0&3'5#3'52<1:2=>H)9B#eiRGP2*57@7?,6+5/64<BJ'LO.DG'/<183;2</<(4(3-83;=E(9C#CL-G(%  '&"-'6 $!0' /fsb̕a}X?_5|q{swrQ\Miqe~|NWG||yy|tei]PVA6;$OS:A7@-9%3(6#3(9&3%1#0"-!,%0#.%,',+/,/58== =J%M[,Pm7PVZ^^i?@R-.A9:JIITKKVOOX 0 $ !  " !  ! " # # $ ! # (" " )     //"5"4 /+-, 0/ 0 /"4#5&:!3"5 30$7%8.#,&/ ., * * * * - " " " % $ # & * , $7&8 3!3$6'7'8'9)=';&;$6/ 2#5%7.?3=/</<4A:D2>1?)8&5+8'6#1%3#0&2$0( ) ,.--.>3C2B/@#6$8$8':1A2B.?+<+<%9(;):$6*<);%6!2"2"1 0. ., , !1$3(5'5$5#2-,' % ' ( ,/#2%4#31. 1!61'8(7 .&!/#1(6-8$1%1&2 / 1/(5*6*6&3%3"2#2. - - . $1* *+ ,"1.*./-/--,)*(+.- /"0"0. /.++ +, .,) *)(((,+*"*&% ## % $ (**(+)' )*#/!.-+#0 /,) "2&5#5 /) ** ) , , ' ) ' % ' + , + + , + * * * ) ' & #   ' ) , 40. / /, + ( & ' + ( $ % & & $ % % % & ' * & % #  " & & $ #     " # !  ! " " # &'% &'!+)*' * $ % ( & % ' ' & % $ ( *-727)2'2.:'3%2%3"4%5 2)7)40:,8*9&6(5*48A!'71/ !2$2%3*7HP5uxfAJ/>F(Y]AWZ>6>HL38>MW1GP+DL(=G#4>FJ.JL0@B$4;'3/7-76? ;D%?G) .70;/;.:.8'5#2#3%2%1$1'2197=7=!;B&>O%[fC.6& !2*:2=?G([_AY`G".   *>I5CL@ $5D1 7C9H6J%;AO=?R+-C;;LEESKLVEER//?'-8-8  %     !  " # # " " # "    %& )' # .* //.!2"4.,. 2"40+$5';%8#300. 1 /")$+'+ -+ ( )* ( "   $ & % ' , . - . 23'9#7$5!2'9,?)=#5!3!2"3)9,>/@*:,;2?5D7E9G3B.>0=0=/;1<%+&/'4(5..-$5+/!3$8);5F/C3E2C7GCO#4F:J9I7F1B/?(:#6, + ) * * * ,$4%4#2- #3$3(5'4 0+ .! ((* * "0"1#1 0$4 1, . / 1.-,**($2#0 , ,%1"0!1*8)8+:*8'5"1.-+ ./.., ) , !2"1+-/.+)(-++-,. 2---"1,,-#/#1 0+,.//., ,(0'/ *!)%%%##" $ &' & ))($ ) -!.!.!0!0"0!++, ,#2%6#5.) ) ( ( , "1., ) ) + - + * ( ( & * + ) ( + - + % ) ) % . # & 0-) * % ' + + * ) ( ( ( ) ) & ( ) ,+ ( & $     ! #     " "  " "'')&%)( ' AO1HW7-@( ' & % % % $ # # & ' 38GM22? (26C#0A *8%1)7&6'6.:,7-9/94=.;-78= QT:fiR:E$$5&62? 9D&$2-7SYB`ePfjWz|m}rtcacOVZB5?>H"AI(TZ=QY:]`I_`J;?"5;/6/84;KO0DI+CG):C$;G(*6)5'5+7,6)56> 9@"3<-8.84;+4&2$1%1(2(3*4&2%2&2&2&0(2&2&2&3*6$2"1$4!1&2!2 2-/ %5&6$1 .)6(3.618/72:4=$0"(  '(:(9&8(8'6)7&5%6#8$9:C pn[t%C@&HD'GD(IG*ZU>9<"1899"'& %(CA!A= 3255996757@>'34',&/'3(5 +"%<93 ##!,$/(3"-    ,'       "    ! ! #      "( & $ 01+  %*"40/ 0 1!3"5 1 0#3%7%7"4$6#5!4 3"3&8!0)#,+) + + ) % #   ! % $ % ) 0. !20!4 1#3)3%2"4#5/0'9#7/ %7*:,<+>(:'8,:*9/9+:0?5C0>2?/<+9(/1:0<1<00//&6!2,/27I6J3G4G+?*>0D/C5F9H;H):.>/?#5, + --0$4$3-., - /&4"/&&''.!1+ ) -!1'4"2&4"1/ 2%91- * ,-((%1!0!/"0#2!/!0):+9.;,:'7"1-, -.-!-$0,, 1"2+-.,-2 2#5!4#7#5"4%9&7&5'5'6(7)9%6$4"4#5$6$6(7#3!1/!1!1 0 .#1$/!.#, -'' '&!&& (!)"(#( '& & )-. -!0&5$4#,!,,$,!1&8&8"4) * ) ) !2%6'5"1-. . + ' ' * * ) & ) * * - - - ' ' % !  # ( /!1( ( % ) .#-*+ ,, * + , + * ) + , . +& # ! !  # "  ! "   #  # $ & %((& & ' ' 4GCW,9K%"3 0( ' # $ " ' & & *1-3+3P[<@O,*6-9?K*5? 2<2<*8+77=!CI-8?>E&JO3FL-0;2<BI)AL+JS6QX:TY?DK.4? AI1CJ2dhT|~q||np_RU>BI-.78AUZ=Z\C[`CT[>CL*.;*6*7(7*<*;@P+GQ.@G$=F%6B#JX94D &1 /!/%2.8/8+6(6)5/::A$2;BG,VY@]_HejRAH*?G'8B!070:2<5;2807/6*5#0'1)5%1%1$0%0%1%2+3*5&4$3!2!1'7*<1+:0>-7&3)3485:6:+5'5' *&8(<(;';&:,8*8%6#5"5#4AE(AI&*:*?%</FG_$\y-Yp2F_"5O.<>@BCDAAB<@I&7?4?'"       =F7W^S (!+"70&'>&kcvpjvgs|qwvhsb_eZ[aWqulOUEU[L}PUF=B0?C0IM>@   66+.'**-,/+.+-,-'+%)'+)-(..316376:17/84<5:.4-227380437(3+#/%1&'(#,$+'(0"*"),3(/:=79HF+EC*>:"C?%?<#C>%HC(EB'5656 57"'#'   /3>>04;;:66423/3267=2718.8 %/%0&&0;.9)5!  &'    % ! $ #  " " $ & $   # ."2, /!1/%7+:-,,*-&7#4!31 2#5"2,"1#6&9"4.!1!1 1.- 0%6!0,,+ ,) ' % $ # # % ' % ) + / 1 2. 0'6(8"1-,$4&7%9!5"41#4+=,;)8(9+;+;&6+:)94B4B1>-:/<+90< (1=+:!3!1%5(8$5'71043!4#6*<)<-A6I/B/@/@7F6C1?)90>'91"3%5'6&5&6(7%5%5+60<'5+&!0!1 0 0!2!1 0,.&7%7!2(7&6!2#6#5!1./ +*".-5-6'3,8-92:,7,8-8-8"520/+ * , ,!1!2%6):(8-/"1#3$5%6(8(7#5#6%8);*;,<+9,;-=,=-=.>*<*>(?'=)@)=(9*:&6&5 1"4$2*:,;$3#3"3!1 /,+ ,-*!-!,#-&-!))&.*"/-+, $1"/ /$.-$0'8$61!2,. 1 2!1):#3)8(8/) * ' & ' ) ) ( + ( ) + 0$5* ) % # $ & , $1)5"1.+ $ ) !.#/$0"0#0-, . - 1 5!2* & $ $ ( # " "  !  ! "    " $ $ & ( (' ( (' ' ( * ' % $ ' ) +' & & - ( ,3(-%/1:HQ1AL+,6BK+3>1=?J(-9?E&2:6>fhS^`HTW=stbuveWZAadM6?X_CMT6FO009AG,X]Emp]sv[_H8>6:3:TY@xzg~sta`dII(NY7>J(7B#*5-6,8&4(4.8;C)7;06)0-0)2$1!1#3'9)9/>'8)7>B#4;0:@E&=?#4;,7)4  */C)<'=%;(;)<'<(<$7$4(6.9^dNV[=0@!7 5'?Xp:}R}N]ET'/G,  789@ABOOO''//~~eej9:E+    2%6':AQ,IW70<#'  !    2=* # %   -@#K[?zq{]iVGU?LZDmugT_NUZMUYLCG9FJ;ehYegYJM<-3$+#$ $+&;=+%!%# % & ( + !..8(1!,'& ' +*4%.$ ( !-&1-%1- ( & ( +!- +(% ! # ( ,* ) !+",* * +,!- ,*!+ **( %)/',  &!&#$%)++')                "&#      $ &%%$#&%%! %&!*#$"*#+"*"(% %#( '*029(.7="'!% %"&%'$'%)"&"& %"&"'" "04:OPRCDF014,-2%(.#+!    )+$($(%)*-'*!$#'"&#" &'-&++.+/&,*0.3-2'-*.,0)-/215%-&/*"*$,%,#*") &$!!').'-,1?=#EA%@=$D@(84737463755587,0     +$-#*29;?@?F7?-8/;7B4>-7  !'""%1$/3>+52>0</;(6&!/& & (#   " % % & $    $2(:!3"2%4#3#3'96D1@0@.='8':/!1 2$4&6$4'4);):'9%8$7 - .0*++ 0&7*9"1#0 0 /!,*)*) ' ) ( * /0- 2"5#5 1!3$5"/%4)9'7&6)9(9(6(9+</A/@:H=LAN!;J(8*;0A0@.=*8+6,7,7/:*5:D7E'7- 0. 0 21/,0-./ 2'7&80#4)<#7*<.>G0?&7#4$5(6.:+90<0<.<3@-:#4!4!4&7.<+=);'9(9$5. &;#7#8%5(7'7"4/ /-- /"0 -!-&0'2184>1=->->.;/>,<,<(:&8$6+7*5'4)5)6&5-;*81;,;+;-:*9*9-8-:&8+7&7(8):*=+:0A+?,?1C3F-?*@+A*A)@,@+=*B*?+=$8 12';-@,@.@,>(>%<&=$9$7%:%9&7$4"0'3)4(4,5)2/:!-)0%0#0#0'. .!,'7.A,=$5'7$2(5)9$5 1):%8&:&9&8 2+ + - + ) * !2'8 42 3$7#5( ' $ ' " ) /&2*6,9"0, * ,!0)5+5,5*7%2 .- - 1 4 1 . , ' ' ) ' % & # ) & % & * # ' % $ $ $ & ' ' #-' & & % % $ " ! # ' ' ) ) , +(.3)1%.,46>:C"5>5@>D(=B&]]GwxiQV85B2@T_=^dIlnYvxeustcKP2?K%=L#/?$5#1&6*;/<TZ?^bLSW>>C)5;:A$>B%_^J\\E_]EVW=NP3mmV^cI7C#*7)4+7$3%5%7->7@AJ(>K%5=GK0:A#+4'2%/)2$1&2&2&3)6,6+4-6+5,7)4$1'4%12>EJ.UV@28)3*4(6&3)3.6)4)3&2(31819,6(3%2(1(2".%/+1%2#0)6#1.;2::@!IJ-19)5, />(>'=(=&=*?*<3@3E/>2=+7:@cdL;J#$;!6!4 5Q]8xM`0>T/C%8"5(:  &).\\]CDI(aagvwy=@H !(.; #4&5XaKO[AIX91@&          &2=+>H5v|oGP@{ʛ@P4"4.C3JM@rthNRC%,$%&!&14!!&" ! % & ) !.!.*30818-4)1'0+3#.7;-5$.-53:075;$/% % ( * * & & & ' ( ++& ("-!,",#,(1%- )"-!- +))#.'/#-(!&!"$ '" $!% ! !      #!   #     "    ! #     " ! ! ()&"*&#"%%%(''( '"'"&!( &%&5;FL%%&")&%"'#'%)$("&#(#( %!$#&# !   (/25::<) #)$($("& "!&!%#!'%&*),#(&*&*&+%*),$(&*,./1%,!)!$%,1! &#!"  $)-B@(EA(963/2-1,1-41535433*.!   ) +)3.7)6+;+>.?1?,7( (# 3A9F4@1<5A5B5B*4+"")7"1-!1%6,* & % ('(    $3):-?->.=.;3>2A4C?KK,>$8%9$7&8)8*;*<#3 1"4#5 1(+,.- /#4$5+:):$4+!.!/+-,."3%6 3#7%8$7 2$9*@+?$7$4&4*9*8*8/<$3(5)7*9-:+<*90@&9$6"3!0 / -)0=6E (+.//$6"4'94C0?3B9B7B7D;G1C0B.D+<'60?-B+A+A-A.A,C.G,D-B+?+@1I1H0J/K/K1H/D.I/J/G1J.H,F+A*:,:/<.;*8'8(76C-8/625'5#5&7!3$7-A2B/>"50!1)8(: 21(8)<*:%8%:':&7"6"7#830 "8)>(='9':+=#40/. * ' ,)4+6/9'3( ,!1)70@8E8A/:)6#0 .,-- + , + . + , .*' * ( ) * * ,&0"    ! $ % % ' $ $ % % & # ! " % ' ( ) + 2#407172717AE(5;GJ/QT5Z\DttbdRJQ90:+;,?9G#PW:MP5adKbfOEM-4B2?;G#-:)7%3&5*7(9,:8@%@F,KN5PR:NN7DE+HK0LO5CH*RV<:?"FK.UX?_cJ@H++6(5$2+;':);-9)7)8-9(4*4+5)3'1)3)3*4+4-5+5,3,4*3'3&1'3$1$1%1)2+5*3&2$/%1$1%0&2(3*3&0(2,62:4<27-5+5-4+2-3*1#.- * %.-1+1;?$YZ@GJ+.7) !.)<)?)?)='@)E)E.D?K&>G!5>9@ AJ&,?#:$;6D%EP4';*:7L5M';#4!+8 DP/&!GHLoop%%1/gjl(.6# -< \kNxloycZfN(7#0      !    !#6?,kqeR\Kdq^( *8B.szkQZH2:(UZLxjnb(/.4!)0FJ;CG5&,$ &! $"'$)   " ) & ) * * ,6/76;16,4'24<,:+9)4'0#+  .;7E0=1</;2>4A    ,!02=*9!1"3*:%1      *8+<+=(;.A-=.=3A4B:G:HK!ER$BP">M 8L7J4F:I:I9J;P3K7NBU$ET&BQ$BQ$8L1E*=):3D8E:JJAO">L8H;J1D.B6G9G1>$."03B:G-@3C9E9G4C5E5E2E.A-A.@9M-C!643(6+8.:$6"6&70"4#2"0))40;2?3?/;2@6A3A7E5D7B5C3?.7+5,7+618)42=5?4>3?0A2@-9+6,8*7+8*6.61;,:+:/;/>/A1D1D*8,:4C.B+@-A0A1D0D0E0D5E5D/I/L1H3I3G3F7J4I2I-H.I1L2M0J/K.I+G/H1I+A$:':):,:/=+6#7#:'@&<(<,A0@)<!3#4):,=*</, /2, 3$7%5*:.@*>(<"6$9*?&8'8+;,;*;%4"5 2* ) % ' #,,1,6-):/A*84@.:,:*8+8$2/!0- / 0 . "1#1- + , . !0!-* + * * ( , #   " $ !  # ' ' " # " " % ) # !  # ' +) !1!2( "+?B(38FI-.6,418#/096@%&3 -#-#-+6]aIJO24<4;5:4;>F);D$7> 5;494;)6)6'4*6(5)71?1A#5'7-A%5&3&2&3*5+5*4*5,4,5*4-5,4*3*3'1&1!*&2%1"/#/".)2(1#-(1^cStxl!+3'/-606%.+ $-58QW8bdIw~VZ`>!*  *:*@)@*?,=)E*F4E.=@F$>D!4>+9'8$8 5 /vwiER*%6,=&9(  KKOFFKRRY'+4   -'6!3=N(=J/:H)/;#KRI"   ! "     !   AJ7\fTR[LnzjQhO0'+96D*,97@,EL;/7$*1;A1"#*$"!   "   #)"#%# $ # ) * #.'2+418!+' *1;AD=B;A?D5<?BGG#39) '2 -( & $ ( ( % ( ' ) *"-",",(#(&+#+%.$. + **",(&) + !%" !  #           !  # #  $&"%$#   ! %!    " ! " !   ''$"$%$%)'( )'% "# (&-()'%$%"(!&$)%)%)&*&)$(#($#!"""           &)',&+#' $! $#("("' #!' & $#('+%)(*/0/114/1+-026755/1.01303/3).!&!""& % $"'#!'"%22(+-.,+'(3152+,1/21220/13+/&-!)$ % " ,=,=/@/@6G8J5B5C:E9C) 9I5E1>3@6E-;  +,9#..:,6#1#0+!-(!0&5%5&5#0!0'7#2.-./"41. 2$8*?':&:"61$6$7'7'5%2*6/8796708/:,8/;-:*7(6(7*6*5*8)9+:/=9H5F0B3C2C/B1C0@';2C3D2D/C,A.?5G)@)A%<#6/;.9.:)8(8$7':$7!0-')3-8.:.;.</=1@0?1=.92>2?5?$2"0'1.63:,90=9A7@;A5=+4*1+3-6,8(3,6180;+9,:*70>1>0?0>2?5C5E3C2C3B6B5D5D5D3B5D1C4H6I6H6G6G5G7J5H3G2H0G3H1H/I0H1G/H0L/P,I*F)@)@)@(?&<':%:&;'<+>,<&7):,=,</=/=+=):"41, ) + * - 2 $7"6&<)?,B/A/?3?5A6B.;#1.- ( ' ' $ ! ! ) !2)8(8+9.8+9)8*8%4. -- * * + + - ) + , + + . ,/ 1( & + . *    ! #$ # " # " # & & % $ # " # " ' #-+ + ) ) & @B)6;#. %28_`KFJ.3:3;2:(3'5NP7FK0DJ.=E&EI,IL/cbKa`KY[DFI-:>!4;-:)8*8:A"7>1:-74<5=5<AH)kqY\cGKQ3;B"+8#2"4"4"2!31 -B#7#6&9%5'7'7$4%2$3$1#1#1&4$2%2(3)4*3&1%/$/&/&&2%1#/+2(1&/(0&/*2/5DJ5NUBagWRYF[bO!("8E'(6$"-    !  "  "   *7 FQ:2?))<#CV<:I008E,09- 4:?B3;,64=$.# ! $! ' % ) * ) ,*)"-#-%,&-#* )*$!- ,,!,$/$0+$ '$ $ '"          $!    $ ! $ " &'(  ! %&$ & #   !    ! #    !%%&'%&%$!#$&!) '%&&!'#($)#)$(&(&)$(#("'$$""!  '        %)"*&+&*"' ##$%%*"' $"!&""'%*'+#'')*,%(*,56@A'%*15:<"::#(*+-77680313/1), !$!$ $&)%)+0-001*-&'!,,5464520.0/30-/(,(-,2&,%*   "**?0;CP >HDMER 5F;H4B.?'9  $-0?8G;G6C&)11;",  1>0>3?-9  #5A-:!,'2 )  !  $/>)?,D+C0I2G7H6G8E@M8H7E0?2A.@/B+= /&5+;*9#1/=0>+6.=(7$1&5%2&5,<,:&5&5)8&5+<%7/-$5"3#6/ #7%8!4#6%9*?)=!4#5$6+;-;(5%2.:6@8A9E9E3A.;-9(5(6*9(6*7%2*7-:5B4C:I/>2A0?2@5C>K?I9M=P 7K7K7K6H4H3F.F.J-H2G3H3I:L9I5F5L-@.='9*:,:+:&8$:+B.B0C0C1B4C5B5B3B2B/A-?/?0@2B1A.@1D0E,C'=!7+G&>&="41=0<.:(9$7$5'70,%-68@2<4?0=2A2@5B5C:D:@5?1>1:.7(5*5,4-86@2?9A9>9>8<2806/6-7,7+62;396@.;.:2<6@5@4A6B6D4F6F7D7C9C 8D9E8E8F4E5E8G;K:K:I6G4H6J5I7J9I:I7I6I6F2F1G0E/H0J0D.>,E,G-I-L,I(B'<)>1C.?)=&9->0?/>-<-=/?,>,=+<,:#3+ - , * ) & ) 1 %<#:.>(;5?4?/=(9%6+8/9)8"1*"!1& .#4!1"1&5*8)8'7#1, 0 , & $ " # % + * + , .-.!1 /' , ."--* &"  $&% " #!% % & $ % # & ' $ $ ) ,!.* ) ) "*PO7*4 )0rsbiiTggMCG*3;HN.>E'8@!  "(-D,E+E,D.IJ[.`nI@T&JS-`dHIO/$4. -/*:)6#3>D&AG'.=,=$#%/IJQ # '-DLQ)1% %+,cggs}i^mJ/A'VdFEZ<  +7     " #$ '5?.BL9'5"?L6:092:---7)6!/!/( & ) .$ )$/!+* ,((!.$/(3 -$/!-()( )),*$/'3%2+ $(' &)#-*'% %        "   #   " %(& & #  # #  "%&&! ""!!""&%$$#$&!'%%& '#(")#)$($)!("(!'#'!& $"$"$%&&!!#"#    "&!)%,$+*.*,%( %"%$*#)!&$(&)+.!&!"!!"+-57$(24?@&56+-02AA)CD*??&==$99",-#&"&!%(),-),(+,/*,&' "&'/.53 31746283<7!10*-$*$)&%   "&+7%&#9) )( #4.8/A6P7L1G?N8D*12@,@/A+79I$/;1="%.9 ,      #9H)5J5J*>#56F:I:G;G?J=J5B4D/B-A)<* .+;1A0>.<-;4A0>'4&5'6$4,;2C->4F:H.@1A0A+<"3 2#5'9%7$8%8';!3 2'9$7&9&:!4"4$83B2A2@-</?2@6EK >L 7C/>1B*8,;,9-<*9-<*70=9H.;,:/@2G;MBQ#=L :L,C5K9M8K7L8J6G6G1E*C&@&?0E4E6F7F8IBV":O ,+3D3E0C0C2D/E-B/@/A5B8C5B7D3D1C0B0A0A3E2D0C.C1F2E0F-@&<$:&;"8+<+:,9(6$4#4#0-)&17?;B 7?6;1;1<4>9A:@6>=C ;H9B9>0=1>/?/?/@1B1B0@#71 . . , , * - ( 1 3':8>6?6?5>5=3;*6 *) -' & !0- 1, * !3$3 1, + - -' % "  $ & ( ) - 1#3"1- 1 1"4(5"1, ( . . ! %&&# & # #,' # % % # $ $ ( ) , .++ * - ( >@(18  )/OP:FI/kkS9@!&2KO/OM4@B(5817*0,216599<7<287<BF)6<.8)7(7-;8I1A-<*9,9*:)7*8(6(5$4"1!// . / !2#3$4&6#4#4#3'6$2'5&5$2'3$1#0#1$2$2!/%1"0#1$1#0.#1"1!0"0"0"/#0+ -* +,!,!+ +"+%.,3&1-416,42=6A5?2;(4(58BB=BE)+B)C)C+D)@1DA&SU>9>".6+  !      !,1(14$('+kmku~l}{HNH296           !  &#-4=-"-")3(^eZlvh~z7D-hnc1<(Y_SAG9/6$.7 3:%FM:#+ "!            &%"*"$  ! )%/*#/"-) * ,+ #0(5!0' % & ! " $ # *!.$,*( $1+6(4(5*8*.+ % ( * ( & ) +#.".".* %+&  $ &'!+"-#/(  ! !           # %  !  (*'  $ %# "$($" ##    "##""#&(%$&''' (!( (' ' '$(%)#( %!$%'! $!%"'%"(!' &%#$$$##"&## &   %$+"(%)"' &&#*&'&'%) %"'%*%+&,*.(,!#!#!##&&)(+9;#57!$'()00*,==%ED+GF,AA(55 ,-21..() $(!$!$*-(*&' !%%((%%75>;!/-7283--0/$("#"&!&"!% '%   "'EBPCa:T(6  !0'8+;%:%?*(80F/H0@/E-B.@)1-9#>P$=M!0>+ "*%      $(/"/'60A!3H7M2G)>4GDP".=*;8G)8->1C/B.C(;#1%4(7(7#1*9+83?/: , .)7+:/@3G-A(?*?%8*:7I/B)<(9+<*=$6"5)="5/1!4%9 2#6#8%9*=5E7F3B+<.=5C1A7F;J:H9G;K 2C1?*:(6(6)81A8F@M!:I*9.?-C6L6E0?(:/A(A-D2J1G5L4M6K3F4H3G$<";)?0@1@4C;O D\%)9,>>U"Ui8Oe5?W#7O9P8O7I3C+?0A3B1?3B7D7G8G4F1C2B5D4C4C3D1C5D0B-?';'<!6!4+:"1#3#1#/)8)7*5&0/6:A?E";C 8=18-56=>D ?C!=C8B5@8B7=5=H?G!EL#>KHK%BD#AF">F!:@ 9?9CF!>E!@G#AD#?B#:= 8B9F8D9DH!FP%CM$BL#DM$CO$DQ$ES%DQ%AO"CU#@T!AY"AZ!BV"FR&;Q(>6O8U;X:Z9V6S6P4M3M2Q3R1L:F=G >G!:B /;0D0F/B-?1@3A9B7B9D6E2B6D0D)@60 . / 0 ' % 0 2 &83?/<:>>?<:"+"2- ' & /':#1% % ) .)(& ) $!  ' % $  !  " )' * "2&3 22 2. 1 (6"1, - ) % & '( $ $ " & # $ $ $ & & * ( )) + ,) ) * - & /6*1>C(GJ/?C(/5#/;@#igTHI0696849294:7:3808-6)5*9*9(7*:-;,:)8,:*81;9H"8G .8(4(4$2"2 0 .. . /#1#2&5)7$3#3#3*7.<-<#1#1%1#1!/ /!1 /, - . !/ /. /"1 // 0#2!/!0!1"0$1"/ // -".$/+4(1'0(0#-"/#0#/%0%1!."/'/ 59?M*IS3IT35D-@$8$6!3&8!1#/#.&.CC*;?"-6(40:'$*    $(AEDoxh_cFEK;OVP@I<            !"  %/$HPDltgDP;@J7agZbh\EJ<.5"%/%.#+  #   #          !6<)'.$, '   $ % & & & $ % ' ( - ) & (&.',%# $ % , -&2!/0<3?4?(6)8,;'6,' . #2/&  - , .!- ..". , ,)'1%/#/"/ , +'& & * !            " &)* ( &)(# #'*  &$    ! % # ! !#"%&&%%'''&"("'#'"'"'!&!% %$ $!&#(#(#(#)%#( &%$$$"%"+$)" ""!&!$($) &!&)*(,$'"('*&(#$$*&*$'"'"'!&$("&! !$  "#!.//0!  $$33/&'45+,99"+,%&,+20*,#!$$%!"'(,+1.GC$55),+/,/*-*,!!$#" " '#("( & &%  &5=,6/D3F7C9M"6)=.?+     ,D.C4M9M5>/B0F2B' %=M,>V!;M7F$  ##      $!-*5'4(5),@1G-B,B)@/E0H6Q8P=P GR%-;*84B.;/=)5+61;2<&2"/"0(7*:'9/C-B,>2E-?,<0B&7+=,?1B*< 2%:)=&;/022"6&8,>);,>7D5E3D4F6FM!@N"=L!,?->7K9F3EP BT"@S!4F1E;J7GAQ"'A+E:M5J5I5J:L :H 9H 6F)?*C4H4C4A8I-A)$0E9MBX,7Q4Q6R7O4L.C2A0B0B2B2A3C6E9F:H8F0C6E5C3B3A1B3?4@4C.@&;#:"6#4 0!0!/!.)6+84>9?6<:=5=@C"AC$488>:? =C =@ ?A!AB"AC#?C >FLM(GP$EL$IK&IJ&EI%BJ">B!?C!H!CN#FO&HO'GP&BO#BO#FU%HU'JV(KR(JN(IN'P[*T[0PW*TW.UX0/>!->3D?Q!;M :R:U9S9Q;Q:T9S:Q8M5L4H3G@H"=F"%2*.:3B1D-A)@#8"6!3,:;D?F!8C5@5D)@1 / / / 11!0- 3 (81??= :7>=35#2!4%8&9 2) -)# # ! ! " " % % & % $ $ & ' $ ' & ( !+!,*!-'7%5%4(8'6*6,7.0 /. , + ' ( $ # $ $ % & ( & ' % ' % ( !*'/!, *) ) & % &  # 59UW?DG..4,/&0IK0KH/LM1KM0DD'8=6<3:.7,8.7,5-8+9)8*8(6)8)9(7)6+60?7E 9G!.:2@+9$3"0$2(3$3$3 /"1#2$1!1'6:H)(6&3"2$2#3%4%3!/ .- .+ ( + - "0!/"0"0+%$(#.&2&3)5+6'4&4!1- , , ,-, - ".+4-5+3$/.!-!-*"!696PSN/50'-)(-/#)+"(*     $(%890-0*" fgjabe@CH")/ *9,?*B&?'?DR.koWAN)4G*@(;':(:*8%/$/&4A@R$DZ5F[9;I*8?' )  %**0)).99=DEG  !$JNM    !,OVJzt~vmufajZ.>";F1T\NU\Nhka?D0LP@(& ' $       #       " #-.6 29$/4 -2"  " " # $ # " ! ! % ' & % (#,( & ,&2*57@=G3>/;,80:(7&7(:):.;3>0<"1  $,#?K2FX0:J#4B.:)!  &($/ , %'4'3)4*5(3,7.8%.%4-@+B0F3G2I,C3H1I2H*>1D5A8E4B6C/:)3)5(7#/(6(7)75B)8(91@1>2>5B0>:G.@-@0B2D1D.B#8!4"6%9%8%:)=(;+?,@1F5J=J 3C8J9J;M8J8J6I:J:I 8H7F7G:HS @R!:H:K@M"@O"2C0C&:-@AN"CO$@R"-C+E8L7K8I:J @Q#EV&FU&6J.G3H3E5C*@2C1B/A+?/@/A0@0>3B3D6E3D/C2A/A2?4A5C3B2B6B8B4B0A*>"8"5 0 ."-!.'4,:3;?A!??":==A!:BFI&EC&8>:> >?!?? >? >F!AF#AF#BD$GH&EE%EB%B=$E@%EC$CB%AB$BC$?@#@C#@G#BI$EH&FH'JK)KN)KN)KM)MP)LQ(HP'IT)OW,PS,LJ)MG)RP-VU-TS,UU,RT+QX+SZ,LT)EO'FU%@R">P ?O!L =I 9G:G:C /;(54@9D8D5A4B2B2B-@.A 66&91@8C7@5B1G%=. - - 1 '7/ ' - 1"4/:3:2=.<-8$.35;0<':$7+ ) ( % % & % "/&2/:)4*( *)#,* *",!-#- ++#1!2%6#4&5)5-7'3*4*5(5!/. + + & ! & & &' ' $&& & ( + !,#/,* ( +( #)  %DG/6= B@"*/&/*3?B#EC(A@#@?#BC$@?$4:.;,6(6*5+6,7(6*7*8*8(7'6&4+:.=*9(5*74D .?%4(4%3$3%5"0 /!0!/ .!0"0#1#3"3!2!2 3#5&6!3 1/ . - * ( ( , , , !/#0  )#/$/(5*7)6*6*7+7*7'6%3/- - + !0!0#0$2!0 1 1.*)"+)*!+)'!  !       #!),( '(4IKPHJN8<@#%5+?*A%A.H7K"FQ/I>J8C@I>J9D5?5A9BDJ"=F1>*;(;%9*>,=-;%2  %'  "10D4K7J3D.C6G6F7F;I9E :C(AR)9J!3C5C4C1B)6))11=7C7C6B)$ ")$2%2)!.!,'1'1#,)3/:0=7D:F$8E(/B.A2C.A6H1;*7(4"2%64C5B6B5A2@7E3B7F0A3D*=+>%8"5%9':':*<+?':+?0G1I.D5G:J8J;N>P 9K:K7I7E6C6H8H6H7H0@0A1A0@+@.A0@1A.@1A6E4E8F9E5C3B0@.A8D7C3?8D8C3@1A.?#7!5#6 1"/* -)761 1 2*:4@3E0E"8. + 4,C1 -) . 2 3%5#6%61:13&,6<7=/=.?"3+ ( ( ( " " % % *$0-87?!:?#6;04+2)1'0*0&/$."-"-!1"4(8(5'7"4#5$3%2(5$2+ , "-%() ( $&& "& !-!,"/$1#1 - ,* ' "+&.  38!BE+<>=;)/05UV=ON5?>$55462538.8*8+:)9(6,6,6(49B'MT;1>*6(6,98D*8&5-:'6'5)6+9*6$3 0 0!1#3 ... 0 1 !2(7$5$5&7#6&8#5"3!2$5'7#1"/, + , -+* * '  "/'4)5*7(6%4"2"2#1*5*7(5%4 0. 0$6&7&60 2//-)*1AD.,3"-)*+#   & )% *#     "-/3)57/ EFJ-/6 ',=+D/M6O >M)X^A7E>N =I!/@/A&8#0"-0  &16CJNWZ\lllggh``c  DEK@@H%#'"",66,*.+.$)#!     % $ & % ' .#1$1-95=0=/:4?7C?I?JAH CI HO#GO"IO$GK#EH"$<'@-B9F./$5 0#2"3,:)8* ' * *+%( **/-( +!/#2".#.,$3*5!,**#!" #)!  !("*-6+3#,'! !    !#!!"%! !#   "$$%(!'#'"' &!&!% $"'!'#'$*%*$*%%"'"(")&$'!+'&-*/).$+#"%    (%#($ %#&#! !  !"#% " ! ""%""$&'))&'!"$%(!"%"  !"&"&-147*0+21<'2#+#*!)   !     ")5%9(;'9+?*B)>*B*B+E/H4H$ '"   !1I,D.G-B,?2B7E9E?I!9G #/   !    %. 8?,BM4@K18H 3B6E7G8HCU$/<3@6C9F6C9F6C/:2>#1".1=2@;D:>9B4>2>'5&4(9%8(91?3>4A2A.<1A9I/>'8(:*=/B';-A+<&:"7"6)>$9%;*B*E?S!;NDP$@N#?N"N!5G,A*@;LBP"@M">N ;N7M5K7J6I6H2H5M.F0E+B/D3E->6EL!>G#/=0B5E(:%9%:#5/=7F2A4D,>/A2C0B)=2 1 0 &8.>0@);0* 6I6K0 &408#0!4$57>B@I?#D@$07)1%0#. ,%0#.* ) - 0"4"31/"0&5$3)6&3'0(* * ' $ %'* , !/39.5%0* ) ) !*#*  =?&@C&29KD'%.*1HG/nhP][#".#/ ,%0-"    *&2*5%8(9%3       %" * ""=P6R3QAV(YbA@K',:BK&LS/8F.>#48G #6 !!&,DFIXY[NPS&'3      45:% %)+ 69:!/6*^dT%,%  %*>>LUU`! 0$ !  +,8 #   ##&/8%!+%.8'KVDjqbw}quxrPUK15)15 "' $%)#! " #     ! !   ! # # (# ')-+.7:)15$LM=>A.-0%" $ % # # * + !0!/!.%2-9)6*56A=FEH#JH%IM$9IIO%SU)VV+TR*LR&RY(U[*RX(NU'JR%CP"ET"JW%HT$>M!,@+B 8)A?Q-F2EFU"4F.@*?4E2E!4//>8D7G*: .!1"2"5%4#2"0'4-8$."-#-%$&",!  #*!-)'& #  !   ! $    ##'&$"   #% !"   % &"&!% #!#"%!% $%#(") ' '#("'#( &$&)   (#,$+!'#) ###!#"'#"%$#!"!  "$$%)*%&)*$%$&""%+,'(!$#%!$!" %%)(,$!$#(.1#'#&#'")",)"!   "&')"'        44)/ 5(>(;':%:#6+C'>*B-C2G7E  &.3B.</;1;+;1@7C7A7>M)9G&6D"2:4B7H2A9I4B0>5D0@'6.=7E;G=H 6G.<#3-"1.;0=+9*8#2#/&2*52=:B*:,<*9-<*<1A0A/A)<%7';2G/A 5"7%:&=&< 6$<,G>P!9L?S!BT$?O"?O#?N#>M":L 9K ;M ;M!=M!L"?L"=K"@M#@P".C0F?P!CR#@S ?O AP";N1G-E1G6J6J+F,E.D8H6G1D/@+=6E;H 4F8K4I&5A :F 3C/C7G:J?K"6G5F4F5F5F:L?N"CN$BM#?L!CR#ET$BQ"CR#=K(?":*@$8,=7G.C.B5C6D4E.C%=5 . 5&:&9- +, - + , /7"2 1#4>@MC%SD(DA"=B:</7'1*7.<):/- +% )&.(2"+&'0&/.8AG(NS3IL/OP3DG)@B%/6(2*3,4)4#.%0&0( ' ' ,"3%8):*72>-9,84;)/'1"0- ( ( + . + , &2, * ' & )")0.615(0+11588>@8>/614172807.6-4*5*3'3)5.88CfxM5A08-6)6'6*4(47@/<7C!AM(#/"34F"':':"4"3$6#4"30 0 3#5#5"4$5&5(8#5$6"5%5$5#4$5#3#4$5"4#4,<+;(8'9%7!2$3%2&3"1#1#1 .- /, .) ) #0 //, , ( ' $ % $,AE/FH1(-1. $1/"1*!-  $!-%2 1 /*/#0    *  16:SWXCP#2F.G7HJQ0'80;$8*;8G=H)LU94C$7!  &'(*79<579!  !#) #'$    !;?8^`Z+0,"' %%"5MIX --:!"1%#  ! ")T]NnuihpahndUYP %,/23()"$   ! $   " ! ! $  ! $ ! !'.'-%,"*)/DG7UXJhj\XYI?A0"'#)# & & " # # % & ( , (7.;3@=G@I DI"JM&BN"7HRX+TV-YY.YX-VV+W^*\`,U]*Q[)T`+[f/U`*V_*T[+X^-P](N^&DY"=TBV!;W5G=MHS#OT&JR%7F-C"9* * !/$/".%.#-% !(% ' % % % # $ " " "  " ! ! " # % " '&%! "#" "!! "#"!$$%#$$%"&#& $$$"!& %%!&"("(!'&%$ (    !*%-(.$)&)#)%*  $#!&")$+"'"'!% $ $!!!  !" """%$%%&(&' "%')," ! "#   "!&%+ &$$$!&##"# ! ! ! #  &%)!             !(*($9(<';&9(;+B*=)<+@4J6?  1K'$*+6/;2C5F->-?/=8C=GJ"  ,&$2/$#-76 #8A.?J6K".;(7;F4A)5#.&1&1$.1:7A=FEL#3=IR&GS%HS%LV&;FBL!;GAM"8DGS%FT$=J;G6C-<:F;G?K!IR%IS&9F4C.>(6#4.?/?,<);,?0@-@&7*;2C5D%5(:(=,?2B3E-@%8%8&<1D.A->"5#8$9#6.E5I;L :LEX&AU$@R#>N">M">M"9J M#=L">N"AP$>N"?N#?G!AD#HD'MH*QH,RN-VT/^X4aZ6_V5ZR0_Y1a`5\W0TN,SK-PH+QG*^R2[Q1ZS1HM&`V3gX7ZQ1gY7b]4g^7k^9dY6eZ6eW6_U3VS.OP*OO+GN&LN*QQ,\S3bW6^V4XW1bZ5bW6dV6dV6`V3`T2[P0\P1^T3g[8i^:|[tmgGed@qn>kj9he8lh;rh>sn?[c2fc8ldD!6>.78>?D$5<"."-, "4#5(6.9,83<4=-5)4-6'4. ( - . /'4*6!*' '$   +$/&/'.&.,1-37:6614.3-4/617/6+3*4)2*2-414149@DR,0804,5+4)5'5-8-7:D",9%30 /?-@$6/0. . - - , - 0 #3$5&7'8*;*;(9'8(7'5#2$4$5%6$6%7)<)<':)9(:&8&9'9'7&6$3"0(5+7+8,:&4%4%4 ., .#0-' ) ( *( ' )*"+!+ / /..1) ) * -.'3$0) #3*9'7,!0!2"1& # (& *"-#   '+3"%0,?)?*>/B(=(:$:#67G%t%4 2.#58<91G2B2>  .8E6@.D+D,B1L?\Mj$+D/M/F5@=J>JEN"KQ(>D%     !)) :H1KY>ET7H+EP/=N$=L":J >O&=M%=N"9I6C2>(1.68@1:3@+;/@3C8E2>%2!/,9"1&5:E4A0=5B8D5A/: ,!,'2,8.;:F>H 7@-7,:9EBK"HQ%GP$AM!9EAL!>I ?J!(5*3;EBO#NY)FQ$FS%BO!?J 1=.<+9%4*9)8=M!HW'6D.>6F7F!2):3B.A4G4F1D5I3K5K)@.B%8$8*>-C4H6J8I@L#@N$AQ$AR#@O#=K">M"=N":L :M >P"BS$@O$>M#;L -B6J>N";L!:M=O*@?N!DQ$ER%KV(DS$AR"BQ#BQ#;N>K"J"?K#=K"=J!0<2>8G J"2A(;3FAM$EQ&GQ&MV)NT*LS(NT*MR)GQ%CP"IO&IO&DM$8I.C#<#=$<&9%9+>5EGJ&FH&KH(OI+RK-ST.OS*[X1`Y4e[8fZ8aV5^T3[Q1ZS0VM.RH,NG*]R2aV5YR0ZQ1hZ9fX7]R3eW6j`8mb:eX6i[8r`C"LR(h\9cT5aS4hY9eY8g]8j^9o`=zmI|ZxUcb5lfje;_j5\i3jhj`:sgB|rFof@qf@g_;VU4/8'^a7S[.PY,NY+CS&BV#?Q"=L!?P">K"9H6 4 1 . / , , . 1-+ &94A=FB&9=!1717+4&1- "3!1,;/>5?5>/9/:"/&3- - 18*6+7&4#/ *#+&)  ! ( & '- )"*#+'.-.9;9=28-6-6/607.6.5-5,4,2,203.3/51:/:-8+5*3-5.8)8(5)9(8'8)8!."1!1!1'7%60 / - - - - 0 &6*;+:):-<):'8&8(9'7!2!1 1!3%5&8(;*<)9(:&9%7&9(=':%7#4%5)9+9(7)8&5'6+ ) + * + ) + + ) -, ( ( +*' +$1$42"2.-* + +(1'0"0 3 2#4&7'6 4#1)  )'.$-#-'  7;A% )2?,A+C3M4K(=+:"7&"3   '   +  *$  "(#      WW[cceXX\11=#!      +\dUdl]cjWFK7"&),-%'33+,'( #!  "  "  *% !  # " #16%DI8oredfZdg[#+)/49&+/=@.*.>?,XXIRTD*/  !  # ' * #3.=8FJ!.:(5+9(5)7,"-(40<4A8CBJ!EK$NU)HP&HN&IO&7B?K GR%O[*IU&@L"IS&S\+DM$>H!7CCN#U_.Wd/FW%@R!AQ"/@1%7.<.:2=9D-;$4&7&7/?+;-<:F:D=G *8'6)8!2(85E.=5D1D7H6D):/<3A.?0<1?0A1D;M3G+@(;'<+>0B3G5H6I6I=M"CQ&@N$?N#AO$@N$?M#9L ;M!=O">O"@O#?L$=J"6H7G?K"@O#=N!AO#@M!/CAN"FS%HW&FV%CQ#IS(GR&CQ#s_=gW7eW5WU.ZT1`V4XU0NU*IP(OR+US0ZV2\U3YU1SV.IS'k`:gX6jZ8k[9k^;m_;k\9o_;n^:rdAsg>sn>ia@wnKmc>qf@uhDtfAshCtg@uk@[q3_j5pi>pi>wmGrg@zmDwkBg^H!;I8J:K7N5M,E5 3 / - - - - * ) , 3)<*;(9!3- & &% #  %   $/-4;B(>I(,51:"-%.!-,,,* ) )*".!,!+%/2;QT6XWDE&@B$>A$/5"-,.$6%9%7$4%3*5* + , 0:/:'4- , "- +++   $' ))/%.#,%,*003-22618/75948/6/6-4-4/606+3-3.4,5/62;0;+8)5+80<*9+9)6(7(8(9.?#6"2'7(7!2"10 . . - , /$3$4$4%6(8)8#3"2(8)9%7!5!5"4"4$4%4"3(:(;%8':(=&:';&:&9&8%7&7'6%3'5(8(7#3#2!2"2* ) * ( +)6* ( +.4&.( ,%20 2&5$5/ !.!./. 0.-,%5%5,;!/+($  !,!.%/!,#0'9>D# %!+#:A/A.E'?*?.>8B(9# #:?8      &         *43<&&4))7--:54=).$$2[[_mmnYY\??I 0        *GO?JSFGPAlsbX_J8='::!')" !%#&!$##'# $# "  "(!(& # "   %"CH8KP@NSC*1.6"+3<@.bcT]^QAD2]^PvuhRQ@>@/"  " $ +0B:IBP!AI"IP%OW(R`*GP&R[*UX-Z].`g0gp3\g/[c0R[,_b3qq=ek6Xd.`d4ij9fj4ho6^l0Wc,cb2dc4b_4Y_/Xa.Zc0W]/`a4ae2Y],OX)GR&JW%JV%@Q =N5I5J1A/?&8!10/*"3*:'&) )(' (   ( $ $  ! !  "  !    " !  $  " #    !""! ! $%# $    ##%%&"' %' (&!'#)!* +'&)+++,.    ! #!*$,#*!(!)#+ %$$#"*2/5" &)!! $#%($('*(*')+../(*'))*#$!#%&!$!" # "   !  "" !"%!% &%# !    '%+"    "     % & "   #3!4#;$=%?+B.F+C-E0G8LBS!"4  ,A-A*E+F/F1D>P096D8J7K8P;N>P I#/<8D-;/<6D0=5?9F/<-<7E7C(29<2<3==E!9D2@)5&1'1)34<:F@J!5>6@>G @I!GP%KQ(RV+QW*EK$9D:H OX*V^.UZ.GM&AK#?I"9D3CI!8EN!9K,A$9*@4E4F4I3H6I8J@Q#CR&AQ$AQ$@P$AO%?M$;K!?O#?L#=L"N AM"JQ(IT'FU$FT&IS(GR'CR$?O"8J8L:J8I9H7I:K =M">L#?M$?M"?Q#@W$HV(DU&+89?$CJ'LQ+MS+LT*JQ)NU*V[.PW,QW,OV+OU+JR(MR+PX-LU*EQ&JS)SV.RX-RY-TZ.VV.YS0SQ-RS,PR+KQ)HP&:J6J6K/F*?)@1GOQ,YV0ZV0SR-WN/ZO1_V4TZ-b[5hZ9eX7j]:i[;bU7gY8dW7UL/YN0VL0QJ-RI,UL.PJ,[U1j`m^l^tc@ziCtd?oF|mGrf@ugAtfAxlDuiA~rK|pGvjApf>Yn1kgbc7\b3]^3SW.LS,EO)AM$ER%JW(RW-IR(HO(HN(C#.6*2&/) ' + 0 1 !4(9(6"1(7(6. + + *    $ , ) (&.)0'/#.$.)/.245A> 9;381308/718280817.618/707.8.73</;)9+95>GC%"2D/F&<(8+7EG-9>"    ++2)(0$#-'  %  %  NR=)/5  !$   !$-VU^1.=%    !             !%/9D3OWEjna6<*"&"!"  ! "%%'#&!%# !%%*&' & #+$ # *1.3 &$@C36<(HM=knb'/MQ@~wyzq}rfcSTR@(.   "06D?KBN"JR&QX)N['Q]*UZ,`\3_Z2gd7nm9no8hq6fh6_e3io:FHIH{F~G|~BxzCux@^q1vz?hp7bk5iq7in8hp6ru,;  %>1F5F-I.H2F.C/A0E2G3E3K9M:M9L8K('55C&'6-A5J5H:KI"=H!:H8G=M=L8H7H:HCI"AI!EK#+9.<(63>8B"/(41</9'3".%16=.7.9@I!AJ"6>DI$AI"EN#GP%J!AM";E=H 9F2@8F6D;F 2@4C.>/?0A5D/@&7+9'5+8/=0=0<2<.>(:6E9E/;.:@K"EP%9D8B:Cth?uo?xmBzoExSuiBsiAqm>_s4rg?ob=g^;qf@oc@ia+:!.".",#-.7.98BKQ-[\>YXC!CG%DG$OL-LK.UT;UT90:/:.:,<6A;CIG'GF'KF(ID&:C9A/=M]5&7'82?#5&:"4!310 0 0 2"2#3#4"2!1!0!0 /"2"3!2 2%6"4#5%6)9,;)8,<'7'9+<*<(;&:'<'<(<&;%9#8%9&:#7"2%5%4"1.* -)*+71<$/$0&1)1$1, * - 4&8%7(6 4, * ".*( ( *+$2.;'3"./"/ ,%%$0(#/&.&,   "$.?4G*?)<,9*:'6    !&'2 +'(1;=@$   '    & $& 172     ""'(   $(            ! ?H5?H80;'AF6/2%*$  ! " !$# %)+-/%)!(!'#)$ %" "(   &=C0EJ7%.BG68@-gj\psexY[MJK:AA.FF4-/  ( +;7F?L JY&Q_(Zd,_d/^_0^Z1la9smBul@tl?phxx?vz>ISTMILHwzCIEt=hw7bq4ku9nv:uz;sx:co3\i0dn2[e.PX-QZ0QZ*V_*Yb+@S >O BQ!DX!;Q?Q@S7K%9#7"6( +.+-,* $%"!+*)& $   ! ! !  % ' & $     "   %%! " # "  !    #####%%%"("("($)%*"*!+$, *& (&'''&&"     %",)!)(&$#!)%,&'+#('%$#&%!!#$#%(')$&"&(*),)+"'&+"&$ %$! %#$ $"'"&%$""&+(. %#&*#"!$   $(#!%   ! "! $" # & #     " #  " "  #()2'1%2"6"8&9*<"3&<4Q2P-L.H.E2N0J1D/A/F1E4G5G7K8N:MO>N@O CM#;D (.  '8?(;D.M!BN#FQ$@L!AM"AL"8FAK"@J">H!GN%GN&=F >F BJ#CL#OW*MR)JR'JU(HP&EO&CO%GP&=H 5BEQ$AK#=I =J 3>.?*:.?7C0=*76DGN&>E!7@4@>G!:E3C;H 6G5J4L:O 9Q 9Q>T"?W#>R"EW(@R%>P$=N#@P%?O$=M#=M#>O#>M$AL%EP':K!3HAO%CN&DO'IU*IU)ER&EP'IS)IR(AN#KR*LT*HU)BS%IU)GX(=R!>N"=K!=L!AM$>P"B[%HV)JY*O[-NX-?]%?[&5G"?I(NX.PZ0U^1Ub1U_1Ya3^a6df6hj9bg7ae6\e3Zd1ij:dl6ooqf=kd:lb9rfsc?j`:ja:bX5\S4bW7_T6^S5UJ/ZP2UL/XO0]R3gX8yhBwIuIqFoEmEvf@wfAxgBxfB~iD~mFzjCwfAp`>td@m_rf?zmCymBtf@sgBrHtHznDvkBfl9dt8mc>ykDsfArfAi_;SQ0:C"ri@|N{G|vBMW*,;3?KT)U[/RX-SY.SZ.KV)GS&IT'HR'HT&@M#>N!;M4G-A0D3K2L+D!83- - ' & # & (! )#,&0*(45>&1/7>D#8@.<0=0;.;(8(:,>?ODO!:HJM%ML&?MJU%OU)YX/KP'8A.9"/&0#.&0#0-;>H!;C NP.`_Cf`Gg_DVR1GI'JJ)[U:YT8\Y=pmXgfP[]EBG)/8* ' + ' * + & $ $   *)4&0- - * $.-112,..0(-#+:74437<;59)3&/*0/438277;5:NF(@= /96>5?5>7?2>0?5CJI(MH)HG&BC"5>&8,=,<&8-?'7'9#6#8%8"3#6!40 1 !3#4#5$4"3"0"./ !1"20 - 1#4 0"5$7)9);(8.>'9&7*:+<+<)=(=(>&;%:%:$9$8#8#5!2%5#2 +) ) ) $ " *$0) "/,85<%0"/, * %6(8.%#72, + . ) ,%0!0*7*5&&2!/$2%.!- &&1)#/,3+/   !)&*7)>+=(618'8    %#( *@C># +2&"&"!'#GK:381"%   "    )+6$*6!T\LRXI6=*^`S;?."'"  ! " %(*--31%(',")% "  ! ! $" " 9A-EL8 +@G3koa8@-$/GJ7y|pdgZpqdkj[HG622%!++9:HKT&YZ,[\.oi6xj8wd:oa7yjjc:tm?|yBM~KOMUUPOOSKExr?ls9dm5is7ry:vx;ut;fl5em5_k0SZ)NZ*Ya.T\)NW%GP"FR#JR%NU'HT%GV#2E&;/ % 2)="5'*'-1,-"1/(&!$+)' !                     "         ""##$%&#)$(#('#+ *#,!,).&,"*!**(&&'$$  &*!+)!*!* )%%!'%()+#'$! ! " "   !')"'!%!& $$'" &%   "##(%$#%!%-1')!"$" &%$ !""    !!  &",)       % ) ",%   # &%/%4 7$7%  '.E 5/0H8K+;0A*>(?)<.E1F5H4G7K9Q9N;J7F8I=O=K /9& (2<(;B*8A&5C"3E7G6E6F=M!=N";J 7D9F=L>M CS"AN"8F0C9I):/>9F*8# -/;EK$KM'GK&BK#0=3?CJ#9D/;8A5?5>5<%2*7*63>.:8B>G!>H HO&IN&LR'QW+WX/OR)VY.?I!DO$>G!CL#GO&LS(SY-P[+LW)?L"8CCM$GQ&BL#>I >I ?H!6A+9*8,:.;0<5A1<1=-;*9,9,:4C,9+7+7)7*7/;-:.90<.:,95D8H6C8B=I >J"BI$@I">H!8E3?3B;H S$;O":L"N"DR&ET'K[*SY/3=!4D!HP+TY2W[2TX0V\1Z_3^a6df9^c6]_5[^4`c6ii:nl=de8Z]2be6gj9oj>fd9ee8ig:ro?vuBlq=go9ek7ej9fl8mp;ci6^f4ii9gi9\a2X_0IV(KZ(@V"@S"8PBW"Sa,bb5_Y3SO0g^9sd>ziBzkCwhBvg?yjBwhA|jCxiA}jEpa=te?l\:o]qb=xkBuf@rd?f\8i^:la;se?|kCzkAnDuf@mDoFq`}mEwKuJxiBsd@ur@eo:yjCxhCmHqd@_Z6RR0\T4b\7SU1;D"BK%.:TV/Y^0PY,QV,UW/RX-MU*JS(JV(@T!1N*D0I1O+H'A";%< 6 7/ + . ( $  ( *)219?C*OQ8:A&3;JN-XU7NO,7A6@CG#LN(QL*OI)BB#DF#FI"JJ#VR+YT-_X1r`=l[9^W1WR-GP#;G1;>C 8?6=6>9>/7+8:D4=?D!PP1IL+TR2LM,nhNnjQomWbaGUW7TW:GQ28C"0>)9,;#1 /) "2      ! " ( $058.1(*(+,.&-#. , !- 2629*2+2%.$/)3+417287<59;>596=9;>?=?CB"ED#>EFI$IH'DF$-?-=):5@5C4E-?(;0C,@%8%8%:&<%8%7 31 3!2!3%5#2#1!.+ . / // 0$3"3 0!3$6$6$6$6+<+>+;*<);*<-?+A,B)?'>%<$9"8!5 1!1/. .*' ' ' ' ( ' ' +, !/!.'5+ 0&:%8'7&6%820 * & !-(0"2&5/:.9)4$/*+$ $/)+,"1 /;9*>2@)<-8'7          "#&))/224&$( #     '.8$FN;x}qhmafj_[^RAD4"(!"&  #&)(*41*,21')%% #  ! # !  !*18#*4&._dTWZK#- *-4GI6VXK>A0_^NFE268%'$0;GOU(^Y0ne6qh8sg7vb9uf7pd7}s@wj?rfjv6ns9bb3jl6dh2R_(P^'R](S\(KW$FT"AM!EM#MV&LW%9I2F#5) 11A:H+9(7#2'.&5#3!3#5%7#0)))& # !                      !       "# ! #&!(!( %'& *!*$*"+%,"+!+)!* )'&(&&'  +!"*!) *#+")'!%!)%##   "   # "!# !#!#$"!&#(%+#   %!!    $%"#%% '&""!!&##!  ! !  ! # , ! !          "!,% +8/,#.$5$()5/D/I2K6K9L7K5J4E9C 7< ?G#@M#2;$  09#1;$-5$3>4C.@0@1@3B6D>K"AN#2?3?3@4B6F/@0@2D2C;I1@,<9E=I7E6C2A=IFM%AI"FO&FO&=J!?J"GN&;D5?+55;5:'2!.",(2*74?6@5@9C/;0=0=>G 4?DL$IP&?I!I!BM#=G H"*9*7+4)7*7'3,9+8&3!/!1$3.:.<5C1<KQ)GQ'DO&AM$@M$>K"tpAwlAre>l^;pf=tg@ui@tn?\d3U^/S]-U^.P\+CT#I^&Sa,eb6g`7gg9si?rd?xiB|nEug@~nFsIrEoCwi@qb>dW8wiAj[;o_>yiD`T6WK0aT5bV7YQ5`U5fV8sd@|iBnFsI}OwLlEoEug?o`m^;xfBmGrIqGtJnEziBnE~jCub>sa=n^;pa=nd;z}EznCpDve@veAsb?xgB|kBoEsH}LwJ|LzKyhBziDtm@mm<~nEpFma=g[:vhCj_;QN-UQ0VS1NM,GK'\[3W\1^\5X[1Q\,N\*>P =O :Q8U2Q&@"8'=+C&=';&:#8!4!2.8&3+# %%-,6.7BG+MN4YYABB&QP0IJ*JI'MJ(OK*UP.e[5n\:RO*[R/XN.OJ*SR*IM%QQ*fY6k\8fV7kY:hGgV8SR,DP".;09)3*4395<19-5&0>E#6:EF'AB"KF(KH(LL.ZV:*.!$>@ KI*CF&FH*,>)<+=+?3E)>)>&=,E*>,>%9!5!4"3#4%5$3#2$1 .!/+ !.,/ "2#3#3#3&7':);':(;&:)<.@/?/@,>6E0E.C,A'?%="9#9!5!3 1+ + ) ' ' ) * + * * ) * $/&1$20 $6 6&<$=!1"2%72/ * % +!0/!3'4)6&4 0"/'  $ */.#  ""1B6B&4*    *+/%%)!"&989;:;..2**0jhi@?DA?E64;=;Afeg       -#0LS@uymLTDjpd>F6:?379)14#JI886!$'')**3202')$" "  % $  " # &0^bQ +LR@8@,hl_9=*' (:>-AC313!03 FE0.4,6EK#VV-h_5of6ca1qg7}j}m=~pBvh=xi>wj>xEPUWPR\[QORJHMLHuk=tDxFxG{tAyr>h^7uk;vg;ae1FZ#K]&M['DR"BO EP"FN$IT%AP ?L>K8H5DBN FR#JR%8@4<,<"3'*:*;#5/?0@)9$1,( $ #    " !               " ! "        #"% ("( '&()(&'!*#+( ) ( ) *,*+&(, &!-++)",)2/7-6&#  &! " #              $" #!!'"("    !     #("*""  ! $   !!     %       $         "  >Q14M%/'&4,H0J2J9O-=+90@8G 7DFO&NS*>G"5C.A&8$7"40 ':.?4C5@#6.@1AEM#NQ(EK$AF!HL%GJ%DI%BH#@L!FP$RX+IP&4>4@.:8AFL#BI"EL#>F =DIN&BJ#OS*GO%HP&QT+>E!EN%EK%DM$7A8C-:%6:EEN%NV*GQ&?L"LT(MR)MS)?I!7C7D/=2@9D8C7C7C'6-<2?;F 0=0;$2-<+:*=/>,;5B9G*9):-<,9+7*)7R"@R$>O#U#=Q#O$=O$>Q%CU'BQ'EP)DR(:M"@R%IV*JW+FT(DR'6FAM%GV*NZ-T^0T_1R]/Q_.MZ-FS'FR'IQ)GU'HT)NZ-?K'IJ.WZ2Z^6bd9cc:ca:d`:be8hl?oo?vpBli=hd;ic:qi>uk?ul@rh?wkBrk@gj:gh:hf:c_8e_9gb9tl@qm>id:ro>xoBsg?ylBxkAvmBpl>ri?vnAig9_b4a^3_]3Z^1W^/Pc+W_.ac4fc7be6fd9oc=tfAyhB}kDnDqHuJvJnG{iCug@od>ma>pb?sc@cT6_Q3p`=l^:cX6eY8rd?}oDuIqGoGwL}OyJuFzlBzjBrG{nB{jA|jBsHqHwLnG{NsIxLvJuFofob-:.;*;+>+<)<+:&8"3/8>E$LT64= $/&/19 >C+?F'OS6IK/QN4ON.d[:iY7ta?jY:gW7eV5\W/CJ!8C=C!>E0=7IJR$AL >DBK!XU/n]<[S1SR,9G2>&3". . #.%-+ .8.9VZ9=A"ZX79-5/ / !0 / / / #1$3%0 . "1'2?===28%3.;1<5=8?=BMK)YQ0`U4cS5TL,ZL0YL/LJ'.A+?2D2E+>*@0G9F7D2B&:#5$5%5&6'4,2&0#/!.#2!0"0 / 2$5$5'6'8(;.A3H-@*>-A0B.C.A1C-?3E2F/C*?'@%=#9#9!5"4/& * ( ' (+ . /+ + '5+5)30 2 * /, 2#=!8%:%802- ( ,-+-".-3075;17  '$20+     (,;  ")       #*)4ZZbnnsdbekij`^_SS[         ",E8JQDy}ryfh[57&"), ! $$'"&%$ &!(& & ( # +#,4=&*3IP9^bRTYHAF4'.$ $++.HI6vh>{lAvD}GMORSRX[XQSUIINGxA~tAwC|EzGvFxh@wi=zi=yj=ng5\b/S`)GY#OV(NU(HR%FR$CT"EW"DS"@P -A+?,?'8';8G0@'90$5/>'7-;$:*@/D1E9H1?4@5F4F5J4J0G2M/G&9& P[:IR-AH'IQ)AR$@O#AO$@N#@N#@M#?F#I!MR(UV.BH#2=,B(;%6. 3+=/?4C+;)9,<,<2>@G!=D7A4>7@CH"FJ$@J!=G;F9F7@2>$3'79D-<%5(8+:5AEL#EJ#FI%DI#=E 3@,:6A/>2@5C:D#4!3->1E3E0B:I8H5D2A.=0=#24CFO&=Q"=K"=J!N$>O%>P%>O$?P%BT&AU&CQ'ET(HY*DW'CW'DU(FS)CQ'CS'DT'MZ,IX*GU)ET(AQ%JU+MV-QY0RY0QY/S\0PZ.O\-LX*IY)LZ*O\+HU(U[0V]1=@)aa9gc
  • ql@oj?vpCyvFzyFtsB}uFpj?ketnAqk>tn?no}oCtm?vmA~oEuIyJ~MqFoaqo=}mCqHnGveAvb>rbwj?|mAoEqHrHrHtGvHNPPPqFne>ukAVU0QO.ke,ALT.?L#3A2@2@6@-=/A-=+<(8)9*<?N%KX.,86A!=F(JR6=G%KS2egM}za{sUqd"D@"LD&?; LD'47,5(519)5%5#3. , , $.(4"1!3 &5+77<3:$3!1)5-99BCG#AF!CG#US.^W3hY8m[;kY:dU6b]4^S2jc;ds=L^,NW)K]'BV"9P5HGQ$9L@N!>J ;N:U2J,@,?+;(8'7&6'5&3"0#2"2!2!3"5':)<*<-A2G,@.A-B,@+@.@3F6H1D-A(>&=$=": 51' & , + , .!1!0. * -+7#2!2/ + / .* 0 / + #7$7334 51*&'124/4)0+%   )// /!0$      *  ,9"1( !&(/9%fkZ8@4x|p{mqeZ_QEJ:&*"( " $)*!%%(;845+2 *&2%1!-$,IN<%0)+38?)RXFSVE,1&%49"UXGAC069$- P7J8H1A*:!2,?:G2B,<'/2?(7*<0A &%+ & % "    # # %              &-!)   $  #      " # % % & ((((*"* ** ,,!/-*)('& ()')!,)%#%($! !  ! $%#$  ##         ! $%                   ! $   # "      #     !#    & '$        0(?'='9&8' .,%%(   "+*M\,FS$GO$DM#EO$?G"GQ>&ET%CP$?I HP%PU)GQ$=G2F)A"59DBJ"6@-?,?':$;%9/?1B+?+;0@,E);. ( "0!0&4/<1=6@1>,<'8):1=/?-=+9'4-:#4#2!3%6'8.<7DH EM$BJ#CK#DL$MR)KR(HN'EN%DP$CN$@M"BO#?O"?L!4E8H9M8LQ#CT&>Q#6L5N6N6M7L6K@R%@R&BT&;R"EV(J\+BU'FT(DV'M[,GY)JX+JY+HW*EU(FW(?U$HU*JW*HV*FV(EX'KY,P[/OY/NY-RX0T[1T_0N\-JW)I[(Vf0[b3JZ)T_05<%RR2fb;lj>roAuHuHwHzLN|N{JrsBXY3]X5]W4e]9a\8ea:gb;lj=oc>XS5k_=whCn_=tf>sE{lBwk@zpB{rB}tC~rCtn@vqBtn@nn;ir9npln:in9qnT}lDqd=znBPQsEqDRTUTNyELQNNNNQTUQSSUWRuOwVupO}rHsG{pDtEzHM|JvIqGuHoF~oEsGpFyMud@{gBzjAvg?xkArh>ri>sk>pCyKwKwLtIyKQTSTTtFvo@vDlk;^Y4um@xuBaa6[a1ko:gm8ah5Wa/BY"&F @ >$<'?1C@N#:O6E+;,=/=0<6?.;2;/A5H ?L*1>3?-;9F!?L'OU2_b>mkGxsZspQsrQ`b>Z\6a`9\[1xj@yOXVoHOJ1{LxHoCzJU{Pxd?ZV.AI"JS,FS(MW-Z`7VZ47A.=.;,9?D#SR/d]@maDIM&LJ)|w`wkOHD,9?5<+8*:-<*809.9*;)9'<&:(7'4%5+;S :M1E-?,=,<):)8$4#3#4&6#4'8(:+>1C/C4K8J5G1A,>-?-?.A0D3E,@1D6I0E.D.C.C'>":!82/ , + ) * - .. - ) & ( ,.6>)DJ7(0&0. * ) ' /"8&:$4 2%7)=,9*6,4'2!.+ .*    10!4, .( 99=   #!,!   )+#2(% %%!""#%.6(FM<^cUSZL>E5"%,!&%)*-# $$(&11&+%*"+08$0( % .5($ 4:#-6 +_cTCE2$)")% 7;%?C.-3%1=N[_/ugvl9tj6qf5qh7jh6[c.W^+PU'UW(RS(IO$>H:HAO @M =N>O@OFR!AN ANCP AM AM"/? 0 !0,9/>#5( ' #   $ % ! #                  #&# $     "   % )''(,'&( +++#, +-)'&&   '*!.)*%"$% +% # &# !$&#  ! '   "     !   #$!       $     !  " !#"!  "   #!&'$ ' ,!+(% "%## !      0A%5+,(;,     GT&IU%GR$GO$LN(FL%CM$>J!I 5F7H/D"8"8$:';)<&76B/=.?8F*;8B7E'=(=(;%;6A4@+8"/* -1=-:--%6'89=B AE!8B)42;=F :C6AM BO#1BO#>O#=Q#L"DQ(@P%;M#?P%HX)KY,GV*@S&CX'Q^.O\.N\-K[,LZ,GX)JV,LW,JW+JX+LW,IV*KY+LZ-Q]0S\1W]2X[3U[1W`1Ua0V_0Q_-[b3[b4W_1ad7MN0PO2aa9xrCtH}qG~tGyuEvI~MvrChiqore=ulB~tJ|sF{pEvH{KzJxIzK}oDtFtjAuGLQP~NOUQ}Jlg:~J}GORQUTSOWRRQQTTX6:{mFzOuJ}LSQtGrGsHqFsEuIsJ}jDqb>qe?wlAylB{nBqCsFpDwFxIwJzMuJsI{NRPT\XVSSSNwFlf:ga9XX1ZZ3^`4Yb0L](AX"0P&D0F4IB VL.YO0]Q2VR.[V1m^;cW6TL-k^;pGziBsc>td@l]:f`7lf:i_8e[5e\6^]1`X2RM+[]4huCfp@QY.HS'@O"8H5D0@+;+:'7#4&6$5%6$6(;.B8F8J6H;I 7H4C3C1B1B1B+?,B2E4E;J 9H4E0D0C/D&>%@#<"83- , * + + / 2 3. ) $ *DL;cg[-4'& ' + + *!6#;(;"2#7*?+?'9#4%/%,'/.-)      )0(9!0+ '  HHICCE   , *$ )!-(0)( $  *+4",>F6FN>#DJ<!+09<*&-!  '+11G>&12"'!(+/%-% % $-$ ! *3<&" @C19<(%)"*!),2,1).%+)?:Pqg:nCuI|LPPG~BKRURSZWZWNQWZQPJNMMK{AefCst?yDvBuh8oc4gf1hh2ii4_b/SV*QV)KP&LN&CK!>L>L>L;J@O FT"QX'MS%NT%PX'?J >L!AO">I"2?6G?O DR"BM!!1-&  $ #    ! "              ! ! #           # ))' ' & &% (,* ,((+%% $ % %(+*& (' '!*'$%  &'*(3!-%%% ! $  ! #   # ($   '' (  ' (  #! "  " ! &               &$        '8 /<#MY*U^-KS&PT(]\0]]0TX,BR"7P3I3F+?+?(=$9%>)@*?)<(:+<0A,=-=.<3=7>6@)9. *;7C;B4>2<0<+9)7%3'5-;(6):-<5=6=3=AC!@?!BD"@E"7A=G ;D4A/>)92. #7KP&VZ-;H -<.=,:.>5GGU<*IR'AN#EO$>I!=H 8E:F9F>H!/<2@/=.<5C3@2A4B/?=G JN(:F8G>J =K!6C8E7F=K I"=I"EO&?L#7D!8E!=J$O$=M$;L#d`9}uFyKOwHrlAkk>wuDxqEzpEujBnc?sgBzlFja=vfB{lF|mF|oFwpCwhErJm`?vkAzoErHyH~M|JxHOJK}I~HsEyH}tC}pBsDqD}nDzlC}qDsD|sB{qExqAzpCvjAzmCuHwI}mDnDuI|nDzmCR]\WV__RRvoCPRPOSVVRTUXUSTWV_}oM{TqHqIuLsIyMsGnF|MvIqGrHxIzLqc>nak^3>)7$2. + ) ' . %1"/!/$0)3'2.6,7,87<CF"UL.AC"FI$YP/YQ0cS5cS6bS4gX8sTyzpXkEnHsb>o^;fV7^S2lc9ma%6#8"6"5 4( /!0,%1 0 2!.#+   '0$30+/$227OOP557 )    ''1",!+,3%.$    *3 %0'1Y^Q7?/(*2$ " # ''*&*#( '&(03'%$& #.3&(/ 38".4%*"*&+-3(/&-)0BF!DM"jc7uDzHB@MJGNZYNSRRUNEMSXSPQQRPQHCyDzr@wl>nC{j?ja4b].h_4bY3a[1XX.MS(1E2F?R CS!BT!CQ"FO$GQ$MU(QY(WY+>G:F6C>L BP#;KGW%IZ%BP!KO&CJ!7A)7+ "1) & % $ # "   ! & + # "   "       # $ "       !  ! # $ + ( % ( * ) & $ % ' '((*( $ $ # (&'*,".+*( +'&" $"+$2$0$%+$  $ $ $ % & ' " & & %# ' (%   +"  '($ !  (    % "            ?I*IU.@O%EV%IV&SZ+NR(UW,]\0]\0Z\.X]-EU#8L/F#:5"7'>(?-A/A3C,;(9/?1A=D LJ(@D"1=2>+9%6>F EH#DG#/:3<.:)8)8&3)5%3-;.;5=4;*7+7.95>1=;D>F 9D8D=I7D7C6C2B*=9EAL"O :K7J5I5F;G5F5E2B4C;H ;I :I8J:KAK#HP&EQ%FP&BM$>K!?K"AL#AM$DP%AN#@N#BN$BP$DS%FS&DQ&CO%EP'EQ'ER'@M%,=*6BT&ET(DR(@O&=T#DU'@R%>L$:M!?N$:O 8I ;L!=N">O":N M&MY.GU*CR(MZ.QZ/R[/O\.PZ/Q[/QZ/PY.OZ.T]0OX-JS+PU.X[3R[0Q\/O^.bf9\d5fk9ff9hh:ol=gj9gm9cd7rj?mf>_X9ph@li=xtE|I~M{JypEsjCwKwIrkBwJzRsLziEzOyhE~oGuK|nEuLyJvKtHc\xaCiKeD{bCeGkKgEeR5_N1YL-QK)JH&:BCE"5A?L#JR*;C.>.?+:'7(:(64;@I HK$BF!FH#\Q1ZQ/MK(GH%5B9F=J-9"2+ * * )) "0'2%2%2067;4:182;>B KJ'UN-?C!EH$VM-`O3hV8sa?sa?m[:mZ:zkM|oS|STuNxfBr`?k]@h\:vjAbV4bY4ZY0UY.RW,UO-MU*GW&KV)?L!7G3F2B+;'8'7#2!3!4$9&<3G4I9K?G#DK'I"6G3E3F2F:L,C%=0 /. 0 1// 1!4/) ( + * # * + !4#;'=&<%;)$9!4!6#8 3.) $/$0,* )1.!4%  ' - '9$5,!21  ,,0)*.667++,$%'   ! )CF5AE4%"      ",%.!))! # )' &', &%+,-&+"+#*!)% %!*$ $ #!( (25.3*3.9$-6:PN)nc9}nAnBsBECLR\Zb]WJvM!FT%KV'HS%GP$EO#;H):* + ( &         "  # "   $ # #  " ! % +    & # "      !  % " # ) ' ( ( & & ' ' % *,( # # & & ! # ,+-+**),,,&'  ,($ )(   # & * ) # & ! % (($ ' $    (('#  # " $ $ $ )!  (4'2%###          )5+;$/KY'M[(IX&DU$AW!DW#LU'UX+]^1RX+HT&AP"MW(NW(SX*BR"4K3J2J+E.C2E3E/>&7'90A5E4AKJ'EF%0=0#21=%30:+71>7@4>1?P#;M!;M">P#DS&@Q#?Q#>P$5J CS)P[0OZ.FU*GR+MY-OZ/PZ/R[0R\0R[0S\0P\.O[.S]0QY/PX/MX-RW0SZ1W^2\a4\a4bh8ohAyoEwoEtjBmj>mj>icPI4od@pj?|wF}zFNQzK{K}tJ}TVzN}Q}OuLwJ|NXwOzOyNZS{PwMukFxOSyM|IUSSWTNMPONxI{K}LM}LzKyH|IKLzJOVYSORSVY[c`e\[a]UWWST_ia_][^]XZ]bc`aZ[YYVWPRWR}OyLpGrF{HwHwJwH~rFtH{MwKsHxHzoAJN~LwHsHtK|NSTVSUZWXXWUSQSxIrEse>l]:h^7^Y1JS'AN"EN%4;!;F!@S"=T 5U,QG])9X7WOi/Sj4_o?}_ffG[\:``>mjF{tS}\}^edbnheujBɫybf[`jb\\YY[_V|Jjn8pEYaX~U~UuKqe=}mFySqNoP]\brMwPnEyc@t^>q\=t^>hY6SO*^Q0aU3FP%MT*CL";D:E5D9G=GBJ!5C6J=RHS%h[8jFj_:TV-LT($2!0 /"2#5/ #1)72=*71:8=>A!8@LJ'JK&XQ-aT3ML)JL&aT5eR6aP4n[;oHtK}kEmEuJviC_^UxK}oH~VwLwm@to>~tFrf?d^7ZQ1[Y2b_6`c5O[+DR%>N!6I8I=K+=):$7&8%9*=-C9L=P!BP$LM,GI)BI&H#&8':'9'=(= 3. + ) #  # * - , +1#1"4. ** 3%4&0$0. !")*+0'(*    "  "    %'$# & % % & ! #(#(%&+66$+ )(!+('!+( * (!(#+#)#+*14<5>@F#9@RZ*kj7jm5no9@~}@|GT[`cYRPJO\cS\e[SLPMPNGDHxD|JwHtDwr?tr&5(2)-&,A=S!?R!?P#AQ$IZ'IY&IV'IT&IU&GV%BU"JX&ES#PW)cc2cc2IV%3I6K0I9K5D4E3E.<,=1A+9/ 9DDI%6@5A:E2:*2)6+9(4,5'5%7'6%5'7.=0<)61:3;0=/>3?7C;C3?0<4>EI$EJ#,?60 0"50%8'7)<(8(;%:#9&='?%<!72 . 3#7)>.B7G9H;K =J M%DT&;N!>O#;L"8K ;M">O#FT'DR&FR'JV,J[,KZ-AO'DP)=K&KW,KX,P[/PY/OX/S[1U_1Wb2S^0Q]/V_2T\1U^1T]1QY/S\0S\0Y^4VZ2V[2ef:oh>jj>FDK!JO$SP*VU,JQ&UT-cX6l\;m];j[9ygAnFygB|iD{MRZdfUTUUxNTab]xHmf=ii:xoAwkBfe9TZ/QU,JQ(@L".C';(;*>,@.A+B/I9KCS%HQ(MO,IO+BO&CK'=D$AH$8F8J6G2F>K!.?*?)?$=0, , + ( & # 1+ / 030 / 1#:%=)D,>*@':#5 70- * ( $ $ " , . . .#2%6  + ( "5#1 '"      *)?@CEEH!%&      " % "    $%..?+="3!-",#,$ ! %'*+/EB%8926+1(1!,+%1* * )",&/*(!**1475;/:&4"10$    $& # # # " # &   " $ % ' $ % ' & & + .-%$ # % % % # # % !  $ # " % ' * ( ' ' $ ) ' $ ( - 0( ' & ( & /)' **+-* * # # % -(&% $  # #  ! ' (%)-+& & # !  (+-+(& ,$   " $ $ $ % & $     !%&#!$ $#" $ "1+@!2& & # !   3F5K;PET%PX*S^,=U!BU#CU#FW$DU#CT#ER$HR&AK#GO%Y_/IV&GS%AP!?N Y].bb2`d18KBR"6J:L8H=L 9L6H4I.B 3%7;E2=:E9C=E ,;/>6C6B:C2>0<2=2=+75;,9)9- ' ( , %4-:0:&2'52=%= 74 "5$70#8/E2F9L;L >K!AM#AG%AL$HQ(CP$DQ%CN$KY(O\*MZ)K[(KY(IW(FV&DV%AT#BR$CQ%>K"DO&HS(IX)ET(DR'EX(FW(?R$hl6F6G5F:G3D4C3D=J;IALIP#QR(IR$SR)KP&LX&^]2d^6aY4fY6r`>tb?yhCziCoG~R~PWUQS[`^|Q<:2rjNWYXQ~tEwp@wpAysCih:V[0KV)GS'9L.E1B*>2E+@-C0H6MFU&JR*LM*MS,FR'GM(HJ)EI''A%>'<%8$7#9. ' &$ ( %-(* . ,'32=(: 0* .    &   ! " $ ' "  $3!4 .8A-9?(-4(*-10'('+JD'QH*78-2-2#-(2+* % % '48$.( !)*127*5+5.6AE&[\:AJ#uh>xMUVV\^XVaaf`b\[WYXVSRRLQKyGoDnCtErD~nB|pAxn?tk>mc9dc5je7a`1XY-YZ.e`5fg5dd4fd5UZ-`_3c`4NV)>K 5GMU(HO&HM&RT+XW.da4NV)EQ&HS'>K!5B3D1?7?9?2>%2 .*"0&6"3/$ $ '*% $ # ! " "  ! ( )  ( * -        # " % % # % " & * & $ ( " # $ % & ) + + /, '!()&6(8/' /--.)  '*)$ "   "  " & (' % $ $1+7 ) .)& % % )4'3 .$1.*    #,* * % $ ) ( % % & ) %   (!/)" #%,#!" ! " )&4&  # "   +( 0B5K;P>Q BT#MY)BT#?S!DW$EX$K[(GU%?M C"BG$DQ%RZ+V\-KW&[b.on9kj5]a09L;N:M4K5F=N9M4L5M+>=I0?-<+ !/6@8>.<-=.=4AEJO&DM%EK%CH$?F!6G5H6I9J2G(>(;(;"4 31 62!7.@+@?K"0@)>":$:#80' *3G4J>N!J"?G#DK%JT(DP%CO$IX(KY(IY(LY)KZ(OZ+K[)FX&GW&CT%DU%BM%=G"EM&FP(FO(GR)EQ(AQ&BN&M$;J#,;+;;P"BU&FV(?P$>P$BQ&N[/O[/KY-KW-KW,IU,ER*KV-KW,DP)BL'MU.NW.QZ/Xc4[b5Y_4V^3X_4W_3W_3Ya4\`5^a6^^5lh=kh#C^'Ng)Kb&Jb'Ye6{|QZn\vx©{mes}˯}Ǩswͭ{ɩuӲ|հ{۸ōq̓Ōċڸ۷ش}ײ{ɦrh]bYf]cja]yPZzQXc\mHud?^S1`U3|gBhE|dAfDfCub>qaxpBup@W]/GX&>T!5M6J.B,?.@,A,@.D7PIU(YV2QP.`S6SV0NR-AF&BH&>F#8H7D7B8F?H#9F+=#7 2"4%6'8&6"43 6+>/@0@4/ / 0 2 ; 86'>&>&B&>%=#=(?(E%=%8 4"7%: 7/ ) "# $ (' , #-!*'50 *2.,       ' "   $(:.- *:C-EJ377,.<8+/YM.KC'35)0)1(228$/' ( ! ".'3+!,%/&0-6)4*7,8&1AI)PS0da4sHzMVW[fekhjgfXUVTSUXSOOKL|HyIrFqCpDrEmB}j@vh>tcI"08,;&8.) ,"2,,"2"0%  *& !   " & " # * . .(!   ! & $ " & & $ % & % $ # % & $ $ + .'-0) )* /!3- 1(7+9 /.)$ % & $ !      # $ # % ( # & #0 "3//& .&5/.!2  ""4323* ) ( ) ' ( ( & ( + +    "-)$ %! !   ! ! $ '$ # $ !      #.6B9E2?.>/>-<#/!/(71>1>8H9N=S BT#BR#@Q"DR$FY&AU"@V!O^*U]-TY*OX(JS'FQ&HU&W^-]b0\b/hi5pn8be2BO#8J7J=N5I3I7I4I0E- 2=G 3A. # .:4?.=/A4C:D7C5@6?7@5@3?8C7A4@3@2>2>*;#7%9 4#7- (5'72>LQ(FS$LU(TY-L$>N$9L"3C 8I!=G%@O&AP&?O%FU+IW,MY.NW.MV-PX/LU-MU-QV/HQ+OS/RY1QW0MY.R\1Xa5X_4Z`6Za5[c6Yc4[b5W[4ba9ba9gg;^`8SS3jg>{HtJ{nHa_F[^JX_JceOd`HuO}RV^vƴ˺ƵɸŸŵ¶ôõ¶suceX^SWXYXX[VUXVpg`WUQQUZ\`[bgqlecjj}lgmliah_\`c][_XW]``bdheac^]`fhe^\\[\]_Z\SVXRWYVTZYZ[^\b]]\\VVWXdi[TR~MrG~iCoHqIqJsKxIrGq`A[S3ua?s]=hEk^9^\2YX/SY,V_/_u2\k2X\/of@nq@]n5ez9WY]zruzsllʲݿз}ΰ{Ӱ{omqػΕʑ̓̒ˑŌͯ|ܺӲphpcjnZne>qHxmCzPxPuJldr`rLlIyoDcc6pj>V[.X`0BL"AC#=D=C HJ&;DDJ"CQ!DQ!AM BP LS&]W0n]:r`=k\8i[7dY4dX4i]7wg@q_<{gC|RSVcc]gZY^amgdiZV]hX~OzF{xBji:llgS:\M4aU7l`=SQ0BF&@F&=F#;F"AI%BI&?G$.@3. , 1 ">&C(H&E(C,D+B*B'@(A*@(>-90F&>)?)? 6, ( % " % - 02. , .+     * /      #&7- ( & 3>&JP92501JC&KD'dT5PF*7:17%1-5-719 0"/+ -&$1"-.7/64;3;1:[X/(8,;6C>J db5tFMQ[`\`gdfVp|7BOWSVWSTSRNONyIpCrEoDnCwg>zj@rb/>0@.>4E7D5@-=(;0=4?5@9A9D3C2A0?-</>/A0A1?.>0@+=&6,;:BAK"0CFI&QT,M%.H3K7M:SDT%EP&FP'FK'FJ'EM'CM%DM&DR&FT'ES'AR$=Q!CP&@N#@I$CI&@I%AK&BJ&?J$:H!9H!N$BP&FS)=K%DR(CR&@S$HV,GS+IV,GU+FQ*JU,KU-GR+KR,IS+JS+IS+PW/Q[0T]2QZ0W^4[`7X]5[c6Y_4bd9_a7gf=kh?fe<;E+_a9~vFxIuKtKymFoItMuPyoRhcRyXVlsyŶĶǹŷ³˽ɾɾȽǵʼõ¶f`e]V]^UkgY[_]u\\[YZ]_^ee`binrj³oǺsźq͍͌֯նԎĸroe^^]c`\`adaaefefhhgbdhida`ccdbbbh^Z\XUZY```_iccaddeaZYYXZTWaXSOyLmErIqInHUxM]T4B=+=:)r`B^epJu`>aR3|eD¯ȰzbzQWMgk9mwB{]{_fyztzʯ{ħvӵٽҷz^uKKoWζ͔Ȑ޾ݼݻ޾Ȋۻkmmck`{mHnb?uiDuiDqJ{QwKuiCuMuLpJqe>uf?vKxk>mCb`4yk@wOsIuHtH|pBuIyNyNyLrLnIvKoo=ji9sn?ol=gi8DN$PQ-Z[1QW*OZ)T\+c]4OY(R\*__2c\4ud>uc?wf@vd@xcAvc?wh?|fBzPzPpIqJoG{N]\\bc[afmkflee`_]jbWJxqAbd5KS(?Q!BW#5O*A(<+?,B3GI#:G .@&9%7#51 2. 0!22$9#9 :8. + !=(F*I*H(E+E/G/H.@1A0?2B"7%9'?*E(?#:. ( %!# & +,"5!4+""+.   *2  #"#(($  * "  #$%% ' 1# '5@*7@'%+02C@#dS5n[:dP5XI0JD'3858&409;A)5!0!.! ( , )4(1,5176;-5*#5+;19@D$qf:KNY[\^_^[TKKMPBKWZZX`[ne>tCzGwF{IuEoB|nApD{nAxoAyjDseCk]:`W4]R3`U4mg9e`6[]0`a2\\0ZT.RO+OO+UR.XT/JM(2=4?=I":EAI#GP'IN)CI%NT+EO%8E:G:F0@2   10 0/!001.+))$# ((( * ,%         ! ! !   ! $ $ $ " # $ $ # $ $ ' ( * % *+& (('*)" # & % $ ! ! ! ,,% ) -,' ) & ) ( ) ( ' $ % % ( ' ( #4 51 . ) ) * , / 0 +      /#4$2#.#+ )'('%#$ % ! " %#' *)   *7=M!:H8G5D8DO @M!9K6G7G5K.F.E+A%7-. 8@7C&5, $2*9'8*8/=-='<'?(@,? 50'5&9)@':/A,B"93%6'8%7$7(;$5#5 2!5+=EL%=K!GM(EJ'DI&IN(DK%HL(HM(;N :Q >U!4N+J)H*J3KAM%8J >J$?J$;J!AI$9C@F"@H"0C+?+B!9&4%2(;2C"3K7KAM#AR#KP+JL+KK,FH(BF&CF&DN'DP'GT*CQ&=O"|JO}QvMpI}mHrfC{mG~qJyUb_Vdlhĵ˾ɼ´Ƹ¶ķʽɽѽóξͼɻƹͿkhg`dicf_\jhc[^acb``dclofY^h·ziioĹzmxȫČwʻumȽqĻnjid`ggfjih­nghijfefgifhigfc`b^^ib_`^]c_ejbjkfggcgbjmhb[XUSXXRT}NxKxLxNzPZT~Pi[K$;I!-B);#7!5 3#6#6234 :688!=$A(H*G)E+F+B*?4D7F5F4E:G 1C*D+D*C#;73 + &&$  $* " " )(/!  'DDJ ,  !1$,?@F<;FcagONW-+9,+7 & ! ,4"(/$!!)2& (*#-%.LG'kZ9kFw_?dQ5oHnFgV7_P2eU4XN.HE&EG$6@!0+ + . !-!,%..4gY5VR/".(8-7=B!@B#sh=|LNPVW`XXc[UTQzH{INSXKwGxHmd=wlBuGQPNwHwGzHuGwF|mBrG|jCpbM:J6H5F6H7J2F/C(<$6/>?D 1<1 . +;,;&5 .#1%:!;#@!=84 0 0 1 2 3!2&52 ( ( "-& ) ' )% ) ,.<8G;E#BJ%9J >L"CN%FO'CK%9J6K5I=P!EQ&?K">L#BL&M#;L!>K#>E$FK'AK$4E&;.D)C(@(8+7P$=N$;K#=N$=M$>K%;H#:G"=J$?L'GO+?J&CQ(3?!9I$CR'AN&JV-KV.JU-KU.NY/LZ.Q]0S]2NY/R^1Wc4W_4PZ1OY0NV0OX0PZ2Q[2T`4O[1U]4S\3W`6%3$*6%BJ-a_:}tG}MSyOyQqL{mIzmGwM|T[|]wõ̿ƹƸʽɼöɽ¶ŴȽ˿ag«jŰohhibe`[aedgjahna̼|ȸvg^hjq´roɽvȾtzɽv;z}νyҿ}}ĸnxacdegjkiiȸu˹uȴqĮlidhhkeliljgkhdb_efjfjf`eijȳsolrmollighhdfc\YVRP|L~O{NpEtLnGUVZa\X{hGD<+Z]1}uCUdھˆˆ͸{lkθӸe^STv|OcmƬ~˱tĥuӵԶgnpánj~_қϔ͓͓ɐčōË׳}ϬyƧvbZkl[a^]dtm{eUzM}NVZ]aebahƨp©pheƭsacêpf^dedZwIWUW``[TUP]`\a]]V{PUY]WYoHuNwQrNWdilçn§mub_\WZSNK5tIk[:n`;xjAsF|xCaj4Na)B\":Q3J2E4F6G;PDU%T`-ygClIs^@jX;f^:b_8_[6^]6W[2OW.LX,ER)AN&CN'EU(DU(CN'@K%6F*>&:!64&7&9"742 !;$;-A5D9G 4H0E-C/D3C7F;J L":J8JIR'MV(FP%AK#2C);+<=OBP#IV%CU"9M5J9L.?1?,:':)9*8)6%9'=-.2 2 -' ,(1(3-. %7(59C((5,&1' *(4$1,>1E. 1(=.@EN$=L!CN$@O#?Q!=O!9JK$=L$@I&:J I"6G6F/B1G,D)A6G )9)8);.B6JHW(Sb.Ib(OV-KT,JU+MX,JY*P[.OX.JQ+KU,JZ+GX(EU'EU(EU'BS&CR(CS(@P'@P&?O&CQ(AN'@J'BL'EO*AL'%/)2!5>%,7!!)8D%HU*CP(JU,IS,KT-JV-M[0Q^1V]3Q^0N\/Va4Wc5T]4M[0MY0Q]2O`3K`0K^0O^2L]0IZ.I^.K]/OY2[`6^c7dd9spByuEvH~qGtKuKsNwkIzW{V_ŸȼʽʽŹƽúǻȸj˴rȸ~gihog\beebfŹqïlkĸyȆƶrbjôoLjϿ~̾zķwɅɁ͈ю˂{zv~ɇ˼s̿vȽoøifahlfghñlɶpűliDZoŬoŮnjddjgcmpllhehihnƩnªliiDZulîp˺|srskjmlmmkkkpga[XW~NGwy>xAwB}kC|hCjFvNZ{Q[V~kCydA{MyCtmne:df5Wb0Kb(?Y!3I6H/C;KAQ#>R!KZ)kc;zeDiHxcBiZ:ynDxpDteAb^7hi=[_5VX2OT.EO(BQ&GV)CR(DO(EP)H #/  &0/0, '(53) , (&-?=@= ZI/vj>pi;h^8xHR~PlGp[N CR$M&@N'FO,EO*EQ)DS(GT*ET*HS,?H)X 3K2H8KCT$JU(PV+e]8nd=}fE~gF}kGwoDql@rf@g\9XO/wlCb^9YY4VV2HR*CR'FU(CO'DN(DM(?K%3D,@'= 634 #:#=<+?US)$5- !7"5/ . / &0-49@GJ$=D@E DG"VZ+>EDH"g^5WT,df2`a1:ETMf{0dw0y@PZYY_fbbcfb^`ZTN|L~OzLnDnEzhBwf@sc>gY6dX4fZ6k[8fX5bW3e[4aX1RR*KO)EM&@I#IP'UY-QW+OU*TZ,TY-IV'HX'IS'DR%>M (:. 0 + & ( + * + )   * ' () /?DW&GZ'DY&>U"=U!?U"UY-YY.WX.PU*LV(ET%CR!KV%W_,MW'KU'HV%:M6L9Q0J-E1H=LEN$CM#8H/D/F3H*?'6.;1@*>!5!4)8-<MV<5@!'4)7;A'CG--4^_OZ]H;C&=D)GN6W[EEJ.IP3AI+EL1.9".)6* ."5BY+4C9F4G3G2E7K8O9O3J.D,B!FS(?P"IT)NW-GS(RW.Y^3PX/CK'DL'DM(?J%?J%PU.ER');#=+IN]+Ve1Md+Ga(G_(K_*Va3M\,LY,VY2S\1R[1IS*FT)FS)KT-OY/CK+BM)DN)BF+JR-LU-LW-IS,KT.EO,?G*OV1OR0MO.IM,HM,MR.EM+IS-JX-GU+JZ.DU.,;&$ !0%0<*CO.LY2L\1NW1IU/HT.JV/LZ0KV0NU1NV0RX2]_7]a7bc:fj;bj9svBxxE|LyKSkvtoɻʾĸĻKQP*21/64UWUpol_`^`cb֭ʒȲtĮojmhgdlʄΕʉļuccǹt~ƴxcgkc˹v;s{ˈܠثٚІцˁ̅ȁ͆͆ҍؚךɃuϿvͽtɸpòlfŴnʺv˹t~ϾzϽwDZoDznƴsmkïoűtninìpĮoŰp¬phhdŪmƬnīnªmgp̺vpjpqqŸ|i²u²uchvjbmu^^UTVTWSMM\KYSIh7ny:fu6PgdW\~STjlĴ~ÄԝǍȏغĥq̮xʬvi^`jsx͹ҴԴвȮgjl£nnǦq޼ὅڸѰ|mnĎܹݺۻʬ|u˰~ΰ̮}бȪzȫznqkZchbOio8zv@HTbbekƨokħrԵ{ٽѰuʩoʩoʪq˩qΩqִ|֯xШsѫuͥqˤnǠjɣlͨoѫsΪpͩpĢjehɧp`_eģnȦrţqΰyʭx£mƧpånʬsίvͱy¯mliɮrƭrlémlga\~QpEuc3:/;+>.@/?3A1?.?2C9L2H!:!;,B#=1 0 / . + * ) # %& * / !'<%=3 $$1 ** ("52&;$91/ * (  !>8`U/dT3kT7o`;gX9jb;{rBsJhDs\<fAkCmAo>xf8XR+.=6 80 0 , !.*-4ML',269a\3QN*YS.IK%mb9ti=WU._]1~tB_`1TT,b^4|IS|G|G[adfa]kqpcffcZXWR}L}KvH|oC}mCpD}pBuh>j`8i\6l^9m_:k\9k]9g\8i[7[V2UU.LR*KN(JQ(V[.RZ,RW,NV)QW+CN$>L!?K"BO$@M"0?"4-=,A,>&9$;/1%8'9%7':$7%8"2&,2!4" " 2 442 2 1 . 0 & %  *--+' (( $ % % & ' , -" & ( & % ( *()& ( ( * ) ' ) , , & 0 3 . - + + + * ) / . 2$7"5"5 3!3&;#8/ / - , / / 1 1 . !5,=$84- / 0 , , 2!4- (  %  !3#   #[f3[g2Wc0S`.I\'EY&KZ([^0PT+OV*IT'8I5J9OH]'G^&7L4I3J5I;O7M6M8M;N0@"hr[x_eMkq\LV;7B%LQ8WY@@A+4<@E-2C)3:=F&/<!0,$0&51/. , 2,>3D=H 7F/D8J6H1D.>-=':1 9RH\(M`*Hc'Mf+Mc,We3S\0FT)IZ+N[.LZ-LZ-FQ*BN'?F(BH*28$38&15&+.#=@(JL-GI+UT3PR1MR/HO,JL-IK,JM,IP,KO,AF)DH)/8$*9&-"&"2?,DL4PX9LW3FW-IW.IX.M]0L[0LZ0MX0R^3V]5V_5U]5V_5T_2Y`5^c7]h6dj:srBssA~xHRXpozǺſ¼||tl4<:#"   +*6<GD:B?jokkp{\eq[UG655;=8c``in[qiNd`?uJQVVT`j͵sʲqîlX}D~EW\\~R]gťn£nֶzΑ֜Ѽ~ϖ՜Жɐָ~ӵ{nqdflpsxϳ̰ͱҶӽvymmܽƌōӲ~ʬyjˮy׷߿ɓǑǒ޿ŽܻŧwmħtĬzǰycdYVOttANw~AH\fɫqjɪrҰwعٷ}ֱxѬt״y׳y԰vٵ{ٵ{Ӯuֱxկxױzٳ|ٱyׯwˢnˣmŞiѩqʥnefbgɧpΫtҰxۺ׵}ӰxүxԲ{ܻ׵|Ҳyѳw˭pȬn̯sͯs̳zǫqͳv˰qβw̯s][sJrIkDrGqIxg>ih7Vc.Vc/Pp-Tn3Yb2`a6^d4ea7c`6oo=~sExQ{U~VxQU[3tI~qHi\BrPyNvKnc?he<_a6QW.AO%BN%CO'DN'@M$:J!*A$=#;88 ;"?>D$?C$8@1;)<0>2>3A6D/B/D3G8M$<69(>'A'>$9,@,@1- + ( % ( & !" - + ' 0    %  !ACJ,#"#+ 10"7%91 0* #$#E="fV2g\5rhOM*g_6-7AB!?B oh:jg6vn=wm>ql;|IT\efbQ}INX_ga_]a^VVTQRPNuHtFpDyk=sf:mb7mc8qdrd>sd>m^;paN"DN%DO%9H&9%50D3E+>":."5)3#7*>&93 4 3/1 974 4 3 1 / 1 . . . . -!.-/',/"1 2 0.%%(5.!2 0.-*(+!/.,,$.+1.#! 0.-.,,,*' $ & + - - . 1 - - - - , - 0 4&:#3"5!53 6!7#9 51 . + 0 , , . - , . $8(;5/ 50 + * , .- 0 $'5,!#%  /. $@I+[_4Y]1Zb1U_.O\*X[.UX-MU)BS$;Q 9Q6N3L5K4I1H/IM 9K+A"6->(4*!1-@@P*NX9v{hy~jmr\FM1?G,gkW`fP{nxyiIN7WYC2:.,'2?I,5>%.6,9!1%2.:BK2*8/,( 1/ *<1B2C6E3E5F5G;J @N"@O#@N">O!DP&DO&AH$GN(VZ0FP)HL*QS/KM+KP+QY/KS*AO%.G(B"6%7'>/E;H :H`l;Sb3:J):L(Rb1_h8{IxJ|NTQ]q¶ɼxsm}{w~qpoJJK799245  !$*12PPPADDKLLRTUЗ~kƻn|xsľqy˾s¶i÷l;tz̃|~hpheNefZDG?5@0tx\қƅ֕ҍ֓ψww~xz֌ҊΆӋ}tͼsͽuѿyzѽwмuνvξvͽu}ʻsĴl̼w~ƳqmkíoϽ{ʹvűojifɭmϵvʫpճvįyøıuÆň~cg}z\XYJ[ZH]XGWP>~R]a]Y\^}Jfj@8C-6@-oJU|Rim˺xʸufQY}TZkͫsĦq£m…̑ȍDŽє̑͑͐ϔ̑ѳz׺غȪuirʮzǪvuktéxƩwvéw̯y׷αΰ}Ӵΰ{ƫuƍٽԸϱ{غڻܼܼĎȒΗʓʓĨurũs̱x˰wj_c_edgiǪuɫsČۼ߿޻ֱyѬuݸܷ}سzڶ|ߺ޶}ẁ۳|ٰxڱy޹ٳ{ЧqΥoΥnΦpٷ|ҬvΧq˧qҰx׶}࿆྅ܸڷ~⿆Юu̫rȧnǧn̮qǧjŨjƨjȩkͯqǪmæicȬnhU[XXdU{NrFzq@lo:kv;oq=ge7j_9pd=on>tk@|rD}wEyNVWZY{rH^uK}TZ|NX|N|tGnj?cc9KT,AM&;I"=I#?K#6H0E!<!=::#>4CGI):B!3?3?)=!:%>.C,B7I5I4H*B < ;$@'D(D!9$:6I ?Q%/- $ # % & " - 4  $ &   ( " 34@ppsaag12>. %-3$:!8/ /(  '0)#+LB&jU6lCwIPoFm`B >A!i_9aZ3<@IG%sh=Mukqc=sc>tc?sb?ra>sb>gX8j[9i\9j\9bZ4RO+NN*QR+XV.QP*MO(IO&FO%HP&BP#ES&EQ&?M"0A+?-?1H.E%=/A-B)3(=,?&; 52/2/ , - 1 - , ) ) * / 2 0 . 0 . / 40. . .,$$* /%4,"   %&&& * ),&# #!31.+**++* ) * , - ( , 1 , 0 1 21 4+<);+$5*=%9"753 6 61 1 / . ( ' * / 2 2 #7#61 1 3 0 , + , - - / .(  %4# /.$). -5'ii8lh8ee4]`0ZZ.OW*@Q"8O8N5M2K.G/H,E*B4F?J 0D/E:Q+@CJ"AM!7F)<$88F/?*>=M)8B#GN2ko[z|kZcG4C$4'6)6+85@#>G,+9PW@5@#&3*"/*:'9'98D9G4D)=#922*:5"8%;+C+B,C1G2G6G7I8H:L9N8KFS%DR&HQ)KP+NR-UX1JR+EL(PR.PS-PS-TV/0H(D%D'A'@&?,D=I!xoEje5?2B#=+B.C+B0D+D.D-B1D3E,E&C%B"=5)>)</+ # " " $) . 4# #  2 9;EMMU>?H@AJ *203+@%;, &%-/6VO,RJ+kW8|c@zlCeb:pi>}kCqJlBXR+$0#/88A;"B;"JB'LJ(>E * #$' !*068<75).HH%?A @A!d\5LI({m@tEOK}{@ch2}INQ|N]`cbVUWXROOXTTSRTRLK~J}JuEpEnE{hCzgBve@weAtb?sa?r`>uc@pa;]R3m^:k]:bZ4WT.PQ*VU-UU,PO)ML'OS(9JAN#N ?O!;K 6H-A.A1F/G2K9H5J)B.C6I4G'8"3!3!42. 0 0 2 0 - ) ) ) , . 0 3 41"4!/'(         "$%    !,*.. 1/,( ' ( + /0.0. / - 0 1 23 2 3 5,<.<-;4B,=$6$8!63 - / 2 3 1 1 ) , ( ( 0 3/ 0 1 2 022.& . 1 0 . * ,- $     !0 -!  ,6$Z_2Z_0aa3kf7ea5FS%7M8N;N 3K)A&<(@'A&>6A=F%9+>;M5H?J!FJ%?H ,@)=.@'93F`hN`fM]cJekSy}g4F(;#1-9&4&:(;%8 3 2,!10 $7.A6G;K BN$AM$;G"O"?Q"CR$PY,N#xwG}MNR}}INSYxȻ˾}splhhgfggfRRR79:   "%+/0156YYYwwwLPOھˊ}΅ӑԐЃщёՏثؔבʄ_^E;F7z=E>zջɍȻwb]cŁҍՑ͂σʀІчەۖӋЃ΂ܴ̈́ͅڨ|uɁ̋˄~͇͉̄Ίɂǁ}Ӿ~Ҿ{À͸|zzz̴tæmskmmkmtjuUƴwї٣٤ҕΎˋˋϐƄ׾zԽzÂ˴pcg\TRWVXQoy:nu9~nD<:,ymAio;go;wyBsKvQ|RXZmqbhh>}yJ}UeTzMfh:gf;IQ*JT*MQ,GL(AL%AM%AM%AL$;G!+A7A->)D#E/D9G-@4B6B1A0D1F-C#?,F?R"9I7H3H-F(E%B&A#:42#3) " ' ( ) ' -     $ "(5 !11= ,2 , 6B4A2>4&' (4cY4kBtJkFtL{O{PsJiEhCXM,499>89BA"ND*RD,B="ED$#.!+ *$ $)%)"(*/-2;=je8,2CC$pE{H`]3kg7tABal/Va+uq>ij6^b1|q@NMSTTZ]WUQJHS~ETUROPOxFsDqF~nD|mC{iDyhByfAwe@tb>p^7EDP$>N";K5I6I4G1B8L7P1K6G9H5F>K"?L#6D,?'<$:%;!875455 1 , / . 0 0 2 12"5-    $2!.&    #)-// /-*)+,./&8#52134!6#8$8#8$7):/5+22>8A *=!75 54 1 1 40 . / $ * / + . 0 0 , - . - 0 1 3+ 1 / %  & + * + . 1/(0!5%*"  !OP0Y]0Y]0V\/RX,?O!3H7L(A3B4B#7&8-?LW6Z]ETU=>G%8F3D0A8ADE%@B#?G"BH#4@,=-&4-A2B@L#FL&HK'9A$3<&!'  !*$73* - 2 $=+B)A*A0D-C4H2H#A,G=O!BQ$EU'7L?P$HW)PY/OZ/LW-KU,EO(AO&NU-IP*FR(@Q#&A#=.B3F!8).(=+>5A/<'?8K8G/J:!9/QI^*Ub4Xe6[]7\b9aa:W\6W]4UW4LQ/#*":6'VQ4UR3YQ4TP1MO-QT/OU/#-      3?0NYBDP8CU-HZ/IY/GW-DR+CP*M[0L]/K\/Qb2Ud4Ub4Yf6\g7Wd4bj9gm\ka %|`ءΔ̻}íkg~ъҊ΅ч΁щҊ̇ژӆ֋א҈~΀̄{̃̆·ψ̊Џ΋όʅӽyѺx{оy̷tȲu¬t˹w|Ɓжuo_dflolozH~~qJ{hFSVRZlYyQwOƮu̜ѢϤƎ֟ΔNJѕ՚՚ДԘ֚؟ϔćǎҲ}ȨuͭxԶػж˞߳ٮӢœМƑǓֹͲ~ּǕָγּڿÑԹϱ|©xqʰ{γͰ~ԸػѲϳ~d˷̔ԣةԛ͓͕ΘŎǐȑɓǑƍƋƋƊʼnÇĉÈ㿄⾄߼ĊɐŋŊĈʼn~ܶ|ᾁ†ȋˎ̏ƊŊ†ʏƌĊܺܺ~߽ċ͖ɐ߿Դ|ȩshaWUWYa]i͵~hl_zc[TRxNsIvMhc9ba6hi9no=swBz{DyLvO]]~MsrD{N]b]OouAxKvsFtoCkj>Y]3RW/IQ*LM*DK&AM$-C1D5G.C7E5C#@; < *B-C!;*?(?'=)A4H9I=O"?P#AK;;J8B"7%*".j]7iX7iB|c?qHzNjChV5hT6XN,IE&@@"e^47:6:OO+GB%>= :=39*/.3*-*,236556FD#SR-XW-YT.h]9TQrjE!c`5SU0VU5gdBml@}y?P[P~x@ONKM{y>OP|I~GUYWSWUP{JxIuHsFsIqGmE|iCzeAyeAzgAvd>pa:_V2pf;nh9ad4R]+P`+N^*Oa*Ob(XZ.EL%4??H"DO$IQ('6$:$@+G*K+H-I/G.J.L2V8WL\,VZ3W]5]i9Ze7Wd5J[0=I+HV2Sa;:M) 1#-'#.(%aS:]V7ZS3ON.SO/OP-RW/:C&*&/:"?M*=I,#8>+(/&)3':E/NY2AO+AP*GU-ET,AQ*EO,GU-LY/IW-LY/N`0M\/M\/Mb.Oa.Xa4\d6hj=af:nkAkk@vqFSQ|N~PR}Spyhd_ %#&+!      "&..]``ÿܺԓݛݜܙٔڕڎےݕݘэ>@8'#CMGߪʻ}λ}˃ԎՏӊړӾvĮfưmƒʊܣߡۜ΁ρ͂΄ҍыΈ̇АύΊΊɄǁ{{Խx˯pϷwɳsñrIJqͻtz{Խ{r{žmGKǴvӛϕĆɊٿ׻|ѷv̲pĮl_eiXSR~Gmy8e{4Qs-hA\p9aj=pnLm^m2xnArMwOpFpG}lCrJtMuN^ϓ׼ˆھĊŇ͐ДҖѕ۞ߤנۺԷؾֻؾtgkl̮~ڿӴɩyԳ޾˕ȑĎӶʭ{Ɠɖɔèxrɮ{ūwsʮzǬzì|xϵ׽ĕջ̲γ~Ͱ{غÐɔǏ˒٣ܨڥɑΗ˔ڥԞٟӘɎĊ‡ÈĉŊ俄㿄ƌǎƌÇnjȍ‡⾁ᾁƉɌɍNjȌϓ͒̑ȌĈÈȈ߾ˆȏڿƫvbTW\géoūqǮrŮvmĩpɰ{[^TQ|NuJxMsEji9Zh1Xn0\p3nu=RVU]bZUam«uưwYde@Xb3`b7ztFqkAWY2FM(?I$;H!;I!%=4D>H!2B)> 92 7 7$;8B2A3?7@9F 785654C=%8812KH'tk=NL)pExMvDoG}nDUS-ja;IL(BF$WV0ST-[Z3nhD}yZyrMUnmdOei3w?HNWTSVUYWTVSSPQ{LuGvGtFnDmDoEpGoEoCvd<_X3zp?uoP!.G.C6H*?'@)A(@/F)A*>%='=6 2 4%8#6    &7/>-:&:$7':*;  & & * , + , 0 0 / , / + 1 4"6"5(<0C%;6 5&9)>)=)<%6%:6 4 / 4 1 . , ) - 0 3 1 1 1 0 - , ) * ) *     $/-+* 0!3-*+*$  :I [^6R\.IU)>N!6H5I2H6L7M3M+D,G/J/F0B)8,<0@*<%7.>CJ"7F$71CNM1FH+9D!1A>D!:G9IGN(LS+IS*?I$=I"DK'CL&CO%JT)GU)KX+GT(GS(GS+IO5 +46C%,.'<#;&@1E'A$@(@#<-A,@)@*B/C5E1B6GDO&HP(MT,MS,BJ&DN'CN'FM(CL&2F!>0D*?-F7M>O!:O7S5Q:W5Y4W2]7`@^#Nc,D^'AY%Xa4^f8_j9Yh6Ve5aj.>,>+>1>41 4 %8,<*=/?#6)=+?%?&C,0!-*%+("0B.F2F!: 7#71!2.* , + . 2 ,!*5-!*' $:=Eo](?2  #5 BBKooqooqUTY )A%:AN"R[,JS'2 * %*CB#rb;hY7o[9iV7bS5dU6\P1cR5cT5CC#<>ED$][0wImEoa:fV5RO+QM*BJ"39/345C?$GB&?>!LH)j\9g]8uj?l`;whC{OrHgd9a^5VY.MO,OM,a]8PQ-PQ,[V4\W5]Z3gȸƵyʺxtsBIS'Y[,JTXZe`WVV{Fwr={JQM}LNvFsEpD~lB~mCmDzh@n_;QI.rg=xEyr?ml;ci7bc7]c4V`0Xd1_`4HP'HR%FU&IV'DN$?P">R!:P8N5K7K7I1C5D3E2E6E;E!;!;%?*A+A'?)A)B*B.D2ECN%KR+PV-GQ(HP*EK(DL'CK'?G$CL&0E+D%?2F:Ofy8bw6t{@lz7C45 : >'F/6!,)$+3,D(B$@&A%>$94. + * - 1 8 2 !-%7=8%+*+TU\"-# 532  ) DDNjjlfei0/; "; 7EP$pv97G0 - % "+;<i[8_R3DA$C@#XN/\O2^O3\P1VN.NJ(AC!ZR0j[8tb=jE|g@o_9vHsd;:A1837;<;<HE'A?#td>rIsIaZ7pIyjExkCxlC^Z4QR,]_2EM%LI+IH*8= :=#VQ1[R7ma=SoŽŕƴuGUX2OW,KZfdbZXPyu?]j.tp+3*7 %3(4$3(7"2#0"1$4!5#4$ ):(;&8$)8#4%6 10103 64 52/436!<6 0 0 . / 2 )(4 3 1 2 1 1 . . 2 4 5 1 0 2 2 + * ' #       ++ ' ) ) %  !+2B/@7GN[+Ya1Y_/T\,CR#9L:J8H5J6J4G2F0B/:*6&3'62>:D>G+8'21:%9&<!>">&@)@4H7JAN$FR'OX-Wa1V]5KP2 <=%0A.@)>%=33 &=%<!;!8%=8*@+C1F3G?P#GU(CO'?N#DO&NR,LQ+HP(/F%?)@CN&JT)@P#;L JV(DQ%GV'NS,TZ/YY2cb9]d7\d5W`3K\,M].Qc0Ue2Ug3Zj6Zg6hs>ip>V]5  8B )9 "<$C @>9";!@,D&B@S&DV)EV)FX*HW,@X&:U";O#DZ(S_2_c:vrE|xH~zJ|O{M{zItuFuvHWCC@%%   YP?[}W^ZGvѼܷwηr{ҋӍՌߥܖٓ֐בߞޜݘuwf1=>¾4I;6!!;+acbؑܒՉˀʀщڒ۔׏ؘ֑֓֒ʉzŸp˼wΎʾ{ŷrĵtǂΊΐʆʈȇ~Խzзs͵o̶nϸty{ÃŷrZdăðpįj˶n͹m̻l̼nѿvҹtպwӷv̲qǮnfedfgbWDstGh}:c{7QJ~ENVY^fjjg^`c]S~Okm=dd9_^6TV.AI#CK%AJ#AL#>H!AJ$5C-@": 92- 0 %8/=5@,:"6/?*>$:8>'F1M3K,;3G(@:%>!<&>4. - . 0 !76+! '&+0/  1 3"3 3  ;;FlloXX]! 55ER$\h/"65 *% %.DA$cV5pa;QG,MG)dS6gV7UI.CB#TO-FD%LH(ZO0fDnJSSRsG{g?= LG)}jFwQxQrLtOrLnHwN|iErdAW\/LT(KP(LL*XX1OP-c_|nFQ`űyƕ̞ͼjjhsa;vc>rb>pf?b]7n`Q!9N8O2L2I3H3E0C+@2E3E5H;J!AN&GW(CS&;N!'=+C+B)?$7 4"5"2)67B*9*<1>7<:B1>$-  #/!0'6.=%5 1(:->0A 0  0>4D*<':)<.>/=)4 .,=*:+>(<&;(=':!4'8//.684 1 - . * , 2 0 43 3 2 2 0 - + 0 3 4 4 0 3 1 0   ,*) " ' '  '3/>*;+;*:8EPW+SX-SX,RY*NU)6J6L9O;M4F4@17/9#34?4?IK&_[2:A386<8</5CB$PM.DF&6B3C+C ?) $";(@*G.J1H0G0H;M PZ-\_6%) CB)DH%;G/A+;#2%6"8"9+A$</ / ":%?'B/G9K9L ;O FQ'IP)GO'9I*D.D;KKS*RU.SU/IO)EP&\X4WW1SU0NP-RZ0V^4OS/P^/Sa1Ra0Ve3P_0Qa1Ud3Sc3Vi4`q9Zg5*0$ & 2?>=<>A.O4R6_ C!CK$CF#;G>I!3C&="966, , 2 4B9E:E4176 (?#;#C(H.L0K1H*F ;+A'A%<%:!412 6!: 7  &$$#!!&1 $4*80#<%; $ffiaad[[a$65+=5B!81 + #*0-2[O1zaBkW;bR6u^@}dD[Q2SM-QL+VO.iY8v`@gEzPSWSPyHgc5EM#NQ(\X2ldCTP/aX:hY;oKxRqL]Y^VPOPNJ[%LS-KS(\_1mhDqjJzZyPLnмƵzȶ|Wolqc=bY6dW6qa=gb8]_4U\0MW+KU*HW(AR#9P;U :P ;O 8L1F0G2F0C2D1C1C1B5F;K!;I":L =L!@Q$5I(>(<'=*=)=$8-(7,9'8/>6;$3@/<  *7-/$7&:#6+@+?-?'6 (-")&3D4F0B.A+>*<-=2@2>-<+:#4,%%!/ +#<"91 / / / 0 . 0 4$:1 3 4 2 / - . 2 1 - 65. &   11- ) ) *" &6+;*;,=5F@K"b]4ib8ZZ/MU)KT(>M NU(=M6I7D;A4;+9/;NN)DG#LM)UU-?D BD GI#ED"598;8=18=D 0@*G(/B+H/J1L0H+I6N>P!KR*58& ), QP0SS.JM(EI$6=2:(6&<"7%?'@0 228 &@+B0D6J:L9J=L";I %B5I>K">O"KV+PP.OQ-IN*ZY4d[9PO/MQ-LS.MQ.DJ(EO)JV+IX+O]/L^,Mb-L`,Pe.Rg0Xf3Q`0"(  !#  64 )A2 5;@%L,Q:W!<["5]A^%A\%AY%O\.gle_=g`=ic@uqYuxhvxk~}r_\R"*(  $"!ʹݠܦЎ̊‚ʄܞߪޥӍσ֋؍ܒܓߘߜݙԲիϮ³ݘܒܒړݗߙݗߚޙܘ֒ҎόˈʇɇŃh_m͋ʹta]ȹÆȇɈ͐Εɷrɹrɷrȱpһvzжsǩmhee¯fghea__`ebbbad_WZcVVgĪsfλƴyS`_eb`XVV|LP|VcƼvwiNpbCtN[]]djͯsβtǭkdb®mTfmƲuκyͷvѼ}ȌΖԟ֥ȓδůxϷʯ{ϵƫzjg]VlѱuЭr԰tӴxԶ|ձvЮuϲ|§rrɬz˗ڼѴϲåuɩvڹݼ׸ѵ͙ա̙Đȑ՜Ϙō޺޽Č߻޼ˆĊƎƍÊŌŌʑ̒ȏŎ۹ӱzղ|޼ǏїٝːלכԘΓӗɍɍ͑̐͐ѕԚ֜١ԙΒːĉƋ־׾ɭsҸ}ҷ|ɯt`RLJGGVYUzCwBQPUZggba_^ZZZXUVSzxF`h6K[*LT,MP+OL+EH&IM(CK%BI%EH&-@#:)= 84 0 1 5"5,<"72 3 52 %;1B+D-F6O6J,C$= ;$>6 4/ ) /44 ;   "" !'&$&*3):%6/26&<(>(:  !!0??Heeg77C/62 220 , ( '.1>;!C?%]O2tP~VpLq]>fW7cU6sa=pf;mEvJiErJSTSWSyr?kk9ws?bd4qj@ja<^W6od?wkInKVXddULLHdj5js8kiDPS+GQ&NR-jfBzqK{UQg®ukmkYN]jpjb_Z[VVxHSO+FK"wj:NYjdVQyIsEzk@yh?yf>xd?ye@q`Q"7?%63':%81?4D)>=G ("LP(CL"?K" "2C2D5G5F0C)=4@??!*, -2 !:45#8!62 4 0 1 63 2 2 / 0 / * / 2 / ,    ) 74 $   %-?3H8M>R#N[+SZ.d^6kb8f^5WV.XW0a^2_]2HP%,?.>*95=;@GH&VR/SO-RQ,LN(GG%QM*GF$ED"<>5:;B @F#%+ %LQ*KT*HP)5E(A'A+D9MHU'Z^313$  77%]Z4KP)KP)=D ?D 9@(>(>0A6"<64(6(=)@+@.?.D6F:F.E1G5H9MAN$IQ)SW/LT+VY1\Y5QS.QU.OT.IO+KO,JR+JU*GT(HT)FQ'NX,DT'FU'Q^-O]-OY. ! '6 7'9.<$6&96":!:*B3K1Q0R@X$UZ1X_3[`5`\9XY5LM-TO2XT4aW9_U9XS6TaA`ePgj\ig\?>7   ^]XۛՓҎԏяэҎ՛ǀЅ׎ݗޘޜݢqlm̲tѸydܘؒۖܘՑэΊʆDŽDŽŁÀȂǁǿzt͆пxh_[ŭoƆĄăվy˯qĩl¦icͲnշsϮpͪp̪peeed_c`[`d^\]ca^a~tJf`?^\=vnKUikhh©i¦kceťjʪmf_WZXxNqHbo7Uo0gxFxX~fslJwxNwvFxqBZi˱vnRdùwZU]mbbȺĔθƱ}snūzֽϿ̴zuef`bnҷ|Ե{Ƥn¢nȧrȧsħuuѹϵuéwvħvҳ~ȪxԵȐƐ͕Էvoвڻۼ̯{׺ʭzѰ{lmԱzֲzϬu۷޹޷~แƌĊĊƍ͔‰ːΒŊʏєڝךԗѕˏДˎɋʌєДӘ֜՛ҕϓϔ̑ʼnھؽּ׿ӹʯuƩpĨocZPx}B`k7sp@O\^Y\SXXXZ\aSS[Qy~GrzCyxG~xI|tGqmA`f7O],JX*GQ(DK%JJ)ML+FK'?H#5C=C!$8&:@G#(<7 '<,@)@52 53 . #83 "75 8 "<)@";0 , 0 . + ( ) $ + 57'%    + 6'6%7(5$3(# ."2"4.. ": (&&3bbh #;3 2 (:/ 1 , -&,D@%ME*^Q4s^?zbCtOlKmJ}Q{POzKtHxLtLwOT~QOUWTU|Hsp=tDzKsG}LvKlG_M6~X|W]pHPW{wBVb-O[+[a2fe=cc;SY-~xRgwѻİ~biiT`hlj_ieec]XRqDj_6rCzIhT~NqCuFsEuGnBnAxj=lBmDtc=f]7l`;lb%>'B%A%@*B&<&:,?0@/?4C.=$,+74@%8/>6C8GIN(DK%?H!DJ%HN&5D9I=K!=G:H7F6D5A);2>   $23 8!92 755 6 0 65 2 1 1 - 0 1 , 2 3 1     />0@6D0A*9+:.=3F7J >M$0C%3( $+')2")7   2E:V!:S =Q!AT$BR$CQ$QW+UX-][1UU-_X2ma8]\02A%7+9GG%UQ.DB)!""55#?>(DA)PM*AB!;?9>7=%+DM&>M"EO&9H3E:H8H0F6IFS&PT,VU1''$&6;"2?;G;H:G7F:H1C83&;&:'9*A#9$7-B4D3EAL$6G1E*E3H@L"JS)PV,PV,PV-OU,Q[-T[/TZ0T[0KX*DU%GU(FS'EQ'NW+JU)JU)MZ+CL*>C) 2';);+>FO3HN2;A%:@$>E(fhMLU.8Q-S:Q!GW)GZ)=S#?R$=O#=M#GQ*OR/KQ,CR(GZ*R]5 51@7D 74":$:#70 5 543/ 3 $<!84- - / - ' . * . /$'-09 *$7"5 5/;*7$ # - (' / !8%=*  !#>1 !53B2- ) *23KC)EB%jX:mDpItOpLwOzQWekD}OrKzP}R{PRuJS\`^XxM{P|QUUxMhGbP7rOVQLKoq=hm9M\)IW(JV(MY)Za2^a6~~_SvuŶ~ͻœѾʶ}űx°xqgfiehieTQMqDvFtEuFm@sE~LyJrFpEmAnAyi>zh>zh?wd>tg>a\4XU0]Z4^Y6[X3OV-FR&>N!;O :O9O6M6G6E3D5E4F0C2D2C4G5K4I4I4I5K4H2I0H*D#;%?$>$=&='>/B2E-@/A,<8?!'4@7D2A4C:GKO*AI#AH";F2D+@6G8F)3=>G;G4D6C4A1@08$*$5$7)9'9#2'.-!6#83,#<#<9761 3 5!96 1 1 1 . / 1 2 3 1   )45CV!;T:P:ONX.DQ%7M;PCY$IY&CU$AP$>L!5E/A5I1J9UJd.?".3$ "),A-D;I CO%TW.1BBO$?N!4F=K!RU->@' "'.2A*A-C7IPQ,=J!2G:J1G/G4I:K:O;O :NBT#BR#CT%IV(DT%5P7QBT$?S#GX'IW)NY->I& ((>9(B:N*CP2_dJx}fw]j@1O,M=T#CU'FZ(;W!9U AW&G!SR.HN)@G#;D!8A);/?9B 2=#7/ 1 ':&;!8 7 :$= 62 %=5898 2.4 0 8+ - , + #+ #.)*.83;2 1/- 1#52)1 666*5 8/ , "32. + #,43KC'EB%LE(VJ/hoM{U}T|SW}RtIva@mIrM|QQRpHpGch\^^YTRUSTrJiGTvn?Kus>sq?ro>We/Ve.T\.U\.~xF~KpkA_ztQQaqҾκϻ®sdzxrmeplifa^RP}IK}IwFuCrA~LRUzMsGmClB}h@xd=r`:q_:qa)8#1,*(3"8%:*<);&9);):'9%9$9#;&>'?#?&@%=%;"9!6 85 / 0 1 . / 1 1 2    &8H:I;J 9K:K:K8J6D-85ABG"KL(DI#GJ%HL%AG!KJ'LQ(MX)FP&XX/ZZ0MU)PW+LS)O!8I5G7H?E!FH%>A!SK,\R1cY4_U1eY5r_;fCoFoa;l]9pd:lb8uj=cd3hd6uDrEc[5PM+DE$GG&KJ)KM-GG+RU8\dDZ[==E$?F%(5.7WO/'&&)# .4!EQ&K!2I5K4J-H(B2E9F@E!xPszGcykvCeƹyUQIʴƪkTey~fvϽΩϲűζѷР֦ǘջҹ׿Ǐ՞ۥס͔֢ŒؾδжеѷÒœÓӷ͙ȓǒѶԸɮ~çxвշǥvǧw̬{άyáqn˫yӲ~ճݺ⽅弅‰ːʐˑʑŠ۷޺ٸ‹ƎōϋȏјǎĉĉŋɎΓ̑ȋˌąʎ֚Дѓ՗җіҖɍʏˍˎˎʎNjĉċĊտϹĭtp϶dXzJ_e6no?rs?PWTX_VWWUNYUTRw{Ejq>hm=[g5DZ(DQ(CU'~qCQUT[WTP{L|MzKNXR~OPzNyLrEnEkDye@xe?xf@le;gc9`_5a^5[]3OW,JU)ET%AP$;L =M!:N9L8L6J4G2C2B3D0D6H5I6J9K:M?M!G IJ&we@uLxPxP}M}MPW|KuC]j0Zg/|pAvFQ^[QuCIN&NN)OR)=F CG%CG%CI$LQ-0;4<KP.@F"LY.6I0:<<$ 24)30  'BK(OY,AO#GS&7H1D3D>F ;FGL&,3%:H$>Q#EO(FM'JU-;G=L HO'9JEQ&>M!KQ) qi?x?uHof^sðǶôʼdzubfhycTq}Ȟ̢ͶɲDZʳɰzĔƝœ˵̷˷ȶšʤɛ×ؾÔТșǘÕ׽Ő̗ϙע֟ݩҞƓȘ˚ʙ٥ҝЛɖŔĒÒ̙ő׹ĎڿϴۿÍ۽ϱ~Ďϟӟܺ⿊ٵČ˒Čċǎǎ߽߽ݹÊΔǏƌȐ͖؟ۣԝϘ˓їכ֚ӘӘΓ͑͑͑Ә՚֜җΒnjΓϓˏʼnƋټÈ׻ո}Ȭqhmkd]e^uK\c3D]%go:{wCQUTSOPV\TUPzrDom?iirjEU{rC{Pů~зѷǯxìy­|ĕÑηȳ~˸m__étĭu[}oER[W^[[UPRMMYQNzMtKvKyLsHmEjDjChD{iBmf<`]4^`4V\/TY/QX-FS&AP$=M!7H3D6I:M;O :N7I6G4F3F8J6I6J8K7K=O!=O!6I>N!;M9M0G1G*>*@-@-@0A3C4E:G4A2: 4B2C0A6E5G5F2D.B0D8H8F@H"4;>B"@@$ #     0 64 6 2 6 7 6 $<": 776 7 8 7 7 4 5 3 2 1 2 64 2 2 #53 1 1 3 2"2)  AL%?O"8HCR$@J"3=>H @G!6F/>EI%QL0%2!0 / ;E&=J"LU*EQ&.C0DLQ(>E >J#:K8B!)31=#BK%8A1>=F M"T%4K6DGL+OU/L_*Ne,=\!DZ&UY4     KJ:ݮrwٟ?EO țϘжxӱpЯnֳpݻv۽}ӕߞۘؔԎӌ·ȀʆϊьΈ}־wּvֽwӷuӺt͹qgʶożicaíe`XVfhyo]z]_~}Rqk~b~VlHk]_N\[X]xP\skKYS;ZX=vyRkƻr­knhŧr۽۽ɤrkn˯ẕ~Ȯ{Ưzqfaqͺ~`xwDdÓݷҨˡزڴضбƤлÛĜŞȠЩͦƚպӺֽĒКԣϞ̝Ė̜Ο̞ۮڧʖɖʙƔÑҷ˗˘ÐܿڻݾӷԷα~ۼΖϖנםҗјϘȒྉܺ྇߼޺ƏƏضֳ}ӱzںϖΕҲ~қޤݣܡ؜֙ДДӘΔΓŊܻÇȍڽػгxԸ|Ͱv̯uĦl`^^X\a]wHVi0Fb'Sh/[l3qs>tE}O|QuI{QxOtMxkBzpDij,=$9#634!41 * ( - 1 3 !20 1 . 5* '1!-& #, )*)!1&13:1HA'aQ6q]N":J3D3H:N?Q!?P!AR#K 0;/9(* 31.@8F=I!?L"GO'HO'X\1hc9md>=/00122{ؐ %.SPF̊͋ґ߾zzִuͭrַxعy׽~ڛߜڗ֔ژ؝וψΆȀ{Ӻtϵqʯnʯnfgļhi¹d_ƭh^zFzNzQ[Y}W_lrChp=ms@sIscDPt{A~Vc~[ZxP_Z7wlCSPRS}Ū˸ĩŸyѷ|Թ~еxˆōɓڻËϙ͗ѻ~Ŝźɕ֪Čy±w͹KrvQpz׫ϢǙϤٵںӳӰӮӰּȠǞ׻ؼؽݾРəѤėؽ”͟ʘɕ۽ǕĔʘНӟ٥֢Œݿָ׸ۼǑ˔јИј٠ԛ՛ަݨۥҚ˔ɒȐ͔ΖҜКǍ‡ٽغ֜ڥߪڨ߯ޥڡϗƏ‰ݻ޻‡‡ÈڹϭsЯwָ~ټԶ|˭sɫpŨmƨmdb`^|RxOSxPvLqn=Pg-Tj0Zh3Td/Nb,Rf.[g3jl;wIyHrH{kCxlBjk;gj;[a4S^/\b6FR(U^2JY,JW+IR*9F EG(9B 4>&6$9#9#:$:)=*=(<)=*:"7 64/ ) ./+:#3.=""7 1 !816*)%-) " , * #017KI(bU5MD,HA)DA&RJ-ycBu_?eFuc?`\Y}SxNWcaXMSfbY[NQTTZgb_gnԿ̺s[Ju|?T[dιʡĘտɲ|˶ɳyʴ|ɳ|ѸȲ|ekƱ}iyG~uEagYUW[YWRQSTTTQWTyL~QyOvKuJnFqDzi?vh>si>ke:eb8X^1NW+JX)DT&CQ%>N":J;J 9G5H=Q :O:N

    6A  Psa6A@TM Iǩ5AAUf at"5AbH 6F5A`; -95A 裬 yb-5A ^"5A; ']U6A2 rdt>6A. Psa6A@TM +X5A`X e Z5Aj8e 5A٣ ֜'5A`X e 5A P/5A`^9Ԃ !~5Aj8e Z5Am 攦5AZ 5A٣ ,pIEE6A } b ʮ BO6AZ  lqM6A# wK6A@א IEE6A } b E6A hX @H6A2;Ӄ |jJ6A3Ih i9N6AZ ʮ BO6A:F` o7M6A jq abM6A lqM6A# -Xo© 6A6 Y4R6AP(d #cZU6A6 /HF 6A`+ o© 6AA+$o ՟s 6A z 6AP(d ]pN6A`QiM% Y4R6AH4 #cZU6A6 .@{g:6A`#u *vhJ6A)% *vhJ6A@ YߚF6A9/ עB6A ? C nbB6Ah6 S 8LM@6Aid3d D.+"<6A`#u @{g:6A|v q oU:6A`)J !L<6A7b4 h,=6AE . WKп?6A@D. L!A6A`O! zMD6A)% zs]G6A` *vhJ6A@ /x.7A Ξ r7A` Z7A@r7A3"jY_Iړ7A@s%D O?+7A@3 -E7A Ξ &A$7A .7A@q XLs7A`o NO7A@t tFt7A@ZvwȐ7A` Z7A@02^5A T67+J6A< OJ6AiT"1 6A)p 6A k(6A@6A/qEmF6A0UӥqN6AB_;C96Az6AYr-u6APC_K5M6A@UTTˮ 6A D<;d )? 6A`͒r\z 6AJ4BA( 6Aࠆ Y]; 6AYڮ:56A #>G'q6A@_`6A=Oc.b6A C 6A@@M+݅6A`?"KO6A T67+\F6Ag)*Cyl6A\ -6Af!6Aj9sA2o5AtU}Ohx5A@5A@ꓳȰu5A@aX,5ABkNjrg5A:0a5A3,5A}#2^5A0^ٸ.G5ANvc\Y$5A@qra5E5AiaP5Aିys5A0ꌌZS5Aps+s5AZh2fC5AL}CJ5A@B.1O5A|+`|6A r[6A`Y(3wS5A5A`"D5AZ"hD6AC65A`?.)5Aye5Akrղ95A Z[!Nz5A 6wG&5AwS{5A@Kriϥ5A,h k5A`W S]^)5A7M05A w"7E5A`"ҳ,ؒr5AY+.05A`+\>x5A8M 5AvKqXS5A` {r)5A< ~5ASښ lA_6A@=v q&fv6Ax=ȊD6A Aj,D6A5.S^6A͏5AvuIj5AZ2v>5A!b15Ah-zʱ5AƶXy;uIj5AZ2:35A e $cH{{5A'^j<'5Avv>5A!b3ۭ1Ռ8f6AXv 1Dsf6A@r' Yx|Bh6A p5h6A  gni6A@}J~ bcFj6Ao,y _j6Au ?yFk6A@M%q E5l6A@Gk {w}l6A;5C` yw}l6AgFX }w}l6AO2iM njs"m6AU> ,n6A*RB'3 un6AJ ) HNro6A$ 4a6AR! R!7A@?z` QGMb-!7AjV ğr7A '0 r7A: k7Ac &$7An zM7A@k  7A;nN R!7A`ߒ Wu7Aj\ E7AX: f[07A"} 7AHw Ȋ7A ?i. Q7A  7Ac QȌMv7A Ա ]7AljO Vn7A Ņ_ `F7AOh$ 0wn7A` f`7AR! ߗ7A+V 7A`DY kR"a-7A\jZ C7A@b 7AƖ :M%7AfKl 7A }mӻ 7A 5 i 7A Bl7A 6 6MM7A 1$&7A 8Ԛ e7A L?7A !{ 27A ?7A`Q F_d6ADx P[6A\41 KUb6A\[ * 6A"> pO&6A* v@o6A@}@! 6A@0ѵ _u6A]sa Qܥ6A$x Pp{^6A@7V \F6A@:=3 a6AU秙 =76A" >6Ax_Ǎ z6A=8 ah6AuI O6A~۝ 96A@iΉ ϝp7AsH \7A`/N …K7AIt ,  7A@%_ D#U 7A[`f 7A0ē H 7A r 27AYJy _K7A }Jm 讔7A#Iz 7A`g pOg7A`+ *(7A 9[17AG~ z7A@?z` Mb-!7AjV D/* 7A 6 r $cX 7A  }nq 7Asʄ U:: 7A |  7A #Ct  E7A = 'Yct7A 8օD7A"8 c] 7AV D/* 7A 6 5pa6A@^v3ٺ &6Agc|  z@46A `ކ &6A8(s O6A`zF P4B6A@^v3ٺ Н.6A@Z a6A\t= }V6Ará P6A@Y+ n11F6A1 pp6A`:-. 7@06A<, ظ6A@el %6A<, 06A J]6A@el ظ6A %6A<, 8Pnd2ϳ6Ae> }6A@vw( a6A 1 !Ꜵ6A B)* }6A@vw( NUI0w6A) ;= ì6Ae> nd2ϳ6A]=]6 a6A 1 9`ɯŸ5A0-<-5AFoIB)gJ=5A0-<ɯŸ5A v6 5A`tL&hQ]5A]9z'ɹ5A=&\k[5AeO ^we5A@:t*b05AP$(z5A,aw5A@RJO_5AY2p8t5A꧐ 5A ~mOh5ASҾsV5A"tv\5A@؋ aC5Ahk5AewEKn5A`$X>N{5AjOQ5AUD8͐>5AFoIBYl35A@"F-5A:ZQ5A`&Ab55A̢Pqt5A lծwOx*5A So`qk5A~t5A`6FQ5A͂R5ADe` }5A3X8 5A L+5A0m5ASШ`5A ( mFX 5A Ntv_< 5A0&#+`h5AY4gJ=5A0-<:MB6Y6A Kx >O;6A@)Hc `6A1:5 ]6A`,  6A y)% 9ʜ6AДC 1R6Ao v>6A`ּ Y6A E6A{ CtBM6A`g {46A`? Y6A@)Hc P6A >O;6AG& 6A[馜% y6AW3 U96A` C B6A`lO m6A@]G8 yٯ6A Kx ,P6AW @yߣ6Au JK6AJ3 8d(6A)-} MB6Y6AȬщJ `6A1:5 ;`+O6A&ck< Hm6AfF  Hm6A+G`. +6A|\3 +{6A.5 @6A@M-- v=ƀ6A&ck< a6AҌo$+ +O6AۻD # E6AfF Hm6A+G`. <HM a6Ayg\n_E2qd6Ao@*]#c6Ao@_E2qd6AXK}3d6A&Y+b6Ayg\nM a6An*]#c6Ao@=F5A~6a}5Aq@NTj5A0_YnQw]5Aq@N}5ArU,T25Am}Ѕ5A`~lI5AeeR5AJ>U-5A< 5A1kx"Xv*5AʄCO5A@>K/5Al⠴5A`LX5Aݱa5A %\ *!5A -- C'5A> lb[5A@)^ 5Aâ-25AK 5A@?U% 5APNS $f5A@j0*5AD|G15A@|@55A`5f==H5AVy7E.=5AD;^ 5A@WB 򔲧5AP,=;Sp5A>6% g5A`;= %_5A|-b5A +߲v5Ai~U2!m6A#bK$"K6Ar Q a;Ӹ6A#bKE;`6A@E), X6Ag& -k6Amp4Y6A@p8!m6A@zHH2 S6At_6AO}{6A3' {U6A@ R6A9 UAh6A`/ bf6A {LM ~[66A< y!^6A]  -2 q6A@\7g6A@C$4~6A|uE4Ao 6A7ޜ4fMh6Azw0`u6A|k}3lA6Aw,- 6A`{ a/k6AOfIXq(6A Wl{6A 5qp6A,)Wɱ6A$͋6AWA%I¹k6A@y=$6Arz(a6A`Kr$뮭k6A V~f[6A ([6A\  ^?X6A% Cs6A`(Po6Af0_Dq,6AYhg6A@c6A .P<.b>6A 7!6Aa lGpy 6A@;kf':ɬ6ABt- ?6A6.,6A@JT@e q6A@bde"6A`Qh[&6AМ2lGxˁ6AoZ3n-oA6AZ {%6AUe׿Q6AF_+n'6AFG W6A E8A0M6Asz(6A 6/6Az6s*6A ,=`"Zھ6A2Y8ݝ6A@ $_E6AMl7H%6AV"6A d}PQ}6AOue6Am3V6A] JP%6Aɑg46Ä́xX6A2\I I6A"ٚt46A@*W6Aڂ:/6A^tǿ6A@Bwf!6A2Xe"6A&P*6AeK/mq6AvEDp6A^2"Ms T΂7A`_ ~M7At C5p6A}{^9Ci6A^^ 6A^^6A;˻"1$L6A=N9Ci6A V6A`!xnK6A`:j( a|6A`_Hj yQ{6AU̕A[.cx6AFL sYv6A౿C=s6A9&[-*q6A@^5p6A}{^(#c q6A[PL{v6AG6r_cHx6A@<[gVz6A u8%j{6A@sn46A Nӌ>x6AEH+ 6A^^D,5A-1n5A@fV /ŝ5ANZ08\5A-1,5A++r,5A`<5At5AmM)n5AyU M?5APح/ŝ5ANZ0E@/MP6A M4O-S6A`զ5@rvQ6A`զ5-S6AG?;/Q6A M4O/MP6A1QN@rvQ6A`զ5F`^ 27A@YevSU dc87A` g%<  -{O67A~R x47A@YevSU ^ 27AFM "t37Aվ/ V37Aq& `77A` g%< dc87AI{ ` Q87A6q= -{O67A~R GpY6A|Ҏ%F6A ~В-i6A|Ҏl6A򪓫D7r6A@׭R:B'6A@6)A 6Aw">6A2ipY6AC&Ku>6AjQp8A>6AM>}̊6A`;~3v6N6A[(+,.^6A ~ȏ&6AM8y6A@Or[> An6AAR(;6A{Ғc%F6AB[q \76AmM! 6A`-В-i6A|ҎHH0s Q6A;e: 6AO;G}: 6AI};V6A^0s Q6A;e&J6A`Ыp껗6AO;G}: 6AI}Ixd6Ajx-#6AY] 6Ajx-|+He6Apye2I(0@:6Au(j3P|6A)#d6AO96Az,4ڇo,!6AY]d#6AtH 7a"6A6#6APRz&r\#6Alj=# 6Ajx-JLi6A`N4<{26A]sNoT~96A|M'p6A`NLi6A@HZG86Aa7u6A /6AY#6Ak7Z6A]sNϬ6Ata4<{26A{S#6AO{6A{6Y!6A/K &6A`0c'L-R6A`ú1qj76A`' <oT~96A|MKpm6AQKkh6Aj hNH6A.F;7Y6A{QO6AQm6A ;LӺe6A@â6A8+&=6AjKkh6A`痿w'(6AP{F6A:7hNH6A.F;L&6Aխ@`T H6A\S-3C6A\S’E6A6-NF6A@F6A `T H6A0wU MF6AOu&oF6Ap2tD6Aխ@HcC6A0Û=xXC6AE'y+jv!3C6AY^'7"A6Ap5x; A6A_i6A:1=6Ap9\>6AH==6A1^ }96A~yf[56A`316A.i64r'6As@&6A ={s&6Apx#7[kƸ)6A2խ@(6A`&F,$z<2(6APc/&n>Z+6A"P!J,6A@TDxM.6A0 9JbR=/6APE\ 16AgG4 36A0e ˰T`36A?T1U46A`UPNq56A^76Aā^ Q76A o~J 9:6A-%oy=6A/7U?6A7H1XA6A0{d3[gsC6A 3C6A\SMX@*Ln6A3Nyg\6A+F;Y]6AVu>˳,^6A@kH9_6A ~uq߷Cc6A \2SU\;a6A)UMs_6A [N\6AecRb}Y6A)Gc PZ6Al-SBWQ\6A=<7Jq-^6Ap1lEPd]6Ap%wQ|^6A@~yS/L_6AOH)Fb6A`0WY8p] `6AGE3¹(b6APf%va6APUgLp)}b6A`-.l c6APbF^vee6AcV~H"i6A%rW׏j6Ark=j6Ak`_k6A O:sJ/k6AouY@i6At* lj6A Gai6A ͖!GObk6A =+'ojk6Al#=m6A}"@\v޶k6A.S)0FOGl6Apӟ@Ox. R6Ar6R6AvS=Q6Ap/ Cg@Q6Aw*=U6AX)kW6A/('X6A*ϪOW6Ap##pZ X6Apa= o^ѕC%5Ap@r*.&5AP=j5A`S"5A"4}4O\5A'~5AqN&iV5AHQW Q6Ap## o7AԄy(@7A`*Uy \7A`*Uyy(@7A@^7A`3{h'7A`-/$b7AԄs =>7A`XT|3.7A+dyEu7A \7A`*UySp-{.6AxdIug66Aѥt i56AxdIR36Au06A J+-{.6A@R̆eތ16A 1l2xѥZg36Apz[,y56Aѥtug66A' w8f`66A~$GFP66A ! i56AxdITz5A#5A?U.!5A#Bە5A@q{.0i5A }hpz5A$~kE5A@I5Nc5AP{E# D5A= 5A !$5A͸-Iz(5ABlf55A?ULa05An$5ADmyi U y 5A`l4`I5APR5AД%*`5APF 5AP6 :5A qi .!5A#UhNsU6AO^ JP%6A2\I*xX6A2\Ig46Ä́ JP%6Aɑ:6ApW 6A`W8&2JGU6Ap'c@6A=;tUF6A@N{/Dz6A rCD(v6AO,S.ݱ6AFI5Y6APw`}=) 6AېN*Ӱ6A@6PR| 6A}Rry=X6A=F](+6AO^Ρb6AX6A&6oY6AM`4a]6A@s_c2Ar6A{BCH]2S6ApTsELF6Ap'8Lڼ߷6A3Pm,66APBsWPr6AȂ=ANsU6AM~@~!6A@HK;(6Af2W6A2]F0c6Aׇb1F^6Ap[,6AsdE'%A6Aq|"{;6A`?H*uM6AP 'l.Y6AF6Aū C6Aq 2>V6AbxX6A2\IV+N76A17HF6A*yQܒR/ F6Ak̶۟ D6AFfA6A)>6A17, <6A^mfaI ==6AѼ^JE:6A j]oc86Apqѹd9f86A<G86Anӫrir;6Ax@6Awj:?6A)MIWS?6APZⷧ B6AoWڸHF6AFܒR/ F6Ak̶WvSFqu6A@|86AER}6A@|s{|6Ab1i}}6Ajysߜ6Ap#ut޽6A 7[qzQv86A@$@kUb6AP3c@6A I_Qz~6ADK`8DX}6Ax hѾu{6Azj"! y6A` fۯx6Af?x6A`s[p(rx6AW }t2w6Ac x̉׺u6ArvSFqu6ASX:j1Тw6AL";S~w6A.EeFhP9z6AEυZ|6AVlwH|r~|6AS!-6A#Q"֌6AnV86Axs%jW;Pd6A'j)[C6Amm)?Gt6AL`턒q6A PՀ R}6A@|XF*6Aɔt7p16AeE!!6Ap3p@!6AfչX_lڳ6A 1YF*6Ae")"6Am# '6AwV[*6Aзj WyWW-6A=</6Aet7p16App =`.6At֡-6AP.6A`"1y%-6A} =-6A10W*6A`jB@Bw")6A]Ī\ '(6Aɔ@ %6A ImPK,"6A-eE!!6ApYo6A`] 6AP&AO2=/&C:6AREl<6AN]MV-đ6AWΑ6A\6A 3{WX+%6A`]-!6A851\o6AΆ]X[/46A@Wp>)6AP1Qe'6A0*.J6AV) B&aZ6AP&AO2= 6A_O>/&C:6AREZh$K;7As X{L!7A;OF t^7A7As X$K;7A҆@7A@!CpUY07A>V,7A;OF7A`XqI=h7A` C\{L!7A`pt^7A[HXi6ACd)n6A2@$#ۏm6AXi6A)1Hk6A֣d݊K?l6A2@Cd)n6A0k$#ۏm6A\Ha1M7A|],>(Q7AJN >(Q7A|],a1M7A#YD{M7AE JN7AJN `~O7A 0M>(Q7A|],]c̪6A j6A .L@ZD6A*SL`Uf6A'|^66AP="M6A+EkHiN6A8 Aaw'6AʈGWOK6A .L@j6A ߘC y6A?=j6R6ApzX)A6AE]dڨI6Aocmȳݹ6Acmy8b6A=mFx(&6ALof(56An^z3,6A}ap6A?{ivؐ6Axr`,46ApQU人6A0$R6Apέ 86AP]I>U&d|6Ax3g/6A7Onm6AuU6A4;?6AZbyY6A@3}6A=m7}"6A|)wc5j6AP#&`m 6A`>&K6A |X=)S6A3&J?==uP=6A`]Q+F=v66A3SZ6A`q[,{6A-^6A0.zRl$6Aڄ96APo ,6A 3$j6ASxn96AN).b16AxCws6Agy6 }6A z)GA26A zA'LNTy6AOL=+*-`_6AA(ϣ7g7A2uJ7n7A؉Bk7AOS$ 7A r_7A3 lj[Jf7Akz7A0SH7A*bFG$gS7A`94+7A$3h* 7Ai$9$7A`H@C!>7A`pEL 7A@N_p_{986A4 ~Hc3T;6Aw$K nz:6A5~"O6A4 ~_{986AA?({0x6A~^f8x6ApUD!SP6A`b0 Mm?U>6Aw$KHc3T;6AzM09T6A@O]\ 6AOU0I6A0&ķ7~6A_eJ&Y6A@nzޕ hs6A0T~Je|6A" x`6A ta6A%b1 6AZ3gb6A`IUԇ6A 8Jc.6A@ V5Hbn6A \]_6Ap)7a[9z`6ANxKeLv6AiՋ6A :Z6A`'Rv6AxbB*t6AhYB_z6A 70 ^x6ABkp!x6A 70Xwy6Ap[X@y6A71_z6A/71(x6Ao/ Zt6A.*)A+}t6AD!mBTpt6AhYBB*t6Amd?EmZu6A0T8ڷew6A!r"^x6ABkpcxϑ$5A,:Tc5Adz4y J5A,:ϑ$5A{O2 +G5AuԂ!5Adz4yTc5AK-i#5A {5A |YAK5A@f`&5A\CVǣ/5AÀQa5A;ZʪJ5A,:dpA\2)_6A{5-*9e6Aݿ a6A{5-Äq'`6Au;)A\2)_6As;M+{`6A0ӈ  na6ABb^c6Aݿ*9e6A { )bd6A+Hc6Ap:a6A{5-e`DK&7AP9XD\,7A0_Fޑ ӝmN'7AP9DK&7A UJ(`(7A3]*7A0_FޑXD\,7A𕥭fu&,7AP +dS*7A=.\Ϯ(7A`Eƈ,ӝmN'7AP9fh2'6Ah3 Z6AAv*OZUߓ6A wἓ6AH ='6AA}qv?6Ajq^'㹗6As6A0):v6Tj6Ap@Qxݜ6A@<_7j6A@o6A96APd Z6AAvXq,6AAT6A.a16Ap]r,vV6ApJ: y."6A}ut 6An#s`y6AXL+96A67<6Ah3q iÑ6A y-+Ry6A,=6A0d '6ANW{0C6A`+kM2aa6AٍR6Aގ2'6Ak:nc|6AP=Iш6A`.-M6A0Di)EA6ApIwJ*NN6AD8l0)ُ6A)zw3Վ6Axi4RGZ֌6A R:hes]ٍ6A *6A bX6A'z."6Al4zOZUߓ6A wg3| 6A@:!o6AeRh6AйY6A #t`6Ap,6A@]16AFHN6Ap>6AIϥC6AR+ݩX16AUT46Aԃm\6AKX}806AH+6A@E>ϔ/|:6A`8e6Apo6Av- U6Ap}(!iHw~<6A7 ؚ..kc6A2;&M[X6AEK7c.kc6A;bPӓh(6A>{o/$P6AU~6A0 =P#6AQJ6AU#|6A__ G|(36AI6A$ud|6Aǰ$Q{a6A`C<F @6Ai5V!R6ApÜ"26AYbD6A7 ؚ.P 6A0э-w~<6A(F 6Ap3mf 櫷6A $\oA g6A׶6AJab6A(L5Աz6AtKA[a6A@YM6AL&YEm 6AiIޝ|^6A4 }6R6A@b$c-W6AF! F{6A2;Q l6Ap0U6A`m{Kݠ6AZh6A[1[z%%6Ad:fx_#6AM[X6AEK7cjPG7A ?+3,b 7A 3,}3,b 7A ?+ICQ7A>G7A@ۏZ\*m7A`Kt 'T\7A 3,}P 7A`\3,b 7A ?+kL\z6AyjnL6AD# 6AP^[#,$6AD#t*66Az \, V\6A@'-i䲀6A2.ZĘZ4~6ALBqG4~6Aq KE#6AQ=OOY6AInL6AX)\6A]#^H,L|6Ayj/Fb{6Aು!iL\z6AdBhQΌ|6ApxUOK|6A m>ICg/|6At8 6AP^[#lP̕ 7A:@el*7A qkGB)7A‰1׸(7AH@el*7A ,ޜ٭'7AӬ6&7AЯB:7igok/$7AP2I]A 1R#7A?[iqO"7A%&u%7AsWH'I&7AFz&u$7APK+|$7A CA; N$7AʉQ t"7AwwK 7A@P Y`7A:&7APg(D o7A{0Tr67A7G(\ "7A|-vw#yr#7A@~g&t 7ApA> 9 7A`IcBw7AE w7AK5[mɄ;7A~w]\eC7A@͖c:7A=7AQJ|7A,>7AhV7A@.۵z7A_17AйQ^7A$_э7A 7A㚳'-7AB^kN7AO>D7A`FY7A3Aι̕ 7A,yݭ n 7APt~l"o7Argզ[y7A4UV7A`a伫k7A ~-u؊7ApVV]7Ag7A 񥘡Bc7A+'83角7Api6Z-s%7AU3:'b7A('Ky L7AеwpNy7A?iS7AƔ?j7APuq>P7A0 JytJ47A(wymw4C7A`/V#p޹87A0k]GRP7A qkx!7A_(V|=#7A0ݕzҒ#7A} s,f%7Aqmq #'7Aq=^&7Ad}U(&7AVFUB)7A‰mpyew6A0舔^hVXy6A))< y6A ChVXy6A0!NhCy6A O/WYx6A`C]w6A0舔^yew6AwWEJPrx6AP2b@Jd4vJx6AV-,A'W'x6A0m>g@x6A))<y6A Cn0sk6Ap*oJ6mt6A8:h!NZ@r6A>}Pk}o|6ADul~6AM=-6A >36A||6A`ko@56ARumRʹ6A]%B`&Л6A0=i=n6A'L<wDw6AЧ%Ҭ6Ap,W(j6AMul~6APMg 6Ac$s%]a1[6A0/6APL6*Z6A@ N6ARԘ-6A>ʔUGf6A`tmtU6A zǙ}eE6AY t֖26ADq? 6Az`E36AȯPrG{6A%hadG6A* RFǘ\a6AzьCz&j6AL^Y*16Abu=-6A >3p7ApRuv?߰ 7Ap(ݼ4 7ApRuKuq 7A`р 7A S, 7As 7Aywֲ7AE7A@y҇N 37A`f:6؁ 7A ]@j 7Ap(v?߰ 7A@l 7A!kzO 7A0}ݼ4 7ApRuq$K6Am{6#iIe6A.rFS6A*8h6Ap_d:6A_M#6A03iq(6A."΂6A?F1_h"J6A0)c6AYKSu6AB W6APJCG6A96AgK)iIe6Aɂ-SP6A 5.ɐ 6AΜ3]+o|6A`J<+/g6A@%g.>6A@Q4y?6ANə4!6Apʻ8U3ҋ6AWg [{6A1_=K6A !]Kv6A7] f'j)6A.hwY6A@!ƈat6A@Qd.6A'oԭ6APu%6AN/6APi3]ut6A mbR6A}جZ[6A,6Ae$-66A Ho56A`uJDio36A@XXkk6A *>%D{6AB\x$6A0L']6A<K|Y6Aܲ;tVV6Am{6#|/6Ay=Z\6A7F$K6A`!u 6A9 p6AOY*6ApNS 6A`g(MӒ6AŸ^x 6AXvL6A R6A 6A 6A^iJSh6A Ѽqni.6A05ŧ ic6A`(D6A+j26A&7QvDz 6Aw\qǫ6AUIΞ6A෹76A`?(G6A@$]O 6A2Kνc=&6APwq 6A`́W݈c6AgF8:6ABDa\6A`-L)b6ASv.ϰE;6Ao)p2Z_6A@rY@O6Ap'1v/H6AP Gwo%Yz6A Ut0I8hI6A [6pߑI7V6A} l]He6A "v4AC6AY#rt RB6A`1B^z6A^8Uoxm6AB_=d6Ayh< 6A3O6A~d6AP RΫ6A0'ٱ6A08s$86APɫ1;f6AlbO31s6A g.U%a66A@\n (6Aʈ thq{.07A[j ,e7A S [QFP7A:y,e7APK5VY7A2[lQ7A[j q{.07AU 9r7AЄwz7AtQɭ7A S\7A x[QFP7A:yuh|êY6Av Jᅻ_^6A=P ve/V`]6Av O:FW:\6AZL1m.Z6A`q#|êY6Ax8xGZ6APq1wN[6A=P*K]6A^Tzc]6A?̻Jᅻ_^6A0ve/V`]6Av vh;*936A0 (|1&h6APnS ?ZYx6A0 (,W?%6A0-;$;*936A>Z18`r6APnS{>mf6A`}5&w|1&h6A9C1 &d6A]QvL6A W6X6AGt#?ZYx6A0 (wp;T[5Aϗj?ʕh5AGoN9 )}VF5AGoN9?ʕh5A` FGIA5A@[Z 5ApZIuK85Aϗj25AIW|;T[5AuuضƆ5AHZX,5AɶDیH5A6 <)}VF5AGoN9xPf3h=7AПU~ 7ADwE 7A7boD 7ADN 7A*~ 7A: C 7AПUf3h=7A ]wE 7Ay`3R 6A:c%6Ap2F \_6Apu>Bb+}6A:cyXH6AgU3R 6Ae^NX6A(uHyt6Ap2F%6AZeMz,: 6A.=.7R\_6Apu>BbzP0+ c7A0*U7I'7A 7I'7A 8(+&7AqQ7A6(ڥ $7A0*U0+ c7A0Pd(tn7A@NH7I'7A {5ۥ6A6lwK6A@b i4T]6A0h3+㎧~6A@V4(*\aa6Aaj o[6APdpY6A塡GL6A0G4#T6Ay2E[wmZȬ6A J~fi}6A4G]u٣6A;EY6Ag6A@;˹6AH\ù6AXU-}XwL_6A@b iG-r6A2Ln+:6A@x<6A-M`o\쌸6APD`re+۸6A#21_ ّ<6A`gͻػ6A!+wK6A O?ވ6AP5u6A m/*6Au 2i6A #DZ6A0qe1ӭ6A`}{S>6Ab\&Э6A.=Q~Iy@ 6AKhL6Ap[!t$螮6A$HwĊ<6AF!{*6A=*$M&Ǎ6A`:0f6AP2) 6A`E<$ڛ6AE[qG6Aujܵܗ6A&4VwDi”6A I:L6A!]q Տ6A6l5ۥ6A[)XO16A`.V`*6AȐO^6ASL!QO6AP[KIPLT6AQ(XMT]6A0h3|P vnZ6A`B]I"F5n\6AeRsZ6A`B]I vnZ6Ap[8[6AeRqU\6A@["F5n\6A^,Us9\6AY]sZ6A`B]I}`L7A\<51 7A:J Pq 7A  % 7A:J1 7A@=1r 7A\<5wA 7A jK*~/ 7A7*L7A0eM*)G7A^!Pq 7A  ~s7Al*V7AA0tOX7A y1*V7AiC3I^h 7AO{>7 ),7AP}9˻7Ap@ 9b7A@!}HnH7A0]N`j7A@;Zd7A0 /kpݕ7Al-U7AP? i-7AFi -7ANiK7A4}i;Q/7Ak@OXs7A0KuW7Apd@cY$w7A_1,3}P'7AA0tOX7A y1p6V]6ATa6A`!Ah_ >`6A$Cqx`_6AT!!^6A@*s6V]6A!ON.H]6A4N!ƫ^6A`!Ah_؍w@^6Ap\ޗ瓏_6A [a6A0Q  a6AiS>`6A$CcXy6A/X9+7ANi-7AFi-U7AP? ipݕ7Al3Vv7A0,-q-AK'27A0}5'fDv7AN?9+7A/X77A-Ҡh(6A`K/cXy6APh@>6A﷨X6As7A2]RW 7ARW 7A2]>s7Apd 7Al 7A@puRW 7A2]b;6A#c0EE6A %?6ATק`1@6A2NnJEB6ALSSBCl9C6Ap hB6A@0uE6Aic0EE6A@^3ebWC6Az1 fB6An%C6AX9YA6Aqay ;A6A#K?6A0kV6,>6Ar7@6A@T@6Ai>"K@;6AcA<6AZ˼b;6APHGПa<6A s!L =6A %?6ATקXa-B6APKqQwŲ6Ap .dz6A`ӏV6O]-6A[ҭMa-B6ANJ=$Y+6An.wŲ6Ap . ȯ6Aa<2WUѮ6APKqQdz6A`ӏV6O@+!6A \l!x6A'l]e &v:6A'l]e x6AP2`7(6A \l!+!6AP&v:6A'l]e [$6A@wp}α6A`ӏV6O2WUѮ6APKqQv6A0d!S}α6A@|\;6A T26AP}ԯQf^_6Aꀂq6A^0Z6A@wp[$6A߫8h6A k=EЩ6A~Ew'6AE,J6AHsW6AߏW_6A |Dkwʭ6A^΢$t!=6A-gˬsͬ6An_dz6A`ӏV6O2WUѮ6APKqQJm6A '0x6AOp;30x6A>,/(g6AY8eQY6AYj"S|6A.9djpS&6AN}nO6AX#'Hֆ6AP)#)B4{6APɏ]@6ALj6A\1b6A{:U^Q6As6Ayz1R1C?6Au76AO9p 6ApE6AmJ-6AХ: 6A00)=6A-1e6AM&߀226AP][<36A '56A% 26A0~B6AڡJm6A@~ԱP6A@n̿tgg}6A`#a!tmye6A-dj0Һ6APXF6A@k} {6Aͬ~zlJWIC6AP'Mo6ApLnZ6A&+I @;w6A g9(fEh6AOp;0x6A>U@/?7Azbf̜P7AP\(˯̜P7AP\(˯=O7AЩ$WoO7A(b/N7A` 5'Ye1/L7AZQ/I7A01<iI7AҔ Q}?H7AZ-~tf#G7AsZu*F7A떹'DHE7A0\}iC7Ap~B7AF&ou@7AzbfU@/?7AN2l A7A&!foB7A`5(t(sF7A l(NZeJ7A0Q8mxO\L7A':s^L7A'̜P7AP\(˯oտUj6A?eCF\ `r6A@~5r6A@~5F\ `r6A@CUÍeLq6A G֍(p6A:&Nn6Ap҅/1ŠK^n6AK=֕jm6A?eC?$^rl6A!4ȚBuIj6A 5<oտUj6A|1{rk2k6AP&o6APƂl[p6APiԿ2r6A@~5 *BbZ5A/mh6Aʼ@rx+dʹ.6A Ү_@;^.6Aʼ@+nJ36Awї@f576AP&@& A96A2#@S:6AtK7@M76A`rX#@#ˎ66Ah@956A{+U@A66A)Զ 76AŰo:B46AXiyE*56A "|1x46A`(h,H26A%"xM26A4?Gqvd 26AKty36A@/X;Ue56Al$66Al]ujW}76A8?셵hE76A$6[uZ'56Aޜ%46Ar(16A"p6 C16AFI26A>k?26A@IW16Ap# F4816A֦{-H[ 36Adێ ;B36A(BUB{46Av]>w]J|36Anw>˄46AA`"/76A2џg96AU|boMU:6A G;3';6A{1 =>6AU7.uXC>A6A* 5ݾrD6AyxP!lF6AwwH6A~!cA6I6A~|Y L6A"ۭ*%*M6A0_ϒMN6AJCk(\M6APvVtG _M6Ap{bO6AƔriy޸Q6A cս4VO6AV!ϟY(-P6A0DhO6A2*[]E5L6A|?˒UI6A?"G6A ^ >gH6A@?w$wͪK6AB@KI;D"L6A & ȉ$N6A.%GGhO6A'hC*R6AZ}1U6AxmrNW6A#X6A'gk X6A0R6ARu3 P6Aq2'@XN6A`!x;NmN6AD=Yy2N6AaAL6A@ނKL6ApWyVV6AN\@W6A_@v_T6AܦZt6$/wS6ACHf*}x_R6Af3M6Ao4yL6A)St8wK6Aqל&I6A֌&~JG6Ae/ObG6AفixifUF6A"$xD6A$lJh/D6A ?"e#F6AG-&G5H6A6Ŏ\_GK6A#'z:SaN6AYpf;K@P6ASRbX)S6A+bx.jS6A ~k [V6AFyC9䇬U6Av-ts?Y6A l?UOq\6AV`@Ac6A$ mh6A)Ung6Aĭf6Acͯ_6A/+1U6Arg刱J6APlGG6Ajn4D6AuN[YV;D6A CϗVzKB6Aլ"mw @6Aзf΃=6A)7p'QF<6Aij|:6A4deq}:6A.ger3r<6Ar9rA=6?6ANCWKV@6A\/u@6A]Izo^uqA6A#8g~A6AS/4r胤A6AV ;BɩD6AG(R6kD6A/gXrB6A$ εQwA6A1n(!@6AְGI?6A VT>6A7#*Z+;=6A,Ӡ ;6AFƘ$ll96AJ4S3Qv]86A?Uփ=f*86Aި\9MZ96A}/8"76A$Ѯ9K.f9{86Aţx96AlDkz;6Anĵ fdU} =6Ac}>6A¾kw=6A=kdmR?=6A(<6Aa{~;6A6LE~!;6A${8mU96A<,586Ac 76AWTG&z,56AL%Nc46AĬ,$q76Ay?_86A ¹]tQ66A.4p5 56AgJrw]36AQ%o36Az@*[q#E56A~7B76A86Ac\D]ɡ76A9ez:6AfW}4:6Az:6AESyCiGL66As-?+m#56A"f&z46Aa36A;YmA16A{06AQkh/qU06A\~.f06AzcnzB06A ./6A'*ϙE.6AZۼD/6A63ރ-6A \k-6AŸ.Ol*6A_h}3|&6A~")6AWC-)6Ai:hd(6A_ɜ]a)6Adv&6A`~$EJ !%6AojDک&6A5b#6Agu>#6AM $6AP5uu=3P6A0`^h6AƏBjX6A^Z,QQ,6AaH ITX6A\>9S~6Az *3K6Aަe  6A{{.*N6Ae/hIw6AlH=й6A_!r 6AiNaq;6AzF ]^6A6A7>XqE6A\{,6A*]$=+6AE 6A96A]*q6A`p<\6A-}. 6A/ l)6A&{GT56AsZA416AW|CDL 6AE t;^N 6A:j} 6Anb( 6AG/CNC 6Aڣn=t5 6A]_l` 6Ās>ic{ 6AoMlF}i 6A`3 6AUlؤw6A'l=6AIOjK6A)BI6AY#vg^ 6AYÈ>X 6AzW;r4 6AG*6A_pZ6Abuf+6A *BYM6A%06A`{ s6AJ26AyRuZ5A*fdJ15AAh[]5AD,pD5AцE5A0j 5AJKF5A? |5Aɕg'@>5A$!ls$\5AUBs5AG4ĸ!85Acě;a5Ak*JwA5ACtU5AߠWv5A܎қ^"=5A›,m65AFWW5AC$tCEV5AjWA55AޱBh5AuQl՗ />6A_0~6Ah@i6A$GWs6Aj!l ק6AGd1b6AHTxI6A:!@xJ6Am͘9i6A.Ŧl 6Ajb(pN6AETdڅ6A i9`6AN6ADa5l 6A;B 6AS1aBw 6Az+ 6A&K6A~z..6AGoqy\5AZ;Uu5Ay,kl^5A,5A`fE"BbZ5AD!<5A|8B`5A[5Ahadp5AH 5AZn%r]5AKQ9^5A5AzP]zu*·6AM\>@J.6AE8OgLs6A[׭ǥ6A(kN6A 6AWCOF 6AN $K6AC49AC6AExW7T6AG5L2 6ANP4gY6Ad9;e6A{1r!UB6AUg6APR 6A(]9=#n6A-yN6AS9MSڅ6AZX{]o6A>MD1Yt6A&ї^[J6AV%6AItM8 l6AI.ul6Azg)Y6AGc- G9!6AEGjAl"6AyEEe3X$6AJ8 I`oӽ%6A0ц>ga&6AD4n#'6A~UNO S)6AD&AL(6AVr*(6Ab[ 5)6A<+,6AgKA<$(X.6A79vxΟy.6AqzhOU߯+6A?i&1$+6A<\+k-6A4P"-6As2JcP -6ANh@,6AB+8>\-6AvNӖhэ+6A+l+.ŋ*6AV&j @M,6A{#:hRy*6A9ש;E[)6AݗRz'6AHui+(6A߸~A,6A:a$),6AFi2)[m)6AiDHk,6A$zEB1{D,6A/е<%[}.6A  U.`}06A東616A ڟ=%16A+bӝz~06A`3@16A"@ȌԔF36APq@z+56A8@#J46A8,@R ىj.6A06\+г@+dʹ.6A Ү_@}N6A #q(6A;ZN/]./6AO7?V͵6A_w|]6AF9G}N6A nIy(76AY JS76AfXc6,(56A"9wa46A} ]iN36AD+[16A;Oe16A|ѶG56A \{HnIy(76AYS26A} !Q76A3hM76A ~T76Az@@סj9A0lS\@k9A1l@;C mn9A„@ q9A|@j|v9A@_y9AAK@^n{9Am@~J9A"s,@K'9Aƈ@se9AiHý,@u9AUzr|@vސ9A|S@ԩ{x9AS#E@ذ#̔9Ae&C@9Af_@j79AڂE @mٖ9A@9[9Auq'@x߮9Ap@ns9Ak/@ƕ19AIOv@gl9Aث'@Y>B9Af@$9AFo@#Or{9Ao@˓a9A$mDrP@$-O9AHeBc@d9AYڪ@@9A_[@Om89AbitG@is9ACp@nBc9Aէ@59A~Hg@lq;9A,y2u@J9Al(a*@T#-9AA+ @']&9AN^@jS9A^v8qa@[X'9Aεp@6de9Ac@8\Mj9AUaf@Y:9A~m@Nd=9AG@$h 9A;@D9A]m@u59Am @K ;9A*e@.h9A9 !@.^j9Au ͯN@l؉m9AQ#1@1J]9AH:$@u9AQ=@GǷ9Aь@*9A<@Q 9AL=@# 9Ac'jL@mb9ATm@;װ9A6C@^R9A+q_@ACj9AL@@9+J9An&B@j&9Aݘ`@|oG9A;<@y x9At @%*9AY@΋9A.p7@ E9ABIZa@s59AH@쒰ը9ALC@U?9A:@719AR @JX]9An+@m9A @DPw9AҼH3@M>!9A~a@X=9AN`0@:9A</@j :Ab@EAO:A0P(@w:A.@v4J8:A@T!W:A4@UCN:A3T@r6:A뎓@[POG#:Ay@ߒ,G$:A:aک@gqW'":A@|/ :A2]x@W:ANV@ 4:AG1 @ݣg]:A@ $:AN_t@D:ApM@D4:A@zY}:A @(@|X:A@sR09A[J@9T9A @4^9A#@g C9At}O@cTjR9AH@:19A@9AW*@(u9AjXv@/_9An;@\9AzM,@5g9Avŀ@9A @Rԝ$9Ap@N9AHmr@K+jB9A6Ŭ.@dj9Ae@dg9AX@2٫49AYoZ@d; 9A@J9A|Q@m9AP @7f 9Ai@ZR9As@wX9Af@P9AA-I@dai9Apu@%ٚ 9A:@T9A@419A;@|4`09AI@臥Y9As>@oX9A|ܠC@ջ9A#@T ad9A` @;9AI+]@|a9Ad!@ڬn#S9A{]T@fty?9Av@i9ASf)@A9A@/@%9Av@;DR9AO![@`V 9A(-@1+9An@SJ9A(@u9A3@uƨ9A(@RB]9AgY}@ _$9A)ȓL@̅M9A>'@~<>9AŠ@C9AhG@%…79AS-@aѓ9A @ōI|9AiIu@Uf9A>`,@9Aa0K@b ?9AR^x@oSK9A5 @C~9A.O!@XQvu9A HÖ@IoMr9A.Τ@e'p9A;>@&Lm9AMbAR@#|k9A9/@Bf0i9A;@y.he9A؝-~@~d^\9ACլ@˕jL8A)jJ@C8A1 @58AU@>Y8ANz@ζ8AoM2@ayZ8A%<̚6@7!68ACnN3@Wv~8A4@9b8Aʀ@kgl8AȅB@P8A@c8A@䏽JE8A"Ox@u38AZT7@%O[8Ai @cAB8A<2@{< 8AVEm=@C8A(^ @^ˁm8Afh(d@"m8A'PJ@1sok8AMQ@ίh8A00@ ɍAf8A&@лe8A&|@!aif8AU:@JKf8Ad@ &ck8A͹ )@%L.j8AC|@gNoh8ACG@}!mg8AnG@5ȫi8ATQ@f8A@l0f8A|В@Os%Xi8A@@zRudh8A I'@[C;k8A(@zaeyk8A: #@g!i8AS4_@h"h8Aȼ*@c8A~@a8A)jJ@?2a8A㸦@GC8b8A~'|@ d8A:A@e8Ad@:p:b8AF @o4W`8AmI@BP4\^8A,L@9 T\8A4,v@c\8AH\͊.@{ %a8A@/Xa8Axbs@=Xt`_8AUO@H^8A" @QY8A%Ek@ W8A;^.h@U8AYf@OyS8AY=@-N8Aꈡ@. %O8ASY{@CS8AW]u@/b"W8A@:Z8AaJt@籭`8A&9c@prN`8A'U@xԍia8AZe@ΫY8A)}Qj@8W8A'6]@rSV8AJ@T8AVAi_@y]uR8A l@$P8A;(j@t\N8AQ@˕jL8As5Z@C_^M8Ai5@%hP8A֜@@O8AM98@-%LlQ8A7VH@lR8AXx>@Q8AST@pYS8AQo(K&@;U8A~$@K> X8Ah|/@1)Y8AӜ@3R]8A=҃N@v`8A۷63@â\b8A8@.w+Ic8Axn]@h0Rd8AꏞD@gd8A0/@4,eg8A4"I@X9k8A*Ƶ@_{q8ALn@B8p8A8@NERs8A6k8j@=jGu8A‹W@^=bw8AB@~4{8A[@f|8AO@5ny8ACy@/v8Ago@c!t8AJS] @@s8A/J+y@S8>u8A[@y6du8A#@Xk Ps8AB@9AQ[r8A ӟ@m u8A @&y8AJc8A@TVv78A7uvc@GAu8AFR@[@ v8Ah{@]8oAv8A0@ި t8A%2W@ADs8Au^d@`q8AuH=@xuGp8A{6@$ q8AY"@CGs8AbQ@GAu8AFR@K G7A|-7AD*&v^)7A| t(7A֗gTh;wQ(7A"xm!+7Ag߽*Ɋ(7A@ЏUn ^$7AF2%ƷC!7A|ʙIߊ8!7A8VٮÅ7AU6dsJ7ApǍ6K G7Ai17AD{7A '4џ39"7ApcE[lLJ%7AE[ J*7A\R,DG +7A<-7Aܻu<-7ADe-7Aɀ(KH*7AF7*&v^)7A|K17A}@V97Au@_7A`}@ y7A}@D#27A}@@ZɈ7AP@"E?7A>%@pw7AVlz@_7AlXId@K17A&(%@ҿ67A<c@+'P7Al`@Vx.7A!;@;7Au@K7A?@V97A.;x@_7A`}@+{h%5A-4tjVy.5Ax G 0+5A#h;f)5AGF!1'5A|x @&5A"q9s+{h%5A{Aʴ ;&5A;=Vf'5Ax Ga[f(5A@. R>˲)5AWjVy.5AAwqpV-5A-4t Ia+5A=@0+5A#H#c15J5ADn5AU('7$5A#c15J5A`Qa5AU( 5AXDn5A '7$5AXSE 29A=$@*&:9A$q6@SE 29A$q6@559Ak@2iЬ99AdV@*&:9A=$@b69A~b~@Jo_69A.f<@yZe?39Ab@SE 29A$q6@X7Anɨ@cڪ8AT*T1@cڪ8Anɨ@@7A(3@7A0 b@`I7A*@=H!8Ai@m5i8AT*T1@C28ArS@cڪ8Anɨ@p@6A^@-%շ6A4` 貯6A^@@6AZXG"^%6AP vW@=6Al!En[w6Aحf`i6A4`!s!6A*?i6Ax-%շ6A Ǡ6A@|_貯6A^@Ht7Axڃ@w7Axc'@t7Axڃ@""Ġt7Axc'@w7AsѦ@VA;hv7Afm@`SDu7A*de@t7Axڃ@Pҍ+8o7A󆥘@t7Axڃ@t7Axڃ@s7Aаm@\p7A󆥘@Ur:o7A0g'ڛ@ҍ+8o7AQ@/cOp7A0w(@t7Axڃ@`JA9A`;R@VX9A&<8@ W%9A`;R@`T9AC@ j9Ay'f@JA9A2@1-9A!.@!g9A&<8@Lh$9AC9!@VX9AT@W%9A`;R@hurY7A!'rn]`7A$n@ ;2[7A!'peZ7AgogurY7A@F=\7A2I7ǎw^7A9m@j?_7A$n@rn]`7A96adUJB_7AD aIzy]7Ad>w;2[7A!'P+C8ApZl@8AEF@e8ApZl@+C8A$'5AgeZ 5Av, 05Aʐ7Qh5A]:6cG5A~$Ko5A͖j3yTi5A[@TK>5AE/ C5AQq h\5Ap)d^5Aъ5A+ )8}i5Aa222"5A6)25Ass5AA B '7 5Ar MMwRLZ5AA2c$5AInPSp5A)@!k[95AӝTUqc<5A-%?$v5A,h|y%5AZ!͟55Acj|5AdLŔӺ5A=*j5A/6ru5AXP]7A`wރ@n7Aw @n7A͏l@]7A`wރ@]7A(Ĩz@47Aw @vܬ7A p@l֨ 7Apn@n7A͏l@hc18AVJ e@RΊ78Ac@ c18A@@4~18AHq@\638Ac@E48Ac x@#[68Ag =@RΊ78ArEf@?oz78A-@ b48AVJ e@38Aۗ@c18A@@P7AH@"7A첔f@ڵa7AH@v^7A)@7A4}xz@C7AA@Ua7A첔f@"7A}jNr@ڵa7AH@`1#9Au#@bT-9A5s@ 3-9AXx=@av)9Au#@j]'9AjU*@B(Z$9A_n(@1#9AA>B@o0d'9A5s@F/?+9A">b@bT-9A~M@3-9AXx=@@‰7A쩦h@7A$9$@%7A쩦h@‰7A e@/(7A$9$@7A@%7A쩦h@P9#7A`mI@%k4}7As`@~'7A`mI@a/7A*-w@9#7AT @pELf7As`@%k4}7A@kN@Ѷ7A{D@~'7A`mI@PDUck7Aq^PΡH,q7A@IɕH,q7A0aOi=TEl7Aq^PΡg\-Zk7A빘ڟDUck7A`^瞫gl7A@IɕFq7A͇[H,q7A0aOi=hl8A?Pbk@M78AF䰍@ w7#,8A?Pbk@wiwv8Aơ)Nt@l8A5;@.m8A@ª^*8A:@?-ƴ8AF䰍@M78AP@Q8AO@\Z8A R@w7#,8A?Pbk@H >7AM붳@E|7AL7p@rVI7AL7p@z[*u7A&:;@E|7A|_@7AM붳@ >7Abδ@rVI7AL7p@hXc9Aⳗ@L:o{h9A@ Df9Aⳗ@8F~0f9AQh)@Jd9A!@Xc9ADG@ oe9A_G؎@c@ee9A;W@Bzf9A@mv5g9AHp@L:o{h9AM "@Df9Aⳗ@PrSu8A@EC8A[ @hԳa8AI>@3A8A@V 8A@rSu8AuZ?@%M8A[ @EC8An@hԳa8AI>@@7A#Z$LK7A&Y;J C7A#Z$@7AtHyUָ!A7A0InDGSyXC7ApG F7AS'_H7A 򷕼I7A&Y;LK7Aw٣;0r:J7A(8uVWi I7A@jݫcOI7Ad( D_EF7AqI һRE7Ac'"J C7A#Z$($]5A=PF'/$5A_ ($]5Aoc#4V˺5AaB)r>`*a5A_ Yӽޥ5A-V.=^5A?5AǢ;F=5ArvzΧ5AcC|'/$5A}І=k5A+LE-Q¨Ѱ5A=PF%(zk5AfI0A$: 5AwbMkU)5A>i[($]5Aoc*j5z>6As.Z6AT*Vt6Ago4g6A]s46A;iá{Y6A)6A?;&l^6A !ۂ6AdNS 6A<,Aa6Al)JO 6A( Ypl6A;=,7A:xsa;|6A?jݽ7A]LZmT6A;m'=6A6Aٌ8LV6ACXDuӮ6A3s)l|m6A&b:Xuc6AɟcU.\Ϋ6Akt}jŭ6A*D^F!6A(ocAS6Ag8k V6Afq۽bM6AɆ6Aly-M՜Q>6A6A~vv56Ayp: 6AЫz86Av7H+ 6As,rZ^Ð6AUTd(6As,r:+6A i+ 6AB-S,`6AUTZ^Ð6AId(6As,rX8AҌL@9d8Az@7H 8ATN@.O8AҌL@8A:3@f 8AB7@fv8Az@9d8A² @Lߐcx8Ad+@7H 8ATN@X9x5ARlR3T E5A# %KmX5C5A\@dX]A5AU^~O>5A2\T&Z=5A4E|XWIK-8AZUc.<@Le\8Ak@@8AZUc.<@WIK-8AR @>8A1 @D08Ak@@Fc8AD@4C8AM 9@Le\8AIo@8AZUc.<@hds9AQ2@3 6y{9AoR@ Dz9AQ2@'dv9AhD@ds9Awi[@n$k t9AT{n@g<]]u9AoR@~~av9A;B@Ox9AD 9@3 6y{9Ai @kY{9Aś@Dz9AQ2@H(H(49A@vI8/99A$0@o69A$0@vI8/99Ay @ y79A@#M49AH?@(H(49Ai@o69A$0@j؋5AhcC}>'5AC}>'5A65Ahcʱ?d5A|Of܍5A=.(dK5Au>ij؋5AK4C5AaV<ꉨ5ARth5A i5Aϣqɓ5AkF`n5A 3H5A:!}5AgV[D5A"KC}>'5A6prOCc8Avk m@pJ"8A Ku@ pJ"8AE@\'!8Avk m@B8A| @ԦN8A('jX@,wM8A`Ř@rOCc8AؾnY@ 8A Ku@E)/8A^mp`@LLJ8Au@ُ?"8A#(@pJ"8AE@Pq-q7A(fL:u7A3:sq7A(q-q7A'-Ӟy2r7A-t7A3fL:u7A(<2DIхQt7A,ǵ:sq7A(P+R7AXU? 7A@1\ 7A@1? 7A3Q2َ7Ap(}*7AXU+R7Az&$9w7AR+G\ 7A@1` l6AGo$6A j+6A6A0Tjqa6A806A0ڂ,Y`J6A,k I.%6AfJ` l6A F@ʹ6Ah<' 9.06A0b 6A=(8~I6AxVL6A6A`0 6Avǿ6A\Go$6A`hYj+6AhP7AdѲ@|7A5@ ;:7AdѲ@47APWaϴ@q7A<@ `7AdF@P7A(@v7Af@;:7AdѲ@`v.29Agyj@+.oK=9Ae)@ ͓w;9A@f79Agyj@a<*29AZ@v.29A*y[@C.d39Ae)@PJ@89A<'@&F<9Af=@+.oK=9Av@͓w;9A@)x=9A۰;y@d`S9A~ A@)x=9AE"c@KY@9A`9x@{sB9A~cv[@wiB9A"@Io@9A@*OA9AY1@A9A菥@> `C9A~ A@%D9A֨@4_D9A_P@{KnE9A-y@kF9AcL@3H9AFך@8I9A[@:eL9Aw^@N9A:u@J "O9AaԠ@R9Aj@d`S9AK@_+^R9APM3x@R9A8$C@qկyO9A|, @0}$UM9Ax2&@(n`L9AgdF@pEI9A۰;y@*E9A}-:@Z:S>9Aw:@)x=9AE"c@`!r6Aasy1v6A/(Oz L3a6AaµJ6A]d!r6Ao 6A/(Oz6ATIeH6A5sy1v6A%P(T36A>L3a6Aa@c.8ATf׳@}8Afd@}8AO"@{8ATf׳@i8A#A@c.8Afd@}8AO"@<d18A&_@8Am,A@'!c8A&_@Clq8AD @P8AQf@V8A8'X@*y 8Ad]9a@u#A8A&ږ@c8A|@9ì\8Azu4@Bu8A2@<d18A}V@՞cy8AwDt@׍8AI(@?nB8AK@h(,8Aof7S@ktD!8AmCl@҄E8Ac@x78A".'f@8A,@סa8Afy @8Am,A@h178A>'@C1;8Aۃ@~NV8A/ ژ@8AOr@D8A?r@Ɍ8A@X 8A @F8AH@sW=S8An@'!c8A&_@XkHi1$9AAG@M(9A@X@K_(9Aq@kHi1$9AAG@Zb$9A͘ /@-T&9A@X@rg'9AZ8@&2'9A @M(9AB]@K_(9Aq@HB?7A(+c-Bv%7A0\7\ 7AKntН7A(+c-BB?7ApeuX?^7A0\7v%7APb31\ 7AKn|.6A3Fm96A([oy=\6AF+z46A `p]&ZM6A(O$6A3F|.6AGwD5').F6A-r,6As&>6A{H`c6A7W6Aݲp:|6AG6A]ja.؜6A4ke(6Agz)6A= gE6Aj`Ec6A([oXŁ6AZ5um96Adxkw96AQA:O36A16A— 406A)*%(vg^ 6A|}qC6b6A)BI6AY#jK6A6Az_/Pv6A}M i6Aں4{a6Ag A+6A8?՛6A3XiKnM 6A 6AZ$!6A%#iKTr$6A4smA*6A;.6A[Ϩr06A!->ulw16A<ː^r16A8Ԭ^<,06A#Cj^26A]JF46AkX+56A׬;.66Aц96A8~=6A, ?NA6Aܓ"7B6AXd-,NB6A$"Y:B6AQk @6AݘiT_;6ARڨ.P:6AZ "86Ai*g)86ABۑ~L:6ApfՔ}L=6AȄqF?6Aw}/@6AJ?W- 4>6A-D+>6A F Ľ>6A<jD6A@&8XE6A"@E+E6A2;onO>G6Az|b5]L6A vd"{L6AuG)BI6AY#xA48AtM2@0U8Aج@ \3g8At z@@3 8AtM2@j(8ADh@X48A$3T@rT88A5@A48At@s鏠8Aج@*sC8AHS@0U8Ao@34}8Aњ>@A2gŤ8A4&y@\3g8At z@@`n܍05A.Q.P65Adv I/,55A7.P65As,fe 45A%آ$~15A.Q\zD=15AEn܍05AN`g?Y-35Avx%F45AdvI/,55A7`U^{56AFNd} 6A&c" pA6A}iNd} 6A;Oh=6AF86Aw0kX 6A/,L+jU^{56AHfp'A!xp:6A<(#M;6A&c"pA6A}i`YX9Aa @sL9Aǜ|@ sL9A[@217A+}H/7A眻-7A5g,7AVX+7APW+7AͺǨ**7Aێ*b)7A&m|)7AјH(=X(7A@I(7AYϩ'7Ak¼x'7ANT &7A*!4g%7A V "7Ax o!7AV>YGhܢ'"7Ag:Gf 7AꡁjwE7AO9,$7Aw}7AbS9i7A'Z#2q7A$e'=a-7A`E0.}7A6,;/Dt7AY\YT#*7A&Ω/|7AΘlw8u7A,ĭ7A3mfeL7AVS5A`a7Al\[U7ANd$H7A*ޑ7Ab $R7Aأ*y 7A۴ W$R 7ANlze7A61>46a47A>D&o|D7A ^:d^7AwEaZ7A(A k"7AI8AD3`g@-8A.!O@ `8AǺ@38Aw@D'td8AlV{@c3"8AᏬu@e *8AFs@\D8A@C|bq8AG@*"8A d0@D8A42(@L 9AJ@#G 9A y@ưom9AOC@rgf9AM@zB)A8Aۂ)Ct@Ϧ8A $0@D8A{u5w@6L9A2-n@D$5Ak>8d05A2kdL-5Ak>[*5A? *5ASyw/)5AF蔎'5AO!w&5A~E5g%5ALKp;fD$5A38Yd$5A>һ$z&5A?:Q&5A{*5AH/NDz*5A"u,5A:k9,5AKhr x-5A2kd2/5Am#B!#/5A5r(R>.5AVE2/5AAzKI8d05A|T?kD5D.5A=QF;25ok.5A̓r0L-5Ak>8!8AqoO@9D&8AmdM%@9D&8Af@ :#8AqoO@e#8As]@gl!"8Ap㳑@6Ģ!8A8y@,vFq"8A@,@8!8A@rU@+G!8A񈙲@;@!8Aȫh@ ׹"8AmdM%@/$8Af @hy?$8A`1L@CS%8APt@DQ%8A2@ok%8Ap/n@@D %8APQ8@9D&8Af@Ph[=7An&JE7A>d&@0 Jg7Anh[=7A@v7Ao@{u7A>d&@kD7A&ړ@&JE7Aw@0 Jg7AnhA>9A{៣@(k19Ay_*@ A|9A{៣@D1P5j9AQ6@A>9At@0;9A%{@.9Ay_*@[9Ab@E|/9A?#{@(k19A-@@xl9A5@A|9A{៣@`oa7AGهnv.7A՛v oa7A՛vƱ7A`NkڈY7A8%jDg7Aרnv.7ApX}7A l7/7AGه[0z7AhPE$oa7A՛vh@pȱ7A$Z7A`x! T)I 7A$Z 7Afy6/7An@pȱ7A:M88p7A`x!tJ7A'Ca;7ApԊ'O7Aަ'7A7T)I 7A$ZH07A(*K&\f7AH 4Yc7AH 4S7ADv?Ի7AS׸*K&\f7A(07AYc7AH 4`t7A\>60S7A00 t7A00ZM&7A S7A8#v7ALͲc7A\>60t7A[7MA_7A=زd7A t7A00p7/A9A#-&@K9AE3@ K9A6P ,@e_H9AV@uC9A#-&@7/A9A=@mR.B9Aߎ.@GyoBOC9AE3@'NC9A{ @2G9A08@4OI9AQ%@ -J9AhC@K9A6P ,@pP#,%7A5D%6+7Ab  I<0(7A5D%P#,%7Aȅ&%7ARgLUb 6'7AJIRB'7A6ɝ_ '7ALhͿ-(7Ab ) T)7A6]W8)7Ak6+7A~;I<0(7A5D%ex4.9Am@;@ęØ9A_X^@9A"s@G L9A>Yd@{ɔ9AƝ@<9Az@ęØ9AŽjx&@͆w-9Am@;@lW9A@x9A$F@|β9AZ@Oa{9Aó2@h*k9A >D@ex4.9AIw@9ۀY9ANT @G/9A_X^@9A"s@_Ap5A%.{ P(|5Aj0W,Q@j;9Aġ%@Yi<9Al@Fx>9A*f@ L>9A)bv|@ #?9AH^@?Gx"E9Am@~v H9A/lw@T˘I9A௼@xVo,z8AR8@B׽8A.11@ I=(х~8ATpB@{8AR8@Vo,z8Am2Oe@3{8A6 @3{8Ap @s`}8A.11@'L~8A9q@Y-<}8AڔG@A!|8A*@B׽8A{F@C0:c8Ac@I=(х~8ATpB@H|vjC8Aд۰@ǿI]F8A/@ժ"VF8Aд۰@y͂gE8AL@|vjC8A]&յ@q NhD8A/@ǿI]F8A@ժ"VF8Aд۰@HfN)7AT17AhZ{M`7ATfN)7A8e$ J17AhZ{7A@? h.8A1@ H08A^HX@yW7c08A w0@18AH@28A0t4@fF38Ax|@Tl28ApGB@.08AQ،w@;/8A@Y6Pr@ց9/8ANpy08A3|?۫/8A`7*i>0.8A`4D ,8A@_ipς*8A |Zj)8A t.])8AD=X~v H9AH@|͠Q9A/lw@T˘I9A௼@~v H9A/lw@Bn`H9AC@[ŽM9Am{@|͠Q9A, @{P9AH@KJ9A2)@T˘I9A௼@Dה76A*yM& 6AZSkPF6A*yb(6AnDה76A';ߋܹ6A|$ L3w6AqsI06AZSkb5v6A'd)N6A@v -6AȢ6Ad|dݵ6AlS,#6AW/M& 6APAuPF6A*yX>Q7Az2iSh7A0q7Ah7AACjd7AN7APrR;7Az2iS>Q7A:]XaN+7AN@0q7AH:l2ތ9A)k@679Af@;"<69A)k@:l2ތ9AD@z9A)u8Sd@9Af@679A'@;"<69A)k@P/o8ATg}@ṩ8A?^v@/o8ATg}@_8A©WhB@PX%8A?^v@ṩ8A@]$s8A%x@nA8AZo?k@/o8ATg}@@ߛj_5A|:d5A<[:d5A>})c5A|ߛj_5AAcE0d(=a5A<[:d5A  9A76@ Z/9AHn@o ?9AWO @JcZJ9A76@839Ac!@  9AVI6>@>7L9AMy@KM#9A?'@G`ƨ9AVod@)9AxA@X9A϶yk@87Fy9AHn@һO`9A6s@_`fT9Av4@009A8#@ ՗9Aeo3@]T9AHd3@`9A@(9Aߌ@ Z/9A\6W@o ?9AWO @H&FS9A/ٗ@- ^:f9AW<@}e9AH<,@- ^:f9ANX@`:e9As@LpNNd9A/ٗ@z}a9A%X@QΏ_9A&.A@r"V9AM |@9VS9AQ@H&FS9As˫@ǓvbT9AW<@~X9A@&4YZ9Ao-@/%_9A3%@}e9AH<,@h8ALz@@>oY8A45@ VU88A{@p{q8ALz@@xe08Ax4$q@Ha8A&ܘ@pU8Aj@8A0V@Z45@I-ll8A*֣{c@>oY8AY*>`@VU88A{@ t77A:>7A-rӚ87A/7A,Plw"17A~ӂp 7AjV7ACы"qO7AMq{>=7A:>0`7A27A\}7AQ7Qz$7A:)fg7Apݝ>oE~7Ahs5}cV[7A$z]7An>e{7AfG;J7At2$|I O7AN3Y7A t77AHDٞ7A-rI7A3[!R67A`z]>Ӛ87A/yJ5AYQ4h5ALɈ(Q4h5A;+6CS5AkW P5Adc`Ma5AYF+5A/|<5A}:N5AM5A^yyJ5A;_jKQ5AQ^G5AO@`5A v(J5Aze&bH5AN)̳5A9 sdY5A`w{ qѯ5A a5A'Mjr5ALɈ(Q4h5A;+6CXbk8AF@u6s8ATח@Ris8A`qz@ q8AF@\ l8A@ @bk8A%?5A>c gІ5A'dc5APݣI+5A#5A2Ff5A21X.5AJ' }L=5Ad9u%5A- \pT5A+߱ 7./5A/w~;5A^HPOې5A.>OM?5AWxHݛ5A5?m2+h5AvH m5A_lj5A-_1֐ 5A W8jc5A)$rd-5A'skv͉5A K"5AW9%?5A>cPK<7A䎐H ?߬7A(MJ4`7A(MJq7A;| ?߬7A֍SoΣ7A䎐HّD7A K<7A4`7A(MJXpS]b5An2 i5Aq`,=Ui5AIbh5An2b5ADSpS]b5A!uK d5Aq`]xh5Aer i i5A<1,=Ui5AIX~p;47AyQk97A!x"R67Awfɝ> 57AyQk~p;47A gK267A^|bޘX87A!x97ADLHm(b>97A9"R67AwfX<+a*]7A̸*4u7Ara5Bv7A|7͐<+a*]7A̸$ܺ)7A{­!h7Atr}*3#m'7Ar*4u7A ū7AoC65AoQ5A@d2 2lֲ5A_2w5AY$YK5A+3 n]ѳ5Ad*b5AT.lT5ASkyE~5A O5A_웯V]_;5A-J $Qy5Ay<> 5A kiVZڴ5AňZ$5A,)Pݴ5AsJ5Q5A%2K^)5A}dUT5Ae=p-5AD_0'U!5Ao)P:T:5A*BI_^ۧ5AXmS5A]5ApWRѻ5ADC)4qf5A4kBP(T_&5AXJJŽ5A:+¾5Aa#3~l5AA W/l_5AHzbnNō5Ax>x"r5A%jV5A/&5AD'5Af[ m5A ZB|5A+yJ5A;_Lb5A~u%-5A%%;c%5A5K8su5A9Rqj5A(3H5Aph:dP *5AvLqY v5A%ˠLb5A~P+OF7AM j%f:vK7AGbf:vK7AM j%jyI7A&\ G7Aoe+OF7AakIeG7AGbajJ7A$0 •f:vK7AM j%pƬ5AKʎ5A;  TO5AYmƬ5AK=05Ax5AM&&TOc5A; ʎ5A0QZM`N5A{z|(W5Ać[1;&5AX9/5Ď5AbjiTO5AYmXXM[9A~@P닡9A t@^B 9AQ@ @AV9A~@XM[9AW@ݾ9Ao@~=~Q9A t@P닡9A>q@ N9A,@^B 9AQ@eI)5A[Z :v5AiE~:v5A>xl#*N5>5Axl#*P$\[O6A8u3X6Aj.T-`ED6A8u$\[O6A#Q&6Aj.T-`?6AĕD3X6AE' N6A_aED6A8u`KNh7A[hꕮ7A&/) `#7A ] Ԏ7A[hKNh7AzT:4a7A&/)5)r7Ah\i77A-+Zn7AcoZꕮ7AjH `#7A ]PS:}17AY(7"67AO'akL57AY(S:}17Al4h%27AO's47A_4'`s~u47A߁b7"67Aĵ%akL57AY(y8Ag9@#V8A<@#V8A @9!8Ag9@J8A0yP@8Ax^@ P368AH"@;hH8A>k@h8Ap@y8Afl1@e 8Ax|,c@|X8A<@DC'8A|eU@覿8A&S@N8A\[z@R8A~{[)@+y8A&奃|@#V8A @WC{6AjDLw;UȢ6A^WC{6AQPkFE5Μ6A^F)+q6Ac#׿6AO;UȢ6Az]Rsi6A G03M6An. 1ı6AoM?qaM6AjDLwB6A+b6ABPGMxEj6A|"G6AۣWC{6AQPpBm8A"%@4we8A^P@ *ˉ8A^P@5o8An5@mj8AZ:@4we8AP @8A"%@.8Ad9 @a8AH@Ł88ABfm@:߿8A|>@Bm8A$" @*ˉ8A^P@:LX5Anљ5~Gf5A$Y^^ra5AX!K8UD_5Anљ:Wi]5AKO.zd5A}Lg8e5AOkbe5A; i,m^oc5Aw)o^^ra5AX P>B8A,XtT@ yӚ8Ar?@K8U8A,XtT@>B8Aq @MdOO8A$w>@58Ar?@ yӚ8AԀݸ@ȣ8AЃe"ڷ@K8U8A,XtT@ hnr5A] Њw5AAO \ u5A] /pu5ArJ3{t5A Ry$gs5A_snr5Azǫs5AV]t5AAOЊw5A;_hw5Am5\ u5A]  Xd'i7Ahlֺm7A0xlK]3l7AW"gl7Ahld'i7AiT|CFj7A,rQl7A0xlֺm7AUd5){m7A m%K]3l7AW"g HjE88A╄tj8Aٿj8ALͿ ZE8A╄t΅\8A<4jE88AٿA18A 4Q9j8ALͿ P{x%8Ah$m*8Ah1!$_'8Ah$=b&8AU{x%8AQڂ+&8A/ul_I|J)8Ah1!m*8ApŮ$_'8Ah$hP,Y8Ax@Bs~}8A,&@ ѡi8AH0@㱵8Ax@:8ALE@P,Y8AJ3@q 8A,@oK8A,&@d@8AB@%n8Asa}@Bs~}8ADlN@ѡi8AH0@hCD6A ,ݢCI6Ay^ cG6A ,ݢ`F6AiJϐF6A @CD6AhuD6Ao ɳ e]E6Ay^w̚-|G6A/ :CI6AH@b-I6AS[dcG6A ,ݢ\7A߷Tf7AbvI\7A`ivƻ7AlX{/vt7A\*fv7Aogv.q7A-L&/k~7A$Ӕa@#7AȽ/-7Af+ h7Aڥ#7AvgP~f7AbvITf7A K7ACsr7A Xel]7ANrB|7ADtY$i_Ͽ7A滔tOԍ7A߷#7AIhW,7Acp7AtC\7A`i% m6Ar$D,&6A^_a&6Ar$D,(n6%8A뻎DbV)8Akh׳ \M(8A뻎_Mn&8A&dF&8A,#\AR>6%8A`Z}9(8Akh׳DbV)8AgGb(8AƇ(ocn)8A;':\M(8A뻎_9Ag@4j9AAb@wi9Ag@ Gf9A9@ccxd9Aᡓ@ePc9Ag@{D`9AB@_9A+@X?yb9Arw@~9c9A &_(@U~Fe9AAb@{f9AQр@>R<.g9A>E7@eie9A4@Eh6e9A肋 2@h9A"@4j9AW`-@wi9Ag@p͓P9AF'@;]Y9A@ |.\Y9A6G@;]Y9A٥"@N^X9Aš@@DDW9A@@OR9AF'@D¾.P9AtG]@)_'P9AcQ|u@͓P9AS@:1mV9A@$VY9AC;@|.\Y9A6G@`-ʡ!6AP5 u5ߏ6A е+f6AgReV6N16AP5 u@^G6AK;_~6AK9-ʡ!6AMف З6AzК6Ah*5ߏ6AR~Gе+f6AgRep_/8Az<@8Aq@ _/8A벏@N28Aq@ oj^8A8J@gs"8A"@Dz0p8ADb@/t8At@8A@J@8A|@75,$8Az<@yk8A"1y@_/8A벏@/i8A 4Yp8A|@Seo8A 4zZZwn8An1xmbm8Av" j8AUU6pi8A%)/i8A&sɞ]Yj8A@ s02nm8Aob-SOM)n8A&zeq@&_o8A|@Yp8A@u#~@U7p8AX@fk p8A@Seo8A 4P{5Ai3,o75Aa:'5Ai3,o@A5AK\U5A)g<{5AIiYvf 5A ~ 5Ac]Q5Am A%"5AJ5A{әݫ~E55A3N]9 5AiW.5AC.#j5AПZܒw5AS>xsWe5AUZ5A~S5d5Ao2aBymYk5Aa:_3C5Ah`?jv5AdfOe5Ae ~Mqw5Ajݰ]T5Ajn5A?lV5A0|S5@aN5AqzoG5AK͆5A`mHb[C5Af5AZ|5AF#4f*T5A%c#5ABt75A߆0K05Aɦ"EJA5A' J]5A\Vm5A>N5Ai3,oH UDy6AƵ]F˰Z}6A5ۯ*|6AƵ] UDy6APR޽iy6A5ۯF˰Z}6A%9nxr}6AHu7*|6AƵ]X߸5ATQEQ5A R g~5A;A5ATQE/5A>`/߸5A R ><N5A+v^5AlUQ5A)?lg~5A;A/_h7A7cnx$2{\7ApCj̾37AK%37A7cnx>X67AN@C-7A*3t7A7A3VP]7ABr6^XRo7AZ4h/_h7Au =/ϯ7A~-_7A&w]T7ApC77A6 7A= iF$2{\7ADǴBj̾37AKHp5A!9WQ 5A@(ӽ9WQ 5A!?k5A@975p5A@(ӽf35Aוܩ 5A?ɧ;9WQ 5A!Xik"L6A r qaQP6A{om;15_P6A r P O6A+!CyJ+M6A[ik"L6A{oQZN6A"q|P6AR3qaQP6A_m;15_P6A r  Pk5A?`sU5AzVv5A`k5A?b@5AKo-G5Azxlg5A 8`sU5AԡVv5A`!H~ښ9AF@ h/9A6@ h/9A s!]@,ڭ9AF@#V~K9Aۭ/@~ښ9A1ટ@9A6@ h/9A s!]@"Pk7A@<ȫ7A6$l57A*Z.̎7A@@6 9Ar@S^b9AH0{@ 8A@Ez8APl@8A:K@y8A^@ ?{8Ap0, @]8AHw`@Nm8A@/@(9AVRf@V9AȦ@^d 9A"@M 9AV ~@QT 9A+?-@&x22x9A#@f9Ac$@ {9A(@?.G89AQ@;fG-{9A#@12y9A "P@22x9A̛H@S7ANc8C7Ad8~qjE7AA*5˯E7AG%s~D7AUC5G@Z?7AxR^3hT=_6A*%6ASٜX ӫ]6AR|\6A>Tl6AaT=_6A`ERզ6Ap4?]@`wdz6ASٜX*%6Ar>{D6A 66AU`ӫ]6AR4L$e9A< @@gJy9A k@L$e9A4˗@ݺe9A`r{0p@fLh9A'@iH|g9AƂw@ٍ)vi9Al8o@Aj9A k@qj9A4Q@ b7j9A&@l9l9A w@ M`n9Aо@ o9A@lC @ܕ_dEu9Av@"Ex9Ayӧ@@gJy9AұS[@by9A-@1H:u9AV1Q@^Wu9Afbv@{it9A @i[q9Abk@Bsm9Afw0@i9A< @GZg9AfL@o^f9AS$@L$e9A4˗@5p`x0Fj8AF|Pԗ%o8Au%, Mm8AF|Pݠ>l8AxJuøyw&l8AO!'g j8A]W`x0Fj8A[Ym8Au%,Mpn8Axz-ԗ%o8Apo>ʯeֹWo8A0K_Dn8A"e%Mm8AF|P6X yO8A O+V8A8GU8A\wM~R8A f2Q8A$2!2 yO8Ap |źP8A8:PS8A|YM{O+V8AAGU8A\w7hQ8G8A O<>@Q:8A\@ .C8A O<>@ϛ8A@Q8G8AB"@%@8A\@@8A$14@Tٝ8ASʥ@[8A@Q:8A,S@CD֞8A @@.C8A O<>@8P;q5A }5x5A>y5x5A K܋ t5A }d|rq5A@c;q5A@熅u5A>y!w5A@@5x5A K9xU8A[E*48A V xT8A[E)~ 8A|D_@k 8A:ݗU8Al8AsxsjQ 8Af2!gt= 8A Vw 8AM 8A:hPwI`8Ak *48ANfYxT8A[E: o$e5Ab\Z^98P{5AtĦ!^98P{5AT\ut5AQfH- r5A@yR`luq5A8o5Ab\Z!j5AmMTe5A@oo$e5A@,;GMVg5AqCg5A@IzJh5A@fk5A7oy2l5A/{þpEO2j5Apsei5Aݧf`:fvg5A@8fg5AtĦlTBh5A\(d[.6k5AfꂑkN݁j5Aj "ym5A@4&I7^n5AJkJDo5A@}Tg4q5A_OK/rq5A@մ0,|par5A| r5Auٚ(FBs5Ar¸C0䕢y5AFE_&G{5AtN^98P{5AT\u;H$37A }`[s7Aeqу`7Aeq[s7AWEZ1}7A򀙹Z$37A }`N7Abyl-у`7Aeq<6`-E57AYE ) M8A_d.h[l 7Aq07AYE |d]7AoB-_6`-E57A @'7A; 4rt7A.;~(7A_d.h78A;8A9P ) M8A5G8Av[Ժ8A++u98A~#&2H8Amli[l 7A=Hʥ'n6A)pH6A56.]]{6Aʥ'n6A1K6AxW˄6A56)pH6A@Ӝ.]]{6A>`WI8A :l"A78ADk]@ ]$8A :l"UR8A ;f[D8A`N(@WI8A=|'@$8ADk]@l18Aݒ_@U$UE8A7]t@A78AJ-`@]$8A :l"?6A`?K6AHe6ǍPOY-6A'sO6A%]fs$346As?;46A:}?K6AA9<6Av0;6A+hu`06A1K!!6Ads!P;6A` 3y6A!ͤrAM6AFT6Ad z =6A [6A8s[6A0o6A5GRq6A 2i /6AR-G6A51Vk6AHe6ǍP@`V6A0b6ASy~Gz4'`6A0,J]6An2زA]VK^6Anj\6A.%(I[6A.2:(XyX6A:=l/W6AO1`V6AT6:Z6A dդ)\6A QU7¢]6ASy~y^6AlYpu.^6AKl<˰^6A:i29!Ma6AWb6AcpAjeb6A cymH/a6A:w6b6ARbPGz4'`6A0ApLD9Azf@jJ9A~0$Q@ @IF9Azf@LD9At'g@bD9Ap="@ِF9A;}y@7$G9A8O@c> I9A~0$Q@WAI9AxNj@jJ9A@|KJ9A8|>@H9Ab H @@IF9Azf@BH̩N7Ab{cR7A >h7Ab{̩N7AV![`|ZQ7Ac۲0d{Y7A cR7Ag4>h7Ab{CP;B8AP27پE8A@On#E8AP27Il/rD8Ab|f;B8ARC8A@reE8A:9zپE8A*On#E8AP27D#$8A}S( pM_88Ah(d( pM_88A$)'/268A}SDQ18A}VcHd/8AVنX*8ALdS_R)8APF$%8APހR*x %8AxVF6#$8A\QS!'8ALA+(8AXSҬhZ&8A8ZU(&8A a5)8Ah(dۥȳ*8ArLr󯇐)8AaH V+8AH3'-8A Ov-8A:drv\.8Afx)`/8AGs61?68Ah *$L68A}X_٧z28A{Y Ru28A$TnPt+H438A!( pM_88A$)'/E f99AR~8C@v9F9Ah[@E7C9AxEַ@% ̲B9AP˸@܊ A9AqE@ӲHE@9Aĸ.S@J8:(6?9A(d9@a>9A\<@4m=<9AR~8C@C顱;9A0iŵ@;9Ad~_A@}5|)<9A |)@J =9A\=@bߞ9=9AhJ@3;9ABCY@USZ;9A^63 @ f99Ah[@\;9A(Sɣ@m-=9Au=@&>9A`΁@9@9A.@KUA9A|ҕ@lD9Aę%@ٺ1E9AEkL@D9AZ`F@^E9AV@v9F9A,)c@?D9A_@X&!E9A@S(@lRE9A06@E7C9AxEַ@FNx8A>2Ch~Ǟ8A`2N~Ǟ8A/ٻŪ8A,ẻʆr8A d]l=8A>2ChK|{8As&Nx8AH ,ª&x8Aڄ?Īz8A`2Nw!{8AhY{8AÈ*R/ d8Ac!<ͷk8AhPR|8ALR: '͇8A4KRʥ8As~Ǟ8A/ٻG`QT7AG{Ta![7A揧1 .ƱT7AQT7AĆaU7A5`"[Y7A揧1iZ7AC϶aMZ7A.ZHG{Ta![7A{ݩAdX7A).ƱT7AHh:WҲ+7AR/=r7A8_)u @7AO{w`4 7AEj=r7AR/9^"_7A,(<K7A:WҲ+7A/&`ce7A8_)u8_7Aᄧͧ`d_7A@7AO{I`~ǎ9As D@kŌ9AUoY@ 9AԼ@9A=K@\٩/9As D@ֈ9AVI@~ǎ9A ю@wX|9AUoY@i9A}N S@kŌ9Apl@9AԼ@JYg7A$4k"XQ7A|&D쾅7A1 l6 7A$4k"Yg7AzJ27A먝~`7AF͟87A|&DEYGj7A5qu7A=C/rN7AOsH7A1=yXQ7A_rcj7A#lw7A~Jgu7A]c'7Asu~uc7A5쾅7A1 KP/6A)sv6Aa`Ѵ)\~6AeK?]{6A>Y ~p6A@2k{L&6A92wSG6AS6zq6Ae q6A~ۚ6A w*0f\6A|(Y86A;}2z6A| |6A,P^6A_Ȑ6A ̦16A3h8m]6A#p0<6A*6A(lX6AJd^p6A.U+w\s6AW҉1E6A3T 6Ak06A?}"'6As[ߖ^46AقN^VX6A4siw1+6A I`6A$_q^I 6A8sg/6Agj$Ns3H6AG p,Ifг6As&ܵ6A hz4g喝6AMtJ,_6A[}qM5U6A9ẍ6Aa䑝6A, @+j6AJvJʒ6A?d e6A+Qt^>:j6A&{O"W6Aq f6A Y۱>6AE,6AM6Ax6A&tUMI"L6A^?S 6AY)4}AoP6AHr%IeOV6AP,'iQ6A 5AjzWD6 5A@ Ĕm5A@ny5AL7UAԗi%5AMi.X5AC8R+5A7u5Azʝ4A@f^H4A@RKX<4A:/3%4A4Y%+7Aĕ`& 7AHsL@!7A1s%+7AONMk7A{k.27A b$\4eI>jD7A3 0ufT7AU{ ^U|7A<OX7A )rQ7AHQZ37A ՠBcDJuͬ7Ax 7Axͬ7Agh+Z)[7AA?i`x *7A>cDJu?,7AAO* 7Ax\P׾U/7Aً M>#7A v#|#7A_\34zN" 7AYJ׾U/7Aً 5$ 7A> 5 |"7A M>#7Aߧ'v#|#7A_\3]`!h5A\/i_5A%ev6AM #y6A?)<3wE5y6A\y*;/{6A rr{6A-5dX̺eV9Al$@=Y9A|m @r%0X9Al$@VvV9Aڻ@̺eV9AL[@ؾgX9A|m @=Y9A\IS@9Y9A%^d@UX9A-ɺ@r%0X9Al$@eHX@8Ad<(JO"{ 8A9X1R8Ad<(J2b8AycX@8AlFeb/K18A9XO"{ 8A;1R8Ad<(JfJ0Y06A.6AE&w; E6A"`v<)Q6Ale1w6A;FKI)6A^="6Ad_q6AbCMβ6A"L6ADr0II6A6A(Drb6A;kY{ج6AM>ON0Y06AGYʮ%76AE 316Az@6A. P$"dر6Ai@>6An\Dy?Ϸ6ANOGQ4K'6Ajs I6AnU0 1c6A&me6AYx %n*TB6ArD-u6AeI`߽6Ad'@bJ6AY S.6Avw; E6A"`v%46AHB_<6A@%E06AǗ)kz l6A~$nf=6A{-+6AX q i6Akh36A = %46AHB_gXqZ8Ah1G:_8A(ڃkŇ\^8Ah1GEV\8AO-[8AùGqZ8AJzŇD\8A(ڃ:_8A55_8A5CkŇ\^8Ah1GhHh5A@=0Iu8o5A@ߘIu8o5A@=06k5Ah5A+q֡V6i5A@ߘ?n5A@tIu8o5A@=0iPw}[D6A/ΔF6A- ?ȉ]D6A'Yw}[D6A ˀNE6A- AˆF6A{S/ΔF6A[fwD6A'?ȉ]D6A'YjPe8An930a8AP;,V)-i&'8A&ϫ~ްE-8AP;,V)8Ahƥr\m8AP;30a8An9e8A@1-i&'8A&ϫ~k`#֟6ASMoQ!6Awr w6ASMoQ,D!6Aպ#֟6AȀM@6Awr8>6Aaz$k26A.i5!6A9„6AE&w6ASMoQlXNMh<7A+0* C7Alj}=7Aę)NMh<7A+0*yx<7A`Yئd(-=7A_)X3>7A@zPB7Alj C7AmIQy}=7Aę)mH7A8 C7A%EtÚ7A8 7A)Ri­7A%E¥P®7A(LC7ACktÚ7A8 nB538A▹It8A`]2>8An&!)yE8AbϘh:vbbΣ8AKLcb8Afۘ8AԽ Y 8AklT$&Nƨ8A~̓7Ш8A$xq8A▹ItDnʤ8A[+ B538A=o8AN|8A`]Q&֩8Av8AfzӬ_Q8A,i'Pc"ǣ8Aqr2>8An&!)o.' 7AZfb⫲7AFa '7AZfbוĐ7A> b+7A<x;|7A=r.' 7A$%i=7AیUQ!7AF,tNH7AkѪjL7Ay$⫲7A'ߓ7A1o$4/.7A͢<7Aϖa '7AZfbpX΂8AtLkB)9A~IA9A@e:m=8AtL8A@8}}ƞ΂8AP>U|MJ9AHKo9A~kB)9AتzIA9A@e:q@c8AlRwjrɖ8A$\CQ0ؼ8A$\Crɖ8Apq~Y8A܄?=ȵJt8Ai{-"8AlRwj 48A6[p8A 2HSM8Ax*_@c8A4k8AU+ p8A&U&z8A Ye)8Ac4 l8A4p%y8A,2#8ADףеQ0ؼ8A$\CrhOӶv8Ai Dm8A +6 C'{w8A0zP>OӶv8A'b mw8A +6]^{8A߶cK}8A  Dm8Ac%laLe8AiOQ6}8AZclcψz8A쯤mC'{w8A0zP>sPcx6AȊFJ`6An#WԎ6AȊFb1L6AGpP cx6Aɟ,_56An#Wk6AxpaJ`6AԎ6AȊFt[,7Am l667Aul667A\Ä^47Am \<17A3E'%z+/7Aό3<8/7A6Vcz07AՂ, TFo07AeJVl}.07AJꍂ!>-7Aq}[,7Aw_o]d,7A :yJz@07Au17Aq~"1.!37A{y&47A退åU1V37A 17A|Ht#=17Al2R 627A,ĈUU s67Al667A\upgZM9Ap4ӵ9A^$m@ }a9AضIP1P`* 9AEh^9Ap4QnQ9Ap;s^69A[gZM9AP6V@뗈V9A^$m@9Ak@ye09Ah!mt!ӵ9A{HV}a9AضIPvPuL7Aͮ Q7A1V`M7AuL7AY?N7A5Qq4eO7A1Vͮ Q7A5hXţP7AP`M7AwPZJKW(7AEe \7AJK-7AEe,-:B7A`ZJKW(7Awt: 7Ac]̔N7AJ \7A>K-7AEexp8AH0u08A̋a7AS$9'w+T7AtV~a0S7A\f FP7AܶU7v O7Au0 !Q7Aao O7A9CS O7A&5;nL7AI<2GIL7Aꅵs/M7A9̃N7AUO7A0KIbR7A"BZ;\(mS7A˼M}",W7AsG$a;`X7AS$9g !Z7Aulۢ!-T\7A(dXCt\7ANr!j [7AU@[7ATf9V^7A|@"T`7Aoܶ8`7Ar9{'>a7ARri* `7A빘*a_\7AT69+[7AQ:NY7A?s,X7AqIxBJW7Aa?Ro|V7A$߾29U7A}^GT7AU%U7A-&]e4=&:X7AlJ{xHsW7A~^MQּ:BV7AQaw+T7At{PߑTy7AUSh{}7A'ן\͢{7AUKXz7AyߑTy7AIf1|7A'ןR }7A੼J4Sh{}7A+\͢{7AU|X̺?\8AJIcoAx`8AUXf̺?\8A2<$H]8AUXfAx`8AF_8A `SP\%V_8AJIcoPt ^8Azu.\T\8Ay̺?\8A2<}.j7Ak|B7Ad31pJB7A4nZ7A7{,:@7A(ƏLR7Ak|N\]7Awb7A<.j7A4"4p7A)d17AX'EVbXTM7Ad31pJxw7AYg47ArV7%<7A*B7A4nZ~hWfӭ9A8fuN9Ahh uN9A8fة_9A,`9A\OWfӭ9Aа&SҸ9A4OZhoJ9AP}pPaE9AhhO9AT:9A*ruuN9A8f@DQ3ޤ5Ah Gko5A@聢% Gko5AhQl5A >5AC#G\U5AsJ5A@xa5AB^&J5AӴwafի5A_FN>$ۥ5ApDQ3ޤ5Ai\Rs5A@聢A5A^ea5AfwN 5A qey95AyYUH5A@?Hز5A@+õ5A@%&X5A_3ɻ5AtTD[ooPع5A 2g׻5A*-Ohn5A9q?ka5A@ku|a-5Aq |&5A|5A*H `5A;+v%y8r95A@L jšXQ5A;  5A@#Iŕ}i5A@AMu5A. jq5A@)+m5-m5APk[ H5A* Gko5Ahl[6Aiv@(f6A7oc6AivDa6A^T { ~^6Aۿd[6Al[6AcFs4\6Ao@M^6ADr{c6A|@d6ARz- b6A,iؔ7p&ϳe6A\ @(f6A7RS@1qf6A(^ *]Ud6A^\ >Ec6A/ t֬7A:!vC7Aѓ;:Ǯ 7AgE5<7A4k)2B߫7AI e]m i7A&eH+c8AIP:9~h8Av i+c8Au.#>Fe8Av i:9~h8A3oQQge8AIPة>c8A%+c8Au.H,\9A+'@’9Al׏'@P_s2g9Al׏'@4 9A񒮾@’9A]2q@-N9A+'@,\9Aւý@P_s2g9Al׏'@PY\c8Aljd8AJaY\c8Ax*nI՗<շ8AJa'8A<5d8APE=o!8Aljt~8A!Y\c8Ax*nI姧5AR@ -g5A@ƶL?5AR@ 姧5ALH$r5A+g1 5AmV5A3tLS5AZLk#l5A@ƶ\.C5A GҪ5Az#5Avj=c5AR-g5AL45A@)_**M765A@3hEE5AˍL?5AR@ X%78An85+ 8A+-l+C8An8a͎u8AȎX旫18Ah?ã%78AW֕8A+5+ 8AD)L޲8A(봳-l+C8An8p$,5AنW0U!5ARi]d 7 5A@I%){ 5Aن}(5A{+$,5AzT5Afb5ARi]dnZE5A+5GX:5A'5AhW0U!5A937 5A@pf[7A17AVcMPV7AleaE7A~Xܱ8AWݱ8A+V.8Azj8A@2uZ8A$M%bu8A͂h.Dk 8AUHDB}k8Al)].n8A?M;].n8Al)|k8AwDB}k8AZ1_l8A?M;m8A%a].n8Al)hg{j8At/*8Aҍf) *8Ag{j8AeS:8A zu[V(8Adt%*8Aҍf)x8Ah^u(E8Aum88A6%t/*8AXF|*8APzR 8A-#ʫ!8A)Ivxp 8Ase 8Ao#ʫ!8A-0 8A*zR 8A"s! 8A)Ivxp 8Ass7ADɐ Y7A䕢} F7A䕢0#7AyK;h7A }c>7A)qtM7A A 0rŎ7A}]NoM<7Aˑo27A5 Y7AL,7ADɐKK<7A)1b7AbVeJ7A- m͏(7A I 7AxG:9A98J:9AxF Pz289A= Ua59Ahƣ`8A䳎qb0&29A |{9AlL4__9AEРnw'8At/^Kby8A䳎q8A޽8AмsH9{[9A0b0&29A|{9AlLh%/"*6Ag3(Kb#6A5? .m"6A5?톬#6Ab#6Aix"6AnBN_d!6Ag3(Kf6A@Im6%/"*6AF )|6A{!6A.m"6A5?X]i9A  9A=MJq0R9A 29AlmG=ے9A%չ9Ax ,]i9AǷ轟9A=MJ 9AئGlq0R9A p1D8A$+f8AxSλ WV8A&۹]828A$+0R8A]-J1D8AHv&[?:8AxSλ8AIaW?{8A;8A%k98AsN:И8A`tȥ8A~w2#[x8A/P:Y6A@U h֤^6AjU:Y6A@U <})Y6A@MprZ6AjU #C]6A~Jh֤^6A@Vi}~|.]6A@NR :Y6A@U h:i_37A]i1}7ANL% y7;=7A]i:i_37A Z24PA7Amsz|77Ahӡ~7Adlփ7ANL%1}7A!=aO 7AITw7ARGy7;=7A]iP"`8A5Gl""8Al""8A@(#`N !8A5G  8A(*"`8AhTDpFߌw 8AO[\!8Al""8A@(#`ƍ`6AU7,Pn>6A (W6A;Cyl8!6AU7,Pƍ`6A34usS6A"o&6AkF9.6An>6AWUx76A(W6A;CXH6APr\6AWۚ Pr\6A|.u 6A+^[6AK=H6AGCET^6AWۚ "D6A d!ɇ6AoPr\6A|.PpF7AZ9AHSQX9AоG9[9ApJݚ+^{4\9AXge֡6g\9A4Hz7)[9A2fנZ9AK`t5ւ6A4g6AMU+`t5ւ6A'CH H6APXT6AMU+NQb6Au:>^6AB\znjȈ6AHEC6AA*Ƣḋ6AFU\ٌ6A3=d@[6AM!ͣ6AU#fZfOl6Ax1մm6A1GjK6A6A2b9&z6Ah' χ?6A1x+2)"6AGNrZ6AL"ij6A#xW^WC6A4g:Qpf%6AA%.q6AF&?gG6Ap JІ6A\lޖ؄6AQX 6A1T`t5ւ6A'C`/"7A6ׄg4&7AP Z91%7AP$%7AV;DyAt%7A+Jg4&7A:nc?%7A_G)B#7A6ׄ/"7AT}D\$7A1Z91%7APXdg)6AیN!T6AZp6Aی˺>6Awudg)6A1skNpٴ6AZ{U6A_uNͫ6A=N!T6Aw3Bp6AیXJU8Ac! jm([8A3X8Ac! jHpW8AT?21ϸW8A\^JU8A-sƋ?PU8A"(:U8Am([8A:ŮhQ3X8Ac! jhEhm7A@V) rs7AcU* -.s7A26oMʼnp7AcU*>i^Pq7A>Ep7AL^{) rs7A1Iq-.s7A2qN6A9gLu7A #P6A}%k^Ϫ7ARVȤ'Dt7Aȫ1p7A #D7A4'D^7AXg7AGm7A]W ,Do7A3nKgLu7As#fC`?7A:OcZ7A9#G7AΎR­7Aܛ!7A͟Cv7F7Ag)M:7AB$L6Ai>3N-6A3SqN6AY߉Ú(7Atk]+7A^#dP6A}%H~jt6Ab.b!O6A@]o)J6Ab.bQuQ6Af8AF۷aF%+΄i8Aj<+f:w8AF۷aF8D>8AړO%+΄i8Aj<+`E)8Ae'88A hƒ78Aek 48AR|a{&X.8A*`!Gky*8A)`?E)8A9Qr+8AOa-8AAK^'88A%8]hƒ78Ae|S^f7AEdfuq8AbxNo8Asgݹbj8Aa8![軺h8A jh8ARh͊m8Afbdzċq8Aؽ54$t8A |u8A?%t8AJes8AL ~3u8A ^v8A'e#4>x8Ag>wx8AO^Ăxz8AhޔIAy8A4\>f +6A9w%m#6A]| %m#6Asny/6A9wPT6AM#{ f +6A Hރ6A XTP6AP9n6A,e 0Gz6A9$r6A]|flW6A@6APL![6Aet%m#6Asnypt6Ap&"z6A9_ m x6ApgJ\u6ACt6AX*YR\w6A9_|ύ*y6ACd=Ez6Az&"z6Alh`$x6A@} gݔw6A AÍy6AWm x6Ap`϶s 7AUWy r7Alix 5 7AUWyUL 7Ar϶s 7Af_E!NrM 7A&E3K 7 7Alixl0G7AO7.nsyL 7Au+ r7Afhw5 7AUWyh$7A<e}7A/B C:^7ARM[7A<e37AkJ§7A$7A:7A/B΍ 7ARpoWp7A6}7Ahi5C:^7ARM?#"5A@5o :F.$5AwO<1?#"5AwO<1/u5A=p)5A@zק#5AZ# :F.$5A9H#H#5AnS--#5A@5o!f!5A|wỲݺ 5AKp53!5A@#r)!5A䩑Ă# 5A@d.5Au yK5A@g!X5AC5A֮?#"5AwO<14.x47A\_fg=7AaZW0";7Ah`h!;97A\_fe[87A۞ 77A͡}p 57AS.afB̀77AΔҩDKk57AS`Q4.x47AmS<ߟ47A''57A`pmuݎ87AUD:7AaZW]Gi;7A q-n?G;7A mg=7A-Y%VcGz0;7A꣨0";7Ah`hX|Mm7A'T奘r7Ai|Mm7A'T奘Ecm7Ax8gk̥o7Ai\Aq7A(9(r7AJq7Adt4o7A!p|Mm7A'T奘hh6Abxp"z 6A B6AGh6A5; aM]p6A)2HW,p6AnԖ6A2"p"z 6AvBјJU6Abxʿ=6A_/AT6Ax1x%B6AGN7AIT%O!Kk_7AlPdCܭY7A.|Y7A*~AWtY7A?~Z7AA%I%C]7A>_ph_7Ax%oO!Kk_7AH^J]7AB (3\7A3xyrZ7AYfĻX7AIT%拦V7A#ĐFR7Ac%gN7AREN7AZ4&O7Ay9N>R7A^UX MظzV7A[z$iZX7AlPdCܭY7A.h89A ]=9A*N N;9Ays0:;9A Y-f 99AQ'89A4ЭE:9A*N|<9ATWgQ<9A粮S FVU=9A>]=9A )N;9Ays[*7AU(N17Aϲ|#07A017AB _ǭ.7AJV,b-7A1 r.7A8Z!j,7AU[*7A iz5i+7A`҅5N"+7AH+:ZZ-7AA3Y>!-7A#B `-7A҄152Z/7Ae 9/7Aϲ|(N17AX{ʘaI07A1Ia#07Ax857A0bS>"8Aoɮ g 8A3'3.8ANQek7A0bS'A7AS5+F857AV1D8ABbJhj8AZA9y8AW޲!-8Aoɮ>"8A߯y2[%8Az4]g 8A3h4*6A@?Ǡ <16A!Μ gg~6A!Μ[26AO6<16AgNZ6Ao1Y#ʍ6A8nh6A8?6A@?Ǡ 4*6A"3>SƋ6A@|gg~6A!Μxx?TE8A48NS8Aǐc S8A%Ң'CAS8A48N>lP8AS?MMRM8Aں>#N'YK8AP$J8AEj2F8A&3!x?TE8AǐcSN8A xvO8AIK"N8A'̯S8A%Ң'H7AhB~ vCL67ANB[AB:g7AhB~ 7A~0bܳ7A\)%u໴7ANB[vCL67AxrAB:g7AhB~ xί]0|8A%0{|R8Ayݶ =@*8A%0bv8Att~8A!JIJ8A= tMh|8A-ί]0|8A5$/~8Ayݶ.u΃8A%r{|R8A3mQ8A{f'V+8Avʭ=@*8A%0x'{7AW-6ކ7AYQ\ t w7AW-LV7A7{7A'1N⧿7Ao7Ar'{7AvcB7AF tY!7AYQ\S 7Aiʽ\I7A%+6ކ7Ab>t w7AW-`Y >7Af"3TMDC7A Ro Y >7Ac=Sy@7AH,3B7ARtTMDC7A RoZ_ B7A5VQ4߮jA7AG8$%i_w@7Af"3?>7A= Y >7Ac=X,|7Aq"'7Ab~7Aq",|7A*jSO~7AL|}7A3*`cQw}7A~9t~7Ab'7Av# ^~7Aq"X&(]8AK 8b8AGIG.1]8AK&(]8AQe?_8A.T-a8AGIkb8AyCj 8b8ApɆ.\*a8A=XG.1]8AK`Ʉ 7A=(8a7A 8a7A=(V_O7A;DG 7A;!Ʉ 7A,S 7Aį8 7AO7AnAt7A})8a7A=(xm7A(I5*@ xL7A m7AS)NYl"7AӥC7A!#8^7Aql:m7APb˘6&7A1*@ xL7Ag޹i)7A$&4t7A(I5s1ǀ7A] ~wE>7AHum7AS)h鿀f8A8!ݑ/l8At Uej8A8!U3j@h8Az]K鿀f8A?>g8Ata(i8A j8A> 4l8A,Hݑ/l8Are{Xk8A- Uej8A8!F%'5A@ج I5A}I/%%H5A@;5ABdv<5A@_%a=5A[qvk:5AflLvPڻ75A@0H5Y85AԜl}A45AH))ϳI55A@ 45AzKQ"i/5A@ OVKEe-5A/|Q5U*5A@okƶ=h)5A@S**'5A@c%F%'5A1pP"(5Adq+5A@Gp+5A #9@ȉ-5A}IFȤ.5APl/5A`A15AW025Ak2M25A 135AԻ#i t55A@}Ir55A)?1+lL.85Az t>v_s95ALsS;5AMo7A- Cn7AH{1Huhm7Ao7AЊCn7AH{16y56Aos*#H;6A LJ^:6AEW'<86AoÄ3*66AnyM66A K66A@seD&%56Aٚw$6y56A;V 76A<~G86A@p*if96A@-V:6AcZs*#H;6ANpLJ^:6AE@2s28A5o+EMQG8AQ%<LQ88AQ$Z=8Abi=]=8A5ԥ. >8Av)P?8Acƨ_iS[@8A>M2?8A6/ג#8D8A⏫GF8AwEMQG8A֙E8AۭQBB7F8A iPokE8At)ɟ6-4F8AIzt qC#^E8A5o+g[*%D8A[nePSC8AoP UC8AC#uYebA8A;A8AoJµ$D8A%@c.O;C8A4Waq B8A+ EӸ;8ATلL:8A$ N,}[98A2I98AKԕ1D:8A`qIHB68Ac֕52s28AtMB28Ajv958A6+3A88A?y/ 43Qm :8AmV(A:8A!F0m88A.㺟<LQ88AQXrWYe6A`Ǟ=dl6A`Cej6A`ǞrWYe6A@yMf6Aaaͳhtg6A@(1,]h6A`lQ^l6A@e`G=dl6A@o*ZC^Cej6A`ǞS&9A ԋ0~89Ah8Z&9AS&9AeS$'9ALp0C@F)9A$Vh+Ɲ+9A5~-9AK'=.9Ah29Aik]_ 69A`·,_b79A>x,F^89ARӖ0~89AUF[77b89Aw)ԤDV59A Iz}39A6:]Wak09A ԋf/9A9 i&il -9A/ق)9A&ִ;>B'9Apfǽ8Z&9AH's 6A@^T=#؏ʩ6A؏ʩ6A@^T=#'s 6A ;B6A$j6AS4=Vȩ6A,cL ؏ʩ6A@^T=#@s]l6ASGYwNX6AWtOc6ASGYs]l6A@ڗJu|36AWtwNX6AWL%Oc6ASGYpdzi5A`v5A@aB# j;j5A@aB#3m5Aa7ZpXq5A@Jlv5A`pI@3s5As6q5A@2gg_~n5A@O~mϥ^l5Als j5A@EUdzi5A<Dj;j5A@aB#h)A8AcwɄG8ALos wɄG8AF_GF8A O-D0HF8Ac^ NhD8A+H71: C8A%D#1YA8AWgж)A8ArkpA8ALosD8A:6wɄG8AFX6AchnYTn6A?9Tn6AchnY^x6AJþ6A]:!6A?9V/"6A_C8 S6A&()aa<6A[Tn6AchnY`̏ '5A}6+5AvTo~ z*5A/#ل))5A^Wt`8'5A ̏ '5A10 go(5AvTo~?8)5AՅ=gPa)z)5A˥}6+5A2z*5A` 6A5HL6A  J6A5>6A$>f6A@.Ý 6AǞ6A [G6Aʭck6AHL6A(J6A5`}`7AJU\ڊSf7A! Ue7AJUP)d7AT{ivba7A4e}`7A2GCa7Aߧp/9g3.c7AQi)!KLe7A!\ڊSf7A9p Ue7AJUX075A*;<5A@\JZT;5A*075A@[X85A@\Th95A@"nn tξl;5Az͠qG<:5AVΕ;<5AJZT;5A*0PDQ7A%Jb )]7APV7A%Jb]fU7A$ mS7AU>½S7A6xB0PDQ7A &^u_+R7AA0rsS7AW1sXGU7A"E?suU7A=F%W7AeTCaY7APDye\7A~4 )]7A ٮu]7Awn=#n\7Ax۫,Z7AIJ*YY7AA9V7A%JbP87AS*>Gwm7A&:V( [oNA]7AS7AӇw87Aގ70&7A<W7A&:V( *>Gwm7Aw%[oNA]7AS-,e87AUGNWoG7AR, .C7Aw#=z:C7Adc+B7An |9 B7AUGN9)A7Acm0Xw@7AH8k=7Ap=7Ak\NO;7AUľi;7A-,e87Aݶ6A(2u6Aeg6A[fEfX̲6AwE6A}$6AD$6AU?i`kF6A/ӄ'?~6A\lr/h|6AKX/r"2UP6AO_Ot*j6AlvЭ6AT:1`/6AYE,1Lj6A@q-66A@<"w( t6Aq&hT6A@+Xj#6AAo6AnM^k)p6A@_zV6A{ePKZ6A\C{ŷ6A@㫒k6֦6A X$aܹ6A B H6A@r @Z6AR3Țl6A@EN /6A-xFCh6A|Z҄6A@ߦc3h6A!uVv΀6A@pq>jܵ6Aƻ?T6A"vb+ױ6A@\֡k3-6A zaLMp6AU$ 6A'(ZUYZ6A*& :t˯6A@LXG96A`^BC6A+߀M/ٳ6Aa,`b76Aƍ6Af HeI6A@ih6A.BH愯6A[xeK厮6A>8[5y6A2"\/SmV6AU{8;N6AYp=6Ar'"<6A@.\tӽ6A >^gXi6A!keOhcP6AG9:@6A@[&6AT'p/[6A9;N{cOo6A<A6Ay 녁}X^6A^z>ω6A>j ^;S6A<M[U6Azgg6Ak4v~v6A@owy.{6AW``j҈6A$ %ڤ6A>Jk W6AܧYR6AU=Q6A@} r2X6Ah6A@VX>6A~ T6A@t^6AQ1^؇҆6A4)A\j-6AMTu>s6A7N[Y6Ai}6A t{e6ATkli~Ǝ6A@EЄC}6A-jKd }6A.z` ~6Aݕ d7V6A@FPD66A%;a 6Au̔d6Avv6AF_}Gq6AlR!L6AW-mK+6ApmkfYv6A@kBv㣇6A@lno6A@\Mqt6A2IAs6A+dG[ܻ|u6A{D9Y]cBu6AvpkEv6AS x6A_BkH1u6Au6A̪u6A_"HYss6A@ef' cp6A@? {cOo6A#ѯo6AR3GBr6AX5qwr6A@ALwXI1I\&g8A|MY: Qi8ARX~k@k8AҠHpj8A3^̬H;]–e8A΢ƨS`8ASSX]8Am`sFsV8AxCÒĘQ8A( fAh`Q8A37_mT8Ao6U8Au/W8AL&dEW8A rnjWZ8A\p{\8ASŝNzٷ]8AtBG{^8AN8)l\8AD.b[8A=A\*]8A]uPà 8A G8Ax8A Gà 8A|(;8ALRAIU8A$&)8AxBmE8A-v8A GPc7AfLbzi7A,пh7AfLc7A@76f2d7A*e7Abc! 8g7AUbzi7Ate~2(,пh7AfLH=;)Qҵ7A@4}~,5ݹ7ARl7A@4}~,k+k7A+=;)Qҵ7A׵o&OX7A5ݹ7A#VaHRl7A@4}~,x*5A@@*kp)5AB2_DY)55Aw2q@\,$5A@=t M5A@h+Uq 5AӰ;PU]7A9h)'Q?Eb7AX- b7Azs2 j/_7A9h)_7]7AkU]7AX- сFa7A9C'Q?Eb7A)b7Azs2 `&ZY6AQ`l^6Aq|2H 0Q!6AQ`N6AB}Y&ZY6A UY6A@l[6Aq|2Hl^6A;jwd76Aw&8A6A!Qv0Q!6AQ`M]v5Aߙ  25A@*cT75A@*c>;FG5A_-z 25A@ p9Z'S5A@$#Y*5AޓqD<5Aߙ ra5A^]M]v5AXgT-&z5A@ۭC5AŧX5AѴs5A@a/c 5AK5A/fwynp5ASIoL5AfˏtT75A@*c0V_6Adf86A)TI #q6A \D]6Ad6AE#b2>6A~.K"pF6A>!O%!6A@ҰQL,6A5sR4?6A7»d>~6A@V_6A{~7lSQXp6A;>!6Ai6AIp@S6ADz6A̿d`"6A <.c;6Ae06A@ &V:B}6A@0J[6A@ggX RX6Aɳu6A@=1Ky6A{/k$6A)TI &5J6At 8kh6A^P|I֊Q6A4 ~ie=6A4f6A@^g9Z6A@mvf86A@˶̆G!8Aq=d8ALkX DS7At@qX7A OxeW7At@Ԕ$3:A怐杨 :Axd9An{BSV,^9A{R$c9AAҾe)G3 9A$- c9A1ǵՁu9A uo9AkÙs9A+99Agوs9AfIf 0k9AX1N9A+g 9AD:u#9AN;}-֎b9A[(u^rYs9ACXGL9AK8H9A4^ 9A2EC9AL fQ^d9A_n;@jҷ9A6eDy09Aj\&Œ9Anfe9A9h95-س9AgFJ9AX iA9A9=k&Y9A<ŝmUm9A*;fV9AUOg9A$ D#S'_9AhwH~ܰ9AhQ,iXz9Ah`n"9AC"9AO<ݣ9ATY 9AZN'p9AzOS+9Am RF9AP %Y"K9AqXu29AD-WG 9AN}9A<޻(9Ap5U'19A 9CQ#$9A:L@c[9A|1VSP9ALPz}9AQ]-)y9ATnP9A<)9A5bd9AHś&|9A llc"9A6]v 9Amh29A`Q(J7 9APQ*u-9ApXu2hx_9A.N B"K9ApIs \:A Ԫp:ALM?z7AYɹ47AF z7AYɹ?z7A)J{*z7AW}Ei5z7A+fT|7ANԒN{7A#D9{N}7AcPYa{7Ak4 z7AYɹP?:5A 5A!1 UwAHG5A!1 US}5A@ۋbъ5ADkg 5A@#| 5A ?:5A@>ywAHG5A!1 UPPw6A@!O8^7A b˳2I<7A@!O`m7AbOPw6Aut37A b˳7' 7A^8^7A2I<7A@!Ohٰ$i7Aijdzm7Ai9 ߟ-k7Aijdiǹj7A}&;"Pk7A^ع§j7AO.ٰ$i7A0kNz9ki7Ai9Ul7AiO\vm7A w (wzm7Afߟ-k7Aijd<57Ajɞ枙7AG~7A%Q7AB ིf7Ad,Ra)7Aqd \7A7+267A>^{E7A% mH7Aϑ* 枙7A||O+pIv7A`+Ɍw÷7AYVL7Ajɞa:=7Ay7A6os7Aڇ4b7As$Lbڳ.7A\NxPu7AfnE7A /3E7AfnaD7Atpu7AazGTH7AN4?7A /3 RwB7A!fE7AfnH_wd7A~77A׺m67A~7a{7AL6߰x_wd7AaKqIP7A׺7A7m67A~7H؆8A6Fchc?8A4}w!؆8A1 |(C*8A4}w!hc?8ApˊDmFw8A6Fc"W"8A<T؆8A1 |(P QASt8A K|Bu8AOR]_t8A K QASt8AK pnt8A GzD}t8AORCtu8A_]|Bu8AruP]_t8A K (ﷵ5A2Dž5AUxӿ5A2`2ֶ5Arh =~5A@ݛxju5A@/5Ȧ5A*Zz (ﷵ5ApL@[ϓ95A:g Nk'5AU`5A{Z >5Aݒ m5Ap5A5ԸCO˾5ABJ``W5A#|T㻗5AH0Dž5A?xӿ5A20PN7A|~ k\7A_LM|^O7Al0PN7A/F &N7AmnuO7A_LM@P7AS@xAQn,Q7AYMqR7AmI~V7AYגUDZ7A' k\7A@$9lO\7A|~q=-V7Alɇ`Q7AVOY|^O7Al@J. 16A\o~Ӟ%@6Awߪ\%A"F=6AJ6f\ =6Au4wZ@6A`Qa(US*?6As#/nQ>6A/x)Ӟ%@6Ae}:>6AEK?mj\<6A\o~<6A@7(x&<6AdRdc:6ALvIk:6Ao,:WD<6A@x670;6A@]sAYu:6A@jYz86A@_g|85p76A||r76Aj. M946Ao=W$w46A@ޑkRL26A#~QZL16AJ. 16A@;@FI036AP;KJ26A@_V̌fSC226A!.]gKt46Awߪ\䣃|56A@ )76A\eW$96A4?\p:6A9U;6Ab Ӻc=6A@8Ӝɞ>6A@9[p>XP>6A@{}j=6A-[YLA"F=6AJ6fxCo6A4'c 7AWTV 7A4Xw7Aݓ3dc7AHpCo6Ad)j7AWTV%$F7ACw_ 7A@b3`_7A~skܝ7A@X'c 7AՒOJA7A69h7A4hl3r6Ag%Xڰ6ACn 9q~6An;v6Ag%V*N6AW/l3r6A@{ H6A@@ U6AsjLz<ɡS6ACnXڰ6AY+){ۜ6A>z9q~6Anh%"ah6AT}Z]66AA4 Z]66AUZ6AT}q_6Ao%"ah6A@K2+%6A~՘S=6AA4e-y6Ag%Q6A@8F#3^j6A@ݹvZ]66AI'7A@K-hRh6AUI HT8AG8AڌD5/߱8AoOI8AVT8A7ջRex8AڌD5G8AHBV/߱8A H0\1+8A\ fD:08A<u,8A\ f0\1+8Ao\(mS#q/8AqR'c5Ao5AzZO5AiK-+5A5A@U"ņ5AMhJ zq5AТeZP5AcxL5ALhs"h5A,,u{-5Av}gqNĄ5ABqĒo5A L#5A@|2Yˇ5Afot85AVKO5A6>qHD]6AƾAq\#6A \q6A \q\#6AV5A|;}<5A b+cL=5A/ a>5A.8e2<>5A@ƨ69S1@5A@֒ }f?5AM7HS7A:6!V7AQ9)=Aj;V7A:S7A@1 VT7AQ9)˽CQV7A_U6!V7A =Aj;V7A:XUE 7Aws9u^n7A]$MaH7A .FB7Awsb,7A@UE 7A uR|*7A]$MD7A-[ 9u^n7AUpp-aH7A xSAJ6A@JI&;Kv16Aw<( h6A@JI& h2B6Arq~|36A &c3M6A@jx6A@DTKSAJ6A@SZ%9dvQ6Aw<(6A@b7@g6A@D?|;Kv16Ag48-xBi6AƢh6A@JI&h[!(8AZSGQ 8A]`n X:8AZS;e 8AӢE?[!(8A/3_8~8AA\8A"J 8A]`nGQ 8ASK 8Aۿ=! 8AxhX:8AZSP%k{7Ax ߧ7A<>,N 7Av"V%k{7Axmдt7A\F*"5J7A<>, ߧ7ATnӳsJ7A` !N 7Av"VP:q28AJv:2288A1x G y58As_YJ3o38AJv::q28A_%)u38Aw.78A1x 2288A~(G y58As_YJ3` |& 6A@N]J6A5C 6A@NUR6A@=̊|6A@:7U |& 6A@ 3 6A@ քA6A5C%ACG6AǙ]J6A@) 6A@NHx¢Mz7AiӾf|7A+HMQ0~7A+HM|7A@㔙9z7AiӾfx¢Mz7A@jwe|7A..pQ0~7A+HM`ySN8A O %R8A7p ?R8AtcgbO8A ySN8A9?c?P8AmO{P8A'?hP8A7p4TmܳQ8A؈O %R8A\UfS?R8Atc hOb7A`Ujf7A@F)A jf7A,#k*f7AX463f7A|u,f~e7Ad7A`Uhp1d7AFesB}b7Ai-gNOb7A@F)A"e7A@U jf7A,!]ڭ@8A7 K.I8A&6˥E8A7 Ki[C8ATWƮB8A5]ڭ@8Aiw5@8Ao.{S ?B8AxuL |1A8AoaavMRyB8A&6"D8A?믅:F8ASlhSH8ATrH.I8Aw=8ַBG8AEh&pF8A>˥E8A7 K"HC6Am ;% ajJ[H6AunajJ[H6Am ;% !F6AT "vD6Ae=C6ADY&kD6AunajJ[H6Am ;% #@nV7A0W7A L}y-V7A L,W7A~?mW7A0nV7ADyu}y-V7A L$H}'7A^ςV7AZ;TyV7A^ς}'7Ak!" >7ALӚ=|7AZ;Ty 7Aˠ"V7A^ς%뗜W7A'#{G@sm7A@9i}7AUz&O^|7A _?77A5d97A'#{@WeC7AĜ gjj,7A^lIm7A^M7%27Ax7AH{ك7A@9i9ԅ7A[jd+7A,}z7A˪Ӄ7A@nʊN7A@;d7A";'7A[ce7AqG@sm7AJFք$6@7A9A7AW ]7A@g}7AUz&& Pb3,7A7( 27Ai'cȢ/7A7?;^߼.7A^L"38Z.7AW 胢,7A@z Pb3,7Ap8ꭗ-7Aj_^ 6.7A@H r,,7A8@2p .7Ai'N/7A7܈;=L17A@T!x5( 27AXG AS17AbW,}17A@n[cȢ/7A7'`CxOn8Aʝu´Vr8A2 zp8Aʝu+o8AdCxOn8AR6Ϻp8A9gL-r8A2´Vr8APnr8A^)|/k}p8Ą9zp8Aʝu(x0~m5Aq#5A$ A5A1w,Ud5A$"sCE5A@^pT@4M5An.5A*`Z *5A+;"5A:xbxe5Aq#?5ASjp~I5AS0~m5A]c9A5A1w,)@ٯ8ASFM8A/V~8ASٯ8A/Rн8A/FM8AeV~8AS*`ܨL77AvE: JQ<7Acp; :sj$<7A@/҃_) <7AvE: Ѧ:7AaĈ}ܨL77A[\gm77Acp;.d97A=/N8{]>:7A@"QJQ<7A K!O:sj$<7A@/҃+pOV8A"[; 8A)nW td8A"n.p 8Aݨ58AfOmOV8A>fL9"0& 8A)nWh8AMr/Z(E8Af K8A`C~N8A&v[; 8Atd8A",X¸)5A P2C5AP2©ͬ5A ¸)5AH8w#5A1F4$L5ANccYr5AP2ڲ5AT HP2C5AX©ͬ5A -h (}w7AnΈ,u@K|7A:.a ѝi.y7AnΈ,|!x7A?8^y7A_{ (}w7A6* lx7A:.a^{7A r6Zu@K|7A.];|7A Sz7A߷-ѝi.y7AnΈ,.pq(Mb6A% c z1"h6AvM .d6A% c q(Mb6A:7 L_c6AT}xxe6A.pMN-|md6A@5d6AvMAn{f6A^Ze%g6Az1"h6AD;Hg6A@XN.d6A% c /K ֚6AYM6A*T_ ^<ڜ6AY# 6A~K ֚6A@0ivԣ6AB\nE6A[\A16A@0=qI6A E;i+Ξ86A|wH6A*T_M6A@i)6Aovֵ4]/@6Ab^<ڜ6AY0p7xR7A@LP xJi7A@x+ 'T7A2t-៶]S7Az13NU7A1塠SU7A@}U7AӀ+XL ZV7A\"vV7Al6Q?X7A@x=ezY7A@FsqY7A@̽#T7MY7Atē=^Z7AKĩ$kX7A@ȅi אSxX7AV8+.79Y7A JS}\7ATDZoض[7A@# |\7A@ m[7A%Ɔ]7A@M&ѭ6b7A@N5(JAad7A )>zRPf7A#Eh7A#EP xJi7AS 㐞Ah7A@Lwe7A?뉔d7A3Xlpd7A92#K7a7AwN_7Aۘjn%f]7A@"b`]7A@U֏L<չ[7AqIE;'X7A@=S?U7A@/U/U7A#R7A7xR7AJz PS7A@W}jhvzwU7A@,]rb:/{U7AC#V 'T7A2t-1H 57A~\)pe57Aqe@ 7A~\)p 57A?Oxs7Aqe@ >٨7A68,Fe57A@ݫW 7A~\)p2hZx17Ar4bH57Ak 6d57A_9~T57AGrJӡ37Ar4b/Q27AZx17A~֗Ra/27A@ce\37AQ ޭ47AkH57A@YF6d57A3`}6B7Aɏq,NKWn7A u7AХnT7AKYCL7AͰyC7Aɏq,}6B7AnS$7Ahrİ6_m7ANKWn7A*:u7AХn4PȈ"6A{6AVV[%6A:bӠ6AȈ"6AX yd6A|w+{6AVV{6A*1[%6A:bӠ5 VP$8A06s oյ/8Aޝ VP$8Aޝ0*~*8Am[C+8A4b ,8APbJ=l.8AB=roյ/8A:)4.8A06s xȂ,8Aڲ+08B,8Ad+8APP0Q*8AErx9XU)8A\͔Jîw*8A-/~痴*8ASaL(8A ӹ5R$8A VP$8Aޝ6XV6AJQr6'6A E&}6AJQrD6A@7+S6AU`V6A@'?; 6A|'\6A E&6'6AAjBi[}6AJQr7O^!!7A. 67Amp9T-"7Amp9m S%7A@L2^Kc1'7Aq]UZ\o)7AKD\fd,7AZK#1VbO-7AM/Ng p07A|)ٚ37A@u!TN,67A] 67AD G67A}S$37A@bnE27A"P9,27A|^dE07A&%kOs/7A.FO27AKm_4q17ABUrw/7A._q/.7AO! {}6+7A= o2?%a)7AML޻X!7A@GyO^!!7A@Nx2ݞZ#7A@r~؜t01$7A@a'8gw"7A@_GOT-"7Amp98D6A\i(6AzѹU Too6A\ί O6AʬL{6A;  BOA6A*cD6A@4{6[[6A@$j#T?֫6AR2]hl?6AzѹUM6Av w+6AFBpnWc%6A@b&i(6A@U2!Too6A\9DŽ[7A0Sg7AۏWg\{7A@L|LI\7A0y ܲr*p7ADŽ[7A@={Đ7A@,nwCȥ7A/ n$7AۏW7A@(jw7`7A@)I*O cu[7A~w⺌7A@rq0wg7A #kj7A@JW 7A@=7A0ScN7AQg\{7A@L|: ju$c5AP&Et5A@!MSgBp5A@ܞ۝n5A@a ✗~j5A9ȋ ej5APl5A%8 *qk5AP& ZRh5ADv茓[g5A,HOnf5A=3c5Aa96ju$c5ATU yQid5A@:BO_me5A@sg5A2B:<=dj5A%ݡ< 1l5AdM AM4l5AS:]i5A@#q0 ^i5A@UmW;j5AZ &l5A3 zDcJXm5A8-4xl5AU`U~yB9pm5A@*.Z*yo5Ads[hp5AKtq5A@Zd i@t5AYx}Et5A6_F0?s5A<^ʫs5A'w&Rs5A(1SMSgBp5A@ܞ; |(=i9AP=]99A6e!/HV^t@jҷ9A6efQ^d9A_n;EC9AL jWO9AB"ďe]9A9lu9AӚmɪ9A4qRX9A?z=k9Al 9Ah廯޾}B9Asp] 9A<-_2M 9AÜ9%S9AX99A+ GE$a9A6Tӊ9A)teh}9A͸xf%9A!<,m9AW>9A?ز絘W9AT/dK~Փ9A;-+Hk9A׃X9A6WǮY9AdʌkKɛ9A\>ĎGw59A|Ν1u *9A\^ ˶9Av 8pX9AqIh=]89Ay=G~׺9AJT?!9Ay6>h 9ACF4lF9ABZB2 9A3~PB9A90v9A)]9AO՚9A OD*KA9Aq}~)^9ARmH9AkG9Ax$K9A-gA9A]-ߒܜ9A3pMu9~9Aȸmvȝ9A 0aQM9A JٕU9A e9AhGevڠ9Ab9A%PwD>#{9A-2 R_9Aw#ʞҘ9AC )}9A~2zNA}9A;AfNЂ9AZ .Ch9AQb؊9A@UD49Aw);s9A*P 9AtiU9A@[Yvj9A@ |Sz8#9Autw9Awk9A;]3,^l.9A@c-S}B9A@PA9Ab9tj8 9A zV*9A:19At+@k9A@ca0*B!}9Ac^yq{9Ajx9A@i"GyFfAm9AUo\ S]k9AP=]MXj9AN9(=i9A |?Pj9Aq{H߇mTl9AT8*%o9A@lZʶ ]r9A@\xu9ASJ>Ҷw9A@;{c'Sz9ACm73詢z9AC4 %p|9A!jZĘ1z9Ai;eBKz9A'mώ|9AK^o|~9ABku%\@~9A@(lZ$z9A,jN*;/Yz9A@N/>x?h_y9AMzm&swx9AyrcpXx9A^mw9A@cIH=H;x9AkQx9APG&}by9A@ԉ&wv9A*kh$[u9Ag&kw9A@q9i#Ou9As9ACy%Z r9A@vVx_fq9A@?W.Iqp9A@QBYoq9A@|E@ q9A@ YʈIq9A2qLOp9ADp{q9A@[8>^==t9AL!~aw9A&s8²Jv9AUhx9A@&Q1E|9AɹSt4~9AUۄ~9A@v 2vM9AJšS<.>T!9A@wD绕9Av!19AO?8 c-v9APd9ABSm/+1ő9Aل !O9AW:O19Ao*9A(_9Aezę9A[S +9AR[19Ac6j9AՁk9A}cF m9AlG9AcރQ5X܏9A9 Nҏ9AL}Iʐ9AIn?q9A|*6^iP9AςrU8k9A9@jҷ9A6es09A&Tʈܶ9A?U?t9AIxh]$9AxI+4:zA9Ass~9 9AɁnclխ9Aypӆ9A,;%/59A 8Գs09A&Tʈ}Ck 9A<5ϕ9AudP뺹9A@i2>޴9A?QP?9A֠0^|>9Aڋ9AC $3Ƭ9A4/U1ek9AZ9A-)9AKx 5W9Aggp9AF~VV49APrJ嵮9A0؁X@zh,9Az~5 Y9Aҫ9A pDS]9A +,j9A k 6o ;\9A+!IJ9AuN}vi9A l@J9AĦ8[Ҿ9A2-p#,j9A k 6ltk9A%e<9AGSz۵9A(u)5_p9Aovƕ9A0\9Ajw/rf{9Aax,|9A?~MVGԲ9A~,j=xRx9Ad?v9ArME9Ab M9A=}9AI1=9Afps7x9A2[9AȺY*9A^39Ao/*%5'9AԨΤA9A#k(9A1Ұc9A)~ê{Ki9Az27ݱ39A 5\9A-OG-9AVq}x䷧ɇ9ADbQR9A~~Jof9A@Do5Gƒ9A[TaHv9A@{?]Uy9A'v=㮺y9A@6#I͍x9A8+#x9AKĸ'޻v9A@門lt9A$(T,r9AL+Gr9Ak%G4t9A@ qaHv9A@{?~9A)*D;/R}9A`,`s~9A@)Cd~9An`Gbr~9A >x(9AÜHk\E9A S49A_L~\K#9A-2OLU9Aarm(9Am"iy9AuJ@e9Am r9AK xA|6~9A@('9}9A Xm<>}9Aty~9A)*DnJ/{9Abl%B(uz9AWɺ{9A7hKŋ|9A@TCn'W"%}9AGWnJ/{9Abl%B8mL9AhguC풖9ARmcXPY9Ae?!9Al\\F9A@PّV9A@HӜt9AR8mL9AhguC9A@imä>y 9A ˒i9A )w&{0Q9ARCK9A \+M~9AU'/Vy|9A/=L}9A@Ś.9A@imä<H:;7AP’rߏ7A@.Iש7AP’CDe7Aot7:;7A@To7A@.Irߏ7A:iש7AP’=@8j8AbK0$8AL̆4$YՊ8Ab8j8Aw2O~8AL̆4K0$8A;$YՊ8Ab>Xyd8AM~y8AVT 8Aj|7~8A `wyd8AwUDs`Be8Al ru8A!ꡒV.\A)8AVM~y8A60T 8A?pUp07H6AiF hL6AK  L6AiFK~6I6A.yy'dw|I6AFIUp07H6A?oO_I6AK#(J6A|$@*J6A@6茕L6A'"o/9]}K6AN_ hL6A6iO L6AiF@´t7A =/tP7A`>Fy7A)fL֯w7A#y7A@Xo}Liz7A@?D^Tx7AIݾ3Gt7A(*_W1z2$r7Aw0Zn7AZGm7AW#=XӎQl7AVr]k#j7A<H@Hij7A>ͪl7A9j7An<=/G2j7AniV%aHIj7AQa:Wyg7Ai_֔g7AֻtuCXN7A1L2'7A@ozL2'7A@vb$#IAы7A@M!Ņ `7A1Qm7A@Ǽ1N7A}}6y/7A@oz"eT7ADnL2'7A@vb$#D^K6A]qY9i6A|:>Eh6AVdrc6AV5RW`p^6ASyc?Z6AHgA sX6A@e3G MT6A@eco\#N6AM'ދN6Ab"$N6AFK;(`6A [[a6Alje%{e{`6ARf;}`6Aua72_6An[|֮ _6A]ے]6A| nh]6A,igx]6A~0 +Oz_6A[a2vr]6Ay[6A@*dBRY6A@fzg,92s3W6A@bZS6A`{qO6AhXrћ{K6AdZ^K6A8DT1M6A@7f7de$N6A@=z-M6A@6>L6AJM6AĦZ܏R6A#q+ǪS6A@GZZp8cU6AZFy-Y6Aś?UK[6AW ~_6A@bca,b6AV>c:g6Ar洦a_`.d6A@t&}qC6b6A|C#e6A h4lzh6ASR-qY9i6Aҕ"H?2lPi6A@h>Eh6AVdrEpc7A-0i7AAն " b7A@`.c7A8c!]`7AAD7AAնeU7A/-0i7A". f V[7A<7AL}N7A i*py7A (2" b7A@`.FXg᳭6A@:: 7 >6AlJrf )6A@:: ?Q6A@` @N6A5%g᳭6A1z#6AlJr7 >6A@EHN~Q~6AP f )6A@:: G`uJ<6A@eFA6A#nx |g^@6AN 8w?6A@uJ<6AИa/<6A4)tu>6A#nxk*뮠@6A,7xeFA6AHb@6AHܤ|g^@6AN H`C}9AzڑC&9Aw' v3F9A[Y29Azڑ$49A{JgC}9Ap0-9Aw'k2v9A@= _Xӓ9A3olC&9A z#v3F9A[IP$D6ANs\+JG6A@2By=[E6ANs$D6ADG,F6A@2BycG6A@#\+JG6A@?$. TG6A䍢Q=[E6ANsJwN8A6ч?N W8A սo%O8A6чwN8A/tTpP8AVOO8AS@R8A= R8A^?R8Arh-_x T8Au#2ST8A0k:,?mW8A ս?N W8AlՏU8Aճ>R2V8A2'T8A_33R8A\/r+o%O8A6чKkƃǙ6A򼥫W^-6Ac*徱#f 6A򼥫hS 6A@* Tu,c 6Ah{cH6A@ouf0b:6A>a6Ugu6A@4w6A@kƃǙ6AG\R=p6A}p0Yhi6A\ v6A 6v;X6Asr;rW: 6A@C]PUz 6A@Y9 6Ac*徱2 6A@> 6A,À` 6A-M 6AjyPX, 6A0^ 6AW^-6A@*m`ڠ#f 6A򼥫LP[77A@rVB*<7Ag,9*<7AR(Yco77A@rVB[77A~07{97AwvS:7Ag,9%u#;7A@X{*<7AR(MH;i<8A~Dp6kB8AjO*Y=@8A~<8ABC\c;i<8AwAzgy?8A mGdCDp6kB8AjO*Y=@8A~N-D6A2v6AA8( Ku_i,6ACNT4˘6A2v-D6AO ?k6A"=}pE6AT!>DY6A96A@YLLoe 6AA8(6A@R-ƛL[6AP9U\E6Am`1la6A@ dKu_i,6ACNO@$8AL*8Aɫ-*8AML 0`&'8AL$8A遲*8Aɫ-*8AMLPQV7A5Q7AfGdQV7Aʂ \7AfGdW$7AZUɧʿ7A@b'e7A@\~ 7AE"i7AW:!~7A)Ns=7A]1=ݵ7A˪`~7AӘ75{7A5QpZ=7A@[Ɉkg7A{?D7A륗yuձ7AnҸhw^?7Alz/zE7A@8QV7AʂQP̢p5AT{C x5A@7p6 x5A!v~'u5AT{Cmdq5AF2̢p5AV0{(bq5A@2w|os5A@7p6 x5A!RX&ÔwƲ7AjS؍7AӫKҳC8]7A@O)p3W7AGu^ l7AjS۲7A@ 57AmF@|~7Ac5o~7A@Ů}7AHsRO~7AO>;D7A-^,57AmF@TX-?7AzlFSB7A/%~.i@7Azl-?7Aydi?7A'pW¥@7A8"fKɅI:A7AU+FSB7A/%OZB7A@^~.i@7AzlUmP'h6AX);olC6A6H|bhmv3h6A!uV҄6A@ߦcP4*6AC[6A@?cBS딨6A*&W8u6A@Q\Rc _A6A@ y6A>D 9 6AqgU6hԠp6AnBBK>eh6Ai$-6A6:R(> 6Ak|(&F6AcD6A[rWG6A>ι6A>׶ѹ6A@dO6WX6AoCq>(e6A@xD%ش6Au-e ;olC6A@ZD mtӾ6AQzد;6AïLek#6AX),G06AęE.p6A@ xיX.6A@oj 6A͛HTQ=6AcGjC)6A@d+V9'6ApYSX0}6A@''#J|D6A7%#O:6A@mxI y6A@\BdϨ6A ɡ#6AjI PZ6A@ĺ1/6A8}m&6A@=5Ff.?*6A;َpE6A9}lmP'h6A*ݐP8, _6AQ +cwe86Ap$q9u6A~Ԟ8:G/6A@++TH6A즦w cدѥ6AaCh+ۊ6AK0{6A )5󗌤6A@d=:S*6A塘M W 6A@He]"6A@}%_g6A4+6A@zFh6AHzPz@6A@ƒM؋޸6A<}6A,pqD¬U6A4&6AQ]6A@:⫰͔R6A^f6A z/Ibo6A@?5!6AU5ޖ6A: s冸6A@y;:=6A6 <г6A?[r06A@93F1֑Ӵ6A.[v%uӴ6A\HRkp3T6A@G;86A t-Gͳ6A@`c`)6A@X&DɸK6An"oӮ߱6A^ِB46A@Ukv$d>iC"6Avcɻ 6A6Hj&Y6A> C[o6Aheo;NѶ6AԇwvԘ66Ah?w e6A¿w_ б6AC͕Y6A>cԁ6Ar6UB-6A׊=N6A@ Tؔ6A`<76A@˨ Dd6A/FD6A~wJܾ`;6A/cԁ6Ar6UiUƹ6A@_4l¹6ApZd}Cָ6ABl-nW&6ALeyw{YϷ6AٰqiUƹ6A@_VX͈nޙH7Ar9f |fK7A3swJ7Ar9fmr=H7A]~͈nޙH7A@ †zu17A9Knj7AHmn-7A@Q,BV7A[D7A@}U-GHY7Ap>zHg7A&~77A[qbR7AH$7A=޲l7AWZ 9x U7Ai;57A*2|瓚7A=PBDT֗7Aם7A@Zmu17A9YL9AGLi:A{Q_y^rYs9ACXG-֎b9A[(u*-9A_4xO9AS)]θO9A{Q_O9A!~&K)9A}Y9A{IaI@9Aҫ' 9A's-9A XaN:ARb# ?P :Aח1 u҅:Aή,Bk:AC,Š:Ada\:A)1G!:ApJ^&:AC̹W4:Aþt8:AId,f>:A v E:A؅=S8{G:A*IJ:A"E+L:A&NkM:AKT`P:ArkgMVfT:AgVg3SV:AD1#X:Ak{k_Z:A}Kmo c:A(a%O/e:Ak 0i:A@H+m:AvtZQ.o:Ad:3In:Ayͷ^`qp:A-ReErqr:ArLbly:A}B%.uJ{:A* *~~:AKZ9L6:A^a :AYG;W:A/GUcB:AZi:AY]ixN':A}j9i:A4i! :Al=Uf:AƇ:Aԡw:AOB:A֔/nHߩ\:Av0| 4:Ai9yp:AFRJK:AAhA:Ai~fN:A̓-poS:AI;I:A>i:A^>~4շ:A1mgr:A jyg$T):AxFԭ:A7r4U{W:A>|u{ :AԟCܒ:A!.Y=e:AGLuo:A<`M:AIxfrfv:ApG\#<:A|evB:A/̾dڍ:AA|'\":A^9PAl:Aހk~:A\,jjyu |݀:AǢA9~:A xCe|:A.'*{EJz:AzV^],+w:AA"U`#s:A4S [o:AmIпcn:A r Pm:AY_[ !m:A)vyNk:As `vEe:A~sek5Y:A4uW:Ave36DL:A(dqFUvE:As+-;C:AP8A:A;f|}$:::A!5:A\[2#nb-:AC- :A8/:A*{<:Al0$:A;EaTu4:A68e{:A#9-:Du :A0UZ>:|:A77bu:A(f 9A5=oW9A$cϑ0W?9A.JvV&9AbUOE%?9A-X'9A]<1T9A_IY|n9A rkL9A^rYs9ACXGZB H6AǪx&sA 6A@= 5B H6A@r ZS6AI!~O̽6A@= 9Mp6Ai8Xfa6A37B6A6p$6A\4Lq6AGq)}6A>B~Uv7O6A?Xz_6A9=9c6AG&=/c6A@t v)C4 6AE9}껛6AШ(TqU6A@IJqL6A,N[6A@gLQoZ6AsŃ&t06A@*ͩE6AT 6A@\_x 6Ai\16A?7n&sA 6AV**eH6Ae5l6AǪxrs6A4(R?6A׸S'ٞ6A٫.E6A :>]6A(q 3=6As}%.'6AQ6A(qY!|6A@WnWt6AW+^; q.6AH܈M8A(dlxN8Abe_hG,O8A4wuN8ACbe*B'P8AςQ'{Q8AiU#S8Aֈ2l[S8Aw/&Ĕ̟R8ABP \K5A@2i55A@@'?9N5A͗?q5ADd1DX5A-H.t$5AH .,5A@BIK5A@ -ZX5A@p^5A|]FR5A@@'z5Ab+,[z5AI}/T:5A@o815AazH5A@=Y!5A=Ӹ&5A-&9v5A@:^a\5Ani55AV<&=25Ap\l5A ,dn/L5A@`tK`*5A@kUM 5Aܽ^_A5Af,5A^uE5A $,fs5ATG4`W'_5AVڟJ<5A+PX\f:5A@ژK5AbsGx5A{v+̙5A@2ǐ5A.W֮;f5AsX@X5AD9t4oG5AM035A@݇e/5A@Zqh5AQ@ 5ApA-VD5Ay%$ q5A@H{;N 5A@_+0R}I5A@qh9:$>l5AMq(}5A T{T5A]ͤ./5A.by!5A@j#K5A/Wk!5AfB{Gj5A@ٓ]n(5AJ ?^cބ5A@j0KZN5A͗?s5AE'H#龨A5A&81X5AhydQ65Aƅ5j>)s5A\FDs5AE'H#]h.8Au<|v8Au( m- 8AaQ.8AA LqYb8Au('^ި8A HR|v8Aq8e&l8Ad 䰬8AuE8A-Pu[8AC 8AL+Krֱn8Any8AW`:R݈ |8A |8AmMQMd+68AyXV'8A&u×8AK :cp8AWå8AxaX_l5g6A*v#xWl6A@eZj6A@K~vk6A@exWl6A:_j6A@6Ezg6A*v#_l5g6AuV^ih6AYZj6A@Kbpk<'}t5A,+ Ȇ6'z5A@ۙ1+h ~y5A,+Sx5A@$8u5AMXk<'}t5Aؿv5A`@fw5A@ȣYoT/x5A@ۙ1+h! y5ACD<6zx5A6 Ȇ6'z5A@zr<&~y5A,+cn6Ae}c|6Ag|fo6Aen6AnZb䍛n6A'],(?o6AF kr6Au%fw6A ]/\Sx6Aߗeyz6AgPs3{6A 0}c|6An4{6A;5aw6Ac$Tߴv6A)W|}v6A@+mYt6AԔPr6A)/9Jʹp6A@wPV|fo6Aed%(\78A XWi@@8Ai5F..8A2U-\8A6AC_ՓGզ6A@'ՓGզ6A@Z6A S+K6AC_`Co6A.LW=ON>6A@;k~G:66A@'L{6AhB0ՓGզ6A@Zg`D&ٻ7AVl7A<1 $Z7AVl@j,7A2%g D&ٻ7A3 qT8A8Q|Z8A9e ~js8A]>%֕8A4Ve8A=Q8A7EǕ;’8Ac1koҝ8A]sqT8A8Q|lpQ 8A4tO *8AXi Q(8AXi *8A]>3p)8ALlb '8A)p.:*H%8A@^wMzS"8A4tOQ 8A&ҽv%$8A]Y''8A@E|+-lu'8A@؄Q(8AXimH>lĞ7AK'/8<,7A]J 30R7AK'>lĞ7A@u^pru7A]J/8<,7A@u3ƘUjY*7A䡓j 30R7AK'n`z67A`(}f7A eְ7Aus,@7A`(}2am_7A@%uz67Am>1]IG27A= 27Af7Ar}x9|b7A@^8@eְ7AusopH7AD\C7A@d HP7AdQ7A6T$V7AM|tY%7AD\H7A@R7\ػ7A@^]G7AI>!Z7A'=LT7A@dC7AgBHP7AdQpXwVq7A@IoSȌ7AԳC͋7A@Iok7AS*Jm 7A6A0IC47AzB%/wVq7AC҆ʂ7AԳSȌ7A@MWVC͋7A@Ioq`Ϣ6ALV q6A~{ ?e:6[6ALVϢ6AA Us6A@o#f6Aȃ ǚk56A~{ q6A"v Cˣ6AW?6A@tFf7?e:6[6ALVrpP7A4M@U7Ax ~R7AypQ7A$TXwDqjQ7A@W\#oHP7A@8GP7A*j,As Q7AUdU+ T7Ax4M@U7AZ cDS7A+.S@S7Ad~R7As@݀6A@aOVkc6A@懁E^;S6A<^z>ω6A>j X^6A#t-6A@Ƌ6AWGMon6AFr96A&ؑG>6AJb.(y6A@ELWT+6A%^[YԜ6A"n2/A76A?{Ss6A@mZJcfq6A1 6",.6A $%KQ6AK.@*Ә6A@9Qs`N6A [E6A8 g6A@$^Ӹ݀6A#)6A1|3%:؃6A` 7xDj6A@}& Sv6A@Aa!*Xs6A3HUhv76A 8܉ 6Aj9nÁk6Aet\rPƽ`6A^;S6A<t`s@h6Af|m6A k s@h6ATs kޕܟ+l6A k9vm6A2|m6AMNm6A rl6Af,k6AHz,kk6A8!s@h6ATs kuPoAޠ8As*,2tヤ8A$a>ԣ8As*8AFBt8A&xAoAޠ8AMjrE,8A$a>,2tヤ8ATꭱԣ8As*vP2Tܓ7A'yp7A@uVp7A'yX7A d7A^r2Tܓ7A6j=t7A@uV@Z"ї7AC*p7A'ywhD7AW {H7A\u l4^pH7AW D7A@KLTsE7A\z3%0G7A\u݌+KH7Ar{H7A@ON/8>G7A6Ƣ"]F#G7Ao4MS:H7A&l4^pH7AW x08A A2 7WhB8Av8?8A~.=8A A2<8A$exL);8AYL:8A.$ ):8A@5g1Q38AV.! E)]08AN08A[VNڜxY48Aej/Z88Aj*~e:8A@|'̕;8ASGT98A {98A@Q*ŽYw;8A@V7>8A%3GPiܻ>8A-$ԄF@8Av֕@A8A|S@8A@!]6CC@8A@VU 7WhB8A@| O@8A@J8?8A~.yXM.z6AWb3^^6A@pQv6A\+ESn6AWbM.z6Ad&[͞P6A@~!$O6A@p3^^6A@}6AI-Qv6A\+ESzsVq6A|86A@l[7VA~6A'B"fA}6A;@}6AF s\)|6AVǮJIz6AO@Cz6A农N{6A &y6A|+x6A- ߘx6A@JW=Ӓx6AyS?^w6A{ʡt^x6A@Vw_P>z6A{Ua2z6A0ZNz6A@B4Dw6AxT;)Ru6A*,V0t6Ab+Cwt6A _ju6A拗kw6Auv#y6A@Q+x6AjTTMcu6Awp8t6Ar}dr6A_sVq6A4{ ]q6AkÖATr6A7Ziu6Aۛ$dEgv6A؂0Ht6A@OzJ3CҔu6A>@yN[ٞ]u6Ar.^?2u6A$R:; p4}6AI|L5,}6A@,q~6AIt>~6ACf|'}6ASI|6Aő|`MM7AdTo 7Aiz Bꆩ7AdT{2 ԩ7A29uMM7AUYaJHϾ7AKPXaة7Aizo 7A@~iI'7A@_-@ 7A@ƍJXBꆩ7AdT}P!8AQG618ATx=p)4ѩ8A.AUp!*8Aq{u8A{Y47a8A`?_P!8A G{*U28A;}M ,kɛ8A`87AB08Aʪ%yz8AI6L˟8ATx=p+58Ay3_Cҟ8A+c,ixQ8AyE 8Ac618A&߫Dw8AC{>Ơ8A_-̚DH8A[Y 8AV j8Ai|5,8A0aWI Dm8A.pPԝӤ8A)>`AS7A@7>d eY7AŲ d eY7A@i%poW7AlA!CU7A7'Gu~U7AT7A@7>AS7A@gIK8AkC 80VY8AР;$Le8A/V8AS͎`T.Bt8AkCIK8A-obBN8A#.;8Ax}Z8A[=8Y : 8A.}OX8Arq7n g8AQh>80VY8AР;$HJ5A@w*yU05Ao/Hw5A@w*J5AM~łN^S5A^4r5AoyU05A|/Hw5A@w*X_F8AmiB]8A@?6.A8A'QB]8A[]zTP8Ami;/D8A ^0BB 8Am?3^_F8ALo)H8A@?6.A8A'QxbJ8A@+-i!!(V8AsA9 6(HU8A羗*!(V8A@^cUT8A@0GO:Q8A@+-i!D1_"N8AjG^bJ8AeK@\sP8A/bwL8A@NR(AwM8A5$jO8AV9R8AsA96(HU8A羗*Pk鏯6A# 6A@M6Aͭk鏯6A# t_6AG676A6A@Mh6A@6AͭX%87AX$}g7At=C-7AX$%87AOVU7Atɹ"7A@)/7 7AJ /rYt7AUWm7A>"v3P7o7A{:Gl\7A@rЇRz7A^W(hL 7A|X Bd6A!?6AQ)T!ɰ6A!k6A&ʨ6A@Fm6Azž Bd6AN%ylG[ 6A@yF}sų6AQ)T`6A@s k9xƲ6Ayjg6A@?6Aޢ,76A@FM; 6A׭1Q6A@Վ!ɰ6A!XG8AT4&u8AA{ o8AT4&u&8A%n<u8A.b:J0G8A5p t8AA{ qz8A^K8AD˜o8AT4&u+@b$8A[I]+?)8A*&l 䡺a(8A[I]9[)'8AA5T,RGT(8A*B}'8A@>; &8A@l<>QEn%8A>3C+@b$8AQmD⣌%8Ae#־(8A*&l)(8Ae+?)8An*_()8AFվS䡺a(8A[I]P?8A^$r[8A +=k8A^$ 8A u?8AoU@xp8A ++sm8A Hr[8A@/`=k8A^$ }"6A4zYtY6Aa"E율6A@;5q`{TXH6A@<{($6Aa"ED6A@-nX556A@"DB6AE~ɖ>6A4߼utY6AKjnd$6A1+~26A_Ru6A$Ý6AAwߴ=6AV 86AqRCT6A4zY }"6A@P٭~(N6A@D A율6A@;5q`Hb˝8A@,VO " 8Ak5P7,k8A@,VO <)g8A b˝8A)WLS8Ak5P" 8A7,k8A@,VO PU7A wcq0 8A2;K t 8ArNMS3Rq8AӦE˭jB 8Au6ԇ= 8Acyy58Anq|Us8A@CNtn8A6cJԐ 8ARjD Xefs7A.'Zut7Aod ` s7Aúxt7Açw<FAr7As r7A@f[2"p7AKDEo7A;n7A@|ZPCm7A@);h_`n7A\"(m7AqPxֲo7A@mfv*qo7AxZüp7A̻-1Er7A@Tv-us7A)qYc}7Aeֿ Td~}7A$^D}y7AXh Pobx7Ab9~K+w7AE)Tw7A@`OE3z7A@m< rk|7A^Yc}7Aeֿ6Aghp'( 6AS>6Aghp6AEaf6A wK S6A>2XY!6A@Ӳl6Aw#U;L6A:ȅ|b5`6A)ɿ6AY6A%a6A@6AghpBvTǥ7ADO-Z1T7AI)ۊZ` 7ADO-Zt37A@OG 7A8v+ꇗ7A@!MBvTǥ7AyU3ȿYq7A7N7A?Sf7AI)ۊ ̚7A@.ɣi7Asج]⫭7An1T7A8ƭ7A=h 27AsU'Z` 7ADO-Z`M?J5A@z0uB5A@m5 nUtT5A@z0>Kd5AD\?( M?J5A= X5A@m5 J5A@ƞG45Ap85A.U/OuB5A@E"!nUtT5A@z0*4AıeW7ET5A Cq+y4A sijS?4A@\ʪ+4AސMM`4A hǿE4Aӱ*65A+70Țl5A@b~D 5A߆3AU85A`V@L#þa 5ADP5A!:>_5A 'E?K⋫-5A`Lq%5A`>`@5A 7rzWV5AZa\F5AK5AL1\*O5A`(5A@d95A e"'o"5Ao,E+5A@/͓`P’I5AzB],\@G5AH<F5A5C9KE5A R>>,E5A(Ƶ8OX_D5A`l3 RKC5AO'1J'iC5A A./cC5AIA,B5Az͸*CenB5A@p* \B5AP7J)MکA5A`r.("{ A5A4]p(Wp@5A~'@5A :M'px֜?5A&<?5A`~fo%+x>5AП~$@{>5A+v#>L8=5A@#!Bh<5A@" <5AO)`;5A%}f;5Ayj{:5Am_ =:5AhE#Lą95AG!B85A"3!1}75Aa1#o >65A#MBz65Al_$c~s55A[%m45A`M%;35At%.25A B%D~Y25A)!&15AI(S&j15A&s05A"'LjM05A O"' L05A'/5A =g&/I/5Ar[#&_L.5A 6Q%F.5AH(!$4,x [@5A@=n͠ 5A]"h5A$s'5ANksNf5A }E9g5A@R_{gV5AayPVH5A2MwYLJ5AbCS5A *bmka֘5A n`55Aɳp_5A`m>Z,$m5AeV-e*4A`UH34A9iS%4A@_dgM5WJ4A /PiKd4A@[G4-4APB$&4A+~@H14AT2K<S`L4A`3D7O4A1^4A {+~;4A 3]i%Qe4A9"ҪT4A,W_uU|4A"<!2I4A' V#4Aw\64A@q9 to4A#?,[4A&Ϣ<1 4AM*nr_r4A@RW4A@:d,D4A 2h3=d4A3zN!#24AT4A`Ȱ;\4A@Q^04AȀT4A`C4A @Ed4A`Զ>|D4AܲÐ'4Ao ݮo 4A`jު2:4Ar:4AJSTM4A`G fX*4A$4Aj9d9:4A (4A@Ȓt4A=tdGZ4AA,q b4AVJ*vok4ANp {>N4Ay4A@-crzf'4A Cq+y4A sqy75J5A04N6Xb.K5AlĸGCsneK5A@s3ZnIL5A@JZ_R]xN5A`\ M5A([ߟI rL5A@Z&3qy75J5A04N6Pu#7Aav6X;7AAzp+b6A5a|f6A53Ff6A5>zp+b6A53d6A"6lf6A (^a|f6Awa~Ff6A5s-0`5A@dT~jVj5A Iwtjh5A@dT~(vf5A@ksL7H3e5A@9z"c5A " aAa5As-0`5AoQb^R`5A q}"?a5A IwtDHd5A`fEW,%g5A@A5jVj5A@D}Tt-h5ArCoi5A@jh5A@dT~`QȪ|6A{w^-S(6A x~6A O#'#€6A-S(6A@(Ay裀6AFohX$6Av]JEh*6A{w^J-@}6A@;gFQȪ|6A * x~6A O#XML8A@ pn.NJU8A,3i\u{U8AVS8A@ pn.ML8A@>[M8AɞYR8A,3S8A@xNJU8A@,yi\u{U8AVP?8Ag0HWD8A]cP`MA8Ag0HWQ‰@8A W?8AE -k `@8AF*ȺB8A]cD8A<P`MA8Ag0HWSC6ACMm%=kK6Av g5@>0I6ACMm%uIOH6Af SC6AwE 3F6Av g0yF6A',u':F6A4R*G6ApQPMH6AztQ{҇*H6A@@fH6Ak` JI6A =kK6AZ SK1sJ6A@:y5@>0I6ACMm%`oL7A;dC7A?t ƫ\&7A?tc?*7A lt) p7A,C7A;d3ͣ7AI\-"ê7A@o4oL7A@.8`A˖ɩ7A*;vƫ\&7A?t${Z8AK%J1V{c8Aw +5`8AK%my]8A/U4)m[8Ap :僣Z8A ${Z8A;794[8ADd@ο̹[8AwK~]8A+}݇`8Ak5b8A1<8J1V{c8AYT@ԡLc8A\k!+5`8AK%Xn!58A@(g98Av¯RV98A@CN] >78A֮Ʒ58A@n!58A+:?ן58AaƳ-88Av¯(g98A@7ۭRV98A@CN< ~6A@T v6A@P4}Y({6Aq\~ 6A@P4}p6A>7Š;O6AEy]uc36AXń6Ats66A< itn;6A@*2NuB6Aݴ+!OR6A&!g>.6A@0R(.c=G6A@b"hJq6A@E}}6A6A-l 4ݏ6A %t 6A@w!g zd6A@u]\P6ANM "k֎6A@ wy&6A@z4y~W6AX<h,[Z6A@W+zEO6Aϋ0x6A.Nj48X6A2pI6A@x];Γ6An:2/6A%%8c:6AGt.u6A@'Bg$ז6A@-AYB՗6A Lb 6A YG6A[_P.6At(tm6AT%nV6A@bm7̓_ܓ6AGg{anzc6Auۗ6AC,6A}wK6A2bӗ6A`Q% AP6A IT6A@YB5Q*ʧ;Q6A= g 6A@T vQ@906A 14r{+6A@Y9 Ό~6AcgF$M_6Acߘ=!YcC6A"6A'11 6AfB.6Ay,|6A`d $\2/foe6A[QSi6A*X)~6A!< ~6A1O({6Aq\~X/$+8A@38y^,/8A@5}#.8A@38y^/$+8A}~$ib ;,+8Aɩ+8A@5=9-8Aڐ/8AbeW ,/8A:M}#.8A@38y^OP6A@UVR/t6A@oG;L76A@oG;.ֈN6A&oઘ6AETrτ6A;ub 6A&>g6A@X7su)pNbK6AmR/t6Ak'e|m 6AB)|yl6AKm 0q6AyZ{=6A*4jI6A@+&6A>~Bc`6A@es‹6A@3k 6A@UV.I6A=ǎh\a6AmOP6A@!AG6w@6Aps576AvMd6A`\S%@6Ardv6AYX6A@# 0 6A)i0n{6A@FT%++6A@ۚHM 6A ?߬L76A@oG;y8A@038AAl8A@۟p7@8A@!"1qAil8Aȵ N8A`}wgLeHU8A@6n[C1|8AQ}Q2<8A{u~e8A@|oDH6A._];6Atbh@6A._]6A@ſD!p56A1 )6Atb;6A@h9h@6A._]xY3ƶ5A}@k5ATA uۏ55A}@9Ĝ5A"s5AwY3ƶ5A iszfn5A8f wѹ5A@lTb55A5VGw:5ATAk5AXsjD7ڋֻ5Al'@5ARڭ}uۏ55A}@pP5AɷTO^.p^<5A@1倷 ^.p^<5A`uJC5AɷTO1ϒԕ5A P5A`}>K~H^5A5pڪ.5A= AW5A@1倷2q5A w5A ܊+5A |^.p^<5A`u@Rُ5A@ϼbqJb5A@׉yj:!O5A@ϼbPsi5AحRُ5A@׉yqJb5A3" j:!O5A@ϼb@X,:%A8A@g0tfC8AD 2!`B8A@g0X,:%A8A8ٱ )3[9G8g7Ags`$7A0~ӧ6=7A@LPSц5A@i!5A`Lȳ55A@i2rʞ5AV9*Sц5A -@5A`L!5A ĒNGA5ALȳ55A@iHe\6A*p٨6Ad8Ip٨6A@,W?v6A*e\6A R٥6Ad8IQ)6Abp٨6A@,W? P5Aa2fW5AP5A!:Hk;5Az.7:pmM5A(35A3mD25ApsI25AۃQ75A{!Xf jdh?5A6۾E5Ax2bn.F5A`BxH5Atfjm6M5Ak[N5A $z} ]^Q5A#q3:T5A .[CaIX5A`Z~IY5A<,v[5AWE&WP]5A-^X_5ASZSb5A`YnCx9e5A@pYKg5A@&̻j}gk5AIC?0o5A@.WIJ!q5A>s㒸r5A[rs`t5AC0ymw5A{5A2+h~5A = '5AUOQG5A@#q a2fW5Am4 ecZ5Ag(]̰ـ5A\cEJ5A + &j5A }˿%*~5A CzqL~5AUϱC}5Ai }({}5A@8B$]}5A`~Ͼ1}5A;|5AN|5A":s|p||5A`;pT|5A tEM!&|5A@}rMѸ{5AYG<{5Aճ_2{5A{&Vc{5AE] +:{5A`=AZz5A69Htz5A@az5AɛOĔ7lz5Ao7P+Fz5A z*fz5AtHtaHy5A %ά%ϿSy5AYDny5A@&|y5A=-b!Cy5A"y5AԱgvx5AhH&Bx5A[Va'zx5A@EB' .;x5A\kGρcx5Aw^IGjw5A`MPw5A h0džtw5AnxDw5Ap٩BSw5A6lӯv5A׆{3v5A# 4FWv5Ak|v5Am&KVv5A |lv5A pdLeu5Ay֧9u5A m̂ pu5A`.*n8 .u5Af;~Yq5A -o70dq5ADkǔ7q5Arԉ:p5A] jŷp5A{bŀp5A@L"o8p5A1۔o5A`̣3o5Ak oo5A #|5o5AQen5Alt~n5A@2lƉyn5A@WO7EKQn5A zUbJ Gn5AJmUײ m5A kAem5A@B"r'\m5A`ClZ /m5A`Lwl5ACl5A@utx1l5A`7fk5A 0!k5A`QK"3EIk5A`}kCC+j5A``M[Ej5A H^gj5A'"j5Ai5AH?O"i5A-%4(J8fi5AЄvAy)i5A r8R h5Ab4 έh5A [nh5A{Zc4h5A ov3 jg5A"X,g5A-,F5{g5A J:g5A. g5A|jf5A׿tUf5A lf5A5ۨ)_;f5A@Tv3v f5A巁e5A 2gTe5A`^{\띦e5AX_Uce5AcNܟ>e5A$LW%e5Aʅ,} d5AU ![nd5A@!&(d5A,d d5A{]Ld5A>0G-Hd5Ad5Ai8d5A@-=8Qd5A9SʞǙd5A`uecnd5Ad[@d5A"č"|d5ApdVd5A@T{)e5A` V!e5Apb /He5A`+" ^re5A* 2+ؔe5A 4q e5AOre5A $> {Uf5ADmcO,f5AG(W;f5ArE#pKf5Aҵ=[f5A`P1 |gf5Auu6sf5ATf5A#sr "f5A fּf5A@dwyf5A@p!f5Aڊ$g5A@e绹EFg5A1~ bbWlg5A$"og5A#%g5A{$%5Ig5A`rx'ȁ,h5AĈ(vMh5A jO*qWh5Av*)_h5A /t+)mh5A .-rh5AzsH/;6h5A@a61$h5A{]{2 h5AZ6ԫh5A5j8h5A` 9-Ci5A@cq;0i5A^<y\i5AN0N>:i5AE?॥i5A Uxp@pDi5A, Al=j5Aa~COcKj5A"PD8yj5A}iEBj5A@)OBBFg@ k5AIfGJ7Xk5A|6Hɗk5AmH|k5AsIqBl5A@FHI]Ql5A{KJMX"l5A@W;Jti m5A ;K%Fm5A`j,hK*rzm5Au L!(@m5A`>mMgtm5ALoRNjn5A:hBO [In5A mA_P} cn5AQ$n5ARiRn5A`Scn5AryTәyn5Au{V;n5AܿF#X -p5A]]hI q5AHީozq5Aw1krr5AG8+Џor5AVTx UҪq5A[Rq5AhVq5AS{.(r5Azh r5A`OIH7;-s5A`zg"}_s5AT0s5AC ,c{s5AMfW5s5AFSs5A<׼s̏t5A@d2G?t5A ,tE1t5A`V | >t5A OpqMt5A -ԡ NYt5Aj0 8M/ dt5AdIggt5A@ Ifwrjt5A]у&GLkt5AyXtO̸ct5AR>8Nt5AGrJF+t5A@QȠs5AQ_Sإs5Au4"–}_s5A o%Ts5AJ)\r5A@Lv-3sHr5A@"1.= Jr5A`[f2'ۿr5A @5#q5A t9YUq5Ae;G>p5A*:BMQp5A7F_p5A@*t>G~ KDp5A HE9]p5A Jyޟp5A dNtEo5AxQp6wo5ATx0o5A"X@8n5A_>\;n5A '^8hn5A m_V!n5ArY`XƂm5A UYa텼|m5A%bm5A/c l5A@;dUfk5A`hi5A-:Co^5^+g5A ٧tRe5Ay"Cl8c5A{&g~>b5A7ʀob5AU贁Mݽb5Âa5A*mR+wa5A`3~.a5A ݟMW`5AFsO{`5A`L`5A?˓q`5AZd&4J`5A fB~N`5Aq$@mO_5A+@ _5A`(Cɠ@d>n_5AEәG_5A6M_5Ae^5AnI^5A"oÖ^5Aڤ"8t^5A@qN^5Al7Z3^5AݒC]5A \}N nV]5ANzЅ\5A n?xpڅ\5A@1uU+7\5AL`s [5A@|qm<[5An+mZ5A`Cl$?mZ5A@jO#Y5A/Qg5nY5ABek"Y5A` sKbD޴X5AWA`ByFX5A@ 7^[jW5AO\IdxbW5AZPu $V5AT%YIsHV5A`~W.' V5A`pW8\U5A fadVepU5AhUl+7U5A^U.  U5AংT+T5Aw@sToT5Ad]%T!E;@T5A0 Sv# T5A`v{S᱆S5A 0SkyS5AobSW7ET5Ai/7"keWZ5AOuKmʏr]5AѮSSsf\`5Aׅ8da5A@d2\s>|a5A7\D+eg5A /OW6rTg5A`oS ӾMg5A D7$ h5A@ } h5AE:i/j5A*{1"Rqm5A1V __q5AA @}$q5A.ˑLVn5A>wl5AfFXh5A U~`h5A{' e5A"oFCXӁe5A`K^{7f5Aq~6J}gf5A>(d5AD%+c5A@e soDb5A@  Mc5A6jGjLc5Aow=5[a5AY˟,mb5A` Ud]5A &ޤ2U5A56ދT5A 5uA?R5A@EP5A ܺW ș N5A@E+M5Ay[N5A@T+36.+L5A``_F5A [s5;@5A@+R =:5A-65Ac*Ey25A\$Eb/>/5A@DP1}y+.5Ai1XP&5A i=7+2u5AX2X5A5A@p2pIH05AI($>_5A 'E?KP5A!:umh5A@^iqFCji5A`ks xk5A@,v?Rp5Ai~o5A_pa"Gm5A 7 \GIh5A`Fumh5A@^iqF;n5A`,:R\l5A`e΋Il5A@f"qcӒp5A`B>0kp5A`L;n5A`,:b6A@_zs^YƳ6Aas^YƳ6Ac U|6A@Yoko 6A@_zD#46AahidLh`6AclË6AL*tSݭs"6ABb6AY%6A@.| 6AݾԒ 6AU O(R6A!4=6AHI}6A_93P6AaE6AlEs^YƳ6AcpM|37A@bxM47AWR CSS7A@bxs,7A)M|37Ad R h7A@Dp^y7Aʴ`Y7AȺgp57AWRM47A$\3<7A,d})U7A@CSS7A@bxpv̱7A9PR77A@0lZj R77AY7fᔂ7A9eͭ7AHYsx7A9P[7At۱dd7A@%OL7Av̱7AjW63A-7A@CDk[7A@0lZjR77AY7XR77AV0z_[%7A6lR77AY7;|~=g 7A{Mny#7A;vxt7$7A6l_[%7A@"ʵviP%7AO,&#7AV0zR77AY7Pծn8Ab7ܓH]t8ASfn1n8Ab7ծn8AOzثVn8A,eyss8ASfܓH]t8A0$ N*t8A16n1n8Ab7p 6A@ꈫ;;N7~*s6A@F0 @6A@ꈫ;;^m6A@[!0p 6AG=}^/6A@ ‹t&.ұ6An@2 6AD6DF6A@F0v X6A@6[=U6A@.N7~*s6Ah@6A@ꈫ;;c\18Af-x"88A$҆68A@ $(듕D58Af-j)48A@\CcGL/358A,ߡ/>548A"̳Y_ 28A G;j18AHdc\18A#B2728A$҆X28Ag٥6A]ri $^6A|96A@rj+,6AZW@c`6A@e|.6A }|o6AM"+,6A@]He$36AUxo66A@u0#M`6A:|66AF=$7ca@6Acm e6A6wQ|6A@p<{r86A4&+$ ;6A͸Yg6AETF6A@Q/?C6Ad; uNI4d6A;C T6A@nGb6A@rj;6A@=fh4K6AߓոWӐQ6A@h(c6A@im 6A;uSM6Aܯv(6A!06A>66A(16Aϫjb!6AJ~]T,P6A@1B6A@ysP擱6Aj 2>F6AE}!T6A@ AS>q6A 596A@3MYjp6AMnnf"My6AZWߋm6A2ss:U6A@upPE6A@,Bpj|( M6AEG2-`XA6A#Uϑ6A&X+6AJ*!lD6A[ 6A3O+56AVJ/6AD#Rb)6AHŎJsB6A!5<&a6AeR!8a-6A! .I6A=ǎk 6A@UVs‹6A@3c`6A@ePuk<7A< |'nw7A@,'o97A<N7A>uk<7A;W87A@,'o5X#7A@y |'nw7A&897A<P6$8f*7A`/f={.7A@l%h.7A9li+7A`/&*7A96$8f*7A@C*-1,ӳ+7A@l%f={.7A@yh.7A9hsd{G6A@t%xNos6A@ E ʭ6A@K{wsd{G6A3eI6A@ EX6A@C F Ι 6AKϚ&aNos6A˱nR>16A@t%xa6Aeb[2$6A8:`ʭ6A@K{w`7v7A/ ͓E)̅7AFY +H}7ALh) }7A@<(~7Aa+#g7AFY$O7Aý/M;7A3$V3Ajx7AD*dj&Sm7AMFxk7A@T7A@ًsPa΁7AU #@7AX!t$x7A_phly͓E)̅7A[jrM\7A:t_F7A_-\^ӂ7ADSrv}7A=WC5|7ASr;n{7AO yx7A/ `7v7AfSޑ}y7Ał0&y7AJCl4z7A?&Q[{7A@z1<}7A@Ү%|7A\ot\;}7A3!}7AzeA d|7A@MvK+H}7ALh)PzrUt8A %%͓e8AˍviC8A %%n?8A@| :zrUt8AsA8Aˍv͓e8AEqt}8A)iC8A %%h-g8A߁I ,8A@_ eF2O8A@ v*k8A߁I:/ջ8A8AsÎ-g8AK{8ACi#}e8A@_[8Ad ,8A3IveF2O8A@ vHm]q 8A@;\Vl t8A@.T\Vl t8A JY8A@;ȏ 8A@;om]q 8A@.Tڦ8AhlX\Vl t8A XvP?97A~ ٜ?7A0' ;7AvP?97A@x@Z L:7Aua1];7A@!5⺏>7A~ ٜ?7A@k lsq>7A!AIS0' ;7Ap6A[+%Cz 0Y6A 6Aاa 6A}LYEX6A1L*J6A 0Y6A@^?6o)6A@B>?6A+cJ[46AR˜sӗ^6AK?V uf]6A[+%Cz6AاaOQG5Aiy5A`㽽OQG5A@#q xN5A #D5A`㽽%5A{ƣ5A3h۽5A@J״fWН-5A Εj<5APm]p5A` F5A L"l5A@%M',5Aa jFxw5A 4#~5AP 5A+r8]P5A@8+M۹5A-=)Zğ5A iy5AA,)gd5A5AWY|qY,ʞ5Aܐn˴5AOOY)C|5Abm~5AVx;o5A:([5A\(P95A@>VG'|5AUޞφe5A`Jgtӝ5A*F@G,5ASv̓;n5AKu?|5A%`u\5AO5A5A@,,~W&5A`L,{|ّ5A_{<5A@(ywĔJ؜5AJpw5Ab|7unj45AYYfs'85A i5A`c af_>Ll5AFN^qH5A]cW$5A=h[w-5A@;Z/d5A`CYlߚ5A1CX҄*"Ϛ5A`WP$5AZxV5A ]G{TD>5A+dRq#z5AWt2Qc5A`ԮOn5A@LNI5A;oL4H5A8JH5A`z7IIZB5A`̠Gļ5AwEfM봚5A@D2G5A\eB5A@YSt@9`Ś5A>nhʚ5A`y^$=.Қ5Af;\ٚ5A3q9u@K5AhM8V5Azx6"t5A` 55A3^d5A`Jy1B5A:F0RNۚ5A@4y/LҚ5AT:.ɚ5A}A-҆i5A@j5, ]5A +r5A \I)Qؠ5A =(5A 'Ȓ5Ac&x6$5A@z$z/5A@#ӆ5A@!Ӆ5Aˆ -%׆5Au 5A L\̍5A࿙5A'a'5A ̝Vr65Ai0$ar5A >]w5AW%ݹ.h5A E~wkP5A pIX;5A D+t 5AhhÑ5A ==5A 5 ɘTș5AOR3X 2塙5A/_ %n5A+K  &5A) Iٻp5A@Xe,%T^5A jhO5AO6]vA5A@?*-05A3<@5A DXT > 5Ä35A@ a̛5A@+͔5A@v ev5AI |/e5A q5APEEL\M5AP~a75A>@x:5AAV/l5Amu_ؓ5A hL5$5AE+f5A@jz&bd5A7Cn15A=\&5AhMZ0v5A`_*ϩ,5AC:O5Aߏk(o;$5A`Mr 5AЛǡSˑ5A`*q5m5A`/O\Jqs5AcI@5A?f{!5A,6`<5AdDe$5Al 9yn5A`7vx/05A8ڡ_5A~bl_ I5Ar(l5AwF*M7N(5Aʐz%5A@T!~+ 5A?,~Qm5A@]e "5AL15A[䀭5A` ذ]5ALdM5AsfF"vڌ5A}ؤ 5A a5OCl,65A@p_r"V5A@f& 5A`g4^5A`Ƭ3W1̋5Ax"d+ﰋ5A t4頋5AGlگ5A B{QN5A`}E{&5Aw 8B5A@[5A}?ى5A ˸Qx5Anky_R5A zNCPm5A`se ^T5A@P|.5ApP?x5Ad`=-Y5AC \Q؁5ANecZ5Ag(]a2fW5Am4 OQG5A@#q P?ܶ6Aʒ8&λ6A@b(JliF\6A KL}6Aj?ܶ6A@b(Jl.6A%q8&λ6AEኜY`\66AʒiF\6A K`-^"8A@9Bq` 8AY^ IJl>8A/5jg8G8A@9Bq-^"8ACx39C8A 8AY^O8Aݞ1` 8A7B>8AƸVIJl>8A/5jpQbђA7A#7h7AX?7ABXvoj6Aȅo3' 6Ai:g6Aȅom,l6A@voj6Anp6A@QrBT~.6Ai_6A@i!3' 6AǼ:g6Aȅox¢6A@{7n|6Ab}} ¢6A: pH66A\ u6A@۞*96ARTn`6Ab}}7n|6Auޝ96AvZ6A=hzOAK)6ALC=w6A@{Ž6AS¢6A: p00[8A@؅ ~|8A Ȧ58A@؅ m(88ASW28A00[8AQ?AA]so8AeGs5A@Gk[5A&Sy55A8w#5A3un95A(jd#Z5A $ b ^^)Ť5A0\SՐ )5A+@\O `5A OW G\5A@31_5AA(g5A :lXRT38A@2o<_6s78A;0I/48AAeuRT38A@2o@V6AdEfFgVW6APܨ^8U6AHHeh=Y7A@<7M3c7AՈc 7M3c7A@%^J.6AɌ#uGQ#6Aq6A@(8wP6A+nXEGc7AÃg7A;wlF]l/g7A&+Ke7Ai+ d7Adҋ EGc7A@ԧYrVc7A;wlFX?T3.e7AUFÃg7AuH]l/g7A&P'7A@ӊhy.7A@ivhy.7A(1q.r+7A@ӊ'7A@tAb8ݷ'7ATQ)HF+)7A@ivB.7A#khy.7A(1XVߋ6AV.6A@ПfM6AV./6A֪TH6A@Dr$Vߋ6A -6AʹN6A@Пf6ABsM6AV.Rl>7A Mvvا=HH7A@wg)yyF7A MvvoE7A@ P-آD7A 3RI^B7A]riA7A`rf72@7Ay BA7A@@ 4:B7A@ <<@7A@=8w}}@7A@FRl>7AZ0p{m>7A@wg)ѥ?7AfGa+C|A7AHmNy|C7AiͿrDF7Aا=HH7A!Ux7byyF7A Mvvp"0X.8A@v`՚ &L68AuO 3L{J48A@v`՚̰938AQc<28AC*}S-d<08A1|fFk.8AL*Yj"0X.8A>T!08AuO u28Arxd;558A@\z_ &L68A@jk3L{J48A@v`՚Hjˊ8ABKd}J8Agk8ABK܊M8AըPjˊ8AD4yK8Agkd}J8A+ 8ABKh|j8AGFAq^o8A1K +m8AGFAXVl8A_B̫|j8A@"Ak8A7x6l8A\x03n8A1Kq^o8A@ y+R{qn8AC!Ɏn8A$bS-+m8AGFA`S6A@y@@寅D6A@'J w~6A"7=+!6A#4#寅D6Aګ> 6A@y@@S6AYH3%^6A@'J'\L6A̷Q֣J6Aqw~6A"7PH$jX7An]Pt0\7A@ğ ~\7A@nYB[7An]P(S Z7AZH$jX7A@T eY7A@ğ t0\7AM~\7A@m5A/5!5AS$Z)gd5Aiy5AA,805A%]rŐjX5A15A(F`O?5A+Ж$5Ab7L5Axdu@^a5AT%c[35A|a!5A{K06T5Aoї35A>#r5A `}ɲ5AJQ7T}5ABSB5A+`UIm5AfFW8ZO5A @Pt5A]ҋd_c>5A`jqnDW5Av)z|c5A`f95A/5G5Awh"5A yK> 5A f.e5A #5A߳Zhܟ5A  "q.=5AX~t5A`NХzj<25A =xk͙5A@پ7}ץ5AoƍZ5A[,QKh5A`|7 5AQUț5AĖ͗5A @Vr"65Ad&)5Ag1"O5Ah-ʥ4=5A`s*v5A`S Qݶ~Ѩ5A@G_)cj5Aa~E55A`sd}]%5AZ}ʧ5A`#J|g5A.{yU5ATz:|5A xN}5AnP^wUAtv5AQ8UuT35AtitW5A@Zjms͘5AyrĦ5A;qk@27]5ALpN|I5AV&6oy5Ain<5Aۨl>Fh5A`zÃkԹJ5Adj8n5AѨIhK$5Af)5A_eyvb5AqGcB޾5AX:ca=u:5Au_D⓵5A`t]k35Ae:W[I5Aj?T#Y\25A@^Vݒ75ATTA5AOR6\ 5Ar9RQ+5A 1 LPoE5Ar;qNKY* 5A`>GL*5Ao$I ‰BM5A[fF?9f5ADX5A@NhBG5A @]5A }=f*@}5A<*?*Gl5A3=C3RZ5A1iX5A@^08{5AA.&/G5A.Lk5A0-@=5A],"Ku5As+9x5A6 *̬5A`A1'*g845A 3)[5A(zty5Ar(jX5A'evʐ5Ao'{5A@s'WfK5A9[&[qK5AǂA%SO5Ap$995A`T;#_B5A@Z"5ASs!BQO5Aa&k5Au;635Akv_q5A [Si5A4H 5A@ri`1E5Aw T3c5A`ۼ/= 5A hzZ5Aౡay5Af5A w@R5A`ϴ{ 5A@6إ{5A OņV5A)5Aqs0OxT5A`s@.5AaV!$?5Abj)5AħH15AnK|5A:4=5A@ O 5A`å'5A 9 ]j5A>S 5Agc.5A@o_W;5A 2Ua 5A*NjR5AI)G5A-:X҂5A[{ t5A`6jVh5A nXX5A 5{{+A5A \rz25At\Ȉ#5A}Kvc;5A@)&5A@4a&_45A`1X=5A4| 5AF˔5A`MTZp5A uS5AlD-5A`RhܫZ5Am=a0e5AQ r5A -p@"xa5A JOnR5Aޟv?A5A/s15ANEc5A@H_ 5AB7JtT,5A Kx5A D"X`r5A(KR`T5AV}a5A@!"A5A \,FV͚5AO 5Adyt5AΌJi`5A@P8KsP5A;A!!D<5A w+5Ate!:H3 5A̢F}A 5Av+{5A H5A & yї5A` =i65A@غ,5AP\t j;}5A ۩;e5A]Q]a/Ē5AؠOL{5A;8_5AW+xR5A w[$m@5Ala35A\AxOb"5A0SB 5Anz3$5Al,5A:~5Ap K5A@K7@5A` KN5A`D-X5AR"J5A2DR5A92Lr5A|~_5A=4M5Al^I.C5A@H95AE{2[+5Aq6_ޘ"5AzrtI5A45A` B l.@\5A`F]5A`RJ`sL 5A:Y)t 5A !r 5A G5A >65A)DL#5A`U߯.5A^f Cx85Ah<@5A[*mG5A˞5UN5A (C5U5A%wG\5As'MDc5A!1b%gri5A`>hfk5A@yf>o5AVe r5A`pv5ASY>z5A`'PEJ|5A p+x5A=-{5A kYgb5A@I5AK45A`4a\P5A@2q~<5AM&tP5A`b`rkI45AL}6-~5A d75A@K5A[%Q{5A¸a5AMo5A_nu5A ]x {5A Hoveqc5AoW5A.ۆ^6H5A4 =5A |05A`h낺o#5Ay_5A nc! 5A ?TTe%t5ATy5A`8M9_`ҿ5A@.s5Ax*ͧt5A@t,8dž5A vÇ"ז5A:UmЇ5A չ]5A`s5AK8^g5A Qᄹ_5A[9(-U5A nԔ85A`"նH/5AW~M 5A}~&5A@KI-5Aη&ܾ5A_mҾ5Aqɦ5A@t 15Ana¶陾5A sݶѮ5AIFL5A%D5A{r5A૜p'd5A [*R5AѠ.QK5AzOцN>5A}oS05A >!5A@ߴ!M5Aka35A8e$̷5A ^<5A"mؽ5A')<ͽ5A`lTֱxWѺ5A׉cP%5Aո2L5A۰ޗ5Aܭ !5A A4c~5A vܯ4Ou5A_=5cxk5Av@oE]5A ۮST`T5A,"TH5A@ħ4$|A=5A ϥq'z25A@mgA*5AF=(r5Alݬ>U5A`R|K 5A O;5A`hFuU$5A`?D25Ak5A`H5;9׼5A`S&,ȼ5A)vu5A@ZX}5A`@ܧsm 5AFX,<5A8i15AI܈3O;U;5A [4O5AJ,5A@,f 5Adk=5A@iaClo45Aeoa"5A]e?5A`t\ړ5A`/ޟА5A` Cw8I65AxNއ5Ad1 ~5AMd(4u5A םe k5A!Ka5AQ$LAT5A xΜBJ5A҂>5A`$!tz845A@+o˕{@'5A`mb5AK$xTQU5A ?ğ}+&5A[k׻5Al7àĻ5AظZ2)5A@aQ &5AUͽ*5A6+WG&s5AGdmf5AA}Z'HV5AH>:K5A qZP&K@5A"՞pR65Ap FUF&5Ak\ 5A ֪r 5A`u65A(IzYl5AdVqԧ޺5A`#Ǻ5AFչ5A}1Dz5A``$#5Aੜs 5A = 7Xy5A`Zij%h5AFct4[5A4xR5AƝŠ,.G5A :55A -;i 5A. 6~5AWnVj$5A~M[5A ΢zi5A2"2չ5A nzNRŹ5A ;VⓋ5Av:,Q55A [75A@&5ATw5A ͥ@1{5A `k5A{ݦhD^5AМLm #7F5A@JKFurJ75A|79-5A'$f %5A ʓa3/|5A`@Gj&5A@Ϣcό5AC߸5AĪ`w и5AZ05Awݫ?6뀩5Ahm6_5Aק׬5A 9N1U$r5A~ﭭ?"R5ADMLT!35Aή>s"5AU!nA5ACtPRA5A P=gU>5A_կ45AGջEiT5A`GJ _ҷ5ASJʷ5A,)0ӫٺ5A I_md5Av65A>{\z5A ͏)-V5A̰Tp5A)?а"nb5A?RgU5A Lo9D5Ay)35A!5A:  5A`}ܣ V{ 5A@,o$e55A^|5A {*$5AMdNՏֶ5A`s/Ƕ5A B5A@hrѰm5A+ǰctҒ5AҏƩCr5A!^5A zĬjP5A vm>5A HP*25A\d/65AKh 5A@Y!5AS_⁥5AWR>\P5APkTܵ5A5Hrε5AVΧEA ĵ5AOHI!ḵ5A'm5A`eK5A@ΰ(@ތ5AQ+,64s}5A֤b_m5A਺Z7?a5A`[.*U5A@_L QI5A`?ZEA5A@=nJJ15AfsQte: 5A01"uB`5A`Fv 5A |)5A{pivF5A Ѯjy>ߴ5AaVWӴ5A@LiS ȴ5Ayg6x5A{R%t5A`F5Ai հg[5A`L}5Al9 n5A8'PK_5A_s/(9O5As8LB5AɖlK45AQ䎯rC'5A a 05A@*1 5AҮD=P 5A`_2ʮt?[5AI5A@'ExMuF5Au9VtjG5AՒH(c\\Գ5A`Ofdz5A`Q:㷳5A\3r5Ap֭OI 5ANlȭC‰5Awí5ب{5A aNTr5Av2XwZ5A 5AG_5Avk!B5Aò5A`wBf7ס5A@~SgI`5A@%Pٱs_5A6 ԱKs%5A@M`5Ax%5Ɇ5A_̵S5A;g7XgTW5A@Whծ?K5A_y!+5Ao3ӌ/ 5A@'{5ANnjjG5A @[VQ5A!kL5A}ؑ5A" D85A ߸5Aw}O`z5Aީ@IF5A6N135A -r[ک`5AtV 5A@x$}+hȩ5APYJJE5A@y좧^)d5A`+mTᗩ5A@W(,5A D0ʐ5A= 5A@ށa<Q@~5A@!̥nX5A@$IQ#765AdlH5A3g<q٨5A C(E[5A-7(jg5A~ngك65A55A`]FUYR5Ae$3rбx˧5AzҠN5A@RƟ?z5AD#K5AOq't5Au-tre5A`ӫ݄0Id5A@͆&i5AߋW`5A\g#6Q5A@V@5A?g+5A?g5A`h;^5A]`5Ap [Cצ5A`8vv5APύr25A^B5A`yTڄ5A۞D05A~Zdۀ)}5A|M I5Ai?5A@,5A@x΁]Ŧ5A`BJK[ۦ5AF~in(5A W]}Pթ5A h/w{AA5A\)z-x5A`)ڽxFs!5AWwD25AAu`" 5A -tW!5A " sY5A͒5A CB *5A@@u5A'?xtl5AMG>-|x5A`;=\5AB;b215A@Jd:(dZ5A~8bT ;5A`[*?7"5A 5I5Aƪ3K5A@Sj2]Gߡ5A ~0^Uɡ5A@2"/Q5A5V-i!С5AˆHx+}ۋ5A@4)%#{5A+q(pmh5AU&䗉Z5AM%$G5AH[$ot,5A@i"| 5AփŦ!Ϯ5Az? K6Ԡ5A`P 5AF?_q5ALyH5A`E-\Zy5A`H&r5A@ feo\5A |Z㢒5A@:Ck5A'%ey?5A`6w5A@#Mڞ5As#}? 5Aq .q55A@/, 3$JY5A K>M]?:5A@I(ϕ3#5A@& ѷ 5A@hʎ5AΞ!>5AKk]~ݝ5Alѝ5A[$wǝ5A~f*5A ?.p8,ct5Ai]%0_5A@HR7;>^5AԢ^5A Z㝝5A`6{`w5A{rU5A͉(m5A@qIw5A`-rPQ?H@5ABъ5A$5AM5A 7Q+!j~Zm5A`bo+Ksǝ5Ao_$a' 3֝5Ao'B745A3XN5A4 f5AϠI{ 5A>m~ϴ5A&]JP'5A:#885AfY/!-I5A\%x=fZ\5A r|q5A@+EZh5A@65A K8寸5A`׺wҞ5A `HNW5A`̋Ҷל 5A 1Yhl5A`>nf>5A?/-S5A@[R @`5A 4?|Le5A`+~L/0b5AU^*_5A rU5A`ա-J5A55A"=XY5AU_xC5A{×)gd5AXa m5A-#A5A@(caY5A~Xdndt5ALrt]+Kߧ5A.%c5A `Xa m5A-|O5Ar/DV5A鬙tݺD5A Wt/>+ 5Av5t|A\j5A&n+i15A6?a{Ä05ANI6ql5Ao%]|O5ArHs5A0!a>õ5A` !zV4m5A?8_5A@&G9)gB5A#[T5A ˊm*q75A>Ѣ5ApY ~5A{D`H5A05A@ٓ'ĤI 5Aj7sޡ5ArcKj5Akl`i[5Aj-H<K$5A`9@,b5A*XAhB5A!+ ;&5Ab_3\/r5A N ]l 5A@@A2N5A $ 5AHyw45A?=y5Ab_i-m5A!+5A@xsm5A~uƷ Vƿ5AF CF5A gmHs5A0PDju?8A&NLJEkE8A@vO>!A8A&NLJDju?8As<{J?8AjIq4A8ARYBNE8A@vOEkE8A~l]>!A8A&NLJPB6A[nhG6A-</NE6A-<;eF6A`QanhG6A]h{9bC6A[B6Awl־,C6A?Fe/NE6A-<PQR77Av;LRW<7A@t D5A;7Av;MO:7A5,#K#}287Av4 QR77A@t K2:7A@"LUDLRW<7A@ mD5A;7Av;P +7A[a'C.7A@k&7A@k'C.7A@%s=*P#C7ACQ^v^4J7A1_?^BrE8A}^CG8A9rpGJ8AxuI8A@n]P +7A}I2tp7A1_?_8AR,Q[!?_8Av}l~^u]8A;`[ [8A- V8AHQ9 X8AaÁ8A-͈v8Aky [ [8A@! &8Avd 9V^8AHQ9 V8A*\s8A@&bX8Aa`1Jb6A t/.g6A@ pP-e6A RXnb6A`7`1Jb6AM ׍c6A@_Bc6A`H^ud6A@}f6A`Bt/.g6A*pP-e6A mI6ArK6A zq] K6Ara]k`/6A4lmI6AY1[N<6AAl~6A߬]o;s6A$L@^M6ARVq6A`O3 56A`BۆAw6g6A 3 JE6As"$aFjV 6A^XI ~~6A zq] 𩏼6A@w + 6A@='ਾ6AK`3+T6A YJPK6ArPH8A@zHֶcӒN8ArdSy!I8A@zHֶcH8A@5O(Z`ڎK8Aܿ5UM8ArdӒN8A/97L8Ah>Sy!I8A@zHֶcb%7AN?D/ƭ7A݈%q?D/ƭ7A!AԥTkW7ANwsY7A!em7A bg7A!.Rrh7AGlKzK7AʆLb%7AJNb!WW7A{X9D]7A%ĪE)7AaӌF6m_7A&sBt7A݈%q?D/ƭ7A!AԥDN!P6A*y|-[6A9D'fUW6A*y|UU6A@(rYuIY"U6Aɥ1k!{GC U6Aˤ&Z41DT6A@UalR6AooP Q6A1VrDN!P6AFg},Q6A p:Z2SQ6A'tF2 mR6A@U=~HwQ6A s8-!,Q6A' mL U6AT@tW6A9Dx A:X6A=4 W6Av 1иu{U6A$Ư$PU6A f+cj|X6A sL=07A~bSyB$?I7AS!n7Y@7AS!n0B7Atk2F7AGd0F7Aqc*F7AK:$G7A@_V9H7A@GeyB$?I7Aq#X}HSH7A~bS HG7A@KJ$XD7A@rؖL/^C7AR?LB7A؂ z ?7An 0MW>7AwN?7A@JQU7Y@7AS!nXJ娅8Az׻_'E8A@yaiF}48ANA_O㣆8Az׻_J娅8AhR%]=8A@p)D3ħ8A@~%'E8A@yaiV;\8A6w<F}48ANAXR96AהȊ$Gqݱ6A #DcO]6AהȊmֺ6A#cAR96A 7BQ 6A #DcׂD@6ACKeE6A?a"0l$Gqݱ6AWO]6AהȊ^Eir6Ao4̬6A Br 4W6Ao}Z}l6A`sXıl' J6A@۳=6AI1w6A@lhT-6A?^Eir6A@kgEр6A  |=opL6A Brg6AQC6A4̬6AK4W6Aogc7A@.[n7Al1DJDe7A@.[#.hc7A,gc7ApD̝3Yd7A@ޕ^)pww{f7A*.|}7?e7AdKk~f7A0E`N1g7Al1D'3}qj7A@@bkn7AG3un7A@6  j7A@wlh7AQmG"/g7AbfJDe7A@.[J&~N8A(hF@Z8AR)Y^V8AD F0/S8ADPyax:]R8A@1&zQ8Ay ˄|O8A(hJ&~N8A@F uO8A c>GTO8A>L0>Q8A֎jE$~*T8A~_s~@W8A~]LNY8AR)YF@Z8A; Cj̟eW8A=/H}W8AZm^V8AD FP8K7A/Z7A@͢57Q7A[Y*Y7A/ 97A@7$8K7A55"R7A@͢Z7A@i57Q7A[Y*XVl6AY>76A} 0M]6Aɐ 6AY>L>6A)'Vl6AU=ܽ6A} vB6A@1f76AK 0M]6AɐX 76A`i^Qa6A@i4~<˶6A`i 76A`pͬ^6AK K6A@i4R6AYh ^Qa6A 2,Kd6A lW~<˶6A`ieD9 6APaGw6Av-7!6APaGN\k6A` `:+]6ARŽ[>}6A ?1W6AKE&eD9 6AϢ6A2E336A9"K %}6A`/P6A`4/f6A n96Av-^6A \=w6A[~[ ZU6A@'ac6A_=-6A p 6AH3i$KՋ6A`_!`+6A`x86A QB7!6APaGx P]7ADiM Vf7A787 Lt_7ADiH^7A ld}-^7A \Vfr֮U0`7A$&LDb`7A/og25^7A: P]7A787.e7A@srM Vf7Az~jf7Ah=c7A 0e4Lt_7ADi`٬T6AEú\6A I-WD Үj 6AEúX6AGM|'6A:G٬T6A ×(6A@( ؛46A I-WD\6A G4 ]6A5lҮj 6AEúPEǽ6A 5|=6AH¹:v6A 5|Eǽ6A=ipc#6AH%Z8 6A"P^v6A`U k=6AԬ¹:v6A 5|Pg `%7AǼ󂗸'7A=;R'7AǼ+Ld%7A@hg `%7A@jHyxEg&7A=;45'7A' \E󂗸'7A]+ όR'7AǼhRփ7ADA<7AX ,7ADA 57ARփ7A@A17_7AA*z7AX<7Acכph7AwcŮ7Av养]5i7A@tB0,7ADAX{8AH~y&78AbS|8AH~ {8AIJp{8AP/JƓToj}8AUhtۤ8Aby&78A@j?)8Aw{S|8AH~`)K6A d~Y6A`/[ Hn6A dp}6A iz6A۬})K6A `6A`/[uڴ6A'9ݠ6AmU~Y6A;Hn6A dp;9"6A႟|6AN-?p Qy6A႟W 6A`60B7ڔt6A`*;;9"6Ars D6A9)p">\Y6A6A`ZV9p'8 Y6AN-?p|6Axڅ6A@!(iQy6A႟htH6AL ,]6A@xX: ,]6AI8z6A'@6AL M6A@n4jp6Ae]tH6A` =x#6A@xX:]:vj~6ANQBuf6A@ sb,]6A|K7A@ݒ[$]7AqJ|K7A7UQM7A*-1Ol:G{[7A7\z7Z7ApxF`X7Aȅ3~6A1Z(X6A st(NXG6A@`^/ X 7A &rm97A]R/_O7A &r:%7A9] 7At|Z7A]m97A7Atɝ^7AeR/_O7A &r PBC+57AS Q!:7A$PvKj:7A@%:dxy!897AS BC+57AG7A67At6J87AGY'Q!:7A@{$PvKj:7A@%:d `6q6A7Hv6A jvæ `Y6A796A 56q6A2ӄN6A jvæY 6AT@Hv6A@Nī6A #u׸U/ 6A@/`Y6A7 X=h7A긕7AS*2-7A=h7A@!Oz(ŵ7A6t>/^8sC7A!utAIM7AS*2긕7A^bLV6Ān7AS6p-7A"p_[ 9AE@ q9A@U\ l9A@U\ |o9A2^+J1ro9AFup9A@BLLOp9ADʈIq9A2qE@ q9A@ YX_kn9A@{\na̗l9AeQmDm9A3֏l9A.Ɖ# 0k9A\&#i9A\^VM{f9A˰c9A`.cAa9A}b_yV[9Aa>O L*TU9A=$.nS9AR_!4P9A.O9A&MN9A@ LqN9AI*}O9APn{UHf1M9ACm0$M9A@WWĠL9AR?zG9AFIUN>9A>Jt>9A2$xq;9AѡcK*G99A@ [6Z89Ay/%(19A@k5lE09A>@U,.9A@Ry9h+9A+#쓑|)9As=0(9A@}M$9AKJU+c 9A`9A%kB7Ne+!9A G\&!9AoK>~^9A\x_<9A@b ArhP]9A.zGIm<9A@Gʱ%9A@Kȹu9A_QC9Ajjqx=9A6l4,O 9Aym'|W' 9A,jk 9A@@Z`p_[ 9AMTuծ 9A,=j!% 9AkRHq9A@yOoA9A@$ us~9AvN9AC[* M9A6‘,R9A牆7mqKR9A@DqY 1J_9AhubhJ`9Aaz#b9AX!'a9Aj(cO^9Ao6+FyV[9A@K2"1h*X9A@seQS9A@P.O%N9A@+g%, ^!K9AڼuRG9AKqEE9Ay1b ZD9A_:%"7C9A`{ zk+vA9AZ=Z5{=9A<77:9Au[Ҷ89A@-x[D49A|ɛpa39A-ƌ+|,9AE8nQ&9A@8lHz%9A7׭dD"9A) i"9A&3ya#9A@AR Y!9AG~{\u"9A@yÉoi 9AFB39A@?1r9AcK ,9AX#&rVf9Ajq9Arz19A@(e̩]\kP29A_ Zs9A܆"!O[9A9V.V09Az$Q4VH9A/ƈ9A@4C9A 239Ags(yi-9Aǘ+VsI9Av 9D ]$u9Aɷh©9Aj=ϸ 9A!􂀵@ka.9A5ΰmW=9AnP3s9AV V-%9A9/@ϓg9A> J"@9Aeq9A6ƪL%-9A3 m69A@<6U[`09A@Q4REk9AbT^9A@ݤ9A=!9A&r<9A#Zބk9AnEaI%g9A# s9A@7=R2K9A@ل 9AdXY3lh 9A]'@7o"9AˏZ#9A% K+9AA9A97*G9AvP%J9AuWL9A@n0BO9A@j#,hT9AJrS׈X9A J#*Yc9AG(|oh9A@^הl9A%,S l9A@U\qFmb9A@͘u4d9AYUkc9A@lAT:a9A ̈́nqFmb9A@͘je 6A. ])6A~r6Aհ>z6AH=RѺG6A. غ!6A bsiz6A 9<je 6A8(Ő;6A6A EWaڈ6A>Ger606A5 %h6A@g~ =6AX])6A <Ԡ~r6AհXx#^6Ai\ at7Atv6A` I~ȥ6A@y9x#^6Ab֕ɯG6At at7AuyjK7AKErt6A5 b6A`g4ϋq6A`4«*6A"(ZS6A` H{6A@e T6A%{Pu6A%#*p6AFق)6Aqώ6AFiD8 F6Abوl6A->XE7AUJj 7A Jsu 7A :7AUJH0c7Ar;ZE7A JsRږ:7A)kbF7A9j 7A u 7A a6A`?/`6A@ ϋq6A`4« b6A`g4rt6A5r6A@IB&%6AhyN'-6AXI96A5ͥ:N6A _+N6Am26As82/`6AjM;pq6A'lkFodx6AErF>B6A70XE*~E6AT=Pc036A@!/kh6A wXCɝ~6A`?86AB9&~76A {iw6A`(a6A U[zP?6ApqZ 6Aui.^`6A(\i46AL6A[-3^k6A)B 9t/6A@MA;26Aln ã6A)ϋq6A`4«H`~?7A1(qDXC7A>#(`~?7As1]t%A7A@W*rZB7A>#(XC7A0"攵C7A1(qD`~?7As1XN'-6A5ͥ=d6A@x4N'-6AXIv~6A S`]"6A@x4M6A=d6AY8D6A<r96A5ͥN'-6AXI`M[6A+-Si6A 8 6A+t͊6A7#%A5⽈6AO^!M[6A/3?d?6A 8YHK 6AZ)2-Si6A 86AW%"6A+ 7A +&Z5;7A}ip7A +&Z5+ 7A@}+5+  7A@SG+bי7A q՟t8Q7A WX 7A?  7A 7? 7AO\gB 7Ap2N-[7A")QZ* 7A d6f] 7Ar0,7AOV'_8+7A**I77A};7A (T|27A@}}07A N ip7A +&Z5Xpq6A@yWU7A|N-&6As82_6A h3_u@7A|N-&7AQ|W'6A@yWUpq6A'lkF/`6AjM;6As82X(7A`ù<q7A`k^qW7A`ù<zo@7ALC8(7AhwA.N7AO$ӆY$E7A!_xVj7A`k^q7A6qW7A`ù<`sA6AȈBB.@Jd6AMhU\ &v6AȈBBsA6A`ۢՅK6A?fyl$6A`! q06A@ob̉6AMhU\.@Jd6AP0dT+6A`_,&v6AȈBB:>b6AB7A#sɝ~6A`?6A`H2x6A ayRA6A#sj6A7( 7A<~ױP97A9F67A}>plI17AB7A_`R97AQz7Acg-6A^);n7A@yWQ/7Akw6AUm?ТlM6AA)9<6A'N6AOЫdbj6ALh6A7lB/6Aj)b6A)C096A:Nf^6AX-6At:>b6A Ǻ6A-+6A Þɝ~6A`?B:U6AifHYe6A! HYe6AMGcTjb6Aiftk`6AGG^6A@,mC-]6A`ݳ:Z6A@MrćzV6AD7B:U6ACN?œV6AtQtSX6A@~lʞY6A`j'r 갍[6Af yˤh_6AK"}?FE`6A  .wnA_6A`{&kXa\6A`]+Pv[6AYQ`TMJ\6A`uMqj_6A4!q%a6A@"՛@c6A! ;5d6Av /Jc6A[&~c6Af N"Ea6A!zSPd~a6A']G[.k?b6A3fYpZb6A *Bua#b6Ay\e6A-K6HYe6AMGqFpv6AڬL'8Af:-#r8AžTq_z8A@gi]8AZmR88Aa?t"8Aކ$]"8A_6o*8Af:>,/8AHO%TzPb/8A@] X08A@Um=j:8A@YW?8Ax26M8APFZQ8A d/ [8A@i󶊎89)a8A@ ?e8A-<p8A/ y^uf u8A@*b/O~8AE PhN8A@8AkcL'8A u4Tڊ8AԀ頇X!e&8AUKYgA8A@\i74 m8A@' d}8A {8AEB{8A@-z8Ak5F\z8Amz8A#HB|y8A@OB^uy8Aѷ^dy8A?\+Yx8A@dV!Tx8A@۩Dnww8A Ch^ORw8A@^gcv8AָػoGv8ASr.u8A@ygzNBu8A@y2t8A@? <:t8A{ps8A@AeMޅ0s8A@_@3r8AeN25r8AT=/q8A Vq8AgUr}\-q8AWtp8AML !јp8A,]@{;B]p8A0U(|؂u,p8A?Vun o8AE9zyao8A@cgCo8Abc8$o8A@/8.[fo8A~j粸?o8AԛT?o8A@c:Jn8AUn8A@jMn8Azñe|n8A #X#Un8A5d-n8A@Jf8 9n8A.ٯ?Ym8A08Hzm8Adh>)m8A/W4yl8A&+fgl8AħIm[l8A>"nl8AҌ^Gk8A@U|}2gk8A@^Oφak8Ak8Aέ7j8A@eȅj8AOL#9j8AZi8A2{/"fi8A@lA3[`T(i8AmFfYh8A%.˥nh8A@8ݲGch8A"i #h8A!+-g8Atʕ)g8Aڃ>9n}g8A@۔">9g8A@+ZMg8ASɉf8Aඟlf8ATNXf8A&)f8ARAx=e8AG/o*e8A2XCʨe8A jHe8A@X+'he8A@d//d8A@wD4d8A\bpd8AAN·,d8AfMcqJc8A@%eN#լc8A펼ԈBc8A|o@I8b8AtmkeTb8A9~uYb8Aϲ, b8A .ya8At*:ma8Aэ%a8A|9 `8AOЪ=`8A8a-W1`8A@͔E!_8A}l~x,|_8A,pt2_8AYߥr^8Ap=cĆ^8AMu٤?G>^8A@+C^8A9]8A! .`]8A@`Bn$!]8AU$8jgS\8A=)皩\8A_Eu:8[\8A [1R,\8A=\8AdYN[8A@7nq'Zz[8AքQ|bzD[8Amm[8A@ v[yZ8A}tp Z8A@XBZ8A5=xީYZ8AZ Z8A;ЕY8AVY8A% Y2 Y8A:AF=X8A"/dX8A,ቻ 9*X8A@J W8A+4)_wW8A3_Ο+8:V8A t6V8A2-TuV8A`9D*8V8A DeoU8A'7z~?U8A@p#+EU8AT8AR/NF8A cF8A@z=ĘuF8A}',F8A@J]`E8A@5@KD8A0tz eC8A@~!1C8A]B8AA8A$=?A8A>Rh>@8A@{?YI?8AG*73>?8A@'QBd=8Aߛ幔<8AƹioJgQ1<8A@qR<;;8A@[eW:8A4STg98Azދ88A@./W78AIB;S78A@#@i68A㨷-4+68AXH 58AL,R58A@,oZt}48A@v'48AV= fla38AmY- `#38ApXz+[28A`^A818A@%s18A04nm08A5+5,cnd08A-w8V08A;FYN08A=z 0j/8Afo/8A+ćW Ul/8A@ Hqv./8A b}.8A@Rh%r.8A@ˏOrc.8A -Rʔ .8AƯ0ЖW-8A@*ZYrBl-8A@y:ώRv%-8AbNP&v,8A@ر.,GdS,8A}q (t+8A#j^v+8AO#Ӣo+8A@U pnd+8A5Er*8A,Nm*8At+~)B)8A |~jT)8A*[{GB(8A@7 {C[9(8AJP| rb6'8A@los ~ {J'8A=-D}}&8A7ΐkR&8ABn/)0ٵ%8Aomx5%8AYj+G$8A@dx]+o$8Aho$k$8A,b2TU#8A AILK#8Ah]# M"8A+)ED=B"8Av-Kc!8A@cKwy 8A@ֿBQ8APF8A9wJ2ȑw8A@aj-1:8A][ N8At18Arj58AQz]b`!8AZUIOx8A@қqW V8A@/郙V8A@ 8A@=@n(8A>/=8A@El58AvCq8A@7  zN8AnO:X8A"q8ALE1>8A@ӓni]8AcB# B8AO(GK58AQ-8A@oCF0ˤiD8A.5ҝ8AW>9ԩ18AcS=K8AO]?nQ'8A}@9T8Ac=NC*&8A aEX1W8A, {GC<8AwI͑8A@ő K)Pv8Ad 2L$v 8A- MdN 8A@ex4M0 8AtSrM89 8A,N+8ْ 8AjN2" 8AMO 8A@ KUO@:g2 8A@kIO~p 8A)LOD 8A@3fhOn*]8A\O󯌷8A@IK;ON8AiiOsИrF8AtMP疑V8AT]P}M8A 8Q /8AwRU졢8AWAS&48A'Tg8AaYVn7ASqWfWyB7AOYU7A$\~P%7A@)i`QC7Aܝ_|cI.7A@I%hȘaZ7AUvbk7A-.oG[7A@@u{7A@QQdm{7A ~E_7Atq$M'7Ay8g7Å7AMJKݲV7Ar58/Ɓ7AكU =7Apȶ7Ait_i^7A@(7AN`Ub7A@fL4~p7A5.27^7AAѩrgIKo7ANoǶ{7AZ@y7A@9n"5V7A/f-7AK#n=kc7A9pyE57A@N |k ^7AN"7A@Dػ'%7A@Pt u]7A@@7A4g,7A?@S~EPlm7Ao5nh7A ybT7A5G):h7Ase7A\0 ¿7ATG]moq77A@SEi7Aenzj7A85OG_[7A"WQ7A /7A? m27A@ X%;ǒ7A1|p 7A@ip7AKt9.>_^7Ai[p2S8,7A@R*7A937A {Dz,E7Ag>7A@L+D7A&r&ٶ7A~1KiH7AiMkr '7A@p7Ӫ.e7A-?Rl7ASPd7A7)27A@] 7A@ \'P 7AojZE7A*v7A@k/b >7ALlz7A@\T#Z7A,R.GL7Ahۜ|ϣK?7A5t 7AZ>Տ7A@A6<*Ν7A8v237A@k/B7A2$s:7Ak7AHH$`.A~7A~Gt7A@7A(<$d{J7A@ؾSf7AoVO7A!7Ap+ʃ|7A@/:-57A27A~~r7A DJ7A@yE9M17A@Hb7A@s 37A@8LP,7A@6N?q7A~JH<_N7A0Ly*7AL(ߺ 7AB](IL7A) [7A@7A@:ҲIa7A@pcl7Aʘ0`V$P7A@o8 7A< 7A Q7A4 HQ7A@} E*47A$ Tr27AI&P7A@|MT K7A%%F7A6^7A/ E0,7A@BlsMSQ7AzId&!7A@۲]=˜7AD0^ 77A`kc_16M޾7A`4N_x7A:i`Z婾7A¢za ȍ7A`7Cb2vL7A@2Kdom"7A@eX 87A'Elfin$׽7Ag237Athno7A [ jC,<7A~vk 7A rld=7A`ne͂7A@6p A07Aڐ.r1 7A@M2xsʡ%7A5u@'H7Aa^PwIUi7Auy׏7Aw{_"7A'~7A|an<>7A%N&{7Ap C͸7AԧxŅ$V o7A 6emӇ+P@7AP̈"7Ae:ҷ7AYΔK7AǠ\:e7A@iG 7A`2Ǧy۶7A@ǚc7A@GRqa7A`0+I %7A1a- (7A.y*mJQv7A@vږkKH7A>&m-:cl7AHmh£̴7A}'h};^7Ax^ޓ7Am|?G‰ѳ7A`6)"V~֐7AI.1c7A R "7A5Æx7A\]}ذ7A;ͤ5~7A w%9%9M7AVS7A> Wq7A@q4,m>a7A~XU7A`1 ŅQC7Aqdi#e.7A S!J7A\q7Ais7A^2?Q#߱7A sW&j p .7AHӯ7A[)į7AXʽ}7AOn "K7Aoy-‹l{7A(뽨>m7A j nz`7AV O7A([1V jnP`7A`yfJ'oծ7Ag î7A+Yh!hҵ7AT7A (z 7A bU1y7A R ݃;n7A༫vMya7A%2B7A@ 8&67A6mN$Y-7A.?o)% 7A*Ī7A=:7AU7A@bxo~ԭ7A`!oȂɭ7AiY7A@v μ7AT'c27ARD{/]g䐭7A@iRᄆ7A`̝Z_3Y7A5^gWv7Aŀ׎x3<_7A;pڮJS7A} HG07A$v[E'7A 7A`PwǰT7Aۢۯ,77AA K7AWS,-7A THk+7A@LhT&۬7A\g$IҬ7A`ҹqC7Aj}HD7A yEM7A IP k7A?'m7A$A7A@ĩ7A~'ͱ |7A$LpZp7A ~// f7ATASyd\7AN Yl uO7A@ힲzs*F7A sn-,<7ASf;@27A5A }O(7A96|7A2!7A@wLҙ7AGγcɠo7A@hE{`7A lM65x7A ZMݫ7A`Wfի7A`in̴NJ̫7AdPϊī7A q*/`7A}UTk7A v~?7AE-7A@o7A@]76Ó 7A25^K{7A 8M$Dr7A`U6xqf7A`N8[E]7A`4r[P7AG JջB7Ar997A-OH_u.7A&Pݫ*"7A`ؔΛ-v7A }k?Hnj 7A`7A)^7A@]@7A`3<ߪ7A @wת7A[5{şѪ7A w]Ȫ7Aͩӻ7AeU`/ﺪ7A X]%!7A%nٱaϨ7A W:NH7AqoEӛ7A锽 `7A ::Ͻߛ7AqY恪7A]%!h|7AOh־Au7Aਥu$m7A@mtF_~d7A`ƿ \7A r/T7A+~qL7A@E|㗕E7A€y=7A p2*17A Y?*7A`:=| -$7A \7A|_NF;7ASv(!7A>M7A@yT7AX6=17A x7Ag^ 7A@af?y7A 84'ک7Aū5Xé7A OǃA597A`TpA*v7A@)97Av;7AW;-ʷ07A`' ڦv7A m7A +܉7A]oN7A@Z>7AMv L7A`fL\ئ7A mJ֦7A)ͦ7A&HĦ7AVZh#g7A@RW»ﶦ7ADPN@V7A5 H%\_+7ACZ]7ADI_R7AzD坖7A s̐7A/䗙7A<-43х7A!k&,A7A@iL,tI}7A`_[pbsTu7Aoiir7AkPo6Jk7A-, =b7Aԋ>t[7AgiU7A)WN7AY J7A`#L7!nF7AUoRDA7Au;.b297A3cXn17A 2& X)7A`qC:;!7A^;Z7Ay,y 7Aq,è57Aî#8x7A3f7A]c7A>ߥ7Aɒ|8ۥ7A )ZХ7Adllg˥7A{öYĥ7Aa!T7Av'鶥7AW8E7A r력7Abwޗ7A R-7A[_xH:7AgK5w7A`uD:*im7A:rla7A2h^\7A 5cR:4W7A kP7Ań DJ7A R`~6A7Ac07A-M(7A@X%T|"7A`B='7A{y,ۦ7A|T7AMY57A+4d7Ai EY7A'G7A@m L1&7A#<ڤ7A#ߧդ7A!C/CϤ7A'^T,Lɤ7Ap5iŤ7Ame7A eJHn"7A騳VBˮ7A@3ϰ7A`3S^ᡤ7A|}O!7AR%^"7Aj tS6Ə7A`//|ק7Ab$m{7A-*!+s7A@0+[Gk7Acve7A^Ա`7AlxW7A 1 WT&P7A[u}97A u617AGf H$7A mSp`97A`^͊2TX7A7A@6N"7Au,Y7A+V7A ެL7A 79E٣7A`oe4ԣ7AjU}Ụ7A cSԃ£7A}w񆹣7A|jC+7A pD7AfVIߚ7A1} L7A:e"FG7ADgTx7A@ڰbJp7A`1i.k7AxTc7A@ <XV7Aw' >R7AiR] 77A Oh% '7Au`5 7A 䲀긅7A ^ERP7A P|ao7AиyQע7Ac%bt.A7A`\ocJ7A`r'Zť7A=aV<敢7A7 ;x7Aףw^y7A y0 sh7A@'-߸*I7A@XYo C_>=7A;W17A@o ~A@Yix7A/R 7A(MX7A NJ7A9 \7AW2ܡ7A@]͡7Ah\37A9svT7AR|*|䏡7Ao@_7AV}Kp7A a~4 5_7Aa+7A qA3ʀ'7A@^J=@ʲ 7A`W7A&˝ 7A`o 7AQuū7A<͘77A\.(Ӹ7AQeY&Q7A`)݇\ڟ7A ˗ П7AZIR1̟7A`zDǟ7A@ WM7A=7At?H7A/mu'7A 41(7A`6y27A`劝7A ; X{7A 1< is7A^TM* J!bk7A H -^e7A`sW gF`7A1kn  U7A zPL7AlѪ ED7A SW @{I7A˷* ﷭07AJ sN +7Aക M7A( N7At [47AC  =Ϟ7A1+ (kĞ7A`gGO DwAt7A(Gp 7Aށ> q-7A@q +:͋7A9B ;̂7ACX 6z7A@Xs ȆYl7A` `a7A `% r6!7Aw~N7A I7AZf7A`?J7A\kh@؛7A 7A`/$s7A ;r37A@SF'17AR97ArZ* qG7A"H#7A+Y5-q7AؗF[7A RLC^XP7A Y~>7ASop07A <!7ASY7ASON 7A =V37AB%7AWH m7AaMK7Ap֚7A* ˚7A\Ɛ7A`lLA#OO7A ?7A4J7A Dl7A1?妍7AB,jn7Al[Y)]7A@T7AuPG7A*#kb<7A \#6B57A`.GH a*7A`oykTN}z7A@j7A$| b7Aj@(7A,V7A, 7Al{ٙ7A@[ƙ7A H|ṙ7A pzq m7Aj;@H7A_&\j7AAή悙7A`lC|&h7A`^eNS7AՊ!cd/7AMTe5%7A`( )7Aˈb =Ռ7A C!Zu7AtY_z7A_m>ޘ7A "G6w ט7A^v2%^ɘ7A@=*z07A6L 7A 7A@+ ML]77ASU #x7AOso7Ax()'Gg7A>K8=e2#b7A@BHiZ7AΏV4bS7A@ )Um!!G7Anzٹ@7Asfx,0*7Ace7A@@7Ah7A@,Z27A9 7A~h7A`kHIEޗ7A,mח7AgN ,ї7A; 'Ǘ7A`.97A`< R+µ7A `z&7A@L{@ZK7Aଊdvx7A0rU Zo7A?fpYf7Aua\7A qT{P7A`Ie*V[E7A!>p~1=27A EpߛN'7A䭄; 7AK`ɍ 7Aԕlx7A@&T 7AI@N]7A7A`%7AJ*Gd7A@C?S|7AO;l7A%ؖ7A@7&Mϖ7A5JlȖ7A IU? u7APp 7AUxl7A=a qv7A@2 jk7Ak I:jeSb7Ab_x^Y7A`C`yvN7A@ɻ{.A7A`ky\27A`="1c!7A K__7A@5SQ 7A Ke7A%A#e7A4 7A_iAD7A\-Qە7A`,#PЕ7Aeɕ7A`. =/7AO K'7A/tfɤ7A@FY`7AgHyI7A ,W?ۛ7A3Kk7O7AG9`v7A |:n7A hY!a7A`T7]fV7A)}daVL7A#9l³i@7Ayv)827A@I{+ jK&7A…[a7A B7u 7AS F7A`&!7A`[BOXm7A@6H7Azݔ7AJԔ7A7j:Ȕ7AfGS7A` u 7A "|V߮7A]T7A@;t> p7A} f7A`s HAۅ7A9a  u{7A0!Bj7A '~!`7A .!S9rV7A!P|K7A`ŀ!TK~A7A%}%"$57A)L]"3N3,7A^ "͠&7A_ "7A"{ 7A@<#܊G7APH w# ?7AE޽#ŕߓ7A G $Tӓ7A9$HÓ7A <$97A$^U`7A'%az7A@x%jc7A@S%DjP@7A(&l/37A R&%7A`&#b7A t&I7A<&7A@1&ӣޒ7A&Ki˒7A`'Q7A`m*'7A6'qZiW7AE'D{7Ags]'Kjr7AP'a{a7A`ĝ'r.P7Ae'cA7A4x'44?s67AH'ֱ<*7A ='hV7A@_' 7A`' ] 7A'-y_7A`Rs'(g7AN#'Jؑ7A`ET'#&Ǒ7A'S7A;2'plF7A A'44E7A` (H 7AS(E A7AHP({s7Ac'!(8KY7A ($a5O7A`n!({C! :7A&* (jP$7AgZ(Z7AoP(Τcn7A j'/7A@'s ې7Ah9'}ӻѐ7A!!'Đ7Ab'Q7AH)G'զzr7A@'M907A:'6e7A_',7Av'1_n7A5'#=Z7A`'(D7A}'Ҷ07A.8w',c7A=ߣ_'|7A\' Tf7AG4' Rޏ7A{S 'G8dÏ7A@u&)[7AX{&#Du7A8ž&Gl7A@zt&׽S7A@hW&hY>7A@r9&BA7AH&~C7A@ܠB%%7AӃV%e7A`H%cD 7AlK % `e7A`A$rR7A{{$ƍ@7A†$f鰴47Ab$:@7A`k1:$YS?17A˓`$*{7Av#ia>Ѝ7A`L0#~u7A`ɔ#R5U7A@pr#v7AңkH#n7Ap#*7An#%;}|7A 8D^#Fo7A@'" ,af7A7" W7A"AI7Alw"V?7A?U"ط?17AHC6"dT'7A`8?"M7A 6ʪ!Tߊf7A!e97A9!7A^=!97A !;E7Ap!-׌7AcpI!{>Ќ7A1!|ƌ7A ,!F7A 9v ?7A hd7A`M R?Ϗ7Afr Fӌ7A X07Aw r׳7Aqr ;Fm7A`Z rK7AU Ӂ]D7AJT,7A@H]4jH7A,"MteX7A $BԀgH7A.5+7ArT7A`h=?mH7A'q7A9+?6-7A`$܈7Aye7AũϾG7A D9Sv+7A`.ч7A^MBo7A_Ju<;KwR7Aٓ57A`OX̢7AC@q L7A+!q7A#A"=]ߺ7A b}"t7A3#Zij7A {#Yri7AQv%#ǃ7Aڔ&>0-7AaM((07A)y'i=7A*(Rm7A ,7Ag.C,l7A` &@0dҠ7A1,] 7Ap,1r7A1!3abr77A@4B3g{~7A[D7Ve]~7A#/9W~7A`:0}7A~v7<P&b}7Axm=u`}7A`x>gH}7A`]?euu.}7Al!@C|7AA2h0|7AQCuf|7A [lD;W|7A9+E t|7AhIE~8|7AIOk|7A`؟I8IA<{7A$JHfl{7A=7FL ww{7A }t}lO0n{7A N\P^{7Ad?[12Dp7A`TŎ 6p7ADp7A`ۓ$*| p7A$ϏZӤ"p7A@d~; p7AأSJ p7A,p7A@C/XC ˷p7A%p~vo7An=o7AdY<o7AŨ0~o7AA$FWo7A R Ukyo7AX.o7A qo7A o7A@|ܥdheo7Axɒno7AoHo7ASo7AfCJhXo7A` =; o7A*Q9o7AM"o7A`?oj0!Go7AIP+ Co7A@X.:o7Av[o7A/`3o7AZno7A`ؑo7Ae o7Ao7AT/Vo7A` "BJo7Ao7A`ouU#[o7A@0`zٻo7A`.o7A=Po7A mugo7A]T#pk9%bo7A5c)- o7A@I9&4o7Ayd1]o7A@"ro7AgJo7Aơ=?o7A 6o7Aw%z;37o7A # B+o7A`>[t]m*o7A`ރjv=o7A 㼹rG~o7AO ܕo7A`єjEy9o7A.Bjo7Ay0w o7A@)N3uZo7Aftη͆:o7AfYF079o7A;ze!Ro7A`G7o7Aa]5HB}o7AyXeyo7AKc7uo7A@jso7Af8ro7A,SZa#no7A |iko7A`4RN.jho7A52bo7A@ULHP^o7A`P{1ƑgYo7A}.qVo7A`±|owmVo7A@Xp)+{To7A/iTo7Aps+|Po7A@S-SMo7Az BJo7A`[a@!?o7AD88o7ArR\@S4o7A 1Z /o7A{CG9G&o7A@ H!o7A0! o7A${$[o7AZ(U&&n7A ԫ8w᷄n7Aj)u-n7A`ʂ-T|n7APpvn7A1/ ztn7A 7'Ion7AUI kn7AXHbn7An\åZn7A볫@|XYSn7AxzHn7Am!b@n7A@4&s k6n7A@1R/n7A7]Q'n7A+ n7A`j 5n7Au-n7A@Ryn7A@t+3m7A`OZm7A Um7AxEMm7A G+m7A,(Sm7Ag^@m7ACLyuQ9m7A@kO-m7A`ކU*gm7A cį*NQm7AUtm7Am7A m~m7A }Hm7A^n{M낪m7AKuܫ+fm7AǸf!ʳ[ٝm7A@$%34=m7A`^G} m7A xRΒm7A m7A N>m7A9vV߃m7AԠK|R/]~m7A `|[m7AQWzUm7A>!>*HPm7A Q4m7Ad3a*?,m7A5ʺ!m7AU@m7ABErNm7A '!=zl7Ao[l7ACl7A|l7Ag:l7A?z.Vl7A`ax-l7A ΍ 'l7A@tf:ƹl7A@ri 81l7A~ul7A2h5l7A,C iWГl7Aࢧl7A;μl7A Dl7A Cnujzl7A A)ަa^rl7Az~VRXhl7A&,=Vn_l7A@cxjd>Tl7A`~dNl7AlH<w Cl7ANoR4l7A`p)K+F/l7AoMY!%l7AcIGLol7Aq7yWl7AC# 9k7A) ҽL9k7A vŮõnk7AIh7TEk7A rJ"j7A`6 Ѵj7A L$m ykj7AK*J!j7A#xVmi7A`$lj{sci7AkްXnDi7Af d&*h7AbQ:rh7A r$sch7AF h7A8`zg7AeU!(hg7A`;#3g7Ak%lNf7AE3(xf7A@$?*8G;f7AOP,e7AWY.)^e7AF_04Qe7A` h2%*e7A (Qg4ITd7A 0g6R!Idd7A@C㒃%c7A 1r6@I?b7Am%Bb7AȷDR2b7A3ENa7AHG>Ka7A վI, b=a7A@jK)`7A#&{Mm`7AVOnF`7A,,Q`B_7A`RƟ_7A`N_Tc="L_7AW[V{w^7AUjXp^7ATZ2QS^7A:%\yj]7A>]]7A%FU_J]7A=`w\7Aw^WbCච\7As=doT\7AԮUfSi \7AoRmhe"[7A =jVBy[7A@ lIAu[7A Ymq[7A';m0m[7Aqmrj[7A¤mMxf[7A-"/m3b[7A@Kng+_[7A@1nԃZ[7A -_nV?W[7ADSn`R[7An?n_M[7A]snDJ[7AoF-.A[7A@ҷmoB R<[7Avoa5Q7[7APo2[7AVoi-[7Ayup ĩ([7A@>pRM"[7A[gpS,[7A`pqU,T[7A "yp*[7A@ q9 [7AX5q?[7A2}^qA(Z7A`#VqLZ7A|yqWp̸Z7AG rqu-Z7A79ruQZ7A`rBZ7A/rmZ7ADsZ7Aqs\;pZ7AsrdqZ7A5vsZ7A tSZ7A+tz|Z7AguYtsZ7A5t%l2Z7A Іt,&Z7A`)tm[Z7AFur׋WZ7A{XGugZ7A ^+zuofZ7A@gu$DZ7AR>uZ7AԊAvϚ'Z7Alv,ӂZ7AlwAK|Z7Aw*yZ7A mxY7Ag)+}72kY7A +S};WY7Amz}M]mY7A},Y7Am9}k!oY7A=3}HY7A@Ce~^MY7A оUJ~7[j"Y7A h~֠ܿY7A~kY7AI8~ݪOY7A=0~%@Y7AnաY7A _EEf ZY7A`\O[%Y7A\u+ďY7ALTkuY7AN5oY7A@p *ObY7A UN?\Y7AQNVY7A`mgIVNY7A@ {HY7ArR)hBY7A A\ 1/;Y7A`x &J25Y7AFRրOo.Y7A g'j'Y7AKB6nF9!Y7AlCcaY7AQ+1gY7Aq [== Y7A@ؘV.Y7A@wh9ZY7AEK[]K~X7A`|ߒq@$X7AJXaX7A`fgX7AO1ց?6hX7A1(X7Au%tӻ2X7Aତ$ֿX7A`{o=a9X7A@o`nưX7A@:.zf@X7A :6[͜X7AtlHX7A@|قuՈX7AйO{X7A`EtX7A.YX7A Üu#]SX7AgM_4?X7A ƒ%8X7A܃X7A332_X7ALFr0 W7A DŽ.W7A@BYW7A@%"RW7A=/gv0W7A`*6)W7Aj8ճW7A`F~ņ6|W7AV,GφސpV7AU?]V7A@y V7A&Bi|V7A`DK}I^>V7A@nJN+V7Ax'ZV7AQț`JV7As + V7A$ȇV7A@Yb҇¿!6V7A௱ #V7A"jv~V7A {twV7A@|cpV7A,r9mV7A꠾=\S`V7A;pRV7A6BͺKV7AQ 7 EV7AT6V7Aqs5V7Ag7n/V7A 50Ĉ>(V7AVZՈ0&V7A.#ѥV7AHbÖV7A2SnV7AtDacYV7A 煲] U7A5o#U7A@֨srVU7AYzH*U7A #ĉuuCU7Ad5U7A4/LN U7AiBU7A{>d U7A`ixT7AA󱟋aIT7A  %QT7A@wfi>T7AKȋ*FT7A;eˋlNT7ASWT$T7A a5T7Ah! ;;T7A<2m+(T7A@-"<eT7AMz8NvQT7A_XwT7A ` {J-pT7A@E҄?cAT7AqiƷ:T7A`@yrb.T7A0-9&T7APT4 T7ApLofW#T7A l,}VT7A_o0Kˋ T7A.:nГ T7AZ+݈%T7Acgڍ3+S7A`-.p1S7A@k 7S7A !fh (S7A@7LX^S7A`k˜X<pS7ATfS7A`9 ܎fS7AHдS7AB@^S7A@|/L S7A7mqbvS7A0X*bO3S7A vS7AS sDrS7Apl+smS7A AO芐jPgS7A<߫F3ubS7A@BҐX9R\S7A   UVS7A`SQS7A 9s2:z=xLS7Ayd`[CUFS7A@\=_@S7Aɦ;S7A y@БVσ5S7AY86&S7AgcvtR!S7A {{~PBS7AS2oS7Afaے S7A'*-S7AU2QS7A_{~R7A˕?/R7AғMR7A`>R7A@"&XR7A (LmA$R7A zAIR7AaV捔R7Ao*ԿLR7A`dbN,6R7ACO|V`R7A2R7A &ؕ<۾R7AK BĵR7Av#g2$0R7AD⣤R7A\{`R7A`)AԥR7A&!MH@R7A`LƸ=R7A2pR7A@6^ 0,R7AO/R7APR7A7fuOf!R7A`wu商R7A@ҥ JQ7A౰o(jPQ7A-gIplQ7A@ANr Q7AkᐐE*Q7A.1Q7AԹן6LQ7A 4kS4Q7A pnQ7AM?LQ7A& f$*Q7A@mȠrN|Q7AfiFajQ7A~OJصieQ7A h$F_Q7Ao7 XQ7A'zFݰRQ7AáMQ7Ah"GQ7AŦC/:Q7A`h=‹nP5Q7AQT$t-/Q7AKIuVG"Q7ACħ\$Q7A 71Ȣ>>Q7Av5_ Q7A RQ7A2cP5P7AN]9P7A`'ce_P7A;DP7A ŢTv^P7AK@r!#P7Al@RR(P7A$kػdP7A@E}"P7ANY.P7A ѧVK׻P7A `P7A Ҥ壅P7A3`6P7At3M/P7A ǥi!P7A;jeYP7A@O5P7AW`% P7A@-=P7A`7EQ!WWO7A4~1O7AcFO7A4MO7A tW ;O7AU(cyO7A`xck}UO7Ak|r0O7AHޕ~? O7As]BkO7A7Цģ[O7Asڦ O7AӵTO7A2i}PtO7Ah<mO7AܶE`CMYO7AUz, 4:RO7A oD]DO7A"F۠=O7A鰧W)O7A@-qKD"O7A9g@O7A>o0 O7A){%O7A TM ?yN7A@H̹N7ABk*xN7A9ؠu}aN7Ae8QN7Am. YN7A`qŨEN7AJ:ϨڿN7A_>@N7AӸғ&N7A@ HN7A[(ŜNPN7AeV:=N7A KDMvN7A#g竼oN7AKApbN7Av_ [N7A6jGTN7A>:e04MN7AQ$6qFN7A`\,ʩn]?N7A Lԩ1N7AP *N7AAʩ$N7AL)pN7ATcu+N7A@ʬ-1<N7A`'B7N7AZM7A[OM7A̚յM7A`Pq ֭M7A8NM7A%#xדM7A@k2}hČM7AJ< M7A#LP4~M7A/W.+xM7APiqM7Ar7TjM7A``|AcM7A@A(@~\M7AInkUM7A}qItNM7A:GM7A{īO@M7A =֫9M7ALX2M7Alq$M7A'žM7A1 eM7A9a @<M7AA1)1) M7A`֪; fM7A,Mv?L7A@ ``;|L7A@>riiL7A"|AkL7A@-h"L7A)T'L7A 2^ L7A@eaHL7AoͬsL7A)rCL7A`4MyLL7A:$R'L7A >L7AU!3=L7A`O3A#"L7Al:"gwL7A@oN4vTpL7A%aX8jL7A1_PucL7A <)q[3k[L7A`7r}HOUL7A"ͷ#NL7A+;myf@L7AUʩ!9L7A`]Le|+L7A`έr$L7A]5L7APTPL7A`X62K7Ae"XK7ApG4,v>K7A*G!DK7AnWYK7A ٘lK7Ah~}ǴK7A `OYK7A@iAnK7A@TޟK7A`lʘK7A)ʮ[m*K7Aֆٮ4}K7AF[2wK7ApQ*aK7A%![K7A I7z>K7Awh^"y7K7Ako5זK7A =ΠX K7A1wO2hiJ7AůJ7A%ͯƃJ7A@ޯW[J7A`SAJ7A$*%J7A=e璭bJ7A`1wT){J7AHuY>yF\J7A0ʰ/++VJ7A<ѰL@J7A=MGe,J7A G#c,GJ7AKVqJ7A`tb#J7An"]hJ7A)nZ-J7AױGQJ7Ae|4I7A4d״I7AS I7A :+bI7AYi[:qI7A`xC:-I7AD5ȨI7AZpδC(|I7AoAdYyI7A jsI7A 6w[nI7A1UbI7AL\I7A`e.PI7AOR4YwKI7AN}49I7Aixl3I7A}8!85H7A U84wH7A@r%=]ZsH7A '@L!H7A@*Z!'ݣH7A.{j{jH7ABO C>H7AŲ^DH7A@K#ӹ6H7A@ sH7AR; bH7A )'1yH7AEflH7A`yxfH7A; YH7A91˺0SH7A{1vWNH7A74HH7AU.$dN;H7A1VЇ+5H7AΛwGN.H7A@Iؐ)H7AX;P#H7AObH7AyϻꙊH7A 2 G$vgH7A` sQ H7A „XH7A_z<G7A`5n2OG7AխRG7AP 2/G7A` V}IG7A >P&G7A`P_CtG7A =x07G7A~ďG7A@8ﯽgG.G7A(f# G7A]OG7A@0 tG7A=S0G7A cJT րG7ALQAubzG7A`{|i?tG7A TismG7A ȾP妩gG7AE1J--bG7A`ܤOG7AyCc<ϕQIG7Ai~|^%DG7A ~,>G7A`̈́껿r7G7A&տil1G7A՜gS@,G7AߒΏ&G7A8}5QaG7ANgG7A@oK[G7A@U0PG7A@Z{F7AoC9:]F7Askkrd1F7Aq^<<F7A&SqF7A`;,CA*yF7A/3TMF7A@賓QTFzF7A` VzL"WF7ARK] w+F7AfZSF7AേD5F7Ahmo F7A*!~uF7A`-B8F7AA KaF7A@?1mĈF7AF7A@f@ }F7A@[xF7ANTrF7AǮ>9nmF7AWc/gF7AekȤaF7A )Z!x\F7A=п~VF7APBSX$QF7A KF7Ab/ek@FF7AU@F7A`tvt~\;F7A` N85F7A ;x0F7AG%Hj*F7A@E &F7A`3U(F7AVTS?DF7Ao\7\pF7A@ Q!E F7A‚NoqF7A"4H)F7A d6zE7A_b E7AuE7A@,Gt E7A)W"i0E7A@ ]E7A@|AƟ=E7Alݍ#/E7AiӄE7A׳3ُE7A`G0*xE7ADYa)E7Aty(VE7A@ }ʞE7A"-YE7APo?E7AcqƗﳊE7AIG |E7A A8?;NuE7A !}0spE7A@=QjE7ASǸD7AGD7A`hoQ D7A[H6D7AX.ZD7Ad/7D7A`jC[D7AR;c#D7AMzTwD7ABQv?D7AOD7AU#a[yD7A;C btD7A`I/xwnD7A`M@PuiD7A LqvcD7A_f^D7A ¯XD7AQچSD7A ˳MD7Aߴ%JGD7A̫FdBD7A"eDخA^$D7A(*D7A=Π-lg D7AXF,;D7A mb^D7A5C7A >" UC7A + vC7A/7v)C7AfC7A7O~C7A`y-7/gC7A ERC7A WA<.C7AOzMbC7AŔٙC7A@b; C7A 2G[ C7A@wԯB7A`H oBRA7A K|o3/=7A rB`=7ATY0( 97A`V"]"2287A@fu,#%w+87Aϻ )$yj77A+/o67Aљ*4'567A` =8357A >Np257A S"B.f47A!lG!u37A@O~@S27A'W3 X27AZY*!217AA`f17Ae17AQZj=}07A`ɓp0/7A |xt#V/7AH xle.7A GY{^0,.7A`  -7A Pd_om-7AzXL/ -7A@Sْ3Lx,7A!b,7A`+7A@r@q+7Ax%i/+7A ,[CMV*7A`Þ0?.3c*7A`I t1*7AΩܼU)7Arr)7A})7A==q$.a')7AuCx(7AH.z`-1(7A.DA'7A @Y}k&7A(Z]u &7A-q>qF%7A&G`$7Ai\835pz#7A}(\!!7Ah>> 7A@0Co87AޙH`jVŏ7A9n7A`K,ښQ7A>vz67A^lpB7AHq7A`-yS7AZ$9[7AcP%*7A{kOK4C7A "Lvd,7A f5\7AȊ7A Mn/7Ag,L%7Aޔ0GL 7A@= I7A!d 7AFr';d 7A u+{Rt 7A`A/LA 7A^3 7A!1g7KZK0 7A_sU;c^ 7A7#`@+n3 7A#E}+t 7AGr30 7A``7Nqg: 7AtU< 7Ak]8e 7Ami Hh 7AOXrB 7AQɉ>u7A<7A`̻$w7Ay8(S'B7A$Rd7A rPx 7A-7pA7A@7AxQ7A@%=7ArIp0'7A$0F7AU87AwD [̠7A 4@˘7A Xt8Sʞ7A&ɍ7A R=dU7A@V3n(7Adtێw|7ADwAeo7A hDJ/Vh7Aa7A,XT7A$#DM7AFRF7Ag 10C17A'nINv]*7A`Mo7AaQR7A8Q#u7A`ƉS` 7AE]]0D7A@Ed%07A@x=nK8t7A 4W7Afq07A$7A UR̷\7A@VCK7A%Gjd#'7A~h7A`a5՚7Aݧ7A`& "7A;fE7AJ7A TJ9!7A@".v=}z7A|=v7A3 ,vqt7A )5O|7+q7Ahh1,o7AsL5l7A_+i7A@m =4_h7A mBj'h7A.QǪ/ g7A@~4chf7A?wNXf7A`46'q$f7A Ub/4uk7A`Dtׂo7AF`r7Av:v7A@Kc64kx7AJD"}7AqouLb97A"j N7AX F7A`8 r7AjxA17As7AH#]7A\{@*iZZ7A9R7A` <R47AౠZ7AJL| 7Ao9'rl7A@"Z7A`|Lv7AjJ7A@ ~AH7A-,}7Ad7Ay7jR 7A`r)W)7Am|x>7A-!}7A3 r537A`-BW[a7A%Pxb!7A@oj%7A`7'7A@FsPKK)7AYN7)7A6;m>")7Aڝ0u)7Akm k(7A ᠡa;(7A>+<&7A&#7AFH6e!7A =_/7AMoF7A7-'7A@!e7A@`9ME?7A 1ޣxL$7As $G7A@ oGr7A I#!E7AjA$7A@,lV~7A LwY7A;o7A`G;H7A <47A@> ж7A@ 9eٻ7A ";kW7A@ݶ'N7A`RL b7A@A6[7Axy!VR7A@J{!XYG7A"Wd`7A`aQ?7AYhQB\+Ȉ7A_hW[7AV wG{7A<ˤ`s7A ͤbctl7A࢑`ll}ke7At`nڼqW^7A XxzV7A@Yz|kP7A5X.r-7A&7A y"{خ7A 6md7Agn.7A2jO 7AUϟ7A~7A@8LzIBb7AUbf7A e7A $Ϟ`7A|vG: -7Apy̕h7A~7A;V \r7A+ $97A jodW7A&0\ 7Ap©N7A`-%q{7A@w9Dv7A *S+i7A.DJc7A0a])SY^7A֠{LX7Ac {_R7A@D-jR 52M7A @ G7A j8A7A`Xlr-A <7AKd667AtX 17A2QD+,7A@&V&7A`)Fiy!7A5?7A70HL7A v|F 7Al67Ak>7A`.7A >7A@PMK`7A.sPcE7A6 g7A K 27A`54#j1D7A=bCO]o(7A@7A`d6T7A k7A)7S7AP@DZZ7A.oV\7A 󶐝pw7AW27A,]7A W=b7A|R7An#7A hY7AjBT$O{7Ay qv7A``IPq7A`?Mn7A_B>i7A*'jejs7AvQ7A`!B7A@Qg7A`0Sv7Ap|i;M7AM@'Z7A |uT7A'A`37AQg{7A@eS7Aw~7A+? ;aQ7AѩZ|7A@_)YD O7A bfvz7A`[rL1v7A НhLw7AƍS7A05%.u7A '~7A?NB;ry7A `*t7A@+eKh7A mc7A@I]7A@I܂kX7A 86E7AoјHM@7A`!A-k:7A.D}57AA2A>/7A F_v)7A5@U$7A0^ C 7A.⏗7A 7A_vxE7A6A:"E6A`T?ZY@}6AGz[46A%yu26Ag˨6A~Wm6AkH6AO sZ6AV'&6A?h;6A 95=6A@)Ts6Aָ76A Eڞ6Ann6A{Z%̋6AENHFN6A@\hvey6A^@s6ALՍ{L6A *wGjG6A+^4-6A߲)p&6A"g=/6A@6-M 6Axt1An5d6Apc36ALu +6A~hf6A3}6AW6 6A x.De m6A~(vM16A`Fa1с6A@J(6A`zmE56AjYe6A#`J6A7imuC6A[fsa'/6A@ɧ(6A&&=O!6Ai]:6AѲ!ɱ 6AXi6A dX6A ֿ6A>e!6A % d6A 9-56A@q9,6A J5Z6A4"Rdy6A`h:l6A|{?6A@I}06Aa9C 6AHb}6Aޭ^w6A@F-p6A;j6AHe6Aj9#_6A`5Z@ ׅX6A%Y> dL6A`}R7G6A_0`A6A@*9u:6A &צ46AlK/6A 3$&)6ATqT?sQ#6A@}#$6A r3j6Ae 6A 6A $}$*}p6AɳB 6A} cw6A q(6AR!6A?қG6A4 6A\#(~6Ag#9!6Aza:6A ,b6AqF;6A@.&yr?f6A@%6A@y@qHժ6A@u=6A@- oh6A 5Iڑ6A7cM-6AJM`6A n~6A`0&z6A`6A@m{d;6A=kV66A%QE36A ~vt*6A6CU V&6A K"6A`N u 6A *u)|6A՛ 56AdvB *ɧ6Ap 5a6A@HOʣ y 6A:-2 w6A`U z6A`=0 |#6A @ Ō6A 2  6A`WX[ Q6A@ Ir6A ;[6A` S S6A W 56A?Xo+?6A>6Al6A{*6A{6[6A *ܹ\6Aܞ*ȰT6Aۀ`)oV6A|CUN6A &]O6A 7?G6A@3kuvH6A@̭]@6A.CA6A R,96A`(Qh~:6A}TB6A@rbk6A폜iu6AO<6AMK6A` ,6A q4_+6A so:is6Ag2ITc6AsT$֢6AB\6AsQڀ6ACtN6A`t?(c~6Asv=NS~6A@DqC|6A`Y V{6Ak?|y6A@LZr*rx6A@l3v6A@t_]t6A :hzr6Ax].îq6A@Ecm6AiDG6A(TL-:6A`-L6A -vU6A/0.(E6Ak.?J=6A`\x.t|6A ,.p ?u6As/H6A~P/w6A m/L=6A(/#A6Aws/56A@50Q%6Anzh0m6A 0xe6A- 0fU6A8ec1?6A@CM1R6A f16A Ȉ1OE]6A`l11w6A`o12Ԡp6A"^V2|N6A@-2F6A t_3Co6ACgK3ط~6A36Ah3R6A WI+446A^jf496Aj347/6A^5'6ANE5|o6AW5}`6A@'56A 2,6,6A`6TL6A Q(6/Ѵ6A`+@A7`6A67x 6AY7kR6A@B(8C6A\Ô86G6A@fc8ܿ{6A +>9Kë6A3{9W6Az:$16As[:ZW6A@?b:6-6A_;kd6A0;Yvf6ALO;4O6A!<:ڗ6A ,N<J6A<;t;6A %6i=MEї6A/i=tɖ6Av7N=^ʔ6A@>“6A)K> 6A35>A6A >6A ,a-?6A`+?Ys6A%?i2}56A 0.@;-6AvE@l.6A\u}@}*6Ap>@1g6A`z&A4@g6AA_AihX6As A=8Y~6AߎmB;Q}6A&.R9B{6A`kqyB壒y6A(;B!tw6A@dҝCжv6A qSCbbt6AC|r6A@YCbV}p6A0D4 vo6A@VeD$vm6AKXDl6A̭D:j6A@N\EXշi6AFAJE g6A Ef6AGE ڔd6A8Enݩc6A`&FLa6Ad2_F!@`6A Fy^6A yF]6A]i^GJ[6Ab;GZ6A@&qGUtV6A@TlG~꼎U6A@DPH&S6APHՇR6A K-ai76ANQL©a66A66L-Ob46A*nL5426A@L-06A L_M /6AZY Mt)6AM(6AM` 6A`Ԋ"N`ꮺ6A |qN#U6A,7Oĸ6A.mOk6AV;P`f6AD=FP?h6A`Pj` 6A b/P/Xa 6A(%Q1= 6AVQ6A pRt6Ay-Rh6A1WJS]y6AxzSW{6AfS<,6A kTǴ)/6AT86AΟ.U}"6A|qfU6A $X Uq 6A`@VnD6AzqV`eF6A@AV~ٓO6A58"W)6AKKW I6A`_-W-6A ӶWu6A'Xjd6AAXX'Ye6A`XFn6AÅX6Akl.X< 6Ae4YdKѷ6AL9eYѵ6A FYI۲6A IY.6A`d0& Z96A@QyZ.>6A ZG6AuZ6A\[LAm6AȝN[9|6A@([16A, [3d6A@Ծ[K_e6A?h#\@D6A`S\!r6A\WБ6AKE\ S'я6A2\&4Uڌ6A\62]():6Am2c]e 6A@] wE6AhW][6A>b]06A77^0~6A "r^#by6A^Qkv6A. _6t6A~?_:r6A`Ww_ǪIn6A#_"l6A k_\i6Aqǐ`uAAg6A 7G`YJd6A``?Kb6AA}`/_6A `$\6A@Ja^7Z6A6|VaoW6A@Ӊa4JpU6Af6a(Ѷ)R6A g\a*ƛO6A&bbL6A ~(YbIJ6A\xb8NG6A`)ibdrNE6A`bb.B6AwS:0c?6A4`c@<6A=Ûc%s:6Atkcsh,76ANech-56A^7d.6A?d ,6A9dҹY)6A z eЮ '6A uao:e$6AeQue!6AKeAw76Aq}C f86A&Dfa6Agwf`o6AgNsf" [6A3?f>d 6ABzgΝL 6A@3Igʒ16AcjGzg,t6A0[lg!Y96AAgB6A~Ehn6A@J6Lhu6A|ha6A2iF6A8NidK6Ajij6A`EQi|(6As~jw16Afwٹjl6A`^j<6A@k.6A0gkox6AkƩ6A["ly6A@~ln^6A@ܴl. 6A`n5rg6A`z=Pn6AOo+]}6A )؂p%{6A+p'v6A2[#p t6A`Aqp6Ao3EqrB]6AdxrY6AɯrV6Aq]rmS6A=s|N6A ki?sE;~>6A%?tuڼ:6AjtBZ46A5#tA-6AT#7uH6*6A킌bu=3&6Aòut"6A`UuNj6A{uwcC6A`-)v356A@=Vvˆi6AEοvʀ+ 6ALd$w6AJwR6Ayw6A@i=w-6A״x6AJJxJ^6Ax{F6ABxC6Ay%yRC6ADy;6A@2pyf6A`UWy-6A@tky9l86Adfez6A jzhm6A 3z=6 /6A#zo6A ,?'z/%Q6AM*{!ú6A;4X{oU[66A{%Rd6A-rh{a6A b| A(˨6A J|Ȍ6A ܚ|I6A |n6A (|hk!6A@" }Pڕ6A s6@}{W/D6Ak}6AC}3Po6A`}(6A }~r6AC-~S6A `~z6A@Ǝ~^~w6Aۭ~Xs6A@T~@o6A&"Fyl6ATbN;Xg6A !I|)>d6A}n/~`6Ai\6A {W6A`*/c>hPޔT6A pq_P6A >pL6A`BʀH6AJC<3`D6A;+A6AD-OWƁ<6AKxd/96A`T\46A CZ16Acjɩ,6AWQG8Z6)6A`r*9$6Aƽ|a!6Aӂ[6A 6<6Ad-}6A_b\p6Al 6A fK6AHNq6A?_v6AAwKL56AJiv6AQ V 6AZwׄb6A@E3)X6A@^h66A SG6A5-ug6A&6A/F~6Aâ@m6A@lՆ86A`f-I6A8/8ʞ6A`?︇ "6AGYz6A uJ@[C36A`A;eE<6A4X6A)̈uG6A@o ;7V6Aw8+z6A s }kv6A&6kTi6A`xϒ2_e6A%>/a6A5G\6AGRYS6A xΜO6A LϋF6A]*4A6A@"QI ^>6APn|(&,6Aq4XR[(6A`z_ICt6AXL+6A xH^6Aǹ6A`O\FM6Amڰ>@6A!#it+b6A`蕚w6A@kO$)76AG((6Ad5ѐVFJ6A@M..6A TSvP6A@Ӏy]<6A`ɖ~Ȩ6A)oc:6A 4ǪW`\6Aೌ}AW@6A`$Mْ b6AԌ6A暼-6APS_~6Aзjy6A@Փdnu6Amp6A)tg6A]Tȅ:~']6AF Ҕ(rT6AO-'O6A!T@$ 1K6AdM)SF6A/A6AK֕&<6AzCe*a76A@R,ߪ26AKRى-6AP7G9$6Ab;͖/AΫ6A@6A9)!?6A˗ F6A`^γw6A׬ZTTW6A1L4+6An}06A{v`q!6A>s.6A` U6A i. 6AY^]L6A ! D9K6AzΚĻ6A>˦+6A]~@6AƩo󠥥6AMgϛS^6A`+|6AMQ΍6A 0C.6AӜO4”6AE/߶{6A@hU(w6AɃ;Jr6A\fp.i6A`$6A`O 6A`luOW6AFPi6A@j?rGC 6Aw e6AC,T6A ll 6A@ђ`#6A%eGg6A   ‘6A@p456Alcl%6AˉP6Aauޓ 6A $!K6A fsx$6AW6AHǣ6A֓\6A .<5/6A`!eGs6Aݱv6Aڤ 6AU&󍼂6A pG4}6ArmUx6A@e+s6A*̼u Voi6A@S# zљc6A1/^6A`ZW݌X6A*ƸS6AWlM6A8\Ǧ¿}'D6A!R7>6A S5U$96AU.[N36AكU-!.6AGK(6A -ʧem#6A@k6A: 0j6A`88C6AnB`ug 6AQU6AtS6AڬV 6AC7Fpv6An&6ALp5Ƭ6AN )6A\I%|QP/6AT#=}O6A@}96A5QY36A@%vD97A 锢7A B+^9el7A vC7Avbt7A zg-|7Ayc`{7ARSZT7A Rr7|7A7r ~7AEW#8M8n7A`Ћp7Af[![07A &K\U7Au7AYT7A 5E7A~i@:h7A`E*clm 7A,z7AkI%Ej7Ap~"𐎡7AVA:љM7A+4LD­$M7A$Yvo-7AEiQ`7A&w7AEK҃v7A V767Ai*]xPi7A [Dj'%7AybTQ7AEw⏯7A`; q#u$_7A54=k7AA- [ښ7A`Ԃ.7A@'7AmK,07AED}쮟7&7A@ǔA_z7A7ذR7A¢+7yH7A3 [XNy7A` 7A@(@ [I7A@ YGw7A̹tSSh7AIr,J0&~7A˰RHwP7A: -7AO 3j7A'Z φ}_7Aۤq<7A-}G7A`p7A96A3 7Af+wj[7A=lNl(t/7A`ӿ. 7A@ fly*7A57D xY8AhJ28AQ;7Ʈ8A\~#t# 8A@&Z=B% 8A2Er8AžTq k7A#JF7Ar"U1ӑ7AY57A|ƞ7AU{7A&2p<|7A`&  k7A#& 7A`QNʜx^7A 7A@Cs47Ae*臽7AuM + 7A )&07Az} 7A >I@ 7AF& 7A`QNʜ&`5Aॴus&P>6AW5A/5|c5A`f9 7\5A 5Gk5AQu-d95A ,A45A`ԏV9k5Ae7O5A~Xҹ o5A F}g5A^=шv5A@Lj,gW{c5A |S"5A@|&Dߊ|5A |"(} 5Aw<$b5A;LBӢ罸5A@d h5A5E5A$2j*>5A`qk&A5AjC :5A`$~;v#gV5A9v=݃Z5A 5A;=5) 5A %x졌5A F^7K5AB^lx6A@P5{z6ARYD:$6A`6 6A@r<Q6AC-kA 6A}*)8 6A`:t\AGS6AݏXf_6As%/ݤt56Aw"ՎaI6A@; 6A Wj6A`Η{Aӿ6A՘_6AT—n(6Aկ gGQ6A@[n )E6A@Mz݇0 6A {ҜV|!6AܘD|*0"6A sJv ye&6AI5Bչo)6A`nʈai-6A@6<&16AЬhm!16AHMM26A>p/ 56A[Z<76A W86A Xee86Ai=6AA^ Mϰ@6A@T o!uA6Ac01FC6A`ê/]?G6A|,AG6At|CrD&H6AcZ>K6A@Iu"P6A@&-͍0U6A`̮[bYY6A* KgaY6A&\S6A`"VSM R6ATSm PB1o6A.-t6A"0)v:+z6A@Ħ'8ٛ{6A`SD"/6A`|4 $nt1G6A tm{:u6A +d$D9?6A`Hw6AD.6A 7~eN~6Ap6A Ry|6AB|6A # %W,v6A`]Ǧ66A൸$mKBbk6A@BQ\ D6A}BrD6A@8*qP>6ACN] x66A&;_&6A ]66A&NJ\?qk6A4|pzL1o6A`Wd2^6F6A 2yOn?6A@@T>6A@?I 8,@Ŀ6A`\<]J;6AO|  6A5ɷ낡*6A`R6A@ vm6(޹6AmW*6AK5g6A@K.6ATt\G6AHmۜ6A^c]^d6Avj6A -MHz6A3c3Xu6A\Ni6A z |ud6A  ^8BS6A oXM6Apyt<6A`Zfu776AI4\&6A@I\ 6A@Կ!6AW{v6A6Z4U6AaDhUZ6A^!<'6A eU>}=ܶ6A !b4N˶6ACNƶ6A`6A"Is@}6Am@my@6A0a<-86AcB%6Aڜ6A3$6Ajfŝ6A %C%66Ap)L䔶6A|K}!\6A֝P6AknqŠ6A0 ~J&#ew6AZDaJq6A@+h,m6A࿼3pg6A`c8*b6A@[pQ]6AɌ,X6A]*?S6A@ҍLސI6AA |D6AeHg>6A?@O8I96AJݜFA46A 4) i}/6A":)6A:zƩ($6Aւq6A6Arob^}6A r76Ad &^B 6Ai7dž6A(n6A@17|þPK6AQ3'26A@"gص6Az,ӵ6A@,]&q͵6A\h9*3ȵ6A dw|Q56Aأɷ6A'ڬqR6A cWr榵6A-6Af#6`J76A@+16A+6A tMz%6Ayc6A9_6A B6A ߬(L 6Aφ:6A/mU6A@sQ 6A_6AO^tS6AP? ܴ6A`!^ִ6A`;<E6AjP6AG{Zfw6AOuWq6AlbhQj6A@d6Ae[.!X6A^ R6A_Eh]J6AөQ=6A`4v-76A31g}06ABp+*6ABgVDa6A*XD=6AOt;>36AHy 6A0IW6AY=6A 7LV6Aj4N6lB6A@И06A.~6A vAnwR۳6A (\dԳ6AIUD/Qγ6A`1"Ƴ6A- B6ATęֹ6Aef.2ó6AAh6A[\6A ,YI6A@٪Ѯ=6Adeؚ`)6AX6A`MVx Ã6A~,`e}6A{Utv6A>c`a6AXn[6A:@HLF6A4Ň@6A#UM[$6AWsz6A cwx]26Ath^{6AoU^ 6AԯMmآ6A@ǧڒ6A`v6A D}_6AOKds Ҳ6A`309Vʲ6A RJUwò6A`f;H6A a`ӵ6Ak˹D-Ȯ6A`k 6A0pO<6A@n$tzE6A`''zCj6A A]h֋6ALxKO˄6Ahp~6A@}_@}\v6AKZ#h6A`svIpa6A`,s9[6A7,1ajS6AQb+}tE6A}}d@>6A 06A~4)6A=L6A &<6A *]b 6A6A @6AO]6A@A6AkfC56A$r3 6AjZA[q۱6A ~ibԱ6Am6ͱ6A#]ű6A@2A6A@jԷ6A柪h6ADʆ6A@J1\I6AajL6A/M6A80xF6A 86A s10O16A`~EA$$6Aeq6AΊUޏ 6A"8U6AmFV6A2-6A6A۰6A@w٤N԰6AwnŰ6A`h⿰6AOc66A |6A)6AzDC6A LbTv$6A@=j6A`񬆰6Avx6Ảm5x6A\{r6Ak6A(JY Uc6A Jss\6A@.whW6A+  P6A $o,&6AV%V@ 6A@U]C 6A̮]zjp6A?O|U7 6AVE}H6A橏; 6ADٯ6AK+tү6A)ҵc><6A` LNٮ6Ay`6AM6AT16A`&͋6A]}6A0@'lKBv6A` 1h6AO=%x]a6A %{Z6A.6S6A0 -"L6A'K:e;TD6A =<Or=6AEG66A m!G@/6A;OG/Y(6A@KPx6ATL!>6A`\@"6A_@ 6AYܞi6A 7mk 96Ak^%6AGtiҮ6Az7̮6A@eԳ6A V?G6A,>6Abό6A@wM6A4Ǐ96A1~6AQUw6A@U Qsp6AR7ri6A٪(8a6A`ȧ S6Aly˜FL6A%6/=6AZ76A\06A@`| wLj(6Ay!!6A2>&076Af 6A`{@66Adʫ6Aa$6QH6A@?|}A6A@YJL#@)6A>q6Ačڭ6A`5j.ӭ6A^?C̭6A@7PdRŭ6AK u#6A,~Ah6A @~%6Ab塭6AvQz6AC|}Ɠ6Aks6A`uBF76A@x@v1M06A18.(6A$:3~r6A )JN6A#r 6Aɣ=6A4w@ )6A\ ןu6A@*j6AK۬6A@qяԬ6A(X,ͬ6AsrD)6A>6A4 k'ϣ6AVHFW6A@f}=6AͷzePU6A326Ai*y6AۆPwq6A "x>j6A@-x^c6Auh9V6A:XzN6A ;qRuA6AcAF:6A1o46A.!?,6A@)Te6A Ȁܟ6AXrCF6A@l+8 6A"b 6A`8`6AD6A X I6A:&!߫6AE:ng׫6A@_Inѫ6AD/qNʫ6AOC A>ë6A@i hD6A t%>86A`խ6A@kn[r6Av+6A@WH6AK܊6A@? )6A` rm|6A@8t6Ae4$8Nn6AF?h [6A |9616A 'q61TB<6A(3R٪6A*"aҪ6A@$A˪6AD.1ê6Az76A(3 Ե6A@B%6AV 6A@7 3x6A`KF6A)oڒ6A4>'6Ajfk6A#5ٸ|6ALZLv6A`nșn6A5-h6Alz֧z`6A:jZ6A%59SS6A uC6AAKzA=6A`56A)dza/6Aj/U(6A#PB!6A ̏6APLu46Adp 6A`^#6A L#I6A$^,6A ̑W,w6AT'6Aq<Xک6A`G?` ҩ6A 9̩6A[,ĩ6Aֺ6A`f6A`կ=Q6Av G6ATx2A6A hpC(6A`rk0m6A@ Lj| 6A=lN6A@cv9}6Aೀ,^]8/w6A]zo6A@v8_h6AYg*a6A^>YY6A@xtS!>S6A-K2K6A`PMCnE6A/'Lk}=6A`IF4|O76A`>Fl/6A1t@(6A@S.8[ 6A <"u^6A43E* 6A`ļ5Rd?6Au-0c6Aig/S 6A} 'ڼ6A)B6A"  ɝ6A"'٨6AɁ~Ө6AXg!j̨6AuXI_Ũ6AZY6A@^@6A`iHݯ6A ]c8*6AvQ 76AE(Z ݾZ6A"K YQ6A.y;6A ^Lj6A %,,ưw6ATo6AܧKp=h6A;?ĥa6A c,{Z6A`v=>,T6AEZM\L6A@HnD6A~>6A`ީYX66A'(m06A (6A |*2W!6A@ 26A`J66A'%(G! 6AXh6Ay%(6A@‘I6Az6A kʆ*6A`"cڧ6A -Vӧ6A{y%Ḑ6Apŧ6A! u6A@o6AGU6Agf6A.r66A#kdt7!p6A QFZ6A nS6ACZ E6A*x >6AH66Ai!2ݪ/6A@ĪF*)6A|1W1!6ACru 6AO. .6Aږ%6A\6AvUV6AEtw+6A k*#ۦ6A|qDpӦ6A`J ̦6A@mG.ˠŦ6A@& g?R=6A`RQѷ6A`)pZxA6AOW6A N)0O뚦6Ar&]$6Aઁڴ \6AcN%bv~6A`guw6A@6] oa6AȳOqe=76A joq6A`k;ּ<0r6A`\/@G.Ҍ6A@*Jx6Aћ|T 6Ayfd ՗6AK W6A>,uQ6A?Ҵ^ԇ 6A@Lq06s6A d_:4 6Ah,MT] 6A`;zcx^6A`RY@6A6υ6A`e F6A@ 9!n6Ag}8giM6A$\J!6AೄO/n6A{i#b6A@WJвT.6Af~}YuX~6A=gb_~6A[&!e}f}6A`¶KE:%}6A"ǻVE|6A兞=.|6A@> ޻1N{6A?$%)x`O{6Au7C!z6A}#X*kz6ADjkay6AGtIvSy6AO˭-Zpw6A8g|(v6ALiu6AXG;t6A Nt߰61t6A}Ws6Am+TCr6A>SD3Zr6A/yfɸq6A`diS}^1p6A``y./6Tp6A#o6A@_$[trIo6Acgycn6A.΄an6A e9\"m6A`X:'&l6Aq8,k6A w x^"%i6A`.J i6AYb/qh6A->2_h6AQ7Hg6Aƭqf6AV5JPf6Aū)f6AC; (e6A<*_ܯfe6A` ,Ce6Ayq4d6A ^[G bCd6A-% VX#c6A" !m c6A@}|BZGCc6A@whb6AlxIb6A@l`Ob6AGb6ARS ːb6AֵT"8kb6A@܉$7b6A`1R(HSe6Aœ*Qqe6A`v2ve6A&0]qe6AjS?@?]e6AVCo@e6Alad6A H7 d6A<#ttd6A0n)#d6A`=S1c6AK0os1c6ARʹb6A/Ca6A|:8a`6A--n`6A7`6Avօj_6A`XP5w+^6A`߼RM^6At#q! \6A#)(p(\6A`k#Ne[6A 'Y}0q[6A] :Z [6A!T1垀Z6A[TPZ6A`#Z6Al++]Y6A@$,-T/Y6A MVaSїX6A5Эp{iX6AvqX6A;џlέ}W6AJmk]W6A`&bW6A<+o0V6Ay+jV6A09 V6AF?߄U6A`}:UU6A`~uGT6AzW$T6A`i H/ qT6A(3JET6AaʻS6A`$ӗJ$R6A NΫ$R6A5`R[.Q6AuBu}_P6AquF6eO6A\j 6xN6Aܟ 4M6A챌ōL6A!b./qK6Ag$kmH6A:F@vG6A<(o){G6Aq@M/*MF6A`~ ;0E6Avn&#'aAD6A@]H$6xC6A`^2߄%ޅ C6A&.qqMB6Aॴus&p A6A Ƶ*& ʖC@6A@;&c|B@6A]%)?6AQb$Cb>6A`A>@${>6AX#B'+=6A`"oz=6A@{%'" ;6A `Y_0:6AR  96AFp=96A `76A-/g+76Au6 L|66A`4 _66AYA=36Apqm=26Aysƫ26Ak ƹ?16A|KB16AnV06Ab _&S06AX^/6A` C!B/6A`f/z9.6A'$aM.6Ao1h-6A YL[-6A$+n v,6A`&S9+6A@\%$+6AҨ)xGV*6A 3sA)6A@;i\a(6A@I!Z(6A@& Yd'6Auڗ&6A` n\"l%6A`-EҲ$6A@cq =5#6Adr"6A@C.)"6A`L-!6A`X !6A$8آ D 6Ah0XVn@ 6A@Waj6A`GjJC,6Av}UsIl6A F@'6A:k6Ai͍a6A*Rh6A{ 26Al8]^na6Aif6A\O6A'=:B6Ag{6Aft uП)6A@v8uʂL6Av2l6A@Ѽձc6A81O" 6A@ EHG‚6AoSm{za6A jv6AVH2L۝6ASz=6A#;%A[6A@LHRh.6A : x6AS6A`Ž )6A@˘6A2zO6A7~*2c6A[3n6A`K' +6A`ݼa֫6A`>&@[F6AH.qh6A0/}EP6AFz_6A@> 6A 9M3 6A@F˳R 6A`;k24 6A ̬ 6AN{W 6Asn6A@M]6Ax0=[6Aj6AҶ#K%V-%6A&yZj6A`>hO؎y5Av{5Ah.>5A~{765A ),I5A\§w5A@E1WZOxY5Af>1N5A@bOQS͠5AbSt?5A`ILqo5AU",$5A` io5A_hAtb5At4?5A@}4D5A؊f5A8]b5A o5A`8'ñ?/5A F (QO5A`;y{5An(Ame5A:U)o%5A_45A(O5AA;5AU@[q5A#W| R5A }Y+)5AV*Gfn5A5K5A%2Kn5A7ǕtJ`5A }#;5A`TED5A09c,c5AF|i#5A/=[5A/<\k5A`s5A6hoQ5As%&5A)fȪ5A 5AV5N]5A` "3j5A@jεt=şS5Ae^#,s5A =ź;75AF!NS[5A`94t5AỊVQ5A|qI<5A\g,5A`L\5A "O~`5A`٦h]5A`eL55A@=&oQϺ[ 5A $=U 5A@we.5A&"ɯv5AALV V5A0î6.5A ʉz5A (l6/u5A9.5A@m*~ͭԛ5At'W5Afa[L55Aд`T'.5A,Yq`!5A8_è5A_4hE5A)n_ 5A u:_{5A@^ҕ5A6]v5A`KO]p5A9]:5Aug\Q¼5A`>X\;5ASWX[Eާ5A e[KȜ5A` [R4k5A ,mѩZV&ׇ5A`sZ;~5A@,Z^}5A A~'Z6$u5A CY¾i5A`;~|YLd5A`d=Yo?a5AY$_5Aub YA:\5A 3{Xl2W5A@R7XUk(T5AUX M5AH=Xm2zE5A0XWΞ/=5A yW105A&xW7&5AVU!5A`VXV55A U$ 5An9bPUd5A Tз\5A}^'T%u5A@ S+5A@>:S#5AǐءRLC)5A`ʷ+RA5A`kQ*<5AݼZiQP5A^-Q5A!PbH5A 4ʃPab5A PV8;5A`(5A`>p5A9=5A`c+<LV5AK |I<к5A`~];5A>1;5A:%ǟ5AoE :s蔁5A 9^1$5Aqor85A@!xC7mMg5A`ZE3R5A8/~5A;8-Őw5A )+.*oe5A`kN&[([5AZC$M5AH"sqs<5A@ z(5AD|H}5A eXò5Aif5A 1LCw5A0455[5A`u"3:5A`=5Au:8q5AK՜ T'O5A` j5AE^w0 5A"0_9<5A`+5A$u:5A@BOiY{5AV%6p5A c2l5A`-Swgf5A`Vh]5A@[i6g.5AY^5A`S5AyS5A`f5A`AV5Am(QŚ5A`mX$Q/dt5ATtwN5AW[5A P"G5AL&T5Aa5u5Ai D5A`lE5A[L(&m 5AV)s5A@-6}Q]5A:+vvf]5A81ʭK%5A 2.J@5A`ە9o7#5A~^`x5AƍڷB r45AWնit5Ap"9:55AŤ.Y5A`!QY5A@ݒ9 *5A[!ðX5AlGd 5A` PpFX5A`y|zJ5A@u 'Ky35A ).ި 5Aग¦4+#5A{XK5A@fZ5AYXPk5A@-ɨu~[LB5A\h-5A`5A/5P Ki6A)wfw6A.qt2t6A.qtt!6A`B"mfw6A+j]6A)w Ki6A 3[6A2t6A.qt h! 6A4KPS7'6AAa '6A4KPS/՚6A?>! 6A`;5٪6A X!6AAa%6ApGu6A B=%e6AviB7'6AM'6A4KPS!P&7A Q18k#7A`2%F8' 7A Q%%7Aa&7Az\i7A`2%F18k#7A@$lR] #7A !88' 7A Q"#2>e׸6A`ST{7Aԭ/{7AA7A@ JZT7A RW6AX!#2>e׸6A }~_<6Aԭft6Ag1|Bw6AA\6A@\G+/X6Ah:r8_6A_F@I8A6AhW;IL6A8ѕg5L46A %t\@6Ah6AM=/o6A@@: 7qfJ6A`(x8H@g6A`Q')ڥ6Ar:H?[_6A`&b6Aؙ#`x6A@H9BAGژ7AsuXEk4ު7A@[q;{7AA#P:x%7A`%'In~+7A*7A`%'IT[(7A `:x%7A ~D &7A`spʺۥA'7A |n~+7A*7A`%'I$q6A,!ⱦ6A@xcK *T6A,y~6A QQ>a6Ajx306A@ ݊?EN6A/Eaq6Au<TkM(6A@xcKdk6AI3/PC0q76AEZ[ -6Ag`'nSB6A(!ⱦ6A`֞*T6A,%`!8A!̉8A@~5 a| 8AVc?nO+8A(hCU9+Ѕ8A@~52u38A/@A!8A0_!̉8A$2I8AԿX!8AU$]Ea| 8AVc?&X¹6A!m)@6Aed3m)@6A6tx.g6A!y8$6A=+6A`[jS?=X6Agö~w2y6Ap@ƅn%26A +5{X¹6AUc6Aed3ھ6A _q͔9"6A Mr6A F3S [6A@LIFJ6A[đ6A :@6A@*5cm)@6A6tx'RF28AUԓjې9AnPL'8A uܶռ8AlTֵk8A >8Aѩ/Ô8Am#6@M8Az+C8A@PD]8A&१i7•8AKLcƘti8AЈ%k9uV8A\UJ8AEڂ!#d8AAfvp`r8ATM*|8AJpGt: >8Ab4Dۗ8A{\ҽ8AzA[68Ael|6<8A#Boׂ,8AR*;0f8A o:ˬ8A[a+ccF8A1[ xpWq8A۔]68A2M٨uP| 8A@ (x48ATx Bh8A@b]ٻg$>8Ap 38A?c8A@%Mf@LL*8A =0;-ǭU8A@EB8AhD(K??8AXX@ O8As9"8A%K8AQ}/8A["r8A\M98AJRD8Aմe48AA[=8An8A@ؚ|Jʾt8ArwN8A ]Ϝ39ACTH9A@7mf6>9A@Nxvjy$9A@f[h9AՎJ\G 9A@RS49ATVmW=9AnP@ka.9A5ΰϸ 9A!􂀵R R9Aa)9A8].jې9A9A@ђU'B9A@Cbgl9A@Ë}9AdK @&29A<]:N9A[*-Vq^9A@lN*[ܜ 9A@Dc Q 9A kT 9AiGIҏ9A5 9A@|[L0Rl 9Aag 9ART?mծ 9A,=jp_[ 9AMTu,jk 9A@@Z`W' 9Az` 9A@yؼ*m 9ACh 9Aݔ9auoO9A@F2P&09A4H7r 9A@vH*-CE 9A]?z<˥c 9AXILM89AJ)9AhK6 7 9A@R"ʫ8Au,B8Ah/#vb8AA,8Aل6Ⱥg8A@k=?8A@BN:8A-/`48AUԓ_8A&$8AV\/,8A@iv>ӫ8AIWyak8A/JOO8A{ kN8A %2'v'8AE H8AWߥ?_*8A_#߇k8AFmKF8A(5Y8A@雚?q8AIoH8A@SJkΊz28Aޗ58A (?d#p8A@{>zyJD8A˗})˹8Ac_<8A{x?8Av(oX 8Aެsh8A]I8A@gZh*8A~e`%'!af8A 6.8A84S8A]4 18A@tMGP8A,Vde08A 0 di[U8A@tJPxa 8A[KU8AvO-8AgyƏؕ8A.%ğh8Au%8AIFDD۟8Aa4N}~8AS`1i8A@Jr8A@%81658A<[ cs (8A_ HZA8A@!o8؞8AɪF28AEIc'.8A@E)X!e&8AU4Tڊ8AԀ頇L'8A u[R8A_Xt8A@wLFm-N8A@mq3Π8A@;0c=8AR,w{ܥ8A!%"LyCm8AF=|`]X8Ay(r1x8A,!3[R8A_( 9A`U :ACqH :A :A747}.:A@xaP:A@鰿yk:A>n :A0$:ArFm\:AP,EZt:A Znd9A ʀ{n9A`CJ`79A a<w9A=ez9A`49A@efZ@L9AD9A Ϻ̽|9A+xr*9A`w[҉9A>>Mx9A`Uz9ASL5[N9A n*9AY]OX\9Az@c9Aʦa39A3>6џ9A%NzJ69A /9ADz:9A *v*j9A`{BC9A@@(9A@Mjb=GU:Auch v:A@q-Tktk:AGU=CH:A Pz:T[:A_--{v:A ҫd:A>{T,;:A )AYhs :A7#O@:A19A"9Az/{}P9A&U+9Af?@i'9A*h'5Y.9A@L9A9CJ :R9Ax2s 9AK&h9A<Z9At/l9Ari)6{|9Adc8RS9Aj$9A$&מqκ9A@*=~9A-Tq%9A@*Y!/}9Aޥ!0m9Asu|69A 맊.9AU v9A@-Թ]6N9Amc9A7ĕg&? 9AXbr 9A؂bK͓5 9AG:6 9A@xz [0x/"V9A@KA)ad+Y9A@[>]9A@JdS@#^9A]hI/\9A%)C`]9A< |c9AZI(=i9A |MXj9AN9 S]k9AP=]IESj9Aڛm]v g9A@U:/`Ce9A::'k9^9A]^-\9A@IcKqAZ9A@1 :MY9AUCR+OW9A @U9A@:K jL9A@2B&jK9AB9e;I9Aw[I9A@~H9Ag5\NSI9AJ!F9Ax2=.~"/G9A9O Y-F9Ar6PB9A`' RSC9A) ,]R]B9AC W4KA9A:n4DZ]>9A LxA\;9A@W)99Ajbe{9y;9AvmEc:9A x0u[49AeJS=N?49A@n 0^29A@ XW[09A@2:+`$I-9A|3E$-9AѰJC*9A@.vȩ)9AP~G".ƪ(9A`l)Z6i0&9A0WP4 9A j_F9A&?|9A av5c9Ab:yX́9A@qT#] 9AwJ 9A`x+DHO_Of9A xs#p8Ah~GGC8A!О4(x8A-XƗ8A\Tp1ff8A HPӝn}8A Kdҁw8AJ;K=8AIT9?@*8A ';i,|#}8A#whӚkX8AFCZVX|8A5@EЪ8A3x =8A@9мx8A$8A 8A-зP8A <8A.NB_8ASBJex8A%̭8A@v]dȲKj8AQEp8A`؇TeγY8A`snPKv&8A BBqlG1j9AAFB̒9A&CYs( 9ACF 9AVI #9A@wJMj9Arp`9Aa+'[9AQ9Al9AFQb9Ag`L 9A b×D Qt49A@chD9AT3 9AY&Lr9Af9AA`O;F9A-[9Aw**9A t t9AlpB9A $7Y8AS}f ?8A@"AZʛ8Ajp J 8A@g.h8AUmչy8AdG]GvF9A*!gzX9A%h,a'R9AF&tJ9ABTԈ@HK9AS< K9ARxK9A@QkK9A8QUL9A@߾Q iL9ABQFKL9AP?L9A^JP_L9A/!sM*L9AYrL `L9AmKPL9ATGML9A4E@L9Aɱ`qB@L9AE@?FOL9A{ R==`L9A A!3<L9Ar9K+L9A]H9HL9AM:~bL9A@R9;HL9A7; L9A@G1<<K9A@t=K9A^?B@K9A@EA' $K9A̿?NB^ J9A@̈_BiJ9AݱBJ9A"C1J9A?6E*?J9A`@vH2 jJ9AD9L`J9AM_MaJ9AJ'Oz`iJ9A@bDPvJ9A@R&tJ9ABT$9A-_:qƇ$9Ax{gU!9A@$~5 9AAkx!9A?ő&$9A-_:qVN9A`QF79A7JْI89AvWz{8Ah/^ cj@98A`zFX{a8A`.^\Ϥ8A@jN҇8A)Unz{8Ah/^ܤ48Aiۃ58A$*t8A#jE'8AՂ+P#R8AD<'I 8A!Bz4^8A@C )8A@=>xU #9A)~9AJpwo' 9AAb  9A`7u_ 8X 9Ad)[pZ9AlN\ 9A06kT9AmUpF?i9AF99AU_J7#9A`/gҊtF[%9Aa9!+%9A ߏ#h&9AF3_G\B*9Af޵I?(9ACw'5#9A2DA{[ 9A4InRL9A1؇ZE9A`9 HL9Ag2׹a9A~$:9AJ,1Qo9A@6r)q} 9A(T49V 9A <.Z 9A % Y%`) 9A@]_QhO 9A@ݐjPc. 9AaMS9A |-m 6H559Aj-&uDg8A &3i8AHGg7<8A6]5%I?t8AM N H8Ahun3X9AO{S8A`iu»pM8AwH]48A`jь 8A>@p8A`t%88A`]˽:8A//ф u8A#tHؼ8A, WN8A_42vJ8A_E8A6kHŜX8A@\(i5d8A|&s8A`ўtܤ48Aiۃ*P`J9ABT@L9A]H9'&tJ9ABTvJ9A@Rz`iJ9A@bDPaJ9AJ'O`J9AM_M2 jJ9AD9L*?J9A`@vH1J9A?6EJ9A"CiJ9AݱB^ J9A@̈_B' $K9A̿?NBB@K9A@EAK9A^?<K9A@t= L9A@G1<HL9A7;~bL9A@R9;HL9AM:K+L9A]H9L9Ar9=`L9A A!396A`=]w6A #ȿ6Asy֯n6A@/Z. 6A rfpCU6A@N16A9˰6A`ZPO6Av{C6AodEJ|6A`^[r܃p6AMCoܛMk6A`!dd6A@Oرk^6A>(FX6A,R6A=(YёL6AI[.F6Alb( @6A 胲PT36A-Ji,6A@6ײS |'6A :a!6A w6A@P(JEel6A`6AZG6AUg#bB\6A@6 w76Axr>M6A{qկ6A~Z6Aŵ2856A@;28ev6AϴæP6AzJ2fө6A`Fcb*o6A`wƤah6A`H6A){y)C6A,6ճ<6A΅]]j46AwPy/6A`Զ"6A`a)6A̱Gk6A`_gc U6Atֿ6Ah:xI*6A~6A o;ѷ06A@RDC6A f&6A|''6AmgX@' Կ6ANQ|_6A@sj 6A@q|S %6A`z頕`6A 6A@zF,a6AĨ-%6A`R^3'6A +}6Aຓ'F(p6AI?i6Akc)\6A  SU6A`C2TeA6ANYӹ%:6A ?i{ 6A tfJ6APu@6Ahb]׺6A=@ӎ6AWInŰ,6A ûx }6A]Wͻ&Oh6A Ŵa6A 7*T6A.MWM6A\^8R`r?6A!G[%w86Aۥd116A"6A`O/ѻ6A`K|YwѴ6A c` 6A@l6Akb~Ơ6A暅6A[R3'6A[Dq؋6A`%~cT4}6A`S~콽mv6Aǽ#o6A@ٽ/āYE6A`=S`M>6A=$bA"6A[KKH$6AsRZG6A I\*1 6A@hҖ6A@eOh6A{&ykm6A{Jp6A8Os6AJ*6A%Vo6A 9pF6AҾ{6AԾࣕ6Aكk?6A<:=6AM/1y6A@}r6A[b}0k6AJ]h]6A`MS%i,U6A '氢N6A`{1kNgpH6A@8N A6A Ԯ:h96A`XeD426A@H`FD?~+6AP$6A_R{86AQQ}D6AD[z~Z6A@:_æ6A໢hAM6AZmhLd 96AL#rGe6p6A >av(b6A&=:d$iz6Ap -O5k6A@aTT6A`!Uf> x66A&P>6ACN]D6A@8*q,98AcsH#78A ';iU@*8A ';i=8AIT9?dҁw8AJ;Kn}8A K nw8A)L{t8A ??#78A`!k 8A`v*8AsQ38A`i8AX[mX8A0T_y8A`>|7H8ASMD0c8A ٧0:8A VIJ'8AWΥ8A٤d.f8A5=p+8A^* ""A78A`c2ct_8AN~n8Ag܇+|08A@~P"+L8AH/ 68A`(k6k%p8A,BfD|8A>FF[O8A$_SXNl8Af˄^8A~}8A_KԿf۵8A 0Z9B8A87?8Ag $?8ArRѶ 8A]ve8A%ډ4B'8Aub8A&̎Gq8AM w 8A sa%V#8AD(pp]K8A`R1.gi V8A`71b8Am$F| Pr8A[QRh}8A@(OeւH&8A`Lm]ѯ8A.n7cY8A`_ HŮ8AT?_v8A`ؼa?8A# ~D>ڧ8A!0:;9,8A5e'%ˡ8A)S:8A`kv6a 88AFj˘8AcsH(8A`La;98A˲8mo8A۬(G8AGɍÙ8A,ݫȤ8AkhDZO;8A`RP 悭8A1x,H8AAE/jE8As8A]J58A /,E"8A%C| |1 8A {:I8A8r[yA8A@.*)tq8A%8Aʓ K8A@}v8A@nX$P~8APM8A`T/v7rK8A bt@*8A ';i-`a Sm$:A=cHFF:A7)HFF:A@9[Vy*:A uwPȗmy*:A@zP#w%:AMv`!$:A`!Eam$:A@ 5bFK?`$:A@UMca Sm$:A=co$:A n]KqI&:A@A_JP3(:AӪ5uO>Λ):A` ȠD*:A q]6-:A }#r6+:A@ǏC):A鷮u(W,:ANB:+:Aम#Nۆ,:AwKG?)H/:A7LɊÛ0:AN8P菊x1:A`BC.?1:Auk*1:AI #12:A/}K=52:Avpֱ}F4:AGShØ4:A S;:Ax]v@Jᅴ=:A1<ѻW>:AkaM;B:AY9I C:A2jJ2 D:AMSD:A`^Zo̒E:A NtyRF:A 1g]6D:A7 ެD:A+s,SE:AHFF:A@9[.zXکv8A\$j˘8A˲8,"98A˲8(8A`La;j˘8AcsHՑ8AH$᫕8ANOĔ8AE`2^8A C|P\8AN$ V܂8A48́yڌ8AF\T 8AA:m8A@|ؗ8AnSZ=0#q8A`t-.%8A@<Y 8A`%R8A@FC"À8AjAhx^䯂8A @oGac8A $1(jz8A 6 "}8AlGN)n{8A@k"XA+y8Ab Rv8w8A\$Xکv8A!b(w8AEʸK x8Aj6B իy8A@t~8A`bkG8A`kS>AB8A`J@V?8A& 7T98A˲8> ~8A`۳k&;8A1m78A"7{Z,m8A_צQW,~8A (ge|8A Cvn& y8AnہDm)y8A`yCy8A`>L> ~8A`۳k&mapnik-3.0.9/demo/data/ontdrainage.shx000066400000000000000000000147241262555547000177010ustar00rootroot00000000000000' ɏl4Aoi:A*{:@2 xz^3$84`p&x˖@pNjp΢ϦZ.P`vxPFHޒHjH߶T(pph6P&x@XB(n R`XXhPXp X|x XPp.P@P` ~ b` H  x6HpHB@`2H:xZpRX`(>`p^ h!"#$b$h%bH%H%()p*Px* +,tx,p-d`-h/4/0H2 P2t3 P5tp5678$;X<,`<h<h=hh=p>HP>`?P?TAPAd`ABpBChD`DlDE@FFXG(@GlH(IJK4 *Xb^^dNeef2Hf~XfXg6pgHgPhJ`hhiPinPiPj`jzxj`kZPlPmhmnPm`n&@njPnPoho~Hohp6Ppqq*rtHu@XuXu8w4PwXwhxPHxy8pyPzPzTzh{d`{|`}(@}l~xX~H  hxPXx`8hH(x````h0ldP\h`,hH`Hpp0` xHH XxX`HP@DhXhXPXPXX`lpPpvXP"`Pvpv2PhXNHPhZh.PX`BpR`p*P HVXFHXPBHPnxPnPp6PHrHPh~Pfhh>pXhVPx& JH*Hv`îjpH*P~rv`vh`FP>̾PPfXXXzHh2H~``F"hrHӾP`vP~`v צXHNJٜXHDPژP`PX۬Hܤ0X݌0hޜPߴp(P|PpDHPP8X h@tPHH`PPXp pHhLHhPX`x`hHXpPlXPhP`@XPXLH`XXdhH`T`p,xfXx>8z`rp`zh.Xhhx>hx&Hrxxj`X*X`xfhfPXPjHh "P vP  fP  >@ X  H @2phXn``6`XP hvxPDPHx`HPP (P |` !0"H#h#p`#X$0X$%:(&) P)^P)h**x+v`+P,.H,zH,P--.R@/x0h0~h012H2H3:34R56H5h56r7H7jx7h8RX8H8X9Vx9h:>P:P:`;JH;`;h?N`?x@.@@r`@pAJXAhBpBC pD~HDhE6`EPEFXFGHnI J6 |WHX@XFXXpYYhZ[:X[]p]X^R`^`_P_n` `Pa2Ha~b@bFbPcNXcPcXdZh^Xh`iimojxoqhrhPrps0sXtHptuhupvpXv`w0PwHwHx`xpxHy@`ypzXzt`zp{L@}`}P~HP~hXHXx`` P`H`xHX4xPX`X`PHP `H2`**XPH`XDP$` XhLXhPHxpp@(@lPLPH ppxXP(p8PPPPhP,hHX@phP¼` pÔ(XĄxŤ`Ɯ X|XX4h,pɠXH&Pz@̾`"Pvh`FX΢PXRprHоh*`юPP(P|PP$PxPX(``P|pXpXX(@P0XXx0`PP<hX`hphHD0XP`DX"RX:XHXZ` rX X *`   q~6&`PhZPBP`~"Rx ,LP``,zmapnik-3.0.9/demo/data/popplaces.dbf000066400000000000000000002665421262555547000173340ustar00rootroot00000000000000jWAREANPERIMETERNPOPPLACE_N POPPLACE_IN REGIONNAMECGEONAMECCCGNDBKEYC GENERICC CONCISEC,NTSMAPC SCALE_CATNPOP_CATN 0.00000 0.00000 21 38Quebec/Qubec Sorel-Tracy EQVKY Ville (2) City 031I03 0 2 0.00000 0.00000 29 52Quebec/Qubec Saint-Jean-Baptiste EIACY Municipalit de paroisse Village 031H11 0 1 0.00000 0.00000 30 54Quebec/Qubec Saint-Jean-sur-Richelieu EJIXZ Ville (2) City 031H06 1 2 0.00000 0.00000 31 55Quebec/Qubec Napierville EHJJT Municipalit de village Town 031H03 0 1 0.00000 0.00000 43 75Quebec/Qubec Sainte-Vronique EKQPX Municipalit de village Town 031J10 0 1 0.00000 0.00000 47 83Quebec/Qubec Bouchette EJKLR Municipalit Village 031J04 0 1 0.00000 0.00000 60 109Quebec/Qubec Nominingue EQWUY Municipalit Village 031J06 0 1 0.00000 0.00000 92 165Quebec/Qubec Saint-Donat-de-Montcalm EHZCU Village (3) Unincorporated area 031J08 0 1 0.00000 0.00000 209 332Quebec/Qubec Massueville EHEOC Municipalit de village Town 031H15 0 1 0.00000 0.00000 210 333Quebec/Qubec Saint-Ours EIAQQ Ville (2) City 031H14 0 1 0.00000 0.00000 211 334Quebec/Qubec Contrecoeur EQKRO Ville (2) City 031H14 0 2 0.00000 0.00000 212 335Quebec/Qubec Lavaltrie EGYJN Municipalit de village Town 031H14 0 2 0.00000 0.00000 213 336Quebec/Qubec Joliette EKJCK Ville (2) City 031I03 1 2 0.00000 0.00000 248 390Quebec/Qubec Lacolle EGWLA Municipalit de village Town 031H03 0 1 0.00000 0.00000 249 391Quebec/Qubec Marieville EHDWB Ville (2) City 031H06 0 2 0.00000 0.00000 250 392Quebec/Qubec Chambly EJNEC Ville (2) City 031H06 0 2 0.00000 0.00000 251 393Quebec/Qubec Saint-Damase EHZBB Municipalit de village Town 031H11 0 1 0.00000 0.00000 252 394Quebec/Qubec Saint-Hyacinthe EHZZL Ville (2) City 031H10 1 2 0.00000 0.00000 253 395Quebec/Qubec Sainte-Madeleine EHZME Municipalit de village Town 031H11 0 1 0.00000 0.00000 255 397Quebec/Qubec Saint-Charles-sur-Richelieu EQALZ Municipalit Village 031H11 0 1 0.00000 0.00000 256 398Quebec/Qubec Beloeil EFMRW Ville (2) City 031H11 0 2 0.00000 0.00000 257 401Quebec/Qubec Varennes EIKGU Ville (2) City 031H11 0 2 0.00000 0.00000 258 406Quebec/Qubec Terrebonne EIGOG Ville (2) City 031H12 0 2 0.00000 0.00000 259 409Quebec/Qubec Saint-Jrme ELCQF Ville (2) City 031G16 2 2 0.00000 0.00000 260 410Quebec/Qubec Prvost EQSNQ Ville (2) City 031G16 0 2 0.00000 0.00000 261 411Quebec/Qubec Saint-Sauveur-des-Monts EIAYJ Municipalit de village Town 031G16 0 1 0.00000 0.00000 262 413Quebec/Qubec Val-David EIJYW Municipalit de village Town 031J01 0 1 0.00000 0.00000 263 414Quebec/Qubec Sainte-Agathe-des-Monts EQQZN Ville (2) City 031J01 0 2 0.00000 0.00000 265 417Quebec/Qubec Mont-Tremblant EHHVX Municipalit Village 031J02 0 2 0.00000 0.00000 266 418Quebec/Qubec Labelle EGVXU Municipalit Village 031J07 0 1 0.00000 0.00000 267 420Quebec/Qubec L'Annonciation EGXLO Municipalit de village Town 031J07 0 1 0.00000 0.00000 269 423Quebec/Qubec Ripon EQVOH Municipalit Village 031G14 0 1 0.00000 0.00000 270 425Quebec/Qubec Gracefield EGNQE Municipalit de village Town 031K01 0 1 0.00000 0.00000 271 426Quebec/Qubec Otter Lake EKJXU Village (3) Unincorporated area 031F16 0 0 0.00000 0.00000 274 431Quebec/Qubec Shawville EIDFC Municipalit de village Town 031F09 0 1 0.00000 0.00000 275 432Quebec/Qubec Lac-des-Loups EGWFR Village (3) Unincorporated area 031F09 0 0 0.00000 0.00000 276 440Quebec/Qubec Perkins EJXZG Village (3) Unincorporated area 031G12 0 0 0.00000 0.00000 277 441Quebec/Qubec Buckingham EFRSH Ville (2) City 031G11 0 2 0.00000 0.00000 278 443Quebec/Qubec Thurso EIHFC Ville (2) City 031G11 0 1 0.00000 0.00000 279 444Quebec/Qubec Saint-Andr-Avellin EQMZP Municipalit Village 031G11 0 1 0.00000 0.00000 280 446Quebec/Qubec Papineauville EHNRM Municipalit de village Town 031G11 0 1 0.00000 0.00000 281 449Quebec/Qubec Saint-Andr-Est EQVZF Village (3) Unincorporated area 031G09 0 0 0.00000 0.00000 282 450Quebec/Qubec Rigaud EQFAN Municipalit Village 031G08 0 1 0.00000 0.00000 283 451Quebec/Qubec Hudson EGRJP Ville (2) City 031G08 0 1 0.00000 0.00000 284 454Quebec/Qubec Saint-Eustache EHZSF Ville (2) City 031H12 0 2 0.00000 0.00000 285 460Quebec/Qubec Sainte-Martine EPIKR Municipalit Village 031H05 0 1 0.00000 0.00000 286 461Quebec/Qubec Hemmingford EGQLE Municipalit de village Town 031H04 0 1 0.00000 0.00000 287 462Quebec/Qubec Saint-Chrysostome EQVKJ Municipalit Village 031H04 0 1 0.00000 0.00000 288 465Quebec/Qubec Huntingdon EGRNU Ville (2) City 031G01 0 1 0.00000 0.00000 289 467Quebec/Qubec Saint-Zotique EIBDH Municipalit de village Town 031G01 0 1 0.00000 0.00000 1345 1617Ontario Merrickville FEBSW Community (2) Unincorporated area 031B13 0 0 0.00000 0.00000 1353 1634Ontario Lancaster FBWDI Community (2) Unincorporated area 031G02 0 1 0.00000 0.00000 1354 1635Ontario Martintown FCDSH Compact Rural Community Unincorporated area 031G02 0 0 0.00000 0.00000 1355 1636Ontario Cornwall FCCOT City City 031G02 2 2 0.00000 0.00000 1356 1637Ontario Green Valley FBJYM Compact Rural Community Unincorporated area 031G07 0 0 0.00000 0.00000 1357 1638Ontario Apple Hill FADKS Locality Unincorporated area 031G02 0 0 0.00000 0.00000 1358 1639Ontario Alexandria FACHT Community (2) Unincorporated area 031G07 0 1 0.00000 0.00000 1359 1640Ontario Glen Robertson FBHVS Compact Rural Community Unincorporated area 031G07 0 0 0.00000 0.00000 1360 1641Ontario Maxville FCEDV Community (2) Unincorporated area 031G07 0 1 0.00000 0.00000 1361 1642Ontario Monkland FDVMO Locality Unincorporated area 031G02 0 0 0.00000 0.00000 1362 1643Ontario St. Andrews FDSXH Compact Rural Community Unincorporated area 031G02 0 0 0.00000 0.00000 1363 1644Ontario Ingleside FBQEU Suburban Community Unincorporated area 031G02 0 0 0.00000 0.00000 1364 1645Ontario Newington FDOQC Compact Rural Community Unincorporated area 031G03 0 0 0.00000 0.00000 1365 1646Ontario Avonmore FAEIH Locality Unincorporated area 031G02 0 0 0.00000 0.00000 1366 1647Ontario Moose Creek FDWGI Locality Unincorporated area 031G07 0 0 0.00000 0.00000 1367 1648Ontario Crysler FAUTJ Compact Rural Community Unincorporated area 031G03 0 0 0.00000 0.00000 1368 1649Ontario Finch FBOHQ Community (2) Unincorporated area 031G03 0 1 0.00000 0.00000 1369 1650Ontario Chesterville FAQKA Community (2) Unincorporated area 031G03 0 1 0.00000 0.00000 1370 1651Ontario Williamsburg FDDWW Locality Unincorporated area 031B14 0 0 0.00000 0.00000 1371 1652Ontario Morrisburg FDWRM Community (2) Unincorporated area 031B14 0 1 0.00000 0.00000 1372 1653Ontario Winchester FDEEA Community (2) Unincorporated area 031G03 0 1 0.00000 0.00000 1373 1656Ontario Vankleek Hill FCZOP Community (2) Unincorporated area 031G10 0 1 0.00000 0.00000 1374 1657Ontario Hawkesbury FBMKO Town Town 031G10 0 2 0.00000 0.00000 1375 1658Ontario L'Orignal FCBCZ Community (2) Unincorporated area 031G10 0 1 0.00000 0.00000 1376 1659Ontario Lefaivre FBXAF Compact Rural Community Unincorporated area 031G10 0 0 0.00000 0.00000 1377 1660Ontario Alfred FACIQ Community (2) Unincorporated area 031G10 0 1 0.00000 0.00000 1378 1661Ontario Plantagenet FDGEH Community (2) Unincorporated area 031G10 0 1 0.00000 0.00000 1379 1662Ontario Clarence Creek FARBG Police Village Unincorporated area 031G11 0 0 0.00000 0.00000 1380 1663Ontario Hammond FBLMH Compact Rural Community Unincorporated area 031G06 0 0 0.00000 0.00000 1381 1664Ontario Sarsfield FEASB Compact Rural Community Unincorporated area 031G06 0 0 0.00000 0.00000 1382 1665Ontario Casselman FDJUW Village (1) Village 031G06 0 1 0.00000 0.00000 1383 1668Ontario Russell FCMZQ Police Village Unincorporated area 031G06 0 1 0.00000 0.00000 1384 1669Ontario Vars FDHPX Compact Rural Community Unincorporated area 031G06 0 0 0.00000 0.00000 1385 1672Ontario Kemptville FBTUI Community (2) Unincorporated area 031G04 0 1 0.00000 0.00000 1386 1673Ontario Spencerville FCRBK Locality Unincorporated area 031B13 0 0 0.00000 0.00000 1387 1674Ontario Cardinal FAOSO Community (2) Unincorporated area 031B14 0 1 0.00000 0.00000 1388 1675Ontario Johnstown FBSGG Compact Rural Community Unincorporated area 031B11 0 0 0.00000 0.00000 1389 1676Ontario Prescott FCIJQ Separated Town Town 031B12 0 1 0.00000 0.00000 1390 1679Ontario Smiths Falls FCPKN Separated Town Town 031C16 1 2 0.00000 0.00000 1391 1680Ontario Jasper FBRKQ Compact Rural Community Unincorporated area 031B13 0 0 0.00000 0.00000 1403 1694Ontario Vernon FCZUK Compact Rural Community Unincorporated area 031G03 0 0 0.00000 0.00000 1404 1696Ontario Greely FBJNY Dispersed Rural Community Unincorporated area 031G05 0 0 0.00000 0.00000 1405 1697Ontario Osgoode FAYHR Compact Rural Community Unincorporated area 031G04 0 1 0.00000 0.00000 1406 1698Ontario Kars FBTCK Compact Rural Community Unincorporated area 031G04 0 1 0.00000 0.00000 1407 1699Ontario North Gower FCGAZ Compact Rural Community Unincorporated area 031G04 0 0 0.00000 0.00000 1408 1701Ontario Ottawa FEVNT City City 031G05 0 4 0.00000 0.00000 1409 1702Ontario Kanata FECTW Community (2) Unincorporated area 031G05 0 3 0.00000 0.00000 1410 1703Ontario Stittsville FCSPA Suburban Community Unincorporated area 031G05 0 0 0.00000 0.00000 1411 1705Ontario Munster FCFKE Dispersed Rural Community Unincorporated area 031G04 0 0 0.00000 0.00000 1412 1706Ontario Carp FAPAL Compact Rural Community Unincorporated area 031F08 0 0 0.00000 0.00000 1413 1707Ontario Constance Bay FASSB Dispersed Rural Community Unincorporated area 031F08 0 0 0.00000 0.00000 1414 1708Ontario Fitzroy Harbour FEIHW Compact Rural Community Unincorporated area 031F08 0 0 0.00000 0.00000 1415 1709Ontario Arnprior FADTN Town Town 031F08 0 2 0.00000 0.00000 1416 1712Ontario Almonte FACQF Community (2) Unincorporated area 031F01 0 1 0.00000 0.00000 1417 1713Ontario Carleton Place FAOWJ Town Town 031F01 0 2 0.00000 0.00000 1418 1714Ontario Franktown FBFOH Compact Rural Community Unincorporated area 031F01 0 0 0.00000 0.00000 1419 1717Ontario Perth FDLZY Town Town 031C16 0 2 0.00000 0.00000 1420 1718Ontario Rideau Ferry FCLAB Dispersed Rural Community Unincorporated area 031C16 0 0 0.00000 0.00000 1422 1720Ontario Ompah FDLJR Dispersed Rural Community Unincorporated area 031F02 0 0 0.00000 0.00000 1445 1748Ontario White Lake FDDFB Compact Rural Community Unincorporated area 031F07 0 0 0.00000 0.00000 1446 1749Ontario Calabogie FANSM Compact Rural Community Unincorporated area 031F07 0 0 0.00000 0.00000 1447 1750Ontario Renfrew FCKPW Town Town 031F07 1 2 0.00000 0.00000 1931 2330Ontario Clarence-Rockland FEUTA City City 031G11 0 2 0.00000 0.00000 1932 2331Ontario Bourget FAKXS Locality Unincorporated area 031G06 0 1 0.00000 0.00000 1933 2332Ontario Rockland FCLRB Community (2) Unincorporated area 031G11 0 2 0.00000 0.00000 1950 2351Ontario Merrickville-Wolford FEUTF Village (1) Village 031B13 0 1 0.00000 0.00000 1968 2372Ontario St. Isidore FERXM Community (2) Unincorporated area 031G07 0 1 0.00000 0.00000 1992 2403Ontario Orlans FESEL Urban Community (2) Unincorporated area 031G05 0 0 0.00000 0.00000 2045 2482Quebec/Qubec Clarenceville EMAAM Bureau de poste Unincorporated area 031H03 0 1 0.00000 0.00000 2046 2483Quebec/Qubec Saint-Michel EIANW Municipalit de paroisse Village 031H04 0 1 0.00000 0.00000 2047 2485Quebec/Qubec Saint-Louis-de-Gonzague EIAKA Municipalit de paroisse Village 031H04 0 1 0.00000 0.00000 2048 2486Quebec/Qubec Brownsburg ELZZX Bureau de poste Unincorporated area 031G09 0 1 0.00000 0.00000 2050 2488Quebec/Qubec Lac-Carr EQGZN Secteur Unincorporated area 031J01 0 1 0.00000 0.00000 3102 1678Ontario North Augusta FAYLX Police Village Unincorporated area 031B13 0 0 0.00000 0.00000 3103 1671Ontario South Mountain FEDAZ Compact Rural Community Unincorporated area 031B14 0 0 0.00000 0.00000 3104 1670Ontario Iroquois FDHYD Community (2) Unincorporated area 031B14 0 1 0.00000 0.00000 3105 2404Ontario Long Sault FCAUT Urban Community (2) Unincorporated area 031G02 0 0 0.00000 0.00000 3106 1655Ontario St-Eugne FECFQ Compact Rural Community Unincorporated area 031G08 0 0 0.00000 0.00000 3107 1666Ontario Limoges FBXRS Compact Rural Community Unincorporated area 031G06 0 0 0.00000 0.00000 3108 1667Ontario Embrun FBCMV Police Village Unincorporated area 031G06 0 1 0.00000 0.00000 3109 1654Ontario Marionville FDNFF Dispersed Rural Community Unincorporated area 031G03 0 0 0.00000 0.00000 3110 1695Ontario Metcalfe FEBUE Compact Rural Community Unincorporated area 031G03 0 1 0.00000 0.00000 3111 1700Ontario Manotick FAXQE Compact Rural Community Unincorporated area 031G04 0 0 0.00000 0.00000 3112 1704Ontario Richmond FCKYO Community (2) Unincorporated area 031G04 0 0 0.00000 0.00000 3113 1716Ontario Middleville FEBIZ Compact Rural Community Unincorporated area 031F01 0 0 0.00000 0.00000 3114 1715Ontario Lanark FBWDF Community (2) Unincorporated area 031F01 0 1 0.00000 0.00000 3115 1710Ontario Pakenham FDRAJ Suburban Community Unincorporated area 031F08 0 0 0.00000 0.00000 3116 1747Ontario Braeside FALHM Community (2) Unincorporated area 031F08 0 1 0.00000 0.00000 3427 464Quebec/Qubec Ormstown EQUOF Municipalit Village 031H04 0 1 0.00000 0.00000 3428 466Quebec/Qubec Salaberry-de-Valleyfield EKJCM Ville (2) City 031G08 2 2 0.00000 0.00000 3429 2484Quebec/Qubec Sainte-Clotilde-de-Chteauguay EKOKO Municipalit de paroisse Village 031H04 0 1 0.00000 0.00000 3430 459Quebec/Qubec Saint-Rmi EIAXC Ville (2) City 031H05 0 2 0.00000 0.00000 3431 458Quebec/Qubec Beauharnois EKMWX Ville (2) City 031H05 0 2 0.00000 0.00000 3432 457Quebec/Qubec Chteauguay EFWKS Ville (2) City 031H05 0 2 0.00000 0.00000 3433 403Quebec/Qubec La Prairie EGXSC Ville (2) City 031H05 0 2 0.00000 0.00000 3435 408Quebec/Qubec Montral EHHUN Ville (2) City 031H12 3 4 0.00000 0.00000 3436 402Quebec/Qubec Longueuil EHAYB Ville (2) City 031H11 0 4 0.00000 0.00000 3437 455Quebec/Qubec Laval EGYIC Ville (2) City 031H12 0 4 0.00000 0.00000 3438 400Quebec/Qubec Boucherville EFPOW Ville (2) City 031H11 0 2 0.00000 0.00000 3439 399Quebec/Qubec Sainte-Julie EJBSN Ville (2) City 031H11 0 2 0.00000 0.00000 3440 452Quebec/Qubec Mirabel EITQC Ville (2) City 031G09 0 2 0.00000 0.00000 3441 448Quebec/Qubec Lachute EKCIC Ville (2) City 031G09 1 2 0.00000 0.00000 3442 112Quebec/Qubec Oka EHLTD Municipalit Village 031G08 0 1 0.00000 0.00000 3443 456Quebec/Qubec Vaudreuil-Dorion EPUZT Ville (2) City 031G08 0 2 0.00000 0.00000 3444 447Quebec/Qubec Grenville EGOOO Municipalit de village Town 031G10 0 1 0.00000 0.00000 3445 93Quebec/Qubec Fassett EGIHZ Municipalit Village 031G10 0 1 0.00000 0.00000 3446 445Quebec/Qubec Montebello EHHRH Municipalit de village Town 031G10 0 1 0.00000 0.00000 3447 113Quebec/Qubec Plaisance EHRIT Municipalit Village 031G11 0 1 0.00000 0.00000 3448 108Quebec/Qubec Namur EHJHV Municipalit Village 031G15 0 1 0.00000 0.00000 3449 442Quebec/Qubec Masson-Angers EPISS Ville (2) City 031G11 0 2 0.00000 0.00000 3450 111Quebec/Qubec Notre-Dame-du-Laus EHLEQ Municipalit Village 031J04 0 1 0.00000 0.00000 3451 439Quebec/Qubec Gatineau EGLTT Ville (2) City 031G12 0 4 0.00000 0.00000 3452 438Quebec/Qubec Hull ELYOR Ville (2) City 031G05 1 3 0.00000 0.00000 3453 437Quebec/Qubec Aylmer EFKAT Ville (2) City 031G05 0 2 0.00000 0.00000 3454 436Quebec/Qubec Wakefield EITUP Village (3) Unincorporated area 031G12 0 0 0.00000 0.00000 3455 435Quebec/Qubec Sainte-Ccile-de-Masham EKLNY Village (3) Unincorporated area 031F09 0 0 0.00000 0.00000 3456 434Quebec/Qubec Luskville EHBYK Hameau Unincorporated area 031F09 0 0 0.00000 0.00000 3457 433Quebec/Qubec Quyon EKLNX Village (3) Unincorporated area 031F09 0 0 0.00000 0.00000 3458 430Quebec/Qubec Bryson EFRRH Municipalit de village Town 031F10 0 1 0.00000 0.00000 3459 429Quebec/Qubec Campbell's Bay EKVLW Municipalit de village Town 031F10 0 1 0.00000 0.00000 3462 405Quebec/Qubec Repentigny EHVPH Ville (2) City 031H11 0 3 0.00000 0.00000 3463 404Quebec/Qubec Verchres EIKTD Municipalit Village 031H14 0 1 0.00000 0.00000 3464 71Quebec/Qubec L'Assomption EPISR Ville (2) City 031H14 0 2 0.00000 0.00000 3465 331Quebec/Qubec Yamaska EINKX Municipalit de village Town 031I02 0 1 0.00000 0.00000 3466 338Quebec/Qubec Berthierville EFNEP Ville (2) City 031I03 0 1 0.00000 0.00000 3469 51Quebec/Qubec Saint-Denis-sur-Richelieu EQLRD Municipalit Village 031H14 0 1 0.00000 0.00000 3482 337Quebec/Qubec Crabtree EQJST Municipalit Village 031H14 0 1 0.00000 0.00000 3483 131Quebec/Qubec Saint-Jacques EQMZG Municipalit Village 031H13 0 1 0.00000 0.00000 3484 419Quebec/Qubec Rawdon EQNHA Municipalit Village 031I04 0 1 0.00000 0.00000 3485 72Quebec/Qubec Saint-Lin--Laurentides EQVME Ville (2) City 031H13 0 2 0.00000 0.00000 3486 407Quebec/Qubec Sainte-Anne-des-Plaines EMVQR Ville (2) City 031H13 0 2 0.00000 0.00000 3487 453Quebec/Qubec Blainville EFNZP Ville (2) City 031H12 0 2 0.00000 0.00000 3488 412Quebec/Qubec Sainte-Adle EQMGV Ville (2) City 031G16 0 2 0.00000 0.00000 3489 97Quebec/Qubec Huberdeau EGRIR Municipalit Village 031G15 0 1 0.00000 0.00000 3490 416Quebec/Qubec Saint-Jovite EIAGP Ville (2) City 031J02 0 1 0.00000 0.00000 3491 421Quebec/Qubec Mont-Laurier EHHSY Ville (2) City 031J12 2 2 0.00000 0.00000 3493 424Quebec/Qubec Maniwaki EHDEQ Ville (2) City 031J05 2 1 0.00000 0.00000 3519 166Quebec/Qubec Lanoraie EGXLU Village (3) Unincorporated area 031H14 0 0 0.00000 0.00000 3520 53Quebec/Qubec Saint-Grgoire EHZXN Arrt ferroviaire Unincorporated area 031H06 0 0 0.00000 0.00000 3521 463Quebec/Qubec Howick EGRGU Municipalit de village Town 031H04 0 1 0.00000 0.00000 3522 6Quebec/Qubec Saint-Rgis EMAKW Bureau de poste Unincorporated area 031G02 0 0 0.00000 0.00000 3523 57Quebec/Qubec Low EHBQZ Municipalit de canton Village 031G13 0 1mapnik-3.0.9/demo/data/popplaces.prj000066400000000000000000000007451262555547000173630ustar00rootroot00000000000000PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]mapnik-3.0.9/demo/data/popplaces.sbx000066400000000000000000000004141262555547000173550ustar00rootroot00000000000000' pA5ڢY A:_>32|HRH @$.<nz$h*TD4mapnik-3.0.9/demo/data/popplaces.shp000066400000000000000000000125441262555547000173620ustar00rootroot00000000000000' Y5A ɂ _:A3> '9A( ?9A: 9A@_C\ 1_9A  UJ7A3> U6A? _HL7AB hC8A_2| Z9AB j~9A?E A9AU S9A 9?K9A_o 9A  P?%9A?is d09A _:A ߧ:AS ?=9A_: 9A, f9A?>V 09A D9Ax y8A?i P8A _8A% m8A?: _BW8A? 7A@ ;D7A _x7A?u VՊ7A?c! lJ6A_b" y5A.#  6A$ P6A_@% h 7A`$& J7A .' _{7Al( 7A@) K7A?* K8A?@+ WŠ8A , _/8A@E&- i_ 9A. 2V9AF/ _e9A00 ?s9A@߈1 w8A`? ~2 /t8A`n3 ,&7Aa 4 _8A_5 :U8AK6 _8A7 _ *8A߯5? e8A@@ 8AA ~7A_(B 7AC ~7A͔D wh7AE R7A B F sJ7A_6 G _m7A _H 38A@PI .18ACJ 38AUK y?7A_L 7A@}M (X7A ߲,N .7AG2O ?X7AmP q7ApQ <ߋ7A[R Af7A ?S _~|7AT [|S7A U _l7At V 2_f7A@_ W !L7A` X 7A`q Y V_6A u Z 7A, [ ?u7A@u\ esL7AI_] ?lK7A^ ;7A $_ ,7A_Η` 6 7A ma _6Ab &6A_3vc J6A_d 1E6A e _6A?f m6Azg ;I6A 7qh 6A?"i _6A j 6Aߑ k  6AR l 96A ɂ m 5A ?W n ߀+6A_Uo 5A5 p V5A q ߟ7A_4r 7A_Vs dr7A`t +"7A`^7 u `_7A@Sv Bq:7Ayw :Akx  9A y  9A@Dz :?f8A{ M_8A_pL| DR7ADc } #7A ~ m7Ad  V/8A~ j8A d7A =?7AQk 7A?U M?j7Ah d2(7A_#I OD7A1 ?g6A  ({6A ^g6AI ?h46A`; }?-9A ?n 8A<, M†9Ad 9A { +_O69A`? Y_Q9A@?I R֚9A8 q9AWX ,9A J?79A=# 389A_ 6 ߲9A 8Aߵe 8K|8A_T 8A@_ 8A` D_18Aw y7A= 7A@a  7A _ 7An O7AbI _6Ay {)7A  O_%7Ad T6An N?26A@3 vd6A@ 6A _F- _6A_C _=5A@ Y5A2 @ N \ j x    . < J X f t             * 8 F T b p ~            & 4 B P ^ l z            " 0 > L Z h v             , : H V d r             ( 6 D R ` n |            $ 2 @ N \ j x             . < J X f t            * 8 F T b p ~  & 4 B P ^ l z mapnik-3.0.9/demo/data/qcdrainage.dbf000066400000000000000000006545141262555547000174440ustar00rootroot00000000000000jEWAREAN PERIMETERN QCCART_N QCCART_IDN F_CODECHYCN CGNDB_ENCCGNDB_FRCNAME_ENCXNOM_FRCXShape_LengN Shape_AreaN 0.03546000000 3.45011000000 25136.00000000000 8436.00000000000BH000 8.00000000000EFLFFEFLFFRservoir Baskatong Rservoir Baskatong 326999.87889599998 3.06411795624e+008 0.00672000000 2.18344000000 25238.00000000000 7665.00000000000BH000 8.00000000000 203237.40237200001 5.82796537803e+007 0.01282000000 1.71007000000 25316.00000000000 8018.00000000000BH000 8.00000000000EIGGFEIGGFRservoir Taureau Rservoir Taureau 161905.31889200001 1.10792046367e+008 0.00071000000 0.22729000000 25343.00000000000 8508.00000000000BH000 8.00000000000EGKKGEGKKGLac Franchre Lac Franchre 23228.239305900006120699.52269000000 0.00045000000 0.10379000000 25352.00000000000 8296.00000000000BH000 8.00000000000 9218.407858750003923882.20318000020 0.00044000000 0.11786000000 25357.00000000000 9011.00000000000BH000 8.00000000000 12622.051117600003799482.53981000000 0.00005000000 0.03044000000 25363.00000000000 9040.00000000000BH000 8.00000000000 2969.07538242000 394664.65200499998 0.00031000000 0.08853000000 25364.00000000000 7906.00000000000BH000 8.00000000000 9396.567651350002665791.39008999990 0.00013000000 0.05520000000 25365.00000000000 8282.00000000000BH000 8.00000000000 4706.105087240001109279.16042999990 0.00023000000 0.08073000000 25368.00000000000 8668.00000000000BH000 8.00000000000 7339.601863710001992985.05045000000 0.00003000000 0.03073000000 25370.00000000000 8465.00000000000BH000 8.00000000000 2611.42322266000 292852.97101400001 0.00008000000 0.03973000000 25374.00000000000 8469.00000000000BH000 8.00000000000 3339.29075132000 666729.06261100003 0.00011000000 0.05768000000 25376.00000000000 7957.00000000000BH000 8.00000000000 4933.27391096000 960962.06637000002 0.00015000000 0.06076000000 25377.00000000000 8498.00000000000BH000 8.00000000000 5268.691201860001269576.79288999990 0.00005000000 0.04164000000 25378.00000000000 8308.00000000000BH000 8.00000000000 3815.51984352000 467215.12303500000 0.00006000000 0.04385000000 25380.00000000000 8087.00000000000BH000 8.00000000000 4032.24383757000 561187.37657700002 0.00009000000 0.04570000000 25381.00000000000 8770.00000000000BH000 8.00000000000 3757.89441040000 773534.26815999998 0.00014000000 0.06174000000 25382.00000000000 7897.00000000000BH000 8.00000000000 5429.805989150001185689.94898999990 0.00023000000 0.07442000000 25383.00000000000 7868.00000000000BH000 8.00000000000 6957.133862510002027137.32140000000 0.00009000000 0.04398000000 25384.00000000000 7966.00000000000BH000 8.00000000000 4317.15186962000 768915.48519000004 0.00124000000 0.34379000000 25385.00000000000 9060.00000000000BH000 8.00000000000 32496.02297200000 1.07506915185e+007 0.00009000000 0.04253000000 25386.00000000000 8435.00000000000BH000 8.00000000000 3856.07662890000 749923.01946800004 0.00010000000 0.04454000000 25387.00000000000 8264.00000000000BH000 8.00000000000 3866.71568228000 892213.20565500006 0.00007000000 0.03547000000 25388.00000000000 8389.00000000000BH000 8.00000000000 3097.85040384000 631655.39916999999 0.00014000000 0.06619000000 25392.00000000000 7972.00000000000BH000 8.00000000000 5397.753662410001168228.52355999990 0.00006000000 0.03436000000 25394.00000000000 8414.00000000000BH000 8.00000000000 3120.50834184000 491407.53497500002 0.00008000000 0.03589000000 25395.00000000000 8443.00000000000BH000 8.00000000000 3472.37044499000 709009.90176200005 0.00010000000 0.04709000000 25397.00000000000 8514.00000000000BH000 8.00000000000 4022.26222903000 848305.12089799996 0.00031000000 0.07508000000 25398.00000000000 8051.00000000000BH000 8.00000000000 6754.098087650002659099.00666000000 0.00002000000 0.01941000000 25399.00000000000 8427.00000000000BH000 8.00000000000 1954.27349702000 197758.41814100000 0.00019000000 0.06317000000 25400.00000000000 7909.00000000000BH000 8.00000000000 6128.474751710001620885.92484000000 0.00007000000 0.03218000000 25402.00000000000 8103.00000000000BH000 8.00000000000 3083.17554522000 630126.56043900002 0.00025000000 0.10151000000 25403.00000000000 8557.00000000000BH000 8.00000000000 8763.836807750002169597.41679000020 0.00057000000 0.15835000000 25405.00000000000 8973.00000000000BH000 8.00000000000EIHOKEIHOKLac Tomasine Lac Tomasine 16164.946372400004941875.13710999950 0.00111000000 0.28987000000 25406.00000000000 8655.00000000000BH000 8.00000000000 28762.100358300009648516.86070000010 0.00191000000 0.65141000000 25407.00000000000 8720.00000000000BH000 8.00000000000 63064.60034260000 1.65683670125e+007 0.00005000000 0.03686000000 25408.00000000000 8776.00000000000BH000 8.00000000000 3065.75268204000 435389.55068599997 0.00008000000 0.05008000000 25409.00000000000 8355.00000000000BH000 8.00000000000 4115.19252950000 704742.00842500001 0.00007000000 0.05458000000 25410.00000000000 7984.00000000000BH000 8.00000000000 4647.89859203000 604394.29804000002 0.00100000000 0.35512000000 25412.00000000000 7962.00000000000BH000 8.00000000000EIMHSEIMHSLac Wapizagonke Lac Wapizagonke 34120.172190000008648880.49186000040 0.00009000000 0.05681000000 25415.00000000000 9065.00000000000BH000 8.00000000000 4727.43638832000 776882.58835500001 0.00010000000 0.05268000000 25417.00000000000 8117.00000000000BH000 8.00000000000 4811.97007384000 866821.74291200005 0.00017000000 0.06798000000 25418.00000000000 7912.00000000000BH000 8.00000000000 7016.749982580001504520.86445000000 0.00006000000 0.03914000000 25419.00000000000 7992.00000000000BH000 8.00000000000 3259.66710046000 535742.91771399998 0.00067000000 0.13358000000 25420.00000000000 9009.00000000000BH000 8.00000000000 12552.120348300005765731.48424000010 0.00016000000 0.07478000000 25422.00000000000 8363.00000000000BH000 8.00000000000 7114.303410980001417415.69716000000 0.00008000000 0.04037000000 25424.00000000000 8542.00000000000BH000 8.00000000000 3449.38165577000 686434.54692899995 0.00011000000 0.04913000000 25425.00000000000 8521.00000000000BH000 8.00000000000 4675.73298423000 950831.51042299997 0.00052000000 0.15571000000 25426.00000000000 8712.00000000000BH000 8.00000000000 15631.596992400004535341.53577999960 0.00007000000 0.03695000000 25427.00000000000 8426.00000000000BH000 8.00000000000 3483.15115524000 638754.48988999997 0.00015000000 0.07466000000 25428.00000000000 8021.00000000000BH000 8.00000000000 6245.492686720001273631.28606000010 0.00088000000 0.21602000000 25429.00000000000 7995.00000000000BH000 8.00000000000EFTTYEFTTYLac du Caribou Lac du Caribou 19313.190423600007629120.19065000020 0.00017000000 0.06692000000 25431.00000000000 8922.00000000000BH000 8.00000000000 6649.828461120001490590.65403000010 0.00005000000 0.03755000000 25434.00000000000 8107.00000000000BH000 8.00000000000 3274.40513370000 454671.05105299997 0.00108000000 0.25357000000 25435.00000000000 8138.00000000000BH000 8.00000000000EGSBREGSBRGrand lac des les Grand lac des les 22633.584304100009346511.20611999930 0.00010000000 0.04539000000 25436.00000000000 8055.00000000000BH000 8.00000000000 3956.01141110000 849797.80103199999 0.00006000000 0.03711000000 25437.00000000000 8527.00000000000BH000 8.00000000000 3177.16113800000 540846.11445200001 0.00074000000 0.19915000000 25438.00000000000 8758.00000000000BH000 8.00000000000 18413.526755500006368844.59382000010 0.00022000000 0.07153000000 25439.00000000000 8220.00000000000BH000 8.00000000000 6714.792619930001928327.19915000000 0.00025000000 0.07952000000 25440.00000000000 8845.00000000000BH000 8.00000000000 6966.673772300002168777.86085999990 0.00007000000 0.03733000000 25442.00000000000 8928.00000000000BH000 8.00000000000 3172.07442210000 568014.65969999996 0.00019000000 0.07567000000 25443.00000000000 8641.00000000000BH000 8.00000000000 6952.791996680001664744.31388000000 0.00016000000 0.05288000000 25444.00000000000 8551.00000000000BH000 8.00000000000 4719.096951170001374071.10720000000 0.00017000000 0.06240000000 25445.00000000000 8814.00000000000BH000 8.00000000000 5835.764604850001459038.99230999990 0.00007000000 0.03358000000 25446.00000000000 8923.00000000000BH000 8.00000000000 3225.91189234000 596007.83530300006 0.00426000000 1.46397000000 25447.00000000000 8948.00000000000BH000 8.00000000000 148685.94260800001 3.71594406510e+007 0.00034000000 0.07795000000 25448.00000000000 8249.00000000000BH000 8.00000000000 7893.161691090002907961.38084999980 0.00008000000 0.04270000000 25450.00000000000 9142.00000000000BH000 8.00000000000 3522.14017684000 670852.43702900002 0.00011000000 0.05100000000 25451.00000000000 8952.00000000000BH000 8.00000000000 4873.07559455000 958918.24764600000 0.00012000000 0.05852000000 25452.00000000000 8122.00000000000BH000 8.00000000000 5197.662062300001014064.32383000000 0.00021000000 0.09015000000 25453.00000000000 8404.00000000000BH000 8.00000000000 7386.058107950001829446.59517000010 0.00063000000 0.13460000000 25454.00000000000 8650.00000000000BH000 8.00000000000 13152.967361600005455795.25251000000 0.00363000000 0.75726000000 25457.00000000000 8719.00000000000BH000 8.00000000000EGVLCEGVLCRservoir Kiamika Rservoir Kiamika 70809.37012360001 3.14981133564e+007 0.00113000000 0.26841000000 25459.00000000000 8158.00000000000BH000 8.00000000000EIEHWEIEHWLac au Sorcier Lac au Sorcier 24518.086946100009830378.15468999930 0.00108000000 0.16695000000 25460.00000000000 9155.00000000000BH000 8.00000000000EGEFQEGEFQLac Doolittle Lac Doolittle 15919.864305100009373471.85558000020 0.00051000000 0.12040000000 25461.00000000000 8432.00000000000BH000 8.00000000000EHBYEEHBYELac Lusignan Lac Lusignan 12240.485274600004461834.54777000010 0.00011000000 0.04462000000 25462.00000000000 8477.00000000000BH000 8.00000000000 4417.39832361000 923532.36624200002 0.00013000000 0.05557000000 25463.00000000000 7967.00000000000BH000 8.00000000000 5033.365032640001087708.72193000000 0.00025000000 0.08823000000 25464.00000000000 8510.00000000000BH000 8.00000000000 9198.301388950002124558.98967000000 0.00031000000 0.08462000000 25466.00000000000 8562.00000000000BH000 8.00000000000 9016.387764840002715575.45809999990 0.00008000000 0.03686000000 25467.00000000000 8575.00000000000BH000 8.00000000000 3671.55845181000 689956.14239299996 0.00011000000 0.04571000000 25468.00000000000 8541.00000000000BH000 8.00000000000 4380.60247245000 923137.25053500000 0.00020000000 0.08234000000 25469.00000000000 8082.00000000000BH000 8.00000000000 7144.157538690001760055.92677000000 0.00016000000 0.06197000000 25470.00000000000 8727.00000000000BH000 8.00000000000 5996.904912600001363049.78942999990 0.00044000000 0.09984000000 25471.00000000000 7986.00000000000BH000 8.00000000000 10179.226757200003781923.44188999990 0.00048000000 0.12091000000 25472.00000000000 9114.00000000000BH000 8.00000000000 11959.589964300004176540.78752999990 0.00051000000 0.16604000000 25473.00000000000 8102.00000000000BH000 8.00000000000EIDEWEIDEWLac Shawinigan Lac Shawinigan 13788.192392700004426661.70995000000 0.00020000000 0.07081000000 25475.00000000000 8358.00000000000BH000 8.00000000000 6529.383134450001707154.68629999990 0.00007000000 0.03577000000 25476.00000000000 8425.00000000000BH000 8.00000000000 3723.24504889000 605310.59736599994 0.00007000000 0.03465000000 25478.00000000000 8565.00000000000BH000 8.00000000000 3446.71555337000 588897.50061100000 0.00065000000 0.19404000000 25479.00000000000 8462.00000000000BH000 8.00000000000 18224.699095800005607016.87784000020 0.00013000000 0.06562000000 25481.00000000000 8105.00000000000BH000 8.00000000000EIDEWEIDEWLac Shawinigan Lac Shawinigan 5615.401216260001145396.37228000000 0.00049000000 0.11982000000 25483.00000000000 8813.00000000000BH000 8.00000000000 11748.777644000004215405.37131000030 0.00012000000 0.05672000000 25485.00000000000 8627.00000000000BH000 8.00000000000 5749.905938500001053476.64803999990 0.00011000000 0.04189000000 25486.00000000000 8038.00000000000BH000 8.00000000000 3789.43757783000 913856.69446399994 0.00006000000 0.03893000000 25487.00000000000 8293.00000000000BH000 8.00000000000 3216.25557664000 521961.55737800000 0.00004000000 0.03390000000 25488.00000000000 9164.00000000000BH000 8.00000000000 2838.40966771000 367939.37736799999 0.00066000000 0.13223000000 25490.00000000000 8004.00000000000BH000 8.00000000000EHQQEEHQQELac des Piles Lac des Piles 11716.036038200005693783.99184000030 0.00041000000 0.13784000000 25491.00000000000 8110.00000000000BH000 8.00000000000 11705.559686400003560915.83577999980 0.00015000000 0.05830000000 25492.00000000000 8310.00000000000BH000 8.00000000000 5526.501327190001304765.70072000010 0.00042000000 0.13345000000 25493.00000000000 8602.00000000000BH000 8.00000000000 12858.941941600003687570.36177999990 0.00062000000 0.12920000000 25494.00000000000 9088.00000000000BH000 8.00000000000EHXFSEHXFSLac Rond Lac Rond 11563.280460200005421060.58492000030 0.00017000000 0.05970000000 25495.00000000000 8417.00000000000BH000 8.00000000000 5357.166113140001517629.86368000000 0.00026000000 0.10218000000 25496.00000000000 8570.00000000000BH000 8.00000000000 8954.606118960002258169.81699000020 0.00017000000 0.05488000000 25497.00000000000 8631.00000000000BH000 8.00000000000 5484.242854370001500267.39709000010 0.00042000000 0.15679000000 25498.00000000000 9134.00000000000BH000 8.00000000000 14055.733106700003605062.68622000000 0.00007000000 0.03875000000 25499.00000000000 8635.00000000000BH000 8.00000000000 3671.58265292000 597195.70249000005 0.00009000000 0.05078000000 25500.00000000000 9181.00000000000BH000 8.00000000000 4202.45274687000 787202.69681200001 0.00011000000 0.04354000000 25501.00000000000 8769.00000000000BH000 8.00000000000 3724.61166229000 918788.38330700004 0.00010000000 0.05025000000 25503.00000000000 8555.00000000000BH000 8.00000000000 4471.80032022000 903151.90214300004 0.00022000000 0.08881000000 25505.00000000000 8451.00000000000BH000 8.00000000000 7948.171640560001896971.60540000000 0.00015000000 0.07346000000 25506.00000000000 8376.00000000000BH000 8.00000000000 6250.257699100001272394.55877000000 0.00293000000 0.66372000000 25507.00000000000 9112.00000000000BH000 8.00000000000EGDATEGDATLac Dsert Lac Dsert 61460.29006650000 2.54347581549e+007 0.00015000000 0.05276000000 25508.00000000000 8768.00000000000BH000 8.00000000000 5505.106030250001301442.09822000000 0.00025000000 0.09613000000 25512.00000000000 9084.00000000000BH000 8.00000000000 8893.386937960002174291.62741999980 0.00016000000 0.05060000000 25513.00000000000 8061.00000000000BH000 8.00000000000 4473.738460220001428956.02854000010 0.00057000000 0.22813000000 25514.00000000000 9159.00000000000BH000 8.00000000000 20690.578573500004950942.43123000020 0.00007000000 0.03494000000 25515.00000000000 8903.00000000000BH000 8.00000000000 3551.50124859000 573202.85220600001 0.00012000000 0.05488000000 25517.00000000000 8706.00000000000BH000 8.00000000000 5144.537777780001017110.49767000000 0.00014000000 0.05104000000 25518.00000000000 8807.00000000000BH000 8.00000000000 5070.635015930001193387.36861000000 0.00033000000 0.10993000000 25519.00000000000 8343.00000000000BH000 8.00000000000 9890.662798200002865689.93947000010 0.00021000000 0.07984000000 25520.00000000000 8938.00000000000BH000 8.00000000000 6941.669901420001780824.21781999990 0.00020000000 0.07093000000 25521.00000000000 8291.00000000000BH000 8.00000000000 6706.182465540001703998.32492999990 0.00053000000 0.13110000000 25522.00000000000 9219.00000000000BH000 8.00000000000 12126.988711300004570265.24033000040 0.00009000000 0.06959000000 25523.00000000000 8418.00000000000BH000 8.00000000000 5609.31201045000 767465.23380000005 0.00010000000 0.04364000000 25525.00000000000 9203.00000000000BH000 8.00000000000 4181.63498147000 896055.71487000003 0.00008000000 0.03422000000 25526.00000000000 8757.00000000000BH000 8.00000000000 3154.48543772000 700136.86381000001 0.00006000000 0.03760000000 25527.00000000000 8598.00000000000BH000 8.00000000000 3674.31802423000 564388.86356400000 0.00007000000 0.03949000000 25528.00000000000 8545.00000000000BH000 8.00000000000 3317.06371375000 617384.12984099996 0.00011000000 0.04537000000 25529.00000000000 8394.00000000000BH000 8.00000000000 4151.61664639000 971230.42096100003 0.00013000000 0.04976000000 25530.00000000000 9042.00000000000BH000 8.00000000000 4882.762715580001105489.60029000000 0.00043000000 0.16181000000 25531.00000000000 8672.00000000000BH000 8.00000000000 14657.490808800003702360.09748000000 0.00040000000 0.14186000000 25532.00000000000 9000.00000000000BH000 8.00000000000 13745.502894600003494309.84262999990 0.00010000000 0.04119000000 25533.00000000000 8289.00000000000BH000 8.00000000000 4172.50004609000 892963.04413499997 0.00009000000 0.03970000000 25534.00000000000 8388.00000000000BH000 8.00000000000 3738.66730041000 742480.85742799996 0.00010000000 0.04837000000 25535.00000000000 8559.00000000000BH000 8.00000000000 4368.42432246000 864782.71496899996 0.00024000000 0.09071000000 25536.00000000000 8178.00000000000BH000 8.00000000000 7956.796168560002106350.41893999980 0.00013000000 0.06713000000 25538.00000000000 8199.00000000000BH000 8.00000000000 5494.613739200001132156.01625000010 0.00006000000 0.03368000000 25539.00000000000 8970.00000000000BH000 8.00000000000 3132.33134262000 537505.50508499995 0.00027000000 0.08068000000 25540.00000000000 8364.00000000000BH000 8.00000000000 7309.412942860002369337.43641000010 0.00020000000 0.07353000000 25541.00000000000 8492.00000000000BH000 8.00000000000 6518.541280150001724769.56415000000 0.00102000000 0.35496000000 25542.00000000000 9125.00000000000BH000 8.00000000000 33135.684726900008836877.97171000020 0.00013000000 0.04655000000 25543.00000000000 9004.00000000000BH000 8.00000000000 4569.980380790001114677.31657000000 0.00005000000 0.04165000000 25544.00000000000 9194.00000000000BH000 8.00000000000 3472.27624237000 465728.50392799999 0.00027000000 0.08432000000 25545.00000000000 8708.00000000000BH000 8.00000000000 7679.991529480002316131.16369999990 0.00003000000 0.03071000000 25546.00000000000 9291.00000000000BH000 8.00000000000 2882.16369593000 264284.08500999998 0.00006000000 0.03606000000 25547.00000000000 9052.00000000000BH000 8.00000000000 3578.01808263000 530232.54459299997 0.00010000000 0.06400000000 25549.00000000000 9122.00000000000BH000 8.00000000000 5106.66930194000 910318.58349800005 0.00002000000 0.02139000000 25550.00000000000 8305.00000000000BH000 8.00000000000 1875.68538494000 207786.82686700000 0.00006000000 0.03274000000 25552.00000000000 8651.00000000000BH000 8.00000000000 3205.20990861000 516836.76774799998 0.00043000000 0.10348000000 25553.00000000000 8683.00000000000BH000 8.00000000000 9808.089468040003716243.44920000010 0.00022000000 0.08272000000 25554.00000000000 8407.00000000000BH000 8.00000000000 7672.270871440001876618.12792000010 0.00040000000 0.16789000000 25555.00000000000 8360.00000000000BH000 8.00000000000 14260.951086500003485711.85623000000 0.00027000000 0.10432000000 25556.00000000000 8186.00000000000BH000 8.00000000000 9176.867168320002304355.39948000010 0.00007000000 0.03508000000 25559.00000000000 8689.00000000000BH000 8.00000000000 3516.15350074000 641147.57712000003 0.00016000000 0.06102000000 25560.00000000000 8915.00000000000BH000 8.00000000000 5072.604578960001371283.89543000000 0.00033000000 0.08117000000 25561.00000000000 8532.00000000000BH000 8.00000000000 7409.697123220002863529.74458000020 0.00006000000 0.03876000000 25562.00000000000 9308.00000000000BH000 8.00000000000 3642.80520828000 562091.40972700005 0.00005000000 0.03774000000 25564.00000000000 9197.00000000000BH000 8.00000000000 3074.27883915000 439059.08392900001 0.00062000000 0.11033000000 25566.00000000000 8724.00000000000BH000 8.00000000000 10481.216685100005368602.58280999960 0.00009000000 0.04313000000 25567.00000000000 8714.00000000000BH000 8.00000000000 4583.56564901000 750507.54015400005 0.00012000000 0.04658000000 25568.00000000000 8525.00000000000BH000 8.00000000000 4364.929221300001033139.43906000000 0.00029000000 0.07428000000 25569.00000000000 8318.00000000000BH000 8.00000000000EHYWTEHYWTLac Saint-Bernard Lac Saint-Bernard 6625.455895030002546346.18261000000 0.00008000000 0.04003000000 25570.00000000000 8583.00000000000BH000 8.00000000000 3386.88716281000 676209.43025700003 0.00018000000 0.06164000000 25571.00000000000 8673.00000000000BH000 8.00000000000 5292.237334330001590219.03563000010 0.00013000000 0.06176000000 25572.00000000000 8873.00000000000BH000 8.00000000000 5560.597302950001144722.57017000000 0.00018000000 0.08424000000 25573.00000000000 8994.00000000000BH000 8.00000000000 8280.219486250001596391.87986000000 0.00100000000 0.18584000000 25575.00000000000 8237.00000000000BH000 8.00000000000EGFWVEGFWVLac l'Eau Claire Lac l'Eau Claire 16336.423735200008683390.92894000000 0.00028000000 0.07028000000 25576.00000000000 8546.00000000000BH000 8.00000000000 6691.866335250002405116.94476999990 0.00009000000 0.04558000000 25577.00000000000 8590.00000000000BH000 8.00000000000 4147.65429895000 786521.51017100003 0.00018000000 0.06070000000 25579.00000000000 8463.00000000000BH000 8.00000000000 5904.294878390001576238.23425000000 0.00008000000 0.04940000000 25580.00000000000 9272.00000000000BH000 8.00000000000 4049.59144792000 707795.96755199996 0.00031000000 0.08341000000 25581.00000000000 8671.00000000000BH000 8.00000000000 8160.303402520002717239.58810999990 0.00114000000 0.24623000000 25582.00000000000 9283.00000000000BH000 8.00000000000EFRDPEFRDPLac Brodtkorb Lac Brodtkorb 22603.167627400009937598.22434999980 0.00003000000 0.02438000000 25584.00000000000 8711.00000000000BH000 8.00000000000 2164.78983125000 243311.82297400001 0.00045000000 0.12206000000 25585.00000000000 8692.00000000000BH000 8.00000000000 11075.002258500003930294.86304000020 0.00009000000 0.04025000000 25586.00000000000 9058.00000000000BH000 8.00000000000 4083.46973606000 782875.77780799998 0.00016000000 0.07074000000 25587.00000000000 8488.00000000000BH000 8.00000000000 6410.500398160001430112.27354000000 0.00095000000 0.18761000000 25588.00000000000 8996.00000000000BH000 8.00000000000 17955.488948400008278686.24610000010 0.00036000000 0.11003000000 25589.00000000000 9092.00000000000BH000 8.00000000000 9886.448668550003163360.97319999990 0.00017000000 0.05794000000 25591.00000000000 8319.00000000000BH000 8.00000000000 5191.043863010001500566.72240999990 0.00006000000 0.03891000000 25593.00000000000 8947.00000000000BH000 8.00000000000 3236.01701682000 513706.43856099999 0.00006000000 0.03151000000 25595.00000000000 8633.00000000000BH000 8.00000000000 3262.08769324000 478762.93297500000 0.00104000000 0.21711000000 25596.00000000000 8662.00000000000BH000 8.00000000000EGJSEEGJSELac Forbes Lac Forbes 20615.706806600009075057.60562000050 0.00116000000 0.20119000000 25597.00000000000 8348.00000000000BH000 8.00000000000EHYMFEHYMFLac Sacacomie Lac Sacacomie 19834.53039970000 1.00596506051e+007 0.00043000000 0.13075000000 25598.00000000000 8564.00000000000BH000 8.00000000000 11329.170089800003715668.91800000010 0.00015000000 0.06102000000 25599.00000000000 8884.00000000000BH000 8.00000000000 5235.439644560001325195.74973000000 0.00012000000 0.05809000000 25600.00000000000 8735.00000000000BH000 8.00000000000 6247.125921880001085491.15680000000 0.00010000000 0.04375000000 25601.00000000000 8241.00000000000BH000 8.00000000000 4161.95599469000 831627.19182700000 0.00039000000 0.09992000000 25602.00000000000 8761.00000000000BH000 8.00000000000 9214.793106270003436497.98571000020 0.00011000000 0.04939000000 25603.00000000000 8604.00000000000BH000 8.00000000000 4289.24414911000 976991.78535799996 0.00163000000 0.70188000000 25604.00000000000 9047.00000000000BH000 8.00000000000 67079.20504340000 1.42518021209e+007 0.00040000000 0.11174000000 25605.00000000000 9021.00000000000BH000 8.00000000000 9871.139890060003496632.12184000020 0.00006000000 0.04112000000 25606.00000000000 8762.00000000000BH000 8.00000000000 3722.65834902000 485530.42707300000 0.00010000000 0.04635000000 25607.00000000000 8999.00000000000BH000 8.00000000000 4115.50505223000 894741.12092100002 0.00019000000 0.06561000000 25608.00000000000 8704.00000000000BH000 8.00000000000 6407.931097170001641911.76157000010 0.00014000000 0.04842000000 25609.00000000000 8919.00000000000BH000 8.00000000000EIHFREIHFRLac Tibriade Lac Tibriade 4943.617821930001178335.63950000000 0.00009000000 0.04061000000 25610.00000000000 8936.00000000000BH000 8.00000000000 3905.82001154000 824759.98884400004 0.00008000000 0.03615000000 25611.00000000000 9100.00000000000BH000 8.00000000000 3310.14267336000 659793.08007999999 0.00024000000 0.07920000000 25612.00000000000 8848.00000000000BH000 8.00000000000 7392.216628910002088407.00197000010 0.00007000000 0.03711000000 25613.00000000000 8729.00000000000BH000 8.00000000000 3496.78861362000 604614.96860899997 0.00012000000 0.05437000000 25614.00000000000 8825.00000000000BH000 8.00000000000 5089.728164050001038649.04379000000 0.00017000000 0.08733000000 25615.00000000000 9402.00000000000BH000 8.00000000000 8016.192723220001500380.85660000010 0.00235000000 0.50839000000 25616.00000000000 9433.00000000000BH000 8.00000000000EFRRAEFRRALac Bryson Lac Bryson 48378.20263900000 2.04888602272e+007 0.00050000000 0.15531000000 25618.00000000000 8812.00000000000BH000 8.00000000000 14338.058266700004386336.87908000030 0.00017000000 0.06271000000 25619.00000000000 8746.00000000000BH000 8.00000000000 5692.606332570001485495.73466000010 0.00002000000 0.02159000000 25620.00000000000 8787.00000000000BH000 8.00000000000 1926.24695355000 216096.68218300000 0.00006000000 0.04452000000 25621.00000000000 8983.00000000000BH000 8.00000000000 3746.92179226000 559813.11538600002 0.00017000000 0.05954000000 25622.00000000000 9265.00000000000BH000 8.00000000000 6096.380368730001455412.26960000000 0.00015000000 0.05643000000 25623.00000000000 8661.00000000000BH000 8.00000000000 5284.967336610001287216.96383000000 0.00083000000 0.14788000000 25624.00000000000 9307.00000000000BH000 8.00000000000 14080.246518900007219670.06154000010 0.00011000000 0.05347000000 25625.00000000000 8328.00000000000BH000 8.00000000000 4415.14275599000 932302.81219199998 0.00037000000 0.09533000000 25626.00000000000 9345.00000000000BH000 8.00000000000 9139.147883810003259029.35295000020 0.00031000000 0.10789000000 25628.00000000000 9041.00000000000BH000 8.00000000000 9696.808658120002709413.69040999980 0.00062000000 0.12990000000 25629.00000000000 9146.00000000000BH000 8.00000000000EHUBXEHUBXLac Quinn Lac Quinn 13432.745232900005368061.29992999970 0.00009000000 0.03787000000 25631.00000000000 8399.00000000000BH000 8.00000000000 3565.60520322000 768524.34008700005 0.00007000000 0.03649000000 25632.00000000000 8783.00000000000BH000 8.00000000000 3478.95355200000 633816.52198700001 0.00183000000 0.29320000000 25633.00000000000 9105.00000000000BH000 8.00000000000EGRYQEGRYQLac des les Lac des les 29722.48377560000 1.59641647245e+007 0.00007000000 0.03687000000 25634.00000000000 8688.00000000000BH000 8.00000000000 3497.34459879000 592211.18100400001 0.00006000000 0.04298000000 25636.00000000000 9376.00000000000BH000 8.00000000000 3880.75697089000 523662.83747799997 0.00007000000 0.03368000000 25637.00000000000 9195.00000000000BH000 8.00000000000 3495.64220099000 571823.13347500004 0.00005000000 0.03417000000 25638.00000000000 8601.00000000000BH000 8.00000000000 3340.79683349000 453304.75549000001 0.00011000000 0.05831000000 25639.00000000000 9121.00000000000BH000 8.00000000000 5097.25719754000 994493.29968699999 0.00014000000 0.06242000000 25640.00000000000 8981.00000000000BH000 8.00000000000 5406.335301540001238854.04312000000 0.00005000000 0.02794000000 25641.00000000000 8885.00000000000BH000 8.00000000000 2851.96288637000 401900.50157899997 0.00030000000 0.12243000000 25642.00000000000 8616.00000000000BH000 8.00000000000 11026.898159100002643797.60480999990 0.00084000000 0.14666000000 25643.00000000000 8914.00000000000BH000 8.00000000000 15526.246098400007295746.40916000030 0.00018000000 0.08019000000 25645.00000000000 8513.00000000000BH000 8.00000000000 6611.792247970001576068.85531000000 0.00050000000 0.14064000000 25646.00000000000 8558.00000000000BH000 8.00000000000 12299.821618300004344388.45380999990 0.00007000000 0.05926000000 25647.00000000000 8674.00000000000BH000 8.00000000000 5200.90834125000 631352.26202799997 0.00006000000 0.03511000000 25648.00000000000 9154.00000000000BH000 8.00000000000 3220.83913247000 519508.49822399998 0.00030000000 0.12158000000 25649.00000000000 9002.00000000000BH000 8.00000000000 10789.282233200002616755.32953999980 0.00013000000 0.05138000000 25650.00000000000 8500.00000000000BH000 8.00000000000 5088.023491870001174488.65906000000 0.00006000000 0.03763000000 25652.00000000000 8980.00000000000BH000 8.00000000000 3246.67527343000 561686.98857100005 0.00007000000 0.03683000000 25653.00000000000 8862.00000000000BH000 8.00000000000 3283.99159469000 576486.09216700005 0.00019000000 0.08163000000 25654.00000000000 8797.00000000000BH000 8.00000000000 7019.183918700001668221.31712000000 0.00005000000 0.03722000000 25655.00000000000 8876.00000000000BH000 8.00000000000 3274.87660122000 466516.78586300003 0.00247000000 0.29922000000 25656.00000000000 8984.00000000000BH000 8.00000000000ELTXJELTXJGrand lac Nominingue Grand lac Nominingue 27974.01075390000 2.15373613972e+007 0.00014000000 0.04788000000 25657.00000000000 8950.00000000000BH000 8.00000000000 4629.586160300001233840.54309000010 0.00007000000 0.03322000000 25658.00000000000 8734.00000000000BH000 8.00000000000 3087.40817822000 576018.40988599998 0.00028000000 0.08932000000 25660.00000000000 8880.00000000000BH000 8.00000000000 8358.090016650002419316.31884999990 0.00014000000 0.05458000000 25661.00000000000 8549.00000000000BH000 8.00000000000 4996.049202550001197038.08810999990 0.00193000000 0.37998000000 25662.00000000000 9370.00000000000BH000 8.00000000000EHTQMEHTQMLac Pythonga Lac Pythonga 38916.13665500000 1.68245337586e+007 0.00041000000 0.11006000000 25664.00000000000 9217.00000000000BH000 8.00000000000 9997.088641760003603558.31802000010 0.00005000000 0.03245000000 25665.00000000000 8926.00000000000BH000 8.00000000000 3299.50010037000 420149.35432400001 0.00004000000 0.03249000000 25666.00000000000 8743.00000000000BH000 8.00000000000 2782.90738250000 334881.54497500003 0.00004000000 0.02703000000 25667.00000000000 8402.00000000000BH000 8.00000000000 2526.02894397000 331536.96377400000 0.00007000000 0.03380000000 25668.00000000000 8623.00000000000BH000 8.00000000000 3184.33823101000 597321.86843100004 0.00051000000 0.11291000000 25669.00000000000 9325.00000000000BH000 8.00000000000 10756.491981600004494000.23295999970 0.00006000000 0.03589000000 25670.00000000000 8663.00000000000BH000 8.00000000000 3128.49013106000 539340.24134399998 0.00017000000 0.06856000000 25671.00000000000 9497.00000000000BH000 8.00000000000 6256.379173720001452309.52533000010 0.00013000000 0.05090000000 25672.00000000000 8854.00000000000BH000 8.00000000000 4923.711315500001164365.17742000010 0.00006000000 0.03181000000 25673.00000000000 8982.00000000000BH000 8.00000000000 3148.98464255000 538556.49062599998 0.00016000000 0.06038000000 25674.00000000000 8705.00000000000BH000 8.00000000000 6296.474292790001386474.94696999990 0.00006000000 0.03246000000 25675.00000000000 8752.00000000000BH000 8.00000000000 3296.34446314000 500996.45516100002 0.00020000000 0.06096000000 25676.00000000000 8628.00000000000BH000 8.00000000000 5945.401366580001774391.84394999990 0.00010000000 0.04049000000 25677.00000000000 8851.00000000000BH000 8.00000000000 3920.90955549000 860310.00861100003 0.00049000000 0.11997000000 25678.00000000000 8898.00000000000BH000 8.00000000000 11469.369961000004297761.71191000010 0.00009000000 0.04860000000 25679.00000000000 8522.00000000000BH000 8.00000000000 4262.03667908000 812144.57100600004 0.00008000000 0.05829000000 25680.00000000000 8594.00000000000BH000 8.00000000000 4693.30205339000 673176.77872199996 0.00022000000 0.05978000000 25681.00000000000 9288.00000000000BH000 8.00000000000 5464.779548520001933629.29256000000 0.00012000000 0.05408000000 25682.00000000000 8578.00000000000BH000 8.00000000000 4678.479864590001020118.47569000000 0.00013000000 0.04976000000 25684.00000000000 8615.00000000000BH000 8.00000000000 4490.467887250001164407.45720999990 0.00009000000 0.04358000000 25685.00000000000 9081.00000000000BH000 8.00000000000 3688.75175463000 799761.77577399998 0.00014000000 0.06299000000 25686.00000000000 8728.00000000000BH000 8.00000000000 6194.858672670001219430.67350000000 0.00008000000 0.04240000000 25687.00000000000 9249.00000000000BH000 8.00000000000 3575.57635465000 728111.89700800006 0.00017000000 0.05959000000 25688.00000000000 8895.00000000000BH000 8.00000000000 5688.130236850001488181.08036000000 0.00003000000 0.02055000000 25689.00000000000 8855.00000000000BH000 8.00000000000 1882.03657194000 231135.65211299999 0.00008000000 0.04583000000 25690.00000000000 9169.00000000000BH000 8.00000000000 3872.50047544000 726579.68778200005 0.00007000000 0.03617000000 25691.00000000000 9129.00000000000BH000 8.00000000000 3657.63559794000 596896.50222899998 0.00010000000 0.04532000000 25692.00000000000 9064.00000000000BH000 8.00000000000 4087.58099326000 861966.95775599999 0.00012000000 0.04419000000 25693.00000000000 8520.00000000000BH000 8.00000000000 4275.713254700001052340.99342000000 0.00059000000 0.17593000000 25694.00000000000 9235.00000000000BH000 8.00000000000 16585.688105700005177796.86240000000 0.00015000000 0.05626000000 25695.00000000000 9107.00000000000BH000 8.00000000000 5435.632701170001271896.78253000000 0.00008000000 0.04387000000 25696.00000000000 9210.00000000000BH000 8.00000000000 4592.49210327000 722628.60480099998 0.00012000000 0.05358000000 25697.00000000000 8833.00000000000BH000 8.00000000000 4836.736991010001079587.21625000010 0.00012000000 0.05090000000 25698.00000000000 9048.00000000000BH000 8.00000000000 4609.080775030001074867.67112999990 0.00058000000 0.17294000000 25699.00000000000 9141.00000000000BH000 8.00000000000 16178.289063900005067344.91875000020 0.00011000000 0.06264000000 25700.00000000000 9206.00000000000BH000 8.00000000000 6390.31151808000 928176.24440600001 0.00009000000 0.04096000000 25702.00000000000 9174.00000000000BH000 8.00000000000 4083.40942810000 812696.70658500004 0.00014000000 0.05750000000 25703.00000000000 9117.00000000000BH000 8.00000000000 5649.081011560001214402.10216000000 0.00017000000 0.06108000000 25704.00000000000 8658.00000000000BH000 8.00000000000 5452.567081130001479066.39871000010 0.00038000000 0.14283000000 25705.00000000000 8954.00000000000BH000 8.00000000000 13436.277573300003350236.79268000000 0.00018000000 0.05741000000 25706.00000000000 8571.00000000000BH000 8.00000000000 5287.167400460001559333.35806000000 0.00009000000 0.05452000000 25707.00000000000 8745.00000000000BH000 8.00000000000 4509.00247352000 789878.35120300006 0.00144000000 0.35231000000 25708.00000000000 9472.00000000000BH000 8.00000000000 32835.89257560000 1.25844871142e+007 0.00003000000 0.02760000000 25711.00000000000 8691.00000000000BH000 8.00000000000 2580.04180279000 276354.95277400000 0.00022000000 0.09817000000 25712.00000000000 8886.00000000000BH000 8.00000000000 9000.265036210001921273.80562000000 0.00028000000 0.11278000000 25713.00000000000 9003.00000000000BH000 8.00000000000 10620.847478200002430871.38369000000 0.00047000000 0.14131000000 25714.00000000000 8815.00000000000BH000 8.00000000000 11943.809562000004096570.65103999990 0.00027000000 0.08142000000 25715.00000000000 9191.00000000000BH000 8.00000000000 7666.754699600002389442.85315999990 0.00022000000 0.06918000000 25716.00000000000 9266.00000000000BH000 8.00000000000 6396.995497150001947803.80777000010 0.00014000000 0.05177000000 25717.00000000000 9149.00000000000BH000 8.00000000000 4953.113589720001217199.60703000010 0.00017000000 0.06983000000 25718.00000000000 9143.00000000000BH000 8.00000000000 6416.520138600001519115.56165999990 0.00046000000 0.15339000000 25719.00000000000 9592.00000000000BH000 8.00000000000 15002.399560800004058705.30983999980 0.00051000000 0.10950000000 25720.00000000000 9111.00000000000BH000 8.00000000000 10448.576584200004420782.77622000030 0.00007000000 0.03934000000 25721.00000000000 9067.00000000000BH000 8.00000000000 3436.09895166000 648330.80692000000 0.00010000000 0.05545000000 25722.00000000000 9184.00000000000BH000 8.00000000000 5228.37097112000 884062.87274999998 0.00083000000 0.13954000000 25724.00000000000 9099.00000000000BH000 8.00000000000 12775.608718900007236343.97396999970 0.00016000000 0.04904000000 25725.00000000000 8613.00000000000BH000 8.00000000000 4693.375474740001441555.15873000000 0.00056000000 0.16204000000 25727.00000000000 9140.00000000000BH000 8.00000000000 16188.929659200004897105.96920999980 0.00017000000 0.08738000000 25729.00000000000 8942.00000000000BH000 8.00000000000 7110.641543510001507258.65742999990 0.00014000000 0.06439000000 25730.00000000000 9275.00000000000BH000 8.00000000000 6237.611529890001254307.21628000010 0.00029000000 0.10756000000 25731.00000000000 8893.00000000000BH000 8.00000000000 9675.639002400002567700.93373999980 0.00007000000 0.03750000000 25732.00000000000 9028.00000000000BH000 8.00000000000 3508.90547784000 621831.25643800001 0.00034000000 0.09844000000 25733.00000000000 8838.00000000000BH000 8.00000000000 9489.687226310002987085.86197000000 0.00037000000 0.09950000000 25734.00000000000 9029.00000000000BH000 8.00000000000 9580.437792210003216011.44302000010 0.00010000000 0.04817000000 25735.00000000000 9139.00000000000BH000 8.00000000000 4366.76083031000 893906.40341399994 0.00015000000 0.05798000000 25736.00000000000 9086.00000000000BH000 8.00000000000 5580.678446690001321283.91589000010 0.00016000000 0.06069000000 25737.00000000000 8879.00000000000BH000 8.00000000000 5457.189557760001370526.48032000010 0.00007000000 0.04579000000 25738.00000000000 9187.00000000000BH000 8.00000000000 3971.36912713000 583101.07050599996 0.00028000000 0.09716000000 25739.00000000000 8990.00000000000BH000 8.00000000000 9156.865666100002441723.06802000010 0.00019000000 0.06078000000 25740.00000000000 8871.00000000000BH000 8.00000000000 6101.835788010001692749.82547000000 0.00148000000 0.33399000000 25741.00000000000 9610.00000000000BH000 8.00000000000EGFRUEGFRULac Duval Lac Duval 32071.03117390000 1.29376673781e+007 0.00009000000 0.04137000000 25742.00000000000 9082.00000000000BH000 8.00000000000 3930.61224245000 746746.72856600001 0.00007000000 0.03750000000 25743.00000000000 9256.00000000000BH000 8.00000000000 3525.19627436000 650272.33625699999 0.00005000000 0.03799000000 25744.00000000000 9252.00000000000BH000 8.00000000000 3269.64312775000 475769.84997600003 0.00008000000 0.03781000000 25745.00000000000 9148.00000000000BH000 8.00000000000 3478.96401559000 684529.62527800002 0.00014000000 0.05291000000 25746.00000000000 9216.00000000000BH000 8.00000000000 4948.344235830001229418.01847000000 0.00014000000 0.05004000000 25747.00000000000 9278.00000000000BH000 8.00000000000 4636.595781550001191595.78493000010 0.00008000000 0.04343000000 25748.00000000000 9237.00000000000BH000 8.00000000000 3840.72438215000 658856.94001300004 0.00020000000 0.08710000000 25749.00000000000 9090.00000000000BH000 8.00000000000 8393.123384030001769673.72888000010 0.00006000000 0.03417000000 25750.00000000000 9119.00000000000BH000 8.00000000000 3222.32239650000 541453.54098599998 0.00031000000 0.08319000000 25751.00000000000 9394.00000000000BH000 8.00000000000 8489.911061310002696536.39115000000 0.00157000000 0.30396000000 25752.00000000000 8933.00000000000BH000 8.00000000000EFISPEFISPLac Archambault Lac Archambault 29698.13393000000 1.37546033308e+007 0.00027000000 0.06706000000 25753.00000000000 9347.00000000000BH000 8.00000000000 6221.126378430002386161.04283000020 0.00116000000 0.14298000000 25755.00000000000 8687.00000000000BH000 8.00000000000EHELOEHELOLac Maskinong Lac Maskinong 13015.16989850000 1.01804853103e+007 0.00004000000 0.02884000000 25756.00000000000 9294.00000000000BH000 8.00000000000 2618.43464059000 332401.69794599997 0.00006000000 0.03253000000 25757.00000000000 9251.00000000000BH000 8.00000000000 3311.72720058000 510132.27230800001 0.00024000000 0.09456000000 25758.00000000000 9589.00000000000BH000 8.00000000000 9268.155382160002060608.75521999990 0.00014000000 0.05164000000 25759.00000000000 8937.00000000000BH000 8.00000000000 4947.036200900001205398.35302000000 0.00011000000 0.05411000000 25760.00000000000 9258.00000000000BH000 8.00000000000 5391.61887105000 996315.28502499999 0.00009000000 0.04069000000 25761.00000000000 9653.00000000000BH000 8.00000000000 3837.01323580000 746689.96271200001 0.00012000000 0.05385000000 25762.00000000000 9276.00000000000BH000 8.00000000000 5326.380364790001066940.78976999990 0.00010000000 0.04692000000 25763.00000000000 9151.00000000000BH000 8.00000000000 4205.43136124000 857427.02489700005 0.00010000000 0.04917000000 25765.00000000000 9647.00000000000BH000 8.00000000000 4663.10961541000 917635.54818000004 0.00055000000 0.10323000000 25766.00000000000 9167.00000000000BH000 8.00000000000 9173.587277440004850815.17812999990 0.00007000000 0.03298000000 25767.00000000000 9085.00000000000BH000 8.00000000000 3216.73735635000 574423.81774299999 0.00132000000 0.22519000000 25771.00000000000 9198.00000000000BH000 8.00000000000EHHSXEHHSXLac Montjoie Lac Montjoie 22240.47657560000 1.15561067757e+007 0.00025000000 0.09984000000 25772.00000000000 9525.00000000000BH000 8.00000000000 8781.469164730002174978.42149000010 0.00497000000 0.92411000000 25773.00000000000 9304.00000000000BH000 8.00000000000EHYKNEHYKNRservoir aux Sables Rservoir aux Sables 90786.88869140000 4.36185324885e+007 0.00748000000 1.19680000000 25774.00000000000 9367.00000000000BH000 8.00000000000EIIMCEIIMCLac des Trente et Un Milles Lac des Trente et Un Milles 118192.74046299999 6.56851327290e+007 0.00170000000 0.24369000000 25775.00000000000 8935.00000000000BH000 8.00000000000EHMRMEHMRMLac Ouareau Lac Ouareau 23452.85518150000 1.48822801214e+007 0.00020000000 0.06159000000 25777.00000000000 8869.00000000000BH000 8.00000000000 5636.464833980001738136.81284000000 0.00011000000 0.04548000000 25778.00000000000 9172.00000000000BH000 8.00000000000 4347.50865033000 936477.53881099995 0.00006000000 0.03322000000 25779.00000000000 9095.00000000000BH000 8.00000000000 3268.61996485000 491708.54067500000 0.00031000000 0.07560000000 25780.00000000000 9223.00000000000BH000 8.00000000000 7558.490455380002748364.07781999980 0.00007000000 0.03929000000 25781.00000000000 9192.00000000000BH000 8.00000000000 3950.51634092000 596292.52577099996 0.00040000000 0.12111000000 25782.00000000000 9449.00000000000BH000 8.00000000000 11397.692522000003480989.30247000000 0.00003000000 0.02160000000 25783.00000000000 9053.00000000000BH000 8.00000000000 2058.23211944000 228505.45118000000 0.00022000000 0.09565000000 25784.00000000000 9523.00000000000BH000 8.00000000000 9412.074734910001925730.19252999990 0.00009000000 0.04323000000 25785.00000000000 9186.00000000000BH000 8.00000000000 3792.84189820000 803969.28136400005 0.00045000000 0.11020000000 25786.00000000000 9311.00000000000BH000 8.00000000000 10484.275441700003963527.40258000000 0.00026000000 0.12248000000 25787.00000000000 9547.00000000000BH000 8.00000000000 10625.200312800002300495.88788999990 0.00169000000 0.24019000000 25788.00000000000 9303.00000000000BH000 8.00000000000EFVLBEFVLBGrand lac du Cerf Grand lac du Cerf 23174.17543380000 1.48326293388e+007 0.00005000000 0.03719000000 25789.00000000000 9171.00000000000BH000 8.00000000000 3160.95802567000 435835.20290700003 0.00018000000 0.06117000000 25790.00000000000 9414.00000000000BH000 8.00000000000 5971.498670790001547399.06768000010 0.00013000000 0.05827000000 25791.00000000000 8920.00000000000BH000 8.00000000000 5018.819869600001106650.81172000010 0.00010000000 0.04225000000 25792.00000000000 9208.00000000000BH000 8.00000000000 4282.66852989000 876540.32656500000 0.00022000000 0.06626000000 25793.00000000000 8796.00000000000BH000 8.00000000000 6777.289600370001912532.87821000000 0.00036000000 0.14723000000 25794.00000000000 9292.00000000000BH000 8.00000000000 13516.065012800003170975.04602999990 0.03560000000 0.92583000000 25795.00000000000 8516.00000000000BH000 8.00000000000EIATYEIATYLac Saint-Pierre Lac Saint-Pierre 80537.24566010000 3.12648851567e+008 0.00050000000 0.16540000000 25796.00000000000 9168.00000000000BH000 8.00000000000 15087.383851700004383210.82125999960 0.00006000000 0.03224000000 25797.00000000000 9544.00000000000BH000 8.00000000000 3107.45258843000 499859.92208699998 0.00005000000 0.03242000000 25798.00000000000 9280.00000000000BH000 8.00000000000 3453.79463582000 447637.43955299997 0.00014000000 0.05958000000 25799.00000000000 9201.00000000000BH000 8.00000000000 5874.517177950001213588.05875000010 0.00115000000 0.23568000000 25802.00000000000 9120.00000000000BH000 8.00000000000 22118.90465070000 1.00563220126e+007 0.00010000000 0.04497000000 25803.00000000000 9226.00000000000BH000 8.00000000000 4350.00969139000 864023.62562900002 0.00015000000 0.05923000000 25804.00000000000 9166.00000000000BH000 8.00000000000 5236.086023440001271735.32219000000 0.00007000000 0.03488000000 25805.00000000000 9131.00000000000BH000 8.00000000000 3175.21736339000 603540.10253799998 0.00008000000 0.03943000000 25806.00000000000 9176.00000000000BH000 8.00000000000 3519.55127586000 680962.39473599999 0.00003000000 0.02541000000 25807.00000000000 8951.00000000000BH000 8.00000000000 2214.77303928000 284867.27310300001 0.00003000000 0.02386000000 25808.00000000000 8974.00000000000BH000 8.00000000000 2388.76639474000 234698.49184300000 0.00037000000 0.14835000000 25809.00000000000 9609.00000000000BH000 8.00000000000 12675.677417200003282596.92798000020 0.00039000000 0.11343000000 25810.00000000000 9240.00000000000BH000 8.00000000000 10990.100741400003454269.25222000010 0.00180000000 0.24288000000 25811.00000000000 9493.00000000000BH000 8.00000000000EFOLWEFOLWLac Blue Sea Lac Blue Sea 24140.60359610000 1.57681480063e+007 0.00023000000 0.08107000000 25812.00000000000 9317.00000000000BH000 8.00000000000 7754.493618740001998305.37099000000 0.00025000000 0.07864000000 25814.00000000000 9416.00000000000BH000 8.00000000000 6826.441486300002149919.20875000020 0.00017000000 0.05999000000 25815.00000000000 9326.00000000000BH000 8.00000000000 5882.111075000001453875.96754999990 0.00081000000 0.23928000000 25816.00000000000 9185.00000000000BH000 8.00000000000 24859.460542800007075512.39218000040 0.00068000000 0.16875000000 25817.00000000000 9460.00000000000BH000 8.00000000000 15604.572657800005980881.68300000020 0.00006000000 0.03607000000 25818.00000000000 8912.00000000000BH000 8.00000000000 3536.54768753000 528737.03486400004 0.00007000000 0.04176000000 25819.00000000000 9059.00000000000BH000 8.00000000000 3509.37515747000 578837.11198399996 0.00033000000 0.11974000000 25820.00000000000 9728.00000000000BH000 8.00000000000 10168.251641600002922813.51805000010 0.00066000000 0.12124000000 25821.00000000000 9567.00000000000BH000 8.00000000000 12123.004719900005793639.52697999960 0.00063000000 0.18437000000 25823.00000000000 9228.00000000000BH000 8.00000000000 17715.265357200005532647.52122000050 0.00006000000 0.03346000000 25824.00000000000 9637.00000000000BH000 8.00000000000 2963.58286713000 549168.35018499999 0.00016000000 0.06032000000 25825.00000000000 9239.00000000000BH000 8.00000000000 5841.288202030001388348.58853999990 0.00040000000 0.09238000000 25826.00000000000 9247.00000000000BH000 8.00000000000 9182.805709730003481861.15554000020 0.00053000000 0.12537000000 25827.00000000000 9695.00000000000BH000 8.00000000000 11335.010277700004657612.26618999990 0.00013000000 0.05748000000 25828.00000000000 9391.00000000000BH000 8.00000000000 5119.998396430001167730.07621999990 0.00017000000 0.08113000000 25829.00000000000 9654.00000000000BH000 8.00000000000 7459.720778640001527780.48558999990 0.00008000000 0.05077000000 25830.00000000000 9177.00000000000BH000 8.00000000000 4420.80218917000 672113.42812199995 0.00006000000 0.03502000000 25832.00000000000 9750.00000000000BH000 8.00000000000 3281.05005217000 507131.43804199999 0.00004000000 0.02673000000 25833.00000000000 9289.00000000000BH000 8.00000000000 2688.49804412000 368750.02674499998 0.00012000000 0.04922000000 25834.00000000000 9229.00000000000BH000 8.00000000000 4902.656086480001051276.63467999990 0.00034000000 0.09396000000 25836.00000000000 9400.00000000000BH000 8.00000000000 9606.770789800003017942.46774999980 0.00014000000 0.05471000000 25837.00000000000 9138.00000000000BH000 8.00000000000 4975.403612480001211040.97995999990 0.00008000000 0.04992000000 25839.00000000000 9227.00000000000BH000 8.00000000000 4503.26622649000 666824.75100699998 0.00007000000 0.04046000000 25840.00000000000 9104.00000000000BH000 8.00000000000 3385.74578121000 647871.58605599997 0.00015000000 0.05820000000 25841.00000000000 9607.00000000000BH000 8.00000000000 5513.901071710001353825.58130000000 0.00009000000 0.04619000000 25842.00000000000 9262.00000000000BH000 8.00000000000 4061.39936884000 772812.42645999999 0.00009000000 0.04531000000 25843.00000000000 9083.00000000000BH000 8.00000000000 4404.63968541000 813126.87162999995 0.00026000000 0.07856000000 25846.00000000000 9295.00000000000BH000 8.00000000000 7845.887119340002319610.68934000000 0.00032000000 0.08469000000 25847.00000000000 9102.00000000000BH000 8.00000000000 7762.904147360002795417.71010999990 0.00006000000 0.03874000000 25848.00000000000 9566.00000000000BH000 8.00000000000 3996.25862702000 536660.94959800004 0.00003000000 0.02360000000 25849.00000000000 9314.00000000000BH000 8.00000000000 2457.84081710000 261166.28758599999 0.00012000000 0.05365000000 25850.00000000000 9209.00000000000BH000 8.00000000000 4906.946490230001039948.74133999990 0.00055000000 0.18575000000 25851.00000000000 9268.00000000000BH000 8.00000000000 17823.373687800004867063.02156999990 0.00028000000 0.07933000000 25852.00000000000 9353.00000000000BH000 8.00000000000 7562.478084310002452385.76294999990 0.00006000000 0.03741000000 25853.00000000000 9063.00000000000BH000 8.00000000000 3290.88635135000 543252.55385799997 0.00028000000 0.08473000000 25854.00000000000 9681.00000000000BH000 8.00000000000 8129.955018110002480814.99295999990 0.00006000000 0.03397000000 25855.00000000000 8946.00000000000BH000 8.00000000000 3386.33052627000 527047.78894100001 0.00015000000 0.06798000000 25856.00000000000 9355.00000000000BH000 8.00000000000 7307.566675430001330138.65011000000 0.00024000000 0.06483000000 25857.00000000000 8939.00000000000BH000 8.00000000000 6535.262957050002140169.31654000000 0.00007000000 0.04380000000 25859.00000000000 9655.00000000000BH000 8.00000000000 4393.29182765000 634293.08809099998 0.00031000000 0.08683000000 25860.00000000000 9297.00000000000BH000 8.00000000000 8810.071322280002691154.34879999980 0.00021000000 0.06708000000 25861.00000000000 9557.00000000000BH000 8.00000000000 6174.426189850001847713.76828000000 0.00032000000 0.10492000000 25863.00000000000 9494.00000000000BH000 8.00000000000 9288.109383690002829158.16544000010 0.00235000000 0.34298000000 25864.00000000000 9338.00000000000BH000 8.00000000000EGLDVEGLDVLac Gagnon Lac Gagnon 34275.53261330000 2.06643901293e+007 0.00008000000 0.04531000000 25865.00000000000 9260.00000000000BH000 8.00000000000 3870.37477290000 685077.99162099999 0.00011000000 0.04213000000 25867.00000000000 9373.00000000000BH000 8.00000000000 4034.03556301000 990658.80743399996 0.00009000000 0.04538000000 25868.00000000000 9231.00000000000BH000 8.00000000000 4103.89893676000 766579.79011099995 0.00020000000 0.08220000000 25869.00000000000 9466.00000000000BH000 8.00000000000 6746.790274390001796119.63690000000 0.00026000000 0.10089000000 25870.00000000000 9161.00000000000BH000 8.00000000000 9580.794832540002271252.97000999980 0.00008000000 0.04351000000 25871.00000000000 9483.00000000000BH000 8.00000000000 4321.59493950000 703388.94356699998 0.00129000000 0.20547000000 25873.00000000000 9403.00000000000BH000 8.00000000000EIELGEIELGLac du Sourd Lac du Sourd 19267.85620990000 1.13802594800e+007 0.00036000000 0.10641000000 25874.00000000000 9452.00000000000BH000 8.00000000000 11164.789781300003189445.01764999980 0.00044000000 0.14366000000 25875.00000000000 9264.00000000000BH000 8.00000000000 12237.109076200003850864.43808999980 0.00079000000 0.20494000000 25877.00000000000 9796.00000000000BH000 8.00000000000 19280.186301100006916030.14338999990 0.03584000000 4.77236000000 25878.00000000000 8784.00000000000BH000 8.00000000000 452573.67832599999 3.18076327547e+008 0.00008000000 0.03826000000 25879.00000000000 9313.00000000000BH000 8.00000000000 3956.24883520000 731716.21071200003 0.00005000000 0.03403000000 25880.00000000000 9089.00000000000BH000 8.00000000000 3547.91991175000 476004.31199199997 0.00010000000 0.04842000000 25881.00000000000 9020.00000000000BH000 8.00000000000 4394.65526752000 919966.42644199997 0.00016000000 0.06619000000 25884.00000000000 9627.00000000000BH000 8.00000000000 6901.054478570001432642.47228000010 0.00066000000 0.11720000000 25886.00000000000 9350.00000000000BH000 8.00000000000EPEGWEPEGWLac Marie-Le Franc Lac Marie-Le Franc 10942.344260300005821123.67052999980 0.00007000000 0.03713000000 25887.00000000000 9319.00000000000BH000 8.00000000000 3478.54175015000 588772.99991400004 0.00147000000 0.31923000000 25888.00000000000 9363.00000000000BH000 8.00000000000 33339.50282380000 1.29284048763e+007 0.00015000000 0.05161000000 25889.00000000000 9334.00000000000BH000 8.00000000000 5054.908853470001361828.34559000000 0.00139000000 0.58477000000 25890.00000000000 9616.00000000000BH000 8.00000000000 54311.71868680000 1.22407952004e+007 0.00016000000 0.08529000000 25892.00000000000 9282.00000000000BH000 8.00000000000 7571.165824160001441400.04215000010 0.00008000000 0.04518000000 25893.00000000000 9551.00000000000BH000 8.00000000000 4138.36023385000 734427.79256300000 0.00013000000 0.04693000000 25894.00000000000 9649.00000000000BH000 8.00000000000 4283.754202850001122554.01836999990 0.00015000000 0.04879000000 25896.00000000000 8997.00000000000BH000 8.00000000000 4484.618137060001276364.85880999990 0.00010000000 0.04574000000 25897.00000000000 9650.00000000000BH000 8.00000000000 4373.29050336000 904179.07407400000 0.00035000000 0.12188000000 25898.00000000000 9165.00000000000BH000 8.00000000000 11416.630352300003066249.17493999980 0.00099000000 0.20040000000 25899.00000000000 9705.00000000000BH000 8.00000000000EFVBWEFVBWLac Cayamant Lac Cayamant 20616.556480500008720114.19662999920 0.00011000000 0.05236000000 25900.00000000000 9431.00000000000BH000 8.00000000000 4737.36293798000 999418.48550900002 0.00006000000 0.04408000000 25901.00000000000 9199.00000000000BH000 8.00000000000 3685.85933775000 508845.87496200000 0.00022000000 0.08819000000 25903.00000000000 9590.00000000000BH000 8.00000000000 7733.704870790001912754.45353999990 0.00005000000 0.04008000000 25904.00000000000 9230.00000000000BH000 8.00000000000 3367.94426338000 433754.93638799997 0.00049000000 0.15498000000 25905.00000000000 9337.00000000000BH000 8.00000000000 14260.128805400004351373.76628999970 0.00014000000 0.05248000000 25908.00000000000 9838.00000000000BH000 8.00000000000 4542.920892320001214369.86237000000 0.00013000000 0.05379000000 25909.00000000000 9330.00000000000BH000 8.00000000000 4703.881317430001134613.42775000000 0.00004000000 0.03096000000 25910.00000000000 9392.00000000000BH000 8.00000000000 3196.29371966000 388216.86002600001 0.00006000000 0.03503000000 25911.00000000000 9445.00000000000BH000 8.00000000000 3149.91857418000 487897.52221299999 0.00732000000 0.97129000000 25912.00000000000 9586.00000000000BH000 8.00000000000EHRZREHRZRLac du Poisson Blanc Lac du Poisson Blanc 93594.94875130001 6.46739931972e+007 0.00012000000 0.04672000000 25913.00000000000 9442.00000000000BH000 8.00000000000 4872.062396100001085613.00759000010 0.00016000000 0.06949000000 25915.00000000000 9522.00000000000BH000 8.00000000000 6264.258718620001432700.69567000000 0.00037000000 0.10759000000 25916.00000000000 9365.00000000000BH000 8.00000000000 9433.283630790003274822.35041000000 0.00408000000 1.57916000000 25918.00000000000 8831.00000000000BH000 8.00000000000 139454.43797699999 3.60324100047e+007 0.00185000000 0.50111000000 25919.00000000000 9580.00000000000BH000 8.00000000000 48829.88711570000 1.62722148958e+007 0.00032000000 0.08635000000 25920.00000000000 9213.00000000000BH000 8.00000000000 8739.765381460002837266.84778000000 0.00220000000 0.49555000000 25922.00000000000 9785.00000000000BH000 8.00000000000EGFIMEGFIMLac Dumont Lac Dumont 44146.25248720000 1.93482303179e+007 0.00019000000 0.06850000000 25923.00000000000 9128.00000000000BH000 8.00000000000 6086.973685260001630025.07135000010 0.00010000000 0.04154000000 25924.00000000000 9698.00000000000BH000 8.00000000000 4160.92623527000 865201.68031400000 0.00014000000 0.06860000000 25925.00000000000 9399.00000000000BH000 8.00000000000 6307.108749800001265698.53887999990 0.00071000000 0.15895000000 25926.00000000000 9147.00000000000BH000 8.00000000000 13481.151189300006259217.52567000040 0.00013000000 0.05214000000 25927.00000000000 9662.00000000000BH000 8.00000000000 4605.715970860001187889.02608000000 0.00021000000 0.07631000000 25928.00000000000 9856.00000000000BH000 8.00000000000 7593.772243770001869715.95598000010 0.00042000000 0.13398000000 25929.00000000000 9657.00000000000BH000 8.00000000000 11720.558828800003721654.03544999990 0.00024000000 0.08692000000 25933.00000000000 9180.00000000000BH000 8.00000000000 8432.337971610002132760.13748000000 0.00015000000 0.06429000000 25935.00000000000 9641.00000000000BH000 8.00000000000 5616.639646830001307859.22402000010 0.00014000000 0.05026000000 25936.00000000000 9633.00000000000BH000 8.00000000000 4706.429125940001197670.95898000010 0.00011000000 0.04688000000 25937.00000000000 9535.00000000000BH000 8.00000000000 4683.34931303000 959307.27848900005 0.00008000000 0.05290000000 25938.00000000000 9255.00000000000BH000 8.00000000000 4390.60692296000 675123.48533800000 0.00006000000 0.03843000000 25940.00000000000 9315.00000000000BH000 8.00000000000 3266.81418246000 552679.84660900000 0.00004000000 0.02699000000 25943.00000000000 9693.00000000000BH000 8.00000000000 2712.50364094000 353526.01227100001 0.00008000000 0.04208000000 25947.00000000000 9178.00000000000BH000 8.00000000000 3748.40482004000 716368.97260900005 0.00017000000 0.07950000000 25948.00000000000 9269.00000000000BH000 8.00000000000 6872.618397390001491919.33461000000 0.00005000000 0.03232000000 25949.00000000000 9408.00000000000BH000 8.00000000000 3114.23741370000 411289.36522199999 0.00007000000 0.04306000000 25950.00000000000 9395.00000000000BH000 8.00000000000 4310.43281166000 621699.31754900003 0.00021000000 0.07969000000 25951.00000000000 9386.00000000000BH000 8.00000000000 7637.507495660001815647.65635000010 0.00014000000 0.07075000000 25952.00000000000 9439.00000000000BH000 8.00000000000 6500.289617790001265046.03615000010 0.00013000000 0.05528000000 25953.00000000000 9651.00000000000BH000 8.00000000000 5301.137425800001152137.41692000000 0.00016000000 0.06102000000 25954.00000000000 9475.00000000000BH000 8.00000000000 5641.551022370001383505.01888000010 0.00216000000 0.44608000000 25955.00000000000 9668.00000000000BH000 8.00000000000EHOXGEHOXGLac Pemichangan Lac Pemichangan 43051.03924260000 1.90402782879e+007 0.00009000000 0.04864000000 25956.00000000000 9700.00000000000BH000 8.00000000000 4472.58629711000 781081.26792599994 0.00010000000 0.03882000000 25957.00000000000 9179.00000000000BH000 8.00000000000 3872.42102302000 877222.06195899996 0.00008000000 0.03607000000 25958.00000000000 9427.00000000000BH000 8.00000000000 3361.07123770000 715571.40952400002 0.00012000000 0.05101000000 25960.00000000000 9501.00000000000BH000 8.00000000000 4760.733856950001060581.07130000000 0.00063000000 0.18139000000 25961.00000000000 9271.00000000000BH000 8.00000000000 15878.341473200005539962.96758999950 0.00009000000 0.04587000000 25962.00000000000 9635.00000000000BH000 8.00000000000 4013.06538535000 800848.27074499999 0.00190000000 0.33702000000 25963.00000000000 9706.00000000000BH000 8.00000000000 32494.38829300000 1.67708137863e+007 0.00007000000 0.03755000000 25964.00000000000 9699.00000000000BH000 8.00000000000 3606.88564187000 620543.24722100003 0.00015000000 0.07790000000 25965.00000000000 9429.00000000000BH000 8.00000000000 8098.520457780001299044.40368000000 0.00053000000 0.15315000000 25966.00000000000 9207.00000000000BH000 8.00000000000 13782.551860100004706776.16208999980 0.00020000000 0.06477000000 25967.00000000000 9324.00000000000BH000 8.00000000000 6336.947570030001735155.68739999990 0.00011000000 0.04198000000 25968.00000000000 8916.00000000000BH000 8.00000000000 3889.24991783000 961774.55950199999 0.00006000000 0.03538000000 25970.00000000000 9204.00000000000BH000 8.00000000000 3269.25484759000 569300.56859299995 0.00012000000 0.05114000000 25971.00000000000 9514.00000000000BH000 8.00000000000 4883.344805210001016421.22638000000 0.00030000000 0.16504000000 25972.00000000000 9135.00000000000BH000 8.00000000000 13297.135874700002657424.87356000020 0.00006000000 0.03624000000 25973.00000000000 9858.00000000000BH000 8.00000000000 3414.14593277000 511708.84957800002 0.00009000000 0.05540000000 25974.00000000000 9348.00000000000BH000 8.00000000000 5061.58360460000 781314.67093100003 0.00039000000 0.11199000000 25975.00000000000 9279.00000000000BH000 8.00000000000 9864.620509480003473144.85586000000 0.00006000000 0.03664000000 25976.00000000000 9621.00000000000BH000 8.00000000000 3145.66789459000 500071.33494199999 0.00012000000 0.05277000000 25977.00000000000 9436.00000000000BH000 8.00000000000 5288.515749960001029945.55298000000 0.00034000000 0.10251000000 25978.00000000000 9484.00000000000BH000 8.00000000000 10558.354684900002961792.36614000010 0.00025000000 0.08922000000 25979.00000000000 9692.00000000000BH000 8.00000000000 7987.873747280002191499.34006999990 0.00008000000 0.04239000000 25981.00000000000 9212.00000000000BH000 8.00000000000 4104.61120863000 715044.38102099998 0.00011000000 0.06188000000 25982.00000000000 9341.00000000000BH000 8.00000000000 5822.63625773000 995865.95255000005 0.00013000000 0.04618000000 25983.00000000000 9200.00000000000BH000 8.00000000000 4720.900826940001111110.03001000010 0.00058000000 0.16559000000 25985.00000000000 9723.00000000000BH000 8.00000000000 16118.835231300005110620.48182000030 0.00006000000 0.03480000000 25986.00000000000 9243.00000000000BH000 8.00000000000 3048.00046103000 538476.93206000002 0.00011000000 0.04652000000 25988.00000000000 9574.00000000000BH000 8.00000000000 4911.18212947000 944608.67919900001 0.00096000000 0.26501000000 25990.00000000000 9396.00000000000BH000 8.00000000000 24006.759669900008456193.26476000060 0.00007000000 0.04629000000 25991.00000000000 9286.00000000000BH000 8.00000000000 3824.70214565000 660905.53096200002 0.00336000000 0.36804000000 25992.00000000000 9549.00000000000BH000 8.00000000000EIDPYEIDPYLac Simon Lac Simon 36997.38992790000 2.96918054389e+007 0.00036000000 0.10328000000 25993.00000000000 9865.00000000000BH000 8.00000000000 10048.672713000003156021.52674000010 0.00049000000 0.09114000000 25994.00000000000 9506.00000000000BH000 8.00000000000 8799.415453530004371965.42150999980 0.00022000000 0.07993000000 25995.00000000000 9892.00000000000BH000 8.00000000000 7523.308800640001959437.02633000000 0.00486000000 0.80544000000 25996.00000000000 10035.00000000000BH000 8.00000000000EKIEAEKIEALac aux Allumettes Lac aux Allumettes 74147.04546920001 4.30871269630e+007 0.00006000000 0.03159000000 25997.00000000000 9443.00000000000BH000 8.00000000000 3191.53857942000 556238.66463500005 0.00011000000 0.04620000000 25999.00000000000 9813.00000000000BH000 8.00000000000 4765.35366789000 958794.74255199998 0.00021000000 0.07854000000 26003.00000000000 9987.00000000000BH000 8.00000000000 7009.040756480001821237.44769999990 0.00009000000 0.03857000000 26004.00000000000 9807.00000000000BH000 8.00000000000 3537.87311558000 820709.32876399998 0.00015000000 0.06160000000 26005.00000000000 9378.00000000000BH000 8.00000000000 5231.093994840001300727.03579000010 0.00006000000 0.03856000000 26006.00000000000 9398.00000000000BH000 8.00000000000 3413.46386527000 554949.00176000001 0.00025000000 0.08694000000 26007.00000000000 9855.00000000000BH000 8.00000000000 8397.786659470002223141.39785999990 0.00013000000 0.05520000000 26008.00000000000 9553.00000000000BH000 8.00000000000 5643.048456800001192093.76590000000 0.00015000000 0.06856000000 26009.00000000000 9383.00000000000BH000 8.00000000000 6002.586019770001342823.55003000000 0.00006000000 0.03469000000 26010.00000000000 9422.00000000000BH000 8.00000000000 3090.13623267000 529060.30744000000 0.00277000000 0.65785000000 26011.00000000000 9818.00000000000BH000 8.00000000000 64167.48584820000 2.44972147340e+007 0.00017000000 0.04956000000 26012.00000000000 9434.00000000000BH000 8.00000000000 4910.270776250001511239.91754999990 0.00061000000 0.20645000000 26014.00000000000 9739.00000000000BH000 8.00000000000 20697.811545100005372799.57784000040 0.00049000000 0.14191000000 26015.00000000000 9465.00000000000BH000 8.00000000000 13465.708650700004339308.35393999980 0.00008000000 0.04023000000 26016.00000000000 9961.00000000000BH000 8.00000000000 3495.75566331000 690407.11636099999 0.00055000000 0.14077000000 26017.00000000000 9298.00000000000BH000 8.00000000000 12908.615174400004820383.71061000040 0.00012000000 0.04652000000 26018.00000000000 9751.00000000000BH000 8.00000000000 4488.462999750001076623.68606000000 0.00024000000 0.07492000000 26019.00000000000 9956.00000000000BH000 8.00000000000 6948.039592500002083300.64200000000 0.00013000000 0.06158000000 26021.00000000000 9982.00000000000BH000 8.00000000000 5957.238777310001108460.35535000010 0.00006000000 0.03875000000 26022.00000000000 9989.00000000000BH000 8.00000000000 3597.25594571000 528358.30361499998 0.00004000000 0.03373000000 26023.00000000000 9430.00000000000BH000 8.00000000000 3373.85113865000 367632.45206799998 0.00008000000 0.03807000000 26026.00000000000 9424.00000000000BH000 8.00000000000 3569.40246809000 689664.17356300005 0.00064000000 0.12919000000 26027.00000000000 9732.00000000000BH000 8.00000000000EGGBJEGGBJLac cho Lac cho 13604.081326500005640771.09097999990 0.00007000000 0.03524000000 26028.00000000000 10000.00000000000BH000 8.00000000000 3131.75627190000 590756.42718200001 0.00006000000 0.03362000000 26029.00000000000 9822.00000000000BH000 8.00000000000 3533.51143211000 493362.23302599997 0.00606000000 1.35709000000 26031.00000000000 10041.00000000000BH000 8.00000000000 119172.95832100000 5.37062815086e+007 0.00029000000 0.10605000000 26032.00000000000 9800.00000000000BH000 8.00000000000 10108.058100800002530976.26658000010 0.00016000000 0.06121000000 26033.00000000000 9542.00000000000BH000 8.00000000000 5567.222872030001448552.48882999990 0.00010000000 0.04949000000 26034.00000000000 9730.00000000000BH000 8.00000000000 4620.25086890000 888004.12575300003 0.00010000000 0.04648000000 26036.00000000000 9731.00000000000BH000 8.00000000000 4082.63712399000 851382.49137499998 0.00008000000 0.04923000000 26037.00000000000 9417.00000000000BH000 8.00000000000 4075.27254218000 718507.14223600004 0.00019000000 0.07942000000 26042.00000000000 9832.00000000000BH000 8.00000000000 7174.995115550001663433.02474000000 0.00033000000 0.10941000000 26043.00000000000 9481.00000000000BH000 8.00000000000 11145.020373100002931559.61547000010 0.00010000000 0.04064000000 26044.00000000000 9845.00000000000BH000 8.00000000000 3811.24505005000 918616.60960900004 0.00230000000 0.40640000000 26045.00000000000 9815.00000000000BH000 8.00000000000EGHJTEGHJTRservoir l'Escalier Rservoir l'Escalier 38758.16502670000 2.03639767426e+007 0.00011000000 0.04713000000 26046.00000000000 9571.00000000000BH000 8.00000000000 4074.88990424000 981037.25314699998 0.00007000000 0.03361000000 26047.00000000000 9743.00000000000BH000 8.00000000000 3127.06842305000 646400.99006200000 0.00010000000 0.05993000000 26048.00000000000 9851.00000000000BH000 8.00000000000 5321.29592187000 910268.65222100005 0.00078000000 0.24041000000 26049.00000000000 9678.00000000000BH000 8.00000000000 22826.643199400006932395.92190000040 0.00009000000 0.04033000000 26050.00000000000 9329.00000000000BH000 8.00000000000 4092.29397731000 773760.67673099996 0.00016000000 0.05578000000 26051.00000000000 9361.00000000000BH000 8.00000000000 5201.816257190001405283.71808000000 0.00008000000 0.03974000000 26053.00000000000 9543.00000000000BH000 8.00000000000 3845.10247538000 730456.43560500001 0.00011000000 0.04929000000 26055.00000000000 9742.00000000000BH000 8.00000000000 4238.24764289000 947750.18658300000 0.00016000000 0.06532000000 26056.00000000000 9839.00000000000BH000 8.00000000000 5807.404087320001379156.41971000000 0.00170000000 0.30250000000 26057.00000000000 10046.00000000000BH000 8.00000000000FATLQFATLQLac Coulonge Lac Coulonge 28702.32640360000 1.50906996791e+007 0.00006000000 0.03656000000 26059.00000000000 9857.00000000000BH000 8.00000000000 3246.44996680000 551040.03763499996 0.00024000000 0.06081000000 26060.00000000000 9393.00000000000BH000 8.00000000000 5684.482539990002125834.24177999980 0.00014000000 0.06320000000 26061.00000000000 9870.00000000000BH000 8.00000000000 6156.685194410001258776.49276999990 0.00027000000 0.09772000000 26062.00000000000 9783.00000000000BH000 8.00000000000 9904.683668560002374349.83936000010 0.00008000000 0.03878000000 26064.00000000000 9826.00000000000BH000 8.00000000000 3995.53120084000 686293.54431100003 0.00018000000 0.05643000000 26065.00000000000 9859.00000000000BH000 8.00000000000 5379.267572000001624027.92638999990 0.00049000000 0.12724000000 26066.00000000000 9564.00000000000BH000 8.00000000000 13072.326003500004371421.39835000040 0.00012000000 0.04288000000 26067.00000000000 9869.00000000000BH000 8.00000000000 3945.628374220001027170.67644000000 0.00050000000 0.12226000000 26068.00000000000 9827.00000000000BH000 8.00000000000 11675.819067300004413821.77548000030 0.00015000000 0.07437000000 26069.00000000000 10024.00000000000BH000 8.00000000000 6381.669676970001334429.94136000010 0.00007000000 0.04426000000 26070.00000000000 9538.00000000000BH000 8.00000000000 3934.96087448000 630733.02279500000 0.00011000000 0.04545000000 26071.00000000000 9578.00000000000BH000 8.00000000000 4510.04318438000 970035.43916600000 0.00016000000 0.07068000000 26072.00000000000 9781.00000000000BH000 8.00000000000 6527.650749530001414515.15125000010 0.00033000000 0.11224000000 26074.00000000000 9524.00000000000BH000 8.00000000000 9836.966740810002885881.45120000000 0.00014000000 0.04710000000 26075.00000000000 9880.00000000000BH000 8.00000000000 4422.121843170001280567.81005000000 0.00019000000 0.07450000000 26076.00000000000 9725.00000000000BH000 8.00000000000 7623.659060180001651146.62274000000 0.00011000000 0.05269000000 26077.00000000000 9656.00000000000BH000 8.00000000000 5111.63765977000 980020.44591999997 0.00177000000 0.41096000000 26078.00000000000 9645.00000000000BH000 8.00000000000EHNRFEHNRFLac Papineau Lac Papineau 41373.19622320000 1.57394825269e+007 0.00010000000 0.05128000000 26079.00000000000 9448.00000000000BH000 8.00000000000 5071.92335921000 899669.96758000006 0.00008000000 0.03729000000 26080.00000000000 9939.00000000000BH000 8.00000000000 3507.53111620000 746086.18376900000 0.00009000000 0.04140000000 26081.00000000000 9462.00000000000BH000 8.00000000000 3968.49093919000 827570.95490400004 0.00014000000 0.06371000000 26082.00000000000 9891.00000000000BH000 8.00000000000 5586.608109340001249484.17060000010 0.00010000000 0.03886000000 26083.00000000000 9955.00000000000BH000 8.00000000000 3791.02258590000 906378.52492100000 0.00022000000 0.07466000000 26084.00000000000 9769.00000000000BH000 8.00000000000 7313.913941000001948623.51989000010 0.00004000000 0.02501000000 26085.00000000000 9888.00000000000BH000 8.00000000000 2521.98483487000 352024.70110800001 0.00014000000 0.04539000000 26086.00000000000 9763.00000000000BH000 8.00000000000 4506.842515660001267891.57950000000 0.00015000000 0.05134000000 26087.00000000000 9817.00000000000BH000 8.00000000000 4903.847508880001335469.95026000010 0.00009000000 0.04425000000 26088.00000000000 9903.00000000000BH000 8.00000000000 3971.58414342000 814823.55423600005 0.00054000000 0.13644000000 26089.00000000000 9809.00000000000BH000 8.00000000000 14093.544492200004820783.74357999950 0.00013000000 0.05907000000 26092.00000000000 9598.00000000000BH000 8.00000000000 5288.879549300001123746.00667000000 0.00007000000 0.03561000000 26095.00000000000 9509.00000000000BH000 8.00000000000 3213.10479719000 634367.01006500004 0.00012000000 0.05143000000 26096.00000000000 9539.00000000000BH000 8.00000000000 4890.104347300001046938.74546000000 0.00006000000 0.03238000000 26097.00000000000 9905.00000000000BH000 8.00000000000 3133.30505646000 503604.92036200000 0.00025000000 0.07120000000 26098.00000000000 9805.00000000000BH000 8.00000000000 7498.730265510002182083.59665999980 0.00421000000 1.40039000000 26099.00000000000 10075.00000000000BH000 8.00000000000 133307.33768999999 3.74404823151e+007 0.00008000000 0.04558000000 26101.00000000000 9597.00000000000BH000 8.00000000000 3796.37634103000 714242.48174199997 0.00012000000 0.04452000000 26102.00000000000 9991.00000000000BH000 8.00000000000 4066.361740940001055537.80658999990 0.00010000000 0.04380000000 26103.00000000000 9830.00000000000BH000 8.00000000000 4479.95790711000 927154.50403399998 0.00005000000 0.03190000000 26104.00000000000 9758.00000000000BH000 8.00000000000 2941.71819204000 416096.05589600001 0.00007000000 0.04074000000 26108.00000000000 9606.00000000000BH000 8.00000000000 3415.84794575000 648183.26786400005 0.00014000000 0.04872000000 26109.00000000000 9768.00000000000BH000 8.00000000000EIDRIEIDRILac Simonet Lac Simonet 4813.050924640001280550.75074000000 0.00010000000 0.04745000000 26113.00000000000 9593.00000000000BH000 8.00000000000 4310.77979700000 902713.67807699996 0.00008000000 0.03664000000 26115.00000000000 9666.00000000000BH000 8.00000000000 3325.90771183000 679775.30328899994 0.00019000000 0.05434000000 26116.00000000000 9998.00000000000BH000 8.00000000000 5344.024602510001679646.79419000000 0.00032000000 0.12426000000 26118.00000000000 9942.00000000000BH000 8.00000000000 12287.534918800002811502.50803000010 0.00008000000 0.05299000000 26119.00000000000 9630.00000000000BH000 8.00000000000 4597.51525976000 711442.10812500003 0.00047000000 0.11265000000 26120.00000000000 9774.00000000000BH000 8.00000000000 11834.868309400004172696.87924000020 0.00055000000 0.15236000000 26121.00000000000 10013.00000000000BH000 8.00000000000 13869.857856800004895186.55712999960 0.00007000000 0.03779000000 26122.00000000000 9733.00000000000BH000 8.00000000000 3282.81481162000 598858.93071300001 0.00035000000 0.10718000000 26124.00000000000 9867.00000000000BH000 8.00000000000 10394.644913900003077614.75369999980 0.00017000000 0.07780000000 26126.00000000000 9581.00000000000BH000 8.00000000000 6342.325945330001481455.13431000010 0.00007000000 0.03813000000 26128.00000000000 9963.00000000000BH000 8.00000000000 3716.01107994000 582170.69319999998 0.00019000000 0.06332000000 26129.00000000000 9967.00000000000BH000 8.00000000000 6167.767944920001651627.44699000010 0.00029000000 0.09888000000 26130.00000000000 9850.00000000000BH000 8.00000000000 9020.023973210002569447.92194999990 0.00047000000 0.12467000000 26131.00000000000 9646.00000000000BH000 8.00000000000 11328.833942100004182287.53288999990 0.00007000000 0.03246000000 26132.00000000000 9901.00000000000BH000 8.00000000000 3218.03352803000 631330.55638700002 0.00006000000 0.03241000000 26133.00000000000 9941.00000000000BH000 8.00000000000 3129.15401301000 542875.68915500003 0.00008000000 0.03912000000 26135.00000000000 9976.00000000000BH000 8.00000000000 3647.62640296000 728807.41723799997 0.00055000000 0.15384000000 26136.00000000000 10004.00000000000BH000 8.00000000000EFMZKEFMZKLac Bernard Lac Bernard 13988.219923300004882539.99772999990 0.00031000000 0.09551000000 26137.00000000000 9873.00000000000BH000 8.00000000000 8592.909302280002754682.51389000010 0.00015000000 0.07142000000 26138.00000000000 9973.00000000000BH000 8.00000000000 6418.269322820001363612.48533999990 0.00006000000 0.03678000000 26139.00000000000 9986.00000000000BH000 8.00000000000 3376.61873406000 496835.14608699997 0.00007000000 0.03501000000 26141.00000000000 9911.00000000000BH000 8.00000000000 3582.67853752000 593915.86701100005 0.00007000000 0.03723000000 26142.00000000000 9778.00000000000BH000 8.00000000000 3534.29634629000 653438.66634600004 0.00006000000 0.03726000000 26143.00000000000 9648.00000000000BH000 8.00000000000 3192.33623352000 533967.18483799999 0.00012000000 0.05080000000 26146.00000000000 9992.00000000000BH000 8.00000000000 4972.450834200001101995.47971999990 0.00016000000 0.06736000000 26148.00000000000 10033.00000000000BH000 8.00000000000 6061.022889820001442616.27777999990 0.00020000000 0.06295000000 26149.00000000000 9990.00000000000BH000 8.00000000000 6343.355820470001764873.67950999990 0.00094000000 0.16475000000 26150.00000000000 9894.00000000000BH000 8.00000000000EJQTYEJQTYLac la Blanche Lac la Blanche 15166.724875400008393756.26194000060 0.00052000000 0.17799000000 26151.00000000000 9979.00000000000BH000 8.00000000000 16676.004433200004587215.06570999980 0.00007000000 0.03898000000 26153.00000000000 9780.00000000000BH000 8.00000000000 3458.55219176000 639009.61282599997 0.00008000000 0.04090000000 26155.00000000000 9933.00000000000BH000 8.00000000000 3642.69743052000 698612.32431800000 0.00016000000 0.05805000000 26156.00000000000 10045.00000000000BH000 8.00000000000 5891.233726460001420844.27420999990 0.00008000000 0.03885000000 26157.00000000000 9812.00000000000BH000 8.00000000000 3639.12564562000 755307.91300199996 0.00690000000 2.20687000000 26158.00000000000 9437.00000000000BH000 8.00000000000 198940.43945500001 6.15852959645e+007 0.00017000000 0.06700000000 26159.00000000000 9970.00000000000BH000 8.00000000000 6425.560681010001525571.87735000000 0.00007000000 0.03689000000 26160.00000000000 9971.00000000000BH000 8.00000000000 3623.15659757000 651815.59171099996 0.00021000000 0.06660000000 26162.00000000000 9994.00000000000BH000 8.00000000000 6090.316426770001878134.80615000010 0.00011000000 0.04585000000 26163.00000000000 9980.00000000000BH000 8.00000000000 4430.77004574000 997947.80674300005 0.00060000000 0.16145000000 26165.00000000000 10001.00000000000BH000 8.00000000000EGNRXEGNRXLac Grand Lac Grand 15338.680442000005315344.28191000040 0.00006000000 0.03148000000 26166.00000000000 9949.00000000000BH000 8.00000000000 2894.18699193000 493266.82572999998 0.00006000000 0.04247000000 26167.00000000000 9999.00000000000BH000 8.00000000000 3693.96393751000 552713.94978200004 0.00014000000 0.04976000000 26170.00000000000 10067.00000000000BH000 8.00000000000EHCPBEHCPBLac Mahon Lac Mahon 4541.429979280001284527.22784999990 0.00032000000 0.11606000000 26174.00000000000 9996.00000000000BH000 8.00000000000 10385.402773700002813713.43456000000 0.00016000000 0.05853000000 26175.00000000000 10017.00000000000BH000 8.00000000000 5328.091785280001394687.34143000000 0.00008000000 0.04106000000 26176.00000000000 10012.00000000000BH000 8.00000000000 3719.45753664000 672558.86523500003 0.00012000000 0.04727000000 26177.00000000000 10087.00000000000BH000 8.00000000000 4302.751990930001078124.83791000000 0.00067000000 0.17698000000 26178.00000000000 10038.00000000000BH000 8.00000000000EHFEIEHFEILac McGregor Lac McGregor 16269.007254100005952564.54466000010 0.00101000000 0.22536000000 26179.00000000000 10112.00000000000BH000 8.00000000000EIUNCEIUNCLac la Pche Lac la Pche 21330.334381400009040704.33420000040 0.01090000000 3.84259000000 26180.00000000000 9849.00000000000BH000 8.00000000000 323524.00432200002 9.74230353596e+007 0.01115000000 2.07772000000 26182.00000000000 10180.00000000000BH000 8.00000000000 184294.67909300001 9.98173525108e+007 0.00011000000 0.04161000000 26183.00000000000 10092.00000000000BH000 8.00000000000 3909.813253280001005737.11180000000 0.00025000000 0.08936000000 26187.00000000000 10111.00000000000BH000 8.00000000000EHQBFEHQBFLac Philippe Lac Philippe 8601.283546940002193902.96986000010 0.00010000000 0.04004000000 26191.00000000000 10056.00000000000BH000 8.00000000000 3891.64862875000 932340.50049999997 0.00127000000 0.52512000000 26192.00000000000 10099.00000000000BH000 8.00000000000 49370.02282770000 1.13935371715e+007 0.00013000000 0.05365000000 26195.00000000000 10061.00000000000BH000 8.00000000000 4704.319903300001156531.50816000000 0.00029000000 0.12010000000 26198.00000000000 10121.00000000000BH000 8.00000000000EJTMJEJTMJLac Mousseau Lac Mousseau 11116.842468600002628542.97246999990 0.00010000000 0.04669000000 26201.00000000000 9847.00000000000BH000 8.00000000000 4509.94827329000 857539.94952000002 0.00038000000 0.12287000000 26204.00000000000 10136.00000000000BH000 8.00000000000EJXJYEJXJYLac Meech Lac Meech 11148.238044700003412018.33376999990 0.01564000000 1.42136000000 26206.00000000000 9784.00000000000BH000 8.00000000000EGDJPEGDJPLac des Deux Montagnes Lac des Deux Montagnes 126034.03853900000 1.40022528052e+008 0.00484000000 1.17250000000 26213.00000000000 9673.00000000000BH000 8.00000000000 123203.95711400000 4.36480542806e+007 0.02704000000 2.80156000000 26222.00000000000 9833.00000000000BH000 8.00000000000EIAIXEIAIXLac Saint-Louis Lac Saint-Louis 246879.16510099999 2.42986089346e+008 0.00002000000 0.02097000000 26224.00000000000 9848.00000000000BH000 8.00000000000 1810.11028550000 185936.47865400001 0.00099000000 0.20187000000 26226.00000000000 10233.00000000000BH000 8.00000000000EGCZGEGCZGLac Deschnes Lac Deschnes 17675.077736000008846500.51623000020 0.01549000000 1.03917000000 26245.00000000000 10089.00000000000BH000 8.00000000000EHZTQEHZTQLac Saint-Franois Lac Saint-Franois 93450.25782610000 1.39929415877e+008 0.00519000000 0.38519000000 26251.00000000000 10018.00000000000BH000 8.00000000000EFVUKEFVUKLac Champlain Lac Champlain 35417.07743470000 4.70129819476e+007 0.00170000000 0.41695000000 26252.00000000000 10264.00000000000BH000 8.00000000000 36785.66347600000 1.53990497255e+007mapnik-3.0.9/demo/data/qcdrainage.prj000066400000000000000000000007451262555547000174730ustar00rootroot00000000000000PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]mapnik-3.0.9/demo/data/qcdrainage.sbx000066400000000000000000000012041262555547000174630ustar00rootroot00000000000000' pBA4ѬrW$ۭ@$A:^@:yр2"4ZnH 0&>JRZbv &. >FZz   &FZ$l0FT(j\p>4vt l 0 R4 6D ~l | nx $ "8 ^$ ,mapnik-3.0.9/demo/data/qcdrainage.shp000066400000000000000000011775201262555547000175010ustar00rootroot00000000000000' Wr4A$@$^:Ay:@ **~~Z5A5h6AX@rxPʹ.6A(ˮ_@R/^.6AX@ rJ36A'՗@m4;76A ]@O A96A<#@ƶ:6AtK7@|hY76Ac#@Ύ66A h@_956A⤰U566A8X76AEB46Ay!i&ǩ*56AA Iq1x46Ad,@[]֨'56AsΫ%46ASqv(16Al*|6ڊC16A~(I26A/Mp26AFgBW16A7^j?4816ABT{8LE 36Ax^;B36AՋU46A?nT>X7|36ADy ˄46A̢Xժ!76A)ҟv`96ATboME:6A( G@A';6A1>6A{*uMA6Ap'$ ܾrD6AHyxT!lF6ABČH6AV!6I6A@xL6A@.*`&*M6A܆_MN6A<>k\M6AF _M6A{'iO6A8xiG͸Q6AսED{O6AϟC-P6AH6ihO6A9oE5L6A˒ PUI6A ?L8G6A ^NgH6A ?wͪK6A~KI3"L6AE $N6A}%GpYhO6Adz'}C*R6A}\1U6A xm΃NW6AfX#;5X6A{~g~ X6AlR6ARP6A02'A4XN6A'xttNmN6Am]x2N6A"1#L6Az݂8L6A$W}VV6AJNW6AGvR_T6ALZt?/wS6AJh*zx_R6ADbzM6A7BrDyL6A-t8wK6A~q&I6AJG6AetKbG6Aטi9`UF6A/xHDD6A2JvDQ/D6AF|$eMF6A6/&@5H6AU\@BGK6AUz:aaN6AnfK@P6A@So6cX)S6AyVjS6A.n NTV6ACU6A5,t=Y6Am?Cq\6AmY`@o(Ac6Ah6A/*U!ng6A*Sf6A5d3h_6A:m:51U6A H,:J6A v3G6AAnfsD6AeuN1V;D6A5ϗV zKB6AJ"m@6AjӃ=6A,7pfF<6Agij:6Asb}:6A*g~O7r<6A9r7R=6?6AB,͒KV@6AU0C.u@6Ax uqA6Ac8gR4A6Aq_14A6AR ;MD6An)R1kD6A5cVrB6AеwA6AH" @6A?6AT>6AJ$*SE;=6Agՠ;6A|Ckl96A51S3+x]86A-U݂*f*86AѨ\6Aëkww=6A$kdyk?=6AF <6A'I~;6AIc8~!;6AV}8FSU96A>CA86Av0}76AF[TTi,56ALNc46AT-$q76AEye_86A¹|uaQ66Aɻ4p 56AIr)\36AQ vo36A*@*{#E56A8B76A9g*86A\dcɡ76A實 z:6A} 4:6A3 ):6ANwCi" I66As-(-=m#56AeVz46A 6 a36AmA#16Ats{06Ahg _06A.$9 06AɁwcKN06A./6AojnUک&6Abm#6A]WO>#6A7K*4$6Az[uu 3P6A* ^ N6AHBjwX6AX,stQ,6AM !&d6A@~9/S~6A WTFK6Afb/ 6A.6:6A,5heTIw6AoHdϹ6Ame6A\aG6APzFM>h^6Ab6A7>XvE6AН r#6AT6]M+6AEEe 6Ae96A*q6A}6p7\6A}v6Ay/nl)6A{G-,}56A ]A'416AR|^GL 6Afv;1iN 6A:} 6A9K,<^F 6A,F4N![ 6Az7zLMi" 6AGo # 6A {.5> 6Aj0C NC 6Ap=5 6A_OJ 6Aus>$`{ 6ARJl;}i 6A=B5 6A!Rw6A|'@S=6AO=DL6AO :2;6AY#LY^ 6AFĈ> 6A;5 6AxG 6A+?dZ6Acu+6AAY6AHݔ06A `{}6AJ2j6AIyݜuZ5AMgd@+5ARhn#]5A,S,>2ֆ5A"KE5A0?5A7#!lS \5ArއUXs5A˞2ĸF85AfěBa5Aj*J #A5A^qC$U5A+ߠ:v5A9QқJ=5AӇ, *65A.w;F5AlouIV5A!jWWp55Aݱh5Ag$/>6Aqxy86Aόh{#i6Az—G&s6Alק6Aak6Ay^J~xI6A$@؍mJ6Am͘i6A'&æl 6A=dhpN6AET ◢6Aloտ`6AdON6AUU'5l 6A*Y@ 6AP1p\w 6Az 6A~k6A$4.6AqmqI\5A.G8u5A@N,Z5A ,vh5AsCdE"*~~Z5AvD!aV5AKtB`5AJ[5A cd,p5A+HS 5AI%[05AT6AWL2 m.6AQ4Y6A9~7,e6Aru+VB6AuPTԿg6A>QR 6Aq]:#n6AJJN6Ap;M/;څ6At"ZXUo6A<1]at6AoxNJ6ARԈ#6A, l6A {6A;e)Y6A`\G9!6A>Zl"6AFE^W3X$6AA I`ZWͽ%6A,Ԇma&6AD4hK#'6Au\V S)6AG&AZ(6AUrj (6AH[ P)6Aڴ,6AK.(X.6ACLmxKy.6A.shOKѯ+6Ahi&}$+6AcB"'k-6A.PA-6Ah^2o=iP -6Ad ء@,6A\-6A#Ӗ9ɍ+6Aį+'ŋ*6A.i&?M,6Af{Ry*6Aѩ=n[)6A<ח~Xz'6A&.i+(6AŒS~A,6A=2,6Ah2)~)6A"Ak,6AfEB{D,6A[vеF[}.6A L[}06Aw"616A0c>0E%16AF-btz~06A@Y16A@ڔF36A`Yq@]+56A@g@TTJ46A@Tj.6AD `+г@Pʹ.6A(ˮ_@5[N6Ajq(6AVbN)/6AO7li͵6A^wzy]6A9G5[N6Ajs{(76A|YS76A>e6lL(56A/;8WK46AkmN36APxY16A.Oe16A|ٚ׶G56A!{Hs{(76A|Y6S26A Q76A kM;376AkzT76A9j:mZV56A-ZfLgP56AC+n46A?^dU26AV|~16A7aÇ16Aϋ6S26A LgT6A0IŢ6ATgʼn6A NdDj6A* E6A3eb@F6Ap,sO+6A(tZ|Dk6Aؐ'/ 4H6Aq,@6AybLgT6A0 Ӝ16Az'qsRy26A1SV.Q26A`z>%X16AN1%L~/6A˩R4ŭ.6A^feͣם-6AʲI.6Aڥo/6A Ӝ16Az'aX9A>y@"(G$:Ay:@Y+^\9Al֬@H]*X9A]fy@aX9APl @-Y9A."@|z\\9A8]\@O]9AÕ3L@Y/ԋ]9A/M @zZ9Ay:@ ~M"`9A|@9`9AA w@Ӫ}^q`9ACʙ@e( ]9Ar^a@1w[9A @HT%Z9A@UZ9A}s@,k,V^9A=ΐ@d9AD>@b_j9A WjS\@k9A+2l@2 mn9AT@Zq9A~@|v9AO$@y9AH@n{9Am@J9A:s,@u$'9A@!9A{}a@lE9A 2@_9A?/@Iw:Aa@61O:Ax(@w:A~@2U8:A&@c:A>B@yN:A.T@qSe6:A~@SG#:AFy@"(G$:A_ک@W'":A.@H/ :A>y@h:A$?@84:Ay@1 @>t]:A@:A|\t@B:A"@Aڨ4:At@ }:A<@(@ބX:A>@Q09AJ@ T9A@0)^9A.@ C9A}O@}{]jR9AH@F19A`@ث9A *@gBu9AXv@] 9A*<@P\9A| ,@9A\|@59A~@s$9Ap@uN9Adr@umB9Af{.@sj9A@}g9AX@49AsZ@( 9A)@J9A |Q@Im9A_E@y6"9A@U9APy6@Iy 9Ah B@տJ9A@D9A>|O;@Imy9AH<@l9A#6 @j 9Al@SQ9A@X9At8f@]P9Aۤ+I@k{9Ayu@D 9A @9A@"9A;@ia09A@i2Y9A{>@?X9AܠC@!ջ9Aߑ$@2lFd9A3\ @APu;9A-]@a9A\~!@g#S9A`T@e)y?9Av@9AT)@l@9A|g1@%9A @^R9A=![@̫ 9A-@ C1+9A$n@J9Ad@e9A03@XW9A&[(@1]9A}@]4_$9AL@m9A\'@>9A:@Y9A^F@[ƅ79A T-@ѓ9A5.@+b|9AGu@Uf9A%^,@o"9Aۀ0K@B ;9A#_x@TSK9A @6C~9A.O!@WDQvu9AGÖ@oMr9A@@ĦY'p9A4?@1:m9AwBR@?{k9A9/@[f0i9A;@ ;he9A--~@Y+^\9Al֬@jL8AhnJ@#8A @b>58A@:=Y8A.Fz@c8A{42@}Z8A5͚6@ݏ!68AqrN3@o~8A4@#J8A)@Z?tgl8AB@"P8AM6@+c8A" @DQJE8Ax@#38A7@;R[8Awni @yAB8AϏ2@D 8ARCBm=@#8AR@8AB@8AKU@ݞM8A @88Aϩ@Kj<ʓ8AT!P@+\8AiR@#y8A.'@L^8AxTR@vk{8A(u@eYA8A{!@ij28Al@pg 8A=@@vDz`8A S&a@\yN8AZ<^@\cr{8AB:@AZn|8A8ޓ(@Zyz8A0M@-;nz8Av@x~}8AX @2o%}8A1-Z@ 3|8A}栌@áz{8A/5@|N:{8A@!3O8AtA@v0́8Au@r8Av}@a8ADH@'4;8Aڦ +[@8AzR@@j8A.q@mM58Aj@][8AsB@Bj8A&x@Az8A[j9@mvp8A@a @ˁm8AC]&d@"m8AH@6lok8AMQ@V'h8AU/0@{^Af8AZ@Cлe8Aܖ|@Qif8AwoU:@f8A|d@Ack8A )@{a.j8A<|@i`oh8A߫c8A:ۃ@tsa8AhnJ@[2a8A i@.8b8Aq(|@^ d8A mA@|e8A1d@zp:b8AЅ! @4W`8AZI@9\^8Aܖ,L@0T\8Av@ec\8Aʊ.@$u %a8A꜊@Xa8AZs@Pzt`_8Au@H^8A ’ @M0QY8Ay Ek@j W8Ab.h@٠U8ALf@xS8A3=@2N8AKꈡ@4 %O8Aia{@"S8A_u@4b"W8A")@y:Z8ARt@5Ȓ`8A19c@dsN`8AU@ia8A۹Ze@!Y8ASgMj@8W8Ag4]@SV8AF@]T8A@Q8AqT@y/YS8Awf1K&@6;U8AG+@Z> X8Aڷ/@gv)Y8A{@S]8AKN@v`8A?>3@\b8A@MDIc8A%n]@mRd8ApD@cWd8A/@9eg8A(I@"X9k8A@@\[{q8AQn@08p8A3|@57Rs8A6ji8j@AzGu8AޑW@Bbw8AK@S~4{8Ax?[@;nf|8ARO@/ny8AɔCy@i v8A_Ev@~!t8AS] @s8A*y@58A@bIev78Aa>vc@Ó`s28AjR@1o 8AcC@_x> 8Aa~ @!~č8AYI>@2Έ8A3b>@bIev78Aa>vc@6Au8AMFR@l; v8AT,h{@l7oAv8Ajf@t8Aa2W@^ADs8AXqd@TI`q8A 7G=@Xp8Au6@> q8Ab"@]EGs8AQ@6Au8AMFR@oޟG7AR-7AD~q^)7ARrt(7AmTh5.wQ(7AjW!+7Atj߽Ɋ(7AՏU]$7A((.%ΫC!7AЈʙҊ8!7AhVٮw֡7A6=J7A.6oޟG7AJ6jҲC7ADz7A1<5џ|.9"7A(P?[a=J%7A/ [J*7AԿ@DZ +7AѪ-7A(#<\*-7ANe9-7AX(bH*7A(~q^)7ARuG,7A4}@ 7A^w@7A^M}@Ky7A4}@27A[!@@Dň7A$G@?7AB@\w7A.zpz@拱_7AgId@uG,7A̮'%@q67Ac@5R7AĽ`@es.7A";@X27A^w@NK7A?@ 7A`x@7A^M}@Ivh%5A13t`y.5ANG 0+5A#'%v)5AV!/(2'5A|x@&5AӒr9sIvh%5A>l ;&5A?yif'5ANG|zf(5AܯA.`˲)5A+U`y.5A܏xqppV-5A13tʞa+5A@0+5A#HZ:5J5AE7l5A`W(]$5AEZ:5J5AQya5A`W( 5AN X7l5A ]$5AEX0&29A1$@&&:9A!r6@0&29A!r6@59Ak@Ь99A`V@&&:9A1$@A69A_~@gh_69A "<@mf?39Apb@0&29A!r6@ XJ4܏7Al@8AP1@8Al@@7A.@J4܏7A6h@N7AFk *@vqH!8A\i@Li8AP1@28AS@8Al@ pOi 6AƷ@9Iշ6As` Ң貯6AƷ@Oi 6ASG)y%6A#vW!=6Al! [w6Aح~#`i6As`!6AjL */8i6Ax9Iշ6A؇6Aht_Ң貯6AƷ@ HYt7A@ۃ@w7A Q@Yt7A@ۃ@pt7A Q@w7A7rѦ@q-hv7A)m@SDu7A%ae@Yt7A@ۃ@ PxF+8o7A0,ц@Yt7A@ۃ@Yt7A@ۃ@ss7Am@`p7A0,ц@wtr:o7AА'ڛ@xF+8o7AzS@qOp7A0 (@Yt7A@ۃ@ `A9A=R@QX9AP 98@ V=9A=R@]9AHC@Ij9A+f@A9A0@1-9A!.@U9AP 98@o.$9A#!@QX9Au @V=9A=R@hY7Aw'7r]`7ALn@ [7Aw'oeZ7A.MpgY7AY|F\7AA2I7w^7AQm@U_7ALn@7r]`7Ay7ad(OMJB_7At a$;j@+JO9A?r@I'J:Q9Ao%@$|zR9AIOpJ@* 1S9A^K5@6 dR9Ap@x)O9A@ډB@x|gev9A5x3@ 79A@ yw%}9A@I{9A5x3@x9AsD@=60Ow9AF@|gev9ASn@2x9A@9pEz9A@6z9Arq@1}9Ai@ 79AL+?@ߑ0~9AG#8@yw%}9A@`9Aһ@) 9Ap@ cy{9Aһ@o9AOt@?W9A)@9A4]Fn@1X9Ap@r,9A\B@) 9A jP @c9A@cy{9Aһ@PV_95ACs8(5A2X'hu5A2X֛D `5AA] 5A ._WQ?"5Ap<%5A88'5A+E`n(5Az k8(5ATroMyK(5AHq.s/&5AL<9:$'5Aqfv"Z 5Am6. 0M5AM7h5A:65AC$K6(o5A~j3^]i5A\@?`>5ACG/L5Aq c5A)dݐ5A Z5A )85A_22N42"5A6825ACs=Q5AU=BA 5AMg`LZ5A;E2v$5AePp5Ao@V_95A;UUc<5A>7v5AYg|%5AYs55A5ɔĄ5AŔQ5A/=* j5A7rhu5A2XP]7A ߃@>Ê7A@p @>Ê7AGl@]7A ߃@]7A|"z@&7A@p @ݖܬ7Aqp@ 7An@>Ê7AGl@hפ}18Ae@u_Ί78A Ic@ פ}18A[@@~18A,q@ 1638A Ic@eƫ48A&(x@68Ad=@u_Ί78AƅEf@%pz78A׫-@>b48Ae@J38AHۗ@פ}18A[@@Pw7A@@L7Af@ta7A@@Hj7Aw)@w7Apz@7A]D@ra7Af@L7A`yNr@ta7A@@`9#9A#@t-9A)6s@ 3-9A-Wx=@Lv)9A#@s]'9A<*@sM(Z$9AՁ(@9#9A'>B@XZ0d'9A)6s@.+C+9Ab@t-9AfaM@3-9A-Wx=@@Z7AX#h@_ʀ7A8$@)7AX#h@Z7A1 e@n7A8$@_ʀ7AX@)7AX#h@P$7AH.]I@s|B}7AT`@ޥ'7AH.]I@hw,/7A3b-w@$7A)@xRLf7AT`@s|B}7A̦kN@Ѷ7A`D@ޥ'7AH.]I@PtOck7AYpPΡG,q7A0ɕG,q7Api=[sEl7AYpPΡ{Zk7AOڟtOck7A Հ⟫gl7A0ɕ1̄q7A0v[G,q7Api=h7A$붳@ůE|7A}s@KI7A}s@Z*u7A :;@ůE|7A%_@B7A$붳@ 4>7APbδ@KI7A}s@h c9Aд@]$o{h9A @  Df9Aд@$\0f9Ahrg)@<-Jd9A]!@ c9A`OG@Xtoe9AGH؎@eGee9A-@ f9A @º#v5g9AVRq@]$o{h9A8N "@ Df9Aд@ P@UA8AѶ@])s 8A{@@!@7A@g$yK7AAY;LC7A@g$@7A7Uncч!A7A%vDlyXC7A@q F7A@i3_H7A޾NI7AAY;yK7A Ϡ:J7AL'8jhi I7Av/|ݺcOI7Ag< ]FF7A7H һ˾RE7A*"LC7A@g$"8]5A Fc/$5A_ 8]5A.dj˺5AAA)ro*a5A_ ˥ޥ5A}.+^5A 5AV?&Z=5A{Χ5AFC|c/$5A:{;=k5A SD-_tÌѰ5A Fk4zk5A|1A$@5AM6k)5ACi[8]5A.d#*z>6At/Avf7A o"T;L7At/q6A^xA>6AϑmHIw E6AY }W6AI52J}6A\Ip6Az>6A@w3XZLAvf7AᯀUT;L7At/V#6ACq&=ʺ6A 0~\XW6AZ ;+$6A:XO6Av4b6A`cg46ALxWi(s6At96A2ɃV#6ACq&$AS6A/6AR7@]86AR7/6A6zU 6AD'ż{6Akr6ARFږM6m6AբR6AO߇B$6AG+OiiB6AEmk/B6A,-6A6a)*6A?%iz*6Ae~6Öa6AϪ?0&6Ad46AФP`#^6Ah`ln6Aff3n}4y6A #.K/6A_b1e#6A߂uܧD&6AZφU6AB`Me{6A1v/j6Aˁkeʰ6Aea(/6AQKtZT6Aoz~rX6AAeI;"6A fDFMUϷ6Aj$L?T6A:=6A14[6A8<8[6ARDӮ6As2si|m6A#Kf:c6AD8\Ϋ6At`kŭ6A,D(!6AI(AS6A)k~J V6A6ALuilD6A0; 'W6AOB6Atb"6An<:UKg6Apv6A; tqa@׹6Ay^MB6At Mڽ6Alr߈$A6AASo'tpS6ABqGc6A,lX|6A({uoy%lj6A6EL'b:6A v56A5^o:͜ 6A-(z]86AR7%H6A+r ǐ6AuRY_(6A+rK:+6A(i6A]-$,`6AuRY ǐ6A(I_(6A+r&X͈8A՗L@Ee8A8@ξ7H 8A N@8A՗L@͈8A43@.dע 8Ar7@ bv8A8@Ee8A @cx8A-@ξ7H 8A N@'X-x@^6X9A![@qTfT9ATdj@D¼R9A"@COP9AHd@L9A?b<@W G9AZ!K@ӱgE9A@jD9AC@*{B9AA"@>:D9A?@O`MF9A( ]@y#aL9A@2,N9A~@dQ9AS@^vyT9AHFJ@vFV9Aا@W9Anzf@8cW9A#Ij@2cY9Aiz@K\9AدF@덞^9A; n@Boa9Ac_@zϦe9At~@gOh9A\?Obr@Li9A @Ij9Ap^7@DSHi9A[s0@)P&rZ=5AX& E5A &rZ=5A{E|9Y>5A' R E5A iX5C5A \rcX]A5AU^Xha>5AX&&rZ=5A{E|*X}@K-8AJb.<@y\8A!@@ 8AJb.<@}@K-8A$ @8A9Z@W08A!@@7c8AG@1C8Ax 9@y\8AE@ 8AJb.<@+hdds9A'2@6y{9A R@ tHz9A'2@Xdv9AD@dds9AmE[@-k t9ABm@S]]u9A R@~av9AВB@D.Ox9A 9@6y{9AW˘ @X}]Y{9A`ś@tHz9A'2@,H9(49Ay@-/99A0@Őj69A0@-/99Ab @x79Ay@5-M49A&Š?@9(49Ai@Őj69A0@-j؋5Aicls:'5Als:'5A2z7IJ5AicHd5ABaNbf܍5A}dK5Av>ij؋5AK45AOd䉨5A uH5A|x i5Aqqɓ5AF5A&3/5AS!,}5A}fVRڻD5A3Kls:'5A2z7.ps:c8A& m@9J"8AAu@ 9J"8A8D@I'!8A& m@y8A6@N8AB&qX@ M8A@s:c8AiY@d8AAu@w7/8A(`@ |&J8Au@KM"8A"(@9J"8A8D@/PK-q7A=5:u7A2Ssq7A=K-q7ASm2r7AЄ-Ct7A25:u7AGDrQt7ASsq7A=0P7AQ'UҌ 7A003 7A00Ҍ 7Ap^/Q27AHH(4DJ7AQ'U7AP#!$JN9w7A+G3 7A001>u l6A]$6Avl+6AB6AZ:Tjl`6A406ACۂ@!vJ6Ak (%6AJ>u l6Av$ʹ6AІ&-06Aaeғ 6A%18mKE6AqV66A+J16A0W6A!?vy6Am\]$6AIiYl+6A2h*z7AѲ@217AV@ ;:7AѲ@ 7Apϴ@7AHG@^7AŠF@*z7AQd@e7AV@O}<7A $@217Al>@y7AGf@;:7AѲ@3`#{'29Anvm@PDoK=9A)@ w;9A@79Anvm@6"*29A Z@#{'29Aبu[@Ad39A)@G@89Aͧ>'@SyF<9AR.@PDoK=9A[v@w;9A@41Tx=9A;y@ `S9A]A@1Tx=9AdD"c@sDKY@9AJx@ sB9A:dv[@PiB9Aڽ@CHo@9Ar@=KA9A(Y1@#A9Ad揥@D `C9A]A@N%D9A@_D9A}P@KnE9A.y@\ _F9A.K@OX$H9Aҝ@7I9AW]@eL9A|w^@5N9Ak:u@ "O9A [_Ԡ@UR9A\j@ `S9AhM@!^R9Ao5x@j%R9A)$C@yO9AAKy, @KH{$UM9A2-&@n`L9AӎF@{pEI9A;y@v*E9AԮ:@;S>9APw:@1Tx=9AdD"c@5`Lg6A@_?6Ab}H`l+c6AvQHZ6ALop_K|6AcKG6Aja~؜6A,ke(6Ag26A 6 E6AMfE}6AboŁ6Aa2u96Aow6AXA}36A¹w|6AgpcT6AG=SeB6AYU6AEәG\6AE}z;h28AgC@Yn8A)]@ 7s8AgC@L8AV@ 38A 'o@28Ap]b@3^Hڦ8A)]@aRz8Ak@b!8Ab@Yn8A۵z@Yɶ8AT@7s8AgC@<1m6AiOũv6A+/6캬s6Ai r6A4E&vp6A3F}P~p6ATo6AF]1m6Agm1JVn6A nnp6AXde+r6AOńOũv6A+/Rq6v6AjHsw+ v6AJLe]u6AS6캬s6Ai=PN6A7Љ'6A: $6A7ЉN6AȡA{Y6A)OK^6Am[n6A: '6A9J:$6A7Љ>x-C7AeT M7Aj;3 T M7Ae1oK7A(_<4z@H7AxlnF7A1(ĤtE7Aw;(-C7Ar '>eD7AyF:6EG7Aj;3VYH7AV.fIגb5K7AvkƸM7A0 yT M7Ae?`}dϖ7ApJl7Aȗ9 n(7AdSp E*7ApJ:ZH7A0|}dϖ7A31ޫշ7Aȗ9Tx7APW3@7A_nHl7Aɱn(7AdSp @hc6Af%py6A†޿ /Ѩ6Af% {6Ae?- ua6Ac6AeGo5{6A†޿*1h6AËwl6Apy6A+'d3Mz6Ajو/Ѩ6Af%AH1&5/6A>(%C?26A-A6406A>(%1&5/6AKC Sڏ306A-A6C?26Awb.16A 406A>(%B(LY^ 6A{C6b6AO :2;6AY#=DL6AO l6A_Kv6A  6A4`6A A+6AJ?<0՛6ANXinM 6A~lV 6A 1!6AB#i6Sr$6AjnmA*6A,8.6A 뫸r06A>}lw16Ag@Y^r16A ^/*,06Aqi^ A26AJF46A[CM+56A)w jN.66AN96Aڋ 8~=6AD,KNA6A%>7B6AX$,NB6A'*"G:B6A Bq~G @6AkhTL3_;6AqڨA@P:6AV[ 86Au½s)86A_ؑ\C:6A ՔGL=6AqѦ?6A"xNG/@6A8=W- 4>6A@JS }w?6A U,C==6AU->6AG Ľ>6AHG6A@|FP5]L6A@qv4Y"{L6Aš:2;6AY#Cx\zA48A92@O8Ah{۬@ !g8A@@23 8A92@&Շ(8A1Dh@48A W@h88AJ5@\zA48Aɼt@ 鏠8Ah{۬@YpC8AeOS@O8An@r4}8AO~>@3MŤ8A4y@!g8A@@D`ԍ05APTj.P65AL M,55A/3j.P65A,,o5 45AF$~15APTD=15AЂԍ05A^)7A5(o7A 5Ly7A >#/yt7A`8`f?7A!?[@17AJ}H.7ARA/1G.P%7A륻"ND0N!7A8ސjc7AP-7AV5g,7A|+7A;PW+7Aͺ**7Abێ7b)7AmJ|)7AoHoX(7A!I(7A[Q'7AVj x'7A &7Aٚ!g%7Azl %B "7Azo!7A\GE'"7At 7A=&~jw2E7A= U&^*,$7A{} 7AvZ87APZ,q7A;C&'wxxM7Ad L Z7AltZQ@7A0ϣ!7Aj,xR27Apj6c7A5"M7AT3GbK7A]3X 7A cy7ATjB.7A+BĚA 7AӲ 7AnMZD 7A|hs, 7A=7Aٙ15]7Az@N7AA6\I7AZH/+iJ7A1[7Af9X7A3ό=7AK96\s}7A2Nw!7A-4垏p7AǏ0o27AzM-aE"~ r7Aع0zI7AԎnٕQΟ7A i i7A-[7Axãx1I 7A)ڋޞ-7A|D1Q7AbG\XsBJ7A## ͫp7AVI$msF7AL9:pNX'7Aȶ>H1Rp7Aɶ>\}7A!B#V@7ABѐnd7Aɶ>(W[l7A3AXh7A/BS\ 7A8AR`g@8ApqO@-g8A@t8AVw@^d8A {@8Ayu@*8A9ss@t8Aw@Rbq8A]E@=K("8A.d0@8AN(@QL 9AJ@ g9Ay@jom9AOC@ f9Ah̫M@Q+A8A3*Ct@Ϧ8A(0@,r8A5w@36L9A3~n@K,D$5A׼k> d05AZd>-5A׼k>M*5A Ւ*5A,y)5A2'5As%`h&5A ~E,g%5A !q;f,D$5A58Yd$5Az&5AC!&5AE{=*5AKH/N?z*5Au,5AY:k,5AmKhbx-5AZd/5Am#Q ##/5As(R'.5A4[2/5A}KI d05A=c?k+D.5AEE;Nok.5Ar0>-5A׼k>L.8!8A@;N@⼜9D&8APRM%@⼜9D&8Au f@W;#8A@;N@=e#8Ajt]@9a!"8AH㳑@V!8AXqy@uFq"8A,@.8!8AP@"G!8Atވ@MQ3@!8A^h@S׹"8APRM%@m$8Al @#3v?$8AQ@S%8Al@uQ%8A(2@#w%8AD@@c %8A08@⼜9D&8Au f@MP(p[=7Arn XE7A0&@;fJg7Arn(p[=7A@_v7A匫@ou7A0&@hD7A lړ@ XE7A@{w@;fJg7ArnNhF>9AƏ@ l19Aq'@ 3|9AƏ@7aE5j9A2@F>9A&~@;9A){@b.9Aq'@8[9A @WӮ|/9AuP"{@ l19A s@@uk9Ayl5@3|9AƏ@O` a7Ah݇37A v a7A v7Aiڈ;7AVj\kDg7APר37A񛃬X}7A */7Ah݇,z7AE$ a7A vPh/ȱ7A*ZÍ7AJs! 5 7A*Z/7A~nP/7A4;n/ȱ7AM-p7AJs!7AhPaD7Aۊ6 O7At5Aꅯq:*{u5A#§#t5A.ӑNGw5AC;¼8|5A^Ɔ!|5AZ.{J|5AQY:x>9Aɪg@;>9A+-\v|@m%?9AxV^@:x"E9AA@[v H9A}w@=I9A<@XxVWo,z8A8@Tł׽8A1@ O/х~8AХlB@{8A8@VWo,z8Aҙ3Oe@ڶ{8Az~̆ @i3{8A"Gp @`}8A1@L~8A5q@6<}8AtϔG@ W!|8A[@Tł׽8AC{F@[c8Afc@O/х~8AХlB@YHi)vjC8A ۰@I]F8AD@""VF8A ۰@_gE8AT@i)vjC8AeBյ@Z7hD8AD@I]F8AtZ @""VF8A ۰@ZHX7A a17AP {x`7A X7As$ (G17AP {z7A*ma17A%'x`7A [MH)8AV|ZjF38A8 @MH)8A(Z=*k+8A"Zq@Id$+8Ap-$ @~j@*8AF@+t)8A0Q@8V+8Ahl@{-8A @qq+8AXg@: !,8A8.@N6-8A0H @J-8A@y,i>@&h.8AI1@ky H08AHX@QAc08Ax;|0@18A@Zҕ28A8 @jF38A߁|@!l28A4@ǯ.08A@cHw@Jൽ/8A Pr@9/8A֠Npu08A@||۫/8AW+8*N0.8A K% l,8A ^ioς*8AV|Z^fm)8AQ/MH)8A(Z=\X[v H9A@Q9A}w@=I9A<@[v H9A}w@4M`H9AC@׊M9A*m{@Q9A- @kyP9A@uUJ9Ag))@=I9A<@]676A*}ۙ6A%qSkE6A*}b(6A"tx676A @Qܹ6A` Ow6A^s)6A%qSk)v6A !~)N6A4o#-6AZTɢ6AdDbݵ6A$IeS(6A/ۙ6A2OAuE6A*}^XQ7A-iSS7A65ǝq7A65S7AlvACbd7AZeO7AE@;7A-iSQ7A[:]XE+7Aǝq7A65_H2ތ9AuZf@{Tﰒ9A~f@<69AuZf@2ތ9Aj@z9A7Sd@)#9A~f@{Tﰒ9A5'@<69AuZf@`PWZ8A}@m̹8A{]v@WZ8A}@_8A4 YhB@b%8A{]v@m̹8A@vc:s8Ax@oׁA8AyMk@WZ8A}@a@Lp_5A3{pd5AXpd5AA")c5A3{Lp_5AcEʬ(=a5AXpd5AAbH9 9A7@tWc/9AHn@MǾ ?9A: @\J9A7@(39Ah!@H9 9AG6>@L9A;y@hD#9A>'@ aƨ9Ab@V)9APA@G9Ayk@! *Fy9AHn@»O`9A6s@{b}T9A 4@I09AB4#@t՗9Ais3@NT9AHd3@:d9A܍@59AZߌ@tWc/9AvW@MǾ ?9A: @cB&FS9ApP@:f9A8]W<@Te9Ad<,@:f9AHX@:e9A3@mNNd9ApP@Bz}a9A-X@_9AC2A@7pr"V9AG |@,#VS9A@B&FS9A@vbT9A8]W<@c< ~X9A @z4YZ9A+r-@m/%_9A!@Te9Ad<,@dhr~8As@@RoY8Aͨ@ NU88A {@el8As@@b008Ab,q@a8A-"ܘ@hpU8AF@r~8AE!V@LLͨ@W%ll8A{c@RoY8A$>`@NU88A {@e(t77A7AԱ-rA_87AH+$+7A$Pl.7A ӂ 7A,mV7AZ!)qO7A2MqbA=7Asb`7A2+7AD\j}7A܏$7Av$fg7A]<~7AKs5E`V[7A-$1~]7Adbn>u${7AjGffJ7A2$z@ O7AY7A(t77Atp7AԱ-rf7At3[e67A=]>A_87AH+$fFJ5AY߆4h5Aʈ(߆4h5A~7C$i5AԙmWP5ADc`Ka5AY+5A"|;?5AR.i5Am=c#gІ5A^' c5A|J:+5Ay5A~ F>Mf5A.X5A( c=5A7,u%5AaT5A3߱h./5A.wV5A`Hsې5A])>oM?5A_xf 5ACHh5ALE m5A\lPj5A!1_1 5AA%8Q5AGrdzXF5As w͉5AV"5A@8.i5Am=ckPD%<7AjHR<߬7Ab*MJ F!`7Ab*MJ_7AR<߬7AS*w7AjH’D7A D%<7A8 F!`7Ab*MJlXP]S]b5Adr3wmi5Asq`_=Ui5AIʨth5Adr3!b5AP]S]b5A u4 d5Asq`45xh5A~ iwmi5A[~1_=Ui5AImXw;47A5QkP97A|!xR67A7>f~> 57A5Qkw;47Agn g;O67A |X87A|!xP97AQGm"b>97AR67A7>fnXZ{d*]7A̸2u7Av&Bv7AP3͐Z{d*]7A̸)7AJy­S7Ag*3{nc'7A2u7Ad ū7AHsv&Bv7AP3͐o`g Lc8A8J[@IŸp8AD@ Gp8A8J[@!xn8APqU@49-j8A(*b@ h8A(e@c8A"@g Lc8AD@fbn8AЬ@IŸp8Aۣ@Gp8A8J[@ppF]8A<@m}8Aȼ;@ OFǡ8A ]@'8Aȼ;@m}8Afpo@8AJs:@nȢ8AlEi1@Ĩ8A<@F]8A;@Qwq#8Aጿ@T8Ab#@&g8A5f@OFǡ8A ]@qt5A@[1[5A;_VMFJ5A;__~5Acy5A؞N^5A;epٸd5A~묭v75A$ `45A+ e'5AG^ 5A2xyC5ALJ+ -(5A30T@Y5Ai[)5AЭAW5A{^ M5An҈Ur}nb/5A7rSܟ5Av7e,s5A[$l2i)5Ad˿=GZ5At)qkPz5A45Iɲ5A٬V!5ALL^5AuY:o5AKѮ5A* 4vW 5AɿF5AxѠ*<5A:jHsM5AP85AG$L5Adþ1[5AQEWk5A_u0&z5A|OQ/Yt5Athuk$F5AE'65Ao?5Az2 }lֲ5A@[t5A$zYK5AH n\ѳ5A@X8b5AجV.R{T5AްS:}E~5AK5AaV_;5AbMMOy5Ax,X> 5ALk4]kZڴ5Ay$5Av^+/Vݴ5AUs5Q5A2K)5AZcUT5A@W-5A`0aU!5AOPwT:5ADIŧ5AGtU%S5A(Q*Ϋ5A}VR󔠳ѻ5Aw!qf5AAPA?^_&5AlJjfŽ5AT-Wgڨ¾5AP%!Tfl5AX/C_5Abnō5A@x!r5Ajw5A+/x&5AKD'5A g^m5A H|5Ap+FJ5A;_jU5A ~z-5A;c%5AJ8u5A-8yj5Abr3H5AXh:P *5A{Mq[ v5A@u%ˠjU5A ~rPeF7AcQj%fvK7AbfvK7AcQj%'=hyI7A.r\] G7AeF7A LeG7AbjJ7AG•fvK7AcQj%sp+5A 7ʎ5A  ,O5A3m+5A RH05Ag5As&&p2Tc5A 7ʎ5AbZXpN5A|Ͷf5A [K&5Al9/Ď5Afi,O5A3mtXqJ[9AȀ@#I닡9At@NC 9AUO@QM9AV9AȀ@qJ[9A@nJ߾9Axo@׺Q9At@#I닡9Awtq@ N9AfF,@NC 9AUO@u5AX ?5AiH~?5Ao#*X'>5Ap<N5AqT#(K5A-#,ʰT5AU,8-ps5A:Lz5AkD{5AJ5AlR`5AX 65ASܚtR5ACnq5Am 5AB65A3k7^5Ap!b\L5AbG~HM5A$]}(~5A[ A9k5A%Qo%5AiH~۞)Qj5ALĹpD35Aru "5A !X\₞5Aq_05As[*W5AU?5Ao#*vP\O6A0uЇX6AW-`ED6A0u\O6At6AW-`?6A)CЇX6AATN6AN_aED6A0uw`Nh7AZUhሸ7A/) O~#7A ]5 Ԏ7AZUhNh7A]\:417A/)5r7A0|h\H7A.[n7A؎nZሸ7AȅcH O~#7A ]xP`9}17A1Y("67A'kL57A1Y(`9}17A<c%27A''jt47Aу'`u47AXˉb"67A|%kL57A1Y(yOv8A\r9@*#V8A@*#V8Av@pH6!8A\r9@̊8A,\P@l8AR~^@K368A#@@hH8A@(h8A4o@Ov8A`#@ў 8A2,c@OpX8A@ӟ'8AkU@ 8AS@B%N8AZ[z@8AX[)@z y8Ar|@*#V8Av@zկC{6A!ELw<^Ȣ6A2կC{6A.RP~<5Μ6A2Y+q6Aac1"׿6AL<^Ȣ6A^xi6A0M;M6A#m.?ı6A6>qQM6A!ELw~6A}bo6AS@PGEj6AӍE6ASկC{6A.RP{p38AF%@jne8AvP@ rIˉ8AvP@^8A:@;\8A:@jne8A6_ @Y8AF%@L8A9 @=CT8A @88Avfm@k̭8AJ>@38A) @rIˉ8AvP@|]+4X5AљuLf5As ZCFj7AҀ,rQl7AƥxlЯm7Aؓ!Pƿ){m7A %r3l7A"gH|E88AjtXj8AXj8AͿұZE8Ajtw\8Au4|E88A^R18AQ9Xj8AͿP[}%8A<#T*8A!_'8A<#aEb&8A U[}%8ATdQ˙j+&8Al_zhJ)8A!T*8APtŮ_'8A<#hP8A@Y}8AY@ Âi8ALH0@㱵8A@78AE@P8A3@r 8Aˇ,@FK8AY@{1@8A|@;n8A }@Y}8AduN@Âi8ALH0@hfCD6A\ݢ\DZCI6A"e zwcG6A\ݢwɷF6A]J}p'F6A~ @fCD6AЎD6A<ųdE6A"e-|G6AZ :\DZCI6AWH@Em-I6A\dzwcG6A\ݢ7A1߷)Bf7AsI7Aq(}`ivƻ7A/: vt7AaTVv7A'g|r7AL&`.k~7A"ĉӔP@#7A]L-7A4:7AA7ARpf7AsI)Bf7AJh7A\r7AC(XeVT^7Ar; |7AƽsY$ɉ_Ͽ7AftW7A1߷Q 7AhW|t7A~RPp7AdC7Aq(}`ihm6A2t@,6A_a6A2t@,5xx6A/??s6AzIR+r6A_ I(#q6A`-WtQsn6Abhm6At&0o6A)|64o6A_air6A$[5t6AJ@;8A |@5[=,$8A4<@̅k8Avxțe5AUZQc5A都~W3d5AG_Bd`k5AQ7mS5Ai`?]}5AQde5A@ ~]5A m]T5An5Ao;B|5A |SPlN5A_ozcG5AɆI5Aݒ`mA[C5AUcg5A/!0|5A\I#4R T5A%B5As%75AÆyN05AG"ʦ"ۣA5A6$]5AAVx5AIQ?N 5Au$,oH0y6Aŵ]jZ}6Aگk|6Aŵ]0y6Aq ޽vqy6AگjZ}6AWxr}6A u7k|6Aŵ]X@߸5AuUEwQ5A} ~5A;A5AuUE8}/5A!`/@߸5A} BCN5Ar+faj^5AEUwQ5A;l~5A;A0_h7AB7dnx{\7A&xCҾ37AGd!7AB7dnxA9g67A4,@C-7A? -3tEA7AeSP$ue]7AjJ6LRo7ARh0_h7A=sW/ϯ7A~խ_7AwEʰT7A&xC7AP67ATiF{\7A.BҾ37AGH9\5Aw!PWQ 5AԽPWQ 5Aw!k5AZk59\5AԽ?f35A^G0 5Aa;PWQ 5Aw!X(|L6Air 7fQP6A{oK<5_P6Air *O6AfC,`K+M6A(|L6A{o5}ӗN6A=-&q|P6A7fQP6AրK<5_P6Air P@<иk5A(?dU5Ae&v5A@<иk5A(?RP@5A/- X5Ae.Eg5A7dU5A΄ա&v5AH#ᶚ9AyE@Jo/9A@Jo/9Af!]@@,ڭ9AyE@isK9Adչ/@#ᶚ9Aꪟ@9A@Jo/9Af!]@P 7A uEaڻ@"!̆C8A¼@y8Av:@;iˏ8ADXA@! x8A쮮@оW8A@Yo8AP2V@g$8A$y@H.A8ATy@8A4˴@n)̊r8Aha@,8A6ٶ@' x8Ab7@ %[eb8A>Eaڻ@/8A~D-@[ 9A?$ @[ 9A~D-@ZA 9Ak@BP[ 9A(H>@V 9AK+@`b9A5{@E{8AT@1\z8AV$|@/8AxtA@8Ana@>GK{8A?$ @@ 8AZ`@ m8AH@@F=b7AiPC1u7ANcрH7AiPC87Ay{>b7ANŏ7b7A21u7A4cрH7AiPCPwTy8AXV<HB8AyspHB8AXV<8~8A rup[*py8A(XǡwTy8A`fdZY}8Ayspꢪ8A@HB8AXV<hsd-"9Apĩ@_4v*9AZDW@ sd-"9A^^>S@D#9AB@}WL)9AZDW@_4v*9AD@f4p*9A"B&~@_0(9Aw@7'9A0j;2@0[&9Apĩ@%9A^@sd-"9A^^>S@PyF8A8 *sGyʆK8AiIdvJ8Ax1Ƒe!G8A8 *yF8AMqRJ-B0G8Aؕ( F.J8AisGyʆK8A\ úIdvJ8Ax1Ƒe+K7A4r 8v7A[rBc^7Ao =+K7Ak@7A(2ٽ/#7As=7ABL5K7Af$_T 7A[8v7AI1Q@S7A  _7A=7At Un<7AM-t>7AVJ C7AlM5]jE7AJA4˯E7A\G%yD7AMjC5+?@Z?7A^ha=_6A %6AvX ҫ]6A]Qe?\6A =Tl6A_aa=_6AERb6A:;])wdz6AvX%6A[D6Am MF6A9S`ҫ]6A]QJ$e9A@?Jy9A2 k@J$e9ANx˗@Tںe9A 0p@kBh9A &@SGjH|g9A|w@f)vi9AI!9o@Aj9A2 k@ej9A5Q@^"b7j9Ac &@::l9AG@7b:`n9Aҵ@o9AC @;USdEu9Av@Ex9A'˧@?Jy9A;S[@f y9A-@ ]:u9ANQ@X u9Aظv@v7kit9Ab @]q9AѢk@-[sm9A^s0@]i9A@mˇZg9A.=@bs^f9AnS$@J$e9ANx˗@pe[q0Fj8AP%o8A}%, $m8AP'Ԡ>l8A7uøiv&l8A0'T j8AЙWe[q0Fj8A~Ym8A}%,pn8A\-%o8Ah>ʯX;¹Wo8AXnK4PDn8AX`e%$m8APXpO8A EBO+V8AUWU8AW.~R8A ጠ2Q8At 2pO8A N{źP8AUXPS8AĞGM{EBO+V8AWU8AWh8G8AP[<>@xQ:8A\@ 1vE8AP[<>@,;8Al@8G8AO%"@Z.8A\@48A 04@Eŝ8AH>+ʥ@8A@xQ:8Ac.S@.1֞8Ay`@@1vE8AP[<>@P9.q5A}O5x5A:yO5x5AKm t5A}Zrq5A@b9.q5A Bcu5A:yXw5A@`O5x5AKxRU8AֲEz48A$jV l8AֲEqڽ)~ 8AfmD;k@k 8ArҗRU8Avlh8AnsQ 8A2g= 8A$jVy w 8A8S 8A0kPw{8A<r z48AxfYl8AֲE "V$e5AǻXv3P{5A@sæ!v3P{5A@[[uVᨃt5A%fI; r5A@$n`uq5A@`48o5AǻX泆!j5Arq Te5A"V$e5A@!EVg5Aq-6g5Aݶy h5ASTk5A@PjQy2l5A[}þM;tl5AYmaG}lm5Au> O2j5Aps3 ei5Ahf`=ۏvg5AeEwg5A@sæEh5Aw-U.6k5Aa݁j5AL\ ym5Aȱ$I\^n5A@jakJ?Do5ARg4q5ANK|s7Aq`7Aq>s7AFIZN}7A}ZɌ37AV`N7Aրl-`7Aq}CE57AE : M8A~a.h}ll 7A"07AE n]7AG|-_}CE57Aַ'7Ah4rxt7AvB~7A~a.h 8A Ǧ58AP: M8A(~5G8Av8A}e+u98A#XT8Ali}ll 7AH]'n6A )pH6AMQ)?]{6A ]'n6Af1KY6Ad W˄6AM)pH6AMӜQ)?]{6A `I8AvDm"%_78Ak]@ 8AvDm"ݢR8A;f(xD8A(@I8A('@g8Ak]@18A(_@T$UE8A@J^t@%_78A\/`@8AvDm"6AJBK6AHa6A7aʌPWY-6Ac}',&uO6AJt_fsGK46ALs<46AUBK6A 9D*6Aqov(=6Audu6AL!&6Aנs! ;6AJ7y6A#ͤL6AKoHT6ݷ6AzΌ>6Aȫ [6A#C°[6ALC.6A)9Rh6A,=C /6A -6ĭ6A#G5]k6AHa6A7aʌP5`V6A'0b6A(~4'`6A'0;]6A/زLVK^6Anݖ\6A@%([6A2:m~XyX6A=0/W6AGO15`V6A V84Z6Ai]ݤ)\6AZPӢ]6A(~Ղ^6AqZÏ.^6Abl;)˰^6A i2lMa6A1Wb6AbpAWeb6Axm/a6Aw<:w&6b6AmP4'`6A'0p+WD9Atf@SJ9A Q@ :IF9Atf@+WD9Al!z'g@abD9AJ>"@c+F9A'}y@E1$G9ANO@SX I9A Q@ $AI9A΋@SJ9A@ۗWJ9Aݿ>@~H9AD @:IF9Atf@H$N7AUd{R7A )h7AUd{$N7A0Z^`Q7Ag0*{Y7A R7Aah4)h7AUd{P.;B8A7پE8A7Mg#E8A7O)rD8Aڴf.;B8A6R+C8A79treE8A:@zپE8A*Mg#E8A7~$8AL S*]M_88Aj(d*]M_88A''/ 468AL S>Q18Anz|hHd/8A`݆X*8A~fS5y_R)8AxYF-%8Ah)Kހ4x %8AfF6~$8A\Q'8ADnA񲦂(8A6xάhc&8A{ZUɶ&8A]7)8Aj(d*8ApKGȇ)8AH@+V+8A*䴌-8AxBHv-8A cry\.8A$!`/8AI6?68Ath]'$L68A.B[_4z28A8Y -28AQnPzH438A #*]M_88A''/` f99A\;8C@1"9F9A1@7C9A3ַ@d˲B9A ɚ˸@yA9AdE@9At<@Z1<9A\;8C@:ҡ;9Ah]ŵ@;9A\L_A@$q)<9Al|)@~ =9ADV@v9=9APJ@;9Aw>Y@v^Z;9Am/ @` f99A1@;9Aoʣ@-=9A6qL@,>9A`ݩ΁@9@9A @bUA9A"㘯@D9A%@r1E9A=OkL@as-D9APF@< E9AP8Q@1"9F9Ac@>D9Au^@G!E9A(@pRE9AG6@7C9A3ַ@?)7x8Az>ChE8Aj9NE8Aٻs8AP⺻yr8A u3=8Az>Choa|{8Ahb&?)7x8A\:,3x8Aڄ 1Īz8Aj9N|!{8A$dY{8A*:; d8A(6<ͷmy8AXLR|8AԜU: ͇8AVK8A4tE8Aٻ`YQT7A Ya![7A1 ƱT7A YQT7ADhڽU7AԾ` vY7A1vZ7A=϶LZ7AJZHYa![7AC!ݩ;JdX7AL'ƱT7A h۲+7A~l/ r7A\V)u 3@7AQN{j4 7A!j r7A~l/n!_7AvDݸ7A۲+7A.&`te7A\V)u|_7A#ͧp_7AG3@7AQN{`ǎ9A>D@-Ō9AoY@ ,9A0 Ҽ@9A K@z/9A>D@˝9Aj_@ǎ9A̎@|9AoY@Gi9A"R S@-Ō9Al@,9A0 Ҽ@jg7A!:k"Q7AB/셭7A 6 7A!:k"jg7A{27Aۇꨝ`7A87ABMGj7A'5u7AC/Q7Asy7R7AV"=yQ7A>Farzj7A\#H7AQcJg_7Ax]cy'7AruX~c7A^5/셭7A PQMj8A|Yw7@q8A\baq8A~y,e_m8A|YѳZj8AмDQMj8Ac˽#Bn8A\bw7@q8Ar`aq8A~y,j3H6A@C"2wvh³6AO7&8䆼,6A_-6AEBvh³6AتUOs6AFi哑6Avuuкl6A{Peg96Aww-%z>6A#&s8v6AδE~6AK?\{6A=?YDp6A%!{#:&6A@C"2wv26AB6Hq6AMy q6A{ǚ6Aw*]|6AF|(탯86AMp2z6AR6{|6APR6AC_-6A)̦06Aɦh@]6A"`o0<6A8E*6A`(l/6AxJ,|p6A.gUM~\s6A|E6A8TȾ6A"M6A.}"6A/^ߖϞ^46A8N^L+PX6Aqiө1+6A@K`c6Aq^ O 6AOqgl/6A&j3H6Am,IqM^г6AO7&2ܵ6AbTgzM喝6AJofa6Ai|q85U6Ah,6Aaۑ6AYC+9{6Awv Ӓ6ASde6AUtmq@j6AŬzW6A| p 6Am۱Ŗu>6A>䆼,6A_Y6A=Ij 6AM~O giQ6A=I]nz6A^=`6AϊvV=6AO2nc 6Aq(6Avp8VHX6A{/iY6Afb7$!:8w6AM~Op/6A EKj,6ATBe6 ?x6A'tu;"L6AKa?j 6A6}AO6Av"IexW6AIP giQ6A=IPB 7Aػ%(&^7AȰè7Aػ%(&B 7Aa;!+7AzfvN7AȰ^7Ahu^k7A@è7Aػ%(&P=@'1 6ALT6AIHW1XB6AL=@'1 6A2K,;k6A;y}Go6AIHWT6A!Y|6A1XB6ALX P8AD#v̾%8A]&̾%8A8#/K4#8AD#vv8AX . P8ALL;$CL8A]&@] 8AzȰIcv"8A˜z̾%8A8#/XN/EkK7AT১|SPN7A/(h{QM7AT১|<'K7AJ0(L nK7A YdN/EkK7ASC-r L7AWXt?2M7A/(hSPN7Apm{QM7AT১|XeƏ'47Avl]L@97A'ILxr_L87Avl],"+77A h@=47A\eƏ'47A'ILx39l57A&"_{S87AYL@97A["r_L87Avl]HA-~6A78IV6Ay} ]6A78 H~6A2=K2A-~6Ay} IV6AS|ߏ96AX]6A78hBL7Auo$}7AI 7AuoBL7A=o.%~Ѳ7Aؓ+U7A#B7A?<7AI$}7A۱Ԃ5E7AK8|W7Az7AuoHsUh 8AdfӺY8A%D 8AdsUh 8A}L7f 8Ag/@A8A%DfӺY8A> ] 8Ad`7G7At="7A, ="7A,^!"77A_IpYV7AtG;7A3M$f7G7A[-E/(37A>@=g7AZ ch 7Aٕͅ="7A,`T5A~f)5AP4r3 )5AD&CI_$)5A~fAJ%5A@Us!5A3T5A> xN5AP4r32!5Aށָ:zE%$5A~q)5AD&+%4AݺC`(5Ag8+%4A~4ԅr4A{/2b$4Ag.P+4AO$Ą5A@gWk<95A8mS5A@4Ӗjq5A :5AQ 5A@^F*>65Azp.K3V5AFan q5AJM[T5AY6I5Aѽ[}5A'Ȗ6D5A@/`d7u5A,\x[i3 5A!uC`(5A&#}l4XŢ'5Ao'WT5AQJ7@5AۊY$>5A"r5A@)1J-5Aݺc,5AFQNƎ5A@c0hj5Atg0^P5A*EUq)5A@$.QM5A( )QFhk5A^ 5A~`35AR_ 5Aʂkij 5A&R=n 5Aq% 5A+uu 5A@jBD6 5AM m5Ajޭy5A@6c7UAzҜi%5A.iiX5A7V+5A 7iu5A@wa==ʆ34AO|Ao_4A@>3$%4A*pFd4AzI'4A@wm>z4Ab^4A?RKXlN<4A@yħ/+%4A~4'7Aj5`" 7A8rJ7Aj5`c7A\Hx'`7ABAKpk7An>si!7As'7AjNk7A$3Qr.27A)\4@hjD7A00H]T7Ac -r7AQC` X7A NrQ7A8uI37AڙQ7A}$7A!c9cI7AA0PT57A4 " 7ACqUTxM7Apd7Ać }7AhI<@:U7AXt^7AR rJ7Aj5`h~,8A*D)̼!8AW _8A*DХ 8A/nbaAo8A;<8A@9&~,8A~|wW8AWHW#8A}{[K8AH)̼!8A_8A*DH/t7AwJJu&7AMyC7AMy&7Aqmh+ӊ[7AyBi#*7AwJJu/t7A|O*C7AMyPh3U/7A  >#7A89:|#7A(Y3crN" 7A)Jh3U/7A  $ 7A[>* |"7A8>#7AQ7'9:|#7A(Y3`Ԡ!h5A@5Ajdh9S5A@ Hu6AwiO(|t6AlUN*C\St6Aw/58u6AcD6AaHp26Ar7,6AG;„6Aƭ&,bw6AȕoQX:h<7A>F-0*v C7Adj}=7A=):h<7A>F-0*x<7AEcY/U(-=7Af]M+>7A]$z9PB7Adjv C7AԗQy}=7A=)HŶ7Aq,8 hC7AxE^zÚ7Aq,8 Ŷ7Aq$n­7AxEjġP®7AjLhC7A4@k^zÚ7Aq,8 ^t38AIt_k8A]78A9/!)T]8A洙h:T|Σ8ALeb8Af8AԽ(v'Y 8AjlTDOƨ8Aʦ/Ш8A4D xq8AIt!-ʤ8A2+ ^t38A.Y_Ac8A|&8A$AoK> p8Av&U9bz8AI)8AxP4x`v8A,-%8ج8Ax38AVأе)ؼ8AqCh6@Ӷv8A i0k8Ac6 -{w8Af\>6@Ӷv8AB{bJmw8Ac6 ^{8Af cP}8A 0k8A)la+xLe8A i]xN6}8A|c2Rz8A–m-{w8Af\>Px6A 4Fw`6Am#W6A 4F䪞L6ApN x6A]z56Am#W6Araw`6ACl6A 4Fhw,7A_ c667AXuc667A ^47A_ ;<17Ay&EOf+/7AH;!<8/7AV6z07Ad, Zao07AJt.07AΌZ>-7A?p}hw,7A@d,7Az;y7@07AXuT17A&^L.!37Ac&ow47AåHO37A 17A@|H#=17ACl>;527AFĈ#Nv s67Ac667A p[cYM9A{C9AP:#m@ j9A ϸIPR* 9A`cE ^9A{ߖZQ9A Ts^<9A [[cYM9A{g;V@~V9AP:#m@u9AX3k@l09Aqzt!C9AVj9A ϸIPPՐL7AZf4 Q7AP/Vt`M7AZfՐL7AYR?N7A Qq'eO7AP/V4 Q7AhLѣP7A“Pt`M7AZfP|:W(7A4:mwG\7A~J -7A4:m :B7Ae|:W(7AH!t7AZc]G7A~JwG\7A5j> -7A4:mp 2[8A9|,8AEVG} $`8Ar3H\o>8A9+B8A9 2[8Amu*8AG38AEVG}|,8APT#v8AR<YH}n8A+*k9p8A苡r $`8Ar3HH7`7AXqLڶ7A(_C ',7AXq7`7A5m%07A(_CLڶ7A /Ϙ7A1u ',7AXqP&GIL7AOG6>a7A&9'H@+T7A{:ua0S7Ah ׷P7ArU7M O7A#0dK5Q7An O7A S<#O7AP9n]L7AAF&GIL7A 酵掻M7AlãN7AxƦTO7AGӖ@IbR7A Z;0 mS7AÙ˼",W7A;G|o;`X7A&9)!Z7Asۢ 4-T\7A]X挘Ct\7A۹!Q [7A`]@[7Afc^7Ae>"bi`7A;۶n8`7A+7{OG6>a7A~j*`7Ak*iĺ\7ApbTY4+[7Aֱ:ǒNY7A4,X7AIxݰBJW7A^o|V7A|߾³9U7AYT7A%U7A%]4M&:X7AFI{xHZsW7AV_MQx%TBV7AT aH@+T7A{PMPy7A#Ow{}7AԟU¥{7A#OWlXz7AMPy7Aqf1|7AԟH }7A@ɻJ4w{}7AhCU¥{7A#OX~?\8AYJcoNgHx`8A XXf~?\8A`>J3H]8A XXfNgHx`8A~F&_8A9"`ST V_8AYJcowj7A|z>7A\3pJz>7A^kZ7A69{fw@7ABB¸R7A|Qh]7Axwb7A/7A^kZhYpӭ9A%J5A1Ӵhcի5A`F#ۥ5A@*3ޤ5A\$5A@^ZC5A{^1Ra5AJ>5A^DWy95A@EdzYiUH5AJز5Aõ5A@;%&X5A@,3_jɻ5AUDVpPع5A@) Ny׻5A@-Oւn5Aq]5Aߤu|Do-5AYq&5A@Iũ5AHհo5A+)v%-r95A@I j[XQ5A;c 5A7Hŕqi5AϟMz55A@w jq5Ažm5)m5A'k[0A H5AΟ/ o5AKhl[6Argv.)f6A%eoc6ArgvDa6AfZT- ~^6Au7ۿw[6A=nhl[6AFQs4\6Ao_M^6A3Drc6A%A|@d6A oz-Tͣb6A\jؔ[Fϳe6A.)f6A%S1qf6A Y&]Ud6AEc6A/ jv=/c6A'Y=^eoc6ArgvPuN7A g#vC7Ae+i7Aep֬7A)#vC7A6;:[ 7A guN7An i)g7߫7Aőg]+i7AeH1c8A?P9~h8AWWi1c8A-v./>Fe8AWWi9~h8AQnKFge8A?PCc8A&1c8A-v.Hr\9AH+'@V’9A'@ 2j2g9A'@T 9A$Ӓ@V’9AC3q@f/9AH+'@r\9Aý@ 2j2g9A'@P:\c8AzRuj'㒙8AV:\c8ABsI^Pշ8AV#f'8A :'㒙8A.28AzRujΖ8A2!:\c8ABsIo2ͧ5A~`@ Rg5A@cC?5A~`@ o2ͧ5A H$@r5A@g{N 5AV~Ş5AJ)S5A&L8l5A@6C5A@Eu GՈ5A&#5A:,c5A@1ҁRg5A@L5A@B_* 765A8gEEUZt5A)ˍcC?5A~`@ X:8A 8A*'.C8A9pu8AʾXZ18AT7Σ:8AlbWӕ8A* 8A)޲8Az'.C8ApǴG,5AnU!5Au{]d 7 5A: { 5Anī}(5A@eǴG,5A?n"M5A#>fvgy5Au{]d3-ZE5A?f5FWX:5A E5AhU!5Ad37 5Ap[7AA@XC8A`򞎟 j8AA@X R 7AHp4)xg7A0tRu|7A6V[7ASk B7A`C!q :7AfKV7A`򞎟caE7A~XC8Aǖj8AA@XH欹T|7AFR=7Ann/2-7Aok }7AF欹T|7Aш@rh&}7AnnR=7A_/2-7AokhJ֑8A .0k 8A4A.8A7AMM7A 07ANo <7AÐ27AWaY7A*>b,7Aɐ!<7Aa15C7Au`Ve֨%7AM mUl(7A}T 7A./<䴨s7A 5`gQ7A9FcM 7Aѻ \m7AL9\F7Aڐ`C559AD2ƣa1I:9A aZ Yx`59AD2ƣC559AJ'9 @߄89AP:WO99A aZa1I:9A(;>G:9An 98J:9AP289Api Yx`59AD2ƣ`8Aq(&29A `t{9A򔿺e_9AMР*'8ALw,^Hy8Aq8A`&޽@8A萍мf"${[9A0(&29A`t{9A򔿺hg"*6AX2(KZc#6A@Q@ `Z"6A@Q@{#6AZc#6AZOx"6A@r&nBv_d!6AX2(K\N6A@t Jm6g"*6A1 aA|6Av{!6A`Z"6A@Q@Xh9AߏO 9AHJr*R9AߏXT9AGYђ9A(gչd 鯍9A,h9A$Ƿ9AHJO 9A<2lr*R9Aߏpi2D8A+g8Akλ WRV8A%ڹO48A+^R8A0-Ji2D8AIv&>?:8Akλfy8ANxtRњ{8A3Hg8AjC̓8AP#Jmz'8As; WRV8A%ڹP*ʹѭ 7A^H-L&7AT i2&7A 'Uz "7A^H*ʹѭ 7A?~.1^ 7A={ ެ%7AT-L&7A^< i2&7A ' XИ8A]Ca,)[x8AJ,)[x8Aeˆ>8A]Ca-{8Aɵ;8A%kKH98AH:И8AJQȥ8A|2,)[x8A P2q:Y6A@RX d֤^6AnHS2q:Y6A@RX {})Y6A󅤦Z6AnHS&#C]6AJd֤^6Ae%i}q@]6AXR 2q:Y6A@RX  hcu_37AaiL:}7AdG% {9=7Aaicu_37A2?^2|FA7AVzTܟ7Ak-~7A7l7AdG%L:}7A9ũO 7AIºIکw7AG{9=7Aai P=k`8AeG՟""8A՟""8A'# !8AeGb 8Az'*=k`8AB7w 8AL\!8A՟""8A'# `;`6A7,Pl>6A& qW6ACr8!6A7,P;`6A=34 sS6AWL&6AhA<.6A&l>6AOWvx76AqW6ACX6A<ˋ\6A/ٚ <ˋ\6As3/ڊu 6A6a[6A=6A@gHCE U^6A/ٚ @"D6Ad!{ɇ6A4o<ˋ\6As3/P4F7Ay<`5/M7A^M`5/M7ApVCJ7Ay<= G7A@}@4F7A ~EG7A^M J7A0`5/M7ApXoQX9A'`g\9A@a.JݚPנZ9AKu>Z9A'oQX9A{GTt[9A@a.Jݚ)zj{4\9Atye֡`g\9AYGH)[9AfPנZ9AK_5ւ6AXwg(W6AۻV+_5ւ6A&Cߝ H6AbX`6AۻV+F7Qb6A,os:6.^6A;ZȈ6AfH@BGC6AP(B[_ḋ6A2GV\ٌ6A;_@[6AX>6A#fQiOl6A;xm6A1G_J6A[O(W6A?bz6A@# 'fLJ?6Aqw+2cM%"6A G=]rZ6AL"j6AzzWIC6AXwgbqf%6AEALn6AZ3&?voG6A JІ6A@ i؄6AQ֏ 6AU_5ւ6A&C`eZ)"7Ap4&7AbP H1%7AbP $%7A:DͧAt%7AW)Jp4&7A nc9W%7A=,E)B#7AeZ)"7AV}\$7APH1%7AbPXDzg)6A; HT6Ap6A;H>6AuDzg)6Apk ;]ٴ6A{s6A;fګ6A HT6ASBp6A;XuJU8A je([8AŰmX8A jv^W8A@TϸW8A8buJU8AQus?PU8A~"6-U8AŰe([8AhQmX8A jhhm7AZЙ rs7AU* ?.s7A8 oMp7AU*^Pq7A>9p7A^{Й rs7Aq?.s7A8  ,~N6AdJ cu7A#ܳ6A %"Ϫ7Aä'/Dt7A^ȫE p7A#L7A~CJ^7A 6iY7A2Gm7A^Wzpeo7A2nKJ cu7A.f%m?7Ac>xcZ7Ad #G7AnЎRhέ7AWsQ!7AǕ˟mKF7Agل\:7AdBFL6A#>3sBP-6A(S ,~N6A߉eƚ(7Alu]+7A+ dܳ6A %Hιn6A.b*O6A&_oLHJ6A.bQ_uQ6A0'<R6Aιn6A&_o*O6AR7LHJ6A.b`3{;6A+d:6AyhÓ u~6A+ܛ3{;6Ab3F6AyhÓ16A!?W6AzHˁ:6AׄY.I8A|-68AtDz08AB}8ACr&{78A(&-ݛ8Ar}NW8Aƺ]oM8A_Ӌ `\e8AL8nه7Aqz}7AA,eQ wV(7A!^7Aqzz zP7AW6wه7A$_W 7A#{ϭ)7AA,eQ_7A$0fJ7A2F}7Aߴ nwV(7A!1X7A[h{!7A/'}7AMj!gNC7A S37A$g\R7AOZg9&7A;3/bqD7AR@:O7A)Sc1X7A[xW s;9AiǏR8C9AFŶ yp2;9A h1rW s;9ALgAФ}<9AFŶP+A9Ad"qR8C9ALRà|DB9A@»!FeA9AiǏ1Qo&Q?9A@3X4?9A@z,Po=9Ap䛹!@f;9A x|Byp2;9A h1rX? 8AY&vW@8A80َ\-8AY&v? 8A;x L#8A~['8A4%78A80َW@8A2Y8AD\-8AY&vx${5A7pSbq5ASź,w[|5A@) W[5A]?t9a׀5ASźyKԁ5A =C 5Ac'Ab05ATMσ5Ap(F5AӓN}:,5AԴ_Y5A^ } 'C5A7?+>5A@qSQg5AgkJI5A@+bO LjA5A@7xv 5A@$XK265AM5Aӗ-8;5A‡ 5A^L 5A'm K5AxLP8E5A%4n5A@MC756ș5ASWq7Z5A@ eSbq5A!~40c㺜5A7pQ`5AΜX-+;5A Rw 5Ȧ$D@5Ad ʪ45Aр˙(5AQfD Ç5Aj7^'gX35A@\= 5A@4v:am5A'3^5A!'Yq~5A"${5AseM|5ABveɉ%~5AT=nw[|5A@) 8t:w8A 1w6>8AF0aFԄi8A 1t:w8AF0aFw6>8AOԄi8A 1 `E)8A[e~'88A$  8#78A[emc 48AOa_1zX.8AG`$^ky*8A=g?E)8A ܌Er+8A$ Cva-8A8"N^~'88A 3;]8#78A[e!s8^f7Ae`q8Abx _o8A/glbj8A`6!Ih8A δh8AvVh ㊛m8AʩCċq8A54at8AB${|u8AgU泘%t8AfKe%zs8Av3u8A^v8A{ke#>x8A%n>Gx8Aoͯ^Txz8Aוݏ5y8A\>#+6A~wcR#6Aoz cR#6AFy+T/6A~w|FT6AH| +6A 6AXRP6A9":n6AOc 0{6ARkwr6AozW6Ao@v6A9zPL]6A<tcR#6AFy$pOt6A%onU"z6A尔_ x6A%o8B\u6A&Ot6AUH*\\w6A尔_Qˍ*y6AKdYEz6A@GYznU"z6A9lrz`$x6A g9w6A@Ly6A@J x6A%o%`0 7A[ [yqT7Ac jx Zm5 7A[ [yƬ 7A\r0 7A EwiM 7A^&E3G 7 7Ac jxG7AKq0nkaL 7Aʪ+qT7AuZm5 7A[ [y&hZ7ALeiz7ASEB ^7Ao%RM0c[7ALe 7A8M4D§7AxZ7AB) :7ASEB" 7ApJ&Wp7A 6iz7Ai5^7Ao%RM' "5A>5opJF.$5Az<1 "5Az<1l/u5A*=#)5Aۏzɏ#5A@"pJF.$5A@g9#H#5ARnSս-#5A>5ot f!5A@|wYݺ 5Aq5 3!5A"r)!5AnC# 5A@k@#.5A@OHK5A@PR%X5A@Q(5A>]֮ "5Az<1(Ňx47A_f!=7APXW";7A9hD:;97A_fNJ87Ap٩ 77A}c57Aŵ/afu.̀77AoԩD̰i57A7^QŇx47AS&˟47A57ASmu+87AzUA:7APXWýi;7A%DqO7?G;7Am!=7AV%AKz0;7A$";7A9h)X7dMm7AᥘQr7A7dMm7Aᥘtm7A v8* Υo7A~|VAq7A9(Qr7AsJq7AvUd_4o7Ap7dMm7Aᥘ*hܶ6Ax@{z 6A& DB6A%ܶ6A| Hwtp6A{2C*p6A&Ԗ6Av@{z 6A3ΘJwU6Ax=6AV/A46Az5x%DB6A%+N7A#%|O Lk_7A7 `CY7Ad./n|Y7Ab~AtY7A2lWv?~Z7AD%IC]7AO_p2;7h_7AQ\$o|O Lk_7A6^Je]7AvR'3\7A67#hZ7A()fp\ĻX7A#%NV7AL!վR7AKl%oN7Ak.EN7ABYѤݍ&O7A '{9fXR7APeXX RzV7Aky/AiZX7A7 `CY7Ad.,h 89A|=9A( QN;9As:;9A|q 99ALf 89A Gtv:9A(wǦ<9A]GhQ<9Arײ{GVU=9A8>=9A)QN;9As-)QI*7A'N17A|807A17AZ2 _N.7AV,#-7A41ѿr.7A[j,7A)QI*7A`g75i+7AхtE"+7Aj"8As /_ug 8A y39.8AxMQ괭7AbSrA7A5+FW57A1;8A^V_JGX8AB}5y8AX)-8As>"8AZ}2R-%8Ah}3]/_ug 8A y3/hHt6AIǠ Y16A xg~6AA426A@F6Y16AM>i{*Z6Aߚoտ?#ʍ6ARp-]kh6A(>ú6AIǠ Ht6A!e{SƋ6A"xg~6A0xFTE8A>NAS8ACŐc AS8APpҢ'5S8A>NVlP8AMgMRM8A>#YK8AיQSJ8AEj֩2F8A 8!FTE8ACŐcSN8A,ZO8AiKN8A̯AS8APpҢ'1H}27AxV ENL67AB[i1g7AxV }27AR|0Fܳ7A|'%u໴7AB[ENL67ASxri1g7AxV 2x6k0|8A0t|R8Ayݶ i@*8A0E8AI t~8AN/J8AdUh|8A7-6k0|8A6$ ~8Ayݶd΃8A%rt|R8A|OQ8A2IV+8A ʭi@*8A03x {7A[-܆7A:R\ iw7A[-LV7Aꎾu"{7AV(1p`⧿7ATo7Asr {7AQc)'9B7Aޗ t^&!7A:R\S 7A]̽hzQ7AЮ)܆7A>iw7A[-4`o>7A=W"3_C7ARo o>7A?Cy@7Aw,3B7ARt_C7ARoq B7AVJQ\ڮjA7A9$%MVx@7A=W"3J>7A= o>7A?5X+W|7AT"7A8eL~7AT"+W|7A7Q`oO~7A6H|}7AD*`&;w}7Ab1t~7A8e7A ^L~7AT"6X(1)(]8A+PK!"b8A2wI1]8A+PK(1)(]8A\ڇ?_8AIT-a8A2wIX*b8Ay>o!"b8AӖˆ.\*a8A =X1]8A+PK7` +Ʉ 7A%b7AЇ b7A%B_O7Acq@xAG 7A +Ʉ 7A*R: 7AvO?1 7AR9f7AЇ'"t7Ai_(b7A%8xm7ASL5cwL7A% m7AQ)bl"7A%3C7AB! 8^7Aoq穷m7Aib<#&7AD cwL7A&7A "&4Җ7ASL5Mǀ7Aη|]E>7A2Ium7AQ)9hyjοf8Aʇ!?/l8ASv ikUej8Aʇ!;j@h8AlaKyjοf8A g8ASv+%7i8AJtj8A7* 4l8A1H?/l8A~dN{Xk8A ikUej8Aʇ!:Jg3%'5Ari٬+I5A֍I/!H5At55Ax}ISS35A:\)Sg45A@bw1>55AA1 L.85A@t>v[s95A:T;5A2߸W?5A7W*@5AA(-{LF5AvMG3G5AacUb!H5A0y7A/*O7Ae ;G5lN7A>|/3rO7A+\{$l-7AP<tq7 7A t><XĬB6AnOs f6AE/ݝ"uu6A@RǨmrN6AnOsb6Az#MĬB6AFKIoQț6A'm-9a6AE/ݝ" f6A@<6uu6A@RǨm=PCNؙ6AdQ?kϖ6A2@ 36AdQCNؙ6A]fmKot,6AH+9 6A.%X Ⱥ%6A2@ ?kϖ6A@36AdQ>HKdD7Awxe:rDI7AzurDI7A>A6%8G7Awxe:KdD7AH*PE7AzugH7Aj}rDI7A>A6?h,6A o6A1# dU6AŅ Y6A,6A }l6ARGt8HP6AD~'ScK6A1#'O6A!DI6Awf^ o6AGSdU6AŅ @P Ks6AS@6Aܳ&< 6A g 6A Ks6A@<ޘ86AUc*H;e 6AܳS@6A:J&< 6AAPo{6A؆O GS6A9<%o7A2A Cn7AB1uhm7AN:+j7A 3mj7At'ltk7A2A ٷ>o7AtCn7AB1DQ!y56A@o?,#H;6Al+ <]j^:6A_E@<86A@ohQ3*66AnM66A@/K66A@YgDh%56ABw$Q!y56AewN 76Al++XG86A@*)sf96AWDW:6AMeZ?,#H;6AZ<]j^:6A_EE@Uj28Ao+CQG8AxQ%LQ88AxQ Y=8AB]=8Azox9 >8A))|?8A+*,S[@8A1M2i?8AzH֒8D8Aaݍ%EF8AgrwCQG8A/י~E8ADQBY7F8AOiokE8As)'-4F8AYkwt ;#^E8Ao+d*%D8A %[n.ISC8Al UC8A"uEZbA8ADA8Ao$D8A"9Bc˱O;C8Aa^ B8AGL,͒kӸ;8AKT҄L:8ArL,[98At,iI98Aޔ1כ:8AqIᴨB68A{Zؕ5Uj28AwIOH28A jqT58A`f)388A/ B'9A]ǽ{pZ&9A*HH&< 6AU=#5Ϗʩ6A@V5Ϗʩ6AU=#&< 6At5;B6A@VUj6AuDVȩ6AKbL 5Ϗʩ6AU=#I@y]l6A@GY DN6AuZTCc6A@GYy]l6AJ|36Au DN6A@L%ZTCc6A@GYJpzi5A@.`ev5AA# dj5AA##m5A7ZOecXq5Alev5A@.`A@3s5A@Bv*q5Ag~n5A@>O~^l5Aן} j5AEUzi5A@QDdj5AA#Kh$A8A)chG8Aks hG8AaF5-GF8A L- 0HF8A)c7NhD8AkA+H9 C8AF#Z1YA8A=϶$A8A WrhWA8Aks~n)D8A6hG8AaFLX6A@ZoYmn6A9mn6A@ZoY2*x6AJþ6A:!6A9c"6AƽCN S6A#'s}<6Amn6A@ZoYM` '5A@#Y-}6+5A&To~ f*5A@#Y))5Ac`8'5A֮  '5AI ~]o(5A&To~ )5A%=grz)5A@˥-}6+5A@~O2f*5A@#YN`'6A@E5M6A@  t6A@E6Af6A@ ('6A >%6A@ EkTG6AʭDk6A5M6A t6A@EO`)`7AU,#ĊSf7AX 'Ue7AU8d7Aivvμba7A,e)`7AGC Oa7Ap/6Q.c7Ai)KLe7AX,#ĊSf7AX 'Ue7AUPX/75A1u;<5AW\1T;5A1/75A=W85AW\=h95A3#nnؿl;5A@'q´<:5AVΕu;<5A}!1T;5A1QXDQ7A0Lb6g(]7AV7A0LbgU7A_}tS7Aj=½S7AdBXDQ7A *^Bd+R7A b0dsS7AǛKRGU7AOC?2\oU7A3pF%W7ARaY7Ae\7AT46g(]7AC% v]7Az n=?*n\7Akz%Z7A9wYY7A9V7A0LbRPd܉87AgM`wm7AV( >A]7Ag-7AWwd܉87Agێ79&7AM4$' W7AV( M`wm7A%>A]7AgSe87A@G/voG7AEP,g#.C7AR#:C7A>d,B7A]{ | B7A@GEKL9)A7Am^&wXw@7AFH8k=7A=7Aŝ\E;7ArUȹp;7AHe87AX֬L87Ah`f e_87ARJhH:7Ah=C=zqX=7AjU?7A9F畿I?7AT8 ?7AEP,utA7AаZ]B7AՖoS?7A=!P'@7A(B7ABnC7ALByD7A:hgcG7A2 /voG7A#2D?G7A( E7A>nb$y C7AlF[g#.C7AR#Th 935A!A5A4mT ${N 5A4mTj5A@eGs'$5A#PǎV5APŖԥ5A@ +!5A!AO05AGnu ڼv!5A@7 935Ag${N 5A4mTUx٧ R6A:ަc1 6A[&l,6AJ;N1 6A/;{._6AIJӾ6At`0*W6Af? Yy6A^T 6A@#qe36AK(WӾ6A| GBA6Al /}6A@vx1+Ql6AMUOk͛u6A)R+/6AS[f1ܷ6A@z|U 6ABI7Rݶ6A@!S2u6Ae46AvfEui̲6A@9M6A}vl$6Ai36Aq?f^kF6A='s6A1lrh|6AX/1UP6At_Oj6Az˂Э6AP`/6AcC,Ӧj6Ae-6Ħ6AЩ".=t6A@-hT6A@@+c{#6A4oSS6A^Ap6A^w-V6AePB[Z6A]C8{ŷ6A<=)֦6A"Xsl1ܹ6A@0 H6A XZ6ArR3l6A+HE /6AcFOh6A@Z҄6A:ަc؛h6AuV缀6AvqqxEjܵ6AmZ6AvOJױ6Aܡk-6A8xa$@p6A %2IYZ6A@%ۜ Qt˯6ALJ)96A@TMC6Aj*߀/ٳ6A `76ACWѽ6Ac I6A@cԋsh6Ar#;愯6A0Pveԇ#厮6A>8?y6A@"\LTV6A@Ʒ{S6A@qpl=6ArR "<6AETfӽ6A=^:6i6AS6Aꅁ}yG]6A@*c>ω6Aj !TS6A>zYMU6A@g g6AVj4=Q6AU rJ[6Ay7h6A@ڞG6AB[| 3YT6A tS6AL^i}҆6Ad)Aj-6AP|Tu's6ApM[iY6A/6A1t9b6AȲTk݀Ǝ6A@Є@C}6A&* }6A3;zc ~6Ax' d!V6APD6A?9sm 6AcFpU6Al9v`6A܏_}#q6A@mR=L6A@j-mK˔6A{mk|6A@(Bvc㣇6AOQno6AMhMoⰈ6ACo86A@>d(:~6A@=~cC|6A4tT}6AW=/G|6A֔xz}6A=(I Ap}6Aq#t{{6AC-?ԡW{6A)N]z6A([w]w6A@6O"Aw6ARO6qt6AKRs6A@eeoԻ|u6AOD9v+ZcBu6A]vp;K|kEv6As*?4x6AjHu6A@vǝu6ASHu6A@ "Yss6A7e' +p6A@*? x=o6AGQ%̈́ѯo6AbӘ/GBr6Amwr6AVwD-V/s6A9ggpI8r6Awb+Kdr6A@=mL܌r6A%Vyڂt6ATb'Dr6AN_x7r6A@.Bs6AXCu6Aҁ^rw6A@m:a!嫤y6AШnϝ~6Aʯjc~6A@#b |6A*_c{6A[(+6kx6A6 !!Jv6AG/c7!t6AQ&k,t6Adpu6A_iRy6A)kE{6AZ(}~6AvM* 6AG1j$ag~6A::BVzES~6A#juR|6AtAY|6Aꅁ2[}6AR=ÌxH6A\X/6Af\M\E]j6A3VC6Aҽ)V꾄6A7@n݅6Aw&%6A%?(=6A:f(qɏ6Akg]Cn<6A@7T4}6A!_gm6A{,&6A;/1hl6A^g^G_$r6A@h!r$4`SU6A|h6A T6A@KOټR6A𣴲v6A@n/gH6A-5 K6Aʢs> 6ATT6AWrnȺڌ6A%6AR %v6A@PMOTlzG6Awhw.엉6A@"wyG]6A@*9&6A_O6AMǙׅ6A@gr.J†6A9go#ޅe6A6a\86Aziڇ6A9t6A3`~1 26A@ŇvVC: 6A&Mv8̻6A@ R w")6A@x 6AfA=(9&6A16AKލ6A iy6ARwL6A@/e7gƋ6A7hd=6[6AI906A9> 8n\/6AB؆16AKM[6A&W"5]`6A3$*6A@EM#Ń6A86A $Dx7jI6AFu`y%f-6Af.6ANC8Xk1.6AԨH^PN07AzPD7AD.T7ADPD7Ap̯'|7AXdurC7AzN07AD2,h^7AM.T7AD_-5A1͖Ŵ 5Ak2_ Ŵ 5A@U;eKR5A1͖HT5A@jI&5AܳO To65Ac-5AOGnE|/5Anz5A)kx)5Ak2_055AoEG$5A@B=~M5A)UqŴ 5A@U;`P.]7A-e)u,Eb7AE+ b7A5 Wj/_7A-e)+t7]7Ak.]7AE+ }|Fa7A Cu,Eb7A;b7A5 a`1ZY6AQ`z|6A2H {>Q!6AQ`ŠN6A@~Y1ZY6A@ W6AHЛls6A2Hz|6A@6s9j/r76Ak#&AǜA6AQv{>Q!6AQ`b^]v5A6ߙ b25A*c 75A*cQG5A-zb25A@sdp)S5A$ *5ALޓuW<5A6ߙ L5A@[^]v5AR- z5A7{\yC5AuX5A@ s5Aq-/P! 5ALN5AQ1fwe5A@eIo;5Aˏt 75A*cc0ds_6A4d̅86AiTI #6A =T6A4d2< 6A@';F#w2>6Aol~.ʤpF6A@AO󬃙6AQ,6A57sA?6As%~6Ads_6ARO~7lNbXp6A@J=;>wF6A@qj6AGBK-#q@S6A@?܀6Aʿd^["6A@<(Mb;6A@0ɝ6A$V:U}6A|0Jč[6AȓX|kVX6Aȳu76AjԸ1Gy6A|/i$6AiTI S.5J6A2v 8qtxh6AW :Ax?0 :AǢup\:Ahi;ت:Aʮ lP :A1ͱ\wkD :A_9W :APXM -+ :AlboR :Apɟb :Ayh'WqG:Az D4&~ :Anr":A  >w :A6q :A"vͪQ#:AcSF%9^9A4{R9A{f%gT9ACj:uC#9Ar~m b9A$+ut8js9AAG+>9AMH9Ae[3MU 9A˧C9Abz ^d9AVp;eҷ9Aeb09A_^RĒ9A ~n8i9A†95sس9Aa3J9AuX+A9AI9='Y9AFKm9A fPV9A^s[.g9AC DgH'_9A$wH3ܰ9AQ,{vXz9AX`ps"9A]!y9Ag@ģ9A<@9A=\NnFp9ArӝOS3 E9A)m PF9AW%"K9AvXu29A ZW7S 9A˩Nl09ARy3r(9AxAc19As6C"%$9A;t=9AJOVB9AJ-{s9Ad`NwНmT9AH2- sꍪ9A;L@- a9A\1p8GSP9A(J<}9Aqi]=z9An9Aܫ^{7At z7A#ǹlP$~t?:5AA 2 5A UZHG5A U.5Adb= i5A[Dkg2 5A|䳮 5AA $~t?:5A0yZHG5A UmP[Cw6AO48^7Apb˳,I<7AO`m7A`O[Cw6A,t0)7Apb˳,' 7AON48^7Ay,I<7AOnha$i7Aɹdbzm7ASi9 .k7Aɹd6켹j7A);4)Pk7A:Pʧj7Asr.a$i7Ac0kNm9ki7ASi9cl7A iOɲvm7A(wbzm7Agf.k7Aɹdoֳ57A螙7AH u7A $7Ai f7Aa,RG\.7Aupd|\7AN7+ 67A4^XE7APmCH7AXt* 螙7A|OٸdIv7AˆȌw7AVL7AI=7A;yK7Aj7AT4@LFN7Aa7iB`A7A qɰn_7A+Ugۼ7AI](\j7Aξ'7A0@^$ֳ57AHѦ*7AZ u7A pxK6u/R7Ax5_F[W7A /b}S7AI.IuS7A%+R7AK6u/R7AX5NGS7A5S7AcR~U7ABrrPUV7AWhٺ`xsKW7A6 :_F[W7A$_BW7Ax5/b}S7AIq`"#7AQx8?ٟ7An D.7AQx~7A1"#7Aw/CɆ7An Ÿ7Acf7A1*8?ٟ7A^>4b7A$LD.7AQxrPu7Av$n7E7A3Ĕ/37E7Av$n2uD7Ac^upu7A{|GT#A7A'N48)7A3Ĕ/3jWwB7A!f7E7Av$nsH]7A:z7Y7Aj ٺG7A:z7<7A)x]7AHqO7Aj ٺY7A=7G7A:z7tH?y؆8A+Fcbm?8A.zw!?y؆8AJ|( *8A.zw!bm?8AϊD+6w8A+FcO$8A;T?y؆8AJ|(uPSASt8A7I_ Bu8A)Rt8A7ISASt8Akpynt8AtzDxt8A)R (tu8A__ Bu8AсruPt8A7Iv"ﷵ5A2Dž5A9U!xӿ5A2-ֶ5A@sh o5>~5Ayu5A?-O$5A@ ;5AOZz"ﷵ5AJ795A@RL '5A9U`5AP>5AI}ݒ_m5A+yrp5A!TԸȷ#O˾5A*b`SW5Aׂ5A0Dž5A!xӿ5A2w, PN7A|~rv\7ALM^O7A&, PN7A52/&N7A>nnQtO7ALMDhP7AĚwAQu,Q7AY+ qR7A-J~pV7Aג/Z7A6A-x)-%@6Az#}:>6AK?m@S<6A~2"<6At6(x m&<6Ad )Vdc:6AJuIhk:6A,:G<6A@6uȑ0;6AIrVYu:6A5".rz86A@B7|1l5p76A ~Dž76A@!i.cL946A WK.w46AZkgcL26AWQd516A]s25 16A?F D 036A@ÅP;wJ26AV̌-226A.]?]46AV\.ƒ|56A 5176A3e$96Aޚ>Q4ip:6A:U ;6A7ӺPf=6A8嵞>6A@q>?O>6AfI0dj=6A\YL!F=6Afyx,o6A4y 7A,jWTV 7A4f7A3c7Aq,o6AQ)j 7A,jWTV$F7A@wwd&7A@b3`m7A!skʿ7Ay 7A&QH77A@9h7A4zhOr6Ag%Iڰ6A-Bn '~6ACnXv6Ag%*N6A)/Or6Al| 6A#ov_U6AMzڡS6A-BnIڰ6AX'{Єۜ6Asy'~6ACn{h58ah6AC}K66AU4 K66A@_EZZ6AC}o_6A>ĝo58ah6A@3Z&6Am՘z 6AU4 'y6A%Q6AiG#+j6AxK66A@_E|%'7A.K-<ѥ7A#`о#r˜7A.K-<87ALBN7A}"7A@`vcPȗ7A@h_APӗ7ADT%'7AEKk[\7ALp7Aq7wlV7A#`о"ن7A&xÜ7Ak{ژ7Ap| au6e7A)Vѥ7AH}! 7A@jS7A@f7A٦ I8.7AUp7A@'#r˜7A.K-<}9w_6A?qIFo6A23Rh6A@ UI=?vd6A݌S-.c6AWh޷d6A Iʖc6AlIa6A3r $.`6AEg$9w_6A@)(x@S:`6A (ŷUb6AA d6A23fGi6Ax:f[h6Azi6A=DC4i6A@_ YGWj6A5 P*E~k6A|vԸ{Al6A\5El6ANِQMn6AjIFo6A@J#Ln6A81GD)JKm6A 2b|鿪l6Ar`fbj6A?qgni6Al-Y55Au ޵NE5A@gRc NE5Aφjz<5Au ޵>l-Y55A@gl+55AWL \]75A[75A@Jp 85A@gRcc:5A`b9h=5A8Њ>f@5Ay2ȞPD5AEPivfE5A K9ONE5Aφj5A K 6AB?ձ8 6AOH6A4ĐݨY6AUhD`!p)6A08D4&6A&wyF 5AH:j5Aw<+5AM2е6AB?ձ!" 6A!0q-P6A@=>5:59 6A@UjW] K 6A@f5Gz 6A_4ϼ8 6AȒ 1x7A@xHMn(7A_w$~7A@xHMYKrY~7A@+$'NrZ|7A@rm#o|7A+ҟ[yS}7AqFl|7A@CX? {7AWMhz7AJK$Cn.{7Aiokܨz7A9<b<{7A +1Fz7Aar|( 6bx7A. ̰x7AzrȒ 1x7Aqbb+[+y7AW/8џy7AwЩ$`{7A_B妁7ANRn(7AO66 8wh'/7A%4,7AS M7Av= u7A@w$~7A@xHMHQnlm5AE,V@S5A@!-65A@!*Ur(5A@L.@S5A|B\>%5AE,VQnlm5A@/O-65A@!hF|q7Aa3o[2v7A)J _QOv7Aa3={t7AD*fDF|q7A2 @Rq7AeKx*0s7AOutVCu7A)JAuv7A%kE u7A2>o[2v7A@i"_QOv7Aa3;7c7A\[i7A!65A@^|;i}<5A QL=5Ai Na>5AXM+<>5A!S1@5A n?5A5xM7H0qS7Aj#!V7A@9)j;V7Aj0qS7AF@1y VT7A@9)$WQV7AV#!V7A@j;V7AjXE 7A"stn^n7AMCH7AA 5d*B7A"s,7A@E 7A~s N|*7AM27A tn^n7App-CH7AA xtJ6A@qI&16A@<( P6A@qI&"B6A@q|36A+'ɱ3M6A%P}X6AETKtJ6A)%98J6A@<(ݘ6A27aqg6A`?|16AXf4^Bi6A\P6A@qI&h(8ASZ 8AZbn x:8AS` 8AXE?(8A\rP8~8A,A~8AJb 8AZbnZ 8A#UD( 8AH!_! 8A%hx:8ASP*c{7Aފxߧ7AA,A 7A`7%V*c{7Aފxf-t7A8D*DJ7AA,ߧ7AXn*sJ7A“ !A 7A`7%VPά28A:=288A SKy58A[J3z38A:ά28AW%`u38AJw.78A =288AXk(SKy58A[J3`4~& 6A"NV=6A4C 5#6A"NڀBR6AL=6A@q6U4~& 6A@@鞗3 6ARքS6A4C)SG6ARǙV=6A@i 5#6A"NHdMz7AWfg7A@xHMw$~7A@xHMg7A@iaOz7AWfdMz7A@--oe|7A..pw$~7A@xHM` 7SN8A ї%R8A6p 'R8A@fy[O8A  7SN8Av `f7A,Wڭ@8A[qHg.I8A6l˥E8A[qHzC8A,RB8AصWڭ@8A}iw4@8A+{SE?B8AL T1A8AKav'aRyB8A6$"D8AM=\:F8AaRlYH8A5#Hg.I8A*t=0BG8AGh+F8Awp>l˥E8A[qHHRC6AMR;% J[H6A)nJ[H6AMR;% !F6A 9CD6A<<RC6AWYkD6A)nJ[H6AMR;% @V7A$2lXɷW7ATLby-V7ATLKW7A='mlXɷW7A$2V7A@xuby-V7ATLHֱ7AW˂U7A㧵TyU7AW˂ֱ7A!Vw>7A8,IӚTK|7A㧵TyR7A!"U7AW˂gcW7Aھ{/sm7A/C;iz7A3Kz&_H|7A@_?Q 77A˃3ds97Aھ{"|bC7AQc gj,7AЀg(m7Aa7o>27ASx7A@({ك7A/C;iԅ7AzBj=&+7A@v`}&7A˪EӃ7A@; ʊ7A ˦ NLd7A@:x'7A@Łyae7Ar/sm7A@aք:@7AN:{7AWG ]7ALz7A3Kz&ynb3,7A>`7 27Ai'UȢ/7A>`7ǑM߼.7A!!3d(Z.7AY ړ},7ABynb3,7A@p -7A&h_^d.7A@~H,,7A@?2t .7Ai'/7A܈;O17Ay5 27AWWGaRS17A@bW7)}17Aus\UȢ/7A>`7` On8A|ʝuBIr8A<;  p8A|ʝuz+o8Ad On8AOR6fp8AgЎL-r8A<; BIr8A0Zr8A:|/7}p8Aͨ9p8A|ʝuxqm5AF5A@$ <\5AgZw,ܥd5A@$ }CE5AqT@bDM5An.F5AL*`Z '*5A@p+#5A@{gx=ae5AЌ5A.Mjy~I5ASqm5A9<\5AgZw,@lٯ8A[ b8A-␰~8A[ lٯ8A 4AԽ8A-b8Ae␰~8A[ `ʡL77AS9 rQ<7Ao; Lo$<7A@/у <7AS9 I̦:7A8}ʡL77A0['mm77Ao;Ud97A/N s\>:7A#QrQ<7A@K OLo$<7A@/уpMV8A@"2 8AhW %7`8A@"q 8A58AmMV8AELN9"A 8AhW68Ap/2(E8A\e 8A:`CN8A~2 8Ao1%7`8A@"Xh*)5Am ;C5Ak2-ͬ5Am h*)5A #5A@0q2$L5Aמm?r5Ak2^'5A@$2 H;C5AX-ͬ5Am h (}w7A@҈,L|7AU<-a vfi.y7A@҈,!x7A?88?^y7Aɢ{ (}w7A ?~ox7AU<-a){7A@O6ZL|7A/.|7A z7A-vfi.y7A@҈,puA(Mb6Ac 8J%"h6A@M (d6Ac uA(Mb6ANL_c6A@y|e6A@NNzmd6A@!d6A@Mobg{f6A@N%e5g6A@L8J%"h6A@DHg6AVM(d6Ac . ֚6AC!6A@b_ UK<ڜ6A8W0# 6AH. ֚6AB 0hԣ6A(umE6A릓[DA16At=I6A+;iNG86A@wiI6A@b_C!6Awiا6A>vֵV/@6AqUK<ڜ6Ap[R7A@rLxqwJi7A$'x+S'T7A&et-_]S7A@͎H&9U7AX1cSU7AA@}d U7A@+|YV7A_]vV7A@04Q<X7A$'xhمzY7A˓Y7A@pͽ#7MY7A'ēs^Z7A@réJ$kX7Ai %SxX7A\+.(Y7A@mJn}\7AqCZ$Ӷ[7A #0|\7Ap t[7A]7AiM6b7A6(@ad7A})>MPf7A}\h7A@mDxqwJi7A@ tAh7A@rLm{ee7A@/;d7A@Mlpd7A"4a7A@9 wNyƲ_7AIߋj5f]7Ab:k]7APՏ#Bչ[7AsI5'X7A@<^?U7A:i/U޺/U7A#R7A}[R7Ax OS7A@}j lwU7A]r//{U7A!VS'T7A&et-H 57A@])p@7Ae@~Q7A@])p 57A@~CO&fs7Ae@P,٨7A|,F@7AfW~Q7A@])ph(⎫17A4b657A@$ >-d57A@bMZ~T57A@Gr ʡ37A4b5a27Aʗ(⎫17Aח`/27A@ReQ| \37A@*ݭ47A@$657A@FF>-d57A@b`=B7Aq,YKWn7A D7AߛnV7AᷳYk`V7AñjɣC7Aq,=B7Agm@7AUrİءm7AYKWn7A :D7AߛnP"6At6AO6AӠn 6A"6A9]d6A@0Es6At6A@Q*1O6AӠ윫VP$8Av7s dֵ/8Atޝ윫VP$8Atޝ*~*8AlP!+8AӻcO,8Am(bJ=s.8A4?rdֵ/8AtNN4.8Av7s ,g,8Adz+G%@,8A/+8APp1Q*8A~LrxXU)8A\͔Hw*8A+~*8A8SL(8A' &7R$8A윫VP$8AtޝX6Argڰ'6AF&1}6ArC|D6Ac*6S6AU`6A?;xw 6A|'.6AF&gڰ'6A#6Ai[1}6Ar^!!7A@V(/I 67A@np9-"7A@np9J%7A@5^y1'7A@<]UB a\o)7A@ E\d,7A*)#PPbO-7A?1NEp07A(ٚ37A!v!%iM,67A@I 67A@<5IW67A}ݒ$37AUE27AOyOW2,27A@^}|\'dE07A`&%r/7AK.ISO27A@m_17A0Sr w/7A@V(/[/.7AH{26+7A o2@ja)7A@qM(X!7Ag(z^!!7A?[OxZ#7A@}؜;#1$7AAgw"7A5GO-"7A@np9G6A@y#i(6AY6U #Coo6A@yK O6AD0n6A@-A BA6A`)cG6A@r4~6[[6AF~0֫6A%r2]R b?6AY6UiM6A@3v w+6A BMYc%6AQma&#i(6A2!#Coo6A@yl7A%Tqa7AKWM\{7AzJ\7A@! ,Z*p7ADll7AI={!Đ7A˼nKȥ7AH n?7AKW7A@1iw@7A@K*T_pu[7Awnw=ˌ7A0wqa7A$Z Wkj7AKWp17Aţ\7A%T#N7AM\{7Az #c5A'=t5A=@!gBp5A@ a۞۝n5A`. D~j5A@̍ ej5A@X3Il5A%8yjqk5A'SRh5A$q[g5A‘Hnf5AY=(7c5A:86#c5AU =id5AhCOP_e5A=@yog5AZC:C`=dj5A< l5A3 AM^4l5As<]1i5A,jq듦 ^i5A%m2;j5A ؿ&l5AA z4XJXm5Ad-pl5A5U~u9pm5A.Z*yo5A@HsGjOp5AnKt^q5AS I$@t5Aux}=t5A;_60?s5A\ʫıs5ATI~0Rs5AhVUgBp5A@ a۞ |8%i9A@==]#9Ae!/HV^teҷ9Ae^d9AVp;˧C9Abz {jO9AY>"Io]9A$lTu9A /Ǫ9Am-q6^9Ay &k9A l 9A⻯\B9A$0wp]6U 9A3%BM 9A9%9AX#9AHuFa9Az`j}9AUuePQ}9A(x0[%9AL֑-m9A8͖>9A #زR W9A(dZՓ9A+9A־M 9Ad 1W {Y9ANΌuoɛ9A p7Ďv59A7?͝1J*9A6X^ڣ9A$v X9A_FhR\89AICy݊~׺9AC=!9A3>kn 9AAF45UF9A0"?ZN5 9As.Ryu9ASo 0v9A)U9AI@NH9ADPDA9A}~Ҙ)^9AC'xH9A܀p ̤9A< K9A-#:9A_ąΒܜ9ANM0~9A+uȝ9A&3iQM9AQJ9/`9Ae& e9A Ge&ڠ9AZb9AOyDGÅ{9A{9Aa<':Ҙ9Ah0K9AUK&  9A9s?9A3f"1[ɀ9A Q- 79Ar/ )}9A 2[NA}9AAfNЂ9A@WK. h9AZ؊9A[Db49As){s9ACPP 9A.tja9A@W2v|cv9A_&S2#9Aaxw9Aa9A\3VJl.9A@/e-SL}B9A@ Z.A9AAcj8 9A@L eG*9A^ S19AUtF@k9AzaH6B!}9Acq{9A@Zx9ADS!GUPfAm9A?o\t]k9A@==]@Yj9A@N98%i9AzQPj9AkHFmTl9AF~8*%o9AMɶ Z3Pr9A?؝xu9A"J@]Ҷw9A@{L(Sz9Al7@婢z9AN2xp|9ASj1z9A@@N;eB}xz9A='Sώ|9A@0^v~9AqS@~9A6lO $z9AO*;*0Yz9A >̗y_y9Apzmswx9An)rcXx9Ao w9AAIH=;x9Aa kQx9A@h&}y9A tY vv9A@*k-[u9AY&Hw9Ȃq.o#Ou9ANVis9Aka{Dc r9AF䂨_fq9A=W=qp9AQBoq9A3v|*S q9A@6 YG:q9A2q@p9A!iDْpq9A|7>>F=t9A@!9aw9A\sFJv9AͱU:Tx9A[1EqT|9A"ɹ4~9AVT~9AG2vG9A@S<&hY9A;e'xę9AT[S]-9Ao:9A_{]9AE =k9AcG m9Alѡi9A2ރmX܏9AսBҏ9A\ϐʐ9ATIѤ?q9A |*TqiP9Ar!9k9Aza3a 9Aa#7m9A%Ú9AMXis9AVl0c#9A5?k9A59AhJ#9A N ;9AiTvӵ9A NCà9AF8eҷ9Ae r09Aa6͈tڋܶ9Aq?M?t9A;%x$9A +4ҹwA9Aws|@ 9ADnc"~խ9Afpi9Ah;559A5Գ r09Aa6͈7k 9AK(Q/ϕ9Au,"T뺹9A@i2#9AQP ?9A 0f>9AT}9Ah$z3Ƭ9A¾0U~rOek9A}D19A, -)9Aw D;9Akb9Ar v[849A7j :9AĴK9Ax*/9Aud2^*9A1mr9Au\)#e9AFl,蝻9AT9%9AMÒK 9A@~U9Af7k 9AK(9A_E<6 d9Aʋ%Keo<9A3}^/O9Ar8Qh*nP9A"ߖ{ⴶ9A,a12~9A#G /IT-9A)EO9A_E^|,9A>~5*Y9A`9AG p@]9A٢+ho9AVk 6x;\9An+6;J9Ap1NLki9A)l9Ar-ĦV[Ҿ9AeFp#ho9AVk 6Յtk9A"<9AGS>9Ai1v)lp9A)vՕ9A0\9Aͮu/r<`{9A| y, |9A>~HGԲ9AB,wi9A Hec9A$ j.9A"ky`z=9ABXrVf9ADԊ D9A;4ۺ9A Z{h|U\ռ9AՅtk9A",x9AH+p*׿9A3(cݾ9Az#&ysF9A؃3;4S9AK)9A 9VPRC9A5bx9A!V?!v9AMjE9A& C9A=׌}9AwPl=9A?n,x9AH+/ 9A5Yԫ*9A\b9A]*%"19A ͤA9Ah(9A\yx9ALJ eF%ҧE9A ;A^u9A&ʱ>Mh9A)/uK$9AĜY= W9At!$]ǻ9A牢xCt-9AEt9A0'HR?he9AgJa"9AGbs9Y9AHfW+9An9A&ĕ9Ax^Ur9AEÊGR8$9Ag |'l9A"F/ 9A5YKś9A2~0%Qy'9A\r5S9AD-:V$9Al).9ApwTU=9A79&PISo9Aoõ9A˪w4ZrN{9Au"\&ę9AżpMI9ARn4Jy9A 9O";9AJU\Kś9A2~0%fT 9AFoJR%F9A8qR 9A$7el9Ah{i4~9ARqdP w2ݚ9A#&5?˄9A~AfT 9AFoGƒ9ATIv9A2" ~7!9AsC ߋޮ<9A8"U3+$9A@rѤp[6=9A7Q@9A*@f}ʷ9A.Jk9A'&Mݧ9AսQ ;9A@~#19AT6| Ņ9A9N[ Ѱc9A êJ&Ki9Ax۱39A,*v09ArG9A?{x$lɇ9Aٛg9A@E~~of9A@voGƒ9AT1nHv9A;?oLy9Axv=xy9A#͍x9A@ +x9Acĸ޻v9A@門r_t9A@W,r9A@fv\ Hr9A@m4t9Aq1nHv9A;?B~9AP*D%3R}9A 7`@~9A@wC]~9AwE`Gs~9A| >G (9AuÜHt\E9AôQ~P9AK~K#9A@LOЎ`U9A@!axb(9A]y9AE=@eV=/9A Eh9A\ A|6~9A't9}9A ͎m<-5>}9A2yB~9AP*DI=/{9A[$Bfz9Akᱹc{9A9hӥŋ|9A@hBn+IT"%}9A<WI=/{9A[$BOHWL9AuC%9AsIlcXVY9Aʈ)!9A2\F9A@Rّ͋^9AҜA0t9A+ROHWL9AuC&9A`ävBy 9A k i9A(w&.(0Q9AK9AZYt*M~9A+/>ky|9A1=< }9A@W.&9A`äHo;7A’ rߏ7A@.Iש7A’Xe7A@ 7o;7A\T7A@.I rߏ7Aiש7A’@70j8A3b $8Aᆕ4Պ8A3b70j8A٥2O8~8Aᆕ4 $8A;Պ8A3bXjd8APӗiby8A*# 8APӗ8~8A*_wjd8AUDsBe8Am{i ru8A*VPI)8A*iby8A30# 8APӗp}F7H6AyhL6A'L  L6Ayy~~6I6Ay'da5{I6A@VFI}F7H6Ao7_I6A'L4J6A@@ޢ*J6Am*L6A#o/cx&]}K6Ae_hL6AhO  L6Ay ´t7A@O=/eP7A W i{z7A@ScƧx7ADS ´t7Am%.8PNv7A W #w7A%sw7AX *Uk6y7A Bt~7Ao;_R7AI7G7AiSgeP7A[Zm7A@ƑR7A@ ,+E7A@_t:AP}7A@O=/i{z7A@Shm7A@"ø-X&7AHb T7߬7A@df 6՚7AHbCL7A@A,k-X&7A@H]m7A@"øn7A@z?Vt7A r)6E7A@Ċm7A.t}T7߬7A@dfu;ʔg7A@fj{7Atu u;ʔg7Atuc=k7AI\%to7A=2^+s7p'p7Am fm6Spr7A |Ρ/D/r7A[:Qls7AlT8Jr7AMt7A@ rQxt7AR(qa'hv7A̙:Fy7A@fٓѯw7Aw3ư#y7Ao4jz7Aa?=Tx7AA޾b˫t7A@= _Gl2$r7A@-wKZn7AZi Gm7AxV#=)ڎQl7AVȝ[k#j7A@\HLij7A%ͪИl7Aȯ5j7A==-.2j7AU%WHIj7A;WE%g7A^u;ʔg7AtuX7A1_'7A[^z_'7A c$#B;Aы7Ar>!)' `7A11Cm7A廫17A|B7\ͥ/7A[^zgTT7AEn_'7A c$#vV^K6A $#&9i6A{:6Eh6A@r@c6A}"5G`p^6ADcZ6Aȟg? sX6A>G HT6AP^co 'N6AW'q1rދN6Ab1$N6A@FL3?zW6A>HͿJ\6A.P9]6A4e@SP^6A@Ly(`6A \_a6Aˊe%e{`6A`&f ](}`6A.+/2_6A1n[m _6A $ެ]6A@Q| ,h]6AOjg0]6A +)z_6A\a2npr]6A@qmH[6A@2c[=Y6AKgi;s3W6Ay<BnS6A@7{qO6A/WrHk{K6A dZvV^K6AD1M6Acf7 Ȅe$N6AI?8M6Aґ>L6A@O&JM6Az3ZčR6A$q-ǪS6AZ P8cU6A]GFW-Y6Ab?U+-K[6A==~_6Ava,b6A?[|2g6ArVaQh.d6A6^t&C6b6A{#e6A hAzh6A@JR-#&9i6Ah"HdH(lPi6A|h6Eh6A@rpU}c7AKhDi7A@%ն Fb7A^.U}c7A>8{ 0]`7AbD7A@%նU7ArhDi7A. L[7AKm<7A@iΏ} sՀN7AJyy7A^H2Fb7A^.Xݳ6A; : >6A;Ir$6A; "6A]GN~~6A@$6A; `%E<6A4FA6Aʿx HE^@6AG ݴw?6A%E<6Ag"/<6A@}5.u>6Aʿx宠@6AFחx4FA6AH@6AϦHE^@6AG `ڄ~9AJݑ49A^w' F9A29AJݑ>9A!gڄ~9An09A^w'cMP2v9A; _pӓ9A)jml49A#F9AP0Ӧ$D6ANs}"JG6AqwAyJ[E6ANs0Ӧ$D6A'3,F6AqwAycG6A}"JG6A@@$(7 TG6A@隡QJ[E6ANs灭wN8A;чW8AW_l%O8A;ч灭wN8AvtGxTpP8AOgL4OO8A@R8Ab=R8As;^R8AIWh- T8Au#2ST8A=t ?mW8AWW8A1GU8Ahɶ>e82V8A˙1'T8A ~33R8A1r+_l%O8A;чɏǙ6A@ҡp-6Ak徱f 6A@ҡ S 6ARu(a,c 6A;|cF6Are06/b:6ADc6熎6AN@46A@'ɏǙ6A5:G dQp6A@'r0zi6Ap\Bv6A3v(% Y6A@0rf: 6A$~]=Uz 6AOZo 6Ak徱S2 6Ax~ 6A@nhչ` 6A-M 6A렿yNT, 6Ax^ 6A8Өp-6A@?`ڠf 6A@ҡP[77A}B<7A+9<7A%(Xco77A}B[77A;078ɻ97A S\:7A+9}v#;7A@yY{<7A%(HLi<8A!9~q6kB8AP2L*`zY=@8A!9~<8Ae\cLi<8Aj"wAEy?8AKgEdCq6kB8AP2L*`zY=@8A!9~%D6A$&<6A58( #ki,6A@9 Nk>˘6A$&%D6A2y6A#=},E6A8'?D3J6A986A_MLCe 6A58(<6AGS-z!L[6A̱9q\E6AVamTga6Aad#ki,6A@9 N@$8AK*8AKȊ-*8A%N=cI&'8AK$8At*8AKȊ-*8A%N:TV7A~P*A󿸶7A@ a:TV7A< \7A@ a$7AZUʿ7A@w:7A~ A7AAE$ci7AWH~7AINs=*A󿸶7A]1ݵ7A#˪`"x7AԘ{7A~P'7A[Skg7A@{ GD7A@ॗ]ձ7AӸaU?7A@kz҉E7AI:TV7APW̢p5AqR{Cm x5Ao6m x5A:5!| 'u5AqR{C]Uq5AVE2W̢p5AWs(bq5A@os5Ao6m x5A:5!XD}wƲ7A@_S؍7AJҳ0?!]7A@yMj3W7A@u G\ l7A@_SM۲7A@;TD}wƲ7A@nT {V?P7AJҳ؍7A@fT0?!]7A@yPŮ}7A6JF@/7AL>(67A6JF@||~7A@hz5e~7AЉŮ}7AuRM~7AL>/7A],(67A6JF@Xޏ?7A@cylSB7A䜄%a@7A@cylޏ?7A1yds?7AYWnĥ@7AVfKG3:A7AU+SB7A䜄%{nOZB7A^a@7A@cylwi'h6AFV)۝SlC6A,|bhmv؛h6AuV҄6A:ަcT:*6AC|H[6A@ecd6AV8ʞu6ARc8zA6A# Nqy6A@ @D(8 6AfU6wҠp6AnBV,eh6Awi$-6AnR;R% 6A(&F6A.#76A@RrWG6A?nι6AJ>ѹ6A_>fήSK6AYlf=6A7~aB'6A2\C݇$6AiF>r376Anif2-mi6AQZW8ݿCz6A R B$6A4`6A۶Bqe6A1%oش6Ad ۝SlC6Aq m Ӿ6A&{4:;6ApLsQk#6AFV)$3 H06AQE ^6AebxX.6A@k6A}͛H,/=6ALjGB)6Ah,V9["6AQZ}6A@'#-D6A@J$#4O:6Aѯ y6A\Y dϨ6A9/#6A75fPZ6Ah/!/6A႙}a)&6A@Ef.P0)6A۞;tpE6A@M}lwi'h6AP8*`6A@S+ssp86Ar9G6AԞ?G/6Am>+TH6A@Jʦwݩѥ6AJCPh=ۊ6A@`K06A&)586A@u`8S*ɟ6AQM &6A@ e`"6An$>g6A66A2¢h-6A@zP.@6AM)޸6A#;}6A,pqRU6A@ ȯ6A@?]F6A㫰ԾR6Ae,f~㦽6AzdBTbo6A?:_6A=kT56Ag:Av冸6A@&x7=6A3 9г6A)]ro=6A@Ws4FlёӴ6A§u%ǍӴ6A@kSkD3T6AK;K6Aqt-=)Gͳ6AB`)s6A]&DS6Aiخ߱6A1]8+~B46A3jv$iwC"6A} Y˻ 6A,#0Y6AÃ*_o6A@*eo\*NѶ6A|gg۷6A,_4r؛h6AuV6A mZa6A@_5L6A&B"! i6A: }$I 6AZ 6A mdZ6AJ766A>wCI6Auu}ܵ б6AdZ6AJ攈ԁ6A@7UB)6A@=_6AAT>ؔ6A_876A Pd6A|FsV6AdVJg^;6A /攈ԁ6A@7U&Gƹ6AP,`ΰ¹6Ax[d}ָ6AK,nb&6A@҅eyYϷ6Aq&Gƹ6AP,`X qޙH7ALe|fK7AswJ7ALe/|=H7A@;1~ qޙH7AQ 9AEL^:AX_yt8js9AAGm b9A$+uD9A>;"O9AU)UиO9AX_ U9Aᐁ{M/)9A wJ\9ANwIa.Z@9A~}ҫOfߺ 9Aul-9AeUN:A% ?RP :An/ f҅:A8Ю,~ k:AߏI,C:A4MdBQ:A1G:A{Ա`_o&:A̹]p4:Ai'þ1t8:Ai_f>:Axv R E:ADS̊wG:A\FIJ:At!En+L:Aܸ~gȩkM:A=T`P:ACkgطfT:A[g3]#SV:A3D5#X:ASkd^Z:A"}y1ko c:A]%cHe:A!ʉ0Gi:A%c@am:Ajvt/.o:AA>I>5In:A=ͷ7^`qp:A)Ħ0rqr:AxLq{y:A&#J{:A !~:ACY9L坡:AT^H :A1YOW:Ar-G rB:AZi:Asfxi':A"7P:A,":AL9Uw:AbćFZy:ANҡ-{w:A*kB:Ay{1nHK:Av04:AtGyp:A+JK:ABCo6A:A~s-zN:ALc-po.S:AyIDI:AK>^:A#>~=շ:A:mRzr:An jyoc!T):A yFԭ:AF u4χW:AKT|u򶑮:A Bܒ:A .De:AELPso:AC:A59ga:AНfd-9AUv9AF֑0W?9Av9AMOEJ89AKVA|?9A]b!T9AcVon9Ayk+>9At8js9AAGH6Aށx< 6A 5H6A VS6AgI!Tn̽6A p6A@h8C,a6A37Ki6A6n#6A 6L[-6A/֎qh[)}6AB~Ch7O6A@@z?Ԍ_6A19=hc6A@=/c6Ai/ v)P8 6A79ڻ6A@䨐DqU6AVIJ s}L6An,ꂜ[6ALzoZ6A@A=tn|06A*ĘɩE6A@XTQ:6A;_q%6A@\16A@9n< 6AnU*#ڶeH6Ae5Yul6Aށxn6A35(R~ `6A@S'$ٞ6A.u.E6A:9>I6AF(q-ُ=6A ~%@'6A6AP)qmU |6AUoWt6Aa+^;n.6A@XрfEj _6AU{ڏ+6A@QL|86A_s, 6AYBba5f6A@w%B6Aw))0,6Ac~>o6A@f1=#{U6AnKw^.l6A@-3g@6AlU] HN6A`?l6A+HEXZ6ArR3H6A xz"K8AP MyS8Ac=be |%v̟R8AP ǨK8Aut_z"K8A_`> 숰M8A(xN8Ac=beG,O8AyuȚN8Ace*05'P8AெQ=*{Q8Aoh1ڭ#S8AT2MyS8A,&E|%v̟R8AP vK5AL12 ~ހ55Aĭ?9E5Ae?;q5A}1\5A&G$5A@׵ #,5AtIvK5AԳ-~(X5AqS5AGӆ5Aĭx5AXh,,pl5A@鑷T:5A9[5A@^e5AKY!_5A]&5A&@9v5AFakz5A ~ހ55A%=g5A@6#5A ,kOCL5A_btK3Ë*5A@P:lUH 5A"ݽ_A5A(5A aEE5AʔSs5A@ȈG4YH'_5AQV|.<5AaP#D:5A6ژ5AT1s,њ5AJw+5AL125A@VAr&;f5A@X*d5Ah9taoG5A8M˝35A@'݇_/5AܣZFh5A@@s)5A[ A-G5Aԡz%o5A {; 5AK^+0 }I5A::$5AF}5AT{qQ5Aã,!5A@?cy!5AR; ƾ#K5AW.!5AjB{#^5Az]n_ (5An?^ 5Am~0KZE5Ae?Ǘ5AS(H#A5A&8EX5ADmgydj65AD95j r5AFDǗ5AS(H#h8AE8A9Z[8A5 8Aԧ+KRın8A/n,2|8A_:R(Z|8A'm &8AVM+68A΃ys'8Ad&du×8A :Gp8AG3ـå8A)xXl5g6A@Zv#Gl6AA!Vj6A@hK`fbvk6AAGl6A@\_;j6A@6Tg6A@Zv#l5g6A9Uaih6A@z!Vj6A@hKp+}t5A@,+^6'z5Ac1+h ry5A@,+Cjbx5AT8u5A X+}t5A@“v5A호Bfw5AӣYo; b/x5Ac1+hy5A@;x5A,7^6'z5Ay%;&ry5A@,+n6A@e`c|6A%i3uo6A@en6AZn6A$^,S9o6AwE tr6Au!fw6A]|\Sx6A-yz6A%i%({6A@/`c|6A@o{6A/H5HHw6A@)%ߴv6AشWO}v6A]mt6AIP$r6A H9kp6AOЎV3uo6A@e]\78AaWiM:@8Ah5FU28A3U \8AV<:Vdž8AaWiZa&8AR<0_Z)у8A]\78AX*l ]J8AmPןZ1fFʃ8Ah5FSmf?8A[5MCȉ8A(18Ane8AGځ;8Ac/ M:@8Av+(U28A3Upԛ6Am{՝6A@ ߬(;46A!yc(6Am{=yΚ6Ak9hlc6A@ttԛ6Aq/GL6 ԟ6AsB a6AIR 6A@G6AK՝6A!=eX_߬(;46A!yXDN>6A KC_CqGզ6A'CqGզ6AeZ6A SS K6A KC_'Co6AmwWDN>6A@Vxk~GW:66A'Z_y6Abϥ0CqGզ6AeZ`.ٻ7AkI 7AP<1 D6S7Ak'7Ae .ٻ7A@zw*7A F!Z{Qrh7AP<1rd7A@P[`7K~7A? iUI 7AjxƍD6S7AkP5W'8A}i9H.8A@_khv<(8A}i5W'8AeZ (8Ao2I!Y%t5-8A@_kh9H.8A)E+8AɆEv<(8A}iHhfS7Ac ]R7AQg/7Axq7Ac hfS7A|,7AQ]R7A]g/7AxqHAf6AY0הEh6AZ}lTs f6AYAf6A|~ g6AZ}lT 3h6A@oi+e0הEh6A@}s f6AY`T8A1Y8AE搁> T8AQXT|O8A: ~[|8AE搁>q֕8AV5VY8AH%Q8AEǕd;’8A1uhҝ8A_sT8AQXT|pQ 8ALOl *8A}i v<(8A}il *8A/]e)8A@HMlpX '8A@pO.H%8AoMS"8ALOQ 8A@tHҽ!v%$8A%Y ''8A|+blu'8A؄v<(8A}iH6lĞ7A̮7,7A@UA^J,5R7A̮6lĞ7A@(^pn>u7A@UA^J7,7AcƘUC>Y*7A品j,5R7A̮`*z67A/}Ԗ7A6 Ұְ7A us@7A/}Nm_7Aiu*z67A@n3>1]FB27Ar=}:7A6Ԗ7AM{>P=|b7A8@Ұְ7A usp0nH7A\~C7AE UVa7A@(Q67A@T$;7A'uY>%7A\0nH7AgRmP\ػ7A&EaG7Avg8!Z7AT7AE~C7AAUVa7A@(QXfkVq7AouxȌ7Aӳ_C͋7Ao} (7A@HmK 7AB0I,:47AHC%/fkVq7Ai@joʂ7AӳuxȌ7A@0WV_C͋7Ao`Ϣ6AqV*q6A~{ < 6[6AqVϢ6A@*AeUs6A@m~6A@ Zp56A~{*q6A-vqïˣ6A"zu=6A@ f7< 6[6AqVpaP7Ah*U7Ac t~R7A VlQ7AXwiqjQ7AwW\~ԺHP7A8GaP7A?j,3w Q7A!OU< T7Ach*U7A 0UDS7A@w+.9cS7A'dt~R7A@v~݀6ANVOc6A܀E!TS6A>c>ω6Aj yG]6A@*1fb-6A@.q(Ƌ6A HM{6A~r;\6A@˜ؑ!>6A4<b9y6APLB6A@mZA6A<2/O 76AjN{ɔs6AJq6AhiB6Aڏ6A@ȩcn$FeL6A0'`=lO6A&ل -c6A.~9":m6A܀ת6AД]90}l6Asv(6A@ ]Ӓ=w6ABj^6A Z]'Q6A4WOc6AV k;> ,6ADW6A'-HE6AB'` 6Av[QxG6ApjzӐ6A[Oؘ6A@IUxU6AI^68R_x6A̻do6Ax5OB6AZfJP~za36A$f6A9s,'6Aӈ:6ABiLeIȋ6A@+W҉6ANVĩĈ6Aa`Erۿ6A@OHܢNp檅6A#8,i6AlmR f 16Aȵ}c 6A iLTO:] 6A.~<ֿ@6A,+.6A* d5Q6A@@z56AN;QlN6A EE6A f6AE Ըv~݀6A ))6A?|+&:؃6A:7xIj6A Smv6AxaY(_s6Ay3D|v76A@9 6AoPˁk6Ar\r;`6Ao!TS6A>`j@h6A@m6A@JQk j@h6A#n kܟ+l6A@JQkvm6A12m6A@nwNm6A1+rl6A@ k6A|,E;k6A!j@h6A#n kPƋޠ8A%1)ヤ8Ay^>$ԣ8A%1)R8A8Gqhb8A@Ƌޠ8A jrjH8Ay^>ヤ8Aꭱ$ԣ8A%1)Pf Aܓ7At7APVt7AtX7A@E*d7AUqf Aܓ7A߹j7APV*9"ї7A+A*t7AhUD7AD HȔH7A+u {OpH7AD UD7AT̴sE7A\z\%0G7A+u3jKH7A@HȔH7A@^N2$8>G7A@=ƢKR#G7A{4S:H7Aj{OpH7AD n˛08A@ A2WhB8AT̀v=ݼ?8A~.b=8A@ A2<8A}$&M\);8A@pL:8A.o ):8A52Q38A2.!)]08Aon˛08A@DZVNOxY48A@jZ88A@}u~e:8A{|͕;8AG8G98A 7Ջ98A)Ž ;8AXG 7>8A3SrTܻ>8AY$Ԅa.I@8AT̀vi@A8A}|)S@8AQC@8AךUUWhB8A|}@8A\J=ݼ?8A~.XI2z6AGGbS^6A@4p38v6A?)ES5dn6AGGbI2z6A+X&[t P6A!軒x6A8xcS^w6AyʡU{x6AIw_l:z6A2Uan$z6AƑ0Zs_Lz6A B4kDw6AOS;d/Zu6A@E*,V0t6A@?uCwt6A/^u6A@N䥓Ykw6AZw5v#y6A)=x6A@ NTMcu6AcwQ8t6A@hdor6A@* Vq6A@ {/]q6AbÖ}GTr6AL^u6Aۛ3fEgv6AւiHt6AH3HAҔu6A@EyNҀ]u6A%r[p?2u6A@~S:h ~6Ajϭfy'}6ATJI|6A,uǑ`vXMM7AeTUv 7A| ꆩ7AeT( ԩ7A8uvXMM7A|`YZQNϾ7AGE^qة7A|Uv 7A i@'7A@[@ 7AaJXꆩ7AeT^예8AG*318A[=pr8ATU!*8Ab{8Ak{Ya8A?_^예8Aq G˚K28AoM Dkɛ8A;7?08Aʪc&nz8AG6CCZ˟8A[=pq88A3Cҟ8Ac,7{Q8AOA{E1 8A+*318A۫8'w8A8Ơ8A-scKH8A \<-:8AGX;8Ar`=ކ}8AIPr8A`" 8A@ w-ŵ8A@C%‰ :8A@ w-yR3r8A@B/,s8A@M" 8A,`ūkX8A@C%‰̲ph8AUFŵ8A i&u8A:8A@ w-PG/=9AgH$9Ā8Aq d8AZz5W,8AFaWDm8A.pޝӤ8A;Ř>`AS7A ?LeY7AæŲ LeY7Ari%W7AӪCU7AG'93w~U7A1L?T7A ?AS7A!hadS7A@ZcnBV7AæŲLeY7Ari%xXSY8A|k>18AC XSY8A@;$8Av8Aw`Bt8AC18A|)obiN8A$ɥ#i;8A(y}Z8A8YD: 8AyrOX8A/tKg8A|k>XSY8A@;$H6J5A@E*1|U05A@瀤o5Ow5A@E*6J5A}łIS5A)r^'5A@瀤o1|U05As5Ow5A@E*XSF8Afmix]8Av1b-A8AQx]8A@[]nRZP8Afmi/D8A ^@JB 8A3^SF8Ao)@H8Av1b-A8AQx=[DJ8Ai!1G(V8A~\9 Ř-(HU8AXD*1G(V8A^ YUT8A.2w5:Q8Ai!_"N8AE^=[DJ8At@1gsP8A@bL8AS;d2wM8AV65zO8A?ok9R8A~\9Ř-(HU8AXD*P~ҹ"7A@uS)= 7AmP/gt7AzUض_7Ay!vt8o7A@8l\7AmfчP^z7AW($OL 7A@|XBd6A` 6AmAT1ɰ6A`|k6A&E6Aڍчm6A@yžBd6A%7Y[ 6A }ų6AmATL`6AJ kĀƲ6Ay)g6A@ 6APߢC76Az)7 6A@1Q6A@F1ɰ6A`XݱG8A2&u8APz Ao8A2&uw8&8AT$n1 d8AL:J0ݱG8AMt8APz Fz8A3nI8A1Ao8A2&ub$8A@]ݟ?)8A@ D$l aa(8A@]l\)'8Aï5T3T(8Aq*V}'8A@a; 0a&8A@6=FZn%8A@3Cb$8A@D_&%8Az0(8A@ D$l(8A #eݟ?)8A@p*=7)8A(Saa(8A@]PS?8A|<[8A+ +6k8A|%8A S?8AsoU@8A+ +t8AH<[8A`Z`6k8A|bq"6A&zYztY6A##E!96A&j7q`!fXH6AWl<{>6A##EC6AR X׫56A(wrLB6Aɖ_=6At߼uztY6A Ŏn$6AA+26A@Qu6A@V)6AA?s:6AKdΞ16ALGl-J6Aw'HÝ6A?ߴt6A46A@*)rRCT6A&zYbq"6A3)P |(N6A| A!96A&j7q`HXE˝8A@QP H8A2P=k8A@QP )g8AuXE˝8Ar*W2 S8A2PH8A=k8A@QP P U7A@򗐢weqn7AcZPCm7AW;)dp`n7A4"븒(m7A@5xo7Aavqo7A9Zwüp7A@B$r7Av6-us7A&qLyZc}7A@տf~}7A8}y7A: bjbx7A7~Ɂ+w7A@*,Tw7A@u`OMFGz7A#> rDZj|7AM^LyZc}7A@տ6AR jp 6A7N?>6AR jp6A@tEee6A'p' S6AX;!6A@H@Cl6A#;L6A& ƅA4`6A@$ɿ8?6A7NUi6A@`6AgF 6ATa B 6A-!Jm 6Aʕlx6AWؔ?>6AR jp0iTǥ7A@O].Z-1T7A@c&ۊq 7A@O].Zz%37AvOH 7AΉv+(7A M0iTǥ7A83ȿ'7AHo[7Az?S(7A@c&ۊ%Ut7A@i7AZrج$x⫭7Af--1T7A9ռƭ7AaXh *F17AU'q 7A@O].Z `N?J5Ay0bB5A-4 MtT5Ay0@c5AvvA( N?J5Ap X5A-4Q5AEAY45A&Gp85AX/ObB5A@}F!MtT5Ay0 *Wr4A` e7ET5ACq[py4A)sK?4A@q]+4Av4A`Y;4A;pӱ*E65AB7Pl5A`~Dea5Ao3AԔU85A`@La 5ANJDh5A :o_5A/bE?KX-5AL>-5Ak>`[n@5A`reV5AgMF5A@7gK5A@s1¹*O5A 5AKHd[95A!up"5A oH*[+5A@͓ЏoAO5A PKafDN5ANbVN5A*Jc xN5A`[ca{?N5A`}UzdZHhM5A8e|aM5A fe" M5A Oe,M5A` eL5AbeA1K`L5AreF=K5A;4dK5A/çdT)TK5A/dRK5AJrc7iJ5A,6ubkJ5Aӏ^`(I5AР^*~ÒI5AG]NT@G5ApHmF5A8BCR4OE5A >>ij,E5A2~85c_D5A`m3.tKC5A`j13iC5A .`cC5A B,bqB5A@C*enB5Adơ*N]B5A`^J)RکA5A`{.(h{ A5A@mp(J@5AmB'~@5AkTM'X ֜?5A /&<?5A`APgo%u_,x>5A ]$[>5A v#:8=5A`<9#!T;h<5AG si<5A`)X`;5A<|uf;5Aoy{:5A@/mE=:5A ͉EUą95Az4"B85AB3!B}75A f1#,>65Aw#1z65A@l_$@~s55A Z[%445AGN%35A@l%z&.25A`%-'D~Y25A@tܱ!&^715A(S&&خ15A Q&c05A5'g@05A "'7q L05Ac'@/5A8h&2I/5A`#&L.5A`Q%->F.5A@ !$#@-5A aU!*m,5AuI 4þ+5AԕQv0*5A*l=w&P8*5A>׌)5A@9̗(5A6(5A t$V'5A@^s6#'5AoV.&5Aj&Zr&5A@85A@+H 5A'~ 5AJKOBK5A=FzoJ 5A@le] 5APC|<K 5AUk 5A@/%+h 5Aߘ 5A@/: 5A`rRa@ 5AE^h 5AAx=l 5A]5A+x@5A@MNo 5A[]R`5A`2$)'5A`ksa5A ݢ}Mg5A`i_{V5A!ayfEVH5AlMwHA5A@eu@m|05Ahwbr/#5A@'eįpv5A@LOn*)5ATkP<25A`jݢ5A/ mim5A_g +O//5A`.J"e5A NeR5A`~McLJ5Aƨbxc5AnkaN;~5A!n`d5A#Gp_t5Aq>Z?"m5AvVJJ4A`Uy34ANiSo%4A`kdgM.J4ACPiKZd4A4^G[-4AHBB. &4A@tH14A 42K< u`L4A`7õO4A@14A .=+(;4A}i%`4A~9"vT4AxWZU|4A`2[t.I4Ab1 q#4A 3,e64A9 Qo4A`?zo\4A N<u 4A`#^*n fr4A W94A ):C-CD4A@L3=d4ApzNw%4A{t4A n|;T\4A^(04AH4A@حu4A-1Ed4A+Զ$|D4Aܲ)'4Aݮ( 4A@Ȏު8k:4A nP4A@S ;EM4A{B (P\*4A@q≔q4Ad:4A~(Wr4A  zt4AZc [4Asa4AlJ*vk4Ap {q&N4Ayg4A~7.crr@f'4ACq[py4A)sG35J5A34N6a.K5A`eGC72XeK5AaZwNqIL5A}Z_PxN5Aܾ\7M5A8)ߟIL5A &3G35J5A34N6 P7AvnD;7AB0I6AKm%IOH6A N}C6A?EMM3F6A gQ yF6AD,uL&':F6Az52hR*G6A*pPMH6A&P*H6AdOkwfH6AƿlJI6A!kK6ATsJ6A@`yBM>0I6AKm%`K7Ae樳7A%?t \&7A%?tp#?*7ARitk p7A樳7Aeu7A@}\ ê7A4K7AE7`/kЖɩ7A;v\&7A%?tG{Z8A@I%V{c8A@Yv }5`8A@I%2"y]8Aa,,)m[8A@q Z8A@G{Z8Aݣ784[8AZe@̹[8A@Yv]8AO}ߴ݇`8ABb8AkC9V{c8A@"gLc8Amk! }5`8A@I%X}!58A,Դg98AX<V98A֯N4.>78A'֮;Ɂ58A,}!58A#;1ן58A-88AX<Դg98A (ۭV98A֯N  ~6AM% v!6A@e4}Y {6A \~c 6A@e4}n\6AW;O6Axzi36A@NòNń6A?s66A( Yn;6A]*2:}B6A+4VOR6Afg>6AR(.JG6A Y"gahq6A8C|}_66Aq%m6AZlֈ4ݏ6AG` 6A1y!gaTgd6Av]lP6A+WM[E]֎6A w g{&6A#yh6APh|gZ6A@+z`W+O6A@'ăx6An?8X6AI6A7']+܇Γ6A;pl!6AFq%0c:6A@SWtOu6A_Bg#ז6A@BBYVB՗6A@3Mb(6A@xw Y6A@[n/M.6A_(F6Aw"T%l<V6A@N n7J_ܓ6A@qg{Dpzc6A]ۗ6A@*!6A@UK6A 6Ap|Q%1{A6AHT,6A{4Q*ǔHQ6A gE˄ 6AM% vPk@906A`^14r1*+6AY~6A $dgFV_6A uޘ=bC6Api"O06A< (_6A%_fT.6Ay,|6Ae $:6A<k.lr6A>jVL𧻓6A@=56A4a)"6A+OR֧.6A?wН6A|@S`6A܏*86A64Dp6AK:&ە6AfH9\6AEOTVnX6AN\oY6A/J7Ly6Aw5SbWʈ6A@kmi6APѫ6A@[޼E& 6A8bfP'Ì6AظjkLhӌ6A$Mk )zzzf6A Bf6A@JGklk6A(!6L6AzłءZ6AeRyZ46A@]2._oe6AB?i6AKw+贘)~6A@>!  ~6A2O {6A \~XD$+8Aj9y^*7/8A6& $.8Aj9y^D$+8Au}$:,+8Ar!ɩs+8A6x+9-8AD/8AigW *7/8A?:M& $.8Aj9y^:P6A2)t6AG;aA6AG;N6Aox6A r?6AuE/_ 6Apg6Asu)^K6Amt6Afm 6A{|y6A\ 06q6AZ6\{=6Am}*FaI6A@D~+H-6A3~Bs6A@F콋뻋6A434ci 6A2)I6Af>ǎFda6AИm:P6A@d!AGev@6A*qs596A@P(N[„6A ]S=6A%rdv6AwC6A#6 6A&~.nqi{6A_TF3++6A&l2 6A@M߬aA6AG;*8A#Y<ʲX8AD008A#Y6{}5AHB$]}5A@^~E1}5A;{|5A4M||5AisQj||5A;pT|5AEMe!&|5AIsMsƨ{5A@NGW{5A_9J{5ATzVc{5Ag=^+:{5A>*Az5Ac9ez5AlPez5A,OŠ7lz5AĊoN+Fz5Ajz5AH"PHy5A@%@Sy5A@pD Ēy5AC't|y5Ab.Cy5A@I!tޑy5A1g`cvx5A`Hf>x5A6Ts'zx5A ,{B'bk.;x5AͮlGbcx5A}^I'ew5A`Pw5Aj-0͆tw5A9 yDw5AةYw5A@r[7lɯv5A@9j3v5A4ڤZWv5A<|v5A9閨KVv5A@8v5A`WLe.uu5A45֧9u5A~ pu5A`~/*D.u5A ]aQ#HVt5AuX\ZcP t5A=>6S2mt5AkNHj܁Fnh5A[Z4h5A`C/v3hZg5Aձ,Ѩg5A@|F635{g5A`:g5AV6 g5A$Z| jf5A_hjUf5AXvlf5A&^56_;f5A/uQeR f5A`ͼde5Aoe5A\me5APce5AO9cv>e5AU[%e5A``}nd5A !Aίnd5A[i)d5A`]jf d5A`zFMd5A@ZB.Hd5Axћgd5Ai8Cd5Ay=Pd5A4Ǚd5A`VH^d5A ,d#,@d5A HӍv|d5A`p`d5AK\{9 e5A; VV!e5A zc ϡHe5A" bϹre5A(q ؔe5Aq Ie5A(O ׳e5A>t:Uf5AEUm&g,f5A'H"b;f5AE#pKf5A1[f5Aq rD|gf5Au@sf5A6f5Airr4f5Aؼ&f5A`#e?] zf5A`ov1f5A Zg5A kBEFg5A@~ ~Wlg5A 6٭$"crog5A #cg5Am$%Ig5ASx'( ,h5A (5Mh5A`CjO*jkWh5A>*=_h5A _++mh5Aҡ-rh5AآH/,6h5A&b61^$h5A2{2 h5A^n6իh5A5j8_Lh5A 9^,Ci5A@gq;M0i5A<8\i5A #0N>翥i5A+VE?'.䥥i5Ap/xp@2i5A( A =j5A3~CًcKj5AyDd[lj5AiE駐j5AƻABFo# k5A JfG*Xk5A\6Hb[k5A@0H쒞k5A BI9Bl5AHIcQl5AA|KJxl5A;JT m5A`@ ;KoѸFm5A૯hK[zm5A L@:m5AmM[gtm5A {oRNygn5A`yNBOrP[In5AAKA_Pcn5A GQ&n5A`sVRiRCUn5AXSn5A Z.Tϛn5AfSu{VZ>;n5AF#X-p5Al]h9QC q5A5omq5A`wsrr5Ai+a|or5A@Sx=DЪq5Aqt[ q5AR.}nlVq5A2(r5A_XpS r5AaI7D7-s5A`zIf_s5A +FC0s5A +]s5A .f^ s5AE$Ss5A :st5AEt2xBt5A.PWE1t5A |а>t5AY<Mt5Aӡ XYt5AT!0 VH$ dt5A TdSggt5A`M!Irjt5A@~&Lkt5Asapct5AQ>Nt5A/riF+t5A+Ǡvs5Aa`Sإs5A(4"ov_s5A%7Ts5A@-)[r5A`-?Hr5A. Jr5A@sf2\r5AT@51#q5A`OXt9k>Uq5A4G>p5A@j2:Bl˿Qp5A7FY _p5A 0s>GK?Dp5A@hH|6]p5A6JJp5A@(dNSo5AbxQ;wo5A@T0o5AFXE?8n5A@`>\$n5A('^5hn5A m_%!n5AY`^m5AXa|m5A@1xbIm5AWc׺l5A@wsd׵fk5AT։hi5Abt9CoH^+g5A ٧tŮRe5A઩yKDt8c5A`g~ >b5A 8ʀ˶b5A贁Pb5A`̂\a5A ,mR"wa5A@6sṩ.a5A`MdW`5A`Vsqs`5ALs`5Avԑq`5AJ`5A e@`5A`=@mޚ5O_5A<t _5A!eʠ^p>n_5A~E!.ƙG_5AB6_5A^)Im^5AI^5A ;IIÖ^5A sY#t^5AsSqN^5A b3^5AdC]5A`"}]}znV]5A@-Nz \5A Rc?x"qڅ\5A u R7\5A@\_s [5A i{qA<[5Ans(mZ5AgClMmZ5A`bjF#Y5AbZQgfY5A`ek"Y5AKb@޴X5AN҄A`eFX5A` @7^SsjW5AXhO\5\QxbW5A1Z#V5A`,%YMwl5A@8f291Xh5A~`1K^˒7f5Aଁ6JGf5A`|> (d5A_W%ŕc5AjDb5A` Rc5ANt j;jLc5Anwepa5A@ў˟smb5AU d]5A`BK'2U5A6ދT5Aw?16?R5A`]h>P5A@1W uN5A E+M5Ay[SN5A`4]_Q+L5A?kF5AA;@5A n :=:5A`;-65A qW*)&y25AeEb/G>/5AEP1Be+.5A c1~kP&5A`͵=7+M5A@A25A Lu_5A@p2,SH05A@C)$o_5A/bE?Kh5A :2amh5A ZpFa ji5A`ssfuk5A@,+v#Rp5A j~Vo5A`$piPm5A \ SQIh5A`tF2amh5A ZpF_#[n5A@"u \l5Af΋Bl5A-" Ӓp5AZB(kp5ADL_#[n5A@%ַb6A@#ziXƳ6AY^`iXƳ6AgcTL|6A+8Zo6[o 6A@#z[/46A&hd4Dh`6A@l c6A@}(sS6V"6A՗Bַb6AB`%6A@AS|6A@HIՒ x6A) OPX6A@"4# 6AGI6A`_.QP6AY^`7Y6A3.iXƳ6Agc&p>|37Auax947AR S7Auaxq,7A:c*>|37A@J@ R׵ h7A y7A}ɴ`-Y7A@9hgBi57AR947A@*Y$\d%7ANd<y)U7A@ S7Auax'p 7A:P֜7A/lZj ֜7A177AS97AZY yx7A:P1P7A ۱5d7A?Y%T7A忩 7Av]j A-7A Wf[7A/lZj֜7A17(X֜7AxPXS[%7A5l֜7A17]=g 7AMn3y#7AtxzJ$7A5lPXS[%7A 8ʵvFe%7Au##7Ax֜7A17)Pn8A@E/7}zH]t8A@jf{1n8A@E/7n8A8qMn8Asgلss8A@jf}zH]t8A>$iN*t8Ar{1n8A@E/7*p| 6A«;;S*s6A@1g @6A«;;j6Af[!-s 6A^=0 6A{.ұ6AR@2| 6AèD\F6A@1gD>X6AAm7IU6A@u&S*s6A@˫h@6A«;;+6Ҵc\18A@n-}|"88AC=k68A@ (-D58A@n-l)48AOBcZB7358Aߡ%*548AYqɚ28A&Ik.j18A$Ud6Ҵc\18A@ݩ#=728AC=. 28Au6A0F6A Q/6A@ u14d6A:;C~B6A#GC6A@ rj鸏6AڿfhUK6AԸWf<0Q6Aچ(6A6A`26A*:6A}jb6Al}]T_,P6Ah1eYB6A<&r@铱6A@ekM8>F6A,EX+F6A7>q6A@g6A@Y9G6A@6nf-y6A@߱ZW[m6ArsVU6A,uptNWE6A@3nj|/M6AtH2WXA6A ϑ6A9؊X+6AM*|D6AjZN6AP+=6A@~Jj /6AER(6AIĎJ|AB6A@z!5d%a6A@S!?-6A I6Af>ǎ4ci 6A2)뻋6A43s6A@F콋.P17k<7Av<1nw7A@5'o*97Av<N7A_17k<7A@;87A@5'oZ#7A1nw7A@f8*97Av</Pn8f*7A=/L18{.7A]z%IPh.7A@bni+7A=/ 9&*7A&:n8f*7A-*-ӳ+7A]z%L18{.7A@ IPh.7A@bn0hs{G6A@t%xgs6Au E iʭ6A@{ws{G6A@ߚeeL6Au E!X6A F 6A@x&ags6Agn.HC16A@t%xa6A߈ebO 6AX;`iʭ6A@{w1 7v7A ;)̅7AejY `H}7A@pfi) }7Ak (~7A@*#g7AejYm$O7AL/УM;7AAW3Aرx7A0*dLm7AFx27A޻!7A!sqa΁7A2 7A@!t9x7Atily;)̅7A@Ije\7A@Vs_F7A  ^ӂ7A@0D|v}7A@J=FC5|7A ;{7Ay-Oix7A 7v7AQޑ.vy}y7A@L0n)&y7A@RӮJb4z7Au\?&.x{7Az1<}7A:|7Altlt;}7A Q3y}7A@re!d|7AAvK`H}7A@pfi)2P+]t8AG%%ݮw8AIvTC8AG%%?8A:+]t8ATAΙ8AIvݮw8A{֬q~8A[TC8AG%%3ho^g8ApIN,8Af_ 92O8A/ vk8ApIc7ջ8A.8AHuÎo^g8A6rL{"-8A:"}O8Af_yġ8AqdN,8AEIv92O8A/ v4H7]q 8AN<œz t8A;Tœz t8A Y8AN7A#P2ٜ?7A Zr>7A@9IS#' ;7A6pö6Ae%Cz+0Y6A@> ö6Aa/6A~LUjEX6AL*_I6A@>+0Y6Ap?6[!6A:Bo?6AN[bJ[446A˜sAN6AD T uf]6Ae%Czö6Aa7lG5A@4f5AsýlG5Ak4q  N5Aap$5Asý =5A#25A`hn5A`I״{-5Ae <5AKc{ep5A"AF5A ɰ"5AHMO ?5A0j7~5A$W:"5A ?| 5Ak8$QP5A A"+͹5A-= Zğ5A(y4f5A +[%]5A@'5AߩY}Td,ʞ5A އn!˴5AYN|5A8bm~5AZWxX1o5AP3-[5Ag\J95A >^|5ALDe5A`J>tӝ5A #@,5AX"u̓o5Ayu3?|5A%w\5A"O&5A5A,~hW&5AsD,{|Pґ5A _{O5A#yJ؜5Aڳpw5Api7uJ[45AUfsѠ"5AqiNq k{5Aʬ|o KYh5A?mC4i[5AkrG5Aib05AigF1!5A6e>U5A}d4ٛ5A@ibҹ5A`0ani5A`f_w,Ll5A`$N^-$YH5A]Tl$5A>g[X-5A`Z&d5A?BYߚ5A CX ;$"Ϛ5A@jW'$5A$yVunj5A`QF{Tض>5AcRe5AE2Q5A(O% ~5A8NI5A@oLK5A+JtO5AZ7IzB5A.PGʄ5AHwEU봚5A DvG5AU\eBJ5ARt@9]Ś5Ae>Lhʚ5A^$= .Қ5A@.f;ٚ5A p9,UK5AhM8%5Aq{x6g-t5A1 5LE5A3s}`5A`x1GMB5AwBF0E(Nۚ5A+׏y/Қ5A@Z0:.ɚ5AnA-ri5Aj5,LZ]5A+5AI)}Pؠ5A =(dͱ5A6'#Ȓ5A@.ݾc&UVB5Apz$X25A@H#\ӆ5A`4!Ӆ5A\ˆ +y׆5AIxˑ 5AqLE̍5A0י5A a^);5A`#Sc65Av0$ r5A Kp] w5A5%.h5ACRuP5Agq.X;5A/+t 5A@hE5A <'7S5A@6 Tș5Ad3X L塙5A@_ n5A ɝL "A&5A( Ch5A9s cfИ5A# 6;5A@zfN<5A5A{~-2H5AVMvXEთ5A`,U(R5AՀu5A@6rO9ʠ5A`#M%,5APeFM~5A_NMZ5A&\65AWܙvq=j5AhGFjG5AXٮo˕5AJ#E5AЈx:a5Au/9T5A`{=Ki}5A@3HE:Op5Aif,H^5A@g])fO5AB6ZA5A-")05A@Z[Y5AXT$* 5ACd p5A %b aּ5A2ʊ&͔5AVeC\v5AMO&e5A ~}q5A)DE,hM5A`1Q~=75A?@D(5A+VP0l5A >ؓ5A`I h$5Af5A zbd5A@ڶ"%15Al; &5A+M췕5A K_f<,5A@CH۱JO5A k{;$5A:8h5A.ȡwSˑ5A:qK)m5A`9O\vs5A|c^?@5A PIf{!5A@f6`hX5Ae 5AX-=6yn5A@'+05AV?d5Al_*I5A`#r%l5A9)M}7N(5A`F%5Az!(} 5A4>L~Qm5ACBp !"5AL㫺5A!\eـ5Aë']5A@cLd[OM5A2Bvڌ5A } 5AWO665A_rHV5A ىd$ 5A@(4g 5A@|3v1̋5A;"a+ﰋ5A@O) V頋5All5ABYN5AP+}}&5A8N5A !q5A7>#ى5A˸x5Aׁk S5A@ZNm5Afz^T5A+.5A ?x5Aci<mn5ALQ؁5A`uNPZ5A@S(]pW5A`4 lG5Ak4q 8P4ܶ6AΝλ6A@Il\6AU6A@4ܶ6A@Ili=6A%qλ6AiZ\66AΝ\6A9`i"8APGBq[ 8AQ[^ Gl>8A/5j G8APGBqi"8A?x3؇C8A Y8AQ[^8A1[ 8AB>8AAVGl>8A/5j:pn1Ns6ADZ]o-6AfŒ ]o-6A7CYg6ADZ{6Asx1n1Ns6AL~6AfŒ4Fjޭ6AP8HJs6A~*6A@ks 6AC_xڮ6A@҈%]o-6A7C;ul7A@mv\G%7AWof?7AWoI7AEZr}\7A@ `lUZĴ7AxT+{ 7ALm8("7ALVMv\G%7A@Zswdªӯ$7A@. o#7A@mIIl7A){Jk3akT7A@vW/E7AS(>A7A7ul7A@Yf?7AWo<Xoj6Ao 6AvTZ6AoCV,l6A޶oj6Abnx6AR8r~.6Avx6A@h ! 6A*ETZ6Ao=xâ6A{T6Am}} â6A@L:pH66A@2u6AiٞF6A"dn`6Am}}T6Aw 96ANvZ6A6g@K)6ASBO)ƃw6A{;z6A_â6A@L:p>I[8A Λ{|8A Ȧv8A 88AS28A@rI[8A?Aso8A[48A”n38AYJgnw'8A ȦN8i8A/2?8A@5Λ{|8A)yVm8A@Q)jFR8AqK ;!q8A /P8Ac/88AwOv8A ?`+IVH6A@OC+ Y6A6 }˝X6A6Bi6A@xD+ Y6A ]eQW96A˧<,6A@OC~̷6Aw6A9x+IVH6A@O}˝X6A6@Y @6ARZ~Pj7A g)VW6AY*6AgZxkH6A͂SrPP6AcY @6A x6A g)d |U6A:I& p6A7ӑg6A@e [-0xfi7A@%_Pj7AXղs_7 7ARZ~)6A 8;k6An~VW6AY*AJŤ5A`Sy4Y5A0\S |5Ax9lgs5A;kc5A`SyR5A`w!5Ag.un25A`'kdZ5A@"b ^JŤ5A0\S )5A^)@\ `5A W4Y5A`l 1_i5Ag|5Ax9lBXuaT38A}vn6A&.s^7A~%Z]/7A Ѣ6uz7AkmDl_7A](ϠG,7A'uGQ7A@;ҏCQ7AdP5\w]P7Afv9o7A#>c7A4j se7Ao(7A@Y}Pca7AY[Ίa7A@t?:о7Afe" 7AF*x7A@1267A@Q-{7A~VL_T 7A@0PKx(G7A։ۇ7A@l`wH(7A2%%a).6AقےEQ#6AӸߡ&6AJ([P6AT#nQX3 Gc7A@6]) g7AvlFL/g7A\Ze7A@6]E+ d7Ar؋ 3 Gc7A.;Y/c7AvlF5B3.e7A@~F) g7A@utHL/g7A\RP~'7AYfy.7ANivYfy.7A@Q\rr+7A~'7A`8ɭ'7AQ)cIF+)7ANiv>-.7A!#kYfy.7A@QSXV܌6A@YvV.6A4fh M6A@YvV.7AZNvv/HH7A/y)(yF7AZNvviE7AwPR弢D7A@]U3R"^B7A\rtA7A@_rf@닯2@7Ax ޶OA7A@m~~4:B7AH ݗ$@7A@[8t}@7AbFn]m>7AL1p{[s>7A/y)j?7AFa+׌|A7A@:mNg|C7ARοgDF7A/HH7AGy7b(yF7AZNvvUpP!0X.8A@՚}L68AO ^J48A@՚4ְ938A@8cP 28AR_+}^d<08A@|UM.8AYjP!0X.8A>T!08AOl28A@owd}558A@NR{_}L68ABk^J48A@՚VH8AQ_JuQ}J8A@Xk8AQ_J% M8ACO8Aƞ60yK8A@XkuQ}J8A k+ 8AQ_JWhcj8AV\A#e^o8A@V K Ng҂m8AV\AEJl8A BB̫cj8AaDSk8Apw+F9l8A@xױn8A@V K#e^o8AP~ yeqn8A?@Ɏn8AR-Ng҂m8AV\AX`uT6A@B@sD6A%J @c~6A@J+!6A35#sD6A8 > 6A@B@uT6Aĭ3%a6A%J؎ L6A@iߣJ6AVǖ@c~6A@JYPoX7An"R\7A VV~\7ALLYB[7An"R Z7A@6NoX7A%m[Y7A \7A@*MVV~\7AZmY5A@)T55A !$Z[%]5A@4f5A +"05A.AsŐ6X5APy?W5A-Жϻ5Aiu7L5AOt@^1e5A8I%c[35A a5A`/6 5AoїĞ5A@#d@5A{`؉ɲ5AJQ:>}5AWBO B5A``U=m5A(rWHqO5A@Pyt5A`52d_ec>5Aׁrn8S5A!)zc5A >9\5A@)T5,G5A .rhe05A  5A׈5e5A`w.w#5A >Ο5A` e=5A`WX~t5A5祣f<25A =x45A(7 ץ5A=ƍjBZ5AX,B5Aɝ|zL)5A@RUp(5A kܕ݅5AA065A@f&&5AJX!>O5A`-Ȧ4=5A쀸yl5A Q/kѨ5A_cj5A{~fE55Ad}I%5A`ZZ}ņ5A |Ng5A{bnU5A z5x5A@kxKp5A`^w,Gtv5A`Vu6P35A1tit@K5A'kmsIȘ5A`aWzr;4Ħ5A<j5AYIhV5A@)fn)5AL_eRD5A`1GciH޾5A`1cac:5A`=_k5At]x35Ah:W[?5A`IXT#Y65AyVym75AST"5A\OR5A 59RQ;5A`LP/S5A ZwqNu* 5A'|GL_z*5A,%I BM5AH&F'3f5A@Dr75Au iB75A@5A+f*@5A=*?[w5A3=Hd5Ar:L5APy8~k5A6Ei5A#u4ȵH55A>C3kKZ5A\1ЎX5A^0{5A@~.&/ֺ5A'".Oik5A`m0-=5A],FKu5A`+yMx5A*5A'* %"45A ʢ3)Δ[5Aచ(gy5A;Єr(X5A'C5Apo' 5A'uK5A1[&K5A\A%D5A@'p$-^5A@y:#ηB5A`L" h5A`QNSs! YO5AQAm5A`M2B5AW vV3?5AAiL5A1.HI5AKJh|5AY4=>5A5Aew'5A2-]5A V 5Agcq#5AR`/l;5A=P 5A`i*mR5A{ɷG5Au-X҂5A {t5A(6S{Vh5A$YHX5A Z{,/A5A \25A ^HԞŮ#5AK;5A >&5AP'_h5A wo5A@["}Wx15AYO5A`Tp5A`< |5A@LD[5Ah/Z5A@RaOV5A> }r5A }pŷqa5A5QnR5ALvA5A_ps15A =Uc5A-75AkJ,5Ar35A`"X:#r5Aj'hT5A VaG5AWr&5A@-d͚5Ap OQ 5A'icbt5A@cJW`5AJQMWnP5A`WA2D<5A ,|w+5A~!:c5A`/孠)hA 5A+M^5Aྉ+H5A& =Ǘ5A U5Ane,F5A@\t>}5A[j;9,5A]a,Ē5A2Ob[{5A@#P>7_5A/+ љR5A x$l@5A 'ljgJ35A*ە5b"5ASjyQ 5A@z^ z猪5Al,`^5AhZC5A`p ^I5A`s,@5A`vKIk5A` ^DX5ANR5AG 3sW5A2Wr5Aҿ|5I_5Af M5A@6J>C5AI 95Ah$B[+5A 6""5A slJ5A [(95AR lT;?\5A sϓ]5AJ`J 5A`? 5A f5AtG5A`:T_65A}<#5AAU.5A ;f 85A`(I<%@5A`t[mG5Af˞ a:N5AsD7ɥU5A@nw L\5A'Tc5A`E 1bri5AVfk5A@^oq>o5A|fr5A$qv5A@ >^z5A@*QȚ|5A'G+p 5A="{5AglYmyb5A>H5AJ~45A 4@E5A9z<5AM&P5A#arM.45A J~%-~5A?!Jgöy5A@5gSgv5Az`Ғq5A=vsBk5A@9bc5A ?%\5A5WX5A*)rT5A@arx}L5A`|C5AGe65A`9lx 5AFjK'+^ 5AzR=5AD>5A}K75A`yQV5A`a=5AMo5Au D5AH]x{5A gvtc5A`ՙpy-W5Aچ,5A䛘ES05A >!5AM5Aib/5A i 8?5A@l5A qؽ5A'H<ͽ5A`TֱbѺ5Ac=%5A`L5A.۰_֐ޗ5AvbF!5A"]AS/e~5Auܯ}Ou5A <Ik5A@S.U]5AۮL`T5Aa"IyTH5A34}2=5A@S]q҂z25A@;~D`A*5A`߲=D5A4ݬ_U5A@kK 5A`?";5AӱGu]$5A hKD;5A` 'kA5AŠH;39׼5A`7#,ȼ5A)y5A,XEf5A`ݧܧe 5AࣞX<5A`(]i&5A^3UV;5A~3P5A`J5AӀ $5A4d)25A6|Cld 45Ap!{O"5A@'e?5A!1tr ۓ5A 4jޟaА5A`w ,5A`ʨuއ5A 9:~5AUdd(^su5A,ם?k5A@UrKr~a5A@$,ST5A'CΜJ5A`>5AӵLN45A)o+oh@'5A ˪m0fb5A9xGNU5A.&5A`g.[׻5A!4Ļ5A]Z)5A \u %5A0*5A~7+{&s5A:HdȕQf5A`>YbV5A:K5A-`-K@5A՞]4R65A4? m.@&5A *3 r5A`̅r. 5Ajwu6H5A`6Iapl5AIPVq޺5A  Ǻ5A7ת5A15Ad#5A鮺#5A 7#9y5Aj%"աh5A|c54[5A@ xR5A AŠg.G5A` D{g55A-;i 5AAP~5AsQ$5A5A`Y΢觫i5A6,չ5A@bozRŹ5A@Uv5AZ:\p55A K75A`SnA˺&5A4ws5AͥC1{5A`n`Ak5A`ݦmD^5ArL0]7F5A \4FqJ75A0|9-5A $e %5AO4b3p|5A~H[&5A`jbж5A(%߸5A@#`,C и5A  5A`ݫJv5A+m6_5A ԧ׬5A:Nb$r5AﭭY-"R5AţLL,!35Alή"5A`P!!5A`tP4eA5A`=,&s>5Akկ 45AջȵcT5A@qK<{ҷ5A Nʷ5A60>jٺ5A਻J_Rdd5A`@65A`]wz5A@k7-9V5A )̰p5A?аcnb5ARiU5A )D5Azɯ{35A@$!5AG;5A@L _Q{ 5A@l$55A &%5AW 5AVFN_ֶُ5AJw/Ƕ5AX uB5A,ӀѰ 5A@Z;ǰؒ5A`uΏCr5A@LKF"^5A"zoNP5A.m>5AL"O*25A@|c=O*5AhŦ 5Aw.!5A7^[r5AX?q>5A`q^GQܵ5A H˜_ε5ATϧe+ ĵ5AYHsḵ5AX m5AK*5A ΰ,Cތ5A,Hs}5A9>_m5Az03a5A?.U5AZ`LQI5ANZSA5AM>naj15AQt0 5A CX"u 5AGvE5A u|M5AqiDF5A@OjL2ߴ5AӫUWӴ5A`/Stȴ5A065AR%y5A`r^G5AĒ հ[5A E}5Ae^ n5A@V'PN_5A V.(*O5A8B5A@:K45A_K㎯S'5A@$a05A` *Z  5AҮ AP 5Aʮ,1[5A J( 5A`nEx1_F5A /=9VeG5A H/`\Գ5A %dz5AHۺ㷳5Ao Kr5A`8֭L 5AnkȭV+‰5A`Xí_֨{5A`bUr5A{1rZ5AN.M5A«Z H5A@]s<5Ahs"65A@ߣwx4C+5AWz Η5A *5A-35A>vqi 5A1u5A ?F\5A@sZ{TB5A ~cK (5A}<ʲȺ5A2&KDs5A`V "P`>5A 4=5AOkR)B5Aò5Afo%ס5AS1I`5A`Oٱ8[_5A`eV Ա#%5AzMym`5A``Lˆ5A!`a5AɥgƐlTW5A ծ K5Axun&+5A%C 5A𲏭D5A` m425A@/ ElQ5A!zHL5Aؑ5A D5Au 5A`O\Mz5AyީLF5A50K135Ar`5AV&$5Az}iiȩ5AqYd?5A@b좧'd5A\Bmfᗩ5A[ W~,5A@=~Cʐ5A`n z5A[a<K@~5A@\̥X5A@ve$.765A@ dEH5A`<pU٨5A(%_H5A`Zjg5A*F Ӄ65A؀i55A+,dR5AB3rq6x˧5AAO{ҠHN5A`UƟgDz5A;#\ 5AZq<3t5A@:-أre5At݄9d5A2͆)i5AkBƄ`5AE#.Q5A@ڞj W@5A$g+5A``5AmEhY5AKL`5A@*odBצ5Avոw5A`>fPύO5A 0BHh5A@ˡzڄ5ABgD65AYZґ})}5A f {I5A?5As#[5AIx΁&nŦ5A dۦ5A`ky~n(5AWW]}%5A@zw{!5A f\)zV'x5AxcRs!5A`n}WwϽ25A@1V@uW 5A,t &5A@NW sI4v5A5A`jnjlh5A@Li$s5AphU25Afk~5Aepr5AڸdZ5AVbמ&5A`\Ya,w55A Zp_z;5A z&^[G5A \L5A-ZL5AZuYSE5A`[X$n*75A!VM$5AU 5Ak Uҁ5A"޽T3ä5A=TG5AꎶSÁTx5A S)T5ARy95AṔQ%!5A3Oڳ=5AKN<ϙ5A@yEM6%5A57*L'b֣5AߪJ.&ٛ5A SA8'GŧC{5AsjPEEb5AɫDDTR>5A`2cCBy>5A@lb5Aݘ?_`l5AMG>ޭ~x5A@5;=e\5A;!515A೯d:AdZ5A]8f ;5A`F)?7C"5A'5xV5A3K5A j2@Jߡ5A0Uɡ5A2"/g5AV-YС5A^Ix+Uۋ5A )]#{5A(h5AY4& IvZ5AM%Ӹ$G5A@+[$~t,5A@m"6n 5A`XŦ!7ۨ5A ?z? S6Ԡ5A 5A Fq5AH5APM.\J;y5A즺l5Ae\5A{ZЉ䢒5A`%U9k5AB|x?5A`y5ACN@ڞ5AhZ}? 5X5A`Љq W55A, 8JY5A@(>NWf?:5A.E(V4#5A{շ 5A hsa~5A!B>5AyY㟄ݝ5A-ѝ5A[@zǝ5Af⚲5AIo8ot5A ]_5A@eR7^5AA^05A\-㝝5Af:.5Aj6U5A@'mY5A Uy5A`5A@w/OǫS5A@[+@`5A@47.Me5A@kL\'b5AM_Й_5A`U5AoJ5A 55A`:XY5AxP5A0×[%]5A@l5AyB&A5A<(QhP5A^Ydn5 u5A@nqtG9Nߧ5ASY??5A h`l5Ay^;5AD3DV5Av鬙ˆߺD5A k/qX 5A4tTIj5A hH&nbi15A1\@a{hЄ05AqHpl5A` &]^;5AD3~Hs5A <0>õ5Ac !zeAm5A >8܊_5A&G9qB5A@0#[~^15A@ʊmH75A@,>* Ѣ5AdJp] ~5A` |+lH5A0B5AT'ɚI 5AB[[5A`Ӿ-HJ$5A@i,b5Am+XAB5A7q, ;L#5AV `3P/r5A]5A`A=cN5AH5A`25AMI 5AN`Km5A O/5A@xL5AztƷ&Yƿ5A{};F5AHm~Hs5A <0[Plu?8A"OLJE8A7cOFiI!A8A"OLJlu?8A[t<{EJ?8Arlqw3A8AwYs NE8A7cOE8Asl]FiI!A8A"OLJ\P*B6AShG6AlΆ<mOE6AlΆ<CeF6AIaShG6A 1h{GgC6A*B6A@llǯ,C6A`JFemOE6AlΆ<]P\K~R77A6t;NwERW<7As =3A;7A6t;O:7A.,K}287A ~ \K~R77As 2:7AsUDNwERW<7A@t m=3A;7A6t;^Px` +7Aa*V/7A@\jvC&7A@\j*V/7A@t=*rC7A2^MJ7A1_{:7A$i|`x` +7AavC&7A@\j_P6~4E8A<ϚGJ8An;nI8ADr::F8A<6~4E8A@f^BrE8ACG8An;ϚGJ8AxnI8AD`Px` +7A`JVy7A1_{:7A$i|`MJ7A1_'7AQ|Vy7AţBz7A`Jx` +7Aa{:7A$i|`aXZ\8AC(`8AE^4b]8ACZ\8AmY f۱]8A?OO!F)2 }`8AE^4(`8A>szD4A>_8A@XR[!?_8A_lb]8ACb`[8Ae-VS8AQ9 'w8Aal8Ae-Kڍv8AWy [8Ar !8Axc $F^8AQ9VS8A@MYLs8Aߺb'w8Aac`[Gb6A൰ P.g6A@) \-e6A൰  ob6Aur7`[Gb6A8M׍c6AW$? c6A H:ud6A@)af6ABP.g6A6\-e6A൰ defI6A vrN46A p] N46A vrZ`/6A``lefI6A [NA<6A+,APn~6A "][u;s6A @^K6AHR5"6AzOx[ 56AʋAl*g6A3MEE6At"${VV 6A B^XI~~6A p] R򩏼6A`{ @6ANT'ਾ6A`KK`3H6AXJPN46A vreP H8A@mNֶcӒN8A@ dly!I8A@mNֶc H8A5rP(Z㕣ڎK8Ax?UM8A@ dӒN8A@_X*7L8A(g>ly!I8A@mNֶcfͩ-7AFO1ƭ7A%q1ƭ7AHԥikW7AFO"Y7A!=m7A@ zg7A}-Rh7A@DMz7A@^Lͩ-7A@mb!>W7AmX=J:]7A%d)7Azbӌ ?m_7Akys t7A%q1ƭ7AHԥgzP!P6A@Jy|-[6A9E9:W6A@Jy|zU6AZu[6"U6AȆ1k,0C U6A&Z 1DT6A@UVAlR6AQ]oP Q6A e1VrzP!P6ApFga,Q6Ap:Z/SQ6A8XtF fpR6ALU=HwQ6A`258-@EQ6A@E U6A>ہTuW6A9E@3!:X6A [= W6A0^ h{U6A$LPU6A`Ȕ+Z|X6AL=57ÂS"?I7AKn:C@7AKnǹB7A2F7AsF71F7Aqc͍4F7A@19G7AܵH9H7A@L"?I7AX}H5H7ÂS/6G7A@8KJXD7AXٖLp^C7A1$?+B7A2t f ?7A @^>7A@nw?7A@SU:C@7AKnjXY娅8A3_E8A@@iT 48Aa!Am㣆8A3_Y娅8A@M~R=8A@:D3"ç8A@%E8A@@i|S8A@޴x<T 48Aa!AkX6AfvȊJqݱ6A-Dcв]6AfvȊӑ6ATA6AQ 6A-Dc{FD@6A`iCKehE6A$"0lJqݱ6AuWв]6AfvȊldir6A@t̬6A@ |Br D,W6A@tul6AWı J6A?D6A]Pw6A Tp-6A?dir6A@g݀6AU|pL6A@ |BrZ6ADŽRC6ACӊ̬6A KD,W6A@tmgc7A@]^n7Am0DJDe7A@]Ahc7Agc7ADF'A3Yd7A0]vw{f7Aľ~7?e7A@kw~f7Aj8`N1g7Am0Dy;}qj7AW@bkn7A1u^n7A@ j7AISdh7A46.e"/g7A?fJDe7A@]nz~N8A@'oLZ8AT)Y`V8A/ F;S8AyaT]R8AkzQ8AL{ e|O8A@'z~N8Amg1 uO8A&b#^TO8A[0(Q8AQjXq|*T8A@*^s~[@W8Ay]}INY8AT)YoLZ8A@9CjҟeW8A@6cJg}W8Ahm`V8A/ FoPnJ7A>/7A^E2Q7A1Y*N7A>/eS97A$nJ7A65]R7A7AC^E2Q7A1Y*pXmŜ6Aԃ>=6AH ]C6A #ɐ\6Aԃ>rL6A&mŜ6AL~Ͻ6AH /bB6AUg=6AK ]C6A #ɐqXV76AઽjR\Qa6A`Q)˶6AઽjV76Aͬb6A K3a6A`Q|R6Aph R\Qa6A@3!Vqd6A W)˶6AઽjrP 6AaGQ 6A,-r!6AaGT\k6A<`:[6A "̎[>T}6A ?11%W6A E&P 6A`a1cq6A@V3E>36Ap0"K  w6A >dP6A/ f6A  96A,^6AQ 6A`w[W[U6A`Ȍ'.pc6AVT<-6A`_ E6Ah$hՋ6A@A!`+L6Asx8)6AȒPB-r!6AaGsx1P]7AzjVf7AM7 _7Azj׉R^7Akd}P^7A@Vf6U0`7AG&Lb`7ApT25^7Ab{:1P]7AM7t.e7A[srVf7AJZ~jf7A0;c7Au0e4_7Azjt`T6Axú36AAZWD g 6AxúH6A*|To$'6A`.HT6A !×\[6A C6AAZWD36A>G\ ]6A kg 6AxúuPý6AL5|u6A'1c2v6AL5|ý6AI>iIz#6A'#[8 6A ղ"*]Tv6A"ku6AWt1c2v6AL5|vP: `%7A@['7A@=;'`'7A@C{Zd%7Ah: `%7AuHygg&7A@=;JE5'7A \E['7A ό'`'7A@wh]|փ7AqUA6,87A޾X 9,7AqUA+7A ]|փ7AsNA:_7A>* o˖7A޾X6,87A@7A^7A@慻Xfi7AOA09,7AqUAxX(k{8A@~&78Ab`|8A@~ {8AJp(k{8AKƓy Moj}8A@hth8Ab&78A@j<)8AKlu{`|8A@~y`K6A dB(Y6Ad[ 5n6A dr6A@L-z6AF}K6A` Q`6Ad[q6Ayݠ6A@UB(Y6A_5n6A dzp;99"6A5<16A ?p oy6A5j!6A`ׁ0Bєt6A$C;;99"6Azs_D6A)p*\Y6A@ B>6Am9pO5 Y6A ?p<16AK#x~Ĭڅ6A(ioy6A5{h6A O#]6A@=CX: O#]6A`Dt\$z6A$5T@6A f6A35jp6A]6A"<&/6A@=CX:&gj~6A@Ep uf6A5rbO#]6A`D|.|K7AaЦݒxV#]7A@J.|K7AhUqQM7A@-1DN7A'2Q7A9+=8cT7A498fT7A {7PV7A@+9@mq/^X7A@JiY7AwCoCځJZ7Ay :ű\7A@WIX]7AM8xV#]7A@-f>Oe%G{[7A \gT7Z7Apx2`X7Ay8D\D6AUQ>ی6A@l$Am6A &kPF$b6A@uI6A[< 6A1n{fp6A)+EY6Amc+6A`4D ^C6ArgW6A@!/X6A`BS*&6A-+ lI3~6A1K(X6A`=Jt(PG6A`^/~X 7A+r;Jx97A|O_O7A+r @7A>] 7A@rsǂ|Z7A;Jx97A>7A[^7Aڴe|O_O7A+rPZ+57A #:7A'ݿ_Kj:7Aof>897A Z+57A@67A'ݿ 6J87A@X'#:7A@!{_Kj:7Aof`*6Á78v6A æ _@Y6Á796A *6AyӄnN6A æ 6A`@8v6A+6AM'Y/ 6A^_@Y6Á7Xh7A]mO7A@*2 G-7A]h7Aդz5E7AR|o9A;^+݋^1ro9AF䌴up9A@UL@p9A!iDG:q9A2q*S q9A@6 Yyln9ASC\n̗l9A2jDm9Aj%Տl9A$zg6 0k9A@&Di9Ag2UM@犱f9A@k˰, c9A>aEAa9ABxV[9A^\c>O"KTU9A@sl$[W'nS9AS_1P9A@ ,[O9AZ&eN9A@R LqN9A InO9A@6{Uk1M9A@)xnKQ$M9AvRXĠL9ARzG9AkF*UN>9A@V`t>9A4$uq;9A@`cKIG99A[Y 2Z89A|y,(19A@5lE09AAU}g-.9AޛQy[Jh+9A@[4ꓑ })9A@[pr6,=0(9A@}"$$9AU7] 9A@r`9A@kB7ue+!9AVG\ey"!9Ak=Gq^9A@ɕh\<9A@ѭA|zP]9A@OzGvm<9Aȱ]%9A$nȹb49AP9Aiq}=9A6lO 9A6(|' 9Ayk 9A`M_[ 9Au̲ծ 9AajEw 9A`R~9AGOzA9A@? us&h~9A@#v.N9AoF[*M9A4‘S,R9A7qKR9A@pq}#1J_9AҀchfJ`9Ab#a#b9AԠ! a9A'c;^9A+yV[9A91"1*X9AseQS9Ab|g%N9Anf%=^!K9AB=uŬRG9A@LqE9A1b*ZD9A:H=!C9Av+vA9Ab\5ӏ=9AlC"9AfI&3G`#9A@AX!9A`9~{H\u"9AÉh 9AIH39A?1p49A"dK]959A $ruٗf9A-5j q9A@nz. 29A@{c̩P29A Z'9AV!)uM[9A.9AKQ!H9A})ƈ9AIz4JJ9A@Ԟo 39Am&-9A;ǘ+KsI9A@?v9D:u9A(ʷh1N9A= 9A@dda.9AΰXI=9Ag 8(s9A#A9Aw4*G9Aw%J9A,]u L9AMBO9A$#hT9A CJr-ۈX9AI#*jc9A@Jroh9AK֔؅Ϡl9AD+S9Yl9A@E\Omb9AS4d9A@㷲U> kc9AdmAa9A@.΄nOmb9A`n 6A`c ])6A Y| 6AI'z6A`6RѺB6A`c uЗ!6A@lEp6A 9<`n 6AD(Ő;6A Y6AS؈6A$Ge(06Az H_h6A  x6AFX])6A|DԠ| 6AX#^6A$\t7A`m݆v6A Uݥ6A򋅫#^6A֕G6A`mt7A+j}7AKE1z7f6A$\݆v6A U6A i6ASiDl6A=i6AK:b6A@ 4q6A^ë6A(Z{G6A {6A`z'T6A{6A;#Wp6A ݂)6A@zѸ6ASiDf'F6AMbl6A=XF7A`݋gi 7A/s?9u 7A) 7A`݋pN7A`ɅO$u$E7AIPj7A_1ð7A6W7Aĺ<`A6A JBBJd6AU\ v6A JBBA6AuՅB{6Aly$6A 6 q6AԄobʭ6AU\Jd6Ayd)V +6Av6A JBBmA'b6ANP7A`G#s ~6A@<-Y6A 3x6A o6zRuGQ6A`G#sj6Aw 7A@,a97A@Zb,67A>puYI17AʝP7ANiggR97AnQ7Acx,6A ?)"!m7A l)N/7Aׯkow6A ?Т6AC-9O}<6AБ'H6A`%dH\6AC3h.6AflBP6A s\!b6A`-;C0?6A@%:/^6AҎ6AtmA'b6A@3,Ⱥ6AAjP:6A &Þ ~6A@<pU6A@{ fRYe6A. RYe6AqzGSib6A@{ fo؁`6ArDHv^6A<-]6A<[:Z6ANć^&V6A;7pU6A~V6A@RRtbX6A`~lq+ʞY6A'r[6A y0S_6A@%"}OEE`6A.wA_6AnkU\6A-]k[6As4`T0:J\6A#uMj_6A`7!גa6A4ϑ?c6A. v5d6As JOc6A U[&@~c6A %< NGEa6AlzS6#~a6A q]G[f?b6A04ftZb6AYBu #b6Ah:e6AWK6RYe6AqzGq^v6A٬y8A@-g:-#7̚8AUq!fz8A4iQ8A@mR'h>88A@n?K"8Al ކ6]$]"8AZ^6H*8A@-g:һS,8A>󺺇,/8An%T\/8AS\ X08A?hIz:8A+?8Ax2?FM8AN\Q8Aض [8A90M)a8AN?e8A@+.p8A" yh u8A4HO~8AV? ihN8AH8A]cy8Au.Tڊ8A=ꠇ($e&8AVTɥgA8A@t8h7- 2 m8A Qd}8A:(@i{8A̗B{8AܖU9z8A@{m\z8Amz8A@b߄Hy8ADDuy8AҷO>dy8An]+x8A>mUMCTx8Aݩ+ww8A@Z CibORw8AUcv8A-oGv8A@su8A@p̒yNBu8A@Ry4:t8A;US:t8ABps8AeJӅ0s8A`;S3r8A@if(#5r8A,V=7:q8A_A`Vq8AU=\-q8A|YEaUp8AMLl;јp8A?{+E]p8A(|u,p8AǠunη o8APMzy.o8AdgCo8A`c o8A@6j#[fo8AA3jgԻ?o8AӛDZo8AMt:sJn8A@¬=n8A@ Mn8A {K̽e|n8An#Og#Un8A@5jX{-n8A@>d8!n8A+?$p2m8AaWXZ.zm8A@h>)m8A@X3)yl8AfEgl8AQ[[l8AƢ[l8A@1Ҍ5Gk8A@U=3gk8AT^)Dak8AܤYk8A@*έT&j8Aeqȅj8A@-Ԧ|#9j8A@PZi8A@S`/fi8AB3DT(i8A`~F)h8A,`nh8A;@%Gch8Ah@2#h8A@!Z+g8A%Jʕjg8AW?9l}g8A(۔9g8AG+fpMg8A FS:}f8Amf8A@8̢Xf8A#(M()f8AR蜴x$x=e8AIR*e8A;WCقe8A6RjHe8ANmse8A@Mӧ/d8A@Xw Gd8A~~Qpd8A̔@ \,d8A@tM`c8A6O(լc8A@>펼Bc8A@ֳo@t8b8ANTb8A<_uYb8Aažϲ_b8AB.a8A,W+:Ema8A+ҍז%a8A@l9(:`8AUPЪK@`8A]b;1`8A@&٪ _8Am~t+|_8ApR-2_8AhYYߥ3^8A=Ć^8Au٤$G>^8Ae+C^8A@T9E]8A `]8A@lE!]8Azn$8HS\8A=ٚ\8AEu8[\8AIwZ1K,\8A D\8A6e~[8AO~n?k.Zz[8A@_)QżD[8AmkS3q[8A yZ8A])}tSh Z8AXAgܝZ8Ao5kYZ8A#Zt Z8AyY8Ab%VY8A  Y8AD=X8A2dX8A.Iቻ I*X8Ab^i W8A@Ƌ)qrW8Aۤ͟:V8A% V8AT8A@_eUjuT8ABSnA#T8Aq 6}NS8Ay€zS8Aõgs,S8AzvUJR8A@69ҰzR8A@C"OR8AN&o0׭YR8AKL!Q8A5UQuQ8An)Q8A,4P8AġzP8AV.:y L8A@E`iK8A-kK8A@-!J8AF@'NJ8A@z@2ZJ8Ak0!HI8A@ {I8A4㋈[I8ALI8A}H8ADI ?H8A?~`ėq~H8AWQD4H8A@eH+G8AaU*G8ARDtwG8A\fHG8A.&>=NF8A@LtF8A@q*;>ҘuF8A'EF8A/Ix9`E8A@/KD8A/Pf eC8A@{]́1C8A@3B8A?A8AT9d\"?A8AsAe>@8AAhI?8A@7=?8AIQ];d=8AvߛP<8Aiej5LQ1<8A@ W:<;;8AyteW:8A24Mg98A@Uzދ88A,/W78A@;S78A?!(68A@p}5+68A3VP#58A3=L>R58A@UZ Œ}48A@9'48A2< ZVa38AZ-m#38AYU[28A@vA-/18A@a%s18AQ'4A08A@6+&end08A@- yGV08ATGYZ08A@Bzxj/8A@#ЊX/8Ać Ul/8A@ 1kk./8A@w7(}.8A@,r.8A+^rc.8Aai-BҔ .8A>2Ж -8A@;Y\tBl-8A+;ώ5Ak%-8A]P~,8Av0UșdS,8A t+8A$h^v+8A@sVMVo+8A pgUrd+8A|E:r*8A~*Nm*8A@sr+~-B)8Ā |jT)8A@\{zG(8Aˀ{=p9(8A@R|u6'8A@r ~J'8A E,D&Ĥ&8A@E&R&8A L06ٵ%8A@qܣz5%8A@jsG$8Axr}+o$8Anx&$8Ad2=U#8A@ A_K#8A%# ƶM"8A@=B"8A,Dc!8A@V=cf 8A>ֿOG8A@RNF8AvJw8A(.1ѣ8ASN8A@tba8A58A;zP`!8AnUgx8Aq&V8AG/HV8A0j8A@X(8A/ i=8AqCfW8A@9Cq8A/  N8AmO[8:X8A垟8ALc*31>8A*!Փ:r]8A@B#B8A@(d<58Aϒ-8AOBF0+iD8Ac.568A{>918Aa=i8A]?\'8A@T8A@:NC:8A]EW8A]d {Gߜ8AI8A' KGs8A?U1Lpv 8A@# M.N 8A4M4 8A@QrMN9 8A@,Nz4ْ 8A_hN:# 8A@;"Ou> 8ALUO^g2 8AؚIO$@Sjþ48AVT+9g8A YV7A@ qW&yB7A.YRՍU7A@$\n %7A)i`.XC7A^|c+E7A,E&hG>aZ7AvbkH07A@Y-.oP^7A_BuW{7AGcm{7A ~G E_7A@o$h[E'7A@y[g7A@̊˔7A@MJf#V7Aݙ5eɾ7ApU%=7Ao7Aj=tRi^7A@o w7A@^UPۙ7A@3dL p7A;d2D+^7Anѩ8iKo7AvoϮ{7A,Z;y7A@ùn]5V7A@Y,*7Ankc7Aetq݅557A\ ^7AvAc=7Aػ[87A01u]7A,7Aٝ,7ASM@lm7A@fzh7A@4Z }T7A)g7AOݬse7AwZ0Ϳ7A&K>mq77AREo7A_m'zj7A45Opm[7A* WQ7ASE,7A@9 ?27AB#3>ǒ7A/$7Ap7AAS9 $_^7Ao2b+,7A] R7A`tg37AӶEWE7A@.7AEw+D7Aruٶ7A1 nH7A@LL` '7A@jq7®He7A%u7AQP1Qd7A@˾27A4]7A蜧'Yپ 7A@6hZE7A@7Aڡb n>7AVZtz7A(!qZ7AES[GL7A@-|pK?7A[Jt 7A\=>]7A67A@137A@Xh宫B7A7M:7A@+k7A$#`AFA~7A@Fny7AZ 7A@v;$<~J7A@ؼf7An`7At7A@|7A@_9-57A3+7A-~~&r7A;P7A@>E9c07Ac5b7AWݓ ^37A@OLPTv,7AɉN%t7A@H9JN7A1ڿ{!*7A~ 7AC/](3L7A 37Aÿ7A[ѲE|a7A@6c7Ar_/M\$P7A@6 Z7A@ Y7A 7Ab ;E7A@-} 47A$@ir27AeX7AoPqj K7AX-#%U7A657A@E/7AtrMS5z57AzId;b7A쯣y~]{|7A@2 <"7A#a )p$7A@]Is7A>hy7A.R $7A@o.BUV7A Cy7A`ЯV5>b7A`lCWvʢп7AࣁW;¿7A`'X-# 7At )YcW7A<}Yq7Ap_YE7A1G[ZQsEv7Ac[.Ek7A_Rq[uBsO7A'[\ F7A3\\,77At 4]!7A@k]>Ę7A80^+۰77A@_{LM޾7A 0N_b=7A;i`T婾7ALzaKTȍ7A D6Cb8$vL7A@2Kdm"7A ƈeN7A`mf8Ic$׽7A hgR37A tho7A ?Z j3I,<7AgQvkJ7Al'ʕ7A@.}n k͂7A 6p'?07A .r+7A ws(7A 6u.'H7A^PwfRLi7A`uuy׏7A`{7A 8'~%w7A~a,>7AΈO&rl7AZ q[͸7AxŅ8 o7A nӇG@7A`kP̈$7A?e:n=ҷ7A 3mY@ K7A33\g7We7A`#@ 7Aஸ3ʜy۶7A``cǙc7A`%r4a7A@ /+ܬ$%7A -8 ((7A`Ԉy*Yv7AMږ]KH7A`l&m%xl7AuaQ̴7A([`;^7A@g9^$ٓ7Av&}?ڠѳ7A7C)"3t֐7A`T7ACNcB7Axݫ17A@UQm97A@ H51Ʊ7A !y`7AE?|bs)7A]Σd97A;/"{n 7A[@>1~7A@%sRC7AQÆ7A]sذ7Aw:ͤ9~7AU%9"M7AR H7AH *Wq7A15Y>a7AG&kXU7A>A1 fQC7Adi6e.7ATf7A@2R5~q7A_ *7A@7@Q7A'j`.7AI޿ӯ7ATQ_)į7Am`}7A@X!"*7A`{}l{7Aj꽨m7A{ ``7A O7A@ \1Gp~7ANfMS~ծ7AЗixî7A#hdҵ7A  O%7AH 7AUemy7A 2gRn7A*1Ἣya7A?B7A 6 8 67A,+nN{$Y-7A8?oԲ% 7A˪7A g7A`c#U7ApyYԭ7A}ogMɭ7AWYG)7Alvм7A4gv27A@{/wP䐭7A`R7AZ_^7A ^v7A3׎;_7A@qڮ&S7A #007AkvmH'7A 7A#YȰ 7A`!ۯ377AmGAK7A`TR,*7A` HBtB7Aah>!۬7A It,9IҬ7Aҹ߾7A@}>[D7AE t7A`*IQ7A &mC27A@汕gA7Aeĩ,7AUͱg|7A,xYp7A / + f7AAS1md\7A`YlLm~O7A@&Vힲ*F7Aczm,<7AQ27A b(7Aڽ6NA|7A17A@;vgA7Apγo7A`hoF_7A^cMVx7A pQ2ݫ7A`+fdի7A!m̴`sJ̫7A($͊ī7A@yr*=<7A\ ~Uk7A avL07AE-7AL7A*74I 7A; OEK{7ALADr7A9|f7A.&N8ALE]7A@qrg [P7A ^B7AìFr97AlOH>z.7AߚP*"7A YFv7A@l?_ 7AT7ALCm_7A3@7A3?<ߪ7AȆ wת7A+[5؟Ѫ7A`'wȪ7AӻC7A븭ﺪ7A`@]W >!7AY~mcϨ7A@̞@kiH7AE?ӛ7A蔽Wbe7AϽ17A~XpY恪7A!I|7A־k1Au7A cu$m7At d7A /ƿ#\7A P /T7A qL7AKE7AwR~y=7A p8=*17AVZ:h$*7A`B :=~-$7A ܉\7A_I<7A !7A k>j77A卥yI܏7A1- 7A^zx7A 7Aϒ&y7A 7)ک7A@v5:é7A b97A@2oAaf-v7A0 7AE.;7A9;E 07A`n *#7A/mN7A$:#97A@{z8{7A· U9ا7A`P`5D6mЧ7A@@8zħ7AF\ 37AGP\7A@*7A5c[7A&b:<7A c4c_m7A9c7AM7AtF^ZС{7A5 Fq7A2'3h7A}_SHZoa7A|(J{4Y7A`H/S7AZi+H7AP`Nl@7A 7'%s47A - "`+7AD;#K8%7Av\<7A87AB\#I 7A@#ƨY37A \iW7ASc٨7A@ٹ+7A@.^8I7A+u>7A Jv,L7AÍ@ئ7AdJ֦7A@ %#ͦ7Ar&/1Ħ7Aah1g7A2Xﶦ7AN7%TV7AH%,7A`CR7A xd_O7A7As=̐7A`/+7A@-BUGх7A |j&27A`ܣL\}7A[paTu7A`<Xir7AOWMJk7Aq'%=b7A >Nt[7AiSU7A8JN7A@pJ7A |W>x_F7AJDA7A`."97Afcn17A`ύqX)7A'CxC!7A;R7A@!,yex* 7A@^ͥ157A["x7A31r7A!2Z7Ab>,ߥ7Ab|+Iۥ7AµХ7A H clZy˥7A@?aĥ7A!kW7A2t鶥7ARN87A xr{ 력7AȕL|ޗ7AB7A_tY:7AkLs5w7A ym7A`:&ita7AZ]~^\7A`Kb(24W7A CFQkP7A DJ7A?R(6A7A5 c07A 9 (7A`m$Tcz|"7App'7A Sd7A@_T7A ڈM57A-UGd7A &H]7A &S7A@n U&7A@R<cڤ7A3A#ܣդ7A@ ZϤ7A`w^-Lɤ7A 31iŤ7A\ 7A;JHzi"7Aq7ˮ7A@!Ҏ7A Mfᡤ7A .`6!7AC%sN7AxtSƏ7A/|7槈7AuKbsm{7A`5s7An+|Gk7A֣cEve7A.^U`7A@.W7AGj&P7A[97A@qy+17A`f {$7A jTpMJ7A@YA';X7A …5F-7A ]N"`7AA7A.,z7Ax7A r/7U٣7A:oIԣ7AVJF̣7A7*oj£7Aj놹7A`CZ7A؜pؖ97AZU]ߚ7A9LL7Ad"݌G7Aǒg%Tx7A@۰Pp7A@;k7ATc7Ad<mV7Aww=R7A\]77A ^h'7ALu`5 7A`z7AlEҢP7AD|m7AթmYע7A`L2a{27A@ Ipc@7AߑgѰ7A{`y+,敢7A_ 9x7A'Twzy7A0Krh7A*I7Ado@a>=7A`LP,17A eA  lx7Aow/=c 7AlM X7A bȊ7A|@7A@Ԝ,ܡ7Agp͡7A~\\7A ]tz`T7A`'_g䏡7A`:@H7Amc}_Kp7AH4ʑ5_7A k=7A o]!n07A S<!7A 6DE7A@)HgCN 7A 7A$k7AHNm7AIJh67A֚7AQ:˚7A<\VJ 7A8Lzk[O7A>@}i7A zJJ7A#r>g7A@' @K7A+>wn7A [q(]7A k~T7ASzJG7Ar*gb<7A`@p6I57AGH a*7A kT?z7A j(7A$|7A Ǫ@;7AHzkV7A -7A(ٙ7A<ƙ7AGVh⹙7A@dz.l7Ak}OH7A@# fj7A {='悙7AC~h7A^eMS7Ak=7/7ḀȥA%7AY n,$7Ab }b7AC9Iu7A@/YY7Am}>ޘ7AU6wE ט7AZvݖ&^ɘ7A q07A G{ 7A X)7A"L77A͂ "x7A`Pcvuo7A`()hT>Gg7A\Q8=G#b7A`K:BOiZ7A nVoS7A@KUv.!G7Ain@7AexƓ0*7A DX7A @Ln7A@hYJ7A?O7Agf7A`~a&f7A gbޗ7A Jח7A Rm tї7A8' Ǘ7A,-9덋7ARB\7Aw`z%7A@zɆZ7A=px7A`#rJZo7A>mYf7A+a\7A`_pf{P7A9*tbE7A%b>t!=27ArpN'7A`_=m; 7A 7A@:lԕ+x7A^zT 7A\7A`V7A X)?7A`.}d7A@҇Cx7AsOyo7A`bwؖ7A &Wϖ7A5GlȖ7ArU?-u7A@p2P4 7A /xl7A&b|ov7A22sek7AsBI:Fb7A`b ^Y7A@&u`yWN7A@!j.A7A&l.+\27A"G!7AKq_ĩ7A o\ 7A`  4*W 7A<_ӸN7A`  Iە7A# Е7AEfɕ7A`#.:/7A`eKr'7A x:.tteɤ7A7f`7A HkAI7A3Pɛ7A`ĻKھO7AH8tv7AгS:n7A6wa7A7'V7A@k )QVL7A`fkgi@7A xTw827A z+3[K&7A[,67A BM 7Aw=~C7A%!Ὑ7A`!AOt7A@RŬ7Aaݔ7A Z=CԔ7AK?Ȕ7ANGAS7A`u7A`{$]߮7A^v7A t> 87A@/} $X{7Av WgVۅ7A@ca ${7AS0!]>j7A~!E`7A@HӨ!)rV7A`r!ȟ|K7AN!D2~A7A`%"$57ANL]"=33,7A`; "&7AD "}7Ad"Qn 7AǓ<#G7A} w#H7Azyݽ#Yߓ7A $ӓ7A@D9$Ó7A^L$(7A@$[`7A'%Wz7A}%c7A@%7XP@7A v(&/37AR&%7A&k(b7A ?s&\7A&ڤ7A&(ޒ7A@s;&l˒7A`'7A*'/捰7A6'-mW7AgE'9y7Af]'EQ^r7AP'${a7A *xĝ'߻+P7A ''&A7A mx'pH0s67A`'qF<*7Am>'OhW7A _'Tf7A I'Sa 7A :'N_7A`ئt't"7AN~#'N'ؑ7AT' Ǒ7A'W-S7A)'3yF7AW'7ʧE7A`̜ (˷*7AȽS(:A7Aए({s7A༞'!(Y7AȈ(κU5O7Ao!( :7AY (Ua$7AE[(CZ7A.P(on7A@=k'G7A'z ې7A`'ۻѐ7A "'ܙĐ7AΪ'Cn촸7A`EG''r7A'D07A`'='e7A'H;-7A@'\n7A@>6'Z7A'娙D7Aq}'t07A)Jw'!s7A@_'7A :\'%s7A`G4'}Rޏ7An3S 'pNdÏ7A2&F7A@t{&Fu7AQ&ɿl7A`~t& *S7AbW&0JY>7Aq9&QgR7A`RG&Q7A%B%xp%7A@CV%\7AH%FS& 7A@ %`e7A-A$7R7A`AI7Aw"2V?7AFU"$?17A^B6"gT'7AW?"L7A Mi!f7A_!7:7A@9!^ 7AG=!}7Aɨ!UJ7A p!O.׌7A[pI!(!>Ќ7A m1!ƌ7ASx! L7A`L ?7A@~  ӧ7A@$M  鏠7A@0r p쌘7A@r^ T07A@pw n 7A =r Dne7A`uZ K7A@U rD7A`*$M7Aů]H7AU"beX7A(DԀYH7A`.5/+7AT7A&?z;7A7 q(Z7A7>H-7A`)%eo܈7AY7AyG7A`S;+7A@d.ч7A@ǾBo7AKuh&wR7A`"5837AY}f̢7Ameq 3oL7Al~!i7A3$A"aߺ7A@~"@7A #}7Ak#Fori7Av% ǃ7A є&+0-7AM(07A^U)i=7A@*^m7Ay,07A@^]h.v4,l7A&@0Ƕ7A`1V 7A`f -17Ach2!3{gOr77Ak4Q_{~7A@ E76t]~7A/9cY~7A`Y:v}7Ac w7<b}7A`[m=`}7A@y>RH}7A`]?2u.}7AZ!@f2|7AoAӲ0|7A@-Cy֩f|7A`\lDc{W|7A޻+E|7A 1IEtF|7A [XFb>Ho|7A`r GN+]|7A}Gm!~E|7A0[H0|7A`U>I~k|7ARIzp><{7AJ l{7A7FL{7A`|lOon{7A@A\PZ^{7AtOߢp7A 'Yp7Ag\_ p7Aleҋp7AYP0Yp7ABYp7A`ѱ; +vzp7Arwop7Ak> fp7AХE6I_p7A fuf!Up7AB,ɪPp7A m CiLp7AD[4Dp7A`$Y6; p7Ax.iJ p7A L.p7A%zXC? p7A)?~v9o7A Øo7AdUo7A$鐻 o7AA/Jo7A Moo7AM"Ro7A/&`o7A'mo7A膥dH=o7A<ʒ'ro7A@z,Ho7A@0,o7A@]CҪXo7A`:o7A ˴Qϗo7A4"4o7Aoj6Go7A`OgCo7A`1.:ʲo7A-w[ o7A|`~o7A@SU~o7A`dّo7A%dTo7As5%o7A`TVo7Ai!2Jo7APo7AuU*Jo7A4ٻo7A@ݴ o7A@F?o7A +ß >go7A N"p =bo7ATo7A FIz6o7A <+o7As]Mo7Agރ?o7A`b뼹G~o7A@Yj F ݕo7A`,j9o7A 6.ro7Av _o7A@$4u2o7A "ͷz:o7A@E0o7A~z\jco7A/.o7A@F5TCB}o7A_Ryo7AlJuo7AI@M%jso7A"f u4ro7AøR|#no7Az)!O_ko7AxM.jlnho7A`j:obo7A`SK79P^o7AeQ{5ǬgYo7A d}jVo7A|kwmVo7A q)u sTo7AihTo7AXsQPo7AMo7AzK*BJo7A#@Т?o7ACD8o7A $h\7}'Q[4m7A a*+G,m7A$U!m7AR99m7A@JE&m7A!9A zl7Aj`;Xl7A@l7A@]|l7Agl7A@ RzگVl7A ai-l7A 'l7Akeƹl7A i~|+l7A@P~u-l7A K4l7A B nГl7Axٓ#㕏l7A [;௼l7Aw!?,l7Anzl7Aަ^rl7A߯~JXhl7A ,=aؘ_l7A%>Tl7AG%l7AGxcol7A=uqs|Wl7A@#%k7A`ҽjLk7A`Snk7A @aI?Ek7A]oA"j7A ,Ѵj7ARl kj7AL*'[E!j7AGHyVPi7A@ȉ0eci7A hfްq_nDi7A 977h7AoQruh7A$e ch7AIF:Sh7A`g7A@lU!Ⱦg7A@%:#g3g7A zZk%Nf7Aд3( }f7A#?*+;f7AHP,fe7AY.h`e7A|_0Qe7A X h2ɹ#e7A Rg4d7A`g6Cdd7AK/%c7A 7r6@Qb7A %B;Ob7AHIDݦ2b7AE1Ba7ANGKa7ARԾIb=a7AaKF|)`7A v{M`7A4VOF`7A!5,QDVT_7ArRƟ_7AԅTwx"L_7A9Vq^7AuלjXr^7AcTZ'9:QS^7A%\,j]7A`A]K堨]7AFU_J]7A]`Mf\7A`\^Wbܶ\7Aq(t=dFkT\7A`xǼUf{_ \7A΃mh!l"[7A%j6y[7ABKl`u[7ADmq[7AX;m׸m[7A`5xqm9rj[7A :=¤mf[7A@.m1b[7A n#_[7AlA1n_؃Z[7A@-_n?W[7A@SnNDmR[7AH@ndM[7A`,rn2DJ[7A@doL .A[7A@tAmoR<[7AWokQ7[7A/o'2[7A o. i-[7A@ӵupv([7A5>pyc"[7AqM[gp}[7A`pX1T[7AWyp*[7A@q[] [7A ~5qI?[7A9}^qcb(Z7A`xVqLZ7A q3RѸZ7A@e rI a-Z7A=9reQZ7A`rTZ7A rȣZ7APDsZ7A`qsGipZ7A@siZ7A vs&~ Z7A]tZ7A]4+tgZ7AtYtZ7ADytL#Z7At&Z7A`t0Z7A .u/WZ7AkGuZ7Ap+zu:kXZ7AuDZ7A=u xZ7A`Y7A>)+} kY7AS}?Y7A`az}nkmY7Ae}vY7A9}hoY7A3}$Y7Afid~ MY7A@VJ~VNY7A{dHY7AŻR3hBY7A@)ѐq9;Y7AR25Y7Av Sր~Xo.Y7A]4?3M'Y7AI.S9!Y7A`pN%lY7A + rY7A[=\ Y7A Z™VY7ABh]ZY7A [)YX7A%O$X7A`:;KaX7AaAX7A`>wցhX7A X7A`%"2X7A@۩$uX7A`=9X7A/?`zưX7AT.z@X7Ad6 ΜX7Aȷt]GX7A:{قՈX7A`O{X7AmC(tX7A X/ YX7Aua]SX7AwM-T&?X7A 3ƒJ?8X7A@5I܃8X7A@^3g,_X7ALO2 W7A ]DŽW7A@aB'TYW7A%TRW7Aؗ/0W7AP*)W7AcپW7A'~ņ|ڱ|W7A@4GφpV7AVc]V7AO hV7A`w'BV7AsnL+V7Ax!XV7AǛKV7A2 V7Aq*ȇ%V7A@bb҇+6V7Afd#V7Asw?~V7A埵f@wV7AP;pV7A,,9mV7A@'=5T`V7AR;pRV7AzB ݺKV7A +EV7A4 T86V7AURr9l5V7A-r0n/V7A`4/Ĉ+(V7AՈHmV7A/hV7An-V7AB2V7A]DtDYV7A`Y]pU7A@K[5o#U7Aps㷝U7A!z-*U7A(ĉDgCU7A \}e8EZ0U7A@i.AsU7A@}4Պ4lU7Aފ:eU7A@ŕ!-^U7AJp;QU7A`PO.5U7A@C0L U7A`|i:{BU7A`U~{|b U7A`}iLT7A2GT7Ak J'QT7A`kҨ>T7Ayȋ-FT7AeˋiRT7ASX$T7A >T7A@8h!;T7A2T(T7A -<eT7A@8Nd RT7AXwT7A69 {9pT7ACL҄qcAT7Aġi@:T7A)ڳb.T7A e"-9/&T7A`T*4 T7A@+nfT7AN,}pT7A/ogԋ T7A~m-+T7AU*UxT7Akhڍs%S7Al,S7A|p *2S7Arf&S7A j7vR^S7A KXtmS7A .5fS7A) ܎S7AH|qдS7An@I]S7Au }/S7A7mquS7AÐ*63S7AwS7A tTrS7A pl6smS7AZ芐{PgS7A@9߫/ubS7A$Ґ}IR\S7A  }cVS7AbSQS7Ak3:%xLS7A`ud`uQUFS7Ay\=k@S7A/læ;S7A`?Б5S7A`7&S7Ac6!S7A@~ƝBS7A hLoS7A`>bے S7A.'Y -S7A0bUsrQS7A{:~R7A@qԕR7AsғzR7AwR7A@Y&BtR7A@LvM$R7A>z]7IR7A` +R7A) *AWR7A4bN6R7A6;N|teR7AR7A%ؕZy۾R7A@K mtĵR7An#gA0R7A`EsR7A{[h`R7Axm<ԥR7A!Y@R7A@vLR7ARapR7A } Kz,R7Ak/c18R7A;ݯR7Acgu r!R7AwݕR7A`DӥQR7A ؘ^:zR7A@,48avR7A೗<`ZiR7A@ooeR7A@nktEX\R7A`&Cq|WR7A`t;ʘeNR7A7LIR7Ao}r@R7AIUucC;R7A`Wĸ 7R7Asɛ02R7A %^yQ7AF$9Q7A2l>fQ7A䔞7Q7ADG1Q7A">ZANQ7A}o("UQ7AgIoQ7AZsrَQ7Adߐc1Q7A9¶,8Q7AlןSQ7A` kU5Q7A@v{nQ7A VU?uQ7A9 f\ *Q7A !Ƞ5rR|Q7A@*iChjQ7AnOJieQ7A /hoJF_Q7A@2=XQ7A#԰RQ7A á`MQ7Ami,;GQ7A@]:Q7A@?=ٌsP5Q7ART&V-/Q7AIu9hcG"Q7Arħj$Q7A@ȢCS>Q7A `5X Q7A ̬Q7A2C5P7ACNQ9uP7A@ceӥSP7Aa4DP7A.cU2^P7A;C@#P7ADRR(P7A@4kP!dP7AV6} lP7A\&O.P7AѧûP7A 8P7A`ҤMP7A `6P7AabM/P7A`-tǥp!P7A@Q?P7A?3DP7AAS P7A`.ˢP7AV0Q!$O7A 14G1O7A`? dFO7AtMO7A@$vtW̝KO7Acm|O7Avk]O7A@ S|>=O7A@R~  O7A?]_3xO7A`Ц+FO7AAڦ' O7A K(O7Aq}gĩtO7AP<=mO7A>EQ[MYO7A Uz *:RO7A zSDO7AL8, O7A@@o%O7AL ?pN7A :HxN7A\kxxN7Ai+u(ZN7A MN7A mFYN7A@rŨʸFN7A4:Ϩ`XſN7A?3N7A`{z&N7A`Pk QMIN7A Y(HOPN7A+5V:=N7A"D9=vN7A#g=ӣoN7A ApZݕbN7A`݈ [N7Aহ-jGTN7A0:z84MN7AFqFN7A@ ʩ ^?N7ArLԩgr1N7A@rPQr*N7A!>£$N7A?rN7A [-dx+N7A@ -gFN7A@67u N7A ԲZ~M7A@zdWݻM7A`ȞuM7A xM7AhFM7ASVLaM7AWM7Aഭس59M7A@!Ǫ&M7AhѪGZM7AS+BOM7ADSM7A"q ˭M7A@ 97\M7Al#yV{דM7Aւ2VnČM7A ]J<2 M7A@a8MP~M7A8W#+xM7AdjiKqM7A`XrTjM7A@4`>AcM7A!(~\M7A@@vkUM7AqWNM7A(JGM7Aī+@M7Aӑ=֫59M7A`2M7A@[ڜ$M7A`7*~M7A:1+qM7Aa zR<M7A`1 ) M7A@ʪ;T&fM7A,Mt?L7AQ`tp|L7A}^>r@ŗiL7A,L| yL7AX(_j:L7A.L7AߙL7A5` L7AͬL7A_rL7A;raL7A)>TB'L7A>L7A(!\=L7ATO3w"L7A+:IgwL7A/NzTpL7A O`Xn8jL7AX_eucL7A)qC*k[L7A` r}[OUL7A \}cK7A)g^d7K7A VoږK7A Π K7A ֞OD}J7ATůJ7A %ͯdJ7A`ۆޯ [J7AިSJ7A *%J7AeXbJ7A;wE){J7A`YF\J7A 7ʰ ^-+VJ7A TѰ/@J7AN`,J7A f#)IJ7A`7JVJ7ABtA^#J7A` ceJ7At[-J7AױQJ7A5RSI7A FFִI7A@ I7A ;+I7A@ʥ[}qI7Aj{?-I7A5=ԨI7A`hpδg|I7A"/YyI7A8 BsI7A866[nI7AUbI7A.a@\I7A`٧e*PI7A?R*KwKI7A@-{9I7A֪x׹\3I7A !F'I7A ٶ p"I7Aւ>}3I7Ai'eZx I7AnxilhI7A8@V"H7A`fԷ&wH7A`zl~H7A@p N`H7A =,7H7AWn}H7AL{H7A`9iK65H7A89hH7A@YzRsH7A@FH7AaZ^)ݣH7At{iH7AdO^>>H7AۅIJ.YEH7A`^dӹ:H7A/LH7A H7A2)'q0yH7AENlH7A`/x^vfH7ATm  YH7A(˺SH7A ){`WNH7AW98rZ4HH7A}-$N;H7A·V+5H7AQfw+)R.H7A0ؐ)H7AvX #H7AOH7A@rϻ}H7A q= ngH7A XO H7A &(WH7AEz<G7AFn[,MG7AŞRG7Ahɝ&/G7A /IG7A  >ɂ&G7A`b_hRG7A@ =x97G7AɋG7A_ﯽO.G7AggL2 G7A ]&G7A ~1 uG7A=$L;G7AJT8րG7A@uHbzG7A@|?tG7A#_s#jmG7A`)Ⱦ2gG7A-bG7A`{OG7A fBc7uQIG7A81~|L%DG7A@w>G7A 1껿17G7A %տsl1G7A 5v5@,G7A`>{&G7Aڈ5VkG7ANgMG7A]oɒ[G7A0:G7AMOF7A ;|{']F7Ahgjrؐl1F7A@1F7AE.RF7AgBs9FmF7AWgF7AzeuaF7A3[y\F7AfzѿptѥVF7A"Ȅ)QF7A`| KF7A5/?FF7AjU"@F7A`$v0U;F7A~E85F7A@7k0F7Al%a*F7A9 z&F7An3wF7A`(SDF7An\rpF7An_ VE F7AarF7As4AF7AAd6\kE7A`O_X E7A 3tIE7A@߳ E7A͛C0E7A,]E7A|ACE7AU:ݍRE7ATT{E7A`q4E7AH0@IE7A@HbY)wQ)E7A8 GVE7A`hʞE7A`c"eE7A\os?E7A )Ɨ~ E7A`WM |E7A,B8NuE7AQ!}UspE7AyR]jE7AH=5fE7Ah8aE7AE5 \E7AG~N*fWE7A o8t(ESE7Aq#r*\iNE7A1TQHE7A@ $CE7A35ئ.?E7A | EM2w5E7A瀑V1/E7A`E7AZ#*E7A 嘈 %E7A IanE7A ;B&kWE7AZ&m4D7A`yrD7A@FmK)}D7A` D7A@6D7AQQVD7AP꿫CD7A xpD7AwAV渺D7A@VG?D7A#o: D7A@X6D7A%0ZD7A[E7D7A9<]D7A`R-D7ApzrD7A ACCD7AMwD7A`#YyD7A> LtD7A`fI/onD7A@PJKiD7A`pvW共cD7AgI^D7A䛲XD7A᭍jSD7AⱳMD7A%|GD7AF*dBD7A!e>,A_$D7A3K+ȷD7Aߑ-ٖ_g D7A`⃐;D7AW)MKtD7A5r9C7A " FC7A`y AC7AG)C7AcC7As,@C7A.өgC7Ai2IC7AcWA+C7AMbC7A@RĔQ ٙC7A:9C7A(n C7A@B7A+G  CRA7A2oU/=7A`ZwHB`=7A@uY0T) 97Ag"]"287A,#%Fw+87A  )![xj77A/z67AB5*4m6'567Aྒ=8ɕ57A@ > Mi257A9g"Bpf47ADulG u37AɺOs^*S27AaWbX27AY! 17A`/17Azeƿ17A;Zjס07Aȓp/7A?xt!V/7A x"d.7A@X{<2,.7A`Q m-7A=e5dm-7AuW-H/ -7Ac3vB_x,7A o y0b,7A@?le. ,7AKk6Z=+7A&q@Nۋq+7AHx,<+7Aɨ,[JMV*7A@_0t3c*7Aw 1*7A`ܼ)7A You)7A- )7AZ=q3La')7Ax(7A)/1(7A .DUA'7AHPm&7A(Z?n &7A-PF%7A '`$7A.\v+pz#7A@7'\!!7A`mhN> 7A`0Q a87ABHAdŏ7Afznv7AڿK,͚Q7A$uzd07AaWepB7A\Hmq7A,^7A@#c*[7A`?P*7AdO.C7AL},7A`5\7A307AgM;b/7A#g,NM%7A-0*QL 7A) 7A@}!d 7A`|'NNd 7A֦u+aPt 7AA/y3A 7A9^3.F 7A1g7ICLK0 7AU;n 7AEa@3 7AE~4t 7A G 0 7A5`7N* 7A@.Uwi 7A]OBe 7A`ѲmjHh 7AYr 7A /ɉƵu7A`Nr%<7A $+7A58?B7AJ$RUCd7AOx#7A@7A7A)*7Af7A %=ؔ7ALIp'7A517A@~T87Ab [ՠ7A`A˘7A .8.Ş7A`] ɍ7A@\R=cU7A`tlV>U(7AtRd|7A`߫boo7A KVh7A@3w,a7A`K<nXT7A.pDM7Aದ biF7A4 1KJC17A*INp]*7AMne7AvtQ+7A`GQ/u7ASң` 7A`fE]mQD7AނdO07A@1>n?St7A` 4W7A qD?7A 7A DK7AK_YK7A@cG'7A<h7A@C+,՚7A5|ݧ/7A  "7Ad`E7A@c/ ʷ7A[Jjٺ!7A.v'z7ANHv7A`w eqt7A 5Y+q7AJh4+,o7A!LI5l7A1+7i7A^ e^h7A B'h7AHRX( g7A<4_hf7AiTXf7A@6'7f7AUbٹ)uk7A`;D Ղo7A@`r7Aw!v7Aibzx7A#JD >}7AcnuWm97A`P7>N7A Kl F7A8\a7AiG7A`[s7A#v7AB{@+9Z7A\RD7AV7<%47AK*W7A rJi 7Ao9 l7A6z17A7A@&gJ7A`@S7A0 .I7A8a7Aq7$ 7AKX2n)7A`|?7A "ѯ~7A8Z h"537A .BFa7APx7>1!7Ax2%7AX76'7AB]PzK)7A}ݰ5)7A`b:*)7A0r )7A@7ku{(7A8в;(7A> <&7ALR#7A FH5!7A '7A$2M䫩7A` .x7A`qqCQ7A@4^9M{?7Ax$7A@0s84G7A`Lr7A` sJ#Y#E7AAY 7A`ư.1~7A`dM?jY7AV;k7A6h/VH7A x#47A 9 .%ж7A@R л7A6XW7A@IL7AQR&/b7AT[7A a!V7A`X!X37AlWpm`7A @rQ7A`chQ?)Ȉ7A gW(f[7A@NVG{7AS?`s7A ~bVxl7A `lU|ke7AannW^7Aoq7A gmU 7A©M7Aq{7A`:5EDv7A@R 1i7A:s/Djc7Ab]ϩCY^7A@ly{h\X7A@9f{_R7A@+?j$82M7A8 G7A`8Yݠ8A7A ckr-4R <7AKF667At1# 17A %!{+,7A`&WV&7A ,y!7ANQBE7A>0<<7A|}|U 7A@Ijp67A :7Ao7A 5]>7AMn`7Aps3mE7A<g7AJR7A}#D7AJACOq(7A07Adm6fT7AMF ߼7A@77A,?Di7A o‡7A`Mi7A+_l7A@,7A@kwWJa7AǃR7AMj#͛7Ahg7A`v[C0 O{7A'y~4qv7A/q7AqRMn7AC$i7A@*'Qd7A+ZUM3N[7A#LV7A@POG\R7A9_7z~M7A`a#FH7A`tIQoD7A`%Ruw?7A\vͰ97A|!r#57A`e! h+7AhCHgN&7AQ+vxi7AT؁tt7A=iU7A *U 7A iePs7A`kP>-7AeX7AƗQ 7A 0Tv7AF>}FH7A+'o>7AE}T'37A 1'A?37ARg 7A)@nS7A,S~7A@uQ7Aqi|7A>YDO7AEbٷz7A% r df7A֬Xw7Aj`LI 7A6u7A`+~7A{MB.ry7A`h3t7A HɂKh7Aq.mc7A "U I]7A;@kX7A 6E7A%јđ@7A?7@GR:7A`-ZI}57ALQˋ=/7A>G)h)7A4@V$7A&X^(g6A*m6A 4H6Aৼ  O6A@b\(&6Ah6A=5_6A(k?s6Aָ /6Aw5ڞ6A r?6A@fY%mˋ6A?HF~N6Al\ey6Aa^3@s6A`DLL6A*>wGllG6Ajk*^0 4-6A p&6Agh6A/uRM 6As1z'd6A`jc6A6Mu#*6A I~mEf6AOm/}6A XN96A)C/u6ASvl6Aa1V6AuJՋ6Amu&6A闰盛e6A#:J6AQi?XuC6Ags'/6A'ɧ@(6A/XO!6A@1O:6A{ò0ȱ 6A!k'q6A kXm6A` d6A^#6A [m%eT6A*(9-6Aq93 6A JQ=6A"Rtb%y6A"ha6Aݐ?6A`}FH16ADuCP6A^Hbb}6A`Jޭ3D^w6Af-#p6Ax)j6A@W,s He6A@Y#_6A+ @wX6AYZdL6A:Z7G6A /_A6A`:6A' 46AJpxK/6A w3&)6A^+qT!rQ#6A+}7$$6AFY{T6AodZ 6A&6AV|$f6A@TBv6Acc榁6AςJ[36A@K6p6A@ϔ6A`2d Ũ6AP]5~6A"9>)6A~ar6A9Pt6A`栰kF;6AR;f6Axǟ%p 6A{qժ6A먞)=6AA= 'h6A*5=w>ڑ6AݯcV{6A >vU6A`Ʌ#~6Ay%u%z6A1]vlHu6A`WS(X,l6A mm(Og6A4 lҥY6AaOc`)T6A@ \n:P6A@L6A`M{>6AMm;gd;6Adj66A`GQQB36A`u眧t*6A@CU O&6As 9"6ALM u) 6AF 0y%|6Af {56AB ۧ6Ap ?La6Aʣ  6A ]u2 Q:e6A`U 56A1<0 "6Aj7 *Ɍ6A@؝ ۫6A`jW[ ϕ6A- "r6A`Z \ 6A ZS ,6A` Na56A`@X'"?6A U |`6A`M&6A`gZ6A)'%c6A@Dmbg6A/$6AO1fϺ6A| $Iط6Ax99:6AWÚM7 ;6A$ ZD6A]6S6ANJ>?6A@WmAϧ6Aང16A61 [6A`۹L\6A㱞*,T6A+ˁ`]V6A`DܦN6A &hO6AE?ͱG6A` ku|sH6Aq̭a@6A`;>~A6A+96A Q :6A`MqU{C6A ptRk6AIi6A扺~K6A Ȟb6A, 6AYq4 lU+6A o~hs6A>1nN8c6AjŖ$Ң6Aʷ06Au QDڀ6A-6A`"(Hc~6A`=PS~6A@DqhC|6A> {6Ai/O|y6Aq6ax6A#v6A`ys۵t6A@:hwr6A]q6Av#Bim6AiDG Nl6A@(}f6AEN&Ae6A>2\sc6A@Q.Ta6A9^U_6AR\6AD#0lX6AlU6A@g+ R6A @ -N6AWn׎Y6K6Al8&G6A`9]} E6A RB6A}dG _nc?6A$ { =6A@V :Vm)6A!p%6A{ "Fc!6A`g?"}YR6Aor"T6Am#"6ANAܪ"R6A"?6Alj #y6AY ?#ӎ6A` ؟ $/Ę6A *F<$/ZR6AQjo${S6AVͧ$a 6A`$AzO 6A ~T%G6AC%16A 뿴%<96A@4*%o6A[h[&=s6A0&y6A '6A*:'36A Tx'"6A8'!j6A Y'Z6A@Cؿ(,Jl6A1n,L6A}]:-[6A JTL-6A@-C6AM-hj6AD0.B?E6AIk./KM=6A@.!|6Ag.-0u6A /B6A@iP/苵6A4m/]%6A/Dn6A`s/r&56A |d50_Yv%6A`Vzh0m6A0e6A-0GU6A c16A`PM16A;1r6A 1WY6A c l1Δ6A %K126A rV2\N6A2gF6A@Y3q>{6A@[K3RJ~6A36A`:3i6A ϒH+46A`jf46A:34R/6A54'6A̶E5jp6ACW5s`6A0516A9,66A[6nM(6A`(6:eѴ6A(A76A7,_ 6A`T{Y7R6A2(8s(C6A`p”8N;6A]b8f{6A,>9!ë6A {996A ھy:P6A6[:`6A:r-6A +;Z“6AڕK>3 6AR6>KK6A>z0 6A`[a-?HH6AR*?(-a6A?s56A.@-6A@E@`~.6Au}@)6Ao>@#g6A`&A{yg6ArA_AJwX6A@S A)v9Y~6AmBQ}6AQ9B} {6A qyBF"y6AaG:B-bw6A`Cv6A)7SClt6AC|r6AeC}p6A`X0D vo6A/eDivm6A@XDؔ޾l6AXDyj6A[Ei6Af#@JEjg6AԣEevf6A-Ed6A@NEqکc6A`&FRa6A2_F7`6A]F^6A@~~zF]6A`$^G߁[6ADn;GčZ6A 묦qGWV6AlGncȎU6At(QHLHS6A7PH3TӇR6A;H6AZG6A`1vZ"6A [dv6AܚN[Hn6A([6A [Gd6Aꈱ[,ce6A :#\\66A S\;q6Aъ\iБ6A@E\h+я6Aڳ\Ddfڌ6A2]96A)2c]6A` ە]lE6A`z]_:e6A@a]s6AУ7^\1=~6A r^N by6A@l^+Ckv6Aj_}<t6A~?_Zr6A@œw_ZJn6AX_? l6A`j_Z}i6A``PAg6Ay!8G`Jd6A``sMKb6A}`_6A`ە`XB\6AeIa{/Z6A`VaΕoW6A^ӉazbpU6A7aC)R6A R[a*O6A:'&b+L6A ?(Yb~J6A_bNG6AdbbNE6A'b@B6A+:0ch?6A+`c<6A`P)ěcs:6A@{jcsCc,76A@cP(%-56A`7d/.6A |?d_,6A`dY)6A eA '6A Do:eX$6A@BQue!6A`ev76AC f-86A`ЦDfTz6A@Qpwf_r6A@9rf8ξ[6A=fd 6AzzgE 6A!KIgA6A Fzge6A@lg(@^96A gIRtB6Ah6AڝLh06A|hM6Ar?2i2`6A`NiK6A>Ui6A&͇i(6A~j$16AعjD6A`Gj3<6ANqkѝ6A6间kd@x6A`;kR6A@"l=孹6A`ʰl^6A(l w6A`|n |g6A`=Pn56AVOoE!]}6A؂ps{6A`A(pk8v6A@b:#p t6Aq_p6A3EqJ5B]6AFxrY6A`Xr<|V6A`]rmS6AkpsюN6ATIj?sE`&~>6A$?tO+:6A>jtsBZ46Aɢt-6A,#7u]6*6Abu6&6A}ufo"6AŏVuUջj6AT|u^>6A)v#6AE Vv!i6A@vk+ 6A3c$w6A<2w㦇6A wy6A >w]6Aox (6A JJx7^6Ax=76Arx>6A@w%y]IC6A`DyeQ̬6Adt3pyf6A XyMv6A@؟y&<6Aez6A`d6A`n`6A0i\6AB|W6Asb>xhߔT6A`xqʇ=P6ADG+9pL6A- ʀKH6AB\D6A`+A6A`$PW<6AL/96A\м١46AvD[16Ai#,6A@PGB[6)6A]zrV$6AFSک~a!6A`ӂ$U6Aˮ0m<6AW- y6AeDbtp6A`NM 6A ĩK6A\-36A!v+v6A@K{O6AaivR6A"s N 6A`vׄM!6AbE32mX6A.^ôD6A`P)SԢ6A`bpug6A@A6AF+6A`Yâm6AwՆ6A_'I6A@,^9/6A︇f/6A)XG^z6A @#!.36AeEh6AXT4^6A$̈iG6A j<=6A؄-%z6A 6t |Dnv6A`6Ti6At]ue6A`AL/a6AA#\6A G?S6ABoSO6AϋpF6A*G5A6AL?Q^>6Avn|rN&,6A`՞4xN(6A O{_}aEt6A`.'L 6A w^6A-6AL:F4i?6A`vW@6Aiteb6A ?;r{6AO$56A@IcG((6A`ѐlZJ6Ao,.6AS(^P6AOOy+Q6AgȨ6A@).:6A`^Wd\6A=}k˃@6A`>ْ˵b6AoԌ6A׌-ľ6AQS ~6A y6AhՓgnu6Ap6A_A)tg6A0Dž']6A`W ҔW?T6A -O6AqT81K6A 85SF6AhG00 A6AQ ֕M1><6ACa76A,26ARR-6A P9$6A`_͖ѫ6AG>I6A;)!E?6AOAa6AffR6Aj ?6A#.B@6A IY_M6AODjH6AzΚ)Ļ6A`y1Q6A\~Q6A`jƩå6AY ϛUj6A++w6A}6Q%6AO軭^036AӜ3u6As/u{6A $U4 (w6A ɃJr6A`,\.i6A`1A\iPd6AX+Ϩ_6Al Y(Z6A JUV6A_譞՞wQ6AԞ`K6A ydmG6ARz*eӅB6A-Xkc86AGट{;46A ҟ]/6A AQ;*6A t&AӜ$6As;O' 6AƵut\6Aw6Aj)C 6A=\O6e6A CGA6A@]æl6A cҒW#6AXMg6A0  ԑ6A i5Z6AQcX%6Apˉ P6A q]u6Aw!KA6AD~sZ$6AK6A ǣB6AL6A`P<N/6A e{Cs6A ݱ/,ʝ6A ˇڤ6A&|6A`'tG}6Am6 x6AM+s6AU˼\oi6A@$ 5c6A@1b^6AWvX6A@޸S6A4 JeM6A`Ǧ'D6Ab6N<>6A5kOn$96A৉.[}N36A`қكO.8!.6AJI\K(6Aʧm#6AǎyQ6A{g;j6A 78!i@6A``Kg 6AR5QG 6A@}Gb6A٬E6A@O7^v6AW+&6AΕp=Ƭ6A NN)6AI% ]P/6A =O6A W}Qs6A UP6AvCP97A}}Ք7A@<.,^l7A`uC7A fvt7Azd-|7Ac`/{7AS{T7APOC0z7AJ2{7A@`LAa7A@:I 7A#!&嘮 7A!) 7A`Qg.v7Ak6.H7Aoy1Va7A3(]=#7Ab:FA$,7A|#|Y.7AWc8jY_07A2,PۅF17A0?$;7AcKT1A7A`=UD7AvJ7ALPӲK7AOwyԄ1J7A WFNE7AaƱ-DA7A $_bB7Aϱ+Iq7HdD7A"t@wĤI7A@_Op.K7A X7pO7A\,/x7A`O@IQNz7AF)>:|7A`7͌ ~7A`'EW#/K8n7A @Gp7A !\07A`x HBU7Aض7A d8ᜭ7A`:.i dt7A@ mKm7A ,+uP٠7A` R'7As\u3S<7AFpWObQ7A`oO]%wK7A­7A]>>n7A e޿gX7A@ɍN*:7A2b8*7A@C67A`7FAp7A HΘ7A I|*C7AH UcM7A`yT6O7AȳY7l\7A-3BIi7A@sٴ.7AuE/E7A`,i5:h7A`]O cm 7A,,͉7AI%T`7A}"[ה7AVA^љM7A@vKD"M7A$Yӄo-7AiSXB`7AHN{w7AkK҃D׽v7ApP767A]FPi7ADj>07A`Tڨ7A˚E-ޏ7A ;; qb$_7A4FZk7A-Ӛ7A|.7AR&7A@K07A}˽7&7AAsOz7A5ذF7A@7*¢݃H7A@޳[CNy7A`{ 7A2?@SI7A,|pGw7A_tz7Ac,JV~7A@CRˡwP7AX:0 7A@= 3Vj7A:Z >8h_7A\fk<7AN|(G7A@ϻp7A96[3 7Ae+j[7ANlro/7Arӿ.x7A%q taoy*7AB [K28A8A7Ʈ8AS~.t# 8Ag\S% 8A@}E7̚8AUq2O%k7A'F7A`mr"za/1ӑ7A "57A۞7Ast{7A`lpF|7A[m 2O%k7Av 7ARɜU^7AǸ27AAEn47A@h?p7ALU% 7A@ &M$7AI0} 7A4 I@ 7A&Fv 7ARɜ&`\5A@0vs&G>6A nؔW\5A@)T5c5A >9P\5A]ٮk5A@hxu*/95A@@,@5A ԏ(k5AOenV5Aҹ o5AoFng5A=v5Aӈ,gZ{c5A@Z"5AغCߊP5Aֆ!($ 5A$}5A@mAӢK5A@ wf/5A .?E5A1j*5A@qd<5A`AB  ]=5Aa~;(\gV5A@ķ=1Z5A/Z  5A><= 5A`9x 5A xó:5A@_l*x6AQ55z6AWYc:$6A߻ 6 6A`<Z?6A`,RoA 6A@Kh}+)8 6A@Vt&FDGS6A gX>_6AAZ/ݤDQq56A="u_uI6AVI6A` Hj6A@5ӿ6A`d՘<6A—e(6A " gaH6A [իE6A&{[0 6A@~{ҜV|!6A@vD}*0"6AWIv ye&6A@I5Ϲo)6AWnʈ-6A`ܭ6ڎ&16Ah16A"M26A`0C56A`c[<76A ^ #W86A[3e86ADr=6A^Z^ϰ@6A *U 3B!uA6Abks1FC6A?G6A ],SG6ALs|H-S&H6A_~>K6A@`5"P6A Pv,k0U6AˮVFYY6AKϛ$aY6A ,\:S6A{3c R6A`LSM(Ea6A8 GB1o6A@]-t6Ak0)zP+z6A:ĦerOٛ{6AkS[/6ARh4 )6A@pN]66A Q_&6A`6%]hC6A f\:k6A@Ǥpz4E1o6A`1^]F6AOn?6AXT>$6AU 8,Ŀ6A;U;6A@E| 6A ȷ'*6AOãR6A /vM޹6A@Wvt+6AB5V6A H)EC6A 01G6Aۜ6AC]#d6Avj6A@ľMSz6Ab|Xu6A5wUi6ABfz9ud6A ^ŪBS6A@SPjM6Av]T|<6Af8p776AI\&6A`6P 6A@տf!6A)vK6A 6Zg6A$gڌ[Z6A dd-RH'6AwU>q6<ܶ6A`Q!|M˶6AʘC‹Aƶ6A` ?1x`6As6AmGA6AE<9[96AvH%6A`Н6A@3u%6Aֆjĝ6A ACpY6A(_)#䔶6A`} J6\6A@@>P6ARtmq R6A }Jybw6A掝q6AS,m6A\@pg6ArSb6A규[}o]6AY,X6ASfo S6A`BڐI6Ap] }D6A`}e)JZ>6A @]096ATA46A )G z}/6A9)6AbƩ1 $6AՂ\B6AKb^մ}6A`Wr76AdLB 6A ^9І6Ah(L6AY7|nhK6AĬQ3>6A ` &Øص6A˓zeҷ,ӵ6Aq]ؾq͵6Ah9 ~ȵ6A$xV56A}#ɷ6A^٬kzR6AɣcOn榵6AJ6A$6Ռ<76A@Ky16A_C+6A@Mnz%6A y7b6A@B_6A Bᄂ6A`維( 6A@#:=C6A ggU6AQ^D6A@(6A {_t6Aj?k ܴ6A 0Oִ6Ao-< H6A@QO,6A{viw6A`V7Ou7Oq6A@.bWj6AQ@'!d6A )[.TG!X6A+ R6A2hJ6AY$=6A`y4p676A ,@}06AQp*6A V|$6A@_?D噢6A\*]I6AP36Ab= 6AjcHL6A@&Y,6A@: "7V6A`\ NǂmB6AИ6A1~%6AĒnڿ۳6A\1dԳ6A`[VD?}Qγ6A3~1j/Ƴ6ANA6A@i0Yֹ6A9t&ó6Ah0h6A`5Z&6\6AXI6A٪=6A9ך)6AXx6AVx!Ã6A@`Yl}6AUvv6A@t>,Ia6A`喙n[6Aa1WLF6AY@6A@&t;[$6A!u6Awx[V?6A vthu6AXU< 6AqM5겢6A֒6A@GaU6A^ 6A`Nh Ҳ6A@$6Vʲ6A`L J6ò6A@'pp96A ӵ6A N<Ȯ6A2Q 6A`mPpG@6AZnxE6Atw'+a6A]֋6A`x{d˄6AhQt~6A_*\v6A KFZ h6A,vIa6A ees9GM [6A@3-1WjS6Ab+E6A D(|O@>6AH (06AU~,3)6A&ȳIm6Ae('Р:6A 7H\v 6Aߞ)6A Z06A"]6A@Q!6A@wkJ56Ak$6AZ)k۱6A bԱ6AQ02ͱ6An:ű6Ac6A] jnԷ6A/*0h6A؀t6A੠I `I6AR*-6A<T&*6Ami`Vƍ6A`4[`e6A L^6Abٔ+w6A@;4$q6A@)ٰ$j6A22cqb6A@bw؎H8\6ALvM>M6A0vF6Ai{ 86AڈMO16AKA0$6Ah1x6A, 6AS86\6A$mW6A$+6A #Usp$>6Anޖ۰6Axؤح԰6A qݑŰ6A #i!S 㿰6APW6Ac@| R6A)ڛ6AN)񇜰6A2K9c$6A`>az6A~쬆6A0ߘ6AlQ5x6A`1{:r6AU/k6AYSc6A`AKj\6A`B1"khW6A +'P6A řg,&6AP%V> 6A`nU]R 6A@<]zbTsp6A~O|^F/6A $HH6A}} 6A`1;ٯ6AySү6AҵA@<6A@hBVٮ6AqOy<_6ANM6AϮo16A %&͋6A.k}6ATj@\Bv6A^1Dfh6A@‹%n_a6A`-%EhvZ6A`.j6S6A@ߞ0d"L6A\qL:*gqD6A<<c=6AJ7EG66ATGU/6AOG(6ASP76ATUC6A@K\gZ'6A-_T> 6A jiV6A`ÏkN96AfkΛ%6A`tҮ6Aglz̮6A ִ島6A@r'G6A.56AΌ6A7>:ZM6A ^496Aҋ~6A 9TU}w6A` op6AK7(ii6A@߫ 6a6A ߔ"> S6A@˜8L6Ai6==6AJf76Aj{6A CF{76Ax@ 2M06A "18 q(6AU$:.=$L6AKvG6A`x476A ) pJ(6A@rFm6A ^Lj 6A =l7o1N6A{cz%#}6A-^N/w6ASp]o6A@]ɓ_5h6AYܝa6A?>YՒY6A tS!p>S6Aw-K9K6A`MGnE6A*RL=6AYF>'O76A>Ft/6A` u@̺(6A E+.8;k6A <Ho^6A' 3 6A@0y5-(Z?6Au-;6Af/i 6A 'ۼ6A`)+T6A ?A6A`"٨6A,G ~Ө6A@xxgl̨6AX_Ũ6A@W6AYm@6AʊBBݯ6AD4*6A) R6AOZY Z6A@XJ H<6A \;6A@0O]ň6Ao+ew6ATfo6A%6A@_a66A0(6m06A |(6A@M uW!6A@6A Dr6ƨ6AN'9! 6A ah6Aj\6A <<:~I6A@mzL46A 3j*6A# –cڧ6AYKhӧ6A|yḐ6A wzŧ6A`c!$yu6Ame/¶6A`>!HXU6AR6A`5' 76AH~dp6A FJ6A *{=tP6A\M"}6A@ƏKw6ASo6Akh6A9zha6AEZ6AS6AiE6A@#x>">6AT66A kO 5/6AtṬ*)6Aم!6Ak v 6A~.{ .6A%6A󽷱6A=6V6AGHo?6A 8#ۦ6AqPO*pӦ6A d ̦6Ag4&Ŧ6Ae P=6A^>Iѷ6A o{;6A{꤭dDW6A@Q:b뚦6A`{j$6A@vٴd6ANU~6A;9sw6A@Goa6Aȳ1qH=76A Tvq6A]1ּ0r6A/qҌ6A J!*GEx6AћJG 6A@NfdQ՗6AKW6A+u6A@g^Vy 6A2q0as6A|:Q4 6AFMT: 6AM׌zdXb^6A6A36Å6A`. F6Are9!6A`܀8qM6A\!"J!6A OA+b6Aui#2y6A`JVв[6ApX~6A@E{d_~6A`+\&/7hf}6A KEk}6AƻVF|6A+Յq=.|6A ޻bM{6A@p%neO{6A`9Cz6A@vj#Xkz6A Ƹk~-ay6A@4tIey6A`-0ypw6A`mi8g~|(v6A L'iu6A@kV;t6ANt&w1t6A`yļWܷs6A Z+1r6A653Zr6A@Czwɸq6AS1p6A3z.[1H6Tp6A Nΐ#Mo6AGtZtu!Io6A3h&yn6A.an6AC9"m6AdDXN\5'&l6AsD~,k6A3 x\%i6A\a`=E i6A`f!c0qh6A`Т-C_h6A ruTHg6A^9/qf6A`kP:Pf6AV)f6A;Qr(e6Aq}*fe6Ae=e6AqQǓd6A 2[G Cd6A% oZ#c6AB U c6A@N|IGCc6A wҮb6A@S4xLb6A|~JcOb6A tIb6A`S ꐣb6A@4T"2kb6A@f$ܿb6A@S(Se6A +Qqe6A v0ve6A 0jqe6A k S]?]e6A`]WC@e6A`la;d6A 7@p d6Aa#̮td6Am )#d6A@ c6A0fv1c6A*môb6A 7/Ca6A@[ԛ8b`6A8en`6A`V6`6A`^$j_6A5^6AӦzXRM^6A@x"< \6A )Stp(\6A@~-h[6A N'Y q[6ABa^#Z [6A"Z6A`L[v63PZ6A@S'Z6AգD<]Y6A,d%T/Y6A@a X6AԀx{iX6AwOX6A(Z6}W6A*Kma]W6A <bW6A`+o oV6Ab~+jV6A@': V6A aoۄU6A0UU6AtGT6A`qz[]$T6A@ H |qT6A`JyT6AdѻS6A;$9$R6A 1$R6A`R$}.Q6A@ABG8u_P6AXu-[:eO6A`\j VnN6A M6A=7ōL6A.1pK6A`$i,mH6AF@ vG6AVr(oUM{G6AvM'MF6A4 E6A&n&#aAD6A7H$=yC6A>aބ%Æy C6A&1`hMB6A@0vs&A6A [*&ƗC@6A Xn;&|B@6A%媂?6AJ$q>6A`@y@$l{>6A@X#/!+=6A`"_z=6A E&'"hˍ;6A@ _0:6AEK 96A`ق=96A`a76Au08+76AG66A@4vd66A`WYh=36A`"p]=26ABZys<26A vƹ˥?16ApbKB16As+106A %S06A!Xw/6Aǘ Ud.B/6A`yI().6A M.6A@1h-6A@YJ[-6A+nv,6A&H+6A\2%$+6A*x}V*6AG)6Ai](6Ao!Z(6A@Y'6A`'Hڗ&6A@IXoʩ.l%6A4E1$6A0dq:B5#6AK"6A`a.)"6A"q-!6A+9X !6A@8` D 6A WVXw@ 6AWW}j6A ޵C,6A!UqIl6A`@g6A@3k6A`׍i)Fa6A0hp6Ac{F6Aڟ]a6Ao3_f6A@³Ob6A'LB6Ai7K6Aa uի)6A@k^7‚L6A10~6A رձ6ANm% 6AE|₊6Aࡾl{#a6A3w6AS%H2>Dԝ6A@dBzz=6A@S$CR[6A@r.6A@2:Z#x6A1<6Ab Ž:*6A 8۱p˘6AyO6A *B6A`36A8+6AQE=6A @Yh \F6A qu6A@k06P6A#zԞ6A4Ο>پ 6A<:% 2M3 6A`䵦R 6A@!kɋ4 6A`x̬ 6A@NdW 6A_sg6A@N|]6AI0xP[6Ac轀6A/#L>=-%6A/dEyj6AP`]5AHɿ )5A />5A<~W{F65A`),'I5A4a5A P1WxY5Av>5A6PQ_5A s.35AgJַ8qo5A ~"Q:5Ai`o5AhA%U5AVs40?5A HQ~э8D5A`,if5Ay*W5A o5AnAp?/5Ab (85Ayyzq5A`nKme5A ^:]/o%5A{_}^5A ("`5A-}G5A_pULq5AdD R5A`4Q}̚)5ABF@n5A@3!5A@^2K85A(wǕ/6T`5AR C-;5ApDyE 5Ap9 c5A`ガÝ#5As([5A=\5A T5A`5_hfQ5At5A f%`Ȫ5A5A!O]!:5A R j5Ac ϵź.75A%~NED[5Aر98ݕt5A#̣nQ5A@|lE_I<5A.]gz,5AL,95A g5A ٦ ]5A .L삇55A`@o_[ 5A<LO: 5Ae3.5A!ɯI5A@#BLV5Aî6.5A`'ysQz5A`Mk65Aɒ5AN~ͭ䜡5Ap&`5A`ms<5A`Sgo05A$+5AåT5Aڡ^5A qӶ5Ad9:rX5A Lw 45A((5A@Ǥ5A j{F5At:!5A Ӓ3(UL5A/ѣ/l5A(@q3TO35A2LMhd5A@Ґl5AZq5A?N5A@b5A:tP5A49(N5AjNА5A`ux}5A +/_c5A ]18WK5Az|E 9<5AYnrq+5A7J:25A`W*pɷ5AڤsP{5A`{ W5A2׽5Aa#5AǮ>bӆ5AX{ O5AEo[;5A8Ր# &5A@oؙm}5A0"A5A@De5Aℍċ5A6'z5A//5A`̌hLA1̍5A@ {U5A1-{5A@ϒ "oar5A0oGi5AWs3]5A5އI3S5A@FWv'H5Apu2:?5AC+5A`"T^ŅB5A`S;5A 21 f5A@7J{5A@h(D5A[p75A 㛞mUz5A1lI5A An5A@t*:5AJpiK.5AD(iCN5AXwhτIq5Ag1e5Aibgl:5A fJ5A@z=fӢ5Aجe5A Rup#e%}5A@9d wl5Ah7c+u$d5AbG3W5AZ!5A@Va2z)55A`C`l.5A`q`䨥!5A _\ 5A __E5A)n_lt 5Ag:_~5A^H,5A@97]tv5A K ]s5A`ŧ9]%?5AE h\5A`X\ ;5AX[ާ5A@e[&Ȝ5A  [.}%k5AѩZ+ 2ׇ5AsZ>~5A G,Z)?^}5A9~'Z 9$u5A`Yi5AE|Y<d5A@v=Y:?a5AYY_5A ٲ Y=n:\5A@g{Xď$W5AA8X';;T5A@~ͿX  M5A`iG=X'zE5A`AXW-=5A W)05AsyW&5A@A.Vq25A(GVXVO?5A(Uo 5AbPUA:d5AW%Tk\5AP'T*Au5A-*Sr+5A:Sx~45A xءRWK)5A` +R>5A`Q<5A3ZiQ05A-Qj5AP15A@ʃP5A 4 P /;5AOG+c5A,drOO5A@\O&?5A`⭙NS- 5A Õ=No5AͥM95A%Mex2l5AL/X5A@7p&LW5A@:K~5AvJ%,5A@>nJ"Q5A(I5AxKI ^H5Al-H 5ALYHN5AޫGGhu5ANNG 輗5ArF2Z5AdF@5A톸E5A LE9O\5AIDS5A"D05A isC_D5A@NQCC )ƅ5AwB5AܙXBo5AAυ5AvJA,5A:-ε@95Aen\?t5A a>S6'5A G> l5Ay=5A*<OCH5Azz{I<wȺ5A ;d5A@>1;I5A@P:>5A :_5A>f 9/;;$5A`r85AqxC7[Og5AE3R5A9/~c~5AŸ8-&9tw5A`+ge5A &&([5A.B$M5AH"ϫx<5AT 1(5AP| i}5A>Ѳ5A#_f5A20[Cw5A|Ts[5Afj#\:5A8=)5A u2.q5A@՜ O5Aw }j5A&^ 5AK ,<5Akq55A|>:5A`£N]|Y{5A6H6p5A`P 0 l5AEf5A)-]5A ZiF.5AYA^5A pS5A y}S5A c5A ^AU5A'Ś5AX_'dt5AǕtwN5A%q95A"bN5AsT5A`ҥV%w5A``D5AlE5A`'\L&m 5A W)]5AȤ-bN]5A@Ա+f]5A`1K%5AP.Jڐ5A@Q9o/.5Ao~c`x5A`aڷEr45Aն/Ut5A`"65A?5A@8"(TY5A6M9*5A@!ð5AlG*45AP FX5A }}zJ5A I q35A_*.Lب 5A¦I)#5Am![K5A#u5AuYXIUOk5A *suGZB5A [hu-5A\5A@)T5PeFi6A@'MwCYbw6A >qt(,t6A >qtO/6A`P"mCYbw6A+$]6A@'MweFi6A@ X6A 0(,t6A >qth 6A@PS.7'6Aۛa ʁ'6A@PSg7՚6A@$?> 6A6;lߪ6A`"8_̙!6AۛaNI 6A@F|u6A!U=% 6A CiB.7'6A Mʁ'6A@PSP>@7A`R8k#7A+%FC' 7A`R'%7AGb>@7Az; mi7A+%F8k#7ARkRv #7Aҫ!8C' 7A`R"*e׸6A@s0TT/{7A`/2{7A@`LAC0z7AJ{T7APO/{7AS Kl7A`r&J)7A@s0TT@5u6A`9D F6A@!7!+ Z#6A{Q";276A`5;26AYRb]6A \]nJ6AT,f6A`4"N:06AnSq6AР Ɠ6A3vВ輘6A`FƟ3o,6A ҳHD'"6AƦ-Bfe6A`me"wIB,6A`d6A@SZX6A@{6AJX!"*e׸6A@Tn'<6A`B{6Ay1|ߘCw6A@RA\6AG+flX6A9r8Q6A`E_F98A6A@>@hWLL6A䐕gH=6A`D%td@6Ah6AӖ=,o6A 79J6A7Xg6Aq&^ ڥ6A,Hw[_6A@b6A`󨱆#Vwx6A9BA{E˘7A@RuXEjު7AJ|q;2{7A@`LAPk"x%7A 'I~+7A` C*7A 'IT[(7A z`k"x%7A_~X &7AAsp)A'7A~+7A` C*7A 'I46A86AcK "2T6A~6A3>a6ATjm(06A` ݊8A/sÔ8AͅL@M8At'@C8AsD]8A@tޥD7•8A-Kcqi8AE%ԗ[uV8A^[J8A֞ڂ'd8AdAfv{Fr8AVM^|8ABFt:[>8A@c4Dۗ8AT\8AcA[ 8Ax6<8ACoł,8AI(;`8AP z'ˬ8A5`+sF]cF8A[|Wq8A]68A@بՋ~ 8AoC #y48AZTxI*h8AڻR8Ao48A;nx#W8AP^d<8A@ZOiJ8Aꆲ7 8A OVL7f8A{JpE3}8A@J[8A@\Kj,8AIb=oF8Ava &8A\L_O>H8AC9-cH 3n8AU q 8AՍЯ @8A8+F8A8A`8A@ӮE| '8A|az '8AY ?F8A@k,EkI8AQ[+O8AU_x3'8A9{ < `8A@m_Le<8Ad?_6I 8A9=8A?wѱ~@8A@ 8Ac]ƃ*8AFMfL\L*8A>0nBͭU8A@ZA8A߭(KC8Af? 8A108A@yK8A<Q},8A@}#xr8A\@98A1_TTD8A@o.48AAs=8A@wnD8A-|t8A@r!N8A]=̜39AHCcH9AoÌű>9A@7^ Nxl)g$9A8Z[2È9Aa֎9\G 9A@S49A@tVXI=9Agdda.9Aΰ 9A@ J9AX a)9A@].QȐ9A@X9A'B9A@ag9AN:ċ}9AS8 *29A1^sN9A*-Ld9A@4lNWuIܜ 9A0tcQ 9A!k T 9A@}G )9A5% 9A}[Lpl 9ADa~g 9A?m̲ծ 9AajM_[ 9Auyk 9A`' 9Al 9AwVؼm 9A?hhT 9A"8*t}oO9AP!J)9A@4RF7r 9AH*"CE 9A@U{<ϼc 9AH"JLf89A#ӊNJ)9A7 9A;GR9A26F;X9A g,GY{|9A#Y19AWme1s 8A+|~<48ACB]Hw%[ӎ8A@ԕ.DIt8A2F-a8A@M8Az~>8Ajauv?8A>%J8AKPZ8,8A}>6g8AOk=Y8A@ANvL8A -0s8AԓJ8A+ޔ$8A@\8A@^iMի8AIW pk8A?O8AT9y O=tN8A[%26_v'8AS H8A@xߥ?\*8A #k8Avo>;8A@i ]8A@{!m8A@oMW_8AJoz28AW6"58AB@dM5p8A@U<9A@ \}809Abj3R`9A3S7թp9AJ]9AUao$9AH9A@^r9Aye Y9AyNdx :9AY yϜ<#9Aٜ8s9ADxla\9A@A5#9A$4Սظy9AHD'H9A@֢exF9ABLM}vX9AhMq9A@d!e9AMdm`9Aw,2[*9A@sV \wL9A;w9AM9Ai}:Aj]N:A /kݧW:A9ID2:AN%:A oD:A  :A GSU :A`7p\-m@c :A`C_~ :A oa!V{4uD :A@}iAn :ASw*;H :A$K:A钀.:A@LxbP:Ak:A2n>_'W :AW0:A C;F v\:A@-EZ}t:A@;n9A{ 29A`879Aa<9A< gz9A /DU9AsXf%SL9A@9A ̻̽|9Ay|\*9A~{ww9A>ZsAx9Ad9AvK569AĪ 9A`]&X\9A(>z5Nc9A зʦai%9A 3>HƟ9AnzY69Ap9A M-D:9A`k*vGi*j9A 9A g@L(9A4jr_GU:Aucv:A-T\k:A`sU=FH:A`z:T[:A --v:A9d:AO2|\N(;:A`%Zh :A#U@:Ax:9A"9A`.{}zk9ApS-9Aۓf??@i'9Am1'5Z.9Ar䈯9A<BJk؜R9A2 9A׹K&>/9A@d9A'0/l9A%si?M{|9A?td8 S9AV$d9A&מ}kκ9A=~`+9A@T}%9A@Ã!}9A@"Im9A>umJݮ69A@s6T9A@QUv9A}չ?*N9A@my\9A)•-? 9AqU 9AbKw 9A: 9A@.x [fm[9AN ,A*8A@Kt]k9A@RbSAGR9A26F7 9A;T 9A;كy;9AzXfKJU9AkV O09AKG/!n9A@?4ZGT9A4e,%49A]p$9A@͊~+9Ao N-9A=ar,09ATQ)kB19A@$B$39A^ o59A@99 D;89A@7h799A@qvx6Y:9Ac\`I!=9A@jL9A$2@&jK9A*B9!I9AXw[*I9Aw9AMLSpW\;9A GDWmV99A 猳eNy;9A Jm'?c:9A`#$ x[49AJN?49A`mn_0^29AX X[09A`;+21$I-9A@E$-9A ]C*9AE )9AF"_WÝ(9A)ZIh0&9AîW)!H4 9AR^ѽ9A%ch9A w59A@'yX甭9A@'qyl] 9A`YwڇJ 9A'{CHeOf9A@9#탾8AC?~7bcC8A2Оxz8ASƗ8Ap1Ca8AgOӝ_`}8A@KYqw8A:K*=8A_::?A*8A9:iH#}8A@#whzX8APZV|8A o@=Ъ8AU3x* =8A  x8A` 8ABTBH8A,з;a8A`P  $8A`QN8A Jex8A`],8A]dO;j8A Qo5p8A`TɳY8AP[w&8Ak[ BBC1j9A=FiR̒9A@5%Cw1( 9AizC 9AV~#9AL_ j9Ayv`9A_sP:'[9A'ƺ =[9Al/I 9Axb9A@jG$a 9AI?b× Ht49A h>fyK9A`S 9A`óYJLr9A9e 9AF`,!N9A[9AR*П9A td9A@Cp 9A h$X|8AK2fd8A@4[ӛ8A@n 88Ah8A@Um y8A) eG]!vF9A /!g;X9A g,GR9A26FJ9ABT @HK9ASK9AeRHK9ACQ#K9A[QШUL9AJJQkiL9A@QL9APJ`L9An`JP~`L9AsMaL9A rL _L9AmKdL9A{GL9AuEK @L9A)`qB?L9A@?L9AR=_L9Aғ 3<$2L9A@xr9 L9A@y+H99 L9A: bL9A9;HL9A7; L9A@1<K9A=4K9A(^?k@K9AmAQ $K9AJI?NBW7J9A>`BJ9A'OB>gJ9A@CJ9A*>6E( @J9Ac@vHjJ9A@9L1`J9Af`MaJ9Am(Ox_iJ9A DPRJ9A@RJ9ABT$9Az1;qXQ$9A@J|gU!9AN~y5 9A¹x!9AU&$9Az1;q VN9A@HpOg9A@0#޽ 9A&v5 9A`e JM 9A@ӗ`K3B9A@>gnb9A`M~bycQ 9A_:f 79A Us|]99AuA|j9Aɔ:O9AʊC8)iu*&9A`?9D'}'9A ߆uM?rW*9A@Pw%c'-9A "+&1B/9AdI86K.39A'!+39A@F'~29A >+/9A@Kʌ,+9A$Pf )9A<C9e$9A LhtC #9A" UqhA"9A%`{G陜N 9A@v-M#9AcvPTm9AFLݍj9Awv^9Ak]{9A@݃A ^w9A4MK:9Awk;} }9A;l'0h9Aj2.F9AN g19A@Se/9AF{4hQ) 9A?kS 9A*jqSb1P 9ABW~? 9AV[D 9AsP:F 9Ah_mJ 9A@Vtc* 9Ajp$ 9Adnp9Ac0aUd9AJ%᚛9A0 [%H9As}D+F9A@YY@'9AnvI@9A MA.=z9A@mI@9A@|9A`k: VN9A@HptI89AvWCh]99A`*I*h;9AZf<9A)r :};9A!TIB{:9Agy"89A1G0"QF79A@7JtI89AvWz{8A"!i/^rr@98A@EXyжa8A`'t^\(Ť8A@M@jV8A@*Unz{8A"!i/^//48A ȹ8A**y8A@E'Tɡ8A@<ւ+-s#R8AaDd 8AqBz^8A8Aٲ>xA#9An}~9A`~Jp{m' 9A AAbE 9Au_HX 9A ,([9A N\ 9A"{T9ABwUpOi9ATzB9A{Y_37#9AҊtlF[%9Aa9D%9A`Z}#h&9A@_GnB*9A,f޵qo~?(9AxM5#9ACAr[ 9A@QInDZ9Aպ^b\E9Ae Y9A ^9A&:9A \J,o9A@") 9A@mT4ʴV 9A <n 9Ai Y+`) 9A6oQh] 9A`I6E>gJ9A@CJ9A'OBW7J9A>`BQ $K9AJI?NBk@K9AmA4K9A(^?K9A= L9A@1o6A ]w6Adǿ6AFz֯Wn6Aފ.Z6Apq6AԺ7@16A)˰6AZ#R6A5C6A&eEr|6A{^op6Aogk6A@y!d6Ayر)k^6A ?FX6A@C\,>R6A%d(xL6AIQ_.F6A lb=' @6A@胲K_36A`Iq,6AX7ײ^K{'6A d`2!6Abq6A`C(wl6A@6AzG6A,L$b\6A*zh76A`q)M6A^.6A@[?rZ6A.56A>8Mv6A`<ϴ Q6A ˰n_ө6Ab/2o6A@r[h6AH6A{yR)C6A@z-89<6Ax]q46A`[ZP6y/6A>bԶ-"6A@ap6A~@k6A`gccE6At]6A:w/6A̽^6A@ѷlF'6A.Sg6Aس 6A T''6ARIX@ ) Կ6AeQ^6A jR%6Ap|$6A*`6AFZ6AE=a6A.- 6A.(^5'6AC e'}6A'U(p6AIqHi6A~%cޑv)\6A7xiU6A2eA6AߎӹЎ:6A4 Of 6A஬f5Y6A`-@6A/g]׺h6A@x@6쎳6AIڞ,6AYûz}6A@ͻUh6A- 57a6A *T6A".,BM6A ^8p?6AWG[$+w86Ad>n16ANqv Y*6A@("]#6A@EɜD6AuS:6A;J&6A2{Ǽta6Afټ@L6A)T8؇6A o&7s6A` -H;a6A H6A*#$6A ߝ476A`U>Jԭ6AOѻ6AYϴ6A `06AQ:lEJ6A@0b~Ơ6A,ƛ6A@\R 6A`?DF{؋6A`S\}U&;}6A뽽)vv6A Bǽ=]o6AٽJoYE6A*D_s>6A_$A"6ATK웏$6A$Rt;6A`U\; 6AhE+6A}Oh\n6A yZm6A@b{ڄ6A@.:P܀6A%Jî6Ao6Aj9OzfF6A@eҾLv6A@Ծxѣ6A F}g?6Aӌ6A` E/ׯy6A {aOr6A9bdK0k6A\ޯ]6A p7%EU6Ah'΀N6Ax{1gpH6A 8 A6Al:0]96A`3OfD,26A+`Fl .~+6A[Pj$6ASRs?6A/KQ@6A `E[l6AP:_ʧ6AhM6A\mh]$96A #r\Pp6A}v(b6AfV:dz6A q,yEk6A=]a6A@f>66A G>6A@pN]~/6A*q{8A1QH78A9:iUA*8A9:i*=8A_::?Yqw8A:K_`}8A@Knw8A|u8A1Q?78A_ 8Au*8A38A@U#i8A Q,)UmX8Am0 _y8A`R*|zJH8A aMU<0c8A8!:8A@H|'8A -^8A ėd*v.f8A`.5=+8A̧ "|A78AX׊2(g_8A HcRn8A@܇@|08AO"+Yi8A qH/8A&k6 %p8AW,B6;|8A`H>F@O8AQ_S±_l8AfDŽ^8A7O}8A@m_f۵8A|Z78A`%70?8A ?8A ٶ 8Aہr8A Bv?'8ATlpb8A@f̎pr8AM  8APa%T\#8A@5%D(aK8A@Ll1.f V8As7;b8A$FOr8A YQS`}8A OeH&8A(m]ѯ8A qn%cY8A_HŮ8A@c?sv8A Fؼ1p?8A= J9ڧ8A9ֻ:Ià9,8A+?e'ˊ %ˡ8A`.):8A@v6i88AcFv˘8A1QH.8A`Va;{8A٫̲8Uo8A`}ܬ1G8A`MvÙ8A Yݫ)A8A`Ѧkh7tO;8ASP($悭8A`x<H8AAE[ajE8A}8A \`58AK/b"8AC|ϟ1 8A`{L I8A`ߪr[A8A.*)Aq8AYB%0͹8A`ʓj]4K8AA}Yv8AXE.P~8A L8A{T/vgK8AatA*8A9:i`;m$:A`~J=c]GF:A`b7)]GF:A@Zy*:AwPNy*:A`wzPсw%:Al`"$:AhEa(5$:A5bRZ5`$:A"c;m$:A`~J=c8j$:A@m]&MqI&:A iJP{E3(:A`5uOϾ>Λ):AuȠD(߳*:A`Xqu1M-:A >Lr6+:A CDM):AF鷮^(W,:AFB-\:+:A*#NwF,:AYG?*H/:A`b7VlÛ0:A@=O8[wx1:AKBC}>?1:A`]k1:AlJ )t12:A}B!2:Apæ}F4:A`GSh"Ø4:A S ;:A@]v@=:A@i1<{W>:ArbM;B:Aep9I1Z C:A1jJR2 D:A MS>D:AǠZoR̒E:A/NtkRF:Ak1R4Z6D:AެN:D:AЛ0SE:A`]GF:A@ZzMکv8A$@$v˘8A٫̲8,"{8A٫̲8.8A`Va;v˘8A1QHV֑8AqHWʫ8AOĔ8A`kE`n2^8AzD|\8A@*N6܂8A}8Lyڌ8A|Z 8AΝ:W8AؤF9ח8A/RZ$q8AID3%8A`$3=s 8A 6R8A`G/À8A`AdY䯂8A@u @Oc8Aɏ\nz8A "}8A@HN*n{8A`k?+y8A jb n8w8A$@$Mکv8A!(w8AdSKc9 x8A 7B)XΫy8AkfYռ~8A`4zk0$G8AgAkSAB8A@aI@\?8A@ 7T{8A٫̲8: ~8Aqk&;8Aen78Ai{y,m8AvצE[`,~8Age|8Awwe# y8AT n ^m)y8A%z y8A@ L: ~8Aqk&mapnik-3.0.9/demo/data/qcdrainage.shx000066400000000000000000000125641262555547000175040ustar00rootroot00000000000000' Wr4A$@$^:Ay:@2 * `\L0H|XX4pHPH`hPlPP`xx` XP!P"h"lP"`#$@#hP#P$h$|H$h%4P%&&*')H*>X*X*8,2P,X,h-NH-.6p.P.P/R/h0b`01`2&@2j3vX3H45 h5v6P6Vx6`76h7H7(<x<`<`=^`=h>.>CjDEbFPFZhF`G*hGHG`HFpHpI.IJ^K xKHKHLMXMvNXN^HNPN@OBOPhPQRXRSfXSTPTXUNXUXV`VjpVYPZpZtXZ[P\ `\P\]t^p^t_0P_h_X`LH`P`haXhabc,PcXc`d@dpeP`epf(fPhHhTXhiDHiXiPj@HjPjklklxmPmlPmpn4PnHnopHoPphp|Ppqdhqhr<spsXshtTPtxu$ vHHvw(Hwt`wxyhpyHz(Pz|{p|t}`}th}`~D~P<PPdXXXxHh0H|``D hpHP`tP|`tXHLJXHBPP`NXH.X.hPp&PzPpBHPP6Xh@rPHH^PNXppHhJHhPV`v`hFXpPjXPhP`>XPXJF`XXbhH`R`p*xdXx<8x`pp`xh,Xhhx<hx$Hpxxh`X(X`xdhdPXPhHh PtPdP<@X H@0pähXl``4`ŘXƠPhtxPBPҖHx^HӪNPԢ&Pz`ւ0׶Hhn`X.Xي8$P\Pްhxt`P,HxHPP@xh|hHH8P4HhpHhxhPXHXTxh<PP`HH`hdHD@HL`x,@p`pHXhpp|Hh4`PXl 4 | H @ DX ph8XpXP``PlP0H|@DPLXPXX\X`"$hx$&h'fP'p(.(X)Fp)*f*p+nX+`,.P,H,H-`-~p-H.>`.p/X/r`/p0J@2`2P3FP3h44X5F7X7v`78`9 P9^H9`:x:H:X;2x;P<X<^<=~X=>^P>?~H?P@`AHACD0D`E(*LVPLHLM`MXNBPNO"`OP XPfSJXSTUfPUVHVxWnpW@X&@XjPXYJPYHY fgphphvXhPi&pij6PjlPlPmNhmnPo*hoHoXp>ppwfPw`xpxy&Xyxyz`{{|X|zX|X}2}h~*p~X~H$Px@` Pth`DXPXPppHh(`PP&PzPP"PvPX&``PznXnXX&>P.XXx.`PP:hX`fphFB.XP`BX"PX8XHXX`pXX(`q34&`YPYhZXPZ\@P\]`]|^ Rdvh ,rJPs`z|`~*zmapnik-3.0.9/demo/data/roads.dbf000066400000000000000000042316741262555547000164600ustar00rootroot00000000000000jWFNODE_N TNODE_N LPOLY_N RPOLY_N LENGTHNROADS_N ROADS_IDN ROAD_CCLASSN TCHN NAMEC<PROV_ENC2PROV_FRC2 0 0 0 0 825.29955 5144 1948131 3 0 Quebec Qubec 0 0 0 0 3073.20969 5146 2048131 3 0 Quebec Qubec 0 0 0 0 7441.54776 5153 1728132 2 0 Quebec Qubec 0 0 0 0 7341.42397 5154 95440 1 0 Quebec Qubec 0 0 0 0 631.27294 5156 1664158 2 0 Quebec Qubec 0 0 0 0 143.77400 5157 1771158 2 0 Quebec Qubec 0 0 0 0 6806.09648 5160 1791138 2 0 Quebec Qubec 0 0 0 0 27581.49124 5162 1846347 3 0 Quebec Qubec 0 0 0 0 1887.03063 5164 1664158 2 0 Quebec Qubec 0 0 0 0 9025.23127 5165 1053311 4 0 Quebec Qubec 0 0 0 0 2334.83991 5168 1852158 2 0 Quebec Qubec 0 0 0 0 3569.50842 5169 1732132 2 0 Quebec Qubec 0 0 0 0 7757.73731 5176 1661158 2 0 Quebec Qubec 0 0 0 0 437.60659 5179 1145158 2 0 Quebec Qubec 0 0 0 0 16410.91568 5181 2067337 4 0 Quebec Qubec 0 0 0 0 904.11233 5188 1765132 2 0 Quebec Qubec 0 0 0 0 2829.76497 5189 1738132 2 0 Quebec Qubec 0 0 0 0 232.49220 5190 1766132 2 0 Quebec Qubec 0 0 0 0 18079.51802 5191 631347 3 0 Quebec Qubec 0 0 0 0 16559.71016 5192 1957125 4 0 Quebec Qubec 0 0 0 0 930.18278 5194 1762133 2 0 Quebec Qubec 0 0 0 0 512.43244 5195 1999125 4 0 Quebec Qubec 0 0 0 0 3815.39575 5198 1829311 4 0 Quebec Qubec 0 0 0 0 19450.34371 5199 1849345 4 0 Quebec Qubec 0 0 0 0 1406.96249 5203 1829117 2 1 Quebec Qubec 0 0 0 0 495.74948 5204 1853117 2 1 Quebec Qubec 0 0 0 0 1113.00542 5206 1756133 2 0 Quebec Qubec 0 0 0 0 1515.99686 5208 1764223 3 0 Quebec Qubec 0 0 0 0 16053.59566 5209 1339321 4 0 Quebec Qubec 0 0 0 0 144.48364 5210 1769133 2 0 Quebec Qubec 0 0 0 0 3481.35514 5211 16330 1 0 Quebec Qubec 0 0 0 0 1391.72494 5212 78130 1 0 Quebec Qubec 0 0 0 0 157.70498 5213 1754223 3 0 Quebec Qubec 0 0 0 0 856.01330 5221 1758133 2 0 Quebec Qubec 0 0 0 0 37319.34576 5223 1904117 2 1 Quebec Qubec 0 0 0 0 15398.65478 5232 4389122 2 0 Quebec Qubec 0 0 0 0 4523.67065 5239 1900117 2 1 Quebec Qubec 0 0 0 0 32057.50172 5255 1831309 3 0 Quebec Qubec 0 0 0 0 457.03661 5257 1098309 3 0 Quebec Qubec 0 0 0 0 11360.85745 5263 1856117 2 1 Quebec Qubec 0 0 0 0 5827.32768 5264 1253347 3 0 Quebec Qubec 0 0 0 0 14850.73462 5265 1999125 3 0 Quebec Qubec 0 0 0 0 704.58028 5267 1108309 3 0 Quebec Qubec 0 0 0 0 2406.71405 5273 1812117 2 1 Quebec Qubec 0 0 0 0 669.16180 5274 1106309 3 0 Quebec Qubec 0 0 0 0 13225.55468 5279 2056348 3 0 Quebec Qubec 0 0 0 0 10779.65519 5280 2110343 4 0 Quebec Qubec 0 0 0 0 67824.58531 5290 243117 2 1 Quebec Qubec 0 0 0 0 5030.79688 5291 1759133 2 0 Quebec Qubec 0 0 0 0 10006.26862 5299 1903343 3 0 Quebec Qubec 0 0 0 0 17400.15928 5306 1843117 2 1 Quebec Qubec 0 0 0 0 12763.16884 5307 717235 4 0 Quebec Qubec 0 0 0 0 18776.45202 5310 1794117 2 1 Quebec Qubec 0 0 0 0 17318.01678 5314 2047131 3 0 Quebec Qubec 0 0 0 0 620.67254 5315 1888158 2 0 Quebec Qubec 0 0 0 0 994.77538 5316 119131 1 0 Quebec Qubec 0 0 0 0 179.90369 5319 1885158 2 0 Quebec Qubec 0 0 0 0 6087.02922 5325 1866343 3 0 Quebec Qubec 0 0 0 0 9196.37896 5329 1999125 3 0 Quebec Qubec 0 0 0 0 1048.59961 5330 1777158 2 0 Quebec Qubec 0 0 0 0 1825.55259 5331 1866 4 0 Quebec Qubec 0 0 0 0 3283.61566 5339 4538235 3 0 Quebec Qubec 0 0 0 0 2622.80339 5355 1866158 2 0 Quebec Qubec 0 0 0 0 2745.37952 5356 358343 3 0 Quebec Qubec 0 0 0 0 15732.24446 5362 1766132 2 0 Quebec Qubec 0 0 0 0 8011.86406 5365 4515224 4 0 Quebec Qubec 0 0 0 0 10107.42570 5366 4521239 4 0 Quebec Qubec 0 0 0 0 178.19442 5367 2142341 3 0 Quebec Qubec 0 0 0 0 1028.91013 5368 2152341 3 0 Quebec Qubec 0 0 0 0 374.59381 5372 2157341 3 0 Quebec Qubec 0 0 0 0 898.28297 5373 2142341 3 0 Quebec Qubec 0 0 0 0 12791.71105 5374 2180125 3 0 Quebec Qubec 0 0 0 0 14939.90592 5378 67730 1 0 Quebec Qubec 0 0 0 0 2980.33578 5379 1752223 3 0 Quebec Qubec 0 0 0 0 12800.27606 5380 1900346 4 0 Quebec Qubec 0 0 0 0 5145.93080 5383 2128341 3 0 Quebec Qubec 0 0 0 0 9968.57010 5389 2153341 3 0 Quebec Qubec 0 0 0 0 13220.31588 5392 76431 1 0 Quebec Qubec 0 0 0 0 5893.99932 5393 2182125 3 0 Quebec Qubec 0 0 0 0 2367.92631 5394 723341 3 0 Quebec Qubec 0 0 0 0 15.93263 5395 723341 3 0 Quebec Qubec 0 0 0 0 234.53817 5396 863131 1 0 Quebec Qubec 0 0 0 0 21614.42474 5397 95240 1 0 Quebec Qubec 0 0 0 0 20.88913 5398 863831 1 0 Quebec Qubec 0 0 0 0 3448.30793 5399 2176125 3 0 Quebec Qubec 0 0 0 0 309.91297 5402 8630131 2 0 Quebec Qubec 0 0 0 0 5182.11516 5413 2139337 3 0 Quebec Qubec 0 0 0 0 3963.57534 5414 2159125 3 0 Quebec Qubec 0 0 0 0 5964.49972 5415 2146348 3 0 Quebec Qubec 0 0 0 0 6799.63263 5416 2168125 3 0 Quebec Qubec 0 0 0 0 24297.80152 5418 1660138 2 0 Quebec Qubec 0 0 0 0 12321.01635 5426 4652158 2 0 Quebec Qubec 0 0 0 0 7151.71479 5427 4558341 3 0 Quebec Qubec 0 0 0 0 3609.71572 5432 900 3 0 Quebec Qubec 0 0 0 0 2995.04998 5433 896 4 0 Quebec Qubec 0 0 0 0 192.47109 5435 900 4 0 Quebec Qubec 0 0 0 0 6761.75246 5436 4559346 4 0 Quebec Qubec 0 0 0 0 4948.88800 5437 2158125 3 0 Quebec Qubec 0 0 0 0 96.29915 5438 8056125 3 0 Quebec Qubec 0 0 0 0 1237.39971 5441 889 3 0 Quebec Qubec 0 0 0 0 11448.51285 5443 1766132 2 0 Quebec Qubec 0 0 0 0 2934.47062 5444 906 4 0 Quebec Qubec 0 0 0 0 10451.26482 5447 67730 1 0 Quebec Qubec 0 0 0 0 2371.35525 5448 4581 4 0 Quebec Qubec 0 0 0 0 603.40546 5450 908 4 0 Quebec Qubec 0 0 0 0 1644.48317 5453 1366 4 0 Quebec Qubec 0 0 0 0 355.10148 5455 769 4 0 Quebec Qubec 0 0 0 0 2103.00421 5457 738 4 0 Quebec Qubec 0 0 0 0 1058.95357 5458 911 4 0 Quebec Qubec 0 0 0 0 437.22419 5460 550 4 0 Quebec Qubec 0 0 0 0 249.57378 5461 887 4 0 Quebec Qubec 0 0 0 0 30962.72860 5462 1990329 3 0 Quebec Qubec 0 0 0 0 6058.21161 5463 4581 4 0 Quebec Qubec 0 0 0 0 340.34749 5464 1980329 3 0 Quebec Qubec 0 0 0 0 21858.85176 5465 4436133 2 0 Quebec Qubec 0 0 0 0 1475.87684 5466 4581 4 0 Quebec Qubec 0 0 0 0 43.07563 5467 4436133 2 0 Quebec Qubec 0 0 0 0 753.62806 5468 915 4 0 Quebec Qubec 0 0 0 0 3589.73431 5470 914 3 0 Quebec Qubec 0 0 0 0 8482.10785 5471 4564158 2 0 Quebec Qubec 0 0 0 0 8200.49341 5472 8035125 3 0 Quebec Qubec 0 0 0 0 1708.78809 5473 744 4 0 Quebec Qubec 0 0 0 0 299.61952 5476 4564158 2 0 Quebec Qubec 0 0 0 0 1874.74774 5477 634 4 0 Quebec Qubec 0 0 0 0 790.03859 5479 740 4 0 Quebec Qubec 0 0 0 0 22194.17799 5480 4651343 3 0 Quebec Qubec 0 0 0 0 1115.48842 5481 920 4 0 Quebec Qubec 0 0 0 0 2892.15997 5482 197915 1 1 Quebec Qubec 0 0 0 0 108.11297 5483 1227117 2 0 Quebec Qubec 0 0 0 0 1808.10528 5484 1935117 2 0 Quebec Qubec 0 0 0 0 367.21701 5485 687 4 0 Quebec Qubec 0 0 0 0 233.55274 5486 684329 3 0 Quebec Qubec 0 0 0 0 214.01922 5487 1228 4 0 Quebec Qubec 0 0 0 0 959.18000 5488 1924117 2 0 Quebec Qubec 0 0 0 0 257.52109 5489 918 4 0 Quebec Qubec 0 0 0 0 19349.37755 5494 4629341 3 0 Quebec Qubec 0 0 0 0 13257.52865 5495 783370 4 0 Quebec Qubec 0 0 0 0 716.20256 5496 919 4 0 Quebec Qubec 0 0 0 0 1028.64260 5497 750 4 0 Quebec Qubec 0 0 0 0 4657.21700 5498 1916117 2 0 Quebec Qubec 0 0 0 0 1181.58690 5499 1876117 2 1 Quebec Qubec 0 0 0 0 2398.02854 5500 1872117 2 1 Quebec Qubec 0 0 0 0 1305.91330 5502 3392343 3 0 Quebec Qubec 0 0 0 0 12221.59994 5503 864040 1 0 Quebec Qubec 0 0 0 0 25.18135 5504 4496343 3 0 Quebec Qubec 0 0 0 0 2353.28878 5508 638 4 0 Quebec Qubec 0 0 0 0 3152.54287 5509 757 4 0 Quebec Qubec 0 0 0 0 1732.58118 5511 481015 1 1 Quebec Qubec 0 0 0 0 2191.26803 5512 3192158 2 0 Quebec Qubec 0 0 0 0 5074.66679 5515 686 4 0 Quebec Qubec 0 0 0 0 11737.96439 5517 3207138 2 0 Quebec Qubec 0 0 0 0 1812.42650 5518 4503343 3 0 Quebec Qubec 0 0 0 0 1274.11151 5520 1916117 2 0 Quebec Qubec 0 0 0 0 1537.91571 5521 4681125 1 0 Quebec Qubec 0 0 0 0 24624.93514 5523 1959117 2 1 Quebec Qubec 0 0 0 0 1825.82562 5524 746 4 0 Quebec Qubec 0 0 0 0 2042.84787 5525 1228329 3 0 Quebec Qubec 0 0 0 0 146.46990 5526 746 4 0 Quebec Qubec 0 0 0 0 4140.18944 5528 4687 4 0 Quebec Qubec 0 0 0 0 2596.99848 5531 4510339 3 0 Quebec Qubec 0 0 0 0 4555.80786 5532 680 4 0 Quebec Qubec 0 0 0 0 4685.50523 5538 4507341 3 0 Quebec Qubec 0 0 0 0 10033.24651 5539 8050337 3 0 Quebec Qubec 0 0 0 0 206.95450 5540 8044335 4 0 Quebec Qubec 0 0 0 0 29027.47475 5541 8044335 4 0 Quebec Qubec 0 0 0 0 1179.35584 5544 357325 1 0 Quebec Qubec 0 0 0 0 1730.13635 5546 4681125 4 0 Quebec Qubec 0 0 0 0 2125.87516 5547 1916117 2 0 Quebec Qubec 0 0 0 0 662.20772 5549 2534 4 0 Quebec Qubec 0 0 0 0 1788.32436 5551 4505344 3 0 Quebec Qubec 0 0 0 0 2093.92845 5552 4507341 3 0 Quebec Qubec 0 0 0 0 263.81582 5553 4507341 3 0 Quebec Qubec 0 0 0 0 1281.07229 5554 6955117 2 0 Quebec Qubec 0 0 0 0 101.49406 5555 480915 1 1 Quebec Qubec 0 0 0 0 124.61410 5556 6957117 2 0 Quebec Qubec 0 0 0 0 3832.77825 5557 1837 4 0 Quebec Qubec 0 0 0 0 7785.95699 5563 481015 1 1 Quebec Qubec 0 0 0 0 6842.74534 5566 758 4 0 Quebec Qubec 0 0 0 0 3571.71312 5567 865040 1 0 Quebec Qubec 0 0 0 0 1334.59925 5568 4633341 3 0 Quebec Qubec 0 0 0 0 305.98364 5569 1717 4 0 Quebec Qubec 0 0 0 0 3622.06767 5570 480315 1 1 Quebec Qubec 0 0 0 0 1938.32309 5571 8041335 3 0 Quebec Qubec 0 0 0 0 24513.07382 5576 4523224 4 0 Quebec Qubec 0 0 0 0 3422.65383 5578 2531 4 0 Quebec Qubec 0 0 0 0 31982.75641 5580 1766309 3 0 Quebec Qubec 0 0 0 0 4065.79007 5587 1228329 3 0 Quebec Qubec 0 0 0 0 39244.88223 5589 1787107 4 0 Quebec Qubec 0 0 0 0 5546.13075 5590 7012370 4 0 Quebec Qubec 0 0 0 0 2381.21065 5591 480315 1 1 Quebec Qubec 0 0 0 0 1300.79704 5592 1360 4 0 Quebec Qubec 0 0 0 0 8217.04464 5593 8031158 2 0 Quebec Qubec 0 0 0 0 1203.39595 5594 8041335 3 0 Quebec Qubec 0 0 0 0 177.86870 5597 1465 4 0 Quebec Qubec 0 0 0 0 315.13697 5598 1665 4 0 Quebec Qubec 0 0 0 0 5078.91348 5599 1778 4 0 Quebec Qubec 0 0 0 0 11161.87740 5608 67730 1 0 Quebec Qubec 0 0 0 0 541.65494 5609 146630 1 0 Quebec Qubec 0 0 0 0 209.49458 5612 8020339 3 0 Quebec Qubec 0 0 0 0 1214.30421 5613 8023158 2 0 Quebec Qubec 0 0 0 0 1148.92733 5614 7919 4 0 Quebec Qubec 0 0 0 0 1762.09001 5615 479715 1 1 Quebec Qubec 0 0 0 0 8784.22839 5618 8029339 3 0 Quebec Qubec 0 0 0 0 340.31742 5619 480615 1 1 Quebec Qubec 0 0 0 0 477.38076 5622 8023335 3 0 Quebec Qubec 0 0 0 0 1501.85972 5630 1721 4 0 Quebec Qubec 0 0 0 0 336.99287 5631 480715 1 1 Quebec Qubec 0 0 0 0 8557.83409 5632 2528 4 0 Quebec Qubec 0 0 0 0 3066.46715 5635 7011333 4 0 Quebec Qubec 0 0 0 0 2600.28420 5637 8025158 2 0 Quebec Qubec 0 0 0 0 1679.88857 5640 6968 4 0 Quebec Qubec 0 0 0 0 683.55429 5641 6927117 2 0 Quebec Qubec 0 0 0 0 5847.04822 5642 1942 4 0 Quebec Qubec 0 0 0 0 3763.43290 5645 865140 1 0 Quebec Qubec 0 0 0 0 928.80845 5646 1714 4 0 Quebec Qubec 0 0 0 0 4452.25679 5647 1837 4 0 Quebec Qubec 0 0 0 0 6862.19669 5650 3216138 2 0 Quebec Qubec 0 0 0 0 1010.82488 5651 1370 4 0 Quebec Qubec 0 0 0 0 492.06977 5654 1833 4 0 Quebec Qubec 0 0 0 0 1151.44558 5656 3014 4 0 Quebec Qubec 0 0 0 0 31430.23557 5657 4594235 3 0 Quebec Qubec 0 0 0 0 4087.54982 5658 2525 4 0 Quebec Qubec 0 0 0 0 543.02452 5660 8218137 2 0 Quebec Qubec 0 0 0 0 7105.95304 5661 875620 1 1 Quebec Qubec 0 0 0 0 10183.07813 5662 357325 1 0 Quebec Qubec 0 0 0 0 2393.71176 5665 1660 4 0 Quebec Qubec 0 0 0 0 3102.40695 5666 67730 1 0 Quebec Qubec 0 0 0 0 1755.53230 5667 7923 4 0 Quebec Qubec 0 0 0 0 1346.77293 5668 1943 4 0 Quebec Qubec 0 0 0 0 25249.59391 5672 4581137 2 0 Quebec Qubec 0 0 0 0 1120.51375 5674 2153 4 0 Quebec Qubec 0 0 0 0 1071.43453 5676 1693 4 0 Quebec Qubec 0 0 0 0 2892.96960 5679 1947 4 0 Quebec Qubec 0 0 0 0 326.48661 5680 1828 4 0 Quebec Qubec 0 0 0 0 2686.16831 5682 2059 4 0 Quebec Qubec 0 0 0 0 75.09377 5683 1825 4 0 Quebec Qubec 0 0 0 0 3705.62337 5685 7011333 4 0 Quebec Qubec 0 0 0 0 1680.60182 5686 8223116 2 0 Quebec Qubec 0 0 0 0 3034.18787 5687 8212137 2 0 Quebec Qubec 0 0 0 0 1258.38832 5688 1787 4 0 Quebec Qubec 0 0 0 0 5872.84944 5689 1665 4 0 Quebec Qubec 0 0 0 0 2823.25960 5690 865140 1 0 Quebec Qubec 0 0 0 0 3002.32765 5691 3216138 2 0 Quebec Qubec 0 0 0 0 634.46919 5692 1825 4 0 Quebec Qubec 0 0 0 0 6945.57194 5696 1766132 2 0 Quebec Qubec 0 0 0 0 1907.67324 5697 1667 4 0 Quebec Qubec 0 0 0 0 1611.09850 5700 865140 1 0 Quebec Qubec 0 0 0 0 1402.46833 5701 2060 4 0 Quebec Qubec 0 0 0 0 4695.06841 5702 6968117 2 0 Quebec Qubec 0 0 0 0 7193.38907 5704 1364 4 0 Quebec Qubec 0 0 0 0 2389.27738 5705 1501 4 0 Quebec Qubec 0 0 0 0 6043.73695 5706 478015 1 1 Quebec Qubec 0 0 0 0 493.49673 5707 346940 1 0 Quebec Qubec 0 0 0 0 4773.80771 5708 2065 4 0 Quebec Qubec 0 0 0 0 2424.70906 5709 4585116 2 0 Quebec Qubec 0 0 0 0 1256.71937 5711 1500 4 0 Quebec Qubec 0 0 0 0 1453.51372 5714 1793 4 0 Quebec Qubec 0 0 0 0 9136.74244 5716 1752 4 0 Quebec Qubec 0 0 0 0 2681.12104 5717 1789 4 0 Quebec Qubec 0 0 0 0 3860.08627 5718 67730 1 0 Quebec Qubec 0 0 0 0 3533.02456 5719 1836117 2 0 Quebec Qubec 0 0 0 0 976.52035 5720 1836 4 0 Quebec Qubec 0 0 0 0 1301.36903 5721 1707 4 0 Quebec Qubec 0 0 0 0 4386.80775 5722 1963 4 0 Quebec Qubec 0 0 0 0 3601.76916 5723 1695 4 0 Quebec Qubec 0 0 0 0 613.38597 5724 1964 4 0 Quebec Qubec 0 0 0 0 829.45047 5725 1966 4 0 Quebec Qubec 0 0 0 0 1224.25745 5726 478015 1 1 Quebec Qubec 0 0 0 0 3105.38232 5727 3046 4 0 Quebec Qubec 0 0 0 0 791.12257 5728 1783 4 0 Quebec Qubec 0 0 0 0 2698.83959 5730 478515 1 1 Quebec Qubec 0 0 0 0 1900.50577 5731 1933 4 0 Quebec Qubec 0 0 0 0 783.53747 5733 3462640 1 0 Quebec Qubec 0 0 0 0 6926.39458 5734 8026335 3 0 Quebec Qubec 0 0 0 0 3130.91380 5735 3216138 2 0 Quebec Qubec 0 0 0 0 428.48881 5736 3476344 3 0 Quebec Qubec 0 0 0 0 390.71084 5737 3462344 3 0 Quebec Qubec 0 0 0 0 743.33934 5738 3453344 3 0 Quebec Qubec 0 0 0 0 168.95024 5739 3460344 3 0 Quebec Qubec 0 0 0 0 5714.28309 5740 3021 4 0 Quebec Qubec 0 0 0 0 2215.57087 5741 1967 4 0 Quebec Qubec 0 0 0 0 2028.38321 5742 6921364 3 0 Quebec Qubec 0 0 0 0 1167.89161 5743 1710 4 0 Quebec Qubec 0 0 0 0 225.81794 5744 6939 4 0 Quebec Qubec 0 0 0 0 18548.62749 5745 6938329 3 0 Quebec Qubec 0 0 0 0 1561.04252 5746 1011 4 0 Quebec Qubec 0 0 0 0 241.24065 5747 6921364 3 0 Quebec Qubec 0 0 0 0 2307.70677 5748 1784 4 0 Quebec Qubec 0 0 0 0 2011.62167 5749 6935329 3 0 Quebec Qubec 0 0 0 0 1146.77982 5750 6941329 3 0 Quebec Qubec 0 0 0 0 4707.70967 5751 7011333 4 0 Quebec Qubec 0 0 0 0 4713.37184 5752 6921364 3 0 Quebec Qubec 0 0 0 0 17711.74325 5754 1752223 3 0 Quebec Qubec 0 0 0 0 5608.20506 5755 1752 4 0 Quebec Qubec 0 0 0 0 3238.10800 5756 1494 4 0 Quebec Qubec 0 0 0 0 18952.92149 5757 1877323 3 0 Quebec Qubec 0 0 0 0 2147.14234 5758 344140 1 0 Quebec Qubec 0 0 0 0 2110.38319 5759 4703344 3 0 Quebec Qubec 0 0 0 0 17.57884 5760 347740 1 0 Quebec Qubec 0 0 0 0 5006.65804 5761 3270 4 0 Quebec Qubec 0 0 0 0 896.10809 5762 1752223 3 0 Quebec Qubec 0 0 0 0 2369.54534 5763 3047 4 0 Quebec Qubec 0 0 0 0 125.50767 5764 3043 4 0 Quebec Qubec 0 0 0 0 1351.28677 5765 1504 4 0 Quebec Qubec 0 0 0 0 11003.70358 5767 870120 1 1 Quebec Qubec 0 0 0 0 17798.67701 5768 1878327 3 0 Quebec Qubec 0 0 0 0 778.81911 5769 1506 4 0 Quebec Qubec 0 0 0 0 2365.29425 5770 1704 4 0 Quebec Qubec 0 0 0 0 2072.66825 5771 1012 4 0 Quebec Qubec 0 0 0 0 1724.65379 5772 1890364 4 0 Quebec Qubec 0 0 0 0 2685.22256 5773 3221138 2 0 Quebec Qubec 0 0 0 0 3430.18960 5774 67730 1 0 Quebec Qubec 0 0 0 0 919.97213 5775 1460 4 0 Quebec Qubec 0 0 0 0 1388.28736 5777 982 4 0 Quebec Qubec 0 0 0 0 9496.21661 5778 5105116 2 0 Quebec Qubec 0 0 0 0 1632.47927 5779 4624227 3 0 Quebec Qubec 0 0 0 0 1020.72005 5780 1491 4 0 Quebec Qubec 0 0 0 0 8821.23269 5781 357325 1 0 Quebec Qubec 0 0 0 0 29.89793 5782 337625 1 0 Quebec Qubec 0 0 0 0 298.99142 5783 3457640 1 0 Quebec Qubec 0 0 0 0 25.85850 5784 3498640 1 0 Quebec Qubec 0 0 0 0 423.58939 5785 3370640 1 0 Quebec Qubec 0 0 0 0 8157.37680 5786 4680125 4 0 Quebec Qubec 0 0 0 0 5244.80895 5789 5101231 4 0 Quebec Qubec 0 0 0 0 7520.69089 5790 6869327 3 0 Quebec Qubec 0 0 0 0 4758.00729 5791 3048 4 0 Quebec Qubec 0 0 0 0 2401.10232 5794 1843 4 0 Quebec Qubec 0 0 0 0 2941.50238 5795 921 4 0 Quebec Qubec 0 0 0 0 1049.41646 5796 925 4 0 Quebec Qubec 0 0 0 0 1168.08483 5799 337625 1 0 Quebec Qubec 0 0 0 0 4122.05738 5800 3372640 1 0 Quebec Qubec 0 0 0 0 10372.86702 5801 8015337 3 0 Quebec Qubec 0 0 0 0 42.91265 5802 3403125 4 0 Quebec Qubec 0 0 0 0 2132.86745 5803 1503 4 0 Quebec Qubec 0 0 0 0 250.99298 5804 1766132 2 0 Quebec Qubec 0 0 0 0 2203.65172 5805 1406 4 0 Quebec Qubec 0 0 0 0 354.65279 5806 8015337 3 0 Quebec Qubec 0 0 0 0 12893.10025 5807 6867364 4 0 Quebec Qubec 0 0 0 0 26.62337 5808 8010337 3 0 Quebec Qubec 0 0 0 0 1271.42603 5809 7925 4 0 Quebec Qubec 0 0 0 0 4186.16514 5810 7011333 4 0 Quebec Qubec 0 0 0 0 413.01495 5811 6975117 2 0 Quebec Qubec 0 0 0 0 7252.20366 5812 6975117 2 0 Quebec Qubec 0 0 0 0 1736.91912 5813 1014 4 0 Quebec Qubec 0 0 0 0 297.71981 5814 1839 4 0 Quebec Qubec 0 0 0 0 6441.00787 5815 1840 4 0 Quebec Qubec 0 0 0 0 532.64031 5818 1457 4 0 Quebec Qubec 0 0 0 0 338.91659 5819 1839 4 0 Quebec Qubec 0 0 0 0 842.89242 5820 1402 4 0 Quebec Qubec 0 0 0 0 1690.89061 5822 1766132 2 0 Quebec Qubec 0 0 0 0 6681.11979 5824 874620 1 1 Quebec Qubec 0 0 0 0 3978.75389 5825 4620116 2 0 Quebec Qubec 0 0 0 0 303.96179 5828 874620 1 1 Quebec Qubec 0 0 0 0 499.43496 5830 870720 1 1 Quebec Qubec 0 0 0 0 2459.20286 5832 336725 1 0 Quebec Qubec 0 0 0 0 5091.06500 5833 1752223 3 0 Quebec Qubec 0 0 0 0 1799.07366 5834 929 4 0 Quebec Qubec 0 0 0 0 1118.82549 5835 1405 4 0 Quebec Qubec 0 0 0 0 1574.52461 5836 478515 1 0 Quebec Qubec 0 0 0 0 12369.17967 5837 478515 1 1 Quebec Qubec 0 0 0 0 745.41034 5838 1404 4 0 Quebec Qubec 0 0 0 0 10645.06523 5840 8152125 3 0 Quebec Qubec 0 0 0 0 1773.48824 5841 4696344 3 0 Quebec Qubec 0 0 0 0 569.01640 5842 925 4 0 Quebec Qubec 0 0 0 0 133.69693 5843 4697125 4 0 Quebec Qubec 0 0 0 0 692.12573 5844 350525 1 0 Quebec Qubec 0 0 0 0 1093.32215 5845 890329 3 0 Quebec Qubec 0 0 0 0 4776.80381 5846 3221138 2 0 Quebec Qubec 0 0 0 0 2892.27779 5847 874420 1 1 Quebec Qubec 0 0 0 0 421.79159 5849 1023 4 0 Quebec Qubec 0 0 0 0 747.56994 5850 1928 4 0 Quebec Qubec 0 0 0 0 5816.19040 5851 347740 1 0 Quebec Qubec 0 0 0 0 4883.56221 5854 6369 4 0 Quebec Qubec 0 0 0 0 4834.67527 5856 4709229 4 0 Quebec Qubec 0 0 0 0 1872.14454 5857 874420 1 1 Quebec Qubec 0 0 0 0 1799.84228 5858 478515 1 1 Quebec Qubec 0 0 0 0 3730.95865 5860 2209 4 0 Quebec Qubec 0 0 0 0 445.93072 5861 4709229 4 0 Quebec Qubec 0 0 0 0 302.62797 5862 955 4 0 Quebec Qubec 0 0 0 0 26.55691 5863 8305229 4 0 Quebec Qubec 0 0 0 0 1731.26117 5864 1016 4 0 Quebec Qubec 0 0 0 0 7100.62755 5865 2138 4 0 Quebec Qubec 0 0 0 0 2093.08072 5866 2188 4 0 Quebec Qubec 0 0 0 0 283.89148 5867 936 4 0 Quebec Qubec 0 0 0 0 868.90776 5872 1251 4 0 Quebec Qubec 0 0 0 0 1854.33878 5873 888329 3 0 Quebec Qubec 0 0 0 0 2866.21018 5874 1288 4 0 Quebec Qubec 0 0 0 0 912.37990 5875 8187229 4 0 Quebec Qubec 0 0 0 0 2271.46988 5877 1248 4 0 Quebec Qubec 0 0 0 0 8508.35641 5878 7912 4 0 Quebec Qubec 0 0 0 0 2664.26521 5879 4959223 3 0 Quebec Qubec 0 0 0 0 2151.34317 5880 930 4 0 Quebec Qubec 0 0 0 0 463.20129 5881 7735117 2 0 Quebec Qubec 0 0 0 0 1866.87506 5882 1928 4 0 Quebec Qubec 0 0 0 0 1225.40917 5883 6336329 3 0 Quebec Qubec 0 0 0 0 2264.29939 5884 891329 3 0 Quebec Qubec 0 0 0 0 3101.10112 5885 1387 4 0 Quebec Qubec 0 0 0 0 212.96329 5888 935 4 0 Quebec Qubec 0 0 0 0 6820.47116 5889 1927 4 0 Quebec Qubec 0 0 0 0 940.95882 5890 1255 4 0 Quebec Qubec 0 0 0 0 2428.22417 5891 928 4 0 Quebec Qubec 0 0 0 0 3481.04278 5892 4956116 2 0 Quebec Qubec 0 0 0 0 434.00607 5893 4956116 2 0 Quebec Qubec 0 0 0 0 3517.55002 5894 4960133 2 0 Quebec Qubec 0 0 0 0 1110.01311 5895 4610116 2 0 Quebec Qubec 0 0 0 0 466.52532 5896 4959223 3 0 Quebec Qubec 0 0 0 0 728.65913 5897 4610116 2 0 Quebec Qubec 0 0 0 0 1896.34341 5898 347740 1 0 Quebec Qubec 0 0 0 0 1223.14365 5899 2075 4 0 Quebec Qubec 0 0 0 0 1494.59594 5901 2075 4 0 Quebec Qubec 0 0 0 0 2481.20944 5902 3221138 2 0 Quebec Qubec 0 0 0 0 979.85750 5903 2075 4 0 Quebec Qubec 0 0 0 0 4532.74680 5904 8187229 4 0 Quebec Qubec 0 0 0 0 2439.64385 5905 874420 1 1 Quebec Qubec 0 0 0 0 24.56620 5906 8184229 4 0 Quebec Qubec 0 0 0 0 133.40046 5907 4960133 2 0 Quebec Qubec 0 0 0 0 143.71198 5908 4959223 3 0 Quebec Qubec 0 0 0 0 1561.89122 5909 1022 4 0 Quebec Qubec 0 0 0 0 694.66936 5910 1254 4 0 Quebec Qubec 0 0 0 0 1579.00170 5911 478515 1 1 Quebec Qubec 0 0 0 0 603.38268 5912 1044 4 0 Quebec Qubec 0 0 0 0 4026.39258 5913 8187229 4 0 Quebec Qubec 0 0 0 0 428.45062 5914 5017229 4 0 Quebec Qubec 0 0 0 0 1210.29064 5915 5017229 4 0 Quebec Qubec 0 0 0 0 1328.44275 5916 1288 4 0 Quebec Qubec 0 0 0 0 2185.79661 5917 872430 1 0 Quebec Qubec 0 0 0 0 2947.88512 5923 1021 4 0 Quebec Qubec 0 0 0 0 2332.60146 5924 5017229 4 0 Quebec Qubec 0 0 0 0 3230.28025 5926 2209 4 0 Quebec Qubec 0 0 0 0 1850.46922 5927 1387 4 0 Quebec Qubec 0 0 0 0 5883.00885 5929 1455 4 0 Quebec Qubec 0 0 0 0 7976.63430 5930 4735227 3 0 Quebec Qubec 0 0 0 0 5413.84356 5931 4711132 2 0 Quebec Qubec 0 0 0 0 407.35484 5932 1449 4 0 Quebec Qubec 0 0 0 0 951.58495 5935 478515 1 1 Quebec Qubec 0 0 0 0 620.00150 5936 2083 4 0 Quebec Qubec 0 0 0 0 588.14806 5937 2130 4 0 Quebec Qubec 0 0 0 0 3311.26544 5943 874020 1 1 Quebec Qubec 0 0 0 0 2584.55742 5944 7736158 2 0 Quebec Qubec 0 0 0 0 2533.46356 5945 991 4 0 Quebec Qubec 0 0 0 0 1493.82642 5946 1449 4 0 Quebec Qubec 0 0 0 0 190.14975 5947 1445 4 0 Quebec Qubec 0 0 0 0 2462.82361 5948 5017229 4 0 Quebec Qubec 0 0 0 0 645.90960 5949 1445 4 0 Quebec Qubec 0 0 0 0 262.08028 5952 1446 4 0 Quebec Qubec 0 0 0 0 2925.55693 5954 350825 1 0 Quebec Qubec 0 0 0 0 2526.34545 5958 4949223 3 0 Quebec Qubec 0 0 0 0 368.27822 5959 5021229 4 0 Quebec Qubec 0 0 0 0 3932.70631 5961 8154125 4 0 Quebec Qubec 0 0 0 0 286.52935 5962 857725 1 0 Quebec Qubec 0 0 0 0 3597.39968 5963 1250 4 0 Quebec Qubec 0 0 0 0 1275.67444 5964 2081 4 0 Quebec Qubec 0 0 0 0 911.61497 5965 1252 4 0 Quebec Qubec 0 0 0 0 5471.46985 5967 929 4 0 Quebec Qubec 0 0 0 0 6615.22473 5968 2189 4 0 Quebec Qubec 0 0 0 0 82.81818 5970 2102 4 0 Quebec Qubec 0 0 0 0 4937.58729 5971 2137 4 0 Quebec Qubec 0 0 0 0 8892.34476 5972 5099231 4 0 Quebec Qubec 0 0 0 0 6906.12095 5973 5099 4 0 Quebec Qubec 0 0 0 0 1529.05784 5974 4711132 2 0 Quebec Qubec 0 0 0 0 2559.15013 5977 1444 4 0 Quebec Qubec 0 0 0 0 1704.16197 5978 1440 4 0 Quebec Qubec 0 0 0 0 3465.72160 5979 1919 4 0 Quebec Qubec 0 0 0 0 503.60767 5980 2197 4 0 Quebec Qubec 0 0 0 0 3435.51725 5981 3221138 2 0 Quebec Qubec 0 0 0 0 2793.40800 5983 2265 4 0 Quebec Qubec 0 0 0 0 3487.59224 5984 872430 1 0 Quebec Qubec 0 0 0 0 3550.30130 5985 874020 1 1 Quebec Qubec 0 0 0 0 21.33735 5986 873630 1 0 Quebec Qubec 0 0 0 0 23.14356 5987 871820 1 1 Quebec Qubec 0 0 0 0 1804.64212 5988 1434 4 0 Quebec Qubec 0 0 0 0 337.16662 5989 1441 4 0 Quebec Qubec 0 0 0 0 10791.51166 5990 3372640 1 0 Quebec Qubec 0 0 0 0 18646.41087 5991 8018335 3 0 Quebec Qubec 0 0 0 0 12.88326 5992 3372640 1 0 Quebec Qubec 0 0 0 0 4742.34612 5993 2200 4 0 Quebec Qubec 0 0 0 0 1727.38007 5994 2105 4 0 Quebec Qubec 0 0 0 0 2376.63820 5995 4735227 3 0 Quebec Qubec 0 0 0 0 1315.58633 5996 4947229 4 0 Quebec Qubec 0 0 0 0 1007.93972 5997 4711132 2 0 Quebec Qubec 0 0 0 0 1170.13607 5998 2082 4 0 Quebec Qubec 0 0 0 0 11046.68079 6001 8155344 3 0 Quebec Qubec 0 0 0 0 91.13552 6002 7991344 3 0 Quebec Qubec 0 0 0 0 526.47269 6003 7982335 3 0 Quebec Qubec 0 0 0 0 987.47250 6005 1441 4 0 Quebec Qubec 0 0 0 0 4461.77105 6009 347740 1 0 Quebec Qubec 0 0 0 0 2158.97341 6010 2192 4 0 Quebec Qubec 0 0 0 0 2512.58012 6013 2107 4 0 Quebec Qubec 0 0 0 0 1578.94706 6014 2265 4 0 Quebec Qubec 0 0 0 0 1850.43954 6015 871720 1 1 Quebec Qubec 0 0 0 0 1898.69685 6017 2103 4 0 Quebec Qubec 0 0 0 0 2488.63467 6018 8160125 4 0 Quebec Qubec 0 0 0 0 400.40054 6019 2157 4 0 Quebec Qubec 0 0 0 0 1128.05796 6023 5093227 3 0 Quebec Qubec 0 0 0 0 213.30193 6024 2103125 4 0 Quebec Qubec 0 0 0 0 1247.09500 6025 1901 4 0 Quebec Qubec 0 0 0 0 1302.96275 6033 871720 1 1 Quebec Qubec 0 0 0 0 2003.77999 6034 1514 4 0 Quebec Qubec 0 0 0 0 1889.22266 6035 1514 4 0 Quebec Qubec 0 0 0 0 1625.46215 6038 1907 4 0 Quebec Qubec 0 0 0 0 6063.60258 6039 7987 4 0 Quebec Qubec 0 0 0 0 2176.39891 6040 7987335 3 0 Quebec Qubec 0 0 0 0 3729.89815 6041 1293 4 0 Quebec Qubec 0 0 0 0 2775.62389 6042 857725 1 0 Quebec Qubec 0 0 0 0 2557.97399 6045 2194 4 0 Quebec Qubec 0 0 0 0 1103.69478 6046 1516 4 0 Quebec Qubec 0 0 0 0 5073.16420 6048 4603116 2 0 Quebec Qubec 0 0 0 0 5266.30284 6049 1021 4 0 Quebec Qubec 0 0 0 0 5512.40397 6050 1018 4 0 Quebec Qubec 0 0 0 0 3782.49191 6052 1247 4 0 Quebec Qubec 0 0 0 0 2773.82916 6053 871720 1 1 Quebec Qubec 0 0 0 0 768.71623 6054 2093 4 0 Quebec Qubec 0 0 0 0 391.91034 6055 856525 1 1 Quebec Qubec 0 0 0 0 2535.47792 6056 3221138 2 0 Quebec Qubec 0 0 0 0 894.96547 6057 1312 4 0 Quebec Qubec 0 0 0 0 601.22892 6058 866325 1 1 Quebec Qubec 0 0 0 0 2060.64001 6059 871720 1 1 Quebec Qubec 0 0 0 0 2210.78832 6060 4711132 2 0 Quebec Qubec 0 0 0 0 3583.07318 6061 2102 4 0 Quebec Qubec 0 0 0 0 2965.21026 6062 2196 4 0 Quebec Qubec 0 0 0 0 1306.11240 6063 8160125 4 0 Quebec Qubec 0 0 0 0 1465.52202 6064 2270 4 0 Quebec Qubec 0 0 0 0 704.05321 6066 4603116 2 0 Quebec Qubec 0 0 0 0 1138.56058 6067 1313 4 0 Quebec Qubec 0 0 0 0 671.15214 6070 1021 4 0 Quebec Qubec 0 0 0 0 279.79894 6071 1313 4 0 Quebec Qubec 0 0 0 0 1292.12226 6073 7987335 3 0 Quebec Qubec 0 0 0 0 1488.57397 6074 8574440 1 0 Quebec Qubec 0 0 0 0 2352.55387 6075 2239 4 0 Quebec Qubec 0 0 0 0 1326.50169 6076 2114 4 0 Quebec Qubec 0 0 0 0 18.87500 6077 8441440 1 0 Quebec Qubec 0 0 0 0 1500.95114 6080 1241 4 0 Quebec Qubec 0 0 0 0 1171.62853 6086 1245 4 0 Quebec Qubec 0 0 0 0 3764.56569 6087 904930 1 0 Quebec Qubec 0 0 0 0 792.24289 6088 854825 1 0 Quebec Qubec 0 0 0 0 1684.77339 6089 4603116 2 0 Quebec Qubec 0 0 0 0 1433.15187 6090 873320 1 0 Quebec Qubec 0 0 0 0 96.37321 6092 4603116 2 0 Quebec Qubec 0 0 0 0 1698.91755 6093 1235 4 0 Quebec Qubec 0 0 0 0 590.41059 6096 853425 1 0 Quebec Qubec 0 0 0 0 807.61135 6098 1345 4 0 Quebec Qubec 0 0 0 0 1500.44260 6099 1251 4 0 Quebec Qubec 0 0 0 0 1321.89041 6100 918 4 0 Quebec Qubec 0 0 0 0 6455.46945 6101 2265 4 0 Quebec Qubec 0 0 0 0 1361.96751 6102 7987335 3 0 Quebec Qubec 0 0 0 0 5533.66032 6103 5015223 3 0 Quebec Qubec 0 0 0 0 3496.54197 6104 919 4 0 Quebec Qubec 0 0 0 0 698.64838 6108 4603116 2 0 Quebec Qubec 0 0 0 0 1928.17625 6109 1300 4 0 Quebec Qubec 0 0 0 0 1588.45357 6110 2110 4 0 Quebec Qubec 0 0 0 0 1842.38547 6111 2116 4 0 Quebec Qubec 0 0 0 0 1786.79568 6112 8160125 4 0 Quebec Qubec 0 0 0 0 5337.02886 6113 1008 4 0 Quebec Qubec 0 0 0 0 1506.64440 6114 2090 4 0 Quebec Qubec 0 0 0 0 313.95352 6115 216019 1 0 Quebec Qubec 0 0 0 0 1622.31669 6117 2852 4 0 Quebec Qubec 0 0 0 0 9778.65529 6118 328015 1 1 Quebec Qubec 0 0 0 0 2582.74692 6119 2093 4 0 Quebec Qubec 0 0 0 0 337.31969 6120 2088 4 0 Quebec Qubec 0 0 0 0 2994.25959 6121 7911 4 0 Quebec Qubec 0 0 0 0 10286.54750 6122 6934329 3 0 Quebec Qubec 0 0 0 0 23239.46307 6123 1891323 3 0 Quebec Qubec 0 0 0 0 1411.42837 6124 6347 4 0 Quebec Qubec 0 0 0 0 2019.37666 6125 1253 4 0 Quebec Qubec 0 0 0 0 1070.50241 6126 6076 4 0 Quebec Qubec 0 0 0 0 2434.12676 6128 8281138 2 0 Quebec Qubec 0 0 0 0 3256.82046 6129 2234 4 0 Quebec Qubec 0 0 0 0 2474.20692 6130 2193 4 0 Quebec Qubec 0 0 0 0 172.16846 6131 2243 4 0 Quebec Qubec 0 0 0 0 3190.47181 6132 856940 1 1 Quebec Qubec 0 0 0 0 262.95775 6133 2243 4 0 Quebec Qubec 0 0 0 0 2493.87783 6134 2196 4 0 Quebec Qubec 0 0 0 0 794.37056 6136 2232 4 0 Quebec Qubec 0 0 0 0 1126.77923 6137 4603116 2 0 Quebec Qubec 0 0 0 0 2850.70380 6138 1517 4 0 Quebec Qubec 0 0 0 0 5806.45871 6139 8365640 1 0 Quebec Qubec 0 0 0 0 5081.65579 6140 7735117 2 0 Quebec Qubec 0 0 0 0 1024.08859 6143 1295 4 0 Quebec Qubec 0 0 0 0 231.80291 6144 1374116 2 0 Quebec Qubec 0 0 0 0 1294.39189 6145 2088 4 0 Quebec Qubec 0 0 0 0 2675.57257 6146 8433440 1 0 Quebec Qubec 0 0 0 0 1328.81064 6147 844219 1 0 Quebec Qubec 0 0 0 0 21.95456 6148 8438440 1 0 Quebec Qubec 0 0 0 0 20.92105 6149 843919 1 0 Quebec Qubec 0 0 0 0 7156.31498 6150 6340 4 0 Quebec Qubec 0 0 0 0 5583.26124 6151 1519 4 0 Quebec Qubec 0 0 0 0 328.98015 6152 2101 4 0 Quebec Qubec 0 0 0 0 6890.82273 6153 323550 1 0 Quebec Qubec 0 0 0 0 2483.12603 6154 1346 4 0 Quebec Qubec 0 0 0 0 2280.79494 6155 904930 1 0 Quebec Qubec 0 0 0 0 2237.71333 6156 873320 1 0 Quebec Qubec 0 0 0 0 2469.33192 6159 2267 4 0 Quebec Qubec 0 0 0 0 3271.16975 6160 2274 4 0 Quebec Qubec 0 0 0 0 3548.80628 6161 1346 4 0 Quebec Qubec 0 0 0 0 2961.66258 6162 8164148 2 0 Quebec Qubec 0 0 0 0 1265.81595 6163 854519 1 0 Quebec Qubec 0 0 0 0 2294.56896 6164 2254 4 0 Quebec Qubec 0 0 0 0 1583.88549 6167 856940 1 1 Quebec Qubec 0 0 0 0 4630.09407 6168 328015 1 1 Quebec Qubec 0 0 0 0 19.15093 6169 859440 1 1 Quebec Qubec 0 0 0 0 20.42547 6171 8148125 3 0 Quebec Qubec 0 0 0 0 1035.74259 6172 1991 4 0 Quebec Qubec 0 0 0 0 10318.33765 6173 3407229 4 0 Quebec Qubec 0 0 0 0 1799.83161 6174 3525640 1 0 Quebec Qubec 0 0 0 0 273.92462 6175 343015 1 1 Quebec Qubec 0 0 0 0 972.42722 6176 1995 4 0 Quebec Qubec 0 0 0 0 2329.40811 6177 2057 4 0 Quebec Qubec 0 0 0 0 3129.65589 6178 4603116 2 0 Quebec Qubec 0 0 0 0 1007.71634 6179 904930 1 0 Quebec Qubec 0 0 0 0 22.17275 6180 5058116 2 0 Quebec Qubec 0 0 0 0 2775.73625 6183 4744112 2 0 Quebec Qubec 0 0 0 0 2205.03194 6184 8281138 2 0 Quebec Qubec 0 0 0 0 3590.29138 6185 8292125 3 0 Quebec Qubec 0 0 0 0 3204.85427 6186 2115 4 0 Quebec Qubec 0 0 0 0 1309.12645 6187 843419 1 0 Quebec Qubec 0 0 0 0 394.95074 6189 8292 4 0 Quebec Qubec 0 0 0 0 2160.20475 6190 2249 4 0 Quebec Qubec 0 0 0 0 533.83956 6191 8277 4 0 Quebec Qubec 0 0 0 0 2497.18601 6193 410 4 0 Quebec Qubec 0 0 0 0 11068.32543 6194 5092133 2 0 Quebec Qubec 0 0 0 0 2174.16235 6195 2245 4 0 Quebec Qubec 0 0 0 0 920.05385 6196 8277 4 0 Quebec Qubec 0 0 0 0 1493.99531 6197 7987335 3 0 Quebec Qubec 0 0 0 0 2088.21113 6198 8435440 1 0 Quebec Qubec 0 0 0 0 21.57673 6199 8166335 3 0 Quebec Qubec 0 0 0 0 1339.44969 6200 873320 1 0 Quebec Qubec 0 0 0 0 1688.80803 6201 8108344 3 0 Quebec Qubec 0 0 0 0 1870.29080 6202 343015 1 1 Quebec Qubec 0 0 0 0 3049.12464 6203 2230 4 0 Quebec Qubec 0 0 0 0 18340.62711 6205 4205233 4 0 Quebec Qubec 0 0 0 0 1627.77301 6206 2274 4 0 Quebec Qubec 0 0 0 0 1024.99010 6208 1996 4 0 Quebec Qubec 0 0 0 0 2216.80252 6209 2099 4 0 Quebec Qubec 0 0 0 0 4357.30500 6213 4749112 2 0 Quebec Qubec 0 0 0 0 1889.39212 6216 8163148 2 0 Quebec Qubec 0 0 0 0 1556.13010 6217 8170335 3 0 Quebec Qubec 0 0 0 0 1821.93504 6218 1995 4 0 Quebec Qubec 0 0 0 0 1818.62048 6219 2118 4 0 Quebec Qubec 0 0 0 0 3159.34870 6225 2232 4 0 Quebec Qubec 0 0 0 0 3769.41837 6231 1517 4 0 Quebec Qubec 0 0 0 0 2746.27614 6232 2118 4 0 Quebec Qubec 0 0 0 0 5888.32000 6233 1257 4 0 Quebec Qubec 0 0 0 0 169.17177 6234 2118 4 0 Quebec Qubec 0 0 0 0 1975.54819 6238 2115 4 0 Quebec Qubec 0 0 0 0 1529.28993 6239 2274 4 0 Quebec Qubec 0 0 0 0 2837.54154 6240 836415 1 1 Quebec Qubec 0 0 0 0 2574.89796 6241 859540 1 1 Quebec Qubec 0 0 0 0 2737.16634 6242 5092133 2 0 Quebec Qubec 0 0 0 0 6784.02228 6243 4766112 2 0 Quebec Qubec 0 0 0 0 156.08876 6244 5118227 3 0 Quebec Qubec 0 0 0 0 1330.78334 6246 5054112 2 0 Quebec Qubec 0 0 0 0 18171.83131 6248 1331321 4 0 Quebec Qubec 0 0 0 0 2214.54052 6249 873320 1 0 Quebec Qubec 0 0 0 0 2247.15567 6250 2230 4 0 Quebec Qubec 0 0 0 0 979.89138 6251 8177335 3 0 Quebec Qubec 0 0 0 0 11397.77296 6252 6383315 3 0 Quebec Qubec 0 0 0 0 2571.44140 6253 5164112 2 0 Quebec Qubec 0 0 0 0 442.79566 6254 8270 2 0 Quebec Qubec 0 0 0 0 21.70207 6255 8268 2 0 Quebec Qubec 0 0 0 0 2767.31140 6256 8276138 2 0 Quebec Qubec 0 0 0 0 2527.95979 6257 8115117 2 0 Quebec Qubec 0 0 0 0 1923.58351 6258 836415 1 1 Quebec Qubec 0 0 0 0 21.33725 6259 8090117 2 0 Quebec Qubec 0 0 0 0 21.57916 6260 835915 1 0 Quebec Qubec 0 0 0 0 21.53082 6261 8342440 1 0 Quebec Qubec 0 0 0 0 1926.72718 6262 5052112 2 0 Quebec Qubec 0 0 0 0 2062.98927 6263 1995 4 0 Quebec Qubec 0 0 0 0 417.89325 6264 8264138 2 0 Quebec Qubec 0 0 0 0 2402.88030 6265 2001 4 0 Quebec Qubec 0 0 0 0 2442.63227 6266 8270134 2 0 Quebec Qubec 0 0 0 0 838.79242 6267 1770 2 0 Quebec Qubec 0 0 0 0 1944.24234 6268 2232 4 0 Quebec Qubec 0 0 0 0 587.70209 6269 8177335 3 0 Quebec Qubec 0 0 0 0 3649.80027 6271 3419640 1 0 Quebec Qubec 0 0 0 0 3090.92980 6272 2245 4 0 Quebec Qubec 0 0 0 0 20.92193 6273 3423640 1 0 Quebec Qubec 0 0 0 0 1687.08559 6274 860140 1 1 Quebec Qubec 0 0 0 0 2246.35402 6275 8177335 3 0 Quebec Qubec 0 0 0 0 694.86988 6276 8089117 2 0 Quebec Qubec 0 0 0 0 2426.57615 6277 5164112 2 0 Quebec Qubec 0 0 0 0 20.43395 6278 5162112 2 0 Quebec Qubec 0 0 0 0 2030.53724 6279 5092133 2 0 Quebec Qubec 0 0 0 0 315.10792 6280 5006112 2 0 Quebec Qubec 0 0 0 0 1328.99668 6281 5052112 2 0 Quebec Qubec 0 0 0 0 811.54601 6282 8270134 2 0 Quebec Qubec 0 0 0 0 5877.93653 6283 5006112 2 0 Quebec Qubec 0 0 0 0 2053.31171 6284 2115 4 0 Quebec Qubec 0 0 0 0 498.84412 6285 2290 4 0 Quebec Qubec 0 0 0 0 7279.85108 6286 5015223 3 0 Quebec Qubec 0 0 0 0 548.90607 6287 5134112 2 0 Quebec Qubec 0 0 0 0 1929.37444 6288 2274 4 0 Quebec Qubec 0 0 0 0 3866.90482 6291 7889344 3 0 Quebec Qubec 0 0 0 0 1546.82810 6292 353713 1 0 Quebec Qubec 0 0 0 0 20.30051 6294 8092148 2 0 Quebec Qubec 0 0 0 0 173.32911 6297 353713 1 0 Quebec Qubec 0 0 0 0 817.28770 6298 2161 4 0 Quebec Qubec 0 0 0 0 1531.03443 6299 5155112 2 0 Quebec Qubec 0 0 0 0 2367.93517 6300 1083 4 0 Quebec Qubec 0 0 0 0 1187.81645 6301 8264138 2 0 Quebec Qubec 0 0 0 0 912.40156 6303 5133112 2 0 Quebec Qubec 0 0 0 0 105.39660 6304 8264138 2 0 Quebec Qubec 0 0 0 0 451.58588 6305 2296 4 0 Quebec Qubec 0 0 0 0 1863.64826 6306 2276 4 0 Quebec Qubec 0 0 0 0 852.32788 6307 5138133 2 0 Quebec Qubec 0 0 0 0 1251.95210 6308 1029 4 0 Quebec Qubec 0 0 0 0 2092.54521 6309 5129112 2 0 Quebec Qubec 0 0 0 0 1245.53395 6310 1773720 1 0 Quebec Qubec 0 0 0 0 1197.12802 6311 5129112 2 0 Quebec Qubec 0 0 0 0 409.82722 6312 5129112 2 0 Quebec Qubec 0 0 0 0 1441.87641 6313 5129112 2 0 Quebec Qubec 0 0 0 0 3664.87970 6314 5005227 3 0 Quebec Qubec 0 0 0 0 21.12049 6315 8093117 2 0 Quebec Qubec 0 0 0 0 20.00612 6316 5009227 3 0 Quebec Qubec 0 0 0 0 576.88108 6317 1091 4 0 Quebec Qubec 0 0 0 0 1456.55438 6318 5049112 2 0 Quebec Qubec 0 0 0 0 115.55111 6319 1091 4 0 Quebec Qubec 0 0 0 0 3309.44798 6321 2230 4 0 Quebec Qubec 0 0 0 0 1471.74886 6322 845915 1 1 Quebec Qubec 0 0 0 0 2269.69037 6323 353513 1 0 Quebec Qubec 0 0 0 0 3092.48170 6324 5050134 2 0 Quebec Qubec 0 0 0 0 744.74194 6325 5049112 2 0 Quebec Qubec 0 0 0 0 602.52680 6326 2362 4 0 Quebec Qubec 0 0 0 0 1435.58277 6328 2296 4 0 Quebec Qubec 0 0 0 0 207.59095 6329 2230 4 0 Quebec Qubec 0 0 0 0 1348.83766 6330 2615 4 0 Quebec Qubec 0 0 0 0 742.17404 6331 353513 1 0 Quebec Qubec 0 0 0 0 955.32617 6332 8082148 3 0 Quebec Qubec 0 0 0 0 1881.28436 6333 8094117 2 0 Quebec Qubec 0 0 0 0 2392.29117 6334 860940 1 1 Quebec Qubec 0 0 0 0 11466.65543 6335 886710 1 0 Quebec Qubec 0 0 0 0 20.43049 6338 849040 1 1 Quebec Qubec 0 0 0 0 1370.78572 6339 845715 1 1 Quebec Qubec 0 0 0 0 3731.06495 6340 2122 4 0 Quebec Qubec 0 0 0 0 2421.44498 6341 1414 4 0 Quebec Qubec 0 0 0 0 1445.89163 6342 8262138 2 0 Quebec Qubec 0 0 0 0 3714.75083 6343 2294 4 0 Quebec Qubec 0 0 0 0 1417.26270 6344 845915 1 1 Quebec Qubec 0 0 0 0 1597.75544 6345 8848720 1 0 Quebec Qubec 0 0 0 0 22.89740 6346 8831720 1 0 Quebec Qubec 0 0 0 0 1196.33564 6347 883510 1 0 Quebec Qubec 0 0 0 0 1258.11827 6348 845715 1 1 Quebec Qubec 0 0 0 0 2960.65258 6349 2232 4 0 Quebec Qubec 0 0 0 0 140.61519 6350 223215 1 1 Quebec Qubec 0 0 0 0 2245.97108 6351 845915 1 1 Quebec Qubec 0 0 0 0 2135.91777 6352 5138133 2 0 Quebec Qubec 0 0 0 0 1478.81498 6353 2230 4 0 Quebec Qubec 0 0 0 0 382.20497 6354 887510 1 0 Quebec Qubec 0 0 0 0 999.41423 6355 2615 4 0 Quebec Qubec 0 0 0 0 2734.09447 6356 1070 4 0 Quebec Qubec 0 0 0 0 1344.72357 6357 5050134 2 0 Quebec Qubec 0 0 0 0 3618.85819 6358 2122 4 0 Quebec Qubec 0 0 0 0 1863.35286 6359 353513 1 0 Quebec Qubec 0 0 0 0 2765.36641 6361 8338440 1 0 Quebec Qubec 0 0 0 0 22.81160 6362 834613 1 0 Quebec Qubec 0 0 0 0 754.14689 6363 8076117 2 0 Quebec Qubec 0 0 0 0 7817.54302 6366 887510 1 0 Quebec Qubec 0 0 0 0 2990.10155 6367 5140223 3 0 Quebec Qubec 0 0 0 0 3277.86665 6368 3344112 2 0 Quebec Qubec 0 0 0 0 1603.48046 6369 884410 1 0 Quebec Qubec 0 0 0 0 115.74984 6370 888210 1 0 Quebec Qubec 0 0 0 0 3627.61485 6371 904530 1 0 Quebec Qubec 0 0 0 0 395.94663 6372 888110 1 0 Quebec Qubec 0 0 0 0 1636.08858 6373 2122 4 0 Quebec Qubec 0 0 0 0 4387.46134 6374 1089 4 0 Quebec Qubec 0 0 0 0 1541.54134 6375 2294 4 0 Quebec Qubec 0 0 0 0 1708.81158 6376 8076117 2 0 Quebec Qubec 0 0 0 0 827.60551 6377 5050134 2 0 Quebec Qubec 0 0 0 0 20.71050 6378 5076134 2 0 Quebec Qubec 0 0 0 0 5185.78530 6379 3539640 1 0 Quebec Qubec 0 0 0 0 1838.49990 6380 833313 1 0 Quebec Qubec 0 0 0 0 1473.94427 6381 8076117 2 0 Quebec Qubec 0 0 0 0 761.01849 6382 1089 4 0 Quebec Qubec 0 0 0 0 1824.64100 6383 1414 4 0 Quebec Qubec 0 0 0 0 1791.06978 6385 890010 1 0 Quebec Qubec 0 0 0 0 3601.60573 6386 903920 1 0 Quebec Qubec 0 0 0 0 3835.75555 6387 1208 4 0 Quebec Qubec 0 0 0 0 1238.22585 6388 1212 4 0 Quebec Qubec 0 0 0 0 21.54075 6389 889910/15/20 1 0 Quebec Qubec 0 0 0 0 4607.42544 6390 7892344 3 0 Quebec Qubec 0 0 0 0 10971.80925 6391 6934329 3 0 Quebec Qubec 0 0 0 0 2118.03235 6393 7912148 3 0 Quebec Qubec 0 0 0 0 811.18818 6394 8101148 3 0 Quebec Qubec 0 0 0 0 665.87954 6395 6893158 2 0 Quebec Qubec 0 0 0 0 6752.17201 6396 6390321 3 0 Quebec Qubec 0 0 0 0 2864.84083 6397 2316 4 0 Quebec Qubec 0 0 0 0 1947.67631 6398 8076117 2 0 Quebec Qubec 0 0 0 0 851.03720 6399 1087 4 0 Quebec Qubec 0 0 0 0 2934.36949 6400 1146 4 0 Quebec Qubec 0 0 0 0 1630.26175 6402 904530 1 0 Quebec Qubec 0 0 0 0 2758.05109 6403 849140 1 1 Quebec Qubec 0 0 0 0 2505.63946 6405 1205 4 0 Quebec Qubec 0 0 0 0 2730.53060 6406 1212 4 0 Quebec Qubec 0 0 0 0 3051.70042 6407 2612 4 0 Quebec Qubec 0 0 0 0 1437.56608 6409 1208 4 0 Quebec Qubec 0 0 0 0 992.76756 6410 1207 4 0 Quebec Qubec 0 0 0 0 4092.82484 6411 358210/15/20 1 0 Quebec Qubec 0 0 0 0 2479.14272 6412 884410 1 0 Quebec Qubec 0 0 0 0 4559.94477 6413 888110 1 0 Quebec Qubec 0 0 0 0 467.62810 6414 1211 4 0 Quebec Qubec 0 0 0 0 2.17640 6415 121135 1 0 Quebec Qubec 0 0 0 0 20.60628 6416 888110 1 0 Quebec Qubec 0 0 0 0 2937.34608 6417 850410/15/20 1 0 Quebec Qubec 0 0 0 0 1743.03576 6418 6289 4 0 Quebec Qubec 0 0 0 0 1615.53566 6419 888610 1 0 Quebec Qubec 0 0 0 0 229.90876 6420 888510 1 0 Quebec Qubec 0 0 0 0 1416.15650 6422 1794329 3 0 Quebec Qubec 0 0 0 0 2246.04199 6423 6893158 2 0 Quebec Qubec 0 0 0 0 1343.77756 6425 847440 1 1 Quebec Qubec 0 0 0 0 7641.69903 6426 4660227 3 0 Quebec Qubec 0 0 0 0 673.05449 6427 6902148 2 0 Quebec Qubec 0 0 0 0 49908.10368 6428 6901327 3 0 Quebec Qubec 0 0 0 0 2166.85791 6432 1327 4 0 Quebec Qubec 0 0 0 0 1534.62488 6433 904530 1 0 Quebec Qubec 0 0 0 0 256.85188 6434 6903148 2 0 Quebec Qubec 0 0 0 0 4748.38876 6437 8262138 2 0 Quebec Qubec 0 0 0 0 2426.07657 6438 1327 4 0 Quebec Qubec 0 0 0 0 3156.90148 6439 5041134 2 0 Quebec Qubec 0 0 0 0 1240.27351 6440 850415 1 0 Quebec Qubec 0 0 0 0 22446.44829 6441 124250 1 0 Quebec Qubec 0 0 0 0 1052.73529 6442 1888329 3 0 Quebec Qubec 0 0 0 0 954.20206 6443 851815 1 0 Quebec Qubec 0 0 0 0 3290.69503 6444 888610 1 0 Quebec Qubec 0 0 0 0 1487.25727 6445 1208 4 0 Quebec Qubec 0 0 0 0 21.54043 6446 852015 1 0 Quebec Qubec 0 0 0 0 4842.26056 6447 8831720 1 0 Quebec Qubec 0 0 0 0 82.80232 6448 850415 1 0 Quebec Qubec 0 0 0 0 3761.24586 6449 2294 4 0 Quebec Qubec 0 0 0 0 5086.65519 6450 833113 1 0 Quebec Qubec 0 0 0 0 1578.99913 6451 850415 1 0 Quebec Qubec 0 0 0 0 2553.18061 6452 1209 4 0 Quebec Qubec 0 0 0 0 4095.01110 6453 888610 1 0 Quebec Qubec 0 0 0 0 36335.15408 6454 7913148 2 0 Quebec Qubec 0 0 0 0 946.32248 6455 1888329 3 0 Quebec Qubec 0 0 0 0 4424.39928 6456 2232 4 0 Quebec Qubec 0 0 0 0 1336.91795 6457 833113 1 0 Quebec Qubec 0 0 0 0 574.17849 6458 1209 4 0 Quebec Qubec 0 0 0 0 3511.53677 6459 2316 4 0 Quebec Qubec 0 0 0 0 1194.02393 6462 847540 1 1 Quebec Qubec 0 0 0 0 1441.66411 6463 833113 1 0 Quebec Qubec 0 0 0 0 35.55247 6464 846440 1 1 Quebec Qubec 0 0 0 0 38.79777 6465 846513 1 0 Quebec Qubec 0 0 0 0 2050.56781 6466 124250 1 0 Quebec Qubec 0 0 0 0 2778.06553 6467 7913148 2 0 Quebec Qubec 0 0 0 0 54875.80411 6471 1762309 3 0 Quebec Qubec 0 0 0 0 2894.84126 6473 846613 1 0 Quebec Qubec 0 0 0 0 3498.85202 6474 8821520 1 0 Quebec Qubec 0 0 0 0 18.88837 6475 881113 1 0 Quebec Qubec 0 0 0 0 21.58878 6476 8813520 1 0 Quebec Qubec 0 0 0 0 3227.46534 6477 851420 1 0 Quebec Qubec 0 0 0 0 3370.96325 6478 8069138 2 0 Quebec Qubec 0 0 0 0 3163.46744 6479 5041134 2 0 Quebec Qubec 0 0 0 0 2238.34327 6480 179650 1 0 Quebec Qubec 0 0 0 0 989.71229 6487 179650 1 0 Quebec Qubec 0 0 0 0 4014.99027 6489 904530 1 0 Quebec Qubec 0 0 0 0 1442.56648 6490 9078104 2 0 Quebec Qubec 0 0 0 0 2631.08103 6493 1128 4 0 Quebec Qubec 0 0 0 0 1403.78572 6494 210850 1 0 Quebec Qubec 0 0 0 0 549.73640 6495 9078104 2 0 Quebec Qubec 0 0 0 0 1415.06676 6496 180950 1 0 Quebec Qubec 0 0 0 0 5290.99876 6497 6904148 2 0 Quebec Qubec 0 0 0 0 6230.06218 6498 4995104 2 0 Quebec Qubec 0 0 0 0 4866.55111 6499 848840 1 1 Quebec Qubec 0 0 0 0 1989.06071 6502 4995104 2 0 Quebec Qubec 0 0 0 0 10228.45741 6505 4294104 3 0 Quebec Qubec 0 0 0 0 3236.57775 6512 2285 4 0 Quebec Qubec 0 0 0 0 1706.02389 6513 851620 1 0 Quebec Qubec 0 0 0 0 7330.53019 6514 888535 1 0 Quebec Qubec 0 0 0 0 6631.34209 6515 4995104 2 0 Quebec Qubec 0 0 0 0 6244.57121 6516 1576 4 0 Quebec Qubec 0 0 0 0 7375.08887 6517 904315 1 0 Quebec Qubec 0 0 0 0 5598.13753 6518 2631 4 0 Quebec Qubec 0 0 0 0 5780.92299 6519 1574 4 0 Quebec Qubec 0 0 0 0 3461.10950 6524 851620 1 0 Quebec Qubec 0 0 0 0 8683.71444 6526 4677223 3 0 Quebec Qubec 0 0 0 0 349.34559 6527 851620 1 0 Quebec Qubec 0 0 0 0 129.09318 6528 334 4 0 Quebec Qubec 0 0 0 0 742.37599 6530 888535 1 0 Quebec Qubec 0 0 0 0 2534.08936 6531 2824 4 0 Quebec Qubec 0 0 0 0 1714.41639 6533 332 4 0 Quebec Qubec 0 0 0 0 754.07682 6534 2352 4 0 Quebec Qubec 0 0 0 0 253.03237 6535 2349 4 0 Quebec Qubec 0 0 0 0 1084.19099 6536 1425 4 0 Quebec Qubec 0 0 0 0 1287.85905 6537 2638 4 0 Quebec Qubec 0 0 0 0 1443.38746 6538 2347 4 0 Quebec Qubec 0 0 0 0 2828.70606 6539 5080134 2 0 Quebec Qubec 0 0 0 0 1136.37801 6540 904315 1 0 Quebec Qubec 0 0 0 0 570.34664 6541 1554 4 0 Quebec Qubec 0 0 0 0 35.16082 6542 4803133 2 0 Quebec Qubec 0 0 0 0 3160.32795 6543 837320 1 0 Quebec Qubec 0 0 0 0 1816.39562 6544 1607 4 0 Quebec Qubec 0 0 0 0 1818.78688 6545 8302138 1 0 Quebec Qubec 0 0 0 0 496.31836 6546 897335 1 0 Quebec Qubec 0 0 0 0 366.31273 6549 1552 4 0 Quebec Qubec 0 0 0 0 925.72453 6550 1580 4 0 Quebec Qubec 0 0 0 0 3162.47003 6551 848840 1 1 Quebec Qubec 0 0 0 0 539.87524 6555 1581 4 0 Quebec Qubec 0 0 0 0 3357.48924 6556 840220 1 0 Quebec Qubec 0 0 0 0 2702.85463 6557 1860 4 0 Quebec Qubec 0 0 0 0 1454.93436 6559 888535 1 0 Quebec Qubec 0 0 0 0 1673.30070 6560 4677223 3 0 Quebec Qubec 0 0 0 0 1374.20757 6561 897735 1 0 Quebec Qubec 0 0 0 0 3178.43622 6562 897335 1 0 Quebec Qubec 0 0 0 0 508.42211 6563 1556 4 0 Quebec Qubec 0 0 0 0 1398.45821 6564 1471 4 0 Quebec Qubec 0 0 0 0 978.92949 6565 902815 1 0 Quebec Qubec 0 0 0 0 1231.84232 6566 1558 4 0 Quebec Qubec 0 0 0 0 7320.22700 6567 1612 4 0 Quebec Qubec 0 0 0 0 11854.84334 6568 3354344 3 0 Quebec Qubec 0 0 0 0 1221.57385 6569 898335 1 0 Quebec Qubec 0 0 0 0 665.12786 6570 888535 1 0 Quebec Qubec 0 0 0 0 267.23339 6572 3354344 3 0 Quebec Qubec 0 0 0 0 18.30470 6573 3226344 3 0 Quebec Qubec 0 0 0 0 85.36268 6574 6904148 2 0 Quebec Qubec 0 0 0 0 850.77420 6575 1174 4 0 Quebec Qubec 0 0 0 0 932.53913 6576 1230219 3 0 Quebec Qubec 0 0 0 0 3104.26890 6577 1222 4 0 Quebec Qubec 0 0 0 0 991.92754 6582 1568 4 0 Quebec Qubec 0 0 0 0 1930.75254 6583 2639 4 0 Quebec Qubec 0 0 0 0 98.35386 6585 2648 4 0 Quebec Qubec 0 0 0 0 479.28781 6586 2928 4 0 Quebec Qubec 0 0 0 0 277.69673 6588 2660 4 0 Quebec Qubec 0 0 0 0 547.54137 6589 1203 4 0 Quebec Qubec 0 0 0 0 8217.55980 6591 2351 4 0 Quebec Qubec 0 0 0 0 1964.53746 6593 1550 4 0 Quebec Qubec 0 0 0 0 2366.01544 6594 4803133 2 0 Quebec Qubec 0 0 0 0 924.11378 6595 1172 4 0 Quebec Qubec 0 0 0 0 810.45516 6596 4806133 2 0 Quebec Qubec 0 0 0 0 1887.98619 6598 1578 4 0 Quebec Qubec 0 0 0 0 1317.29347 6599 9083132 2 0 Quebec Qubec 0 0 0 0 2062.32992 6600 1468 4 0 Quebec Qubec 0 0 0 0 537.00587 6601 9083132 2 0 Quebec Qubec 0 0 0 0 986.86239 6602 1472 4 0 Quebec Qubec 0 0 0 0 4809.28300 6603 904530 1 0 Quebec Qubec 0 0 0 0 479.80552 6604 1549 4 0 Quebec Qubec 0 0 0 0 3039.11299 6605 848840 1 1 Quebec Qubec 0 0 0 0 1215.08255 6606 2648 4 0 Quebec Qubec 0 0 0 0 228.41300 6607 9083132 2 0 Quebec Qubec 0 0 0 0 1509.13881 6608 4964 4 0 Quebec Qubec 0 0 0 0 1973.94747 6609 9082132 2 0 Quebec Qubec 0 0 0 0 3116.81023 6610 840220 1 0 Quebec Qubec 0 0 0 0 1611.85217 6611 2650 4 0 Quebec Qubec 0 0 0 0 2984.39367 6614 4863640 3 0 Quebec Qubec 0 0 0 0 2353.34585 6615 1204 4 0 Quebec Qubec 0 0 0 0 2005.16638 6616 9082132 2 0 Quebec Qubec 0 0 0 0 1181.59809 6617 904530 1 0 Quebec Qubec 0 0 0 0 1829.27898 6618 902815 1 0 Quebec Qubec 0 0 0 0 1276.54125 6619 9083132 2 0 Quebec Qubec 0 0 0 0 2555.07688 6621 8302138 1 0 Quebec Qubec 0 0 0 0 2209.16111 6622 4981223 3 0 Quebec Qubec 0 0 0 0 1831.11554 6623 7053344 4 0 Quebec Qubec 0 0 0 0 6625.57506 6624 6910327 3 0 Quebec Qubec 0 0 0 0 806.26978 6625 1578 4 0 Quebec Qubec 0 0 0 0 4687.07255 6626 8249132 2 0 Quebec Qubec 0 0 0 0 2417.70446 6627 1845 4 0 Quebec Qubec 0 0 0 0 6609.69763 6628 2221 4 0 Quebec Qubec 0 0 0 0 1644.98240 6629 1811 4 0 Quebec Qubec 0 0 0 0 1957.17665 6630 1475 4 0 Quebec Qubec 0 0 0 0 1158.22695 6631 9095209 3 0 Quebec Qubec 0 0 0 0 379.20944 6632 7053344 4 0 Quebec Qubec 0 0 0 0 2610.31777 6633 1230219 3 0 Quebec Qubec 0 0 0 0 991.76502 6634 8246132-138 1 0 Quebec Qubec 0 0 0 0 2901.64777 6635 897135 1 0 Quebec Qubec 0 0 0 0 1635.96790 6636 4806133 2 0 Quebec Qubec 0 0 0 0 292.53399 6637 1845 4 0 Quebec Qubec 0 0 0 0 18645.11771 6638 7053344 4 0 Quebec Qubec 0 0 0 0 6418.58786 6639 9071217 4 0 Quebec Qubec 0 0 0 0 323.66770 6640 4808219 3 0 Quebec Qubec 0 0 0 0 2720.15728 6641 840220 1 0 Quebec Qubec 0 0 0 0 1211.06473 6642 2641 4 0 Quebec Qubec 0 0 0 0 987.15767 6643 2030 4 0 Quebec Qubec 0 0 0 0 213.87331 6645 347219 3 0 Quebec Qubec 0 0 0 0 3328.06419 6646 7137344 4 0 Quebec Qubec 0 0 0 0 7403.44155 6647 1208 4 0 Quebec Qubec 0 0 0 0 111.81902 6648 390 4 0 Quebec Qubec 0 0 0 0 1770.62472 6651 316 4 0 Quebec Qubec 0 0 0 0 837.49641 6652 4994133 2 0 Quebec Qubec 0 0 0 0 1722.12481 6654 8259132-138 1 0 Quebec Qubec 0 0 0 0 915.79097 6655 1844 4 0 Quebec Qubec 0 0 0 0 2969.03460 6656 1853 4 0 Quebec Qubec 0 0 0 0 283.52693 6657 1131 4 0 Quebec Qubec 0 0 0 0 1806.18124 6659 4808219 3 0 Quebec Qubec 0 0 0 0 3629.27109 6660 390 4 0 Quebec Qubec 0 0 0 0 3981.04635 6663 1475 4 0 Quebec Qubec 0 0 0 0 191.27592 6664 1622 4 0 Quebec Qubec 0 0 0 0 1586.79909 6666 9095209 3 0 Quebec Qubec 0 0 0 0 2261.55821 6667 1584 4 0 Quebec Qubec 0 0 0 0 3966.84109 6668 1226 4 0 Quebec Qubec 0 0 0 0 5774.83663 6669 3233344 4 0 Quebec Qubec 0 0 0 0 2826.47658 6670 4863640 3 0 Quebec Qubec 0 0 0 0 2802.06262 6672 1842 4 0 Quebec Qubec 0 0 0 0 217.54552 6673 9095209 3 0 Quebec Qubec 0 0 0 0 2231.31855 6674 1477 4 0 Quebec Qubec 0 0 0 0 2262.13435 6675 1478 4 0 Quebec Qubec 0 0 0 0 4498.05849 6676 378 4 0 Quebec Qubec 0 0 0 0 714.86383 6677 1134 4 0 Quebec Qubec 0 0 0 0 1849.51386 6678 1324 4 0 Quebec Qubec 0 0 0 0 3863.10451 6679 1549 4 0 Quebec Qubec 0 0 0 0 2635.10745 6680 34 3 0 Ontario Ontario 0 0 0 0 7402.04023 6682 7245344 3 0 Quebec Qubec 0 0 0 0 12409.28706 6683 4661227 4 0 Quebec Qubec 0 0 0 0 632.17109 6685 44 3 0 Ontario Ontario 0 0 0 0 2348.85611 6686 2027 4 0 Ontario Ontario 0 0 0 0 2618.18568 6687 524 3 0 Ontario Ontario 0 0 0 0 1548.85353 6692 64 3 0 Ontario Ontario 0 0 0 0 8089.04284 6695 74 3 0 Ontario Ontario 0 0 0 0 4618.46479 6696 924 3 0 Ontario Ontario 0 0 0 0 1800.09177 6698 1619 4 0 Quebec Qubec 0 0 0 0 265.72263 6701 1011 3 0 Ontario Ontario 0 0 0 0 2100.92642 6705 1318 4 0 Quebec Qubec 0 0 0 0 2726.27097 6706 1841 4 0 Quebec Qubec 0 0 0 0 3827.09870 6708 124 3 0 Ontario Ontario 0 0 0 0 170.44439 6710 2760 4 0 Quebec Qubec 0 0 0 0 2446.25273 6711 1263 4 0 Quebec Qubec 0 0 0 0 5217.37184 6712 1170 4 0 Quebec Qubec 0 0 0 0 5999.05318 6713 4967223 3 0 Quebec Qubec 0 0 0 0 1567.73703 6714 1334 2 0 Ontario Ontario 0 0 0 0 4835.72026 6715 1417 2 0 Ontario Ontario 0 0 0 0 3364.72804 6716 7199344 3 0 Quebec Qubec 0 0 0 0 404.65886 6719 17417 1 1 Ontario Ontario 0 0 0 0 328.51292 6720 1716 4 0 Quebec Qubec 0 0 0 0 392.69744 6721 204 3 0 Ontario Ontario 0 0 0 0 4143.20943 6722 22417 1 1 Ontario Ontario 0 0 0 0 5203.02659 6723 23417 1 1 Ontario Ontario 0 0 0 0 1.73656 6724 244 3 0 Ontario Ontario 0 0 0 0 0.75004 6725 25417 1 0 Ontario Ontario 0 0 0 0 195.25737 6726 1713 4 0 Quebec Qubec 0 0 0 0 1840.65231 6727 2717 2 0 Ontario Ontario 0 0 0 0 5576.75737 6728 879730 1 0 Quebec Qubec 0 0 0 0 5271.53210 6729 8257207-221 3 0 Quebec Qubec 0 0 0 0 991.97792 6731 1318 4 0 Quebec Qubec 0 0 0 0 6023.47077 6732 1487 4 0 Quebec Qubec 0 0 0 0 3554.30845 6733 8259132-138 2 0 Quebec Qubec 0 0 0 0 446.31879 6734 8257207 3 0 Quebec Qubec 0 0 0 0 35.03494 6735 9109207 3 0 Quebec Qubec 0 0 0 0 1736.02349 6741 1767 4 0 Quebec Qubec 0 0 0 0 2976.01231 6744 1620 4 0 Quebec Qubec 0 0 0 0 1166.77634 6745 3114 3 0 Ontario Ontario 0 0 0 0 8908.01616 6746 848840 1 1 Quebec Qubec 0 0 0 0 122.68567 6747 9108221 3 0 Quebec Qubec 0 0 0 0 65.12885 6748 2813 4 0 Quebec Qubec 0 0 0 0 30039.34380 6749 6765148 2 0 Quebec Qubec 0 0 0 0 1449.38566 6750 1717 4 0 Quebec Qubec 0 0 0 0 1832.63777 6751 2766 4 0 Quebec Qubec 0 0 0 0 4581.73529 6753 2924 3 0 Ontario Ontario 0 0 0 0 1200.07530 6757 8259132-138 2 0 Quebec Qubec 0 0 0 0 2105.40823 6758 1767 4 0 Quebec Qubec 0 0 0 0 5678.98404 6759 347 4 0 Quebec Qubec 0 0 0 0 1633.65324 6760 3224 3 0 Ontario Ontario 0 0 0 0 4445.09201 6761 1195 4 0 Quebec Qubec 0 0 0 0 1760.67481 6762 9123 4 0 Quebec Qubec 0 0 0 0 1524.46026 6763 1809 4 0 Quebec Qubec 0 0 0 0 336.45750 6764 9122132-138 2 0 Quebec Qubec 0 0 0 0 5432.26275 6765 1941 4 0 Quebec Qubec 0 0 0 0 912.59281 6767 1715 4 0 Quebec Qubec 0 0 0 0 2217.55104 6769 3411 3 0 Ontario Ontario 0 0 0 0 8478.20434 6770 3524 3 0 Ontario Ontario 0 0 0 0 1637.45932 6771 3324 3 0 Ontario Ontario 0 0 0 0 8674.85762 6772 840220 1 0 Quebec Qubec 0 0 0 0 2742.59861 6773 36417 1 1 Ontario Ontario 0 0 0 0 2783.61444 6777 1264 4 0 Quebec Qubec 0 0 0 0 9703.58132 6778 9071217 4 0 Quebec Qubec 0 0 0 0 229.98844 6780 9123 4 0 Quebec Qubec 0 0 0 0 2869.94142 6781 1712 4 0 Quebec Qubec 0 0 0 0 972.83067 6782 346 4 0 Quebec Qubec 0 0 0 0 4267.67044 6783 1943 4 0 Quebec Qubec 0 0 0 0 4380.13952 6784 1181 4 0 Quebec Qubec 0 0 0 0 1416.80494 6785 3815 3 0 Ontario Ontario 0 0 0 0 1319.87716 6786 3924 3 0 Ontario Ontario 0 0 0 0 932.66323 6787 4024 3 0 Ontario Ontario 0 0 0 0 4790.52129 6791 848840 1 1 Quebec Qubec 0 0 0 0 4835.31342 6792 879830 1 0 Quebec Qubec 0 0 0 0 1378.17346 6793 1816 4 0 Quebec Qubec 0 0 0 0 33.77602 6794 1816 4 0 Quebec Qubec 0 0 0 0 3478.88720 6796 3724 3 0 Ontario Ontario 0 0 0 0 144.41336 6797 7401 4 0 Quebec Qubec 0 0 0 0 1589.81035 6798 7214342 4 0 Quebec Qubec 0 0 0 0 2458.53599 6799 751040 1 1 Quebec Qubec 0 0 0 0 141.45111 6800 7238342 3 0 Quebec Qubec 0 0 0 0 1565.42141 6801 879830 1 0 Quebec Qubec 0 0 0 0 1494.59900 6802 9122132-138 2 0 Quebec Qubec 0 0 0 0 2399.05572 6803 4114 3 0 Ontario Ontario 0 0 0 0 668.95959 6804 1813132 2 0 Quebec Qubec 0 0 0 0 3776.95448 6805 2759 4 0 Quebec Qubec 0 0 0 0 1520.96456 6806 9123 4 0 Quebec Qubec 0 0 0 0 809.15363 6807 9123132 2 0 Quebec Qubec 0 0 0 0 968.47786 6808 7236342 3 0 Quebec Qubec 0 0 0 0 3627.16030 6809 7214342 4 0 Quebec Qubec 0 0 0 0 473.64474 6810 7240342 3 0 Quebec Qubec 0 0 0 0 1090.22454 6811 7240342 3 0 Quebec Qubec 0 0 0 0 974.40508 6814 1815132 2 0 Quebec Qubec 0 0 0 0 2312.36785 6815 1706 4 0 Quebec Qubec 0 0 0 0 493.77413 6817 1705132 2 0 Quebec Qubec 0 0 0 0 6961.14291 6819 1182 4 0 Quebec Qubec 0 0 0 0 2401.66251 6821 2567 4 0 Quebec Qubec 0 0 0 0 1545.52716 6822 775040 1 1 Quebec Qubec 0 0 0 0 89.53451 6823 1267 4 0 Quebec Qubec 0 0 0 0 1924.34897 6824 840220 1 0 Quebec Qubec 0 0 0 0 1413.22710 6825 1184 4 0 Quebec Qubec 0 0 0 0 481.48854 6826 2568132 2 0 Quebec Qubec 0 0 0 0 992.74236 6827 2687132 2 0 Quebec Qubec 0 0 0 0 2334.79167 6828 1290 4 0 Quebec Qubec 0 0 0 0 5221.69706 6829 7197342 4 0 Quebec Qubec 0 0 0 0 2880.04824 6831 4311 3 0 Ontario Ontario 0 0 0 0 1902.84737 6833 4415 3 0 Ontario Ontario 0 0 0 0 8013.82239 6835 4994133 2 0 Quebec Qubec 0 0 0 0 5240.75679 6838 774640 1 1 Quebec Qubec 0 0 0 0 984.19074 6839 7217201 3 0 Quebec Qubec 0 0 0 0 103.48031 6840 774840 1 1 Quebec Qubec 0 0 0 0 3896.29519 6841 1620207 4 0 Quebec Qubec 0 0 0 0 465.78769 6842 4819133 2 0 Quebec Qubec 0 0 0 0 1627.53895 6844 7197342 4 0 Quebec Qubec 0 0 0 0 154.75326 6847 4822225 4 0 Quebec Qubec 0 0 0 0 1837.21343 6849 7402 4 0 Quebec Qubec 0 0 0 0 8783.90006 6850 4517 2 0 Ontario Ontario 0 0 0 0 559.62778 6851 4810 3 0 Ontario Ontario 0 0 0 0 1013.44769 6852 4910 3 0 Ontario Ontario 0 0 0 0 2093.94585 6853 5010 3 0 Ontario Ontario 0 0 0 0 1753.40976 6854 5214 3 0 Ontario Ontario 0 0 0 0 4012.78768 6855 5310 3 0 Ontario Ontario 0 0 0 0 1274.56824 6857 6257 4 0 Quebec Qubec 0 0 0 0 1800.74452 6858 774840 1 1 Quebec Qubec 0 0 0 0 3019.46918 6859 348 4 0 Quebec Qubec 0 0 0 0 1364.88921 6861 1290 4 0 Quebec Qubec 0 0 0 0 319.63869 6865 5214 3 0 Ontario Ontario 0 0 0 0 2996.21637 6866 4724 3 0 Ontario Ontario 0 0 0 0 1950.89995 6868 775040 1 1 Quebec Qubec 0 0 0 0 4962.87492 6869 775040 1 1 Quebec Qubec 0 0 0 0 3952.64461 6870 774840 1 1 Quebec Qubec 0 0 0 0 398.61224 6871 1293 4 0 Quebec Qubec 0 0 0 0 2057.65297 6872 5415 3 0 Ontario Ontario 0 0 0 0 5208.91458 6873 774840 1 1 Quebec Qubec 0 0 0 0 2336.92947 6874 5511 3 0 Ontario Ontario 0 0 0 0 6667.24580 6875 6762148 2 0 Quebec Qubec 0 0 0 0 26610.46378 6876 6758321 4 0 Quebec Qubec 0 0 0 0 1531.93845 6877 351 4 0 Quebec Qubec 0 0 0 0 117.65172 6878 5810 3 0 Ontario Ontario 0 0 0 0 9031.48599 6880 1823 3 0 Quebec Qubec 0 0 0 0 3541.22423 6883 840220 1 0 Quebec Qubec 0 0 0 0 1900.77131 6884 840220 1 0 Quebec Qubec 0 0 0 0 863.56147 6885 6015 3 0 Ontario Ontario 0 0 0 0 2556.96220 6887 7402340 4 0 Quebec Qubec 0 0 0 0 1131.04604 6888 7520540 1 0 Quebec Qubec 0 0 0 0 7326.58656 6889 4967223 3 0 Quebec Qubec 0 0 0 0 2246.83800 6890 382 4 0 Quebec Qubec 0 0 0 0 968.21426 6893 7409340 3 0 Quebec Qubec 0 0 0 0 4596.11505 6894 7405342 4 0 Quebec Qubec 0 0 0 0 1634.56732 6897 2689 4 0 Quebec Qubec 0 0 0 0 3962.75124 6898 2685 4 0 Quebec Qubec 0 0 0 0 2753.64274 6899 6120 3 0 Ontario Ontario 0 0 0 0 2134.87398 6902 6214 3 0 Ontario Ontario 0 0 0 0 4426.95745 6903 9118138 2 0 Quebec Qubec 0 0 0 0 1030.63439 6904 2690 4 0 Quebec Qubec 0 0 0 0 1481.89398 6905 6315 3 0 Ontario Ontario 0 0 0 0 979.68011 6906 1311 4 0 Quebec Qubec 0 0 0 0 489.99663 6907 1300 4 0 Quebec Qubec 0 0 0 0 2664.56297 6908 1307 4 0 Quebec Qubec 0 0 0 0 3107.67358 6910 6411 3 0 Ontario Ontario 0 0 0 0 2821.00652 6911 6510 3 0 Ontario Ontario 0 0 0 0 769.04235 6912 6620 3 0 Ontario Ontario 0 0 0 0 8155.76232 6914 6734 2 0 Ontario Ontario 0 0 0 0 1154.39203 6915 6810 3 0 Ontario Ontario 0 0 0 0 1278.30186 6916 6910 3 0 Ontario Ontario 0 0 0 0 1376.98383 6917 7759540 1 0 Quebec Qubec 0 0 0 0 3895.40259 6918 7010 3 0 Ontario Ontario 0 0 0 0 2220.56128 6919 7110 3 0 Ontario Ontario 0 0 0 0 19003.15386 6920 2947 4 0 Quebec Qubec 0 0 0 0 1194.57634 6923 1309 4 0 Quebec Qubec 0 0 0 0 316.58652 6924 7210 3 0 Ontario Ontario 0 0 0 0 5189.29529 6925 2566 4 0 Quebec Qubec 0 0 0 0 2488.93448 6926 1310 4 0 Quebec Qubec 0 0 0 0 2761.57256 6927 1293 4 0 Quebec Qubec 0 0 0 0 11957.35054 6930 9095209 3 0 Quebec Qubec 0 0 0 0 5570.34438 6931 7417 2 0 Ontario Ontario 0 0 0 0 1377.35671 6932 7515 3 0 Ontario Ontario 0 0 0 0 1908.68688 6933 840220 1 0 Quebec Qubec 0 0 0 0 1943.33046 6934 1447 4 0 Quebec Qubec 0 0 0 0 3322.49331 6935 354 4 0 Quebec Qubec 0 0 0 0 4456.01570 6936 8253207 4 0 Quebec Qubec 0 0 0 0 863.44046 6939 7610 3 0 Ontario Ontario 0 0 0 0 4475.01460 6940 7324 3 0 Ontario Ontario 0 0 0 0 1112.61426 6941 1442 4 0 Quebec Qubec 0 0 0 0 8426.93304 6942 7147325 3 0 Quebec Qubec 0 0 0 0 551.52586 6943 9116209 4 0 Quebec Qubec 0 0 0 0 6241.57232 6944 5026 3 0 Quebec Qubec 0 0 0 0 10391.88964 6945 7720 3 0 Ontario Ontario 0 0 0 0 629.94085 6946 5026221 3 0 Quebec Qubec 0 0 0 0 564.95789 6947 5026 3 0 Quebec Qubec 0 0 0 0 663.37737 6948 1277340 3 0 Quebec Qubec 0 0 0 0 2648.58691 6949 1136 4 0 Quebec Qubec 0 0 0 0 912.71947 6950 1448 4 0 Quebec Qubec 0 0 0 0 5109.15948 6951 7222201 3 0 Quebec Qubec 0 0 0 0 309.29008 6957 1283340 4 0 Quebec Qubec 0 0 0 0 656.92777 6958 789 3 0 Ontario Ontario 0 0 0 0 2015.08634 6959 7914 3 0 Ontario Ontario 0 0 0 0 2421.58787 6961 8014 3 0 Ontario Ontario 0 0 0 0 659.06600 6962 1174340 3 0 Quebec Qubec 0 0 0 0 1081.18055 6963 775420 1 0 Quebec Qubec 0 0 0 0 2106.67484 6964 7763540 1 0 Quebec Qubec 0 0 0 0 4805.57772 6965 81417 1 1 Ontario Ontario 0 0 0 0 1936.06628 6966 8223 3 0 Ontario Ontario 0 0 0 0 160.34502 6967 776120 1 0 Quebec Qubec 0 0 0 0 471.64329 6968 1280 4 0 Quebec Qubec 0 0 0 0 1721.12138 6969 7406340 3 0 Quebec Qubec 0 0 0 0 2404.28863 6970 1306 4 0 Quebec Qubec 0 0 0 0 2229.78624 6973 8717 2 0 Ontario Ontario 0 0 0 0 8484.64323 6975 9123132 2 0 Quebec Qubec 0 0 0 0 285.02181 6977 9123132 2 0 Quebec Qubec 0 0 0 0 1608.97981 6978 6275 4 0 Quebec Qubec 0 0 0 0 3969.71488 6980 2692 4 0 Quebec Qubec 0 0 0 0 675.89050 6987 7764132 2 0 Quebec Qubec 0 0 0 0 795.04793 6988 8717 2 0 Ontario Ontario 0 0 0 0 10972.62730 6990 1448 4 0 Quebec Qubec 0 0 0 0 1998.79873 6991 7406340 3 0 Quebec Qubec 0 0 0 0 1481.31401 6992 9315 3 0 Ontario Ontario 0 0 0 0 434.38539 6994 1313 4 0 Quebec Qubec 0 0 0 0 2215.90319 6996 1278 4 0 Quebec Qubec 0 0 0 0 3519.99701 6998 2694 4 0 Quebec Qubec 0 0 0 0 9594.71111 6999 9071217 4 0 Quebec Qubec 0 0 0 0 2130.40708 7000 9014 3 0 Ontario Ontario 0 0 0 0 2095.26801 7003 9223 3 0 Ontario Ontario 0 0 0 0 16848.36774 7004 4808219 3 0 Quebec Qubec 0 0 0 0 3908.25217 7005 4898219-221 3 0 Quebec Qubec 0 0 0 0 349.76210 7007 4898219-221 3 0 Quebec Qubec 0 0 0 0 1617.59521 7008 8924 3 0 Ontario Ontario 0 0 0 0 227.53077 7009 10814 3 0 Ontario Ontario 0 0 0 0 299.92201 7010 9118 3 0 Ontario Ontario 0 0 0 0 2169.87437 7011 9124 3 0 Ontario Ontario 0 0 0 0 2452.92232 7012 6272 4 0 Quebec Qubec 0 0 0 0 413.68976 7014 4953219-221 3 0 Quebec Qubec 0 0 0 0 5537.10106 7017 7871205 3 0 Quebec Qubec 0 0 0 0 20.58701 7018 4907219-221 3 0 Quebec Qubec 0 0 0 0 3125.96993 7019 959 3 0 Ontario Ontario 0 0 0 0 2366.82474 7020 9418 3 0 Ontario Ontario 0 0 0 0 134.90886 7021 4906219-221 3 0 Quebec Qubec 0 0 0 0 16812.52169 7022 890815 1 0 Quebec Qubec 0 0 0 0 2035.21213 7023 2688 4 0 Quebec Qubec 0 0 0 0 1791.98823 7024 7871205 3 0 Quebec Qubec 0 0 0 0 1499.14058 7025 1145 4 0 Quebec Qubec 0 0 0 0 1082.05386 7026 9823 3 0 Ontario Ontario 0 0 0 0 1908.75603 7027 1316 4 0 Quebec Qubec 0 0 0 0 3576.82782 7028 776020 1 0 Quebec Qubec 0 0 0 0 340.94067 7029 1148 4 0 Quebec Qubec 0 0 0 0 3069.41504 7034 10024 3 0 Ontario Ontario 0 0 0 0 1461.45741 7036 1019 3 0 Ontario Ontario 0 0 0 0 5403.67655 7037 10210 3 0 Ontario Ontario 0 0 0 0 3865.30237 7038 7222201 3 0 Quebec Qubec 0 0 0 0 1804.34855 7039 6271 4 0 Quebec Qubec 0 0 0 0 6683.73746 7041 10317 2 0 Ontario Ontario 0 0 0 0 771.85818 7042 1049 3 0 Ontario Ontario 0 0 0 0 2102.87868 7043 10623 3 0 Ontario Ontario 0 0 0 0 109.39402 7044 10717 2 0 Ontario Ontario 0 0 0 0 2016.77321 7045 10821 3 0 Ontario Ontario 0 0 0 0 6631.77975 7046 9118138 2 0 Quebec Qubec 0 0 0 0 2243.79597 7047 2688205 3 0 Quebec Qubec 0 0 0 0 380.16645 7049 12423 3 0 Ontario Ontario 0 0 0 0 2494.24126 7050 2748 4 0 Quebec Qubec 0 0 0 0 6210.50398 7051 110417 1 1 Ontario Ontario 0 0 0 0 6375.34191 7052 11134 2 0 Ontario Ontario 0 0 0 0 7912.48553 7053 4967223 3 0 Quebec Qubec 0 0 0 0 239.41230 7054 11234 2 0 Ontario Ontario 0 0 0 0 18328.18949 7057 6405148 2 0 Quebec Qubec 0 0 0 0 692.88371 7058 1139 3 0 Ontario Ontario 0 0 0 0 4012.36125 7059 11915 3 0 Ontario Ontario 0 0 0 0 1039.89092 7061 1138 4 0 Quebec Qubec 0 0 0 0 16746.55797 7063 5026221 3 0 Quebec Qubec 0 0 0 0 240.71411 7064 11519 3 0 Ontario Ontario 0 0 0 0 866.21504 7065 7874138 2 0 Quebec Qubec 0 0 0 0 5420.96611 7066 4906219-221 3 0 Quebec Qubec 0 0 0 0 5421.75930 7067 7406340 3 0 Quebec Qubec 0 0 0 0 1921.81949 7068 7222201 3 0 Quebec Qubec 0 0 0 0 39401.99935 7070 453301 3 0 Quebec Qubec 0 0 0 0 11195.57122 7071 11417 2 0 Ontario Ontario 0 0 0 0 3517.29360 7073 776020 1 0 Quebec Qubec 0 0 0 0 3616.92357 7074 1319 4 0 Quebec Qubec 0 0 0 0 226.45138 7075 7867138 2 0 Quebec Qubec 0 0 0 0 164.14780 7076 7827205 3 0 Quebec Qubec 0 0 0 0 8407.55913 7077 1138 4 0 Quebec Qubec 0 0 0 0 762.87207 7078 13817 2 0 Ontario Ontario 0 0 0 0 430.63059 7079 12619 3 0 Ontario Ontario 0 0 0 0 35421.04417 7080 6723317 3 0 Quebec Qubec 0 0 0 0 810.01207 7081 1169 3 0 Ontario Ontario 0 0 0 0 3655.73301 7084 257 4 0 Quebec Qubec 0 0 0 0 1746.30819 7085 6273 4 0 Quebec Qubec 0 0 0 0 201.39084 7086 364 4 0 Quebec Qubec 0 0 0 0 1577.56381 7088 12021 3 0 Ontario Ontario 0 0 0 0 1155.34873 7089 362 4 0 Quebec Qubec 0 0 0 0 771.04471 7091 12221 3 0 Ontario Ontario 0 0 0 0 2407.41330 7092 12124 3 0 Ontario Ontario 0 0 0 0 2146.91458 7093 12715 3 0 Ontario Ontario 0 0 0 0 3424.64705 7095 12310 3 0 Ontario Ontario 0 0 0 0 1881.88513 7096 256 4 0 Quebec Qubec 0 0 0 0 6687.19678 7097 4893221 3 0 Quebec Qubec 0 0 0 0 3121.41102 7098 12423 3 0 Ontario Ontario 0 0 0 0 234.15534 7099 12522 3 0 Ontario Ontario 0 0 0 0 3698.57765 7100 7399338 3 0 Quebec Qubec 0 0 0 0 8242.08039 7104 8253207 4 0 Quebec Qubec 0 0 0 0 10670.45962 7105 7147325 3 0 Quebec Qubec 0 0 0 0 828.00519 7106 7147 3 0 Quebec Qubec 0 0 0 0 403.80435 7109 7827205 4 0 Quebec Qubec 0 0 0 0 1821.64288 7110 12921 3 0 Ontario Ontario 0 0 0 0 2483.82486 7113 7867138 2 0 Quebec Qubec 0 0 0 0 8904.11728 7114 7763132 2 0 Quebec Qubec 0 0 0 0 1912.95184 7115 7147325 3 0 Quebec Qubec 0 0 0 0 1544.49138 7117 13415 3 0 Ontario Ontario 0 0 0 0 2150.68621 7120 13123 3 0 Ontario Ontario 0 0 0 0 2486.03360 7121 13024 3 0 Ontario Ontario 0 0 0 0 4327.74144 7124 1289 3 0 Ontario Ontario 0 0 0 0 4069.20484 7127 4967223 3 0 Quebec Qubec 0 0 0 0 1338.05169 7128 13521 3 0 Ontario Ontario 0 0 0 0 1052.50606 7129 13623 3 0 Ontario Ontario 0 0 0 0 2009.59909 7134 13722 3 0 Ontario Ontario 0 0 0 0 915.21512 7138 6267 4 0 Quebec Qubec 0 0 0 0 3395.12401 7139 255 4 0 Quebec Qubec 0 0 0 0 6922.51181 7140 3251 4 0 Quebec Qubec 0 0 0 0 1841.88597 7141 983 4 0 Quebec Qubec 0 0 0 0 1409.14025 7143 1419 3 0 Ontario Ontario 0 0 0 0 5464.11016 7144 776020 1 0 Quebec Qubec 0 0 0 0 6457.15015 7145 7285201 3 0 Quebec Qubec 0 0 0 0 6360.08788 7147 144417 1 1 Ontario Ontario 0 0 0 0 56482.19447 7148 6389315 4 0 Quebec Qubec 0 0 0 0 45844.21997 7149 6676309 3 0 Quebec Qubec 0 0 0 0 129.23692 7152 14523 3 0 Ontario Ontario 0 0 0 0 4449.34939 7154 14610 3 0 Ontario Ontario 0 0 0 0 367.75410 7155 776020 1 0 Quebec Qubec 0 0 0 0 789.82203 7156 1438 3 0 Ontario Ontario 0 0 0 0 2570.77393 7158 1482 3 0 Ontario Ontario 0 0 0 0 11098.54774 7159 9116209 4 0 Quebec Qubec 0 0 0 0 5618.59184 7160 7829205 4 0 Quebec Qubec 0 0 0 0 2388.51441 7161 14724 3 0 Ontario Ontario 0 0 0 0 2474.27073 7162 14921 3 0 Ontario Ontario 0 0 0 0 5570.62227 7163 7399338 3 0 Quebec Qubec 0 0 0 0 1084.57567 7164 7285 4 0 Quebec Qubec 0 0 0 0 2592.80213 7165 7866138 2 0 Quebec Qubec 0 0 0 0 28.03896 7166 7399338 3 0 Quebec Qubec 0 0 0 0 1440.10777 7168 1509 3 0 Ontario Ontario 0 0 0 0 1426.82593 7169 18217 2 0 Ontario Ontario 0 0 0 0 2350.08464 7170 15123 3 0 Ontario Ontario 0 0 0 0 6617.53820 7173 15434 2 0 Ontario Ontario 0 0 0 0 1524.87664 7174 15523 3 0 Ontario Ontario 0 0 0 0 6409.54562 7175 465301 3 0 Quebec Qubec 0 0 0 0 5389.63607 7176 15623 3 0 Ontario Ontario 0 0 0 0 2034.73756 7177 15722 3 0 Ontario Ontario 0 0 0 0 3321.36810 7178 1067 4 0 Quebec Qubec 0 0 0 0 131.91325 7179 1220 4 0 Quebec Qubec 0 0 0 0 2554.65039 7180 1079 4 0 Quebec Qubec 0 0 0 0 4153.05991 7181 777330 2 0 Quebec Qubec 0 0 0 0 1738.02823 7182 7306201 2 0 Quebec Qubec 0 0 0 0 210.13404 7183 1079 4 0 Quebec Qubec 0 0 0 0 1410.14686 7184 1589 3 0 Ontario Ontario 0 0 0 0 1867.93216 7185 1598 3 0 Ontario Ontario 0 0 0 0 2572.15544 7186 16110 3 0 Ontario Ontario 0 0 0 0 4726.33278 7189 16815 3 0 Ontario Ontario 0 0 0 0 2328.68914 7190 16321 3 0 Ontario Ontario 0 0 0 0 1185.46056 7191 16421 3 0 Ontario Ontario 0 0 0 0 3699.44125 7192 16510 3 0 Ontario Ontario 0 0 0 0 2292.54059 7193 16623 3 0 Ontario Ontario 0 0 0 0 3128.86202 7194 1672 3 0 Ontario Ontario 0 0 0 0 2267.87726 7195 16934 2 0 Ontario Ontario 0 0 0 0 21150.05528 7196 4842225 4 0 Quebec Qubec 0 0 0 0 1798.69780 7197 1083 4 0 Quebec Qubec 0 0 0 0 12880.98209 7198 4716202 3 0 Quebec Qubec 0 0 0 0 71.57853 7199 4854225 4 0 Quebec Qubec 0 0 0 0 1341.97613 7200 1709 3 0 Ontario Ontario 0 0 0 0 1558.24315 7201 17710 3 0 Ontario Ontario 0 0 0 0 795.49125 7202 17815 3 0 Ontario Ontario 0 0 0 0 649.26547 7203 4716202 3 0 Quebec Qubec 0 0 0 0 341.57270 7204 1719 3 0 Ontario Ontario 0 0 0 0 1883.67854 7205 17322 3 0 Ontario Ontario 0 0 0 0 3217.91779 7206 181 3 0 Ontario Ontario 0 0 0 0 2328.84883 7207 17621 3 0 Ontario Ontario 0 0 0 0 783.83653 7208 1083 4 0 Quebec Qubec 0 0 0 0 802.71180 7209 17710 3 0 Ontario Ontario 0 0 0 0 188.71055 7210 1354201 2 0 Quebec Qubec 0 0 0 0 3000.84317 7211 7279338 3 0 Quebec Qubec 0 0 0 0 320.53918 7212 1357201 2 0 Quebec Qubec 0 0 0 0 1403.66969 7213 1354201 2 0 Quebec Qubec 0 0 0 0 2659.97543 7214 4875202 3 0 Quebec Qubec 0 0 0 0 5915.65142 7216 985 4 0 Quebec Qubec 0 0 0 0 2061.05233 7217 778030 2 0 Quebec Qubec 0 0 0 0 3277.10193 7218 4731202 3 0 Quebec Qubec 0 0 0 0 234.49140 7219 778030 1 0 Quebec Qubec 0 0 0 0 188.78781 7220 107230 1 0 Quebec Qubec 0 0 0 0 1020.97205 7221 181 3 0 Ontario Ontario 0 0 0 0 2333.63004 7222 18523 3 0 Ontario Ontario 0 0 0 0 1366.22250 7223 1861 3 0 Ontario Ontario 0 0 0 0 2141.51849 7224 18834 2 0 Ontario Ontario 0 0 0 0 12584.19289 7225 330303 4 0 Quebec Qubec 0 0 0 0 1280.85082 7227 1898 3 0 Ontario Ontario 0 0 0 0 3047.66429 7228 1908 3 0 Ontario Ontario 0 0 0 0 8530.00803 7229 407366 4 0 Quebec Qubec 0 0 0 0 4983.69241 7230 18724 3 0 Ontario Ontario 0 0 0 0 381.96988 7231 22434 2 0 Ontario Ontario 0 0 0 0 2292.66858 7232 19224 3 0 Ontario Ontario 0 0 0 0 1383.34079 7233 1938 3 0 Ontario Ontario 0 0 0 0 3029.66036 7234 1942 3 0 Ontario Ontario 0 0 0 0 1859.60802 7236 1979 3 0 Ontario Ontario 0 0 0 0 1287.69448 7237 4872202 3 0 Quebec Qubec 0 0 0 0 15589.49466 7238 7772236 3 0 Quebec Qubec 0 0 0 0 4191.90559 7239 7944 4 0 Quebec Qubec 0 0 0 0 831.79183 7240 659050 2 0 Quebec Qubec 0 0 0 0 1334.99650 7241 1981 3 0 Ontario Ontario 0 0 0 0 941.53857 7242 1217 4 0 Quebec Qubec 0 0 0 0 2791.78490 7243 19910 3 0 Ontario Ontario 0 0 0 0 450.53445 7244 2009 3 0 Ontario Ontario 0 0 0 0 1005.05353 7246 2032 3 0 Ontario Ontario 0 0 0 0 9314.73439 7247 13219 3 0 Ontario Ontario 0 0 0 0 3491.08611 7248 20110 3 0 Ontario Ontario 0 0 0 0 2424.67441 7249 20221 3 0 Ontario Ontario 0 0 0 0 246.73458 7250 2032 3 0 Ontario Ontario 0 0 0 0 1927.61514 7251 1072 4 0 Quebec Qubec 0 0 0 0 428.57371 7252 1171 4 0 Quebec Qubec 0 0 0 0 2113.02739 7254 20422 3 0 Ontario Ontario 0 0 0 0 7405.08407 7256 6507307 3 0 Quebec Qubec 0 0 0 0 2903.63916 7257 19621 3 0 Ontario Ontario 0 0 0 0 1825.74175 7258 20616 3 0 Ontario Ontario 0 0 0 0 2216.95120 7259 20723 3 0 Ontario Ontario 0 0 0 0 354.18216 7260 6426307 3 0 Quebec Qubec 0 0 0 0 1451.87451 7261 2081 3 0 Ontario Ontario 0 0 0 0 1858.33528 7262 2098 3 0 Ontario Ontario 0 0 0 0 2072.57909 7263 778030 2 0 Quebec Qubec 0 0 0 0 1246.83196 7264 1171 4 0 Quebec Qubec 0 0 0 0 4240.68024 7265 4883202 3 0 Quebec Qubec 0 0 0 0 14948.39686 7266 4900217 4 0 Quebec Qubec 0 0 0 0 6686.69364 7267 984 4 0 Quebec Qubec 0 0 0 0 1951.45948 7268 1055 4 0 Quebec Qubec 0 0 0 0 2446.26874 7269 2961 4 0 Quebec Qubec 0 0 0 0 2391.46113 7270 21324 3 0 Ontario Ontario 0 0 0 0 1398.37789 7271 2142 3 0 Ontario Ontario 0 0 0 0 390.88806 7274 778030 2 0 Quebec Qubec 0 0 0 0 11143.36185 7275 5022219 4 0 Quebec Qubec 0 0 0 0 1113.49550 7277 21622 3 0 Ontario Ontario 0 0 0 0 1617.19907 7278 2179 3 0 Ontario Ontario 0 0 0 0 1642.96782 7279 4887202 3 0 Quebec Qubec 0 0 0 0 21.36392 7280 4782202 3 0 Quebec Qubec 0 0 0 0 14624.48605 7281 901915 1 0 Quebec Qubec 0 0 0 0 1285.99474 7282 2191 3 0 Ontario Ontario 0 0 0 0 2636.31817 7284 22116 3 0 Ontario Ontario 0 0 0 0 2520.92108 7286 22321 3 0 Ontario Ontario 0 0 0 0 4139.69415 7287 22434 2 0 Ontario Ontario 0 0 0 0 1179.45258 7289 2262 3 0 Ontario Ontario 0 0 0 0 18174.26829 7290 7284340 3 0 Quebec Qubec 0 0 0 0 1069.34359 7291 4791219 4 0 Quebec Qubec 0 0 0 0 116.37411 7292 7024340 4 0 Quebec Qubec 0 0 0 0 1413.76282 7293 2279 3 0 Ontario Ontario 0 0 0 0 1089.63843 7294 23022 3 0 Ontario Ontario 0 0 0 0 1424.77134 7295 2311 3 0 Ontario Ontario 0 0 0 0 15379.98419 7296 7835205 4 0 Quebec Qubec 0 0 0 0 3224.02313 7300 2731 4 0 Quebec Qubec 0 0 0 0 3612.46796 7301 22910 3 0 Ontario Ontario 0 0 0 0 181.49211 7302 232174 2 0 Ontario Ontario 0 0 0 0 375.44748 7303 233174 2 0 Ontario Ontario 0 0 0 0 3217.96044 7304 23721 3 0 Ontario Ontario 0 0 0 0 8102.23063 7305 22817 2 0 Ontario Ontario 0 0 0 0 109.49489 7306 26435 3 0 Ontario Ontario 0 0 0 0 3189.87368 7307 23825 3 0 Ontario Ontario 0 0 0 0 3092.03771 7308 2398 3 0 Ontario Ontario 0 0 0 0 6062.50037 7310 4854225 4 0 Quebec Qubec 0 0 0 0 851.81967 7312 24122 3 0 Ontario Ontario 0 0 0 0 2018.80981 7315 7310132 2 0 Quebec Qubec 0 0 0 0 1273.97978 7318 2469 3 0 Ontario Ontario 0 0 0 0 10244.04205 7321 248417 1 1 Ontario Ontario 0 0 0 0 217.20902 7322 24922 3 0 Ontario Ontario 0 0 0 0 1493.79066 7323 2501 3 0 Ontario Ontario 0 0 0 0 136.71469 7324 25122 3 0 Ontario Ontario 0 0 0 0 2465.79451 7329 2582 3 0 Ontario Ontario 0 0 0 0 2956.80810 7331 6431105 2 0 Quebec Qubec 0 0 0 0 2572.76447 7332 2624 4 0 Quebec Qubec 0 0 0 0 602.72744 7333 26130 3 0 Ontario Ontario 0 0 0 0 10381.12757 7335 7865138 2 0 Quebec Qubec 0 0 0 0 308.64223 7336 2684 4 0 Quebec Qubec 0 0 0 0 1565.89654 7337 26435 3 0 Ontario Ontario 0 0 0 0 1945.61671 7342 26910 3 0 Ontario Ontario 0 0 0 0 2006.69012 7344 4787219 4 0 Quebec Qubec 0 0 0 0 5216.97226 7345 13219 3 0 Ontario Ontario 0 0 0 0 1193.72037 7346 2709 3 0 Ontario Ontario 0 0 0 0 2218.10962 7348 6138 3 0 Ontario Ontario 0 0 0 0 1656.99366 7352 2751 3 0 Ontario Ontario 0 0 0 0 1282.67643 7353 2762 3 0 Ontario Ontario 0 0 0 0 1492.57827 7360 27723 3 0 Ontario Ontario 0 0 0 0 4715.93914 7363 27924 3 0 Ontario Ontario 0 0 0 0 1443.90512 7364 28030 3 0 Ontario Ontario 0 0 0 0 2714.00373 7365 28125 3 0 Ontario Ontario 0 0 0 0 6810.44145 7366 7772236 3 0 Quebec Qubec 0 0 0 0 5728.36965 7367 7312201 3 0 Quebec Qubec 0 0 0 0 4913.82980 7369 28216 3 0 Ontario Ontario 0 0 0 0 972.56001 7370 1875 3 0 Ontario Ontario 0 0 0 0 1014.88359 7372 2849 3 0 Ontario Ontario 0 0 0 0 586.74141 7375 28923 3 0 Ontario Ontario 0 0 0 0 1091.38207 7379 2901 3 0 Ontario Ontario 0 0 0 0 3138.10092 7380 29121 3 0 Ontario Ontario 0 0 0 0 1449.49376 7382 2923 3 0 Ontario Ontario 0 0 0 0 540.76503 7386 29425 3 0 Ontario Ontario 0 0 0 0 1645.24940 7387 29635 3 0 Ontario Ontario 0 0 0 0 1976.35604 7388 28534 3 0 Ontario Ontario 0 0 0 0 701.16003 7390 33216 3 0 Ontario Ontario 0 0 0 0 1972.83134 7391 28319 3 0 Ontario Ontario 0 0 0 0 7284.24929 7392 3415223 3 0 Quebec Qubec 0 0 0 0 1379.85974 7394 2992 3 0 Ontario Ontario 0 0 0 0 3073.35679 7395 3008 3 0 Ontario Ontario 0 0 0 0 481.32484 7396 29334 3 0 Ontario Ontario 0 0 0 0 581.65464 7399 3039 3 0 Ontario Ontario 0 0 0 0 905.06199 7400 1582 3 0 Ontario Ontario 0 0 0 0 5835.60038 7406 30534 2 0 Ontario Ontario 0 0 0 0 1462.36064 7411 613926 3 0 Ontario Ontario 0 0 0 0 629.61671 7412 3109 3 0 Ontario Ontario 0 0 0 0 5379.09319 7413 4885217 4 0 Quebec Qubec 0 0 0 0 1509.61223 7418 3121 3 0 Ontario Ontario 0 0 0 0 3139.87655 7421 7327132 2 0 Quebec Qubec 0 0 0 0 2665.37994 7422 31310 3 0 Ontario Ontario 0 0 0 0 759.20844 7423 31434 2 0 Ontario Ontario 0 0 0 0 6570.88560 7424 4881221 4 0 Quebec Qubec 0 0 0 0 2242.43325 7435 31730 3 0 Ontario Ontario 0 0 0 0 1711.96126 7436 3183 3 0 Ontario Ontario 0 0 0 0 794.37969 7437 614126 3 0 Ontario Ontario 0 0 0 0 664.76248 7441 3231 3 0 Ontario Ontario 0 0 0 0 12827.46360 7442 4932209 4 0 Quebec Qubec 0 0 0 0 18204.56264 7443 7855203 4 0 Quebec Qubec 0 0 0 0 1591.50794 7444 7899 3 0 Ontario Ontario 0 0 0 0 2205.73262 7445 32423 3 0 Ontario Ontario 0 0 0 0 727.76053 7446 3259 3 0 Ontario Ontario 0 0 0 0 106.95275 7448 4932209 4 0 Quebec Qubec 0 0 0 0 1808.86268 7449 32735 3 0 Ontario Ontario 0 0 0 0 2487.12451 7451 32824 3 0 Ontario Ontario 0 0 0 0 14853.38374 7452 323301 3 0 Quebec Qubec 0 0 0 0 2279.63795 7454 33425 3 0 Ontario Ontario 0 0 0 0 7298.98408 7455 7313236 3 0 Quebec Qubec 0 0 0 0 1342.69829 7457 3362 3 0 Ontario Ontario 0 0 0 0 2834.90760 7458 33830 3 0 Ontario Ontario 0 0 0 0 6727.18077 7459 331174 2 0 Ontario Ontario 0 0 0 0 10746.89064 7460 778220 1 0 Quebec Qubec 0 0 0 0 9601.07134 7461 7023325 4 0 Quebec Qubec 0 0 0 0 2894.28610 7465 34218 3 0 Ontario Ontario 0 0 0 0 986.83169 7466 1680 3 0 Ontario Ontario 0 0 0 0 12749.92205 7467 4781202 3 0 Quebec Qubec 0 0 0 0 3155.30808 7468 4785219 4 0 Quebec Qubec 0 0 0 0 1254.33341 7469 4776217 4 0 Quebec Qubec 0 0 0 0 1100.68139 7473 34421 3 0 Ontario Ontario 0 0 0 0 3090.08436 7474 34521 3 0 Ontario Ontario 0 0 0 0 414.20888 7475 34757 3 0 Ontario Ontario 0 0 0 0 513.05754 7477 7023325 4 0 Quebec Qubec 0 0 0 0 25575.89234 7478 6680366 4 0 Quebec Qubec 0 0 0 0 1429.09594 7479 3481 3 0 Ontario Ontario 0 0 0 0 104.67939 7484 7163325 4 0 Quebec Qubec 0 0 0 0 1722.56105 7486 607726 3 0 Ontario Ontario 0 0 0 0 6613.55288 7489 901315 1 0 Quebec Qubec 0 0 0 0 2555.01387 7491 34634 3 0 Ontario Ontario 0 0 0 0 320.33888 7492 37357 3 0 Ontario Ontario 0 0 0 0 10.50669 7493 34634 3 0 Ontario Ontario 0 0 0 0 8183.40806 7494 52498 3 0 Ontario Ontario 0 0 0 0 1402.45778 7495 35335 3 0 Ontario Ontario 0 0 0 0 3108.46744 7499 38316 3 0 Ontario Ontario 0 0 0 0 3854.11297 7500 26468 3 0 Ontario Ontario 0 0 0 0 2149.93883 7501 35430 3 0 Ontario Ontario 0 0 0 0 12116.37870 7503 7291338 3 0 Quebec Qubec 0 0 0 0 615.74301 7504 7160325 4 0 Quebec Qubec 0 0 0 0 1476.38584 7505 35530 3 0 Ontario Ontario 0 0 0 0 1556.43334 7506 3562 3 0 Ontario Ontario 0 0 0 0 8528.61984 7507 6437105 2 0 Quebec Qubec 0 0 0 0 1259.23250 7512 3611 3 0 Ontario Ontario 0 0 0 0 2846.95680 7513 768850 1 0 Quebec Qubec 0 0 0 0 3004.88855 7514 3643 3 0 Ontario Ontario 0 0 0 0 1837.36346 7515 3659 3 0 Ontario Ontario 0 0 0 0 1516.13047 7517 36034 3 0 Ontario Ontario 0 0 0 0 365.74867 7521 3480 4 0 Quebec Qubec 0 0 0 0 1273.83969 7523 6687366 4 0 Quebec Qubec 0 0 0 0 224.06113 7525 42647 3 0 Ontario Ontario 0 0 0 0 1273.26389 7531 36835 3 0 Ontario Ontario 0 0 0 0 6780.80565 7533 369417 1 1 Ontario Ontario 0 0 0 0 446.65506 7534 3709 3 0 Ontario Ontario 0 0 0 0 1326.38460 7536 37230 3 0 Ontario Ontario 0 0 0 0 2563.89307 7537 37357 3 0 Ontario Ontario 0 0 0 0 105.04081 7539 37420 3 0 Ontario Ontario 0 0 0 0 2006.22151 7540 607926 3 0 Ontario Ontario 0 0 0 0 9401.49445 7544 30421 3 0 Ontario Ontario 0 0 0 0 1764.04553 7545 37730 3 0 Ontario Ontario 0 0 0 0 1533.51931 7548 3782 3 0 Ontario Ontario 0 0 0 0 3556.52101 7551 38023 3 0 Ontario Ontario 0 0 0 0 1526.39026 7552 3838 3 0 Ontario Ontario 0 0 0 0 2585.89006 7553 768320 1 0 Quebec Qubec 0 0 0 0 1506.26682 7555 3851 3 0 Ontario Ontario 0 0 0 0 474.96753 7556 38620 3 0 Ontario Ontario 0 0 0 0 399.24603 7557 38730 3 0 Ontario Ontario 0 0 0 0 3149.05083 7558 38825 3 0 Ontario Ontario 0 0 0 0 4410.33786 7559 38934 2 0 Ontario Ontario 0 0 0 0 833.44752 7562 3538 4 0 Quebec Qubec 0 0 0 0 2798.27379 7563 39218 3 0 Ontario Ontario 0 0 0 0 742.11156 7564 158326 3 0 Ontario Ontario 0 0 0 0 2067.41964 7565 7164338 3 0 Quebec Qubec 0 0 0 0 2767.00698 7568 768850 1 0 Quebec Qubec 0 0 0 0 1245.75859 7571 6687366 4 0 Quebec Qubec 0 0 0 0 985.92448 7572 40023 3 0 Ontario Ontario 0 0 0 0 314.94923 7573 4566 4 0 Quebec Qubec 0 0 0 0 7046.73796 7576 7865138 2 0 Quebec Qubec 0 0 0 0 9696.17846 7577 3239201 3 0 Quebec Qubec 0 0 0 0 1474.06813 7578 4038 3 0 Ontario Ontario 0 0 0 0 1681.55145 7580 39734 3 0 Ontario Ontario 0 0 0 0 4190.53026 7581 40524 3 0 Ontario Ontario 0 0 0 0 1099.07624 7582 40620 3 0 Ontario Ontario 0 0 0 0 1468.19987 7583 7807138 2 0 Quebec Qubec 0 0 0 0 1513.50429 7587 4072 3 0 Ontario Ontario 0 0 0 0 1357.87739 7593 4141 3 0 Ontario Ontario 0 0 0 0 1670.42970 7594 41535 3 0 Ontario Ontario 0 0 0 0 2933.10847 7597 3527 4 0 Quebec Qubec 0 0 0 0 856.92917 7598 3606 4 0 Quebec Qubec 0 0 0 0 5264.05780 7603 7334132 2 0 Quebec Qubec 0 0 0 0 539.91737 7604 41734 3 0 Ontario Ontario 0 0 0 0 3218.63960 7605 4223 3 0 Ontario Ontario 0 0 0 0 2376.57828 7611 42322 3 0 Ontario Ontario 0 0 0 0 1040.31043 7613 42420 3 0 Ontario Ontario 0 0 0 0 2792.53967 7614 42530 3 0 Ontario Ontario 0 0 0 0 2462.10547 7615 42647 3 0 Ontario Ontario 0 0 0 0 1091.81107 7616 4298 3 0 Ontario Ontario 0 0 0 0 2213.54041 7620 43230 3 0 Ontario Ontario 0 0 0 0 645.89542 7627 43134 3 0 Ontario Ontario 0 0 0 0 1241.45251 7628 3938 4 0 Quebec Qubec 0 0 0 0 1421.62118 7629 43728 3 0 Ontario Ontario 0 0 0 0 2433.35787 7630 44034 2 0 Ontario Ontario 0 0 0 0 3854.57821 7636 489174 1 0 Ontario Ontario 0 0 0 0 3301.03893 7637 6607148 2 0 Quebec Qubec 0 0 0 0 947.98564 7638 3476 4 0 Quebec Qubec 0 0 0 0 1757.05079 7646 44123 3 0 Ontario Ontario 0 0 0 0 385.59263 7650 43834 3 0 Ontario Ontario 0 0 0 0 2798.74977 7652 3608 4 0 Quebec Qubec 0 0 0 0 372.94154 7653 3927 4 0 Quebec Qubec 0 0 0 0 2155.61421 7656 4442 3 0 Ontario Ontario 0 0 0 0 652.80548 7657 44534 3 0 Ontario Ontario 0 0 0 0 515.98253 7658 357855 3 0 Ontario Ontario 0 0 0 0 2794.50097 7661 44618 3 0 Ontario Ontario 0 0 0 0 1379.47299 7662 44730 3 0 Ontario Ontario 0 0 0 0 1418.48459 7663 45020 3 0 Ontario Ontario 0 0 0 0 1947.12517 7665 45535 3 0 Ontario Ontario 0 0 0 0 1850.93041 7666 4563 3 0 Ontario Ontario 0 0 0 0 1403.18815 7667 4578 3 0 Ontario Ontario 0 0 0 0 3159.40836 7668 45355 3 0 Ontario Ontario 0 0 0 0 927.95110 7669 3929 4 0 Quebec Qubec 0 0 0 0 13662.25655 7670 4841202 3 0 Quebec Qubec 0 0 0 0 5961.59020 7671 4930203 4 0 Quebec Qubec 0 0 0 0 1650.89824 7672 45930 3 0 Ontario Ontario 0 0 0 0 1362.83474 7673 46028 3 0 Ontario Ontario 0 0 0 0 2886.32207 7674 469401 1 0 Ontario Ontario 0 0 0 0 990.26129 7675 47023 3 0 Ontario Ontario 0 0 0 0 642.36855 7679 46230 3 0 Ontario Ontario 0 0 0 0 885.98516 7682 3923 4 0 Quebec Qubec 0 0 0 0 5311.93997 7683 4792219 4 0 Quebec Qubec 0 0 0 0 197.55952 7684 3925 4 0 Quebec Qubec 0 0 0 0 680.07436 7688 4683 3 0 Ontario Ontario 0 0 0 0 1327.63019 7689 6607148 2 0 Quebec Qubec 0 0 0 0 1001.42144 7690 3949 4 0 Quebec Qubec 0 0 0 0 1394.71597 7693 4662 3 0 Ontario Ontario 0 0 0 0 1004.29752 7698 3940 4 0 Quebec Qubec 0 0 0 0 4181.74726 7699 768850 1 0 Quebec Qubec 0 0 0 0 684.01501 7700 491401 1 0 Ontario Ontario 0 0 0 0 1201.95294 7701 47735 3 0 Ontario Ontario 0 0 0 0 4564.19101 7702 47826 3 0 Ontario Ontario 0 0 0 0 1433.49279 7704 48128 3 0 Ontario Ontario 0 0 0 0 7281.89599 7705 484417 1 1 Ontario Ontario 0 0 0 0 1100.77124 7706 485 3 0 Ontario Ontario 0 0 0 0 1030.45870 7707 48630 3 0 Ontario Ontario 0 0 0 0 2646.82618 7710 489174 1 0 Ontario Ontario 0 0 0 0 2541.22202 7714 49225 3 0 Ontario Ontario 0 0 0 0 574.84287 7715 49326 3 0 Ontario Ontario 0 0 0 0 2030.31983 7716 49455 3 0 Ontario Ontario 0 0 0 0 3246.66177 7717 49547 3 0 Ontario Ontario 0 0 0 0 518.29233 7718 49630 3 0 Ontario Ontario 0 0 0 0 1269.16650 7720 49726 3 0 Ontario Ontario 0 0 0 0 2918.68972 7721 50434 3 0 Ontario Ontario 0 0 0 0 392.21807 7722 505 4 0 Ontario Ontario 0 0 0 0 2045.74671 7724 3613 4 0 Quebec Qubec 0 0 0 0 9853.83572 7725 50043 2 0 Ontario Ontario 0 0 0 0 2117.96981 7726 50130 3 0 Ontario Ontario 0 0 0 0 626.11867 7728 498174 1 0 Ontario Ontario 0 0 0 0 195.84907 7730 505 4 0 Ontario Ontario 0 0 0 0 1638.33043 7731 5063 3 0 Ontario Ontario 0 0 0 0 422.21802 7733 499 3 0 Ontario Ontario 0 0 0 0 1470.44714 7734 50728 3 0 Ontario Ontario 0 0 0 0 614.83049 7735 50828 3 0 Ontario Ontario 0 0 0 0 2235.94497 7736 6607148 2 0 Quebec Qubec 0 0 0 0 1447.20206 7737 3931 4 0 Quebec Qubec 0 0 0 0 3270.48374 7739 51318 3 0 Ontario Ontario 0 0 0 0 3880.56865 7740 51434 2 0 Ontario Ontario 0 0 0 0 3217.14844 7743 518 3 0 Ontario Ontario 0 0 0 0 3171.35014 7744 51920 3 0 Ontario Ontario 0 0 0 0 191.95961 7745 6492 4 0 Quebec Qubec 0 0 0 0 1420.52238 7746 3936 4 0 Quebec Qubec 0 0 0 0 17705.70052 7747 6476307 3 0 Quebec Qubec 0 0 0 0 1005.52881 7752 52330 3 0 Ontario Ontario 0 0 0 0 1314.98744 7753 52428 3 0 Ontario Ontario 0 0 0 0 880.84841 7754 50434 3 0 Ontario Ontario 0 0 0 0 531.99684 7755 525174 1 0 Ontario Ontario 0 0 0 0 1489.12741 7761 52626 3 0 Ontario Ontario 0 0 0 0 1192.49835 7762 568 3 0 Ontario Ontario 0 0 0 0 4321.42216 7763 52722 3 0 Ontario Ontario 0 0 0 0 534.06686 7764 52820 3 0 Ontario Ontario 0 0 0 0 1307.66252 7765 53155 3 0 Ontario Ontario 0 0 0 0 1507.10103 7771 53228 3 0 Ontario Ontario 0 0 0 0 1508.25747 7772 53347 3 0 Ontario Ontario 0 0 0 0 11122.45985 7775 4929209 4 0 Quebec Qubec 0 0 0 0 1680.76207 7777 53728 3 0 Ontario Ontario 0 0 0 0 414.77873 7778 53855 3 0 Ontario Ontario 0 0 0 0 11560.03803 7779 7793201 3 0 Quebec Qubec 0 0 0 0 2067.15501 7780 54125 3 0 Ontario Ontario 0 0 0 0 700.30265 7781 54220 3 0 Ontario Ontario 0 0 0 0 2136.97467 7782 54326 3 0 Ontario Ontario 0 0 0 0 1182.93018 7783 6585148 2 0 Quebec Qubec 0 0 0 0 2205.64810 7784 768850 1 0 Quebec Qubec 0 0 0 0 2498.19116 7785 54428 3 0 Ontario Ontario 0 0 0 0 197.92944 7786 54528 3 0 Ontario Ontario 0 0 0 0 906.30055 7788 54685 3 0 Ontario Ontario 0 0 0 0 2594.22559 7789 54735 3 0 Ontario Ontario 0 0 0 0 1016.14177 7790 56234 3 0 Ontario Ontario 0 0 0 0 1433.63954 7791 58450 4 0 Ontario Ontario 0 0 0 0 1447.25647 7797 568 3 0 Ontario Ontario 0 0 0 0 2015.38502 7799 54928 3 0 Ontario Ontario 0 0 0 0 860.23562 7800 55030 3 0 Ontario Ontario 0 0 0 0 1257.35093 7801 552 4 0 Ontario Ontario 0 0 0 0 1524.16268 7802 55322 3 0 Ontario Ontario 0 0 0 0 273.50400 7803 769250 1 0 Quebec Qubec 0 0 0 0 3219.16239 7805 55437 3 0 Ontario Ontario 0 0 0 0 1391.43523 7807 55526 3 0 Ontario Ontario 0 0 0 0 401.65573 7808 55635 3 0 Ontario Ontario 0 0 0 0 727.77631 7811 55926 3 0 Ontario Ontario 0 0 0 0 2371.28190 7812 3941 4 0 Quebec Qubec 0 0 0 0 1377.25405 7813 3935 4 0 Quebec Qubec 0 0 0 0 451.67544 7814 56030 3 0 Ontario Ontario 0 0 0 0 2181.20586 7815 56118 3 0 Ontario Ontario 0 0 0 0 1726.99476 7816 682 3 0 Ontario Ontario 0 0 0 0 8623.17324 7817 4913202 3 0 Quebec Qubec 0 0 0 0 2284.59148 7818 4922201 3 0 Quebec Qubec 0 0 0 0 553.98793 7819 568 4 0 Ontario Ontario 0 0 0 0 1446.97922 7820 56234 3 0 Ontario Ontario 0 0 0 0 1377.43465 7821 58227 4 0 Ontario Ontario 0 0 0 0 145.21567 7822 56234 3 0 Ontario Ontario 0 0 0 0 752.31931 7823 56422 3 0 Ontario Ontario 0 0 0 0 361.07646 7824 56522 3 0 Ontario Ontario 0 0 0 0 626.59711 7825 56626 3 0 Ontario Ontario 0 0 0 0 302.89440 7826 3912 4 0 Quebec Qubec 0 0 0 0 377.89604 7829 57218 3 0 Ontario Ontario 0 0 0 0 1470.15327 7830 57320 3 0 Ontario Ontario 0 0 0 0 637.32478 7831 57426 3 0 Ontario Ontario 0 0 0 0 1043.56678 7832 575 4 0 Ontario Ontario 0 0 0 0 2807.99305 7833 576 4 0 Ontario Ontario 0 0 0 0 766.79866 7834 769550 1 0 Quebec Qubec 0 0 0 0 164.61506 7835 6627307 3 0 Quebec Qubec 0 0 0 0 2262.38733 7836 6476307 3 0 Quebec Qubec 0 0 0 0 420.74005 7837 581 4 0 Ontario Ontario 0 0 0 0 707.73400 7839 568 3 0 Ontario Ontario 0 0 0 0 1178.56208 7840 588 3 0 Ontario Ontario 0 0 0 0 218.43829 7842 568 3 0 Ontario Ontario 0 0 0 0 1498.00349 7843 57837 3 0 Ontario Ontario 0 0 0 0 13384.72348 7844 78545 1 0 Quebec Qubec 0 0 0 0 893.43178 7845 57920 3 0 Ontario Ontario 0 0 0 0 659.87417 7846 581 4 0 Ontario Ontario 0 0 0 0 1878.64591 7847 58034 3 0 Ontario Ontario 0 0 0 0 105.10805 7848 621 4 0 Ontario Ontario 0 0 0 0 1093.74314 7849 58227 3 0 Ontario Ontario 0 0 0 0 1345.78922 7850 58326 3 0 Ontario Ontario 0 0 0 0 1840.91647 7852 58450 3 0 Ontario Ontario 0 0 0 0 128.99788 7853 58527 3 0 Ontario Ontario 0 0 0 0 4856.26358 7854 4914203 4 0 Quebec Qubec 0 0 0 0 437.89316 7855 4479 4 0 Quebec Qubec 0 0 0 0 2802.26343 7856 590174 1 0 Ontario Ontario 0 0 0 0 460.72356 7857 59127 3 0 Ontario Ontario 0 0 0 0 2821.64709 7859 59230 3 0 Ontario Ontario 0 0 0 0 1439.43394 7860 593 4 0 Ontario Ontario 0 0 0 0 907.94617 7861 588 3 0 Ontario Ontario 0 0 0 0 119.85526 7862 59727 3 0 Ontario Ontario 0 0 0 0 768.51058 7863 59926 3 0 Ontario Ontario 0 0 0 0 761.63603 7864 60037 3 0 Ontario Ontario 0 0 0 0 771.94201 7865 59434 3 0 Ontario Ontario 0 0 0 0 3531.25970 7866 78545 1 0 Quebec Qubec 0 0 0 0 149.12155 7867 622 3 0 Ontario Ontario 0 0 0 0 10398.91407 7868 372148 2 0 Quebec Qubec 0 0 0 0 5428.06996 7869 614401 1 0 Ontario Ontario 0 0 0 0 2406.42248 7873 60322 3 0 Ontario Ontario 0 0 0 0 5071.31549 7874 6023 3 0 Ontario Ontario 0 0 0 0 1666.90908 7875 60418 3 0 Ontario Ontario 0 0 0 0 130.62137 7877 6063 3 0 Ontario Ontario 0 0 0 0 1351.54428 7879 61120 3 0 Ontario Ontario 0 0 0 0 4919.20427 7880 2948148 2 0 Quebec Qubec 0 0 0 0 3179.15436 7881 61385 3 0 Ontario Ontario 0 0 0 0 764.71510 7885 61630 3 0 Ontario Ontario 0 0 0 0 177.11188 7887 4169 4 0 Quebec Qubec 0 0 0 0 9066.91973 7888 7268202 3 0 Quebec Qubec 0 0 0 0 1537.02571 7889 62027 3 0 Ontario Ontario 0 0 0 0 1795.63029 7890 621 4 0 Ontario Ontario 0 0 0 0 865.45886 7891 622 3 0 Ontario Ontario 0 0 0 0 1534.96971 7892 62350 3 0 Ontario Ontario 0 0 0 0 144.40898 7893 624 4 0 Ontario Ontario 0 0 0 0 732.63075 7894 4175 4 0 Quebec Qubec 0 0 0 0 2459.03295 7895 4473 4 0 Quebec Qubec 0 0 0 0 528.82335 7896 62730 3 0 Ontario Ontario 0 0 0 0 1399.47335 7897 62827 3 0 Ontario Ontario 0 0 0 0 1384.62489 7898 63026 3 0 Ontario Ontario 0 0 0 0 2180.00184 7899 629 3 0 Ontario Ontario 0 0 0 0 1341.37458 7900 631174 1 0 Ontario Ontario 0 0 0 0 614.81148 7901 632 4 0 Ontario Ontario 0 0 0 0 6101.15053 7902 63334 2 0 Ontario Ontario 0 0 0 0 4930.49539 7903 63443 2 0 Ontario Ontario 0 0 0 0 151.71736 7904 637417 1 1 Ontario Ontario 0 0 0 0 875.11886 7905 63818 3 0 Ontario Ontario 0 0 0 0 7967.68682 7906 639417 1 1 Ontario Ontario 0 0 0 0 1103.49605 7907 6407 3 0 Ontario Ontario 0 0 0 0 144.77751 7908 641417 1 1 Ontario Ontario 0 0 0 0 154.83748 7909 629 3 0 Ontario Ontario 0 0 0 0 137.58815 7910 6457 3 0 Ontario Ontario 0 0 0 0 4832.47372 7911 4920202 3 0 Quebec Qubec 0 0 0 0 3990.34238 7912 4923209 4 0 Quebec Qubec 0 0 0 0 160.73157 7914 4519 4 0 Quebec Qubec 0 0 0 0 723.48512 7915 652 3 0 Ontario Ontario 0 0 0 0 882.27770 7916 65450 3 0 Ontario Ontario 0 0 0 0 14711.52507 7917 7320138 2 0 Quebec Qubec 0 0 0 0 1549.22543 7918 1029202 3 0 Quebec Qubec 0 0 0 0 1456.12888 7920 65727 3 0 Ontario Ontario 0 0 0 0 2068.68731 7921 65134 3 0 Ontario Ontario 0 0 0 0 550.15704 7922 658417 1 1 Ontario Ontario 0 0 0 0 410.72989 7923 6607 3 0 Ontario Ontario 0 0 0 0 14.19483 7924 69834 3 0 Ontario Ontario 0 0 0 0 149.12002 7925 673 3 0 Ontario Ontario 0 0 0 0 856.34750 7926 661417 1 1 Ontario Ontario 0 0 0 0 174.83284 7927 1029202 3 0 Quebec Qubec 0 0 0 0 4736.78094 7928 66725 3 0 Ontario Ontario 0 0 0 0 1641.50043 7929 6633148 2 0 Quebec Qubec 0 0 0 0 948.71318 7930 67030 3 0 Ontario Ontario 0 0 0 0 101.89831 7931 673 3 0 Ontario Ontario 0 0 0 0 1153.01023 7932 4189 4 0 Quebec Qubec 0 0 0 0 2897.27467 7933 3912 4 0 Quebec Qubec 0 0 0 0 502.19340 7934 77015 1 0 Quebec Qubec 0 0 0 0 2000.37450 7935 67528 3 0 Ontario Ontario 0 0 0 0 722.54787 7940 77015 1 0 Quebec Qubec 0 0 0 0 2798.89198 7941 770750 1 0 Quebec Qubec 0 0 0 0 6230.09562 7942 6933 3 0 Ontario Ontario 0 0 0 0 137.35887 7943 77005 1 0 Quebec Qubec 0 0 0 0 38.99510 7944 7083 3 0 Ontario Ontario 0 0 0 0 329.48507 7945 67830 3 0 Ontario Ontario 0 0 0 0 393.71462 7946 679417 1 1 Ontario Ontario 0 0 0 0 2639.39067 7947 77145 1 0 Quebec Qubec 0 0 0 0 833.48049 7948 6634148 2 0 Quebec Qubec 0 0 0 0 82.61334 7951 680417 1 1 Ontario Ontario 0 0 0 0 2292.27880 7953 68122 3 0 Ontario Ontario 0 0 0 0 1507.21397 7954 976138 2 0 Ontario Ontario 0 0 0 0 133.24537 7955 771350 1 0 Quebec Qubec 0 0 0 0 551.79481 7956 77155 1 0 Quebec Qubec 0 0 0 0 65.96061 7957 77145 1 0 Quebec Qubec 0 0 0 0 692.27946 7958 684417 1 1 Ontario Ontario 0 0 0 0 497.50847 7959 685 3 0 Ontario Ontario 0 0 0 0 135.20314 7960 68630 3 0 Ontario Ontario 0 0 0 0 2455.05778 7961 68820 3 0 Ontario Ontario 0 0 0 0 587.90964 7962 7362138 2 0 Quebec Qubec 0 0 0 0 108.51265 7963 690 3 0 Ontario Ontario 0 0 0 0 206.73822 7964 682 3 0 Ontario Ontario 0 0 0 0 656.84602 7965 764417 1 1 Ontario Ontario 0 0 0 0 880.62057 7967 4330 4 0 Quebec Qubec 0 0 0 0 500.74811 7968 7083 3 0 Ontario Ontario 0 0 0 0 1165.59894 7969 683 3 0 Ontario Ontario 0 0 0 0 755.75501 7970 691 1 0 Ontario Ontario 0 0 0 0 636.85810 7971 4168148 2 0 Quebec Qubec 0 0 0 0 147.93724 7972 692 3 0 Ontario Ontario 0 0 0 0 1705.76977 7973 69619 3 0 Ontario Ontario 0 0 0 0 1401.61420 7975 70118 3 0 Ontario Ontario 0 0 0 0 945.31128 7976 714417 1 1 Ontario Ontario 0 0 0 0 2229.35811 7977 715 3 0 Ontario Ontario 0 0 0 0 1361.55821 7979 69834 3 0 Ontario Ontario 0 0 0 0 370.33978 7980 699 1 0 Ontario Ontario 0 0 0 0 26.71910 7983 69836 3 0 Ontario Ontario 0 0 0 0 2098.76238 7984 70220 3 0 Ontario Ontario 0 0 0 0 6098.02467 7985 703417 1 1 Ontario Ontario 0 0 0 0 6662.07761 7987 165 3 0 Ontario Ontario 0 0 0 0 1042.55291 7988 70528 3 0 Ontario Ontario 0 0 0 0 1819.94126 7989 70643 2 0 Ontario Ontario 0 0 0 0 709.09524 7990 70720 3 0 Ontario Ontario 0 0 0 0 800.76011 7991 4168148 2 0 Quebec Qubec 0 0 0 0 829.55994 7992 3898 4 0 Quebec Qubec 0 0 0 0 4333.69158 7993 4186 4 0 Quebec Qubec 0 0 0 0 57.65724 7994 716417 1 1 Ontario Ontario 0 0 0 0 628.09247 7995 4331 4 0 Quebec Qubec 0 0 0 0 397.01073 7996 71236 3 0 Ontario Ontario 0 0 0 0 2957.54185 7997 71726 3 0 Ontario Ontario 0 0 0 0 2792.24199 7998 71885 3 0 Ontario Ontario 0 0 0 0 1559.87522 8001 7247 3 0 Ontario Ontario 0 0 0 0 2407.53890 8002 72515 3 0 Ontario Ontario 0 0 0 0 206.75206 8003 71936 3 0 Ontario Ontario 0 0 0 0 15.36999 8004 719 3 0 Ontario Ontario 0 0 0 0 45.78014 8005 720 3 0 Ontario Ontario 0 0 0 0 1718.36969 8006 72626 3 0 Ontario Ontario 0 0 0 0 1852.47348 8007 72727 3 0 Ontario Ontario 0 0 0 0 897.70758 8008 6628 4 0 Quebec Qubec 0 0 0 0 1094.43957 8009 770650 1 0 Quebec Qubec 0 0 0 0 1285.68829 8010 730 3 0 Ontario Ontario 0 0 0 0 1569.21669 8011 733 3 0 Ontario Ontario 0 0 0 0 134.17650 8012 732417 1 1 Ontario Ontario 0 0 0 0 1610.82716 8013 73430 3 0 Ontario Ontario 0 0 0 0 151.92931 8014 735 3 0 Ontario Ontario 0 0 0 0 1572.08694 8015 72826 3 0 Ontario Ontario 0 0 0 0 2750.29044 8016 72914 3 0 Ontario Ontario 0 0 0 0 2316.58899 8017 736417 1 1 Ontario Ontario 0 0 0 0 1513.68387 8018 4168148 2 0 Quebec Qubec 0 0 0 0 784.96799 8019 6634148 2 0 Quebec Qubec 0 0 0 0 1298.10424 8020 7388 3 0 Ontario Ontario 0 0 0 0 1685.60688 8021 73919 3 0 Ontario Ontario 0 0 0 0 135.12659 8022 74074 3 0 Ontario Ontario 0 0 0 0 1037.33218 8023 744 3 0 Ontario Ontario 0 0 0 0 2398.31162 8024 74325 3 0 Ontario Ontario 0 0 0 0 552.41587 8026 6628 4 0 Quebec Qubec 0 0 0 0 1322.02556 8027 74728 3 0 Ontario Ontario 0 0 0 0 291.41398 8028 74874 3 0 Ontario Ontario 0 0 0 0 2250.23156 8029 3951 4 0 Quebec Qubec 0 0 0 0 607.33862 8030 449850 1 0 Quebec Qubec 0 0 0 0 68.56015 8033 752 3 0 Ontario Ontario 0 0 0 0 2507.64253 8034 7663 3 0 Ontario Ontario 0 0 0 0 3878.21948 8035 75634 2 0 Ontario Ontario 0 0 0 0 1518.45941 8036 7515 3 0 Ontario Ontario 0 0 0 0 1127.71151 8037 4459 4 0 Quebec Qubec 0 0 0 0 754.23165 8039 4503 4 0 Quebec Qubec 0 0 0 0 389.24923 8040 6628 4 0 Quebec Qubec 0 0 0 0 879.61819 8041 753 3 0 Ontario Ontario 0 0 0 0 185.04989 8042 75472 3 0 Ontario Ontario 0 0 0 0 342.18208 8045 75634 2 0 Ontario Ontario 0 0 0 0 140.15925 8046 75772 3 0 Ontario Ontario 0 0 0 0 1487.20783 8047 7587 3 0 Ontario Ontario 0 0 0 0 468.71540 8048 752 3 0 Ontario Ontario 0 0 0 0 2223.69197 8049 75920 3 0 Ontario Ontario 0 0 0 0 1199.41695 8050 76115 3 0 Ontario Ontario 0 0 0 0 425.95516 8051 76228 3 0 Ontario Ontario 0 0 0 0 207.68158 8052 76326 3 0 Ontario Ontario 0 0 0 0 7040.38961 8053 764417 1 1 Ontario Ontario 0 0 0 0 331.92398 8054 7655 3 0 Ontario Ontario 0 0 0 0 104.24815 8055 760 3 0 Ontario Ontario 0 0 0 0 52.37715 8057 760 4 0 Ontario Ontario 0 0 0 0 660.78295 8059 767417 1 1 Ontario Ontario 0 0 0 0 1001.99816 8060 4503 4 0 Quebec Qubec 0 0 0 0 131.81954 8061 7715 3 0 Ontario Ontario 0 0 0 0 26.69848 8062 797417 1 1 Ontario Ontario 0 0 0 0 1413.99973 8063 768 3 0 Ontario Ontario 0 0 0 0 1256.06169 8064 7728 3 0 Ontario Ontario 0 0 0 0 221.49859 8067 3844 2 0 Ontario Ontario 0 0 0 0 1346.18296 8069 77619 3 0 Ontario Ontario 0 0 0 0 623.52353 8071 77834 2 0 Ontario Ontario 0 0 0 0 1096.23099 8072 77974 3 0 Ontario Ontario 0 0 0 0 1145.02881 8073 78026 3 0 Ontario Ontario 0 0 0 0 8950.28464 8074 784417 1 1 Ontario Ontario 0 0 0 0 5149.39206 8077 793401 1 0 Ontario Ontario 0 0 0 0 148.98814 8078 79434 2 0 Ontario Ontario 0 0 0 0 3299.21224 8079 785417 1 1 Ontario Ontario 0 0 0 0 407.69025 8080 7868 3 0 Ontario Ontario 0 0 0 0 1093.64933 8081 4163 4 0 Quebec Qubec 0 0 0 0 1777.02234 8082 78114 3 0 Ontario Ontario 0 0 0 0 338.53882 8083 78726 3 0 Ontario Ontario 0 0 0 0 30.66076 8084 78114 3 0 Ontario Ontario 0 0 0 0 443.81480 8085 78928 3 0 Ontario Ontario 0 0 0 0 2909.07903 8086 79026 3 0 Ontario Ontario 0 0 0 0 2129.29032 8087 79127 3 0 Ontario Ontario 0 0 0 0 147.34819 8088 7968 3 0 Ontario Ontario 0 0 0 0 602.93331 8089 797417 1 1 Ontario Ontario 0 0 0 0 1442.18282 8090 79817B 2 0 Ontario Ontario 0 0 0 0 397.22447 8091 79926 3 0 Ontario Ontario 0 0 0 0 127.50345 8092 803 2 0 Ontario Ontario 0 0 0 0 157.05570 8093 8048 3 0 Ontario Ontario 0 0 0 0 1935.39052 8094 80526 3 0 Ontario Ontario 0 0 0 0 3453.09126 8095 73743 3 0 Ontario Ontario 0 0 0 0 395.39976 8096 80774 3 0 Ontario Ontario 0 0 0 0 1106.44136 8099 8115 3 0 Ontario Ontario 0 0 0 0 4896.93985 8100 812417 1 1 Ontario Ontario 0 0 0 0 2217.11113 8101 81341 3 0 Ontario Ontario 0 0 0 0 436.52091 8102 856 2 0 Ontario Ontario 0 0 0 0 4674.66447 8103 7796209 4 0 Quebec Qubec 0 0 0 0 151.43760 8104 81441 3 0 Ontario Ontario 0 0 0 0 2136.61354 8105 81525 3 0 Ontario Ontario 0 0 0 0 2064.00721 8106 81620 3 0 Ontario Ontario 0 0 0 0 1228.47667 8107 3844 2 0 Ontario Ontario 0 0 0 0 4.37500 8108 81841 3 0 Ontario Ontario 0 0 0 0 315.20051 8109 81926 3 0 Ontario Ontario 0 0 0 0 3427.18042 8110 820417 1 1 Ontario Ontario 0 0 0 0 6112.00045 8111 824417 1 1 Ontario Ontario 0 0 0 0 900.59935 8112 82514 3 0 Ontario Ontario 0 0 0 0 146.94674 8115 3844 2 0 Ontario Ontario 0 0 0 0 1052.97314 8116 384436 3 0 Ontario Ontario 0 0 0 0 342.20434 8117 824417 1 1 Ontario Ontario 0 0 0 0 1599.54245 8118 82715 3 0 Ontario Ontario 0 0 0 0 1955.56555 8119 8287 3 0 Ontario Ontario 0 0 0 0 1449.81603 8120 829417 1 1 Ontario Ontario 0 0 0 0 822.14941 8121 83027 3 0 Ontario Ontario 0 0 0 0 2252.25154 8122 831417 1 1 Ontario Ontario 0 0 0 0 147.10289 8123 83226 3 0 Ontario Ontario 0 0 0 0 150.36232 8124 861 2 0 Ontario Ontario 0 0 0 0 299.05284 8127 82514 3 0 Ontario Ontario 0 0 0 0 363.81791 8128 83941 3 0 Ontario Ontario 0 0 0 0 178.14685 8129 84127 3 0 Ontario Ontario 0 0 0 0 1093.77965 8130 95372 3 0 Ontario Ontario 0 0 0 0 1939.11445 8131 768 3 0 Ontario Ontario 0 0 0 0 1580.59665 8132 85919 3 0 Ontario Ontario 0 0 0 0 87.85546 8133 87617 3 0 Ontario Ontario 0 0 0 0 851.52941 8135 6634 4 0 Quebec Qubec 0 0 0 0 156.85832 8136 83814 3 0 Ontario Ontario 0 0 0 0 302.09500 8137 84826 3 0 Ontario Ontario 0 0 0 0 3241.80251 8138 84926 3 0 Ontario Ontario 0 0 0 0 174.58113 8139 4031 4 0 Quebec Qubec 0 0 0 0 3561.04363 8140 85018 3 0 Ontario Ontario 0 0 0 0 2990.50494 8141 86417 3 0 Ontario Ontario 0 0 0 0 975.76620 8142 852417 1 1 Ontario Ontario 0 0 0 0 158.02588 8143 84614 3 0 Ontario Ontario 0 0 0 0 305.49813 8144 85919 3 0 Ontario Ontario 0 0 0 0 171.38486 8145 85114 3 0 Ontario Ontario 0 0 0 0 2557.63840 8147 857 4 0 Ontario Ontario 0 0 0 0 3122.51657 8148 8624 3 0 Ontario Ontario 0 0 0 0 3801.17662 8151 87617 3 0 Ontario Ontario 0 0 0 0 3359.92406 8152 8893 3 0 Ontario Ontario 0 0 0 0 1248.80850 8153 8905 3 0 Ontario Ontario 0 0 0 0 2156.08806 8154 8659 3 0 Ontario Ontario 0 0 0 0 383.01103 8155 867 2 0 Ontario Ontario 0 0 0 0 1437.32445 8156 86820 3 0 Ontario Ontario 0 0 0 0 1543.46979 8157 4200 4 0 Quebec Qubec 0 0 0 0 76.30624 8158 8893 3 0 Ontario Ontario 0 0 0 0 5840.29011 8159 89117 3 0 Ontario Ontario 0 0 0 0 668.69367 8160 89227 3 0 Ontario Ontario 0 0 0 0 1399.34541 8161 87122 3 0 Ontario Ontario 0 0 0 0 13921.52933 8162 7795202 3 0 Quebec Qubec 0 0 0 0 9898.49862 8163 7795202 3 0 Quebec Qubec 0 0 0 0 954.51277 8166 87527 3 0 Ontario Ontario 0 0 0 0 751.83417 8167 879 4 0 Ontario Ontario 0 0 0 0 2546.69896 8168 8818 3 0 Ontario Ontario 0 0 0 0 3061.68584 8170 4195 4 0 Quebec Qubec 0 0 0 0 1658.76678 8171 8887 3 0 Ontario Ontario 0 0 0 0 601.99143 8172 8905 3 0 Ontario Ontario 0 0 0 0 717.88293 8173 87414 3 0 Ontario Ontario 0 0 0 0 2660.88829 8174 369132 2 0 Ontario Ontario 0 0 0 0 901.00882 8175 908 4 0 Ontario Ontario 0 0 0 0 1013.05547 8176 8959 3 0 Ontario Ontario 0 0 0 0 398.83233 8177 943 4 0 Ontario Ontario 0 0 0 0 1714.08462 8178 8966 3 0 Ontario Ontario 0 0 0 0 955.39423 8179 89716 3 0 Ontario Ontario 0 0 0 0 1488.71347 8180 89841 3 0 Ontario Ontario 0 0 0 0 177.75022 8182 877 3 0 Ontario Ontario 0 0 0 0 926.43545 8183 90119 3 0 Ontario Ontario 0 0 0 0 1042.58361 8184 904125 3 0 Ontario Ontario 0 0 0 0 5353.53726 8185 4168148 2 0 Quebec Qubec 0 0 0 0 374.21325 8186 4033 4 0 Quebec Qubec 0 0 0 0 7779.29690 8187 381301 4 0 Quebec Qubec 0 0 0 0 501.73262 8188 908 4 0 Ontario Ontario 0 0 0 0 1188.96670 8189 909 3 0 Ontario Ontario 0 0 0 0 909.73071 8190 395736 3 0 Ontario Ontario 0 0 0 0 702.81565 8191 9106 3 0 Ontario Ontario 0 0 0 0 110.47810 8192 903 3 0 Ontario Ontario 0 0 0 0 1349.81907 8193 9128 3 0 Ontario Ontario 0 0 0 0 704.35221 8194 91341 3 0 Ontario Ontario 0 0 0 0 1550.47134 8195 91616 2 0 Ontario Ontario 0 0 0 0 1122.90829 8196 91822 3 0 Ontario Ontario 0 0 0 0 1012.60057 8197 93 3 0 Ontario Ontario 0 0 0 0 1393.06143 8198 9199 3 0 Ontario Ontario 0 0 0 0 149.26050 8199 906 3 0 Ontario Ontario 0 0 0 0 921.77793 8200 9208 3 0 Ontario Ontario 0 0 0 0 2492.45564 8202 92515 3 0 Ontario Ontario 0 0 0 0 1714.39396 8203 9266 3 0 Ontario Ontario 0 0 0 0 574.59528 8205 92816 2 0 Ontario Ontario 0 0 0 0 1533.42833 8206 9307 3 0 Ontario Ontario 0 0 0 0 1323.16874 8207 9315 3 0 Ontario Ontario 0 0 0 0 3118.46606 8209 932 3 0 Ontario Ontario 0 0 0 0 369.99378 8210 93638 3 0 Ontario Ontario 0 0 0 0 584.04064 8211 915 3 0 Ontario Ontario 0 0 0 0 2426.73621 8212 93720 3 0 Ontario Ontario 0 0 0 0 974.58539 8213 1016417 1 1 Ontario Ontario 0 0 0 0 2326.61061 8214 4166148 2 0 Quebec Qubec 0 0 0 0 123.88706 8216 92363 3 0 Ontario Ontario 0 0 0 0 23.51097 8217 93917B 3 0 Ontario Ontario 0 0 0 0 3124.75788 8218 9407 3 0 Ontario Ontario 0 0 0 0 3354.04270 8219 9414 3 0 Ontario Ontario 0 0 0 0 1648.55150 8220 94527 3 0 Ontario Ontario 0 0 0 0 2750.91962 8221 9643 3 0 Ontario Ontario 0 0 0 0 4036.55273 8222 94628 3 0 Ontario Ontario 0 0 0 0 3366.34356 8223 6634 4 0 Quebec Qubec 0 0 0 0 1269.31486 8224 4164 4 0 Quebec Qubec 0 0 0 0 2028.61329 8227 94214 3 0 Ontario Ontario 0 0 0 0 1730.71730 8228 943 4 0 Ontario Ontario 0 0 0 0 1948.49205 8229 369832 1 0 Ontario Ontario 0 0 0 0 1578.65189 8230 949125 3 0 Ontario Ontario 0 0 0 0 873.05650 8231 4440148 2 0 Quebec Qubec 0 0 0 0 2118.75349 8232 944 3 0 Ontario Ontario 0 0 0 0 1468.96530 8233 9586 3 0 Ontario Ontario 0 0 0 0 1763.27421 8235 9609 3 0 Ontario Ontario 0 0 0 0 1191.83154 8236 9618 3 0 Ontario Ontario 0 0 0 0 12553.62558 8237 386303 2 0 Quebec Qubec 0 0 0 0 557.58725 8238 98138 3 0 Ontario Ontario 0 0 0 0 495.52223 8239 383863 3 0 Ontario Ontario 0 0 0 0 2083.27680 8240 1010 4 0 Quebec Qubec 0 0 0 0 1236.82645 8241 96741 3 0 Ontario Ontario 0 0 0 0 1114.33506 8242 9687 3 0 Ontario Ontario 0 0 0 0 1291.98647 8243 97015 3 0 Ontario Ontario 0 0 0 0 4433.18372 8244 97318 3 0 Ontario Ontario 0 0 0 0 865.41484 8245 97420 3 0 Ontario Ontario 0 0 0 0 7360.66799 8246 97543 2 0 Ontario Ontario 0 0 0 0 9034.04711 8247 976138 2 0 Ontario Ontario 0 0 0 0 536.53791 8248 97716 2 0 Ontario Ontario 0 0 0 0 1626.23093 8249 97913 3 0 Ontario Ontario 0 0 0 0 1297.09931 8250 98022 3 0 Ontario Ontario 0 0 0 0 3889.65453 8251 873 2 0 Ontario Ontario 0 0 0 0 3076.60300 8252 9866 3 0 Ontario Ontario 0 0 0 0 524.25213 8253 9876 3 0 Ontario Ontario 0 0 0 0 2725.00829 8254 929 2 0 Ontario Ontario 0 0 0 0 555.50320 8255 9918 3 0 Ontario Ontario 0 0 0 0 1295.10181 8256 4432148 2 0 Quebec Qubec 0 0 0 0 13712.42506 8257 6634148 2 0 Quebec Qubec 0 0 0 0 1335.39997 8258 10113 3 0 Ontario Ontario 0 0 0 0 421.12945 8259 99418 3 0 Ontario Ontario 0 0 0 0 3927.77344 8261 99719 3 0 Ontario Ontario 0 0 0 0 3264.55014 8262 99827 3 0 Ontario Ontario 0 0 0 0 467.72517 8263 1003 3 0 Ontario Ontario 0 0 0 0 1344.74216 8264 100548 3 0 Ontario Ontario 0 0 0 0 4.75164 8266 100716 2 0 Ontario Ontario 0 0 0 0 812.78762 8267 383863 3 0 Ontario Ontario 0 0 0 0 1531.55529 8269 38695 3 0 Ontario Ontario 0 0 0 0 2021.15485 8270 10135 3 0 Ontario Ontario 0 0 0 0 965.45886 8271 101422 3 0 Ontario Ontario 0 0 0 0 2479.44372 8272 10157 3 0 Ontario Ontario 0 0 0 0 4144.29675 8274 4165 4 0 Quebec Qubec 0 0 0 0 1507.30009 8275 4164 4 0 Quebec Qubec 0 0 0 0 1441.06221 8276 98138 3 0 Ontario Ontario 0 0 0 0 590.19029 8280 40685 3 0 Ontario Ontario 0 0 0 0 1759.54711 8281 1025125 3 0 Ontario Ontario 0 0 0 0 1462.69725 8282 102620 3 0 Ontario Ontario 0 0 0 0 2797.31955 8283 6634 4 0 Quebec Qubec 0 0 0 0 742.65596 8284 1020 3 0 Ontario Ontario 0 0 0 0 751.77376 8285 100273 2 0 Ontario Ontario 0 0 0 0 244.02457 8286 1028417 1 1 Ontario Ontario 0 0 0 0 1940.92283 8287 102932 1 0 Ontario Ontario 0 0 0 0 2028.64112 8288 101927 3 0 Ontario Ontario 0 0 0 0 2244.27242 8289 101869 3 0 Ontario Ontario 0 0 0 0 101.65852 8290 107216 2 0 Ontario Ontario 0 0 0 0 1960.52184 8291 1024 3 0 Ontario Ontario 0 0 0 0 1386.29362 8292 10318 3 0 Ontario Ontario 0 0 0 0 1365.14058 8293 10513 3 0 Ontario Ontario 0 0 0 0 1927.27183 8294 103215 3 0 Ontario Ontario 0 0 0 0 150.89116 8295 10513 3 0 Ontario Ontario 0 0 0 0 2096.25895 8296 10357 3 0 Ontario Ontario 0 0 0 0 3033.06807 8297 1036 3 0 Ontario Ontario 0 0 0 0 3194.34539 8298 10379 3 0 Ontario Ontario 0 0 0 0 1614.02799 8299 4887 4 0 Quebec Qubec 0 0 0 0 663.15624 8300 103822 3 0 Ontario Ontario 0 0 0 0 1954.55019 8301 103913 3 0 Ontario Ontario 0 0 0 0 771.98236 8303 104338 3 0 Ontario Ontario 0 0 0 0 1023.33452 8304 10445 3 0 Ontario Ontario 0 0 0 0 3220.66109 8305 4026 4 0 Quebec Qubec 0 0 0 0 1491.82636 8307 1046653 2 0 Ontario Ontario 0 0 0 0 4365.24166 8308 10474 3 0 Ontario Ontario 0 0 0 0 2067.82326 8309 104827 3 0 Ontario Ontario 0 0 0 0 2264.80705 8310 105041 3 0 Ontario Ontario 0 0 0 0 1366.87696 8311 105248 3 0 Ontario Ontario 0 0 0 0 694.05144 8312 10538 3 0 Ontario Ontario 0 0 0 0 823.38585 8314 1055 3 0 Ontario Ontario 0 0 0 0 2071.45458 8315 105631 2 0 Ontario Ontario 0 0 0 0 12.93049 8316 105631 2 0 Ontario Ontario 0 0 0 0 1360.73996 8317 10773 3 0 Ontario Ontario 0 0 0 0 3022.04834 8318 107428 3 0 Ontario Ontario 0 0 0 0 779.44525 8319 1057417 1 1 Ontario Ontario 0 0 0 0 423.31525 8320 105817 3 0 Ontario Ontario 0 0 0 0 2051.71984 8321 105929 3 0 Ontario Ontario 0 0 0 0 144.55850 8322 10773 3 0 Ontario Ontario 0 0 0 0 169.90904 8323 106117 3 0 Ontario Ontario 0 0 0 0 1018.39612 8324 1062125 3 0 Ontario Ontario 0 0 0 0 1236.24137 8325 106331 2 0 Ontario Ontario 0 0 0 0 1794.29410 8326 106418 3 0 Ontario Ontario 0 0 0 0 1545.57213 8327 372363 3 0 Ontario Ontario 0 0 0 0 1206.00540 8328 10657 3 0 Ontario Ontario 0 0 0 0 837.66708 8329 106622 3 0 Ontario Ontario 0 0 0 0 1471.78922 8330 106732 1 0 Ontario Ontario 0 0 0 0 2150.43423 8331 1068 2 0 Ontario Ontario 0 0 0 0 2895.15169 8332 10699 3 0 Ontario Ontario 0 0 0 0 203.67131 8334 107132 1 0 Ontario Ontario 0 0 0 0 1525.82252 8335 107216 2 0 Ontario Ontario 0 0 0 0 187.57089 8336 366363 3 0 Ontario Ontario 0 0 0 0 1617.29794 8337 107315 3 0 Ontario Ontario 0 0 0 0 351.57539 8339 107618 3 0 Ontario Ontario 0 0 0 0 1525.86846 8342 108120 3 0 Ontario Ontario 0 0 0 0 404.78776 8343 1082 2 0 Ontario Ontario 0 0 0 0 1023.47753 8346 108541 3 0 Ontario Ontario 0 0 0 0 1261.16917 8347 108638 3 0 Ontario Ontario 0 0 0 0 1128.88537 8348 105524 3 0 Ontario Ontario 0 0 0 0 1824.98647 8349 1149 3 0 Ontario Ontario 0 0 0 0 785.13666 8350 108931 2 0 Ontario Ontario 0 0 0 0 1521.56552 8351 109017 3 0 Ontario Ontario 0 0 0 0 536.68878 8352 109132 1 0 Ontario Ontario 0 0 0 0 565.15317 8355 109716 2 0 Ontario Ontario 0 0 0 0 125.56895 8356 109817 3 0 Ontario Ontario 0 0 0 0 2572.00755 8357 109919 3 0 Ontario Ontario 0 0 0 0 1403.93833 8358 11008 3 0 Ontario Ontario 0 0 0 0 2204.91840 8359 110127 3 0 Ontario Ontario 0 0 0 0 1703.91591 8360 100273 2 0 Ontario Ontario 0 0 0 0 2046.28188 8361 109669 3 0 Ontario Ontario 0 0 0 0 4348.95000 8362 108814 3 0 Ontario Ontario 0 0 0 0 250.83036 8363 130031 2 0 Ontario Ontario 0 0 0 0 3.08415 8364 108814 3 0 Ontario Ontario 0 0 0 0 107.78350 8365 11008 3 0 Ontario Ontario 0 0 0 0 4681.58977 8366 1103 4 0 Ontario Ontario 0 0 0 0 809.62765 8367 109415 3 0 Ontario Ontario 0 0 0 0 3106.03690 8368 11049 3 0 Ontario Ontario 0 0 0 0 4938.57238 8369 110236 3 0 Ontario Ontario 0 0 0 0 149.36058 8370 1109 4 0 Ontario Ontario 0 0 0 0 699.78481 8371 366563 3 0 Ontario Ontario 0 0 0 0 338.55369 8372 110517 3 0 Ontario Ontario 0 0 0 0 1065.37369 8373 110722 3 0 Ontario Ontario 0 0 0 0 273.07282 8375 1109 4 0 Ontario Ontario 0 0 0 0 1431.75431 8376 1110417 1 1 Ontario Ontario 0 0 0 0 801.73908 8377 111115 3 0 Ontario Ontario 0 0 0 0 2129.91115 8378 11125 3 0 Ontario Ontario 0 0 0 0 2771.76598 8379 11313 3 0 Ontario Ontario 0 0 0 0 2160.60816 8380 11135 3 0 Ontario Ontario 0 0 0 0 2498.61869 8381 111427 3 0 Ontario Ontario 0 0 0 0 136.64451 8382 111615 3 0 Ontario Ontario 0 0 0 0 1149.60685 8383 11179 3 0 Ontario Ontario 0 0 0 0 639.73678 8384 11188 3 0 Ontario Ontario 0 0 0 0 1012.55622 8385 111941 3 0 Ontario Ontario 0 0 0 0 290.36253 8386 112022 3 0 Ontario Ontario 0 0 0 0 1833.92696 8387 40765 3 0 Ontario Ontario 0 0 0 0 1054.44168 8388 112138 3 0 Ontario Ontario 0 0 0 0 169.53327 8389 1122 4 0 Ontario Ontario 0 0 0 0 1965.68724 8390 11237 3 0 Ontario Ontario 0 0 0 0 2638.90576 8391 112429-32 3 0 Ontario Ontario 0 0 0 0 1215.12723 8395 112920 3 0 Ontario Ontario 0 0 0 0 2267.07496 8397 1130 3 0 Ontario Ontario 0 0 0 0 2261.66536 8398 113229 3 0 Ontario Ontario 0 0 0 0 5461.21864 8399 1160653 2 0 Ontario Ontario 0 0 0 0 2103.16024 8400 113448 3 0 Ontario Ontario 0 0 0 0 797.39116 8401 113627 3 0 Ontario Ontario 0 0 0 0 9292.38394 8402 1137401 1 0 Ontario Ontario 0 0 0 0 39.46918 8403 113827 3 0 Ontario Ontario 0 0 0 0 1772.35669 8404 1055 3 0 Ontario Ontario 0 0 0 0 1551.55793 8405 1143 2 0 Ontario Ontario 0 0 0 0 95.55822 8406 113827 3 0 Ontario Ontario 0 0 0 0 1025.86995 8407 110636 3 0 Ontario Ontario 0 0 0 0 4213.07262 8408 11414 3 0 Ontario Ontario 0 0 0 0 825.98409 8409 11427 3 0 Ontario Ontario 0 0 0 0 152.35525 8410 1143 2 0 Ontario Ontario 0 0 0 0 1770.24749 8411 1144107 3 0 Ontario Ontario 0 0 0 0 1852.58021 8412 114532 1 0 Ontario Ontario 0 0 0 0 1822.06783 8413 114616 2 0 Ontario Ontario 0 0 0 0 999.34835 8414 114715 3 0 Ontario Ontario 0 0 0 0 1885.48137 8415 1149 3 0 Ontario Ontario 0 0 0 0 2239.66501 8416 116551 3 0 Ontario Ontario 0 0 0 0 1453.80245 8417 116617 3 0 Ontario Ontario 0 0 0 0 1019.50416 8418 115038 3 0 Ontario Ontario 0 0 0 0 229.63734 8419 115136 3 0 Ontario Ontario 0 0 0 0 6458.65504 8421 115343 2 0 Ontario Ontario 0 0 0 0 3686.83092 8422 115413 3 0 Ontario Ontario 0 0 0 0 435.95709 8423 115512 3 0 Ontario Ontario 0 0 0 0 2823.80240 8424 115620 3 0 Ontario Ontario 0 0 0 0 216.07478 8425 1157 2 0 Ontario Ontario 0 0 0 0 174.91055 8426 115816 2 0 Ontario Ontario 0 0 0 0 153.61264 8427 115915 3 0 Ontario Ontario 0 0 0 0 638.41165 8428 1160653 2 0 Ontario Ontario 0 0 0 0 2038.64804 8429 114814 3 0 Ontario Ontario 0 0 0 0 259.33819 8430 1161 3 0 Ontario Ontario 0 0 0 0 1338.89608 8431 11638 3 0 Ontario Ontario 0 0 0 0 326.67383 8433 116415 3 0 Ontario Ontario 0 0 0 0 310.44160 8434 116617 3 0 Ontario Ontario 0 0 0 0 2372.58103 8435 116719 3 0 Ontario Ontario 0 0 0 0 205.57110 8436 1168 2 0 Ontario Ontario 0 0 0 0 361.34664 8437 1169107 3 0 Ontario Ontario 0 0 0 0 609.15395 8438 11826 3 0 Ontario Ontario 0 0 0 0 916.82583 8439 117027 3 0 Ontario Ontario 0 0 0 0 367.78316 8440 117136 3 0 Ontario Ontario 0 0 0 0 233.95957 8441 117219 3 0 Ontario Ontario 0 0 0 0 1467.08086 8442 117422 3 0 Ontario Ontario 0 0 0 0 1915.85294 8443 118073 2 0 Ontario Ontario 0 0 0 0 847.52837 8448 117532 1 0 Ontario Ontario 0 0 0 0 1034.14377 8449 1176 3 0 Ontario Ontario 0 0 0 0 789.81877 8450 117843 2 0 Ontario Ontario 0 0 0 0 2581.75199 8451 117315 3 0 Ontario Ontario 0 0 0 0 96.64271 8453 118073 2 0 Ontario Ontario 0 0 0 0 808.02107 8454 117932 1 0 Ontario Ontario 0 0 0 0 2928.61058 8455 118418 3 0 Ontario Ontario 0 0 0 0 689.03560 8456 11858 3 0 Ontario Ontario 0 0 0 0 263.61509 8457 118715 3 0 Ontario Ontario 0 0 0 0 1864.72381 8458 118841 3 0 Ontario Ontario 0 0 0 0 584.45612 8459 118927 3 0 Ontario Ontario 0 0 0 0 2079.17386 8460 11909 3 0 Ontario Ontario 0 0 0 0 4055.99063 8461 11919 3 0 Ontario Ontario 0 0 0 0 3037.12697 8462 11925 3 0 Ontario Ontario 0 0 0 0 2145.05886 8464 118117 2 1 Ontario Ontario 0 0 0 0 212.02308 8465 119341 3 0 Ontario Ontario 0 0 0 0 982.92895 8466 12166 3 0 Ontario Ontario 0 0 0 0 797.80757 8467 1195 2 0 Ontario Ontario 0 0 0 0 2329.76483 8469 1196417 1 1 Ontario Ontario 0 0 0 0 772.75709 8470 119713 3 0 Ontario Ontario 0 0 0 0 1261.72561 8471 119813 3 0 Ontario Ontario 0 0 0 0 128.89737 8472 120013 3 0 Ontario Ontario 0 0 0 0 3414.06242 8473 11831 3 0 Ontario Ontario 0 0 0 0 1305.95261 8475 12036 3 0 Ontario Ontario 0 0 0 0 1410.41088 8476 120432 1 0 Ontario Ontario 0 0 0 0 1114.40561 8477 120517 3 0 Ontario Ontario 0 0 0 0 1569.04981 8478 120612 3 0 Ontario Ontario 0 0 0 0 2067.34323 8479 120729 3 0 Ontario Ontario 0 0 0 0 550.94651 8480 12089 3 0 Ontario Ontario 0 0 0 0 2208.47800 8481 121220 3 0 Ontario Ontario 0 0 0 0 1437.43405 8482 121419 3 0 Ontario Ontario 0 0 0 0 1750.48025 8483 121520 3 0 Ontario Ontario 0 0 0 0 115.59710 8484 12101 3 0 Ontario Ontario 0 0 0 0 1312.74133 8485 12206 3 0 Ontario Ontario 0 0 0 0 502.11905 8486 122141 3 0 Ontario Ontario 0 0 0 0 873.49683 8487 12226 3 0 Ontario Ontario 0 0 0 0 1901.14023 8488 116551 3 0 Ontario Ontario 0 0 0 0 1344.35905 8489 122515 3 0 Ontario Ontario 0 0 0 0 8859.12771 8494 1349138 2 0 Ontario Ontario 0 0 0 0 336.96284 8495 122141 3 0 Ontario Ontario 0 0 0 0 4148.69909 8496 12101 3 0 Ontario Ontario 0 0 0 0 1381.24070 8497 122322 3 0 Ontario Ontario 0 0 0 0 1890.76087 8498 12249 3 0 Ontario Ontario 0 0 0 0 413.66653 8499 122515 3 0 Ontario Ontario 0 0 0 0 456.85394 8500 12171 3 0 Ontario Ontario 0 0 0 0 2484.85851 8501 12181 3 0 Ontario Ontario 0 0 0 0 832.43868 8502 122612 3 0 Ontario Ontario 0 0 0 0 860.35027 8503 122712 3 0 Ontario Ontario 0 0 0 0 3123.08586 8504 122829-32 3 0 Ontario Ontario 0 0 0 0 815.57840 8506 123013 3 0 Ontario Ontario 0 0 0 0 1495.34104 8507 123119 3 0 Ontario Ontario 0 0 0 0 1309.43008 8508 1232417 1 1 Ontario Ontario 0 0 0 0 1524.92754 8509 123336 3 0 Ontario Ontario 0 0 0 0 2268.67446 8510 123414 3 0 Ontario Ontario 0 0 0 0 1786.21052 8511 123515 3 0 Ontario Ontario 0 0 0 0 91.07717 8512 123613 3 0 Ontario Ontario 0 0 0 0 1262.32608 8513 123713 3 0 Ontario Ontario 0 0 0 0 2448.22170 8514 123838 3 0 Ontario Ontario 0 0 0 0 2510.17547 8515 124016 2 0 Ontario Ontario 0 0 0 0 251.85469 8517 124238 3 0 Ontario Ontario 0 0 0 0 185.83948 8518 124514 3 0 Ontario Ontario 0 0 0 0 1301.91239 8519 12474 3 0 Ontario Ontario 0 0 0 0 200.04884 8520 124936 3 0 Ontario Ontario 0 0 0 0 982.21829 8521 125020 3 0 Ontario Ontario 0 0 0 0 436.29560 8522 1256417 1 1 Ontario Ontario 0 0 0 0 10937.36859 8525 12762 3 0 Ontario Ontario 0 0 0 0 1183.29593 8526 123917 3 0 Ontario Ontario 0 0 0 0 1973.14299 8527 124638 3 0 Ontario Ontario 0 0 0 0 483.98820 8528 125315 3 0 Ontario Ontario 0 0 0 0 1945.67216 8529 125432 1 0 Ontario Ontario 0 0 0 0 727.31880 8530 125515 3 0 Ontario Ontario 0 0 0 0 366.54539 8531 1256417 1 1 Ontario Ontario 0 0 0 0 496.20584 8532 1257 4 0 Ontario Ontario 0 0 0 0 1769.04434 8534 125918 3 0 Ontario Ontario 0 0 0 0 2967.32746 8535 126043 2 0 Ontario Ontario 0 0 0 0 121.82489 8536 1264 4 0 Ontario Ontario 0 0 0 0 2132.37031 8537 12658 3 0 Ontario Ontario 0 0 0 0 217.96716 8538 125217 3 0 Ontario Ontario 0 0 0 0 4020.48141 8539 12441 3 0 Ontario Ontario 0 0 0 0 6126.92823 8540 12431 3 0 Ontario Ontario 0 0 0 0 1130.22440 8541 126641 3 0 Ontario Ontario 0 0 0 0 1331.50537 8542 126920 3 0 Ontario Ontario 0 0 0 0 3099.42342 8543 12705 3 0 Ontario Ontario 0 0 0 0 462.26008 8544 12674 3 0 Ontario Ontario 0 0 0 0 7350.57120 8545 126817 2 1 Ontario Ontario 0 0 0 0 53.59649 8546 126920 3 0 Ontario Ontario 0 0 0 0 10993.71781 8547 1033 3 0 Ontario Ontario 0 0 0 0 1322.49954 8548 12629 3 0 Ontario Ontario 0 0 0 0 319.13917 8549 127314 3 0 Ontario Ontario 0 0 0 0 1322.47997 8551 127412 3 0 Ontario Ontario 0 0 0 0 494.43993 8552 128336 3 0 Ontario Ontario 0 0 0 0 522.05580 8553 1381416 1 0 Ontario Ontario 0 0 0 0 100.37267 8554 128336 3 0 Ontario Ontario 0 0 0 0 530.49192 8555 1284 4 0 Ontario Ontario 0 0 0 0 635.70458 8556 127815 3 0 Ontario Ontario 0 0 0 0 1826.87485 8557 12796 3 0 Ontario Ontario 0 0 0 0 1473.29531 8560 128229-32 3 0 Ontario Ontario 0 0 0 0 1695.09297 8562 5874 3 0 Ontario Ontario 0 0 0 0 1274.35377 8563 128613 3 0 Ontario Ontario 0 0 0 0 1410.71618 8564 128722 3 0 Ontario Ontario 0 0 0 0 1863.88228 8565 128819 3 0 Ontario Ontario 0 0 0 0 970.30176 8566 129159 3 0 Ontario Ontario 0 0 0 0 1416.88134 8567 129332 1 0 Ontario Ontario 0 0 0 0 1082.46338 8570 129741 3 0 Ontario Ontario 0 0 0 0 595.73749 8571 129813 3 0 Ontario Ontario 0 0 0 0 1832.00942 8572 130116 2 0 Ontario Ontario 0 0 0 0 821.14501 8573 1381416 1 0 Ontario Ontario 0 0 0 0 17206.98583 8574 7363138 2 0 Quebec Qubec 0 0 0 0 1335.98618 8575 12998 3 0 Ontario Ontario 0 0 0 0 5910.05414 8576 130031 2 0 Ontario Ontario 0 0 0 0 48.60116 8577 130116 2 0 Ontario Ontario 0 0 0 0 568.02835 8578 130244 3 0 Ontario Ontario 0 0 0 0 2389.16430 8579 129538 3 0 Ontario Ontario 0 0 0 0 1439.66720 8580 130415 3 0 Ontario Ontario 0 0 0 0 347.71247 8581 130516 2 0 Ontario Ontario 0 0 0 0 642.55012 8582 130636 3 0 Ontario Ontario 0 0 0 0 3070.23880 8583 13076 3 0 Ontario Ontario 0 0 0 0 3075.79854 8584 13089 3 0 Ontario Ontario 0 0 0 0 1317.00172 8585 130912 3 0 Ontario Ontario 0 0 0 0 2081.08616 8586 1311417 1 1 Ontario Ontario 0 0 0 0 563.74681 8587 131259 3 0 Ontario Ontario 0 0 0 0 2021.35163 8588 131313 3 0 Ontario Ontario 0 0 0 0 169.03978 8589 131415 3 0 Ontario Ontario 0 0 0 0 3386.49751 8590 12961 3 0 Ontario Ontario 0 0 0 0 17.14006 8591 12961 3 0 Ontario Ontario 0 0 0 0 130.52713 8592 131659 3 0 Ontario Ontario 0 0 0 0 596.26560 8593 13173 3 0 Ontario Ontario 0 0 0 0 1357.54300 8594 131829-32 3 0 Ontario Ontario 0 0 0 0 1372.05986 8596 132049 3 0 Ontario Ontario 0 0 0 0 169.29780 8597 132113 3 0 Ontario Ontario 0 0 0 0 1414.81563 8598 132420 3 0 Ontario Ontario 0 0 0 0 2271.92903 8599 130373 2 0 Ontario Ontario 0 0 0 0 1065.78886 8600 132532 1 0 Ontario Ontario 0 0 0 0 243.77495 8601 132613 3 0 Ontario Ontario 0 0 0 0 313.81821 8603 132829-32 3 0 Ontario Ontario 0 0 0 0 3150.56402 8604 132949 3 0 Ontario Ontario 0 0 0 0 3599.08441 8605 13303 3 0 Ontario Ontario 0 0 0 0 223.66205 8606 132212 3 0 Ontario Ontario 0 0 0 0 760.24320 8607 13318 3 0 Ontario Ontario 0 0 0 0 963.20282 8608 133213 3 0 Ontario Ontario 0 0 0 0 91.22552 8609 138412 3 0 Ontario Ontario 0 0 0 0 1985.17773 8610 132317 3 0 Ontario Ontario 0 0 0 0 2638.02336 8613 133514 3 0 Ontario Ontario 0 0 0 0 1462.84255 8614 133622 3 0 Ontario Ontario 0 0 0 0 2777.68771 8616 133720 3 0 Ontario Ontario 0 0 0 0 1086.89371 8617 133841 3 0 Ontario Ontario 0 0 0 0 2150.76012 8618 134115 3 0 Ontario Ontario 0 0 0 0 1478.72662 8619 134312 3 0 Ontario Ontario 0 0 0 0 495.51918 8621 134673 2 0 Ontario Ontario 0 0 0 0 2051.62314 8622 13456 3 0 Ontario Ontario 0 0 0 0 2536.48029 8623 134818 3 0 Ontario Ontario 0 0 0 0 4070.83507 8624 1349138 2 0 Ontario Ontario 0 0 0 0 2120.03745 8625 135029 3 0 Ontario Ontario 0 0 0 0 1035.84021 8626 135159 3 0 Ontario Ontario 0 0 0 0 974.43885 8627 135254 3 0 Ontario Ontario 0 0 0 0 1024.33318 8628 135329-32 3 0 Ontario Ontario 0 0 0 0 292.05046 8629 134673 2 0 Ontario Ontario 0 0 0 0 1355.89310 8630 135436 3 0 Ontario Ontario 0 0 0 0 2556.66093 8631 1355 3 0 Ontario Ontario 0 0 0 0 866.61064 8632 1356 3 0 Ontario Ontario 0 0 0 0 1753.54309 8634 135820 3 0 Ontario Ontario 0 0 0 0 756.45817 8635 136015 3 0 Ontario Ontario 0 0 0 0 3279.62904 8636 2393 3 0 Ontario Ontario 0 0 0 0 5174.48410 8637 136261 3 0 Ontario Ontario 0 0 0 0 334.38801 8638 136329-32 3 0 Ontario Ontario 0 0 0 0 1366.96812 8639 136549 3 0 Ontario Ontario 0 0 0 0 1897.35861 8640 136649 3 0 Ontario Ontario 0 0 0 0 2108.19373 8641 135938 3 0 Ontario Ontario 0 0 0 0 5266.94124 8643 136944 3 0 Ontario Ontario 0 0 0 0 1384.63042 8644 137020 3 0 Ontario Ontario 0 0 0 0 212.22046 8645 136138 3 0 Ontario Ontario 0 0 0 0 1373.09735 8646 13718 3 0 Ontario Ontario 0 0 0 0 522.95371 8647 137336 3 0 Ontario Ontario 0 0 0 0 677.76366 8648 137459 3 0 Ontario Ontario 0 0 0 0 993.33276 8651 1376 3 0 Ontario Ontario 0 0 0 0 3720.68049 8652 13641 3 0 Ontario Ontario 0 0 0 0 2582.71935 8653 137944 3 0 Ontario Ontario 0 0 0 0 8456.85630 8654 110127 3 0 Ontario Ontario 0 0 0 0 1961.66085 8656 138032 1 0 Ontario Ontario 0 0 0 0 2238.22831 8657 1381416 1 0 Ontario Ontario 0 0 0 0 579.15502 8658 138349 3 0 Ontario Ontario 0 0 0 0 1587.21459 8659 138614 3 0 Ontario Ontario 0 0 0 0 3396.61046 8660 138719 3 0 Ontario Ontario 0 0 0 0 1758.49791 8661 138412 3 0 Ontario Ontario 0 0 0 0 1999.28536 8662 138515 3 0 Ontario Ontario 0 0 0 0 8653.32539 8663 1388401 1 0 Ontario Ontario 0 0 0 0 151.62534 8664 138944 3 0 Ontario Ontario 0 0 0 0 1276.31403 8665 139022 3 0 Ontario Ontario 0 0 0 0 535.42232 8666 13681 3 0 Ontario Ontario 0 0 0 0 768.08302 8667 138238 3 0 Ontario Ontario 0 0 0 0 174.61617 8668 140349 3 0 Ontario Ontario 0 0 0 0 6223.35307 8669 13425 3 0 Ontario Ontario 0 0 0 0 296.82601 8670 1391 3 0 Ontario Ontario 0 0 0 0 1949.77333 8671 139213 3 0 Ontario Ontario 0 0 0 0 2441.93687 8673 13946 3 0 Ontario Ontario 0 0 0 0 541.56920 8674 13958 3 0 Ontario Ontario 0 0 0 0 251.54021 8675 138412 3 0 Ontario Ontario 0 0 0 0 816.75933 8676 139613 3 0 Ontario Ontario 0 0 0 0 521.04512 8677 13971 3 0 Ontario Ontario 0 0 0 0 1253.26982 8678 140020 3 0 Ontario Ontario 0 0 0 0 996.25342 8679 140249 3 0 Ontario Ontario 0 0 0 0 543.99018 8680 140349 3 0 Ontario Ontario 0 0 0 0 1409.65120 8681 140412 3 0 Ontario Ontario 0 0 0 0 1453.66991 8682 140518 3 0 Ontario Ontario 0 0 0 0 1558.02849 8683 13981 3 0 Ontario Ontario 0 0 0 0 740.28684 8684 13991 3 0 Ontario Ontario 0 0 0 0 2168.90738 8685 140613 3 0 Ontario Ontario 0 0 0 0 1131.27699 8686 140713 3 0 Ontario Ontario 0 0 0 0 3955.60004 8687 140814 3 0 Ontario Ontario 0 0 0 0 787.63247 8688 14091 3 0 Ontario Ontario 0 0 0 0 703.68286 8689 141059 3 0 Ontario Ontario 0 0 0 0 553.61075 8690 14111 3 0 Ontario Ontario 0 0 0 0 1426.40154 8691 141254 3 0 Ontario Ontario 0 0 0 0 2031.03336 8692 141341 3 0 Ontario Ontario 0 0 0 0 197.48469 8693 141429 2 0 Ontario Ontario 0 0 0 0 651.42616 8694 14176 3 0 Ontario Ontario 0 0 0 0 630.76220 8695 141813 3 0 Ontario Ontario 0 0 0 0 989.11477 8696 14196 3 0 Ontario Ontario 0 0 0 0 417.97731 8698 142317 2 1 Ontario Ontario 0 0 0 0 469.02507 8699 1424 3 0 Ontario Ontario 0 0 0 0 444.22049 8700 142559 3 0 Ontario Ontario 0 0 0 0 657.40748 8701 142649 3 0 Ontario Ontario 0 0 0 0 1292.20055 8702 142749 3 0 Ontario Ontario 0 0 0 0 487.32413 8703 142814 3 0 Ontario Ontario 0 0 0 0 1354.11227 8705 142920 3 0 Ontario Ontario 0 0 0 0 2174.81362 8706 143029 3 0 Ontario Ontario 0 0 0 0 1655.36555 8707 143144 3 0 Ontario Ontario 0 0 0 0 2507.16293 8708 1432138 2 0 Ontario Ontario 0 0 0 0 2050.51057 8709 143318 3 0 Ontario Ontario 0 0 0 0 3873.49982 8710 143619 3 0 Ontario Ontario 0 0 0 0 1976.95192 8711 1437 3 0 Ontario Ontario 0 0 0 0 1559.29317 8712 143844 3 0 Ontario Ontario 0 0 0 0 1770.94920 8713 143961 3 0 Ontario Ontario 0 0 0 0 1425.24043 8714 14408 3 0 Ontario Ontario 0 0 0 0 1083.41075 8715 144117 2 1 Ontario Ontario 0 0 0 0 918.67182 8716 144229 2 0 Ontario Ontario 0 0 0 0 1513.37375 8717 144422 3 0 Ontario Ontario 0 0 0 0 3844.25211 8718 144517 2 1 Ontario Ontario 0 0 0 0 4079.48027 8719 1446417 1 1 Ontario Ontario 0 0 0 0 692.37575 8720 144749 3 0 Ontario Ontario 0 0 0 0 1439.67260 8721 145620 3 0 Ontario Ontario 0 0 0 0 7342.75065 8722 144843 2 0 Ontario Ontario 0 0 0 0 1437.11654 8723 144912 3 0 Ontario Ontario 0 0 0 0 491.46069 8724 145044 3 0 Ontario Ontario 0 0 0 0 939.45320 8725 4041 3 0 Ontario Ontario 0 0 0 0 5812.58454 8726 14675 3 0 Ontario Ontario 0 0 0 0 122.43233 8727 145249 3 0 Ontario Ontario 0 0 0 0 2787.72158 8728 145315 3 0 Ontario Ontario 0 0 0 0 1055.88663 8729 14546 3 0 Ontario Ontario 0 0 0 0 1068.65268 8730 14556 3 0 Ontario Ontario 0 0 0 0 1531.94672 8733 1459 3 0 Ontario Ontario 0 0 0 0 736.09326 8734 146020 3 0 Ontario Ontario 0 0 0 0 4420.72717 8735 14619 3 0 Ontario Ontario 0 0 0 0 2126.47295 8736 146232 3 0 Ontario Ontario 0 0 0 0 1069.31971 8737 146311 3 0 Ontario Ontario 0 0 0 0 2342.14961 8738 146436 3 0 Ontario Ontario 0 0 0 0 1670.42705 8739 14666 3 0 Ontario Ontario 0 0 0 0 347.59454 8741 149244 3 0 Ontario Ontario 0 0 0 0 2973.17152 8744 2446 3 0 Ontario Ontario 0 0 0 0 414.77908 8745 147115 3 0 Ontario Ontario 0 0 0 0 639.81486 8746 4040 3 0 Ontario Ontario 0 0 0 0 1392.07484 8747 147354 3 0 Ontario Ontario 0 0 0 0 2110.87098 8748 147412 3 0 Ontario Ontario 0 0 0 0 2070.00124 8749 147513 3 0 Ontario Ontario 0 0 0 0 1559.28065 8750 147618 3 0 Ontario Ontario 0 0 0 0 897.90913 8751 147718 3 0 Ontario Ontario 0 0 0 0 1670.99344 8752 14852 3 0 Ontario Ontario 0 0 0 0 2163.98083 8753 147825 3 0 Ontario Ontario 0 0 0 0 2575.99536 8754 147917 2 1 Ontario Ontario 0 0 0 0 697.57277 8756 14818 3 0 Ontario Ontario 0 0 0 0 3168.24429 8757 148417 2 1 Ontario Ontario 0 0 0 0 181.70391 8758 148325 3 0 Ontario Ontario 0 0 0 0 2253.50767 8759 147215 3 0 Ontario Ontario 0 0 0 0 1249.66999 8760 148619 3 0 Ontario Ontario 0 0 0 0 278.13681 8763 16842 3 0 Ontario Ontario 0 0 0 0 1338.53643 8764 14876 3 0 Ontario Ontario 0 0 0 0 1846.13336 8765 148836 3 0 Ontario Ontario 0 0 0 0 2101.80219 8766 148941 3 0 Ontario Ontario 0 0 0 0 851.82787 8767 149049 3 0 Ontario Ontario 0 0 0 0 1552.64372 8768 149149 3 0 Ontario Ontario 0 0 0 0 52.45326 8769 155249 3 0 Ontario Ontario 0 0 0 0 1817.53258 8770 15535 3 0 Ontario Ontario 0 0 0 0 2017.96734 8771 14936 3 0 Ontario Ontario 0 0 0 0 9023.27955 8772 149431 2 0 Ontario Ontario 0 0 0 0 6412.79902 8773 149660 2 0 Ontario Ontario 0 0 0 0 961.02338 8775 149832 3 0 Ontario Ontario 0 0 0 0 1444.98066 8776 149959 3 0 Ontario Ontario 0 0 0 0 907.02923 8777 15006 3 0 Ontario Ontario 0 0 0 0 8924.34564 8778 15272 3 0 Ontario Ontario 0 0 0 0 211.94421 8779 152844 3 0 Ontario Ontario 0 0 0 0 1510.45443 8780 150112 3 0 Ontario Ontario 0 0 0 0 571.31224 8781 4142 3 0 Ontario Ontario 0 0 0 0 1900.70195 8782 1503 3 0 Ontario Ontario 0 0 0 0 2849.32764 8783 15046 3 0 Ontario Ontario 0 0 0 0 480.77082 8784 150519 3 0 Ontario Ontario 0 0 0 0 2068.64046 8785 1506138 2 0 Ontario Ontario 0 0 0 0 2053.91031 8786 148214 3 0 Ontario Ontario 0 0 0 0 633.50777 8787 152445 3 0 Ontario Ontario 0 0 0 0 2000.70144 8788 150829 3 0 Ontario Ontario 0 0 0 0 37985.11369 8789 7264132 2 0 Quebec Qubec 0 0 0 0 4103.06934 8790 1509401 1 0 Ontario Ontario 0 0 0 0 140.70456 8791 1510 3 0 Ontario Ontario 0 0 0 0 1389.60142 8792 151222 3 0 Ontario Ontario 0 0 0 0 3508.05604 8793 1513 3 0 Ontario Ontario 0 0 0 0 2514.27151 8794 151413 3 0 Ontario Ontario 0 0 0 0 1364.43898 8795 15156 3 0 Ontario Ontario 0 0 0 0 1572.79152 8796 4039 3 0 Ontario Ontario 0 0 0 0 273.66139 8798 1516 3 0 Ontario Ontario 0 0 0 0 1610.82430 8799 4098 3 0 Ontario Ontario 0 0 0 0 2942.74389 8800 151718 3 0 Ontario Ontario 0 0 0 0 1457.22060 8801 151815 3 0 Ontario Ontario 0 0 0 0 826.44275 8802 15216 3 0 Ontario Ontario 0 0 0 0 2584.01041 8803 152217 2 1 Ontario Ontario 0 0 0 0 509.43437 8804 1525138 2 0 Ontario Ontario 0 0 0 0 1737.64345 8805 15269 3 0 Ontario Ontario 0 0 0 0 831.69424 8806 15296 3 0 Ontario Ontario 0 0 0 0 976.45425 8807 153041 3 0 Ontario Ontario 0 0 0 0 2934.34368 8808 153119 3 0 Ontario Ontario 0 0 0 0 1329.32934 8809 15328 3 0 Ontario Ontario 0 0 0 0 1816.02453 8810 153436 3 0 Ontario Ontario 0 0 0 0 997.90786 8811 153549 3 0 Ontario Ontario 0 0 0 0 749.14439 8812 4044 3 0 Ontario Ontario 0 0 0 0 1439.36298 8813 153660 2 0 Ontario Ontario 0 0 0 0 1838.58615 8814 154620 3 0 Ontario Ontario 0 0 0 0 7716.81256 8815 154760 2 0 Ontario Ontario 0 0 0 0 1026.37795 8817 153736 3 0 Ontario Ontario 0 0 0 0 10711.23047 8818 153817 2 1 Ontario Ontario 0 0 0 0 1465.99844 8819 153954 3 0 Ontario Ontario 0 0 0 0 341.08413 8820 4095 3 0 Ontario Ontario 0 0 0 0 1463.03338 8821 154245 3 0 Ontario Ontario 0 0 0 0 504.19269 8822 15436 3 0 Ontario Ontario 0 0 0 0 574.80065 8823 1545138 2 0 Ontario Ontario 0 0 0 0 365.54550 8824 154760 2 0 Ontario Ontario 0 0 0 0 1675.48319 8825 1549 3 0 Ontario Ontario 0 0 0 0 139.42275 8826 155036 3 0 Ontario Ontario 0 0 0 0 1223.56890 8827 155249 3 0 Ontario Ontario 0 0 0 0 1423.36711 8828 155412 3 0 Ontario Ontario 0 0 0 0 2499.56690 8829 1555401 1 0 Ontario Ontario 0 0 0 0 177.44763 8830 1556138 2 0 Ontario Ontario 0 0 0 0 2039.18483 8831 155820 3 0 Ontario Ontario 0 0 0 0 2090.50405 8832 155912 3 0 Ontario Ontario 0 0 0 0 2398.32481 8833 4096 3 0 Ontario Ontario 0 0 0 0 1110.04775 8834 4101 3 0 Ontario Ontario 0 0 0 0 1456.34772 8835 156112 3 0 Ontario Ontario 0 0 0 0 423.90128 8836 4046 3 0 Ontario Ontario 0 0 0 0 785.91072 8837 156319 3 0 Ontario Ontario 0 0 0 0 292.06470 8838 1565 3 0 Ontario Ontario 0 0 0 0 2269.58220 8839 160817 2 1 Ontario Ontario 0 0 0 0 3790.06939 8840 377463 3 0 Ontario Ontario 0 0 0 0 352.72660 8841 15676 3 0 Ontario Ontario 0 0 0 0 1532.61921 8842 15687 3 0 Ontario Ontario 0 0 0 0 2244.74157 8843 156913 3 0 Ontario Ontario 0 0 0 0 1242.66615 8844 1570401 1 0 Ontario Ontario 0 0 0 0 205.90520 8845 157119 3 0 Ontario Ontario 0 0 0 0 1913.77366 8846 1572401 1 0 Ontario Ontario 0 0 0 0 223.96328 8847 1573 3 0 Ontario Ontario 0 0 0 0 1981.88072 8848 1574401 1 0 Ontario Ontario 0 0 0 0 2832.65948 8849 157541 3 0 Ontario Ontario 0 0 0 0 899.64007 8850 157641 3 0 Ontario Ontario 0 0 0 0 1144.20673 8851 157860 2 0 Ontario Ontario 0 0 0 0 416.80373 8852 157912 3 0 Ontario Ontario 0 0 0 0 4197.82437 8853 154073 2 0 Ontario Ontario 0 0 0 0 1882.86310 8854 153315 3 0 Ontario Ontario 0 0 0 0 2781.31756 8855 15806 3 0 Ontario Ontario 0 0 0 0 207.63816 8856 158113 3 0 Ontario Ontario 0 0 0 0 1390.46603 8857 158222 3 0 Ontario Ontario 0 0 0 0 1362.77086 8858 15839 3 0 Ontario Ontario 0 0 0 0 1127.10116 8859 15848 3 0 Ontario Ontario 0 0 0 0 1905.91227 8860 158545 3 0 Ontario Ontario 0 0 0 0 597.05300 8861 158760 2 0 Ontario Ontario 0 0 0 0 1538.85638 8862 1588 3 0 Ontario Ontario 0 0 0 0 1430.40087 8863 15896 3 0 Ontario Ontario 0 0 0 0 1801.13366 8864 159015 3 0 Ontario Ontario 0 0 0 0 956.97690 8865 4093 3 0 Ontario Ontario 0 0 0 0 2441.79502 8866 4092 3 0 Ontario Ontario 0 0 0 0 299.07068 8867 159222 3 0 Ontario Ontario 0 0 0 0 4299.11545 8868 159329 2 0 Ontario Ontario 0 0 0 0 2125.63184 8869 159412/14 3 0 Ontario Ontario 0 0 0 0 2035.90829 8870 1596 3 0 Ontario Ontario 0 0 0 0 1547.31907 8871 159760 2 0 Ontario Ontario 0 0 0 0 191.12914 8872 159860 2 0 Ontario Ontario 0 0 0 0 2074.72585 8873 15994 3 0 Ontario Ontario 0 0 0 0 1411.86506 8875 183154 3 0 Ontario Ontario 0 0 0 0 1467.86406 8876 377463 3 0 Ontario Ontario 0 0 0 0 1038.67898 8878 4045 3 0 Ontario Ontario 0 0 0 0 3233.47007 8879 4141 3 0 Ontario Ontario 0 0 0 0 628.81754 8880 16009 3 0 Ontario Ontario 0 0 0 0 1351.37032 8881 162412 3 0 Ontario Ontario 0 0 0 0 1330.77748 8882 160149 3 0 Ontario Ontario 0 0 0 0 1271.82793 8883 160212 3 0 Ontario Ontario 0 0 0 0 1378.46514 8885 160320 3 0 Ontario Ontario 0 0 0 0 6271.38890 8886 160417 2 1 Ontario Ontario 0 0 0 0 1298.45526 8887 160519 3 0 Ontario Ontario 0 0 0 0 1408.90228 8888 1606 3 0 Ontario Ontario 0 0 0 0 1544.31381 8889 16077 3 0 Ontario Ontario 0 0 0 0 8204.69064 8890 160817 2 1 Ontario Ontario 0 0 0 0 1918.11396 8891 160936 3 0 Ontario Ontario 0 0 0 0 1917.93028 8892 161019 3 0 Ontario Ontario 0 0 0 0 1430.34139 8893 161236 3 0 Ontario Ontario 0 0 0 0 800.01128 8894 16614 3 0 Ontario Ontario 0 0 0 0 6189.35404 8895 1101 4 0 Ontario Ontario 0 0 0 0 3876.83402 8896 1630 3 0 Ontario Ontario 0 0 0 0 954.32028 8897 1631 3 0 Ontario Ontario 0 0 0 0 863.67251 8898 161629 2 0 Ontario Ontario 0 0 0 0 3905.30077 8899 16492 3 0 Ontario Ontario 0 0 0 0 205.66238 8900 1631 3 0 Ontario Ontario 0 0 0 0 1392.92722 8901 161745 3 0 Ontario Ontario 0 0 0 0 5440.08452 8902 1618 3 0 Ontario Ontario 0 0 0 0 2062.26785 8903 159113 3 0 Ontario Ontario 0 0 0 0 2566.39672 8904 161912 3 0 Ontario Ontario 0 0 0 0 1331.99084 8906 162112/14 3 0 Ontario Ontario 0 0 0 0 676.11613 8907 162212 3 0 Ontario Ontario 0 0 0 0 2759.44356 8908 162359 3 0 Ontario Ontario 0 0 0 0 4245.98132 8909 162511 3 0 Ontario Ontario 0 0 0 0 1712.94177 8910 162652 3 0 Ontario Ontario 0 0 0 0 3856.72348 8911 162725 3 0 Ontario Ontario 0 0 0 0 1600.27191 8912 162873 2 0 Ontario Ontario 0 0 0 0 1068.40374 8913 162913 3 0 Ontario Ontario 0 0 0 0 623.74309 8914 163312 3 0 Ontario Ontario 0 0 0 0 2851.65637 8915 1634138 2 0 Ontario Ontario 0 0 0 0 1900.13315 8916 16378 3 0 Ontario Ontario 0 0 0 0 239.11709 8917 162913 3 0 Ontario Ontario 0 0 0 0 2047.85533 8919 164115 3 0 Ontario Ontario 0 0 0 0 415.95481 8920 164225 3 0 Ontario Ontario 0 0 0 0 3794.48424 8921 164313 3 0 Ontario Ontario 0 0 0 0 1950.21395 8922 16456 3 0 Ontario Ontario 0 0 0 0 3737.14079 8925 1647401 1 0 Ontario Ontario 0 0 0 0 139.22273 8926 164815 3 0 Ontario Ontario 0 0 0 0 222.47714 8927 163613 3 0 Ontario Ontario 0 0 0 0 1347.00069 8928 16517 3 0 Ontario Ontario 0 0 0 0 752.01280 8929 165459 3 0 Ontario Ontario 0 0 0 0 3215.12200 8932 165749 3 0 Ontario Ontario 0 0 0 0 3247.23501 8933 165818 3 0 Ontario Ontario 0 0 0 0 1341.34873 8934 165949 3 0 Ontario Ontario 0 0 0 0 1225.43121 8935 166052 3 0 Ontario Ontario 0 0 0 0 1322.30002 8936 16614 3 0 Ontario Ontario 0 0 0 0 1395.14476 8939 166420 3 0 Ontario Ontario 0 0 0 0 6305.87240 8940 1715 3 0 Ontario Ontario 0 0 0 0 1047.26464 8941 166512 3 0 Ontario Ontario 0 0 0 0 718.23433 8942 16662 3 0 Ontario Ontario 0 0 0 0 710.16650 8943 166313 3 0 Ontario Ontario 0 0 0 0 792.10302 8945 16688 3 0 Ontario Ontario 0 0 0 0 2393.44117 8946 166919 3 0 Ontario Ontario 0 0 0 0 2052.56262 8947 16709 3 0 Ontario Ontario 0 0 0 0 7386.90253 8948 377463 3 0 Ontario Ontario 0 0 0 0 1360.94835 8949 167122 3 0 Ontario Ontario 0 0 0 0 2898.07134 8950 16722 3 0 Ontario Ontario 0 0 0 0 1962.42795 8951 1673 3 0 Ontario Ontario 0 0 0 0 3342.02066 8952 1674132 2 0 Ontario Ontario 0 0 0 0 2426.40996 8953 1694 3 0 Ontario Ontario 0 0 0 0 347.24020 8954 16952 3 0 Ontario Ontario 0 0 0 0 2403.83138 8957 16992 3 0 Ontario Ontario 0 0 0 0 303.08133 8958 16952 3 0 Ontario Ontario 0 0 0 0 791.44188 8959 167849 3 0 Ontario Ontario 0 0 0 0 1952.11971 8960 167986 3 0 Ontario Ontario 0 0 0 0 1059.80264 8961 168049 3 0 Ontario Ontario 0 0 0 0 1973.18809 8962 168114 3 0 Ontario Ontario 0 0 0 0 2074.46265 8964 168312 3 0 Ontario Ontario 0 0 0 0 2590.93086 8965 16852 3 0 Ontario Ontario 0 0 0 0 4812.85134 8966 16842 3 0 Ontario Ontario 0 0 0 0 1530.32566 8968 16887 3 0 Ontario Ontario 0 0 0 0 2374.58208 8969 168936 3 0 Ontario Ontario 0 0 0 0 1747.16555 8970 169015 3 0 Ontario Ontario 0 0 0 0 1117.79434 8971 169112 3 0 Ontario Ontario 0 0 0 0 1391.01213 8972 169259 3 0 Ontario Ontario 0 0 0 0 406.76862 8973 169349 3 0 Ontario Ontario 0 0 0 0 575.90741 8974 16952 3 0 Ontario Ontario 0 0 0 0 8584.79468 8975 1696417 1 0 Ontario Ontario 0 0 0 0 2737.01742 8976 4048 3 0 Ontario Ontario 0 0 0 0 1102.01526 8979 1722 3 0 Ontario Ontario 0 0 0 0 6827.65242 8980 169617 2 1 Ontario Ontario 0 0 0 0 2299.62429 8981 169711 3 0 Ontario Ontario 0 0 0 0 455.47310 8984 169814 3 0 Ontario Ontario 0 0 0 0 266.66677 8985 17002 3 0 Ontario Ontario 0 0 0 0 1322.21117 8986 17048 3 0 Ontario Ontario 0 0 0 0 2723.92876 8987 170336 3 0 Ontario Ontario 0 0 0 0 6805.53035 8988 1724417 1 1 Ontario Ontario 0 0 0 0 7969.97653 8989 16155 3 0 Ontario Ontario 0 0 0 0 145.79283 8990 170336 3 0 Ontario Ontario 0 0 0 0 1597.89968 8992 170618 3 0 Ontario Ontario 0 0 0 0 251.90507 8993 17658 3 0 Ontario Ontario 0 0 0 0 1996.04668 8994 170113 3 0 Ontario Ontario 0 0 0 0 7941.15811 8995 170743 2 0 Ontario Ontario 0 0 0 0 2214.10557 8996 1742 3 0 Ontario Ontario 0 0 0 0 1398.41128 8997 171022 3 0 Ontario Ontario 0 0 0 0 304.22153 8998 1743 3 0 Ontario Ontario 0 0 0 0 653.57474 8999 1744 3 0 Ontario Ontario 0 0 0 0 315.44786 9001 171236 3 0 Ontario Ontario 0 0 0 0 2130.38939 9002 17134 3 0 Ontario Ontario 0 0 0 0 6252.31398 9003 171431 2 0 Ontario Ontario 0 0 0 0 3102.08581 9004 17153 3 0 Ontario Ontario 0 0 0 0 2298.86611 9005 1716132 2 0 Ontario Ontario 0 0 0 0 3611.27825 9006 1718 3 0 Ontario Ontario 0 0 0 0 2662.20028 9007 1720401 1 0 Ontario Ontario 0 0 0 0 138.43835 9008 1721 3 0 Ontario Ontario 0 0 0 0 3140.94044 9009 172352 3 0 Ontario Ontario 0 0 0 0 456.00439 9010 1724417 1 1 Ontario Ontario 0 0 0 0 3914.42157 9011 17263 3 0 Ontario Ontario 0 0 0 0 705.52550 9012 170513 3 0 Ontario Ontario 0 0 0 0 603.85997 9013 17275 3 0 Ontario Ontario 0 0 0 0 2026.15425 9014 17289 3 0 Ontario Ontario 0 0 0 0 1164.88778 9015 17297 3 0 Ontario Ontario 0 0 0 0 2655.64076 9016 17326 3 0 Ontario Ontario 0 0 0 0 2264.41040 9017 173325 3 0 Ontario Ontario 0 0 0 0 1351.13085 9018 17345 3 0 Ontario Ontario 0 0 0 0 2969.66440 9020 17372 3 0 Ontario Ontario 0 0 0 0 1196.38274 9021 170915 3 0 Ontario Ontario 0 0 0 0 2385.94193 9022 17405 3 0 Ontario Ontario 0 0 0 0 1074.46338 9023 17415 3 0 Ontario Ontario 0 0 0 0 1460.05058 9024 17545 3 0 Ontario Ontario 0 0 0 0 881.40943 9026 174552 3 0 Ontario Ontario 0 0 0 0 1382.08100 9027 17462 3 0 Ontario Ontario 0 0 0 0 1080.66742 9030 174918 3 0 Ontario Ontario 0 0 0 0 2124.04593 9031 175012 3 0 Ontario Ontario 0 0 0 0 503.46572 9032 17605 3 0 Ontario Ontario 0 0 0 0 871.56320 9033 175936 3 0 Ontario Ontario 0 0 0 0 7.87378 9034 17635 3 0 Ontario Ontario 0 0 0 0 3481.26684 9035 17515 3 0 Ontario Ontario 0 0 0 0 1096.19549 9036 17625A 3 0 Ontario Ontario 0 0 0 0 955.76614 9037 17635 3 0 Ontario Ontario 0 0 0 0 1958.21348 9038 175212 3 0 Ontario Ontario 0 0 0 0 1767.12790 9039 175349 3 0 Ontario Ontario 0 0 0 0 1393.55514 9040 175511 3 0 Ontario Ontario 0 0 0 0 2035.06792 9041 1758 3 0 Ontario Ontario 0 0 0 0 459.68785 9042 175936 3 0 Ontario Ontario 0 0 0 0 1195.37418 9044 17617 3 0 Ontario Ontario 0 0 0 0 1995.26168 9045 176411 3 0 Ontario Ontario 0 0 0 0 1808.90500 9046 17658 3 0 Ontario Ontario 0 0 0 0 210.45453 9047 17667 3 0 Ontario Ontario 0 0 0 0 1471.99103 9048 176720 3 0 Ontario Ontario 0 0 0 0 174.04225 9049 17698 3 0 Ontario Ontario 0 0 0 0 630.26710 9050 177111 3 0 Ontario Ontario 0 0 0 0 5947.39821 9051 1772417 1 0 Ontario Ontario 0 0 0 0 1451.72763 9052 1773417 1 1 Ontario Ontario 0 0 0 0 1494.51397 9053 17746 3 0 Ontario Ontario 0 0 0 0 1871.04133 9054 17753 3 0 Ontario Ontario 0 0 0 0 235.19236 9055 18218 3 0 Ontario Ontario 0 0 0 0 3276.46526 9056 177073 2 0 Ontario Ontario 0 0 0 0 2668.70315 9057 17792 3 0 Ontario Ontario 0 0 0 0 153.97580 9058 17766 3 0 Ontario Ontario 0 0 0 0 3161.85602 9059 177720 3 0 Ontario Ontario 0 0 0 0 262.61573 9060 1778417 1 1 Ontario Ontario 0 0 0 0 807.82346 9061 1781 3 0 Ontario Ontario 0 0 0 0 2085.57884 9062 17824 3 0 Ontario Ontario 0 0 0 0 153.19852 9063 17847 2 1 Ontario Ontario 0 0 0 0 4867.63971 9065 178513 3 0 Ontario Ontario 0 0 0 0 3280.09038 9066 17863 3 0 Ontario Ontario 0 0 0 0 1351.41528 9067 17872 3 0 Ontario Ontario 0 0 0 0 1515.20293 9068 1788417 1 0 Ontario Ontario 0 0 0 0 926.77362 9069 1789417 1 0 Ontario Ontario 0 0 0 0 200.36832 9070 179013 3 0 Ontario Ontario 0 0 0 0 1268.28851 9071 179149 3 0 Ontario Ontario 0 0 0 0 483.53713 9072 17922 3 0 Ontario Ontario 0 0 0 0 2174.17448 9073 1793 3 0 Ontario Ontario 0 0 0 0 1812.02686 9074 179412 3 0 Ontario Ontario 0 0 0 0 2551.74546 9075 179520 3 0 Ontario Ontario 0 0 0 0 2640.10826 9076 179614 3 0 Ontario Ontario 0 0 0 0 469.49235 9079 179912 3 0 Ontario Ontario 0 0 0 0 289.94423 9080 180020 3 0 Ontario Ontario 0 0 0 0 418.47462 9081 180220 3 0 Ontario Ontario 0 0 0 0 2999.29799 9082 1804401 1 0 Ontario Ontario 0 0 0 0 115.10437 9083 180512 3 0 Ontario Ontario 0 0 0 0 1316.94254 9084 180620 3 0 Ontario Ontario 0 0 0 0 127.14608 9085 180820 3 0 Ontario Ontario 0 0 0 0 6780.70381 9086 180129 2 0 Ontario Ontario 0 0 0 0 1592.94622 9087 180711 3 0 Ontario Ontario 0 0 0 0 2679.76967 9088 18235 3 0 Ontario Ontario 0 0 0 0 243.25065 9089 180820 3 0 Ontario Ontario 0 0 0 0 2694.49922 9090 180920 3 0 Ontario Ontario 0 0 0 0 2483.61657 9091 181025 3 0 Ontario Ontario 0 0 0 0 974.14349 9094 181349 3 0 Ontario Ontario 0 0 0 0 1353.09870 9095 18146 3 0 Ontario Ontario 0 0 0 0 4065.41741 9096 181543 2 0 Ontario Ontario 0 0 0 0 2569.99184 9097 18167 3 0 Ontario Ontario 0 0 0 0 2629.17944 9098 181718 3 0 Ontario Ontario 0 0 0 0 1770.57990 9099 18183 3 0 Ontario Ontario 0 0 0 0 2117.72355 9100 181920 3 0 Ontario Ontario 0 0 0 0 1160.33832 9101 182014 3 0 Ontario Ontario 0 0 0 0 1808.11000 9102 18218 3 0 Ontario Ontario 0 0 0 0 8830.72813 9103 1577416 1 0 Ontario Ontario 0 0 0 0 544.93598 9104 182411 3 0 Ontario Ontario 0 0 0 0 7359.42713 9105 1831508 2 0 Ontario Ontario 0 0 0 0 4418.22114 9106 183252 3 0 Ontario Ontario 0 0 0 0 2301.10194 9107 182511 3 0 Ontario Ontario 0 0 0 0 1516.99446 9109 1826 3 0 Ontario Ontario 0 0 0 0 2697.75214 9110 182712 3 0 Ontario Ontario 0 0 0 0 1984.37713 9112 18284 3 0 Ontario Ontario 0 0 0 0 421.26783 9113 18298 3 0 Ontario Ontario 0 0 0 0 562.81547 9116 183252 3 0 Ontario Ontario 0 0 0 0 743.90963 9117 18333 3 0 Ontario Ontario 0 0 0 0 660.35875 9118 183425 3 0 Ontario Ontario 0 0 0 0 922.74762 9119 18356 3 0 Ontario Ontario 0 0 0 0 2005.85168 9120 18367 2 1 Ontario Ontario 0 0 0 0 1807.89533 9121 183712 3 0 Ontario Ontario 0 0 0 0 2363.55595 9122 183813 3 0 Ontario Ontario 0 0 0 0 7712.39497 9123 183931 2 0 Ontario Ontario 0 0 0 0 3408.25306 9124 18432 3 0 Ontario Ontario 0 0 0 0 1402.54686 9125 187052 3 0 Ontario Ontario 0 0 0 0 3440.70638 9126 184036 3 0 Ontario Ontario 0 0 0 0 2566.41202 9127 18412 3 0 Ontario Ontario 0 0 0 0 199.94504 9128 184212 3 0 Ontario Ontario 0 0 0 0 1577.84173 9129 184420 3 0 Ontario Ontario 0 0 0 0 1456.91658 9130 18485 3 0 Ontario Ontario 0 0 0 0 569.50789 9131 184525 3 0 Ontario Ontario 0 0 0 0 1286.29269 9132 184652 3 0 Ontario Ontario 0 0 0 0 1606.21090 9133 184711 3 0 Ontario Ontario 0 0 0 0 4202.32782 9134 18493 3 0 Ontario Ontario 0 0 0 0 2993.78854 9135 185014 3 0 Ontario Ontario 0 0 0 0 8573.60494 9136 185119 3 0 Ontario Ontario 0 0 0 0 2860.82805 9138 185273 2 0 Ontario Ontario 0 0 0 0 1956.23687 9139 1853416 1 0 Ontario Ontario 0 0 0 0 2137.75494 9140 18547 3 0 Ontario Ontario 0 0 0 0 2179.60150 9141 185518 3 0 Ontario Ontario 0 0 0 0 351.74756 9142 185614 3 0 Ontario Ontario 0 0 0 0 236.34203 9143 1853416 1 0 Ontario Ontario 0 0 0 0 227.97865 9144 185273 3 0 Ontario Ontario 0 0 0 0 1826.78900 9145 18578 3 0 Ontario Ontario 0 0 0 0 1975.37389 9146 185811 3 0 Ontario Ontario 0 0 0 0 1663.66368 9147 187312 3 0 Ontario Ontario 0 0 0 0 1546.49996 9148 18745 3 0 Ontario Ontario 0 0 0 0 3493.72341 9149 187217 3 0 Ontario Ontario 0 0 0 0 1984.48936 9151 18604 3 0 Ontario Ontario 0 0 0 0 1972.90489 9152 18613 3 0 Ontario Ontario 0 0 0 0 1381.25814 9153 186220 3 0 Ontario Ontario 0 0 0 0 2481.88665 9154 186323 3 0 Ontario Ontario 0 0 0 0 1580.36807 9155 186420 3 0 Ontario Ontario 0 0 0 0 993.61610 9156 186520 3 0 Ontario Ontario 0 0 0 0 440.41334 9157 18678 3 0 Ontario Ontario 0 0 0 0 201.59327 9159 18713 3 0 Ontario Ontario 0 0 0 0 1422.64705 9160 4354 3 0 Ontario Ontario 0 0 0 0 448.29060 9161 187312 3 0 Ontario Ontario 0 0 0 0 1301.97720 9163 187518 3 0 Ontario Ontario 0 0 0 0 1753.29123 9164 18763 3 0 Ontario Ontario 0 0 0 0 868.08768 9165 187719 3 0 Ontario Ontario 0 0 0 0 1220.07450 9166 187814 3 0 Ontario Ontario 0 0 0 0 753.35365 9167 187911 3 0 Ontario Ontario 0 0 0 0 1362.55321 9168 18885 3 0 Ontario Ontario 0 0 0 0 2539.82887 9169 1880 3 0 Ontario Ontario 0 0 0 0 3354.19004 9170 188149 3 0 Ontario Ontario 0 0 0 0 2298.70613 9171 18826 3 0 Ontario Ontario 0 0 0 0 232.81893 9172 18876 3 0 Ontario Ontario 0 0 0 0 380.81912 9173 188419 3 0 Ontario Ontario 0 0 0 0 117.87273 9174 18876 3 0 Ontario Ontario 0 0 0 0 950.95736 9175 18856 3 0 Ontario Ontario 0 0 0 0 2240.48153 9176 1886 3 0 Ontario Ontario 0 0 0 0 1302.96614 9177 188918 3 0 Ontario Ontario 0 0 0 0 7660.63587 9178 189049 2 0 Ontario Ontario 0 0 0 0 1317.14812 9179 18913 3 0 Ontario Ontario 0 0 0 0 1368.25628 9180 18933 3 0 Ontario Ontario 0 0 0 0 2442.54051 9181 189411 3 0 Ontario Ontario 0 0 0 0 1962.18739 9182 189511 3 0 Ontario Ontario 0 0 0 0 674.01907 9185 189810 3 0 Ontario Ontario 0 0 0 0 6569.74990 9188 1900132 2 0 Ontario Ontario 0 0 0 0 865.88496 9189 190149 3 0 Ontario Ontario 0 0 0 0 413.46084 9190 19023 3 0 Ontario Ontario 0 0 0 0 1435.69725 9191 190411 3 0 Ontario Ontario 0 0 0 0 3023.61197 9192 191217 3 0 Ontario Ontario 0 0 0 0 1902.17962 9193 18998 3 0 Ontario Ontario 0 0 0 0 1962.07091 9194 19067 3 0 Ontario Ontario 0 0 0 0 1049.85144 9195 190814 3 0 Ontario Ontario 0 0 0 0 2641.19496 9196 19098 3 0 Ontario Ontario 0 0 0 0 1377.29814 9197 19035 3 0 Ontario Ontario 0 0 0 0 173.72684 9198 191114 3 0 Ontario Ontario 0 0 0 0 5598.50345 9199 1913401 1 0 Ontario Ontario 0 0 0 0 135.45903 9200 191414 3 0 Ontario Ontario 0 0 0 0 731.24339 9202 191649 3 0 Ontario Ontario 0 0 0 0 628.94810 9203 192117 3 0 Ontario Ontario 0 0 0 0 3973.90681 9204 19202 3 0 Ontario Ontario 0 0 0 0 680.46130 9205 19386 3 0 Ontario Ontario 0 0 0 0 1031.10120 9206 191710 3 0 Ontario Ontario 0 0 0 0 723.27556 9207 19198 3 0 Ontario Ontario 0 0 0 0 514.29847 9208 19202 3 0 Ontario Ontario 0 0 0 0 1662.12062 9209 192319 3 0 Ontario Ontario 0 0 0 0 1279.06236 9210 19185 3 0 Ontario Ontario 0 0 0 0 332.93109 9211 196310 3 0 Ontario Ontario 0 0 0 0 39.30733 9212 19315 3 0 Ontario Ontario 0 0 0 0 2158.21985 9213 1924 3 0 Ontario Ontario 0 0 0 0 2329.12881 9216 192518 3 0 Ontario Ontario 0 0 0 0 1123.25319 9217 192611 3 0 Ontario Ontario 0 0 0 0 1863.86074 9218 19273 3 0 Ontario Ontario 0 0 0 0 5628.57801 9219 192831 2 0 Ontario Ontario 0 0 0 0 3787.28488 9220 1852 3 0 Ontario Ontario 0 0 0 0 821.72521 9221 19298 3 0 Ontario Ontario 0 0 0 0 3648.86028 9222 19304 3 0 Ontario Ontario 0 0 0 0 3906.41606 9223 193725 3 0 Ontario Ontario 0 0 0 0 3171.55958 9224 4352 3 0 Ontario Ontario 0 0 0 0 1128.67877 9225 19352 3 0 Ontario Ontario 0 0 0 0 1764.80901 9226 193614 3 0 Ontario Ontario 0 0 0 0 2095.67943 9227 19338 3 0 Ontario Ontario 0 0 0 0 1215.71634 9228 193449 3 0 Ontario Ontario 0 0 0 0 1125.62531 9229 19386 3 0 Ontario Ontario 0 0 0 0 1537.39347 9231 194617 3 0 Ontario Ontario 0 0 0 0 2362.74684 9232 193938 3 0 Ontario Ontario 0 0 0 0 1358.25783 9233 19315 3 0 Ontario Ontario 0 0 0 0 669.33700 9234 19404 3 0 Ontario Ontario 0 0 0 0 4381.12163 9235 19413 3 0 Ontario Ontario 0 0 0 0 799.04467 9236 19428 3 0 Ontario Ontario 0 0 0 0 10880.86603 9237 194343 2 0 Ontario Ontario 0 0 0 0 560.46068 9238 194431 2 0 Ontario Ontario 0 0 0 0 1130.85773 9242 195019 3 0 Ontario Ontario 0 0 0 0 1131.86573 9243 1949 3 0 Ontario Ontario 0 0 0 0 413.36190 9244 195517 3 0 Ontario Ontario 0 0 0 0 1195.91724 9245 194718 3 0 Ontario Ontario 0 0 0 0 2094.04010 9246 19517 3 0 Ontario Ontario 0 0 0 0 808.04457 9247 19526 3 0 Ontario Ontario 0 0 0 0 4120.47079 9248 195412 3 0 Ontario Ontario 0 0 0 0 127.07091 9249 19676 3 0 Ontario Ontario 0 0 0 0 6518.38692 9250 1953416 1 0 Ontario Ontario 0 0 0 0 386.24137 9251 195618 3 0 Ontario Ontario 0 0 0 0 1016.28123 9252 195718 3 0 Ontario Ontario 0 0 0 0 3417.04874 9253 195831 2 0 Ontario Ontario 0 0 0 0 664.04580 9254 19598 3 0 Ontario Ontario 0 0 0 0 366.18705 9255 19607 3 0 Ontario Ontario 0 0 0 0 2277.80947 9256 19625 3 0 Ontario Ontario 0 0 0 0 1783.57697 9257 196310 3 0 Ontario Ontario 0 0 0 0 2225.02970 9258 1948 4 0 Ontario Ontario 0 0 0 0 1840.10157 9259 19615 3 0 Ontario Ontario 0 0 0 0 1982.57634 9260 19645 3 0 Ontario Ontario 0 0 0 0 1730.31649 9261 19653 3 0 Ontario Ontario 0 0 0 0 1004.95628 9262 19665 3 0 Ontario Ontario 0 0 0 0 399.99736 9263 19685 3 0 Ontario Ontario 0 0 0 0 2323.62347 9264 1934 3 0 Ontario Ontario 0 0 0 0 1168.50018 9266 19676 3 0 Ontario Ontario 0 0 0 0 203.67403 9267 19685 3 0 Ontario Ontario 0 0 0 0 208.65793 9269 19705 3 0 Ontario Ontario 0 0 0 0 2072.32013 9270 197138 3 0 Ontario Ontario 0 0 0 0 1169.53253 9271 19695 3 0 Ontario Ontario 0 0 0 0 2165.79090 9272 19734 3 0 Ontario Ontario 0 0 0 0 816.17389 9273 19725 3 0 Ontario Ontario 0 0 0 0 1778.16428 9274 19747 3 0 Ontario Ontario 0 0 0 0 3322.87796 9275 19751 3 0 Ontario Ontario 0 0 0 0 3721.74897 9276 197643 2 0 Ontario Ontario 0 0 0 0 2984.46504 9277 4356 3 0 Ontario Ontario 0 0 0 0 541.70691 9278 19787 3 0 Ontario Ontario 0 0 0 0 5376.77509 9281 197949 2 0 Ontario Ontario 0 0 0 0 3457.11044 9283 198118 3 0 Ontario Ontario 0 0 0 0 3105.29798 9284 19823 3 0 Ontario Ontario 0 0 0 0 8081.05555 9286 19837 2 1 Ontario Ontario 0 0 0 0 997.35026 9287 19843 3 0 Ontario Ontario 0 0 0 0 1389.17598 9288 19854 3 0 Ontario Ontario 0 0 0 0 3371.06799 9289 198619 3 0 Ontario Ontario 0 0 0 0 3011.52183 9290 19875 3 0 Ontario Ontario 0 0 0 0 7231.68716 9291 190573 3 0 Ontario Ontario 0 0 0 0 86.07379 9292 19905 3 0 Ontario Ontario 0 0 0 0 2128.41497 9293 19886 3 0 Ontario Ontario 0 0 0 0 125.47703 9294 19905 3 0 Ontario Ontario 0 0 0 0 3458.59914 9295 19918 3 0 Ontario Ontario 0 0 0 0 1311.81870 9296 19921 3 0 Ontario Ontario 0 0 0 0 300.08879 9297 199319 3 0 Ontario Ontario 0 0 0 0 3060.59789 9298 199412 3 0 Ontario Ontario 0 0 0 0 1594.56523 9299 4371 3 0 Ontario Ontario 0 0 0 0 1460.22695 9300 19953 3 0 Ontario Ontario 0 0 0 0 5558.16872 9301 200034 4 0 Ontario Ontario 0 0 0 0 1091.61021 9303 200149 2 0 Ontario Ontario 0 0 0 0 5736.90936 9304 200217 3 0 Ontario Ontario 0 0 0 0 1314.07642 9305 19967 3 0 Ontario Ontario 0 0 0 0 5595.55155 9306 199831 2 0 Ontario Ontario 0 0 0 0 3073.30309 9307 199910 3 0 Ontario Ontario 0 0 0 0 376.90749 9309 200116 2 0 Ontario Ontario 0 0 0 0 646.35868 9310 20037 3 0 Ontario Ontario 0 0 0 0 1321.68690 9311 200445 3 0 Ontario Ontario 0 0 0 0 1366.96389 9312 20051 3 0 Ontario Ontario 0 0 0 0 753.66227 9313 20065 3 0 Ontario Ontario 0 0 0 0 3024.49486 9316 200717 3 0 Ontario Ontario 0 0 0 0 2153.84169 9317 20085 3 0 Ontario Ontario 0 0 0 0 1313.64197 9318 20103 3 0 Ontario Ontario 0 0 0 0 3618.11607 9319 200938 3 0 Ontario Ontario 0 0 0 0 523.00413 9320 20117 3 0 Ontario Ontario 0 0 0 0 829.61920 9321 201210 3 0 Ontario Ontario 0 0 0 0 2808.40362 9322 20133 3 0 Ontario Ontario 0 0 0 0 1927.45159 9325 20146 3 0 Ontario Ontario 0 0 0 0 4974.62187 9328 2016 4 0 Ontario Ontario 0 0 0 0 1887.97369 9329 20178 3 0 Ontario Ontario 0 0 0 0 1424.06127 9330 201845 3 0 Ontario Ontario 0 0 0 0 1382.93891 9332 20201 3 0 Ontario Ontario 0 0 0 0 1840.56117 9333 203119 3 0 Ontario Ontario 0 0 0 0 16299.09588 9334 173613 3 0 Ontario Ontario 0 0 0 0 1389.79864 9336 202116 2 0 Ontario Ontario 0 0 0 0 3162.44271 9338 4964 3 0 Ontario Ontario 0 0 0 0 1341.22171 9339 20253 3 0 Ontario Ontario 0 0 0 0 460.08783 9342 204616 2 0 Ontario Ontario 0 0 0 0 964.67309 9345 2023 4 0 Ontario Ontario 0 0 0 0 3084.64986 9346 202918 3 0 Ontario Ontario 0 0 0 0 1031.87101 9347 20308 3 0 Ontario Ontario 0 0 0 0 628.04722 9348 203119 3 0 Ontario Ontario 0 0 0 0 86.50201 9349 2033416 1 0 Ontario Ontario 0 0 0 0 1446.61720 9350 203445 3 0 Ontario Ontario 0 0 0 0 2002.44769 9353 20355 3 0 Ontario Ontario 0 0 0 0 3182.12283 9355 203717 3 0 Ontario Ontario 0 0 0 0 2284.25004 9356 20397 3 0 Ontario Ontario 0 0 0 0 4203.36967 9357 204031 2 0 Ontario Ontario 0 0 0 0 3205.02658 9358 204212 3 0 Ontario Ontario 0 0 0 0 1579.92782 9359 20433 3 0 Ontario Ontario 0 0 0 0 1683.12491 9361 20381 3 0 Ontario Ontario 0 0 0 0 886.06353 9365 204616 2 0 Ontario Ontario 0 0 0 0 2296.40111 9367 204710 3 0 Ontario Ontario 0 0 0 0 1375.44494 9368 204845 3 0 Ontario Ontario 0 0 0 0 826.73868 9370 205019 3 0 Ontario Ontario 0 0 0 0 2329.63735 9371 2051416 1 0 Ontario Ontario 0 0 0 0 1137.49406 9373 2053 4 0 Ontario Ontario 0 0 0 0 4215.51816 9374 20545 3 0 Ontario Ontario 0 0 0 0 15284.13721 9376 2045132 2 0 Ontario Ontario 0 0 0 0 1242.40237 9378 205817 3 0 Ontario Ontario 0 0 0 0 4880.56161 9379 205918 3 0 Ontario Ontario 0 0 0 0 3714.76152 9380 21057 2 1 Ontario Ontario 0 0 0 0 598.67652 9384 206117 3 0 Ontario Ontario 0 0 0 0 569.75685 9389 206511 3 0 Ontario Ontario 0 0 0 0 184.49376 9393 2065 3 0 Ontario Ontario 0 0 0 0 2152.37762 9396 20663 3 0 Ontario Ontario 0 0 0 0 919.07287 9400 20715 3 0 Ontario Ontario 0 0 0 0 2171.32368 9401 20678 3 0 Ontario Ontario 0 0 0 0 7463.02341 9402 206843 2 0 Ontario Ontario 0 0 0 0 2375.20916 9403 211043 2 0 Ontario Ontario 0 0 0 0 3383.70205 9404 20696 3 0 Ontario Ontario 0 0 0 0 1215.03658 9405 207017 3 0 Ontario Ontario 0 0 0 0 3179.35384 9413 2603 3 0 Ontario Ontario 0 0 0 0 2148.68192 9414 886 3 0 Ontario Ontario 0 0 0 0 1945.77672 9416 207510 3 0 Ontario Ontario 0 0 0 0 657.98865 9420 2607 3 0 Ontario Ontario 0 0 0 0 129.65975 9421 2273508 2 0 Ontario Ontario 0 0 0 0 809.30304 9422 20778 3 0 Ontario Ontario 0 0 0 0 2075.75245 9426 20803 3 0 Ontario Ontario 0 0 0 0 1204.10877 9427 20811 3 0 Ontario Ontario 0 0 0 0 3580.95105 9430 20835 3 0 Ontario Ontario 0 0 0 0 1067.70467 9431 208417 3 0 Ontario Ontario 0 0 0 0 1795.73527 9432 2085 3 0 Ontario Ontario 0 0 0 0 5155.53904 9435 20363 3 0 Ontario Ontario 0 0 0 0 222.34895 9436 20881 3 0 Ontario Ontario 0 0 0 0 2476.32852 9437 208918 3 0 Ontario Ontario 0 0 0 0 3696.05897 9438 209031 2 0 Ontario Ontario 0 0 0 0 562.38399 9445 21013 3 0 Ontario Ontario 0 0 0 0 1995.50067 9447 20975 3 0 Ontario Ontario 0 0 0 0 1264.20157 9448 209310 3 0 Ontario Ontario 0 0 0 0 1362.93527 9449 20943 3 0 Ontario Ontario 0 0 0 0 7688.70518 9455 209629 2 0 Ontario Ontario 0 0 0 0 2927.47638 9456 3942508 3 0 Ontario Ontario 0 0 0 0 8419.75036 9457 227334 4 0 Ontario Ontario 0 0 0 0 1328.29154 9461 20991 3 0 Ontario Ontario 0 0 0 0 2634.37660 9463 209511 3 0 Ontario Ontario 0 0 0 0 548.99392 9464 213829 2 0 Ontario Ontario 0 0 0 0 1313.75496 9465 21003 3 0 Ontario Ontario 0 0 0 0 959.12102 9466 21175 3 0 Ontario Ontario 0 0 0 0 1977.67383 9470 21038 3 0 Ontario Ontario 0 0 0 0 2172.98623 9471 2606 3 0 Ontario Ontario 0 0 0 0 4084.83193 9472 21057 2 1 Ontario Ontario 0 0 0 0 2735.18935 9473 210617 3 0 Ontario Ontario 0 0 0 0 233.49451 9475 21088 3 0 Ontario Ontario 0 0 0 0 1063.30276 9476 21091 3 0 Ontario Ontario 0 0 0 0 6688.80774 9477 211043 2 0 Ontario Ontario 0 0 0 0 6784.84325 9478 212322 3 0 Ontario Ontario 0 0 0 0 14901.05713 9479 2112401 1 0 Ontario Ontario 0 0 0 0 121.12519 9480 21138 3 0 Ontario Ontario 0 0 0 0 2953.44255 9481 211418 3 0 Ontario Ontario 0 0 0 0 793.69943 9482 21172 3 0 Ontario Ontario 0 0 0 0 509.62505 9484 21151 3 0 Ontario Ontario 0 0 0 0 1590.11741 9491 21163 3 0 Ontario Ontario 0 0 0 0 2696.25735 9493 21293 3 0 Ontario Ontario 0 0 0 0 3628.36333 9496 211828 3 0 Ontario Ontario 0 0 0 0 1177.48041 9497 21309 3 0 Ontario Ontario 0 0 0 0 3444.30315 9498 21195 3 0 Ontario Ontario 0 0 0 0 3560.19200 9499 212016 3 0 Ontario Ontario 0 0 0 0 1266.43502 9500 21218 3 0 Ontario Ontario 0 0 0 0 15.08764 9501 21242 3 0 Ontario Ontario 0 0 0 0 5619.03782 9502 212216 2 0 Ontario Ontario 0 0 0 0 1529.78679 9503 212322 3 0 Ontario Ontario 0 0 0 0 2607.13560 9513 212644 3 0 Ontario Ontario 0 0 0 0 1802.55779 9516 2613 3 0 Ontario Ontario 0 0 0 0 2936.40458 9517 212717 3 0 Ontario Ontario 0 0 0 0 996.33845 9518 212828 3 0 Ontario Ontario 0 0 0 0 1112.38156 9519 22263 3 0 Ontario Ontario 0 0 0 0 1743.07651 9520 21311 3 0 Ontario Ontario 0 0 0 0 104.81264 9521 21311 3 0 Ontario Ontario 0 0 0 0 3177.41689 9523 213210 3 0 Ontario Ontario 0 0 0 0 1627.30554 9524 21392 3 0 Ontario Ontario 0 0 0 0 2370.40365 9525 213829 2 0 Ontario Ontario 0 0 0 0 6236.48500 9528 2133416 1 0 Ontario Ontario 0 0 0 0 1840.14968 9529 213418 3 0 Ontario Ontario 0 0 0 0 163.46399 9530 214429 2 0 Ontario Ontario 0 0 0 0 2447.93443 9531 213643 2 0 Ontario Ontario 0 0 0 0 495.09432 9532 213743 2 0 Ontario Ontario 0 0 0 0 53.17024 9533 21447B 3 0 Ontario Ontario 0 0 0 0 3692.33798 9534 21609 3 0 Ontario Ontario 0 0 0 0 786.91615 9536 214028 3 0 Ontario Ontario 0 0 0 0 5208.09576 9537 214131 2 0 Ontario Ontario 0 0 0 0 944.84828 9538 214243 2 0 Ontario Ontario 0 0 0 0 6999.26960 9539 214319 3 0 Ontario Ontario 0 0 0 0 1291.64627 9540 214616 2 0 Ontario Ontario 0 0 0 0 464.05875 9541 214818 3 0 Ontario Ontario 0 0 0 0 1553.90265 9542 215017 3 0 Ontario Ontario 0 0 0 0 2059.76183 9543 215116 3 0 Ontario Ontario 0 0 0 0 2323.67011 9545 215222 3 0 Ontario Ontario 0 0 0 0 1099.46732 9546 21551 3 0 Ontario Ontario 0 0 0 0 566.54275 9547 215624 3 0 Ontario Ontario 0 0 0 0 233.22683 9548 215722 3 0 Ontario Ontario 0 0 0 0 384.33622 9549 21581 3 0 Ontario Ontario 0 0 0 0 927.32458 9550 215910 3 0 Ontario Ontario 0 0 0 0 540.03422 9551 216124 3 0 Ontario Ontario 0 0 0 0 953.67009 9552 2162416 1 0 Ontario Ontario 0 0 0 0 822.11253 9553 216816 2 0 Ontario Ontario 0 0 0 0 3780.18295 9554 21637 2 1 Ontario Ontario 0 0 0 0 3169.09081 9555 216415 2 0 Ontario Ontario 0 0 0 0 3748.57342 9556 21663 3 0 Ontario Ontario 0 0 0 0 1224.25275 9557 216722 3 0 Ontario Ontario 0 0 0 0 1564.44743 9559 217043 2 0 Ontario Ontario 0 0 0 0 2301.39578 9560 217331 2 0 Ontario Ontario 0 0 0 0 2061.83393 9561 217416 3 0 Ontario Ontario 0 0 0 0 4734.43764 9562 2175401 1 0 Ontario Ontario 0 0 0 0 128.92593 9563 217631 2 0 Ontario Ontario 0 0 0 0 2002.94053 9565 217718 3 0 Ontario Ontario 0 0 0 0 2830.78774 9566 217817 3 0 Ontario Ontario 0 0 0 0 1668.96358 9567 21791 3 0 Ontario Ontario 0 0 0 0 708.09169 9568 218044 3 0 Ontario Ontario 0 0 0 0 673.03829 9569 218122 3 0 Ontario Ontario 0 0 0 0 2094.69437 9570 21827B 3 0 Ontario Ontario 0 0 0 0 1454.42605 9571 218424 3 0 Ontario Ontario 0 0 0 0 641.03275 9572 218544 3 0 Ontario Ontario 0 0 0 0 7087.47354 9574 3942508 3 0 Ontario Ontario 0 0 0 0 30.93121 9575 219718 3 0 Ontario Ontario 0 0 0 0 307.15207 9578 218844 3 0 Ontario Ontario 0 0 0 0 570.31124 9580 218918 3 0 Ontario Ontario 0 0 0 0 3860.86478 9581 21907 2 1 Ontario Ontario 0 0 0 0 1007.88619 9582 219116 2 0 Ontario Ontario 0 0 0 0 3121.78362 9586 21989 3 0 Ontario Ontario 0 0 0 0 471.34557 9587 219316 2 0 Ontario Ontario 0 0 0 0 3306.53784 9588 21962 3 0 Ontario Ontario 0 0 0 0 2332.14511 9589 219410 3 0 Ontario Ontario 0 0 0 0 790.98444 9590 219518 3 0 Ontario Ontario 0 0 0 0 4090.00411 9592 2615 3 0 Ontario Ontario 0 0 0 0 4892.81842 9593 21992 3 0 Ontario Ontario 0 0 0 0 1795.85952 9594 220031 2 0 Ontario Ontario 0 0 0 0 22.62811 9595 21992 3 0 Ontario Ontario 0 0 0 0 1885.89452 9598 220122 3 0 Ontario Ontario 0 0 0 0 1086.22515 9599 221118 3 0 Ontario Ontario 0 0 0 0 1734.60289 9600 220344 3 0 Ontario Ontario 0 0 0 0 1530.97747 9601 22041 3 0 Ontario Ontario 0 0 0 0 2244.61363 9602 220516 3 0 Ontario Ontario 0 0 0 0 730.01326 9603 220610 3 0 Ontario Ontario 0 0 0 0 2931.34055 9604 220717 3 0 Ontario Ontario 0 0 0 0 3734.81617 9605 22707 2 1 Ontario Ontario 0 0 0 0 5787.52140 9606 22259 3 0 Ontario Ontario 0 0 0 0 1399.43701 9607 220916 2 0 Ontario Ontario 0 0 0 0 1079.79640 9608 22101 3 0 Ontario Ontario 0 0 0 0 2542.80683 9609 22169 3 0 Ontario Ontario 0 0 0 0 682.34425 9610 22199 3 0 Ontario Ontario 0 0 0 0 1603.63763 9611 221218 3 0 Ontario Ontario 0 0 0 0 2164.70918 9612 22209 3 0 Ontario Ontario 0 0 0 0 3465.53174 9613 22289 4 0 Ontario Ontario 0 0 0 0 1597.15864 9614 221444 3 0 Ontario Ontario 0 0 0 0 6199.55935 9615 22263 3 0 Ontario Ontario 0 0 0 0 1614.78383 9616 221522 3 0 Ontario Ontario 0 0 0 0 10611.15822 9618 22176 3 0 Ontario Ontario 0 0 0 0 5033.58306 9619 22183 3 0 Ontario Ontario 0 0 0 0 4615.42804 9620 2221416 1 0 Ontario Ontario 0 0 0 0 601.14609 9621 222244 3 0 Ontario Ontario 0 0 0 0 1391.80033 9622 22329 4 0 Ontario Ontario 0 0 0 0 813.90310 9623 222318 3 0 Ontario Ontario 0 0 0 0 2036.26724 9624 222416 3 0 Ontario Ontario 0 0 0 0 1435.07078 9625 223118 3 0 Ontario Ontario 0 0 0 0 939.30164 9626 222722 3 0 Ontario Ontario 0 0 0 0 967.83734 9628 222944 3 0 Ontario Ontario 0 0 0 0 2147.10396 9629 22301 3 0 Ontario Ontario 0 0 0 0 3227.96530 9630 22332 3 0 Ontario Ontario 0 0 0 0 1866.05126 9631 223416 2 0 Ontario Ontario 0 0 0 0 1175.18769 9632 223544 3 0 Ontario Ontario 0 0 0 0 5010.26799 9633 224243 2 0 Ontario Ontario 0 0 0 0 3135.47423 9634 223610 3 0 Ontario Ontario 0 0 0 0 1098.03986 9635 22411 3 0 Ontario Ontario 0 0 0 0 2123.88304 9636 223720 3 0 Ontario Ontario 0 0 0 0 445.31595 9637 223820 3 0 Ontario Ontario 0 0 0 0 2189.04336 9638 223916 3 0 Ontario Ontario 0 0 0 0 1954.15687 9639 224022 3 0 Ontario Ontario 0 0 0 0 298.16502 9640 22411 3 0 Ontario Ontario 0 0 0 0 565.46158 9641 230243 2 0 Ontario Ontario 0 0 0 0 2430.76803 9642 224418 3 0 Ontario Ontario 0 0 0 0 956.22550 9643 224516 2 0 Ontario Ontario 0 0 0 0 4195.72797 9644 22463 3 0 Ontario Ontario 0 0 0 0 5037.65843 9645 3940508 3 0 Ontario Ontario 0 0 0 0 2785.68044 9646 22474 3 0 Ontario Ontario 0 0 0 0 830.81892 9647 22481 3 0 Ontario Ontario 0 0 0 0 1027.74572 9650 224922 3 0 Ontario Ontario 0 0 0 0 1052.93603 9653 225325 3 0 Ontario Ontario 0 0 0 0 2460.63713 9654 225020 3 0 Ontario Ontario 0 0 0 0 2163.60196 9655 225144 3 0 Ontario Ontario 0 0 0 0 777.27858 9656 351665 3 0 Ontario Ontario 0 0 0 0 4126.76647 9657 351365 3 0 Ontario Ontario 0 0 0 0 2486.03300 9658 226118 3 0 Ontario Ontario 0 0 0 0 506.17791 9661 225444 3 0 Ontario Ontario 0 0 0 0 2171.21914 9664 225616 3 0 Ontario Ontario 0 0 0 0 741.03506 9665 225720 3 0 Ontario Ontario 0 0 0 0 4421.66698 9666 2258416 1 0 Ontario Ontario 0 0 0 0 1345.87376 9667 22591 3 0 Ontario Ontario 0 0 0 0 223.35146 9668 226016 3 0 Ontario Ontario 0 0 0 0 3672.08052 9669 22729 4 0 Ontario Ontario 0 0 0 0 26151.62455 9670 2273511 2 0 Ontario Ontario 0 0 0 0 1600.35979 9671 226825 3 0 Ontario Ontario 0 0 0 0 3272.12139 9672 22633 3 0 Ontario Ontario 0 0 0 0 2381.73959 9675 226418 3 0 Ontario Ontario 0 0 0 0 778.86259 9676 22651 3 0 Ontario Ontario 0 0 0 0 1791.22589 9677 226622 3 0 Ontario Ontario 0 0 0 0 3174.24905 9679 228218 3 0 Ontario Ontario 0 0 0 0 3592.32188 9680 22802 3 0 Ontario Ontario 0 0 0 0 495.17988 9681 22813 3 0 Ontario Ontario 0 0 0 0 2707.61082 9682 227416 2 0 Ontario Ontario 0 0 0 0 2124.98699 9683 227744 3 0 Ontario Ontario 0 0 0 0 916.04477 9684 2273511 2 0 Ontario Ontario 0 0 0 0 763.42777 9685 22802 3 0 Ontario Ontario 0 0 0 0 7908.39474 9686 227615 2 0 Ontario Ontario 0 0 0 0 1806.95352 9687 226218 3 0 Ontario Ontario 0 0 0 0 3595.98972 9688 227510 3 0 Ontario Ontario 0 0 0 0 123.47346 9689 228715 2 0 Ontario Ontario 0 0 0 0 2028.15307 9690 227916 3 0 Ontario Ontario 0 0 0 0 1190.74043 9692 22813 3 0 Ontario Ontario 0 0 0 0 350.26335 9693 227818 3 0 Ontario Ontario 0 0 0 0 776.25731 9694 228444 3 0 Ontario Ontario 0 0 0 0 490.73010 9695 228616 3 0 Ontario Ontario 0 0 0 0 10174.83374 9696 2288401 1 0 Ontario Ontario 0 0 0 0 142.99416 9697 228916 3 0 Ontario Ontario 0 0 0 0 1380.87150 9698 229015 3 0 Ontario Ontario 0 0 0 0 543.10458 9699 22913 3 0 Ontario Ontario 0 0 0 0 574.32469 9700 22923 3 0 Ontario Ontario 0 0 0 0 1492.21026 9701 229316 2 0 Ontario Ontario 0 0 0 0 2126.48820 9702 22941 3 0 Ontario Ontario 0 0 0 0 968.85347 9703 228715 2 0 Ontario Ontario 0 0 0 0 201.04237 9704 244115 2 0 Ontario Ontario 0 0 0 0 2255.72876 9706 229522 3 0 Ontario Ontario 0 0 0 0 1101.11646 9707 22963 3 0 Ontario Ontario 0 0 0 0 2881.55922 9710 229720 3 0 Ontario Ontario 0 0 0 0 10471.75106 9712 23002 3 0 Ontario Ontario 0 0 0 0 964.93285 9713 229916 3 0 Ontario Ontario 0 0 0 0 4602.72615 9714 230243 2 0 Ontario Ontario 0 0 0 0 4301.23004 9715 22984 3 0 Ontario Ontario 0 0 0 0 2530.17242 9716 230518 3 0 Ontario Ontario 0 0 0 0 978.06967 9717 231122 3 0 Ontario Ontario 0 0 0 0 351.35415 9718 235343 2 0 Ontario Ontario 0 0 0 0 1293.34564 9719 23033 3 0 Ontario Ontario 0 0 0 0 1384.14722 9720 230116 2 0 Ontario Ontario 0 0 0 0 1524.61940 9722 230444 3 0 Ontario Ontario 0 0 0 0 2390.46692 9723 23061 3 0 Ontario Ontario 0 0 0 0 2068.90280 9724 23071 3 0 Ontario Ontario 0 0 0 0 243.19198 9725 23088 3 0 Ontario Ontario 0 0 0 0 2097.38154 9727 23091 3 0 Ontario Ontario 0 0 0 0 2159.02073 9728 23101 3 0 Ontario Ontario 0 0 0 0 1146.72485 9729 231122 3 0 Ontario Ontario 0 0 0 0 1313.44928 9730 231220 3 0 Ontario Ontario 0 0 0 0 2798.57359 9731 23172 3 0 Ontario Ontario 0 0 0 0 666.70578 9733 2314 3 0 Ontario Ontario 0 0 0 0 2435.23673 9734 2315401 1 0 Ontario Ontario 0 0 0 0 133.12664 9735 2316 3 0 Ontario Ontario 0 0 0 0 2206.60223 9736 231816 3 0 Ontario Ontario 0 0 0 0 801.17859 9737 232044 3 0 Ontario Ontario 0 0 0 0 2747.00606 9738 232215 3 0 Ontario Ontario 0 0 0 0 1784.34182 9739 232312 3 0 Ontario Ontario 0 0 0 0 3076.88230 9740 231918 3 0 Ontario Ontario 0 0 0 0 788.33397 9741 23242 3 0 Ontario Ontario 0 0 0 0 2235.81135 9742 23252 3 0 Ontario Ontario 0 0 0 0 972.10575 9743 2326 3 0 Ontario Ontario 0 0 0 0 2221.55305 9744 232822 3 0 Ontario Ontario 0 0 0 0 6692.38431 9745 2327511 2 0 Ontario Ontario 0 0 0 0 2129.18369 9746 233020 3 0 Ontario Ontario 0 0 0 0 852.37205 9747 233120 3 0 Ontario Ontario 0 0 0 0 2670.84944 9750 233212 3 0 Ontario Ontario 0 0 0 0 1696.80961 9751 233444 3 0 Ontario Ontario 0 0 0 0 3550.18042 9752 234321 3 0 Ontario Ontario 0 0 0 0 2208.34376 9755 233318 3 0 Ontario Ontario 0 0 0 0 3747.90790 9756 23388 3 0 Ontario Ontario 0 0 0 0 1909.19065 9758 234020 3 0 Ontario Ontario 0 0 0 0 2065.72445 9759 2337511 2 0 Ontario Ontario 0 0 0 0 1861.18298 9760 234122 3 0 Ontario Ontario 0 0 0 0 4614.35709 9761 233616 2 0 Ontario Ontario 0 0 0 0 36.60521 9762 2360511 2 0 Ontario Ontario 0 0 0 0 4702.00823 9764 234210 3 0 Ontario Ontario 0 0 0 0 1803.40241 9768 234612 3 0 Ontario Ontario 0 0 0 0 1722.08610 9770 234518 3 0 Ontario Ontario 0 0 0 0 1254.07411 9771 23478 3 0 Ontario Ontario 0 0 0 0 5262.22233 9772 235343 2 0 Ontario Ontario 0 0 0 0 3516.44005 9773 235416 3 0 Ontario Ontario 0 0 0 0 1899.05147 9776 234944 3 0 Ontario Ontario 0 0 0 0 8572.05846 9777 2350416 1 0 Ontario Ontario 0 0 0 0 594.71659 9781 235443 2 0 Ontario Ontario 0 0 0 0 1572.31285 9782 235510 3 0 Ontario Ontario 0 0 0 0 4098.73740 9785 235815 3 0 Ontario Ontario 0 0 0 0 332.09572 9786 235922 3 0 Ontario Ontario 0 0 0 0 3794.24786 9787 2360511 2 0 Ontario Ontario 0 0 0 0 1314.34259 9790 236112 3 0 Ontario Ontario 0 0 0 0 2482.57754 9791 240120 3 0 Ontario Ontario 0 0 0 0 1378.13102 9792 235218 3 0 Ontario Ontario 0 0 0 0 4262.80793 9795 236516 3 0 Ontario Ontario 0 0 0 0 1644.13252 9796 23638 3 0 Ontario Ontario 0 0 0 0 633.72068 9797 2364511 2 0 Ontario Ontario 0 0 0 0 1044.19314 9798 236622 3 0 Ontario Ontario 0 0 0 0 1181.29735 9802 23728 3 0 Ontario Ontario 0 0 0 0 3863.74478 9803 237821 3 0 Ontario Ontario 0 0 0 0 362.64547 9804 2396416 1 0 Ontario Ontario 0 0 0 0 2085.57040 9805 237543 2 0 Ontario Ontario 0 0 0 0 1882.10784 9806 237443 2 0 Ontario Ontario 0 0 0 0 15.25819 9807 237543 2 0 Ontario Ontario 0 0 0 0 1053.59323 9808 237322 3 0 Ontario Ontario 0 0 0 0 1343.97106 9809 237616 3 0 Ontario Ontario 0 0 0 0 8043.54186 9810 23774 3 0 Ontario Ontario 0 0 0 0 542.11011 9811 238944 3 0 Ontario Ontario 0 0 0 0 572.39381 9812 239144 3 0 Ontario Ontario 0 0 0 0 664.03311 9813 239021 3 0 Ontario Ontario 0 0 0 0 297.95677 9814 239744 3 0 Ontario Ontario 0 0 0 0 1058.86648 9815 238216 3 0 Ontario Ontario 0 0 0 0 1367.05384 9817 23948 3 0 Ontario Ontario 0 0 0 0 256.11265 9818 238522 3 0 Ontario Ontario 0 0 0 0 1133.71359 9820 238815 3 0 Ontario Ontario 0 0 0 0 129.51692 9821 239322 3 0 Ontario Ontario 0 0 0 0 1770.13593 9822 2396416 1 0 Ontario Ontario 0 0 0 0 1445.49089 9823 239744 3 0 Ontario Ontario 0 0 0 0 282.81349 9824 240822 3 0 Ontario Ontario 0 0 0 0 2468.07426 9826 239516 3 0 Ontario Ontario 0 0 0 0 579.84654 9827 239744 3 0 Ontario Ontario 0 0 0 0 112.03996 9828 239844 3 0 Ontario Ontario 0 0 0 0 691.29542 9831 240244 3 0 Ontario Ontario 0 0 0 0 3288.54341 9832 239912 3 0 Ontario Ontario 0 0 0 0 1261.16030 9833 240615 3 0 Ontario Ontario 0 0 0 0 3360.88478 9834 240118 3 0 Ontario Ontario 0 0 0 0 1887.20702 9836 241521 3 0 Ontario Ontario 0 0 0 0 1521.47161 9837 24128 3 0 Ontario Ontario 0 0 0 0 22175.04267 9838 393965 3 0 Ontario Ontario 0 0 0 0 8291.07250 9839 24182 3 0 Ontario Ontario 0 0 0 0 1464.60305 9840 241922 3 0 Ontario Ontario 0 0 0 0 2039.60032 9841 241116 3 0 Ontario Ontario 0 0 0 0 1422.78058 9842 240915 3 0 Ontario Ontario 0 0 0 0 764.98013 9843 2410511 2 0 Ontario Ontario 0 0 0 0 3062.83199 9844 240323 3 0 Ontario Ontario 0 0 0 0 5743.02552 9846 241716 4 0 Ontario Ontario 0 0 0 0 1140.24065 9847 242023 3 0 Ontario Ontario 0 0 0 0 2368.30974 9848 241618 3 0 Ontario Ontario 0 0 0 0 3279.82612 9849 242115 3 0 Ontario Ontario 0 0 0 0 1063.31328 9850 243018 3 0 Ontario Ontario 0 0 0 0 1842.22264 9851 242921 3 0 Ontario Ontario 0 0 0 0 1182.13846 9852 242318 3 0 Ontario Ontario 0 0 0 0 4579.25798 9853 24244 3 0 Ontario Ontario 0 0 0 0 1116.19192 9854 243223 3 0 Ontario Ontario 0 0 0 0 117.08641 9855 243943 2 0 Ontario Ontario 0 0 0 0 617.95891 9857 243621 3 0 Ontario Ontario 0 0 0 0 3344.17420 9858 241444 3 0 Ontario Ontario 0 0 0 0 514.91549 9859 242518 3 0 Ontario Ontario 0 0 0 0 8269.18265 9860 243943 2 0 Ontario Ontario 0 0 0 0 2426.77777 9863 244318 3 0 Ontario Ontario 0 0 0 0 5097.09932 9865 243516 3 0 Ontario Ontario 0 0 0 0 2015.38265 9866 243415 3 0 Ontario Ontario 0 0 0 0 534.15180 9867 246618 3 0 Ontario Ontario 0 0 0 0 920.28808 9868 243118 3 0 Ontario Ontario 0 0 0 0 8758.67950 9869 438 3 0 Ontario Ontario 0 0 0 0 814.12855 9870 247044 3 0 Ontario Ontario 0 0 0 0 1300.21428 9871 24404 3 0 Ontario Ontario 0 0 0 0 540.18775 9875 24424 3 0 Ontario Ontario 0 0 0 0 14917.42113 9876 244115 2 0 Ontario Ontario 0 0 0 0 1869.20670 9877 244943 2 0 Ontario Ontario 0 0 0 0 2397.64330 9879 245121 3 0 Ontario Ontario 0 0 0 0 1748.98456 9881 244716 3 0 Ontario Ontario 0 0 0 0 832.04805 9884 246221 3 0 Ontario Ontario 0 0 0 0 5051.05972 9885 246318 3 0 Ontario Ontario 0 0 0 0 6426.04601 9886 246543 2 0 Ontario Ontario 0 0 0 0 597.86441 9888 245216 3 0 Ontario Ontario 0 0 0 0 5807.41766 9890 24558 3 0 Ontario Ontario 0 0 0 0 6488.15335 9891 245912 3 0 Ontario Ontario 0 0 0 0 1220.15072 9893 245717 3 0 Ontario Ontario 0 0 0 0 3497.23840 9894 247044 3 0 Ontario Ontario 0 0 0 0 1065.63768 9895 246417 3 0 Ontario Ontario 0 0 0 0 8329.53671 9896 2472416 1 0 Ontario Ontario 0 0 0 0 713.79640 9898 246712 3 0 Ontario Ontario 0 0 0 0 776.49457 9900 248144 3 0 Ontario Ontario 0 0 0 0 3303.63045 9901 246918 3 0 Ontario Ontario 0 0 0 0 1368.31496 9902 2487416 1 0 Ontario Ontario 0 0 0 0 110.51315 9904 2491416 1 0 Ontario Ontario 0 0 0 0 7.62506 9905 2491416 1 0 Ontario Ontario 0 0 0 0 2393.71523 9908 249721 3 0 Ontario Ontario 0 0 0 0 3717.48519 9909 247515 3 0 Ontario Ontario 0 0 0 0 979.08496 9910 247618 3 0 Ontario Ontario 0 0 0 0 416.76431 9914 247918 3 0 Ontario Ontario 0 0 0 0 856.00589 9915 248212 3 0 Ontario Ontario 0 0 0 0 2230.47492 9916 248316 3 0 Ontario Ontario 0 0 0 0 8909.95223 9917 25002 3 0 Ontario Ontario 0 0 0 0 789.54090 9918 248818 3 0 Ontario Ontario 0 0 0 0 501.49030 9919 248918 3 0 Ontario Ontario 0 0 0 0 160.00894 9920 25082 3 0 Ontario Ontario 0 0 0 0 7.76613 9921 2509416 1 0 Ontario Ontario 0 0 0 0 8919.63319 9922 249843 2 0 Ontario Ontario 0 0 0 0 139.15076 9923 25742 3 0 Ontario Ontario 0 0 0 0 1416.10676 9924 2509416 1 0 Ontario Ontario 0 0 0 0 724.34072 9925 25127 3 0 Ontario Ontario 0 0 0 0 1671.89650 9926 249341 3 0 Ontario Ontario 0 0 0 0 10906.04811 9927 2494 3 0 Ontario Ontario 0 0 0 0 677.19325 9928 249616 3 0 Ontario Ontario 0 0 0 0 3197.52953 9930 249217 3 0 Ontario Ontario 0 0 0 0 1847.94240 9931 250341 3 0 Ontario Ontario 0 0 0 0 588.32602 9932 250416 3 0 Ontario Ontario 0 0 0 0 9776.77600 9933 2495511 2 0 Ontario Ontario 0 0 0 0 289.21504 9934 2530 3 0 Ontario Ontario 0 0 0 0 1811.26275 9935 250641 3 0 Ontario Ontario 0 0 0 0 990.06268 9936 250715 3 0 Ontario Ontario 0 0 0 0 752.05868 9938 25127 3 0 Ontario Ontario 0 0 0 0 3487.77303 9939 24998 3 0 Ontario Ontario 0 0 0 0 2310.94627 9940 251412 3 0 Ontario Ontario 0 0 0 0 759.46923 9941 250217 3 0 Ontario Ontario 0 0 0 0 1592.89386 9942 252021 3 0 Ontario Ontario 0 0 0 0 1654.97380 9943 252121 3 0 Ontario Ontario 0 0 0 0 2006.05570 9944 251618 3 0 Ontario Ontario 0 0 0 0 20192.38713 9945 25257 2 1 Ontario Ontario 0 0 0 0 1686.38879 9946 251712 3 0 Ontario Ontario 0 0 0 0 2689.31050 9947 2509416 2 0 Ontario Ontario 0 0 0 0 1055.25112 9948 25281 2 0 Ontario Ontario 0 0 0 0 264.74398 9949 25281 2 0 Ontario Ontario 0 0 0 0 1049.39467 9950 253118 3 0 Ontario Ontario 0 0 0 0 15251.60894 9952 253610 3 0 Ontario Ontario 0 0 0 0 517.18725 9953 25371 2 0 Ontario Ontario 0 0 0 0 9736.76205 9955 254143 2 0 Ontario Ontario 0 0 0 0 625.15985 9956 25371 2 0 Ontario Ontario 0 0 0 0 3028.01961 9957 252712 3 0 Ontario Ontario 0 0 0 0 11175.35437 9958 245816 4 0 Ontario Ontario 0 0 0 0 1001.44058 9959 2570509 3 0 Ontario Ontario 0 0 0 0 702.77719 9960 25327 2 1 Ontario Ontario 0 0 0 0 41.76153 9961 26957 2 1 Ontario Ontario 0 0 0 0 3675.31849 9962 2533511 2 0 Ontario Ontario 0 0 0 0 879.42000 9963 253118 3 0 Ontario Ontario 0 0 0 0 1507.41345 9964 253912 3 0 Ontario Ontario 0 0 0 0 2907.33578 9965 25408 3 0 Ontario Ontario 0 0 0 0 442.15237 9966 253818 3 0 Ontario Ontario 0 0 0 0 212.86851 9967 253912 3 0 Ontario Ontario 0 0 0 0 1052.33348 9968 25421 2 0 Ontario Ontario 0 0 0 0 4055.53156 9969 253416 3 0 Ontario Ontario 0 0 0 0 3910.09659 9970 251917 3 0 Ontario Ontario 0 0 0 0 467.74435 9971 254318 3 0 Ontario Ontario 0 0 0 0 2050.25913 9973 255726 3 0 Ontario Ontario 0 0 0 0 6078.84986 9974 254615 3 0 Ontario Ontario 0 0 0 0 4757.70745 9975 2563401 1 0 Ontario Ontario 0 0 0 0 958.80919 9976 255018 3 0 Ontario Ontario 0 0 0 0 90.94263 9977 2563401 1 0 Ontario Ontario 0 0 0 0 1602.99018 9978 25421 2 0 Ontario Ontario 0 0 0 0 1110.83903 9979 254916 3 0 Ontario Ontario 0 0 0 0 3462.79566 9980 256221 3 0 Ontario Ontario 0 0 0 0 342.80922 9982 255018 3 0 Ontario Ontario 0 0 0 0 5688.64971 9983 2552509 3 0 Ontario Ontario 0 0 0 0 1196.51321 9984 255315 3 0 Ontario Ontario 0 0 0 0 2788.49929 9985 25651 2 0 Ontario Ontario 0 0 0 0 6805.24926 9986 25116 3 0 Ontario Ontario 0 0 0 0 595.95914 9988 2558509 3 0 Ontario Ontario 0 0 0 0 831.17931 9990 256118 3 0 Ontario Ontario 0 0 0 0 5272.52430 9993 25742 3 0 Ontario Ontario 0 0 0 0 428.62450 9994 256418 3 0 Ontario Ontario 0 0 0 0 1870.10884 9995 257926 3 0 Ontario Ontario 0 0 0 0 2656.17080 9996 25677 3 0 Ontario Ontario 0 0 0 0 2897.91079 9997 256810 3 0 Ontario Ontario 0 0 0 0 5449.04648 9998 257118 3 0 Ontario Ontario 0 0 0 0 4058.23685 9999 2570509 3 0 Ontario Ontario 0 0 0 0 305.17386 10000 25811 2 0 Ontario Ontario 0 0 0 0 8798.62717 10003 256629 2 0 Ontario Ontario 0 0 0 0 1883.89558 10004 25771 2 0 Ontario Ontario 0 0 0 0 2120.26545 10005 25781 2 0 Ontario Ontario 0 0 0 0 2673.97451 10006 258221 3 0 Ontario Ontario 0 0 0 0 2664.08339 10007 25811 2 0 Ontario Ontario 0 0 0 0 5373.70094 10008 258412 3 0 Ontario Ontario 0 0 0 0 1145.60810 10009 259626 3 0 Ontario Ontario 0 0 0 0 2141.78667 10011 25857 3 0 Ontario Ontario 0 0 0 0 707.51204 10012 25861 2 0 Ontario Ontario 0 0 0 0 313.71786 10015 25897 3 0 Ontario Ontario 0 0 0 0 1000.05268 10016 25901 2 0 Ontario Ontario 0 0 0 0 988.52558 10017 25911 2 0 Ontario Ontario 0 0 0 0 3347.81648 10018 259529 2 0 Ontario Ontario 0 0 0 0 9787.57567 10019 259715 2 0 Ontario Ontario 0 0 0 0 2411.42682 10020 25981 2 0 Ontario Ontario 0 0 0 0 4754.44807 10023 2599509 3 0 Ontario Ontario 0 0 0 0 2513.29074 10024 260010 3 0 Ontario Ontario 0 0 0 0 1786.23282 10025 26036 3 0 Ontario Ontario 0 0 0 0 700.14307 10026 260136 3 0 Ontario Ontario 0 0 0 0 7206.90642 10027 2602509 3 0 Ontario Ontario 0 0 0 0 2127.40531 10029 260412 3 0 Ontario Ontario 0 0 0 0 5046.21652 10030 2614401 1 0 Ontario Ontario 0 0 0 0 2439.18665 10031 2611 3 0 Ontario Ontario 0 0 0 0 1397.84275 10032 26061 3 0 Ontario Ontario 0 0 0 0 3058.26683 10035 26097 3 0 Ontario Ontario 0 0 0 0 1418.99534 10036 26101 3 0 Ontario Ontario 0 0 0 0 1098.03753 10037 261210 3 0 Ontario Ontario 0 0 0 0 1237.42106 10038 26136 3 0 Ontario Ontario 0 0 0 0 1340.40851 10039 261512 3 0 Ontario Ontario 0 0 0 0 1646.61969 10041 26171 3 0 Ontario Ontario 0 0 0 0 1546.66288 10042 26181 3 0 Ontario Ontario 0 0 0 0 5974.47436 10044 260536 3 0 Ontario Ontario 0 0 0 0 10918.01972 10045 262019 3 0 Ontario Ontario 0 0 0 0 5090.71916 10047 26262 3 0 Ontario Ontario 0 0 0 0 1958.94754 10049 2627 3 0 Ontario Ontario 0 0 0 0 2599.11719 10052 26227 3 0 Ontario Ontario 0 0 0 0 9591.05427 10054 257315 3 0 Ontario Ontario 0 0 0 0 4368.96601 10055 263426 3 0 Ontario Ontario 0 0 0 0 6429.81616 10078 2651509 3 0 Ontario Ontario 0 0 0 0 6513.73098 10084 2672401 1 0 Ontario Ontario 0 0 0 0 8450.81390 10117 268315 2 0 Ontario Ontario 0 0 0 0 22726.90385 10128 26957 2 1 Ontario Ontario 0 0 0 0 13896.91992 32526 2200343 4 0 Quebec Qubec 0 0 0 0 502.21962 32530 1662158 2 0 Quebec Qubec 0 0 0 0 549.62965 32531 1662158 2 0 Quebec Qubec 0 0 0 0 15263.92291 32533 1738132 2 0 Quebec Qubec 0 0 0 0 17478.99598 32535 1852158 2 0 Quebec Qubec 0 0 0 0 5362.55102 32536 2198337/343 4 0 Quebec Qubec 0 0 0 0 43093.07117 32546 1846311 4 0 Quebec Qubec 0 0 0 0 15818.68043 32551 4527239 3 0 Quebec Qubec 0 0 0 0 25297.14717 32552 1958117 2 1 Quebec Qubec 0 0 0 0 12469.56584 32556 2192337 4 0 Quebec Qubec 0 0 0 0 10718.10779 32557 2005348 3 0 Quebec Qubec 0 0 0 0 14232.92188 32564 1752223 3 0 Quebec Qubec 0 0 0 0 5185.39281 32565 4491131 2 0 Quebec Qubec 0 0 0 0 29799.77183 32568 1802105 2 0 Quebec Qubec 0 0 0 0 927.33912 32570 896 4 0 Quebec Qubec 0 0 0 0 28117.18375 32576 1935117 2 1 Quebec Qubec 0 0 0 0 10551.95238 32577 1766132 2 0 Quebec Qubec 0 0 0 0 1066.44221 32579 3392343 3 0 Quebec Qubec 0 0 0 0 7799.02791 32580 4510339 3 0 Quebec Qubec 0 0 0 0 14000.69254 32581 3395339 3 0 Quebec Qubec 0 0 0 0 1514.56416 32584 682 4 0 Quebec Qubec 0 0 0 0 735.21132 32588 3395339 3 0 Quebec Qubec 0 0 0 0 608.76049 32589 4681125 4 0 Quebec Qubec 0 0 0 0 718.48281 32590 4633341 3 0 Quebec Qubec 0 0 0 0 1367.36272 32593 1717 4 0 Quebec Qubec 0 0 0 0 3929.91815 32595 6963117 2 0 Quebec Qubec 0 0 0 0 2730.78010 32596 6963117 2 0 Quebec Qubec 0 0 0 0 952.10165 32597 1721 4 0 Quebec Qubec 0 0 0 0 1434.61781 32600 1466 4 0 Quebec Qubec 0 0 0 0 1261.74879 32601 6963117 2 0 Quebec Qubec 0 0 0 0 10884.53468 32602 4680125 4 0 Quebec Qubec 0 0 0 0 662.23730 32605 1370 4 0 Quebec Qubec 0 0 0 0 875.44221 32611 1825 4 0 Quebec Qubec 0 0 0 0 783.31717 32614 865140 1 0 Quebec Qubec 0 0 0 0 898.98582 32615 1836 4 0 Quebec Qubec 0 0 0 0 22565.93352 32616 4444133 2 0 Quebec Qubec 0 0 0 0 4653.32095 32617 1766132 2 0 Quebec Qubec 0 0 0 0 957.22217 32618 346940 1 0 Quebec Qubec 0 0 0 0 25735.35223 32619 5103235 3 0 Quebec Qubec 0 0 0 0 2403.94392 32620 6975117 2 0 Quebec Qubec 0 0 0 0 738.29782 32621 1498 4 0 Quebec Qubec 0 0 0 0 10105.38312 32623 8025158 2 0 Quebec Qubec 0 0 0 0 24.23503 32624 3021 2 0 Quebec Qubec 0 0 0 0 4505.50336 32625 8025158 2 0 Quebec Qubec 0 0 0 0 1843.41313 32626 6975117 2 0 Quebec Qubec 0 0 0 0 5971.26750 32627 6934329 3 0 Quebec Qubec 0 0 0 0 596.92696 32628 1658 4 0 Quebec Qubec 0 0 0 0 25871.54543 32630 6937364 4 0 Quebec Qubec 0 0 0 0 5744.83091 32631 67730 1 0 Quebec Qubec 0 0 0 0 9554.85694 32632 3457640 1 0 Quebec Qubec 0 0 0 0 2808.41906 32633 1766132 2 0 Quebec Qubec 0 0 0 0 759.28061 32634 4699125 4 0 Quebec Qubec 0 0 0 0 5474.14881 32635 8025158 2 0 Quebec Qubec 0 0 0 0 2575.18658 32637 8006337 3 0 Quebec Qubec 0 0 0 0 873.91848 32638 5082116 2 0 Quebec Qubec 0 0 0 0 362.34637 32639 874420 1 1 Quebec Qubec 0 0 0 0 2122.89903 32640 4697125 4 0 Quebec Qubec 0 0 0 0 9165.71289 32641 4947229 4 0 Quebec Qubec 0 0 0 0 1211.96952 32642 1023 4 0 Quebec Qubec 0 0 0 0 33561.12144 32643 1739105 2 0 Quebec Qubec 0 0 0 0 3338.81114 32644 6978117 2 0 Quebec Qubec 0 0 0 0 659.73222 32645 6978117 2 0 Quebec Qubec 0 0 0 0 1769.72525 32647 8154125 4 0 Quebec Qubec 0 0 0 0 1931.27754 32648 955 4 0 Quebec Qubec 0 0 0 0 1719.23326 32649 1022 4 0 Quebec Qubec 0 0 0 0 1322.97754 32651 995 4 0 Quebec Qubec 0 0 0 0 2454.35659 32652 350825 1 0 Quebec Qubec 0 0 0 0 1164.08984 32653 4866117 2 0 Quebec Qubec 0 0 0 0 1900.29690 32654 2209 4 0 Quebec Qubec 0 0 0 0 306.69364 32655 1288 4 0 Quebec Qubec 0 0 0 0 2693.83436 32656 957 4 0 Quebec Qubec 0 0 0 0 912.55631 32657 478515 1 1 Quebec Qubec 0 0 0 0 690.93949 32659 328115 1 1 Quebec Qubec 0 0 0 0 497.45546 32661 1293 4 0 Quebec Qubec 0 0 0 0 2190.40761 32662 4608116 2 0 Quebec Qubec 0 0 0 0 353.23288 32663 5017229 4 0 Quebec Qubec 0 0 0 0 4328.39906 32665 328115 1 1 Quebec Qubec 0 0 0 0 441.50783 32666 2084 4 0 Quebec Qubec 0 0 0 0 510.08953 32667 1906 4 0 Quebec Qubec 0 0 0 0 8704.34112 32668 5099231 4 0 Quebec Qubec 0 0 0 0 938.02154 32670 1906 4 0 Quebec Qubec 0 0 0 0 855.53978 32671 1902 4 0 Quebec Qubec 0 0 0 0 14418.98646 32672 7735117 2 0 Quebec Qubec 0 0 0 0 351.63111 32673 8018335 3 0 Quebec Qubec 0 0 0 0 1309.29472 32677 2270 4 0 Quebec Qubec 0 0 0 0 7833.94489 32681 1001 4 0 Quebec Qubec 0 0 0 0 2659.56991 32682 2193 4 0 Quebec Qubec 0 0 0 0 1476.33605 32683 866325 1 1 Quebec Qubec 0 0 0 0 3630.45178 32684 866325 1 1 Quebec Qubec 0 0 0 0 2545.89071 32685 1245 4 0 Quebec Qubec 0 0 0 0 27044.83131 32686 6967158 2 0 Quebec Qubec 0 0 0 0 756.94330 32688 853425 1 0 Quebec Qubec 0 0 0 0 340.23287 32689 853425 1 0 Quebec Qubec 0 0 0 0 1153.63238 32692 2243 4 0 Quebec Qubec 0 0 0 0 1229.84760 32693 853125 1 0 Quebec Qubec 0 0 0 0 1024.99424 32694 2247 4 0 Quebec Qubec 0 0 0 0 4101.57298 32695 853125 1 0 Quebec Qubec 0 0 0 0 6699.21011 32698 1029 4 0 Quebec Qubec 0 0 0 0 1750.45025 32701 7884117 2 0 Quebec Qubec 0 0 0 0 3592.43397 32702 7987335 3 0 Quebec Qubec 0 0 0 0 8810.21436 32704 5114227 3 0 Quebec Qubec 0 0 0 0 4233.82707 32705 5056116 2 0 Quebec Qubec 0 0 0 0 888.29328 32706 843419 1 0 Quebec Qubec 0 0 0 0 1958.91793 32708 843419 1 0 Quebec Qubec 0 0 0 0 3358.64680 32711 843419 1 0 Quebec Qubec 0 0 0 0 3285.19622 32713 8544440 1 0 Quebec Qubec 0 0 0 0 550.98559 32714 5167116 2 0 Quebec Qubec 0 0 0 0 1691.34143 32716 8177335 3 0 Quebec Qubec 0 0 0 0 2671.81113 32717 1029 4 0 Quebec Qubec 0 0 0 0 3278.06487 32718 8178148 3 0 Quebec Qubec 0 0 0 0 5094.21943 32719 1770 4 0 Quebec Qubec 0 0 0 0 1689.63492 32720 8177335 3 0 Quebec Qubec 0 0 0 0 3918.56147 32721 904830 1 0 Quebec Qubec 0 0 0 0 3282.31439 32722 836115 1 1 Quebec Qubec 0 0 0 0 375.26385 32723 7744 2 0 Quebec Qubec 0 0 0 0 1822.66687 32724 835815 1 1 Quebec Qubec 0 0 0 0 2309.33391 32725 7744 2 0 Quebec Qubec 0 0 0 0 2457.49528 32727 8341440 1 0 Quebec Qubec 0 0 0 0 6156.40978 32728 8146335 3 0 Quebec Qubec 0 0 0 0 4664.99845 32731 5155112 2 0 Quebec Qubec 0 0 0 0 892.50918 32732 845915 1 1 Quebec Qubec 0 0 0 0 1525.12077 32733 2619 4 0 Quebec Qubec 0 0 0 0 1995.95482 32734 8089117 2 0 Quebec Qubec 0 0 0 0 1190.36517 32735 1773 4 0 Quebec Qubec 0 0 0 0 1311.80909 32736 8082148 3 0 Quebec Qubec 0 0 0 0 3252.33824 32737 884520 1 0 Quebec Qubec 0 0 0 0 1598.47236 32739 1072 4 0 Quebec Qubec 0 0 0 0 1497.63076 32740 2230 4 0 Quebec Qubec 0 0 0 0 2090.53241 32741 2232 4 0 Quebec Qubec 0 0 0 0 1023.84790 32742 888210 1 0 Quebec Qubec 0 0 0 0 5186.72830 32743 8106148 3 0 Quebec Qubec 0 0 0 0 2967.10938 32744 1414 4 0 Quebec Qubec 0 0 0 0 797.18422 32745 888610 1 0 Quebec Qubec 0 0 0 0 373.11814 32747 890010/15/20 1 0 Quebec Qubec 0 0 0 0 2732.78698 32749 8102148 3 0 Quebec Qubec 0 0 0 0 2121.81190 32750 8076117 2 0 Quebec Qubec 0 0 0 0 3226.03349 32751 888610 1 0 Quebec Qubec 0 0 0 0 419.18852 32752 1146 4 0 Quebec Qubec 0 0 0 0 4976.63920 32756 846915 1 0 Quebec Qubec 0 0 0 0 7023.28968 32757 8102148 3 0 Quebec Qubec 0 0 0 0 3803.63787 32759 6910327 3 0 Quebec Qubec 0 0 0 0 5378.22913 32760 2294 4 0 Quebec Qubec 0 0 0 0 1363.61106 32761 888610 1 0 Quebec Qubec 0 0 0 0 3653.15783 32762 1208 4 0 Quebec Qubec 0 0 0 0 2058.47670 32764 7913148 2 0 Quebec Qubec 0 0 0 0 22704.16561 32765 2899105 2 0 Quebec Qubec 0 0 0 0 3662.03537 32766 847540 1 1 Quebec Qubec 0 0 0 0 3932.16874 32768 2216 4 0 Quebec Qubec 0 0 0 0 11809.10874 32770 3413104 3 0 Quebec Qubec 0 0 0 0 3008.51955 32773 837013 1 0 Quebec Qubec 0 0 0 0 10785.89258 32776 4678133 2 0 Quebec Qubec 0 0 0 0 3843.80874 32777 8489520 1 0 Quebec Qubec 0 0 0 0 16077.99899 32781 6904148 2 0 Quebec Qubec 0 0 0 0 3083.37464 32782 2350 4 0 Quebec Qubec 0 0 0 0 4659.15539 32783 1612 4 0 Quebec Qubec 0 0 0 0 1147.42000 32784 2350 4 0 Quebec Qubec 0 0 0 0 1021.37923 32785 2931 4 0 Quebec Qubec 0 0 0 0 1193.96545 32786 4964 4 0 Quebec Qubec 0 0 0 0 990.15371 32787 2650 4 0 Quebec Qubec 0 0 0 0 1031.28901 32788 2648 4 0 Quebec Qubec 0 0 0 0 2129.18656 32790 4808 4 0 Quebec Qubec 0 0 0 0 870.62598 32791 2641 4 0 Quebec Qubec 0 0 0 0 2057.03723 32792 270 4 0 Quebec Qubec 0 0 0 0 4847.77841 32796 890815 1 0 Quebec Qubec 0 0 0 0 14233.26109 32797 4661227 4 0 Quebec Qubec 0 0 0 0 376.08561 32798 1841 4 0 Quebec Qubec 0 0 0 0 18871.80718 32799 7201344 3 0 Quebec Qubec 0 0 0 0 9694.10521 32800 1817 2 0 Ontario Ontario 0 0 0 0 10802.58555 32801 2813 4 0 Quebec Qubec 0 0 0 0 722.06480 32802 9108207 3 0 Quebec Qubec 0 0 0 0 9354.53285 32803 8254221 3 0 Quebec Qubec 0 0 0 0 8789.21831 32804 2668 4 0 Quebec Qubec 0 0 0 0 647.67044 32805 9123 4 0 Quebec Qubec 0 0 0 0 1719.37723 32806 2668 4 0 Quebec Qubec 0 0 0 0 654.82934 32807 9123 4 0 Quebec Qubec 0 0 0 0 38617.58736 32808 6471307 3 0 Quebec Qubec 0 0 0 0 246.41759 32809 1815132 2 0 Quebec Qubec 0 0 0 0 524.25441 32810 2568132 2 0 Quebec Qubec 0 0 0 0 4031.86332 32811 7197342 4 0 Quebec Qubec 0 0 0 0 4170.08711 32812 56417 1 1 Ontario Ontario 0 0 0 0 1488.28351 32814 1267 4 0 Quebec Qubec 0 0 0 0 888.00778 32816 4610 3 0 Ontario Ontario 0 0 0 0 39773.72906 32817 4938105 2 0 Quebec Qubec 0 0 0 0 2394.05595 32818 1267340 4 0 Quebec Qubec 0 0 0 0 2949.50841 32819 5910 3 0 Ontario Ontario 0 0 0 0 12232.85856 32822 4822133 2 0 Quebec Qubec 0 0 0 0 998.90710 32824 840220 1 0 Quebec Qubec 0 0 0 0 2641.78398 32829 7406340 3 0 Quebec Qubec 0 0 0 0 1141.48502 32830 7222201 3 0 Quebec Qubec 0 0 0 0 12881.66414 32831 7399338 3 0 Quebec Qubec 0 0 0 0 4864.68042 32832 7763132 2 0 Quebec Qubec 0 0 0 0 1918.52467 32835 1148 4 0 Quebec Qubec 0 0 0 0 2045.31312 32836 9918 3 0 Ontario Ontario 0 0 0 0 6090.98950 32838 7827205 4 0 Quebec Qubec 0 0 0 0 1848.80727 32839 12619 3 0 Ontario Ontario 0 0 0 0 2046.47122 32840 1321 4 0 Quebec Qubec 0 0 0 0 2344.67574 32841 14010 3 0 Ontario Ontario 0 0 0 0 15392.37262 32842 7147 3 0 Quebec Qubec 0 0 0 0 10838.10504 32843 7147325 4 0 Quebec Qubec 0 0 0 0 4453.43497 32845 6594309 3 0 Quebec Qubec 0 0 0 0 4999.55851 32846 18217 2 0 Ontario Ontario 0 0 0 0 613.12629 32847 7367201 2 0 Quebec Qubec 0 0 0 0 2737.29169 32848 7367201 2 0 Quebec Qubec 0 0 0 0 15510.73732 32849 6745148 2 0 Quebec Qubec 0 0 0 0 6560.77287 32850 4893221 3 0 Quebec Qubec 0 0 0 0 4662.10050 32851 4967223 3 0 Quebec Qubec 0 0 0 0 4562.63985 32852 7367201 2 0 Quebec Qubec 0 0 0 0 3423.24818 32853 778220 1 0 Quebec Qubec 0 0 0 0 3639.33364 32854 7426 4 0 Quebec Qubec 0 0 0 0 1286.06689 32855 1217 4 0 Quebec Qubec 0 0 0 0 15929.04187 32856 786350 1 0 Quebec Qubec 0 0 0 0 41811.45640 32857 4937366 4 0 Quebec Qubec 0 0 0 0 3344.58862 32858 3424148 2 0 Quebec Qubec 0 0 0 0 12698.73219 32859 6425366 4 0 Quebec Qubec 0 0 0 0 3707.02525 32861 21123 3 0 Ontario Ontario 0 0 0 0 12711.90541 32862 6745148 2 0 Quebec Qubec 0 0 0 0 1906.27439 32864 26034 3 0 Ontario Ontario 0 0 0 0 2937.81122 32865 1682 3 0 Ontario Ontario 0 0 0 0 910.51708 32867 21123 3 0 Quebec Qubec 0 0 0 0 3414.40958 32869 715518 3 0 Ontario Ontario 0 0 0 0 1779.43928 32878 489174 2 0 Ontario Ontario 0 0 0 0 256.83911 32879 39734 3 0 Ontario Ontario 0 0 0 0 54623.72356 32881 442148 2 0 Ontario Ontario 0 0 0 0 339.21594 32882 398401 1 0 Ontario Ontario 0 0 0 0 4389.14054 32883 4822 3 0 Ontario Ontario 0 0 0 0 1523.97797 32886 6607148 2 0 Quebec Qubec 0 0 0 0 2605.53242 32888 499 3 0 Ontario Ontario 0 0 0 0 1015.09582 32890 6636307 3 0 Quebec Qubec 0 0 0 0 16890.12960 32891 6517105 2 0 Quebec Qubec 0 0 0 0 1990.38145 32892 60926 3 0 Ontario Ontario 0 0 0 0 815.52097 32893 4171 4 0 Quebec Qubec 0 0 0 0 986.62101 32894 649 3 0 Ontario Ontario 0 0 0 0 173.37990 32895 66850 3 0 Ontario Ontario 0 0 0 0 1120.71563 32896 6915 1 0 Quebec Qubec 0 0 0 0 4242.61670 32897 682 3 0 Ontario Ontario 0 0 0 0 1820.68942 32898 3898 4 0 Quebec Qubec 0 0 0 0 741.62505 32899 6628 4 0 Quebec Qubec 0 0 0 0 1490.62827 32900 6634148 2 0 Quebec Qubec 0 0 0 0 557.06425 32901 711 3 0 Ontario Ontario 0 0 0 0 1646.02440 32902 798 3 0 Quebec Qubec 0 0 0 0 1688.77888 32903 3898 4 0 Quebec Qubec 0 0 0 0 760.86106 32904 714417 1 1 Ontario Ontario 0 0 0 0 1386.44133 32905 732417 1 1 Ontario Ontario 0 0 0 0 314.97453 32906 720 3 0 Ontario Ontario 0 0 0 0 380.38238 32907 731 3 0 Ontario Ontario 0 0 0 0 873.71745 32908 4498 4 0 Quebec Qubec 0 0 0 0 444.84661 32909 745417 1 1 Ontario Ontario 0 0 0 0 1374.61018 32910 6634 4 0 Quebec Qubec 0 0 0 0 439.23447 32911 742 3 0 Ontario Ontario 0 0 0 0 1371.38234 32912 3844 4 0 Quebec Qubec 0 0 0 0 450.57100 32913 4163 4 0 Quebec Qubec 0 0 0 0 281.41252 32914 80774 3 0 Ontario Ontario 0 0 0 0 1543.86266 32915 810 3 0 Ontario Ontario 0 0 0 0 2642.67431 32916 80972 3 0 Ontario Ontario 0 0 0 0 2254.97972 32917 917 3 0 Ontario Ontario 0 0 0 0 835.63673 32918 856 2 0 Ontario Ontario 0 0 0 0 660.15226 32919 852417 1 1 Ontario Ontario 0 0 0 0 1450.02672 32920 397436 3 0 Ontario Ontario 0 0 0 0 1290.03264 32921 86374 3 0 Ontario Ontario 0 0 0 0 1373.71160 32922 902417 1 1 Ontario Ontario 0 0 0 0 536.30046 32924 89227 3 0 Ontario Ontario 0 0 0 0 979.86961 32925 893 2 0 Ontario Ontario 0 0 0 0 1261.27857 32926 92238 3 0 Ontario Ontario 0 0 0 0 358.33534 32927 94527 3 0 Ontario Ontario 0 0 0 0 4693.93946 32928 953 3 0 Ontario Ontario 0 0 0 0 546.61812 32929 903 3 0 Ontario Ontario 0 0 0 0 143.07489 32930 93938 3 0 Ontario Ontario 0 0 0 0 1100.94689 32931 95016 2 0 Ontario Ontario 0 0 0 0 1036.69456 32932 101869 3 0 Ontario Ontario 0 0 0 0 223.45261 32933 95616 2 0 Ontario Ontario 0 0 0 0 2658.11301 32934 1010653 2 0 Ontario Ontario 0 0 0 0 2151.06463 32935 992 3 0 Ontario Ontario 0 0 0 0 1628.30944 32936 1016417 1 1 Ontario Ontario 0 0 0 0 518.47063 32937 98816 2 0 Ontario Ontario 0 0 0 0 3892.97891 32938 1034 3 0 Ontario Ontario 0 0 0 0 919.38059 32939 100716 2 0 Ontario Ontario 0 0 0 0 2459.55175 32940 6634 4 0 Quebec Qubec 0 0 0 0 584.25833 32941 102716 2 0 Ontario Ontario 0 0 0 0 201.25152 32942 1030125 3 0 Ontario Ontario 0 0 0 0 1463.76644 32944 40625 3 0 Ontario Ontario 0 0 0 0 310.17561 32945 120432 1 0 Ontario Ontario 0 0 0 0 1003.62503 32946 120973 2 0 Ontario Ontario 0 0 0 0 8610.25560 32947 118117 2 1 Ontario Ontario 0 0 0 0 2006.55185 32948 127727 3 0 Ontario Ontario 0 0 0 0 1882.54698 32950 128029 3 0 Ontario Ontario 0 0 0 0 117.34429 32951 128336 3 0 Ontario Ontario 0 0 0 0 500.32239 32952 134717 3 0 Ontario Ontario 0 0 0 0 1051.60429 32953 14196 3 0 Ontario Ontario 0 0 0 0 659.73164 32954 149244 3 0 Ontario Ontario 0 0 0 0 782.30056 32956 162412 3 0 Ontario Ontario 0 0 0 0 334.79510 32957 162873 2 0 Ontario Ontario 0 0 0 0 2680.86399 32959 178036 3 0 Ontario Ontario 0 0 0 0 8834.60932 32960 1932 3 0 Ontario Ontario 0 0 0 0 6479.44099 32962 186652 3 0 Ontario Ontario 0 0 0 0 1337.03050 32963 18925 3 0 Ontario Ontario 0 0 0 0 988.29077 32964 19076 3 0 Ontario Ontario 0 0 0 0 2016.64552 32965 191511 3 0 Ontario Ontario 0 0 0 0 15683.01573 32966 202229 2 0 Ontario Ontario 0 0 0 0 6339.95697 32967 2033416 1 0 Ontario Ontario 0 0 0 0 15032.25556 32968 21242 3 0 Ontario Ontario 0 0 0 0 2875.29660 32969 217144 3 0 Ontario Ontario 0 0 0 0 534.09587 32970 216816 2 0 Ontario Ontario 0 0 0 0 4929.39194 32971 22707 2 1 Ontario Ontario 0 0 0 0 1128.79975 32972 226718 3 0 Ontario Ontario 0 0 0 0 762.91358 32974 227115 3 0 Ontario Ontario 0 0 0 0 2374.50190 32975 235922 3 0 Ontario Ontario 0 0 0 0 2706.99096 32976 2379416 1 0 Ontario Ontario 0 0 0 0 2341.57903 32977 238144 3 0 Ontario Ontario 0 0 0 0 4177.45126 32978 240515 3 0 Ontario Ontario 0 0 0 0 366.65271 32980 2360511 2 0 Ontario Ontario 0 0 0 0 1254.52290 32981 238322 3 0 Ontario Ontario 0 0 0 0 4918.75924 32982 2400511 2 0 Ontario Ontario 0 0 0 0 263.81500 32983 2410511 2 0 Ontario Ontario 0 0 0 0 2134.45231 32984 24666 3 0 Ontario Ontario 0 0 0 0 1507.67308 32986 250144 3 0 Ontario Ontario 0 0 0 0 612.74329 32987 254143 2 0 Ontario Ontario 0 0 0 0 629.90737 32990 25257 2 1 Ontario Ontario 0 0 0 0 5645.10475 32991 25806 3 0 Ontario Ontario 0 0 0 0 10871.19097 32992 25307 3 0 Ontario Ontario 0 0 0 0 319.29936 32993 257315 3 0 Ontario Ontario 0 0 0 0 2409.19898 32994 257315 3 0 Ontario Ontario 0 0 0 0 3475.99722 32995 259416 3 0 Ontario Ontario 0 0 0 0 4470.57951 32996 26246 3 0 Ontario Ontario 0 0 0 0 7669.32424 32998 265229 2 0 Ontario Ontario 0 0 0 0 19809.58066 32999 2681509 3 0 Ontario Ontario 0 0 0 0 15376.51748 33000 264021 3 0 Ontario Ontario 0 0 0 0 1274.13102 33726 858 4 0 Quebec Qubec 0 0 0 0 0.20771 33727 3951 4 0 Quebec Qubec 0 0 0 0 29.79554 33728 73117B 3 0 Ontario Ontario 0 0 0 0 3337.75594 33729 87373 2 0 Ontario Ontario 0 0 0 0 20.57667 33730 3957 3 0 Ontario Ontario 0 0 0 0 11.32631 33731 923 3 0 Ontario Ontario 0 0 0 0 2.61349 33732 1096 3 0 Ontario Ontario 0 0 0 0 8.80708 33733 134616 2 0 Ontario Ontario 0 0 0 0 4.80000 33734 1161 3 0 Ontario Ontario 0 0 0 0 12.50016 33735 170113 3 0 Ontario Ontario 0 0 0 0 32.00489 33736 177016 2 0 Ontario Ontario 0 0 0 0 4.35217 33737 198619 3 0 Ontario Ontario 0 0 0 0 35.30091 33738 211043 2 0 Ontario Ontario 0 0 0 0 5.22997 33739 20983 3 0 Ontario Ontario 0 0 0 0 16.12527 33740 230521 3 0 Ontario Ontario 0 0 0 0 6.05430 33741 23252 3 0 Ontario Ontario 0 0 0 0 5.48862 33895 469401 1 0 Ontario Ontario 0 0 0 0 9956.14834 33896 774440 1 1 Quebec Qubec 0 0 0 0 2233.85253 33897 5110 3 0 Ontario Ontario 0 0 0 0 6.25040 33898 1617 2 0 Ontario Ontario 0 0 0 0 1018.31597 33899 2611 3 0 Ontario Ontario 0 0 0 0 1026.04887 33900 8623 3 0 Ontario Ontario 0 0 0 0 1594.90198 33901 10524 3 0 Ontario Ontario 0 0 0 0 7604.13332 33902 3250 4 0 Quebec Qubec 0 0 0 0 6803.68787 33903 626138 2 0 Ontario Ontario 0 0 0 0 1280.75309 33904 3152 3 0 Ontario Ontario 0 0 0 0 9238.94949 33905 13817 2 0 Ontario Ontario 0 0 0 0 2883.33555 33906 1398 3 0 Ontario Ontario 0 0 0 0 3029.87156 33907 37921 3 0 Ontario Ontario 0 0 0 0 3189.46974 33908 7105 3 0 Ontario Ontario 0 0 0 0 125.31688 33909 76928 3 0 Ontario Ontario 0 0 0 0 1424.47320 33910 11773 3 0 Ontario Ontario 0 0 0 0 3.84797 33911 505 3 0 Ontario Ontario 0 0 0 0 3.01040 33912 65117B 3 0 Ontario Ontario 0 0 0 0 32196.25286 33913 6779323 3 0 Quebec Qubec 0 0 0 0 23.89666 33914 3224 3 0 Ontario Ontario 0 0 0 0 66.54604 33915 124116 2 0 Ontario Ontario 0 0 0 0 5093.19888 33916 1560416 1 0 Ontario Ontario 0 0 0 0 2.73308 33917 126249 3 0 Ontario Ontario 0 0 0 0 2.30621 33918 126149 3 0 Ontario Ontario 0 0 0 0 19.45972 33919 14675 3 0 Ontario Ontario 0 0 0 0 6.86009 33920 15535 3 0 Ontario Ontario 0 0 0 0 4.07594 33921 18485 3 0 Ontario Ontario 0 0 0 0 73.34586 33922 18745 3 0 Ontario Ontario 0 0 0 0 4574.55416 33923 23692 3 0 Ontario Ontario 0 0 0 0 5.35105 33924 246221 3 0 Ontario Ontario 0 0 0 0 4.88943 33925 2672401 1 0 Ontario Ontario 0 0 0 0 4.67564 33926 25742 3 0 Ontario Ontario 0 0 0 0 1506.51072 33933 245015 2 0 Ontario Ontario 0 0 0 0 60.76259 33934 244115 2 0 Ontario Ontario 0 0 0 0 51.75211 33939 2410511 2 0 Ontario Ontario 0 0 0 0 6.79802 33940 239912 3 0 Ontario Ontario 0 0 0 0 20.09077 33941 2327511 2 0 Ontario Ontario 0 0 0 0 60.25874 33942 2364511 2 0 Ontario Ontario 0 0 0 0 3805.02902 33943 21479 3 0 Ontario Ontario 0 0 0 0 2876.25733 33944 227615 2 0 Ontario Ontario 0 0 0 0 32.78339 33945 22707 2 1 Ontario Ontario 0 0 0 0 15.54474 33946 204629 2 0 Ontario Ontario 0 0 0 0 324.32285 33947 180320 3 0 Ontario Ontario 0 0 0 0 1426.74297 33948 170220 3 0 Ontario Ontario 0 0 0 0 10.66226 33949 13991 3 0 Ontario Ontario 0 0 0 0 5.25281 33950 12441 3 0 Ontario Ontario 0 0 0 0 15206.51205 33951 2273508 2 0 Ontario Ontario 0 0 0 0 1311.37996 33952 11944 3 0 Ontario Ontario 0 0 0 0 16779.36771 33968 2392401 1 0 Ontario Ontario 0 0 0 0 1637.79084 33978 88338 3 0 Ontario Ontario 0 0 0 0 21.32502 34194 356915 1 0 Quebec Qubec 0 0 0 0 6.12222 34195 7913148 3 0 Quebec Qubec 0 0 0 0 11589.71083 34196 3434640 1 0 Quebec Qubec 0 0 0 0 514.89013 34197 2216 4 0 Quebec Qubec 0 0 0 0 20.55538 34198 8104148 3 0 Quebec Qubec 0 0 0 0 8.26010 34199 7892344 3 0 Quebec Qubec 0 0 0 0 2484.78335 34200 8115117 2 0 Quebec Qubec 0 0 0 0 20.82421 34201 8168148 2 0 Quebec Qubec 0 0 0 0 21.84763 34202 4695125 4 0 Quebec Qubec 0 0 0 0 2246.48760 34203 856525 1 1 Quebec Qubec 0 0 0 0 1294.35075 34204 347740 1 0 Quebec Qubec 0 0 0 0 3141.12866 34205 2243 4 0 Quebec Qubec 0 0 0 0 21.50963 34206 8142335 3 0 Quebec Qubec 0 0 0 0 23.76473 34207 8262138 2 0 Quebec Qubec 0 0 0 0 979.80095 34208 1507 4 0 Quebec Qubec 0 0 0 0 21.21605 34209 3379223 3 0 Quebec Qubec 0 0 0 0 292.75561 34210 1904117 2 0 Quebec Qubec 0 0 0 0 20.13687 34223 8213137 2 0 Quebec Qubec 0 0 0 0 36.95911 34225 1758133 2 0 Quebec Qubec 0 0 0 0 21.08532 34226 863740 1 0 Quebec Qubec 0 0 0 0 5771.16478 34285 7986344 3 0 Quebec Qubec 0 0 0 0 44033.22819 34423 265148 2 0 Quebec Qubec 0 0 0 0 10168.47744 34424 383148 2 0 Quebec Qubec 0 0 0 0 23068.90380 34425 319303 4 0 Quebec Qubec 0 0 0 0 447.58202 34426 386303 2 0 Quebec Qubec 0 0 0 0 14194.90001 34427 1899321 4 0 Quebec Qubec 0 0 0 0 1892.30069 34428 0 4 0 Quebec Qubec 0 0 0 0 2432.26874 34429 0 4 0 Quebec Qubec 0 0 0 0 2859.23391 34436 0 4 0 Quebec Qubec 0 0 0 0 4581.96721 34441 140117 2 1 Ontario Ontario 0 0 0 0 374.00098 34442 141517 3 0 Ontario Ontario 0 0 0 0 1149.11129 34449 219718 2 0 Ontario Ontario 0 0 0 0 553.54799 34450 217143 3 0 Ontario Ontario 0 0 0 0 2500.71796 34451 1757 3 0 Ontario Ontario 0 0 0 0 1233.78961 34456 0 4 0 Quebec Qubec 0 0 0 0 2247.50054 34593 0 200 0 0 0 0 0 1878.12057 34617 0 200 0 mapnik-3.0.9/demo/data/roads.prj000066400000000000000000000007451262555547000165050ustar00rootroot00000000000000PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]mapnik-3.0.9/demo/data/roads.sbx000066400000000000000000000040141262555547000164770ustar00rootroot00000000000000' pA5L_3A:=25Z2 F( r z` L .4 f(   B( n0 p  &D n zd   P(:NZv0:FN ^v,,DNh(2:FNZz 4@p0$ *Jj(,$" 2 V zTL.,^ n(  "B fr ,,*>$f( 6Nf  *2N r T. >^0$(.F Vr  (28n(  H6.B BH !F""X#>$^ %n&><'~p'(( (.`(<(@)@)ZL)*^ **+@+^<++p,4,R8,(,0,- -$-@.*.\//.l/</d0F0T16H23 34"4644nl4456n7"P8v8t9v; <=?:L?,?@^d@AnB"BC$CLD D"D,DEz@EhF*(FV8F(FHG GGH4H`I*I>TItmapnik-3.0.9/demo/data/roads.shp000066400000000000000000020513041262555547000165030ustar00rootroot00000000000000' )b_L5A352=:AZ(z]>.9AKvV09AOk+z]>.9AOk+V09AKvPV09Al v;9AgV09AKv(}!29AG0R%49AJAa/-59Al 'a69A׫ގ[e:9Ǎ9+v;9AgpC"9A*_c7(9AM C"9A*_cG}E9A[XT(19ALX~9A9A{12>n9A)9ATRÑ9A1F9AImct9A]y 7(9AMX^Q[͆9A#~09AuQ09AuQ}9ATaXs~a9AvⓏfr9A!\st9A-%^Q[͆9A3Wn|9A@i9A#~(9A5UR`9A#~9A#~R`9A5U(R`9Ap DX9A5UR`9A5UDX9Ap `c׌9AOX 9AuQ 09AuQU~ΐ9A:L7X 9Ac879A6wv<9Af]49AKjZ9AW8| J@9AV0{Uc׌9AOh٬"99A2q/ Q\9ANR 4*٬"99ANR 4UUM;9AXp\%>9AA $ >9AQ#b;t#S@9A z;uB9ANnO} vh~C9A߳7xE9AD 2{3F9A(9"`1AU@I9AN9wT/T9J9Ab8i xN9A07 jNRh-P9Alb2!LQ9AUЛхs R9A0DnAWR9A;`vT9A\Ţw+BU9AfVU9AxW9A*wY9AیOFIZ9A)"\9A5z?Z;hi\9AP]+a9Aox B g9A0AEi9Al_tjHj9AyՇouo9At "ZGp9AaɨNt9AYaa`u9Ag4nAw9A۝e.ry9AiII|9An'p-ݾ~9A][}E[9A\r}m9A*t~_9A+9AMb*SB9AJ-  Q\9A2q/ P Q\9A>s9A#~ Q\9A2q/ǻB{ɂ9Ay7rv 9AXZ9A'Yٖ}Lv9A>sflr'9A)eS9A#~ s>.6A.6AH6 t>.6A@\Њo6Aa`:2Iq6AGp"Жi6A[6A hYd6A;ɆY_06Ay<%56A_$^!qHC6AxJ+N6A*A̴6A6۷ؿS6ATU6A<  z9A : Q\9A2q/ z9A :|`:|9A 6JF}9A4^}9A.=G_g~9Az!&~9AP0,~9A)) ,~9A%0Σ~9A0d~9AKGW69A} 9A|Xv|Ԁ9AZ Q\9A2q/ @Q9Ae@C"9A*_cQ9Ae@_Z9A/ O9Am0Cv9AUC"9A*_c p\Z9ANS9A^QY \Z9A^QYU9A Oa͙9A" /9A;WrI(y9A>ڞ9A?uK9AF05ʥ#9A&#ږʏҨ9A1 8>Q9A=f}S9AN(S9A"k;9ANS9ANk;9A" ]AP8A {9Ao"`82 ]AP8A@uDn8AV.x8A_zU8A - P8Aq;'`8AV" 7:8A<,́t@8A7p>t{8Axֿ8A-2ԚH8Av'78Amuӻ8Ab I'8AY|%hE?$ 8AT8A~Џi8A.#8ACZKɜ9]8AmrU88Aaw?sͳ8A"o.w8Arif|8A>Dmtb_8A&r%>8A)o8Aҫc<;8A:,\$abc8A:,\)M:8A{)>^ 39A/d]x-9An/W+lK<9AvV-R9A/7htT9AVX{9A,qsBY9A.>w9A Dly9Aygߝ9AsWz 9A>>O 9Asp ȍޠ 9AL 9AT-47?% 9AM"5 9Aw9lh 9AejwR9A'gආja9Akg`͑f9AVF)E {9Ao"`8($9AVNk;9A"$9AVNk;9A"@k;9A]@',.9Aj8k;9A"O̮9Aj8S,S9A/å9AԱ',.9A]@(iw9A($9AVN$9AVNiw9A(0D8A<-K'"68A>8#D8ADy#-8A<- 8A j8Apわ8A~\(ώ8A Wf8A Nڋ8A) x8Asi:b8AǴ> 8A{N 8Ar(wԟ8A %!/bI8ArXuep8A+k~;8A{yw8A/Y[ c8AC!Qiۘ@8A4X1 e\N8A**0#3ש8A8qbdy8A`A&-4*8Ac""3`8A9]qsʲ8ADǭ)ZRn8AY>G8A4(pd8A\s᯴8A6R> 08A]h߶&8AXWڶ8ARϟ(@o˻8AKH8A,9=K'"68A>88ٻ8AESiI8AR$ٻ8ARjb8AAvIeg 8A:3["8AW!.V[5$8Ai8K)z"˫$8A2&8AjA(8A7Ϩ?t+8A^CD6@-8A!5\/8AQG`*V08A? W)18A^ر,028ADeixF28A@]Q628Afصn38A/z! 6ZJ68A֎AE088AWXvo x98A+ŐM:8ADkfW:8A|dU;8A,,0%\M ;8At8x=8A3zUT=8Aw"n=>8AZ$J=@8AT^<Ȋ`@8A+s n'.@8A&K%L@8A/<|M@8AFO%:n%A8AHoBuB8AWy^s]wD8AˣhSiI8AE0k;9A,}8h9A"k;9A"j ¬9AGsBh9A,}8(SiI8A9NjDK8AESiI8AENjDK8A9H=6AqG6A<=6AqG)<&76Ao 6A,٫6A5-Yc 6Aֳ#6A<Hv;9AF_RI z9AI`5&v;9Ag q=9A3G ?9A(:J(]?9A`6|?9AI`51M.@9AN\C9AҰr.CND9ALжSE9A+En9%dI9A{8HpK9AHU-|ĹJN9A?0cFR9AZ š0tT9A>a"l-W9A }uX9Ahx'VY9AKx7}n$Z9AF_RI/k6[9A8IDYH[9AGD;4r\9A,EY0(]9AԠzER E]9A_&kEpE^9A $@Ȧa9A@}y*b9ARĈ"hFg9A+h`xyh9A}Tj9Ah$ySqk9A>nZ|tm9A㠙r%tn9AK>hnro9AP>Xp!br9A N[,^Lt9A)$?f7AxW[6Z+7j7A9du-j7A, lkIj7A&_k7AwY!gl7A\m7A\x< m7AK_!4n7A@Z+bo7A,!(p7A. *("v;9ADn14Ԭ9Akn14Ԭ9Ak"v;9ADXֆ9A /t',.9A]@ֆ9A37vӮ9A /t_KmU7A6Ls U7Ag5BZ7AOj_G*]7AD_7AF$C"9Aڙ𨗎%:A*_cC"9A*_c(-9Au{9A#;D9Ameo9Aj_'#c9AAh :A쎼2l? :A ~6A^6٧6AЂg@uG؏6A㉇"6A25J|Բ6A25̯6Atmiȓ6A䳥S[~6AAҘ\9[~6A_î6A jH6AO!6Z}8A(AID8ALQ+(#n6Ae 6A0J3#n6Ae 6A0J3,8&rl?6AԱ|d[6A.L&rl?6AԱo)ǯ6Awy@QHM6Ah|d[6A.L-(#n6AԱ&rl?6Ae#n6Ae&rl?6AԱ.r޺9A$;V09AKvV09AKv6/9A|]+*/9A c"26/9A5.9AqW.9Aph~RΪe.9A3‚sW.9ACeX9Me-9Ax!^%-9A@ \|J-9A?X@}+9Aӝ$}*9AwqF}'9AkWp&9AQi>c\%9A5;_"9ACVf`rp9AF=r޺9A$;/8sE8A$;r޺9A# Hr$sE8A0 t8ArwTks8A,Q+=t8A:~xdpT@8A# HraYs8A6{rϐ;8A{sl8AY|59A"vE9A19AOO9AҹjW9Ax=Zg9Ah6 RG9ASm o9ASm XGP9A`9AؖC9AS , 9ATg 9Aei1F 9Ao~ ] 9AXLfzT 9Ak 9AFPn 9A12s 9A4i (9A1Q8+V~n9A79A1kZ9Al }/ܚ9AI8B h]9A-?V&@9A^HVeeG9A3}r޺9A$;0@,V5AA]*~*e(6APO5,V5APO5*£Z5Aߌa\5A?yea5AT`H}d5Ap8e5A?/U,g5A6riIj5AGQR:ul5AY[8}m5A-r ޢn5AK=uo5A7K!\_p5AZ m9q5AK,a/[6r5AZIr5Agጡ!s5A2 s5A6Dx%Ku5AY 6/v5A`x5A@*}("*Dy5A+hB{Sz5Ao1}|5A0ywb65A-Z ڍ-5A/YϨ5y5A#qS5A.0ݡk@sT5AиPKElj5AW.L Krp5A o|W-5AB&5AbDw5A@5葕5A:8 i5AI !5A+珎y=N5A.R;jڕ5AqJ'5A ZCE-OJ5A;o9%5A+?*!5A^MR}(5A2[5Ab!$Te5Alj5A91#T٧5A]w5A#0Yի5A*U5A!+Lx5Ao& <5A q3m5Ag"ֲ5A|C<Գ5Af:Q`,5A,-;rfS5AK5A\a/I7 I5AwS`'5A# L$5AE@/i 5A\j4Y͋ 5A&c5AZl'6/K5A:'"b5AG%?5AVX95A#v{=e5AQt5AQ-{E5Ax1ھI5Aku`CC5A66Gk<94E5AW25AаKS(5A*rSG z5Ar zCԔ5A8%>5Af})5AYށ5AޠūW5A92o5A+ 5A9;!-5AmF29y5A'O^n5A/>85A%"oz5Aߦ#i.>q5A~LF5A F!f5Aڸ"=3F5AR/V5Ammh) D)5A)+y:5AQ>:p5AКG)5A뽳5AZ5A(A]5AhE E5A5ZJ6A$6AYP8 6A`UsUD 6A4@ٵ6A Qz$Y6AM& iLD6AYY,6AbBvb6AKNO<6AB4r6A,J55$6A$e n6A0 36A<6Aj4 /?6AԿ[ZW6Anr4P 6A\rouX"6AnOt#6AmiL$6AMi%6AV1.G&6AN:rY'6A2iNi*e(6AA]*~1PO Į9ArBQ Z}9AMD Z}9ArBQT)۬9A +AO Į9Ab* d9AM^(9AbKD9A]UqT:=9AMD2r޺9Az,N99A$;r޺9A$;F #9A [-U#9A/Z2sMY$ %9AXOt'9AGZM)9A=E`h*9AzN ,9A ;k,9A\%N-9A@u(b!-9AYdTD.9AILOI.9AILlon/9A͹O>;/9A BYg>r09ABu(b09AlRAk;29AK`t9x39A/Z2su149A^Qoav5v59A_QoN99AsRb٥M 89Az,3@bmm6AHc&rl?6AIv%bmm6A1T+5q6AHc{Zejr6AD`Emu6A{?taաw6Aʟ ~7ex6AF(Қz6A!cM6C|6Adɘ}6A|/X5~6Az6X!~6A^ Ƙ6A(6 Wmᰀ6A{[A6AM_ȁ6Ao}B6A~΋wsւ6AвrDz6A΀U6A΀ndυ6A 3%$y†6Aвr#v6Ah  @g6ASLI 6Aכz X,6APHt6AVAtw+)z6A\g88V6Ak?qTu–6A(T/ʗ6AGo.ȴ]6AsJ6A;]mú6AH6AIv­ԣ6A)ЉRj[6A؃&rl?6AԱ4Q9AEveO9Ae@5O9AEv+`9AXֻk9A5*+FeO9ABy 9Aj뛳ϲ9A9Ao9AEmfq:##"Q9A BN̚9A*>rS9AQq_g9ATdZg9Aq\%9Ap N99A $ i9Aɲ3[9A@A9A{Kn#9A mB9A0hmQ9Ae@5*e(6A+Ojbmm6AA]*~*e(6AA]*~9.6A? 06A@&26A"B@36A %q56A1n-JJ/66A\P%c196Av]u;6A+|(UF;6Azhz۬>6Aj> &H6@6A+OjXE6A/~E6AH3zOZL6An,P9U͎M6Aavݷ_O6A=HS6AA" V6AWtX6A C2.[6Aj^JGg]6AAkz^6Ap_i:`6A}[$;{b6A DfFd6AL; ׈wf6A!:_i6A 9Aɼj(ϐ?9AbcB9A5_D9A yq'FH9Aa.[bH9A'Ia4I9Af?c/J9A["ϙL9A$̤M9A/Y&P9A(C~;Q9AZaLR9AzxJ IS9Aۖ+'3$JT9AŨRU9A=JkU9AkɾրV9Ap$U9Ak(ndGiU9A=m70]VFT9AOndGiU9A=mndGiU9A=mf U9AI]VFT9AO80twP9AO]VFT9A}N twP9AT2R9A}N ]VFT9AO9(;S9Af0]VFT9AO;S9Af0]VFT9AO:`M 89Aco#GK9Az, M 89Az,C?9Aqa^jA9A4#;cYA9AxU$X) ^D9A~>28 1^ F9A[cK>-bڟG9A'}ȟ-b HJ9AYXqR#GK9Aco;D8ARBѫ'^8ALQD8ALQ~!qʀ8Aφ#Va-8A^blGn8APx$7@8A0'T8AdZ=8ABei8AEGb见8A iaՃ8ACݾ=ªzJ8A\,+f~8AjH?%a8A_&|vC\Ʉ8AXopډ8Apf>8A np)8Aq%8A~h[8ACs8ARri8A8b0T8A'wt#&l@8Aȏ9ѫ'^8ARB<0KQ9A;S9Af0;S9Af086R9AKhKQ9A=@#GK9AKQ9ADO#GK9Aco.R!YL9ADO|:/N9Ak/ wN9An{oKQ9A>0' bf9Aj ^G{9AEv^G{9Aj ' bf9A5O9AEv?H8,M9A֙KQ9AKQ9AӸK9Q9A r"2P9AxW=9}O9AkdRi]N9A[b8,M9A֙@8(K9A֙8,M9Aco8,M9A֙1K9AUcu(K9A$#GK9AcoAF{9AJOPC9A$*м3J5!͞9A[Q,*"9AVg09A7/ԾEu9AJ<B`j$:Aw(ȶ!:A^]u$ j$:Aw( [:Aavw(㺗:A0 :A8~7؆ :Ab׽l"O:An8A\7ޥ8A\7G-R>8AO<E8.w9AƓ1߅D9Ah.w9A069AƓ189Ah߅D9ASNF(.nr9A BM.w9A0.nr9A BM.w9A0G0G-R>8A BM.nr9AO<G-R>8AO<T8ACr1.nr9A BMHѫ'^8A`nSg8ARBѫ'^8ARB$K8Aaֵ2#8AYJ%R8ABx8A(!&˷8A/9j8AlL>k y8Ao*J9)Y8A-18AM9cs g8AgǷ"ϛ8A ӯk,8A? NF H8ASK0SVb8A<Զm8AcJNt8A)&8nqû8AJziԳ8Aܴ8A$SpG%8A PxK,8ADQ8AғL8A=BR_8AZHMg8A`nSIf'k/9A3ri79A8%Z6VQ9A8%M9A>Rg9AdJf'k/9A!2;<9A>E1v -9Ad *(N+t9A)OzT!9A2iŵML_69AY+G_b9A`+3ƦJ9Agaqܭ>a9A&AODC 9AİvX+訃9A> ۥ9A_$Ɩܥ9Aki79A3rJ(Eu9A3ri79AJ<Eu9AJ!U0 39AM>AD/9A  ag@/9AB< =-9Aٔï-9A(.9+9AF?*9Afd5@ R&9Aid54$9AṕhS@ #9AY'9/Af!9AQ[9AY'9{X 9A^\g9A0pQ19AdxLh߅D9AIO0pQ19ASN ߅D9ASN]Q! 9A{GBZI8E 9A )Ő| 9AlV*>֠9A!ޟ9AQ:9AIO'Pl9Ajv{9A0pQ19AdxM| 8AMonޥ8APxޥ8A\7V68A~ =8APxwb\8AGm2&8AY'~zݺ8A bt8A9PA8A4 v!8A9S.'ۘ8A 69d 8A; {oMT8A{ ʮ8AGYKUP0gB9Ai#9AdxgB9Ai#9AMOjI0pQ19AdxQ(39AigB9AI39AIgB9AiR(m|9A p?ݚ4_}9AQm|9AQݚ4_}9A p?SVxp}9ACǧ69A#~Vxp}9ACfB9A:@Tk'ς9AMzrg9AC8Aa/l| 8AMonV(Vxp}9Ae6Y Gk~9ACVxp}9AC Gk~9Ae6YWp1r}8AIPWܢ5@)s9A BM .nr9A BM=9A}59A&jceWy8AӲ%11r}8AN8)8AUY ŋ8A5b9A 5@)s9A]5x{f9A)&YCy8AIPWܢXX4~s8AOCy8AkjDc!4~s8AOE 8A0mR8A:XBS/8AB8J8AkjDc!Wli~8Aa}7]?o88A*5ڇCy8AIPWܢY`4~s8AOG-R>8AO< G-R>8AO<Cp8A]8A5 *ެE8AE祇8APy78AV &~tP8AP0B8A}GQ4~s8AOZh| 8A4~s8AMon | 8AMon=v8A3E8AE{w8A v4z&^P8Aݩoc ro8AB\hXUs8A7RuӦ8AF!ny,8A4~s8AO[c׌9A3|o9AO5ƛS9A3|Kq9Aaf9A!B9ALC8`٤9A>vwn^9A[{ y 9AY9Ah;9AИ$Xߩ9A Xn;,'9A,O-ʾ9A;8iٖ9AhCi]9A{7jo9A,_藗9Av`e&bk9A dB=9A#}s5‚9A49A`B9wn9AxnW*V 9A2ΞZg9A H~eOm9A$%e9A!M)c׌9AO\)RA/9Ae܎f8,M9A֙)RA/9Ae܎f8/29A6=59A\/XP59Ar!L2Ә69Aaۃo89A\89A7u :9A#pA9A\~%P>C9AT,(_D9A.I<E|҅F9A0YffH9A|-S9K9A#@tۀ|(L9Ao dL9AG8,M9A֙]8gB9Ae܎f)RA/9AigB9Aiu 9A$ξ-9A:.T)RA/9Ae܎f^X 7AZ>~kL7A@ 7A@MX7Aϻ @67A2pX7AmΕfkL7AP~_Xb˵)7AZ>~v7A,b˵)7A,+7A7\E7AעI[3 7A UWu7A2X7AY@Ryo7AW>^v7AZ>~`(@@7Ac2v7AZ>~v7AZ>~@@7Ac2ah<^9AJ39AI <^9AJCk 9AWNzT 9Aa%-c=| 9AU|Z9ArmkZ9 9AlM9_9A\-;9A9AuU@9A7,؋eC9A%mУ9Aal5D9AB9AKхo+:w9A+19Avߋpة9A"gX7à9Az|9ADO;9A=}C 9A鴴SfX^L%7Alpr[Yz7Aj^L%7Aj!֢m7AEŸ;f%7A݉3թ 7A^%Xx 7AMg7APzVƴȕ7A(G%r[Yz7Alpgh;M9AL\lW9A3r i79A3rњJ9A l.9A| 5lW9AU<7^9ANN ˦9Ao QGt"ݦ9AJx+]9A($ 39AT,;M9AL\h(C 9AL\;M9A鴴SC 9A鴴S;M9AL\i(r[Yz7Ag~8ae7Alpr[Yz7Alp~8ae7AgjP!o8A/<䆔r8AEGZ!o8A/<ֵ|o8A 1Qt.p8A@>tx&r8Aw2kk9fr8AܽRr8A\dp䆔r8AEGZk(%o8A@7A!o8A/<%o8A@7A!o8A/<lP)c"u8AqD0 G8AFB6mF8AN`x^ sG8AVDH8A0\p4I8Al;mԣK8AU^þ,Lf?zL8A5gEM8AjN|=kL8A:rT~1cL8AhJRL8A~&(3M8A M8AB-{,Go\M8A[Y[gN8A:@#O8A_Gy.i7oO8AXdզnԔO8AleCO8A`4pO8As=jP8AǪ9%h/Q8AA@XcXkQ8A,)|P8Acz:̥GgP8A4Ι1^P8AGtO8AwO8A P-N8A}a M8AE yEL8Ar~K8AV!tnKK8AIE4-+pL8A# en5L8A 2`M8A:E㷝M8A;>ϴ]M8A?kd(vM8A2ɎK8A~a,$VJ8A\SOFJ8AZʌaRI8ACގSI8A^Y|>I8A:A)ـ I8AtN!ɍwI8A4wmlZI8A vٖyJ8AsV|L8AHk <֏GM8A" M8A _rH' M8A5XX(M8A1ih9M8Aip| ?ԑN8AqluIx/O8Af2 O8AQyl3tT]P8Aezc|P8A_YQ8A=%wyR8A@&( DR8A2YNR8AtM]4Dq(;M9ArCmG<t9AL\;M9AL\<t9ArCmGr(YNR8A@93YlR8AtM]4DlR8A@93YYNR8AtM]4Ds Z}9A| c@+9ArBQJ9A| c 9AiOYw9A@+9AW*P+M9A Zpp"f9Aǟܾ9A<aNR9AT{ 9A /9Afy(9Aڸe4&a9Ah-9AI C79AS`T'o9AW) g$w9Ae F)~9Aez 9A| cz 9A;>eJ9A| cv0ҍ)M7A@f(Koe7AHL8ҍ)M7AHL8JmR"7AQ(Koe7A@fwXhU|7A@wiXp[7AF(*hU|7AF(*B>}m7Aef 7AـgXp[7A@įG7A@ߕ] 7AjB+PZ7A NDO7A@wix`Ѧ9Az m)RA/9Ae܎f v39Az mѦ9A~#WOm>39A@ZN?BMi$9AJWe}&9A欠2z&9AЍ0@ )9AS~,9Aoy )RA/9Ae܎fyH 9Az mv39A:H 9A:Ls 9A`[z 9A:oQ4ae 9A+xzF3JA`9AFVRz9A  #9A>9AH [9Ax_9AMGtB1bv9A Mަ9AoBM|9A@ggIvn9A@) AX9ACq9Ajzw9A@HA+iv39Az mzP͍n8A}ƾy4gfo8A@7A}.8o8A}ƾy4gfo8A#QmX^.1o8AH] ߑn8A@"FK͍n8A@ n8n8A@W&%o8A@7A{(v39AXf{IJ9Az mIJ9AXf{v39Az m|H# |8AJ%8A-g3# |8A-g3Ϧ|8A(FSN|8A@H#٭V=\P}8Ak$VvV8A䍄0%8AJ}0\t m8AyG:}.8o8A}ƾy\t m8AyG:E?n8A[}.8o8A}ƾy~8,M9AcQo9A֙68,M9A֙JMN9A_@_RQ9AD`-Q9A]{`3PQ9A_H0m9ARF>9AmldX8?9A-I3t2QH?9Af?9AI/n>9ACM.k =9A =`K;9A0vI]#N/C:9Ab"*gA+|I 99ANJy,99Aj\8:9AOHc\ _:9Ax8H;r:9Ac4{:9A(4"m_9:9A" c99AlvH{99A9#w,V99AK(/w,V99A@Ae99AT4{:9A_cQ^;9A4f+2?<9A7cejJ<9AT:uaz=9A@{f_WJ>9A=_⡷@9ABoU*2B9A:ĨzFybB9AHԀhB9ACYUWC9AI)fC9A(;֭~@D9AnCE9A@Us_G9A)XH9Ag⻺"J9A]nYv^J9A@pKPR\fJ9AIɽDK9AxѬxAK9AABR9A,Uֲ!P"V9A~~ E⑿H8AjԳ "8A!E⑿H8Ajj8AwOիP1H8A@;UGpN_8Aj{Ox]ې8AۢIEA58AM+q(  8AR" e8A+;g 8A@d UM8A[ͳ%8A}( @Ȗ8AZ/i 8AQk@8A[+]Nۘ8A(hm{HԚ8At%68AȋzJ'\<8At&8AKtf}Dؠ8Ad`MPq8A@ RK"8A["L&p<8A(>8Aw"ؕ8AܔZ8A{XTo\[iB8AKTSr˥8A{k5Dǖ8A% ߙ:8A18A_h|Գ "8Ad珂TǨ8A( 4S7A{{7A@^촲 4S7A@^촲{7A{(|uk8A@\t m8AyG:|uk8A@\t m8AyG:5 Jf[8A@|uk8A&> 5 Jf[8A@b}ϫhvl\8A<]8A@kXo_8A@ni`8A&>mSXZPb8A@*sr4Ϲd8AjX4C#g8AkX[d,_h8AkXDi8A@l/Qj8A88EYj8Ay|uk8A@(j7A@Ϣ{{7A{j7A@Ϣ{{7A{HDO7A@Ϣ{j7A@wiDO7A@wi+67AT۰p7ADA/ r7A@𓩴|,7A@~3Jj7A@Ϣ{(IFCGs9A̗gfw9A@L}&IFCGs9A@L}&fw9A̗gH+w9A@~:jZj}9Ac-+w9A@~:R~3x9Ay9Ao"6|9AfNSI}9A  jZj}9Ac-(fw9A@~:+w9A̗gfw9A̗g+w9A@~:PQx8A@_f Q88AQx8A@_f/SQy8A@80͘ U>Wz8A:p1v8A@Qx8A@_fH5 Jf[8A@ e_^8A@b}ϫ5 Jf[8A@b}ϫkë[8ARQ.:1/1\8A }\8A\Ĕ]8A_^8A@ e8IJ9A&@Nd|q!9AXf{IJ9AXf{ '~9A#6 9Ak-d|q!9A&@NKG8A@+&HlU8A6ԋ/KG8A@+&WUH8Anq*J8AhXo K8A؅{lxd/L8A EިCGL8A@<̡ݝYL8AD$R L8A@#N7AIwGzż7Acwa 7A6Q;#"v7AUġy(I~7A4)TA7A %=7Ab5Ͼ7A17A@] {$N'7A"t%ɻ7Aa&DP7AZ(oV "17Ah42-7Av]N?7A=ȡ~*'/7A'i=D7A@!Wex 7A h]z7ABi''\7A@<:o<7AƈEp287A%jDO7A@wi@pX8A@; (_^8A@ epX8A@; (cŽvZ8A$V$~r\8A(pl)^8Ac_^8A@ e@clg]V8A@; (pX8A*clg]V8A*ZnW8A0L6\X8AԖ7X8ApX8A@; ((gh X8A4)pX8A@; (gh X8A4)pX8A@; (hؐ8AKb-/28A?zlK ؐ8AKb-/pa48ArW*lF.8AY8yo8A(w>M b@8A b32"8A"~'x>8A?ȇ8AXfau"8ADhS28A?zlKh͚ l9AKϓY;Qo9Ac ͚ l9AKϓY;&V(Lm9A@Ȯ6m9A@]-o2Tn9A@%ΧR"=zbn9Aj:71ά/n9Aٽz2EӰn9Aj|Ko9A:;:Ro9À4Qo9AchKG8A ?gh X8A@+& KG8A@+&-:-H8A+ J8A/F /J8A@aH$<,aK8Aa0DRPM8A4$ 6w +qP8A ? R8ABP9NlT8AmN2gh X8A4)P!P"V9A@SWMlaf9A~~!P"V9A~~|ߟ}[9A@=ܩsFi\9As~_ ^9AiGBa9AX*|0Le9A"Hlaf9A@SWMu|9Ai忾VH 9A:캤59Ai忾V[9A&HsLpS9A9:2o9A6;p9A\l 9AKf9A15/p-,9AGuөo O9A*OGB9Aau|9AG?]u 9AB@v9A˾}9A ]9AJ̶9AH 9A:(HiJ9Ai忾V캤59AQRHiJ9AQR캤59Ai忾V@r8A=\WHiJ9AGYKUE ʮ8AGYKU2~ޡ8Aؙw] ':T8AHvp>8As@_C8A,}`4~8Ajr6 t8Ao X 8AwUF;W8A08ArkAP^t8A;Pzik8A7B3@P?8A=B* 8A-tAP;8A>e\P;8A{P;8A^kXѶR"8A 8AT[0r8AJ1B8ALQ\X8AqLL38ATmN5E38A38ATђZG8AH+H|778AdVO8A{O#8A7x8A@q"&8A{)zj8A ֖Y89o(8Az-Su8A@ 7(#qU8AA,f8A@bUDv?8A=CCN8A@ўC6U8A Br3B}8A@8Ay*N8A@oD1F68A6b.?krg8A=\Wuz8AAW >8A6s>8A+88A@` ?[8A"HiJ9AQR0 h5'9A@AWScT(9A ]i h5'9A ]ic'9A'|@3T(9A@AWSc07$9Aj h5'9A ]i h5'9A ]i7$9A?xr+_Rg&9Aj@B6o8A_;t?%Ss8A@+B6o8A@+CFp8A@v\tq8Ar\Mq8A۹s?%Ss8A_;t0_:9AazHiJ9AQR_:9Aaz9A@1dHiJ9AQRHP@l9A]si,n9AKϓY;͚ l9AKϓY;P@l9Ap`Tsi,n9Aϰh*c0m9A|z3'm9A.gF SR6m9A]8laf9A] SR6m9A@SWMlaf9A@SWMeh9A@W ki7l9A9 SR6m9A]( SR6m9AكF$ n9A] SR6m9A]F$ n9Aك8?%Ss8AL'^%w8A_;t?%Ss8A_;tu8Aj;{x=v8A@^O%w8AL'^(Lw8A@n75%w8AL'^Lw8A@n75%w8AL'^(%w8A@P,kHw8AL'^kHw8A@P,%w8AL'^`-p9A@˓ؙאj's9A@L}& Q7p9A@˓ؙ-p9AfBr9A}lVeJbzr9AyƱWs*r9AB$&ϩWr9As_`io21s9A`אj's9A%IFCGs9A@L}&_^8AQLw8A%_^8A@ ejBfa8AJ *b8A (e~d8AT'zU`qf8A%duiWg8A5hmxh8Aw&/6h8A@%qW{gr8AQv0Pt8A@ޤ4Lw8A@n75B6o8Aph8AnB6o8A@+7o8A9 wzpq8AnmUr8A7\Lt8AJ,*Tt8Aѽ/Mv8A[t0!x8A@wۨ.Ez8AY4R|8A6u9{[o~8A3*F:ǭqL8A@-ZY6}" 8AjEbRĆ8A@v-l#'8A~ĝ-{KD8AƐD)Ʉ8A@:֬ph8A0lqЏu9Aԧfw9A̗glqЏu9Aԧȹ~w9A@Pfw9A̗g0Q7p9AԧlqЏu9A@˓ؙQ7p9A@˓ؙ#s9A@" ^*lqЏu9Aԧ0ؘ!k8A>ph8Aؘ!k8A>%8A5ph8A`%w8A>ؘ!k8A@~ %w8AL'^ljx8A@~LiZz8An5ލ~8Ay׶\x08Am4 KS(8A^YRx8A@O. L8A6ؘ!k8A>0캤59AwRu[[9Ai忾V캤59Ai忾V\9Ay(R)[[9AwRuj$:AtI)[!ߛF6Ae˺y6Af˺y6AZ_gV˺y6A/A$-#6Aa<7"w:S\6AGjp!16A 6A2X96AC葒YҴ6AOnB6AI:j'AqiT6ADQMoH>KC6ACOSs6A)2h|6Aٴ 0xC*6Ax[ّq6AZ6Ae B׃aw6A":TxZ6AeTѽ6Aju=Y6A%a*E6A%jUI 6A.Z96A| .^6Ac2?P6A?]aKҔ6Aczz˫S6A &6Al%6A,8#6A9I˅!r6A  v;6ACASN6AcDy'6AK*!f6A4){o6A.(bjپ6A1MfŻ6Ac/J6AP?B96A6feF6A堘:6A֗'6A3,V4'6A+VGCz6ATWN{8O6A&Hxf76AJ5|u@(\u6A6AK0`6A ="10`6ÂC6A@C6A T#RnxJ6AHcZx-e6AhymC/46AVZe{ƻ6A.#3&6A'dyDdzٖ6Aa2 Ì6A@{7yQ6Aqpp[]V8A 0:Z8A@; ( pX8A@; (MX8As=m.!Y8A q:Z8AUx"bZ8A5z$Z8A@\ْzW8A&Avh~W8A@-BƀlV8A\v,W8A&$[]V8A 0=6Abmm6A1TMbmm6A1T\l6Arfk6A6i6AD&Dbah6A}W<>Aih6AzmTmg6Aڄ"a [f6A d#$cWpe6A .Vn_رb6A6CR)_6A9>=VV]6AV=#|]S6AUDLS6A̮nOrG~S6Ab>%IV6AyXIV6Ayi`wFW6AB2|tX6AX0m!X;Y6A]:ӡY6AaC7 [6A ɕZo-]6A4ΒEW<$vY^6AU+^6A2=P8]6Arz(t\6AMi@(\%X6Abx7Q6AiP6A/=O6Al"I6UO6A_D ?tM6Aռ\skL6A%Ź7?DJ6Ak104jI6A}t[:yI6Ab*.M/J6AA]!K6AQ[][5L6A-; jUL6A7H`}hL6Ai / jiL6AsywbmcL6A@Zj8|ҀML6AtЫxйmnF6AzˉOIB6A'c`x3@6A@i3˲6@6A@i2:?6A@/KH,?6A@խDiXa>6A%=6A@wX}t=6A_8AM q׸ń8Aj=N捌8AM !6b8A@}p#Z8A0{0ձ8AɃ98Arq׸ń8A Zy8A@*WL@⑿H8AC(c+H om58AA>_8A!W0om58A|8A@_6V"8A_.xE⑿H8Aj@ؘ!k8AM =N捌8A>ؘ!k8A> }"ڄ8A&HUj)U8A@+3p8AR=N捌8AM @L"F݊9A/UaL"F݊9A>d9A$%y 9A8Yƌ9Aypa]R+]9A`9O)h9ApYVS("b֔9ApYVSO)h9AաSB"b֔9AաSBO)h9ApYVS(.hY 9AQĢY']X 9Ak$LOV.hY 9AQĢY']X 9Ak$LOV(Ti9AQĢY.hY 9A@`Ti9A@`.hY 9AQĢY8龪8A7cZBf8A!龪8A7cZAG8A7Q.IȖ8A@)F5&Bf8A!H=N捌8A(T`ɘW8AM =N捌8AM O8AH Ύ8A@jwMg8A@.ɘW8A0E d08A(T`']X 9A@ r_Rg&9Aj']X 9Ak$LOVzOh 9AQX 9A˰fnr9A@ r0%9AQ]`qgJH9Ag0gAV19A0Jw%9AQ>4Dx9As%99A@{y 9Ap)MϽk>9A~ Ghm9A3VPl"9A0-V$9AS9)|K%9Aw_Rg&9Aj(748As d08A(T`748As d08A(T`(.hY 9A,4u-S2 9AQĢY.hY 9AQĢY-S2 9A,4uH7.668A){A28A@g'"@7.668A){AI>@8AÑ^imgT8A6rg8A+XC`xjhB8A٠6U28A@g'"@(E*8A*E748AsE*8A*E748AsH@*8AQ46[[9AwRu@*8AQ46hn8A@\~m8Aqt_d9AڶQwVe9AA,vc"J!:A[0Hz:A@?1, :ABaR:=v:A؅Bښ:Aki 9d:AWj93:A S:A3=Uo:A2p<8C:AV(H:APx2 :A@j0Ǧ 8A)4F39A:RǦ 8A)8A:R4F39Aʒ%(x2 :A_I4ߛ :A@jx2 :A@j4ߛ :A_IPj) :A(7a'7a":A6 j) :A(7Dp~::Ad&Aom:A}}:AjN#gÛR:A@&!:AZya'7a":A6 hT(9A#ĞO(G9A@AWSc T(9A@AWScXM)9Ad{u*9AfZFљЛ+9A@:3.,9A@:f09A@MoD~D*29ApآyH>9Aǵ[`wzVF9A=SO(G9A#Ğ8$7lͲ8A@nYI8A $7lͲ8A@nu`Ce8AbfZ[8AYI8A 0e9A-O"b֔9AաSB"b֔9AաSBA*9AG_e9A-OH8Annh.(8A@P8Ann%N8A@ϊ6.͝8ArשY8A0R\ 8AX`h.(8A@P8_p%b9A,c9A@M$ _p%b9Ab9AC t-׹c9A,c9A@M$ (J9A. x2 :A| c"J9A| c"~5@9A8zi9A*&Hr\w9A(9AZ>HW9A,޼lqN9AĨru} 9A@s9AbD+9AASYs9A@[sЭ9AlX:9A/b/oq9AVʠr09A@ v9AaD6vxC9AOa$ 9A' 9AZ# U1`9A[_Dʋ.9Av,o$9AN8ˁ9A6o Lm9A@_9AH\pY)9A. *:AyKm۳ :Agr;:A޼P:A1xhN:A;:g%qk:A@.t:A4x2 :A@j8lE9AAf+O(G9A#ĞO(G9A#ĞF9Acr{zVF9AV̛lE9AAf+(e+ce8A)0$7lͲ8A@ne+ce8A)0$7lͲ8A@nH_p%b9A C[l9A_p%b9Abc9A~Zz2Gf9AnTai9ACu$-k9A1[l9A C0[l9AsQxKn9A C[l9A CThkm9AGn9AsQxKPe:'Wn9A LBr$q9A@N.e:'Wn9A L Ip9Aekʼnp9AFXq9A@t3Pq9ABr$q9AKDnwq9A@N.(n9A Le:'Wn9AsQxKn9AsQxKe:'Wn9A LPYI8Ag@QNiLb8A YI8A 08Ai .8Ak(NiLb8Aj ݗN ܽ8A֗8A?D, ȣ8Ag@QPDg;:Ahr"Sg:AiDg;:Ahr"Sz}hD:A yp*:A(i/2:A@*>*U4P:Ai n:AXL g:A)\pj) :Ahr"SDg;:A(7 j) :A(7y!8K:A=-VO:Ay;0"x:A)0:A7B:A@a"%'{:Aw(`-:AEEC$Py:Aj$F1ȶ:Ac$KDg;:Ahr"S@9꽬8A@t:Ve+ce8A)09꽬8A@t:VEȧ8A@I:<8A@~E.8Af"Fe+ce8A)0/I8A@t:V Ѧ8A(9꽬8A@t:Vw(>8AjAW?8A7W5Dʎd8Au%u+e 8ArP\=\N8Ac`8A5/I8ADIC8A )`L+#8A@X8Az%dl}8A@SJ8A(j8AOu{ib[=8A{$E8A1c8Af( Ѧ8A(8(~q9A$2Z)M t9AFb(~q9A$2Zh?r9A@p\9wjs9A()M t9AFb0Ft9AmwcH΢w9AN^Ft9Amwc9GJcu9Ab7H΢w9AN^0(~q9AmwcFt9A$2Z(~q9A$2Z]Ns9A@LFbFt9Amwc`J܀9A^xL"F݊9A> L"F݊9A>JZA9A\Jhǥ9AHaN9A@ #ԇ9A@&C-V7 89A %GӘDŽ9A&Gr/9Aٌ#J܀9A^x@;ѷ8AK7, ȣ8Ag@Q;ѷ8AK7h8A]T}w~ļ8A@ j0j#`8AJ+V, ȣ8Ag@Q8wm9A"h(~q9A$2Zwm9A"h#o9A;n3p9A_x(~q9A$2ZHoIm9A"he:'Wn9A Lwm9A"hoIm9A-9km9ApmuX׋m9Ar7` n9A@FUe:'Wn9A Lx=dǎ8A@3= 8A8A~^%Yy7 8AoC;ѷ8AK7(e9A萆@\#9A-Oe9A-O@\#9A萆P04P8Ait8A@t:V04P8A᝜8A rJu8A@Fit8Ae>}Y8A@z+=8A9l^9꽬8A@t:V0ݧ`9A e9A-Oe9A-Oz'n*9Aheݧ`9A X= 8A+j(x 8A@3= 8A@3^z8A(œ";08A@y08A,tjwj8A -hP8A\͜cdU8AЂ}(x 8A+j8֝e8A<%w8A@g֝e8A<%<8A;Eow8A]Iw8A@g8{8A<%֝e8A5&<{8A5&< (j8As/8AR=֝e8A<%xX@O{8Am t8A!#e8At$zz08A'{8A5&< (X@O{8A7`I~8AmX@O{8AmI~8A7` 8 Zx8A%_QX@O{8Am Zx8A%_QL y8A@T߈"7pz8AN:X@O{8Am @w8A#PA)*8A@gw8A@gB;8Aoӏa8AR 28A7VA)*8A#P P48Adz? +8A@[ <8A@[>8AhP<{8AXL548A@V<8A'VBYp8A|? +8Adz0)38AX (x 8A+j)38AX b՟8A@(x 8A+jXA)*8AlA)38A0M~VA)*8A#P?H>̄8Ai.> +1r[8AlAblZ8A@ s998A[Di0V8A0M~Vm@8Aj J)38AX Hwm9ASo\Ho9A"hwm9A"h" Քm9A@ED Pm9AyDz򃮮on9A bmn9AR|o\Ho9AS(:Og9AԬkķj9A@bN:Og9A@bNkķj9AԬX-S2 9Aﺯ:qO9A,4u-S2 9A,4u4 9A@ٿۏKF 9ASf16s 9AY̢~ 9A@KT] 9AʤI;79A)˵:qO9AﺯX p9AO6mFt9Amwc p9AO6ml!Yq9AE#9q9ACxq9A@jejr9Aњ g\&s9Ae%hi/s9A@xFt9Amwc(o\Ho9AO6m p9ASo\Ho9AS p9AO6m(kķj9AB9#Gk9AԬkķj9AԬGk9AB9#(eml9A@(}F%o\Ho9ASeml9A@(}F%o\Ho9AS(Gk9A@(}F%eml9AB9#Gk9AB9#eml9A@(}F%`? +8A?+R,%88Aɝg ? +8Adzqn8A* Lq8A!Km8AuTi8A@j&798A?+8AкI8AɝgR,%88Aݒ>+Pvp8A@/ Zx8A%_Q Zx8A%_Q`n{w8A@^ v8A@Ekkk)u8Ad4Եt8Aslr8A*z$vp8A@/H}9WI8A81A)*8AՉ.}9WI8A815̎8AT#B?!8A0 8AVfK8AՉ.A)*8A#P0}9WI8A81֝e8A<%}9WI8A81Ef8Ac!֝e8A<%([Fo8AEJ'{5vp8A@/[Fo8AEJ'{5vp8A@/84VI8AEJ'{5[Fo8A 0D[Fo8AEJ'{5@o8A3"pn8A5ti?n8A@bn'\.m8A5d#,k8A@H"ahi8A@Cag8Aԗf8AT/Y f8ADЖr ږe8A@#/$e8A@ǁ-S?c8A/x-ͫFb8AnP +a8A@Un94z`8A+GŹ^8A@o':Ȯx^8ATgA^8A@ $P]8AD" ]8AbQ&^8AY/R]8A_)u]8AH0}6\8AarlKc\8A,j|poA[8AKo*c6\I[8AjaoM9Z8Azq7Z8A@R=sSY8A@p3uY8ARsu+X8A*r>AX8AOYli(X8AdwX8A@(-]wX8A@dTBhX8ABL/׉W8AYnuB0V8AJ9 9J|yV8A4Y4W9&V8A#h#2--U8A)&3/WޘS8A@+D*>jQ8A"= 1ٿ{\K8A@ I8A:LFI8A,;4VI8A@w>Ys?ҵI8Au ԾzTJ8A62´J8A9ȁ:1cK8AiZ L8A@txXҙL8A.q彖M8ADP8AriqeP8Aa*q1HQ8A-G0 YNR8As~k\(4R8A~vSS8AoXr2S8Aђh^jW8A@!gY,D̎AW8A|7/JW8As)V8A;6[]V8A 0( $9Av8@\#9A萆 $9Av8@\#9A萆(=ˠ8A>}9WI8A81=ˠ8A>}9WI8A81 H h6o8Au?.7d8A/T h6o8Au?8AND+: !8AgK@:f.8AgFš+o$8A6.7d8A/T!0h_s8A@FBE{8A@Z=5h_s8A@FBE[P9t8A@1@{8A@Z=5"0[Fo8A@FBEh_s8AEJ'{5[Fo8AEJ'{5,p8A@~=h_s8A@FBE#hKޞ8ABNc[8Ag@Q , ȣ8Ag@Q*8A}{̧8AK~8A4?8AL^6X%8Aa'/Y8A@NS Kޞ8A;kb[ 8A@xBDMk 8ABNc[$h{8A@|c=ˠ8A*03 {8A@Z=56T|8A*03Ghπ8A_p8x(B8AT3<;8A@왘7k98AM}: JS8A uUo 8A@|c/Kщ8A/_=ˠ8A>%yC`͹9AqOhR*9ArCmG<t9ArCmGY9A@o[ͳ9AZp u9A)' 9ACyC`͹9A oW&59Atr9AHI_EjAƺ9A@"}]9A@Si`9A)/U9AL V[;m29AP<ا$9AY@ktj9AA;'e;G9AZGعXY9A@BjlHH{9A}{岭9A@. ߺL99A2?0 'G9AC0xra9Ag<1fOhR*9Aq&(@\#9AqOhR*9A萆@\#9A萆OhR*9Aq'8> 9A9z%f19Am87> 9A9zG9A@V|<49AGv%f19Am87(͑w17Azj7A@Ϣ{8j7A@Ϣ{/w't7A[׈)7?7AgBb?7Aaj]r7ASg~i7AKP7AIahq7A1[_7AMh;8( N7A=`5*7A@oj2CM*7A0JrhR7A8Vawּ7A&G=mN7A}W7A@Kb- 7AbHg7A 17Aiq7AGW CP7ACP7A@\am7A:d N7AF\+r7A4})7A;WBYb7AF,J7A/ёMeǢ7A[Oi7AOK7AMCPFIr7A0JSkJ7Al&Q97A@+TRʚn47AGY c'7APtjǣ _7A?sT7A@|+7A@axR-&7Aj7AٷO*g%7AW!'7Ar/@!7A^)! 7AL7A@Q7A5p*讪7A@%͑w17A^AԊ"WD7A@*g?Wn\q7A@<{e/17Az)8lHf9Ak`:Og9A@bN -g9Ak`{޳Yf9A@)ZlHf9A@N:Og9A@bN*@<|51g9A,΄I2j9AԬ<|51g9A,΄!g9AvxI2j9A@DG?tjj9APN#kķj9AԬ+( -g9A,΄<|51g9Ak`<|51g9A,΄ -g9Ak`,wJ2H8A6ډ B8A@'2 wJ2H8AJteA8A@ <ΐ8A܃~2+_8A@0QW8Aʙ/1_%8A@)A c8A{$ 4lɐX8A@'228AlW% $t8AGM׸?8AQ'd>"8Aj_= B8A6ډ-0OhR*9ASG]@9AqOhR*9AqS%b9A@Oz]@9ASG.0VT8A@a0? +8Adz? +8AdzCv8AaTwVT8A@a0/( B8A@a0VT8A6ډ B8A6ډVT8A@a00(> 9A@pR| [o9A9z> 9A9z [o9A@pR|1`'l9A`j) :A(7 'l9A`E{#t9A@ ̽i9Agk$xh!D:AKIOMl:A@%AF7A2zJ7A^$7A" g7A@ј}7ASzql8l7A7~IZ7A@w{`c7A@o|L×7A.Yj[Z7AJhWrg7A@c)/FFw7A/ 7AfM 7Ae{7A{3( [o9A[9A@pR| [o9A@pR|[9A4Hu+l8A@γ=ˠ8A>u+l8A@γ?j3z8A@DQv#8A8׏ft8A@ʐuY[8AJf=ˠ8A>5@L49Ab۵ $9Av8L49Ab۵ɵI9A@G@9Apc:Ǯ9A@;kaI $9Av860/17AJt7Az/17Az; #7A@ wSJt7A7H'jn9A3 p9AO6m p9AO6meo9A@k'jn9A$wz$o9A׏fGp9A/짭V&Fp9A380g29AE+ݧ`9A ݧ`9A g29A/AML9AE+90[9AE+ML9A[9At+L=9AV>ML9AE+:8-9A$v))9ASG-9A$vsy9A~))9A ]]@9ASG;&t7=9AIP:/ 9:A@Ӎ&t7=9AIP:C+r9AZQR9AVgr9A~ 9A@E^1ED9A;6Jw9A)P|7,/9A}1)m9A$ltXrV:A@g-o.z7 :AOR1/M~ :A@ R:AE":n9vJ:Adh?/ 9:A@Ӎ<@'l9AIP:&t7=9A`'l9A`OL9A}az$}F9AF n?9ArJm&t7=9AIP:=({9A5Zl[9A{9A5Zl[9A>O(G9A T14L9A#Ğ O(G9A#Ği-I9Aoh<t|I9Aқ oI9Ae SK9A@mLT14L9A@ Sj2ucK9Ax-tN7K9AEǑ/K9Aq*LԋSUJ9A Q8JI9Ax>BKH9A`w|SG9A ?(3kdG9AqFO~w|SG9A 3kdG9AqFO~w|SG9A @(ONF9A 3kdG9AqFO~ONF9A 3kdG9AqFO~A((݊F9AD.ONF9A (݊F9AD.ONF9A B(E@%D9A@ _,(݊F9AD.E@%D9A@ _,(݊F9AD.CE@%D9A@ _,`1JH9AAf+lE9AAf+wF9AG|-Y%-XF9AHF;>"T+G9ATSr\F9A1T G9A@Ȣ?G9A;:C2?H9A+%2H9A@J`1JH9A6s* RJG9AIfF9A!DC$E9A2-lLHE9Af5~7֦&E9AA "T8E9AlfE@%D9A@ _,D`/ 9:AG y_!d:A@Ӎ / 9:A@ӍY'Y:A@ػD8t:A@R8dI:A@D:k:A}/DdH:A K:ARݾ(x:A@;n2y_!d:AG Eb 8Ai9W8Aϊb 8A@~Rtx8AuǍV8AXtμJ28AjII8A?O5 X8A'# 8A&6/d 8Aϊ<0 8A^͓) 8A4QP 8A l8A@QW8p8A)|vQ8ASb<8A35Ca8A`\ 8A@)Nj=Z8Azz8A@zE8A)W8Ai9FpVT8AK*h8A@a0 VT8A@a0j,SP8A gaKg8A4Ƕă8A mc98Aee gc%8A@E$l8A-oW쀤8At,'R8A@x/B8A`@h8AK*GX}߁8Ahu+l8A@γ_K8Ah<]8Aj}߁8A0E՚n<8A)}{8AyQ2<78AlPIW?8A@1u+l8A@γHXu+l8Aml$(?8A@γu+l8A@γ%8$8AnFHJ28A6z{y8AWt%)'d~8A@կ*?8Aӵ",8A :V,ٍ8Aml$(I@_K8A_,>G$M5*8Ah_K8Ah@)J"t8AJm#Ln8A_,>G$yN8AM5*8ACH!J(1D9A@r`&3kdG9AqFO~1D9A@r`&3kdG9AqFO~K0;#&59A@(E@%D9A@ _,;#&59A@(e><9ADJ E@%D9A@ _,Lh:qO9A@(;#&59Aﺯ :qO9Aﺯ!n!9AQ/\+9Ay ;r!9A?W/"9A@ d8%a'9AgcA`J)9AOH).9A@JgBl09A:1;#&59A@(M(F.ID9A@/)1D9A@r`&1D9A@r`&F.ID9A@/)NH?)H9A@"/{9A5Zl?)H9A@"/r69A[C"2t 9Ay`9A@,wvpn_9Aʙ{9A5ZlO0{o`9A@"/?)H9A)j){o`9A)j))9A@*?)H9A@"/P@Oj49AU L0L49Ab۵Oj49AU L0Wxv9A&ͫ(9A"BE'9AL49Ab۵Q(;#&59A@HxRE2:rd69A@(;#&59A@(:rd69A@HxRE2RJt7A@y_2b 8Aʟ-Jt7ALL5!7AO;X7A+doB7A@6)sz7A@LDBM7A@, ;7A/%{7A,)DE7A21}7A@y_27AQ]%.?7AO w$7A~} ,l7A<xϪ7A@40:JA7Ah#փ7AWbPX7A=K 7A ֨7AOzqGo7A@s`7A@+J`+7A%p8~7A@-P1<7A0nՌ9Ǚ7ApUɦ7Aʟ-C, 7A@Չ8"727ASb 8A@~RS(:rd69A@ 129}69A@HxRE2:rd69A@HxRE29}69A@ 12T8ϳ8A^57t 8Aasϳ8A^5!W8A$ !ZAB8A@ud27t 8AasU@DMk 8AUۄb8~DT8ABNc[DMk 8ABNc[7E8AYti8A5Q[z8A*~DT8AUۄb8V(s qd8An>~DT8AUۄb8s qd8An>~DT8AUۄb8Wx h6o8An>s qd8Au? h6o8Au?G8A,U>iѱ8A@Jiv”8AUȕ8Aa/8Auxչ8AW'8A; '@@8AV߽'p8AQ7V8Aem.s qd8An>X09A@Qs>-9A$v9A@Qs>`4H9A"vV -9A$vY(zC:8AEEFϳ8A^5zC:8AEEFϳ8A^5Z?c8AEEF)38AX )38AX ߨ^8A@msP-]18A$N51V8A@{"Ԑ`5=G8A@͕<`n8A%RєE8Aפ^Jx8AwG?c8AQF&i8Aw8Kt8A^ 8'L8A˖6[A.8A=zC:8AEEF[({o`9A@JIN9A)j){o`9A)j)N9A@JI\(pk8A@LYzC:8AEEFpk8A@LYzC:8AEEF](Fu9A*cOj49AU L0Fu9A*cOj49AU L0^8?)H9A&C)sq0Ո9A@"/?)H9A@"/ 9AP!9AsEE`q0Ո9A&C)s_8"0O9A@~.k}{'l9A`"0O9A@~.k}{}ǎ9A@իmvL99AJ2'l9A``@>*B9A6$~~&t7=9AIP:>*B9A6$~~[I9A@REIfWF9A@Hhg.9A3_&t7=9AIP:a(wQ09A\݁"0O9A@~.k}{wQ09A\݁"0O9A@~.k}{b("<&[9AK]qywQ09A\݁"<&[9AK]qywQ09A\݁c8u3>9A+u='1D9A@r`&u3>9A+u='pX4@9A<0]>D9A@5*61D9A@r`&dP]@9Af: [ڳ9ASG]@9ASG9Ackp9A\+\eW9Aj9AE%9AU{ ` [ڳ9Af:e(?/9A0' 9A@Qs>?/9A0' 9A@Qs>f8s9A@O@Y|9A*cs9A@O@Y9AAB|9A3’XiFu9A*cg(>&8Aܥs qd8An>s qd8An>>&8Aܥh)38Aܥ>&8AX )38AX v8A*mnG8A!@=8Af8A%1e8A@F3W8ACiV98Arsc?)k58A?PhvBK8A@0*0}UzE8A?aG8A@8A@JGڳ8A93J"8Aol&N|e8ARkq&Uሸ8A0>}=8AM vJg8A6xݚOG08ARJ>&8Aܥi(Ɏ9A<s9A@O@YɎ9A<s9A@O@YjD9A7x<|51g9A,΄D9A7x$!E9A@l%WmH9A@LncjkJ9ANK9A@@jK'L9A~)y^L9Ap%+Ư'N9AͥON9AsP9A~ň.R9A!# nUթS9A'BWUS9A;=UNT9AEMY="V9A@=1W9AcaZ"Y9A@=I){[9AVj^/0]9AFt.qP_9AأnOc9AWO@SZKd9AIge9A@&+1rNf9Ao<|51g9A,΄kXu3>9A>D9A+u='u3>9A+u='hC@@9A{Y^@9AxlA9A@ѯgr( rB9A*j.B9A77C9A>D9A7xl(?/9A^鷯w.9A0' ?/9A0' w.9A^鷯m(D9A< D9A7xD9A7x D9A<n0u3>9Al] >>9A+u='u3>9A+u='bUty>9A@W$>>9Al] o8bd=r8A6\ s8A%لbd=r8A6 -S[Lr8A,/>Pxr8Ae"Ʈ\ s8A%لp(k9A@PmIV&Fp9A3V&Fp9A3m2"jo9A@"ɿ'!)n9A)ʀchn9Ao39n9A@Pm9A>&s&\Im9A*mdȹl9AUx&)ak9A@(R k9A(k9A@?Q+hv.k9A{UO tk9At%Zl9A@[}*l9AKg+m9Aٶtٱ%<%pm9A@PmIq06__g9A@p= [ڳ9Af:6__g9A@p=@rg9A [ڳ9Af:r(6__g9AW#wbn9A@p=6__g9A@p=wbn9AW#s((Lk9A%<%pm9A@PmI(Lk9A%<%pm9A@PmItP<|51g9A(Lk9A,΄(Lk9AK7j9A@UV5i9AM]=h9A@~Р b|h9A@<X g9Am<|51g9A,΄upk8A;4O8A>ZP pk8A@LYLi呝8A@R\$T8Ad_YW">8A@KRǞ8A>ZPr!"B8A 4BbΠ8AFBmXC98A1#epDZ¢8A.$PZ8A(wӳmdzb8ARM8A@ qR4O8A;v@q0Ո9Aݝh9A&C)sq0Ո9A&C)s$ 9A0u9AchД9A@Zh9Aݝw0AG].9A^!6__g9A@p=AG].9A^!9A 6__g9A@p=xHk8A@ D]cy8Aܥ>&8Aܥk8A@ d%TU?8A/|j28AW`kjB8AAccy8A@ D]yX75H9A@(* T9AbU75H9A@(bI9AoI9A|?)h pZI9A@A_n}J9A7ۇ L9A`#XQ9A@0UZ* T9AbUz0h9A#1t9Aݝh9Aݝ l9Aam 1t9A#{(`h8A@梂cy8A@ D]`h8A@梂cy8A@ D]|(1t9AJ9A#1t9A#9AJ}(wbn9A@+J7 I9AW#wbn9AW#7 I9A@+J~* T9A@~&&_9AYǪB* T9AbU#U9A@9}]0yW9A@y:pkZ9A`dZහ!\9Af}I9(a]9A@|n֩D|w0^9AYǪB;zU _9AYǪB(_9A1F&_9A@褪Ob_9A`dZz?P_9A@H?g膸^9A.LO|砀^9A虆 ^9AH>g]9A@"w ]9AKqknw\9A7r{[9A)}\sJY9A@~&0* T9A@~&sJY9AbU* T9AbUor=V9A@zsJY9A@~&(+3g8A7`h8A@梂+3g8A7`h8A@梂( "8AEm6L8A "8A6L8AEmHphWo8Ad&bd=r8A69$fo8Ad&phWo8Ao8AܗUkp8Au$'|Lq8A`)bd=r8A6XBW9A;&'Ɏ9A<BW9A;&'14i9AGBb ¨9A@Et9AN 9A@uiOTW9AW<У9AKRɎ9A<(9A;&'BW9AJ9AJBW9A;&'@&8A@T6 "8A&8A@T61ɠ 8AqZ 8Ap&]x8AR "8A7t 8A@T6&8A@37t 8Aas[MҢ8ĂT58A@3 Zr8A@)z8Aa[*8A <(Z۪8A?ҍ'8AY,cE8A 94 8AtrRBxC8An[\c 8AABfc8A,@ v7տ8A;+ 8AIl eα8AimSO8A|/8A@AxYs8AU1)&8A@T68 [ڳ9A@t9}gZ9Af:}gZ9A@t9P69A/1k[*9Aq [ڳ9Af:06L8A]@+3g8A76L8AEmN8A]@+3g8A70 kP8A@n@!8Apn6 kP8Apn6-f8A@ePDP&8A@T6Jt8A>DP&8A@T6@4O8A>DPJt8A;4O8A;ݬ8AbX)G8Ah$*8A* Jt8A>DPPAl9A=8S~jf)9Ad+Al9A=8Skmf}9A G]к9A$>guf9AT Fc+{p9AtwB9A¸VU~jf)9Ad+8"9A_UAl9A=8S"9A_U~.9A@@4TP_*9A@eDZSAl9A=8SH"0O9A_U"9A@~.k}{"9A_U(t'9A@ q99A@~ dW9AFich9Av"0O9A@~.k}{([\,f9Ah;>V"9A_U[\,f9Ah;>V"9A_U(}gZ9Ah;>V[\,f9A@t9[\,f9Ah;>V}gZ9A@t9(l9A"b@V[\,f9Ah;>Vl9A"b@V[\,f9Ah;>V8(Lk9A@ңXE k9A`brk9A@ңXE k9A@(tT8k9AJn(Lk9A@?\_jf9A@ңX`brk9A5@?\_jf9A5@g[Uh9A1rPKqi9A@ tQj9AO֮U`brk9A@ңX(Eo9A@QZH^u9AOEo9A@QZH^u9AO8%<%pm9A@QZEo9A@PmI%<%pm9A@PmIyn9A"#{wC1o9A@clHEo9A@QZ0`brk9A@QZEo9A@ңX`brk9A@ңXρc4m9A@FƒZEo9A@QZH dR9A@Z[@ 9A dR9AXLEl9AdBF9A>99A`e#ޢ9A:)@ 9A@Z[(}"9A#%[AG].9A^!}"9A#%[AG].9A^!(@ 9A#%[}"9A@Z[@ 9A@Z[}"9A#%[(sTY<9AD]"9A_UsTY<9AD]"9A_U(SUQ9A@K"_[\,f9Ah;>VSUQ9A@K"_[\,f9Ah;>V0R9A+}DPy+ I8AOep8AzWJt8A>DP(cy8AZftZ8A@ D]cy8A@ D]tZ8AZf(3x8AZftZ8A MH3x8A MHtZ8AZfPBW9A@`Uo dR9A;&'BW9A;&'Lc9A*:Di9A6oޟb&9A@nq9A@`Uo7E9ATc dR9AXLE(;)l\9AzLtR9A+}99A;J O<9AMT'vg4?9A@R clmd@9A@GU+wdo67jB9A@tL0 dR9Aԡ˛_k9AXLE dR9AXLExiS9ACRGŁ_k9Aԡ˛hN9A@.r2V:3$9A@JI N9A@JI:V9AZ t,:9A 6tA:߄9ACL}GM9A@'2O&Y 9A / 2V:3$9A@r_6O&Y 9A*\ q79A/I?59A;q0Ո9A&C)s(&4՞9Ad]9A@S}R&4՞9A@S}R]9Ad(f8A@vGF 8AYOf8AYO 8A@vGF(6gzR9AO!&4՞9A@S}R6gzR9AO!&4՞9A@S}R0Q9Aѿ6gzR9A@.rQ9A@.r9Aѿ6gzR9AO!(K}9A?}"9A#%[K}9A?}"9A#%[p< 8ATӽ!8A@n@ < 8ATӽ5||8AHw 8Aڼ7ͮ8A@ ':18A@LIq8A-#8AӌN+nm8A{+nm8A@MP eIEF8AݍzP!8A@n@@Al9A6G9A=8SAl9A=8S9A@Xtlɯ]9A\gN}d^9A[_9A6G@]9Aޠ10 B9Ad]9Adq9A=

    -9C9A^.q9A^-9C9AoF>0o67jB9A1xnkk+hG9A@tLo67jB9A@tL_#BC9Ankk+hG9A1x@8}ݖ9AA$d <]9A@K"_8}ݖ9AA$dj-9A@ޕ <]9A@OE\9A_nSUQ9A@K"_8WKe9AA$d8}ݖ9AWKe9A9AOf9AN)8}ݖ9AA$d@{@G9AKUɚI9A@(75H9A@(mkI9A9I9A@=OsI9Ai{@G9AKUɚ(nkk+hG9AKUɚ{@G9A1xnkk+hG9A1x{@G9AKUɚP&8A)S/ꥤu8A@T6FJ/j8A)S/dm8A0A):o8AQꥤu8A@h,8A@aR0gv8A@IHbK&8A@T60Q9A D 9A@.rQ9A@.rng9At 9A D(|Rcܳ8A@NsFJ/j8A)S/|Rcܳ8A@NsFJ/j8A)S/HFJ/j8A@UӰ8A@RELFJ/j8A)S/=8A@޺s6t8A@U(Ҿ8A@a#El8A@0 Ӱ8A@RELx|HTX9A@r0?\_jf9AK  |HTX9A@r0=Y9A2M-m[9A@͝![9Aɴn)]9A@:݀Hv]9AQGygb&_9ApVS@9`9AA+rNa9Are mI(gb9AK fe9A@ -?\_jf9A5@(5:~X9Axr |HTX9A@r05:~X9Axr |HTX9A@r0hiYkAO9A@);sJY9A@~& iYkAO9A@);YZP9Aen#4Q9Aۋ@jR9A{t0VqS9A=s gV9A֎R쐡V9A@y JVW9A9DrX9A7 85sJY9A@~&`:A@)W:AG (Ik o:A@)`:A52u:Aִ6<h:AF8l:AnKg8;:AOqLmX:AR,5 (:A#yݭF:AZg&_S:AtW:Ai@kE*:A@Ql!XT!r:A@u :AoN:A?s$y_!d:AG (8vF19A@)(Ik o:AQLҺ(Ik o:A@)8vF19AQLҺ8֕*9A]7!"9Ad֕*9A]7!"9A %` 9A[\]9AdH(i9A!zbf9A-̊(i9A!R3S9Ab99AcEW_]9Ao%9A@Lzbf9A-̊(-9C9A!(i9AoF>-9C9AoF>(i9A!POt9AW4&%Ku9AOH^u9AO%Ku9Aׂo=~39A`=K}9A?>39A`=K}9A?(q4,9A`=>39A@F!<q4,9A@F!<>39A`=(= 9A7[->>39A`== 9A7[->>39A`=HD!9ASW>G\9A@?@D!9ASW>Ӛ{9A ?9A@ 畔/p9AF$9AZf0G\9A@?@(Z-q9ASW>D!9Aݫ3Z-q9Aݫ3D!9ASW>hb 9A@mݠv@;#&59A@( ~) 9A@mݠv@5 9A[{A.UB!9A`8:|> 9A@ڋmb 9AvY 9A@\ٍLM-9A@q{P.9A\\aQH09A*'S;#&59A@(U(9A@mݠv@~) 9Aﺯ:qO9AﺯµlPr9Abҷ&@M9A@@KQ׳ 9A@Hx[E 9Am^9A:o_h9A@d:U(9Aͦ_Hi9A@5MQ4תO9AabIطm}/9ADx9A1C [ҁ9AcHhys9AXNEPO`!79A<k_^<9A@CRK9A}@[c!9A@v#Yu|*9A@h7{h 9Aj )C"t 9AW59A`y r9A@Pm#%9A$چ9A9A,j|0ch9Ae)&)9A(~) 9A@mݠv@(kf"# 9A@%A~) 9A@mݠv@kf"# 9A@%A~) 9A@mݠv@8fc7^9A)E?\_jf9A5@fc7^9A)Ee+c9A@q\e9A@Cn?\_jf9A5@05:~X9A)Efc7^9Axr 5:~X9Axr ,Jb:]9AQ\,E=fc7^9A)E@9AJ50IICvF19AQLҺ9AJ50IIH~z9A牶/' 09AkK3CvF19A@As8vF19AQLҺ0fӝ9AJ50II9A;Z.fӝ9A;Z.Ql >9A/99AJ50II@9A@oE}tJ֕*9A]9A@oE}tJd A9A@? i9A@T%8{9A3OP*֕*9A]0 9A@oE}tJ9A D 9A DQ9Au?9A@oE}tJ8Okq#9AbdYQu3>9A+u='$u3>9A+u=' 4F=9APP;Bc=9AP̣Q7=9ASm"F7=9A2 Y"WQ=9A,IBc=9A6(TJ=9A@i=9AZ, u9<9A䧩 \! <9A40#;9Ai5c:9Ah٬ g99AC L89A'alb79AQ+69A2xEؠ59A),Pd49A@ӳ@l O39Af^9'09A{d8؋/9AS[wV/9AiopD_.9Ae aفjX.9AQ L,9A7#r"̟N*9A9 /V΢'9A;s'9A[O&9Ay 2r%9A.'%9A棛 W{z$9A|C9$9Aѭ_#9A23DOkq#9AbdYQ(cxJ#9AVVOkq#9AbdYQcxJ#9AVVOkq#9AbdYQ(?ue!9AVVcxJ#9AsJ?ue!9AsJcxJ#9AVV(D!9A ]=/x9ASW>D!9ASW>=/x9A ]8B5pf9As+c`brk9A@ңXB5pf9As+c"f9AfP>hOj9Ase`brk9A@ңX(fc7^9As+cB5pf9A)Efc7^9A)EB5pf9As+cAA9A@8Kp{@G9AKUɚAA9A@8Kp.+rB9A@RabmD9A@8SO:;,F9AE> e#F9Ai ^6UثF9A@^1sєF9A'>лF9A(#CF9A@jKF9Asif]F9A7;๨ F9A@f9EkG9Aͬ<yLkG9A G9Aܭ{@G9AKUɚ0ͨ<9A@8KpAA9AeJ8ͨ<9AeJ8v%<9AL8AA9A@8Kp(79AW9x= 9A7[->79AW9x= 9A7[->0,^L9Ajn}iYkAO9A@);,^L9Ajn},JM9Az[iYkAO9A@);`{@G9Ajn},^L9A;y {@G9AKUɚL _H9A;yH9AWRHijI9Adڀǀz>J9Aݰo?nJ9A$`XkJ9A@g&"K9A [,^L9Ajn}(AA9A`o}!/C9A@8KpAA9A@8Kp!/C9A`o}(z4-9A@9AJ50IIz4-9A@9AJ50II(ȏ9L9A3V,^L9Ajn}ȏ9L9A3V,^L9Ajn}(_o\9A~fc7^9A)E_o\9A~fc7^9A)E(,?9A@J/79AW9x,?9A@J/79AW9x0,?9A@J/(i9A!,?9A@J/̘9A@Ap(i9A!(=/x9A@J/,?9A ]=/x9A ],?9A@J/8V9AC͞D!9ASW>D!9ASW>Aҝ9A"]V9AW sobQ9AC͞%D9*9A@bas79A]:bas79A]: 69ADa739A X*7[19A@X0Ӟ209A"%` .9AjW-9ArD7?-9AՍA.7?-9A@y`<7?-9A6֦fZ-9A@J>[- -9ABUM d7ˆ,9A7%@;O,9Aqo{d+9A@R6A%E+9Anݍ06*9A:dZ*9A@ǖJBj}*9A==j`*9A@J%D9*9A@0Okq#9A@%D9*9AbdYQOkq#9AbdYQ!'9Ax%D9*9A@P9A[+В>9A?9A[+ֲ9A|L; 9A:13p9A047 9A@[CВ>9A!{ K}9A?`r\}G9AўN H9AKUɚ {@G9AKUɚ$zH9A1H9A<N H9A~jH9A'UkH9A?c#/CPoH9AS/ 5 o cH9Ax][V9A2K65:~X9Axr POt9A ᳓w9AW4&Ot9AW4&;̈t9Ai`ju9AK6E;v9AIʾv9A56)d w9A᳓w9A  8%L9A{m2 TsDL9A3Vȏ9L9A3V%L9AJY!TsDL9ADڪb?XL9A{m2  0r\}G9A{m2 b?XL9Aўr\}G9Aў35K9A@8b?XL9A{m2  0;F|9A@׎9AQI;F|9A@L+9A@T׎9AQI (^o9A@;F|9At [a^o9At [a;F|9A@ 86#r9A@]M׎9AQI6#r9A@]M:U9A{a{9AhC׎9AQI0;F|9A@]M6#r9A@;F|9A@-9AZ6#r9A@]M0na(9A<%D9*9A@%D9*9A@=Q)9A@$na(9A<8E9Afr\}G9Aўr\}G9AўY<G9Aq nF9ANWE9AfP«V9AGv_o\9A~«V9AGvҨuqW9A6N˔sX9AR92Y8[Y9A@f$H5{Z9A msj9[9A@8_o\9A~(؍@UR9AGv«V9A\zX؍@UR9A\zX«V9AGv(eE9AKE9AfeE9AKE9Af0DSO%9A@Q#9A[+9A[+DSO%9A+H9*9A@Q#01٧9A9*9A@Q#1٧9A9A@M%K9*9A@Q#(>39A1٧9A`=>39A`=1٧9A0eE9Ayn)H9AKeE9AK:G9A@3v)H9Ayn(Ea-9Am0b$;F|9A@Ea-9Am0b$;F|9A@(~29Ab%冀9A.L冀9A.L~29Ab%(][9A(Ea-9Am0b$][9A(Ea-9Am0b$H][9A(^o9At [a][9A(̻9A@Pyܨe߻9AQY9A4DV(9Aq]^o9At [a()H9A@ G11I*J9Ayn)H9Ayn1I*J9A@ G18e9A{^5β9A e9A{^52Ya9A&2*'Xʱ9A@qβ9A 09*9A{^5e9A@Q#9*9A@Q#Q3¬9Ae9A{^5@iS9A'J76#r9A@]MiS9A'J7 k9AY6|8e9A@Ű8eZ-9A6#r9A@]M h엹+9A;9ͨ<9AeJ8h엹+9A;9a,9Aj^-Ec.9Ad?_3/9Ag09A@ )09A!w)n19A@ D%w*29AOOڪ29Aٜ~=59Ah<`R79A@ H !679AF l'u:9A,,r5Aͨ<9AeJ8!(na(9A;9h엹+9A<na(9A<h엹+9A;9"Puž 9Aj98}ݖ9AA$d8}ݖ9AA$d?ܑ9A@!yO59Ai*>|D9A@a_!J`9Afb*1O7AO5/T]7A\mQ }٭7Ac YqyRm7Af HH7A5_O7A2*ǯ7A@y"C7AF2@7A87ADzGsu7AZ׿ nJ7Aq^n7A@"u*7A@7)Ʃ7A@ѡ{^g07ArȪV&7A@otne9A@lukAtne9A@lukA 'jd9A@{| tuld9A`kr b9AD Ib9A@>o;(+Ra9A@>o Ib9Aqj+Ra9Aqj Ib9A@>o<@X؃v9A@-q᳓w9A ᳓w9A +w9AĠ6`1Sw9Aۼ$(y w9AX-P\X؃v9A@-q=0_)R9A@x$BR9A o|G$BR9A o|G:R9A#rb_)R9A@x>@M)dف9A_/yz xJ9A0}|EM)dف9A_/yz#[9A!qUf>9AUV}˸9AUK xJ9A0}|E?@N9A@%F| E9A@Z{TԆ%9A@Z{/[i9AiOM E9A/4y^ҟ9A;nxHN9A@%F|@`5yS9A~kf"# 9A@%A kf"# 9A@%Az9Al9AҪ#>ӡ9Avu?9AZKx9Af Sx1O9AƲSˍ9Aʻ6l5yS9A~AIk 9A~5yS9A@-Ik 9A@-]9Aw:[j29AǸ^ 9A>;.&i 9A@g@=d H 9AQm@i 9ABs1Ck9AqlK9AZDQ9AΕadU9Ap]-9Acq6$9Au~9A{5yS9A~B(z:#9A/y߄EE3w9A@:OXez:#9A/y߄EE3w9A@:OXeC(M)dف9A/y߄z:#9A_/yzM)dف9A_/yzz:#9A/y߄D8ICb9A@%RM(9AZICb9AZFim(9A"oG9A p|M(9A@%RE8|̓?9A{,%eE9AK|̓?9A{,%X~A9Aփ^BμB9A֤V;eE9AKF8Fb;9A|h?9A)6QFb;9A)6Qj=9AӐid>9A>vh?9A|G(JWEv?9A@)½|̓?9A{,%JWEv?9A@)½|̓?9A{,%H(h?9A@)½JWEv?9A|h?9A|JWEv?9A@)½Ix(#_C8ATT+hCɤ8A@B=A_ (#_C8A@gc8Afafzp8AmRٲ8A@7HFWI8ATT+h ~8ADF;t8A܇Q9AMk9Ac ۩79AhΟƙ9AꞱ9A@`K(M(9A:X[-9A@%RM(9A@%R-9A:X[LX X8AG:8A*>G:8A*>:_8A[oZ r8AFpC o8ASl8Ab? 8A@y7 58A(5 X8AMHF9A@b`e9A{^5F9A@b`"rڭ9A@{o7i9A@U2Д9AG~UUU9ACe9A{^5N(1٧9A@b`F9A1٧9AF9A@b`O8 9A~29Ab%~29Ab%QD9A@j6U!69A@|Cvv 9AP(-&9A@Nеh엹+9A;9-&9A@Nеh엹+9A;9QH-&9A@Nеna(9A<na(9A< (9A'v\&9AsC&9A|$S3OGh&9AD-s-&9A@NеR`N9AF9A@%F| N9A@%F|HgH9A9AM+[ЇWq9AL2X1ڤ9A@q9J9A$Qܕ9ANxBD9AH1F9A@b`SX"C9A#߾)H9Ayn"C9A#߾_]C9A@qZذe8 gD9Ah/gY E9Aէ*pqH]E9AĎX:5E9A@GL#Gې#G9Aڥ.)H9AynT0JWEv?9Aܯ Lui C9A@)½JWEv?9A@)½=鎢@9A@W3Lui C9Aܯ U(zh69A@pgGV:9A&ΌFV:9A&ΌFzh69A@pgGV(mI`9Any Ib9A@>o Ib9A@>omI`9Any W@cQ9AN>jn([9A@'ScQ9A@'S|.4U9Ab+UU| 9Aͣ9 9ALn([9AN>jX(3`9A"5mI`9Any mI`9Any 3`9A"5Y(3`9At;dؘ7j`9A"53`9A"5ؘ7j`9At;dZ(]ta9A@DW-9A:X[]ta9A@DW-9A:X[[z4-9A@ת$Ԟѫ:A@){ :A@ת$Ԟѫ:A@X 4 :AcJb:An br&:A5_ٹ):A8O-ł:AJsI*/=:A CGp:A@L:A~('kv:A8'W9Ac1n9A@̡z4-9A@\@F9A{ d5yS9A~F9A{ dN 9AǡEo凊9A@&\9A@e35yS9A~](n([9A{ dF9AN>jn([9AN>jF9A{ d^8v+9Ay]ta9A@Lv+9Ay9A;?У9A@L]ta9A@DW_P 9AƊv+9A 9AgP9A˪ p9Ao_SK289A@Tٕ~4C9AƊ79AYv+9Ay`HhM=A9Aryz:#9A/y߄hM=A9AryNĮ9AbuM9A/eN9AzحŶ9A.z:#9A/y߄a0F9AryhM=A9A@b`F9A@b`$QWu9AhM=A9Aryb(vG2/9A@ewtrhM=A9AryvG2/9A@ewtrhM=A9ArycH){ :A@r?`i:AnT&){ :A@ת$Iz :AW33ouM :A bA,:AnT&u 5 :A /i:A@r?`d0}m9AUp"zn9A@AfKRUm9A@Af}m9A@zzn9AUp"e8ؘ7j`9AUp"zn9At;dؘ7j`9At;dx{Zd9A@HYPcj9A0Nzn9AUp"fXޑ9G9An&1I*J9A@ G1ޑ9G9An&ˊ[G9Ag [tnG9A@E22 H9A@Z_ I9An-\9vI9AoN-mrQ`I9A7W1I*J9A@ G1g8Lui C9An&ޑ9G9Aܯ Lui C9Aܯ +C9AO*oF9A%_ޑ9G9An&h(zn9A)CxYp9AUp"zn9AUp"CxYp9A)i( 2r9AJӄY`mr9A@ Ak 2r9A@ AkY`mr9AJӄj0CxYp9AJӄY`mr9A)CxYp9A)q9A@ZY`mr9AJӄk(4V9AoCGAX9A 4V9AoCGAX9A lWm9AoCG*)x 9AD]sTY<9AD]o_9A}5 b*)x 9AjzX9AM.h "9AŶ-~RT29Aөig9A )9A@Ǩ [9A]OzIV9A"Ro9AbO9 69Avt8UK9A@?BeK9AѼ|K9AlbK9A@7Pn}9ALi[ E9A݈\39A":J؏39A ^)9AZzp9A.M t&h9A/;Hpn&9Ams{Wm9Atk F9A=4V9AoCGm0xv9A+XX؃v9A@-qX؃v9A@-q̸qv9Axxv9A+Xn0Y`mr9A+Xxv9AJӄY`mr9AJӄ#`)t9A] Ixv9A+Xo(zh69A@Xsm8H;9A@pgGzh69A@pgGsm8H;9A@Xp8RZ;9A@QJWEv?9A@)½RZ;9A@Ql<9A7 C=9A@{JWEv?9A@)½q(sm8H;9A@QRZ;9A@Xsm8H;9A@XRZ;9A@Qr(sŤ9A@' 9A 9AsŤ9A@'s8p9A˴9ARAu˴9ARAuM:9AFټȏm#q9A@}e= p9At0F9Ap9A{ dF9A{ d-z9A2p9Au8,Y]J9AKE:L9Ay jI,Y]J9AK9A_yL9A-lKE:L9Ay jIvPy_!d:A+ +!$:AG 'y_!d:AG i:Aj"~R:A@y9AWiG5H:ARVC{:A(7ejQ:ALdBo:ATF~2:A@L`5lq:A:A*>a":AP5! {:A“)J}Wp :A@rg<` :A (C*:h :A)_TV\!:A$ZΈ":A@ q;d!:A@Ƕ+8D!:A Zn*#:A#P3#:ADa?ѫ$:A9;+!$:A6=Ue !$:Ah[cx̻{#:A3'ۖ[2$:Ay3XZ $:A+ w8/Ru#9A5c-&9A@Nе-&9A@NеM%9A@:6$9A@fȽ/Ru#9A5cx('I(9A@v+9Ayv+9Ay'I(9A@y8sŤ9A@'I(9A@'sŤ9A@'[҅9A} L`zާ9AS'I(9A@z@i:Aqf"XZ $:A@r?`i:A@r?`h:A@_"sl:AR|e:Aqf"XZ $:A+ {8|Dv@9A-Lui C9Aܯ Lui C9Aܯ +uA9AG,J-/@9A@R |Dv@9A-|HRZ;9A-|Dv@9A@QRZ;9A@QI;9A@+u)<9AAv3D=9A@P W?;?9AL&|Dv@9A-}X]ta9A^C.䢗F9A@DW]ta9A@DWOl9AZTtَ9Ay97K9ALޣ԰fq9Aq]"N7K9AGu4d؊9A1,ך䢗F9A^C.~0'I(9A^C.䢗F9A@'I(9A@>J9A3%,䢗F9A^C.P Q9A&R<:R9A@x_)R9A@x:R9A H|-R9AKUiQ9A|@/&\jQ9AL})rS6Q9A*,+ Q9A&R<Xr%n9A@[n]SN9A@%F|N9A@%F|<.j9AH6Ma9A@& 9Adiw9A١&9A*r%n9A@p Nvl9A@[n]S@䢗F9A@[n]Svl9A^C.䢗F9A^C.!і9A@|*;IuD9A@ H*i79A0 Pvl9A@[n]Sxz9AByV-s9A'J7 z9AByVA4?9A[FSR8t9A@ q| |A9AjT!@&9A5#<9A@D09AM&uqyu9A9ס-s9A d>:a9A~٤Wtv[9A:GFiS9A'J7(vl9A.?X/!9A@[n]Svl9A@[n]S/!9A.?X@EkF9AzZgޑ9G9An&EkF9AzZgfF9A@EbGG6 F9AĶl(N%G9A\Zޑ9G9An&0_(ww!9Aj[h/Ru#9A5c/Ru#9A5c\GY"9A"B@_(ww!9Aj[h8p9Aj[h_(ww!9Ap9Ap?9A:ޔI21/MQ 9AZ=U_(ww!9Aj[h82SF]9A>j3`9A"52SF]9A>jq_9A^**$`9A@ʕ 3`9A"5H4V9ApTd"9AoCG4V9AoCG!j}9A@Q 99A؛2X9Ax13'9ApETd"9ApP B9As){ :A@ת$ B9As(F9A@d9A@> _<܇79A0а\S:AIOjPt:AA4V){ :A@ת$(h2%9As B9A<=ish2%9A<=is B9As( XhU9A"x/!9A.?X XhU9A"x/!9A.?X@*'$q7A@4}t7A@%2%*'$q7A@?w&W4(Su7A@%2d\Lu7A+ ev7Ap3Bgww7Aq4e>κy7A@SpB[d{7A|*8]}7A!7~7Aɋ=A7AZʶ6ҁ7Ab%*.f7AeeWS%7AH!@67Aw73aNć7A ES!, 7ANI("O7A,ˤ7Y7A@Th7A6S27A(suեɅ7A9אv&7AY=l7c*7A3W[QI7A@t/27A@0;^7AKͨ z 7A@Ky.]7A]V547A@?k𧢄7Ap+օ7A@'gy7A2Gʙ{7A@k*0v 7Ajx .d7A"ޛ!h@7A@(`et7A@4}@FC;}9A_ҽwsŤ9A@'sŤ9A@'4B9A@BG :FC;}9AkwU"9ARLm]*9A_ҽw@>I9A! =5J9A>I9A! =5J9AJT.ԁJ9A@}Z'wJ9A4t ,Y]J9A(EkF9A! >I9AzZgEkF9AzZg>I9A! t7AڊmDi#7A:ct7A@4}ã57AGD8KU7AT 3]7AڊR*7A,MK#lus7A@dD@=~7AT}H ?7A'{ppY7A^Mm7A9Nc7AϭL*7A7+#27Al_*S-7AG#!-7A̵& w7AZXKoѧ7AG~#67A2g@^7A򄢊fq7Ar҄P 7A@d^n6!7AHmmDi#7A:cH/!9A⹏F>9A.?X/!9A.?XbE9AMk݄9A@ޕqpdB9Ak\Xx 9A&F>9A⹏0}~9Ak^]*9A_ҽw}~9Ak^Qn9AE]*9A_ҽw(<+k~9A@}~9Ak^<+k~9A@}~9Ak^Pzn9A:+"q9AUp"zn9AUp"*jR:Z9AC74~Z9AOp\9A@%Q좟Y]9Au^J{2SF]9A>j@݀xQ9AC74~R:Z9AYP݀xQ9AYP܊JU9AjU9A@ztP}tV9AhR:Z9AC74~(O1M'9A.@#(9A_JtO1M'9A_Jt@#(9A.@F>9A"=9A⹏F>9A⹏z\k49A@ӤR/j9A]wL'dqp9A@=9A"(=9A2Q??9A"=9A"??9A2Q8Td"9A/L؏Q9ApTd"9ApI9h9A:.9A@؏Q9A/L(69A/L؏Q9AO,69AO,؏Q9A/L(Oݸlي9A +^ƅ9A1Oݸlي9A +^ƅ9A10;E9A +Oݸlي9Ac;E9AcHh9A1uOݸlي9A +`؏Q9AGبh2%9A<=is ؏Q9A/LM4x9AGبZ"9AUonݎ 9A*~AV 9As%:a9A@^e9A#pP9A{n *zh2%9A<=is09FǓA9AyOEkF9AzZg9FǓA9AyO ½EDB9AEkF9AzZg(}?9AyO9FǓA9A@YI}?9A@YI9FǓA9AyO`Ŷ<9A3už 9Aj9 už 9Aj99A x>Wz%9Avy\\C9A@$SI`9A849As0Ŷ<9A@ K9Apв{TcU9A3(셚9A69AO,셚9A69AO,@Aa9A5`_(ww!9Aj[h_(ww!9Aj[hR 9A@2|Q 9A׶CڗAa9A@~U9A5` aK9AW8p9Ap9A (9AE Vw9A뉖Ty9AE#h|69A@k"*9Am(H0٧9A@}B%F< NTj9AZF aK9A@Jl X8KQ9A@CS%i L]9Ad3Ov9A4%,9A 6a9AW80g۳9A̴b!^9A@\ag۳9A@\aW)cL9A@h 8b!^9A̴(\99A4F=99Az\99A4F=99Az(b!^9ABuR9A̴b!^9A̴uR9AB(=9A@}?9A@YI=9A@}?9A@YI@ɏξ9A@(h3{TcU9A3ɏξ9A@(h3Cx'9A]<9A@ͪRud9A@{TcU9A38"9A@(h3ɏξ9AByVz9AByV"9A)iQ9A@Oi3ɏξ9A@(h3(Pbbq9Av}^r9AŐ Pbbq9AŐ }^r9Av0`ҩ&9At7셚9A`ҩ&9At7 9Af셚9A(}^r9AܨHa6&r9Av}^r9AvHa6&r9Aܨ(G<9AI2=9A@G<9AI2=9A@87`"9A `Q@#(9A.7`"9A `QiBXj#9A Q;$9AW@C@#(9A.0؏Q9A+x19A/L؏Q9A/L239A@819A+x0셚9A+x19A셚9A9Tt9A19A+xH{TcU9ARQZEGQ9A3{TcU9A3u~y.9AUBa9A@w?G9A$&{9A/AEGQ9ARQZ0,av9A}Uv9A`G,av9A`GrJUdv9A%}Uv9A(EGQ9Ac]v Ys9ARQZEGQ9ARQZYs9Ac]v 0b_9Ac] `ҩ&9At7b_9Ac] Q^9AH`ҩ&9At7pYs9A2b_9Ac]v  Ys9Ac]v ͹9A@& 9AJMҚ 79Ae 09A:嵔.i9AHROZ9A29A@beʱ9A@_2. 9AU1Qb_9Ac] X B9A'#ʿ9As B9As{9A_KrKZ9AM!\09A@W1 X:"9AOBnw&9A@ΛҬk9#9A[N?#ʿ9A'(7v.9AiK(.9A(X,7v.9A(X,K(.9Ai(#ʿ9A ~BC9A'#ʿ9A'~BC9A 0k"9AC<&!EGQ9ARQZk"9AC<&!@߶-9AET2EGQ9ARQZ@9AW$Oݸlي9A +9AW$9AzZT! 9A@TG Η=9AOݸlي9A +(DtmO9A|z'k"9AC<&!DtmO9A|z'k"9AC<&!PMNA9A,e/>I9A! MNA9A,e/xu"D9A`MiD9A[<߂D9Axضv,E9Au;_AG9AR>I9A! (G<9A,e/MNA9AI2G<9AI2MNA9A,e/0uR9A3@0&QaY9ABuR9ABh݇9A|Q&QaY9A3@0POݸlي9A720Д9A +Oݸlي9A +`a9A#6Y&Gq9Am3w9AQ 89A|M$C<9AO/V/0Д9A72(EM9A@69AW$EM9A@69AW$(oR6179A}W:e89AP=#oR6179AP=#e89A}W:8o99AvRWBG<9AI2o99AvRWB:'݅:9AUwZ!<9A0XG<9AI2(e89AvRWBo99A}W:e89A}W:o99AvRWB@9AmG7`"9A `Q7`"9A `Q_v!9AU 9A@I&'Pm 9A%!/9AmG(&QaY9AmG9A3@0&QaY9A3@09AmG8ɳ(49A6OoR6179AP=#ɳ(49A6OJ69A@A6%I69AT= {-oR6179AP=#HK(.9A6Oɳ(49AiK(.9Ai6l+09A) %6e 19A,|1+ȯ']29A@q<# c39AAa_Eɳ(49A6O@̲<=Y9A(TR:Z9AC74~R:Z9AC74~QY9A'y{\MeрY9A@пZY9Ar;̲<=Y9A(Tp~BC9AOqT3k|p&%:AR ~BC9A 1:AN8̜:AR0$:A@3z|!0:A`-$QW:A*R(r&:A8+!:A@w;SpBF":AOqT@#:A%M3k|p&%:AZM?(GJ:Y9A@ lU̲<=Y9A(T̲<=Y9A(TGJ:Y9A@ lU0 SɧS9A@ lUGJ:Y9AׯN SɧS9AׯN T9A,dOGJ:Y9A@ lUp놞9A# VF>9A⹏ F>9A⹏9Ac_ҧɟ⟣9A@q9A=*9A5#n}9A@ n^9A*}AY 9A3S*F4@9Aj49A2?놞9A# V80Д9A# V놞9A}W +0Д9A72O59A}W + %#9A]AI,놞9A# V0;:q9AMVHa6&r9Aܨ;:q9AMV6uq9A=n*Ha6&r9Aܨ`s_F9A>T *^ƹ.O9Aq$ s_F9A>T *^nG9A@F1Hs^I9A@!I9A@ ~R=:L9AA6F0.-M9A1PwN9A@q7梔N9A@CCƹ.O9Aq$(MNA9A>T *^s_F9A,e/MNA9A,e/s_F9A>T *^0,u9AD}@h}Uv9A}Uv9A:kv9Aw7,u9AD}@h(wu9A>Yi,u9AD}@h,u9AD}@hwu9A>Yi0;:q9A>Yiwu9AMVwu9A>Yiѯвs9AƏ`;:q9AMV02DhO9A!׼k SɧS9AׯN2DhO9A!׼kQ9A@*P9AW,^2DhO9A!׼k(qN9Aԑp2DhO9A!׼k2DhO9A!׼kqN9Aԑp8s_F9A"?tqN9A>T *^s_F9A>T *^V,9A+x19A+x68.u9A@TЋ6J|n;9A@V,9Av8o99Aztz(>9AvRWBo99AvRWB:9A8Q+i<9A#k(>9Aztz(f%9A@v >V,9Avf%9A@v >V,9Av@!Ն9A l|9AmG9AmGk%9A9HnQQ9Ac^!`h?v9A@Lm!Ն9A l|PfbV9A!gJWxQ9Ac]v fbV9A!gJ=U79A[ťTCẄ9A@;/J9Aa;IWxQ9AF&ˉ<9A~hYs9Ac]v 00Д9A64ޝJ9A720Д9A72?A`q9A*NfޝJ9A64H9A64ޝJ9AW$9AW$Stf9ANFʙA9AѸZΑ9Ai|s9AnZ }ޝJ9A64(9A@ Izd%9AmG9AmGIzd%9A@ 0FH%9AڽqK(.9AiFH%9Aڽq\L$(9A@KXWfjK(.9Ai(Izd%9AڽqFH%9A@ Izd%9A@ FH%9Aڽq(M;9A1k(>9AztzM;9A1k(>9Aztz`>V,9AU-~BC9A  >V,9Av} 9A "_+d9AmV=% 9A@(MX E9A 9AU-;9A@S 9(9A<"X^~BC9A Pb_9AXmg/9Ac] b_9Ac] @9A@/mX)j79A@Cz5%S 9A͵ϡBX9A.m^9A@6g/9AXm(L&{9A@EM9A@6L&{9A@EM9A@6Hwu9A@L&{9A>Yiwu9A>Yi10?2w9A>Cy#LR>x9AQϚjU:y9AWZ F87\z9AKqiL&{9A@(D]9Aeig/9AXmD]9Aeig/9AXmHd)9A@P??9A2Qd)9A@PUx7:69A%xerv9A#$F) 9APnM9ADY)??9A2Q(0y$j9A@mT *^zC9AgÑ4D9A@+ GKE9A){s_F9A>T *^0(>9AgzC9Aztz(>9AztzsA9Af zC9Ag(ޝJ9Afj_K 9A64ޝJ9A64_K 9Afj(_K 9A@ъٔ(2+9Afj_K 9Afjٔ(2+9A@ъH*>b9A@Pev=9A} v=9A} $ 9AcwN 9A6jOJ 9A@\w*|B;V9A9B*>b9A@Pe(FH%9Aw^dB+9AڽqFH%9AڽqdB+9Aw^HzC9Aq #7I9AgzC9Ag D9A3c˷Y4G9A@$7xH9A@]i*NH9A: #7I9Aq8Y9j9AS3 9AL *Y9j9AS9A{39A~l13 9AL *(d)9A<5a;S9A@Pd)9A@Pa;S9A<5(s!Rf9Aٔ(2+9A@ъs!Rf9Aٔ(2+9A@ъPEM9As!Rf9A@6EM9A@6g`뿆9A.?^ʇ9A&~SJs)9AH{cҬ D9A n̲y9Als!Rf9Apկ,9A DtmO9A|z' DtmO9A|z'2%9Aղ 1sOf9A@Km;9AkTBx9AtG\^a9A?w9A@~B\Sߘ9ATG9A8ib<9A@)M3կ,9A  03 9A կ,9AL *3 9AL *#9A@/ݎկ,9A  (Y9A5x9AY9A5x9A Xm 9A@mb!^9A̴b!^9A̴iu #9A@E{>J9AcYI9A@wuG 9AOl9A~O~(]x 9Am 9A@m u8A+?{8AI_bJƄ8AI_b=8A@|ܛTP8A kc 8A)wς8A\[8A@W8ARu8A$8A{8A~g8A+CY>c8A]K" 8Aˉ58A+? H;eg9AcӰc 9A_ 5;eg9A_ 5w{|9A@ f09AVMVp|B9AcӰ 9A@ߝ)c 9A@yT0~*9AMOM9,9A^͖i]+9A^~*9ATOM9,9AM(HxJ|ޅ8AM58A+?HxJ|ޅ8AM58A+?t7A1ZT7A@4}7A1vL7A@p:8 <7Ar7j̒7A ZT7A@=Y}c˒7A*$D7Afֺ"7A.dM&7A@Vpdݡ7A@"SN97Aģ]V7A ~X7Ak+7t7A@4}HT!FP9AB SɧS9AׯN SɧS9AׯN66`~S9A@8BpTՅR9A߿hDR9A1(ZQ9AQodT!FP9AB0 #7I9ABT!FP9Aq #7I9Aq˲O9A@NT!FP9AB0L!!29AgY9j9ASL!!29AgDN]9A00Y9j9ASHa;S9AgL!!29A<5a;S9A<5X9Av^~H;9A(Tk9A@VJu յ9AL!!29Ag({9A'Md)9A@P{9A'Md)9A@P@.|X9AsITGJ:Y9A@ lUGJ:Y9A@ lUւJX9AkX9A[{/5X9AzLp.|X9AsIT8\9A" 5-`9A!gJfbV9A!gJ5-`9AhsxqG'7Q9A: \9A" 0կ,9A@ .\9A կ,9A rcm9A@ .\9A" 0h"9A@i!Ն9A l|!Ն9A l|fm9Ah"9A@i8WC9Agxկ,9A կ,9A .LO9AǣY69AWC9Agx(Ԝ7D9AgxWC9A*Ԝ7D9A*WC9Agx03q9A#Y9A3q9A#(/b9A@gY9A@L&{9A#3q9A@L&{9A@Qu{9A߹#t8A@HxJ|ޅ8AM(8;KV9A@YPL.|X9AsIT;KV9A@YPL:DW9A@7k9IxW9AғAD .|X9AsIT)H~BC9A2zPǘ|s:A ~BC9A L~r:A@K.adu:A@\} :Aᴽ n :A@1v ǘ|s:A2zP*(q K|8A@\Tbov~8A@?gM<q K|8A@\Tbov~8A@?gM<+p7X8A@\Tq K|8Ai9kW8Ai9'G8AAw[!MÜo8A@l,aR8Ab)i*?qa8Al,7X8A4mD4^8Aw<5@58ABPjj:d8AM$mW8A"4'8Ay*?h68AӬ䄪/8A08A@k7wl'H$p8A}W68A@Ibk+8AnB;#8A:=8A׷`bs8A6%YGs8AM5h?YB8A@.S8A3nZ Fv8A<~8A;.S8A>-g(8AJi,hRSI18AmnA-2g\8AAzVe#8A lg%8Ad7 &8A>jLU/'8Aӟ9'8AyK6N(8A@`l&8AY*;L6<%8Aend%8A){9.%8APnu%8A TXbn%8A d\ZY&8A@ڄh`F'8AE'BP:'8A9G '8A@[G`{)8Axŀy8D+8A@*1D5Q-8A>zF].8A@Wwt.8A7o4.18Ae28A4L48A@l Snt48A v54k48Aύ&48Au68At@5h 88AM-"" ;8A@YIIm;8As} #ef<8AA\ 15IA>8Az@8AJLBC8A{vDD8A% H{pF8AM"!G8A G8AU k$"`H8A5)&H8A3EI8A03>A9J8A[)K8A@.l"a1NM8A&+4lbYO8A(H@ZR8A5>x84T8AVM[܂Y8A(F`Z8A}FvZl_8AXd&9z-oc8A~Z9`sv"e8A wo-)f8A{BmN?f8AT6O9f8AuPp8AIsS5\^ s8Aȁel(Dt8A/?+|u8A@!(q!w8Az"iz8Ao5q K|8A@\T,0ڒWA9A@NFXKi2D9A-ڒWA9A@NFX-*49A7Ki2D9A--0ڒWA9A@NFX{9A'MڒWA9A@NFXSז79A@8={9A'M.(a e{8A@NP[q K|8A@\Ta e{8A@NP[q K|8A@\T/`\zj9A{)j;:q9AMV \zj9A{)jj9A@b)&m9A@)l~hKn9Ao Zp_o9A8^9AB Fn|& Ɯ9A sl69A@~6l9Al9Aqj Ρ9AF 4_ڒWA9A@NFX1@ٔ(2+9AXN`t'!$9A@ъٔ(2+9A@ъZ9A$ e9A"b}g9A:'!$9AXN`t20x8s9AgsvH7'u9A# D,x8s9AgsvL t9AɱeH7'u9A# D,3848A@ˋw X8A848A@ˋwtL\8A@XSLo?18A`8A7A[j8A@k[l}+v8A@J<(~aө8AI[d x8AWѩZ38Acq8AqN]B2E[8A*P޿8A$ @78AHc"mT8A^Jw6D8A@ X8A4([X}y8A@ˋw848A@|+9[X}y8A@|+9848A@ˋw5(\zj9A@E橻zSi+n9A{)j\zj9A{)jSi+n9A@E橻z60ǥ,9A8{mkX9Aת5o.ǥ,9A8{ v9ASTmkX9Aת5o.78WC9A8{ǥ,9AgxWC9Agx$69AU5ޟL;_[29A@B jAZǥ,9A8{8(Si+n9A@ZV{h"n9A@E橻zSi+n9A@E橻zh"n9A@ZV{9X Orn9A@pz_|wu9A>Yiwu9A>Yie4u9A% .@Ayt9Abr9A`tn$;CPo9A@%%m Orn9A@pz_|:(h"n9A@pz_| Orn9A@ZV{h"n9A@ZV{ Orn9A@pz_|;PxP<9Az9}zC9AgxP<9Az9}4J>=9Am R=9Ah!Z>܎?9A<% k+1@9Aр(61A9A@zC9Ag<0dB+9Az9}xP<9Aw^dB+9Aw^R 39AcExP<9Az9}=0 Orn9Aπ͏x8s9Agsv Orn9A@pz_|pp9Aπ͏x8s9Agsv>Xcz9A@{CrgG9AgL!!29Aga`̸9A~b9A@um-)n8AGCU48AlMҖuUZr}8Ai+t|8Anj 8A]xiQv8AFRL8A@BzBt8ATxCg &J8A!Q>T|}ܫ8A_|=ިV8A@@ 8A|eX 3V8A37ꈶ8A:o 8A@UU}K^(e8AP|"5E18A]rU8A@umIoC8A-8Aʶw8A<%N8A@,y}8A<3o8Av?7yy8A@(|&TZ8AnF8A|otڪS8A@=Β8A}_5y8Aڠ$8A0*b8A[K{Ș8AF xs݉8Ay":p{f8AN 8A7{ Y28AAǩ8A ǒU 8A ^Ux8A8A@"˫㡻8Ax`Kw8A@{(Xy2-9A-U*>b9A@PeA(848AG)n8A@ˋw848A@ˋw)n8AGBPj@9AMb #7I9Aq #7I9AqMj〄G9AV#wSsF9A.&X@RF9Ang%*C9AS5:nC9Aκ7j@9AMbC8xP<9AMbj@9Az9}xP<9Az9}9J=9A'h֔>9A`@j@9AMbD(rgG9An9A@{CrgG9A@{Cn9AE0߭sJ9AR>T!FP9ABT!FP9AB#CL9A@t߭sJ9AR>F(EE9A߭sJ9AR>EE9A߭sJ9AR>G(j@9AEE9AMbj@9AMbEE9AH(73E9A?3[EE9A73E9A?3[EE9AI(EE9A2 4F9AEE9A 4F9A2J( [ 8A됚848A@ˋw [ 8A됚848A@ˋwK@bov~8A됚 [ 8A@?gM<bov~8A@?gM6Ag:29wT-6A@,L?z6AԚ2S_a6AWZS6AiI^6At[m6A@u! jn6A۶B=W6AHMZ6A$.8nd6ALSпΊ6Ae/I6AdSp nH6AV,{'H6A;D>p\6A@tRm<6A.Ąa6Av&*_6A@Zd<=;6A1.HIg6A 6xM0 4F9A1NDqY9P9A2 4F9A2ŪJ9A@ĝqY9P9A1NDN@,r0P9A;KV9A@YPL;KV9A@YPL ,͉7V9A{\UD!U9AbIm_zB+T9AX/4,r0P9AO(qY9P9A,r0P9A1NDqY9P9A1ND,r0P9AP(ّǑP9A3T,r0P9A,r0P9AّǑP9A3TQ8&g9A=>"Si+n9A@E橻z&g9A=>""«lj9A@oak«lj9A@oak\Nf9A@<wg9AA.\y;g9A7נT/g9AQV g9A@?a&g9A=>"S8'!$9A+ }8O9AXN`t'!$9AXN`t:l9Au"O9AXȨ ֚9A+ }8T0_|~8Atd9 [ 8A됚_|~8Atd9鑃8A; [ 8A됚U8Vz8A@YL_|~8Atd9Vz8A@YLo3h}8A{pFN}8A@=̝B_|~8Atd9V@S..N9AZNڒWA9A@NFXS..N9AZN789AJ窳9A@$% '9AFRyڒWA9A@NFXW8 ֚9AZNS..N9A+ }8 ֚9A+ }84 9Ar9:Ao9AӋ4FS..N9AZNXHn9A@yTQ 9An9A~eD9A@UsKǻ9ARZ 9AdOH($Ի9A5?WܞVB9A@yTQY(u8AQ ԼTVz8A@YLu8AQ ԼTVz8A@YLZ(S..N9A4VNc9AZNS..N9AZNNc9A4V[(D o8A@;v[u8AQ ԼTD o8A@;v[u8AQ ԼT\XD o8A@;v[a e{8A@NP[D o8A@;v[݋q8A@Zq$3r8A^ 7BD:9A_o#*{G=9AXjSA>9AAA9A73E9A?3[_@ܞVB9Ad9A@yTQܞVB9A@yTQ)9AUT/X9Ad)w:9A qa9AhW`Pǘ|s:A/wd|J5:A2zPǘ|s:A2zP+:A^Wqđ:A@Iٽr#!:A | r#:AZQ0f.1:A3DI|J5:A/wdaPu#9A/xQ(9AxQ(9AxDz7)(9A@rWnm*'9A7˩z嫾&9A@d#Jbɶ%9AVcU#9A?1u#9A/xb0g:nc9A{Hz&g9A=>"g:nc9A{Hz}6c9AFl*j&g9A=>"c`41Lv9AAjm9AQ2( 41Lv9AQ2(a )9A)F~G9AWn^J>9A/C"9A;JLK9A P-G9AEPb+ٽ9AbIjm9AAdh9AAjm9A`O 9AhW9A?:O!+*C9A`O ȿ9AaEd2n9AvLYB9?9A@XdU9AV9A*jZnϐ9Ajjm9AAehٕ-&u9AfPy9A# D, H7'u9A# D,kA6v9A+D8iDuw9AS7L?j}fx9A-xP/y9APPhPy9Aj6NeJy9A@ñ'Co[bx9AU!w9A@E$ٕ-&u9Affs!Rf9AehŖ9A s!Rf9A H9A@cr{;8Z9AlK#U9AK5I/J)9A<S%EǕ9A@{O>9A }x19Aehg& @9Aƍ,9A+& @9A2.P]J ^9Ao@HLFJC9A v*+Q~9A@kI9AxmQ9Aϡ9A*|9A@OI9A+ov19A@.{nF"9Ak ~9A@_~#9A1;.*K?ы9AVAK?ы9A \ E}9AO]g[|,9AƍhX֣j9A@]#Ei u9Agsv֣j9A@]#gk9ARbgBڢm9A?3nYn9Aԭo9A_kBq9A\&Ei u9AѰ֩x8s9Agsvi@#XV9Ag:nc9A{Hz#XV9A`X9A0%Tww\9A{b:ҝa9Ag:nc9A{Hzj89A,yp"9A@m<0y$j9A@m<\9Ae89Aİ\9A@O@ط^9Ap69A@d&|*g9A-1;69Ab`:9AJ:9ArT.`w9AK{Hw9A֦S1Lw9AaOq^9At.=?9A(Tk9ANz#9A@U7U9A:oHO9A';a9A6cO9AYM9A'Xx_[9A P9AX\5^nl9A|g;a9A6cp(Z9Ah,9Aƍ,9AƍZ9Ahq(U7U9AhZ9A:U7U9A:Z9Ahr87(:9A@7^x19Aeh7(:9A@7^m9A@ =}9AhZcrx19Aehs0@̨ 9A@Ybu#9A/xu#9A/x~i"9Az y@̨ 9A@Ybt0,9A@Yb@̨ 9Aƍ,9AƍP:9A:̥@̨ 9A@YbuXU19AK!`ښ9A+ }8U19AK!`x9A$U+;9A- 59A@*.raX9A4}rB9AT b^ښ9A@ʦF ֚9A+ }8v0x19AK!`U19Aehx19AehIjp9A@rNU19AK!`w(R2E/9A<7(:9A@7^R2E/9A<7(:9A@7^x(*9A_q+@9A+/*9A+/+@9A_qy8KI9A#W w U9As0D`KI9A#WAK9AhӼeO9A@uȺm w U9As0D`z8e9A@hu֣j9A@]#e9A@hua5\h9AgT$ji9A@c5֣j9A@]#{8g:nc9A@hue9A{Hzg:nc9A{Hzbd9A!mIje9A ,e9A@hu|(gh9A@+@9A_qgh9A@+@9A_q}(zS9A)R2E/9A<zS9A)R2E/9A<~(/4o79A]C9zS9A)/4o79A]C9zS9A)(_g,9A7v59A]a_g,9A7v59A]a(} n9A@*0/4o79A]C9} n9A@*0/4o79A]C98>t`<9AaCKI9A#W>t`<9AaCѕE9A@艅.G9A@ kKI9A#WXy79AaC>t`<9AW˧sy79AW˧s>U79A3FDBy|2a79A#:1Pm/79A~#vF:9Aēא;9A/:j%i;9A@WE>t`<9AaC8O9AWbGWf9AO9Ao/9A@4s[9A@n!f9AWbGW8yp"9A RbZ9A,yp"9A, 9AZ9A\9P<P9A Rb( P9A?gh9A@ P9A?gh9A@X+@9Aq+9_9A)++@9A_qJ,K[9A@Iw|69A)+B9AJ9z;*y9A@=~ i=9Axyf,9AMZ_9Aq+9(9AUd;x9AF9AFd;x9AU8d;x9A@Q[} n9A@*0d;x9AUQ9A@Q[V$C9AKT} n9A@*00[[ڔ9A@,}sU19AK!`U19AK!` g9Avkc[[ڔ9A@,}s(R2E/9A@,}s[[ڔ9A<R2E/9A<[[ڔ9A@,}sǠ K9A@ ye9A@xuǠ K9A@ yL9Ae:O9Alj,.1TP9AYfeS9AR7FT9A8-yW9A@)M_X9A)Xwu[9Ahk`*`9A?(!oa9A@xu77b9AJFeؙc9A@-z<"e9AjIe9A@hu(w8A7*S 9A@yT"w8A7+s8AyGB8AN9_% 8AsuL+6+8AAhJn8A99bퟍ>8A@ 8H8Am7'J+f>8AOG0$Uچ99AEGfL9AgnA=aG9A~\ Y*9A@(-9ASeNt89Ag~4/9A@ 5y 9AanO? 9AD 9A8ĮB 9AlqQw 9A@ZWN h 9A@U*S 9A!}t*S 9Awn]ر~ 9AG)י 9A%=,_ 9A)58 9AT-U 9A[4#a 9Aka 9AU2 9AKFOo:1 9A@cc 9A@yT(w}ȩ9A@X P9A?w}ȩ9A@X P9A?(f9A@Xw}ȩ9AWbGWf9AWbGWw}ȩ9A@X(Ӵ8A@Jw8A7Ӵ8A@Jw8A7(S8A@JӴ8A@iCS8A@iCӴ8A@J((IU58A@wT+~(68AX *(IU58A@wT+~(68AX *(#\ M9AYE_9Aq+9#\ M9AYE_9Aq+9(W\$i9Avf9AWbGWf9AWbGWW\$i9AvPT9AvW\$i9AAjm9AAܿN9A@$*6u9AȄT9Axev9Au 9A_S9cW\$i9Av0J9A@jl(9AFJ9A@jl(nY9A@Ӽt9AF89AշZ2@̨ 9A@Yb@̨ 9A@Yb.y9Ar~ 9Ao9AշZ2(9A'&549AշZ29AշZ249A'&5(O` 68A PiH?8A}20O` 68A}208A PiH?(49A @9A'&549A'&59A @(278A@=^֞Bb$Y8Ah@278Ah@b$Y8A@=^֞BXYu 9A@_DZ9A2.P]& @9A2.P],\-9Aǒs 9A@-܈;-6p9A[}Ҝ9AOl@)09AMFK} 9A # 9ARXYu 9AIV*x 9A["9AΣ>4w9A@_DvGm9AOc0=n`+9A @+K9Aq"Z9AhX[[ڔ9AcSIo⑴9A@,}s[[ڔ9A@,}srIp9AgB% z&9Aᘘ9A7(2Ƙ9A{@$hApn՘9A@d*|9ABo⑴9AcSIH+@9AMS9A_q+@9A_q[B*9A!>D9A.q,߲9A@09ArE0S9AM8#\ M9A@C}OC&E9AYE#\ M9AYEp9A){$_[9APDC&E9A@C}O0S9A7(YC&E9AMS9AMs$9A7(YC&E9A@C}O8/4o79A@W7\_YQI%9A]C9/4o79A]C9w+9A@MI,h5)ҍ9A@qt-YQI%9A@W7\_8=9AyRbYQI%9Awj^=9AyRb]G&9A~_YD#9Awj^YQI%9A@W7\_Paa9AmcfY9A)zS9A)+`!9A@9aa9A /9A@av89A[2fY9A@8=SyFBf99Amc(YQI%9AmcyFBf99A@W7\_YQI%9A@W7\_yFBf99Amc0xg9A@WfJ9A@jl(J9A@jl(9A6H?xg9A@WfH^WI9AgS..N9AZN^WI9Ag^y z9A!nPZ|9A*&x9A jEZp9A@0S..N9AZN0o⑴9Ag^WI9AcSIo⑴9AcSIaGD9A.Oe^WI9Ag8$@h#9A*g_g,9A$@h#9A*g\:5$9A@)!qX)9AL-%_g,9A89A*g$@h#9A @9A @'= 9A@LL(F"9A "X$@h#9A*g(yFBf99A3FiC 9AmcyFBf99AmcC 9A3Fi05%v9A!kS9AM5%v9A!k-'9A@B[S9AMPxg9AV8m=9AyRbxg9A@WfWh$9Ago9AzK jx9A@4zl*z9AV8m 7͇9A@zgKg=9AyRbxAuM39A@u(n>t`<9AaC AuM39A@u(n/49A@bKZ I)*59A@Gt`<9AaC0 09A@u(nAuM39A[V 09A[V|2<29A1PMAuM39A@u(n`n8A@ƃuS8A'" n8A@ƃu)^8AihKs8Ah< ]: 8AlI_8A 9*8AEsq/Ⱦ8A2H&dJ8A'"S8A@iC@b$Y8A@ƃun8A@=^֞Bb$Y8A@=^֞Bߗ/8A8+QcC8A!S0O8AÌ=Zn8A@ƃu8hd#y9A73quxg9A@:bhd#y9A73quS!2N}9A\cބ~9A@:bxg9A@Wf@`.9AjE^y^WI9Ag`.9AjE^y[9Ah5x=9ADuN 9ANk^WI9Ag8[[ڔ9AjE^y`.9A@,}s[[ڔ9A@,}sC3C9Axl 9A@9`.9AjE^y0C 9AjE^y`.9A3FiC 9A3FiPȏ9AѺ@n`.9AjE^y0e9Acwhg9A@hue9A@huADVf9Awhg9Ac8 P9A?ShV 9A? P9A?9A;%zk{3k9A^ mV 9A?Sh@Frd58A@eQE`68AX *~(68AX *E`68A̮ULsE68A]!R-68A_xTfFrd58A@eQp_|~8A>@ K8Atd9 K8A>@4̾e8AX[bZU8Aoҏ'w8A@xqׯ8A3^v[8A{>f4Q܃8A@˗}%_8AYG8A@. t}8A@gY_|~8Atd90YQI%9A5= U9A@W7\_YQI%9A@W7\_Me9A@mXvk U9A5=Hwhg9AYchd#y9A73quwhg9Acj[-^h9A_$;|Kj9AYcDll9AR$0t9AՋ_jhd#y9A73qupL7_9AU whg9ADql whg9Ac-nf9AD#zNXh]f9A3&y`ݵUd9AcX~me=]c9ADql;c9Awmܞ֠b9A@r o0ٓa9A@.\yk-a9A@X$G )T`9AK83L7_9AU q.:59A@3Ǡ K9A@ yq.:59A@3Kd69AqTIYh79A/;^79A@,aN tu^uA79A"*p`', 99A-%"Ef9AA"I0t_?9AZݿN5$  A9ANS(<=ZB9A o79gH D9A@?:n.ܫYHD9A9s-˺aF9A:i/r alG9A3*W2I9AG!Ǡ K9A@ y@O9+|8A@DO[J8A"שpO9+|8A@Ky`uw~8A"שpC^~8Aljr{l8Ax[J8A@DO0@9Agɧ U9A5= U9A5=%su9A}4@9Agɧ0@9Agɧ=9AyRb=9AyRbnz9ArĽ@9Agɧ([J8A޾Kޫk8A@DO[J8A@DOޫk8A޾K@C g9A Ǩv/9AvW\$i9AvC g9A@u4d?N9AZ Q&ߢ9A~v/9A Ǩ0V$e9A@%whg9AcV$e9A@%dŶ6}g9Aޤ4whg9Ac8_9A@lOۮD r9Aq+9_9Aq+9?9AXD r9ABe%r,Q7(9A@lOۮHC&E9A@lOۮ,Q7(9A@C}OC&E9A@C}OR2.+9Aq]s{9Aqv{a9A{^i9A,Q7(9A@lOۮ(_9AģJ\L7_9AU L7_9AU _9AģJ\Frd58A+eO9+|8A@xjFrd58A@eQQ88AS`^<8A@>r42-?8AY<A8AeȚx{D8A=#VF8A@,1HrI8A@r' M8Aa5hÿN8A+eqNQ8A0>S8AݜHST8A@8c¡AO2cV8AF7l?W[_W8A@pɆG6X8AtaNY8Azk\1Z8A@xj3 \8Aj⁷^8A:fEek.=V>`8A@kdm8 a8A Nu%ğe8A:/9Vh8AJiZk8AD}޷$m8Aeur8A wO9+|8A@Ky`upr@9A@qq9A4V Nc9A4V^ 9AHW9A!t,䛢9AqvH9Aqr@9Atݨ'9A', ޠ9Aĩ!C V9A@WՈ #G9A@9A@qq(v/9A0o@T9A Ǩv/9A Ǩo@T9A08̦vn*9AMqAuM39A@u(n̦vn*9AMq+/9A3h@ޫk8A޾KW[_8A@riƳTy>8A@gx8A@28A)] |Ή8A޸:eMK8A@ddp K8A>@9A@[jk9AhW9AhW!9Apd)9Aom9ABk z\S9Af\59AQNϢpa9Au49A5 y9A{w]d9A@XbH#9A@}c ;=<39A@l Lb!9A)[jk9A@(k;9A9[jk9A@k;9A9[jk9A@((N9Adkz 9A@49A@8Eq.:59A@3(Ϧ9A7"]9A9AŢϦ9AŢ9A9A7"]0mq9A#_%!9A_%!9A19AAS?mq9A#X[jk9A#mq9A@U3[jk9A@|O9A3f I*9A@U37 R39A9A-Mr9Aeɨ_܌t~9AyëZ}9A:^}9A_,4%}9A ]D~9A@Zs(]D~9AaZ9A@Zs]D~9A@ZsZ9AaH19A^ȥ*ۡ$9Agɧ@9Agɧbt9Aqۀ19A ;#79A.>nmއ9A 5*ۡ$9A^ȥ8Z9AmÏ *ۡ$9AaZ9Aaı<$9ACS9AmÏ *ۡ$9A^ȥ@9A9A@Ɍ k;9A99A9A7"]Y9A@Ɍ 9A9ApN%ͳ9A@k;9A9p2NB8A  Ӵ8A@J 2NB8A  4&8A@7f8A@' K8AݐY8A ʐk$8Aѳtbsn8A@7LTf'V8A1:(8A.\piݔ8A@85Ӵ8A@JX4Ou8A  n8A@ƃu2NB8A  4Ou8A` ?@8A@8A੓{X]8A@Wj!Q*8Ae;8AUn8A@ƃuH8oW9A%L7_9AU 8oW9A%)N Y9AMAY9A@އP/[9A9L kL]9A9(L7_9AU (*ۡ$9A@ }9A^ȥ*ۡ$9A^ȥ}9A@ P U9AFgS9A5= U9A5=pT9Aة+Яwp穏9A`>M)9AA`S!9AA@S9AgS9AF0}9AFgS9A@ }9A@ o9Aa\gS9AF8kz 9A@qH v":A@dq:AڞuH v":A@q($9A@VϦ9AŢϦ9AŢ$9A@V0 6X9A-9A@qq 6X9A-ze9Ab9A@qqH^WI9A- 6X9Ag^WI9Ag5Ԛ9AItdnМ9A[A~l9A9Ͽ}Q9A4g 6X9A-@V8A.`8A@V8AY8A_\8A,߰^8A@.`8At K8ATM$J<8A>@ K8A>@q8A@t|fJ8A@c_4w8A;K".8ATM$d8Ak37=8Ai>b鸖8Ai.y8Aa 8AZxf.8AK+ڝ8A@\ɺAA8A"W`#TiG8A@J<8A[Pǘ|s:AjQɼ>;z$:A2zPǘ|s:A2zPE^ :A+-q:A L2u@z:AX-ǸT:A@IŲ;z$:A%p:AjQɼ>(.18AC#38A-.18AC#38A-P18AC2f58A_.18AC18A)4_18A'938A#48A?%F58A@2f58A_06? (8AC.18AT6? (8AT/?/8A?.18AC8Q8A@MV8AQ8A@MT8A@zFbU8A?_*V8A#38ATaQ8A? #38A-058A_2M78A?u98A6?;8Ah">8AD8A'/kF8A ;nI8A@_^?I8ATaJ8A`2O8A[Q8A@M`?k8AWc6? (8A? ?k8AWcP8Az\78A_h_o"8AA#8A?M$8Aߒ??%8A?g<ߥ'8A@F6? (8AT0/ {9Avj]D~9A@Zs]D~9A@Zs |9A@A/ {9Avj0U?:8As?k8AWcU?:8AsOd8Ac?k8AWc(-˝9A@ 9 6X9A--˝9A@ 9 6X9A-H ]b3Q9Azej8oW9A% ]b3Q9Azej)PR9A(;nMjȂT9AOiEg1T9AaV9A7D78oW9A%X.`8A?Oi8At.`8Atdb8A_@c8Ad8A?q߫e8A[M?sf8A_>dNg8AvOi8A?(:hsO9A/ܾ8O9A@O ϙ:hsO9A/ܾ8O9A@O ϙ@n9A>c9A@V$9A@Vn9AXg=9AZ p09An!ϓc9A>x{Aj9Aա%_h9A!k 5%v9A!k29A^- {Aj9AQ,%t d9A@9i'9AG c^9ALǣPo9A7KO"79A:C|zz9AzM? 9AXuqR;U\9Ao%_h9AաhV 9Aա%_h9A?Sh V 9A?Sh^֨^g9As4ě[9A4a׷1l9A# 9AWBmxX9A@d3F H9A"yB4P9ANT<~q9A@y%_h9Aա0.18A2{28ACu28A2{28A.18ACX, 8A2u28A@?l, 8A@_ $8Av/#)8A@?l*"*8A@m#*8A@?n(_v/8A@)!18A u28A2`j]8A2hMv2NB8A   j]8A2hMv퇧8A^߮8Ac$ =8A@q1@?-U8A ur72t8AxU<8AE5}8AFH2NB8A  (XX8A٪_Y8A߅XX8A٪_Y8A߅(KoaN9A9mI:hsO9A/KoaN9A9mI:hsO9A/(Oi8Aߞ_j8A?_j8AߞOi8A?0_Y8A@j8Ak_Y8A߅`8Akj8A@(?j8A߶o~8A\?j8A߶o~8A\(_j8A߶?j8Aߞ?j8A߶_j8Aߞ(j8A߶?j8A@j8A@?j8A߶(ؽZM9A@^rKаKoaN9A9mIؽZM9A@^rKаKoaN9A9mI0C8A6, 8A@_ C8A6F_98A?, 8A@_ P-̜q9A)ó(hd#y9A73quhd#y9A73quy9A@1n="3^y9AĬTw9A`\Vv9Aő7/s9A@{̀-̜q9A)ó(@V$e9A)ó(-̜q9A@%V$e9A@%SAf9Adxj~Fj9ABsEboqHo9A`~-̜q9A)ó((&K[?9AY -˝9A@ 9&K[?9AY -˝9A@ 9pC 9AY &K[?9A3Fi C 9A3Fi#@ 9ALO59A]5~?ZH9A@Cl[9A@vj29AMY*H9A Jiq9AʖB"'9A?<2")9A@PqpR&K[?9AY 02ٹ]9A_yX_9AӘX_9AӘC,I_9A@~X52ٹ]9A_y (-̜q9A3Mgr9A)ó(-̜q9A)ó(gr9A3M (gr9AñS9A@Rka[9AѰz1S!9A C'9A@@ t9A k9A-$@h#9A*g(x`Ft9A@_|=t9A@ķ#x`Ft9A@ķ#=t9A@_|(1}F( 9AU 9A@\1}F( 9A@\U 9A ON^7A!(IU58A WAON^7A!_~7A@>7A5B~}7A@O{O77A@+CX7A@,cܨ7AUBf7AD|o7AʵXb7AT7˿pDq7A@cBJ7A(r·c~7A@{p87A-.W3i`7A@Ó2>̿i7A@# i7A%}0Rm}7A@r c>87AoRZy&7A 7ug7A+ZA7A VV7A@HiG"7A8 6 ^7A@!_6T 7A65z|c7A@žgS\R7A@I=n4#=i7A@~[wps7ASih0lW7A 6*{8AQ[X]8AO߳98A@!WrÙ8AQ߳A/8A!Ylyx8A&J 8AQih0é 8ANu*8AZufD8ApD 8A#݅Γd8Ap Cmup8ATxJP3a8A"bqt8A@NP^U8A4T} 8A@HC 8A@Re ?xĶ#8AZ\z^%8A[8&8ATgq&8A WU`'8A@~ b(8A}Kr_)8AQJ=.*8A@]pqg%/+8Acl"9,8A@?9!.8Ap_ KJ08At}] ,718A@k38A8 0(IU58A@wT+0'^>R9AbbeW9AK:'^>R9Ap|MAT9AHbbeW9AK:HP7*Q9A'^>R9Azej ]b3Q9AzejP7*Q9A@]YF6~=Q9A(\iZQ9Ag:)Q9AS'^>R9APh7A@_ hg7Ah7A@_ 7A@ck(7A^c7A:X7AVx7Ahg7A_(sp]9Ah2ٹ]9A_y2ٹ]9A_ysp]9Ah@2ٹ]9AH{ZUc9A_y2ٹ]9A_y)t.a9A_8Ԑc9Aw~$H{ZUc9A@~'a Hc9A0_%!9Ag9A_%!9Ay 9A?OsC9Ag(y?7A_h7A@_ y?7A_h7A@_ hk,{9A7𡥓9AF gS9AF"z9A@0\Ak,{9A oKDۥ9A@ڵWfp9A@#VsÒ9A^,kk}9AW|𡥓9Ahl80yn9AtZò9A7@mV9A@ܦ_ sp]9AhmV9A@ܦ_ =nX9A&cZ9Att 1zZ9A@ssp]9Ah0? h]9A gˆ$a Hc9A? h]9A gˆ$'`9A\a Hc9A(? h]9A gˆ$sp]9Ahsp]9Ah? h]9A gˆ$.A8Am%y]8AJn.A8A Uα8AF8AJn\O߄8A@F涑8A0f8A@W> 8AFQd8A@L[ [\E8A N6~K8A) ݺ 8Am%3[8A m%R8A@iCbl8A?*Vy]8Af 8'^>R9A@[3+Κ6T9A'^>R9A?R9ARCyS9AJΚ6T9A@[3+8'?8A/- 8A6C8A6'?8A@P?8A?s- 8A/ S?7A/?k8AWcS?7A/We8A_6L8A?H8Ab8A;L'8AE_]8AԿR 8A?T8AA18AM_8A@Nq8ADt8AAy<8A?j?k8AWc!(hg7A@1JX7A_hg7A_JX7A@1"h99Aɭ3̦vn*9AMq 99Aɭ3O9AuZt\9A.=H9Adq)9A@! E)n9AN/ ͹9A_|S9A@5 cZKRV&9A̦vn*9AMq#PR8A^7XX8A٪R8A^7S8A@+_,T8A@?!_oU8A")V8A@<BW8AXX8A٪$(79A0Kc9A>c9A>79A0K%9A0K79A@qq9A@qq;c79A/lt}9An& v9A'uz#q+ 9A@'W=O_(9A!JNsJ.Uy!9A ' Z Q9A@#v||kд9A?iֲ9Avoٴ9A9A}Q^as9A%ƃƋ9Ad-9A@)9nտ9AH79A0K&(>#Q9Aa8N"QeLR9A@O2E>#Q9Aa8N"QeLR9A@O2E'XvB(M9Aa8N>#Q9A@^rKаؽZM9A@^rKаvB(M9AIPM9A ;ï탴0N9A@lN9A"!O9A&&6i||P9A{DF>#Q9Aa8N((9A@gQ6O9Ag9Ag6O9A@gQ)x|<Ū8A8qlZ.A8A  |<Ū8A8qlZ-&8A#)RC߬8A!Hqld8A/Z_Bԯ8Aq(@(>}ٱ8A:-@DfV8A@ځf<d"8A!/PtQ8A _DD͌&8A@uWuiGs8A@j.A8A *py]8Ag[#a8Af  y]8Af .8A^-‡8h8A<=[]h8Adr;w<8Aꥒ9t8A q6|Uޝ8AF;YD8AcÞF$d8A@0Oy͝8A@0W#a8Ag[+(y?7A^`:7A_y?7A_:7A^`,(Zg7A@aS?7A/Zg7A@aS?7A/-8JX7A@aZg7A@1JX7A@1e7A_^;E_7APZg7A@a.X>a8A10j1}F( 9A@\>a8A10jɠ8A@OR8:z9A->BK8R9A^p1Bkg9AWŵ-239AnNA o 9A@Z~1}F( 9A@\/HM%b9A@tj-̜q9A)ó(M%b9A@tj0K0h9Aa8A@樍sc/8A10jc/8A@樍s>a8A10j40S7פ8A,v|<Ū8A8qlZS7פ8A,v##Ӧ8A@g|<Ū8A8qlZ5H 8A,vS7פ8A^>g] 8Ayh88Ap!^8A^>g]Ҧ8Ati"^8A@$(qS7פ8A,v6(N6S8A=?wyS7פ8A,vN6S8A=?wyS7פ8A,v789*|\9AM%b9A@tj9*|\9A]9A(}PzC`9A;D~xM%b9A@tj809*|\9A? h]9A gˆ$? h]9A gˆ$[]9A Px9*|\9A90j8A__k8A[j8A__k8Aj8A[:(SunZ9A@ڢ9*|\9ASunZ9A@ڢ9*|\9A;`YxI9A@ؽZM9A@^rKа YxI9A@XK9A*Z)0#K9ApZ OL@K9AugK9A߃%|K9A(\n%*NL9A@ܖ:6M9A@H/wIؽZM9A@^rKа<@֬L9AxSd>#Q9Aa8N֬L9AxSdK2N9AT:`r_gCFO9A>Xqj\SPP9A)\>#Q9Aa8N=0YxI9AxSd֬L9A@YxI9A@jBJ9ABNO֬L9AxSd>0LxŠ8A@a N6S8A=?wyLxŠ8A@a V 8AdܟN6S8A=?wy?@|<Ū8A={8A8qlZ|<Ū8A8qlZk'8A~]h8A@PN6Q8AJzF?'!p8AE9!]d8AC9|nZ8A6U=, [8A5kAV8A"χ-e8A"508A18A@[ԚW8Ag8AHTR8A@@VW8A0%FJQ9ABR *U9A@O2E"QeLR9A@O2EԷS9A"EAT9AJE R^T9A@dF'T9A$oHYT9AqxGK *U9A&PrU9A@JT'T9AYD\͊#T9Aib.JT9AMVk1$`nS9A[#xˢR9AgJQ9ABRG@'8A@@*>a8A10j'8A@@*Zh|8AXZf8A@za j 8A@PK$p>a8A10jH(VW8A@@*'8A0%VW8A0%'8A@@*I899A*io99Aɭ3o99A*i#09A@?HQ79A@Z99Aɭ3J0mt8AF#a8Ag[mt8AF ˋ8A˔x#a8Ag[K(2 P9AuJQ9ABR2 P9AuJQ9ABRL0֬L9Au2 P9AxSd֬L9AxSdx(M9AT2 P9AuM8h8AEy]8Af h8AE̎8AжL8A3)vy]8Af NP={8AEh8A={8AN !W8A,n8A@Fꨝü<$8A̢z\8AYjT8Ah8AEO0- 8Aӵߕ#8A/- 8A/ X!8A@Uߕ#8AӵP(:7A@?ҸZ27A^`:7A^`Z27A@?ҸQ0(N9AoBՌ:Ad(N9Adb:AUsBՌ:AoRXS7פ8A@Wt+8A,vS7פ8A,v, N8Aya8A@efIjq}8Aִ1XF8A"Sԅ8Aa#8ALZt+8A@WS(={8Ap w׏8Aw׏8Ap ={8AT(t+8Ap w׏8A@Wt+8A@Ww׏8Ap U`<݈o9ALB?x`Ft9A@ķ# x`Ft9A@ķ#M;r9A2-r9A@מ-2=aq9AV@=8@RR9zp9Al'pTz߸o9A@':n<݈o9Aa jG8o9A|To9ALB?V(BՌ:A@@FOFs:AoBՌ:AoOFs:A@@FW@mt8A@ݘ&i8AFmt8AF68AڹNC8AQFI&o8AMݘ&i8A@X(qƁ7:A@J@4OFs:A@@FOFs:A@@FqƁ7:A@J@4Y0#8A$5e)]L8A@樍s#8A$5e)]L8AKc/8A@樍sZP27A_8AF c fy8A$ hPϥP8A (p@8AgWɣϥP8A (p+8A5S8A@cF4|d8AgWɣ88AlCq8A@%@8AD!I0i(ϥP8A (pk<8A ϥP8A (pk<8A j(Z27AJ7A@?ҸZ27A@?ҸJ7AkHw׏8A]T$GϥP8Ap w׏8Ap w㜢e8A7k_D8AH$6`8A@} /ԯ8A]T$GϥP8A (pl(ߕ#8A@?b)8Aӵߕ#8Aӵ)8A@?bm}ZK7A$@ON^7A!}ZK7A$@* 7A dyݺ7A@h |7Ao*k7Aێpsl*7Ad컘)7AS\Y5A7A@ m7A4-yy7AC7Ab3M:X7A@_w7A@%F`+7A@[]N7A=_.7A咽>17AR_*NI|7A@^rgRѷ7A> 7Au K]E7A_ʭON^7A!n7A$@}ZK7A197A1nƑ7A)1j.q7A@~02w7AzHp^soQ7A@ t-E7A@lk0j7Ax#%+V7AN"7)4 y7A{e21JVЖ7A;8%V7AfHӱ}j7A@\+W7Aepo Ȗ7A@.Z5zL7AR&%ܗ7A"%*.7Aos٘7AxD1S`7AWTtqŔ8A@w-@QU8A@,'@-V җ8A*F8A }8A@JeCXd8A@de 1zg8Ah\sߓ8A x^p18A ee8AnfSr`h\k 9AŬL!$9A*i h\k 9AŬL!TF 9Ac3 9A¸?둓9A! gfdd9Am~9A8"jy9A>$9A6o99A*is8qǯ9A@!h\k 9A&Yqǯ9A&Yҏlr9A!"p 9A@!h\k 9AŬL!t(F7A?#J7AF7A?#J7AuHw8A b^-#8A$5w8A b^-$48A@Ȉ HB8A`I["Ͽw8AQ)ϴ8Aq:#8A$5v0c fy8A b^-w8A$ c fy8A$ A%8AgҨw8A b^-wH%_h9A83.5Q9Aա%_h9Aաhn9AB- f-C9Aj9r<9AqO&yhIywa9An%P5Q9A83.x(9A83.5Q9A Y9A Y5Q9A83.y(44g8At5w8A b^-44g8At5w8A b^-zHݘ&i8At544g8A@ݘ&i8A@춳`8A_g 8A@{ǣj8AwX^8Ao?-44g8At5{0TS9AGBvEZ9A`398TS9AGB?ST9A@RBvEZ9A`398|@TS9AGB,tV9A;hOȌV9A;h,tV9A;/yV9A"RdkV9A<ATS9AGB}0C7A ?pC38A_<27A_ P 9AO6].\ra 9Ac$w3=c 9A%w66 9A Ghsp8}7 9Aѩ^;Mr 9A$".Ү%9A\k0vI'9AN`-i?y'9AZϪ'Ac.(9AhG$(9A8 ^)9A? zds +9A`J( ],9A@g\_A2[-9Ao'AQ;-9A@A}p:-9AZ;1 L,9A%3Ұ+9A,ϙ!4*9AvEv6:'9AڢZ [A$9Aqk Ȩq\#9AC˔+ p"9A8ALi"9A}V!9A6AQcu&| 9A@7AQcu5 9AP | 9A=)o9A@VGH9AB-@>;B9A%e.pp9A@ ձhvk6'9A;pug9A?HQ*9A@< HK9AeJiݫ9A]{9AeJo99A*i0V18AW3Y$&8A(r/NV18AW3Y.|)8A"_/T$&8A(r/N(&$8AY6$8A?O&$8AY6$8A?Opf'J9A`#\JQ9ABR JQ9ABR\EʣQ9A3Q9AW}Q-cZQ9A@<;k7Q9AKƲO9A`"Ɔ=fN9A1wFN9A/e5_OJ9A xIv[-J9ARf'J9A`#\(1Dz8A vHdV18AW3Y1Dz8A vHdV18AW3Y8RO8A vHd1Dz8A (p1Dz8A vHdRO8A @鍾8A /kϥP8A (pmI9AEk9A@ }9A@ ċ9A)*S9A@a,5?v9A@WmI9A@9 xf39A:vٲm9Afw#|'=9Axc7^9Af+ =9A7A6l27A_<$_>7A6l.t7Ay->_ 7A_8n7A# 27A_<(=7A6l$_>7A?K=7A?K$_>7A6l07.8Am[9A:767.8Am8AOP[9A:76(h8A &"o1Dz8A vHdh8A &"o1Dz8A vHd0v9A6f058A2%68A! 8Ax^98Aq8 Q8AW 08AF'Fei8A@v Z㗔??8A@/Ҟyd8A))8A|2]o8A 1S'C'8A =c.eUڗ8A`]tq˩8Aժx0G9Ah {\9AEk\9AEk&?9A3jlG9Ah {(} Zp9Ah {G9AdLr} Zp9AdLrG9Ah {h38A@{_#8A7 38A ?pC8A ?8y8A@{?8Atl 8A*k8A\h8AB?8A?_8AA_#8A7(\9A $A{e}y9AEk\9AEke}y9A $A{(G9A $A{e}y9Ah {G9Ah {e}y9A $A{(^}8A"^}h8A DIk^}8A"^}h8A DIk8]KL8A"^}^}8A`J]KL8A`J$ A8Ae>;8Ahv^}8A"^}(jɞ/O8A~}8A@nj;vjɞ/O8A~}8A@nj;vXw׏8A~}jɞ/O8Ap w׏8Ap z*|8AEEm8A`Ļ 7UO맺8A,0%e( N*U8A/4@az08A`:&Z5R8A@hjɞ/O8A~}0QlX8Av^^}8A"^}QlX8Av^8A$䤀^}8A"^}(o7A…t7Auo7Aut7A…(Zj8A dzj8AsGZj8A dzj8AsGHZj8A_bt8AكZj8A drn8A_^o8A [$q8AكPs8AEbt8A`˅0;8AeQlX8Av^;8Aet18AA4QlX8Av^(dŊ8A}~7.8AmdŊ8A}~7.8Am0s8A}~dŊ8A`p4Rs8A`p4RRj8AMydŊ8A}~HC8A?vM8A7C8A?H8Ah[K8AJL8A^@L8A`3?vM8A78gA8AC8A`?SgA8A`?S?A8A`A8A_C8A(Nv8A M* dŊ8A}~Nv8A M* dŊ8A}~( U8AȃQlX8Av^ U8AȃQlX8Av^0\N8AF<;8Ae\N8AF<X<8A] ;8Ae(6oc 8AF<\N8A;PL6oc 8A;PL\N8AF<887A@$_>7A6l87A@3L7A`M7A@}$_>7A6lxz"B89A |!YxI9A@ z"B89A |!@89A JME;9AT}@z=9A}x0ZeGK>9A@yxdg}?9Ap0>mv %A9Ayb]\[B9AUG+ C9A@+D9A zמhF9A@RYxI9A@(]79A%Hz"B89A |!]79A%Hz"B89A |!( zh9A Xhv9A6כ8A@;D8Aȶd098A ?`˵\N8AF<98A ?`˵8A 8\N8AF<(87A _ս(=7A@87A@(=7A _ս(98AyإD8A ?`˵98A ?`˵D8Ayإ( U8Aww8Aȃ U8Aȃw8AwXf'J9A.|M_ljL9A`#\f'J9A`#\u J9AwBt.\7J9AhU[L9A@j $0UL9A mM_ljL9A OC0L9ASn/ufK9A.|X#pZ9A:A9A0K79A0KņKf9A@g^#pZ9AE$Ge9A/A9A`@hÉ.+9A cYLJU-9A@8:A9A(Ut8A@_bt8A`˅Ut8A@_bt8A`˅(F8A{bL8A`F8A`{bL8A3 \-9AJY mq9A#mq9A#xT9As.=ˡ2*9A@0:"09A@+4m~4_z9A@ WvO_W9A0FSs9A9A@K^(rsK9A;.9AHv"F q9Ai?;9A@r/9A%Q9Ag”9A@oy9AΗ\tHd9A0Z?E9A@Tk3 \-9A&?;HD9A Iq*9A -<9Ao6F7FϏ9A`]9A jՆTS9A`[8pn͖9A@hoX(z9APֽ{9A6H0p9AU]ȳZUi9A h&_kV9AJY X:A9AJY _kV9Aw@:A9A9A"T9Aw@C9AÝZ,Q9AyNGx`9A \s.9A`z_kV9AJY (F9A O:A9AF9A O:A9A(c?e8A _eMk8A_-c?e8A_-Mk8A _e(7t8A?{Ut8A@_7t8A?{Ut8A@_(7t8A`M/u8A?{7t8A?{M/u8A`8Mk8A_7t8AMk8A _eMp8A_Fq8A7t8A?{0yƭ9A`w`s9A Xh zh9A Xhyƭ9Aqs9A`w`(ؾ9A9A T߄S38d9A;ۼyY=9A@1bS&b19AZsn& LU9A \z(28A@_28A`28A@_28A```{7A`pl}ZK7A$@)`{7A`plp{7A@tO>|7A`$wS5~7A`1iX*w7A *P [Ծ7A>KXg7A.g߄7AbE$^7A!n7AbB)1;7A`/ l]ji7Af3J7A@>7A`v;P6oʬ7A@KA 7A)*7A@p'U٩7A`RW.E 7AB^2`k7A Zǩ-KFVݛ7A >FNr7A@˧jl*7A`lDС7ANxşʢ7A )ã7AG Swyhy%7A $/sc7A`ig]7AߓEVm7AVRGí7A}NiWg7ABIe.7AjB3Ƌ7A`FA:tB7A@c\E3Z 7A1B-{_=7A`_)/7A T0o& 7AcyD{2Ϸ7Ag}ZK7A$@(*_7A0J7Az *_7A0J7Az 8(=7A u"_7A _ս(=7A _ս7A_ 7A_7A u"(_8AG$8Ao_8Ao8AG$e}y9A`))YqA9A7!Re}y9A $A{c_/("9A@%{N#09A NYQK9AOb3 ݤ9A_ӆ9A@^5HɍۮS9A s^e 9AiN V 9A]U 9AkK-|ۚ9A6A}ࣱđ96A@X`$46AٹdZ06A@`A -yG,6A@T -D)6A@#_tR6A@4`U56Af#gr6AӣAs16A jEF xѨUl 6AkaE_ 6AFCs 6Ax +{6A-++6A 1kFgO6AW3$GtqA6A/iOA56A1=j3K6A`>u_:^[6A`&bnf66A^ ۣH6A$,i6A`s'6AQ7!5AI &5Ap#9\qk5A`L:\5Aa<Կy5A.`i7A`ߟ00J7A i7A`ߟ0b7AXPγ7AgZ)7Ab]7A>?7AN7A?I=7A0J7Az (_&8Aa 1AM8ALl_&8Aa 1AM8ALl07c<8Aa 1_&8A@qǑ7c<8A@qǑF}8A]b_&8Aa 1(٧|,V9A@t1 H]V9A}*٧|,V9A}* H]V9A@t1( H]V9Aw<237V9A@t1 H]V9A@t137V9Aw<28A}4 ՚!V9AhT8AG$=)8A@jRH/ R?8A}4;Q19A}4V9A4\2d299A.pb39A3N0$ ,9AT5bG9A n+EKAs 9A 4# 9Aߌ>J[ 9Aw^9A}b b9A F% ՚!V9AhT(e7A ?!5i7A`ߟ0e7A ?!5i7A`ߟ0(p7A ?!5e7A_*p7A_*e7A ?!5tYGw7A E;s67A1@7A1U7A )7A [0Ł7A@n[MN7A 4.Xك7At\Nfhx7AojrQDž7A@-(3ՃV2&7AܨCɱ^7A&7AI)-s&7A3Ƌ7A +ҫ[7A@C)EȊ7A@oĞ1Xك7A'9 .⭊7AN^QڏՊ7A_KcP׉7A3gD7AnojROR7A|{P׉7A@cP׉7A )Љ7A ݘt7A w6F8چ7Aj0 9K 7A@S"u$҆7AϙΥzW7V7A@׉v L7ALیl;RV؄7A<$ڠ 7A@Db0L7A%} k7Aq}pZ{LP7A@[C) C7Al~P~4]\7AfCz7A@+ /7Abï7A{M27ADI0|7A@ șy7A|%H<zx7Anġ=P5x7Ab6[nm8 x7APJsy5x7A0ztYGw7AbiS-|7A E;s6(#7A`7*_7A#7A`7*_7A8f`9A kl;LU9A \zf`9A kl;>9Aenm&_59AQLU9A \z0Wz9A kl;f`9A`dBWz9A`dBRIAc9A`:w:f`9A kl;0JG9A`o=f`9A kl;JG9A`o=9A`X;f`9A kl;(8s8A? _t8A_ _t8A?8s8A_(=T`9Aٻ`U@9A|PdA9Apep#. \9A/^4F9AXB c.q9A@eM*U9A@9H9APU @WV8A@*W2v_8A WV8A Hߢ[8A@4d'\8A?=_\8AD2v_8A@*W(8AߨX?8AWQ?8AߨX8AWQ(L0j88A`tZ8AG$L0j88A`tZ8AG$H)k9A ęh7kp9AdLr} Zp9AdLr≝p9A&#7kp9A ~uUp9Aග+l9A ogZ)k9A ęhx>#c8A%մj˩8Aժx ˩8AժxE`8Ap􍂬|R )A8A.o68ۛ8A@/U5ׄ8A<]fƖT8A@1+Q'Ӵ8A>#c8A'8A _8A`iR8A@Zg€8A%մj(F8A ?lg€8A%մjg€8A%մjF8A ?l()k9AM*n]}l9A ęh)k9A ęh]}l9AM*n(_l8Au1lq8A_L_l8Au1lq8A_LPE;WT9A8pz37V9Aw<237V9Aw<2UV9Al.:2?U9AeS1A9A lNA9A@62 C[ /9AHi:tE9A{>[-)HNd9A@/"H-Z/9Amԙ~dP9A@i 9A`8&9A`|}9Aw/噑9Awq}z3f9A`hYfcX9A$)=!9AbI~"9Av@g€8A@A$} 8A%մjg€8A%մjKň8A*_{Dˊ8A@A$} 8A%z 8A'8y(n7A`~7A?BPn7A?BP7A`~02v_8A???e8A@*W2v_8A@*W9_a8A9h??e8A?(a>J8A@_NP8ALa>J8A@_NP8ALH#7A@eo7A`7#7A`7M7AI7AW7A_)af7A@ mo7A@e(S9A%7XLU9A \zLU9A \zS9A%7X0'*i8Am_l8Au'*i8Am#_i8Aߎ_l8Au(??e8Am'*i8A???e8A?'*i8Am(?8As?8AߨX?8As?8AߨX (ܗ9AaS9A%7Xܗ9AaS9A%7X!HJG9Aaܗ9A`o=JG9A`o=OB9A4WEuQ9ADsbV|9ASXgf/9A BQܗ9Aa"Hv:9A# g_#9A v:9A# ^$9A 娟m(5r9A (Ĉ:9\9A7>+3,"9A,g_#9A #0J6U 9A# v:9AWr1{J6U 9AWr1{9t 9A &5Lv:9A# $(o7A$~7A@eo7A@e~7A$%@68A@< ^_&8Aa 168A@< ^Eƾ8A!'SՍ8A6uz(8A@K`_&8Aa 1&hO68A@< ^68A`!, O68A`!,U 8A޾3;v8Ax$nLMS28A`-wv{8A`"[w}"8A8A,怩8A@) 9;u8A`[68A@< ^'x_$8Ac28A` _$8Ac&8A|?'8Atn(8A?#,8A@ߐstd-8A`? lze.8A ?\ct/8ADT708A?; 18A@+u28A28A`( J7A`%p.t7A@4}x J7A`%p._LL7A8nPL7A;aG4L7A D ƠM7A@#l8M7Asr([ eM7A 4CIM7AGi'[[M7A`NO1ʑN7A~,EN7Ak>*7Y O7AL^Ŀ8&rO7A@OF'gwO7AG6P7ApT-P7AX.'DQ7AUʳJNQ7Aዲ!JQ7Aa^ϪT7A 7~)R7A`W{wTfR7Asg1S̀R7AprfNUS7A^l^*aNS7A@WST W7A&pIZU7A I5^v U7A"-zmI[V7A 1HhU7A@ aU7A~8f- V7AD?M4V7A@7J74V7AHhf)7V7A3;iS7A@}+LER7AƅͦmQ7AAݛt\ޟ2Q7AI훞P7A;uO7A (˳M7Ar }8L7A 0cUK7A@2d[d:eK7Ac">0+L7AA[M7AWaSѤM7A:'VXN7A@F%g,OAO7Am-o.P7Ax:1 Q7A@j`9Q7A0ޔgR7A@,FS7A˸~"S7ADT7A%STU7A NwVeU7AZf RV7AtJ!W7A@VC7尉Y7A >,Z7AeʜnM[7A@+dA3*f]7A@9Yc^̖^7A_ɂSTA6_7AI!Nq 1a7A+O=b7A(J+S.d7A1IZ=9Te7AIV/XPg7At5>Hi7A@r}׺0j7AR؃ RWk7AZ ďl7A_f2!xn7Aʺh\kGhp7A@'X[+0r7Aetds7A1 /R1$u7AV'=Kw7A`C(DW{7A`LF^x7A!wx7AK̼]vx7A@O䎋47w7A@y٠Yt7A0uL5 @t7Acq} aRs7AuS*Phv^s7Al9YAnTr7A@\%pp7AA{8"GB\p7Ar\{OUw7AuTN#y7A 8n{7A@A Q"|7A]4IPfJz}7ATb =~7AvhH n7At?DU̪b7Au?DOc27AܤXI˿7A{>qO7Ao;ASx77Ap;ASܯŇ7Aj5PO\X7AyhH}f 7Ab=Cc6A;*"Dn6A-[_ ]6A@7A@TwHn>7A`%K)Ux@7A`mPAí@7A@RMt@7A఻>X)X@A7A@qh~XA7A@nRuC7A 7A_}c7A_}p>7A?,.07A`o7A@e7A` 7A3o7A@e/49A y}G9Ah {G9Ah {.5j39A@Z1rO9AW"էR9A#nH9A#F9Aʩs9A`jNQ9AJ8A@_]D8Aa>J8A@_2(&R_8A??e8A?&R_8A??e8A?3HER<8ADXM0L0j88A`tZER<8ADXM0Uf28AP\8A@ڙ8A-|O8A@{وL0j88A`tZ4068ADXM0ER<8A@< ^68A@< ^>o8A`NƁER<8ADXM05H~R9A7͜Я"U9A8pz-bT9A8pzj,M9T9A ԻЯ"U9AocM%T9A91Z~nS9A 0~R9A7͜6( y-8A ER<8ADXM0 y-8A ER<8ADXM070~7A?d7A$~7A$ 7A87A?d8(dv|7A@߷c7A_}dv|7A@߷c7A_}90'*i8Aqo8Am'*i8Am"{n8A?o8Aq:8b_)8A 28A@_28A@_28A߽~/8A@>b_)8A ;($8A b_)8A b_)8A $8A <O5Ao5i<Կy5A.q75Ao5iC@5A-V*5AYwS-Z5A ثjVG5AgҾR5AR-Bq"5A@^ŁO5AKzg|5AkeܑoE}5A Vgsܠ5A[\]s>5AX#yM5ANLVt5A7˾5Um/5AQ|GQf5A1j;A<Կy5A.=H8A? _$8A_$8Acvb#8A߬"8A!8A.8A8A? >(8A? ?8As8A? ?8As?x?؞c8Ḁ&38A ?؞c8ḀNX<8AvK8AX 7: Nw8A_߀8A`ӷ8At&98A%8}eO98A`na8A2k}t~8A i8A&38A @(P8A@-2v?؞c8Ḁ?؞c8ḀP8A@-2vA(v:9AGuބ0D9A# v:9A# ބ0D9AGuBHXq8A`]J6U 9AWr1{Xq8A`] D9AT9k/9A`yҌ ;9ABs9AJ6U 9AWr1{C0{8A`]Xq8A^B{8A^BDr#8A1m6Xq8A`]D(ބ0D9A }nÃx9AGuބ0D9AGuÃx9A }nE(7Aw_s7A?d7A?d_s7AwF(p>7A=E7A?,p>7A?,E7A=G8?7A 58A ?7A D7A`#8A`L58A HH7A@}7A`~7A`~7A@߶ 7A 0}7A_ 7A@R7A@I(!XY8A&R_8A!XY8A&R_8AJ(,U8A!XY8A`,U8A`!XY8AK8u8Aߍ8A?u8A_|8AW_9~8A`ϱߍ8A?L0o8Au8Aqo8Aqu8Au8AM0?7A_7A`?7A_7A a7A`N(b_)8AdP&08A b_)8A P&08AdO A:AE yj:A@J@4!qƁ7:A@J@4VÛ:A>5ò:A R++ :AX kDǽe:A [Vp.:AԐ?q:A`A(U :A@DJ %IÖ :A@EB<ܛ:A@r $X1:A >yj:AގDwi:Ah&/I(u:A`[ QO :A`_^m] :A ɳq`J :A DDe :A`Mj8\k:A@ZkÚGN:A@@ZkɺU:AbsmtYW!:A*cr^&:Ay&x7:Ag(4:ACY[:An\b:AMN:A`L爢A:A *ޱsN:A=8A?`]D8Ap(/Z68A`;6@?w78A@E./Z68A@E.@?w78A`;6q(VH*8A`7P&08AdVH*8A`7P&08Adr('`7A?81_7A@'`7A@1_7A?8s(%7A9?7A_%7A9?7A_t(7AD?߳7A {7A {߳7AD?u0.9AB D\9A`xK=9A`x.9Ahg !\9AB Dvx 9Au'D 79AIK:x 9Au'DF-!9A3}@D'%9As$-W'9AhSȒ._C,9A@J l -9A`oX09P~29Adr#D39AԢ؍39A@' 39A?89A K4m\ŽD79AYU?9A!"SQ@9AfM%{9AK\9AB D:A9Am"i3_9A:A9Ax,9A2w#8,9A@k&s9A,YG~9AEM_ %`~9A }9A ]9;L(9A@syUs3\9Apt-[J9A Ug~m9A`IJ)9Ay%wq9AUZcn9A dKw9A@Ik,&P59A k7t!ܴ9AA3_9Am"i@Tl)j9Ai .mބ0D9AGuTl)j9Ai .mLYI9A >;P:aU9Ajy?<o 9Aބ0D9AGu8% 8Ai .mTl)j9A@pe% 8A9͡gx"9A@peW.,9A+EiTl)j9Ai .m@x 9A@F8oƖ5:(9Au'Dx 9Au'Dc 9A`N;3K4!9AL Q&R!9A4UƖ5:(9A@F8o(KL$8ApVH*8A`7KL$8ApVH*8A`7(?7A?~qM7ALQ?7A?~qM7ALQ(wK8A~0s% 8A9͡gwK8A~0s% 8A9͡gÕ0ê9A@zuu P9A`))YqA9A`)) P9AX(6p9A >t9A+Z[x99A`ihF#9A@VPoPͻ89A@?~IP;9A`mmq9Aib V $9A`o+*2!l9A ~&P9A)][9A JO9A,\J<<=ԫ9As 9AxL9A ] [H9A NԻ2+Tzի9AgBHÕ0ê9A@zuu(Z?8A ~vk8A`_SZ?8A ~vk8A`_S(7A@v_7A K7A K_7A@v0|E9A`;+y3_9Am"i|E9A`;+y-2-9AZt3_9Am"i(9A z|E9A`;+y9A z|E9A`;+ypԇZ9A z9Ain ԇZ9Ain7P 9A &ԓ m_9At1u9AM]>V9A@YKS[y9AMMn|pk9A6ը9A`B!@46+9A/ F3n9ARo9A z( ٖ7A}"Ě7A?d ٖ7A}"Ě7A?d0ߑ7Anz7A %[ߑ7AnX7A?{dz7A %[( ?C8A_I8A`#O ?C8A_I8A`#O(@?w78A ?C8A`;6@?w78A`;6 ?C8A(?7Ah?M7A?~q?7A?~q?M7Ah8A!O68A`!,8A!W0dI8A u7["28AT&{}w28ADa4"(8A`kK}8A@ DlE*Nu8AL~DRD8A=ӔlI 8A ?lC(B8A ~oo=8A@o6a>F8A@6iSG8A@mc/-"8Ae#]:/?8A@Ty,K8Ati!\8A~lyՋ;8A@P@O68A`!,(Õ0ê9A.e7N9A@zuuÕ0ê9A@zuu.e7N9A(~N3"8A 8A!~N3"8A 8A!(_7A7A@v_7A@v7A(Z?8A_\_8A ~vZ?8A ~v\_8A_((ߜ7A_ ٖ7A}(ߜ7A_ ٖ7A}49A`?Õ0ê9A y}49A y}^2w=9A l~9A5D0?sJ9A`ڬd=;r9At4xl 9AiN- 9A@D ~*9A(9A@v#69A1?!2"9A 4a)ז9A,:֭Ke9ARx<w\9AT#379A b[Jš9AQ_nQa9ARroܡ}9A`?t1{9Ap훂Õ0ê9A@zuu(Ɩ5:(9A~X+39A@F8oƖ5:(9A@F8o+39A~X(mc8A@_Zl8A  Mmc8A@_Zl8A  M(^V7Ak?V7A`߇^V7A`߇k?V7A(d=U7A^V7A`߇d=U7A^V7A`߇(Lu7AxUQr7A+(k?V7AҤf=W7Ak?V7Af=W7AҤ(qz8A8A4[qz8A8A4[("Ě7A@7A?d"Ě7A?d7A@`9M:A`u` :A4) 9M:A4)"m:Aˈ @:AxH}.\J:A g _7\:A 9HO* :Ah]gx4 :A (Gra- :AlC` :A`u(\_8AF_8A_\_8A_F_8A86AxkOѦ6AF~֦6A&zw$g 6A6Ɩ.{~(6A p =S6A}86A-=p(+39A@ێ!H;9A~X+39A~X!H;9A@ێ(J?8AT8A?|J?8A?|T8AVih=9A`~R9A7͜ ~R9A7͜opqP9AC f28N9AjnVM9AHKϗL9Aް;[J9A /l]aD9ALABC9AREkXB9A zu_HRb@9A"].=9A`!lרKL=9AJg>Vih=9A`(!H;9A`Vih=9A@ێ!H;9A@ێVih=9A`(f=W7AE_6[7AҤf=W7AҤE_6[7A(_d^8A`mc8A@_Z_d^8A`mc8A@_Z0.e7N9AKD |9A.e7N9Aoz>9Aུ|9AKD (7A@_?_7A`?L7A`?L_7A@_?(t7A@S`_7A{t7A{`_7A@S(qz8A8Aqz8A8A("7A@|!7A_"7A@|!7A_(7A`_7A`_7A`_7A`_(^8A@߸8A^8A߸8A@(5?8A?KL$8Ap5?8A?KL$8Ap(T8A?5?8AT8A5?8A?(Ss8Aqz8ASs8Aqz8AX9ǘ#9AuP;x 9Au'D9ǘ#9AuP;%9A@{{KW9A@Ctj5az9AR9AKz/N|%$9AM߂9A`eJx 9Au'DPX8A(R+촲8AtVb8A`3^Z9A/9A6䡽59A}"% 9ACO(5?8A1S8A?5?8A?1S8A(k7A g7A_=k7A g7A_=(_qw8Auy8A?_qw8A?y8Au(77A@_87A_r 77A@_87A_r xAs9Az܈49A y} 49A y}y z9A؁) H=z9Angh~9A०`R2~9A%>?GD~9ArB[d9Am`&z09AwO t{9A@0qUd x9A5X9u9A*As9Az܈ \ P9Az܈l^@Ot9A7͜!~R9A7͜oXR9A4fRcR9A++aLR9A?eݭQ9A粋$LQ9AM6\ P9A T*aQ9A`tLwDZtQ9A  ]!",#?Q9ADd6]R9A/"QS9A :]!8T9AyKb\Fb^9AVgC''c9A@=~lVS62g9AE&gS)2h9AZ xmuh9ALX! Ai9A@>֥Ծwj9Axа8D4Sm9AӞpUwL%p9A޵p0⻰q9A ơ#k*s9A{d_s9Aҝl^@Ot9A@ l^@Ot9A^+t9AIs9AqPEs9Ay[M^s9AEԬ)8s9Aae" As9Az܈(8AG#8A`8A`#8AG0?t8A]8A?t8An_78AU]8A(]_;8A@_W_]8A`]_;8A`W_]8A@_(!s9AvfAs9Az܈As9Az܈!s9Avf(R_=_7A`1c7AR_=_7A1c7A`((8AU 5?8A?(8AU 5?8A?(m5AX.!q75Ao5i"m5AX.!4[u5AfT$CV5A_Y~5ASoW?5A %d%\l%5Arݠ5ADPx<7A_c7A_V_7A ><7A_c(1c7A?*g7A`1c7A`*g7A?X77A @ߍ7A[7A[7A_7A_߇7Aߍ7A@od7A` ?7A@߂'77A @8<7A @77A_c<7A_c37A}_~7A 77A @(1S8A@@%8A1S8A%8A@@ #Ŧ8A $\E<88A@e #Ŧ8A $\E˘#8A+&* 5W8A3mC8Ac8A>i*<%8A`M!g!g8A `%8AK!YP]8AIqvyS<88AJL^8ANQ?.qT8A>,1_jE_8A@e(48A $\E #Ŧ8A/A848A/A8 #Ŧ8A $\E(AR7A OFAV7A@?=)AR7A OFAV7A@?=)(_7A@G}7A)_7A@G}7A)86AHs6A-=p 86A-=p7\6A n.1X46A`mp6A`<6AQc̥u<6AFI*|ͣ6Af2Aη6AZCFdѺ6A 傽6AuW)Mt6A }3fW6Acn5s6AH(w7ANz7A5w7ANz7A5(F$7A@NO7A@57A@5F$7A@NO(n77A_Qk7A n77A_Qk7A @W_]8A?XS*i8A@_W_]8A@_Rc8A`1:8A>J8A`K*i8A?XS(X_@7A ?.V@uE7A;X_@7A ?.V@uE7A;(F$7AX5kYIQ7A@NOF$7A@NOIQ7AX5kY87A`":Zѻ7A@57A@5&z47A`xAo7AjLVѻ7A`":Z(XV?7A?[L?7AUXV?7AUL?7A?[(*g7A^ _Gj7A?*g7A? _Gj7A^ hAH8A`o_N~8A`v AH8A`o_>8AuE>}8A`1:X8A_*V8AE[ 8A@_S 8A@YX 8A?W}8A_N~8A`v!(*i8A`o_AH8A?XS*i8A?XSAH8A`o_"(:N7Ab`AR7A OF:N7Ab`AR7A OF#HK~E7Ab`:N7AX;K~E7AX;fF7A?F@bI7A`L3L7AQVD4M7A ? X:N7Ab`$(AH8Aa5ߏ8A`o_AH8A`o_5ߏ8Aa%(~8Ab}_8A#9~8A#9}_8Ab&(*8Ale ?C8A*8Ale ?C8A'(%8Ale*8A@@%8A@@*8Ale((7A_e_7A@G7A_e_7A@G)(]8Ag48A]8A48Ag*8?67A h_%7A @77A @?67A`@7A@Z_%7A h+08ٶ8Aj6΃"8AtpD+8ٶ8Aj‹(8A {46΃"8AtpD+,(r7AMlw7ANr7AMlw7AN-(5ߏ8AQl58Aa5ߏ8Aa58AQl.(*8A n+8Ale*8Ale+8A n/(c8Ank8A`?&c8Ank8A`?&0H_W8Anc8A`ߌ _W8A`ߌ Z8A*_[8A@3_]8ACE`8A`9Xc8An1(IQ7A\sQq> 7AX5kYIQ7AX5kY> 7A\sQq2(h_ņ8A Hru8A_\0h_ņ8A Hru8A_\03(}_8A Hrh_ņ8Ab}_8Abh_ņ8A Hr4@8Ar #Ŧ8A $\E8Ar3d8A Sf;9A@Ehd\69Ad9DJdnp39Ar&_Ra&k=19AȺ[vއ/9Aٵ:9ǘ#9Aٵއ/9AuP;9ǘ#9AuP;/9A:͗NV|9A Z\ kw^#9A]Ccv$9AIj5HYv%9A3{M,*9A b%g+9Ab+9A&T}bI+9A f"Fa,9A@\p!jX>YC-9AADnb\.9A|:w#M7.9A fzއ/9Aٵ;(_%7A@_'l7A h_%7A hl7A@_'<0B~;7A@؂L?7A?[B~;7A@؂A2>7A gL?7A?[=@8A (8AU 8A _p 8A_>f* 8A_o^: 8A`S(8AU >(58A 8AQl58AQl8A ?HL *9An9އ/9A{L *9A{-n+9A;#-9An9(5.9AC\)/9A /Qއ/9Aٵ@(7Aǃ7A_e7Aǃ7A_eA( hn7AQr7AMl hn7AQr7AMlB( _Gj7AQ hn7A^ _Gj7A^ hn7AQCP2W7A@ ѻ7A`":Z2W7A@ .77A`j+7A@GzxVHA7AboZ7AJhʺP7A@]'Lbѻ7A`":ZD(> 7A@ 2W7A\sQq> 7A\sQq2W7A@ EXo8A@cg޵8A&= o8A@cgDz8A`V\.8A`ЅwMw(8A]B@n:F8Ap5w8A` C-$\&8A ۫#g޵8A&= F(Bq:7AyB~;7A@؂Bq:7AyB~;7A@؂G(Pߔ7ASn77A_QPߔ7ASn77A_QH(#8A*8Ale#8A*8AleI(8A"6 8A 8A "6 8AJ0:E7A?:N7Ab`:E7A?6_I7A_}:N7Ab`K0L?7A?:E7A?[L?7A?[C6A7AMp:E7A?L(l7Aj7A@_'l7A@_'j7AM0+8AwH28A n+8A n?18A@rH28AwN(Y_87A pBq:7AyY_87A pBq:7AyO( y7A@kTˢq|7AM  y7AM q|7A@kTˢP(?j7A`_ hn7AQ?j7A`_ hn7AQQ0c8A uxj8Anc8Ang8Atuxj8A RPK47A`ƤXV?7AUK47A`ƤC47A_O67A_TM87A_H|:7A_yfk>7A _~]XV?7AUSXKֹ7A@i p7A ~`xKֹ7A@4O7A EZS7AA\R#fe7A=$`<#7A tD N7AYrԼ7A`~i p7A ~`xT@2W7A@Kֹ7A@ 2W7A@ 7A`9y7A~Sz{Ȋ7AcKֹ7A@U(Jh8Ax8A? Jh8A? 8AxV(M77A@JY_87A pM77A@JY_87A pW(t-\7A3F>2W7A@ t-\7A3F>2W7A@ X(q|7A3F>t-\7A@kTˢq|7A@kTˢt-\7A3F>Y07A@7Aǃ7A@_ 7A@7AǃZ(Mo57A M77A@JMo57A M77A@J[(K47A Mo57A`ƤK47A`ƤMo57A \(k8A#h_ņ8A Hrk8A#h_ņ8A Hr](0_A7A ߔ:E7A?0_A7A ߔ:E7A?^("6 8Ak8A"6 8Ak8A_( hn7A__"s7AQ hn7AQ_"s7A_`(g7APߔ7ASg7APߔ7ASa(j7Ag7Aj7Ag7AbHMo57A_0_A7A Mo57A S97AA0:7A_F<7A`mR>7Aس0_A7A ߔc( uw7Acc0t-\7A3F> uw7Acc0t-\7A3F>d0_~9AvQW߼Ƃ[e9Aa0_~9AvQW߼zCA9A7j~Ƃ[e9Aa0e`As9AvQW߼_~9Az܈ As9Az܈82w9A` ^y9A`kg9:z9A?w1)Jz9Au4}seX{9A^QQX{9A@躒{ }9AaZ_~9AvQW߼f(H28A3D78AwH28AwD78A3g( ?e7A@d?j7A`_ ?e7A@d?j7A`_h08A3 8A@_r8A!8A_3 8A@_ri08A8Ax8Ax!?8A 8Aj(4?7A?l0_A7A ߔ4?7A?l0_A7A ߔk(`7AO uw7Acc0`7AO uw7Acc0lXs9Ac  b9Aa0Ƃ[e9Aa0ቾc9Aeo4;t9A@ccIӦ9Aqs9A?v%9A ag_9Aow b9Ac m(N<]27Ayށ`7AON<]27Ayށ`7AOn(g7A?F7Ag7AF7A?o0Q 7Afrtf7AQ 7Af,W 7Artf7Ap0t-\7AfQ 7A3F>t-\7A3F>`!zw 7ApQ 7Afq(;7A7A@;7A7A@r(Uv6A+N<]27AyށUv6A+N<]27AyށsXm5U6A+y7A}?uy7A}?u1;6A Q^pN%P6A ŽKʟ9x6A(-m5U6AieS|Nk]6A}Ф *6A \!QUv6A+t( 8A@;?8A 8A@;?8Au(_"s7A ;v7A__"s7A_v7A ;vHh_ņ8A`,5_`8A Hrh_ņ8A HrR8A`c8A_X,8A:_:8A5_`8A`,w(a7A s ?e7A@da7A s ?e7A@dx`$_7A?AH8A`o_ $_7A?;7A_517A77Ad4?7Aͭ0 7A,7A0V8A5kAH8A`o_y(B[7A?$_7A_%B[7A_%$_7A?z(<=7A4?7A?l<=7A4?7A?l{8Jm,7AK47A`ƤJm,7A_17A _^?27A_K47A`Ƥ|(_d8A+uxj8A _d8A+uxj8A }(;_8A5_`8A`,;_8A5_`8A`,~(0_A7A`_7?F7A ߔ0_A7A ߔ?F7A`_7(:E7AZM7A?:E7A?M7AZ(I;7A_d<=7AI;7A_d<=7A(s7A_;7As7A_;7AH9,7A@Mo57A 9,7A@G_.7A@?O/7A@>ߞ07A@_bL_27AMo57A (Jm,7A@9,7AJm,7A9,7A@82w 7A 6rtf7A2w 7A 6B 7A`8v.t 7A@gJrtf7AX_=8A1U8A$_=8AUF8AJ8A R|L8A_jO8A@K+P8A BR8Ao1U8A$0D78A_=8A3D78A3_88A C_=8A(YW+7AJm,7AYW+7AJm,7A(9,7A !D,7A@9,7A@D,7A !(F7AF_7A?F7A?F_7A(b?$7AxHe%7A [b?$7AxHe%7A [(?\7Aya7A s?\7Aya7A s(3[7Ay?\7A`3[7A`?\7Ay@A[7A~,Q 7AfA[7A~,Y7A@;n%oh7A@8bxi7A`YQ 7Af8N<]27A~,A[7AyށN<]27AyށG~l7A} 7AtA[7A~,8cu8A_k8A#cu8A_Wx8Aje,~8A@)k8A#8uxj8A_cu8A uxj8A xo8Av]_q8A?~cu8A_8F_7A@B[7A_%F_7AK_7A@6k7A`GB[7A_%Hk8A N8Ak8A ^8A$8A?  8A Z8A`8A N(A[7Af]^$ذ7A~,A[7A~,$ذ7Af]^@GtZ6A #LUv6A+Uv6A+̌6Alw6A n6A`IҋGtZ6A #L06A #LGtZ6A (T_#6A (T_gv-Q6A߄i"6AP8nKƖ6AU37C26A@]vzl6A@īy6Ap+ ^B6A@.uޗ56A`nv}6A@qfI<6AV%a6AoK~ՠݼ6A:G|&j6A@$Kcu6AQsNRMS6A`uSU/ 6A@i_6>6A`Zui},6AroS6A|ڪ@6f6A ]~֪0 6A`?bgoȣ6A`bؚZjR?6A~猩(6A`=ɪ6A@ 6\6Aϥ 6A 4]Dnn6A`/w@Z6Au?kl\/6A`T"p~6A $L)36AM3Jʃ6A.GtZ6A #L0187A I;7A_d187A 6b97A?I;7A_d(HW7Aߚ3[7A`HW7Aߚ3[7A`(=O*7A9,7A@=O*7A9,7A@(=O*7AYW+7AYW+7A=O*7A(7As7A_7As7A_(J?7A ?b?$7AxJ?7A ?b?$7Ax88Ai#8A8Ai 8A ?]!8A#8A08Ai8A N8A NQ8A8Ai(?F7A (J7A`_7?F7A`_7(J7A (Q7A HW7AߚQ7A HW7Aߚ(M7A Q7AZM7AZQ7A  eW9As!Q !s9Avf!s9Avf49q9A@8pPp9A`)HgGp9AY1Oo9A>bFl9A`v xo&j9Ao{x $g9A }[d9A\~+kGOd9A|Db9A`n'F`9A_7e(_9A.p^my ^9A@"gNW9AY< eW9As!Q (K7A)Q7A K7A)Q7A ((J7A)K7A (J7A K7A)pއ/9A + eW9Aٵ އ/9AٵlM09A D9? g49A` a~ L49Ai5ĐJ+<9A\Ӹ'bm=9A`^BI-E9AP, yM9A`9rQ9A +S-ՒT9AR eW9As!Q (l?^8A _d8A+l?^8A _d8A+(8A@??8Ai8Ai?8A@?(;_8A?18A;_8A18A?0_Kd7AWzA[7A~,A[7A~,x7A)q_Kd7AWz@Uv6AWz_Kd7A+Uv6A+gV;6A[!d|46ADwH4{S57A hP _Kd7AWz(/_VA7A?K7A)/_VA7A?K7A)(ߐ@7A?/_VA7A@Jߐ@7A@J/_VA7A?0HW7A`_vY7AߚHW7Aߚ5Y7A4_vY7A`(v7Aco|7A ;v7A ;o|7Ac8R'7A=O*7AR'7AO'7A`ߨ>(7AB=O*7A(He%7AR'7A [R'7AHe%7A [0X7A?J?7A ?X7A?Y7AX J?7A ?@;_87A_ߐ@7A@J;_87A_%_d97A 2?;7Ap.@>7A@ߐ@7A@J(;_87A_187A 187A ;_87A_0߁57A@h187A ߁57A@h.287A=187A (8A 8A N8A 8A N(_Kd7A@賑>7AWz_Kd7AWz>7A@賑(;7AP7A;7AP7A(p}7A _ 7Ap}7A _ 7A(o|7A _ p}7Aco|7Acp}7A _ (18A_r  8A?18A? 8A_r H7Ac !2w 7A 67Ac !t\7APl7A4b0؟ 7A୸ 7A4g2w 7A 60$ذ7Ac !7Af]^$ذ7Af]^y7A J`7Ac !(277A`_";_87A_277A`_";_87A_8_߰o8A`#cu8A__߰o8A`#Tr8A? _hs8A`cu8A_8[i7A@$X7A?X7A?W7AVh?7A r#[i7A@$Hъ_9A^U%_~9AvQW߼ъ_9A^U%@&1}`9AXp$"3!7Aګ0jwm7A@賑>7A@賑jwm7Aګ0(`#17A`ف1jwm7Aګ0`#17A`ف1jwm7Aګ0@GtZ6A`ف1`#17A #LGtZ6A #L6A`!A-#5AX.!m5AX.! )r5A oo.V 5A M/=5A`m$p/j(5A`CQQ}5A r\;5A[%kdõ>5A/:eõ>5A LH&5A]57Jl5Aa7A`_vY7A`>a7AW`(-_,7Aa1.7A`xP-_,7Aa1.7A`xP(NA6A@)WbA-6A*na`NA6A@)WbA-6A*na``o8Ayۚe8A@c o8A@c@~#8A2__Ƹ8A@ X8A ڛZ8At6"R8A`LTԱ8A$a)8Ac6ZK8Ayۚe@-_,7A_f!a27A^-_,7Aa$-7A_f.7A_f"17A ;_!a27A^@77A@?g9_ 7A`}B77A`}BL7A߇B77A@+\0p7A?<_9_ 7A@?g(R7Api-7A@_RTR7A@_RT-7Api(9?'!7A j8,%7AvF9?'!7A j8,%7AvF(9_ 7A j9?'!7A@?g9_ 7A@?g9?'!7A j(i6A@"wlNA6A@)Wbi6A@"wlNA6A@)WbXJ6A@"wli6AZJJ6AZJE=m6A-NU"6A@UŤS,th6AԽWZb6A4,[aEQ6Aq0ڹ`'6A %Pgi6A@"wl(68+7A_l-_,7Aa68+7A_l-_,7Aa(0'7A_l68+7AP0'7AP68+7A_l8_?q7A~o u7AR_?q7A~or7A h_s7AY u7AR8R7AoO=7A<O=7A<c?7AcSB7Ad_R7Ao(%n#7A p5&7A_N%n#7A p5&7A_N(9?'!7A p%n#7A j9?'!7A j%n#7A pHcu8A`Ip8A_cu8A_Yw8AS:{8A@(?g8AVL;8A:V8A`IpX?M48Ap_=8A?M48Ap?48A@_j-68AD_78AB/,98A( 98A@?r;8A`?!_=8A(%n#7A@_+q*$7A p%n#7A p*$7A@_+q(Si8A`?CrG?k8AYSi8A`?CrG?k8AY XB_7Ar$_7A?B_7Ar)7Axg47A?`'7A ?'?7A27A>/7A _$_7A? 0<ߋ7ArB_7A[<ߋ7A[J97AoaB_7Ar (?#7A@s%n#7A p%n#7A p?#7A@s (D7AsR7AoR7AoD7As (B_7A+v*7ArB_7Ar*7A+vH)O9A vъ_9A^U%)O9A v Q9AH r@rS9An$RbY9GV9A@JMP9BX9A`ÛuF?ъ_9A^U%0)O9A v eW9As!Q  eW9As!Q  V9A 2)O9A v(RL]6AѴexM 86A`wRL]6AѴexM 86A`w(R7A{?<7AoR7Ao?<7A{(+7A}9?'!7A j+7A}9?'!7A jau8A YA ~L *9Az:yau8A YA ~5zr8A@Lm oe8A~Ca]9A>vPn9A5CO/|苝k 9Ag+ zKՈ 9A -uY9A $Wv9A)WQ)9Ah,ĭk 9A`T7An!vqe]/7l7A@dRoW7A{K7Aڃ#@3EK7A\܃] A7AR섁3EK7A\܃TK7A@zۃ"7A5 7AJ] A7AR섁$( u7A?y7AR u7ARy7A?%0-77A@!3EK7A\܃-77A@!7A`8y]3EK7A\܃&@jwm7A@!-77Aګ0jwm7Aګ0w7A`цOS7A`E8m\@7A@?G|-77A@!'h;7A<ߋ7A I ;7AQ7A`|Ix7A_R?7A_U@7AKN?7A IW7A IR7A@\J1c7AO<ߋ7A[((7A`F-77A@!7A`F-77A@!)(>7A ͈;7A>7A ͈;7A*()'7A (7A )'7A (7A +0&7A )'7A&7A#'7A)'7A ,P36A±`|m6AKT36AKT/` Q6A ()V54J6Ad)U[6A>cxp56AO7A XK7A ͈>7A ͈Y?P7A`_XK7A <(RL]6A L @6AѴexRL]6AѴex@6A L =0Z_e7A K>7A ͈Z_e7A KD{7Aߩ>7A ͈>(8_B7A%D7AsD7As8_B7A%?([ 7A%8_B7A@?[ 7A@?8_B7A%@(u:|6A`|m6A±`u:|6A`|m6A±`A(Ax 7A_D_ 7A^Ax 7A^D_ 7A_B0Si8A9?o8A`?CrSi8A`?Cr\Lk8A@?z9?o8AC(>?g8A NSi8A`?Cr>?g8A NSi8A`?CrD027A n7A4 n7A437A/27AE8<7A27A X<7A X9_27A҉Jr7A`27AF04h7A?*H7A4h7A?*O7AZH7AG(8_B7A?*4h7A%8_B7A%4h7A?*H(3V7Aɚ4h7A?*3V7Aɚ4h7A?*I(?M48A_:8Ap?M48Ap:8A_J`XK7AǜB_7Ar XK7A Rn7Aq?g7Aǜ>7A@F?}7Aܘ@|7A?~3X7A@?U5?7A+B_7ArKH_~|7A7A@?S_~|7AK~7A_=7A@Ӆ_7A z7Ap7A@?SL(y7A_~|7A?y7A?_~|7AM(/8A`؝?M48Ap/8A`؝?M48ApN(-8A`؝/8A-8A/8A`؝O($$o6A ~u:|6A`$$o6A ~u:|6A`P0!06A ~$$o6A?".l!06A?".lF56Ap_Z$$o6A ~QPb-6A(6A[b-6A`/iR6A[X0iE6A@_d 6AnQD6AسAj96A dB6A(R(-7AJ?L7A _J?L7A _-7AS(@6A$6A L @6A L $6AT(7N7A`? 3V7Aɚ7N7A`? 3V7AɚU0g7A_?q7A~og7A[l7A@?X_?q7A~oV(>a7Ag7AW`>a7AW`g7AW(,+7A@!7A ,+7A !7A@X@7A??X7AQl7A?r7A߾7A`_,7A݆?X7AQlY(Q 7Aۨ7N7A`? Q 7Aۨ7N7A`? Z(K 7A7Q 7AۨK 7A7Q 7Aۨ[(Q 7A@= 7AۨQ 7Aۨ= 7A@\(_2a7Ag7A_2a7Ag7A](T67A_ϫ_:7A~T67A~_:7A_ϫ^(u:|6AT:(6A`u:|6A`(6AT:_06ⅅ7AkYu7As:7Au7A`6ⅅ7AkY`8,?7A"7A,?7A(A!7A ?&!7A"7Aa0= 7A̮<_7A@= 7A@57A`d<_7A̮b(97A?<_7A̮<_7A̮97A?c0Q#7A`_+)_'7A@ԍQ#7A`_+"%7A R)_'7A@ԍd("7A`_+Q#7A"7AQ#7A`_+e(#[7A}_2a7A#[7A}_2a7Af0?tP7A}#[7A?tP7A`_.Q7A#[7A}g0((7A__.7A((7A?*7A`_.7A_h(i7A6AuT$$o6A ~i7A6AuT$$o6A ~i(6AuTi7A6A(i7A6AuT6A(j(x7A\_~|7Ax7A\_~|7Ak(9?o8A`߱4?s8A9?o8A4?s8A`߱l( .7A`_.7A_ .7A`_.7A_m067A27A27A67A`|#7An0a_L8A_qlR8Aрa_L8A_qRJP8AɥlR8Aрo((6A ͟쉼׭@.6AT:(6AT:׭@.6A ͟쉼p(_~|7Ab7A_~|7A7Abq(-7A? .7A`-7A? .7A`rX"Lvu7AHOɾxe%7A\܃3EK7A\܃We7A@~L 7A %lU%T7A`Kxe%7Aydf:7A .e7Ae_"Lvu7AHOɾs(6ⅅ7AHOɾ"Lvu7AkY6ⅅ7AkY"Lvu7AHOɾt(C?h 7A?I_ 7A`߂C?h 7A?I_ 7A`߂u(S?7A/Z_e7A KS?7A/Z_e7A Kv88A`_ 8A`Ip8A`Ip/8AHs̋8Aa8A`_ w(iǜ7A"U7A iǜ7A U7A"x($6A#)F6A$6AF6A#)y0.7A`"Lvu7AHOɾ.7A`\/7A/,G"Lvu7AHOɾz(׭@.6A`.7A ͟쉼׭@.6A ͟쉼.7A`{0Q#7A@o%7A`_+Q#7A`_+4c#7A@o%7A@|($7A@o%7A`$7A`o%7A@}(8A__8A`_ 8A`_ _8A_~(1$7A $7A`1$7A $7A`(!7A _7A@!7A@ _7A(/& 7AC?h 7A?/& 7AC?h 7A?0:8A_r?A8A_:8A_w@<8Ar?A8A_0_7A7A?7A?_7A@c7A(7A_)?C7Ab7Ab?C7A_)(o%7A)&7A@o%7A@)&7Ahoi7A?>7AɅ oi7A?O_͢7AIb7A@jR_.7A?c_7A_4K7AR_ǵ7A_.Ju7AɅX7A@߄>7A ͈(U7A?oi7A"U7A"oi7A?(( 7A@#/& 7A( 7A@#/& 7A(B߽ 7A?\( 7A@#B߽ 7A?\( 7A@#(A_ 7A%7A@߬%7A@߬A_ 7A0e,6A~m.7A`e,6A~m?66A.K.7A`(oi7Awj7A?oi7A?j7Aw(17A A_ 7A17A A_ 7A0> 7A 17Av> 7Av>7A 217A (t7A`Qx7A\t7A`Qx7A\(( 7A ;{ 7A@#( 7A@#;{ 7A (4?s8A_w8A`߱4?s8A`߱w8A_0_8A>8A__8A_)8A)8A>Hm*7A_z-7A?m*7A_z+7A  +7A`+7A_ #,7A@l-7A?()&7A_zm*7A)&7Am*7A_z?C7Aoi7AR?C7A_)|7A˼*7A? 7A7A7AtO7AR_7A ?S7A@Bk@7A?ug7A_\_7Ajޞ7A`Foi7A?0a8A@O?8A`Ta8A@O_8A?8A`T(8A@Oa8A>8A>a8A@O0ߑs7A c?C7A_)ߑs7A c`{7A ?C7A_)(ߑs7A ct7A`Qt7A`Qߑs7A c(T6A`5se,6A~mT6A`5se,6A~m0K7A?tP7A`_K7AIN7A`?\?tP7A`_0m*7A +7A_zm*7A_z?+7A@+7A (K7A_K7AK7A_K7A(`7A@ߚx7A`?`7A`?x7A@ߚ0@7A??K7A_@7A??I7A_K7A0_:7A??@7A_ϫ_:7A_ϫ=7Au@7A??(us7A_ߑs7A cߑs7A cus7A_(,_7A>17A ,_7A>17A (C?h 7A>,_7A?C?h 7A?,_7A>(+7A? -7A +7A ? -7A(,_7A_s$7A>,_7A>$7A_s(Us7Aus7A_us7A_Us7A(97A@7A??97A@7A??8_.7A97A@ة_.7A_07A@ة 47A,97A( (7A_)7A (7A_)7A(j7A@?Q?7Awj7AwQ?7A@?0`7A@?ߑs7A c`7A@??f7Aߑs7A c0#[7A@?`7A}#[7A}R[7A`7A@?($7A ߿+_7A_s$7A_s+_7A ߿X#CJ9A9;(;O9A v)O9A v:K9A?Q#CJ9A-~78^^K9A"7K9A@i£M9A '"8N9AkwO;O9A9;((`7AZ`7A@?`7A@?`7AZ(jsG8A ea_L8A_qjsG8A ea_L8A_q@r?A8A ejsG8A_r?A8A_p$C8A`p_E8A?RE8A jsG8A e(;{ 7A`s?? 7A ;{ 7A ?? 7A`s(`7A@v`7AZ`7AZ`7A@v(97A ? [97A97A[97A ? H_.7A ? [97A__.7A__07A`_17A?67A _}_77AG[97A ? PI7A`7A@?I7A>L7A_KV7A@?Z7A1\7A]7A ߢ`7A@?0I7AK7A_I7A K7AK7A_(?? 7A &57A`s?? 7A`s&57A (.6 7A_;{ 7A .6 7A_;{ 7A (G7A`bI7AG7A`bI7A(7A`7A7A`7A(_7A@Q _7A_7A@Q _7A(#B7A gG7A`b#B7A gG7A`b(@7A g#B7A??@7A??#B7A g0[97A g#B7A ? [97A ? _B>7A#B7A g([97A_z97A ? [97A ? _z97A(&57A`c:7A &57A :7A`c(HH7AdI7AHH7AdI7A(`7A`a7A@v`7A@va7A`(#B7A?VߡB7A g#B7A gߡB7A?V( 7A _-?7A:-?7A: 7A _(17A _ 7A 17A  7A _0w8A %|8A_w8A_ _{8AZ%|8A (_{8A@%|8A _{8A@%|8A (Pf6A@%fޝX6A`9\Pf6A@%fޝX6A`9\( H7AHH7Ad H7AHH7Ad(%97A_z97A_z97A%97AH? -7A%97A? -7A/7A 17A 57A q_67A %97A(Pf6A@[YK6A@%fPf6A@%fYK6A@[P4c8AJg8A N4c8AB߀d8A?e8A :g8AJg8A?Qf8A@w>?g8A N@68Ae8A`_ 68Ae8A 8AR8A8A`_ (;ߵ 7A@?? 7A`s?? 7A`s;ߵ 7A@(?G7A`E H7A?G7A`E H7A(%|8A?ߦ|8A %|8A ߦ|8A?(_TG7A@h?G7A`E_TG7A@h?G7A`EH187AB߽ 7A?\187A77A`_G7A,7A#;7A"B߽ 7A?\( _5AJ5A _5AJ5AX%|8A`68A %|8A }8A`/8A  8A?8A_ W8A`?8A@E68Ae887A _ S?7A/87A _ D_|7AB 7AS?7A/(Q?7A _ 87A@?Q?7A@?87A _ (6A`86A>6A>86A`(?%7A 47Aw?%7Aw 47A(jsG8A7UK8A ejsG8A eUK8A7@YK6A`:[6A@[YK6A@[,X 6A }iQȃ6A_fv#{k6A` f:[6A`(N7A 87A _ N7A 87A _ `_e8A`E _{8A@ _e8A`E 9?i8A6~j8A @_ n8A<$r8AMt8Ajv8A@y8A` _{8A@(4c8A`E _e8A4c8A_e8A`E (06A/ 6A>06A/ 6A>EB h9A@7/ )O9A vEB h9A@7/ ~ 9A MU(q'9A 2&W3tb*9A i`,9A %_*+29A`e~xb%49AgW389A~ M2`}:9A0(g?9A@h=@9A`@TsB9A@a?)cH9A .қػxI9ADJhYL9A{ CnN9A`#*|)O9A v8A@7/ EB h9A08A0n-8A٧0m9A t[tƨp 9APSo 9AAS 9A@#1VD9A û+wr I9AKXY9A{+ܨ_凝9Ay]29A8_/=@i9A csVv9AHH9A@EB h9A@7/ (ߡB7A 6 _E7A?VߡB7A?V_E7A 6 (%97A x:7A%97A:7A x0_?k7A`_Us7A_?k7A`_ o7A@Us7A8F6A 6A#)F6A#)`~U6A@$G6AUd6A (7A?_7A@Q7A?_7A@Q(87AHBG7A _ 87A _ BG7AH(E7A _TG7A@hE7A _TG7A@h(_)7Aa17A_)7A17Aa0*7A _X187A187A7D7A_S*7A _X(86A6A`86A`6A(:7A_;7A x:7A x_;7A(_7A`!7A@Q_7A@Q7A`!(߳"7A _L%7A@:߳"7A _L%7A@:(a7A;e7A`a7A`e7A;(*7A_+`7A _X*7A _X+`7A_(ߦ|8A@;}8A?ߦ|8A?;}8A@0_L%7A% '7A@:_L%7A@:_'7A  '7A%9 .-6A`9i7A6AuT9 .-6A`9~ %6Aϭ6A ȑ؏۽6AF]T9m 6A@4iX e6A@]oջb6AcyA-6A`'Z$6A#pcCl6AJ0c6A HR6A@|@226AjыS6A聎*6A@kd6:_6AHfIi6A[}6AyTYs6A0͊6A`X}6AϳD6A*;ݔi7A6AuT(6A`99 .-6A 6A 9 .-6A`9qVg5A@_!045AT045ATc I5AVWl 5A@QQXC5AdZL5Ar{45AY 5A``~5AAqVg5A+qVg5A@?E>5ATY<7[5Aj7AHBG7AH>7A`30Ϊ6A`?R6r6AΪ6A߭6A r6A`?R6 (.7A?O7r 7A...7A?O7r 7A.. (=7A?7 n7A`+=7A`+ n7A?7 (UK8A 8?5S8A7UK8A7?5S8A 8 ()v7A_+8??7A???7A?)v7A_+8 0V_6Aɚ99 .-6A`9V_6Aɚ9ZK6A g;19 .-6A`9()v7A:57A_+8)v7A_+857A:(-$7A`J;37A:-$7A`J;37A:(/f6A@N;_p6A_z /f6A_z _p6A@N;(J5Ay;?P5AJ5A?P5Ay;(E7A[= J7A E7A  J7A[=H\7Aa=N7A \7Aa=J7A56ET7A_<7A_1?7A N7A 0x7A =u7A@ߚx7A@ߚq7A`)u7A =@о>6A`kϧ=, c6A&&. 6A@ObPf6A@%f(9 .-6A`:@о7A@߸J?w7A@J3 >7A@߸J?w7A@J3&(_@7A>K7A?._@7A?.7A>K'@:U8AK4c8A:U8AKG_]8A%!/?n_8A)a8A;4c8A((?5S8AK:U8A 8?5S8A 8:U8AK)Xzk8AM/8A`؝zk8AM~?8A @r_8A7?#8Aw)8A`&_,8A _-8A_/8A`؝*`?8AMzk8Aa ?8Aa_8Ai8A? 8A_8A Ta8A`?8A@ s8A Gzk8AM+0?7A .Mx7AEx7AE7A G?7A .M,(.7ALM?7AD(.7ALM?7AD(-({6ANn}6A _U+{6ANn}6A _U+.@:7A _T}sP1d7A`c:7A`cgA7A@?"o8!U7Ak,6I 7A:hC1d7A _T}sP/(_Q7A`QY7Ak _Q7A`QY7Ak 0(_7A`Q_Q7AF_7AF_Q7A`Q18:?7A@?,T7A#:?7A#D7A`[: 7Ab27A@?,T2(0^7AT_7AG0^7AT_7AG386Apz^UY6Adw)C6Apz^Ufy 6ALnJMt6AsHFY6Adw)C4J6Apz^U6A&-^J6A&-^솱6Aj16A,Fpԉ~z6A`|M߷6A c}q^"6A`Ԭ09kc6A)Y'6A!Rg76Apu;PD7־6AD% $6A`y( DP`6A`#uFTO6AȐP6A`>.H]h6Ab' h6A`Νk_Ze6Ae[. 6A*7n k6A`|@I7C6AٸڱGm6A CN6Apz^U5(N7AW\7Aa=N7AW\7Aa=6("T8A ?X:U8AK"T8A ?X:U8AK7X|p8A[;}8A@|p8A[q8A@wTZr8AOr8A` H s8A@Cw8A@O1 x8A0;}8A@886Yg8A[|p8A6Yg8A?zk8A? 3$l8A@|p8A[907A]7A?U7A]M7A@văW7A?U:(z5A ^?P5Ay;z5A ^?P5Ay;;(߆7A_`7A@_`7A@_`߆7A_`<(2߷7A kaP7A`yH2߷7A`yHP7A ka=(m6A_Mc_p6A@N;m6A_Mc_p6A@N;>(>7Ad-7A`3>7A`3-7Ad?(x6A@?3g{6ANx6A@?3g{6AN@0_p6A@?3gx6A@N;_p6A@N;_u6AQx6A@?3gA80N6AyNJ`lYK6A@[0N6AyNJ`l6A@ҖO_ka6A2.$GPYK6A@[B0оK7A>K7A rS(37AuFw7A`?r37AuFw7A`?rT(.7A v >7A@߸J.7A v >7A@߸JU(@6A`wR6Ai&@6A`wR6Ai&V8T6A`w@6AGT6AGٚ6A\X_6Ack@6A`wW(k@Y 9AFx:\*"9A?sIk@Y 9A?sI:\*"9AFxX(tw6A@yx6A@?3gtw6A@yx6A@?3gY(_7A z.7ALM_7A z.7ALMZ(+7A }"H7Al"H7Al+7A }[(-7AT}+7Ad-7Ad+7AT}\`ސ6A rU!!~0N6AyNJ`l ސ6A}n#$6A@K]w>/6A`l{je6A rU!!~Y^g)6ArU!!~cbY%6A 7A ?=-7A@x>7A ?=-7A@xl(27A_7AȆ27AȆ7A_m(07Aۊ37A r07A r37Aۊn(\.7Aۊ37A@V\.7A@V37Aۊo0&7S8A_4dU8A ?X&7S8A_4dU8A`i"T8A ?Xp(P7A _ 7A kaP7A ka _ 7Aq( 7A\.7A v 7A\.7A vr(u6A`Վtw6A@yu6A`Վtw6A@ys0"7A`L?&7Ao"7A`L?#7A?&7Aot87A`L"7A^7A^n7AEhZ 7A "7A`Lu(_7A7A>K_7A7A>Kv(?"7A"7A`L?"7A"7A`Lw8 ߳ 7Aד 7A_p ߳ 7Aד  7A`- 7A _  7A_px( _ 7Aד ߳ 7A _ 7A ߳ 7Aדy(7AؓM7A r7A rM7Aؓz(R8Aߚ&7S8A_R8Aߚ&7S8A_{0_6A?W6An_6A??'6AGrW6An|("7Aޙ_w#7A`L"7A`L_w#7Aޙ}(~ko7A-lq7A@~ko7A@lq7A-~06A _+7A }+7A } K6A?6A _(?*+7A˜Q.7A?*+7A˜Q.7A0?&7A˜?*+7Ao?&7Ao)7A?S?*+7A˜(37A q57Aۊ37Aۊ57A q07A_7A_7A_M7A__7A0 7A`G?"7A 7A`G?r!7A@?"7A(67A@ ߳ 7Aד67A@ ߳ 7Aד(_7A@67A_7A67A@P$l8A`N|p8A[$l8A`Nl8A@m8A+ n8A߰z?n8Ah o8A a|p8A[(_T7A|_lX7Aq_T7A|_lX7Aq(N7A|_T7A@pN7A@p_T7A|8 ?7A`7A? o7A`?7A@?7A ?7A? o( 7A`7A_p7A` 7A_p8_57A߆4@7AA_57A߆;7Av;7A _r4@7AA(57A߆_57A q57A q_57A߆(57A_57A߆57A_57A߆(cT7A?_T7A|cT7A?_T7A|x?6A@??6A# ?6A#BS6A?}.>6AY80?m6A@@2?F6A N6A@j-6A@Nv!?I6Aߦ|6A?6A $ߠ6A6A@?(M7A;y8AؓM7Aؓy8A;8@6A.6A`w@6A`wި6A?9 6A?6A.X v6A@=7A _&=7A _&37A/7AER7A`Sڈ7A B47AaOy7A>7A ?=87A 7A\7A^7A7A@_ 7A\@?v8A@?~8A߃?v8A߃z8A`fz8A {8A`?~8A@(6A@ɲ07A@o6A@o07A@ɲ(47A_7A47A_7A(R7AcT7A?R7AcT7A?(lq7A?!N?Pt7A-lq7A-N?Pt7A?!00s6A`??s6A߰0s6A`?|s6A?s6A߰0m6A`?0s6A@m6A@_n6A?0s6A`?(F6A6A _6A _F6A(#6AF6AU#6AUF6A0 7Aߨ߂7A\ 7A\_7A?߂7Aߨ(Fw7A@7A`?rFw7A`?r7A@(_Q6A`_$_6A?_Q6A`_$_6A?87Aߋ7A`.{_:7A`.{7A 97A`i7Aߋ("c7A?%bh7A`!"c7A`!bh7A?%P+5Af_5A+5Af߽5A 5A .y5AF05A@55A_5AH$5Af+5A`c5A`c)5A$5A`ה5A@ܡ_5A+5Af8?~8A _8A@?~8A@?8Aߥ8A ^_8A 08A`a8A@O8A`?8AFa8A@O(_8A`8A _8A 8A`(7&7A?*+7A˜7&7A?*+7A˜@_w#7A7&7Aޙ_w#7Aޙ$7A۰%7AU3&7A7&7A(8A`?I8A`8A`I8A`?0%6A v6A@ v6A@?6A``%6Ah_5A?s5A _5A5A`:5A߆5AS-5A-5A_5Aj5A ?|5As5A?(߂7A7Aߨ߂7Aߨ7A(7&7A ?K_:&7A7&7A_:&7A ?K0 7A?$7A`G 7A`G!7A $7A?0ߚ7A _ 7A`Gߚ7A _>7A_n 7A`G0t7A_967A@67A@ 7A}t7A_9(07A`B 7A@ɲ07A@ɲ 7A`B(?*+7At/7A˜?*+7A˜/7At8 ߲ 7A`7A` ߲ 7A`p 7A _˶7A`ߚ7A`( 7A` ߲ 7A٨ 7A٨ ߲ 7A`0_6AF6AF6A 6A _6A(_6A%6A%6A_6AHW 8Azk8AMW 8A8A_wb8A ?8Azw8A`5jzk8AM0<7A l_7A z<7A l?97Ad_7A z(7A l<7A7A<7A l0R8A_[8AߚR8Aߚ 2Z8A?q[8A_(*&7A?_:&7A ?K_:&7A ?K*&7A?(7A`?t7A_9t7A_97A`?( 7A`?7A`B 7A`B7A`?(λ5A`+5Afλ5A`+5Af(D07A_57AD07A_57A(/7A_D07At/7AtD07A_(_)O7A@zR7A_)O7A@zR7A(t7A8@7A_9t7A_9@7A8( ߲ 7A?c_x 7A` ߲ 7A`_x 7A?c0]e8A@z$l8A`N]e8A@z2i8A?۲$l8A`N(_%7A`*&7A?_%7A`*&7A?($7A`_%7A?$7A?_%7A`(J7A?=9_f7AJ7A?=9_f7A(I8A 8A`?I8A`? 8A(O6A _6A_6AO6A (d8A`?]e8A@zd8A`?]e8A@z(o6A0s6A`?o6A0s6A`?87A߅?7A`7A`S7Aͯ7A@ ?7A߅(=7Aiߚ7A _=7Aiߚ7A _(7Ai=7Aߋ7Aߋ=7Ai(8AW 8A8AW 8A0y8A8A;y8A;s8A`8A(?7A 7A߅?7A߅7A (?7A@ =7Ai?7A@ =7Ai@ L8AbR8Aߚ L8Ab_3N8A _O8A_xO8A@R8Aߚ(aM7A_)O7A@zaM7A_)O7A@z(8A.m8A8Am8A.(N?Pt7ADQx7A?!N?Pt7A?!Qx7AD( 8AG8A 8A8AG07A@47A7A@?7A+47A86A\6A.6A.6A@?uO6A4\6A(0s6A8?m}6A`?0s6A`??m}6A88 5A_λ5A` 5A_߃5A?5A`dλ5A`(Qx7A?pCy7ADQx7ADCy7A?p(F7AtJ7A?=F7AtJ7A?=($7A_%7A`_%7A`$7A(_6A6A@o6A@o_6A(O6A_6A O6A _6A(?7A7A?7A7A(_6A 6A_6A6A Xs5A_j5A?s5A?5A d_5A`5A?15A5A a5A`V5A_j(9_f7A`? 47A9_f7A47A`? 8_;7AK?7A_;7AK7A_7A?7A߅H_x 7AK_;7A?c_x 7A?c_7A?7A@<J7A`y7A_;7AK(<7A:7A l<7A l7A:(bh7A ]߼m7A?%bh7A?%]߼m7A (R7A_7A@R7A_7A@(i6A _Q6A`_$i6A _Q6A`_$(1`8Ad8A`?1`8Ad8A`?([8A1`8A_[8A_1`8A({a5Any_5A{a5Ay_5An8G_]z7AF7AtG_]z7AV}7ApUߛ~7A@?1F7At(Cy7AG_]z7A?pCy7A?pG_]z7A(Nv7AG_]z7A`_8Nv7A`_8G_]z7A0\7A ߲ 7A`\7A? 7A` ߲ 7A`(@7A\7A8@7A8\7Apzk8Az3?88AM zk8AMn'"8Amx"8A@p\$8A@~T(8AOb*8A`i<_Q-8A`?}.8A`h0_18A?88As3?88Az(G_]z7AF?4{7AG_]z7AF?4{7AP5A_{a5A_j5A_j5A_5A_5A@_v_5Ah5A?{a5A(?l6A`+o6A?l6A`+o6A (\6A@?Y_G6A\6AY_G6A@? 0\7A`yQ7A\7A_7AQ7A`y (X?N6A,] 6AX?N6A,] 6A 0y_5A,X?N6Any_5An\g5AX?N6A, (?\7A7A ?\7A7A  (7A?\7A:7A:?\7A (7A@?N7A@7A@?N7A@ (6A 6A 6A 6A  8=7A@7Ai=7Ai7A@? u7A7A@ (_6A_6A_6A_6A (_6AO6A O6A _6A 09*7AG07A9*7A_2-7AlG07A (m8Ad 8A.m8A.d 8A (6A6A 6A 6A (7A@_?7A7A@_?7A 0 y6A_6A_6An6A _h y6A 0A6A`;7A`?7A`?6AA6A`; (6A`  y6A6A`  y6A (_)7A K 9*7A_)7A K 9*7A (5A` 5A _5A` 5A _ (_|6A  _6A_6A_|6A   (?'5A {a5A?'5A {a5A ( '6A? _6A_6A '6A?  a8A K8A@Oa8A |8A@_l]8A 8A8A`? I8AȐ8A@~8A6p?/8A Z/8AT8A)?8A)8A?E8A _8A_K8A_qa8A@O (_;7A,X7AK_;7AKX7A, 06A86A` 6A8_S6A@6A`  (d 8A@G`a8Ad 8A`a8A@G @ 7AS_;7AK 7AS 7A  7A?_7A@_b_;7AK (Q7AS 7A`yQ7A`y 7AS ( 6A`_m '6A?  '6A?  6A`_m ( y6A`_m 6A y6A 6A`_m (_gI8A _R L8Ab_gI8A _R L8Ab Hm7Ak8Am7Ako?}8A di8A r8A@Jv?8A8A !( 6A?/ 76A`_m 6A`_m 76A?/ "(wG7A5aM7AwG7A5aM7A #(X7A ??7A,X7A,?7A ? $X] 6A@;:6A`4] 6A^6A`?aC6A`4Y_6A ?A6A b 6AE% 6A :6A@; %]?6A<(6A_ ]?6A<266A`? E6A> F6A_|0_6A`<_6A?2E,6A`!Bߘ 6A 5A 5A _m +(6A$_‡6A߳6A$_‡6A߳ ,@r6A[_6A`?R6r6A`?R6?6Aev[_6A[$6A8LK6A -(Y_G6ALK6A@?Y_G6A@?LK6A .(m7A?s7Akm7Aks7A? /(7A ?u7A 7A ?u7A  006A__|6A  _|6A  6A_e6A_ 1( '6A_6A?  '6A? 6A_ 2(6A6A_6A_6A 3( 76A6A?/ 76A?/6A 4(`a8A?o+8A@G`a8A@Go+8A? 5(G_Pr7ANv7A`_8G_Pr7ANv7A`_8 6(?N7A { z7A@?N7A@z7A {  7(0?38A"3?88Az0?38A"3?88Az 80_"7A?1#7A@__"7A?1#7A 7A@_ 9(1j6A@ $?l6A`+1j6A@ $?l6A`+ :8]8A_'&1`8A]8A_'&]8A ?:c^8Ag1`8A ;(6A)6A86A86A) <(7A@߄+ 7AS7A@߄+ 7AS =(E5~7A80*7A E5~7A *7A80 >(|7A`?Z0_"7A?1#|7A`?Z0_"7A?1# ?(j6A16A6Aj6A1 @(6A1j6A_6A_j6A1 A`s8A`z2W8AW8AztZ8Aѵʈ88A^ 8Asm鰇8A=sVIR 8Aj% E,*SY8AQ,7-hh8A$ 8A@6 3ZlO8AXX ѻ/8Af3Ak=8A`Ljs矎28ArRt8A9R@"8A@Q۱o8A`&⥩v8A '8A$_\L,8A']xD8A{"[?8A@z[|Κo28A95~8ADETǬ68A@>`s8Ad}8A` +-m8AZ]08A`z2 B(HD7A?2wG7A5HD7A?2wG7A5 C@_57A?2HD7A߆_57A߆:7A :>7A߿e?7A8HD7A?2 D(_J6A@3j6A1j6A1_J6A@3 E(]8AT3x_8A_'&]8A_'&x_8AT3 F@6Ae36A?;6Ae3?6AN6A #6A?;6A8 G8 7A?5~ 7AS 7ASC 7A/(< 7AZ2~ 7A?5 H(6A@_C5_J6A@36A@_C5_J6A@3 I(6A@_C56A?>!6A?>!6A@_C5 J(47A6#7A`? 47A`? #7A6 K(7A6R7A_7A6R7A_ L0?u7A67A ?u7A ?f7A 17A6 M0V6A7 6A`_m 6A`_m6A V6A7 N(6A7V6A)6A)V6A7 O@A6A@7p7A`;A6A`;6A 6Aw6A 6p7A@7 P(~ 7AC9 7A?5~ 7A?5 7AC9 Q((6A`߾946AH(6AH46A`߾9 R(46A:,46A`߾946A`߾9,46A: S(V6A?;ߠ6A7V6A7ߠ6A?; T(_U$6A`_o;&6AL;_U$6AL;&6A`_o; U(z7Ap;7A { z7A { 7Ap; V(F76A;<J6A`<J6A`F76A; W(p7A;7A@7p7A@77A; X(?ʄ6A=6A$?ʄ6A=6A$ Y07A=@7Al7Al7A@? 7A=@ Z(7AA7A@߄+7AA7A@߄+ [(7AA7A;7A;7AA \(7AGBs7Ap;7Ap;s7AGB ]8;M6A8C.6A ;M6AL/6A O6A.6A8C ^P&6A@=D46A`߾9&6A`_o;)6A=ߝ/6A _;C326A@=D$36AB36A ?46A`߾9 _(7A{D7A ?@7A{D7A ?@ `(?bB7A3EHD7A?2?bB7A3EHD7A?2 a(?ջ7AE|7A`?Z0?ջ7AE|7A`?Z0 b(7A ?E7A{D7A ?E7A{D c@?7A ?E7A ??7A ?7A?U7A(t7A,7A ?E d("7A?F_)7A K "7A?F_)7A K  e(f6A?G1j6A@ $f6A?G1j6A@ $ f8m5A`_H?'5A m5A`_Hzq5A_e4gj5Af?'5A  g(*7A?J&?7A80*7A80&?7A?J h(o+8A@KBP8A?o+8A?BP8A@K i(7A?M#7A67A6#7A?M j(7A O7A ?@7A ?@7A O k(C/m7AOG_Pr7AC/m7AOG_Pr7A lPC8A?RQ_gI8A _RC8A?RQF8A>F8A:?~G8A_3 G8A?h$H8A_gI8A _R m83?88A?RQC8Az3?88Az#,=8A "B8A@PIC8A?RQ n(G_Pr7ARA_w7AG_Pr7AA_w7AR o0ߠ6A@T6A?;ߠ6A?;?6A?T6A@T p(?"6A`_1V_U$6AL;?"6A`_1V_U$6AL; q(s7A?DX\7AGBs7AGB\7A?DX r(7A`X87A O7A O87A`X s0?/6A X6A@_C56A@_C5{6A@?/6A X t(C 6A Y:6A@;C 6A Y:6A@; u(? 6A YC 6A rK? 6A rKC 6A Y v(u5A[m5A`_Hu5A[m5A`_H w(BP8Ax]BI8A@KBP8A@KBI8Ax] x8$*8A_[^0?38A8$*8A_[^=18A,28A80?38A" yX 5A`^5A_ 5A_35A5A@_5A@s5A@5A ӽ5A`_QK5A`^ z(\7A@_K7A?DX\7A?DXK7A@_ {(G|6A`F76A;F76A;G|6A` |(.6A a#6A8C.6A8C#6A a }0_6Aca6Ae36Ae36AI_6Aca ~@?cO8A b]8A ?cO8A b Y8A?e Y8A ?&]8A _#]8A_'& (6A`?b?ʄ6A=6A`?b?ʄ6A= (6Ac_6Aca6Ac_6Aca (_>7A d?bB7A3E_>7A d?bB7A3E (_6A_d?/6A X?/6A X_6A_d (6A_d_6A@T6A@T_6A_d (K 6A@?Tf? 6A rKK 6A@?Tf? 6A rK X,46A`fA6A:,46A:66APB76A6Iy96A_!Pw;6A?X??6A a@6A .eA6A`f 0x_8A h g8AT3x_8AT3_)f8Aib g8A h (_T7AhM?j7A|_T7A|M?j7Ah (߯6A?i7AA߯6A?i7AA 0j6A?i߯6A1j6A16A@8߯6A?i (#6A i6A a#6A a6A i (}7Aj"7A?F}7Aj"7A?F P7Aj}7A@7A@7A_<7A`67A`27A@W7A _}7Aj 8ߡ7Aj7A ?Eߡ7Aj7A_f7A@H7A ?E 0 7Ajߡ7AC9 7AC97A_^ߡ7Aj @g8Ak8A`g8Ako8AeRq8A` Jv8A`?$8A` ( g8Akg8A h g8A hg8Ak (?d6Alf6A?G?d6Alf6A?G (A6A lsC6A`fA6A`fsC6A l (?6Am6Ac?6Am6Ac (6Am?6A i6A i?6Am 0_‡6A+nav6A߳_‡6A߳?F6A_Cav6A+n (Ny6A^nK 6A@?TfNy6A^nK 6A@?Tf (7A@"ph7AA7AAh7A@"p (#7A{p7A6#7A67A{p (z?Z=7A ?sq_>7A dz?Z=7A ?sq_>7A d (57Arߡ7Aj57Arߡ7Aj ( 7AHrK7A@_ 7AHrK7A@_ 03L6A`_`r"N6A`m3L6A`m4M6A@o"N6A`_`r (t:5A@?su5A[t:5A@?su5A[ (6A=t _6A(t6A=t _6A(t 0?6A=t6Am?6Am!?X6A߭n6A=t (#7A=t7A?M#7A?M7A=t (_U@8A`ztC8A?RQ_U@8A`ztC8A?RQ (1F6A(u3L6A`m1F6A(u3L6A`m 0sC6A`/u&F6A lsC6A l?D6Aqq&F6A`/u (ʵ7A2u?ջ7AEʵ7A2u?ջ7AE (K7A2uʵ7A@_K7A@_ʵ7A2u @g7A?ue?Z8A?g7A?up_@7Aff8Ah4e?Z8A .s7A? ("N6Av-Q6A`_`r"N6A`_`r-Q6Av (_6A_v_6A_d_6A_d_6A_v (-Q6A w?VS6Av-Q6Av?VS6A w (-<6A z?"6A`_1V-<6A z?"6A`_1V 0&?7A@z_Έ7A?J&?7A?J'?7A_Q_Έ7A@z (P6A?|-Q6AvP6A?|-Q6Av (7A@7A{p7A{p7A@ (a7A?3 7AHra7A?3 7AHr (*g7ADM?j7Ah*g7ADM?j7Ah (ߚR6A?VS6A wߚR6A?VS6A w (P6AߚR6A?|P6A?|ߚR6A (_6Ak6A_v_6A_v6Ak ( _6A6A(t _6A(t6A (96A G|6A`G|6A`96A  (g7A@i_|7A?ug7A?ui_|7A@ ( 6A46A`?b 6A46A`?b 0A_w7A U+|7ARA_w7AR!?z7A ?)p+|7A U (J8A?cO8A bJ8A?cO8A b 8C8AJ8A?RQC8A?RQE8A ?^NJ8AJ8A @88A?_U@8A`zt88A?98A? _4:8A@U ?8Au_U@8A`zt 0*U8Ax_8AT3*U8A^8A`5x_8AT3 (?cO8A*U8A b?cO8A b*U8A (g8A?5 l8Akg8Ak l8A?5 8?a5A@_>5A`^5A`^?a5AFx5A@5A@_> (p97A`_z?Z=7A ?sqp97A`_z?Z=7A ?sq (N6AߚR6AN6AߚR6A (N6AP6A?|N6AP6A?| ([a6A_?d6Al[a6A_?d6Al 0?VS6A_[a6A7u?VS6A weZ6A7u[a6A_ 0?[6AV6A7V6A7ߝ6AU?[6A (6A?[6A6A?[6A (y߇5ArhT5A_}y߇5ArhT5A_} H~7A͔m7Ak~7A͔q_7ApNn7ACz7A`<7A`%m7Ak 07A͔~7A=t7A=tr7AՌ~7A͔ 0 l8A`-~m8A?5 l8A?5l8A `~m8A`- ( 6A`?6!6A4 6A4!6A`?6 `av6A 1E6A+n av6A+nb6AWoM_Q6A@}T6A@66AZp6A@?G?66AJ 6A s1E6A  (?[6A?6A?[6A6A? 0BI8A!8Ax]BI8Ax].8A@ǁ!8A (7A_?7A`?7A_?7A`? (7A_7A@7A@7A_ ( 6A _nNy6A^n 6A _nNy6A^n (}6AA 6A4}6AA 6A4 0"7A K7A6"7A K_7A ;7A6 ( 6AZ߯6A?i߯6A?i 6AZ (6AZ 6Ak6Ak 6AZ 0_6A?_6A_d_6A_d 6A`]_6A? (?7A@?7A`??7A`?7A@? (~m8A?@gn8A`-~m8A`-gn8A?@ 81c"8A@$*8A_[^1c"8A@?$8A| &8A$*8A_[^ (!8A@1c"8A!8A1c"8A@ (!6A`oF6A`?6!6A`?6F6A`o (6A`߄-<6A z6A`߄-<6A z 8 7Aߡ57Ar57Ar7A8z#7A  7Aߡ (h7Aߡ 7A@"ph7A@"p 7Aߡ ( 38AC88A? 38AC88A? (?08AC 38Aݕ?08Aݕ 38AC HB6A_&F6A`/uB6A_C6A?D6AAE6A׀E6A@R|&F6A`/u (z?Z=7A f_C7A ?sqz?Z=7A ?sqf_C7A  @hT5A ;l?5A_}hT5A_}i?5A hx5A ߡY(5AHl?5A ; (m87Ap97A`_m87Ap97A`_ 8B6A`ߛN6AB6A_?G6A`ߛL6A@N6A (f_C7A ^C7A f_C7A ^C7A  (57A_7Ar57Ar7A_ (R8A_*U8AR8A_*U8A (?B6A B6A_?B6A B6A_ (C@5A Ak5A@DC@5A Ak5A@D @>8A ޫ_U@8A`zt>8A ޫ>8A@n>8A $@8A~_U@8A`zt (_Έ7A_:7A@z_Έ7A@z:7A_ (6A6A?6A?6A 0-6A]96A -6A]8O6A96A  ((ȹ6A@Ȯ-6A](ȹ6A@Ȯ-6A] (BW6A@Ȯ(ȹ6A`BW6A`(ȹ6A@Ȯ (1b7A*g7AD1b7A*g7AD HD7A1b7A?2HD7A?2{H7ASzJ7A_ZwK7A\esL7AI_aP7A`de]R7A_xjxR7A|QS7A \[dV7AJ? [7AF8?\7A<a7Aߑ1b7A 8_/5A`ί5A@_>_/5A`ί_5Ag5A?ɝ5A@_> (?6A?h 6AZ 6AZ?6A?h (6A?h?6Ak6Ak?6A?h (% 6Aα 6A _n% 6Aα 6A _n p8A@Ba8A  p8A@BDs8AFt8Aw8A y8A__{8A_}8A`_?8Aib8A`_Q_Y8AGMߏ8A?@P8A@G&a8A  ( p8A@Bp8Aߓ p8Aߓp8A@B (~7ACYO7A͔~7A͔YO7AC (S6A5\6AS6A5\6A (*U8A`rZ8A*U8AZ8A`r 8Ak5A"% 6A@DAk5A@DC6A@ܱ8S6A"% 6Aα (P8A`6R8A_P8A`6R8A_ (J8A`6P8AJ8AP8A`6 0i_|7A@e8A@i_|7A@[7A@_e8A@ (_o@6A-?B6A _o@6A-?B6A  (+|7A_7A U+|7A U_7A 5+u8A o8A@Tu2o8A@c148A K_D8A@Tu䘎u8A]\q8A!ĉ٫j8A~g8A [PҮ{8A "$x8A@ )_*$8A^L8A -"ź8APqvչo8A`1x)R8AHg&8ArI]<8A oca[8A`"x3K!8A(*|J8A1J.Ng`8A Y1X0?>8A k:Ƨ 8Azm7 V%38A@Z48A!r?rP18AWN{۠8A`M5옸8A ql*S U8A`J6X@8A੥Ρ4Y[8A}kZ8AvH y@8A@Y2^K8Ax6Z8A@1ȃevy8AUΙ@.8A QnyA8A@+ɳMJ8A`U8A 14C† a8A`+wsl~8A jqյ8A@nVPŲ8AiY@0 8A}71n8C֫8AP ~ǡ8A`Drܙy8Asd55+u8A dLy8A@pOV8A  H_Z8A`g8Ak_Z8A`]8A y _8A`ad8Axpe8Aqg8Ak (Z8A`_Z8A`rZ8A`r_Z8A` (^6A`[a6A_^6A`[a6A_ (ߚR6A`^6AߚR6A^6A` (7A@wa7A?37A@wa7A?3 (7A@w7A@?7A@?7A@w (F6Ax6A`oF6A`ox6A (_Z8A*?[8A`_Z8A`?[8A* (\6AXS6A\6AXS6A H &8A`??08Aݕ &8A`??<'8A ·E)8A>+8A -A/8A_?08Aݕ (1c"8A`? &8A@1c"8A@ &8A`? (:05A hC@5A :05A hC@5A  0l?5A h:05A ;l?5A ;Fm5A?m:05A h (O8AP8A`6P8A`6O8A (X7A?"7A KX7A?"7A K ()`7Aa1b7A)`7Aa1b7A (:7A 7A_:7A_7A  @}7AQ_ 7Aj}7Aj7A@_I_ 7A ?|_7A_7AQ (47A_hm87A47A_hm87A (6A_6A?_6A?6A 06A6A6A6A߬6A ([?C6A^S6A5[?C6A^S6A5 0b5A_l?5A ;b5A_Yߏ5A`l?5A ; 8l?a5A y߇5Arl?a5A \5Au5A`y߇5Ar P5A?l?a5A@_>5A@_>5A]G5AA5AFp_5A?j5A?l?a5A  (>8A>8A ޫ>8A>8A ޫ p6A ?B6A? 6A ??6A_H  6AuK!6AԶ n#6A_ۮ߰)6A.6A?66A@_86A?W?6AB6A_ (6A ?6A`߄6A ?6A`߄ (#N6A0K?6A`b#N6A0K?6A`b (;6A_o@6A-;6A_o@6A- (L5Aߧ:05A hL5Aߧ:05A h !(O8A,Q8AO8A,Q8A "(l?a5A:Y?5A l?a5A Y?5A: #(>8A ?lD8A ޫ>8A ޫD8A ?l $(?=8A$>8A?=8A$>8A %(*h6A@?(ȹ6A@Ȯ*h6A@?(ȹ6A@Ȯ &(YO7A?\r7ACYO7AC\r7A? '0Q8A_Z8A`Q8AV8A ?_Z8A` ((,Q8AQ8A,Q8AQ8A )(my6A R}6AAmy6A R}6AA *( 7A` 7Aߡ 7Aߡ 7A` +@L?6A 1E6A L?6A Ci6A@2֯6A V=?6A1E6A  ,(K?6A L?6A`bK?6A`bL?6A  -(e8A ?E8A@e8A@E8A ? .(S6A_,[?C6A^S6A_,[?C6A^ /(M8A/O8AM8A/O8A 0(D8A`?D8A ?lD8A ?l?D8A` 106A@_6A ?6A@_6Av6A ? 20 6A@_6A _n 6A _n:6A v6A@_ 3(6<5AL5Aߧ6<5AL5Aߧ 4(7A7A@w7A@w7A 50 7A/7Aߡ 7Aߡ_I7A/7A 6(_L8A`Q8A_L8A`Q8A 7(_L8A`M8A/_L8A`M8A/ 8(E8A`=_L8A`E8A`=_L8A` 9(?D8A`=E8A`?D8A`E8A`= :(?=8A`=E8A$?=8A$E8A`= ;07A?U7A_7A?U7A7A_ <(7A?U7A 7A 7A?U =8Y?5A V5A:Y?5A:^5A@WL5A'V5A  >(\r7A@W7A?\r7A?W7A@ ?087A'7A`X87A`X47A߾7A' @07A'7A_7A__7A%7A' A8b5A6<5A_b5A_Qq5A`?O=5A6<5A B(/7A߬7A/7A߬7A C([6A^6A`[6A^6A` D(7AX7A?7AX7A? E({17A@[47A_h{17A@[47A_h F8߭46A _;6A߭46A _566A96A @;6A G(V5A M5A V5A M5A  H(6A56A ?6A ?6A5 I(,_\7A)`7Aa,_\7A)`7Aa J( &8A?+8A`? &8A`??+8A K(:z6AD#N6A0:z6AD#N6A0 L(XS6AD:z6AXS6A:z6AD M(Z6Ak[6AZ6Ak[6A NHN6AkZ6AN6AN6A ΜN6A ?\O6A@AZ6A@ߑZ6Ak O(97Ae8A@97Ae8A@ P0?[8A 9a8A*?[8A*^8A a8A 9 Q8T5A pb5A_T5A p]5AUp5A@b5A_ R(M5A pT5A M5A T5A p S(ߗ|7Ak_7Aߗ|7Ak_7A T(6A6A ?6A ?6A U(6A6A@_6A@_6A V(d_Q6A{S6A_,d_Q6A{S6A_, W(x6A{d_Q6Ax6Ad_Q6A{ X(D7Au7AD7Au7A Y(m7A 7A` 7A`m7A Z(6A_r*h6A@?6A_r*h6A@? [(W7A >M7A@W7A@>M7A  \(oߡv6A`#my6A Roߡv6A`#my6A R ]8[a6A`#oߡv6A_[a6A__l6A2~_t6A_oߡv6A`# ^(_I8A_L8A`_I8A_L8A` _(E8A_I8A`=E8A`=_I8A `(7A@7A7A7A@ ax:05A6A h :05A h05A$D5A 5A]3y5A_'5A/_6A'F6A"% 6A! 6A _&r6A@6A@_ b@_6A6A6A 6A`6A`Z6Ao_6A c(7A{#7AQ7AQ{#7A d(;8A`_I?=8A$;8A`_I?=8A$ e(_~z7Aߗ|7Ak_~z7Aߗ|7Ak f(M?j7A_~z7AhM?j7Ah_~z7A g8d8Agn8A?@d8A_j8A =2l8A߸gn8A?@ h8a8Ad8A 9a8A 9_Kb8A%Sb8A@^d8A i(UY6AZ6AkZ6AkUY6A jH e8A\p8A@B e8A\i8A >l8A ?>?qm8A@ n8A@p8A@B k(d8A\ e8Ad8A e8A\ l(06A߭46A _06A߭46A _ mP6A06A6A5_l 6A  _"6Ar _"6A?L$6AyG-6A_06A n0߬7A _f7A߬7A_g7A_f7A  o@E8A_x 8A ?E8A ?08A_9a8A'I 8A? 8A_x p(CA7A97ACA7A97A q(>M7ACA7A >M7A CA7A r0?6A>_6A?h?6A?h?6A`n_6A> s( 6A_u?U7AZ 6AZ?U7A_u t8T5AKS_$5A pT5A pK5A@8b5A S_$5AK u(^C7AP?M7A ^C7A P?M7A v(7A@_ ?O7A'7A'?O7A@_  w(_f7A@_ ?O7A _f7A ?O7A@_  x( 8AF !8A_x 8A_x!8AF  y8Q8A`_U Y8AQ8ASU8A?DV8ArY8A`_U  z(w_-7A {17A@[{17A@[w_-7A  {(?O7A % u?/7A@_ ?O7A@_ u?/7A %  |(?+8A18A?+8A18A }(P?M7AMN7AP?M7AMN7A ~(_g7A7A@w_g7A7A@w (;?W7A?,_\7A;?W7A?,_\7A 8?,28A ?=8A$?,28A 88A:8A`_?=8A$ (18A ?,28A18A?,28A  (u?/7A|7A % u?/7A % |7A (7A7A@7A@7A (_6A_e6A>_6A>6A_e @6A6A6A6Ai6A6A6A @ 8A_m &8A`? 8A_m?;$8A1M%8AA%8A` &8A`? (6A _I6A_r6A _I6A_r (S_$5A@4/5AKS_$5AK4/5A@ (w7A__~z7Aw7A__~z7A (hs6A?oߡv6A`#hs6A?oߡv6A`# (^6A?hs6A`^6A`hs6A? (6A?U7A_u?U7A_u6A (Y8A~_[8A`_U Y8A`_U _[8A~ (|7A`? 7A|7A? 7A` (s7+7A?Q w_-7A w_-7A s7+7A?Q  0{#7A?Q s7+7A{#7AlE'7A_s7+7A?Q  07A_ D7Au7A_ ~@7AD7Au h6A !06A 6A6A`%  6A (w!6A !?A%6A@_ '6A@_)6A-:*6A`?*6A`?06A 0?V6A)!UY6A?V6A)!?X6AEUY6A 8N8A!Y8A`_U N8A!R8A`TU8A TY8A`_U  0_I8A!N8A_I8ApK8A`_ N8A! HQZ5A#V5A QZ5A#d5A_-^5AIlߩ5AT}5A|V5A  (\8A` %d8A\8A` %d8A 8_[8A` %\8A~_[8A~_-\8AF\8A"\8A` % 0_]8A`H+ e8A\_]8A`H+a8A@?  e8A\ (\8A`H+_]8A` %\8A` %_]8A`H+ (c6A },6A _Ic6A },6A _I (?X6A._6A>_6A>?X6A. (6A.?X6A6A?X6A. (CA7A ߬/1l7ACA7A1l7A ߬/ (!8A2z8AF !8AF z8A2 (E8Aa3N8A!E8Aa3N8A! Xm;6A4?B6A m;6A4?=6A_=6A v>6A_-߃?6AA6A?lB6A2?B6A  (7A`5?7A7A?7A`5 0?;78A_T6;8A`_I?;78A_T688A.;8A`_I (?,28A_T6?;78A ?,28A ?;78A_T6 (?6A@a66A6A?6A@a6 (6A@a6?6A_e6A_e?6A@a6 (?X6A 7X6A.?X6A.X6A 7 0_]8A?80_8A`H+_]8A`H+?$^8A`_/0_8A?8 8Q6A(8c6A },Q6A(826A1(b6A@?.c6A }, (Q6A(8d_Q6A{Q6A(8d_Q6A{ 0N8A@9?R8A!N8A!߹Q8A_7?R8A@9 8oߡv6A!:Q6A`#oߡv6A`#V6As(d?؄6A!:Q6A(8 (?U7An;7A_u?U7A_u7An; (1l7A;$_T7A ߬/1l7A ߬/$_T7A; (0_8Aq>__8A?80_8A?8__8Aq> 0`_'7A ?>s7+7A?Q s7+7A?Q `ߜ(7A8`_'7A ?> @6A_W?_6A_6A{6AC.6A`_:@6A =6A_W? 86A߀A?[6A?[6A 6A?6A 6A߀A (5?Ϲ6A߀A6A@߮5?Ϲ6A@߮6A߀A (6AC6A_W?6A_W?6AC (U8A>D 8A_mU8A>D 8A_m (e'7AD`_'7A ?>`_'7A ?>e'7AD 8? 7ADe'7A`? 7A`!7A )j@#7A 4e'7AD 0t7AE~7A͔t7AE7A~7A͔ 0U8A ?E\8A` %U8A ?E:Z8A2.\8A` % (?S6A?,G?V6A)!?S6A?,G?V6A)! (S8A_NGU8A ?ES8A_NGU8A ?E (?R8A_NGS8A@9?R8A@9S8A_NG 06AnJ6AC6AC%6A+I6AnJ (_q7A?Jw7A__q7A?Jw7A_ 81b7A?J_q7A1b7A?g7AM _l7A߃_q7A?J (hs6AJRi~6A?hs6A?Ri~6AJ 8X?+5A >KQZ5A#X?+5A >Kcc5A5D5A)QZ5A# HU8A K5*8A55*8A KQ)8AD'8A5?$"8ABN 8A@7U8A>D (*8A`K?,28A *8A`K?,28A  (5*8A`K*8A K*8A`K5*8A K 84/5A@L m5A@4/5A@*?;5A635A< m5A@L (6A@M6A߀A6A߀A6A@M (B7AtM7A@B7AtM7A@ (a"'7A_Np)7A`Da"'7A`Dp)7A_N (O5A?NX?+5A >KO5A?NX?+5A >K (~,7AO7A_ ~,7AO7A_  (?7AO~,7A`5?7A`5~,7AO 0-_P7AO;?W7A?-_P7AO/_R7A;;?W7A? HMN7AO-_P7AMN7A>ߴN7A@!ON7A 2N7A%; O7A@10-_P7AO (]_5AOO5A?N]_5AOO5A?N 8_>:8ARE8Aa3_>:8ART>8A AD8A?5E8Aa3 8?;78AR_>:8A_T6?;78A_T6߮78A@?D;u88A?B_>:8AR 8x45A 4Wqc5A@vPx45A 4WE5AAS?5A@vPqc5A_R 0S_5AX]_5AOS_5AXd 5AP]_5AO (6A ?X6A߀A6A߀A6A ?X ( m5A?&[X5A@L m5A@LX5A?&[ (?86A ?=[m;6A4?86A ?=[m;6A4 (8A@^U8A>D8A@^U8A>D (z8A@^8A2z8A28A@^ (6A^_6A ?X6A ?X_6A^ (6A@^6AnJ6AnJ6A@^ (_6A@^6A^_6A^6A@^ Pqc5A ?_S_5A_Rqc5A_Ri_ۻ5A Ww_5AW_a?]5A ?_[I5A?]c\5A?,ZS_5AX 86A@7ap6A_W?6A_W?6A ?NO(6AZp6A@7a 86A@7ap6A@^6A@^6A s`L6A?`p6A@7a (ߪ6A b?6A@a6?6A@a6ߪ6A b (X6A bߪ6A 7X6A 7ߪ6A b (t7A_c[7AEt7AE[7A_c (?6Ag7A@a6?6A@a67Ag (߉6A_i6A@^6A@^߉6A_i (~,7A 6jv`7AO~,7AOv`7A 6j 07A`>l? 7An;7An;J7AS@? 7A`>l 0`U"7A`]ne'7ADe'7ADt&7A`F`U"7A`]n (7A_rov`7A 6j7A_rov`7A 6j ()Q6Ao?S6A?,G)Q6Ao?S6A?,G (s!7A`߰q`U"7A`]n`U"7A`]ns!7A`߰q ([7A`qS7A_c[7A_cS7A`q Pc6A?+rA6A,,c6A }, _q6A,,6AAB ݻ6A_KJ6A@K?O6A`?|OA6A?+r (_6Ar6A@M6A@M_6Ar (?>M7As-_P7AO?>M7As-_P7AO (7ABvB7AtM7ABvB7AtM (U)!7A@ws!7A`߰qs!7A`߰qU)!7A@w 8|7A@wU)!7A@|7A@w?7A?/Z_ 7A_nU)!7A@w 8 18A`x_>:8AR 18A`x48A@p488A_a_>:8AR (?>M7Ax-MM7As?>M7As-MM7Ax (?S6Ax}^6A?,G?S6A?,G}^6Ax (B6Ay_6Ar_6ArB6Ay (7A {7Ag7Ag7A { (_l7A{_q7A?J_l7A{_q7A?J (B6A{6AyB6Ay6A{ (/7A`?q|_g7A/7A`?q|_g7A (Ri~6A"7_q6AJRi~6AJ7_q6A" ({66Aj?86A ?=[{66Aj?86A ?=[ (?f6AB6Ay?f6AB6Ay 0A6A?f6A?+rA6A?+r6A[y?f6A (7A/7A`?q|7A/7A`?q| (ߪ6Aߜ6A bߪ6A b6Aߜ (/8A@‚ 18A`x/8A@‚ 18A`x 8*8A@‚/8A`K/8A@‚.8A_dx#,8A`\*8A`K (8A` 8A@^8A@^ 8A` (V_k6A@_q6A AV_k6A@_q6A A @$_T7A1"?~8A;$_T7A;7A@F8A _x^_28A`Er"?~8A1 ( 8AZ"8A` 8A`Z"8A (dh6A?Ԏ]i6A ?dh6A?Ԏ]i6A ? (sj6A?yV_k6A@_sj6A?yV_k6A@_ (_"8A*8A`K_"8A*8A`K (Z"8A_"8AZ"8A_"8A (N6A)Q6AoN6A)Q6Ao (fPh6A@_pdh6A?Ԏdh6A?ԎfPh6A@_p `UY6A@_pfPh6A UY6AZ6A_[b6A ߛ/va6AaV?nc6AM]r?e6A@ikaf6A@pw@g6A }fPh6A@_p (S7A`|?7A`qS7A`q?7A`| Hp6A`6A@7ap6A@7a6A6g&6A_3v6Ah6A։6A` (wg6AXfPh6A@_pfPh6A@_pwg6AX @}^6AXwg6Ax}^6AxwPe6A 1te6A0hg6A wg6AX (-_P7A_iT7AO-_P7AOT7A_i (6A6Aߜ6Aߜ6A (bJ7A -MM7Ax-MM7AxbJ7A  0mo7A_Ht7AEmo7A_Hb7A\t7AE @7A_Hmo7A_ro7A_ror7A_~a7A`?aR7Amo7A_H (?8A߱8A@^?8A߱8A@^ (7A7ABv7A7ABv 8F6A?N6AF6A?G6A@4J6A N6A ("?~8A8A1"?~8A18A (X_J7A`U)!7A@wU)!7A@wX_J7A` `m7A`X_J7A m7A_[7A`7A o7A/7A ,C|7A@aKu?W7AaS"7AvX_J7A` (?7A`9J7A`|?7A`|9J7A`  6A26A6A}6A_$6A@wX6A?Wo6A@_6A  N6A`*)6A. 6A v2 6AUB 6A@m 6A _W 6A 6A2 8X5A2 6A?&[X5A?&[ 5A i y5A@s 6A2 (? 7A _wc7A`>l? 7A`>lwc7A _ (7Ax#7A {7A {x#7A 06A@ߪ6A bߪ6A bc6A`k6A@ (f7AI_l7A{f7AI_l7A{ !(i'7AtX_J7A`X_J7A`i'7At "( 6An 6A2 6A2 6An #(7A7A7A7A $(T7A`\T7A_iT7A_i\T7A` %(H7A_bJ7A H7A_bJ7A  &06A`H6A{6A`H_6A"6A{ '0_"8A޵'8A_"8A$8A?'8A޵ ((<7A_"7A<7A_"7A )X_q7A_"<7A?J_q7A?Jnu7Aty7A`G}7A`7An7AW_m7A<7A_" *H߀+6A_U{66Aj߀+6A_UF,6A@.6A`_06Ax16Ax{66Aj +(_&6A_U߀+6A`"_&6A`"߀+6A_U ,H6A@{߉6A_i߉6A_il6A~6A׊?I6A`A6A@{6A`H -0?(8A`/8A@‚?(8A`߻,8A/8A@‚ .('8A`?(8A޵'8A޵?(8A` /(A6A?BF6A?A6A?BF6A? 0(6A`_$6A`6A`$6A`_ 1(\T7A ?T7A`\T7A`T7A ? 2( 6A ?_>6An 6An_>6A ? 3(9J7A87A`9J7A`87A 4(7_q6A??6A"7_q6A"?6A? 5H8Ab:8A8A8A ?|8A ?8A 8A<:8Ab 6`s7+7AC7A?Q  s7+7A?Q e_#-7A$^_-7A '_17A`_GF^s37AOH97AcF97A(g$?X?7A ?(C7A 78R6!7A_bIߥ"7A`wR6!7A`wS@"7A`Iߥ"7A !Qe!7A_b 8(X_J7A_bQe!7A`X_J7A`Qe!7A_b 98mo7AQ$7A_Hmo7A_HK7A@߭Q$7A_M?7A :(W8A?8A߱W8A?8A߱ ;(:8AW8Ab:8AbW8A <(Qe!7AD"7A_bQe!7A_bD"7A =0H 7AQe!7A_bQe!7A_bIe!7A _~H 7A >(H?L7A Di'7Ati'7AtH?L7A D ?(wc7A DH?L7A _wc7A _H?L7A D @(_6A`6A@6A@_6A` A(_'6A`_6A3_'6A3_6A` B8sj6A`?DF?t6A?ysj6A?yg__l6ATl6AF?t6A`?D C(?a7Af7AI?a7Af7AI D07A?87A7A7A7A?8 E(646Ab?+96A M646Ab?+96A M F(߀+6Ab646A_U߀+6A_U646Ab GH_h<6A jA6A?B_h<6A j=6A@ >6A`7?6Aߜ@6AA6A?B H(?+96A j_h<6A M?+96A M_h<6A j I(c7A)H?L7A DH?L7A Dc7A) J(ߐ7A 7A?8ߐ7A 7A?8 K(6A@y$6A`_$6A`_6A@y L(v6A{_6A`_6A`v6A{ M(t 8A?:8Abt 8A?:8Ab N(?6A` Ҝ6A??6A?Ҝ6A`  O( _[C7A`C7AC7A _[C7A` P(W8A^8AW8A8A^ Q(7Av_57A?7A?_57Av R(?6A ߎ?6A@?6A@?6A ߎ S8^?7A@߈~v7Ax#7A~v7Ak_d7A %^?7A@߈ T06A@߈^?7A6A_7A ^?7A@߈ U0D7A ?9H7A_H7A_OF7A'D7A ?9 V(!C7A`D7A ?9D7A ?9!C7A` W(!C7A` _[C7A` _[C7A`!C7A` X(B7A;!C7A`!C7A`B7A; Y(>7A;B7A@_>7A@_B7A; Z(N7A` T7A ?N7A` T7A ? [(_8Ant 8A?_8Ant 8A? \P_D6A`c6A },_D6A`ƣ6A`6A@?{|6A`_6A?b6A ??c6A }, ](Ҝ6A`_D6A` Ҝ6A` _D6A` ^(ߐ7A`Zj7A ߐ7A j7A`Z _(87A$c7A87A$c7A `0 k7A@Q7A? k7A@Q{7A7A? a(hx7A`ߊ^?7A@߈^?7A@߈hx7A`ߊ bh5A 5_r5A >K 5A 4 5A@P>5A_K c(^?7AYf7A@߈^?7A@߈f7AY d0_m7A _j7A`Z_m7A _7Aj7A`Z eH$c7A ? k7A$c7A$7A`_z7A ? _7A ߄7A@@ k7A@Q f(F?t6A@_?~6A`?DF?t6A`?D?~6A@_ g(V7Auc7A)c7A)V7Au h07Ad(7A|_7A ?7A`ʥx_7A@k_ξ7A?}7A?j7As7A`<mo7A_H (c^7AAc?k7A;c^7A;c?k7AA (D7A` DF7A`_$D7A`_$F7A` D 0F7A)D?I7A(?I7A(H7A0F7A)D (#t6A?D&6A8;#t6A?D&6A8; (q7A )G7A_(+q7A )G7A_(+ ( 7A?;J?Y7A?;V7A3?d_7AGK7A)UQ_7A`_Y> 7A`Z (I7A [Ar7AZ.Ar7AZ.I7A [ (_6A?\6A?6A_6A?6A6A?\ (97A_d%U"7A`_S97A`_S%U"7A_d (< 7AdI7A [I7A [< 7Ad (H?+ 7Ad< 7AU6H?+ 7AU6< 7Ad (27Ah57AN57AN27Ah (<7A i< 7Ad< 7Ad<7A i ()7A`n<7A i<7A i)7A`n (a7A`_oc?k7AAa7A`_oc?k7AA (> 7A _s3b 7A`Z> 7A`Z3b 7A _s (Q7At_1W7A@d@Q7At_1W7A@d@ 03b 7Aw)7A`n3b 7A _s97Aw)7A`n (57A;z7A fQ57A fQ7A;z 0_Y7A}a7Ax1_Y7Ax1?Z`7A@ka7A} 0t׎7A~{N7A?-.{N7A?-.<7Adt׎7A~ (_S6A5k6A4k6A4_S6A5 (7A ?7A;z7A;z ?7A @?6A_D6A`?6Aߨ6A`cc6A=i6A_D6A` @7A7A ?G7A7Ad_7A@$JW7A ?G7AH (6AH06A?\6A?\06AH H_6As6A`H_6As_ 6A@) 6A`?$6A`?6A6A`H (06As_6AH06AH_6As 0_ON7A ɕQ7AtQ7AtߘO7A`_ON7A ɕ XF7A ɕ_ON7A)DF7A)D?I7A`_O]aK7Ae?L7Ak߯L7A?vt)M7A@? ?|M7A@_ON7A ɕ 0%U"7A B,7A_d%U"7A_d(&7A _XwB,7A  hH 7A_Η,7A H 7A>? !7A`_F!7A9$7A[+9)7A_2E*7A>*7ALG+7Aez+7A`y,7A_Η (B,7A_Η,7A B,7A ,7A_Η (-7A@ؘ27Ah27Ah-7A@ؘ (,7A@ؘ-7A_Η,7A_Η-7A@ؘ 07A^7AP7APU7A?-|^7A 8a7Ad7A}a7A}1b7Ad7A@d7A (_ON7AʜO7A ɕ_ON7A ɕO7Aʜ (j6A Ş6A?N6A?Nj6A Ş (_S6A Şj6A5_S6A5j6A Ş 0t׎7A@f߱7A~t׎7A~v7A%f߱7A@ x[5AĚo? 5A  5AĚo?5A@?0 5Ajt5A _W5A`x 5A@ tl5A*S[5A@F/5A_)35A_$6b5A`_ 5A  0?x6A_?6A?x6A_J6A?6A H#t6A_?x6A?D#t6A?D 6A@?j~6A?q_s6Acy6Ag?x6A_ (_7A`q ?7A_7A`q ?7A Pc?k7A7AAc?k7AAep7A`\?C7A?nY7A{1m7A@ͳ7A@n7A (P@6AQ_H6AUQ_H6AUP@6A 0?6A` ?x6A_?6A` _G6A`?x6A_ (7Aܲ_7A`q7Aܲ_7A`q (j6Aƴr6A Şj6A Şr6Aƴ (d7Ai7Ad7Ai7A (2?7A7A2?7A7A (?6A ?6A?6A?6A  (-7AúR47A@ؘ-7A@ؘR47Aú (f߱7AbZ7A@f߱7A@bZ7A (O`7A?a7A`_oO`7A?a7A`_o ( U7AǾ7Aܲ U7AǾ7Aܲ (>6AP@6AP@6A>6A 0_6A`6As_6As6A`6A (?'7AB,7A B,7A ?'7A pL?7A?SI7A@V L?7A@VA7A@bB7A xuE7A G7A@?H7A@??mI7A7I7A-gI7A?G7A`_G7A?S 0^7A@7A7A@?7A6^7A (r6A@d6Aƴr6Aƴd6A@ (i7A[*m7Ai7A*m7A[ 0N7A`3O7AʜO7AʜO7A@YN7A`3 p)7A`3N7A_Np)7A_NK-7A^_/7A_9cJ57A@77A387A=87A`&>:7A?=7A? ?=7A?[>7A@|L?7AsuʨA7AD6+y~D7A` bY'}G7A?SG7A?S?F7A6E7A> @7A߭7A7A߭I7A`?7A 7A 7A (7A߭7A@7A@7A߭ (M7A@N7A`3N7A`3M7A@ (E7A`?o?NE7A>E7A>?NE7A`?o (d6A`B?A6A@d6A@B?A6A` (%H7A?2?7A%H7A?2?7A (?6A w6A ?6A w6A  (_7A U7AǾ_7A U7AǾ H7A_7A7A?Y7A7A?7A7A_7A (t6A@j6A Şj6A Şt6A@ 0l6A@t6A9l6A9l?96A t6A@ (*m7AUr7A[*m7A[r7AU (6A ?fd6A6A ?fd6A (S6A(>6A>6AS6A( (B?A6A(S6A`B?A6A`S6A( (9M7AM7A@M7A@9M7A @?NE7A9M7A`?o?NE7A`?oF7A`?H7AdL7A9M7A (bB7ARE7A>E7A>bB7AR (R47ARbB7AúR47AúbB7AR 0^5A & 5A 0^5A.5A & 2٣5A& /?5A@5A+?5A?$5A/5A;w5A`_b,5A5? 5A`(8 5A3{2Y5A^p(5A]7ν5AP:5A_1,?5A)5A  (w6A_ 6A w6A 6A_ `)7A _ 7A@ )7A _ &7A@>7A_7A~7A ߚ7A`7AF7A7A@ P?!6A  }6Ast6A  _6A _ }6A{6A??!6A`26A@ѡ_6As (6A  6A_ 6A_ 6A  (X6A  6A_ 6A_ X6A  (X6A?" 6A  X6A  6A?" (t6AB `6A@t6A@`6AB (A7A@ bB7ARbB7ARA7A@ 87A? 7A߭7A߭7A-_7A@?6 7A? @ty7A t׎7A~t׎7A~pH7A_7Amd7Aty7A @r7A ty7AUty7A q?Mv7A ?vu7A r7A`r7AU ( 7A ?'7A?'7A 7A (6A$" ?6A  6A  ?6A$" 0l? 6A_j* l6A9l? 6A_j* `!6A_- l6A9 (t6A_j* l? 6A  t6A  l? 6A_j* (%6A@/ S6A(S6A(%6A@/ (l? 6A75 g<6A_j* l? 6A_j* g<6A75 05A5 ِc5A밾k2 ِc5A밾k2 5A|5 5A5 07A6 7A? 7A6 7A$ 7A? (`6A; 46AB `6AB 46A; 0ty7A< O_|7A ty7A \_{7A a8 O_|7A< 8&7Aa= %H7A?&7Aa= ǫ7A@) ?7A%H7A? (b6A_> ?6A$" b6A_> ?6A$" 86A_> b6A?" 6A?" _®6A@ 6A0 b6A_> h@L7Ai? D:7A bZ7AF17A,[7A?D:7ADߑ7A_ G7A E7A -37A` >*7A$ @L7Ai? (O_|7ATA d-}7A< O_|7A< d-}7ATA 0R7A B )7A _ R7A B %7A )7A _ @_7A B R7A_7Aw7AQ7A@ ?7A`?# R7A B (37A?;K FI7A? 37A?;K FI7A? 8_>7A?N A7A@ A7A@ ?A7A@_- ?@7A>; _>7A?N (9V6AzQ %6A@/ %6A@/ 9V6AzQ (46AzQ 9V6A; 46A; 9V6AzQ (l6A?TX 6A@=6A?TX l6A@= HM5A@Lpn`Y 5A5 M5A@Lpn`Y 5AT }5A _-K 5A\E 5A@ 5A5 ( 5A@Lpn`Y M5AĚo? 5AĚo?M5A@Lpn`Y (d-}7A?F] M7ATA d-}7ATA M7A?F] 8H6Aa X6A  H6Aa _6A`5 Q6A & X6A  (6Aa H6A?TX H6Aa 6A?TX (9V6Ag '_6AzQ 9V6AzQ '_6Ag ("<7A_h _>7A?N _>7A?N "<7A_h 07A`l t7A6 7A6 7A`U t7A`l !(S?6Aro g<6A75 S?6Aro g<6A75 "0^$6Ao t6A  ^$6Ao |߭6AB& t6A  #0b6Ao ^$6A_> b6A_> 6A g ^$6Ao $(t7A'r 7A`l t7A`l 7A'r %(M7A@s W_&7A?F] M7A?F] W_&7A@s &`R^7As r7A r7AUPq7Asl7A_G g7A`)> mf7A _B &f7A _C rc7A`vD ?b7AH R^7As '@N7As R^7A`3N7A`3T7A ?V7Af$ wL^7A_s R^7As (X7A`?t 8Ag X7A`?t /7A >3 _F8A?"8A`?=8A.߱8A8A08Aߧ߂8A`Р8A?W8A`m_e 8A E8Ag )(7A`?t X7A'r 7A'r X7A`?t *X57Az R7A B 57Az g7Ail _7AQX W7A ,Q 7AQ p7A?T 7A@S R7A B +(_:7A`} "<7A_h "<7A_h _:7A`} ,(W_&7A I^7A@s W_&7A@s I^7A -('_6Aߖ 6Ag '_6Ag 6Aߖ .@)s7A 37A?;K )s7A "?77A _ $ҏ7A@r @u7A [ 37A?;K /@.7A_ 7A6 .7A_ _~7A 2o ? 7AM 7A`ߍ7 7A6 0(n6A ?q6A@u n6A@u ?q6A 18_:7AL &7Aa= _:7AL '_w7A@BW %?إ7AO &7Aa= 2@@L7AL _:7Ai? @L7Ai? $7Ai 7A@?k 0"7A?m _:7AL 30X7A_( _ 7A`?t X7A`?t 7A_z _ 7A_( 4(_7A? _ 7A_( _7A? _ 7A_( 5(?6A@? 6A ?f?6A@? 6A ?f 6(R^7A` nb7As R^7As nb7A` 7("<7A _ D7A_h "<7A_h _ D7A 80V6A| S?6Aro V6A| `6A| S?6Aro 9(^$6A| V6Ao ^$6Ao V6A| :(s7A?! .7A_ s7A?! .7A_ ;@R7A )s7A R7A +_v7A *_7A ? 7A| )s7A <@I^7A R7A I^7A 87A 3t7A #_و7A R7A =(R7A; :7A R7A :7A; >8;_6A@? 9V6AzQ 9V6AzQ -6A  -?6A% ;_6A@? ?077A _:7A`} _:7A`} ?"97A` 77A @@r_ 6A H6Aa r_ 6A H6A`_ kO6A@? 6A^ H6Aa A@9M7A U7A9M7A_jQ7Ab R7Ak. ߾T7A`ߓc U7A BHߠ7A 7Az 7A ?7A` ߠ7AD 7A_x d7A_b 57Az C(l6A`߬ r_ 6A l6A`߬ r_ 6A D(vW7A! |;^7A@_^t |;^7A@_^t vW7A! E0U7A! vW7A vW7A! _vV7A U7A F(j_6A * l6A`߬ j_6A * l6A`߬ GPa6A?4 n6A@u a6A?4 ?b6A۫ e6A Kh6A? j6A`T m6A_x n6A@u H(L7A s7A?! L7A s7A?! I@R7A L7A B R7A B 67A?`V 7Asl 7A L7A J0hR7A U7A hR7A q[S7A U7A Kx? K7A hR7A 9M7AXM7A_ oO7A_" ^O7Ac7 N7A`?y@ M7AhG M7A+P ߐK7A@_ ? K7A1f &K7A`ߞk _N7A_ hR7A L(6A _ ?6A@? 6A _ ?6A@? M(x7A 7A x7A 7A N(V6A M6A| V6A| M6A O0_:7A +7AL _:7AL :7AA +7A P@nb7A_ R?,j7A` nb7A` b?he7A@ߪ a_f7A  bTg7A_ R?,j7A_ Q(:7A? !_7A; :7A; !_7A? R(vW7A~ aAX7A! vW7A! aAX7A~ S(R?,j7A$ Ij7A_ R?,j7A_ Ij7A$ T(!_7A@_ ?:7A? !_7A? ?:7A@_ U(4A6AV ;_6A@? ;_6A@? 4A6AV V({V7A aAX7A~ aAX7A~ {V7A W(U7A {V7A U7A {V7A X(?d~6A 6A _ ?d~6A 6A _ Y(p߃6A@ ^$6Ao p߃6A@ ^$6Ao ZPl6A@ p߃6A`߬ l6A`߬ y36A?J |_ϭ6A x6A`ͻ d?6A@ iF6A`?8 p߃6A@ [`6AW 6Aߖ  6Aߖ 6Aa 6A  6A 6A` F6A< d6A& 6A? 6AW \0Ij7A G_n7A$ Ij7A$ M?j7A G_n7A ]0q?N7A hR7A q?N7A O7A? hR7A ^8L7A_ ?7A L7A _7A`_ 7A?Q ?7A_ _(+7A  7A +7A 7A  `(67A} X7A`?t 67A} X7A`?t a(?7A} 67A_ ?7A_ 67A} b(67A_] x7A 67A_] x7A c8M6Aߎ ;6A M6A Gh6A ߹6As ;6Aߎ d(?:7A@ 7A@_ ?:7A@_ 7A@ e(q?N7A rQ7A q?N7A rQ7A f0G_n7A߫ 37A /щ7A` R7A (4u7A`_2 Gz7A 4u7A Gz7A`_2 H 7AG9  7A  7A ?7A@?j| 7A 7A` ?7A3  7AG9 86AG9  7AW 6AW 6A@ 6A@  7AG9 X{V7A9< +`7A {V7A ytW7A? cWX7A` f[7A_S P_\7A R_[]7Aߥ <߼_7A]& +`7A9< (Q_^7A9< +`7A@72 Q_^7A@72 +`7A9< 8RB6A`> E6A RB6A`> C6A $7 D6A E6A (l7A> _7A`+ l7A> _7A`+ (7A> l7A 7A l7A> ([aJ7A@_~? {VK7AN [aJ7A@_~? {VK7AN (Gz7A D ?4}7A`_2 Gz7A`_2 ?4}7A D (+`7A@*N (?c7A9< +`7A9< (?c7A@*N (7AU _R7A ( 7A ( _R7AU (?)7AV d07A d07A ?)7AV 0u6A] _w6A`& u6A] v6A?> _w6A`& ((?c7A__c "g7A@*N (?c7A@*N "g7A__c (\?>7Arh w UK7A|} \?>7Arh w UK7A|} (6A@'j ,6A 6A@'j ,6A (_R7Al 7AU _R7AU 7Al (2v7Al Gz7A`_2 2v7Al Gz7A`_2 ((t7Al 2v7A`e (t7A`e 2v7Al (l7A_m ?7A> l7A> ?7A_m (?4}7An ς7A D ?4}7A D ς7An (7A@r g7Al 7Al g7A@r (`=7APw \?>7Arh `=7APw \?>7Arh ("7Aw l7A> "7Aw l7A> (1t6A`w u6A] 1t6A`w u6A] ` 7A`_C{ u7AG9   7AG9 7A sN _7AUU 37A >_ 7A?o ?7A_9s b7AVq ߥ7A+x u7A`_C{ P?5A B 5AC ?5A B 5A /w 5A$H _5AE@ 5A ) 5A? 5AC 07A`~  7AG9  7AG9 7A \ 7A`~ (g7AO ˤ7A@r g7A@r ˤ7AO (ς7A c7An ς7An c7A (`=7A` ]@7APw `=7APw ]@7A` 0 _n7A@_Q (t7AZ  _n7A@_Q ?r7AZ (t7A`e ("g7A@_Q _n7A__c "g7A__c _n7A@_Q ("5A`_ ?5A B "5A`_ ?5A B `^5A`_ "5A_-8  ^5AY< /5A8 Y5A_-8 c5AA _*5AK _5A`5k 5A ?5As "5A`_ 0\H7A [aJ7A@_~? \H7A HI7A@0R [aJ7A@_~? ( _n7A& ?*p7A@_Q  _n7A@_Q ?*p7A& 0?7A@\ _7A_m ?7A_m _7A _ _7A@\ ( _l7A@ߝ _n7A@_Q  _l7A@ߝ _n7A@_Q 0+`7A@ߝ _l7A9< +`7A9< -5c7AU _l7A@ߝ (ˤ7A_֠ ߨ7AO ˤ7AO ߨ7A_֠ (87A _7A@\ 87A _7A@\ P ?6A  RB6A`>  ?6A  ??6A?j ?SA6A?y aA6A` Q@6AIm ?6A^ RB6A`> @ِc5A  ?6A밾k2 %ِc5A밾k2 B5A? 5AqE r5A@b 6A ^e hM 6A`Ԁ c 6A?6 _\ 6A` b? 6A] ^c 6A` B6A? f_6A@? H6A? ]_6A`g @_=6AT @_6A ?m6A@_F <6A- !6A= ?$6AK $6A`kQ K%6AZ\ ?W'6A? f ?(6A_k *6Am -6Ac .6A_c 06A``l 446A8q 66A _ 96A? ?*:6A ? ?6A  0]@7A E D_E7A` ]@7A` IA7A@. D_E7A E 0u7A "7A`_C{ u7A`_C{ 7A?H "7A ( 7A? "7Aw  7A? "7Aw (ߨ7A? 7A_֠ ߨ7A_֠ 7A? (c7A Z 7A c7A 7A Z 0.7A 7Al .7A 7Ae} 7Al X$$7A Զ ?)7AV $$7A Զ %7A` _'7AB w߼(7A ? {Q)7A_ }_F)7A`?$v _I)7A_s ?)7AV ("7A Զ $$7A "7A $$7A Զ 8m6A? 1t6A`w m6A? ?p6A@έ s6A@y 1t6A`w (?*p7A@u v7A& ?*p7A& v7A@u 8 ?6A`e _8@6A   ?6A  l?6A  ?6A@ _8@6A`e 0q?!7AI $$7A Զ q?!7AI yt#7At $$7A Զ pF_~6A` Z6A`  Z6A` 6A?2 B6A ?`6A? ?c6A@k )?F6AP[ 5_6Ad@ (_{6Au3 B%6A  7߷6A@Z F_~6A` (D_E7A`I A?K7A E D_E7A E A?K7A`I (6Ac 6A@'j 6Ac 6A@'j (Z6Ac 6A` 6Ac Z6A` (87A߀ F7A 87A F7A߀ ($$7A? v(7A Զ $$7A Զ v(7A? (7cK7A?E A?K7A`I 7cK7A?E A?K7A`I (v7A@_H _x7A@u v7A@u _x7A@_H (F7A o_7A߀ F7A߀ o_7A 8zR7A@ 67A} zR7A@ 7Aċ x7A_sg 67A} (o_7A@ zR7A o_7A zR7A@ (>16A m6A@ >16A m6A@ (h)7A; w+7A  h)7A; w+7A  (v(7A; h)7A? v(7A? h)7A; (i6A m6A? i6A m6A? 8 7A߫ B7A?  7A? 7A@ °7A? B7A߫ 06A ?|6Ac ?|6A 6A`^ 6Ac 0?|6Aߑ 6A 6Aߑ 6A_ ?|6A 87A 67A Z 7A Z 7A_ ~7A@z 67A (w+7A \/7A  w+7A  \/7A (_f7Ar _l7A@ߝ _f7Ar _l7A@ߝ pXa7A? _:7A@_  Xa7A? r7A@ p7A`_ Z77A@_( vu7A`9 t7A_ i_7Au x?7A] y߉7A O n7A@" _:7A@_ 0zR7A? Xa7A@ zR7A@ d?7A@? Xa7A? 0T37A@ `=7APw T37A@ U87A ? `=7APw P7A _ 7A`~  7A _ 7A`u H7Al ?7Aץ d7A@ԍ 7A 7A`~ (17A ? .7A 17A ? .7A 067A ? 17A 67A ݐ7A`ߤ 17A ? (K,37A T37A@ K,37A T37A@ (\/7A K,37A \/7A K,37A (?g6A  i6A ?g6A  i6A (_x7A@ x7A@_H x7A@ _x7A@_H (7A` F7A߀ 7A` F7A߀ (7A` 7A`Q 7A`Q 7A` (?g6A? g6A  ?g6A  g6A? (7A 7A`Q 7A 7A`Q (B7A 7A߫ B7A߫ 7A 017A 8 Ė7A ? 17A ? 7A`x Ė7A 8 ( c7A` _f7Ar  c7A` _f7Ar HoL7A _ q?!7AI pf7A _ oL7A`# y7A` 7A 7A`O q?!7AI (7A`_e }.7A` 7A` }.7A`_e (l7A_8 zR7A@ l7A_8 zR7A@ (}.7A_8 l7A`_e }.7A`_e l7A_8 @a-'7A h)7A; a_'7A [_.'7A_n a-'7A |N(7A h)7A; (x7A) gy7A@ x7A@ gy7A) 8,;6A >16A ,;6A 6?6A  5l6A`_v >16A 8@6A ,;6A @6A `_:6A E6A@ ,;6A 8&F7A@}# 7cK7A?E ;uG7A@}# 'F7A &F7A _k 7cK7A?E (pf7A# rߒ7A _ pf7A _ rߒ7A# 0^_\7Aߴ& Xa7A? ^_\7Aߴ& Ti7A_; Xa7A? 0l7A`& UY7A_8 l7A_8 h<7A UY7A`& (Ė7A9 7A 8 Ė7A 8 7A9 X_8@6A> ?S6A`e _8@6A`e ?@6A`?( ?B6A@* C6A_ E6A`߰  M6A߀" XN6A`_( ?S6A> 0_ _7A A c7A` _ _7A A 3a7A@( c7A` 0 \\7A A _ _7A;1  \\7A;1 ]7AT8 _ _7A A 0Vc6A?C @6A Vc6A?C HƁ6A _V @6A (gy7A_LL {7A) gy7A) {7A_LL 0"7A?O '7A3 "7A?O _7A`_6 '7A3 @;uG7A`5S (fL7A@}# ;uG7A@}# ?`K7A9 @L7A#A (fL7AG ?xK7A`5S Pnf6A߀Y mn6A? g6A? rf6A_n nf6A ( s g6A_. wg6A_7 \m6A ?Q mn6A߀Y (~W7A n^ \\7A;1 ~W7A n^ \\7A;1 8S6A`` Z6A?]> S6A?]> Y6A?^X _Y6A_$] Z6A`` (7A` 7A9 7A9 7A` HZ6A@?` ?g6A  Z6A@?` n]6A@[? ^6A8 y?Bb6A*/ +d6A$ ?g6A  (Z6A@?` Z6A`` Z6A`` Z6A@?` h_6AVd 6Aߑ  _6AVd 6A`Y /6AF :6A C 6A4 h6A ?6A ?6A`?6 ?6A F 6Aߑ 81~6A@z Oߥ6A?C Vc6A?C Oߥ6A_^ 1~6A@?!j <.6A@z ( ?xK7A| O7A`5S  ?xK7A`5S O7A| (Mk6A| mn6A߀Y Mk6A| mn6A߀Y 0F'7A  K,37A F'7A  L_(07A`_ K,37A `^&7A  Y_'7A  F'7A  ^&7A i L_t'7A?T C'7AL Y_'7A 6 Z'7A2 Zc'7A. f^'7A+ a_'7A P{7A .~7A_LL {7A_LL {7A_S .|7AZ ~7A`l .~7A߲t }7A`y }7A h _l7A }7A@ߝ  _l7A@ߝ Sp7A q7A@0 ?r7A 7t7A`_ ߾u7A?Z# w7A_9 x7A@^Q y7A`B_ }7A 8F'7A_Q ;'7A  ;'7A_Q FY'7AU H='7A^ F'7A  (L6A? _6AVd L6A? _6AVd H,;6A ?ՙ +A6A ,;6A 96A]W 3ߤ6Au )6A  +A6A _=6A ?ՙ (tQ7A }D7A tQ7A }D7A @Z6A  Y_/g6A@?` Z6A@?` a_6Ay ^aa6AH| ^_c6A_ Y_/g6A  0C|6A`_S <.6A@z C|6A`_S 7?Q~6A  <.6A@z 8R7A`V ~W7A n^ R7A`V S7Aۗ V7As ~W7A n^ (O7A`V R7A| O7A| R7A`V H{@K6A ?S6A> {@K6A pL6A@?4 ?L6A@ p*M6A`_( N6A ?S6A> (Orj6A Mk6A| Orj6A Mk6A| (jJh6A Orj6A? jJh6A? Orj6A (}D7A`_ aP7A }D7A aP7A`_ (@?d6A Y_/g6A  @?d6A Y_/g6A  @'7A "7A?O '7A q7A. 7A _7Ab "7A?O (?@7A '7Aɸ ?@7Aɸ '7A (Gc7AS 9_!&7A Gc7A 9_!&7AS @$/&7Ay 1'7A_Q $/&7Ay @`'7A_ ;'7A@߃ 1'7A@7 ;'7A_Q (9_!&7Ay $/&7AS 9_!&7AS $/&7Ay (aP7A` __F7A`_ aP7A`_ __F7A` ({G6A} {@K6A {G6A} {@K6A @q6A`_ 7A q6A`_ |7A@_K 7AD 7A  7A !(?ԁ7At _l7A ?2 ?ԁ7A ?2 _l7At "(_l7A M 7At _l7At 7A M #(_7A '7A _7A '7A $(7A _7A M 7A M _7A %(C6AU {G6A} C6AU {G6A} &(Q'b6A_[ @?d6A Q'b6A_[ @?d6A '(F#7A O?7Aߴ F#7Aߴ O?7A (($/&7A_ #'7Ay $/&7Ay #'7A_ )(O?7A SE7A O?7A SE7A *('7A? _7A '7A _7A? +(_7A? _7A _7A _7A? ,(SE7Ao ?7A SE7A ?7Ao -H<;6A C6AU <;6A <6AJ _P=6A ?=6A b?6Ay C6AU .(_7A`? ?ƌ7A? _7A? ?ƌ7A`? /(?ƌ7A`? u47A`? ?ƌ7A`? u47A`? 0(u47A_ n7A`? u47A`? n7A_ 1@/_{6A@2 +?<}6A`_S /_{6A@2 *?<}6A?E +?<}6A߼ 3|6AҺ C|6A`_S 2(ق6A 6A ق6A 6A 3HQ7A? _XT7A`V Q7A? _XT7A߷ OT7A ?S7A ?f R7A@ R7A`V 40n7A`Z _l7At n7A`Z 7A  _l7At 58Mz^6A ] Q'b6A_[ Mz^6A ] Gq_6A S a6A Q'b6A_[ 6(5A` ^5AY< "5A@_ {?Ĉ5A _5A 5A@+ wW5A` }5A] N5A@O _5A`4 mћ5A`? 5A@ ߝ5A О5A`Q Z5A@} 5A@s z?5A_p 5A?o u5Ak 5A g _٥5Aa _5A`V _r5A_FI _5A` g5A` 5A`Z 5A q5A?f ש5A` «5A F5Aߏy O5A`h w5Ap] ?w5A N b5AnF ^5AY< 72_f7A@_ Rb7Aߴ&  2_f7A@_ H07A L7A 9_7A˯ Xt7A ]_c7A`ԏ U7A>q U?,7A=h `7A@^ O7A?fD Rb7A`X2 e_\7A`B, ^_\7Aߴ& 80?7A@_ 2_f7Ao ?7Ao G_"7A 2_f7A@_ 98_46A l <;6A _46A l n56A@H -86A <;6A :(_}6A ق6A _}6A ق6A ;(/_{6A _}6A@2 /_{6A@2 _}6A <(q6A`_ [$7A`_ q6A`_ [$7A`_ =X?6A_$ _46A l ?6A`߄ !6A߳ !6A $6A`i -6A_$ ?/6A@~# 16A _46A l >([$7A`& O7A`_ [$7A`_ O7A`& ?@Q7A?, X7A? Q7A? gR7A_ T7A _W7A?, X7A`% @0#'7A`q0 07A_ #'7A_ ,7A? 07A`q0 A(ߣa7A`$3 _d7A  ߣa7A  _d7A`$3 B(}7A= n7A`Z }7A= n7A`Z C8X7AC Y7A`% ?X7AC ,Y7A`?; Y7A2 X7A`% D@V6A@D q6A`_ V6A@D Y6A3/ pA6A 2 e6AM q6A`_ E0O7AI N?w7A@_C l?7A@;I T7A@M I(W7A`?]Q ?X7AC W7A`?]Q ?X7AC JX*67AQ Gc7A *67AI - 7AQ ?@7A`dK 1_^7A C|7A`? L7A` Rs7A* Gc7A K0[7A[Y ߣa7A  [7A[Y _ ^7A > ߣa7A  L`9_!&7A ?\ Y(7AS  3&7A ?\ _'&7AߖZ ?&7A P (7A@ Y(7A?9 P(7Am5  (7A@?' '&7A@ 9_!&7AS M( 07Ac D57A`q0  07A`q0 D57Ac N(=Z7Ac [7A[Y =Z7Ac [7A[Y O(W7Ac =Z7A`?]Q W7A`?]Q =Z7Ac PEݗ7Ae W7A  Eݗ7Ae LN7AWG cn7A?q> R?7A01 \o7A |% W7Al _7A} V7A _D gۧ7A`? gn7A ? W7Ay g?7A tQ7A Q(T7Ae Eݗ7A@M T7A@M Eݗ7Ae R0bl6Af V6A@D bl6Af W6A^ V6A@D S0N:6Aut bl6Af N:6Aut H$6A`i bl6Af T6Aut N:6Aߑ N:6Aut Y6A!U pc6A~C 6A@? 6At 6A` T6A?% ?6AU ?6Ac> ߜ6A`?=$ 6A? ?V6A? _6A? 6Aߑ U8N:6A?~ Qd6Aut N:6Aut O 6A?>u Z6A*} Qd6A?~ V0_u7A ? {7A@J _u7A ? 3y7A RX {7A@J W83&7AQ W)7A ?\ 3&7A ?\ c&7A?e (7AO W)7AQ X(ws7A˗ _u7A ? ws7A˗ _u7A ? Y0_d7A˗ ws7A`$3 _d7A`$3 _qe7A`3 ws7A˗ ZQd6A@ /7A&H  Qd6A?~ 8_6AD~ =6A`_~ 7_y6A@ 66A` ,?w6A ?#7A@ B7A`> 8_7A] 57A?(y 8N7A?^ -_7A@H /7A&H [(b(7A_\ W)7AQ b(7A_\ W)7AQ \@>_tR6A' Mz^6A ] >_tR6A' '?lT6A` /V6As B[6A`_+ Mz^6A ] ]xs6A` {6A?\  _s6A` 6s6A_ɞ s6A  _us6Aj t6A9W (u6A`?M x6A?3 ߾x6A K, &w6A@ "Qx6A "{6A@ {6A?\ ^0O6Aߍ ?76A`_ O6A`_ K[6A@y ?76Aߍ _@Eݗ7A` 07Ae Eݗ7Ae U?N7A?5q IԘ7A HQ7A 07A` `8?76A Ӽ /6Aߍ ?76Aߍ G6A@?% ND6A@ں /6A Ӽ aX_7A`y ?7A? _7A? #7A@7 h7A HD ]7A?` Bx7ANv J7A? E|7A`d ?7A`y b(r6A _s6A` r6A _s6A` c007A_v %f7A` 07A` ;7A? %f7A_v d8ws7Au \?77A˗ ws7A˗ |w7A8 Y{7A_" \?77Au e0?7A 7_ 7A`y ?7A`y 7A 7_ 7A f(7_ 7Ag ?Y7A 7_ 7A ?Y7Ag g( ?Y7Aߑ ^7Ag  ?Y7Ag ^7Aߑ h(h?Pn7A`" vs7A@ h?Pn7A`" vs7A@ i0D57A 77Ac D57Ac 57A 77A j(\?77A _A W7Au \?77Au W7A _A k(T7A  Lj7AL T7AL Lj7A  l(ߑq6A  r6A ߑq6A  r6A m(߽#7AV b(7A_\ ߽#7AV b(7A_\ n _7A?' 2_f7A@_  _7A?' ^7A?J &?7A`7 +@7A  7A 87A) 4?E7A` q +7AC[ 2?]7A߬R =7A;K @_7AB B7A`_= "?ֳ7A e: .7A_2 7%7AM 2_f7A@_ o(L`7A ?P T7AL L`7A ?P T7AL p(W7A ?P L`7A _A W7A _A L`7A ?P q(!L7A` _7A?' !L7A` _7A?' r( ?E7A` !L7A`z  ?E7A`z !L7A` se6A`_R N:6A ck e6A`_R i?r6A j6A sn6A g_B6A / by6A r?Z6A`y g6A@_r t߭6A n f6Ak d?6Ak Q6A ck bu6A`k e6A*m h6A_p N:6Aut t(@07AHy !L7A` @07AHy !L7A` u@^7AHy @07Aߑ ^7Aߑ 17A 7ޣ7A N *7A  @07AHy v(ߑq6A ? ߻s6A  ߑq6A  ߻s6A ? w(߽#7A _*7AV ߽#7AV _*7A x0 _=6A  k6A ?ՙ 6A  k6A`~ _=6A ?ՙ y("7A ߽#7AV "7A ߽#7AV z8/6A 7A Ӽ /6A Ӽ D6Aֽ (?56A_ 7A {@07A@ 77A 07A@ ?27A( 47A ? ?57A`? 77A |(7A@_ "7A 7A@_ "7A }p ~6A@_o ?6A  ~6A _6A@ ?<6A@^- 6A@?H J6A@? \ H6Ah 6A@ޏ a6Aھ )6A ߭6A ?6A@_o ~(?6A@_o 6A  ?6A@_o 6A  8_*7A@_ 07A _*7A ?*7A y.7A@_ 07A@ (77A@ _87A 77A _87A@ (߻s6A u6A ? ߻s6A ? u6A ('_J6A_ >_tR6A' '_J6A_ >_tR6A' 8i6A ߑq6A  i6A l6A ߕn6A? ߑq6A  (7A{ _q7A 7A _q7A{ @wj7A@߼ h?Pn7A`" wj7A@߼ k?;k7A@ {l7A vm7A? h?Pn7A`" (d7A@߼ wj7A@_> d7A@_> wj7A@߼ (Lj7A` $?7A  Lj7A  $?7A` NǓ6A`I _86A_ a6A`I ?h6A _86A 6A_H _6Ae ߊ6AZ h6A C &6A_B' 6A_ 6A_d _U6A_ ?6A` _@6A8 6A ?ޜ6A "96At .6Axh *s6A@?< I̔6A"- J_͓6Ap NǓ6A_ J_6A_ (.c6A Q i6A .c6A Q i6A (@07A` 7+7AHy @07AHy 7+7A` 8a6A 26A`I a6A`I _q6A _6A? 26A (26A_ (6A 26A (6A_ ($?7A_" -l7A` $?7A` -l7A_" x 6AR L6A?  6AR q6A`Q ?߼6AMM _j6A ?& ?{6A` 6A?R ?6A` _ 6A@? 6A`c  6A ?6A߮ L6A? 0(6AR 6A_ (6A_ 6Aj 6AR p 6A@" wK6AC   6A@" uO6A {z6A@? h6A? o?a6A u6A gt6A kW6A@e n"6A q_6A`? wK6AC H 6A@"  6AR  6AR 6A` w֫6A@? m6A 6A` !  6A@" HaX6A߆% .c6A Q aX6A_" _4Z6A߆% '[6A$ _(_6A _2 a6A` .c6A Q p6A߾& ?6A`_  6A߾& 6A_Β 6A@! _6A_ _&6A@wk 6Ah ?G6A@6b ^6AN ߀6A _6A`_ ?6A`߄ 86A߾& 6A@f 6A߾& 6A 6A_ 6A@f (?6A' @6A ?6A' @6A (6A_( ?6A' 6A_( ?6A' 86A_( 6A  6A  _k6A?N _6AM 6A_( (-l7A@m) ޓ7A_" -l7A_" ޓ7A@m) (?R6A_1 aX6A_" ?R6A_1 aX6A_" 0'_J6A_1 ?R6A_ '_J6A_ &_oM6A` ?R6A_1 ( ޓ7A%2 (57A@m)  ޓ7A@m) (57A%2 (?Q6A3 ?R6A_1 ?Q6A3 ?R6A_1 0 6AH3 ?6A@"  6A@" ?6AS& ?6AH3 @7A3 7A@_ 7A3 7A@ ?H7A_ 7A߸ 7A@_ 8_q7A3 7A{ _q7A{  7AV  7A@_{! 7A3 ((57A]; 7A%2 (57A%2 7A]; (3߲7AI -l7A_" 3߲7AI -l7A_" P_87ADN |L7A@ _87A@ 87A`~ =7A@?S A7A`% C7A@38 I7A F |L7ADN @ v7A`N ?Y7Ag  v7A`N 7A4 27A 0_\7A ?Y7Ag (7A`N v7A]; 7A]; v7A`N (K7AmQ v7A`N K7AmQ v7A`N 0?6A _S p\6AH3 ?6AH3 ?\6A6 p\6A _S (_7AvT 7A3 7A3 _7AvT 0qs^7AzT d7A@_> qs^7AzT l?^7A`_N d7A@_> ( v7A@U z7A`N  v7A`N z7A@U h5A ?W 6A  5A ?W c5A L 5A?C 5A?q? _35A`8 _5A T5AT 75A? S6A 6A@f (|L7AߡX  Q7ADN |L7ADN  Q7AߡX Hp\6A@^ K_6A _S p\6A _S v6A@^ e6A@[ Y6A_V j_6AW K_6A_]^ Q7A`_ T7A T7A ?R7A? _NR7A  Q7A R7A? _BS7Ar _1S7A _uS7A߆ S7A S7A@ S7A$ S7Ap= R7AJ w R7A[ Q7A`_ (5Ac 5A ?W 5Ac 5A ?W (z7A`g Ϝ7A@U z7A@U Ϝ7A`g `7A`q @07AHy  7A`q 7A_ 7A@?: w7A7 7A`& _i7A ߏ 7A _7A`P @07AHy (Ϝ7A`q 7A`g Ϝ7A`g 7A`q (_7AR| 3߲7AI _7AR| 3߲7AI 8_7A 47AvT _7AvT 7AX f7A?Ou 47A 8n6Aā ?6AH3 n6Aā ?6AXN ~26A@J ?6AH3 x]6A wK6AC  G?~6A D?~6As E_Y6A lf ]6AU E6A@I ]?6A. f6A) o86A% MQ6A? g 6A_ k?6A` wK6AC X6A@& W_56A߾& W_56A@& [_ 6A?n b] 6A_Hb d 6A^ 6A ߚX tX6A\G  6AB 6A߾& 0I?Z6A@ G?~6A I?Z6A@ GY6A@ G?~6A pO6A` *6A`_  O6A`_ 6s6A x )*6A? _6A 3>6A L6A@) 6A _. ?6A`D: _6Ah v6A@v *6A` (K_6Aa :m6A_]^ K_6A_]^ :m6Aa @:m6A I?Z6A@ :m6Aa J 6A 7m6A@C A]6A@̉ I?Z6A@ 0k;X7A qs^7AzT k;X7A n[7A Gr qs^7AzT @G?~6A ? $߸6A G?~6A .6A =6A@< :Y6A $߸6A ? pB6A ?Q6A3  B6A E6A ? E6A' F6A@_o G6ADf K6AG WL6A7C N6AP; _O6A|: uQ6A4 ?Q6A3 (H7A@W _7AR| H7A@W _7AR| (47A? !7A 47A !7A? ($߸6A ? !B6A ? $߸6A ? !B6A ? (;!7A_| !7A? !7A? ;!7A_| (/_6A M ?6A?ۨ /_6A M ?6A?ۨ (!B6A M /_6A ? !B6A ? /_6A M 8*6A@B ( 7A` *6A` 7A_ 7A@?٥ ( 7A@B ?6A_ O6A`_  ?6A_ 6Aj '6A &:6A_yi $6A?X _6A@hQ 06A+ +@6A  *߹6A ? D6A? C?6AE D6A?d O6A`_ X ?6A` ?6A  ?6A?ۨ _6A 6A_[ $6A` 6A 6A?H 6A` ?6A_ 8?5A@ 5Ac ?5A@ 5A J5Aۓ 5Ac (lǥ6A { n6Aā lǥ6A { n6Aā (;6A  6A> ;6A  6A> (6T$6A &6A 6T$6A &6A xW_56A 2w$6A@&  W_56A@& >_6A E?6A@ =_6A?p L6A R߲6A@?g >H6A`_˓ =_ 6A_ D"6A`_u +[#6A _ 2w$6AU 6T$6A 0M=6A@ B6A M=6A@ 6@6A@ɢ B6A Xx7A@_S K7AmQ x7A@_S #7A@ ?Ր7Aܜ _7A l7A`| 7A_Hs 17A_ K7AmQ (H7Aw ?v7A@W H7A@W ?v7Aw 0?6A T6A_ ?6A_ 6A  T6A @;!7A" R*7A_| ;!7A_| $7A`S `$7AT (7A? R*7A" (6A S 36A@3 6A@3 36A S (uߍ6A_ lǥ6A { uߍ6A_ lǥ6A { 0s6A@ ;6A  s6A@ k?6A` ;6A  ( ?:6A_S M=6A@  ?:6A_S M=6A@ (?6A 6A@3 ?6A 6A@3 (T6A ?6A T6A ?6A h&6A@u .:6A+  &6A ")6A U :,6A+ +.6Ay -_B/6A`_ ?w06A_ h16A_ #߰26AG 46A? .:6A@u :^6A ߻s6A ? :^6A `6A@_ `6AW q`6A `6A? _a6A ߘ e6A _bq  h6A`߮d ߄j6ApS tk6A_E wk6A0 l6A`" n6A  ߻s6A ? H 7A? 7Awq  7A? n7A߁ 7A@_h _}7AU ߅7A_ 7Awq 0?v7A? 7Aw ?v7Aw 7A7 7A? (R*7A?Ag&37A" R*7A" g&37A?A Xk;X7A?t7A k;X7A HPY7AA Y\7AO !b7A` g7A?+o7A` _s7Alt7A ߎ 0?q7A H7A@W ?q7A 7A@ H7A@W _ #6A?w'6A  &6A?w &6Aq%6A`Qv&6A 6h'6A@߫,'6A`ߛ'6A?%_$6A _Q&($6Ax ?#6A ? _ #6A # #6A?C 6T$6A @_7A?v7Aw _7A7A?Ju7A`_[χ7A L?v7Aw X26A6A_ 26A6A_?6A@?wf]6AFG?6A`96A.6A@?6A_ =^6A6A_( =^6A~`6As_a6AGd6A_w?e6A0!m6Ahߴo6Azs6Al~w6A`ߛUy6AJz6A JB|6AC0~i6A_96A ?6A`P 6A@?] #6A 16A ̘6A  6A ߱{ ߓ6Ap6 6A_( j;8A@u ]AP8Av(Dj;8Av(D={B8AӍ*~8A@}^8A·zx8ASF[✬8AL7r8A\m8AHk^)l]C8AE mt2'8A"q#98Af}/8A!39Zjg8A+78Ah؟ <8AMjbu98ADM SS8AdO*Xw98AA >]8AukS8A 7jf'8A 4X8A?L\W8ARW[r=H8AuatIs8AzR\[*~8A q:l8Ae ]AP8A@u 8DX9AOc׌9Ap DX9Ap hYq9AG S 0Ћ9Aj`c׌9AO 0c׌9A^QY\Z9AOc׌9AOUN{9AZ8v\Z9A^QY ',.9A xQ9Az ',.9A]@N9Ae/L 9AFBz9AtINȥVB9A$o~~A9A xTI9A3zzm9A/CZ/\ g69AF&FR&yʼ9A *ͮGi9ABmZ(ަ"9AZ1>9AiD89AZկgP'J9AUկgP9A먑E_9AEN9j9A?+9%~9ANŪ7]29AV,'_}9An9AQ5h=Z9A,n |9A|^JJ9A/M0+j\9A}Ov't9A+EQ4t9A Ұl-Uu9Ah]w9AGpO^x9Al|clx9AxbѣWy9As9pz9Al:K z9A : X#}HH8A0 sE8A@u ]AP8A@uS28A$sŧ8At #}HH8A74$58Ajղ$۫8Ar!}C8AXsE8A0  7yQ6AE=H ?6Aa7yQ6AqpƂ6AE6A@7u6A"=3 Y46A{+n#Y96AM%i-6ATƮ6A@W<*66A@R&;o~6Aa+})6Ank}Vr6A]`&:6A%ZQ6A+:s}6A@yKL8<6A#V @6Al }ĦJm86AOO9kh6A@K'QK6A@21ʴ5-6Aco6AbHw6A9?, 6A.o6At?`v-6AAg9?]]6ABCX.(P6APL:6AsF3|t!6ANf Nv}6A y_ܟAf6Aoyd6Avw)~.i6Af 6AHkگ1!6AV26AS 7F6A^C|F6A{eSWѝ6APv/Wѝ6Aw}>_f 6ALH((H6AC`Q~6A4V'Q)6A a=H ?6AMb^X~6A []6A/K~6Az3 6Am1MrzwS6ANqk d6A)z!KTٶ6A+c BH6AJr6A/lu6A`K6bS46A$"?6AF i%1E6A>/]6A赶zX+6AB"k+r6Ar JօH6Agyx6AF6ms]6Aa#6A'Jt,6A GSӫY6ALvZ.*WB6Am{z(^6AµuZE6A=UD$6Aӯޫ 6AL6A{]"6Ad[-E6Aچ1|6A3 vvφ6A0WZφ6A|<N6AdsLP*6Aw%*j6AWA ¾6ABk,6Abub7ﻠ6AGR86A`By#X326A6A]Vc6A 's%6Al6A}GV[6A4dٯw6Ahfnp6ASIʀͰ6A~r.6An{m6A  Z}9Alv5O9ArBQ Z}9ArBQ9mړ9A7qRf9AG=k8̷9A_#X u#Ⱥ9A_ M29A Oc/(9A }xnt.9Aȏi4X39AZ bqk19A`_Xv9Azm?9Ah*b8u9AF\xu9A6~F9Ae d}9Alvއr9A*2Y'9AxgOƒ9A0: xc9AwJlz5O9AEv X x#Yp7Amc7A! "( x#Yp7A! "P7A&]8$t$7Ah0Ka;7AB٭uӻ/7Ad0{7A>r. ?U7A(C ×7A)x7D7AVRZ}4F7Az#$v7A3x{`@7A 1^^ԛ7A*,.Pp7AӦ-hF7A07A74NН"ۼ7A2aDn7A]. Ql7AӟH!V7A`9g*Ŭ7AWN^@7AR7A@Jhn7AfGGŵ7AI!Emc7A ԠU8A0.w9A0 sE8A0 zq8A L{8A0En8A$VԠU8AvFPH8A{1k)b8A(Mb o+^8AaHKi;5˝8Ad}0paw8A&( 8A࠘C#M*8Aemk"8A^n5lEL8A;N~8Aa(8AE0j|48Ao|"8A5%L58A)*aCf`G8A['8A>˥C8AV 8A^6VW`8AW٦r %9AJy 'P9A4jL6 9A: T8A2 .w9A0 p߅D9ASNr޺9A$; ߅D9ASNh]FE9A 9Auej 9At!U$9AuPZ9AJ:EPI9A.;<g-9AbHm,9AbN̘DsHE9AR~r޺9A$; i79ArCmGni9A3ri79A3rKqf9AW5x ѻץ9AK;#q9ATxw[*[9Aч:,^9Aiu*"9A|~ p9A?ZYfd9AĉkP9A4qK9AL\]g9Ak([O̸9AgC[xѹ9Ay74Ƽ9A˄%9Aǹ'H$+9AY\w+V9Aq8tni9AZ9ASgbӼ9A ƣ9A[$<t9ArCmG ` Gk~9A3|5ƛS9Ae6Y Gk~9Ae6YB-09A%i! ;r9A^!dY hI9Aڥ%X'9Agr~Ɂ9A @ R9AUG/O9A9 5ƛS9A3| XE^(6A=6AA]*~(*e(6AA]*~=@*6AP^-×up+6AaTQ +6A fxֱ*6AFfM3sIH))6AWDyX.(6As|E^(6Akyn/(6AFiV(6A)(+6A`I;+6Aꠖ}P k+6A!{+6AFVxh%Nr+6A &sȌ*6A? +(*6A+p|~8y(6Ad4P-W(6AIqW8)6Ai%[&QW+6A;cHփ,6A'Nbam06A7C()36A@;I@k k46Ak3yVɗ56Ai Lt^di56A@ ɦ`T56A*" 66A@4d, ]876A@0h86A^շ$r?86A@:gX:6Azpi:6A@\q c:6AW٠^e;6A@bė%n;6AJ;6A/^<6A@fT=6A 0v7Aj^L%7AZ>~v7AZ>~q-7Ac%^L%7Aj {7A{lR8ADQp6/{7A{7A2T:r|7A~udD7A@l2?z7A@)W(V7Al- 8AE;Ҋ_78A29fX8AaHanb~ 8A/Ct+ 8Al^ꏷ8AoEMA8ADضY8Aj1Kv=8AY{zI8ALt8AC 9A鴴SC 9A鴴SЩ9A"9Ah^kKx\Y9A@NݮzS9Ar:>9A{a߀9A@F 8 AQޔ9A=F9AU @Qo9A@L}&IFCGs9AcQo9Acrq9A~P%®nr9A C{Mr9A@-wIFCGs9A@L}& !P"V9AKϓY;͚ l9A@nt!P"V9A~~ ;X9Am2Iۤ?Z9A@])Κ;d]9AK+N^9A@صÊ'_9A@nt fa9AJTw/a9AB|>! =b9Aԗۏb9A^}2Nc9A /LXwc9At!hMd9AbjI:e9AVv >m g9A3$,Zh9AW/vͳj9A8L|{D9A@=Mr E9A@9TLKt F9A_B2VF9A76)p G9AHq"r$]QI9Au x/߇K9A>ډ)BO9A{DX2R9A@,*C][R9A<4kǕuS9A@J0*2^S9A@ x}`T9A΋.(Z|U9AVbZ:U9A**U9A[T !P"V9A~~ HO`B8A@@YDKG8A@+&O`B8A@@YDu˜C8A@8AmkE8AE&0šUF8A 2#2F8A@N[KG8A@+& 8_Rg&9AjT(9A@AWSc_Rg&9Ajs~CL'9ALcg}(9A@5̓eT(9A@AWSc 0_Rg&9A@3 3}&9Aj_Rg&9Aj,&9Aq3}&9A@3 8F$ n9A@˓ؙQ7p9AكF$ n9AكJVV}o9A@s<Fp9A@}鏥Q7p9A@˓ؙ 0Ȁ8Anqmؘ!k8A>Ȁ8AnqmB-y8A@36ؘ!k8A> `?}w8A@ܕe Ȁ8A@P, kHw8A@P,Ezw8AN?}w8A'2^ y8A@ܕe {8A@ы_~H:|8A1mk~8AIdS~8A@NȀ8Anqm XȀ8A@g'"@28AnqmȀ8Anqmagw8A@K4 b8A i8A$58A933-t>8AL!5h8An&;28A@g'"@ 028A@g'"@=N捌8AM 28A@g'"@S;~W8A4/D=N捌8AM 02;9AաSB"b֔9A!2;9A!y@”9AAQA"b֔9AաSB 828A(T` d08A@g'"@28A@g'"@ÃPG8A@߫CB5:8A;fH d08A(T`3}&9AAf+lE9A@3 3}&9A@3 Ya^'9A@*33W~w(9AsNԓ)9AP W},9A@ٴ~4-9AWm:om.9AdB[t59A+5sX89AKKV :9A%阰,Hj;9A"ۿt<9A@gZݲ=9A=8!?9A@A?9AרC9AI>J{D9A O% ;(E9A ~*lE9AAf+HDnwq9A@x})M t9A@xDnwq9A@N.J_|l9AM b2m9Aiwm9A"h@w8A@g= 8A@3w8A@g@tu^e8AhU7fm8Acq8A= 8A@3'݃e9A@~.k}{"0O9A;>ez 9A;>e .住9Av#<|9A@ȰA:9AȷT'݃e9AW KR9A!hfM99ALqKMjyX`9AE/Kÿ9A2o9A J=69AQ>-A`9AHtS9A怗ANԁ9AW xV9AQ,49A0)dql9Akmm9AW$9A=} ;9Ak? 99A@&9A{Ս2/wb9A@*"HV^t9A,R !9A@!h%k#49A@ aZAj$9A[ 9A?{Uo9A=x|=l9AFI"0O9A@~.k}{P \9AG+`f9A^xJ܀9A^x \9A܁%R~9A P c%9ACɓ9A@"vA`f9AئT9AG+0:Og9A@bNI&bi9A$=e:Og9A@bN=Kh9AI I&bi9A$=e/ 9:A)-52=:A@Ӎ/ 9:A@Ӎ,:AŒc)W:AƏu&:A@Ke3b!:A"EP%:A~e߸!::A V#?::A+irX;:A~>2ͪA;:A@l;*QJȃ::A.$b&9::AxykWW78:A >W7:A=m։FK?87:A-1KG[= 6:A6ǵܗY6:A_[8:A(+}{9:A(}̔::A3bx<:A@ S!h<:A V=:A7\D$52=:A)- P(x 8A+j04P8Al+,(x 8A+jtq#8A@azQr}8A5="8A@M! JN8Al+,* 8A@@M04P8A 0Dxߠ9A ݧ`9AB#Dxߠ9AB#UUL9A}ݧ`9A  #XJ8AGLF1*jf9Aʒ%4F39Aʒ%jf9Aa-GE9AYr20Q8Aa.z;8Ay6ʲP8Am/^@D8A@ίCr8A@I8A%E4&RO8Am^NE{8A@)Ċ8A H[@8A@\«Q8A1/A8AkQ?u8A҈&$8A@>>ͳ8A; &#XJ8AGLF1* 8R,%88Aݒ>+#XJ8AGLF1*#XJ8AGLF1*ޙD8A*p;8A@+R,%88Aݒ>+ h8AK*R,%88Aݒ>+R,%88Aݒ>+8A0Q8A:a8F)7 8AEU+q8AIcbM58Akj6)8AaLygi(8Amoݝ78A@~͘zCY8A2L#R8Afǝ~ 8Au[e*8AD Ch8AK*804P8Au? h6o8A04P8AQ8A@8A 6 h6o8Au?]Po8A%لh_s8A@FBEh_s8A@FBE4ur8AyY @q8A@.mq8AIL }]Po8A+4^p8ALTq8A@2R3q8A6&3k(q8A[[i $Eaq8A &e0r8AH"dr8A{G0Mr8A9n4q8A@Twq* ‹Rq8AVC2.q8A4:8AY@B8A@&z?E8Aߏ~BiG8A[@5?H8A5#Z?L8A@P:8N8A8>ڗN8A@"(*^`R8AV>=ޚt[S8A n t|T8A XoM;U8AzϗV8A{l W8AwڥUAX8AѸJe)Z8A@$^O^8AC?QqY`8Al=c8A@Dbd8Ac|@לe8Aizt3mYf8AIzk g8A%5`oHi8A?OݱX)k8A@$(SBB m8AJE[Fo8AEJ'{5HML9Aݝh9AE+ML9AE+Ԉ9A99ASKԑ9A@mZ1CaM9A*^4Ԉh9Aݝp3kdG9AqFO~:Og9A 3kdG9AqFO~AwtG9At>iqobH9A1#jO9A@q[R9A#8 cP"hU9At>b9A|c9A9d5 ;bd9A6@e9A F:Og9A@bNX6j09A)j){o`9AG+9AG+6j09AscBc9AVx9AV+9A@%)l!9Am> ,[9A.& {o`9A)j)01D9A@r`&&+D9AZ&+D9AZAD9A1D9A@r`&P!8A@n@h8AK*h8AK*j68AJM "N8A@6Ħ;I ,68Ay<]8A@}F8A@Q0!8A@n@H9}69A+u='u3>9A@ 129}69A@ 12i`%89Aʹ?":9AbaN<9A.KdYWBY=9A4k6u3>9A+u='8~jf)9Ad+>*B9A6$~~~jf)9Ad+ )f9A]1IZ9A>*B9A6$~~0 [ڳ9Af:"<&[9AK]qy [ڳ9Af:Lc9A?"<&[9AK]qy@ChD9A7xF.ID9A@/)F.ID9A@/) D9AĻY*B9A;Z.-(9A6$~~ >*B9A6$~~ټqq9AKƞ 9AeuY9Aebc9A@w'-Έ9A^1sI09AsR4|@9Apu8-(9A19A@%O_ȱq9AS} fӝ9A;Z.0w.9A@p=6__g9A^鷯w.9A^鷯M9A7%-6__g9A@p==6A6ѱP_6A;=6A@=6A8+v?F.C:>6A VXP@6A@iZۆB6A'AsvB6A@;s+bC6A'їSmD6A@\֝€D6A< 5E6ACE7GԍCG6A@*':G6A@XՋcF6A@y-qF6Au]Ak^DG6A/aِH6A6ze>G6A@%*Q^`G6Aix\&F6A@8;_mE6A.=}G6A(NF>H6Ady׽YPH6A@حZH RI6ANo,I6AèK IJ6Ab52KAK6A+'D ^N6Az5\XhO6Aj^&]R6A%1K#R6A'k}Mz*U6A@,+cڝeV6A@KCU6A/߷U6Ae2iJoV6AqV6A' W6AtLX6A5l di3X6AJ1Y6A<D MY6Ak i MY6A uh/>Z6Anc\6ApkӪ&]6ASoy>i^6A'S˳8^6AuѱP_6A(yF+d^6AL>9]6ASDq<:\6AXϝM0[6AZ6A7Ֆ8&QY6A5sVW6ARІZ V6A@* 谅U6A~=\S6A6h~DT8Arۄ6;r8AUۄb8 ~DT8AUۄb8bU8AħL5 8A@(Z_#4 8A@ρOEm8A1joto8AR) j8AZS;N8A@zPsvTi8A[I6;r8Arۄ06;r8Agf[7j08Arۄ6;r8ArۄB{y8A@)=ij08Agf[7 P D9A@(75H9A< D9AZ9A^!?/9A0' AG].9A^!Uۤ9A@fZ9A4 >Z9A!6g9A@>9A@tLo67jB9Al] >>9Al] (XA9AQ *o67jB9A@tL%@j08Apn6 kP8Agf[7j08Agf[7~?8AQ\'q,"8A*o͢8A@1 kP8Apn6&@o67jB9A@tL75H9A@(o67jB9A@tLB9AİFt{/D9A``7DHF9A@D!75H9A@('0zbf9A-̊+-'9A@'wzbf9A-̊cG9A@@&y+-'9A@'w(XL;8AYOj08Agf[7f8AYO 8A@l^ʯ8A {me8AgjL;8A-YYj8ADX$k8ADw%j08Agf[7)0tZ8AYOf8AZftZ8AZfѨ%8AJf8AYO*0 8ATӽ< 8A@vGF 8A@vGFŽb8AbѨ< 8ATӽ+0_k9A?K}9Aԡ˛K}9A?D 9A@_k9Aԡ˛,@19A۩l9A"b@V19A۩HUΕU9A$^Jy19AZͿGe9Ag l9A"b@V-019AWKe9A۩19A۩ 4]9A@5WKe9A.`< 8A*>G:8ATӽ < 8ATӽl"8A 5Fk8A(+B8A098A_hmȘ8A@ݍM -}8AF$8Aƙ/G:8A*>/0 9A@E;Y .`S9A D 9A D x 9A2!~: .`S9A@E;Y 00.`S9A]֕*9A@E;Y .`S9A@E;Y t69AgBe֕*9A]1`(Ik o:A@r?`û2:A@) i:A@r?`W_:A@5 û2:A%mEd!:AϮzK*%CC:AE, {}:AeќBD:A=rs:A@ tz(Ik o:A@)28֕*9Aݫ3Z-q9A]֕*9A]NG9AN^dAM]ʌ9A93%0Z-q9Aݫ330dkn9AT[@0rh,r9A(,*dkn9AT[@0adn9A@&0rh,r9A(,*4!8A@-Ik 9A@n@!8A@n@|8A@&``[]W8Aߎȶe#l8Ab@kZ8AnWG6|C8Aw28Ao u$;۴8A@$S&gc8A5!~v8A4_7WW8A*)D̢8AU%8AR8A@ߓ.(`8Aܺwj7@8A}z8Aml):|8A*sFqǀp8AP)z8AZ=c@$8A@e+ “8A@65 8AWѻ8AXU{8AQ;c-΁8A91>dJD 8A`tõ8A@ c( 8A@޹xZ_ʅG8AR^x88Ať-z)]@;8AED8A0 [Hɺ8A1xp q8AW꿥L8A0l8AC>NJXS8A[KDϽ8AQp@Sfc8A@ t938T8A@䗬!q8AAKZ6Gt8A9S2T8A@< 8ATӽ=81I*J9Ay jIKE:L9A@ G11I*J9A@ G1IJ9A<6r8|^L9A@#ITFKE:L9Ay jI>0KE:L9A2T߾qM9Ay jIKE:L9Ay jIUM9AgL߾qM9A2T?8KRUm9A@ Ak 2r9A@AfKRUm9A@AfY79o9AT0ieFq9A2j 2r9A@ Ak@8߾qM9A@x_)R9A2T߾qM9A2TʾP9A@|N&lFQ9Ahvu_)R9A@xA8 Zr9A@-qX؃v9A@l Zr9A@l~mt9Aa/nӯlv9A@SpX؃v9A@-qB@_)R9A"53`9A@x_)R9A@xrÙ_R9AS:u|5zgV9A@G"kX9A3`9A"5CTd"9Ap 9A@7oIRw9A@7oI 9A@Z5Nb 9A0UD Eh9A A\L9Aaf_ p9ARަhf 9A9wP%9A2Kf9A!m"x\v*9AI wI9Al?}l 9A2k+a9Aznhۆ9A@(X h9AE k$Z 9A@;^A09As ~C#X9A{]Td"9ApD@5yS9ARAu˴9A~5yS9A~L70|9A@S U9A~V19A2W˴9ARAuEPh엹+9A@pgGzh69A;9h엹+9A;9/w,9A aTT-9A@\+ֶ19Amxu39A,HACF39A) zh69A@pgGF9A<=ish2%9A@z4-9A@:F9A@ ᆴ"Z9Aҁ @B9A.P 9AXY79A >޲l9Aq/w;9A8Beeh9A@:!1l=9AF9A$59A[p 9Ax(0H9A!DE39A+pBhh2%9A<=isG8pi9A@dIvG2/9A@ewtrpi9A@dI`;K9A}Y[dw^v9A\rvG2/9A@ewtrH0ޑ9G9A,Y]J9An&ޑ9G9An&GH9A|,Y]J9AI@,Y]J9A&R< Q9A,Y]J9As\J9Af_wW[K9A@Z ,j2SF]9A&R< Q9A&RjK@39AxĎ֟RZ;9A@Q39AxĎ֟O6/59A5~ 79A@ J=>W=89ARZ;9A@QL0/!9A.?Xpi9A@dI/!9A.?X9כ9A@Spi9A@dIM@|Dv@9AzZgEkF9A-|Dv@9A-]C9AЌOD9AaFXLE9A@`dEkF9AzZgNh~uF9A셚9Ap Td"9Api9ARwlT9A@͔Dy9As_~uF9A@ssT!u9AMGV9AԴ 9A@yO8E9A@Pa셚9AOP=99Az|Dv@9A-=99AzM:9ADx/5֧'j=9AT-Q>9A@pO&s&g>9A ka?9AP@|Dv@9A-PH2SF]9AŐ Pbbq9A>j2SF]9A>jUSg9Avލ |h9AxH0i9A@Cd׳l9AF2Pbbq9AŐ Q8>I9Aq$ƹ.O9A! >I9A! MAJ9A?@_[s&L9A@Aƹ.O9Aq$R8hM=A9A2Qu^9AryhM=A9Aryu^9A޺u2+9A@5]???9A2QSP'9A@SGUV39A@b'9AI'*9A幢",9A@Sc$09Ax5Ӕjt19A@bltq19A3|GUV39Ah&T05Vt9A`G,av9A ŊK5Vt9A ŊKu9A*Ӷ,av9A`GU039Az=99AxĎ֟39AxĎ֟Rdz69A@d=99AzV@,av9A>hل<+k~9A@,av9A`G#w9A>hل4y9A@JF_[z9Aw6<+k~9A@W8K(.9Ai939A@,, K(.9AiX19A bYqu29A89 939A@,, XXɁOZ9Av}^r9A@pTɁOZ9A@pT\a9A@0# d9AJu3f9Ad. !h9A\Ok9ALm<xm9A@Vz}^r9AvYP??9A@gMɏξ9A2Q??9A2Qs!\Q9A)o`e9AAqPn¸9A@gM^9A2K "+/Ҽ9AMڥɏξ9A@(h3Z0=99AI2G<9Az=99Azf,<9AM G<9AI2[H&QaY9A3@09A5`9A5`D~9AR H9A:ISY9A@+"Eq9AF)&QaY9A3@0\8@#(9A(X,7v.9A.@#(9A.F^ *9A0+9Aͷ7v.9A(X,]0}^r9A}Uv9Av}Uv9AYu9Azb}^r9Av^0oR6179AP=#\99A4FoR6179AP=#a{KH89A6 \99A4F_@]*9A@6EM9A_ҽw]*9A_ҽwă\ׄ9Af}p^9A> 4j9A@U 'EM9A@6`8k"9A!gJfbV9AC<&!k"9AC<&!K9AV=(9A#?-fbV9A!gJa0(>9AztzMNA9A,e/(>9Aztz7E؜A9A!0MNA9A,e/bX #7I9AqqN9AԑpqN9AԑpN9A@Pr"_N9A@:g}ǻM9A@dVz`L9AGv 2pK9Aql>I9A. #7I9Aqc0g/9AXmf%9A@v g/9AXm69AX>f%9A@v dxdB+9Aw^M;9AyP dB+9Aw^>Τ-9A[ȴ .9Aѻ.P09Az$/IJ29A,2w)39Azl039Akd 539AMk\0b49AyP[P49A@XPQJ_n99AV/M;9A1keH놞9A@Pd)9A# V놞9A# V}ݠ9A@[.n-)9Adڤ9A@͘(ݡC!9A)d)9A@Pf0ٔ(2+9A@ъQ+79A[ٔ(2+9A@ъ]9A@ڢQ+79A[g05x9As!Rf9A5x9AZc9A@(#ls!Rf9AhXm 9A@ih"9A@mm 9A@mʲf9A -@9AЊD 49AMҠ9A!9}9Aݷ'aV~$9A?2 h"9A@ii@T!FP9AsIT.|X9ABT!FP9ABVIQ9A-Y|Q9A$TV9Ab/:.|X9AsITj@Q+79A'M{9A[Q+79A[Tm9A@ 9A5r-9Aǥ,9A8{qxǥ,9AhW9A8{ ǥ,9A8{⹢9A@*}-P9A@ۥ^99ANy̿9AF[wb9A@IVܫd~9A$Q,=9A@k9AX q9AJ*:a9AG9AhWr@ [ 8A2Y>)n8AG [ 8A됚=_"U8A2Y>Ey9҉8A@J9g88AN ")n8AGsUi%H6A@n[2,mg6A6.\S6A6YS6AHqUGLwR6A8 Q6A@猝(.Q6A@˧ r:f {bP6A|lR+AO6A5M`Hd6A#K&jd6A|^:Yd6A@h d6A@ 2,mg6A@n[tX߭sJ9AR>;KV9A@YPL߭sJ9AR>;K9AؠٻҴM9A@  EsN9AW;-}Q9A@kBk >B #R9A#"cnekU9AS;KV9A@YPLuHQ(9A]a7v59AxQ(9Ax8S]*9A^|4/9AɌgִf329A:%e49A@ccIQ7v59A]av_9Aq+9ǘ|s:A2zP_9Aq+9 j9A b9A@Lj '9A4*|@9A~h%#f9AsP:iA:A+ e:A_tdg9A@*{I:Afu_%}:A͓}5,[:A.϶:+s:AT0&(:Ax}0Q:Aҷ.  :A@TX-#vfv :A  Lo:Am'+q:A@r'^D<+:A Rǘ|s:A2zPwX,r0P9A#XV9A,r0P9A{US9A"6dT9A~>3?v_U9A@~ A?DU9A!'@X9U9AwuE3p-V9A#XV9AxH9A+/*9Av>V,9Av|9A@,oH9Ad߅9AŴ>9A@g2 9A@139A(xRC-9A@/9A@`Bj9>9ABz9ALiJBb9A|Z2p%r(;9Af>O9AaaĂgiPl9AM*9A+/yX CZ ,I9A#WّǑP9A3TّǑP9A3TWKN9A(<+[M9At%~iQsfK9ASﺰI9A|M픭6I9A@ CZ ,I9A4KI9A#Wz~(68AqLD o8A@;v[~(68AX *` h78A v~:8AqLpu<8AjrLB8A jDG8Ar!rlE:L8A8tDV8AH2=.Z8A@O'1ж_8Aor6a8AK{_kXa8AgSEA4b8A5B/h8A~fL.9A@Oh![.9A@ 09A[V~0w8A}20O` 68A7w8A7tv/78AS'O` 68A}208V 9A?Sh5%v9A!kV 9A?Shy҈9AWKM#9A֜X|5%v9A!k@AuM39A@3q.:59A@u(nAuM39A@u(n49Av c49A@H̀"hl49Av݁q.:59A@3@$@h#9A@fC.6۫'9A*g$@h#9A*gʧ%9ATf(MvU֩&9A@s]լ#&9AB.6۫'9A@fC8v/9A ǨV 9A?ShV 9A?Sh!첪9A@qx^ #9A v/9A Ǩ@̦vn*9A6/d`zW,9AMq̦vn*9AMqTA*9AAuoeL+9AO ,+9AYMd`zW,9A6/0H v":A@|2k)9:A@qH v":A@qQ:A0k)9:A@|2@`.9A@ 9-˝9AjE^y`.9AjE^yxT9A&TӖљ9A@氶<ӥ9AHLq-˝9A@ 9PMjZ:AS>I $:A@|2k)9:A@|2MjZ:Am^po:A"'Qd:A ]*Y:A@;0!:A;U $:AS>I0ܾ8O9A@O ϙ ]b3Q9Azejܾ8O9A@O ϙ3DP9A)j ]b3Q9AzejJ<8A@۪j]8A@hNZg8J<8A[Oϣ8AW8Aa, |8A@bK?<8A@ aۥ8A@x 8A@ 揍p\8AZ8Aŷgݲx8A@PC} V8A@zo 8AhvZHӨ8ABBOFvթ8Af+v|"l 8A@U<]J8A@b'8A]X6)=Z8A]X6?̱8A@HVk8AIvŃ!8AU|FR8A3C8A> 8A.Ǹ0@D8A@qttX8ASҲm98AinI8A@hNZgњ1һ8AOhH[Xy8A,j38A@aof8A\;OiD8A@*4pԉ8A"Čίp<8Adk88AzF8A*4Y 8A@V`?,x8AӱH8A@te؞~8AC 0J8A_ԪR8I8A@ԲA,`S~!8AAhI`8A&{e8A>X8`8Aok8A`VB8AܷhP8A@LI8AԲt{٢8A}'{O 8A@۪Sa8A@ٷIX8A?j]8A2hMv@_{28A)XX8A@3_{28A@3_ R8A_R8AV8A)XX8A٪pC)w 9A@\9A @+9A @C9AzTj)9Ap TeW9AVX t V-9AI*n9A霑n9Ala5 P\9A@CؙRc9A۫-k M9A qSڝ}9Ar(D˨49A ߽v˵#9AO9A.a%I^9A?9A@~c7!S+9A@L9}9ALY'V9AjNfEND9Au9AJ9A@ {LNi,29Ar]\ 0w9A*sӰ9AG?^[9A#tc\ 0w9A@}&9A@.*D9A@^2 vK9A mo99A? 9AU#Hb- 9A@8_S$ 9A39ce1 9A@3~.iF) 9AD4ǒC)w 9Az  9A@5 P) 9Ai(3a 9A@wy=* 9A9ڔݭ4v 9A@Pj1}F( 9A@\099A#0V9A+)&9AyךO9A"(H SR9A@͸EH2Q2X9At f9A@0,89A@\3)6 9Aad499Aɭ38Κ6T9A@[3+mV9A@ܦ_ Κ6T9A@[3+T9A@g& BhU9A@q%mV9A@ܦ_ HU 9Aɭ399A99Aɭ3om`!9Aݪ. ^~&9A@:z&Ynp9Ax H 6AY @-P6AD%R-3z26A,wn4Ofp6AWAj3J6A}\Cz/6AXd16A4aUvL6AtlGgp6AVw5~.I6AP;jZKr6AqL4n,&6A@`~T6AXM 6Af\bEjv6A`V6AdS r(C6A@#!*۽6A=L6A@4Fi6A)^PonB6A@_aqϳ6A@ @=6A@^)7`6A&&p-%6AIgsh6APH³ 6A`Xd2&?*6A^.I76A@8i>R6ARj6A[S6A`e@6AŮj/k6A_[k4Lg6A`GSpm9N6Acr[+;6A`.17zjG6A0M,nP_6A`'{ '6A DC 6C6A,6A iQu࿭6A@6A{O6Aڔd6A}j*k6Ab$'6A@I.?PM罶6A@}Ll6A,_[M罶6AL %iov<6Axa6AyS\ߣ6A`*#x X6A#e@0IU9A@D!ޙOȌV9A;hIU9A@D!ޙg7:V9A@AIOȌV9A;h0JQ9ABReVxS9A@|sJQ9ABRP!8S9AueVxS9A@|s`h8A"ճmt8AO_ h8AEu8A"ճ%cY8AMj=n08A@I68A@qBom/z8AO_9XE8Ayoر8A?-mt8AFH?vM8A7R8A^7?vM8A7vN8A@O8A_f?O8A:P8A@bR8A^7@'8A$5#8A@@*'8A@@*z'8A[~-8A4Ӟb8A6#8A$50_{}8A@_Tx8A@x_{}8A@_T3]ʀ8A#x8A@xh2,mg6Axk)>6A@n[J2,mg6A@n[fj6Aahk6A;o]|nm6AWxw*m6A|+#l6Auyb6A5"e6A}lT`k6A L#o6A>6m6A@r=yS6A`"BI 6A@` Rݚ(Ȧ6A@X)>6AxkX#8A&Yqǯ9A$5#8A$5Qֿ,8AX'7K3{'8A#q- _D8A@=,  9Ak5rx{9AρvZw9A.qǯ9A&YHM8A?V8AM8A`S8A?S8A?;?T8A@,U8A1V8AxOFs:AS>I $:A@@F OFs:A@@F"E:A(~ :A R;6Y9:AS}<b|:AJNzށI8[9A:76qǯ9A&Y[9A:76uȺ9A` (3P~w9A id*qǯ9A&Y@h8A DIk44g8At5h8A DIkXj,z8Aמ_N8A`d_Θx8A>l G44g8At58jɞ/O8Aȶd;D8A~}jɞ/O8A~}"ԁ8A@/Wѽ8A`;D8Aȶd8AG$x]9A:768AG$?(I9A`Ǭѳ 9A oml 9A>KinJ9Aź\`9A6 TF9A`/QW<x]9Atu9A*I,9A˕D 9Aش)-8I9A@_cQ睝 9A]rt 9Al & 9A8~h?l9A u"x.9A8qԋ N9AEсShׇ 9A5 Cv9Az~ :[9A:76h~"9Av-u549AIK: ~"9Avv.$9ASVz%9A@q7(9AG: ϐD*9A e~+9AQB-9A|IIUj.9Aw7"/9A /p-u549AIK:0AM8Ao_8ALlAM8ALlwǵ8A= (_8AoH3K~8A'8A@I3K~8A@I$~8A5~8A?@+8AS8A*5'8A _`37V9A ęh)k9A & 37V9Aw<2,wW9Au 4x'W9A`nI4u41Z9Aظ9Z9A`X82[9A &}̾8`9A@N<ϟca9ADD)k9A ęh0e7A b_m7A ?!5e7A ?!5^O7A`?8_m7A b8_&8A`tZL0j88Aa 1_&8Aa 1&e8A`3+9~N8A DM<L0j88A`tZ0ߍ8A?F8A ?lߍ8A?.jڵ8A@C5(rF8A ?lh 8A'8yŧ=8A`ء 8A'8yuhʎ8A@zLyi?a8A);s'd8AFSnmǔ 8A`5[lG68A >FgRcyg8A揣d C8AǰJˎջ8A+Cŧ=8A`ء 8A ~N3"8A'8y 8A'8y%QW8A7񘾯8AL[t8A`3@'PՎ8ATO48AVO 8A@ݧ:;E8A|%R}8A@{/(8A BpFc8ANw4I~8AfKe eY8Aࢄmrǒbk!8A~N3"8A h J7A;02&hAO7A`%p. J7A`%p.'~K7A ̂S$L7A>)_M7A@9ЅM7A@,ؗښnN7A u2&hAO7Aq)pO7A@m.OM7AN$ķDM7A;0Xn_r7A+dv|7A@߷UQr7A+TYr7A y!n_r7A  k_jr7A?1?-t7A)xw7A@hg|7A`dv|7A@߷0 8AJ'{8A^B 8AJ'w'8A ?{8A^BX?8A 8AJ'?8A_8Agv-`r8A@ezF8A`ѠV`M8AbF,`\8AmW˰8A%傎 8AJ' D!O7A '|Y;K`{7A`pl D!O7AT9vGW5;P7A '|Y;KrQ7A ObiB/eT7A 0+V7A2x':{Y7A ۘvZ7AƢjZi[7A@?@삟]7A@X$e7AIIf7A֘cg⳴=u7A;8gu7A3%īw7A2k+-`{7A`plH9A`xK=9APU H9APUV't{9A@oqyC>.9A`L2 iN9A@fLm"9A`!@&9A88OX{9Ak*Q69A-wgz_{9A@ uy9A<ߡ 9AAt_b9A[ K=9A`xHED(w9A@0BS9A%7XS9A%7Xۤ9A@}H6)9A`/+p9A1eP9A@ ED(w9A@0BHB\8A`q`?8AB\8A`q`w)\8AhQ8AiZGg8A@!8AM* ?8A8|8A~ih/W8Aٸ6|8A~ih4E8A@_9ބm8AB/W8Aٸ6hbh58AcU(5@'A8AJ' 8AJ' B}8A@b8AZ @'A8A%* ~8A ZuR[޳8AE0-8A<,+`n8AJ+,ZV8A@n.bh58AcU(58m_U8AcU(5bh58A@Am_U8A@A4̩8Ae68A^B'bh58AcU(57A@5ķDM7A;07A@5:/((!7AÊ'T $7Aw'7A@Z 1*7A@#s8-7A@|3^S07A ri;h37A`_㮰77A@vI<7A{B?7A@3iohD7Apo[,sI7A g`MK7AVX3CķDM7A;0x6A $:&86A R_$L6A \00R=L6An6Yz(6AQ~]6y6A@H&,F"@L6Aƨ&56AwJ9&E*V6A@)H)}VJ"6A Ƈ(.$6A`d)ٹ%6A@],'!W *6AYS@;α-6AwAO=eL/6A@2O:ő306A W"3~f_36AS3'46A R_$476A -:문96A3`,\DrN<6A$hO'ء>6AE* Z@6AGU[0<,KC6AF C6AAGz4F6AqPUGbG6A.YMi٤H6ARa pI6AQZ'g}{K6AoQv!d0M6Atyn@O6A`25CP6A181vP6A@ܑ`@iS6A,JӕHBU6A\~X6AK]gCZ6A/oޗK]6A?ӎ@.`6A`c$Xb6AKbe6A@*&4.dBg6A(_)_g6Aoi6A`pDM`sj6An5 2Qk6A`7on)l6A@!(#p6AZpVnqr6ABhN7APEtVvQYzJ7A@]bݭ\_J7AvbG=H7A`qMt1FG7A+I{ecE7A )>6AxkQ6A`g60/)>6Axk0S6A4,f=6Acd\LR6A`Q$YBȥL6A@Yꦥ6A``޽<_ɲ6A@P`<Dֵ6Az4VY$5]6AlGUsO6A`N}ֶ~6A[M<_zk6Avcw8D6A`g60/L%6A n/!p(H6A 4 Ks6A,0R6A=r06A  ;}.6A@%;$y06A4V@\  6A֣=76A @QI6A؛Wۗ6A W(cg6As"RQ6A@~tU08A_q݌8A4[8A4[8A}݌8A_qi p7A ~`xecE7A i p7A ~`x2"7A mqox\$7A`2g s!&7A_{a(&7A`팘\Rd8'7AϸRD: )7AښjhH-+7As"4oR-7A yW$ݪ]/7A@sI507A Sxʹ%´17ARLw m27A@b>c+QEp37ALاt67A=ij]Q97A` \ ש:7A ֝U8fQ;7A@=:>7A-F}A7A ʧ xD7Aj:ecE7A 0WQ7Ak?V7AWQ7Ae_V7Ak?V7A88A`݌8A_q8A`M8A߶@[8A@ӽ݌8A_q0݌8A^8A_q݌8A_qnI|V8A`$_^8A8?t8A~N3"8A ?t8A0;8A`sV~*8Ad6~N3"8A @XV?7AULC7A 0*XV?7AUL??7AvQZ6A7A?EZ/C7A,LC7A 0*0L?7A?[X_@7A ?.VL?7A?[V+@7A?XX_@7A ?.V_L5Ajim5A9d~^_L5AjiWL5A˶e&wM5Ah[ϦP5A#xB_R5A`hb.R5AQX ^IS5A4QtS5AJ,"MS5A Y R5A laQ5A !EQ5A`M@YejR5A`5VgS5A8DDS5A. ܧS5A ^.R5A g83C`R5Aap R5A,N2fw5A@?qy5AI.p{5Atd$|5A /@A]Q5Alɋ$L6 5A~L65A`HcE3ۆ5A$Ċ3;- 5A:΋hS5A`cO[r~5A@Uo35AZ oHr5A@%% L5A7|Y5A/~8e*5A9d~[^85Apx7̾R5A Ůi\|5A@"@aF5A`Q-OBwK5A(]IR;|iv5AA@ g{\5Ab`Ⱦ_&"۞5A2: =g5A]3)mD5Ah5A36W+5Akc:n5AyI^ӥ5A:^K;l5A`j׋'»5A iįƩ5A`}J5A` Z V5A`&WϪ]5A`c3ײ5A`4Q"@I5A l@e5qsh5A w,@c1z5A@> H^X5A@{;6KpT5ACwX֝j5A@ImcafP5A`Fqhz qO5A>kem&5A@gwJg|5A6᫊95Ag.F?5AyOXo E5AN::-5A-0m5AX.!03 8A@_r8ٶ8Aj3 8A@_r]_8A%L7m8ٶ8Ajh 8A@;8Ar 8A@;?ұ8A_/e8A_`[8A_)8A@??.8A V}K8AlY?z+_Ĺ8Ay*w8A`?v8Ar@rtf7AKֹ7A@rtf7A z:7AP{J7A 7AvK 7A7> 7AvC^ 7A ˬK 7A7H(6AkY6ⅅ7A@p(6AT:z7A@p~Ԃ7AK3`L-^7A8b 7Ad36ⅅ7AkY0%7A@߬97A?97A?&_ 7AM%7A@߬Hi7A6A`5sT6AuTT6A`5si-P6A}Qy6A>?6A<s6A`ii7A6AuT0I_ 7A`߂@߸ 7A@?0@߸ 7A@?0J_ 7ABI_ 7A`߂0xe%7A@#( 7Aydxe%7Ayd`t*#7A`( 7A@#0ޝX6A`9\T6A`5sޝX6A`9\T6A`GT6A`5s0_)7Am*7A_z_)7A#)7A pm*7A_z0-?7A:#7A#7A7A -?7A:8-?7A:1$7A -?7A:[7A@w$?7A_1$7A P-?7AK+_7A:-?7A:.7A_7A` %7A@!t7A7A#_7AK+0+_7Aw?%7A ߿+_7A ߿&?7A@_?%7Aw0?? 7A`s,_7A>,_7A>0 7AT?? 7A`s@#_d7A?.6 7A_#_d7A?(?7A[/7A _A_ 7A.6 7A_0_L%7A@: (7A_L%7A@:&7A6 (7A8??7A?;ߵ 7A@;ߵ 7A@8 7A@F 7Aߨ??7A?8_e8A6Yg8A`E _e8A`E E=f8A_ Ug8A`6Yg8A8 47A߁??7A 47A$7A 4X37Avϳ??7A߁8r 7A.. 7A`Gr 7A..) 7A|3 7A߲ 7A`G0_E7A E7A 6 _E7A 6 E7A?E7A Xjz7A`.{_:7A _ 7A _Ɯl7A7A@l<C7A : 7Ab28??7A:37A???7A?+,7A?v:#.7A߃:37A:@x7AEB7A Bx7AE7A@C?7A C6I 7A:hCB7A B0߻5A^_5A@_!߻5A^_l5Aܖ L5A@_!X7A^7A*O7A?U7AR 7A?P1d7A _T}sPf7A-qP?^7A*OY7A@܏Q7A^8(q7Ahh)v7A_+8)v7A_+8+K7An;V7AR(q7Ahh@7A S?7A .M?7A .MNS7A {,N7A O7AS7A SP_7Au?&7AK+_7AK+$7A@>T7A@?,T7A?\ 7A_lߊ#7Au?&7Ao87A@_`7A S7A S7A`\7A@?^7A@_`H6Anސ6Apz^U6Apz^U?~6A!SZSK+6A@v_Eh&6A`%dvkaF6Anސ6A}n0 7A@n߆7A_` 7A@n7A_n߆7A_`0?$07A r07A m?$07A m07A`r07A r0m6A@~o6A@mm6A@_$n6A?.~o6A@m0?7A@ ?7A߅?7A߅Q7A?7A@ 07Al7A 7A _ 7A`7Al`0I5A` 5A l 0I5A l 5AА?I5A@_޳5A@5A>5Ag5A`5A 5A_08A a8AG8AGZ8A@?a8A 0]߼m7AG_Pr7A ]߼m7A CNr7AG_Pr7A06A?>!6A6A6A!6A?>!07A O7A ?E7A ?E7A\O7A O0M?j7AhC/m7AOM?j7Ah=k7A@cC/m7AO0gn8Aߓ p8A?@gn8A?@ o8A_ p8Aߓ0?U7A_um7Am7A7A?U7A_u0?O7A@|7A@_ ?O7A@_ z7Ac|7A@@?18A`x?;78A_T6 18A`x?18A?u18A@yt?18AZg?;78A_T6R8A&28A@‚R8A l?8A_8A!8A&1!8A?b$!8A@ #8A}_&8A`_bM'8A@*8A߫*8A/8A08AR18Ae28A_Y28A 28A@l18A`Z?/18A`08A`/8A@‚P_>6A`(_&6A`"_>6A ?D6A@H'6A`(6A__?6A? 6A_&6A`"H?6A~6A ߎ?6A ߎ6AJw6A@M^6A_*6A?~6A 0߁<7A >7A@_>7A@_[>7A@߁<7A  0_57A -87Av_57Av?37A?87A - i?wg6Ad6AXwg6AXi?wg6A@ߨtg6A_ͳTg6A(`Yj6A`Ul6Arn6A ?_An6An)n6A77Ho6AB?u6A?_ _wv6A?Wdw6A߮q(Vz6A@}_~6AZ 6A u؄6A?ޯ_6Ad6A p57A>E7AN 57ANp:7A?:7A~j;7A@ <7Aߔ=7A3_>7AF'A7AC7AE7A1E7A> _ 7A_( *8A߯5_ 7A_( _7A_i _7A?a 7AV s7AG 8A`_#A 8AG- }8A@߹ 8A 8A& 8A@?_ 8A 8A8A ڂ_8A@8A`y8A@q?8A`?b8A_7P?8A{M*8A߯58_ D7Ay :M7A _ D7A 9J7Aʻ ?zJ7A_ :M7Ay 0`}6A_ ?d~6A `}6A_ b~6A?6 ?d~6A @J_6A_ m̚6A/$ J_6A_ gP6A_8 P6Af c_26A5 m̚6A/$ 0D_E7A E \H7A D_E7A E HG7A`Y \H7A 0m6A_ J_6A@ m6A@ W߲6Aӵ J_6A_ 87A tQ7A` 7A` 7A g 7A_fp tQ7A 8}7Aɸ ?@7A }7A ?}7A? _+7A ?@7Aɸ 0}7A ?2 ?ԁ7A }7A }7A  ?ԁ7A ?2 H6A _=6A ?ՙ 6A ߑ6Av !6A  6A@_L ?.6A?/ _=6A ?ՙ 0Y_/g6A? jJh6A  Y_/g6A  X?@h6A jJh6A? 0__F7Aߴ F#7A` __F7A` d?D7A F#7Aߴ XGj6A  #z6A_ Gj6A_ Lm6A >n6A -?vs6A _ 0=w6A_ :y6A 0?z6A #z6A  0#z6A@2 /_{6A  #z6A  *_}{6A /_{6A@2 PT7A =Z7Ac T7A V7A V7A@_f} Y7A 5i Y7A?e _/Z7A_Td =Z7Ac 8%f7A?' _7A_v %f7A_v Т7A #7A_ _7A?' 0wK6AC e6A`_R wK6AC j6A@ e6A`_R 8@6A a6A`I @6A W6A` W6A a6A`I P6A> 26A 6A> 6A`&< _m6A ߳/ o6A?/ <6AA, 6Aj* 26A  Pu6A :\ ?6A@_o u6A 6A?4 Ɉ6AJ 6A :\ 9p6A-[ W96AW ?6A@_o !0 Q7A`_ Q7AߡX  Q7AߡX Q7A`__ Q7A`_ "8Q7A k;X7A`_ Q7A`_ wS7A`|p hV7A_| k;X7A #P( 7A@B _7AvT _7AvT ? 7A@p 7A`~ L 7A_l 7A_/ - 7A? ( 7A@B $XRL7Ad Q7A`_ Q7A`_ hPQ7A@_[m |/P7As uO7A@) g?"N7AV RL7A_ rL7A ]L7Ad %`( 7A؎|7A@B  ( 7A@B u 7AZ  7A _7A_p 7A?-|7A K7A 5WE 7A`?quX 7A؎&_s5A3?5A@ ?5A@ 5A< 5A z5A  5Ay&_5AB??5AkP\ 5A U5AU}5AP5AGS}?5AU_*5A __}5A4i_s5A_s5Aw5A |5A@}75Axg+5Atp5AߠW5A`@N5A?O?55A@_5A@PL_;5A`_;5A@Q5A cK_5A`dV5A3'?б6A`?C 6Aa :m6Aa D_6Ay Kw6AΠ 76A@_ H6A? D6A? C 6A =\6A  06A> .6A@6A?b!Z6A ?.,J6A?3?6A@>> c6A?Q0I36AAa_6A?ik ?H6A@~ ϼ6AKo6A`6A@_6A6A_G6Aߑ??6A_6A?!r6A ? _k6A` ?б6A`?(P:[6A _X*7A`:[6A`}A^6A`N6A 56A :?86A/?7A?*7A _X)(K7A\܃3EK7AڃK7Aڃ3EK7A\܃*(@߸ 7A@?0> 7Av@߸ 7A@?0> 7Av+X7A@_`7A B>I#=7A B>I,7A7A?'!_67A@/87AA7A ?I7AU7A@_`,(=7A _&#_7A`&=7A _&#_7A`&-( n7A_+8)v7A?7 n7A?7)v7A_+8.(_ 7A_p 7A`p 7A_p_ 7A`p/(7A ?@7A=@7A=@7A ?@0(D07AG07A_D07A_G07A1(e'7A`Da"'7ADe'7ADa"'7A`D2(U)!7A`wR6!7A@wU)!7A@wR6!7A`w3(F7A)DF7A` DF7A` DF7A)D4(|;^7A@_^t R^7As R^7As |;^7A@_^t 5(FI7A? @L7Ai? @L7Ai? FI7A? 6('7A3 17A ? '7A3 17A ? 7(UY7A`& ^_\7Aߴ& UY7A`& ^_\7Aߴ& 8(?8A8A?8A8A9o~8AhG 8A\o~8A\6~8Aq!mr2x~8AKԭK8ARC 8Aq28Ana8A@>љ;Q&8A@@Ae8A@޹.T8A@fMA3O*t8Aeip L8Al{]xԐ8A@+G&AFg8AhGtƔ8AӁp*8AG`98A(;љNHn췙8AC] 8AXt 8Ayh:(VEj8A@iX+Ws8A@VEj8A@iX+Ws8A@;(u28A@3_{28A2u28A2_{28A@3<0C8A6U?:8AsU?:8As+(8A@_PC8A6=(C8A`F8AC8AF8A`>(WV8A e_Z8A?WV8A e_Z8A??Xބ0D9AGug_#9A ބ0D9AGu9AiMz9A܍8-)/1f9A`)/K9ARUt. 9A`GGaoy!9A@[Sg_#9A @@$_7AQl?X7A?$_7A?!7A%7A_27A7B?X7AQlA(7A37A_V7A37A_VBHc7A_}e7A ?!5c7A_}ن7A`҂k?7A \7A_BIV_K7A@@e7A ?!5C0~7A_}c7A@Q+7A@Q~7A =c7A_}D8T7A_e7A_PT7A_P?X7Amp7A?M17A_eE@7A iǜ7A@?S7A@?S7ASd7A7A?iǜ7A F(?C7A`?`7A_)?C7A_)`7A`?G09_f7AER7A`9_f7AAf7A ?ER7A`H(Bl,7AJm,7ABl,7AJm,7AI(R7A@_RTX7A_BTR7A@_RTX7A_BTJp\C7A"a˴7A:c+mDi#7A:cY$7A@yBI97A@Ϥ47Ae.xD7A@sD?w7A@Eƿ^6>l7AS!2@ BO7AU7A@g7A@L9Om7A(PtP7A@\C7A'87A3rW7A҉!aW7AӡrI7A@e,q YJ7A8φZֱ7AS'+17A@Hό*7A@(cþ47A@-Xud.)7Aa/Զ7A@HȽh)M7A#;/0l7A?Y7A77(e\7A>`zG7A@q kev륜7AJ;w`zG7AE!:t i7A53<7A@MA7A`EO7Ai.Ɛc7AjZ7A`Ga@7Ak {>v7AqЌZ:7A@{B䡩Zݹ7AB67A|'˴7A"aK(p7Ady?7A_p7Ady?7A_L(6A`;A6A6AA6A`;MX߯6Am7A?i߯6A?i6A7A֟6A?66Ad6A6AHm7AN(LK6A;M6ALK6A;M6AO(<J6A`LK6ALK6A<J6A`P(1E6A`BW6A 1E6A BW6A`Q((ȹ6A@߮5?Ϲ6A@Ȯ(ȹ6A@Ȯ5?Ϲ6A@߮R($6A3_'6A`_$6A`__'6A3S(_6A@?6A`_6A`?6A@TPrߒ7A UG7A# Gc7A 8c7Aů Rc7A M7Ao UG7A`N a7A> rߒ7A# U(vs7A@ ws7A˗ vs7A@ ws7A˗ V(?v7Aw x7A@_S ?v7Aw x7A@_S W(7Awq 7A`q 7Awq 7A`q X8V_6A`_ O6A u V_6A u `a6Av _?6A O6A`_ Y(N:6A u V_6Aut V_6A u N:6Aut Z(_}6A ~6A _}6A ~6A [({6A?\ /_{6A@2 {6A?\ /_{6A@2 \(?S6A?]> S6A> ?S6A> S6A?]> ](Orj6A_ Gj6A Orj6A Gj6A_ ^(?q6A ?d~6A ?q6A ?d~6A _0p߃6A` F_~6A@ F_~6A` G6A@ p߃6A@ `(n?إ6A f6A n?إ6A f6A a(d6Al6A@=d6Al6A@=b(]i6A?ysj6A ?]i6A ?sj6A?yc(q6A Ahs6A?q6A Ahs6A?d(&F6A`/u1F6A(u&F6A`/u1F6A(ue(:6A<]?6A@;:6A@;]?6A<fِc5A밾k2 6A2 6A2?u6A?4?)6A@6A_.5AT5A@?4*5A2;߿5AsLߏ5At~5AȦ5A`s_D5A _$C5A`A"5A 5A ِc5A밾k2 g(5A _s5A?5A _s5A?h(^7Aߑ l7A_8 ^7Aߑ l7A_8 i@ 7A`G+_7A ߿ 7A`G ߭ 7A-;7A?gA7A@?"o+_7A ߿j(G:8A@G @OSA8A*>G:8A*>OSA8A@G @k(*>b9A_ 5;eg9A@Pe*>b9A@Pe;eg9A_ 5ln԰l8A@JM_9A@Pe*>b9A@PeB$\9A@m?K9A;X(9A@ƽ j[ э9Av֩W H9A2 K:N-9A@[YHM_9A@GWքW_9A}`( ,9A@w(S~9Ap;9A#oty8A@yic.8AKq8A@#зw8A$vVO88A@!Mn԰l8AΆӴ8A@Jm87v59AW˧sy79A]a7v59A]a!59Aͱea`־69Aoy79AW˧sn(͖i]+9A^dB+9Aw^͖i]+9A^dB+9Aw^o(b!^9A̴a9AW8a9AW8b!^9A̴pH˴9A5c/Ru#9ARAu˴9ARAubMȱ9Aq,d4DK!9A@E8Xi"9A[c$"9A@k /Ru#9A5cq(Lui C9Aܯ "C9A#߾Lui C9Aܯ "C9A#߾r(&+D9AZE@%D9A@ _,E@%D9A@ _,&+D9AZs@tne9A@Zܫ$n9A@lukAtne9A@lukA׵f9ATJVi9A,)w/2m9A@Zܫ$n9A@GAt0tne9A@lukAB5pf9As+ctne9A@lukA\e9AAXB5pf9As+cu` Ib9AhQoKRUm9AO Ib9A@>oK[b9AhQo'@Ʌ c9A@mmV]Sd9AVIe9A 9A9z9AG+Ɖ 9A'z̈́1X9A@ȥ> 9A9zy(9P<P9A? P9A Rb9P<P9A Rb P9A?z(D_7A,?"8H!`7AFD_7AF8H!`7A,?"{(4ߛ :A(7j) :A_I4ߛ :A_Ij) :A(7|("v;9A3ֆ9AD"v;9ADֆ9A3}(jZj}9Ac-Vxp}9ACjZj}9Ac-Vxp}9AC~˴9ARAucxJ#9AVVcxJ#9AVViF"9ASGt# cz&"9A :ׁXag!9Aqm)GI!9AAFڋK՚H 9A@ g 9AE$'Mi9AWF9AI'HN9AQSWIs 9A`½uX`\I/9A@s9A]ɩ˴9ARAu8EM6A"iY~i(6A DEM6AA̢%6AV|Q6A`Qu,. 6A_r>J 6A5tz$ 6A  O6ABfD>6AM~ȵ6A`k,L 6A`Ĩc6A >ټ ?B6AU~?o 6AO^26A oM+8jp6AOѶ9U 6A`ǹ&L$6A wYSA(6Avc'"_*6Ai=F2T-6A`N.6A7M6A"iY9P6ADw*AOER6A ̏ e"S6A v: p VV6A@\x[6A@OXypLh6AeRi6AS(+Jj6A GLϵPΑl6A@ L&Mm6ACX#*n6A`SQ|Whp6AD!7p6ASwxʸp6AV c-rq6A4"Tkcs6A`AJf*t6A Dx6A G8^@x6A@DA5x%C{6A&1LG,q|6A%1Uz}6A 6n3P{6AN#-FO 6A`r\*(T6A  ^6A f&&E6AL7 <6A@%'b$&K6AC& ]6A k6(e6A`ƿ &'9ƛ6A F!+k6A ;S6AVsy~i(6AsA!p045AAEM6AT 045AT+?5At8[Ȣ5A>bb,5A`Dh.l=5AEv;qD5A@H!Iw<_5AP{Nva5A55.>5Aa P:T5A`-8L7AX-H)UJ7AYUJ7A3>(M_8Ata=9vh8A_pL9vh8Ata=M_8A_pL(9Aʛ9AỲ9AỲ9AʛH5A ?|s`5A _m5A _m5A@15A?=5A`,O5A@as`5A ?|0hT5A_}t:5A@?st:5A@?ss`5A ?|hT5A_}(w UK7A|} q?N7A q?N7A w UK7A|} (:M7A q?N7Ay :M7Ay q?N7A (__8Ajcsbc8Aq>__8Aq>sbc8Ajc(;[J9A@Ev7!,~+j_L5A352=:AZ2(^Pp&X((`>hP&@jp( (@&(R0 8 0 ( "H nH 0 ( ( F0 z(X0R(~(2hh (6r(8(8@:Pb@ !j"v#Z0#0#(#`$R%.0%b@%0%H&&8&b'`'(((28(n((0()*^(*+6h+,v,-~0-(-(. .(.P/(/Jp/X0`0~h012z82X3X3n(3h4h4r(4845vX5h6>(6j(6P6(7P7j(707(7:(:(;<(<2(<^0<X<`=R=P>R(>~H>0>@(@HAB(An8A(A(B(B.0Bb(BDj E(E(EFj(FHF(GHGZ(GPGPH.HHz8HIbJ&0JZ8J(JLF@L@L(LhMfhMhN>PNO6(Ob@Q0Q0R@RR0RHR8S(S:8Sv(S(S`T2TU0U0U0V`V0VWr8W@YpZf\]v@]@]p^r(^(^(^_p_(`"(`N(`z8`Haa(a(aHbJ(bvHb`c&8cb8c(cpd>0drHdhe*`e8e(e8f2g0gR(g~Pghh>8hz0hHh8i6(jb8j(jHk0kJPk(kPlPlrpl@m*m8n0nF0nz`n@o"8o^Hoxp&Xp0pxq20qfXq@r(r2Hr~(rPr0s2Xs8s8txtPt(u8u>@uPu0v XvfHv(vXw:Xw(w(w(x(xF`xPxHyJ0y~(y8{(|(|>H|0|0|h}^h}~(~88@b(0F0z((`6@z(H@60jH008Z@2(^((:(f(6`^pX.X@(0.h(H0F@((8*@n(x0J(v(.(Z(88@B(n(8P*(V8((X((F0z8Z0((P:@06HX0(>(j(R0((H*X(@80"0V((0hN(z&(R@P8&Hr(((82@v(80H^((((0B0v((P"(N088@>8zP0hnh8(B(n(0(pn@@("0V((0@&8b@(P&0Z(HxN(zh(8H6(bP0@.8j0((("Hn(h (68r0@0@b08((*(V8(Z0(0`R(~((((.0b(80P`z@80.pp8R80(8*(V((@@6P800.(Z8008:P((00N(z0®(((2H~(ê80@^(Pj0Ş(8(2(^0ƒP((>@ǂX8(F(r^8N@˒0(XNH̚(@ (6@z0ͮ@@6`Κ.(Z(φ888:(f(Вxhz(ѦXHN(z8Ҷ(H.`ӒX0"(N(z@Ծ(((B@(>8zPH0N(zH086Xؒ8((&0Z(نz0ڮ0(8J(v(ۢ808NPݢ8( 8F@ފ8HXn0ߢPXR@x(>@088.HzP((&@j@@(H>0r(P@68r(((82P(@HB(n888"Hn(@@"(N@(8(&(R0`0(J`(@0( (6(b@8(0B(n(80 0>H0(0pX((F0z@(P>(j0P((J8(@("8^H@pb(0p68r0` (60j(0002(^888(>@P0 HV(0((`rP(H>(jH(P6h80(>(jH(H.8j((Pp0(XFJH0(H006H(@8.0b08(02@v0(( ( .P ( ( ( @ J@ 8 H ( Bp00(J`X @N0(J(v08(Xn(P0"0VX@z(P86(b0((((F(r@0@(.(Z8P8&0Z8@8Hb(((XBpP @ NP P 0!*`!h!h"f"#X#@$.%(%F(%r0%8%H&.(&Z(&8&0&0'*X'0'('((8(N8(8(((()()J()v()8)X*:8*v8*(*X+:(+f8+0+(,,(-(-(.(.F(.r(.(.(.P/J0/~8/(/(0(0>(0j1X1bH1810282Z82P2(303JH3038484B(4n04P4x5r05`6 @6N86@687 07>07r87@7p8f08H8p9Z:@:J0:~0:(:@;"0;V8;H;(< =p=z(=8=0>(>B(>nX>?V(?(?0?0@(@BX@(@0@XAZhA(AHB>8Bz@BpC2XCHC(DPDZ0D8D(D0E*HEv@EFNPF(FPG"0GV8GH`Hz0H0H(IHIZXI(I@J&xJhK0KBXK`L(L.(LZ(L0L(L(M(M>(Mj0MPM@N6(NbpN0O (O6(Ob0O@O(P`Pj(P(P R0SHSfPS(S@T*0T^(ThT@U:0Un(UV.8Vj8VW:(WfhWPX&(XRX(Y"XY~(YxZ&pZ(Z(Z8[.X[H[8\(\>X\(\0\H]F(]r8]0]0^(^B`^@^0_0_R@_(_(_(``(`ab"@bf(b8b0c(c.0cb8cPc0d&(dR0dXd(e(e:`e(e@f(f:0fnPf(f0g"8g^(g(g0g@h.@hr(h0hXi.0ib`iPj(jF(jrHj(jkm0m(mn`o28on(oHo0pHpf(p(pHq 0q>@q0q(q0r0rJ(rv(r0r0s Ps^0s0sXt"(tN0t0tXu(u>w0wF(wrpw(x8xNy@yV(y0y(y0zHzb(z8z(z{0{(|h|~(|(|(}8}>(}jX}0}(~&(~RH~0~(~02H~8((0F(r8x*(V(`((>X0((&(RXX (6(bvX((*(V(80(Hj(@8(BP20f0(0@>(j8(X.@r0h(>(j((0PJ(vhpV@X("`(8((0.P@0`"(N0((n(((8J0~0(( (60j(@0p@((Hjx((>(jP@(0&(RH(0(*(V(HH0N(z@h*x(:P((00((:H0H(20f(08(.H(Jx((Hj0((("8^H((8>0r0( ("((8R(~(((@F(r00(@J(v0H0*8f@((068r((((0(((J(v(0zX((.0b(((0(F(r(((("p8((*(V((80Pr@b8ž@((:(f"(N(z0Į(pN(z0Ů(((2((>(j(ǖ(~(Ȫ(((.(ZXɶ(((:`ʞ(8(2˶(((:8vP(("ͦ(((*0^(Ί(ζ(((:(f(ϒ(Ͼ(XFPК0006(b(ю(Ѻ(((>8z(Ҧ@n(Ӛ0((&(RHԞ((HB(n@ղ(0`v(֢(((&xע (0&(R(~(٪(((.Hz(ۦ(X.xܪp(J(vP@(:(f8ޢ((~((0 8F@((0(BX8(((((((@Z((8((Fh(( HV(((((2(^80((&(R(~H(("(N@00(&(R`J(v0@(Hf(((P>(jX(((J(v00( 0>(j((0PJX@((B(n(0((&(R(~((((.Hz(0`>(j(00(*(VX(( 0>0r((X&(R(~H(`Z((8((F(r(((HB(n8X0:(f(((((B@888:8vH(@20f0((((J(v80((>(j(2(^p((*(V0@((&0Z(8(0"@f(0(((J(v((H0N(z88H >@ @ 8 ( .( Z( ( ( ( ( 6( b( ( H ( 2( ^@ ( 0 H N( z( j(08(2(^(0(H6(b8(H(B0v(((0.`(r@(0(B(n(H((>(j`@@V((((Xb((882(^(HX2(^(X0(F(r(H0(J(v(N800((J(v(((0.8j0(8HR@(0@ :h ( ( (!*0!^P!0!("0"F("r("("("(#"(#N(#z(#(#(#($*0$^($0$($(%(%B(%n0%(%0&8&>0&r(&(&(&`'ZH'('('((*((V0(P(() ()6()b0)()()@*2(*^(*(*(*(+(+:0+n8+0+(, 0,>(,j(,0,0,(-*(-V(-(-(-0.0.B(.n(.(.X/"(/N(/z(/8/(0(0:00n(000(0(1&(1R(1~(10102(2>(2jh2(3(3.(3Z(303(3(404F(4r(4(404H5J(5v6066(6b06(6(607"07V(7(70708(8B(8n(8(8(8(9(9J89(9(90:0:F(:rX:(:(;&@;j(;(;(;H<:P<0<(<(=(=F(=r(=(=(=0>*(>V(>(>(>(?(?2(?^0?(?(?(@(@BH@(@PA@AR(A~(A(A(BHBN(BzXB8C(C>(Cj(C(C@D(D2`D(D(DEF&(FR(F~0F8F(G(GF(Gr(G0G(G(H*(HV(H(H(H(I0I:J(J:J(K (K60Kj(K(K(K(L(LF(Lr(L(L(L(M"8M^(M(M(M(N0NB(Nn(N(N(N0O&(OR(O~(O(O(PHPN0P@P(P(Q(QJ0Q~8Q(Q(R(R>(Rj(RSr(S0S(S(T*(TV(T@T(TXUN`U0U(V(V>@V(V(V8W(WB8W~XJ(Xv(XXX8Y:0Yn(Y(Y(Y(Z(ZJ(Zv0Z8Z0[([F([r8[([P\.(\Z0\(\(\(]0]F(]r(](](](^"(^N(^z(^8^(_(_:(_f(_(_``"@`f8`0`0a (a6(ab(a8a(a(b"(bN(bz(b(b(b(c*(cV(c0c(c(d(d:0dn8d(d(e8e>(ej(e(e0e(f"(fN0f(f0f(g0gB0gv(g(gPh"(hN(hz8h(h8i(iJ(iv(ixj(jJ8jXj(k0kB(kn(k(k(k(l8lZ@l8l@m(mJ(mv(m(m0n0n6(nb(n0n(n(o8oV(oPoHp"8p^0p(p(p@q.(qZ0qhq(r&(rR0r0r0r(s(sF8s(s0s(tHtZ0t(t0t(u(uF(ur(u(u(u(v"(vN(vz0v(v(w(w2(w^(w(w(w8x(xJ(xv(x0x(y(y.@yr(y(y(y(z"0zV8z(z8z({&({R({~({({(|(|.X|(|8|H}>(}j(}(}(}(~(~F(~r8~(~(0:(fp(PZ((0(0F(r(((82(^(0(((B0v0(((.(Z((V(0(@&(R(~((H"(N(z(X((( (6h(@(>(j(0(("(N(z(((02(^8((((J(v((@(:(f@8((>(j(00(*@n(((((J(v(((0.(Z((8PB(n(((@6(b(8(("(N(z(P86(b0(((0N(z(((8:X(((0N@((((B(n(X0*(V(0((Pb80@(B(n(((0&(R(~((((.0b((0((F(r0((@B(n(((0&(R(~((((.(Z(((( 0>(j8@0(J(v8(( (6(b00(("Hn00(`f(0(((J(v0((06(b(8(("(N8(((HZ(@(82(^((((@R(~(0( (6(b8*(V((2(^(((8(J(v0((H(&(R(~((((.(ZH((02(^(((@&(R(~0(08NP(pB(n(((((J(v(((0.(Z((@("(N(z((00:(f(0(((J(v(0(8>(j008(:(f(’(¾8(&(R(~(ê(((.Hz(Ħ08(B(n(Ś((((J(v(Ƣ((86(b(ǎ(Ǻx6@z(Ȧ(((*8f8ɢ(H(F(rP0@>(j(˖0(82(^(̊(̶(8(J(v(͢(((&8b(Ύ(κ((@V@Ϛ((((J(v(Т(((&0Z0юh0.8j0ҞH(8R0ӆ(Ӳ(( (6(b(Ԏ(ԺX(B0v(բ(((&0Z8֖(082(^(׊(׶0@.8j(ؖ(((8V0ي0پ(((B0v(ڢ8( 8FHے(۾(8&(R(~(ܪ(((.0bHݮ(88R8ގ0(((F(r(ߞ((("Pv88((F(r(((0*0^((((Pb((((8N8((((:(f(((((B0v(((86(b(@((*(V((((`j(H(@R(~((0 @N(z(8((:`(V8((0(J(v((((&0Z0(XHb(H0(:(f(((((BH`8.(Z8(((0N(z(((8:(f0((H>(j(((((F(r(((("8^00(((J(v((P"(N(z(0(hr(0H(J(v0(P*(V(0(0(B0v(8( 0>(j(((0"(N(z(@((B@8(0"8^(0(00R(~(((x~((0 (6(b((((8N(z(H((J(v00H*(V(((( ( 2( ^( ( ( ( 0 B( n0 0 ( ( .@ r@ ( H .( Z0 X 0 h ( ( (0B8~(((06x0H2(^P(0(>(j(((((F(r((0(*p0((*0^H^0((0@b(((((>(j(H(0B(n((((@b((f(`PJ(v((((&8b@@((B0v(((0.0b(08(*8fh(0 2@ v( 8 (! (!6(!bH!(!("8"B("n("("0"(#&0#Z0#(#(#`$J@$%(%>X%(%(%(&@&b@&(&8'@'R0'('('(( ((60(j((((@)@)J()v8)0)@**@*nH*(*(+0+F(+rP+(+@,60,jx,(-(->(-j0-@-(.(.:(.f(.(.(.(/(/B(/nP/`0&00Z0080(0(1"(1N(1z81(1(202B82~@2(2X3J(3v(3(3P4"(4N(4z(4(4(4(5*(5VP505(6 (66(6b8606(6(7*07^8787(8(8.@8r(8(8P9H9j09X9(:&H:r8:X; (;68;r(;(;(;(<"((>:(>f(>(>(>`?NP?0?(@(@.(@Z0@(@(@`AJ0A~(A0A(B 0B>(Bj(BPB@D.0Db0D(D(D(E0ENXE(E8F(F>8Fz0FpG"(GN(Gz(G(G(G(H*(HV(H8H(H(I(IB(In(I8I0J 0J>8Jz(J(JpKF0Kz0KPL(L.0Lb(L(L(L(M(M>(Mj(M(M(M0N"(NNHN(N(N(O@Ob(O8O8P8PB(Pn0P0P(QXQ^0Q0Q0Q(R&0RZ@RPR(S8SZ(SHS(ShTj8T(T(T0U2`UPUhVV8V(VHW (W6@Wz0W8W(XHXb(X(X(X(Y@YV(Y(Y@Y(Z(ZJ(Zv@Z(Z([([>([j([([([(\(\F(\r(\(\H](]B(]n(]@](^ H^V0^8^(_`v0`8`(a(a>(ajXa(a@b60bj(b(b8b@cB0cv(c(cPd"(dNXd0d`eB(en(e(efJ(fv0f0fgj8g0g8h(hB0hvh(i&@ijxi0j@j^8jXj(k"0kV8k0k(k(l(lJ0l~(l(l(m(m.m(m(n"(nN(nzo(oB@o(o(o0p(p>8pz@p(ppq^(q8q(q(r(rJ8r(r@r(s"(sNt(tF(tr8t(t(uxu0upv*HvvHvpw68wr(w(w8x(x2(x^0x(x(x0y@yb8y(y(yPzJ@z(z(z0{({F0{z({h|(|>H|}(}J(}v`}(~(~28~n8~x&X0p*(V@0@p((( (6(b(8NX8((>(jx0Xv(0@(F(r0(((*h"Hn0(X*0^@&XNJ80X> b&Xp`2X0V@.HJ8080*`X00R8BH@@@ZnP0P&0Z8J80HpX0PjH80&@jx0hz0P@FH00@>@0X0F0z0@0&`00`V80z80hV0@@0F80R888@J@BP28n0@@*@n0@hRPH8.8jP00&@j8XPV0H80F0z@80.XŠ0¾x:HÆ0ú0XJ@Ď@0hrpƒp8BxǾ@ɎXH6XVXN@Fpͺ@028n@β@82@v0Ϫ@PB0vR@Җp 0>PԒ&8bHծH`^0ؒ0`*Hv@ٺ0hZXܶHx~8ݺ@8:hj0ߞH`N080h^h^X0XJ.HHJ8h8.x>P0080*8f@00h@`20f8808N0`XB@888:0nH08*0^0H0H^0000.0b8P0&0Z@088J880XR00@8:@~0X8J@P8Hj0000:0n`00:0n000 0>0r@zPH0N0>pv80@*0^088 0>H00XN0P8 0 F8 P P *0 ^8 P X J`   P(>(jX(((J(v((((&(R(~(((((0J(v(X@B(nH08*@n(0((&p((XN(z((((*(VP(((.8j(((((F(r0(((*(V((J(v(@((>8.(Z(H((*@n0` ( 2( ^8 ( ( (!(!J(!v"8$>p$h&(&J&0'2('^('H'0( ((6((b((((`)@mapnik-3.0.9/demo/python/000077500000000000000000000000001262555547000152625ustar00rootroot00000000000000mapnik-3.0.9/demo/python/README.txt000066400000000000000000000007031262555547000167600ustar00rootroot00000000000000This directory contains a sample python script implementing the Mapnik API. The script is thoroughly commented and also acts as a mini tutorial. Reading it should get you on your way, and you can use it as a base for your work. You must compile and install mapnik and the python bindings FIRST. Once this is done, run it: /path/to/python rundemo.py If all goes well, it should render 2 map images: demo.jpg demo.png Have a look! Cheers, J.F. mapnik-3.0.9/demo/python/rundemo.py000077500000000000000000000320141262555547000173100ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # # # # This file is part of Mapnik (c++ mapping toolkit) # Copyright (C) 2005 Jean-Francois Doyon # # Mapnik is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. from __future__ import print_function import sys from os import path import mapnik # Instanciate a map, giving it a width and height. Remember: the word "map" is # reserved in Python! :) root = path.dirname(__file__) m = mapnik.Map(800,600,"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs") # Set its background colour. More on colours later ... m.background = mapnik.Color('white') # Now we can start adding layers, in stacking order (i.e. bottom layer first) # Canadian Provinces (Polygons) # Instanciate a layer. The parameters depend on the type of data: # shape: # type='shape' # file='/path/to/shape' # raster: # type='raster' # file='/path/to/raster' # postgis: # type='postgis' # host='127.0.0.1' # dbname='mydatabase' # user='myusername' # password='mypassword' # table= TODO provpoly_lyr = mapnik.Layer('Provinces') provpoly_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs" provpoly_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/boundaries'), encoding='latin1') # We then define a style for the layer. A layer can have one or many styles. # Styles are named, so they can be shared across different layers. # Multiple styles per layer behaves functionally like multiple layers. The # data is completely re-scanned for each style within one layer, and a style # will be drawn entirely "above" the previous one. Performance wise using # multiple styles in one layer is the same has having multiple layers. # The paradigm is useful mostly as a convenience. provpoly_style = mapnik.Style() # A Style needs one or more rules. A rule will normally consist of a filter # for feature selection, and one or more symbolizers. provpoly_rule_on = mapnik.Rule() # A Expression() allows the selection of features to which the symbology will # be applied. More on Mapnik expressions can be found in Tutorial #2. # A given feature can only match one filter per rule per style. provpoly_rule_on.filter = mapnik.Expression("[NAME_EN] = 'Ontario'") # Here a symbolizer is defined. Available are: # - LineSymbolizer(Color(),) # - LineSymbolizer(Stroke()) # - PolygonSymbolizer(Color()) # - PointSymbolizer(,,,) # Some of them can accept a Color() instance, which can be created with: # - Color(, , ) # - Color(, , , ) # - Color() where will be something like '#00FF00' # or '#0f0' or 'green' sym = mapnik.PolygonSymbolizer() sym.fill = mapnik.Color(250, 190, 183); provpoly_rule_on.symbols.append(sym) provpoly_style.rules.append(provpoly_rule_on) provpoly_rule_qc = mapnik.Rule() provpoly_rule_qc.filter = mapnik.Expression("[NOM_FR] = 'Québec'") sym = mapnik.PolygonSymbolizer() sym.fill = mapnik.Color(217, 235, 203) provpoly_rule_qc.symbols.append(sym) provpoly_style.rules.append(provpoly_rule_qc) # Add the style to the map, giving it a name. This is the name that will be # used to refer to it from here on. Having named styles allows them to be # re-used throughout the map. m.append_style('provinces', provpoly_style) # Then associate the style to the layer itself. provpoly_lyr.styles.append('provinces') # Then add the layer to the map. In reality, it's the order in which you # append them to the map that will determine the drawing order, though by # convention it is recommended to define them in drawing order as well. m.layers.append(provpoly_lyr) # Drainage # A simple example ... qcdrain_lyr = mapnik.Layer('Quebec Hydrography') qcdrain_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs" qcdrain_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/qcdrainage')) qcdrain_style = mapnik.Style() qcdrain_rule = mapnik.Rule() qcdrain_rule.filter = mapnik.Expression('[HYC] = 8') sym = mapnik.PolygonSymbolizer() sym.fill = mapnik.Color(153, 204, 255) sym.smooth = 1.0 # very smooth qcdrain_rule.symbols.append(sym) qcdrain_style.rules.append(qcdrain_rule) m.append_style('drainage', qcdrain_style) qcdrain_lyr.styles.append('drainage') m.layers.append(qcdrain_lyr) # In this case, we have 2 data sets with similar schemas (same filtering # attributes, and same desired style), so we're going to # re-use the style defined in the above layer for the next one. ondrain_lyr = mapnik.Layer('Ontario Hydrography') ondrain_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs" ondrain_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/ontdrainage')) ondrain_lyr.styles.append('drainage') m.layers.append(ondrain_lyr) # Provincial boundaries provlines_lyr = mapnik.Layer('Provincial borders') provlines_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs" provlines_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/boundaries_l')) # Here we define a "dash dot dot dash" pattern for the provincial boundaries. provlines_style = mapnik.Style() provlines_rule = mapnik.Rule() sym = mapnik.LineSymbolizer() # FIXME - currently adding dash arrays is broken # https://github.com/mapnik/mapnik/issues/2324 sym.stroke = mapnik.Color('black') sym.stroke_width = 1.0 provlines_rule.symbols.append(sym) provlines_style.rules.append(provlines_rule) m.append_style('provlines', provlines_style) provlines_lyr.styles.append('provlines') m.layers.append(provlines_lyr) # Roads 3 and 4 (The "grey" roads) roads34_lyr = mapnik.Layer('Roads') roads34_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs" # create roads datasource (we're going to re-use it later) roads34_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/roads')) roads34_style = mapnik.Style() roads34_rule = mapnik.Rule() roads34_rule.filter = mapnik.Expression('([CLASS] = 3) or ([CLASS] = 4)') # With lines of a certain width, you can control how the ends # are closed off using line_cap as below. # Available options are: # line_cap: BUTT_CAP, SQUARE_CAP, ROUND_CAP # line_join: MITER_JOIN, MITER_REVERT_JOIN, ROUND_JOIN, BEVEL_JOIN # And one last Stroke() attribute not used here is "opacity", which # can be set to a numerical value. sym = mapnik.LineSymbolizer() sym.stroke = mapnik.Color(171,158,137) sym.stroke_width = 2.0 sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP roads34_rule.symbols.append(sym) roads34_style.rules.append(roads34_rule) m.append_style('smallroads', roads34_style) roads34_lyr.styles.append('smallroads') m.layers.append(roads34_lyr) # Roads 2 (The thin yellow ones) roads2_lyr = mapnik.Layer('Roads') roads2_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs" # Just get a copy from roads34_lyr roads2_lyr.datasource = roads34_lyr.datasource roads2_style_1 = mapnik.Style() roads2_rule_1 = mapnik.Rule() roads2_rule_1.filter = mapnik.Expression('[CLASS] = 2') sym = mapnik.LineSymbolizer() sym.stroke = mapnik.Color(171,158,137) sym.stroke_width = 4.0 sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP roads2_rule_1.symbols.append(sym) roads2_style_1.rules.append(roads2_rule_1) m.append_style('road-border', roads2_style_1) roads2_style_2 = mapnik.Style() roads2_rule_2 = mapnik.Rule() roads2_rule_2.filter = mapnik.Expression('[CLASS] = 2') sym = mapnik.LineSymbolizer() sym.stroke = mapnik.Color(255,250,115) sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP sym.stroke_width = 2.0 roads2_rule_2.symbols.append(sym) roads2_style_2.rules.append(roads2_rule_2) m.append_style('road-fill', roads2_style_2) roads2_lyr.styles.append('road-border') roads2_lyr.styles.append('road-fill') m.layers.append(roads2_lyr) # Roads 1 (The big orange ones, the highways) roads1_lyr = mapnik.Layer('Roads') roads1_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs" roads1_lyr.datasource = roads34_lyr.datasource roads1_style_1 = mapnik.Style() roads1_rule_1 = mapnik.Rule() roads1_rule_1.filter = mapnik.Expression('[CLASS] = 1') sym = mapnik.LineSymbolizer() sym.stroke = mapnik.Color(188,149,28) sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP sym.stroke_width = 7.0 roads1_rule_1.symbols.append(sym) roads1_style_1.rules.append(roads1_rule_1) m.append_style('highway-border', roads1_style_1) roads1_style_2 = mapnik.Style() roads1_rule_2 = mapnik.Rule() roads1_rule_2.filter = mapnik.Expression('[CLASS] = 1') sym.stroke = mapnik.Color(242,191,36) sym.stroke_linecap = mapnik.stroke_linecap.ROUND_CAP sym.stroke_width = 5.0 roads1_rule_2.symbols.append(sym) roads1_style_2.rules.append(roads1_rule_2) m.append_style('highway-fill', roads1_style_2) roads1_lyr.styles.append('highway-border') roads1_lyr.styles.append('highway-fill') m.layers.append(roads1_lyr) # Populated Places popplaces_lyr = mapnik.Layer('Populated Places') popplaces_lyr.srs = "+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs" popplaces_lyr.datasource = mapnik.Shapefile(file=path.join(root,'../data/popplaces'),encoding='latin1') popplaces_style = mapnik.Style() popplaces_rule = mapnik.Rule() # And here we have a TextSymbolizer, used for labeling. # The first parameter is the name of the attribute to use as the source of the # text to label with. Then there is font size in points (I think?), and colour. # TODO - currently broken: https://github.com/mapnik/mapnik/issues/2324 #popplaces_text_symbolizer = mapnik.TextSymbolizer(mapnik.Expression("[GEONAME]"), # 'DejaVu Sans Book', # 10, mapnik.Color('black')) # We set a "halo" around the text, which looks like an outline if thin enough, # or an outright background if large enough. #popplaces_text_symbolizer.label_placement= mapnik.label_placement.POINT_PLACEMENT #popplaces_text_symbolizer.halo_fill = mapnik.Color(255,255,200) #popplaces_text_symbolizer.halo_radius = 1 #popplaces_text_symbolizer.avoid_edges = True #popplaces_text_symbolizer.minimum_padding = 30 #popplaces_rule.symbols.append(popplaces_text_symbolizer) popplaces_style.rules.append(popplaces_rule) m.append_style('popplaces', popplaces_style) popplaces_lyr.styles.append('popplaces') m.layers.append(popplaces_lyr) # Draw map # Set the initial extent of the map in 'master' spherical Mercator projection m.zoom_to_box(mapnik.Box2d(-8024477.28459,5445190.38849,-7381388.20071,5662941.44855)) # Render map im = mapnik.Image(m.width,m.height) mapnik.render(m, im) # Save image to files images_ = [] if mapnik.has_png(): im.save('demo.png', 'png') # true-colour RGBA images_.append('demo.png') # old behavior, now can do 'png8:c=256' im.save('demo256.png', 'png256') # save to palette based (max 256 colours) png images_.append('demo256.png') im.save('demo64_binary_transparency.png', 'png8:c=64:t=1') images_.append('demo64_binary_transparency.png') im.save('demo128_colors_hextree_no_alpha.png', 'png8:c=100:m=h:t=0') images_.append('demo128_colors_hextree_no_alpha.png') if mapnik.has_jpeg(): im.save('demo_high.jpg', 'jpeg100') images_.append('demo_high.jpg') im.save('demo_low.jpg', 'jpeg50') images_.append('demo_low.jpg') if mapnik.has_tiff(): im.save('demo.tif', 'tiff') images_.append('demo.tif') if mapnik.has_webp(): im.save('demo.webp', 'webp') # default quality is 90 images_.append('demo.webp') im.save('demo_highest.webp', 'webp:quality=100') images_.append('demo_med.webp') im.save('demo_low.webp', 'webp:quality=50') images_.append('demo_low.webp') # Render cairo examples if mapnik.has_cairo(): mapnik.render_to_file(m,'demo.pdf') images_.append('demo.pdf') mapnik.render_to_file(m,'demo.ps') images_.append('demo.ps') mapnik.render_to_file(m,'demo.svg') images_.append('demo.svg') mapnik.render_to_file(m,'demo_cairo_rgb24.png','RGB24') images_.append('demo_cairo_rgb.png') mapnik.render_to_file(m,'demo_cairo_argb32.png','ARGB32') images_.append('demo_cairo_argb.png') print ("\n\n", len(images_), "maps have been rendered in the current directory:") for im_ in images_: print ("-", im_) print ("\n\nHave a look!\n\n") mapnik.save_map(m,"map.xml") mapnik-3.0.9/demo/simple-renderer/000077500000000000000000000000001262555547000170365ustar00rootroot00000000000000mapnik-3.0.9/demo/simple-renderer/render.py000077500000000000000000000012511262555547000206710ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function import sys import mapnik def render(input_file, output_file, width=800, height=800, bbox=None): m = mapnik.Map(width, height) mapnik.load_map(m, input_file, False) if bbox is not None: m.zoom_to_box(bbox) else: m.zoom_all() mapnik.render_to_file(m, output_file) if len(sys.argv) == 2: render(sys.argv[1], "output.png") elif len(sys.argv) == 3: render(sys.argv[1], sys.argv[2]) elif len(sys.argv) == 5: render(sys.argv[1], sys.argv[2], int(sys.argv[3]), int(sys.argv[4])) else: print ("usage: %s style_file [output_file] [width height]" % sys.argv[0]) sys.exit(1) mapnik-3.0.9/demo/viewer/000077500000000000000000000000001262555547000152425ustar00rootroot00000000000000mapnik-3.0.9/demo/viewer/about_dialog.cpp000066400000000000000000000016201262555547000203760ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "about_dialog.hpp" about_dialog::about_dialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); } mapnik-3.0.9/demo/viewer/about_dialog.hpp000066400000000000000000000020251262555547000204030ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if !defined ABOUT_DIALOG_HPP #define ABOUT_DIALOG_HPP #include "ui_about.h" #include class about_dialog : public QDialog { Q_OBJECT public: about_dialog(QWidget * parent = 0); private: Ui::Dialog ui; }; #endif //ABOUT_DIALOG_HPP mapnik-3.0.9/demo/viewer/build.py000066400000000000000000000024631262555547000167200ustar00rootroot00000000000000# # This file is part of Mapnik (c++ mapping toolkit) # # Copyright (C) 2015 Artem Pavlenko # # Mapnik is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # Import ('env') import os import platform lib_dir = os.path.normpath(env['DESTDIR'] + '/' + env['PREFIX'] + '/' + env['LIBDIR_SCHEMA'] + '/mapnik') fonts = 1 ini_template = ''' [mapnik] plugins_dir=%(lib_dir)s/input fonts/1/dir=%(lib_dir)s/fonts ''' if platform.uname()[0] == 'Darwin': ini_template += 'fonts/2/dir=/Library/Fonts\n' fonts += 1 ini_template += 'fonts/size=%d\n' % fonts ini = ini_template % locals() open('viewer.ini','w').write(ini) try: os.chmod('viewer.ini',0666) except: pass mapnik-3.0.9/demo/viewer/forms/000077500000000000000000000000001262555547000163705ustar00rootroot00000000000000mapnik-3.0.9/demo/viewer/forms/about.ui000066400000000000000000000062731262555547000200510ustar00rootroot00000000000000 Dialog 0 0 484 558 484 558 484 585 About 10 20 461 351 Qt::RichText :/images/canada_map.png 190 500 87 32 OK 20 380 441 128 <html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Bitstream Vera Sans; font-size:11pt; font-weight:400; font-style:normal; text-decoration:none;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This is a simple viewer for testing new features and fixing bugs. For more information visit http://mapnik.org</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Copyright © 2006 Artem Pavlenko</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p></body></html> Qt::RichText Qt::AlignCenter true okButton clicked() Dialog accept() 278 253 96 254 mapnik-3.0.9/demo/viewer/forms/info.ui000066400000000000000000000034701262555547000176660ustar00rootroot00000000000000 InfoDialog 0 0 277 249 Feature Info 10 10 258 226 Qt::Horizontal 61 20 OK Qt::Horizontal 71 20 pushButton clicked() InfoDialog close() 216 408 195 220 mapnik-3.0.9/demo/viewer/forms/layer_info.ui000066400000000000000000000051441262555547000210620ustar00rootroot00000000000000 Artem Pavlenko LayerInfoDialog 0 0 446 344 0 0 Layer Info false Name: Styles: Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() LayerInfoDialog accept() 248 254 157 274 buttonBox rejected() LayerInfoDialog reject() 316 260 286 274 mapnik-3.0.9/demo/viewer/images/000077500000000000000000000000001262555547000165075ustar00rootroot00000000000000mapnik-3.0.9/demo/viewer/images/about.png000066400000000000000000000075441262555547000203410ustar00rootroot00000000000000PNG  IHDR00WgAMA7iCCPICC ProfilexK@ǿHAAj*],fPC,j4i!U8Dı@7AD.t}{޻w9N]kna5'mmDH鞓U 4~>^jJ P,|> 8qBw7t2ms֬Ymݺuڵkp-G(q24#ll&qȑ?1}S~]VVc=fTFRSS_.@5j}2GbU_xQv =q?W{` ?cʕ+e2i$ (@iii2}tq8=+˥ ~핞IOOUk VeG'O~a%KܹsnߚNtܑvRydҥ`)**̥쁌{]k@r*\* ӕ.߼yS 3XwA acxt:*CIRW^2AD>uꔼKO!t:UE7ÀG@Ӌ0}Pݮsmolx20.deoʕ+HQRuy,oA#p7244*nӦM*HOO)SkTD> O2vDI*1cTA{ Z(t o0pO%HP# x~poMЊ3bx*g] FWho7j H@4j0p(F\#sH 9 sޙgoܸQ:6lOI̍ qDdZ1ǡ!р~~Xp׍)s62f⢛7o{ %N<֥X -P9=C Fʴj@uBHB{Qz H^p%p)37ލv w u0f ֬ sPdB9={.4RĆ%u7tPim!;Af3tO_|n):XvB3@Cj%LKXBv Z~30LُIMMLlc"3dJF`@KC=Ӑ JUΰ8RR9g)ѡlX;T`}A2T@(sWMefddL[Ioٲգ  Z4d͹ c;Κ=Lo@L0&S rŨL0*P-(}zt(NkКQ͜쒒uړu_Q dWL<ɞ4RPT- NC67sLuc j +4w{$TIݬ > L3o z;Η 8Zo8t 9kٲejB ^ \?;.T\b]*x2F+jchi7׍U:q =`psXc$S8Z@P6s]7åc?o(YEtYJ: .473A\f6/AJY8fpx(;3gμ_cĸ fo|kP`u?s`YgnggKuuyy .bt0>Bz!hp沮c46FUUU]Q}Rs,Nn^ {1}5I3C`s]o:27Upy>3Mtncq >J Q̀z0ό7o_ c"6N])Y,%1_Y}-nN;;kЛՎf8kv)J©Voq:e+r>; ƴ n_1oSƥ˲E~DiFi{=n->F[]p{$$y"%3/%"6(eG% vǀ+kpќ1o"cgPS (&Snuz8"GG%o-X, &J;eZ=]w-*^D1㥕 E$ssyq5r9sܹ{Tu5eǩ> zze0ZC)kG$(|!Xw|)/ߞzl Kuc38x]a]ũ->R zxTwWb *KGdev*T45` l8\phnQS`gb{R+^ʰ{9 n|>FjJE_c?~%*Jlsm otr1>{rێǭH:=}LQaDZ>@^KK7ULH/ָWFcLw#U5Ѷ#=] IfX7$3sD_ᩆ9,M|=DUjvBHۉsxXZld' 6Mͳ)F"i2|{>qcȞ]jg/ȭPcY Ed.عhv!YXs+0 1DB;8jЮ@ "4yeAR.xKq̱LFNgojVE%yGB 2݁^ L"VhEs5IC=DssæT;p *H7=Ze—^ouk+Lє )ۿYY&VrXסTqzW5uGlm9[I鲽_hVuvg|ztqq=Ic# IR|[&Fe$İqzQC9NPZ,Gmn„xM?!_dG9{p3qqߔI; JE t,AG!0úŨWEIh"YZ7TyY,é1>~X4 ,zs5J$"A 2L"p?pXؾswy Ɋ{_Psf0;|)Bi{İjpt8nlzs}4RnvS~4zHbJNءH1s9Vզ'(>bÀ&tc;Zyy:W$'6*:EnQV{"g%E"sf1Lk3&s,0tvqq^/Zy*jh$$u?pJ˶aqwLJ9XqE5}XEǜB2<Ր#F1d}U|_êMVmEy݈.֌} LjtCg%rA@$Ei4._VA@o;|‰:}˙q& IxBhjeH62ol:x}ݹq^_HQN6Z +=y̸Un۷Wn^cGCu$=M$IP1mH-#DUa9 #*:Thŋ> %4i{ι`P1I}^):@QܳZdYBG*@`מ67+](*X4و%_&VyDa^ىT~cM7w{lEK~e&uKp =xvv2y~]"ژ Ƅ(E!^=,BtHŹİ^uuLBWf1 D]ҫ޷๊#GLh04وm;s+?\*dNR '{pCnpåǦO!I~.Tjeau\*``YFj:XlPO6O7Y‹ z=5ȋ$I9hY )hU-(ZUvԳ>wܹB[0W h4Hm#,GF{> JDn҅W>_8VEQҌѲ%|݉ ϜqLj STw'֭;o_MmGcb>hCE8#̊BIbB#֮~d uĪ5AΚ1-=-z+) ET&ze:0l t,px>[zL䜡]*CSjkR Bho6Re{!jNgȲ wa'{ZVquAȺgϳ**|;rԨefyg /l^uo?_ lT8,}Ԙ/6$6,)mj?q33M|pSQQ)ugFx`LZqΜw7lQR!v]لn'Vf~ӘE];$EӤ,ALhc@Pb;],`@n@dLJ?HAI~4V9*ݮxĔm4I,hD26i&> 1{ҝ68z;o+i#b h|5k4}=L8QBA.\?أ$ۗ7lذȀ*V0}?$IΞ={rbᐟ&_zSC{fKdհ.ԍ6wFڅ5K+WxMo爮0: %I~[ Y0瞛Q_׿Y5aBZjjLIIU4#˒~6.8B/2Wߛ1cRVgȐ׳;LرcǞ7M?Xkg& =c]CB$ x^3V#= g{CAȐ5p/ʾSl:o`/ىJ( {KmcXizx+((={޽TV䓯ܹs'Nx7o۾٦K=z4AP>+V,XP?䓑ku}:=zs̙3gΓO>R@͐ޜsNQ󂂉ZgEƪ{E\M[Og8Y0(m;77­X`-G5~8xEO>=K;,|ܽ毿>7­͚nm* 3˖9xR $=)~Oj8ԪZ-||M G*E"";.)\31Y8>aGOOO.FmTgvjhh)HAA~Jr5+5s!ljjZhy'ر_{}'DD6^voy9 ~_/.`O>h4`>'fX;⒒r>￿EpqY 5N A01Fc (zRȌ ӌC:22+ZҐuzk;iMQ0468|SXQ-BU -UKhIɠG[Fzj՗d^{m7(Q]15~54=`*5VEɘn}1/xr } S&gS.-[[h4R23`+K`zɀ@u]Qz=p%Kz8'999)))mf5q}$'xGg299d2>[buDERg|@T/(`LD߉Ӣ7ŭPUpCg޿vԨe_|#:3-׋DKF_~_}tˏ}^Jܼa;FG 2nȽg EQ%;ͬ JMCu1hٺ<cEo蕡_~>9wP !24͗"!2P3gH!2$ @$",˪+MF"j@q9=-"b"wӣh4$577O0'2e޽{&ve" #DÂ٨Hm"R12d~uZZs3R0Qi"$̞'p#>5*%(X;*$'%^qۨ+o~3"v\**䤞'W04%!E7|1R+ #?gI:>(b9Sq8O&O*5Op(2pԤ!z\ DYr#1j Kn t`3(+=@ŵIVk}}2֭777gg'OX1b0z~„ n^'*E@PXX(ڵkg̘9=rn[ǏT~!aÆ'vclH)d6]cc.VRƏOML}?yZeiYeˎ,^2o߱ǠwO*TFz;dYQ]/*}+$M6NMn VuBIz{{7(gQüygz@SFeC4Vu c:5,5N$G(T0`cEBA"!!>,P@ V6lؘ1c&N+eO?aإK.Z(77`0>}:''OnpYjط~{W_}uuuuRR ҥ-5Μ>;5㸉'ܺQ)CwJ.!i9 *B,| Cu .-)yfOm@H(aتGRêoڬ5c|\!#QQ& @IQ3 '}.>/9%(]漙k\ y"$Eb + XQH IRQ0Q`AG(|KQ# | EQ0ׯ_m۶XzEQFGڵKQ &$ ݲ(:uj߾}>/33sС,u.\8iҤ#G 4h4:] '?qr}~?##cС>Gӗ޽;11111ѣMrރ$קAv!jOQg}dØ@H?~˕f}$ID O,AdW[^w]6⪯;qBja'1sϨ矟(ʯ׶Ec.|7)yFw^s6 IDAT1! N!-'MX+8]~eYڡ0g/1u<Ϸ=-(ۭ%(߸E Vƚ5oư n~Hs._H7<0n*} [03N}ԽMMGiq$w,t9կfoW|83"+ H(#$IAI@%Q%IhiY B$I,K"x娼($˭1$IGt"+a|hq"0@x㱦mW6/HaQEEc˩ٖEzbmƿPQe+RJR;i )~Ϟ+..ΐe&OMI8,mtȑ/ժ6i@vaP /'ה/=:+roO_nƪMQFQ[پګQjۺܞ=5n7/ʸqVWҬ[Xvu7$&p5#'EQbUM|(dгf}L rwdwUӭvLnA䁝l;8]&{1zrv+(NfrJ³7y]]eǽ!ihoR?/}iOPZͣ/~vD=.T.3 m6iH I< EIA1'"K"t3dYl˶ uJ\˚fuX#HHba)IR4j@:eVZβ,3$ŷϗ w}$QXTԬYCg>R`}Bj>ק*EyvbHK:ZZ99q99=e!) QY-DA 4ʼ1Kΐ_|k[ K#fy[fh^6Qm2j/铠(ʝ׏~&( E(63?,9s>>âeŷ F C @& #T }S[+ nu4 5$A;}(=FQ:EQ$I1L5i_j{Ntb\FV- TCa! _5(1&ec4D}$Q$@sИK EVUT:mX=o % _DH4~ /ݒ-;gIn4xC&^ +M [gT0iwyZkh 1"teE>9^9Yn;޲Ufjf#>]޵ʮ;0 M$YHh[!cPwC*uyͮŬi-'(\4amf= ƒ .Y궢,n'lW-AܢGdDMީ BEG[bQ@V&+^Sh^eI.UX.GK $5/ʪ\sIM]>!4vxmI7PUw 6yb8 ^5UUFj;ޖ]_.G MP/X 6@0xD/`FȢI#GtU0ƕv#i[.8!Ig:Z }RKTpɓ ]'wyC΃tA} ׏Hޣ5.#p'ktpeb`ӞU`,`(-Ĩ}֕dm '@us(yC i`(.N鼋B;JQ/1A!Q<+{___F=GްXeM9GI[?~*7jq}hϞ՝k}h!&šA8lٛɚmE:^9ކm溝OTU׌)taA~υ`()Ԫpk$I$X̊$IQ7|$ፏ3pl?^I yA۶{nWL8 uyI[Z”YƟkgl; %9Raq+d6`H$fe~ـ(D叏CEnv95^hH`Y D_f L;+v&Tt8:>'S19Jn(-rD bMm7H !u,5x8Udӟh$I$&-d(qEAB\ 7́@  `(rm,=TΒBV*V&YA[΍=Y|bVVj 1>Q˰s7nvqio᧣A𾀤 ;$=  .tZGWZn]` 5֤O;!(%1dov$duZe8s*.@afL1MM> "&AlRk*H3D,58v-ZNT3~)Bgh ֬ sѷ-ڭpiul1@L(N˳XE=yĨk? FE( O;{Yq4,o6ne_ f]ͱi-L]  8x{~ʚQ7JE;]Q_[1T拢 RaAjyVU:Y԰Ԗm;**+t8ms=2axEjW#FM=j,+ q7\O]o%f t4Ip Ypz8@}֕ kΩ74MOAFČ1Ds;.%[XT4j_CwwqJMsxɈmv޻ɛZ5ǜ*oHJJ|q/U ly eeUF8I3KǍ[a9<|@z/:`Ys7Akz%ȖvEX@Xz-^_nI骈%ϧfY«χ- ^$sMsfY" TyzVsBX3g[ӫ$px~޿ԸϥtͷjMVM;zʌ`cX,̸1{YI-TfE5@l<G1-]§N;{Ј3ƞq@l]"w DŽEgY@Hꎟ<Un?/uz{I)+DZ}E!` :gRg]@]1 .ߞ빊5 mp'nUDZf\ub؏]>{_ӡ·y+yG7t:D s#R[;!h~+}cvKn`xi; TL1N&L1#8x>TNJEv3tRDkuDxȊ"C{!j,c|:jm}t-oZ @W=PUnTgްka; ɺX9%%eT$QB gGj'}%Mћٳ<UÇ1Vwᢢ"Y *nY,$Upc7_)s]a^$ )z"w\&I_07⵵xQnYt1NhTv/E`XWYȶ/2o(O͍78, "@ZtÁJ{/*, |'7;g[%5s[f lUպiS/*ްa*_WV4eJfjj+j*Whǯ(C6#&aXWl)T#Ȯ&/bc- Vm*6FjQ1E&@Ԙ1c z**>>bٲe%'7;!zZO>:Β7^XCs]8ž9լe$hehhF)e&ю3kgM9ȬhB1A1*7z>;DwK}f1{?u ($"4*ꪡlC(,l̙ٚLsݜJ_rǎ_5i|DXGKvv0# /2룏Nl׿^UV#Г/FMR&ev8fJ7# DژӍNc!~1K+K,A!E$A 1d`o;v,;>ѣGey ʑ#G7=q祇vQߢ;` D 6oXVJ+ *c|j-;-X-s?ߘy#/+ɲ_q!Arom㓨^$לi -J2sBN'4~ߕ\h;Νt<Voi/iZ$lZ hvZbm1#nh$**u%;`! `DH(@[oܰo2qӦ կ&Lꈆa͚o#UUzy=Ao=P6l(ojLiӲ"C:~slVtӰOI9`x߾o_M0(̟_p]#ITzx<*N{IIp^n.:+H;vl0*++ŮUǥ?~{qq^ ǐ ).Vȝ G`cbq(Ի@XH pnu< r ,yY!3-ӍU?P$˒%9g .,)/L+4=b5vY@â6Y+S6t6f3g)$AX A% 4!gP4B[w-ܚhD]ex kVj-憆S7\' 2L3$sȐm*׮]bE7c[內zw~ K/˙p|yFx֭?_ZZ?'×a,W+MqzUc `uu˘|H鴪 x}l➘` J'ʝސضRYU*U81Ka; Qj(LPDa"B$h<,x<"|+ H$O6{sMי&'p^^κO 3 ?AyٗznO(%UQo@@ؾgǷ=/[Vz_<𷑏7ݻÇw+ooI'7. ?>-"+h{'ܼ o峕+O/eÆ dPH?ɪU'_}u[º^rm۶m۪7 1fP(3lڴi޽|Ah>fYMEE*$IBbB_m۶Y橧NνvUgl8f̭ml.E{aS `ARap`[Xʱ*-ʭ9bdEQfjGݜDK%˽2l5XAP*$'D /VV;5VDHb8s=vnksO6oiokΗæCJbq_6IP\5WĘSs bEYyySOMr+,X0}݉pX_jRgn=ޚRP%Qnm;NC" T*niwZ"5|1n&"}"hyCo[wj[2YYYmܸQ^x!Ҩh׿{F?K3gNLLBtO50j7^(L3$n}$ezGH3v]KZ鿚9*G5cs`(,JYwwY2?R]O5kГy|r5eKjN>SjL);ɓ CeذIeMNMz]pXn/'0 j]}Z#m P:uh)3gEת^/EQi:,H=gQX01#?az7oa//?T-0U+$)Nhk B)kiHs5W ̌[;kVeXT,AQ_\<,zF7YPE~Xe* i jK{ k.8T\\>_v{i#t dF=߇TͦE⠿*!P?uDOH/mQ p/dd.axUMKx &g ˕eAzFwee^@}BrRJv&{⫥oٷKmDJw 4AMNp٘c(@PT|_En[M ﺻc7X#.*0T8]'MJGY26xpYz'߹8hB!ᆘ6)IȊilk oH7g F)rӕ`XK dk^%c팫9p ykYBMĴ IDATzٙ x>;GX`Fi]hlTv[_q3XmcuԮ_-}Q |荚cİ?6=+\!= psmz /ZT͟OohjjF,X0履77`(ݻ>. we1tWj޽$I|+dy)?n T$E|׏ ͗}M )l li{̿f;%ԃ6lQ bHFm9_6E_55퐑aOG~k1˗/?\s^tE5 @:ݵ_XyZʋ`͑E Hc~ q u.>R֐ "T=|z R)rD޺Sٻ4`(plLt]jv۲1Jb"+SKGR?m&͊$9s"hTLoNҨWO7/Ylda2]eE*98' è ǵ\a=g]ßozA'K$xeۋVj[3dRxk1Fk?m)Qk٘)Tv&*aE' cBNcpo Q֚&g{Z !rnP_z%,t (rGaXt]tʕj׋F3cy$"uvpD)/} }]1QU]+1:`)ƒ::@$IP9yx2\{acՂ,o;XeM<$yd*ߗtX\3+F`ex8鿾8a{g+]W( ux"Ś^\6>}sCCL0ܒTՆ-BN&?gŏI}Ռ!ImwZpx!@WiQl1uGĂLxΧҪwFv~f`-ӷ`c2}{P]ͅOѨo}7Y}/-V0&1&CQ]1hؽ"!NL,`!h)ᡗt*"5\ U*&.6-$Iٝ+$cRGUKƆ:e`_,NaBDBFp=t$Pb;N,k鈠n0'=dFZHNaԩu ׷yˎ Co&O٘o˻doy` ٙ _~EIy$IiR|k1oeYQ9 EF{:9gL9(F#bpPÃ4E?Ti "e+&F^Q q4*5Pț ;=6l5kVrR"yNϮ]ܶ=4*Kk1z#JbQ"$=!|w6`H]~ʐ~jX1v=fiJ,K2j>=|عS4K4oء~J IjvTo1uM6?1-I)Ax1|Sq–#f-luEpmAVUU=K.ݰa)1UUeO>5knGIQ ARAI"@V֨i %DDJd_IIݡ*' $c CT$J%KƇOM N*+ӸG$bcB::]AAzۧJ?sL`^"[n(1;mpL O6,t&_eUӮ}ժ&GGE9Y8v^Gs #Ϻ)2&: mv$ o14 nsDu6:z?;uCnIJϤfTڗK|e~4mNXNt3|oi O}Hme*GFHLL㮕kaǗ nǶ"nۈ2v/^P:uz3?zS}c߬u]V` ߰ȱ"h ڳg' ڝN+~76Ժ6n޲gA(+ۺ+dXbYJdk-e͕խҪnʋ{f\Z~U,EmU`14 \+/Ypub i {Lꛖ+ dcu2o眇ڊ7DE]y[^}S#މgno7666c޿b3H%Y qNȅg=珉2}rIÒ7O$A{t]D~ħ')]3걹{Yy̝czDk;}5k AK֝,zzE=c/2IN92yoٲ%;;{=4zGom۶Z꥗^Zꦭ[r-MUUՏ? DdUUORZdLŨ+cL)ayHBqZ5y 44U.w'Ib@+ںo]:lvGm7h4 Ҝ> ec`N4{6DXgQCo[mǺYBX}wMϿ&,/]j&]Y LMM|ꩧ&ܼK7\ [$ZU69w[~(i虔dXoV."n)IFeVs6k5C`Yn`cykoeqK<ܳ%''MR/ϝ;l6??~ӧw}ӧOy䑞{xl^xaڴi$^+$^Bj0dYkJ,ˣE{(T^]Z\rXn~?|&4d켹3{ (Ž-Y Γ!ّ7ʖXcVvmZ7]0ɃS_}S:uJ^tqyeA \f`'$3@dI59, טeY^=sS.U-1].Ot@ =o$[7.Էyq!(t{oۊ+-j ڿccnV?p%''Ll˓OB9$ ӧvIyԵi1+5,an2-l/8r7*V ::UG7؈Wꨨ3=CITg~#vlu!%5ӏsfq&1'#v?xFZwHhνZ*ٲa<0߾+Z֣X&\1ۧ6/헎 s0rӦ(y^D6;fFb|c=6vXEٳDQQYyRs#&b󿴹ڨ%Ss$Uj2 cM#ֵ{]~W0d_ @a\|ɛ8}Bφ(p4$ѕN^•y*3]O< qlu/U6"{NDA 6#vVMiXAm&҆z;Ż A9&~8GUy= @3:O$zi3b/''زe666V?믿~5gffFDDNF~`{"Ar3ewG1!|9118>$,T*o ~SzZoܴ5? * 262%щU{N iRw)bvbsğԓx;>3j4w>N_xY&e[p[L JHtZ$CRwWO% lQuLc'nMu۔Z)&JN>1ynϏ9w;.KrDDy'55OӚ5kdY ۾}nX,5kpOce5k`YE!<<\i@h֭of^C/6[*J97!藋`{YPe,˂(<n[qxzp 3 sUZjkkOIJOKWƜ *hty,N$~c Y4謎i %L^/wTw?3>Gx'/?)PmAI8.~+tS_+!ѽ7~{,*k}6):X4Mnfo{eP>w\ֶbK-J墌c#b|\ ?'p~[[ӟa=nϤ*sPsxޟ_R;6^CYF5YϜnv=2/q|aOeM~ϕAˣ!L8Qx'2/r0qFHAA4do{vVM6mZ[@̟7kB؃{4?$+,~Jinv 1Gs^<=_:ϛ ch3~/~/=~<3!dk~j$,ߵg a+K.d%c:`^/D&Tϴ9ۦF%5s,&+RY,665!*Pe85!.KY֞dD[gCUA}Zg9 A8NP]f3oQlR´ST5;t𢬐*Hi:"Ɯ9S?YHNolYA$P#`{egSNUl\v)((W^;ճcŞ>\1Gr l]s**CÚ~L FirnmSD^o1濭 Bs윳Q;`-Rjeӫ WZFUG!7#?fXvJxpp,|dbىL9"m-5+2qŰ}ͭQv~(+ eT5Y= L{qDQ8jVacfs9^r#$ H ) كs̸*oW<^ ~"7!D:]QLm+IQ {)x]4+-;jJ)ߨ~T#afx)/l.~RyN+wJ>[pц3OvҲGgnC[?u0qPxj߶'[e|"AZF錏XXDqCc0QfNkj=@'?@HUZӞjw//TI OL27U[C_cCZ kǝ9z5u JcwI".?jK qa=^WP'\`Gw5@@{Ӱ2VQF_n=ĝz=AIJ̛CB-dqiA;nDtG3,%%o˳5uwl;oE%9?UF!pzۑd#qfzu1Awm,mMv )\/_($DꛬA=~6p䍍͛7}=% o}Ƭ'>@0-3:֕7~?6wc $#~0C/JEiְ7@x< d0RA0 C{h%,K"0o30RMA|rygWDž\ K[2/0qmVx$0KqlQzWfƚ IDAT O|Nu/>Nסwk>c;*uVf-h{tKʊ 9H(Z#3_ H3&5TcQ&1_ U^[ؘI)ƥ~:omDΉf{,P* (ٚwؽoAn>qSC@Ɣ϶o?l҈>dCR +BqIc)0KF _kI<47 2h;=$ID^NEBfa:B[| Aw TX,.O+9ì &s`VA+eNUV U^E5e4: lf\4(J#:y /EAcךI?=7M,cL:r#fS xS@SH#58t$75?9?&F>]7fHqZBɸucEjCþ^Jh hD͎qv9ddʑp:FnpDܶS6V*l9N0XV=|[бaqdKoKX=pu^՝y ye CBt!&2K2KKO1]jgƕq4.K¦sj"HWh7I huXQ=' e {pQ}c#ӹ,vmS]jùS!1>ܬ}d}cWlIY(&IRsq9om}6R͍I!MEMZqաnlNgXf]/"POdp":cGs]ёj(_:[wUSO ݱ&ϛYvT(Iݮez.JF4⌍*E y@&IU[. fV~Hڵ7V<ܼjW_4;\hj e u][qcOˋ!; `ڂޮرjf҉:8 v_qB EՃh4S&e?a٣ d:[ڶS>.VmDGjF4EL/vO0r) a$'ǝ6i",OH3u?'-zd'? ]7=kVV߾3]U,!n1heYWh}7{A tښNߒ6zar+W~iS x)O7l8 @ii\pwpߔR CZn[>DzC3*)1[~TαK[Sd8^|^JjxoJ$iG z3=-Mr16ݔe{u- [-?xL{ 'ϔ/)19YG--IIe^C_ czeˆr"W jmmJN0_- /Eak˻ti:0`ǝV=;"`}FFęQ@0(DkA1KX@"Z XYļU:Q}ISak dF НHR>q$ l Y^/ z8/d6Gqi[}/<=3DRH3 ^Y5[ =ZXѡ`N{S' ̡ٙO?W-^XOSjj3 ?}[ȧ1r qY=SFdʺZkdmuE,I1dyr^3cLȂ,(mtfܼQCS$ K3^PDWp ay@UQiRee_eX ax`N,~-b^@a5u t]R&U#֨$8PWQёF1;kk&t3KeٰubOw#"hE-d@h((hP I$%}on3G."CҌ95.X?}>FRݸ %N-'&'jlOs&&avZEFspM, bfnj)( N׳6Og DS_fӲdYO bmugnDƌj%.7QD6Ѭ͍zu{`=,Kf4V1JR+"xZ-''kj_m۪ﯫQf AýchnvNaEEF,]bEPWk%f׮M*:3sf5".R@%%&$ǝ*?pb|ZBIy=`()ܘ`j]=饿%OoRY6&%'z]eGF{G)Aw۷sy>A>0D }G$yy=P0ث&MZo' p]y;ڤʌjŗp3Y19べ) bIZ/ 8wN׬Gg'0៯vرFr nѩS{>̎̿mVtc?qtӇ"V_ ~ͣeem}W~=_Nj0r"'+㞻oLG/ܞ&EiG}SEeh<&uȱcηz3oR`oN1w"zfGOw ̏$Q0rnj]\ֻ 2CxMq"Ç߭EIϮʸZΗw7zyiqyz :I_ia2|>G*IpyiVT49>.$+78hPMZZ*rָBP0v:^Wy!2Ǐ\ʃ RgG.[+zE]V;SVˎߕ鷻w?0=|c{쳻~ߝ>xSo,Hҗ_'?ʟyf_?ycii5ItSLvqCbc1vT'Kz4?sZg҆zŻ ^Iw7qڦj_`-C5 %ّbO.M}q"Ct L nhq]]RŻ:2(.27|`Wew;2 -" C I$Iʛ5 &$xKu$ϷevH# a+Qbp4񱦬Ȅ8stI$ M7Z'"ȠyG,XvkEQ^+ti~5 H04Z(-3h줇:t>g]ĩBC|FJvKeeG\*gT4 ~+6o>SUu'.;X=pq׀Ȍ͋8}&/__Z0`R)___0#ׂ uYWMܖU񂊎xJ 0́"VXܜܲl|x@YB㶦 mN;rq.p†*O4]mYsfd\6_t8($eb)%IDp׾Rm-Lz.5Pi xIm.pDՌ HcY^/NjP.cJ04bYms-1L?KQ]wMx}uu3b{#X,Cy#Z^*,l55VjjPU5gN$իsX&!jK޸m۪0E&}{~ʼȯ Z̋fRB(&n?EJE7@f+vټA#-uDG74hijJ.(?綾][P_ojo( ; <\rlk(ɤ&Ij8}fY9&5@k+;;~PVhJ[lzvJ| !)gWEGwܻ|bGŚ:c=7N89!hej 0rEiG#QC yǛ&0y{-#gmSta! ^˚,#'띧[\*s2.&BG)?/ҕ:cuNrԿjUZJN$I 4#H24ƲZ2 z5MS5 "2u:}#b))g'NqaBK b[+_{ɱ~{׿mo:?#ζ0la('=u,99ûl<^/kl^ÊndWqiaijj5 wϤ ǛZoCdD8AzFHԢpe*IW[&s~Wo;)'4+NTVa@y (Wg Y~ f_dv "~,w_WJL^NՎ`7 henkTMO,I3&&=Ϗ6OK5]k?$"#}{\kSU9%I"IBB NsQ,Ѩmv0e 0 t睟ZNk`G`a߾Z/fV8}z`b[op{U\ cƄ@VV8lKDKK[!0\k0eO=n&b oʺ U5L!p"U^4|9Ӷ62zNta䊚&{؉A1h^4-֤qb~AoɸvqZz1OU;j2?9(JgkCCM~eF'pLӔ$ZazKx a[1h|@/K T,.GӨT$YQum^ǚ!YƲ,#$I%YuehB@B= jUFC$?`0rz*MM/({׳5syH,[yޛg6&4,Бi"D}ﳧΖU}Pښ2.zNXJ̉/0҇޾\:d~L 40r=ğпřaǛVZ\ʶ,KTCBt0濿.տ^#Qzs q5Th0KJ2~oüLWX:>~䬭G$IdE~(Rt{.02&lA BJ&Af[p*ĤHlj4B0 ,K !i@Z$gw>v //v 5@nB0g[8c v$^zzS׿V|yy/fL0dki抻hwuY%d:ǃSnl1AbͿxoH W BzQӈ͍mȺ ?4^w/܆!^ NSNye)}W Euo [WOhjbL꿬K "Vd (c^ HK1B?]'e] ^k GA w4[mn!@/!HDQ$ Ÿc-3|q14|~ř*źHU*A lsQ>T4Bsꏋe Aԩq/駷_Bh͚q'F?z%kr[Yw̜٫wbE֮]כ7.b1,l|;*׀IxW.=~L|Ѭ)S8uVIMy>~Bd=U7HqqBcaT 0 h&DWцNG%k~Fb^Y۟7W!?xhzh>9xeP[ߩRy맋SKsp[$ɲ1)HBL]хwvy].Ob\襧vy}\[[ؐcO?f,~Vש!KoI z\WIHW% E˲yC%AOV5`$sᢠ%I?( 7Ł3oe|~;k߽wje{jΚ9GfO,mkm2DT%6b UN[lIfS i񯺱.lg\Nb~NeIK)Л(.Mɜ5{.L%cL&KTyUHmNzhlHoVCQYIK7{PҀI[6m+DVMV14SUnͫgYF(I$h% vc|zk0T,kY Ǎ}H'jqyёe !mmvQj0dQ$:G s ! !FDNC=?IRy]1$'H"@`%$H3a3IVȎ<kl[woZ !oh*(:CzL-icEuAVDm2q,TmVxI%c 2$IRԮ ~'S|4 yJ2N]iRm{/(y.pV静fҍC-¿MO5\21#Hеzq"(lR eu"4ZfNg}9zǵܸjIsɉYmm{N4|eF ; }ȒZTXeI%Kjo#%%;*-GQ>YRӌf<$ɓ@Rӯh 3$Ybi&n.kMr>K#kcE?5QdtBSǛ8KM=?&@#S@t=T^K2ze! 1GPN$PY!)Ls 7(H4&R =+=uKsfFΪCI"_o.2_J%Id"@YQi?U%G`(eY2 $nϟ裏EJ?m6GAaAaёƛW2DceّM8@ 䦭 e+JvN=7h@u貶܅w&% BIFh d5- B`Tu;td2ڽo(,`vWըf!=O=u h- clMFUb!,dԌL96DV19inׂ,3M7wxtхI8I%ɏ~Xձ)I!gWe4tbMFeд/I<..yN[` wgDcSŋjz>G)綏⁺%{)Cy̙psʪ937-  R("I$IT|xIgRms\<6U|eIeFUJJԩ+Vdh9Q"hy$a$󻍔ML?g˒S{_vr''v:_ 'Hy)s` >%wl551)d,t>ȴ`̡zPm[ F䓓v/gdehawu^}$q'*/ן9`뮉kQEM߻CCBÝ/%u@DU !!&%+88-ջr.ev Oo-ЩǯKIP*iVg\bW-I5Ke]J]ǷueILN 59f̘p:ӟ:;;oߎe !BaĒ(ȲD3*es^eQ,K I T*$"Xۺ:I2,#**'9s&(^_^z)**?ĀyfaGyDmܱck+VHLL ,YϛLŋ?/N{WT*v۶m/rkkkxxC=hQwg}pz뭏?8BuyyYvΞ>_;wO~OrJW^R{}Eק} b2DAھ*8X#2 8F3f$42Ix)"@@J)d@"T/f {))H4cpDbDչIr="U@z$@ ';" tX>:W"`I=7@o @Bi Fo oDZ׊ K3Bv[n}ZZ=)jp񒙢SL)N'GK\2A3 /ܚ0^ H]^[1&5B38bA)S2[_v0 A?/JJJ~m}뎯[r{!ތP, QGF좣0Â(kBO>9?99y޼y}:|ɓ'.]jXۗTUUURRiӦofɒ%<̎;\.פI>䓜EX_=ٳi~'ۜ#G(/sŨC>qlj?%%%+V|x{&+P;/f;~MGQ /HC;{&2 իOWչJ2##$%"ݾ~ `̛[fGDi'?xb˖GT퉪*GPv̬i2k sAh{.6Zn$$qeFD{&DO}Ae۳ܾlfF~쎽ЮW pzC8L|#Uns.[vJ1"dz ;/}EAYuX@!w,^udJ@ޙWמ|D$M8qY }º1HKC>c׭R$I׫]µ rzj/^%>e낂Ԕ z멧JLL$ٳ999ϟ|'g歷ފꩧFܿ4׻om2gذXV-_(V@-ovcFhvᄐuF϶pDDL&捈0 %^2kzSP, teıVóss:ϞmhC8{q573YY11&ݺªUda4T6csP6,k0>x<7wDEkkWޏ'0apΝkc5:@Y3#c꼾]yJM.-R{$AsVAsWWBSJq1D)nc4ܮFž6V6֯_N{7ky\\mVeٔ$(e^ :tϞ=C ܻw'CGDDp>^|lٲ9sp7z_=.6V>3%%r56= 92J׏cY611==4ߝ4I+ϯEC"LF#ttuWuE<792><\^iZVDHBohMϯOo\)oꈺ:wU@COo:sy$}Ua̶.|rcZԩa  &GD`َogi~ȯJ*dl ZViZHZ 8AxIBw HZwkݙQvȿd{aߨFtttP_jj+"Z!I$IY,(:t޽6lذa۷o߾aÆ &DBȟR{t\5fbUVb20$ANgj} À$}kjjF,iIc7Gs $nHybXQY(?YG]APл駇\.0L  RK?rg˻^+%혖g¢~ q'H^?>)SVk}t6 xմLQ~v7Ig6eA?p5~>,LcY=?'^߰ *<yƃ@2 $& t oT䠠zn0]%xʋ 񹹹?c!Y$|qD Q*1bķ~UF?{Oe7FV%:c$66JBAVRö_6Ǎi4 ?aڵEWH޶XQ&vj̘7{~zȑ=RSʈr5:**&8N ;I2 jvH0֪bKˏgeW$I +@ѳ5O6>oIE好Y*39)ncmmɒ% Zb?CIH7o I@8A `FePV$C$ B $B45jEI Ʀ].x~twf5 .|78B~'e/_s3)))T*]l{:tZjuuuq[sJ2!!FEE}g,X1|nApI_}en$YS 0ho42^~$a>/Fh`.!^*(꫊ U@ZZHZZL{T[oظ#)(xaþ8}> @+pcf2\W4zPhZF^{˻&SVWN 'y{_zi3hLI{㍻y ŗ]|  &!!: @Bt( #hJ+h(ghs&G2$;^elzhKl((@vh[Tf<C {x衇22ҟx T^^hѢ{,88xѢEfڽ{wuu#v9pZcEEO?0ѣ23[O/x<9s昌FZ>Z%/bM6^vee $EEE;B[V#""s{骪*DyO]aaZx'-[8.|{vQQ԰,ICϟ;31_pN:ϛ7 VZ/JWVUcǎ\y_T*V}ٗw`3҄>Y]h GE)\zzڵ3zѣ6O'OKo3][Zt.8D5h/mO-OvKr@.;\< k!0Zӵ0g;VwիO]JO|FbZbҥ ;w]i5n0ev<)WW @2]$78^z`6wX˖.)+V +Ldɒ%K_~РA'O~}Q 5ꡇ3ḟ~8kL͛7=ׯ?x :쯻\a%7V@3d&$ am H.F x6u~:`}.̤Wq"$K$c\ I"~F c\OVUpl]Wt}{gy]u8N8춏.y0@xR.8=G,{TN$.D,뮻$I8ސ࠮$u8vQLhx򀁦v&$E9m2}>n??qs9 x6 Z z(*x(C\S*@qu6"`ggGdgGÿܿfHRPy?^ We: EJJ>}1@I)د7eu#x32BN$hPQ s{|<@G݅Ju*' %_njAEpW_}e6n裏t0p3f̙3 7xg3f̐Yf=MMMRGr5gT" !ANU?7h`z%jbpȑMHZ._Pmpf5 G65C(TB$85ksqvvNpPž}ϩnnքaX`Z*ֹWX|@0mZo}ӦBg\hoWMKS=C:xf:8fbM.}It8999]=Z๚Q^^Xk O0,%91>.>SVsO#CC'drʔ;cJJ,ᆂ/,HNZQnmi,yZ,{}M& ZP $$#[ m%#b3gf>bZZpQQgJN<{J㏯X<%>ݻKlrr`>-%{u(~*) HP9oOOewmtnaG't HlSm /_~?b@5hīkg 80o#n"~6!XVrY222Ə?jԨ\BGm''iu$IAh0MHpܭH$~ֵu eKο y;m{N;{dGzͫ]&#;+qӊxp <ΦkڠP(T*5z߾uCggOss[rs., !!e&8Q{ꕐt܉c4zt/Ï>V//d iBDL@oRgOE IDAT}*/LJW(:qQwp&\Wv(x^_Wm5(6ka6?X`EE&T$A1$秇uS)ydbZF]Cnjm N\XZ=MM^CCJe73ϋv cVWljFGrF+*.`iR񺃔&_sjn XU!(5 BG4DTҲn(6O mEDsu0x<\MM3cƶhVIV҆^qmP$tbCBta; :ðXP}pɽwMTBm)١}:OxX||K?I(¼y,XO?k.9`_0 w9rO|>=$5@Q&b4+NAbמ^HHLqLD@K{I{Ū;vϠwef#=atD.05fs?$yEqe. izD'9rZ {"EAB ^E+$!l ھcOS}A^fCCAa11mI!!Vl5FC'$t0A\:3x3I11[PlDVfrx,u Y ͥ uXai-#U L(%[JwM"!1j@=Ho)y1RBr8y&#d.X| *)"\$kXDRBb5$E#$4~ډ NU%6jf=Mavv:yH>!:#Vji\ 0!fY7BpD idR<:,e rnb3 8AXaZRUZ.b;hEq}8Vdt:4asdUYymQfspP`(f3iZѠR*EQznxV(   `^s@@!˦ˍ!ifazJ@a/T8DF·z} LlxEAeYmή2w]3#B<ǁav*PI~w櫱3^ܝ,+Thbr~a&eTp&y$FMѺz( Z/O"8ۤx'hQ?iQ(v2e:en8qmy;8̧vR ȍ{g0Pભpq3KNjlHiHCz$ H$"I ID@QEE"}xmW?I zBR))0$ $ wϘX:H%?^H45ܝ.(O%M 1k]n}i_=uGNXݶRyԫ(uNGUn};?^;u#u(RN*)=8VC xàOQlrs}{fanBrut E+)Z`$$yE^;5" 1cǤnB})ZVCۡ6tzߨPiI9;^$>}… c#QΝ;~G]) tJ34qSM Ԕ͸8Eru9><m_. !N;g!qa>a^/agΒfs'TޮݠSY /  Kf՝$Ϟ5H֭(|I¯sbeo͑)=8N9vB6$Bjֳ'g;j{j9LN VM0GUvo.q6@뀫 `I 9n=2.9{{X`I$3T\[J I)j/z###ReZJFE G~H!FdBجf5Z:r?oS| }5zhnahj5Enhߗz(>RlG*Ã#dVMOyyy . ).)9Tp4Gfc'3601$Iq9H S~' e\rE "89sfʕo&s+z (IJ5I"IZI4aHEq+Z~BJ`2hn4*-!n1 \UUm;l6Z1i#BPYoE͘>\V]/сGJ0Su 6ҵPQzp @Rj5ZF( PAl$ (")"I_ "KF}m#$:5)/Y#Fޛ޶GzVztUfдQu + RHtw͕;ͬSszhmRmYmEboi2w樱#"# _x(\*M (kԌW4[+N}Wo$?l8^5@nO}رcE7}?!_ڱns8N&Ϙ1cݺu^4h/lZ_xNN pQ'/_&&%Jww3pTi [l?P(~i8NL1޴iSII/yyj˖-kll0`/ToJSA=WZ 'HV[dwV?~n 'fΘ8 vv^ƽP[[_]]SY]\/bB)*‘cSIge$a̮?VUl |QC{~n8N$ I=ȍȐ C]STT5EGaoQB( w2ިT^ SPWω.\OCu|E!ըom:+_g~b9<{ġyyyo$$6'5?~ZzZ0p rZ$i+m[4hv}ر8NvkM<9%%e͙3Gϝ;wѢw⮼ iRѬ\rĈӧOZnB˛9sfnn?o:-~?~q/3f92w\Rt})Z٩iQ"o~ J"i7+V vЮ:^z>}566Aa8H Bеi}/YXիWY[ =bx`b Io4.8N$4% тUK\HTVHHįQ-/@%GysZ //ҥK&==-+3S&z2^_i$p4{RSS-BꫯBCCŧ*{EC !0\{;NN+V6mE6uQDRʶn~cs!mB׹X09fAt3,l} ({Uu#+5vfXΩ}ZoC& ][OO_]S0>xnX Y%]5;U!ABG/;5cĞ X,߇^ZZjTϼ_9y$˲`Z;xA`IJi4+E$bՅ'OBI)ﯮ4ifOU*Ur.\ /"z]\JJ(pꢢˇBeee~~ _}Hi|3g\xݻJx]کݚ6[v*;1XsvPxP#KmF/ **Jh 12l=筟,SD`˗u)v1!Q>|8wu˲~W{JrAR$qIHxcgg(ZaN!@H9VmݶnŊwVu"u եKϟXYYk.0 a8j]n4E@I!I"Ȇ  yE'ȣG~si)II$"H 0I m Vd4ƎYz٩ lPM'~ S F55{HdCO_7ev:ܷ80m 95jiV}ZW5t'e~+`Fص[Y0LQ5rȑEEE}{%I?F9pe InٮO>}ܸFb Fs˲NsÆ >`r4q )InRPr9hX`ARRvMm{l>8p`ժUӽs;1P}}ccŧ , Mx(2,H"#B‚#zi4:Iӛ un^eE!dY<;ZwA-.ntJG&!X#X(n%*// p !HA*8PTTRƌʱLq3gL6¥3gm۶6//? }ԓƙyw/;{jn3bsE+Tv>w\޽$\\~LѠAl#ǰ!C:{BزeˤI:mb8DFF[-%%QZoزe劎kpGs0͌z5\N3(0$]u*P딠NT4xO\7YAq<|FM]!]sp䊋V7Z!C˲KJX >}zţG>~xsR۠R^/P aB^wڵOMmsrJYvENN)f=u / wYPG\4mZ)S|7ׯ-nypAaqEǃ/&׬WR$D nى3 "PWO vцV4sb *RG J 10,)RUh ]W.F8^|G 7){kuJ14 P_BNr\FI iرc}>ݻD IDATYXX||EEEEeff.\o۷/0()AR~dɒ+W3!cL0  ^zʔ)[lq:EܨNNN`PA}ҥKLR]]otj'$H ʪѣG:tջ5`X L"I&hlOouu+l=Yf>pAᄉA$IJwmG,'(x9aJWFQꫯ,{wy'<<6mO<|rA6AF=W.L]Z~FYhH'޽{u# 믿~w8ܵQګf=lZO>>226mZbRҎŠIΙ=0-o_|^b9vhT?ɓ'Np8z-A!8&Isܻwb;vlxxxNNj4]L4?...G渖@]]ݡC$Q{N>-ǜ3g'|[o"&uuu˖-keiƌ Yj $Ixwt8Ҫ.E^rH$-n`A~ȯt-cS_ff;BBB$Ip ;1))K~پc` |mmx0ǤE$HhI5p+oOWj$!&F v4u14MFݗΆ9OC N/evbbHNDW*;Y>aoq& .HeȌ2jTZ޽{>|}-^xÆ KAS.+//bl6VA}'&&F9tJ,$XbZr֍8w$W\9n8ZݿիW?mrX`vȑhI5[Rw/555(( ͡C Ö-[CYlk֬S-6$!A bZsrrF=a„ĞRR5,zaij]>E[%$gyZY7!xvT, *^5.[:x[6Dg<>ix]8A$%zQBDuUO$܎q蓕Q.;NiNIfN  Y:-ً >w˂txxЯ70鮻n"Yhܾ=O*}!Wp$%Oq2eJeLSUptoV^l9O9aĉ'>Ɋ擕NRRgZLԻAReƄ{_~^/njؘ5`%BP($56/$P\GhMV$֮];uobccW\9w\Y8&IZRiruaKmz3&&fĈ 'gTzxz7֭[gzs=5 ؠFA ÆN(0kU*%á*RI啕`kWuWL`00 󀠇 QD]iY奄_Μwu{Q\J%\BçwYS`P]9'qpAC)@7v$ #PJo]J9bj(l#׿&zY{aEJ>tbXkXM6p473 R),TzQh@PWϕ(|BYj;bYF0weOR_Kuw@@m<8w\'{AI2oq 1!zZDHRkPIBIb?#6~Zq\m핕 Mvkp)L~Owkܱu-;vlPPPqqw}vZQKJJx Q7o5RSN}G111c\6\rΜ9K.e80PRĀV\"F$ %$$L:uԨQ?ӧۅ"y6::'$ Ih$˂teWw +wuweի.*6TJ/{ {L91!$"LNNs~oyѣGɲjժ'xBQnͫ(ɀHuE`B욒Vo_qO5jC[:.IV7'[.sʴޞchk̰ϊ1޻nߜ!{e1嶍a#{5p͠ b+߆l873(!^c6tT^Ȳc5 p h8SG͛_h9agş`lF+hhHn4_株x9U) &GtX9,FsmJ_YUSYU'DJdj`w=6b^JDIf&\9$cAQ_~Y[[;k]_m>џ}ĉg߿ɓ~OhBӬZjŊPhɒ%ųfZhY3k׮|_$?_})11q`!HQEQD,XxqF湖'Ȱ I ?Аqĉ!Clٲe۶m|ɓ'p͛jNN1V ̙3cuذaW>x y%$Æ {'ߗ}qi#cϋϟ8pUUUT9''gٲ, ;YEEE/?1TUUAk)IJe˦Ls;boW>Za10 z oO^QQ~)H*+) I|'Lrss{=( Mn I[~qؤ#l-"6tsרp n5_{r6zlZov#!zsyEG+*nHFH"ch:T\pXs ;e_o-/=Н 5TwdiUv4,+,qe1t^zUQ$Hp(|~/I kLi2<8DK+Y]CV51[XV3M4NCwΜ96m:t+|7x,**޶m[ (((8rȐAW?`Paa̙SQQWTT4k֬z w>?YzVQc !)aX E "09fhCDG&:EdEQ-f-\‡{B3A*VIĎ#BAAAĪcwdVEYHv 77%'Ei:$Q]EQ( $bzMvN >+D;tfoJX=)&åzv_sb-ZA|9"jkzm (Z]gt>?5)o}{/3>;;Sū.bc@p 4ICro:-,p)3J1:0>gfR/ -<^ӧ~;X"FfX%R:oDS- 㯽@R^;=8Vg矙kybw, #BUg2Z~RVZ 4]fw\nۣbhTMF̲cɄ)ɉJB7mmI")t"krިv|#5E9۲"t,'EYtDÚC'B_7Μ^u.QYLضz<uS>_GԘ Pvg.^GPĔA֢Ev8}jLn ;Rt5 O/gb-*-u\Q?KOV5й UUk <aY?i (mٶ)C!劫-"y$QQE9]`fu&^CiJCI$HdJ6զ0C5~Ayc Ipd¸t لǿ[˖-ˎXWJrbiiiUUըQ: qcÆ`6YQM2ˎQfB'%I:~b3fL\(xnylmHJ|vz6KRThQZAzhRj3H*))PJ?H*%+$A4M4s 28![0*mzreaMֲcU$ұIaNqqwƊQn k.!BZgJSIP a_Oˑ7f|8ݓ>>pGkpĔd=ٻJZR(1&{}յͣeeʔ=PT1{X/|]5EHRh&Ǩ ,ܞf `(C"QӗǚUbBj'` DC`Zr3p=|5)yl$c8_JԒmvNX`1A$IΠ͈lڌh%3IQUYVeYvݢ² i]^A>B(+μwtcK.9r~XYy!*\""<#lwlÇ:u3@ ZExJ%kˣP,{{hRIE#7E+)JЄC]'/W̺n$ʍ>S_?>'ymVbӪo>v $&'/6^lKT'l^X HQjj1 s{xNtwW|rax4V>^*iG"yNuQ6n,=z{|e/Sv?DIPkj\Aj``e+&Iv?A.r ⰏLLl@ {jJTvߖmr 00pO^M!^($mmlly$8~ڳń|Dp̤M!q C$+oHQT VE$IvVrw`dٝb {=?d֬YV1dX޹s>2 O>?~𾂂Vѣ %==V̧%nO}EaNp UQgfe%E}cGu{TKsÕOhRf! zwH߯邾vEiU>ypW}i}BS1b l˞|g^B|ܖ봭=JK0iRFa@`EQn).n!ܹfr,+ q&Mo~O TۃYzЧ~?DPrltwɟ.V޳stz")&1'NІ? IDAT?Ę8eB8NHb^ry%IPUUET AAQE:-˲U5NaU/]Yޡ(J%y@C8."0 JO٭7>YI=v=3@a"$M3\8iNdFF1mZQ9A\0Ue` *IP ʊs BBK֖YPsoɿ H ?y_LtvmS9/ 4xb`KߓVr} B4&x #!@rFIѕ5-Dž|d[bd]j_'H}is]UyK#5"zخ}{m];ŞYjebxm_~xݜ9֬Mc$ @c2{g[&LH5|W_[dҤmHr"z]iQ7Z~[,Mf_,Ï$ƀ'zfᆳ/ EGZFͬ&lG'mji:RYH R[[(^)o bL-^@uf'g}>^фBDtlx^wH}Cr`6Œ6rD~JRfKCe?>l0kfnjÇ|,@Xylח_ doj6-~iTX~.kDbeYADQVIeDϺnd@ŰHc#80>1Bɖ$swdm vܜ3x8X6.1%5ѣ_ui8pK/4f`؝>Vˇxs7WFC(Hpn͊rB r&]}y.8Q~y*̚5gϜiyyqyy E$ߎj|,ȝ???{t8kU8ۭÍ3uMJo9dEŠu_l۱9( >LS)$WYE51$z|v$) ,džBHcZ] -_jYF@PvfvB j4KNv}c+*v7 ȃ] c3S@ZNw$+**R%::zڵ&nJX0p‡D4MӴkUQYUseU +-؊ MINNCzu顆G0ѪɎ՟r?:)57ل1qYS#tC#{iӦC_~7o7,Iku:*b9QUUQ'jTxzL:?'#sw{gwsyWK>8ƩjqD?bgorӯ~5go(f`PjD!##l^I08QF Fc{hf2؞a,*A]~jػaE|Ue?N|&l$%ۺ"Ϯi\ңɫL@BM]ltB@zJTW ߿{~bl>1AmlzڠŋFt*4knnRewx+W|7$IbYj(ك兰Qj0 % K-_{n`җ&eJbH$YJ1Tk ƠI&eiR?IkԵǤ޷?-9)gΚ?o(>,q,Exr3>SY/( .['{fΜYYY?a۶mkFEElڴt헩YM=z(M)))f}譽7qٺBblmUU ->ukvXyV\85(##9u]*-%%-Ww-[ʕ+G xQx,qqxPd A̦XO\3`FN6fmnEmɑ/5[,&k4pѽB U5vQ_LN]'1F! FG w<Ƹ ϟ-$|ml[Ωcqp{y]&AzW3-_@Е:p8PᦞrIZS[81EIDQQ At\V q[EQIeI$I¿eY(B 3" g՗UTVef̰DjQ]6Ξ5bL\#޺#"u`(QC9M& `/q:]:ts=a65׬Y?qmI@hE֭3?K8qra#pGH/T̛_྽pmɿ{ؿ|Wӓ&>mA^+ժw=JJZ'N\'QnwhܸUv{#Isg?W++E*g1&nᨄnAhYY b¡# EJlIFE+sȎˊRUj4*egU>ATrRd}a6wl 8i)W;'%xM']k Λ??PȠq F8* <|lɄb{nfĝ8hoś~6[8HT*B*D/\8W=ےm[cW :Ʈ0V[r|!a)f잔!PPݥSv{;fd~V6P 'z!z2;Th):!5en%:)ኹ(N>u< N;NW 5B(!ZUku qn (*l%HTٻcYQu=u9c`εUExtz3SKl(+L.BZDɆc'2 ;#揈NEN<<6>/QKQ@QL aӦctK:+e3[4ƚ9_h'$iTكvUC, .7_Xu?ln8Nׇec{ŋ''%ݷ4773 `ݘy2C?qrPL2>~ֆLu|(}]s"c__S]榑NWP~-->κ+̫h8POQ6c] `Pj{s`"I )D ("rLeAByEEApz:CJ/_z_eBmqk5|s%̶g3t59iaA-///,,how?x~^mczm-wZy7C̡#F C\Axkmek4ߐr_,=4l5mޜIr9+5zdOKs/a)Y7 n /uqr"ȬS^ҽ^VIY0LOLLR|bS̓/#Sӻ -7$GYnv Umʶɓ'YfŊ76SVԨ?I& ϟȣ{"Egؘ̘1fn>2;y \H{VlOU~w^|1ot:?,53f41cRPff$x}Cv莹l^El:`YqQRz&):+ŧeAMPӓʺW־ï{T%^ [/\'7٘f;0LwrNG;v///m3U4fwZ5ǮeБϟ:8@&o9.uѽc-bL-v5[ZYUϜWtL_O;k%@RTE^=i2sN6rM7p9ۿ=.7M/6{ U͠kުҤŶSj⴩3%U9_ĒI ;DnTSY l'?< *aUEJ^ /0z%K+W\geD3 qqq;v0~7['dʹՅOzX1VnO{{~5;|w$%SR,$˝ z=3f 6,nǎDWV:}=Tjj^ E$X?JO|ޤx{}-I 7JѣfϞ=asٯj|OdNU|@DدUU%2lз|c jɊɯLTlܸew[,IxA|a&,DtXˑ A9lذ|׶APFjti M^>8/t:,{lq1Y2nY猼 ɎItd(UAn: UU+Tw[~qfʌ3bc-c([i I&-]v yvϿzn/Qx+V?䛁 %%6{"-m@^J"3x PTXu''˕H@(VӪ&hP0D8d[icy]?XcOy}*P.yds}vB-8}-o gowaGN$y~zaƗY@]WEvى1Q{ BCbR #GLPt ew]a2t^FmYEF)*9o0*7?GOOI cU⬬&M4hI۷ozG222EihhXV{lcTU=rȗ_~Y4iG7o^rrt[lQ4iJ[n{xcx#vO_paojjj>CDIwG}4222Ӟ'љ=6w=nٲt"9WTVCac']ߛMtWB1uv^w4DQ @{C5Z<& HUUY67qL9Kɦznkjj:s̞=2l~\:U6OR +~,4cC M2=3,*o!h2SLf?D՝[[V2w0qqƢL(fc|w?rs+kxikx"rf^a|X]|^EGf?]e1`]jm2kz wHו`Hɑz͕ǫ4A I'+yrXby`¿:_^|><Br^`AAA,:w܌3Qu޼y+V7o,\_ҋ{Z07DQpڶӰޕ?n$I$GDQb١pMӝIJܑycq cL_wpTl_T2.?W^ K,yw^{EWCݐcUlw0^>|4 J"seFW&4Sw5ht{|C652yS***jn2xY +(|@3c#vA'Xm;o<ܷc~vDߔ1z*m /K1ǘ8qV VU^8žQ$SS]U{7ËcnjrȱWKcb/%XN*E"$d$IHB/ ,ʲ C" י ԷP{{Y={O=0 "5kb;w.2~ҥo?u#F(g$yIә|!4hР 6 Vf;;լM6͞=O?*Μ9t:> =jtE~/ ETmiʶwK;ׯ;=~M{IR0Eu 뉰e냊N=s p钻@Dlllkk+ܺ{O?HS=o?mRRNt_c?-7n\[[ٷw9r8~5X79}oE~W\9~7IIIzQff)NrB,!h7׃1,hkhCzn{=.0Wl ם2fsnnsZ.4J}a[>zB,u5ÙC$&^jow~>uUoT:NQT7 0HTBJUUUU H$I@QTT]똘[!|#b}7o8$ϙ9.K0!EL&?@$E@GU/|˘&Yfu@y=LcU{׬Y3{k;+سoڼdhxh q`wdfDLʎ "t| ȱxY 0tՇ@mm]]Hb\BTK[X)²IB@$I$A RUU!YvW*x'z6;"ںe>?,t/+ΝKIICyyy*~6~8(**z{{3[:DG^AsΥ!C+gfˌ$^B,o>zysɖ݀ᩜ8 b~Ϊ5^Rpw~r֡oɬv2ݐ0 IDATHٽfONV@IVԝ>sՔU㏯CqQhpGu"taJ=Dȋ%u[[?fӦ: +Q6bY:˶"#mvV˹=W?$+u]{kZ>of_WxFYds=W[[ꫯ_7Gg 45`-9sO>i4/^O?d.抢mȐ! eOHH(((XtٳiX{|ꩧL&SYYn:Ogs*ŖZgΘeͦ&#EQ:2%V~7nXPP`6hKtÇGGG>_c uxDV?ۭS՞~2K$)5)A|漼 7n,/pL0txE;Ɉ MSAAEWӲh$IVp͚51bڵ]a B:@PRÓ7n\DDDrrriiiQ׌Dj/Qp ^( y"tr{%f5~rϝ/9_jar+TC(ql11#,-eú!GBi۶CzW 雼$ъ"p't7&` yM<0.9\6$t3}EuX}5NGZ5|$-& G7Z& %05M>Qܪa `]`H0qbUZUӪ"7裏bcc-[_@tt3<믫f͚ljBbȲl1 ,jDE`q^~˵|sŠv1:/|ʖ/_nݺpBU_W+W\d, ]Ix?w q Bĸz=ї9H]x$ @TH5u"HNgڰaC^^դf*B'|wƎ)j8!O;zp^ !^ !.Z+ɻhsdk?ow-UQBִqB>rHL zwy'666a옑f#SUXL<+*(1Qo$]vw"3qb83|X=wI4W-tlG~͡=\З eiEz]M37!ɟx^ecC {TQQa~^ 狗,YvOn0a(2:*rIT9:O~߅}Z |nًG*`1/]`+yx -CN6\wzםw("5kY31B< #/%?9e9ֶMm>qHP]K~57daf`и}r}}ݯ~zbYdXMYYٜ9s h!BUEABAH A^۝Ç£BK@8rdq4z s]RX@@TEAH2v j{c9my߬Z*?/,?1y^tDW,Gj4Aׄ}p~L䃳fz駷l^(If߿`:uj̘1w>t~cƌƍ_Re׮]GRhDv}-Z`'O7nV&YZ,-X=IU!M3$ަCA)baHyTJ5UجnUbc648jt,.M ӳznr{BH&R"kg-χkjCɲ2!,H⛛[|}],!?/ocnhr:gboEsPȡ@),^eׁ1/-hlp YÅj!E1& ^4*!7!@ ]qVh/sϋ*IZC^_p&=׃WUhO8tgwsiڔn!#NYm6hRHi[zɓGNgvvvN!'VWW;o=*rUѤT7v8rHKK˰aô XY'I5iwÇ%&&%@VlZE\+BuIm^UUElM2EBff&BHGv?{lx!I ؾ}/zc.]fμ~ݺu\bESS`uW^n݀VXdYټ>Z]PXꫯcc1|n>{{BGd[KД)b!6Lvpdbˬf+`z C>sGk7vN-ݑoZϋu *~`dDHvz{yEeq|"I`9i[k[%!++J-INktjuFVCF0 -Mw|4m#5Uhz#굔v0ǘ'$tR vt~=5]倂X { XG< @0aE 8$5իWO6$O> 7tzj/ғO>+++m6ۮ]:j5oʕ+7ms뮻Aׯ/EnOsܸ/E:7$)jʕ+Wܲs-LR ~Ák89q/]7Pdqֹss,C3`EAZ_1mڴѣGcU${'4U%ǂ:k=gBl"+, !I!hZUx,Ajpc} q`k X鈯 |x[]*SUDP-5~)=;AV/LYq6jG'vhDnGF`EVm_\ͦu8l**#;Q )di[eYٻ; )RNBRl$I^W4M?ļg'6.p*utLmcrɴRH-ikGuW&&:8*CBͲ(ɷԶ; -iCZxbOP0(9+*wuNF(K$%,`XexcYc0K6&IH2" #(h49ΡQWェ̙f={b7lPSSS^^@yy3ї(= W"^{ݻ 1FQUYSAn!߿WUY@>{NHPTIoh9u|kk YeCS_u~4B,AhOKn$me)]U&H󴔒9u݄,~s N;ӿ΂ JHJqTw`.Ven[H>Nf KE \]7Pc#YP5Pø@iVniZ[NY#$dJ iQ?Xъ+5u]VX,VPwݔԷ dϜZp~iV±Sɪ1@iwA lb].)h ir~Wc׎E &Hiْi˖&O\\\{=βl01?%I2FVE4Mq:^7EٱcǙN+!m۶ l޼;ӓ'O)Szfc"cwc6uu^F"^eYEIY"ᲊ"Ɣ~g۶m>ykH3ʣ/?t Yr1VcB,RPvQƠ} h7=8tO=B-&%~9Zju/۞pEclpÑ| % kȆSw{߱'}6\J8މEJecN$%>p1oF]wn̊1~uo瘬 3 gnn zx 6"bUu pTQ$Cu"np z&/tѴV5?~V3L7M-orgS&JEá{yuEs5nY5XWU{y7֮]qƏ>(L^xG,(d5$i$X,zYM&'ɓ'C!FWMiժUcݽKw5F|x…]N:A}Z/Բ(W<;{ 3.+e@()@ebm=d@dTv|*Icnٸ,N~jQQG0ֳwVd 1޴ÿ*u`Yst:&YGQ]O05><Ѿ\wWKuB&old;Y K8Os7L #^|w$;ppSSʒUWݘ 6VsmnFFoOiJR]ǥN7:񹶟4<%/'fkld-|YH$oa%Pє1ͥ nE׮]ӟ9s?OwܑJ~g]_u߾}-ھ}뗚8qz!1B@)]׻wJ }z۱3Ŀ 5^jn9t,vHc ǥ;4t ]W P$)%Fy8Fӱp sf8Wu~3zaJZƥ$>Rږ*.* * Sձ^hv;N>R9E[!ʽ ZQaN9=_P4r%s/@JR9]vٛ2s fD.ǝe;AYmֱ֏Yc*^_x.M>W@l,KzؔDI:t3NΜ.z\n@,FtfD믛6q|E{\ym_Ӎ@j k7h A*74M&%-yמ8u;RlGsU_aWW%߿hѢGy?9ƺ8//7 IrÆ si 05GeyEյ#,Y$H7. ޽_F?dD"1~P(}{|܏˲hϷ}`^s׾3o^x9 jA˼#a>{>`Y;bYWXUSU"5²,3a|qc;;P8Ie'))*,0C]eiWsm@XgFqcKKKv}˜;Ӌ3OE^~RIΑ?\ zfNF9_ I՟Q?X>w=Tc*dI;pAJ u5x]s]VU[;0,Gsk (D0ͭaРhaDeW.zO=bqlxO+O,/K2cPK?A7)! ̎j'O` >zt~&xӗwrRXC 2LΝ7,~$s3;M&#i-Bº'>ܺ*_If{j,*/?͓>xV\yu]+Wxa֙t6w%95YEV`M0(5KSؓiCɊ:Il[8rc8JDi!mLLJDDJ5 /sEHH IH)AjmL{O3^7-+;_%*OP/Y a;8ٹ+&z|Dbi6w?|#uM#kˇ3;7D{Ӹ7|@FĘN̳ϵw5%i*\v=}YMXLHu CM=ll*V\p`eeiEfgGgz˒JXBJ(we72sص}PR4zLQ%7;]uѿ7f*r96Etqu]mQh"QbiPͥ hq Gb&ڬȘUU`ƁA_oso=<L5`:CIludtW[;paӦ0zfdY+$?loOƝpQ[k}e\cGm0w93?Nٳ:1%KJ1l--wީXVoi:ɹMkBՖsft{@յ`gQCjP8 <번usYB(7'3'I&kWGI!Kr5eeYI%/"7q|f?gڋs:N#7|(g>.fEuu sȱ>|3wlhK^ye/z9񉅒ł[ZZG~TU5 j{Tj:6s)~tRpU!db)bB5`m`c}裟ge )}?;N1]qK h8RT5:mCY\ڣL&!%dN5[7ܙ6A|#1& kioOvP%IՌGf G^4Wxp!XV CM5iRq~WQn%uׄӧ|Nj/R^}-Q iyyڬU&Bcٰîsx=bUp$ :DM٦f)  ch#VQ(!my߸+nTM̊2 &zt)KA{/aB][daiFf BHEHǘ:pa IcLL Iיq(:AJ"ۃjaeEkbO`dNeeY[Z6F 0xl-ӋDZ2%С`˃^7vAo~iv4y'M|wg5}=M&/z#"HqTНvt.=#CYǭ{Aס[MDP)JS%%E | b57F,Nkhi$ItnT̶=Y]7o|fMQ)A(%x\ t B$jV GMB:L,E()mQ t>$AGÑbi$i4&D׿UT2kno}5kw0.р1!+XB MP7 b 1OR]d˵×+Ovc|3}n~V|n9SVAlc:y EHnИ>8}uN| aP{ZtZC,wf]3NX+KJHyyK;0 "蒥=:u>k1ԢlN>v Ɲw֟|>vo߾n|Ü~(yyR_aZ[[ MdCD(]1lQ)cQcD, MH4BKpY~mhñԉtGl K}ޑJn r\ a57IxB E_ ![O6\&'ֳҧHf~:Cuh`2x\hE "]@4QѐYYTUF@ DQMS M٬ nYiwƒ)lS)i7e.k@,oAtk L3iOE]-*.я36֬7{ԵIJm\-q3I4n$I0w2:eVR>CK'q UK(ꬫ O 64Djkn~j%SdW8˒~I 6u:M'f8ֆ"nyXB ܡk4t+MN>N|{G,/"tmCZWr} 9A /*t$#Gȑ;jvٰooWoQX$o|g;S f͘=kzaA_ta(KPXkh t:`ѵr'@S{,Wy2 ZQPT@;aڸE]"ϚᰛUUDZZYtXIVmQMG CH--`UUȚ˲d0gAh(#~@Qմ(56GV֚8$IE 2UlH@evCQԚmv,KNS;+of3?1hv髯~okm8zvwOP׻B.$o~s3̲Բɜ1,v[K*W~?k9q{9T[[~齃H3]!ƈ[裟e3v[{3=}Cܛ I$%4?sxBQd<ȗIv0dHLF'{hmm}ܝt Kdxڴir~*+S'v?lP\:u=ؙt-,WDewӲYCD e}^L 476O-sEpY,ڣ+|]`2%Izoߗ_˨>]3 *fz(&(cǰ04{z( S@Q=Ff&ߗB1 1ta$J d9eEUMQ5$di!efR)Z-!::@c6-׿^隷<εkߦir͚qF B<0mƌ s{{/9⋇iӟV!52MPo}kcIIfooC K#ɞ#;y̽aúL>V{1vw!ݾ; |pK/?!^IYArY+#'.\#tڈEx'ˊTPUP[v].> SÊeN~Kd" {[zy-cٗ^:_-ZLdUCC|kt>~ѱc;wֶ4rr$Ac??w? P{v|p/"sgmss,'^:2zxXZEϷb2}i/nbAC@O{Yx\z/;:Vat~.Mc?w*'N];4,!1h׮Ƹ-"+XQ%ڨD:%Axݶֆܿ|4=uAnlnGaLqJwo:Uk˦4 շj1` 4MI]_0#T_I.ɕ`*OnW,QǎDXX4=Mk~pSGG|nh?<Ӊ<M7ygv_J 76FEQڏm9ymY}oFK sCguf ɈO ٪Dmk!ȹs uuӦ̤N)Q Pi$ m _~ 9_nΛ0_^ӟ~:xN#<0x|g˗~[yOY Qhl=UU}Pw+xe' dT`.{ $,NC{qBLɦ~Acg_m1IhLH вR<2SP:VkGꩧ'DeYj{*+UUA5jeqqˀ " Odee[0(<=a??WYȑ>u$ L5J 9B4Mkk Mk2(MaϧӢmYk't]onh:i ?{%Ù|?cSG>i?.}M/\5 ʴJ#- ʜ -sD`aZYg@(8 7Z=آ)Srv 3Z׫WϷ)dRިw;D@QC$c 9/e)44PBݝme 8wu] an Yil |(ZX'Z5hۺu]%ذN\lZUðzq ?}utKffZc]TN$**zER;$ eȢw2% &j:s\W`P۞Ǔy9OT9r$N)P@9%S~x"x޼{{M^AɄܜ},Ob l<ANg27s3.w5ic<F@D,.X-k8BxXBt]M-lW Oa(j~nmRƌκqp\s-_rs0[Xl#qqC:Ģi`}30n\χl ?Pm(5!vU^9|GmC'Eщd["ɺ0_JgմKVZQpdUc|DPphcAa~7{i-\DWrV&hLX57kkkL6|:HpP|BkqHR"":k0@HLRi .IQ,RZ͹EbZLɔhù9-aMfa^&SRcs鴥sͩ0޷z3,ʽЖ792BhW6%Uf9J|v{ouLK}crM[~ $ HeW$\ lVµ"ꚶ"zI i#i$ls}|~0z(z-55!pti3ذy Ss'g]c@^+?81$P5}Z8ѣJ HCxyZ6f.nx]5w\1HZXPG0ٝy"͚?jČriQ,ftS~}--<'ZO>,ƹk =%D(Dh5UU#Gv̺9{ Qvz=nIc,Qˢ[Ull5"ۥ[J{WeEhlW+R)ojn =v^uYڪ?ɔۭP4?7c$J^2.YTADCC IDAT8虾)E<%l;jZ}Sͩd*?7SW9i GgHdcIQË颤@V#.\,,j=04iu˔1~c|r9eJ6,]:z'v]  w{i1c<s l"!{4`ϟ_O='1$?O4\ư#piޑoel~7Q[frYOvRYR?x|``M{/YΞS>L[]Cln Du~$|8IM͡ܜJXTU(*%H=Aqk ,) p&3fC˾b]ܩ6@\Zf>64D7=Kkh8^{7v+}8Ew^氈t_٩Y;G gi:E1G74_|q($7o5 D:?65dul6nbڔnQwڗ/[,+ĵG+v=,np'[wfH!P<3cD-j>4 '}ԅ>9?w Ɩ :GXfp La,)Oj !QDVLf\[OrSRuB[W|y]2:jHYhC?UOSbNē[o?78er `wފRdZ(]䤺6`R h+0j,BȰ`Wy9ESuQU4Ӆk&6%S7 c\}v߁C%W rn><,CQOmXAw?h'Ab]&ڻ8x"J) $kKɁ;ZQ 7C N"bR)nlrs3.Զs_0̢(f\!d- TnNYT5=RI:-';CUDZ CˊzLc]ǒ@8[wt'E}bzmTHT"IXB1>tSv?X~}ƪ˳>M;CxB8fXY6S'BV?U}AJSm>kxy!$bZIx<"iB!0fz樞Bќ:FrpQ!=ybWٳG!D #ҫS`CХ6D[Uxw7noow\ES)&Cm=R[V|LR)+*CSD*{C[[v=qMˤB b1s{^4uђ?BC0 S O*OkzxGi!/e;ڬd2d[{k&g *jyjL²$ 2BOK BӴV: !%(SiY;q^$J04xhֈO?ہRȮf.o&gXmOlh`ZNj峏!Y[-gGUw67li\HƘeej́ϛN@QT<TUSU$ Muk_-7fzY;*yzM$MS>#O jRP; cc޶=ߘ `E5T]9 j9eYr9xgv׊{7#S]8pIf9yX9Ҹ*A/_yI@R u-kL|kS!"L{۷oG!ֵkLzps=߫6[,wߝJ 0[]MͩTjѩxڼy{[]]nݺ܈{농qFFFUU(;w,Uj5w૯hu5+!GM4M )Lꎮc= ̓&S }أ'LLfq4Ӛ3 pl;ѣ\/ Ϟ3S _笩X5uKk;M&Sk{$7 M4Y')  "7;#4TCc`8*|$MSChXBicPH15c,@|ՙڭ 5f~ڴgc1>C_.@ɲ0_nA t]x2XdjaF^Qu#!OZۢx* AI!!D.^֮caAu:Q+Km#.Ifw&[Zo\D[(ft逞L[0%$da8;31շ^ (u.?57n[3tM$eIpmK~*O|Đ&;՜ N|~bƚ_g{gxv_o43m}PeZ_;Gb (+f!`Y4Ebc;1&H*77745M5C%ƫ3(DƔFf@I&x<=sѣ[n]|97Q{pP 8v޽{gΜy>/}pرVeY8ҵDh>Lvayc<(4*wUR/xh! ;F9w0?#Y~I(eqYƐķw[ ,%'Le A96UUW>pܛy c<RFdP*jվo~V[g+(* KBv}ǹ; kZ#rB!t?wr )H+LSDx&ak{ +$IȒCe5Ü I*gΞ-ɼry"[ }J8 0|BjOVJB6;`,'% H24Yx`qyO_0~D/k66{(84M vB@Ui,C(([_:B (r4 `]AR ۍvdmΐ:v62c!u2!oB_4 Km`5O~T+dZ|BuC@ '@tO˭SD64bvVk#%])h4Dpɒ%΢EݪC>zqRimm!33A B΁̬LvcfC]z6\~eټ\A0pQ!IILfmg}V2Yn44MN i8}*`7jMVr B;ƣ~XrT/S[/,WXax$-G ro\.쌻M\h| j|nJz?  Y5 N43UC4E_b;PeQûWɉֺvaԞ641xWv5#BL4mRf}{a~rA[n"=ްqB+Dt$'uUp#IHGDQT&I9|bYi6zҾShO7v /P^6CopBQx^_81Ia42 m m)ϙٞ4l} AqEM CBː`7CUJvb)qIRAEQ!5!u}] u^xݐcƎ<ϫSnw3|DÅ@w;+L,shn7q'ggwCΛL'VVV>%%%ƍ׿&M;ϟ?9+55ի7n|饗V\qģG'x"%%e׮](Z_ܶmz{WYYꫯ666JT[[;}tn}E;v1X@51q|$L/NgYYk>qO>k_]B\0>p_{b,^FBMH2EVyc3/U[,Z "Ej4SY0٦O^VTQ>bLɼ_b֭ze+($YA$:z Bt$IK$ͽ_6"f BFS.iiP@k"R#iq=k1Ɉa(,ƙ̄˗Y](|4yaӦNZ(F(j2;l6ϣ(X$d h\Ė@ Z\hX vLM'˧Fh]!ui>wh܂*nl8i,kQ-uPCW xsG?7P98G5Xe#oЄ`Y\4wYYX' Ty׮]?яΝ;Oض7ڹ)Sh}B5|-N!b|ի.]%k>?~,Xe˖ѣ5Oqњ555%&vMpkW^BM Mػ^MP5}3]r>?:nEQ +W^r壏>,Ez+Oт'gH(ӌ)ȇcn:o6)ףgq,= # Ezumlv3,+44T8%'+A|@J;X;|Yž>oY4Z4g+(*I? FxBܡJ'%9$xׇO׊*DRd kl\*67݀AEhM% o{ VWO>r+FZQd(|zjOIliSn<:c"3ґ,nj:jf<W-]m8zX3|yKRyޠ u'&LFwn24TZ"׋9F)?p߄va^x[o}뉉o IDAT8CEb6%IBz /RTWWWV A+eY>~xd5)))cR=l[L)6 !7~jylqqVZ:ʕ 'Y,͛7gdAگ/~bƌfy֬Y$|sl6޽д /M8QaӦ4c5q| o^\4 dYYd3<_'̛7j_UmٲbL(klƍ( #0``-ZO(u,&#c` mAAILj+83MEVSWg:lU|޲K P9]LNjܶcwW$j@q pJHLRȽTUc !͑$59#͎$IhL1gJV9`K*+ ֝$m<^ϙKޢ!&(/P9b$e{Xc3dp{~>P{ƖbaCh蔹>pr!uz~EStiS'K>ȭtnl~Kd9ߟP>(!Т tSWvUh|ZfϾ F!nifbuKY3NPj"yGuݲ,/۷իkGFA>|4 8|йsΟCJ_Xاd„ 9B>̚Ȭ"4U%lꔲo@rs5SUgG" #n2DO:jqhˡW.14;+#v!@p⭷ޚ4iRcc1c2s ߲eƍy>+y ׯ۷o?rHAAAiiuXdkk̙3}%Kx<d2N5HbǾ6?~|||7 8O36mtSUAZޯ_G\$?~JJ)jhVyf$LJx|ò( bulRg'ogLM̗ۋ.死h./gj\GϦ%) ~ܩS$ׯoUFQ-)[M,@Yd'I:[q݉:vpy"ox5ܚ>=1k CX?<=.3CYj0l‚P Ȱ?OhB?a:9AΝ3Loy} iXh>zah+\cFFFSS_O_#=Й ,oXܽNBQkH"Kp!oC}%XaBxҕ_yfpA}Fv5 ΛSI7eU?|\^ǐs=ZUY90iҤӧ׍^٧G/^ 6l؜9s6okL2bi._-[ |rY˜FJ']F G2}3< )͛Vꫯn`EEŰa?)$ HVGӔ&IJdrz[5Mkjn)t⒒Q ;rO)Tw=NN$}wKJJh>uTmb8$Ȳ,Crzz2cp,yLXXwu8Fq̘1?üȬ]u^xjEq/,,P 9;q_~9))_okkKMM>}FQAXG+Ah$IvӇpr/Ϩ@+g>H[){~Hl.\giI6?w AX|2qq$IO=u%$$1 ~( 4uW P"B$y9 LHc*oB7 7o"nЭ o3#ǙML,i6W861~E#ILQT&NkUC}e 4E͛3k9ʦIoێ?xda)'>裋/TUݰaCl&`pԨQfFm}^~;MVSsB8zhGbJ'/Kzzzuuȑ#x YE 'UU---%I2q8NQ f31FkiQf]\^^~Uۭ_o>2mZ`|r}}n/.L k tI/5ʈ)ЇP]] 5mLXyPE&DAeYJ~YŒ37,V8L(s(2vҩ)ť2_l,Y8/a(WYD0h jle˖m۶mذaqZYY3gϟ[CTEQdYfYcMMirssI|޽{x):wvmzѦEQ`Y{nƍӟk׮cYSFRR vGlDXm҃@d3k@\!ZǟZc8}Rg 1|<4fTozĈx ťhN"]cZ<(F"PNMĬeHFAhJR֬c X,1. c+ڇzSTv_-k1ʱWf+@ :xhʞ3gμyF"][7Hce`l۶m5kUx0c87|sΝ+W{Ɠg#n )tyP s=1)5Y~խwN'ZD"b͍VQ1Ls/fe*$ x4;ĄcA|W:|܊:#Gk~1>TLW};$!sKrML- ( ߞIJɷt%ME"ZGX(BN!QxgE5l)@3f䶚Pij4r5v,|$HR,I j 3r`^^&w]* IJQAx.k\8.B""&['S H*wY/]mfZڲ3Hk{aU2y~㖝}8L _ NmFF<~XF̲Z,666$YYY0,,,EQ 8QU#[2']_׉'TU%͛4QOZ---iii7o48qZl6M,%ԴHzCbH( 9rd߾}$j&)Panj DEQ2R `M/'x*lj: !n/K_l‘n7~s *Yj~ 4pff6sĹÖe&X9>8s] "?A$~;r9[ o%I=LntT njeV'ݞ#*lm Te`M_($G.]W2f-,4'~V_8KC ĭV OU2U<x\!F64} ǔ IS(.M-ndwBAӴum8A$PCQ@ۙHDllLF3n$#𑜬 aNhqH(:8q\dFdEEQJu g1%21`fY1.-4{ҤI@0 ߿ /PVVqPĨs殥t7V"ON7]qZruUJCcF'nWM (VUP{$>^KItxhp|,!A;V_uGQ[]4;Zf 2l={j 455.zbREImL;wMMI;zͳ['3zczدPAQ";/Éި#namTVfVAAn,bkp n4~(7xY#g'M2͊04-vM @o$ Fx9v4Mw1 s]Tx^0T;-K%oJ2˲5 \;+aEY3 T05~ą .\eǏ3 5M~3ϼ+999ȑ#~:zB,R"1Oaԯ/,IA/G?ߖ$$UVg?aMg8k@djjڵkKKK3TΚevޝo2 Ժ6`?;w[ECTU)q&N$ v\n:4m]ҰIz sQŢlo% hri}X7nя$M HkuTqS>u Fod+, SWʧ#gۿ4_9(W1 aBzwo$PbWZ" )oG@x;yPsqhڞ1lhFzZJ4L7hFK=jr{#F s&$ě C8}ݙMo8)тX`6B{/5PM"y1,L- ^_j1|O/YVQD >gR!́Ć&h8.7/ɴ|c? L;>SYm۶iֿk׮l6YgϞ0Lkk3RSS?C%&&Ι3a~~LtlB ?{۟\4!!a͚[Seo|t:_-YD8MS++g]CI5 PO׬Ys?a¡CpAAAUU(DZ,!>~-F%p!y7 d2Ȳs+“+G{򜭑o esmC_РG "a.n7 Q.bvߵJ` Dx;*eW/N|W鎨[:!GB RԭmI!cJKsr5,s[+z(}wsip5uLI&lxRGї7Kxpb7oY9ٙYwĊjB.4y8JF-VjVWf $F2_w+`EIM.ftwArl (04E h!7H~nOpzEԇnݾ;}1̰|\i,kD"Yx^ؼug~l2h?4$I@MSIy5x^jnnE$+3fh=@REq'D:~`i%ZfMHvlQё"pAQ P@$/RlNᄮ6 0Y @QL߻WdI_B OblcN )͈KWu~jFZn⃕vzN5 l 8ZQ!?hv-!^KKj,sfʪGx^:QA?)Q%j$\h|0WP>]?Q17I=[Ǿ&:|Aח>|E z=~q[W |s8iJɴb{L"Df IDAT"~$)ɶvJ1lEE[qVd2Tɒ4xIRD j=[|$I>"M!ItW% ?IJ\d #"fgS!b~wAP(o/!ǿ>)Ύ|ә́DN q=Vڼu'iSZ Gwڳ̞{.CaBh`pU8.sA}w7:1+Emm "vnr,i}&`s*uoFu^gRzҟިik$0 z"FiP#^mj׷pL44(*XM\Wn00FHOJ0<Yp(79|EA((df_2 -{xœlSf'uBNA$-%ً?Y{BQBUQF@JGsuR)I֚4(]vWqqQ,| N.rLQ{ڵ+yq7g\Iu3/2|drAi7w֖~<}8Bܳi盧N@+f qm(EMJ-EZDjRGWS'EMK&IZdEUES^EQ0fTU;* ~؍:¥GY:&RXH_6F@sܡGBd;-1 /B^6&y\Fu~4I{gY1Wֶm KR 8'0 X󥫾K>_~1MU!E|̊DoKJ[XAU4+/(/Ph;:n>zCko]Ge]?&B=? ӝ(eLH O3 )y[gߒÇX "bh\EQ$=5q mpM,ljB4E$JśyI#F1 ''nMBGxLF^V3Řpnݺe4д(FW"n}loo<8!RT2M<ʕ|MqqQUڽ{{-uٰ-=i!d xrЁRyۮ=g3ŤC/y{rh'xa%(2k Rg0 `XRPmqhvREQT%3t]i***Wr8 RD\s1$I(dg;oZ [̇lBEn߅IA= Wrlwp !jJu?[K㖍͈7)* IJ쌻,N fM^SʅΖܴ8 p}Fx|N:5bHۭ8AҬYk׮L\|,WWW[7Z7:Cm`]Yڋr1NqZ>%m>dǧ\rñJ^jpv_Ul0Bt(! 8>&FJǑv_HrUjlES.гC`bmq0 `%0 `0س_5fԸiUCQX|={ &ŋOטZb7A;S(ķ Eez џMMM^bŎ;&O G\ ~m ;VZZzرW_}ѣ&LI:G^ҥK7nX^^x<3f(++{7dY⇚XD۲y -%-= Ċy5[C 1QDsA1 F {o,0OH.{) W ,ғ)i2(9. Ymqz3Ң+XC¢!9HȒ7d[1{ ni dWYwmaPmz<8!'+Ȓ>_$q [ތxU՚^Pkoo7LFBMUd47=zt߀O7n8 233kjj~S}-[K1^ZZ8p`E15kּ+#Fzqc?h HJL33}{1//o-C%(7xq֩S*OmYqAmbˌԞH; y+'8N[/˲getxIO_f2-_f="X,7=|&2N4T2Ʀ,f5 8>t'~ ^mX -qK/t:322ǎΞ乲>z/D3MiDŽp ]8o?諾(jv}ۏ_&ύO|K N!P,fLO.p^Z~!Id&h (?r8fߣ*8I&H (RF}%-%e2EA C~} .":E& )qvH;-S$VTT>|ԩSKKKM>3۷oߺu]!)ceϞ=EE|uKN^:~a"Ȉ#233N^8zȑ#9>|G_1_|… } 9z˗/߿IISN]f3+~*JD Rrٹkߦu~ %'];vo\\2b,8#|!7h(${8NhvM&#dg{ bp59"\:x #j)wnhVseYEYHIb8@ShT\~ܡd5nl1vd$!m7 N7ՎO(ʲڂF\Civ[\D2hw)&1G4Os $a&(-OM9zj=2 \ır-. ( bsĉ;>*?)LztHBzBH(vWuqcAED&݄*= Bzd !$X}߯19s9w9s>>{edd:uСCZ>ǣ._WaR~a>}ID1D%waҤwo1:!+PIK4s9n!AX 5ir4EH?+:vyHڨt +K R;.۵(zH:@3~]XQ$ $m@K"1^)oֹ]ciQ$)e%'kMa 1b4=olmx;~zYߟy&-}=رcsssqT)WUСC)))YYYҙϟȑ2\`w 33399@ߴ DQhU՝@V43b/|KN6s~V+O,%@E,00E`cw$յv#0 D>vC5h2 M-DQ\ZZի5{8/~/ziӦݶ =[nUUOd\bG}$_|1}t9^;w-_\;F7PdJq1A@5$E56GEHk{,> ۦ}eY#c^zG]~˫~Ç_{WW%k G(@|^푣uAx<˵r p3L7`a{ i1Q FE&MsE3phyvϾM?n1}͂]_܂ܐa()AyWS4n/I-Psͬ9QnqaקqJ\LӐ$hǟכLѣG˲+$$fեA]\q܀HK):7Dd-4'N{YgiKXԜmx7\b h`繖beVYQeQVzk^pxȘ>X~T˛}3U.I!vejw9^QUjKI+veСK3-$ zwb?CGs!SRe /@wi8^jgǔ@@tF~UBj: 5qMnN xhHSW歬lhhꫯz3f`8쉧<OSSA/ tPsC 1i^y!&#$q$(F <ĉmEUծHпtA˗/裏rsfJJJA Ϟ= )9 xyKY'7%jnn^(GFϩ*W88%BOb y AP K3Hレk:a</7kkkh` 3ushcFoJS988(%%xEQYڱc[o̳ < . IDATgO߾Fɓ'+3dȐiӦɲu@Uwܱbś?|@VUAn޼W^I 6C cfdO 褻*$/57ym9Ѕ|X[#b{X `ǎ3{rG* CE;Z0)e <^~}Ƅ_ϟh4TU1buB<neĐk{! 4&Kh4onwkkk@E )22ɲl4SRnj-))ILwVr0uHHHb_Fl6f TVV6l00L}]!!!wڕ%IriiYFFFkk7Pݒr[]^YAU@JPc'NZ/_~W>9sٳ硇L&ڧORg ˯6o޼o߾[sRAxWxUVm޼y޽!C>#O~w322vܪBСã}ӧϬXSk֬,-ȰiӦiܦA\xE]ԓҙ_矟x Emڴ)))Y l2ap4vena=*RӧA,DߐܣMe˖a6~cǍimE; CaH m#>dբ(@c![< 1~#Gmۦ*2`*Kl۶d2͝;7..V={\ڵrN4̙3_~ѣ=ͩiMD *@!h̙t>ngq]yw1S}Y:8(#ƲkӧO.Z&]ʳc&t,+U5vEEݩ7\Z>HKKkR @$e(Om񲊦0㧈Gؼ!$C@B`J0hڀ'4I@!Iիj"˂(FZԩScjkkϜ9,Xsss瞟9"""((񴴴ƺqgTVL:w}窝uN0qcUU5k֞=W#fIoߴ訂_ϝ;GcQ1coiiСCνܙ ̞ȱc?45̘9/3nϚ5(wSN{u NY sdIr¥`k5w;0g@]X_:_;}@`AzY^/ LI ##iZ#A(js@-:{>x2{N.w+O>T5{ay]:t4'~olG$ @-&Y"--l.kb*HDQgsѬҙr^mEف$IT]]#KJiNg0暍edsMMMVV$% (< fYd2j'Y{oɰZN-^{-P'Nv H0~qǺ\wyW" "Ǐ?~WTF1*{g? uӶ?BY:ܼoxYcAPEDptܹg]v< RgH87CKK˰aÆ "~Y͝#Ν;9{tRRSǰ/iin9%"޽n{޼y:{h᧟~(jt('ӦM;ydyY^Z3D]ZYPPޞ:q])h]MY]_MX$ø,9ۼ. `QixG%Kl6dȐ-_m^n/t5kvo777%/B8Z [!lZw@X`PG} BCKݷwOyyyEE >hVVƍ,WmKyQ)#{vqG@a$B$} /_͝:ujHHȤI:eWV\nݺ-Wdۢ5'irrK/y毿:"X䢍s s` 2h7f<xFI_}W"bTur@" JJȲB$E@U1B1,Jי_A@AyZc^;8(Z{V|駟JJJL2oc=c6_|ŝ;wv=۞ 1UT =n=^t~?2DSHcRJ.nk+%.k|jzNhtd`U`0T:e}hakΙ3'((hĈk׮j+L2?,\0++GAvon۶_쟞 8Ax+WO /xWǿ-P:+aQ@KEU #8ÐܕJ"bd&= #.ob\0q~#q1QI wߢE6n8tcǎM4]4EQpc$qº3?CRE +* $A"  -shPi-0( L׮A111fKNNb")w7 ).@!={ư?w@0Zy=]ӈ~;O[E9kN>}I <{3 A]a82G*m?+8sm)O=t)XߝF"RmCx}B-Fzn>#F%%%O޴ig~G}wE)++c5&u?hРg}08|sDA V[^ $`0N3>>ɓ~,1bKYm^^a*23;jX(#EEE Q[[k65бXS |dDwͫ@L h(l t8;(z=zŊ-[K.#I`>?^ߓ/U6"᥿cǎ0}`LA{S(޽^DY"P62?鉱 ٳGZ(B>}@2r/bɒ%ZAUUI\n,1WYЦx m׷ECcS3|`6r``:Fh$8q[Ѿ}T#IlRa$puO>$I Ɨ^z)--mժUE}7o^.\!ŗ*ǎ.^z_7n\zzڵk۷i&_}E]xq.\02wL?|e GRUc')J^z}1VĻ*uFnwMMaQ%Tu4x 5fݏWȲR[ԘY0T ,JRqE% t~L\aCrXn&:ӑ(ީ1Q]WX '׬Yo>@[[[UUÇG̵|wBz>(:NApo=}ӧ:A$iqcY[®ׯA~?g l(۾}u:fV+-uN9@dEQ;W%5u9m(0L)`tz/o5jh,***//UU6lʕ+ƖgW)+IRVV˳=D?rKyw̙o Oj܀yy#G5lذ'bb͘q3 +?^⋙TT2;"oĈC0a±c,vSLY|ŋ^oP%ipvY233'N8wرcfUUkhӤ+b'VVaG%j@F󇁎ItP ~&aL8ju QU 4Z"`INN<˖-z::LO<ċ/:v츴ɳgh &M"|\ti@@@MMf+**&O m}#u. ÈZrXVhhjit((C$7пcFFA;&hllM49aC qb}c;ES<2qQ[d`mjё-AqY?~\뜜vڮСC^xLt:~͛7~}M>&455iVpժa7fZo:~{3h $KM6} &cjhsخ說Z[@1㸨3ljnaն6od^4iRqq10Eoѿ˙3g,X|"O0^((ʄ nwi_):~rwJbU4(jPU7cWYee/%_1~ߗ\*!(*xgo߻aҥ~mss3 **ԩS骪v[oxGf͚5p`N[ jբ$Y0raZu'z(@Nѽ]@ 7BQYR^C EQIA,wV|8ςO:aSO=XYY/I?l,..EN}Er٢|y=zɒ%[Dl:!Ɋ"K&SI΅`o UUXNic٨po5v*ob' ^jXEb48yon-^K߽3jMxq4:*i0* ~۽qFѨ(*۷o_hѿo@Ep8 94,={JOOyy#333^]PE^ziȑ ܹxcBfff]FZEXTWB!s"(q|DhM4E(>Fjhh 쟖J( dI?gfPEQeg}LEijq1b^.=KdLLLǠ( B΄ H>}UU xժUF̟?~ܹ4MCGQS'GUUI-^pӦM׿\-sEihl$U55 %J]C` CY5J EBv+;aeѩ,ܹ_tQS٭P}cEѢuF8ڢ,UPSEZ1('%Q#&MO755=SQQQR]xhO?UUU}!!!5yQ`CBB6lPZZ:0'cگzr~ƍ###dY~'DQx'#""߿q|˖-֭PEWèԓOFN5ke;GVoI0W: }MDžkGkQQ>FDYq.$:}Isv(܊E 0" w-1oJLkk7Ų{\\[j'[SG]aY65Gۃ,/ ʨǫ(rG:YV~E-2v[ zA 1ޝ'3rz;{̔$FtZoy|6EU4qbvv| E`ټo߾~֣b2쬌{{fkC\ IDATKQEQP Guҥ~={6##cԙ悂tH銋#oX]kh(YuN QD c^gfM~?סT}wCia=Z儆v83Pw;{{z6νi$J| \Su~?"ªAeZZ`,A.Zf(!#DUdIeEq TjwΦ)vD[0l6L,URII;2/\2DEh e$IȳvQ#y@ð`Հg&NGʲ\xQף໺UPEQ,&Sɠn==?g'O F?pVϝ2-OhSg<OjjBT0 >Κ@ks(R[a%$x^x^e$q9.jJ 5sgid A6Q~`4$'MoYQklkl/?駟ə0qٓ˯9{vPN*_}o w|ٳ宻Zl]wUVV֕XڷCBBN<9tФ$ߋ*gb F 2Xz@h򷀦 $I,is~+z2(qZ }lXWsŧIg 7yB0Bߺ0 EYk:Ń P.9&R@mN$ۢI lɹ,y/Ô͙RZSl⽋nI|a 6xwT1)I:X6&*]{ک@V#(0Qbq!z}Pqa[pcs v!meE Q|gӳ+ueaμ+o6o8p XD'BOLӺv|ay%AI>5` 0Cq-v7Nv5m78m!A  |w45Yy(:OfgenV<_.qx{O? >t帇~8oZ}}cu۶PN"ӧOZ,>h47|}vQlٲ%**RU{/**ZD/**?r&OI0"RSSUUFˡsl@͏  K`A*$ =^}~MӴ($Y ݾEQK˛LF~O,+5u ~&$O 0@J5e7j:a8 4FOTUUjyRPو"phU !gv{׷;ʲv{‚~&&:v8? ÆtӤꉳEŗZqp vp ÷mʎ5Eް,z`LHbk#R33C/q3\H&!(l$1H* m lVmP[UdfW4h9ؼu3rִ)T9\wbk3uDiдwO>09jez P0`ðǛ`L 56A?S/~6AszLАgM3z|րtE+[n)qR^Q1$VeGWP= ܙ_BXZe{^ P|N<)*2\+3z.U>QlVYri @op@02~D5QEdID^n~EQk^@DZa!c/K ET^wj=!Ruha#Z9%E,4M|ͭ^NCӭVSTTg/ !H] ǓkzhVW&f(=A8Ah#vG9CaZr8bpGmRwcK0:8=|4YӃ^h]s>=* F?fb0藀 0htE 4sU` 'PEPGE0_3 KOf=~\$PMBRfFu 6.sR4h*g_kUM{\!yN.b"ǎ\^>mDE1\Q/(LD>0DۢݭS6耪{)Vcak[[/ "|БcƼ;YYE4:[;*lk3~')RDq[lI 4n=OݪXV[,>/:*taV^EP0IBnTQQy䊽jJHԤ }/8\Q͙y7EQ'6U !wN hwN^aim@ܮwAIHVeee.\@QtQQQj\s}{bԺzx~㜙5j!M(ˣOR`=>ꂹ5gcã685hذPz8A; 3gvלkFJK|̙ʖ-[6k֬: PYΣ4EG;HhlvG FJ:xMwSxTK\yaC4yfMHjc >[Ɋ<#,:i}L_rU#%3؈C:vWxilV#CoM:o f#;]{1UzZ-jk+`Fu1եM>F a k=4MyAqFxm=ttF]a}#=FWe3McmAfhkgklq&I*Z) aItl 8ۭbRUA`Z/ jv^P=f ]\c*x)Jsp2˛5n"$"+k&ia,m~qqZGLDj0A̚u̙#F裏Μ9Dt`yuHϦ4c,3(-bPUEdIv~́AK*3-5d~شstO>i۶#N}ZYF;wn=sPTc^*$8.2j0;'CEYaDx!EZk$I6[/ov|YGO9 uJѣcC/5xS''x"QUu߁~Ymk2"+rYYٚ5k C;wc獍/r&ɓꌁj,K={_(.JqE6GX~-Z:ŷy ]x $IBPA0Uׯ_x1#-wy^lj^Ez="XIQ8W|J9I$m(>u`Ad~^Xañη"aCB_ě_ u!Z)l<Jچ 4,"+ꗅ:$/uRI[>z$ؽ0\ڕ" #(z7 &Gx|Եyw})–m;3ӝ(7Q}Ss~~ 8 ]h82ejzݣ(2È8#(JaIEvLZW86۸ۂo0`ZD`1 oSk E>gKM:E>?AWʛQ0h4bL sy8VH ?afn M*ϘȠ@8QT}>gS (%)j^w_ UW/xeN}:xθ=aHLT`UC]H- odYlL&_u)xyHh9QMhNuXo!pFPƎWNMM٢33Rƌ[Xxd޼#F8nٲeDIN;2o޼ag~ጌ۷\r޼9*sȌܹc޽{q@U:rNzĉ| .]m۶j5>|ۤWV~'GFg}v֬YoT0\UkgCxpMa$c CMJL r>zޅSg07lℌn"vzC Je(xFQtp}vE|\}cIQ6FE;r w숊hlBL}  :%9 C $E%P8/9pptxÃs=ʲ BXQT[t5/iE0}֭h.֮];{l$SSSB+VXS:TVVڢ;q^Kc0 H! EɏYSx|o£y}SbarN4W|[@;}`{sdİ!5!EQv90b/8Hq8_Gz$;vt Jg:p#6,[#&.XS4%ꖻFA#r(,<,Тo۱ϬZU-~KBklys2ȲAxfzl}[` ߔڴYoH { pIYorb{8g666t:ݤ3*6AkJ*++^z`(,,쬬c*oLvvvb&&&f̘1 iɓ^СC].Wpw$?/g}?Iz@Sd>51~tW{g_]wºbEpNTh95|pxX0e0 ˻eacqC)It H`҄ ɿo>̙3!"K k֬)**z' SN3gαcǢ?>uy9sq999|ACCҥK~mYw999pl6ݻw͚5PN}Ϳ%'O>h4z͛7<1b(׿n7NO<ŋN:k֬ .455-]wMuږknhr4òɨѨ5ͭ^h!ZϚLF::=:GDi^lH+[:FͲᄸrE6GBH`"d`l4$1:Et-F!lii.?~`V֡TSϷ`$;X9‘>|bNrR]'@b {Џ)$34$K111cǎ}w!sF/l+H^oa@1eCmV[`0\!!ܹs'O O>9w +M"<;n8Q?ٳgm}]X[xMl[BPO§ 3ĪWa\*Z-BTfgS{B-ViQ}~a^HG IDATՊ{+:(+ti raĉnwmmmjj* _r;!ߙ3g*++srrӧOG>+QQQG}h"? 6yO?4IUUUA^zʕ/^cǎ-++KOO?w\^^ޑ#Gh>w\EEEnn/иr'b[APH0iɬXM0#lg$pѭjA6ƬmmFAW3Ť_lznayS9)C@9|:5$"t2 i@",)S&O,I7|*iS'h?3fx'FcUUo/իu9):F¡,//Zql?s5kֈ$_lN#2PDʕ+_Z`(F~={Y ~^P`Q|f-E1z:bf:i؎tcAQhd0_,ݦ>urda+"-`P)˂dYbBV="^Xt,:n͑F>'g/ФIFc{izpxQw׿O>?_WW4~Rlg̘QZZ (D9nVVVmllLL4牃kͦkQQZͅ QU*)Ťv>^M=$LsΔi!V&IU|EojZsS4x`Cq4+vSuC66{R~zZmskj*[j˖4{WChm s8͛Z8?: $!|P~D.M<׮]~ϟ|"QLE '?-[6|U =Ӆ~vb,E (`EAa6hqlԉK /X9?!IJIIIMFͶsׇBzkÆ 111t}+W%+W˫V%< nmޅGeLXwV<Ǎ&W*ǣ6,o;Nb[;VVN$'E7q1GGΜGv0 U#45-qNg qY ذ~{}??>Uԧs~?::ZQ$I5:Z,O0aڵfy&LLZ'Lp}}t:,8AFpzn#$]R62~ߚl# 2%ٍ(: I!${ܟ=VKyN6K%AeY )IH' JnT4f!<>?֡X6l2;X7EO9a!wX \^^ffUS X,۶m7HBWKIhXvU8ԍe׮]Vh #ڒϝ;mZw1x@V;Ǒ74ddd\.M:]ٳgM<9==pܹ|\s+bTaMI4?q&k^m+/a((b8-h+)-IXLZOJ: ǥ=@媪6t:m LN0EEχ2 !R!HR,w IiR[Wh4 c{ݭ!CS84"01Yl޶{_i{o6ܽoi 2 Vzb3ӝӦPug擸³~ЦS-u.} d~eQfo {ʒ3] \ZXƴB8a+X̜Fl͔I JV3aGhRmSF֭[_{{ !?͈(@Pn£J_-7h'CLϜ+{ފܵW%)+O雞) ̞ ~jŬHin:~glٲx_W:n˖-eYNryoȣE&w^_@il,aʔ)6$I l6 n'yĘ{`0nZl3 k׮իWˢMY>tϥ3P[[Hjexkk4<8|k[ZM:jֶMTeBt};3- JUmZ1QGpe] '@xʕ\6|[愆F!?-|hI&w.0{)\0oWl-9pv}\Ib)P ;h07mڴp_򗷲 E&ƍx{)mN]Jʷ۲2c梅 .QW 7p3B9C"l7&He) :|t@!'[%2!y",6 vf_-[Bg@pa6nA@Q'th>g V++hǛys^L`gsk`[,5T*&̆%yX0p }~y1?=5-$ IyE]Z]0|؛+mA!Af#&čzvolXr! Y,3%@iIKJKMVhfU.!4Mɒh7u5uT&)Uě"={>)%]uZƿMfYU0KJ5kFtE RdBBZ0 j54MAR$\vJpV($K"I3(P8yX|8p+N(e}lVBM~FDr7k۳[ p?1-[|LWNPJ@HiotZfQiQ(1? (Zyp&F[A4ގA|͕+WF>e4hիW[ZZ233DDn (5ᐟ<O1''G]x-1!6d̴Zc/|ig-ZчO:e%a8^]]=bx!I--mÇiRez x=)Jm]a$Y;HӴh S6nd.T:?YSwχ֧ں~{%Z]9򝢢7ޘ}> "}RO5CkՔ vg@ݍ^k]ή]@4%˒^>}O?=`@PkEXgYVU* y>cҷ9}ŝpA~QF\c89p(E3K,)+++,,<{i>`Du$I^p`ۻ7DtQFã>gϞ!C8qGn0_|Y8P(a /`ðr z ?KEne1 +/?q>OG" ʠgbOvVMI zNinHI4SD ,z [shR3 妎Q#!:6&'7ȱc'?wbu+9$ }e˼9sli{%'k\ɓ{O\|6mDtRR|$<b!DEcbJ65 Y0aO;v,BJd,Y$HW^0r?|> HsDž)~eeeW\a~Ȑ!-EѣG%IJII㏏=*bJJJiiɓ^ypWVV&bRRRiaE{39@HqP|B74U5cOSuNNWSHN41$xYn%!_$ڴtD|Mb tRT0ɋ# \I\Rry^or1ZY8vw>L |nz=q}t8%']Αl5(ʾ҅x(l )Y>v,Z6F3#FB%cRQɉZ=.Bĵ*n>~UrȀC$IQj f$I$M@ TxC6̍yD O=Ȅ(q8TZQee . bT&M/OxÑ>qü$}[ 1bBܨg? -=% 2*48g~[oEbAҟ~ Zڵk7nښ /;ȑ#ϟ߲eJz_>}aQܠOi2ƬuyXI~Cp0 yt=kCŋ,&&&^xq‚>aɓ': H 7N:kĝ;w 6ĉ(`ǎ-YrkpXVgee͘1!$ɬFPvvV8}]ٳg#E(*;;q҄kCQ#j#!jffǏeR$SYn0)%X=rVq8z]|C`A;H8I Tf7&SEʵs ۢ"ƍ>r _U3% _}}֌I}vAIvsumޠkp&Se@kAnm8M;˙HF#3=h._Qeff/]<$ F- Jx:LF@\,m_5umWfRWN kwtFjwvmTGIGDX~>NG?G(DljJY}^([ϺS~39(HEc j* aƍ6l@ԬXpӧO9xol6=c>>1 er|pkB`d("@,CY-OLLdDZ.Z#˖7`@bNj܁v~# wR?;07qQ\x"iiFD 0&0 j"+8a&2.["^d$؏cFu&D0$hPuz "}HiPmo8OM44u:m}')!v6=>YtR̭ O顇zeK)1۝q];CǎQ|~pJ|ovN23-5c#D)VՖޙ(b[evi:nv/}T9;s!8u=5Ǎ !=r㟬++MLPV, ~q$Mj5dkt kmV :tęWƱ3MHOڇ&fMKKW,˗CX}!$+J8̥$xM ΁@ۦO'&ȁܻ_`:@E)7ZC!#М9k쩌ӏh2 r[uߞ4)-=xz䒒` ˲r`SBMMC,  C!(J@8  IDATi _t2 ˊ  Y$+֭[7w>lŊ!t4_,++cYӸ@}$+/顇3LFzG.gWS]e'rR3Ni*Wt9.YB&MZdɘ1c~gSK;}տX,1cFݻp 5uMMM99 >ѨcN3zT(:zÇ]c ^ Ght}cpDݕ*̀a@$ILNUn;(jj[:a!0YQ/YĄXM[Fp :~PM:^0(Xu36FBlX vسr-[~xr{LxII%&&ON{O7G'v;k p\CnE?2 ;tQ_p]dґ6:"$A)IcGK׼Z=0j|~~Abb@0!1QE)OٰKQvVaAnWd^}?s}G*!Ae S v;|WSt8Ƣ}kvn UըfCzpP3bjc5Gn/ 4AgQL T}‘[B[XR ֊ ! hFPi\$q"$tD=tǠAᄐ,,P[[;qĂWVUULmk-Z?ts/s4!\scS^s@۳0~^ )U7Y gpĶ[f67 B2/Գw5J ! ELS/=+kkTZ?II^!+dMk+W"F%]OI[F"+W2Rip8ƏVZ' +IqZM uu$7u4gj@xrŨo\lTd~HY3jG̾']s8c'vaqH/pm6 Ea"$N Ƙuw̑40 _*?/f?O8+`yl UURm&|| &!د\О.vS;ld.sjwl8NPfgN<#/NhԪvGR6&%IrSG((I"Οoܹ>;!9ĉǎտwQ&٬8zߟ׵ch{p; >N[aZTTSOD\ *..5MNN SB^`rrrCCgL(Uޖ/#/Z^m=Þ=;xjqs *yzgÞCƁ8 ؐ1qqlqXNkZ݂ $٣<#ɢDE%qŗRz,n՛ko: ƚ|/ `rK.'xU=f"ܲ$DzDZNaԖ6_lϋVGf0ۿg}V }~z=/,&ᢌQ:.9xgzb=q5g}0nO )I HOը}uAҊ=k?Mъ]lϹ.yGnl[ncm8tGn%L;QӐn{BX6 DQ k'Q 1Iw<~7la ae=q2%Aasw{RcH>Z.?ef05 ]Cj^&~ /Z26gtI'%wRSEՊSs+ ցK͖8tLNF }^CؚzZnl$%h40GxxKJ>ok7NOy^PΪaummy"Ϻ'i.ԝ{ihhx X|9Iъ$*RU!awМ{f o(+Rkk"U:RcxȅaƲÉSQDuuuy^ ˊe5B8!ŋlv[ /䩳Çw4__w#nį=+޲@2߿W/hpzA* ] z$DKjEÅc/ܴjΟ# ƺ OC!4Ek zIApU1?t Tbc 8@% Kub((/+{< CAr8^TIFRٲpP<Ð/2@'TY0 FG@gM )> [haS@ aWGI~ /(T%‘X)h[(ƬѨZJ`RPP8JC ,`wxmش1dj 3dg":|~ j?5c qQ ^\I 2"XCකZU5bBPI?+AR feK3HYn[[["Uw;w_~ʕ+vg+kv3w_É+qM=!N3(+ۻJm l:o^>;\>k QWE&}\6/0\8LQJE~fS ֮[o?\[dߘ_;2+&vM0.9n& n[֍v? VYKkl>b9)=q,=>|d~?~ПǘoXhmw:aNuXQih,I^uk썷ӭd@ 9jX,80o9E 19DWi—"D0=4;'zoJKx!:Қ_8Gb~zA&@  /]ɡ@--~3 0beLMMj"t0ٰ(ZFב:wcQS3f{=`3 v15-kĤdN&»R0tƖ`$ 100 pbC(p}£G@m-C<pBnݺ_|O?~deeիe˖UUU'&+++//OLqfqC=vGqԔ$r@NdOzutr@jnRpAde-ƭ˗SŸ|v@ES))Iz e]_[ܭMu!!@WzeAk ׷v~V"fs8h IPQ_= 4VBnєUnT'e0-Y~i/0,*J#) dYjO@ E`&R?%KƳSYx;>Jg0(Ld ?DN^j&'iՑaXz fddC܉Ǣ3bO`$:mʑu"KG$Q~ Skpm)**ڠS%?ڬVk)r].Dxu:IM/HLQTkYTrz$ c oVh>7}*iK]̞O겲sz< x_QD=MB8믊c|1g1@30jL[\V׉b1k-&}?W"بzF`Xk^2DU eBT(>6;;yZ|*g0Ln᠌@e%*u7"KOQm8EA]wW@8 ^:;wFR~Ůn13]Ý `$D! 9SpI|HBlXRp8,|lV'OEeΩlwG{XJcQ>r~:)QV!6TK8^iq1"_q "){Yv^6fZfCNBeQ "7B4 Ca1#&q1=C˜]..[2!eKD mQ?ȢALMn`uA ):D@0aQ1EE@٬/!.'!TT5!I nhZ I1}W1wά_mo3R\8nRb҄By߸q V^ j֭~ETB#E,8a^o3j8Puy}.$B h#zWwı8Snbǹv/N66Wӫ1`{ަP!~~Ϗߏ;gfvgξ9yfuLtu&&&:ZMU4O(`w8N}turvkO=_wҎh ڦ:0|ntc_qtѣ?x{95|2?[EQ .?cF>G>s R:D]W_ݿaW^/k0sӟf%',+߰+5W(_~r/ 99qO=5F B\)IUVZ/t+N9dء+[M4dh ڤo `;O 81HӴ( CTVHVf٬`sy"MMNj~q1ABMn54-2 qpDBxüХJ$[JpCS@u::(MbF"[Qr1z}$IO߷vs 7}^yKٍ^8:~(bl-e9++ tرSN@eeիWÇG@bssE[k 6Lٳg1EiN)f`&0TSX.!A >N@DIs{{WmKXMIV5h sMH răLYd|I>…~׏47z0 hiw\סoUUu 쳣EQ+snhsbayy?hAP6m|fuoܳfdIR?g~jޥq+EQ 8^2z=˲E~<ђo-@~4hnucyTcR!嗃r퟾~`6=e$kؼ!DhRljiyhDĖ7uh6.(VU0 v+kPX4[Cf542hx"9?s&A$Y^0MAޣM@ (08(s;߭ijO儺d  Ga4ٖ͟mW^] 7lذzzKT@4`1cFJJʚ5kƍWVVvrl?wܙZ,?cǎ7ohq^ 5uĤ6j]LYEœյnYA!Qӂ]tEQ'-Z̺TU}w|}0>{boUΰ#45{ Nkڴu멘{OFg?ɨN~}:}  IDAT_աCs)*Z  S :tt;޴R0v? [={nNsG_?v?K8ƽOEdp\:YѺz=s_ 9w;7}Ypд9۸߷bD){[NtO8`p8"(bZJ SӴ*qtBRc9XKr )Rvљ@@6]$: M"!Gt3++cYA_[` UU*XN!\U鎔$AlGM*.SU]mJoD;ydeu Ve9{X]iV/g.D"ɓ'⋒GH#o~CbٵkWvvva+7VVyb{]XXx億xYsssyMSy6z'N 80!!xMFIx8rjB]3a`pAa1u=23 gȨFT!|*_jxxl| /_q֯_E_| A)VݥK6TPH ~%ǒ:_Oic㏿?aFlBדm[?qFh6nW*)i$d:㾋o9wxQh"ٷOΎ`W`?qcՔnxJ)"LK^|GdWd1!CUYhVESE3esT%gZsBgvD H=RW@&W !aCG\'lix@k _t#)gYq8[Z!J 6c3`z+&Lm ^`4R$"*(fؕ+F#!0n\f_i0HL?P^ghZR$h\T B)d2Ϭyb({ 3#FѸjt{T'e`1Q")hWްAOw֌HjWZZJs;%٢kUF8Maâ*w7IHt% MѠ*bR]iYt$I* |l'!$YZ[C$=qb17z$ CU¬&7zYNF41E\c۶Xzf)370:@UQ`S舏Ѝ}/4EjNUTI$Nɟ3rސdYUmkT3!֨$Ų!gIcHI558A yMӺSӴ:WG?{hG,aۺ}-#*?ފ *F'oGqnKx3J @a6kdb:ҺIWcCCvvHS3TZ6UZ/ջǒlIa77X3#pb(#Fm44y^@SI.n4u٬ﰏ(UsϦ33|9z~wcˁ8!,oSvMRAeM% wk;3h6>*$CP ޶-f6^/Aذ֨Y" ] v>ee xMg($IJfJK዗*jAЯZh4(p$ IMUT)nώxBnxw\aEAu2Ad[e$fwHNWz}M'LXAʫ\^^I=i*aj U. PDGF|{ Vָh 4M3 54;m|+9LxUT_#))avamKҝ# W%Y^Qu饋rJ nX79-;s@RǍ~nO(JWUNOgxAByJNG8a0`j*NPaVh1 C(}ڝheTU ˳r50YwruGNw ^;zmCQl$ 0 !XSsA΀a-=,@ol^GTCSwq|i7G6lXΝO5*E[(sw;o /h@[[M]p{/P̲-O/5~cc=3lAD-{J[[{ʎD}+Ă}zۧw8sUHLP*22{"etr֥?SS՞YrZ:tTZg_L6DNt347B8P>$IMգſ$ě+\z=S^ٔulbAw,$g7x\(""|T.@[ez=Csz$tE䜦I DHh儺hcAwYVk&) e:ٙf/-oZͪ,зgde&{Qo ڭRyL9p݋zd(6|retb6%Y ƌݧ6I1AKD,rE3&1 C@PU5 HZ/aK'HH^ DQټ@@(RDZh\;m5JʛPKV 9 ')ZEQkj*o^wۮ~ӥiߪwi׊hyXO¸O>Y{M9zL#23m]a>GϞ~ʔ4M8#Ɓ}Ppaent9'iӲ%Iٵԩ˽9s>y{lIRoUW[[[# Ë99oϘ[>_O:ciqL]m`EBL(wBɈaծzM5 jv ^7|댟uDQ/пlEab^\FtH3#P]ov<> pYS$ P(LQ:Llf7ro/jnb5WӒz 1c2vzdԨc**-(ڿq1zL&*6LUQOFtڲuί[w>:{w+ظq4+.Ns˗^zi{-hS -_&&w~bݚ5?|UC[سei۷?kw {+v&wؽ++*Gy\3 H~~(pQMP%"P3k/[﹦ϊKgZZBlx0MCU5yw\wVYL$JHRb p;feYۓt]\ xAjvBaj5K8 F{=PhU0l$+->Mʫ0 PRlcRm՞)!˪1(xA4E WOmw,S@ߠ7fm:Aolٲ% \f̅uuu߸a-ei` ofIIɺu=eI6@hCDF8 ht V)E(Z((&}+9Ltt]/Z٬I$.@jwub18S9VSFFPbalD8<ގ#(WT:SVQK˚[|$)Q-Y{JTP0]cR~ ۿh:lV O>"iCMMW_}5gΜ[;v66?)8A-Z:ݹM4 bջQ;= Jqm Ec , Z~]Ӿ ʾM]?fQu< wRlUnNWr (jJ,U&ޛUVinO pn(Nh"b/~`aÆXpa~9r7M(i^?mj1j]44}sKϊ gLi_nɓ+Vk׎3v9rذa+W{رC7onܸ~58qD~Ǝvڗ^zW^ljjZ`%K={vԩ}4h;c}嗽z/-[vرqA;.4mIi2g~Sov KKf ӻstk4ǡ(0c$6ԝnjyl!bOv{;Sݳg.Xϝuf Fn1iꚛ '>mZ6|:arqP]h$IQ)v1b +..垩I Z}T䆦qq欌ΜfԷ `0L=o4Mp8$JI*sZEuuc'I5z'GFp{ 0@E"aCe_b4k4+tW^yr}w.**n;f4hѢ'NDQLEv5Mk30v!C:uׯYp͛7 ?~w8~cǎXYMӢfc/~u9|pЅKM#Z9su׵t3O΍ S;Q>ݶbvnQx9Ż2._ٓӧDY9Esډdw ?yѣǎUd4eZ5xɒErT[$MTUQEq S%UE$pn[[՚r_Dǿ<=+3({_aVXk#'lVYQ7[4uʘ'O9*,!˝:VV|E7ڕ[l֛?lZcU`tcHӆq#<:<n޼ b٪E[YZ:b#q5kVYYٺuP:x`QQъ+ERUeܸqq4M+((xwǏ|ǝ˰2 IIIqEot$(ʮƎguzME1`vmcg[G7Ϙ*`@lĜ?|m"<][#Ag8N%H蓝l3$I;NTt+?zMȽ@T`*'QL/# YIƯ8IsgOe]4.˲t,7O뾹ԯp.#q]>'$ 8q,%R  u{ɳرcǹs.]wGZ+VXri 񼀢Hl#""A/^f͚\]]tq" AZo޾}O<`5 aȚIKSD@w8l~j)Jz '(4UIqB1A1A5nTUaYAV@b.5unEŚaA:g&:3 pyf Itbf9[vzxq\~'=n$Ih ̔uz3AhZjǎNss̉D"@lPdy…7n!I": EQPDYk=?,..~yӹaÆ~rِOՂ7$?^YΡ5U8\JK{cTf04.tΑ"0Q5 k:vR7r(en萑IׯwĹ Kťos CYm;h7yْ)k?:/w{[~&E| #LF-Fh46ܾs05Mv`0J0t-%Ib۶oMM $ƅvڷb<ݞP $(΄e2 :^BVyyy gNIkXx׬YGM8ѣ$m6\t`0<QqF{ t njjzw1n8MSkl۶]ף(zر+Vlڼ?a&1WXѣG#G=zrrr͛-o7ߤ^1X4 }l^=Ip(>[ir(4۽GO`y<—'ț,u1oΌO?+2I+K.Yl2*ʝeE^~EP$ѠgU@jj",q- Og}VU5MEYk=R#O>SUU F, <t:,@EEMR5vhUQ^~EAˮs}d\u.G=fdUQB! Ō DX?x)r7AA=WVp<R6%YeYشE09KOz8o{(} )*UmIδ).G#Hi&OH6tE]"UV5?yf1w۾ԷFaXNP59N᝹#GΝ;033'AQTQ 8XxqaaSv9dȐk׮Y-E٘BĠAF->}3A`uw4q>n8.W 7s̽{nذ#۷eTUm4pFZF!3ڭ35t=i#HyMFcG( -Y45 N`MѴ/?&G!cFNzOx+\hޕzb5>f!1)޽]{kE02hSqLst%<8o@CcӾ g﮻L푙QWEEQFHIUT ֛yєXL+W|뭷֮]xͅ WUU@04'O4iRQQэ7&N(Bm6&''O2, `#=uA[n悦E}+h0;>LUd@ЇzW^yW޸qŋ):}ٳ_{5-WV?v_xðgyfȐ!wcEQu:6LSdWIOWT}u'P/\|PW<''O/ٗ,wei̛Ŏ].߄q br{ ݟ^7d00(toJ6ݞ k!ᨩ*WBdddY.޵oD$@6fƬF! PP [b(ȱOV] ƅTٹ?wMwWPXU/ % ̱S{@Y>~PySp%S%n߾G郷EzΘLӽTYk5+SthAϋDsTAqQ⌦ 2e4et6o= 'MO\|~駟~*IgΜYVV6a„e˖egg̙3AW˗5j9wWVu ò3u1bhFwYQ2y0| _%mIAs\x 5 p}rж_WN2h&EYMeA:O=iZSs  6MN{UGo05xA6|^ʭ6vT u}!ҝi $IDܟߎ=0|$6݈c+ۋՄxa(+Ya*;OzOJ[å hِ+ }3bά䤊oRSϷU8 iMI4ƍb ZNQTۋ&'Gi!]L2ChBXr1X4hI5u޽s>H$lʉ'-M:46iZȢ&w3qiQkj=I(* Bzj'g9ް?{g;Q>>-lY R|mOY(RCA5MWCG&W.eF+j,<"Rߩ͆E^5܃N]EI+)8dg>ʹBLUQ8T쫪ZQ&HJxS[UFRRBޠmO=7F ϟ\h΃afau4M3R]_VZ9~|~Ft񊬸ChHǍ@PCCs8t:H}4UHȋaD@n9$1 EHc:߲/YW_ݹsٳw~웶m?dQx衇 ].W@,KFaΜ9sijj:zUUǟ9sG?QҴu@Ӻ[ʪRca ]tinт9j ƏNᓣGGƏM&g[-7R5DIE&FAL&Eц +kh Jյ^^F"q{,pK7=ң'5nZ>):Yf9E1I%ޛn'ِp!˗.X'I ^ZXlB*}Jb|Է7n/.S HM:u@/HgʼQz_8deUn^_]JIEYP%HLWk22{E~M:8>9q6$ko}sSO68ttzS#dzAE6#ypo d8h+:E D"l]ߦ)u:MŨD'r؍"h}p:|AdI`طnݺ|o߾MMMw^n]tX( 裏]LFݳ=_[Sۯ_ssC~Wc_EQΝ_O2E?#?PTl$Q_/+YM4(-vG`>rzJJJwHEeE\@}[m?w=;DSs``TE t 5U^796mN}LNG+]X3 e؉3U5fw~ݦ!b1W?P 'D9`3eS%^5篼0: kG~`4޺u=o@@M-*R8[(͘HZGP:hb'duu=}/*)~/ENCԨ3uoPoлAiAeqIQ g2Э/4McHAEߕt4~6mA:(hR? ,}y7QէOԔ䨳VUD~cf(={|wzfeq}r,/ Bիg̘*AP}Z6 V߄-O+$*nO6nJghn%ۃ>95܅|}s$nYŐ$).%$IZMבM~&&%"5u>A\3 s%QK ZteҐ{enQU +fy c I?߲$nXP]}Y?`3*\R)n< _}}졥"j$lq:^7=O֮;Vu2 ?V$kq‚( MS(~偩k{e)O L&qIޱV^^_СC -]g/H9> ' zDիOu9.--mƍG \ A7MӠIbHo $Jr59}ˬ[ ^ϲlVF|cMP"Ȉ W4Mn5t:QV}'H 'QSUUQdԨȊ"(.*b1cƬYя"! i,ˊ$PyfRiPQgY'l2EQ4hl7T:z -3]6YFMqc&Ɏ&6QI]Q'vfUXʱ[cv%RR0p8;$P[7,f:(4:|~wKѶz9:I iܴ8v1d S)%O$ iܳGBy[חW5geķҤ$[o4Z,:o; HvVbM D)1"K,uRPU UTmڴҥK7onakj, tW3aEa? T[eh4475glj\]uuiVevՀɖ̒RF}{fe5uxXA&9~𣋫WpY= 9Ԕ{ F,o4:a`tTz-c-hiqzf&׷vsз6l6wEA'(^쎬u OGo-))_$/_ϛ=5)oMwƎR21)4LO}rp B 2;lQjP8*r$šM}}+oO:_ p`C=Mf cesn/S32B!4 k]˻~e׮XEN '!u&v{qC!@vOf{r3}sK^V+p̘1F^~f7n|0(^?~_TV^Ϸlƍoٳ)v ' ٸqcII HLD@e4Y Ku'J>A$dSsõ R8 Ӕtœ,I)RSPKMk8A"ڣG۷[Vk~gg:9 >Pb6K"O߸ueyU~]5Uܰho[_/3^ŠaEC.UmƜY—k6\lZ ì,q!j$𜬔D"طoXb9Ksqb _3\G"ƻچWN޶]Z~^8 ˜Na%eY,E$@zZ5_M4M˒t0dE5 _,Q4xA+@<zM?z:űIӦMcY+ð 6MR4'BZ]H3rȳ q8Z );vDB8HNN։S !IpElV1 Cdu夺]V ,IJ]C'Iw I ]!" /.ږm;W~"u&Ə-kB>zEˆ-Vg0kuMpڅ( dI$L&,=pDeEe}ZyнDrekB᎒JMKIgw1s#'TUK⽺gwES (xny{ &@7 [G!!03A  Y;Kj7UnE9+`gOR4EgX#%!&?%5 믿FL#G:pֽx<^ x6lXH$Ɠ( 5ݨlN~㷼/+hc[aV+ۈ[3ff؛ fQ$#]w8h46|5UE~ }ѢEN_1A?wqGJO> Y&J1ӃW3 ȊZ-(|x8~3e&IsYihUsfo*ʇwJ;t;q(e <5ضpwVvԛ8X;POUqcCxp$t9 Hʈ'dֵГpvvN yPU..ZH"8a45du <>233͛q\V납{8NOIi ¸.$T9VθR,ehՍ#Yie >;h𸒒m[_}U;vIwK(,K24 (ִ2xeF_-y ɪxAQC{Z((㛮VIϝ#!l_$ksj[y M---]`A~z1dȐYfM2E׵kv͚5wu**p6Vw8Ns~ѣ,X ͛gΜa]7mT^^ɓ'Ax7q34^O+c"A;TiCje?>#&\1B{藄Y +ٳ" `… gϞ'=z/={&T`Ϯ^|nݺOO{2HnYxYdl+@5E^}{l۶mz￯($n7Ei6'ȥKgffƎ{o檊!ǎcf@5/ S\?55ر,ȑ(Yf͚5222w޽y'6558p`ӦMׯo=z=iҤS'_9~n-U[> g~{b1]K'*EQ É=̷_=SpAعkM7H-ۉqB=0 VK䄂,X(fU ..^/MR/ 4 Ӯ 麀iQq n%Q8kC(&E8^O׶`8)KrfzQBG=6SH֮qr4MDy͐>jj Ot]QAÝEqY5(&IҴ0 c㪪&JrfV$I.0$ eƌ~ᆪ'nrdii?Fu ^FQh\0\xo9 ^iRqC߽X|5x _;'+aūtsz`#ͦf~9W?aeWς^j1a""a(t)N5 ]յ :]Cq^ ðZ;ZႼtV(jufqI./'$aCr-aٜ7o{Ou( >luSSSvvޛK駟0`Ç/#F0~؎?/}Y駟߿޽{o馩SFo?pB[n?|ٿ1e/x_|ӽzzGI^ܬnaʔ)<+((0&f9NK(VUU`]D>f!i PUŝN'qI[X|q:thuM2%''aoj=z^^ԩS?{KZg ˖-9s%K C@bo7h*X|tM>tJðf,5=^8q3NgUU(bMG{7Λ7ʰaC<8rHGUf=z1cp͛Ƭ;,ʒȁ.˵9v0 -SFI:luFFŋI$ ]vs=VuѢۭV]11b[m6sLbk׮xb̙ꫯpA0rժUDaݻwwr4tPe-ZzL BAkx>/;bnnn>=x$Cr114< ðlHB+Yj-0h0 @rXl 6TTTX,̸Z?mvS BHS1x{,}PK,衇 RXX# -??4 ]{ݧ~v3>ӇzP圜G}0 (vcZgΜ"VNNK)xGѓǁܳIMM}w|ICW;xBtq|DCh[lӻuݶNM@5s b_}h:e[9I=_uUw,=nTz,~뫬u>j ~0c[c .*shG񞽥S'Op9c<0h|Q#gg,K7"yIK`<q' !ɩ+ p,- b\(krJ4s|^YS-_/)fd6[~#FY^//pĉk֬Y~ӧO+"?iӦ=ㆮ5*;;{޽UW]`-wyggϾ?뮻Eʕ+Ν{yWƏSO&LPTTcǎAZ KjFOt];MԩS_{ ZnUUj؁9Ag"iI%mV,)|2RTۭ@5MSDn;$,C-\@SIVN>oލñx<ө9[n[ܤH|,Hq},,:Ma7 IDATdЀC74zI"Bk*6d`gz'Ny-K]Ro'JRSSß&^7Togep\]JnP@MG{*ɯο:nCDmʾ0‘dLSo_pΝEEEz/ȉ zCMW1I;kqǎU2 R&D h6+뺮c1 洓a4M1B|bSA~઩R"W#Ç ')-DgFM3=tqi؄ȱny1fq 5o-+j4"N\H Tm] k4'p͏ Eju~BI9ylIտ:YʨYk{,${m!PDyC6;45P,&O^F|dzNV5qIQ*|Nv:ҽzv6 3f<|M[ O=uyyɶMgEy $IfO&mY7 еC~ghtĉmp0 3bĈ3fo-ZԳgO8@Yz~iozzzQ\[֒>=mvP,b8{|B־| F!%9{ùY)?J24i%β 6Ⱶ=6x^dawNUU:+ɜLӌ(?#====ՕD$҈ҧk> H Rr R|V2)~&ez2jPoDZ0DR8Y$IANp.jCN/\ =CJQ}:vر*T1B+X0fBRIBiw1t^ӜSdgD0iI \YVHj8!Vi$AdT4!hY" );A_1ռiO>9}qƵke߿֬Yg H51f̘7|c,}?~b:W\D|AMSюvƔ)S}%KDJhSxUU%Ʋ%EΪ r*qzGq;ރ>QY46|x:CamTURBfVg}}z :5 ?%j$ɞ4M AaN r]!Sh̰B|jş CÐ CѣU5XIBpzR$\"(I8Kk"vX\(qWF=`OPO^6~AHz͚˓FI,ˊ"E}SUX1yyn6z}_j҄dY X28ϿB[jY4de W5׬\0qt?QЫgLOגggj@sFFF/je Eac> \;MRd7u1v Ȁu KxO5LGjN-Id3f̸{wԔ{ga躶puӧw[lYdIFFF:DZ_g͚u8>}tE ΋ v7%8WVVڣY$[X,ޣ$BW|w7z @w?ƌk4iaSlΧ v֟bι*5JIJ9S6IqNZqa~eYoS4?a0?ػ{cyҢ*= [$9:"a`B CT|ա+ W[K`b,EM-g<)$) "[6r)!I{i6w5@0PGa2,]׿93y$_Rdlo5faT3w)y)QqiS^wFu$.5'g|'NE?N"=?س_qǓ-K3;:;ǂ8NHyhH!HR4]\֭33]݊ ^}wNKKOMMZǏ|8q޵kdI-ݻo1@1C---eee钘]r]YYYASNܼy3ÇKƂm]l߱޽ɰYm'FYԯ_?e.f J2X8Wj5k@(S(6XŒ9)5 :_eL(ZUUY2f 墦Ώb$ N#C&`WZ(@#csBri"(JUdM':!4%f`ƨ;srwLt~2Qa/nE23vH9/q̗8M[gG"R=9ճ7߭v>^H$KP(" `MJګz#<8fdy~krt"P$hsSEeeæC ;}!F"h<0\9]S CGPM0tPꆮJ$ 4(nhkR@(IQ#Ij,!ʲR~n:kq)%I5tR*{/n4wOUQӊR8m.2*)V]ۭhEŒLri.1}]X\D9dYH]rS$bK0zA '&r~o(mVAM8{}^e#Gv;@es#A <]eréNҐ{eZKR\iٶ ;,ީ(-@As HM#'L~?q_6_ edd^7#P \Ga*ޜn%E)j80LCp.'dHIGb"U5~IqZ.4m6 $Iu 5CaQAΪՇzTOV>bt8*#L͋uUHR [,lqmm-i*J縁Q4`8w:ΡLB0!Њ /. QoN9[,DkcNch^!p D2?թ8 Ncѵ$ 2FP?F3 h4 VZS~]6TFIKK'O~].$$ܼ:K@ތ5|t޽ZN$IiEL BӔ +E6tByԾCn;\= },߹}9_TU;pϟAjYB y~րv7}~XWﶻC-W]1[s #uS\h戦ex^ ē%pB(IFS,]яiÑYY@(0&/ E^=MeR&-$"QnF>/}!~X$Iꚜ}N%]UTk{01&Y*Kȓ Nv;G$`%tňh$6t$QI٣irݗa(yi{ۦ?[]7-+X,D YDf#t<3M0 1(ׯQ6/$ډBMI!:i |u8)A9t r0UUJSt4לgA^[#m+/k}cږޱ֖v[79bee49 鵧Cb/ڭDU6n9or(R&jK f ($5  C뺮iϳ#yt]:79u/c4CKl‘d8* |johjiY@H́MSu+\ez|2aJ IyF_ fsQԔ஭H_zqUF_I]Zmz z9ݻ.}{EH\(TۭuM:m=vV)ǜ6;(gNnʙfta"fsZ/}#xMoR <2dſ&E,C趋=% A`9YL( $Ir]CeȢ4%fچH%$a$CQ+t  b--06my]G")cEd>`:mEb"bdu"F`1L?!IJ,7Arۊ;?AĻ]FS3rvC%I4E-qo !,KMq<'.tF_Hՠ$ɞt;A`"w￿muvbS|p`ԨSRv8>oL2F Z ;y~kSDB?g<^Zֳa ~oUWuN= =j Ӥ^ ;C$ƍ00w$ HDYMe}ƦN]"(r 'dYkj #i*Hf;hqCc8Jo7o!?G2Iwnk$(9%Kڵ-SdƆ 1WS6lX @ yHmwg۶+W?O>aÆE;_ R ,O,I,Vȑ/ނ_a7(B䢩B8席,DQRLu wA&ItlVFd2S ènFPBDOnc'ML<s{>vY2ځ`<i*.޽:'͍]wǟ@ (.J"{dggd;iК:O/#[beAM-jfi99g _-["rfHAz!4u.1((@0T@tHXh kuV5Cmٷhgy1p߄0 Xt/gt,%X^xݽ׿^0VO6 #F䕔|kر S6n<=bDޤIb"`0ƌ):cav}Çٴ鴪g&;p0HR4Zӑ[0J~N<#Ҽ-nu}M,0c) ȁ!t(,* Ez`FCciQ\biixԌlIm7^wW5 NAQ8^q{^`A߾}kkkMFՀf7 =3~" AQGQ"(˖p:[I![v)}ZWЫ:7)`xv:j^BQ6 ?wۜ,řt> eH‘KD``nv!P&8hF GNSM|]?}w5(2>q] $;0|x@AKSF[rȰ,-MwY{D|cWiMWƎ=[[>../}~+j$sF?N(I`.'izSx^pŘ}BǔLU*pޚw)dz& mC&hY,nW$af eٓnKI9;1WQ v̓ :.f;Y[02=.㮸⊉'zޝ;wzli,s=zXn ` MB67S([ln56{cg)^/ UV$),kWxX16Б&{2GʍᥥݷoiJtfںpKЅgg NQKqG^NI^m TUkngKKPe*IM?=a^og( |cTgmb1X(pPkL5Yسn8OxxZBd̘͉O1vlС9 uÆ4Kޭ;v ()qvãss]o`]]6$I4q4hc5cIs7^SUuP K8M{yA߭j5u'%+q E xo5&rLRO7KM}pWO+F>'* èkع>}!1͂a_tiAA?B2Ĵ صkWyynjB A1ӟn˗S٭۶eggϞ={Μ9lߪU;G}۶m0OKQqqۉcƎNqfw}[`Acc1c;ƲtNgOh t2Av:| rBJHs۬0 WOU5;z_nY.Uvl0$s 04ȑᆱ@JacÕMWΚ>p==97Flɤp:Ք%d1ѴS|EfNXoTm̘BUW[,Đ!Y_{_uj_[K%$,@b7 6^cv8q&v>{2qN|g&c 6 0bhkk}$@̜39zNխWQrdMS c/r\ZK'*IDATygo;6dޖa/xw"KYv'bw\?0[zS_sEE $h+a3ljy) a!!tX(jʤ O\UZg`B3G%3$偃Ϝ-{bLɉv'̙45Unjl1ׯ_.))hn߾|իWO:ꫯ8?󕕕.\qW_>}sCz ;ڽ0oŋǏ_|֭[mAnݺrJ:gnFӌ?v# s;Pȑ#'&'\Gjf{7 Kgy՜1c49440aPRRiIJP^$@0,:ők% _kJJjfH1r F\Ҷsg%=~ GKWr8Żn3:rceJ_l.޲ugk*mB; QǵwCeYq 1i>pMӬ(1QAZ11O=Bnzqׅ<)T~|> 'eYqڅ(+B ҼPX$IǍW[[ݻ.\z_xzzӧ12338iӦFiPGpHJ׌N1իWL߫SO=cßܹAؠ㹏`-af!P 2IIJ3־cgQ^츛[HKy뭹7o/.7w .5͞5xI78#A? Kx$F!U v=rVUՖc-(HC5p4,A cwːp)6FZ+زqd)uϋ:Oʝ>uҽܣLh2M-]v \kkGB ,=DD ޯ޼/+Bh5EY+R3ǎbcJaqn³ϋϞ=lɂ^(Q\\ A0lFPWUVV^|gI)joVRRRQQ~;xϢS ȁ )2GTT:HU"(Ix^^!ut$IxJڦ g:j|GsFxF-(y#\VVr ,KM_vچ ƍʕ߳-OdZ5n zL0߳ɪPKn `:yrʶnQ0K= ~3>zfC?+YU6w?7 IQԊGo&F:Gotl[8-vxwtMa_WcyF$I2òQKNQkLP$;* *aQfaƎq:nh%%evB'd}ţ_?\s֡lٲu71*mK8G{Z /G?Eq{?8NS2G4Dk*c?mDQ\zӀ"onE Pcs'"+nEյϟ~~~+w@HP>SW~9?e'O.-DTr ֮jZLI_? !4j\˹w.cconv6YA۷Ns |}.]Ah/0E3WV+3sfja᪟th^B ^ YqK mf2Gf}rn1ȮHǝliصm괼I|$a6#%I" I<'R[i^o%)V$4MZۻCa GƘw8O?ֶ-ۋFL>)<4Ef͚5w7|3--|?'?1ր:N꯼ʌ3g̘KKKgNp>ض=%##33#1)QU5YVV6|+/Ϙ1sDzyp̙/~iӦ|ǕG}TU'Nh|L`ٟ/x "|]C[*B-]:5Mq͂vx}O~bѾՀPV#￿^8aڵ֮_Ə#uu }}aرA$đI8rکkL0̸u|3"#ԠhhөkKu׭޷c~2"0 u ʲr|kkHQ4Osׄ IYnFʼn } {1};)pvM݂oE&EkMbEG[Eu9}ݱI$)>.-$ܫ()JQĸ]p2̼?nףKm~h`fSbrOkʅ7o裏ZZZNefϞS\\liii$8q9:e*P"n۸qCKKfrrr/~r^'|SLl6<92mڴ4 v$6fA/_4uxNu8LȔhonRT; cX>v t]3*ڽw^)y@잯Т%(!ڠQ]LONs!6JiEtRg63bg!C2A!jK8ð^֡< ^g+G){._Y;8 =mogYn Au/ϛH$5Dk Gƚ@dL>Q6$yzW<S H]!EM&,+&p*!nn8,n+3 /A14{˲MѴHcǎ<|5ZsH[?[b?} a Wbi Jl(p,2ARFdVS$]D4fβ78;@&1 ˙ =/"AR= uO3$=%jMA]~0 % ]Y{ ȊAyWv5M0a8KnWtxEk[(Ca6wuw}{Fу`4cV͛p)Ae"(4M%G# rb%w"_HHMUS?}_!IJ_{E6]XǥZ-.5/!cwېal5 s~A<W:pdvH3I>H&Ae:B,:}fBhM|lsf b0M~b(@ĴuBWwj#,0 3 ,!%9!0X-|/h!qح`hWў)ΓSMMGR&%IwYM& J AP,[|SuىS~|r@n-RDr/km4kM,NjO p#IR~~~aao`֬iox߽rMz;8t+`cƌjjji2q_pbzz˗DIv4]RRRVЙ#Gbk 'DqTIYWai#Ba!F8TQqr:t(!!!'!d?[ZvPXㄦRpW:hdPmGD|]Ae}!!ekseG6m BE!罝P<,&I: <`0GH*u8N,mY;LrP=n{Q9suL(}(D#l<_bך{.?^U$þu ~+"jh ˲HQV~ =CSkG}(o}rxϏiZo2r/_btvvnذV:V 'g*//'Iw=v i>w'N0 ~%9߶X\Q4g JKKIsss0xl]v<~s/_) / Vfs)OIV4"M߻m`fp&,4Ad߹[]wz$>ǹ'^hwE{&I{Hă! \SU`ַ{8 ^@h B$Iv+*ړrBMZ,yaAͥCAtKPv]o0qC,K 44vE[; Iʕ+SN`ҧE:i܇&ॗ^zw cmXӴR;::222 .$gffYflVG6 geٸcQϟ?Od[[[o?7o I2dffVTTd|^$'Οȶ{:çl`qJr"BdeYػk|%ii#i}+.ئm\RҔC[t88nJ-h1s?(to`]nIY0[BQlhOIzp"B;QxhArk[)'F9j F署`R!YwYMzWk;"?k 2mo\R`SK'BȨ'HFdӚlWdPDtj?4M#I,!1mUH4mEׯm pGATW:## +++[d Iv斖b8n kq⫯Zx1Itnܸq֭vܹsb-:Rg۴p74z:Uu0Asx|E0-U¥NNi~g-C-8Em.! ;N8@4.{u!:PkrgJR(Jsӎ[;BQ+Νf⪪9lB_ u`0/)3!mA15M!Q^Bь$qVR$h ߮z}w7W\!O>VYy%33~bՊ򲲬M6eff޺u iEQo2bȰ;u=vq$[J=AOEQ;3gΘ1cm023=硂O~,1Z*_|5UU&G8IE]}+9ի)z n33sr]w"uk:8fMUWbvEiq3r-I"n9)YBuMWuonHhE &%pX:h?{%i쮜[0g1ot\4{w !llutFpT%/ #}8ki@L`IENDB`mapnik-3.0.9/demo/viewer/images/down.png000066400000000000000000000112371262555547000201700ustar00rootroot00000000000000PNG  IHDR00WgAMA7iCCPICC ProfilexK@ǿHAAj*],fPC,j4i!U8Dı@7AD.t}{޻w9N]kna5'mmDH鞓U 4~̚u9fQj[Ħs)th:RG&O'{:Q\AL}P\؎ɧRty.Cz[ZPӾ m۱h%l0Qa.W*`l6e#gx8D[t$.ktѥ؂=Lb(lZ/㋷y'g*dD9 V`u0|!~K]K)8K# ; pI<&r S. sV+dt݃ر_Q'b3Vw,lj#E0/ !'5?$yYw mhi(^Z*.:IzKYg>ƒHI_a8t0a2+in퀽5nV2O!zYOUKAZ_xij %/JxyZ(pRyAm85.-W*c'G)QoN*]DIjƀR@da]%`A|>zR=[!X4ئ6Lk70#A42xǘyP bg*K }2 쓔U@*"+ɍyW\DJWX$*(/h岙lDPmXBԊ6.:)efL '@/!ReH)$ol^|eWO~*I JEYZPO||Эi ^W*/Uv1vǯwRVR%$V` =| {=1$ix 4LseZE)Z zJZ5EjH-[ۀsǬi4!8FJnAMt oE,މP&L?{ORy߾e ({=(~*sC̺qh}v'3\dyڦ4mæF(}MP"r;sј"F哕^;Ubaj3T/)]/e7;:}k  H+A)9<; ~mfs3))#WJutdqÊS61>n6 L 5hs'.dojו#X6_ M _[)fK[Gxy8Ul$+X璃<4Lx N>s\Np3L,7a/}Y IGW¾Xg˱ܗG>XԘsznS72 2Θ1 zr10ҩ(b:攢~ysxdJT ~c=Y?0bQ?A)bZJ>KNrcQȲ:t#^)ts}¯΅ľ4KjSisYuxzg-BTD~7KǒKeڇGG1Ӆa\q7x㔍=ڕ/d_!U;Y_W\L0szjbZO ,1bcb)l^HJd"F!#C5=18Μ{341LCБݍ8rSi\ӹ dY*NN`T@tx{i#_{fyueO̡7EW+ ̆ɖM`5 )@=$ #R8ڐH4+j=e&E,"McG>  ZIg*|614d:؅!Ƃ]dM+s諝bˮe|9iYCܙM2H,nuSw2ʊ C2t!FS!y)dIt!^o?1p60޴tG^(&E搩O ] =-jK)?ޑz% +(aSe{G4t9g0R/ Tg[m~%c7X{ǍX~1W9qr%fU^jJs!o FJ! u~bJ9TDUm&o8F C?w3CӖ}XS*u w"N^q KT`ӾAI/r_6#g7#ECTDT&ɳk o;)xuWMh``3&Xɒ)"[F7wCte9ro;rId}hR;=#ޟ/6M7KW/ͨ5t i5AVc/;gFqs89Zݦ|ĜHɗ5Tmo^ДsCJ@VsX>sYM%L#qb+]H2128S8=3Bt:YW:Q]o^1܊>F;GK<(+X&p&-)6:B"&S0nkQP(9{rw)埮Y]ݯ,|^v5 vH'MB ӛܕ8PM9pcWϯdҼ&2c6Q9?fg ^OQc| o=^꜂bIENDB`mapnik-3.0.9/demo/viewer/images/export.png000066400000000000000000000030741262555547000205420ustar00rootroot00000000000000PNG  IHDR szzgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?@bb`@,%%E ff&!!Q ߟ? `_ T ;s133 |ō_?Ů# @(`gNN.166a#@0ÁTg`dҌ@98ax1ݻwtŀv]؁}ePPa`cced! `>862133A@ r 0|MM-c( 7P $_pb1@_?^x@Y; P!###,S0Md!3P߂PT[[~0@dH<3m` Y LE_H&LqC10 ֋ dZk`Zd`$Pf @̠xAĂ= 80`: cFX$X8Dȟ?2b pv-P &NX;H!D"Ģ O QF #b;[4*@.7RV92XBs#rb&BF73$-ff׿, KKi ṘˠR) Bˁ"X p  `g7o@VmCдrPC8f } X ; 3 8:[ Q>/_>ex?< EX"{ý{ 6Β\Ykk#55e`0 `l Ǐ_V>WU;4U933f iR/D_%*v,!@tn2k ( fVͿ30Z3  vv@_ \\@Gr@+PaBq33xLuO>3~`1F  ZPP`d,# ͫ? ߾;[!X BQ&Hu2 @|''Y0Oa }?~1|A]]ALLAHḢ$XY.aφ, E Ő(No~bb7o>b͆ Bbg!P ̂ P^|vN""2X2hh(0BoC| Odϟ߁ԭG9]\ &)5Y Ԍ^ 9Pn84Bd`0߻wk8}C!@ h`;h.A=IENDB`mapnik-3.0.9/demo/viewer/images/filter.png000066400000000000000000000113111262555547000204770ustar00rootroot00000000000000PNG  IHDR #ꦷbKGDC pHYsHHFk> vpAg TIDAThݗwT纇"F@rJ=vcCc`4;[TBS"u ?nY''{uy{[3C?XYSWj3FGA!-繪0A- gG3{t,+$k%%"8sɘqI)Ƿ?al724-yE lv[@mpX uLLQ!ufܢ8N\<^p(?doCփN&4XҳYq ял}zpۘfB1΋ژ3-"f;s"+>)y(;+;'rֲ\mBvG~Z"d>՟j'n ᩭ6cu6Ck6Ahঘ6pt;r!wTVUhƙizΨKAGNZmJtCuc.:(!Kz;vNql?pG:-/.j :qv7HɂfTn q# 8^(`ACW@Yvc'W`@i1nu 8SK9^چ[q6l4UKb-v`Fz@$\>wDP=ֻo_ތxC̯̫z5W> PWT[A{2[n'zWMo=1vOH^4X=7h_KofXvc.KipXXVq'mfD/HJe$Nj@V[^}= :*Jncp u-׬/iZg@O=C3=>h:  `X0U ߾Բ @t_ PP[y xYz'uJ^Ӷkx KXTI%F-*@i)5u`!^>h0kvef{+Sig=e _ݹS̛znvW++zVbc<7猏K%6 j'j`X pD9kb.)6z[( Eq 7 Gs%'L S`إȯ:N6 rqw>WH]%Ҝ|_m _3S8Oe ; jzrUE@ *ݴq-Zhn`?a78L 6|+)SQAwrD_l|;C f?̯KZP-c}{'Xyai=fl `l@vYQjv ӆPP p圆Oo87wZ YX,j|*y;ߕl+y:#I]e`PӑW=5K5!%^6tkegvT߯nӓ\ __(huPt;]/,T{ {sgƩ_*:\2 x-` 4֘"!Hx,L+*R`Kyؔ׋q> G@QZa")`r1m1t9LՔջ҇_ ̐hf 7cd H{|lxfMvX XR,cN@MYMf9`nnn&W/$t`Z̞Npx8 \x4)aWَZ۟{;0&6  RmOg. xVX<T/pC dD>%EтP]$U {[Ic/8ݞ# % 6َM2}օ?s?(*g:g@yCڂɊsDYDv`ii}`K݌LHwmbctg Ӏ͵unZYϯjyZG*'';_PmlPQhg=Y]WSzZ|D4V<|@l쾬@`O^sa* T dY`Y(,+~R3~֖="* 6W+ʣ@aFÜG4wj- m7Xr}UŽt+'9Ľu'̇\o3Z䀭7P}ڣ&xyS 7&OYZ>FZG/"l k<r;SU})ʷ̯ ?}eݖ}l%Fu!1'?.>w6ü@gSbMXSUh5 '9.k]x)HcQc|ε1VUTnw7^PuRU]ȭ1?Aqc9P^Q371$OMEKϝ^t%6@alңlMgJ̉uo":-G^/\5kf3ppZ_h/oALp_A['^?}~ؚ{ qpV,uWG#%NբnA.`sE/>+%:lZD-x(Wn~8U_!Nl,IENDB`mapnik-3.0.9/demo/viewer/images/globe.png000066400000000000000000000017131262555547000203070ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME6#IXIDAT8mKhey̾fwy7iS&VT "ZTBUz IAVA/^l)A= ޤGIjmM7ͺ&;;;3{TIuÃx멣{QY77~}N xܥ+w-6uQ3hWzNq^u|B=҅wJbdjE,.DvuS+u%JeKLW+oj瓏;fX,(+,ڮ ylϡKS:}CF`)jA͖i{FܪS0--8B@:9vc#]ONDMnsTMg t&t'c8Kv)-~-U1MO$-BIQX/2y*q|n?Nˣh痑"_x/-xZ·Wh{qi:mrljYYɑztޤ*ꝹoMP$!Ip3\ȝW~E2EXWH0˓'^?]o,#k z*2BjubWo"ٔ_žG^B9IBč FDCTzhTmZ5_SZxqe/NoAWGd v07~HtD񽃻񨔌ECT㲾[)fޯ'1ɧ~VU!إŅkSS@nɫ? IENDB`mapnik-3.0.9/demo/viewer/images/globe_bw.png000066400000000000000000000016431262555547000210010ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME60IDAT8mMh\ew2?w2L'6!MKՂ +]oEq'Ѕ ݸ?p!хT0ERPPIc&&d2IfsT :7g/HuB26>{e̩_tݱ{oUڵ;ʵڑ C"eR\OoƯ<C_=mOju)0a#H`Fcdh~7>@>2Ruu WxR[o2 E*|xm,JqDKw}Oҋݛ M4]!#ȐL‚`k&'ߓ=fCbCVjkLͭ"8_OЗOq@?|780щ,WhENdv @ gcH)6pw*X0ѝΰ6~q\fX Z[7;hm"ïuJ, Dťs2,-#%`ڠZk25[TѓN­1 o#=lEz/y)8{~NQZMwsy3nL|*N=Z>FʗRIEkفڰ1מP|鉱 R zv Ե9&N55i^> }G?RLԺ$.$v'N$Ri5f[gK+7~e\!VՕKS*!'IENDB`mapnik-3.0.9/demo/viewer/images/help.png000066400000000000000000000051571262555547000201550ustar00rootroot00000000000000PNG  IHDR szzgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxb?@bb`@,0,L_3XX YtYYD3㯟?oP3! ~b?_ib!DPDLVB@S^^AT(/÷_![;nx¿/_301- FXJ37E^K9טAOU( ~?F? gԏdb? nLJY ,˱9 Gr6MQ.Ҿ2 ~ D癋O=~ ' `C ￳2((I30e%Ps,9 +bL@$g`dY.k+ C,߱w8%uE!֏3=a R ܜ b;7Kg> dj6Yo.rP14ʂ?S 8ve YaF.Ë>}4o ?=f`fPrbbf L4\ Ąbfb !>:`F/8[pyHJpk3OVиXLM^!7@΃D7?0xKZATGO~ &$ӘQ lp* LF`bb`Vd/ÇODV_/×ozad-O_x599Y @#"(+/ LX?_2ˊ1L\a' =+n2A83O/ą94H|+# t'ZB8_GE9G>b1~< |" 3v}b8|r?jRL@~, 5 ?}`,P#ZB8IOZA }exW`fcSbPZ1\A^AJXncx7ý?BH(Ǐ ,< Lll0kVVeN.`!_ Swax/8a͏G;2|L Y_`1HĂw_ \p0333w,L o~eyÚCoj#0ȁ?̀TF2  /8s 102:/v/.} *dؙ5(T//z7LZT_vc?ZB*~gā??`0𰂣@RAR-AGïϞxZB8s RMQ\&vagcX]PPϰBl?>P wKo }  P~,{ܾ |dPbБaaxw_ف?KXl}-`ca@j r8#cC'~|A[Y!dy? < `x 8m@0Y1|;s LcB ?;ppotwb_n$?CO`1v_COع1I?^dX_# .iY*;Z 2}ū ߀f043m` ,,, `[Dt@v@b5V ]YY89䁎;0`A;BJE&7q{4cwIENDB`mapnik-3.0.9/demo/viewer/images/home.png000066400000000000000000000106161262555547000201510ustar00rootroot00000000000000PNG  IHDR00WgAMA7iCCPICC ProfilexK@ǿHAAj*],fPC,j4i!U8Dı@7AD.t}{޻w9N]kna5'mmDH鞓U 4~{ *ۗ|]5!y4c_2|L/gX쎠Pm_Z@\/ ]UkM <=҇G*{f KN`)tki{D DPzorcΦ JC*NɧdXND)NJokwM-mI9 ; s^Tܺ4muS8=UJP:NE/)?I:^qq1vS?vpiǙ2?g20ǥEgU܄BgPDْY^Bhܼ$8E:P_ۆy"3)d^0J[0چp$f>059BEm[bt ʧ)|^?.Y2oUA =N$ (2Q9ι0iJ:WU9Gľȏn64b:w\ܱ0^1k&kB,b -l6wBWSIk`CT;NF%( ɡk%(6Vğ `]tR$ JUHþBN+2$!L9HM'R]XzwƹV'D28Q3%2E6Ect([ Rv7:F o)Cߠ@gfjM!.eq)>c̹;]q1ql@ҋ˗spbGuɑaĿϪ'.`:zF)G nй6 qb1ѵ^9e_ŌuP =8ꡮi{sWVFrv6E-pLH̕MJFh&gVH;8kmo}P!ḡbaVcQa]]=)hCҴtj\6uo_rۼn_XQʙِW`C88ǞD߭AVْ JfPQ UWcSypnH9̓g+(Ɨ?m%IK^kԬi-"5J^4S%J18RفO?WGPxgV%`k&/Y۰iSE[p52l($DxtF[kO3{AT5|:ޟou9j%Jm*DC')Qnti&y Qe"h□B7 ѹix/Z%6=c$m|Mnx_krt91N]6akжqڷG(fnж)X6%<+bccƌkנ+>Lrg?`=߂K3=m016tvj&Igh`כVZtR|%+&ST` < 'Pu7 +OMOᝏ|ꅰzHh^u^Wq$:00r:tpuW%pP˨ͅ-@9eB1V[~37¼ N|KZ~rJ[mT>~}ND:mSxf!ITB=3[PwP:cx$Z) cir)e9xHP.I&T뷕TU\uCY?~ނ&(,z.jףּ]uUOZkŘcFeeF1ɖyڭVifW@mlB`I0y,YW};tY4w'7i`϶6PA #%d*a^pyR oCWr1 .w<^+J}H0*ܕb@`@1ws[e%xޟkmCƜnXzWiP9pCCuEʫ1,zzP^r%7F4W`߉d8aѹ #iȁhb i2bJE!U'P6jT{҆̚}GO;7߸"ޭ;Mbz|R|F\DTQɄWNH@$4:DχmE QtbP',RRYah4EwfM 75ƚߍeqƭqcӍ]rӍ72o+yydIR1W 00DQ٭H.mzzGSp/9l2trK`ͬp>ty6?O;ʣec_sL(_Om^NZH<>~l.oFu3-*^5#a\@Dxo*$MM5/dwFO[?^[[RTOJYuuj;a̱cx4E#VMF`1Ciy<2MXg(,fS&Ħ9,fv*~L_w zwRr}`{X}}}~F80"S k 1iZL# śdF\5(9 I+%bhhH)wfS䋌رԩS1gV@GxfN:8.$+S6󐫁{ccH$2Hf tiqXRATyx}i o%C0}**FCK+%9Θq'/BƼ+t^mL: O@PxDosF[]O 'jeRN)kj j@ } @`❑;S깂h 1~^ LJ%lwvv 窙=/D Oe:,ЧaAem=#|ܹKbFl8SiȤ#0䛍%SnjL>KKI?/0 Dɼ@'$Sksi$Vр'2g7Vc^ƥ>ʰ@B> ;pdBL|m30dZm>\pEVCx?Eq( skYxh@l4F|Bh8|zCe϶hH?888*?M;'>+ o5ω͞*doXa׃ 7GD$Vˎd\eiyZ$LS_>~%^*l6ry%׈4[fF~~ɚ7ɥy> a0_VIENDB`mapnik-3.0.9/demo/viewer/images/info.png000066400000000000000000000044301262555547000201510ustar00rootroot00000000000000PNG  IHDR szzgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?@bb`@bA0­S21ÿ@11(yhf@; 10!zY g Q_|^b JR bb l 20|NA7Dy-- 6.TwS1߀> oJ#UELcF__AG  ށ ׀(V_w5(o Aq3|0p2p3t/#yEl]ʁY L]$ ؘf`s9011ʽ4O#:Ni`Qb+ 44?Fo;;aFOsaay_1Ni_^^^o?~_@?@z~~`#û]3p3}fБ_vV&6&V N|at H? o?`facrĂVj 0|%Pgf2b:0bdfp7`P0G0 +ákw?Ā˗ \| ̜\ [ &41|&$? GgX|+qAn`2xpg_@u>d 9fϠJf 4g&@`cpw?1\z~ea;;1ew|T`3"[ @ݏ?!U ן0l>A>fca\222B|g`Z ̊? |JBsÍOo?832c@ex_E->}-`'-Y~ &X9.j[6 FhȀ Vp,02@k>` P~ RtJBu3w^>('' `4 r4ظx~؉l%@1E=`ruu)!vA>` 1 "0# Ж?P`f~!ЬAuJB Lߓ+7}AKQ(7$x>bV:BBTS¡@A!-"6~ܽ @ (B p^*j/E% ,$O [ !)a@a`9_3؉D L03s]ܲ-u n.`t|,ŰCAY;#7+ ×_, i>R ڭx9ɓW\S ? lMbDNDA:CP B֜S\w| Tޓ/Xb÷sXU>Ft#&Ɩ[76)VWfVSfAopcF`Vcd7n0߿f-, |!hg , YX@U*07b."T fڋ8[ LGq߿_>r! ,Z]nF@[c4@1t o@=f-,IENDB`mapnik-3.0.9/demo/viewer/images/left.png000066400000000000000000000067141262555547000201570ustar00rootroot00000000000000PNG  IHDR #ꦷbKGDC pHYsHHFk> vpAg WIDAThytU}D$! !$D&!@@yF@ ̢((ݭ ( PfEph!F H 1!$ ;ԭr{\vuuٵwUo.Q/ Xp+;F\iݓ6N7Tͪ-Zk5t3e޴wϚp(fBtޡ;x/oo2%~ܞ!|ʐ:7|JTDp{$!w9AFȰfw,Sw Um'M6d>7.ݻKgfPs7)0O|*_}mM1RC%{ׯN}&mNTK=7$qtuIy[,*䉐s޷FJ1j lJ[TOp[n:oɁԸSb~) C +.R\~ LW :./:ZDL3ب0F'2]h?eͷ̃9O|:mkcj$\.l87*,iE©ܧnVSPf#|Fmk I.B_$)hujɹF\JXSRv9@S(\0)$c,@QSy1&?XvBvҴ%y_no~/yQ+T,4D+hocd_f<%%y;Lj|c=3WvqPҝyǶT g6&%ظ j|n Kf#"̜q3P6YS+KWNT33z}Nj d82`G4cgG0%_>?8[sb2LGPzM\l>׸;:yoΠタO\)Mfu+b M4rCBrK߭^Cfp^cŕrJ˗Pwݭ_ޫ疲9Mwђ"㹒|?8N,Rg,]y>ЌQ^xFȊ;斴,>4F -6( }r&Vx8h̨g{W_~Ӧ=\^q+u*F9QCz8 2 `.|6?CYN>=^[_doЙ7k1 K+=O[c:$#ʾv솉gjnz8]$kMU"+! l,L]D?sh@ (|? L~fG- j@WۻMY(r1^<_YMu1p倅/s( H#rB L@gajOv7';5&rϦTRTnfdz/O7T'rײ>jm&Ig9c σw~k꟧"}n{: 0@%k~Ot)x xs%GL>c/I e? d=s .S@9rPɛőA ~oX1!fo8gNF5 DRvYmvϕ &L`l@~@hB-q]z, $90'2\[}T\'yog;ge5DKeu][pBgi nWOޯiϝxyl`d|Hϓ#FY*F87O~umlNuGZEcm .po^ݬ{[C>XZ*QDc _226W'Wׯ Gq^iW#J;vwt*ty{ (S]A 7:ZԔ @-Z2)/o\ ઊϪEuws=Wil]bYgqh/*X{s 7=jH1S5$Wգ*Zblp/]/9r#;ٓt);z NtuZ%[9G9F1"'T׀fs1 S/ Ώ04&a:SX#FE+>aЃ߇&ۖ5ʾ)ObNK33qJa$R Y;pUA(:tSʗ+*U$YXU,7 jk _T)oݶt,V'"7oi,Ւ%fwKk=()a;Ƌ#ݣ8{c&׽2S:@ /IS {.2 pUQL+A.oEpnUz=YrzObi+.zG/%ʝ|IENDB`mapnik-3.0.9/demo/viewer/images/mapnik.png000066400000000000000000000103341262555547000204750ustar00rootroot00000000000000PNG  IHDR,U)PLTE       &%,$ &!* !#7#%#/%#&%5%%-)@$),)+)',:'0K01/&2G,28$4N/3@23;-4E)7W28=686=?BO;DXGHKGIF3Lw>PwPROTVS;YQW\RVdIW|BXJYuRYkS^j[]\[\eF`X`r!Udefd]fzXgLhTifiwVklmk.-joqNsUtksospu}uvtTz<=ixWz>Dv}x}}}HL_c\iOMeRUxWUydvwb늏knՈjbamg눓|o됔uq萘|טopu{掝ꄠ䇡מwtz勣΅ᗢ֟䅧}ߤ⩫̙ޖ٠“᦮“ݢٜ߬ȳϣܝޱ姺⪾β¿ܴ޿ܻYbKGDH pHYs  tIME -ftEXtCommentmapnik KIDATx pdCZ@DOEPp'艣܍#` ]ኸ+]ŏk4E.D/ˮX.-,) IMKWZ(7lk4M_y7aӬr,, ˂e`Y,X, ˂eX,X, ˂e!Zj]U[,XҜٶ) Cw|YդZ:T6xE9e,&D[,XT9q%b\ahHEj`eU JR:-TFSbi$¤!\5X*ɋD\(OR: KQ!\s׉CՓ`5c<IQ)1 f. I&plMWuhQ{mup^K H))J%1&pd"7FU];Fm4{ڍ1NHH$R)1g/"`B4M>ޣ`VcsN2k{,%8{$<_–FM$ S$>p.hKVtlI61AE> S el)!@1}[ۅE&=PYMX"єŅT (dESK=n7A`Mg>`(e" 5bY6§%1-qH,)IW•2L({<8Ngg>bcFRz2|)Ö<|Y`M% aYH dJ`l,)ս=IY3 Ms]t* 7 j%2 \#7b֌V fʒ9I6pl( ,c0FTg6iB!|Kz0-SÉ修9no~ڬYs>#K1^ } 8$UU_/^ \"uac'?aۨͣ;7`ҟ*!}`޽7\|`W]nԭ";lע( I!. .umpO1~s/a4i$hqnCM-&lR&{,ń`wNvx`C@bĐcT}8aPCti9XH൚FCgB{NUUX nBVך44>\S{@5uo? {e6^\0Șİ5k;Չgm (nv`TPpۮɳϰ@H\NET0HFnWj*kv&ez־-Ǵ\Ց~,x]eeJklKl+ J!,)eX יp蘡, Be]Cae[$)Une(@Jsb' FalgVYW/2kYj:#3_~r,JKlhq"]יpWgٻYc(.Z2ӏz!5h8b y}((n8ee嬝yF3g=tpHƅ|F /Xǟ"<͜egeuQ!ۉSY\#jMƄ7S0ϙ ! |FgY0ggqueu3X};3١_|ODe9)&&#{Y(Yvb:9,)޻8"YvF zmDeKqg`DQ9x,+Hy74Y)%#ȕ~{KuӌƓ%!hBvIoD7wPP<ɧȷ9}^4+{s#`Ux(lRt8K^7C#oUw☷I;{2 @&r zj,YJusӗx}OADO+\aײv:3~1{v~닜\ }?bNUSW!].)k,SwJeVZc=n_Q=zUb (B(3itOi}Swbz[pMsyCŨ;}4}OSl4B1~~z:0D}ha.  KA4w T9<4]Je}G$]##t`e"8 +ؕu" wr ;uՒ+Bb16|R 1 M|,?*7(_,9w[*Md`Ahy1HW쟋QhYeae3xEg{w7yxӀ%8E@T)؄y swY4S 0.cK~1jԨ#F|a;f2RgH*a8).[lPY.:/d=4Dxy2d ayePH\Y#x!~.hqmr,+ch,.pL()zG{z<2!*( +=]X:^3m_~U2%lnATp?AQ4EVEQ5ՂՉIxZϪgѨ ˂e_XgIENDB`mapnik-3.0.9/demo/viewer/images/pan.png000066400000000000000000000047501262555547000200010ustar00rootroot00000000000000PNG  IHDR szzgAMA7tEXtSoftwareAdobe ImageReadyqe< zIDATxl @[;c56"8Ʉ .?qVhrDz ǻ]11P1"a&}?:] 4^X#20@CB?~esH d?h  ﯲ"Â9 }S%9Y0ȆO7@i 2ehC7ů߿cd(b0Q6aJQpumN!Phf0@w?E_+743/- MANH77CW2j2lzэ @/Э F hR_J-TTgUWa3L @{)_r8x04E2?{\@ YB21#'30|bxpۿ.3| ?}aa`HbRpε&Vz= (`|B J 0߷ L $1ӿ.3a7dДbp 3bAHڔu B %; ͦ,`g 27 ]+y(V,лr]0pNGw2@!0u F W}PЍc O_``b`D- 02(ʫ0!C!D2s4ٍ?ٓ.=B8OQ883l~AۀIaGwr1sX.f31‹> /lV(ehVȠȦΐ?aڙ_XWC H ~28;h;0rq0fx+4R7o>0M bxBbo%lgLۙ=8D={?'a墳8Ӏ[Ăt-?hDXdG' /_?;͗A!q2+Haف ^zG0hcpYZgB8Q ngPp !bhN~672LX??P)p\B)X1)Z1gf?S37$1IgNf_X2tX&pZcBni (`X2?h|h`w濠 g$@ [Hnk33 XZOڅ ZXB c&BΆ ! ?#8y !x2483݂)D"bZ8'#?`ixzz/< `\ ?ױ1s3232.`tČV0ο~4ctexXcfbbf{U=d|[*^bcORc}K#g0LzY3 YCjBF;)K<|ce4_ j1p|] tMc`\3)K K3X3|3p, oFQ-pɅ@˟0~)C|-Cyl(3+gMm%)eSYq1/'1lyAMG0a .]ιf@`dX.97m '1H3&1B2C9 翞`ba(PlebZ/13`:Q$@D~}lhsn?30 ?6`UCX$ e`0a(Sif/QSyS <.@ XPgygO>11KX6?1pB"@u '#X-wB:cN9s/3B@,L˗-nvk3D T~W _xۏ3 lT#B@8V@]FqJB/&Ͽfl_<1"H6dBʆ?&b40]A+1@x1py||Ϸ#2&!3s6޻ 5@b-hDcТ]YzmAaL/( @`frxY\M,Vv) 욁lb7s%0ޤ y}TIENDB`mapnik-3.0.9/demo/viewer/images/print.png000066400000000000000000000075551262555547000203650ustar00rootroot00000000000000PNG  IHDR #ꦷbKGDC pHYsHHFk> vpAg IDATh՘y|Vǿs}C'B$(@Y"Q@ĂP*APA @ VPP +6!d"ٗ;ao[lV9wg|ι3gF+WW kW4 O'־tk (ԩ-$-3A$K F}cs?W p [bx\ Dcq01TFW.---_0c}>h?e}[.]xm ͫ_i8{=No{|rNW $?b.lq;P@ >ɢ?- ǁs1, :T|G]]d4W9zsÿ;8N.fb4ln J':.~1HqQ$@< @p ,,ntH]sbf1U(OFO}E_[cX1Ǹ"ެ`UTrp[$h@}KVÇHk?.L∣^)'?dILLZ@$ʝ:ctK888\ܝ/ƓS`[@TOvH|YŠ? Y~^*TIk^-t#OC㒦^z$>*Kih:t!M%,y4R>8 PH ._AK7~wYEşM6#SO;ӯ*7eNGtAK7MX-Ko<$Qܩ8 pYiX;>N|@{9L/},t w^3( ǁ8yid]/M`30?"Y z8]j>P J+"}Ͻ^d_;hfy^4C|/b=={УH֤f>@tW،a?suTO"|rNlyz\mQ(jGr=EG5 lQ.AR'xM,syy5 sgz+yHMv d_ MTIɠk"['PHc]p묡>v^)S9c?~ *?:ޮI]G+/3@emzXh.^kYuC̬1' kػ!ٮA&6 l5ᭆ `v5w{lІ*s@^P*} |dBLŲTV*f7+uIXecxoF{jj ! C&=GUwBnamHMXqV{k XX!`g^֘*09P8m,tb j jog_}=ׂxLVUid%4Om\ ކaf},QSQN#Ȃ)ǁ7/L~7Zkf^T7WWk psugkGo;b;֘.A9 hXRe8{ %e8yLH~.gq^)8[ir 'F>/oG:;%#}!] Wd-"Gy@En OBŷw bl1ͯssͷ^ UR? j4?O46}FHOtr.@g ꎂ[+? w63U_'e'CA\dBv.@^'mrJ-G 8L 2\RN ' #|}7"e{Ʒ;0D%0֛c>??M&|{{(<_z++bŒc0;^s.ʭP_-kjp&f9 Vf$KcA^'c#9A A2_^8q9dwy,9Y [., rF_!w m`p5HV9MOڿܽx ykFLZ&O3^w"xdoRub1moE$c&u:Y\t[phTTQ@RyI?}AW|ЍF.:[:B_@WWwQku~O[}FU2PE}@ԇAOPUh3// ~ŋ́7%}Tεd 5BMSlcwo4=/D냧u}C:׿ZfjMړ5b%ˆ4p3g̓|ʭPҋ@0 B(LA@Hk;D ! "VA}ݯu|!`@"q@L4鐚?|p )&AEP`)x룥j[Gc\2|vYgvvP$Ah#ͣZBƵ S 7:teKgZ)@mmWc~|^3H1;gY6MhJfSG'\5\t4̱b2"f!ךּ5u7UEP9w=<1mn=ܺiX@= u}^pOnħCW6_: \\@3je[na{t؁;/of?}0 H ZWVrGɠY{V2dHʪH=T߮~_R$Dr. Zu(kuŪ!']똴 *E TCG\#gU>}p^}ƎR)䇓e'N_҇y_“ Nxt=Zѣ{p(R82Ȝ#3tGZ|ZTZ#26exL/]2ﻹqk}_x]Mn*x!0;ɷߏ.]f p%b\I'XmTFA %7pӼA7̓ƅ Ym_o @Oy5*XfysotSUΘH#Ξ+>|\'dXUh}aO\?g___=,ibԤ{-|9%FըՙZjM}Hb3r tFoI<ؘx)h{˖;莃fbBfv7'w Ou:u4@~%dŖ1;\*TN䵖\]FﻘIENDB`mapnik-3.0.9/demo/viewer/images/reload.png000066400000000000000000000124271262555547000204710ustar00rootroot00000000000000PNG  IHDR #ꦷbKGDC pHYsHHFk> vpAg IDAThݙwpU흝$$! $Ћ4QZ(AH!b@ RPҔ )d;|3ߜsި?eoǪz[w>Zn;BճrR~f$ҼIj6 M摰드$x gpx;.:_罌_j_zE`@j~۪,8?;zrȁFvqvN!)܎c ր}.~{:$ T"9ZEpI*Sr'FZ+!j/S$~_#Xl#ֺ)%-˷FOVTi?yZ=}FYȰ@L1(83a']iv=;Y(]z68SL{ХQGfdv/4nMϸ;_k1|qE/%K)QW2׃"jm%L ҇o3e,拱6y1PGbn +jFy^_j&~קZy_63Blnr{f%{w#"|%`1@Z,+=㪩_i3֎?k Sλ3)b+{qlw 6{}>2yRRQHP/6)Y_A/x-c1(f*(g 8%ȟF?`\$GHSr@1 +C `6Ƹyջ|>6ۙ3[Z:^W3-U\u1k z==lj5֦ڼ0[I+=ܗRtjyKmJ.ej|?ok.^p\=Θ þ: Hn# fYdm-7];b>rr/9J O*Q\_eOPKZޓCwk6wu39wKKWAeM72s&E6*L.hͪV,iJYwiUc|iD2ecL/CPQ SQQod!^c|Vr@$O2@nFoQ>qhU꺆9(bih9!4bK[m8 ediCn,=gѸ{6– ,\N;Q&>lS!ÕPGC V+Qڃ:`;f["+yA)Q Ar[ re" Ԫ>36k̇@a=k@Y :,QDʾgƣ|~Oݨ,Z!-SGͷV5Ѯs%結 k|q,{ Ӈ몣zNٶ(T_Vd"c3;vr@G.=+qVA-A_Z1 sR"$${u&Ngcww*@nP.85]hK8VZk9߼nqQ5i|De-|]@]t1S @,}trrIGdwv$y҄.mC[))܇xgC}{Aj{~w.~Kw?nh|/ 4jakiLZY xAT WjM/=_{-mRǯZ\M͝{w{WUZp\128{W'6{}c:L0Xoשi7 iEoT$Ȳa[eafv@qN!Og+6QjI;er;SA8?КtY ]ܥ$t@cOT?75 b`p亳 r-$zI.(uۓWfo͍ OZp_ڪ+k%FgM)y ga%9 fqOL:˝B'8FT983+NFꡭ|;d{LJȃ5' C X2L&=B8*;o /ޤtͽjS0zQuɜ|lVzT'H^t#D;e %2~rZ* y[t)_Ե0ޛft6%&jk;~Ҝ8Fm-X5Wә8m\z=P eDJm*n?RV~N)80x-ɿ'/]sjH?h(@Y=/={: bDA(;j\.+*rY4AwtS 7ngiq+ݪwq 6a/({gm9 Yls|Ƀ"rwY]~cތke`\bKuǂsJ΁H" "%'✭[Z~;25{~e?->Evg{\zG((X n95w#H)Њ v{\4J Q qO0@H@~:@m rn%)|['>i)}YmЕ Zխ%`f}G܍c cPr¸%<AGAkN]ꃰԛ]FKl*l՛>ŻM s]~]= ì_[es͢O*)7/ Oe>|2$ S2O[n1}C πH8@ݐ `nc"i783䌖rPuVԴFͳ i![lY)Fu `HQR]P?jaPmIJR}i}AQJq3kh>rh)8ʻ`J--i0O3k`L[t9HfjfnrbH] 4Qh*ƣTʊڗFmUft\~FZb,3 b;ך:[OtD^}'y[7纷}k{I;7x;RnTqsoOpX%IBmYZBU֭& \Vu3hlGSy)c$6${ѮUcJ.Ihn2c|7νcܚJХuwc 5CO&o Ҫ66O=PQret|gʾmsd֣n`ƧԤ.NT1WP~Vbu_k:XxP"/1H-mPrs=^ݱwOn/tݱogdnIENDB`mapnik-3.0.9/demo/viewer/images/right.png000066400000000000000000000072571262555547000203450ustar00rootroot00000000000000PNG  IHDR #ꦷ pHYs  aIDAThYy\U_ks@PA@E)rHyp LVΥ|dH1i 2QsBATP{~{1_=|~8^{^)5ƭ?8Yi7n~8źUq)ؖ.aKfkdƍwtuOG3O\b<,G<,U \)GC9Lvq@ϐ~S?<Ÿ, OVoKSt,=_~6бt&O칯vmk;uckfSBM|ʵKzs.~kE{AX~6m5txI+7 kYQn_㷯CMPBذX~.f*3dǔޙ;*G-~/L`2}!IB0W,,'5eo%꟮xg#:xjouZXN"L`^l>pvYX pg֠8=vkwχ.=oZee4# O-녑v!ULsq b =Pyp؂GT6rviWۍg[ס'wx8}8'*2S|o$WӠHzM L:.Sw#ɘ rg13eEP|ݢ\7]9^艐b5 WNYz\yC_\.=Q3뀓4;| 0m[E-Hܙ`A9r() PfkA| 5pk2 k> ;b`o3fvb?}ie+hc3m~T0b-gUϋ*ɻQu=uW<[ZޖVP `Ug?LXb;!NSx;pъ9\m8 .pǠ?eѧS;؁ M ErFK)s{voO1 d;Ԃ2z E:Y\uƔu)Ts4*}]C5]z&pܻ|vTVgw]1V|/0 P68/t~s>#X\M%BƗ$rV鍉LF?5Ow) Z2J!p8|hjz< FBaM oEu=y/ >+jM7vMos@ ,!3)7~60/?=$Ya tqn%(PMM!KP =%n\LIfʠtcl( jԃ-(Rέ /7꺇j_O!'D|lc_BD7l7P/K;Tx)N_*[& i|b*)J(9습g\i̶(ʮaBw?"vb(&Ԥ8S uN޴xD^ǟԵ7I$gCk޹C8wH4 [;umop ;#D\,Ƃ=0;0 N/?VbޥVMǤu+ 0 %`O.*X*\KP>p0S#x 4d7w\XQǦb4H|MC_so&^ٯ˝(E-GSYQ~f>J D:7"KTfޔ4ZH<).Vr5u9.-bgQr_^+`PEr$W= ;f'YBOcF6n**…T_2j&GjNɣ `=W:MvU.8HN5޼=ӟO|[} 3SCxS C!Nrk>e{*?q^ΧRI*#*au3\\yX*so.s6~x MП/gRZU>v JpeW7+sD[qڛ@Dž|]Siu!k>с~iE_EobvPIENDB`mapnik-3.0.9/demo/viewer/images/style.png000066400000000000000000000115231262555547000203570ustar00rootroot00000000000000PNG  IHDR #ꦷbKGDC pHYsHHFk> vpAg IDAThݘwtUU?ܒJHB(!(Aj( RE)#JPPJPԑ^ H 5'{~zf͛q]'OZg=vEJ*Ggu+SZyBBYϟ=؟.$î.N]ÑՑG! Bozlb U9;:dz9@=hZGZl<$J.|R~x=4& AvgBYG.1֚ ę[1daM+ik.2q9-vΈ _fZ΅?SR'-sf{ Ǭ6B(<׼udIsK/7݋K ǭћ=_ Ȳ)/. \cj`{sm{욣WNۓWPz6jkrz%9}CvCCVN(WU}E{U3 ޔV(0PM2GpTV2ΊĪ6ձ]?98Sf %*s庪dWݿh7K}Po@nF7})g ng(i];!D#1; 29k?j8P?Ec96Z:LR+' /K~dWխ }=Jbخ>VSV);ϙrceڣaOzWͶlzpSR#}dW42;~9FTO-tϽ2d+pyw^aN:gpRլtEnZOL,Y1dw$m .=;58kqG[sX:M)*#iR;I4Oߢ. fjݻ ZHoa?`yR.POV@å#Fb/Xfo)*o0bQ(W:w@pM7>`*~{>ْ^wcu/hwoG8wOq(Dbj5xmgAB+'e-ϻsx9c2v _,Ž__* 3hmll3D{ Th]jn <ٱe=rxA{nh(Sǂ\_ F0E }8=/V_TwYe+ L֠Y}E>kmг zDk"[{h2|;ƶT/g Lruo)7TTk _ gZ&h9¾>5l*/Ll֣ڑң@L^>gcȲGŬrY^gyud8!WWu8jG8T 'K-lJ]46[`l^_f?'j5[?)}-]EZ1HErrNA UjFI0׸/r l [\ oDr{)si"{+ ouD/5lsOOuNY{2浙jR߶.2lwDzbyQC2z 7<-, UMGiQ#[p.Yn{? zuDu_ GP ME xHx?-Q6=W%-O&>[ uH+WbP*H*3Ա3D.Kky&Bp)DINY|hMm i "<*{^\ah^4g>ǪB# RKk0Fo)Q$@O^ zH^Mz4)R.QEf#1׵*?ytO s_K,ߗ@$Ns/ uzU[R]\UCGa9b]QP|,ZV1I_c9=-I;N Y&N݊ի)eK[S*ǃNim&%+P6Zgߨg+&0w6;C'/w]O lܳ `WݶqN?A:6<]?;^ЏC'@#_OM9 k3:P->:ł m[˷=G^2ILu䗕i(\ja]n im}`Z;&x56.Y^mV;5 ,ᬚ-*Z}&,lӚMApOגrgj{ݻլ6ˊAϺkMe K=x,FdKe7f+ؿԎmV)C}du2|ǻ{j>RP4_GF[r k0mdY" *6oW'{FxK"rZ:3cyq {Iӻk1ⴿxi@UR;*W Z\Ğ227?]1g*={QF_nַ~L17*騵=azHl& PZ#@^TC}Qh- y5Ȩ*$I  xK6B GtZbu/K7vU]%4v ;af%-D]&&EWS_iV}h_ky MR(u gA"ݕv\蠣=6sQ_#u<L-܄"_o%:s굿<A%[?* ٖBrʯf/u~_牿,l+ɯt)0b]F}}; vʽPCGR9EX`D;E{ԽƃrK3)E*h-WLh=RC U}Jp*—|qy0o݉G_` nc\_+Z?:,mqEsWS1ILPodWi+AyɰNC[@ktw=|$F+ˀ<)s][Kߨ<{15̐wW5 Vv^،=A,hszU-ӥP\ݩgDJ^gM팁5(D vD{Y-eQ< 590]y􇺏HmP<RVW}0A/<޳/+Z\ 7|/07hwp,bv}s5-tf" 8:씯K)ʦ4똱Д$;˹Գ@iX JqD@V#wYR,+}R,P>Mͼ{guc5Wխւπ{W|Y1CFC75on |5ٺ,xl@WJ>M g}V{k?[ }Tq5tDc\GzsZ cuν' tr ARww,$zg;:j)cі2SHL;ۦ0Q*%>W{Nƽ3I.˳^qf{pqjPUG;3ߍ:b$}ن}&dIENDB`mapnik-3.0.9/demo/viewer/images/up.png000066400000000000000000000112041262555547000176370ustar00rootroot00000000000000PNG  IHDR00WgAMA7iCCPICC ProfilexK@ǿHAAj*],fPC,j4i!U8Dı@7AD.t}{޻w9N]kna5'mmDH鞓U 4~ u,h dLTqF>G Lh߿/QrPeBhho&`1,_,n4 $Dc@z"cH!JKq<D;TyZ1;iY!j}6l\ HW.Z(t(ң/(,/q궋`?M@陋<̻"D8O<3ľ@? k!в p +pj7|SL 7Ez ^-SL$ l >ċ~yVD tkeO3^kV-gie7!n\_ \nbePxB@D+@hB]C#hأai=sCkw*碑%HI$/߈[>;}@'y.pC)|ST^}kH)MMƙ,(ptl6o9oiE *#zvچ [ e ֨(,'%&mT]Hxwޛ~c6Ei *Ͼwثߢ6 (7 7/*}&@!UFۆ{v $*K:{E)v,*8D~ ' ,!6mQ*"|'ycˋ` Jm:JHӷp5Sȫ.Kh^h"B;y@v,IvV p3ȿnp^{.uup;vϜgJ?CxN?IR`Z`_?ZuT? @)5*{d0`/itgщ51ߋЌF>:VQfE iE;KGqѷy~%U3ZCD!N%kPM_\Cn7UJ,c ^T`')MY#A$R΍o+׺Ry+lE^goL`q;r8um۵A Wa0rJ\!H1ʴ>F(9\@l֋NrYAZDH` ;a1ZUPe`A'-_85{уN"EPrm+-|sv)AB^BIzl@i]l'-2\4=h;=e;v-;h{ԑcECx<^:L eյ|(5~,¶\Ǯre| ;4l"MSTqkMx%.%O(Z h3@BT佻^ 39I#B-+>sFx6*CTzùeB()O4" e;.wB@Y_8C+s$WS.:B*_;:X8&ﺇf^J T<$#t;sn д#۲vՅPOy3v¿F_.˄R2qܬQOo֯Vd"X7dj9VӉ%6R9LhRg=6q\y BG%;^hW~Ahn0iPsK+yX`dctbDWf%dҺxhrFЗ+k{r# &iͨ.'uїߙFQޤ?w M|ry=mh8$Y@ R#owTdzx DbO!!.!R? T"%*<0 i]{K[R: G/0Iөapz N1#ofFB<{ Z2%@mb\VϤJ`d"bo(ȰSaVkUd\ᔙA`4EM3wij!Mk@OǢ&Dg%I \WAJ|LHlh D|55L hIq&W q&]z1|-&GxL(R|e%N8ʉ\"!Cw)7%U#vҦl蔋oLТ1G53q_46OZi-/`Rb1fSA2` BE(u#@ UEy9(0m)ԻRVi(&Hey'`e۞:=osh ̪wU*n^KY<.|mMԷ|QYg] PL0vcp nO Ý!:X+@enil.b[\ mj0d .3\C_NC ׬õjSk7,9gD˚3QEd,osU(-}fDsX 0aϳlǽ:5:)/93W V\P)bq_Os{zNG6=I:)-ʻ[N0v @-UQ!՘_J@/QgBl5q_bǥ_RC&ތx/șw $yh>Rlլ5Tgfo>f-&}0)'C:B_\vo8!;Aכ1&9Ņ4féOE+U> |Z-9pz:Ό?H0?b|h}#;C=LZ̄VUi0O>8@G R> L,#GɱwO:h[K_~-~ x͸6"=6֊&zb:XĚ)PY[Z)*z @_k 8˝OWvngtز.awuژ*OO=B#Λ0gss]$)!RYC8¬VbU H)_Jx͟mK硑cw(9\h_i*Ҩy5(Fדz 9 'EhS~qd'E^ ozewݎn/N/3NF41N,,`t=d}qz4Lɷ q_T:l#&T ʡg/m[b ])>o"wܲHF&45G{JIz{bl.s*W YgG7,ۖZ\/HE/u^yݓ)~=#~^/0Ul,|7Eȗ(L4S:)r|3ĀÃͣVeuPXIENDB`mapnik-3.0.9/demo/viewer/images/zoombox.png000066400000000000000000000073051262555547000207170ustar00rootroot00000000000000PNG  IHDR #ꦷbKGDC pHYsHHFk> vpAg PIDAThgTTƟ3)ԁ 7T-h-b% Ѩ$AĠ DE) 0Cawee|^sysf _.S@MduRf ]-n+B~o{<ϪhʬZl )dꬖYhĖAM _5'{|\V3G8U0Ofֈ7'9oYL8mF3S_9c,YXP^fffhpo/cE\Zd~m|26fASjEʞq~P/kysFU’hkn} viѐQC64ST 8Ww4 zP+UX>L7xlB@H F|^* -c>wg%rw^.[nS5+j\T_H*in&.7uHGX-ձ2_.טJJ@XW0'h^A~p̐KC$O[J<3^ea'( \rQ[((#e,i9w4ԙ>*>+'4Om^~̏My<LUo FSu`(gغ3EMa癶B/5yUjw$qNP@\7*XEPSRU8X`k|'@<|ȓDܡ8 Iy[\[]>sp^3F `b\u}n0?1{ ik%p>uM1 L30uj k 8mz*@yeC[icM}[٩+#@SiPZ2v|Lj(P*ZHV? YBHaVVNMG8WjI{k&^zNj~_A`„L Jjj.F}ŖXz)FdZUQ.&蜠+}(%|Cq 90`.Rn"nwhhk{Pq+SMihh\e#dkd/n=*IDu=^~Jc۰e'ZQ V1W`uv7Xܺ f}IԱ\S@{ƙP@YNHjҫy8Y@b=@aQ@)ɡΩ!~+SN3t*4 r@L3ӯJlQk6޽5.݆orѽg/ʟ[f(8mC>UۘW 8sֻy5=zYɣ'=e>5n|K,Z#ղ ^*`23.CĆ 4 {}uT_ԱC ͇E'-JTclN,3K~4%W4)qt С/vg;.;skKVw4K-'j "j.Jn@t癁:H:a ':־"":X]FDRrH?HbHcC$u̬.I3}rJmei+=}~!c"?xSԲzԗO?h?i@Ⱥ%!֥g8z=/Ohd"To@S]sB 7 .&:;%47@9,8첟64,6OXv Ϣ7f-f\>{iEԔGUNeu Dl7"^DDW}sTDD7J㊻>˟AD9sQ8cQʕDZP%"xkzt跩 7 * -2 YvʺVx~%~(*/}޺,7s F7@fMkfhݪbI83_/˳E(M+4qgLF́D;in^^gߪZ"E ÆYeYݰlY|:foY׶?׿o[\Bq4e@4Q۽|xpWW _KSx Ϙ`rsՍU;~L<,{)rくThFM:k酥W^_tcd&Nt^\BftuDN՞!EhSEL$ S]nJL$lJ\;샬m2ieLZ7ndmethcXÅB4EUO\יDd]Ϻ*[Oߠ?s%>~|r7[hA~.AMvnYןu$hvD0GpUW?Qw:vsKnq8Ceݝxa]fݖ'uWp0xSӈ2g諘)On##ph[{~= ~=v7/t {_^Vv8F=UMtfT[(=&᏾]W[ƶ>.l؊$1-Z|p y>mOn8gao2v5qV?PG95{Lwl׵j+?1xզN'T53Yak%aj|S;#uMmwC ߈ )tiFkիBfq-,5iZ'0XP~~=>{Jq!0ʣirxF윤Y^\x<^!'V!PlW0215Nb",l&p,xY]\ʝ>|/Eg>yVKf< .Opq 5Z׎ؚj?I;˹O~GK;#xAf0m'\QTiܚHziDSQ{ObeveT1.ѥk-ʮ=U{⺢yAu6]|5MsS7\ō,ƚۧ?Td$X޹5Tlm?:uf:/wnҜ}$l?yһ7 k 8vw}{F#ڊBIENDB`mapnik-3.0.9/demo/viewer/images/zoomin.png000066400000000000000000000045641262555547000205410ustar00rootroot00000000000000PNG  IHDR00WsBIT|dtEXtSoftwarewww.inkscape.org< IDATh՚klW>kv'iD_4$E6($n- Em}PRm!BJHR6P DITDDƥMluo;{;̮G W:;=s3WT" `=( `@d:>zIT"s 32=Zb:,* ZH􎀢ѓt|UH%2Bs N70C˚#)B\Dۓx29/rY- XQ10^] DI. <ߟ't_{q\~H( RBDD D'ۮ[Q'ǣmpOO$KH%21Ɗ/gs#uB?^>?[6 -km[=g4T"IfNsc6gȠ>6GGRlONM~M}o*HG^7S̍?z.#n! jLJ]pRӘyE2H%2Jd. NMzo׍n-b T"}/|^iTW;!es ˲* ȴ0Js|k^^PZ#3fx&ȴ07$+X%’<ňBE<H%2_PC4/~ٙCh7F :3&T=5!f\0 CY;t:6p'Lr25DFb1G_H՗OPW!ƊؖJd*108^,Na޵~ByEk6j,Ƅ|F`~)'qTvWwgz%|2uѓ'Ef-7ܹ eJ9 *0 Kqz0s}W.ߵO]ZJ[ݏBV[|`2V\P0adU  L i]G jIYBvO5T,dhFT!:=O χ (J+yaUn\hB|HVF( \~?дNߙF/bjhjǀ*DUUĚ ?6ϣѻ  Ј*D55~SScՓl,Ml2KYR5Ki6w#CԁQe௪?&@,t._3ݹ|_ṖQ۵ۂGh{n1`eEGum0TI|E2? \WS:[<\[;Ӿs`Ӂr_-izYs$*@{,5Kl(Ձ3 78hW aUC6p,0|>;tf@(w q&GZl/Wil6 N5d:~b;Vwoacox<1B~ J[ g{5t0VF[7{å(q9ܵt/'ڂ{Bqfa |C#@0V/S o$~~{@7;=xAׄZ[d:۪'bVK|CTq]N) ٻ^y$q&T-:dg9mAm*J"zЯ=f2ֶPhmok.`̝)3%]Y:: )'^tL*5=55gSJ{a[ Z{1ԆP LzbQ&d:>SObߑ)Yɼ\n\qއR=Kyz @ieKCP;䧓xõՒ^Yòln47V˄jw55jj~@!j#Ǔˋt)Uf~Ԝi.͝/L:*@@Q @#7?M㍗#0w54g,s\ɢiLRP^iM *J$-Nb :.EeDV)p=g9˛,DTrEJxj=㿢'GIENDB`mapnik-3.0.9/demo/viewer/info_dialog.cpp000066400000000000000000000026651262555547000202310ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "info_dialog.hpp" info_dialog::info_dialog(QVector > const& info, QWidget *parent) : QDialog(parent) { ui.setupUi(this); ui.tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("Name")); ui.tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("Value")); ui.tableWidget->setRowCount(info.size()); ui.tableWidget->setColumnCount(2); for (int i=0;isetItem(i,0,keyItem); ui.tableWidget->setItem(i,1,valueItem); } } mapnik-3.0.9/demo/viewer/info_dialog.hpp000066400000000000000000000021101262555547000202170ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef INFO_DIALOG_HPP #define INFO_DIALOG_HPP #include "ui_info.h" #include class info_dialog : public QDialog { Q_OBJECT public: info_dialog(QVector > const& info,QWidget * parent = 0); private: Ui::InfoDialog ui; }; #endif //INFO_DIALOG_HPP mapnik-3.0.9/demo/viewer/layer_info_dialog.cpp000066400000000000000000000044351262555547000214220ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "layer_info_dialog.hpp" // mapnik #include #include #include #include layer_info_dialog::layer_info_dialog(mapnik::layer& lay, QWidget *parent) : QDialog(parent) { ui.setupUi(this); ui.tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("Name")); ui.tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("Value")); // Layer name ui.layerNameEdit->setText(QString(lay.name().c_str())); // Named Styles : TODO!!! // Datasource mapnik::datasource_ptr ds = lay.datasource(); if (ds) { mapnik::parameters ps = ds->params(); ui.tableWidget->setRowCount(ps.size()); ui.tableWidget->setColumnCount(2); mapnik::parameters::const_iterator pos; int index=0; for (pos = ps.begin();pos != ps.end();++pos) { boost::optional result; mapnik::util::apply_visitor(mapnik::value_extractor_visitor(result),pos->second); if (result) { QTableWidgetItem *keyItem = new QTableWidgetItem(QString(pos->first.c_str())); QTableWidgetItem *valueItem = new QTableWidgetItem(QString((*result).c_str())); ui.tableWidget->setItem(index,0,keyItem); ui.tableWidget->setItem(index,1,valueItem); ++index; } } } } Ui::LayerInfoDialog& layer_info_dialog::getUI() { return ui; } mapnik-3.0.9/demo/viewer/layer_info_dialog.hpp000066400000000000000000000022311262555547000214170ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef LAYER_INFO_DIALOG_HPP #define LAYER_INFO_DIALOG_HPP #include "ui_layer_info.h" #include namespace mapnik { class layer; } class layer_info_dialog : public QDialog { Q_OBJECT public: layer_info_dialog(mapnik::layer& l, QWidget * parent = 0); Ui::LayerInfoDialog& getUI(); private: Ui::LayerInfoDialog ui; }; #endif //LAYER_INFO_DIALOG_HPP mapnik-3.0.9/demo/viewer/layerdelegate.cpp000066400000000000000000000033161262555547000205600ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "layerdelegate.hpp" LayerDelegate::LayerDelegate(QObject *parent) : QAbstractItemDelegate(parent) { } void LayerDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { painter->setRenderHint(QPainter::Antialiasing); painter->setPen(QPen(QColor(255,0,0),1)); if (option.state & QStyle::State_Selected) painter->setBrush(QBrush(QColor(0, 0, 255, 64))); else painter->setBrush(QBrush(QColor(255, 0, 0, 64))); painter->drawRoundRect(option.rect,4,4); if (option.state & QStyle::State_Selected) painter->setBrush(option.palette.highlightedText()); else painter->setBrush(QBrush(QColor(255, 120, 0, 127))); } QSize LayerDelegate::sizeHint(const QStyleOptionViewItem & /* option */, const QModelIndex & /* index */) const { return QSize(120,24); } mapnik-3.0.9/demo/viewer/layerdelegate.hpp000066400000000000000000000025321262555547000205640ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef LAYER_DELEGATE_HPP #define LAYER_DELEGATE_HPP #include #include #include #include class QAbstractItemModel; class QObject; class QPainter; class LayerDelegate : public QAbstractItemDelegate { Q_OBJECT public: LayerDelegate(QObject *parent = 0); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index ) const; }; #endif //LAYER_DELEGATE_HPP mapnik-3.0.9/demo/viewer/layerlistmodel.cpp000066400000000000000000000065451262555547000210110ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "layerlistmodel.hpp" #include #include #include using mapnik::Map; LayerListModel::LayerListModel(std::shared_ptr map,QObject *parent) : QAbstractListModel(parent), map_(map) {} int LayerListModel::rowCount(QModelIndex const&) const { if (map_) return map_->layers().size(); return 0; } QVariant LayerListModel::data(QModelIndex const& index,int role) const { if (!index.isValid() || !map_) return QVariant(); if (index.row() < 0 || index.row() >= int(map_->layers().size())) return QVariant(); if (role == Qt::DisplayRole) return QString(map_->layers().at(index.row()).name().c_str()); else if (role == Qt::DecorationRole) { double scale = map_->scale(); if (map_->layers().at(index.row()).visible(scale)) { return QIcon(":/images/globe.png"); } else { return QIcon(":/images/globe_bw.png"); } } else if (role == Qt::CheckStateRole) { if (map_->layers().at(index.row()).active()) return QVariant(Qt::Checked); else return QVariant(Qt::Unchecked); } else { return QVariant(); } } QVariant LayerListModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) return QVariant(); if (orientation == Qt::Horizontal) return QString("TODO Column %1").arg(section); else return QString("TODO Row %1").arg(section); } bool LayerListModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (!map_) return false; if (index.isValid() && role == Qt::CheckStateRole) { int status = value.toInt(); std::vector & layers = const_cast& >(map_->layers()); layers.at(index.row()).set_active(status); emit dataChanged(index, index); return true; } return false; } Qt::ItemFlags LayerListModel::flags(QModelIndex const& index) const { Qt::ItemFlags flags = QAbstractItemModel::flags(index); if (index.isValid()) flags |= Qt::ItemIsUserCheckable; return flags; } boost::optional LayerListModel::map_layer(int i) { if (map_) { std::vector & layers = const_cast& >(map_->layers()); if (i < int(layers.size())) return boost::optional(layers[i]); } return boost::optional(); } mapnik-3.0.9/demo/viewer/layerlistmodel.hpp000066400000000000000000000033231262555547000210050ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef LAYER_LIST_MODEL_HPP #define LAYER_LIST_MODEL_HPP #include #include #include #ifndef Q_MOC_RUN #include #endif #include class LayerListModel : public QAbstractListModel { Q_OBJECT public: LayerListModel(std::shared_ptr map, QObject * parent = 0); int rowCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); Qt::ItemFlags flags(QModelIndex const& index) const; boost::optional map_layer(int i); private: std::shared_ptr map_; }; #endif //LAYER_LIST_MODEL_HPP mapnik-3.0.9/demo/viewer/layerwidget.cpp000066400000000000000000000047711262555547000202770ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "layerwidget.hpp" #include #include #include #include #include #include #include #include #include #include #include #include "layerlistmodel.hpp" #include "layer_info_dialog.hpp" using namespace std; LayerTab::LayerTab(QWidget* parent) : QListView(parent) {} void LayerTab::paintEvent(QPaintEvent *e) { QListView::paintEvent(e); } void LayerTab::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { QListView::dataChanged(topLeft, bottomRight); qDebug("FIXME : update map view!"); emit update_mapwidget(); } void LayerTab::selectionChanged(const QItemSelection & selected, const QItemSelection &) { QModelIndexList list = selected.indexes(); if (list.size() != 0) { std::cout << "SELECTED LAYER ->" << list[0].row() << "\n"; emit layerSelected(list[0].row()); } } void LayerTab::layerInfo() { qDebug("Layer info"); QModelIndexList indexes = selectedIndexes(); if (indexes.size() > 0) { qDebug("id = %d",indexes[0].row()); } } void LayerTab::layerInfo2(QModelIndex const& index) { qDebug("LayerInfo id = %d",index.row()); QVector > params; QVector style_names; unsigned i = index.row(); LayerListModel * model = static_cast(this->model()); boost::optional layer = model->map_layer(i); if (layer) { layer_info_dialog dlg(*layer,this); dlg.exec(); } } StyleTab::StyleTab(QWidget*) { } void StyleTab::contextMenuEvent(QContextMenuEvent * event ) { qDebug("test"); } mapnik-3.0.9/demo/viewer/layerwidget.hpp000066400000000000000000000030401262555547000202700ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef LAYERWIDGET_HPP #define LAYERWIDGET_HPP #include #include #include class LayerTab : public QListView { Q_OBJECT public: LayerTab(QWidget* parent=0); void paintEvent(QPaintEvent *e); signals: void update_mapwidget(); void layerSelected(int) const; public slots: void layerInfo(); void layerInfo2(QModelIndex const&); protected slots: void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); void selectionChanged(const QItemSelection & selected, const QItemSelection &); }; class StyleTab : public QTreeView { Q_OBJECT public: StyleTab(QWidget* parent=0); protected: void contextMenuEvent(QContextMenuEvent * event ); }; #endif mapnik-3.0.9/demo/viewer/main.cpp000066400000000000000000000060151262555547000166740ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // qt #include #include #include #include #include #include "mainwindow.hpp" int main( int argc, char **argv ) { using mapnik::datasource_cache; using mapnik::freetype_engine; try { QCoreApplication::setOrganizationName("Mapnik"); QCoreApplication::setOrganizationDomain("mapnik.org"); QCoreApplication::setApplicationName("Viewer"); QSettings settings("viewer.ini",QSettings::IniFormat); // register input plug-ins QString plugins_dir = settings.value("mapnik/plugins_dir", QVariant("/usr/local/lib/mapnik/input/")).toString(); datasource_cache::instance().register_datasources(plugins_dir.toStdString()); // register fonts int count = settings.beginReadArray("mapnik/fonts"); for (int index=0; index < count; ++index) { settings.setArrayIndex(index); QString font_dir = settings.value("dir").toString(); freetype_engine::register_fonts(font_dir.toStdString()); } settings.endArray(); QApplication app( argc, argv ); MainWindow window; window.show(); if (argc > 1) window.open(argv[1]); if (argc >= 3) { QStringList list = QString(argv[2]).split(","); if (list.size()==4) { bool ok; double x0 = list[0].toDouble(&ok); double y0 = list[1].toDouble(&ok); double x1 = list[2].toDouble(&ok); double y1 = list[3].toDouble(&ok); if (ok) window.set_default_extent(x0,y0,x1,y1); } } else { std::shared_ptr map = window.get_map(); if (map) map->zoom_all(); } if (argc == 4) { bool ok; double scaling_factor = QString(argv[3]).toDouble(&ok); if (ok) window.set_scaling_factor(scaling_factor); } return app.exec(); } catch (std::exception const& ex) { std::cerr << "Could not start viewer: '" << ex.what() << "'\n"; return 1; } } mapnik-3.0.9/demo/viewer/mainwindow.cpp000066400000000000000000000326321262555547000201300ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // stl #include // qt #include #include #include #include #include #include #include #include #include #include #include #include #include #include // mapnik #ifndef Q_MOC_RUN // QT moc chokes on BOOST_JOIN //#include #include #include #include #include #endif // qt #include "mainwindow.hpp" #include "layerlistmodel.hpp" #include "styles_model.hpp" #include "layerwidget.hpp" #include "layerdelegate.hpp" #include "about_dialog.hpp" // boost #include MainWindow::MainWindow() : filename_(), default_extent_(-20037508.3428,-20037508.3428,20037508.3428,20037508.3428) { mapWidget_ = new MapWidget(this); QSplitter *splitter = new QSplitter(this); QTabWidget *tabWidget=new QTabWidget; layerTab_ = new LayerTab; layerTab_->setFocusPolicy(Qt::NoFocus); layerTab_->setIconSize(QSize(16,16)); //LayerDelegate *delegate = new LayerDelegate(this); //layerTab_->setItemDelegate(delegate); //layerTab_->setItemDelegate(new QItemDelegate(this)); //layerTab_->setViewMode(QListView::IconMode); layerTab_->setFlow(QListView::TopToBottom); tabWidget->addTab(layerTab_,tr("Layers")); // Styles tab styleTab_ = new StyleTab; tabWidget->addTab(styleTab_,tr("Styles")); splitter->addWidget(tabWidget); splitter->addWidget(mapWidget_); QList list; list.push_back(200); list.push_back(600); splitter->setSizes(list); mapWidget_->setFocusPolicy(Qt::StrongFocus); mapWidget_->setFocus(); //setCentralWidget(mapWidget_); setCentralWidget(splitter); createActions(); createMenus(); createToolBars(); createContextMenu(); setWindowTitle(tr("Mapnik Viewer")); status=new QStatusBar(this); status->showMessage(tr("")); setStatusBar(status); resize(800,600); //connect mapview to layerlist connect(mapWidget_, SIGNAL(mapViewChanged()),layerTab_, SLOT(update())); // slider connect(slider_,SIGNAL(valueChanged(int)),mapWidget_,SLOT(zoomToLevel(int))); // renderer selector connect(renderer_selector_,SIGNAL(currentIndexChanged(QString const&)), mapWidget_, SLOT(updateRenderer(QString const&))); // scale factor connect(scale_factor_,SIGNAL(valueChanged(double)), mapWidget_, SLOT(updateScaleFactor(double))); // connect(layerTab_,SIGNAL(update_mapwidget()),mapWidget_,SLOT(updateMap())); connect(layerTab_,SIGNAL(layerSelected(int)), mapWidget_,SLOT(layerSelected(int))); } MainWindow::~MainWindow() { delete mapWidget_; } void MainWindow::closeEvent(QCloseEvent* event) { event->accept(); } void MainWindow::createContextMenu() { layerTab_->setContextMenuPolicy(Qt::ActionsContextMenu); layerTab_->addAction(openAct); layerTab_->addAction(layerInfo); } void MainWindow::open(QString const& path) { if (path.isNull()) { filename_ = QFileDialog::getOpenFileName(this,tr("Open Mapnik file"), currentPath,"*.xml"); } else { filename_ = path; } if (!filename_.isEmpty()) { load_map_file(filename_); setWindowTitle(tr("%1 - Mapnik Viewer").arg(filename_)); } } void MainWindow::reload() { if (!filename_.isEmpty()) { mapnik::box2d bbox = mapWidget_->getMap()->get_current_extent(); load_map_file(filename_); mapWidget_->zoomToBox(bbox); setWindowTitle(tr("%1 - *Reloaded*").arg(filename_)); } } void MainWindow::save() { QString initialPath = QDir::currentPath() + "/untitled.xml"; QString filename = QFileDialog::getSaveFileName(this, tr("Save"), initialPath, tr("%1 Files (*.xml)") .arg(QString("Mapnik definition"))); if (!filename.isEmpty()) { std::cout<<"saving "<< filename.toStdString() << std::endl; mapnik::save_map(*mapWidget_->getMap(),filename.toStdString()); } } void MainWindow::load_map_file(QString const& filename) { std::cout << "loading "<< filename.toStdString() << std::endl; unsigned width = mapWidget_->width(); unsigned height = mapWidget_->height(); std::shared_ptr map(new mapnik::Map(width,height)); mapWidget_->setMap(map); try { mapnik::auto_cpu_timer t(std::clog, "loading map took: "); mapnik::load_map(*map,filename.toStdString()); } catch (std::exception const& ex) { std::cout << ex.what() << "\n"; } catch (...) { std::cerr << "Exception caught in load_map\n"; } layerTab_->setModel(new LayerListModel(map,this)); styleTab_->setModel(new StyleModel(map,this)); zoom_all(); } void MainWindow::zoom_to_box() { mapWidget_->setTool(MapWidget::ZoomToBox); } void MainWindow::pan() { mapWidget_->setTool(MapWidget::Pan); } void MainWindow::info() { mapWidget_->setTool(MapWidget::Info); } void MainWindow::pan_left() { mapWidget_->panLeft(); } void MainWindow::pan_right() { mapWidget_->panRight(); } void MainWindow::pan_up() { mapWidget_->panUp(); } void MainWindow::pan_down() { mapWidget_->panDown(); } void MainWindow::about() { about_dialog dlg; dlg.exec(); } void MainWindow::export_as() { QAction *action = qobject_cast(sender()); QByteArray fileFormat = action->data().toByteArray(); QString initialPath = QDir::currentPath() + "/map." + fileFormat; QString fileName = QFileDialog::getSaveFileName(this, tr("Export As"), initialPath, tr("%1 Files (*.%2);;All Files (*)") .arg(QString(fileFormat.toUpper())) .arg(QString(fileFormat))); if (!fileName.isEmpty()) { QPixmap const& pix = mapWidget_->pixmap(); pix.save(fileName); } } void MainWindow::print() { //Q_ASSERT(mapWidget_->pixmap()); //QPrintDialog dialog(&printer, this); //if (dialog.exec()) { // QPainter painter(&printer); // QRect rect = painter.viewport(); // QSize size = mapWidget_->pixmap()->size(); // size.scale(rect.size(), Qt::KeepAspectRatio); // painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); // painter.setWindow(mapWidget_->pixmap()->rect()); // painter.drawPixmap(0, 0, *mapWidget_->pixmap()); //} } void MainWindow::createActions() { //exportAct = new QAction(tr("&Export as ..."),this); //exportAct->setShortcut(tr("Ctrl+E")); //connect(exportAct, SIGNAL(triggered()), this, SLOT(export_as())); zoomAllAct = new QAction(QIcon(":/images/home.png"),tr("Zoom All"),this); connect(zoomAllAct, SIGNAL(triggered()), this, SLOT(zoom_all())); zoomBoxAct = new QAction(QIcon(":/images/zoombox.png"),tr("Zoom To Box"),this); zoomBoxAct->setCheckable(true); connect(zoomBoxAct, SIGNAL(triggered()), this, SLOT(zoom_to_box())); panAct = new QAction(QIcon(":/images/pan.png"),tr("Pan"),this); panAct->setCheckable(true); connect(panAct, SIGNAL(triggered()), this, SLOT(pan())); infoAct = new QAction(QIcon(":/images/info.png"),tr("Info"),this); infoAct->setCheckable(true); connect(infoAct, SIGNAL(triggered()), this, SLOT(info())); toolsGroup=new QActionGroup(this); toolsGroup->addAction(zoomBoxAct); toolsGroup->addAction(panAct); toolsGroup->addAction(infoAct); zoomBoxAct->setChecked(true); openAct=new QAction(tr("Open Map definition"),this); connect(openAct,SIGNAL(triggered()),this,SLOT(open())); saveAct=new QAction(tr("Save Map definition"),this); connect(saveAct,SIGNAL(triggered()),this,SLOT(save())); panLeftAct = new QAction(QIcon(":/images/left.png"),tr("&Pan Left"),this); connect(panLeftAct, SIGNAL(triggered()), this, SLOT(pan_left())); panRightAct = new QAction(QIcon(":/images/right.png"),tr("&Pan Right"),this); connect(panRightAct, SIGNAL(triggered()), this, SLOT(pan_right())); panUpAct = new QAction(QIcon(":/images/up.png"),tr("&Pan Up"),this); connect(panUpAct, SIGNAL(triggered()), this, SLOT(pan_up())); panDownAct = new QAction(QIcon(":/images/down.png"),tr("&Pan Down"),this); connect(panDownAct, SIGNAL(triggered()), this, SLOT(pan_down())); reloadAct = new QAction(QIcon(":/images/reload.png"),tr("Reload"),this); connect(reloadAct, SIGNAL(triggered()), this, SLOT(reload())); layerInfo = new QAction(QIcon(":/images/info.png"),tr("&Layer info"),layerTab_); connect(layerInfo, SIGNAL(triggered()), layerTab_,SLOT(layerInfo())); connect(layerTab_, SIGNAL(doubleClicked(QModelIndex const&)), layerTab_,SLOT(layerInfo2(QModelIndex const&))); foreach (QByteArray format, QImageWriter::supportedImageFormats()) { QString text = tr("%1...").arg(QString(format).toUpper()); QAction *action = new QAction(text, this); action->setData(format); connect(action, SIGNAL(triggered()), this, SLOT(export_as())); exportAsActs.append(action); } printAct = new QAction(QIcon(":/images/print.png"),tr("&Print ..."),this); printAct->setShortcut(tr("Ctrl+E")); connect(printAct, SIGNAL(triggered()), this, SLOT(print())); exitAct = new QAction(tr("E&xit"), this); exitAct->setShortcut(tr("Ctrl+Q")); connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); aboutAct = new QAction(QIcon(":/images/about.png"),tr("&About"), this); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); } void MainWindow::createMenus() { exportMenu = new QMenu(tr("&Export As"), this); foreach (QAction *action, exportAsActs) exportMenu->addAction(action); fileMenu = new QMenu(tr("&File"),this); fileMenu->addAction(openAct); fileMenu->addAction(saveAct); fileMenu->addMenu(exportMenu); fileMenu->addAction(printAct); fileMenu->addSeparator(); fileMenu->addAction(exitAct); menuBar()->addMenu(fileMenu); helpMenu = new QMenu(tr("&Help"), this); helpMenu->addAction(aboutAct); menuBar()->addMenu(helpMenu); } void MainWindow::createToolBars() { fileToolBar = addToolBar(tr("Actions")); fileToolBar->addAction(zoomAllAct); fileToolBar->addAction(zoomBoxAct); fileToolBar->addAction(panAct); fileToolBar->addAction(panLeftAct); fileToolBar->addAction(panRightAct); fileToolBar->addAction(panUpAct); fileToolBar->addAction(panDownAct); fileToolBar->addAction(infoAct); fileToolBar->addAction(reloadAct); fileToolBar->addAction(printAct); renderer_selector_ = new QComboBox(fileToolBar); renderer_selector_->setFocusPolicy(Qt::NoFocus); renderer_selector_->addItem("AGG"); #ifdef HAVE_CAIRO renderer_selector_->addItem("Cairo"); #endif renderer_selector_->addItem("Grid"); fileToolBar->addWidget(renderer_selector_); scale_factor_ = new QDoubleSpinBox(fileToolBar); scale_factor_->setMinimum(0.1); scale_factor_->setMaximum(5.0); scale_factor_->setSingleStep(0.1); scale_factor_->setValue(1.0); fileToolBar->addWidget(scale_factor_); slider_ = new QSlider(Qt::Horizontal,fileToolBar); slider_->setRange(1,18); slider_->setTickPosition(QSlider::TicksBelow); slider_->setTickInterval(1); slider_->setTracking(false); fileToolBar->addWidget(slider_); fileToolBar->addAction(aboutAct); } void MainWindow::set_default_extent(double x0,double y0, double x1, double y1) { try { std::shared_ptr map_ptr = mapWidget_->getMap(); if (map_ptr) { mapnik::projection prj(map_ptr->srs()); prj.forward(x0,y0); prj.forward(x1,y1); default_extent_=mapnik::box2d(x0,y0,x1,y1); mapWidget_->zoomToBox(default_extent_); std::cout << "SET DEFAULT EXT\n"; } } catch (...) {} } void MainWindow::set_scaling_factor(double scaling_factor) { mapWidget_->set_scaling_factor(scaling_factor); } void MainWindow::zoom_all() { std::shared_ptr map_ptr = mapWidget_->getMap(); if (map_ptr) { map_ptr->zoom_all(); mapnik::box2d const& ext = map_ptr->get_current_extent(); mapWidget_->zoomToBox(ext); } } std::shared_ptr MainWindow::get_map() { return mapWidget_->getMap(); } mapnik-3.0.9/demo/viewer/mainwindow.hpp000066400000000000000000000055131262555547000201330ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef MAINWINDOW_HPP #define MAINWINDOW_HPP #include #include #include #include #include #include #include "mapwidget.hpp" //using namespace mapnik; class LayerTab; class StyleTab; class QSlider; class QComboBox; class QDoubleSpinBox; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); virtual ~MainWindow(); void set_default_extent(double x0,double y0,double x1, double y1); void set_scaling_factor(double scaling_factor); public : std::shared_ptr get_map(); protected: void closeEvent(QCloseEvent* event); public slots: void zoom_all(); void zoom_to_box(); void pan(); void info(); void export_as(); void open(QString const& path = QString()); void reload(); void save(); void print(); void about(); void pan_left(); void pan_right(); void pan_up(); void pan_down(); private: void createActions(); void createMenus(); void createToolBars(); void createContextMenu(); void load_map_file(QString const& filename); QString currentPath; QString filename_; QAbstractItemModel *model; LayerTab *layerTab_; StyleTab * styleTab_; MapWidget * mapWidget_; //actions QList exportAsActs; QActionGroup *toolsGroup; QAction *zoomAllAct; QAction *zoomBoxAct; QAction *panAct; QAction *infoAct; QAction *openAct; QAction *saveAct; QAction *printAct; QAction *exitAct; QAction *aboutAct; QAction *panLeftAct; QAction *panRightAct; QAction *panUpAct; QAction *panDownAct; QAction *reloadAct; QAction *layerInfo; //toolbars QToolBar *fileToolBar; QToolBar *editToolBar; //menus QMenu *exportMenu; QMenu *fileMenu; QMenu *helpMenu; //status bar QStatusBar *status; QSlider * slider_; QComboBox * renderer_selector_; QDoubleSpinBox * scale_factor_; mapnik::box2d default_extent_; }; #endif //MAINWINDOW_HPP mapnik-3.0.9/demo/viewer/mapnik_viewer.qrc000066400000000000000000000012551262555547000206140ustar00rootroot00000000000000 images/about.png images/canada_map.png images/down.png images/globe.png images/globe_bw.png images/help.png images/home.png images/info.png images/left.png images/pan.png images/print.png images/right.png images/up.png images/zoombox.png images/style.png images/filter.png images/reload.png mapnik-3.0.9/demo/viewer/mapwidget.cpp000066400000000000000000000375661262555547000177500ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_CAIRO // cairo #include #include #endif #include "mapwidget.hpp" #include "info_dialog.hpp" using mapnik::image_rgba8; using mapnik::Map; using mapnik::layer; using mapnik::box2d; using mapnik::coord2d; using mapnik::feature_ptr; using mapnik::view_transform; using mapnik::projection; using mapnik::scale_denominator; using mapnik::feature_kv_iterator; double scales [] = {279541132.014, 139770566.007, 69885283.0036, 34942641.5018, 17471320.7509, 8735660.37545, 4367830.18772, 2183915.09386, 1091957.54693, 545978.773466, 272989.386733, 136494.693366, 68247.3466832, 34123.6733416, 17061.8366708, 8530.9183354, 4265.4591677, 2132.72958385, 1066.36479192, 533.182395962}; MapWidget::MapWidget(QWidget *parent) : QWidget(parent), map_(), selected_(1), extent_(), cur_tool_(ZoomToBox), start_x_(0), start_y_(0), end_x_(0), end_y_(0), drag_(false), first_(true), pen_(QColor(0,0,255,96)), selectedLayer_(-1), scaling_factor_(1.0), cur_renderer_(AGG) { pen_.setWidth(3); pen_.setCapStyle(Qt::RoundCap); pen_.setJoinStyle(Qt::RoundJoin); } void MapWidget::setTool(eTool tool) { cur_tool_=tool; } void MapWidget::paintEvent(QPaintEvent*) { QPainter painter(this); if (drag_) { if (cur_tool_ == ZoomToBox) { unsigned width = end_x_-start_x_; unsigned height = end_y_-start_y_; painter.drawPixmap(QPoint(0, 0),pix_); painter.setPen(pen_); painter.setBrush(QColor(200,200,255,128)); painter.drawRect(start_x_,start_y_,width,height); } else if (cur_tool_ == Pan) { int dx = end_x_-start_x_; int dy = end_y_-start_y_; painter.setBrush(QColor(200,200,200,128)); painter.drawRect(0,0,width(),height()); painter.drawPixmap(QPoint(dx,dy),pix_); } } else { painter.drawPixmap(QPoint(0, 0),pix_); } painter.end(); } void MapWidget::resizeEvent(QResizeEvent * ev) { if (map_) { map_->resize(ev->size().width(),ev->size().height()); updateMap(); } } void MapWidget::mousePressEvent(QMouseEvent* e) { if (e->button()==Qt::LeftButton) { if (cur_tool_ == ZoomToBox || cur_tool_==Pan) { start_x_ = e->x(); start_y_ = e->y(); drag_=true; } else if (cur_tool_==Info) { if (map_) { QVector > info; projection map_proj(map_->srs()); // map projection double scale_denom = scale_denominator(map_->scale(),map_proj.is_geographic()); view_transform t(map_->width(),map_->height(),map_->get_current_extent()); for (unsigned index = 0; index < map_->layer_count();++index) { if (int(index) != selectedLayer_) continue; layer & layer = map_->layers()[index]; if (!layer.visible(scale_denom)) continue; std::string name = layer.name(); double x = e->x(); double y = e->y(); std::cout << "query at " << x << "," << y << "\n"; projection layer_proj(layer.srs()); mapnik::proj_transform prj_trans(map_proj,layer_proj); //std::auto_ptr data(new mapnik::memory_datasource); mapnik::featureset_ptr fs = map_->query_map_point(index,x,y); if (fs) { feature_ptr feat = fs->next(); if (feat) { feature_kv_iterator itr(*feat,true); feature_kv_iterator end(*feat); for ( ;itr!=end; ++itr) { info.push_back(QPair(QString(std::get<0>(*itr).c_str()), std::get<1>(*itr).to_string().c_str())); } #if 0 // using path_type = mapnik::transform_path_adapter; for (unsigned i=0; i < feat->num_geometries();++i) { mapnik::geometry_type const& geom = feat->get_geometry(i); mapnik::vertex_adapter va(geom); path_type path(t,va,prj_trans); if (va.size() > 0) { QPainterPath qpath; double x,y; va.vertex(&x,&y); qpath.moveTo(x,y); for (unsigned j = 1; j < geom.size(); ++j) { va.vertex(&x,&y); qpath.lineTo(x,y); } QPainter painter(&pix_); QPen pen(QColor(255,0,0,96)); pen.setWidth(3); pen.setCapStyle(Qt::RoundCap); pen.setJoinStyle(Qt::RoundJoin); painter.setPen(pen); painter.drawPath(qpath); update(); } } #endif } } if (info.size() > 0) { info_dialog info_dlg(info,this); info_dlg.exec(); break; } } // remove annotation layer map_->layers().erase(remove_if(map_->layers().begin(), map_->layers().end(), bind(&layer::name,_1) == "*annotations*") , map_->layers().end()); } } } else if (e->button()==Qt::RightButton) { //updateMap(); } } void MapWidget::mouseMoveEvent(QMouseEvent* e) { if (cur_tool_ == ZoomToBox || cur_tool_==Pan) { end_x_ = e->x(); end_y_ = e->y(); update(); } } void MapWidget::mouseReleaseEvent(QMouseEvent* e) { if (e->button()==Qt::LeftButton) { end_x_ = e->x(); end_y_ = e->y(); if (cur_tool_ == ZoomToBox) { drag_=false; if (map_) { view_transform t(map_->width(),map_->height(),map_->get_current_extent()); box2d box = t.backward(box2d(start_x_,start_y_,end_x_,end_y_)); map_->zoom_to_box(box); updateMap(); } } else if (cur_tool_==Pan) { drag_=false; if (map_) { int cx = int(0.5 * map_->width()); int cy = int(0.5 * map_->height()); int dx = end_x_ - start_x_; int dy = end_y_ - start_y_; map_->pan(cx - dx ,cy - dy); updateMap(); } } } } void MapWidget::wheelEvent(QWheelEvent* e) { if (!map_) { return; } QPoint corner(map_->width(), map_->height()); QPoint zoomCoords; double zoom; if (e->delta() > 0) { zoom = 0.5; QPoint center = corner / 2; QPoint delta = e->pos() - center; zoomCoords = zoom * delta + center; } else { zoom = 2.0; zoomCoords = corner - e->pos(); } map_->pan_and_zoom(zoomCoords.x(), zoomCoords.y(), zoom); updateMap(); } void MapWidget::keyPressEvent(QKeyEvent *e) { std::cout << "key pressed:"<< e->key()<<"\n"; switch (e->key()) { case Qt::Key_Minus: zoomOut(); break; case Qt::Key_Plus: case 61: zoomIn(); break; case 65: defaultView(); break; case Qt::Key_Up: panUp(); break; case Qt::Key_Down: panDown(); break; case Qt::Key_Left: panLeft(); break; case Qt::Key_Right: panRight(); break; case 49: zoomToLevel(10); break; case 50: zoomToLevel(11); break; case 51: zoomToLevel(12); break; case 52: zoomToLevel(13); break; case 53: zoomToLevel(14); break; case 54: zoomToLevel(15); break; case 55: zoomToLevel(16); break; case 56: zoomToLevel(17); break; case 57: zoomToLevel(18); break; default: QWidget::keyPressEvent(e); } } void MapWidget::zoomToBox(mapnik::box2d const& bbox) { if (map_) { map_->zoom_to_box(bbox); updateMap(); } } void MapWidget::defaultView() { if (map_) { map_->resize(width(),height()); map_->zoom_all(); updateMap(); } } void MapWidget::zoomIn() { if (map_) { map_->zoom(0.5); updateMap(); } } void MapWidget::zoomOut() { if (map_) { map_->zoom(2.0); updateMap(); } } void MapWidget::panUp() { if (map_) { double cx = 0.5*map_->width(); double cy = 0.5*map_->height(); map_->pan(int(cx),int(cy - cy*0.25)); updateMap(); } } void MapWidget::panDown() { if (map_) { double cx = 0.5*map_->width(); double cy = 0.5*map_->height(); map_->pan(int(cx),int(cy + cy*0.25)); updateMap(); } } void MapWidget::panLeft() { if (map_) { double cx = 0.5*map_->width(); double cy = 0.5*map_->height(); map_->pan(int(cx - cx * 0.25),int(cy)); updateMap(); } } void MapWidget::panRight() { if (map_) { double cx = 0.5*map_->width(); double cy = 0.5*map_->height(); map_->pan(int(cx + cx * 0.25),int(cy)); updateMap(); } } void MapWidget::zoomToLevel(int level) { if ( map_ && level >= 0 && level < 19 ) { double scale_denom = scales[level]; std::cerr << "scale denominator = " << scale_denom << "\n"; mapnik::box2d ext = map_->get_current_extent(); double width = static_cast(map_->width()); double height= static_cast(map_->height()); mapnik::coord2d pt = ext.center(); double res = scale_denom * 0.00028; mapnik::box2d box(pt.x - 0.5 * width * res, pt.y - 0.5 * height*res, pt.x + 0.5 * width * res, pt.y + 0.5 * height*res); map_->zoom_to_box(box); updateMap(); } } void MapWidget::export_to_file(unsigned ,unsigned ,std::string const&,std::string const&) { //image_rgba8 image(width,height); //agg_renderer renderer(map,image); //renderer.apply(); //image.saveToFile(filename,type); std::cout << "Export to file .." << std::endl; } void MapWidget::set_scaling_factor(double scaling_factor) { scaling_factor_ = scaling_factor; } void render_agg(mapnik::Map const& map, double scaling_factor, QPixmap & pix) { unsigned width=map.width(); unsigned height=map.height(); image_rgba8 buf(width,height); mapnik::agg_renderer ren(map,buf,scaling_factor); try { mapnik::auto_cpu_timer t(std::clog, "rendering took: "); ren.apply(); QImage image((uchar*)buf.data(),width,height,QImage::Format_ARGB32); pix = QPixmap::fromImage(image.rgbSwapped()); } //catch (mapnik::config_error & ex) //{ // std::cerr << ex.what() << std::endl; //} catch (std::exception const& ex) { std::cerr << "exception: " << ex.what() << std::endl; } catch (...) { std::cerr << "Unknown exception caught!\n"; } } void render_grid(mapnik::Map const& map, double scaling_factor, QPixmap & pix) { std::cerr << "Not supported" << std::endl; } void render_cairo(mapnik::Map const& map, double scaling_factor, QPixmap & pix) { // FIXME #ifdef HAVE_CAIRO mapnik::cairo_surface_ptr image_surface(cairo_image_surface_create(CAIRO_FORMAT_ARGB32,map.width(),map.height()), mapnik::cairo_surface_closer()); mapnik::cairo_ptr cairo = mapnik::create_context(image_surface); if (cairo) { mapnik::auto_cpu_timer t(std::clog, "rendering took: "); mapnik::cairo_renderer renderer(map, cairo, scaling_factor); renderer.apply(); } mapnik::image_rgba8 data(map.width(), map.height()); mapnik::cairo_image_to_rgba8(data, image_surface); QImage image((uchar*)data.bytes(),data.width(),data.height(),QImage::Format_ARGB32); pix = QPixmap::fromImage(image.rgbSwapped()); #endif } void MapWidget::updateRenderer(QString const& txt) { if (txt == "AGG") cur_renderer_ = AGG; else if (txt == "Cairo") cur_renderer_ = Cairo; else if (txt == "Grid") cur_renderer_ = Grid; std::cerr << "Update renderer called" << std::endl; updateMap(); } void MapWidget::updateScaleFactor(double scale_factor) { set_scaling_factor(scale_factor); updateMap(); } void MapWidget::updateMap() { if (map_) { if (cur_renderer_== AGG) { render_agg(*map_, scaling_factor_, pix_); } else if (cur_renderer_ == Cairo) { render_cairo(*map_, scaling_factor_, pix_); } else if (cur_renderer_ == Grid) { render_grid(*map_, scaling_factor_, pix_); } else { std::cerr << "Unknown renderer..." << std::endl; } try { projection prj(map_->srs()); // map projection box2d ext = map_->get_current_extent(); double x0 = ext.minx(); double y0 = ext.miny(); double x1 = ext.maxx(); double y1 = ext.maxy(); prj.inverse(x0,y0); prj.inverse(x1,y1); std::cout << "BBOX (WGS84): " << x0 << "," << y0 << "," << x1 << "," << y1 << "\n"; update(); // emit signal to interested widgets emit mapViewChanged(); } catch (...) { std::cerr << "Unknown exception caught!\n"; } } } std::shared_ptr MapWidget::getMap() { return map_; } void MapWidget::setMap(std::shared_ptr map) { map_ = map; } void MapWidget::layerSelected(int index) { selectedLayer_ = index; } mapnik-3.0.9/demo/viewer/mapwidget.hpp000066400000000000000000000053411262555547000177370ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef MAP_WIDGET_HPP #define MAP_WIDGET_HPP #include #include #include #include #include #include #include #include #ifndef Q_MOC_RUN #include #endif class MapWidget : public QWidget { Q_OBJECT public: enum eTool { ZoomToBox = 1, Pan, Info, }; enum eRenderer { AGG, Cairo, Grid }; private: std::shared_ptr map_; int selected_; QPixmap pix_; mapnik::box2d extent_; eTool cur_tool_; int start_x_; int start_y_; int end_x_; int end_y_; bool drag_; bool first_; QPen pen_; int selectedLayer_; double scaling_factor_; eRenderer cur_renderer_; public: MapWidget(QWidget *parent=0); void setTool(eTool tool); std::shared_ptr getMap(); inline QPixmap const& pixmap() const { return pix_;} void setMap(std::shared_ptr map); void defaultView(); void zoomToBox(mapnik::box2d const& box); void zoomIn(); void zoomOut(); void panLeft(); void panRight(); void panUp(); void panDown(); void set_scaling_factor(double); public slots: void zoomToLevel(int level); void updateMap(); void layerSelected(int); void updateRenderer(QString const& txt); void updateScaleFactor(double scale_factor); signals: void mapViewChanged(); protected: void paintEvent(QPaintEvent* ev); void resizeEvent(QResizeEvent* ev); void mousePressEvent(QMouseEvent* e); void mouseMoveEvent(QMouseEvent* e); void mouseReleaseEvent(QMouseEvent* e); void wheelEvent(QWheelEvent* e); void keyPressEvent(QKeyEvent *e); void export_to_file(unsigned width, unsigned height, std::string const& filename, std::string const& type); }; #endif // MAP_WIDGET_HPP mapnik-3.0.9/demo/viewer/styles_model.cpp000066400000000000000000000242371262555547000204610ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "styles_model.hpp" #include #include #include #include #include #include #include // boost #include // qt #include #include #include #include class node : private mapnik::util::noncopyable { struct node_base { virtual QString name() const=0; virtual QIcon icon() const=0; virtual ~node_base() {} }; template struct wrap : public node_base { wrap(T const& obj) : obj_(obj) {} ~wrap() {} QString name () const { return obj_.name(); } QIcon icon() const { return obj_.icon(); } T obj_; }; public: template node ( T const& obj, node * parent=0) : impl_(new wrap(obj)), parent_(parent) {} QString name() const { return impl_->name(); } QIcon icon() const { return impl_->icon(); } unsigned num_children() const { return children_.count(); } node * child(unsigned row) const { return children_.value(row); } node * parent() const { return parent_; } node * add_child(node * child) { children_.push_back(child); return child; } int row () const { if (parent_) return parent_->children_.indexOf(const_cast(this)); else return 0; } ~node() { qDeleteAll(children_); } private: const std::unique_ptr impl_; QList children_; node * parent_; }; struct symbolizer_info { QString operator() (mapnik::point_symbolizer const& sym) const { boost::ignore_unused_variable_warning(sym); return QString("PointSymbolizer"); } QString operator() (mapnik::line_symbolizer const& sym) const { boost::ignore_unused_variable_warning(sym); return QString("LineSymbolizer"); } QString operator() (mapnik::line_pattern_symbolizer const& sym) const { boost::ignore_unused_variable_warning(sym); return QString("LinePatternSymbolizer"); } QString operator() (mapnik::polygon_symbolizer const& sym) const { boost::ignore_unused_variable_warning(sym); return QString("PolygonSymbolizer"); } QString operator() (mapnik::polygon_pattern_symbolizer const& sym) const { boost::ignore_unused_variable_warning(sym); return QString("PolygonSymbolizer"); } QString operator() (mapnik::text_symbolizer const& sym) const { boost::ignore_unused_variable_warning(sym); return QString("TextSymbolizer"); } QString operator() (mapnik::shield_symbolizer const& sym) const { boost::ignore_unused_variable_warning(sym); return QString("ShieldSymbolizer"); } QString operator() (mapnik::markers_symbolizer const& sym) const { boost::ignore_unused_variable_warning(sym); return QString("MarkersSymbolizer"); } QString operator() (mapnik::building_symbolizer const& sym) const { boost::ignore_unused_variable_warning(sym); return QString("BuildingSymbolizer"); } template QString operator() (T const& ) const { return QString ("FIXME"); } }; struct symbolizer_icon { QIcon operator() (mapnik::polygon_symbolizer const& sym) const { QPixmap pix(16,16); QPainter painter(&pix); mapnik::color const& fill = mapnik::get(sym, mapnik::keys::fill); QBrush brush(QColor(fill.red(),fill.green(),fill.blue(),fill.alpha())); painter.fillRect(0, 0, 16, 16, brush); return QIcon(pix); } QIcon operator() (mapnik::point_symbolizer const& sym) const { // FIXME! /* std::shared_ptr symbol = sym.get_image(); if (symbol) { QImage image(symbol->bytes(), symbol->width(),symbol->height(),QImage::Format_ARGB32); QPixmap pix = QPixmap::fromImage(image.rgbSwapped()); return QIcon(pix); } */ return QIcon(); } QIcon operator() (mapnik::line_symbolizer const& sym) const { QPixmap pix(48,16); pix.fill(); QPainter painter(&pix); //mapnik::stroke const& strk = sym.get_stroke(); mapnik::color const& col = mapnik::get(sym, mapnik::keys::stroke); QPen pen(QColor(col.red(),col.green(),col.blue(),col.alpha())); pen.setWidth(mapnik::get(sym, mapnik::keys::width)); painter.setPen(pen); painter.drawLine(0,7,47,7); //painter.drawLine(7,15,12,0); //painter.drawLine(12,0,8,15); return QIcon(pix); } template QIcon operator() (T const& ) const { return QIcon (":/images/filter.png"); } }; class symbolizer_node { public: symbolizer_node(mapnik::symbolizer const & sym) : sym_(sym) {} ~symbolizer_node(){} QString name() const { //return QString("Symbolizer:fixme"); return mapnik::util::apply_visitor(symbolizer_info(),sym_); } QIcon icon() const { return mapnik::util::apply_visitor(symbolizer_icon(),sym_);//QIcon(":/images/filter.png"); } mapnik::symbolizer const& sym_; }; class rule_node { public: rule_node(QString name,mapnik::rule const & r) : name_(name), rule_(r) {} ~rule_node() {} QString name() const { mapnik::expression_ptr filter = rule_.get_filter(); return QString(mapnik::to_expression_string(*filter).c_str()); } QIcon icon() const { return QIcon(":/images/filter.png"); } private: QString name_; mapnik::rule const& rule_; }; class style_node { public: style_node(QString name, mapnik::feature_type_style const& style) : name_(name), style_(style) {} ~style_node() {} QString name() const { return name_; } QIcon icon() const { return QIcon(":/images/style.png"); } private: QString name_; mapnik::feature_type_style const& style_; }; class map_node { public: explicit map_node(std::shared_ptr map) : map_(map) {} ~map_node() {} QString name() const { return QString("Map"); } QIcon icon() const { return QIcon(":/images/map.png"); } private: std::shared_ptr map_; }; StyleModel::StyleModel(std::shared_ptr map, QObject * parent) : QAbstractItemModel(parent), root_(new node(map_node(map))) { using style_type = std::map; style_type const & styles = map->styles(); style_type::const_iterator itr = styles.begin(); style_type::const_iterator end = styles.end(); for (; itr != end; ++itr) { node * style_n = root_->add_child(new node(style_node(QString(itr->first.c_str()),itr->second),root_.get())); mapnik::rules const& rules = itr->second.get_rules(); mapnik::rules::const_iterator itr2 = rules.begin(); for ( ; itr2 != rules.end();++itr2) { node* rule_n = style_n->add_child(new node(rule_node(QString("Rule"),*itr2),style_n)); mapnik::rule::symbolizers::const_iterator itr3 = (*itr2).begin(); for ( ; itr3 !=itr2->end();++itr3) { rule_n->add_child(new node(symbolizer_node(*itr3),rule_n)); } } } } StyleModel::~StyleModel() {} // interface QModelIndex StyleModel::index (int row, int col, QModelIndex const& parent) const { // qDebug("index() row=%d col=%d parent::internalId() = %lld", row,col,parent.internalId()); node * parent_node; if (!parent.isValid()) parent_node = root_.get(); else parent_node = static_cast(parent.internalPointer()); node * child_node = parent_node->child(row); if (child_node) return createIndex(row,col,child_node); else return QModelIndex(); } QModelIndex StyleModel::parent (QModelIndex const& index) const { node * child_node = static_cast(index.internalPointer()); node * parent_node = child_node->parent(); if (parent_node == root_.get()) return QModelIndex(); return createIndex(parent_node->row(),0,parent_node); } int StyleModel::rowCount(QModelIndex const& parent) const { //qDebug("rowCount"); node * parent_node; if (parent.column() > 0) return 0; if (!parent.isValid()) parent_node = root_.get(); else parent_node = static_cast(parent.internalPointer()); return parent_node->num_children(); } int StyleModel::columnCount( QModelIndex const&) const { return 1; } QVariant StyleModel::data(const QModelIndex & index, int role) const { //qDebug("data index::internalId() = %lld", index.internalId()); if (!index.isValid()) return QVariant(); node * cur_node = static_cast(index.internalPointer()); if (cur_node) { if (role == Qt::DisplayRole) { return QVariant(cur_node->name()); } else if ( role == Qt::DecorationRole) { return cur_node->icon(); } } return QVariant(); } mapnik-3.0.9/demo/viewer/styles_model.hpp000066400000000000000000000031351262555547000204600ustar00rootroot00000000000000/* This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * Mapnik is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef STYLE_MODEL_HPP #define STYLE_MODEL_HPP #include #ifndef Q_MOC_RUN #include #endif class node; class StyleModel : public QAbstractItemModel { Q_OBJECT public: StyleModel(std::shared_ptr map, QObject * parent=0); ~StyleModel(); // interface QModelIndex index (int row, int col, QModelIndex const& parent = QModelIndex()) const; QModelIndex parent (QModelIndex const& child) const; int rowCount( QModelIndex const& parent = QModelIndex()) const; int columnCount( QModelIndex const& parent = QModelIndex()) const; QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const; private: //std::shared_ptr map_; const std::unique_ptr root_; }; #endif // STYLE_MODEL_HPP mapnik-3.0.9/demo/viewer/viewer.pro000066400000000000000000000024201262555547000172630ustar00rootroot00000000000000###################################################################### # Mapnik viewer - Copyright (C) 2007 Artem Pavlenko ###################################################################### QMAKE_MAC_SDK = macosx10.11 TEMPLATE = app QT += core gui widgets QMAKE_CXX = $$system(mapnik-config --cxx) QMAKE_LINK = $$system(mapnik-config --cxx) QMAKE_CXXFLAGS += $$system(mapnik-config --cxxflags) QMAKE_CXXFLAGS += $$system(mapnik-config --includes --dep-includes --defines) QMAKE_LFLAGS += $$system(mapnik-config --libs) QMAKE_LFLAGS += $$system(mapnik-config --ldflags --dep-libs) # Input CONFIG += qt debug_and_release FORMS += forms/about.ui \ forms/info.ui \ forms/layer_info.ui HEADERS += mainwindow.hpp \ mapwidget.hpp \ layerwidget.hpp \ layerlistmodel.hpp \ layerdelegate.hpp \ styles_model.hpp HEADERS += about_dialog.hpp \ info_dialog.hpp \ layer_info_dialog.hpp SOURCES += main.cpp \ mainwindow.cpp \ mapwidget.cpp \ layerwidget.cpp \ layerlistmodel.cpp \ layerdelegate.cpp \ styles_model.cpp SOURCES += about_dialog.cpp \ info_dialog.cpp \ layer_info_dialog.cpp RESOURCES += mapnik_viewer.qrc mapnik-3.0.9/deps/000077500000000000000000000000001262555547000137505ustar00rootroot00000000000000mapnik-3.0.9/deps/agg/000077500000000000000000000000001262555547000145065ustar00rootroot00000000000000mapnik-3.0.9/deps/agg/build.py000066400000000000000000000017271262555547000161660ustar00rootroot00000000000000# # This file is part of Mapnik (c++ mapping toolkit) # # Copyright (C) 2015 Artem Pavlenko # # Mapnik is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # import os from glob import glob Import('env') lib_env = env.Clone() lib_env.Append(CXXFLAGS='-fPIC') lib_env.StaticLibrary('agg', glob('./src/' + '*.cpp'), LIBS=[]) mapnik-3.0.9/deps/agg/copying000066400000000000000000000006731262555547000161070ustar00rootroot00000000000000The Anti-Grain Geometry Project A high quality rendering engine for C++ http://antigrain.com Anti-Grain Geometry - Version 2.3 Copyright (C) 2002-2005 Maxim Shemanarev (McSeem) Permission to copy, use, modify, sell and distribute this software is granted provided this copyright notice appears in all copies. This software is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose. mapnik-3.0.9/deps/agg/include/000077500000000000000000000000001262555547000161315ustar00rootroot00000000000000mapnik-3.0.9/deps/agg/include/agg_alpha_mask_u8.h000066400000000000000000000441101262555547000216340ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // scanline_u8 class // //---------------------------------------------------------------------------- #ifndef AGG_ALPHA_MASK_U8_INCLUDED #define AGG_ALPHA_MASK_U8_INCLUDED #include #include "agg_basics.h" #include "agg_rendering_buffer.h" namespace agg { //===================================================one_component_mask_u8 struct one_component_mask_u8 { static unsigned calculate(const int8u* p) { return *p; } }; //=====================================================rgb_to_gray_mask_u8 template struct rgb_to_gray_mask_u8 { static unsigned calculate(const int8u* p) { return (p[R]*77 + p[G]*150 + p[B]*29) >> 8; } }; //==========================================================alpha_mask_u8 template class alpha_mask_u8 { public: typedef int8u cover_type; typedef alpha_mask_u8 self_type; enum cover_scale_e { cover_shift = 8, cover_none = 0, cover_full = 255 }; alpha_mask_u8() : m_rbuf(0) {} explicit alpha_mask_u8(rendering_buffer& rbuf) : m_rbuf(&rbuf) {} void attach(rendering_buffer& rbuf) { m_rbuf = &rbuf; } MaskF& mask_function() { return m_mask_function; } const MaskF& mask_function() const { return m_mask_function; } //-------------------------------------------------------------------- cover_type pixel(int x, int y) const { if(x >= 0 && y >= 0 && x < (int)m_rbuf->width() && y < (int)m_rbuf->height()) { return (cover_type)m_mask_function.calculate( m_rbuf->row_ptr(y) + x * Step + Offset); } return 0; } //-------------------------------------------------------------------- cover_type combine_pixel(int x, int y, cover_type val) const { if(x >= 0 && y >= 0 && x < (int)m_rbuf->width() && y < (int)m_rbuf->height()) { return (cover_type)((cover_full + val * m_mask_function.calculate( m_rbuf->row_ptr(y) + x * Step + Offset)) >> cover_shift); } return 0; } //-------------------------------------------------------------------- void fill_hspan(int x, int y, cover_type* dst, int num_pix) const { int xmax = m_rbuf->width() - 1; int ymax = m_rbuf->height() - 1; int count = num_pix; cover_type* covers = dst; if(y < 0 || y > ymax) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } if(x < 0) { count += x; if(count <= 0) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } memset(covers, 0, -x * sizeof(cover_type)); covers -= x; x = 0; } if(x + count > xmax) { int rest = x + count - xmax - 1; count -= rest; if(count <= 0) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } memset(covers + count, 0, rest * sizeof(cover_type)); } const int8u* mask = m_rbuf->row_ptr(y) + x * Step + Offset; do { *covers++ = (cover_type)m_mask_function.calculate(mask); mask += Step; } while(--count); } //-------------------------------------------------------------------- void combine_hspan(int x, int y, cover_type* dst, int num_pix) const { int xmax = m_rbuf->width() - 1; int ymax = m_rbuf->height() - 1; int count = num_pix; cover_type* covers = dst; if(y < 0 || y > ymax) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } if(x < 0) { count += x; if(count <= 0) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } memset(covers, 0, -x * sizeof(cover_type)); covers -= x; x = 0; } if(x + count > xmax) { int rest = x + count - xmax - 1; count -= rest; if(count <= 0) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } memset(covers + count, 0, rest * sizeof(cover_type)); } const int8u* mask = m_rbuf->row_ptr(y) + x * Step + Offset; do { *covers = (cover_type)((cover_full + (*covers) * m_mask_function.calculate(mask)) >> cover_shift); ++covers; mask += Step; } while(--count); } //-------------------------------------------------------------------- void fill_vspan(int x, int y, cover_type* dst, int num_pix) const { int xmax = m_rbuf->width() - 1; int ymax = m_rbuf->height() - 1; int count = num_pix; cover_type* covers = dst; if(x < 0 || x > xmax) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } if(y < 0) { count += y; if(count <= 0) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } memset(covers, 0, -y * sizeof(cover_type)); covers -= y; y = 0; } if(y + count > ymax) { int rest = y + count - ymax - 1; count -= rest; if(count <= 0) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } memset(covers + count, 0, rest * sizeof(cover_type)); } const int8u* mask = m_rbuf->row_ptr(y) + x * Step + Offset; do { *covers++ = (cover_type)m_mask_function.calculate(mask); mask += m_rbuf->stride(); } while(--count); } //-------------------------------------------------------------------- void combine_vspan(int x, int y, cover_type* dst, int num_pix) const { int xmax = m_rbuf->width() - 1; int ymax = m_rbuf->height() - 1; int count = num_pix; cover_type* covers = dst; if(x < 0 || x > xmax) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } if(y < 0) { count += y; if(count <= 0) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } memset(covers, 0, -y * sizeof(cover_type)); covers -= y; y = 0; } if(y + count > ymax) { int rest = y + count - ymax - 1; count -= rest; if(count <= 0) { memset(dst, 0, num_pix * sizeof(cover_type)); return; } memset(covers + count, 0, rest * sizeof(cover_type)); } const int8u* mask = m_rbuf->row_ptr(y) + x * Step + Offset; do { *covers = (cover_type)((cover_full + (*covers) * m_mask_function.calculate(mask)) >> cover_shift); ++covers; mask += m_rbuf->stride(); } while(--count); } private: alpha_mask_u8(const self_type&); const self_type& operator = (const self_type&); rendering_buffer* m_rbuf; MaskF m_mask_function; }; typedef alpha_mask_u8<1, 0> alpha_mask_gray8; //----alpha_mask_gray8 typedef alpha_mask_u8<3, 0> alpha_mask_rgb24r; //----alpha_mask_rgb24r typedef alpha_mask_u8<3, 1> alpha_mask_rgb24g; //----alpha_mask_rgb24g typedef alpha_mask_u8<3, 2> alpha_mask_rgb24b; //----alpha_mask_rgb24b typedef alpha_mask_u8<3, 2> alpha_mask_bgr24r; //----alpha_mask_bgr24r typedef alpha_mask_u8<3, 1> alpha_mask_bgr24g; //----alpha_mask_bgr24g typedef alpha_mask_u8<3, 0> alpha_mask_bgr24b; //----alpha_mask_bgr24b typedef alpha_mask_u8<4, 0> alpha_mask_rgba32r; //----alpha_mask_rgba32r typedef alpha_mask_u8<4, 1> alpha_mask_rgba32g; //----alpha_mask_rgba32g typedef alpha_mask_u8<4, 2> alpha_mask_rgba32b; //----alpha_mask_rgba32b typedef alpha_mask_u8<4, 3> alpha_mask_rgba32a; //----alpha_mask_rgba32a typedef alpha_mask_u8<4, 1> alpha_mask_argb32r; //----alpha_mask_argb32r typedef alpha_mask_u8<4, 2> alpha_mask_argb32g; //----alpha_mask_argb32g typedef alpha_mask_u8<4, 3> alpha_mask_argb32b; //----alpha_mask_argb32b typedef alpha_mask_u8<4, 0> alpha_mask_argb32a; //----alpha_mask_argb32a typedef alpha_mask_u8<4, 2> alpha_mask_bgra32r; //----alpha_mask_bgra32r typedef alpha_mask_u8<4, 1> alpha_mask_bgra32g; //----alpha_mask_bgra32g typedef alpha_mask_u8<4, 0> alpha_mask_bgra32b; //----alpha_mask_bgra32b typedef alpha_mask_u8<4, 3> alpha_mask_bgra32a; //----alpha_mask_bgra32a typedef alpha_mask_u8<4, 3> alpha_mask_abgr32r; //----alpha_mask_abgr32r typedef alpha_mask_u8<4, 2> alpha_mask_abgr32g; //----alpha_mask_abgr32g typedef alpha_mask_u8<4, 1> alpha_mask_abgr32b; //----alpha_mask_abgr32b typedef alpha_mask_u8<4, 0> alpha_mask_abgr32a; //----alpha_mask_abgr32a typedef alpha_mask_u8<3, 0, rgb_to_gray_mask_u8<0, 1, 2> > alpha_mask_rgb24gray; //----alpha_mask_rgb24gray typedef alpha_mask_u8<3, 0, rgb_to_gray_mask_u8<2, 1, 0> > alpha_mask_bgr24gray; //----alpha_mask_bgr24gray typedef alpha_mask_u8<4, 0, rgb_to_gray_mask_u8<0, 1, 2> > alpha_mask_rgba32gray; //----alpha_mask_rgba32gray typedef alpha_mask_u8<4, 1, rgb_to_gray_mask_u8<0, 1, 2> > alpha_mask_argb32gray; //----alpha_mask_argb32gray typedef alpha_mask_u8<4, 0, rgb_to_gray_mask_u8<2, 1, 0> > alpha_mask_bgra32gray; //----alpha_mask_bgra32gray typedef alpha_mask_u8<4, 1, rgb_to_gray_mask_u8<2, 1, 0> > alpha_mask_abgr32gray; //----alpha_mask_abgr32gray //==========================================================amask_no_clip_u8 template class amask_no_clip_u8 { public: typedef int8u cover_type; typedef amask_no_clip_u8 self_type; enum cover_scale_e { cover_shift = 8, cover_none = 0, cover_full = 255 }; amask_no_clip_u8() : m_rbuf(0) {} explicit amask_no_clip_u8(rendering_buffer& rbuf) : m_rbuf(&rbuf) {} void attach(rendering_buffer& rbuf) { m_rbuf = &rbuf; } MaskF& mask_function() { return m_mask_function; } const MaskF& mask_function() const { return m_mask_function; } //-------------------------------------------------------------------- cover_type pixel(int x, int y) const { return (cover_type)m_mask_function.calculate( m_rbuf->row_ptr(y) + x * Step + Offset); } //-------------------------------------------------------------------- cover_type combine_pixel(int x, int y, cover_type val) const { return (cover_type)((cover_full + val * m_mask_function.calculate( m_rbuf->row_ptr(y) + x * Step + Offset)) >> cover_shift); } //-------------------------------------------------------------------- void fill_hspan(int x, int y, cover_type* dst, int num_pix) const { const int8u* mask = m_rbuf->row_ptr(y) + x * Step + Offset; do { *dst++ = (cover_type)m_mask_function.calculate(mask); mask += Step; } while(--num_pix); } //-------------------------------------------------------------------- void combine_hspan(int x, int y, cover_type* dst, int num_pix) const { const int8u* mask = m_rbuf->row_ptr(y) + x * Step + Offset; do { *dst = (cover_type)((cover_full + (*dst) * m_mask_function.calculate(mask)) >> cover_shift); ++dst; mask += Step; } while(--num_pix); } //-------------------------------------------------------------------- void fill_vspan(int x, int y, cover_type* dst, int num_pix) const { const int8u* mask = m_rbuf->row_ptr(y) + x * Step + Offset; do { *dst++ = (cover_type)m_mask_function.calculate(mask); mask += m_rbuf->stride(); } while(--num_pix); } //-------------------------------------------------------------------- void combine_vspan(int x, int y, cover_type* dst, int num_pix) const { const int8u* mask = m_rbuf->row_ptr(y) + x * Step + Offset; do { *dst = (cover_type)((cover_full + (*dst) * m_mask_function.calculate(mask)) >> cover_shift); ++dst; mask += m_rbuf->stride(); } while(--num_pix); } private: amask_no_clip_u8(const self_type&); const self_type& operator = (const self_type&); rendering_buffer* m_rbuf; MaskF m_mask_function; }; typedef amask_no_clip_u8<1, 0> amask_no_clip_gray8; //----amask_no_clip_gray8 typedef amask_no_clip_u8<3, 0> amask_no_clip_rgb24r; //----amask_no_clip_rgb24r typedef amask_no_clip_u8<3, 1> amask_no_clip_rgb24g; //----amask_no_clip_rgb24g typedef amask_no_clip_u8<3, 2> amask_no_clip_rgb24b; //----amask_no_clip_rgb24b typedef amask_no_clip_u8<3, 2> amask_no_clip_bgr24r; //----amask_no_clip_bgr24r typedef amask_no_clip_u8<3, 1> amask_no_clip_bgr24g; //----amask_no_clip_bgr24g typedef amask_no_clip_u8<3, 0> amask_no_clip_bgr24b; //----amask_no_clip_bgr24b typedef amask_no_clip_u8<4, 0> amask_no_clip_rgba32r; //----amask_no_clip_rgba32r typedef amask_no_clip_u8<4, 1> amask_no_clip_rgba32g; //----amask_no_clip_rgba32g typedef amask_no_clip_u8<4, 2> amask_no_clip_rgba32b; //----amask_no_clip_rgba32b typedef amask_no_clip_u8<4, 3> amask_no_clip_rgba32a; //----amask_no_clip_rgba32a typedef amask_no_clip_u8<4, 1> amask_no_clip_argb32r; //----amask_no_clip_argb32r typedef amask_no_clip_u8<4, 2> amask_no_clip_argb32g; //----amask_no_clip_argb32g typedef amask_no_clip_u8<4, 3> amask_no_clip_argb32b; //----amask_no_clip_argb32b typedef amask_no_clip_u8<4, 0> amask_no_clip_argb32a; //----amask_no_clip_argb32a typedef amask_no_clip_u8<4, 2> amask_no_clip_bgra32r; //----amask_no_clip_bgra32r typedef amask_no_clip_u8<4, 1> amask_no_clip_bgra32g; //----amask_no_clip_bgra32g typedef amask_no_clip_u8<4, 0> amask_no_clip_bgra32b; //----amask_no_clip_bgra32b typedef amask_no_clip_u8<4, 3> amask_no_clip_bgra32a; //----amask_no_clip_bgra32a typedef amask_no_clip_u8<4, 3> amask_no_clip_abgr32r; //----amask_no_clip_abgr32r typedef amask_no_clip_u8<4, 2> amask_no_clip_abgr32g; //----amask_no_clip_abgr32g typedef amask_no_clip_u8<4, 1> amask_no_clip_abgr32b; //----amask_no_clip_abgr32b typedef amask_no_clip_u8<4, 0> amask_no_clip_abgr32a; //----amask_no_clip_abgr32a typedef amask_no_clip_u8<3, 0, rgb_to_gray_mask_u8<0, 1, 2> > amask_no_clip_rgb24gray; //----amask_no_clip_rgb24gray typedef amask_no_clip_u8<3, 0, rgb_to_gray_mask_u8<2, 1, 0> > amask_no_clip_bgr24gray; //----amask_no_clip_bgr24gray typedef amask_no_clip_u8<4, 0, rgb_to_gray_mask_u8<0, 1, 2> > amask_no_clip_rgba32gray; //----amask_no_clip_rgba32gray typedef amask_no_clip_u8<4, 1, rgb_to_gray_mask_u8<0, 1, 2> > amask_no_clip_argb32gray; //----amask_no_clip_argb32gray typedef amask_no_clip_u8<4, 0, rgb_to_gray_mask_u8<2, 1, 0> > amask_no_clip_bgra32gray; //----amask_no_clip_bgra32gray typedef amask_no_clip_u8<4, 1, rgb_to_gray_mask_u8<2, 1, 0> > amask_no_clip_abgr32gray; //----amask_no_clip_abgr32gray } #endif mapnik-3.0.9/deps/agg/include/agg_arc.h000066400000000000000000000037611262555547000176740ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Arc vertex generator // //---------------------------------------------------------------------------- #ifndef AGG_ARC_INCLUDED #define AGG_ARC_INCLUDED #include #include "agg_basics.h" namespace agg { //=====================================================================arc // // See Implementation agg_arc.cpp // class arc { public: arc() : m_scale(1.0), m_initialized(false) {} arc(double x, double y, double rx, double ry, double a1, double a2, bool ccw=true); void init(double x, double y, double rx, double ry, double a1, double a2, bool ccw=true); void approximation_scale(double s); double approximation_scale() const { return m_scale; } void rewind(unsigned); unsigned vertex(double* x, double* y); private: void normalize(double a1, double a2, bool ccw); double m_x; double m_y; double m_rx; double m_ry; double m_angle; double m_start; double m_end; double m_scale; double m_da; bool m_ccw; bool m_initialized; unsigned m_path_cmd; }; } #endif mapnik-3.0.9/deps/agg/include/agg_array.h000066400000000000000000001030171262555547000202400ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_ARRAY_INCLUDED #define AGG_ARRAY_INCLUDED #include #include #include "agg_basics.h" namespace agg { //-------------------------------------------------------pod_array_adaptor template class pod_array_adaptor { public: typedef T value_type; pod_array_adaptor(T* array, unsigned size) : m_array(array), m_size(size) {} unsigned size() const { return m_size; } const T& operator [] (unsigned i) const { return m_array[i]; } T& operator [] (unsigned i) { return m_array[i]; } const T& at(unsigned i) const { return m_array[i]; } T& at(unsigned i) { return m_array[i]; } T value_at(unsigned i) const { return m_array[i]; } private: T* m_array; unsigned m_size; }; //---------------------------------------------------------pod_auto_array template class pod_auto_array { public: typedef T value_type; typedef pod_auto_array self_type; pod_auto_array() {} explicit pod_auto_array(const T* c) { memcpy(m_array, c, sizeof(T) * Size); } const self_type& operator = (const T* c) { memcpy(m_array, c, sizeof(T) * Size); return *this; } static unsigned size() { return Size; } const T& operator [] (unsigned i) const { return m_array[i]; } T& operator [] (unsigned i) { return m_array[i]; } const T& at(unsigned i) const { return m_array[i]; } T& at(unsigned i) { return m_array[i]; } T value_at(unsigned i) const { return m_array[i]; } private: T m_array[Size]; }; //--------------------------------------------------------pod_auto_vector template class pod_auto_vector { public: typedef T value_type; typedef pod_auto_vector self_type; pod_auto_vector() : m_size(0) {} void remove_all() { m_size = 0; } void clear() { m_size = 0; } void add(const T& v) { m_array[m_size++] = v; } void push_back(const T& v) { m_array[m_size++] = v; } void inc_size(unsigned size) { m_size += size; } unsigned size() const { return m_size; } const T& operator [] (unsigned i) const { return m_array[i]; } T& operator [] (unsigned i) { return m_array[i]; } const T& at(unsigned i) const { return m_array[i]; } T& at(unsigned i) { return m_array[i]; } T value_at(unsigned i) const { return m_array[i]; } private: T m_array[Size]; unsigned m_size; }; //---------------------------------------------------------------pod_array template class pod_array { public: typedef T value_type; typedef pod_array self_type; ~pod_array() { pod_allocator::deallocate(m_array, m_size); } pod_array() : m_array(0), m_size(0) {} pod_array(unsigned size) : m_array(pod_allocator::allocate(size)), m_size(size) {} pod_array(const self_type& v) : m_array(pod_allocator::allocate(v.m_size)), m_size(v.m_size) { memcpy(m_array, v.m_array, sizeof(T) * m_size); } void resize(unsigned size) { if(size != m_size) { pod_allocator::deallocate(m_array, m_size); m_array = pod_allocator::allocate(m_size = size); } } const self_type& operator = (const self_type& v) { resize(v.size()); memcpy(m_array, v.m_array, sizeof(T) * m_size); return *this; } unsigned size() const { return m_size; } const T& operator [] (unsigned i) const { return m_array[i]; } T& operator [] (unsigned i) { return m_array[i]; } const T& at(unsigned i) const { return m_array[i]; } T& at(unsigned i) { return m_array[i]; } T value_at(unsigned i) const { return m_array[i]; } const T* data() const { return m_array; } T* data() { return m_array; } private: T* m_array; unsigned m_size; }; //--------------------------------------------------------------pod_vector // A simple class template to store Plain Old Data, a vector // of a fixed size. The data is continous in memory //------------------------------------------------------------------------ template class pod_vector { public: typedef T value_type; ~pod_vector() { pod_allocator::deallocate(m_array, m_capacity); } pod_vector() : m_size(0), m_capacity(0), m_array(0) {} pod_vector(unsigned cap, unsigned extra_tail=0); // Copying pod_vector(const pod_vector&); const pod_vector& operator = (const pod_vector&); // Set new capacity. All data is lost, size is set to zero. void capacity(unsigned cap, unsigned extra_tail=0); unsigned capacity() const { return m_capacity; } // Allocate n elements. All data is lost, // but elements can be accessed in range 0...size-1. void allocate(unsigned size, unsigned extra_tail=0); // Resize keeping the content. void resize(unsigned new_size); void zero() { memset(m_array, 0, sizeof(T) * m_size); } void add(const T& v) { m_array[m_size++] = v; } void push_back(const T& v) { m_array[m_size++] = v; } void insert_at(unsigned pos, const T& val); void inc_size(unsigned size) { m_size += size; } unsigned size() const { return m_size; } unsigned byte_size() const { return m_size * sizeof(T); } void serialize(int8u* ptr) const; void deserialize(const int8u* data, unsigned byte_size); const T& operator [] (unsigned i) const { return m_array[i]; } T& operator [] (unsigned i) { return m_array[i]; } const T& at(unsigned i) const { return m_array[i]; } T& at(unsigned i) { return m_array[i]; } T value_at(unsigned i) const { return m_array[i]; } const T* data() const { return m_array; } T* data() { return m_array; } void remove_all() { m_size = 0; } void clear() { m_size = 0; } void cut_at(unsigned num) { if(num < m_size) m_size = num; } private: unsigned m_size; unsigned m_capacity; T* m_array; }; //------------------------------------------------------------------------ template void pod_vector::capacity(unsigned cap, unsigned extra_tail) { m_size = 0; if(cap > m_capacity) { pod_allocator::deallocate(m_array, m_capacity); m_capacity = cap + extra_tail; m_array = m_capacity ? pod_allocator::allocate(m_capacity) : 0; } } //------------------------------------------------------------------------ template void pod_vector::allocate(unsigned size, unsigned extra_tail) { capacity(size, extra_tail); m_size = size; } //------------------------------------------------------------------------ template void pod_vector::resize(unsigned new_size) { if(new_size > m_size) { if(new_size > m_capacity) { T* data = pod_allocator::allocate(new_size); memcpy(data, m_array, m_size * sizeof(T)); pod_allocator::deallocate(m_array, m_capacity); m_array = data; } } else { m_size = new_size; } } //------------------------------------------------------------------------ template pod_vector::pod_vector(unsigned cap, unsigned extra_tail) : m_size(0), m_capacity(cap + extra_tail), m_array(pod_allocator::allocate(m_capacity)) {} //------------------------------------------------------------------------ template pod_vector::pod_vector(const pod_vector& v) : m_size(v.m_size), m_capacity(v.m_capacity), m_array(v.m_capacity ? pod_allocator::allocate(v.m_capacity) : 0) { memcpy(m_array, v.m_array, sizeof(T) * v.m_size); } //------------------------------------------------------------------------ template const pod_vector& pod_vector::operator = (const pod_vector&v) { allocate(v.m_size); if(v.m_size) memcpy(m_array, v.m_array, sizeof(T) * v.m_size); return *this; } //------------------------------------------------------------------------ template void pod_vector::serialize(int8u* ptr) const { if(m_size) memcpy(ptr, m_array, m_size * sizeof(T)); } //------------------------------------------------------------------------ template void pod_vector::deserialize(const int8u* data, unsigned byte_size) { byte_size /= sizeof(T); allocate(byte_size); if(byte_size) memcpy(m_array, data, byte_size * sizeof(T)); } //------------------------------------------------------------------------ template void pod_vector::insert_at(unsigned pos, const T& val) { if(pos >= m_size) { m_array[m_size] = val; } else { memmove(m_array + pos + 1, m_array + pos, (m_size - pos) * sizeof(T)); m_array[pos] = val; } ++m_size; } //---------------------------------------------------------------pod_bvector // A simple class template to store Plain Old Data, similar to std::deque // It doesn't reallocate memory but instead, uses blocks of data of size // of (1 << S), that is, power of two. The data is NOT contiguous in memory, // so the only valid access method is operator [] or curr(), prev(), next() // // There reallocs occure only when the pool of pointers to blocks needs // to be extended (it happens very rarely). You can control the value // of increment to reallocate the pointer buffer. See the second constructor. // By default, the incremeent value equals (1 << S), i.e., the block size. //------------------------------------------------------------------------ template class pod_bvector { public: enum block_scale_e { block_shift = S, block_size = 1 << block_shift, block_mask = block_size - 1 }; typedef T value_type; ~pod_bvector(); pod_bvector(); pod_bvector(unsigned block_ptr_inc); // Copying pod_bvector(const pod_bvector& v); const pod_bvector& operator = (const pod_bvector& v); void remove_all() { m_size = 0; } void clear() { m_size = 0; } void free_all() { free_tail(0); } void free_tail(unsigned size); void add(const T& val); void push_back(const T& val) { add(val); } void modify_last(const T& val); void remove_last(); int allocate_continuous_block(unsigned num_elements); void add_array(const T* ptr, unsigned num_elem) { while(num_elem--) { add(*ptr++); } } template void add_data(DataAccessor& data) { while(data.size()) { add(*data); ++data; } } void cut_at(unsigned size) { if(size < m_size) m_size = size; } unsigned size() const { return m_size; } const T& operator [] (unsigned i) const { return m_blocks[i >> block_shift][i & block_mask]; } T& operator [] (unsigned i) { return m_blocks[i >> block_shift][i & block_mask]; } const T& at(unsigned i) const { return m_blocks[i >> block_shift][i & block_mask]; } T& at(unsigned i) { return m_blocks[i >> block_shift][i & block_mask]; } T value_at(unsigned i) const { return m_blocks[i >> block_shift][i & block_mask]; } const T& curr(unsigned idx) const { return (*this)[idx]; } T& curr(unsigned idx) { return (*this)[idx]; } const T& prev(unsigned idx) const { return (*this)[(idx + m_size - 1) % m_size]; } T& prev(unsigned idx) { return (*this)[(idx + m_size - 1) % m_size]; } const T& next(unsigned idx) const { return (*this)[(idx + 1) % m_size]; } T& next(unsigned idx) { return (*this)[(idx + 1) % m_size]; } const T& last() const { return (*this)[m_size - 1]; } T& last() { return (*this)[m_size - 1]; } unsigned byte_size() const; void serialize(int8u* ptr) const; void deserialize(const int8u* data, unsigned byte_size); void deserialize(unsigned start, const T& empty_val, const int8u* data, unsigned byte_size); template void deserialize(ByteAccessor data) { remove_all(); unsigned elem_size = data.size() / sizeof(T); for(unsigned i = 0; i < elem_size; ++i) { int8u* ptr = (int8u*)data_ptr(); for(unsigned j = 0; j < sizeof(T); ++j) { *ptr++ = *data; ++data; } ++m_size; } } template void deserialize(unsigned start, const T& empty_val, ByteAccessor data) { while(m_size < start) { add(empty_val); } unsigned elem_size = data.size() / sizeof(T); for(unsigned i = 0; i < elem_size; ++i) { int8u* ptr; if(start + i < m_size) { ptr = (int8u*)(&((*this)[start + i])); } else { ptr = (int8u*)data_ptr(); ++m_size; } for(unsigned j = 0; j < sizeof(T); ++j) { *ptr++ = *data; ++data; } } } const T* block(unsigned nb) const { return m_blocks[nb]; } private: void allocate_block(unsigned nb); T* data_ptr(); unsigned m_size; unsigned m_num_blocks; unsigned m_max_blocks; T** m_blocks; unsigned m_block_ptr_inc; }; //------------------------------------------------------------------------ template pod_bvector::~pod_bvector() { if(m_num_blocks) { T** blk = m_blocks + m_num_blocks - 1; while(m_num_blocks > 0) { pod_allocator::deallocate(*blk, block_size); --blk; --m_num_blocks; } } pod_allocator::deallocate(m_blocks, m_max_blocks); } //------------------------------------------------------------------------ template void pod_bvector::free_tail(unsigned size) { if(size < m_size) { unsigned nb = (size + block_mask) >> block_shift; while(m_num_blocks > nb) { pod_allocator::deallocate(m_blocks[--m_num_blocks], block_size); } if(m_num_blocks == 0) { pod_allocator::deallocate(m_blocks, m_max_blocks); m_blocks = 0; m_max_blocks = 0; } m_size = size; } } //------------------------------------------------------------------------ template pod_bvector::pod_bvector() : m_size(0), m_num_blocks(0), m_max_blocks(0), m_blocks(0), m_block_ptr_inc(block_size) { } //------------------------------------------------------------------------ template pod_bvector::pod_bvector(unsigned block_ptr_inc) : m_size(0), m_num_blocks(0), m_max_blocks(0), m_blocks(0), m_block_ptr_inc(block_ptr_inc) { } //------------------------------------------------------------------------ template pod_bvector::pod_bvector(const pod_bvector& v) : m_size(v.m_size), m_num_blocks(v.m_num_blocks), m_max_blocks(v.m_max_blocks), m_blocks(v.m_max_blocks ? pod_allocator::allocate(v.m_max_blocks) : 0), m_block_ptr_inc(v.m_block_ptr_inc) { unsigned i; for(i = 0; i < v.m_num_blocks; ++i) { m_blocks[i] = pod_allocator::allocate(block_size); memcpy(m_blocks[i], v.m_blocks[i], block_size * sizeof(T)); } } //------------------------------------------------------------------------ template const pod_bvector& pod_bvector::operator = (const pod_bvector& v) { unsigned i; for(i = m_num_blocks; i < v.m_num_blocks; ++i) { allocate_block(i); } for(i = 0; i < v.m_num_blocks; ++i) { memcpy(m_blocks[i], v.m_blocks[i], block_size * sizeof(T)); } m_size = v.m_size; return *this; } //------------------------------------------------------------------------ template void pod_bvector::allocate_block(unsigned nb) { if(nb >= m_max_blocks) { T** new_blocks = pod_allocator::allocate(m_max_blocks + m_block_ptr_inc); if(m_blocks) { memcpy(new_blocks, m_blocks, m_num_blocks * sizeof(T*)); pod_allocator::deallocate(m_blocks, m_max_blocks); } m_blocks = new_blocks; m_max_blocks += m_block_ptr_inc; } m_blocks[nb] = pod_allocator::allocate(block_size); m_num_blocks++; } //------------------------------------------------------------------------ template inline T* pod_bvector::data_ptr() { unsigned nb = m_size >> block_shift; if(nb >= m_num_blocks) { allocate_block(nb); } return m_blocks[nb] + (m_size & block_mask); } //------------------------------------------------------------------------ template inline void pod_bvector::add(const T& val) { *data_ptr() = val; ++m_size; } //------------------------------------------------------------------------ template inline void pod_bvector::remove_last() { if(m_size) --m_size; } //------------------------------------------------------------------------ template void pod_bvector::modify_last(const T& val) { remove_last(); add(val); } //------------------------------------------------------------------------ template int pod_bvector::allocate_continuous_block(unsigned num_elements) { if(num_elements < block_size) { data_ptr(); // Allocate initial block if necessary unsigned rest = block_size - (m_size & block_mask); unsigned index; if(num_elements <= rest) { // The rest of the block is good, we can use it //----------------- index = m_size; m_size += num_elements; return index; } // New block //--------------- m_size += rest; data_ptr(); index = m_size; m_size += num_elements; return index; } return -1; // Impossible to allocate } //------------------------------------------------------------------------ template unsigned pod_bvector::byte_size() const { return m_size * sizeof(T); } //------------------------------------------------------------------------ template void pod_bvector::serialize(int8u* ptr) const { unsigned i; for(i = 0; i < m_size; i++) { memcpy(ptr, &(*this)[i], sizeof(T)); ptr += sizeof(T); } } //------------------------------------------------------------------------ template void pod_bvector::deserialize(const int8u* data, unsigned byte_size) { remove_all(); byte_size /= sizeof(T); for(unsigned i = 0; i < byte_size; ++i) { T* ptr = data_ptr(); memcpy(ptr, data, sizeof(T)); ++m_size; data += sizeof(T); } } // Replace or add a number of elements starting from "start" position //------------------------------------------------------------------------ template void pod_bvector::deserialize(unsigned start, const T& empty_val, const int8u* data, unsigned byte_size) { while(m_size < start) { add(empty_val); } byte_size /= sizeof(T); for(unsigned i = 0; i < byte_size; ++i) { if(start + i < m_size) { memcpy(&((*this)[start + i]), data, sizeof(T)); } else { T* ptr = data_ptr(); memcpy(ptr, data, sizeof(T)); ++m_size; } data += sizeof(T); } } //---------------------------------------------------------block_allocator // Allocator for arbitrary POD data. Most usable in different cache // systems for efficient memory allocations. // Memory is allocated with blocks of fixed size ("block_size" in // the constructor). If required size exceeds the block size the allocator // creates a new block of the required size. However, the most efficient // use is when the average reqired size is much less than the block size. //------------------------------------------------------------------------ class block_allocator { struct block_type { int8u* data; unsigned size; }; public: void remove_all() { if(m_num_blocks) { block_type* blk = m_blocks + m_num_blocks - 1; while(m_num_blocks--) { pod_allocator::deallocate(blk->data, blk->size); --blk; } pod_allocator::deallocate(m_blocks, m_max_blocks); } m_num_blocks = 0; m_max_blocks = 0; m_blocks = 0; m_buf_ptr = 0; m_rest = 0; } ~block_allocator() { remove_all(); } block_allocator(unsigned block_size, unsigned block_ptr_inc=256-8) : m_block_size(block_size), m_block_ptr_inc(block_ptr_inc), m_num_blocks(0), m_max_blocks(0), m_blocks(0), m_buf_ptr(0), m_rest(0) { } int8u* allocate(unsigned size, unsigned alignment=1) { if(size == 0) return 0; if(size <= m_rest) { int8u* ptr = m_buf_ptr; if(alignment > 1) { unsigned align = (alignment - unsigned((size_t)ptr) % alignment) % alignment; size += align; ptr += align; if(size <= m_rest) { m_rest -= size; m_buf_ptr += size; return ptr; } allocate_block(size); return allocate(size - align, alignment); } m_rest -= size; m_buf_ptr += size; return ptr; } allocate_block(size + alignment - 1); return allocate(size, alignment); } private: void allocate_block(unsigned size) { if(size < m_block_size) size = m_block_size; if(m_num_blocks >= m_max_blocks) { block_type* new_blocks = pod_allocator::allocate(m_max_blocks + m_block_ptr_inc); if(m_blocks) { memcpy(new_blocks, m_blocks, m_num_blocks * sizeof(block_type)); pod_allocator::deallocate(m_blocks, m_max_blocks); } m_blocks = new_blocks; m_max_blocks += m_block_ptr_inc; } m_blocks[m_num_blocks].size = size; m_blocks[m_num_blocks].data = m_buf_ptr = pod_allocator::allocate(size); m_num_blocks++; m_rest = size; } unsigned m_block_size; unsigned m_block_ptr_inc; unsigned m_num_blocks; unsigned m_max_blocks; block_type* m_blocks; int8u* m_buf_ptr; unsigned m_rest; }; //------------------------------------------------------------------------ enum quick_sort_threshold_e { quick_sort_threshold = 9 }; //-----------------------------------------------------------swap_elements template inline void swap_elements(T& a, T& b) { T temp = a; a = b; b = temp; } //--------------------------------------------------------------quick_sort template void quick_sort(Array& arr, Less less) { if(arr.size() < 2) return; typename Array::value_type* e1; typename Array::value_type* e2; int stack[80]; int* top = stack; int limit = arr.size(); int base = 0; for(;;) { int len = limit - base; int i; int j; int pivot; if(len > quick_sort_threshold) { // we use base + len/2 as the pivot pivot = base + len / 2; swap_elements(arr[base], arr[pivot]); i = base + 1; j = limit - 1; // now ensure that *i <= *base <= *j e1 = &(arr[j]); e2 = &(arr[i]); if(less(*e1, *e2)) swap_elements(*e1, *e2); e1 = &(arr[base]); e2 = &(arr[i]); if(less(*e1, *e2)) swap_elements(*e1, *e2); e1 = &(arr[j]); e2 = &(arr[base]); if(less(*e1, *e2)) swap_elements(*e1, *e2); for(;;) { do i++; while( less(arr[i], arr[base]) ); do j--; while( less(arr[base], arr[j]) ); if( i > j ) { break; } swap_elements(arr[i], arr[j]); } swap_elements(arr[base], arr[j]); // now, push the largest sub-array if(j - base > limit - i) { top[0] = base; top[1] = j; base = i; } else { top[0] = i; top[1] = limit; limit = j; } top += 2; } else { // the sub-array is small, perform insertion sort j = base; i = j + 1; for(; i < limit; j = i, i++) { for(; less(*(e1 = &(arr[j + 1])), *(e2 = &(arr[j]))); j--) { swap_elements(*e1, *e2); if(j == base) { break; } } } if(top > stack) { top -= 2; base = top[0]; limit = top[1]; } else { break; } } } } //------------------------------------------------------remove_duplicates // Remove duplicates from a sorted array. It doesn't cut the // tail of the array, it just returns the number of remaining elements. //----------------------------------------------------------------------- template unsigned remove_duplicates(Array& arr, Equal equal) { if(arr.size() < 2) return arr.size(); unsigned i, j; for(i = 1, j = 1; i < arr.size(); i++) { typename Array::value_type& e = arr[i]; if(!equal(e, arr[i - 1])) { arr[j++] = e; } } return j; } //--------------------------------------------------------invert_container template void invert_container(Array& arr) { int i = 0; int j = arr.size() - 1; while(i < j) { swap_elements(arr[i++], arr[j--]); } } //------------------------------------------------------binary_search_pos template unsigned binary_search_pos(const Array& arr, const Value& val, Less less) { if(arr.size() == 0) return 0; unsigned beg = 0; unsigned end = arr.size() - 1; if(less(val, arr[0])) return 0; if(less(arr[end], val)) return end + 1; while(end - beg > 1) { unsigned mid = (end + beg) >> 1; if(less(val, arr[mid])) end = mid; else beg = mid; } //if(beg <= 0 && less(val, arr[0])) return 0; //if(end >= arr.size() - 1 && less(arr[end], val)) ++end; return end; } //----------------------------------------------------------range_adaptor template class range_adaptor { public: typedef typename Array::value_type value_type; range_adaptor(Array& array, unsigned start, unsigned size) : m_array(array), m_start(start), m_size(size) {} unsigned size() const { return m_size; } const value_type& operator [] (unsigned i) const { return m_array[m_start + i]; } value_type& operator [] (unsigned i) { return m_array[m_start + i]; } const value_type& at(unsigned i) const { return m_array[m_start + i]; } value_type& at(unsigned i) { return m_array[m_start + i]; } value_type value_at(unsigned i) const { return m_array[m_start + i]; } private: Array& m_array; unsigned m_start; unsigned m_size; }; //---------------------------------------------------------------int_less inline bool int_less(int a, int b) { return a < b; } //------------------------------------------------------------int_greater inline bool int_greater(int a, int b) { return a > b; } //----------------------------------------------------------unsigned_less inline bool unsigned_less(unsigned a, unsigned b) { return a < b; } //-------------------------------------------------------unsigned_greater inline bool unsigned_greater(unsigned a, unsigned b) { return a > b; } } #endif mapnik-3.0.9/deps/agg/include/agg_arrowhead.h000066400000000000000000000044211262555547000210750ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Simple arrowhead/arrowtail generator // //---------------------------------------------------------------------------- #ifndef AGG_ARROWHEAD_INCLUDED #define AGG_ARROWHEAD_INCLUDED #include "agg_basics.h" namespace agg { //===============================================================arrowhead // // See implementation agg_arrowhead.cpp // class arrowhead { public: arrowhead(); void head(double d1, double d2, double d3, double d4) { m_head_d1 = d1; m_head_d2 = d2; m_head_d3 = d3; m_head_d4 = d4; m_head_flag = true; } void head() { m_head_flag = true; } void no_head() { m_head_flag = false; } void tail(double d1, double d2, double d3, double d4) { m_tail_d1 = d1; m_tail_d2 = d2; m_tail_d3 = d3; m_tail_d4 = d4; m_tail_flag = true; } void tail() { m_tail_flag = true; } void no_tail() { m_tail_flag = false; } void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: double m_head_d1; double m_head_d2; double m_head_d3; double m_head_d4; double m_tail_d1; double m_tail_d2; double m_tail_d3; double m_tail_d4; bool m_head_flag; bool m_tail_flag; double m_coord[16]; unsigned m_cmd[8]; unsigned m_curr_id; unsigned m_curr_coord; }; } #endif mapnik-3.0.9/deps/agg/include/agg_basics.h000066400000000000000000000364201262555547000203710ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_BASICS_INCLUDED #define AGG_BASICS_INCLUDED #include #include "agg_config.h" //---------------------------------------------------------AGG_CUSTOM_ALLOCATOR #ifdef AGG_CUSTOM_ALLOCATOR #include "agg_allocator.h" #else namespace agg { // The policy of all AGG containers and memory allocation strategy // in general is that no allocated data requires explicit construction. // It means that the allocator can be really simple; you can even // replace new/delete to malloc/free. The constructors and destructors // won't be called in this case, however everything will remain working. // The second argument of deallocate() is the size of the allocated // block. You can use this information if you wish. //------------------------------------------------------------pod_allocator template struct pod_allocator { //static T* allocate(unsigned num) { return static_cast(::operator new(sizeof(T)*num));} //static void deallocate(T* ptr, unsigned) { ::operator delete(ptr) ;} static T* allocate(unsigned num) { return new T [num]; } static void deallocate(T* ptr, unsigned) { delete [] ptr; } }; // Single object allocator. It's also can be replaced with your custom // allocator. The difference is that it can only allocate a single // object and the constructor and destructor must be called. // In AGG there is no need to allocate an array of objects with // calling their constructors (only single ones). So that, if you // replace these new/delete to malloc/free make sure that the in-place // new is called and take care of calling the destructor too. //------------------------------------------------------------obj_allocator template struct obj_allocator { static T* allocate() { return new T; } static void deallocate(T* ptr) { delete ptr; } }; } #endif //-------------------------------------------------------- Default basic types // // If the compiler has different capacity of the basic types you can redefine // them via the compiler command line or by generating agg_config.h that is // empty by default. // #ifndef AGG_INT8 #define AGG_INT8 signed char #endif #ifndef AGG_INT8U #define AGG_INT8U unsigned char #endif #ifndef AGG_INT16 #define AGG_INT16 short #endif #ifndef AGG_INT16U #define AGG_INT16U unsigned short #endif #ifndef AGG_INT32 #define AGG_INT32 int #endif #ifndef AGG_INT32U #define AGG_INT32U unsigned #endif #ifndef AGG_INT64 #define AGG_INT64 signed long long #endif #ifndef AGG_INT64U #define AGG_INT64U unsigned long long #endif //------------------------------------------------ Some fixes for MS Visual C++ #if defined(_MSC_VER) #pragma warning(disable:4786) // Identifier was truncated... #endif #if defined(_MSC_VER) #define AGG_INLINE __forceinline #else #define AGG_INLINE inline #endif namespace agg { //------------------------------------------------------------------------- typedef AGG_INT8 int8; //----int8 typedef AGG_INT8U int8u; //----int8u typedef AGG_INT16 int16; //----int16 typedef AGG_INT16U int16u; //----int16u typedef AGG_INT32 int32; //----int32 typedef AGG_INT32U int32u; //----int32u typedef AGG_INT64 int64; //----int64 typedef AGG_INT64U int64u; //----int64u AGG_INLINE int iround(double v) { return int((v < 0.0) ? v - 0.5 : v + 0.5); } AGG_INLINE int uround(double v) { return unsigned(v + 0.5); } AGG_INLINE unsigned ufloor(double v) { return unsigned(v); } AGG_INLINE unsigned uceil(double v) { return unsigned(std::ceil(v)); } //---------------------------------------------------------------saturation template struct saturation { AGG_INLINE static int iround(double v) { if(v < double(-Limit)) return -Limit; if(v > double( Limit)) return Limit; return agg::iround(v); } }; //------------------------------------------------------------------mul_one template struct mul_one { AGG_INLINE static unsigned mul(unsigned a, unsigned b) { unsigned q = a * b + (1 << (Shift-1)); return (q + (q >> Shift)) >> Shift; } }; //------------------------------------------------------------------------- typedef unsigned char cover_type; //----cover_type enum cover_scale_e { cover_shift = 8, //----cover_shift cover_size = 1 << cover_shift, //----cover_size cover_mask = cover_size - 1, //----cover_mask cover_none = 0, //----cover_none cover_full = cover_mask //----cover_full }; //----------------------------------------------------poly_subpixel_scale_e // These constants determine the subpixel accuracy, to be more precise, // the number of bits of the fractional part of the coordinates. // The possible coordinate capacity in bits can be calculated by formula: // sizeof(int) * 8 - poly_subpixel_shift, i.e, for 32-bit integers and // 8-bits fractional part the capacity is 24 bits. enum poly_subpixel_scale_e { poly_subpixel_shift = 8, //----poly_subpixel_shift poly_subpixel_scale = 1< struct rect_base { typedef T value_type; typedef rect_base self_type; T x1, y1, x2, y2; rect_base() {} rect_base(T x1_, T y1_, T x2_, T y2_) : x1(x1_), y1(y1_), x2(x2_), y2(y2_) {} void init(T x1_, T y1_, T x2_, T y2_) { x1 = x1_; y1 = y1_; x2 = x2_; y2 = y2_; } const self_type& normalize() { T t; if(x1 > x2) { t = x1; x1 = x2; x2 = t; } if(y1 > y2) { t = y1; y1 = y2; y2 = t; } return *this; } bool clip(const self_type& r) { if(x2 > r.x2) x2 = r.x2; if(y2 > r.y2) y2 = r.y2; if(x1 < r.x1) x1 = r.x1; if(y1 < r.y1) y1 = r.y1; return x1 <= x2 && y1 <= y2; } bool is_valid() const { return x1 <= x2 && y1 <= y2; } bool hit_test(T x, T y) const { return (x >= x1 && x <= x2 && y >= y1 && y <= y2); } }; //-----------------------------------------------------intersect_rectangles template inline Rect intersect_rectangles(const Rect& r1, const Rect& r2) { Rect r = r1; // First process x2,y2 because the other order // results in Internal Compiler Error under // Microsoft Visual C++ .NET 2003 69462-335-0000007-18038 in // case of "Maximize Speed" optimization option. //----------------- if(r.x2 > r2.x2) r.x2 = r2.x2; if(r.y2 > r2.y2) r.y2 = r2.y2; if(r.x1 < r2.x1) r.x1 = r2.x1; if(r.y1 < r2.y1) r.y1 = r2.y1; return r; } //---------------------------------------------------------unite_rectangles template inline Rect unite_rectangles(const Rect& r1, const Rect& r2) { Rect r = r1; if(r.x2 < r2.x2) r.x2 = r2.x2; if(r.y2 < r2.y2) r.y2 = r2.y2; if(r.x1 > r2.x1) r.x1 = r2.x1; if(r.y1 > r2.y1) r.y1 = r2.y1; return r; } typedef rect_base rect_i; //----rect_i typedef rect_base rect_f; //----rect_f typedef rect_base rect_d; //----rect_d //---------------------------------------------------------path_commands_e enum path_commands_e { path_cmd_stop = 0, //----path_cmd_stop path_cmd_move_to = 1, //----path_cmd_move_to path_cmd_line_to = 2, //----path_cmd_line_to path_cmd_curve3 = 3, //----path_cmd_curve3 path_cmd_curve4 = 4, //----path_cmd_curve4 path_cmd_curveN = 5, //----path_cmd_curveN path_cmd_catrom = 6, //----path_cmd_catrom path_cmd_ubspline = 7, //----path_cmd_ubspline path_cmd_end_poly = 0x0F, //----path_cmd_end_poly path_cmd_mask = 0x0F //----path_cmd_mask }; //------------------------------------------------------------path_flags_e enum path_flags_e { path_flags_none = 0, //----path_flags_none path_flags_ccw = 0x10, //----path_flags_ccw path_flags_cw = 0x20, //----path_flags_cw path_flags_close = 0x40, //----path_flags_close path_flags_mask = 0xF0 //----path_flags_mask }; //---------------------------------------------------------------is_vertex inline bool is_vertex(unsigned c) { return c >= path_cmd_move_to && c < path_cmd_end_poly; } //--------------------------------------------------------------is_drawing inline bool is_drawing(unsigned c) { return c >= path_cmd_line_to && c < path_cmd_end_poly; } //-----------------------------------------------------------------is_stop inline bool is_stop(unsigned c) { return c == path_cmd_stop; } //--------------------------------------------------------------is_move_to inline bool is_move_to(unsigned c) { return c == path_cmd_move_to; } //--------------------------------------------------------------is_line_to inline bool is_line_to(unsigned c) { return c == path_cmd_line_to; } //----------------------------------------------------------------is_curve inline bool is_curve(unsigned c) { return c == path_cmd_curve3 || c == path_cmd_curve4; } //---------------------------------------------------------------is_curve3 inline bool is_curve3(unsigned c) { return c == path_cmd_curve3; } //---------------------------------------------------------------is_curve4 inline bool is_curve4(unsigned c) { return c == path_cmd_curve4; } //-------------------------------------------------------------is_end_poly inline bool is_end_poly(unsigned c) { return (c & path_cmd_mask) == path_cmd_end_poly; } //----------------------------------------------------------------is_close inline bool is_close(unsigned c) { return (c & ~(path_flags_cw | path_flags_ccw)) == (path_cmd_end_poly | path_flags_close); } //------------------------------------------------------------is_next_poly inline bool is_next_poly(unsigned c) { return is_stop(c) || is_move_to(c) || is_end_poly(c); } //-------------------------------------------------------------------is_cw inline bool is_cw(unsigned c) { return (c & path_flags_cw) != 0; } //------------------------------------------------------------------is_ccw inline bool is_ccw(unsigned c) { return (c & path_flags_ccw) != 0; } //-------------------------------------------------------------is_oriented inline bool is_oriented(unsigned c) { return (c & (path_flags_cw | path_flags_ccw)) != 0; } //---------------------------------------------------------------is_closed inline bool is_closed(unsigned c) { return (c & path_flags_close) != 0; } //----------------------------------------------------------get_close_flag inline unsigned get_close_flag(unsigned c) { return c & path_flags_close; } //-------------------------------------------------------clear_orientation inline unsigned clear_orientation(unsigned c) { return c & ~(path_flags_cw | path_flags_ccw); } //---------------------------------------------------------get_orientation inline unsigned get_orientation(unsigned c) { return c & (path_flags_cw | path_flags_ccw); } //---------------------------------------------------------set_orientation inline unsigned set_orientation(unsigned c, unsigned o) { return clear_orientation(c) | o; } //--------------------------------------------------------------point_base template struct point_base { typedef T value_type; T x,y; point_base() {} point_base(T x_, T y_) : x(x_), y(y_) {} }; typedef point_base point_i; //-----point_i typedef point_base point_f; //-----point_f typedef point_base point_d; //-----point_d //-------------------------------------------------------------vertex_base template struct vertex_base { typedef T value_type; T x,y; unsigned cmd; vertex_base() {} vertex_base(T x_, T y_, unsigned cmd_) : x(x_), y(y_), cmd(cmd_) {} }; typedef vertex_base vertex_i; //-----vertex_i typedef vertex_base vertex_f; //-----vertex_f typedef vertex_base vertex_d; //-----vertex_d //----------------------------------------------------------------row_info template struct row_info { int x1, x2; T* ptr; row_info() {} row_info(int x1_, int x2_, T* ptr_) : x1(x1_), x2(x2_), ptr(ptr_) {} }; //----------------------------------------------------------const_row_info template struct const_row_info { int x1, x2; const T* ptr; const_row_info() {} const_row_info(int x1_, int x2_, const T* ptr_) : x1(x1_), x2(x2_), ptr(ptr_) {} }; //------------------------------------------------------------is_equal_eps template inline bool is_equal_eps(T v1, T v2, T epsilon) { return std::fabs(v1 - v2) <= double(epsilon); } } #endif mapnik-3.0.9/deps/agg/include/agg_bezier_arc.h000066400000000000000000000132311262555547000212250ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Arc generator. Produces at most 4 consecutive cubic bezier curves, i.e., // 4, 7, 10, or 13 vertices. // //---------------------------------------------------------------------------- #ifndef AGG_BEZIER_ARC_INCLUDED #define AGG_BEZIER_ARC_INCLUDED #include "agg_conv_transform.h" namespace agg { //----------------------------------------------------------------------- void arc_to_bezier(double cx, double cy, double rx, double ry, double start_angle, double sweep_angle, double* curve); //==============================================================bezier_arc // // See implemantaion agg_bezier_arc.cpp // class bezier_arc { public: //-------------------------------------------------------------------- bezier_arc() : m_vertex(26), m_num_vertices(0), m_cmd(path_cmd_line_to) {} bezier_arc(double x, double y, double rx, double ry, double start_angle, double sweep_angle) { init(x, y, rx, ry, start_angle, sweep_angle); } //-------------------------------------------------------------------- void init(double x, double y, double rx, double ry, double start_angle, double sweep_angle); //-------------------------------------------------------------------- void rewind(unsigned) { m_vertex = 0; } //-------------------------------------------------------------------- unsigned vertex(double* x, double* y) { if(m_vertex >= m_num_vertices) return path_cmd_stop; *x = m_vertices[m_vertex]; *y = m_vertices[m_vertex + 1]; m_vertex += 2; return (m_vertex == 2) ? (unsigned)path_cmd_move_to : m_cmd; } // Supplemantary functions. num_vertices() actually returns doubled // number of vertices. That is, for 1 vertex it returns 2. //-------------------------------------------------------------------- unsigned num_vertices() const { return m_num_vertices; } const double* vertices() const { return m_vertices; } double* vertices() { return m_vertices; } private: unsigned m_vertex; unsigned m_num_vertices; double m_vertices[26]; unsigned m_cmd; }; //==========================================================bezier_arc_svg // Compute an SVG-style bezier arc. // // Computes an elliptical arc from (x1, y1) to (x2, y2). The size and // orientation of the ellipse are defined by two radii (rx, ry) // and an x-axis-rotation, which indicates how the ellipse as a whole // is rotated relative to the current coordinate system. The center // (cx, cy) of the ellipse is calculated automatically to satisfy the // constraints imposed by the other parameters. // large-arc-flag and sweep-flag contribute to the automatic calculations // and help determine how the arc is drawn. class bezier_arc_svg { public: //-------------------------------------------------------------------- bezier_arc_svg() : m_arc(), m_radii_ok(false) {} bezier_arc_svg(double x1, double y1, double rx, double ry, double angle, bool large_arc_flag, bool sweep_flag, double x2, double y2) : m_arc(), m_radii_ok(false) { init(x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2); } //-------------------------------------------------------------------- void init(double x1, double y1, double rx, double ry, double angle, bool large_arc_flag, bool sweep_flag, double x2, double y2); //-------------------------------------------------------------------- bool radii_ok() const { return m_radii_ok; } //-------------------------------------------------------------------- void rewind(unsigned) { m_arc.rewind(0); } //-------------------------------------------------------------------- unsigned vertex(double* x, double* y) { return m_arc.vertex(x, y); } // Supplemantary functions. num_vertices() actually returns doubled // number of vertices. That is, for 1 vertex it returns 2. //-------------------------------------------------------------------- unsigned num_vertices() const { return m_arc.num_vertices(); } const double* vertices() const { return m_arc.vertices(); } double* vertices() { return m_arc.vertices(); } private: bezier_arc m_arc; bool m_radii_ok; }; } #endif mapnik-3.0.9/deps/agg/include/agg_bitset_iterator.h000066400000000000000000000026141262555547000223260ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_BITSET_ITERATOR_INCLUDED #define AGG_BITSET_ITERATOR_INCLUDED #include "agg_basics.h" namespace agg { class bitset_iterator { public: bitset_iterator(const int8u* bits, unsigned offset = 0) : m_bits(bits + (offset >> 3)), m_mask(0x80 >> (offset & 7)) {} void operator ++ () { m_mask >>= 1; if(m_mask == 0) { ++m_bits; m_mask = 0x80; } } unsigned bit() const { return (*m_bits) & m_mask; } private: const int8u* m_bits; int8u m_mask; }; } #endif mapnik-3.0.9/deps/agg/include/agg_blur.h000066400000000000000000001277451262555547000201040ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // The Stack Blur Algorithm was invented by Mario Klingemann, // mario@quasimondo.com and described here: // http://incubator.quasimondo.com/processing/fast_blur_deluxe.php // (search phrase "Stackblur: Fast But Goodlooking"). // The major improvement is that there's no more division table // that was very expensive to create for large blur radii. Insted, // for 8-bit per channel and radius not exceeding 254 the division is // replaced by multiplication and shift. // //---------------------------------------------------------------------------- #ifndef AGG_BLUR_INCLUDED #define AGG_BLUR_INCLUDED #include "agg_array.h" #include "agg_pixfmt_transposer.h" namespace agg { template struct stack_blur_tables { static int16u const g_stack_blur8_mul[255]; static int8u const g_stack_blur8_shr[255]; }; //------------------------------------------------------------------------ template int16u const stack_blur_tables::g_stack_blur8_mul[255] = { 512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512, 454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512, 482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456, 437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512, 497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328, 320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456, 446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335, 329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512, 505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405, 399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328, 324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271, 268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456, 451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388, 385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335, 332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292, 289,287,285,282,280,278,275,273,271,269,267,265,263,261,259 }; //------------------------------------------------------------------------ template int8u const stack_blur_tables::g_stack_blur8_shr[255] = { 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 }; //==============================================================stack_blur template class stack_blur { public: typedef ColorT color_type; typedef CalculatorT calculator_type; //-------------------------------------------------------------------- template void blur_x(Img& img, unsigned radius) { if(radius < 1) return; unsigned x, y, xp, i; unsigned stack_ptr; unsigned stack_start; color_type pix; color_type* stack_pix; calculator_type sum; calculator_type sum_in; calculator_type sum_out; unsigned w = img.width(); unsigned h = img.height(); unsigned wm = w - 1; unsigned div = radius * 2 + 1; unsigned div_sum = (radius + 1) * (radius + 1); unsigned mul_sum = 0; unsigned shr_sum = 0; unsigned max_val = color_type::base_mask; if(max_val <= 255 && radius < 255) { mul_sum = stack_blur_tables::g_stack_blur8_mul[radius]; shr_sum = stack_blur_tables::g_stack_blur8_shr[radius]; } m_buf.allocate(w, 128); m_stack.allocate(div, 32); for(y = 0; y < h; y++) { sum.clear(); sum_in.clear(); sum_out.clear(); pix = img.pixel(0, y); for(i = 0; i <= radius; i++) { m_stack[i] = pix; sum.add(pix, i + 1); sum_out.add(pix); } for(i = 1; i <= radius; i++) { pix = img.pixel((i > wm) ? wm : i, y); m_stack[i + radius] = pix; sum.add(pix, radius + 1 - i); sum_in.add(pix); } stack_ptr = radius; for(x = 0; x < w; x++) { if(mul_sum) sum.calc_pix(m_buf[x], mul_sum, shr_sum); else sum.calc_pix(m_buf[x], div_sum); sum.sub(sum_out); stack_start = stack_ptr + div - radius; if(stack_start >= div) stack_start -= div; stack_pix = &m_stack[stack_start]; sum_out.sub(*stack_pix); xp = x + radius + 1; if(xp > wm) xp = wm; pix = img.pixel(xp, y); *stack_pix = pix; sum_in.add(pix); sum.add(sum_in); ++stack_ptr; if(stack_ptr >= div) stack_ptr = 0; stack_pix = &m_stack[stack_ptr]; sum_out.add(*stack_pix); sum_in.sub(*stack_pix); } img.copy_color_hspan(0, y, w, &m_buf[0]); } } //-------------------------------------------------------------------- template void blur_y(Img& img, unsigned radius) { pixfmt_transposer img2(img); blur_x(img2, radius); } //-------------------------------------------------------------------- template void blur(Img& img, unsigned radius) { blur_x(img, radius); pixfmt_transposer img2(img); blur_x(img2, radius); } private: pod_vector m_buf; pod_vector m_stack; }; //====================================================stack_blur_calc_rgba template struct stack_blur_calc_rgba { typedef T value_type; value_type r,g,b,a; AGG_INLINE void clear() { r = g = b = a = 0; } template AGG_INLINE void add(const ArgT& v) { r += v.r; g += v.g; b += v.b; a += v.a; } template AGG_INLINE void add(const ArgT& v, unsigned k) { r += v.r * k; g += v.g * k; b += v.b * k; a += v.a * k; } template AGG_INLINE void sub(const ArgT& v) { r -= v.r; g -= v.g; b -= v.b; a -= v.a; } template AGG_INLINE void calc_pix(ArgT& v, unsigned div) { typedef typename ArgT::value_type value_type; v.r = value_type(r / div); v.g = value_type(g / div); v.b = value_type(b / div); v.a = value_type(a / div); } template AGG_INLINE void calc_pix(ArgT& v, unsigned mul, unsigned shr) { typedef typename ArgT::value_type value_type; v.r = value_type((r * mul) >> shr); v.g = value_type((g * mul) >> shr); v.b = value_type((b * mul) >> shr); v.a = value_type((a * mul) >> shr); } }; //=====================================================stack_blur_calc_rgb template struct stack_blur_calc_rgb { typedef T value_type; value_type r,g,b; AGG_INLINE void clear() { r = g = b = 0; } template AGG_INLINE void add(const ArgT& v) { r += v.r; g += v.g; b += v.b; } template AGG_INLINE void add(const ArgT& v, unsigned k) { r += v.r * k; g += v.g * k; b += v.b * k; } template AGG_INLINE void sub(const ArgT& v) { r -= v.r; g -= v.g; b -= v.b; } template AGG_INLINE void calc_pix(ArgT& v, unsigned div) { typedef typename ArgT::value_type value_type; v.r = value_type(r / div); v.g = value_type(g / div); v.b = value_type(b / div); } template AGG_INLINE void calc_pix(ArgT& v, unsigned mul, unsigned shr) { typedef typename ArgT::value_type value_type; v.r = value_type((r * mul) >> shr); v.g = value_type((g * mul) >> shr); v.b = value_type((b * mul) >> shr); } }; //====================================================stack_blur_calc_gray template struct stack_blur_calc_gray { typedef T value_type; value_type v; AGG_INLINE void clear() { v = 0; } template AGG_INLINE void add(const ArgT& a) { v += a.v; } template AGG_INLINE void add(const ArgT& a, unsigned k) { v += a.v * k; } template AGG_INLINE void sub(const ArgT& a) { v -= a.v; } template AGG_INLINE void calc_pix(ArgT& a, unsigned div) { typedef typename ArgT::value_type value_type; a.v = value_type(v / div); } template AGG_INLINE void calc_pix(ArgT& a, unsigned mul, unsigned shr) { typedef typename ArgT::value_type value_type; a.v = value_type((v * mul) >> shr); } }; //========================================================stack_blur_gray8 template void stack_blur_gray8(Img& img, unsigned rx, unsigned ry) { unsigned x, y, xp, yp, i; unsigned stack_ptr; unsigned stack_start; const int8u* src_pix_ptr; int8u* dst_pix_ptr; unsigned pix; unsigned stack_pix; unsigned sum; unsigned sum_in; unsigned sum_out; unsigned w = img.width(); unsigned h = img.height(); unsigned wm = w - 1; unsigned hm = h - 1; unsigned div; unsigned mul_sum; unsigned shr_sum; pod_vector stack; if(rx > 0) { if(rx > 254) rx = 254; div = rx * 2 + 1; mul_sum = stack_blur_tables::g_stack_blur8_mul[rx]; shr_sum = stack_blur_tables::g_stack_blur8_shr[rx]; stack.allocate(div); for(y = 0; y < h; y++) { sum = sum_in = sum_out = 0; src_pix_ptr = img.pix_ptr(0, y); pix = *src_pix_ptr; for(i = 0; i <= rx; i++) { stack[i] = pix; sum += pix * (i + 1); sum_out += pix; } for(i = 1; i <= rx; i++) { if(i <= wm) src_pix_ptr += Img::pix_step; pix = *src_pix_ptr; stack[i + rx] = pix; sum += pix * (rx + 1 - i); sum_in += pix; } stack_ptr = rx; xp = rx; if(xp > wm) xp = wm; src_pix_ptr = img.pix_ptr(xp, y); dst_pix_ptr = img.pix_ptr(0, y); for(x = 0; x < w; x++) { *dst_pix_ptr = (sum * mul_sum) >> shr_sum; dst_pix_ptr += Img::pix_step; sum -= sum_out; stack_start = stack_ptr + div - rx; if(stack_start >= div) stack_start -= div; sum_out -= stack[stack_start]; if(xp < wm) { src_pix_ptr += Img::pix_step; pix = *src_pix_ptr; ++xp; } stack[stack_start] = pix; sum_in += pix; sum += sum_in; ++stack_ptr; if(stack_ptr >= div) stack_ptr = 0; stack_pix = stack[stack_ptr]; sum_out += stack_pix; sum_in -= stack_pix; } } } if(ry > 0) { if(ry > 254) ry = 254; div = ry * 2 + 1; mul_sum = stack_blur_tables::g_stack_blur8_mul[ry]; shr_sum = stack_blur_tables::g_stack_blur8_shr[ry]; stack.allocate(div); int stride = img.stride(); for(x = 0; x < w; x++) { sum = sum_in = sum_out = 0; src_pix_ptr = img.pix_ptr(x, 0); pix = *src_pix_ptr; for(i = 0; i <= ry; i++) { stack[i] = pix; sum += pix * (i + 1); sum_out += pix; } for(i = 1; i <= ry; i++) { if(i <= hm) src_pix_ptr += stride; pix = *src_pix_ptr; stack[i + ry] = pix; sum += pix * (ry + 1 - i); sum_in += pix; } stack_ptr = ry; yp = ry; if(yp > hm) yp = hm; src_pix_ptr = img.pix_ptr(x, yp); dst_pix_ptr = img.pix_ptr(x, 0); for(y = 0; y < h; y++) { *dst_pix_ptr = (sum * mul_sum) >> shr_sum; dst_pix_ptr += stride; sum -= sum_out; stack_start = stack_ptr + div - ry; if(stack_start >= div) stack_start -= div; sum_out -= stack[stack_start]; if(yp < hm) { src_pix_ptr += stride; pix = *src_pix_ptr; ++yp; } stack[stack_start] = pix; sum_in += pix; sum += sum_in; ++stack_ptr; if(stack_ptr >= div) stack_ptr = 0; stack_pix = stack[stack_ptr]; sum_out += stack_pix; sum_in -= stack_pix; } } } } //========================================================stack_blur_rgb24 template void stack_blur_rgb24(Img& img, unsigned rx, unsigned ry) { typedef typename Img::color_type color_type; typedef typename Img::order_type order_type; enum order_e { R = order_type::R, G = order_type::G, B = order_type::B }; unsigned x, y, xp, yp, i; unsigned stack_ptr; unsigned stack_start; const int8u* src_pix_ptr; int8u* dst_pix_ptr; color_type* stack_pix_ptr; unsigned sum_r; unsigned sum_g; unsigned sum_b; unsigned sum_in_r; unsigned sum_in_g; unsigned sum_in_b; unsigned sum_out_r; unsigned sum_out_g; unsigned sum_out_b; unsigned w = img.width(); unsigned h = img.height(); unsigned wm = w - 1; unsigned hm = h - 1; unsigned div; unsigned mul_sum; unsigned shr_sum; pod_vector stack; if(rx > 0) { if(rx > 254) rx = 254; div = rx * 2 + 1; mul_sum = stack_blur_tables::g_stack_blur8_mul[rx]; shr_sum = stack_blur_tables::g_stack_blur8_shr[rx]; stack.allocate(div); for(y = 0; y < h; y++) { sum_r = sum_g = sum_b = sum_in_r = sum_in_g = sum_in_b = sum_out_r = sum_out_g = sum_out_b = 0; src_pix_ptr = img.pix_ptr(0, y); for(i = 0; i <= rx; i++) { stack_pix_ptr = &stack[i]; stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; sum_r += src_pix_ptr[R] * (i + 1); sum_g += src_pix_ptr[G] * (i + 1); sum_b += src_pix_ptr[B] * (i + 1); sum_out_r += src_pix_ptr[R]; sum_out_g += src_pix_ptr[G]; sum_out_b += src_pix_ptr[B]; } for(i = 1; i <= rx; i++) { if(i <= wm) src_pix_ptr += Img::pix_width; stack_pix_ptr = &stack[i + rx]; stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; sum_r += src_pix_ptr[R] * (rx + 1 - i); sum_g += src_pix_ptr[G] * (rx + 1 - i); sum_b += src_pix_ptr[B] * (rx + 1 - i); sum_in_r += src_pix_ptr[R]; sum_in_g += src_pix_ptr[G]; sum_in_b += src_pix_ptr[B]; } stack_ptr = rx; xp = rx; if(xp > wm) xp = wm; src_pix_ptr = img.pix_ptr(xp, y); dst_pix_ptr = img.pix_ptr(0, y); for(x = 0; x < w; x++) { dst_pix_ptr[R] = (sum_r * mul_sum) >> shr_sum; dst_pix_ptr[G] = (sum_g * mul_sum) >> shr_sum; dst_pix_ptr[B] = (sum_b * mul_sum) >> shr_sum; dst_pix_ptr += Img::pix_width; sum_r -= sum_out_r; sum_g -= sum_out_g; sum_b -= sum_out_b; stack_start = stack_ptr + div - rx; if(stack_start >= div) stack_start -= div; stack_pix_ptr = &stack[stack_start]; sum_out_r -= stack_pix_ptr->r; sum_out_g -= stack_pix_ptr->g; sum_out_b -= stack_pix_ptr->b; if(xp < wm) { src_pix_ptr += Img::pix_width; ++xp; } stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; sum_in_r += src_pix_ptr[R]; sum_in_g += src_pix_ptr[G]; sum_in_b += src_pix_ptr[B]; sum_r += sum_in_r; sum_g += sum_in_g; sum_b += sum_in_b; ++stack_ptr; if(stack_ptr >= div) stack_ptr = 0; stack_pix_ptr = &stack[stack_ptr]; sum_out_r += stack_pix_ptr->r; sum_out_g += stack_pix_ptr->g; sum_out_b += stack_pix_ptr->b; sum_in_r -= stack_pix_ptr->r; sum_in_g -= stack_pix_ptr->g; sum_in_b -= stack_pix_ptr->b; } } } if(ry > 0) { if(ry > 254) ry = 254; div = ry * 2 + 1; mul_sum = stack_blur_tables::g_stack_blur8_mul[ry]; shr_sum = stack_blur_tables::g_stack_blur8_shr[ry]; stack.allocate(div); int stride = img.stride(); for(x = 0; x < w; x++) { sum_r = sum_g = sum_b = sum_in_r = sum_in_g = sum_in_b = sum_out_r = sum_out_g = sum_out_b = 0; src_pix_ptr = img.pix_ptr(x, 0); for(i = 0; i <= ry; i++) { stack_pix_ptr = &stack[i]; stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; sum_r += src_pix_ptr[R] * (i + 1); sum_g += src_pix_ptr[G] * (i + 1); sum_b += src_pix_ptr[B] * (i + 1); sum_out_r += src_pix_ptr[R]; sum_out_g += src_pix_ptr[G]; sum_out_b += src_pix_ptr[B]; } for(i = 1; i <= ry; i++) { if(i <= hm) src_pix_ptr += stride; stack_pix_ptr = &stack[i + ry]; stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; sum_r += src_pix_ptr[R] * (ry + 1 - i); sum_g += src_pix_ptr[G] * (ry + 1 - i); sum_b += src_pix_ptr[B] * (ry + 1 - i); sum_in_r += src_pix_ptr[R]; sum_in_g += src_pix_ptr[G]; sum_in_b += src_pix_ptr[B]; } stack_ptr = ry; yp = ry; if(yp > hm) yp = hm; src_pix_ptr = img.pix_ptr(x, yp); dst_pix_ptr = img.pix_ptr(x, 0); for(y = 0; y < h; y++) { dst_pix_ptr[R] = (sum_r * mul_sum) >> shr_sum; dst_pix_ptr[G] = (sum_g * mul_sum) >> shr_sum; dst_pix_ptr[B] = (sum_b * mul_sum) >> shr_sum; dst_pix_ptr += stride; sum_r -= sum_out_r; sum_g -= sum_out_g; sum_b -= sum_out_b; stack_start = stack_ptr + div - ry; if(stack_start >= div) stack_start -= div; stack_pix_ptr = &stack[stack_start]; sum_out_r -= stack_pix_ptr->r; sum_out_g -= stack_pix_ptr->g; sum_out_b -= stack_pix_ptr->b; if(yp < hm) { src_pix_ptr += stride; ++yp; } stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; sum_in_r += src_pix_ptr[R]; sum_in_g += src_pix_ptr[G]; sum_in_b += src_pix_ptr[B]; sum_r += sum_in_r; sum_g += sum_in_g; sum_b += sum_in_b; ++stack_ptr; if(stack_ptr >= div) stack_ptr = 0; stack_pix_ptr = &stack[stack_ptr]; sum_out_r += stack_pix_ptr->r; sum_out_g += stack_pix_ptr->g; sum_out_b += stack_pix_ptr->b; sum_in_r -= stack_pix_ptr->r; sum_in_g -= stack_pix_ptr->g; sum_in_b -= stack_pix_ptr->b; } } } } //=======================================================stack_blur_rgba32 template void stack_blur_rgba32(Img& img, unsigned rx, unsigned ry) { typedef typename Img::color_type color_type; typedef typename Img::order_type order_type; enum order_e { R = order_type::R, G = order_type::G, B = order_type::B, A = order_type::A }; unsigned x, y, xp, yp, i; unsigned stack_ptr; unsigned stack_start; const int8u* src_pix_ptr; int8u* dst_pix_ptr; color_type* stack_pix_ptr; unsigned sum_r; unsigned sum_g; unsigned sum_b; unsigned sum_a; unsigned sum_in_r; unsigned sum_in_g; unsigned sum_in_b; unsigned sum_in_a; unsigned sum_out_r; unsigned sum_out_g; unsigned sum_out_b; unsigned sum_out_a; unsigned w = img.width(); unsigned h = img.height(); unsigned wm = w - 1; unsigned hm = h - 1; unsigned div; unsigned mul_sum; unsigned shr_sum; pod_vector stack; if(rx > 0) { if(rx > 254) rx = 254; div = rx * 2 + 1; mul_sum = stack_blur_tables::g_stack_blur8_mul[rx]; shr_sum = stack_blur_tables::g_stack_blur8_shr[rx]; stack.allocate(div); for(y = 0; y < h; y++) { sum_r = sum_g = sum_b = sum_a = sum_in_r = sum_in_g = sum_in_b = sum_in_a = sum_out_r = sum_out_g = sum_out_b = sum_out_a = 0; src_pix_ptr = img.pix_ptr(0, y); for(i = 0; i <= rx; i++) { stack_pix_ptr = &stack[i]; stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; stack_pix_ptr->a = src_pix_ptr[A]; sum_r += src_pix_ptr[R] * (i + 1); sum_g += src_pix_ptr[G] * (i + 1); sum_b += src_pix_ptr[B] * (i + 1); sum_a += src_pix_ptr[A] * (i + 1); sum_out_r += src_pix_ptr[R]; sum_out_g += src_pix_ptr[G]; sum_out_b += src_pix_ptr[B]; sum_out_a += src_pix_ptr[A]; } for(i = 1; i <= rx; i++) { if(i <= wm) src_pix_ptr += Img::pix_width; stack_pix_ptr = &stack[i + rx]; stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; stack_pix_ptr->a = src_pix_ptr[A]; sum_r += src_pix_ptr[R] * (rx + 1 - i); sum_g += src_pix_ptr[G] * (rx + 1 - i); sum_b += src_pix_ptr[B] * (rx + 1 - i); sum_a += src_pix_ptr[A] * (rx + 1 - i); sum_in_r += src_pix_ptr[R]; sum_in_g += src_pix_ptr[G]; sum_in_b += src_pix_ptr[B]; sum_in_a += src_pix_ptr[A]; } stack_ptr = rx; xp = rx; if(xp > wm) xp = wm; src_pix_ptr = img.pix_ptr(xp, y); dst_pix_ptr = img.pix_ptr(0, y); for(x = 0; x < w; x++) { dst_pix_ptr[R] = (sum_r * mul_sum) >> shr_sum; dst_pix_ptr[G] = (sum_g * mul_sum) >> shr_sum; dst_pix_ptr[B] = (sum_b * mul_sum) >> shr_sum; dst_pix_ptr[A] = (sum_a * mul_sum) >> shr_sum; dst_pix_ptr += Img::pix_width; sum_r -= sum_out_r; sum_g -= sum_out_g; sum_b -= sum_out_b; sum_a -= sum_out_a; stack_start = stack_ptr + div - rx; if(stack_start >= div) stack_start -= div; stack_pix_ptr = &stack[stack_start]; sum_out_r -= stack_pix_ptr->r; sum_out_g -= stack_pix_ptr->g; sum_out_b -= stack_pix_ptr->b; sum_out_a -= stack_pix_ptr->a; if(xp < wm) { src_pix_ptr += Img::pix_width; ++xp; } stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; stack_pix_ptr->a = src_pix_ptr[A]; sum_in_r += src_pix_ptr[R]; sum_in_g += src_pix_ptr[G]; sum_in_b += src_pix_ptr[B]; sum_in_a += src_pix_ptr[A]; sum_r += sum_in_r; sum_g += sum_in_g; sum_b += sum_in_b; sum_a += sum_in_a; ++stack_ptr; if(stack_ptr >= div) stack_ptr = 0; stack_pix_ptr = &stack[stack_ptr]; sum_out_r += stack_pix_ptr->r; sum_out_g += stack_pix_ptr->g; sum_out_b += stack_pix_ptr->b; sum_out_a += stack_pix_ptr->a; sum_in_r -= stack_pix_ptr->r; sum_in_g -= stack_pix_ptr->g; sum_in_b -= stack_pix_ptr->b; sum_in_a -= stack_pix_ptr->a; } } } if(ry > 0) { if(ry > 254) ry = 254; div = ry * 2 + 1; mul_sum = stack_blur_tables::g_stack_blur8_mul[ry]; shr_sum = stack_blur_tables::g_stack_blur8_shr[ry]; stack.allocate(div); int stride = img.stride(); for(x = 0; x < w; x++) { sum_r = sum_g = sum_b = sum_a = sum_in_r = sum_in_g = sum_in_b = sum_in_a = sum_out_r = sum_out_g = sum_out_b = sum_out_a = 0; src_pix_ptr = img.pix_ptr(x, 0); for(i = 0; i <= ry; i++) { stack_pix_ptr = &stack[i]; stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; stack_pix_ptr->a = src_pix_ptr[A]; sum_r += src_pix_ptr[R] * (i + 1); sum_g += src_pix_ptr[G] * (i + 1); sum_b += src_pix_ptr[B] * (i + 1); sum_a += src_pix_ptr[A] * (i + 1); sum_out_r += src_pix_ptr[R]; sum_out_g += src_pix_ptr[G]; sum_out_b += src_pix_ptr[B]; sum_out_a += src_pix_ptr[A]; } for(i = 1; i <= ry; i++) { if(i <= hm) src_pix_ptr += stride; stack_pix_ptr = &stack[i + ry]; stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; stack_pix_ptr->a = src_pix_ptr[A]; sum_r += src_pix_ptr[R] * (ry + 1 - i); sum_g += src_pix_ptr[G] * (ry + 1 - i); sum_b += src_pix_ptr[B] * (ry + 1 - i); sum_a += src_pix_ptr[A] * (ry + 1 - i); sum_in_r += src_pix_ptr[R]; sum_in_g += src_pix_ptr[G]; sum_in_b += src_pix_ptr[B]; sum_in_a += src_pix_ptr[A]; } stack_ptr = ry; yp = ry; if(yp > hm) yp = hm; src_pix_ptr = img.pix_ptr(x, yp); dst_pix_ptr = img.pix_ptr(x, 0); for(y = 0; y < h; y++) { dst_pix_ptr[R] = (sum_r * mul_sum) >> shr_sum; dst_pix_ptr[G] = (sum_g * mul_sum) >> shr_sum; dst_pix_ptr[B] = (sum_b * mul_sum) >> shr_sum; dst_pix_ptr[A] = (sum_a * mul_sum) >> shr_sum; dst_pix_ptr += stride; sum_r -= sum_out_r; sum_g -= sum_out_g; sum_b -= sum_out_b; sum_a -= sum_out_a; stack_start = stack_ptr + div - ry; if(stack_start >= div) stack_start -= div; stack_pix_ptr = &stack[stack_start]; sum_out_r -= stack_pix_ptr->r; sum_out_g -= stack_pix_ptr->g; sum_out_b -= stack_pix_ptr->b; sum_out_a -= stack_pix_ptr->a; if(yp < hm) { src_pix_ptr += stride; ++yp; } stack_pix_ptr->r = src_pix_ptr[R]; stack_pix_ptr->g = src_pix_ptr[G]; stack_pix_ptr->b = src_pix_ptr[B]; stack_pix_ptr->a = src_pix_ptr[A]; sum_in_r += src_pix_ptr[R]; sum_in_g += src_pix_ptr[G]; sum_in_b += src_pix_ptr[B]; sum_in_a += src_pix_ptr[A]; sum_r += sum_in_r; sum_g += sum_in_g; sum_b += sum_in_b; sum_a += sum_in_a; ++stack_ptr; if(stack_ptr >= div) stack_ptr = 0; stack_pix_ptr = &stack[stack_ptr]; sum_out_r += stack_pix_ptr->r; sum_out_g += stack_pix_ptr->g; sum_out_b += stack_pix_ptr->b; sum_out_a += stack_pix_ptr->a; sum_in_r -= stack_pix_ptr->r; sum_in_g -= stack_pix_ptr->g; sum_in_b -= stack_pix_ptr->b; sum_in_a -= stack_pix_ptr->a; } } } } //===========================================================recursive_blur template class recursive_blur { public: typedef ColorT color_type; typedef CalculatorT calculator_type; typedef typename color_type::value_type value_type; typedef typename calculator_type::value_type calc_type; //-------------------------------------------------------------------- template void blur_x(Img& img, double radius) { if(radius < 0.62) return; if(img.width() < 3) return; calc_type s = calc_type(radius * 0.5); calc_type q = calc_type((s < 2.5) ? 3.97156 - 4.14554 * sqrt(1 - 0.26891 * s) : 0.98711 * s - 0.96330); calc_type q2 = calc_type(q * q); calc_type q3 = calc_type(q2 * q); calc_type b0 = calc_type(1.0 / (1.578250 + 2.444130 * q + 1.428100 * q2 + 0.422205 * q3)); calc_type b1 = calc_type( 2.44413 * q + 2.85619 * q2 + 1.26661 * q3); calc_type b2 = calc_type(-1.42810 * q2 + -1.26661 * q3); calc_type b3 = calc_type(0.422205 * q3); calc_type b = calc_type(1 - (b1 + b2 + b3) * b0); b1 *= b0; b2 *= b0; b3 *= b0; int w = img.width(); int h = img.height(); int wm = w-1; int x, y; m_sum1.allocate(w); m_sum2.allocate(w); m_buf.allocate(w); for(y = 0; y < h; y++) { calculator_type c; c.from_pix(img.pixel(0, y)); m_sum1[0].calc(b, b1, b2, b3, c, c, c, c); c.from_pix(img.pixel(1, y)); m_sum1[1].calc(b, b1, b2, b3, c, m_sum1[0], m_sum1[0], m_sum1[0]); c.from_pix(img.pixel(2, y)); m_sum1[2].calc(b, b1, b2, b3, c, m_sum1[1], m_sum1[0], m_sum1[0]); for(x = 3; x < w; ++x) { c.from_pix(img.pixel(x, y)); m_sum1[x].calc(b, b1, b2, b3, c, m_sum1[x-1], m_sum1[x-2], m_sum1[x-3]); } m_sum2[wm ].calc(b, b1, b2, b3, m_sum1[wm ], m_sum1[wm ], m_sum1[wm], m_sum1[wm]); m_sum2[wm-1].calc(b, b1, b2, b3, m_sum1[wm-1], m_sum2[wm ], m_sum2[wm], m_sum2[wm]); m_sum2[wm-2].calc(b, b1, b2, b3, m_sum1[wm-2], m_sum2[wm-1], m_sum2[wm], m_sum2[wm]); m_sum2[wm ].to_pix(m_buf[wm ]); m_sum2[wm-1].to_pix(m_buf[wm-1]); m_sum2[wm-2].to_pix(m_buf[wm-2]); for(x = wm-3; x >= 0; --x) { m_sum2[x].calc(b, b1, b2, b3, m_sum1[x], m_sum2[x+1], m_sum2[x+2], m_sum2[x+3]); m_sum2[x].to_pix(m_buf[x]); } img.copy_color_hspan(0, y, w, &m_buf[0]); } } //-------------------------------------------------------------------- template void blur_y(Img& img, double radius) { pixfmt_transposer img2(img); blur_x(img2, radius); } //-------------------------------------------------------------------- template void blur(Img& img, double radius) { blur_x(img, radius); pixfmt_transposer img2(img); blur_x(img2, radius); } private: agg::pod_vector m_sum1; agg::pod_vector m_sum2; agg::pod_vector m_buf; }; //=================================================recursive_blur_calc_rgba template struct recursive_blur_calc_rgba { typedef T value_type; typedef recursive_blur_calc_rgba self_type; value_type r,g,b,a; template AGG_INLINE void from_pix(const ColorT& c) { r = c.r; g = c.g; b = c.b; a = c.a; } AGG_INLINE void calc(value_type b1, value_type b2, value_type b3, value_type b4, const self_type& c1, const self_type& c2, const self_type& c3, const self_type& c4) { r = b1*c1.r + b2*c2.r + b3*c3.r + b4*c4.r; g = b1*c1.g + b2*c2.g + b3*c3.g + b4*c4.g; b = b1*c1.b + b2*c2.b + b3*c3.b + b4*c4.b; a = b1*c1.a + b2*c2.a + b3*c3.a + b4*c4.a; } template AGG_INLINE void to_pix(ColorT& c) const { typedef typename ColorT::value_type cv_type; c.r = (cv_type)uround(r); c.g = (cv_type)uround(g); c.b = (cv_type)uround(b); c.a = (cv_type)uround(a); } }; //=================================================recursive_blur_calc_rgb template struct recursive_blur_calc_rgb { typedef T value_type; typedef recursive_blur_calc_rgb self_type; value_type r,g,b; template AGG_INLINE void from_pix(const ColorT& c) { r = c.r; g = c.g; b = c.b; } AGG_INLINE void calc(value_type b1, value_type b2, value_type b3, value_type b4, const self_type& c1, const self_type& c2, const self_type& c3, const self_type& c4) { r = b1*c1.r + b2*c2.r + b3*c3.r + b4*c4.r; g = b1*c1.g + b2*c2.g + b3*c3.g + b4*c4.g; b = b1*c1.b + b2*c2.b + b3*c3.b + b4*c4.b; } template AGG_INLINE void to_pix(ColorT& c) const { typedef typename ColorT::value_type cv_type; c.r = (cv_type)uround(r); c.g = (cv_type)uround(g); c.b = (cv_type)uround(b); } }; //================================================recursive_blur_calc_gray template struct recursive_blur_calc_gray { typedef T value_type; typedef recursive_blur_calc_gray self_type; value_type v; template AGG_INLINE void from_pix(const ColorT& c) { v = c.v; } AGG_INLINE void calc(value_type b1, value_type b2, value_type b3, value_type b4, const self_type& c1, const self_type& c2, const self_type& c3, const self_type& c4) { v = b1*c1.v + b2*c2.v + b3*c3.v + b4*c4.v; } template AGG_INLINE void to_pix(ColorT& c) const { typedef typename ColorT::value_type cv_type; c.v = (cv_type)uround(v); } }; } #endif mapnik-3.0.9/deps/agg/include/agg_bounding_rect.h000066400000000000000000000070021262555547000217410ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // bounding_rect function template // //---------------------------------------------------------------------------- #ifndef AGG_BOUNDING_RECT_INCLUDED #define AGG_BOUNDING_RECT_INCLUDED #include "agg_basics.h" namespace agg { //-----------------------------------------------------------bounding_rect template bool bounding_rect(VertexSource& vs, GetId& gi, unsigned start, unsigned num, CoordT* x1, CoordT* y1, CoordT* x2, CoordT* y2) { unsigned i; double x; double y; bool first = true; *x1 = CoordT(1); *y1 = CoordT(1); *x2 = CoordT(0); *y2 = CoordT(0); for(i = 0; i < num; i++) { vs.rewind(gi[start + i]); unsigned cmd; while(!is_stop(cmd = vs.vertex(&x, &y))) { if(is_vertex(cmd)) { if(first) { *x1 = CoordT(x); *y1 = CoordT(y); *x2 = CoordT(x); *y2 = CoordT(y); first = false; } else { if(CoordT(x) < *x1) *x1 = CoordT(x); if(CoordT(y) < *y1) *y1 = CoordT(y); if(CoordT(x) > *x2) *x2 = CoordT(x); if(CoordT(y) > *y2) *y2 = CoordT(y); } } } } return *x1 <= *x2 && *y1 <= *y2; } //-----------------------------------------------------bounding_rect_single template bool bounding_rect_single(VertexSource& vs, unsigned path_id, CoordT* x1, CoordT* y1, CoordT* x2, CoordT* y2) { double x; double y; bool first = true; *x1 = CoordT(1); *y1 = CoordT(1); *x2 = CoordT(0); *y2 = CoordT(0); vs.rewind(path_id); unsigned cmd; while(!is_stop(cmd = vs.vertex(&x, &y))) { if(is_vertex(cmd)) { if(first) { *x1 = CoordT(x); *y1 = CoordT(y); *x2 = CoordT(x); *y2 = CoordT(y); first = false; } else { if(CoordT(x) < *x1) *x1 = CoordT(x); if(CoordT(y) < *y1) *y1 = CoordT(y); if(CoordT(x) > *x2) *x2 = CoordT(x); if(CoordT(y) > *y2) *y2 = CoordT(y); } } } return *x1 <= *x2 && *y1 <= *y2; } } #endif mapnik-3.0.9/deps/agg/include/agg_bspline.h000066400000000000000000000051201262555547000205520ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class bspline // //---------------------------------------------------------------------------- #ifndef AGG_BSPLINE_INCLUDED #define AGG_BSPLINE_INCLUDED #include "agg_array.h" namespace agg { //----------------------------------------------------------------bspline // A very simple class of Bi-cubic Spline interpolation. // First call init(num, x[], y[]) where num - number of source points, // x, y - arrays of X and Y values respectively. Here Y must be a function // of X. It means that all the X-coordinates must be arranged in the ascending // order. // Then call get(x) that calculates a value Y for the respective X. // The class supports extrapolation, i.e. you can call get(x) where x is // outside the given with init() X-range. Extrapolation is a simple linear // function. // // See Implementation agg_bspline.cpp //------------------------------------------------------------------------ class bspline { public: bspline(); bspline(int num); bspline(int num, const double* x, const double* y); void init(int num); void add_point(double x, double y); void prepare(); void init(int num, const double* x, const double* y); double get(double x) const; double get_stateful(double x) const; private: bspline(const bspline&); const bspline& operator = (const bspline&); static void bsearch(int n, const double *x, double x0, int *i); double extrapolation_left(double x) const; double extrapolation_right(double x) const; double interpolation(double x, int i) const; int m_max; int m_num; double* m_x; double* m_y; pod_array m_am; mutable int m_last_idx; }; } #endif mapnik-3.0.9/deps/agg/include/agg_clip_liang_barsky.h000066400000000000000000000224341262555547000226010ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Liang-Barsky clipping // //---------------------------------------------------------------------------- #ifndef AGG_CLIP_LIANG_BARSKY_INCLUDED #define AGG_CLIP_LIANG_BARSKY_INCLUDED #include "agg_basics.h" namespace agg { //------------------------------------------------------------------------ enum clipping_flags_e { clipping_flags_x1_clipped = 4, clipping_flags_x2_clipped = 1, clipping_flags_y1_clipped = 8, clipping_flags_y2_clipped = 2, clipping_flags_x_clipped = clipping_flags_x1_clipped | clipping_flags_x2_clipped, clipping_flags_y_clipped = clipping_flags_y1_clipped | clipping_flags_y2_clipped }; //----------------------------------------------------------clipping_flags // Determine the clipping code of the vertex according to the // Cyrus-Beck line clipping algorithm // // | | // 0110 | 0010 | 0011 // | | // -------+--------+-------- clip_box.y2 // | | // 0100 | 0000 | 0001 // | | // -------+--------+-------- clip_box.y1 // | | // 1100 | 1000 | 1001 // | | // clip_box.x1 clip_box.x2 // // template inline unsigned clipping_flags(T x, T y, const rect_base& clip_box) { return (x > clip_box.x2) | ((y > clip_box.y2) << 1) | ((x < clip_box.x1) << 2) | ((y < clip_box.y1) << 3); } //--------------------------------------------------------clipping_flags_x template inline unsigned clipping_flags_x(T x, const rect_base& clip_box) { return (x > clip_box.x2) | ((x < clip_box.x1) << 2); } //--------------------------------------------------------clipping_flags_y template inline unsigned clipping_flags_y(T y, const rect_base& clip_box) { return ((y > clip_box.y2) << 1) | ((y < clip_box.y1) << 3); } //-------------------------------------------------------clip_liang_barsky template inline unsigned clip_liang_barsky(T x1, T y1, T x2, T y2, const rect_base& clip_box, T* x, T* y) { const double nearzero = 1e-30; double deltax = x2 - x1; double deltay = y2 - y1; double xin; double xout; double yin; double yout; double tinx; double tiny; double toutx; double touty; double tin1; double tin2; double tout1; unsigned np = 0; if(deltax == 0.0) { // bump off of the vertical deltax = (x1 > clip_box.x1) ? -nearzero : nearzero; } if(deltay == 0.0) { // bump off of the horizontal deltay = (y1 > clip_box.y1) ? -nearzero : nearzero; } if(deltax > 0.0) { // points to right xin = clip_box.x1; xout = clip_box.x2; } else { xin = clip_box.x2; xout = clip_box.x1; } if(deltay > 0.0) { // points up yin = clip_box.y1; yout = clip_box.y2; } else { yin = clip_box.y2; yout = clip_box.y1; } tinx = (xin - x1) / deltax; tiny = (yin - y1) / deltay; if (tinx < tiny) { // hits x first tin1 = tinx; tin2 = tiny; } else { // hits y first tin1 = tiny; tin2 = tinx; } if(tin1 <= 1.0) { if(0.0 < tin1) { *x++ = (T)xin; *y++ = (T)yin; ++np; } if(tin2 <= 1.0) { toutx = (xout - x1) / deltax; touty = (yout - y1) / deltay; tout1 = (toutx < touty) ? toutx : touty; if(tin2 > 0.0 || tout1 > 0.0) { if(tin2 <= tout1) { if(tin2 > 0.0) { if(tinx > tiny) { *x++ = (T)xin; *y++ = (T)(y1 + tinx * deltay); } else { *x++ = (T)(x1 + tiny * deltax); *y++ = (T)yin; } ++np; } if(tout1 < 1.0) { if(toutx < touty) { *x++ = (T)xout; *y++ = (T)(y1 + toutx * deltay); } else { *x++ = (T)(x1 + touty * deltax); *y++ = (T)yout; } } else { *x++ = x2; *y++ = y2; } ++np; } else { if(tinx > tiny) { *x++ = (T)xin; *y++ = (T)yout; } else { *x++ = (T)xout; *y++ = (T)yin; } ++np; } } } } return np; } //---------------------------------------------------------------------------- template bool clip_move_point(T x1, T y1, T x2, T y2, const rect_base& clip_box, T* x, T* y, unsigned flags) { T bound; if(flags & clipping_flags_x_clipped) { if(x1 == x2) { return false; } bound = (flags & clipping_flags_x1_clipped) ? clip_box.x1 : clip_box.x2; *y = (T)(double(bound - x1) * (y2 - y1) / (x2 - x1) + y1); *x = bound; } flags = clipping_flags_y(*y, clip_box); if(flags & clipping_flags_y_clipped) { if(y1 == y2) { return false; } bound = (flags & clipping_flags_y1_clipped) ? clip_box.y1 : clip_box.y2; *x = (T)(double(bound - y1) * (x2 - x1) / (y2 - y1) + x1); *y = bound; } return true; } //-------------------------------------------------------clip_line_segment // Returns: ret >= 4 - Fully clipped // (ret & 1) != 0 - First point has been moved // (ret & 2) != 0 - Second point has been moved // template unsigned clip_line_segment(T* x1, T* y1, T* x2, T* y2, const rect_base& clip_box) { unsigned f1 = clipping_flags(*x1, *y1, clip_box); unsigned f2 = clipping_flags(*x2, *y2, clip_box); unsigned ret = 0; if((f2 | f1) == 0) { // Fully visible return 0; } if((f1 & clipping_flags_x_clipped) != 0 && (f1 & clipping_flags_x_clipped) == (f2 & clipping_flags_x_clipped)) { // Fully clipped return 4; } if((f1 & clipping_flags_y_clipped) != 0 && (f1 & clipping_flags_y_clipped) == (f2 & clipping_flags_y_clipped)) { // Fully clipped return 4; } T tx1 = *x1; T ty1 = *y1; T tx2 = *x2; T ty2 = *y2; if(f1) { if(!clip_move_point(tx1, ty1, tx2, ty2, clip_box, x1, y1, f1)) { return 4; } if(*x1 == *x2 && *y1 == *y2) { return 4; } ret |= 1; } if(f2) { if(!clip_move_point(tx1, ty1, tx2, ty2, clip_box, x2, y2, f2)) { return 4; } if(*x1 == *x2 && *y1 == *y2) { return 4; } ret |= 2; } return ret; } } #endif mapnik-3.0.9/deps/agg/include/agg_color_gray.h000066400000000000000000000727651262555547000213010ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- // // color types gray8, gray16 // //---------------------------------------------------------------------------- #ifndef AGG_COLOR_GRAY_INCLUDED #define AGG_COLOR_GRAY_INCLUDED #include "agg_basics.h" #include "agg_color_rgba.h" namespace agg { //===================================================================gray8 template struct gray8T { typedef int8u value_type; typedef int32u calc_type; typedef int32 long_type; enum base_scale_e { base_shift = 8, base_scale = 1 << base_shift, base_mask = base_scale - 1, base_MSB = 1 << (base_shift - 1) }; typedef gray8T self_type; value_type v; value_type a; static value_type luminance(const rgba& c) { // Calculate grayscale value as per ITU-R BT.709. return value_type(uround((0.2126 * c.r + 0.7152 * c.g + 0.0722 * c.b) * base_mask)); } static value_type luminance(const rgba8& c) { // Calculate grayscale value as per ITU-R BT.709. return value_type((55u * c.r + 184u * c.g + 18u * c.b) >> 8); } static void convert(gray8T& dst, const gray8T& src) { dst.v = sRGB_conv::rgb_from_sRGB(src.v); dst.a = src.a; } static void convert(gray8T& dst, const gray8T& src) { dst.v = sRGB_conv::rgb_to_sRGB(src.v); dst.a = src.a; } static void convert(gray8T& dst, const rgba8& src) { dst.v = luminance(src); dst.a = src.a; } static void convert(gray8T& dst, const srgba8& src) { // The RGB weights are only valid for linear values. convert(dst, rgba8(src)); } static void convert(gray8T& dst, const rgba8& src) { dst.v = sRGB_conv::rgb_to_sRGB(luminance(src)); dst.a = src.a; } static void convert(gray8T& dst, const srgba8& src) { // The RGB weights are only valid for linear values. convert(dst, rgba8(src)); } //-------------------------------------------------------------------- gray8T() {} //-------------------------------------------------------------------- gray8T(unsigned v_, unsigned a_=base_mask) : v(int8u(v_)), a(int8u(a_)) {} //-------------------------------------------------------------------- gray8T(const self_type& c, unsigned a_) : v(c.v), a(value_type(a_)) {} //-------------------------------------------------------------------- gray8T(const rgba& c) : v(luminance(c)), a(value_type(uround(c.a * base_mask))) {} //-------------------------------------------------------------------- template gray8T(const gray8T& c) { convert(*this, c); } //-------------------------------------------------------------------- template gray8T(const rgba8T& c) { convert(*this, c); } //-------------------------------------------------------------------- template T convert_from_sRGB() const { typename T::value_type y = sRGB_conv::rgb_from_sRGB(v); return T(y, y, y, sRGB_conv::alpha_from_sRGB(a)); } template T convert_to_sRGB() const { typename T::value_type y = sRGB_conv::rgb_to_sRGB(v); return T(y, y, y, sRGB_conv::alpha_to_sRGB(a)); } //-------------------------------------------------------------------- rgba8 make_rgba8(const linear&) const { return rgba8(v, v, v, a); } rgba8 make_rgba8(const sRGB&) const { return convert_from_sRGB(); } operator rgba8() const { return make_rgba8(Colorspace()); } //-------------------------------------------------------------------- srgba8 make_srgba8(const linear&) const { return convert_to_sRGB(); } srgba8 make_srgba8(const sRGB&) const { return srgba8(v, v, v, a); } operator srgba8() const { return make_rgba8(Colorspace()); } //-------------------------------------------------------------------- rgba16 make_rgba16(const linear&) const { rgba16::value_type rgb = (v << 8) | v; return rgba16(rgb, rgb, rgb, (a << 8) | a); } rgba16 make_rgba16(const sRGB&) const { return convert_from_sRGB(); } operator rgba16() const { return make_rgba16(Colorspace()); } //-------------------------------------------------------------------- rgba32 make_rgba32(const linear&) const { rgba32::value_type v32 = v / 255.0; return rgba32(v32, v32, v32, a / 255.0); } rgba32 make_rgba32(const sRGB&) const { return convert_from_sRGB(); } operator rgba32() const { return make_rgba32(Colorspace()); } //-------------------------------------------------------------------- static AGG_INLINE double to_double(value_type a) { return double(a) / base_mask; } //-------------------------------------------------------------------- static AGG_INLINE value_type from_double(double a) { return value_type(uround(a * base_mask)); } //-------------------------------------------------------------------- static AGG_INLINE value_type empty_value() { return 0; } //-------------------------------------------------------------------- static AGG_INLINE value_type full_value() { return base_mask; } //-------------------------------------------------------------------- AGG_INLINE bool is_transparent() const { return a == 0; } //-------------------------------------------------------------------- AGG_INLINE bool is_opaque() const { return a == base_mask; } //-------------------------------------------------------------------- // Fixed-point multiply, exact over int8u. static AGG_INLINE value_type multiply(value_type a, value_type b) { calc_type t = a * b + base_MSB; return value_type(((t >> base_shift) + t) >> base_shift); } //-------------------------------------------------------------------- static AGG_INLINE value_type demultiply(value_type a, value_type b) { if (a * b == 0) { return 0; } else if (a >= b) { return base_mask; } else return value_type((a * base_mask + (b >> 1)) / b); } //-------------------------------------------------------------------- template static AGG_INLINE T downscale(T a) { return a >> base_shift; } //-------------------------------------------------------------------- template static AGG_INLINE T downshift(T a, unsigned n) { return a >> n; } //-------------------------------------------------------------------- // Fixed-point multiply, exact over int8u. // Specifically for multiplying a color component by a cover. static AGG_INLINE value_type mult_cover(value_type a, value_type b) { return multiply(a, b); } //-------------------------------------------------------------------- static AGG_INLINE cover_type scale_cover(cover_type a, value_type b) { return multiply(b, a); } //-------------------------------------------------------------------- // Interpolate p to q by a, assuming q is premultiplied by a. static AGG_INLINE value_type prelerp(value_type p, value_type q, value_type a) { return p + q - multiply(p, a); } //-------------------------------------------------------------------- // Interpolate p to q by a. static AGG_INLINE value_type lerp(value_type p, value_type q, value_type a) { int t = (q - p) * a + base_MSB - (p > q); return value_type(p + (((t >> base_shift) + t) >> base_shift)); } //-------------------------------------------------------------------- self_type& clear() { v = a = 0; return *this; } //-------------------------------------------------------------------- self_type& transparent() { a = 0; return *this; } //-------------------------------------------------------------------- self_type& opacity(double a_) { if (a_ < 0) a = 0; else if (a_ > 1) a = 1; else a = (value_type)uround(a_ * double(base_mask)); return *this; } //-------------------------------------------------------------------- double opacity() const { return double(a) / double(base_mask); } //-------------------------------------------------------------------- self_type& premultiply() { if (a < base_mask) { if (a == 0) v = 0; else v = multiply(v, a); } return *this; } //-------------------------------------------------------------------- self_type& demultiply() { if (a < base_mask) { if (a == 0) { v = 0; } else { calc_type v_ = (calc_type(v) * base_mask) / a; v = value_type((v_ > base_mask) ? (value_type)base_mask : v_); } } return *this; } //-------------------------------------------------------------------- self_type gradient(self_type c, double k) const { self_type ret; calc_type ik = uround(k * base_scale); ret.v = lerp(v, c.v, ik); ret.a = lerp(a, c.a, ik); return ret; } //-------------------------------------------------------------------- AGG_INLINE void add(const self_type& c, unsigned cover) { calc_type cv, ca; if (cover == cover_mask) { if (c.a == base_mask) { *this = c; return; } else { cv = v + c.v; ca = a + c.a; } } else { cv = v + mult_cover(c.v, cover); ca = a + mult_cover(c.a, cover); } v = (value_type)((cv > calc_type(base_mask)) ? calc_type(base_mask) : cv); a = (value_type)((ca > calc_type(base_mask)) ? calc_type(base_mask) : ca); } //-------------------------------------------------------------------- static self_type no_color() { return self_type(0,0); } }; typedef gray8T gray8; typedef gray8T sgray8; //==================================================================gray16 struct gray16 { typedef int16u value_type; typedef int32u calc_type; typedef int64 long_type; enum base_scale_e { base_shift = 16, base_scale = 1 << base_shift, base_mask = base_scale - 1, base_MSB = 1 << (base_shift - 1) }; typedef gray16 self_type; value_type v; value_type a; static value_type luminance(const rgba& c) { // Calculate grayscale value as per ITU-R BT.709. return value_type(uround((0.2126 * c.r + 0.7152 * c.g + 0.0722 * c.b) * base_mask)); } static value_type luminance(const rgba16& c) { // Calculate grayscale value as per ITU-R BT.709. return value_type((13933u * c.r + 46872u * c.g + 4732u * c.b) >> 16); } static value_type luminance(const rgba8& c) { return luminance(rgba16(c)); } static value_type luminance(const srgba8& c) { return luminance(rgba16(c)); } static value_type luminance(const rgba32& c) { return luminance(rgba(c)); } //-------------------------------------------------------------------- gray16() {} //-------------------------------------------------------------------- gray16(unsigned v_, unsigned a_ = base_mask) : v(int16u(v_)), a(int16u(a_)) {} //-------------------------------------------------------------------- gray16(const self_type& c, unsigned a_) : v(c.v), a(value_type(a_)) {} //-------------------------------------------------------------------- gray16(const rgba& c) : v(luminance(c)), a((value_type)uround(c.a * double(base_mask))) {} //-------------------------------------------------------------------- gray16(const rgba8& c) : v(luminance(c)), a((value_type(c.a) << 8) | c.a) {} //-------------------------------------------------------------------- gray16(const srgba8& c) : v(luminance(c)), a((value_type(c.a) << 8) | c.a) {} //-------------------------------------------------------------------- gray16(const rgba16& c) : v(luminance(c)), a(c.a) {} //-------------------------------------------------------------------- gray16(const gray8& c) : v((value_type(c.v) << 8) | c.v), a((value_type(c.a) << 8) | c.a) {} //-------------------------------------------------------------------- gray16(const sgray8& c) : v(sRGB_conv::rgb_from_sRGB(c.v)), a(sRGB_conv::alpha_from_sRGB(c.a)) {} //-------------------------------------------------------------------- operator rgba8() const { return rgba8(v >> 8, v >> 8, v >> 8, a >> 8); } //-------------------------------------------------------------------- operator srgba8() const { value_type y = sRGB_conv::rgb_to_sRGB(v); return srgba8(y, y, y, sRGB_conv::alpha_to_sRGB(a)); } //-------------------------------------------------------------------- operator rgba16() const { return rgba16(v, v, v, a); } //-------------------------------------------------------------------- operator gray8() const { return gray8(v >> 8, a >> 8); } //-------------------------------------------------------------------- operator sgray8() const { return sgray8( sRGB_conv::rgb_to_sRGB(v), sRGB_conv::alpha_to_sRGB(a)); } //-------------------------------------------------------------------- static AGG_INLINE double to_double(value_type a) { return double(a) / base_mask; } //-------------------------------------------------------------------- static AGG_INLINE value_type from_double(double a) { return value_type(uround(a * base_mask)); } //-------------------------------------------------------------------- static AGG_INLINE value_type empty_value() { return 0; } //-------------------------------------------------------------------- static AGG_INLINE value_type full_value() { return base_mask; } //-------------------------------------------------------------------- AGG_INLINE bool is_transparent() const { return a == 0; } //-------------------------------------------------------------------- AGG_INLINE bool is_opaque() const { return a == base_mask; } //-------------------------------------------------------------------- // Fixed-point multiply, exact over int16u. static AGG_INLINE value_type multiply(value_type a, value_type b) { calc_type t = a * b + base_MSB; return value_type(((t >> base_shift) + t) >> base_shift); } //-------------------------------------------------------------------- static AGG_INLINE value_type demultiply(value_type a, value_type b) { if (a * b == 0) { return 0; } else if (a >= b) { return base_mask; } else return value_type((a * base_mask + (b >> 1)) / b); } //-------------------------------------------------------------------- template static AGG_INLINE T downscale(T a) { return a >> base_shift; } //-------------------------------------------------------------------- template static AGG_INLINE T downshift(T a, unsigned n) { return a >> n; } //-------------------------------------------------------------------- // Fixed-point multiply, almost exact over int16u. // Specifically for multiplying a color component by a cover. static AGG_INLINE value_type mult_cover(value_type a, cover_type b) { return multiply(a, b << 8 | b); } //-------------------------------------------------------------------- static AGG_INLINE cover_type scale_cover(cover_type a, value_type b) { return mult_cover(b, a) >> 8; } //-------------------------------------------------------------------- // Interpolate p to q by a, assuming q is premultiplied by a. static AGG_INLINE value_type prelerp(value_type p, value_type q, value_type a) { return p + q - multiply(p, a); } //-------------------------------------------------------------------- // Interpolate p to q by a. static AGG_INLINE value_type lerp(value_type p, value_type q, value_type a) { int t = (q - p) * a + base_MSB - (p > q); return value_type(p + (((t >> base_shift) + t) >> base_shift)); } //-------------------------------------------------------------------- self_type& clear() { v = a = 0; return *this; } //-------------------------------------------------------------------- self_type& transparent() { a = 0; return *this; } //-------------------------------------------------------------------- self_type& opacity(double a_) { if (a_ < 0) a = 0; else if(a_ > 1) a = 1; else a = (value_type)uround(a_ * double(base_mask)); return *this; } //-------------------------------------------------------------------- double opacity() const { return double(a) / double(base_mask); } //-------------------------------------------------------------------- self_type& premultiply() { if (a < base_mask) { if(a == 0) v = 0; else v = multiply(v, a); } return *this; } //-------------------------------------------------------------------- self_type& demultiply() { if (a < base_mask) { if (a == 0) { v = 0; } else { calc_type v_ = (calc_type(v) * base_mask) / a; v = value_type((v_ > base_mask) ? base_mask : v_); } } return *this; } //-------------------------------------------------------------------- self_type gradient(self_type c, double k) const { self_type ret; calc_type ik = uround(k * base_scale); ret.v = lerp(v, c.v, ik); ret.a = lerp(a, c.a, ik); return ret; } //-------------------------------------------------------------------- AGG_INLINE void add(const self_type& c, unsigned cover) { calc_type cv, ca; if (cover == cover_mask) { if (c.a == base_mask) { *this = c; return; } else { cv = v + c.v; ca = a + c.a; } } else { cv = v + mult_cover(c.v, cover); ca = a + mult_cover(c.a, cover); } v = (value_type)((cv > calc_type(base_mask)) ? calc_type(base_mask) : cv); a = (value_type)((ca > calc_type(base_mask)) ? calc_type(base_mask) : ca); } //-------------------------------------------------------------------- static self_type no_color() { return self_type(0,0); } }; //===================================================================gray32 struct gray32 { typedef float value_type; typedef double calc_type; typedef double long_type; typedef gray32 self_type; value_type v; value_type a; enum base_scale_e { base_shift = 8, base_scale = 1 << base_shift, base_mask = base_scale - 1, }; // Calculate grayscale value as per ITU-R BT.709. static value_type luminance(double r, double g, double b) { return value_type(0.2126 * r + 0.7152 * g + 0.0722 * b); } static value_type luminance(const rgba& c) { return luminance(c.r, c.g, c.b); } static value_type luminance(const rgba32& c) { return luminance(c.r, c.g, c.b); } static value_type luminance(const rgba8& c) { return luminance(c.r / 255.0, c.g / 255.0, c.g / 255.0); } static value_type luminance(const rgba16& c) { return luminance(c.r / 65535.0, c.g / 65535.0, c.g / 65535.0); } //-------------------------------------------------------------------- gray32() {} //-------------------------------------------------------------------- gray32(value_type v_, value_type a_ = 1) : v(v_), a(a_) {} //-------------------------------------------------------------------- gray32(const self_type& c, value_type a_) : v(c.v), a(a_) {} //-------------------------------------------------------------------- gray32(const rgba& c) : v(luminance(c)), a(value_type(c.a)) {} //-------------------------------------------------------------------- gray32(const rgba8& c) : v(luminance(c)), a(value_type(c.a / 255.0)) {} //-------------------------------------------------------------------- gray32(const srgba8& c) : v(luminance(rgba32(c))), a(value_type(c.a / 255.0)) {} //-------------------------------------------------------------------- gray32(const rgba16& c) : v(luminance(c)), a(value_type(c.a / 65535.0)) {} //-------------------------------------------------------------------- gray32(const rgba32& c) : v(luminance(c)), a(value_type(c.a)) {} //-------------------------------------------------------------------- gray32(const gray8& c) : v(value_type(c.v / 255.0)), a(value_type(c.a / 255.0)) {} //-------------------------------------------------------------------- gray32(const sgray8& c) : v(sRGB_conv::rgb_from_sRGB(c.v)), a(sRGB_conv::alpha_from_sRGB(c.a)) {} //-------------------------------------------------------------------- gray32(const gray16& c) : v(value_type(c.v / 65535.0)), a(value_type(c.a / 65535.0)) {} //-------------------------------------------------------------------- operator rgba() const { return rgba(v, v, v, a); } //-------------------------------------------------------------------- operator gray8() const { return gray8(uround(v * 255.0), uround(a * 255.0)); } //-------------------------------------------------------------------- operator sgray8() const { // Return (non-premultiplied) sRGB values. return sgray8( sRGB_conv::rgb_to_sRGB(v), sRGB_conv::alpha_to_sRGB(a)); } //-------------------------------------------------------------------- operator gray16() const { return gray16(uround(v * 65535.0), uround(a * 65535.0)); } //-------------------------------------------------------------------- operator rgba8() const { rgba8::value_type y = uround(v * 255.0); return rgba8(y, y, y, uround(a * 255.0)); } //-------------------------------------------------------------------- operator srgba8() const { srgba8::value_type y = sRGB_conv::rgb_to_sRGB(v); return srgba8(y, y, y, sRGB_conv::alpha_to_sRGB(a)); } //-------------------------------------------------------------------- operator rgba16() const { rgba16::value_type y = uround(v * 65535.0); return rgba16(y, y, y, uround(a * 65535.0)); } //-------------------------------------------------------------------- static AGG_INLINE double to_double(value_type a) { return a; } //-------------------------------------------------------------------- static AGG_INLINE value_type from_double(double a) { return value_type(a); } //-------------------------------------------------------------------- static AGG_INLINE value_type empty_value() { return 0; } //-------------------------------------------------------------------- static AGG_INLINE value_type full_value() { return 1; } //-------------------------------------------------------------------- AGG_INLINE bool is_transparent() const { return a <= 0; } //-------------------------------------------------------------------- AGG_INLINE bool is_opaque() const { return a >= 1; } //-------------------------------------------------------------------- static AGG_INLINE value_type invert(value_type x) { return 1 - x; } //-------------------------------------------------------------------- static AGG_INLINE value_type multiply(value_type a, value_type b) { return value_type(a * b); } //-------------------------------------------------------------------- static AGG_INLINE value_type demultiply(value_type a, value_type b) { return (b == 0) ? 0 : value_type(a / b); } //-------------------------------------------------------------------- template static AGG_INLINE T downscale(T a) { return a; } //-------------------------------------------------------------------- template static AGG_INLINE T downshift(T a, unsigned n) { return n > 0 ? a / (1 << n) : a; } //-------------------------------------------------------------------- static AGG_INLINE value_type mult_cover(value_type a, cover_type b) { return value_type(a * b / cover_mask); } //-------------------------------------------------------------------- static AGG_INLINE cover_type scale_cover(cover_type a, value_type b) { return cover_type(uround(a * b)); } //-------------------------------------------------------------------- // Interpolate p to q by a, assuming q is premultiplied by a. static AGG_INLINE value_type prelerp(value_type p, value_type q, value_type a) { return (1 - a) * p + q; // more accurate than "p + q - p * a" } //-------------------------------------------------------------------- // Interpolate p to q by a. static AGG_INLINE value_type lerp(value_type p, value_type q, value_type a) { // The form "p + a * (q - p)" avoids a multiplication, but may produce an // inaccurate result. For example, "p + (q - p)" may not be exactly equal // to q. Therefore, stick to the basic expression, which at least produces // the correct result at either extreme. return (1 - a) * p + a * q; } //-------------------------------------------------------------------- self_type& clear() { v = a = 0; return *this; } //-------------------------------------------------------------------- self_type& transparent() { a = 0; return *this; } //-------------------------------------------------------------------- self_type& opacity(double a_) { if (a_ < 0) a = 0; else if (a_ > 1) a = 1; else a = value_type(a_); return *this; } //-------------------------------------------------------------------- double opacity() const { return a; } //-------------------------------------------------------------------- self_type& premultiply() { if (a < 0) v = 0; else if(a < 1) v *= a; return *this; } //-------------------------------------------------------------------- self_type& demultiply() { if (a < 0) v = 0; else if (a < 1) v /= a; return *this; } //-------------------------------------------------------------------- self_type gradient(self_type c, double k) const { return self_type( value_type(v + (c.v - v) * k), value_type(a + (c.a - a) * k)); } //-------------------------------------------------------------------- static self_type no_color() { return self_type(0,0); } }; } #endif mapnik-3.0.9/deps/agg/include/agg_color_rgba.h000066400000000000000000001170031262555547000212330ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_COLOR_RGBA_INCLUDED #define AGG_COLOR_RGBA_INCLUDED #include #include "agg_basics.h" #include "agg_gamma_lut.h" namespace agg { // Supported byte orders for RGB and RGBA pixel formats //======================================================================= struct order_rgb { enum rgb_e { R=0, G=1, B=2, rgb_tag, hasAlpha=false }; }; //----order_rgb struct order_bgr { enum bgr_e { B=0, G=1, R=2, rgb_tag, hasAlpha=false }; }; //----order_bgr struct order_rgba { enum rgba_e { R=0, G=1, B=2, A=3, rgba_tag, hasAlpha=true }; }; //----order_rgba struct order_argb { enum argb_e { A=0, R=1, G=2, B=3, rgba_tag, hasAlpha=true }; }; //----order_argb struct order_abgr { enum abgr_e { A=0, B=1, G=2, R=3, rgba_tag, hasAlpha=true }; }; //----order_abgr struct order_bgra { enum bgra_e { B=0, G=1, R=2, A=3, rgba_tag, hasAlpha=true }; }; //----order_bgra // Colorspace tag types. struct linear {}; struct sRGB {}; //====================================================================rgba struct rgba { typedef double value_type; double r; double g; double b; double a; //-------------------------------------------------------------------- rgba() {} //-------------------------------------------------------------------- rgba(double r_, double g_, double b_, double a_=1.0) : r(r_), g(g_), b(b_), a(a_) {} //-------------------------------------------------------------------- rgba(const rgba& c, double a_) : r(c.r), g(c.g), b(c.b), a(a_) {} //-------------------------------------------------------------------- rgba& clear() { r = g = b = a = 0; return *this; } //-------------------------------------------------------------------- rgba& transparent() { a = 0; return *this; } //-------------------------------------------------------------------- rgba& opacity(double a_) { if (a_ < 0) a = 0; else if (a_ > 1) a = 1; else a = a_; return *this; } //-------------------------------------------------------------------- double opacity() const { return a; } //-------------------------------------------------------------------- rgba& premultiply() { r *= a; g *= a; b *= a; return *this; } //-------------------------------------------------------------------- rgba& premultiply(double a_) { if (a <= 0 || a_ <= 0) { r = g = b = a = 0; } else { a_ /= a; r *= a_; g *= a_; b *= a_; a = a_; } return *this; } //-------------------------------------------------------------------- rgba& demultiply() { if (a == 0) { r = g = b = 0; } else { double a_ = 1.0 / a; r *= a_; g *= a_; b *= a_; } return *this; } //-------------------------------------------------------------------- rgba gradient(rgba c, double k) const { rgba ret; ret.r = r + (c.r - r) * k; ret.g = g + (c.g - g) * k; ret.b = b + (c.b - b) * k; ret.a = a + (c.a - a) * k; return ret; } rgba& operator+=(const rgba& c) { r += c.r; g += c.g; b += c.b; a += c.a; return *this; } rgba& operator*=(double k) { r *= k; g *= k; b *= k; a *= k; return *this; } //-------------------------------------------------------------------- static rgba no_color() { return rgba(0,0,0,0); } //-------------------------------------------------------------------- static rgba from_wavelength(double wl, double gamma = 1.0); //-------------------------------------------------------------------- explicit rgba(double wavelen, double gamma=1.0) { *this = from_wavelength(wavelen, gamma); } }; inline rgba operator+(const rgba& a, const rgba& b) { return rgba(a) += b; } inline rgba operator*(const rgba& a, double b) { return rgba(a) *= b; } //------------------------------------------------------------------------ inline rgba rgba::from_wavelength(double wl, double gamma) { rgba t(0.0, 0.0, 0.0); if (wl >= 380.0 && wl <= 440.0) { t.r = -1.0 * (wl - 440.0) / (440.0 - 380.0); t.b = 1.0; } else if (wl >= 440.0 && wl <= 490.0) { t.g = (wl - 440.0) / (490.0 - 440.0); t.b = 1.0; } else if (wl >= 490.0 && wl <= 510.0) { t.g = 1.0; t.b = -1.0 * (wl - 510.0) / (510.0 - 490.0); } else if (wl >= 510.0 && wl <= 580.0) { t.r = (wl - 510.0) / (580.0 - 510.0); t.g = 1.0; } else if (wl >= 580.0 && wl <= 645.0) { t.r = 1.0; t.g = -1.0 * (wl - 645.0) / (645.0 - 580.0); } else if (wl >= 645.0 && wl <= 780.0) { t.r = 1.0; } double s = 1.0; if (wl > 700.0) s = 0.3 + 0.7 * (780.0 - wl) / (780.0 - 700.0); else if (wl < 420.0) s = 0.3 + 0.7 * (wl - 380.0) / (420.0 - 380.0); t.r = pow(t.r * s, gamma); t.g = pow(t.g * s, gamma); t.b = pow(t.b * s, gamma); return t; } inline rgba rgba_pre(double r, double g, double b, double a) { return rgba(r, g, b, a).premultiply(); } //===================================================================rgba8 template struct rgba8T { typedef int8u value_type; typedef int32u calc_type; typedef int32 long_type; enum base_scale_e { base_shift = 8, base_scale = 1 << base_shift, base_mask = base_scale - 1, base_MSB = 1 << (base_shift - 1) }; typedef rgba8T self_type; value_type r; value_type g; value_type b; value_type a; static void convert(rgba8T& dst, const rgba8T& src) { dst.r = sRGB_conv::rgb_from_sRGB(src.r); dst.g = sRGB_conv::rgb_from_sRGB(src.g); dst.b = sRGB_conv::rgb_from_sRGB(src.b); dst.a = src.a; } static void convert(rgba8T& dst, const rgba8T& src) { dst.r = sRGB_conv::rgb_to_sRGB(src.r); dst.g = sRGB_conv::rgb_to_sRGB(src.g); dst.b = sRGB_conv::rgb_to_sRGB(src.b); dst.a = src.a; } static void convert(rgba8T& dst, const rgba& src) { dst.r = value_type(uround(src.r * base_mask)); dst.g = value_type(uround(src.g * base_mask)); dst.b = value_type(uround(src.b * base_mask)); dst.a = value_type(uround(src.a * base_mask)); } static void convert(rgba8T& dst, const rgba& src) { // Use the "float" table. dst.r = sRGB_conv::rgb_to_sRGB(float(src.r)); dst.g = sRGB_conv::rgb_to_sRGB(float(src.g)); dst.b = sRGB_conv::rgb_to_sRGB(float(src.b)); dst.a = sRGB_conv::alpha_to_sRGB(float(src.a)); } static void convert(rgba& dst, const rgba8T& src) { dst.r = src.r / 255.0; dst.g = src.g / 255.0; dst.b = src.b / 255.0; dst.a = src.a / 255.0; } static void convert(rgba& dst, const rgba8T& src) { // Use the "float" table. dst.r = sRGB_conv::rgb_from_sRGB(src.r); dst.g = sRGB_conv::rgb_from_sRGB(src.g); dst.b = sRGB_conv::rgb_from_sRGB(src.b); dst.a = sRGB_conv::alpha_from_sRGB(src.a); } //-------------------------------------------------------------------- rgba8T() {} //-------------------------------------------------------------------- rgba8T(unsigned r_, unsigned g_, unsigned b_, unsigned a_ = base_mask) : r(value_type(r_)), g(value_type(g_)), b(value_type(b_)), a(value_type(a_)) {} //-------------------------------------------------------------------- rgba8T(const rgba& c) { convert(*this, c); } //-------------------------------------------------------------------- rgba8T(const self_type& c, unsigned a_) : r(c.r), g(c.g), b(c.b), a(value_type(a_)) {} //-------------------------------------------------------------------- template rgba8T(const rgba8T& c) { convert(*this, c); } //-------------------------------------------------------------------- operator rgba() const { rgba c; convert(c, *this); return c; } //-------------------------------------------------------------------- static AGG_INLINE double to_double(value_type a) { return double(a) / base_mask; } //-------------------------------------------------------------------- static AGG_INLINE value_type from_double(double a) { return value_type(uround(a * base_mask)); } //-------------------------------------------------------------------- static AGG_INLINE value_type empty_value() { return 0; } //-------------------------------------------------------------------- static AGG_INLINE value_type full_value() { return base_mask; } //-------------------------------------------------------------------- AGG_INLINE bool is_transparent() const { return a == 0; } //-------------------------------------------------------------------- AGG_INLINE bool is_opaque() const { return a == base_mask; } //-------------------------------------------------------------------- static AGG_INLINE value_type invert(value_type x) { return base_mask - x; } //-------------------------------------------------------------------- // Fixed-point multiply, exact over int8u. static AGG_INLINE value_type multiply(value_type a, value_type b) { calc_type t = a * b + base_MSB; return value_type(((t >> base_shift) + t) >> base_shift); } //-------------------------------------------------------------------- static AGG_INLINE value_type demultiply(value_type a, value_type b) { if (a * b == 0) { return 0; } else if (a >= b) { return base_mask; } else return value_type((a * base_mask + (b >> 1)) / b); } //-------------------------------------------------------------------- template static AGG_INLINE T downscale(T a) { return a >> base_shift; } //-------------------------------------------------------------------- template static AGG_INLINE T downshift(T a, unsigned n) { return a >> n; } //-------------------------------------------------------------------- // Fixed-point multiply, exact over int8u. // Specifically for multiplying a color component by a cover. static AGG_INLINE value_type mult_cover(value_type a, cover_type b) { return multiply(a, b); } //-------------------------------------------------------------------- static AGG_INLINE cover_type scale_cover(cover_type a, value_type b) { return multiply(b, a); } //-------------------------------------------------------------------- // Interpolate p to q by a, assuming q is premultiplied by a. static AGG_INLINE value_type prelerp(value_type p, value_type q, value_type a) { return p + q - multiply(p, a); } //-------------------------------------------------------------------- // Interpolate p to q by a. static AGG_INLINE value_type lerp(value_type p, value_type q, value_type a) { int t = (q - p) * a + base_MSB - (p > q); return value_type(p + (((t >> base_shift) + t) >> base_shift)); } //-------------------------------------------------------------------- self_type& clear() { r = g = b = a = 0; return *this; } //-------------------------------------------------------------------- self_type& transparent() { a = 0; return *this; } //-------------------------------------------------------------------- self_type& opacity(double a_) { if (a_ < 0) a = 0; else if (a_ > 1) a = 1; else a = (value_type)uround(a_ * double(base_mask)); return *this; } //-------------------------------------------------------------------- double opacity() const { return double(a) / double(base_mask); } //-------------------------------------------------------------------- AGG_INLINE self_type& premultiply() { if (a != base_mask) { r = multiply(r, a); g = multiply(g, a); b = multiply(b, a); } return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type& premultiply(unsigned a_) { if (a != base_mask || a_ < base_mask) { if (a == 0 || a_ == 0) { r = g = b = a = 0; } else { calc_type r_ = (calc_type(r) * a_) / a; calc_type g_ = (calc_type(g) * a_) / a; calc_type b_ = (calc_type(b) * a_) / a; r = value_type((r_ > a_) ? a_ : r_); g = value_type((g_ > a_) ? a_ : g_); b = value_type((b_ > a_) ? a_ : b_); a = value_type(a_); } } return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type& demultiply() { if (a < base_mask) { if (a == 0) { r = g = b = 0; } else { calc_type r_ = (calc_type(r) * base_mask) / a; calc_type g_ = (calc_type(g) * base_mask) / a; calc_type b_ = (calc_type(b) * base_mask) / a; r = value_type((r_ > calc_type(base_mask)) ? calc_type(base_mask) : r_); g = value_type((g_ > calc_type(base_mask)) ? calc_type(base_mask) : g_); b = value_type((b_ > calc_type(base_mask)) ? calc_type(base_mask) : b_); } } return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type gradient(const self_type& c, double k) const { self_type ret; calc_type ik = uround(k * base_mask); ret.r = lerp(r, c.r, ik); ret.g = lerp(g, c.g, ik); ret.b = lerp(b, c.b, ik); ret.a = lerp(a, c.a, ik); return ret; } //-------------------------------------------------------------------- AGG_INLINE void add(const self_type& c, unsigned cover) { calc_type cr, cg, cb, ca; if (cover == cover_mask) { if (c.a == base_mask) { *this = c; return; } else { cr = r + c.r; cg = g + c.g; cb = b + c.b; ca = a + c.a; } } else { cr = r + mult_cover(c.r, cover); cg = g + mult_cover(c.g, cover); cb = b + mult_cover(c.b, cover); ca = a + mult_cover(c.a, cover); } r = (value_type)((cr > calc_type(base_mask)) ? calc_type(base_mask) : cr); g = (value_type)((cg > calc_type(base_mask)) ? calc_type(base_mask) : cg); b = (value_type)((cb > calc_type(base_mask)) ? calc_type(base_mask) : cb); a = (value_type)((ca > calc_type(base_mask)) ? calc_type(base_mask) : ca); } //-------------------------------------------------------------------- template AGG_INLINE void apply_gamma_dir(const GammaLUT& gamma) { r = gamma.dir(r); g = gamma.dir(g); b = gamma.dir(b); } //-------------------------------------------------------------------- template AGG_INLINE void apply_gamma_inv(const GammaLUT& gamma) { r = gamma.inv(r); g = gamma.inv(g); b = gamma.inv(b); } //-------------------------------------------------------------------- static self_type no_color() { return self_type(0,0,0,0); } //-------------------------------------------------------------------- static self_type from_wavelength(double wl, double gamma = 1.0) { return self_type(rgba::from_wavelength(wl, gamma)); } }; typedef rgba8T rgba8; typedef rgba8T srgba8; //-------------------------------------------------------------rgba8_pre inline rgba8 rgba8_pre(unsigned r, unsigned g, unsigned b, unsigned a = rgba8::base_mask) { return rgba8(r,g,b,a).premultiply(); } inline rgba8 rgba8_pre(const rgba8& c) { return rgba8(c).premultiply(); } inline rgba8 rgba8_pre(const rgba8& c, unsigned a) { return rgba8(c,a).premultiply(); } inline rgba8 rgba8_pre(const rgba& c) { return rgba8(c).premultiply(); } inline rgba8 rgba8_pre(const rgba& c, double a) { return rgba8(c,a).premultiply(); } //-------------------------------------------------------------rgb8_packed inline rgba8 rgb8_packed(unsigned v) { return rgba8((v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF); } //-------------------------------------------------------------bgr8_packed inline rgba8 bgr8_packed(unsigned v) { return rgba8(v & 0xFF, (v >> 8) & 0xFF, (v >> 16) & 0xFF); } //------------------------------------------------------------argb8_packed inline rgba8 argb8_packed(unsigned v) { return rgba8((v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF, v >> 24); } //---------------------------------------------------------rgba8_gamma_dir template rgba8 rgba8_gamma_dir(rgba8 c, const GammaLUT& gamma) { return rgba8(gamma.dir(c.r), gamma.dir(c.g), gamma.dir(c.b), c.a); } //---------------------------------------------------------rgba8_gamma_inv template rgba8 rgba8_gamma_inv(rgba8 c, const GammaLUT& gamma) { return rgba8(gamma.inv(c.r), gamma.inv(c.g), gamma.inv(c.b), c.a); } //==================================================================rgba16 struct rgba16 { typedef int16u value_type; typedef int32u calc_type; typedef int64 long_type; enum base_scale_e { base_shift = 16, base_scale = 1 << base_shift, base_mask = base_scale - 1, base_MSB = 1 << (base_shift - 1) }; typedef rgba16 self_type; value_type r; value_type g; value_type b; value_type a; //-------------------------------------------------------------------- rgba16() {} //-------------------------------------------------------------------- rgba16(unsigned r_, unsigned g_, unsigned b_, unsigned a_=base_mask) : r(value_type(r_)), g(value_type(g_)), b(value_type(b_)), a(value_type(a_)) {} //-------------------------------------------------------------------- rgba16(const self_type& c, unsigned a_) : r(c.r), g(c.g), b(c.b), a(value_type(a_)) {} //-------------------------------------------------------------------- rgba16(const rgba& c) : r((value_type)uround(c.r * double(base_mask))), g((value_type)uround(c.g * double(base_mask))), b((value_type)uround(c.b * double(base_mask))), a((value_type)uround(c.a * double(base_mask))) {} //-------------------------------------------------------------------- rgba16(const rgba8& c) : r(value_type((value_type(c.r) << 8) | c.r)), g(value_type((value_type(c.g) << 8) | c.g)), b(value_type((value_type(c.b) << 8) | c.b)), a(value_type((value_type(c.a) << 8) | c.a)) {} //-------------------------------------------------------------------- rgba16(const srgba8& c) : r(sRGB_conv::rgb_from_sRGB(c.r)), g(sRGB_conv::rgb_from_sRGB(c.g)), b(sRGB_conv::rgb_from_sRGB(c.b)), a(sRGB_conv::alpha_from_sRGB(c.a)) {} //-------------------------------------------------------------------- operator rgba() const { return rgba( r / 65535.0, g / 65535.0, b / 65535.0, a / 65535.0); } //-------------------------------------------------------------------- operator rgba8() const { return rgba8(r >> 8, g >> 8, b >> 8, a >> 8); } //-------------------------------------------------------------------- operator srgba8() const { // Return (non-premultiplied) sRGB values. return srgba8( sRGB_conv::rgb_to_sRGB(r), sRGB_conv::rgb_to_sRGB(g), sRGB_conv::rgb_to_sRGB(b), sRGB_conv::alpha_to_sRGB(a)); } //-------------------------------------------------------------------- static AGG_INLINE double to_double(value_type a) { return double(a) / base_mask; } //-------------------------------------------------------------------- static AGG_INLINE value_type from_double(double a) { return value_type(uround(a * base_mask)); } //-------------------------------------------------------------------- static AGG_INLINE value_type empty_value() { return 0; } //-------------------------------------------------------------------- static AGG_INLINE value_type full_value() { return base_mask; } //-------------------------------------------------------------------- AGG_INLINE bool is_transparent() const { return a == 0; } //-------------------------------------------------------------------- AGG_INLINE bool is_opaque() const { return a == base_mask; } //-------------------------------------------------------------------- static AGG_INLINE value_type invert(value_type x) { return base_mask - x; } //-------------------------------------------------------------------- // Fixed-point multiply, exact over int16u. static AGG_INLINE value_type multiply(value_type a, value_type b) { calc_type t = a * b + base_MSB; return value_type(((t >> base_shift) + t) >> base_shift); } //-------------------------------------------------------------------- static AGG_INLINE value_type demultiply(value_type a, value_type b) { if (a * b == 0) { return 0; } else if (a >= b) { return base_mask; } else return value_type((a * base_mask + (b >> 1)) / b); } //-------------------------------------------------------------------- template static AGG_INLINE T downscale(T a) { return a >> base_shift; } //-------------------------------------------------------------------- template static AGG_INLINE T downshift(T a, unsigned n) { return a >> n; } //-------------------------------------------------------------------- // Fixed-point multiply, almost exact over int16u. // Specifically for multiplying a color component by a cover. static AGG_INLINE value_type mult_cover(value_type a, cover_type b) { return multiply(a, (b << 8) | b); } //-------------------------------------------------------------------- static AGG_INLINE cover_type scale_cover(cover_type a, value_type b) { return multiply((a << 8) | a, b) >> 8; } //-------------------------------------------------------------------- // Interpolate p to q by a, assuming q is premultiplied by a. static AGG_INLINE value_type prelerp(value_type p, value_type q, value_type a) { return p + q - multiply(p, a); } //-------------------------------------------------------------------- // Interpolate p to q by a. static AGG_INLINE value_type lerp(value_type p, value_type q, value_type a) { int t = (q - p) * a + base_MSB - (p > q); return value_type(p + (((t >> base_shift) + t) >> base_shift)); } //-------------------------------------------------------------------- self_type& clear() { r = g = b = a = 0; return *this; } //-------------------------------------------------------------------- self_type& transparent() { a = 0; return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type& opacity(double a_) { if (a_ < 0) a = 0; if (a_ > 1) a = 1; a = value_type(uround(a_ * double(base_mask))); return *this; } //-------------------------------------------------------------------- double opacity() const { return double(a) / double(base_mask); } //-------------------------------------------------------------------- AGG_INLINE self_type& premultiply() { if (a != base_mask) { r = multiply(r, a); g = multiply(g, a); b = multiply(b, a); } return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type& premultiply(unsigned a_) { if (a < base_mask || a_ < base_mask) { if (a == 0 || a_ == 0) { r = g = b = a = 0; } else { calc_type r_ = (calc_type(r) * a_) / a; calc_type g_ = (calc_type(g) * a_) / a; calc_type b_ = (calc_type(b) * a_) / a; r = value_type((r_ > a_) ? a_ : r_); g = value_type((g_ > a_) ? a_ : g_); b = value_type((b_ > a_) ? a_ : b_); a = value_type(a_); } } return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type& demultiply() { if (a < base_mask) { if (a == 0) { r = g = b = 0; } else { calc_type r_ = (calc_type(r) * base_mask) / a; calc_type g_ = (calc_type(g) * base_mask) / a; calc_type b_ = (calc_type(b) * base_mask) / a; r = value_type((r_ > calc_type(base_mask)) ? calc_type(base_mask) : r_); g = value_type((g_ > calc_type(base_mask)) ? calc_type(base_mask) : g_); b = value_type((b_ > calc_type(base_mask)) ? calc_type(base_mask) : b_); } } return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type gradient(const self_type& c, double k) const { self_type ret; calc_type ik = uround(k * base_mask); ret.r = lerp(r, c.r, ik); ret.g = lerp(g, c.g, ik); ret.b = lerp(b, c.b, ik); ret.a = lerp(a, c.a, ik); return ret; } //-------------------------------------------------------------------- AGG_INLINE void add(const self_type& c, unsigned cover) { calc_type cr, cg, cb, ca; if (cover == cover_mask) { if (c.a == base_mask) { *this = c; return; } else { cr = r + c.r; cg = g + c.g; cb = b + c.b; ca = a + c.a; } } else { cr = r + mult_cover(c.r, cover); cg = g + mult_cover(c.g, cover); cb = b + mult_cover(c.b, cover); ca = a + mult_cover(c.a, cover); } r = (value_type)((cr > calc_type(base_mask)) ? calc_type(base_mask) : cr); g = (value_type)((cg > calc_type(base_mask)) ? calc_type(base_mask) : cg); b = (value_type)((cb > calc_type(base_mask)) ? calc_type(base_mask) : cb); a = (value_type)((ca > calc_type(base_mask)) ? calc_type(base_mask) : ca); } //-------------------------------------------------------------------- template AGG_INLINE void apply_gamma_dir(const GammaLUT& gamma) { r = gamma.dir(r); g = gamma.dir(g); b = gamma.dir(b); } //-------------------------------------------------------------------- template AGG_INLINE void apply_gamma_inv(const GammaLUT& gamma) { r = gamma.inv(r); g = gamma.inv(g); b = gamma.inv(b); } //-------------------------------------------------------------------- static self_type no_color() { return self_type(0,0,0,0); } //-------------------------------------------------------------------- static self_type from_wavelength(double wl, double gamma = 1.0) { return self_type(rgba::from_wavelength(wl, gamma)); } }; //------------------------------------------------------rgba16_gamma_dir template rgba16 rgba16_gamma_dir(rgba16 c, const GammaLUT& gamma) { return rgba16(gamma.dir(c.r), gamma.dir(c.g), gamma.dir(c.b), c.a); } //------------------------------------------------------rgba16_gamma_inv template rgba16 rgba16_gamma_inv(rgba16 c, const GammaLUT& gamma) { return rgba16(gamma.inv(c.r), gamma.inv(c.g), gamma.inv(c.b), c.a); } //====================================================================rgba32 struct rgba32 { typedef float value_type; typedef double calc_type; typedef double long_type; typedef rgba32 self_type; value_type r; value_type g; value_type b; value_type a; //-------------------------------------------------------------------- rgba32() {} //-------------------------------------------------------------------- rgba32(value_type r_, value_type g_, value_type b_, value_type a_= 1) : r(r_), g(g_), b(b_), a(a_) {} //-------------------------------------------------------------------- rgba32(const self_type& c, float a_) : r(c.r), g(c.g), b(c.b), a(a_) {} //-------------------------------------------------------------------- rgba32(const rgba& c) : r(value_type(c.r)), g(value_type(c.g)), b(value_type(c.b)), a(value_type(c.a)) {} //-------------------------------------------------------------------- rgba32(const rgba8& c) : r(value_type(c.r / 255.0)), g(value_type(c.g / 255.0)), b(value_type(c.b / 255.0)), a(value_type(c.a / 255.0)) {} //-------------------------------------------------------------------- rgba32(const srgba8& c) : r(sRGB_conv::rgb_from_sRGB(c.r)), g(sRGB_conv::rgb_from_sRGB(c.g)), b(sRGB_conv::rgb_from_sRGB(c.b)), a(sRGB_conv::alpha_from_sRGB(c.a)) {} //-------------------------------------------------------------------- rgba32(const rgba16& c) : r(value_type(c.r / 65535.0)), g(value_type(c.g / 65535.0)), b(value_type(c.b / 65535.0)), a(value_type(c.a / 65535.0)) {} //-------------------------------------------------------------------- operator rgba() const { return rgba(r, g, b, a); } //-------------------------------------------------------------------- operator rgba8() const { return rgba8( uround(r * 255.0), uround(g * 255.0), uround(b * 255.0), uround(a * 255.0)); } //-------------------------------------------------------------------- operator srgba8() const { return srgba8( sRGB_conv::rgb_to_sRGB(r), sRGB_conv::rgb_to_sRGB(g), sRGB_conv::rgb_to_sRGB(b), sRGB_conv::alpha_to_sRGB(a)); } //-------------------------------------------------------------------- operator rgba16() const { return rgba8( uround(r * 65535.0), uround(g * 65535.0), uround(b * 65535.0), uround(a * 65535.0)); } //-------------------------------------------------------------------- static AGG_INLINE double to_double(value_type a) { return a; } //-------------------------------------------------------------------- static AGG_INLINE value_type from_double(double a) { return value_type(a); } //-------------------------------------------------------------------- static AGG_INLINE value_type empty_value() { return 0; } //-------------------------------------------------------------------- static AGG_INLINE value_type full_value() { return 1; } //-------------------------------------------------------------------- AGG_INLINE bool is_transparent() const { return a <= 0; } //-------------------------------------------------------------------- AGG_INLINE bool is_opaque() const { return a >= 1; } //-------------------------------------------------------------------- static AGG_INLINE value_type invert(value_type x) { return 1 - x; } //-------------------------------------------------------------------- static AGG_INLINE value_type multiply(value_type a, value_type b) { return value_type(a * b); } //-------------------------------------------------------------------- static AGG_INLINE value_type demultiply(value_type a, value_type b) { return (b == 0) ? 0 : value_type(a / b); } //-------------------------------------------------------------------- template static AGG_INLINE T downscale(T a) { return a; } //-------------------------------------------------------------------- template static AGG_INLINE T downshift(T a, unsigned n) { return n > 0 ? a / (1 << n) : a; } //-------------------------------------------------------------------- static AGG_INLINE value_type mult_cover(value_type a, cover_type b) { return value_type(a * b / cover_mask); } //-------------------------------------------------------------------- static AGG_INLINE cover_type scale_cover(cover_type a, value_type b) { return cover_type(uround(a * b)); } //-------------------------------------------------------------------- // Interpolate p to q by a, assuming q is premultiplied by a. static AGG_INLINE value_type prelerp(value_type p, value_type q, value_type a) { return (1 - a) * p + q; // more accurate than "p + q - p * a" } //-------------------------------------------------------------------- // Interpolate p to q by a. static AGG_INLINE value_type lerp(value_type p, value_type q, value_type a) { // The form "p + a * (q - p)" avoids a multiplication, but may produce an // inaccurate result. For example, "p + (q - p)" may not be exactly equal // to q. Therefore, stick to the basic expression, which at least produces // the correct result at either extreme. return (1 - a) * p + a * q; } //-------------------------------------------------------------------- self_type& clear() { r = g = b = a = 0; return *this; } //-------------------------------------------------------------------- self_type& transparent() { a = 0; return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type& opacity(double a_) { if (a_ < 0) a = 0; else if (a_ > 1) a = 1; else a = value_type(a_); return *this; } //-------------------------------------------------------------------- double opacity() const { return a; } //-------------------------------------------------------------------- AGG_INLINE self_type& premultiply() { if (a < 1) { if (a <= 0) { r = g = b = 0; } else { r *= a; g *= a; b *= a; } } return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type& demultiply() { if (a < 1) { if (a <= 0) { r = g = b = 0; } else { r /= a; g /= a; b /= a; } } return *this; } //-------------------------------------------------------------------- AGG_INLINE self_type gradient(const self_type& c, double k) const { self_type ret; ret.r = value_type(r + (c.r - r) * k); ret.g = value_type(g + (c.g - g) * k); ret.b = value_type(b + (c.b - b) * k); ret.a = value_type(a + (c.a - a) * k); return ret; } //-------------------------------------------------------------------- AGG_INLINE void add(const self_type& c, unsigned cover) { if (cover == cover_mask) { if (c.is_opaque()) { *this = c; return; } else { r += c.r; g += c.g; b += c.b; a += c.a; } } else { r += mult_cover(c.r, cover); g += mult_cover(c.g, cover); b += mult_cover(c.b, cover); a += mult_cover(c.a, cover); } if (a > 1) a = 1; if (r > a) r = a; if (g > a) g = a; if (b > a) b = a; } //-------------------------------------------------------------------- template AGG_INLINE void apply_gamma_dir(const GammaLUT& gamma) { r = gamma.dir(r); g = gamma.dir(g); b = gamma.dir(b); } //-------------------------------------------------------------------- template AGG_INLINE void apply_gamma_inv(const GammaLUT& gamma) { r = gamma.inv(r); g = gamma.inv(g); b = gamma.inv(b); } //-------------------------------------------------------------------- static self_type no_color() { return self_type(0,0,0,0); } //-------------------------------------------------------------------- static self_type from_wavelength(double wl, double gamma = 1) { return self_type(rgba::from_wavelength(wl, gamma)); } }; } #endif mapnik-3.0.9/deps/agg/include/agg_config.h000066400000000000000000000023571262555547000203740ustar00rootroot00000000000000#ifndef AGG_CONFIG_INCLUDED #define AGG_CONFIG_INCLUDED // This file can be used to redefine certain data types. //--------------------------------------- // 1. Default basic types such as: // // AGG_INT8 // AGG_INT8U // AGG_INT16 // AGG_INT16U // AGG_INT32 // AGG_INT32U // AGG_INT64 // AGG_INT64U // // Just replace this file with new defines if necessary. // For example, if your compiler doesn't have a 64 bit integer type // you can still use AGG if you define the follows: // // #define AGG_INT64 int // #define AGG_INT64U unsigned // // It will result in overflow in 16 bit-per-component image/pattern resampling // but it won't result any crash and the rest of the library will remain // fully functional. //--------------------------------------- // 2. Default rendering_buffer type. Can be: // // Provides faster access for massive pixel operations, // such as blur, image filtering: #define AGG_RENDERING_BUFFER row_ptr_cache // // Provides cheaper creation and destruction (no mem allocs): // #define AGG_RENDERING_BUFFER row_accessor // // You can still use both of them simultaneouslyin your applications // This #define is used only for default rendering_buffer type, // in short hand typedefs like pixfmt_rgba32. #endif mapnik-3.0.9/deps/agg/include/agg_conv_adaptor_vcgen.h000066400000000000000000000117171262555547000227700ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CONV_ADAPTOR_VCGEN_INCLUDED #define AGG_CONV_ADAPTOR_VCGEN_INCLUDED #include "agg_basics.h" namespace agg { //------------------------------------------------------------null_markers struct null_markers { void remove_all() {} void add_vertex(double, double, unsigned) {} void prepare_src() {} void rewind(unsigned) {} unsigned vertex(double*, double*) { return path_cmd_stop; } unsigned type() const { return 0; } }; //------------------------------------------------------conv_adaptor_vcgen template class conv_adaptor_vcgen { enum status { initial, accumulate, generate }; public: explicit conv_adaptor_vcgen(VertexSource& source) : m_source(&source), m_status(initial) {} void attach(VertexSource& source) { m_source = &source; } Generator& generator() { return m_generator; } const Generator& generator() const { return m_generator; } Markers& markers() { return m_markers; } const Markers& markers() const { return m_markers; } void rewind(unsigned path_id) { m_source->rewind(path_id); m_status = initial; } unsigned vertex(double* x, double* y); unsigned type() const { return m_source->type(); } private: // Prohibit copying conv_adaptor_vcgen(const conv_adaptor_vcgen&); const conv_adaptor_vcgen& operator = (const conv_adaptor_vcgen&); VertexSource* m_source; Generator m_generator; Markers m_markers; status m_status; unsigned m_last_cmd; double m_start_x; double m_start_y; }; //------------------------------------------------------------------------ template unsigned conv_adaptor_vcgen::vertex(double* x, double* y) { unsigned cmd = path_cmd_stop; bool done = false; while(!done) { switch(m_status) { case initial: m_markers.remove_all(); m_last_cmd = m_source->vertex(&m_start_x, &m_start_y); m_status = accumulate; case accumulate: if(is_stop(m_last_cmd)) return path_cmd_stop; m_generator.remove_all(); m_generator.add_vertex(m_start_x, m_start_y, path_cmd_move_to); m_markers.add_vertex(m_start_x, m_start_y, path_cmd_move_to); for(;;) { cmd = m_source->vertex(x, y); if(is_vertex(cmd)) { m_last_cmd = cmd; if(is_move_to(cmd)) { m_start_x = *x; m_start_y = *y; break; } m_generator.add_vertex(*x, *y, cmd); m_markers.add_vertex(*x, *y, path_cmd_line_to); } else { if(is_stop(cmd)) { m_last_cmd = path_cmd_stop; break; } if(is_end_poly(cmd)) { m_generator.add_vertex(*x, *y, cmd); break; } } } m_generator.rewind(0); m_status = generate; case generate: cmd = m_generator.vertex(x, y); if(is_stop(cmd)) { m_status = accumulate; break; } done = true; break; } } return cmd; } } #endif mapnik-3.0.9/deps/agg/include/agg_conv_adaptor_vpgen.h000066400000000000000000000117321262555547000230020ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CONV_ADAPTOR_VPGEN_INCLUDED #define AGG_CONV_ADAPTOR_VPGEN_INCLUDED #include "agg_basics.h" namespace agg { //======================================================conv_adaptor_vpgen template class conv_adaptor_vpgen { public: explicit conv_adaptor_vpgen(VertexSource& source) : m_source(&source) {} void attach(VertexSource& source) { m_source = &source; } VPGen& vpgen() { return m_vpgen; } const VPGen& vpgen() const { return m_vpgen; } void rewind(unsigned path_id); unsigned vertex(double* x, double* y); unsigned type() const { return m_source->type(); } private: conv_adaptor_vpgen(const conv_adaptor_vpgen&); const conv_adaptor_vpgen& operator = (const conv_adaptor_vpgen&); VertexSource* m_source; VPGen m_vpgen; double m_start_x; double m_start_y; unsigned m_poly_flags; int m_vertices; }; //------------------------------------------------------------------------ template void conv_adaptor_vpgen::rewind(unsigned path_id) { m_source->rewind(path_id); m_vpgen.reset(); m_start_x = 0; m_start_y = 0; m_poly_flags = 0; m_vertices = 0; } //------------------------------------------------------------------------ template unsigned conv_adaptor_vpgen::vertex(double* x, double* y) { unsigned cmd = path_cmd_stop; for(;;) { cmd = m_vpgen.vertex(x, y); if(!is_stop(cmd)) break; if(m_poly_flags && !m_vpgen.auto_unclose()) { *x = 0.0; *y = 0.0; cmd = m_poly_flags; m_poly_flags = 0; break; } if(m_vertices < 0) { if(m_vertices < -1) { m_vertices = 0; return path_cmd_stop; } m_vpgen.move_to(m_start_x, m_start_y); m_vertices = 1; continue; } double tx, ty; cmd = m_source->vertex(&tx, &ty); if(is_vertex(cmd)) { if(is_move_to(cmd)) { if(m_vpgen.auto_close() && m_vertices > 2) { m_vpgen.line_to(m_start_x, m_start_y); m_poly_flags = path_cmd_end_poly | path_flags_close; m_start_x = tx; m_start_y = ty; m_vertices = -1; continue; } m_vpgen.move_to(tx, ty); m_start_x = tx; m_start_y = ty; m_vertices = 1; } else { m_vpgen.line_to(tx, ty); ++m_vertices; } } else { if(is_end_poly(cmd)) { m_poly_flags = cmd; if(is_closed(cmd) || m_vpgen.auto_close()) { if(m_vpgen.auto_close()) m_poly_flags |= path_flags_close; if(m_vertices > 2) { m_vpgen.line_to(m_start_x, m_start_y); } m_vertices = 0; } } else { // path_cmd_stop if(m_vpgen.auto_close() && m_vertices > 2) { m_vpgen.line_to(m_start_x, m_start_y); m_poly_flags = path_cmd_end_poly | path_flags_close; m_vertices = -2; continue; } break; } } } return cmd; } } #endif mapnik-3.0.9/deps/agg/include/agg_conv_bspline.h000066400000000000000000000032131262555547000216000ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CONV_BSPLINE_INCLUDED #define AGG_CONV_BSPLINE_INCLUDED #include "agg_basics.h" #include "agg_vcgen_bspline.h" #include "agg_conv_adaptor_vcgen.h" namespace agg { //---------------------------------------------------------conv_bspline template struct conv_bspline : public conv_adaptor_vcgen { typedef conv_adaptor_vcgen base_type; conv_bspline(VertexSource& vs) : conv_adaptor_vcgen(vs) {} void interpolation_step(double v) { base_type::generator().interpolation_step(v); } double interpolation_step() const { return base_type::generator().interpolation_step(); } private: conv_bspline(const conv_bspline&); const conv_bspline& operator = (const conv_bspline&); }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_clip_polygon.h000066400000000000000000000050211262555547000226410ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Polygon clipping converter // There an optimized Liang-Basky algorithm is used. // The algorithm doesn't optimize the degenerate edges, i.e. it will never // break a closed polygon into two or more ones, instead, there will be // degenerate edges coinciding with the respective clipping boundaries. // This is a sub-optimal solution, because that optimization would require // extra, rather expensive math while the rasterizer tolerates it quite well, // without any considerable overhead. // //---------------------------------------------------------------------------- #ifndef AGG_CONV_CLIP_POLYGON_INCLUDED #define AGG_CONV_CLIP_POLYGON_INCLUDED #include "agg_basics.h" #include "agg_conv_adaptor_vpgen.h" #include "agg_vpgen_clip_polygon.h" namespace agg { //=======================================================conv_clip_polygon template struct conv_clip_polygon : public conv_adaptor_vpgen { typedef conv_adaptor_vpgen base_type; conv_clip_polygon(VertexSource& vs) : conv_adaptor_vpgen(vs) {} void clip_box(double x1, double y1, double x2, double y2) { base_type::vpgen().clip_box(x1, y1, x2, y2); } double x1() const { return base_type::vpgen().x1(); } double y1() const { return base_type::vpgen().y1(); } double x2() const { return base_type::vpgen().x2(); } double y2() const { return base_type::vpgen().y2(); } unsigned type() const { return base_type::type(); } private: conv_clip_polygon(const conv_clip_polygon&); const conv_clip_polygon& operator = (const conv_clip_polygon&); }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_clip_polyline.h000066400000000000000000000050401262555547000230060ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // polyline clipping converter // There an optimized Liang-Basky algorithm is used. // The algorithm doesn't optimize the degenerate edges, i.e. it will never // break a closed polyline into two or more ones, instead, there will be // degenerate edges coinciding with the respective clipping boundaries. // This is a sub-optimal solution, because that optimization would require // extra, rather expensive math while the rasterizer tolerates it quite well, // without any considerable overhead. // //---------------------------------------------------------------------------- #ifndef AGG_CONV_CLIP_polyline_INCLUDED #define AGG_CONV_CLIP_polyline_INCLUDED #include "agg_basics.h" #include "agg_conv_adaptor_vpgen.h" #include "agg_vpgen_clip_polyline.h" namespace agg { //=======================================================conv_clip_polyline template struct conv_clip_polyline : public conv_adaptor_vpgen { typedef conv_adaptor_vpgen base_type; conv_clip_polyline(VertexSource& vs) : conv_adaptor_vpgen(vs) {} void clip_box(double x1, double y1, double x2, double y2) { base_type::vpgen().clip_box(x1, y1, x2, y2); } double x1() const { return base_type::vpgen().x1(); } double y1() const { return base_type::vpgen().y1(); } double x2() const { return base_type::vpgen().x2(); } double y2() const { return base_type::vpgen().y2(); } unsigned type() const { return base_type::type(); } private: conv_clip_polyline(const conv_clip_polyline&); const conv_clip_polyline& operator = (const conv_clip_polyline&); }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_close_polygon.h000066400000000000000000000070201262555547000230200ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CONV_CLOSE_POLYGON_INCLUDED #define AGG_CONV_CLOSE_POLYGON_INCLUDED #include "agg_basics.h" namespace agg { //======================================================conv_close_polygon template class conv_close_polygon { public: explicit conv_close_polygon(VertexSource& vs) : m_source(&vs) {} void attach(VertexSource& source) { m_source = &source; } void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: conv_close_polygon(const conv_close_polygon&); const conv_close_polygon& operator = (const conv_close_polygon&); VertexSource* m_source; unsigned m_cmd[2]; double m_x[2]; double m_y[2]; unsigned m_vertex; bool m_line_to; }; //------------------------------------------------------------------------ template void conv_close_polygon::rewind(unsigned path_id) { m_source->rewind(path_id); m_vertex = 2; m_line_to = false; } //------------------------------------------------------------------------ template unsigned conv_close_polygon::vertex(double* x, double* y) { unsigned cmd = path_cmd_stop; for(;;) { if(m_vertex < 2) { *x = m_x[m_vertex]; *y = m_y[m_vertex]; cmd = m_cmd[m_vertex]; ++m_vertex; break; } cmd = m_source->vertex(x, y); if(is_end_poly(cmd)) { cmd |= path_flags_close; break; } if(is_stop(cmd)) { if(m_line_to) { m_cmd[0] = path_cmd_end_poly | path_flags_close; m_cmd[1] = path_cmd_stop; m_vertex = 0; m_line_to = false; continue; } break; } if(is_move_to(cmd)) { if(m_line_to) { m_x[0] = 0.0; m_y[0] = 0.0; m_cmd[0] = path_cmd_end_poly | path_flags_close; m_x[1] = *x; m_y[1] = *y; m_cmd[1] = cmd; m_vertex = 0; m_line_to = false; continue; } break; } if(is_vertex(cmd)) { m_line_to = true; break; } } return cmd; } } #endif mapnik-3.0.9/deps/agg/include/agg_conv_concat.h000066400000000000000000000042751262555547000214240ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CONV_CONCAT_INCLUDED #define AGG_CONV_CONCAT_INCLUDED #include "agg_basics.h" namespace agg { //=============================================================conv_concat // Concatenation of two paths. Usually used to combine lines or curves // with markers such as arrowheads template class conv_concat { public: conv_concat(VS1& source1, VS2& source2) : m_source1(&source1), m_source2(&source2), m_status(2) {} void attach1(VS1& source) { m_source1 = &source; } void attach2(VS2& source) { m_source2 = &source; } void rewind(unsigned path_id) { m_source1->rewind(path_id); m_source2->rewind(0); m_status = 0; } unsigned vertex(double* x, double* y) { unsigned cmd; if(m_status == 0) { cmd = m_source1->vertex(x, y); if(!is_stop(cmd)) return cmd; m_status = 1; } if(m_status == 1) { cmd = m_source2->vertex(x, y); if(!is_stop(cmd)) return cmd; m_status = 2; } return path_cmd_stop; } private: conv_concat(const conv_concat&); const conv_concat& operator = (const conv_concat&); VS1* m_source1; VS2* m_source2; int m_status; }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_contour.h000066400000000000000000000055501262555547000216430ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // conv_stroke // //---------------------------------------------------------------------------- #ifndef AGG_CONV_CONTOUR_INCLUDED #define AGG_CONV_CONTOUR_INCLUDED #include "agg_basics.h" #include "agg_vcgen_contour.h" #include "agg_conv_adaptor_vcgen.h" namespace agg { //-----------------------------------------------------------conv_contour template struct conv_contour : public conv_adaptor_vcgen { typedef conv_adaptor_vcgen base_type; conv_contour(VertexSource& vs) : conv_adaptor_vcgen(vs) { } void line_join(line_join_e lj) { base_type::generator().line_join(lj); } void inner_join(inner_join_e ij) { base_type::generator().inner_join(ij); } void width(double w) { base_type::generator().width(w); } void miter_limit(double ml) { base_type::generator().miter_limit(ml); } void miter_limit_theta(double t) { base_type::generator().miter_limit_theta(t); } void inner_miter_limit(double ml) { base_type::generator().inner_miter_limit(ml); } void approximation_scale(double as) { base_type::generator().approximation_scale(as); } void auto_detect_orientation(bool v) { base_type::generator().auto_detect_orientation(v); } line_join_e line_join() const { return base_type::generator().line_join(); } inner_join_e inner_join() const { return base_type::generator().inner_join(); } double width() const { return base_type::generator().width(); } double miter_limit() const { return base_type::generator().miter_limit(); } double inner_miter_limit() const { return base_type::generator().inner_miter_limit(); } double approximation_scale() const { return base_type::generator().approximation_scale(); } bool auto_detect_orientation() const { return base_type::generator().auto_detect_orientation(); } private: conv_contour(const conv_contour&); const conv_contour& operator = (const conv_contour&); }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_curve.h000066400000000000000000000150221262555547000212710ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // classes conv_curve // //---------------------------------------------------------------------------- #ifndef AGG_CONV_CURVE_INCLUDED #define AGG_CONV_CURVE_INCLUDED #include "agg_basics.h" #include "agg_curves.h" namespace agg { //---------------------------------------------------------------conv_curve // Curve converter class. Any path storage can have Bezier curves defined // by their control points. There're two types of curves supported: curve3 // and curve4. Curve3 is a conic Bezier curve with 2 endpoints and 1 control // point. Curve4 has 2 control points (4 points in total) and can be used // to interpolate more complicated curves. Curve4, unlike curve3 can be used // to approximate arcs, both circular and elliptical. Curves are approximated // with straight lines and one of the approaches is just to store the whole // sequence of vertices that approximate our curve. It takes additional // memory, and at the same time the consecutive vertices can be calculated // on demand. // // Initially, path storages are not suppose to keep all the vertices of the // curves (although, nothing prevents us from doing so). Instead, path_storage // keeps only vertices, needed to calculate a curve on demand. Those vertices // are marked with special commands. So, if the path_storage contains curves // (which are not real curves yet), and we render this storage directly, // all we will see is only 2 or 3 straight line segments (for curve3 and // curve4 respectively). If we need to see real curves drawn we need to // include this class into the conversion pipeline. // // Class conv_curve recognizes commands path_cmd_curve3 and path_cmd_curve4 // and converts these vertices into a move_to/line_to sequence. //----------------------------------------------------------------------- template class conv_curve { public: typedef Curve3 curve3_type; typedef Curve4 curve4_type; typedef conv_curve self_type; explicit conv_curve(VertexSource& source) : m_source(&source), m_last_x(0.0), m_last_y(0.0) {} void attach(VertexSource& source) { m_source = &source; } void approximation_method(curve_approximation_method_e v) { m_curve3.approximation_method(v); m_curve4.approximation_method(v); } curve_approximation_method_e approximation_method() const { return m_curve4.approximation_method(); } void approximation_scale(double s) { m_curve3.approximation_scale(s); m_curve4.approximation_scale(s); } double approximation_scale() const { return m_curve4.approximation_scale(); } void angle_tolerance(double v) { m_curve3.angle_tolerance(v); m_curve4.angle_tolerance(v); } double angle_tolerance() const { return m_curve4.angle_tolerance(); } void cusp_limit(double v) { m_curve3.cusp_limit(v); m_curve4.cusp_limit(v); } double cusp_limit() const { return m_curve4.cusp_limit(); } void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: conv_curve(const self_type&); const self_type& operator = (const self_type&); VertexSource* m_source; double m_last_x; double m_last_y; curve3_type m_curve3; curve4_type m_curve4; }; //------------------------------------------------------------------------ template void conv_curve::rewind(unsigned path_id) { m_source->rewind(path_id); m_last_x = 0.0; m_last_y = 0.0; m_curve3.reset(); m_curve4.reset(); } //------------------------------------------------------------------------ template unsigned conv_curve::vertex(double* x, double* y) { if(!is_stop(m_curve3.vertex(x, y))) { m_last_x = *x; m_last_y = *y; return path_cmd_line_to; } if(!is_stop(m_curve4.vertex(x, y))) { m_last_x = *x; m_last_y = *y; return path_cmd_line_to; } double ct2_x=0; double ct2_y=0; double end_x=0; double end_y=0; unsigned cmd = m_source->vertex(x, y); switch(cmd) { case path_cmd_curve3: m_source->vertex(&end_x, &end_y); m_curve3.init(m_last_x, m_last_y, *x, *y, end_x, end_y); m_curve3.vertex(x, y); // First call returns path_cmd_move_to m_curve3.vertex(x, y); // This is the first vertex of the curve cmd = path_cmd_line_to; break; case path_cmd_curve4: m_source->vertex(&ct2_x, &ct2_y); m_source->vertex(&end_x, &end_y); m_curve4.init(m_last_x, m_last_y, *x, *y, ct2_x, ct2_y, end_x, end_y); m_curve4.vertex(x, y); // First call returns path_cmd_move_to m_curve4.vertex(x, y); // This is the first vertex of the curve cmd = path_cmd_line_to; break; } m_last_x = *x; m_last_y = *y; return cmd; } } #endif mapnik-3.0.9/deps/agg/include/agg_conv_dash.h000066400000000000000000000042221262555547000210640ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // conv_dash // //---------------------------------------------------------------------------- #ifndef AGG_CONV_DASH_INCLUDED #define AGG_CONV_DASH_INCLUDED #include "agg_basics.h" #include "agg_vcgen_dash.h" #include "agg_conv_adaptor_vcgen.h" namespace agg { //---------------------------------------------------------------conv_dash template struct conv_dash : public conv_adaptor_vcgen { typedef Markers marker_type; typedef conv_adaptor_vcgen base_type; conv_dash(VertexSource& vs) : conv_adaptor_vcgen(vs) { } void remove_all_dashes() { base_type::generator().remove_all_dashes(); } void add_dash(double dash_len, double gap_len) { base_type::generator().add_dash(dash_len, gap_len); } void dash_start(double ds) { base_type::generator().dash_start(ds); } void shorten(double s) { base_type::generator().shorten(s); } double shorten() const { return base_type::generator().shorten(); } private: conv_dash(const conv_dash&); const conv_dash& operator = (const conv_dash&); }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_gpc.h000066400000000000000000000307001262555547000207160ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // General Polygon Clipper based on the GPC library by Alan Murta // Union, Intersection, XOR, A-B, B-A // Contact the author if you intend to use it in commercial applications! // http://www.cs.man.ac.uk/aig/staff/alan/software/ // Alan Murta (email: gpc@cs.man.ac.uk) // //---------------------------------------------------------------------------- #ifndef AGG_CONV_GPC_INCLUDED #define AGG_CONV_GPC_INCLUDED #include #include "agg_basics.h" #include "agg_array.h" extern "C" { #include "gpc.h" } namespace agg { enum gpc_op_e { gpc_or, gpc_and, gpc_xor, gpc_a_minus_b, gpc_b_minus_a }; //================================================================conv_gpc template class conv_gpc { enum status { status_move_to, status_line_to, status_stop }; struct contour_header_type { int num_vertices; int hole_flag; gpc_vertex* vertices; }; typedef pod_bvector vertex_array_type; typedef pod_bvector contour_header_array_type; public: typedef VSA source_a_type; typedef VSB source_b_type; typedef conv_gpc self_type; ~conv_gpc() { free_gpc_data(); } conv_gpc(source_a_type& a, source_b_type& b, gpc_op_e op = gpc_or) : m_src_a(&a), m_src_b(&b), m_status(status_move_to), m_vertex(-1), m_contour(-1), m_operation(op) { memset(&m_poly_a, 0, sizeof(m_poly_a)); memset(&m_poly_b, 0, sizeof(m_poly_b)); memset(&m_result, 0, sizeof(m_result)); } void attach1(VSA& source) { m_src_a = &source; } void attach2(VSB& source) { m_src_b = &source; } void operation(gpc_op_e v) { m_operation = v; } // Vertex Source Interface void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: conv_gpc(const conv_gpc&); const conv_gpc& operator = (const conv_gpc&); //-------------------------------------------------------------------- void free_polygon(gpc_polygon& p); void free_result(); void free_gpc_data(); void start_contour(); void add_vertex(double x, double y); void end_contour(unsigned orientation); void make_polygon(gpc_polygon& p); void start_extracting(); bool next_contour(); bool next_vertex(double* x, double* y); //-------------------------------------------------------------------- template void add(VS& src, gpc_polygon& p) { unsigned cmd; double x, y; double start_x = 0.0; double start_y = 0.0; bool line_to = false; unsigned orientation = 0; m_contour_accumulator.remove_all(); while(!is_stop(cmd = src.vertex(&x, &y))) { if(is_vertex(cmd)) { if(is_move_to(cmd)) { if(line_to) { end_contour(orientation); orientation = 0; } start_contour(); start_x = x; start_y = y; } add_vertex(x, y); line_to = true; } else { if(is_end_poly(cmd)) { orientation = get_orientation(cmd); if(line_to && is_closed(cmd)) { add_vertex(start_x, start_y); } } } } if(line_to) { end_contour(orientation); } make_polygon(p); } private: //-------------------------------------------------------------------- source_a_type* m_src_a; source_b_type* m_src_b; status m_status; int m_vertex; int m_contour; gpc_op_e m_operation; vertex_array_type m_vertex_accumulator; contour_header_array_type m_contour_accumulator; gpc_polygon m_poly_a; gpc_polygon m_poly_b; gpc_polygon m_result; }; //------------------------------------------------------------------------ template void conv_gpc::free_polygon(gpc_polygon& p) { int i; for(i = 0; i < p.num_contours; i++) { pod_allocator::deallocate(p.contour[i].vertex, p.contour[i].num_vertices); } pod_allocator::deallocate(p.contour, p.num_contours); memset(&p, 0, sizeof(gpc_polygon)); } //------------------------------------------------------------------------ template void conv_gpc::free_result() { if(m_result.contour) { gpc_free_polygon(&m_result); } memset(&m_result, 0, sizeof(m_result)); } //------------------------------------------------------------------------ template void conv_gpc::free_gpc_data() { free_polygon(m_poly_a); free_polygon(m_poly_b); free_result(); } //------------------------------------------------------------------------ template void conv_gpc::start_contour() { contour_header_type h; memset(&h, 0, sizeof(h)); m_contour_accumulator.add(h); m_vertex_accumulator.remove_all(); } //------------------------------------------------------------------------ template inline void conv_gpc::add_vertex(double x, double y) { gpc_vertex v; v.x = x; v.y = y; m_vertex_accumulator.add(v); } //------------------------------------------------------------------------ template void conv_gpc::end_contour(unsigned orientation) { if(m_contour_accumulator.size()) { if(m_vertex_accumulator.size() > 2) { contour_header_type& h = m_contour_accumulator[m_contour_accumulator.size() - 1]; h.num_vertices = m_vertex_accumulator.size(); h.hole_flag = 0; // TO DO: Clarify the "holes" //if(is_cw(orientation)) h.hole_flag = 1; h.vertices = pod_allocator::allocate(h.num_vertices); gpc_vertex* d = h.vertices; int i; for(i = 0; i < h.num_vertices; i++) { const gpc_vertex& s = m_vertex_accumulator[i]; d->x = s.x; d->y = s.y; ++d; } } else { m_vertex_accumulator.remove_last(); } } } //------------------------------------------------------------------------ template void conv_gpc::make_polygon(gpc_polygon& p) { free_polygon(p); if(m_contour_accumulator.size()) { p.num_contours = m_contour_accumulator.size(); p.hole = 0; p.contour = pod_allocator::allocate(p.num_contours); int i; gpc_vertex_list* pv = p.contour; for(i = 0; i < p.num_contours; i++) { const contour_header_type& h = m_contour_accumulator[i]; pv->num_vertices = h.num_vertices; pv->vertex = h.vertices; ++pv; } } } //------------------------------------------------------------------------ template void conv_gpc::start_extracting() { m_status = status_move_to; m_contour = -1; m_vertex = -1; } //------------------------------------------------------------------------ template bool conv_gpc::next_contour() { if(++m_contour < m_result.num_contours) { m_vertex = -1; return true; } return false; } //------------------------------------------------------------------------ template inline bool conv_gpc::next_vertex(double* x, double* y) { const gpc_vertex_list& vlist = m_result.contour[m_contour]; if(++m_vertex < vlist.num_vertices) { const gpc_vertex& v = vlist.vertex[m_vertex]; *x = v.x; *y = v.y; return true; } return false; } //------------------------------------------------------------------------ template void conv_gpc::rewind(unsigned path_id) { free_result(); m_src_a->rewind(path_id); m_src_b->rewind(path_id); add(*m_src_a, m_poly_a); add(*m_src_b, m_poly_b); switch(m_operation) { case gpc_or: gpc_polygon_clip(GPC_UNION, &m_poly_a, &m_poly_b, &m_result); break; case gpc_and: gpc_polygon_clip(GPC_INT, &m_poly_a, &m_poly_b, &m_result); break; case gpc_xor: gpc_polygon_clip(GPC_XOR, &m_poly_a, &m_poly_b, &m_result); break; case gpc_a_minus_b: gpc_polygon_clip(GPC_DIFF, &m_poly_a, &m_poly_b, &m_result); break; case gpc_b_minus_a: gpc_polygon_clip(GPC_DIFF, &m_poly_b, &m_poly_a, &m_result); break; } start_extracting(); } //------------------------------------------------------------------------ template unsigned conv_gpc::vertex(double* x, double* y) { if(m_status == status_move_to) { if(next_contour()) { if(next_vertex(x, y)) { m_status = status_line_to; return path_cmd_move_to; } m_status = status_stop; return path_cmd_end_poly | path_flags_close; } } else { if(next_vertex(x, y)) { return path_cmd_line_to; } else { m_status = status_move_to; } return path_cmd_end_poly | path_flags_close; } return path_cmd_stop; } } #endif mapnik-3.0.9/deps/agg/include/agg_conv_marker.h000066400000000000000000000106431262555547000214320ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // conv_marker // //---------------------------------------------------------------------------- #ifndef AGG_CONV_MARKER_INCLUDED #define AGG_CONV_MARKER_INCLUDED #include "agg_basics.h" #include "agg_trans_affine.h" namespace agg { //-------------------------------------------------------------conv_marker template class conv_marker { public: conv_marker(MarkerLocator& ml, MarkerShapes& ms); trans_affine& transform() { return m_transform; } const trans_affine& transform() const { return m_transform; } void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: conv_marker(const conv_marker&); const conv_marker& operator = (const conv_marker&); enum status_e { initial, markers, polygon, stop }; MarkerLocator* m_marker_locator; MarkerShapes* m_marker_shapes; trans_affine m_transform; trans_affine m_mtx; status_e m_status; unsigned m_marker; unsigned m_num_markers; }; //------------------------------------------------------------------------ template conv_marker::conv_marker(MarkerLocator& ml, MarkerShapes& ms) : m_marker_locator(&ml), m_marker_shapes(&ms), m_status(initial), m_marker(0), m_num_markers(1) { } //------------------------------------------------------------------------ template void conv_marker::rewind(unsigned) { m_status = initial; m_marker = 0; m_num_markers = 1; } //------------------------------------------------------------------------ template unsigned conv_marker::vertex(double* x, double* y) { unsigned cmd = path_cmd_move_to; double x1, y1, x2, y2; while(!is_stop(cmd)) { switch(m_status) { case initial: if(m_num_markers == 0) { cmd = path_cmd_stop; break; } m_marker_locator->rewind(m_marker); ++m_marker; m_num_markers = 0; m_status = markers; case markers: if(is_stop(m_marker_locator->vertex(&x1, &y1))) { m_status = initial; break; } if(is_stop(m_marker_locator->vertex(&x2, &y2))) { m_status = initial; break; } ++m_num_markers; m_mtx = m_transform; m_mtx *= trans_affine_rotation(std::atan2(y2 - y1, x2 - x1)); m_mtx *= trans_affine_translation(x1, y1); m_marker_shapes->rewind(m_marker - 1); m_status = polygon; case polygon: cmd = m_marker_shapes->vertex(x, y); if(is_stop(cmd)) { cmd = path_cmd_move_to; m_status = markers; break; } m_mtx.transform(x, y); return cmd; case stop: cmd = path_cmd_stop; break; } } return cmd; } } #endif mapnik-3.0.9/deps/agg/include/agg_conv_marker_adaptor.h000066400000000000000000000035031262555547000231410ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CONV_MARKER_ADAPTOR_INCLUDED #define AGG_CONV_MARKER_ADAPTOR_INCLUDED #include "agg_basics.h" #include "agg_conv_adaptor_vcgen.h" #include "agg_vcgen_vertex_sequence.h" namespace agg { //=====================================================conv_marker_adaptor template struct conv_marker_adaptor : public conv_adaptor_vcgen { typedef Markers marker_type; typedef conv_adaptor_vcgen base_type; conv_marker_adaptor(VertexSource& vs) : conv_adaptor_vcgen(vs) { } void shorten(double s) { base_type::generator().shorten(s); } double shorten() const { return base_type::generator().shorten(); } private: conv_marker_adaptor(const conv_marker_adaptor&); const conv_marker_adaptor& operator = (const conv_marker_adaptor&); }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_offset.h000066400000000000000000000160421262555547000214360ustar00rootroot00000000000000/******************************************************************************* * * * Author : Angus Johnson * * Version : 1.1 * * Date : 4 April 2011 * * Website : http://www.angusj.com * * Copyright : Angus Johnson 2010-2011 * * * * License: * * Use, modification & distribution is subject to Boost Software License Ver 1. * * http://www.boost.org/LICENSE_1_0.txt * * * *******************************************************************************/ // based on adapted agg_conv_clipper.h #ifndef AGG_CONV_OFFSET_INCLUDED #define AGG_CONV_OFFSET_INCLUDED #include #include "agg_basics.h" #include "agg_array.h" #include "clipper.hpp" namespace agg { template class conv_offset { enum status { status_move_to, status_line_to, status_stop }; typedef VSA source_a_type; typedef conv_offset self_type; private: source_a_type* m_src_a; double m_offset; status m_status; int m_vertex; int m_contour; int m_scaling_factor; pod_bvector m_vertex_accumulator; ClipperLib::Paths m_poly_a; ClipperLib::Paths m_result; ClipperLib::ClipperOffset m_clipper_offset; int Round(double val) { if ((val < 0)) return (int)(val - 0.5); else return (int)(val + 0.5); } public: conv_offset(source_a_type &a, double offset = 0.0, int scaling_factor = 0) : m_src_a(&a), m_offset(offset), m_status(status_move_to), m_vertex(-1), m_contour(-1) { m_scaling_factor = std::max(std::min(scaling_factor, 6),0); m_scaling_factor = Round(std::pow((double)10, m_scaling_factor)); } ~conv_offset() { } void set_offset(double offset) { m_offset = offset;} unsigned type() const { return static_cast(m_src_a->type()); } double get_offset() const { return m_offset; } void rewind(unsigned path_id); unsigned vertex(double* x, double* y); bool next_contour(); bool next_vertex(double* x, double* y); void start_extracting(); void add_vertex_(double &x, double &y); void end_contour(ClipperLib::Paths &p); template void add(VS &src, ClipperLib::Paths &p) { unsigned cmd; double x; double y; double start_x; double start_y; bool starting_first_line; start_x = 0.0; start_y = 0.0; starting_first_line = true; p.resize(0); cmd = src->vertex( &x , &y ); while(!is_stop(cmd)) { if(is_vertex(cmd)) { if(is_move_to(cmd)) { if(!starting_first_line ) end_contour(p); start_x = x; start_y = y; } add_vertex_( x, y ); starting_first_line = false; } else if(is_end_poly(cmd)) { if(!starting_first_line && is_closed(cmd)) add_vertex_( start_x, start_y ); } cmd = src->vertex( &x, &y ); } end_contour(p); } }; //------------------------------------------------------------------------ template void conv_offset::start_extracting() { m_status = status_move_to; m_contour = -1; m_vertex = -1; } //------------------------------------------------------------------------------ template void conv_offset::rewind(unsigned path_id) { m_src_a->rewind( path_id ); //m_src_b->rewind( path_id ); add( m_src_a , m_poly_a ); //add( m_src_b , m_poly_b ); m_result.resize(0); m_clipper_offset.Clear(); m_clipper_offset.AddPaths(m_poly_a,ClipperLib::jtMiter, ClipperLib::etOpenButt);//ClosedLine);//Polygon); m_clipper_offset.Execute(m_result, m_offset * m_scaling_factor); start_extracting(); } //------------------------------------------------------------------------------ template void conv_offset::end_contour( ClipperLib::Paths &p) { unsigned i, len; if( m_vertex_accumulator.size() < 3 ) return; len = p.size(); p.resize(len+1); p[len].resize(m_vertex_accumulator.size()); for( i = 0 ; i < m_vertex_accumulator.size() ; i++ ) p[len][i] = m_vertex_accumulator[i]; m_vertex_accumulator.remove_all(); } //------------------------------------------------------------------------------ template void conv_offset::add_vertex_(double &x, double &y) { ClipperLib::IntPoint v; v.X = Round(x * m_scaling_factor); v.Y = Round(y * m_scaling_factor); m_vertex_accumulator.add( v ); } //------------------------------------------------------------------------------ template bool conv_offset::next_contour() { m_contour++; if(m_contour >= (int)m_result.size()) return false; m_vertex =-1; return true; } //------------------------------------------------------------------------------ template bool conv_offset::next_vertex(double *x, double *y) { m_vertex++; if(m_vertex >= (int)m_result[m_contour].size()) return false; *x = (double)m_result[ m_contour ][ m_vertex ].X / m_scaling_factor; *y = (double)m_result[ m_contour ][ m_vertex ].Y / m_scaling_factor; return true; } //------------------------------------------------------------------------------ template unsigned conv_offset::vertex(double *x, double *y) { if( m_status == status_move_to ) { if( next_contour() ) { if( next_vertex( x, y ) ) { m_status =status_line_to; return path_cmd_move_to; } else { m_status = status_stop; return path_cmd_end_poly | path_flags_close; } } else return path_cmd_stop; } else { if( next_vertex( x, y ) ) { return path_cmd_line_to; } else { m_status = status_move_to; return path_cmd_end_poly | path_flags_close; } } } //------------------------------------------------------------------------------ } //namespace agg #endif //AGG_CONV_OFFSET_INCLUDED mapnik-3.0.9/deps/agg/include/agg_conv_segmentator.h000066400000000000000000000033001262555547000224710ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CONV_SEGMENTATOR_INCLUDED #define AGG_CONV_SEGMENTATOR_INCLUDED #include "agg_basics.h" #include "agg_conv_adaptor_vpgen.h" #include "agg_vpgen_segmentator.h" namespace agg { //========================================================conv_segmentator template struct conv_segmentator : public conv_adaptor_vpgen { typedef conv_adaptor_vpgen base_type; conv_segmentator(VertexSource& vs) : conv_adaptor_vpgen(vs) {} void approximation_scale(double s) { base_type::vpgen().approximation_scale(s); } double approximation_scale() const { return base_type::vpgen().approximation_scale(); } private: conv_segmentator(const conv_segmentator&); const conv_segmentator& operator = (const conv_segmentator&); }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_shorten_path.h000066400000000000000000000033041262555547000226430ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CONV_SHORTEN_PATH_INCLUDED #define AGG_CONV_SHORTEN_PATH_INCLUDED #include "agg_basics.h" #include "agg_conv_adaptor_vcgen.h" #include "agg_vcgen_vertex_sequence.h" namespace agg { //=======================================================conv_shorten_path template class conv_shorten_path : public conv_adaptor_vcgen { public: typedef conv_adaptor_vcgen base_type; conv_shorten_path(VertexSource& vs) : conv_adaptor_vcgen(vs) { } void shorten(double s) { base_type::generator().shorten(s); } double shorten() const { return base_type::generator().shorten(); } private: conv_shorten_path(const conv_shorten_path&); const conv_shorten_path& operator = (const conv_shorten_path&); }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_smooth_poly1.h000066400000000000000000000054011262555547000226020ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Smooth polygon generator // //---------------------------------------------------------------------------- #ifndef AGG_CONV_SMOOTH_POLY1_INCLUDED #define AGG_CONV_SMOOTH_POLY1_INCLUDED #include "agg_basics.h" #include "agg_vcgen_smooth_poly1.h" #include "agg_conv_adaptor_vcgen.h" #include "agg_conv_curve.h" namespace agg { //-------------------------------------------------------conv_smooth_poly1 template struct conv_smooth_poly1 : public conv_adaptor_vcgen { typedef conv_adaptor_vcgen base_type; conv_smooth_poly1(VertexSource& vs) : conv_adaptor_vcgen(vs) { } void smooth_value(double v) { base_type::generator().smooth_value(v); } double smooth_value() const { return base_type::generator().smooth_value(); } unsigned type() const { return base_type::type(); } private: conv_smooth_poly1(const conv_smooth_poly1&); const conv_smooth_poly1& operator = (const conv_smooth_poly1&); }; //-------------------------------------------------conv_smooth_poly1_curve template struct conv_smooth_poly1_curve : public conv_curve > { conv_smooth_poly1_curve(VertexSource& vs) : conv_curve >(m_smooth), m_smooth(vs) { } void smooth_value(double v) { m_smooth.generator().smooth_value(v); } double smooth_value() const { return m_smooth.generator().smooth_value(); } unsigned type() const { return m_smooth.type(); } private: conv_smooth_poly1_curve(const conv_smooth_poly1_curve&); const conv_smooth_poly1_curve& operator = (const conv_smooth_poly1_curve&); conv_smooth_poly1 m_smooth; }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_stroke.h000066400000000000000000000061141262555547000214560ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // conv_stroke // //---------------------------------------------------------------------------- #ifndef AGG_CONV_STROKE_INCLUDED #define AGG_CONV_STROKE_INCLUDED #include "agg_basics.h" #include "agg_vcgen_stroke.h" #include "agg_conv_adaptor_vcgen.h" namespace agg { //-------------------------------------------------------------conv_stroke template struct conv_stroke : public conv_adaptor_vcgen { typedef Markers marker_type; typedef conv_adaptor_vcgen base_type; conv_stroke(VertexSource& vs) : conv_adaptor_vcgen(vs) { } void line_cap(line_cap_e lc) { base_type::generator().line_cap(lc); } void line_join(line_join_e lj) { base_type::generator().line_join(lj); } void inner_join(inner_join_e ij) { base_type::generator().inner_join(ij); } line_cap_e line_cap() const { return base_type::generator().line_cap(); } line_join_e line_join() const { return base_type::generator().line_join(); } inner_join_e inner_join() const { return base_type::generator().inner_join(); } void width(double w) { base_type::generator().width(w); } void miter_limit(double ml) { base_type::generator().miter_limit(ml); } void miter_limit_theta(double t) { base_type::generator().miter_limit_theta(t); } void inner_miter_limit(double ml) { base_type::generator().inner_miter_limit(ml); } void approximation_scale(double as) { base_type::generator().approximation_scale(as); } double width() const { return base_type::generator().width(); } double miter_limit() const { return base_type::generator().miter_limit(); } double inner_miter_limit() const { return base_type::generator().inner_miter_limit(); } double approximation_scale() const { return base_type::generator().approximation_scale(); } void shorten(double s) { base_type::generator().shorten(s); } double shorten() const { return base_type::generator().shorten(); } private: conv_stroke(const conv_stroke&); const conv_stroke& operator = (const conv_stroke&); }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_transform.h000066400000000000000000000041071262555547000221620ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class conv_transform // //---------------------------------------------------------------------------- #ifndef AGG_CONV_TRANSFORM_INCLUDED #define AGG_CONV_TRANSFORM_INCLUDED #include "agg_basics.h" #include "agg_trans_affine.h" namespace agg { //----------------------------------------------------------conv_transform template class conv_transform { public: conv_transform(VertexSource& source, Transformer& tr) : m_source(&source), m_trans(&tr) {} void attach(VertexSource& source) { m_source = &source; } void rewind(unsigned path_id) { m_source->rewind(path_id); } unsigned vertex(double* x, double* y) { unsigned cmd = m_source->vertex(x, y); if(is_vertex(cmd)) { m_trans->transform(x, y); } return cmd; } void transformer(Transformer& tr) { m_trans = &tr; } unsigned type() const { return m_source->type(); } private: conv_transform(const conv_transform&); const conv_transform& operator = (const conv_transform&); VertexSource* m_source; const Transformer* m_trans; }; } #endif mapnik-3.0.9/deps/agg/include/agg_conv_unclose_polygon.h000066400000000000000000000032541262555547000233700ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CONV_UNCLOSE_POLYGON_INCLUDED #define AGG_CONV_UNCLOSE_POLYGON_INCLUDED #include "agg_basics.h" namespace agg { //====================================================conv_unclose_polygon template class conv_unclose_polygon { public: explicit conv_unclose_polygon(VertexSource& vs) : m_source(&vs) {} void attach(VertexSource& source) { m_source = &source; } void rewind(unsigned path_id) { m_source->rewind(path_id); } unsigned vertex(double* x, double* y) { unsigned cmd = m_source->vertex(x, y); if(is_end_poly(cmd)) cmd &= ~path_flags_close; return cmd; } private: conv_unclose_polygon(const conv_unclose_polygon&); const conv_unclose_polygon& operator = (const conv_unclose_polygon&); VertexSource* m_source; }; } #endif mapnik-3.0.9/deps/agg/include/agg_curves.h000066400000000000000000000470471262555547000204430ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // Copyright (C) 2005 Tony Juricic (tonygeek@yahoo.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_CURVES_INCLUDED #define AGG_CURVES_INCLUDED #include "agg_array.h" #include namespace agg { // See Implementation agg_curves.cpp //--------------------------------------------curve_approximation_method_e enum curve_approximation_method_e { curve_inc, curve_div }; //--------------------------------------------------------------curve3_inc class MAPNIK_DECL curve3_inc { public: curve3_inc() : m_num_steps(0), m_step(0), m_scale(1.0) { } curve3_inc(double x1, double y1, double x2, double y2, double x3, double y3) : m_num_steps(0), m_step(0), m_scale(1.0) { init(x1, y1, x2, y2, x3, y3); } void reset() { m_num_steps = 0; m_step = -1; } void init(double x1, double y1, double x2, double y2, double x3, double y3); void approximation_method(curve_approximation_method_e) {} curve_approximation_method_e approximation_method() const { return curve_inc; } void approximation_scale(double s); double approximation_scale() const; void angle_tolerance(double) {} double angle_tolerance() const { return 0.0; } void cusp_limit(double) {} double cusp_limit() const { return 0.0; } void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: int m_num_steps; int m_step; double m_scale; double m_start_x; double m_start_y; double m_end_x; double m_end_y; double m_fx; double m_fy; double m_dfx; double m_dfy; double m_ddfx; double m_ddfy; double m_saved_fx; double m_saved_fy; double m_saved_dfx; double m_saved_dfy; }; //-------------------------------------------------------------curve3_div class MAPNIK_DECL curve3_div { public: curve3_div() : m_approximation_scale(1.0), m_angle_tolerance(0.0), m_count(0) {} curve3_div(double x1, double y1, double x2, double y2, double x3, double y3) : m_approximation_scale(1.0), m_angle_tolerance(0.0), m_count(0) { init(x1, y1, x2, y2, x3, y3); } void reset() { m_points.remove_all(); m_count = 0; } void init(double x1, double y1, double x2, double y2, double x3, double y3); void approximation_method(curve_approximation_method_e) {} curve_approximation_method_e approximation_method() const { return curve_div; } void approximation_scale(double s) { m_approximation_scale = s; } double approximation_scale() const { return m_approximation_scale; } void angle_tolerance(double a) { m_angle_tolerance = a; } double angle_tolerance() const { return m_angle_tolerance; } void cusp_limit(double) {} double cusp_limit() const { return 0.0; } void rewind(unsigned) { m_count = 0; } unsigned vertex(double* x, double* y) { if(m_count >= m_points.size()) return path_cmd_stop; const point_d& p = m_points[m_count++]; *x = p.x; *y = p.y; return (m_count == 1) ? path_cmd_move_to : path_cmd_line_to; } private: void bezier(double x1, double y1, double x2, double y2, double x3, double y3); void recursive_bezier(double x1, double y1, double x2, double y2, double x3, double y3, unsigned level); double m_approximation_scale; double m_distance_tolerance_square; double m_angle_tolerance; unsigned m_count; pod_bvector m_points; }; //-------------------------------------------------------------curve4_points struct MAPNIK_DECL curve4_points { double cp[8]; curve4_points() {} curve4_points(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { cp[0] = x1; cp[1] = y1; cp[2] = x2; cp[3] = y2; cp[4] = x3; cp[5] = y3; cp[6] = x4; cp[7] = y4; } void init(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { cp[0] = x1; cp[1] = y1; cp[2] = x2; cp[3] = y2; cp[4] = x3; cp[5] = y3; cp[6] = x4; cp[7] = y4; } double operator [] (unsigned i) const { return cp[i]; } double& operator [] (unsigned i) { return cp[i]; } }; //-------------------------------------------------------------curve4_inc class MAPNIK_DECL curve4_inc { public: curve4_inc() : m_num_steps(0), m_step(0), m_scale(1.0) { } curve4_inc(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) : m_num_steps(0), m_step(0), m_scale(1.0) { init(x1, y1, x2, y2, x3, y3, x4, y4); } curve4_inc(const curve4_points& cp) : m_num_steps(0), m_step(0), m_scale(1.0) { init(cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } void reset() { m_num_steps = 0; m_step = -1; } void init(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4); void init(const curve4_points& cp) { init(cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } void approximation_method(curve_approximation_method_e) {} curve_approximation_method_e approximation_method() const { return curve_inc; } void approximation_scale(double s); double approximation_scale() const; void angle_tolerance(double) {} double angle_tolerance() const { return 0.0; } void cusp_limit(double) {} double cusp_limit() const { return 0.0; } void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: int m_num_steps; int m_step; double m_scale; double m_start_x; double m_start_y; double m_end_x; double m_end_y; double m_fx; double m_fy; double m_dfx; double m_dfy; double m_ddfx; double m_ddfy; double m_dddfx; double m_dddfy; double m_saved_fx; double m_saved_fy; double m_saved_dfx; double m_saved_dfy; double m_saved_ddfx; double m_saved_ddfy; }; //-------------------------------------------------------catrom_to_bezier inline curve4_points catrom_to_bezier(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { // Trans. matrix Catmull-Rom to Bezier // // 0 1 0 0 // -1/6 1 1/6 0 // 0 1/6 1 -1/6 // 0 0 1 0 // return curve4_points( x2, y2, (-x1 + 6*x2 + x3) / 6, (-y1 + 6*y2 + y3) / 6, ( x2 + 6*x3 - x4) / 6, ( y2 + 6*y3 - y4) / 6, x3, y3); } //----------------------------------------------------------------------- inline curve4_points catrom_to_bezier(const curve4_points& cp) { return catrom_to_bezier(cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } //-----------------------------------------------------ubspline_to_bezier inline curve4_points ubspline_to_bezier(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { // Trans. matrix Uniform BSpline to Bezier // // 1/6 4/6 1/6 0 // 0 4/6 2/6 0 // 0 2/6 4/6 0 // 0 1/6 4/6 1/6 // return curve4_points( (x1 + 4*x2 + x3) / 6, (y1 + 4*y2 + y3) / 6, (4*x2 + 2*x3) / 6, (4*y2 + 2*y3) / 6, (2*x2 + 4*x3) / 6, (2*y2 + 4*y3) / 6, (x2 + 4*x3 + x4) / 6, (y2 + 4*y3 + y4) / 6); } //----------------------------------------------------------------------- inline curve4_points ubspline_to_bezier(const curve4_points& cp) { return ubspline_to_bezier(cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } //------------------------------------------------------hermite_to_bezier inline curve4_points hermite_to_bezier(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { // Trans. matrix Hermite to Bezier // // 1 0 0 0 // 1 0 1/3 0 // 0 1 0 -1/3 // 0 1 0 0 // return curve4_points( x1, y1, (3*x1 + x3) / 3, (3*y1 + y3) / 3, (3*x2 - x4) / 3, (3*y2 - y4) / 3, x2, y2); } //----------------------------------------------------------------------- inline curve4_points hermite_to_bezier(const curve4_points& cp) { return hermite_to_bezier(cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } //-------------------------------------------------------------curve4_div class MAPNIK_DECL curve4_div { public: curve4_div() : m_approximation_scale(1.0), m_angle_tolerance(0.0), m_cusp_limit(0.0), m_count(0) {} curve4_div(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) : m_approximation_scale(1.0), m_angle_tolerance(0.0), m_cusp_limit(0.0), m_count(0) { init(x1, y1, x2, y2, x3, y3, x4, y4); } curve4_div(const curve4_points& cp) : m_approximation_scale(1.0), m_angle_tolerance(0.0), m_count(0) { init(cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } void reset() { m_points.remove_all(); m_count = 0; } void init(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4); void init(const curve4_points& cp) { init(cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } void approximation_method(curve_approximation_method_e) {} curve_approximation_method_e approximation_method() const { return curve_div; } void approximation_scale(double s) { m_approximation_scale = s; } double approximation_scale() const { return m_approximation_scale; } void angle_tolerance(double a) { m_angle_tolerance = a; } double angle_tolerance() const { return m_angle_tolerance; } void cusp_limit(double v) { m_cusp_limit = (v == 0.0) ? 0.0 : pi - v; } double cusp_limit() const { return (m_cusp_limit == 0.0) ? 0.0 : pi - m_cusp_limit; } void rewind(unsigned) { m_count = 0; } unsigned vertex(double* x, double* y) { if(m_count >= m_points.size()) return path_cmd_stop; const point_d& p = m_points[m_count++]; *x = p.x; *y = p.y; return (m_count == 1) ? path_cmd_move_to : path_cmd_line_to; } private: void bezier(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4); void recursive_bezier(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, unsigned level); double m_approximation_scale; double m_distance_tolerance_square; double m_angle_tolerance; double m_cusp_limit; unsigned m_count; pod_bvector m_points; }; //-----------------------------------------------------------------curve3 class MAPNIK_DECL curve3 { public: curve3() : m_approximation_method(curve_div) {} curve3(double x1, double y1, double x2, double y2, double x3, double y3) : m_approximation_method(curve_div) { init(x1, y1, x2, y2, x3, y3); } void reset() { m_curve_inc.reset(); m_curve_div.reset(); } void init(double x1, double y1, double x2, double y2, double x3, double y3) { if(m_approximation_method == curve_inc) { m_curve_inc.init(x1, y1, x2, y2, x3, y3); } else { m_curve_div.init(x1, y1, x2, y2, x3, y3); } } void approximation_method(curve_approximation_method_e v) { m_approximation_method = v; } curve_approximation_method_e approximation_method() const { return m_approximation_method; } void approximation_scale(double s) { m_curve_inc.approximation_scale(s); m_curve_div.approximation_scale(s); } double approximation_scale() const { return m_curve_inc.approximation_scale(); } void angle_tolerance(double a) { m_curve_div.angle_tolerance(a); } double angle_tolerance() const { return m_curve_div.angle_tolerance(); } void cusp_limit(double v) { m_curve_div.cusp_limit(v); } double cusp_limit() const { return m_curve_div.cusp_limit(); } void rewind(unsigned path_id) { if(m_approximation_method == curve_inc) { m_curve_inc.rewind(path_id); } else { m_curve_div.rewind(path_id); } } unsigned vertex(double* x, double* y) { if(m_approximation_method == curve_inc) { return m_curve_inc.vertex(x, y); } return m_curve_div.vertex(x, y); } private: curve3_inc m_curve_inc; curve3_div m_curve_div; curve_approximation_method_e m_approximation_method; }; //-----------------------------------------------------------------curve4 class MAPNIK_DECL curve4 { public: curve4() : m_approximation_method(curve_div) {} curve4(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) : m_approximation_method(curve_div) { init(x1, y1, x2, y2, x3, y3, x4, y4); } curve4(const curve4_points& cp) : m_approximation_method(curve_div) { init(cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } void reset() { m_curve_inc.reset(); m_curve_div.reset(); } void init(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { if(m_approximation_method == curve_inc) { m_curve_inc.init(x1, y1, x2, y2, x3, y3, x4, y4); } else { m_curve_div.init(x1, y1, x2, y2, x3, y3, x4, y4); } } void init(const curve4_points& cp) { init(cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]); } void approximation_method(curve_approximation_method_e v) { m_approximation_method = v; } curve_approximation_method_e approximation_method() const { return m_approximation_method; } void approximation_scale(double s) { m_curve_inc.approximation_scale(s); m_curve_div.approximation_scale(s); } double approximation_scale() const { return m_curve_inc.approximation_scale(); } void angle_tolerance(double v) { m_curve_div.angle_tolerance(v); } double angle_tolerance() const { return m_curve_div.angle_tolerance(); } void cusp_limit(double v) { m_curve_div.cusp_limit(v); } double cusp_limit() const { return m_curve_div.cusp_limit(); } void rewind(unsigned path_id) { if(m_approximation_method == curve_inc) { m_curve_inc.rewind(path_id); } else { m_curve_div.rewind(path_id); } } unsigned vertex(double* x, double* y) { if(m_approximation_method == curve_inc) { return m_curve_inc.vertex(x, y); } return m_curve_div.vertex(x, y); } private: curve4_inc m_curve_inc; curve4_div m_curve_div; curve_approximation_method_e m_approximation_method; }; } #endif mapnik-3.0.9/deps/agg/include/agg_dda_line.h000066400000000000000000000204251262555547000206620ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // classes dda_line_interpolator, dda2_line_interpolator // //---------------------------------------------------------------------------- #ifndef AGG_DDA_LINE_INCLUDED #define AGG_DDA_LINE_INCLUDED #include #include "agg_basics.h" namespace agg { //===================================================dda_line_interpolator template class dda_line_interpolator { public: //-------------------------------------------------------------------- dda_line_interpolator() {} //-------------------------------------------------------------------- dda_line_interpolator(int y1, int y2, unsigned count) : m_y(y1), m_inc(((y2 - y1) << FractionShift) / int(count)), m_dy(0) { } //-------------------------------------------------------------------- void operator ++ () { m_dy += m_inc; } //-------------------------------------------------------------------- void operator -- () { m_dy -= m_inc; } //-------------------------------------------------------------------- void operator += (unsigned n) { m_dy += m_inc * n; } //-------------------------------------------------------------------- void operator -= (unsigned n) { m_dy -= m_inc * n; } //-------------------------------------------------------------------- int y() const { return m_y + (m_dy >> (FractionShift-YShift)); } int dy() const { return m_dy; } private: int m_y; int m_inc; int m_dy; }; //=================================================dda2_line_interpolator class dda2_line_interpolator { public: typedef int save_data_type; enum save_size_e { save_size = 2 }; //-------------------------------------------------------------------- dda2_line_interpolator() {} //-------------------------------------------- Forward-adjusted line dda2_line_interpolator(int y1, int y2, int count) : m_cnt(count <= 0 ? 1 : count), m_lft((y2 - y1) / m_cnt), m_rem((y2 - y1) % m_cnt), m_mod(m_rem), m_y(y1) { if(m_mod <= 0) { m_mod += count; m_rem += count; m_lft--; } m_mod -= count; } //-------------------------------------------- Backward-adjusted line dda2_line_interpolator(int y1, int y2, int count, int) : m_cnt(count <= 0 ? 1 : count), m_lft((y2 - y1) / m_cnt), m_rem((y2 - y1) % m_cnt), m_mod(m_rem), m_y(y1) { if(m_mod <= 0) { m_mod += count; m_rem += count; m_lft--; } } //-------------------------------------------- Backward-adjusted line dda2_line_interpolator(int y, int count) : m_cnt(count <= 0 ? 1 : count), m_lft(y / m_cnt), m_rem(y % m_cnt), m_mod(m_rem), m_y(0) { if(m_mod <= 0) { m_mod += count; m_rem += count; m_lft--; } } //-------------------------------------------------------------------- void save(save_data_type* data) const { data[0] = m_mod; data[1] = m_y; } //-------------------------------------------------------------------- void load(const save_data_type* data) { m_mod = data[0]; m_y = data[1]; } //-------------------------------------------------------------------- void operator++() { m_mod += m_rem; m_y += m_lft; if(m_mod > 0) { m_mod -= m_cnt; m_y++; } } //-------------------------------------------------------------------- void operator--() { if(m_mod <= m_rem) { m_mod += m_cnt; m_y--; } m_mod -= m_rem; m_y -= m_lft; } //-------------------------------------------------------------------- void adjust_forward() { m_mod -= m_cnt; } //-------------------------------------------------------------------- void adjust_backward() { m_mod += m_cnt; } //-------------------------------------------------------------------- int mod() const { return m_mod; } int rem() const { return m_rem; } int lft() const { return m_lft; } //-------------------------------------------------------------------- int y() const { return m_y; } private: int m_cnt; int m_lft; int m_rem; int m_mod; int m_y; }; //---------------------------------------------line_bresenham_interpolator class line_bresenham_interpolator { public: enum subpixel_scale_e { subpixel_shift = 8, subpixel_scale = 1 << subpixel_shift, subpixel_mask = subpixel_scale - 1 }; //-------------------------------------------------------------------- static int line_lr(int v) { return v >> subpixel_shift; } //-------------------------------------------------------------------- line_bresenham_interpolator(int x1, int y1, int x2, int y2) : m_x1_lr(line_lr(x1)), m_y1_lr(line_lr(y1)), m_x2_lr(line_lr(x2)), m_y2_lr(line_lr(y2)), m_ver(std::abs(m_x2_lr - m_x1_lr) < std::abs(m_y2_lr - m_y1_lr)), m_len(m_ver ? std::abs(m_y2_lr - m_y1_lr) : std::abs(m_x2_lr - m_x1_lr)), m_inc(m_ver ? ((y2 > y1) ? 1 : -1) : ((x2 > x1) ? 1 : -1)), m_interpolator(m_ver ? x1 : y1, m_ver ? x2 : y2, m_len) { } //-------------------------------------------------------------------- bool is_ver() const { return m_ver; } unsigned len() const { return m_len; } int inc() const { return m_inc; } //-------------------------------------------------------------------- void hstep() { ++m_interpolator; m_x1_lr += m_inc; } //-------------------------------------------------------------------- void vstep() { ++m_interpolator; m_y1_lr += m_inc; } //-------------------------------------------------------------------- int x1() const { return m_x1_lr; } int y1() const { return m_y1_lr; } int x2() const { return line_lr(m_interpolator.y()); } int y2() const { return line_lr(m_interpolator.y()); } int x2_hr() const { return m_interpolator.y(); } int y2_hr() const { return m_interpolator.y(); } private: int m_x1_lr; int m_y1_lr; int m_x2_lr; int m_y2_lr; bool m_ver; unsigned m_len; int m_inc; dda2_line_interpolator m_interpolator; }; } #endif mapnik-3.0.9/deps/agg/include/agg_ellipse.h000066400000000000000000000072071262555547000205630ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class ellipse // //---------------------------------------------------------------------------- #ifndef AGG_ELLIPSE_INCLUDED #define AGG_ELLIPSE_INCLUDED #include "agg_basics.h" #include namespace agg { //----------------------------------------------------------------ellipse class ellipse { public: ellipse() : m_x(0.0), m_y(0.0), m_rx(1.0), m_ry(1.0), m_scale(1.0), m_num(4), m_step(0), m_cw(false) {} ellipse(double x, double y, double rx, double ry, unsigned num_steps=0, bool cw=false) : m_x(x), m_y(y), m_rx(rx), m_ry(ry), m_scale(1.0), m_num(num_steps), m_step(0), m_cw(cw) { if(m_num == 0) calc_num_steps(); } void init(double x, double y, double rx, double ry, unsigned num_steps=0, bool cw=false); void approximation_scale(double scale); void rewind(unsigned path_id); unsigned vertex(double* x, double* y); unsigned num_steps() { return m_num; } private: void calc_num_steps(); double m_x; double m_y; double m_rx; double m_ry; double m_scale; unsigned m_num; unsigned m_step; bool m_cw; }; //------------------------------------------------------------------------ inline void ellipse::init(double x, double y, double rx, double ry, unsigned num_steps, bool cw) { m_x = x; m_y = y; m_rx = rx; m_ry = ry; m_num = num_steps; m_step = 0; m_cw = cw; if(m_num == 0) calc_num_steps(); } //------------------------------------------------------------------------ inline void ellipse::approximation_scale(double scale) { m_scale = scale; calc_num_steps(); } //------------------------------------------------------------------------ inline void ellipse::calc_num_steps() { double ra = (std::fabs(m_rx) + std::fabs(m_ry)) / 2; double da = std::acos(ra / (ra + 0.125 / m_scale)) * 2; m_num = uround(2*pi / da); } //------------------------------------------------------------------------ inline void ellipse::rewind(unsigned) { m_step = 0; } //------------------------------------------------------------------------ inline unsigned ellipse::vertex(double* x, double* y) { if(m_step == m_num) { ++m_step; return path_cmd_end_poly | path_flags_close | path_flags_ccw; } if(m_step > m_num) return path_cmd_stop; double angle = double(m_step) / double(m_num) * 2.0 * pi; if(m_cw) angle = 2.0 * pi - angle; *x = m_x + std::cos(angle) * m_rx; *y = m_y + std::sin(angle) * m_ry; m_step++; return ((m_step == 1) ? path_cmd_move_to : path_cmd_line_to); } } #endif mapnik-3.0.9/deps/agg/include/agg_ellipse_bresenham.h000066400000000000000000000054231262555547000226050ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Simple Bresenham interpolator for ellipsees // //---------------------------------------------------------------------------- #ifndef AGG_ELLIPSE_BRESENHAM_INCLUDED #define AGG_ELLIPSE_BRESENHAM_INCLUDED #include "agg_basics.h" namespace agg { //------------------------------------------ellipse_bresenham_interpolator class ellipse_bresenham_interpolator { public: ellipse_bresenham_interpolator(int rx, int ry) : m_rx2(rx * rx), m_ry2(ry * ry), m_two_rx2(m_rx2 << 1), m_two_ry2(m_ry2 << 1), m_dx(0), m_dy(0), m_inc_x(0), m_inc_y(-ry * m_two_rx2), m_cur_f(0) {} int dx() const { return m_dx; } int dy() const { return m_dy; } void operator++ () { int mx, my, mxy, min_m; int fx, fy, fxy; mx = fx = m_cur_f + m_inc_x + m_ry2; if(mx < 0) mx = -mx; my = fy = m_cur_f + m_inc_y + m_rx2; if(my < 0) my = -my; mxy = fxy = m_cur_f + m_inc_x + m_ry2 + m_inc_y + m_rx2; if(mxy < 0) mxy = -mxy; min_m = mx; bool flag = true; if(min_m > my) { min_m = my; flag = false; } m_dx = m_dy = 0; if(min_m > mxy) { m_inc_x += m_two_ry2; m_inc_y += m_two_rx2; m_cur_f = fxy; m_dx = 1; m_dy = 1; return; } if(flag) { m_inc_x += m_two_ry2; m_cur_f = fx; m_dx = 1; return; } m_inc_y += m_two_rx2; m_cur_f = fy; m_dy = 1; } private: int m_rx2; int m_ry2; int m_two_rx2; int m_two_ry2; int m_dx; int m_dy; int m_inc_x; int m_inc_y; int m_cur_f; }; } #endif mapnik-3.0.9/deps/agg/include/agg_embedded_raster_fonts.h000066400000000000000000000041431262555547000234440ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_EMBEDDED_RASTER_FONTS_INCLUDED #define AGG_EMBEDDED_RASTER_FONTS_INCLUDED #include "agg_basics.h" namespace agg { extern const int8u gse4x6[]; extern const int8u gse4x8[]; extern const int8u gse5x7[]; extern const int8u gse5x9[]; extern const int8u gse6x12[]; extern const int8u gse6x9[]; extern const int8u gse7x11[]; extern const int8u gse7x11_bold[]; extern const int8u gse7x15[]; extern const int8u gse7x15_bold[]; extern const int8u gse8x16[]; extern const int8u gse8x16_bold[]; extern const int8u mcs11_prop[]; extern const int8u mcs11_prop_condensed[]; extern const int8u mcs12_prop[]; extern const int8u mcs13_prop[]; extern const int8u mcs5x10_mono[]; extern const int8u mcs5x11_mono[]; extern const int8u mcs6x10_mono[]; extern const int8u mcs6x11_mono[]; extern const int8u mcs7x12_mono_high[]; extern const int8u mcs7x12_mono_low[]; extern const int8u verdana12[]; extern const int8u verdana12_bold[]; extern const int8u verdana13[]; extern const int8u verdana13_bold[]; extern const int8u verdana14[]; extern const int8u verdana14_bold[]; extern const int8u verdana16[]; extern const int8u verdana16_bold[]; extern const int8u verdana17[]; extern const int8u verdana17_bold[]; extern const int8u verdana18[]; extern const int8u verdana18_bold[]; } #endif mapnik-3.0.9/deps/agg/include/agg_font_cache_manager.h000066400000000000000000000345131262555547000227110ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_FONT_CACHE_MANAGER_INCLUDED #define AGG_FONT_CACHE_MANAGER_INCLUDED #include #include "agg_array.h" namespace agg { //---------------------------------------------------------glyph_data_type enum glyph_data_type { glyph_data_invalid = 0, glyph_data_mono = 1, glyph_data_gray8 = 2, glyph_data_outline = 3 }; //-------------------------------------------------------------glyph_cache struct glyph_cache { unsigned glyph_index; int8u* data; unsigned data_size; glyph_data_type data_type; rect_i bounds; double advance_x; double advance_y; }; //--------------------------------------------------------------font_cache class font_cache { public: enum block_size_e { block_size = 16384-16 }; //-------------------------------------------------------------------- font_cache() : m_allocator(block_size), m_font_signature(0) {} //-------------------------------------------------------------------- void signature(const char* font_signature) { m_font_signature = (char*)m_allocator.allocate(strlen(font_signature) + 1); strcpy(m_font_signature, font_signature); memset(m_glyphs, 0, sizeof(m_glyphs)); } //-------------------------------------------------------------------- bool font_is(const char* font_signature) const { return strcmp(font_signature, m_font_signature) == 0; } //-------------------------------------------------------------------- const glyph_cache* find_glyph(unsigned glyph_code) const { unsigned msb = (glyph_code >> 8) & 0xFF; if(m_glyphs[msb]) { return m_glyphs[msb][glyph_code & 0xFF]; } return 0; } //-------------------------------------------------------------------- glyph_cache* cache_glyph(unsigned glyph_code, unsigned glyph_index, unsigned data_size, glyph_data_type data_type, const rect_i& bounds, double advance_x, double advance_y) { unsigned msb = (glyph_code >> 8) & 0xFF; if(m_glyphs[msb] == 0) { m_glyphs[msb] = (glyph_cache**)m_allocator.allocate(sizeof(glyph_cache*) * 256, sizeof(glyph_cache*)); memset(m_glyphs[msb], 0, sizeof(glyph_cache*) * 256); } unsigned lsb = glyph_code & 0xFF; if(m_glyphs[msb][lsb]) return 0; // Already exists, do not overwrite glyph_cache* glyph = (glyph_cache*)m_allocator.allocate(sizeof(glyph_cache), sizeof(double)); glyph->glyph_index = glyph_index; glyph->data = m_allocator.allocate(data_size); glyph->data_size = data_size; glyph->data_type = data_type; glyph->bounds = bounds; glyph->advance_x = advance_x; glyph->advance_y = advance_y; return m_glyphs[msb][lsb] = glyph; } private: block_allocator m_allocator; glyph_cache** m_glyphs[256]; char* m_font_signature; }; //---------------------------------------------------------font_cache_pool class font_cache_pool { public: //-------------------------------------------------------------------- ~font_cache_pool() { unsigned i; for(i = 0; i < m_num_fonts; ++i) { obj_allocator::deallocate(m_fonts[i]); } pod_allocator::deallocate(m_fonts, m_max_fonts); } //-------------------------------------------------------------------- font_cache_pool(unsigned max_fonts=32) : m_fonts(pod_allocator::allocate(max_fonts)), m_max_fonts(max_fonts), m_num_fonts(0), m_cur_font(0) {} //-------------------------------------------------------------------- void font(const char* font_signature, bool reset_cache = false) { int idx = find_font(font_signature); if(idx >= 0) { if(reset_cache) { obj_allocator::deallocate(m_fonts[idx]); m_fonts[idx] = obj_allocator::allocate(); m_fonts[idx]->signature(font_signature); } m_cur_font = m_fonts[idx]; } else { if(m_num_fonts >= m_max_fonts) { obj_allocator::deallocate(m_fonts[0]); memcpy(m_fonts, m_fonts + 1, (m_max_fonts - 1) * sizeof(font_cache*)); m_num_fonts = m_max_fonts - 1; } m_fonts[m_num_fonts] = obj_allocator::allocate(); m_fonts[m_num_fonts]->signature(font_signature); m_cur_font = m_fonts[m_num_fonts]; ++m_num_fonts; } } //-------------------------------------------------------------------- const font_cache* font() const { return m_cur_font; } //-------------------------------------------------------------------- const glyph_cache* find_glyph(unsigned glyph_code) const { if(m_cur_font) return m_cur_font->find_glyph(glyph_code); return 0; } //-------------------------------------------------------------------- glyph_cache* cache_glyph(unsigned glyph_code, unsigned glyph_index, unsigned data_size, glyph_data_type data_type, const rect_i& bounds, double advance_x, double advance_y) { if(m_cur_font) { return m_cur_font->cache_glyph(glyph_code, glyph_index, data_size, data_type, bounds, advance_x, advance_y); } return 0; } //-------------------------------------------------------------------- int find_font(const char* font_signature) { unsigned i; for(i = 0; i < m_num_fonts; i++) { if(m_fonts[i]->font_is(font_signature)) return int(i); } return -1; } private: font_cache** m_fonts; unsigned m_max_fonts; unsigned m_num_fonts; font_cache* m_cur_font; }; //------------------------------------------------------------------------ enum glyph_rendering { glyph_ren_native_mono, glyph_ren_native_gray8, glyph_ren_outline, glyph_ren_agg_mono, glyph_ren_agg_gray8 }; //------------------------------------------------------font_cache_manager template class font_cache_manager { public: typedef FontEngine font_engine_type; typedef font_cache_manager self_type; typedef typename font_engine_type::path_adaptor_type path_adaptor_type; typedef typename font_engine_type::gray8_adaptor_type gray8_adaptor_type; typedef typename gray8_adaptor_type::embedded_scanline gray8_scanline_type; typedef typename font_engine_type::mono_adaptor_type mono_adaptor_type; typedef typename mono_adaptor_type::embedded_scanline mono_scanline_type; //-------------------------------------------------------------------- font_cache_manager(font_engine_type& engine, unsigned max_fonts=32) : m_fonts(max_fonts), m_engine(engine), m_change_stamp(-1), m_prev_glyph(0), m_last_glyph(0) {} //-------------------------------------------------------------------- void reset_last_glyph() { m_prev_glyph = m_last_glyph = 0; } //-------------------------------------------------------------------- const glyph_cache* glyph(unsigned glyph_code) { synchronize(); const glyph_cache* gl = m_fonts.find_glyph(glyph_code); if(gl) { m_prev_glyph = m_last_glyph; return m_last_glyph = gl; } else { if(m_engine.prepare_glyph(glyph_code)) { m_prev_glyph = m_last_glyph; m_last_glyph = m_fonts.cache_glyph(glyph_code, m_engine.glyph_index(), m_engine.data_size(), m_engine.data_type(), m_engine.bounds(), m_engine.advance_x(), m_engine.advance_y()); m_engine.write_glyph_to(m_last_glyph->data); return m_last_glyph; } } return 0; } //-------------------------------------------------------------------- void init_embedded_adaptors(const glyph_cache* gl, double x, double y, double scale=1.0) { if(gl) { switch(gl->data_type) { default: return; case glyph_data_mono: m_mono_adaptor.init(gl->data, gl->data_size, x, y); break; case glyph_data_gray8: m_gray8_adaptor.init(gl->data, gl->data_size, x, y); break; case glyph_data_outline: m_path_adaptor.init(gl->data, gl->data_size, x, y, scale); break; } } } //-------------------------------------------------------------------- path_adaptor_type& path_adaptor() { return m_path_adaptor; } gray8_adaptor_type& gray8_adaptor() { return m_gray8_adaptor; } gray8_scanline_type& gray8_scanline() { return m_gray8_scanline; } mono_adaptor_type& mono_adaptor() { return m_mono_adaptor; } mono_scanline_type& mono_scanline() { return m_mono_scanline; } //-------------------------------------------------------------------- const glyph_cache* perv_glyph() const { return m_prev_glyph; } const glyph_cache* last_glyph() const { return m_last_glyph; } //-------------------------------------------------------------------- bool add_kerning(double* x, double* y) { if(m_prev_glyph && m_last_glyph) { return m_engine.add_kerning(m_prev_glyph->glyph_index, m_last_glyph->glyph_index, x, y); } return false; } //-------------------------------------------------------------------- void precache(unsigned from, unsigned to) { for(; from <= to; ++from) glyph(from); } //-------------------------------------------------------------------- void reset_cache() { m_fonts.font(m_engine.font_signature(), true); m_change_stamp = m_engine.change_stamp(); m_prev_glyph = m_last_glyph = 0; } private: //-------------------------------------------------------------------- font_cache_manager(const self_type&); const self_type& operator = (const self_type&); //-------------------------------------------------------------------- void synchronize() { if(m_change_stamp != m_engine.change_stamp()) { m_fonts.font(m_engine.font_signature()); m_change_stamp = m_engine.change_stamp(); m_prev_glyph = m_last_glyph = 0; } } font_cache_pool m_fonts; font_engine_type& m_engine; int m_change_stamp; double m_dx; double m_dy; const glyph_cache* m_prev_glyph; const glyph_cache* m_last_glyph; path_adaptor_type m_path_adaptor; gray8_adaptor_type m_gray8_adaptor; gray8_scanline_type m_gray8_scanline; mono_adaptor_type m_mono_adaptor; mono_scanline_type m_mono_scanline; }; } #endif mapnik-3.0.9/deps/agg/include/agg_gamma_functions.h000066400000000000000000000072401262555547000222750ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_GAMMA_FUNCTIONS_INCLUDED #define AGG_GAMMA_FUNCTIONS_INCLUDED #include #include "agg_basics.h" namespace agg { //===============================================================gamma_none struct gamma_none { double operator()(double x) const { return x; } }; //==============================================================gamma_power class gamma_power { public: gamma_power() : m_gamma(1.0) {} gamma_power(double g) : m_gamma(g) {} void gamma(double g) { m_gamma = g; } double gamma() const { return m_gamma; } double operator() (double x) const { if (x == 0.0) return 0.0; return pow(x, m_gamma); } private: double m_gamma; }; //==========================================================gamma_threshold class gamma_threshold { public: gamma_threshold() : m_threshold(0.5) {} gamma_threshold(double t) : m_threshold(t) {} void threshold(double t) { m_threshold = t; } double threshold() const { return m_threshold; } double operator() (double x) const { return (x < m_threshold) ? 0.0 : 1.0; } private: double m_threshold; }; //============================================================gamma_linear class gamma_linear { public: gamma_linear() : m_start(0.0), m_end(1.0) {} gamma_linear(double s, double e) : m_start(s), m_end(e) {} void set(double s, double e) { m_start = s; m_end = e; } void start(double s) { m_start = s; } void end(double e) { m_end = e; } double start() const { return m_start; } double end() const { return m_end; } double operator() (double x) const { if(x < m_start) return 0.0; if(x > m_end) return 1.0; double delta = m_end - m_start; // avoid nan from potential zero division // https://github.com/mapnik/mapnik/issues/761 if (delta <= 0.0) return 0.0; return (x - m_start) / delta; } private: double m_start; double m_end; }; //==========================================================gamma_multiply class gamma_multiply { public: gamma_multiply() : m_mul(1.0) {} gamma_multiply(double v) : m_mul(v) {} void value(double v) { m_mul = v; } double value() const { return m_mul; } double operator() (double x) const { double y = x * m_mul; if(y > 1.0) y = 1.0; return y; } private: double m_mul; }; inline double sRGB_to_linear(double x) { return (x <= 0.04045) ? (x / 12.92) : pow((x + 0.055) / (1.055), 2.4); } inline double linear_to_sRGB(double x) { return (x <= 0.0031308) ? (x * 12.92) : (1.055 * pow(x, 1 / 2.4) - 0.055); } } #endif mapnik-3.0.9/deps/agg/include/agg_gamma_lut.h000066400000000000000000000201341262555547000210660ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_GAMMA_LUT_INCLUDED #define AGG_GAMMA_LUT_INCLUDED #include #include "agg_basics.h" #include "agg_gamma_functions.h" namespace agg { template class gamma_lut { public: typedef gamma_lut self_type; enum gamma_scale_e { gamma_shift = GammaShift, gamma_size = 1 << gamma_shift, gamma_mask = gamma_size - 1 }; enum hi_res_scale_e { hi_res_shift = HiResShift, hi_res_size = 1 << hi_res_shift, hi_res_mask = hi_res_size - 1 }; ~gamma_lut() { pod_allocator::deallocate(m_inv_gamma, hi_res_size); pod_allocator::deallocate(m_dir_gamma, gamma_size); } gamma_lut() : m_gamma(1.0), m_dir_gamma(pod_allocator::allocate(gamma_size)), m_inv_gamma(pod_allocator::allocate(hi_res_size)) { unsigned i; for(i = 0; i < gamma_size; i++) { m_dir_gamma[i] = HiResT(i << (hi_res_shift - gamma_shift)); } for(i = 0; i < hi_res_size; i++) { m_inv_gamma[i] = LoResT(i >> (hi_res_shift - gamma_shift)); } } gamma_lut(double g) : m_gamma(1.0), m_dir_gamma(pod_allocator::allocate(gamma_size)), m_inv_gamma(pod_allocator::allocate(hi_res_size)) { gamma(g); } void gamma(double g) { m_gamma = g; unsigned i; for(i = 0; i < gamma_size; i++) { m_dir_gamma[i] = (HiResT) uround(pow(i / double(gamma_mask), m_gamma) * double(hi_res_mask)); } double inv_g = 1.0 / g; for(i = 0; i < hi_res_size; i++) { m_inv_gamma[i] = (LoResT) uround(pow(i / double(hi_res_mask), inv_g) * double(gamma_mask)); } } double gamma() const { return m_gamma; } HiResT dir(LoResT v) const { return m_dir_gamma[unsigned(v)]; } LoResT inv(HiResT v) const { return m_inv_gamma[unsigned(v)]; } private: gamma_lut(const self_type&); const self_type& operator = (const self_type&); double m_gamma; HiResT* m_dir_gamma; LoResT* m_inv_gamma; }; // // sRGB support classes // // Optimized sRGB lookup table. The direct conversion (sRGB to linear) // is a straightforward lookup. The inverse conversion (linear to sRGB) // is implemented using binary search. template class sRGB_lut_base { public: LinearType dir(int8u v) const { return m_dir_table[v]; } int8u inv(LinearType v) const { // Unrolled binary search. int8u x = 0; if (v > m_inv_table[128]) x = 128; if (v > m_inv_table[x + 64]) x += 64; if (v > m_inv_table[x + 32]) x += 32; if (v > m_inv_table[x + 16]) x += 16; if (v > m_inv_table[x + 8]) x += 8; if (v > m_inv_table[x + 4]) x += 4; if (v > m_inv_table[x + 2]) x += 2; if (v > m_inv_table[x + 1]) x += 1; return x; } protected: LinearType m_dir_table[256]; LinearType m_inv_table[256]; // Only derived classes may instantiate. sRGB_lut_base() { } }; // sRGB_lut - implements sRGB conversion for the various types. // Base template is undefined, specializations are provided below. template class sRGB_lut; template<> class sRGB_lut : public sRGB_lut_base { public: sRGB_lut() { // Generate lookup tables. m_dir_table[0] = 0; m_inv_table[0] = 0; for (unsigned i = 1; i <= 255; ++i) { // Floating-point RGB is in range [0,1]. m_dir_table[i] = float(sRGB_to_linear(i / 255.0)); m_inv_table[i] = float(sRGB_to_linear((i - 0.5) / 255.0)); } } }; template<> class sRGB_lut : public sRGB_lut_base { public: sRGB_lut() { // Generate lookup tables. m_dir_table[0] = 0; m_inv_table[0] = 0; for (unsigned i = 1; i <= 255; ++i) { // 16-bit RGB is in range [0,65535]. m_dir_table[i] = uround(65535.0 * sRGB_to_linear(i / 255.0)); m_inv_table[i] = uround(65535.0 * sRGB_to_linear((i - 0.5) / 255.0)); } } }; template<> class sRGB_lut : public sRGB_lut_base { public: sRGB_lut() { // Generate lookup tables. m_dir_table[0] = 0; m_inv_table[0] = 0; for (unsigned i = 1; i <= 255; ++i) { // 8-bit RGB is handled with simple bidirectional lookup tables. m_dir_table[i] = uround(255.0 * sRGB_to_linear(i / 255.0)); m_inv_table[i] = uround(255.0 * linear_to_sRGB(i / 255.0)); } } int8u inv(int8u v) const { // In this case, the inverse transform is a simple lookup. return m_inv_table[v]; } }; // Common base class for sRGB_conv objects. Defines an internal // sRGB_lut object so that users don't have to. template class sRGB_conv_base { public: static T rgb_from_sRGB(int8u x) { return lut.dir(x); } static int8u rgb_to_sRGB(T x) { return lut.inv(x); } private: static sRGB_lut lut; }; // Definition of sRGB_conv_base::lut. Due to the fact that this a template, // we don't need to place the definition in a cpp file. Hurrah. template sRGB_lut sRGB_conv_base::lut; // Wrapper for sRGB-linear conversion. // Base template is undefined, specializations are provided below. template class sRGB_conv; template<> class sRGB_conv : public sRGB_conv_base { public: static float alpha_from_sRGB(int8u x) { return float(x / 255.0); } static int8u alpha_to_sRGB(float x) { if (x <= 0) return 0; else if (x >= 1) return 255; else return int8u(0.5 + x * 255); } }; template<> class sRGB_conv : public sRGB_conv_base { public: static int16u alpha_from_sRGB(int8u x) { return (x << 8) | x; } static int8u alpha_to_sRGB(int16u x) { return x >> 8; } }; template<> class sRGB_conv : public sRGB_conv_base { public: static int8u alpha_from_sRGB(int8u x) { return x; } static int8u alpha_to_sRGB(int8u x) { return x; } }; } #endif mapnik-3.0.9/deps/agg/include/agg_glyph_raster_bin.h000066400000000000000000000114161262555547000224560ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_GLYPH_RASTER_BIN_INCLUDED #define AGG_GLYPH_RASTER_BIN_INCLUDED #include #include "agg_basics.h" namespace agg { //========================================================glyph_raster_bin template class glyph_raster_bin { public: typedef ColorT color_type; //-------------------------------------------------------------------- struct glyph_rect { int x1,y1,x2,y2; double dx, dy; }; //-------------------------------------------------------------------- glyph_raster_bin(const int8u* font) : m_font(font), m_big_endian(false) { int t = 1; if(*(char*)&t == 0) m_big_endian = true; memset(m_span, 0, sizeof(m_span)); } //-------------------------------------------------------------------- const int8u* font() const { return m_font; } void font(const int8u* f) { m_font = f; } //-------------------------------------------------------------------- double height() const { return m_font[0]; } double base_line() const { return m_font[1]; } //-------------------------------------------------------------------- template double width(const CharT* str) const { unsigned start_char = m_font[2]; unsigned num_chars = m_font[3]; unsigned w = 0; while(*str) { unsigned glyph = *str; const int8u* bits = m_font + 4 + num_chars * 2 + value(m_font + 4 + (glyph - start_char) * 2); w += *bits; ++str; } return w; } //-------------------------------------------------------------------- void prepare(glyph_rect* r, double x, double y, unsigned glyph, bool flip) { unsigned start_char = m_font[2]; unsigned num_chars = m_font[3]; m_bits = m_font + 4 + num_chars * 2 + value(m_font + 4 + (glyph - start_char) * 2); m_glyph_width = *m_bits++; m_glyph_byte_width = (m_glyph_width + 7) >> 3; r->x1 = int(x); r->x2 = r->x1 + m_glyph_width - 1; if(flip) { r->y1 = int(y) - m_font[0] + m_font[1]; r->y2 = r->y1 + m_font[0] - 1; } else { r->y1 = int(y) - m_font[1] + 1; r->y2 = r->y1 + m_font[0] - 1; } r->dx = m_glyph_width; r->dy = 0; } //-------------------------------------------------------------------- const cover_type* span(unsigned i) { i = m_font[0] - i - 1; const int8u* bits = m_bits + i * m_glyph_byte_width; unsigned j; unsigned val = *bits; unsigned nb = 0; for(j = 0; j < m_glyph_width; ++j) { m_span[j] = (cover_type)((val & 0x80) ? cover_full : cover_none); val <<= 1; if(++nb >= 8) { val = *++bits; nb = 0; } } return m_span; } private: //-------------------------------------------------------------------- int16u value(const int8u* p) const { int16u v; if(m_big_endian) { *(int8u*)&v = p[1]; *((int8u*)&v + 1) = p[0]; } else { *(int8u*)&v = p[0]; *((int8u*)&v + 1) = p[1]; } return v; } //-------------------------------------------------------------------- const int8u* m_font; bool m_big_endian; cover_type m_span[32]; const int8u* m_bits; unsigned m_glyph_width; unsigned m_glyph_byte_width; }; } #endif mapnik-3.0.9/deps/agg/include/agg_gradient_lut.h000066400000000000000000000167141262555547000216120ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_GRADIENT_LUT_INCLUDED #define AGG_GRADIENT_LUT_INCLUDED #include "agg_array.h" #include "agg_dda_line.h" #include "agg_color_rgba.h" #include "agg_color_gray.h" namespace agg { //======================================================color_interpolator template struct color_interpolator { public: typedef ColorT color_type; color_interpolator(const color_type& c1, const color_type& c2, unsigned len) : m_c1(c1), m_c2(c2), m_len(len), m_count(0) {} void operator ++ () { ++m_count; } color_type color() const { return m_c1.gradient(m_c2, double(m_count) / m_len); } private: color_type m_c1; color_type m_c2; unsigned m_len; unsigned m_count; }; //======================================================================== // Fast specialization for rgba8 template<> struct color_interpolator { public: typedef rgba8 color_type; color_interpolator(const color_type& c1, const color_type& c2, unsigned len) : r(c1.r, c2.r, len), g(c1.g, c2.g, len), b(c1.b, c2.b, len), a(c1.a, c2.a, len) {} void operator ++ () { ++r; ++g; ++b; ++a; } color_type color() const { return color_type(r.y(), g.y(), b.y(), a.y()); } private: agg::dda_line_interpolator<14> r, g, b, a; }; //======================================================================== // Fast specialization for gray8 template<> struct color_interpolator { public: typedef gray8 color_type; color_interpolator(const color_type& c1, const color_type& c2, unsigned len) : v(c1.v, c2.v, len), a(c1.a, c2.a, len) {} void operator ++ () { ++v; ++a; } color_type color() const { return color_type(v.y(), a.y()); } private: agg::dda_line_interpolator<14> v,a; }; //============================================================gradient_lut template class gradient_lut { public: typedef ColorInterpolator interpolator_type; typedef typename interpolator_type::color_type color_type; enum { color_lut_size = ColorLutSize }; //-------------------------------------------------------------------- gradient_lut() : m_color_lut(color_lut_size) {} // Build Gradient Lut // First, call remove_all(), then add_color() at least twice, // then build_lut(). Argument "offset" in add_color must be // in range [0...1] and defines a color stop as it is described // in SVG specification, section Gradients and Patterns. // The simplest linear gradient is: // gradient_lut.add_color(0.0, start_color); // gradient_lut.add_color(1.0, end_color); //-------------------------------------------------------------------- void remove_all(); void add_color(double offset, const color_type& color); bool build_lut(); // Size-index Interface. This class can be used directly as the // ColorF in span_gradient. All it needs is two access methods // size() and operator []. //-------------------------------------------------------------------- static unsigned size() { return color_lut_size; } const color_type& operator [] (unsigned i) const { return m_color_lut[i]; } private: //-------------------------------------------------------------------- struct color_point { double offset; color_type color; color_point() {} color_point(double off, const color_type& c) : offset(off), color(c) { if(offset < 0.0) offset = 0.0; if(offset > 1.0) offset = 1.0; } }; typedef agg::pod_bvector color_profile_type; typedef agg::pod_array color_lut_type; static bool offset_less(const color_point& a, const color_point& b) { return a.offset < b.offset; } static bool offset_equal(const color_point& a, const color_point& b) { return a.offset == b.offset; } //-------------------------------------------------------------------- color_profile_type m_color_profile; color_lut_type m_color_lut; }; //------------------------------------------------------------------------ template void gradient_lut::remove_all() { m_color_profile.remove_all(); } //------------------------------------------------------------------------ template void gradient_lut::add_color(double offset, const color_type& color) { m_color_profile.add(color_point(offset, color)); } //------------------------------------------------------------------------ template bool gradient_lut::build_lut() { quick_sort(m_color_profile, offset_less); m_color_profile.cut_at(remove_duplicates(m_color_profile, offset_equal)); if(m_color_profile.size() >= 2) { unsigned i; unsigned start = uround(m_color_profile[0].offset * color_lut_size); unsigned end = 0; color_type c = m_color_profile[0].color; for(i = 0; i < start; i++) { m_color_lut[i] = c; } for(i = 1; i < m_color_profile.size(); i++) { end = uround(m_color_profile[i].offset * color_lut_size); interpolator_type ci(m_color_profile[i-1].color, m_color_profile[i ].color, end - start + 1); while(start < end) { m_color_lut[start] = ci.color(); ++ci; ++start; } } c = m_color_profile.last().color; for(; end < m_color_lut.size(); end++) { m_color_lut[end] = c; } return true; } return false; } } #endif mapnik-3.0.9/deps/agg/include/agg_gsv_text.h000066400000000000000000000076771262555547000210040ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Class gsv_text // //---------------------------------------------------------------------------- #ifndef AGG_GSV_TEXT_INCLUDED #define AGG_GSV_TEXT_INCLUDED #include "agg_array.h" #include "agg_conv_stroke.h" #include "agg_conv_transform.h" namespace agg { //---------------------------------------------------------------gsv_text // // See Implementation agg_gsv_text.cpp // class gsv_text { enum status { initial, next_char, start_glyph, glyph }; public: gsv_text(); void font(const void* font); void flip(bool flip_y) { m_flip = flip_y; } void load_font(const char* file); void size(double height, double width=0.0); void space(double space); void line_space(double line_space); void start_point(double x, double y); void text(const char* text); double text_width(); void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: // not supposed to be copied gsv_text(const gsv_text&); const gsv_text& operator = (const gsv_text&); int16u value(const int8u* p) const { int16u v; if(m_big_endian) { *(int8u*)&v = p[1]; *((int8u*)&v + 1) = p[0]; } else { *(int8u*)&v = p[0]; *((int8u*)&v + 1) = p[1]; } return v; } private: double m_x; double m_y; double m_start_x; double m_width; double m_height; double m_space; double m_line_space; char m_chr[2]; char* m_text; pod_array m_text_buf; char* m_cur_chr; const void* m_font; pod_array m_loaded_font; status m_status; bool m_big_endian; bool m_flip; int8u* m_indices; int8* m_glyphs; int8* m_bglyph; int8* m_eglyph; double m_w; double m_h; }; //--------------------------------------------------------gsv_text_outline template class gsv_text_outline { public: gsv_text_outline(gsv_text& text, const Transformer& trans) : m_polyline(text), m_trans(m_polyline, trans) { } void width(double w) { m_polyline.width(w); } void transformer(const Transformer* trans) { m_trans->transformer(trans); } void rewind(unsigned path_id) { m_trans.rewind(path_id); m_polyline.line_join(round_join); m_polyline.line_cap(round_cap); } unsigned vertex(double* x, double* y) { return m_trans.vertex(x, y); } private: conv_stroke m_polyline; conv_transform, Transformer> m_trans; }; } #endif mapnik-3.0.9/deps/agg/include/agg_image_accessors.h000066400000000000000000000315061262555547000222540ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_IMAGE_ACCESSORS_INCLUDED #define AGG_IMAGE_ACCESSORS_INCLUDED #include "agg_basics.h" namespace agg { //-----------------------------------------------------image_accessor_clip template class image_accessor_clip { public: typedef PixFmt pixfmt_type; typedef typename pixfmt_type::color_type color_type; typedef typename pixfmt_type::order_type order_type; typedef typename pixfmt_type::value_type value_type; enum pix_width_e { pix_width = pixfmt_type::pix_width }; image_accessor_clip() {} explicit image_accessor_clip(const pixfmt_type& pixf, const color_type& bk) : m_pixf(&pixf) { pixfmt_type::make_pix(m_bk_buf, bk); } void attach(const pixfmt_type& pixf) { m_pixf = &pixf; } void background_color(const color_type& bk) { pixfmt_type::make_pix(m_bk_buf, bk); } private: AGG_INLINE const int8u* pixel() const { if(m_y >= 0 && m_y < (int)m_pixf->height() && m_x >= 0 && m_x < (int)m_pixf->width()) { return m_pixf->pix_ptr(m_x, m_y); } return m_bk_buf; } public: AGG_INLINE const int8u* span(int x, int y, unsigned len) { m_x = m_x0 = x; m_y = y; if(y >= 0 && y < (int)m_pixf->height() && x >= 0 && x+(int)len <= (int)m_pixf->width()) { return m_pix_ptr = m_pixf->pix_ptr(x, y); } m_pix_ptr = 0; return pixel(); } AGG_INLINE const int8u* next_x() { if(m_pix_ptr) return m_pix_ptr += pix_width; ++m_x; return pixel(); } AGG_INLINE const int8u* next_y() { ++m_y; m_x = m_x0; if(m_pix_ptr && m_y >= 0 && m_y < (int)m_pixf->height()) { return m_pix_ptr = m_pixf->pix_ptr(m_x, m_y); } m_pix_ptr = 0; return pixel(); } private: const pixfmt_type* m_pixf; int8u m_bk_buf[4]; int m_x, m_x0, m_y; const int8u* m_pix_ptr; }; //--------------------------------------------------image_accessor_no_clip template class image_accessor_no_clip { public: typedef PixFmt pixfmt_type; typedef typename pixfmt_type::color_type color_type; typedef typename pixfmt_type::order_type order_type; typedef typename pixfmt_type::value_type value_type; enum pix_width_e { pix_width = pixfmt_type::pix_width }; image_accessor_no_clip() {} explicit image_accessor_no_clip(const pixfmt_type& pixf) : m_pixf(&pixf) {} void attach(const pixfmt_type& pixf) { m_pixf = &pixf; } AGG_INLINE const int8u* span(int x, int y, unsigned) { m_x = x; m_y = y; return m_pix_ptr = m_pixf->pix_ptr(x, y); } AGG_INLINE const int8u* next_x() { return m_pix_ptr += pix_width; } AGG_INLINE const int8u* next_y() { ++m_y; return m_pix_ptr = m_pixf->pix_ptr(m_x, m_y); } private: const pixfmt_type* m_pixf; int m_x, m_y; const int8u* m_pix_ptr; }; //----------------------------------------------------image_accessor_clone template class image_accessor_clone { public: typedef PixFmt pixfmt_type; typedef typename pixfmt_type::color_type color_type; typedef typename pixfmt_type::order_type order_type; typedef typename pixfmt_type::value_type value_type; enum pix_width_e { pix_width = pixfmt_type::pix_width }; image_accessor_clone() {} explicit image_accessor_clone(const pixfmt_type& pixf) : m_pixf(&pixf) {} void attach(const pixfmt_type& pixf) { m_pixf = &pixf; } private: AGG_INLINE const int8u* pixel() const { int x = m_x; int y = m_y; if(x < 0) x = 0; if(y < 0) y = 0; if(x >= (int)m_pixf->width()) x = m_pixf->width() - 1; if(y >= (int)m_pixf->height()) y = m_pixf->height() - 1; return m_pixf->pix_ptr(x, y); } public: AGG_INLINE const int8u* span(int x, int y, unsigned len) { m_x = m_x0 = x; m_y = y; if(y >= 0 && y < (int)m_pixf->height() && x >= 0 && x+(int)len <= (int)m_pixf->width()) { return m_pix_ptr = m_pixf->pix_ptr(x, y); } m_pix_ptr = 0; return pixel(); } AGG_INLINE const int8u* next_x() { if(m_pix_ptr) return m_pix_ptr += pix_width; ++m_x; return pixel(); } AGG_INLINE const int8u* next_y() { ++m_y; m_x = m_x0; if(m_pix_ptr && m_y >= 0 && m_y < (int)m_pixf->height()) { return m_pix_ptr = m_pixf->pix_ptr(m_x, m_y); } m_pix_ptr = 0; return pixel(); } private: const pixfmt_type* m_pixf; int m_x, m_x0, m_y; const int8u* m_pix_ptr; }; //-----------------------------------------------------image_accessor_wrap template class image_accessor_wrap { public: typedef PixFmt pixfmt_type; typedef typename pixfmt_type::color_type color_type; typedef typename pixfmt_type::order_type order_type; typedef typename pixfmt_type::value_type value_type; enum pix_width_e { pix_width = pixfmt_type::pix_width }; image_accessor_wrap() {} explicit image_accessor_wrap(const pixfmt_type& pixf) : m_pixf(&pixf), m_wrap_x(pixf.width()), m_wrap_y(pixf.height()) {} void attach(const pixfmt_type& pixf) { m_pixf = &pixf; } AGG_INLINE const int8u* span(int x, int y, unsigned) { m_x = x; m_row_ptr = m_pixf->row_ptr(m_wrap_y(y)); return m_row_ptr + m_wrap_x(x) * pix_width; } AGG_INLINE const int8u* next_x() { int x = ++m_wrap_x; return m_row_ptr + x * pix_width; } AGG_INLINE const int8u* next_y() { m_row_ptr = m_pixf->row_ptr(++m_wrap_y); return m_row_ptr + m_wrap_x(m_x) * pix_width; } private: const pixfmt_type* m_pixf; const int8u* m_row_ptr; int m_x; WrapX m_wrap_x; WrapY m_wrap_y; }; //--------------------------------------------------------wrap_mode_repeat class wrap_mode_repeat { public: wrap_mode_repeat() {} wrap_mode_repeat(unsigned size) : m_size(size), m_add(size * (0x3FFFFFFF / size)), m_value(0) {} AGG_INLINE unsigned operator() (int v) { return m_value = (unsigned(v) + m_add) % m_size; } AGG_INLINE unsigned operator++ () { ++m_value; if(m_value >= m_size) m_value = 0; return m_value; } private: unsigned m_size; unsigned m_add; unsigned m_value; }; //---------------------------------------------------wrap_mode_repeat_pow2 class wrap_mode_repeat_pow2 { public: wrap_mode_repeat_pow2() {} wrap_mode_repeat_pow2(unsigned size) : m_value(0) { m_mask = 1; while(m_mask < size) m_mask = (m_mask << 1) | 1; m_mask >>= 1; } AGG_INLINE unsigned operator() (int v) { return m_value = unsigned(v) & m_mask; } AGG_INLINE unsigned operator++ () { ++m_value; if(m_value > m_mask) m_value = 0; return m_value; } private: unsigned m_mask; unsigned m_value; }; //----------------------------------------------wrap_mode_repeat_auto_pow2 class wrap_mode_repeat_auto_pow2 { public: wrap_mode_repeat_auto_pow2() {} wrap_mode_repeat_auto_pow2(unsigned size) : m_size(size), m_add(size * (0x3FFFFFFF / size)), m_mask((m_size & (m_size-1)) ? 0 : m_size-1), m_value(0) {} AGG_INLINE unsigned operator() (int v) { if(m_mask) return m_value = unsigned(v) & m_mask; return m_value = (unsigned(v) + m_add) % m_size; } AGG_INLINE unsigned operator++ () { ++m_value; if(m_value >= m_size) m_value = 0; return m_value; } private: unsigned m_size; unsigned m_add; unsigned m_mask; unsigned m_value; }; //-------------------------------------------------------wrap_mode_reflect class wrap_mode_reflect { public: wrap_mode_reflect() {} wrap_mode_reflect(unsigned size) : m_size(size), m_size2(size * 2), m_add(m_size2 * (0x3FFFFFFF / m_size2)), m_value(0) {} AGG_INLINE unsigned operator() (int v) { m_value = (unsigned(v) + m_add) % m_size2; if(m_value >= m_size) return m_size2 - m_value - 1; return m_value; } AGG_INLINE unsigned operator++ () { ++m_value; if(m_value >= m_size2) m_value = 0; if(m_value >= m_size) return m_size2 - m_value - 1; return m_value; } private: unsigned m_size; unsigned m_size2; unsigned m_add; unsigned m_value; }; //--------------------------------------------------wrap_mode_reflect_pow2 class wrap_mode_reflect_pow2 { public: wrap_mode_reflect_pow2() {} wrap_mode_reflect_pow2(unsigned size) : m_value(0) { m_mask = 1; m_size = 1; while(m_mask < size) { m_mask = (m_mask << 1) | 1; m_size <<= 1; } } AGG_INLINE unsigned operator() (int v) { m_value = unsigned(v) & m_mask; if(m_value >= m_size) return m_mask - m_value; return m_value; } AGG_INLINE unsigned operator++ () { ++m_value; m_value &= m_mask; if(m_value >= m_size) return m_mask - m_value; return m_value; } private: unsigned m_size; unsigned m_mask; unsigned m_value; }; //---------------------------------------------wrap_mode_reflect_auto_pow2 class wrap_mode_reflect_auto_pow2 { public: wrap_mode_reflect_auto_pow2() {} wrap_mode_reflect_auto_pow2(unsigned size) : m_size(size), m_size2(size * 2), m_add(m_size2 * (0x3FFFFFFF / m_size2)), m_mask((m_size2 & (m_size2-1)) ? 0 : m_size2-1), m_value(0) {} AGG_INLINE unsigned operator() (int v) { m_value = m_mask ? unsigned(v) & m_mask : (unsigned(v) + m_add) % m_size2; if(m_value >= m_size) return m_size2 - m_value - 1; return m_value; } AGG_INLINE unsigned operator++ () { ++m_value; if(m_value >= m_size2) m_value = 0; if(m_value >= m_size) return m_size2 - m_value - 1; return m_value; } private: unsigned m_size; unsigned m_size2; unsigned m_add; unsigned m_mask; unsigned m_value; }; } #endif mapnik-3.0.9/deps/agg/include/agg_image_filters.h000066400000000000000000000351141262555547000217360ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Image transformation filters, // Filtering classes (image_filter_lut, image_filter), // Basic filter shape classes //---------------------------------------------------------------------------- #ifndef AGG_IMAGE_FILTERS_INCLUDED #define AGG_IMAGE_FILTERS_INCLUDED #include "agg_array.h" #include "agg_math.h" namespace agg { // See Implementation agg_image_filters.cpp enum image_filter_scale_e { image_filter_shift = 14, //----image_filter_shift image_filter_scale = 1 << image_filter_shift, //----image_filter_scale image_filter_mask = image_filter_scale - 1 //----image_filter_mask }; enum image_subpixel_scale_e { image_subpixel_shift = 8, //----image_subpixel_shift image_subpixel_scale = 1 << image_subpixel_shift, //----image_subpixel_scale image_subpixel_mask = image_subpixel_scale - 1 //----image_subpixel_mask }; //-----------------------------------------------------image_filter_lut class image_filter_lut { public: template void calculate(const FilterF& filter, bool normalization=true) { double r = filter.radius(); realloc_lut(r); unsigned i; unsigned pivot = diameter() << (image_subpixel_shift - 1); for(i = 0; i < pivot; i++) { double x = double(i) / double(image_subpixel_scale); double y = filter.calc_weight(x); m_weight_array[pivot + i] = m_weight_array[pivot - i] = (int16)iround(y * image_filter_scale); } unsigned end = (diameter() << image_subpixel_shift) - 1; m_weight_array[0] = m_weight_array[end]; if(normalization) { normalize(); } } image_filter_lut() : m_radius(0), m_diameter(0), m_start(0) {} template image_filter_lut(const FilterF& filter, bool normalization=true) { calculate(filter, normalization); } double radius() const { return m_radius; } unsigned diameter() const { return m_diameter; } int start() const { return m_start; } const int16* weight_array() const { return &m_weight_array[0]; } void normalize(); private: void realloc_lut(double radius); image_filter_lut(const image_filter_lut&); const image_filter_lut& operator = (const image_filter_lut&); double m_radius; unsigned m_diameter; int m_start; pod_array m_weight_array; }; //--------------------------------------------------------image_filter template class image_filter : public image_filter_lut { public: image_filter() { calculate(m_filter_function); } private: FilterF m_filter_function; }; //-----------------------------------------------image_filter_bilinear struct image_filter_bilinear { static double radius() { return 1.0; } static double calc_weight(double x) { return 1.0 - x; } }; //-----------------------------------------------image_filter_hanning struct image_filter_hanning { static double radius() { return 1.0; } static double calc_weight(double x) { return 0.5 + 0.5 * std::cos(pi * x); } }; //-----------------------------------------------image_filter_hamming struct image_filter_hamming { static double radius() { return 1.0; } static double calc_weight(double x) { return 0.54 + 0.46 * std::cos(pi * x); } }; //-----------------------------------------------image_filter_hermite struct image_filter_hermite { static double radius() { return 1.0; } static double calc_weight(double x) { return (2.0 * x - 3.0) * x * x + 1.0; } }; //------------------------------------------------image_filter_quadric struct image_filter_quadric { static double radius() { return 1.5; } static double calc_weight(double x) { double t; if(x < 0.5) return 0.75 - x * x; if(x < 1.5) {t = x - 1.5; return 0.5 * t * t;} return 0.0; } }; //------------------------------------------------image_filter_bicubic class image_filter_bicubic { static double pow3(double x) { return (x <= 0.0) ? 0.0 : x * x * x; } public: static double radius() { return 2.0; } static double calc_weight(double x) { return (1.0/6.0) * (pow3(x + 2) - 4 * pow3(x + 1) + 6 * pow3(x) - 4 * pow3(x - 1)); } }; //-------------------------------------------------image_filter_kaiser class image_filter_kaiser { double a; double i0a; double epsilon; public: image_filter_kaiser(double b = 6.33) : a(b), epsilon(1e-12) { i0a = 1.0 / bessel_i0(b); } static double radius() { return 1.0; } double calc_weight(double x) const { return bessel_i0(a * sqrt(1. - x * x)) * i0a; } private: double bessel_i0(double x) const { int i; double sum, y, t; sum = 1.; y = x * x / 4.; t = y; for(i = 2; t > epsilon; i++) { sum += t; t *= (double)y / (i * i); } return sum; } }; //----------------------------------------------image_filter_catrom struct image_filter_catrom { static double radius() { return 2.0; } static double calc_weight(double x) { if(x < 1.0) return 0.5 * (2.0 + x * x * (-5.0 + x * 3.0)); if(x < 2.0) return 0.5 * (4.0 + x * (-8.0 + x * (5.0 - x))); return 0.; } }; //---------------------------------------------image_filter_mitchell class image_filter_mitchell { double p0, p2, p3; double q0, q1, q2, q3; public: image_filter_mitchell(double b = 1.0/3.0, double c = 1.0/3.0) : p0((6.0 - 2.0 * b) / 6.0), p2((-18.0 + 12.0 * b + 6.0 * c) / 6.0), p3((12.0 - 9.0 * b - 6.0 * c) / 6.0), q0((8.0 * b + 24.0 * c) / 6.0), q1((-12.0 * b - 48.0 * c) / 6.0), q2((6.0 * b + 30.0 * c) / 6.0), q3((-b - 6.0 * c) / 6.0) {} static double radius() { return 2.0; } double calc_weight(double x) const { if(x < 1.0) return p0 + x * x * (p2 + x * p3); if(x < 2.0) return q0 + x * (q1 + x * (q2 + x * q3)); return 0.0; } }; //----------------------------------------------image_filter_spline16 struct image_filter_spline16 { static double radius() { return 2.0; } static double calc_weight(double x) { if(x < 1.0) { return ((x - 9.0/5.0 ) * x - 1.0/5.0 ) * x + 1.0; } return ((-1.0/3.0 * (x-1) + 4.0/5.0) * (x-1) - 7.0/15.0 ) * (x-1); } }; //---------------------------------------------image_filter_spline36 struct image_filter_spline36 { static double radius() { return 3.0; } static double calc_weight(double x) { if(x < 1.0) { return ((13.0/11.0 * x - 453.0/209.0) * x - 3.0/209.0) * x + 1.0; } if(x < 2.0) { return ((-6.0/11.0 * (x-1) + 270.0/209.0) * (x-1) - 156.0/ 209.0) * (x-1); } return ((1.0/11.0 * (x-2) - 45.0/209.0) * (x-2) + 26.0/209.0) * (x-2); } }; //----------------------------------------------image_filter_gaussian struct image_filter_gaussian { static double radius() { return 2.0; } static double calc_weight(double x) { return exp(-2.0 * x * x) * sqrt(2.0 / pi); } }; //------------------------------------------------image_filter_bessel struct image_filter_bessel { static double radius() { return 3.2383; } static double calc_weight(double x) { return (x == 0.0) ? pi / 4.0 : besj(pi * x, 1) / (2.0 * x); } }; //-------------------------------------------------image_filter_sinc class image_filter_sinc { public: image_filter_sinc(double r) : m_radius(r < 2.0 ? 2.0 : r) {} double radius() const { return m_radius; } double calc_weight(double x) const { if(x == 0.0) return 1.0; x *= pi; return std::sin(x) / x; } private: double m_radius; }; //-----------------------------------------------image_filter_lanczos class image_filter_lanczos { public: image_filter_lanczos(double r) : m_radius(r < 2.0 ? 2.0 : r) {} double radius() const { return m_radius; } double calc_weight(double x) const { if(x == 0.0) return 1.0; if(x > m_radius) return 0.0; x *= pi; double xr = x / m_radius; return (std::sin(x) / x) * (std::sin(xr) / xr); } private: double m_radius; }; //----------------------------------------------image_filter_blackman class image_filter_blackman { public: image_filter_blackman(double r) : m_radius(r < 2.0 ? 2.0 : r) {} double radius() const { return m_radius; } double calc_weight(double x) const { if(x == 0.0) return 1.0; if(x > m_radius) return 0.0; x *= pi; double xr = x / m_radius; return (std::sin(x) / x) * (0.42 + 0.5 * std::cos(xr) + 0.08 * std::cos(2*xr)); } private: double m_radius; }; //------------------------------------------------image_filter_sinc36 class image_filter_sinc36 : public image_filter_sinc { public: image_filter_sinc36() : image_filter_sinc(3.0){} }; //------------------------------------------------image_filter_sinc64 class image_filter_sinc64 : public image_filter_sinc { public: image_filter_sinc64() : image_filter_sinc(4.0){} }; //-----------------------------------------------image_filter_sinc100 class image_filter_sinc100 : public image_filter_sinc { public: image_filter_sinc100() : image_filter_sinc(5.0){} }; //-----------------------------------------------image_filter_sinc144 class image_filter_sinc144 : public image_filter_sinc { public: image_filter_sinc144() : image_filter_sinc(6.0){} }; //-----------------------------------------------image_filter_sinc196 class image_filter_sinc196 : public image_filter_sinc { public: image_filter_sinc196() : image_filter_sinc(7.0){} }; //-----------------------------------------------image_filter_sinc256 class image_filter_sinc256 : public image_filter_sinc { public: image_filter_sinc256() : image_filter_sinc(8.0){} }; //---------------------------------------------image_filter_lanczos36 class image_filter_lanczos36 : public image_filter_lanczos { public: image_filter_lanczos36() : image_filter_lanczos(3.0){} }; //---------------------------------------------image_filter_lanczos64 class image_filter_lanczos64 : public image_filter_lanczos { public: image_filter_lanczos64() : image_filter_lanczos(4.0){} }; //--------------------------------------------image_filter_lanczos100 class image_filter_lanczos100 : public image_filter_lanczos { public: image_filter_lanczos100() : image_filter_lanczos(5.0){} }; //--------------------------------------------image_filter_lanczos144 class image_filter_lanczos144 : public image_filter_lanczos { public: image_filter_lanczos144() : image_filter_lanczos(6.0){} }; //--------------------------------------------image_filter_lanczos196 class image_filter_lanczos196 : public image_filter_lanczos { public: image_filter_lanczos196() : image_filter_lanczos(7.0){} }; //--------------------------------------------image_filter_lanczos256 class image_filter_lanczos256 : public image_filter_lanczos { public: image_filter_lanczos256() : image_filter_lanczos(8.0){} }; //--------------------------------------------image_filter_blackman36 class image_filter_blackman36 : public image_filter_blackman { public: image_filter_blackman36() : image_filter_blackman(3.0){} }; //--------------------------------------------image_filter_blackman64 class image_filter_blackman64 : public image_filter_blackman { public: image_filter_blackman64() : image_filter_blackman(4.0){} }; //-------------------------------------------image_filter_blackman100 class image_filter_blackman100 : public image_filter_blackman { public: image_filter_blackman100() : image_filter_blackman(5.0){} }; //-------------------------------------------image_filter_blackman144 class image_filter_blackman144 : public image_filter_blackman { public: image_filter_blackman144() : image_filter_blackman(6.0){} }; //-------------------------------------------image_filter_blackman196 class image_filter_blackman196 : public image_filter_blackman { public: image_filter_blackman196() : image_filter_blackman(7.0){} }; //-------------------------------------------image_filter_blackman256 class image_filter_blackman256 : public image_filter_blackman { public: image_filter_blackman256() : image_filter_blackman(8.0){} }; } #endif mapnik-3.0.9/deps/agg/include/agg_line_aa_basics.h000066400000000000000000000151541262555547000220420ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_LINE_AA_BASICS_INCLUDED #define AGG_LINE_AA_BASICS_INCLUDED #include #include "agg_basics.h" namespace agg { // See Implementation agg_line_aa_basics.cpp //------------------------------------------------------------------------- enum line_subpixel_scale_e { line_subpixel_shift = 8, //----line_subpixel_shift line_subpixel_scale = 1 << line_subpixel_shift, //----line_subpixel_scale line_subpixel_mask = line_subpixel_scale - 1, //----line_subpixel_mask line_max_coord = (1 << 28) - 1, //----line_max_coord line_max_length = 1 << (line_subpixel_shift + 10) //----line_max_length }; //------------------------------------------------------------------------- enum line_mr_subpixel_scale_e { line_mr_subpixel_shift = 4, //----line_mr_subpixel_shift line_mr_subpixel_scale = 1 << line_mr_subpixel_shift, //----line_mr_subpixel_scale line_mr_subpixel_mask = line_mr_subpixel_scale - 1 //----line_mr_subpixel_mask }; //------------------------------------------------------------------line_mr AGG_INLINE int line_mr(int x) { return x >> (line_subpixel_shift - line_mr_subpixel_shift); } //-------------------------------------------------------------------line_hr AGG_INLINE int line_hr(int x) { return x << (line_subpixel_shift - line_mr_subpixel_shift); } //---------------------------------------------------------------line_dbl_hr AGG_INLINE int line_dbl_hr(int x) { return x << line_subpixel_shift; } //---------------------------------------------------------------line_coord struct line_coord { AGG_INLINE static int conv(double x) { return iround(x * line_subpixel_scale); } }; //-----------------------------------------------------------line_coord_sat struct line_coord_sat { AGG_INLINE static int conv(double x) { return saturation::iround(x * line_subpixel_scale); } }; //==========================================================line_parameters struct line_parameters { //--------------------------------------------------------------------- line_parameters() {} line_parameters(int x1_, int y1_, int x2_, int y2_, int len_) : x1(x1_), y1(y1_), x2(x2_), y2(y2_), dx(std::abs(x2_ - x1_)), dy(std::abs(y2_ - y1_)), sx((x2_ > x1_) ? 1 : -1), sy((y2_ > y1_) ? 1 : -1), vertical(dy >= dx), inc(vertical ? sy : sx), len(len_), octant((sy & 4) | (sx & 2) | int(vertical)) { } //--------------------------------------------------------------------- unsigned orthogonal_quadrant() const { return s_orthogonal_quadrant[octant]; } unsigned diagonal_quadrant() const { return s_diagonal_quadrant[octant]; } //--------------------------------------------------------------------- bool same_orthogonal_quadrant(const line_parameters& lp) const { return s_orthogonal_quadrant[octant] == s_orthogonal_quadrant[lp.octant]; } //--------------------------------------------------------------------- bool same_diagonal_quadrant(const line_parameters& lp) const { return s_diagonal_quadrant[octant] == s_diagonal_quadrant[lp.octant]; } //--------------------------------------------------------------------- void divide(line_parameters& lp1, line_parameters& lp2) const { int xmid = (x1 + x2) >> 1; int ymid = (y1 + y2) >> 1; int len2 = len >> 1; lp1 = *this; lp2 = *this; lp1.x2 = xmid; lp1.y2 = ymid; lp1.len = len2; lp1.dx = std::abs(lp1.x2 - lp1.x1); lp1.dy = std::abs(lp1.y2 - lp1.y1); lp2.x1 = xmid; lp2.y1 = ymid; lp2.len = len2; lp2.dx = std::abs(lp2.x2 - lp2.x1); lp2.dy = std::abs(lp2.y2 - lp2.y1); } //--------------------------------------------------------------------- int x1, y1, x2, y2, dx, dy, sx, sy; bool vertical; int inc; int len; int octant; //--------------------------------------------------------------------- static const int8u s_orthogonal_quadrant[8]; static const int8u s_diagonal_quadrant[8]; }; // See Implementation agg_line_aa_basics.cpp //----------------------------------------------------------------bisectrix void bisectrix(const line_parameters& l1, const line_parameters& l2, int* x, int* y); //-------------------------------------------fix_degenerate_bisectrix_start void inline fix_degenerate_bisectrix_start(const line_parameters& lp, int* x, int* y) { int d = iround((double(*x - lp.x2) * double(lp.y2 - lp.y1) - double(*y - lp.y2) * double(lp.x2 - lp.x1)) / lp.len); if(d < line_subpixel_scale/2) { *x = lp.x1 + (lp.y2 - lp.y1); *y = lp.y1 - (lp.x2 - lp.x1); } } //---------------------------------------------fix_degenerate_bisectrix_end void inline fix_degenerate_bisectrix_end(const line_parameters& lp, int* x, int* y) { int d = iround((double(*x - lp.x2) * double(lp.y2 - lp.y1) - double(*y - lp.y2) * double(lp.x2 - lp.x1)) / lp.len); if(d < line_subpixel_scale/2) { *x = lp.x2 + (lp.y2 - lp.y1); *y = lp.y2 - (lp.x2 - lp.x1); } } } #endif mapnik-3.0.9/deps/agg/include/agg_math.h000066400000000000000000000350351262555547000200570ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // Bessel function (besj) was adapted for use in AGG library by Andy Wilk // Contact: castor.vulgaris@gmail.com //---------------------------------------------------------------------------- #ifndef AGG_MATH_INCLUDED #define AGG_MATH_INCLUDED #include #include "agg_basics.h" namespace agg { //------------------------------------------------------vertex_dist_epsilon // Coinciding points maximal distance (Epsilon) const double vertex_dist_epsilon = 1e-5; //-----------------------------------------------------intersection_epsilon // See calc_intersection const double intersection_epsilon = 1.0e-30; //------------------------------------------------------------cross_product AGG_INLINE double cross_product(double x1, double y1, double x2, double y2, double x, double y) { return (x - x2) * (y2 - y1) - (y - y2) * (x2 - x1); } //--------------------------------------------------------point_in_triangle AGG_INLINE bool point_in_triangle(double x1, double y1, double x2, double y2, double x3, double y3, double x, double y) { bool cp1 = cross_product(x1, y1, x2, y2, x, y) < 0.0; bool cp2 = cross_product(x2, y2, x3, y3, x, y) < 0.0; bool cp3 = cross_product(x3, y3, x1, y1, x, y) < 0.0; return cp1 == cp2 && cp2 == cp3 && cp3 == cp1; } //-----------------------------------------------------------calc_distance AGG_INLINE double calc_distance(double x1, double y1, double x2, double y2) { double dx = x2-x1; double dy = y2-y1; return sqrt(dx * dx + dy * dy); } //--------------------------------------------------------calc_sq_distance AGG_INLINE double calc_sq_distance(double x1, double y1, double x2, double y2) { double dx = x2-x1; double dy = y2-y1; return dx * dx + dy * dy; } //------------------------------------------------calc_line_point_distance AGG_INLINE double calc_line_point_distance(double x1, double y1, double x2, double y2, double x, double y) { double dx = x2-x1; double dy = y2-y1; double d = sqrt(dx * dx + dy * dy); if(d < vertex_dist_epsilon) { return calc_distance(x1, y1, x, y); } return ((x - x2) * dy - (y - y2) * dx) / d; } //-------------------------------------------------------calc_line_point_u AGG_INLINE double calc_segment_point_u(double x1, double y1, double x2, double y2, double x, double y) { double dx = x2 - x1; double dy = y2 - y1; if(dx == 0 && dy == 0) { return 0; } double pdx = x - x1; double pdy = y - y1; return (pdx * dx + pdy * dy) / (dx * dx + dy * dy); } //---------------------------------------------calc_line_point_sq_distance AGG_INLINE double calc_segment_point_sq_distance(double x1, double y1, double x2, double y2, double x, double y, double u) { if(u <= 0) { return calc_sq_distance(x, y, x1, y1); } else if(u >= 1) { return calc_sq_distance(x, y, x2, y2); } return calc_sq_distance(x, y, x1 + u * (x2 - x1), y1 + u * (y2 - y1)); } //---------------------------------------------calc_line_point_sq_distance AGG_INLINE double calc_segment_point_sq_distance(double x1, double y1, double x2, double y2, double x, double y) { return calc_segment_point_sq_distance( x1, y1, x2, y2, x, y, calc_segment_point_u(x1, y1, x2, y2, x, y)); } //-------------------------------------------------------calc_intersection AGG_INLINE bool calc_intersection(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy, double* x, double* y) { double num = (ay-cy) * (dx-cx) - (ax-cx) * (dy-cy); double den = (bx-ax) * (dy-cy) - (by-ay) * (dx-cx); if(std::fabs(den) < intersection_epsilon) return false; double r = num / den; *x = ax + r * (bx-ax); *y = ay + r * (by-ay); return true; } //-----------------------------------------------------intersection_exists AGG_INLINE bool intersection_exists(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { // It's less expensive but you can't control the // boundary conditions: Less or LessEqual double dx1 = x2 - x1; double dy1 = y2 - y1; double dx2 = x4 - x3; double dy2 = y4 - y3; return ((x3 - x2) * dy1 - (y3 - y2) * dx1 < 0.0) != ((x4 - x2) * dy1 - (y4 - y2) * dx1 < 0.0) && ((x1 - x4) * dy2 - (y1 - y4) * dx2 < 0.0) != ((x2 - x4) * dy2 - (y2 - y4) * dx2 < 0.0); // It's is more expensive but more flexible // in terms of boundary conditions. //-------------------- //double den = (x2-x1) * (y4-y3) - (y2-y1) * (x4-x3); //if(std::fabs(den) < intersection_epsilon) return false; //double nom1 = (x4-x3) * (y1-y3) - (y4-y3) * (x1-x3); //double nom2 = (x2-x1) * (y1-y3) - (y2-y1) * (x1-x3); //double ua = nom1 / den; //double ub = nom2 / den; //return ua >= 0.0 && ua <= 1.0 && ub >= 0.0 && ub <= 1.0; } //--------------------------------------------------------calc_orthogonal AGG_INLINE void calc_orthogonal(double thickness, double x1, double y1, double x2, double y2, double* x, double* y) { double dx = x2 - x1; double dy = y2 - y1; double d = sqrt(dx*dx + dy*dy); *x = thickness * dy / d; *y = -thickness * dx / d; } //--------------------------------------------------------dilate_triangle AGG_INLINE void dilate_triangle(double x1, double y1, double x2, double y2, double x3, double y3, double *x, double* y, double d) { double dx1=0.0; double dy1=0.0; double dx2=0.0; double dy2=0.0; double dx3=0.0; double dy3=0.0; double loc = cross_product(x1, y1, x2, y2, x3, y3); if(std::fabs(loc) > intersection_epsilon) { if(cross_product(x1, y1, x2, y2, x3, y3) > 0.0) { d = -d; } calc_orthogonal(d, x1, y1, x2, y2, &dx1, &dy1); calc_orthogonal(d, x2, y2, x3, y3, &dx2, &dy2); calc_orthogonal(d, x3, y3, x1, y1, &dx3, &dy3); } *x++ = x1 + dx1; *y++ = y1 + dy1; *x++ = x2 + dx1; *y++ = y2 + dy1; *x++ = x2 + dx2; *y++ = y2 + dy2; *x++ = x3 + dx2; *y++ = y3 + dy2; *x++ = x3 + dx3; *y++ = y3 + dy3; *x++ = x1 + dx3; *y++ = y1 + dy3; } //------------------------------------------------------calc_triangle_area AGG_INLINE double calc_triangle_area(double x1, double y1, double x2, double y2, double x3, double y3) { return (x1*y2 - x2*y1 + x2*y3 - x3*y2 + x3*y1 - x1*y3) * 0.5; } //-------------------------------------------------------calc_polygon_area template double calc_polygon_area(const Storage& st) { unsigned i; double sum = 0.0; double x = st[0].x; double y = st[0].y; double xs = x; double ys = y; for(i = 1; i < st.size(); i++) { const typename Storage::value_type& v = st[i]; sum += x * v.y - y * v.x; x = v.x; y = v.y; } return (sum + x * ys - y * xs) * 0.5; } //------------------------------------------------------------------------ // Tables for fast sqrt extern int16u g_sqrt_table[1024]; extern int8 g_elder_bit_table[256]; //---------------------------------------------------------------fast_sqrt //Fast integer Sqrt - really fast: no cycles, divisions or multiplications #if defined(_MSC_VER) #pragma warning(push) #pragma warning(disable : 4035) //Disable warning "no return value" #endif AGG_INLINE unsigned fast_sqrt(unsigned val) { #if defined(_M_IX86) && defined(_MSC_VER) && !defined(AGG_NO_ASM) //For Ix86 family processors this assembler code is used. //The key command here is bsr - determination the number of the most //significant bit of the value. For other processors //(and maybe compilers) the pure C "#else" section is used. __asm { mov ebx, val mov edx, 11 bsr ecx, ebx sub ecx, 9 jle less_than_9_bits shr ecx, 1 adc ecx, 0 sub edx, ecx shl ecx, 1 shr ebx, cl less_than_9_bits: xor eax, eax mov ax, g_sqrt_table[ebx*2] mov ecx, edx shr eax, cl } #else //This code is actually pure C and portable to most //arcitectures including 64bit ones. unsigned t = val; int bit=0; unsigned shift = 11; //The following piece of code is just an emulation of the //Ix86 assembler command "bsr" (see above). However on old //Intels (like Intel MMX 233MHz) this code is about twice //faster (sic!) then just one "bsr". On PIII and PIV the //bsr is optimized quite well. bit = t >> 24; if(bit) { bit = g_elder_bit_table[bit] + 24; } else { bit = (t >> 16) & 0xFF; if(bit) { bit = g_elder_bit_table[bit] + 16; } else { bit = (t >> 8) & 0xFF; if(bit) { bit = g_elder_bit_table[bit] + 8; } else { bit = g_elder_bit_table[t]; } } } //This code calculates the sqrt. bit -= 9; if(bit > 0) { bit = (bit >> 1) + (bit & 1); shift -= bit; val >>= (bit << 1); } return g_sqrt_table[val] >> shift; #endif } #if defined(_MSC_VER) #pragma warning(pop) #endif //--------------------------------------------------------------------besj // Function BESJ calculates Bessel function of first kind of order n // Arguments: // n - an integer (>=0), the order // x - value at which the Bessel function is required //-------------------- // C++ Mathematical Library // Convereted from equivalent FORTRAN library // Converetd by Gareth Walker for use by course 392 computational project // All functions tested and yield the same results as the corresponding // FORTRAN versions. // // If you have any problems using these functions please report them to // M.Muldoon@UMIST.ac.uk // // Documentation available on the web // http://www.ma.umist.ac.uk/mrm/Teaching/392/libs/392.html // Version 1.0 8/98 // 29 October, 1999 //-------------------- // Adapted for use in AGG library by Andy Wilk (castor.vulgaris@gmail.com) //------------------------------------------------------------------------ inline double besj(double x, int n) { if(n < 0) { return 0; } double d = 1E-6; double b = 0; if(std::fabs(x) <= d) { if(n != 0) return 0; return 1; } double b1 = 0; // b1 is the value from the previous iteration // Set up a starting order for recurrence int m1 = (int)fabs(x) + 6; if(std::fabs(x) > 5) { m1 = (int)(std::fabs(1.4 * x + 60 / x)); } int m2 = (int)(n + 2 + std::fabs(x) / 4); if (m1 > m2) { m2 = m1; } // Apply recurrence down from curent max order for(;;) { double c3 = 0; double c2 = 1E-30; double c4 = 0; int m8 = 1; if (m2 / 2 * 2 == m2) { m8 = -1; } int imax = m2 - 2; for (int i = 1; i <= imax; i++) { double c6 = 2 * (m2 - i) * c2 / x - c3; c3 = c2; c2 = c6; if(m2 - i - 1 == n) { b = c6; } m8 = -1 * m8; if (m8 > 0) { c4 = c4 + 2 * c6; } } double c6 = 2 * c2 / x - c3; if(n == 0) { b = c6; } c4 += c6; b /= c4; if(std::fabs(b - b1) < d) { return b; } b1 = b; m2 += 3; } } } #endif mapnik-3.0.9/deps/agg/include/agg_math_stroke.h000066400000000000000000000443041262555547000214450ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Stroke math // //---------------------------------------------------------------------------- #ifndef AGG_STROKE_MATH_INCLUDED #define AGG_STROKE_MATH_INCLUDED #include "agg_math.h" #include "agg_vertex_sequence.h" namespace agg { //-------------------------------------------------------------line_cap_e enum line_cap_e { butt_cap, square_cap, round_cap }; //------------------------------------------------------------line_join_e enum line_join_e { miter_join = 0, miter_join_revert = 1, round_join = 2, bevel_join = 3, miter_join_round = 4 }; //-----------------------------------------------------------inner_join_e enum inner_join_e { inner_bevel, inner_miter, inner_jag, inner_round }; //------------------------------------------------------------math_stroke template class math_stroke { public: typedef typename VertexConsumer::value_type coord_type; math_stroke(); void line_cap(line_cap_e lc) { m_line_cap = lc; } void line_join(line_join_e lj) { m_line_join = lj; } void inner_join(inner_join_e ij) { m_inner_join = ij; } line_cap_e line_cap() const { return m_line_cap; } line_join_e line_join() const { return m_line_join; } inner_join_e inner_join() const { return m_inner_join; } void width(double w); void miter_limit(double ml) { m_miter_limit = ml; } void miter_limit_theta(double t); void inner_miter_limit(double ml) { m_inner_miter_limit = ml; } void approximation_scale(double as) { m_approx_scale = as; } double width() const { return m_width * 2.0; } double miter_limit() const { return m_miter_limit; } double inner_miter_limit() const { return m_inner_miter_limit; } double approximation_scale() const { return m_approx_scale; } void calc_cap(VertexConsumer& vc, const vertex_dist& v0, const vertex_dist& v1, double len); void calc_join(VertexConsumer& vc, const vertex_dist& v0, const vertex_dist& v1, const vertex_dist& v2, double len1, double len2); private: AGG_INLINE void add_vertex(VertexConsumer& vc, double x, double y) { vc.add(coord_type(x, y)); } void calc_arc(VertexConsumer& vc, double x, double y, double dx1, double dy1, double dx2, double dy2); void calc_miter(VertexConsumer& vc, const vertex_dist& v0, const vertex_dist& v1, const vertex_dist& v2, double dx1, double dy1, double dx2, double dy2, line_join_e lj, double mlimit, double dbevel); double m_width; double m_width_abs; double m_width_eps; int m_width_sign; double m_miter_limit; double m_inner_miter_limit; double m_approx_scale; line_cap_e m_line_cap; line_join_e m_line_join; inner_join_e m_inner_join; }; //----------------------------------------------------------------------- template math_stroke::math_stroke() : m_width(0.5), m_width_abs(0.5), m_width_eps(0.5/1024.0), m_width_sign(1), m_miter_limit(4.0), m_inner_miter_limit(1.01), m_approx_scale(1.0), m_line_cap(butt_cap), m_line_join(miter_join), m_inner_join(inner_miter) { } //----------------------------------------------------------------------- template void math_stroke::width(double w) { m_width = w * 0.5; if(m_width < 0) { m_width_abs = -m_width; m_width_sign = -1; } else { m_width_abs = m_width; m_width_sign = 1; } m_width_eps = m_width / 1024.0; } //----------------------------------------------------------------------- template void math_stroke::miter_limit_theta(double t) { m_miter_limit = 1.0 / std::sin(t * 0.5) ; } //----------------------------------------------------------------------- template void math_stroke::calc_arc(VC& vc, double x, double y, double dx1, double dy1, double dx2, double dy2) { double a1 = std::atan2(dy1 * m_width_sign, dx1 * m_width_sign); double a2 = std::atan2(dy2 * m_width_sign, dx2 * m_width_sign); double da = a1 - a2; int i, n; da = std::acos(m_width_abs / (m_width_abs + 0.125 / m_approx_scale)) * 2; add_vertex(vc, x + dx1, y + dy1); if(m_width_sign > 0) { if(a1 > a2) a2 += 2 * pi; n = int((a2 - a1) / da); da = (a2 - a1) / (n + 1); a1 += da; for(i = 0; i < n; i++) { add_vertex(vc, x + std::cos(a1) * m_width, y + std::sin(a1) * m_width); a1 += da; } } else { if(a1 < a2) a2 -= 2 * pi; n = int((a1 - a2) / da); da = (a1 - a2) / (n + 1); a1 -= da; for(i = 0; i < n; i++) { add_vertex(vc, x + std::cos(a1) * m_width, y + std::sin(a1) * m_width); a1 -= da; } } add_vertex(vc, x + dx2, y + dy2); } //----------------------------------------------------------------------- template void math_stroke::calc_miter(VC& vc, const vertex_dist& v0, const vertex_dist& v1, const vertex_dist& v2, double dx1, double dy1, double dx2, double dy2, line_join_e lj, double mlimit, double dbevel) { double xi = v1.x; double yi = v1.y; double di = 1; double lim = m_width_abs * mlimit; bool miter_limit_exceeded = true; // Assume the worst bool intersection_failed = true; // Assume the worst if(calc_intersection(v0.x + dx1, v0.y - dy1, v1.x + dx1, v1.y - dy1, v1.x + dx2, v1.y - dy2, v2.x + dx2, v2.y - dy2, &xi, &yi)) { // Calculation of the intersection succeeded //--------------------- di = calc_distance(v1.x, v1.y, xi, yi); if(di <= lim) { // Inside the miter limit //--------------------- add_vertex(vc, xi, yi); miter_limit_exceeded = false; } intersection_failed = false; } else { // Calculation of the intersection failed, most probably // the three points lie one straight line. // First check if v0 and v2 lie on the opposite sides of vector: // (v1.x, v1.y) -> (v1.x+dx1, v1.y-dy1), that is, the perpendicular // to the line determined by vertices v0 and v1. // This condition determines whether the next line segments continues // the previous one or goes back. //---------------- double x2 = v1.x + dx1; double y2 = v1.y - dy1; if((cross_product(v0.x, v0.y, v1.x, v1.y, x2, y2) < 0.0) == (cross_product(v1.x, v1.y, v2.x, v2.y, x2, y2) < 0.0)) { // This case means that the next segment continues // the previous one (straight line) //----------------- add_vertex(vc, v1.x + dx1, v1.y - dy1); miter_limit_exceeded = false; } } if(miter_limit_exceeded) { // Miter limit exceeded //------------------------ switch(lj) { case miter_join_revert: // For the compatibility with SVG, PDF, etc, // we use a simple bevel join instead of // "smart" bevel //------------------- add_vertex(vc, v1.x + dx1, v1.y - dy1); add_vertex(vc, v1.x + dx2, v1.y - dy2); break; case miter_join_round: calc_arc(vc, v1.x, v1.y, dx1, -dy1, dx2, -dy2); break; default: // If no miter-revert, calculate new dx1, dy1, dx2, dy2 //---------------- if(intersection_failed) { mlimit *= m_width_sign; add_vertex(vc, v1.x + dx1 + dy1 * mlimit, v1.y - dy1 + dx1 * mlimit); add_vertex(vc, v1.x + dx2 - dy2 * mlimit, v1.y - dy2 - dx2 * mlimit); } else { double x1 = v1.x + dx1; double y1 = v1.y - dy1; double x2 = v1.x + dx2; double y2 = v1.y - dy2; di = (lim - dbevel) / (di - dbevel); add_vertex(vc, x1 + (xi - x1) * di, y1 + (yi - y1) * di); add_vertex(vc, x2 + (xi - x2) * di, y2 + (yi - y2) * di); } break; } } } //--------------------------------------------------------stroke_calc_cap template void math_stroke::calc_cap(VC& vc, const vertex_dist& v0, const vertex_dist& v1, double len) { vc.remove_all(); double dx1 = (v1.y - v0.y) / len; double dy1 = (v1.x - v0.x) / len; double dx2 = 0; double dy2 = 0; dx1 *= m_width; dy1 *= m_width; if(m_line_cap != round_cap) { if(m_line_cap == square_cap) { dx2 = dy1 * m_width_sign; dy2 = dx1 * m_width_sign; } add_vertex(vc, v0.x - dx1 - dx2, v0.y + dy1 - dy2); add_vertex(vc, v0.x + dx1 - dx2, v0.y - dy1 - dy2); } else { double da = std::acos(m_width_abs / (m_width_abs + 0.125 / m_approx_scale)) * 2; double a1; int i; int n = int(pi / da); da = pi / (n + 1); add_vertex(vc, v0.x - dx1, v0.y + dy1); if(m_width_sign > 0) { a1 = std::atan2(dy1, -dx1); a1 += da; for(i = 0; i < n; i++) { add_vertex(vc, v0.x + std::cos(a1) * m_width, v0.y + std::sin(a1) * m_width); a1 += da; } } else { a1 = std::atan2(-dy1, dx1); a1 -= da; for(i = 0; i < n; i++) { add_vertex(vc, v0.x + std::cos(a1) * m_width, v0.y + std::sin(a1) * m_width); a1 -= da; } } add_vertex(vc, v0.x + dx1, v0.y - dy1); } } //----------------------------------------------------------------------- template void math_stroke::calc_join(VC& vc, const vertex_dist& v0, const vertex_dist& v1, const vertex_dist& v2, double len1, double len2) { double dx1 = m_width * (v1.y - v0.y) / len1; double dy1 = m_width * (v1.x - v0.x) / len1; double dx2 = m_width * (v2.y - v1.y) / len2; double dy2 = m_width * (v2.x - v1.x) / len2; vc.remove_all(); double cp = cross_product(v0.x, v0.y, v1.x, v1.y, v2.x, v2.y); if(cp != 0 && (cp > 0) == (m_width > 0)) { // Inner join //--------------- double limit = ((len1 < len2) ? len1 : len2) / m_width_abs; if(limit < m_inner_miter_limit) { limit = m_inner_miter_limit; } switch(m_inner_join) { default: // inner_bevel add_vertex(vc, v1.x + dx1, v1.y - dy1); add_vertex(vc, v1.x + dx2, v1.y - dy2); break; case inner_miter: calc_miter(vc, v0, v1, v2, dx1, dy1, dx2, dy2, miter_join_revert, limit, 0); break; case inner_jag: case inner_round: cp = (dx1-dx2) * (dx1-dx2) + (dy1-dy2) * (dy1-dy2); if(cp < len1 * len1 && cp < len2 * len2) { calc_miter(vc, v0, v1, v2, dx1, dy1, dx2, dy2, miter_join_revert, limit, 0); } else { if(m_inner_join == inner_jag) { add_vertex(vc, v1.x + dx1, v1.y - dy1); add_vertex(vc, v1.x, v1.y ); add_vertex(vc, v1.x + dx2, v1.y - dy2); } else { add_vertex(vc, v1.x + dx1, v1.y - dy1); add_vertex(vc, v1.x, v1.y ); calc_arc(vc, v1.x, v1.y, dx2, -dy2, dx1, -dy1); add_vertex(vc, v1.x, v1.y ); add_vertex(vc, v1.x + dx2, v1.y - dy2); } } break; } } else { // Outer join //--------------- // Calculate the distance between v1 and // the central point of the bevel line segment //--------------- double dx = (dx1 + dx2) / 2; double dy = (dy1 + dy2) / 2; double dbevel = sqrt(dx * dx + dy * dy); if(m_line_join == round_join || m_line_join == bevel_join) { // This is an optimization that reduces the number of points // in cases of almost collinear segments. If there's no // visible difference between bevel and miter joins we'd rather // use miter join because it adds only one point instead of two. // // Here we calculate the middle point between the bevel points // and then, the distance between v1 and this middle point. // At outer joins this distance always less than stroke width, // because it's actually the height of an isosceles triangle of // v1 and its two bevel points. If the difference between this // width and this value is small (no visible bevel) we can // add just one point. // // The constant in the expression makes the result approximately // the same as in round joins and caps. You can safely comment // out this entire "if". //------------------- if(m_approx_scale * (m_width_abs - dbevel) < m_width_eps) { if(calc_intersection(v0.x + dx1, v0.y - dy1, v1.x + dx1, v1.y - dy1, v1.x + dx2, v1.y - dy2, v2.x + dx2, v2.y - dy2, &dx, &dy)) { add_vertex(vc, dx, dy); } else { add_vertex(vc, v1.x + dx1, v1.y - dy1); } return; } } switch(m_line_join) { case miter_join: case miter_join_revert: case miter_join_round: calc_miter(vc, v0, v1, v2, dx1, dy1, dx2, dy2, m_line_join, m_miter_limit, dbevel); break; case round_join: calc_arc(vc, v1.x, v1.y, dx1, -dy1, dx2, -dy2); break; default: // Bevel join add_vertex(vc, v1.x + dx1, v1.y - dy1); add_vertex(vc, v1.x + dx2, v1.y - dy2); break; } } } } #endif mapnik-3.0.9/deps/agg/include/agg_path_length.h000066400000000000000000000035601262555547000214210ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_PATH_LENGTH_INCLUDED #define AGG_PATH_LENGTH_INCLUDED #include "agg_math.h" namespace agg { template double path_length(VertexSource& vs, unsigned path_id = 0) { double len = 0.0; double start_x = 0.0; double start_y = 0.0; double x1 = 0.0; double y1 = 0.0; double x2 = 0.0; double y2 = 0.0; bool first = true; unsigned cmd; vs.rewind(path_id); while(!is_stop(cmd = vs.vertex(&x2, &y2))) { if(is_vertex(cmd)) { if(first || is_move_to(cmd)) { start_x = x2; start_y = y2; } else { len += calc_distance(x1, y1, x2, y2); } x1 = x2; y1 = y2; first = false; } else { if(is_close(cmd) && !first) { len += calc_distance(x1, y1, start_x, start_y); } } } return len; } } #endif mapnik-3.0.9/deps/agg/include/agg_path_storage.h000066400000000000000000001427141262555547000216110ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_PATH_STORAGE_INCLUDED #define AGG_PATH_STORAGE_INCLUDED #include #include #include "agg_math.h" #include "agg_array.h" #include "agg_bezier_arc.h" namespace agg { //----------------------------------------------------vertex_block_storage template class vertex_block_storage { public: // Allocation parameters enum block_scale_e { block_shift = BlockShift, block_size = 1 << block_shift, block_mask = block_size - 1, block_pool = BlockPool }; typedef T value_type; typedef vertex_block_storage self_type; ~vertex_block_storage(); vertex_block_storage(); vertex_block_storage(const self_type& v); const self_type& operator = (const self_type& ps); void remove_all(); void free_all(); void add_vertex(double x, double y, unsigned cmd); void modify_vertex(unsigned idx, double x, double y); void modify_vertex(unsigned idx, double x, double y, unsigned cmd); void modify_command(unsigned idx, unsigned cmd); void swap_vertices(unsigned v1, unsigned v2); unsigned last_command() const; unsigned last_vertex(double* x, double* y) const; unsigned prev_vertex(double* x, double* y) const; double last_x() const; double last_y() const; unsigned total_vertices() const; unsigned vertex(unsigned idx, double* x, double* y) const; unsigned command(unsigned idx) const; private: void allocate_block(unsigned nb); int8u* storage_ptrs(T** xy_ptr); private: unsigned m_total_vertices; unsigned m_total_blocks; unsigned m_max_blocks; T** m_coord_blocks; int8u** m_cmd_blocks; }; //------------------------------------------------------------------------ template void vertex_block_storage::free_all() { if(m_total_blocks) { T** coord_blk = m_coord_blocks + m_total_blocks - 1; while(m_total_blocks--) { pod_allocator::deallocate( *coord_blk, block_size * 2 + block_size / (sizeof(T) / sizeof(unsigned char))); --coord_blk; } pod_allocator::deallocate(m_coord_blocks, m_max_blocks * 2); m_total_blocks = 0; m_max_blocks = 0; m_coord_blocks = 0; m_cmd_blocks = 0; m_total_vertices = 0; } } //------------------------------------------------------------------------ template vertex_block_storage::~vertex_block_storage() { free_all(); } //------------------------------------------------------------------------ template vertex_block_storage::vertex_block_storage() : m_total_vertices(0), m_total_blocks(0), m_max_blocks(0), m_coord_blocks(0), m_cmd_blocks(0) { } //------------------------------------------------------------------------ template vertex_block_storage::vertex_block_storage(const vertex_block_storage& v) : m_total_vertices(0), m_total_blocks(0), m_max_blocks(0), m_coord_blocks(0), m_cmd_blocks(0) { *this = v; } //------------------------------------------------------------------------ template const vertex_block_storage& vertex_block_storage::operator = (const vertex_block_storage& v) { remove_all(); unsigned i; for(i = 0; i < v.total_vertices(); i++) { double x, y; unsigned cmd = v.vertex(i, &x, &y); add_vertex(x, y, cmd); } return *this; } //------------------------------------------------------------------------ template inline void vertex_block_storage::remove_all() { m_total_vertices = 0; } //------------------------------------------------------------------------ template inline void vertex_block_storage::add_vertex(double x, double y, unsigned cmd) { T* coord_ptr = 0; *storage_ptrs(&coord_ptr) = (int8u)cmd; coord_ptr[0] = T(x); coord_ptr[1] = T(y); m_total_vertices++; } //------------------------------------------------------------------------ template inline void vertex_block_storage::modify_vertex(unsigned idx, double x, double y) { T* pv = m_coord_blocks[idx >> block_shift] + ((idx & block_mask) << 1); pv[0] = T(x); pv[1] = T(y); } //------------------------------------------------------------------------ template inline void vertex_block_storage::modify_vertex(unsigned idx, double x, double y, unsigned cmd) { unsigned block = idx >> block_shift; unsigned offset = idx & block_mask; T* pv = m_coord_blocks[block] + (offset << 1); pv[0] = T(x); pv[1] = T(y); m_cmd_blocks[block][offset] = (int8u)cmd; } //------------------------------------------------------------------------ template inline void vertex_block_storage::modify_command(unsigned idx, unsigned cmd) { m_cmd_blocks[idx >> block_shift][idx & block_mask] = (int8u)cmd; } //------------------------------------------------------------------------ template inline void vertex_block_storage::swap_vertices(unsigned v1, unsigned v2) { unsigned b1 = v1 >> block_shift; unsigned b2 = v2 >> block_shift; unsigned o1 = v1 & block_mask; unsigned o2 = v2 & block_mask; T* pv1 = m_coord_blocks[b1] + (o1 << 1); T* pv2 = m_coord_blocks[b2] + (o2 << 1); T val; val = pv1[0]; pv1[0] = pv2[0]; pv2[0] = val; val = pv1[1]; pv1[1] = pv2[1]; pv2[1] = val; int8u cmd = m_cmd_blocks[b1][o1]; m_cmd_blocks[b1][o1] = m_cmd_blocks[b2][o2]; m_cmd_blocks[b2][o2] = cmd; } //------------------------------------------------------------------------ template inline unsigned vertex_block_storage::last_command() const { if(m_total_vertices) return command(m_total_vertices - 1); return path_cmd_stop; } //------------------------------------------------------------------------ template inline unsigned vertex_block_storage::last_vertex(double* x, double* y) const { if(m_total_vertices) return vertex(m_total_vertices - 1, x, y); return path_cmd_stop; } //------------------------------------------------------------------------ template inline unsigned vertex_block_storage::prev_vertex(double* x, double* y) const { if(m_total_vertices > 1) return vertex(m_total_vertices - 2, x, y); return path_cmd_stop; } //------------------------------------------------------------------------ template inline double vertex_block_storage::last_x() const { if(m_total_vertices) { unsigned idx = m_total_vertices - 1; return m_coord_blocks[idx >> block_shift][(idx & block_mask) << 1]; } return 0.0; } //------------------------------------------------------------------------ template inline double vertex_block_storage::last_y() const { if(m_total_vertices) { unsigned idx = m_total_vertices - 1; return m_coord_blocks[idx >> block_shift][((idx & block_mask) << 1) + 1]; } return 0.0; } //------------------------------------------------------------------------ template inline unsigned vertex_block_storage::total_vertices() const { return m_total_vertices; } //------------------------------------------------------------------------ template inline unsigned vertex_block_storage::vertex(unsigned idx, double* x, double* y) const { unsigned nb = idx >> block_shift; const T* pv = m_coord_blocks[nb] + ((idx & block_mask) << 1); *x = pv[0]; *y = pv[1]; return m_cmd_blocks[nb][idx & block_mask]; } //------------------------------------------------------------------------ template inline unsigned vertex_block_storage::command(unsigned idx) const { return m_cmd_blocks[idx >> block_shift][idx & block_mask]; } //------------------------------------------------------------------------ template void vertex_block_storage::allocate_block(unsigned nb) { if(nb >= m_max_blocks) { T** new_coords = pod_allocator::allocate((m_max_blocks + block_pool) * 2); unsigned char** new_cmds = (unsigned char**)(new_coords + m_max_blocks + block_pool); if(m_coord_blocks) { memcpy(new_coords, m_coord_blocks, m_max_blocks * sizeof(T*)); memcpy(new_cmds, m_cmd_blocks, m_max_blocks * sizeof(unsigned char*)); pod_allocator::deallocate(m_coord_blocks, m_max_blocks * 2); } m_coord_blocks = new_coords; m_cmd_blocks = new_cmds; m_max_blocks += block_pool; } m_coord_blocks[nb] = pod_allocator::allocate(block_size * 2 + block_size / (sizeof(T) / sizeof(unsigned char))); m_cmd_blocks[nb] = (unsigned char*)(m_coord_blocks[nb] + block_size * 2); m_total_blocks++; } //------------------------------------------------------------------------ template int8u* vertex_block_storage::storage_ptrs(T** xy_ptr) { unsigned nb = m_total_vertices >> block_shift; if(nb >= m_total_blocks) { allocate_block(nb); } *xy_ptr = m_coord_blocks[nb] + ((m_total_vertices & block_mask) << 1); return m_cmd_blocks[nb] + (m_total_vertices & block_mask); } //-----------------------------------------------------poly_plain_adaptor template class poly_plain_adaptor { public: typedef T value_type; poly_plain_adaptor() : m_data(0), m_ptr(0), m_end(0), m_closed(false), m_stop(false) {} poly_plain_adaptor(const T* data, unsigned num_points, bool closed) : m_data(data), m_ptr(data), m_end(data + num_points * 2), m_closed(closed), m_stop(false) {} void init(const T* data, unsigned num_points, bool closed) { m_data = data; m_ptr = data; m_end = data + num_points * 2; m_closed = closed; m_stop = false; } void rewind(unsigned) { m_ptr = m_data; m_stop = false; } unsigned vertex(double* x, double* y) { if(m_ptr < m_end) { bool first = m_ptr == m_data; *x = *m_ptr++; *y = *m_ptr++; return first ? path_cmd_move_to : path_cmd_line_to; } *x = *y = 0.0; if(m_closed && !m_stop) { m_stop = true; return path_cmd_end_poly | path_flags_close; } return path_cmd_stop; } private: const T* m_data; const T* m_ptr; const T* m_end; bool m_closed; bool m_stop; }; //-------------------------------------------------poly_container_adaptor template class poly_container_adaptor { public: typedef typename Container::value_type vertex_type; poly_container_adaptor() : m_container(0), m_index(0), m_closed(false), m_stop(false) {} poly_container_adaptor(const Container& data, bool closed) : m_container(&data), m_index(0), m_closed(closed), m_stop(false) {} void init(const Container& data, bool closed) { m_container = &data; m_index = 0; m_closed = closed; m_stop = false; } void rewind(unsigned) { m_index = 0; m_stop = false; } unsigned vertex(double* x, double* y) { if(m_index < m_container->size()) { bool first = m_index == 0; const vertex_type& v = (*m_container)[m_index++]; *x = v.x; *y = v.y; return first ? path_cmd_move_to : path_cmd_line_to; } *x = *y = 0.0; if(m_closed && !m_stop) { m_stop = true; return path_cmd_end_poly | path_flags_close; } return path_cmd_stop; } private: const Container* m_container; unsigned m_index; bool m_closed; bool m_stop; }; //-----------------------------------------poly_container_reverse_adaptor template class poly_container_reverse_adaptor { public: typedef typename Container::value_type vertex_type; poly_container_reverse_adaptor() : m_container(0), m_index(-1), m_closed(false), m_stop(false) {} poly_container_reverse_adaptor(const Container& data, bool closed) : m_container(&data), m_index(-1), m_closed(closed), m_stop(false) {} void init(const Container& data, bool closed) { m_container = &data; m_index = m_container->size() - 1; m_closed = closed; m_stop = false; } void rewind(unsigned) { m_index = m_container->size() - 1; m_stop = false; } unsigned vertex(double* x, double* y) { if(m_index >= 0) { bool first = m_index == int(m_container->size() - 1); const vertex_type& v = (*m_container)[m_index--]; *x = v.x; *y = v.y; return first ? path_cmd_move_to : path_cmd_line_to; } *x = *y = 0.0; if(m_closed && !m_stop) { m_stop = true; return path_cmd_end_poly | path_flags_close; } return path_cmd_stop; } private: const Container* m_container; int m_index; bool m_closed; bool m_stop; }; //--------------------------------------------------------line_adaptor class line_adaptor { public: typedef double value_type; line_adaptor() : m_line(m_coord, 2, false) {} line_adaptor(double x1, double y1, double x2, double y2) : m_line(m_coord, 2, false) { m_coord[0] = x1; m_coord[1] = y1; m_coord[2] = x2; m_coord[3] = y2; } void init(double x1, double y1, double x2, double y2) { m_coord[0] = x1; m_coord[1] = y1; m_coord[2] = x2; m_coord[3] = y2; m_line.rewind(0); } void rewind(unsigned) { m_line.rewind(0); } unsigned vertex(double* x, double* y) { return m_line.vertex(x, y); } private: double m_coord[4]; poly_plain_adaptor m_line; }; //---------------------------------------------------------------path_base // A container to store vertices with their flags. // A path consists of a number of contours separated with "move_to" // commands. The path storage can keep and maintain more than one // path. // To navigate to the beginning of a particular path, use rewind(path_id); // Where path_id is what start_new_path() returns. So, when you call // start_new_path() you need to store its return value somewhere else // to navigate to the path afterwards. // // See also: vertex_source concept //------------------------------------------------------------------------ template class path_base { public: typedef VertexContainer container_type; typedef path_base self_type; //-------------------------------------------------------------------- path_base() : m_vertices(), m_iterator(0) {} void remove_all() { m_vertices.remove_all(); m_iterator = 0; } void free_all() { m_vertices.free_all(); m_iterator = 0; } // Make path functions //-------------------------------------------------------------------- unsigned start_new_path(); void move_to(double x, double y); void move_rel(double dx, double dy); void line_to(double x, double y); void line_rel(double dx, double dy); void hline_to(double x); void hline_rel(double dx); void vline_to(double y); void vline_rel(double dy); void arc_to(double rx, double ry, double angle, bool large_arc_flag, bool sweep_flag, double x, double y); void arc_rel(double rx, double ry, double angle, bool large_arc_flag, bool sweep_flag, double dx, double dy); void curve3(double x_ctrl, double y_ctrl, double x_to, double y_to); void curve3_rel(double dx_ctrl, double dy_ctrl, double dx_to, double dy_to); void curve3(double x_to, double y_to); void curve3_rel(double dx_to, double dy_to); void curve4(double x_ctrl1, double y_ctrl1, double x_ctrl2, double y_ctrl2, double x_to, double y_to); void curve4_rel(double dx_ctrl1, double dy_ctrl1, double dx_ctrl2, double dy_ctrl2, double dx_to, double dy_to); void curve4(double x_ctrl2, double y_ctrl2, double x_to, double y_to); void curve4_rel(double x_ctrl2, double y_ctrl2, double x_to, double y_to); void end_poly(unsigned flags = path_flags_close); void close_polygon(unsigned flags = path_flags_none); // Accessors //-------------------------------------------------------------------- const container_type& vertices() const { return m_vertices; } container_type& vertices() { return m_vertices; } unsigned total_vertices() const; void rel_to_abs(double* x, double* y) const; unsigned last_vertex(double* x, double* y) const; unsigned prev_vertex(double* x, double* y) const; double last_x() const; double last_y() const; unsigned vertex(unsigned idx, double* x, double* y) const; unsigned command(unsigned idx) const; void modify_vertex(unsigned idx, double x, double y); void modify_vertex(unsigned idx, double x, double y, unsigned cmd); void modify_command(unsigned idx, unsigned cmd); // VertexSource interface //-------------------------------------------------------------------- void rewind(unsigned path_id); unsigned vertex(double* x, double* y); // Arrange the orientation of a polygon, all polygons in a path, // or in all paths. After calling arrange_orientations() or // arrange_orientations_all_paths(), all the polygons will have // the same orientation, i.e. path_flags_cw or path_flags_ccw //-------------------------------------------------------------------- unsigned arrange_polygon_orientation(unsigned start, path_flags_e orientation); unsigned arrange_orientations(unsigned path_id, path_flags_e orientation); void arrange_orientations_all_paths(path_flags_e orientation); void invert_polygon(unsigned start); // Flip all vertices horizontally or vertically, // between x1 and x2, or between y1 and y2 respectively //-------------------------------------------------------------------- void flip_x(double x1, double x2); void flip_y(double y1, double y2); // Concatenate path. The path is added as is. //-------------------------------------------------------------------- template void concat_path(VertexSource& vs, unsigned path_id = 0) { double x=0; double y=0; unsigned cmd; vs.rewind(path_id); while(!is_stop(cmd = vs.vertex(&x, &y))) { m_vertices.add_vertex(x, y, cmd); } } //-------------------------------------------------------------------- // Join path. The path is joined with the existing one, that is, // it behaves as if the pen of a plotter was always down (drawing) template void join_path(VertexSource& vs, unsigned path_id = 0) { double x=0.0, y=0.0; unsigned cmd; vs.rewind(path_id); cmd = vs.vertex(&x, &y); if(!is_stop(cmd)) { if(is_vertex(cmd)) { double x0, y0; unsigned cmd0 = last_vertex(&x0, &y0); if(is_vertex(cmd0)) { if(calc_distance(x, y, x0, y0) > vertex_dist_epsilon) { if(is_move_to(cmd)) cmd = path_cmd_line_to; m_vertices.add_vertex(x, y, cmd); } } else { if(is_stop(cmd0)) { cmd = path_cmd_move_to; } else { if(is_move_to(cmd)) cmd = path_cmd_line_to; } m_vertices.add_vertex(x, y, cmd); } } while(!is_stop(cmd = vs.vertex(&x, &y))) { m_vertices.add_vertex(x, y, is_move_to(cmd) ? unsigned(path_cmd_line_to) : cmd); } } } // Concatenate polygon/polyline. //-------------------------------------------------------------------- template void concat_poly(const T* data, unsigned num_points, bool closed) { poly_plain_adaptor poly(data, num_points, closed); concat_path(poly); } // Join polygon/polyline continuously. //-------------------------------------------------------------------- template void join_poly(const T* data, unsigned num_points, bool closed) { poly_plain_adaptor poly(data, num_points, closed); join_path(poly); } //-------------------------------------------------------------------- void translate(double dx, double dy, unsigned path_id=0); void translate_all_paths(double dx, double dy); //-------------------------------------------------------------------- template void transform(const Trans& trans, unsigned path_id=0) { unsigned num_ver = m_vertices.total_vertices(); for(; path_id < num_ver; path_id++) { double x, y; unsigned cmd = m_vertices.vertex(path_id, &x, &y); if(is_stop(cmd)) break; if(is_vertex(cmd)) { trans.transform(&x, &y); m_vertices.modify_vertex(path_id, x, y); } } } //-------------------------------------------------------------------- template void transform_all_paths(const Trans& trans) { unsigned idx; unsigned num_ver = m_vertices.total_vertices(); for(idx = 0; idx < num_ver; idx++) { double x, y; if(is_vertex(m_vertices.vertex(idx, &x, &y))) { trans.transform(&x, &y); m_vertices.modify_vertex(idx, x, y); } } } private: unsigned perceive_polygon_orientation(unsigned start, unsigned end); void invert_polygon(unsigned start, unsigned end); VertexContainer m_vertices; unsigned m_iterator; }; //------------------------------------------------------------------------ template unsigned path_base::start_new_path() { if(!is_stop(m_vertices.last_command())) { m_vertices.add_vertex(0.0, 0.0, path_cmd_stop); } return m_vertices.total_vertices(); } //------------------------------------------------------------------------ template inline void path_base::rel_to_abs(double* x, double* y) const { if(m_vertices.total_vertices()) { double x2; double y2; if(is_vertex(m_vertices.last_vertex(&x2, &y2))) { *x += x2; *y += y2; } else if (!is_stop(m_vertices.last_command()) && is_vertex(m_vertices.prev_vertex(&x2, &y2))) { *x += x2; *y += y2; } } } //------------------------------------------------------------------------ template inline void path_base::move_to(double x, double y) { m_vertices.add_vertex(x, y, path_cmd_move_to); } //------------------------------------------------------------------------ template inline void path_base::move_rel(double dx, double dy) { rel_to_abs(&dx, &dy); m_vertices.add_vertex(dx, dy, path_cmd_move_to); } //------------------------------------------------------------------------ template inline void path_base::line_to(double x, double y) { m_vertices.add_vertex(x, y, path_cmd_line_to); } //------------------------------------------------------------------------ template inline void path_base::line_rel(double dx, double dy) { rel_to_abs(&dx, &dy); m_vertices.add_vertex(dx, dy, path_cmd_line_to); } //------------------------------------------------------------------------ template inline void path_base::hline_to(double x) { m_vertices.add_vertex(x, last_y(), path_cmd_line_to); } //------------------------------------------------------------------------ template inline void path_base::hline_rel(double dx) { double dy = 0; rel_to_abs(&dx, &dy); m_vertices.add_vertex(dx, dy, path_cmd_line_to); } //------------------------------------------------------------------------ template inline void path_base::vline_to(double y) { m_vertices.add_vertex(last_x(), y, path_cmd_line_to); } //------------------------------------------------------------------------ template inline void path_base::vline_rel(double dy) { double dx = 0; rel_to_abs(&dx, &dy); m_vertices.add_vertex(dx, dy, path_cmd_line_to); } //------------------------------------------------------------------------ template void path_base::arc_to(double rx, double ry, double angle, bool large_arc_flag, bool sweep_flag, double x, double y) { if(m_vertices.total_vertices() && is_vertex(m_vertices.last_command())) { const double epsilon = 1e-30; double x0 = 0.0; double y0 = 0.0; m_vertices.last_vertex(&x0, &y0); rx = std::fabs(rx); ry = std::fabs(ry); // Ensure radii are valid //------------------------- if(rx < epsilon || ry < epsilon) { line_to(x, y); return; } if(calc_distance(x0, y0, x, y) < epsilon) { // If the endpoints (x, y) and (x0, y0) are identical, then this // is equivalent to omitting the elliptical arc segment entirely. return; } bezier_arc_svg a(x0, y0, rx, ry, angle, large_arc_flag, sweep_flag, x, y); if(a.radii_ok()) { join_path(a); } else { line_to(x, y); } } else { move_to(x, y); } } //------------------------------------------------------------------------ template void path_base::arc_rel(double rx, double ry, double angle, bool large_arc_flag, bool sweep_flag, double dx, double dy) { rel_to_abs(&dx, &dy); arc_to(rx, ry, angle, large_arc_flag, sweep_flag, dx, dy); } //------------------------------------------------------------------------ template void path_base::curve3(double x_ctrl, double y_ctrl, double x_to, double y_to) { m_vertices.add_vertex(x_ctrl, y_ctrl, path_cmd_curve3); m_vertices.add_vertex(x_to, y_to, path_cmd_curve3); } //------------------------------------------------------------------------ template void path_base::curve3_rel(double dx_ctrl, double dy_ctrl, double dx_to, double dy_to) { rel_to_abs(&dx_ctrl, &dy_ctrl); rel_to_abs(&dx_to, &dy_to); m_vertices.add_vertex(dx_ctrl, dy_ctrl, path_cmd_curve3); m_vertices.add_vertex(dx_to, dy_to, path_cmd_curve3); } //------------------------------------------------------------------------ template void path_base::curve3(double x_to, double y_to) { double x0; double y0; if(is_vertex(m_vertices.last_vertex(&x0, &y0))) { double x_ctrl; double y_ctrl; unsigned cmd = m_vertices.prev_vertex(&x_ctrl, &y_ctrl); if(is_curve(cmd)) { x_ctrl = x0 + x0 - x_ctrl; y_ctrl = y0 + y0 - y_ctrl; } else { x_ctrl = x0; y_ctrl = y0; } curve3(x_ctrl, y_ctrl, x_to, y_to); } } //------------------------------------------------------------------------ template void path_base::curve3_rel(double dx_to, double dy_to) { rel_to_abs(&dx_to, &dy_to); curve3(dx_to, dy_to); } //------------------------------------------------------------------------ template void path_base::curve4(double x_ctrl1, double y_ctrl1, double x_ctrl2, double y_ctrl2, double x_to, double y_to) { m_vertices.add_vertex(x_ctrl1, y_ctrl1, path_cmd_curve4); m_vertices.add_vertex(x_ctrl2, y_ctrl2, path_cmd_curve4); m_vertices.add_vertex(x_to, y_to, path_cmd_curve4); } //------------------------------------------------------------------------ template void path_base::curve4_rel(double dx_ctrl1, double dy_ctrl1, double dx_ctrl2, double dy_ctrl2, double dx_to, double dy_to) { rel_to_abs(&dx_ctrl1, &dy_ctrl1); rel_to_abs(&dx_ctrl2, &dy_ctrl2); rel_to_abs(&dx_to, &dy_to); m_vertices.add_vertex(dx_ctrl1, dy_ctrl1, path_cmd_curve4); m_vertices.add_vertex(dx_ctrl2, dy_ctrl2, path_cmd_curve4); m_vertices.add_vertex(dx_to, dy_to, path_cmd_curve4); } //------------------------------------------------------------------------ template void path_base::curve4(double x_ctrl2, double y_ctrl2, double x_to, double y_to) { double x0; double y0; if(is_vertex(last_vertex(&x0, &y0))) { double x_ctrl1; double y_ctrl1; unsigned cmd = prev_vertex(&x_ctrl1, &y_ctrl1); if(is_curve(cmd)) { x_ctrl1 = x0 + x0 - x_ctrl1; y_ctrl1 = y0 + y0 - y_ctrl1; } else { x_ctrl1 = x0; y_ctrl1 = y0; } curve4(x_ctrl1, y_ctrl1, x_ctrl2, y_ctrl2, x_to, y_to); } } //------------------------------------------------------------------------ template void path_base::curve4_rel(double dx_ctrl2, double dy_ctrl2, double dx_to, double dy_to) { rel_to_abs(&dx_ctrl2, &dy_ctrl2); rel_to_abs(&dx_to, &dy_to); curve4(dx_ctrl2, dy_ctrl2, dx_to, dy_to); } //------------------------------------------------------------------------ template inline void path_base::end_poly(unsigned flags) { if(is_vertex(m_vertices.last_command())) { m_vertices.add_vertex(0.0, 0.0, path_cmd_end_poly | flags); } } //------------------------------------------------------------------------ template inline void path_base::close_polygon(unsigned flags) { end_poly(path_flags_close | flags); } //------------------------------------------------------------------------ template inline unsigned path_base::total_vertices() const { return m_vertices.total_vertices(); } //------------------------------------------------------------------------ template inline unsigned path_base::last_vertex(double* x, double* y) const { return m_vertices.last_vertex(x, y); } //------------------------------------------------------------------------ template inline unsigned path_base::prev_vertex(double* x, double* y) const { return m_vertices.prev_vertex(x, y); } //------------------------------------------------------------------------ template inline double path_base::last_x() const { return m_vertices.last_x(); } //------------------------------------------------------------------------ template inline double path_base::last_y() const { return m_vertices.last_y(); } //------------------------------------------------------------------------ template inline unsigned path_base::vertex(unsigned idx, double* x, double* y) const { return m_vertices.vertex(idx, x, y); } //------------------------------------------------------------------------ template inline unsigned path_base::command(unsigned idx) const { return m_vertices.command(idx); } //------------------------------------------------------------------------ template void path_base::modify_vertex(unsigned idx, double x, double y) { m_vertices.modify_vertex(idx, x, y); } //------------------------------------------------------------------------ template void path_base::modify_vertex(unsigned idx, double x, double y, unsigned cmd) { m_vertices.modify_vertex(idx, x, y, cmd); } //------------------------------------------------------------------------ template void path_base::modify_command(unsigned idx, unsigned cmd) { m_vertices.modify_command(idx, cmd); } //------------------------------------------------------------------------ template inline void path_base::rewind(unsigned path_id) { m_iterator = path_id; } //------------------------------------------------------------------------ template inline unsigned path_base::vertex(double* x, double* y) { if(m_iterator >= m_vertices.total_vertices()) return path_cmd_stop; return m_vertices.vertex(m_iterator++, x, y); } //------------------------------------------------------------------------ template unsigned path_base::perceive_polygon_orientation(unsigned start, unsigned end) { // Calculate signed area (double area to be exact) //--------------------- unsigned np = end - start; double area = 0.0; unsigned i; for(i = 0; i < np; i++) { double x1, y1, x2, y2; m_vertices.vertex(start + i, &x1, &y1); m_vertices.vertex(start + (i + 1) % np, &x2, &y2); area += x1 * y2 - y1 * x2; } return (area < 0.0) ? path_flags_cw : path_flags_ccw; } //------------------------------------------------------------------------ template void path_base::invert_polygon(unsigned start, unsigned end) { unsigned i; unsigned tmp_cmd = m_vertices.command(start); --end; // Make "end" inclusive // Shift all commands to one position for(i = start; i < end; i++) { m_vertices.modify_command(i, m_vertices.command(i + 1)); } // Assign starting command to the ending command m_vertices.modify_command(end, tmp_cmd); // Reverse the polygon while(end > start) { m_vertices.swap_vertices(start++, end--); } } //------------------------------------------------------------------------ template void path_base::invert_polygon(unsigned start) { // Skip all non-vertices at the beginning while(start < m_vertices.total_vertices() && !is_vertex(m_vertices.command(start))) ++start; // Skip all insignificant move_to while(start+1 < m_vertices.total_vertices() && is_move_to(m_vertices.command(start)) && is_move_to(m_vertices.command(start+1))) ++start; // Find the last vertex unsigned end = start + 1; while(end < m_vertices.total_vertices() && !is_next_poly(m_vertices.command(end))) ++end; invert_polygon(start, end); } //------------------------------------------------------------------------ template unsigned path_base::arrange_polygon_orientation(unsigned start, path_flags_e orientation) { if(orientation == path_flags_none) return start; // Skip all non-vertices at the beginning while(start < m_vertices.total_vertices() && !is_vertex(m_vertices.command(start))) ++start; // Skip all insignificant move_to while(start+1 < m_vertices.total_vertices() && is_move_to(m_vertices.command(start)) && is_move_to(m_vertices.command(start+1))) ++start; // Find the last vertex unsigned end = start + 1; while(end < m_vertices.total_vertices() && !is_next_poly(m_vertices.command(end))) ++end; if(end - start > 2) { if(perceive_polygon_orientation(start, end) != unsigned(orientation)) { // Invert polygon, set orientation flag, and skip all end_poly invert_polygon(start, end); unsigned cmd; while(end < m_vertices.total_vertices() && is_end_poly(cmd = m_vertices.command(end))) { m_vertices.modify_command(end++, set_orientation(cmd, orientation)); } } } return end; } //------------------------------------------------------------------------ template unsigned path_base::arrange_orientations(unsigned start, path_flags_e orientation) { if(orientation != path_flags_none) { while(start < m_vertices.total_vertices()) { start = arrange_polygon_orientation(start, orientation); if(is_stop(m_vertices.command(start))) { ++start; break; } } } return start; } //------------------------------------------------------------------------ template void path_base::arrange_orientations_all_paths(path_flags_e orientation) { if(orientation != path_flags_none) { unsigned start = 0; while(start < m_vertices.total_vertices()) { start = arrange_orientations(start, orientation); } } } //------------------------------------------------------------------------ template void path_base::flip_x(double x1, double x2) { unsigned i; double x, y; for(i = 0; i < m_vertices.total_vertices(); i++) { unsigned cmd = m_vertices.vertex(i, &x, &y); if(is_vertex(cmd)) { m_vertices.modify_vertex(i, x2 - x + x1, y); } } } //------------------------------------------------------------------------ template void path_base::flip_y(double y1, double y2) { unsigned i; double x, y; for(i = 0; i < m_vertices.total_vertices(); i++) { unsigned cmd = m_vertices.vertex(i, &x, &y); if(is_vertex(cmd)) { m_vertices.modify_vertex(i, x, y2 - y + y1); } } } //------------------------------------------------------------------------ template void path_base::translate(double dx, double dy, unsigned path_id) { unsigned num_ver = m_vertices.total_vertices(); for(; path_id < num_ver; path_id++) { double x, y; unsigned cmd = m_vertices.vertex(path_id, &x, &y); if(is_stop(cmd)) break; if(is_vertex(cmd)) { x += dx; y += dy; m_vertices.modify_vertex(path_id, x, y); } } } //------------------------------------------------------------------------ template void path_base::translate_all_paths(double dx, double dy) { unsigned idx; unsigned num_ver = m_vertices.total_vertices(); for(idx = 0; idx < num_ver; idx++) { double x, y; if(is_vertex(m_vertices.vertex(idx, &x, &y))) { x += dx; y += dy; m_vertices.modify_vertex(idx, x, y); } } } //////////////////////////////////////////////////////////////////////////////// //-----------------------------------------------------vertex_stl_storage template class vertex_stl_storage { public: typedef typename Container::value_type vertex_type; typedef typename vertex_type::value_type value_type; void remove_all() { m_vertices.clear(); } void free_all() { m_vertices.clear(); } void add_vertex(double x, double y, unsigned cmd) { m_vertices.push_back(vertex_type(value_type(x), value_type(y), int8u(cmd))); } void modify_vertex(unsigned idx, double x, double y) { vertex_type& v = m_vertices[idx]; v.x = value_type(x); v.y = value_type(y); } void modify_vertex(unsigned idx, double x, double y, unsigned cmd) { vertex_type& v = m_vertices[idx]; v.x = value_type(x); v.y = value_type(y); v.cmd = int8u(cmd); } void modify_command(unsigned idx, unsigned cmd) { m_vertices[idx].cmd = int8u(cmd); } void swap_vertices(unsigned v1, unsigned v2) { vertex_type t = m_vertices[v1]; m_vertices[v1] = m_vertices[v2]; m_vertices[v2] = t; } unsigned last_command() const { return m_vertices.size() ? m_vertices[m_vertices.size() - 1].cmd : path_cmd_stop; } unsigned last_vertex(double* x, double* y) const { if(m_vertices.size() == 0) { *x = *y = 0.0; return path_cmd_stop; } return vertex(m_vertices.size() - 1, x, y); } unsigned prev_vertex(double* x, double* y) const { if(m_vertices.size() < 2) { *x = *y = 0.0; return path_cmd_stop; } return vertex(m_vertices.size() - 2, x, y); } double last_x() const { return m_vertices.size() ? m_vertices[m_vertices.size() - 1].x : 0.0; } double last_y() const { return m_vertices.size() ? m_vertices[m_vertices.size() - 1].y : 0.0; } unsigned total_vertices() const { return m_vertices.size(); } unsigned vertex(unsigned idx, double* x, double* y) const { const vertex_type& v = m_vertices[idx]; *x = v.x; *y = v.y; return v.cmd; } unsigned command(unsigned idx) const { return m_vertices[idx].cmd; } private: Container m_vertices; }; //-----------------------------------------------------------path_storage typedef path_base > path_storage; // Example of declarations path_storage with pod_bvector as a container //----------------------------------------------------------------------- //typedef path_base > > path_storage; } // Example of declarations path_storage with std::vector as a container //--------------------------------------------------------------------------- //#include //namespace agg //{ // typedef path_base > > path_storage; //} #endif mapnik-3.0.9/deps/agg/include/agg_path_storage_integer.h000066400000000000000000000231051262555547000233160ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_PATH_STORAGE_INTEGER_INCLUDED #define AGG_PATH_STORAGE_INTEGER_INCLUDED #include #include "agg_array.h" namespace agg { //---------------------------------------------------------vertex_integer template struct vertex_integer { enum path_cmd { cmd_move_to = 0, cmd_line_to = 1, cmd_curve3 = 2, cmd_curve4 = 3 }; enum coord_scale_e { coord_shift = CoordShift, coord_scale = 1 << coord_shift }; T x,y; vertex_integer() {} vertex_integer(T x_, T y_, unsigned flag) : x(((x_ << 1) & ~1) | (flag & 1)), y(((y_ << 1) & ~1) | (flag >> 1)) {} unsigned vertex(double* x_, double* y_, double dx=0, double dy=0, double scale=1.0) const { *x_ = dx + (double(x >> 1) / coord_scale) * scale; *y_ = dy + (double(y >> 1) / coord_scale) * scale; switch(((y & 1) << 1) | (x & 1)) { case cmd_move_to: return path_cmd_move_to; case cmd_line_to: return path_cmd_line_to; case cmd_curve3: return path_cmd_curve3; case cmd_curve4: return path_cmd_curve4; } return path_cmd_stop; } }; //---------------------------------------------------path_storage_integer template class path_storage_integer { public: typedef T value_type; typedef vertex_integer vertex_integer_type; //-------------------------------------------------------------------- path_storage_integer() : m_storage(), m_vertex_idx(0), m_closed(true) {} //-------------------------------------------------------------------- void remove_all() { m_storage.remove_all(); } //-------------------------------------------------------------------- void move_to(T x, T y) { m_storage.add(vertex_integer_type(x, y, vertex_integer_type::cmd_move_to)); } //-------------------------------------------------------------------- void line_to(T x, T y) { m_storage.add(vertex_integer_type(x, y, vertex_integer_type::cmd_line_to)); } //-------------------------------------------------------------------- void curve3(T x_ctrl, T y_ctrl, T x_to, T y_to) { m_storage.add(vertex_integer_type(x_ctrl, y_ctrl, vertex_integer_type::cmd_curve3)); m_storage.add(vertex_integer_type(x_to, y_to, vertex_integer_type::cmd_curve3)); } //-------------------------------------------------------------------- void curve4(T x_ctrl1, T y_ctrl1, T x_ctrl2, T y_ctrl2, T x_to, T y_to) { m_storage.add(vertex_integer_type(x_ctrl1, y_ctrl1, vertex_integer_type::cmd_curve4)); m_storage.add(vertex_integer_type(x_ctrl2, y_ctrl2, vertex_integer_type::cmd_curve4)); m_storage.add(vertex_integer_type(x_to, y_to, vertex_integer_type::cmd_curve4)); } //-------------------------------------------------------------------- void close_polygon() {} //-------------------------------------------------------------------- unsigned size() const { return m_storage.size(); } unsigned vertex(unsigned idx, double* x, double* y) const { return m_storage[idx].vertex(x, y); } //-------------------------------------------------------------------- unsigned byte_size() const { return m_storage.size() * sizeof(vertex_integer_type); } void serialize(int8u* ptr) const { unsigned i; for(i = 0; i < m_storage.size(); i++) { memcpy(ptr, &m_storage[i], sizeof(vertex_integer_type)); ptr += sizeof(vertex_integer_type); } } //-------------------------------------------------------------------- void rewind(unsigned) { m_vertex_idx = 0; m_closed = true; } //-------------------------------------------------------------------- unsigned vertex(double* x, double* y) { if(m_storage.size() < 2 || m_vertex_idx > m_storage.size()) { *x = 0; *y = 0; return path_cmd_stop; } if(m_vertex_idx == m_storage.size()) { *x = 0; *y = 0; ++m_vertex_idx; return path_cmd_end_poly | path_flags_close; } unsigned cmd = m_storage[m_vertex_idx].vertex(x, y); if(is_move_to(cmd) && !m_closed) { *x = 0; *y = 0; m_closed = true; return path_cmd_end_poly | path_flags_close; } m_closed = false; ++m_vertex_idx; return cmd; } //-------------------------------------------------------------------- rect_d bounding_rect() const { rect_d bounds(1e100, 1e100, -1e100, -1e100); if(m_storage.size() == 0) { bounds.x1 = bounds.y1 = bounds.x2 = bounds.y2 = 0.0; } else { unsigned i; for(i = 0; i < m_storage.size(); i++) { double x, y; m_storage[i].vertex(&x, &y); if(x < bounds.x1) bounds.x1 = x; if(y < bounds.y1) bounds.y1 = y; if(x > bounds.x2) bounds.x2 = x; if(y > bounds.y2) bounds.y2 = y; } } return bounds; } private: pod_bvector m_storage; unsigned m_vertex_idx; bool m_closed; }; //-----------------------------------------serialized_integer_path_adaptor template class serialized_integer_path_adaptor { public: typedef vertex_integer vertex_integer_type; //-------------------------------------------------------------------- serialized_integer_path_adaptor() : m_data(0), m_end(0), m_ptr(0), m_dx(0.0), m_dy(0.0), m_scale(1.0), m_vertices(0) {} //-------------------------------------------------------------------- serialized_integer_path_adaptor(const int8u* data, unsigned size, double dx, double dy) : m_data(data), m_end(data + size), m_ptr(data), m_dx(dx), m_dy(dy), m_vertices(0) {} //-------------------------------------------------------------------- void init(const int8u* data, unsigned size, double dx, double dy, double scale=1.0) { m_data = data; m_end = data + size; m_ptr = data; m_dx = dx; m_dy = dy; m_scale = scale; m_vertices = 0; } //-------------------------------------------------------------------- void rewind(unsigned) { m_ptr = m_data; m_vertices = 0; } //-------------------------------------------------------------------- unsigned vertex(double* x, double* y) { if(m_data == 0 || m_ptr > m_end) { *x = 0; *y = 0; return path_cmd_stop; } if(m_ptr == m_end) { *x = 0; *y = 0; m_ptr += sizeof(vertex_integer_type); return path_cmd_end_poly | path_flags_close; } vertex_integer_type v; memcpy(&v, m_ptr, sizeof(vertex_integer_type)); unsigned cmd = v.vertex(x, y, m_dx, m_dy, m_scale); if(is_move_to(cmd) && m_vertices > 2) { *x = 0; *y = 0; m_vertices = 0; return path_cmd_end_poly | path_flags_close; } ++m_vertices; m_ptr += sizeof(vertex_integer_type); return cmd; } private: const int8u* m_data; const int8u* m_end; const int8u* m_ptr; double m_dx; double m_dy; double m_scale; unsigned m_vertices; }; } #endif mapnik-3.0.9/deps/agg/include/agg_pattern_filters_rgba.h000066400000000000000000000100331262555547000233150ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_PATTERN_FILTERS_RGBA8_INCLUDED #define AGG_PATTERN_FILTERS_RGBA8_INCLUDED #include "agg_basics.h" #include "agg_line_aa_basics.h" #include "agg_color_rgba.h" namespace agg { //=======================================================pattern_filter_nn template struct pattern_filter_nn { typedef ColorT color_type; static unsigned dilation() { return 0; } static void AGG_INLINE pixel_low_res(color_type const* const* buf, color_type* p, int x, int y) { *p = buf[y][x]; } static void AGG_INLINE pixel_high_res(color_type const* const* buf, color_type* p, int x, int y) { *p = buf[y >> line_subpixel_shift] [x >> line_subpixel_shift]; } }; typedef pattern_filter_nn pattern_filter_nn_rgba8; typedef pattern_filter_nn pattern_filter_nn_rgba16; //===========================================pattern_filter_bilinear_rgba template struct pattern_filter_bilinear_rgba { typedef ColorT color_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; static unsigned dilation() { return 1; } static AGG_INLINE void pixel_low_res(color_type const* const* buf, color_type* p, int x, int y) { *p = buf[y][x]; } static AGG_INLINE void pixel_high_res(color_type const* const* buf, color_type* p, int x, int y) { calc_type r, g, b, a; r = g = b = a = line_subpixel_scale * line_subpixel_scale / 2; calc_type weight; int x_lr = x >> line_subpixel_shift; int y_lr = y >> line_subpixel_shift; x &= line_subpixel_mask; y &= line_subpixel_mask; const color_type* ptr = buf[y_lr] + x_lr; weight = (line_subpixel_scale - x) * (line_subpixel_scale - y); r += weight * ptr->r; g += weight * ptr->g; b += weight * ptr->b; a += weight * ptr->a; ++ptr; weight = x * (line_subpixel_scale - y); r += weight * ptr->r; g += weight * ptr->g; b += weight * ptr->b; a += weight * ptr->a; ptr = buf[y_lr + 1] + x_lr; weight = (line_subpixel_scale - x) * y; r += weight * ptr->r; g += weight * ptr->g; b += weight * ptr->b; a += weight * ptr->a; ++ptr; weight = x * y; r += weight * ptr->r; g += weight * ptr->g; b += weight * ptr->b; a += weight * ptr->a; p->r = (value_type)(r >> line_subpixel_shift * 2); p->g = (value_type)(g >> line_subpixel_shift * 2); p->b = (value_type)(b >> line_subpixel_shift * 2); p->a = (value_type)(a >> line_subpixel_shift * 2); } }; typedef pattern_filter_bilinear_rgba pattern_filter_bilinear_rgba8; typedef pattern_filter_bilinear_rgba pattern_filter_bilinear_rgba16; } #endif mapnik-3.0.9/deps/agg/include/agg_pixfmt_amask_adaptor.h000066400000000000000000000205171262555547000233220ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_PIXFMT_AMASK_ADAPTOR_INCLUDED #define AGG_PIXFMT_AMASK_ADAPTOR_INCLUDED #include #include "agg_array.h" #include "agg_rendering_buffer.h" namespace agg { //==================================================pixfmt_amask_adaptor template class pixfmt_amask_adaptor { public: typedef PixFmt pixfmt_type; typedef typename pixfmt_type::color_type color_type; typedef typename pixfmt_type::row_data row_data; typedef AlphaMask amask_type; typedef typename amask_type::cover_type cover_type; private: enum span_extra_tail_e { span_extra_tail = 256 }; void realloc_span(unsigned len) { if(len > m_span.size()) { m_span.resize(len + span_extra_tail); } } void init_span(unsigned len) { realloc_span(len); memset(&m_span[0], amask_type::cover_full, len * sizeof(cover_type)); } void init_span(unsigned len, const cover_type* covers) { realloc_span(len); memcpy(&m_span[0], covers, len * sizeof(cover_type)); } public: pixfmt_amask_adaptor(pixfmt_type& pixf, const amask_type& mask) : m_pixf(&pixf), m_mask(&mask), m_span() {} void attach_pixfmt(pixfmt_type& pixf) { m_pixf = &pixf; } void attach_alpha_mask(const amask_type& mask) { m_mask = &mask; } //-------------------------------------------------------------------- template bool attach_pixfmt(PixFmt2& pixf, int x1, int y1, int x2, int y2) { return m_pixf->attach(pixf, x1, y1, x2, y2); } //-------------------------------------------------------------------- unsigned width() const { return m_pixf->width(); } unsigned height() const { return m_pixf->height(); } //-------------------------------------------------------------------- color_type pixel(int x, int y) { return m_pixf->pixel(x, y); } //-------------------------------------------------------------------- void copy_pixel(int x, int y, const color_type& c) { m_pixf->blend_pixel(x, y, c, m_mask->pixel(x, y)); } //-------------------------------------------------------------------- void blend_pixel(int x, int y, const color_type& c, cover_type cover) { m_pixf->blend_pixel(x, y, c, m_mask->combine_pixel(x, y, cover)); } //-------------------------------------------------------------------- void copy_hline(int x, int y, unsigned len, const color_type& c) { realloc_span(len); m_mask->fill_hspan(x, y, &m_span[0], len); m_pixf->blend_solid_hspan(x, y, len, c, &m_span[0]); } //-------------------------------------------------------------------- void blend_hline(int x, int y, unsigned len, const color_type& c, cover_type cover) { init_span(len); m_mask->combine_hspan(x, y, &m_span[0], len); m_pixf->blend_solid_hspan(x, y, len, c, &m_span[0]); } //-------------------------------------------------------------------- void copy_vline(int x, int y, unsigned len, const color_type& c) { realloc_span(len); m_mask->fill_vspan(x, y, &m_span[0], len); m_pixf->blend_solid_vspan(x, y, len, c, &m_span[0]); } //-------------------------------------------------------------------- void blend_vline(int x, int y, unsigned len, const color_type& c, cover_type cover) { init_span(len); m_mask->combine_vspan(x, y, &m_span[0], len); m_pixf->blend_solid_vspan(x, y, len, c, &m_span[0]); } //-------------------------------------------------------------------- void copy_from(const rendering_buffer& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len) { m_pixf->copy_from(from, xdst, ydst, xsrc, ysrc, len); } //-------------------------------------------------------------------- void blend_solid_hspan(int x, int y, unsigned len, const color_type& c, const cover_type* covers) { init_span(len, covers); m_mask->combine_hspan(x, y, &m_span[0], len); m_pixf->blend_solid_hspan(x, y, len, c, &m_span[0]); } //-------------------------------------------------------------------- void blend_solid_vspan(int x, int y, unsigned len, const color_type& c, const cover_type* covers) { init_span(len, covers); m_mask->combine_vspan(x, y, &m_span[0], len); m_pixf->blend_solid_vspan(x, y, len, c, &m_span[0]); } //-------------------------------------------------------------------- void copy_color_hspan(int x, int y, unsigned len, const color_type* colors) { realloc_span(len); m_mask->fill_hspan(x, y, &m_span[0], len); m_pixf->blend_color_hspan(x, y, len, colors, &m_span[0], cover_full); } //-------------------------------------------------------------------- void copy_color_vspan(int x, int y, unsigned len, const color_type* colors) { realloc_span(len); m_mask->fill_vspan(x, y, &m_span[0], len); m_pixf->blend_color_vspan(x, y, len, colors, &m_span[0], cover_full); } //-------------------------------------------------------------------- void blend_color_hspan(int x, int y, unsigned len, const color_type* colors, const cover_type* covers, cover_type cover = cover_full) { if(covers) { init_span(len, covers); m_mask->combine_hspan(x, y, &m_span[0], len); } else { realloc_span(len); m_mask->fill_hspan(x, y, &m_span[0], len); } m_pixf->blend_color_hspan(x, y, len, colors, &m_span[0], cover); } //-------------------------------------------------------------------- void blend_color_vspan(int x, int y, unsigned len, const color_type* colors, const cover_type* covers, cover_type cover = cover_full) { if(covers) { init_span(len, covers); m_mask->combine_vspan(x, y, &m_span[0], len); } else { realloc_span(len); m_mask->fill_vspan(x, y, &m_span[0], len); } m_pixf->blend_color_vspan(x, y, len, colors, &m_span[0], cover); } private: pixfmt_type* m_pixf; const amask_type* m_mask; pod_array m_span; }; } #endif mapnik-3.0.9/deps/agg/include/agg_pixfmt_base.h000066400000000000000000000055341262555547000214300ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_PIXFMT_BASE_INCLUDED #define AGG_PIXFMT_BASE_INCLUDED #include "agg_basics.h" #include "agg_color_gray.h" #include "agg_color_rgba.h" namespace agg { struct pixfmt_gray_tag { }; struct pixfmt_rgb_tag { }; struct pixfmt_rgba_tag { }; //--------------------------------------------------------------blender_base template struct blender_base { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; static rgba get(value_type r, value_type g, value_type b, value_type a, cover_type cover = cover_full) { if (cover > cover_none) { rgba c( color_type::to_double(r), color_type::to_double(g), color_type::to_double(b), color_type::to_double(a)); if (cover < cover_full) { double x = double(cover) / cover_full; c.r *= x; c.g *= x; c.b *= x; c.a *= x; } return c; } else return rgba::no_color(); } static rgba get(const value_type* p, cover_type cover = cover_full) { return get( p[order_type::R], p[order_type::G], p[order_type::B], p[order_type::A], cover); } static void set(value_type* p, value_type r, value_type g, value_type b, value_type a) { p[order_type::R] = r; p[order_type::G] = g; p[order_type::B] = b; p[order_type::A] = a; } static void set(value_type* p, const rgba& c) { p[order_type::R] = color_type::from_double(c.r); p[order_type::G] = color_type::from_double(c.g); p[order_type::B] = color_type::from_double(c.b); p[order_type::A] = color_type::from_double(c.a); } }; } #endif mapnik-3.0.9/deps/agg/include/agg_pixfmt_gray.h000066400000000000000000000576621262555547000214710ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_PIXFMT_GRAY_INCLUDED #define AGG_PIXFMT_GRAY_INCLUDED #include #include "agg_pixfmt_base.h" #include "agg_rendering_buffer.h" namespace agg { //============================================================blender_gray template struct blender_gray { typedef ColorT color_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; // Blend pixels using the non-premultiplied form of Alvy-Ray Smith's // compositing function. Since the render buffer is opaque we skip the // initial premultiply and final demultiply. static AGG_INLINE void blend_pix(value_type* p, value_type cv, value_type alpha, cover_type cover) { blend_pix(p, cv, color_type::mult_cover(alpha, cover)); } static AGG_INLINE void blend_pix(value_type* p, value_type cv, value_type alpha) { *p = color_type::lerp(*p, cv, alpha); } }; //======================================================blender_gray_pre template struct blender_gray_pre { typedef ColorT color_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; // Blend pixels using the premultiplied form of Alvy-Ray Smith's // compositing function. static AGG_INLINE void blend_pix(value_type* p, value_type cv, value_type alpha, cover_type cover) { blend_pix(p, color_type::mult_cover(cv, cover), color_type::mult_cover(alpha, cover)); } static AGG_INLINE void blend_pix(value_type* p, value_type cv, value_type alpha) { *p = color_type::prelerp(*p, cv, alpha); } }; //=====================================================apply_gamma_dir_gray template class apply_gamma_dir_gray { public: typedef typename ColorT::value_type value_type; apply_gamma_dir_gray(const GammaLut& gamma) : m_gamma(gamma) {} AGG_INLINE void operator () (value_type* p) { *p = m_gamma.dir(*p); } private: const GammaLut& m_gamma; }; //=====================================================apply_gamma_inv_gray template class apply_gamma_inv_gray { public: typedef typename ColorT::value_type value_type; apply_gamma_inv_gray(const GammaLut& gamma) : m_gamma(gamma) {} AGG_INLINE void operator () (value_type* p) { *p = m_gamma.inv(*p); } private: const GammaLut& m_gamma; }; //=================================================pixfmt_alpha_blend_gray template class pixfmt_alpha_blend_gray { public: typedef pixfmt_gray_tag pixfmt_category; typedef RenBuf rbuf_type; typedef typename rbuf_type::row_data row_data; typedef Blender blender_type; typedef typename blender_type::color_type color_type; typedef int order_type; // A fake one typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum { num_components = 1, pix_width = sizeof(value_type) * Step, pix_step = Step, pix_offset = Offset, }; struct pixel_type { value_type c[num_components]; void set(value_type v) { c[0] = v; } void set(const color_type& color) { set(color.v); } void get(value_type& v) const { v = c[0]; } color_type get() const { return color_type(c[0]); } pixel_type* next() { return (pixel_type*)(c + pix_step); } const pixel_type* next() const { return (const pixel_type*)(c + pix_step); } pixel_type* advance(int n) { return (pixel_type*)(c + n * pix_step); } const pixel_type* advance(int n) const { return (const pixel_type*)(c + n * pix_step); } }; private: //-------------------------------------------------------------------- AGG_INLINE void blend_pix(pixel_type* p, value_type v, value_type a, unsigned cover) { blender_type::blend_pix(p->c, v, a, cover); } //-------------------------------------------------------------------- AGG_INLINE void blend_pix(pixel_type* p, value_type v, value_type a) { blender_type::blend_pix(p->c, v, a); } //-------------------------------------------------------------------- AGG_INLINE void blend_pix(pixel_type* p, const color_type& c, unsigned cover) { blender_type::blend_pix(p->c, c.v, c.a, cover); } //-------------------------------------------------------------------- AGG_INLINE void blend_pix(pixel_type* p, const color_type& c) { blender_type::blend_pix(p->c, c.v, c.a); } //-------------------------------------------------------------------- AGG_INLINE void copy_or_blend_pix(pixel_type* p, const color_type& c, unsigned cover) { if (!c.is_transparent()) { if (c.is_opaque() && cover == cover_mask) { p->set(c); } else { blend_pix(p, c, cover); } } } //-------------------------------------------------------------------- AGG_INLINE void copy_or_blend_pix(pixel_type* p, const color_type& c) { if (!c.is_transparent()) { if (c.is_opaque()) { p->set(c); } else { blend_pix(p, c); } } } public: //-------------------------------------------------------------------- explicit pixfmt_alpha_blend_gray(rbuf_type& rb) : m_rbuf(&rb) {} void attach(rbuf_type& rb) { m_rbuf = &rb; } //-------------------------------------------------------------------- template bool attach(PixFmt& pixf, int x1, int y1, int x2, int y2) { rect_i r(x1, y1, x2, y2); if (r.clip(rect_i(0, 0, pixf.width()-1, pixf.height()-1))) { int stride = pixf.stride(); m_rbuf->attach(pixf.pix_ptr(r.x1, stride < 0 ? r.y2 : r.y1), (r.x2 - r.x1) + 1, (r.y2 - r.y1) + 1, stride); return true; } return false; } //-------------------------------------------------------------------- AGG_INLINE unsigned width() const { return m_rbuf->width(); } AGG_INLINE unsigned height() const { return m_rbuf->height(); } AGG_INLINE int stride() const { return m_rbuf->stride(); } //-------------------------------------------------------------------- int8u* row_ptr(int y) { return m_rbuf->row_ptr(y); } const int8u* row_ptr(int y) const { return m_rbuf->row_ptr(y); } row_data row(int y) const { return m_rbuf->row(y); } //-------------------------------------------------------------------- AGG_INLINE int8u* pix_ptr(int x, int y) { return m_rbuf->row_ptr(y) + sizeof(value_type) * (x * pix_step + pix_offset); } AGG_INLINE const int8u* pix_ptr(int x, int y) const { return m_rbuf->row_ptr(y) + sizeof(value_type) * (x * pix_step + pix_offset); } // Return pointer to pixel value, forcing row to be allocated. AGG_INLINE pixel_type* pix_value_ptr(int x, int y, unsigned len) { return (pixel_type*)(m_rbuf->row_ptr(x, y, len) + sizeof(value_type) * (x * pix_step + pix_offset)); } // Return pointer to pixel value, or null if row not allocated. AGG_INLINE const pixel_type* pix_value_ptr(int x, int y) const { int8u* p = m_rbuf->row_ptr(y); return p ? (pixel_type*)(p + sizeof(value_type) * (x * pix_step + pix_offset)) : 0; } // Get pixel pointer from raw buffer pointer. AGG_INLINE static pixel_type* pix_value_ptr(void* p) { return (pixel_type*)((value_type*)p + pix_offset); } // Get pixel pointer from raw buffer pointer. AGG_INLINE static const pixel_type* pix_value_ptr(const void* p) { return (const pixel_type*)((const value_type*)p + pix_offset); } //-------------------------------------------------------------------- AGG_INLINE static void write_plain_color(void* p, color_type c) { // Grayscale formats are implicitly premultiplied. c.premultiply(); pix_value_ptr(p)->set(c); } //-------------------------------------------------------------------- AGG_INLINE static color_type read_plain_color(const void* p) { return pix_value_ptr(p)->get(); } //-------------------------------------------------------------------- AGG_INLINE static void make_pix(int8u* p, const color_type& c) { ((pixel_type*)p)->set(c); } //-------------------------------------------------------------------- AGG_INLINE color_type pixel(int x, int y) const { if (const pixel_type* p = pix_value_ptr(x, y)) { return p->get(); } return color_type::no_color(); } //-------------------------------------------------------------------- AGG_INLINE void copy_pixel(int x, int y, const color_type& c) { pix_value_ptr(x, y, 1)->set(c); } //-------------------------------------------------------------------- AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover) { copy_or_blend_pix(pix_value_ptr(x, y, 1), c, cover); } //-------------------------------------------------------------------- AGG_INLINE void copy_hline(int x, int y, unsigned len, const color_type& c) { pixel_type* p = pix_value_ptr(x, y, len); do { p->set(c); p = p->next(); } while(--len); } //-------------------------------------------------------------------- AGG_INLINE void copy_vline(int x, int y, unsigned len, const color_type& c) { do { pix_value_ptr(x, y++, 1)->set(c); } while (--len); } //-------------------------------------------------------------------- void blend_hline(int x, int y, unsigned len, const color_type& c, int8u cover) { if (!c.is_transparent()) { pixel_type* p = pix_value_ptr(x, y, len); if (c.is_opaque() && cover == cover_mask) { do { p->set(c); p = p->next(); } while (--len); } else { do { blend_pix(p, c, cover); p = p->next(); } while (--len); } } } //-------------------------------------------------------------------- void blend_vline(int x, int y, unsigned len, const color_type& c, int8u cover) { if (!c.is_transparent()) { if (c.is_opaque() && cover == cover_mask) { do { pix_value_ptr(x, y++, 1)->set(c); } while (--len); } else { do { blend_pix(pix_value_ptr(x, y++, 1), c, cover); } while (--len); } } } //-------------------------------------------------------------------- void blend_solid_hspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { if (!c.is_transparent()) { pixel_type* p = pix_value_ptr(x, y, len); do { if (c.is_opaque() && *covers == cover_mask) { p->set(c); } else { blend_pix(p, c, *covers); } p = p->next(); ++covers; } while (--len); } } //-------------------------------------------------------------------- void blend_solid_vspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { if (!c.is_transparent()) { do { pixel_type* p = pix_value_ptr(x, y++, 1); if (c.is_opaque() && *covers == cover_mask) { p->set(c); } else { blend_pix(p, c, *covers); } ++covers; } while (--len); } } //-------------------------------------------------------------------- void copy_color_hspan(int x, int y, unsigned len, const color_type* colors) { pixel_type* p = pix_value_ptr(x, y, len); do { p->set(*colors++); p = p->next(); } while (--len); } //-------------------------------------------------------------------- void copy_color_vspan(int x, int y, unsigned len, const color_type* colors) { do { pix_value_ptr(x, y++, 1)->set(*colors++); } while (--len); } //-------------------------------------------------------------------- void blend_color_hspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { pixel_type* p = pix_value_ptr(x, y, len); if (covers) { do { copy_or_blend_pix(p, *colors++, *covers++); p = p->next(); } while (--len); } else { if (cover == cover_mask) { do { copy_or_blend_pix(p, *colors++); p = p->next(); } while (--len); } else { do { copy_or_blend_pix(p, *colors++, cover); p = p->next(); } while (--len); } } } //-------------------------------------------------------------------- void blend_color_vspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { if (covers) { do { copy_or_blend_pix(pix_value_ptr(x, y++, 1), *colors++, *covers++); } while (--len); } else { if (cover == cover_mask) { do { copy_or_blend_pix(pix_value_ptr(x, y++, 1), *colors++); } while (--len); } else { do { copy_or_blend_pix(pix_value_ptr(x, y++, 1), *colors++, cover); } while (--len); } } } //-------------------------------------------------------------------- template void for_each_pixel(Function f) { unsigned y; for (y = 0; y < height(); ++y) { row_data r = m_rbuf->row(y); if (r.ptr) { unsigned len = r.x2 - r.x1 + 1; pixel_type* p = pix_value_ptr(r.x1, y, len); do { f(p->c); p = p->next(); } while (--len); } } } //-------------------------------------------------------------------- template void apply_gamma_dir(const GammaLut& g) { for_each_pixel(apply_gamma_dir_gray(g)); } //-------------------------------------------------------------------- template void apply_gamma_inv(const GammaLut& g) { for_each_pixel(apply_gamma_inv_gray(g)); } //-------------------------------------------------------------------- template void copy_from(const RenBuf2& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len) { if (const int8u* p = from.row_ptr(ysrc)) { memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width, p + xsrc * pix_width, len * pix_width); } } //-------------------------------------------------------------------- // Blend from single color, using grayscale surface as alpha channel. template void blend_from_color(const SrcPixelFormatRenderer& from, const color_type& color, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::pixel_type src_pixel_type; typedef typename SrcPixelFormatRenderer::color_type src_color_type; if (const src_pixel_type* psrc = from.pix_value_ptr(xsrc, ysrc)) { pixel_type* pdst = pix_value_ptr(xdst, ydst, len); do { copy_or_blend_pix(pdst, color, src_color_type::scale_cover(cover, psrc->c[0])); psrc = psrc->next(); pdst = pdst->next(); } while (--len); } } //-------------------------------------------------------------------- // Blend from color table, using grayscale surface as indexes into table. // Obviously, this only works for integer value types. template void blend_from_lut(const SrcPixelFormatRenderer& from, const color_type* color_lut, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::pixel_type src_pixel_type; if (const src_pixel_type* psrc = from.pix_value_ptr(xsrc, ysrc)) { pixel_type* pdst = pix_value_ptr(xdst, ydst, len); do { copy_or_blend_pix(pdst, color_lut[psrc->c[0]], cover); psrc = psrc->next(); pdst = pdst->next(); } while (--len); } } private: rbuf_type* m_rbuf; }; typedef blender_gray blender_gray8; typedef blender_gray blender_sgray8; typedef blender_gray blender_gray16; typedef blender_gray blender_gray32; typedef blender_gray_pre blender_gray8_pre; typedef blender_gray_pre blender_sgray8_pre; typedef blender_gray_pre blender_gray16_pre; typedef blender_gray_pre blender_gray32_pre; typedef pixfmt_alpha_blend_gray pixfmt_gray8; typedef pixfmt_alpha_blend_gray pixfmt_sgray8; typedef pixfmt_alpha_blend_gray pixfmt_gray16; typedef pixfmt_alpha_blend_gray pixfmt_gray32; typedef pixfmt_alpha_blend_gray pixfmt_gray8_pre; typedef pixfmt_alpha_blend_gray pixfmt_sgray8_pre; typedef pixfmt_alpha_blend_gray pixfmt_gray16_pre; typedef pixfmt_alpha_blend_gray pixfmt_gray32_pre; } #endif mapnik-3.0.9/deps/agg/include/agg_pixfmt_rgb.h000066400000000000000000000750601262555547000212710ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_PIXFMT_RGB_INCLUDED #define AGG_PIXFMT_RGB_INCLUDED #include #include "agg_basics.h" #include "agg_color_rgba.h" #include "agg_rendering_buffer.h" namespace agg { //=====================================================apply_gamma_dir_rgb template class apply_gamma_dir_rgb { public: typedef typename ColorT::value_type value_type; apply_gamma_dir_rgb(const GammaLut& gamma) : m_gamma(gamma) {} AGG_INLINE void operator () (value_type* p) { p[Order::R] = m_gamma.dir(p[Order::R]); p[Order::G] = m_gamma.dir(p[Order::G]); p[Order::B] = m_gamma.dir(p[Order::B]); } private: const GammaLut& m_gamma; }; //=====================================================apply_gamma_inv_rgb template class apply_gamma_inv_rgb { public: typedef typename ColorT::value_type value_type; apply_gamma_inv_rgb(const GammaLut& gamma) : m_gamma(gamma) {} AGG_INLINE void operator () (value_type* p) { p[Order::R] = m_gamma.inv(p[Order::R]); p[Order::G] = m_gamma.inv(p[Order::G]); p[Order::B] = m_gamma.inv(p[Order::B]); } private: const GammaLut& m_gamma; }; //=========================================================blender_rgb template struct blender_rgb { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift }; //-------------------------------------------------------------------- static AGG_INLINE void blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover=0) { p[Order::R] += (value_type)(((cr - p[Order::R]) * alpha) >> base_shift); p[Order::G] += (value_type)(((cg - p[Order::G]) * alpha) >> base_shift); p[Order::B] += (value_type)(((cb - p[Order::B]) * alpha) >> base_shift); } }; //======================================================blender_rgb_pre template struct blender_rgb_pre { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift }; //-------------------------------------------------------------------- static AGG_INLINE void blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover) { alpha = color_type::base_mask - alpha; cover = (cover + 1) << (base_shift - 8); p[Order::R] = (value_type)((p[Order::R] * alpha + cr * cover) >> base_shift); p[Order::G] = (value_type)((p[Order::G] * alpha + cg * cover) >> base_shift); p[Order::B] = (value_type)((p[Order::B] * alpha + cb * cover) >> base_shift); } //-------------------------------------------------------------------- static AGG_INLINE void blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha) { alpha = color_type::base_mask - alpha; p[Order::R] = (value_type)(((p[Order::R] * alpha) >> base_shift) + cr); p[Order::G] = (value_type)(((p[Order::G] * alpha) >> base_shift) + cg); p[Order::B] = (value_type)(((p[Order::B] * alpha) >> base_shift) + cb); } }; //===================================================blender_rgb_gamma template class blender_rgb_gamma { public: typedef ColorT color_type; typedef Order order_type; typedef Gamma gamma_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift }; //-------------------------------------------------------------------- blender_rgb_gamma() : m_gamma(0) {} void gamma(const gamma_type& g) { m_gamma = &g; } //-------------------------------------------------------------------- AGG_INLINE void blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover=0) { calc_type r = m_gamma->dir(p[Order::R]); calc_type g = m_gamma->dir(p[Order::G]); calc_type b = m_gamma->dir(p[Order::B]); p[Order::R] = m_gamma->inv((((m_gamma->dir(cr) - r) * alpha) >> base_shift) + r); p[Order::G] = m_gamma->inv((((m_gamma->dir(cg) - g) * alpha) >> base_shift) + g); p[Order::B] = m_gamma->inv((((m_gamma->dir(cb) - b) * alpha) >> base_shift) + b); } private: const gamma_type* m_gamma; }; //==================================================pixfmt_alpha_blend_rgb template class pixfmt_alpha_blend_rgb { public: typedef RenBuf rbuf_type; typedef Blender blender_type; typedef typename rbuf_type::row_data row_data; typedef typename blender_type::color_type color_type; typedef typename blender_type::order_type order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_scale = color_type::base_scale, base_mask = color_type::base_mask, pix_width = sizeof(value_type) * 3 }; private: //-------------------------------------------------------------------- AGG_INLINE void copy_or_blend_pix(value_type* p, const color_type& c, unsigned cover) { if (c.a) { calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8; if(alpha == base_mask) { p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; } else { m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover); } } } //-------------------------------------------------------------------- AGG_INLINE void copy_or_blend_pix(value_type* p, const color_type& c) { if (c.a) { if(c.a == base_mask) { p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; } else { m_blender.blend_pix(p, c.r, c.g, c.b, c.a); } } } public: //-------------------------------------------------------------------- explicit pixfmt_alpha_blend_rgb(rbuf_type& rb) : m_rbuf(&rb) {} void attach(rbuf_type& rb) { m_rbuf = &rb; } //-------------------------------------------------------------------- template bool attach(PixFmt& pixf, int x1, int y1, int x2, int y2) { rect_i r(x1, y1, x2, y2); if(r.clip(rect_i(0, 0, pixf.width()-1, pixf.height()-1))) { int stride = pixf.stride(); m_rbuf->attach(pixf.pix_ptr(r.x1, stride < 0 ? r.y2 : r.y1), (r.x2 - r.x1) + 1, (r.y2 - r.y1) + 1, stride); return true; } return false; } //-------------------------------------------------------------------- Blender& blender() { return m_blender; } //-------------------------------------------------------------------- AGG_INLINE unsigned width() const { return m_rbuf->width(); } AGG_INLINE unsigned height() const { return m_rbuf->height(); } AGG_INLINE int stride() const { return m_rbuf->stride(); } //-------------------------------------------------------------------- AGG_INLINE int8u* row_ptr(int y) { return m_rbuf->row_ptr(y); } AGG_INLINE const int8u* row_ptr(int y) const { return m_rbuf->row_ptr(y); } AGG_INLINE row_data row(int y) const { return m_rbuf->row(y); } //-------------------------------------------------------------------- AGG_INLINE int8u* pix_ptr(int x, int y) { return m_rbuf->row_ptr(y) + x * pix_width; } AGG_INLINE const int8u* pix_ptr(int x, int y) const { return m_rbuf->row_ptr(y) + x * pix_width; } //-------------------------------------------------------------------- AGG_INLINE static void make_pix(int8u* p, const color_type& c) { ((value_type*)p)[order_type::R] = c.r; ((value_type*)p)[order_type::G] = c.g; ((value_type*)p)[order_type::B] = c.b; } //-------------------------------------------------------------------- AGG_INLINE color_type pixel(int x, int y) const { value_type* p = (value_type*)m_rbuf->row_ptr(y) + x + x + x; return color_type(p[order_type::R], p[order_type::G], p[order_type::B]); } //-------------------------------------------------------------------- AGG_INLINE void copy_pixel(int x, int y, const color_type& c) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, 1) + x + x + x; p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; } //-------------------------------------------------------------------- AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover) { copy_or_blend_pix((value_type*)m_rbuf->row_ptr(x, y, 1) + x + x + x, c, cover); } //-------------------------------------------------------------------- AGG_INLINE void copy_hline(int x, int y, unsigned len, const color_type& c) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + x + x + x; do { p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; p += 3; } while(--len); } //-------------------------------------------------------------------- AGG_INLINE void copy_vline(int x, int y, unsigned len, const color_type& c) { do { value_type* p = (value_type*) m_rbuf->row_ptr(x, y++, 1) + x + x + x; p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; } while(--len); } //-------------------------------------------------------------------- void blend_hline(int x, int y, unsigned len, const color_type& c, int8u cover) { if (c.a) { value_type* p = (value_type*) m_rbuf->row_ptr(x, y, len) + x + x + x; calc_type alpha = (calc_type(c.a) * (calc_type(cover) + 1)) >> 8; if(alpha == base_mask) { do { p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; p += 3; } while(--len); } else { do { m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover); p += 3; } while(--len); } } } //-------------------------------------------------------------------- void blend_vline(int x, int y, unsigned len, const color_type& c, int8u cover) { if (c.a) { value_type* p; calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8; if(alpha == base_mask) { do { p = (value_type*) m_rbuf->row_ptr(x, y++, 1) + x + x + x; p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; } while(--len); } else { do { p = (value_type*) m_rbuf->row_ptr(x, y++, 1) + x + x + x; m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover); } while(--len); } } } //-------------------------------------------------------------------- void blend_solid_hspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { if (c.a) { value_type* p = (value_type*) m_rbuf->row_ptr(x, y, len) + x + x + x; do { calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8; if(alpha == base_mask) { p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; } else { m_blender.blend_pix(p, c.r, c.g, c.b, alpha, *covers); } p += 3; ++covers; } while(--len); } } //-------------------------------------------------------------------- void blend_solid_vspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { if (c.a) { do { value_type* p = (value_type*) m_rbuf->row_ptr(x, y++, 1) + x + x + x; calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8; if(alpha == base_mask) { p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; } else { m_blender.blend_pix(p, c.r, c.g, c.b, alpha, *covers); } ++covers; } while(--len); } } //-------------------------------------------------------------------- void copy_color_hspan(int x, int y, unsigned len, const color_type* colors) { value_type* p = (value_type*) m_rbuf->row_ptr(x, y, len) + x + x + x; do { p[order_type::R] = colors->r; p[order_type::G] = colors->g; p[order_type::B] = colors->b; ++colors; p += 3; } while(--len); } //-------------------------------------------------------------------- void copy_color_vspan(int x, int y, unsigned len, const color_type* colors) { do { value_type* p = (value_type*) m_rbuf->row_ptr(x, y++, 1) + x + x + x; p[order_type::R] = colors->r; p[order_type::G] = colors->g; p[order_type::B] = colors->b; ++colors; } while(--len); } //-------------------------------------------------------------------- void blend_color_hspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { value_type* p = (value_type*) m_rbuf->row_ptr(x, y, len) + x + x + x; if(covers) { do { copy_or_blend_pix(p, *colors++, *covers++); p += 3; } while(--len); } else { if(cover == 255) { do { copy_or_blend_pix(p, *colors++); p += 3; } while(--len); } else { do { copy_or_blend_pix(p, *colors++, cover); p += 3; } while(--len); } } } //-------------------------------------------------------------------- void blend_color_vspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { value_type* p; if(covers) { do { p = (value_type*) m_rbuf->row_ptr(x, y++, 1) + x + x + x; copy_or_blend_pix(p, *colors++, *covers++); } while(--len); } else { if(cover == 255) { do { p = (value_type*) m_rbuf->row_ptr(x, y++, 1) + x + x + x; copy_or_blend_pix(p, *colors++); } while(--len); } else { do { p = (value_type*) m_rbuf->row_ptr(x, y++, 1) + x + x + x; copy_or_blend_pix(p, *colors++, cover); } while(--len); } } } //-------------------------------------------------------------------- template void for_each_pixel(Function f) { unsigned y; for(y = 0; y < height(); ++y) { row_data r = m_rbuf->row(y); if(r.ptr) { unsigned len = r.x2 - r.x1 + 1; value_type* p = (value_type*) m_rbuf->row_ptr(r.x1, y, len) + r.x1 * 3; do { f(p); p += 3; } while(--len); } } } //-------------------------------------------------------------------- template void apply_gamma_dir(const GammaLut& g) { for_each_pixel(apply_gamma_dir_rgb(g)); } //-------------------------------------------------------------------- template void apply_gamma_inv(const GammaLut& g) { for_each_pixel(apply_gamma_inv_rgb(g)); } //-------------------------------------------------------------------- template void copy_from(const RenBuf2& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len) { const int8u* p = from.row_ptr(ysrc); if(p) { memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width, p + xsrc * pix_width, len * pix_width); } } //-------------------------------------------------------------------- template void blend_from(const SrcPixelFormatRenderer& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::order_type src_order; const value_type* psrc = (const value_type*)from.row_ptr(ysrc); if(psrc) { psrc += xsrc * 4; value_type* pdst = (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + xdst * 3; if(cover == 255) { do { value_type alpha = psrc[src_order::A]; if(alpha) { if(alpha == base_mask) { pdst[order_type::R] = psrc[src_order::R]; pdst[order_type::G] = psrc[src_order::G]; pdst[order_type::B] = psrc[src_order::B]; } else { m_blender.blend_pix(pdst, psrc[src_order::R], psrc[src_order::G], psrc[src_order::B], alpha); } } psrc += 4; pdst += 3; } while(--len); } else { color_type color; do { color.r = psrc[src_order::R]; color.g = psrc[src_order::G]; color.b = psrc[src_order::B]; color.a = psrc[src_order::A]; copy_or_blend_pix(pdst, color, cover); psrc += 4; pdst += 3; } while(--len); } } } //-------------------------------------------------------------------- template void blend_from_color(const SrcPixelFormatRenderer& from, const color_type& color, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::value_type src_value_type; const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc); if(psrc) { value_type* pdst = (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + xdst * 3; do { copy_or_blend_pix(pdst, color, (*psrc * cover + base_mask) >> base_shift); ++psrc; pdst += 3; } while(--len); } } //-------------------------------------------------------------------- template void blend_from_lut(const SrcPixelFormatRenderer& from, const color_type* color_lut, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::value_type src_value_type; const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc); if(psrc) { value_type* pdst = (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + xdst * 3; if(cover == 255) { do { const color_type& color = color_lut[*psrc]; m_blender.blend_pix(pdst, color.r, color.g, color.b, color.a); ++psrc; pdst += 3; } while(--len); } else { do { copy_or_blend_pix(pdst, color_lut[*psrc], cover); ++psrc; pdst += 3; } while(--len); } } } private: rbuf_type* m_rbuf; Blender m_blender; }; typedef pixfmt_alpha_blend_rgb, rendering_buffer> pixfmt_rgb24; //----pixfmt_rgb24 typedef pixfmt_alpha_blend_rgb, rendering_buffer> pixfmt_bgr24; //----pixfmt_bgr24 typedef pixfmt_alpha_blend_rgb, rendering_buffer> pixfmt_rgb48; //----pixfmt_rgb48 typedef pixfmt_alpha_blend_rgb, rendering_buffer> pixfmt_bgr48; //----pixfmt_bgr48 typedef pixfmt_alpha_blend_rgb, rendering_buffer> pixfmt_rgb24_pre; //----pixfmt_rgb24_pre typedef pixfmt_alpha_blend_rgb, rendering_buffer> pixfmt_bgr24_pre; //----pixfmt_bgr24_pre typedef pixfmt_alpha_blend_rgb, rendering_buffer> pixfmt_rgb48_pre; //----pixfmt_rgb48_pre typedef pixfmt_alpha_blend_rgb, rendering_buffer> pixfmt_bgr48_pre; //----pixfmt_bgr48_pre //-----------------------------------------------------pixfmt_rgb24_gamma template class pixfmt_rgb24_gamma : public pixfmt_alpha_blend_rgb, rendering_buffer> { public: pixfmt_rgb24_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb, rendering_buffer>(rb) { this->blender().gamma(g); } }; //-----------------------------------------------------pixfmt_bgr24_gamma template class pixfmt_bgr24_gamma : public pixfmt_alpha_blend_rgb, rendering_buffer> { public: pixfmt_bgr24_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb, rendering_buffer>(rb) { this->blender().gamma(g); } }; //-----------------------------------------------------pixfmt_rgb48_gamma template class pixfmt_rgb48_gamma : public pixfmt_alpha_blend_rgb, rendering_buffer> { public: pixfmt_rgb48_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb, rendering_buffer>(rb) { this->blender().gamma(g); } }; //-----------------------------------------------------pixfmt_bgr48_gamma template class pixfmt_bgr48_gamma : public pixfmt_alpha_blend_rgb, rendering_buffer> { public: pixfmt_bgr48_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb, rendering_buffer>(rb) { this->blender().gamma(g); } }; } #endif mapnik-3.0.9/deps/agg/include/agg_pixfmt_rgb_packed.h000066400000000000000000001401751262555547000226000ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_PIXFMT_RGB_PACKED_INCLUDED #define AGG_PIXFMT_RGB_PACKED_INCLUDED #include #include "agg_basics.h" #include "agg_color_rgba.h" #include "agg_rendering_buffer.h" namespace agg { //=========================================================blender_rgb555 struct blender_rgb555 { typedef rgba8 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int16u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type rgb = *p; calc_type r = (rgb >> 7) & 0xF8; calc_type g = (rgb >> 2) & 0xF8; calc_type b = (rgb << 3) & 0xF8; *p = (pixel_type) (((((cr - r) * alpha + (r << 8)) >> 1) & 0x7C00) | ((((cg - g) * alpha + (g << 8)) >> 6) & 0x03E0) | (((cb - b) * alpha + (b << 8)) >> 11) | 0x8000); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xF8) << 7) | ((g & 0xF8) << 2) | (b >> 3) | 0x8000); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 7) & 0xF8, (p >> 2) & 0xF8, (p << 3) & 0xF8); } }; //=====================================================blender_rgb555_pre struct blender_rgb555_pre { typedef rgba8 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int16u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover) { alpha = color_type::base_mask - alpha; pixel_type rgb = *p; calc_type r = (rgb >> 7) & 0xF8; calc_type g = (rgb >> 2) & 0xF8; calc_type b = (rgb << 3) & 0xF8; *p = (pixel_type) ((((r * alpha + cr * cover) >> 1) & 0x7C00) | (((g * alpha + cg * cover) >> 6) & 0x03E0) | ((b * alpha + cb * cover) >> 11) | 0x8000); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xF8) << 7) | ((g & 0xF8) << 2) | (b >> 3) | 0x8000); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 7) & 0xF8, (p >> 2) & 0xF8, (p << 3) & 0xF8); } }; //=====================================================blender_rgb555_gamma template class blender_rgb555_gamma { public: typedef rgba8 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int16u pixel_type; typedef Gamma gamma_type; blender_rgb555_gamma() : m_gamma(0) {} void gamma(const gamma_type& g) { m_gamma = &g; } AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type rgb = *p; calc_type r = m_gamma->dir((rgb >> 7) & 0xF8); calc_type g = m_gamma->dir((rgb >> 2) & 0xF8); calc_type b = m_gamma->dir((rgb << 3) & 0xF8); *p = (pixel_type) (((m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 8)) >> 8) << 7) & 0x7C00) | ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 8)) >> 8) << 2) & 0x03E0) | (m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 8)) >> 8) >> 3) | 0x8000); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xF8) << 7) | ((g & 0xF8) << 2) | (b >> 3) | 0x8000); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 7) & 0xF8, (p >> 2) & 0xF8, (p << 3) & 0xF8); } private: const Gamma* m_gamma; }; //=========================================================blender_rgb565 struct blender_rgb565 { typedef rgba8 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int16u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type rgb = *p; calc_type r = (rgb >> 8) & 0xF8; calc_type g = (rgb >> 3) & 0xFC; calc_type b = (rgb << 3) & 0xF8; *p = (pixel_type) (((((cr - r) * alpha + (r << 8)) ) & 0xF800) | ((((cg - g) * alpha + (g << 8)) >> 5) & 0x07E0) | (((cb - b) * alpha + (b << 8)) >> 11)); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3)); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 8) & 0xF8, (p >> 3) & 0xFC, (p << 3) & 0xF8); } }; //=====================================================blender_rgb565_pre struct blender_rgb565_pre { typedef rgba8 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int16u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover) { alpha = color_type::base_mask - alpha; pixel_type rgb = *p; calc_type r = (rgb >> 8) & 0xF8; calc_type g = (rgb >> 3) & 0xFC; calc_type b = (rgb << 3) & 0xF8; *p = (pixel_type) ((((r * alpha + cr * cover) ) & 0xF800) | (((g * alpha + cg * cover) >> 5 ) & 0x07E0) | ((b * alpha + cb * cover) >> 11)); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3)); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 8) & 0xF8, (p >> 3) & 0xFC, (p << 3) & 0xF8); } }; //=====================================================blender_rgb565_gamma template class blender_rgb565_gamma { public: typedef rgba8 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int16u pixel_type; typedef Gamma gamma_type; blender_rgb565_gamma() : m_gamma(0) {} void gamma(const gamma_type& g) { m_gamma = &g; } AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type rgb = *p; calc_type r = m_gamma->dir((rgb >> 8) & 0xF8); calc_type g = m_gamma->dir((rgb >> 3) & 0xFC); calc_type b = m_gamma->dir((rgb << 3) & 0xF8); *p = (pixel_type) (((m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 8)) >> 8) << 8) & 0xF800) | ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 8)) >> 8) << 3) & 0x07E0) | (m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 8)) >> 8) >> 3)); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3)); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 8) & 0xF8, (p >> 3) & 0xFC, (p << 3) & 0xF8); } private: const Gamma* m_gamma; }; //=====================================================blender_rgbAAA struct blender_rgbAAA { typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type rgb = *p; calc_type r = (rgb >> 14) & 0xFFC0; calc_type g = (rgb >> 4) & 0xFFC0; calc_type b = (rgb << 6) & 0xFFC0; *p = (pixel_type) (((((cr - r) * alpha + (r << 16)) >> 2) & 0x3FF00000) | ((((cg - g) * alpha + (g << 16)) >> 12) & 0x000FFC00) | (((cb - b) * alpha + (b << 16)) >> 22) | 0xC0000000); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xFFC0) << 14) | ((g & 0xFFC0) << 4) | (b >> 6) | 0xC0000000); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 14) & 0xFFC0, (p >> 4) & 0xFFC0, (p << 6) & 0xFFC0); } }; //==================================================blender_rgbAAA_pre struct blender_rgbAAA_pre { typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover) { alpha = color_type::base_mask - alpha; cover = (cover + 1) << (color_type::base_shift - 8); pixel_type rgb = *p; calc_type r = (rgb >> 14) & 0xFFC0; calc_type g = (rgb >> 4) & 0xFFC0; calc_type b = (rgb << 6) & 0xFFC0; *p = (pixel_type) ((((r * alpha + cr * cover) >> 2) & 0x3FF00000) | (((g * alpha + cg * cover) >> 12) & 0x000FFC00) | ((b * alpha + cb * cover) >> 22) | 0xC0000000); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xFFC0) << 14) | ((g & 0xFFC0) << 4) | (b >> 6) | 0xC0000000); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 14) & 0xFFC0, (p >> 4) & 0xFFC0, (p << 6) & 0xFFC0); } }; //=================================================blender_rgbAAA_gamma template class blender_rgbAAA_gamma { public: typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; typedef Gamma gamma_type; blender_rgbAAA_gamma() : m_gamma(0) {} void gamma(const gamma_type& g) { m_gamma = &g; } AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type rgb = *p; calc_type r = m_gamma->dir((rgb >> 14) & 0xFFC0); calc_type g = m_gamma->dir((rgb >> 4) & 0xFFC0); calc_type b = m_gamma->dir((rgb << 6) & 0xFFC0); *p = (pixel_type) (((m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) << 14) & 0x3FF00000) | ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 4 ) & 0x000FFC00) | (m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) >> 6 ) | 0xC0000000); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xFFC0) << 14) | ((g & 0xFFC0) << 4) | (b >> 6) | 0xC0000000); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 14) & 0xFFC0, (p >> 4) & 0xFFC0, (p << 6) & 0xFFC0); } private: const Gamma* m_gamma; }; //=====================================================blender_bgrAAA struct blender_bgrAAA { typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type bgr = *p; calc_type b = (bgr >> 14) & 0xFFC0; calc_type g = (bgr >> 4) & 0xFFC0; calc_type r = (bgr << 6) & 0xFFC0; *p = (pixel_type) (((((cb - b) * alpha + (b << 16)) >> 2) & 0x3FF00000) | ((((cg - g) * alpha + (g << 16)) >> 12) & 0x000FFC00) | (((cr - r) * alpha + (r << 16)) >> 22) | 0xC0000000); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((b & 0xFFC0) << 14) | ((g & 0xFFC0) << 4) | (r >> 6) | 0xC0000000); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p << 6) & 0xFFC0, (p >> 4) & 0xFFC0, (p >> 14) & 0xFFC0); } }; //=================================================blender_bgrAAA_pre struct blender_bgrAAA_pre { typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover) { alpha = color_type::base_mask - alpha; cover = (cover + 1) << (color_type::base_shift - 8); pixel_type bgr = *p; calc_type b = (bgr >> 14) & 0xFFC0; calc_type g = (bgr >> 4) & 0xFFC0; calc_type r = (bgr << 6) & 0xFFC0; *p = (pixel_type) ((((b * alpha + cb * cover) >> 2) & 0x3FF00000) | (((g * alpha + cg * cover) >> 12) & 0x000FFC00) | ((r * alpha + cr * cover) >> 22) | 0xC0000000); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((b & 0xFFC0) << 14) | ((g & 0xFFC0) << 4) | (r >> 6) | 0xC0000000); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p << 6) & 0xFFC0, (p >> 4) & 0xFFC0, (p >> 14) & 0xFFC0); } }; //=================================================blender_bgrAAA_gamma template class blender_bgrAAA_gamma { public: typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; typedef Gamma gamma_type; blender_bgrAAA_gamma() : m_gamma(0) {} void gamma(const gamma_type& g) { m_gamma = &g; } AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type bgr = *p; calc_type b = m_gamma->dir((bgr >> 14) & 0xFFC0); calc_type g = m_gamma->dir((bgr >> 4) & 0xFFC0); calc_type r = m_gamma->dir((bgr << 6) & 0xFFC0); *p = (pixel_type) (((m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) << 14) & 0x3FF00000) | ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 4 ) & 0x000FFC00) | (m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) >> 6 ) | 0xC0000000); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((b & 0xFFC0) << 14) | ((g & 0xFFC0) << 4) | (r >> 6) | 0xC0000000); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p << 6) & 0xFFC0, (p >> 4) & 0xFFC0, (p >> 14) & 0xFFC0); } private: const Gamma* m_gamma; }; //=====================================================blender_rgbBBA struct blender_rgbBBA { typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type rgb = *p; calc_type r = (rgb >> 16) & 0xFFE0; calc_type g = (rgb >> 5) & 0xFFE0; calc_type b = (rgb << 6) & 0xFFC0; *p = (pixel_type) (((((cr - r) * alpha + (r << 16)) ) & 0xFFE00000) | ((((cg - g) * alpha + (g << 16)) >> 11) & 0x001FFC00) | (((cb - b) * alpha + (b << 16)) >> 22)); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xFFE0) << 16) | ((g & 0xFFE0) << 5) | (b >> 6)); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 16) & 0xFFE0, (p >> 5) & 0xFFE0, (p << 6) & 0xFFC0); } }; //=================================================blender_rgbBBA_pre struct blender_rgbBBA_pre { typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover) { alpha = color_type::base_mask - alpha; cover = (cover + 1) << (color_type::base_shift - 8); pixel_type rgb = *p; calc_type r = (rgb >> 16) & 0xFFE0; calc_type g = (rgb >> 5) & 0xFFE0; calc_type b = (rgb << 6) & 0xFFC0; *p = (pixel_type) ((((r * alpha + cr * cover) ) & 0xFFE00000) | (((g * alpha + cg * cover) >> 11) & 0x001FFC00) | ((b * alpha + cb * cover) >> 22)); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xFFE0) << 16) | ((g & 0xFFE0) << 5) | (b >> 6)); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 16) & 0xFFE0, (p >> 5) & 0xFFE0, (p << 6) & 0xFFC0); } }; //=================================================blender_rgbBBA_gamma template class blender_rgbBBA_gamma { public: typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; typedef Gamma gamma_type; blender_rgbBBA_gamma() : m_gamma(0) {} void gamma(const gamma_type& g) { m_gamma = &g; } AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type rgb = *p; calc_type r = m_gamma->dir((rgb >> 16) & 0xFFE0); calc_type g = m_gamma->dir((rgb >> 5) & 0xFFE0); calc_type b = m_gamma->dir((rgb << 6) & 0xFFC0); *p = (pixel_type) (((m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) << 16) & 0xFFE00000) | ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 5 ) & 0x001FFC00) | (m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) >> 6 )); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((r & 0xFFE0) << 16) | ((g & 0xFFE0) << 5) | (b >> 6)); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p >> 16) & 0xFFE0, (p >> 5) & 0xFFE0, (p << 6) & 0xFFC0); } private: const Gamma* m_gamma; }; //=====================================================blender_bgrABB struct blender_bgrABB { typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type bgr = *p; calc_type b = (bgr >> 16) & 0xFFC0; calc_type g = (bgr >> 6) & 0xFFE0; calc_type r = (bgr << 5) & 0xFFE0; *p = (pixel_type) (((((cb - b) * alpha + (b << 16)) ) & 0xFFC00000) | ((((cg - g) * alpha + (g << 16)) >> 10) & 0x003FF800) | (((cr - r) * alpha + (r << 16)) >> 21)); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((b & 0xFFC0) << 16) | ((g & 0xFFE0) << 6) | (r >> 5)); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p << 5) & 0xFFE0, (p >> 6) & 0xFFE0, (p >> 16) & 0xFFC0); } }; //=================================================blender_bgrABB_pre struct blender_bgrABB_pre { typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; static AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover) { alpha = color_type::base_mask - alpha; cover = (cover + 1) << (color_type::base_shift - 8); pixel_type bgr = *p; calc_type b = (bgr >> 16) & 0xFFC0; calc_type g = (bgr >> 6) & 0xFFE0; calc_type r = (bgr << 5) & 0xFFE0; *p = (pixel_type) ((((b * alpha + cb * cover) ) & 0xFFC00000) | (((g * alpha + cg * cover) >> 10) & 0x003FF800) | ((r * alpha + cr * cover) >> 21)); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((b & 0xFFC0) << 16) | ((g & 0xFFE0) << 6) | (r >> 5)); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p << 5) & 0xFFE0, (p >> 6) & 0xFFE0, (p >> 16) & 0xFFC0); } }; //=================================================blender_bgrABB_gamma template class blender_bgrABB_gamma { public: typedef rgba16 color_type; typedef color_type::value_type value_type; typedef color_type::calc_type calc_type; typedef int32u pixel_type; typedef Gamma gamma_type; blender_bgrABB_gamma() : m_gamma(0) {} void gamma(const gamma_type& g) { m_gamma = &g; } AGG_INLINE void blend_pix(pixel_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned) { pixel_type bgr = *p; calc_type b = m_gamma->dir((bgr >> 16) & 0xFFC0); calc_type g = m_gamma->dir((bgr >> 6) & 0xFFE0); calc_type r = m_gamma->dir((bgr << 5) & 0xFFE0); *p = (pixel_type) (((m_gamma->inv(((m_gamma->dir(cb) - b) * alpha + (b << 16)) >> 16) << 16) & 0xFFC00000) | ((m_gamma->inv(((m_gamma->dir(cg) - g) * alpha + (g << 16)) >> 16) << 6 ) & 0x003FF800) | (m_gamma->inv(((m_gamma->dir(cr) - r) * alpha + (r << 16)) >> 16) >> 5 )); } static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) { return (pixel_type)(((b & 0xFFC0) << 16) | ((g & 0xFFE0) << 6) | (r >> 5)); } static AGG_INLINE color_type make_color(pixel_type p) { return color_type((p << 5) & 0xFFE0, (p >> 6) & 0xFFE0, (p >> 16) & 0xFFC0); } private: const Gamma* m_gamma; }; //===========================================pixfmt_alpha_blend_rgb_packed template class pixfmt_alpha_blend_rgb_packed { public: typedef RenBuf rbuf_type; typedef typename rbuf_type::row_data row_data; typedef Blender blender_type; typedef typename blender_type::color_type color_type; typedef typename blender_type::pixel_type pixel_type; typedef int order_type; // A fake one typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_scale = color_type::base_scale, base_mask = color_type::base_mask, pix_width = sizeof(pixel_type) }; private: //-------------------------------------------------------------------- AGG_INLINE void copy_or_blend_pix(pixel_type* p, const color_type& c, unsigned cover) { if (c.a) { calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8; if(alpha == base_mask) { *p = m_blender.make_pix(c.r, c.g, c.b); } else { m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover); } } } public: //-------------------------------------------------------------------- explicit pixfmt_alpha_blend_rgb_packed(rbuf_type& rb) : m_rbuf(&rb) {} void attach(rbuf_type& rb) { m_rbuf = &rb; } //-------------------------------------------------------------------- template bool attach(PixFmt& pixf, int x1, int y1, int x2, int y2) { rect_i r(x1, y1, x2, y2); if(r.clip(rect_i(0, 0, pixf.width()-1, pixf.height()-1))) { int stride = pixf.stride(); m_rbuf->attach(pixf.pix_ptr(r.x1, stride < 0 ? r.y2 : r.y1), (r.x2 - r.x1) + 1, (r.y2 - r.y1) + 1, stride); return true; } return false; } Blender& blender() { return m_blender; } //-------------------------------------------------------------------- AGG_INLINE unsigned width() const { return m_rbuf->width(); } AGG_INLINE unsigned height() const { return m_rbuf->height(); } AGG_INLINE int stride() const { return m_rbuf->stride(); } //-------------------------------------------------------------------- AGG_INLINE int8u* row_ptr(int y) { return m_rbuf->row_ptr(y); } AGG_INLINE const int8u* row_ptr(int y) const { return m_rbuf->row_ptr(y); } AGG_INLINE row_data row(int y) const { return m_rbuf->row(y); } //-------------------------------------------------------------------- AGG_INLINE int8u* pix_ptr(int x, int y) { return m_rbuf->row_ptr(y) + x * pix_width; } AGG_INLINE const int8u* pix_ptr(int x, int y) const { return m_rbuf->row_ptr(y) + x * pix_width; } //-------------------------------------------------------------------- AGG_INLINE void make_pix(int8u* p, const color_type& c) { *(pixel_type*)p = m_blender.make_pix(c.r, c.g, c.b); } //-------------------------------------------------------------------- AGG_INLINE color_type pixel(int x, int y) const { return m_blender.make_color(((pixel_type*)m_rbuf->row_ptr(y))[x]); } //-------------------------------------------------------------------- AGG_INLINE void copy_pixel(int x, int y, const color_type& c) { ((pixel_type*) m_rbuf->row_ptr(x, y, 1))[x] = m_blender.make_pix(c.r, c.g, c.b); } //-------------------------------------------------------------------- AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover) { copy_or_blend_pix((pixel_type*)m_rbuf->row_ptr(x, y, 1) + x, c, cover); } //-------------------------------------------------------------------- AGG_INLINE void copy_hline(int x, int y, unsigned len, const color_type& c) { pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x; pixel_type v = m_blender.make_pix(c.r, c.g, c.b); do { *p++ = v; } while(--len); } //-------------------------------------------------------------------- AGG_INLINE void copy_vline(int x, int y, unsigned len, const color_type& c) { pixel_type v = m_blender.make_pix(c.r, c.g, c.b); do { pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y++, 1) + x; *p = v; } while(--len); } //-------------------------------------------------------------------- void blend_hline(int x, int y, unsigned len, const color_type& c, int8u cover) { if (c.a) { pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x; calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8; if(alpha == base_mask) { pixel_type v = m_blender.make_pix(c.r, c.g, c.b); do { *p++ = v; } while(--len); } else { do { m_blender.blend_pix(p, c.r, c.g, c.b, alpha, cover); ++p; } while(--len); } } } //-------------------------------------------------------------------- void blend_vline(int x, int y, unsigned len, const color_type& c, int8u cover) { if (c.a) { calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8; if(alpha == base_mask) { pixel_type v = m_blender.make_pix(c.r, c.g, c.b); do { ((pixel_type*)m_rbuf->row_ptr(x, y++, 1))[x] = v; } while(--len); } else { do { m_blender.blend_pix( (pixel_type*)m_rbuf->row_ptr(x, y++, 1), c.r, c.g, c.b, alpha, cover); } while(--len); } } } //-------------------------------------------------------------------- void blend_solid_hspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x; do { copy_or_blend_pix(p, c, *covers++); ++p; } while(--len); } //-------------------------------------------------------------------- void blend_solid_vspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { do { copy_or_blend_pix((pixel_type*)m_rbuf->row_ptr(x, y++, 1) + x, c, *covers++); } while(--len); } //-------------------------------------------------------------------- void copy_color_hspan(int x, int y, unsigned len, const color_type* colors) { pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x; do { *p++ = m_blender.make_pix(colors->r, colors->g, colors->b); ++colors; } while(--len); } //-------------------------------------------------------------------- void copy_color_vspan(int x, int y, unsigned len, const color_type* colors) { do { pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y++, 1) + x; *p = m_blender.make_pix(colors->r, colors->g, colors->b); ++colors; } while(--len); } //-------------------------------------------------------------------- void blend_color_hspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { pixel_type* p = (pixel_type*)m_rbuf->row_ptr(x, y, len) + x; do { copy_or_blend_pix(p++, *colors++, covers ? *covers++ : cover); } while(--len); } //-------------------------------------------------------------------- void blend_color_vspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { do { copy_or_blend_pix((pixel_type*)m_rbuf->row_ptr(x, y++, 1) + x, *colors++, covers ? *covers++ : cover); } while(--len); } //-------------------------------------------------------------------- template void copy_from(const RenBuf2& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len) { const int8u* p = from.row_ptr(ysrc); if(p) { memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width, p + xsrc * pix_width, len * pix_width); } } //-------------------------------------------------------------------- template void blend_from(const SrcPixelFormatRenderer& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::order_type src_order; const value_type* psrc = (const value_type*)from.row_ptr(ysrc); if(psrc) { psrc += xsrc * 4; pixel_type* pdst = (pixel_type*)m_rbuf->row_ptr(xdst, ydst, len) + xdst; do { value_type alpha = psrc[src_order::A]; if(alpha) { if(alpha == base_mask && cover == 255) { *pdst = m_blender.make_pix(psrc[src_order::R], psrc[src_order::G], psrc[src_order::B]); } else { m_blender.blend_pix(pdst, psrc[src_order::R], psrc[src_order::G], psrc[src_order::B], alpha, cover); } } psrc += 4; ++pdst; } while(--len); } } //-------------------------------------------------------------------- template void blend_from_color(const SrcPixelFormatRenderer& from, const color_type& color, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::value_type src_value_type; const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc); if(psrc) { pixel_type* pdst = (pixel_type*)m_rbuf->row_ptr(xdst, ydst, len) + xdst; do { m_blender.blend_pix(pdst, color.r, color.g, color.b, color.a, cover); ++psrc; ++pdst; } while(--len); } } //-------------------------------------------------------------------- template void blend_from_lut(const SrcPixelFormatRenderer& from, const color_type* color_lut, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::value_type src_value_type; const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc); if(psrc) { pixel_type* pdst = (pixel_type*)m_rbuf->row_ptr(xdst, ydst, len) + xdst; do { const color_type& color = color_lut[*psrc]; m_blender.blend_pix(pdst, color.r, color.g, color.b, color.a, cover); ++psrc; ++pdst; } while(--len); } } private: rbuf_type* m_rbuf; Blender m_blender; }; typedef pixfmt_alpha_blend_rgb_packed pixfmt_rgb555; //----pixfmt_rgb555 typedef pixfmt_alpha_blend_rgb_packed pixfmt_rgb565; //----pixfmt_rgb565 typedef pixfmt_alpha_blend_rgb_packed pixfmt_rgb555_pre; //----pixfmt_rgb555_pre typedef pixfmt_alpha_blend_rgb_packed pixfmt_rgb565_pre; //----pixfmt_rgb565_pre typedef pixfmt_alpha_blend_rgb_packed pixfmt_rgbAAA; //----pixfmt_rgbAAA typedef pixfmt_alpha_blend_rgb_packed pixfmt_bgrAAA; //----pixfmt_bgrAAA typedef pixfmt_alpha_blend_rgb_packed pixfmt_rgbBBA; //----pixfmt_rgbBBA typedef pixfmt_alpha_blend_rgb_packed pixfmt_bgrABB; //----pixfmt_bgrABB typedef pixfmt_alpha_blend_rgb_packed pixfmt_rgbAAA_pre; //----pixfmt_rgbAAA_pre typedef pixfmt_alpha_blend_rgb_packed pixfmt_bgrAAA_pre; //----pixfmt_bgrAAA_pre typedef pixfmt_alpha_blend_rgb_packed pixfmt_rgbBBA_pre; //----pixfmt_rgbBBA_pre typedef pixfmt_alpha_blend_rgb_packed pixfmt_bgrABB_pre; //----pixfmt_bgrABB_pre //-----------------------------------------------------pixfmt_rgb555_gamma template class pixfmt_rgb555_gamma : public pixfmt_alpha_blend_rgb_packed, rendering_buffer> { public: pixfmt_rgb555_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb_packed, rendering_buffer>(rb) { this->blender().gamma(g); } }; //-----------------------------------------------------pixfmt_rgb565_gamma template class pixfmt_rgb565_gamma : public pixfmt_alpha_blend_rgb_packed, rendering_buffer> { public: pixfmt_rgb565_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb_packed, rendering_buffer>(rb) { this->blender().gamma(g); } }; //-----------------------------------------------------pixfmt_rgbAAA_gamma template class pixfmt_rgbAAA_gamma : public pixfmt_alpha_blend_rgb_packed, rendering_buffer> { public: pixfmt_rgbAAA_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb_packed, rendering_buffer>(rb) { this->blender().gamma(g); } }; //-----------------------------------------------------pixfmt_bgrAAA_gamma template class pixfmt_bgrAAA_gamma : public pixfmt_alpha_blend_rgb_packed, rendering_buffer> { public: pixfmt_bgrAAA_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb_packed, rendering_buffer>(rb) { this->blender().gamma(g); } }; //-----------------------------------------------------pixfmt_rgbBBA_gamma template class pixfmt_rgbBBA_gamma : public pixfmt_alpha_blend_rgb_packed, rendering_buffer> { public: pixfmt_rgbBBA_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb_packed, rendering_buffer>(rb) { this->blender().gamma(g); } }; //-----------------------------------------------------pixfmt_bgrABB_gamma template class pixfmt_bgrABB_gamma : public pixfmt_alpha_blend_rgb_packed, rendering_buffer> { public: pixfmt_bgrABB_gamma(rendering_buffer& rb, const Gamma& g) : pixfmt_alpha_blend_rgb_packed, rendering_buffer>(rb) { this->blender().gamma(g); } }; } #endif mapnik-3.0.9/deps/agg/include/agg_pixfmt_rgba.h000066400000000000000000003531461262555547000214360ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_PIXFMT_RGBA_INCLUDED #define AGG_PIXFMT_RGBA_INCLUDED #include #include #include "agg_basics.h" #include "agg_color_rgba.h" #include "agg_rendering_buffer.h" namespace agg { //=========================================================multiplier_rgba template struct multiplier_rgba { typedef typename ColorT::value_type value_type; typedef typename ColorT::calc_type calc_type; //-------------------------------------------------------------------- static AGG_INLINE void premultiply(value_type* p) { calc_type a = p[Order::A]; if(a < ColorT::base_mask) { if(a == 0) { p[Order::R] = p[Order::G] = p[Order::B] = 0; return; } p[Order::R] = value_type((p[Order::R] * a + ColorT::base_mask) >> ColorT::base_shift); p[Order::G] = value_type((p[Order::G] * a + ColorT::base_mask) >> ColorT::base_shift); p[Order::B] = value_type((p[Order::B] * a + ColorT::base_mask) >> ColorT::base_shift); } } //-------------------------------------------------------------------- static AGG_INLINE void demultiply(value_type* p) { calc_type a = p[Order::A]; if(a < ColorT::base_mask) { if(a == 0) { p[Order::R] = p[Order::G] = p[Order::B] = 0; return; } calc_type r = (calc_type(p[Order::R]) * ColorT::base_mask) / a; calc_type g = (calc_type(p[Order::G]) * ColorT::base_mask) / a; calc_type b = (calc_type(p[Order::B]) * ColorT::base_mask) / a; p[Order::R] = value_type((r > ColorT::base_mask) ? ColorT::base_mask : r); p[Order::G] = value_type((g > ColorT::base_mask) ? ColorT::base_mask : g); p[Order::B] = value_type((b > ColorT::base_mask) ? ColorT::base_mask : b); } } }; //=====================================================apply_gamma_dir_rgba template class apply_gamma_dir_rgba { public: typedef typename ColorT::value_type value_type; apply_gamma_dir_rgba(const GammaLut& gamma) : m_gamma(gamma) {} AGG_INLINE void operator () (value_type* p) { p[Order::R] = m_gamma.dir(p[Order::R]); p[Order::G] = m_gamma.dir(p[Order::G]); p[Order::B] = m_gamma.dir(p[Order::B]); } private: const GammaLut& m_gamma; }; //=====================================================apply_gamma_inv_rgba template class apply_gamma_inv_rgba { public: typedef typename ColorT::value_type value_type; apply_gamma_inv_rgba(const GammaLut& gamma) : m_gamma(gamma) {} AGG_INLINE void operator () (value_type* p) { p[Order::R] = m_gamma.inv(p[Order::R]); p[Order::G] = m_gamma.inv(p[Order::G]); p[Order::B] = m_gamma.inv(p[Order::B]); } private: const GammaLut& m_gamma; }; //=============================================================blender_rgba template struct blender_rgba { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- static AGG_INLINE void blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned /*cover*/=0) { calc_type r = p[Order::R]; calc_type g = p[Order::G]; calc_type b = p[Order::B]; calc_type a = p[Order::A]; p[Order::R] = (value_type)(((cr - r) * alpha + (r << base_shift)) >> base_shift); p[Order::G] = (value_type)(((cg - g) * alpha + (g << base_shift)) >> base_shift); p[Order::B] = (value_type)(((cb - b) * alpha + (b << base_shift)) >> base_shift); p[Order::A] = (value_type)((alpha + a) - ((alpha * a + base_mask) >> base_shift)); } }; //=========================================================blender_rgba_pre template struct blender_rgba_pre { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- static AGG_INLINE void blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover) { alpha = color_type::base_mask - alpha; cover = (cover + 1) << (base_shift - 8); p[Order::R] = (value_type)((p[Order::R] * alpha + cr * cover) >> base_shift); p[Order::G] = (value_type)((p[Order::G] * alpha + cg * cover) >> base_shift); p[Order::B] = (value_type)((p[Order::B] * alpha + cb * cover) >> base_shift); p[Order::A] = (value_type)(base_mask - ((alpha * (base_mask - p[Order::A])) >> base_shift)); } //-------------------------------------------------------------------- static AGG_INLINE void blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha) { alpha = color_type::base_mask - alpha; p[Order::R] = (value_type)(((p[Order::R] * alpha) >> base_shift) + cr); p[Order::G] = (value_type)(((p[Order::G] * alpha) >> base_shift) + cg); p[Order::B] = (value_type)(((p[Order::B] * alpha) >> base_shift) + cb); p[Order::A] = (value_type)(base_mask - ((alpha * (base_mask - p[Order::A])) >> base_shift)); } }; //======================================================blender_rgba_plain template struct blender_rgba_plain { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift }; //-------------------------------------------------------------------- static AGG_INLINE void blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned /*cover*/=0) { if(alpha == 0) return; calc_type a = p[Order::A]; calc_type r = p[Order::R] * a; calc_type g = p[Order::G] * a; calc_type b = p[Order::B] * a; a = ((alpha + a) << base_shift) - alpha * a; p[Order::A] = (value_type)(a >> base_shift); p[Order::R] = (value_type)((((cr << base_shift) - r) * alpha + (r << base_shift)) / a); p[Order::G] = (value_type)((((cg << base_shift) - g) * alpha + (g << base_shift)) / a); p[Order::B] = (value_type)((((cb << base_shift) - b) * alpha + (b << base_shift)) / a); } }; //=========================================================comp_op_rgba_clear template struct comp_op_rgba_clear { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(value_type* p, unsigned, unsigned, unsigned, unsigned, unsigned cover) { if(cover < 255) { cover = 255 - cover; p[Order::R] = (value_type)((p[Order::R] * cover + 255) >> 8); p[Order::G] = (value_type)((p[Order::G] * cover + 255) >> 8); p[Order::B] = (value_type)((p[Order::B] * cover + 255) >> 8); p[Order::A] = (value_type)((p[Order::A] * cover + 255) >> 8); } else { p[0] = p[1] = p[2] = p[3] = 0; } } }; //===========================================================comp_op_rgba_src template struct comp_op_rgba_src { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { unsigned alpha = 255 - cover; p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((sr * cover + 255) >> 8)); p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((sg * cover + 255) >> 8)); p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((sb * cover + 255) >> 8)); p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((sa * cover + 255) >> 8)); } else { p[Order::R] = sr; p[Order::G] = sg; p[Order::B] = sb; p[Order::A] = sa; } } }; //===========================================================comp_op_rgba_dst template struct comp_op_rgba_dst { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; static AGG_INLINE void blend_pix(value_type*, unsigned, unsigned, unsigned, unsigned, unsigned) { } }; //======================================================comp_op_rgba_src_over template struct comp_op_rgba_src_over { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Sca + Dca.(1 - Sa) // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } calc_type s1a = base_mask - sa; p[Order::R] = (value_type)(sr + ((p[Order::R] * s1a + base_mask) >> base_shift)); p[Order::G] = (value_type)(sg + ((p[Order::G] * s1a + base_mask) >> base_shift)); p[Order::B] = (value_type)(sb + ((p[Order::B] * s1a + base_mask) >> base_shift)); p[Order::A] = (value_type)(sa + ((p[Order::A] * s1a + base_mask) >> base_shift)); } }; //======================================================comp_op_rgba_dst_over template struct comp_op_rgba_dst_over { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Dca + Sca.(1 - Da) // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } calc_type d1a = base_mask - p[Order::A]; p[Order::R] = (value_type)(p[Order::R] + ((sr * d1a + base_mask) >> base_shift)); p[Order::G] = (value_type)(p[Order::G] + ((sg * d1a + base_mask) >> base_shift)); p[Order::B] = (value_type)(p[Order::B] + ((sb * d1a + base_mask) >> base_shift)); p[Order::A] = (value_type)(p[Order::A] + ((sa * d1a + base_mask) >> base_shift)); } }; //======================================================comp_op_rgba_src_in template struct comp_op_rgba_src_in { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Sca.Da // Da' = Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { calc_type da = p[Order::A]; if(cover < 255) { unsigned alpha = 255 - cover; p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((((sr * da + base_mask) >> base_shift) * cover + 255) >> 8)); p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((((sg * da + base_mask) >> base_shift) * cover + 255) >> 8)); p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((((sb * da + base_mask) >> base_shift) * cover + 255) >> 8)); p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((((sa * da + base_mask) >> base_shift) * cover + 255) >> 8)); } else { p[Order::R] = (value_type)((sr * da + base_mask) >> base_shift); p[Order::G] = (value_type)((sg * da + base_mask) >> base_shift); p[Order::B] = (value_type)((sb * da + base_mask) >> base_shift); p[Order::A] = (value_type)((sa * da + base_mask) >> base_shift); } } }; //======================================================comp_op_rgba_dst_in template struct comp_op_rgba_dst_in { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Dca.Sa // Da' = Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned, unsigned, unsigned, unsigned sa, unsigned cover) { if(cover < 255) { sa = base_mask - ((cover * (base_mask - sa) + 255) >> 8); } p[Order::R] = (value_type)((p[Order::R] * sa + base_mask) >> base_shift); p[Order::G] = (value_type)((p[Order::G] * sa + base_mask) >> base_shift); p[Order::B] = (value_type)((p[Order::B] * sa + base_mask) >> base_shift); p[Order::A] = (value_type)((p[Order::A] * sa + base_mask) >> base_shift); } }; //======================================================comp_op_rgba_src_out template struct comp_op_rgba_src_out { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Sca.(1 - Da) // Da' = Sa.(1 - Da) static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { calc_type da = base_mask - p[Order::A]; if(cover < 255) { unsigned alpha = 255 - cover; p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((((sr * da + base_mask) >> base_shift) * cover + 255) >> 8)); p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((((sg * da + base_mask) >> base_shift) * cover + 255) >> 8)); p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((((sb * da + base_mask) >> base_shift) * cover + 255) >> 8)); p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((((sa * da + base_mask) >> base_shift) * cover + 255) >> 8)); } else { p[Order::R] = (value_type)((sr * da + base_mask) >> base_shift); p[Order::G] = (value_type)((sg * da + base_mask) >> base_shift); p[Order::B] = (value_type)((sb * da + base_mask) >> base_shift); p[Order::A] = (value_type)((sa * da + base_mask) >> base_shift); } } }; //======================================================comp_op_rgba_dst_out template struct comp_op_rgba_dst_out { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Dca.(1 - Sa) // Da' = Da.(1 - Sa) static AGG_INLINE void blend_pix(value_type* p, unsigned, unsigned, unsigned, unsigned sa, unsigned cover) { if(cover < 255) { sa = (sa * cover + 255) >> 8; } sa = base_mask - sa; p[Order::R] = (value_type)((p[Order::R] * sa + base_shift) >> base_shift); p[Order::G] = (value_type)((p[Order::G] * sa + base_shift) >> base_shift); p[Order::B] = (value_type)((p[Order::B] * sa + base_shift) >> base_shift); p[Order::A] = (value_type)((p[Order::A] * sa + base_shift) >> base_shift); } }; //=====================================================comp_op_rgba_src_atop template struct comp_op_rgba_src_atop { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Sca.Da + Dca.(1 - Sa) // Da' = Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } calc_type da = p[Order::A]; sa = base_mask - sa; p[Order::R] = (value_type)((sr * da + p[Order::R] * sa + base_mask) >> base_shift); p[Order::G] = (value_type)((sg * da + p[Order::G] * sa + base_mask) >> base_shift); p[Order::B] = (value_type)((sb * da + p[Order::B] * sa + base_mask) >> base_shift); } }; //=====================================================comp_op_rgba_dst_atop template struct comp_op_rgba_dst_atop { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Dca.Sa + Sca.(1 - Da) // Da' = Sa static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { calc_type da = base_mask - p[Order::A]; if(cover < 255) { unsigned alpha = 255 - cover; sr = (p[Order::R] * sa + sr * da + base_mask) >> base_shift; sg = (p[Order::G] * sa + sg * da + base_mask) >> base_shift; sb = (p[Order::B] * sa + sb * da + base_mask) >> base_shift; p[Order::R] = (value_type)(((p[Order::R] * alpha + 255) >> 8) + ((sr * cover + 255) >> 8)); p[Order::G] = (value_type)(((p[Order::G] * alpha + 255) >> 8) + ((sg * cover + 255) >> 8)); p[Order::B] = (value_type)(((p[Order::B] * alpha + 255) >> 8) + ((sb * cover + 255) >> 8)); p[Order::A] = (value_type)(((p[Order::A] * alpha + 255) >> 8) + ((sa * cover + 255) >> 8)); } else { p[Order::R] = (value_type)((p[Order::R] * sa + sr * da + base_mask) >> base_shift); p[Order::G] = (value_type)((p[Order::G] * sa + sg * da + base_mask) >> base_shift); p[Order::B] = (value_type)((p[Order::B] * sa + sb * da + base_mask) >> base_shift); p[Order::A] = (value_type)sa; } } }; //=========================================================comp_op_rgba_xor template struct comp_op_rgba_xor { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Sca.(1 - Da) + Dca.(1 - Sa) // Da' = Sa + Da - 2.Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type s1a = base_mask - sa; calc_type d1a = base_mask - p[Order::A]; p[Order::R] = (value_type)((p[Order::R] * s1a + sr * d1a + base_mask) >> base_shift); p[Order::G] = (value_type)((p[Order::G] * s1a + sg * d1a + base_mask) >> base_shift); p[Order::B] = (value_type)((p[Order::B] * s1a + sb * d1a + base_mask) >> base_shift); p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask/2) >> (base_shift - 1))); } } }; //=========================================================comp_op_rgba_plus template struct comp_op_rgba_plus { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Sca + Dca // Da' = Sa + Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type dr = p[Order::R] + sr; calc_type dg = p[Order::G] + sg; calc_type db = p[Order::B] + sb; calc_type da = p[Order::A] + sa; p[Order::R] = (dr > base_mask) ? (value_type)base_mask : dr; p[Order::G] = (dg > base_mask) ? (value_type)base_mask : dg; p[Order::B] = (db > base_mask) ? (value_type)base_mask : db; p[Order::A] = (da > base_mask) ? (value_type)base_mask : da; } } }; //========================================================comp_op_rgba_minus template struct comp_op_rgba_minus { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Dca - Sca // Da' = 1 - (1 - Sa).(1 - Da) static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type dr = (sr > p[Order::R]) ? 0 : p[Order::R] - sr; calc_type dg = (sg > p[Order::G]) ? 0 : p[Order::G] - sg; calc_type db = (sb > p[Order::B]) ? 0 : p[Order::B] - sb; p[Order::R] = (dr > base_mask) ? 0 : dr; p[Order::G] = (dg > base_mask) ? 0 : dg; p[Order::B] = (db > base_mask) ? 0 : db; p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift)); //p[Order::A] = (value_type)(base_mask - (((base_mask - sa) * (base_mask - p[Order::A]) + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_multiply template struct comp_op_rgba_multiply { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa) // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type s1a = base_mask - sa; calc_type d1a = base_mask - p[Order::A]; calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; p[Order::R] = (value_type)((sr * dr + sr * d1a + dr * s1a + base_mask) >> base_shift); p[Order::G] = (value_type)((sg * dg + sg * d1a + dg * s1a + base_mask) >> base_shift); p[Order::B] = (value_type)((sb * db + sb * d1a + db * s1a + base_mask) >> base_shift); p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_screen template struct comp_op_rgba_screen { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = Sca + Dca - Sca.Dca // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; calc_type da = p[Order::A]; p[Order::R] = (value_type)(sr + dr - ((sr * dr + base_mask) >> base_shift)); p[Order::G] = (value_type)(sg + dg - ((sg * dg + base_mask) >> base_shift)); p[Order::B] = (value_type)(sb + db - ((sb * db + base_mask) >> base_shift)); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_overlay template struct comp_op_rgba_overlay { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // if 2.Dca < Da // Dca' = 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa) // otherwise // Dca' = Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa) // // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type d1a = base_mask - p[Order::A]; calc_type s1a = base_mask - sa; calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; calc_type da = p[Order::A]; calc_type sada = sa * p[Order::A]; p[Order::R] = (value_type)(((2*dr < da) ? 2*sr*dr + sr*d1a + dr*s1a : sada - 2*(da - dr)*(sa - sr) + sr*d1a + dr*s1a + base_mask) >> base_shift); p[Order::G] = (value_type)(((2*dg < da) ? 2*sg*dg + sg*d1a + dg*s1a : sada - 2*(da - dg)*(sa - sg) + sg*d1a + dg*s1a + base_mask) >> base_shift); p[Order::B] = (value_type)(((2*db < da) ? 2*sb*db + sb*d1a + db*s1a : sada - 2*(da - db)*(sa - sb) + sb*d1a + db*s1a + base_mask) >> base_shift); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; template inline T sd_min(T a, T b) { return (a < b) ? a : b; } template inline T sd_max(T a, T b) { return (a > b) ? a : b; } //=====================================================comp_op_rgba_darken template struct comp_op_rgba_darken { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = min(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa) // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type d1a = base_mask - p[Order::A]; calc_type s1a = base_mask - sa; calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; calc_type da = p[Order::A]; p[Order::R] = (value_type)((sd_min(sr * da, dr * sa) + sr * d1a + dr * s1a + base_mask) >> base_shift); p[Order::G] = (value_type)((sd_min(sg * da, dg * sa) + sg * d1a + dg * s1a + base_mask) >> base_shift); p[Order::B] = (value_type)((sd_min(sb * da, db * sa) + sb * d1a + db * s1a + base_mask) >> base_shift); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_lighten template struct comp_op_rgba_lighten { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = max(Sca.Da, Dca.Sa) + Sca.(1 - Da) + Dca.(1 - Sa) // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type d1a = base_mask - p[Order::A]; calc_type s1a = base_mask - sa; calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; calc_type da = p[Order::A]; p[Order::R] = (value_type)((sd_max(sr * da, dr * sa) + sr * d1a + dr * s1a + base_mask) >> base_shift); p[Order::G] = (value_type)((sd_max(sg * da, dg * sa) + sg * d1a + dg * s1a + base_mask) >> base_shift); p[Order::B] = (value_type)((sd_max(sb * da, db * sa) + sb * d1a + db * s1a + base_mask) >> base_shift); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_color_dodge template struct comp_op_rgba_color_dodge { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // if Sca.Da + Dca.Sa >= Sa.Da // Dca' = Sa.Da + Sca.(1 - Da) + Dca.(1 - Sa) // otherwise // Dca' = Dca.Sa/(1-Sca/Sa) + Sca.(1 - Da) + Dca.(1 - Sa) // // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type d1a = base_mask - p[Order::A]; calc_type s1a = base_mask - sa; calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; calc_type da = p[Order::A]; long_type drsa = dr * sa; long_type dgsa = dg * sa; long_type dbsa = db * sa; long_type srda = sr * da; long_type sgda = sg * da; long_type sbda = sb * da; long_type sada = sa * da; p[Order::R] = (value_type)((srda + drsa >= sada) ? (sada + sr * d1a + dr * s1a + base_mask) >> base_shift : drsa / (base_mask - (sr << base_shift) / sa) + ((sr * d1a + dr * s1a + base_mask) >> base_shift)); p[Order::G] = (value_type)((sgda + dgsa >= sada) ? (sada + sg * d1a + dg * s1a + base_mask) >> base_shift : dgsa / (base_mask - (sg << base_shift) / sa) + ((sg * d1a + dg * s1a + base_mask) >> base_shift)); p[Order::B] = (value_type)((sbda + dbsa >= sada) ? (sada + sb * d1a + db * s1a + base_mask) >> base_shift : dbsa / (base_mask - (sb << base_shift) / sa) + ((sb * d1a + db * s1a + base_mask) >> base_shift)); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_color_burn template struct comp_op_rgba_color_burn { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // if Sca.Da + Dca.Sa <= Sa.Da // Dca' = Sca.(1 - Da) + Dca.(1 - Sa) // otherwise // Dca' = Sa.(Sca.Da + Dca.Sa - Sa.Da)/Sca + Sca.(1 - Da) + Dca.(1 - Sa) // // Da' = Sa + Da - Sa.Da // http://www.w3.org/TR/SVGCompositing/ // if Sca == 0 and Dca == Da // Dca' = Sa × Da + Sca × (1 - Da) + Dca × (1 - Sa) // = Sa × Da + Dca × (1 - Sa) // = Da = Dca // otherwise if Sca == 0 // Dca' = Sca × (1 - Da) + Dca × (1 - Sa) // = Dca × (1 - Sa) // otherwise if Sca > 0 // Dca' = Sa × Da - Sa × Da × min(1, (1 - Dca/Da) × Sa/Sca) + Sca × (1 - Da) + Dca × (1 - Sa) // = Sa × Da × (1 - min(1, (1 - Dca/Da) × Sa/Sca)) + Sca × (1 - Da) + Dca × (1 - Sa) // sa * da * (255 - std::min(255, (255 - p[0]/da)*(sa/(sc*sa)) + static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if (cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if (sa) { calc_type d1a = base_mask - p[Order::A]; calc_type s1a = base_mask - sa; calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; calc_type da = p[Order::A]; long_type drsa = dr * sa; long_type dgsa = dg * sa; long_type dbsa = db * sa; long_type srda = sr * da; long_type sgda = sg * da; long_type sbda = sb * da; long_type sada = sa * da; p[Order::R] = (value_type)(((srda + drsa <= sada) ? sr * d1a + dr * s1a : (sr > 0 ? sa * (srda + drsa - sada) / sr + sr * d1a + dr * s1a + base_mask : 0)) >> base_shift); p[Order::G] = (value_type)(((sgda + dgsa <= sada) ? sg * d1a + dg * s1a : (sg > 0 ? sa * (sgda + dgsa - sada) / sg + sg * d1a + dg * s1a + base_mask : 0)) >> base_shift); p[Order::B] = (value_type)(((sbda + dbsa <= sada) ? sb * d1a + db * s1a : (sb > 0 ? sa * (sbda + dbsa - sada) / sb + sb * d1a + db * s1a + base_mask : 0)) >> base_shift); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_hard_light template struct comp_op_rgba_hard_light { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // if 2.Sca < Sa // Dca' = 2.Sca.Dca + Sca.(1 - Da) + Dca.(1 - Sa) // otherwise // Dca' = Sa.Da - 2.(Da - Dca).(Sa - Sca) + Sca.(1 - Da) + Dca.(1 - Sa) // // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type d1a = base_mask - p[Order::A]; calc_type s1a = base_mask - sa; calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; calc_type da = p[Order::A]; calc_type sada = sa * da; p[Order::R] = (value_type)(((2*sr < sa) ? 2*sr*dr + sr*d1a + dr*s1a : sada - 2*(da - dr)*(sa - sr) + sr*d1a + dr*s1a + base_mask) >> base_shift); p[Order::G] = (value_type)(((2*sg < sa) ? 2*sg*dg + sg*d1a + dg*s1a : sada - 2*(da - dg)*(sa - sg) + sg*d1a + dg*s1a + base_mask) >> base_shift); p[Order::B] = (value_type)(((2*sb < sa) ? 2*sb*db + sb*d1a + db*s1a : sada - 2*(da - db)*(sa - sb) + sb*d1a + db*s1a + base_mask) >> base_shift); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_soft_light template struct comp_op_rgba_soft_light { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // if 2.Sca < Sa // Dca' = Dca.(Sa + (1 - Dca/Da).(2.Sca - Sa)) + Sca.(1 - Da) + Dca.(1 - Sa) // otherwise if 8.Dca <= Da // Dca' = Dca.(Sa + (1 - Dca/Da).(2.Sca - Sa).(3 - 8.Dca/Da)) + Sca.(1 - Da) + Dca.(1 - Sa) // otherwise // Dca' = (Dca.Sa + ((Dca/Da)^(0.5).Da - Dca).(2.Sca - Sa)) + Sca.(1 - Da) + Dca.(1 - Sa) // // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned r, unsigned g, unsigned b, unsigned a, unsigned cover) { double sr = double(r * cover) / (base_mask * 255); double sg = double(g * cover) / (base_mask * 255); double sb = double(b * cover) / (base_mask * 255); double sa = double(a * cover) / (base_mask * 255); if(sa > 0) { double dr = double(p[Order::R]) / base_mask; double dg = double(p[Order::G]) / base_mask; double db = double(p[Order::B]) / base_mask; double da = double(p[Order::A] ? p[Order::A] : 1) / base_mask; if(cover < 255) { a = (a * cover + 255) >> 8; } if(2*sr < sa) dr = dr*(sa + (1 - dr/da)*(2*sr - sa)) + sr*(1 - da) + dr*(1 - sa); else if(8*dr <= da) dr = dr*(sa + (1 - dr/da)*(2*sr - sa)*(3 - 8*dr/da)) + sr*(1 - da) + dr*(1 - sa); else dr = (dr*sa + (sqrt(dr/da)*da - dr)*(2*sr - sa)) + sr*(1 - da) + dr*(1 - sa); if(2*sg < sa) dg = dg*(sa + (1 - dg/da)*(2*sg - sa)) + sg*(1 - da) + dg*(1 - sa); else if(8*dg <= da) dg = dg*(sa + (1 - dg/da)*(2*sg - sa)*(3 - 8*dg/da)) + sg*(1 - da) + dg*(1 - sa); else dg = (dg*sa + (sqrt(dg/da)*da - dg)*(2*sg - sa)) + sg*(1 - da) + dg*(1 - sa); if(2*sb < sa) db = db*(sa + (1 - db/da)*(2*sb - sa)) + sb*(1 - da) + db*(1 - sa); else if(8*db <= da) db = db*(sa + (1 - db/da)*(2*sb - sa)*(3 - 8*db/da)) + sb*(1 - da) + db*(1 - sa); else db = (db*sa + (sqrt(db/da)*da - db)*(2*sb - sa)) + sb*(1 - da) + db*(1 - sa); p[Order::R] = (value_type)uround(dr * base_mask); p[Order::G] = (value_type)uround(dg * base_mask); p[Order::B] = (value_type)uround(db * base_mask); p[Order::A] = (value_type)(a + p[Order::A] - ((a * p[Order::A] + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_difference template struct comp_op_rgba_difference { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_scale = color_type::base_scale, base_mask = color_type::base_mask }; // Dca' = Sca + Dca - 2.min(Sca.Da, Dca.Sa) // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; calc_type da = p[Order::A]; p[Order::R] = (value_type)(sr + dr - ((2 * sd_min(sr*da, dr*sa) + base_mask) >> base_shift)); p[Order::G] = (value_type)(sg + dg - ((2 * sd_min(sg*da, dg*sa) + base_mask) >> base_shift)); p[Order::B] = (value_type)(sb + db - ((2 * sd_min(sb*da, db*sa) + base_mask) >> base_shift)); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_exclusion template struct comp_op_rgba_exclusion { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = (Sca.Da + Dca.Sa - 2.Sca.Dca) + Sca.(1 - Da) + Dca.(1 - Sa) // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type d1a = base_mask - p[Order::A]; calc_type s1a = base_mask - sa; calc_type dr = p[Order::R]; calc_type dg = p[Order::G]; calc_type db = p[Order::B]; calc_type da = p[Order::A]; p[Order::R] = (value_type)((sr*da + dr*sa - 2*sr*dr + sr*d1a + dr*s1a + base_mask) >> base_shift); p[Order::G] = (value_type)((sg*da + dg*sa - 2*sg*dg + sg*d1a + dg*s1a + base_mask) >> base_shift); p[Order::B] = (value_type)((sb*da + db*sa - 2*sb*db + sb*d1a + db*s1a + base_mask) >> base_shift); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; //=====================================================comp_op_rgba_contrast template struct comp_op_rgba_contrast { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } long_type dr = p[Order::R]; long_type dg = p[Order::G]; long_type db = p[Order::B]; int da = p[Order::A]; long_type d2a = da >> 1; unsigned s2a = sa >> 1; int r = (int)((((dr - d2a) * int((sr - s2a)*2 + base_mask)) >> base_shift) + d2a); int g = (int)((((dg - d2a) * int((sg - s2a)*2 + base_mask)) >> base_shift) + d2a); int b = (int)((((db - d2a) * int((sb - s2a)*2 + base_mask)) >> base_shift) + d2a); r = (r < 0) ? 0 : r; g = (g < 0) ? 0 : g; b = (b < 0) ? 0 : b; p[Order::R] = (value_type)((r > da) ? da : r); p[Order::G] = (value_type)((g > da) ? da : g); p[Order::B] = (value_type)((b > da) ? da : b); } }; //=====================================================comp_op_rgba_invert template struct comp_op_rgba_invert { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = (Da - Dca) * Sa + Dca.(1 - Sa) // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned /*sr*/, unsigned /*sg*/, unsigned /*sb*/, unsigned sa, unsigned cover) { sa = (sa * cover + 255) >> 8; if(sa) { calc_type da = p[Order::A]; calc_type dr = ((da - p[Order::R]) * sa + base_mask) >> base_shift; calc_type dg = ((da - p[Order::G]) * sa + base_mask) >> base_shift; calc_type db = ((da - p[Order::B]) * sa + base_mask) >> base_shift; calc_type s1a = base_mask - sa; p[Order::R] = (value_type)(dr + ((p[Order::R] * s1a + base_mask) >> base_shift)); p[Order::G] = (value_type)(dg + ((p[Order::G] * s1a + base_mask) >> base_shift)); p[Order::B] = (value_type)(db + ((p[Order::B] * s1a + base_mask) >> base_shift)); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; //=================================================comp_op_rgba_invert_rgb template struct comp_op_rgba_invert_rgb { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; // Dca' = (Da - Dca) * Sca + Dca.(1 - Sa) // Da' = Sa + Da - Sa.Da static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if(cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if(sa) { calc_type da = p[Order::A]; calc_type dr = ((da - p[Order::R]) * sr + base_mask) >> base_shift; calc_type dg = ((da - p[Order::G]) * sg + base_mask) >> base_shift; calc_type db = ((da - p[Order::B]) * sb + base_mask) >> base_shift; calc_type s1a = base_mask - sa; p[Order::R] = (value_type)(dr + ((p[Order::R] * s1a + base_mask) >> base_shift)); p[Order::G] = (value_type)(dg + ((p[Order::G] * s1a + base_mask) >> base_shift)); p[Order::B] = (value_type)(db + ((p[Order::B] * s1a + base_mask) >> base_shift)); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; // merge grain (GIMP) // E = I + M - 128 template struct comp_op_rgba_grain_merge { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if (cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if (sa > 0) { calc_type da = p[Order::A]; int dr = sr + p[Order::R] - 128; int dg = sg + p[Order::G] - 128; int db = sb + p[Order::B] - 128; p[Order::R] = dr < 0 ? 0 : (dr > 255 ? 255 : dr); p[Order::G] = dg < 0 ? 0 : (dg > 255 ? 255 : dg); p[Order::B] = db < 0 ? 0 : (db > 255 ? 255 : db); p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); } } }; // grain extract (GIMP) // E = I - M + 128 // FIXME: https://github.com/mapnik/mapnik/issues/2067 template struct comp_op_rgba_grain_extract { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned /*cover*/) { calc_type da = (p[Order::A] * sa + 255) >> 8; int dr = p[Order::R] - sr + 128; int dg = p[Order::G] - sg + 128; int db = p[Order::B] - sb + 128; dr = dr < 0 ? 0 : (dr > 255 ? 255 : dr); dg = dg < 0 ? 0 : (dg > 255 ? 255 : dg); db = db < 0 ? 0 : (db > 255 ? 255 : db); p[Order::A] = da; if (da < 255) { p[Order::R] = (dr * da + 255) >> 8; p[Order::G] = (dg * da + 255) >> 8; p[Order::B] = (db * da + 255) >> 8; } else { p[Order::R] = dr; p[Order::G] = dg; p[Order::B] = db; } } }; template struct comp_op_rgba_hue { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover); }; template struct comp_op_rgba_saturation { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover); }; template struct comp_op_rgba_color { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover); }; template struct comp_op_rgba_value { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover); }; // Linear dodge: Target + Blend template struct comp_op_rgba_linear_dodge { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if (cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } calc_type dr = p[Order::R] + sr; calc_type dg = p[Order::G] + sg; calc_type db = p[Order::B] + sb; p[Order::R] = (dr > base_mask) ? (value_type)base_mask : dr; p[Order::G] = (dg > base_mask) ? (value_type)base_mask : dg; p[Order::B] = (db > base_mask) ? (value_type)base_mask : db; p[Order::A] = (value_type)(sa + ((p[Order::A] * (base_mask - sa) + base_mask) >> base_shift)); } }; // Linear burn: Target + Blend - 1 template struct comp_op_rgba_linear_burn { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if (cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } long_type dr = p[Order::R] + sr - base_mask; long_type dg = p[Order::G] + sg - base_mask; long_type db = p[Order::B] + sb - base_mask; p[Order::R] = (dr < 0) ? 0 : dr; p[Order::G] = (dg < 0) ? 0 : dg; p[Order::B] = (db < 0) ? 0 : db; p[Order::A] = (value_type)(sa + ((p[Order::A] * (base_mask - sa) + base_mask) >> base_shift)); } }; // Divide template struct comp_op_rgba_divide { typedef ColorT color_type; typedef Order order_type; typedef typename color_type::value_type value_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if (cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } float fr = (sr > 0) ? sr : 0.001; float fg = (sg > 0) ? sg : 0.001; float fb = (sb > 0) ? sb : 0.001; long_type dr = long_type(p[Order::R]/((fr + 1) / 256)); long_type dg = long_type(p[Order::G]/((fg + 1) / 256)); long_type db = long_type(p[Order::B]/((fb + 1) / 256)); p[Order::R] = (dr > 255) ? 255 : dr; p[Order::G] = (dg > 255) ? 255 : dg; p[Order::B] = (db > 255) ? 255 : db; p[Order::A] = (value_type)(sa + ((p[Order::A] * (base_mask - sa) + base_mask) >> base_shift)); } }; //======================================================comp_op_table_rgba template struct comp_op_table_rgba { typedef typename ColorT::value_type value_type; typedef void (*comp_op_func_type)(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned ca, unsigned cover); static comp_op_func_type g_comp_op_func[]; }; //==========================================================g_comp_op_func template typename comp_op_table_rgba::comp_op_func_type comp_op_table_rgba::g_comp_op_func[] = { comp_op_rgba_clear ::blend_pix, comp_op_rgba_src ::blend_pix, comp_op_rgba_dst ::blend_pix, comp_op_rgba_src_over ::blend_pix, comp_op_rgba_dst_over ::blend_pix, comp_op_rgba_src_in ::blend_pix, comp_op_rgba_dst_in ::blend_pix, comp_op_rgba_src_out ::blend_pix, comp_op_rgba_dst_out ::blend_pix, comp_op_rgba_src_atop ::blend_pix, comp_op_rgba_dst_atop ::blend_pix, comp_op_rgba_xor ::blend_pix, comp_op_rgba_plus ::blend_pix, comp_op_rgba_minus ::blend_pix, comp_op_rgba_multiply ::blend_pix, comp_op_rgba_screen ::blend_pix, comp_op_rgba_overlay ::blend_pix, comp_op_rgba_darken ::blend_pix, comp_op_rgba_lighten ::blend_pix, comp_op_rgba_color_dodge::blend_pix, comp_op_rgba_color_burn ::blend_pix, comp_op_rgba_hard_light ::blend_pix, comp_op_rgba_soft_light ::blend_pix, comp_op_rgba_difference ::blend_pix, comp_op_rgba_exclusion ::blend_pix, comp_op_rgba_contrast ::blend_pix, comp_op_rgba_invert ::blend_pix, comp_op_rgba_invert_rgb ::blend_pix, comp_op_rgba_grain_merge::blend_pix, comp_op_rgba_grain_extract::blend_pix, comp_op_rgba_hue::blend_pix, comp_op_rgba_saturation::blend_pix, comp_op_rgba_color::blend_pix, comp_op_rgba_value::blend_pix, comp_op_rgba_linear_dodge::blend_pix, comp_op_rgba_linear_burn::blend_pix, comp_op_rgba_divide::blend_pix, //comp_op_rgba_colorize_alpha::blend_pix, 0 }; //==============================================================comp_op_e enum comp_op_e { comp_op_clear, //----comp_op_clear comp_op_src, //----comp_op_src comp_op_dst, //----comp_op_dst comp_op_src_over, //----comp_op_src_over comp_op_dst_over, //----comp_op_dst_over comp_op_src_in, //----comp_op_src_in comp_op_dst_in, //----comp_op_dst_in comp_op_src_out, //----comp_op_src_out comp_op_dst_out, //----comp_op_dst_out comp_op_src_atop, //----comp_op_src_atop comp_op_dst_atop, //----comp_op_dst_atop comp_op_xor, //----comp_op_xor comp_op_plus, //----comp_op_plus comp_op_minus, //----comp_op_minus comp_op_multiply, //----comp_op_multiply comp_op_screen, //----comp_op_screen comp_op_overlay, //----comp_op_overlay comp_op_darken, //----comp_op_darken comp_op_lighten, //----comp_op_lighten comp_op_color_dodge, //----comp_op_color_dodge comp_op_color_burn, //----comp_op_color_burn comp_op_hard_light, //----comp_op_hard_light comp_op_soft_light, //----comp_op_soft_light comp_op_difference, //----comp_op_difference comp_op_exclusion, //----comp_op_exclusion comp_op_contrast, //----comp_op_contrast comp_op_invert, //----comp_op_invert comp_op_invert_rgb, //----comp_op_invert_rgb comp_op_grain_merge, //----comp_op_grain_merge_rgb comp_op_grain_extract, //----comp_op_grain_extract_rgb comp_op_hue, //----comp_op_hue comp_op_saturation, //----comp_op_saturation comp_op_color, //----comp_op_color comp_op_value, //----comp_op_value //comp_op_colorize_alpha,//----comp_op_colorize_alpha comp_op_linear_dodge, // comp_op_linear_dodge comp_op_linear_burn, // comp_op_linear_burn comp_op_divide, // comp_op_divide end_of_comp_op_e }; //====================================================comp_op_adaptor_rgba template struct comp_op_adaptor_rgba { typedef Order order_type; typedef ColorT color_type; typedef typename color_type::value_type value_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(unsigned op, value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned ca, unsigned cover) { comp_op_table_rgba::g_comp_op_func[op] (p, (cr * ca + base_mask) >> base_shift, (cg * ca + base_mask) >> base_shift, (cb * ca + base_mask) >> base_shift, ca, cover); } }; //=========================================comp_op_adaptor_clip_to_dst_rgba template struct comp_op_adaptor_clip_to_dst_rgba { typedef Order order_type; typedef ColorT color_type; typedef typename color_type::value_type value_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(unsigned op, value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned ca, unsigned cover) { cr = (cr * ca + base_mask) >> base_shift; cg = (cg * ca + base_mask) >> base_shift; cb = (cb * ca + base_mask) >> base_shift; unsigned da = p[Order::A]; comp_op_table_rgba::g_comp_op_func[op] (p, (cr * da + base_mask) >> base_shift, (cg * da + base_mask) >> base_shift, (cb * da + base_mask) >> base_shift, (ca * da + base_mask) >> base_shift, cover); } }; //================================================comp_op_adaptor_rgba_pre template struct comp_op_adaptor_rgba_pre { typedef Order order_type; typedef ColorT color_type; typedef typename color_type::value_type value_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(unsigned op, value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned ca, unsigned cover) { comp_op_table_rgba::g_comp_op_func[op](p, cr, cg, cb, ca, cover); } }; //=====================================comp_op_adaptor_clip_to_dst_rgba_pre template struct comp_op_adaptor_clip_to_dst_rgba_pre { typedef Order order_type; typedef ColorT color_type; typedef typename color_type::value_type value_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(unsigned op, value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned ca, unsigned cover) { unsigned da = p[Order::A]; comp_op_table_rgba::g_comp_op_func[op] (p, (cr * da + base_mask) >> base_shift, (cg * da + base_mask) >> base_shift, (cb * da + base_mask) >> base_shift, (ca * da + base_mask) >> base_shift, cover); } }; //=======================================================comp_adaptor_rgba template struct comp_adaptor_rgba { typedef typename BlenderPre::order_type order_type; typedef typename BlenderPre::color_type color_type; typedef typename color_type::value_type value_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(unsigned /*op*/, value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned ca, unsigned cover) { BlenderPre::blend_pix(p, (cr * ca + base_mask) >> base_shift, (cg * ca + base_mask) >> base_shift, (cb * ca + base_mask) >> base_shift, ca, cover); } }; //==========================================comp_adaptor_clip_to_dst_rgba template struct comp_adaptor_clip_to_dst_rgba { typedef typename BlenderPre::order_type order_type; typedef typename BlenderPre::color_type color_type; typedef typename color_type::value_type value_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(unsigned /*op*/, value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned ca, unsigned cover) { cr = (cr * ca + base_mask) >> base_shift; cg = (cg * ca + base_mask) >> base_shift; cb = (cb * ca + base_mask) >> base_shift; unsigned da = p[order_type::A]; BlenderPre::blend_pix(p, (cr * da + base_mask) >> base_shift, (cg * da + base_mask) >> base_shift, (cb * da + base_mask) >> base_shift, (ca * da + base_mask) >> base_shift, cover); } }; //======================================comp_adaptor_clip_to_dst_rgba_pre template struct comp_adaptor_clip_to_dst_rgba_pre { typedef typename BlenderPre::order_type order_type; typedef typename BlenderPre::color_type color_type; typedef typename color_type::value_type value_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; static AGG_INLINE void blend_pix(unsigned /*op*/, value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned ca, unsigned cover) { unsigned da = p[order_type::A]; BlenderPre::blend_pix(p, (cr * da + base_mask) >> base_shift, (cg * da + base_mask) >> base_shift, (cb * da + base_mask) >> base_shift, (ca * da + base_mask) >> base_shift, cover); } }; //===============================================copy_or_blend_rgba_wrapper template struct copy_or_blend_rgba_wrapper { typedef typename Blender::color_type color_type; typedef typename Blender::order_type order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_scale = color_type::base_scale, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- static AGG_INLINE void copy_or_blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha) { if(alpha) { if(alpha == base_mask) { p[order_type::R] = cr; p[order_type::G] = cg; p[order_type::B] = cb; p[order_type::A] = base_mask; } else { Blender::blend_pix(p, cr, cg, cb, alpha); } } } //-------------------------------------------------------------------- static AGG_INLINE void copy_or_blend_pix(value_type* p, unsigned cr, unsigned cg, unsigned cb, unsigned alpha, unsigned cover) { if(cover == 255) { copy_or_blend_pix(p, cr, cg, cb, alpha); } else { if(alpha) { alpha = (alpha * (cover + 1)) >> 8; if(alpha == base_mask) { p[order_type::R] = cr; p[order_type::G] = cg; p[order_type::B] = cb; p[order_type::A] = base_mask; } else { Blender::blend_pix(p, cr, cg, cb, alpha, cover); } } } } }; //=================================================pixfmt_alpha_blend_rgba template class pixfmt_alpha_blend_rgba { public: typedef RenBuf rbuf_type; typedef typename rbuf_type::row_data row_data; typedef PixelT pixel_type; typedef Blender blender_type; typedef typename blender_type::color_type color_type; typedef typename blender_type::order_type order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; typedef copy_or_blend_rgba_wrapper cob_type; enum base_scale_e { base_shift = color_type::base_shift, base_scale = color_type::base_scale, base_mask = color_type::base_mask, pix_width = sizeof(pixel_type) }; //-------------------------------------------------------------------- pixfmt_alpha_blend_rgba() : m_rbuf(0) {} explicit pixfmt_alpha_blend_rgba(rbuf_type& rb) : m_rbuf(&rb) {} void attach(rbuf_type& rb) { m_rbuf = &rb; } //-------------------------------------------------------------------- template bool attach(PixFmt& pixf, int x1, int y1, int x2, int y2) { rect_i r(x1, y1, x2, y2); if(r.clip(rect_i(0, 0, pixf.width()-1, pixf.height()-1))) { int stride = pixf.stride(); m_rbuf->attach(pixf.pix_ptr(r.x1, stride < 0 ? r.y2 : r.y1), (r.x2 - r.x1) + 1, (r.y2 - r.y1) + 1, stride); return true; } return false; } //-------------------------------------------------------------------- AGG_INLINE unsigned width() const { return m_rbuf->width(); } AGG_INLINE unsigned height() const { return m_rbuf->height(); } AGG_INLINE int stride() const { return m_rbuf->stride(); } //-------------------------------------------------------------------- AGG_INLINE int8u* row_ptr(int y) { return m_rbuf->row_ptr(y); } AGG_INLINE const int8u* row_ptr(int y) const { return m_rbuf->row_ptr(y); } AGG_INLINE row_data row(int y) const { return m_rbuf->row(y); } //-------------------------------------------------------------------- AGG_INLINE int8u* pix_ptr(int x, int y) { return m_rbuf->row_ptr(y) + x * pix_width; } AGG_INLINE const int8u* pix_ptr(int x, int y) const { return m_rbuf->row_ptr(y) + x * pix_width; } //-------------------------------------------------------------------- AGG_INLINE static void make_pix(int8u* p, const color_type& c) { ((value_type*)p)[order_type::R] = c.r; ((value_type*)p)[order_type::G] = c.g; ((value_type*)p)[order_type::B] = c.b; ((value_type*)p)[order_type::A] = c.a; } //-------------------------------------------------------------------- AGG_INLINE color_type pixel(int x, int y) const { const value_type* p = (const value_type*)m_rbuf->row_ptr(y); if(p) { p += x << 2; return color_type(p[order_type::R], p[order_type::G], p[order_type::B], p[order_type::A]); } return color_type::no_color(); } //-------------------------------------------------------------------- AGG_INLINE void copy_pixel(int x, int y, const color_type& c) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2); p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; p[order_type::A] = c.a; } //-------------------------------------------------------------------- AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover) { cob_type::copy_or_blend_pix( (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2), c.r, c.g, c.b, c.a, cover); } //-------------------------------------------------------------------- AGG_INLINE void copy_hline(int x, int y, unsigned len, const color_type& c) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); pixel_type v; ((value_type*)&v)[order_type::R] = c.r; ((value_type*)&v)[order_type::G] = c.g; ((value_type*)&v)[order_type::B] = c.b; ((value_type*)&v)[order_type::A] = c.a; do { *(pixel_type*)p = v; p += 4; } while(--len); } //-------------------------------------------------------------------- AGG_INLINE void copy_vline(int x, int y, unsigned len, const color_type& c) { pixel_type v; ((value_type*)&v)[order_type::R] = c.r; ((value_type*)&v)[order_type::G] = c.g; ((value_type*)&v)[order_type::B] = c.b; ((value_type*)&v)[order_type::A] = c.a; do { value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); *(pixel_type*)p = v; } while(--len); } //-------------------------------------------------------------------- void blend_hline(int x, int y, unsigned len, const color_type& c, int8u cover) { if (c.a) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8; if(alpha == base_mask) { pixel_type v; ((value_type*)&v)[order_type::R] = c.r; ((value_type*)&v)[order_type::G] = c.g; ((value_type*)&v)[order_type::B] = c.b; ((value_type*)&v)[order_type::A] = c.a; do { *(pixel_type*)p = v; p += 4; } while(--len); } else { if(cover == 255) { do { blender_type::blend_pix(p, c.r, c.g, c.b, alpha); p += 4; } while(--len); } else { do { blender_type::blend_pix(p, c.r, c.g, c.b, alpha, cover); p += 4; } while(--len); } } } } //-------------------------------------------------------------------- void blend_vline(int x, int y, unsigned len, const color_type& c, int8u cover) { if (c.a) { value_type* p; calc_type alpha = (calc_type(c.a) * (cover + 1)) >> 8; if(alpha == base_mask) { pixel_type v; ((value_type*)&v)[order_type::R] = c.r; ((value_type*)&v)[order_type::G] = c.g; ((value_type*)&v)[order_type::B] = c.b; ((value_type*)&v)[order_type::A] = c.a; do { p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); *(pixel_type*)p = v; } while(--len); } else { if(cover == 255) { do { p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); blender_type::blend_pix(p, c.r, c.g, c.b, alpha); } while(--len); } else { do { p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); blender_type::blend_pix(p, c.r, c.g, c.b, alpha, cover); } while(--len); } } } } //-------------------------------------------------------------------- void blend_solid_hspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { if (c.a) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); do { calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8; if(alpha == base_mask) { p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; p[order_type::A] = base_mask; } else { blender_type::blend_pix(p, c.r, c.g, c.b, alpha, *covers); } p += 4; ++covers; } while(--len); } } //-------------------------------------------------------------------- void blend_solid_vspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { if (c.a) { do { value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); calc_type alpha = (calc_type(c.a) * (calc_type(*covers) + 1)) >> 8; if(alpha == base_mask) { p[order_type::R] = c.r; p[order_type::G] = c.g; p[order_type::B] = c.b; p[order_type::A] = base_mask; } else { blender_type::blend_pix(p, c.r, c.g, c.b, alpha, *covers); } ++covers; } while(--len); } } //-------------------------------------------------------------------- void copy_color_hspan(int x, int y, unsigned len, const color_type* colors) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); do { p[order_type::R] = colors->r; p[order_type::G] = colors->g; p[order_type::B] = colors->b; p[order_type::A] = colors->a; ++colors; p += 4; } while(--len); } //-------------------------------------------------------------------- void copy_color_vspan(int x, int y, unsigned len, const color_type* colors) { do { value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); p[order_type::R] = colors->r; p[order_type::G] = colors->g; p[order_type::B] = colors->b; p[order_type::A] = colors->a; ++colors; } while(--len); } //-------------------------------------------------------------------- void blend_color_hspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); if(covers) { do { cob_type::copy_or_blend_pix(p, colors->r, colors->g, colors->b, colors->a, *covers++); p += 4; ++colors; } while(--len); } else { if(cover == 255) { do { cob_type::copy_or_blend_pix(p, colors->r, colors->g, colors->b, colors->a); p += 4; ++colors; } while(--len); } else { do { cob_type::copy_or_blend_pix(p, colors->r, colors->g, colors->b, colors->a, cover); p += 4; ++colors; } while(--len); } } } //-------------------------------------------------------------------- void blend_color_vspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { value_type* p; if(covers) { do { p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); cob_type::copy_or_blend_pix(p, colors->r, colors->g, colors->b, colors->a, *covers++); ++colors; } while(--len); } else { if(cover == 255) { do { p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); cob_type::copy_or_blend_pix(p, colors->r, colors->g, colors->b, colors->a); ++colors; } while(--len); } else { do { p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); cob_type::copy_or_blend_pix(p, colors->r, colors->g, colors->b, colors->a, cover); ++colors; } while(--len); } } } //-------------------------------------------------------------------- template void for_each_pixel(Function f) { unsigned y; for(y = 0; y < height(); ++y) { row_data r = m_rbuf->row(y); if(r.ptr) { unsigned len = r.x2 - r.x1 + 1; value_type* p = (value_type*)m_rbuf->row_ptr(r.x1, y, len) + (r.x1 << 2); do { f(p); p += 4; } while(--len); } } } //-------------------------------------------------------------------- void premultiply() { for_each_pixel(multiplier_rgba::premultiply); } //-------------------------------------------------------------------- void demultiply() { for_each_pixel(multiplier_rgba::demultiply); } //-------------------------------------------------------------------- template void apply_gamma_dir(const GammaLut& g) { for_each_pixel(apply_gamma_dir_rgba(g)); } //-------------------------------------------------------------------- template void apply_gamma_inv(const GammaLut& g) { for_each_pixel(apply_gamma_inv_rgba(g)); } //-------------------------------------------------------------------- template void copy_from(const RenBuf2& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len) { const int8u* p = from.row_ptr(ysrc); if(p) { memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width, p + xsrc * pix_width, len * pix_width); } } //-------------------------------------------------------------------- template void blend_from(const SrcPixelFormatRenderer& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::order_type src_order; const value_type* psrc = (value_type*)from.row_ptr(ysrc); if(psrc) { psrc += xsrc << 2; value_type* pdst = (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2); int incp = 4; if(xdst > xsrc) { psrc += (len-1) << 2; pdst += (len-1) << 2; incp = -4; } if(cover == 255) { do { cob_type::copy_or_blend_pix(pdst, psrc[src_order::R], psrc[src_order::G], psrc[src_order::B], psrc[src_order::A]); psrc += incp; pdst += incp; } while(--len); } else { do { cob_type::copy_or_blend_pix(pdst, psrc[src_order::R], psrc[src_order::G], psrc[src_order::B], psrc[src_order::A], cover); psrc += incp; pdst += incp; } while(--len); } } } //-------------------------------------------------------------------- template void blend_from_color(const SrcPixelFormatRenderer& from, const color_type& color, int xdst, int ydst, int /*xsrc*/, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::value_type src_value_type; const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc); if(psrc) { value_type* pdst = (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2); do { cob_type::copy_or_blend_pix(pdst, color.r, color.g, color.b, color.a, (*psrc * cover + base_mask) >> base_shift); ++psrc; pdst += 4; } while(--len); } } //-------------------------------------------------------------------- template void blend_from_lut(const SrcPixelFormatRenderer& from, const color_type* color_lut, int xdst, int ydst, int /*xsrc*/, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::value_type src_value_type; const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc); if(psrc) { value_type* pdst = (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2); if(cover == 255) { do { const color_type& color = color_lut[*psrc]; cob_type::copy_or_blend_pix(pdst, color.r, color.g, color.b, color.a); ++psrc; pdst += 4; } while(--len); } else { do { const color_type& color = color_lut[*psrc]; cob_type::copy_or_blend_pix(pdst, color.r, color.g, color.b, color.a, cover); ++psrc; pdst += 4; } while(--len); } } } private: rbuf_type* m_rbuf; }; //================================================pixfmt_custom_blend_rgba template class pixfmt_custom_blend_rgba { public: typedef RenBuf rbuf_type; typedef typename rbuf_type::row_data row_data; typedef Blender blender_type; typedef typename blender_type::color_type color_type; typedef typename blender_type::order_type order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_scale = color_type::base_scale, base_mask = color_type::base_mask, pix_width = sizeof(value_type) * 4 }; //-------------------------------------------------------------------- pixfmt_custom_blend_rgba() : m_rbuf(0), m_comp_op(3) {} explicit pixfmt_custom_blend_rgba(rbuf_type& rb, unsigned comp_op=3) : m_rbuf(&rb), m_comp_op(comp_op) {} void attach(rbuf_type& rb) { m_rbuf = &rb; } //-------------------------------------------------------------------- template bool attach(PixFmt& pixf, int x1, int y1, int x2, int y2) { rect_i r(x1, y1, x2, y2); if(r.clip(rect_i(0, 0, pixf.width()-1, pixf.height()-1))) { int stride = pixf.stride(); m_rbuf->attach(pixf.pix_ptr(r.x1, stride < 0 ? r.y2 : r.y1), (r.x2 - r.x1) + 1, (r.y2 - r.y1) + 1, stride); return true; } return false; } //-------------------------------------------------------------------- AGG_INLINE unsigned width() const { return m_rbuf->width(); } AGG_INLINE unsigned height() const { return m_rbuf->height(); } AGG_INLINE int stride() const { return m_rbuf->stride(); } //-------------------------------------------------------------------- AGG_INLINE int8u* row_ptr(int y) { return m_rbuf->row_ptr(y); } AGG_INLINE const int8u* row_ptr(int y) const { return m_rbuf->row_ptr(y); } AGG_INLINE row_data row(int y) const { return m_rbuf->row(y); } //-------------------------------------------------------------------- AGG_INLINE int8u* pix_ptr(int x, int y) { return m_rbuf->row_ptr(y) + x * pix_width; } AGG_INLINE const int8u* pix_ptr(int x, int y) const { return m_rbuf->row_ptr(y) + x * pix_width; } //-------------------------------------------------------------------- void comp_op(unsigned op) { m_comp_op = op; } unsigned comp_op() const { return m_comp_op; } //-------------------------------------------------------------------- AGG_INLINE static void make_pix(int8u* p, const color_type& c) { ((value_type*)p)[order_type::R] = c.r; ((value_type*)p)[order_type::G] = c.g; ((value_type*)p)[order_type::B] = c.b; ((value_type*)p)[order_type::A] = c.a; } //-------------------------------------------------------------------- color_type pixel(int x, int y) const { const value_type* p = (value_type*)m_rbuf->row_ptr(y) + (x << 2); return color_type(p[order_type::R], p[order_type::G], p[order_type::B], p[order_type::A]); } //-------------------------------------------------------------------- void copy_pixel(int x, int y, const color_type& c) { blender_type::blend_pix( m_comp_op, (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2), c.r, c.g, c.b, c.a, 255); } //-------------------------------------------------------------------- void blend_pixel(int x, int y, const color_type& c, int8u cover) { blender_type::blend_pix( m_comp_op, (value_type*)m_rbuf->row_ptr(x, y, 1) + (x << 2), c.r, c.g, c.b, c.a, cover); } //-------------------------------------------------------------------- void copy_hline(int x, int y, unsigned len, const color_type& c) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2);; do { blender_type::blend_pix(m_comp_op, p, c.r, c.g, c.b, c.a, 255); p += 4; } while(--len); } //-------------------------------------------------------------------- void copy_vline(int x, int y, unsigned len, const color_type& c) { do { blender_type::blend_pix( m_comp_op, (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2), c.r, c.g, c.b, c.a, 255); } while(--len); } //-------------------------------------------------------------------- void blend_hline(int x, int y, unsigned len, const color_type& c, int8u cover) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); do { blender_type::blend_pix(m_comp_op, p, c.r, c.g, c.b, c.a, cover); p += 4; } while(--len); } //-------------------------------------------------------------------- void blend_vline(int x, int y, unsigned len, const color_type& c, int8u cover) { do { blender_type::blend_pix( m_comp_op, (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2), c.r, c.g, c.b, c.a, cover); } while(--len); } //-------------------------------------------------------------------- void blend_solid_hspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); do { blender_type::blend_pix(m_comp_op, p, c.r, c.g, c.b, c.a, *covers++); p += 4; } while(--len); } //-------------------------------------------------------------------- void blend_solid_vspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { do { blender_type::blend_pix( m_comp_op, (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2), c.r, c.g, c.b, c.a, *covers++); } while(--len); } //-------------------------------------------------------------------- void copy_color_hspan(int x, int y, unsigned len, const color_type* colors) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); do { p[order_type::R] = colors->r; p[order_type::G] = colors->g; p[order_type::B] = colors->b; p[order_type::A] = colors->a; ++colors; p += 4; } while(--len); } //-------------------------------------------------------------------- void copy_color_vspan(int x, int y, unsigned len, const color_type* colors) { do { value_type* p = (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2); p[order_type::R] = colors->r; p[order_type::G] = colors->g; p[order_type::B] = colors->b; p[order_type::A] = colors->a; ++colors; } while(--len); } //-------------------------------------------------------------------- void blend_color_hspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); do { blender_type::blend_pix(m_comp_op, p, colors->r, colors->g, colors->b, colors->a, covers ? *covers++ : cover); p += 4; ++colors; } while(--len); } //-------------------------------------------------------------------- void blend_color_hspan_alpha(int x, int y, unsigned len, const color_type* colors, value_type alpha, const int8u* covers, int8u cover) { value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); do { blender_type::blend_pix(m_comp_op, p, (colors->r * alpha + 255) >> 8, (colors->g * alpha + 255) >> 8, (colors->b * alpha + 255) >> 8, (colors->a * alpha + 255) >> 8, covers ? *covers++ : cover); p += 4; ++colors; } while(--len); } //-------------------------------------------------------------------- void blend_color_vspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { do { blender_type::blend_pix( m_comp_op, (value_type*)m_rbuf->row_ptr(x, y++, 1) + (x << 2), colors->r, colors->g, colors->b, colors->a, covers ? *covers++ : cover); ++colors; } while(--len); } //-------------------------------------------------------------------- template void for_each_pixel(Function f) { unsigned y; for(y = 0; y < height(); ++y) { row_data r = m_rbuf->row(y); if(r.ptr) { unsigned len = r.x2 - r.x1 + 1; value_type* p = (value_type*)m_rbuf->row_ptr(r.x1, y, len) + (r.x1 << 2); do { f(p); p += 4; } while(--len); } } } //-------------------------------------------------------------------- void premultiply() { for_each_pixel(multiplier_rgba::premultiply); } //-------------------------------------------------------------------- void demultiply() { for_each_pixel(multiplier_rgba::demultiply); } //-------------------------------------------------------------------- template void apply_gamma_dir(const GammaLut& g) { for_each_pixel(apply_gamma_dir_rgba(g)); } //-------------------------------------------------------------------- template void apply_gamma_inv(const GammaLut& g) { for_each_pixel(apply_gamma_inv_rgba(g)); } //-------------------------------------------------------------------- template void copy_from(const RenBuf2& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len) { const int8u* p = from.row_ptr(ysrc); if(p) { memmove(m_rbuf->row_ptr(xdst, ydst, len) + xdst * pix_width, p + xsrc * pix_width, len * pix_width); } } //-------------------------------------------------------------------- template void blend_from(const SrcPixelFormatRenderer& from, int xdst, int ydst, int xsrc, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::order_type src_order; const value_type* psrc = (const value_type*)from.row_ptr(ysrc); if(psrc) { psrc += xsrc << 2; value_type* pdst = (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2); int incp = 4; if(xdst > xsrc) { psrc += (len-1) << 2; pdst += (len-1) << 2; incp = -4; } do { blender_type::blend_pix(m_comp_op, pdst, psrc[src_order::R], psrc[src_order::G], psrc[src_order::B], psrc[src_order::A], cover); psrc += incp; pdst += incp; } while(--len); } } //-------------------------------------------------------------------- template void blend_from_color(const SrcPixelFormatRenderer& from, const color_type& color, int xdst, int ydst, int /*xsrc*/, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::value_type src_value_type; const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc); if(psrc) { value_type* pdst = (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2); do { blender_type::blend_pix(m_comp_op, pdst, color.r, color.g, color.b, color.a, (*psrc * cover + base_mask) >> base_shift); ++psrc; pdst += 4; } while(--len); } } //-------------------------------------------------------------------- template void blend_from_lut(const SrcPixelFormatRenderer& from, const color_type* color_lut, int xdst, int ydst, int /*xsrc*/, int ysrc, unsigned len, int8u cover) { typedef typename SrcPixelFormatRenderer::value_type src_value_type; const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc); if(psrc) { value_type* pdst = (value_type*)m_rbuf->row_ptr(xdst, ydst, len) + (xdst << 2); do { const color_type& color = color_lut[*psrc]; blender_type::blend_pix(m_comp_op, pdst, color.r, color.g, color.b, color.a, cover); ++psrc; pdst += 4; } while(--len); } } private: rbuf_type* m_rbuf; unsigned m_comp_op; }; //----------------------------------------------------------------------- typedef blender_rgba blender_rgba32; //----blender_rgba32 typedef blender_rgba blender_argb32; //----blender_argb32 typedef blender_rgba blender_abgr32; //----blender_abgr32 typedef blender_rgba blender_bgra32; //----blender_bgra32 typedef blender_rgba_pre blender_rgba32_pre; //----blender_rgba32_pre typedef blender_rgba_pre blender_argb32_pre; //----blender_argb32_pre typedef blender_rgba_pre blender_abgr32_pre; //----blender_abgr32_pre typedef blender_rgba_pre blender_bgra32_pre; //----blender_bgra32_pre typedef blender_rgba_plain blender_rgba32_plain; //----blender_rgba32_plain typedef blender_rgba_plain blender_argb32_plain; //----blender_argb32_plain typedef blender_rgba_plain blender_abgr32_plain; //----blender_abgr32_plain typedef blender_rgba_plain blender_bgra32_plain; //----blender_bgra32_plain typedef blender_rgba blender_rgba64; //----blender_rgba64 typedef blender_rgba blender_argb64; //----blender_argb64 typedef blender_rgba blender_abgr64; //----blender_abgr64 typedef blender_rgba blender_bgra64; //----blender_bgra64 typedef blender_rgba_pre blender_rgba64_pre; //----blender_rgba64_pre typedef blender_rgba_pre blender_argb64_pre; //----blender_argb64_pre typedef blender_rgba_pre blender_abgr64_pre; //----blender_abgr64_pre typedef blender_rgba_pre blender_bgra64_pre; //----blender_bgra64_pre //----------------------------------------------------------------------- typedef int32u pixel32_type; typedef pixfmt_alpha_blend_rgba pixfmt_rgba32; //----pixfmt_rgba32 typedef pixfmt_alpha_blend_rgba pixfmt_argb32; //----pixfmt_argb32 typedef pixfmt_alpha_blend_rgba pixfmt_abgr32; //----pixfmt_abgr32 typedef pixfmt_alpha_blend_rgba pixfmt_bgra32; //----pixfmt_bgra32 typedef pixfmt_alpha_blend_rgba pixfmt_rgba32_pre; //----pixfmt_rgba32_pre typedef pixfmt_alpha_blend_rgba pixfmt_argb32_pre; //----pixfmt_argb32_pre typedef pixfmt_alpha_blend_rgba pixfmt_abgr32_pre; //----pixfmt_abgr32_pre typedef pixfmt_alpha_blend_rgba pixfmt_bgra32_pre; //----pixfmt_bgra32_pre typedef pixfmt_alpha_blend_rgba pixfmt_rgba32_plain; //----pixfmt_rgba32_plain typedef pixfmt_alpha_blend_rgba pixfmt_argb32_plain; //----pixfmt_argb32_plain typedef pixfmt_alpha_blend_rgba pixfmt_abgr32_plain; //----pixfmt_abgr32_plain typedef pixfmt_alpha_blend_rgba pixfmt_bgra32_plain; //----pixfmt_bgra32_plain struct pixel64_type { int16u c[4]; }; typedef pixfmt_alpha_blend_rgba pixfmt_rgba64; //----pixfmt_rgba64 typedef pixfmt_alpha_blend_rgba pixfmt_argb64; //----pixfmt_argb64 typedef pixfmt_alpha_blend_rgba pixfmt_abgr64; //----pixfmt_abgr64 typedef pixfmt_alpha_blend_rgba pixfmt_bgra64; //----pixfmt_bgra64 typedef pixfmt_alpha_blend_rgba pixfmt_rgba64_pre; //----pixfmt_rgba64_pre typedef pixfmt_alpha_blend_rgba pixfmt_argb64_pre; //----pixfmt_argb64_pre typedef pixfmt_alpha_blend_rgba pixfmt_abgr64_pre; //----pixfmt_abgr64_pre typedef pixfmt_alpha_blend_rgba pixfmt_bgra64_pre; //----pixfmt_bgra64_pre } #endif mapnik-3.0.9/deps/agg/include/agg_pixfmt_transposer.h000066400000000000000000000141121262555547000227060ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_PIXFMT_TRANSPOSER_INCLUDED #define AGG_PIXFMT_TRANSPOSER_INCLUDED #include "agg_basics.h" namespace agg { //=======================================================pixfmt_transposer template class pixfmt_transposer { public: typedef PixFmt pixfmt_type; typedef typename pixfmt_type::color_type color_type; typedef typename pixfmt_type::row_data row_data; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; //-------------------------------------------------------------------- pixfmt_transposer() : m_pixf(0) {} explicit pixfmt_transposer(pixfmt_type& pixf) : m_pixf(&pixf) {} void attach(pixfmt_type& pixf) { m_pixf = &pixf; } //-------------------------------------------------------------------- AGG_INLINE unsigned width() const { return m_pixf->height(); } AGG_INLINE unsigned height() const { return m_pixf->width(); } //-------------------------------------------------------------------- AGG_INLINE color_type pixel(int x, int y) const { return m_pixf->pixel(y, x); } //-------------------------------------------------------------------- AGG_INLINE void copy_pixel(int x, int y, const color_type& c) { m_pixf->copy_pixel(y, x, c); } //-------------------------------------------------------------------- AGG_INLINE void blend_pixel(int x, int y, const color_type& c, int8u cover) { m_pixf->blend_pixel(y, x, c, cover); } //-------------------------------------------------------------------- AGG_INLINE void copy_hline(int x, int y, unsigned len, const color_type& c) { m_pixf->copy_vline(y, x, len, c); } //-------------------------------------------------------------------- AGG_INLINE void copy_vline(int x, int y, unsigned len, const color_type& c) { m_pixf->copy_hline(y, x, len, c); } //-------------------------------------------------------------------- AGG_INLINE void blend_hline(int x, int y, unsigned len, const color_type& c, int8u cover) { m_pixf->blend_vline(y, x, len, c, cover); } //-------------------------------------------------------------------- AGG_INLINE void blend_vline(int x, int y, unsigned len, const color_type& c, int8u cover) { m_pixf->blend_hline(y, x, len, c, cover); } //-------------------------------------------------------------------- AGG_INLINE void blend_solid_hspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { m_pixf->blend_solid_vspan(y, x, len, c, covers); } //-------------------------------------------------------------------- AGG_INLINE void blend_solid_vspan(int x, int y, unsigned len, const color_type& c, const int8u* covers) { m_pixf->blend_solid_hspan(y, x, len, c, covers); } //-------------------------------------------------------------------- AGG_INLINE void copy_color_hspan(int x, int y, unsigned len, const color_type* colors) { m_pixf->copy_color_vspan(y, x, len, colors); } //-------------------------------------------------------------------- AGG_INLINE void copy_color_vspan(int x, int y, unsigned len, const color_type* colors) { m_pixf->copy_color_hspan(y, x, len, colors); } //-------------------------------------------------------------------- AGG_INLINE void blend_color_hspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { m_pixf->blend_color_vspan(y, x, len, colors, covers, cover); } //-------------------------------------------------------------------- AGG_INLINE void blend_color_vspan(int x, int y, unsigned len, const color_type* colors, const int8u* covers, int8u cover) { m_pixf->blend_color_hspan(y, x, len, colors, covers, cover); } private: pixfmt_type* m_pixf; }; } #endif mapnik-3.0.9/deps/agg/include/agg_rasterizer_cells_aa.h000077500000000000000000000526361262555547000231540ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // // The author gratefully acknowleges the support of David Turner, // Robert Wilhelm, and Werner Lemberg - the authors of the FreeType // libray - in producing this work. See http://www.freetype.org for details. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for 32-bit screen coordinates has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_RASTERIZER_CELLS_AA_INCLUDED #define AGG_RASTERIZER_CELLS_AA_INCLUDED #include #include #include #include "agg_math.h" #include "agg_array.h" namespace agg { //-----------------------------------------------------rasterizer_cells_aa // An internal class that implements the main rasterization algorithm. // Used in the rasterizer. Should not be used direcly. template class rasterizer_cells_aa { enum cell_block_scale_e { cell_block_shift = 12, cell_block_size = 1 << cell_block_shift, cell_block_mask = cell_block_size - 1, cell_block_pool = 256, cell_block_limit = 1024 }; struct sorted_y { unsigned start; unsigned num; }; public: typedef Cell cell_type; typedef rasterizer_cells_aa self_type; ~rasterizer_cells_aa(); rasterizer_cells_aa(); void reset(); void style(const cell_type& style_cell); void line(int x1, int y1, int x2, int y2); int min_x() const { return m_min_x; } int min_y() const { return m_min_y; } int max_x() const { return m_max_x; } int max_y() const { return m_max_y; } void sort_cells(); unsigned total_cells() const { return m_num_cells; } unsigned scanline_num_cells(unsigned y) const { return m_sorted_y[y - m_min_y].num; } const cell_type* const* scanline_cells(unsigned y) const { return m_sorted_cells.data() + m_sorted_y[y - m_min_y].start; } bool sorted() const { return m_sorted; } private: rasterizer_cells_aa(const self_type&); const self_type& operator = (const self_type&); void set_curr_cell(int x, int y); void add_curr_cell(); void render_hline(int ey, int x1, int y1, int x2, int y2); void allocate_block(); private: unsigned m_num_blocks; unsigned m_max_blocks; unsigned m_curr_block; unsigned m_num_cells; cell_type** m_cells; cell_type* m_curr_cell_ptr; pod_vector m_sorted_cells; pod_vector m_sorted_y; cell_type m_curr_cell; cell_type m_style_cell; int m_min_x; int m_min_y; int m_max_x; int m_max_y; bool m_sorted; }; //------------------------------------------------------------------------ template rasterizer_cells_aa::~rasterizer_cells_aa() { if(m_num_blocks) { cell_type** ptr = m_cells + m_num_blocks - 1; while(m_num_blocks > 0) { pod_allocator::deallocate(*ptr, cell_block_size); ptr--; --m_num_blocks; } pod_allocator::deallocate(m_cells, m_max_blocks); } } //------------------------------------------------------------------------ template rasterizer_cells_aa::rasterizer_cells_aa() : m_num_blocks(0), m_max_blocks(0), m_curr_block(0), m_num_cells(0), m_cells(0), m_curr_cell_ptr(0), m_sorted_cells(), m_sorted_y(), m_min_x(0x7FFFFFFF), m_min_y(0x7FFFFFFF), m_max_x(-0x7FFFFFFF), m_max_y(-0x7FFFFFFF), m_sorted(false) { m_style_cell.initial(); m_curr_cell.initial(); } //------------------------------------------------------------------------ template void rasterizer_cells_aa::reset() { m_num_cells = 0; m_curr_block = 0; m_curr_cell.initial(); m_style_cell.initial(); m_sorted = false; m_min_x = 0x7FFFFFFF; m_min_y = 0x7FFFFFFF; m_max_x = -0x7FFFFFFF; m_max_y = -0x7FFFFFFF; } //------------------------------------------------------------------------ template AGG_INLINE void rasterizer_cells_aa::add_curr_cell() { if(m_curr_cell.area | m_curr_cell.cover) { if((m_num_cells & cell_block_mask) == 0) { if(m_num_blocks >= cell_block_limit) return; allocate_block(); } *m_curr_cell_ptr++ = m_curr_cell; ++m_num_cells; } } //------------------------------------------------------------------------ template AGG_INLINE void rasterizer_cells_aa::set_curr_cell(int x, int y) { if(m_curr_cell.not_equal(x, y, m_style_cell)) { add_curr_cell(); m_curr_cell.style(m_style_cell); m_curr_cell.x = x; m_curr_cell.y = y; m_curr_cell.cover = 0; m_curr_cell.area = 0; } } //------------------------------------------------------------------------ template AGG_INLINE void rasterizer_cells_aa::render_hline(int ey, int x1, int y1, int x2, int y2) { int ex1 = x1 >> poly_subpixel_shift; int ex2 = x2 >> poly_subpixel_shift; int fx1 = x1 & poly_subpixel_mask; int fx2 = x2 & poly_subpixel_mask; int delta, p, first, dx; int incr, lift, mod, rem; //trivial case. Happens often if(y1 == y2) { set_curr_cell(ex2, ey); return; } //everything is located in a single cell. That is easy! if(ex1 == ex2) { delta = y2 - y1; m_curr_cell.cover += delta; m_curr_cell.area += (fx1 + fx2) * delta; return; } //ok, we'll have to render a run of adjacent cells on the same //hline... p = (poly_subpixel_scale - fx1) * (y2 - y1); first = poly_subpixel_scale; incr = 1; dx = x2 - x1; if(dx < 0) { p = fx1 * (y2 - y1); first = 0; incr = -1; dx = -dx; } delta = p / dx; mod = p % dx; if(mod < 0) { delta--; mod += dx; } m_curr_cell.cover += delta; m_curr_cell.area += (fx1 + first) * delta; ex1 += incr; set_curr_cell(ex1, ey); y1 += delta; if(ex1 != ex2) { p = poly_subpixel_scale * (y2 - y1 + delta); lift = p / dx; rem = p % dx; if (rem < 0) { lift--; rem += dx; } mod -= dx; while (ex1 != ex2) { delta = lift; mod += rem; if(mod >= 0) { mod -= dx; delta++; } m_curr_cell.cover += delta; m_curr_cell.area += poly_subpixel_scale * delta; y1 += delta; ex1 += incr; set_curr_cell(ex1, ey); } } delta = y2 - y1; m_curr_cell.cover += delta; m_curr_cell.area += (fx2 + poly_subpixel_scale - first) * delta; } //------------------------------------------------------------------------ template AGG_INLINE void rasterizer_cells_aa::style(const cell_type& style_cell) { m_style_cell.style(style_cell); } //------------------------------------------------------------------------ template void rasterizer_cells_aa::line(int x1, int y1, int x2, int y2) { enum dx_limit_e { dx_limit = 16384 << poly_subpixel_shift }; int dx = x2 - x1; if(dx >= dx_limit || dx <= -dx_limit) { int cx = (x1 + x2) >> 1; int cy = (y1 + y2) >> 1; // Bail if values are so large they are likely to wrap if ((std::abs(x1) >= std::numeric_limits::max()/2) || (std::abs(y1) >= std::numeric_limits::max()/2) || (std::abs(x2) >= std::numeric_limits::max()/2) || (std::abs(y2) >= std::numeric_limits::max()/2)) return; line(x1, y1, cx, cy); line(cx, cy, x2, y2); } int dy = y2 - y1; int ex1 = x1 >> poly_subpixel_shift; int ex2 = x2 >> poly_subpixel_shift; int ey1 = y1 >> poly_subpixel_shift; int ey2 = y2 >> poly_subpixel_shift; int fy1 = y1 & poly_subpixel_mask; int fy2 = y2 & poly_subpixel_mask; int x_from, x_to; int p, rem, mod, lift, delta, first, incr; if(ex1 < m_min_x) m_min_x = ex1; if(ex1 > m_max_x) m_max_x = ex1; if(ey1 < m_min_y) m_min_y = ey1; if(ey1 > m_max_y) m_max_y = ey1; if(ex2 < m_min_x) m_min_x = ex2; if(ex2 > m_max_x) m_max_x = ex2; if(ey2 < m_min_y) m_min_y = ey2; if(ey2 > m_max_y) m_max_y = ey2; set_curr_cell(ex1, ey1); //everything is on a single hline if(ey1 == ey2) { render_hline(ey1, x1, fy1, x2, fy2); return; } //Vertical line - we have to calculate start and end cells, //and then - the common values of the area and coverage for //all cells of the line. We know exactly there's only one //cell, so, we don't have to call render_hline(). incr = 1; if(dx == 0) { int ex = x1 >> poly_subpixel_shift; int two_fx = (x1 - (ex << poly_subpixel_shift)) << 1; int area; first = poly_subpixel_scale; if(dy < 0) { first = 0; incr = -1; } x_from = x1; //render_hline(ey1, x_from, fy1, x_from, first); delta = first - fy1; m_curr_cell.cover += delta; m_curr_cell.area += two_fx * delta; ey1 += incr; set_curr_cell(ex, ey1); delta = first + first - poly_subpixel_scale; area = two_fx * delta; while(ey1 != ey2) { //render_hline(ey1, x_from, poly_subpixel_scale - first, x_from, first); m_curr_cell.cover = delta; m_curr_cell.area = area; ey1 += incr; set_curr_cell(ex, ey1); } //render_hline(ey1, x_from, poly_subpixel_scale - first, x_from, fy2); delta = fy2 - poly_subpixel_scale + first; m_curr_cell.cover += delta; m_curr_cell.area += two_fx * delta; return; } //ok, we have to render several hlines p = (poly_subpixel_scale - fy1) * dx; first = poly_subpixel_scale; if(dy < 0) { p = fy1 * dx; first = 0; incr = -1; dy = -dy; } delta = p / dy; mod = p % dy; if(mod < 0) { delta--; mod += dy; } x_from = x1 + delta; render_hline(ey1, x1, fy1, x_from, first); ey1 += incr; set_curr_cell(x_from >> poly_subpixel_shift, ey1); if(ey1 != ey2) { p = poly_subpixel_scale * dx; lift = p / dy; rem = p % dy; if(rem < 0) { lift--; rem += dy; } mod -= dy; while(ey1 != ey2) { delta = lift; mod += rem; if (mod >= 0) { mod -= dy; delta++; } x_to = x_from + delta; render_hline(ey1, x_from, poly_subpixel_scale - first, x_to, first); x_from = x_to; ey1 += incr; set_curr_cell(x_from >> poly_subpixel_shift, ey1); } } render_hline(ey1, x_from, poly_subpixel_scale - first, x2, fy2); } //------------------------------------------------------------------------ template void rasterizer_cells_aa::allocate_block() { if(m_curr_block >= m_num_blocks) { if(m_num_blocks >= m_max_blocks) { cell_type** new_cells = pod_allocator::allocate(m_max_blocks + cell_block_pool); if(m_cells) { memcpy(new_cells, m_cells, m_max_blocks * sizeof(cell_type*)); pod_allocator::deallocate(m_cells, m_max_blocks); } m_cells = new_cells; m_max_blocks += cell_block_pool; } m_cells[m_num_blocks++] = pod_allocator::allocate(cell_block_size); } m_curr_cell_ptr = m_cells[m_curr_block++]; } //------------------------------------------------------------------------ template static AGG_INLINE void swap_cells(T* a, T* b) { T temp = *a; *a = *b; *b = temp; } //------------------------------------------------------------------------ enum { qsort_threshold = 9 }; //------------------------------------------------------------------------ template void qsort_cells(Cell** start, unsigned num) { Cell** stack[80]; Cell*** top; Cell** limit; Cell** base; limit = start + num; base = start; top = stack; for (;;) { int len = int(limit - base); Cell** i; Cell** j; Cell** pivot; if(len > qsort_threshold) { // we use base + len/2 as the pivot pivot = base + len / 2; swap_cells(base, pivot); i = base + 1; j = limit - 1; // now ensure that *i <= *base <= *j if((*j)->x < (*i)->x) { swap_cells(i, j); } if((*base)->x < (*i)->x) { swap_cells(base, i); } if((*j)->x < (*base)->x) { swap_cells(base, j); } for(;;) { int x = (*base)->x; do i++; while( (*i)->x < x ); do j--; while( x < (*j)->x ); if(i > j) { break; } swap_cells(i, j); } swap_cells(base, j); // now, push the largest sub-array if(j - base > limit - i) { top[0] = base; top[1] = j; base = i; } else { top[0] = i; top[1] = limit; limit = j; } top += 2; } else { // the sub-array is small, perform insertion sort j = base; i = j + 1; for(; i < limit; j = i, i++) { for(; j[1]->x < (*j)->x; j--) { swap_cells(j + 1, j); if (j == base) { break; } } } if(top > stack) { top -= 2; base = top[0]; limit = top[1]; } else { break; } } } } //------------------------------------------------------------------------ template void rasterizer_cells_aa::sort_cells() { if(m_sorted) return; //Perform sort only the first time. add_curr_cell(); m_curr_cell.x = 0x7FFFFFFF; m_curr_cell.y = 0x7FFFFFFF; m_curr_cell.cover = 0; m_curr_cell.area = 0; if(m_num_cells == 0) return; // DBG: Check to see if min/max works well. //for(unsigned nc = 0; nc < m_num_cells; nc++) //{ // cell_type* cell = m_cells[nc >> cell_block_shift] + (nc & cell_block_mask); // if(cell->x < m_min_x || // cell->y < m_min_y || // cell->x > m_max_x || // cell->y > m_max_y) // { // cell = cell; // Breakpoint here // } //} // Allocate the array of cell pointers m_sorted_cells.allocate(m_num_cells, 16); // Allocate and zero the Y array m_sorted_y.allocate(m_max_y - m_min_y + 1, 16); m_sorted_y.zero(); // Create the Y-histogram (count the numbers of cells for each Y) cell_type** block_ptr = m_cells; cell_type* cell_ptr; unsigned nb = m_num_cells >> cell_block_shift; unsigned i; while(nb > 0) { cell_ptr = *block_ptr++; i = cell_block_size; while(i > 0) { m_sorted_y[cell_ptr->y - m_min_y].start++; ++cell_ptr; --i; } --nb; } cell_ptr = *block_ptr++; i = m_num_cells & cell_block_mask; while(i > 0) { m_sorted_y[cell_ptr->y - m_min_y].start++; ++cell_ptr; --i; } // Convert the Y-histogram into the array of starting indexes unsigned start = 0; for(i = 0; i < m_sorted_y.size(); i++) { unsigned v = m_sorted_y[i].start; m_sorted_y[i].start = start; start += v; } // Fill the cell pointer array sorted by Y block_ptr = m_cells; nb = m_num_cells >> cell_block_shift; while(nb > 0) { cell_ptr = *block_ptr++; i = cell_block_size; while(i > 0) { sorted_y& curr_y = m_sorted_y[cell_ptr->y - m_min_y]; m_sorted_cells[curr_y.start + curr_y.num] = cell_ptr; ++curr_y.num; ++cell_ptr; --i; } --nb; } cell_ptr = *block_ptr++; i = m_num_cells & cell_block_mask; while(i > 0) { sorted_y& curr_y = m_sorted_y[cell_ptr->y - m_min_y]; m_sorted_cells[curr_y.start + curr_y.num] = cell_ptr; ++curr_y.num; ++cell_ptr; --i; } // Finally arrange the X-arrays for(i = 0; i < m_sorted_y.size(); i++) { const sorted_y& curr_y = m_sorted_y[i]; if(curr_y.num) { qsort_cells(m_sorted_cells.data() + curr_y.start, curr_y.num); } } m_sorted = true; } //------------------------------------------------------scanline_hit_test class scanline_hit_test { public: scanline_hit_test(int x) : m_x(x), m_hit(false) {} void reset_spans() {} void finalize(int) {} void add_cell(int x, int) { if(m_x == x) m_hit = true; } void add_span(int x, int len, int) { if(m_x >= x && m_x < x+len) m_hit = true; } unsigned num_spans() const { return 1; } bool hit() const { return m_hit; } private: int m_x; bool m_hit; }; } #endif mapnik-3.0.9/deps/agg/include/agg_rasterizer_compound_aa.h000077500000000000000000000555111262555547000236710ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.3 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // // The author gratefully acknowleges the support of David Turner, // Robert Wilhelm, and Werner Lemberg - the authors of the FreeType // libray - in producing this work. See http://www.freetype.org for details. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for 32-bit screen coordinates has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_RASTERIZER_COMPOUND_AA_INCLUDED #define AGG_RASTERIZER_COMPOUND_AA_INCLUDED #include "agg_rasterizer_cells_aa.h" #include "agg_rasterizer_sl_clip.h" namespace agg { //-----------------------------------------------------------cell_style_aa // A pixel cell. There're no constructors defined and it was done // intentionally in order to avoid extra overhead when allocating an // array of cells. struct cell_style_aa { int x; int y; int cover; int area; int16 left, right; void initial() { x = 0x7FFFFFFF; y = 0x7FFFFFFF; cover = 0; area = 0; left = -1; right = -1; } void style(const cell_style_aa& c) { left = c.left; right = c.right; } int not_equal(int ex, int ey, const cell_style_aa& c) const { return (ex - x) | (ey - y) | (left - c.left) | (right - c.right); } }; //===========================================================layer_order_e enum layer_order_e { layer_unsorted, //------layer_unsorted layer_direct, //------layer_direct layer_inverse //------layer_inverse }; //==================================================rasterizer_compound_aa template class rasterizer_compound_aa { struct style_info { unsigned start_cell; unsigned num_cells; int last_x; }; struct cell_info { int x, area, cover; }; public: typedef Clip clip_type; typedef typename Clip::conv_type conv_type; typedef typename Clip::coord_type coord_type; enum aa_scale_e { aa_shift = 8, aa_scale = 1 << aa_shift, aa_mask = aa_scale - 1, aa_scale2 = aa_scale * 2, aa_mask2 = aa_scale2 - 1 }; //-------------------------------------------------------------------- rasterizer_compound_aa() : m_outline(), m_clipper(), m_filling_rule(fill_non_zero), m_layer_order(layer_direct), m_styles(), // Active Styles m_ast(), // Active Style Table (unique values) m_asm(), // Active Style Mask m_cells(), m_cover_buf(), m_master_alpha(), m_min_style(0x7FFFFFFF), m_max_style(-0x7FFFFFFF), m_start_x(0), m_start_y(0), m_scan_y(0x7FFFFFFF), m_sl_start(0), m_sl_len(0) {} //-------------------------------------------------------------------- void reset(); void reset_clipping(); void clip_box(double x1, double y1, double x2, double y2); void filling_rule(filling_rule_e filling_rule); void layer_order(layer_order_e order); void master_alpha(int style, double alpha); //-------------------------------------------------------------------- void styles(int left, int right); void move_to(int x, int y); void line_to(int x, int y); void move_to_d(double x, double y); void line_to_d(double x, double y); void add_vertex(double x, double y, unsigned cmd); void edge(int x1, int y1, int x2, int y2); void edge_d(double x1, double y1, double x2, double y2); //------------------------------------------------------------------- template void add_path(VertexSource& vs, unsigned path_id=0) { double x; double y; unsigned cmd; vs.rewind(path_id); if(m_outline.sorted()) reset(); while(!is_stop(cmd = vs.vertex(&x, &y))) { add_vertex(x, y, cmd); } } //-------------------------------------------------------------------- int min_x() const { return m_outline.min_x(); } int min_y() const { return m_outline.min_y(); } int max_x() const { return m_outline.max_x(); } int max_y() const { return m_outline.max_y(); } int min_style() const { return m_min_style; } int max_style() const { return m_max_style; } //-------------------------------------------------------------------- void sort(); bool rewind_scanlines(); unsigned sweep_styles(); int scanline_start() const { return m_sl_start; } unsigned scanline_length() const { return m_sl_len; } unsigned style(unsigned style_idx) const; cover_type* allocate_cover_buffer(unsigned len); //-------------------------------------------------------------------- bool navigate_scanline(int y); bool hit_test(int tx, int ty); //-------------------------------------------------------------------- AGG_INLINE unsigned calculate_alpha(int area, unsigned master_alpha) const { int cover = area >> (poly_subpixel_shift*2 + 1 - aa_shift); if(cover < 0) cover = -cover; if(m_filling_rule == fill_even_odd) { cover &= aa_mask2; if(cover > aa_scale) { cover = aa_scale2 - cover; } } if(cover > aa_mask) cover = aa_mask; return (cover * master_alpha + aa_mask) >> aa_shift; } //-------------------------------------------------------------------- // Sweeps one scanline with one style index. The style ID can be // determined by calling style(). template bool sweep_scanline(Scanline& sl, int style_idx) { int scan_y = m_scan_y - 1; if(scan_y > m_outline.max_y()) return false; sl.reset_spans(); unsigned master_alpha = aa_mask; if(style_idx < 0) { style_idx = 0; } else { style_idx++; master_alpha = m_master_alpha[m_ast[style_idx] + m_min_style - 1]; } const style_info& st = m_styles[m_ast[style_idx]]; unsigned num_cells = st.num_cells; cell_info* cell = &m_cells[st.start_cell]; int cover = 0; while(num_cells--) { unsigned alpha; int x = cell->x; int area = cell->area; cover += cell->cover; ++cell; if(area) { alpha = calculate_alpha((cover << (poly_subpixel_shift + 1)) - area, master_alpha); sl.add_cell(x, alpha); x++; } if(num_cells && cell->x > x) { alpha = calculate_alpha(cover << (poly_subpixel_shift + 1), master_alpha); if(alpha) { sl.add_span(x, cell->x - x, alpha); } } } if(sl.num_spans() == 0) return false; sl.finalize(scan_y); return true; } private: void add_style(int style_id); void allocate_master_alpha(); //-------------------------------------------------------------------- // Disable copying rasterizer_compound_aa(const rasterizer_compound_aa&); const rasterizer_compound_aa& operator = (const rasterizer_compound_aa&); private: rasterizer_cells_aa m_outline; clip_type m_clipper; filling_rule_e m_filling_rule; layer_order_e m_layer_order; pod_vector m_styles; // Active Styles pod_vector m_ast; // Active Style Table (unique values) pod_vector m_asm; // Active Style Mask pod_vector m_cells; pod_vector m_cover_buf; pod_bvector m_master_alpha; int m_min_style; int m_max_style; coord_type m_start_x; coord_type m_start_y; int m_scan_y; int m_sl_start; unsigned m_sl_len; }; //------------------------------------------------------------------------ template void rasterizer_compound_aa::reset() { m_outline.reset(); m_min_style = 0x7FFFFFFF; m_max_style = -0x7FFFFFFF; m_scan_y = 0x7FFFFFFF; m_sl_start = 0; m_sl_len = 0; } //------------------------------------------------------------------------ template void rasterizer_compound_aa::filling_rule(filling_rule_e filling_rule) { m_filling_rule = filling_rule; } //------------------------------------------------------------------------ template void rasterizer_compound_aa::layer_order(layer_order_e order) { m_layer_order = order; } //------------------------------------------------------------------------ template void rasterizer_compound_aa::clip_box(double x1, double y1, double x2, double y2) { reset(); m_clipper.clip_box(conv_type::upscale(x1), conv_type::upscale(y1), conv_type::upscale(x2), conv_type::upscale(y2)); } //------------------------------------------------------------------------ template void rasterizer_compound_aa::reset_clipping() { reset(); m_clipper.reset_clipping(); } //------------------------------------------------------------------------ template void rasterizer_compound_aa::styles(int left, int right) { cell_style_aa cell; cell.initial(); cell.left = (int16)left; cell.right = (int16)right; m_outline.style(cell); if(left >= 0 && left < m_min_style) m_min_style = left; if(left >= 0 && left > m_max_style) m_max_style = left; if(right >= 0 && right < m_min_style) m_min_style = right; if(right >= 0 && right > m_max_style) m_max_style = right; } //------------------------------------------------------------------------ template void rasterizer_compound_aa::move_to(int x, int y) { if(m_outline.sorted()) reset(); m_clipper.move_to(m_start_x = conv_type::downscale(x), m_start_y = conv_type::downscale(y)); } //------------------------------------------------------------------------ template void rasterizer_compound_aa::line_to(int x, int y) { m_clipper.line_to(m_outline, conv_type::downscale(x), conv_type::downscale(y)); } //------------------------------------------------------------------------ template void rasterizer_compound_aa::move_to_d(double x, double y) { if(m_outline.sorted()) reset(); m_clipper.move_to(m_start_x = conv_type::upscale(x), m_start_y = conv_type::upscale(y)); } //------------------------------------------------------------------------ template void rasterizer_compound_aa::line_to_d(double x, double y) { m_clipper.line_to(m_outline, conv_type::upscale(x), conv_type::upscale(y)); } //------------------------------------------------------------------------ template void rasterizer_compound_aa::add_vertex(double x, double y, unsigned cmd) { if(is_move_to(cmd)) { move_to_d(x, y); } else if(is_vertex(cmd)) { line_to_d(x, y); } else if(is_close(cmd)) { m_clipper.line_to(m_outline, m_start_x, m_start_y); } } //------------------------------------------------------------------------ template void rasterizer_compound_aa::edge(int x1, int y1, int x2, int y2) { if(m_outline.sorted()) reset(); m_clipper.move_to(conv_type::downscale(x1), conv_type::downscale(y1)); m_clipper.line_to(m_outline, conv_type::downscale(x2), conv_type::downscale(y2)); } //------------------------------------------------------------------------ template void rasterizer_compound_aa::edge_d(double x1, double y1, double x2, double y2) { if(m_outline.sorted()) reset(); m_clipper.move_to(conv_type::upscale(x1), conv_type::upscale(y1)); m_clipper.line_to(m_outline, conv_type::upscale(x2), conv_type::upscale(y2)); } //------------------------------------------------------------------------ template AGG_INLINE void rasterizer_compound_aa::sort() { m_outline.sort_cells(); } //------------------------------------------------------------------------ template AGG_INLINE bool rasterizer_compound_aa::rewind_scanlines() { m_outline.sort_cells(); if(m_outline.total_cells() == 0) { return false; } if(m_max_style < m_min_style) { return false; } m_scan_y = m_outline.min_y(); m_styles.allocate(m_max_style - m_min_style + 2, 128); allocate_master_alpha(); return true; } //------------------------------------------------------------------------ template AGG_INLINE void rasterizer_compound_aa::add_style(int style_id) { if(style_id < 0) style_id = 0; else style_id -= m_min_style - 1; unsigned nbyte = style_id >> 3; unsigned mask = 1 << (style_id & 7); style_info* style = &m_styles[style_id]; if((m_asm[nbyte] & mask) == 0) { m_ast.add(style_id); m_asm[nbyte] |= mask; style->start_cell = 0; style->num_cells = 0; style->last_x = -0x7FFFFFFF; } ++style->start_cell; } //------------------------------------------------------------------------ // Returns the number of styles template unsigned rasterizer_compound_aa::sweep_styles() { for(;;) { if(m_scan_y > m_outline.max_y()) return 0; unsigned num_cells = m_outline.scanline_num_cells(m_scan_y); const cell_style_aa* const* cells = m_outline.scanline_cells(m_scan_y); unsigned num_styles = m_max_style - m_min_style + 2; const cell_style_aa* curr_cell; unsigned style_id; style_info* style; cell_info* cell; m_cells.allocate(num_cells * 2, 256); // Each cell can have two styles m_ast.capacity(num_styles, 64); m_asm.allocate((num_styles + 7) >> 3, 8); m_asm.zero(); if(num_cells) { // Pre-add zero (for no-fill style, that is, -1). // We need that to ensure that the "-1 style" would go first. m_asm[0] |= 1; m_ast.add(0); style = &m_styles[0]; style->start_cell = 0; style->num_cells = 0; style->last_x = -0x7FFFFFFF; m_sl_start = cells[0]->x; m_sl_len = cells[num_cells-1]->x - m_sl_start + 1; while(num_cells--) { curr_cell = *cells++; add_style(curr_cell->left); add_style(curr_cell->right); } // Convert the Y-histogram into the array of starting indexes unsigned i; unsigned start_cell = 0; for(i = 0; i < m_ast.size(); i++) { style_info& st = m_styles[m_ast[i]]; unsigned v = st.start_cell; st.start_cell = start_cell; start_cell += v; } cells = m_outline.scanline_cells(m_scan_y); num_cells = m_outline.scanline_num_cells(m_scan_y); while(num_cells--) { curr_cell = *cells++; style_id = (curr_cell->left < 0) ? 0 : curr_cell->left - m_min_style + 1; style = &m_styles[style_id]; if(curr_cell->x == style->last_x) { cell = &m_cells[style->start_cell + style->num_cells - 1]; cell->area += curr_cell->area; cell->cover += curr_cell->cover; } else { cell = &m_cells[style->start_cell + style->num_cells]; cell->x = curr_cell->x; cell->area = curr_cell->area; cell->cover = curr_cell->cover; style->last_x = curr_cell->x; style->num_cells++; } style_id = (curr_cell->right < 0) ? 0 : curr_cell->right - m_min_style + 1; style = &m_styles[style_id]; if(curr_cell->x == style->last_x) { cell = &m_cells[style->start_cell + style->num_cells - 1]; cell->area -= curr_cell->area; cell->cover -= curr_cell->cover; } else { cell = &m_cells[style->start_cell + style->num_cells]; cell->x = curr_cell->x; cell->area = -curr_cell->area; cell->cover = -curr_cell->cover; style->last_x = curr_cell->x; style->num_cells++; } } } if(m_ast.size() > 1) break; ++m_scan_y; } ++m_scan_y; if(m_layer_order != layer_unsorted) { range_adaptor > ra(m_ast, 1, m_ast.size() - 1); if(m_layer_order == layer_direct) quick_sort(ra, unsigned_greater); else quick_sort(ra, unsigned_less); } return m_ast.size() - 1; } //------------------------------------------------------------------------ // Returns style ID depending of the existing style index template AGG_INLINE unsigned rasterizer_compound_aa::style(unsigned style_idx) const { return m_ast[style_idx + 1] + m_min_style - 1; } //------------------------------------------------------------------------ template AGG_INLINE bool rasterizer_compound_aa::navigate_scanline(int y) { m_outline.sort_cells(); if(m_outline.total_cells() == 0) { return false; } if(m_max_style < m_min_style) { return false; } if(y < m_outline.min_y() || y > m_outline.max_y()) { return false; } m_scan_y = y; m_styles.allocate(m_max_style - m_min_style + 2, 128); allocate_master_alpha(); return true; } //------------------------------------------------------------------------ template bool rasterizer_compound_aa::hit_test(int tx, int ty) { if(!navigate_scanline(ty)) { return false; } unsigned num_styles = sweep_styles(); if(num_styles <= 0) { return false; } scanline_hit_test sl(tx); sweep_scanline(sl, -1); return sl.hit(); } //------------------------------------------------------------------------ template cover_type* rasterizer_compound_aa::allocate_cover_buffer(unsigned len) { m_cover_buf.allocate(len, 256); return &m_cover_buf[0]; } //------------------------------------------------------------------------ template void rasterizer_compound_aa::allocate_master_alpha() { while((int)m_master_alpha.size() <= m_max_style) { m_master_alpha.add(aa_mask); } } //------------------------------------------------------------------------ template void rasterizer_compound_aa::master_alpha(int style, double alpha) { if(style >= 0) { while((int)m_master_alpha.size() <= style) { m_master_alpha.add(aa_mask); } m_master_alpha[style] = uround(alpha * aa_mask); } } } #endif mapnik-3.0.9/deps/agg/include/agg_rasterizer_outline.h000066400000000000000000000102441262555547000230520ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_RASTERIZER_OUTLINE_INCLUDED #define AGG_RASTERIZER_OUTLINE_INCLUDED #include "agg_basics.h" namespace agg { //======================================================rasterizer_outline template class rasterizer_outline { public: explicit rasterizer_outline(Renderer& ren) : m_ren(&ren), m_start_x(0), m_start_y(0), m_vertices(0) {} void attach(Renderer& ren) { m_ren = &ren; } //-------------------------------------------------------------------- void move_to(int x, int y) { m_vertices = 1; m_ren->move_to(m_start_x = x, m_start_y = y); } //-------------------------------------------------------------------- void line_to(int x, int y) { ++m_vertices; m_ren->line_to(x, y); } //-------------------------------------------------------------------- void move_to_d(double x, double y) { move_to(m_ren->coord(x), m_ren->coord(y)); } //-------------------------------------------------------------------- void line_to_d(double x, double y) { line_to(m_ren->coord(x), m_ren->coord(y)); } //-------------------------------------------------------------------- void close() { if(m_vertices > 2) { line_to(m_start_x, m_start_y); } m_vertices = 0; } //-------------------------------------------------------------------- void add_vertex(double x, double y, unsigned cmd) { if(is_move_to(cmd)) { move_to_d(x, y); } else { if(is_end_poly(cmd)) { if(is_closed(cmd)) close(); } else { line_to_d(x, y); } } } //-------------------------------------------------------------------- template void add_path(VertexSource& vs, unsigned path_id=0) { double x; double y; unsigned cmd; vs.rewind(path_id); while(!is_stop(cmd = vs.vertex(&x, &y))) { add_vertex(x, y, cmd); } } //-------------------------------------------------------------------- template void render_all_paths(VertexSource& vs, const ColorStorage& colors, const PathId& path_id, unsigned num_paths) { for(unsigned i = 0; i < num_paths; i++) { m_ren->line_color(colors[i]); add_path(vs, path_id[i]); } } //-------------------------------------------------------------------- template void render_ctrl(Ctrl& c) { unsigned i; for(i = 0; i < c.num_paths(); i++) { m_ren->line_color(c.color(i)); add_path(c, i); } } private: Renderer* m_ren; int m_start_x; int m_start_y; unsigned m_vertices; }; } #endif mapnik-3.0.9/deps/agg/include/agg_rasterizer_outline_aa.h000066400000000000000000000500251262555547000235140ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_RASTERIZER_OUTLINE_AA_INCLUDED #define AGG_RASTERIZER_OUTLINE_AA_INCLUDED #include "agg_basics.h" #include "agg_line_aa_basics.h" #include "agg_vertex_sequence.h" namespace agg { //------------------------------------------------------------------------- inline bool cmp_dist_start(int d) { return d > 0; } inline bool cmp_dist_end(int d) { return d <= 0; } //-----------------------------------------------------------line_aa_vertex // Vertex (x, y) with the distance to the next one. The last vertex has // the distance between the last and the first points struct line_aa_vertex { int x; int y; int len; line_aa_vertex() {} line_aa_vertex(int x_, int y_) : x(x_), y(y_), len(0) { } bool operator () (const line_aa_vertex& val) { double dx = val.x - x; double dy = val.y - y; return (len = uround(sqrt(dx * dx + dy * dy))) > (line_subpixel_scale + line_subpixel_scale / 2); } }; //----------------------------------------------------------outline_aa_join_e enum outline_aa_join_e { outline_no_join, //-----outline_no_join outline_miter_join, //-----outline_miter_join outline_round_join, //-----outline_round_join outline_miter_accurate_join //-----outline_accurate_join }; //=======================================================rasterizer_outline_aa template class rasterizer_outline_aa { private: //------------------------------------------------------------------------ struct draw_vars { unsigned idx; int x1, y1, x2, y2; line_parameters curr, next; int lcurr, lnext; int xb1, yb1, xb2, yb2; unsigned flags; }; void draw(draw_vars& dv, unsigned start, unsigned end); public: typedef line_aa_vertex vertex_type; typedef vertex_sequence vertex_storage_type; explicit rasterizer_outline_aa(Renderer& ren) : m_ren(&ren), m_line_join(ren.accurate_join_only() ? outline_miter_accurate_join : outline_round_join), m_round_cap(false), m_start_x(0), m_start_y(0) {} void attach(Renderer& ren) { m_ren = &ren; } //------------------------------------------------------------------------ void line_join(outline_aa_join_e join) { m_line_join = m_ren->accurate_join_only() ? outline_miter_accurate_join : join; } bool line_join() const { return m_line_join; } //------------------------------------------------------------------------ void round_cap(bool v) { m_round_cap = v; } bool round_cap() const { return m_round_cap; } //------------------------------------------------------------------------ void move_to(int x, int y) { m_src_vertices.modify_last(vertex_type(m_start_x = x, m_start_y = y)); } //------------------------------------------------------------------------ void line_to(int x, int y) { m_src_vertices.add(vertex_type(x, y)); } //------------------------------------------------------------------------ void move_to_d(double x, double y) { move_to(Coord::conv(x), Coord::conv(y)); } //------------------------------------------------------------------------ void line_to_d(double x, double y) { line_to(Coord::conv(x), Coord::conv(y)); } //------------------------------------------------------------------------ void render(bool close_polygon); //------------------------------------------------------------------------ void add_vertex(double x, double y, unsigned cmd) { if(is_move_to(cmd)) { render(false); move_to_d(x, y); } else { if(is_end_poly(cmd)) { render(is_closed(cmd)); if(is_closed(cmd)) { move_to(m_start_x, m_start_y); } } else { line_to_d(x, y); } } } //------------------------------------------------------------------------ template void add_path(VertexSource& vs, unsigned path_id=0) { double x; double y; unsigned cmd; vs.rewind(path_id); while(!is_stop(cmd = vs.vertex(&x, &y))) { add_vertex(x, y, cmd); } render(false); } //------------------------------------------------------------------------ template void render_all_paths(VertexSource& vs, const ColorStorage& colors, const PathId& path_id, unsigned num_paths) { for(unsigned i = 0; i < num_paths; i++) { m_ren->color(colors[i]); add_path(vs, path_id[i]); } } //------------------------------------------------------------------------ template void render_ctrl(Ctrl& c) { unsigned i; for(i = 0; i < c.num_paths(); i++) { m_ren->color(c.color(i)); add_path(c, i); } } private: rasterizer_outline_aa(const rasterizer_outline_aa&); const rasterizer_outline_aa& operator = (const rasterizer_outline_aa&); Renderer* m_ren; vertex_storage_type m_src_vertices; outline_aa_join_e m_line_join; bool m_round_cap; int m_start_x; int m_start_y; }; //---------------------------------------------------------------------------- template void rasterizer_outline_aa::draw(draw_vars& dv, unsigned start, unsigned end) { unsigned i; const vertex_storage_type::value_type* v; for(i = start; i < end; i++) { if(m_line_join == outline_round_join) { dv.xb1 = dv.curr.x1 + (dv.curr.y2 - dv.curr.y1); dv.yb1 = dv.curr.y1 - (dv.curr.x2 - dv.curr.x1); dv.xb2 = dv.curr.x2 + (dv.curr.y2 - dv.curr.y1); dv.yb2 = dv.curr.y2 - (dv.curr.x2 - dv.curr.x1); } switch(dv.flags) { case 0: m_ren->line3(dv.curr, dv.xb1, dv.yb1, dv.xb2, dv.yb2); break; case 1: m_ren->line2(dv.curr, dv.xb2, dv.yb2); break; case 2: m_ren->line1(dv.curr, dv.xb1, dv.yb1); break; case 3: m_ren->line0(dv.curr); break; } if(m_line_join == outline_round_join && (dv.flags & 2) == 0) { m_ren->pie(dv.curr.x2, dv.curr.y2, dv.curr.x2 + (dv.curr.y2 - dv.curr.y1), dv.curr.y2 - (dv.curr.x2 - dv.curr.x1), dv.curr.x2 + (dv.next.y2 - dv.next.y1), dv.curr.y2 - (dv.next.x2 - dv.next.x1)); } dv.x1 = dv.x2; dv.y1 = dv.y2; dv.lcurr = dv.lnext; dv.lnext = m_src_vertices[dv.idx].len; ++dv.idx; if(dv.idx >= m_src_vertices.size()) dv.idx = 0; v = &m_src_vertices[dv.idx]; dv.x2 = v->x; dv.y2 = v->y; dv.curr = dv.next; dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext); dv.xb1 = dv.xb2; dv.yb1 = dv.yb2; switch(m_line_join) { case outline_no_join: dv.flags = 3; break; case outline_miter_join: dv.flags >>= 1; dv.flags |= ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1); if((dv.flags & 2) == 0) { bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2); } break; case outline_round_join: dv.flags >>= 1; dv.flags |= ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1); break; case outline_miter_accurate_join: dv.flags = 0; bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2); break; } } } //---------------------------------------------------------------------------- template void rasterizer_outline_aa::render(bool close_polygon) { m_src_vertices.close(close_polygon); draw_vars dv; const vertex_storage_type::value_type* v; int x1; int y1; int x2; int y2; int lprev; if(close_polygon && (m_src_vertices.size() >= 3)) { dv.idx = 2; v = &m_src_vertices[m_src_vertices.size() - 1]; x1 = v->x; y1 = v->y; lprev = v->len; v = &m_src_vertices[0]; x2 = v->x; y2 = v->y; dv.lcurr = v->len; line_parameters prev(x1, y1, x2, y2, lprev); v = &m_src_vertices[1]; dv.x1 = v->x; dv.y1 = v->y; dv.lnext = v->len; dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr); v = &m_src_vertices[dv.idx]; dv.x2 = v->x; dv.y2 = v->y; dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext); dv.xb1 = 0; dv.yb1 = 0; dv.xb2 = 0; dv.yb2 = 0; switch(m_line_join) { case outline_no_join: dv.flags = 3; break; case outline_miter_join: case outline_round_join: dv.flags = (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) | ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1); break; case outline_miter_accurate_join: dv.flags = 0; break; } if((dv.flags & 1) == 0 && m_line_join != outline_round_join) { bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1); } if((dv.flags & 2) == 0 && m_line_join != outline_round_join) { bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2); } draw(dv, 0, m_src_vertices.size()); } else { switch(m_src_vertices.size()) { case 0: case 1: break; case 2: { v = &m_src_vertices[0]; x1 = v->x; y1 = v->y; lprev = v->len; v = &m_src_vertices[1]; x2 = v->x; y2 = v->y; line_parameters lp(x1, y1, x2, y2, lprev); if(m_round_cap) { m_ren->semidot(cmp_dist_start, x1, y1, x1 + (y2 - y1), y1 - (x2 - x1)); } m_ren->line3(lp, x1 + (y2 - y1), y1 - (x2 - x1), x2 + (y2 - y1), y2 - (x2 - x1)); if(m_round_cap) { m_ren->semidot(cmp_dist_end, x2, y2, x2 + (y2 - y1), y2 - (x2 - x1)); } } break; case 3: { int x3, y3; int lnext; v = &m_src_vertices[0]; x1 = v->x; y1 = v->y; lprev = v->len; v = &m_src_vertices[1]; x2 = v->x; y2 = v->y; lnext = v->len; v = &m_src_vertices[2]; x3 = v->x; y3 = v->y; line_parameters lp1(x1, y1, x2, y2, lprev); line_parameters lp2(x2, y2, x3, y3, lnext); if(m_round_cap) { m_ren->semidot(cmp_dist_start, x1, y1, x1 + (y2 - y1), y1 - (x2 - x1)); } if(m_line_join == outline_round_join) { m_ren->line3(lp1, x1 + (y2 - y1), y1 - (x2 - x1), x2 + (y2 - y1), y2 - (x2 - x1)); m_ren->pie(x2, y2, x2 + (y2 - y1), y2 - (x2 - x1), x2 + (y3 - y2), y2 - (x3 - x2)); m_ren->line3(lp2, x2 + (y3 - y2), y2 - (x3 - x2), x3 + (y3 - y2), y3 - (x3 - x2)); } else { bisectrix(lp1, lp2, &dv.xb1, &dv.yb1); m_ren->line3(lp1, x1 + (y2 - y1), y1 - (x2 - x1), dv.xb1, dv.yb1); m_ren->line3(lp2, dv.xb1, dv.yb1, x3 + (y3 - y2), y3 - (x3 - x2)); } if(m_round_cap) { m_ren->semidot(cmp_dist_end, x3, y3, x3 + (y3 - y2), y3 - (x3 - x2)); } } break; default: { dv.idx = 3; v = &m_src_vertices[0]; x1 = v->x; y1 = v->y; lprev = v->len; v = &m_src_vertices[1]; x2 = v->x; y2 = v->y; dv.lcurr = v->len; line_parameters prev(x1, y1, x2, y2, lprev); v = &m_src_vertices[2]; dv.x1 = v->x; dv.y1 = v->y; dv.lnext = v->len; dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr); v = &m_src_vertices[dv.idx]; dv.x2 = v->x; dv.y2 = v->y; dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext); dv.xb1 = 0; dv.yb1 = 0; dv.xb2 = 0; dv.yb2 = 0; switch(m_line_join) { case outline_no_join: dv.flags = 3; break; case outline_miter_join: case outline_round_join: dv.flags = (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) | ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1); break; case outline_miter_accurate_join: dv.flags = 0; break; } if(m_round_cap) { m_ren->semidot(cmp_dist_start, x1, y1, x1 + (y2 - y1), y1 - (x2 - x1)); } if((dv.flags & 1) == 0) { if(m_line_join == outline_round_join) { m_ren->line3(prev, x1 + (y2 - y1), y1 - (x2 - x1), x2 + (y2 - y1), y2 - (x2 - x1)); m_ren->pie(prev.x2, prev.y2, x2 + (y2 - y1), y2 - (x2 - x1), dv.curr.x1 + (dv.curr.y2 - dv.curr.y1), dv.curr.y1 - (dv.curr.x2 - dv.curr.x1)); } else { bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1); m_ren->line3(prev, x1 + (y2 - y1), y1 - (x2 - x1), dv.xb1, dv.yb1); } } else { m_ren->line1(prev, x1 + (y2 - y1), y1 - (x2 - x1)); } if((dv.flags & 2) == 0 && m_line_join != outline_round_join) { bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2); } draw(dv, 1, m_src_vertices.size() - 2); if((dv.flags & 1) == 0) { if(m_line_join == outline_round_join) { m_ren->line3(dv.curr, dv.curr.x1 + (dv.curr.y2 - dv.curr.y1), dv.curr.y1 - (dv.curr.x2 - dv.curr.x1), dv.curr.x2 + (dv.curr.y2 - dv.curr.y1), dv.curr.y2 - (dv.curr.x2 - dv.curr.x1)); } else { m_ren->line3(dv.curr, dv.xb1, dv.yb1, dv.curr.x2 + (dv.curr.y2 - dv.curr.y1), dv.curr.y2 - (dv.curr.x2 - dv.curr.x1)); } } else { m_ren->line2(dv.curr, dv.curr.x2 + (dv.curr.y2 - dv.curr.y1), dv.curr.y2 - (dv.curr.x2 - dv.curr.x1)); } if(m_round_cap) { m_ren->semidot(cmp_dist_end, dv.curr.x2, dv.curr.y2, dv.curr.x2 + (dv.curr.y2 - dv.curr.y1), dv.curr.y2 - (dv.curr.x2 - dv.curr.x1)); } } break; } } m_src_vertices.remove_all(); } } #endif mapnik-3.0.9/deps/agg/include/agg_rasterizer_scanline_aa.h000066400000000000000000000413331262555547000236330ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // // The author gratefully acknowleges the support of David Turner, // Robert Wilhelm, and Werner Lemberg - the authors of the FreeType // libray - in producing this work. See http://www.freetype.org for details. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for 32-bit screen coordinates has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_RASTERIZER_SCANLINE_AA_INCLUDED #define AGG_RASTERIZER_SCANLINE_AA_INCLUDED #include "agg_rasterizer_cells_aa.h" #include "agg_rasterizer_sl_clip.h" #include "agg_gamma_functions.h" namespace agg { //-----------------------------------------------------------------cell_aa // A pixel cell. There're no constructors defined and it was done // intentionally in order to avoid extra overhead when allocating an // array of cells. struct cell_aa { int x; int y; int cover; int area; void initial() { x = 0x7FFFFFFF; y = 0x7FFFFFFF; cover = 0; area = 0; } void style(const cell_aa&) {} int not_equal(int ex, int ey, const cell_aa&) const { return (ex - x) | (ey - y); } }; //==================================================rasterizer_scanline_aa // Polygon rasterizer that is used to render filled polygons with // high-quality Anti-Aliasing. Internally, by default, the class uses // integer coordinates in format 24.8, i.e. 24 bits for integer part // and 8 bits for fractional - see poly_subpixel_shift. This class can be // used in the following way: // // 1. filling_rule(filling_rule_e ft) - optional. // // 2. gamma() - optional. // // 3. reset() // // 4. move_to(x, y) / line_to(x, y) - make the polygon. One can create // more than one contour, but each contour must consist of at least 3 // vertices, i.e. move_to(x1, y1); line_to(x2, y2); line_to(x3, y3); // is the absolute minimum of vertices that define a triangle. // The algorithm does not check either the number of vertices nor // coincidence of their coordinates, but in the worst case it just // won't draw anything. // The orger of the vertices (clockwise or counterclockwise) // is important when using the non-zero filling rule (fill_non_zero). // In this case the vertex order of all the contours must be the same // if you want your intersecting polygons to be without "holes". // You actually can use different vertices order. If the contours do not // intersect each other the order is not important anyway. If they do, // contours with the same vertex order will be rendered without "holes" // while the intersecting contours with different orders will have "holes". // // filling_rule() and gamma() can be called anytime before "sweeping". //------------------------------------------------------------------------ template class rasterizer_scanline_aa { enum status { status_initial, status_move_to, status_line_to, status_closed }; public: typedef Clip clip_type; typedef typename Clip::conv_type conv_type; typedef typename Clip::coord_type coord_type; enum aa_scale_e { aa_shift = 8, aa_scale = 1 << aa_shift, aa_mask = aa_scale - 1, aa_scale2 = aa_scale * 2, aa_mask2 = aa_scale2 - 1 }; //-------------------------------------------------------------------- rasterizer_scanline_aa() : m_outline(), m_clipper(), m_filling_rule(fill_non_zero), m_auto_close(true), m_start_x(0), m_start_y(0), m_status(status_initial) { int i; for(i = 0; i < aa_scale; i++) m_gamma[i] = i; } //-------------------------------------------------------------------- template rasterizer_scanline_aa(const GammaF& gamma_function) : m_outline(), m_clipper(m_outline), m_filling_rule(fill_non_zero), m_auto_close(true), m_start_x(0), m_start_y(0), m_status(status_initial) { gamma(gamma_function); } //-------------------------------------------------------------------- void reset(); void reset_clipping(); void clip_box(double x1, double y1, double x2, double y2); void filling_rule(filling_rule_e filling_rule); void auto_close(bool flag) { m_auto_close = flag; } //-------------------------------------------------------------------- template void gamma(const GammaF& gamma_function) { int i; for(i = 0; i < aa_scale; i++) { m_gamma[i] = uround(gamma_function(double(i) / aa_mask) * aa_mask); } } //-------------------------------------------------------------------- unsigned apply_gamma(unsigned cover) const { return m_gamma[cover]; } //-------------------------------------------------------------------- void move_to(int x, int y); void line_to(int x, int y); void move_to_d(double x, double y); void line_to_d(double x, double y); void close_polygon(); void add_vertex(double x, double y, unsigned cmd); void edge(int x1, int y1, int x2, int y2); void edge_d(double x1, double y1, double x2, double y2); //------------------------------------------------------------------- template void add_path(VertexSource& vs, unsigned path_id=0) { double x; double y; unsigned cmd; vs.rewind(path_id); if(m_outline.sorted()) reset(); while(!is_stop(cmd = vs.vertex(&x, &y))) { add_vertex(x, y, cmd); } } //-------------------------------------------------------------------- int min_x() const { return m_outline.min_x(); } int min_y() const { return m_outline.min_y(); } int max_x() const { return m_outline.max_x(); } int max_y() const { return m_outline.max_y(); } //-------------------------------------------------------------------- void sort(); bool rewind_scanlines(); bool navigate_scanline(int y); //-------------------------------------------------------------------- AGG_INLINE unsigned calculate_alpha(int area) const { int cover = area >> (poly_subpixel_shift*2 + 1 - aa_shift); if(cover < 0) cover = -cover; if(m_filling_rule == fill_even_odd) { cover &= aa_mask2; if(cover > aa_scale) { cover = aa_scale2 - cover; } } if(cover > aa_mask) cover = aa_mask; return m_gamma[cover]; } //-------------------------------------------------------------------- template bool sweep_scanline(Scanline& sl) { for(;;) { if(m_scan_y > m_outline.max_y()) return false; sl.reset_spans(); unsigned num_cells = m_outline.scanline_num_cells(m_scan_y); const cell_aa* const* cells = m_outline.scanline_cells(m_scan_y); int cover = 0; while(num_cells) { const cell_aa* cur_cell = *cells; int x = cur_cell->x; int area = cur_cell->area; unsigned alpha; cover += cur_cell->cover; //accumulate all cells with the same X while(--num_cells) { cur_cell = *++cells; if(cur_cell->x != x) break; area += cur_cell->area; cover += cur_cell->cover; } if(area) { alpha = calculate_alpha((cover << (poly_subpixel_shift + 1)) - area); if(alpha) { sl.add_cell(x, alpha); } x++; } if(num_cells && cur_cell->x > x) { alpha = calculate_alpha(cover << (poly_subpixel_shift + 1)); if(alpha) { sl.add_span(x, cur_cell->x - x, alpha); } } } if(sl.num_spans()) break; ++m_scan_y; } sl.finalize(m_scan_y); ++m_scan_y; return true; } //-------------------------------------------------------------------- bool hit_test(int tx, int ty); private: //-------------------------------------------------------------------- // Disable copying rasterizer_scanline_aa(const rasterizer_scanline_aa&); const rasterizer_scanline_aa& operator = (const rasterizer_scanline_aa&); private: rasterizer_cells_aa m_outline; clip_type m_clipper; int m_gamma[aa_scale]; filling_rule_e m_filling_rule; bool m_auto_close; coord_type m_start_x; coord_type m_start_y; unsigned m_status; int m_scan_y; }; //------------------------------------------------------------------------ template void rasterizer_scanline_aa::reset() { m_outline.reset(); m_status = status_initial; } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::filling_rule(filling_rule_e filling_rule) { m_filling_rule = filling_rule; } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::clip_box(double x1, double y1, double x2, double y2) { reset(); m_clipper.clip_box(conv_type::upscale(x1), conv_type::upscale(y1), conv_type::upscale(x2), conv_type::upscale(y2)); } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::reset_clipping() { reset(); m_clipper.reset_clipping(); } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::close_polygon() { if(m_status == status_line_to) { m_clipper.line_to(m_outline, m_start_x, m_start_y); m_status = status_closed; } } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::move_to(int x, int y) { if(m_outline.sorted()) reset(); if(m_auto_close) close_polygon(); m_clipper.move_to(m_start_x = conv_type::downscale(x), m_start_y = conv_type::downscale(y)); m_status = status_move_to; } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::line_to(int x, int y) { m_clipper.line_to(m_outline, conv_type::downscale(x), conv_type::downscale(y)); m_status = status_line_to; } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::move_to_d(double x, double y) { if(m_outline.sorted()) reset(); if(m_auto_close) close_polygon(); m_clipper.move_to(m_start_x = conv_type::upscale(x), m_start_y = conv_type::upscale(y)); m_status = status_move_to; } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::line_to_d(double x, double y) { m_clipper.line_to(m_outline, conv_type::upscale(x), conv_type::upscale(y)); m_status = status_line_to; } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::add_vertex(double x, double y, unsigned cmd) { if(is_move_to(cmd)) { move_to_d(x, y); } else if(is_vertex(cmd)) { line_to_d(x, y); } else if(is_close(cmd)) { close_polygon(); } } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::edge(int x1, int y1, int x2, int y2) { if(m_outline.sorted()) reset(); m_clipper.move_to(conv_type::downscale(x1), conv_type::downscale(y1)); m_clipper.line_to(m_outline, conv_type::downscale(x2), conv_type::downscale(y2)); m_status = status_move_to; } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::edge_d(double x1, double y1, double x2, double y2) { if(m_outline.sorted()) reset(); m_clipper.move_to(conv_type::upscale(x1), conv_type::upscale(y1)); m_clipper.line_to(m_outline, conv_type::upscale(x2), conv_type::upscale(y2)); m_status = status_move_to; } //------------------------------------------------------------------------ template void rasterizer_scanline_aa::sort() { if(m_auto_close) close_polygon(); m_outline.sort_cells(); } //------------------------------------------------------------------------ template AGG_INLINE bool rasterizer_scanline_aa::rewind_scanlines() { if(m_auto_close) close_polygon(); m_outline.sort_cells(); if(m_outline.total_cells() == 0) { return false; } m_scan_y = m_outline.min_y(); return true; } //------------------------------------------------------------------------ template AGG_INLINE bool rasterizer_scanline_aa::navigate_scanline(int y) { if(m_auto_close) close_polygon(); m_outline.sort_cells(); if(m_outline.total_cells() == 0 || y < m_outline.min_y() || y > m_outline.max_y()) { return false; } m_scan_y = y; return true; } //------------------------------------------------------------------------ template bool rasterizer_scanline_aa::hit_test(int tx, int ty) { if(!navigate_scanline(ty)) return false; scanline_hit_test sl(tx); sweep_scanline(sl); return sl.hit(); } } #endif mapnik-3.0.9/deps/agg/include/agg_rasterizer_sl_clip.h000066400000000000000000000311711262555547000230220ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_RASTERIZER_SL_CLIP_INCLUDED #define AGG_RASTERIZER_SL_CLIP_INCLUDED #include "agg_clip_liang_barsky.h" namespace agg { //--------------------------------------------------------poly_max_coord_e enum poly_max_coord_e { poly_max_coord = (1 << 30) - 1 //----poly_max_coord }; //------------------------------------------------------------ras_conv_int struct ras_conv_int { typedef int coord_type; static AGG_INLINE int mul_div(double a, double b, double c) { return iround(a * b / c); } static int xi(int v) { return v; } static int yi(int v) { return v; } static int upscale(double v) { return iround(v * poly_subpixel_scale); } static int downscale(int v) { return v; } }; //--------------------------------------------------------ras_conv_int_sat struct ras_conv_int_sat { typedef int coord_type; static AGG_INLINE int mul_div(double a, double b, double c) { return saturation::iround(a * b / c); } static int xi(int v) { return v; } static int yi(int v) { return v; } static int upscale(double v) { return saturation::iround(v * poly_subpixel_scale); } static int downscale(int v) { return v; } }; //---------------------------------------------------------ras_conv_int_3x struct ras_conv_int_3x { typedef int coord_type; static AGG_INLINE int mul_div(double a, double b, double c) { return iround(a * b / c); } static int xi(int v) { return v * 3; } static int yi(int v) { return v; } static int upscale(double v) { return iround(v * poly_subpixel_scale); } static int downscale(int v) { return v; } }; //-----------------------------------------------------------ras_conv_dbl struct ras_conv_dbl { typedef double coord_type; static AGG_INLINE double mul_div(double a, double b, double c) { return a * b / c; } static int xi(double v) { return iround(v * poly_subpixel_scale); } static int yi(double v) { return iround(v * poly_subpixel_scale); } static double upscale(double v) { return v; } static double downscale(int v) { return v / double(poly_subpixel_scale); } }; //--------------------------------------------------------ras_conv_dbl_3x struct ras_conv_dbl_3x { typedef double coord_type; static AGG_INLINE double mul_div(double a, double b, double c) { return a * b / c; } static int xi(double v) { return iround(v * poly_subpixel_scale * 3); } static int yi(double v) { return iround(v * poly_subpixel_scale); } static double upscale(double v) { return v; } static double downscale(int v) { return v / double(poly_subpixel_scale); } }; //------------------------------------------------------rasterizer_sl_clip template class rasterizer_sl_clip { public: typedef Conv conv_type; typedef typename Conv::coord_type coord_type; typedef rect_base rect_type; //-------------------------------------------------------------------- rasterizer_sl_clip() : m_clip_box(0,0,0,0), m_x1(0), m_y1(0), m_f1(0), m_clipping(false) {} //-------------------------------------------------------------------- void reset_clipping() { m_clipping = false; } //-------------------------------------------------------------------- void clip_box(coord_type x1, coord_type y1, coord_type x2, coord_type y2) { m_clip_box = rect_type(x1, y1, x2, y2); m_clip_box.normalize(); m_clipping = true; } //-------------------------------------------------------------------- void move_to(coord_type x1, coord_type y1) { m_x1 = x1; m_y1 = y1; if(m_clipping) m_f1 = clipping_flags(x1, y1, m_clip_box); } private: //------------------------------------------------------------------------ template AGG_INLINE void line_clip_y(Rasterizer& ras, coord_type x1, coord_type y1, coord_type x2, coord_type y2, unsigned f1, unsigned f2) const { f1 &= 10; f2 &= 10; if((f1 | f2) == 0) { // Fully visible ras.line(Conv::xi(x1), Conv::yi(y1), Conv::xi(x2), Conv::yi(y2)); } else { if(f1 == f2) { // Invisible by Y return; } coord_type tx1 = x1; coord_type ty1 = y1; coord_type tx2 = x2; coord_type ty2 = y2; if(f1 & 8) // y1 < clip.y1 { tx1 = x1 + Conv::mul_div(m_clip_box.y1-y1, x2-x1, y2-y1); ty1 = m_clip_box.y1; } if(f1 & 2) // y1 > clip.y2 { tx1 = x1 + Conv::mul_div(m_clip_box.y2-y1, x2-x1, y2-y1); ty1 = m_clip_box.y2; } if(f2 & 8) // y2 < clip.y1 { tx2 = x1 + Conv::mul_div(m_clip_box.y1-y1, x2-x1, y2-y1); ty2 = m_clip_box.y1; } if(f2 & 2) // y2 > clip.y2 { tx2 = x1 + Conv::mul_div(m_clip_box.y2-y1, x2-x1, y2-y1); ty2 = m_clip_box.y2; } ras.line(Conv::xi(tx1), Conv::yi(ty1), Conv::xi(tx2), Conv::yi(ty2)); } } public: //-------------------------------------------------------------------- template void line_to(Rasterizer& ras, coord_type x2, coord_type y2) { if(m_clipping) { unsigned f2 = clipping_flags(x2, y2, m_clip_box); if((m_f1 & 10) == (f2 & 10) && (m_f1 & 10) != 0) { // Invisible by Y m_x1 = x2; m_y1 = y2; m_f1 = f2; return; } coord_type x1 = m_x1; coord_type y1 = m_y1; unsigned f1 = m_f1; coord_type y3, y4; unsigned f3, f4; switch(((f1 & 5) << 1) | (f2 & 5)) { case 0: // Visible by X line_clip_y(ras, x1, y1, x2, y2, f1, f2); break; case 1: // x2 > clip.x2 y3 = y1 + Conv::mul_div(m_clip_box.x2-x1, y2-y1, x2-x1); f3 = clipping_flags_y(y3, m_clip_box); line_clip_y(ras, x1, y1, m_clip_box.x2, y3, f1, f3); line_clip_y(ras, m_clip_box.x2, y3, m_clip_box.x2, y2, f3, f2); break; case 2: // x1 > clip.x2 y3 = y1 + Conv::mul_div(m_clip_box.x2-x1, y2-y1, x2-x1); f3 = clipping_flags_y(y3, m_clip_box); line_clip_y(ras, m_clip_box.x2, y1, m_clip_box.x2, y3, f1, f3); line_clip_y(ras, m_clip_box.x2, y3, x2, y2, f3, f2); break; case 3: // x1 > clip.x2 && x2 > clip.x2 line_clip_y(ras, m_clip_box.x2, y1, m_clip_box.x2, y2, f1, f2); break; case 4: // x2 < clip.x1 y3 = y1 + Conv::mul_div(m_clip_box.x1-x1, y2-y1, x2-x1); f3 = clipping_flags_y(y3, m_clip_box); line_clip_y(ras, x1, y1, m_clip_box.x1, y3, f1, f3); line_clip_y(ras, m_clip_box.x1, y3, m_clip_box.x1, y2, f3, f2); break; case 6: // x1 > clip.x2 && x2 < clip.x1 y3 = y1 + Conv::mul_div(m_clip_box.x2-x1, y2-y1, x2-x1); y4 = y1 + Conv::mul_div(m_clip_box.x1-x1, y2-y1, x2-x1); f3 = clipping_flags_y(y3, m_clip_box); f4 = clipping_flags_y(y4, m_clip_box); line_clip_y(ras, m_clip_box.x2, y1, m_clip_box.x2, y3, f1, f3); line_clip_y(ras, m_clip_box.x2, y3, m_clip_box.x1, y4, f3, f4); line_clip_y(ras, m_clip_box.x1, y4, m_clip_box.x1, y2, f4, f2); break; case 8: // x1 < clip.x1 y3 = y1 + Conv::mul_div(m_clip_box.x1-x1, y2-y1, x2-x1); f3 = clipping_flags_y(y3, m_clip_box); line_clip_y(ras, m_clip_box.x1, y1, m_clip_box.x1, y3, f1, f3); line_clip_y(ras, m_clip_box.x1, y3, x2, y2, f3, f2); break; case 9: // x1 < clip.x1 && x2 > clip.x2 y3 = y1 + Conv::mul_div(m_clip_box.x1-x1, y2-y1, x2-x1); y4 = y1 + Conv::mul_div(m_clip_box.x2-x1, y2-y1, x2-x1); f3 = clipping_flags_y(y3, m_clip_box); f4 = clipping_flags_y(y4, m_clip_box); line_clip_y(ras, m_clip_box.x1, y1, m_clip_box.x1, y3, f1, f3); line_clip_y(ras, m_clip_box.x1, y3, m_clip_box.x2, y4, f3, f4); line_clip_y(ras, m_clip_box.x2, y4, m_clip_box.x2, y2, f4, f2); break; case 12: // x1 < clip.x1 && x2 < clip.x1 line_clip_y(ras, m_clip_box.x1, y1, m_clip_box.x1, y2, f1, f2); break; } m_f1 = f2; } else { ras.line(Conv::xi(m_x1), Conv::yi(m_y1), Conv::xi(x2), Conv::yi(y2)); } m_x1 = x2; m_y1 = y2; } private: rect_type m_clip_box; coord_type m_x1; coord_type m_y1; unsigned m_f1; bool m_clipping; }; //---------------------------------------------------rasterizer_sl_no_clip class rasterizer_sl_no_clip { public: typedef ras_conv_int conv_type; typedef int coord_type; rasterizer_sl_no_clip() : m_x1(0), m_y1(0) {} void reset_clipping() {} void clip_box(coord_type /*x1*/, coord_type /*y1*/, coord_type /*x2*/, coord_type /*y2*/) {} void move_to(coord_type x1, coord_type y1) { m_x1 = x1; m_y1 = y1; } template void line_to(Rasterizer& ras, coord_type x2, coord_type y2) { ras.line(m_x1, m_y1, x2, y2); m_x1 = x2; m_y1 = y2; } private: int m_x1, m_y1; }; // -----rasterizer_sl_clip_int // -----rasterizer_sl_clip_int_sat // -----rasterizer_sl_clip_int_3x // -----rasterizer_sl_clip_dbl // -----rasterizer_sl_clip_dbl_3x //------------------------------------------------------------------------ typedef rasterizer_sl_clip rasterizer_sl_clip_int; typedef rasterizer_sl_clip rasterizer_sl_clip_int_sat; typedef rasterizer_sl_clip rasterizer_sl_clip_int_3x; typedef rasterizer_sl_clip rasterizer_sl_clip_dbl; typedef rasterizer_sl_clip rasterizer_sl_clip_dbl_3x; } #endif mapnik-3.0.9/deps/agg/include/agg_renderer_base.h000066400000000000000000000625751262555547000217370ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class renderer_base // //---------------------------------------------------------------------------- #ifndef AGG_RENDERER_BASE_INCLUDED #define AGG_RENDERER_BASE_INCLUDED #include "agg_basics.h" #include "agg_rendering_buffer.h" namespace agg { //-----------------------------------------------------------renderer_base template class renderer_base { public: typedef PixelFormat pixfmt_type; typedef typename pixfmt_type::color_type color_type; typedef typename pixfmt_type::color_type::value_type value_type; typedef typename pixfmt_type::row_data row_data; //-------------------------------------------------------------------- renderer_base() : m_ren(0), m_clip_box(1, 1, 0, 0) {} explicit renderer_base(pixfmt_type& ren) : m_ren(&ren), m_clip_box(0, 0, ren.width() - 1, ren.height() - 1) {} void attach(pixfmt_type& ren) { m_ren = &ren; m_clip_box = rect_i(0, 0, ren.width() - 1, ren.height() - 1); } //-------------------------------------------------------------------- const pixfmt_type& ren() const { return *m_ren; } pixfmt_type& ren() { return *m_ren; } //-------------------------------------------------------------------- unsigned width() const { return m_ren->width(); } unsigned height() const { return m_ren->height(); } //-------------------------------------------------------------------- bool clip_box(int x1, int y1, int x2, int y2) { rect_i cb(x1, y1, x2, y2); cb.normalize(); if(cb.clip(rect_i(0, 0, width() - 1, height() - 1))) { m_clip_box = cb; return true; } m_clip_box.x1 = 1; m_clip_box.y1 = 1; m_clip_box.x2 = 0; m_clip_box.y2 = 0; return false; } //-------------------------------------------------------------------- void reset_clipping(bool visibility) { if(visibility) { m_clip_box.x1 = 0; m_clip_box.y1 = 0; m_clip_box.x2 = width() - 1; m_clip_box.y2 = height() - 1; } else { m_clip_box.x1 = 1; m_clip_box.y1 = 1; m_clip_box.x2 = 0; m_clip_box.y2 = 0; } } //-------------------------------------------------------------------- void clip_box_naked(int x1, int y1, int x2, int y2) { m_clip_box.x1 = x1; m_clip_box.y1 = y1; m_clip_box.x2 = x2; m_clip_box.y2 = y2; } //-------------------------------------------------------------------- bool inbox(int x, int y) const { return x >= m_clip_box.x1 && y >= m_clip_box.y1 && x <= m_clip_box.x2 && y <= m_clip_box.y2; } //-------------------------------------------------------------------- const rect_i& clip_box() const { return m_clip_box; } int xmin() const { return m_clip_box.x1; } int ymin() const { return m_clip_box.y1; } int xmax() const { return m_clip_box.x2; } int ymax() const { return m_clip_box.y2; } //-------------------------------------------------------------------- const rect_i& bounding_clip_box() const { return m_clip_box; } int bounding_xmin() const { return m_clip_box.x1; } int bounding_ymin() const { return m_clip_box.y1; } int bounding_xmax() const { return m_clip_box.x2; } int bounding_ymax() const { return m_clip_box.y2; } //-------------------------------------------------------------------- void clear(const color_type& c) { unsigned y; if(width()) { for(y = 0; y < height(); y++) { m_ren->copy_hline(0, y, width(), c); } } } //-------------------------------------------------------------------- void copy_pixel(int x, int y, const color_type& c) { if(inbox(x, y)) { m_ren->copy_pixel(x, y, c); } } //-------------------------------------------------------------------- void blend_pixel(int x, int y, const color_type& c, cover_type cover) { if(inbox(x, y)) { m_ren->blend_pixel(x, y, c, cover); } } //-------------------------------------------------------------------- color_type pixel(int x, int y) const { return inbox(x, y) ? m_ren->pixel(x, y) : color_type::no_color(); } //-------------------------------------------------------------------- void copy_hline(int x1, int y, int x2, const color_type& c) { if(x1 > x2) { int t = x2; x2 = x1; x1 = t; } if(y > ymax()) return; if(y < ymin()) return; if(x1 > xmax()) return; if(x2 < xmin()) return; if(x1 < xmin()) x1 = xmin(); if(x2 > xmax()) x2 = xmax(); m_ren->copy_hline(x1, y, x2 - x1 + 1, c); } //-------------------------------------------------------------------- void copy_vline(int x, int y1, int y2, const color_type& c) { if(y1 > y2) { int t = y2; y2 = y1; y1 = t; } if(x > xmax()) return; if(x < xmin()) return; if(y1 > ymax()) return; if(y2 < ymin()) return; if(y1 < ymin()) y1 = ymin(); if(y2 > ymax()) y2 = ymax(); m_ren->copy_vline(x, y1, y2 - y1 + 1, c); } //-------------------------------------------------------------------- void blend_hline(int x1, int y, int x2, const color_type& c, cover_type cover) { if(x1 > x2) { int t = x2; x2 = x1; x1 = t; } if(y > ymax()) return; if(y < ymin()) return; if(x1 > xmax()) return; if(x2 < xmin()) return; if(x1 < xmin()) x1 = xmin(); if(x2 > xmax()) x2 = xmax(); m_ren->blend_hline(x1, y, x2 - x1 + 1, c, cover); } //-------------------------------------------------------------------- void blend_vline(int x, int y1, int y2, const color_type& c, cover_type cover) { if(y1 > y2) { int t = y2; y2 = y1; y1 = t; } if(x > xmax()) return; if(x < xmin()) return; if(y1 > ymax()) return; if(y2 < ymin()) return; if(y1 < ymin()) y1 = ymin(); if(y2 > ymax()) y2 = ymax(); m_ren->blend_vline(x, y1, y2 - y1 + 1, c, cover); } //-------------------------------------------------------------------- void copy_bar(int x1, int y1, int x2, int y2, const color_type& c) { rect_i rc(x1, y1, x2, y2); rc.normalize(); if(rc.clip(clip_box())) { int y; for(y = rc.y1; y <= rc.y2; y++) { m_ren->copy_hline(rc.x1, y, unsigned(rc.x2 - rc.x1 + 1), c); } } } //-------------------------------------------------------------------- void blend_bar(int x1, int y1, int x2, int y2, const color_type& c, cover_type cover) { rect_i rc(x1, y1, x2, y2); rc.normalize(); if(rc.clip(clip_box())) { int y; for(y = rc.y1; y <= rc.y2; y++) { m_ren->blend_hline(rc.x1, y, unsigned(rc.x2 - rc.x1 + 1), c, cover); } } } //-------------------------------------------------------------------- void blend_solid_hspan(int x, int y, int len, const color_type& c, const cover_type* covers) { if(y > ymax()) return; if(y < ymin()) return; if(x < xmin()) { len -= xmin() - x; if(len <= 0) return; covers += xmin() - x; x = xmin(); } if(x + len > xmax()) { len = xmax() - x + 1; if(len <= 0) return; } m_ren->blend_solid_hspan(x, y, len, c, covers); } //-------------------------------------------------------------------- void blend_solid_vspan(int x, int y, int len, const color_type& c, const cover_type* covers) { if(x > xmax()) return; if(x < xmin()) return; if(y < ymin()) { len -= ymin() - y; if(len <= 0) return; covers += ymin() - y; y = ymin(); } if(y + len > ymax()) { len = ymax() - y + 1; if(len <= 0) return; } m_ren->blend_solid_vspan(x, y, len, c, covers); } //-------------------------------------------------------------------- void copy_color_hspan(int x, int y, int len, const color_type* colors) { if(y > ymax()) return; if(y < ymin()) return; if(x < xmin()) { int d = xmin() - x; len -= d; if(len <= 0) return; colors += d; x = xmin(); } if(x + len > xmax()) { len = xmax() - x + 1; if(len <= 0) return; } m_ren->copy_color_hspan(x, y, len, colors); } //-------------------------------------------------------------------- void copy_color_vspan(int x, int y, int len, const color_type* colors) { if(x > xmax()) return; if(x < xmin()) return; if(y < ymin()) { int d = ymin() - y; len -= d; if(len <= 0) return; colors += d; y = ymin(); } if(y + len > ymax()) { len = ymax() - y + 1; if(len <= 0) return; } m_ren->copy_color_vspan(x, y, len, colors); } //-------------------------------------------------------------------- void blend_color_hspan(int x, int y, int len, const color_type* colors, const cover_type* covers, cover_type cover = agg::cover_full) { if(y > ymax()) return; if(y < ymin()) return; if(x < xmin()) { int d = xmin() - x; len -= d; if(len <= 0) return; if(covers) covers += d; colors += d; x = xmin(); } if(x + len > xmax()) { len = xmax() - x + 1; if(len <= 0) return; } m_ren->blend_color_hspan(x, y, len, colors, covers, cover); } //-------------------------------------------------------------------- void blend_color_hspan_alpha(int x, int y, int len, const color_type* colors, value_type alpha, const cover_type* covers, cover_type cover = agg::cover_full) { if(y > ymax()) return; if(y < ymin()) return; if(x < xmin()) { int d = xmin() - x; len -= d; if(len <= 0) return; if(covers) covers += d; colors += d; x = xmin(); } if(x + len > xmax()) { len = xmax() - x + 1; if(len <= 0) return; } m_ren->blend_color_hspan_alpha(x, y, len, colors, alpha, covers, cover); } //-------------------------------------------------------------------- void blend_color_vspan(int x, int y, int len, const color_type* colors, const cover_type* covers, cover_type cover = agg::cover_full) { if(x > xmax()) return; if(x < xmin()) return; if(y < ymin()) { int d = ymin() - y; len -= d; if(len <= 0) return; if(covers) covers += d; colors += d; y = ymin(); } if(y + len > ymax()) { len = ymax() - y + 1; if(len <= 0) return; } m_ren->blend_color_vspan(x, y, len, colors, covers, cover); } //-------------------------------------------------------------------- rect_i clip_rect_area(rect_i& dst, rect_i& src, int wsrc, int hsrc) const { rect_i rc(0,0,0,0); rect_i cb = clip_box(); ++cb.x2; ++cb.y2; if(src.x1 < 0) { dst.x1 -= src.x1; src.x1 = 0; } if(src.y1 < 0) { dst.y1 -= src.y1; src.y1 = 0; } if(src.x2 > wsrc) src.x2 = wsrc; if(src.y2 > hsrc) src.y2 = hsrc; if(dst.x1 < cb.x1) { src.x1 += cb.x1 - dst.x1; dst.x1 = cb.x1; } if(dst.y1 < cb.y1) { src.y1 += cb.y1 - dst.y1; dst.y1 = cb.y1; } if(dst.x2 > cb.x2) dst.x2 = cb.x2; if(dst.y2 > cb.y2) dst.y2 = cb.y2; rc.x2 = dst.x2 - dst.x1; rc.y2 = dst.y2 - dst.y1; if(rc.x2 > src.x2 - src.x1) rc.x2 = src.x2 - src.x1; if(rc.y2 > src.y2 - src.y1) rc.y2 = src.y2 - src.y1; return rc; } //-------------------------------------------------------------------- template void copy_from(const RenBuf& src, const rect_i* rect_src_ptr = 0, int dx = 0, int dy = 0) { rect_i rsrc(0, 0, src.width(), src.height()); if(rect_src_ptr) { rsrc.x1 = rect_src_ptr->x1; rsrc.y1 = rect_src_ptr->y1; rsrc.x2 = rect_src_ptr->x2 + 1; rsrc.y2 = rect_src_ptr->y2 + 1; } // Version with xdst, ydst (absolute positioning) //rect_i rdst(xdst, ydst, xdst + rsrc.x2 - rsrc.x1, ydst + rsrc.y2 - rsrc.y1); // Version with dx, dy (relative positioning) rect_i rdst(rsrc.x1 + dx, rsrc.y1 + dy, rsrc.x2 + dx, rsrc.y2 + dy); rect_i rc = clip_rect_area(rdst, rsrc, src.width(), src.height()); if(rc.x2 > 0) { int incy = 1; if(rdst.y1 > rsrc.y1) { rsrc.y1 += rc.y2 - 1; rdst.y1 += rc.y2 - 1; incy = -1; } while(rc.y2 > 0) { m_ren->copy_from(src, rdst.x1, rdst.y1, rsrc.x1, rsrc.y1, rc.x2); rdst.y1 += incy; rsrc.y1 += incy; --rc.y2; } } } //-------------------------------------------------------------------- template void blend_from(const SrcPixelFormatRenderer& src, const rect_i* rect_src_ptr = 0, int dx = 0, int dy = 0, cover_type cover = agg::cover_full) { rect_i rsrc(0, 0, src.width(), src.height()); if(rect_src_ptr) { rsrc.x1 = rect_src_ptr->x1; rsrc.y1 = rect_src_ptr->y1; rsrc.x2 = rect_src_ptr->x2 + 1; rsrc.y2 = rect_src_ptr->y2 + 1; } // Version with xdst, ydst (absolute positioning) //rect_i rdst(xdst, ydst, xdst + rsrc.x2 - rsrc.x1, ydst + rsrc.y2 - rsrc.y1); // Version with dx, dy (relative positioning) rect_i rdst(rsrc.x1 + dx, rsrc.y1 + dy, rsrc.x2 + dx, rsrc.y2 + dy); rect_i rc = clip_rect_area(rdst, rsrc, src.width(), src.height()); if(rc.x2 > 0) { int incy = 1; if(rdst.y1 > rsrc.y1) { rsrc.y1 += rc.y2 - 1; rdst.y1 += rc.y2 - 1; incy = -1; } while(rc.y2 > 0) { typename SrcPixelFormatRenderer::row_data rw = src.row(rsrc.y1); if(rw.ptr) { int x1src = rsrc.x1; int x1dst = rdst.x1; int len = rc.x2; if(rw.x1 > x1src) { x1dst += rw.x1 - x1src; len -= rw.x1 - x1src; x1src = rw.x1; } if(len > 0) { if(x1src + len-1 > rw.x2) { len -= x1src + len - rw.x2 - 1; } if(len > 0) { m_ren->blend_from(src, x1dst, rdst.y1, x1src, rsrc.y1, len, cover); } } } rdst.y1 += incy; rsrc.y1 += incy; --rc.y2; } } } //-------------------------------------------------------------------- template void blend_from_color(const SrcPixelFormatRenderer& src, const color_type& color, const rect_i* rect_src_ptr = 0, int dx = 0, int dy = 0, cover_type cover = agg::cover_full) { rect_i rsrc(0, 0, src.width(), src.height()); if(rect_src_ptr) { rsrc.x1 = rect_src_ptr->x1; rsrc.y1 = rect_src_ptr->y1; rsrc.x2 = rect_src_ptr->x2 + 1; rsrc.y2 = rect_src_ptr->y2 + 1; } // Version with xdst, ydst (absolute positioning) //rect_i rdst(xdst, ydst, xdst + rsrc.x2 - rsrc.x1, ydst + rsrc.y2 - rsrc.y1); // Version with dx, dy (relative positioning) rect_i rdst(rsrc.x1 + dx, rsrc.y1 + dy, rsrc.x2 + dx, rsrc.y2 + dy); rect_i rc = clip_rect_area(rdst, rsrc, src.width(), src.height()); if(rc.x2 > 0) { int incy = 1; if(rdst.y1 > rsrc.y1) { rsrc.y1 += rc.y2 - 1; rdst.y1 += rc.y2 - 1; incy = -1; } while(rc.y2 > 0) { typename SrcPixelFormatRenderer::row_data rw = src.row(rsrc.y1); if(rw.ptr) { int x1src = rsrc.x1; int x1dst = rdst.x1; int len = rc.x2; if(rw.x1 > x1src) { x1dst += rw.x1 - x1src; len -= rw.x1 - x1src; x1src = rw.x1; } if(len > 0) { if(x1src + len-1 > rw.x2) { len -= x1src + len - rw.x2 - 1; } if(len > 0) { m_ren->blend_from_color(src, color, x1dst, rdst.y1, x1src, rsrc.y1, len, cover); } } } rdst.y1 += incy; rsrc.y1 += incy; --rc.y2; } } } //-------------------------------------------------------------------- template void blend_from_lut(const SrcPixelFormatRenderer& src, const color_type* color_lut, const rect_i* rect_src_ptr = 0, int dx = 0, int dy = 0, cover_type cover = agg::cover_full) { rect_i rsrc(0, 0, src.width(), src.height()); if(rect_src_ptr) { rsrc.x1 = rect_src_ptr->x1; rsrc.y1 = rect_src_ptr->y1; rsrc.x2 = rect_src_ptr->x2 + 1; rsrc.y2 = rect_src_ptr->y2 + 1; } // Version with xdst, ydst (absolute positioning) //rect_i rdst(xdst, ydst, xdst + rsrc.x2 - rsrc.x1, ydst + rsrc.y2 - rsrc.y1); // Version with dx, dy (relative positioning) rect_i rdst(rsrc.x1 + dx, rsrc.y1 + dy, rsrc.x2 + dx, rsrc.y2 + dy); rect_i rc = clip_rect_area(rdst, rsrc, src.width(), src.height()); if(rc.x2 > 0) { int incy = 1; if(rdst.y1 > rsrc.y1) { rsrc.y1 += rc.y2 - 1; rdst.y1 += rc.y2 - 1; incy = -1; } while(rc.y2 > 0) { typename SrcPixelFormatRenderer::row_data rw = src.row(rsrc.y1); if(rw.ptr) { int x1src = rsrc.x1; int x1dst = rdst.x1; int len = rc.x2; if(rw.x1 > x1src) { x1dst += rw.x1 - x1src; len -= rw.x1 - x1src; x1src = rw.x1; } if(len > 0) { if(x1src + len-1 > rw.x2) { len -= x1src + len - rw.x2 - 1; } if(len > 0) { m_ren->blend_from_lut(src, color_lut, x1dst, rdst.y1, x1src, rsrc.y1, len, cover); } } } rdst.y1 += incy; rsrc.y1 += incy; --rc.y2; } } } private: pixfmt_type* m_ren; rect_i m_clip_box; }; } #endif mapnik-3.0.9/deps/agg/include/agg_renderer_markers.h000066400000000000000000001062671262555547000224660ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class renderer_markers // //---------------------------------------------------------------------------- #ifndef AGG_RENDERER_MARKERS_INCLUDED #define AGG_RENDERER_MARKERS_INCLUDED #include "agg_basics.h" #include "agg_renderer_primitives.h" namespace agg { //---------------------------------------------------------------marker_e enum marker_e { marker_square, marker_diamond, marker_circle, marker_crossed_circle, marker_semiellipse_left, marker_semiellipse_right, marker_semiellipse_up, marker_semiellipse_down, marker_triangle_left, marker_triangle_right, marker_triangle_up, marker_triangle_down, marker_four_rays, marker_cross, marker_x, marker_dash, marker_dot, marker_pixel, end_of_markers }; //--------------------------------------------------------renderer_markers template class renderer_markers : public renderer_primitives { public: typedef renderer_primitives base_type; typedef BaseRenderer base_ren_type; typedef typename base_ren_type::color_type color_type; //-------------------------------------------------------------------- renderer_markers(base_ren_type& rbuf) : base_type(rbuf) {} //-------------------------------------------------------------------- bool visible(int x, int y, int r) const { rect_i rc(x-r, y-r, x+y, y+r); return rc.clip(base_type::ren().bounding_clip_box()); } //-------------------------------------------------------------------- void square(int x, int y, int r) { if(visible(x, y, r)) { if(r) base_type::outlined_rectangle(x-r, y-r, x+r, y+r); else base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } //-------------------------------------------------------------------- void diamond(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int dy = -r; int dx = 0; do { base_type::ren().blend_pixel(x - dx, y + dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dx, y + dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dx, y - dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dx, y - dy, base_type::line_color(), cover_full); if(dx) { base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full); base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full); } ++dy; ++dx; } while(dy <= 0); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void circle(int x, int y, int r) { if(visible(x, y, r)) { if(r) base_type::outlined_ellipse(x, y, r, r); else base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } //-------------------------------------------------------------------- void crossed_circle(int x, int y, int r) { if(visible(x, y, r)) { if(r) { base_type::outlined_ellipse(x, y, r, r); int r6 = r + (r >> 1); if(r <= 2) r6++; r >>= 1; base_type::ren().blend_hline(x-r6, y, x-r, base_type::line_color(), cover_full); base_type::ren().blend_hline(x+r, y, x+r6, base_type::line_color(), cover_full); base_type::ren().blend_vline(x, y-r6, y-r, base_type::line_color(), cover_full); base_type::ren().blend_vline(x, y+r, y+r6, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //------------------------------------------------------------------------ void semiellipse_left(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int r8 = r * 4 / 5; int dy = -r; int dx = 0; ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8); do { dx += ei.dx(); dy += ei.dy(); base_type::ren().blend_pixel(x + dy, y + dx, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dy, y - dx, base_type::line_color(), cover_full); if(ei.dy() && dx) { base_type::ren().blend_vline(x+dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full); } ++ei; } while(dy < r8); base_type::ren().blend_vline(x+dy, y-dx, y+dx, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void semiellipse_right(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int r8 = r * 4 / 5; int dy = -r; int dx = 0; ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8); do { dx += ei.dx(); dy += ei.dy(); base_type::ren().blend_pixel(x - dy, y + dx, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dy, y - dx, base_type::line_color(), cover_full); if(ei.dy() && dx) { base_type::ren().blend_vline(x-dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full); } ++ei; } while(dy < r8); base_type::ren().blend_vline(x-dy, y-dx, y+dx, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void semiellipse_up(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int r8 = r * 4 / 5; int dy = -r; int dx = 0; ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8); do { dx += ei.dx(); dy += ei.dy(); base_type::ren().blend_pixel(x + dx, y - dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dx, y - dy, base_type::line_color(), cover_full); if(ei.dy() && dx) { base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full); } ++ei; } while(dy < r8); base_type::ren().blend_hline(x-dx, y-dy-1, x+dx, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void semiellipse_down(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int r8 = r * 4 / 5; int dy = -r; int dx = 0; ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8); do { dx += ei.dx(); dy += ei.dy(); base_type::ren().blend_pixel(x + dx, y + dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dx, y + dy, base_type::line_color(), cover_full); if(ei.dy() && dx) { base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full); } ++ei; } while(dy < r8); base_type::ren().blend_hline(x-dx, y+dy+1, x+dx, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void triangle_left(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int dy = -r; int dx = 0; int flip = 0; int r6 = r * 3 / 5; do { base_type::ren().blend_pixel(x + dy, y - dx, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dy, y + dx, base_type::line_color(), cover_full); if(dx) { base_type::ren().blend_vline(x+dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full); } ++dy; dx += flip; flip ^= 1; } while(dy < r6); base_type::ren().blend_vline(x+dy, y-dx, y+dx, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void triangle_right(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int dy = -r; int dx = 0; int flip = 0; int r6 = r * 3 / 5; do { base_type::ren().blend_pixel(x - dy, y - dx, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dy, y + dx, base_type::line_color(), cover_full); if(dx) { base_type::ren().blend_vline(x-dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full); } ++dy; dx += flip; flip ^= 1; } while(dy < r6); base_type::ren().blend_vline(x-dy, y-dx, y+dx, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void triangle_up(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int dy = -r; int dx = 0; int flip = 0; int r6 = r * 3 / 5; do { base_type::ren().blend_pixel(x - dx, y - dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dx, y - dy, base_type::line_color(), cover_full); if(dx) { base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full); } ++dy; dx += flip; flip ^= 1; } while(dy < r6); base_type::ren().blend_hline(x-dx, y-dy, x+dx, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void triangle_down(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int dy = -r; int dx = 0; int flip = 0; int r6 = r * 3 / 5; do { base_type::ren().blend_pixel(x - dx, y + dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dx, y + dy, base_type::line_color(), cover_full); if(dx) { base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full); } ++dy; dx += flip; flip ^= 1; } while(dy < r6); base_type::ren().blend_hline(x-dx, y+dy, x+dx, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void four_rays(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int dy = -r; int dx = 0; int flip = 0; int r3 = -(r / 3); do { base_type::ren().blend_pixel(x - dx, y + dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dx, y + dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dx, y - dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dx, y - dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dy, y - dx, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dy, y + dx, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dy, y - dx, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dy, y + dx, base_type::line_color(), cover_full); if(dx) { base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full); base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full); base_type::ren().blend_vline(x+dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full); base_type::ren().blend_vline(x-dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full); } ++dy; dx += flip; flip ^= 1; } while(dy <= r3); base_type::solid_rectangle(x+r3+1, y+r3+1, x-r3-1, y-r3-1); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void cross(int x, int y, int r) { if(visible(x, y, r)) { if(r) { base_type::ren().blend_vline(x, y-r, y+r, base_type::line_color(), cover_full); base_type::ren().blend_hline(x-r, y, x+r, base_type::line_color(), cover_full); } else { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } } //-------------------------------------------------------------------- void xing(int x, int y, int r) { if(visible(x, y, r)) { if(r) { int dy = -r * 7 / 10; do { base_type::ren().blend_pixel(x + dy, y + dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dy, y + dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x + dy, y - dy, base_type::line_color(), cover_full); base_type::ren().blend_pixel(x - dy, y - dy, base_type::line_color(), cover_full); ++dy; } while(dy < 0); } base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } //-------------------------------------------------------------------- void dash(int x, int y, int r) { if(visible(x, y, r)) { if(r) base_type::ren().blend_hline(x-r, y, x+r, base_type::line_color(), cover_full); else base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } //-------------------------------------------------------------------- void dot(int x, int y, int r) { if(visible(x, y, r)) { if(r) base_type::solid_ellipse(x, y, r, r); else base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } } //-------------------------------------------------------------------- void pixel(int x, int y, int) { base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full); } //-------------------------------------------------------------------- void marker(int x, int y, int r, marker_e type) { switch(type) { case marker_square: square(x, y, r); break; case marker_diamond: diamond(x, y, r); break; case marker_circle: circle(x, y, r); break; case marker_crossed_circle: crossed_circle(x, y, r); break; case marker_semiellipse_left: semiellipse_left(x, y, r); break; case marker_semiellipse_right: semiellipse_right(x, y, r); break; case marker_semiellipse_up: semiellipse_up(x, y, r); break; case marker_semiellipse_down: semiellipse_down(x, y, r); break; case marker_triangle_left: triangle_left(x, y, r); break; case marker_triangle_right: triangle_right(x, y, r); break; case marker_triangle_up: triangle_up(x, y, r); break; case marker_triangle_down: triangle_down(x, y, r); break; case marker_four_rays: four_rays(x, y, r); break; case marker_cross: cross(x, y, r); break; case marker_x: xing(x, y, r); break; case marker_dash: dash(x, y, r); break; case marker_dot: dot(x, y, r); break; case marker_pixel: pixel(x, y, r); break; } } //-------------------------------------------------------------------- template void markers(int n, const T* x, const T* y, T r, marker_e type) { if(n <= 0) return; if(r == 0) { do { base_type::ren().blend_pixel(int(*x), int(*y), base_type::fill_color(), cover_full); ++x; ++y; } while(--n); return; } switch(type) { case marker_square: do { square (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_diamond: do { diamond (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_circle: do { circle (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_crossed_circle: do { crossed_circle (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_semiellipse_left: do { semiellipse_left (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_semiellipse_right: do { semiellipse_right(int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_semiellipse_up: do { semiellipse_up (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_semiellipse_down: do { semiellipse_down (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_triangle_left: do { triangle_left (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_triangle_right: do { triangle_right (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_triangle_up: do { triangle_up (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_triangle_down: do { triangle_down (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_four_rays: do { four_rays (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_cross: do { cross (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_x: do { xing (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_dash: do { dash (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_dot: do { dot (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; case marker_pixel: do { pixel (int(*x), int(*y), int(r)); ++x; ++y; } while(--n); break; } } //-------------------------------------------------------------------- template void markers(int n, const T* x, const T* y, const T* r, marker_e type) { if(n <= 0) return; switch(type) { case marker_square: do { square (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_diamond: do { diamond (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_circle: do { circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_crossed_circle: do { crossed_circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_semiellipse_left: do { semiellipse_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_semiellipse_right: do { semiellipse_right(int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_semiellipse_up: do { semiellipse_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_semiellipse_down: do { semiellipse_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_triangle_left: do { triangle_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_triangle_right: do { triangle_right (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_triangle_up: do { triangle_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_triangle_down: do { triangle_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_four_rays: do { four_rays (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_cross: do { cross (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_x: do { xing (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_dash: do { dash (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_dot: do { dot (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; case marker_pixel: do { pixel (int(*x), int(*y), int(*r)); ++x; ++y; ++r; } while(--n); break; } } //-------------------------------------------------------------------- template void markers(int n, const T* x, const T* y, const T* r, const color_type* fc, marker_e type) { if(n <= 0) return; switch(type) { case marker_square: do { base_type::fill_color(*fc); square (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_diamond: do { base_type::fill_color(*fc); diamond (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_circle: do { base_type::fill_color(*fc); circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_crossed_circle: do { base_type::fill_color(*fc); crossed_circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_semiellipse_left: do { base_type::fill_color(*fc); semiellipse_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_semiellipse_right: do { base_type::fill_color(*fc); semiellipse_right(int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_semiellipse_up: do { base_type::fill_color(*fc); semiellipse_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_semiellipse_down: do { base_type::fill_color(*fc); semiellipse_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_triangle_left: do { base_type::fill_color(*fc); triangle_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_triangle_right: do { base_type::fill_color(*fc); triangle_right (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_triangle_up: do { base_type::fill_color(*fc); triangle_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_triangle_down: do { base_type::fill_color(*fc); triangle_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_four_rays: do { base_type::fill_color(*fc); four_rays (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_cross: do { base_type::fill_color(*fc); cross (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_x: do { base_type::fill_color(*fc); xing (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_dash: do { base_type::fill_color(*fc); dash (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_dot: do { base_type::fill_color(*fc); dot (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; case marker_pixel: do { base_type::fill_color(*fc); pixel (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; } while(--n); break; } } //-------------------------------------------------------------------- template void markers(int n, const T* x, const T* y, const T* r, const color_type* fc, const color_type* lc, marker_e type) { if(n <= 0) return; switch(type) { case marker_square: do { base_type::fill_color(*fc); base_type::line_color(*lc); square (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_diamond: do { base_type::fill_color(*fc); base_type::line_color(*lc); diamond (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_circle: do { base_type::fill_color(*fc); base_type::line_color(*lc); circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_crossed_circle: do { base_type::fill_color(*fc); base_type::line_color(*lc); crossed_circle (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_semiellipse_left: do { base_type::fill_color(*fc); base_type::line_color(*lc); semiellipse_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_semiellipse_right: do { base_type::fill_color(*fc); base_type::line_color(*lc); semiellipse_right(int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_semiellipse_up: do { base_type::fill_color(*fc); base_type::line_color(*lc); semiellipse_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_semiellipse_down: do { base_type::fill_color(*fc); base_type::line_color(*lc); semiellipse_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_triangle_left: do { base_type::fill_color(*fc); base_type::line_color(*lc); triangle_left (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_triangle_right: do { base_type::fill_color(*fc); base_type::line_color(*lc); triangle_right (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_triangle_up: do { base_type::fill_color(*fc); base_type::line_color(*lc); triangle_up (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_triangle_down: do { base_type::fill_color(*fc); base_type::line_color(*lc); triangle_down (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_four_rays: do { base_type::fill_color(*fc); base_type::line_color(*lc); four_rays (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_cross: do { base_type::fill_color(*fc); base_type::line_color(*lc); cross (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_x: do { base_type::fill_color(*fc); base_type::line_color(*lc); xing (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_dash: do { base_type::fill_color(*fc); base_type::line_color(*lc); dash (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_dot: do { base_type::fill_color(*fc); base_type::line_color(*lc); dot (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; case marker_pixel: do { base_type::fill_color(*fc); base_type::line_color(*lc); pixel (int(*x), int(*y), int(*r)); ++x; ++y; ++r; ++fc; ++lc; } while(--n); break; } } }; } #endif mapnik-3.0.9/deps/agg/include/agg_renderer_mclip.h000066400000000000000000000270031262555547000221140ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class renderer_mclip // //---------------------------------------------------------------------------- #ifndef AGG_RENDERER_MCLIP_INCLUDED #define AGG_RENDERER_MCLIP_INCLUDED #include "agg_basics.h" #include "agg_array.h" #include "agg_renderer_base.h" namespace agg { //----------------------------------------------------------renderer_mclip template class renderer_mclip { public: typedef PixelFormat pixfmt_type; typedef typename pixfmt_type::color_type color_type; typedef typename pixfmt_type::row_data row_data; typedef renderer_base base_ren_type; //-------------------------------------------------------------------- explicit renderer_mclip(pixfmt_type& pixf) : m_ren(pixf), m_curr_cb(0), m_bounds(m_ren.xmin(), m_ren.ymin(), m_ren.xmax(), m_ren.ymax()) {} void attach(pixfmt_type& pixf) { m_ren.attach(pixf); reset_clipping(true); } //-------------------------------------------------------------------- const pixfmt_type& ren() const { return m_ren.ren(); } pixfmt_type& ren() { return m_ren.ren(); } //-------------------------------------------------------------------- unsigned width() const { return m_ren.width(); } unsigned height() const { return m_ren.height(); } //-------------------------------------------------------------------- const rect_i& clip_box() const { return m_ren.clip_box(); } int xmin() const { return m_ren.xmin(); } int ymin() const { return m_ren.ymin(); } int xmax() const { return m_ren.xmax(); } int ymax() const { return m_ren.ymax(); } //-------------------------------------------------------------------- const rect_i& bounding_clip_box() const { return m_bounds; } int bounding_xmin() const { return m_bounds.x1; } int bounding_ymin() const { return m_bounds.y1; } int bounding_xmax() const { return m_bounds.x2; } int bounding_ymax() const { return m_bounds.y2; } //-------------------------------------------------------------------- void first_clip_box() { m_curr_cb = 0; if(m_clip.size()) { const rect_i& cb = m_clip[0]; m_ren.clip_box_naked(cb.x1, cb.y1, cb.x2, cb.y2); } } //-------------------------------------------------------------------- bool next_clip_box() { if(++m_curr_cb < m_clip.size()) { const rect_i& cb = m_clip[m_curr_cb]; m_ren.clip_box_naked(cb.x1, cb.y1, cb.x2, cb.y2); return true; } return false; } //-------------------------------------------------------------------- void reset_clipping(bool visibility) { m_ren.reset_clipping(visibility); m_clip.remove_all(); m_curr_cb = 0; m_bounds = m_ren.clip_box(); } //-------------------------------------------------------------------- void add_clip_box(int x1, int y1, int x2, int y2) { rect_i cb(x1, y1, x2, y2); cb.normalize(); if(cb.clip(rect_i(0, 0, width() - 1, height() - 1))) { m_clip.add(cb); if(cb.x1 < m_bounds.x1) m_bounds.x1 = cb.x1; if(cb.y1 < m_bounds.y1) m_bounds.y1 = cb.y1; if(cb.x2 > m_bounds.x2) m_bounds.x2 = cb.x2; if(cb.y2 > m_bounds.y2) m_bounds.y2 = cb.y2; } } //-------------------------------------------------------------------- void clear(const color_type& c) { m_ren.clear(c); } //-------------------------------------------------------------------- void copy_pixel(int x, int y, const color_type& c) { first_clip_box(); do { if(m_ren.inbox(x, y)) { m_ren.ren().copy_pixel(x, y, c); break; } } while(next_clip_box()); } //-------------------------------------------------------------------- void blend_pixel(int x, int y, const color_type& c, cover_type cover) { first_clip_box(); do { if(m_ren.inbox(x, y)) { m_ren.ren().blend_pixel(x, y, c, cover); break; } } while(next_clip_box()); } //-------------------------------------------------------------------- color_type pixel(int x, int y) const { first_clip_box(); do { if(m_ren.inbox(x, y)) { return m_ren.ren().pixel(x, y); } } while(next_clip_box()); return color_type::no_color(); } //-------------------------------------------------------------------- void copy_hline(int x1, int y, int x2, const color_type& c) { first_clip_box(); do { m_ren.copy_hline(x1, y, x2, c); } while(next_clip_box()); } //-------------------------------------------------------------------- void copy_vline(int x, int y1, int y2, const color_type& c) { first_clip_box(); do { m_ren.copy_vline(x, y1, y2, c); } while(next_clip_box()); } //-------------------------------------------------------------------- void blend_hline(int x1, int y, int x2, const color_type& c, cover_type cover) { first_clip_box(); do { m_ren.blend_hline(x1, y, x2, c, cover); } while(next_clip_box()); } //-------------------------------------------------------------------- void blend_vline(int x, int y1, int y2, const color_type& c, cover_type cover) { first_clip_box(); do { m_ren.blend_vline(x, y1, y2, c, cover); } while(next_clip_box()); } //-------------------------------------------------------------------- void copy_bar(int x1, int y1, int x2, int y2, const color_type& c) { first_clip_box(); do { m_ren.copy_bar(x1, y1, x2, y2, c); } while(next_clip_box()); } //-------------------------------------------------------------------- void blend_bar(int x1, int y1, int x2, int y2, const color_type& c, cover_type cover) { first_clip_box(); do { m_ren.blend_bar(x1, y1, x2, y2, c, cover); } while(next_clip_box()); } //-------------------------------------------------------------------- void blend_solid_hspan(int x, int y, int len, const color_type& c, const cover_type* covers) { first_clip_box(); do { m_ren.blend_solid_hspan(x, y, len, c, covers); } while(next_clip_box()); } //-------------------------------------------------------------------- void blend_solid_vspan(int x, int y, int len, const color_type& c, const cover_type* covers) { first_clip_box(); do { m_ren.blend_solid_vspan(x, y, len, c, covers); } while(next_clip_box()); } //-------------------------------------------------------------------- void copy_color_hspan(int x, int y, int len, const color_type* colors) { first_clip_box(); do { m_ren.copy_color_hspan(x, y, len, colors); } while(next_clip_box()); } //-------------------------------------------------------------------- void blend_color_hspan(int x, int y, int len, const color_type* colors, const cover_type* covers, cover_type cover = cover_full) { first_clip_box(); do { m_ren.blend_color_hspan(x, y, len, colors, covers, cover); } while(next_clip_box()); } //-------------------------------------------------------------------- void blend_color_vspan(int x, int y, int len, const color_type* colors, const cover_type* covers, cover_type cover = cover_full) { first_clip_box(); do { m_ren.blend_color_vspan(x, y, len, colors, covers, cover); } while(next_clip_box()); } //-------------------------------------------------------------------- void copy_from(const rendering_buffer& from, const rect_i* rc=0, int x_to=0, int y_to=0) { first_clip_box(); do { m_ren.copy_from(from, rc, x_to, y_to); } while(next_clip_box()); } //-------------------------------------------------------------------- template void blend_from(const SrcPixelFormatRenderer& src, const rect_i* rect_src_ptr = 0, int dx = 0, int dy = 0, cover_type cover = cover_full) { first_clip_box(); do { m_ren.blend_from(src, rect_src_ptr, dx, dy, cover); } while(next_clip_box()); } private: renderer_mclip(const renderer_mclip&); const renderer_mclip& operator = (const renderer_mclip&); base_ren_type m_ren; pod_bvector m_clip; unsigned m_curr_cb; rect_i m_bounds; }; } #endif mapnik-3.0.9/deps/agg/include/agg_renderer_outline_aa.h000066400000000000000000001746201262555547000231400ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_RENDERER_OUTLINE_AA_INCLUDED #define AGG_RENDERER_OUTLINE_AA_INCLUDED #include "agg_array.h" #include "agg_math.h" #include "agg_line_aa_basics.h" #include "agg_dda_line.h" #include "agg_ellipse_bresenham.h" #include "agg_renderer_base.h" #include "agg_gamma_functions.h" #include "agg_clip_liang_barsky.h" namespace agg { //===================================================distance_interpolator0 class distance_interpolator0 { public: //--------------------------------------------------------------------- distance_interpolator0() {} distance_interpolator0(int x1, int y1, int x2, int y2, int x, int y) : m_dx(line_mr(x2) - line_mr(x1)), m_dy(line_mr(y2) - line_mr(y1)), m_dist((line_mr(x + line_subpixel_scale/2) - line_mr(x2)) * m_dy - (line_mr(y + line_subpixel_scale/2) - line_mr(y2)) * m_dx) { m_dx <<= line_mr_subpixel_shift; m_dy <<= line_mr_subpixel_shift; } //--------------------------------------------------------------------- void inc_x() { m_dist += m_dy; } int dist() const { return m_dist; } private: //--------------------------------------------------------------------- int m_dx; int m_dy; int m_dist; }; //==================================================distance_interpolator00 class distance_interpolator00 { public: //--------------------------------------------------------------------- distance_interpolator00() {} distance_interpolator00(int xc, int yc, int x1, int y1, int x2, int y2, int x, int y) : m_dx1(line_mr(x1) - line_mr(xc)), m_dy1(line_mr(y1) - line_mr(yc)), m_dx2(line_mr(x2) - line_mr(xc)), m_dy2(line_mr(y2) - line_mr(yc)), m_dist1((line_mr(x + line_subpixel_scale/2) - line_mr(x1)) * m_dy1 - (line_mr(y + line_subpixel_scale/2) - line_mr(y1)) * m_dx1), m_dist2((line_mr(x + line_subpixel_scale/2) - line_mr(x2)) * m_dy2 - (line_mr(y + line_subpixel_scale/2) - line_mr(y2)) * m_dx2) { m_dx1 <<= line_mr_subpixel_shift; m_dy1 <<= line_mr_subpixel_shift; m_dx2 <<= line_mr_subpixel_shift; m_dy2 <<= line_mr_subpixel_shift; } //--------------------------------------------------------------------- void inc_x() { m_dist1 += m_dy1; m_dist2 += m_dy2; } int dist1() const { return m_dist1; } int dist2() const { return m_dist2; } private: //--------------------------------------------------------------------- int m_dx1; int m_dy1; int m_dx2; int m_dy2; int m_dist1; int m_dist2; }; //===================================================distance_interpolator1 class distance_interpolator1 { public: //--------------------------------------------------------------------- distance_interpolator1() {} distance_interpolator1(int x1, int y1, int x2, int y2, int x, int y) : m_dx(x2 - x1), m_dy(y2 - y1), m_dist(iround(double(x + line_subpixel_scale/2 - x2) * double(m_dy) - double(y + line_subpixel_scale/2 - y2) * double(m_dx))) { m_dx <<= line_subpixel_shift; m_dy <<= line_subpixel_shift; } //--------------------------------------------------------------------- void inc_x() { m_dist += m_dy; } void dec_x() { m_dist -= m_dy; } void inc_y() { m_dist -= m_dx; } void dec_y() { m_dist += m_dx; } //--------------------------------------------------------------------- void inc_x(int dy) { m_dist += m_dy; if(dy > 0) m_dist -= m_dx; if(dy < 0) m_dist += m_dx; } //--------------------------------------------------------------------- void dec_x(int dy) { m_dist -= m_dy; if(dy > 0) m_dist -= m_dx; if(dy < 0) m_dist += m_dx; } //--------------------------------------------------------------------- void inc_y(int dx) { m_dist -= m_dx; if(dx > 0) m_dist += m_dy; if(dx < 0) m_dist -= m_dy; } void dec_y(int dx) //--------------------------------------------------------------------- { m_dist += m_dx; if(dx > 0) m_dist += m_dy; if(dx < 0) m_dist -= m_dy; } //--------------------------------------------------------------------- int dist() const { return m_dist; } int dx() const { return m_dx; } int dy() const { return m_dy; } private: //--------------------------------------------------------------------- int m_dx; int m_dy; int m_dist; }; //===================================================distance_interpolator2 class distance_interpolator2 { public: //--------------------------------------------------------------------- distance_interpolator2() {} distance_interpolator2(int x1, int y1, int x2, int y2, int sx, int sy, int x, int y) : m_dx(x2 - x1), m_dy(y2 - y1), m_dx_start(line_mr(sx) - line_mr(x1)), m_dy_start(line_mr(sy) - line_mr(y1)), m_dist(iround(double(x + line_subpixel_scale/2 - x2) * double(m_dy) - double(y + line_subpixel_scale/2 - y2) * double(m_dx))), m_dist_start((line_mr(x + line_subpixel_scale/2) - line_mr(sx)) * m_dy_start - (line_mr(y + line_subpixel_scale/2) - line_mr(sy)) * m_dx_start) { m_dx <<= line_subpixel_shift; m_dy <<= line_subpixel_shift; m_dx_start <<= line_mr_subpixel_shift; m_dy_start <<= line_mr_subpixel_shift; } distance_interpolator2(int x1, int y1, int x2, int y2, int ex, int ey, int x, int y, int) : m_dx(x2 - x1), m_dy(y2 - y1), m_dx_start(line_mr(ex) - line_mr(x2)), m_dy_start(line_mr(ey) - line_mr(y2)), m_dist(iround(double(x + line_subpixel_scale/2 - x2) * double(m_dy) - double(y + line_subpixel_scale/2 - y2) * double(m_dx))), m_dist_start((line_mr(x + line_subpixel_scale/2) - line_mr(ex)) * m_dy_start - (line_mr(y + line_subpixel_scale/2) - line_mr(ey)) * m_dx_start) { m_dx <<= line_subpixel_shift; m_dy <<= line_subpixel_shift; m_dx_start <<= line_mr_subpixel_shift; m_dy_start <<= line_mr_subpixel_shift; } //--------------------------------------------------------------------- void inc_x() { m_dist += m_dy; m_dist_start += m_dy_start; } void dec_x() { m_dist -= m_dy; m_dist_start -= m_dy_start; } void inc_y() { m_dist -= m_dx; m_dist_start -= m_dx_start; } void dec_y() { m_dist += m_dx; m_dist_start += m_dx_start; } //--------------------------------------------------------------------- void inc_x(int dy) { m_dist += m_dy; m_dist_start += m_dy_start; if(dy > 0) { m_dist -= m_dx; m_dist_start -= m_dx_start; } if(dy < 0) { m_dist += m_dx; m_dist_start += m_dx_start; } } //--------------------------------------------------------------------- void dec_x(int dy) { m_dist -= m_dy; m_dist_start -= m_dy_start; if(dy > 0) { m_dist -= m_dx; m_dist_start -= m_dx_start; } if(dy < 0) { m_dist += m_dx; m_dist_start += m_dx_start; } } //--------------------------------------------------------------------- void inc_y(int dx) { m_dist -= m_dx; m_dist_start -= m_dx_start; if(dx > 0) { m_dist += m_dy; m_dist_start += m_dy_start; } if(dx < 0) { m_dist -= m_dy; m_dist_start -= m_dy_start; } } //--------------------------------------------------------------------- void dec_y(int dx) { m_dist += m_dx; m_dist_start += m_dx_start; if(dx > 0) { m_dist += m_dy; m_dist_start += m_dy_start; } if(dx < 0) { m_dist -= m_dy; m_dist_start -= m_dy_start; } } //--------------------------------------------------------------------- int dist() const { return m_dist; } int dist_start() const { return m_dist_start; } int dist_end() const { return m_dist_start; } //--------------------------------------------------------------------- int dx() const { return m_dx; } int dy() const { return m_dy; } int dx_start() const { return m_dx_start; } int dy_start() const { return m_dy_start; } int dx_end() const { return m_dx_start; } int dy_end() const { return m_dy_start; } private: //--------------------------------------------------------------------- int m_dx; int m_dy; int m_dx_start; int m_dy_start; int m_dist; int m_dist_start; }; //===================================================distance_interpolator3 class distance_interpolator3 { public: //--------------------------------------------------------------------- distance_interpolator3() {} distance_interpolator3(int x1, int y1, int x2, int y2, int sx, int sy, int ex, int ey, int x, int y) : m_dx(x2 - x1), m_dy(y2 - y1), m_dx_start(line_mr(sx) - line_mr(x1)), m_dy_start(line_mr(sy) - line_mr(y1)), m_dx_end(line_mr(ex) - line_mr(x2)), m_dy_end(line_mr(ey) - line_mr(y2)), m_dist(iround(double(x + line_subpixel_scale/2 - x2) * double(m_dy) - double(y + line_subpixel_scale/2 - y2) * double(m_dx))), m_dist_start((line_mr(x + line_subpixel_scale/2) - line_mr(sx)) * m_dy_start - (line_mr(y + line_subpixel_scale/2) - line_mr(sy)) * m_dx_start), m_dist_end((line_mr(x + line_subpixel_scale/2) - line_mr(ex)) * m_dy_end - (line_mr(y + line_subpixel_scale/2) - line_mr(ey)) * m_dx_end) { m_dx <<= line_subpixel_shift; m_dy <<= line_subpixel_shift; m_dx_start <<= line_mr_subpixel_shift; m_dy_start <<= line_mr_subpixel_shift; m_dx_end <<= line_mr_subpixel_shift; m_dy_end <<= line_mr_subpixel_shift; } //--------------------------------------------------------------------- void inc_x() { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_end += m_dy_end; } void dec_x() { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_end -= m_dy_end; } void inc_y() { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_end -= m_dx_end; } void dec_y() { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_end += m_dx_end; } //--------------------------------------------------------------------- void inc_x(int dy) { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_end += m_dy_end; if(dy > 0) { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_end -= m_dx_end; } if(dy < 0) { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_end += m_dx_end; } } //--------------------------------------------------------------------- void dec_x(int dy) { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_end -= m_dy_end; if(dy > 0) { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_end -= m_dx_end; } if(dy < 0) { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_end += m_dx_end; } } //--------------------------------------------------------------------- void inc_y(int dx) { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_end -= m_dx_end; if(dx > 0) { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_end += m_dy_end; } if(dx < 0) { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_end -= m_dy_end; } } //--------------------------------------------------------------------- void dec_y(int dx) { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_end += m_dx_end; if(dx > 0) { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_end += m_dy_end; } if(dx < 0) { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_end -= m_dy_end; } } //--------------------------------------------------------------------- int dist() const { return m_dist; } int dist_start() const { return m_dist_start; } int dist_end() const { return m_dist_end; } //--------------------------------------------------------------------- int dx() const { return m_dx; } int dy() const { return m_dy; } int dx_start() const { return m_dx_start; } int dy_start() const { return m_dy_start; } int dx_end() const { return m_dx_end; } int dy_end() const { return m_dy_end; } private: //--------------------------------------------------------------------- int m_dx; int m_dy; int m_dx_start; int m_dy_start; int m_dx_end; int m_dy_end; int m_dist; int m_dist_start; int m_dist_end; }; //================================================line_interpolator_aa_base template class line_interpolator_aa_base { public: typedef Renderer renderer_type; typedef typename Renderer::color_type color_type; //--------------------------------------------------------------------- enum max_half_width_e { max_half_width = 64 }; //--------------------------------------------------------------------- line_interpolator_aa_base(renderer_type& ren, const line_parameters& lp) : m_lp(&lp), m_li(lp.vertical ? line_dbl_hr(lp.x2 - lp.x1) : line_dbl_hr(lp.y2 - lp.y1), lp.vertical ? std::abs(lp.y2 - lp.y1) : std::abs(lp.x2 - lp.x1) + 1), m_ren(ren), m_len((lp.vertical == (lp.inc > 0)) ? -lp.len : lp.len), m_x(lp.x1 >> line_subpixel_shift), m_y(lp.y1 >> line_subpixel_shift), m_old_x(m_x), m_old_y(m_y), m_count((lp.vertical ? std::abs((lp.y2 >> line_subpixel_shift) - m_y) : std::abs((lp.x2 >> line_subpixel_shift) - m_x))), m_width(ren.subpixel_width()), //m_max_extent(m_width >> (line_subpixel_shift - 2)), m_max_extent((m_width + line_subpixel_mask) >> line_subpixel_shift), m_step(0) { agg::dda2_line_interpolator li(0, lp.vertical ? (lp.dy << agg::line_subpixel_shift) : (lp.dx << agg::line_subpixel_shift), lp.len); unsigned i; int stop = m_width + line_subpixel_scale * 2; for(i = 0; i < max_half_width; ++i) { m_dist[i] = li.y(); if(m_dist[i] >= stop) break; ++li; } m_dist[i++] = 0x7FFF0000; } //--------------------------------------------------------------------- template int step_hor_base(DI& di) { ++m_li; m_x += m_lp->inc; m_y = (m_lp->y1 + m_li.y()) >> line_subpixel_shift; if(m_lp->inc > 0) di.inc_x(m_y - m_old_y); else di.dec_x(m_y - m_old_y); m_old_y = m_y; return di.dist() / m_len; } //--------------------------------------------------------------------- template int step_ver_base(DI& di) { ++m_li; m_y += m_lp->inc; m_x = (m_lp->x1 + m_li.y()) >> line_subpixel_shift; if(m_lp->inc > 0) di.inc_y(m_x - m_old_x); else di.dec_y(m_x - m_old_x); m_old_x = m_x; return di.dist() / m_len; } //--------------------------------------------------------------------- bool vertical() const { return m_lp->vertical; } int width() const { return m_width; } int count() const { return m_count; } private: line_interpolator_aa_base(const line_interpolator_aa_base&); const line_interpolator_aa_base& operator = (const line_interpolator_aa_base&); protected: const line_parameters* m_lp; dda2_line_interpolator m_li; renderer_type& m_ren; int m_len; int m_x; int m_y; int m_old_x; int m_old_y; int m_count; int m_width; int m_max_extent; int m_step; int m_dist[max_half_width + 1]; cover_type m_covers[max_half_width * 2 + 4]; }; //====================================================line_interpolator_aa0 template class line_interpolator_aa0 : public line_interpolator_aa_base { public: typedef Renderer renderer_type; typedef typename Renderer::color_type color_type; typedef line_interpolator_aa_base base_type; //--------------------------------------------------------------------- line_interpolator_aa0(renderer_type& ren, const line_parameters& lp) : line_interpolator_aa_base(ren, lp), m_di(lp.x1, lp.y1, lp.x2, lp.y2, lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask) { base_type::m_li.adjust_forward(); } //--------------------------------------------------------------------- bool step_hor() { int dist; int dy; int s1 = base_type::step_hor_base(m_di); cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2; cover_type* p1 = p0; *p1++ = (cover_type)base_type::m_ren.cover(s1); dy = 1; while((dist = base_type::m_dist[dy] - s1) <= base_type::m_width) { *p1++ = (cover_type)base_type::m_ren.cover(dist); ++dy; } dy = 1; while((dist = base_type::m_dist[dy] + s1) <= base_type::m_width) { *--p0 = (cover_type)base_type::m_ren.cover(dist); ++dy; } base_type::m_ren.blend_solid_vspan(base_type::m_x, base_type::m_y - dy + 1, unsigned(p1 - p0), p0); return ++base_type::m_step < base_type::m_count; } //--------------------------------------------------------------------- bool step_ver() { int dist; int dx; int s1 = base_type::step_ver_base(m_di); cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2; cover_type* p1 = p0; *p1++ = (cover_type)base_type::m_ren.cover(s1); dx = 1; while((dist = base_type::m_dist[dx] - s1) <= base_type::m_width) { *p1++ = (cover_type)base_type::m_ren.cover(dist); ++dx; } dx = 1; while((dist = base_type::m_dist[dx] + s1) <= base_type::m_width) { *--p0 = (cover_type)base_type::m_ren.cover(dist); ++dx; } base_type::m_ren.blend_solid_hspan(base_type::m_x - dx + 1, base_type::m_y, unsigned(p1 - p0), p0); return ++base_type::m_step < base_type::m_count; } private: line_interpolator_aa0(const line_interpolator_aa0&); const line_interpolator_aa0& operator = (const line_interpolator_aa0&); //--------------------------------------------------------------------- distance_interpolator1 m_di; }; //====================================================line_interpolator_aa1 template class line_interpolator_aa1 : public line_interpolator_aa_base { public: typedef Renderer renderer_type; typedef typename Renderer::color_type color_type; typedef line_interpolator_aa_base base_type; //--------------------------------------------------------------------- line_interpolator_aa1(renderer_type& ren, const line_parameters& lp, int sx, int sy) : line_interpolator_aa_base(ren, lp), m_di(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask) { int dist1_start; int dist2_start; int npix = 1; if(lp.vertical) { do { --base_type::m_li; base_type::m_y -= lp.inc; base_type::m_x = (base_type::m_lp->x1 + base_type::m_li.y()) >> line_subpixel_shift; if(lp.inc > 0) m_di.dec_y(base_type::m_x - base_type::m_old_x); else m_di.inc_y(base_type::m_x - base_type::m_old_x); base_type::m_old_x = base_type::m_x; dist1_start = dist2_start = m_di.dist_start(); int dx = 0; if(dist1_start < 0) ++npix; do { dist1_start += m_di.dy_start(); dist2_start -= m_di.dy_start(); if(dist1_start < 0) ++npix; if(dist2_start < 0) ++npix; ++dx; } while(base_type::m_dist[dx] <= base_type::m_width); --base_type::m_step; if(npix == 0) break; npix = 0; } while(base_type::m_step >= -base_type::m_max_extent); } else { do { --base_type::m_li; base_type::m_x -= lp.inc; base_type::m_y = (base_type::m_lp->y1 + base_type::m_li.y()) >> line_subpixel_shift; if(lp.inc > 0) m_di.dec_x(base_type::m_y - base_type::m_old_y); else m_di.inc_x(base_type::m_y - base_type::m_old_y); base_type::m_old_y = base_type::m_y; dist1_start = dist2_start = m_di.dist_start(); int dy = 0; if(dist1_start < 0) ++npix; do { dist1_start -= m_di.dx_start(); dist2_start += m_di.dx_start(); if(dist1_start < 0) ++npix; if(dist2_start < 0) ++npix; ++dy; } while(base_type::m_dist[dy] <= base_type::m_width); --base_type::m_step; if(npix == 0) break; npix = 0; } while(base_type::m_step >= -base_type::m_max_extent); } base_type::m_li.adjust_forward(); } //--------------------------------------------------------------------- bool step_hor() { int dist_start; int dist; int dy; int s1 = base_type::step_hor_base(m_di); dist_start = m_di.dist_start(); cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2; cover_type* p1 = p0; *p1 = 0; if(dist_start <= 0) { *p1 = (cover_type)base_type::m_ren.cover(s1); } ++p1; dy = 1; while((dist = base_type::m_dist[dy] - s1) <= base_type::m_width) { dist_start -= m_di.dx_start(); *p1 = 0; if(dist_start <= 0) { *p1 = (cover_type)base_type::m_ren.cover(dist); } ++p1; ++dy; } dy = 1; dist_start = m_di.dist_start(); while((dist = base_type::m_dist[dy] + s1) <= base_type::m_width) { dist_start += m_di.dx_start(); *--p0 = 0; if(dist_start <= 0) { *p0 = (cover_type)base_type::m_ren.cover(dist); } ++dy; } base_type::m_ren.blend_solid_vspan(base_type::m_x, base_type::m_y - dy + 1, unsigned(p1 - p0), p0); return ++base_type::m_step < base_type::m_count; } //--------------------------------------------------------------------- bool step_ver() { int dist_start; int dist; int dx; int s1 = base_type::step_ver_base(m_di); cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2; cover_type* p1 = p0; dist_start = m_di.dist_start(); *p1 = 0; if(dist_start <= 0) { *p1 = (cover_type)base_type::m_ren.cover(s1); } ++p1; dx = 1; while((dist = base_type::m_dist[dx] - s1) <= base_type::m_width) { dist_start += m_di.dy_start(); *p1 = 0; if(dist_start <= 0) { *p1 = (cover_type)base_type::m_ren.cover(dist); } ++p1; ++dx; } dx = 1; dist_start = m_di.dist_start(); while((dist = base_type::m_dist[dx] + s1) <= base_type::m_width) { dist_start -= m_di.dy_start(); *--p0 = 0; if(dist_start <= 0) { *p0 = (cover_type)base_type::m_ren.cover(dist); } ++dx; } base_type::m_ren.blend_solid_hspan(base_type::m_x - dx + 1, base_type::m_y, unsigned(p1 - p0), p0); return ++base_type::m_step < base_type::m_count; } private: line_interpolator_aa1(const line_interpolator_aa1&); const line_interpolator_aa1& operator = (const line_interpolator_aa1&); //--------------------------------------------------------------------- distance_interpolator2 m_di; }; //====================================================line_interpolator_aa2 template class line_interpolator_aa2 : public line_interpolator_aa_base { public: typedef Renderer renderer_type; typedef typename Renderer::color_type color_type; typedef line_interpolator_aa_base base_type; //--------------------------------------------------------------------- line_interpolator_aa2(renderer_type& ren, const line_parameters& lp, int ex, int ey) : line_interpolator_aa_base(ren, lp), m_di(lp.x1, lp.y1, lp.x2, lp.y2, ex, ey, lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask, 0) { base_type::m_li.adjust_forward(); base_type::m_step -= base_type::m_max_extent; } //--------------------------------------------------------------------- bool step_hor() { int dist_end; int dist; int dy; int s1 = base_type::step_hor_base(m_di); cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2; cover_type* p1 = p0; dist_end = m_di.dist_end(); int npix = 0; *p1 = 0; if(dist_end > 0) { *p1 = (cover_type)base_type::m_ren.cover(s1); ++npix; } ++p1; dy = 1; while((dist = base_type::m_dist[dy] - s1) <= base_type::m_width) { dist_end -= m_di.dx_end(); *p1 = 0; if(dist_end > 0) { *p1 = (cover_type)base_type::m_ren.cover(dist); ++npix; } ++p1; ++dy; } dy = 1; dist_end = m_di.dist_end(); while((dist = base_type::m_dist[dy] + s1) <= base_type::m_width) { dist_end += m_di.dx_end(); *--p0 = 0; if(dist_end > 0) { *p0 = (cover_type)base_type::m_ren.cover(dist); ++npix; } ++dy; } base_type::m_ren.blend_solid_vspan(base_type::m_x, base_type::m_y - dy + 1, unsigned(p1 - p0), p0); return npix && ++base_type::m_step < base_type::m_count; } //--------------------------------------------------------------------- bool step_ver() { int dist_end; int dist; int dx; int s1 = base_type::step_ver_base(m_di); cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2; cover_type* p1 = p0; dist_end = m_di.dist_end(); int npix = 0; *p1 = 0; if(dist_end > 0) { *p1 = (cover_type)base_type::m_ren.cover(s1); ++npix; } ++p1; dx = 1; while((dist = base_type::m_dist[dx] - s1) <= base_type::m_width) { dist_end += m_di.dy_end(); *p1 = 0; if(dist_end > 0) { *p1 = (cover_type)base_type::m_ren.cover(dist); ++npix; } ++p1; ++dx; } dx = 1; dist_end = m_di.dist_end(); while((dist = base_type::m_dist[dx] + s1) <= base_type::m_width) { dist_end -= m_di.dy_end(); *--p0 = 0; if(dist_end > 0) { *p0 = (cover_type)base_type::m_ren.cover(dist); ++npix; } ++dx; } base_type::m_ren.blend_solid_hspan(base_type::m_x - dx + 1, base_type::m_y, unsigned(p1 - p0), p0); return npix && ++base_type::m_step < base_type::m_count; } private: line_interpolator_aa2(const line_interpolator_aa2&); const line_interpolator_aa2& operator = (const line_interpolator_aa2&); //--------------------------------------------------------------------- distance_interpolator2 m_di; }; //====================================================line_interpolator_aa3 template class line_interpolator_aa3 : public line_interpolator_aa_base { public: typedef Renderer renderer_type; typedef typename Renderer::color_type color_type; typedef line_interpolator_aa_base base_type; //--------------------------------------------------------------------- line_interpolator_aa3(renderer_type& ren, const line_parameters& lp, int sx, int sy, int ex, int ey) : line_interpolator_aa_base(ren, lp), m_di(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey, lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask) { int dist1_start; int dist2_start; int npix = 1; if(lp.vertical) { do { --base_type::m_li; base_type::m_y -= lp.inc; base_type::m_x = (base_type::m_lp->x1 + base_type::m_li.y()) >> line_subpixel_shift; if(lp.inc > 0) m_di.dec_y(base_type::m_x - base_type::m_old_x); else m_di.inc_y(base_type::m_x - base_type::m_old_x); base_type::m_old_x = base_type::m_x; dist1_start = dist2_start = m_di.dist_start(); int dx = 0; if(dist1_start < 0) ++npix; do { dist1_start += m_di.dy_start(); dist2_start -= m_di.dy_start(); if(dist1_start < 0) ++npix; if(dist2_start < 0) ++npix; ++dx; } while(base_type::m_dist[dx] <= base_type::m_width); if(npix == 0) break; npix = 0; } while(--base_type::m_step >= -base_type::m_max_extent); } else { do { --base_type::m_li; base_type::m_x -= lp.inc; base_type::m_y = (base_type::m_lp->y1 + base_type::m_li.y()) >> line_subpixel_shift; if(lp.inc > 0) m_di.dec_x(base_type::m_y - base_type::m_old_y); else m_di.inc_x(base_type::m_y - base_type::m_old_y); base_type::m_old_y = base_type::m_y; dist1_start = dist2_start = m_di.dist_start(); int dy = 0; if(dist1_start < 0) ++npix; do { dist1_start -= m_di.dx_start(); dist2_start += m_di.dx_start(); if(dist1_start < 0) ++npix; if(dist2_start < 0) ++npix; ++dy; } while(base_type::m_dist[dy] <= base_type::m_width); if(npix == 0) break; npix = 0; } while(--base_type::m_step >= -base_type::m_max_extent); } base_type::m_li.adjust_forward(); base_type::m_step -= base_type::m_max_extent; } //--------------------------------------------------------------------- bool step_hor() { int dist_start; int dist_end; int dist; int dy; int s1 = base_type::step_hor_base(m_di); cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2; cover_type* p1 = p0; dist_start = m_di.dist_start(); dist_end = m_di.dist_end(); int npix = 0; *p1 = 0; if(dist_end > 0) { if(dist_start <= 0) { *p1 = (cover_type)base_type::m_ren.cover(s1); } ++npix; } ++p1; dy = 1; while((dist = base_type::m_dist[dy] - s1) <= base_type::m_width) { dist_start -= m_di.dx_start(); dist_end -= m_di.dx_end(); *p1 = 0; if(dist_end > 0 && dist_start <= 0) { *p1 = (cover_type)base_type::m_ren.cover(dist); ++npix; } ++p1; ++dy; } dy = 1; dist_start = m_di.dist_start(); dist_end = m_di.dist_end(); while((dist = base_type::m_dist[dy] + s1) <= base_type::m_width) { dist_start += m_di.dx_start(); dist_end += m_di.dx_end(); *--p0 = 0; if(dist_end > 0 && dist_start <= 0) { *p0 = (cover_type)base_type::m_ren.cover(dist); ++npix; } ++dy; } base_type::m_ren.blend_solid_vspan(base_type::m_x, base_type::m_y - dy + 1, unsigned(p1 - p0), p0); return npix && ++base_type::m_step < base_type::m_count; } //--------------------------------------------------------------------- bool step_ver() { int dist_start; int dist_end; int dist; int dx; int s1 = base_type::step_ver_base(m_di); cover_type* p0 = base_type::m_covers + base_type::max_half_width + 2; cover_type* p1 = p0; dist_start = m_di.dist_start(); dist_end = m_di.dist_end(); int npix = 0; *p1 = 0; if(dist_end > 0) { if(dist_start <= 0) { *p1 = (cover_type)base_type::m_ren.cover(s1); } ++npix; } ++p1; dx = 1; while((dist = base_type::m_dist[dx] - s1) <= base_type::m_width) { dist_start += m_di.dy_start(); dist_end += m_di.dy_end(); *p1 = 0; if(dist_end > 0 && dist_start <= 0) { *p1 = (cover_type)base_type::m_ren.cover(dist); ++npix; } ++p1; ++dx; } dx = 1; dist_start = m_di.dist_start(); dist_end = m_di.dist_end(); while((dist = base_type::m_dist[dx] + s1) <= base_type::m_width) { dist_start -= m_di.dy_start(); dist_end -= m_di.dy_end(); *--p0 = 0; if(dist_end > 0 && dist_start <= 0) { *p0 = (cover_type)base_type::m_ren.cover(dist); ++npix; } ++dx; } base_type::m_ren.blend_solid_hspan(base_type::m_x - dx + 1, base_type::m_y, unsigned(p1 - p0), p0); return npix && ++base_type::m_step < base_type::m_count; } private: line_interpolator_aa3(const line_interpolator_aa3&); const line_interpolator_aa3& operator = (const line_interpolator_aa3&); //--------------------------------------------------------------------- distance_interpolator3 m_di; }; //==========================================================line_profile_aa // // See Implementation agg_line_profile_aa.cpp // class line_profile_aa { public: //--------------------------------------------------------------------- typedef int8u value_type; enum subpixel_scale_e { subpixel_shift = line_subpixel_shift, subpixel_scale = 1 << subpixel_shift, subpixel_mask = subpixel_scale - 1 }; enum aa_scale_e { aa_shift = 8, aa_scale = 1 << aa_shift, aa_mask = aa_scale - 1 }; //--------------------------------------------------------------------- line_profile_aa() : m_subpixel_width(0), m_min_width(1.0), m_smoother_width(1.0) { int i; for(i = 0; i < aa_scale; i++) m_gamma[i] = (value_type)i; } //--------------------------------------------------------------------- template line_profile_aa(double w, const GammaF& gamma_function) : m_subpixel_width(0), m_min_width(1.0), m_smoother_width(1.0) { gamma(gamma_function); width(w); } //--------------------------------------------------------------------- void min_width(double w) { m_min_width = w; } void smoother_width(double w) { m_smoother_width = w; } //--------------------------------------------------------------------- template void gamma(const GammaF& gamma_function) { int i; for(i = 0; i < aa_scale; i++) { m_gamma[i] = value_type( uround(gamma_function(double(i) / aa_mask) * aa_mask)); } } void width(double w); unsigned profile_size() const { return m_profile.size(); } int subpixel_width() const { return m_subpixel_width; } //--------------------------------------------------------------------- double min_width() const { return m_min_width; } double smoother_width() const { return m_smoother_width; } //--------------------------------------------------------------------- value_type value(int dist) const { return m_profile[dist + subpixel_scale*2]; } private: line_profile_aa(const line_profile_aa&); const line_profile_aa& operator = (const line_profile_aa&); value_type* profile(double w); void set(double center_width, double smoother_width); //--------------------------------------------------------------------- pod_array m_profile; value_type m_gamma[aa_scale]; int m_subpixel_width; double m_min_width; double m_smoother_width; }; //======================================================renderer_outline_aa template class renderer_outline_aa { public: //--------------------------------------------------------------------- typedef BaseRenderer base_ren_type; typedef renderer_outline_aa self_type; typedef typename base_ren_type::color_type color_type; //--------------------------------------------------------------------- renderer_outline_aa(base_ren_type& ren, const line_profile_aa& prof) : m_ren(&ren), m_profile(&prof), m_clip_box(0,0,0,0), m_clipping(false) {} void attach(base_ren_type& ren) { m_ren = &ren; } //--------------------------------------------------------------------- void color(const color_type& c) { m_color = c; } const color_type& color() const { return m_color; } //--------------------------------------------------------------------- void profile(const line_profile_aa& prof) { m_profile = &prof; } const line_profile_aa& profile() const { return *m_profile; } // clang error: binding of reference to type 'agg::line_profile_aa' to a value of type // 'const agg::line_profile_aa' drops qualifiers //line_profile_aa& profile() { return *m_profile; } //--------------------------------------------------------------------- int subpixel_width() const { return m_profile->subpixel_width(); } //--------------------------------------------------------------------- void reset_clipping() { m_clipping = false; } void clip_box(double x1, double y1, double x2, double y2) { m_clip_box.x1 = line_coord_sat::conv(x1); m_clip_box.y1 = line_coord_sat::conv(y1); m_clip_box.x2 = line_coord_sat::conv(x2); m_clip_box.y2 = line_coord_sat::conv(y2); m_clipping = true; } //--------------------------------------------------------------------- int cover(int d) const { return m_profile->value(d); } //------------------------------------------------------------------------- void blend_solid_hspan(int x, int y, unsigned len, const cover_type* covers) { m_ren->blend_solid_hspan(x, y, len, m_color, covers); } //------------------------------------------------------------------------- void blend_solid_vspan(int x, int y, unsigned len, const cover_type* covers) { m_ren->blend_solid_vspan(x, y, len, m_color, covers); } //------------------------------------------------------------------------- static bool accurate_join_only() { return false; } //------------------------------------------------------------------------- template void semidot_hline(Cmp cmp, int xc1, int yc1, int xc2, int yc2, int x1, int y1, int x2) { cover_type covers[line_interpolator_aa_base::max_half_width * 2 + 4]; cover_type* p0 = covers; cover_type* p1 = covers; int x = x1 << line_subpixel_shift; int y = y1 << line_subpixel_shift; int w = subpixel_width(); distance_interpolator0 di(xc1, yc1, xc2, yc2, x, y); x += line_subpixel_scale/2; y += line_subpixel_scale/2; int x0 = x1; int dx = x - xc1; int dy = y - yc1; do { int d = int(fast_sqrt(dx*dx + dy*dy)); *p1 = 0; if(cmp(di.dist()) && d <= w) { *p1 = (cover_type)cover(d); } ++p1; dx += line_subpixel_scale; di.inc_x(); } while(++x1 <= x2); m_ren->blend_solid_hspan(x0, y1, unsigned(p1 - p0), color(), p0); } //------------------------------------------------------------------------- template void semidot(Cmp cmp, int xc1, int yc1, int xc2, int yc2) { if(m_clipping && clipping_flags(xc1, yc1, m_clip_box)) return; int r = ((subpixel_width() + line_subpixel_mask) >> line_subpixel_shift); if(r < 1) r = 1; ellipse_bresenham_interpolator ei(r, r); int dx = 0; int dy = -r; int dy0 = dy; int dx0 = dx; int x = xc1 >> line_subpixel_shift; int y = yc1 >> line_subpixel_shift; do { dx += ei.dx(); dy += ei.dy(); if(dy != dy0) { semidot_hline(cmp, xc1, yc1, xc2, yc2, x-dx0, y+dy0, x+dx0); semidot_hline(cmp, xc1, yc1, xc2, yc2, x-dx0, y-dy0, x+dx0); } dx0 = dx; dy0 = dy; ++ei; } while(dy < 0); semidot_hline(cmp, xc1, yc1, xc2, yc2, x-dx0, y+dy0, x+dx0); } //------------------------------------------------------------------------- void pie_hline(int xc, int yc, int xp1, int yp1, int xp2, int yp2, int xh1, int yh1, int xh2) { if(m_clipping && clipping_flags(xc, yc, m_clip_box)) return; cover_type covers[line_interpolator_aa_base::max_half_width * 2 + 4]; cover_type* p0 = covers; cover_type* p1 = covers; int x = xh1 << line_subpixel_shift; int y = yh1 << line_subpixel_shift; int w = subpixel_width(); distance_interpolator00 di(xc, yc, xp1, yp1, xp2, yp2, x, y); x += line_subpixel_scale/2; y += line_subpixel_scale/2; int xh0 = xh1; int dx = x - xc; int dy = y - yc; do { int d = int(fast_sqrt(dx*dx + dy*dy)); *p1 = 0; if(di.dist1() <= 0 && di.dist2() > 0 && d <= w) { *p1 = (cover_type)cover(d); } ++p1; dx += line_subpixel_scale; di.inc_x(); } while(++xh1 <= xh2); m_ren->blend_solid_hspan(xh0, yh1, unsigned(p1 - p0), color(), p0); } //------------------------------------------------------------------------- void pie(int xc, int yc, int x1, int y1, int x2, int y2) { int r = ((subpixel_width() + line_subpixel_mask) >> line_subpixel_shift); if(r < 1) r = 1; ellipse_bresenham_interpolator ei(r, r); int dx = 0; int dy = -r; int dy0 = dy; int dx0 = dx; int x = xc >> line_subpixel_shift; int y = yc >> line_subpixel_shift; do { dx += ei.dx(); dy += ei.dy(); if(dy != dy0) { pie_hline(xc, yc, x1, y1, x2, y2, x-dx0, y+dy0, x+dx0); pie_hline(xc, yc, x1, y1, x2, y2, x-dx0, y-dy0, x+dx0); } dx0 = dx; dy0 = dy; ++ei; } while(dy < 0); pie_hline(xc, yc, x1, y1, x2, y2, x-dx0, y+dy0, x+dx0); } //------------------------------------------------------------------------- void line0_no_clip(const line_parameters& lp) { if(lp.len > line_max_length) { line_parameters lp1, lp2; lp.divide(lp1, lp2); line0_no_clip(lp1); line0_no_clip(lp2); return; } line_interpolator_aa0 li(*this, lp); if(li.count()) { if(li.vertical()) { while(li.step_ver()) ; } else { while(li.step_hor()) ; } } } //------------------------------------------------------------------------- void line0(const line_parameters& lp) { if(m_clipping) { int x1 = lp.x1; int y1 = lp.y1; int x2 = lp.x2; int y2 = lp.y2; unsigned flags = clip_line_segment(&x1, &y1, &x2, &y2, m_clip_box); if((flags & 4) == 0) { if(flags) { line_parameters lp2(x1, y1, x2, y2, uround(calc_distance(x1, y1, x2, y2))); line0_no_clip(lp2); } else { line0_no_clip(lp); } } } else { line0_no_clip(lp); } } //------------------------------------------------------------------------- void line1_no_clip(const line_parameters& lp, int sx, int sy) { if(lp.len > line_max_length) { line_parameters lp1, lp2; lp.divide(lp1, lp2); line1_no_clip(lp1, (lp.x1 + sx) >> 1, (lp.y1 + sy) >> 1); line1_no_clip(lp2, lp1.x2 + (lp1.y2 - lp1.y1), lp1.y2 - (lp1.x2 - lp1.x1)); return; } fix_degenerate_bisectrix_start(lp, &sx, &sy); line_interpolator_aa1 li(*this, lp, sx, sy); if(li.vertical()) { while(li.step_ver()) ; } else { while(li.step_hor()) ; } } //------------------------------------------------------------------------- void line1(const line_parameters& lp, int sx, int sy) { if(m_clipping) { int x1 = lp.x1; int y1 = lp.y1; int x2 = lp.x2; int y2 = lp.y2; unsigned flags = clip_line_segment(&x1, &y1, &x2, &y2, m_clip_box); if((flags & 4) == 0) { if(flags) { line_parameters lp2(x1, y1, x2, y2, uround(calc_distance(x1, y1, x2, y2))); if(flags & 1) { sx = x1 + (y2 - y1); sy = y1 - (x2 - x1); } else { while(std::abs(sx - lp.x1) + std::abs(sy - lp.y1) > 1 + lp2.len) { sx = (lp.x1 + sx) >> 1; sy = (lp.y1 + sy) >> 1; } } line1_no_clip(lp2, sx, sy); } else { line1_no_clip(lp, sx, sy); } } } else { line1_no_clip(lp, sx, sy); } } //------------------------------------------------------------------------- void line2_no_clip(const line_parameters& lp, int ex, int ey) { if(lp.len > line_max_length) { line_parameters lp1, lp2; lp.divide(lp1, lp2); line2_no_clip(lp1, lp1.x2 + (lp1.y2 - lp1.y1), lp1.y2 - (lp1.x2 - lp1.x1)); line2_no_clip(lp2, (lp.x2 + ex) >> 1, (lp.y2 + ey) >> 1); return; } fix_degenerate_bisectrix_end(lp, &ex, &ey); line_interpolator_aa2 li(*this, lp, ex, ey); if(li.vertical()) { while(li.step_ver()) ; } else { while(li.step_hor()) ; } } //------------------------------------------------------------------------- void line2(const line_parameters& lp, int ex, int ey) { if(m_clipping) { int x1 = lp.x1; int y1 = lp.y1; int x2 = lp.x2; int y2 = lp.y2; unsigned flags = clip_line_segment(&x1, &y1, &x2, &y2, m_clip_box); if((flags & 4) == 0) { if(flags) { line_parameters lp2(x1, y1, x2, y2, uround(calc_distance(x1, y1, x2, y2))); if(flags & 2) { ex = x2 + (y2 - y1); ey = y2 - (x2 - x1); } else { while(std::abs(ex - lp.x2) + std::abs(ey - lp.y2) > 1 + lp2.len) { ex = (lp.x2 + ex) >> 1; ey = (lp.y2 + ey) >> 1; } } line2_no_clip(lp2, ex, ey); } else { line2_no_clip(lp, ex, ey); } } } else { line2_no_clip(lp, ex, ey); } } //------------------------------------------------------------------------- void line3_no_clip(const line_parameters& lp, int sx, int sy, int ex, int ey) { if(lp.len > line_max_length) { line_parameters lp1, lp2; lp.divide(lp1, lp2); int mx = lp1.x2 + (lp1.y2 - lp1.y1); int my = lp1.y2 - (lp1.x2 - lp1.x1); line3_no_clip(lp1, (lp.x1 + sx) >> 1, (lp.y1 + sy) >> 1, mx, my); line3_no_clip(lp2, mx, my, (lp.x2 + ex) >> 1, (lp.y2 + ey) >> 1); return; } fix_degenerate_bisectrix_start(lp, &sx, &sy); fix_degenerate_bisectrix_end(lp, &ex, &ey); line_interpolator_aa3 li(*this, lp, sx, sy, ex, ey); if(li.vertical()) { while(li.step_ver()) ; } else { while(li.step_hor()) ; } } //------------------------------------------------------------------------- void line3(const line_parameters& lp, int sx, int sy, int ex, int ey) { if(m_clipping) { int x1 = lp.x1; int y1 = lp.y1; int x2 = lp.x2; int y2 = lp.y2; unsigned flags = clip_line_segment(&x1, &y1, &x2, &y2, m_clip_box); if((flags & 4) == 0) { if(flags) { line_parameters lp2(x1, y1, x2, y2, uround(calc_distance(x1, y1, x2, y2))); if(flags & 1) { sx = x1 + (y2 - y1); sy = y1 - (x2 - x1); } else { while(std::abs(sx - lp.x1) + std::abs(sy - lp.y1) > 1 + lp2.len) { sx = (lp.x1 + sx) >> 1; sy = (lp.y1 + sy) >> 1; } } if(flags & 2) { ex = x2 + (y2 - y1); ey = y2 - (x2 - x1); } else { while(std::abs(ex - lp.x2) + std::abs(ey - lp.y2) > 1 + lp2.len) { ex = (lp.x2 + ex) >> 1; ey = (lp.y2 + ey) >> 1; } } line3_no_clip(lp2, sx, sy, ex, ey); } else { line3_no_clip(lp, sx, sy, ex, ey); } } } else { line3_no_clip(lp, sx, sy, ex, ey); } } private: base_ren_type* m_ren; const line_profile_aa* m_profile; color_type m_color; rect_i m_clip_box; bool m_clipping; }; } #endif mapnik-3.0.9/deps/agg/include/agg_renderer_outline_image.h000066400000000000000000001045011262555547000236300ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_RENDERER_OUTLINE_IMAGE_INCLUDED #define AGG_RENDERER_OUTLINE_IMAGE_INCLUDED #include "agg_array.h" #include "agg_math.h" #include "agg_line_aa_basics.h" #include "agg_dda_line.h" #include "agg_rendering_buffer.h" #include "agg_clip_liang_barsky.h" namespace agg { //========================================================line_image_scale template class line_image_scale { public: typedef typename Source::color_type color_type; line_image_scale(const Source& src, double height) : m_source(src), m_height(height), m_scale(src.height() / height) { } double width() const { return m_source.width(); } double height() const { return m_height; } color_type pixel(int x, int y) const { double src_y = (y + 0.5) * m_scale - 0.5; int h = m_source.height() - 1; int y1 = ufloor(src_y); int y2 = y1 + 1; color_type pix1 = (y1 < 0) ? color_type::no_color() : m_source.pixel(x, y1); color_type pix2 = (y2 > h) ? color_type::no_color() : m_source.pixel(x, y2); return pix1.gradient(pix2, src_y - y1); } private: line_image_scale(const line_image_scale&); const line_image_scale& operator = (const line_image_scale&); const Source& m_source; double m_height; double m_scale; }; //======================================================line_image_pattern template class line_image_pattern { public: typedef Filter filter_type; typedef typename filter_type::color_type color_type; //-------------------------------------------------------------------- line_image_pattern(const Filter& filter) : m_filter(&filter), m_dilation(filter.dilation() + 1), m_dilation_hr(m_dilation << line_subpixel_shift), m_data(), m_width(0), m_height(0), m_width_hr(0), m_half_height_hr(0), m_offset_y_hr(0) { } // Create //-------------------------------------------------------------------- template line_image_pattern(const Filter& filter, const Source& src) : m_filter(&filter), m_dilation(filter.dilation() + 1), m_dilation_hr(m_dilation << line_subpixel_shift), m_data(), m_width(0), m_height(0), m_width_hr(0), m_half_height_hr(0), m_offset_y_hr(0) { create(src); } // Create //-------------------------------------------------------------------- template void create(const Source& src) { m_height = uceil(src.height()); m_width = uceil(src.width()); m_width_hr = uround(src.width() * line_subpixel_scale); m_half_height_hr = uround(src.height() * line_subpixel_scale/2); m_offset_y_hr = m_dilation_hr + m_half_height_hr - line_subpixel_scale/2; m_half_height_hr += line_subpixel_scale/2; m_data.resize((m_width + m_dilation * 2) * (m_height + m_dilation * 2)); m_buf.attach(&m_data[0], m_width + m_dilation * 2, m_height + m_dilation * 2, m_width + m_dilation * 2); unsigned x, y; color_type* d1; color_type* d2; for(y = 0; y < m_height; y++) { d1 = m_buf.row_ptr(y + m_dilation) + m_dilation; for(x = 0; x < m_width; x++) { *d1++ = src.pixel(x, y); } } const color_type* s1; const color_type* s2; for(y = 0; y < m_dilation; y++) { //s1 = m_buf.row_ptr(m_height + m_dilation - 1) + m_dilation; //s2 = m_buf.row_ptr(m_dilation) + m_dilation; d1 = m_buf.row_ptr(m_dilation + m_height + y) + m_dilation; d2 = m_buf.row_ptr(m_dilation - y - 1) + m_dilation; for(x = 0; x < m_width; x++) { //*d1++ = color_type(*s1++, 0); //*d2++ = color_type(*s2++, 0); *d1++ = color_type::no_color(); *d2++ = color_type::no_color(); } } unsigned h = m_height + m_dilation * 2; for(y = 0; y < h; y++) { s1 = m_buf.row_ptr(y) + m_dilation; s2 = m_buf.row_ptr(y) + m_dilation + m_width; d1 = m_buf.row_ptr(y) + m_dilation + m_width; d2 = m_buf.row_ptr(y) + m_dilation; for(x = 0; x < m_dilation; x++) { *d1++ = *s1++; *--d2 = *--s2; } } } //-------------------------------------------------------------------- int pattern_width() const { return m_width_hr; } int line_width() const { return m_half_height_hr; } double width() const { return m_height; } //-------------------------------------------------------------------- void pixel(color_type* p, int x, int y) const { m_filter->pixel_high_res(m_buf.rows(), p, x % m_width_hr + m_dilation_hr, y + m_offset_y_hr); } //-------------------------------------------------------------------- const filter_type& filter() const { return *m_filter; } private: line_image_pattern(const line_image_pattern&); const line_image_pattern& operator = (const line_image_pattern&); protected: row_ptr_cache m_buf; const filter_type* m_filter; unsigned m_dilation; int m_dilation_hr; pod_array m_data; unsigned m_width; unsigned m_height; int m_width_hr; int m_half_height_hr; int m_offset_y_hr; }; //=================================================line_image_pattern_pow2 template class line_image_pattern_pow2 : public line_image_pattern { public: typedef Filter filter_type; typedef typename filter_type::color_type color_type; typedef line_image_pattern base_type; //-------------------------------------------------------------------- line_image_pattern_pow2(const Filter& filter) : line_image_pattern(filter), m_mask(line_subpixel_mask) {} //-------------------------------------------------------------------- template line_image_pattern_pow2(const Filter& filter, const Source& src) : line_image_pattern(filter), m_mask(line_subpixel_mask) { create(src); } //-------------------------------------------------------------------- template void create(const Source& src) { line_image_pattern::create(src); m_mask = 1; while(m_mask < base_type::m_width) { m_mask <<= 1; m_mask |= 1; } m_mask <<= line_subpixel_shift - 1; m_mask |= line_subpixel_mask; base_type::m_width_hr = m_mask + 1; } //-------------------------------------------------------------------- void pixel(color_type* p, int x, int y) const { base_type::m_filter->pixel_high_res( base_type::m_buf.rows(), p, (x & m_mask) + base_type::m_dilation_hr, y + base_type::m_offset_y_hr); } private: unsigned m_mask; }; //===================================================distance_interpolator4 class distance_interpolator4 { public: //--------------------------------------------------------------------- distance_interpolator4() {} distance_interpolator4(int x1, int y1, int x2, int y2, int sx, int sy, int ex, int ey, int len, double scale, int x, int y) : m_dx(x2 - x1), m_dy(y2 - y1), m_dx_start(line_mr(sx) - line_mr(x1)), m_dy_start(line_mr(sy) - line_mr(y1)), m_dx_end(line_mr(ex) - line_mr(x2)), m_dy_end(line_mr(ey) - line_mr(y2)), m_dist(iround(double(x + line_subpixel_scale/2 - x2) * double(m_dy) - double(y + line_subpixel_scale/2 - y2) * double(m_dx))), m_dist_start((line_mr(x + line_subpixel_scale/2) - line_mr(sx)) * m_dy_start - (line_mr(y + line_subpixel_scale/2) - line_mr(sy)) * m_dx_start), m_dist_end((line_mr(x + line_subpixel_scale/2) - line_mr(ex)) * m_dy_end - (line_mr(y + line_subpixel_scale/2) - line_mr(ey)) * m_dx_end), m_len(uround(len / scale)) { double d = len * scale; int dx = iround(((x2 - x1) << line_subpixel_shift) / d); int dy = iround(((y2 - y1) << line_subpixel_shift) / d); m_dx_pict = -dy; m_dy_pict = dx; m_dist_pict = ((x + line_subpixel_scale/2 - (x1 - dy)) * m_dy_pict - (y + line_subpixel_scale/2 - (y1 + dx)) * m_dx_pict) >> line_subpixel_shift; m_dx <<= line_subpixel_shift; m_dy <<= line_subpixel_shift; m_dx_start <<= line_mr_subpixel_shift; m_dy_start <<= line_mr_subpixel_shift; m_dx_end <<= line_mr_subpixel_shift; m_dy_end <<= line_mr_subpixel_shift; } //--------------------------------------------------------------------- void inc_x() { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_pict += m_dy_pict; m_dist_end += m_dy_end; } //--------------------------------------------------------------------- void dec_x() { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_pict -= m_dy_pict; m_dist_end -= m_dy_end; } //--------------------------------------------------------------------- void inc_y() { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_pict -= m_dx_pict; m_dist_end -= m_dx_end; } //--------------------------------------------------------------------- void dec_y() { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_pict += m_dx_pict; m_dist_end += m_dx_end; } //--------------------------------------------------------------------- void inc_x(int dy) { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_pict += m_dy_pict; m_dist_end += m_dy_end; if(dy > 0) { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_pict -= m_dx_pict; m_dist_end -= m_dx_end; } if(dy < 0) { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_pict += m_dx_pict; m_dist_end += m_dx_end; } } //--------------------------------------------------------------------- void dec_x(int dy) { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_pict -= m_dy_pict; m_dist_end -= m_dy_end; if(dy > 0) { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_pict -= m_dx_pict; m_dist_end -= m_dx_end; } if(dy < 0) { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_pict += m_dx_pict; m_dist_end += m_dx_end; } } //--------------------------------------------------------------------- void inc_y(int dx) { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_pict -= m_dx_pict; m_dist_end -= m_dx_end; if(dx > 0) { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_pict += m_dy_pict; m_dist_end += m_dy_end; } if(dx < 0) { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_pict -= m_dy_pict; m_dist_end -= m_dy_end; } } //--------------------------------------------------------------------- void dec_y(int dx) { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_pict += m_dx_pict; m_dist_end += m_dx_end; if(dx > 0) { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_pict += m_dy_pict; m_dist_end += m_dy_end; } if(dx < 0) { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_pict -= m_dy_pict; m_dist_end -= m_dy_end; } } //--------------------------------------------------------------------- int dist() const { return m_dist; } int dist_start() const { return m_dist_start; } int dist_pict() const { return m_dist_pict; } int dist_end() const { return m_dist_end; } //--------------------------------------------------------------------- int dx() const { return m_dx; } int dy() const { return m_dy; } int dx_start() const { return m_dx_start; } int dy_start() const { return m_dy_start; } int dx_pict() const { return m_dx_pict; } int dy_pict() const { return m_dy_pict; } int dx_end() const { return m_dx_end; } int dy_end() const { return m_dy_end; } int len() const { return m_len; } private: //--------------------------------------------------------------------- int m_dx; int m_dy; int m_dx_start; int m_dy_start; int m_dx_pict; int m_dy_pict; int m_dx_end; int m_dy_end; int m_dist; int m_dist_start; int m_dist_pict; int m_dist_end; int m_len; }; //==================================================line_interpolator_image template class line_interpolator_image { public: typedef Renderer renderer_type; typedef typename Renderer::color_type color_type; //--------------------------------------------------------------------- enum max_half_width_e { max_half_width = 64 }; //--------------------------------------------------------------------- line_interpolator_image(renderer_type& ren, const line_parameters& lp, int sx, int sy, int ex, int ey, int pattern_start, double scale_x) : m_lp(lp), m_li(lp.vertical ? line_dbl_hr(lp.x2 - lp.x1) : line_dbl_hr(lp.y2 - lp.y1), lp.vertical ? std::abs(lp.y2 - lp.y1) : std::abs(lp.x2 - lp.x1) + 1), m_di(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey, lp.len, scale_x, lp.x1 & ~line_subpixel_mask, lp.y1 & ~line_subpixel_mask), m_ren(ren), m_x(lp.x1 >> line_subpixel_shift), m_y(lp.y1 >> line_subpixel_shift), m_old_x(m_x), m_old_y(m_y), m_count((lp.vertical ? std::abs((lp.y2 >> line_subpixel_shift) - m_y) : std::abs((lp.x2 >> line_subpixel_shift) - m_x))), m_width(ren.subpixel_width()), //m_max_extent(m_width >> (line_subpixel_shift - 2)), m_max_extent((m_width + line_subpixel_scale) >> line_subpixel_shift), m_start(pattern_start + (m_max_extent + 2) * ren.pattern_width()), m_step(0) { agg::dda2_line_interpolator li(0, lp.vertical ? (lp.dy << agg::line_subpixel_shift) : (lp.dx << agg::line_subpixel_shift), lp.len); unsigned i; int stop = m_width + line_subpixel_scale * 2; for(i = 0; i < max_half_width; ++i) { m_dist_pos[i] = li.y(); if(m_dist_pos[i] >= stop) break; ++li; } m_dist_pos[i] = 0x7FFF0000; int dist1_start; int dist2_start; int npix = 1; if(lp.vertical) { do { --m_li; m_y -= lp.inc; m_x = (m_lp.x1 + m_li.y()) >> line_subpixel_shift; if(lp.inc > 0) m_di.dec_y(m_x - m_old_x); else m_di.inc_y(m_x - m_old_x); m_old_x = m_x; dist1_start = dist2_start = m_di.dist_start(); int dx = 0; if(dist1_start < 0) ++npix; do { dist1_start += m_di.dy_start(); dist2_start -= m_di.dy_start(); if(dist1_start < 0) ++npix; if(dist2_start < 0) ++npix; ++dx; } while(m_dist_pos[dx] <= m_width); if(npix == 0) break; npix = 0; } while(--m_step >= -m_max_extent); } else { do { --m_li; m_x -= lp.inc; m_y = (m_lp.y1 + m_li.y()) >> line_subpixel_shift; if(lp.inc > 0) m_di.dec_x(m_y - m_old_y); else m_di.inc_x(m_y - m_old_y); m_old_y = m_y; dist1_start = dist2_start = m_di.dist_start(); int dy = 0; if(dist1_start < 0) ++npix; do { dist1_start -= m_di.dx_start(); dist2_start += m_di.dx_start(); if(dist1_start < 0) ++npix; if(dist2_start < 0) ++npix; ++dy; } while(m_dist_pos[dy] <= m_width); if(npix == 0) break; npix = 0; } while(--m_step >= -m_max_extent); } m_li.adjust_forward(); m_step -= m_max_extent; } //--------------------------------------------------------------------- bool step_hor() { ++m_li; m_x += m_lp.inc; m_y = (m_lp.y1 + m_li.y()) >> line_subpixel_shift; if(m_lp.inc > 0) m_di.inc_x(m_y - m_old_y); else m_di.dec_x(m_y - m_old_y); m_old_y = m_y; int s1 = m_di.dist() / m_lp.len; int s2 = -s1; if(m_lp.inc < 0) s1 = -s1; int dist_start; int dist_pict; int dist_end; int dy; int dist; dist_start = m_di.dist_start(); dist_pict = m_di.dist_pict() + m_start; dist_end = m_di.dist_end(); color_type* p0 = m_colors + max_half_width + 2; color_type* p1 = p0; int npix = 0; p1->clear(); if(dist_end > 0) { if(dist_start <= 0) { m_ren.pixel(p1, dist_pict, s2); } ++npix; } ++p1; dy = 1; while((dist = m_dist_pos[dy]) - s1 <= m_width) { dist_start -= m_di.dx_start(); dist_pict -= m_di.dx_pict(); dist_end -= m_di.dx_end(); p1->clear(); if(dist_end > 0 && dist_start <= 0) { if(m_lp.inc > 0) dist = -dist; m_ren.pixel(p1, dist_pict, s2 - dist); ++npix; } ++p1; ++dy; } dy = 1; dist_start = m_di.dist_start(); dist_pict = m_di.dist_pict() + m_start; dist_end = m_di.dist_end(); while((dist = m_dist_pos[dy]) + s1 <= m_width) { dist_start += m_di.dx_start(); dist_pict += m_di.dx_pict(); dist_end += m_di.dx_end(); --p0; p0->clear(); if(dist_end > 0 && dist_start <= 0) { if(m_lp.inc > 0) dist = -dist; m_ren.pixel(p0, dist_pict, s2 + dist); ++npix; } ++dy; } m_ren.blend_color_vspan(m_x, m_y - dy + 1, unsigned(p1 - p0), p0); return npix && ++m_step < m_count; } //--------------------------------------------------------------------- bool step_ver() { ++m_li; m_y += m_lp.inc; m_x = (m_lp.x1 + m_li.y()) >> line_subpixel_shift; if(m_lp.inc > 0) m_di.inc_y(m_x - m_old_x); else m_di.dec_y(m_x - m_old_x); m_old_x = m_x; int s1 = m_di.dist() / m_lp.len; int s2 = -s1; if(m_lp.inc > 0) s1 = -s1; int dist_start; int dist_pict; int dist_end; int dist; int dx; dist_start = m_di.dist_start(); dist_pict = m_di.dist_pict() + m_start; dist_end = m_di.dist_end(); color_type* p0 = m_colors + max_half_width + 2; color_type* p1 = p0; int npix = 0; p1->clear(); if(dist_end > 0) { if(dist_start <= 0) { m_ren.pixel(p1, dist_pict, s2); } ++npix; } ++p1; dx = 1; while((dist = m_dist_pos[dx]) - s1 <= m_width) { dist_start += m_di.dy_start(); dist_pict += m_di.dy_pict(); dist_end += m_di.dy_end(); p1->clear(); if(dist_end > 0 && dist_start <= 0) { if(m_lp.inc > 0) dist = -dist; m_ren.pixel(p1, dist_pict, s2 + dist); ++npix; } ++p1; ++dx; } dx = 1; dist_start = m_di.dist_start(); dist_pict = m_di.dist_pict() + m_start; dist_end = m_di.dist_end(); while((dist = m_dist_pos[dx]) + s1 <= m_width) { dist_start -= m_di.dy_start(); dist_pict -= m_di.dy_pict(); dist_end -= m_di.dy_end(); --p0; p0->clear(); if(dist_end > 0 && dist_start <= 0) { if(m_lp.inc > 0) dist = -dist; m_ren.pixel(p0, dist_pict, s2 - dist); ++npix; } ++dx; } m_ren.blend_color_hspan(m_x - dx + 1, m_y, unsigned(p1 - p0), p0); return npix && ++m_step < m_count; } //--------------------------------------------------------------------- int pattern_end() const { return m_start + m_di.len(); } //--------------------------------------------------------------------- bool vertical() const { return m_lp.vertical; } int width() const { return m_width; } int count() const { return m_count; } private: line_interpolator_image(const line_interpolator_image&); const line_interpolator_image& operator = (const line_interpolator_image&); protected: const line_parameters& m_lp; dda2_line_interpolator m_li; distance_interpolator4 m_di; renderer_type& m_ren; int m_plen; int m_x; int m_y; int m_old_x; int m_old_y; int m_count; int m_width; int m_max_extent; int m_start; int m_step; int m_dist_pos[max_half_width + 1]; color_type m_colors[max_half_width * 2 + 4]; }; //===================================================renderer_outline_image template class renderer_outline_image { public: //--------------------------------------------------------------------- typedef BaseRenderer base_ren_type; typedef renderer_outline_image self_type; typedef typename base_ren_type::color_type color_type; typedef ImagePattern pattern_type; //--------------------------------------------------------------------- renderer_outline_image(base_ren_type& ren, const pattern_type& patt) : m_ren(&ren), m_pattern(&patt), m_start(0), m_scale_x(1.0), m_clip_box(0,0,0,0), m_clipping(false) {} void attach(base_ren_type& ren) { m_ren = &ren; } //--------------------------------------------------------------------- void pattern(const pattern_type& p) { m_pattern = &p; } const pattern_type& pattern() const { return *m_pattern; } //--------------------------------------------------------------------- void reset_clipping() { m_clipping = false; } void clip_box(double x1, double y1, double x2, double y2) { m_clip_box.x1 = line_coord_sat::conv(x1); m_clip_box.y1 = line_coord_sat::conv(y1); m_clip_box.x2 = line_coord_sat::conv(x2); m_clip_box.y2 = line_coord_sat::conv(y2); m_clipping = true; } //--------------------------------------------------------------------- void scale_x(double s) { m_scale_x = s; } double scale_x() const { return m_scale_x; } //--------------------------------------------------------------------- void start_x(double s) { m_start = iround(s * line_subpixel_scale); } double start_x() const { return double(m_start) / line_subpixel_scale; } //--------------------------------------------------------------------- int subpixel_width() const { return m_pattern->line_width(); } int pattern_width() const { return m_pattern->pattern_width(); } double width() const { return double(subpixel_width()) / line_subpixel_scale; } //------------------------------------------------------------------------- void pixel(color_type* p, int x, int y) const { m_pattern->pixel(p, x, y); } //------------------------------------------------------------------------- void blend_color_hspan(int x, int y, unsigned len, const color_type* colors) { m_ren->blend_color_hspan(x, y, len, colors, 0); } //------------------------------------------------------------------------- void blend_color_vspan(int x, int y, unsigned len, const color_type* colors) { m_ren->blend_color_vspan(x, y, len, colors, 0); } //------------------------------------------------------------------------- static bool accurate_join_only() { return true; } //------------------------------------------------------------------------- template void semidot(Cmp, int, int, int, int) { } //------------------------------------------------------------------------- void pie(int, int, int, int, int, int) { } //------------------------------------------------------------------------- void line0(const line_parameters&) { } //------------------------------------------------------------------------- void line1(const line_parameters&, int, int) { } //------------------------------------------------------------------------- void line2(const line_parameters&, int, int) { } //------------------------------------------------------------------------- void line3_no_clip(const line_parameters& lp, int sx, int sy, int ex, int ey) { if(lp.len > line_max_length) { line_parameters lp1, lp2; lp.divide(lp1, lp2); int mx = lp1.x2 + (lp1.y2 - lp1.y1); int my = lp1.y2 - (lp1.x2 - lp1.x1); line3_no_clip(lp1, (lp.x1 + sx) >> 1, (lp.y1 + sy) >> 1, mx, my); line3_no_clip(lp2, mx, my, (lp.x2 + ex) >> 1, (lp.y2 + ey) >> 1); return; } fix_degenerate_bisectrix_start(lp, &sx, &sy); fix_degenerate_bisectrix_end(lp, &ex, &ey); line_interpolator_image li(*this, lp, sx, sy, ex, ey, m_start, m_scale_x); if(li.vertical()) { while(li.step_ver()) ; } else { while(li.step_hor()) ; } m_start += uround(lp.len / m_scale_x); } //------------------------------------------------------------------------- void line3(const line_parameters& lp, int sx, int sy, int ex, int ey) { if(m_clipping) { int x1 = lp.x1; int y1 = lp.y1; int x2 = lp.x2; int y2 = lp.y2; unsigned flags = clip_line_segment(&x1, &y1, &x2, &y2, m_clip_box); int start = m_start; if((flags & 4) == 0) { if(flags) { line_parameters lp2(x1, y1, x2, y2, uround(calc_distance(x1, y1, x2, y2))); if(flags & 1) { m_start += uround(calc_distance(lp.x1, lp.y1, x1, y1) / m_scale_x); sx = x1 + (y2 - y1); sy = y1 - (x2 - x1); } else { while(std::abs(sx - lp.x1) + std::abs(sy - lp.y1) > 1 + lp2.len) { sx = (lp.x1 + sx) >> 1; sy = (lp.y1 + sy) >> 1; } } if(flags & 2) { ex = x2 + (y2 - y1); ey = y2 - (x2 - x1); } else { while(std::abs(ex - lp.x2) + std::abs(ey - lp.y2) > 1 + lp2.len) { ex = (lp.x2 + ex) >> 1; ey = (lp.y2 + ey) >> 1; } } line3_no_clip(lp2, sx, sy, ex, ey); } else { line3_no_clip(lp, sx, sy, ex, ey); } } m_start = start + uround(lp.len / m_scale_x); } else { line3_no_clip(lp, sx, sy, ex, ey); } } private: base_ren_type* m_ren; const pattern_type* m_pattern; int m_start; double m_scale_x; rect_i m_clip_box; bool m_clipping; }; } #endif mapnik-3.0.9/deps/agg/include/agg_renderer_primitives.h000066400000000000000000000171751262555547000232140ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class renderer_primitives // //---------------------------------------------------------------------------- #ifndef AGG_RENDERER_PRIMITIVES_INCLUDED #define AGG_RENDERER_PRIMITIVES_INCLUDED #include "agg_basics.h" #include "agg_renderer_base.h" #include "agg_dda_line.h" #include "agg_ellipse_bresenham.h" namespace agg { //-----------------------------------------------------renderer_primitives template class renderer_primitives { public: typedef BaseRenderer base_ren_type; typedef typename base_ren_type::color_type color_type; //-------------------------------------------------------------------- explicit renderer_primitives(base_ren_type& ren) : m_ren(&ren), m_fill_color(), m_line_color(), m_curr_x(0), m_curr_y(0) {} void attach(base_ren_type& ren) { m_ren = &ren; } //-------------------------------------------------------------------- static int coord(double c) { return iround(c * line_bresenham_interpolator::subpixel_scale); } //-------------------------------------------------------------------- void fill_color(const color_type& c) { m_fill_color = c; } void line_color(const color_type& c) { m_line_color = c; } const color_type& fill_color() const { return m_fill_color; } const color_type& line_color() const { return m_line_color; } //-------------------------------------------------------------------- void rectangle(int x1, int y1, int x2, int y2) { m_ren->blend_hline(x1, y1, x2-1, m_line_color, cover_full); m_ren->blend_vline(x2, y1, y2-1, m_line_color, cover_full); m_ren->blend_hline(x1+1, y2, x2, m_line_color, cover_full); m_ren->blend_vline(x1, y1+1, y2, m_line_color, cover_full); } //-------------------------------------------------------------------- void solid_rectangle(int x1, int y1, int x2, int y2) { m_ren->blend_bar(x1, y1, x2, y2, m_fill_color, cover_full); } //-------------------------------------------------------------------- void outlined_rectangle(int x1, int y1, int x2, int y2) { rectangle(x1, y1, x2, y2); m_ren->blend_bar(x1+1, y1+1, x2-1, y2-1, m_fill_color, cover_full); } //-------------------------------------------------------------------- void ellipse(int x, int y, int rx, int ry) { ellipse_bresenham_interpolator ei(rx, ry); int dx = 0; int dy = -ry; do { dx += ei.dx(); dy += ei.dy(); m_ren->blend_pixel(x + dx, y + dy, m_line_color, cover_full); m_ren->blend_pixel(x + dx, y - dy, m_line_color, cover_full); m_ren->blend_pixel(x - dx, y - dy, m_line_color, cover_full); m_ren->blend_pixel(x - dx, y + dy, m_line_color, cover_full); ++ei; } while(dy < 0); } //-------------------------------------------------------------------- void solid_ellipse(int x, int y, int rx, int ry) { ellipse_bresenham_interpolator ei(rx, ry); int dx = 0; int dy = -ry; int dy0 = dy; int dx0 = dx; do { dx += ei.dx(); dy += ei.dy(); if(dy != dy0) { m_ren->blend_hline(x-dx0, y+dy0, x+dx0, m_fill_color, cover_full); m_ren->blend_hline(x-dx0, y-dy0, x+dx0, m_fill_color, cover_full); } dx0 = dx; dy0 = dy; ++ei; } while(dy < 0); m_ren->blend_hline(x-dx0, y+dy0, x+dx0, m_fill_color, cover_full); } //-------------------------------------------------------------------- void outlined_ellipse(int x, int y, int rx, int ry) { ellipse_bresenham_interpolator ei(rx, ry); int dx = 0; int dy = -ry; do { dx += ei.dx(); dy += ei.dy(); m_ren->blend_pixel(x + dx, y + dy, m_line_color, cover_full); m_ren->blend_pixel(x + dx, y - dy, m_line_color, cover_full); m_ren->blend_pixel(x - dx, y - dy, m_line_color, cover_full); m_ren->blend_pixel(x - dx, y + dy, m_line_color, cover_full); if(ei.dy() && dx) { m_ren->blend_hline(x-dx+1, y+dy, x+dx-1, m_fill_color, cover_full); m_ren->blend_hline(x-dx+1, y-dy, x+dx-1, m_fill_color, cover_full); } ++ei; } while(dy < 0); } //-------------------------------------------------------------------- void line(int x1, int y1, int x2, int y2, bool last=false) { line_bresenham_interpolator li(x1, y1, x2, y2); unsigned len = li.len(); if(len == 0) { if(last) { m_ren->blend_pixel(li.line_lr(x1), li.line_lr(y1), m_line_color, cover_full); } return; } if(last) ++len; if(li.is_ver()) { do { m_ren->blend_pixel(li.x2(), li.y1(), m_line_color, cover_full); li.vstep(); } while(--len); } else { do { m_ren->blend_pixel(li.x1(), li.y2(), m_line_color, cover_full); li.hstep(); } while(--len); } } //-------------------------------------------------------------------- void move_to(int x, int y) { m_curr_x = x; m_curr_y = y; } //-------------------------------------------------------------------- void line_to(int x, int y, bool last=false) { line(m_curr_x, m_curr_y, x, y, last); m_curr_x = x; m_curr_y = y; } //-------------------------------------------------------------------- const base_ren_type& ren() const { return *m_ren; } base_ren_type& ren() { return *m_ren; } //-------------------------------------------------------------------- const rendering_buffer& rbuf() const { return m_ren->rbuf(); } rendering_buffer& rbuf() { return m_ren->rbuf(); } private: base_ren_type* m_ren; color_type m_fill_color; color_type m_line_color; int m_curr_x; int m_curr_y; }; } #endif mapnik-3.0.9/deps/agg/include/agg_renderer_raster_text.h000066400000000000000000000210231262555547000233500ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_RENDERER_RASTER_TEXT_INCLUDED #define AGG_RENDERER_RASTER_TEXT_INCLUDED #include "agg_basics.h" namespace agg { //==============================================renderer_raster_htext_solid template class renderer_raster_htext_solid { public: typedef BaseRenderer ren_type; typedef GlyphGenerator glyph_gen_type; typedef typename glyph_gen_type::glyph_rect glyph_rect; typedef typename ren_type::color_type color_type; renderer_raster_htext_solid(ren_type& ren, glyph_gen_type& glyph) : m_ren(&ren), m_glyph(&glyph) {} void attach(ren_type& ren) { m_ren = &ren; } //-------------------------------------------------------------------- void color(const color_type& c) { m_color = c; } const color_type& color() const { return m_color; } //-------------------------------------------------------------------- template void render_text(double x, double y, const CharT* str, bool flip=false) { glyph_rect r; while(*str) { m_glyph->prepare(&r, x, y, *str, flip); if(r.x2 >= r.x1) { int i; if(flip) { for(i = r.y1; i <= r.y2; i++) { m_ren->blend_solid_hspan(r.x1, i, (r.x2 - r.x1 + 1), m_color, m_glyph->span(r.y2 - i)); } } else { for(i = r.y1; i <= r.y2; i++) { m_ren->blend_solid_hspan(r.x1, i, (r.x2 - r.x1 + 1), m_color, m_glyph->span(i - r.y1)); } } } x += r.dx; y += r.dy; ++str; } } private: ren_type* m_ren; glyph_gen_type* m_glyph; color_type m_color; }; //=============================================renderer_raster_vtext_solid template class renderer_raster_vtext_solid { public: typedef BaseRenderer ren_type; typedef GlyphGenerator glyph_gen_type; typedef typename glyph_gen_type::glyph_rect glyph_rect; typedef typename ren_type::color_type color_type; renderer_raster_vtext_solid(ren_type& ren, glyph_gen_type& glyph) : m_ren(&ren), m_glyph(&glyph) { } //-------------------------------------------------------------------- void color(const color_type& c) { m_color = c; } const color_type& color() const { return m_color; } //-------------------------------------------------------------------- template void render_text(double x, double y, const CharT* str, bool flip=false) { glyph_rect r; while(*str) { m_glyph->prepare(&r, x, y, *str, !flip); if(r.x2 >= r.x1) { int i; if(flip) { for(i = r.y1; i <= r.y2; i++) { m_ren->blend_solid_vspan(i, r.x1, (r.x2 - r.x1 + 1), m_color, m_glyph->span(i - r.y1)); } } else { for(i = r.y1; i <= r.y2; i++) { m_ren->blend_solid_vspan(i, r.x1, (r.x2 - r.x1 + 1), m_color, m_glyph->span(r.y2 - i)); } } } x += r.dx; y += r.dy; ++str; } } private: ren_type* m_ren; glyph_gen_type* m_glyph; color_type m_color; }; //===================================================renderer_raster_htext template class renderer_raster_htext { public: typedef ScanlineRenderer ren_type; typedef GlyphGenerator glyph_gen_type; typedef typename glyph_gen_type::glyph_rect glyph_rect; class scanline_single_span { public: typedef agg::cover_type cover_type; //---------------------------------------------------------------- struct const_span { int x; unsigned len; const cover_type* covers; const_span() {} const_span(int x_, unsigned len_, const cover_type* covers_) : x(x_), len(len_), covers(covers_) {} }; typedef const const_span* const_iterator; //---------------------------------------------------------------- scanline_single_span(int x, int y, unsigned len, const cover_type* covers) : m_y(y), m_span(x, len, covers) {} //---------------------------------------------------------------- int y() const { return m_y; } unsigned num_spans() const { return 1; } const_iterator begin() const { return &m_span; } private: //---------------------------------------------------------------- int m_y; const_span m_span; }; //-------------------------------------------------------------------- renderer_raster_htext(ren_type& ren, glyph_gen_type& glyph) : m_ren(&ren), m_glyph(&glyph) { } //-------------------------------------------------------------------- template void render_text(double x, double y, const CharT* str, bool flip=false) { glyph_rect r; while(*str) { m_glyph->prepare(&r, x, y, *str, flip); if(r.x2 >= r.x1) { m_ren->prepare(); int i; if(flip) { for(i = r.y1; i <= r.y2; i++) { m_ren->render( scanline_single_span(r.x1, i, (r.x2 - r.x1 + 1), m_glyph->span(r.y2 - i))); } } else { for(i = r.y1; i <= r.y2; i++) { m_ren->render( scanline_single_span(r.x1, i, (r.x2 - r.x1 + 1), m_glyph->span(i - r.y1))); } } } x += r.dx; y += r.dy; ++str; } } private: ren_type* m_ren; glyph_gen_type* m_glyph; }; } #endif mapnik-3.0.9/deps/agg/include/agg_renderer_scanline.h000066400000000000000000001052761262555547000226150ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_RENDERER_SCANLINE_INCLUDED #define AGG_RENDERER_SCANLINE_INCLUDED #include "agg_basics.h" #include "agg_renderer_base.h" namespace agg { //================================================render_scanline_aa_solid template void render_scanline_aa_solid(const Scanline& sl, BaseRenderer& ren, const ColorT& color) { int y = sl.y(); unsigned num_spans = sl.num_spans(); typename Scanline::const_iterator span = sl.begin(); for(;;) { int x = span->x; if(span->len > 0) { ren.blend_solid_hspan(x, y, (unsigned)span->len, color, span->covers); } else { ren.blend_hline(x, y, (unsigned)(x - span->len - 1), color, *(span->covers)); } if(--num_spans == 0) break; ++span; } } //===============================================render_scanlines_aa_solid template void render_scanlines_aa_solid(Rasterizer& ras, Scanline& sl, BaseRenderer& ren, const ColorT& color) { if(ras.rewind_scanlines()) { // Explicitly convert "color" to the BaseRenderer color type. // For example, it can be called with color type "rgba", while // "rgba8" is needed. Otherwise it will be implicitly // converted in the loop many times. //---------------------- typename BaseRenderer::color_type ren_color(color); sl.reset(ras.min_x(), ras.max_x()); while(ras.sweep_scanline(sl)) { render_scanline_aa_solid(sl, ren, ren_color); } } } //==============================================renderer_scanline_aa_solid template class renderer_scanline_aa_solid { public: typedef BaseRenderer base_ren_type; typedef typename base_ren_type::color_type color_type; //-------------------------------------------------------------------- renderer_scanline_aa_solid() : m_ren(0) {} explicit renderer_scanline_aa_solid(base_ren_type& ren) : m_ren(&ren) {} void attach(base_ren_type& ren) { m_ren = &ren; } //-------------------------------------------------------------------- void color(const color_type& c) { m_color = c; } const color_type& color() const { return m_color; } //-------------------------------------------------------------------- void prepare() {} //-------------------------------------------------------------------- template void render(const Scanline& sl) { render_scanline_aa_solid(sl, *m_ren, m_color); } private: base_ren_type* m_ren; color_type m_color; }; //======================================================render_scanline_aa template void render_scanline_aa(const Scanline& sl, BaseRenderer& ren, SpanAllocator& alloc, SpanGenerator& span_gen) { int y = sl.y(); unsigned num_spans = sl.num_spans(); typename Scanline::const_iterator span = sl.begin(); for(;;) { int x = span->x; int len = span->len; const typename Scanline::cover_type* covers = span->covers; if(len < 0) len = -len; typename BaseRenderer::color_type* colors = alloc.allocate(len); span_gen.generate(colors, x, y, len); ren.blend_color_hspan(x, y, len, colors, (span->len < 0) ? 0 : covers, *covers); if(--num_spans == 0) break; ++span; } } //======================================================render_scanline_aa_alpha template void render_scanline_aa_alpha(const Scanline& sl, BaseRenderer& ren, SpanAllocator& alloc, SpanGenerator& span_gen, unsigned alpha) { int y = sl.y(); unsigned num_spans = sl.num_spans(); typename Scanline::const_iterator span = sl.begin(); for(;;) { int x = span->x; int len = span->len; const typename Scanline::cover_type* covers = span->covers; if(len < 0) len = -len; typename BaseRenderer::color_type* colors = alloc.allocate(len); span_gen.generate(colors, x, y, len); ren.blend_color_hspan_alpha(x, y, len, colors, alpha, (span->len < 0) ? 0 : covers, *covers); if(--num_spans == 0) break; ++span; } } //=====================================================render_scanlines_aa template void render_scanlines_aa(Rasterizer& ras, Scanline& sl, BaseRenderer& ren, SpanAllocator& alloc, SpanGenerator& span_gen) { if(ras.rewind_scanlines()) { sl.reset(ras.min_x(), ras.max_x()); span_gen.prepare(); while(ras.sweep_scanline(sl)) { render_scanline_aa(sl, ren, alloc, span_gen); } } } //====================================================renderer_scanline_aa template class renderer_scanline_aa { public: typedef BaseRenderer base_ren_type; typedef SpanAllocator alloc_type; typedef SpanGenerator span_gen_type; //-------------------------------------------------------------------- renderer_scanline_aa() : m_ren(0), m_alloc(0), m_span_gen(0) {} renderer_scanline_aa(base_ren_type& ren, alloc_type& alloc, span_gen_type& span_gen) : m_ren(&ren), m_alloc(&alloc), m_span_gen(&span_gen) {} void attach(base_ren_type& ren, alloc_type& alloc, span_gen_type& span_gen) { m_ren = &ren; m_alloc = &alloc; m_span_gen = &span_gen; } //-------------------------------------------------------------------- void prepare() { m_span_gen->prepare(); } //-------------------------------------------------------------------- template void render(const Scanline& sl) { render_scanline_aa(sl, *m_ren, *m_alloc, *m_span_gen); } private: base_ren_type* m_ren; alloc_type* m_alloc; span_gen_type* m_span_gen; }; //====================================================renderer_scanline_aa template class renderer_scanline_aa_alpha { public: typedef BaseRenderer base_ren_type; typedef SpanAllocator alloc_type; typedef SpanGenerator span_gen_type; //-------------------------------------------------------------------- renderer_scanline_aa_alpha() : m_ren(0), m_alloc(0), m_span_gen(0), m_alpha(1.0) {} renderer_scanline_aa_alpha(base_ren_type& ren, alloc_type& alloc, span_gen_type& span_gen, unsigned alpha) : m_ren(&ren), m_alloc(&alloc), m_span_gen(&span_gen), m_alpha(alpha) {} void attach(base_ren_type& ren, alloc_type& alloc, span_gen_type& span_gen) { m_ren = &ren; m_alloc = &alloc; m_span_gen = &span_gen; } //-------------------------------------------------------------------- void prepare() { m_span_gen->prepare(); } //-------------------------------------------------------------------- template void render(const Scanline& sl) { render_scanline_aa_alpha(sl, *m_ren, *m_alloc, *m_span_gen, m_alpha); } private: base_ren_type* m_ren; alloc_type* m_alloc; span_gen_type* m_span_gen; unsigned m_alpha; }; //===============================================render_scanline_bin_solid template void render_scanline_bin_solid(const Scanline& sl, BaseRenderer& ren, const ColorT& color) { unsigned num_spans = sl.num_spans(); typename Scanline::const_iterator span = sl.begin(); for(;;) { ren.blend_hline(span->x, sl.y(), span->x - 1 + ((span->len < 0) ? -span->len : span->len), color, cover_full); if(--num_spans == 0) break; ++span; } } //==============================================render_scanlines_bin_solid template void render_scanlines_bin_solid(Rasterizer& ras, Scanline& sl, BaseRenderer& ren, const ColorT& color) { if(ras.rewind_scanlines()) { // Explicitly convert "color" to the BaseRenderer color type. // For example, it can be called with color type "rgba", while // "rgba8" is needed. Otherwise it will be implicitly // converted in the loop many times. //---------------------- typename BaseRenderer::color_type ren_color(color); sl.reset(ras.min_x(), ras.max_x()); while(ras.sweep_scanline(sl)) { //render_scanline_bin_solid(sl, ren, ren_color); // This code is equivalent to the above call (copy/paste). // It's just a "manual" optimization for old compilers, // like Microsoft Visual C++ v6.0 //------------------------------- unsigned num_spans = sl.num_spans(); typename Scanline::const_iterator span = sl.begin(); for(;;) { ren.blend_hline(span->x, sl.y(), span->x - 1 + ((span->len < 0) ? -span->len : span->len), ren_color, cover_full); if(--num_spans == 0) break; ++span; } } } } //=============================================renderer_scanline_bin_solid template class renderer_scanline_bin_solid { public: typedef BaseRenderer base_ren_type; typedef typename base_ren_type::color_type color_type; //-------------------------------------------------------------------- renderer_scanline_bin_solid() : m_ren(0) {} explicit renderer_scanline_bin_solid(base_ren_type& ren) : m_ren(&ren) {} void attach(base_ren_type& ren) { m_ren = &ren; } //-------------------------------------------------------------------- void color(const color_type& c) { m_color = c; } const color_type& color() const { return m_color; } //-------------------------------------------------------------------- void prepare() {} //-------------------------------------------------------------------- template void render(const Scanline& sl) { render_scanline_bin_solid(sl, *m_ren, m_color); } private: base_ren_type* m_ren; color_type m_color; }; //======================================================render_scanline_bin template void render_scanline_bin(const Scanline& sl, BaseRenderer& ren, SpanAllocator& alloc, SpanGenerator& span_gen) { int y = sl.y(); unsigned num_spans = sl.num_spans(); typename Scanline::const_iterator span = sl.begin(); for(;;) { int x = span->x; int len = span->len; if(len < 0) len = -len; typename BaseRenderer::color_type* colors = alloc.allocate(len); span_gen.generate(colors, x, y, len); ren.blend_color_hspan(x, y, len, colors, 0, cover_full); if(--num_spans == 0) break; ++span; } } //=====================================================render_scanlines_bin template void render_scanlines_bin(Rasterizer& ras, Scanline& sl, BaseRenderer& ren, SpanAllocator& alloc, SpanGenerator& span_gen) { if(ras.rewind_scanlines()) { sl.reset(ras.min_x(), ras.max_x()); span_gen.prepare(); while(ras.sweep_scanline(sl)) { render_scanline_bin(sl, ren, alloc, span_gen); } } } //====================================================renderer_scanline_bin template class renderer_scanline_bin { public: typedef BaseRenderer base_ren_type; typedef SpanAllocator alloc_type; typedef SpanGenerator span_gen_type; //-------------------------------------------------------------------- renderer_scanline_bin() : m_ren(0), m_alloc(0), m_span_gen(0) {} renderer_scanline_bin(base_ren_type& ren, alloc_type& alloc, span_gen_type& span_gen) : m_ren(&ren), m_alloc(&alloc), m_span_gen(&span_gen) {} void attach(base_ren_type& ren, alloc_type& alloc, span_gen_type& span_gen) { m_ren = &ren; m_alloc = &alloc; m_span_gen = &span_gen; } //-------------------------------------------------------------------- void prepare() { m_span_gen->prepare(); } //-------------------------------------------------------------------- template void render(const Scanline& sl) { render_scanline_bin(sl, *m_ren, *m_alloc, *m_span_gen); } private: base_ren_type* m_ren; alloc_type* m_alloc; span_gen_type* m_span_gen; }; //========================================================render_scanlines template void render_scanlines(Rasterizer& ras, Scanline& sl, Renderer& ren) { if(ras.rewind_scanlines()) { sl.reset(ras.min_x(), ras.max_x()); ren.prepare(); while(ras.sweep_scanline(sl)) { ren.render(sl); } } } //========================================================render_all_paths template void render_all_paths(Rasterizer& ras, Scanline& sl, Renderer& r, VertexSource& vs, const ColorStorage& as, const PathId& path_id, unsigned num_paths) { for(unsigned i = 0; i < num_paths; i++) { ras.reset(); ras.add_path(vs, path_id[i]); r.color(as[i]); render_scanlines(ras, sl, r); } } //=============================================render_scanlines_compound template void render_scanlines_compound(Rasterizer& ras, ScanlineAA& sl_aa, ScanlineBin& sl_bin, BaseRenderer& ren, SpanAllocator& alloc, StyleHandler& sh) { if(ras.rewind_scanlines()) { int min_x = ras.min_x(); int len = ras.max_x() - min_x + 2; sl_aa.reset(min_x, ras.max_x()); sl_bin.reset(min_x, ras.max_x()); typedef typename BaseRenderer::color_type color_type; color_type* color_span = alloc.allocate(len * 2); color_type* mix_buffer = color_span + len; unsigned num_spans; unsigned num_styles; unsigned style; bool solid; while((num_styles = ras.sweep_styles()) > 0) { typename ScanlineAA::const_iterator span_aa; if(num_styles == 1) { // Optimization for a single style. Happens often //------------------------- if(ras.sweep_scanline(sl_aa, 0)) { style = ras.style(0); if(sh.is_solid(style)) { // Just solid fill //----------------------- render_scanline_aa_solid(sl_aa, ren, sh.color(style)); } else { // Arbitrary span generator //----------------------- span_aa = sl_aa.begin(); num_spans = sl_aa.num_spans(); for(;;) { len = span_aa->len; sh.generate_span(color_span, span_aa->x, sl_aa.y(), len, style); ren.blend_color_hspan(span_aa->x, sl_aa.y(), span_aa->len, color_span, span_aa->covers); if(--num_spans == 0) break; ++span_aa; } } } } else { if(ras.sweep_scanline(sl_bin, -1)) { // Clear the spans of the mix_buffer //-------------------- typename ScanlineBin::const_iterator span_bin = sl_bin.begin(); num_spans = sl_bin.num_spans(); for(;;) { memset(mix_buffer + span_bin->x - min_x, 0, span_bin->len * sizeof(color_type)); if(--num_spans == 0) break; ++span_bin; } unsigned i; for(i = 0; i < num_styles; i++) { style = ras.style(i); solid = sh.is_solid(style); if(ras.sweep_scanline(sl_aa, i)) { color_type* colors; color_type* cspan; typename ScanlineAA::cover_type* covers; span_aa = sl_aa.begin(); num_spans = sl_aa.num_spans(); if(solid) { // Just solid fill //----------------------- for(;;) { color_type c = sh.color(style); len = span_aa->len; colors = mix_buffer + span_aa->x - min_x; covers = span_aa->covers; do { if(*covers == cover_full) { *colors = c; } else { colors->add(c, *covers); } ++colors; ++covers; } while(--len); if(--num_spans == 0) break; ++span_aa; } } else { // Arbitrary span generator //----------------------- for(;;) { len = span_aa->len; colors = mix_buffer + span_aa->x - min_x; cspan = color_span; sh.generate_span(cspan, span_aa->x, sl_aa.y(), len, style); covers = span_aa->covers; do { if(*covers == cover_full) { *colors = *cspan; } else { colors->add(*cspan, *covers); } ++cspan; ++colors; ++covers; } while(--len); if(--num_spans == 0) break; ++span_aa; } } } } // Emit the blended result as a color hspan //------------------------- span_bin = sl_bin.begin(); num_spans = sl_bin.num_spans(); for(;;) { ren.blend_color_hspan(span_bin->x, sl_bin.y(), span_bin->len, mix_buffer + span_bin->x - min_x, 0, cover_full); if(--num_spans == 0) break; ++span_bin; } } // if(ras.sweep_scanline(sl_bin, -1)) } // if(num_styles == 1) ... else } // while((num_styles = ras.sweep_styles()) > 0) } // if(ras.rewind_scanlines()) } //=======================================render_scanlines_compound_layered template void render_scanlines_compound_layered(Rasterizer& ras, ScanlineAA& sl_aa, BaseRenderer& ren, SpanAllocator& alloc, StyleHandler& sh) { if(ras.rewind_scanlines()) { int min_x = ras.min_x(); int len = ras.max_x() - min_x + 2; sl_aa.reset(min_x, ras.max_x()); typedef typename BaseRenderer::color_type color_type; color_type* color_span = alloc.allocate(len * 2); color_type* mix_buffer = color_span + len; cover_type* cover_buffer = ras.allocate_cover_buffer(len); unsigned num_spans; unsigned num_styles; unsigned style; bool solid; while((num_styles = ras.sweep_styles()) > 0) { typename ScanlineAA::const_iterator span_aa; if(num_styles == 1) { // Optimization for a single style. Happens often //------------------------- if(ras.sweep_scanline(sl_aa, 0)) { style = ras.style(0); if(sh.is_solid(style)) { // Just solid fill //----------------------- render_scanline_aa_solid(sl_aa, ren, sh.color(style)); } else { // Arbitrary span generator //----------------------- span_aa = sl_aa.begin(); num_spans = sl_aa.num_spans(); for(;;) { len = span_aa->len; sh.generate_span(color_span, span_aa->x, sl_aa.y(), len, style); ren.blend_color_hspan(span_aa->x, sl_aa.y(), span_aa->len, color_span, span_aa->covers); if(--num_spans == 0) break; ++span_aa; } } } } else { int sl_start = ras.scanline_start(); unsigned sl_len = ras.scanline_length(); if(sl_len) { memset(mix_buffer + sl_start - min_x, 0, sl_len * sizeof(color_type)); memset(cover_buffer + sl_start - min_x, 0, sl_len * sizeof(cover_type)); int sl_y = 0x7FFFFFFF; unsigned i; for(i = 0; i < num_styles; i++) { style = ras.style(i); solid = sh.is_solid(style); if(ras.sweep_scanline(sl_aa, i)) { unsigned cover; color_type* colors; color_type* cspan; cover_type* src_covers; cover_type* dst_covers; span_aa = sl_aa.begin(); num_spans = sl_aa.num_spans(); sl_y = sl_aa.y(); if(solid) { // Just solid fill //----------------------- for(;;) { color_type c = sh.color(style); len = span_aa->len; colors = mix_buffer + span_aa->x - min_x; src_covers = span_aa->covers; dst_covers = cover_buffer + span_aa->x - min_x; do { cover = *src_covers; if(*dst_covers + cover > cover_full) { cover = cover_full - *dst_covers; } if(cover) { colors->add(c, cover); *dst_covers += cover; } ++colors; ++src_covers; ++dst_covers; } while(--len); if(--num_spans == 0) break; ++span_aa; } } else { // Arbitrary span generator //----------------------- for(;;) { len = span_aa->len; colors = mix_buffer + span_aa->x - min_x; cspan = color_span; sh.generate_span(cspan, span_aa->x, sl_aa.y(), len, style); src_covers = span_aa->covers; dst_covers = cover_buffer + span_aa->x - min_x; do { cover = *src_covers; if(*dst_covers + cover > cover_full) { cover = cover_full - *dst_covers; } if(cover) { colors->add(*cspan, cover); *dst_covers += cover; } ++cspan; ++colors; ++src_covers; ++dst_covers; } while(--len); if(--num_spans == 0) break; ++span_aa; } } } } ren.blend_color_hspan(sl_start, sl_y, sl_len, mix_buffer + sl_start - min_x, 0, cover_full); } //if(sl_len) } //if(num_styles == 1) ... else } //while((num_styles = ras.sweep_styles()) > 0) } //if(ras.rewind_scanlines()) } } #endif mapnik-3.0.9/deps/agg/include/agg_rendering_buffer.h000066400000000000000000000234611262555547000224340ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class rendering_buffer // //---------------------------------------------------------------------------- #ifndef AGG_RENDERING_BUFFER_INCLUDED #define AGG_RENDERING_BUFFER_INCLUDED #include "agg_array.h" namespace agg { //===========================================================row_accessor template class row_accessor { public: typedef const_row_info row_data; //------------------------------------------------------------------- row_accessor() : m_buf(0), m_start(0), m_width(0), m_height(0), m_stride(0) { } //-------------------------------------------------------------------- row_accessor(T* buf, unsigned width, unsigned height, int stride) : m_buf(0), m_start(0), m_width(0), m_height(0), m_stride(0) { attach(buf, width, height, stride); } //-------------------------------------------------------------------- void attach(T* buf, unsigned width, unsigned height, int stride) { m_buf = m_start = buf; m_width = width; m_height = height; m_stride = stride; if(stride < 0) { m_start = m_buf - int(height - 1) * stride; } } //-------------------------------------------------------------------- AGG_INLINE T* buf() { return m_buf; } AGG_INLINE const T* buf() const { return m_buf; } AGG_INLINE unsigned width() const { return m_width; } AGG_INLINE unsigned height() const { return m_height; } AGG_INLINE int stride() const { return m_stride; } AGG_INLINE unsigned stride_abs() const { return (m_stride < 0) ? unsigned(-m_stride) : unsigned(m_stride); } //-------------------------------------------------------------------- AGG_INLINE T* row_ptr(int, int y, unsigned) { return m_start + y * m_stride; } AGG_INLINE T* row_ptr(int y) { return m_start + y * m_stride; } AGG_INLINE const T* row_ptr(int y) const { return m_start + y * m_stride; } AGG_INLINE row_data row (int y) const { return row_data(0, m_width-1, row_ptr(y)); } //-------------------------------------------------------------------- template void copy_from(const RenBuf& src) { unsigned h = height(); if(src.height() < h) h = src.height(); unsigned l = stride_abs(); if(src.stride_abs() < l) l = src.stride_abs(); l *= sizeof(T); unsigned y; unsigned w = width(); for (y = 0; y < h; y++) { memcpy(row_ptr(0, y, w), src.row_ptr(y), l); } } //-------------------------------------------------------------------- void clear(T value) { unsigned y; unsigned w = width(); unsigned stride = stride_abs(); for(y = 0; y < height(); y++) { T* p = row_ptr(0, y, w); unsigned x; for(x = 0; x < stride; x++) { *p++ = value; } } } private: //-------------------------------------------------------------------- T* m_buf; // Pointer to rendering buffer T* m_start; // Pointer to first pixel depending on stride unsigned m_width; // Width in pixels unsigned m_height; // Height in pixels int m_stride; // Number of bytes per row. Can be < 0 }; //==========================================================row_ptr_cache template class row_ptr_cache { public: typedef const_row_info row_data; //------------------------------------------------------------------- row_ptr_cache() : m_buf(0), m_rows(), m_width(0), m_height(0), m_stride(0) { } //-------------------------------------------------------------------- row_ptr_cache(T* buf, unsigned width, unsigned height, int stride) : m_buf(0), m_rows(), m_width(0), m_height(0), m_stride(0) { attach(buf, width, height, stride); } //-------------------------------------------------------------------- void attach(T* buf, unsigned width, unsigned height, int stride) { m_buf = buf; m_width = width; m_height = height; m_stride = stride; if(height > m_rows.size()) { m_rows.resize(height); } T* row_ptr = m_buf; if(stride < 0) { row_ptr = m_buf - int(height - 1) * stride; } T** rows = &m_rows[0]; while(height > 0) { *rows++ = row_ptr; row_ptr += stride; --height; } } //-------------------------------------------------------------------- AGG_INLINE T* buf() { return m_buf; } AGG_INLINE const T* buf() const { return m_buf; } AGG_INLINE unsigned width() const { return m_width; } AGG_INLINE unsigned height() const { return m_height; } AGG_INLINE int stride() const { return m_stride; } AGG_INLINE unsigned stride_abs() const { return (m_stride < 0) ? unsigned(-m_stride) : unsigned(m_stride); } //-------------------------------------------------------------------- AGG_INLINE T* row_ptr(int, int y, unsigned) { return m_rows[y]; } AGG_INLINE T* row_ptr(int y) { return m_rows[y]; } AGG_INLINE const T* row_ptr(int y) const { return m_rows[y]; } AGG_INLINE row_data row (int y) const { return row_data(0, m_width-1, m_rows[y]); } //-------------------------------------------------------------------- T const* const* rows() const { return &m_rows[0]; } //-------------------------------------------------------------------- template void copy_from(const RenBuf& src) { unsigned h = height(); if(src.height() < h) h = src.height(); unsigned l = stride_abs(); if(src.stride_abs() < l) l = src.stride_abs(); l *= sizeof(T); unsigned y; unsigned w = width(); for (y = 0; y < h; y++) { memcpy(row_ptr(0, y, w), src.row_ptr(y), l); } } //-------------------------------------------------------------------- void clear(T value) { unsigned y; unsigned w = width(); unsigned stride = stride_abs(); for(y = 0; y < height(); y++) { T* p = row_ptr(0, y, w); unsigned x; for(x = 0; x < stride; x++) { *p++ = value; } } } private: //-------------------------------------------------------------------- T* m_buf; // Pointer to rendering buffer pod_array m_rows; // Pointers to each row of the buffer unsigned m_width; // Width in pixels unsigned m_height; // Height in pixels int m_stride; // Number of bytes per row. Can be < 0 }; //========================================================rendering_buffer // // The definition of the main type for accessing the rows in the frame // buffer. It provides functionality to navigate to the rows in a // rectangular matrix, from top to bottom or from bottom to top depending // on stride. // // row_accessor is cheap to create/destroy, but performs one multiplication // when calling row_ptr(). // // row_ptr_cache creates an array of pointers to rows, so, the access // via row_ptr() may be faster. But it requires memory allocation // when creating. For example, on typical Intel Pentium hardware // row_ptr_cache speeds span_image_filter_rgb_nn up to 10% // // It's used only in short hand typedefs like pixfmt_rgba32 and can be // redefined in agg_config.h // In real applications you can use both, depending on your needs //------------------------------------------------------------------------ #ifdef AGG_RENDERING_BUFFER typedef AGG_RENDERING_BUFFER rendering_buffer; #else typedef row_ptr_cache rendering_buffer; //typedef row_accessor rendering_buffer; #endif } #endif mapnik-3.0.9/deps/agg/include/agg_rendering_buffer_dynarow.h000066400000000000000000000116471262555547000242020ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class rendering_buffer_dynarow // //---------------------------------------------------------------------------- #ifndef AGG_RENDERING_BUFFER_DYNAROW_INCLUDED #define AGG_RENDERING_BUFFER_DYNAROW_INCLUDED #include "agg_array.h" namespace agg { //===============================================rendering_buffer_dynarow // Rendering buffer class with dynamic allocation of the rows. // The rows are allocated as needed when requesting for span_ptr(). // The class automatically calculates min_x and max_x for each row. // Generally it's more efficient to use this class as a temporary buffer // for rendering a few lines and then to blend it with another buffer. // class rendering_buffer_dynarow { public: typedef row_info row_data; //------------------------------------------------------------------- ~rendering_buffer_dynarow() { init(0,0,0); } //------------------------------------------------------------------- rendering_buffer_dynarow() : m_rows(), m_width(0), m_height(0), m_byte_width(0) { } // Allocate and clear the buffer //-------------------------------------------------------------------- rendering_buffer_dynarow(unsigned width, unsigned height, unsigned byte_width) : m_rows(height), m_width(width), m_height(height), m_byte_width(byte_width) { memset(&m_rows[0], 0, sizeof(row_data) * height); } // Allocate and clear the buffer //-------------------------------------------------------------------- void init(unsigned width, unsigned height, unsigned byte_width) { unsigned i; for(i = 0; i < m_height; ++i) { pod_allocator::deallocate((int8u*)m_rows[i].ptr, m_byte_width); } if(width && height) { m_width = width; m_height = height; m_byte_width = byte_width; m_rows.resize(height); memset(&m_rows[0], 0, sizeof(row_data) * height); } } //-------------------------------------------------------------------- unsigned width() const { return m_width; } unsigned height() const { return m_height; } unsigned byte_width() const { return m_byte_width; } // The main function used for rendering. Returns pointer to the // pre-allocated span. Memory for the row is allocated as needed. //-------------------------------------------------------------------- int8u* row_ptr(int x, int y, unsigned len) { row_data* r = &m_rows[y]; int x2 = x + len - 1; if(r->ptr) { if(x < r->x1) { r->x1 = x; } if(x2 > r->x2) { r->x2 = x2; } } else { int8u* p = pod_allocator::allocate(m_byte_width); r->ptr = p; r->x1 = x; r->x2 = x2; memset(p, 0, m_byte_width); } return (int8u*)r->ptr; } //-------------------------------------------------------------------- const int8u* row_ptr(int y) const { return m_rows[y].ptr; } int8u* row_ptr(int y) { return row_ptr(0, y, m_width); } row_data row (int y) const { return m_rows[y]; } private: //-------------------------------------------------------------------- // Prohibit copying rendering_buffer_dynarow(const rendering_buffer_dynarow&); const rendering_buffer_dynarow& operator = (const rendering_buffer_dynarow&); private: //-------------------------------------------------------------------- pod_array m_rows; // Pointers to each row of the buffer unsigned m_width; // Width in pixels unsigned m_height; // Height in pixels unsigned m_byte_width; // Width in bytes }; } #endif mapnik-3.0.9/deps/agg/include/agg_rounded_rect.h000066400000000000000000000043051262555547000215770ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Rounded rectangle vertex generator // //---------------------------------------------------------------------------- #ifndef AGG_ROUNDED_RECT_INCLUDED #define AGG_ROUNDED_RECT_INCLUDED #include "agg_basics.h" #include "agg_arc.h" namespace agg { //------------------------------------------------------------rounded_rect // // See Implemantation agg_rounded_rect.cpp // class rounded_rect { public: rounded_rect() {} rounded_rect(double x1, double y1, double x2, double y2, double r); void rect(double x1, double y1, double x2, double y2); void radius(double r); void radius(double rx, double ry); void radius(double rx_bottom, double ry_bottom, double rx_top, double ry_top); void radius(double rx1, double ry1, double rx2, double ry2, double rx3, double ry3, double rx4, double ry4); void normalize_radius(); void approximation_scale(double s) { m_arc.approximation_scale(s); } double approximation_scale() const { return m_arc.approximation_scale(); } void rewind(unsigned); unsigned vertex(double* x, double* y); private: double m_x1; double m_y1; double m_x2; double m_y2; double m_rx1; double m_ry1; double m_rx2; double m_ry2; double m_rx3; double m_ry3; double m_rx4; double m_ry4; unsigned m_status; arc m_arc; }; } #endif mapnik-3.0.9/deps/agg/include/agg_scanline_bin.h000066400000000000000000000170701262555547000215510ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Class scanline_bin - binary scanline. // //---------------------------------------------------------------------------- // // Adaptation for 32-bit screen coordinates (scanline32_bin) has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SCANLINE_BIN_INCLUDED #define AGG_SCANLINE_BIN_INCLUDED #include "agg_array.h" namespace agg { //=============================================================scanline_bin // // This is binary scaline container which supports the interface // used in the rasterizer::render(). See description of agg_scanline_u8 // for details. // //------------------------------------------------------------------------ class scanline_bin { public: typedef int32 coord_type; struct span { int16 x; int16 len; }; typedef const span* const_iterator; //-------------------------------------------------------------------- scanline_bin() : m_last_x(0x7FFFFFF0), m_spans(), m_cur_span(0) { } //-------------------------------------------------------------------- void reset(int min_x, int max_x) { unsigned max_len = max_x - min_x + 3; if(max_len > m_spans.size()) { m_spans.resize(max_len); } m_last_x = 0x7FFFFFF0; m_cur_span = &m_spans[0]; } //-------------------------------------------------------------------- void add_cell(int x, unsigned) { if(x == m_last_x+1) { m_cur_span->len++; } else { ++m_cur_span; m_cur_span->x = (int16)x; m_cur_span->len = 1; } m_last_x = x; } //-------------------------------------------------------------------- void add_span(int x, unsigned len, unsigned) { if(x == m_last_x+1) { m_cur_span->len = (int16)(m_cur_span->len + len); } else { ++m_cur_span; m_cur_span->x = (int16)x; m_cur_span->len = (int16)len; } m_last_x = x + len - 1; } //-------------------------------------------------------------------- void add_cells(int x, unsigned len, const void*) { add_span(x, len, 0); } //-------------------------------------------------------------------- void finalize(int y) { m_y = y; } //-------------------------------------------------------------------- void reset_spans() { m_last_x = 0x7FFFFFF0; m_cur_span = &m_spans[0]; } //-------------------------------------------------------------------- int y() const { return m_y; } unsigned num_spans() const { return unsigned(m_cur_span - &m_spans[0]); } const_iterator begin() const { return &m_spans[1]; } private: scanline_bin(const scanline_bin&); const scanline_bin operator = (const scanline_bin&); int m_last_x; int m_y; pod_array m_spans; span* m_cur_span; }; //===========================================================scanline32_bin class scanline32_bin { public: typedef int32 coord_type; //-------------------------------------------------------------------- struct span { span() {} span(coord_type x_, coord_type len_) : x(x_), len(len_) {} coord_type x; coord_type len; }; typedef pod_bvector span_array_type; //-------------------------------------------------------------------- class const_iterator { public: const_iterator(const span_array_type& spans) : m_spans(spans), m_span_idx(0) {} const span& operator*() const { return m_spans[m_span_idx]; } const span* operator->() const { return &m_spans[m_span_idx]; } void operator ++ () { ++m_span_idx; } private: const span_array_type& m_spans; unsigned m_span_idx; }; //-------------------------------------------------------------------- scanline32_bin() : m_max_len(0), m_last_x(0x7FFFFFF0) {} //-------------------------------------------------------------------- void reset(int, int) { m_last_x = 0x7FFFFFF0; m_spans.remove_all(); } //-------------------------------------------------------------------- void add_cell(int x, unsigned) { if(x == m_last_x+1) { m_spans.last().len++; } else { m_spans.add(span(coord_type(x), 1)); } m_last_x = x; } //-------------------------------------------------------------------- void add_span(int x, unsigned len, unsigned) { if(x == m_last_x+1) { m_spans.last().len += coord_type(len); } else { m_spans.add(span(coord_type(x), coord_type(len))); } m_last_x = x + len - 1; } //-------------------------------------------------------------------- void add_cells(int x, unsigned len, const void*) { add_span(x, len, 0); } //-------------------------------------------------------------------- void finalize(int y) { m_y = y; } //-------------------------------------------------------------------- void reset_spans() { m_last_x = 0x7FFFFFF0; m_spans.remove_all(); } //-------------------------------------------------------------------- int y() const { return m_y; } unsigned num_spans() const { return m_spans.size(); } const_iterator begin() const { return const_iterator(m_spans); } private: scanline32_bin(const scanline32_bin&); const scanline32_bin operator = (const scanline32_bin&); unsigned m_max_len; int m_last_x; int m_y; span_array_type m_spans; }; } #endif mapnik-3.0.9/deps/agg/include/agg_scanline_boolean_algebra.h000066400000000000000000001522401262555547000240740ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SCANLINE_BOOLEAN_ALGEBRA_INCLUDED #define AGG_SCANLINE_BOOLEAN_ALGEBRA_INCLUDED #include #include #include "agg_basics.h" namespace agg { //-----------------------------------------------sbool_combine_spans_bin // Functor. // Combine two binary encoded spans, i.e., when we don't have any // anti-aliasing information, but only X and Length. The function // is compatible with any type of scanlines. //---------------- template struct sbool_combine_spans_bin { void operator () (const typename Scanline1::const_iterator&, const typename Scanline2::const_iterator&, int x, unsigned len, Scanline& sl) const { sl.add_span(x, len, cover_full); } }; //---------------------------------------------sbool_combine_spans_empty // Functor. // Combine two spans as empty ones. The functor does nothing // and is used to XOR binary spans. //---------------- template struct sbool_combine_spans_empty { void operator () (const typename Scanline1::const_iterator&, const typename Scanline2::const_iterator&, int, unsigned, Scanline&) const {} }; //--------------------------------------------------sbool_add_span_empty // Functor. // Add nothing. Used in conbine_shapes_sub //---------------- template struct sbool_add_span_empty { void operator () (const typename Scanline1::const_iterator&, int, unsigned, Scanline&) const {} }; //----------------------------------------------------sbool_add_span_bin // Functor. // Add a binary span //---------------- template struct sbool_add_span_bin { void operator () (const typename Scanline1::const_iterator&, int x, unsigned len, Scanline& sl) const { sl.add_span(x, len, cover_full); } }; //-----------------------------------------------------sbool_add_span_aa // Functor. // Add an anti-aliased span // anti-aliasing information, but only X and Length. The function // is compatible with any type of scanlines. //---------------- template struct sbool_add_span_aa { void operator () (const typename Scanline1::const_iterator& span, int x, unsigned len, Scanline& sl) const { if(span->len < 0) { sl.add_span(x, len, *span->covers); } else if(span->len > 0) { const typename Scanline1::cover_type* covers = span->covers; if(span->x < x) covers += x - span->x; sl.add_cells(x, len, covers); } } }; //----------------------------------------------sbool_intersect_spans_aa // Functor. // Intersect two spans preserving the anti-aliasing information. // The result is added to the "sl" scanline. //------------------ template struct sbool_intersect_spans_aa { enum cover_scale_e { cover_shift = CoverShift, cover_size = 1 << cover_shift, cover_mask = cover_size - 1, cover_full = cover_mask }; void operator () (const typename Scanline1::const_iterator& span1, const typename Scanline2::const_iterator& span2, int x, unsigned len, Scanline& sl) const { unsigned cover; const typename Scanline1::cover_type* covers1; const typename Scanline2::cover_type* covers2; // Calculate the operation code and choose the // proper combination algorithm. // 0 = Both spans are of AA type // 1 = span1 is solid, span2 is AA // 2 = span1 is AA, span2 is solid // 3 = Both spans are of solid type //----------------- switch((span1->len < 0) | ((span2->len < 0) << 1)) { case 0: // Both are AA spans covers1 = span1->covers; covers2 = span2->covers; if(span1->x < x) covers1 += x - span1->x; if(span2->x < x) covers2 += x - span2->x; do { cover = *covers1++ * *covers2++; sl.add_cell(x++, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } while(--len); break; case 1: // span1 is solid, span2 is AA covers2 = span2->covers; if(span2->x < x) covers2 += x - span2->x; if(*(span1->covers) == cover_full) { sl.add_cells(x, len, covers2); } else { do { cover = *(span1->covers) * *covers2++; sl.add_cell(x++, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } while(--len); } break; case 2: // span1 is AA, span2 is solid covers1 = span1->covers; if(span1->x < x) covers1 += x - span1->x; if(*(span2->covers) == cover_full) { sl.add_cells(x, len, covers1); } else { do { cover = *covers1++ * *(span2->covers); sl.add_cell(x++, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } while(--len); } break; case 3: // Both are solid spans cover = *(span1->covers) * *(span2->covers); sl.add_span(x, len, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); break; } } }; //--------------------------------------------------sbool_unite_spans_aa // Functor. // Unite two spans preserving the anti-aliasing information. // The result is added to the "sl" scanline. //------------------ template struct sbool_unite_spans_aa { enum cover_scale_e { cover_shift = CoverShift, cover_size = 1 << cover_shift, cover_mask = cover_size - 1, cover_full = cover_mask }; void operator () (const typename Scanline1::const_iterator& span1, const typename Scanline2::const_iterator& span2, int x, unsigned len, Scanline& sl) const { unsigned cover; const typename Scanline1::cover_type* covers1; const typename Scanline2::cover_type* covers2; // Calculate the operation code and choose the // proper combination algorithm. // 0 = Both spans are of AA type // 1 = span1 is solid, span2 is AA // 2 = span1 is AA, span2 is solid // 3 = Both spans are of solid type //----------------- switch((span1->len < 0) | ((span2->len < 0) << 1)) { case 0: // Both are AA spans covers1 = span1->covers; covers2 = span2->covers; if(span1->x < x) covers1 += x - span1->x; if(span2->x < x) covers2 += x - span2->x; do { cover = cover_mask * cover_mask - (cover_mask - *covers1++) * (cover_mask - *covers2++); sl.add_cell(x++, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } while(--len); break; case 1: // span1 is solid, span2 is AA covers2 = span2->covers; if(span2->x < x) covers2 += x - span2->x; if(*(span1->covers) == cover_full) { sl.add_span(x, len, cover_full); } else { do { cover = cover_mask * cover_mask - (cover_mask - *(span1->covers)) * (cover_mask - *covers2++); sl.add_cell(x++, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } while(--len); } break; case 2: // span1 is AA, span2 is solid covers1 = span1->covers; if(span1->x < x) covers1 += x - span1->x; if(*(span2->covers) == cover_full) { sl.add_span(x, len, cover_full); } else { do { cover = cover_mask * cover_mask - (cover_mask - *covers1++) * (cover_mask - *(span2->covers)); sl.add_cell(x++, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } while(--len); } break; case 3: // Both are solid spans cover = cover_mask * cover_mask - (cover_mask - *(span1->covers)) * (cover_mask - *(span2->covers)); sl.add_span(x, len, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); break; } } }; //---------------------------------------------sbool_xor_formula_linear template struct sbool_xor_formula_linear { enum cover_scale_e { cover_shift = CoverShift, cover_size = 1 << cover_shift, cover_mask = cover_size - 1 }; static AGG_INLINE unsigned calculate(unsigned a, unsigned b) { unsigned cover = a + b; if(cover > cover_mask) cover = cover_mask + cover_mask - cover; return cover; } }; //---------------------------------------------sbool_xor_formula_saddle template struct sbool_xor_formula_saddle { enum cover_scale_e { cover_shift = CoverShift, cover_size = 1 << cover_shift, cover_mask = cover_size - 1 }; static AGG_INLINE unsigned calculate(unsigned a, unsigned b) { unsigned k = a * b; if(k == cover_mask * cover_mask) return 0; a = (cover_mask * cover_mask - (a << cover_shift) + k) >> cover_shift; b = (cover_mask * cover_mask - (b << cover_shift) + k) >> cover_shift; return cover_mask - ((a * b) >> cover_shift); } }; //-------------------------------------------sbool_xor_formula_abs_diff struct sbool_xor_formula_abs_diff { static AGG_INLINE unsigned calculate(unsigned a, unsigned b) { return unsigned(std::abs(int(a) - int(b))); } }; //----------------------------------------------------sbool_xor_spans_aa // Functor. // XOR two spans preserving the anti-aliasing information. // The result is added to the "sl" scanline. //------------------ template struct sbool_xor_spans_aa { enum cover_scale_e { cover_shift = CoverShift, cover_size = 1 << cover_shift, cover_mask = cover_size - 1, cover_full = cover_mask }; void operator () (const typename Scanline1::const_iterator& span1, const typename Scanline2::const_iterator& span2, int x, unsigned len, Scanline& sl) const { unsigned cover; const typename Scanline1::cover_type* covers1; const typename Scanline2::cover_type* covers2; // Calculate the operation code and choose the // proper combination algorithm. // 0 = Both spans are of AA type // 1 = span1 is solid, span2 is AA // 2 = span1 is AA, span2 is solid // 3 = Both spans are of solid type //----------------- switch((span1->len < 0) | ((span2->len < 0) << 1)) { case 0: // Both are AA spans covers1 = span1->covers; covers2 = span2->covers; if(span1->x < x) covers1 += x - span1->x; if(span2->x < x) covers2 += x - span2->x; do { cover = XorFormula::calculate(*covers1++, *covers2++); if(cover) sl.add_cell(x, cover); ++x; } while(--len); break; case 1: // span1 is solid, span2 is AA covers2 = span2->covers; if(span2->x < x) covers2 += x - span2->x; do { cover = XorFormula::calculate(*(span1->covers), *covers2++); if(cover) sl.add_cell(x, cover); ++x; } while(--len); break; case 2: // span1 is AA, span2 is solid covers1 = span1->covers; if(span1->x < x) covers1 += x - span1->x; do { cover = XorFormula::calculate(*covers1++, *(span2->covers)); if(cover) sl.add_cell(x, cover); ++x; } while(--len); break; case 3: // Both are solid spans cover = XorFormula::calculate(*(span1->covers), *(span2->covers)); if(cover) sl.add_span(x, len, cover); break; } } }; //-----------------------------------------------sbool_subtract_spans_aa // Functor. // Unite two spans preserving the anti-aliasing information. // The result is added to the "sl" scanline. //------------------ template struct sbool_subtract_spans_aa { enum cover_scale_e { cover_shift = CoverShift, cover_size = 1 << cover_shift, cover_mask = cover_size - 1, cover_full = cover_mask }; void operator () (const typename Scanline1::const_iterator& span1, const typename Scanline2::const_iterator& span2, int x, unsigned len, Scanline& sl) const { unsigned cover; const typename Scanline1::cover_type* covers1; const typename Scanline2::cover_type* covers2; // Calculate the operation code and choose the // proper combination algorithm. // 0 = Both spans are of AA type // 1 = span1 is solid, span2 is AA // 2 = span1 is AA, span2 is solid // 3 = Both spans are of solid type //----------------- switch((span1->len < 0) | ((span2->len < 0) << 1)) { case 0: // Both are AA spans covers1 = span1->covers; covers2 = span2->covers; if(span1->x < x) covers1 += x - span1->x; if(span2->x < x) covers2 += x - span2->x; do { cover = *covers1++ * (cover_mask - *covers2++); if(cover) { sl.add_cell(x, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } ++x; } while(--len); break; case 1: // span1 is solid, span2 is AA covers2 = span2->covers; if(span2->x < x) covers2 += x - span2->x; do { cover = *(span1->covers) * (cover_mask - *covers2++); if(cover) { sl.add_cell(x, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } ++x; } while(--len); break; case 2: // span1 is AA, span2 is solid covers1 = span1->covers; if(span1->x < x) covers1 += x - span1->x; if(*(span2->covers) != cover_full) { do { cover = *covers1++ * (cover_mask - *(span2->covers)); if(cover) { sl.add_cell(x, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } ++x; } while(--len); } break; case 3: // Both are solid spans cover = *(span1->covers) * (cover_mask - *(span2->covers)); if(cover) { sl.add_span(x, len, (cover == cover_full * cover_full) ? cover_full : (cover >> cover_shift)); } break; } } }; //--------------------------------------------sbool_add_spans_and_render template void sbool_add_spans_and_render(const Scanline1& sl1, Scanline& sl, Renderer& ren, AddSpanFunctor add_span) { sl.reset_spans(); typename Scanline1::const_iterator span = sl1.begin(); unsigned num_spans = sl1.num_spans(); for(;;) { add_span(span, span->x, std::abs((int)span->len), sl); if(--num_spans == 0) break; ++span; } sl.finalize(sl1.y()); ren.render(sl); } //---------------------------------------------sbool_intersect_scanlines // Intersect two scanlines, "sl1" and "sl2" and generate a new "sl" one. // The combine_spans functor can be of type sbool_combine_spans_bin or // sbool_intersect_spans_aa. First is a general functor to combine // two spans without Anti-Aliasing, the second preserves the AA // information, but works slower // template void sbool_intersect_scanlines(const Scanline1& sl1, const Scanline2& sl2, Scanline& sl, CombineSpansFunctor combine_spans) { sl.reset_spans(); unsigned num1 = sl1.num_spans(); if(num1 == 0) return; unsigned num2 = sl2.num_spans(); if(num2 == 0) return; typename Scanline1::const_iterator span1 = sl1.begin(); typename Scanline2::const_iterator span2 = sl2.begin(); while(num1 && num2) { int xb1 = span1->x; int xb2 = span2->x; int xe1 = xb1 + std::abs((int)span1->len) - 1; int xe2 = xb2 + std::abs((int)span2->len) - 1; // Determine what spans we should advance in the next step // The span with the least ending X should be advanced // advance_both is just an optimization when we ending // coordinates are the same and we can advance both //-------------- bool advance_span1 = xe1 < xe2; bool advance_both = xe1 == xe2; // Find the intersection of the spans // and check if they intersect //-------------- if(xb1 < xb2) xb1 = xb2; if(xe1 > xe2) xe1 = xe2; if(xb1 <= xe1) { combine_spans(span1, span2, xb1, xe1 - xb1 + 1, sl); } // Advance the spans //-------------- if(advance_both) { --num1; --num2; if(num1) ++span1; if(num2) ++span2; } else { if(advance_span1) { --num1; if(num1) ++span1; } else { --num2; if(num2) ++span2; } } } } //------------------------------------------------sbool_intersect_shapes // Intersect the scanline shapes. Here the "Scanline Generator" // abstraction is used. ScanlineGen1 and ScanlineGen2 are // the generators, and can be of type rasterizer_scanline_aa<>. // There function requires three scanline containers that can be of // different types. // "sl1" and "sl2" are used to retrieve scanlines from the generators, // "sl" is ised as the resulting scanline to render it. // The external "sl1" and "sl2" are used only for the sake of // optimization and reusing of the scanline objects. // the function calls sbool_intersect_scanlines with CombineSpansFunctor // as the last argument. See sbool_intersect_scanlines for details. //---------- template void sbool_intersect_shapes(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren, CombineSpansFunctor combine_spans) { // Prepare the scanline generators. // If anyone of them doesn't contain // any scanlines, then return. //----------------- if(!sg1.rewind_scanlines()) return; if(!sg2.rewind_scanlines()) return; // Get the bounding boxes //---------------- rect_i r1(sg1.min_x(), sg1.min_y(), sg1.max_x(), sg1.max_y()); rect_i r2(sg2.min_x(), sg2.min_y(), sg2.max_x(), sg2.max_y()); // Calculate the intersection of the bounding // boxes and return if they don't intersect. //----------------- rect_i ir = intersect_rectangles(r1, r2); if(!ir.is_valid()) return; // Reset the scanlines and get two first ones //----------------- sl.reset(ir.x1, ir.x2); sl1.reset(sg1.min_x(), sg1.max_x()); sl2.reset(sg2.min_x(), sg2.max_x()); if(!sg1.sweep_scanline(sl1)) return; if(!sg2.sweep_scanline(sl2)) return; ren.prepare(); // The main loop // Here we synchronize the scanlines with // the same Y coordinate, ignoring all other ones. // Only scanlines having the same Y-coordinate // are to be combined. //----------------- for(;;) { while(sl1.y() < sl2.y()) { if(!sg1.sweep_scanline(sl1)) return; } while(sl2.y() < sl1.y()) { if(!sg2.sweep_scanline(sl2)) return; } if(sl1.y() == sl2.y()) { // The Y coordinates are the same. // Combine the scanlines, render if they contain any spans, // and advance both generators to the next scanlines //---------------------- sbool_intersect_scanlines(sl1, sl2, sl, combine_spans); if(sl.num_spans()) { sl.finalize(sl1.y()); ren.render(sl); } if(!sg1.sweep_scanline(sl1)) return; if(!sg2.sweep_scanline(sl2)) return; } } } //-------------------------------------------------sbool_unite_scanlines // Unite two scanlines, "sl1" and "sl2" and generate a new "sl" one. // The combine_spans functor can be of type sbool_combine_spans_bin or // sbool_intersect_spans_aa. First is a general functor to combine // two spans without Anti-Aliasing, the second preserves the AA // information, but works slower // template void sbool_unite_scanlines(const Scanline1& sl1, const Scanline2& sl2, Scanline& sl, AddSpanFunctor1 add_span1, AddSpanFunctor2 add_span2, CombineSpansFunctor combine_spans) { sl.reset_spans(); unsigned num1 = sl1.num_spans(); unsigned num2 = sl2.num_spans(); typename Scanline1::const_iterator span1;// = sl1.begin(); typename Scanline2::const_iterator span2;// = sl2.begin(); enum invalidation_e { invalid_b = 0xFFFFFFF, invalid_e = invalid_b - 1 }; // Initialize the spans as invalid //--------------- int xb1 = invalid_b; int xb2 = invalid_b; int xe1 = invalid_e; int xe2 = invalid_e; // Initialize span1 if there are spans //--------------- if(num1) { span1 = sl1.begin(); xb1 = span1->x; xe1 = xb1 + std::abs((int)span1->len) - 1; --num1; } // Initialize span2 if there are spans //--------------- if(num2) { span2 = sl2.begin(); xb2 = span2->x; xe2 = xb2 + std::abs((int)span2->len) - 1; --num2; } for(;;) { // Retrieve a new span1 if it's invalid //---------------- if(num1 && xb1 > xe1) { --num1; ++span1; xb1 = span1->x; xe1 = xb1 + std::abs((int)span1->len) - 1; } // Retrieve a new span2 if it's invalid //---------------- if(num2 && xb2 > xe2) { --num2; ++span2; xb2 = span2->x; xe2 = xb2 + std::abs((int)span2->len) - 1; } if(xb1 > xe1 && xb2 > xe2) break; // Calculate the intersection //---------------- int xb = xb1; int xe = xe1; if(xb < xb2) xb = xb2; if(xe > xe2) xe = xe2; int len = xe - xb + 1; // The length of the intersection if(len > 0) { // The spans intersect, // add the beginning of the span //---------------- if(xb1 < xb2) { add_span1(span1, xb1, xb2 - xb1, sl); xb1 = xb2; } else if(xb2 < xb1) { add_span2(span2, xb2, xb1 - xb2, sl); xb2 = xb1; } // Add the combination part of the spans //---------------- combine_spans(span1, span2, xb, len, sl); // Invalidate the fully processed span or both //---------------- if(xe1 < xe2) { // Invalidate span1 and eat // the processed part of span2 //-------------- xb1 = invalid_b; xe1 = invalid_e; xb2 += len; } else if(xe2 < xe1) { // Invalidate span2 and eat // the processed part of span1 //-------------- xb2 = invalid_b; xe2 = invalid_e; xb1 += len; } else { xb1 = invalid_b; // Invalidate both xb2 = invalid_b; xe1 = invalid_e; xe2 = invalid_e; } } else { // The spans do not intersect //-------------- if(xb1 < xb2) { // Advance span1 //--------------- if(xb1 <= xe1) { add_span1(span1, xb1, xe1 - xb1 + 1, sl); } xb1 = invalid_b; // Invalidate xe1 = invalid_e; } else { // Advance span2 //--------------- if(xb2 <= xe2) { add_span2(span2, xb2, xe2 - xb2 + 1, sl); } xb2 = invalid_b; // Invalidate xe2 = invalid_e; } } } } //----------------------------------------------------sbool_unite_shapes // Unite the scanline shapes. Here the "Scanline Generator" // abstraction is used. ScanlineGen1 and ScanlineGen2 are // the generators, and can be of type rasterizer_scanline_aa<>. // There function requires three scanline containers that can be // of different type. // "sl1" and "sl2" are used to retrieve scanlines from the generators, // "sl" is ised as the resulting scanline to render it. // The external "sl1" and "sl2" are used only for the sake of // optimization and reusing of the scanline objects. // the function calls sbool_unite_scanlines with CombineSpansFunctor // as the last argument. See sbool_unite_scanlines for details. //---------- template void sbool_unite_shapes(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren, AddSpanFunctor1 add_span1, AddSpanFunctor2 add_span2, CombineSpansFunctor combine_spans) { // Prepare the scanline generators. // If anyone of them doesn't contain // any scanlines, then return. //----------------- bool flag1 = sg1.rewind_scanlines(); bool flag2 = sg2.rewind_scanlines(); if(!flag1 && !flag2) return; // Get the bounding boxes //---------------- rect_i r1(sg1.min_x(), sg1.min_y(), sg1.max_x(), sg1.max_y()); rect_i r2(sg2.min_x(), sg2.min_y(), sg2.max_x(), sg2.max_y()); // Calculate the union of the bounding boxes //----------------- rect_i ur(1,1,0,0); if(flag1 && flag2) ur = unite_rectangles(r1, r2); else if(flag1) ur = r1; else if(flag2) ur = r2; if(!ur.is_valid()) return; ren.prepare(); // Reset the scanlines and get two first ones //----------------- sl.reset(ur.x1, ur.x2); if(flag1) { sl1.reset(sg1.min_x(), sg1.max_x()); flag1 = sg1.sweep_scanline(sl1); } if(flag2) { sl2.reset(sg2.min_x(), sg2.max_x()); flag2 = sg2.sweep_scanline(sl2); } // The main loop // Here we synchronize the scanlines with // the same Y coordinate. //----------------- while(flag1 || flag2) { if(flag1 && flag2) { if(sl1.y() == sl2.y()) { // The Y coordinates are the same. // Combine the scanlines, render if they contain any spans, // and advance both generators to the next scanlines //---------------------- sbool_unite_scanlines(sl1, sl2, sl, add_span1, add_span2, combine_spans); if(sl.num_spans()) { sl.finalize(sl1.y()); ren.render(sl); } flag1 = sg1.sweep_scanline(sl1); flag2 = sg2.sweep_scanline(sl2); } else { if(sl1.y() < sl2.y()) { sbool_add_spans_and_render(sl1, sl, ren, add_span1); flag1 = sg1.sweep_scanline(sl1); } else { sbool_add_spans_and_render(sl2, sl, ren, add_span2); flag2 = sg2.sweep_scanline(sl2); } } } else { if(flag1) { sbool_add_spans_and_render(sl1, sl, ren, add_span1); flag1 = sg1.sweep_scanline(sl1); } if(flag2) { sbool_add_spans_and_render(sl2, sl, ren, add_span2); flag2 = sg2.sweep_scanline(sl2); } } } } //-------------------------------------------------sbool_subtract_shapes // Subtract the scanline shapes, "sg1-sg2". Here the "Scanline Generator" // abstraction is used. ScanlineGen1 and ScanlineGen2 are // the generators, and can be of type rasterizer_scanline_aa<>. // There function requires three scanline containers that can be of // different types. // "sl1" and "sl2" are used to retrieve scanlines from the generators, // "sl" is ised as the resulting scanline to render it. // The external "sl1" and "sl2" are used only for the sake of // optimization and reusing of the scanline objects. // the function calls sbool_intersect_scanlines with CombineSpansFunctor // as the last argument. See combine_scanlines_sub for details. //---------- template void sbool_subtract_shapes(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren, AddSpanFunctor1 add_span1, CombineSpansFunctor combine_spans) { // Prepare the scanline generators. // Here "sg1" is master, "sg2" is slave. //----------------- if(!sg1.rewind_scanlines()) return; bool flag2 = sg2.rewind_scanlines(); // Get the bounding box //---------------- rect_i r1(sg1.min_x(), sg1.min_y(), sg1.max_x(), sg1.max_y()); // Reset the scanlines and get two first ones //----------------- sl.reset(sg1.min_x(), sg1.max_x()); sl1.reset(sg1.min_x(), sg1.max_x()); sl2.reset(sg2.min_x(), sg2.max_x()); if(!sg1.sweep_scanline(sl1)) return; if(flag2) flag2 = sg2.sweep_scanline(sl2); ren.prepare(); // A fake span2 processor sbool_add_span_empty add_span2; // The main loop // Here we synchronize the scanlines with // the same Y coordinate, ignoring all other ones. // Only scanlines having the same Y-coordinate // are to be combined. //----------------- bool flag1 = true; do { // Synchronize "slave" with "master" //----------------- while(flag2 && sl2.y() < sl1.y()) { flag2 = sg2.sweep_scanline(sl2); } if(flag2 && sl2.y() == sl1.y()) { // The Y coordinates are the same. // Combine the scanlines and render if they contain any spans. //---------------------- sbool_unite_scanlines(sl1, sl2, sl, add_span1, add_span2, combine_spans); if(sl.num_spans()) { sl.finalize(sl1.y()); ren.render(sl); } } else { sbool_add_spans_and_render(sl1, sl, ren, add_span1); } // Advance the "master" flag1 = sg1.sweep_scanline(sl1); } while(flag1); } //---------------------------------------------sbool_intersect_shapes_aa // Intersect two anti-aliased scanline shapes. // Here the "Scanline Generator" abstraction is used. // ScanlineGen1 and ScanlineGen2 are the generators, and can be of // type rasterizer_scanline_aa<>. There function requires three // scanline containers that can be of different types. // "sl1" and "sl2" are used to retrieve scanlines from the generators, // "sl" is ised as the resulting scanline to render it. // The external "sl1" and "sl2" are used only for the sake of // optimization and reusing of the scanline objects. //---------- template void sbool_intersect_shapes_aa(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_intersect_spans_aa combine_functor; sbool_intersect_shapes(sg1, sg2, sl1, sl2, sl, ren, combine_functor); } //--------------------------------------------sbool_intersect_shapes_bin // Intersect two binary scanline shapes (without anti-aliasing). // See intersect_shapes_aa for more comments //---------- template void sbool_intersect_shapes_bin(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_combine_spans_bin combine_functor; sbool_intersect_shapes(sg1, sg2, sl1, sl2, sl, ren, combine_functor); } //-------------------------------------------------sbool_unite_shapes_aa // Unite two anti-aliased scanline shapes // See intersect_shapes_aa for more comments //---------- template void sbool_unite_shapes_aa(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_add_span_aa add_functor1; sbool_add_span_aa add_functor2; sbool_unite_spans_aa combine_functor; sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren, add_functor1, add_functor2, combine_functor); } //------------------------------------------------sbool_unite_shapes_bin // Unite two binary scanline shapes (without anti-aliasing). // See intersect_shapes_aa for more comments //---------- template void sbool_unite_shapes_bin(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_add_span_bin add_functor1; sbool_add_span_bin add_functor2; sbool_combine_spans_bin combine_functor; sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren, add_functor1, add_functor2, combine_functor); } //---------------------------------------------------sbool_xor_shapes_aa // Apply eXclusive OR to two anti-aliased scanline shapes. There's // a modified "Linear" XOR used instead of classical "Saddle" one. // The reason is to have the result absolutely conststent with what // the scanline rasterizer produces. // See intersect_shapes_aa for more comments //---------- template void sbool_xor_shapes_aa(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_add_span_aa add_functor1; sbool_add_span_aa add_functor2; sbool_xor_spans_aa > combine_functor; sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren, add_functor1, add_functor2, combine_functor); } //------------------------------------------sbool_xor_shapes_saddle_aa // Apply eXclusive OR to two anti-aliased scanline shapes. // There's the classical "Saddle" used to calculate the // Anti-Aliasing values, that is: // a XOR b : 1-((1-a+a*b)*(1-b+a*b)) // See intersect_shapes_aa for more comments //---------- template void sbool_xor_shapes_saddle_aa(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_add_span_aa add_functor1; sbool_add_span_aa add_functor2; sbool_xor_spans_aa > combine_functor; sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren, add_functor1, add_functor2, combine_functor); } //--------------------------------------sbool_xor_shapes_abs_diff_aa // Apply eXclusive OR to two anti-aliased scanline shapes. // There's the absolute difference used to calculate // Anti-Aliasing values, that is: // a XOR b : std::abs(a-b) // See intersect_shapes_aa for more comments //---------- template void sbool_xor_shapes_abs_diff_aa(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_add_span_aa add_functor1; sbool_add_span_aa add_functor2; sbool_xor_spans_aa combine_functor; sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren, add_functor1, add_functor2, combine_functor); } //--------------------------------------------------sbool_xor_shapes_bin // Apply eXclusive OR to two binary scanline shapes (without anti-aliasing). // See intersect_shapes_aa for more comments //---------- template void sbool_xor_shapes_bin(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_add_span_bin add_functor1; sbool_add_span_bin add_functor2; sbool_combine_spans_empty combine_functor; sbool_unite_shapes(sg1, sg2, sl1, sl2, sl, ren, add_functor1, add_functor2, combine_functor); } //----------------------------------------------sbool_subtract_shapes_aa // Subtract shapes "sg1-sg2" with anti-aliasing // See intersect_shapes_aa for more comments //---------- template void sbool_subtract_shapes_aa(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_add_span_aa add_functor; sbool_subtract_spans_aa combine_functor; sbool_subtract_shapes(sg1, sg2, sl1, sl2, sl, ren, add_functor, combine_functor); } //---------------------------------------------sbool_subtract_shapes_bin // Subtract binary shapes "sg1-sg2" without anti-aliasing // See intersect_shapes_aa for more comments //---------- template void sbool_subtract_shapes_bin(ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { sbool_add_span_bin add_functor; sbool_combine_spans_empty combine_functor; sbool_subtract_shapes(sg1, sg2, sl1, sl2, sl, ren, add_functor, combine_functor); } //------------------------------------------------------------sbool_op_e enum sbool_op_e { sbool_or, //----sbool_or sbool_and, //----sbool_and sbool_xor, //----sbool_xor sbool_xor_saddle, //----sbool_xor_saddle sbool_xor_abs_diff, //----sbool_xor_abs_diff sbool_a_minus_b, //----sbool_a_minus_b sbool_b_minus_a //----sbool_b_minus_a }; //----------------------------------------------sbool_combine_shapes_bin template void sbool_combine_shapes_bin(sbool_op_e op, ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { switch(op) { case sbool_or : sbool_unite_shapes_bin (sg1, sg2, sl1, sl2, sl, ren); break; case sbool_and : sbool_intersect_shapes_bin(sg1, sg2, sl1, sl2, sl, ren); break; case sbool_xor : case sbool_xor_saddle : case sbool_xor_abs_diff: sbool_xor_shapes_bin (sg1, sg2, sl1, sl2, sl, ren); break; case sbool_a_minus_b : sbool_subtract_shapes_bin (sg1, sg2, sl1, sl2, sl, ren); break; case sbool_b_minus_a : sbool_subtract_shapes_bin (sg2, sg1, sl2, sl1, sl, ren); break; } } //-----------------------------------------------sbool_combine_shapes_aa template void sbool_combine_shapes_aa(sbool_op_e op, ScanlineGen1& sg1, ScanlineGen2& sg2, Scanline1& sl1, Scanline2& sl2, Scanline& sl, Renderer& ren) { switch(op) { case sbool_or : sbool_unite_shapes_aa (sg1, sg2, sl1, sl2, sl, ren); break; case sbool_and : sbool_intersect_shapes_aa (sg1, sg2, sl1, sl2, sl, ren); break; case sbool_xor : sbool_xor_shapes_aa (sg1, sg2, sl1, sl2, sl, ren); break; case sbool_xor_saddle : sbool_xor_shapes_saddle_aa (sg1, sg2, sl1, sl2, sl, ren); break; case sbool_xor_abs_diff: sbool_xor_shapes_abs_diff_aa(sg1, sg2, sl1, sl2, sl, ren); break; case sbool_a_minus_b : sbool_subtract_shapes_aa (sg1, sg2, sl1, sl2, sl, ren); break; case sbool_b_minus_a : sbool_subtract_shapes_aa (sg2, sg1, sl2, sl1, sl, ren); break; } } } #endif mapnik-3.0.9/deps/agg/include/agg_scanline_p.h000066400000000000000000000243531262555547000212420ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Class scanline_p - a general purpose scanline container with packed spans. // //---------------------------------------------------------------------------- // // Adaptation for 32-bit screen coordinates (scanline32_p) has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SCANLINE_P_INCLUDED #define AGG_SCANLINE_P_INCLUDED #include "agg_array.h" namespace agg { //=============================================================scanline_p8 // // This is a general purpose scaline container which supports the interface // used in the rasterizer::render(). See description of scanline_u8 // for details. // //------------------------------------------------------------------------ class scanline_p8 { public: typedef scanline_p8 self_type; typedef int8u cover_type; typedef int16 coord_type; //-------------------------------------------------------------------- struct span { coord_type x; coord_type len; // If negative, it's a solid span, covers is valid const cover_type* covers; }; typedef span* iterator; typedef const span* const_iterator; scanline_p8() : m_last_x(0x7FFFFFF0), m_covers(), m_cover_ptr(0), m_spans(), m_cur_span(0) { } //-------------------------------------------------------------------- void reset(int min_x, int max_x) { unsigned max_len = max_x - min_x + 3; if(max_len > m_spans.size()) { m_spans.resize(max_len); m_covers.resize(max_len); } m_last_x = 0x7FFFFFF0; m_cover_ptr = &m_covers[0]; m_cur_span = &m_spans[0]; m_cur_span->len = 0; } //-------------------------------------------------------------------- void add_cell(int x, unsigned cover) { *m_cover_ptr = (cover_type)cover; if(x == m_last_x+1 && m_cur_span->len > 0) { m_cur_span->len++; } else { m_cur_span++; m_cur_span->covers = m_cover_ptr; m_cur_span->x = (int16)x; m_cur_span->len = 1; } m_last_x = x; m_cover_ptr++; } //-------------------------------------------------------------------- void add_cells(int x, unsigned len, const cover_type* covers) { memcpy(m_cover_ptr, covers, len * sizeof(cover_type)); if(x == m_last_x+1 && m_cur_span->len > 0) { m_cur_span->len += (int16)len; } else { m_cur_span++; m_cur_span->covers = m_cover_ptr; m_cur_span->x = (int16)x; m_cur_span->len = (int16)len; } m_cover_ptr += len; m_last_x = x + len - 1; } //-------------------------------------------------------------------- void add_span(int x, unsigned len, unsigned cover) { if(x == m_last_x+1 && m_cur_span->len < 0 && cover == *m_cur_span->covers) { m_cur_span->len -= (int16)len; } else { *m_cover_ptr = (cover_type)cover; m_cur_span++; m_cur_span->covers = m_cover_ptr++; m_cur_span->x = (int16)x; m_cur_span->len = (int16)(-int(len)); } m_last_x = x + len - 1; } //-------------------------------------------------------------------- void finalize(int y) { m_y = y; } //-------------------------------------------------------------------- void reset_spans() { m_last_x = 0x7FFFFFF0; m_cover_ptr = &m_covers[0]; m_cur_span = &m_spans[0]; m_cur_span->len = 0; } //-------------------------------------------------------------------- int y() const { return m_y; } unsigned num_spans() const { return unsigned(m_cur_span - &m_spans[0]); } const_iterator begin() const { return &m_spans[1]; } private: scanline_p8(const self_type&); const self_type& operator = (const self_type&); int m_last_x; int m_y; pod_array m_covers; cover_type* m_cover_ptr; pod_array m_spans; span* m_cur_span; }; //==========================================================scanline32_p8 class scanline32_p8 { public: typedef scanline32_p8 self_type; typedef int8u cover_type; typedef int32 coord_type; struct span { span() {} span(coord_type x_, coord_type len_, const cover_type* covers_) : x(x_), len(len_), covers(covers_) {} coord_type x; coord_type len; // If negative, it's a solid span, covers is valid const cover_type* covers; }; typedef pod_bvector span_array_type; //-------------------------------------------------------------------- class const_iterator { public: const_iterator(const span_array_type& spans) : m_spans(spans), m_span_idx(0) {} const span& operator*() const { return m_spans[m_span_idx]; } const span* operator->() const { return &m_spans[m_span_idx]; } void operator ++ () { ++m_span_idx; } private: const span_array_type& m_spans; unsigned m_span_idx; }; //-------------------------------------------------------------------- scanline32_p8() : m_max_len(0), m_last_x(0x7FFFFFF0), m_covers(), m_cover_ptr(0) { } //-------------------------------------------------------------------- void reset(int min_x, int max_x) { unsigned max_len = max_x - min_x + 3; if(max_len > m_covers.size()) { m_covers.resize(max_len); } m_last_x = 0x7FFFFFF0; m_cover_ptr = &m_covers[0]; m_spans.remove_all(); } //-------------------------------------------------------------------- void add_cell(int x, unsigned cover) { *m_cover_ptr = cover_type(cover); if(x == m_last_x+1 && m_spans.size() && m_spans.last().len > 0) { m_spans.last().len++; } else { m_spans.add(span(coord_type(x), 1, m_cover_ptr)); } m_last_x = x; m_cover_ptr++; } //-------------------------------------------------------------------- void add_cells(int x, unsigned len, const cover_type* covers) { memcpy(m_cover_ptr, covers, len * sizeof(cover_type)); if(x == m_last_x+1 && m_spans.size() && m_spans.last().len > 0) { m_spans.last().len += coord_type(len); } else { m_spans.add(span(coord_type(x), coord_type(len), m_cover_ptr)); } m_cover_ptr += len; m_last_x = x + len - 1; } //-------------------------------------------------------------------- void add_span(int x, unsigned len, unsigned cover) { if(x == m_last_x+1 && m_spans.size() && m_spans.last().len < 0 && cover == *m_spans.last().covers) { m_spans.last().len -= coord_type(len); } else { *m_cover_ptr = cover_type(cover); m_spans.add(span(coord_type(x), -coord_type(len), m_cover_ptr++)); } m_last_x = x + len - 1; } //-------------------------------------------------------------------- void finalize(int y) { m_y = y; } //-------------------------------------------------------------------- void reset_spans() { m_last_x = 0x7FFFFFF0; m_cover_ptr = &m_covers[0]; m_spans.remove_all(); } //-------------------------------------------------------------------- int y() const { return m_y; } unsigned num_spans() const { return m_spans.size(); } const_iterator begin() const { return const_iterator(m_spans); } private: scanline32_p8(const self_type&); const self_type& operator = (const self_type&); unsigned m_max_len; int m_last_x; int m_y; pod_array m_covers; cover_type* m_cover_ptr; span_array_type m_spans; }; } #endif mapnik-3.0.9/deps/agg/include/agg_scanline_storage_aa.h000066400000000000000000000634341262555547000231130ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for 32-bit screen coordinates has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SCANLINE_STORAGE_AA_INCLUDED #define AGG_SCANLINE_STORAGE_AA_INCLUDED #include #include #include #include "agg_array.h" namespace agg { //----------------------------------------------scanline_cell_storage template class scanline_cell_storage { struct extra_span { unsigned len; T* ptr; }; public: typedef T value_type; //--------------------------------------------------------------- ~scanline_cell_storage() { remove_all(); } //--------------------------------------------------------------- scanline_cell_storage() : m_cells(128-2), m_extra_storage() {} // Copying //--------------------------------------------------------------- scanline_cell_storage(const scanline_cell_storage& v) : m_cells(v.m_cells), m_extra_storage() { copy_extra_storage(v); } //--------------------------------------------------------------- const scanline_cell_storage& operator = (const scanline_cell_storage& v) { remove_all(); m_cells = v.m_cells; copy_extra_storage(v); return *this; } //--------------------------------------------------------------- void remove_all() { int i; for(i = m_extra_storage.size()-1; i >= 0; --i) { pod_allocator::deallocate(m_extra_storage[i].ptr, m_extra_storage[i].len); } m_extra_storage.remove_all(); m_cells.remove_all(); } //--------------------------------------------------------------- int add_cells(const T* cells, unsigned num_cells) { int idx = m_cells.allocate_continuous_block(num_cells); if(idx >= 0) { T* ptr = &m_cells[idx]; memcpy(ptr, cells, sizeof(T) * num_cells); return idx; } extra_span s; s.len = num_cells; s.ptr = pod_allocator::allocate(num_cells); memcpy(s.ptr, cells, sizeof(T) * num_cells); m_extra_storage.add(s); return -int(m_extra_storage.size()); } //--------------------------------------------------------------- const T* operator [] (int idx) const { if(idx >= 0) { if((unsigned)idx >= m_cells.size()) return 0; return &m_cells[(unsigned)idx]; } unsigned i = unsigned(-idx - 1); if(i >= m_extra_storage.size()) return 0; return m_extra_storage[i].ptr; } //--------------------------------------------------------------- T* operator [] (int idx) { if(idx >= 0) { if((unsigned)idx >= m_cells.size()) return 0; return &m_cells[(unsigned)idx]; } unsigned i = unsigned(-idx - 1); if(i >= m_extra_storage.size()) return 0; return m_extra_storage[i].ptr; } private: void copy_extra_storage(const scanline_cell_storage& v) { unsigned i; for(i = 0; i < v.m_extra_storage.size(); ++i) { const extra_span& src = v.m_extra_storage[i]; extra_span dst; dst.len = src.len; dst.ptr = pod_allocator::allocate(dst.len); memcpy(dst.ptr, src.ptr, dst.len * sizeof(T)); m_extra_storage.add(dst); } } pod_bvector m_cells; pod_bvector m_extra_storage; }; //-----------------------------------------------scanline_storage_aa template class scanline_storage_aa { public: typedef T cover_type; //--------------------------------------------------------------- struct span_data { int32 x; int32 len; // If negative, it's a solid span, covers is valid int covers_id; // The index of the cells in the scanline_cell_storage }; //--------------------------------------------------------------- struct scanline_data { int y; unsigned num_spans; unsigned start_span; }; //--------------------------------------------------------------- class embedded_scanline { public: //----------------------------------------------------------- class const_iterator { public: struct span { int32 x; int32 len; // If negative, it's a solid span, covers is valid const T* covers; }; const_iterator() : m_storage(0) {} const_iterator(const embedded_scanline& sl) : m_storage(sl.m_storage), m_span_idx(sl.m_scanline.start_span) { init_span(); } const span& operator*() const { return m_span; } const span* operator->() const { return &m_span; } void operator ++ () { ++m_span_idx; init_span(); } private: void init_span() { const span_data& s = m_storage->span_by_index(m_span_idx); m_span.x = s.x; m_span.len = s.len; m_span.covers = m_storage->covers_by_index(s.covers_id); } const scanline_storage_aa* m_storage; unsigned m_span_idx; span m_span; }; friend class const_iterator; //----------------------------------------------------------- embedded_scanline(const scanline_storage_aa& storage) : m_storage(&storage) { init(0); } //----------------------------------------------------------- void reset(int, int) {} unsigned num_spans() const { return m_scanline.num_spans; } int y() const { return m_scanline.y; } const_iterator begin() const { return const_iterator(*this); } //----------------------------------------------------------- void init(unsigned scanline_idx) { m_scanline_idx = scanline_idx; m_scanline = m_storage->scanline_by_index(m_scanline_idx); } private: const scanline_storage_aa* m_storage; scanline_data m_scanline; unsigned m_scanline_idx; }; //--------------------------------------------------------------- scanline_storage_aa() : m_covers(), m_spans(256-2), // Block increment size m_scanlines(), m_min_x( 0x7FFFFFFF), m_min_y( 0x7FFFFFFF), m_max_x(-0x7FFFFFFF), m_max_y(-0x7FFFFFFF), m_cur_scanline(0) { m_fake_scanline.y = 0; m_fake_scanline.num_spans = 0; m_fake_scanline.start_span = 0; m_fake_span.x = 0; m_fake_span.len = 0; m_fake_span.covers_id = 0; } // Renderer Interface //--------------------------------------------------------------- void prepare() { m_covers.remove_all(); m_scanlines.remove_all(); m_spans.remove_all(); m_min_x = 0x7FFFFFFF; m_min_y = 0x7FFFFFFF; m_max_x = -0x7FFFFFFF; m_max_y = -0x7FFFFFFF; m_cur_scanline = 0; } //--------------------------------------------------------------- template void render(const Scanline& sl) { scanline_data sl_this; int y = sl.y(); if(y < m_min_y) m_min_y = y; if(y > m_max_y) m_max_y = y; sl_this.y = y; sl_this.num_spans = sl.num_spans(); sl_this.start_span = m_spans.size(); typename Scanline::const_iterator span_iterator = sl.begin(); unsigned num_spans = sl_this.num_spans; for(;;) { span_data sp; sp.x = span_iterator->x; sp.len = span_iterator->len; int len = std::abs(int(sp.len)); sp.covers_id = m_covers.add_cells(span_iterator->covers, unsigned(len)); m_spans.add(sp); int x1 = sp.x; int x2 = sp.x + len - 1; if(x1 < m_min_x) m_min_x = x1; if(x2 > m_max_x) m_max_x = x2; if(--num_spans == 0) break; ++span_iterator; } m_scanlines.add(sl_this); } //--------------------------------------------------------------- // Iterate scanlines interface int min_x() const { return m_min_x; } int min_y() const { return m_min_y; } int max_x() const { return m_max_x; } int max_y() const { return m_max_y; } //--------------------------------------------------------------- bool rewind_scanlines() { m_cur_scanline = 0; return m_scanlines.size() > 0; } //--------------------------------------------------------------- template bool sweep_scanline(Scanline& sl) { sl.reset_spans(); for(;;) { if(m_cur_scanline >= m_scanlines.size()) return false; const scanline_data& sl_this = m_scanlines[m_cur_scanline]; unsigned num_spans = sl_this.num_spans; unsigned span_idx = sl_this.start_span; do { const span_data& sp = m_spans[span_idx++]; const T* covers = covers_by_index(sp.covers_id); if(sp.len < 0) { sl.add_span(sp.x, unsigned(-sp.len), *covers); } else { sl.add_cells(sp.x, sp.len, covers); } } while(--num_spans); ++m_cur_scanline; if(sl.num_spans()) { sl.finalize(sl_this.y); break; } } return true; } //--------------------------------------------------------------- // Specialization for embedded_scanline bool sweep_scanline(embedded_scanline& sl) { do { if(m_cur_scanline >= m_scanlines.size()) return false; sl.init(m_cur_scanline); ++m_cur_scanline; } while(sl.num_spans() == 0); return true; } //--------------------------------------------------------------- unsigned byte_size() const { unsigned i; unsigned size = sizeof(int32) * 4; // min_x, min_y, max_x, max_y for(i = 0; i < m_scanlines.size(); ++i) { size += sizeof(int32) * 3; // scanline size in bytes, Y, num_spans const scanline_data& sl_this = m_scanlines[i]; unsigned num_spans = sl_this.num_spans; unsigned span_idx = sl_this.start_span; do { const span_data& sp = m_spans[span_idx++]; size += sizeof(int32) * 2; // X, span_len if(sp.len < 0) { size += sizeof(T); // cover } else { size += sizeof(T) * unsigned(sp.len); // covers } } while(--num_spans); } return size; } //--------------------------------------------------------------- static void write_int32(int8u* dst, int32 val) { dst[0] = ((const int8u*)&val)[0]; dst[1] = ((const int8u*)&val)[1]; dst[2] = ((const int8u*)&val)[2]; dst[3] = ((const int8u*)&val)[3]; } //--------------------------------------------------------------- void serialize(int8u* data) const { unsigned i; write_int32(data, min_x()); // min_x data += sizeof(int32); write_int32(data, min_y()); // min_y data += sizeof(int32); write_int32(data, max_x()); // max_x data += sizeof(int32); write_int32(data, max_y()); // max_y data += sizeof(int32); for(i = 0; i < m_scanlines.size(); ++i) { const scanline_data& sl_this = m_scanlines[i]; int8u* size_ptr = data; data += sizeof(int32); // Reserve space for scanline size in bytes write_int32(data, sl_this.y); // Y data += sizeof(int32); write_int32(data, sl_this.num_spans); // num_spans data += sizeof(int32); unsigned num_spans = sl_this.num_spans; unsigned span_idx = sl_this.start_span; do { const span_data& sp = m_spans[span_idx++]; const T* covers = covers_by_index(sp.covers_id); write_int32(data, sp.x); // X data += sizeof(int32); write_int32(data, sp.len); // span_len data += sizeof(int32); if(sp.len < 0) { memcpy(data, covers, sizeof(T)); data += sizeof(T); } else { memcpy(data, covers, unsigned(sp.len) * sizeof(T)); data += sizeof(T) * unsigned(sp.len); } } while(--num_spans); write_int32(size_ptr, int32(unsigned(data - size_ptr))); } } //--------------------------------------------------------------- const scanline_data& scanline_by_index(unsigned i) const { return (i < m_scanlines.size()) ? m_scanlines[i] : m_fake_scanline; } //--------------------------------------------------------------- const span_data& span_by_index(unsigned i) const { return (i < m_spans.size()) ? m_spans[i] : m_fake_span; } //--------------------------------------------------------------- const T* covers_by_index(int i) const { return m_covers[i]; } private: scanline_cell_storage m_covers; pod_bvector m_spans; pod_bvector m_scanlines; span_data m_fake_span; scanline_data m_fake_scanline; int m_min_x; int m_min_y; int m_max_x; int m_max_y; unsigned m_cur_scanline; }; typedef scanline_storage_aa scanline_storage_aa8; //--------scanline_storage_aa8 typedef scanline_storage_aa scanline_storage_aa16; //--------scanline_storage_aa16 typedef scanline_storage_aa scanline_storage_aa32; //--------scanline_storage_aa32 //------------------------------------------serialized_scanlines_adaptor_aa template class serialized_scanlines_adaptor_aa { public: typedef T cover_type; //--------------------------------------------------------------------- class embedded_scanline { public: typedef T cover_type; //----------------------------------------------------------------- class const_iterator { public: struct span { int32 x; int32 len; // If negative, it's a solid span, "covers" is valid const T* covers; }; const_iterator() : m_ptr(0) {} const_iterator(const embedded_scanline& sl) : m_ptr(sl.m_ptr), m_dx(sl.m_dx) { init_span(); } const span& operator*() const { return m_span; } const span* operator->() const { return &m_span; } void operator ++ () { if(m_span.len < 0) { m_ptr += sizeof(T); } else { m_ptr += m_span.len * sizeof(T); } init_span(); } private: int read_int32() { int32 val; ((int8u*)&val)[0] = *m_ptr++; ((int8u*)&val)[1] = *m_ptr++; ((int8u*)&val)[2] = *m_ptr++; ((int8u*)&val)[3] = *m_ptr++; return val; } void init_span() { m_span.x = read_int32() + m_dx; m_span.len = read_int32(); m_span.covers = m_ptr; } const int8u* m_ptr; span m_span; int m_dx; }; friend class const_iterator; //----------------------------------------------------------------- embedded_scanline() : m_ptr(0), m_y(0), m_num_spans(0) {} //----------------------------------------------------------------- void reset(int, int) {} unsigned num_spans() const { return m_num_spans; } int y() const { return m_y; } const_iterator begin() const { return const_iterator(*this); } private: //----------------------------------------------------------------- int read_int32() { int32 val; ((int8u*)&val)[0] = *m_ptr++; ((int8u*)&val)[1] = *m_ptr++; ((int8u*)&val)[2] = *m_ptr++; ((int8u*)&val)[3] = *m_ptr++; return val; } public: //----------------------------------------------------------------- void init(const int8u* ptr, int dx, int dy) { m_ptr = ptr; m_y = read_int32() + dy; m_num_spans = unsigned(read_int32()); m_dx = dx; } private: const int8u* m_ptr; int m_y; unsigned m_num_spans; int m_dx; }; public: //-------------------------------------------------------------------- serialized_scanlines_adaptor_aa() : m_data(0), m_end(0), m_ptr(0), m_dx(0), m_dy(0), m_min_x(0x7FFFFFFF), m_min_y(0x7FFFFFFF), m_max_x(-0x7FFFFFFF), m_max_y(-0x7FFFFFFF) {} //-------------------------------------------------------------------- serialized_scanlines_adaptor_aa(const int8u* data, unsigned size, double dx, double dy) : m_data(data), m_end(data + size), m_ptr(data), m_dx(iround(dx)), m_dy(iround(dy)), m_min_x(0x7FFFFFFF), m_min_y(0x7FFFFFFF), m_max_x(-0x7FFFFFFF), m_max_y(-0x7FFFFFFF) {} //-------------------------------------------------------------------- void init(const int8u* data, unsigned size, double dx, double dy) { m_data = data; m_end = data + size; m_ptr = data; m_dx = iround(dx); m_dy = iround(dy); m_min_x = 0x7FFFFFFF; m_min_y = 0x7FFFFFFF; m_max_x = -0x7FFFFFFF; m_max_y = -0x7FFFFFFF; } private: //-------------------------------------------------------------------- int read_int32() { int32 val; ((int8u*)&val)[0] = *m_ptr++; ((int8u*)&val)[1] = *m_ptr++; ((int8u*)&val)[2] = *m_ptr++; ((int8u*)&val)[3] = *m_ptr++; return val; } //-------------------------------------------------------------------- unsigned read_int32u() { int32u val; ((int8u*)&val)[0] = *m_ptr++; ((int8u*)&val)[1] = *m_ptr++; ((int8u*)&val)[2] = *m_ptr++; ((int8u*)&val)[3] = *m_ptr++; return val; } public: // Iterate scanlines interface //-------------------------------------------------------------------- bool rewind_scanlines() { m_ptr = m_data; if(m_ptr < m_end) { m_min_x = read_int32() + m_dx; m_min_y = read_int32() + m_dy; m_max_x = read_int32() + m_dx; m_max_y = read_int32() + m_dy; } return m_ptr < m_end; } //-------------------------------------------------------------------- int min_x() const { return m_min_x; } int min_y() const { return m_min_y; } int max_x() const { return m_max_x; } int max_y() const { return m_max_y; } //-------------------------------------------------------------------- template bool sweep_scanline(Scanline& sl) { sl.reset_spans(); for(;;) { if(m_ptr >= m_end) return false; read_int32(); // Skip scanline size in bytes int y = read_int32() + m_dy; unsigned num_spans = read_int32(); do { int x = read_int32() + m_dx; int len = read_int32(); if(len < 0) { sl.add_span(x, unsigned(-len), *m_ptr); m_ptr += sizeof(T); } else { sl.add_cells(x, len, m_ptr); m_ptr += len * sizeof(T); } } while(--num_spans); if(sl.num_spans()) { sl.finalize(y); break; } } return true; } //-------------------------------------------------------------------- // Specialization for embedded_scanline bool sweep_scanline(embedded_scanline& sl) { do { if(m_ptr >= m_end) return false; unsigned byte_size = read_int32u(); sl.init(m_ptr, m_dx, m_dy); m_ptr += byte_size - sizeof(int32); } while(sl.num_spans() == 0); return true; } private: const int8u* m_data; const int8u* m_end; const int8u* m_ptr; int m_dx; int m_dy; int m_min_x; int m_min_y; int m_max_x; int m_max_y; }; typedef serialized_scanlines_adaptor_aa serialized_scanlines_adaptor_aa8; //----serialized_scanlines_adaptor_aa8 typedef serialized_scanlines_adaptor_aa serialized_scanlines_adaptor_aa16; //----serialized_scanlines_adaptor_aa16 typedef serialized_scanlines_adaptor_aa serialized_scanlines_adaptor_aa32; //----serialized_scanlines_adaptor_aa32 } #endif mapnik-3.0.9/deps/agg/include/agg_scanline_storage_bin.h000066400000000000000000000434611262555547000233000ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for 32-bit screen coordinates has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SCANLINE_STORAGE_BIN_INCLUDED #define AGG_SCANLINE_STORAGE_BIN_INCLUDED #include #include #include #include "agg_array.h" namespace agg { //-----------------------------------------------scanline_storage_bin class scanline_storage_bin { public: //--------------------------------------------------------------- struct span_data { int32 x; int32 len; }; //--------------------------------------------------------------- struct scanline_data { int y; unsigned num_spans; unsigned start_span; }; //--------------------------------------------------------------- class embedded_scanline { public: //----------------------------------------------------------- class const_iterator { public: const_iterator() : m_storage(0) {} const_iterator(const embedded_scanline& sl) : m_storage(sl.m_storage), m_span_idx(sl.m_scanline.start_span) { m_span = m_storage->span_by_index(m_span_idx); } const span_data& operator*() const { return m_span; } const span_data* operator->() const { return &m_span; } void operator ++ () { ++m_span_idx; m_span = m_storage->span_by_index(m_span_idx); } private: const scanline_storage_bin* m_storage; unsigned m_span_idx; span_data m_span; }; friend class const_iterator; //----------------------------------------------------------- embedded_scanline(const scanline_storage_bin& storage) : m_storage(&storage) { setup(0); } //----------------------------------------------------------- void reset(int, int) {} unsigned num_spans() const { return m_scanline.num_spans; } int y() const { return m_scanline.y; } const_iterator begin() const { return const_iterator(*this); } //----------------------------------------------------------- void setup(unsigned scanline_idx) { m_scanline_idx = scanline_idx; m_scanline = m_storage->scanline_by_index(m_scanline_idx); } private: const scanline_storage_bin* m_storage; scanline_data m_scanline; unsigned m_scanline_idx; }; //--------------------------------------------------------------- scanline_storage_bin() : m_spans(256-2), // Block increment size m_scanlines(), m_min_x( 0x7FFFFFFF), m_min_y( 0x7FFFFFFF), m_max_x(-0x7FFFFFFF), m_max_y(-0x7FFFFFFF), m_cur_scanline(0) { m_fake_scanline.y = 0; m_fake_scanline.num_spans = 0; m_fake_scanline.start_span = 0; m_fake_span.x = 0; m_fake_span.len = 0; } // Renderer Interface //--------------------------------------------------------------- void prepare() { m_scanlines.remove_all(); m_spans.remove_all(); m_min_x = 0x7FFFFFFF; m_min_y = 0x7FFFFFFF; m_max_x = -0x7FFFFFFF; m_max_y = -0x7FFFFFFF; m_cur_scanline = 0; } //--------------------------------------------------------------- template void render(const Scanline& sl) { scanline_data sl_this; int y = sl.y(); if(y < m_min_y) m_min_y = y; if(y > m_max_y) m_max_y = y; sl_this.y = y; sl_this.num_spans = sl.num_spans(); sl_this.start_span = m_spans.size(); typename Scanline::const_iterator span_iterator = sl.begin(); unsigned num_spans = sl_this.num_spans; for(;;) { span_data sp; sp.x = span_iterator->x; sp.len = (int32)abs((int)(span_iterator->len)); m_spans.add(sp); int x1 = sp.x; int x2 = sp.x + sp.len - 1; if(x1 < m_min_x) m_min_x = x1; if(x2 > m_max_x) m_max_x = x2; if(--num_spans == 0) break; ++span_iterator; } m_scanlines.add(sl_this); } //--------------------------------------------------------------- // Iterate scanlines interface int min_x() const { return m_min_x; } int min_y() const { return m_min_y; } int max_x() const { return m_max_x; } int max_y() const { return m_max_y; } //--------------------------------------------------------------- bool rewind_scanlines() { m_cur_scanline = 0; return m_scanlines.size() > 0; } //--------------------------------------------------------------- template bool sweep_scanline(Scanline& sl) { sl.reset_spans(); for(;;) { if(m_cur_scanline >= m_scanlines.size()) return false; const scanline_data& sl_this = m_scanlines[m_cur_scanline]; unsigned num_spans = sl_this.num_spans; unsigned span_idx = sl_this.start_span; do { const span_data& sp = m_spans[span_idx++]; sl.add_span(sp.x, sp.len, cover_full); } while(--num_spans); ++m_cur_scanline; if(sl.num_spans()) { sl.finalize(sl_this.y); break; } } return true; } //--------------------------------------------------------------- // Specialization for embedded_scanline bool sweep_scanline(embedded_scanline& sl) { do { if(m_cur_scanline >= m_scanlines.size()) return false; sl.setup(m_cur_scanline); ++m_cur_scanline; } while(sl.num_spans() == 0); return true; } //--------------------------------------------------------------- unsigned byte_size() const { unsigned i; unsigned size = sizeof(int32) * 4; // min_x, min_y, max_x, max_y for(i = 0; i < m_scanlines.size(); ++i) { size += sizeof(int32) * 2 + // Y, num_spans unsigned(m_scanlines[i].num_spans) * sizeof(int32) * 2; // X, span_len } return size; } //--------------------------------------------------------------- static void write_int32(int8u* dst, int32 val) { dst[0] = ((const int8u*)&val)[0]; dst[1] = ((const int8u*)&val)[1]; dst[2] = ((const int8u*)&val)[2]; dst[3] = ((const int8u*)&val)[3]; } //--------------------------------------------------------------- void serialize(int8u* data) const { unsigned i; write_int32(data, min_x()); // min_x data += sizeof(int32); write_int32(data, min_y()); // min_y data += sizeof(int32); write_int32(data, max_x()); // max_x data += sizeof(int32); write_int32(data, max_y()); // max_y data += sizeof(int32); for(i = 0; i < m_scanlines.size(); ++i) { const scanline_data& sl_this = m_scanlines[i]; write_int32(data, sl_this.y); // Y data += sizeof(int32); write_int32(data, sl_this.num_spans); // num_spans data += sizeof(int32); unsigned num_spans = sl_this.num_spans; unsigned span_idx = sl_this.start_span; do { const span_data& sp = m_spans[span_idx++]; write_int32(data, sp.x); // X data += sizeof(int32); write_int32(data, sp.len); // len data += sizeof(int32); } while(--num_spans); } } //--------------------------------------------------------------- const scanline_data& scanline_by_index(unsigned i) const { return (i < m_scanlines.size()) ? m_scanlines[i] : m_fake_scanline; } //--------------------------------------------------------------- const span_data& span_by_index(unsigned i) const { return (i < m_spans.size()) ? m_spans[i] : m_fake_span; } private: pod_bvector m_spans; pod_bvector m_scanlines; span_data m_fake_span; scanline_data m_fake_scanline; int m_min_x; int m_min_y; int m_max_x; int m_max_y; unsigned m_cur_scanline; }; //---------------------------------------serialized_scanlines_adaptor_bin class serialized_scanlines_adaptor_bin { public: typedef bool cover_type; //-------------------------------------------------------------------- class embedded_scanline { public: //---------------------------------------------------------------- class const_iterator { public: struct span { int32 x; int32 len; }; const_iterator() : m_ptr(0) {} const_iterator(const embedded_scanline& sl) : m_ptr(sl.m_ptr), m_dx(sl.m_dx) { m_span.x = read_int32() + m_dx; m_span.len = read_int32(); } const span& operator*() const { return m_span; } const span* operator->() const { return &m_span; } void operator ++ () { m_span.x = read_int32() + m_dx; m_span.len = read_int32(); } private: int read_int32() { int32 val; ((int8u*)&val)[0] = *m_ptr++; ((int8u*)&val)[1] = *m_ptr++; ((int8u*)&val)[2] = *m_ptr++; ((int8u*)&val)[3] = *m_ptr++; return val; } const int8u* m_ptr; span m_span; int m_dx; }; friend class const_iterator; //---------------------------------------------------------------- embedded_scanline() : m_ptr(0), m_y(0), m_num_spans(0) {} //---------------------------------------------------------------- void reset(int, int) {} unsigned num_spans() const { return m_num_spans; } int y() const { return m_y; } const_iterator begin() const { return const_iterator(*this); } private: //---------------------------------------------------------------- int read_int32() { int32 val; ((int8u*)&val)[0] = *m_ptr++; ((int8u*)&val)[1] = *m_ptr++; ((int8u*)&val)[2] = *m_ptr++; ((int8u*)&val)[3] = *m_ptr++; return val; } public: //---------------------------------------------------------------- void init(const int8u* ptr, int dx, int dy) { m_ptr = ptr; m_y = read_int32() + dy; m_num_spans = unsigned(read_int32()); m_dx = dx; } private: const int8u* m_ptr; int m_y; unsigned m_num_spans; int m_dx; }; public: //-------------------------------------------------------------------- serialized_scanlines_adaptor_bin() : m_data(0), m_end(0), m_ptr(0), m_dx(0), m_dy(0), m_min_x(0x7FFFFFFF), m_min_y(0x7FFFFFFF), m_max_x(-0x7FFFFFFF), m_max_y(-0x7FFFFFFF) {} //-------------------------------------------------------------------- serialized_scanlines_adaptor_bin(const int8u* data, unsigned size, double dx, double dy) : m_data(data), m_end(data + size), m_ptr(data), m_dx(iround(dx)), m_dy(iround(dy)), m_min_x(0x7FFFFFFF), m_min_y(0x7FFFFFFF), m_max_x(-0x7FFFFFFF), m_max_y(-0x7FFFFFFF) {} //-------------------------------------------------------------------- void init(const int8u* data, unsigned size, double dx, double dy) { m_data = data; m_end = data + size; m_ptr = data; m_dx = iround(dx); m_dy = iround(dy); m_min_x = 0x7FFFFFFF; m_min_y = 0x7FFFFFFF; m_max_x = -0x7FFFFFFF; m_max_y = -0x7FFFFFFF; } private: //-------------------------------------------------------------------- int read_int32() { int32 val; ((int8u*)&val)[0] = *m_ptr++; ((int8u*)&val)[1] = *m_ptr++; ((int8u*)&val)[2] = *m_ptr++; ((int8u*)&val)[3] = *m_ptr++; return val; } public: // Iterate scanlines interface //-------------------------------------------------------------------- bool rewind_scanlines() { m_ptr = m_data; if(m_ptr < m_end) { m_min_x = read_int32() + m_dx; m_min_y = read_int32() + m_dy; m_max_x = read_int32() + m_dx; m_max_y = read_int32() + m_dy; } return m_ptr < m_end; } //-------------------------------------------------------------------- int min_x() const { return m_min_x; } int min_y() const { return m_min_y; } int max_x() const { return m_max_x; } int max_y() const { return m_max_y; } //-------------------------------------------------------------------- template bool sweep_scanline(Scanline& sl) { sl.reset_spans(); for(;;) { if(m_ptr >= m_end) return false; int y = read_int32() + m_dy; unsigned num_spans = read_int32(); do { int x = read_int32() + m_dx; int len = read_int32(); if(len < 0) len = -len; sl.add_span(x, unsigned(len), cover_full); } while(--num_spans); if(sl.num_spans()) { sl.finalize(y); break; } } return true; } //-------------------------------------------------------------------- // Specialization for embedded_scanline bool sweep_scanline(embedded_scanline& sl) { do { if(m_ptr >= m_end) return false; sl.init(m_ptr, m_dx, m_dy); // Jump to the next scanline //-------------------------- read_int32(); // Y int num_spans = read_int32(); // num_spans m_ptr += num_spans * sizeof(int32) * 2; } while(sl.num_spans() == 0); return true; } private: const int8u* m_data; const int8u* m_end; const int8u* m_ptr; int m_dx; int m_dy; int m_min_x; int m_min_y; int m_max_x; int m_max_y; }; } #endif mapnik-3.0.9/deps/agg/include/agg_scanline_u.h000066400000000000000000000412521262555547000212440ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for 32-bit screen coordinates (scanline32_u) has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SCANLINE_U_INCLUDED #define AGG_SCANLINE_U_INCLUDED #include "agg_array.h" namespace agg { //=============================================================scanline_u8 // // Unpacked scanline container class // // This class is used to transfer data from a scanline rasterizer // to the rendering buffer. It's organized very simple. The class stores // information of horizontal spans to render it into a pixel-map buffer. // Each span has staring X, length, and an array of bytes that determine the // cover-values for each pixel. // Before using this class you should know the minimal and maximal pixel // coordinates of your scanline. The protocol of using is: // 1. reset(min_x, max_x) // 2. add_cell() / add_span() - accumulate scanline. // When forming one scanline the next X coordinate must be always greater // than the last stored one, i.e. it works only with ordered coordinates. // 3. Call finalize(y) and render the scanline. // 3. Call reset_spans() to prepare for the new scanline. // // 4. Rendering: // // Scanline provides an iterator class that allows you to extract // the spans and the cover values for each pixel. Be aware that clipping // has not been done yet, so you should perform it yourself. // Use scanline_u8::iterator to render spans: //------------------------------------------------------------------------- // // int y = sl.y(); // Y-coordinate of the scanline // // ************************************ // ...Perform vertical clipping here... // ************************************ // // scanline_u8::const_iterator span = sl.begin(); // // unsigned char* row = m_rbuf->row(y); // The the address of the beginning // // of the current row // // unsigned num_spans = sl.num_spans(); // Number of spans. It's guaranteed that // // num_spans is always greater than 0. // // do // { // const scanline_u8::cover_type* covers = // span->covers; // The array of the cover values // // int num_pix = span->len; // Number of pixels of the span. // // Always greater than 0, still it's // // better to use "int" instead of // // "unsigned" because it's more // // convenient for clipping // int x = span->x; // // ************************************** // ...Perform horizontal clipping here... // ...you have x, covers, and pix_count.. // ************************************** // // unsigned char* dst = row + x; // Calculate the start address of the row. // // In this case we assume a simple // // grayscale image 1-byte per pixel. // do // { // *dst++ = *covers++; // Hypotetical rendering. // } // while(--num_pix); // // ++span; // } // while(--num_spans); // num_spans cannot be 0, so this loop is quite safe //------------------------------------------------------------------------ // // The question is: why should we accumulate the whole scanline when we // could render just separate spans when they're ready? // That's because using the scanline is generally faster. When is consists // of more than one span the conditions for the processor cash system // are better, because switching between two different areas of memory // (that can be very large) occurs less frequently. //------------------------------------------------------------------------ class scanline_u8 { public: typedef scanline_u8 self_type; typedef int8u cover_type; typedef int16 coord_type; //-------------------------------------------------------------------- struct span { coord_type x; coord_type len; cover_type* covers; }; typedef span* iterator; typedef const span* const_iterator; //-------------------------------------------------------------------- scanline_u8() : m_min_x(0), m_last_x(0x7FFFFFF0), m_cur_span(0) {} //-------------------------------------------------------------------- void reset(int min_x, int max_x) { unsigned max_len = max_x - min_x + 2; if(max_len > m_spans.size()) { m_spans.resize(max_len); m_covers.resize(max_len); } m_last_x = 0x7FFFFFF0; m_min_x = min_x; m_cur_span = &m_spans[0]; } //-------------------------------------------------------------------- void add_cell(int x, unsigned cover) { x -= m_min_x; m_covers[x] = (cover_type)cover; if(x == m_last_x+1) { m_cur_span->len++; } else { m_cur_span++; m_cur_span->x = (coord_type)(x + m_min_x); m_cur_span->len = 1; m_cur_span->covers = &m_covers[x]; } m_last_x = x; } //-------------------------------------------------------------------- void add_cells(int x, unsigned len, const cover_type* covers) { x -= m_min_x; memcpy(&m_covers[x], covers, len * sizeof(cover_type)); if(x == m_last_x+1) { m_cur_span->len += (coord_type)len; } else { m_cur_span++; m_cur_span->x = (coord_type)(x + m_min_x); m_cur_span->len = (coord_type)len; m_cur_span->covers = &m_covers[x]; } m_last_x = x + len - 1; } //-------------------------------------------------------------------- void add_span(int x, unsigned len, unsigned cover) { x -= m_min_x; memset(&m_covers[x], cover, len); if(x == m_last_x+1) { m_cur_span->len += (coord_type)len; } else { m_cur_span++; m_cur_span->x = (coord_type)(x + m_min_x); m_cur_span->len = (coord_type)len; m_cur_span->covers = &m_covers[x]; } m_last_x = x + len - 1; } //-------------------------------------------------------------------- void finalize(int y) { m_y = y; } //-------------------------------------------------------------------- void reset_spans() { m_last_x = 0x7FFFFFF0; m_cur_span = &m_spans[0]; } //-------------------------------------------------------------------- int y() const { return m_y; } unsigned num_spans() const { return unsigned(m_cur_span - &m_spans[0]); } const_iterator begin() const { return &m_spans[1]; } iterator begin() { return &m_spans[1]; } private: scanline_u8(const self_type&); const self_type& operator = (const self_type&); private: int m_min_x; int m_last_x; int m_y; pod_array m_covers; pod_array m_spans; span* m_cur_span; }; //==========================================================scanline_u8_am // // The scanline container with alpha-masking // //------------------------------------------------------------------------ template class scanline_u8_am : public scanline_u8 { public: typedef scanline_u8 base_type; typedef AlphaMask alpha_mask_type; typedef base_type::cover_type cover_type; typedef base_type::coord_type coord_type; scanline_u8_am() : base_type(), m_alpha_mask(0) {} scanline_u8_am(const AlphaMask& am) : base_type(), m_alpha_mask(&am) {} //-------------------------------------------------------------------- void finalize(int span_y) { base_type::finalize(span_y); if(m_alpha_mask) { typename base_type::iterator span = base_type::begin(); unsigned count = base_type::num_spans(); do { m_alpha_mask->combine_hspan(span->x, base_type::y(), span->covers, span->len); ++span; } while(--count); } } private: const AlphaMask* m_alpha_mask; }; //===========================================================scanline32_u8 class scanline32_u8 { public: typedef scanline32_u8 self_type; typedef int8u cover_type; typedef int32 coord_type; //-------------------------------------------------------------------- struct span { span() {} span(coord_type x_, coord_type len_, cover_type* covers_) : x(x_), len(len_), covers(covers_) {} coord_type x; coord_type len; cover_type* covers; }; typedef pod_bvector span_array_type; //-------------------------------------------------------------------- class const_iterator { public: const_iterator(const span_array_type& spans) : m_spans(spans), m_span_idx(0) {} const span& operator*() const { return m_spans[m_span_idx]; } const span* operator->() const { return &m_spans[m_span_idx]; } void operator ++ () { ++m_span_idx; } private: const span_array_type& m_spans; unsigned m_span_idx; }; //-------------------------------------------------------------------- class iterator { public: iterator(span_array_type& spans) : m_spans(spans), m_span_idx(0) {} span& operator*() { return m_spans[m_span_idx]; } span* operator->() { return &m_spans[m_span_idx]; } void operator ++ () { ++m_span_idx; } private: span_array_type& m_spans; unsigned m_span_idx; }; //-------------------------------------------------------------------- scanline32_u8() : m_min_x(0), m_last_x(0x7FFFFFF0), m_covers() {} //-------------------------------------------------------------------- void reset(int min_x, int max_x) { unsigned max_len = max_x - min_x + 2; if(max_len > m_covers.size()) { m_covers.resize(max_len); } m_last_x = 0x7FFFFFF0; m_min_x = min_x; m_spans.remove_all(); } //-------------------------------------------------------------------- void add_cell(int x, unsigned cover) { x -= m_min_x; m_covers[x] = cover_type(cover); if(x == m_last_x+1) { m_spans.last().len++; } else { m_spans.add(span(coord_type(x + m_min_x), 1, &m_covers[x])); } m_last_x = x; } //-------------------------------------------------------------------- void add_cells(int x, unsigned len, const cover_type* covers) { x -= m_min_x; memcpy(&m_covers[x], covers, len * sizeof(cover_type)); if(x == m_last_x+1) { m_spans.last().len += coord_type(len); } else { m_spans.add(span(coord_type(x + m_min_x), coord_type(len), &m_covers[x])); } m_last_x = x + len - 1; } //-------------------------------------------------------------------- void add_span(int x, unsigned len, unsigned cover) { x -= m_min_x; memset(&m_covers[x], cover, len); if(x == m_last_x+1) { m_spans.last().len += coord_type(len); } else { m_spans.add(span(coord_type(x + m_min_x), coord_type(len), &m_covers[x])); } m_last_x = x + len - 1; } //-------------------------------------------------------------------- void finalize(int y) { m_y = y; } //-------------------------------------------------------------------- void reset_spans() { m_last_x = 0x7FFFFFF0; m_spans.remove_all(); } //-------------------------------------------------------------------- int y() const { return m_y; } unsigned num_spans() const { return m_spans.size(); } const_iterator begin() const { return const_iterator(m_spans); } iterator begin() { return iterator(m_spans); } private: scanline32_u8(const self_type&); const self_type& operator = (const self_type&); private: int m_min_x; int m_last_x; int m_y; pod_array m_covers; span_array_type m_spans; }; //========================================================scanline32_u8_am // // The scanline container with alpha-masking // //------------------------------------------------------------------------ template class scanline32_u8_am : public scanline32_u8 { public: typedef scanline32_u8 base_type; typedef AlphaMask alpha_mask_type; typedef base_type::cover_type cover_type; typedef base_type::coord_type coord_type; scanline32_u8_am() : base_type(), m_alpha_mask(0) {} scanline32_u8_am(const AlphaMask& am) : base_type(), m_alpha_mask(&am) {} //-------------------------------------------------------------------- void finalize(int span_y) { base_type::finalize(span_y); if(m_alpha_mask) { typename base_type::iterator span = base_type::begin(); unsigned count = base_type::num_spans(); do { m_alpha_mask->combine_hspan(span->x, base_type::y(), span->covers, span->len); ++span; } while(--count); } } private: const AlphaMask* m_alpha_mask; }; } #endif mapnik-3.0.9/deps/agg/include/agg_shorten_path.h000066400000000000000000000037601262555547000216240ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SHORTEN_PATH_INCLUDED #define AGG_SHORTEN_PATH_INCLUDED #include "agg_basics.h" #include "agg_vertex_sequence.h" namespace agg { //===========================================================shorten_path template void shorten_path(VertexSequence& vs, double s, unsigned closed = 0) { typedef typename VertexSequence::value_type vertex_type; if(s > 0.0 && vs.size() > 1) { double d; int n = int(vs.size() - 2); while(n) { d = vs[n].dist; if(d > s) break; vs.remove_last(); s -= d; --n; } if(vs.size() < 2) { vs.remove_all(); } else { n = vs.size() - 1; vertex_type& prev = vs[n-1]; vertex_type& last = vs[n]; d = (prev.dist - s) / prev.dist; double x = prev.x + (last.x - prev.x) * d; double y = prev.y + (last.y - prev.y) * d; last.x = x; last.y = y; if(!prev(last)) vs.remove_last(); vs.close(closed != 0); } } } } #endif mapnik-3.0.9/deps/agg/include/agg_simul_eq.h000066400000000000000000000076451262555547000207520ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Solving simultaneous equations // //---------------------------------------------------------------------------- #ifndef AGG_SIMUL_EQ_INCLUDED #define AGG_SIMUL_EQ_INCLUDED #include #include "agg_basics.h" namespace agg { //=============================================================swap_arrays template void swap_arrays(T* a1, T* a2, unsigned n) { unsigned i; for(i = 0; i < n; i++) { T tmp = *a1; *a1++ = *a2; *a2++ = tmp; } } //============================================================matrix_pivot template struct matrix_pivot { static int pivot(double m[Rows][Cols], unsigned row) { int k = int(row); double max_val, tmp; max_val = -1.0; unsigned i; for(i = row; i < Rows; i++) { if((tmp = std::fabs(m[i][row])) > max_val && tmp != 0.0) { max_val = tmp; k = i; } } if(m[k][row] == 0.0) { return -1; } if(k != int(row)) { swap_arrays(m[k], m[row], Cols); return k; } return 0; } }; //===============================================================simul_eq template struct simul_eq { static bool solve(const double left[Size][Size], const double right[Size][RightCols], double result[Size][RightCols]) { unsigned i, j, k; double a1; double tmp[Size][Size + RightCols]; for(i = 0; i < Size; i++) { for(j = 0; j < Size; j++) { tmp[i][j] = left[i][j]; } for(j = 0; j < RightCols; j++) { tmp[i][Size + j] = right[i][j]; } } for(k = 0; k < Size; k++) { if(matrix_pivot::pivot(tmp, k) < 0) { return false; // Singularity.... } a1 = tmp[k][k]; for(j = k; j < Size + RightCols; j++) { tmp[k][j] /= a1; } for(i = k + 1; i < Size; i++) { a1 = tmp[i][k]; for (j = k; j < Size + RightCols; j++) { tmp[i][j] -= a1 * tmp[k][j]; } } } for(k = 0; k < RightCols; k++) { int m; for(m = int(Size - 1); m >= 0; m--) { result[m][k] = tmp[m][Size + k]; for(j = m + 1; j < Size; j++) { result[m][k] -= tmp[m][j] * result[j][k]; } } } return true; } }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_allocator.h000066400000000000000000000034111262555547000221200ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SPAN_ALLOCATOR_INCLUDED #define AGG_SPAN_ALLOCATOR_INCLUDED #include "agg_array.h" namespace agg { //----------------------------------------------------------span_allocator template class span_allocator { public: typedef ColorT color_type; //-------------------------------------------------------------------- AGG_INLINE color_type* allocate(unsigned span_len) { if(span_len > m_span.size()) { // To reduce the number of reallocs we align the // span_len to 256 color elements. // Well, I just like this number and it looks reasonable. //----------------------- m_span.resize(((span_len + 255) >> 8) << 8); } return &m_span[0]; } AGG_INLINE color_type* span() { return &m_span[0]; } AGG_INLINE unsigned max_span_len() const { return m_span.size(); } private: pod_array m_span; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_converter.h000066400000000000000000000036361262555547000221600ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SPAN_CONVERTER_INCLUDED #define AGG_SPAN_CONVERTER_INCLUDED #include "agg_basics.h" namespace agg { //----------------------------------------------------------span_converter template class span_converter { public: typedef typename SpanGenerator::color_type color_type; span_converter(SpanGenerator& span_gen, SpanConverter& span_cnv) : m_span_gen(&span_gen), m_span_cnv(&span_cnv) {} void attach_generator(SpanGenerator& span_gen) { m_span_gen = &span_gen; } void attach_converter(SpanConverter& span_cnv) { m_span_cnv = &span_cnv; } //-------------------------------------------------------------------- void prepare() { m_span_gen->prepare(); m_span_cnv->prepare(); } //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { m_span_gen->generate(span, x, y, len); m_span_cnv->generate(span, x, y, len); } private: SpanGenerator* m_span_gen; SpanConverter* m_span_cnv; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_gouraud.h000066400000000000000000000131371262555547000216140ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SPAN_GOURAUD_INCLUDED #define AGG_SPAN_GOURAUD_INCLUDED #include "agg_basics.h" #include "agg_math.h" namespace agg { //============================================================span_gouraud template class span_gouraud { public: typedef ColorT color_type; struct coord_type { double x; double y; color_type color; }; //-------------------------------------------------------------------- span_gouraud() : m_vertex(0) { m_cmd[0] = path_cmd_stop; } //-------------------------------------------------------------------- span_gouraud(const color_type& c1, const color_type& c2, const color_type& c3, double x1, double y1, double x2, double y2, double x3, double y3, double d) : m_vertex(0) { colors(c1, c2, c3); triangle(x1, y1, x2, y2, x3, y3, d); } //-------------------------------------------------------------------- void colors(ColorT c1, ColorT c2, ColorT c3) { m_coord[0].color = c1; m_coord[1].color = c2; m_coord[2].color = c3; } //-------------------------------------------------------------------- // Sets the triangle and dilates it if needed. // The trick here is to calculate beveled joins in the vertices of the // triangle and render it as a 6-vertex polygon. // It's necessary to achieve numerical stability. // However, the coordinates to interpolate colors are calculated // as miter joins (calc_intersection). void triangle(double x1, double y1, double x2, double y2, double x3, double y3, double d) { m_coord[0].x = m_x[0] = x1; m_coord[0].y = m_y[0] = y1; m_coord[1].x = m_x[1] = x2; m_coord[1].y = m_y[1] = y2; m_coord[2].x = m_x[2] = x3; m_coord[2].y = m_y[2] = y3; m_cmd[0] = path_cmd_move_to; m_cmd[1] = path_cmd_line_to; m_cmd[2] = path_cmd_line_to; m_cmd[3] = path_cmd_stop; if(d != 0.0) { dilate_triangle(m_coord[0].x, m_coord[0].y, m_coord[1].x, m_coord[1].y, m_coord[2].x, m_coord[2].y, m_x, m_y, d); calc_intersection(m_x[4], m_y[4], m_x[5], m_y[5], m_x[0], m_y[0], m_x[1], m_y[1], &m_coord[0].x, &m_coord[0].y); calc_intersection(m_x[0], m_y[0], m_x[1], m_y[1], m_x[2], m_y[2], m_x[3], m_y[3], &m_coord[1].x, &m_coord[1].y); calc_intersection(m_x[2], m_y[2], m_x[3], m_y[3], m_x[4], m_y[4], m_x[5], m_y[5], &m_coord[2].x, &m_coord[2].y); m_cmd[3] = path_cmd_line_to; m_cmd[4] = path_cmd_line_to; m_cmd[5] = path_cmd_line_to; m_cmd[6] = path_cmd_stop; } } //-------------------------------------------------------------------- // Vertex Source Interface to feed the coordinates to the rasterizer void rewind(unsigned) { m_vertex = 0; } //-------------------------------------------------------------------- unsigned vertex(double* x, double* y) { *x = m_x[m_vertex]; *y = m_y[m_vertex]; return m_cmd[m_vertex++]; } protected: //-------------------------------------------------------------------- void arrange_vertices(coord_type* coord) const { coord[0] = m_coord[0]; coord[1] = m_coord[1]; coord[2] = m_coord[2]; if(m_coord[0].y > m_coord[2].y) { coord[0] = m_coord[2]; coord[2] = m_coord[0]; } coord_type tmp; if(coord[0].y > coord[1].y) { tmp = coord[1]; coord[1] = coord[0]; coord[0] = tmp; } if(coord[1].y > coord[2].y) { tmp = coord[2]; coord[2] = coord[1]; coord[1] = tmp; } } private: //-------------------------------------------------------------------- coord_type m_coord[3]; double m_x[8]; double m_y[8]; unsigned m_cmd[8]; unsigned m_vertex; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_gouraud_gray.h000066400000000000000000000201361262555547000226330ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_GOURAUD_GRAY_INCLUDED #define AGG_SPAN_GOURAUD_GRAY_INCLUDED #include "agg_basics.h" #include "agg_color_gray.h" #include "agg_dda_line.h" #include "agg_span_gouraud.h" namespace agg { //=======================================================span_gouraud_gray template class span_gouraud_gray : public span_gouraud { public: typedef ColorT color_type; typedef typename color_type::value_type value_type; typedef span_gouraud base_type; typedef typename base_type::coord_type coord_type; enum subpixel_scale_e { subpixel_shift = 4, subpixel_scale = 1 << subpixel_shift }; private: //-------------------------------------------------------------------- struct gray_calc { void init(const coord_type& c1, const coord_type& c2) { m_x1 = c1.x - 0.5; m_y1 = c1.y - 0.5; m_dx = c2.x - c1.x; double dy = c2.y - c1.y; m_1dy = (std::fabs(dy) < 1e-10) ? 1e10 : 1.0 / dy; m_v1 = c1.color.v; m_a1 = c1.color.a; m_dv = c2.color.v - m_v1; m_da = c2.color.a - m_a1; } void calc(double y) { double k = (y - m_y1) * m_1dy; if(k < 0.0) k = 0.0; if(k > 1.0) k = 1.0; m_v = m_v1 + iround(m_dv * k); m_a = m_a1 + iround(m_da * k); m_x = iround((m_x1 + m_dx * k) * subpixel_scale); } double m_x1; double m_y1; double m_dx; double m_1dy; int m_v1; int m_a1; int m_dv; int m_da; int m_v; int m_a; int m_x; }; public: //-------------------------------------------------------------------- span_gouraud_gray() {} span_gouraud_gray(const color_type& c1, const color_type& c2, const color_type& c3, double x1, double y1, double x2, double y2, double x3, double y3, double d = 0) : base_type(c1, c2, c3, x1, y1, x2, y2, x3, y3, d) {} //-------------------------------------------------------------------- void prepare() { coord_type coord[3]; base_type::arrange_vertices(coord); m_y2 = int(coord[1].y); m_swap = cross_product(coord[0].x, coord[0].y, coord[2].x, coord[2].y, coord[1].x, coord[1].y) < 0.0; m_c1.init(coord[0], coord[2]); m_c2.init(coord[0], coord[1]); m_c3.init(coord[1], coord[2]); } //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { m_c1.calc(y); const gray_calc* pc1 = &m_c1; const gray_calc* pc2 = &m_c2; if(y < m_y2) { // Bottom part of the triangle (first subtriangle) //------------------------- m_c2.calc(y + m_c2.m_1dy); } else { // Upper part (second subtriangle) //------------------------- m_c3.calc(y - m_c3.m_1dy); pc2 = &m_c3; } if(m_swap) { // It means that the triangle is oriented clockwise, // so that we need to swap the controlling structures //------------------------- const gray_calc* t = pc2; pc2 = pc1; pc1 = t; } // Get the horizontal length with subpixel accuracy // and protect it from division by zero //------------------------- int nlen = std::abs(pc2->m_x - pc1->m_x); if(nlen <= 0) nlen = 1; dda_line_interpolator<14> v(pc1->m_v, pc2->m_v, nlen); dda_line_interpolator<14> a(pc1->m_a, pc2->m_a, nlen); // Calculate the starting point of the gradient with subpixel // accuracy and correct (roll back) the interpolators. // This operation will also clip the beginning of the span // if necessary. //------------------------- int start = pc1->m_x - (x << subpixel_shift); v -= start; a -= start; nlen += start; int vv, va; enum lim_e { lim = color_type::base_mask }; // Beginning part of the span. Since we rolled back the // interpolators, the color values may have overflow. // So that, we render the beginning part with checking // for overflow. It lasts until "start" is positive; // typically it's 1-2 pixels, but may be more in some cases. //------------------------- while(len && start > 0) { vv = v.y(); va = a.y(); if(vv < 0) vv = 0; if(vv > lim) vv = lim; if(va < 0) va = 0; if(va > lim) va = lim; span->v = (value_type)vv; span->a = (value_type)va; v += subpixel_scale; a += subpixel_scale; nlen -= subpixel_scale; start -= subpixel_scale; ++span; --len; } // Middle part, no checking for overflow. // Actual spans can be longer than the calculated length // because of anti-aliasing, thus, the interpolators can // overflow. But while "nlen" is positive we are safe. //------------------------- while(len && nlen > 0) { span->v = (value_type)v.y(); span->a = (value_type)a.y(); v += subpixel_scale; a += subpixel_scale; nlen -= subpixel_scale; ++span; --len; } // Ending part; checking for overflow. // Typically it's 1-2 pixels, but may be more in some cases. //------------------------- while(len) { vv = v.y(); va = a.y(); if(vv < 0) vv = 0; if(vv > lim) vv = lim; if(va < 0) va = 0; if(va > lim) va = lim; span->v = (value_type)vv; span->a = (value_type)va; v += subpixel_scale; a += subpixel_scale; ++span; --len; } } private: bool m_swap; int m_y2; gray_calc m_c1; gray_calc m_c2; gray_calc m_c3; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_gouraud_rgba.h000066400000000000000000000231231262555547000226030ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_GOURAUD_RGBA_INCLUDED #define AGG_SPAN_GOURAUD_RGBA_INCLUDED #include "agg_basics.h" #include "agg_color_rgba.h" #include "agg_dda_line.h" #include "agg_span_gouraud.h" namespace agg { //=======================================================span_gouraud_rgba template class span_gouraud_rgba : public span_gouraud { public: typedef ColorT color_type; typedef typename ColorT::value_type value_type; typedef span_gouraud base_type; typedef typename base_type::coord_type coord_type; enum subpixel_scale_e { subpixel_shift = 4, subpixel_scale = 1 << subpixel_shift }; private: //-------------------------------------------------------------------- struct rgba_calc { void init(const coord_type& c1, const coord_type& c2) { m_x1 = c1.x - 0.5; m_y1 = c1.y - 0.5; m_dx = c2.x - c1.x; double dy = c2.y - c1.y; m_1dy = (dy < 1e-5) ? 1e5 : 1.0 / dy; m_r1 = c1.color.r; m_g1 = c1.color.g; m_b1 = c1.color.b; m_a1 = c1.color.a; m_dr = c2.color.r - m_r1; m_dg = c2.color.g - m_g1; m_db = c2.color.b - m_b1; m_da = c2.color.a - m_a1; } void calc(double y) { double k = (y - m_y1) * m_1dy; if(k < 0.0) k = 0.0; if(k > 1.0) k = 1.0; m_r = m_r1 + iround(m_dr * k); m_g = m_g1 + iround(m_dg * k); m_b = m_b1 + iround(m_db * k); m_a = m_a1 + iround(m_da * k); m_x = iround((m_x1 + m_dx * k) * subpixel_scale); } double m_x1; double m_y1; double m_dx; double m_1dy; int m_r1; int m_g1; int m_b1; int m_a1; int m_dr; int m_dg; int m_db; int m_da; int m_r; int m_g; int m_b; int m_a; int m_x; }; public: //-------------------------------------------------------------------- span_gouraud_rgba() {} span_gouraud_rgba(const color_type& c1, const color_type& c2, const color_type& c3, double x1, double y1, double x2, double y2, double x3, double y3, double d = 0) : base_type(c1, c2, c3, x1, y1, x2, y2, x3, y3, d) {} //-------------------------------------------------------------------- void prepare() { coord_type coord[3]; base_type::arrange_vertices(coord); m_y2 = int(coord[1].y); m_swap = cross_product(coord[0].x, coord[0].y, coord[2].x, coord[2].y, coord[1].x, coord[1].y) < 0.0; m_rgba1.init(coord[0], coord[2]); m_rgba2.init(coord[0], coord[1]); m_rgba3.init(coord[1], coord[2]); } //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { m_rgba1.calc(y);//(m_rgba1.m_1dy > 2) ? m_rgba1.m_y1 : y); const rgba_calc* pc1 = &m_rgba1; const rgba_calc* pc2 = &m_rgba2; if(y <= m_y2) { // Bottom part of the triangle (first subtriangle) //------------------------- m_rgba2.calc(y + m_rgba2.m_1dy); } else { // Upper part (second subtriangle) m_rgba3.calc(y - m_rgba3.m_1dy); //------------------------- pc2 = &m_rgba3; } if(m_swap) { // It means that the triangle is oriented clockwise, // so that we need to swap the controlling structures //------------------------- const rgba_calc* t = pc2; pc2 = pc1; pc1 = t; } // Get the horizontal length with subpixel accuracy // and protect it from division by zero //------------------------- int nlen = std::abs(pc2->m_x - pc1->m_x); if(nlen <= 0) nlen = 1; dda_line_interpolator<14> r(pc1->m_r, pc2->m_r, nlen); dda_line_interpolator<14> g(pc1->m_g, pc2->m_g, nlen); dda_line_interpolator<14> b(pc1->m_b, pc2->m_b, nlen); dda_line_interpolator<14> a(pc1->m_a, pc2->m_a, nlen); // Calculate the starting point of the gradient with subpixel // accuracy and correct (roll back) the interpolators. // This operation will also clip the beginning of the span // if necessary. //------------------------- int start = pc1->m_x - (x << subpixel_shift); r -= start; g -= start; b -= start; a -= start; nlen += start; int vr, vg, vb, va; enum lim_e { lim = color_type::base_mask }; // Beginning part of the span. Since we rolled back the // interpolators, the color values may have overflow. // So that, we render the beginning part with checking // for overflow. It lasts until "start" is positive; // typically it's 1-2 pixels, but may be more in some cases. //------------------------- while(len && start > 0) { vr = r.y(); vg = g.y(); vb = b.y(); va = a.y(); if(vr < 0) vr = 0; if(vr > lim) vr = lim; if(vg < 0) vg = 0; if(vg > lim) vg = lim; if(vb < 0) vb = 0; if(vb > lim) vb = lim; if(va < 0) va = 0; if(va > lim) va = lim; span->r = (value_type)vr; span->g = (value_type)vg; span->b = (value_type)vb; span->a = (value_type)va; r += subpixel_scale; g += subpixel_scale; b += subpixel_scale; a += subpixel_scale; nlen -= subpixel_scale; start -= subpixel_scale; ++span; --len; } // Middle part, no checking for overflow. // Actual spans can be longer than the calculated length // because of anti-aliasing, thus, the interpolators can // overflow. But while "nlen" is positive we are safe. //------------------------- while(len && nlen > 0) { span->r = (value_type)r.y(); span->g = (value_type)g.y(); span->b = (value_type)b.y(); span->a = (value_type)a.y(); r += subpixel_scale; g += subpixel_scale; b += subpixel_scale; a += subpixel_scale; nlen -= subpixel_scale; ++span; --len; } // Ending part; checking for overflow. // Typically it's 1-2 pixels, but may be more in some cases. //------------------------- while(len) { vr = r.y(); vg = g.y(); vb = b.y(); va = a.y(); if(vr < 0) vr = 0; if(vr > lim) vr = lim; if(vg < 0) vg = 0; if(vg > lim) vg = lim; if(vb < 0) vb = 0; if(vb > lim) vb = lim; if(va < 0) va = 0; if(va > lim) va = lim; span->r = (value_type)vr; span->g = (value_type)vg; span->b = (value_type)vb; span->a = (value_type)va; r += subpixel_scale; g += subpixel_scale; b += subpixel_scale; a += subpixel_scale; ++span; --len; } } private: bool m_swap; int m_y2; rgba_calc m_rgba1; rgba_calc m_rgba2; rgba_calc m_rgba3; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_gradient.h000066400000000000000000000273031262555547000217430ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SPAN_GRADIENT_INCLUDED #define AGG_SPAN_GRADIENT_INCLUDED #include #include #include #include "agg_basics.h" #include "agg_math.h" #include "agg_array.h" namespace agg { enum gradient_subpixel_scale_e { gradient_subpixel_shift = 4, //-----gradient_subpixel_shift gradient_subpixel_scale = 1 << gradient_subpixel_shift, //-----gradient_subpixel_scale gradient_subpixel_mask = gradient_subpixel_scale - 1 //-----gradient_subpixel_mask }; //==========================================================span_gradient template class span_gradient { public: typedef Interpolator interpolator_type; typedef ColorT color_type; enum downscale_shift_e { downscale_shift = interpolator_type::subpixel_shift - gradient_subpixel_shift }; //-------------------------------------------------------------------- span_gradient() {} //-------------------------------------------------------------------- span_gradient(interpolator_type& inter, const GradientF& gradient_function, const ColorF& color_function, double d1, double d2) : m_interpolator(&inter), m_gradient_function(&gradient_function), m_color_function(&color_function), m_d1(iround(d1 * gradient_subpixel_scale)), m_d2(iround(d2 * gradient_subpixel_scale)) {} //-------------------------------------------------------------------- interpolator_type& interpolator() { return *m_interpolator; } const GradientF& gradient_function() const { return *m_gradient_function; } const ColorF& color_function() const { return *m_color_function; } double d1() const { return double(m_d1) / gradient_subpixel_scale; } double d2() const { return double(m_d2) / gradient_subpixel_scale; } //-------------------------------------------------------------------- void interpolator(interpolator_type& i) { m_interpolator = &i; } void gradient_function(const GradientF& gf) { m_gradient_function = &gf; } void color_function(const ColorF& cf) { m_color_function = &cf; } void d1(double v) { m_d1 = iround(v * gradient_subpixel_scale); } void d2(double v) { m_d2 = iround(v * gradient_subpixel_scale); } //-------------------------------------------------------------------- void prepare() {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { int dd = m_d2 - m_d1; if(dd < 1) dd = 1; m_interpolator->begin(x+0.5, y+0.5, len); do { m_interpolator->coordinates(&x, &y); int d = m_gradient_function->calculate(x >> downscale_shift, y >> downscale_shift, m_d2); d = ((d - m_d1) * (int)m_color_function->size()) / dd; if(d < 0) d = 0; if(d >= (int)m_color_function->size()) d = m_color_function->size() - 1; *span++ = (*m_color_function)[d]; ++(*m_interpolator); } while(--len); } private: interpolator_type* m_interpolator; const GradientF* m_gradient_function; const ColorF* m_color_function; int m_d1; int m_d2; }; //=====================================================gradient_linear_color template struct gradient_linear_color { typedef ColorT color_type; gradient_linear_color() {} gradient_linear_color(const color_type& c1, const color_type& c2, unsigned size = 256) : m_c1(c1), m_c2(c2), m_size(size) {} unsigned size() const { return m_size; } color_type operator [] (unsigned v) const { return m_c1.gradient(m_c2, double(v) / double(m_size - 1)); } void colors(const color_type& c1, const color_type& c2, unsigned size = 256) { m_c1 = c1; m_c2 = c2; m_size = size; } color_type m_c1; color_type m_c2; unsigned m_size; }; //==========================================================gradient_circle class gradient_circle { // Actually the same as radial. Just for compatibility public: static AGG_INLINE int calculate(int x, int y, int) { return int(fast_sqrt(x*x + y*y)); } }; //==========================================================gradient_radial class gradient_radial { public: static AGG_INLINE int calculate(int x, int y, int) { return int(fast_sqrt(x*x + y*y)); } }; //========================================================gradient_radial_d class gradient_radial_d { public: static AGG_INLINE int calculate(int x, int y, int) { return uround(sqrt(double(x)*double(x) + double(y)*double(y))); } }; //====================================================gradient_radial_focus class gradient_radial_focus { public: //--------------------------------------------------------------------- gradient_radial_focus() : m_r(100 * gradient_subpixel_scale), m_fx(0), m_fy(0) { update_values(); } //--------------------------------------------------------------------- gradient_radial_focus(double r, double fx, double fy) : m_r (iround(r * gradient_subpixel_scale)), m_fx(iround(fx * gradient_subpixel_scale)), m_fy(iround(fy * gradient_subpixel_scale)) { update_values(); } //--------------------------------------------------------------------- void init(double r, double fx, double fy) { m_r = iround(r * gradient_subpixel_scale); m_fx = iround(fx * gradient_subpixel_scale); m_fy = iround(fy * gradient_subpixel_scale); update_values(); } //--------------------------------------------------------------------- double radius() const { return double(m_r) / gradient_subpixel_scale; } double focus_x() const { return double(m_fx) / gradient_subpixel_scale; } double focus_y() const { return double(m_fy) / gradient_subpixel_scale; } //--------------------------------------------------------------------- int calculate(int x, int y, int) const { double dx = x - m_fx; double dy = y - m_fy; double d2 = dx * m_fy - dy * m_fx; double d3 = m_r2 * (dx * dx + dy * dy) - d2 * d2; return iround((dx * m_fx + dy * m_fy + sqrt(std::fabs(d3))) * m_mul); } private: //--------------------------------------------------------------------- void update_values() { // Calculate the invariant values. In case the focal center // lies exactly on the gradient circle the divisor degenerates // into zero. In this case we just move the focal center by // one subpixel unit possibly in the direction to the origin (0,0) // and calculate the values again. //------------------------- m_r2 = double(m_r) * double(m_r); m_fx2 = double(m_fx) * double(m_fx); m_fy2 = double(m_fy) * double(m_fy); double d = (m_r2 - (m_fx2 + m_fy2)); if(d == 0) { if(m_fx) { if(m_fx < 0) ++m_fx; else --m_fx; } if(m_fy) { if(m_fy < 0) ++m_fy; else --m_fy; } m_fx2 = double(m_fx) * double(m_fx); m_fy2 = double(m_fy) * double(m_fy); d = (m_r2 - (m_fx2 + m_fy2)); } m_mul = m_r / d; } int m_r; int m_fx; int m_fy; double m_r2; double m_fx2; double m_fy2; double m_mul; }; //==============================================================gradient_x class gradient_x { public: static int calculate(int x, int, int) { return x; } }; //==============================================================gradient_y class gradient_y { public: static int calculate(int, int y, int) { return y; } }; //========================================================gradient_diamond class gradient_diamond { public: static AGG_INLINE int calculate(int x, int y, int) { int ax = std::abs(x); int ay = std::abs(y); return ax > ay ? ax : ay; } }; //=============================================================gradient_xy class gradient_xy { public: static AGG_INLINE int calculate(int x, int y, int d) { return std::abs(x) * std::abs(y) / d; } }; //========================================================gradient_sqrt_xy class gradient_sqrt_xy { public: static AGG_INLINE int calculate(int x, int y, int) { return fast_sqrt(std::abs(x) * std::abs(y)); } }; //==========================================================gradient_conic class gradient_conic { public: static AGG_INLINE int calculate(int x, int y, int d) { return uround(std::fabs(std::atan2(double(y), double(x))) * double(d) / pi); } }; //=================================================gradient_repeat_adaptor template class gradient_repeat_adaptor { public: gradient_repeat_adaptor(const GradientF& gradient) : m_gradient(&gradient) {} AGG_INLINE int calculate(int x, int y, int d) const { int ret = m_gradient->calculate(x, y, d) % d; if(ret < 0) ret += d; return ret; } private: const GradientF* m_gradient; }; //================================================gradient_reflect_adaptor template class gradient_reflect_adaptor { public: gradient_reflect_adaptor(const GradientF& gradient) : m_gradient(&gradient) {} AGG_INLINE int calculate(int x, int y, int d) const { int d2 = d << 1; int ret = m_gradient->calculate(x, y, d) % d2; if(ret < 0) ret += d2; if(ret >= d) ret = d2 - ret; return ret; } private: const GradientF* m_gradient; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_gradient_alpha.h000066400000000000000000000115121262555547000231030ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SPAN_GRADIENT_ALPHA_INCLUDED #define AGG_SPAN_GRADIENT_ALPHA_INCLUDED #include "agg_span_gradient.h" namespace agg { //======================================================span_gradient_alpha template class span_gradient_alpha { public: typedef Interpolator interpolator_type; typedef ColorT color_type; typedef typename color_type::value_type alpha_type; enum downscale_shift_e { downscale_shift = interpolator_type::subpixel_shift - gradient_subpixel_shift }; //-------------------------------------------------------------------- span_gradient_alpha() {} //-------------------------------------------------------------------- span_gradient_alpha(interpolator_type& inter, const GradientF& gradient_function, const AlphaF& alpha_function, double d1, double d2) : m_interpolator(&inter), m_gradient_function(&gradient_function), m_alpha_function(&alpha_function), m_d1(iround(d1 * gradient_subpixel_scale)), m_d2(iround(d2 * gradient_subpixel_scale)) {} //-------------------------------------------------------------------- interpolator_type& interpolator() { return *m_interpolator; } const GradientF& gradient_function() const { return *m_gradient_function; } const AlphaF& alpha_function() const { return *m_alpha_function; } double d1() const { return double(m_d1) / gradient_subpixel_scale; } double d2() const { return double(m_d2) / gradient_subpixel_scale; } //-------------------------------------------------------------------- void interpolator(interpolator_type& i) { m_interpolator = &i; } void gradient_function(const GradientF& gf) { m_gradient_function = &gf; } void alpha_function(const AlphaF& af) { m_alpha_function = ⁡ } void d1(double v) { m_d1 = iround(v * gradient_subpixel_scale); } void d2(double v) { m_d2 = iround(v * gradient_subpixel_scale); } //-------------------------------------------------------------------- void prepare() {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { int dd = m_d2 - m_d1; if(dd < 1) dd = 1; m_interpolator->begin(x+0.5, y+0.5, len); do { m_interpolator->coordinates(&x, &y); int d = m_gradient_function->calculate(x >> downscale_shift, y >> downscale_shift, m_d2); d = ((d - m_d1) * (int)m_alpha_function->size()) / dd; if(d < 0) d = 0; if(d >= (int)m_alpha_function->size()) d = m_alpha_function->size() - 1; span->a = (*m_alpha_function)[d]; ++span; ++(*m_interpolator); } while(--len); } private: interpolator_type* m_interpolator; const GradientF* m_gradient_function; const AlphaF* m_alpha_function; int m_d1; int m_d2; }; //=======================================================gradient_alpha_x template struct gradient_alpha_x { typedef typename ColorT::value_type alpha_type; alpha_type operator [] (alpha_type x) const { return x; } }; //====================================================gradient_alpha_x_u8 struct gradient_alpha_x_u8 { typedef int8u alpha_type; alpha_type operator [] (alpha_type x) const { return x; } }; //==========================================gradient_alpha_one_munus_x_u8 struct gradient_alpha_one_munus_x_u8 { typedef int8u alpha_type; alpha_type operator [] (alpha_type x) const { return 255-x; } }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_image_filter.h000066400000000000000000000220211262555547000225650ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Image transformations with filtering. Span generator base class // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_IMAGE_FILTER_INCLUDED #define AGG_SPAN_IMAGE_FILTER_INCLUDED #include "agg_basics.h" #include "agg_image_filters.h" #include "agg_span_interpolator_linear.h" namespace agg { //-------------------------------------------------------span_image_filter template class span_image_filter { public: typedef Source source_type; typedef Interpolator interpolator_type; //-------------------------------------------------------------------- span_image_filter() {} span_image_filter(source_type& src, interpolator_type& interpolator, const image_filter_lut* filter) : m_src(&src), m_interpolator(&interpolator), m_filter(filter), m_dx_dbl(0.5), m_dy_dbl(0.5), m_dx_int(image_subpixel_scale / 2), m_dy_int(image_subpixel_scale / 2) {} void attach(source_type& v) { m_src = &v; } //-------------------------------------------------------------------- source_type& source() { return *m_src; } const source_type& source() const { return *m_src; } const image_filter_lut& filter() const { return *m_filter; } int filter_dx_int() const { return m_dx_int; } int filter_dy_int() const { return m_dy_int; } double filter_dx_dbl() const { return m_dx_dbl; } double filter_dy_dbl() const { return m_dy_dbl; } //-------------------------------------------------------------------- void interpolator(interpolator_type& v) { m_interpolator = &v; } void filter(const image_filter_lut& v) { m_filter = &v; } void filter_offset(double dx, double dy) { m_dx_dbl = dx; m_dy_dbl = dy; m_dx_int = iround(dx * image_subpixel_scale); m_dy_int = iround(dy * image_subpixel_scale); } void filter_offset(double d) { filter_offset(d, d); } //-------------------------------------------------------------------- interpolator_type& interpolator() { return *m_interpolator; } //-------------------------------------------------------------------- void prepare() {} //-------------------------------------------------------------------- private: source_type* m_src; interpolator_type* m_interpolator; const image_filter_lut* m_filter; double m_dx_dbl; double m_dy_dbl; unsigned m_dx_int; unsigned m_dy_int; }; //==============================================span_image_resample_affine template class span_image_resample_affine : public span_image_filter > { public: typedef Source source_type; typedef span_interpolator_linear interpolator_type; typedef span_image_filter base_type; //-------------------------------------------------------------------- span_image_resample_affine() : m_scale_limit(200.0), m_blur_x(1.0), m_blur_y(1.0) {} //-------------------------------------------------------------------- span_image_resample_affine(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, &filter), m_scale_limit(200.0), m_blur_x(1.0), m_blur_y(1.0) {} //-------------------------------------------------------------------- int scale_limit() const { return uround(m_scale_limit); } void scale_limit(int v) { m_scale_limit = v; } //-------------------------------------------------------------------- double blur_x() const { return m_blur_x; } double blur_y() const { return m_blur_y; } void blur_x(double v) { m_blur_x = v; } void blur_y(double v) { m_blur_y = v; } void blur(double v) { m_blur_x = m_blur_y = v; } //-------------------------------------------------------------------- void prepare() { double scale_x; double scale_y; base_type::interpolator().transformer().scaling_abs(&scale_x, &scale_y); if(scale_x * scale_y > m_scale_limit) { scale_x = scale_x * m_scale_limit / (scale_x * scale_y); scale_y = scale_y * m_scale_limit / (scale_x * scale_y); } if(scale_x < 1) scale_x = 1; if(scale_y < 1) scale_y = 1; if(scale_x > m_scale_limit) scale_x = m_scale_limit; if(scale_y > m_scale_limit) scale_y = m_scale_limit; scale_x *= m_blur_x; scale_y *= m_blur_y; if(scale_x < 1) scale_x = 1; if(scale_y < 1) scale_y = 1; m_rx = uround( scale_x * double(image_subpixel_scale)); m_rx_inv = uround(1.0/scale_x * double(image_subpixel_scale)); m_ry = uround( scale_y * double(image_subpixel_scale)); m_ry_inv = uround(1.0/scale_y * double(image_subpixel_scale)); } protected: int m_rx; int m_ry; int m_rx_inv; int m_ry_inv; private: double m_scale_limit; double m_blur_x; double m_blur_y; }; //=====================================================span_image_resample template class span_image_resample : public span_image_filter { public: typedef Source source_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; //-------------------------------------------------------------------- span_image_resample() : m_scale_limit(20), m_blur_x(image_subpixel_scale), m_blur_y(image_subpixel_scale) {} //-------------------------------------------------------------------- span_image_resample(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, &filter), m_scale_limit(20), m_blur_x(image_subpixel_scale), m_blur_y(image_subpixel_scale) {} //-------------------------------------------------------------------- int scale_limit() const { return m_scale_limit; } void scale_limit(int v) { m_scale_limit = v; } //-------------------------------------------------------------------- double blur_x() const { return double(m_blur_x) / double(image_subpixel_scale); } double blur_y() const { return double(m_blur_y) / double(image_subpixel_scale); } void blur_x(double v) { m_blur_x = uround(v * double(image_subpixel_scale)); } void blur_y(double v) { m_blur_y = uround(v * double(image_subpixel_scale)); } void blur(double v) { m_blur_x = m_blur_y = uround(v * double(image_subpixel_scale)); } protected: AGG_INLINE void adjust_scale(int* rx, int* ry) { if(*rx < image_subpixel_scale) *rx = image_subpixel_scale; if(*ry < image_subpixel_scale) *ry = image_subpixel_scale; if(*rx > image_subpixel_scale * m_scale_limit) { *rx = image_subpixel_scale * m_scale_limit; } if(*ry > image_subpixel_scale * m_scale_limit) { *ry = image_subpixel_scale * m_scale_limit; } *rx = (*rx * m_blur_x) >> image_subpixel_shift; *ry = (*ry * m_blur_y) >> image_subpixel_shift; if(*rx < image_subpixel_scale) *rx = image_subpixel_scale; if(*ry < image_subpixel_scale) *ry = image_subpixel_scale; } int m_scale_limit; int m_blur_x; int m_blur_y; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_image_filter_gray.h000066400000000000000000000704631262555547000236240ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_IMAGE_FILTER_GRAY_INCLUDED #define AGG_SPAN_IMAGE_FILTER_GRAY_INCLUDED #include "agg_basics.h" #include "agg_color_gray.h" #include "agg_span_image_filter.h" namespace agg { //==============================================span_image_filter_gray_nn template class span_image_filter_gray_nn : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_gray_nn() {} span_image_filter_gray_nn(source_type& src, interpolator_type& inter) : base_type(src, inter, 0) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); do { base_type::interpolator().coordinates(&x, &y); span->v = *(const value_type*) base_type::source().span(x >> image_subpixel_shift, y >> image_subpixel_shift, 1); span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //=========================================span_image_filter_gray_bilinear template class span_image_filter_gray_bilinear : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_gray_bilinear() {} span_image_filter_gray_bilinear(source_type& src, interpolator_type& inter) : base_type(src, inter, 0) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); calc_type fg; const value_type *fg_ptr; do { int x_hr; int y_hr; base_type::interpolator().coordinates(&x_hr, &y_hr); x_hr -= base_type::filter_dx_int(); y_hr -= base_type::filter_dy_int(); int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; fg = image_subpixel_scale * image_subpixel_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, 2); fg += *fg_ptr * (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr); fg_ptr = (const value_type*)base_type::source().next_x(); fg += *fg_ptr * x_hr * (image_subpixel_scale - y_hr); fg_ptr = (const value_type*)base_type::source().next_y(); fg += *fg_ptr * (image_subpixel_scale - x_hr) * y_hr; fg_ptr = (const value_type*)base_type::source().next_x(); fg += *fg_ptr * x_hr * y_hr; span->v = value_type(fg >> (image_subpixel_shift * 2)); span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //====================================span_image_filter_gray_bilinear_clip template class span_image_filter_gray_bilinear_clip : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_gray_bilinear_clip() {} span_image_filter_gray_bilinear_clip(source_type& src, const color_type& back_color, interpolator_type& inter) : base_type(src, inter, 0), m_back_color(back_color) {} const color_type& background_color() const { return m_back_color; } void background_color(const color_type& v) { m_back_color = v; } //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); calc_type fg; calc_type src_alpha; value_type back_v = m_back_color.v; value_type back_a = m_back_color.a; const value_type *fg_ptr; int maxx = base_type::source().width() - 1; int maxy = base_type::source().height() - 1; do { int x_hr; int y_hr; base_type::interpolator().coordinates(&x_hr, &y_hr); x_hr -= base_type::filter_dx_int(); y_hr -= base_type::filter_dy_int(); int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; if(x_lr >= 0 && y_lr >= 0 && x_lr < maxx && y_lr < maxy) { fg = image_subpixel_scale * image_subpixel_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; fg_ptr = (const value_type*)base_type::source().row_ptr(y_lr) + x_lr; fg += *fg_ptr++ * (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr); fg += *fg_ptr++ * (image_subpixel_scale - y_hr) * x_hr; ++y_lr; fg_ptr = (const value_type*)base_type::source().row_ptr(y_lr) + x_lr; fg += *fg_ptr++ * (image_subpixel_scale - x_hr) * y_hr; fg += *fg_ptr++ * x_hr * y_hr; fg >>= image_subpixel_shift * 2; src_alpha = base_mask; } else { unsigned weight; if(x_lr < -1 || y_lr < -1 || x_lr > maxx || y_lr > maxy) { fg = back_v; src_alpha = back_a; } else { fg = src_alpha = image_subpixel_scale * image_subpixel_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; weight = (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr); if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg += weight * *((const value_type*)base_type::source().row_ptr(y_lr) + x_lr); src_alpha += weight * base_mask; } else { fg += back_v * weight; src_alpha += back_a * weight; } x_lr++; weight = x_hr * (image_subpixel_scale - y_hr); if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg += weight * *((const value_type*)base_type::source().row_ptr(y_lr) + x_lr); src_alpha += weight * base_mask; } else { fg += back_v * weight; src_alpha += back_a * weight; } x_lr--; y_lr++; weight = (image_subpixel_scale - x_hr) * y_hr; if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg += weight * *((const value_type*)base_type::source().row_ptr(y_lr) + x_lr); src_alpha += weight * base_mask; } else { fg += back_v * weight; src_alpha += back_a * weight; } x_lr++; weight = x_hr * y_hr; if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg += weight * *((const value_type*)base_type::source().row_ptr(y_lr) + x_lr); src_alpha += weight * base_mask; } else { fg += back_v * weight; src_alpha += back_a * weight; } fg >>= image_subpixel_shift * 2; src_alpha >>= image_subpixel_shift * 2; } } span->v = (value_type)fg; span->a = (value_type)src_alpha; ++span; ++base_type::interpolator(); } while(--len); } private: color_type m_back_color; }; //==============================================span_image_filter_gray_2x2 template class span_image_filter_gray_2x2 : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_gray_2x2() {} span_image_filter_gray_2x2(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, &filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); calc_type fg; const value_type *fg_ptr; const int16* weight_array = base_type::filter().weight_array() + ((base_type::filter().diameter()/2 - 1) << image_subpixel_shift); do { int x_hr; int y_hr; base_type::interpolator().coordinates(&x_hr, &y_hr); x_hr -= base_type::filter_dx_int(); y_hr -= base_type::filter_dy_int(); int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; unsigned weight; fg = image_filter_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, 2); weight = (weight_array[x_hr + image_subpixel_scale] * weight_array[y_hr + image_subpixel_scale] + image_filter_scale / 2) >> image_filter_shift; fg += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = (weight_array[x_hr] * weight_array[y_hr + image_subpixel_scale] + image_filter_scale / 2) >> image_filter_shift; fg += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_y(); weight = (weight_array[x_hr + image_subpixel_scale] * weight_array[y_hr] + image_filter_scale / 2) >> image_filter_shift; fg += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = (weight_array[x_hr] * weight_array[y_hr] + image_filter_scale / 2) >> image_filter_shift; fg += weight * *fg_ptr; fg >>= image_filter_shift; if(fg > base_mask) fg = base_mask; span->v = (value_type)fg; span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //==================================================span_image_filter_gray template class span_image_filter_gray : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_gray() {} span_image_filter_gray(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, &filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); int fg; const value_type *fg_ptr; unsigned diameter = base_type::filter().diameter(); int start = base_type::filter().start(); const int16* weight_array = base_type::filter().weight_array(); int x_count; int weight_y; do { base_type::interpolator().coordinates(&x, &y); x -= base_type::filter_dx_int(); y -= base_type::filter_dy_int(); int x_hr = x; int y_hr = y; int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; fg = image_filter_scale / 2; int x_fract = x_hr & image_subpixel_mask; unsigned y_count = diameter; y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask); fg_ptr = (const value_type*)base_type::source().span(x_lr + start, y_lr + start, diameter); for(;;) { x_count = diameter; weight_y = weight_array[y_hr]; x_hr = image_subpixel_mask - x_fract; for(;;) { fg += *fg_ptr * ((weight_y * weight_array[x_hr] + image_filter_scale / 2) >> image_filter_shift); if(--x_count == 0) break; x_hr += image_subpixel_scale; fg_ptr = (const value_type*)base_type::source().next_x(); } if(--y_count == 0) break; y_hr += image_subpixel_scale; fg_ptr = (const value_type*)base_type::source().next_y(); } fg >>= image_filter_shift; if(fg < 0) fg = 0; if(fg > base_mask) fg = base_mask; span->v = (value_type)fg; span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //=========================================span_image_resample_gray_affine template class span_image_resample_gray_affine : public span_image_resample_affine { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef span_image_resample_affine base_type; typedef typename base_type::interpolator_type interpolator_type; typedef typename color_type::value_type value_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask, downscale_shift = image_filter_shift }; //-------------------------------------------------------------------- span_image_resample_gray_affine() {} span_image_resample_gray_affine(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); long_type fg; int diameter = base_type::filter().diameter(); int filter_scale = diameter << image_subpixel_shift; int radius_x = (diameter * base_type::m_rx) >> 1; int radius_y = (diameter * base_type::m_ry) >> 1; int len_x_lr = (diameter * base_type::m_rx + image_subpixel_mask) >> image_subpixel_shift; const int16* weight_array = base_type::filter().weight_array(); do { base_type::interpolator().coordinates(&x, &y); x += base_type::filter_dx_int() - radius_x; y += base_type::filter_dy_int() - radius_y; fg = image_filter_scale / 2; int y_lr = y >> image_subpixel_shift; int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) * base_type::m_ry_inv) >> image_subpixel_shift; int total_weight = 0; int x_lr = x >> image_subpixel_shift; int x_hr = ((image_subpixel_mask - (x & image_subpixel_mask)) * base_type::m_rx_inv) >> image_subpixel_shift; int x_hr2 = x_hr; const value_type* fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, len_x_lr); for(;;) { int weight_y = weight_array[y_hr]; x_hr = x_hr2; for(;;) { int weight = (weight_y * weight_array[x_hr] + image_filter_scale / 2) >> downscale_shift; fg += *fg_ptr * weight; total_weight += weight; x_hr += base_type::m_rx_inv; if(x_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_x(); } y_hr += base_type::m_ry_inv; if(y_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_y(); } fg /= total_weight; if(fg < 0) fg = 0; if(fg > base_mask) fg = base_mask; span->v = (value_type)fg; span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //================================================span_image_resample_gray template class span_image_resample_gray : public span_image_resample { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef Interpolator interpolator_type; typedef span_image_resample base_type; typedef typename color_type::value_type value_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask, downscale_shift = image_filter_shift }; //-------------------------------------------------------------------- span_image_resample_gray() {} span_image_resample_gray(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); long_type fg; int diameter = base_type::filter().diameter(); int filter_scale = diameter << image_subpixel_shift; const int16* weight_array = base_type::filter().weight_array(); do { int rx; int ry; int rx_inv = image_subpixel_scale; int ry_inv = image_subpixel_scale; base_type::interpolator().coordinates(&x, &y); base_type::interpolator().local_scale(&rx, &ry); base_type::adjust_scale(&rx, &ry); rx_inv = image_subpixel_scale * image_subpixel_scale / rx; ry_inv = image_subpixel_scale * image_subpixel_scale / ry; int radius_x = (diameter * rx) >> 1; int radius_y = (diameter * ry) >> 1; int len_x_lr = (diameter * rx + image_subpixel_mask) >> image_subpixel_shift; x += base_type::filter_dx_int() - radius_x; y += base_type::filter_dy_int() - radius_y; fg = image_filter_scale / 2; int y_lr = y >> image_subpixel_shift; int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) * ry_inv) >> image_subpixel_shift; int total_weight = 0; int x_lr = x >> image_subpixel_shift; int x_hr = ((image_subpixel_mask - (x & image_subpixel_mask)) * rx_inv) >> image_subpixel_shift; int x_hr2 = x_hr; const value_type* fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, len_x_lr); for(;;) { int weight_y = weight_array[y_hr]; x_hr = x_hr2; for(;;) { int weight = (weight_y * weight_array[x_hr] + image_filter_scale / 2) >> downscale_shift; fg += *fg_ptr * weight; total_weight += weight; x_hr += rx_inv; if(x_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_x(); } y_hr += ry_inv; if(y_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_y(); } fg /= total_weight; if(fg < 0) fg = 0; if(fg > base_mask) fg = base_mask; span->v = (value_type)fg; span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_image_filter_rgb.h000066400000000000000000001056321262555547000234310ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_IMAGE_FILTER_RGB_INCLUDED #define AGG_SPAN_IMAGE_FILTER_RGB_INCLUDED #include "agg_basics.h" #include "agg_color_rgba.h" #include "agg_span_image_filter.h" namespace agg { //===============================================span_image_filter_rgb_nn template class span_image_filter_rgb_nn : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgb_nn() {} span_image_filter_rgb_nn(source_type& src, interpolator_type& inter) : base_type(src, inter, 0) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); do { base_type::interpolator().coordinates(&x, &y); const value_type* fg_ptr = (const value_type*) base_type::source().span(x >> image_subpixel_shift, y >> image_subpixel_shift, 1); span->r = fg_ptr[order_type::R]; span->g = fg_ptr[order_type::G]; span->b = fg_ptr[order_type::B]; span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //==========================================span_image_filter_rgb_bilinear template class span_image_filter_rgb_bilinear : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgb_bilinear() {} span_image_filter_rgb_bilinear(source_type& src, interpolator_type& inter) : base_type(src, inter, 0) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); calc_type fg[3]; const value_type *fg_ptr; do { int x_hr; int y_hr; base_type::interpolator().coordinates(&x_hr, &y_hr); x_hr -= base_type::filter_dx_int(); y_hr -= base_type::filter_dy_int(); int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; unsigned weight; fg[0] = fg[1] = fg[2] = image_subpixel_scale * image_subpixel_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, 2); weight = (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = x_hr * (image_subpixel_scale - y_hr); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_y(); weight = (image_subpixel_scale - x_hr) * y_hr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = x_hr * y_hr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr; span->r = value_type(fg[order_type::R] >> (image_subpixel_shift * 2)); span->g = value_type(fg[order_type::G] >> (image_subpixel_shift * 2)); span->b = value_type(fg[order_type::B] >> (image_subpixel_shift * 2)); span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //=====================================span_image_filter_rgb_bilinear_clip template class span_image_filter_rgb_bilinear_clip : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgb_bilinear_clip() {} span_image_filter_rgb_bilinear_clip(source_type& src, const color_type& back_color, interpolator_type& inter) : base_type(src, inter, 0), m_back_color(back_color) {} const color_type& background_color() const { return m_back_color; } void background_color(const color_type& v) { m_back_color = v; } //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); calc_type fg[3]; calc_type src_alpha; value_type back_r = m_back_color.r; value_type back_g = m_back_color.g; value_type back_b = m_back_color.b; value_type back_a = m_back_color.a; const value_type *fg_ptr; int maxx = base_type::source().width() - 1; int maxy = base_type::source().height() - 1; do { int x_hr; int y_hr; base_type::interpolator().coordinates(&x_hr, &y_hr); x_hr -= base_type::filter_dx_int(); y_hr -= base_type::filter_dy_int(); int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; unsigned weight; if(x_lr >= 0 && y_lr >= 0 && x_lr < maxx && y_lr < maxy) { fg[0] = fg[1] = fg[2] = image_subpixel_scale * image_subpixel_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + x_lr + x_lr + x_lr; weight = (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; weight = x_hr * (image_subpixel_scale - y_hr); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; ++y_lr; fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + x_lr + x_lr + x_lr; weight = (image_subpixel_scale - x_hr) * y_hr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; weight = x_hr * y_hr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[0] >>= image_subpixel_shift * 2; fg[1] >>= image_subpixel_shift * 2; fg[2] >>= image_subpixel_shift * 2; src_alpha = base_mask; } else { if(x_lr < -1 || y_lr < -1 || x_lr > maxx || y_lr > maxy) { fg[order_type::R] = back_r; fg[order_type::G] = back_g; fg[order_type::B] = back_b; src_alpha = back_a; } else { fg[0] = fg[1] = fg[2] = src_alpha = image_subpixel_scale * image_subpixel_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; weight = (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr); if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + x_lr + x_lr + x_lr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; src_alpha += weight * base_mask; } else { fg[order_type::R] += back_r * weight; fg[order_type::G] += back_g * weight; fg[order_type::B] += back_b * weight; src_alpha += back_a * weight; } x_lr++; weight = x_hr * (image_subpixel_scale - y_hr); if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + x_lr + x_lr + x_lr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; src_alpha += weight * base_mask; } else { fg[order_type::R] += back_r * weight; fg[order_type::G] += back_g * weight; fg[order_type::B] += back_b * weight; src_alpha += back_a * weight; } x_lr--; y_lr++; weight = (image_subpixel_scale - x_hr) * y_hr; if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + x_lr + x_lr + x_lr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; src_alpha += weight * base_mask; } else { fg[order_type::R] += back_r * weight; fg[order_type::G] += back_g * weight; fg[order_type::B] += back_b * weight; src_alpha += back_a * weight; } x_lr++; weight = x_hr * y_hr; if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + x_lr + x_lr + x_lr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; src_alpha += weight * base_mask; } else { fg[order_type::R] += back_r * weight; fg[order_type::G] += back_g * weight; fg[order_type::B] += back_b * weight; src_alpha += back_a * weight; } fg[0] >>= image_subpixel_shift * 2; fg[1] >>= image_subpixel_shift * 2; fg[2] >>= image_subpixel_shift * 2; src_alpha >>= image_subpixel_shift * 2; } } span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = (value_type)src_alpha; ++span; ++base_type::interpolator(); } while(--len); } private: color_type m_back_color; }; //===============================================span_image_filter_rgb_2x2 template class span_image_filter_rgb_2x2 : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgb_2x2() {} span_image_filter_rgb_2x2(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, &filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); calc_type fg[3]; const value_type *fg_ptr; const int16* weight_array = base_type::filter().weight_array() + ((base_type::filter().diameter()/2 - 1) << image_subpixel_shift); do { int x_hr; int y_hr; base_type::interpolator().coordinates(&x_hr, &y_hr); x_hr -= base_type::filter_dx_int(); y_hr -= base_type::filter_dy_int(); int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; unsigned weight; fg[0] = fg[1] = fg[2] = image_filter_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, 2); weight = (weight_array[x_hr + image_subpixel_scale] * weight_array[y_hr + image_subpixel_scale] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = (weight_array[x_hr] * weight_array[y_hr + image_subpixel_scale] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_y(); weight = (weight_array[x_hr + image_subpixel_scale] * weight_array[y_hr] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = (weight_array[x_hr] * weight_array[y_hr] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr; fg[0] >>= image_filter_shift; fg[1] >>= image_filter_shift; fg[2] >>= image_filter_shift; if(fg[order_type::R] > base_mask) fg[order_type::R] = base_mask; if(fg[order_type::G] > base_mask) fg[order_type::G] = base_mask; if(fg[order_type::B] > base_mask) fg[order_type::B] = base_mask; span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //===================================================span_image_filter_rgb template class span_image_filter_rgb : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgb() {} span_image_filter_rgb(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, &filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); int fg[3]; const value_type *fg_ptr; unsigned diameter = base_type::filter().diameter(); int start = base_type::filter().start(); const int16* weight_array = base_type::filter().weight_array(); int x_count; int weight_y; do { base_type::interpolator().coordinates(&x, &y); x -= base_type::filter_dx_int(); y -= base_type::filter_dy_int(); int x_hr = x; int y_hr = y; int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; fg[0] = fg[1] = fg[2] = image_filter_scale / 2; int x_fract = x_hr & image_subpixel_mask; unsigned y_count = diameter; y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask); fg_ptr = (const value_type*)base_type::source().span(x_lr + start, y_lr + start, diameter); for(;;) { x_count = diameter; weight_y = weight_array[y_hr]; x_hr = image_subpixel_mask - x_fract; for(;;) { int weight = (weight_y * weight_array[x_hr] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr; if(--x_count == 0) break; x_hr += image_subpixel_scale; fg_ptr = (const value_type*)base_type::source().next_x(); } if(--y_count == 0) break; y_hr += image_subpixel_scale; fg_ptr = (const value_type*)base_type::source().next_y(); } fg[0] >>= image_filter_shift; fg[1] >>= image_filter_shift; fg[2] >>= image_filter_shift; if(fg[0] < 0) fg[0] = 0; if(fg[1] < 0) fg[1] = 0; if(fg[2] < 0) fg[2] = 0; if(fg[order_type::R] > base_mask) fg[order_type::R] = base_mask; if(fg[order_type::G] > base_mask) fg[order_type::G] = base_mask; if(fg[order_type::B] > base_mask) fg[order_type::B] = base_mask; span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //==========================================span_image_resample_rgb_affine template class span_image_resample_rgb_affine : public span_image_resample_affine { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef span_image_resample_affine base_type; typedef typename base_type::interpolator_type interpolator_type; typedef typename color_type::value_type value_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask, downscale_shift = image_filter_shift }; //-------------------------------------------------------------------- span_image_resample_rgb_affine() {} span_image_resample_rgb_affine(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); long_type fg[3]; int diameter = base_type::filter().diameter(); int filter_scale = diameter << image_subpixel_shift; int radius_x = (diameter * base_type::m_rx) >> 1; int radius_y = (diameter * base_type::m_ry) >> 1; int len_x_lr = (diameter * base_type::m_rx + image_subpixel_mask) >> image_subpixel_shift; const int16* weight_array = base_type::filter().weight_array(); do { base_type::interpolator().coordinates(&x, &y); x += base_type::filter_dx_int() - radius_x; y += base_type::filter_dy_int() - radius_y; fg[0] = fg[1] = fg[2] = image_filter_scale / 2; int y_lr = y >> image_subpixel_shift; int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) * base_type::m_ry_inv) >> image_subpixel_shift; int total_weight = 0; int x_lr = x >> image_subpixel_shift; int x_hr = ((image_subpixel_mask - (x & image_subpixel_mask)) * base_type::m_rx_inv) >> image_subpixel_shift; int x_hr2 = x_hr; const value_type* fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, len_x_lr); for(;;) { int weight_y = weight_array[y_hr]; x_hr = x_hr2; for(;;) { int weight = (weight_y * weight_array[x_hr] + image_filter_scale / 2) >> downscale_shift; fg[0] += *fg_ptr++ * weight; fg[1] += *fg_ptr++ * weight; fg[2] += *fg_ptr * weight; total_weight += weight; x_hr += base_type::m_rx_inv; if(x_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_x(); } y_hr += base_type::m_ry_inv; if(y_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_y(); } fg[0] /= total_weight; fg[1] /= total_weight; fg[2] /= total_weight; if(fg[0] < 0) fg[0] = 0; if(fg[1] < 0) fg[1] = 0; if(fg[2] < 0) fg[2] = 0; if(fg[order_type::R] > base_mask) fg[order_type::R] = base_mask; if(fg[order_type::G] > base_mask) fg[order_type::G] = base_mask; if(fg[order_type::B] > base_mask) fg[order_type::B] = base_mask; span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; //=================================================span_image_resample_rgb template class span_image_resample_rgb : public span_image_resample { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_resample base_type; typedef typename color_type::value_type value_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask, downscale_shift = image_filter_shift }; //-------------------------------------------------------------------- span_image_resample_rgb() {} span_image_resample_rgb(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); long_type fg[3]; int diameter = base_type::filter().diameter(); int filter_scale = diameter << image_subpixel_shift; const int16* weight_array = base_type::filter().weight_array(); do { int rx; int ry; int rx_inv = image_subpixel_scale; int ry_inv = image_subpixel_scale; base_type::interpolator().coordinates(&x, &y); base_type::interpolator().local_scale(&rx, &ry); base_type::adjust_scale(&rx, &ry); rx_inv = image_subpixel_scale * image_subpixel_scale / rx; ry_inv = image_subpixel_scale * image_subpixel_scale / ry; int radius_x = (diameter * rx) >> 1; int radius_y = (diameter * ry) >> 1; int len_x_lr = (diameter * rx + image_subpixel_mask) >> image_subpixel_shift; x += base_type::filter_dx_int() - radius_x; y += base_type::filter_dy_int() - radius_y; fg[0] = fg[1] = fg[2] = image_filter_scale / 2; int y_lr = y >> image_subpixel_shift; int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) * ry_inv) >> image_subpixel_shift; int total_weight = 0; int x_lr = x >> image_subpixel_shift; int x_hr = ((image_subpixel_mask - (x & image_subpixel_mask)) * rx_inv) >> image_subpixel_shift; int x_hr2 = x_hr; const value_type* fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, len_x_lr); for(;;) { int weight_y = weight_array[y_hr]; x_hr = x_hr2; for(;;) { int weight = (weight_y * weight_array[x_hr] + image_filter_scale / 2) >> downscale_shift; fg[0] += *fg_ptr++ * weight; fg[1] += *fg_ptr++ * weight; fg[2] += *fg_ptr * weight; total_weight += weight; x_hr += rx_inv; if(x_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_x(); } y_hr += ry_inv; if(y_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_y(); } fg[0] /= total_weight; fg[1] /= total_weight; fg[2] /= total_weight; if(fg[0] < 0) fg[0] = 0; if(fg[1] < 0) fg[1] = 0; if(fg[2] < 0) fg[2] = 0; if(fg[order_type::R] > base_mask) fg[order_type::R] = base_mask; if(fg[order_type::G] > base_mask) fg[order_type::G] = base_mask; if(fg[order_type::B] > base_mask) fg[order_type::B] = base_mask; span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = base_mask; ++span; ++base_type::interpolator(); } while(--len); } }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_image_filter_rgba.h000066400000000000000000001111111262555547000235570ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_IMAGE_FILTER_RGBA_INCLUDED #define AGG_SPAN_IMAGE_FILTER_RGBA_INCLUDED #include "agg_basics.h" #include "agg_color_rgba.h" #include "agg_span_image_filter.h" namespace agg { //==============================================span_image_filter_rgba_nn template class span_image_filter_rgba_nn : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgba_nn() {} span_image_filter_rgba_nn(source_type& src, interpolator_type& inter) : base_type(src, inter, 0) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); do { base_type::interpolator().coordinates(&x, &y); const value_type* fg_ptr = (const value_type*) base_type::source().span(x >> image_subpixel_shift, y >> image_subpixel_shift, 1); span->r = fg_ptr[order_type::R]; span->g = fg_ptr[order_type::G]; span->b = fg_ptr[order_type::B]; span->a = fg_ptr[order_type::A]; ++span; ++base_type::interpolator(); } while(--len); } }; //=========================================span_image_filter_rgba_bilinear template class span_image_filter_rgba_bilinear : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgba_bilinear() {} span_image_filter_rgba_bilinear(source_type& src, interpolator_type& inter) : base_type(src, inter, 0) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); calc_type fg[4]; const value_type *fg_ptr; do { int x_hr; int y_hr; base_type::interpolator().coordinates(&x_hr, &y_hr); x_hr -= base_type::filter_dx_int(); y_hr -= base_type::filter_dy_int(); int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; unsigned weight; fg[0] = fg[1] = fg[2] = fg[3] = image_subpixel_scale * image_subpixel_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, 2); weight = (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = x_hr * (image_subpixel_scale - y_hr); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_y(); weight = (image_subpixel_scale - x_hr) * y_hr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = x_hr * y_hr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr; span->r = value_type(fg[order_type::R] >> (image_subpixel_shift * 2)); span->g = value_type(fg[order_type::G] >> (image_subpixel_shift * 2)); span->b = value_type(fg[order_type::B] >> (image_subpixel_shift * 2)); span->a = value_type(fg[order_type::A] >> (image_subpixel_shift * 2)); ++span; ++base_type::interpolator(); } while(--len); } }; //====================================span_image_filter_rgba_bilinear_clip template class span_image_filter_rgba_bilinear_clip : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgba_bilinear_clip() {} span_image_filter_rgba_bilinear_clip(source_type& src, const color_type& back_color, interpolator_type& inter) : base_type(src, inter, 0), m_back_color(back_color) {} const color_type& background_color() const { return m_back_color; } void background_color(const color_type& v) { m_back_color = v; } //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); calc_type fg[4]; value_type back_r = m_back_color.r; value_type back_g = m_back_color.g; value_type back_b = m_back_color.b; value_type back_a = m_back_color.a; const value_type *fg_ptr; int maxx = base_type::source().width() - 1; int maxy = base_type::source().height() - 1; do { int x_hr; int y_hr; base_type::interpolator().coordinates(&x_hr, &y_hr); x_hr -= base_type::filter_dx_int(); y_hr -= base_type::filter_dy_int(); int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; unsigned weight; if(x_lr >= 0 && y_lr >= 0 && x_lr < maxx && y_lr < maxy) { fg[0] = fg[1] = fg[2] = fg[3] = image_subpixel_scale * image_subpixel_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + (x_lr << 2); weight = (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr++; weight = x_hr * (image_subpixel_scale - y_hr); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr++; ++y_lr; fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + (x_lr << 2); weight = (image_subpixel_scale - x_hr) * y_hr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr++; weight = x_hr * y_hr; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr++; fg[0] >>= image_subpixel_shift * 2; fg[1] >>= image_subpixel_shift * 2; fg[2] >>= image_subpixel_shift * 2; fg[3] >>= image_subpixel_shift * 2; } else { if(x_lr < -1 || y_lr < -1 || x_lr > maxx || y_lr > maxy) { fg[order_type::R] = back_r; fg[order_type::G] = back_g; fg[order_type::B] = back_b; fg[order_type::A] = back_a; } else { fg[0] = fg[1] = fg[2] = fg[3] = image_subpixel_scale * image_subpixel_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; weight = (image_subpixel_scale - x_hr) * (image_subpixel_scale - y_hr); if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + (x_lr << 2); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr++; } else { fg[order_type::R] += back_r * weight; fg[order_type::G] += back_g * weight; fg[order_type::B] += back_b * weight; fg[order_type::A] += back_a * weight; } x_lr++; weight = x_hr * (image_subpixel_scale - y_hr); if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + (x_lr << 2); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr++; } else { fg[order_type::R] += back_r * weight; fg[order_type::G] += back_g * weight; fg[order_type::B] += back_b * weight; fg[order_type::A] += back_a * weight; } x_lr--; y_lr++; weight = (image_subpixel_scale - x_hr) * y_hr; if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + (x_lr << 2); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr++; } else { fg[order_type::R] += back_r * weight; fg[order_type::G] += back_g * weight; fg[order_type::B] += back_b * weight; fg[order_type::A] += back_a * weight; } x_lr++; weight = x_hr * y_hr; if(x_lr >= 0 && y_lr >= 0 && x_lr <= maxx && y_lr <= maxy) { fg_ptr = (const value_type*) base_type::source().row_ptr(y_lr) + (x_lr << 2); fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr++; } else { fg[order_type::R] += back_r * weight; fg[order_type::G] += back_g * weight; fg[order_type::B] += back_b * weight; fg[order_type::A] += back_a * weight; } fg[0] >>= image_subpixel_shift * 2; fg[1] >>= image_subpixel_shift * 2; fg[2] >>= image_subpixel_shift * 2; fg[3] >>= image_subpixel_shift * 2; } } span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = (value_type)fg[order_type::A]; ++span; ++base_type::interpolator(); } while(--len); } private: color_type m_back_color; }; //==============================================span_image_filter_rgba_2x2 template class span_image_filter_rgba_2x2 : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgba_2x2() {} span_image_filter_rgba_2x2(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, &filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); calc_type fg[4]; const value_type *fg_ptr; const int16* weight_array = base_type::filter().weight_array() + ((base_type::filter().diameter()/2 - 1) << image_subpixel_shift); do { int x_hr; int y_hr; base_type::interpolator().coordinates(&x_hr, &y_hr); x_hr -= base_type::filter_dx_int(); y_hr -= base_type::filter_dy_int(); int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; unsigned weight; fg[0] = fg[1] = fg[2] = fg[3] = image_filter_scale / 2; x_hr &= image_subpixel_mask; y_hr &= image_subpixel_mask; fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, 2); weight = (weight_array[x_hr + image_subpixel_scale] * weight_array[y_hr + image_subpixel_scale] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = (weight_array[x_hr] * weight_array[y_hr + image_subpixel_scale] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_y(); weight = (weight_array[x_hr + image_subpixel_scale] * weight_array[y_hr] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr; fg_ptr = (const value_type*)base_type::source().next_x(); weight = (weight_array[x_hr] * weight_array[y_hr] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr; fg[0] >>= image_filter_shift; fg[1] >>= image_filter_shift; fg[2] >>= image_filter_shift; fg[3] >>= image_filter_shift; if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask; if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A]; if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A]; if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A]; span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = (value_type)fg[order_type::A]; ++span; ++base_type::interpolator(); } while(--len); } }; //==================================================span_image_filter_rgba template class span_image_filter_rgba : public span_image_filter { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_filter base_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask }; //-------------------------------------------------------------------- span_image_filter_rgba() {} span_image_filter_rgba(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, &filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); int fg[4]; const value_type *fg_ptr; unsigned diameter = base_type::filter().diameter(); int start = base_type::filter().start(); const int16* weight_array = base_type::filter().weight_array(); int x_count; int weight_y; do { base_type::interpolator().coordinates(&x, &y); x -= base_type::filter_dx_int(); y -= base_type::filter_dy_int(); int x_hr = x; int y_hr = y; int x_lr = x_hr >> image_subpixel_shift; int y_lr = y_hr >> image_subpixel_shift; fg[0] = fg[1] = fg[2] = fg[3] = image_filter_scale / 2; int x_fract = x_hr & image_subpixel_mask; unsigned y_count = diameter; y_hr = image_subpixel_mask - (y_hr & image_subpixel_mask); fg_ptr = (const value_type*)base_type::source().span(x_lr + start, y_lr + start, diameter); for(;;) { x_count = diameter; weight_y = weight_array[y_hr]; x_hr = image_subpixel_mask - x_fract; for(;;) { int weight = (weight_y * weight_array[x_hr] + image_filter_scale / 2) >> image_filter_shift; fg[0] += weight * *fg_ptr++; fg[1] += weight * *fg_ptr++; fg[2] += weight * *fg_ptr++; fg[3] += weight * *fg_ptr; if(--x_count == 0) break; x_hr += image_subpixel_scale; fg_ptr = (const value_type*)base_type::source().next_x(); } if(--y_count == 0) break; y_hr += image_subpixel_scale; fg_ptr = (const value_type*)base_type::source().next_y(); } fg[0] >>= image_filter_shift; fg[1] >>= image_filter_shift; fg[2] >>= image_filter_shift; fg[3] >>= image_filter_shift; if(fg[0] < 0) fg[0] = 0; if(fg[1] < 0) fg[1] = 0; if(fg[2] < 0) fg[2] = 0; if(fg[3] < 0) fg[3] = 0; if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask; if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A]; if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A]; if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A]; span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = (value_type)fg[order_type::A]; ++span; ++base_type::interpolator(); } while(--len); } }; //========================================span_image_resample_rgba_affine template class span_image_resample_rgba_affine : public span_image_resample_affine { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef span_image_resample_affine base_type; typedef typename base_type::interpolator_type interpolator_type; typedef typename color_type::value_type value_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask, downscale_shift = image_filter_shift }; //-------------------------------------------------------------------- span_image_resample_rgba_affine() {} span_image_resample_rgba_affine(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); long_type fg[4]; int diameter = base_type::filter().diameter(); int filter_scale = diameter << image_subpixel_shift; int radius_x = (diameter * base_type::m_rx) >> 1; int radius_y = (diameter * base_type::m_ry) >> 1; int len_x_lr = (diameter * base_type::m_rx + image_subpixel_mask) >> image_subpixel_shift; const int16* weight_array = base_type::filter().weight_array(); do { base_type::interpolator().coordinates(&x, &y); x += base_type::filter_dx_int() - radius_x; y += base_type::filter_dy_int() - radius_y; fg[0] = fg[1] = fg[2] = fg[3] = image_filter_scale / 2; int y_lr = y >> image_subpixel_shift; int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) * base_type::m_ry_inv) >> image_subpixel_shift; int total_weight = 0; int x_lr = x >> image_subpixel_shift; int x_hr = ((image_subpixel_mask - (x & image_subpixel_mask)) * base_type::m_rx_inv) >> image_subpixel_shift; int x_hr2 = x_hr; const value_type* fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, len_x_lr); for(;;) { int weight_y = weight_array[y_hr]; x_hr = x_hr2; for(;;) { int weight = (weight_y * weight_array[x_hr] + image_filter_scale / 2) >> downscale_shift; fg[0] += *fg_ptr++ * weight; fg[1] += *fg_ptr++ * weight; fg[2] += *fg_ptr++ * weight; fg[3] += *fg_ptr++ * weight; total_weight += weight; x_hr += base_type::m_rx_inv; if(x_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_x(); } y_hr += base_type::m_ry_inv; if(y_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_y(); } fg[0] /= total_weight; fg[1] /= total_weight; fg[2] /= total_weight; fg[3] /= total_weight; if(fg[0] < 0) fg[0] = 0; if(fg[1] < 0) fg[1] = 0; if(fg[2] < 0) fg[2] = 0; if(fg[3] < 0) fg[3] = 0; if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask; if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A]; if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A]; if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A]; span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = (value_type)fg[order_type::A]; ++span; ++base_type::interpolator(); } while(--len); } }; //==============================================span_image_resample_rgba template class span_image_resample_rgba : public span_image_resample { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef Interpolator interpolator_type; typedef span_image_resample base_type; typedef typename color_type::value_type value_type; typedef typename color_type::long_type long_type; enum base_scale_e { base_shift = color_type::base_shift, base_mask = color_type::base_mask, downscale_shift = image_filter_shift }; //-------------------------------------------------------------------- span_image_resample_rgba() {} span_image_resample_rgba(source_type& src, interpolator_type& inter, const image_filter_lut& filter) : base_type(src, inter, filter) {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { base_type::interpolator().begin(x + base_type::filter_dx_dbl(), y + base_type::filter_dy_dbl(), len); long_type fg[4]; int diameter = base_type::filter().diameter(); int filter_scale = diameter << image_subpixel_shift; const int16* weight_array = base_type::filter().weight_array(); do { int rx; int ry; int rx_inv = image_subpixel_scale; int ry_inv = image_subpixel_scale; base_type::interpolator().coordinates(&x, &y); base_type::interpolator().local_scale(&rx, &ry); base_type::adjust_scale(&rx, &ry); rx_inv = image_subpixel_scale * image_subpixel_scale / rx; ry_inv = image_subpixel_scale * image_subpixel_scale / ry; int radius_x = (diameter * rx) >> 1; int radius_y = (diameter * ry) >> 1; int len_x_lr = (diameter * rx + image_subpixel_mask) >> image_subpixel_shift; x += base_type::filter_dx_int() - radius_x; y += base_type::filter_dy_int() - radius_y; fg[0] = fg[1] = fg[2] = fg[3] = image_filter_scale / 2; int y_lr = y >> image_subpixel_shift; int y_hr = ((image_subpixel_mask - (y & image_subpixel_mask)) * ry_inv) >> image_subpixel_shift; int total_weight = 0; int x_lr = x >> image_subpixel_shift; int x_hr = ((image_subpixel_mask - (x & image_subpixel_mask)) * rx_inv) >> image_subpixel_shift; int x_hr2 = x_hr; const value_type* fg_ptr = (const value_type*)base_type::source().span(x_lr, y_lr, len_x_lr); for(;;) { int weight_y = weight_array[y_hr]; x_hr = x_hr2; for(;;) { int weight = (weight_y * weight_array[x_hr] + image_filter_scale / 2) >> downscale_shift; fg[0] += *fg_ptr++ * weight; fg[1] += *fg_ptr++ * weight; fg[2] += *fg_ptr++ * weight; fg[3] += *fg_ptr++ * weight; total_weight += weight; x_hr += rx_inv; if(x_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_x(); } y_hr += ry_inv; if(y_hr >= filter_scale) break; fg_ptr = (const value_type*)base_type::source().next_y(); } fg[0] /= total_weight; fg[1] /= total_weight; fg[2] /= total_weight; fg[3] /= total_weight; if(fg[0] < 0) fg[0] = 0; if(fg[1] < 0) fg[1] = 0; if(fg[2] < 0) fg[2] = 0; if(fg[3] < 0) fg[3] = 0; if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask; if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A]; if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A]; if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A]; span->r = (value_type)fg[order_type::R]; span->g = (value_type)fg[order_type::G]; span->b = (value_type)fg[order_type::B]; span->a = (value_type)fg[order_type::A]; ++span; ++base_type::interpolator(); } while(--len); } }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_interpolator_adaptor.h000066400000000000000000000051521262555547000244000ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SPAN_INTERPOLATOR_ADAPTOR_INCLUDED #define AGG_SPAN_INTERPOLATOR_ADAPTOR_INCLUDED #include "agg_basics.h" namespace agg { //===============================================span_interpolator_adaptor template class span_interpolator_adaptor : public Interpolator { public: typedef Interpolator base_type; typedef typename base_type::trans_type trans_type; typedef Distortion distortion_type; //-------------------------------------------------------------------- span_interpolator_adaptor() {} span_interpolator_adaptor(const trans_type& trans, const distortion_type& dist) : base_type(trans), m_distortion(&dist) { } //-------------------------------------------------------------------- span_interpolator_adaptor(const trans_type& trans, const distortion_type& dist, double x, double y, unsigned len) : base_type(trans, x, y, len), m_distortion(&dist) { } //-------------------------------------------------------------------- const distortion_type& distortion() const { return *m_distortion; } //-------------------------------------------------------------------- void distortion(const distortion_type& dist) { m_distortion = dist; } //-------------------------------------------------------------------- void coordinates(int* x, int* y) const { base_type::coordinates(x, y); m_distortion->calculate(x, y); } private: //-------------------------------------------------------------------- const distortion_type* m_distortion; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_interpolator_linear.h000066400000000000000000000166621262555547000242300ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SPAN_INTERPOLATOR_LINEAR_INCLUDED #define AGG_SPAN_INTERPOLATOR_LINEAR_INCLUDED #include "agg_basics.h" #include "agg_dda_line.h" #include "agg_trans_affine.h" namespace agg { //================================================span_interpolator_linear template class span_interpolator_linear { public: typedef Transformer trans_type; enum subpixel_scale_e { subpixel_shift = SubpixelShift, subpixel_scale = 1 << subpixel_shift }; //-------------------------------------------------------------------- span_interpolator_linear() {} span_interpolator_linear(const trans_type& trans) : m_trans(&trans) {} span_interpolator_linear(const trans_type& trans, double x, double y, unsigned len) : m_trans(&trans) { begin(x, y, len); } //---------------------------------------------------------------- const trans_type& transformer() const { return *m_trans; } void transformer(const trans_type& trans) { m_trans = &trans; } //---------------------------------------------------------------- void begin(double x, double y, unsigned len) { double tx; double ty; tx = x; ty = y; m_trans->transform(&tx, &ty); int x1 = iround(tx * subpixel_scale); int y1 = iround(ty * subpixel_scale); tx = x + len; ty = y; m_trans->transform(&tx, &ty); int x2 = iround(tx * subpixel_scale); int y2 = iround(ty * subpixel_scale); m_li_x = dda2_line_interpolator(x1, x2, len); m_li_y = dda2_line_interpolator(y1, y2, len); } //---------------------------------------------------------------- void resynchronize(double xe, double ye, unsigned len) { m_trans->transform(&xe, &ye); m_li_x = dda2_line_interpolator(m_li_x.y(), iround(xe * subpixel_scale), len); m_li_y = dda2_line_interpolator(m_li_y.y(), iround(ye * subpixel_scale), len); } //---------------------------------------------------------------- void operator++() { ++m_li_x; ++m_li_y; } //---------------------------------------------------------------- void coordinates(int* x, int* y) const { *x = m_li_x.y(); *y = m_li_y.y(); } private: const trans_type* m_trans; dda2_line_interpolator m_li_x; dda2_line_interpolator m_li_y; }; //=====================================span_interpolator_linear_subdiv template class span_interpolator_linear_subdiv { public: typedef Transformer trans_type; enum subpixel_scale_e { subpixel_shift = SubpixelShift, subpixel_scale = 1 << subpixel_shift }; //---------------------------------------------------------------- span_interpolator_linear_subdiv() : m_subdiv_shift(4), m_subdiv_size(1 << m_subdiv_shift), m_subdiv_mask(m_subdiv_size - 1) {} span_interpolator_linear_subdiv(const trans_type& trans, unsigned subdiv_shift = 4) : m_subdiv_shift(subdiv_shift), m_subdiv_size(1 << m_subdiv_shift), m_subdiv_mask(m_subdiv_size - 1), m_trans(&trans) {} span_interpolator_linear_subdiv(const trans_type& trans, double x, double y, unsigned len, unsigned subdiv_shift = 4) : m_subdiv_shift(subdiv_shift), m_subdiv_size(1 << m_subdiv_shift), m_subdiv_mask(m_subdiv_size - 1), m_trans(&trans) { begin(x, y, len); } //---------------------------------------------------------------- const trans_type& transformer() const { return *m_trans; } void transformer(const trans_type& trans) { m_trans = &trans; } //---------------------------------------------------------------- unsigned subdiv_shift() const { return m_subdiv_shift; } void subdiv_shift(unsigned shift) { m_subdiv_shift = shift; m_subdiv_size = 1 << m_subdiv_shift; m_subdiv_mask = m_subdiv_size - 1; } //---------------------------------------------------------------- void begin(double x, double y, unsigned len) { double tx; double ty; m_pos = 1; m_src_x = iround(x * subpixel_scale) + subpixel_scale; m_src_y = y; m_len = len; if(len > m_subdiv_size) len = m_subdiv_size; tx = x; ty = y; m_trans->transform(&tx, &ty); int x1 = iround(tx * subpixel_scale); int y1 = iround(ty * subpixel_scale); tx = x + len; ty = y; m_trans->transform(&tx, &ty); m_li_x = dda2_line_interpolator(x1, iround(tx * subpixel_scale), len); m_li_y = dda2_line_interpolator(y1, iround(ty * subpixel_scale), len); } //---------------------------------------------------------------- void operator++() { ++m_li_x; ++m_li_y; if(m_pos >= m_subdiv_size) { unsigned len = m_len; if(len > m_subdiv_size) len = m_subdiv_size; double tx = double(m_src_x) / double(subpixel_scale) + len; double ty = m_src_y; m_trans->transform(&tx, &ty); m_li_x = dda2_line_interpolator(m_li_x.y(), iround(tx * subpixel_scale), len); m_li_y = dda2_line_interpolator(m_li_y.y(), iround(ty * subpixel_scale), len); m_pos = 0; } m_src_x += subpixel_scale; ++m_pos; --m_len; } //---------------------------------------------------------------- void coordinates(int* x, int* y) const { *x = m_li_x.y(); *y = m_li_y.y(); } private: unsigned m_subdiv_shift; unsigned m_subdiv_size; unsigned m_subdiv_mask; const trans_type* m_trans; dda2_line_interpolator m_li_x; dda2_line_interpolator m_li_y; int m_src_x; double m_src_y; unsigned m_pos; unsigned m_len; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_interpolator_persp.h000066400000000000000000000364761262555547000241140ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SPAN_INTERPOLATOR_PERSP_INCLUDED #define AGG_SPAN_INTERPOLATOR_PERSP_INCLUDED #include "agg_trans_perspective.h" #include "agg_dda_line.h" namespace agg { //===========================================span_interpolator_persp_exact template class span_interpolator_persp_exact { public: typedef trans_perspective trans_type; typedef trans_perspective::iterator_x iterator_type; enum subpixel_scale_e { subpixel_shift = SubpixelShift, subpixel_scale = 1 << subpixel_shift }; //-------------------------------------------------------------------- span_interpolator_persp_exact() {} //-------------------------------------------------------------------- // Arbitrary quadrangle transformations span_interpolator_persp_exact(const double* src, const double* dst) { quad_to_quad(src, dst); } //-------------------------------------------------------------------- // Direct transformations span_interpolator_persp_exact(double x1, double y1, double x2, double y2, const double* quad) { rect_to_quad(x1, y1, x2, y2, quad); } //-------------------------------------------------------------------- // Reverse transformations span_interpolator_persp_exact(const double* quad, double x1, double y1, double x2, double y2) { quad_to_rect(quad, x1, y1, x2, y2); } //-------------------------------------------------------------------- // Set the transformations using two arbitrary quadrangles. void quad_to_quad(const double* src, const double* dst) { m_trans_dir.quad_to_quad(src, dst); m_trans_inv.quad_to_quad(dst, src); } //-------------------------------------------------------------------- // Set the direct transformations, i.e., rectangle -> quadrangle void rect_to_quad(double x1, double y1, double x2, double y2, const double* quad) { double src[8]; src[0] = src[6] = x1; src[2] = src[4] = x2; src[1] = src[3] = y1; src[5] = src[7] = y2; quad_to_quad(src, quad); } //-------------------------------------------------------------------- // Set the reverse transformations, i.e., quadrangle -> rectangle void quad_to_rect(const double* quad, double x1, double y1, double x2, double y2) { double dst[8]; dst[0] = dst[6] = x1; dst[2] = dst[4] = x2; dst[1] = dst[3] = y1; dst[5] = dst[7] = y2; quad_to_quad(quad, dst); } //-------------------------------------------------------------------- // Check if the equations were solved successfully bool is_valid() const { return m_trans_dir.is_valid(); } //---------------------------------------------------------------- void begin(double x, double y, unsigned len) { m_iterator = m_trans_dir.begin(x, y, 1.0); double xt = m_iterator.x; double yt = m_iterator.y; double dx; double dy; const double delta = 1/double(subpixel_scale); dx = xt + delta; dy = yt; m_trans_inv.transform(&dx, &dy); dx -= x; dy -= y; int sx1 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; dx = xt; dy = yt + delta; m_trans_inv.transform(&dx, &dy); dx -= x; dy -= y; int sy1 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; x += len; xt = x; yt = y; m_trans_dir.transform(&xt, &yt); dx = xt + delta; dy = yt; m_trans_inv.transform(&dx, &dy); dx -= x; dy -= y; int sx2 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; dx = xt; dy = yt + delta; m_trans_inv.transform(&dx, &dy); dx -= x; dy -= y; int sy2 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; m_scale_x = dda2_line_interpolator(sx1, sx2, len); m_scale_y = dda2_line_interpolator(sy1, sy2, len); } //---------------------------------------------------------------- void resynchronize(double xe, double ye, unsigned len) { // Assume x1,y1 are equal to the ones at the previous end point int sx1 = m_scale_x.y(); int sy1 = m_scale_y.y(); // Calculate transformed coordinates at x2,y2 double xt = xe; double yt = ye; m_trans_dir.transform(&xt, &yt); const double delta = 1/double(subpixel_scale); double dx; double dy; // Calculate scale by X at x2,y2 dx = xt + delta; dy = yt; m_trans_inv.transform(&dx, &dy); dx -= xe; dy -= ye; int sx2 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; // Calculate scale by Y at x2,y2 dx = xt; dy = yt + delta; m_trans_inv.transform(&dx, &dy); dx -= xe; dy -= ye; int sy2 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; // Initialize the interpolators m_scale_x = dda2_line_interpolator(sx1, sx2, len); m_scale_y = dda2_line_interpolator(sy1, sy2, len); } //---------------------------------------------------------------- void operator++() { ++m_iterator; ++m_scale_x; ++m_scale_y; } //---------------------------------------------------------------- void coordinates(int* x, int* y) const { *x = iround(m_iterator.x * subpixel_scale); *y = iround(m_iterator.y * subpixel_scale); } //---------------------------------------------------------------- void local_scale(int* x, int* y) { *x = m_scale_x.y(); *y = m_scale_y.y(); } //---------------------------------------------------------------- void transform(double* x, double* y) const { m_trans_dir.transform(x, y); } private: trans_type m_trans_dir; trans_type m_trans_inv; iterator_type m_iterator; dda2_line_interpolator m_scale_x; dda2_line_interpolator m_scale_y; }; //============================================span_interpolator_persp_lerp template class span_interpolator_persp_lerp { public: typedef trans_perspective trans_type; enum subpixel_scale_e { subpixel_shift = SubpixelShift, subpixel_scale = 1 << subpixel_shift }; //-------------------------------------------------------------------- span_interpolator_persp_lerp() {} //-------------------------------------------------------------------- // Arbitrary quadrangle transformations span_interpolator_persp_lerp(const double* src, const double* dst) { quad_to_quad(src, dst); } //-------------------------------------------------------------------- // Direct transformations span_interpolator_persp_lerp(double x1, double y1, double x2, double y2, const double* quad) { rect_to_quad(x1, y1, x2, y2, quad); } //-------------------------------------------------------------------- // Reverse transformations span_interpolator_persp_lerp(const double* quad, double x1, double y1, double x2, double y2) { quad_to_rect(quad, x1, y1, x2, y2); } //-------------------------------------------------------------------- // Set the transformations using two arbitrary quadrangles. void quad_to_quad(const double* src, const double* dst) { m_trans_dir.quad_to_quad(src, dst); m_trans_inv.quad_to_quad(dst, src); } //-------------------------------------------------------------------- // Set the direct transformations, i.e., rectangle -> quadrangle void rect_to_quad(double x1, double y1, double x2, double y2, const double* quad) { double src[8]; src[0] = src[6] = x1; src[2] = src[4] = x2; src[1] = src[3] = y1; src[5] = src[7] = y2; quad_to_quad(src, quad); } //-------------------------------------------------------------------- // Set the reverse transformations, i.e., quadrangle -> rectangle void quad_to_rect(const double* quad, double x1, double y1, double x2, double y2) { double dst[8]; dst[0] = dst[6] = x1; dst[2] = dst[4] = x2; dst[1] = dst[3] = y1; dst[5] = dst[7] = y2; quad_to_quad(quad, dst); } //-------------------------------------------------------------------- // Check if the equations were solved successfully bool is_valid() const { return m_trans_dir.is_valid(); } //---------------------------------------------------------------- void begin(double x, double y, unsigned len) { // Calculate transformed coordinates at x1,y1 double xt = x; double yt = y; m_trans_dir.transform(&xt, &yt); int x1 = iround(xt * subpixel_scale); int y1 = iround(yt * subpixel_scale); double dx; double dy; const double delta = 1/double(subpixel_scale); // Calculate scale by X at x1,y1 dx = xt + delta; dy = yt; m_trans_inv.transform(&dx, &dy); dx -= x; dy -= y; int sx1 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; // Calculate scale by Y at x1,y1 dx = xt; dy = yt + delta; m_trans_inv.transform(&dx, &dy); dx -= x; dy -= y; int sy1 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; // Calculate transformed coordinates at x2,y2 x += len; xt = x; yt = y; m_trans_dir.transform(&xt, &yt); int x2 = iround(xt * subpixel_scale); int y2 = iround(yt * subpixel_scale); // Calculate scale by X at x2,y2 dx = xt + delta; dy = yt; m_trans_inv.transform(&dx, &dy); dx -= x; dy -= y; int sx2 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; // Calculate scale by Y at x2,y2 dx = xt; dy = yt + delta; m_trans_inv.transform(&dx, &dy); dx -= x; dy -= y; int sy2 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; // Initialize the interpolators m_coord_x = dda2_line_interpolator(x1, x2, len); m_coord_y = dda2_line_interpolator(y1, y2, len); m_scale_x = dda2_line_interpolator(sx1, sx2, len); m_scale_y = dda2_line_interpolator(sy1, sy2, len); } //---------------------------------------------------------------- void resynchronize(double xe, double ye, unsigned len) { // Assume x1,y1 are equal to the ones at the previous end point int x1 = m_coord_x.y(); int y1 = m_coord_y.y(); int sx1 = m_scale_x.y(); int sy1 = m_scale_y.y(); // Calculate transformed coordinates at x2,y2 double xt = xe; double yt = ye; m_trans_dir.transform(&xt, &yt); int x2 = iround(xt * subpixel_scale); int y2 = iround(yt * subpixel_scale); const double delta = 1/double(subpixel_scale); double dx; double dy; // Calculate scale by X at x2,y2 dx = xt + delta; dy = yt; m_trans_inv.transform(&dx, &dy); dx -= xe; dy -= ye; int sx2 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; // Calculate scale by Y at x2,y2 dx = xt; dy = yt + delta; m_trans_inv.transform(&dx, &dy); dx -= xe; dy -= ye; int sy2 = uround(subpixel_scale/sqrt(dx*dx + dy*dy)) >> subpixel_shift; // Initialize the interpolators m_coord_x = dda2_line_interpolator(x1, x2, len); m_coord_y = dda2_line_interpolator(y1, y2, len); m_scale_x = dda2_line_interpolator(sx1, sx2, len); m_scale_y = dda2_line_interpolator(sy1, sy2, len); } //---------------------------------------------------------------- void operator++() { ++m_coord_x; ++m_coord_y; ++m_scale_x; ++m_scale_y; } //---------------------------------------------------------------- void coordinates(int* x, int* y) const { *x = m_coord_x.y(); *y = m_coord_y.y(); } //---------------------------------------------------------------- void local_scale(int* x, int* y) { *x = m_scale_x.y(); *y = m_scale_y.y(); } //---------------------------------------------------------------- void transform(double* x, double* y) const { m_trans_dir.transform(x, y); } private: trans_type m_trans_dir; trans_type m_trans_inv; dda2_line_interpolator m_coord_x; dda2_line_interpolator m_coord_y; dda2_line_interpolator m_scale_x; dda2_line_interpolator m_scale_y; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_interpolator_trans.h000066400000000000000000000060501262555547000240730ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Horizontal span interpolator for use with an arbitrary transformer // The efficiency highly depends on the operations done in the transformer // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_INTERPOLATOR_TRANS_INCLUDED #define AGG_SPAN_INTERPOLATOR_TRANS_INCLUDED #include "agg_basics.h" namespace agg { //=================================================span_interpolator_trans template class span_interpolator_trans { public: typedef Transformer trans_type; enum subpixel_scale_e { subpixel_shift = SubpixelShift, subpixel_scale = 1 << subpixel_shift }; //-------------------------------------------------------------------- span_interpolator_trans() {} span_interpolator_trans(const trans_type& trans) : m_trans(&trans) {} span_interpolator_trans(const trans_type& trans, double x, double y, unsigned) : m_trans(&trans) { begin(x, y, 0); } //---------------------------------------------------------------- const trans_type& transformer() const { return *m_trans; } void transformer(const trans_type& trans) { m_trans = &trans; } //---------------------------------------------------------------- void begin(double x, double y, unsigned) { m_x = x; m_y = y; m_trans->transform(&x, &y); m_ix = iround(x * subpixel_scale); m_iy = iround(y * subpixel_scale); } //---------------------------------------------------------------- void operator++() { m_x += 1.0; double x = m_x; double y = m_y; m_trans->transform(&x, &y); m_ix = iround(x * subpixel_scale); m_iy = iround(y * subpixel_scale); } //---------------------------------------------------------------- void coordinates(int* x, int* y) const { *x = m_ix; *y = m_iy; } private: const trans_type* m_trans; double m_x; double m_y; int m_ix; int m_iy; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_pattern_gray.h000066400000000000000000000063241262555547000226450ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_PATTERN_GRAY_INCLUDED #define AGG_SPAN_PATTERN_GRAY_INCLUDED #include "agg_basics.h" namespace agg { //=======================================================span_pattern_gray template class span_pattern_gray { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; //-------------------------------------------------------------------- span_pattern_gray() {} span_pattern_gray(source_type& src, unsigned offset_x, unsigned offset_y) : m_src(&src), m_offset_x(offset_x), m_offset_y(offset_y), m_alpha(color_type::base_mask) {} //-------------------------------------------------------------------- void attach(source_type& v) { m_src = &v; } source_type& source() { return *m_src; } const source_type& source() const { return *m_src; } //-------------------------------------------------------------------- void offset_x(unsigned v) { m_offset_x = v; } void offset_y(unsigned v) { m_offset_y = v; } unsigned offset_x() const { return m_offset_x; } unsigned offset_y() const { return m_offset_y; } void alpha(value_type v) { m_alpha = v; } value_type alpha() const { return m_alpha; } //-------------------------------------------------------------------- void prepare() {} void generate(color_type* span, int x, int y, unsigned len) { x += m_offset_x; y += m_offset_y; const value_type* p = (const value_type*)m_src->span(x, y, len); do { span->v = *p; span->a = m_alpha; p = m_src->next_x(); ++span; } while(--len); } private: source_type* m_src; unsigned m_offset_x; unsigned m_offset_y; value_type m_alpha; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_pattern_rgb.h000066400000000000000000000065611262555547000224600ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_PATTERN_RGB_INCLUDED #define AGG_SPAN_PATTERN_RGB_INCLUDED #include "agg_basics.h" namespace agg { //========================================================span_pattern_rgb template class span_pattern_rgb { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; //-------------------------------------------------------------------- span_pattern_rgb() {} span_pattern_rgb(source_type& src, unsigned offset_x, unsigned offset_y) : m_src(&src), m_offset_x(offset_x), m_offset_y(offset_y), m_alpha(color_type::base_mask) {} //-------------------------------------------------------------------- void attach(source_type& v) { m_src = &v; } source_type& source() { return *m_src; } const source_type& source() const { return *m_src; } //-------------------------------------------------------------------- void offset_x(unsigned v) { m_offset_x = v; } void offset_y(unsigned v) { m_offset_y = v; } unsigned offset_x() const { return m_offset_x; } unsigned offset_y() const { return m_offset_y; } void alpha(value_type v) { m_alpha = v; } value_type alpha() const { return m_alpha; } //-------------------------------------------------------------------- void prepare() {} void generate(color_type* span, int x, int y, unsigned len) { x += m_offset_x; y += m_offset_y; const value_type* p = (const value_type*)m_src->span(x, y, len); do { span->r = p[order_type::R]; span->g = p[order_type::G]; span->b = p[order_type::B]; span->a = m_alpha; p = m_src->next_x(); ++span; } while(--len); } private: source_type* m_src; unsigned m_offset_x; unsigned m_offset_y; value_type m_alpha; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_pattern_rgba.h000066400000000000000000000064621262555547000226210ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Adaptation for high precision colors has been sponsored by // Liberty Technology Systems, Inc., visit http://lib-sys.com // // Liberty Technology Systems, Inc. is the provider of // PostScript and PDF technology for software developers. // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_PATTERN_RGBA_INCLUDED #define AGG_SPAN_PATTERN_RGBA_INCLUDED #include "agg_basics.h" namespace agg { //======================================================span_pattern_rgba template class span_pattern_rgba { public: typedef Source source_type; typedef typename source_type::color_type color_type; typedef typename source_type::order_type order_type; typedef typename color_type::value_type value_type; typedef typename color_type::calc_type calc_type; //-------------------------------------------------------------------- span_pattern_rgba() {} span_pattern_rgba(source_type& src, unsigned offset_x, unsigned offset_y) : m_src(&src), m_offset_x(offset_x), m_offset_y(offset_y) {} //-------------------------------------------------------------------- void attach(source_type& v) { m_src = &v; } source_type& source() { return *m_src; } const source_type& source() const { return *m_src; } //-------------------------------------------------------------------- void offset_x(unsigned v) { m_offset_x = v; } void offset_y(unsigned v) { m_offset_y = v; } unsigned offset_x() const { return m_offset_x; } unsigned offset_y() const { return m_offset_y; } void alpha(value_type) {} value_type alpha() const { return 0; } //-------------------------------------------------------------------- void prepare() {} void generate(color_type* span, int x, int y, unsigned len) { x += m_offset_x; y += m_offset_y; const value_type* p = (const value_type*)m_src->span(x, y, len); do { span->r = p[order_type::R]; span->g = p[order_type::G]; span->b = p[order_type::B]; span->a = p[order_type::A]; p = (const value_type*)m_src->next_x(); ++span; } while(--len); } private: source_type* m_src; unsigned m_offset_x; unsigned m_offset_y; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_solid.h000066400000000000000000000032461262555547000212600ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // span_solid_rgba8 // //---------------------------------------------------------------------------- #ifndef AGG_SPAN_SOLID_INCLUDED #define AGG_SPAN_SOLID_INCLUDED #include "agg_basics.h" namespace agg { //--------------------------------------------------------------span_solid template class span_solid { public: typedef ColorT color_type; //-------------------------------------------------------------------- void color(const color_type& c) { m_color = c; } const color_type& color() const { return m_color; } //-------------------------------------------------------------------- void prepare() {} //-------------------------------------------------------------------- void generate(color_type* span, int x, int y, unsigned len) { do { *span++ = m_color; } while(--len); } private: color_type m_color; }; } #endif mapnik-3.0.9/deps/agg/include/agg_span_subdiv_adaptor.h000066400000000000000000000113241262555547000231500ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_SPAN_SUBDIV_ADAPTOR_INCLUDED #define AGG_SPAN_SUBDIV_ADAPTOR_INCLUDED #include "agg_basics.h" namespace agg { //=================================================span_subdiv_adaptor template class span_subdiv_adaptor { public: typedef Interpolator interpolator_type; typedef typename interpolator_type::trans_type trans_type; enum sublixel_scale_e { subpixel_shift = SubpixelShift, subpixel_scale = 1 << subpixel_shift }; //---------------------------------------------------------------- span_subdiv_adaptor() : m_subdiv_shift(4), m_subdiv_size(1 << m_subdiv_shift), m_subdiv_mask(m_subdiv_size - 1) {} span_subdiv_adaptor(interpolator_type& interpolator, unsigned subdiv_shift = 4) : m_subdiv_shift(subdiv_shift), m_subdiv_size(1 << m_subdiv_shift), m_subdiv_mask(m_subdiv_size - 1), m_interpolator(&interpolator) {} span_subdiv_adaptor(interpolator_type& interpolator, double x, double y, unsigned len, unsigned subdiv_shift = 4) : m_subdiv_shift(subdiv_shift), m_subdiv_size(1 << m_subdiv_shift), m_subdiv_mask(m_subdiv_size - 1), m_interpolator(&interpolator) { begin(x, y, len); } //---------------------------------------------------------------- const interpolator_type& interpolator() const { return *m_interpolator; } void interpolator(interpolator_type& intr) { m_interpolator = &intr; } //---------------------------------------------------------------- const trans_type& transformer() const { return *m_interpolator->transformer(); } void transformer(const trans_type& trans) { m_interpolator->transformer(trans); } //---------------------------------------------------------------- unsigned subdiv_shift() const { return m_subdiv_shift; } void subdiv_shift(unsigned shift) { m_subdiv_shift = shift; m_subdiv_size = 1 << m_subdiv_shift; m_subdiv_mask = m_subdiv_size - 1; } //---------------------------------------------------------------- void begin(double x, double y, unsigned len) { m_pos = 1; m_src_x = iround(x * subpixel_scale) + subpixel_scale; m_src_y = y; m_len = len; if(len > m_subdiv_size) len = m_subdiv_size; m_interpolator->begin(x, y, len); } //---------------------------------------------------------------- void operator++() { ++(*m_interpolator); if(m_pos >= m_subdiv_size) { unsigned len = m_len; if(len > m_subdiv_size) len = m_subdiv_size; m_interpolator->resynchronize(double(m_src_x) / double(subpixel_scale) + len, m_src_y, len); m_pos = 0; } m_src_x += subpixel_scale; ++m_pos; --m_len; } //---------------------------------------------------------------- void coordinates(int* x, int* y) const { m_interpolator->coordinates(x, y); } //---------------------------------------------------------------- void local_scale(int* x, int* y) const { m_interpolator->local_scale(x, y); } private: unsigned m_subdiv_shift; unsigned m_subdiv_size; unsigned m_subdiv_mask; interpolator_type* m_interpolator; int m_src_x; double m_src_y; unsigned m_pos; unsigned m_len; }; } #endif mapnik-3.0.9/deps/agg/include/agg_trans_affine.h000066400000000000000000000446711262555547000215730ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Affine transformation classes. // //---------------------------------------------------------------------------- #ifndef AGG_TRANS_AFFINE_INCLUDED #define AGG_TRANS_AFFINE_INCLUDED #include #include "agg_basics.h" #include namespace agg { const double affine_epsilon = 1e-14; //============================================================trans_affine // // See Implementation agg_trans_affine.cpp // // Affine transformation are linear transformations in Cartesian coordinates // (strictly speaking not only in Cartesian, but for the beginning we will // think so). They are rotation, scaling, translation and skewing. // After any affine transformation a line segment remains a line segment // and it will never become a curve. // // There will be no math about matrix calculations, since it has been // described many times. Ask yourself a very simple question: // "why do we need to understand and use some matrix stuff instead of just // rotating, scaling and so on". The answers are: // // 1. Any combination of transformations can be done by only 4 multiplications // and 4 additions in floating point. // 2. One matrix transformation is equivalent to the number of consecutive // discrete transformations, i.e. the matrix "accumulates" all transformations // in the order of their settings. Suppose we have 4 transformations: // * rotate by 30 degrees, // * scale X to 2.0, // * scale Y to 1.5, // * move to (100, 100). // The result will depend on the order of these transformations, // and the advantage of matrix is that the sequence of discret calls: // rotate(30), scaleX(2.0), scaleY(1.5), move(100,100) // will have exactly the same result as the following matrix transformations: // // affine_matrix m; // m *= rotate_matrix(30); // m *= scaleX_matrix(2.0); // m *= scaleY_matrix(1.5); // m *= move_matrix(100,100); // // m.transform_my_point_at_last(x, y); // // What is the good of it? In real life we will set-up the matrix only once // and then transform many points, let alone the convenience to set any // combination of transformations. // // So, how to use it? Very easy - literally as it's shown above. Not quite, // let us write a correct example: // // agg::trans_affine m; // m *= agg::trans_affine_rotation(30.0 * 3.1415926 / 180.0); // m *= agg::trans_affine_scaling(2.0, 1.5); // m *= agg::trans_affine_translation(100.0, 100.0); // m.transform(&x, &y); // // The affine matrix is all you need to perform any linear transformation, // but all transformations have origin point (0,0). It means that we need to // use 2 translations if we want to rotate someting around (100,100): // // m *= agg::trans_affine_translation(-100.0, -100.0); // move to (0,0) // m *= agg::trans_affine_rotation(30.0 * 3.1415926 / 180.0); // rotate // m *= agg::trans_affine_translation(100.0, 100.0); // move back to (100,100) //---------------------------------------------------------------------- struct MAPNIK_DECL trans_affine { static const trans_affine identity; double sx, shy, shx, sy, tx, ty; //------------------------------------------ Construction // Identity matrix trans_affine() : sx(1.0), shy(0.0), shx(0.0), sy(1.0), tx(0.0), ty(0.0) {} // Custom matrix. Usually used in derived classes trans_affine(double v0, double v1, double v2, double v3, double v4, double v5) : sx(v0), shy(v1), shx(v2), sy(v3), tx(v4), ty(v5) {} // Custom matrix from m[6] explicit trans_affine(const double* m) : sx(m[0]), shy(m[1]), shx(m[2]), sy(m[3]), tx(m[4]), ty(m[5]) {} // Rectangle to a parallelogram. trans_affine(double x1, double y1, double x2, double y2, const double* parl) { rect_to_parl(x1, y1, x2, y2, parl); } // Parallelogram to a rectangle. trans_affine(const double* parl, double x1, double y1, double x2, double y2) { parl_to_rect(parl, x1, y1, x2, y2); } // Arbitrary parallelogram transformation. trans_affine(const double* src, const double* dst) { parl_to_parl(src, dst); } //---------------------------------- Parellelogram transformations // transform a parallelogram to another one. Src and dst are // pointers to arrays of three points (double[6], x1,y1,...) that // identify three corners of the parallelograms assuming implicit // fourth point. The arguments are arrays of double[6] mapped // to x1,y1, x2,y2, x3,y3 where the coordinates are: // *-----------------* // / (x3,y3)/ // / / // /(x1,y1) (x2,y2)/ // *-----------------* const trans_affine& parl_to_parl(const double* src, const double* dst); const trans_affine& rect_to_parl(double x1, double y1, double x2, double y2, const double* parl); const trans_affine& parl_to_rect(const double* parl, double x1, double y1, double x2, double y2); //------------------------------------------ Operations // Reset - load an identity matrix const trans_affine& reset(); // Direct transformations operations const trans_affine& translate(double x, double y); const trans_affine& rotate(double a); const trans_affine& scale(double s); const trans_affine& scale(double x, double y); // Multiply matrix to another one const trans_affine& multiply(const trans_affine& m); // Multiply "m" to "this" and assign the result to "this" const trans_affine& premultiply(const trans_affine& m); // Multiply matrix to inverse of another one const trans_affine& multiply_inv(const trans_affine& m); // Multiply inverse of "m" to "this" and assign the result to "this" const trans_affine& premultiply_inv(const trans_affine& m); // Invert matrix. Do not try to invert degenerate matrices, // there's no check for validity. If you set scale to 0 and // then try to invert matrix, expect unpredictable result. const trans_affine& invert(); // Mirroring around X const trans_affine& flip_x(); // Mirroring around Y const trans_affine& flip_y(); //------------------------------------------- Load/Store // Store matrix to an array [6] of double void store_to(double* m) const { *m++ = sx; *m++ = shy; *m++ = shx; *m++ = sy; *m++ = tx; *m++ = ty; } // Load matrix from an array [6] of double const trans_affine& load_from(const double* m) { sx = *m++; shy = *m++; shx = *m++; sy = *m++; tx = *m++; ty = *m++; return *this; } //------------------------------------------- Operators // Multiply the matrix by another one const trans_affine& operator *= (const trans_affine& m) { return multiply(m); } // Multiply the matrix by inverse of another one const trans_affine& operator /= (const trans_affine& m) { return multiply_inv(m); } // Multiply the matrix by another one and return // the result in a separate matrix. trans_affine operator * (const trans_affine& m) const { return trans_affine(*this).multiply(m); } // Multiply the matrix by inverse of another one // and return the result in a separate matrix. trans_affine operator / (const trans_affine& m) const { return trans_affine(*this).multiply_inv(m); } // Calculate and return the inverse matrix trans_affine operator ~ () const { trans_affine ret = *this; return ret.invert(); } // Equal operator with default epsilon bool operator == (const trans_affine& m) const { return is_equal(m, affine_epsilon); } // Not Equal operator with default epsilon bool operator != (const trans_affine& m) const { return !is_equal(m, affine_epsilon); } //-------------------------------------------- Transformations // Direct transformation of x and y void transform(double* x, double* y) const; // Direct transformation of x and y, 2x2 matrix only, no translation void transform_2x2(double* x, double* y) const; // Inverse transformation of x and y. It works slower than the // direct transformation. For massive operations it's better to // invert() the matrix and then use direct transformations. void inverse_transform(double* x, double* y) const; //-------------------------------------------- Auxiliary // Calculate the determinant of matrix double determinant() const { return sx * sy - shy * shx; } // Calculate the reciprocal of the determinant double determinant_reciprocal() const { return 1.0 / (sx * sy - shy * shx); } // Get the average scale (by X and Y). // Basically used to calculate the approximation_scale when // decomposinting curves into line segments. double scale() const; // Check to see if the matrix is not degenerate bool is_valid(double epsilon = affine_epsilon) const; // Check to see if it's an identity matrix bool is_identity(double epsilon = affine_epsilon) const; // Check to see if two matrices are equal bool is_equal(const trans_affine& m, double epsilon = affine_epsilon) const; // Determine the major parameters. Use with caution considering // possible degenerate cases. double rotation() const; void translation(double* dx, double* dy) const; void scaling(double* x, double* y) const; void scaling_abs(double* x, double* y) const; }; //------------------------------------------------------------------------ inline void trans_affine::transform(double* x, double* y) const { double tmp = *x; *x = tmp * sx + *y * shx + tx; *y = tmp * shy + *y * sy + ty; } //------------------------------------------------------------------------ inline void trans_affine::transform_2x2(double* x, double* y) const { double tmp = *x; *x = tmp * sx + *y * shx; *y = tmp * shy + *y * sy; } //------------------------------------------------------------------------ inline void trans_affine::inverse_transform(double* x, double* y) const { double d = determinant_reciprocal(); double a = (*x - tx) * d; double b = (*y - ty) * d; *x = a * sy - b * shx; *y = b * sx - a * shy; } //------------------------------------------------------------------------ inline double trans_affine::scale() const { double x = 0.707106781 * sx + 0.707106781 * shx; double y = 0.707106781 * shy + 0.707106781 * sy; return sqrt(x*x + y*y); } //------------------------------------------------------------------------ inline const trans_affine& trans_affine::translate(double x, double y) { tx += x; ty += y; return *this; } //------------------------------------------------------------------------ inline const trans_affine& trans_affine::rotate(double a) { double ca = std::cos(a); double sa = std::sin(a); double t0 = sx * ca - shy * sa; double t2 = shx * ca - sy * sa; double t4 = tx * ca - ty * sa; shy = sx * sa + shy * ca; sy = shx * sa + sy * ca; ty = tx * sa + ty * ca; sx = t0; shx = t2; tx = t4; return *this; } //------------------------------------------------------------------------ inline const trans_affine& trans_affine::scale(double x, double y) { double mm0 = x; // Possible hint for the optimizer double mm3 = y; sx *= mm0; shx *= mm0; tx *= mm0; shy *= mm3; sy *= mm3; ty *= mm3; return *this; } //------------------------------------------------------------------------ inline const trans_affine& trans_affine::scale(double s) { double m = s; // Possible hint for the optimizer sx *= m; shx *= m; tx *= m; shy *= m; sy *= m; ty *= m; return *this; } //------------------------------------------------------------------------ inline const trans_affine& trans_affine::premultiply(const trans_affine& m) { trans_affine t = m; return *this = t.multiply(*this); } //------------------------------------------------------------------------ inline const trans_affine& trans_affine::multiply_inv(const trans_affine& m) { trans_affine t = m; t.invert(); return multiply(t); } //------------------------------------------------------------------------ inline const trans_affine& trans_affine::premultiply_inv(const trans_affine& m) { trans_affine t = m; t.invert(); return *this = t.multiply(*this); } //------------------------------------------------------------------------ inline void trans_affine::scaling_abs(double* x, double* y) const { // Used to calculate scaling coefficients in image resampling. // When there is considerable shear this method gives us much // better estimation than just sx, sy. *x = sqrt(sx * sx + shx * shx); *y = sqrt(shy * shy + sy * sy); } //====================================================trans_affine_rotation // Rotation matrix. std::sin() and std::cos() are calculated twice for the same angle. // There's no harm because the performance of std::sin()/cos() is very good on all // modern processors. Besides, this operation is not going to be invoked too // often. class trans_affine_rotation : public trans_affine { public: trans_affine_rotation(double a) : trans_affine(std::cos(a), std::sin(a), -std::sin(a), std::cos(a), 0.0, 0.0) {} }; //====================================================trans_affine_scaling // Scaling matrix. x, y - scale coefficients by X and Y respectively class trans_affine_scaling : public trans_affine { public: trans_affine_scaling(double x, double y) : trans_affine(x, 0.0, 0.0, y, 0.0, 0.0) {} trans_affine_scaling(double s) : trans_affine(s, 0.0, 0.0, s, 0.0, 0.0) {} }; //================================================trans_affine_translation // Translation matrix class trans_affine_translation : public trans_affine { public: trans_affine_translation(double x, double y) : trans_affine(1.0, 0.0, 0.0, 1.0, x, y) {} }; //====================================================trans_affine_skewing // Sckewing (shear) matrix class trans_affine_skewing : public trans_affine { public: trans_affine_skewing(double x, double y) : trans_affine(1.0, std::tan(y), std::tan(x), 1.0, 0.0, 0.0) {} }; //===============================================trans_affine_line_segment // Rotate, Scale and Translate, associating 0...dist with line segment // x1,y1,x2,y2 class trans_affine_line_segment : public trans_affine { public: trans_affine_line_segment(double x1, double y1, double x2, double y2, double dist) { double dx = x2 - x1; double dy = y2 - y1; if(dist > 0.0) { multiply(trans_affine_scaling(sqrt(dx * dx + dy * dy) / dist)); } multiply(trans_affine_rotation(std::atan2(dy, dx))); multiply(trans_affine_translation(x1, y1)); } }; //============================================trans_affine_reflection_unit // Reflection matrix. Reflect coordinates across the line through // the origin containing the unit vector (ux, uy). // Contributed by John Horigan class trans_affine_reflection_unit : public trans_affine { public: trans_affine_reflection_unit(double ux, double uy) : trans_affine(2.0 * ux * ux - 1.0, 2.0 * ux * uy, 2.0 * ux * uy, 2.0 * uy * uy - 1.0, 0.0, 0.0) {} }; //=================================================trans_affine_reflection // Reflection matrix. Reflect coordinates across the line through // the origin at the angle a or containing the non-unit vector (x, y). // Contributed by John Horigan class trans_affine_reflection : public trans_affine_reflection_unit { public: trans_affine_reflection(double a) : trans_affine_reflection_unit(std::cos(a), std::sin(a)) {} trans_affine_reflection(double x, double y) : trans_affine_reflection_unit(x / sqrt(x * x + y * y), y / sqrt(x * x + y * y)) {} }; } #endif mapnik-3.0.9/deps/agg/include/agg_trans_bilinear.h000066400000000000000000000125021262555547000221140ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Bilinear 2D transformations // //---------------------------------------------------------------------------- #ifndef AGG_TRANS_BILINEAR_INCLUDED #define AGG_TRANS_BILINEAR_INCLUDED #include "agg_basics.h" #include "agg_simul_eq.h" namespace agg { //==========================================================trans_bilinear class trans_bilinear { public: //-------------------------------------------------------------------- trans_bilinear() : m_valid(false) {} //-------------------------------------------------------------------- // Arbitrary quadrangle transformations trans_bilinear(const double* src, const double* dst) { quad_to_quad(src, dst); } //-------------------------------------------------------------------- // Direct transformations trans_bilinear(double x1, double y1, double x2, double y2, const double* quad) { rect_to_quad(x1, y1, x2, y2, quad); } //-------------------------------------------------------------------- // Reverse transformations trans_bilinear(const double* quad, double x1, double y1, double x2, double y2) { quad_to_rect(quad, x1, y1, x2, y2); } //-------------------------------------------------------------------- // Set the transformations using two arbitrary quadrangles. void quad_to_quad(const double* src, const double* dst) { double left[4][4]; double right[4][2]; unsigned i; for(i = 0; i < 4; i++) { unsigned ix = i * 2; unsigned iy = ix + 1; left[i][0] = 1.0; left[i][1] = src[ix] * src[iy]; left[i][2] = src[ix]; left[i][3] = src[iy]; right[i][0] = dst[ix]; right[i][1] = dst[iy]; } m_valid = simul_eq<4, 2>::solve(left, right, m_mtx); } //-------------------------------------------------------------------- // Set the direct transformations, i.e., rectangle -> quadrangle void rect_to_quad(double x1, double y1, double x2, double y2, const double* quad) { double src[8]; src[0] = src[6] = x1; src[2] = src[4] = x2; src[1] = src[3] = y1; src[5] = src[7] = y2; quad_to_quad(src, quad); } //-------------------------------------------------------------------- // Set the reverse transformations, i.e., quadrangle -> rectangle void quad_to_rect(const double* quad, double x1, double y1, double x2, double y2) { double dst[8]; dst[0] = dst[6] = x1; dst[2] = dst[4] = x2; dst[1] = dst[3] = y1; dst[5] = dst[7] = y2; quad_to_quad(quad, dst); } //-------------------------------------------------------------------- // Check if the equations were solved successfully bool is_valid() const { return m_valid; } //-------------------------------------------------------------------- // Transform a point (x, y) void transform(double* x, double* y) const { double tx = *x; double ty = *y; double xy = tx * ty; *x = m_mtx[0][0] + m_mtx[1][0] * xy + m_mtx[2][0] * tx + m_mtx[3][0] * ty; *y = m_mtx[0][1] + m_mtx[1][1] * xy + m_mtx[2][1] * tx + m_mtx[3][1] * ty; } //-------------------------------------------------------------------- class iterator_x { double inc_x; double inc_y; public: double x; double y; iterator_x() {} iterator_x(double tx, double ty, double step, const double m[4][2]) : inc_x(m[1][0] * step * ty + m[2][0] * step), inc_y(m[1][1] * step * ty + m[2][1] * step), x(m[0][0] + m[1][0] * tx * ty + m[2][0] * tx + m[3][0] * ty), y(m[0][1] + m[1][1] * tx * ty + m[2][1] * tx + m[3][1] * ty) { } void operator ++ () { x += inc_x; y += inc_y; } }; iterator_x begin(double x, double y, double step) const { return iterator_x(x, y, step, m_mtx); } private: double m_mtx[4][2]; bool m_valid; }; } #endif mapnik-3.0.9/deps/agg/include/agg_trans_double_path.h000066400000000000000000000101331262555547000226130ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_TRANS_DOUBLE_PATH_INCLUDED #define AGG_TRANS_DOUBLE_PATH_INCLUDED #include "agg_basics.h" #include "agg_vertex_sequence.h" namespace agg { // See also: agg_trans_double_path.cpp // //-------------------------------------------------------trans_double_path class trans_double_path { enum status_e { initial, making_path, ready }; public: typedef vertex_sequence vertex_storage; trans_double_path(); //-------------------------------------------------------------------- void base_length(double v) { m_base_length = v; } double base_length() const { return m_base_length; } //-------------------------------------------------------------------- void base_height(double v) { m_base_height = v; } double base_height() const { return m_base_height; } //-------------------------------------------------------------------- void preserve_x_scale(bool f) { m_preserve_x_scale = f; } bool preserve_x_scale() const { return m_preserve_x_scale; } //-------------------------------------------------------------------- void reset(); void move_to1(double x, double y); void line_to1(double x, double y); void move_to2(double x, double y); void line_to2(double x, double y); void finalize_paths(); //-------------------------------------------------------------------- template void add_paths(VertexSource1& vs1, VertexSource2& vs2, unsigned path1_id=0, unsigned path2_id=0) { double x; double y; unsigned cmd; vs1.rewind(path1_id); while(!is_stop(cmd = vs1.vertex(&x, &y))) { if(is_move_to(cmd)) { move_to1(x, y); } else { if(is_vertex(cmd)) { line_to1(x, y); } } } vs2.rewind(path2_id); while(!is_stop(cmd = vs2.vertex(&x, &y))) { if(is_move_to(cmd)) { move_to2(x, y); } else { if(is_vertex(cmd)) { line_to2(x, y); } } } finalize_paths(); } //-------------------------------------------------------------------- double total_length1() const; double total_length2() const; void transform(double *x, double *y) const; private: double finalize_path(vertex_storage& vertices); void transform1(const vertex_storage& vertices, double kindex, double kx, double *x, double* y) const; vertex_storage m_src_vertices1; vertex_storage m_src_vertices2; double m_base_length; double m_base_height; double m_kindex1; double m_kindex2; status_e m_status1; status_e m_status2; bool m_preserve_x_scale; }; } #endif mapnik-3.0.9/deps/agg/include/agg_trans_lens.h000066400000000000000000000042101262555547000212650ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.1 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_WARP_MAGNIFIER_INCLUDED #define AGG_WARP_MAGNIFIER_INCLUDED #include #include "agg_basics.h" namespace agg { class trans_warp_magnifier { public: trans_warp_magnifier() : m_xc(0.0), m_yc(0.0), m_magn(1.0), m_radius(1.0), m_warp(false) {} void center(double x, double y) { m_xc = x; m_yc = y; } void magnification(double m) { m_magn = m; } void radius(double r) { m_radius = r; } void warp(bool w) { m_warp = w; } void transform(double* x, double* y) const { double dx = *x - m_xc; double dy = *y - m_yc; double r = sqrt(dx * dx + dy * dy); double rm = m_radius / m_magn; if(r < rm) { *x = m_xc + dx * m_magn; *y = m_yc + dy * m_magn; return; } if(m_warp) { double m = (r + rm * (m_magn - 1.0)) / r; *x = m_xc + dx * m; *y = m_yc + dy * m; return; } if(r < m_radius) { double m = m_radius / r; *x = m_xc + dx * m; *y = m_yc + dy * m; } } private: double m_xc; double m_yc; double m_magn; double m_radius; bool m_warp; }; } #endif mapnik-3.0.9/deps/agg/include/agg_trans_perspective.h000066400000000000000000000616331262555547000226710ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Perspective 2D transformations // //---------------------------------------------------------------------------- #ifndef AGG_TRANS_PERSPECTIVE_INCLUDED #define AGG_TRANS_PERSPECTIVE_INCLUDED #include "agg_trans_affine.h" namespace agg { //=======================================================trans_perspective struct trans_perspective { double sx, shy, w0, shx, sy, w1, tx, ty, w2; //------------------------------------------------------- Construction // Identity matrix trans_perspective() : sx (1), shy(0), w0(0), shx(0), sy (1), w1(0), tx (0), ty (0), w2(1) {} // Custom matrix trans_perspective(double v0, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8) : sx (v0), shy(v1), w0(v2), shx(v3), sy (v4), w1(v5), tx (v6), ty (v7), w2(v8) {} // Custom matrix from m[9] explicit trans_perspective(const double* m) : sx (m[0]), shy(m[1]), w0(m[2]), shx(m[3]), sy (m[4]), w1(m[5]), tx (m[6]), ty (m[7]), w2(m[8]) {} // From affine explicit trans_perspective(const trans_affine& a) : sx (a.sx ), shy(a.shy), w0(0), shx(a.shx), sy (a.sy ), w1(0), tx (a.tx ), ty (a.ty ), w2(1) {} // Rectangle to quadrilateral trans_perspective(double x1, double y1, double x2, double y2, const double* quad); // Quadrilateral to rectangle trans_perspective(const double* quad, double x1, double y1, double x2, double y2); // Arbitrary quadrilateral transformations trans_perspective(const double* src, const double* dst); //-------------------------------------- Quadrilateral transformations // The arguments are double[8] that are mapped to quadrilaterals: // x1,y1, x2,y2, x3,y3, x4,y4 bool quad_to_quad(const double* qs, const double* qd); bool rect_to_quad(double x1, double y1, double x2, double y2, const double* q); bool quad_to_rect(const double* q, double x1, double y1, double x2, double y2); // Map square (0,0,1,1) to the quadrilateral and vice versa bool square_to_quad(const double* q); bool quad_to_square(const double* q); //--------------------------------------------------------- Operations // Reset - load an identity matrix const trans_perspective& reset(); // Invert matrix. Returns false in degenerate case bool invert(); // Direct transformations operations const trans_perspective& translate(double x, double y); const trans_perspective& rotate(double a); const trans_perspective& scale(double s); const trans_perspective& scale(double x, double y); // Multiply the matrix by another one const trans_perspective& multiply(const trans_perspective& m); // Multiply "m" by "this" and assign the result to "this" const trans_perspective& premultiply(const trans_perspective& m); // Multiply matrix to inverse of another one const trans_perspective& multiply_inv(const trans_perspective& m); // Multiply inverse of "m" by "this" and assign the result to "this" const trans_perspective& premultiply_inv(const trans_perspective& m); // Multiply the matrix by another one const trans_perspective& multiply(const trans_affine& m); // Multiply "m" by "this" and assign the result to "this" const trans_perspective& premultiply(const trans_affine& m); // Multiply the matrix by inverse of another one const trans_perspective& multiply_inv(const trans_affine& m); // Multiply inverse of "m" by "this" and assign the result to "this" const trans_perspective& premultiply_inv(const trans_affine& m); //--------------------------------------------------------- Load/Store void store_to(double* m) const; const trans_perspective& load_from(const double* m); //---------------------------------------------------------- Operators // Multiply the matrix by another one const trans_perspective& operator *= (const trans_perspective& m) { return multiply(m); } const trans_perspective& operator *= (const trans_affine& m) { return multiply(m); } // Multiply the matrix by inverse of another one const trans_perspective& operator /= (const trans_perspective& m) { return multiply_inv(m); } const trans_perspective& operator /= (const trans_affine& m) { return multiply_inv(m); } // Multiply the matrix by another one and return // the result in a separete matrix. trans_perspective operator * (const trans_perspective& m) { return trans_perspective(*this).multiply(m); } trans_perspective operator * (const trans_affine& m) { return trans_perspective(*this).multiply(m); } // Multiply the matrix by inverse of another one // and return the result in a separete matrix. trans_perspective operator / (const trans_perspective& m) { return trans_perspective(*this).multiply_inv(m); } trans_perspective operator / (const trans_affine& m) { return trans_perspective(*this).multiply_inv(m); } // Calculate and return the inverse matrix trans_perspective operator ~ () const { trans_perspective ret = *this; ret.invert(); return ret; } // Equal operator with default epsilon bool operator == (const trans_perspective& m) const { return is_equal(m, affine_epsilon); } // Not Equal operator with default epsilon bool operator != (const trans_perspective& m) const { return !is_equal(m, affine_epsilon); } //---------------------------------------------------- Transformations // Direct transformation of x and y void transform(double* x, double* y) const; // Direct transformation of x and y, affine part only void transform_affine(double* x, double* y) const; // Direct transformation of x and y, 2x2 matrix only, no translation void transform_2x2(double* x, double* y) const; // Inverse transformation of x and y. It works slow because // it explicitly inverts the matrix on every call. For massive // operations it's better to invert() the matrix and then use // direct transformations. void inverse_transform(double* x, double* y) const; //---------------------------------------------------------- Auxiliary const trans_perspective& from_affine(const trans_affine& a); double determinant() const; double determinant_reciprocal() const; bool is_valid(double epsilon = affine_epsilon) const; bool is_identity(double epsilon = affine_epsilon) const; bool is_equal(const trans_perspective& m, double epsilon = affine_epsilon) const; // Determine the major affine parameters. Use with caution // considering possible degenerate cases. double scale() const; double rotation() const; void translation(double* dx, double* dy) const; void scaling(double* x, double* y) const; void scaling_abs(double* x, double* y) const; //-------------------------------------------------------------------- class iterator_x { double den; double den_step; double nom_x; double nom_x_step; double nom_y; double nom_y_step; public: double x; double y; iterator_x() {} iterator_x(double px, double py, double step, const trans_perspective& m) : den(px * m.w0 + py * m.w1 + m.w2), den_step(m.w0 * step), nom_x(px * m.sx + py * m.shx + m.tx), nom_x_step(step * m.sx), nom_y(px * m.shy + py * m.sy + m.ty), nom_y_step(step * m.shy), x(nom_x / den), y(nom_y / den) {} void operator ++ () { den += den_step; nom_x += nom_x_step; nom_y += nom_y_step; double d = 1.0 / den; x = nom_x * d; y = nom_y * d; } }; //-------------------------------------------------------------------- iterator_x begin(double x, double y, double step) const { return iterator_x(x, y, step, *this); } }; //------------------------------------------------------------------------ inline bool trans_perspective::square_to_quad(const double* q) { double dx = q[0] - q[2] + q[4] - q[6]; double dy = q[1] - q[3] + q[5] - q[7]; if(dx == 0.0 && dy == 0.0) { // Affine case (parallelogram) //--------------- sx = q[2] - q[0]; shy = q[3] - q[1]; w0 = 0.0; shx = q[4] - q[2]; sy = q[5] - q[3]; w1 = 0.0; tx = q[0]; ty = q[1]; w2 = 1.0; } else { double dx1 = q[2] - q[4]; double dy1 = q[3] - q[5]; double dx2 = q[6] - q[4]; double dy2 = q[7] - q[5]; double den = dx1 * dy2 - dx2 * dy1; if(den == 0.0) { // Singular case //--------------- sx = shy = w0 = shx = sy = w1 = tx = ty = w2 = 0.0; return false; } // General case //--------------- double u = (dx * dy2 - dy * dx2) / den; double v = (dy * dx1 - dx * dy1) / den; sx = q[2] - q[0] + u * q[2]; shy = q[3] - q[1] + u * q[3]; w0 = u; shx = q[6] - q[0] + v * q[6]; sy = q[7] - q[1] + v * q[7]; w1 = v; tx = q[0]; ty = q[1]; w2 = 1.0; } return true; } //------------------------------------------------------------------------ inline bool trans_perspective::invert() { double d0 = sy * w2 - w1 * ty; double d1 = w0 * ty - shy * w2; double d2 = shy * w1 - w0 * sy; double d = sx * d0 + shx * d1 + tx * d2; if(d == 0.0) { sx = shy = w0 = shx = sy = w1 = tx = ty = w2 = 0.0; return false; } d = 1.0 / d; trans_perspective a = *this; sx = d * d0; shy = d * d1; w0 = d * d2; shx = d * (a.w1 *a.tx - a.shx*a.w2); sy = d * (a.sx *a.w2 - a.w0 *a.tx); w1 = d * (a.w0 *a.shx - a.sx *a.w1); tx = d * (a.shx*a.ty - a.sy *a.tx); ty = d * (a.shy*a.tx - a.sx *a.ty); w2 = d * (a.sx *a.sy - a.shy*a.shx); return true; } //------------------------------------------------------------------------ inline bool trans_perspective::quad_to_square(const double* q) { if(!square_to_quad(q)) return false; invert(); return true; } //------------------------------------------------------------------------ inline bool trans_perspective::quad_to_quad(const double* qs, const double* qd) { trans_perspective p; if(! quad_to_square(qs)) return false; if(!p.square_to_quad(qd)) return false; multiply(p); return true; } //------------------------------------------------------------------------ inline bool trans_perspective::rect_to_quad(double x1, double y1, double x2, double y2, const double* q) { double r[8]; r[0] = r[6] = x1; r[2] = r[4] = x2; r[1] = r[3] = y1; r[5] = r[7] = y2; return quad_to_quad(r, q); } //------------------------------------------------------------------------ inline bool trans_perspective::quad_to_rect(const double* q, double x1, double y1, double x2, double y2) { double r[8]; r[0] = r[6] = x1; r[2] = r[4] = x2; r[1] = r[3] = y1; r[5] = r[7] = y2; return quad_to_quad(q, r); } //------------------------------------------------------------------------ inline trans_perspective::trans_perspective(double x1, double y1, double x2, double y2, const double* quad) { rect_to_quad(x1, y1, x2, y2, quad); } //------------------------------------------------------------------------ inline trans_perspective::trans_perspective(const double* quad, double x1, double y1, double x2, double y2) { quad_to_rect(quad, x1, y1, x2, y2); } //------------------------------------------------------------------------ inline trans_perspective::trans_perspective(const double* src, const double* dst) { quad_to_quad(src, dst); } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::reset() { sx = 1; shy = 0; w0 = 0; shx = 0; sy = 1; w1 = 0; tx = 0; ty = 0; w2 = 1; return *this; } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::multiply(const trans_perspective& a) { trans_perspective b = *this; sx = a.sx *b.sx + a.shx*b.shy + a.tx*b.w0; shx = a.sx *b.shx + a.shx*b.sy + a.tx*b.w1; tx = a.sx *b.tx + a.shx*b.ty + a.tx*b.w2; shy = a.shy*b.sx + a.sy *b.shy + a.ty*b.w0; sy = a.shy*b.shx + a.sy *b.sy + a.ty*b.w1; ty = a.shy*b.tx + a.sy *b.ty + a.ty*b.w2; w0 = a.w0 *b.sx + a.w1 *b.shy + a.w2*b.w0; w1 = a.w0 *b.shx + a.w1 *b.sy + a.w2*b.w1; w2 = a.w0 *b.tx + a.w1 *b.ty + a.w2*b.w2; return *this; } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::multiply(const trans_affine& a) { trans_perspective b = *this; sx = a.sx *b.sx + a.shx*b.shy + a.tx*b.w0; shx = a.sx *b.shx + a.shx*b.sy + a.tx*b.w1; tx = a.sx *b.tx + a.shx*b.ty + a.tx*b.w2; shy = a.shy*b.sx + a.sy *b.shy + a.ty*b.w0; sy = a.shy*b.shx + a.sy *b.sy + a.ty*b.w1; ty = a.shy*b.tx + a.sy *b.ty + a.ty*b.w2; return *this; } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::premultiply(const trans_perspective& b) { trans_perspective a = *this; sx = a.sx *b.sx + a.shx*b.shy + a.tx*b.w0; shx = a.sx *b.shx + a.shx*b.sy + a.tx*b.w1; tx = a.sx *b.tx + a.shx*b.ty + a.tx*b.w2; shy = a.shy*b.sx + a.sy *b.shy + a.ty*b.w0; sy = a.shy*b.shx + a.sy *b.sy + a.ty*b.w1; ty = a.shy*b.tx + a.sy *b.ty + a.ty*b.w2; w0 = a.w0 *b.sx + a.w1 *b.shy + a.w2*b.w0; w1 = a.w0 *b.shx + a.w1 *b.sy + a.w2*b.w1; w2 = a.w0 *b.tx + a.w1 *b.ty + a.w2*b.w2; return *this; } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::premultiply(const trans_affine& b) { trans_perspective a = *this; sx = a.sx *b.sx + a.shx*b.shy; shx = a.sx *b.shx + a.shx*b.sy; tx = a.sx *b.tx + a.shx*b.ty + a.tx; shy = a.shy*b.sx + a.sy *b.shy; sy = a.shy*b.shx + a.sy *b.sy; ty = a.shy*b.tx + a.sy *b.ty + a.ty; w0 = a.w0 *b.sx + a.w1 *b.shy; w1 = a.w0 *b.shx + a.w1 *b.sy; w2 = a.w0 *b.tx + a.w1 *b.ty + a.w2; return *this; } //------------------------------------------------------------------------ const trans_perspective& trans_perspective::multiply_inv(const trans_perspective& m) { trans_perspective t = m; t.invert(); return multiply(t); } //------------------------------------------------------------------------ const trans_perspective& trans_perspective::multiply_inv(const trans_affine& m) { trans_affine t = m; t.invert(); return multiply(t); } //------------------------------------------------------------------------ const trans_perspective& trans_perspective::premultiply_inv(const trans_perspective& m) { trans_perspective t = m; t.invert(); return *this = t.multiply(*this); } //------------------------------------------------------------------------ const trans_perspective& trans_perspective::premultiply_inv(const trans_affine& m) { trans_perspective t(m); t.invert(); return *this = t.multiply(*this); } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::translate(double x, double y) { tx += x; ty += y; return *this; } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::rotate(double a) { multiply(trans_affine_rotation(a)); return *this; } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::scale(double s) { multiply(trans_affine_scaling(s)); return *this; } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::scale(double x, double y) { multiply(trans_affine_scaling(x, y)); return *this; } //------------------------------------------------------------------------ inline void trans_perspective::transform(double* px, double* py) const { double x = *px; double y = *py; double m = 1.0 / (x*w0 + y*w1 + w2); *px = m * (x*sx + y*shx + tx); *py = m * (x*shy + y*sy + ty); } //------------------------------------------------------------------------ inline void trans_perspective::transform_affine(double* x, double* y) const { double tmp = *x; *x = tmp * sx + *y * shx + tx; *y = tmp * shy + *y * sy + ty; } //------------------------------------------------------------------------ inline void trans_perspective::transform_2x2(double* x, double* y) const { double tmp = *x; *x = tmp * sx + *y * shx; *y = tmp * shy + *y * sy; } //------------------------------------------------------------------------ inline void trans_perspective::inverse_transform(double* x, double* y) const { trans_perspective t(*this); if(t.invert()) t.transform(x, y); } //------------------------------------------------------------------------ inline void trans_perspective::store_to(double* m) const { *m++ = sx; *m++ = shy; *m++ = w0; *m++ = shx; *m++ = sy; *m++ = w1; *m++ = tx; *m++ = ty; *m++ = w2; } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::load_from(const double* m) { sx = *m++; shy = *m++; w0 = *m++; shx = *m++; sy = *m++; w1 = *m++; tx = *m++; ty = *m++; w2 = *m++; return *this; } //------------------------------------------------------------------------ inline const trans_perspective& trans_perspective::from_affine(const trans_affine& a) { sx = a.sx; shy = a.shy; w0 = 0; shx = a.shx; sy = a.sy; w1 = 0; tx = a.tx; ty = a.ty; w2 = 1; return *this; } //------------------------------------------------------------------------ inline double trans_perspective::determinant() const { return sx * (sy * w2 - ty * w1) + shx * (ty * w0 - shy * w2) + tx * (shy * w1 - sy * w0); } //------------------------------------------------------------------------ inline double trans_perspective::determinant_reciprocal() const { return 1.0 / determinant(); } //------------------------------------------------------------------------ inline bool trans_perspective::is_valid(double epsilon) const { return std::fabs(sx) > epsilon && std::fabs(sy) > epsilon && std::fabs(w2) > epsilon; } //------------------------------------------------------------------------ inline bool trans_perspective::is_identity(double epsilon) const { return is_equal_eps(sx, 1.0, epsilon) && is_equal_eps(shy, 0.0, epsilon) && is_equal_eps(w0, 0.0, epsilon) && is_equal_eps(shx, 0.0, epsilon) && is_equal_eps(sy, 1.0, epsilon) && is_equal_eps(w1, 0.0, epsilon) && is_equal_eps(tx, 0.0, epsilon) && is_equal_eps(ty, 0.0, epsilon) && is_equal_eps(w2, 1.0, epsilon); } //------------------------------------------------------------------------ inline bool trans_perspective::is_equal(const trans_perspective& m, double epsilon) const { return is_equal_eps(sx, m.sx, epsilon) && is_equal_eps(shy, m.shy, epsilon) && is_equal_eps(w0, m.w0, epsilon) && is_equal_eps(shx, m.shx, epsilon) && is_equal_eps(sy, m.sy, epsilon) && is_equal_eps(w1, m.w1, epsilon) && is_equal_eps(tx, m.tx, epsilon) && is_equal_eps(ty, m.ty, epsilon) && is_equal_eps(w2, m.w2, epsilon); } //------------------------------------------------------------------------ inline double trans_perspective::scale() const { double x = 0.707106781 * sx + 0.707106781 * shx; double y = 0.707106781 * shy + 0.707106781 * sy; return sqrt(x*x + y*y); } //------------------------------------------------------------------------ inline double trans_perspective::rotation() const { double x1 = 0.0; double y1 = 0.0; double x2 = 1.0; double y2 = 0.0; transform(&x1, &y1); transform(&x2, &y2); return std::atan2(y2-y1, x2-x1); } //------------------------------------------------------------------------ void trans_perspective::translation(double* dx, double* dy) const { *dx = tx; *dy = ty; } //------------------------------------------------------------------------ void trans_perspective::scaling(double* x, double* y) const { double x1 = 0.0; double y1 = 0.0; double x2 = 1.0; double y2 = 1.0; trans_perspective t(*this); t *= trans_affine_rotation(-rotation()); t.transform(&x1, &y1); t.transform(&x2, &y2); *x = x2 - x1; *y = y2 - y1; } //------------------------------------------------------------------------ void trans_perspective::scaling_abs(double* x, double* y) const { *x = sqrt(sx * sx + shx * shx); *y = sqrt(shy * shy + sy * sy); } } #endif mapnik-3.0.9/deps/agg/include/agg_trans_single_path.h000066400000000000000000000056461262555547000226370ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_TRANS_SINGLE_PATH_INCLUDED #define AGG_TRANS_SINGLE_PATH_INCLUDED #include "agg_basics.h" #include "agg_vertex_sequence.h" namespace agg { // See also: agg_trans_single_path.cpp // //-------------------------------------------------------trans_single_path class trans_single_path { enum status_e { initial, making_path, ready }; public: typedef vertex_sequence vertex_storage; trans_single_path(); //-------------------------------------------------------------------- void base_length(double v) { m_base_length = v; } double base_length() const { return m_base_length; } //-------------------------------------------------------------------- void preserve_x_scale(bool f) { m_preserve_x_scale = f; } bool preserve_x_scale() const { return m_preserve_x_scale; } //-------------------------------------------------------------------- void reset(); void move_to(double x, double y); void line_to(double x, double y); void finalize_path(); //-------------------------------------------------------------------- template void add_path(VertexSource& vs, unsigned path_id=0) { double x; double y; unsigned cmd; vs.rewind(path_id); while(!is_stop(cmd = vs.vertex(&x, &y))) { if(is_move_to(cmd)) { move_to(x, y); } else { if(is_vertex(cmd)) { line_to(x, y); } } } finalize_path(); } //-------------------------------------------------------------------- double total_length() const; void transform(double *x, double *y) const; private: vertex_storage m_src_vertices; double m_base_length; double m_kindex; status_e m_status; bool m_preserve_x_scale; }; } #endif mapnik-3.0.9/deps/agg/include/agg_trans_viewport.h000066400000000000000000000226251262555547000222150ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Viewport transformer - simple orthogonal conversions from world coordinates // to screen (device) ones. // //---------------------------------------------------------------------------- #ifndef AGG_TRANS_VIEWPORT_INCLUDED #define AGG_TRANS_VIEWPORT_INCLUDED #include #include "agg_trans_affine.h" namespace agg { enum aspect_ratio_e { aspect_ratio_stretch, aspect_ratio_meet, aspect_ratio_slice }; //----------------------------------------------------------trans_viewport class trans_viewport { public: //------------------------------------------------------------------- trans_viewport() : m_world_x1(0.0), m_world_y1(0.0), m_world_x2(1.0), m_world_y2(1.0), m_device_x1(0.0), m_device_y1(0.0), m_device_x2(1.0), m_device_y2(1.0), m_aspect(aspect_ratio_stretch), m_is_valid(true), m_align_x(0.5), m_align_y(0.5), m_wx1(0.0), m_wy1(0.0), m_wx2(1.0), m_wy2(1.0), m_dx1(0.0), m_dy1(0.0), m_kx(1.0), m_ky(1.0) {} //------------------------------------------------------------------- void preserve_aspect_ratio(double alignx, double aligny, aspect_ratio_e aspect) { m_align_x = alignx; m_align_y = aligny; m_aspect = aspect; update(); } //------------------------------------------------------------------- void device_viewport(double x1, double y1, double x2, double y2) { m_device_x1 = x1; m_device_y1 = y1; m_device_x2 = x2; m_device_y2 = y2; update(); } //------------------------------------------------------------------- void world_viewport(double x1, double y1, double x2, double y2) { m_world_x1 = x1; m_world_y1 = y1; m_world_x2 = x2; m_world_y2 = y2; update(); } //------------------------------------------------------------------- void device_viewport(double* x1, double* y1, double* x2, double* y2) const { *x1 = m_device_x1; *y1 = m_device_y1; *x2 = m_device_x2; *y2 = m_device_y2; } //------------------------------------------------------------------- void world_viewport(double* x1, double* y1, double* x2, double* y2) const { *x1 = m_world_x1; *y1 = m_world_y1; *x2 = m_world_x2; *y2 = m_world_y2; } //------------------------------------------------------------------- void world_viewport_actual(double* x1, double* y1, double* x2, double* y2) const { *x1 = m_wx1; *y1 = m_wy1; *x2 = m_wx2; *y2 = m_wy2; } //------------------------------------------------------------------- bool is_valid() const { return m_is_valid; } double align_x() const { return m_align_x; } double align_y() const { return m_align_y; } aspect_ratio_e aspect_ratio() const { return m_aspect; } //------------------------------------------------------------------- void transform(double* x, double* y) const { *x = (*x - m_wx1) * m_kx + m_dx1; *y = (*y - m_wy1) * m_ky + m_dy1; } //------------------------------------------------------------------- void transform_scale_only(double* x, double* y) const { *x *= m_kx; *y *= m_ky; } //------------------------------------------------------------------- void inverse_transform(double* x, double* y) const { *x = (*x - m_dx1) / m_kx + m_wx1; *y = (*y - m_dy1) / m_ky + m_wy1; } //------------------------------------------------------------------- void inverse_transform_scale_only(double* x, double* y) const { *x /= m_kx; *y /= m_ky; } //------------------------------------------------------------------- double device_dx() const { return m_dx1 - m_wx1 * m_kx; } double device_dy() const { return m_dy1 - m_wy1 * m_ky; } //------------------------------------------------------------------- double scale_x() const { return m_kx; } //------------------------------------------------------------------- double scale_y() const { return m_ky; } //------------------------------------------------------------------- double scale() const { return (m_kx + m_ky) * 0.5; } //------------------------------------------------------------------- trans_affine to_affine() const { trans_affine mtx = trans_affine_translation(-m_wx1, -m_wy1); mtx *= trans_affine_scaling(m_kx, m_ky); mtx *= trans_affine_translation(m_dx1, m_dy1); return mtx; } //------------------------------------------------------------------- trans_affine to_affine_scale_only() const { return trans_affine_scaling(m_kx, m_ky); } //------------------------------------------------------------------- unsigned byte_size() const { return sizeof(*this); } void serialize(int8u* ptr) const { memcpy(ptr, this, sizeof(*this)); } void deserialize(const int8u* ptr) { memcpy(this, ptr, sizeof(*this)); } private: void update(); double m_world_x1; double m_world_y1; double m_world_x2; double m_world_y2; double m_device_x1; double m_device_y1; double m_device_x2; double m_device_y2; aspect_ratio_e m_aspect; bool m_is_valid; double m_align_x; double m_align_y; double m_wx1; double m_wy1; double m_wx2; double m_wy2; double m_dx1; double m_dy1; double m_kx; double m_ky; }; //----------------------------------------------------------------------- inline void trans_viewport::update() { const double epsilon = 1e-30; if(std::fabs(m_world_x1 - m_world_x2) < epsilon || std::fabs(m_world_y1 - m_world_y2) < epsilon || std::fabs(m_device_x1 - m_device_x2) < epsilon || std::fabs(m_device_y1 - m_device_y2) < epsilon) { m_wx1 = m_world_x1; m_wy1 = m_world_y1; m_wx2 = m_world_x1 + 1.0; m_wy2 = m_world_y2 + 1.0; m_dx1 = m_device_x1; m_dy1 = m_device_y1; m_kx = 1.0; m_ky = 1.0; m_is_valid = false; return; } double world_x1 = m_world_x1; double world_y1 = m_world_y1; double world_x2 = m_world_x2; double world_y2 = m_world_y2; double device_x1 = m_device_x1; double device_y1 = m_device_y1; double device_x2 = m_device_x2; double device_y2 = m_device_y2; if(m_aspect != aspect_ratio_stretch) { double d; m_kx = (device_x2 - device_x1) / (world_x2 - world_x1); m_ky = (device_y2 - device_y1) / (world_y2 - world_y1); if((m_aspect == aspect_ratio_meet) == (m_kx < m_ky)) { d = (world_y2 - world_y1) * m_ky / m_kx; world_y1 += (world_y2 - world_y1 - d) * m_align_y; world_y2 = world_y1 + d; } else { d = (world_x2 - world_x1) * m_kx / m_ky; world_x1 += (world_x2 - world_x1 - d) * m_align_x; world_x2 = world_x1 + d; } } m_wx1 = world_x1; m_wy1 = world_y1; m_wx2 = world_x2; m_wy2 = world_y2; m_dx1 = device_x1; m_dy1 = device_y1; m_kx = (device_x2 - device_x1) / (world_x2 - world_x1); m_ky = (device_y2 - device_y1) / (world_y2 - world_y1); m_is_valid = true; } } #endif mapnik-3.0.9/deps/agg/include/agg_trans_warp_magnifier.h000066400000000000000000000033371262555547000233270ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_WARP_MAGNIFIER_INCLUDED #define AGG_WARP_MAGNIFIER_INCLUDED namespace agg { //----------------------------------------------------trans_warp_magnifier // // See Inmplementation agg_trans_warp_magnifier.cpp // class trans_warp_magnifier { public: trans_warp_magnifier() : m_xc(0.0), m_yc(0.0), m_magn(1.0), m_radius(1.0) {} void center(double x, double y) { m_xc = x; m_yc = y; } void magnification(double m) { m_magn = m; } void radius(double r) { m_radius = r; } double xc() const { return m_xc; } double yc() const { return m_yc; } double magnification() const { return m_magn; } double radius() const { return m_radius; } void transform(double* x, double* y) const; void inverse_transform(double* x, double* y) const; private: double m_xc; double m_yc; double m_magn; double m_radius; }; } #endif mapnik-3.0.9/deps/agg/include/agg_vcgen_bspline.h000066400000000000000000000041021262555547000217330ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_VCGEN_BSPLINE_INCLUDED #define AGG_VCGEN_BSPLINE_INCLUDED #include "agg_basics.h" #include "agg_array.h" #include "agg_bspline.h" namespace agg { //==========================================================vcgen_bspline class vcgen_bspline { enum status_e { initial, ready, polygon, end_poly, stop }; public: typedef pod_bvector vertex_storage; vcgen_bspline(); void interpolation_step(double v) { m_interpolation_step = v; } double interpolation_step() const { return m_interpolation_step; } // Vertex Generator Interface void remove_all(); void add_vertex(double x, double y, unsigned cmd); // Vertex Source Interface void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: vcgen_bspline(const vcgen_bspline&); const vcgen_bspline& operator = (const vcgen_bspline&); vertex_storage m_src_vertices; bspline m_spline_x; bspline m_spline_y; double m_interpolation_step; unsigned m_closed; status_e m_status; unsigned m_src_vertex; double m_cur_abscissa; double m_max_abscissa; }; } #endif mapnik-3.0.9/deps/agg/include/agg_vcgen_contour.h000066400000000000000000000066451262555547000220060ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_VCGEN_CONTOUR_INCLUDED #define AGG_VCGEN_CONTOUR_INCLUDED #include "agg_math_stroke.h" #include namespace agg { //----------------------------------------------------------vcgen_contour // // See Implementation agg_vcgen_contour.cpp // class MAPNIK_DECL vcgen_contour { enum status_e { initial, ready, outline, out_vertices, end_poly, stop }; public: typedef vertex_sequence vertex_storage; typedef pod_bvector coord_storage; vcgen_contour(); void line_cap(line_cap_e lc) { m_stroker.line_cap(lc); } void line_join(line_join_e lj) { m_stroker.line_join(lj); } void inner_join(inner_join_e ij) { m_stroker.inner_join(ij); } line_cap_e line_cap() const { return m_stroker.line_cap(); } line_join_e line_join() const { return m_stroker.line_join(); } inner_join_e inner_join() const { return m_stroker.inner_join(); } void width(double w) { m_stroker.width(m_width = w); } void miter_limit(double ml) { m_stroker.miter_limit(ml); } void miter_limit_theta(double t) { m_stroker.miter_limit_theta(t); } void inner_miter_limit(double ml) { m_stroker.inner_miter_limit(ml); } void approximation_scale(double as) { m_stroker.approximation_scale(as); } double width() const { return m_width; } double miter_limit() const { return m_stroker.miter_limit(); } double inner_miter_limit() const { return m_stroker.inner_miter_limit(); } double approximation_scale() const { return m_stroker.approximation_scale(); } void auto_detect_orientation(bool v) { m_auto_detect = v; } bool auto_detect_orientation() const { return m_auto_detect; } // Generator interface void remove_all(); void add_vertex(double x, double y, unsigned cmd); // Vertex Source Interface void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: vcgen_contour(const vcgen_contour&); const vcgen_contour& operator = (const vcgen_contour&); math_stroke m_stroker; double m_width; vertex_storage m_src_vertices; coord_storage m_out_vertices; status_e m_status; unsigned m_src_vertex; unsigned m_out_vertex; unsigned m_closed; unsigned m_orientation; bool m_auto_detect; }; } #endif mapnik-3.0.9/deps/agg/include/agg_vcgen_dash.h000066400000000000000000000051231262555547000212220ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Line dash generator // //---------------------------------------------------------------------------- #ifndef AGG_VCGEN_DASH_INCLUDED #define AGG_VCGEN_DASH_INCLUDED #include "agg_basics.h" #include "agg_vertex_sequence.h" namespace agg { //---------------------------------------------------------------vcgen_dash // // See Implementation agg_vcgen_dash.cpp // class vcgen_dash { enum max_dashes_e { max_dashes = 32 }; enum status_e { initial, ready, polyline, stop }; public: typedef vertex_sequence vertex_storage; vcgen_dash(); void remove_all_dashes(); void add_dash(double dash_len, double gap_len); void dash_start(double ds); void shorten(double s) { m_shorten = s; } double shorten() const { return m_shorten; } // Vertex Generator Interface void remove_all(); void add_vertex(double x, double y, unsigned cmd); // Vertex Source Interface void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: vcgen_dash(const vcgen_dash&); const vcgen_dash& operator = (const vcgen_dash&); void calc_dash_start(double ds); double m_dashes[max_dashes]; double m_total_dash_len; unsigned m_num_dashes; double m_dash_start; double m_shorten; double m_curr_dash_start; unsigned m_curr_dash; double m_curr_rest; const vertex_dist* m_v1; const vertex_dist* m_v2; vertex_storage m_src_vertices; unsigned m_closed; status_e m_status; unsigned m_src_vertex; }; } #endif mapnik-3.0.9/deps/agg/include/agg_vcgen_markers_term.h000066400000000000000000000037311262555547000230010ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_VCGEN_MARKERS_TERM_INCLUDED #define AGG_VCGEN_MARKERS_TERM_INCLUDED #include "agg_basics.h" #include "agg_vertex_sequence.h" namespace agg { //======================================================vcgen_markers_term // // See Implemantation agg_vcgen_markers_term.cpp // Terminal markers generator (arrowhead/arrowtail) // //------------------------------------------------------------------------ class vcgen_markers_term { public: vcgen_markers_term() : m_curr_id(0), m_curr_idx(0) {} // Vertex Generator Interface void remove_all(); void add_vertex(double x, double y, unsigned cmd); // Vertex Source Interface void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: vcgen_markers_term(const vcgen_markers_term&); const vcgen_markers_term& operator = (const vcgen_markers_term&); struct coord_type { double x, y; coord_type() {} coord_type(double x_, double y_) : x(x_), y(y_) {} }; typedef pod_bvector coord_storage; coord_storage m_markers; unsigned m_curr_id; unsigned m_curr_idx; }; } #endif mapnik-3.0.9/deps/agg/include/agg_vcgen_smooth_poly1.h000066400000000000000000000050051262555547000227370ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_VCGEN_SMOOTH_POLY1_INCLUDED #define AGG_VCGEN_SMOOTH_POLY1_INCLUDED #include "agg_basics.h" #include "agg_vertex_sequence.h" namespace agg { //======================================================vcgen_smooth_poly1 // // See Implementation agg_vcgen_smooth_poly1.cpp // Smooth polygon generator // //------------------------------------------------------------------------ class vcgen_smooth_poly1 { enum status_e { initial, ready, polygon, ctrl_b, ctrl_e, ctrl1, ctrl2, end_poly, stop }; public: typedef vertex_sequence vertex_storage; vcgen_smooth_poly1(); void smooth_value(double v) { m_smooth_value = v * 0.5; } double smooth_value() const { return m_smooth_value * 2.0; } // Vertex Generator Interface void remove_all(); void add_vertex(double x, double y, unsigned cmd); // Vertex Source Interface void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: vcgen_smooth_poly1(const vcgen_smooth_poly1&); const vcgen_smooth_poly1& operator = (const vcgen_smooth_poly1&); void calculate(const vertex_dist& v0, const vertex_dist& v1, const vertex_dist& v2, const vertex_dist& v3); vertex_storage m_src_vertices; double m_smooth_value; unsigned m_closed; status_e m_status; unsigned m_src_vertex; double m_ctrl1_x; double m_ctrl1_y; double m_ctrl2_x; double m_ctrl2_y; }; } #endif mapnik-3.0.9/deps/agg/include/agg_vcgen_stroke.h000066400000000000000000000070441262555547000216160ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_VCGEN_STROKE_INCLUDED #define AGG_VCGEN_STROKE_INCLUDED #include "agg_math_stroke.h" #include namespace agg { //============================================================vcgen_stroke // // See Implementation agg_vcgen_stroke.cpp // Stroke generator // //------------------------------------------------------------------------ class MAPNIK_DECL vcgen_stroke { enum status_e { initial, ready, cap1, cap2, outline1, close_first, outline2, out_vertices, end_poly1, end_poly2, stop }; public: typedef vertex_sequence vertex_storage; typedef pod_bvector coord_storage; vcgen_stroke(); void line_cap(line_cap_e lc) { m_stroker.line_cap(lc); } void line_join(line_join_e lj) { m_stroker.line_join(lj); } void inner_join(inner_join_e ij) { m_stroker.inner_join(ij); } line_cap_e line_cap() const { return m_stroker.line_cap(); } line_join_e line_join() const { return m_stroker.line_join(); } inner_join_e inner_join() const { return m_stroker.inner_join(); } void width(double w) { m_stroker.width(w); } void miter_limit(double ml) { m_stroker.miter_limit(ml); } void miter_limit_theta(double t) { m_stroker.miter_limit_theta(t); } void inner_miter_limit(double ml) { m_stroker.inner_miter_limit(ml); } void approximation_scale(double as) { m_stroker.approximation_scale(as); } double width() const { return m_stroker.width(); } double miter_limit() const { return m_stroker.miter_limit(); } double inner_miter_limit() const { return m_stroker.inner_miter_limit(); } double approximation_scale() const { return m_stroker.approximation_scale(); } void shorten(double s) { m_shorten = s; } double shorten() const { return m_shorten; } // Vertex Generator Interface void remove_all(); void add_vertex(double x, double y, unsigned cmd); // Vertex Source Interface void rewind(unsigned path_id); unsigned vertex(double* x, double* y); private: vcgen_stroke(const vcgen_stroke&); const vcgen_stroke& operator = (const vcgen_stroke&); math_stroke m_stroker; vertex_storage m_src_vertices; coord_storage m_out_vertices; double m_shorten; unsigned m_closed; status_e m_status; status_e m_prev_status; unsigned m_src_vertex; unsigned m_out_vertex; }; } #endif mapnik-3.0.9/deps/agg/include/agg_vcgen_vertex_sequence.h000066400000000000000000000073701262555547000235160ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_VCGEN_VERTEX_SEQUENCE_INCLUDED #define AGG_VCGEN_VERTEX_SEQUENCE_INCLUDED #include "agg_basics.h" #include "agg_vertex_sequence.h" #include "agg_shorten_path.h" namespace agg { //===================================================vcgen_vertex_sequence class vcgen_vertex_sequence { public: typedef vertex_dist_cmd vertex_type; typedef vertex_sequence vertex_storage; vcgen_vertex_sequence() : m_flags(0), m_cur_vertex(0), m_shorten(0.0), m_ready(false) { } // Vertex Generator Interface void remove_all(); void add_vertex(double x, double y, unsigned cmd); // Vertex Source Interface void rewind(unsigned path_id); unsigned vertex(double* x, double* y); void shorten(double s) { m_shorten = s; } double shorten() const { return m_shorten; } private: vcgen_vertex_sequence(const vcgen_vertex_sequence&); const vcgen_vertex_sequence& operator = (const vcgen_vertex_sequence&); vertex_storage m_src_vertices; unsigned m_flags; unsigned m_cur_vertex; double m_shorten; bool m_ready; }; //------------------------------------------------------------------------ inline void vcgen_vertex_sequence::remove_all() { m_ready = false; m_src_vertices.remove_all(); m_cur_vertex = 0; m_flags = 0; } //------------------------------------------------------------------------ inline void vcgen_vertex_sequence::add_vertex(double x, double y, unsigned cmd) { m_ready = false; if(is_move_to(cmd)) { m_src_vertices.modify_last(vertex_dist_cmd(x, y, cmd)); } else { if(is_vertex(cmd)) { m_src_vertices.add(vertex_dist_cmd(x, y, cmd)); } else { m_flags = cmd & path_flags_mask; } } } //------------------------------------------------------------------------ inline void vcgen_vertex_sequence::rewind(unsigned) { if(!m_ready) { m_src_vertices.close(is_closed(m_flags)); shorten_path(m_src_vertices, m_shorten, get_close_flag(m_flags)); } m_ready = true; m_cur_vertex = 0; } //------------------------------------------------------------------------ inline unsigned vcgen_vertex_sequence::vertex(double* x, double* y) { if(!m_ready) { rewind(0); } if(m_cur_vertex == m_src_vertices.size()) { ++m_cur_vertex; return path_cmd_end_poly | m_flags; } if(m_cur_vertex > m_src_vertices.size()) { return path_cmd_stop; } vertex_type& v = m_src_vertices[m_cur_vertex++]; *x = v.x; *y = v.y; return v.cmd; } } #endif mapnik-3.0.9/deps/agg/include/agg_vertex_sequence.h000066400000000000000000000120721262555547000223270ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // vertex_sequence container and vertex_dist struct // //---------------------------------------------------------------------------- #ifndef AGG_VERTEX_SEQUENCE_INCLUDED #define AGG_VERTEX_SEQUENCE_INCLUDED #include "agg_basics.h" #include "agg_array.h" #include "agg_math.h" namespace agg { //----------------------------------------------------------vertex_sequence // Modified agg::pod_bvector. The data is interpreted as a sequence // of vertices. It means that the type T must expose: // // bool T::operator() (const T& val) // // that is called every time new vertex is being added. The main purpose // of this operator is the possibility to calculate some values during // adding and to return true if the vertex fits some criteria or false if // it doesn't. In the last case the new vertex is not added. // // The simple example is filtering coinciding vertices with calculation // of the distance between the current and previous ones: // // struct vertex_dist // { // double x; // double y; // double dist; // // vertex_dist() {} // vertex_dist(double x_, double y_) : // x(x_), // y(y_), // dist(0.0) // { // } // // bool operator () (const vertex_dist& val) // { // return (dist = calc_distance(x, y, val.x, val.y)) > EPSILON; // } // }; // // Function close() calls this operator and removes the last vertex if // necessary. //------------------------------------------------------------------------ template class vertex_sequence : public pod_bvector { public: typedef pod_bvector base_type; void add(const T& val); void modify_last(const T& val); void close(bool remove_flag); }; //------------------------------------------------------------------------ template void vertex_sequence::add(const T& val) { if(base_type::size() > 1) { if(!(*this)[base_type::size() - 2]((*this)[base_type::size() - 1])) { base_type::remove_last(); } } base_type::add(val); } //------------------------------------------------------------------------ template void vertex_sequence::modify_last(const T& val) { base_type::remove_last(); add(val); } //------------------------------------------------------------------------ template void vertex_sequence::close(bool closed) { while(base_type::size() > 1) { if((*this)[base_type::size() - 2]((*this)[base_type::size() - 1])) break; T t = (*this)[base_type::size() - 1]; base_type::remove_last(); modify_last(t); } if(closed) { while(base_type::size() > 1) { if((*this)[base_type::size() - 1]((*this)[0])) break; base_type::remove_last(); } } } //-------------------------------------------------------------vertex_dist // Vertex (x, y) with the distance to the next one. The last vertex has // distance between the last and the first points if the polygon is closed // and 0.0 if it's a polyline. struct vertex_dist { double x; double y; double dist; vertex_dist() {} vertex_dist(double x_, double y_) : x(x_), y(y_), dist(0.0) { } bool operator () (const vertex_dist& val) { bool ret = (dist = calc_distance(x, y, val.x, val.y)) > vertex_dist_epsilon; if(!ret) dist = 1.0 / vertex_dist_epsilon; return ret; } }; //--------------------------------------------------------vertex_dist_cmd // Save as the above but with additional "command" value struct vertex_dist_cmd : public vertex_dist { unsigned cmd; vertex_dist_cmd() {} vertex_dist_cmd(double x_, double y_, unsigned cmd_) : vertex_dist(x_, y_), cmd(cmd_) { } }; } #endif mapnik-3.0.9/deps/agg/include/agg_vpgen_clip_polygon.h000066400000000000000000000047111262555547000230200ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_VPGEN_CLIP_POLYGON_INCLUDED #define AGG_VPGEN_CLIP_POLYGON_INCLUDED #include "agg_basics.h" // https://github.com/mapnik/mapnik/issues/1860 #include namespace agg { //======================================================vpgen_clip_polygon // // See Implementation agg_vpgen_clip_polygon.cpp // class MAPNIK_DECL vpgen_clip_polygon { public: vpgen_clip_polygon() : m_clip_box(0, 0, 1, 1), m_x1(0), m_y1(0), m_clip_flags(0), m_num_vertices(0), m_vertex(0), m_cmd(path_cmd_move_to) { } void clip_box(double x1, double y1, double x2, double y2) { m_clip_box.x1 = x1; m_clip_box.y1 = y1; m_clip_box.x2 = x2; m_clip_box.y2 = y2; m_clip_box.normalize(); } double x1() const { return m_clip_box.x1; } double y1() const { return m_clip_box.y1; } double x2() const { return m_clip_box.x2; } double y2() const { return m_clip_box.y2; } static bool auto_close() { return true; } static bool auto_unclose() { return false; } void reset(); void move_to(double x, double y); void line_to(double x, double y); unsigned vertex(double* x, double* y); private: unsigned clipping_flags(double x, double y); private: rect_d m_clip_box; double m_x1; double m_y1; unsigned m_clip_flags; double m_x[4]; double m_y[4]; unsigned m_num_vertices; unsigned m_vertex; unsigned m_cmd; }; } #endif mapnik-3.0.9/deps/agg/include/agg_vpgen_clip_polyline.h000066400000000000000000000045451262555547000231710ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_VPGEN_CLIP_POLYLINE_INCLUDED #define AGG_VPGEN_CLIP_POLYLINE_INCLUDED #include "agg_basics.h" // https://github.com/mapnik/mapnik/issues/1860 #include namespace agg { //======================================================vpgen_clip_polyline // // See Implementation agg_vpgen_clip_polyline.cpp // class MAPNIK_DECL vpgen_clip_polyline { public: vpgen_clip_polyline() : m_clip_box(0, 0, 1, 1), m_x1(0), m_y1(0), m_num_vertices(0), m_vertex(0), m_move_to(false) { } void clip_box(double x1, double y1, double x2, double y2) { m_clip_box.x1 = x1; m_clip_box.y1 = y1; m_clip_box.x2 = x2; m_clip_box.y2 = y2; m_clip_box.normalize(); } double x1() const { return m_clip_box.x1; } double y1() const { return m_clip_box.y1; } double x2() const { return m_clip_box.x2; } double y2() const { return m_clip_box.y2; } static bool auto_close() { return false; } static bool auto_unclose() { return true; } void reset(); void move_to(double x, double y); void line_to(double x, double y); unsigned vertex(double* x, double* y); private: rect_d m_clip_box; double m_x1; double m_y1; double m_x[2]; double m_y[2]; unsigned m_cmd[2]; unsigned m_num_vertices; unsigned m_vertex; bool m_move_to; }; } #endif mapnik-3.0.9/deps/agg/include/agg_vpgen_segmentator.h000066400000000000000000000034101262555547000226450ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #ifndef AGG_VPGEN_SEGMENTATOR_INCLUDED #define AGG_VPGEN_SEGMENTATOR_INCLUDED #include #include "agg_basics.h" namespace agg { //=======================================================vpgen_segmentator // // See Implementation agg_vpgen_segmentator.cpp // class vpgen_segmentator { public: vpgen_segmentator() : m_approximation_scale(1.0) {} void approximation_scale(double s) { m_approximation_scale = s; } double approximation_scale() const { return m_approximation_scale; } static bool auto_close() { return false; } static bool auto_unclose() { return false; } void reset() { m_cmd = path_cmd_stop; } void move_to(double x, double y); void line_to(double x, double y); unsigned vertex(double* x, double* y); private: double m_approximation_scale; double m_x1; double m_y1; double m_dx; double m_dy; double m_dl; double m_ddl; unsigned m_cmd; }; } #endif mapnik-3.0.9/deps/agg/src/000077500000000000000000000000001262555547000152755ustar00rootroot00000000000000mapnik-3.0.9/deps/agg/src/agg_arc.cpp000066400000000000000000000055021262555547000173660ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Arc vertex generator // //---------------------------------------------------------------------------- #include #include "agg_arc.h" namespace agg { //------------------------------------------------------------------------ arc::arc(double x, double y, double rx, double ry, double a1, double a2, bool ccw) : m_x(x), m_y(y), m_rx(rx), m_ry(ry), m_scale(1.0) { normalize(a1, a2, ccw); } //------------------------------------------------------------------------ void arc::init(double x, double y, double rx, double ry, double a1, double a2, bool ccw) { m_x = x; m_y = y; m_rx = rx; m_ry = ry; normalize(a1, a2, ccw); } //------------------------------------------------------------------------ void arc::approximation_scale(double s) { m_scale = s; if(m_initialized) { normalize(m_start, m_end, m_ccw); } } //------------------------------------------------------------------------ void arc::rewind(unsigned) { m_path_cmd = path_cmd_move_to; m_angle = m_start; } //------------------------------------------------------------------------ unsigned arc::vertex(double* x, double* y) { if(is_stop(m_path_cmd)) return path_cmd_stop; if((m_angle < m_end - m_da/4) != m_ccw) { *x = m_x + std::cos(m_end) * m_rx; *y = m_y + std::sin(m_end) * m_ry; m_path_cmd = path_cmd_stop; return path_cmd_line_to; } *x = m_x + std::cos(m_angle) * m_rx; *y = m_y + std::sin(m_angle) * m_ry; m_angle += m_da; unsigned pf = m_path_cmd; m_path_cmd = path_cmd_line_to; return pf; } //------------------------------------------------------------------------ void arc::normalize(double a1, double a2, bool ccw) { double ra = (std::fabs(m_rx) + std::fabs(m_ry)) / 2; m_da = std::acos(ra / (ra + 0.125 / m_scale)) * 2; if(ccw) { while(a2 < a1) a2 += pi * 2.0; } else { while(a1 < a2) a1 += pi * 2.0; m_da = -m_da; } m_ccw = ccw; m_start = a1; m_end = a2; m_initialized = true; } } mapnik-3.0.9/deps/agg/src/agg_arrowhead.cpp000066400000000000000000000064171262555547000206030ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Simple arrowhead/arrowtail generator // //---------------------------------------------------------------------------- #include "agg_arrowhead.h" namespace agg { //------------------------------------------------------------------------ arrowhead::arrowhead() : m_head_d1(1.0), m_head_d2(1.0), m_head_d3(1.0), m_head_d4(0.0), m_tail_d1(1.0), m_tail_d2(1.0), m_tail_d3(1.0), m_tail_d4(0.0), m_head_flag(false), m_tail_flag(false), m_curr_id(0), m_curr_coord(0) { } //------------------------------------------------------------------------ void arrowhead::rewind(unsigned path_id) { m_curr_id = path_id; m_curr_coord = 0; if(path_id == 0) { if(!m_tail_flag) { m_cmd[0] = path_cmd_stop; return; } m_coord[0] = m_tail_d1; m_coord[1] = 0.0; m_coord[2] = m_tail_d1 - m_tail_d4; m_coord[3] = m_tail_d3; m_coord[4] = -m_tail_d2 - m_tail_d4; m_coord[5] = m_tail_d3; m_coord[6] = -m_tail_d2; m_coord[7] = 0.0; m_coord[8] = -m_tail_d2 - m_tail_d4; m_coord[9] = -m_tail_d3; m_coord[10] = m_tail_d1 - m_tail_d4; m_coord[11] = -m_tail_d3; m_cmd[0] = path_cmd_move_to; m_cmd[1] = path_cmd_line_to; m_cmd[2] = path_cmd_line_to; m_cmd[3] = path_cmd_line_to; m_cmd[4] = path_cmd_line_to; m_cmd[5] = path_cmd_line_to; m_cmd[7] = path_cmd_end_poly | path_flags_close | path_flags_ccw; m_cmd[6] = path_cmd_stop; return; } if(path_id == 1) { if(!m_head_flag) { m_cmd[0] = path_cmd_stop; return; } m_coord[0] = -m_head_d1; m_coord[1] = 0.0; m_coord[2] = m_head_d2 + m_head_d4; m_coord[3] = -m_head_d3; m_coord[4] = m_head_d2; m_coord[5] = 0.0; m_coord[6] = m_head_d2 + m_head_d4; m_coord[7] = m_head_d3; m_cmd[0] = path_cmd_move_to; m_cmd[1] = path_cmd_line_to; m_cmd[2] = path_cmd_line_to; m_cmd[3] = path_cmd_line_to; m_cmd[4] = path_cmd_end_poly | path_flags_close | path_flags_ccw; m_cmd[5] = path_cmd_stop; return; } } //------------------------------------------------------------------------ unsigned arrowhead::vertex(double* x, double* y) { if(m_curr_id < 2) { unsigned curr_idx = m_curr_coord * 2; *x = m_coord[curr_idx]; *y = m_coord[curr_idx + 1]; return m_cmd[m_curr_coord++]; } return path_cmd_stop; } } mapnik-3.0.9/deps/agg/src/agg_bezier_arc.cpp000066400000000000000000000173521262555547000207340ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Arc generator. Produces at most 4 consecutive cubic bezier curves, i.e., // 4, 7, 10, or 13 vertices. // //---------------------------------------------------------------------------- #include #include "agg_bezier_arc.h" namespace agg { // This epsilon is used to prevent us from adding degenerate curves // (converging to a single point). // The value isn't very critical. Function arc_to_bezier() has a limit // of the sweep_angle. If std::fabs(sweep_angle) exceeds pi/2 the curve // becomes inaccurate. But slight exceeding is quite appropriate. //-------------------------------------------------bezier_arc_angle_epsilon const double bezier_arc_angle_epsilon = 0.01; //------------------------------------------------------------arc_to_bezier void arc_to_bezier(double cx, double cy, double rx, double ry, double start_angle, double sweep_angle, double* curve) { double x0 = std::cos(sweep_angle / 2.0); double y0 = std::sin(sweep_angle / 2.0); double tx = (1.0 - x0) * 4.0 / 3.0; double ty = y0 - tx * x0 / y0; double px[4]; double py[4]; px[0] = x0; py[0] = -y0; px[1] = x0 + tx; py[1] = -ty; px[2] = x0 + tx; py[2] = ty; px[3] = x0; py[3] = y0; double sn = std::sin(start_angle + sweep_angle / 2.0); double cs = std::cos(start_angle + sweep_angle / 2.0); unsigned i; for(i = 0; i < 4; i++) { curve[i * 2] = cx + rx * (px[i] * cs - py[i] * sn); curve[i * 2 + 1] = cy + ry * (px[i] * sn + py[i] * cs); } } //------------------------------------------------------------------------ void bezier_arc::init(double x, double y, double rx, double ry, double start_angle, double sweep_angle) { start_angle = fmod(start_angle, 2.0 * pi); if(sweep_angle >= 2.0 * pi) sweep_angle = 2.0 * pi; if(sweep_angle <= -2.0 * pi) sweep_angle = -2.0 * pi; if(std::fabs(sweep_angle) < 1e-10) { m_num_vertices = 4; m_cmd = path_cmd_line_to; m_vertices[0] = x + rx * std::cos(start_angle); m_vertices[1] = y + ry * std::sin(start_angle); m_vertices[2] = x + rx * std::cos(start_angle + sweep_angle); m_vertices[3] = y + ry * std::sin(start_angle + sweep_angle); return; } double total_sweep = 0.0; double local_sweep = 0.0; double prev_sweep; m_num_vertices = 2; m_cmd = path_cmd_curve4; bool done = false; do { if(sweep_angle < 0.0) { prev_sweep = total_sweep; local_sweep = -pi * 0.5; total_sweep -= pi * 0.5; if(total_sweep <= sweep_angle + bezier_arc_angle_epsilon) { local_sweep = sweep_angle - prev_sweep; done = true; } } else { prev_sweep = total_sweep; local_sweep = pi * 0.5; total_sweep += pi * 0.5; if(total_sweep >= sweep_angle - bezier_arc_angle_epsilon) { local_sweep = sweep_angle - prev_sweep; done = true; } } arc_to_bezier(x, y, rx, ry, start_angle, local_sweep, m_vertices + m_num_vertices - 2); m_num_vertices += 6; start_angle += local_sweep; } while(!done && m_num_vertices < 26); } //-------------------------------------------------------------------- void bezier_arc_svg::init(double x0, double y0, double rx, double ry, double angle, bool large_arc_flag, bool sweep_flag, double x2, double y2) { m_radii_ok = true; if(rx < 0.0) rx = -rx; if(ry < 0.0) ry = -rx; // Calculate the middle point between // the current and the final points //------------------------ double dx2 = (x0 - x2) / 2.0; double dy2 = (y0 - y2) / 2.0; double cos_a = std::cos(angle); double sin_a = std::sin(angle); // Calculate (x1, y1) //------------------------ double x1 = cos_a * dx2 + sin_a * dy2; double y1 = -sin_a * dx2 + cos_a * dy2; // Ensure radii are large enough //------------------------ double prx = rx * rx; double pry = ry * ry; double px1 = x1 * x1; double py1 = y1 * y1; // Check that radii are large enough //------------------------ double radii_check = px1/prx + py1/pry; if(radii_check > 1.0) { rx = sqrt(radii_check) * rx; ry = sqrt(radii_check) * ry; prx = rx * rx; pry = ry * ry; if(radii_check > 10.0) m_radii_ok = false; } // Calculate (cx1, cy1) //------------------------ double sign = (large_arc_flag == sweep_flag) ? -1.0 : 1.0; double sq = (prx*pry - prx*py1 - pry*px1) / (prx*py1 + pry*px1); double coef = sign * sqrt((sq < 0) ? 0 : sq); double cx1 = coef * ((rx * y1) / ry); double cy1 = coef * -((ry * x1) / rx); // // Calculate (cx, cy) from (cx1, cy1) //------------------------ double sx2 = (x0 + x2) / 2.0; double sy2 = (y0 + y2) / 2.0; double cx = sx2 + (cos_a * cx1 - sin_a * cy1); double cy = sy2 + (sin_a * cx1 + cos_a * cy1); // Calculate the start_angle (angle1) and the sweep_angle (dangle) //------------------------ double ux = (x1 - cx1) / rx; double uy = (y1 - cy1) / ry; double vx = (-x1 - cx1) / rx; double vy = (-y1 - cy1) / ry; double p, n; // Calculate the angle start //------------------------ n = sqrt(ux*ux + uy*uy); p = ux; // (1 * ux) + (0 * uy) sign = (uy < 0) ? -1.0 : 1.0; double v = p / n; if(v < -1.0) v = -1.0; if(v > 1.0) v = 1.0; double start_angle = sign * std::acos(v); // Calculate the sweep angle //------------------------ n = sqrt((ux*ux + uy*uy) * (vx*vx + vy*vy)); p = ux * vx + uy * vy; sign = (ux * vy - uy * vx < 0) ? -1.0 : 1.0; v = p / n; if(v < -1.0) v = -1.0; if(v > 1.0) v = 1.0; double sweep_angle = sign * std::acos(v); if(!sweep_flag && sweep_angle > 0) { sweep_angle -= pi * 2.0; } else if (sweep_flag && sweep_angle < 0) { sweep_angle += pi * 2.0; } // We can now build and transform the resulting arc //------------------------ m_arc.init(0.0, 0.0, rx, ry, start_angle, sweep_angle); trans_affine mtx = trans_affine_rotation(angle); mtx *= trans_affine_translation(cx, cy); for(unsigned i = 2; i < m_arc.num_vertices()-2; i += 2) { mtx.transform(m_arc.vertices() + i, m_arc.vertices() + i + 1); } // We must make sure that the starting and ending points // exactly coincide with the initial (x0,y0) and (x2,y2) m_arc.vertices()[0] = x0; m_arc.vertices()[1] = y0; if(m_arc.num_vertices() > 2) { m_arc.vertices()[m_arc.num_vertices() - 2] = x2; m_arc.vertices()[m_arc.num_vertices() - 1] = y2; } } } mapnik-3.0.9/deps/agg/src/agg_bspline.cpp000066400000000000000000000155161262555547000202630ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // class bspline // //---------------------------------------------------------------------------- #include "agg_bspline.h" namespace agg { //------------------------------------------------------------------------ bspline::bspline() : m_max(0), m_num(0), m_x(0), m_y(0), m_last_idx(-1) { } //------------------------------------------------------------------------ bspline::bspline(int num) : m_max(0), m_num(0), m_x(0), m_y(0), m_last_idx(-1) { init(num); } //------------------------------------------------------------------------ bspline::bspline(int num, const double* x, const double* y) : m_max(0), m_num(0), m_x(0), m_y(0), m_last_idx(-1) { init(num, x, y); } //------------------------------------------------------------------------ void bspline::init(int max) { if(max > 2 && max > m_max) { m_am.resize(max * 3); m_max = max; m_x = &m_am[m_max]; m_y = &m_am[m_max * 2]; } m_num = 0; m_last_idx = -1; } //------------------------------------------------------------------------ void bspline::add_point(double x, double y) { if(m_num < m_max) { m_x[m_num] = x; m_y[m_num] = y; ++m_num; } } //------------------------------------------------------------------------ void bspline::prepare() { if(m_num > 2) { int i, k, n1; double* temp; double* r; double* s; double h, p, d, f, e; for(k = 0; k < m_num; k++) { m_am[k] = 0.0; } n1 = 3 * m_num; pod_array al(n1); temp = &al[0]; for(k = 0; k < n1; k++) { temp[k] = 0.0; } r = temp + m_num; s = temp + m_num * 2; n1 = m_num - 1; d = m_x[1] - m_x[0]; e = (m_y[1] - m_y[0]) / d; for(k = 1; k < n1; k++) { h = d; d = m_x[k + 1] - m_x[k]; f = e; e = (m_y[k + 1] - m_y[k]) / d; al[k] = d / (d + h); r[k] = 1.0 - al[k]; s[k] = 6.0 * (e - f) / (h + d); } for(k = 1; k < n1; k++) { p = 1.0 / (r[k] * al[k - 1] + 2.0); al[k] *= -p; s[k] = (s[k] - r[k] * s[k - 1]) * p; } m_am[n1] = 0.0; al[n1 - 1] = s[n1 - 1]; m_am[n1 - 1] = al[n1 - 1]; for(k = n1 - 2, i = 0; i < m_num - 2; i++, k--) { al[k] = al[k] * al[k + 1] + s[k]; m_am[k] = al[k]; } } m_last_idx = -1; } //------------------------------------------------------------------------ void bspline::init(int num, const double* x, const double* y) { if(num > 2) { init(num); int i; for(i = 0; i < num; i++) { add_point(*x++, *y++); } prepare(); } m_last_idx = -1; } //------------------------------------------------------------------------ void bspline::bsearch(int n, const double *x, double x0, int *i) { int j = n - 1; int k; for(*i = 0; (j - *i) > 1; ) { if(x0 < x[k = (*i + j) >> 1]) j = k; else *i = k; } } //------------------------------------------------------------------------ double bspline::interpolation(double x, int i) const { int j = i + 1; double d = m_x[i] - m_x[j]; double h = x - m_x[j]; double r = m_x[i] - x; double p = d * d / 6.0; return (m_am[j] * r * r * r + m_am[i] * h * h * h) / 6.0 / d + ((m_y[j] - m_am[j] * p) * r + (m_y[i] - m_am[i] * p) * h) / d; } //------------------------------------------------------------------------ double bspline::extrapolation_left(double x) const { double d = m_x[1] - m_x[0]; return (-d * m_am[1] / 6 + (m_y[1] - m_y[0]) / d) * (x - m_x[0]) + m_y[0]; } //------------------------------------------------------------------------ double bspline::extrapolation_right(double x) const { double d = m_x[m_num - 1] - m_x[m_num - 2]; return (d * m_am[m_num - 2] / 6 + (m_y[m_num - 1] - m_y[m_num - 2]) / d) * (x - m_x[m_num - 1]) + m_y[m_num - 1]; } //------------------------------------------------------------------------ double bspline::get(double x) const { if(m_num > 2) { int i; // Extrapolation on the left if(x < m_x[0]) return extrapolation_left(x); // Extrapolation on the right if(x >= m_x[m_num - 1]) return extrapolation_right(x); // Interpolation bsearch(m_num, m_x, x, &i); return interpolation(x, i); } return 0.0; } //------------------------------------------------------------------------ double bspline::get_stateful(double x) const { if(m_num > 2) { // Extrapolation on the left if(x < m_x[0]) return extrapolation_left(x); // Extrapolation on the right if(x >= m_x[m_num - 1]) return extrapolation_right(x); if(m_last_idx >= 0) { // Check if x is not in current range if(x < m_x[m_last_idx] || x > m_x[m_last_idx + 1]) { // Check if x between next points (most probably) if(m_last_idx < m_num - 2 && x >= m_x[m_last_idx + 1] && x <= m_x[m_last_idx + 2]) { ++m_last_idx; } else if(m_last_idx > 0 && x >= m_x[m_last_idx - 1] && x <= m_x[m_last_idx]) { // x is between pevious points --m_last_idx; } else { // Else perform full search bsearch(m_num, m_x, x, &m_last_idx); } } return interpolation(x, m_last_idx); } else { // Interpolation bsearch(m_num, m_x, x, &m_last_idx); return interpolation(x, m_last_idx); } } return 0.0; } } mapnik-3.0.9/deps/agg/src/agg_curves.cpp000066400000000000000000000422361262555547000201350ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include #include "agg_curves.h" #include "agg_math.h" namespace agg { //------------------------------------------------------------------------ //const double curve_distance_epsilon = 1e-30; const double curve_collinearity_epsilon = 1e-30; const double curve_angle_tolerance_epsilon = 0.01; enum curve_recursion_limit_e { curve_recursion_limit = 32 }; //------------------------------------------------------------------------ void curve3_inc::approximation_scale(double s) { m_scale = s; } //------------------------------------------------------------------------ double curve3_inc::approximation_scale() const { return m_scale; } //------------------------------------------------------------------------ void curve3_inc::init(double x1, double y1, double x2, double y2, double x3, double y3) { m_start_x = x1; m_start_y = y1; m_end_x = x3; m_end_y = y3; double dx1 = x2 - x1; double dy1 = y2 - y1; double dx2 = x3 - x2; double dy2 = y3 - y2; double len = sqrt(dx1 * dx1 + dy1 * dy1) + sqrt(dx2 * dx2 + dy2 * dy2); m_num_steps = uround(len * 0.25 * m_scale); if(m_num_steps < 4) { m_num_steps = 4; } double subdivide_step = 1.0 / m_num_steps; double subdivide_step2 = subdivide_step * subdivide_step; double tmpx = (x1 - x2 * 2.0 + x3) * subdivide_step2; double tmpy = (y1 - y2 * 2.0 + y3) * subdivide_step2; m_saved_fx = m_fx = x1; m_saved_fy = m_fy = y1; m_saved_dfx = m_dfx = tmpx + (x2 - x1) * (2.0 * subdivide_step); m_saved_dfy = m_dfy = tmpy + (y2 - y1) * (2.0 * subdivide_step); m_ddfx = tmpx * 2.0; m_ddfy = tmpy * 2.0; m_step = m_num_steps; } //------------------------------------------------------------------------ void curve3_inc::rewind(unsigned) { if(m_num_steps == 0) { m_step = -1; return; } m_step = m_num_steps; m_fx = m_saved_fx; m_fy = m_saved_fy; m_dfx = m_saved_dfx; m_dfy = m_saved_dfy; } //------------------------------------------------------------------------ unsigned curve3_inc::vertex(double* x, double* y) { if(m_step < 0) return path_cmd_stop; if(m_step == m_num_steps) { *x = m_start_x; *y = m_start_y; --m_step; return path_cmd_move_to; } if(m_step == 0) { *x = m_end_x; *y = m_end_y; --m_step; return path_cmd_line_to; } m_fx += m_dfx; m_fy += m_dfy; m_dfx += m_ddfx; m_dfy += m_ddfy; *x = m_fx; *y = m_fy; --m_step; return path_cmd_line_to; } //------------------------------------------------------------------------ void curve3_div::init(double x1, double y1, double x2, double y2, double x3, double y3) { m_points.remove_all(); m_distance_tolerance_square = 0.5 / m_approximation_scale; m_distance_tolerance_square *= m_distance_tolerance_square; bezier(x1, y1, x2, y2, x3, y3); m_count = 0; } //------------------------------------------------------------------------ void curve3_div::recursive_bezier(double x1, double y1, double x2, double y2, double x3, double y3, unsigned level) { if(level > curve_recursion_limit) { return; } // Calculate all the mid-points of the line segments //---------------------- double x12 = (x1 + x2) / 2; double y12 = (y1 + y2) / 2; double x23 = (x2 + x3) / 2; double y23 = (y2 + y3) / 2; double x123 = (x12 + x23) / 2; double y123 = (y12 + y23) / 2; double dx = x3-x1; double dy = y3-y1; double d = std::fabs(((x2 - x3) * dy - (y2 - y3) * dx)); double da; if(d > curve_collinearity_epsilon) { // Regular case //----------------- if(d * d <= m_distance_tolerance_square * (dx*dx + dy*dy)) { // If the curvature doesn't exceed the distance_tolerance value // we tend to finish subdivisions. //---------------------- if(m_angle_tolerance < curve_angle_tolerance_epsilon) { m_points.add(point_d(x123, y123)); return; } // Angle & Cusp Condition //---------------------- da = std::fabs(std::atan2(y3 - y2, x3 - x2) - std::atan2(y2 - y1, x2 - x1)); if(da >= pi) da = 2*pi - da; if(da < m_angle_tolerance) { // Finally we can stop the recursion //---------------------- m_points.add(point_d(x123, y123)); return; } } } else { // Collinear case //------------------ da = dx*dx + dy*dy; if(da == 0) { d = calc_sq_distance(x1, y1, x2, y2); } else { d = ((x2 - x1)*dx + (y2 - y1)*dy) / da; if(d > 0 && d < 1) { // Simple collinear case, 1---2---3 // We can leave just two endpoints return; } if(d <= 0) d = calc_sq_distance(x2, y2, x1, y1); else if(d >= 1) d = calc_sq_distance(x2, y2, x3, y3); else d = calc_sq_distance(x2, y2, x1 + d*dx, y1 + d*dy); } if(d < m_distance_tolerance_square) { m_points.add(point_d(x2, y2)); return; } } // Continue subdivision //---------------------- recursive_bezier(x1, y1, x12, y12, x123, y123, level + 1); recursive_bezier(x123, y123, x23, y23, x3, y3, level + 1); } //------------------------------------------------------------------------ void curve3_div::bezier(double x1, double y1, double x2, double y2, double x3, double y3) { m_points.add(point_d(x1, y1)); recursive_bezier(x1, y1, x2, y2, x3, y3, 0); m_points.add(point_d(x3, y3)); } //------------------------------------------------------------------------ void curve4_inc::approximation_scale(double s) { m_scale = s; } //------------------------------------------------------------------------ double curve4_inc::approximation_scale() const { return m_scale; } #if defined(_MSC_VER) && _MSC_VER <= 1200 //------------------------------------------------------------------------ static double MSC60_fix_ICE(double v) { return v; } #endif //------------------------------------------------------------------------ void curve4_inc::init(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { m_start_x = x1; m_start_y = y1; m_end_x = x4; m_end_y = y4; double dx1 = x2 - x1; double dy1 = y2 - y1; double dx2 = x3 - x2; double dy2 = y3 - y2; double dx3 = x4 - x3; double dy3 = y4 - y3; double len = (sqrt(dx1 * dx1 + dy1 * dy1) + sqrt(dx2 * dx2 + dy2 * dy2) + sqrt(dx3 * dx3 + dy3 * dy3)) * 0.25 * m_scale; #if defined(_MSC_VER) && _MSC_VER <= 1200 m_num_steps = uround(MSC60_fix_ICE(len)); #else m_num_steps = uround(len); #endif if(m_num_steps < 4) { m_num_steps = 4; } double subdivide_step = 1.0 / m_num_steps; double subdivide_step2 = subdivide_step * subdivide_step; double subdivide_step3 = subdivide_step * subdivide_step * subdivide_step; double pre1 = 3.0 * subdivide_step; double pre2 = 3.0 * subdivide_step2; double pre4 = 6.0 * subdivide_step2; double pre5 = 6.0 * subdivide_step3; double tmp1x = x1 - x2 * 2.0 + x3; double tmp1y = y1 - y2 * 2.0 + y3; double tmp2x = (x2 - x3) * 3.0 - x1 + x4; double tmp2y = (y2 - y3) * 3.0 - y1 + y4; m_saved_fx = m_fx = x1; m_saved_fy = m_fy = y1; m_saved_dfx = m_dfx = (x2 - x1) * pre1 + tmp1x * pre2 + tmp2x * subdivide_step3; m_saved_dfy = m_dfy = (y2 - y1) * pre1 + tmp1y * pre2 + tmp2y * subdivide_step3; m_saved_ddfx = m_ddfx = tmp1x * pre4 + tmp2x * pre5; m_saved_ddfy = m_ddfy = tmp1y * pre4 + tmp2y * pre5; m_dddfx = tmp2x * pre5; m_dddfy = tmp2y * pre5; m_step = m_num_steps; } //------------------------------------------------------------------------ void curve4_inc::rewind(unsigned) { if(m_num_steps == 0) { m_step = -1; return; } m_step = m_num_steps; m_fx = m_saved_fx; m_fy = m_saved_fy; m_dfx = m_saved_dfx; m_dfy = m_saved_dfy; m_ddfx = m_saved_ddfx; m_ddfy = m_saved_ddfy; } //------------------------------------------------------------------------ unsigned curve4_inc::vertex(double* x, double* y) { if(m_step < 0) return path_cmd_stop; if(m_step == m_num_steps) { *x = m_start_x; *y = m_start_y; --m_step; return path_cmd_move_to; } if(m_step == 0) { *x = m_end_x; *y = m_end_y; --m_step; return path_cmd_line_to; } m_fx += m_dfx; m_fy += m_dfy; m_dfx += m_ddfx; m_dfy += m_ddfy; m_ddfx += m_dddfx; m_ddfy += m_dddfy; *x = m_fx; *y = m_fy; --m_step; return path_cmd_line_to; } //------------------------------------------------------------------------ void curve4_div::init(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { m_points.remove_all(); m_distance_tolerance_square = 0.5 / m_approximation_scale; m_distance_tolerance_square *= m_distance_tolerance_square; bezier(x1, y1, x2, y2, x3, y3, x4, y4); m_count = 0; } //------------------------------------------------------------------------ void curve4_div::recursive_bezier(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, unsigned level) { if(level > curve_recursion_limit) { return; } // Calculate all the mid-points of the line segments //---------------------- double x12 = (x1 + x2) / 2; double y12 = (y1 + y2) / 2; double x23 = (x2 + x3) / 2; double y23 = (y2 + y3) / 2; double x34 = (x3 + x4) / 2; double y34 = (y3 + y4) / 2; double x123 = (x12 + x23) / 2; double y123 = (y12 + y23) / 2; double x234 = (x23 + x34) / 2; double y234 = (y23 + y34) / 2; double x1234 = (x123 + x234) / 2; double y1234 = (y123 + y234) / 2; // Try to approximate the full cubic curve by a single straight line //------------------ double dx = x4-x1; double dy = y4-y1; double d2 = std::fabs(((x2 - x4) * dy - (y2 - y4) * dx)); double d3 = std::fabs(((x3 - x4) * dy - (y3 - y4) * dx)); double da1, da2, k; switch((int(d2 > curve_collinearity_epsilon) << 1) + int(d3 > curve_collinearity_epsilon)) { case 0: // All collinear OR p1==p4 //---------------------- k = dx*dx + dy*dy; if(k == 0) { d2 = calc_sq_distance(x1, y1, x2, y2); d3 = calc_sq_distance(x4, y4, x3, y3); } else { k = 1 / k; da1 = x2 - x1; da2 = y2 - y1; d2 = k * (da1*dx + da2*dy); da1 = x3 - x1; da2 = y3 - y1; d3 = k * (da1*dx + da2*dy); if(d2 > 0 && d2 < 1 && d3 > 0 && d3 < 1) { // Simple collinear case, 1---2---3---4 // We can leave just two endpoints return; } if(d2 <= 0) d2 = calc_sq_distance(x2, y2, x1, y1); else if(d2 >= 1) d2 = calc_sq_distance(x2, y2, x4, y4); else d2 = calc_sq_distance(x2, y2, x1 + d2*dx, y1 + d2*dy); if(d3 <= 0) d3 = calc_sq_distance(x3, y3, x1, y1); else if(d3 >= 1) d3 = calc_sq_distance(x3, y3, x4, y4); else d3 = calc_sq_distance(x3, y3, x1 + d3*dx, y1 + d3*dy); } if(d2 > d3) { if(d2 < m_distance_tolerance_square) { m_points.add(point_d(x2, y2)); return; } } else { if(d3 < m_distance_tolerance_square) { m_points.add(point_d(x3, y3)); return; } } break; case 1: // p1,p2,p4 are collinear, p3 is significant //---------------------- if(d3 * d3 <= m_distance_tolerance_square * (dx*dx + dy*dy)) { if(m_angle_tolerance < curve_angle_tolerance_epsilon) { m_points.add(point_d(x23, y23)); return; } // Angle Condition //---------------------- da1 = std::fabs(std::atan2(y4 - y3, x4 - x3) - std::atan2(y3 - y2, x3 - x2)); if(da1 >= pi) da1 = 2*pi - da1; if(da1 < m_angle_tolerance) { m_points.add(point_d(x2, y2)); m_points.add(point_d(x3, y3)); return; } if(m_cusp_limit != 0.0) { if(da1 > m_cusp_limit) { m_points.add(point_d(x3, y3)); return; } } } break; case 2: // p1,p3,p4 are collinear, p2 is significant //---------------------- if(d2 * d2 <= m_distance_tolerance_square * (dx*dx + dy*dy)) { if(m_angle_tolerance < curve_angle_tolerance_epsilon) { m_points.add(point_d(x23, y23)); return; } // Angle Condition //---------------------- da1 = std::fabs(std::atan2(y3 - y2, x3 - x2) - std::atan2(y2 - y1, x2 - x1)); if(da1 >= pi) da1 = 2*pi - da1; if(da1 < m_angle_tolerance) { m_points.add(point_d(x2, y2)); m_points.add(point_d(x3, y3)); return; } if(m_cusp_limit != 0.0) { if(da1 > m_cusp_limit) { m_points.add(point_d(x2, y2)); return; } } } break; case 3: // Regular case //----------------- if((d2 + d3)*(d2 + d3) <= m_distance_tolerance_square * (dx*dx + dy*dy)) { // If the curvature doesn't exceed the distance_tolerance value // we tend to finish subdivisions. //---------------------- if(m_angle_tolerance < curve_angle_tolerance_epsilon) { m_points.add(point_d(x23, y23)); return; } // Angle & Cusp Condition //---------------------- k = std::atan2(y3 - y2, x3 - x2); da1 = std::fabs(k - std::atan2(y2 - y1, x2 - x1)); da2 = std::fabs(std::atan2(y4 - y3, x4 - x3) - k); if(da1 >= pi) da1 = 2*pi - da1; if(da2 >= pi) da2 = 2*pi - da2; if(da1 + da2 < m_angle_tolerance) { // Finally we can stop the recursion //---------------------- m_points.add(point_d(x23, y23)); return; } if(m_cusp_limit != 0.0) { if(da1 > m_cusp_limit) { m_points.add(point_d(x2, y2)); return; } if(da2 > m_cusp_limit) { m_points.add(point_d(x3, y3)); return; } } } break; } // Continue subdivision //---------------------- recursive_bezier(x1, y1, x12, y12, x123, y123, x1234, y1234, level + 1); recursive_bezier(x1234, y1234, x234, y234, x34, y34, x4, y4, level + 1); } //------------------------------------------------------------------------ void curve4_div::bezier(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { m_points.add(point_d(x1, y1)); recursive_bezier(x1, y1, x2, y2, x3, y3, x4, y4, 0); m_points.add(point_d(x4, y4)); } } mapnik-3.0.9/deps/agg/src/agg_embedded_raster_fonts.cpp000066400000000000000000013125541262555547000231540ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include "agg_embedded_raster_fonts.h" namespace agg { const int8u gse4x6[] = { 6, 0, 32, 128-32, 0x00,0x00,0x07,0x00,0x0e,0x00,0x15,0x00,0x1c,0x00,0x23,0x00,0x2a,0x00,0x31,0x00,0x38,0x00, 0x3f,0x00,0x46,0x00,0x4d,0x00,0x54,0x00,0x5b,0x00,0x62,0x00,0x69,0x00,0x70,0x00,0x77,0x00, 0x7e,0x00,0x85,0x00,0x8c,0x00,0x93,0x00,0x9a,0x00,0xa1,0x00,0xa8,0x00,0xaf,0x00,0xb6,0x00, 0xbd,0x00,0xc4,0x00,0xcb,0x00,0xd2,0x00,0xd9,0x00,0xe0,0x00,0xe7,0x00,0xee,0x00,0xf5,0x00, 0xfc,0x00,0x03,0x01,0x0a,0x01,0x11,0x01,0x18,0x01,0x1f,0x01,0x26,0x01,0x2d,0x01,0x34,0x01, 0x3b,0x01,0x42,0x01,0x49,0x01,0x50,0x01,0x57,0x01,0x5e,0x01,0x65,0x01,0x6c,0x01,0x73,0x01, 0x7a,0x01,0x81,0x01,0x88,0x01,0x8f,0x01,0x96,0x01,0x9d,0x01,0xa4,0x01,0xab,0x01,0xb2,0x01, 0xb9,0x01,0xc0,0x01,0xc7,0x01,0xce,0x01,0xd5,0x01,0xdc,0x01,0xe3,0x01,0xea,0x01,0xf1,0x01, 0xf8,0x01,0xff,0x01,0x06,0x02,0x0d,0x02,0x14,0x02,0x1b,0x02,0x22,0x02,0x29,0x02,0x30,0x02, 0x37,0x02,0x3e,0x02,0x45,0x02,0x4c,0x02,0x53,0x02,0x5a,0x02,0x61,0x02,0x68,0x02,0x6f,0x02, 0x76,0x02,0x7d,0x02,0x84,0x02,0x8b,0x02,0x92,0x02,0x99,0x02, 4, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x21 '!' 0x40,0x40,0x40,0x00,0x40,0x00, 4, // 0x22 '"' 0xa0,0xa0,0x00,0x00,0x00,0x00, 4, // 0x23 '#' 0x60,0xf0,0x60,0xf0,0x60,0x00, 4, // 0x24 '$' 0x40,0x60,0xc0,0x60,0xc0,0x40, 4, // 0x25 '%' 0xa0,0x20,0x40,0x80,0xa0,0x00, 4, // 0x26 '&' 0xe0,0xa0,0x50,0xa0,0xd0,0x00, 4, // 0x27 ''' 0x40,0x40,0x00,0x00,0x00,0x00, 4, // 0x28 '(' 0x20,0x40,0x40,0x40,0x20,0x00, 4, // 0x29 ')' 0x40,0x20,0x20,0x20,0x40,0x00, 4, // 0x2a '*' 0xa0,0x40,0xe0,0x40,0xa0,0x00, 4, // 0x2b '+' 0x40,0x40,0xe0,0x40,0x40,0x00, 4, // 0x2c ',' 0x00,0x00,0x00,0x40,0x40,0x80, 4, // 0x2d '-' 0x00,0x00,0xe0,0x00,0x00,0x00, 4, // 0x2e '.' 0x00,0x00,0x00,0x00,0x40,0x00, 4, // 0x2f '/' 0x10,0x20,0x20,0x40,0x40,0x80, 4, // 0x30 '0' 0xe0,0xa0,0xa0,0xa0,0xe0,0x00, 4, // 0x31 '1' 0x40,0xc0,0x40,0x40,0xe0,0x00, 4, // 0x32 '2' 0xe0,0xa0,0x20,0x40,0xe0,0x00, 4, // 0x33 '3' 0xe0,0x20,0x40,0x20,0xe0,0x00, 4, // 0x34 '4' 0xa0,0xa0,0xe0,0x20,0x20,0x00, 4, // 0x35 '5' 0xe0,0x80,0xc0,0x20,0xc0,0x00, 4, // 0x36 '6' 0x40,0x80,0xe0,0xa0,0xe0,0x00, 4, // 0x37 '7' 0xe0,0xa0,0x20,0x40,0x40,0x00, 4, // 0x38 '8' 0xe0,0xa0,0x40,0xa0,0xe0,0x00, 4, // 0x39 '9' 0xe0,0xa0,0xe0,0x20,0xc0,0x00, 4, // 0x3a ':' 0x00,0x40,0x00,0x40,0x00,0x00, 4, // 0x3b ';' 0x00,0x40,0x00,0x40,0x40,0x80, 4, // 0x3c '<' 0x20,0x40,0x80,0x40,0x20,0x00, 4, // 0x3d '=' 0x00,0xe0,0x00,0xe0,0x00,0x00, 4, // 0x3e '>' 0x80,0x40,0x20,0x40,0x80,0x00, 4, // 0x3f '?' 0xc0,0x20,0x40,0x00,0x40,0x00, 4, // 0x40 '@' 0x40,0xa0,0xe0,0xe0,0x80,0x60, 4, // 0x41 'A' 0x40,0xa0,0xe0,0xa0,0xa0,0x00, 4, // 0x42 'B' 0xc0,0xa0,0xc0,0xa0,0xc0,0x00, 4, // 0x43 'C' 0x60,0x80,0x80,0x80,0x60,0x00, 4, // 0x44 'D' 0xc0,0xa0,0xa0,0xa0,0xc0,0x00, 4, // 0x45 'E' 0xe0,0x80,0xc0,0x80,0xe0,0x00, 4, // 0x46 'F' 0xe0,0x80,0xc0,0x80,0x80,0x00, 4, // 0x47 'G' 0x60,0x80,0xa0,0xa0,0x40,0x00, 4, // 0x48 'H' 0xa0,0xa0,0xe0,0xa0,0xa0,0x00, 4, // 0x49 'I' 0xe0,0x40,0x40,0x40,0xe0,0x00, 4, // 0x4a 'J' 0x20,0x20,0x20,0x20,0xa0,0x40, 4, // 0x4b 'K' 0xa0,0xa0,0xc0,0xc0,0xa0,0x00, 4, // 0x4c 'L' 0x80,0x80,0x80,0x80,0xe0,0x00, 4, // 0x4d 'M' 0xa0,0xe0,0xa0,0xa0,0xa0,0x00, 4, // 0x4e 'N' 0x90,0xd0,0xb0,0x90,0x90,0x00, 4, // 0x4f 'O' 0x40,0xa0,0xa0,0xa0,0x40,0x00, 4, // 0x50 'P' 0xc0,0xa0,0xa0,0xc0,0x80,0x00, 4, // 0x51 'Q' 0x40,0xa0,0xa0,0xa0,0x60,0x00, 4, // 0x52 'R' 0xc0,0xa0,0xa0,0xc0,0xa0,0x00, 4, // 0x53 'S' 0x60,0x80,0x40,0x20,0xc0,0x00, 4, // 0x54 'T' 0xe0,0x40,0x40,0x40,0x40,0x00, 4, // 0x55 'U' 0xa0,0xa0,0xa0,0xa0,0xe0,0x00, 4, // 0x56 'V' 0xa0,0xa0,0xa0,0xa0,0x40,0x00, 4, // 0x57 'W' 0xa0,0xa0,0xa0,0xe0,0xa0,0x00, 4, // 0x58 'X' 0xa0,0xa0,0x40,0xa0,0xa0,0x00, 4, // 0x59 'Y' 0xa0,0xa0,0x40,0x40,0x40,0x00, 4, // 0x5a 'Z' 0xe0,0x20,0x40,0x80,0xe0,0x00, 4, // 0x5b '[' 0xc0,0x80,0x80,0x80,0xc0,0x00, 4, // 0x5c '\' 0x80,0x40,0x40,0x20,0x20,0x10, 4, // 0x5d ']' 0xc0,0x40,0x40,0x40,0xc0,0x00, 4, // 0x5e '^' 0x40,0xa0,0x00,0x00,0x00,0x00, 4, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0xf0, 4, // 0x60 '`' 0x40,0x20,0x00,0x00,0x00,0x00, 4, // 0x61 'a' 0x00,0x60,0xa0,0xa0,0x70,0x00, 4, // 0x62 'b' 0x80,0x80,0xc0,0xa0,0xc0,0x00, 4, // 0x63 'c' 0x00,0x60,0x80,0x80,0x60,0x00, 4, // 0x64 'd' 0x20,0x20,0x60,0xa0,0x60,0x00, 4, // 0x65 'e' 0x00,0x40,0xe0,0x80,0x60,0x00, 4, // 0x66 'f' 0x20,0x40,0xe0,0x40,0x40,0x00, 4, // 0x67 'g' 0x00,0x60,0xa0,0x60,0x20,0xc0, 4, // 0x68 'h' 0x80,0x80,0xc0,0xa0,0xa0,0x00, 4, // 0x69 'i' 0x40,0x00,0xc0,0x40,0xe0,0x00, 4, // 0x6a 'j' 0x40,0x00,0xc0,0x40,0x40,0x80, 4, // 0x6b 'k' 0x80,0x80,0xa0,0xc0,0xa0,0x00, 4, // 0x6c 'l' 0xc0,0x40,0x40,0x40,0xe0,0x00, 4, // 0x6d 'm' 0x00,0xa0,0xf0,0xf0,0x90,0x00, 4, // 0x6e 'n' 0x00,0xc0,0xa0,0xa0,0xa0,0x00, 4, // 0x6f 'o' 0x00,0x40,0xa0,0xa0,0x40,0x00, 4, // 0x70 'p' 0x00,0xc0,0xa0,0xc0,0x80,0x80, 4, // 0x71 'q' 0x00,0x60,0xa0,0x60,0x20,0x20, 4, // 0x72 'r' 0x00,0xa0,0x50,0x40,0x40,0x00, 4, // 0x73 's' 0x00,0x60,0xc0,0x20,0xc0,0x00, 4, // 0x74 't' 0x40,0x40,0xe0,0x40,0x60,0x00, 4, // 0x75 'u' 0x00,0xa0,0xa0,0xa0,0x60,0x00, 4, // 0x76 'v' 0x00,0xa0,0xa0,0xa0,0x40,0x00, 4, // 0x77 'w' 0x00,0xa0,0xa0,0xe0,0xa0,0x00, 4, // 0x78 'x' 0x00,0xa0,0x40,0xa0,0xa0,0x00, 4, // 0x79 'y' 0x00,0xa0,0xa0,0x60,0x20,0xc0, 4, // 0x7a 'z' 0x00,0xe0,0x40,0x80,0xe0,0x00, 4, // 0x7b '{' 0x30,0x20,0xc0,0x20,0x30,0x00, 4, // 0x7c '|' 0x40,0x40,0x00,0x40,0x40,0x40, 4, // 0x7d '}' 0xc0,0x40,0x30,0x40,0xc0,0x00, 4, // 0x7e '~' 0x50,0xa0,0x00,0x00,0x00,0x00, 4, // 0x7f '' 0x00,0x60,0x90,0xf0,0x00,0x00, 0 }; const int8u gse4x8[] = { 8, 0, 32, 128-32, 0x00,0x00,0x09,0x00,0x12,0x00,0x1b,0x00,0x24,0x00,0x2d,0x00,0x36,0x00,0x3f,0x00,0x48,0x00, 0x51,0x00,0x5a,0x00,0x63,0x00,0x6c,0x00,0x75,0x00,0x7e,0x00,0x87,0x00,0x90,0x00,0x99,0x00, 0xa2,0x00,0xab,0x00,0xb4,0x00,0xbd,0x00,0xc6,0x00,0xcf,0x00,0xd8,0x00,0xe1,0x00,0xea,0x00, 0xf3,0x00,0xfc,0x00,0x05,0x01,0x0e,0x01,0x17,0x01,0x20,0x01,0x29,0x01,0x32,0x01,0x3b,0x01, 0x44,0x01,0x4d,0x01,0x56,0x01,0x5f,0x01,0x68,0x01,0x71,0x01,0x7a,0x01,0x83,0x01,0x8c,0x01, 0x95,0x01,0x9e,0x01,0xa7,0x01,0xb0,0x01,0xb9,0x01,0xc2,0x01,0xcb,0x01,0xd4,0x01,0xdd,0x01, 0xe6,0x01,0xef,0x01,0xf8,0x01,0x01,0x02,0x0a,0x02,0x13,0x02,0x1c,0x02,0x25,0x02,0x2e,0x02, 0x37,0x02,0x40,0x02,0x49,0x02,0x52,0x02,0x5b,0x02,0x64,0x02,0x6d,0x02,0x76,0x02,0x7f,0x02, 0x88,0x02,0x91,0x02,0x9a,0x02,0xa3,0x02,0xac,0x02,0xb5,0x02,0xbe,0x02,0xc7,0x02,0xd0,0x02, 0xd9,0x02,0xe2,0x02,0xeb,0x02,0xf4,0x02,0xfd,0x02,0x06,0x03,0x0f,0x03,0x18,0x03,0x21,0x03, 0x2a,0x03,0x33,0x03,0x3c,0x03,0x45,0x03,0x4e,0x03,0x57,0x03, 4, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x21 '!' 0x00,0x40,0x40,0x40,0x40,0x00,0x40,0x00, 4, // 0x22 '"' 0x00,0xa0,0xa0,0x00,0x00,0x00,0x00,0x00, 4, // 0x23 '#' 0x60,0x60,0xf0,0x60,0x60,0xf0,0x60,0x60, 4, // 0x24 '$' 0x40,0x60,0xc0,0xc0,0x60,0x60,0xc0,0x40, 4, // 0x25 '%' 0x00,0xa0,0x20,0x40,0x40,0x80,0xa0,0x00, 4, // 0x26 '&' 0x00,0x40,0xa0,0xa0,0x40,0xb0,0xa0,0x70, 4, // 0x27 ''' 0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00, 4, // 0x28 '(' 0x20,0x40,0x80,0x80,0x80,0x80,0x40,0x20, 4, // 0x29 ')' 0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80, 4, // 0x2a '*' 0x00,0xa0,0x40,0xe0,0x40,0xa0,0x00,0x00, 4, // 0x2b '+' 0x00,0x40,0x40,0xe0,0x40,0x40,0x00,0x00, 4, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80, 4, // 0x2d '-' 0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00, 4, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00, 4, // 0x2f '/' 0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80, 4, // 0x30 '0' 0x00,0xe0,0xa0,0xa0,0xa0,0xa0,0xe0,0x00, 4, // 0x31 '1' 0x00,0x40,0xc0,0x40,0x40,0x40,0xe0,0x00, 4, // 0x32 '2' 0x00,0xe0,0xa0,0x20,0x40,0x80,0xe0,0x00, 4, // 0x33 '3' 0x00,0xe0,0x20,0x40,0x20,0x20,0xe0,0x00, 4, // 0x34 '4' 0x00,0x60,0xa0,0xa0,0xf0,0x20,0x20,0x00, 4, // 0x35 '5' 0x00,0xe0,0x80,0xc0,0x20,0x20,0xc0,0x00, 4, // 0x36 '6' 0x00,0x40,0x80,0xe0,0xa0,0xa0,0xe0,0x00, 4, // 0x37 '7' 0x00,0xe0,0xa0,0x20,0x40,0x40,0x40,0x00, 4, // 0x38 '8' 0x00,0xe0,0xa0,0x40,0xa0,0xa0,0xe0,0x00, 4, // 0x39 '9' 0x00,0xe0,0xa0,0xe0,0x20,0x20,0x40,0x00, 4, // 0x3a ':' 0x00,0x00,0x40,0x00,0x00,0x40,0x00,0x00, 4, // 0x3b ';' 0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x80, 4, // 0x3c '<' 0x00,0x20,0x40,0x80,0x40,0x20,0x00,0x00, 4, // 0x3d '=' 0x00,0x00,0xe0,0x00,0xe0,0x00,0x00,0x00, 4, // 0x3e '>' 0x00,0x80,0x40,0x20,0x40,0x80,0x00,0x00, 4, // 0x3f '?' 0x00,0x40,0xa0,0x20,0x40,0x00,0x40,0x00, 4, // 0x40 '@' 0x00,0x40,0xa0,0xe0,0xe0,0x80,0x60,0x00, 4, // 0x41 'A' 0x00,0x40,0xa0,0xa0,0xe0,0xa0,0xa0,0x00, 4, // 0x42 'B' 0x00,0xc0,0xa0,0xc0,0xa0,0xa0,0xc0,0x00, 4, // 0x43 'C' 0x00,0x40,0xa0,0x80,0x80,0xa0,0x40,0x00, 4, // 0x44 'D' 0x00,0xc0,0xa0,0xa0,0xa0,0xa0,0xc0,0x00, 4, // 0x45 'E' 0x00,0xe0,0x80,0xc0,0x80,0x80,0xe0,0x00, 4, // 0x46 'F' 0x00,0xe0,0x80,0xc0,0x80,0x80,0x80,0x00, 4, // 0x47 'G' 0x00,0x60,0x80,0xa0,0xa0,0xa0,0x40,0x00, 4, // 0x48 'H' 0x00,0xa0,0xa0,0xe0,0xa0,0xa0,0xa0,0x00, 4, // 0x49 'I' 0x00,0xe0,0x40,0x40,0x40,0x40,0xe0,0x00, 4, // 0x4a 'J' 0x00,0x20,0x20,0x20,0x20,0xa0,0x40,0x00, 4, // 0x4b 'K' 0x00,0xa0,0xa0,0xc0,0xc0,0xa0,0xa0,0x00, 4, // 0x4c 'L' 0x00,0x80,0x80,0x80,0x80,0x80,0xe0,0x00, 4, // 0x4d 'M' 0x00,0xa0,0xe0,0xa0,0xa0,0xa0,0xa0,0x00, 4, // 0x4e 'N' 0x00,0x90,0x90,0xd0,0xb0,0x90,0x90,0x00, 4, // 0x4f 'O' 0x00,0x40,0xa0,0xa0,0xa0,0xa0,0x40,0x00, 4, // 0x50 'P' 0x00,0xc0,0xa0,0xa0,0xc0,0x80,0x80,0x00, 4, // 0x51 'Q' 0x00,0x40,0xa0,0xa0,0xa0,0xa0,0x60,0x00, 4, // 0x52 'R' 0x00,0xc0,0xa0,0xa0,0xc0,0xc0,0xa0,0x00, 4, // 0x53 'S' 0x00,0x60,0x80,0x40,0x20,0x20,0xc0,0x00, 4, // 0x54 'T' 0x00,0xe0,0x40,0x40,0x40,0x40,0x40,0x00, 4, // 0x55 'U' 0x00,0xa0,0xa0,0xa0,0xa0,0xa0,0x40,0x00, 4, // 0x56 'V' 0x00,0xa0,0xa0,0xa0,0xa0,0x40,0x40,0x00, 4, // 0x57 'W' 0x00,0xa0,0xa0,0xa0,0xa0,0xe0,0xa0,0x00, 4, // 0x58 'X' 0x00,0xa0,0xa0,0x40,0xa0,0xa0,0xa0,0x00, 4, // 0x59 'Y' 0x00,0xa0,0xa0,0x40,0x40,0x40,0x40,0x00, 4, // 0x5a 'Z' 0x00,0xe0,0x20,0x40,0x40,0x80,0xe0,0x00, 4, // 0x5b '[' 0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0xc0, 4, // 0x5c '\' 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10, 4, // 0x5d ']' 0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0xc0, 4, // 0x5e '^' 0x00,0x40,0xa0,0x00,0x00,0x00,0x00,0x00, 4, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, 4, // 0x60 '`' 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00, 4, // 0x61 'a' 0x00,0x00,0x60,0xa0,0xa0,0xa0,0x70,0x00, 4, // 0x62 'b' 0x00,0x80,0x80,0xc0,0xa0,0xa0,0xc0,0x00, 4, // 0x63 'c' 0x00,0x00,0x40,0xa0,0x80,0xa0,0x40,0x00, 4, // 0x64 'd' 0x00,0x20,0x20,0x60,0xa0,0xa0,0x60,0x00, 4, // 0x65 'e' 0x00,0x00,0x40,0xa0,0xe0,0x80,0x60,0x00, 4, // 0x66 'f' 0x00,0x20,0x40,0x40,0xe0,0x40,0x40,0x00, 4, // 0x67 'g' 0x00,0x00,0x60,0xa0,0xa0,0x60,0x20,0xc0, 4, // 0x68 'h' 0x00,0x80,0x80,0xc0,0xa0,0xa0,0xa0,0x00, 4, // 0x69 'i' 0x00,0x40,0x00,0xc0,0x40,0x40,0xe0,0x00, 4, // 0x6a 'j' 0x00,0x40,0x00,0xc0,0x40,0x40,0x40,0x80, 4, // 0x6b 'k' 0x00,0x80,0x80,0xa0,0xc0,0xc0,0xa0,0x00, 4, // 0x6c 'l' 0x00,0xc0,0x40,0x40,0x40,0x40,0xe0,0x00, 4, // 0x6d 'm' 0x00,0x00,0xa0,0xf0,0xf0,0xf0,0x90,0x00, 4, // 0x6e 'n' 0x00,0x00,0xc0,0xa0,0xa0,0xa0,0xa0,0x00, 4, // 0x6f 'o' 0x00,0x00,0x40,0xa0,0xa0,0xa0,0x40,0x00, 4, // 0x70 'p' 0x00,0x00,0xc0,0xa0,0xa0,0xc0,0x80,0x80, 4, // 0x71 'q' 0x00,0x00,0x60,0xa0,0xa0,0x60,0x20,0x20, 4, // 0x72 'r' 0x00,0x00,0xa0,0x50,0x40,0x40,0x40,0x00, 4, // 0x73 's' 0x00,0x00,0x60,0x80,0x40,0x20,0xc0,0x00, 4, // 0x74 't' 0x00,0x40,0x40,0xe0,0x40,0x40,0x20,0x00, 4, // 0x75 'u' 0x00,0x00,0xa0,0xa0,0xa0,0xa0,0x60,0x00, 4, // 0x76 'v' 0x00,0x00,0xa0,0xa0,0xa0,0x40,0x40,0x00, 4, // 0x77 'w' 0x00,0x00,0xa0,0xa0,0xa0,0xe0,0xa0,0x00, 4, // 0x78 'x' 0x00,0x00,0xa0,0xa0,0x40,0xa0,0xa0,0x00, 4, // 0x79 'y' 0x00,0x00,0xa0,0xa0,0xa0,0x60,0x20,0xc0, 4, // 0x7a 'z' 0x00,0x00,0xe0,0x20,0x40,0x80,0xe0,0x00, 4, // 0x7b '{' 0x10,0x20,0x20,0xc0,0x20,0x20,0x10,0x00, 4, // 0x7c '|' 0x00,0x40,0x40,0x40,0x00,0x40,0x40,0x40, 4, // 0x7d '}' 0x80,0x40,0x40,0x30,0x40,0x40,0x80,0x00, 4, // 0x7e '~' 0x00,0x50,0xa0,0x00,0x00,0x00,0x00,0x00, 4, // 0x7f '' 0x00,0x00,0x00,0x60,0x90,0xf0,0x00,0x00, 0 }; const int8u gse5x7[] = { 7, 0, 32, 128-32, 0x00,0x00,0x08,0x00,0x10,0x00,0x18,0x00,0x20,0x00,0x28,0x00,0x30,0x00,0x38,0x00,0x40,0x00, 0x48,0x00,0x50,0x00,0x58,0x00,0x60,0x00,0x68,0x00,0x70,0x00,0x78,0x00,0x80,0x00,0x88,0x00, 0x90,0x00,0x98,0x00,0xa0,0x00,0xa8,0x00,0xb0,0x00,0xb8,0x00,0xc0,0x00,0xc8,0x00,0xd0,0x00, 0xd8,0x00,0xe0,0x00,0xe8,0x00,0xf0,0x00,0xf8,0x00,0x00,0x01,0x08,0x01,0x10,0x01,0x18,0x01, 0x20,0x01,0x28,0x01,0x30,0x01,0x38,0x01,0x40,0x01,0x48,0x01,0x50,0x01,0x58,0x01,0x60,0x01, 0x68,0x01,0x70,0x01,0x78,0x01,0x80,0x01,0x88,0x01,0x90,0x01,0x98,0x01,0xa0,0x01,0xa8,0x01, 0xb0,0x01,0xb8,0x01,0xc0,0x01,0xc8,0x01,0xd0,0x01,0xd8,0x01,0xe0,0x01,0xe8,0x01,0xf0,0x01, 0xf8,0x01,0x00,0x02,0x08,0x02,0x10,0x02,0x18,0x02,0x20,0x02,0x28,0x02,0x30,0x02,0x38,0x02, 0x40,0x02,0x48,0x02,0x50,0x02,0x58,0x02,0x60,0x02,0x68,0x02,0x70,0x02,0x78,0x02,0x80,0x02, 0x88,0x02,0x90,0x02,0x98,0x02,0xa0,0x02,0xa8,0x02,0xb0,0x02,0xb8,0x02,0xc0,0x02,0xc8,0x02, 0xd0,0x02,0xd8,0x02,0xe0,0x02,0xe8,0x02,0xf0,0x02,0xf8,0x02, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x21 '!' 0x00,0x20,0x20,0x20,0x00,0x20,0x00, 5, // 0x22 '"' 0x00,0x50,0x50,0x00,0x00,0x00,0x00, 5, // 0x23 '#' 0x00,0x50,0xf8,0x50,0xf8,0x50,0x00, 5, // 0x24 '$' 0x20,0x78,0xa0,0x70,0x28,0xf0,0x20, 5, // 0x25 '%' 0x00,0x88,0x10,0x20,0x40,0x88,0x00, 5, // 0x26 '&' 0x00,0x40,0xa0,0x68,0x90,0x68,0x00, 5, // 0x27 ''' 0x00,0x20,0x20,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x10,0x20,0x40,0x40,0x40,0x20,0x10, 5, // 0x29 ')' 0x80,0x40,0x20,0x20,0x20,0x40,0x80, 5, // 0x2a '*' 0x00,0x20,0xa8,0x70,0xa8,0x20,0x00, 5, // 0x2b '+' 0x00,0x20,0x20,0xf8,0x20,0x20,0x00, 5, // 0x2c ',' 0x00,0x00,0x00,0x00,0x20,0x20,0x40, 5, // 0x2d '-' 0x00,0x00,0x00,0xf0,0x00,0x00,0x00, 5, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x40,0x00, 5, // 0x2f '/' 0x00,0x08,0x10,0x20,0x40,0x80,0x00, 5, // 0x30 '0' 0x00,0x60,0x90,0x90,0x90,0x60,0x00, 5, // 0x31 '1' 0x00,0x20,0x60,0x20,0x20,0x70,0x00, 5, // 0x32 '2' 0x00,0x60,0x90,0x20,0x40,0xf0,0x00, 5, // 0x33 '3' 0x00,0xf0,0x20,0x60,0x10,0xe0,0x00, 5, // 0x34 '4' 0x00,0x30,0x50,0x90,0xf0,0x10,0x00, 5, // 0x35 '5' 0x00,0xf0,0x80,0xe0,0x10,0xe0,0x00, 5, // 0x36 '6' 0x00,0x60,0x80,0xe0,0x90,0x60,0x00, 5, // 0x37 '7' 0x00,0xf0,0x90,0x20,0x40,0x40,0x00, 5, // 0x38 '8' 0x00,0x60,0x90,0x60,0x90,0x60,0x00, 5, // 0x39 '9' 0x00,0x60,0x90,0x70,0x10,0x60,0x00, 5, // 0x3a ':' 0x00,0x00,0x20,0x00,0x20,0x00,0x00, 5, // 0x3b ';' 0x00,0x00,0x20,0x00,0x20,0x20,0x40, 5, // 0x3c '<' 0x00,0x10,0x20,0x40,0x20,0x10,0x00, 5, // 0x3d '=' 0x00,0x00,0xf0,0x00,0xf0,0x00,0x00, 5, // 0x3e '>' 0x00,0x80,0x40,0x20,0x40,0x80,0x00, 5, // 0x3f '?' 0x00,0x60,0x90,0x20,0x00,0x20,0x00, 5, // 0x40 '@' 0x00,0x60,0x90,0xb0,0x80,0x70,0x00, 5, // 0x41 'A' 0x00,0x60,0x90,0xf0,0x90,0x90,0x00, 5, // 0x42 'B' 0x00,0xe0,0x90,0xe0,0x90,0xe0,0x00, 5, // 0x43 'C' 0x00,0x60,0x90,0x80,0x90,0x60,0x00, 5, // 0x44 'D' 0x00,0xe0,0x90,0x90,0x90,0xe0,0x00, 5, // 0x45 'E' 0x00,0xf0,0x80,0xe0,0x80,0xf0,0x00, 5, // 0x46 'F' 0x00,0xf0,0x80,0xe0,0x80,0x80,0x00, 5, // 0x47 'G' 0x00,0x70,0x80,0xb0,0x90,0x60,0x00, 5, // 0x48 'H' 0x00,0x90,0x90,0xf0,0x90,0x90,0x00, 5, // 0x49 'I' 0x00,0x70,0x20,0x20,0x20,0x70,0x00, 5, // 0x4a 'J' 0x00,0x70,0x20,0x20,0xa0,0x40,0x00, 5, // 0x4b 'K' 0x00,0x90,0xa0,0xc0,0xa0,0x90,0x00, 5, // 0x4c 'L' 0x00,0x80,0x80,0x80,0x80,0xf0,0x00, 5, // 0x4d 'M' 0x00,0x90,0xf0,0x90,0x90,0x90,0x00, 5, // 0x4e 'N' 0x00,0x90,0xd0,0xb0,0x90,0x90,0x00, 5, // 0x4f 'O' 0x00,0x60,0x90,0x90,0x90,0x60,0x00, 5, // 0x50 'P' 0x00,0xe0,0x90,0xe0,0x80,0x80,0x00, 5, // 0x51 'Q' 0x00,0x60,0x90,0x90,0xa0,0x50,0x00, 5, // 0x52 'R' 0x00,0xe0,0x90,0xe0,0xa0,0x90,0x00, 5, // 0x53 'S' 0x00,0x70,0x80,0x60,0x10,0xe0,0x00, 5, // 0x54 'T' 0x00,0x70,0x20,0x20,0x20,0x20,0x00, 5, // 0x55 'U' 0x00,0x90,0x90,0x90,0x90,0x60,0x00, 5, // 0x56 'V' 0x00,0x50,0x50,0x50,0x20,0x20,0x00, 5, // 0x57 'W' 0x00,0x90,0x90,0x90,0xf0,0x90,0x00, 5, // 0x58 'X' 0x00,0x90,0x90,0x60,0x90,0x90,0x00, 5, // 0x59 'Y' 0x00,0x50,0x50,0x20,0x20,0x20,0x00, 5, // 0x5a 'Z' 0x00,0xf0,0x10,0x20,0x40,0xf0,0x00, 5, // 0x5b '[' 0x70,0x40,0x40,0x40,0x40,0x40,0x70, 5, // 0x5c '\' 0x00,0x80,0x40,0x20,0x10,0x08,0x00, 5, // 0x5d ']' 0xe0,0x20,0x20,0x20,0x20,0x20,0xe0, 5, // 0x5e '^' 0x00,0x20,0x50,0x00,0x00,0x00,0x00, 5, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0xf8,0x00, 5, // 0x60 '`' 0x00,0x40,0x20,0x00,0x00,0x00,0x00, 5, // 0x61 'a' 0x00,0x00,0x60,0xa0,0xa0,0x50,0x00, 5, // 0x62 'b' 0x00,0x80,0x80,0xe0,0x90,0xe0,0x00, 5, // 0x63 'c' 0x00,0x00,0x70,0x80,0x80,0x70,0x00, 5, // 0x64 'd' 0x00,0x10,0x10,0x70,0x90,0x70,0x00, 5, // 0x65 'e' 0x00,0x00,0x60,0xf0,0x80,0x70,0x00, 5, // 0x66 'f' 0x00,0x30,0x40,0xe0,0x40,0x40,0x00, 5, // 0x67 'g' 0x00,0x00,0x70,0x90,0x70,0x10,0x60, 5, // 0x68 'h' 0x00,0x80,0x80,0xe0,0x90,0x90,0x00, 5, // 0x69 'i' 0x20,0x00,0x60,0x20,0x20,0x70,0x00, 5, // 0x6a 'j' 0x20,0x00,0x60,0x20,0x20,0xa0,0x40, 5, // 0x6b 'k' 0x80,0x80,0x90,0xa0,0xe0,0x90,0x00, 5, // 0x6c 'l' 0x00,0x60,0x20,0x20,0x20,0x70,0x00, 5, // 0x6d 'm' 0x00,0x00,0xa0,0xf0,0xf0,0x90,0x00, 5, // 0x6e 'n' 0x00,0x00,0xa0,0xd0,0x90,0x90,0x00, 5, // 0x6f 'o' 0x00,0x00,0x60,0x90,0x90,0x60,0x00, 5, // 0x70 'p' 0x00,0x00,0xe0,0x90,0xe0,0x80,0x80, 5, // 0x71 'q' 0x00,0x00,0x70,0x90,0x70,0x10,0x10, 5, // 0x72 'r' 0x00,0x00,0xe0,0x90,0x80,0x80,0x00, 5, // 0x73 's' 0x00,0x00,0x70,0xe0,0x10,0xe0,0x00, 5, // 0x74 't' 0x40,0x40,0xe0,0x40,0x40,0x70,0x00, 5, // 0x75 'u' 0x00,0x00,0x90,0x90,0x90,0x70,0x00, 5, // 0x76 'v' 0x00,0x00,0x50,0x50,0x50,0x20,0x00, 5, // 0x77 'w' 0x00,0x00,0x90,0x90,0xf0,0x90,0x00, 5, // 0x78 'x' 0x00,0x00,0x90,0x60,0x60,0x90,0x00, 5, // 0x79 'y' 0x00,0x00,0x90,0x90,0x70,0x10,0x60, 5, // 0x7a 'z' 0x00,0x00,0xf0,0x20,0x40,0xf0,0x00, 5, // 0x7b '{' 0x10,0x20,0x20,0xc0,0x20,0x20,0x10, 5, // 0x7c '|' 0x20,0x20,0x20,0x00,0x20,0x20,0x20, 5, // 0x7d '}' 0x40,0x20,0x20,0x18,0x20,0x20,0x40, 5, // 0x7e '~' 0x00,0x40,0xa8,0x10,0x00,0x00,0x00, 5, // 0x7f '' 0x00,0x00,0x20,0x50,0x88,0xf8,0x00, 0 }; const int8u gse5x9[] = { 9, 0, 32, 128-32, 0x00,0x00,0x0a,0x00,0x14,0x00,0x1e,0x00,0x28,0x00,0x32,0x00,0x3c,0x00,0x46,0x00,0x50,0x00, 0x5a,0x00,0x64,0x00,0x6e,0x00,0x78,0x00,0x82,0x00,0x8c,0x00,0x96,0x00,0xa0,0x00,0xaa,0x00, 0xb4,0x00,0xbe,0x00,0xc8,0x00,0xd2,0x00,0xdc,0x00,0xe6,0x00,0xf0,0x00,0xfa,0x00,0x04,0x01, 0x0e,0x01,0x18,0x01,0x22,0x01,0x2c,0x01,0x36,0x01,0x40,0x01,0x4a,0x01,0x54,0x01,0x5e,0x01, 0x68,0x01,0x72,0x01,0x7c,0x01,0x86,0x01,0x90,0x01,0x9a,0x01,0xa4,0x01,0xae,0x01,0xb8,0x01, 0xc2,0x01,0xcc,0x01,0xd6,0x01,0xe0,0x01,0xea,0x01,0xf4,0x01,0xfe,0x01,0x08,0x02,0x12,0x02, 0x1c,0x02,0x26,0x02,0x30,0x02,0x3a,0x02,0x44,0x02,0x4e,0x02,0x58,0x02,0x62,0x02,0x6c,0x02, 0x76,0x02,0x80,0x02,0x8a,0x02,0x94,0x02,0x9e,0x02,0xa8,0x02,0xb2,0x02,0xbc,0x02,0xc6,0x02, 0xd0,0x02,0xda,0x02,0xe4,0x02,0xee,0x02,0xf8,0x02,0x02,0x03,0x0c,0x03,0x16,0x03,0x20,0x03, 0x2a,0x03,0x34,0x03,0x3e,0x03,0x48,0x03,0x52,0x03,0x5c,0x03,0x66,0x03,0x70,0x03,0x7a,0x03, 0x84,0x03,0x8e,0x03,0x98,0x03,0xa2,0x03,0xac,0x03,0xb6,0x03, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x21 '!' 0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00, 5, // 0x22 '"' 0x00,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x23 '#' 0x00,0x50,0x50,0xf8,0x50,0xf8,0x50,0x50,0x00, 5, // 0x24 '$' 0x00,0x20,0x78,0xa0,0x70,0x28,0xf0,0x20,0x00, 5, // 0x25 '%' 0x00,0xc8,0xc8,0x10,0x20,0x40,0x98,0x98,0x00, 5, // 0x26 '&' 0x00,0x40,0xa0,0xa0,0x40,0xa8,0x90,0x68,0x00, 5, // 0x27 ''' 0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10, 5, // 0x29 ')' 0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80, 5, // 0x2a '*' 0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00, 5, // 0x2b '+' 0x00,0x00,0x20,0x20,0xf8,0x20,0x20,0x00,0x00, 5, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x40, 5, // 0x2d '-' 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00, 5, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00, 5, // 0x2f '/' 0x00,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80, 5, // 0x30 '0' 0x00,0x60,0x90,0xb0,0xd0,0x90,0x90,0x60,0x00, 5, // 0x31 '1' 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x70,0x00, 5, // 0x32 '2' 0x00,0x60,0x90,0x10,0x20,0x40,0x80,0xf0,0x00, 5, // 0x33 '3' 0x00,0xf0,0x10,0x20,0x60,0x10,0x90,0x60,0x00, 5, // 0x34 '4' 0x00,0x30,0x50,0x90,0x90,0xf8,0x10,0x10,0x00, 5, // 0x35 '5' 0x00,0xf0,0x80,0xe0,0x10,0x10,0x10,0xe0,0x00, 5, // 0x36 '6' 0x00,0x60,0x80,0xe0,0x90,0x90,0x90,0x60,0x00, 5, // 0x37 '7' 0x00,0xf0,0x90,0x10,0x20,0x40,0x40,0x40,0x00, 5, // 0x38 '8' 0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x60,0x00, 5, // 0x39 '9' 0x00,0x60,0x90,0x90,0x70,0x10,0x90,0x60,0x00, 5, // 0x3a ':' 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00, 5, // 0x3b ';' 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x20,0x40, 5, // 0x3c '<' 0x00,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x00, 5, // 0x3d '=' 0x00,0x00,0x00,0xf0,0x00,0xf0,0x00,0x00,0x00, 5, // 0x3e '>' 0x00,0x80,0x40,0x20,0x10,0x20,0x40,0x80,0x00, 5, // 0x3f '?' 0x00,0x60,0x90,0x10,0x20,0x20,0x00,0x20,0x00, 5, // 0x40 '@' 0x00,0x60,0x90,0xb0,0xb0,0xb0,0x80,0x70,0x00, 5, // 0x41 'A' 0x00,0x60,0x90,0x90,0xf0,0x90,0x90,0x90,0x00, 5, // 0x42 'B' 0x00,0xe0,0x90,0x90,0xe0,0x90,0x90,0xe0,0x00, 5, // 0x43 'C' 0x00,0x60,0x90,0x80,0x80,0x80,0x90,0x60,0x00, 5, // 0x44 'D' 0x00,0xe0,0x90,0x90,0x90,0x90,0x90,0xe0,0x00, 5, // 0x45 'E' 0x00,0xf0,0x80,0x80,0xe0,0x80,0x80,0xf0,0x00, 5, // 0x46 'F' 0x00,0xf0,0x80,0x80,0xe0,0x80,0x80,0x80,0x00, 5, // 0x47 'G' 0x00,0x60,0x90,0x80,0xb0,0x90,0x90,0x60,0x00, 5, // 0x48 'H' 0x00,0x90,0x90,0x90,0xf0,0x90,0x90,0x90,0x00, 5, // 0x49 'I' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00, 5, // 0x4a 'J' 0x00,0x70,0x20,0x20,0x20,0x20,0xa0,0x40,0x00, 5, // 0x4b 'K' 0x00,0x90,0x90,0xa0,0xc0,0xa0,0x90,0x90,0x00, 5, // 0x4c 'L' 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,0x00, 5, // 0x4d 'M' 0x00,0x90,0xf0,0x90,0x90,0x90,0x90,0x90,0x00, 5, // 0x4e 'N' 0x00,0x90,0x90,0xd0,0xb0,0x90,0x90,0x90,0x00, 5, // 0x4f 'O' 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x60,0x00, 5, // 0x50 'P' 0x00,0xe0,0x90,0x90,0xe0,0x80,0x80,0x80,0x00, 5, // 0x51 'Q' 0x00,0x60,0x90,0x90,0x90,0x90,0xa0,0x50,0x00, 5, // 0x52 'R' 0x00,0xe0,0x90,0x90,0xe0,0xa0,0x90,0x90,0x00, 5, // 0x53 'S' 0x00,0x60,0x90,0x80,0x60,0x10,0x90,0x60,0x00, 5, // 0x54 'T' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 5, // 0x55 'U' 0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00, 5, // 0x56 'V' 0x00,0x50,0x50,0x50,0x50,0x50,0x20,0x20,0x00, 5, // 0x57 'W' 0x00,0x90,0x90,0x90,0x90,0x90,0xf0,0x90,0x00, 5, // 0x58 'X' 0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x00, 5, // 0x59 'Y' 0x00,0x50,0x50,0x50,0x20,0x20,0x20,0x20,0x00, 5, // 0x5a 'Z' 0x00,0xf0,0x10,0x10,0x20,0x40,0x80,0xf0,0x00, 5, // 0x5b '[' 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00, 5, // 0x5c '\' 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x00, 5, // 0x5d ']' 0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x00, 5, // 0x5e '^' 0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00, 5, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00, 5, // 0x60 '`' 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x61 'a' 0x00,0x00,0x60,0x10,0x70,0x90,0x90,0x70,0x00, 5, // 0x62 'b' 0x00,0x80,0x80,0xe0,0x90,0x90,0x90,0xe0,0x00, 5, // 0x63 'c' 0x00,0x00,0x60,0x90,0x80,0x80,0x90,0x60,0x00, 5, // 0x64 'd' 0x00,0x10,0x10,0x70,0x90,0x90,0x90,0x70,0x00, 5, // 0x65 'e' 0x00,0x00,0x60,0x90,0xf0,0x80,0x80,0x70,0x00, 5, // 0x66 'f' 0x00,0x30,0x40,0x40,0xe0,0x40,0x40,0x40,0x00, 5, // 0x67 'g' 0x00,0x00,0x70,0x90,0x90,0x70,0x10,0x90,0x60, 5, // 0x68 'h' 0x00,0x80,0x80,0xe0,0x90,0x90,0x90,0x90,0x00, 5, // 0x69 'i' 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x70,0x00, 5, // 0x6a 'j' 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0xa0,0x40, 5, // 0x6b 'k' 0x00,0x80,0x80,0x90,0xa0,0xc0,0xa0,0x90,0x00, 5, // 0x6c 'l' 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00, 5, // 0x6d 'm' 0x00,0x00,0xa0,0xf0,0xf0,0xf0,0x90,0x90,0x00, 5, // 0x6e 'n' 0x00,0x00,0xa0,0xd0,0x90,0x90,0x90,0x90,0x00, 5, // 0x6f 'o' 0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x60,0x00, 5, // 0x70 'p' 0x00,0x00,0xe0,0x90,0x90,0x90,0xe0,0x80,0x80, 5, // 0x71 'q' 0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0x10, 5, // 0x72 'r' 0x00,0x00,0xe0,0x90,0x80,0x80,0x80,0x80,0x00, 5, // 0x73 's' 0x00,0x00,0x60,0x90,0x40,0x20,0x90,0x60,0x00, 5, // 0x74 't' 0x00,0x40,0x40,0xe0,0x40,0x40,0x50,0x20,0x00, 5, // 0x75 'u' 0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x70,0x00, 5, // 0x76 'v' 0x00,0x00,0x50,0x50,0x50,0x50,0x20,0x20,0x00, 5, // 0x77 'w' 0x00,0x00,0x90,0x90,0x90,0x90,0xf0,0x90,0x00, 5, // 0x78 'x' 0x00,0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x00, 5, // 0x79 'y' 0x00,0x00,0x90,0x90,0x90,0x90,0x70,0x10,0xe0, 5, // 0x7a 'z' 0x00,0x00,0xf0,0x10,0x20,0x40,0x80,0xf0,0x00, 5, // 0x7b '{' 0x10,0x20,0x20,0x20,0xc0,0x20,0x20,0x20,0x10, 5, // 0x7c '|' 0x00,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x00, 5, // 0x7d '}' 0x80,0x40,0x40,0x40,0x30,0x40,0x40,0x40,0x80, 5, // 0x7e '~' 0x00,0x40,0xa8,0x10,0x00,0x00,0x00,0x00,0x00, 5, // 0x7f '' 0x00,0x00,0x00,0x20,0x50,0x88,0xf8,0x00,0x00, 0 }; const int8u gse6x12[] = { 12, 0, 32, 128-32, 0x00,0x00,0x0d,0x00,0x1a,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x4e,0x00,0x5b,0x00,0x68,0x00, 0x75,0x00,0x82,0x00,0x8f,0x00,0x9c,0x00,0xa9,0x00,0xb6,0x00,0xc3,0x00,0xd0,0x00,0xdd,0x00, 0xea,0x00,0xf7,0x00,0x04,0x01,0x11,0x01,0x1e,0x01,0x2b,0x01,0x38,0x01,0x45,0x01,0x52,0x01, 0x5f,0x01,0x6c,0x01,0x79,0x01,0x86,0x01,0x93,0x01,0xa0,0x01,0xad,0x01,0xba,0x01,0xc7,0x01, 0xd4,0x01,0xe1,0x01,0xee,0x01,0xfb,0x01,0x08,0x02,0x15,0x02,0x22,0x02,0x2f,0x02,0x3c,0x02, 0x49,0x02,0x56,0x02,0x63,0x02,0x70,0x02,0x7d,0x02,0x8a,0x02,0x97,0x02,0xa4,0x02,0xb1,0x02, 0xbe,0x02,0xcb,0x02,0xd8,0x02,0xe5,0x02,0xf2,0x02,0xff,0x02,0x0c,0x03,0x19,0x03,0x26,0x03, 0x33,0x03,0x40,0x03,0x4d,0x03,0x5a,0x03,0x67,0x03,0x74,0x03,0x81,0x03,0x8e,0x03,0x9b,0x03, 0xa8,0x03,0xb5,0x03,0xc2,0x03,0xcf,0x03,0xdc,0x03,0xe9,0x03,0xf6,0x03,0x03,0x04,0x10,0x04, 0x1d,0x04,0x2a,0x04,0x37,0x04,0x44,0x04,0x51,0x04,0x5e,0x04,0x6b,0x04,0x78,0x04,0x85,0x04, 0x92,0x04,0x9f,0x04,0xac,0x04,0xb9,0x04,0xc6,0x04,0xd3,0x04, 6, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x21 '!' 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, 6, // 0x22 '"' 0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x23 '#' 0x00,0x50,0x50,0xf8,0x50,0x50,0x50,0xf8,0x50,0x50,0x00,0x00, 6, // 0x24 '$' 0x00,0x20,0x70,0xa8,0xa0,0x70,0x28,0xa8,0x70,0x20,0x00,0x00, 6, // 0x25 '%' 0x00,0xc8,0xd8,0x10,0x30,0x20,0x60,0x40,0xd8,0x98,0x00,0x00, 6, // 0x26 '&' 0x00,0x60,0x90,0x90,0x90,0x60,0xa8,0x90,0x90,0x68,0x00,0x00, 6, // 0x27 ''' 0x00,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x28 '(' 0x00,0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10,0x00,0x00, 6, // 0x29 ')' 0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00, 6, // 0x2a '*' 0x00,0x00,0x00,0x50,0x20,0xf8,0x20,0x50,0x00,0x00,0x00,0x00, 6, // 0x2b '+' 0x00,0x00,0x20,0x20,0x20,0xf8,0x20,0x20,0x20,0x00,0x00,0x00, 6, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40, 6, // 0x2d '-' 0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, 6, // 0x2f '/' 0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00,0x00, 6, // 0x30 '0' 0x00,0x70,0x88,0x88,0x98,0xa8,0xc8,0x88,0x88,0x70,0x00,0x00, 6, // 0x31 '1' 0x00,0x20,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 6, // 0x32 '2' 0x00,0x70,0x88,0x88,0x08,0x10,0x20,0x40,0x80,0xf8,0x00,0x00, 6, // 0x33 '3' 0x00,0xf8,0x10,0x20,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00, 6, // 0x34 '4' 0x00,0x10,0x20,0x40,0x90,0x90,0xf8,0x10,0x10,0x10,0x00,0x00, 6, // 0x35 '5' 0x00,0xf8,0x80,0x80,0xf0,0x08,0x08,0x08,0x88,0x70,0x00,0x00, 6, // 0x36 '6' 0x00,0x70,0x88,0x80,0x80,0xf0,0x88,0x88,0x88,0x70,0x00,0x00, 6, // 0x37 '7' 0x00,0xf8,0x88,0x08,0x08,0x10,0x20,0x20,0x20,0x20,0x00,0x00, 6, // 0x38 '8' 0x00,0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x00,0x00, 6, // 0x39 '9' 0x00,0x70,0x88,0x88,0x88,0x78,0x08,0x08,0x88,0x70,0x00,0x00, 6, // 0x3a ':' 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00, 6, // 0x3b ';' 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x20,0x20,0x40, 6, // 0x3c '<' 0x00,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x00,0x00, 6, // 0x3d '=' 0x00,0x00,0x00,0x00,0xf8,0x00,0xf8,0x00,0x00,0x00,0x00,0x00, 6, // 0x3e '>' 0x00,0x80,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x80,0x00,0x00, 6, // 0x3f '?' 0x00,0x70,0x88,0x88,0x08,0x10,0x20,0x20,0x00,0x20,0x00,0x00, 6, // 0x40 '@' 0x00,0x70,0x88,0x88,0xb8,0xb8,0xb0,0x80,0x88,0x70,0x00,0x00, 6, // 0x41 'A' 0x00,0x20,0x50,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x00,0x00, 6, // 0x42 'B' 0x00,0xf0,0x88,0x88,0x88,0xf0,0x88,0x88,0x88,0xf0,0x00,0x00, 6, // 0x43 'C' 0x00,0x70,0x88,0x88,0x80,0x80,0x80,0x88,0x88,0x70,0x00,0x00, 6, // 0x44 'D' 0x00,0xe0,0x90,0x88,0x88,0x88,0x88,0x88,0x90,0xe0,0x00,0x00, 6, // 0x45 'E' 0x00,0xf8,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0xf8,0x00,0x00, 6, // 0x46 'F' 0x00,0xf8,0x80,0x80,0x80,0xf0,0x80,0x80,0x80,0x80,0x00,0x00, 6, // 0x47 'G' 0x00,0x70,0x88,0x80,0x80,0xb8,0x88,0x88,0x88,0x70,0x00,0x00, 6, // 0x48 'H' 0x00,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x00,0x00, 6, // 0x49 'I' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 6, // 0x4a 'J' 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x60,0x00,0x00, 6, // 0x4b 'K' 0x00,0x88,0x88,0x90,0xa0,0xc0,0xa0,0x90,0x88,0x88,0x00,0x00, 6, // 0x4c 'L' 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf8,0x00,0x00, 6, // 0x4d 'M' 0x00,0x88,0x88,0xd8,0xa8,0x88,0x88,0x88,0x88,0x88,0x00,0x00, 6, // 0x4e 'N' 0x00,0x88,0x88,0xc8,0xa8,0x98,0x88,0x88,0x88,0x88,0x00,0x00, 6, // 0x4f 'O' 0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, 6, // 0x50 'P' 0x00,0xf0,0x88,0x88,0x88,0xf0,0x80,0x80,0x80,0x80,0x00,0x00, 6, // 0x51 'Q' 0x00,0x70,0x88,0x88,0x88,0x88,0x88,0xa8,0x90,0x68,0x00,0x00, 6, // 0x52 'R' 0x00,0xf0,0x88,0x88,0x88,0x88,0xf0,0xa0,0x90,0x88,0x00,0x00, 6, // 0x53 'S' 0x00,0x70,0x88,0x80,0x80,0x70,0x08,0x08,0x88,0x70,0x00,0x00, 6, // 0x54 'T' 0x00,0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00, 6, // 0x55 'U' 0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, 6, // 0x56 'V' 0x00,0x88,0x88,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x00,0x00, 6, // 0x57 'W' 0x00,0x88,0x88,0x88,0x88,0x88,0xa8,0xa8,0xd8,0x88,0x00,0x00, 6, // 0x58 'X' 0x00,0x88,0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x88,0x00,0x00, 6, // 0x59 'Y' 0x00,0x88,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x20,0x00,0x00, 6, // 0x5a 'Z' 0x00,0xf8,0x08,0x08,0x10,0x20,0x40,0x80,0x80,0xf8,0x00,0x00, 6, // 0x5b '[' 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00, 6, // 0x5c '\' 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,0x00, 6, // 0x5d ']' 0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00, 6, // 0x5e '^' 0x00,0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00, 6, // 0x60 '`' 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x61 'a' 0x00,0x00,0x00,0x70,0x88,0x08,0x78,0x88,0x88,0x78,0x00,0x00, 6, // 0x62 'b' 0x00,0x80,0x80,0x80,0xf0,0x88,0x88,0x88,0x88,0xf0,0x00,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x00,0x00, 6, // 0x64 'd' 0x00,0x08,0x08,0x08,0x78,0x88,0x88,0x88,0x88,0x78,0x00,0x00, 6, // 0x65 'e' 0x00,0x00,0x00,0x70,0x88,0x88,0xf8,0x80,0x80,0x78,0x00,0x00, 6, // 0x66 'f' 0x00,0x18,0x20,0x20,0xf8,0x20,0x20,0x20,0x20,0x20,0x00,0x00, 6, // 0x67 'g' 0x00,0x00,0x00,0x78,0x88,0x88,0x88,0x88,0x78,0x08,0x08,0xf0, 6, // 0x68 'h' 0x00,0x80,0x80,0x80,0xf0,0x88,0x88,0x88,0x88,0x88,0x00,0x00, 6, // 0x69 'i' 0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 6, // 0x6a 'j' 0x00,0x10,0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x90,0x60, 6, // 0x6b 'k' 0x00,0x80,0x80,0x80,0x88,0x90,0xa0,0xd0,0x88,0x88,0x00,0x00, 6, // 0x6c 'l' 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 6, // 0x6d 'm' 0x00,0x00,0x00,0xd0,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x00,0x00, 6, // 0x6e 'n' 0x00,0x00,0x00,0xb0,0xc8,0x88,0x88,0x88,0x88,0x88,0x00,0x00, 6, // 0x6f 'o' 0x00,0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, 6, // 0x70 'p' 0x00,0x00,0x00,0xf0,0x88,0x88,0x88,0x88,0xf0,0x80,0x80,0x80, 6, // 0x71 'q' 0x00,0x00,0x00,0x78,0x88,0x88,0x88,0x88,0x78,0x08,0x08,0x08, 6, // 0x72 'r' 0x00,0x00,0x00,0xb0,0xc8,0x88,0x80,0x80,0x80,0x80,0x00,0x00, 6, // 0x73 's' 0x00,0x00,0x00,0x70,0x88,0x80,0x70,0x08,0x88,0x70,0x00,0x00, 6, // 0x74 't' 0x00,0x40,0x40,0x40,0xe0,0x40,0x40,0x40,0x48,0x30,0x00,0x00, 6, // 0x75 'u' 0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x78,0x00,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x00,0x00, 6, // 0x77 'w' 0x00,0x00,0x00,0x88,0x88,0x88,0xa8,0xa8,0xd8,0x88,0x00,0x00, 6, // 0x78 'x' 0x00,0x00,0x00,0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x00,0x00, 6, // 0x79 'y' 0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x88,0x78,0x08,0x10,0xe0, 6, // 0x7a 'z' 0x00,0x00,0x00,0xf8,0x08,0x10,0x20,0x40,0x80,0xf8,0x00,0x00, 6, // 0x7b '{' 0x18,0x20,0x20,0x20,0x20,0xc0,0x20,0x20,0x20,0x20,0x18,0x00, 6, // 0x7c '|' 0x00,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x20,0x00,0x00, 6, // 0x7d '}' 0xc0,0x20,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0x20,0xc0,0x00, 6, // 0x7e '~' 0x00,0x00,0x40,0xa8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x7f '' 0x00,0x00,0x00,0x00,0x20,0x50,0x88,0xf8,0x00,0x00,0x00,0x00, 0 }; const int8u gse6x9[] = { 9, 0, 32, 128-32, 0x00,0x00,0x0a,0x00,0x14,0x00,0x1e,0x00,0x28,0x00,0x32,0x00,0x3c,0x00,0x46,0x00,0x50,0x00, 0x5a,0x00,0x64,0x00,0x6e,0x00,0x78,0x00,0x82,0x00,0x8c,0x00,0x96,0x00,0xa0,0x00,0xaa,0x00, 0xb4,0x00,0xbe,0x00,0xc8,0x00,0xd2,0x00,0xdc,0x00,0xe6,0x00,0xf0,0x00,0xfa,0x00,0x04,0x01, 0x0e,0x01,0x18,0x01,0x22,0x01,0x2c,0x01,0x36,0x01,0x40,0x01,0x4a,0x01,0x54,0x01,0x5e,0x01, 0x68,0x01,0x72,0x01,0x7c,0x01,0x86,0x01,0x90,0x01,0x9a,0x01,0xa4,0x01,0xae,0x01,0xb8,0x01, 0xc2,0x01,0xcc,0x01,0xd6,0x01,0xe0,0x01,0xea,0x01,0xf4,0x01,0xfe,0x01,0x08,0x02,0x12,0x02, 0x1c,0x02,0x26,0x02,0x30,0x02,0x3a,0x02,0x44,0x02,0x4e,0x02,0x58,0x02,0x62,0x02,0x6c,0x02, 0x76,0x02,0x80,0x02,0x8a,0x02,0x94,0x02,0x9e,0x02,0xa8,0x02,0xb2,0x02,0xbc,0x02,0xc6,0x02, 0xd0,0x02,0xda,0x02,0xe4,0x02,0xee,0x02,0xf8,0x02,0x02,0x03,0x0c,0x03,0x16,0x03,0x20,0x03, 0x2a,0x03,0x34,0x03,0x3e,0x03,0x48,0x03,0x52,0x03,0x5c,0x03,0x66,0x03,0x70,0x03,0x7a,0x03, 0x84,0x03,0x8e,0x03,0x98,0x03,0xa2,0x03,0xac,0x03,0xb6,0x03, 6, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x21 '!' 0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00, 6, // 0x22 '"' 0x00,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x23 '#' 0x00,0x50,0x50,0xf8,0x50,0xf8,0x50,0x50,0x00, 6, // 0x24 '$' 0x00,0x70,0xa8,0xa0,0x70,0x28,0xa8,0x70,0x00, 6, // 0x25 '%' 0x00,0xc8,0xc8,0x10,0x20,0x40,0x98,0x98,0x00, 6, // 0x26 '&' 0x00,0x60,0x90,0x90,0x60,0xa8,0x90,0x68,0x00, 6, // 0x27 ''' 0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x28 '(' 0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10, 6, // 0x29 ')' 0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x40, 6, // 0x2a '*' 0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00, 6, // 0x2b '+' 0x00,0x00,0x20,0x20,0xf8,0x20,0x20,0x00,0x00, 6, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x40, 6, // 0x2d '-' 0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00, 6, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00, 6, // 0x2f '/' 0x00,0x08,0x08,0x10,0x20,0x40,0x80,0x80,0x00, 6, // 0x30 '0' 0x00,0x70,0x88,0x98,0xa8,0xc8,0x88,0x70,0x00, 6, // 0x31 '1' 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x70,0x00, 6, // 0x32 '2' 0x00,0x70,0x88,0x08,0x10,0x20,0x40,0xf8,0x00, 6, // 0x33 '3' 0x00,0xf8,0x10,0x20,0x70,0x08,0x88,0x70,0x00, 6, // 0x34 '4' 0x00,0x10,0x20,0x40,0x90,0xf8,0x10,0x10,0x00, 6, // 0x35 '5' 0x00,0xf8,0x80,0xf0,0x08,0x08,0x88,0x70,0x00, 6, // 0x36 '6' 0x00,0x70,0x88,0x80,0xf0,0x88,0x88,0x70,0x00, 6, // 0x37 '7' 0x00,0xf8,0x08,0x08,0x10,0x20,0x40,0x40,0x00, 6, // 0x38 '8' 0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x70,0x00, 6, // 0x39 '9' 0x00,0x70,0x88,0x88,0x78,0x08,0x88,0x70,0x00, 6, // 0x3a ':' 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00, 6, // 0x3b ';' 0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x20,0x40, 6, // 0x3c '<' 0x00,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x00, 6, // 0x3d '=' 0x00,0x00,0x00,0xf8,0x00,0xf8,0x00,0x00,0x00, 6, // 0x3e '>' 0x00,0x80,0x40,0x20,0x10,0x20,0x40,0x80,0x00, 6, // 0x3f '?' 0x00,0x70,0x88,0x08,0x10,0x20,0x00,0x20,0x00, 6, // 0x40 '@' 0x00,0x70,0x88,0x88,0xb8,0xb8,0x80,0x70,0x00, 6, // 0x41 'A' 0x00,0x20,0x50,0x88,0x88,0xf8,0x88,0x88,0x00, 6, // 0x42 'B' 0x00,0xf0,0x88,0x88,0xf0,0x88,0x88,0xf0,0x00, 6, // 0x43 'C' 0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x00, 6, // 0x44 'D' 0x00,0xe0,0x90,0x88,0x88,0x88,0x90,0xe0,0x00, 6, // 0x45 'E' 0x00,0xf8,0x80,0x80,0xf0,0x80,0x80,0xf8,0x00, 6, // 0x46 'F' 0x00,0xf8,0x80,0x80,0xf0,0x80,0x80,0x80,0x00, 6, // 0x47 'G' 0x00,0x70,0x88,0x80,0xb8,0x88,0x88,0x70,0x00, 6, // 0x48 'H' 0x00,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x00, 6, // 0x49 'I' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00, 6, // 0x4a 'J' 0x00,0x38,0x10,0x10,0x10,0x10,0x90,0x60,0x00, 6, // 0x4b 'K' 0x00,0x88,0x90,0xa0,0xc0,0xa0,0x90,0x88,0x00, 6, // 0x4c 'L' 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xf8,0x00, 6, // 0x4d 'M' 0x00,0x88,0xd8,0xa8,0x88,0x88,0x88,0x88,0x00, 6, // 0x4e 'N' 0x00,0x88,0x88,0xc8,0xa8,0x98,0x88,0x88,0x00, 6, // 0x4f 'O' 0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00, 6, // 0x50 'P' 0x00,0xf0,0x88,0x88,0xf0,0x80,0x80,0x80,0x00, 6, // 0x51 'Q' 0x00,0x70,0x88,0x88,0x88,0xa8,0x90,0x68,0x00, 6, // 0x52 'R' 0x00,0xf0,0x88,0x88,0x88,0xf0,0x90,0x88,0x00, 6, // 0x53 'S' 0x00,0x70,0x88,0x80,0x70,0x08,0x88,0x70,0x00, 6, // 0x54 'T' 0x00,0xf8,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 6, // 0x55 'U' 0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00, 6, // 0x56 'V' 0x00,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x00, 6, // 0x57 'W' 0x00,0x88,0x88,0x88,0xa8,0xa8,0xd8,0x88,0x00, 6, // 0x58 'X' 0x00,0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x00, 6, // 0x59 'Y' 0x00,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x00, 6, // 0x5a 'Z' 0x00,0xf8,0x08,0x10,0x20,0x40,0x80,0xf8,0x00, 6, // 0x5b '[' 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70, 6, // 0x5c '\' 0x00,0x80,0x80,0x40,0x20,0x10,0x08,0x08,0x00, 6, // 0x5d ']' 0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70, 6, // 0x5e '^' 0x00,0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00, 6, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00, 6, // 0x60 '`' 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x61 'a' 0x00,0x00,0x00,0x70,0x08,0x78,0x88,0x78,0x00, 6, // 0x62 'b' 0x00,0x80,0x80,0xf0,0x88,0x88,0x88,0xf0,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x70,0x88,0x80,0x88,0x70,0x00, 6, // 0x64 'd' 0x00,0x08,0x08,0x78,0x88,0x88,0x88,0x78,0x00, 6, // 0x65 'e' 0x00,0x00,0x00,0x70,0x88,0xf8,0x80,0x78,0x00, 6, // 0x66 'f' 0x00,0x18,0x20,0x20,0xf8,0x20,0x20,0x20,0x00, 6, // 0x67 'g' 0x00,0x00,0x00,0x78,0x88,0x88,0x78,0x08,0x70, 6, // 0x68 'h' 0x00,0x80,0x80,0xf0,0x88,0x88,0x88,0x88,0x00, 6, // 0x69 'i' 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x70,0x00, 6, // 0x6a 'j' 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x90,0x60, 6, // 0x6b 'k' 0x00,0x00,0x80,0x88,0x90,0xa0,0xd0,0x88,0x00, 6, // 0x6c 'l' 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00, 6, // 0x6d 'm' 0x00,0x00,0x00,0xd0,0xa8,0xa8,0xa8,0xa8,0x00, 6, // 0x6e 'n' 0x00,0x00,0x00,0xb0,0xc8,0x88,0x88,0x88,0x00, 6, // 0x6f 'o' 0x00,0x00,0x00,0x70,0x88,0x88,0x88,0x70,0x00, 6, // 0x70 'p' 0x00,0x00,0x00,0xf0,0x88,0x88,0xf0,0x80,0x80, 6, // 0x71 'q' 0x00,0x00,0x00,0x78,0x88,0x88,0x78,0x08,0x08, 6, // 0x72 'r' 0x00,0x00,0x00,0xb8,0xc0,0x80,0x80,0x80,0x00, 6, // 0x73 's' 0x00,0x00,0x00,0x78,0x80,0x70,0x08,0xf0,0x00, 6, // 0x74 't' 0x00,0x40,0x40,0xe0,0x40,0x40,0x48,0x30,0x00, 6, // 0x75 'u' 0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x78,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x88,0x88,0x88,0x50,0x20,0x00, 6, // 0x77 'w' 0x00,0x00,0x00,0x88,0x88,0xa8,0xd8,0x88,0x00, 6, // 0x78 'x' 0x00,0x00,0x00,0x88,0x50,0x20,0x50,0x88,0x00, 6, // 0x79 'y' 0x00,0x00,0x00,0x88,0x88,0x88,0x78,0x08,0x70, 6, // 0x7a 'z' 0x00,0x00,0x00,0xf8,0x10,0x20,0x40,0xf8,0x00, 6, // 0x7b '{' 0x18,0x20,0x20,0x20,0xc0,0x20,0x20,0x20,0x18, 6, // 0x7c '|' 0x00,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x00, 6, // 0x7d '}' 0xc0,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0xc0, 6, // 0x7e '~' 0x00,0x40,0xa8,0x10,0x00,0x00,0x00,0x00,0x00, 6, // 0x7f '' 0x00,0x00,0x00,0x20,0x50,0x88,0xf8,0x00,0x00, 0 }; const int8u gse7x11[] = { 11, 0, 32, 128-32, 0x00,0x00,0x0c,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3c,0x00,0x48,0x00,0x54,0x00,0x60,0x00, 0x6c,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9c,0x00,0xa8,0x00,0xb4,0x00,0xc0,0x00,0xcc,0x00, 0xd8,0x00,0xe4,0x00,0xf0,0x00,0xfc,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2c,0x01,0x38,0x01, 0x44,0x01,0x50,0x01,0x5c,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8c,0x01,0x98,0x01,0xa4,0x01, 0xb0,0x01,0xbc,0x01,0xc8,0x01,0xd4,0x01,0xe0,0x01,0xec,0x01,0xf8,0x01,0x04,0x02,0x10,0x02, 0x1c,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4c,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7c,0x02, 0x88,0x02,0x94,0x02,0xa0,0x02,0xac,0x02,0xb8,0x02,0xc4,0x02,0xd0,0x02,0xdc,0x02,0xe8,0x02, 0xf4,0x02,0x00,0x03,0x0c,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3c,0x03,0x48,0x03,0x54,0x03, 0x60,0x03,0x6c,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9c,0x03,0xa8,0x03,0xb4,0x03,0xc0,0x03, 0xcc,0x03,0xd8,0x03,0xe4,0x03,0xf0,0x03,0xfc,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2c,0x04, 0x38,0x04,0x44,0x04,0x50,0x04,0x5c,0x04,0x68,0x04,0x74,0x04, 7, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x21 '!' 0x00,0x10,0x38,0x38,0x38,0x10,0x10,0x00,0x10,0x00,0x00, 7, // 0x22 '"' 0x00,0x00,0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x23 '#' 0x00,0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,0x00,0x00, 7, // 0x24 '$' 0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x00, 7, // 0x25 '%' 0x00,0x00,0x42,0xa4,0x48,0x10,0x24,0x4a,0x84,0x00,0x00, 7, // 0x26 '&' 0x00,0x30,0x48,0x48,0x30,0x60,0x94,0x98,0x6c,0x00,0x00, 7, // 0x27 ''' 0x00,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x28 '(' 0x00,0x04,0x08,0x10,0x10,0x10,0x10,0x08,0x04,0x00,0x00, 7, // 0x29 ')' 0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00, 7, // 0x2a '*' 0x00,0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,0x00, 7, // 0x2b '+' 0x00,0x00,0x00,0x10,0x10,0x7c,0x10,0x10,0x00,0x00,0x00, 7, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60, 7, // 0x2d '-' 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, 7, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00, 7, // 0x2f '/' 0x00,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00, 7, // 0x30 '0' 0x00,0x38,0x44,0x4c,0x54,0x64,0x44,0x44,0x38,0x00,0x00, 7, // 0x31 '1' 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x7c,0x00,0x00, 7, // 0x32 '2' 0x00,0x38,0x44,0x04,0x08,0x10,0x20,0x44,0x7c,0x00,0x00, 7, // 0x33 '3' 0x00,0x7c,0x48,0x10,0x38,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x34 '4' 0x00,0x08,0x10,0x20,0x48,0x48,0x7c,0x08,0x1c,0x00,0x00, 7, // 0x35 '5' 0x00,0x7c,0x40,0x40,0x78,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x36 '6' 0x00,0x18,0x20,0x40,0x78,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x37 '7' 0x00,0x7c,0x44,0x04,0x08,0x10,0x10,0x10,0x10,0x00,0x00, 7, // 0x38 '8' 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x39 '9' 0x00,0x38,0x44,0x44,0x44,0x3c,0x04,0x08,0x30,0x00,0x00, 7, // 0x3a ':' 0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x00,0x00, 7, // 0x3b ';' 0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x30,0x60,0x00, 7, // 0x3c '<' 0x00,0x00,0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x00, 7, // 0x3d '=' 0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0x00,0x00,0x00,0x00, 7, // 0x3e '>' 0x00,0x00,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x00,0x00, 7, // 0x3f '?' 0x00,0x70,0x88,0x88,0x10,0x20,0x20,0x00,0x20,0x00,0x00, 7, // 0x40 '@' 0x00,0x30,0x48,0x04,0x34,0x54,0x54,0x54,0x28,0x00,0x00, 7, // 0x41 'A' 0x00,0x10,0x28,0x44,0x44,0x7c,0x44,0x44,0x44,0x00,0x00, 7, // 0x42 'B' 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00, 7, // 0x43 'C' 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00, 7, // 0x44 'D' 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00, 7, // 0x45 'E' 0x00,0x7c,0x40,0x40,0x70,0x40,0x40,0x40,0x7c,0x00,0x00, 7, // 0x46 'F' 0x00,0x7c,0x40,0x40,0x70,0x40,0x40,0x40,0x40,0x00,0x00, 7, // 0x47 'G' 0x00,0x38,0x44,0x40,0x40,0x5c,0x44,0x44,0x38,0x00,0x00, 7, // 0x48 'H' 0x00,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x49 'I' 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 7, // 0x4a 'J' 0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x48,0x30,0x00,0x00, 7, // 0x4b 'K' 0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x44,0x00,0x00, 7, // 0x4c 'L' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7c,0x00,0x00, 7, // 0x4d 'M' 0x00,0x44,0x6c,0x54,0x54,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x4e 'N' 0x00,0x44,0x44,0x64,0x54,0x4c,0x44,0x44,0x44,0x00,0x00, 7, // 0x4f 'O' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x50 'P' 0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00, 7, // 0x51 'Q' 0x00,0x38,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00, 7, // 0x52 'R' 0x00,0x78,0x44,0x44,0x44,0x78,0x50,0x48,0x44,0x00,0x00, 7, // 0x53 'S' 0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x44,0x38,0x00,0x00, 7, // 0x54 'T' 0x00,0x7c,0x54,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 7, // 0x55 'U' 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x56 'V' 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00, 7, // 0x57 'W' 0x00,0x44,0x44,0x44,0x44,0x54,0x54,0x6c,0x44,0x00,0x00, 7, // 0x58 'X' 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00, 7, // 0x59 'Y' 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x38,0x00,0x00, 7, // 0x5a 'Z' 0x00,0x7c,0x04,0x08,0x10,0x20,0x40,0x44,0x7c,0x00,0x00, 7, // 0x5b '[' 0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,0x00, 7, // 0x5c '\' 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,0x00, 7, // 0x5d ']' 0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00,0x00, 7, // 0x5e '^' 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, 7, // 0x60 '`' 0x00,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x61 'a' 0x00,0x00,0x00,0x38,0x04,0x3c,0x44,0x44,0x3c,0x00,0x00, 7, // 0x62 'b' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00, 7, // 0x63 'c' 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x44,0x38,0x00,0x00, 7, // 0x64 'd' 0x00,0x04,0x04,0x3c,0x44,0x44,0x44,0x44,0x3c,0x00,0x00, 7, // 0x65 'e' 0x00,0x00,0x00,0x38,0x44,0x7c,0x40,0x44,0x38,0x00,0x00, 7, // 0x66 'f' 0x00,0x18,0x24,0x20,0x70,0x20,0x20,0x20,0x70,0x00,0x00, 7, // 0x67 'g' 0x00,0x00,0x00,0x3c,0x44,0x44,0x44,0x3c,0x04,0x44,0x38, 7, // 0x68 'h' 0x00,0x40,0x40,0x40,0x58,0x64,0x44,0x44,0x44,0x00,0x00, 7, // 0x69 'i' 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 7, // 0x6a 'j' 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x48,0x30,0x00, 7, // 0x6b 'k' 0x00,0x40,0x40,0x44,0x48,0x50,0x68,0x44,0x44,0x00,0x00, 7, // 0x6c 'l' 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 7, // 0x6d 'm' 0x00,0x00,0x00,0xa8,0x54,0x54,0x54,0x54,0x54,0x00,0x00, 7, // 0x6e 'n' 0x00,0x00,0x00,0xb8,0x44,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x6f 'o' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x70 'p' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40, 7, // 0x71 'q' 0x00,0x00,0x00,0x3c,0x44,0x44,0x44,0x44,0x3c,0x04,0x04, 7, // 0x72 'r' 0x00,0x00,0x00,0x58,0x64,0x44,0x40,0x40,0x40,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x3c,0x40,0x38,0x04,0x04,0x78,0x00,0x00, 7, // 0x74 't' 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x24,0x18,0x00,0x00, 7, // 0x75 'u' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x3a,0x00,0x00, 7, // 0x76 'v' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x00,0x00, 7, // 0x77 'w' 0x00,0x00,0x00,0x44,0x44,0x54,0x54,0x6c,0x44,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0x44,0x44,0x44,0x3c,0x04,0x08,0x30,0x00, 7, // 0x7a 'z' 0x00,0x00,0x00,0x7c,0x08,0x10,0x20,0x44,0x7c,0x00,0x00, 7, // 0x7b '{' 0x00,0x0c,0x10,0x10,0x10,0x60,0x10,0x10,0x0c,0x00,0x00, 7, // 0x7c '|' 0x00,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x20,0x00,0x00, 7, // 0x7d '}' 0x00,0x60,0x10,0x10,0x10,0x0c,0x10,0x10,0x60,0x00,0x00, 7, // 0x7e '~' 0x00,0x00,0x64,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x7f '' 0x00,0x00,0x00,0x10,0x28,0x44,0x44,0x7c,0x00,0x00,0x00, 0 }; const int8u gse7x11_bold[] = { 11, 0, 32, 128-32, 0x00,0x00,0x0c,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3c,0x00,0x48,0x00,0x54,0x00,0x60,0x00, 0x6c,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9c,0x00,0xa8,0x00,0xb4,0x00,0xc0,0x00,0xcc,0x00, 0xd8,0x00,0xe4,0x00,0xf0,0x00,0xfc,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2c,0x01,0x38,0x01, 0x44,0x01,0x50,0x01,0x5c,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8c,0x01,0x98,0x01,0xa4,0x01, 0xb0,0x01,0xbc,0x01,0xc8,0x01,0xd4,0x01,0xe0,0x01,0xec,0x01,0xf8,0x01,0x04,0x02,0x10,0x02, 0x1c,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4c,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7c,0x02, 0x88,0x02,0x94,0x02,0xa0,0x02,0xac,0x02,0xb8,0x02,0xc4,0x02,0xd0,0x02,0xdc,0x02,0xe8,0x02, 0xf4,0x02,0x00,0x03,0x0c,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3c,0x03,0x48,0x03,0x54,0x03, 0x60,0x03,0x6c,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9c,0x03,0xa8,0x03,0xb4,0x03,0xc0,0x03, 0xcc,0x03,0xd8,0x03,0xe4,0x03,0xf0,0x03,0xfc,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2c,0x04, 0x38,0x04,0x44,0x04,0x50,0x04,0x5c,0x04,0x68,0x04,0x74,0x04, 7, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x21 '!' 0x00,0x30,0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00, 7, // 0x22 '"' 0x00,0x6c,0x6c,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x23 '#' 0x00,0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,0x00,0x00, 7, // 0x24 '$' 0x30,0x30,0x78,0xcc,0xc0,0x78,0x0c,0xcc,0x78,0x30,0x30, 7, // 0x25 '%' 0x00,0x00,0xc4,0x0c,0x18,0x30,0x60,0xc0,0x8c,0x00,0x00, 7, // 0x26 '&' 0x00,0x30,0x58,0x58,0x30,0x74,0xdc,0xd8,0x6c,0x00,0x00, 7, // 0x27 ''' 0x00,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x28 '(' 0x00,0x0c,0x18,0x30,0x30,0x30,0x30,0x18,0x0c,0x00,0x00, 7, // 0x29 ')' 0x00,0xc0,0x60,0x30,0x30,0x30,0x30,0x60,0xc0,0x00,0x00, 7, // 0x2a '*' 0x00,0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,0x00, 7, // 0x2b '+' 0x00,0x00,0x00,0x30,0x30,0xfc,0x30,0x30,0x00,0x00,0x00, 7, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,0x00, 7, // 0x2d '-' 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00, 7, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00, 7, // 0x2f '/' 0x00,0x0c,0x0c,0x18,0x18,0x30,0x30,0x60,0x60,0x00,0x00, 7, // 0x30 '0' 0x00,0x78,0xcc,0xcc,0xdc,0xec,0xcc,0xcc,0x78,0x00,0x00, 7, // 0x31 '1' 0x00,0x30,0x70,0xf0,0x30,0x30,0x30,0x30,0xfc,0x00,0x00, 7, // 0x32 '2' 0x00,0x78,0xcc,0xcc,0x18,0x30,0x60,0xcc,0xfc,0x00,0x00, 7, // 0x33 '3' 0x00,0xfc,0x98,0x30,0x78,0x0c,0x0c,0xcc,0x78,0x00,0x00, 7, // 0x34 '4' 0x00,0x18,0x30,0x68,0xd8,0xd8,0xfc,0x18,0x3c,0x00,0x00, 7, // 0x35 '5' 0x00,0xfc,0xc0,0xc0,0xf8,0x0c,0x0c,0xcc,0x78,0x00,0x00, 7, // 0x36 '6' 0x00,0x38,0x60,0xc0,0xf8,0xcc,0xcc,0xcc,0x78,0x00,0x00, 7, // 0x37 '7' 0x00,0xfc,0x8c,0x0c,0x18,0x30,0x30,0x30,0x30,0x00,0x00, 7, // 0x38 '8' 0x00,0x78,0xcc,0xcc,0x78,0xcc,0xcc,0xcc,0x78,0x00,0x00, 7, // 0x39 '9' 0x00,0x78,0xcc,0xcc,0xcc,0x7c,0x0c,0x18,0x70,0x00,0x00, 7, // 0x3a ':' 0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x00, 7, // 0x3b ';' 0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x60,0x00, 7, // 0x3c '<' 0x00,0x00,0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x00,0x00, 7, // 0x3d '=' 0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0x00,0x00,0x00,0x00, 7, // 0x3e '>' 0x00,0x00,0x60,0x30,0x18,0x0c,0x18,0x30,0x60,0x00,0x00, 7, // 0x3f '?' 0x00,0x78,0xcc,0xcc,0x18,0x30,0x30,0x00,0x30,0x00,0x00, 7, // 0x40 '@' 0x00,0x70,0x88,0x04,0x74,0xb4,0xb4,0xb4,0x68,0x00,0x00, 7, // 0x41 'A' 0x00,0x30,0x78,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0x00,0x00, 7, // 0x42 'B' 0x00,0xf8,0xcc,0xcc,0xf8,0xcc,0xcc,0xcc,0xf8,0x00,0x00, 7, // 0x43 'C' 0x00,0x78,0xcc,0xc0,0xc0,0xc0,0xc0,0xcc,0x78,0x00,0x00, 7, // 0x44 'D' 0x00,0xf0,0xd8,0xcc,0xcc,0xcc,0xcc,0xd8,0xf0,0x00,0x00, 7, // 0x45 'E' 0x00,0xfc,0xc4,0xd0,0xf0,0xd0,0xc0,0xc4,0xfc,0x00,0x00, 7, // 0x46 'F' 0x00,0xfc,0xc4,0xd0,0xf0,0xd0,0xc0,0xc0,0xc0,0x00,0x00, 7, // 0x47 'G' 0x00,0x78,0xcc,0xc0,0xc0,0xdc,0xcc,0xcc,0x78,0x00,0x00, 7, // 0x48 'H' 0x00,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0xcc,0x00,0x00, 7, // 0x49 'I' 0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00, 7, // 0x4a 'J' 0x00,0x3c,0x18,0x18,0x18,0x18,0xd8,0xd8,0x70,0x00,0x00, 7, // 0x4b 'K' 0x00,0xcc,0xcc,0xd8,0xf0,0xd8,0xcc,0xcc,0xcc,0x00,0x00, 7, // 0x4c 'L' 0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc4,0xfc,0x00,0x00, 7, // 0x4d 'M' 0x00,0x84,0xcc,0xfc,0xb4,0xcc,0xcc,0xcc,0xcc,0x00,0x00, 7, // 0x4e 'N' 0x00,0xcc,0xcc,0xec,0xfc,0xdc,0xcc,0xcc,0xcc,0x00,0x00, 7, // 0x4f 'O' 0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00, 7, // 0x50 'P' 0x00,0xf8,0xcc,0xcc,0xcc,0xf8,0xc0,0xc0,0xc0,0x00,0x00, 7, // 0x51 'Q' 0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xdc,0x78,0x18,0x0c,0x00, 7, // 0x52 'R' 0x00,0xf8,0xcc,0xcc,0xcc,0xf8,0xd8,0xcc,0xcc,0x00,0x00, 7, // 0x53 'S' 0x00,0x78,0xcc,0xe0,0x70,0x38,0x1c,0xcc,0x78,0x00,0x00, 7, // 0x54 'T' 0x00,0xfc,0xb4,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00, 7, // 0x55 'U' 0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00, 7, // 0x56 'V' 0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00, 7, // 0x57 'W' 0x00,0xcc,0xcc,0xcc,0xcc,0xb4,0xfc,0xcc,0x84,0x00,0x00, 7, // 0x58 'X' 0x00,0xcc,0xcc,0x78,0x30,0x78,0xcc,0xcc,0xcc,0x00,0x00, 7, // 0x59 'Y' 0x00,0xcc,0xcc,0xcc,0x78,0x30,0x30,0x30,0x78,0x00,0x00, 7, // 0x5a 'Z' 0x00,0xfc,0x8c,0x18,0x30,0x60,0xc0,0xc4,0xfc,0x00,0x00, 7, // 0x5b '[' 0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x78,0x00,0x00, 7, // 0x5c '\' 0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x0c,0x0c,0x00,0x00, 7, // 0x5d ']' 0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x00,0x00, 7, // 0x5e '^' 0x00,0x10,0x38,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00, 7, // 0x60 '`' 0x00,0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x61 'a' 0x00,0x00,0x00,0x70,0x18,0x78,0xd8,0xd8,0x6c,0x00,0x00, 7, // 0x62 'b' 0x00,0x60,0x60,0x60,0x78,0x6c,0x6c,0x6c,0x78,0x00,0x00, 7, // 0x63 'c' 0x00,0x00,0x00,0x78,0xcc,0xc0,0xc0,0xcc,0x78,0x00,0x00, 7, // 0x64 'd' 0x00,0x18,0x18,0x18,0x78,0xd8,0xd8,0xd8,0x6c,0x00,0x00, 7, // 0x65 'e' 0x00,0x00,0x00,0x78,0xcc,0xfc,0xc0,0xcc,0x78,0x00,0x00, 7, // 0x66 'f' 0x00,0x18,0x34,0x30,0x78,0x30,0x30,0x30,0x78,0x00,0x00, 7, // 0x67 'g' 0x00,0x00,0x00,0x6c,0xd8,0xd8,0xd8,0x78,0x18,0xd8,0x70, 7, // 0x68 'h' 0x00,0xc0,0xc0,0xd8,0xec,0xcc,0xcc,0xcc,0xcc,0x00,0x00, 7, // 0x69 'i' 0x00,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x78,0x00,0x00, 7, // 0x6a 'j' 0x00,0x0c,0x00,0x1c,0x0c,0x0c,0x0c,0x0c,0x6c,0x6c,0x38, 7, // 0x6b 'k' 0x00,0xc0,0xc0,0xcc,0xcc,0xd8,0xf0,0xd8,0xcc,0x00,0x00, 7, // 0x6c 'l' 0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00, 7, // 0x6d 'm' 0x00,0x00,0x00,0xe8,0xfc,0xd4,0xd4,0xc4,0xc4,0x00,0x00, 7, // 0x6e 'n' 0x00,0x00,0x00,0xd8,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,0x00, 7, // 0x6f 'o' 0x00,0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00, 7, // 0x70 'p' 0x00,0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xf8,0xc0,0xc0,0xc0, 7, // 0x71 'q' 0x00,0x00,0x00,0x7c,0xcc,0xcc,0xcc,0x7c,0x0c,0x0c,0x0c, 7, // 0x72 'r' 0x00,0x00,0x00,0xd8,0xec,0xcc,0xc0,0xc0,0xc0,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x78,0xcc,0x60,0x18,0xcc,0x78,0x00,0x00, 7, // 0x74 't' 0x00,0x20,0x60,0x60,0xf0,0x60,0x60,0x68,0x30,0x00,0x00, 7, // 0x75 'u' 0x00,0x00,0x00,0xd8,0xd8,0xd8,0xd8,0xd8,0x6c,0x00,0x00, 7, // 0x76 'v' 0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00, 7, // 0x77 'w' 0x00,0x00,0x00,0xcc,0xcc,0xb4,0xfc,0xcc,0x84,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0xcc,0x78,0x30,0x78,0xcc,0xcc,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x18,0xf0, 7, // 0x7a 'z' 0x00,0x00,0x00,0xfc,0x98,0x30,0x60,0xc4,0xfc,0x00,0x00, 7, // 0x7b '{' 0x1c,0x30,0x30,0x30,0xe0,0x30,0x30,0x30,0x1c,0x00,0x00, 7, // 0x7c '|' 0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x30,0x30,0x00,0x00, 7, // 0x7d '}' 0xe0,0x30,0x30,0x30,0x1c,0x30,0x30,0x30,0xe0,0x00,0x00, 7, // 0x7e '~' 0x00,0x34,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x7f '' 0x00,0x00,0x00,0x30,0x78,0xcc,0xcc,0xfc,0x00,0x00,0x00, 0 }; const int8u gse7x15[] = { 15, 0, 32, 128-32, 0x00,0x00,0x10,0x00,0x20,0x00,0x30,0x00,0x40,0x00,0x50,0x00,0x60,0x00,0x70,0x00,0x80,0x00, 0x90,0x00,0xa0,0x00,0xb0,0x00,0xc0,0x00,0xd0,0x00,0xe0,0x00,0xf0,0x00,0x00,0x01,0x10,0x01, 0x20,0x01,0x30,0x01,0x40,0x01,0x50,0x01,0x60,0x01,0x70,0x01,0x80,0x01,0x90,0x01,0xa0,0x01, 0xb0,0x01,0xc0,0x01,0xd0,0x01,0xe0,0x01,0xf0,0x01,0x00,0x02,0x10,0x02,0x20,0x02,0x30,0x02, 0x40,0x02,0x50,0x02,0x60,0x02,0x70,0x02,0x80,0x02,0x90,0x02,0xa0,0x02,0xb0,0x02,0xc0,0x02, 0xd0,0x02,0xe0,0x02,0xf0,0x02,0x00,0x03,0x10,0x03,0x20,0x03,0x30,0x03,0x40,0x03,0x50,0x03, 0x60,0x03,0x70,0x03,0x80,0x03,0x90,0x03,0xa0,0x03,0xb0,0x03,0xc0,0x03,0xd0,0x03,0xe0,0x03, 0xf0,0x03,0x00,0x04,0x10,0x04,0x20,0x04,0x30,0x04,0x40,0x04,0x50,0x04,0x60,0x04,0x70,0x04, 0x80,0x04,0x90,0x04,0xa0,0x04,0xb0,0x04,0xc0,0x04,0xd0,0x04,0xe0,0x04,0xf0,0x04,0x00,0x05, 0x10,0x05,0x20,0x05,0x30,0x05,0x40,0x05,0x50,0x05,0x60,0x05,0x70,0x05,0x80,0x05,0x90,0x05, 0xa0,0x05,0xb0,0x05,0xc0,0x05,0xd0,0x05,0xe0,0x05,0xf0,0x05, 7, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x21 '!' 0x00,0x00,0x10,0x38,0x38,0x38,0x38,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00, 7, // 0x22 '"' 0x00,0x00,0x24,0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x23 '#' 0x00,0x00,0x48,0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,0x48,0x00,0x00,0x00, 7, // 0x24 '$' 0x00,0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x54,0x38,0x10,0x00,0x00,0x00, 7, // 0x25 '%' 0x00,0x00,0x44,0x44,0x08,0x08,0x10,0x10,0x20,0x20,0x44,0x44,0x00,0x00,0x00, 7, // 0x26 '&' 0x00,0x00,0x00,0x30,0x48,0x48,0x30,0x60,0x94,0x98,0x90,0x6c,0x00,0x00,0x00, 7, // 0x27 ''' 0x00,0x00,0x20,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x28 '(' 0x00,0x04,0x08,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x08,0x04,0x00,0x00,0x00, 7, // 0x29 ')' 0x00,0x40,0x20,0x10,0x08,0x08,0x08,0x08,0x08,0x10,0x20,0x40,0x00,0x00,0x00, 7, // 0x2a '*' 0x00,0x00,0x00,0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,0x00,0x00,0x00, 7, // 0x2b '+' 0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x00,0x00,0x00,0x00, 7, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00, 7, // 0x2d '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, 7, // 0x2f '/' 0x00,0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00,0x00, 7, // 0x30 '0' 0x00,0x00,0x38,0x44,0x44,0x4c,0x54,0x64,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x31 '1' 0x00,0x00,0x10,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x7c,0x00,0x00,0x00, 7, // 0x32 '2' 0x00,0x00,0x38,0x44,0x44,0x04,0x08,0x10,0x20,0x40,0x44,0x7c,0x00,0x00,0x00, 7, // 0x33 '3' 0x00,0x00,0x7c,0x44,0x08,0x10,0x38,0x04,0x04,0x04,0x44,0x38,0x00,0x00,0x00, 7, // 0x34 '4' 0x00,0x00,0x08,0x10,0x20,0x40,0x48,0x48,0x7c,0x08,0x08,0x1c,0x00,0x00,0x00, 7, // 0x35 '5' 0x00,0x00,0x7c,0x40,0x40,0x40,0x78,0x04,0x04,0x04,0x44,0x38,0x00,0x00,0x00, 7, // 0x36 '6' 0x00,0x00,0x18,0x20,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x37 '7' 0x00,0x00,0x7c,0x44,0x04,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 7, // 0x38 '8' 0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x39 '9' 0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x3c,0x04,0x04,0x08,0x30,0x00,0x00,0x00, 7, // 0x3a ':' 0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00, 7, // 0x3b ';' 0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x30,0x30,0x60,0x00,0x00, 7, // 0x3c '<' 0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00,0x00, 7, // 0x3d '=' 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x3e '>' 0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00,0x00, 7, // 0x3f '?' 0x00,0x00,0x78,0x84,0x84,0x84,0x08,0x10,0x20,0x20,0x00,0x20,0x00,0x00,0x00, 7, // 0x40 '@' 0x00,0x00,0x00,0x30,0x48,0x04,0x34,0x54,0x54,0x54,0x54,0x28,0x00,0x00,0x00, 7, // 0x41 'A' 0x00,0x00,0x10,0x28,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x42 'B' 0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00,0x00, 7, // 0x43 'C' 0x00,0x00,0x38,0x44,0x44,0x40,0x40,0x40,0x40,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x44 'D' 0x00,0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,0x00, 7, // 0x45 'E' 0x00,0x00,0x7c,0x40,0x40,0x40,0x70,0x40,0x40,0x40,0x40,0x7c,0x00,0x00,0x00, 7, // 0x46 'F' 0x00,0x00,0x7c,0x40,0x40,0x40,0x70,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 7, // 0x47 'G' 0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x5c,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x48 'H' 0x00,0x00,0x44,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x49 'I' 0x00,0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00, 7, // 0x4a 'J' 0x00,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,0x00, 7, // 0x4b 'K' 0x00,0x00,0x44,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x4c 'L' 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7c,0x00,0x00,0x00, 7, // 0x4d 'M' 0x00,0x00,0x44,0x6c,0x54,0x54,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x4e 'N' 0x00,0x00,0x44,0x44,0x44,0x64,0x54,0x4c,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x4f 'O' 0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x50 'P' 0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 7, // 0x51 'Q' 0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,0x00, 7, // 0x52 'R' 0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x50,0x48,0x44,0x44,0x00,0x00,0x00, 7, // 0x53 'S' 0x00,0x00,0x38,0x44,0x44,0x40,0x38,0x04,0x04,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x54 'T' 0x00,0x00,0x7c,0x54,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 7, // 0x55 'U' 0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x56 'V' 0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,0x00, 7, // 0x57 'W' 0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x54,0x6c,0x44,0x00,0x00,0x00, 7, // 0x58 'X' 0x00,0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x59 'Y' 0x00,0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00, 7, // 0x5a 'Z' 0x00,0x00,0x7c,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x40,0x7c,0x00,0x00,0x00, 7, // 0x5b '[' 0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,0x00, 7, // 0x5c '\' 0x00,0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00,0x00,0x00, 7, // 0x5d ']' 0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00,0x00, 7, // 0x5e '^' 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, 7, // 0x60 '`' 0x00,0x20,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x61 'a' 0x00,0x00,0x00,0x00,0x38,0x44,0x04,0x3c,0x44,0x44,0x44,0x3a,0x00,0x00,0x00, 7, // 0x62 'b' 0x00,0x00,0x40,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00,0x00, 7, // 0x63 'c' 0x00,0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,0x00, 7, // 0x64 'd' 0x00,0x00,0x04,0x04,0x04,0x3c,0x44,0x44,0x44,0x44,0x44,0x3a,0x00,0x00,0x00, 7, // 0x65 'e' 0x00,0x00,0x00,0x00,0x38,0x44,0x44,0x7c,0x40,0x40,0x44,0x38,0x00,0x00,0x00, 7, // 0x66 'f' 0x00,0x00,0x18,0x24,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00, 7, // 0x67 'g' 0x00,0x00,0x00,0x00,0x3a,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x44,0x38,0x00, 7, // 0x68 'h' 0x00,0x00,0x40,0x40,0x40,0x58,0x64,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x69 'i' 0x00,0x00,0x10,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00, 7, // 0x6a 'j' 0x00,0x00,0x08,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00, 7, // 0x6b 'k' 0x00,0x00,0x40,0x40,0x44,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,0x00, 7, // 0x6c 'l' 0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00, 7, // 0x6d 'm' 0x00,0x00,0x00,0x00,0xa8,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x00,0x00,0x00, 7, // 0x6e 'n' 0x00,0x00,0x00,0x00,0xb8,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x6f 'o' 0x00,0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x70 'p' 0x00,0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00, 7, // 0x71 'q' 0x00,0x00,0x00,0x00,0x3c,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x04,0x04,0x00, 7, // 0x72 'r' 0x00,0x00,0x00,0x00,0x58,0x64,0x44,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x74 't' 0x00,0x00,0x20,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x24,0x18,0x00,0x00,0x00, 7, // 0x75 'u' 0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x3a,0x00,0x00,0x00, 7, // 0x76 'v' 0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,0x00, 7, // 0x77 'w' 0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x54,0x54,0x6c,0x44,0x00,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x08,0x70,0x00, 7, // 0x7a 'z' 0x00,0x00,0x00,0x00,0x7c,0x04,0x08,0x10,0x20,0x40,0x40,0x7c,0x00,0x00,0x00, 7, // 0x7b '{' 0x00,0x0c,0x10,0x10,0x10,0x10,0x10,0x60,0x10,0x10,0x10,0x10,0x0c,0x00,0x00, 7, // 0x7c '|' 0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x00, 7, // 0x7d '}' 0x00,0x60,0x10,0x10,0x10,0x10,0x10,0x0c,0x10,0x10,0x10,0x10,0x60,0x00,0x00, 7, // 0x7e '~' 0x00,0x00,0x64,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x7f '' 0x00,0x00,0x00,0x00,0x00,0x10,0x28,0x44,0x44,0x7c,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u gse7x15_bold[] = { 15, 0, 32, 128-32, 0x00,0x00,0x10,0x00,0x20,0x00,0x30,0x00,0x40,0x00,0x50,0x00,0x60,0x00,0x70,0x00,0x80,0x00, 0x90,0x00,0xa0,0x00,0xb0,0x00,0xc0,0x00,0xd0,0x00,0xe0,0x00,0xf0,0x00,0x00,0x01,0x10,0x01, 0x20,0x01,0x30,0x01,0x40,0x01,0x50,0x01,0x60,0x01,0x70,0x01,0x80,0x01,0x90,0x01,0xa0,0x01, 0xb0,0x01,0xc0,0x01,0xd0,0x01,0xe0,0x01,0xf0,0x01,0x00,0x02,0x10,0x02,0x20,0x02,0x30,0x02, 0x40,0x02,0x50,0x02,0x60,0x02,0x70,0x02,0x80,0x02,0x90,0x02,0xa0,0x02,0xb0,0x02,0xc0,0x02, 0xd0,0x02,0xe0,0x02,0xf0,0x02,0x00,0x03,0x10,0x03,0x20,0x03,0x30,0x03,0x40,0x03,0x50,0x03, 0x60,0x03,0x70,0x03,0x80,0x03,0x90,0x03,0xa0,0x03,0xb0,0x03,0xc0,0x03,0xd0,0x03,0xe0,0x03, 0xf0,0x03,0x00,0x04,0x10,0x04,0x20,0x04,0x30,0x04,0x40,0x04,0x50,0x04,0x60,0x04,0x70,0x04, 0x80,0x04,0x90,0x04,0xa0,0x04,0xb0,0x04,0xc0,0x04,0xd0,0x04,0xe0,0x04,0xf0,0x04,0x00,0x05, 0x10,0x05,0x20,0x05,0x30,0x05,0x40,0x05,0x50,0x05,0x60,0x05,0x70,0x05,0x80,0x05,0x90,0x05, 0xa0,0x05,0xb0,0x05,0xc0,0x05,0xd0,0x05,0xe0,0x05,0xf0,0x05, 7, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x21 '!' 0x00,0x00,0x00,0x30,0x78,0x78,0x78,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00, 7, // 0x22 '"' 0x00,0x00,0x6c,0x6c,0x6c,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x23 '#' 0x00,0x00,0x48,0x48,0x48,0xfc,0x48,0x48,0xfc,0x48,0x48,0x48,0x00,0x00,0x00, 7, // 0x24 '$' 0x00,0x30,0x30,0x78,0xcc,0xe0,0x70,0x38,0x1c,0xcc,0x78,0x30,0x30,0x00,0x00, 7, // 0x25 '%' 0x00,0x00,0x00,0x64,0x6c,0x08,0x18,0x10,0x30,0x20,0x6c,0x4c,0x00,0x00,0x00, 7, // 0x26 '&' 0x00,0x00,0x00,0x30,0x58,0x58,0x30,0x74,0xdc,0xd8,0xd8,0x6c,0x00,0x00,0x00, 7, // 0x27 ''' 0x00,0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x28 '(' 0x00,0x0c,0x18,0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x18,0x0c,0x00,0x00,0x00, 7, // 0x29 ')' 0x00,0xc0,0x60,0x30,0x18,0x18,0x18,0x18,0x18,0x30,0x60,0xc0,0x00,0x00,0x00, 7, // 0x2a '*' 0x00,0x00,0x00,0x00,0x00,0x20,0xa8,0x70,0xa8,0x20,0x00,0x00,0x00,0x00,0x00, 7, // 0x2b '+' 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0xfc,0x30,0x30,0x00,0x00,0x00,0x00,0x00, 7, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00, 7, // 0x2d '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, 7, // 0x2f '/' 0x00,0x00,0x0c,0x0c,0x18,0x18,0x30,0x30,0x60,0x60,0xc0,0xc0,0x00,0x00,0x00, 7, // 0x30 '0' 0x00,0x00,0x78,0xcc,0xcc,0xcc,0xdc,0xec,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00, 7, // 0x31 '1' 0x00,0x00,0x30,0x30,0x70,0xf0,0x30,0x30,0x30,0x30,0x30,0xfc,0x00,0x00,0x00, 7, // 0x32 '2' 0x00,0x00,0x78,0xcc,0xcc,0x0c,0x18,0x30,0x60,0xc0,0xcc,0xfc,0x00,0x00,0x00, 7, // 0x33 '3' 0x00,0x00,0xfc,0x8c,0x18,0x30,0x78,0x0c,0x0c,0x0c,0xcc,0x78,0x00,0x00,0x00, 7, // 0x34 '4' 0x00,0x00,0x18,0x30,0x60,0xc8,0xd8,0xd8,0xfc,0x18,0x18,0x3c,0x00,0x00,0x00, 7, // 0x35 '5' 0x00,0x00,0xfc,0xc0,0xc0,0xc0,0xf8,0x0c,0x0c,0x0c,0xcc,0x78,0x00,0x00,0x00, 7, // 0x36 '6' 0x00,0x00,0x38,0x60,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00, 7, // 0x37 '7' 0x00,0x00,0xfc,0x8c,0x0c,0x0c,0x18,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00, 7, // 0x38 '8' 0x00,0x00,0x78,0xcc,0xcc,0xcc,0x78,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00, 7, // 0x39 '9' 0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x0c,0x18,0x70,0x00,0x00,0x00, 7, // 0x3a ':' 0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00, 7, // 0x3b ';' 0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00, 7, // 0x3c '<' 0x00,0x00,0x00,0x0c,0x18,0x30,0x60,0xc0,0x60,0x30,0x18,0x0c,0x00,0x00,0x00, 7, // 0x3d '=' 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x3e '>' 0x00,0x00,0x00,0xc0,0x60,0x30,0x18,0x0c,0x18,0x30,0x60,0xc0,0x00,0x00,0x00, 7, // 0x3f '?' 0x00,0x00,0x78,0xcc,0xcc,0x18,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00, 7, // 0x40 '@' 0x00,0x00,0x00,0x70,0x88,0x04,0x74,0xb4,0xb4,0xb4,0xb4,0x68,0x00,0x00,0x00, 7, // 0x41 'A' 0x00,0x00,0x30,0x78,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x42 'B' 0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xf8,0xcc,0xcc,0xcc,0xcc,0xf8,0x00,0x00,0x00, 7, // 0x43 'C' 0x00,0x00,0x78,0xcc,0xc4,0xc0,0xc0,0xc0,0xc0,0xc4,0xcc,0x78,0x00,0x00,0x00, 7, // 0x44 'D' 0x00,0x00,0xf0,0xd8,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xd8,0xf0,0x00,0x00,0x00, 7, // 0x45 'E' 0x00,0x00,0xfc,0xc4,0xc0,0xd0,0xf0,0xd0,0xc0,0xc0,0xc4,0xfc,0x00,0x00,0x00, 7, // 0x46 'F' 0x00,0x00,0xfc,0xc4,0xc0,0xd0,0xf0,0xd0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00, 7, // 0x47 'G' 0x00,0x00,0x78,0xcc,0xc0,0xc0,0xc0,0xdc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00, 7, // 0x48 'H' 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x49 'I' 0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, 7, // 0x4a 'J' 0x00,0x00,0x3c,0x18,0x18,0x18,0x18,0x18,0x18,0xd8,0xd8,0x70,0x00,0x00,0x00, 7, // 0x4b 'K' 0x00,0x00,0xcc,0xcc,0xd8,0xd8,0xf0,0xd8,0xd8,0xcc,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x4c 'L' 0x00,0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc4,0xfc,0x00,0x00,0x00, 7, // 0x4d 'M' 0x00,0x00,0x84,0xcc,0xfc,0xb4,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x4e 'N' 0x00,0x00,0xcc,0xcc,0xcc,0xec,0xfc,0xdc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x4f 'O' 0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00, 7, // 0x50 'P' 0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xcc,0xf8,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00, 7, // 0x51 'Q' 0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xdc,0x78,0x18,0x0c,0x00,0x00, 7, // 0x52 'R' 0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xcc,0xf8,0xd8,0xcc,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x53 'S' 0x00,0x00,0x78,0xcc,0xcc,0xe0,0x70,0x38,0x1c,0xcc,0xcc,0x78,0x00,0x00,0x00, 7, // 0x54 'T' 0x00,0x00,0xfc,0xb4,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00, 7, // 0x55 'U' 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00, 7, // 0x56 'V' 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00,0x00, 7, // 0x57 'W' 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xb4,0xfc,0xcc,0x84,0x00,0x00,0x00, 7, // 0x58 'X' 0x00,0x00,0xcc,0xcc,0xcc,0x78,0x30,0x78,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x59 'Y' 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, 7, // 0x5a 'Z' 0x00,0x00,0xfc,0x8c,0x0c,0x18,0x30,0x60,0xc0,0xc0,0xc4,0xfc,0x00,0x00,0x00, 7, // 0x5b '[' 0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x78,0x00,0x00, 7, // 0x5c '\' 0x00,0x00,0xc0,0xc0,0x60,0x60,0x30,0x30,0x18,0x18,0x0c,0x0c,0x00,0x00,0x00, 7, // 0x5d ']' 0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x00,0x00, 7, // 0x5e '^' 0x00,0x10,0x38,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, 7, // 0x60 '`' 0x00,0x30,0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x61 'a' 0x00,0x00,0x00,0x00,0x70,0xd8,0x18,0x78,0xd8,0xd8,0xd8,0x6c,0x00,0x00,0x00, 7, // 0x62 'b' 0x00,0x00,0x60,0x60,0x60,0x78,0x6c,0x6c,0x6c,0x6c,0x6c,0x78,0x00,0x00,0x00, 7, // 0x63 'c' 0x00,0x00,0x00,0x00,0x78,0xcc,0xc0,0xc0,0xc0,0xc0,0xcc,0x78,0x00,0x00,0x00, 7, // 0x64 'd' 0x00,0x00,0x18,0x18,0x18,0x78,0xd8,0xd8,0xd8,0xd8,0xd8,0x6c,0x00,0x00,0x00, 7, // 0x65 'e' 0x00,0x00,0x00,0x00,0x78,0xcc,0xcc,0xfc,0xc0,0xc0,0xcc,0x78,0x00,0x00,0x00, 7, // 0x66 'f' 0x00,0x00,0x30,0x68,0x60,0x60,0xf0,0x60,0x60,0x60,0x60,0xf0,0x00,0x00,0x00, 7, // 0x67 'g' 0x00,0x00,0x00,0x00,0x6c,0xd8,0xd8,0xd8,0xd8,0xd8,0x78,0x18,0xd8,0x70,0x00, 7, // 0x68 'h' 0x00,0x00,0xc0,0xc0,0xc0,0xd8,0xec,0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x69 'i' 0x00,0x00,0x30,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, 7, // 0x6a 'j' 0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0xd8,0xd8,0x70,0x00, 7, // 0x6b 'k' 0x00,0x00,0xc0,0xc0,0xcc,0xcc,0xcc,0xd8,0xf0,0xd8,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x6c 'l' 0x00,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, 7, // 0x6d 'm' 0x00,0x00,0x00,0x00,0xe8,0xfc,0xd4,0xd4,0xd4,0xc4,0xc4,0xc4,0x00,0x00,0x00, 7, // 0x6e 'n' 0x00,0x00,0x00,0x00,0xd8,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,0x00,0x00, 7, // 0x6f 'o' 0x00,0x00,0x00,0x00,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00, 7, // 0x70 'p' 0x00,0x00,0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xcc,0xcc,0xf8,0xc0,0xc0,0xc0,0x00, 7, // 0x71 'q' 0x00,0x00,0x00,0x00,0x7c,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x0c,0x0c,0x00, 7, // 0x72 'r' 0x00,0x00,0x00,0x00,0xd8,0xec,0xcc,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x00,0x78,0xcc,0xe0,0x70,0x38,0x1c,0xcc,0x78,0x00,0x00,0x00, 7, // 0x74 't' 0x00,0x00,0x20,0x60,0x60,0xf0,0x60,0x60,0x60,0x60,0x6c,0x38,0x00,0x00,0x00, 7, // 0x75 'u' 0x00,0x00,0x00,0x00,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0x6c,0x00,0x00,0x00, 7, // 0x76 'v' 0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,0x00,0x00, 7, // 0x77 'w' 0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xb4,0xfc,0xcc,0x84,0x00,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x00,0xcc,0xcc,0x78,0x30,0x78,0xcc,0xcc,0xcc,0x00,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x18,0xf0,0x00, 7, // 0x7a 'z' 0x00,0x00,0x00,0x00,0xfc,0x8c,0x18,0x30,0x60,0xc0,0xc4,0xfc,0x00,0x00,0x00, 7, // 0x7b '{' 0x00,0x1c,0x30,0x30,0x30,0x30,0x30,0xe0,0x30,0x30,0x30,0x30,0x1c,0x00,0x00, 7, // 0x7c '|' 0x00,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x00,0x00, 7, // 0x7d '}' 0x00,0xe0,0x30,0x30,0x30,0x30,0x30,0x1c,0x30,0x30,0x30,0x30,0xe0,0x00,0x00, 7, // 0x7e '~' 0x00,0x00,0x34,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x7f '' 0x00,0x00,0x00,0x00,0x00,0x30,0x78,0xcc,0xcc,0xfc,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u gse8x16[] = { 16, 0, 32, 128-32, 0x00,0x00,0x11,0x00,0x22,0x00,0x33,0x00,0x44,0x00,0x55,0x00,0x66,0x00,0x77,0x00,0x88,0x00, 0x99,0x00,0xaa,0x00,0xbb,0x00,0xcc,0x00,0xdd,0x00,0xee,0x00,0xff,0x00,0x10,0x01,0x21,0x01, 0x32,0x01,0x43,0x01,0x54,0x01,0x65,0x01,0x76,0x01,0x87,0x01,0x98,0x01,0xa9,0x01,0xba,0x01, 0xcb,0x01,0xdc,0x01,0xed,0x01,0xfe,0x01,0x0f,0x02,0x20,0x02,0x31,0x02,0x42,0x02,0x53,0x02, 0x64,0x02,0x75,0x02,0x86,0x02,0x97,0x02,0xa8,0x02,0xb9,0x02,0xca,0x02,0xdb,0x02,0xec,0x02, 0xfd,0x02,0x0e,0x03,0x1f,0x03,0x30,0x03,0x41,0x03,0x52,0x03,0x63,0x03,0x74,0x03,0x85,0x03, 0x96,0x03,0xa7,0x03,0xb8,0x03,0xc9,0x03,0xda,0x03,0xeb,0x03,0xfc,0x03,0x0d,0x04,0x1e,0x04, 0x2f,0x04,0x40,0x04,0x51,0x04,0x62,0x04,0x73,0x04,0x84,0x04,0x95,0x04,0xa6,0x04,0xb7,0x04, 0xc8,0x04,0xd9,0x04,0xea,0x04,0xfb,0x04,0x0c,0x05,0x1d,0x05,0x2e,0x05,0x3f,0x05,0x50,0x05, 0x61,0x05,0x72,0x05,0x83,0x05,0x94,0x05,0xa5,0x05,0xb6,0x05,0xc7,0x05,0xd8,0x05,0xe9,0x05, 0xfa,0x05,0x0b,0x06,0x1c,0x06,0x2d,0x06,0x3e,0x06,0x4f,0x06, 8, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x21 '!' 0x00,0x00,0x10,0x38,0x38,0x38,0x38,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00,0x00, 8, // 0x22 '"' 0x00,0x24,0x24,0x24,0x24,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x23 '#' 0x00,0x00,0x24,0x24,0x24,0x7e,0x24,0x24,0x7e,0x24,0x24,0x24,0x00,0x00,0x00,0x00, 8, // 0x24 '$' 0x00,0x14,0x14,0x3e,0x55,0x54,0x54,0x3e,0x15,0x15,0x55,0x3e,0x14,0x14,0x00,0x00, 8, // 0x25 '%' 0x00,0x00,0x32,0x56,0x6c,0x04,0x08,0x08,0x10,0x13,0x25,0x26,0x00,0x00,0x00,0x00, 8, // 0x26 '&' 0x00,0x00,0x18,0x24,0x24,0x24,0x18,0x28,0x45,0x46,0x44,0x3b,0x00,0x00,0x00,0x00, 8, // 0x27 ''' 0x00,0x00,0x08,0x08,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x28 '(' 0x00,0x04,0x08,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0x10,0x08,0x04,0x00,0x00,0x00, 8, // 0x29 ')' 0x00,0x10,0x08,0x04,0x04,0x02,0x02,0x02,0x02,0x04,0x04,0x08,0x10,0x00,0x00,0x00, 8, // 0x2a '*' 0x00,0x00,0x00,0x00,0x66,0x24,0x18,0xff,0x18,0x24,0x66,0x00,0x00,0x00,0x00,0x00, 8, // 0x2b '+' 0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x7f,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00, 8, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x20,0x00, 8, // 0x2d '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, 8, // 0x2f '/' 0x00,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00,0x00, 8, // 0x30 '0' 0x00,0x00,0x3c,0x42,0x42,0x46,0x4a,0x52,0x62,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x31 '1' 0x00,0x00,0x08,0x08,0x18,0x38,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, 8, // 0x32 '2' 0x00,0x00,0x3c,0x42,0x42,0x02,0x04,0x08,0x10,0x20,0x42,0x7e,0x00,0x00,0x00,0x00, 8, // 0x33 '3' 0x00,0x00,0x7e,0x42,0x04,0x08,0x1c,0x02,0x02,0x02,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x34 '4' 0x00,0x00,0x04,0x08,0x10,0x24,0x44,0x44,0x7e,0x04,0x04,0x0e,0x00,0x00,0x00,0x00, 8, // 0x35 '5' 0x00,0x00,0x7e,0x42,0x40,0x40,0x7c,0x02,0x02,0x02,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x36 '6' 0x00,0x00,0x1c,0x20,0x40,0x40,0x7c,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x37 '7' 0x00,0x00,0x7e,0x42,0x42,0x02,0x04,0x08,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00, 8, // 0x38 '8' 0x00,0x00,0x3c,0x42,0x42,0x42,0x3c,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x39 '9' 0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x3e,0x02,0x02,0x04,0x38,0x00,0x00,0x00,0x00, 8, // 0x3a ':' 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x3b ';' 0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x40,0x00, 8, // 0x3c '<' 0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x02,0x00,0x00,0x00,0x00, 8, // 0x3d '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x3e '>' 0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x00,0x00, 8, // 0x3f '?' 0x00,0x00,0x3c,0x42,0x42,0x42,0x04,0x08,0x08,0x00,0x08,0x08,0x00,0x00,0x00,0x00, 8, // 0x40 '@' 0x00,0x00,0x3c,0x42,0x01,0x39,0x49,0x49,0x49,0x49,0x49,0x36,0x00,0x00,0x00,0x00, 8, // 0x41 'A' 0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x7e,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00, 8, // 0x42 'B' 0x00,0x00,0x7c,0x22,0x22,0x22,0x3c,0x22,0x22,0x22,0x22,0x7c,0x00,0x00,0x00,0x00, 8, // 0x43 'C' 0x00,0x00,0x3c,0x42,0x42,0x40,0x40,0x40,0x40,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x44 'D' 0x00,0x00,0x7c,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7c,0x00,0x00,0x00,0x00, 8, // 0x45 'E' 0x00,0x00,0x7e,0x22,0x20,0x28,0x38,0x28,0x20,0x20,0x22,0x7e,0x00,0x00,0x00,0x00, 8, // 0x46 'F' 0x00,0x00,0x7e,0x22,0x20,0x28,0x38,0x28,0x20,0x20,0x20,0x70,0x00,0x00,0x00,0x00, 8, // 0x47 'G' 0x00,0x00,0x3c,0x42,0x42,0x40,0x40,0x4e,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x48 'H' 0x00,0x00,0x42,0x42,0x42,0x42,0x7e,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00, 8, // 0x49 'I' 0x00,0x00,0x1c,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00, 8, // 0x4a 'J' 0x00,0x00,0x0e,0x04,0x04,0x04,0x04,0x04,0x04,0x44,0x44,0x38,0x00,0x00,0x00,0x00, 8, // 0x4b 'K' 0x00,0x00,0x62,0x22,0x24,0x28,0x30,0x28,0x24,0x22,0x22,0x62,0x00,0x00,0x00,0x00, 8, // 0x4c 'L' 0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x7e,0x00,0x00,0x00,0x00, 8, // 0x4d 'M' 0x00,0x00,0x41,0x63,0x55,0x49,0x41,0x41,0x41,0x41,0x41,0x41,0x00,0x00,0x00,0x00, 8, // 0x4e 'N' 0x00,0x00,0x42,0x42,0x62,0x52,0x4a,0x46,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00, 8, // 0x4f 'O' 0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x50 'P' 0x00,0x00,0x7c,0x22,0x22,0x22,0x22,0x3c,0x20,0x20,0x20,0x70,0x00,0x00,0x00,0x00, 8, // 0x51 'Q' 0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x4a,0x44,0x3a,0x02,0x00,0x00,0x00, 8, // 0x52 'R' 0x00,0x00,0x7c,0x22,0x22,0x22,0x22,0x3c,0x28,0x24,0x22,0x62,0x00,0x00,0x00,0x00, 8, // 0x53 'S' 0x00,0x00,0x3c,0x42,0x42,0x40,0x30,0x0c,0x02,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x54 'T' 0x00,0x00,0x7f,0x49,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00, 8, // 0x55 'U' 0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x56 'V' 0x00,0x00,0x41,0x41,0x41,0x41,0x22,0x22,0x14,0x14,0x08,0x08,0x00,0x00,0x00,0x00, 8, // 0x57 'W' 0x00,0x00,0x41,0x41,0x41,0x41,0x41,0x49,0x49,0x55,0x63,0x41,0x00,0x00,0x00,0x00, 8, // 0x58 'X' 0x00,0x00,0x42,0x42,0x42,0x24,0x18,0x18,0x24,0x42,0x42,0x42,0x00,0x00,0x00,0x00, 8, // 0x59 'Y' 0x00,0x00,0x22,0x22,0x22,0x22,0x14,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00, 8, // 0x5a 'Z' 0x00,0x00,0x7e,0x42,0x02,0x04,0x08,0x10,0x20,0x40,0x42,0x7e,0x00,0x00,0x00,0x00, 8, // 0x5b '[' 0x00,0x1e,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1e,0x00,0x00,0x00, 8, // 0x5c '\' 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x00,0x00,0x00, 8, // 0x5d ']' 0x00,0x3c,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3c,0x00,0x00,0x00, 8, // 0x5e '^' 0x00,0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00, 8, // 0x60 '`' 0x00,0x00,0x08,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x04,0x3c,0x44,0x44,0x3e,0x00,0x00,0x00,0x00, 8, // 0x62 'b' 0x00,0x00,0x60,0x20,0x20,0x38,0x24,0x22,0x22,0x22,0x22,0x3c,0x00,0x00,0x00,0x00, 8, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x40,0x40,0x40,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x64 'd' 0x00,0x00,0x0c,0x04,0x04,0x1c,0x24,0x44,0x44,0x44,0x44,0x3e,0x00,0x00,0x00,0x00, 8, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x42,0x7e,0x40,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x66 'f' 0x00,0x00,0x0c,0x12,0x10,0x10,0x38,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,0x00, 8, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x3e,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x44,0x38,0x00, 8, // 0x68 'h' 0x00,0x00,0x60,0x20,0x20,0x2c,0x32,0x22,0x22,0x22,0x22,0x62,0x00,0x00,0x00,0x00, 8, // 0x69 'i' 0x00,0x00,0x08,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00, 8, // 0x6a 'j' 0x00,0x00,0x04,0x04,0x00,0x0c,0x04,0x04,0x04,0x04,0x04,0x44,0x44,0x38,0x00,0x00, 8, // 0x6b 'k' 0x00,0x00,0x60,0x20,0x20,0x22,0x24,0x28,0x38,0x24,0x22,0x62,0x00,0x00,0x00,0x00, 8, // 0x6c 'l' 0x00,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1c,0x00,0x00,0x00,0x00, 8, // 0x6d 'm' 0x00,0x00,0x00,0x00,0x00,0x76,0x49,0x49,0x49,0x49,0x41,0x41,0x00,0x00,0x00,0x00, 8, // 0x6e 'n' 0x00,0x00,0x00,0x00,0x00,0x5c,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x00, 8, // 0x6f 'o' 0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x7c,0x22,0x22,0x22,0x22,0x22,0x3c,0x20,0x20,0x70,0x00, 8, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x3e,0x44,0x44,0x44,0x44,0x44,0x3c,0x04,0x04,0x0e,0x00, 8, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x7c,0x22,0x22,0x20,0x20,0x20,0x70,0x00,0x00,0x00,0x00, 8, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x40,0x3c,0x02,0x42,0x3c,0x00,0x00,0x00,0x00, 8, // 0x74 't' 0x00,0x00,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,0x12,0x0c,0x00,0x00,0x00,0x00, 8, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3e,0x00,0x00,0x00,0x00, 8, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x41,0x41,0x41,0x41,0x22,0x14,0x08,0x00,0x00,0x00,0x00, 8, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x41,0x41,0x41,0x49,0x49,0x55,0x22,0x00,0x00,0x00,0x00, 8, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x00,0x00,0x00,0x00, 8, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x02,0x04,0x78,0x00, 8, // 0x7a 'z' 0x00,0x00,0x00,0x00,0x00,0x7e,0x44,0x08,0x10,0x20,0x42,0x7e,0x00,0x00,0x00,0x00, 8, // 0x7b '{' 0x00,0x06,0x08,0x08,0x08,0x08,0x08,0x30,0x08,0x08,0x08,0x08,0x08,0x06,0x00,0x00, 8, // 0x7c '|' 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00, 8, // 0x7d '}' 0x00,0x30,0x08,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00, 8, // 0x7e '~' 0x00,0x00,0x39,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x7f '' 0x00,0x00,0x00,0x00,0x00,0x08,0x14,0x22,0x41,0x41,0x7f,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u gse8x16_bold[] = { 16, 0, 32, 128-32, 0x00,0x00,0x11,0x00,0x22,0x00,0x33,0x00,0x44,0x00,0x55,0x00,0x66,0x00,0x77,0x00,0x88,0x00, 0x99,0x00,0xaa,0x00,0xbb,0x00,0xcc,0x00,0xdd,0x00,0xee,0x00,0xff,0x00,0x10,0x01,0x21,0x01, 0x32,0x01,0x43,0x01,0x54,0x01,0x65,0x01,0x76,0x01,0x87,0x01,0x98,0x01,0xa9,0x01,0xba,0x01, 0xcb,0x01,0xdc,0x01,0xed,0x01,0xfe,0x01,0x0f,0x02,0x20,0x02,0x31,0x02,0x42,0x02,0x53,0x02, 0x64,0x02,0x75,0x02,0x86,0x02,0x97,0x02,0xa8,0x02,0xb9,0x02,0xca,0x02,0xdb,0x02,0xec,0x02, 0xfd,0x02,0x0e,0x03,0x1f,0x03,0x30,0x03,0x41,0x03,0x52,0x03,0x63,0x03,0x74,0x03,0x85,0x03, 0x96,0x03,0xa7,0x03,0xb8,0x03,0xc9,0x03,0xda,0x03,0xeb,0x03,0xfc,0x03,0x0d,0x04,0x1e,0x04, 0x2f,0x04,0x40,0x04,0x51,0x04,0x62,0x04,0x73,0x04,0x84,0x04,0x95,0x04,0xa6,0x04,0xb7,0x04, 0xc8,0x04,0xd9,0x04,0xea,0x04,0xfb,0x04,0x0c,0x05,0x1d,0x05,0x2e,0x05,0x3f,0x05,0x50,0x05, 0x61,0x05,0x72,0x05,0x83,0x05,0x94,0x05,0xa5,0x05,0xb6,0x05,0xc7,0x05,0xd8,0x05,0xe9,0x05, 0xfa,0x05,0x0b,0x06,0x1c,0x06,0x2d,0x06,0x3e,0x06,0x4f,0x06, 8, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x21 '!' 0x00,0x00,0x18,0x3c,0x3c,0x3c,0x3c,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, 8, // 0x22 '"' 0x00,0x66,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x23 '#' 0x00,0x00,0x66,0x66,0x66,0xff,0x66,0x66,0xff,0x66,0x66,0x66,0x00,0x00,0x00,0x00, 8, // 0x24 '$' 0x00,0x08,0x08,0x3e,0x6b,0x6b,0x68,0x3e,0x0b,0x6b,0x6b,0x3e,0x08,0x08,0x00,0x00, 8, // 0x25 '%' 0x00,0x00,0x66,0xbe,0xcc,0x0c,0x18,0x18,0x30,0x33,0x65,0x66,0x00,0x00,0x00,0x00, 8, // 0x26 '&' 0x00,0x00,0x1c,0x36,0x36,0x36,0x1c,0x3b,0x6e,0x66,0x66,0x3b,0x00,0x00,0x00,0x00, 8, // 0x27 ''' 0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x28 '(' 0x00,0x06,0x0c,0x18,0x18,0x30,0x30,0x30,0x30,0x18,0x18,0x0c,0x06,0x00,0x00,0x00, 8, // 0x29 ')' 0x00,0x30,0x18,0x0c,0x0c,0x06,0x06,0x06,0x06,0x0c,0x0c,0x18,0x30,0x00,0x00,0x00, 8, // 0x2a '*' 0x00,0x00,0x00,0x00,0x66,0x24,0x18,0xff,0x18,0x24,0x66,0x00,0x00,0x00,0x00,0x00, 8, // 0x2b '+' 0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xff,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, 8, // 0x2c ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x20,0x00, 8, // 0x2d '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x2e '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, 8, // 0x2f '/' 0x00,0x03,0x03,0x06,0x06,0x0c,0x0c,0x18,0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00, 8, // 0x30 '0' 0x00,0x00,0x3e,0x63,0x63,0x67,0x6b,0x73,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x31 '1' 0x00,0x00,0x0c,0x0c,0x1c,0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3f,0x00,0x00,0x00,0x00, 8, // 0x32 '2' 0x00,0x00,0x3e,0x63,0x63,0x03,0x06,0x0c,0x18,0x30,0x61,0x7f,0x00,0x00,0x00,0x00, 8, // 0x33 '3' 0x00,0x00,0x7f,0x43,0x06,0x0c,0x1e,0x03,0x03,0x03,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x34 '4' 0x00,0x00,0x06,0x0c,0x18,0x32,0x66,0x66,0x7f,0x06,0x06,0x0f,0x00,0x00,0x00,0x00, 8, // 0x35 '5' 0x00,0x00,0x7f,0x61,0x60,0x60,0x7e,0x03,0x03,0x03,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x36 '6' 0x00,0x00,0x1e,0x30,0x60,0x60,0x7e,0x63,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x37 '7' 0x00,0x00,0x7f,0x63,0x63,0x03,0x06,0x0c,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, 8, // 0x38 '8' 0x00,0x00,0x3e,0x63,0x63,0x63,0x3e,0x63,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x39 '9' 0x00,0x00,0x3e,0x63,0x63,0x63,0x63,0x3f,0x03,0x03,0x06,0x3c,0x00,0x00,0x00,0x00, 8, // 0x3a ':' 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, 8, // 0x3b ';' 0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x40,0x00, 8, // 0x3c '<' 0x00,0x00,0x00,0x06,0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x06,0x00,0x00,0x00,0x00, 8, // 0x3d '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x3e '>' 0x00,0x00,0x00,0x30,0x18,0x0c,0x06,0x03,0x06,0x0c,0x18,0x30,0x00,0x00,0x00,0x00, 8, // 0x3f '?' 0x00,0x00,0x3e,0x63,0x63,0x63,0x06,0x0c,0x0c,0x00,0x0c,0x0c,0x00,0x00,0x00,0x00, 8, // 0x40 '@' 0x00,0x00,0x7c,0x86,0x03,0x73,0xdb,0xdb,0xdb,0xdb,0xdb,0x6e,0x00,0x00,0x00,0x00, 8, // 0x41 'A' 0x00,0x00,0x08,0x1c,0x36,0x63,0x63,0x63,0x7f,0x63,0x63,0x63,0x00,0x00,0x00,0x00, 8, // 0x42 'B' 0x00,0x00,0x7e,0x33,0x33,0x33,0x3e,0x33,0x33,0x33,0x33,0x7e,0x00,0x00,0x00,0x00, 8, // 0x43 'C' 0x00,0x00,0x1e,0x33,0x61,0x60,0x60,0x60,0x60,0x61,0x33,0x1e,0x00,0x00,0x00,0x00, 8, // 0x44 'D' 0x00,0x00,0x7c,0x36,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x7c,0x00,0x00,0x00,0x00, 8, // 0x45 'E' 0x00,0x00,0x7f,0x33,0x31,0x34,0x3c,0x34,0x30,0x31,0x33,0x7f,0x00,0x00,0x00,0x00, 8, // 0x46 'F' 0x00,0x00,0x7f,0x33,0x31,0x34,0x3c,0x34,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, 8, // 0x47 'G' 0x00,0x00,0x1f,0x33,0x61,0x60,0x60,0x6f,0x63,0x63,0x33,0x1e,0x00,0x00,0x00,0x00, 8, // 0x48 'H' 0x00,0x00,0x63,0x63,0x63,0x63,0x7f,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00, 8, // 0x49 'I' 0x00,0x00,0x1e,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00, 8, // 0x4a 'J' 0x00,0x00,0x0f,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3c,0x00,0x00,0x00,0x00, 8, // 0x4b 'K' 0x00,0x00,0x73,0x33,0x36,0x36,0x3c,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00, 8, // 0x4c 'L' 0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x33,0x7f,0x00,0x00,0x00,0x00, 8, // 0x4d 'M' 0x00,0x00,0x63,0x63,0x77,0x77,0x7f,0x6b,0x6b,0x63,0x63,0x63,0x00,0x00,0x00,0x00, 8, // 0x4e 'N' 0x00,0x00,0x63,0x63,0x73,0x7b,0x6f,0x67,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00, 8, // 0x4f 'O' 0x00,0x00,0x1c,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1c,0x00,0x00,0x00,0x00, 8, // 0x50 'P' 0x00,0x00,0x7e,0x33,0x33,0x33,0x33,0x3e,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, 8, // 0x51 'Q' 0x00,0x00,0x1c,0x36,0x63,0x63,0x63,0x63,0x63,0x6f,0x36,0x1e,0x03,0x00,0x00,0x00, 8, // 0x52 'R' 0x00,0x00,0x7e,0x33,0x33,0x33,0x33,0x3e,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00, 8, // 0x53 'S' 0x00,0x00,0x3e,0x63,0x63,0x30,0x18,0x0c,0x06,0x63,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x54 'T' 0x00,0x00,0x3f,0x3f,0x2d,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00, 8, // 0x55 'U' 0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x56 'V' 0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1c,0x08,0x00,0x00,0x00,0x00, 8, // 0x57 'W' 0x00,0x00,0x63,0x63,0x63,0x6b,0x6b,0x7f,0x77,0x77,0x63,0x63,0x00,0x00,0x00,0x00, 8, // 0x58 'X' 0x00,0x00,0x63,0x63,0x63,0x36,0x1c,0x1c,0x36,0x63,0x63,0x63,0x00,0x00,0x00,0x00, 8, // 0x59 'Y' 0x00,0x00,0x33,0x33,0x33,0x33,0x1e,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00, 8, // 0x5a 'Z' 0x00,0x00,0x7f,0x63,0x43,0x06,0x0c,0x18,0x30,0x61,0x63,0x7f,0x00,0x00,0x00,0x00, 8, // 0x5b '[' 0x00,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1f,0x00,0x00,0x00, 8, // 0x5c '\' 0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x0c,0x0c,0x06,0x06,0x03,0x03,0x00,0x00,0x00, 8, // 0x5d ']' 0x00,0x7c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x7c,0x00,0x00,0x00, 8, // 0x5e '^' 0x00,0x00,0x08,0x1c,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x5f '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00, 8, // 0x60 '`' 0x00,0x00,0x18,0x18,0x18,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x3c,0x66,0x06,0x3e,0x66,0x66,0x3b,0x00,0x00,0x00,0x00, 8, // 0x62 'b' 0x00,0x00,0x70,0x30,0x30,0x3c,0x36,0x33,0x33,0x33,0x33,0x3e,0x00,0x00,0x00,0x00, 8, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x3e,0x63,0x63,0x60,0x60,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x64 'd' 0x00,0x00,0x0e,0x06,0x06,0x1e,0x36,0x66,0x66,0x66,0x66,0x3b,0x00,0x00,0x00,0x00, 8, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x3e,0x63,0x63,0x7f,0x60,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x66 'f' 0x00,0x00,0x0e,0x1b,0x1b,0x18,0x3c,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, 8, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x3b,0x66,0x66,0x66,0x66,0x66,0x3e,0x06,0x66,0x3c,0x00, 8, // 0x68 'h' 0x00,0x00,0x70,0x30,0x30,0x36,0x3b,0x33,0x33,0x33,0x33,0x73,0x00,0x00,0x00,0x00, 8, // 0x69 'i' 0x00,0x00,0x0c,0x0c,0x00,0x1c,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00, 8, // 0x6a 'j' 0x00,0x00,0x06,0x06,0x00,0x0e,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3c,0x00,0x00, 8, // 0x6b 'k' 0x00,0x00,0x70,0x30,0x30,0x33,0x33,0x36,0x3c,0x36,0x33,0x73,0x00,0x00,0x00,0x00, 8, // 0x6c 'l' 0x00,0x00,0x1c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00, 8, // 0x6d 'm' 0x00,0x00,0x00,0x00,0x00,0x76,0x7f,0x6b,0x6b,0x6b,0x63,0x63,0x00,0x00,0x00,0x00, 8, // 0x6e 'n' 0x00,0x00,0x00,0x00,0x00,0x6e,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00, 8, // 0x6f 'o' 0x00,0x00,0x00,0x00,0x00,0x3e,0x63,0x63,0x63,0x63,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x6e,0x33,0x33,0x33,0x33,0x33,0x3e,0x30,0x30,0x78,0x00, 8, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x3b,0x66,0x66,0x66,0x66,0x66,0x3e,0x06,0x06,0x0f,0x00, 8, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x6e,0x3b,0x33,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, 8, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x3e,0x63,0x60,0x3e,0x03,0x63,0x3e,0x00,0x00,0x00,0x00, 8, // 0x74 't' 0x00,0x00,0x08,0x18,0x18,0x7e,0x18,0x18,0x18,0x18,0x1b,0x0e,0x00,0x00,0x00,0x00, 8, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3b,0x00,0x00,0x00,0x00, 8, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x36,0x1c,0x08,0x00,0x00,0x00,0x00, 8, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x6b,0x6b,0x7f,0x36,0x36,0x00,0x00,0x00,0x00, 8, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x36,0x1c,0x36,0x63,0x63,0x00,0x00,0x00,0x00, 8, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x3f,0x03,0x06,0x7c,0x00, 8, // 0x7a 'z' 0x00,0x00,0x00,0x00,0x00,0x7f,0x63,0x06,0x0c,0x18,0x31,0x7f,0x00,0x00,0x00,0x00, 8, // 0x7b '{' 0x00,0x03,0x04,0x0c,0x0c,0x0c,0x08,0x30,0x08,0x0c,0x0c,0x0c,0x04,0x03,0x00,0x00, 8, // 0x7c '|' 0x00,0x00,0x0c,0x0c,0x0c,0x0c,0x0c,0x00,0x0c,0x0c,0x0c,0x0c,0x0c,0x00,0x00,0x00, 8, // 0x7d '}' 0x00,0x60,0x10,0x18,0x18,0x18,0x08,0x06,0x08,0x18,0x18,0x18,0x10,0x60,0x00,0x00, 8, // 0x7e '~' 0x00,0x00,0x3b,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x7f '' 0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x36,0x63,0x63,0x7f,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u mcs11_prop[] = { 11, 2, 32, 128-32, 0x00,0x00,0x0C,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3C,0x00,0x48,0x00,0x54,0x00,0x60,0x00, 0x6C,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9C,0x00,0xA8,0x00,0xB4,0x00,0xC0,0x00,0xCC,0x00, 0xD8,0x00,0xE4,0x00,0xF0,0x00,0xFC,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2C,0x01,0x38,0x01, 0x44,0x01,0x50,0x01,0x5C,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8C,0x01,0x98,0x01,0xA4,0x01, 0xB0,0x01,0xBC,0x01,0xC8,0x01,0xD4,0x01,0xE0,0x01,0xEC,0x01,0xF8,0x01,0x04,0x02,0x10,0x02, 0x1C,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4C,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7C,0x02, 0x88,0x02,0x94,0x02,0xA0,0x02,0xAC,0x02,0xB8,0x02,0xC4,0x02,0xD0,0x02,0xDC,0x02,0xE8,0x02, 0xF4,0x02,0x00,0x03,0x0C,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3C,0x03,0x48,0x03,0x54,0x03, 0x60,0x03,0x6C,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9C,0x03,0xA8,0x03,0xB4,0x03,0xC0,0x03, 0xCC,0x03,0xD8,0x03,0xE4,0x03,0xF0,0x03,0xFC,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2C,0x04, 0x38,0x04,0x44,0x04,0x50,0x04,0x5C,0x04,0x68,0x04,0x74,0x04, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x21 '!' 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00, 4, // 0x22 '"' 0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x23 '#' 0x00,0x28,0x28,0x7C,0x28,0x28,0x28,0x7C,0x28,0x28,0x00, 6, // 0x24 '$' 0x10,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x10, 6, // 0x25 '%' 0x00,0x00,0x68,0xA8,0xD0,0x10,0x20,0x2C,0x54,0x58,0x00, 6, // 0x26 '&' 0x00,0x20,0x50,0x50,0x50,0x20,0x54,0x54,0x48,0x34,0x00, 3, // 0x27 ''' 0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x28 '(' 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10, 5, // 0x29 ')' 0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40, 6, // 0x2A '*' 0x00,0x00,0x28,0x7C,0x38,0x7C,0x28,0x00,0x00,0x00,0x00, 6, // 0x2B '+' 0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00, 4, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0xC0, 6, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00, 4, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00, 7, // 0x2F '/' 0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40, 6, // 0x30 '0' 0x00,0x38,0x44,0x44,0x54,0x54,0x54,0x44,0x44,0x38,0x00, 4, // 0x31 '1' 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 6, // 0x32 '2' 0x00,0x38,0x44,0x44,0x04,0x08,0x10,0x20,0x40,0x7C,0x00, 6, // 0x33 '3' 0x00,0x38,0x44,0x04,0x04,0x38,0x04,0x04,0x44,0x38,0x00, 6, // 0x34 '4' 0x00,0x08,0x18,0x18,0x28,0x28,0x48,0x7C,0x08,0x08,0x00, 6, // 0x35 '5' 0x00,0x7C,0x40,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00, 6, // 0x36 '6' 0x00,0x38,0x44,0x40,0x40,0x78,0x44,0x44,0x44,0x38,0x00, 6, // 0x37 '7' 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x00, 6, // 0x38 '8' 0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00, 6, // 0x39 '9' 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00, 4, // 0x3A ':' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00, 4, // 0x3B ';' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0xC0, 6, // 0x3C '<' 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00, 6, // 0x3D '=' 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00, 6, // 0x3E '>' 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00, 6, // 0x3F '?' 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00, 6, // 0x40 '@' 0x00,0x38,0x44,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00, 6, // 0x41 'A' 0x00,0x38,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00, 6, // 0x42 'B' 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00, 6, // 0x43 'C' 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x40,0x44,0x38,0x00, 6, // 0x44 'D' 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00, 6, // 0x45 'E' 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00, 6, // 0x46 'F' 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00, 6, // 0x47 'G' 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x44,0x4C,0x34,0x00, 6, // 0x48 'H' 0x00,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00, 4, // 0x49 'I' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00, 6, // 0x4A 'J' 0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x08,0x48,0x30,0x00, 6, // 0x4B 'K' 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x44,0x00, 6, // 0x4C 'L' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00, 8, // 0x4D 'M' 0x00,0x41,0x63,0x55,0x49,0x49,0x41,0x41,0x41,0x41,0x00, 7, // 0x4E 'N' 0x00,0x42,0x42,0x62,0x52,0x4A,0x46,0x42,0x42,0x42,0x00, 6, // 0x4F 'O' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00, 6, // 0x50 'P' 0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x40,0x00, 6, // 0x51 'Q' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00, 6, // 0x52 'R' 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x44,0x00, 6, // 0x53 'S' 0x00,0x38,0x44,0x40,0x40,0x38,0x04,0x04,0x44,0x38,0x00, 6, // 0x54 'T' 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00, 6, // 0x55 'U' 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00, 6, // 0x56 'V' 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00, 8, // 0x57 'W' 0x00,0x41,0x41,0x41,0x41,0x49,0x49,0x49,0x55,0x22,0x00, 6, // 0x58 'X' 0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00, 6, // 0x59 'Y' 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x10,0x00, 6, // 0x5A 'Z' 0x00,0x7C,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00, 5, // 0x5B '[' 0x30,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30, 7, // 0x5C '\' 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00, 4, // 0x5D ']' 0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60, 6, // 0x5E '^' 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00, 4, // 0x60 '`' 0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x61 'a' 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00, 6, // 0x62 'b' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00, 6, // 0x64 'd' 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x00, 6, // 0x65 'e' 0x00,0x00,0x00,0x38,0x44,0x44,0x7C,0x40,0x44,0x38,0x00, 4, // 0x66 'f' 0x00,0x10,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 6, // 0x67 'g' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x3C,0x04,0x44,0x38, 6, // 0x68 'h' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00, 2, // 0x69 'i' 0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, 3, // 0x6A 'j' 0x00,0x20,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x40, 5, // 0x6B 'k' 0x00,0x40,0x40,0x48,0x50,0x60,0x60,0x50,0x48,0x48,0x00, 2, // 0x6C 'l' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, 8, // 0x6D 'm' 0x00,0x00,0x00,0x76,0x49,0x49,0x49,0x49,0x41,0x41,0x00, 6, // 0x6E 'n' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00, 6, // 0x6F 'o' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00, 6, // 0x70 'p' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40, 6, // 0x71 'q' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x04, 6, // 0x72 'r' 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x20,0x20,0x00, 6, // 0x73 's' 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00, 5, // 0x74 't' 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x28,0x10,0x00, 6, // 0x75 'u' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x4C,0x34,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00, 8, // 0x77 'w' 0x00,0x00,0x00,0x41,0x41,0x41,0x41,0x49,0x49,0x36,0x00, 6, // 0x78 'x' 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00, 6, // 0x79 'y' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x3C,0x04,0x08,0x70, 6, // 0x7A 'z' 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00, 5, // 0x7B '{' 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18, 3, // 0x7C '|' 0x00,0x40,0x40,0x40,0x40,0x00,0x40,0x40,0x40,0x40,0x00, 5, // 0x7D '}' 0xC0,0x20,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0x20,0xC0, 6, // 0x7E '~' 0x00,0x24,0x54,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x7F '' 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00, 0 }; const int8u mcs11_prop_condensed[] = { 11, 2, 32, 128-32, 0x00,0x00,0x0C,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3C,0x00,0x48,0x00,0x54,0x00,0x60,0x00, 0x6C,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9C,0x00,0xA8,0x00,0xB4,0x00,0xC0,0x00,0xCC,0x00, 0xD8,0x00,0xE4,0x00,0xF0,0x00,0xFC,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2C,0x01,0x38,0x01, 0x44,0x01,0x50,0x01,0x5C,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8C,0x01,0x98,0x01,0xA4,0x01, 0xB0,0x01,0xBC,0x01,0xC8,0x01,0xD4,0x01,0xE0,0x01,0xEC,0x01,0xF8,0x01,0x04,0x02,0x10,0x02, 0x1C,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4C,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7C,0x02, 0x88,0x02,0x94,0x02,0xA0,0x02,0xAC,0x02,0xB8,0x02,0xC4,0x02,0xD0,0x02,0xDC,0x02,0xE8,0x02, 0xF4,0x02,0x00,0x03,0x0C,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3C,0x03,0x48,0x03,0x54,0x03, 0x60,0x03,0x6C,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9C,0x03,0xA8,0x03,0xB4,0x03,0xC0,0x03, 0xCC,0x03,0xD8,0x03,0xE4,0x03,0xF0,0x03,0xFC,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2C,0x04, 0x38,0x04,0x44,0x04,0x50,0x04,0x5C,0x04,0x68,0x04,0x74,0x04, 3, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3, // 0x21 '!' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x40,0x00, 4, // 0x22 '"' 0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x23 '#' 0x00,0x50,0x50,0xF8,0x50,0x50,0x50,0xF8,0x50,0x50,0x00, 5, // 0x24 '$' 0x00,0x40,0x60,0x90,0x80,0x60,0x10,0x90,0x60,0x20,0x00, 5, // 0x25 '%' 0x00,0x00,0x90,0x90,0x20,0x20,0x40,0x40,0x90,0x90,0x00, 5, // 0x26 '&' 0x00,0x40,0xA0,0xA0,0xA0,0x40,0xA8,0x90,0x90,0x68,0x00, 5, // 0x27 ''' 0x00,0x00,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10, 4, // 0x29 ')' 0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80, 5, // 0x2A '*' 0x00,0x00,0x90,0x60,0xF0,0x60,0x90,0x00,0x00,0x00,0x00, 5, // 0x2B '+' 0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,0x00, 4, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0xC0, 5, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00, 4, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00, 6, // 0x2F '/' 0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00, 5, // 0x30 '0' 0x00,0x70,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00, 3, // 0x31 '1' 0x00,0x40,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, 5, // 0x32 '2' 0x00,0x60,0x90,0x90,0x10,0x10,0x20,0x40,0x80,0xF0,0x00, 5, // 0x33 '3' 0x00,0x60,0x90,0x10,0x10,0x60,0x10,0x10,0x90,0x60,0x00, 5, // 0x34 '4' 0x00,0x10,0x30,0x30,0x50,0x50,0x90,0xF0,0x10,0x10,0x00, 5, // 0x35 '5' 0x00,0xF0,0x80,0x80,0xE0,0x90,0x10,0x10,0x90,0x60,0x00, 5, // 0x36 '6' 0x00,0x60,0x90,0x80,0x80,0xE0,0x90,0x90,0x90,0x60,0x00, 5, // 0x37 '7' 0x00,0xF0,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x00, 5, // 0x38 '8' 0x00,0x60,0x90,0x90,0x90,0x60,0x90,0x90,0x90,0x60,0x00, 5, // 0x39 '9' 0x00,0x60,0x90,0x90,0x90,0x70,0x10,0x10,0x90,0x60,0x00, 4, // 0x3A ':' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00, 4, // 0x3B ';' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0xC0, 6, // 0x3C '<' 0x00,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x00, 5, // 0x3D '=' 0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0x00, 6, // 0x3E '>' 0x00,0x80,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x80,0x00, 5, // 0x3F '?' 0x00,0x60,0x90,0x10,0x10,0x20,0x40,0x00,0x40,0x00,0x00, 5, // 0x40 '@' 0x00,0x60,0x90,0x90,0xB0,0xB0,0xB0,0x80,0x80,0x70,0x00, 5, // 0x41 'A' 0x00,0x60,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x90,0x00, 5, // 0x42 'B' 0x00,0xE0,0x90,0x90,0x90,0xE0,0x90,0x90,0x90,0xE0,0x00, 5, // 0x43 'C' 0x00,0x60,0x90,0x80,0x80,0x80,0x80,0x80,0x90,0x60,0x00, 5, // 0x44 'D' 0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00, 5, // 0x45 'E' 0x00,0xF0,0x80,0x80,0x80,0xF0,0x80,0x80,0x80,0xF0,0x00, 5, // 0x46 'F' 0x00,0xF0,0x80,0x80,0x80,0xF0,0x80,0x80,0x80,0x80,0x00, 5, // 0x47 'G' 0x00,0x70,0x80,0x80,0x80,0xB0,0x90,0x90,0x90,0x60,0x00, 5, // 0x48 'H' 0x00,0x90,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x90,0x00, 4, // 0x49 'I' 0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xE0,0x00, 5, // 0x4A 'J' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0xA0,0xA0,0x40,0x00, 5, // 0x4B 'K' 0x00,0x90,0x90,0xA0,0xA0,0xC0,0xA0,0xA0,0x90,0x90,0x00, 5, // 0x4C 'L' 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xF0,0x00, 6, // 0x4D 'M' 0x00,0x88,0xD8,0xA8,0xA8,0xA8,0x88,0x88,0x88,0x88,0x00, 5, // 0x4E 'N' 0x00,0x90,0x90,0xD0,0xD0,0xB0,0xB0,0x90,0x90,0x90,0x00, 5, // 0x4F 'O' 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00, 5, // 0x50 'P' 0x00,0xE0,0x90,0x90,0x90,0x90,0xE0,0x80,0x80,0x80,0x00, 5, // 0x51 'Q' 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x30, 5, // 0x52 'R' 0x00,0xE0,0x90,0x90,0x90,0x90,0xE0,0xA0,0x90,0x90,0x00, 5, // 0x53 'S' 0x00,0x60,0x90,0x80,0x80,0x60,0x10,0x10,0x90,0x60,0x00, 6, // 0x54 'T' 0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 5, // 0x55 'U' 0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00, 6, // 0x56 'V' 0x00,0x88,0x88,0x88,0x88,0x50,0x50,0x50,0x20,0x20,0x00, 6, // 0x57 'W' 0x00,0x88,0x88,0x88,0xA8,0xA8,0xA8,0xA8,0xA8,0x50,0x00, 5, // 0x58 'X' 0x00,0x90,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x90,0x00, 6, // 0x59 'Y' 0x00,0x88,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x20,0x00, 5, // 0x5A 'Z' 0x00,0xF0,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0xF0,0x00, 4, // 0x5B '[' 0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x00, 6, // 0x5C '\' 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00, 4, // 0x5D ']' 0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0x00, 5, // 0x5E '^' 0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00, 5, // 0x60 '`' 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x61 'a' 0x00,0x00,0x00,0x60,0x90,0x10,0x70,0x90,0x90,0x70,0x00, 5, // 0x62 'b' 0x00,0x80,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0xE0,0x00, 5, // 0x63 'c' 0x00,0x00,0x00,0x60,0x90,0x80,0x80,0x80,0x90,0x60,0x00, 5, // 0x64 'd' 0x00,0x10,0x10,0x10,0x70,0x90,0x90,0x90,0x90,0x70,0x00, 5, // 0x65 'e' 0x00,0x00,0x00,0x60,0x90,0x90,0xF0,0x80,0x90,0x60,0x00, 4, // 0x66 'f' 0x00,0x20,0x40,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x00, 5, // 0x67 'g' 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0x90,0x60, 5, // 0x68 'h' 0x00,0x80,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0x90,0x00, 2, // 0x69 'i' 0x00,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 4, // 0x6A 'j' 0x00,0x20,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x40, 5, // 0x6B 'k' 0x00,0x80,0x80,0x90,0x90,0xA0,0xC0,0xA0,0x90,0x90,0x00, 2, // 0x6C 'l' 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 6, // 0x6D 'm' 0x00,0x00,0x00,0xD0,0xA8,0xA8,0xA8,0x88,0x88,0x88,0x00, 5, // 0x6E 'n' 0x00,0x00,0x00,0xA0,0xD0,0x90,0x90,0x90,0x90,0x90,0x00, 5, // 0x6F 'o' 0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x60,0x00, 5, // 0x70 'p' 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0x90,0xE0,0x80,0x80, 5, // 0x71 'q' 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x90,0x70,0x10,0x10, 6, // 0x72 'r' 0x00,0x00,0x00,0xB8,0x48,0x40,0x40,0x40,0x40,0x40,0x00, 5, // 0x73 's' 0x00,0x00,0x00,0x60,0x90,0x40,0x20,0x10,0x90,0x60,0x00, 4, // 0x74 't' 0x00,0x40,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x20,0x00, 5, // 0x75 'u' 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x70,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x00, 6, // 0x77 'w' 0x00,0x00,0x00,0x88,0x88,0x88,0xA8,0xA8,0xA8,0x50,0x00, 5, // 0x78 'x' 0x00,0x00,0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x00, 5, // 0x79 'y' 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x70,0x10,0x20,0xC0, 5, // 0x7A 'z' 0x00,0x00,0x00,0xF0,0x10,0x20,0x40,0x80,0x80,0xF0,0x00, 5, // 0x7B '{' 0x30,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30, 3, // 0x7C '|' 0x00,0x40,0x40,0x40,0x40,0x00,0x40,0x40,0x40,0x40,0x00, 5, // 0x7D '}' 0xC0,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xC0, 5, // 0x7E '~' 0x00,0x40,0xA8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x7F '' 0x00,0x20,0x70,0xD8,0x88,0x88,0xF8,0x00,0x00,0x00,0x00, 0 }; const int8u mcs12_prop[] = { 12, 3, 32, 128-32, 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x4E,0x00,0x5B,0x00,0x68,0x00, 0x75,0x00,0x82,0x00,0x8F,0x00,0x9C,0x00,0xA9,0x00,0xB6,0x00,0xC3,0x00,0xD0,0x00,0xDD,0x00, 0xEA,0x00,0xF7,0x00,0x04,0x01,0x11,0x01,0x1E,0x01,0x2B,0x01,0x38,0x01,0x45,0x01,0x52,0x01, 0x5F,0x01,0x6C,0x01,0x79,0x01,0x86,0x01,0x93,0x01,0xA0,0x01,0xAD,0x01,0xBA,0x01,0xC7,0x01, 0xD4,0x01,0xE1,0x01,0xEE,0x01,0xFB,0x01,0x08,0x02,0x15,0x02,0x22,0x02,0x2F,0x02,0x3C,0x02, 0x49,0x02,0x62,0x02,0x6F,0x02,0x7C,0x02,0x89,0x02,0x96,0x02,0xA3,0x02,0xB0,0x02,0xBD,0x02, 0xCA,0x02,0xD7,0x02,0xF0,0x02,0xFD,0x02,0x0A,0x03,0x17,0x03,0x24,0x03,0x31,0x03,0x3E,0x03, 0x4B,0x03,0x58,0x03,0x65,0x03,0x72,0x03,0x7F,0x03,0x8C,0x03,0x99,0x03,0xA6,0x03,0xB3,0x03, 0xC0,0x03,0xCD,0x03,0xDA,0x03,0xE7,0x03,0xF4,0x03,0x01,0x04,0x1A,0x04,0x27,0x04,0x34,0x04, 0x41,0x04,0x4E,0x04,0x5B,0x04,0x68,0x04,0x75,0x04,0x82,0x04,0x8F,0x04,0xA8,0x04,0xB5,0x04, 0xC2,0x04,0xCF,0x04,0xDC,0x04,0xE9,0x04,0xF6,0x04,0x03,0x05, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x21 '!' 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, 4, // 0x22 '"' 0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x23 '#' 0x28,0x28,0x28,0x7C,0x28,0x28,0x28,0x7C,0x28,0x28,0x28,0x00, 6, // 0x24 '$' 0x10,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x10,0x00, 7, // 0x25 '%' 0x32,0x54,0x64,0x08,0x08,0x10,0x10,0x26,0x2A,0x4C,0x00,0x00, 7, // 0x26 '&' 0x00,0x30,0x48,0x48,0x48,0x30,0x4A,0x4A,0x44,0x3A,0x00,0x00, 3, // 0x27 ''' 0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x00, 5, // 0x29 ')' 0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x00, 6, // 0x2A '*' 0x00,0x00,0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x00, 6, // 0x2B '+' 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00, 4, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x40,0x80, 6, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00, 4, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00, 7, // 0x2F '/' 0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00, 7, // 0x30 '0' 0x00,0x38,0x44,0x44,0x54,0x54,0x54,0x44,0x44,0x38,0x00,0x00, 4, // 0x31 '1' 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00, 7, // 0x32 '2' 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00, 7, // 0x33 '3' 0x00,0x38,0x44,0x04,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00, 6, // 0x34 '4' 0x00,0x08,0x18,0x28,0x28,0x48,0x48,0x7C,0x08,0x08,0x00,0x00, 7, // 0x35 '5' 0x00,0x7C,0x40,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x36 '6' 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x37 '7' 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x00,0x00, 7, // 0x38 '8' 0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x39 '9' 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00,0x00, 4, // 0x3A ':' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00,0x00, 4, // 0x3B ';' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x40,0x80, 6, // 0x3C '<' 0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00, 6, // 0x3D '=' 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00, 6, // 0x3E '>' 0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00, 6, // 0x3F '?' 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00, 7, // 0x40 '@' 0x00,0x38,0x44,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00,0x00, 7, // 0x41 'A' 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x42 'B' 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00, 6, // 0x43 'C' 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00, 7, // 0x44 'D' 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00, 6, // 0x45 'E' 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00, 6, // 0x46 'F' 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00, 7, // 0x47 'G' 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x44,0x4C,0x34,0x00,0x00, 7, // 0x48 'H' 0x00,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00, 5, // 0x49 'I' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 6, // 0x4A 'J' 0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00, 6, // 0x4B 'K' 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x44,0x00,0x00, 6, // 0x4C 'L' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00, 9, // 0x4D 'M' 0x00,0x00,0x41,0x00,0x63,0x00,0x55,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00, 7, // 0x4E 'N' 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x44,0x00,0x00, 7, // 0x4F 'O' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x50 'P' 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00, 7, // 0x51 'Q' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00, 7, // 0x52 'R' 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00, 7, // 0x53 'S' 0x00,0x38,0x44,0x40,0x40,0x38,0x04,0x04,0x44,0x38,0x00,0x00, 6, // 0x54 'T' 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 7, // 0x55 'U' 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x56 'V' 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00, 9, // 0x57 'W' 0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x55,0x00,0x22,0x00,0x00,0x00,0x00,0x00, 7, // 0x58 'X' 0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00, 7, // 0x59 'Y' 0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00, 6, // 0x5A 'Z' 0x00,0x7C,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00, 4, // 0x5B '[' 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00, 7, // 0x5C '\' 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00, 4, // 0x5D ']' 0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0x00, 6, // 0x5E '^' 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00, 4, // 0x60 '`' 0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x61 'a' 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00,0x00, 7, // 0x62 'b' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00, 7, // 0x64 'd' 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x00,0x00, 7, // 0x65 'e' 0x00,0x00,0x00,0x38,0x44,0x44,0x7C,0x40,0x44,0x38,0x00,0x00, 4, // 0x66 'f' 0x00,0x30,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 7, // 0x67 'g' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x78, 7, // 0x68 'h' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00, 3, // 0x69 'i' 0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 5, // 0x6A 'j' 0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x60, 6, // 0x6B 'k' 0x00,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00, 3, // 0x6C 'l' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 9, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00, 7, // 0x6E 'n' 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x6F 'o' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x70 'p' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x40,0x40, 7, // 0x71 'q' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x04, 6, // 0x72 'r' 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00, 5, // 0x74 't' 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x18,0x00,0x00, 7, // 0x75 'u' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00, 9, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x36,0x00,0x00,0x00,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3C,0x08,0x70, 6, // 0x7A 'z' 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00, 5, // 0x7B '{' 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18,0x00, 3, // 0x7C '|' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, 5, // 0x7D '}' 0xC0,0x20,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0x20,0xC0,0x00, 7, // 0x7E '~' 0x00,0x60,0x92,0x92,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x7F '' 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u mcs13_prop[] = { 13, 4, 32, 128-32, 0x00,0x00,0x0E,0x00,0x1C,0x00,0x2A,0x00,0x38,0x00,0x46,0x00,0x54,0x00,0x62,0x00,0x70,0x00, 0x7E,0x00,0x8C,0x00,0x9A,0x00,0xA8,0x00,0xB6,0x00,0xC4,0x00,0xD2,0x00,0xE0,0x00,0xEE,0x00, 0xFC,0x00,0x0A,0x01,0x18,0x01,0x26,0x01,0x34,0x01,0x42,0x01,0x50,0x01,0x5E,0x01,0x6C,0x01, 0x7A,0x01,0x88,0x01,0x96,0x01,0xA4,0x01,0xB2,0x01,0xC0,0x01,0xCE,0x01,0xDC,0x01,0xEA,0x01, 0xF8,0x01,0x06,0x02,0x14,0x02,0x22,0x02,0x30,0x02,0x3E,0x02,0x4C,0x02,0x5A,0x02,0x68,0x02, 0x76,0x02,0x91,0x02,0x9F,0x02,0xAD,0x02,0xBB,0x02,0xC9,0x02,0xD7,0x02,0xE5,0x02,0xF3,0x02, 0x01,0x03,0x0F,0x03,0x2A,0x03,0x38,0x03,0x46,0x03,0x54,0x03,0x62,0x03,0x70,0x03,0x7E,0x03, 0x8C,0x03,0x9A,0x03,0xA8,0x03,0xB6,0x03,0xC4,0x03,0xD2,0x03,0xE0,0x03,0xEE,0x03,0xFC,0x03, 0x0A,0x04,0x18,0x04,0x26,0x04,0x34,0x04,0x42,0x04,0x50,0x04,0x6B,0x04,0x79,0x04,0x87,0x04, 0x95,0x04,0xA3,0x04,0xB1,0x04,0xBF,0x04,0xCD,0x04,0xDB,0x04,0xE9,0x04,0x04,0x05,0x12,0x05, 0x20,0x05,0x2E,0x05,0x3C,0x05,0x4A,0x05,0x58,0x05,0x66,0x05, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x21 '!' 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, 4, // 0x22 '"' 0x00,0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x23 '#' 0x00,0x28,0x28,0x28,0x7C,0x28,0x28,0x28,0x7C,0x28,0x28,0x28,0x00, 6, // 0x24 '$' 0x00,0x10,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x10,0x00, 7, // 0x25 '%' 0x00,0x32,0x54,0x64,0x08,0x08,0x10,0x10,0x26,0x2A,0x4C,0x00,0x00, 7, // 0x26 '&' 0x00,0x30,0x48,0x48,0x48,0x30,0x4A,0x4A,0x44,0x3A,0x00,0x00,0x00, 3, // 0x27 ''' 0x00,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x00,0x00, 5, // 0x29 ')' 0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x00,0x00, 6, // 0x2A '*' 0x00,0x00,0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x00,0x00, 6, // 0x2B '+' 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,0x00, 4, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x20,0x40,0x80, 6, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00, 7, // 0x2F '/' 0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00, 7, // 0x30 '0' 0x00,0x38,0x44,0x44,0x54,0x54,0x54,0x44,0x44,0x38,0x00,0x00,0x00, 4, // 0x31 '1' 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00, 7, // 0x32 '2' 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00, 7, // 0x33 '3' 0x00,0x38,0x44,0x04,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00,0x00, 6, // 0x34 '4' 0x00,0x08,0x18,0x28,0x28,0x48,0x48,0x7C,0x08,0x08,0x00,0x00,0x00, 7, // 0x35 '5' 0x00,0x7C,0x40,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00,0x00, 7, // 0x36 '6' 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 6, // 0x37 '7' 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x00,0x00,0x00, 7, // 0x38 '8' 0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x39 '9' 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00,0x00,0x00, 4, // 0x3A ':' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00, 4, // 0x3B ';' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x20,0x40,0x80, 6, // 0x3C '<' 0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00, 6, // 0x3D '=' 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00, 6, // 0x3E '>' 0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00, 6, // 0x3F '?' 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00,0x00, 7, // 0x40 '@' 0x00,0x38,0x44,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00,0x00,0x00, 7, // 0x41 'A' 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x42 'B' 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00,0x00, 6, // 0x43 'C' 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,0x00, 7, // 0x44 'D' 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,0x00, 6, // 0x45 'E' 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00,0x00, 6, // 0x46 'F' 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 7, // 0x47 'G' 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x44,0x4C,0x34,0x00,0x00,0x00, 7, // 0x48 'H' 0x00,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 5, // 0x49 'I' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00, 6, // 0x4A 'J' 0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,0x00, 6, // 0x4B 'K' 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x44,0x00,0x00,0x00, 6, // 0x4C 'L' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,0x00, 9, // 0x4D 'M' 0x00,0x00,0x41,0x00,0x63,0x00,0x55,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x4E 'N' 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x44,0x00,0x00,0x00, 7, // 0x4F 'O' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x50 'P' 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,0x00, 7, // 0x51 'Q' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,0x00, 7, // 0x52 'R' 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00,0x00, 7, // 0x53 'S' 0x00,0x38,0x44,0x40,0x40,0x38,0x04,0x04,0x44,0x38,0x00,0x00,0x00, 6, // 0x54 'T' 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 7, // 0x55 'U' 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 6, // 0x56 'V' 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00,0x00, 9, // 0x57 'W' 0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x55,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x58 'X' 0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x59 'Y' 0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 6, // 0x5A 'Z' 0x00,0x7C,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00,0x00, 4, // 0x5B '[' 0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00,0x00, 7, // 0x5C '\' 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00,0x00, 4, // 0x5D ']' 0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0x00,0x00, 6, // 0x5E '^' 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00, 4, // 0x60 '`' 0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x61 'a' 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00,0x00,0x00, 7, // 0x62 'b' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00,0x00, 7, // 0x64 'd' 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x00,0x00,0x00, 7, // 0x65 'e' 0x00,0x00,0x00,0x38,0x44,0x44,0x7C,0x40,0x44,0x38,0x00,0x00,0x00, 4, // 0x66 'f' 0x00,0x30,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 7, // 0x67 'g' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x44,0x38, 7, // 0x68 'h' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 3, // 0x69 'i' 0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 5, // 0x6A 'j' 0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x60,0x00, 6, // 0x6B 'k' 0x00,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,0x00, 3, // 0x6C 'l' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 9, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x6E 'n' 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x6F 'o' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x70 'p' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40, 7, // 0x71 'q' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x04,0x04, 6, // 0x72 'r' 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00,0x00, 5, // 0x74 't' 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x18,0x00,0x00,0x00, 7, // 0x75 'u' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,0x00, 9, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x08,0x70, 6, // 0x7A 'z' 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00, 5, // 0x7B '{' 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18,0x00,0x00, 3, // 0x7C '|' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 5, // 0x7D '}' 0xC0,0x20,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0x20,0xC0,0x00,0x00, 7, // 0x7E '~' 0x00,0x60,0x92,0x92,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x7F '' 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u mcs5x10_mono[] = { 10, 2, 32, 128-32, 0x00,0x00,0x0B,0x00,0x16,0x00,0x21,0x00,0x2C,0x00,0x37,0x00,0x42,0x00,0x4D,0x00,0x58,0x00, 0x63,0x00,0x6E,0x00,0x79,0x00,0x84,0x00,0x8F,0x00,0x9A,0x00,0xA5,0x00,0xB0,0x00,0xBB,0x00, 0xC6,0x00,0xD1,0x00,0xDC,0x00,0xE7,0x00,0xF2,0x00,0xFD,0x00,0x08,0x01,0x13,0x01,0x1E,0x01, 0x29,0x01,0x34,0x01,0x3F,0x01,0x4A,0x01,0x55,0x01,0x60,0x01,0x6B,0x01,0x76,0x01,0x81,0x01, 0x8C,0x01,0x97,0x01,0xA2,0x01,0xAD,0x01,0xB8,0x01,0xC3,0x01,0xCE,0x01,0xD9,0x01,0xE4,0x01, 0xEF,0x01,0xFA,0x01,0x05,0x02,0x10,0x02,0x1B,0x02,0x26,0x02,0x31,0x02,0x3C,0x02,0x47,0x02, 0x52,0x02,0x5D,0x02,0x68,0x02,0x73,0x02,0x7E,0x02,0x89,0x02,0x94,0x02,0x9F,0x02,0xAA,0x02, 0xB5,0x02,0xC0,0x02,0xCB,0x02,0xD6,0x02,0xE1,0x02,0xEC,0x02,0xF7,0x02,0x02,0x03,0x0D,0x03, 0x18,0x03,0x23,0x03,0x2E,0x03,0x39,0x03,0x44,0x03,0x4F,0x03,0x5A,0x03,0x65,0x03,0x70,0x03, 0x7B,0x03,0x86,0x03,0x91,0x03,0x9C,0x03,0xA7,0x03,0xB2,0x03,0xBD,0x03,0xC8,0x03,0xD3,0x03, 0xDE,0x03,0xE9,0x03,0xF4,0x03,0xFF,0x03,0x0A,0x04,0x15,0x04, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x21 '!' 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00, 5, // 0x22 '"' 0x00,0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x23 '#' 0x00,0x50,0x50,0xF8,0x50,0x50,0x50,0xF8,0x50,0x50, 5, // 0x24 '$' 0x00,0x40,0x60,0x90,0x80,0x60,0x10,0x90,0x60,0x20, 5, // 0x25 '%' 0x00,0x00,0x90,0x90,0x20,0x20,0x40,0x40,0x90,0x90, 5, // 0x26 '&' 0x00,0x40,0xA0,0xA0,0xA0,0x40,0xA8,0x90,0x90,0x68, 5, // 0x27 ''' 0x00,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x20,0x20,0x10, 5, // 0x29 ')' 0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x20,0x20,0x40, 5, // 0x2A '*' 0x00,0x00,0x90,0x60,0xF0,0x60,0x90,0x00,0x00,0x00, 5, // 0x2B '+' 0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00, 5, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0xC0, 5, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00, 5, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00, 5, // 0x2F '/' 0x00,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x00, 5, // 0x30 '0' 0x00,0x70,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00, 5, // 0x31 '1' 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00, 5, // 0x32 '2' 0x00,0x60,0x90,0x90,0x10,0x20,0x40,0x80,0xF0,0x00, 5, // 0x33 '3' 0x00,0x60,0x90,0x10,0x60,0x10,0x10,0x90,0x60,0x00, 5, // 0x34 '4' 0x00,0x10,0x30,0x50,0x50,0x90,0xF0,0x10,0x10,0x00, 5, // 0x35 '5' 0x00,0xF0,0x80,0x80,0xE0,0x10,0x10,0x90,0x60,0x00, 5, // 0x36 '6' 0x00,0x60,0x80,0x80,0xE0,0x90,0x90,0x90,0x60,0x00, 5, // 0x37 '7' 0x00,0xF0,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x00, 5, // 0x38 '8' 0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x90,0x60,0x00, 5, // 0x39 '9' 0x00,0x60,0x90,0x90,0x90,0x70,0x10,0x10,0x60,0x00, 5, // 0x3A ':' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x00, 5, // 0x3B ';' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0xC0, 5, // 0x3C '<' 0x00,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08, 5, // 0x3D '=' 0x00,0x00,0x00,0x00,0xF0,0x00,0xF0,0x00,0x00,0x00, 5, // 0x3E '>' 0x00,0x80,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x80, 5, // 0x3F '?' 0x00,0x60,0x90,0x10,0x10,0x20,0x40,0x00,0x40,0x00, 5, // 0x40 '@' 0x00,0x60,0x90,0x90,0xB0,0xB0,0x80,0x80,0x70,0x00, 5, // 0x41 'A' 0x00,0x60,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x00, 5, // 0x42 'B' 0x00,0xE0,0x90,0x90,0xE0,0x90,0x90,0x90,0xE0,0x00, 5, // 0x43 'C' 0x00,0x60,0x90,0x80,0x80,0x80,0x80,0x90,0x60,0x00, 5, // 0x44 'D' 0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00, 5, // 0x45 'E' 0x00,0xF0,0x80,0x80,0xF0,0x80,0x80,0x80,0xF0,0x00, 5, // 0x46 'F' 0x00,0xF0,0x80,0x80,0xF0,0x80,0x80,0x80,0x80,0x00, 5, // 0x47 'G' 0x00,0x60,0x90,0x80,0x80,0xB0,0x90,0x90,0x60,0x00, 5, // 0x48 'H' 0x00,0x90,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x00, 5, // 0x49 'I' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00, 5, // 0x4A 'J' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0xA0,0x40,0x00, 5, // 0x4B 'K' 0x00,0x90,0xA0,0xA0,0xC0,0xC0,0xA0,0xA0,0x90,0x00, 5, // 0x4C 'L' 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xF0,0x00, 5, // 0x4D 'M' 0x00,0x90,0x90,0xF0,0xF0,0x90,0x90,0x90,0x90,0x00, 5, // 0x4E 'N' 0x00,0x90,0x90,0xD0,0xD0,0xB0,0xB0,0x90,0x90,0x00, 5, // 0x4F 'O' 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00, 5, // 0x50 'P' 0x00,0xE0,0x90,0x90,0x90,0xE0,0x80,0x80,0x80,0x00, 5, // 0x51 'Q' 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x30, 5, // 0x52 'R' 0x00,0xE0,0x90,0x90,0x90,0xE0,0xA0,0x90,0x90,0x00, 5, // 0x53 'S' 0x00,0x60,0x90,0x80,0x60,0x10,0x90,0x90,0x60,0x00, 5, // 0x54 'T' 0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 5, // 0x55 'U' 0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00, 5, // 0x56 'V' 0x00,0x90,0x90,0x90,0x50,0x50,0x50,0x20,0x20,0x00, 5, // 0x57 'W' 0x00,0x90,0x90,0x90,0x90,0x90,0xF0,0xF0,0x90,0x00, 5, // 0x58 'X' 0x00,0x90,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x00, 5, // 0x59 'Y' 0x00,0x88,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x00, 5, // 0x5A 'Z' 0x00,0xF0,0x10,0x20,0x20,0x40,0x40,0x80,0xF0,0x00, 5, // 0x5B '[' 0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x60, 5, // 0x5C '\' 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08, 5, // 0x5D ']' 0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60, 5, // 0x5E '^' 0x00,0x20,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00, 5, // 0x60 '`' 0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x61 'a' 0x00,0x00,0x00,0x60,0x10,0x70,0x90,0x90,0x70,0x00, 5, // 0x62 'b' 0x00,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0xE0,0x00, 5, // 0x63 'c' 0x00,0x00,0x00,0x60,0x90,0x80,0x80,0x90,0x60,0x00, 5, // 0x64 'd' 0x00,0x10,0x10,0x70,0x90,0x90,0x90,0x90,0x70,0x00, 5, // 0x65 'e' 0x00,0x00,0x00,0x60,0x90,0x90,0xF0,0x80,0x70,0x00, 5, // 0x66 'f' 0x00,0x30,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x00, 5, // 0x67 'g' 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0xE0, 5, // 0x68 'h' 0x00,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0x90,0x00, 5, // 0x69 'i' 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x20,0x70,0x00, 5, // 0x6A 'j' 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0xC0, 5, // 0x6B 'k' 0x00,0x80,0x80,0x90,0xA0,0xC0,0xA0,0x90,0x90,0x00, 5, // 0x6C 'l' 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00, 5, // 0x6D 'm' 0x00,0x00,0x00,0x90,0xF0,0x90,0x90,0x90,0x90,0x00, 5, // 0x6E 'n' 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x00, 5, // 0x6F 'o' 0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x60,0x00, 5, // 0x70 'p' 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0xE0,0x80,0x80, 5, // 0x71 'q' 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x70,0x10,0x10, 5, // 0x72 'r' 0x00,0x00,0x00,0xB0,0x50,0x40,0x40,0x40,0xE0,0x00, 5, // 0x73 's' 0x00,0x00,0x00,0x60,0x90,0x40,0x20,0x90,0x60,0x00, 5, // 0x74 't' 0x00,0x40,0x40,0xE0,0x40,0x40,0x40,0x50,0x20,0x00, 5, // 0x75 'u' 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x70,0x00, 5, // 0x76 'v' 0x00,0x00,0x00,0x90,0x90,0x50,0x50,0x20,0x20,0x00, 5, // 0x77 'w' 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0xF0,0x90,0x00, 5, // 0x78 'x' 0x00,0x00,0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x00, 5, // 0x79 'y' 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x70,0x10,0xE0, 5, // 0x7A 'z' 0x00,0x00,0x00,0xF0,0x10,0x20,0x40,0x80,0xF0,0x00, 5, // 0x7B '{' 0x30,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30, 5, // 0x7C '|' 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 5, // 0x7D '}' 0xC0,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xC0, 5, // 0x7E '~' 0x00,0x40,0xA8,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x7F '' 0x00,0x20,0x70,0xD8,0x88,0x88,0xF8,0x00,0x00,0x00, 0 }; const int8u mcs5x11_mono[] = { 11, 3, 32, 128-32, 0x00,0x00,0x0C,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3C,0x00,0x48,0x00,0x54,0x00,0x60,0x00, 0x6C,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9C,0x00,0xA8,0x00,0xB4,0x00,0xC0,0x00,0xCC,0x00, 0xD8,0x00,0xE4,0x00,0xF0,0x00,0xFC,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2C,0x01,0x38,0x01, 0x44,0x01,0x50,0x01,0x5C,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8C,0x01,0x98,0x01,0xA4,0x01, 0xB0,0x01,0xBC,0x01,0xC8,0x01,0xD4,0x01,0xE0,0x01,0xEC,0x01,0xF8,0x01,0x04,0x02,0x10,0x02, 0x1C,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4C,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7C,0x02, 0x88,0x02,0x94,0x02,0xA0,0x02,0xAC,0x02,0xB8,0x02,0xC4,0x02,0xD0,0x02,0xDC,0x02,0xE8,0x02, 0xF4,0x02,0x00,0x03,0x0C,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3C,0x03,0x48,0x03,0x54,0x03, 0x60,0x03,0x6C,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9C,0x03,0xA8,0x03,0xB4,0x03,0xC0,0x03, 0xCC,0x03,0xD8,0x03,0xE4,0x03,0xF0,0x03,0xFC,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2C,0x04, 0x38,0x04,0x44,0x04,0x50,0x04,0x5C,0x04,0x68,0x04,0x74,0x04, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x21 '!' 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, 5, // 0x22 '"' 0x00,0x50,0x50,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x23 '#' 0x00,0x50,0x50,0xF8,0x50,0x50,0x50,0xF8,0x50,0x50,0x00, 5, // 0x24 '$' 0x00,0x40,0x60,0x90,0x80,0x60,0x10,0x90,0x60,0x20,0x00, 5, // 0x25 '%' 0x00,0x00,0x90,0x90,0x20,0x20,0x40,0x40,0x90,0x90,0x00, 5, // 0x26 '&' 0x00,0x40,0xA0,0xA0,0x40,0xA8,0x90,0x90,0x68,0x00,0x00, 5, // 0x27 ''' 0x00,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x00,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x20,0x20,0x10, 5, // 0x29 ')' 0x00,0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x20,0x20,0x40, 5, // 0x2A '*' 0x00,0x00,0x90,0x60,0xF0,0x60,0x90,0x00,0x00,0x00,0x00, 5, // 0x2B '+' 0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,0x00, 5, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x40,0x80, 5, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00, 5, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00, 5, // 0x2F '/' 0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00, 5, // 0x30 '0' 0x00,0x70,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00,0x00, 5, // 0x31 '1' 0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 5, // 0x32 '2' 0x00,0x60,0x90,0x90,0x10,0x20,0x40,0x80,0xF0,0x00,0x00, 5, // 0x33 '3' 0x00,0x60,0x90,0x10,0x60,0x10,0x10,0x90,0x60,0x00,0x00, 5, // 0x34 '4' 0x00,0x10,0x30,0x50,0x50,0x90,0xF8,0x10,0x10,0x00,0x00, 5, // 0x35 '5' 0x00,0xF0,0x80,0xE0,0x90,0x10,0x10,0x90,0x60,0x00,0x00, 5, // 0x36 '6' 0x00,0x60,0x90,0x80,0xE0,0x90,0x90,0x90,0x60,0x00,0x00, 5, // 0x37 '7' 0x00,0xF0,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x00,0x00, 5, // 0x38 '8' 0x00,0x60,0x90,0x90,0x60,0x90,0x90,0x90,0x60,0x00,0x00, 5, // 0x39 '9' 0x00,0x60,0x90,0x90,0x90,0x70,0x10,0x90,0x60,0x00,0x00, 5, // 0x3A ':' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x00,0x00, 5, // 0x3B ';' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x40,0x80, 5, // 0x3C '<' 0x00,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x00, 5, // 0x3D '=' 0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0x00, 5, // 0x3E '>' 0x00,0x80,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x80,0x00, 5, // 0x3F '?' 0x00,0x60,0x90,0x10,0x10,0x20,0x40,0x00,0x40,0x00,0x00, 5, // 0x40 '@' 0x00,0x60,0x90,0x90,0xB0,0xB0,0x80,0x80,0x70,0x00,0x00, 5, // 0x41 'A' 0x00,0x60,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x00,0x00, 5, // 0x42 'B' 0x00,0xE0,0x90,0x90,0xE0,0x90,0x90,0x90,0xE0,0x00,0x00, 5, // 0x43 'C' 0x00,0x60,0x90,0x80,0x80,0x80,0x80,0x90,0x60,0x00,0x00, 5, // 0x44 'D' 0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x90,0xE0,0x00,0x00, 5, // 0x45 'E' 0x00,0xF0,0x80,0x80,0xE0,0x80,0x80,0x80,0xF0,0x00,0x00, 5, // 0x46 'F' 0x00,0xF0,0x80,0x80,0xE0,0x80,0x80,0x80,0x80,0x00,0x00, 5, // 0x47 'G' 0x00,0x60,0x90,0x80,0x80,0xB0,0x90,0x90,0x60,0x00,0x00, 5, // 0x48 'H' 0x00,0x90,0x90,0x90,0xF0,0x90,0x90,0x90,0x90,0x00,0x00, 5, // 0x49 'I' 0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 5, // 0x4A 'J' 0x00,0x70,0x20,0x20,0x20,0x20,0xA0,0xA0,0x40,0x00,0x00, 5, // 0x4B 'K' 0x00,0x90,0xA0,0xA0,0xC0,0xA0,0xA0,0x90,0x90,0x00,0x00, 5, // 0x4C 'L' 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xF0,0x00,0x00, 5, // 0x4D 'M' 0x00,0x90,0xF0,0xF0,0x90,0x90,0x90,0x90,0x90,0x00,0x00, 5, // 0x4E 'N' 0x00,0x90,0x90,0xD0,0xD0,0xB0,0xB0,0x90,0x90,0x00,0x00, 5, // 0x4F 'O' 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,0x00, 5, // 0x50 'P' 0x00,0xE0,0x90,0x90,0x90,0xE0,0x80,0x80,0x80,0x00,0x00, 5, // 0x51 'Q' 0x00,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x30,0x00, 5, // 0x52 'R' 0x00,0xE0,0x90,0x90,0x90,0xE0,0xA0,0x90,0x90,0x00,0x00, 5, // 0x53 'S' 0x00,0x60,0x90,0x80,0x60,0x10,0x90,0x90,0x60,0x00,0x00, 5, // 0x54 'T' 0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00, 5, // 0x55 'U' 0x00,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x60,0x00,0x00, 5, // 0x56 'V' 0x00,0x90,0x90,0x90,0x50,0x50,0x50,0x20,0x20,0x00,0x00, 5, // 0x57 'W' 0x00,0x90,0x90,0x90,0x90,0x90,0xF0,0xF0,0x90,0x00,0x00, 5, // 0x58 'X' 0x00,0x90,0x90,0x90,0x60,0x60,0x90,0x90,0x90,0x00,0x00, 5, // 0x59 'Y' 0x00,0x88,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x00,0x00, 5, // 0x5A 'Z' 0x00,0xF0,0x10,0x20,0x20,0x40,0x40,0x80,0xF0,0x00,0x00, 5, // 0x5B '[' 0x00,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x60, 5, // 0x5C '\' 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00, 5, // 0x5D ']' 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60, 5, // 0x5E '^' 0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00, 5, // 0x60 '`' 0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x61 'a' 0x00,0x00,0x00,0x60,0x10,0x70,0x90,0x90,0x70,0x00,0x00, 5, // 0x62 'b' 0x00,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0xE0,0x00,0x00, 5, // 0x63 'c' 0x00,0x00,0x00,0x60,0x90,0x80,0x80,0x90,0x60,0x00,0x00, 5, // 0x64 'd' 0x00,0x10,0x10,0x70,0x90,0x90,0x90,0x90,0x70,0x00,0x00, 5, // 0x65 'e' 0x00,0x00,0x00,0x60,0x90,0x90,0xF0,0x80,0x70,0x00,0x00, 5, // 0x66 'f' 0x00,0x30,0x40,0xE0,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 5, // 0x67 'g' 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x90,0x70,0x10,0xE0, 5, // 0x68 'h' 0x00,0x80,0x80,0xE0,0x90,0x90,0x90,0x90,0x90,0x00,0x00, 5, // 0x69 'i' 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 5, // 0x6A 'j' 0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0xA0,0x40, 5, // 0x6B 'k' 0x00,0x80,0x80,0x90,0xA0,0xC0,0xA0,0x90,0x90,0x00,0x00, 5, // 0x6C 'l' 0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 5, // 0x6D 'm' 0x00,0x00,0x00,0x90,0xF0,0x90,0x90,0x90,0x90,0x00,0x00, 5, // 0x6E 'n' 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0x90,0x90,0x00,0x00, 5, // 0x6F 'o' 0x00,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x60,0x00,0x00, 5, // 0x70 'p' 0x00,0x00,0x00,0xE0,0x90,0x90,0x90,0x90,0xE0,0x80,0x80, 5, // 0x71 'q' 0x00,0x00,0x00,0x70,0x90,0x90,0x90,0x90,0x70,0x10,0x10, 5, // 0x72 'r' 0x00,0x00,0x00,0xA0,0x50,0x40,0x40,0x40,0xE0,0x00,0x00, 5, // 0x73 's' 0x00,0x00,0x00,0x60,0x90,0x40,0x20,0x90,0x60,0x00,0x00, 5, // 0x74 't' 0x00,0x40,0x40,0xE0,0x40,0x40,0x40,0x40,0x30,0x00,0x00, 5, // 0x75 'u' 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x70,0x00,0x00, 5, // 0x76 'v' 0x00,0x00,0x00,0x90,0x90,0x50,0x50,0x20,0x20,0x00,0x00, 5, // 0x77 'w' 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0xF0,0x90,0x00,0x00, 5, // 0x78 'x' 0x00,0x00,0x00,0x90,0x90,0x60,0x60,0x90,0x90,0x00,0x00, 5, // 0x79 'y' 0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x90,0x70,0x10,0xE0, 5, // 0x7A 'z' 0x00,0x00,0x00,0xF0,0x10,0x20,0x40,0x80,0xF0,0x00,0x00, 5, // 0x7B '{' 0x30,0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x30, 5, // 0x7C '|' 0x00,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x20,0x00, 5, // 0x7D '}' 0xC0,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0xC0, 5, // 0x7E '~' 0x00,0x40,0xA8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x7F '' 0x00,0x20,0x70,0xD8,0x88,0x88,0xF8,0x00,0x00,0x00,0x00, 0 }; const int8u mcs6x10_mono[] = { 10, 3, 32, 128-32, 0x00,0x00,0x0B,0x00,0x16,0x00,0x21,0x00,0x2C,0x00,0x37,0x00,0x42,0x00,0x4D,0x00,0x58,0x00, 0x63,0x00,0x6E,0x00,0x79,0x00,0x84,0x00,0x8F,0x00,0x9A,0x00,0xA5,0x00,0xB0,0x00,0xBB,0x00, 0xC6,0x00,0xD1,0x00,0xDC,0x00,0xE7,0x00,0xF2,0x00,0xFD,0x00,0x08,0x01,0x13,0x01,0x1E,0x01, 0x29,0x01,0x34,0x01,0x3F,0x01,0x4A,0x01,0x55,0x01,0x60,0x01,0x6B,0x01,0x76,0x01,0x81,0x01, 0x8C,0x01,0x97,0x01,0xA2,0x01,0xAD,0x01,0xB8,0x01,0xC3,0x01,0xCE,0x01,0xD9,0x01,0xE4,0x01, 0xEF,0x01,0xFA,0x01,0x05,0x02,0x10,0x02,0x1B,0x02,0x26,0x02,0x31,0x02,0x3C,0x02,0x47,0x02, 0x52,0x02,0x5D,0x02,0x68,0x02,0x73,0x02,0x7E,0x02,0x89,0x02,0x94,0x02,0x9F,0x02,0xAA,0x02, 0xB5,0x02,0xC0,0x02,0xCB,0x02,0xD6,0x02,0xE1,0x02,0xEC,0x02,0xF7,0x02,0x02,0x03,0x0D,0x03, 0x18,0x03,0x23,0x03,0x2E,0x03,0x39,0x03,0x44,0x03,0x4F,0x03,0x5A,0x03,0x65,0x03,0x70,0x03, 0x7B,0x03,0x86,0x03,0x91,0x03,0x9C,0x03,0xA7,0x03,0xB2,0x03,0xBD,0x03,0xC8,0x03,0xD3,0x03, 0xDE,0x03,0xE9,0x03,0xF4,0x03,0xFF,0x03,0x0A,0x04,0x15,0x04, 6, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x21 '!' 0x00,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00, 6, // 0x22 '"' 0x00,0x28,0x28,0x50,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x23 '#' 0x00,0x28,0x28,0x7C,0x28,0x28,0x7C,0x28,0x28,0x00, 6, // 0x24 '$' 0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x00, 6, // 0x25 '%' 0x00,0x08,0xC8,0xD0,0x10,0x20,0x2C,0x4C,0x40,0x00, 6, // 0x26 '&' 0x00,0x20,0x50,0x50,0x24,0x54,0x48,0x34,0x00,0x00, 6, // 0x27 ''' 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x28 '(' 0x08,0x10,0x10,0x20,0x20,0x20,0x10,0x10,0x08,0x00, 6, // 0x29 ')' 0x20,0x10,0x10,0x08,0x08,0x08,0x10,0x10,0x20,0x00, 6, // 0x2A '*' 0x00,0x00,0x28,0x7C,0x38,0x7C,0x28,0x00,0x00,0x00, 6, // 0x2B '+' 0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00, 6, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40, 6, // 0x2D '-' 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00, 6, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00, 6, // 0x2F '/' 0x00,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00, 6, // 0x30 '0' 0x00,0x38,0x44,0x4C,0x54,0x64,0x44,0x38,0x00,0x00, 6, // 0x31 '1' 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 6, // 0x32 '2' 0x00,0x38,0x44,0x04,0x18,0x20,0x40,0x7C,0x00,0x00, 6, // 0x33 '3' 0x00,0x38,0x44,0x04,0x38,0x04,0x44,0x38,0x00,0x00, 6, // 0x34 '4' 0x00,0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x00,0x00, 6, // 0x35 '5' 0x00,0x7C,0x40,0x40,0x78,0x04,0x44,0x38,0x00,0x00, 6, // 0x36 '6' 0x00,0x38,0x40,0x40,0x78,0x44,0x44,0x38,0x00,0x00, 6, // 0x37 '7' 0x00,0x7C,0x04,0x08,0x10,0x20,0x20,0x20,0x00,0x00, 6, // 0x38 '8' 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00,0x00, 6, // 0x39 '9' 0x00,0x38,0x44,0x44,0x3C,0x04,0x04,0x38,0x00,0x00, 6, // 0x3A ':' 0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00, 6, // 0x3B ';' 0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x20,0x40, 6, // 0x3C '<' 0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00, 6, // 0x3D '=' 0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00, 6, // 0x3E '>' 0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00, 6, // 0x3F '?' 0x00,0x38,0x44,0x04,0x18,0x10,0x00,0x10,0x00,0x00, 6, // 0x40 '@' 0x00,0x38,0x44,0x5C,0x54,0x5C,0x40,0x38,0x00,0x00, 6, // 0x41 'A' 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x00,0x00, 6, // 0x42 'B' 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x78,0x00,0x00, 6, // 0x43 'C' 0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00, 6, // 0x44 'D' 0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00, 6, // 0x45 'E' 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x7C,0x00,0x00, 6, // 0x46 'F' 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x00,0x00, 6, // 0x47 'G' 0x00,0x38,0x44,0x40,0x4C,0x44,0x44,0x3C,0x00,0x00, 6, // 0x48 'H' 0x00,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00,0x00, 6, // 0x49 'I' 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 6, // 0x4A 'J' 0x00,0x1C,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00, 6, // 0x4B 'K' 0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00, 6, // 0x4C 'L' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00, 6, // 0x4D 'M' 0x00,0x44,0x6C,0x54,0x54,0x44,0x44,0x44,0x00,0x00, 6, // 0x4E 'N' 0x00,0x44,0x44,0x64,0x54,0x4C,0x44,0x44,0x00,0x00, 6, // 0x4F 'O' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x50 'P' 0x00,0x78,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00, 6, // 0x51 'Q' 0x00,0x38,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00, 6, // 0x52 'R' 0x00,0x78,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00, 6, // 0x53 'S' 0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00, 6, // 0x54 'T' 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 6, // 0x55 'U' 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x56 'V' 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x10,0x00,0x00, 6, // 0x57 'W' 0x00,0x44,0x44,0x54,0x54,0x54,0x54,0x28,0x00,0x00, 6, // 0x58 'X' 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00, 6, // 0x59 'Y' 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x00,0x00, 6, // 0x5A 'Z' 0x00,0x78,0x08,0x10,0x20,0x40,0x40,0x78,0x00,0x00, 6, // 0x5B '[' 0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00, 6, // 0x5C '\' 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00, 6, // 0x5D ']' 0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00, 6, // 0x5E '^' 0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00, 6, // 0x60 '`' 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x61 'a' 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x3C,0x00,0x00, 6, // 0x62 'b' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x78,0x00,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x3C,0x00,0x00, 6, // 0x64 'd' 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00,0x00, 6, // 0x65 'e' 0x00,0x00,0x00,0x38,0x44,0x78,0x40,0x3C,0x00,0x00, 6, // 0x66 'f' 0x00,0x0C,0x10,0x10,0x38,0x10,0x10,0x10,0x00,0x00, 6, // 0x67 'g' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x3C,0x04,0x38, 6, // 0x68 'h' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x00,0x00, 6, // 0x69 'i' 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x38,0x00,0x00, 6, // 0x6A 'j' 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x48,0x30, 6, // 0x6B 'k' 0x00,0x40,0x40,0x48,0x50,0x60,0x50,0x48,0x00,0x00, 6, // 0x6C 'l' 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 6, // 0x6D 'm' 0x00,0x00,0x00,0x68,0x54,0x54,0x44,0x44,0x00,0x00, 6, // 0x6E 'n' 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x00,0x00, 6, // 0x6F 'o' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x70 'p' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40, 6, // 0x71 'q' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x3C,0x04,0x04, 6, // 0x72 'r' 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x70,0x00,0x00, 6, // 0x73 's' 0x00,0x00,0x00,0x38,0x40,0x38,0x04,0x78,0x00,0x00, 6, // 0x74 't' 0x00,0x10,0x10,0x38,0x10,0x10,0x14,0x08,0x00,0x00, 6, // 0x75 'u' 0x00,0x00,0x00,0x44,0x44,0x44,0x4C,0x34,0x00,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x10,0x00,0x00, 6, // 0x77 'w' 0x00,0x00,0x00,0x44,0x44,0x54,0x7C,0x28,0x00,0x00, 6, // 0x78 'x' 0x00,0x00,0x00,0x48,0x48,0x30,0x48,0x48,0x00,0x00, 6, // 0x79 'y' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x3C,0x04,0x38, 6, // 0x7A 'z' 0x00,0x00,0x00,0x78,0x08,0x30,0x40,0x78,0x00,0x00, 6, // 0x7B '{' 0x18,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x18,0x00, 6, // 0x7C '|' 0x10,0x10,0x10,0x10,0x00,0x10,0x10,0x10,0x10,0x00, 6, // 0x7D '}' 0x60,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x60,0x00, 6, // 0x7E '~' 0x00,0x48,0xA8,0x90,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x7F '' 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00, 0 }; const int8u mcs6x11_mono[] = { 11, 3, 32, 128-32, 0x00,0x00,0x0C,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x3C,0x00,0x48,0x00,0x54,0x00,0x60,0x00, 0x6C,0x00,0x78,0x00,0x84,0x00,0x90,0x00,0x9C,0x00,0xA8,0x00,0xB4,0x00,0xC0,0x00,0xCC,0x00, 0xD8,0x00,0xE4,0x00,0xF0,0x00,0xFC,0x00,0x08,0x01,0x14,0x01,0x20,0x01,0x2C,0x01,0x38,0x01, 0x44,0x01,0x50,0x01,0x5C,0x01,0x68,0x01,0x74,0x01,0x80,0x01,0x8C,0x01,0x98,0x01,0xA4,0x01, 0xB0,0x01,0xBC,0x01,0xC8,0x01,0xD4,0x01,0xE0,0x01,0xEC,0x01,0xF8,0x01,0x04,0x02,0x10,0x02, 0x1C,0x02,0x28,0x02,0x34,0x02,0x40,0x02,0x4C,0x02,0x58,0x02,0x64,0x02,0x70,0x02,0x7C,0x02, 0x88,0x02,0x94,0x02,0xA0,0x02,0xAC,0x02,0xB8,0x02,0xC4,0x02,0xD0,0x02,0xDC,0x02,0xE8,0x02, 0xF4,0x02,0x00,0x03,0x0C,0x03,0x18,0x03,0x24,0x03,0x30,0x03,0x3C,0x03,0x48,0x03,0x54,0x03, 0x60,0x03,0x6C,0x03,0x78,0x03,0x84,0x03,0x90,0x03,0x9C,0x03,0xA8,0x03,0xB4,0x03,0xC0,0x03, 0xCC,0x03,0xD8,0x03,0xE4,0x03,0xF0,0x03,0xFC,0x03,0x08,0x04,0x14,0x04,0x20,0x04,0x2C,0x04, 0x38,0x04,0x44,0x04,0x50,0x04,0x5C,0x04,0x68,0x04,0x74,0x04, 6, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x21 '!' 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, 6, // 0x22 '"' 0x00,0x28,0x28,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x23 '#' 0x00,0x28,0x28,0x7C,0x28,0x28,0x7C,0x28,0x28,0x00,0x00, 6, // 0x24 '$' 0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x00, 6, // 0x25 '%' 0x00,0x68,0xA8,0xD0,0x10,0x20,0x2C,0x54,0x58,0x00,0x00, 6, // 0x26 '&' 0x00,0x20,0x50,0x50,0x20,0x54,0x54,0x48,0x34,0x00,0x00, 6, // 0x27 ''' 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x28 '(' 0x08,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0x10,0x08,0x00, 6, // 0x29 ')' 0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x00, 6, // 0x2A '*' 0x00,0x00,0x28,0x7C,0x38,0x7C,0x28,0x00,0x00,0x00,0x00, 6, // 0x2B '+' 0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00, 6, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40, 6, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00, 6, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00, 6, // 0x2F '/' 0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00, 6, // 0x30 '0' 0x00,0x38,0x44,0x44,0x54,0x54,0x44,0x44,0x38,0x00,0x00, 6, // 0x31 '1' 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 6, // 0x32 '2' 0x00,0x38,0x44,0x44,0x08,0x10,0x20,0x40,0x7C,0x00,0x00, 6, // 0x33 '3' 0x00,0x38,0x44,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00, 6, // 0x34 '4' 0x00,0x08,0x18,0x28,0x28,0x48,0x7C,0x08,0x08,0x00,0x00, 6, // 0x35 '5' 0x00,0x7C,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00, 6, // 0x36 '6' 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x37 '7' 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x00,0x00, 6, // 0x38 '8' 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x39 '9' 0x00,0x38,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00,0x00, 6, // 0x3A ':' 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00, 6, // 0x3B ';' 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x20,0x40, 6, // 0x3C '<' 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00, 6, // 0x3D '=' 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00, 6, // 0x3E '>' 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00, 6, // 0x3F '?' 0x00,0x38,0x44,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00, 6, // 0x40 '@' 0x00,0x38,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00,0x00, 6, // 0x41 'A' 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00,0x00, 6, // 0x42 'B' 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00, 6, // 0x43 'C' 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00, 6, // 0x44 'D' 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00, 6, // 0x45 'E' 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00, 6, // 0x46 'F' 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00, 6, // 0x47 'G' 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x4C,0x34,0x00,0x00, 6, // 0x48 'H' 0x00,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00, 6, // 0x49 'I' 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 6, // 0x4A 'J' 0x00,0x1C,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00, 6, // 0x4B 'K' 0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x44,0x00,0x00, 6, // 0x4C 'L' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00, 6, // 0x4D 'M' 0x00,0x44,0x6C,0x54,0x54,0x54,0x44,0x44,0x44,0x00,0x00, 6, // 0x4E 'N' 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x00,0x00, 6, // 0x4F 'O' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x50 'P' 0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00, 6, // 0x51 'Q' 0x00,0x38,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00, 6, // 0x52 'R' 0x00,0x78,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00, 6, // 0x53 'S' 0x00,0x38,0x44,0x40,0x38,0x04,0x04,0x44,0x38,0x00,0x00, 6, // 0x54 'T' 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 6, // 0x55 'U' 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x56 'V' 0x00,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00, 6, // 0x57 'W' 0x00,0x44,0x44,0x54,0x54,0x54,0x54,0x54,0x28,0x00,0x00, 6, // 0x58 'X' 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00, 6, // 0x59 'Y' 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00, 6, // 0x5A 'Z' 0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00, 6, // 0x5B '[' 0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00, 6, // 0x5C '\' 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00, 6, // 0x5D ']' 0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00, 6, // 0x5E '^' 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00, 6, // 0x60 '`' 0x00,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x61 'a' 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x3C,0x00,0x00, 6, // 0x62 'b' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x44,0x38,0x00,0x00, 6, // 0x64 'd' 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x3C,0x00,0x00, 6, // 0x65 'e' 0x00,0x00,0x00,0x38,0x44,0x7C,0x40,0x44,0x38,0x00,0x00, 6, // 0x66 'f' 0x00,0x0C,0x10,0x38,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 6, // 0x67 'g' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x78, 6, // 0x68 'h' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00, 6, // 0x69 'i' 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 6, // 0x6A 'j' 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x50,0x20, 6, // 0x6B 'k' 0x00,0x40,0x40,0x4C,0x50,0x60,0x50,0x48,0x44,0x00,0x00, 6, // 0x6C 'l' 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 6, // 0x6D 'm' 0x00,0x00,0x00,0x68,0x54,0x54,0x54,0x44,0x44,0x00,0x00, 6, // 0x6E 'n' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00, 6, // 0x6F 'o' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 6, // 0x70 'p' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40, 6, // 0x71 'q' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x04, 6, // 0x72 'r' 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x70,0x00,0x00, 6, // 0x73 's' 0x00,0x00,0x00,0x38,0x44,0x30,0x08,0x44,0x38,0x00,0x00, 6, // 0x74 't' 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x18,0x00,0x00, 6, // 0x75 'u' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00, 6, // 0x77 'w' 0x00,0x00,0x00,0x44,0x44,0x44,0x54,0x7C,0x28,0x00,0x00, 6, // 0x78 'x' 0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00, 6, // 0x79 'y' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x3C,0x08,0x70, 6, // 0x7A 'z' 0x00,0x00,0x00,0x7C,0x08,0x10,0x20,0x40,0x7C,0x00,0x00, 6, // 0x7B '{' 0x18,0x20,0x20,0x20,0xC0,0xC0,0x20,0x20,0x20,0x18,0x00, 6, // 0x7C '|' 0x00,0x10,0x10,0x10,0x10,0x00,0x10,0x10,0x10,0x10,0x00, 6, // 0x7D '}' 0x60,0x10,0x10,0x10,0x0C,0x0C,0x10,0x10,0x10,0x60,0x00, 6, // 0x7E '~' 0x00,0x24,0x54,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x7F '' 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00, 0 }; const int8u mcs7x12_mono_high[] = { 12, 3, 32, 128-32, 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x4E,0x00,0x5B,0x00,0x68,0x00, 0x75,0x00,0x82,0x00,0x8F,0x00,0x9C,0x00,0xA9,0x00,0xB6,0x00,0xC3,0x00,0xD0,0x00,0xDD,0x00, 0xEA,0x00,0xF7,0x00,0x04,0x01,0x11,0x01,0x1E,0x01,0x2B,0x01,0x38,0x01,0x45,0x01,0x52,0x01, 0x5F,0x01,0x6C,0x01,0x79,0x01,0x86,0x01,0x93,0x01,0xA0,0x01,0xAD,0x01,0xBA,0x01,0xC7,0x01, 0xD4,0x01,0xE1,0x01,0xEE,0x01,0xFB,0x01,0x08,0x02,0x15,0x02,0x22,0x02,0x2F,0x02,0x3C,0x02, 0x49,0x02,0x56,0x02,0x63,0x02,0x70,0x02,0x7D,0x02,0x8A,0x02,0x97,0x02,0xA4,0x02,0xB1,0x02, 0xBE,0x02,0xCB,0x02,0xD8,0x02,0xE5,0x02,0xF2,0x02,0xFF,0x02,0x0C,0x03,0x19,0x03,0x26,0x03, 0x33,0x03,0x40,0x03,0x4D,0x03,0x5A,0x03,0x67,0x03,0x74,0x03,0x81,0x03,0x8E,0x03,0x9B,0x03, 0xA8,0x03,0xB5,0x03,0xC2,0x03,0xCF,0x03,0xDC,0x03,0xE9,0x03,0xF6,0x03,0x03,0x04,0x10,0x04, 0x1D,0x04,0x2A,0x04,0x37,0x04,0x44,0x04,0x51,0x04,0x5E,0x04,0x6B,0x04,0x78,0x04,0x85,0x04, 0x92,0x04,0x9F,0x04,0xAC,0x04,0xB9,0x04,0xC6,0x04,0xD3,0x04, 7, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x21 '!' 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00, 7, // 0x22 '"' 0x28,0x28,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x23 '#' 0x24,0x24,0x24,0x7E,0x24,0x24,0x24,0x7E,0x24,0x24,0x24,0x00, 7, // 0x24 '$' 0x10,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x10,0x00, 7, // 0x25 '%' 0x32,0x54,0x64,0x08,0x08,0x10,0x10,0x26,0x2A,0x4C,0x00,0x00, 7, // 0x26 '&' 0x00,0x20,0x50,0x50,0x50,0x20,0x54,0x54,0x48,0x34,0x00,0x00, 7, // 0x27 ''' 0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x28 '(' 0x08,0x10,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x08,0x00, 7, // 0x29 ')' 0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x00, 7, // 0x2A '*' 0x00,0x00,0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x00, 7, // 0x2B '+' 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00, 7, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40, 7, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00, 7, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00, 7, // 0x2F '/' 0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00, 7, // 0x30 '0' 0x00,0x38,0x44,0x44,0x54,0x54,0x54,0x44,0x44,0x38,0x00,0x00, 7, // 0x31 '1' 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 7, // 0x32 '2' 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00, 7, // 0x33 '3' 0x00,0x38,0x44,0x04,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x34 '4' 0x00,0x08,0x18,0x28,0x28,0x48,0x48,0x7C,0x08,0x08,0x00,0x00, 7, // 0x35 '5' 0x00,0x7C,0x40,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x36 '6' 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x37 '7' 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x00,0x00, 7, // 0x38 '8' 0x00,0x38,0x44,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x39 '9' 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x3A ':' 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x30,0x30,0x00,0x00, 7, // 0x3B ';' 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x30,0x30,0x20,0x40, 7, // 0x3C '<' 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00, 7, // 0x3D '=' 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00, 7, // 0x3E '>' 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00, 7, // 0x3F '?' 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00, 7, // 0x40 '@' 0x00,0x38,0x44,0x44,0x5C,0x54,0x54,0x4C,0x40,0x38,0x00,0x00, 7, // 0x41 'A' 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x42 'B' 0x00,0x78,0x44,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00, 7, // 0x43 'C' 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00, 7, // 0x44 'D' 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00, 7, // 0x45 'E' 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00, 7, // 0x46 'F' 0x00,0x7C,0x40,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00, 7, // 0x47 'G' 0x00,0x38,0x44,0x40,0x40,0x5C,0x44,0x44,0x4C,0x34,0x00,0x00, 7, // 0x48 'H' 0x00,0x44,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x49 'I' 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 7, // 0x4A 'J' 0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00, 7, // 0x4B 'K' 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x44,0x00,0x00, 7, // 0x4C 'L' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00, 7, // 0x4D 'M' 0x00,0x44,0x6C,0x6C,0x54,0x54,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x4E 'N' 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x44,0x00,0x00, 7, // 0x4F 'O' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x50 'P' 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00, 7, // 0x51 'Q' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00, 7, // 0x52 'R' 0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00, 7, // 0x53 'S' 0x00,0x38,0x44,0x40,0x40,0x38,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x54 'T' 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 7, // 0x55 'U' 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x56 'V' 0x00,0x44,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00, 7, // 0x57 'W' 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x54,0x28,0x00,0x00, 7, // 0x58 'X' 0x00,0x44,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00, 7, // 0x59 'Y' 0x00,0x44,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00, 7, // 0x5A 'Z' 0x00,0x7C,0x04,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00, 7, // 0x5B '[' 0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00, 7, // 0x5C '\' 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00, 7, // 0x5D ']' 0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00, 7, // 0x5E '^' 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00, 7, // 0x60 '`' 0x00,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x61 'a' 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x44,0x3C,0x00,0x00, 7, // 0x62 'b' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x00,0x00, 7, // 0x63 'c' 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00, 7, // 0x64 'd' 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x00,0x00, 7, // 0x65 'e' 0x00,0x00,0x00,0x38,0x44,0x44,0x7C,0x40,0x44,0x38,0x00,0x00, 7, // 0x66 'f' 0x00,0x0C,0x10,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 7, // 0x67 'g' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x78, 7, // 0x68 'h' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x69 'i' 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 7, // 0x6A 'j' 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x08,0x48,0x30, 7, // 0x6B 'k' 0x00,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00, 7, // 0x6C 'l' 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 7, // 0x6D 'm' 0x00,0x00,0x00,0x68,0x54,0x54,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x6E 'n' 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x6F 'o' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x70 'p' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x78,0x40,0x40, 7, // 0x71 'q' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x04, 7, // 0x72 'r' 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00, 7, // 0x74 't' 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x24,0x18,0x00,0x00, 7, // 0x75 'u' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00, 7, // 0x76 'v' 0x00,0x00,0x00,0x44,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00, 7, // 0x77 'w' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x54,0x54,0x28,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x3C,0x08,0x70, 7, // 0x7A 'z' 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00, 7, // 0x7B '{' 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18,0x00, 7, // 0x7C '|' 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00, 7, // 0x7D '}' 0x60,0x10,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x10,0x60,0x00, 7, // 0x7E '~' 0x00,0x60,0x92,0x92,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x7F '' 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u mcs7x12_mono_low[] = { 12, 4, 32, 128-32, 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x4E,0x00,0x5B,0x00,0x68,0x00, 0x75,0x00,0x82,0x00,0x8F,0x00,0x9C,0x00,0xA9,0x00,0xB6,0x00,0xC3,0x00,0xD0,0x00,0xDD,0x00, 0xEA,0x00,0xF7,0x00,0x04,0x01,0x11,0x01,0x1E,0x01,0x2B,0x01,0x38,0x01,0x45,0x01,0x52,0x01, 0x5F,0x01,0x6C,0x01,0x79,0x01,0x86,0x01,0x93,0x01,0xA0,0x01,0xAD,0x01,0xBA,0x01,0xC7,0x01, 0xD4,0x01,0xE1,0x01,0xEE,0x01,0xFB,0x01,0x08,0x02,0x15,0x02,0x22,0x02,0x2F,0x02,0x3C,0x02, 0x49,0x02,0x56,0x02,0x63,0x02,0x70,0x02,0x7D,0x02,0x8A,0x02,0x97,0x02,0xA4,0x02,0xB1,0x02, 0xBE,0x02,0xCB,0x02,0xD8,0x02,0xE5,0x02,0xF2,0x02,0xFF,0x02,0x0C,0x03,0x19,0x03,0x26,0x03, 0x33,0x03,0x40,0x03,0x4D,0x03,0x5A,0x03,0x67,0x03,0x74,0x03,0x81,0x03,0x8E,0x03,0x9B,0x03, 0xA8,0x03,0xB5,0x03,0xC2,0x03,0xCF,0x03,0xDC,0x03,0xE9,0x03,0xF6,0x03,0x03,0x04,0x10,0x04, 0x1D,0x04,0x2A,0x04,0x37,0x04,0x44,0x04,0x51,0x04,0x5E,0x04,0x6B,0x04,0x78,0x04,0x85,0x04, 0x92,0x04,0x9F,0x04,0xAC,0x04,0xB9,0x04,0xC6,0x04,0xD3,0x04, 7, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x21 '!' 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00, 7, // 0x22 '"' 0x28,0x28,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x23 '#' 0x00,0x28,0x28,0x7C,0x28,0x28,0x28,0x7C,0x28,0x28,0x00,0x00, 7, // 0x24 '$' 0x00,0x10,0x38,0x54,0x50,0x38,0x14,0x54,0x38,0x10,0x00,0x00, 7, // 0x25 '%' 0x34,0x54,0x68,0x08,0x10,0x10,0x20,0x2C,0x54,0x58,0x00,0x00, 7, // 0x26 '&' 0x00,0x20,0x50,0x50,0x20,0x54,0x54,0x48,0x34,0x00,0x00,0x00, 7, // 0x27 ''' 0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x28 '(' 0x08,0x10,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x08,0x00, 7, // 0x29 ')' 0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x00, 7, // 0x2A '*' 0x00,0x00,0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x00, 7, // 0x2B '+' 0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00,0x00, 7, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40,0x00, 7, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, 7, // 0x2F '/' 0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00, 7, // 0x30 '0' 0x00,0x38,0x44,0x44,0x54,0x54,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x31 '1' 0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00, 7, // 0x32 '2' 0x00,0x38,0x44,0x44,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00, 7, // 0x33 '3' 0x00,0x38,0x44,0x04,0x38,0x04,0x04,0x44,0x38,0x00,0x00,0x00, 7, // 0x34 '4' 0x00,0x08,0x18,0x28,0x28,0x48,0x7C,0x08,0x08,0x00,0x00,0x00, 7, // 0x35 '5' 0x00,0x7C,0x40,0x78,0x44,0x04,0x04,0x44,0x38,0x00,0x00,0x00, 7, // 0x36 '6' 0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x37 '7' 0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x00,0x00,0x00, 7, // 0x38 '8' 0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x39 '9' 0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x44,0x38,0x00,0x00,0x00, 7, // 0x3A ':' 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x00, 7, // 0x3B ';' 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x20,0x40,0x00, 7, // 0x3C '<' 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00, 7, // 0x3D '=' 0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00, 7, // 0x3E '>' 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00, 7, // 0x3F '?' 0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00, 7, // 0x40 '@' 0x00,0x38,0x44,0x44,0x5C,0x54,0x4C,0x40,0x38,0x00,0x00,0x00, 7, // 0x41 'A' 0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x42 'B' 0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x44,0x78,0x00,0x00,0x00, 7, // 0x43 'C' 0x00,0x38,0x44,0x40,0x40,0x40,0x40,0x44,0x38,0x00,0x00,0x00, 7, // 0x44 'D' 0x00,0x70,0x48,0x44,0x44,0x44,0x44,0x48,0x70,0x00,0x00,0x00, 7, // 0x45 'E' 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x7C,0x00,0x00,0x00, 7, // 0x46 'F' 0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 7, // 0x47 'G' 0x00,0x38,0x44,0x40,0x40,0x4C,0x44,0x4C,0x34,0x00,0x00,0x00, 7, // 0x48 'H' 0x00,0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x49 'I' 0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00, 7, // 0x4A 'J' 0x00,0x1C,0x08,0x08,0x08,0x08,0x48,0x48,0x30,0x00,0x00,0x00, 7, // 0x4B 'K' 0x00,0x44,0x48,0x50,0x60,0x60,0x50,0x48,0x44,0x00,0x00,0x00, 7, // 0x4C 'L' 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00,0x00, 7, // 0x4D 'M' 0x00,0x44,0x6C,0x54,0x54,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x4E 'N' 0x00,0x44,0x64,0x64,0x54,0x54,0x4C,0x4C,0x44,0x00,0x00,0x00, 7, // 0x4F 'O' 0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x50 'P' 0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00,0x00, 7, // 0x51 'Q' 0x00,0x38,0x44,0x44,0x44,0x44,0x54,0x48,0x34,0x00,0x00,0x00, 7, // 0x52 'R' 0x00,0x78,0x44,0x44,0x44,0x78,0x48,0x44,0x44,0x00,0x00,0x00, 7, // 0x53 'S' 0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x54 'T' 0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 7, // 0x55 'U' 0x00,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x56 'V' 0x00,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00,0x00, 7, // 0x57 'W' 0x00,0x44,0x44,0x44,0x44,0x44,0x54,0x54,0x28,0x00,0x00,0x00, 7, // 0x58 'X' 0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x59 'Y' 0x00,0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 7, // 0x5A 'Z' 0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x40,0x7C,0x00,0x00,0x00, 7, // 0x5B '[' 0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00, 7, // 0x5C '\' 0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00, 7, // 0x5D ']' 0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x38,0x00, 7, // 0x5E '^' 0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00, 7, // 0x60 '`' 0x00,0x20,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x61 'a' 0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x3C,0x00,0x00,0x00, 7, // 0x62 'b' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00,0x00, 7, // 0x63 'c' 0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x44,0x38,0x00,0x00,0x00, 7, // 0x64 'd' 0x00,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x3C,0x00,0x00,0x00, 7, // 0x65 'e' 0x00,0x00,0x00,0x38,0x44,0x7C,0x40,0x44,0x38,0x00,0x00,0x00, 7, // 0x66 'f' 0x00,0x0C,0x10,0x38,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 7, // 0x67 'g' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x44,0x38, 7, // 0x68 'h' 0x00,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x69 'i' 0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00, 7, // 0x6A 'j' 0x00,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x48,0x48,0x30, 7, // 0x6B 'k' 0x00,0x40,0x40,0x4C,0x50,0x60,0x50,0x48,0x44,0x00,0x00,0x00, 7, // 0x6C 'l' 0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00, 7, // 0x6D 'm' 0x00,0x00,0x00,0x68,0x54,0x54,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x6E 'n' 0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x44,0x00,0x00,0x00, 7, // 0x6F 'o' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00,0x00, 7, // 0x70 'p' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40,0x40, 7, // 0x71 'q' 0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x04,0x04, 7, // 0x72 'r' 0x00,0x00,0x00,0x58,0x24,0x20,0x20,0x20,0x70,0x00,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x38,0x44,0x30,0x08,0x44,0x38,0x00,0x00,0x00, 7, // 0x74 't' 0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x24,0x18,0x00,0x00,0x00, 7, // 0x75 'u' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x4C,0x34,0x00,0x00,0x00, 7, // 0x76 'v' 0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00,0x00, 7, // 0x77 'w' 0x00,0x00,0x00,0x44,0x44,0x44,0x54,0x54,0x28,0x00,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x3C,0x04,0x08,0x70, 7, // 0x7A 'z' 0x00,0x00,0x00,0x7C,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00, 7, // 0x7B '{' 0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x20,0x18,0x00, 7, // 0x7C '|' 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00, 7, // 0x7D '}' 0x60,0x10,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x10,0x60,0x00, 7, // 0x7E '~' 0x00,0x24,0x54,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x7F '' 0x00,0x10,0x38,0x6C,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u verdana12[] = { 12, 3, 32, 128-32, 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x5A,0x00,0x67,0x00,0x74,0x00, 0x81,0x00,0x8E,0x00,0x9B,0x00,0xA8,0x00,0xB5,0x00,0xC2,0x00,0xCF,0x00,0xDC,0x00,0xE9,0x00, 0xF6,0x00,0x03,0x01,0x10,0x01,0x1D,0x01,0x2A,0x01,0x37,0x01,0x44,0x01,0x51,0x01,0x5E,0x01, 0x6B,0x01,0x78,0x01,0x85,0x01,0x92,0x01,0x9F,0x01,0xAC,0x01,0xC5,0x01,0xD2,0x01,0xDF,0x01, 0xEC,0x01,0xF9,0x01,0x06,0x02,0x13,0x02,0x20,0x02,0x2D,0x02,0x3A,0x02,0x47,0x02,0x54,0x02, 0x61,0x02,0x7A,0x02,0x87,0x02,0xA0,0x02,0xAD,0x02,0xC6,0x02,0xD3,0x02,0xE0,0x02,0xED,0x02, 0xFA,0x02,0x07,0x03,0x20,0x03,0x2D,0x03,0x3A,0x03,0x47,0x03,0x54,0x03,0x61,0x03,0x6E,0x03, 0x7B,0x03,0x88,0x03,0x95,0x03,0xA2,0x03,0xAF,0x03,0xBC,0x03,0xC9,0x03,0xD6,0x03,0xE3,0x03, 0xF0,0x03,0xFD,0x03,0x0A,0x04,0x17,0x04,0x24,0x04,0x31,0x04,0x4A,0x04,0x57,0x04,0x64,0x04, 0x71,0x04,0x7E,0x04,0x8B,0x04,0x98,0x04,0xA5,0x04,0xB2,0x04,0xBF,0x04,0xCC,0x04,0xD9,0x04, 0xE6,0x04,0xF3,0x04,0x00,0x05,0x0D,0x05,0x1A,0x05,0x27,0x05, 3, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x21 '!' 0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, 5, // 0x22 '"' 0x00,0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x23 '#' 0x00,0x00,0x00,0x00,0x28,0x7C,0x28,0x7C,0x28,0x00,0x00,0x00, 7, // 0x24 '$' 0x00,0x00,0x10,0x10,0x3C,0x50,0x30,0x18,0x14,0x78,0x10,0x10, 11, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x4A,0x00,0x4A,0x00,0x35,0x80,0x0A,0x40,0x0A,0x40,0x11,0x80,0x00,0x00,0x00,0x00, 7, // 0x26 '&' 0x00,0x00,0x00,0x30,0x48,0x48,0x32,0x4A,0x44,0x3A,0x00,0x00, 3, // 0x27 ''' 0x00,0x00,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x28 '(' 0x00,0x00,0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x10, 4, // 0x29 ')' 0x00,0x00,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x80, 7, // 0x2A '*' 0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x2B '+' 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00, 3, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80,0x00, 5, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00, 3, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00, 4, // 0x2F '/' 0x00,0x00,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x80,0x00, 7, // 0x30 '0' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x31 '1' 0x00,0x00,0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 7, // 0x32 '2' 0x00,0x00,0x00,0x38,0x44,0x04,0x08,0x10,0x20,0x7C,0x00,0x00, 7, // 0x33 '3' 0x00,0x00,0x00,0x38,0x44,0x04,0x18,0x04,0x44,0x38,0x00,0x00, 7, // 0x34 '4' 0x00,0x00,0x00,0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x00,0x00, 7, // 0x35 '5' 0x00,0x00,0x00,0x7C,0x40,0x78,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x36 '6' 0x00,0x00,0x00,0x18,0x20,0x40,0x78,0x44,0x44,0x38,0x00,0x00, 7, // 0x37 '7' 0x00,0x00,0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x10,0x00,0x00, 7, // 0x38 '8' 0x00,0x00,0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00,0x00, 7, // 0x39 '9' 0x00,0x00,0x00,0x38,0x44,0x44,0x3C,0x04,0x08,0x30,0x00,0x00, 4, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x00, 4, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x40,0x40,0x80,0x00, 7, // 0x3C '<' 0x00,0x00,0x00,0x00,0x04,0x18,0x60,0x18,0x04,0x00,0x00,0x00, 7, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x7C,0x00,0x00,0x00,0x00, 7, // 0x3E '>' 0x00,0x00,0x00,0x00,0x40,0x30,0x0C,0x30,0x40,0x00,0x00,0x00, 6, // 0x3F '?' 0x00,0x00,0x00,0x70,0x08,0x08,0x10,0x20,0x00,0x20,0x00,0x00, 10, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x20,0x80,0x4E,0x80,0x52,0x80,0x52,0x80,0x4D,0x00,0x20,0x00,0x1F,0x00,0x00,0x00, 8, // 0x41 'A' 0x00,0x00,0x00,0x18,0x18,0x24,0x24,0x7E,0x42,0x42,0x00,0x00, 7, // 0x42 'B' 0x00,0x00,0x00,0x70,0x48,0x48,0x78,0x44,0x44,0x78,0x00,0x00, 8, // 0x43 'C' 0x00,0x00,0x00,0x1C,0x22,0x40,0x40,0x40,0x22,0x1C,0x00,0x00, 8, // 0x44 'D' 0x00,0x00,0x00,0x78,0x44,0x42,0x42,0x42,0x44,0x78,0x00,0x00, 7, // 0x45 'E' 0x00,0x00,0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x7C,0x00,0x00, 6, // 0x46 'F' 0x00,0x00,0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x00,0x00, 8, // 0x47 'G' 0x00,0x00,0x00,0x1C,0x22,0x40,0x4E,0x42,0x22,0x1C,0x00,0x00, 8, // 0x48 'H' 0x00,0x00,0x00,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x00,0x00, 5, // 0x49 'I' 0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 5, // 0x4A 'J' 0x00,0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0xE0,0x00,0x00, 7, // 0x4B 'K' 0x00,0x00,0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00, 6, // 0x4C 'L' 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00, 9, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x55,0x00,0x55,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x00,0x00,0x00,0x00, 8, // 0x4E 'N' 0x00,0x00,0x00,0x42,0x62,0x52,0x4A,0x46,0x42,0x42,0x00,0x00, 9, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, 7, // 0x50 'P' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x00,0x00, 9, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x04,0x00,0x03,0x00, 7, // 0x52 'R' 0x00,0x00,0x00,0x78,0x44,0x44,0x78,0x50,0x48,0x44,0x00,0x00, 7, // 0x53 'S' 0x00,0x00,0x00,0x38,0x44,0x40,0x38,0x04,0x44,0x38,0x00,0x00, 7, // 0x54 'T' 0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 8, // 0x55 'U' 0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00, 8, // 0x56 'V' 0x00,0x00,0x00,0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x00, 9, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x49,0x00,0x49,0x00,0x55,0x00,0x55,0x00,0x22,0x00,0x22,0x00,0x00,0x00,0x00,0x00, 7, // 0x58 'X' 0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00, 7, // 0x59 'Y' 0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x10,0x10,0x00,0x00, 7, // 0x5A 'Z' 0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00, 4, // 0x5B '[' 0x00,0x00,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x60, 4, // 0x5C '\' 0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x00, 4, // 0x5D ']' 0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60, 7, // 0x5E '^' 0x00,0x00,0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC, 6, // 0x60 '`' 0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x38,0x48,0x38,0x00,0x00, 6, // 0x62 'b' 0x00,0x00,0x40,0x40,0x40,0x70,0x48,0x48,0x48,0x70,0x00,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x40,0x40,0x38,0x00,0x00, 6, // 0x64 'd' 0x00,0x00,0x08,0x08,0x08,0x38,0x48,0x48,0x48,0x38,0x00,0x00, 6, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x78,0x40,0x38,0x00,0x00, 4, // 0x66 'f' 0x00,0x00,0x30,0x40,0x40,0xE0,0x40,0x40,0x40,0x40,0x00,0x00, 6, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x38,0x08,0x30, 6, // 0x68 'h' 0x00,0x00,0x40,0x40,0x40,0x70,0x48,0x48,0x48,0x48,0x00,0x00, 3, // 0x69 'i' 0x00,0x00,0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 3, // 0x6A 'j' 0x00,0x00,0x00,0x40,0x00,0xC0,0x40,0x40,0x40,0x40,0x40,0x80, 6, // 0x6B 'k' 0x00,0x00,0x40,0x40,0x40,0x48,0x50,0x60,0x50,0x48,0x00,0x00, 3, // 0x6C 'l' 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 9, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x49,0x00,0x00,0x00,0x00,0x00, 6, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x70,0x48,0x48,0x48,0x48,0x00,0x00, 6, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x30,0x00,0x00, 6, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x70,0x48,0x48,0x48,0x70,0x40,0x40, 6, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x38,0x08,0x08, 4, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x50,0x60,0x40,0x40,0x40,0x00,0x00, 6, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x30,0x08,0x70,0x00,0x00, 4, // 0x74 't' 0x00,0x00,0x00,0x00,0x40,0xF0,0x40,0x40,0x40,0x30,0x00,0x00, 6, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x48,0x38,0x00,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x30,0x30,0x00,0x00, 7, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x44,0x54,0x54,0x28,0x28,0x00,0x00, 6, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x30,0x48,0x48,0x00,0x00, 6, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x30,0x10,0x20,0x20, 5, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x70,0x10,0x20,0x40,0x70,0x00,0x00, 6, // 0x7B '{' 0x00,0x00,0x18,0x20,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x18, 5, // 0x7C '|' 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 6, // 0x7D '}' 0x00,0x00,0x60,0x10,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x60, 7, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x58,0x00,0x00,0x00,0x00, 9, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u verdana12_bold[] = { 12, 3, 32, 128-32, 0x00,0x00,0x0D,0x00,0x1A,0x00,0x27,0x00,0x34,0x00,0x41,0x00,0x5A,0x00,0x67,0x00,0x74,0x00, 0x81,0x00,0x8E,0x00,0x9B,0x00,0xA8,0x00,0xB5,0x00,0xC2,0x00,0xCF,0x00,0xDC,0x00,0xE9,0x00, 0xF6,0x00,0x03,0x01,0x10,0x01,0x1D,0x01,0x2A,0x01,0x37,0x01,0x44,0x01,0x51,0x01,0x5E,0x01, 0x6B,0x01,0x78,0x01,0x85,0x01,0x92,0x01,0x9F,0x01,0xAC,0x01,0xC5,0x01,0xD2,0x01,0xDF,0x01, 0xEC,0x01,0xF9,0x01,0x06,0x02,0x13,0x02,0x20,0x02,0x2D,0x02,0x3A,0x02,0x47,0x02,0x54,0x02, 0x61,0x02,0x6E,0x02,0x7B,0x02,0x88,0x02,0x95,0x02,0xA2,0x02,0xAF,0x02,0xBC,0x02,0xC9,0x02, 0xD6,0x02,0xE3,0x02,0xFC,0x02,0x09,0x03,0x16,0x03,0x23,0x03,0x30,0x03,0x3D,0x03,0x4A,0x03, 0x57,0x03,0x64,0x03,0x71,0x03,0x7E,0x03,0x8B,0x03,0x98,0x03,0xA5,0x03,0xB2,0x03,0xBF,0x03, 0xCC,0x03,0xD9,0x03,0xE6,0x03,0xF3,0x03,0x00,0x04,0x0D,0x04,0x26,0x04,0x33,0x04,0x40,0x04, 0x4D,0x04,0x5A,0x04,0x67,0x04,0x74,0x04,0x81,0x04,0x8E,0x04,0x9B,0x04,0xB4,0x04,0xC1,0x04, 0xCE,0x04,0xDB,0x04,0xE8,0x04,0xF5,0x04,0x02,0x05,0x0F,0x05, 3, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x21 '!' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x00,0x60,0x00,0x00, 5, // 0x22 '"' 0x00,0x00,0xD8,0xD8,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x23 '#' 0x00,0x00,0x00,0x14,0x14,0x7E,0x28,0xFC,0x50,0x50,0x00,0x00, 6, // 0x24 '$' 0x00,0x00,0x20,0x20,0x70,0xE8,0xE0,0x38,0xB8,0x70,0x20,0x20, 11, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x00,0x94,0x00,0x94,0x00,0x69,0x80,0x0A,0x40,0x0A,0x40,0x11,0x80,0x00,0x00,0x00,0x00, 8, // 0x26 '&' 0x00,0x00,0x00,0x70,0xD8,0xD8,0x76,0xDC,0xCC,0x76,0x00,0x00, 3, // 0x27 ''' 0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x00,0x00,0x30,0x60,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x60,0x30, 5, // 0x29 ')' 0x00,0x00,0xC0,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0xC0, 6, // 0x2A '*' 0x00,0x00,0x20,0xA8,0x70,0xA8,0x20,0x00,0x00,0x00,0x00,0x00, 8, // 0x2B '+' 0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00,0x00, 3, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x00, 4, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00, 3, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00, 6, // 0x2F '/' 0x00,0x00,0x08,0x08,0x10,0x10,0x20,0x40,0x40,0x80,0x80,0x00, 6, // 0x30 '0' 0x00,0x00,0x00,0x70,0xD8,0xD8,0xD8,0xD8,0xD8,0x70,0x00,0x00, 6, // 0x31 '1' 0x00,0x00,0x00,0x30,0x70,0x30,0x30,0x30,0x30,0x78,0x00,0x00, 6, // 0x32 '2' 0x00,0x00,0x00,0x70,0x98,0x18,0x30,0x60,0xC0,0xF8,0x00,0x00, 6, // 0x33 '3' 0x00,0x00,0x00,0x70,0x98,0x18,0x70,0x18,0x98,0x70,0x00,0x00, 6, // 0x34 '4' 0x00,0x00,0x00,0x18,0x38,0x58,0x98,0xFC,0x18,0x18,0x00,0x00, 6, // 0x35 '5' 0x00,0x00,0x00,0xF8,0xC0,0xF0,0x18,0x18,0x98,0x70,0x00,0x00, 6, // 0x36 '6' 0x00,0x00,0x00,0x70,0xC0,0xF0,0xD8,0xD8,0xD8,0x70,0x00,0x00, 6, // 0x37 '7' 0x00,0x00,0x00,0xF8,0x18,0x30,0x30,0x60,0x60,0xC0,0x00,0x00, 6, // 0x38 '8' 0x00,0x00,0x00,0x70,0xD8,0xD8,0x70,0xD8,0xD8,0x70,0x00,0x00, 6, // 0x39 '9' 0x00,0x00,0x00,0x70,0xD8,0xD8,0xD8,0x78,0x18,0x70,0x00,0x00, 4, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x00,0x00, 4, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x40,0x00, 8, // 0x3C '<' 0x00,0x00,0x00,0x00,0x04,0x18,0x60,0x60,0x18,0x04,0x00,0x00, 8, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x7C,0x00,0x00,0x00,0x00, 8, // 0x3E '>' 0x00,0x00,0x00,0x00,0x40,0x30,0x0C,0x0C,0x30,0x40,0x00,0x00, 6, // 0x3F '?' 0x00,0x00,0x00,0xF0,0x18,0x18,0x30,0x60,0x00,0x60,0x00,0x00, 9, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x9D,0x00,0xA5,0x00,0xA5,0x00,0x9E,0x00,0x40,0x00,0x3C,0x00,0x00,0x00, 8, // 0x41 'A' 0x00,0x00,0x00,0x38,0x38,0x6C,0x6C,0x7C,0xC6,0xC6,0x00,0x00, 7, // 0x42 'B' 0x00,0x00,0x00,0xF8,0xCC,0xCC,0xF8,0xCC,0xCC,0xF8,0x00,0x00, 6, // 0x43 'C' 0x00,0x00,0x00,0x70,0xC8,0xC0,0xC0,0xC0,0xC8,0x70,0x00,0x00, 7, // 0x44 'D' 0x00,0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0xCC,0xF8,0x00,0x00, 6, // 0x45 'E' 0x00,0x00,0x00,0xF8,0xC0,0xC0,0xF8,0xC0,0xC0,0xF8,0x00,0x00, 6, // 0x46 'F' 0x00,0x00,0x00,0xF8,0xC0,0xC0,0xF8,0xC0,0xC0,0xC0,0x00,0x00, 7, // 0x47 'G' 0x00,0x00,0x00,0x78,0xC4,0xC0,0xC0,0xDC,0xCC,0x7C,0x00,0x00, 7, // 0x48 'H' 0x00,0x00,0x00,0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00,0x00, 5, // 0x49 'I' 0x00,0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x60,0xF0,0x00,0x00, 5, // 0x4A 'J' 0x00,0x00,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0xE0,0x00,0x00, 7, // 0x4B 'K' 0x00,0x00,0x00,0xCC,0xD8,0xF0,0xE0,0xF0,0xD8,0xCC,0x00,0x00, 6, // 0x4C 'L' 0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xF8,0x00,0x00, 8, // 0x4D 'M' 0x00,0x00,0x00,0x82,0xC6,0xEE,0xB6,0xB6,0x86,0x86,0x00,0x00, 7, // 0x4E 'N' 0x00,0x00,0x00,0x84,0xC4,0xE4,0xB4,0x9C,0x8C,0x84,0x00,0x00, 8, // 0x4F 'O' 0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00, 7, // 0x50 'P' 0x00,0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xF8,0xC0,0xC0,0x00,0x00, 8, // 0x51 'Q' 0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x18,0x0E, 7, // 0x52 'R' 0x00,0x00,0x00,0xF8,0xCC,0xCC,0xF8,0xD8,0xCC,0xC6,0x00,0x00, 6, // 0x53 'S' 0x00,0x00,0x00,0x70,0xC8,0xC0,0x70,0x18,0x98,0x70,0x00,0x00, 6, // 0x54 'T' 0x00,0x00,0x00,0xFC,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00, 7, // 0x55 'U' 0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x00,0x00, 7, // 0x56 'V' 0x00,0x00,0x00,0xCC,0xCC,0x78,0x78,0x78,0x30,0x30,0x00,0x00, 11, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0xC0,0xCC,0xC0,0x6D,0x80,0x6D,0x80,0x73,0x80,0x33,0x00,0x33,0x00,0x00,0x00,0x00,0x00, 7, // 0x58 'X' 0x00,0x00,0x00,0xCC,0xCC,0x78,0x30,0x78,0xCC,0xCC,0x00,0x00, 7, // 0x59 'Y' 0x00,0x00,0x00,0xCC,0xCC,0x78,0x30,0x30,0x30,0x30,0x00,0x00, 6, // 0x5A 'Z' 0x00,0x00,0x00,0xF8,0x18,0x30,0x60,0xC0,0xC0,0xF8,0x00,0x00, 5, // 0x5B '[' 0x00,0x00,0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x70, 6, // 0x5C '\' 0x00,0x00,0x80,0x80,0x40,0x40,0x20,0x10,0x10,0x08,0x08,0x00, 5, // 0x5D ']' 0x00,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x70, 8, // 0x5E '^' 0x00,0x00,0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC, 6, // 0x60 '`' 0x00,0x00,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x70,0x18,0x78,0xD8,0x78,0x00,0x00, 6, // 0x62 'b' 0x00,0x00,0xC0,0xC0,0xC0,0xF0,0xD8,0xD8,0xD8,0xF0,0x00,0x00, 5, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x70,0xC0,0xC0,0xC0,0x70,0x00,0x00, 6, // 0x64 'd' 0x00,0x00,0x18,0x18,0x18,0x78,0xD8,0xD8,0xD8,0x78,0x00,0x00, 6, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x70,0xD8,0xF8,0xC0,0x78,0x00,0x00, 5, // 0x66 'f' 0x00,0x00,0x38,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x00,0x00, 6, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x78,0xD8,0xD8,0xD8,0x78,0x18,0x70, 6, // 0x68 'h' 0x00,0x00,0xC0,0xC0,0xC0,0xF0,0xD8,0xD8,0xD8,0xD8,0x00,0x00, 3, // 0x69 'i' 0x00,0x00,0x00,0xC0,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00, 4, // 0x6A 'j' 0x00,0x00,0x00,0x60,0x00,0xE0,0x60,0x60,0x60,0x60,0x60,0xC0, 6, // 0x6B 'k' 0x00,0x00,0xC0,0xC0,0xC0,0xD8,0xD8,0xF0,0xD8,0xD8,0x00,0x00, 3, // 0x6C 'l' 0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00, 9, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x00,0xDB,0x00,0xDB,0x00,0xDB,0x00,0xDB,0x00,0x00,0x00,0x00,0x00, 6, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0xF0,0xD8,0xD8,0xD8,0xD8,0x00,0x00, 6, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x70,0xD8,0xD8,0xD8,0x70,0x00,0x00, 6, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0xF0,0xD8,0xD8,0xD8,0xF0,0xC0,0xC0, 6, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x78,0xD8,0xD8,0xD8,0x78,0x18,0x18, 4, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0xD0,0xE0,0xC0,0xC0,0xC0,0x00,0x00, 5, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x70,0xC0,0xF0,0x30,0xE0,0x00,0x00, 5, // 0x74 't' 0x00,0x00,0x00,0x60,0x60,0xF8,0x60,0x60,0x60,0x38,0x00,0x00, 6, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0xD8,0xD8,0xD8,0xD8,0x78,0x00,0x00, 6, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0xD8,0xD8,0xD8,0x70,0x70,0x00,0x00, 9, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x00,0xDB,0x00,0xDB,0x00,0x66,0x00,0x66,0x00,0x00,0x00,0x00,0x00, 6, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0xD8,0xD8,0x70,0xD8,0xD8,0x00,0x00, 6, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0xD8,0xD8,0xD8,0x70,0x70,0x30,0x60, 5, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0xF0,0x30,0x60,0xC0,0xF0,0x00,0x00, 6, // 0x7B '{' 0x00,0x00,0x18,0x30,0x30,0x30,0xE0,0x30,0x30,0x30,0x30,0x18, 5, // 0x7C '|' 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 6, // 0x7D '}' 0x00,0x00,0xC0,0x60,0x60,0x60,0x38,0x60,0x60,0x60,0x60,0xC0, 8, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x92,0x8C,0x00,0x00,0x00, 9, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u verdana13[] = { 13, 3, 32, 128-32, 0x00,0x00,0x0E,0x00,0x1C,0x00,0x2A,0x00,0x45,0x00,0x53,0x00,0x6E,0x00,0x7C,0x00,0x8A,0x00, 0x98,0x00,0xA6,0x00,0xB4,0x00,0xCF,0x00,0xDD,0x00,0xEB,0x00,0xF9,0x00,0x07,0x01,0x15,0x01, 0x23,0x01,0x31,0x01,0x3F,0x01,0x4D,0x01,0x5B,0x01,0x69,0x01,0x77,0x01,0x85,0x01,0x93,0x01, 0xA1,0x01,0xAF,0x01,0xCA,0x01,0xE5,0x01,0x00,0x02,0x0E,0x02,0x29,0x02,0x37,0x02,0x45,0x02, 0x60,0x02,0x7B,0x02,0x89,0x02,0x97,0x02,0xB2,0x02,0xC0,0x02,0xCE,0x02,0xDC,0x02,0xEA,0x02, 0xF8,0x02,0x13,0x03,0x21,0x03,0x3C,0x03,0x4A,0x03,0x65,0x03,0x73,0x03,0x81,0x03,0x8F,0x03, 0x9D,0x03,0xAB,0x03,0xC6,0x03,0xD4,0x03,0xE2,0x03,0xF0,0x03,0xFE,0x03,0x0C,0x04,0x1A,0x04, 0x35,0x04,0x43,0x04,0x51,0x04,0x5F,0x04,0x6D,0x04,0x7B,0x04,0x89,0x04,0x97,0x04,0xA5,0x04, 0xB3,0x04,0xC1,0x04,0xCF,0x04,0xDD,0x04,0xEB,0x04,0xF9,0x04,0x14,0x05,0x22,0x05,0x30,0x05, 0x3E,0x05,0x4C,0x05,0x5A,0x05,0x68,0x05,0x76,0x05,0x84,0x05,0x92,0x05,0xAD,0x05,0xBB,0x05, 0xC9,0x05,0xD7,0x05,0xE5,0x05,0xF3,0x05,0x01,0x06,0x1C,0x06, 4, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x21 '!' 0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, 5, // 0x22 '"' 0x00,0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x0A,0x00,0x3F,0x00,0x14,0x00,0x14,0x00,0x7E,0x00,0x28,0x00,0x28,0x00,0x00,0x00,0x00,0x00, 7, // 0x24 '$' 0x00,0x00,0x10,0x10,0x3C,0x50,0x50,0x38,0x14,0x14,0x78,0x10,0x10, 12, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x49,0x00,0x4A,0x00,0x32,0x00,0x04,0xC0,0x05,0x20,0x09,0x20,0x08,0xC0,0x00,0x00,0x00,0x00, 8, // 0x26 '&' 0x00,0x00,0x00,0x30,0x48,0x48,0x32,0x4A,0x44,0x46,0x39,0x00,0x00, 3, // 0x27 ''' 0x00,0x00,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x00,0x00,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10, 5, // 0x29 ')' 0x00,0x00,0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40, 7, // 0x2A '*' 0x00,0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00, 4, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40, 5, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00, 4, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00, 5, // 0x2F '/' 0x00,0x00,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00, 7, // 0x30 '0' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x31 '1' 0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00, 7, // 0x32 '2' 0x00,0x00,0x00,0x38,0x44,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00, 7, // 0x33 '3' 0x00,0x00,0x00,0x38,0x44,0x04,0x18,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x34 '4' 0x00,0x00,0x00,0x08,0x18,0x28,0x48,0x88,0xFC,0x08,0x08,0x00,0x00, 7, // 0x35 '5' 0x00,0x00,0x00,0x7C,0x40,0x40,0x78,0x04,0x04,0x44,0x38,0x00,0x00, 7, // 0x36 '6' 0x00,0x00,0x00,0x18,0x20,0x40,0x78,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x37 '7' 0x00,0x00,0x00,0x7C,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x00,0x00, 7, // 0x38 '8' 0x00,0x00,0x00,0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x39 '9' 0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x3C,0x04,0x08,0x30,0x00,0x00, 5, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x20,0x20,0x00,0x00, 5, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x20,0x20,0x20,0x40, 9, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x3F '?' 0x00,0x00,0x00,0x70,0x08,0x08,0x10,0x20,0x20,0x00,0x20,0x00,0x00, 10, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x20,0x80,0x4E,0x80,0x52,0x80,0x52,0x80,0x52,0x80,0x4D,0x00,0x20,0x00,0x1E,0x00,0x00,0x00, 8, // 0x41 'A' 0x00,0x00,0x00,0x18,0x18,0x24,0x24,0x24,0x7E,0x42,0x42,0x00,0x00, 8, // 0x42 'B' 0x00,0x00,0x00,0x78,0x44,0x44,0x7C,0x42,0x42,0x42,0x7C,0x00,0x00, 9, // 0x43 'C' 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00, 9, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00, 7, // 0x45 'E' 0x00,0x00,0x00,0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C,0x00,0x00, 6, // 0x46 'F' 0x00,0x00,0x00,0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x40,0x00,0x00, 9, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x47,0x00,0x41,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00, 8, // 0x48 'H' 0x00,0x00,0x00,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0x00,0x00, 5, // 0x49 'I' 0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 5, // 0x4A 'J' 0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0xE0,0x00,0x00, 8, // 0x4B 'K' 0x00,0x00,0x00,0x42,0x44,0x48,0x50,0x70,0x48,0x44,0x42,0x00,0x00, 6, // 0x4C 'L' 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00,0x00, 9, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x55,0x00,0x55,0x00,0x49,0x00,0x49,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00, 8, // 0x4E 'N' 0x00,0x00,0x00,0x62,0x62,0x52,0x52,0x4A,0x4A,0x46,0x46,0x00,0x00, 9, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, 7, // 0x50 'P' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x40,0x40,0x40,0x00,0x00, 9, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x04,0x00,0x03,0x00, 8, // 0x52 'R' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x78,0x48,0x44,0x42,0x00,0x00, 8, // 0x53 'S' 0x00,0x00,0x00,0x3C,0x42,0x40,0x30,0x0C,0x02,0x42,0x3C,0x00,0x00, 7, // 0x54 'T' 0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 8, // 0x55 'U' 0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00, 8, // 0x56 'V' 0x00,0x00,0x00,0x42,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x00,0x00, 11, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x40,0x44,0x40,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00, 8, // 0x58 'X' 0x00,0x00,0x00,0x42,0x42,0x24,0x18,0x18,0x24,0x42,0x42,0x00,0x00, 7, // 0x59 'Y' 0x00,0x00,0x00,0x82,0x44,0x28,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 8, // 0x5A 'Z' 0x00,0x00,0x00,0x7E,0x02,0x04,0x08,0x10,0x20,0x40,0x7E,0x00,0x00, 5, // 0x5B '[' 0x00,0x00,0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70, 5, // 0x5C '\' 0x00,0x00,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00, 5, // 0x5D ']' 0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70, 9, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x14,0x00,0x22,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE, 7, // 0x60 '`' 0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x38,0x04,0x3C,0x44,0x44,0x3C,0x00,0x00, 7, // 0x62 'b' 0x00,0x00,0x40,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x78,0x00,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x44,0x38,0x00,0x00, 7, // 0x64 'd' 0x00,0x00,0x04,0x04,0x04,0x3C,0x44,0x44,0x44,0x44,0x3C,0x00,0x00, 7, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x7C,0x40,0x44,0x38,0x00,0x00, 4, // 0x66 'f' 0x00,0x00,0x30,0x40,0x40,0xF0,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 7, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x38, 7, // 0x68 'h' 0x00,0x00,0x40,0x40,0x40,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00, 3, // 0x69 'i' 0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 4, // 0x6A 'j' 0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0xC0, 7, // 0x6B 'k' 0x00,0x00,0x40,0x40,0x40,0x44,0x48,0x50,0x70,0x48,0x44,0x00,0x00, 3, // 0x6C 'l' 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 11, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7B,0x80,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x00,0x00,0x00,0x00, 7, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x44,0x00,0x00, 7, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 7, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x44,0x78,0x40,0x40, 7, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x3C,0x44,0x44,0x44,0x44,0x3C,0x04,0x04, 5, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x58,0x60,0x40,0x40,0x40,0x40,0x00,0x00, 6, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x60,0x18,0x08,0x70,0x00,0x00, 4, // 0x74 't' 0x00,0x00,0x00,0x40,0x40,0xF0,0x40,0x40,0x40,0x40,0x30,0x00,0x00, 7, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x44,0x44,0x44,0x3C,0x00,0x00, 7, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00, 9, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x00,0x49,0x00,0x55,0x00,0x55,0x00,0x22,0x00,0x22,0x00,0x00,0x00,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x44,0x28,0x10,0x10,0x28,0x44,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x44,0x28,0x28,0x28,0x10,0x10,0x10,0x20, 6, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x78,0x08,0x10,0x20,0x40,0x78,0x00,0x00, 7, // 0x7B '{' 0x00,0x00,0x0C,0x10,0x10,0x10,0x10,0x60,0x10,0x10,0x10,0x10,0x0C, 5, // 0x7C '|' 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 7, // 0x7D '}' 0x00,0x00,0x60,0x10,0x10,0x10,0x10,0x0C,0x10,0x10,0x10,0x10,0x60, 9, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x49,0x00,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x7F,0x80,0x00,0x00,0x00,0x00, 0 }; const int8u verdana13_bold[] = { 13, 3, 32, 128-32, 0x00,0x00,0x0E,0x00,0x1C,0x00,0x2A,0x00,0x45,0x00,0x53,0x00,0x6E,0x00,0x89,0x00,0x97,0x00, 0xA5,0x00,0xB3,0x00,0xC1,0x00,0xDC,0x00,0xEA,0x00,0xF8,0x00,0x06,0x01,0x14,0x01,0x22,0x01, 0x30,0x01,0x3E,0x01,0x4C,0x01,0x5A,0x01,0x68,0x01,0x76,0x01,0x84,0x01,0x92,0x01,0xA0,0x01, 0xAE,0x01,0xBC,0x01,0xD7,0x01,0xF2,0x01,0x0D,0x02,0x1B,0x02,0x36,0x02,0x51,0x02,0x5F,0x02, 0x6D,0x02,0x88,0x02,0x96,0x02,0xA4,0x02,0xBF,0x02,0xDA,0x02,0xE8,0x02,0xF6,0x02,0x04,0x03, 0x12,0x03,0x2D,0x03,0x48,0x03,0x63,0x03,0x71,0x03,0x8C,0x03,0x9A,0x03,0xA8,0x03,0xB6,0x03, 0xD1,0x03,0xDF,0x03,0xFA,0x03,0x08,0x04,0x16,0x04,0x24,0x04,0x32,0x04,0x40,0x04,0x4E,0x04, 0x69,0x04,0x77,0x04,0x85,0x04,0x93,0x04,0xA1,0x04,0xAF,0x04,0xBD,0x04,0xCB,0x04,0xD9,0x04, 0xE7,0x04,0xF5,0x04,0x03,0x05,0x11,0x05,0x1F,0x05,0x2D,0x05,0x48,0x05,0x56,0x05,0x64,0x05, 0x72,0x05,0x80,0x05,0x8E,0x05,0x9C,0x05,0xAA,0x05,0xB8,0x05,0xC6,0x05,0xE1,0x05,0xEF,0x05, 0xFD,0x05,0x0B,0x06,0x19,0x06,0x27,0x06,0x35,0x06,0x50,0x06, 4, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x21 '!' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x60,0x00,0x00, 7, // 0x22 '"' 0x00,0x00,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x0A,0x00,0x3F,0x00,0x14,0x00,0x14,0x00,0x7E,0x00,0x28,0x00,0x28,0x00,0x00,0x00,0x00,0x00, 8, // 0x24 '$' 0x00,0x00,0x08,0x08,0x3C,0x6A,0x68,0x3C,0x16,0x56,0x3C,0x10,0x10, 14, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x80,0x6C,0x80,0x6D,0x00,0x6D,0x70,0x3A,0xD8,0x02,0xD8,0x04,0xD8,0x04,0x70,0x00,0x00,0x00,0x00, 10, // 0x26 '&' 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x6C,0x00,0x6C,0x00,0x39,0x80,0x6D,0x00,0x66,0x00,0x63,0x00,0x3D,0x80,0x00,0x00,0x00,0x00, 4, // 0x27 ''' 0x00,0x00,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x28 '(' 0x00,0x00,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18, 6, // 0x29 ')' 0x00,0x00,0x60,0x30,0x30,0x18,0x18,0x18,0x18,0x18,0x30,0x30,0x60, 8, // 0x2A '*' 0x00,0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00, 4, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x40, 6, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00, 4, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00, 8, // 0x2F '/' 0x00,0x00,0x06,0x06,0x0C,0x0C,0x18,0x18,0x18,0x30,0x30,0x60,0x60, 8, // 0x30 '0' 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00, 8, // 0x31 '1' 0x00,0x00,0x00,0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00, 8, // 0x32 '2' 0x00,0x00,0x00,0x3C,0x66,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00, 8, // 0x33 '3' 0x00,0x00,0x00,0x3C,0x66,0x06,0x1C,0x06,0x06,0x66,0x3C,0x00,0x00, 8, // 0x34 '4' 0x00,0x00,0x00,0x04,0x0C,0x1C,0x2C,0x4C,0x7E,0x0C,0x0C,0x00,0x00, 8, // 0x35 '5' 0x00,0x00,0x00,0x3E,0x30,0x30,0x3C,0x06,0x06,0x66,0x3C,0x00,0x00, 8, // 0x36 '6' 0x00,0x00,0x00,0x1C,0x30,0x60,0x7C,0x66,0x66,0x66,0x3C,0x00,0x00, 8, // 0x37 '7' 0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x00,0x00, 8, // 0x38 '8' 0x00,0x00,0x00,0x3C,0x66,0x66,0x3C,0x66,0x66,0x66,0x3C,0x00,0x00, 8, // 0x39 '9' 0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00,0x00, 4, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x00,0x00, 4, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x60,0x40, 9, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0x00,0x00,0x00, 9, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x00,0x00,0x00,0x00, 7, // 0x3F '?' 0x00,0x00,0x00,0x38,0x4C,0x0C,0x18,0x30,0x30,0x00,0x30,0x00,0x00, 11, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x4F,0x40,0x5B,0x40,0x5B,0x40,0x5B,0x40,0x4F,0x80,0x20,0x00,0x1F,0x00,0x00,0x00, 9, // 0x41 'A' 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x7F,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00, 8, // 0x42 'B' 0x00,0x00,0x00,0x7C,0x66,0x66,0x7C,0x66,0x66,0x66,0x7C,0x00,0x00, 8, // 0x43 'C' 0x00,0x00,0x00,0x3C,0x62,0x60,0x60,0x60,0x60,0x62,0x3C,0x00,0x00, 9, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x66,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x66,0x00,0x7C,0x00,0x00,0x00,0x00,0x00, 8, // 0x45 'E' 0x00,0x00,0x00,0x7E,0x60,0x60,0x7E,0x60,0x60,0x60,0x7E,0x00,0x00, 8, // 0x46 'F' 0x00,0x00,0x00,0x7E,0x60,0x60,0x7E,0x60,0x60,0x60,0x60,0x00,0x00, 9, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x61,0x00,0x60,0x00,0x60,0x00,0x67,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x00,0x00,0x00,0x00, 9, // 0x48 'H' 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00, 6, // 0x49 'I' 0x00,0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00, 6, // 0x4A 'J' 0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0xF0,0x00,0x00, 8, // 0x4B 'K' 0x00,0x00,0x00,0x66,0x6C,0x78,0x70,0x70,0x78,0x6C,0x66,0x00,0x00, 7, // 0x4C 'L' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00, 10, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x80,0x71,0x80,0x7B,0x80,0x5D,0x80,0x49,0x80,0x41,0x80,0x41,0x80,0x41,0x80,0x00,0x00,0x00,0x00, 9, // 0x4E 'N' 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x61,0x00,0x71,0x00,0x59,0x00,0x4D,0x00,0x47,0x00,0x43,0x00,0x41,0x00,0x00,0x00,0x00,0x00, 9, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00, 8, // 0x50 'P' 0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00,0x00, 9, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x0C,0x00,0x07,0x00, 8, // 0x52 'R' 0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x6C,0x66,0x63,0x00,0x00, 8, // 0x53 'S' 0x00,0x00,0x00,0x3C,0x62,0x60,0x7C,0x3E,0x06,0x46,0x3C,0x00,0x00, 8, // 0x54 'T' 0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00, 9, // 0x55 'U' 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00, 8, // 0x56 'V' 0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x00, 12, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x60,0x66,0x60,0x66,0x60,0x36,0xC0,0x3F,0xC0,0x39,0xC0,0x19,0x80,0x19,0x80,0x00,0x00,0x00,0x00, 8, // 0x58 'X' 0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x18,0x3C,0x66,0x66,0x00,0x00, 8, // 0x59 'Y' 0x00,0x00,0x00,0x66,0x66,0x3C,0x3C,0x18,0x18,0x18,0x18,0x00,0x00, 8, // 0x5A 'Z' 0x00,0x00,0x00,0x7E,0x06,0x0E,0x1C,0x38,0x70,0x60,0x7E,0x00,0x00, 6, // 0x5B '[' 0x00,0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x78, 8, // 0x5C '\' 0x00,0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x18,0x0C,0x0C,0x06,0x06, 6, // 0x5D ']' 0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78, 10, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, 8, // 0x60 '`' 0x00,0x00,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00, 8, // 0x62 'b' 0x00,0x00,0x60,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x7C,0x00,0x00, 7, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x60,0x60,0x60,0x3C,0x00,0x00, 8, // 0x64 'd' 0x00,0x00,0x06,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x3E,0x00,0x00, 8, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x7E,0x60,0x62,0x3C,0x00,0x00, 5, // 0x66 'f' 0x00,0x00,0x38,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x00,0x00, 8, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x3E,0x06,0x3C, 8, // 0x68 'h' 0x00,0x00,0x60,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x00,0x00, 4, // 0x69 'i' 0x00,0x00,0x00,0x60,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00, 5, // 0x6A 'j' 0x00,0x00,0x00,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0xE0, 8, // 0x6B 'k' 0x00,0x00,0x60,0x60,0x60,0x66,0x6C,0x78,0x78,0x6C,0x66,0x00,0x00, 4, // 0x6C 'l' 0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00, 12, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7D,0xC0,0x66,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x00,0x00,0x00,0x00, 8, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x00,0x00, 8, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00,0x00, 8, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x7C,0x60,0x60, 8, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x3E,0x06,0x06, 6, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x6C,0x7C,0x60,0x60,0x60,0x60,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x78,0x3C,0x0C,0x78,0x00,0x00, 5, // 0x74 't' 0x00,0x00,0x00,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x38,0x00,0x00, 8, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00, 8, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x3C,0x18,0x00,0x00, 10, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6D,0x80,0x6D,0x80,0x6D,0x80,0x6D,0x80,0x33,0x00,0x33,0x00,0x00,0x00,0x00,0x00, 8, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x3C,0x66,0x66,0x00,0x00, 8, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x3C,0x18,0x18,0x30,0x30, 7, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x7C,0x0C,0x18,0x30,0x60,0x7C,0x00,0x00, 8, // 0x7B '{' 0x00,0x00,0x0E,0x18,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E, 6, // 0x7C '|' 0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, 8, // 0x7D '}' 0x00,0x00,0x70,0x18,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70, 9, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x49,0x00,0x49,0x00,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x7F,0x80,0x00,0x00,0x00,0x00, 0 }; const int8u verdana14[] = { 14, 3, 32, 128-32, 0x00,0x00,0x0F,0x00,0x1E,0x00,0x2D,0x00,0x4A,0x00,0x59,0x00,0x76,0x00,0x93,0x00,0xA2,0x00, 0xB1,0x00,0xC0,0x00,0xCF,0x00,0xEC,0x00,0xFB,0x00,0x0A,0x01,0x19,0x01,0x28,0x01,0x37,0x01, 0x46,0x01,0x55,0x01,0x64,0x01,0x73,0x01,0x82,0x01,0x91,0x01,0xA0,0x01,0xAF,0x01,0xBE,0x01, 0xCD,0x01,0xDC,0x01,0xF9,0x01,0x16,0x02,0x33,0x02,0x42,0x02,0x5F,0x02,0x6E,0x02,0x7D,0x02, 0x9A,0x02,0xB7,0x02,0xC6,0x02,0xD5,0x02,0xF2,0x02,0x0F,0x03,0x1E,0x03,0x2D,0x03,0x3C,0x03, 0x4B,0x03,0x68,0x03,0x85,0x03,0xA2,0x03,0xB1,0x03,0xCE,0x03,0xDD,0x03,0xEC,0x03,0xFB,0x03, 0x18,0x04,0x27,0x04,0x44,0x04,0x53,0x04,0x62,0x04,0x71,0x04,0x80,0x04,0x8F,0x04,0x9E,0x04, 0xBB,0x04,0xCA,0x04,0xD9,0x04,0xE8,0x04,0xF7,0x04,0x06,0x05,0x15,0x05,0x24,0x05,0x33,0x05, 0x42,0x05,0x51,0x05,0x60,0x05,0x6F,0x05,0x7E,0x05,0x8D,0x05,0xAA,0x05,0xB9,0x05,0xC8,0x05, 0xD7,0x05,0xE6,0x05,0xF5,0x05,0x04,0x06,0x13,0x06,0x22,0x06,0x31,0x06,0x4E,0x06,0x5D,0x06, 0x6C,0x06,0x7B,0x06,0x8A,0x06,0x99,0x06,0xA8,0x06,0xC5,0x06, 4, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x21 '!' 0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, 6, // 0x22 '"' 0x00,0x00,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x00,0x12,0x00,0x3F,0x80,0x12,0x00,0x12,0x00,0x7F,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00, 8, // 0x24 '$' 0x00,0x00,0x10,0x10,0x3E,0x50,0x50,0x30,0x1C,0x12,0x12,0x7C,0x10,0x10, 13, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x49,0x00,0x49,0x00,0x4A,0x00,0x32,0x60,0x02,0x90,0x04,0x90,0x04,0x90,0x08,0x60,0x00,0x00,0x00,0x00, 10, // 0x26 '&' 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x39,0x00,0x45,0x00,0x42,0x00,0x43,0x00,0x3C,0x80,0x00,0x00,0x00,0x00, 3, // 0x27 ''' 0x00,0x00,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x28 '(' 0x00,0x00,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10, 5, // 0x29 ')' 0x00,0x00,0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40, 8, // 0x2A '*' 0x00,0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00, 4, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40, 5, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00, 4, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00, 5, // 0x2F '/' 0x00,0x00,0x08,0x08,0x10,0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x40,0x80, 8, // 0x30 '0' 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00, 8, // 0x31 '1' 0x00,0x00,0x00,0x08,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00, 8, // 0x32 '2' 0x00,0x00,0x00,0x3C,0x42,0x42,0x02,0x04,0x18,0x20,0x40,0x7E,0x00,0x00, 8, // 0x33 '3' 0x00,0x00,0x00,0x3C,0x42,0x02,0x02,0x1C,0x02,0x02,0x42,0x3C,0x00,0x00, 8, // 0x34 '4' 0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x44,0x7F,0x04,0x04,0x04,0x00,0x00, 8, // 0x35 '5' 0x00,0x00,0x00,0x7E,0x40,0x40,0x7C,0x02,0x02,0x02,0x42,0x3C,0x00,0x00, 8, // 0x36 '6' 0x00,0x00,0x00,0x1C,0x20,0x40,0x7C,0x42,0x42,0x42,0x42,0x3C,0x00,0x00, 8, // 0x37 '7' 0x00,0x00,0x00,0x7E,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x00,0x00, 8, // 0x38 '8' 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00, 8, // 0x39 '9' 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x3E,0x02,0x04,0x38,0x00,0x00, 5, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x00,0x00, 5, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x20,0x40, 9, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0x00,0x00,0x00, 9, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x00,0x00,0x00,0x00, 7, // 0x3F '?' 0x00,0x00,0x00,0x38,0x44,0x04,0x04,0x08,0x10,0x10,0x00,0x10,0x00,0x00, 12, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x27,0x40,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x27,0xC0,0x30,0x00,0x0F,0x00,0x00,0x00, 8, // 0x41 'A' 0x00,0x00,0x00,0x18,0x18,0x24,0x24,0x42,0x42,0x7E,0x81,0x81,0x00,0x00, 8, // 0x42 'B' 0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x7C,0x42,0x42,0x42,0x7C,0x00,0x00, 9, // 0x43 'C' 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00, 9, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00, 8, // 0x45 'E' 0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x7E,0x40,0x40,0x40,0x7E,0x00,0x00, 7, // 0x46 'F' 0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x7C,0x40,0x40,0x40,0x40,0x00,0x00, 9, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x47,0x00,0x41,0x00,0x41,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00, 9, // 0x48 'H' 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00, 5, // 0x49 'I' 0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, 5, // 0x4A 'J' 0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xE0,0x00,0x00, 8, // 0x4B 'K' 0x00,0x00,0x00,0x42,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x42,0x00,0x00, 7, // 0x4C 'L' 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7E,0x00,0x00, 10, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x52,0x80,0x52,0x80,0x52,0x80,0x4C,0x80,0x4C,0x80,0x40,0x80,0x40,0x80,0x00,0x00,0x00,0x00, 9, // 0x4E 'N' 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x00,0x61,0x00,0x51,0x00,0x51,0x00,0x49,0x00,0x45,0x00,0x45,0x00,0x43,0x00,0x43,0x00,0x00,0x00,0x00,0x00, 10, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00, 8, // 0x50 'P' 0x00,0x00,0x00,0x7C,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40,0x00,0x00, 10, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x02,0x00,0x01,0x80, 8, // 0x52 'R' 0x00,0x00,0x00,0x7C,0x42,0x42,0x42,0x7C,0x48,0x44,0x42,0x41,0x00,0x00, 8, // 0x53 'S' 0x00,0x00,0x00,0x3C,0x42,0x40,0x40,0x3C,0x02,0x02,0x42,0x3C,0x00,0x00, 7, // 0x54 'T' 0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 9, // 0x55 'U' 0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, 8, // 0x56 'V' 0x00,0x00,0x00,0x81,0x81,0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x00, 13, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x10,0x42,0x10,0x45,0x10,0x45,0x10,0x25,0x20,0x28,0xA0,0x28,0xA0,0x10,0x40,0x10,0x40,0x00,0x00,0x00,0x00, 8, // 0x58 'X' 0x00,0x00,0x00,0x42,0x42,0x24,0x18,0x18,0x18,0x24,0x42,0x42,0x00,0x00, 7, // 0x59 'Y' 0x00,0x00,0x00,0x82,0x44,0x44,0x28,0x10,0x10,0x10,0x10,0x10,0x00,0x00, 8, // 0x5A 'Z' 0x00,0x00,0x00,0x7E,0x02,0x04,0x08,0x10,0x10,0x20,0x40,0x7E,0x00,0x00, 5, // 0x5B '[' 0x00,0x00,0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70, 5, // 0x5C '\' 0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x08, 5, // 0x5D ']' 0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70, 10, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x12,0x00,0x21,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, 8, // 0x60 '`' 0x00,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x3C,0x02,0x02,0x3E,0x42,0x42,0x3E,0x00,0x00, 8, // 0x62 'b' 0x00,0x00,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0x7C,0x00,0x00, 6, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00,0x00, 8, // 0x64 'd' 0x00,0x00,0x02,0x02,0x02,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x00,0x00, 8, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x7E,0x40,0x42,0x3C,0x00,0x00, 4, // 0x66 'f' 0x00,0x00,0x30,0x40,0x40,0xF0,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 8, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x02,0x3C, 8, // 0x68 'h' 0x00,0x00,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0x42,0x00,0x00, 3, // 0x69 'i' 0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 4, // 0x6A 'j' 0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xC0, 7, // 0x6B 'k' 0x00,0x00,0x40,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00, 3, // 0x6C 'l' 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 11, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7B,0x80,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x00,0x00,0x00,0x00, 8, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x5C,0x62,0x42,0x42,0x42,0x42,0x42,0x00,0x00, 8, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00, 8, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x5C,0x62,0x42,0x42,0x42,0x42,0x7C,0x40,0x40, 8, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x02,0x02, 5, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x58,0x60,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x3C,0x40,0x40,0x38,0x04,0x04,0x78,0x00,0x00, 5, // 0x74 't' 0x00,0x00,0x00,0x40,0x40,0xF8,0x40,0x40,0x40,0x40,0x40,0x38,0x00,0x00, 8, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x46,0x3A,0x00,0x00, 7, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,0x00, 11, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x40,0x44,0x40,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00, 7, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x10,0x20, 7, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00, 8, // 0x7B '{' 0x00,0x00,0x0C,0x10,0x10,0x10,0x10,0x60,0x10,0x10,0x10,0x10,0x10,0x0C, 5, // 0x7C '|' 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 8, // 0x7D '}' 0x00,0x00,0x30,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x08,0x08,0x08,0x30, 10, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x4C,0x80,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00,0x00,0x00, 0 }; const int8u verdana14_bold[] = { 14, 3, 32, 128-32, 0x00,0x00,0x0F,0x00,0x1E,0x00,0x2D,0x00,0x4A,0x00,0x67,0x00,0x84,0x00,0xA1,0x00,0xB0,0x00, 0xBF,0x00,0xCE,0x00,0xEB,0x00,0x08,0x01,0x17,0x01,0x26,0x01,0x35,0x01,0x44,0x01,0x61,0x01, 0x7E,0x01,0x9B,0x01,0xB8,0x01,0xD5,0x01,0xF2,0x01,0x0F,0x02,0x2C,0x02,0x49,0x02,0x66,0x02, 0x75,0x02,0x84,0x02,0xA1,0x02,0xBE,0x02,0xDB,0x02,0xEA,0x02,0x07,0x03,0x24,0x03,0x41,0x03, 0x5E,0x03,0x7B,0x03,0x8A,0x03,0x99,0x03,0xB6,0x03,0xD3,0x03,0xE2,0x03,0xF1,0x03,0x0E,0x04, 0x1D,0x04,0x3A,0x04,0x57,0x04,0x74,0x04,0x91,0x04,0xAE,0x04,0xCB,0x04,0xE8,0x04,0xF7,0x04, 0x14,0x05,0x31,0x05,0x4E,0x05,0x6B,0x05,0x88,0x05,0x97,0x05,0xA6,0x05,0xB5,0x05,0xC4,0x05, 0xE1,0x05,0xFE,0x05,0x1B,0x06,0x2A,0x06,0x39,0x06,0x48,0x06,0x57,0x06,0x66,0x06,0x75,0x06, 0x84,0x06,0x93,0x06,0xA2,0x06,0xB1,0x06,0xC0,0x06,0xCF,0x06,0xEC,0x06,0xFB,0x06,0x0A,0x07, 0x19,0x07,0x28,0x07,0x37,0x07,0x46,0x07,0x55,0x07,0x64,0x07,0x73,0x07,0x90,0x07,0x9F,0x07, 0xAE,0x07,0xBD,0x07,0xDA,0x07,0xE9,0x07,0x06,0x08,0x23,0x08, 4, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x21 '!' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x60,0x60,0x00,0x00, 7, // 0x22 '"' 0x00,0x00,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x00,0x3F,0x80,0x3F,0x80,0x12,0x00,0x7F,0x00,0x7F,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00, 9, // 0x24 '$' 0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x69,0x00,0x68,0x00,0x7E,0x00,0x3F,0x00,0x0B,0x00,0x4B,0x00,0x3E,0x00,0x08,0x00,0x08,0x00, 15, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x6C,0x40,0x6C,0x80,0x6C,0xB8,0x6D,0x6C,0x3A,0x6C,0x02,0x6C,0x04,0x6C,0x04,0x38,0x00,0x00,0x00,0x00, 10, // 0x26 '&' 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x39,0x80,0x6D,0x00,0x66,0x00,0x63,0x00,0x3D,0x80,0x00,0x00,0x00,0x00, 4, // 0x27 ''' 0x00,0x00,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x28 '(' 0x00,0x00,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18, 7, // 0x29 ')' 0x00,0x00,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30, 9, // 0x2A '*' 0x00,0x00,0x00,0x00,0x08,0x00,0x2A,0x00,0x1C,0x00,0x1C,0x00,0x2A,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x40, 6, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00, 8, // 0x2F '/' 0x00,0x00,0x06,0x06,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x30,0x30,0x60,0x60, 9, // 0x30 '0' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00, 9, // 0x31 '1' 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x3C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x3F,0x00,0x00,0x00,0x00,0x00, 9, // 0x32 '2' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x7F,0x00,0x00,0x00,0x00,0x00, 9, // 0x33 '3' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x03,0x00,0x03,0x00,0x1E,0x00,0x03,0x00,0x03,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00, 9, // 0x34 '4' 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x0E,0x00,0x16,0x00,0x16,0x00,0x26,0x00,0x46,0x00,0x7F,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00, 9, // 0x35 '5' 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x30,0x00,0x30,0x00,0x3E,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00, 9, // 0x36 '6' 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x30,0x00,0x60,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00, 9, // 0x37 '7' 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x00,0x00,0x00,0x00, 9, // 0x38 '8' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00, 9, // 0x39 '9' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x03,0x00,0x06,0x00,0x3C,0x00,0x00,0x00,0x00,0x00, 5, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x00,0x00, 5, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x60,0x60,0x60,0x40, 10, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 10, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x00,0x00,0x00,0x00, 7, // 0x3F '?' 0x00,0x00,0x00,0x38,0x4C,0x0C,0x18,0x30,0x30,0x00,0x30,0x30,0x00,0x00, 12, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x2F,0x40,0x5B,0x20,0x5B,0x20,0x5B,0x20,0x5B,0x20,0x2F,0xC0,0x30,0x00,0x0F,0x00,0x00,0x00, 9, // 0x41 'A' 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x7F,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00, 9, // 0x42 'B' 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x66,0x00,0x66,0x00,0x66,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00, 9, // 0x43 'C' 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x31,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x31,0x00,0x1E,0x00,0x00,0x00,0x00,0x00, 10, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00, 8, // 0x45 'E' 0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7E,0x60,0x60,0x60,0x7E,0x00,0x00, 8, // 0x46 'F' 0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7E,0x60,0x60,0x60,0x60,0x00,0x00, 10, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x30,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x67,0x80,0x61,0x80,0x31,0x80,0x1F,0x80,0x00,0x00,0x00,0x00, 10, // 0x48 'H' 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x7F,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00, 6, // 0x49 'I' 0x00,0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00, 7, // 0x4A 'J' 0x00,0x00,0x00,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0xF8,0x00,0x00, 9, // 0x4B 'K' 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x66,0x00,0x6C,0x00,0x78,0x00,0x70,0x00,0x78,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x00,0x00,0x00,0x00, 8, // 0x4C 'L' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0x00,0x00, 11, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x71,0xC0,0x71,0xC0,0x5A,0xC0,0x5A,0xC0,0x4C,0xC0,0x4C,0xC0,0x40,0xC0,0x40,0xC0,0x00,0x00,0x00,0x00, 10, // 0x4E 'N' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x80,0x70,0x80,0x58,0x80,0x58,0x80,0x4C,0x80,0x46,0x80,0x46,0x80,0x43,0x80,0x41,0x80,0x00,0x00,0x00,0x00, 11, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00, 9, // 0x50 'P' 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, 11, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x06,0x00,0x03,0xC0, 9, // 0x52 'R' 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x00,0x00,0x00,0x00, 9, // 0x53 'S' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x61,0x00,0x60,0x00,0x70,0x00,0x3E,0x00,0x07,0x00,0x03,0x00,0x43,0x00,0x3E,0x00,0x00,0x00,0x00,0x00, 8, // 0x54 'T' 0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00, 10, // 0x55 'U' 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00, 9, // 0x56 'V' 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, 14, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x63,0x18,0x63,0x18,0x33,0x30,0x37,0xB0,0x34,0xB0,0x1C,0xE0,0x18,0x60,0x18,0x60,0x00,0x00,0x00,0x00, 9, // 0x58 'X' 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x36,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00, 10, // 0x59 'Y' 0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, 8, // 0x5A 'Z' 0x00,0x00,0x00,0x7E,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x7E,0x00,0x00, 6, // 0x5B '[' 0x00,0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x78, 8, // 0x5C '\' 0x00,0x00,0x60,0x60,0x30,0x30,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x06,0x06, 6, // 0x5D ']' 0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78, 10, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80, 9, // 0x60 '`' 0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x66,0x66,0x3E,0x00,0x00, 8, // 0x62 'b' 0x00,0x00,0x60,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00, 7, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x3C,0x62,0x60,0x60,0x60,0x62,0x3C,0x00,0x00, 8, // 0x64 'd' 0x00,0x00,0x06,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00, 8, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x7E,0x60,0x62,0x3C,0x00,0x00, 5, // 0x66 'f' 0x00,0x00,0x38,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00, 8, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x3C, 8, // 0x68 'h' 0x00,0x00,0x60,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00, 4, // 0x69 'i' 0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00, 5, // 0x6A 'j' 0x00,0x00,0x30,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xE0, 8, // 0x6B 'k' 0x00,0x00,0x60,0x60,0x60,0x66,0x6C,0x78,0x78,0x6C,0x66,0x63,0x00,0x00, 4, // 0x6C 'l' 0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00, 12, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0xC0,0x77,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x66,0x60,0x00,0x00,0x00,0x00, 8, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00, 8, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00, 8, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60, 8, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06, 6, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x6C,0x7C,0x60,0x60,0x60,0x60,0x60,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x60,0x38,0x0C,0x0C,0x78,0x00,0x00, 5, // 0x74 't' 0x00,0x00,0x00,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x38,0x00,0x00, 8, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00, 8, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x3C,0x3C,0x18,0x00,0x00, 12, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x60,0x66,0x60,0x66,0x60,0x69,0x60,0x39,0xC0,0x30,0xC0,0x30,0xC0,0x00,0x00,0x00,0x00, 8, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00, 8, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x3C,0x3C,0x18,0x18,0x30, 7, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x7C,0x0C,0x18,0x38,0x30,0x60,0x7C,0x00,0x00, 9, // 0x7B '{' 0x00,0x00,0x00,0x00,0x0E,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x70,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x0E,0x00, 6, // 0x7C '|' 0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, 9, // 0x7D '}' 0x00,0x00,0x00,0x00,0x38,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x07,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x38,0x00, 10, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x48,0x80,0x44,0x80,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00,0x00,0x00, 0 }; const int8u verdana16[] = { 16, 4, 32, 128-32, 0x00,0x00,0x11,0x00,0x22,0x00,0x33,0x00,0x54,0x00,0x65,0x00,0x86,0x00,0xA7,0x00,0xB8,0x00, 0xC9,0x00,0xDA,0x00,0xFB,0x00,0x1C,0x01,0x2D,0x01,0x3E,0x01,0x4F,0x01,0x60,0x01,0x71,0x01, 0x82,0x01,0x93,0x01,0xA4,0x01,0xB5,0x01,0xC6,0x01,0xD7,0x01,0xE8,0x01,0xF9,0x01,0x0A,0x02, 0x1B,0x02,0x2C,0x02,0x4D,0x02,0x6E,0x02,0x8F,0x02,0xA0,0x02,0xC1,0x02,0xE2,0x02,0xF3,0x02, 0x14,0x03,0x35,0x03,0x46,0x03,0x57,0x03,0x78,0x03,0x99,0x03,0xAA,0x03,0xBB,0x03,0xCC,0x03, 0xDD,0x03,0xFE,0x03,0x1F,0x04,0x40,0x04,0x51,0x04,0x72,0x04,0x93,0x04,0xB4,0x04,0xD5,0x04, 0xF6,0x04,0x17,0x05,0x38,0x05,0x59,0x05,0x7A,0x05,0x9B,0x05,0xAC,0x05,0xBD,0x05,0xCE,0x05, 0xEF,0x05,0x00,0x06,0x11,0x06,0x22,0x06,0x33,0x06,0x44,0x06,0x55,0x06,0x66,0x06,0x77,0x06, 0x88,0x06,0x99,0x06,0xAA,0x06,0xBB,0x06,0xCC,0x06,0xDD,0x06,0xFE,0x06,0x0F,0x07,0x20,0x07, 0x31,0x07,0x42,0x07,0x53,0x07,0x64,0x07,0x75,0x07,0x86,0x07,0x97,0x07,0xB8,0x07,0xC9,0x07, 0xDA,0x07,0xEB,0x07,0xFC,0x07,0x0D,0x08,0x1E,0x08,0x3F,0x08, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x21 '!' 0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x00,0x00,0x00, 5, // 0x22 '"' 0x00,0x00,0x00,0x50,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x00,0x3F,0x80,0x12,0x00,0x12,0x00,0x7F,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x24 '$' 0x00,0x00,0x00,0x10,0x10,0x3E,0x50,0x50,0x30,0x1C,0x12,0x12,0x7C,0x10,0x10,0x00, 13, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x44,0x80,0x45,0x00,0x45,0x00,0x3A,0xE0,0x05,0x10,0x05,0x10,0x09,0x10,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x26 '&' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x38,0x80,0x45,0x00,0x42,0x00,0x46,0x00,0x39,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 3, // 0x27 ''' 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x28 '(' 0x00,0x00,0x00,0x08,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x08, 6, // 0x29 ')' 0x00,0x00,0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40, 9, // 0x2A '*' 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x00, 7, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00, 6, // 0x2F '/' 0x00,0x00,0x00,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00, 8, // 0x30 '0' 0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,0x00, 8, // 0x31 '1' 0x00,0x00,0x00,0x00,0x08,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,0x00, 8, // 0x32 '2' 0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x02,0x04,0x18,0x20,0x40,0x7E,0x00,0x00,0x00, 8, // 0x33 '3' 0x00,0x00,0x00,0x00,0x3C,0x42,0x02,0x02,0x1C,0x02,0x02,0x42,0x3C,0x00,0x00,0x00, 8, // 0x34 '4' 0x00,0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x44,0x7F,0x04,0x04,0x04,0x00,0x00,0x00, 8, // 0x35 '5' 0x00,0x00,0x00,0x00,0x3E,0x20,0x20,0x20,0x3C,0x02,0x02,0x42,0x3C,0x00,0x00,0x00, 8, // 0x36 '6' 0x00,0x00,0x00,0x00,0x1C,0x20,0x40,0x7C,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,0x00, 8, // 0x37 '7' 0x00,0x00,0x00,0x00,0x7E,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x10,0x00,0x00,0x00, 8, // 0x38 '8' 0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00,0x00, 8, // 0x39 '9' 0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x3E,0x02,0x04,0x38,0x00,0x00,0x00, 6, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00, 6, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x00, 9, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x3F '?' 0x00,0x00,0x00,0x00,0x38,0x44,0x04,0x08,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00, 13, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x10,0x40,0x27,0xA0,0x48,0x90,0x48,0x90,0x48,0x90,0x48,0x90,0x48,0x90,0x27,0xE0,0x10,0x00,0x0F,0x80,0x00,0x00, 9, // 0x41 'A' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x14,0x00,0x14,0x00,0x22,0x00,0x22,0x00,0x3E,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x42 'B' 0x00,0x00,0x00,0x00,0x78,0x44,0x44,0x44,0x7C,0x42,0x42,0x42,0x7C,0x00,0x00,0x00, 9, // 0x43 'C' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x45 'E' 0x00,0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x7E,0x40,0x40,0x40,0x7E,0x00,0x00,0x00, 8, // 0x46 'F' 0x00,0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x7C,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 9, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x47,0x00,0x41,0x00,0x21,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x48 'H' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x49 'I' 0x00,0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00, 6, // 0x4A 'J' 0x00,0x00,0x00,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00, 8, // 0x4B 'K' 0x00,0x00,0x00,0x00,0x42,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x42,0x00,0x00,0x00, 7, // 0x4C 'L' 0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7E,0x00,0x00,0x00, 11, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x51,0x40,0x51,0x40,0x4A,0x40,0x4A,0x40,0x44,0x40,0x44,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x4E 'N' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x00,0x61,0x00,0x51,0x00,0x51,0x00,0x49,0x00,0x45,0x00,0x45,0x00,0x43,0x00,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x50 'P' 0x00,0x00,0x00,0x00,0x7C,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40,0x00,0x00,0x00, 10, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x02,0x00,0x01,0x80,0x00,0x00, 9, // 0x52 'R' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x44,0x00,0x78,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x53 'S' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x40,0x00,0x40,0x00,0x3E,0x00,0x01,0x00,0x01,0x00,0x41,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x54 'T' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x55 'U' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x56 'V' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x10,0x42,0x10,0x45,0x10,0x45,0x10,0x25,0x20,0x28,0xA0,0x28,0xA0,0x10,0x40,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x58 'X' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x14,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x59 'Y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x5A 'Z' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5B '[' 0x00,0x00,0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00, 6, // 0x5C '\' 0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x00, 6, // 0x5D ']' 0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00, 11, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00, 8, // 0x60 '`' 0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x02,0x02,0x3E,0x42,0x42,0x3E,0x00,0x00,0x00, 8, // 0x62 'b' 0x00,0x00,0x00,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0x7C,0x00,0x00,0x00, 8, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x40,0x40,0x40,0x42,0x3C,0x00,0x00,0x00, 8, // 0x64 'd' 0x00,0x00,0x00,0x02,0x02,0x02,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x00,0x00,0x00, 8, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x7E,0x40,0x42,0x3C,0x00,0x00,0x00, 6, // 0x66 'f' 0x00,0x00,0x00,0x1C,0x20,0x20,0x78,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00, 8, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x02,0x02,0x3C, 8, // 0x68 'h' 0x00,0x00,0x00,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00, 3, // 0x69 'i' 0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 4, // 0x6A 'j' 0x00,0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xC0, 7, // 0x6B 'k' 0x00,0x00,0x00,0x40,0x40,0x40,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,0x00, 3, // 0x6C 'l' 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 11, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x80,0x66,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x62,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00, 8, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,0x00, 8, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x62,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40, 8, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x42,0x46,0x3A,0x02,0x02,0x02, 5, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x60,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 7, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x40,0x40,0x38,0x04,0x04,0x78,0x00,0x00,0x00, 6, // 0x74 't' 0x00,0x00,0x00,0x00,0x20,0x20,0x78,0x20,0x20,0x20,0x20,0x20,0x18,0x00,0x00,0x00, 8, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x46,0x3A,0x00,0x00,0x00, 8, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x00,0x00,0x00, 11, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x40,0x44,0x40,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00,0x00,0x00, 8, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x10,0x10,0x20, 7, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00,0x00,0x00, 8, // 0x7B '{' 0x00,0x00,0x00,0x0C,0x10,0x10,0x10,0x10,0x60,0x10,0x10,0x10,0x10,0x10,0x0C,0x00, 7, // 0x7C '|' 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00, 8, // 0x7D '}' 0x00,0x00,0x00,0x30,0x08,0x08,0x08,0x08,0x06,0x08,0x08,0x08,0x08,0x08,0x30,0x00, 11, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x4C,0x80,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u verdana16_bold[] = { 16, 4, 32, 128-32, 0x00,0x00,0x11,0x00,0x22,0x00,0x33,0x00,0x54,0x00,0x75,0x00,0xA6,0x00,0xC7,0x00,0xD8,0x00, 0xE9,0x00,0xFA,0x00,0x1B,0x01,0x3C,0x01,0x4D,0x01,0x5E,0x01,0x6F,0x01,0x90,0x01,0xB1,0x01, 0xD2,0x01,0xF3,0x01,0x14,0x02,0x35,0x02,0x56,0x02,0x77,0x02,0x98,0x02,0xB9,0x02,0xDA,0x02, 0xEB,0x02,0xFC,0x02,0x1D,0x03,0x3E,0x03,0x5F,0x03,0x70,0x03,0x91,0x03,0xB2,0x03,0xD3,0x03, 0xF4,0x03,0x15,0x04,0x36,0x04,0x57,0x04,0x78,0x04,0x99,0x04,0xAA,0x04,0xBB,0x04,0xDC,0x04, 0xED,0x04,0x0E,0x05,0x2F,0x05,0x50,0x05,0x71,0x05,0x92,0x05,0xB3,0x05,0xD4,0x05,0xE5,0x05, 0x06,0x06,0x27,0x06,0x48,0x06,0x69,0x06,0x8A,0x06,0xAB,0x06,0xBC,0x06,0xDD,0x06,0xEE,0x06, 0x0F,0x07,0x30,0x07,0x51,0x07,0x72,0x07,0x93,0x07,0xA4,0x07,0xC5,0x07,0xE6,0x07,0xF7,0x07, 0x18,0x08,0x39,0x08,0x4A,0x08,0x5B,0x08,0x6C,0x08,0x7D,0x08,0x9E,0x08,0xBF,0x08,0xE0,0x08, 0x01,0x09,0x22,0x09,0x33,0x09,0x44,0x09,0x55,0x09,0x76,0x09,0x97,0x09,0xB8,0x09,0xD9,0x09, 0xFA,0x09,0x0B,0x0A,0x2C,0x0A,0x3D,0x0A,0x5E,0x0A,0x7F,0x0A, 4, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x21 '!' 0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00, 7, // 0x22 '"' 0x00,0x00,0x00,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x00,0x3F,0x80,0x3F,0x80,0x12,0x00,0x7F,0x00,0x7F,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x24 '$' 0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x69,0x00,0x68,0x00,0x78,0x00,0x3E,0x00,0x0F,0x00,0x0B,0x00,0x4B,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x00,0x00, 17, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x20,0x00,0x66,0x20,0x00,0x66,0x40,0x00,0x66,0x5E,0x00,0x66,0xB3,0x00,0x3D,0x33,0x00,0x01,0x33,0x00,0x02,0x33,0x00,0x02,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x26 '&' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x66,0x00,0x66,0x00,0x66,0xC0,0x3C,0xC0,0x66,0x80,0x63,0x00,0x63,0x80,0x3C,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x27 ''' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x28 '(' 0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18,0x0C, 7, // 0x29 ')' 0x00,0x00,0x00,0x60,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x60, 9, // 0x2A '*' 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x49,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x49,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x60,0x60,0xC0,0xC0, 7, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, 9, // 0x2F '/' 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0x00,0x00, 9, // 0x30 '0' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x31 '1' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x3C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x32 '2' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x33 '3' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x03,0x00,0x0E,0x00,0x03,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x34 '4' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x0E,0x00,0x16,0x00,0x26,0x00,0x46,0x00,0x7F,0x80,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x35 '5' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x30,0x00,0x30,0x00,0x3E,0x00,0x03,0x00,0x03,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x36 '6' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x30,0x00,0x60,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x37 '7' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x38 '8' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x39 '9' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x03,0x00,0x06,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, 5, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x38,0x30,0x30,0x60,0x60, 11, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x40,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x3F '?' 0x00,0x00,0x00,0x00,0x3C,0x66,0x06,0x0C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00, 13, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0x60,0x27,0xA0,0x4D,0x90,0x4D,0x90,0x4D,0x90,0x4D,0x90,0x27,0xE0,0x30,0x00,0x0F,0x80,0x00,0x00,0x00,0x00, 10, // 0x41 'A' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x1E,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x7F,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x42 'B' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x43 'C' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x61,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x61,0x80,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x45 'E' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x46 'F' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x61,0x80,0x60,0x00,0x60,0x00,0x63,0x80,0x61,0x80,0x31,0x80,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x48 'H' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x7F,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x49 'I' 0x00,0x00,0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, 7, // 0x4A 'J' 0x00,0x00,0x00,0x00,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0xF8,0x00,0x00,0x00, 9, // 0x4B 'K' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x66,0x00,0x6C,0x00,0x78,0x00,0x78,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x4C 'L' 0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0x00,0x00,0x00, 12, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xE0,0x70,0xE0,0x59,0x60,0x59,0x60,0x4E,0x60,0x4E,0x60,0x44,0x60,0x44,0x60,0x40,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x4E 'N' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x80,0x70,0x80,0x58,0x80,0x58,0x80,0x4C,0x80,0x46,0x80,0x46,0x80,0x43,0x80,0x43,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x50 'P' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x03,0x00,0x01,0xC0,0x00,0x00, 9, // 0x52 'R' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x53 'S' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x70,0x00,0x3E,0x00,0x07,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x54 'T' 0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00, 10, // 0x55 'U' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x56 'V' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x33,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 14, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x63,0x18,0x63,0x18,0x33,0x30,0x37,0xB0,0x34,0xB0,0x1C,0xE0,0x18,0x60,0x18,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x58 'X' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x33,0x00,0x33,0x00,0x1E,0x00,0x0C,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x59 'Y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x5A 'Z' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5B '[' 0x00,0x00,0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x78,0x00, 9, // 0x5C '\' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x00,0x00, 6, // 0x5D ']' 0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x00, 10, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x00,0x00, 9, // 0x60 '`' 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x03,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x62 'b' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6E,0x00,0x73,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x60,0x60,0x60,0x63,0x3E,0x00,0x00,0x00, 9, // 0x64 'd' 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x67,0x00,0x3B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x7F,0x00,0x60,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x66 'f' 0x00,0x00,0x00,0x38,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 9, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x67,0x00,0x3B,0x00,0x03,0x00,0x03,0x00,0x3E,0x00, 9, // 0x68 'h' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6E,0x00,0x73,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x69 'i' 0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 5, // 0x6A 'j' 0x00,0x00,0x00,0x30,0x30,0x00,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xE0, 8, // 0x6B 'k' 0x00,0x00,0x00,0x60,0x60,0x60,0x66,0x6C,0x78,0x78,0x6C,0x66,0x63,0x00,0x00,0x00, 4, // 0x6C 'l' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 14, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x70,0x73,0x98,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x00,0x73,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x00,0x73,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00, 9, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x67,0x00,0x3B,0x00,0x03,0x00,0x03,0x00,0x03,0x00, 6, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x7C,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 8, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x60,0x70,0x3C,0x0E,0x06,0x7C,0x00,0x00,0x00, 6, // 0x74 't' 0x00,0x00,0x00,0x00,0x60,0x60,0xF8,0x60,0x60,0x60,0x60,0x60,0x38,0x00,0x00,0x00, 9, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x67,0x00,0x3B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x60,0x66,0x60,0x66,0x60,0x69,0x60,0x39,0xC0,0x30,0xC0,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x1C,0x00,0x36,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00, 8, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00, 9, // 0x7B '{' 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x70,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x07,0x00,0x00,0x00, 8, // 0x7C '|' 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00, 9, // 0x7D '}' 0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x07,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x70,0x00,0x00,0x00, 11, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x44,0x40,0x44,0x40,0x43,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u verdana17[] = { 17, 4, 32, 128-32, 0x00,0x00,0x12,0x00,0x24,0x00,0x36,0x00,0x59,0x00,0x7C,0x00,0x9F,0x00,0xC2,0x00,0xD4,0x00, 0xE6,0x00,0xF8,0x00,0x1B,0x01,0x3E,0x01,0x50,0x01,0x62,0x01,0x74,0x01,0x86,0x01,0xA9,0x01, 0xCC,0x01,0xEF,0x01,0x12,0x02,0x35,0x02,0x58,0x02,0x7B,0x02,0x9E,0x02,0xC1,0x02,0xE4,0x02, 0xF6,0x02,0x08,0x03,0x2B,0x03,0x4E,0x03,0x71,0x03,0x83,0x03,0xA6,0x03,0xC9,0x03,0xEC,0x03, 0x0F,0x04,0x32,0x04,0x55,0x04,0x67,0x04,0x8A,0x04,0xAD,0x04,0xBF,0x04,0xD1,0x04,0xF4,0x04, 0x06,0x05,0x29,0x05,0x4C,0x05,0x6F,0x05,0x81,0x05,0xA4,0x05,0xC7,0x05,0xEA,0x05,0x0D,0x06, 0x30,0x06,0x53,0x06,0x76,0x06,0x99,0x06,0xBC,0x06,0xDF,0x06,0xF1,0x06,0x03,0x07,0x15,0x07, 0x38,0x07,0x5B,0x07,0x7E,0x07,0x90,0x07,0xB3,0x07,0xC5,0x07,0xE8,0x07,0xFA,0x07,0x0C,0x08, 0x2F,0x08,0x52,0x08,0x64,0x08,0x76,0x08,0x88,0x08,0x9A,0x08,0xBD,0x08,0xE0,0x08,0x03,0x09, 0x26,0x09,0x49,0x09,0x5B,0x09,0x6D,0x09,0x7F,0x09,0xA2,0x09,0xB4,0x09,0xD7,0x09,0xFA,0x09, 0x0C,0x0A,0x1E,0x0A,0x41,0x0A,0x53,0x0A,0x76,0x0A,0x99,0x0A, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x21 '!' 0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x00,0x00,0x00, 6, // 0x22 '"' 0x00,0x00,0x00,0x48,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x04,0x80,0x09,0x00,0x3F,0xC0,0x09,0x00,0x12,0x00,0x7F,0x80,0x12,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x24 '$' 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x49,0x00,0x48,0x00,0x48,0x00,0x3E,0x00,0x09,0x00,0x09,0x00,0x49,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x00,0x00, 15, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x20,0x44,0x40,0x44,0x80,0x44,0x80,0x45,0x38,0x39,0x44,0x02,0x44,0x04,0x44,0x04,0x44,0x08,0x38,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x26 '&' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x44,0x00,0x38,0x80,0x44,0x80,0x42,0x80,0x41,0x00,0x22,0x80,0x1C,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x27 ''' 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x28 '(' 0x00,0x00,0x00,0x08,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x08, 6, // 0x29 ')' 0x00,0x00,0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40, 9, // 0x2A '*' 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x49,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x49,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xC0,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x00, 7, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00, 6, // 0x2F '/' 0x00,0x00,0x00,0x04,0x08,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x80,0x80,0x00, 9, // 0x30 '0' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x31 '1' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x38,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x32 '2' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x0C,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x33 '3' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x01,0x00,0x02,0x00,0x1C,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x42,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x34 '4' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x06,0x00,0x0A,0x00,0x12,0x00,0x22,0x00,0x42,0x00,0x7F,0x80,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x35 '5' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7C,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x42,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x36 '6' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x30,0x00,0x20,0x00,0x40,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x37 '7' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x38 '8' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x3E,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x39 '9' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x21,0x00,0x1F,0x00,0x01,0x00,0x02,0x00,0x06,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00, 6, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x00, 11, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x06,0x00,0x18,0x00,0x60,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x3F '?' 0x00,0x00,0x00,0x00,0x3C,0x42,0x02,0x02,0x0C,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00, 14, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x18,0x20,0x20,0x10,0x27,0xC8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x27,0xF0,0x20,0x00,0x18,0x00,0x07,0xC0,0x00,0x00, 10, // 0x41 'A' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x12,0x00,0x12,0x00,0x21,0x00,0x21,0x00,0x21,0x00,0x7F,0x80,0x40,0x80,0x80,0x40,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x42 'B' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7E,0x00,0x41,0x00,0x40,0x80,0x40,0x80,0x41,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x43 'C' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0x80,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x30,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x80,0x40,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x41,0x80,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x45 'E' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x46 'F' 0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x7E,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 11, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x20,0x40,0x40,0x00,0x40,0x00,0x43,0xC0,0x40,0x40,0x20,0x40,0x30,0x40,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x48 'H' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x7F,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x49 'I' 0x00,0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00, 6, // 0x4A 'J' 0x00,0x00,0x00,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00, 10, // 0x4B 'K' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x42,0x00,0x44,0x00,0x48,0x00,0x50,0x00,0x68,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x4C 'L' 0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,0x00, 11, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x51,0x40,0x51,0x40,0x4A,0x40,0x4A,0x40,0x44,0x40,0x44,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x4E 'N' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x80,0x60,0x80,0x50,0x80,0x48,0x80,0x48,0x80,0x44,0x80,0x44,0x80,0x42,0x80,0x41,0x80,0x41,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x31,0x80,0x20,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x80,0x31,0x80,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x50 'P' 0x00,0x00,0x00,0x00,0x7C,0x42,0x41,0x41,0x42,0x7C,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 11, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x31,0x80,0x20,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x80,0x31,0x80,0x0E,0x00,0x02,0x00,0x02,0x00,0x01,0xC0, 10, // 0x52 'R' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x44,0x00,0x78,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x53 'S' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x20,0x80,0x40,0x00,0x40,0x00,0x38,0x00,0x07,0x00,0x00,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x54 'T' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x55 'U' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x56 'V' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x80,0x40,0x40,0x80,0x40,0x80,0x21,0x00,0x21,0x00,0x21,0x00,0x12,0x00,0x12,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 15, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x41,0x04,0x22,0x88,0x22,0x88,0x22,0x88,0x14,0x50,0x14,0x50,0x14,0x50,0x08,0x20,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x58 'X' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x21,0x00,0x12,0x00,0x12,0x00,0x0C,0x00,0x0C,0x00,0x12,0x00,0x12,0x00,0x21,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x59 'Y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x41,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x5A 'Z' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x5B '[' 0x00,0x00,0x00,0x3C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3C, 6, // 0x5C '\' 0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x08,0x08,0x04,0x00, 6, // 0x5D ']' 0x00,0x00,0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78, 11, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x00,0x00, 9, // 0x60 '`' 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x02,0x3E,0x42,0x42,0x46,0x3A,0x00,0x00,0x00, 9, // 0x62 'b' 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x5C,0x00,0x62,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x40,0x40,0x40,0x40,0x22,0x1C,0x00,0x00,0x00, 9, // 0x64 'd' 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x24,0x42,0x7E,0x40,0x40,0x22,0x1C,0x00,0x00,0x00, 6, // 0x66 'f' 0x00,0x00,0x00,0x1C,0x20,0x20,0x7C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00, 9, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x01,0x00,0x22,0x00,0x1C,0x00, 9, // 0x68 'h' 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x5E,0x00,0x61,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3, // 0x69 'i' 0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 5, // 0x6A 'j' 0x00,0x00,0x00,0x00,0x10,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xE0, 8, // 0x6B 'k' 0x00,0x00,0x00,0x40,0x40,0x40,0x42,0x44,0x48,0x50,0x70,0x48,0x44,0x42,0x00,0x00,0x00, 3, // 0x6C 'l' 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 13, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0xE0,0x63,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x00,0x61,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x00,0x62,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x40,0x00,0x40,0x00,0x40,0x00, 9, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 6, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 8, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x40,0x30,0x0C,0x02,0x42,0x3C,0x00,0x00,0x00, 6, // 0x74 't' 0x00,0x00,0x00,0x00,0x20,0x20,0x7C,0x20,0x20,0x20,0x20,0x20,0x20,0x1C,0x00,0x00,0x00, 9, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x43,0x00,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x18,0x00,0x00,0x00, 11, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x40,0x44,0x40,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x2A,0x80,0x11,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x14,0x00,0x22,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x24,0x24,0x24,0x18,0x18,0x18,0x10,0x10,0x20, 8, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x02,0x04,0x08,0x10,0x20,0x40,0x7E,0x00,0x00,0x00, 9, // 0x7B '{' 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x60,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x07,0x00, 6, // 0x7C '|' 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 9, // 0x7D '}' 0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x04,0x00,0x03,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x70,0x00, 11, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x44,0x40,0x44,0x40,0x43,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 14, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u verdana17_bold[] = { 17, 4, 32, 128-32, 0x00,0x00,0x12,0x00,0x24,0x00,0x36,0x00,0x59,0x00,0x7C,0x00,0xB0,0x00,0xD3,0x00,0xE5,0x00, 0xF7,0x00,0x09,0x01,0x2C,0x01,0x4F,0x01,0x61,0x01,0x73,0x01,0x85,0x01,0xA8,0x01,0xCB,0x01, 0xEE,0x01,0x11,0x02,0x34,0x02,0x57,0x02,0x7A,0x02,0x9D,0x02,0xC0,0x02,0xE3,0x02,0x06,0x03, 0x18,0x03,0x2A,0x03,0x4D,0x03,0x70,0x03,0x93,0x03,0xB6,0x03,0xD9,0x03,0xFC,0x03,0x1F,0x04, 0x42,0x04,0x65,0x04,0x88,0x04,0xAB,0x04,0xCE,0x04,0xF1,0x04,0x03,0x05,0x15,0x05,0x38,0x05, 0x5B,0x05,0x7E,0x05,0xA1,0x05,0xC4,0x05,0xE7,0x05,0x0A,0x06,0x2D,0x06,0x50,0x06,0x73,0x06, 0x96,0x06,0xB9,0x06,0xDC,0x06,0xFF,0x06,0x22,0x07,0x45,0x07,0x57,0x07,0x7A,0x07,0x8C,0x07, 0xAF,0x07,0xD2,0x07,0xF5,0x07,0x18,0x08,0x3B,0x08,0x4D,0x08,0x70,0x08,0x93,0x08,0xA5,0x08, 0xC8,0x08,0xEB,0x08,0xFD,0x08,0x0F,0x09,0x32,0x09,0x44,0x09,0x67,0x09,0x8A,0x09,0xAD,0x09, 0xD0,0x09,0xF3,0x09,0x05,0x0A,0x17,0x0A,0x29,0x0A,0x4C,0x0A,0x6F,0x0A,0x92,0x0A,0xB5,0x0A, 0xD8,0x0A,0xEA,0x0A,0x0D,0x0B,0x1F,0x0B,0x42,0x0B,0x65,0x0B, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x21 '!' 0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00, 8, // 0x22 '"' 0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x40,0x04,0x40,0x3F,0xE0,0x3F,0xE0,0x08,0x80,0x11,0x00,0x7F,0xC0,0x7F,0xC0,0x22,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x24 '$' 0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x1F,0x00,0x34,0x80,0x64,0x00,0x74,0x00,0x3C,0x00,0x0F,0x00,0x0B,0x80,0x09,0x80,0x4B,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x00,0x00, 18, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x08,0x00,0x66,0x10,0x00,0x66,0x20,0x00,0x66,0x2F,0x00,0x66,0x59,0x80,0x66,0x99,0x80,0x3D,0x19,0x80,0x01,0x19,0x80,0x02,0x19,0x80,0x04,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x26 '&' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x36,0x00,0x1C,0x60,0x36,0x60,0x63,0x60,0x61,0xC0,0x31,0xC0,0x1F,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x27 ''' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x28 '(' 0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18,0x0C, 8, // 0x29 ')' 0x00,0x00,0x00,0x30,0x18,0x0C,0x0C,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x0C,0x18,0x30, 10, // 0x2A '*' 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x49,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x49,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xC0,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x60,0x60,0xC0,0xC0,0x00, 7, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00, 10, // 0x2F '/' 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0x00,0x00, 10, // 0x30 '0' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x31 '1' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x3C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x32 '2' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x61,0x80,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x33 '3' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x61,0x80,0x01,0x80,0x0F,0x00,0x03,0x00,0x01,0x80,0x61,0x80,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x34 '4' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x07,0x00,0x0B,0x00,0x13,0x00,0x23,0x00,0x43,0x00,0x7F,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x35 '5' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x30,0x00,0x30,0x00,0x3E,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x61,0x80,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x36 '6' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x38,0x00,0x30,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x37 '7' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x38 '8' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x3F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x39 '9' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x03,0x00,0x07,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00, 6, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x38,0x30,0x30,0x60,0x60,0x00, 12, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x40,0x01,0x80,0x06,0x00,0x18,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x3F '?' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 14, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x18,0x20,0x20,0x10,0x27,0xC8,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x27,0xF0,0x20,0x00,0x18,0x00,0x07,0xC0,0x00,0x00, 11, // 0x41 'A' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1B,0x00,0x1B,0x00,0x31,0x80,0x3F,0x80,0x31,0x80,0x60,0xC0,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x42 'B' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x43 'C' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0xC0,0x30,0xC0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0xC0,0x30,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x61,0x80,0x61,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x61,0x80,0x61,0x80,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x45 'E' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x46 'F' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0xC0,0x30,0xC0,0x60,0x00,0x60,0x00,0x63,0xC0,0x60,0xC0,0x30,0xC0,0x30,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x48 'H' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x7F,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x49 'I' 0x00,0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00, 8, // 0x4A 'J' 0x00,0x00,0x00,0x00,0x3E,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0xF8,0x00,0x00,0x00, 11, // 0x4B 'K' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x61,0x80,0x63,0x00,0x66,0x00,0x6C,0x00,0x7C,0x00,0x76,0x00,0x63,0x00,0x61,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x4C 'L' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x70,0x70,0x70,0x70,0xF0,0x58,0xB0,0x59,0xB0,0x4D,0x30,0x4F,0x30,0x46,0x30,0x46,0x30,0x40,0x30,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x4E 'N' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x40,0x70,0x40,0x58,0x40,0x4C,0x40,0x4C,0x40,0x46,0x40,0x43,0x40,0x43,0x40,0x41,0xC0,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0xC0,0x30,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x50 'P' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x63,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0xC0,0x30,0xC0,0x0F,0x80,0x03,0x00,0x03,0x00,0x01,0xE0, 11, // 0x52 'R' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x63,0x00,0x61,0x80,0x60,0xC0,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x53 'S' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x61,0x80,0x60,0x00,0x3E,0x00,0x1F,0x00,0x01,0x80,0x61,0x80,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x54 'T' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x55 'U' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x56 'V' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x31,0x80,0x31,0x80,0x1B,0x00,0x1B,0x00,0x0E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 16, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x86,0x61,0x86,0x63,0xC6,0x32,0x4C,0x36,0x6C,0x36,0x6C,0x34,0x2C,0x1C,0x38,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x58 'X' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x31,0x80,0x31,0x80,0x1B,0x00,0x0E,0x00,0x0E,0x00,0x1B,0x00,0x31,0x80,0x31,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x59 'Y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x5A 'Z' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x5B '[' 0x00,0x00,0x00,0x3E,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3E, 10, // 0x5C '\' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x00,0x00, 8, // 0x5D ']' 0x00,0x00,0x00,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x7C, 12, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0E,0x00,0x1B,0x00,0x31,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00, 10, // 0x60 '`' 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x03,0x00,0x03,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x62 'b' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x33,0x60,0x60,0x60,0x60,0x33,0x1E,0x00,0x00,0x00, 10, // 0x64 'd' 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x63,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x66 'f' 0x00,0x00,0x00,0x1C,0x30,0x30,0x7C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00, 10, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x01,0x80,0x03,0x00,0x3E,0x00, 10, // 0x68 'h' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6F,0x00,0x71,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x69 'i' 0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 6, // 0x6A 'j' 0x00,0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF0, 9, // 0x6B 'k' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x63,0x00,0x66,0x00,0x6C,0x00,0x78,0x00,0x7C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x6C 'l' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 14, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x70,0x73,0x98,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6F,0x00,0x71,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00, 10, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x01,0x80,0x01,0x80,0x01,0x80, 7, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x7E,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 8, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x62,0x60,0x7C,0x3E,0x06,0x46,0x3C,0x00,0x00,0x00, 6, // 0x74 't' 0x00,0x00,0x00,0x00,0x60,0x60,0xFC,0x60,0x60,0x60,0x60,0x60,0x60,0x3C,0x00,0x00,0x00, 10, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x80,0x3D,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 14, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x63,0x18,0x33,0x30,0x37,0xB0,0x34,0xB0,0x1C,0xE0,0x1C,0xE0,0x0C,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x36,0x00,0x63,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x1C,0x00,0x1C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00, 8, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x0C,0x18,0x18,0x30,0x60,0x7E,0x00,0x00,0x00, 10, // 0x7B '{' 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x70,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x07,0x80, 8, // 0x7C '|' 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, 10, // 0x7D '}' 0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x03,0x80,0x06,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x78,0x00, 12, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x24,0x20,0x46,0x20,0x42,0x40,0x41,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 14, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u verdana18[] = { 18, 4, 32, 128-32, 0x00,0x00,0x13,0x00,0x26,0x00,0x39,0x00,0x5E,0x00,0x83,0x00,0xA8,0x00,0xCD,0x00,0xE0,0x00, 0xF3,0x00,0x06,0x01,0x2B,0x01,0x50,0x01,0x63,0x01,0x76,0x01,0x89,0x01,0x9C,0x01,0xC1,0x01, 0xE6,0x01,0x0B,0x02,0x30,0x02,0x55,0x02,0x7A,0x02,0x9F,0x02,0xC4,0x02,0xE9,0x02,0x0E,0x03, 0x21,0x03,0x34,0x03,0x59,0x03,0x7E,0x03,0xA3,0x03,0xB6,0x03,0xDB,0x03,0x00,0x04,0x25,0x04, 0x4A,0x04,0x6F,0x04,0x94,0x04,0xB9,0x04,0xDE,0x04,0x03,0x05,0x16,0x05,0x29,0x05,0x4E,0x05, 0x61,0x05,0x86,0x05,0xAB,0x05,0xD0,0x05,0xF5,0x05,0x1A,0x06,0x3F,0x06,0x64,0x06,0x89,0x06, 0xAE,0x06,0xD3,0x06,0xF8,0x06,0x1D,0x07,0x42,0x07,0x67,0x07,0x7A,0x07,0x8D,0x07,0xA0,0x07, 0xC5,0x07,0xEA,0x07,0x0F,0x08,0x34,0x08,0x59,0x08,0x6C,0x08,0x91,0x08,0xB6,0x08,0xC9,0x08, 0xEE,0x08,0x13,0x09,0x26,0x09,0x39,0x09,0x5E,0x09,0x71,0x09,0x96,0x09,0xBB,0x09,0xE0,0x09, 0x05,0x0A,0x2A,0x0A,0x3D,0x0A,0x50,0x0A,0x63,0x0A,0x88,0x0A,0xAD,0x0A,0xD2,0x0A,0xF7,0x0A, 0x1C,0x0B,0x41,0x0B,0x66,0x0B,0x79,0x0B,0x9E,0x0B,0xC3,0x0B, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x21 '!' 0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x00,0x00,0x00, 7, // 0x22 '"' 0x00,0x00,0x00,0x48,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x04,0x80,0x09,0x00,0x3F,0xC0,0x09,0x00,0x11,0x00,0x12,0x00,0x7F,0x80,0x12,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x24 '$' 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x49,0x00,0x48,0x00,0x48,0x00,0x38,0x00,0x0E,0x00,0x09,0x00,0x09,0x00,0x49,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x08,0x00, 16, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x20,0x44,0x40,0x44,0x40,0x44,0x80,0x44,0x80,0x38,0x9C,0x01,0x22,0x01,0x22,0x02,0x22,0x02,0x22,0x04,0x1C,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x26 '&' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x21,0x00,0x21,0x00,0x1E,0x40,0x24,0x40,0x42,0x40,0x41,0x40,0x40,0x80,0x21,0x40,0x1E,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x27 ''' 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x28 '(' 0x00,0x00,0x00,0x08,0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x10,0x08, 7, // 0x29 ')' 0x00,0x00,0x00,0x20,0x10,0x08,0x08,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x08,0x08,0x10,0x20, 10, // 0x2A '*' 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x49,0x00,0x2A,0x00,0x1C,0x00,0x2A,0x00,0x49,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x40,0x40, 7, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00, 7, // 0x2F '/' 0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x00, 10, // 0x30 '0' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x31 '1' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x1C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x32 '2' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x41,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x01,0x00,0x02,0x00,0x0C,0x00,0x30,0x00,0x40,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x33 '3' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x40,0x80,0x00,0x80,0x01,0x00,0x0E,0x00,0x01,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x41,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x34 '4' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x05,0x00,0x09,0x00,0x11,0x00,0x21,0x00,0x41,0x00,0x7F,0xC0,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x35 '5' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x20,0x00,0x20,0x00,0x20,0x00,0x3E,0x00,0x01,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x41,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x36 '6' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x5E,0x00,0x61,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x37 '7' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x38 '8' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x39 '9' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x20,0x80,0x1F,0x80,0x00,0x80,0x01,0x00,0x02,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00, 7, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x20,0x20, 12, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x3F '?' 0x00,0x00,0x00,0x00,0x3C,0x42,0x02,0x02,0x04,0x08,0x10,0x10,0x00,0x10,0x10,0x00,0x00,0x00, 15, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x18,0x60,0x20,0x10,0x23,0xD0,0x44,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x44,0x48,0x23,0xF0,0x20,0x00,0x18,0x00,0x07,0xC0,0x00,0x00, 10, // 0x41 'A' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x21,0x00,0x21,0x00,0x40,0x80,0x7F,0x80,0x40,0x80,0x80,0x40,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x42 'B' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7E,0x00,0x41,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x41,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x43 'C' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x20,0x40,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x40,0x30,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x80,0x40,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x41,0x80,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x45 'E' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x46 'F' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0x60,0x20,0x20,0x40,0x00,0x40,0x00,0x41,0xE0,0x40,0x20,0x40,0x20,0x20,0x20,0x30,0x20,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x48 'H' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x49 'I' 0x00,0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00, 7, // 0x4A 'J' 0x00,0x00,0x00,0x00,0x3C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x08,0xF0,0x00,0x00,0x00, 10, // 0x4B 'K' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x41,0x00,0x42,0x00,0x44,0x00,0x48,0x00,0x50,0x00,0x68,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x4C 'L' 0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x00,0x00,0x00, 13, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x50,0x50,0x50,0x50,0x48,0x90,0x48,0x90,0x45,0x10,0x45,0x10,0x42,0x10,0x42,0x10,0x40,0x10,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x4E 'N' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x60,0x40,0x50,0x40,0x48,0x40,0x48,0x40,0x44,0x40,0x42,0x40,0x42,0x40,0x41,0x40,0x40,0xC0,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x20,0x40,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x20,0x40,0x30,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x50 'P' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x41,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x41,0x00,0x7E,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x30,0xC0,0x20,0x40,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x20,0x40,0x30,0xC0,0x0F,0x00,0x01,0x00,0x01,0x00,0x00,0xE0, 10, // 0x52 'R' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x42,0x00,0x41,0x00,0x40,0x80,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x53 'S' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x20,0x80,0x40,0x00,0x40,0x00,0x20,0x00,0x1E,0x00,0x01,0x00,0x00,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x54 'T' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x55 'U' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x56 'V' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x80,0x40,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x21,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 15, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x04,0x41,0x04,0x22,0x88,0x22,0x88,0x22,0x88,0x12,0x90,0x14,0x50,0x14,0x50,0x14,0x50,0x08,0x20,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x58 'X' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x21,0x00,0x21,0x00,0x12,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x12,0x00,0x21,0x00,0x21,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x59 'Y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x41,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x5A 'Z' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x5B '[' 0x00,0x00,0x00,0x3C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3C, 7, // 0x5C '\' 0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x04,0x02,0x00, 7, // 0x5D ']' 0x00,0x00,0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78, 12, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x09,0x00,0x10,0x80,0x20,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00, 10, // 0x60 '`' 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x01,0x00,0x3F,0x00,0x41,0x00,0x41,0x00,0x43,0x00,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x62 'b' 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x5C,0x00,0x62,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x21,0x40,0x40,0x40,0x40,0x21,0x1E,0x00,0x00,0x00, 9, // 0x64 'd' 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x22,0x00,0x41,0x00,0x7F,0x00,0x40,0x00,0x40,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x66 'f' 0x00,0x00,0x00,0x1C,0x20,0x20,0x20,0x7C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00, 9, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x01,0x00,0x22,0x00,0x1C,0x00, 9, // 0x68 'h' 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x5E,0x00,0x61,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3, // 0x69 'i' 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 5, // 0x6A 'j' 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xE0, 9, // 0x6B 'k' 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x42,0x00,0x44,0x00,0x48,0x00,0x50,0x00,0x68,0x00,0x44,0x00,0x42,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3, // 0x6C 'l' 0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 15, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2E,0x70,0x31,0x88,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x00,0x61,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x21,0x00,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x21,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x00,0x62,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x42,0x00,0x7C,0x00,0x40,0x00,0x40,0x00,0x40,0x00, 9, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x21,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x23,0x00,0x1D,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 6, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00, 8, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x40,0x30,0x0C,0x02,0x42,0x3C,0x00,0x00,0x00, 6, // 0x74 't' 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x7C,0x20,0x20,0x20,0x20,0x20,0x20,0x1C,0x00,0x00,0x00, 9, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x43,0x00,0x3D,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x14,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x10,0x42,0x10,0x25,0x20,0x25,0x20,0x28,0xA0,0x28,0xA0,0x10,0x40,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x22,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x14,0x00,0x22,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x41,0x00,0x22,0x00,0x22,0x00,0x22,0x00,0x14,0x00,0x14,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00, 9, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x7B '{' 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x60,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x07,0x00, 7, // 0x7C '|' 0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 10, // 0x7D '}' 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x01,0x80,0x02,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x38,0x00, 12, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x24,0x20,0x42,0x40,0x41,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 15, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, 0 }; const int8u verdana18_bold[] = { 18, 4, 32, 128-32, 0x00,0x00,0x13,0x00,0x26,0x00,0x4B,0x00,0x70,0x00,0x95,0x00,0xCC,0x00,0xF1,0x00,0x04,0x01, 0x17,0x01,0x2A,0x01,0x4F,0x01,0x74,0x01,0x87,0x01,0x9A,0x01,0xAD,0x01,0xD2,0x01,0xF7,0x01, 0x1C,0x02,0x41,0x02,0x66,0x02,0x8B,0x02,0xB0,0x02,0xD5,0x02,0xFA,0x02,0x1F,0x03,0x44,0x03, 0x57,0x03,0x6A,0x03,0x8F,0x03,0xB4,0x03,0xD9,0x03,0xFE,0x03,0x23,0x04,0x48,0x04,0x6D,0x04, 0x92,0x04,0xB7,0x04,0xDC,0x04,0x01,0x05,0x26,0x05,0x4B,0x05,0x5E,0x05,0x71,0x05,0x96,0x05, 0xBB,0x05,0xE0,0x05,0x05,0x06,0x2A,0x06,0x4F,0x06,0x74,0x06,0x99,0x06,0xBE,0x06,0xE3,0x06, 0x08,0x07,0x2D,0x07,0x52,0x07,0x77,0x07,0x9C,0x07,0xC1,0x07,0xD4,0x07,0xF9,0x07,0x0C,0x08, 0x31,0x08,0x56,0x08,0x7B,0x08,0xA0,0x08,0xC5,0x08,0xD8,0x08,0xFD,0x08,0x22,0x09,0x35,0x09, 0x5A,0x09,0x7F,0x09,0x92,0x09,0xA5,0x09,0xCA,0x09,0xDD,0x09,0x02,0x0A,0x27,0x0A,0x4C,0x0A, 0x71,0x0A,0x96,0x0A,0xA9,0x0A,0xCE,0x0A,0xE1,0x0A,0x06,0x0B,0x2B,0x0B,0x50,0x0B,0x75,0x0B, 0x9A,0x0B,0xBF,0x0B,0xE4,0x0B,0xF7,0x0B,0x1C,0x0C,0x41,0x0C, 5, // 0x20 ' ' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x21 '!' 0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00, 9, // 0x22 '"' 0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x23 '#' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x20,0x04,0x20,0x08,0x40,0x3F,0xF0,0x3F,0xF0,0x08,0x40,0x10,0x80,0x7F,0xE0,0x7F,0xE0,0x21,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x24 '$' 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x1F,0x80,0x34,0xC0,0x64,0xC0,0x64,0x00,0x3C,0x00,0x07,0x80,0x04,0xC0,0x64,0xC0,0x65,0x80,0x3F,0x00,0x04,0x00,0x04,0x00,0x00,0x00, 19, // 0x25 '%' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x08,0x00,0x63,0x10,0x00,0x63,0x10,0x00,0x63,0x20,0x00,0x63,0x2F,0x80,0x63,0x58,0xC0,0x3E,0x98,0xC0,0x00,0x98,0xC0,0x01,0x18,0xC0,0x01,0x18,0xC0,0x02,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x26 '&' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x33,0x00,0x1E,0x60,0x36,0x60,0x63,0x60,0x61,0xC0,0x60,0xC0,0x30,0xE0,0x1F,0x30,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x27 ''' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x28 '(' 0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x30,0x18,0x0C,0x06, 8, // 0x29 ')' 0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x0C,0x06,0x06,0x06,0x06,0x06,0x0C,0x0C,0x18,0x30,0x60, 11, // 0x2A '*' 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x24,0x80,0x15,0x00,0x0E,0x00,0x15,0x00,0x24,0x80,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x2B '+' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2C ',' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x60,0x60,0x60,0xC0,0xC0, 7, // 0x2D '-' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 5, // 0x2E '.' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00, 10, // 0x2F '/' 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0x00,0x00, 11, // 0x30 '0' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x31 '1' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x1E,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x32 '2' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x60,0xC0,0x00,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x33 '3' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x60,0xC0,0x00,0xC0,0x01,0x80,0x0F,0x00,0x01,0x80,0x00,0xC0,0x60,0xC0,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x34 '4' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x80,0x05,0x80,0x09,0x80,0x11,0x80,0x21,0x80,0x41,0x80,0x7F,0xE0,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x35 '5' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x30,0x00,0x30,0x00,0x30,0x00,0x3F,0x00,0x01,0x80,0x00,0xC0,0x00,0xC0,0x60,0xC0,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x36 '6' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x18,0x00,0x30,0x00,0x60,0x00,0x6F,0x00,0x71,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x37 '7' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x38 '8' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x39 '9' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0xC0,0x1E,0xC0,0x00,0xC0,0x01,0x80,0x03,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x3A ':' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00, 6, // 0x3B ';' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x38,0x30,0x30,0x30,0x60,0x60, 13, // 0x3C '<' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xC0,0x03,0x00,0x0C,0x00,0x30,0x00,0x30,0x00,0x0C,0x00,0x03,0x00,0x00,0xC0,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x3D '=' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x3E '>' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x60,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, // 0x3F '?' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 14, // 0x40 '@' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x18,0x60,0x20,0x10,0x27,0xD0,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x4C,0xC8,0x27,0xF0,0x20,0x00,0x18,0x00,0x07,0xC0,0x00,0x00, 12, // 0x41 'A' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x06,0x00,0x0F,0x00,0x0F,0x00,0x19,0x80,0x19,0x80,0x30,0xC0,0x3F,0xC0,0x30,0xC0,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x42 'B' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x43 'C' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0xC0,0x30,0xC0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0xC0,0x38,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x44 'D' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0xC0,0x60,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xC0,0x61,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x45 'E' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x46 'F' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x47 'G' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x38,0x60,0x30,0x60,0x60,0x00,0x60,0x00,0x63,0xE0,0x60,0x60,0x60,0x60,0x30,0x60,0x38,0x60,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x48 'H' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x49 'I' 0x00,0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00, 8, // 0x4A 'J' 0x00,0x00,0x00,0x00,0x3E,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0xF8,0x00,0x00,0x00, 12, // 0x4B 'K' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0xC0,0x61,0x80,0x63,0x00,0x66,0x00,0x6C,0x00,0x7E,0x00,0x73,0x00,0x61,0x80,0x60,0xC0,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x4C 'L' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 14, // 0x4D 'M' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x38,0x70,0x38,0x70,0x78,0x58,0x58,0x58,0xD8,0x4C,0x98,0x4D,0x98,0x47,0x18,0x47,0x18,0x42,0x18,0x40,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x4E 'N' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x20,0x70,0x20,0x58,0x20,0x4C,0x20,0x4C,0x20,0x46,0x20,0x43,0x20,0x43,0x20,0x41,0xA0,0x40,0xE0,0x40,0xE0,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x4F 'O' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0xE0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x38,0xE0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x50 'P' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 13, // 0x51 'Q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0xE0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x38,0xE0,0x0F,0x80,0x03,0x00,0x03,0x80,0x01,0xF0, 12, // 0x52 'R' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x61,0x80,0x7F,0x00,0x61,0x80,0x60,0xC0,0x60,0x60,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x53 'S' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x30,0xC0,0x60,0xC0,0x60,0x00,0x7C,0x00,0x3F,0x80,0x03,0xC0,0x00,0xC0,0x60,0xC0,0x61,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x54 'T' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12, // 0x55 'U' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x56 'V' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0x80,0x31,0x80,0x31,0x80,0x1B,0x00,0x1B,0x00,0x1B,0x00,0x0E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 16, // 0x57 'W' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x86,0x61,0x86,0x63,0xC6,0x33,0xCC,0x32,0x4C,0x32,0x4C,0x1E,0x78,0x1C,0x38,0x1C,0x38,0x0C,0x30,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x58 'X' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0x31,0x80,0x31,0x80,0x1B,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1B,0x00,0x31,0x80,0x31,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x59 'Y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x5A 'Z' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0x80,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x5B '[' 0x00,0x00,0x00,0x3E,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3E, 10, // 0x5C '\' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x00,0x00, 8, // 0x5D ']' 0x00,0x00,0x00,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x7C, 13, // 0x5E '^' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x0F,0x00,0x19,0x80,0x30,0xC0,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x5F '_' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x00,0x00, 11, // 0x60 '`' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x61 'a' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x01,0x80,0x01,0x80,0x3F,0x80,0x61,0x80,0x61,0x80,0x63,0x80,0x3D,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x62 'b' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 8, // 0x63 'c' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x33,0x60,0x60,0x60,0x60,0x33,0x1E,0x00,0x00,0x00, 10, // 0x64 'd' 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x65 'e' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x7F,0x80,0x60,0x00,0x60,0x00,0x31,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 6, // 0x66 'f' 0x00,0x00,0x00,0x1C,0x30,0x30,0x30,0x7C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00, 10, // 0x67 'g' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x01,0x80,0x03,0x00,0x3E,0x00, 10, // 0x68 'h' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6F,0x00,0x71,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x69 'i' 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 6, // 0x6A 'j' 0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF0, 10, // 0x6B 'k' 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x61,0x80,0x63,0x00,0x66,0x00,0x6C,0x00,0x7E,0x00,0x73,0x00,0x61,0x80,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 4, // 0x6C 'l' 0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 16, // 0x6D 'm' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6F,0x3C,0x71,0xC6,0x61,0x86,0x61,0x86,0x61,0x86,0x61,0x86,0x61,0x86,0x61,0x86,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x6E 'n' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6F,0x00,0x71,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x6F 'o' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x33,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x70 'p' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x00,0x73,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x00,0x7E,0x00,0x60,0x00,0x60,0x00,0x60,0x00, 10, // 0x71 'q' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x31,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x33,0x80,0x1D,0x80,0x01,0x80,0x01,0x80,0x01,0x80, 7, // 0x72 'r' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x7E,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00, 9, // 0x73 's' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x61,0x00,0x60,0x00,0x7E,0x00,0x3F,0x00,0x03,0x00,0x43,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 7, // 0x74 't' 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x7E,0x30,0x30,0x30,0x30,0x30,0x30,0x1E,0x00,0x00,0x00, 10, // 0x75 'u' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x61,0x80,0x63,0x80,0x3D,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x76 'v' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x33,0x00,0x33,0x00,0x33,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 14, // 0x77 'w' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x63,0x18,0x63,0x18,0x37,0xB0,0x34,0xB0,0x3C,0xF0,0x18,0x60,0x18,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x78 'x' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x33,0x00,0x33,0x00,0x1E,0x00,0x1E,0x00,0x33,0x00,0x33,0x00,0x61,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 10, // 0x79 'y' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x80,0x61,0x80,0x33,0x00,0x33,0x00,0x33,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00, 9, // 0x7A 'z' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, // 0x7B '{' 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x70,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x07,0x80, 8, // 0x7C '|' 0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, 11, // 0x7D '}' 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x01,0xC0,0x03,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x3C,0x00, 13, // 0x7E '~' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x10,0x24,0x10,0x42,0x10,0x41,0x20,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 15, // 0x7F '' 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, 0 }; } mapnik-3.0.9/deps/agg/src/agg_gsv_text.cpp000066400000000000000000000735141262555547000204740ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Class gsv_text // //---------------------------------------------------------------------------- #include #include #include "agg_gsv_text.h" #include "agg_bounding_rect.h" namespace agg { int8u gsv_default_font[] = { 0x40,0x00,0x6c,0x0f,0x15,0x00,0x0e,0x00,0xf9,0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0d,0x0a,0x0d,0x0a,0x46,0x6f,0x6e,0x74,0x20,0x28, 0x63,0x29,0x20,0x4d,0x69,0x63,0x72,0x6f,0x50,0x72, 0x6f,0x66,0x20,0x32,0x37,0x20,0x53,0x65,0x70,0x74, 0x65,0x6d,0x62,0x2e,0x31,0x39,0x38,0x39,0x00,0x0d, 0x0a,0x0d,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x00,0x12,0x00,0x34,0x00,0x46,0x00,0x94,0x00, 0xd0,0x00,0x2e,0x01,0x3e,0x01,0x64,0x01,0x8a,0x01, 0x98,0x01,0xa2,0x01,0xb4,0x01,0xba,0x01,0xc6,0x01, 0xcc,0x01,0xf0,0x01,0xfa,0x01,0x18,0x02,0x38,0x02, 0x44,0x02,0x68,0x02,0x98,0x02,0xa2,0x02,0xde,0x02, 0x0e,0x03,0x24,0x03,0x40,0x03,0x48,0x03,0x52,0x03, 0x5a,0x03,0x82,0x03,0xec,0x03,0xfa,0x03,0x26,0x04, 0x4c,0x04,0x6a,0x04,0x7c,0x04,0x8a,0x04,0xb6,0x04, 0xc4,0x04,0xca,0x04,0xe0,0x04,0xee,0x04,0xf8,0x04, 0x0a,0x05,0x18,0x05,0x44,0x05,0x5e,0x05,0x8e,0x05, 0xac,0x05,0xd6,0x05,0xe0,0x05,0xf6,0x05,0x00,0x06, 0x12,0x06,0x1c,0x06,0x28,0x06,0x36,0x06,0x48,0x06, 0x4e,0x06,0x60,0x06,0x6e,0x06,0x74,0x06,0x84,0x06, 0xa6,0x06,0xc8,0x06,0xe6,0x06,0x08,0x07,0x2c,0x07, 0x3c,0x07,0x68,0x07,0x7c,0x07,0x8c,0x07,0xa2,0x07, 0xb0,0x07,0xb6,0x07,0xd8,0x07,0xec,0x07,0x10,0x08, 0x32,0x08,0x54,0x08,0x64,0x08,0x88,0x08,0x98,0x08, 0xac,0x08,0xb6,0x08,0xc8,0x08,0xd2,0x08,0xe4,0x08, 0xf2,0x08,0x3e,0x09,0x48,0x09,0x94,0x09,0xc2,0x09, 0xc4,0x09,0xd0,0x09,0xe2,0x09,0x04,0x0a,0x0e,0x0a, 0x26,0x0a,0x34,0x0a,0x4a,0x0a,0x66,0x0a,0x70,0x0a, 0x7e,0x0a,0x8e,0x0a,0x9a,0x0a,0xa6,0x0a,0xb4,0x0a, 0xd8,0x0a,0xe2,0x0a,0xf6,0x0a,0x18,0x0b,0x22,0x0b, 0x32,0x0b,0x56,0x0b,0x60,0x0b,0x6e,0x0b,0x7c,0x0b, 0x8a,0x0b,0x9c,0x0b,0x9e,0x0b,0xb2,0x0b,0xc2,0x0b, 0xd8,0x0b,0xf4,0x0b,0x08,0x0c,0x30,0x0c,0x56,0x0c, 0x72,0x0c,0x90,0x0c,0xb2,0x0c,0xce,0x0c,0xe2,0x0c, 0xfe,0x0c,0x10,0x0d,0x26,0x0d,0x36,0x0d,0x42,0x0d, 0x4e,0x0d,0x5c,0x0d,0x78,0x0d,0x8c,0x0d,0x8e,0x0d, 0x90,0x0d,0x92,0x0d,0x94,0x0d,0x96,0x0d,0x98,0x0d, 0x9a,0x0d,0x9c,0x0d,0x9e,0x0d,0xa0,0x0d,0xa2,0x0d, 0xa4,0x0d,0xa6,0x0d,0xa8,0x0d,0xaa,0x0d,0xac,0x0d, 0xae,0x0d,0xb0,0x0d,0xb2,0x0d,0xb4,0x0d,0xb6,0x0d, 0xb8,0x0d,0xba,0x0d,0xbc,0x0d,0xbe,0x0d,0xc0,0x0d, 0xc2,0x0d,0xc4,0x0d,0xc6,0x0d,0xc8,0x0d,0xca,0x0d, 0xcc,0x0d,0xce,0x0d,0xd0,0x0d,0xd2,0x0d,0xd4,0x0d, 0xd6,0x0d,0xd8,0x0d,0xda,0x0d,0xdc,0x0d,0xde,0x0d, 0xe0,0x0d,0xe2,0x0d,0xe4,0x0d,0xe6,0x0d,0xe8,0x0d, 0xea,0x0d,0xec,0x0d,0x0c,0x0e,0x26,0x0e,0x48,0x0e, 0x64,0x0e,0x88,0x0e,0x92,0x0e,0xa6,0x0e,0xb4,0x0e, 0xd0,0x0e,0xee,0x0e,0x02,0x0f,0x16,0x0f,0x26,0x0f, 0x3c,0x0f,0x58,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f, 0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f, 0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f, 0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x6c,0x0f,0x10,0x80, 0x05,0x95,0x00,0x72,0x00,0xfb,0xff,0x7f,0x01,0x7f, 0x01,0x01,0xff,0x01,0x05,0xfe,0x05,0x95,0xff,0x7f, 0x00,0x7a,0x01,0x86,0xff,0x7a,0x01,0x87,0x01,0x7f, 0xfe,0x7a,0x0a,0x87,0xff,0x7f,0x00,0x7a,0x01,0x86, 0xff,0x7a,0x01,0x87,0x01,0x7f,0xfe,0x7a,0x05,0xf2, 0x0b,0x95,0xf9,0x64,0x0d,0x9c,0xf9,0x64,0xfa,0x91, 0x0e,0x00,0xf1,0xfa,0x0e,0x00,0x04,0xfc,0x08,0x99, 0x00,0x63,0x04,0x9d,0x00,0x63,0x04,0x96,0xff,0x7f, 0x01,0x7f,0x01,0x01,0x00,0x01,0xfe,0x02,0xfd,0x01, 0xfc,0x00,0xfd,0x7f,0xfe,0x7e,0x00,0x7e,0x01,0x7e, 0x01,0x7f,0x02,0x7f,0x06,0x7e,0x02,0x7f,0x02,0x7e, 0xf2,0x89,0x02,0x7e,0x02,0x7f,0x06,0x7e,0x02,0x7f, 0x01,0x7f,0x01,0x7e,0x00,0x7c,0xfe,0x7e,0xfd,0x7f, 0xfc,0x00,0xfd,0x01,0xfe,0x02,0x00,0x01,0x01,0x01, 0x01,0x7f,0xff,0x7f,0x10,0xfd,0x15,0x95,0xee,0x6b, 0x05,0x95,0x02,0x7e,0x00,0x7e,0xff,0x7e,0xfe,0x7f, 0xfe,0x00,0xfe,0x02,0x00,0x02,0x01,0x02,0x02,0x01, 0x02,0x00,0x02,0x7f,0x03,0x7f,0x03,0x00,0x03,0x01, 0x02,0x01,0xfc,0xf2,0xfe,0x7f,0xff,0x7e,0x00,0x7e, 0x02,0x7e,0x02,0x00,0x02,0x01,0x01,0x02,0x00,0x02, 0xfe,0x02,0xfe,0x00,0x07,0xf9,0x15,0x8d,0xff,0x7f, 0x01,0x7f,0x01,0x01,0x00,0x01,0xff,0x01,0xff,0x00, 0xff,0x7f,0xff,0x7e,0xfe,0x7b,0xfe,0x7d,0xfe,0x7e, 0xfe,0x7f,0xfd,0x00,0xfd,0x01,0xff,0x02,0x00,0x03, 0x01,0x02,0x06,0x04,0x02,0x02,0x01,0x02,0x00,0x02, 0xff,0x02,0xfe,0x01,0xfe,0x7f,0xff,0x7e,0x00,0x7e, 0x01,0x7d,0x02,0x7d,0x05,0x79,0x02,0x7e,0x03,0x7f, 0x01,0x00,0x01,0x01,0x00,0x01,0xf1,0xfe,0xfe,0x01, 0xff,0x02,0x00,0x03,0x01,0x02,0x02,0x02,0x00,0x86, 0x01,0x7e,0x08,0x75,0x02,0x7e,0x02,0x7f,0x05,0x80, 0x05,0x93,0xff,0x01,0x01,0x01,0x01,0x7f,0x00,0x7e, 0xff,0x7e,0xff,0x7f,0x06,0xf1,0x0b,0x99,0xfe,0x7e, 0xfe,0x7d,0xfe,0x7c,0xff,0x7b,0x00,0x7c,0x01,0x7b, 0x02,0x7c,0x02,0x7d,0x02,0x7e,0xfe,0x9e,0xfe,0x7c, 0xff,0x7d,0xff,0x7b,0x00,0x7c,0x01,0x7b,0x01,0x7d, 0x02,0x7c,0x05,0x85,0x03,0x99,0x02,0x7e,0x02,0x7d, 0x02,0x7c,0x01,0x7b,0x00,0x7c,0xff,0x7b,0xfe,0x7c, 0xfe,0x7d,0xfe,0x7e,0x02,0x9e,0x02,0x7c,0x01,0x7d, 0x01,0x7b,0x00,0x7c,0xff,0x7b,0xff,0x7d,0xfe,0x7c, 0x09,0x85,0x08,0x95,0x00,0x74,0xfb,0x89,0x0a,0x7a, 0x00,0x86,0xf6,0x7a,0x0d,0xf4,0x0d,0x92,0x00,0x6e, 0xf7,0x89,0x12,0x00,0x04,0xf7,0x06,0x81,0xff,0x7f, 0xff,0x01,0x01,0x01,0x01,0x7f,0x00,0x7e,0xff,0x7e, 0xff,0x7f,0x06,0x84,0x04,0x89,0x12,0x00,0x04,0xf7, 0x05,0x82,0xff,0x7f,0x01,0x7f,0x01,0x01,0xff,0x01, 0x05,0xfe,0x00,0xfd,0x0e,0x18,0x00,0xeb,0x09,0x95, 0xfd,0x7f,0xfe,0x7d,0xff,0x7b,0x00,0x7d,0x01,0x7b, 0x02,0x7d,0x03,0x7f,0x02,0x00,0x03,0x01,0x02,0x03, 0x01,0x05,0x00,0x03,0xff,0x05,0xfe,0x03,0xfd,0x01, 0xfe,0x00,0x0b,0xeb,0x06,0x91,0x02,0x01,0x03,0x03, 0x00,0x6b,0x09,0x80,0x04,0x90,0x00,0x01,0x01,0x02, 0x01,0x01,0x02,0x01,0x04,0x00,0x02,0x7f,0x01,0x7f, 0x01,0x7e,0x00,0x7e,0xff,0x7e,0xfe,0x7d,0xf6,0x76, 0x0e,0x00,0x03,0x80,0x05,0x95,0x0b,0x00,0xfa,0x78, 0x03,0x00,0x02,0x7f,0x01,0x7f,0x01,0x7d,0x00,0x7e, 0xff,0x7d,0xfe,0x7e,0xfd,0x7f,0xfd,0x00,0xfd,0x01, 0xff,0x01,0xff,0x02,0x11,0xfc,0x0d,0x95,0xf6,0x72, 0x0f,0x00,0xfb,0x8e,0x00,0x6b,0x07,0x80,0x0f,0x95, 0xf6,0x00,0xff,0x77,0x01,0x01,0x03,0x01,0x03,0x00, 0x03,0x7f,0x02,0x7e,0x01,0x7d,0x00,0x7e,0xff,0x7d, 0xfe,0x7e,0xfd,0x7f,0xfd,0x00,0xfd,0x01,0xff,0x01, 0xff,0x02,0x11,0xfc,0x10,0x92,0xff,0x02,0xfd,0x01, 0xfe,0x00,0xfd,0x7f,0xfe,0x7d,0xff,0x7b,0x00,0x7b, 0x01,0x7c,0x02,0x7e,0x03,0x7f,0x01,0x00,0x03,0x01, 0x02,0x02,0x01,0x03,0x00,0x01,0xff,0x03,0xfe,0x02, 0xfd,0x01,0xff,0x00,0xfd,0x7f,0xfe,0x7e,0xff,0x7d, 0x10,0xf9,0x11,0x95,0xf6,0x6b,0xfc,0x95,0x0e,0x00, 0x03,0xeb,0x08,0x95,0xfd,0x7f,0xff,0x7e,0x00,0x7e, 0x01,0x7e,0x02,0x7f,0x04,0x7f,0x03,0x7f,0x02,0x7e, 0x01,0x7e,0x00,0x7d,0xff,0x7e,0xff,0x7f,0xfd,0x7f, 0xfc,0x00,0xfd,0x01,0xff,0x01,0xff,0x02,0x00,0x03, 0x01,0x02,0x02,0x02,0x03,0x01,0x04,0x01,0x02,0x01, 0x01,0x02,0x00,0x02,0xff,0x02,0xfd,0x01,0xfc,0x00, 0x0c,0xeb,0x10,0x8e,0xff,0x7d,0xfe,0x7e,0xfd,0x7f, 0xff,0x00,0xfd,0x01,0xfe,0x02,0xff,0x03,0x00,0x01, 0x01,0x03,0x02,0x02,0x03,0x01,0x01,0x00,0x03,0x7f, 0x02,0x7e,0x01,0x7c,0x00,0x7b,0xff,0x7b,0xfe,0x7d, 0xfd,0x7f,0xfe,0x00,0xfd,0x01,0xff,0x02,0x10,0xfd, 0x05,0x8e,0xff,0x7f,0x01,0x7f,0x01,0x01,0xff,0x01, 0x00,0xf4,0xff,0x7f,0x01,0x7f,0x01,0x01,0xff,0x01, 0x05,0xfe,0x05,0x8e,0xff,0x7f,0x01,0x7f,0x01,0x01, 0xff,0x01,0x01,0xf3,0xff,0x7f,0xff,0x01,0x01,0x01, 0x01,0x7f,0x00,0x7e,0xff,0x7e,0xff,0x7f,0x06,0x84, 0x14,0x92,0xf0,0x77,0x10,0x77,0x04,0x80,0x04,0x8c, 0x12,0x00,0xee,0xfa,0x12,0x00,0x04,0xfa,0x04,0x92, 0x10,0x77,0xf0,0x77,0x14,0x80,0x03,0x90,0x00,0x01, 0x01,0x02,0x01,0x01,0x02,0x01,0x04,0x00,0x02,0x7f, 0x01,0x7f,0x01,0x7e,0x00,0x7e,0xff,0x7e,0xff,0x7f, 0xfc,0x7e,0x00,0x7d,0x00,0xfb,0xff,0x7f,0x01,0x7f, 0x01,0x01,0xff,0x01,0x09,0xfe,0x12,0x8d,0xff,0x02, 0xfe,0x01,0xfd,0x00,0xfe,0x7f,0xff,0x7f,0xff,0x7d, 0x00,0x7d,0x01,0x7e,0x02,0x7f,0x03,0x00,0x02,0x01, 0x01,0x02,0xfb,0x88,0xfe,0x7e,0xff,0x7d,0x00,0x7d, 0x01,0x7e,0x01,0x7f,0x07,0x8b,0xff,0x78,0x00,0x7e, 0x02,0x7f,0x02,0x00,0x02,0x02,0x01,0x03,0x00,0x02, 0xff,0x03,0xff,0x02,0xfe,0x02,0xfe,0x01,0xfd,0x01, 0xfd,0x00,0xfd,0x7f,0xfe,0x7f,0xfe,0x7e,0xff,0x7e, 0xff,0x7d,0x00,0x7d,0x01,0x7d,0x01,0x7e,0x02,0x7e, 0x02,0x7f,0x03,0x7f,0x03,0x00,0x03,0x01,0x02,0x01, 0x01,0x01,0xfe,0x8d,0xff,0x78,0x00,0x7e,0x01,0x7f, 0x08,0xfb,0x09,0x95,0xf8,0x6b,0x08,0x95,0x08,0x6b, 0xf3,0x87,0x0a,0x00,0x04,0xf9,0x04,0x95,0x00,0x6b, 0x00,0x95,0x09,0x00,0x03,0x7f,0x01,0x7f,0x01,0x7e, 0x00,0x7e,0xff,0x7e,0xff,0x7f,0xfd,0x7f,0xf7,0x80, 0x09,0x00,0x03,0x7f,0x01,0x7f,0x01,0x7e,0x00,0x7d, 0xff,0x7e,0xff,0x7f,0xfd,0x7f,0xf7,0x00,0x11,0x80, 0x12,0x90,0xff,0x02,0xfe,0x02,0xfe,0x01,0xfc,0x00, 0xfe,0x7f,0xfe,0x7e,0xff,0x7e,0xff,0x7d,0x00,0x7b, 0x01,0x7d,0x01,0x7e,0x02,0x7e,0x02,0x7f,0x04,0x00, 0x02,0x01,0x02,0x02,0x01,0x02,0x03,0xfb,0x04,0x95, 0x00,0x6b,0x00,0x95,0x07,0x00,0x03,0x7f,0x02,0x7e, 0x01,0x7e,0x01,0x7d,0x00,0x7b,0xff,0x7d,0xff,0x7e, 0xfe,0x7e,0xfd,0x7f,0xf9,0x00,0x11,0x80,0x04,0x95, 0x00,0x6b,0x00,0x95,0x0d,0x00,0xf3,0xf6,0x08,0x00, 0xf8,0xf5,0x0d,0x00,0x02,0x80,0x04,0x95,0x00,0x6b, 0x00,0x95,0x0d,0x00,0xf3,0xf6,0x08,0x00,0x06,0xf5, 0x12,0x90,0xff,0x02,0xfe,0x02,0xfe,0x01,0xfc,0x00, 0xfe,0x7f,0xfe,0x7e,0xff,0x7e,0xff,0x7d,0x00,0x7b, 0x01,0x7d,0x01,0x7e,0x02,0x7e,0x02,0x7f,0x04,0x00, 0x02,0x01,0x02,0x02,0x01,0x02,0x00,0x03,0xfb,0x80, 0x05,0x00,0x03,0xf8,0x04,0x95,0x00,0x6b,0x0e,0x95, 0x00,0x6b,0xf2,0x8b,0x0e,0x00,0x04,0xf5,0x04,0x95, 0x00,0x6b,0x04,0x80,0x0c,0x95,0x00,0x70,0xff,0x7d, 0xff,0x7f,0xfe,0x7f,0xfe,0x00,0xfe,0x01,0xff,0x01, 0xff,0x03,0x00,0x02,0x0e,0xf9,0x04,0x95,0x00,0x6b, 0x0e,0x95,0xf2,0x72,0x05,0x85,0x09,0x74,0x03,0x80, 0x04,0x95,0x00,0x6b,0x00,0x80,0x0c,0x00,0x01,0x80, 0x04,0x95,0x00,0x6b,0x00,0x95,0x08,0x6b,0x08,0x95, 0xf8,0x6b,0x08,0x95,0x00,0x6b,0x04,0x80,0x04,0x95, 0x00,0x6b,0x00,0x95,0x0e,0x6b,0x00,0x95,0x00,0x6b, 0x04,0x80,0x09,0x95,0xfe,0x7f,0xfe,0x7e,0xff,0x7e, 0xff,0x7d,0x00,0x7b,0x01,0x7d,0x01,0x7e,0x02,0x7e, 0x02,0x7f,0x04,0x00,0x02,0x01,0x02,0x02,0x01,0x02, 0x01,0x03,0x00,0x05,0xff,0x03,0xff,0x02,0xfe,0x02, 0xfe,0x01,0xfc,0x00,0x0d,0xeb,0x04,0x95,0x00,0x6b, 0x00,0x95,0x09,0x00,0x03,0x7f,0x01,0x7f,0x01,0x7e, 0x00,0x7d,0xff,0x7e,0xff,0x7f,0xfd,0x7f,0xf7,0x00, 0x11,0xf6,0x09,0x95,0xfe,0x7f,0xfe,0x7e,0xff,0x7e, 0xff,0x7d,0x00,0x7b,0x01,0x7d,0x01,0x7e,0x02,0x7e, 0x02,0x7f,0x04,0x00,0x02,0x01,0x02,0x02,0x01,0x02, 0x01,0x03,0x00,0x05,0xff,0x03,0xff,0x02,0xfe,0x02, 0xfe,0x01,0xfc,0x00,0x03,0xef,0x06,0x7a,0x04,0x82, 0x04,0x95,0x00,0x6b,0x00,0x95,0x09,0x00,0x03,0x7f, 0x01,0x7f,0x01,0x7e,0x00,0x7e,0xff,0x7e,0xff,0x7f, 0xfd,0x7f,0xf7,0x00,0x07,0x80,0x07,0x75,0x03,0x80, 0x11,0x92,0xfe,0x02,0xfd,0x01,0xfc,0x00,0xfd,0x7f, 0xfe,0x7e,0x00,0x7e,0x01,0x7e,0x01,0x7f,0x02,0x7f, 0x06,0x7e,0x02,0x7f,0x01,0x7f,0x01,0x7e,0x00,0x7d, 0xfe,0x7e,0xfd,0x7f,0xfc,0x00,0xfd,0x01,0xfe,0x02, 0x11,0xfd,0x08,0x95,0x00,0x6b,0xf9,0x95,0x0e,0x00, 0x01,0xeb,0x04,0x95,0x00,0x71,0x01,0x7d,0x02,0x7e, 0x03,0x7f,0x02,0x00,0x03,0x01,0x02,0x02,0x01,0x03, 0x00,0x0f,0x04,0xeb,0x01,0x95,0x08,0x6b,0x08,0x95, 0xf8,0x6b,0x09,0x80,0x02,0x95,0x05,0x6b,0x05,0x95, 0xfb,0x6b,0x05,0x95,0x05,0x6b,0x05,0x95,0xfb,0x6b, 0x07,0x80,0x03,0x95,0x0e,0x6b,0x00,0x95,0xf2,0x6b, 0x11,0x80,0x01,0x95,0x08,0x76,0x00,0x75,0x08,0x95, 0xf8,0x76,0x09,0xf5,0x11,0x95,0xf2,0x6b,0x00,0x95, 0x0e,0x00,0xf2,0xeb,0x0e,0x00,0x03,0x80,0x03,0x93, 0x00,0x6c,0x01,0x94,0x00,0x6c,0xff,0x94,0x05,0x00, 0xfb,0xec,0x05,0x00,0x02,0x81,0x00,0x95,0x0e,0x68, 0x00,0x83,0x06,0x93,0x00,0x6c,0x01,0x94,0x00,0x6c, 0xfb,0x94,0x05,0x00,0xfb,0xec,0x05,0x00,0x03,0x81, 0x03,0x87,0x08,0x05,0x08,0x7b,0xf0,0x80,0x08,0x04, 0x08,0x7c,0x03,0xf9,0x01,0x80,0x10,0x00,0x01,0x80, 0x06,0x95,0xff,0x7f,0xff,0x7e,0x00,0x7e,0x01,0x7f, 0x01,0x01,0xff,0x01,0x05,0xef,0x0f,0x8e,0x00,0x72, 0x00,0x8b,0xfe,0x02,0xfe,0x01,0xfd,0x00,0xfe,0x7f, 0xfe,0x7e,0xff,0x7d,0x00,0x7e,0x01,0x7d,0x02,0x7e, 0x02,0x7f,0x03,0x00,0x02,0x01,0x02,0x02,0x04,0xfd, 0x04,0x95,0x00,0x6b,0x00,0x8b,0x02,0x02,0x02,0x01, 0x03,0x00,0x02,0x7f,0x02,0x7e,0x01,0x7d,0x00,0x7e, 0xff,0x7d,0xfe,0x7e,0xfe,0x7f,0xfd,0x00,0xfe,0x01, 0xfe,0x02,0x0f,0xfd,0x0f,0x8b,0xfe,0x02,0xfe,0x01, 0xfd,0x00,0xfe,0x7f,0xfe,0x7e,0xff,0x7d,0x00,0x7e, 0x01,0x7d,0x02,0x7e,0x02,0x7f,0x03,0x00,0x02,0x01, 0x02,0x02,0x03,0xfd,0x0f,0x95,0x00,0x6b,0x00,0x8b, 0xfe,0x02,0xfe,0x01,0xfd,0x00,0xfe,0x7f,0xfe,0x7e, 0xff,0x7d,0x00,0x7e,0x01,0x7d,0x02,0x7e,0x02,0x7f, 0x03,0x00,0x02,0x01,0x02,0x02,0x04,0xfd,0x03,0x88, 0x0c,0x00,0x00,0x02,0xff,0x02,0xff,0x01,0xfe,0x01, 0xfd,0x00,0xfe,0x7f,0xfe,0x7e,0xff,0x7d,0x00,0x7e, 0x01,0x7d,0x02,0x7e,0x02,0x7f,0x03,0x00,0x02,0x01, 0x02,0x02,0x03,0xfd,0x0a,0x95,0xfe,0x00,0xfe,0x7f, 0xff,0x7d,0x00,0x6f,0xfd,0x8e,0x07,0x00,0x03,0xf2, 0x0f,0x8e,0x00,0x70,0xff,0x7d,0xff,0x7f,0xfe,0x7f, 0xfd,0x00,0xfe,0x01,0x09,0x91,0xfe,0x02,0xfe,0x01, 0xfd,0x00,0xfe,0x7f,0xfe,0x7e,0xff,0x7d,0x00,0x7e, 0x01,0x7d,0x02,0x7e,0x02,0x7f,0x03,0x00,0x02,0x01, 0x02,0x02,0x04,0xfd,0x04,0x95,0x00,0x6b,0x00,0x8a, 0x03,0x03,0x02,0x01,0x03,0x00,0x02,0x7f,0x01,0x7d, 0x00,0x76,0x04,0x80,0x03,0x95,0x01,0x7f,0x01,0x01, 0xff,0x01,0xff,0x7f,0x01,0xf9,0x00,0x72,0x04,0x80, 0x05,0x95,0x01,0x7f,0x01,0x01,0xff,0x01,0xff,0x7f, 0x01,0xf9,0x00,0x6f,0xff,0x7d,0xfe,0x7f,0xfe,0x00, 0x09,0x87,0x04,0x95,0x00,0x6b,0x0a,0x8e,0xf6,0x76, 0x04,0x84,0x07,0x78,0x02,0x80,0x04,0x95,0x00,0x6b, 0x04,0x80,0x04,0x8e,0x00,0x72,0x00,0x8a,0x03,0x03, 0x02,0x01,0x03,0x00,0x02,0x7f,0x01,0x7d,0x00,0x76, 0x00,0x8a,0x03,0x03,0x02,0x01,0x03,0x00,0x02,0x7f, 0x01,0x7d,0x00,0x76,0x04,0x80,0x04,0x8e,0x00,0x72, 0x00,0x8a,0x03,0x03,0x02,0x01,0x03,0x00,0x02,0x7f, 0x01,0x7d,0x00,0x76,0x04,0x80,0x08,0x8e,0xfe,0x7f, 0xfe,0x7e,0xff,0x7d,0x00,0x7e,0x01,0x7d,0x02,0x7e, 0x02,0x7f,0x03,0x00,0x02,0x01,0x02,0x02,0x01,0x03, 0x00,0x02,0xff,0x03,0xfe,0x02,0xfe,0x01,0xfd,0x00, 0x0b,0xf2,0x04,0x8e,0x00,0x6b,0x00,0x92,0x02,0x02, 0x02,0x01,0x03,0x00,0x02,0x7f,0x02,0x7e,0x01,0x7d, 0x00,0x7e,0xff,0x7d,0xfe,0x7e,0xfe,0x7f,0xfd,0x00, 0xfe,0x01,0xfe,0x02,0x0f,0xfd,0x0f,0x8e,0x00,0x6b, 0x00,0x92,0xfe,0x02,0xfe,0x01,0xfd,0x00,0xfe,0x7f, 0xfe,0x7e,0xff,0x7d,0x00,0x7e,0x01,0x7d,0x02,0x7e, 0x02,0x7f,0x03,0x00,0x02,0x01,0x02,0x02,0x04,0xfd, 0x04,0x8e,0x00,0x72,0x00,0x88,0x01,0x03,0x02,0x02, 0x02,0x01,0x03,0x00,0x01,0xf2,0x0e,0x8b,0xff,0x02, 0xfd,0x01,0xfd,0x00,0xfd,0x7f,0xff,0x7e,0x01,0x7e, 0x02,0x7f,0x05,0x7f,0x02,0x7f,0x01,0x7e,0x00,0x7f, 0xff,0x7e,0xfd,0x7f,0xfd,0x00,0xfd,0x01,0xff,0x02, 0x0e,0xfd,0x05,0x95,0x00,0x6f,0x01,0x7d,0x02,0x7f, 0x02,0x00,0xf8,0x8e,0x07,0x00,0x03,0xf2,0x04,0x8e, 0x00,0x76,0x01,0x7d,0x02,0x7f,0x03,0x00,0x02,0x01, 0x03,0x03,0x00,0x8a,0x00,0x72,0x04,0x80,0x02,0x8e, 0x06,0x72,0x06,0x8e,0xfa,0x72,0x08,0x80,0x03,0x8e, 0x04,0x72,0x04,0x8e,0xfc,0x72,0x04,0x8e,0x04,0x72, 0x04,0x8e,0xfc,0x72,0x07,0x80,0x03,0x8e,0x0b,0x72, 0x00,0x8e,0xf5,0x72,0x0e,0x80,0x02,0x8e,0x06,0x72, 0x06,0x8e,0xfa,0x72,0xfe,0x7c,0xfe,0x7e,0xfe,0x7f, 0xff,0x00,0x0f,0x87,0x0e,0x8e,0xf5,0x72,0x00,0x8e, 0x0b,0x00,0xf5,0xf2,0x0b,0x00,0x03,0x80,0x09,0x99, 0xfe,0x7f,0xff,0x7f,0xff,0x7e,0x00,0x7e,0x01,0x7e, 0x01,0x7f,0x01,0x7e,0x00,0x7e,0xfe,0x7e,0x01,0x8e, 0xff,0x7e,0x00,0x7e,0x01,0x7e,0x01,0x7f,0x01,0x7e, 0x00,0x7e,0xff,0x7e,0xfc,0x7e,0x04,0x7e,0x01,0x7e, 0x00,0x7e,0xff,0x7e,0xff,0x7f,0xff,0x7e,0x00,0x7e, 0x01,0x7e,0xff,0x8e,0x02,0x7e,0x00,0x7e,0xff,0x7e, 0xff,0x7f,0xff,0x7e,0x00,0x7e,0x01,0x7e,0x01,0x7f, 0x02,0x7f,0x05,0x87,0x04,0x95,0x00,0x77,0x00,0xfd, 0x00,0x77,0x04,0x80,0x05,0x99,0x02,0x7f,0x01,0x7f, 0x01,0x7e,0x00,0x7e,0xff,0x7e,0xff,0x7f,0xff,0x7e, 0x00,0x7e,0x02,0x7e,0xff,0x8e,0x01,0x7e,0x00,0x7e, 0xff,0x7e,0xff,0x7f,0xff,0x7e,0x00,0x7e,0x01,0x7e, 0x04,0x7e,0xfc,0x7e,0xff,0x7e,0x00,0x7e,0x01,0x7e, 0x01,0x7f,0x01,0x7e,0x00,0x7e,0xff,0x7e,0x01,0x8e, 0xfe,0x7e,0x00,0x7e,0x01,0x7e,0x01,0x7f,0x01,0x7e, 0x00,0x7e,0xff,0x7e,0xff,0x7f,0xfe,0x7f,0x09,0x87, 0x03,0x86,0x00,0x02,0x01,0x03,0x02,0x01,0x02,0x00, 0x02,0x7f,0x04,0x7d,0x02,0x7f,0x02,0x00,0x02,0x01, 0x01,0x02,0xee,0xfe,0x01,0x02,0x02,0x01,0x02,0x00, 0x02,0x7f,0x04,0x7d,0x02,0x7f,0x02,0x00,0x02,0x01, 0x01,0x03,0x00,0x02,0x03,0xf4,0x10,0x80,0x03,0x80, 0x07,0x15,0x08,0x6b,0xfe,0x85,0xf5,0x00,0x10,0xfb, 0x0d,0x95,0xf6,0x00,0x00,0x6b,0x0a,0x00,0x02,0x02, 0x00,0x08,0xfe,0x02,0xf6,0x00,0x0e,0xf4,0x03,0x80, 0x00,0x15,0x0a,0x00,0x02,0x7e,0x00,0x7e,0x00,0x7d, 0x00,0x7e,0xfe,0x7f,0xf6,0x00,0x0a,0x80,0x02,0x7e, 0x01,0x7e,0x00,0x7d,0xff,0x7d,0xfe,0x7f,0xf6,0x00, 0x10,0x80,0x03,0x80,0x00,0x15,0x0c,0x00,0xff,0x7e, 0x03,0xed,0x03,0xfd,0x00,0x03,0x02,0x00,0x00,0x12, 0x02,0x03,0x0a,0x00,0x00,0x6b,0x02,0x00,0x00,0x7d, 0xfe,0x83,0xf4,0x00,0x11,0x80,0x0f,0x80,0xf4,0x00, 0x00,0x15,0x0c,0x00,0xff,0xf6,0xf5,0x00,0x0f,0xf5, 0x04,0x95,0x07,0x76,0x00,0x0a,0x07,0x80,0xf9,0x76, 0x00,0x75,0xf8,0x80,0x07,0x0c,0x09,0xf4,0xf9,0x0c, 0x09,0xf4,0x03,0x92,0x02,0x03,0x07,0x00,0x03,0x7d, 0x00,0x7b,0xfc,0x7e,0x04,0x7d,0x00,0x7a,0xfd,0x7e, 0xf9,0x00,0xfe,0x02,0x06,0x89,0x02,0x00,0x06,0xf5, 0x03,0x95,0x00,0x6b,0x0c,0x15,0x00,0x6b,0x02,0x80, 0x03,0x95,0x00,0x6b,0x0c,0x15,0x00,0x6b,0xf8,0x96, 0x03,0x00,0x07,0xea,0x03,0x80,0x00,0x15,0x0c,0x80, 0xf7,0x76,0xfd,0x00,0x03,0x80,0x0a,0x75,0x03,0x80, 0x03,0x80,0x07,0x13,0x02,0x02,0x03,0x00,0x00,0x6b, 0x02,0x80,0x03,0x80,0x00,0x15,0x09,0x6b,0x09,0x15, 0x00,0x6b,0x03,0x80,0x03,0x80,0x00,0x15,0x00,0xf6, 0x0d,0x00,0x00,0x8a,0x00,0x6b,0x03,0x80,0x07,0x80, 0xfd,0x00,0xff,0x03,0x00,0x04,0x00,0x07,0x00,0x04, 0x01,0x02,0x03,0x01,0x06,0x00,0x03,0x7f,0x01,0x7e, 0x01,0x7c,0x00,0x79,0xff,0x7c,0xff,0x7d,0xfd,0x00, 0xfa,0x00,0x0e,0x80,0x03,0x80,0x00,0x15,0x0c,0x00, 0x00,0x6b,0x02,0x80,0x03,0x80,0x00,0x15,0x0a,0x00, 0x02,0x7f,0x01,0x7d,0x00,0x7b,0xff,0x7e,0xfe,0x7f, 0xf6,0x00,0x10,0xf7,0x11,0x8f,0xff,0x03,0xff,0x02, 0xfe,0x01,0xfa,0x00,0xfd,0x7f,0xff,0x7e,0x00,0x7c, 0x00,0x79,0x00,0x7b,0x01,0x7e,0x03,0x00,0x06,0x00, 0x02,0x00,0x01,0x03,0x01,0x02,0x03,0xfb,0x03,0x95, 0x0c,0x00,0xfa,0x80,0x00,0x6b,0x09,0x80,0x03,0x95, 0x00,0x77,0x06,0x7a,0x06,0x06,0x00,0x09,0xfa,0xf1, 0xfa,0x7a,0x0e,0x80,0x03,0x87,0x00,0x0b,0x02,0x02, 0x03,0x00,0x02,0x7e,0x01,0x02,0x04,0x00,0x02,0x7e, 0x00,0x75,0xfe,0x7e,0xfc,0x00,0xff,0x01,0xfe,0x7f, 0xfd,0x00,0xfe,0x02,0x07,0x8e,0x00,0x6b,0x09,0x80, 0x03,0x80,0x0e,0x15,0xf2,0x80,0x0e,0x6b,0x03,0x80, 0x03,0x95,0x00,0x6b,0x0e,0x00,0x00,0x7d,0xfe,0x98, 0x00,0x6b,0x05,0x80,0x03,0x95,0x00,0x75,0x02,0x7d, 0x0a,0x00,0x00,0x8e,0x00,0x6b,0x02,0x80,0x03,0x95, 0x00,0x6b,0x10,0x00,0x00,0x15,0xf8,0x80,0x00,0x6b, 0x0a,0x80,0x03,0x95,0x00,0x6b,0x10,0x00,0x00,0x15, 0xf8,0x80,0x00,0x6b,0x0a,0x00,0x00,0x7d,0x02,0x83, 0x10,0x80,0x03,0x95,0x00,0x6b,0x09,0x00,0x03,0x02, 0x00,0x08,0xfd,0x02,0xf7,0x00,0x0e,0x89,0x00,0x6b, 0x03,0x80,0x03,0x95,0x00,0x6b,0x09,0x00,0x03,0x02, 0x00,0x08,0xfd,0x02,0xf7,0x00,0x0e,0xf4,0x03,0x92, 0x02,0x03,0x07,0x00,0x03,0x7d,0x00,0x70,0xfd,0x7e, 0xf9,0x00,0xfe,0x02,0x03,0x89,0x09,0x00,0x02,0xf5, 0x03,0x80,0x00,0x15,0x00,0xf5,0x07,0x00,0x00,0x08, 0x02,0x03,0x06,0x00,0x02,0x7d,0x00,0x70,0xfe,0x7e, 0xfa,0x00,0xfe,0x02,0x00,0x08,0x0c,0xf6,0x0f,0x80, 0x00,0x15,0xf6,0x00,0xfe,0x7d,0x00,0x79,0x02,0x7e, 0x0a,0x00,0xf4,0xf7,0x07,0x09,0x07,0xf7,0x03,0x8c, 0x01,0x02,0x01,0x01,0x05,0x00,0x02,0x7f,0x01,0x7e, 0x00,0x74,0x00,0x86,0xff,0x01,0xfe,0x01,0xfb,0x00, 0xff,0x7f,0xff,0x7f,0x00,0x7c,0x01,0x7e,0x01,0x00, 0x05,0x00,0x02,0x00,0x01,0x02,0x03,0xfe,0x04,0x8e, 0x02,0x01,0x04,0x00,0x02,0x7f,0x01,0x7e,0x00,0x77, 0xff,0x7e,0xfe,0x7f,0xfc,0x00,0xfe,0x01,0xff,0x02, 0x00,0x09,0x01,0x02,0x02,0x02,0x03,0x01,0x02,0x01, 0x01,0x01,0x01,0x02,0x02,0xeb,0x03,0x80,0x00,0x15, 0x03,0x00,0x02,0x7e,0x00,0x7b,0xfe,0x7e,0xfd,0x00, 0x03,0x80,0x04,0x00,0x03,0x7e,0x00,0x78,0xfd,0x7e, 0xf9,0x00,0x0c,0x80,0x03,0x8c,0x02,0x02,0x02,0x01, 0x03,0x00,0x02,0x7f,0x01,0x7d,0xfe,0x7e,0xf9,0x7d, 0xff,0x7e,0x00,0x7d,0x03,0x7f,0x02,0x00,0x03,0x01, 0x02,0x01,0x02,0xfe,0x0d,0x8c,0xff,0x02,0xfe,0x01, 0xfc,0x00,0xfe,0x7f,0xff,0x7e,0x00,0x77,0x01,0x7e, 0x02,0x7f,0x04,0x00,0x02,0x01,0x01,0x02,0x00,0x0f, 0xff,0x02,0xfe,0x01,0xf9,0x00,0x0c,0xeb,0x03,0x88, 0x0a,0x00,0x00,0x02,0x00,0x03,0xfe,0x02,0xfa,0x00, 0xff,0x7e,0xff,0x7d,0x00,0x7b,0x01,0x7c,0x01,0x7f, 0x06,0x00,0x02,0x02,0x03,0xfe,0x03,0x8f,0x06,0x77, 0x06,0x09,0xfa,0x80,0x00,0x71,0xff,0x87,0xfb,0x79, 0x07,0x87,0x05,0x79,0x02,0x80,0x03,0x8d,0x02,0x02, 0x06,0x00,0x02,0x7e,0x00,0x7d,0xfc,0x7d,0x04,0x7e, 0x00,0x7d,0xfe,0x7e,0xfa,0x00,0xfe,0x02,0x04,0x85, 0x02,0x00,0x06,0xf9,0x03,0x8f,0x00,0x73,0x01,0x7e, 0x07,0x00,0x02,0x02,0x00,0x0d,0x00,0xf3,0x01,0x7e, 0x03,0x80,0x03,0x8f,0x00,0x73,0x01,0x7e,0x07,0x00, 0x02,0x02,0x00,0x0d,0x00,0xf3,0x01,0x7e,0xf8,0x90, 0x03,0x00,0x08,0xf0,0x03,0x80,0x00,0x15,0x00,0xf3, 0x02,0x00,0x06,0x07,0xfa,0xf9,0x07,0x78,0x03,0x80, 0x03,0x80,0x04,0x0c,0x02,0x03,0x04,0x00,0x00,0x71, 0x02,0x80,0x03,0x80,0x00,0x0f,0x06,0x77,0x06,0x09, 0x00,0x71,0x02,0x80,0x03,0x80,0x00,0x0f,0x0a,0xf1, 0x00,0x0f,0xf6,0xf8,0x0a,0x00,0x02,0xf9,0x05,0x80, 0xff,0x01,0xff,0x04,0x00,0x05,0x01,0x03,0x01,0x02, 0x06,0x00,0x02,0x7e,0x00,0x7d,0x00,0x7b,0x00,0x7c, 0xfe,0x7f,0xfa,0x00,0x0b,0x80,0x03,0x80,0x00,0x0f, 0x00,0xfb,0x01,0x03,0x01,0x02,0x05,0x00,0x02,0x7e, 0x01,0x7d,0x00,0x76,0x03,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, 0x10,0x80,0x0a,0x8f,0x02,0x7f,0x01,0x7e,0x00,0x76, 0xff,0x7f,0xfe,0x7f,0xfb,0x00,0xff,0x01,0xff,0x01, 0x00,0x0a,0x01,0x02,0x01,0x01,0x05,0x00,0xf9,0x80, 0x00,0x6b,0x0c,0x86,0x0d,0x8a,0xff,0x03,0xfe,0x02, 0xfb,0x00,0xff,0x7e,0xff,0x7d,0x00,0x7b,0x01,0x7c, 0x01,0x7f,0x05,0x00,0x02,0x01,0x01,0x03,0x03,0xfc, 0x03,0x80,0x00,0x0f,0x00,0xfb,0x01,0x03,0x01,0x02, 0x04,0x00,0x01,0x7e,0x01,0x7d,0x00,0x76,0x00,0x8a, 0x01,0x03,0x02,0x02,0x03,0x00,0x02,0x7e,0x01,0x7d, 0x00,0x76,0x03,0x80,0x03,0x8f,0x00,0x74,0x01,0x7e, 0x02,0x7f,0x04,0x00,0x02,0x01,0x01,0x01,0x00,0x8d, 0x00,0x6e,0xff,0x7e,0xfe,0x7f,0xfb,0x00,0xfe,0x01, 0x0c,0x85,0x03,0x8d,0x01,0x02,0x03,0x00,0x02,0x7e, 0x01,0x02,0x03,0x00,0x02,0x7e,0x00,0x74,0xfe,0x7f, 0xfd,0x00,0xff,0x01,0xfe,0x7f,0xfd,0x00,0xff,0x01, 0x00,0x0c,0x06,0x82,0x00,0x6b,0x08,0x86,0x03,0x80, 0x0a,0x0f,0xf6,0x80,0x0a,0x71,0x03,0x80,0x03,0x8f, 0x00,0x73,0x01,0x7e,0x07,0x00,0x02,0x02,0x00,0x0d, 0x00,0xf3,0x01,0x7e,0x00,0x7e,0x03,0x82,0x03,0x8f, 0x00,0x79,0x02,0x7e,0x08,0x00,0x00,0x89,0x00,0x71, 0x02,0x80,0x03,0x8f,0x00,0x73,0x01,0x7e,0x03,0x00, 0x02,0x02,0x00,0x0d,0x00,0xf3,0x01,0x7e,0x03,0x00, 0x02,0x02,0x00,0x0d,0x00,0xf3,0x01,0x7e,0x03,0x80, 0x03,0x8f,0x00,0x73,0x01,0x7e,0x03,0x00,0x02,0x02, 0x00,0x0d,0x00,0xf3,0x01,0x7e,0x03,0x00,0x02,0x02, 0x00,0x0d,0x00,0xf3,0x01,0x7e,0x00,0x7e,0x03,0x82, 0x03,0x8d,0x00,0x02,0x02,0x00,0x00,0x71,0x08,0x00, 0x02,0x02,0x00,0x06,0xfe,0x02,0xf8,0x00,0x0c,0xf6, 0x03,0x8f,0x00,0x71,0x07,0x00,0x02,0x02,0x00,0x06, 0xfe,0x02,0xf9,0x00,0x0c,0x85,0x00,0x71,0x02,0x80, 0x03,0x8f,0x00,0x71,0x07,0x00,0x03,0x02,0x00,0x06, 0xfd,0x02,0xf9,0x00,0x0c,0xf6,0x03,0x8d,0x02,0x02, 0x06,0x00,0x02,0x7e,0x00,0x75,0xfe,0x7e,0xfa,0x00, 0xfe,0x02,0x04,0x85,0x06,0x00,0x02,0xf9,0x03,0x80, 0x00,0x0f,0x00,0xf8,0x04,0x00,0x00,0x06,0x02,0x02, 0x04,0x00,0x02,0x7e,0x00,0x75,0xfe,0x7e,0xfc,0x00, 0xfe,0x02,0x00,0x05,0x0a,0xf9,0x0d,0x80,0x00,0x0f, 0xf7,0x00,0xff,0x7e,0x00,0x7b,0x01,0x7e,0x09,0x00, 0xf6,0xfa,0x04,0x06,0x08,0xfa }; //------------------------------------------------------------------------- gsv_text::gsv_text() : m_x(0.0), m_y(0.0), m_start_x(0.0), m_width(10.0), m_height(0.0), m_space(0.0), m_line_space(0.0), m_text(m_chr), m_text_buf(), m_cur_chr(m_chr), m_font(gsv_default_font), m_loaded_font(), m_status(initial), m_big_endian(false), m_flip(false) { m_chr[0] = m_chr[1] = 0; int t = 1; if(*(char*)&t == 0) m_big_endian = true; } //------------------------------------------------------------------------- void gsv_text::font(const void* font) { m_font = font; if(m_font == 0) m_font = &m_loaded_font[0]; } //------------------------------------------------------------------------- void gsv_text::size(double height, double width) { m_height = height; m_width = width; } //------------------------------------------------------------------------- void gsv_text::space(double space) { m_space = space; } //------------------------------------------------------------------------- void gsv_text::line_space(double line_space) { m_line_space = line_space; } //------------------------------------------------------------------------- void gsv_text::start_point(double x, double y) { m_x = m_start_x = x; m_y = y; //if(m_flip) m_y += m_height; } //------------------------------------------------------------------------- void gsv_text::load_font(const char* file) { m_loaded_font.resize(0); FILE* fd = fopen(file, "rb"); if(fd) { unsigned len; fseek(fd, 0l, SEEK_END); len = ftell(fd); fseek(fd, 0l, SEEK_SET); if(len > 0) { m_loaded_font.resize(len); if (fread(&m_loaded_font[0], 1, len, fd) == len) { m_font = &m_loaded_font[0]; } } fclose(fd); } } //------------------------------------------------------------------------- void gsv_text::text(const char* text) { if(text == 0) { m_chr[0] = 0; m_text = m_chr; return; } unsigned new_size = strlen(text) + 1; if(new_size > m_text_buf.size()) { m_text_buf.resize(new_size); } memcpy(&m_text_buf[0], text, new_size); m_text = &m_text_buf[0]; } //------------------------------------------------------------------------- void gsv_text::rewind(unsigned) { m_status = initial; if(m_font == 0) return; m_indices = (int8u*)m_font; double base_height = value(m_indices + 4); m_indices += value(m_indices); m_glyphs = (int8*)(m_indices + 257*2); m_h = m_height / base_height; m_w = (m_width == 0.0) ? m_h : m_width / base_height; if(m_flip) m_h = -m_h; m_cur_chr = m_text; } //------------------------------------------------------------------------- unsigned gsv_text::vertex(double* x, double* y) { unsigned idx; int8 yc, yf; int dx, dy; bool quit = false; while(!quit) { switch(m_status) { case initial: if(m_font == 0) { quit = true; break; } m_status = next_char; case next_char: if(*m_cur_chr == 0) { quit = true; break; } idx = (*m_cur_chr++) & 0xFF; if(idx == '\n') { m_x = m_start_x; m_y -= m_flip ? -m_height - m_line_space : m_height + m_line_space; break; } idx <<= 1; m_bglyph = m_glyphs + value(m_indices + idx); m_eglyph = m_glyphs + value(m_indices + idx + 2); m_status = start_glyph; case start_glyph: *x = m_x; *y = m_y; m_status = glyph; return path_cmd_move_to; case glyph: if(m_bglyph >= m_eglyph) { m_status = next_char; m_x += m_space; break; } dx = int(*m_bglyph++); yf = (yc = *m_bglyph++) & 0x80; yc <<= 1; yc >>= 1; dy = int(yc); m_x += double(dx) * m_w; m_y += double(dy) * m_h; *x = m_x; *y = m_y; return yf ? path_cmd_move_to : path_cmd_line_to; } } return path_cmd_stop; } //------------------------------------------------------------------------- double gsv_text::text_width() { double x1, y1, x2, y2; bounding_rect_single(*this, 0, &x1, &y1, &x2, &y2); return x2 - x1; } } mapnik-3.0.9/deps/agg/src/agg_image_filters.cpp000066400000000000000000000063731262555547000214420ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Filtering class image_filter_lut implemantation // //---------------------------------------------------------------------------- #include "agg_image_filters.h" namespace agg { //-------------------------------------------------------------------- void image_filter_lut::realloc_lut(double radius) { m_radius = radius; m_diameter = uceil(radius) * 2; m_start = -int(m_diameter / 2 - 1); unsigned size = m_diameter << image_subpixel_shift; if(size > m_weight_array.size()) { m_weight_array.resize(size); } } //-------------------------------------------------------------------- // This function normalizes integer values and corrects the rounding // errors. It doesn't do anything with the source floating point values // (m_weight_array_dbl), it corrects only integers according to the rule // of 1.0 which means that any sum of pixel weights must be equal to 1.0. // So, the filter function must produce a graph of the proper shape. //-------------------------------------------------------------------- void image_filter_lut::normalize() { unsigned i; int flip = 1; for(i = 0; i < image_subpixel_scale; i++) { for(;;) { int sum = 0; unsigned j; for(j = 0; j < m_diameter; j++) { sum += m_weight_array[j * image_subpixel_scale + i]; } if(sum == image_filter_scale) break; double k = (sum > 0) ? double(image_filter_scale) / double(sum) : 1; sum = 0; for(j = 0; j < m_diameter; j++) { sum += m_weight_array[j * image_subpixel_scale + i] = iround(m_weight_array[j * image_subpixel_scale + i] * k); } sum -= image_filter_scale; int inc = (sum > 0) ? -1 : 1; for(j = 0; j < m_diameter && sum; j++) { flip ^= 1; unsigned idx = flip ? m_diameter/2 + j/2 : m_diameter/2 - j/2; int v = m_weight_array[idx * image_subpixel_scale + i]; if(v < image_filter_scale) { m_weight_array[idx * image_subpixel_scale + i] += inc; sum += inc; } } } } unsigned pivot = m_diameter << (image_subpixel_shift - 1); for(i = 0; i < pivot; i++) { m_weight_array[pivot + i] = m_weight_array[pivot - i]; } unsigned end = (diameter() << image_subpixel_shift) - 1; m_weight_array[0] = m_weight_array[end]; } } mapnik-3.0.9/deps/agg/src/agg_line_aa_basics.cpp000066400000000000000000000054111262555547000215340ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include #include "agg_line_aa_basics.h" namespace agg { //------------------------------------------------------------------------- // The number of the octant is determined as a 3-bit value as follows: // bit 0 = vertical flag // bit 1 = sx < 0 // bit 2 = sy < 0 // // [N] shows the number of the orthogonal quadrant // shows the number of the diagonal quadrant // <1> // [1] | [0] // . (3)011 | 001(1) . // . | . // . | . // . | . // (2)010 .|. 000(0) // <2> ----------.+.----------- <0> // (6)110 . | . 100(4) // . | . // . | . // . | . // (7)111 | 101(5) // [2] | [3] // <3> // 0,1,2,3,4,5,6,7 const int8u line_parameters::s_orthogonal_quadrant[8] = { 0,0,1,1,3,3,2,2 }; const int8u line_parameters::s_diagonal_quadrant[8] = { 0,1,2,1,0,3,2,3 }; //------------------------------------------------------------------------- void bisectrix(const line_parameters& l1, const line_parameters& l2, int* x, int* y) { double k = double(l2.len) / double(l1.len); double tx = l2.x2 - (l2.x1 - l1.x1) * k; double ty = l2.y2 - (l2.y1 - l1.y1) * k; //All bisectrices must be on the right of the line //If the next point is on the left (l1 => l2.2) //then the bisectix should be rotated by 180 degrees. if(double(l2.x2 - l2.x1) * double(l2.y1 - l1.y1) < double(l2.y2 - l2.y1) * double(l2.x1 - l1.x1) + 100.0) { tx -= (tx - l2.x1) * 2.0; ty -= (ty - l2.y1) * 2.0; } // Check if the bisectrix is too short double dx = tx - l2.x1; double dy = ty - l2.y1; if((int)sqrt(dx * dx + dy * dy) < line_subpixel_scale) { *x = (l2.x1 + l2.x1 + (l2.y1 - l1.y1) + (l2.y2 - l2.y1)) >> 1; *y = (l2.y1 + l2.y1 - (l2.x1 - l1.x1) - (l2.x2 - l2.x1)) >> 1; return; } *x = iround(tx); *y = iround(ty); } } mapnik-3.0.9/deps/agg/src/agg_line_profile_aa.cpp000066400000000000000000000061511262555547000217320ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include "agg_renderer_outline_aa.h" namespace agg { //--------------------------------------------------------------------- void line_profile_aa::width(double w) { if(w < 0.0) w = 0.0; if(w < m_smoother_width) w += w; else w += m_smoother_width; w *= 0.5; w -= m_smoother_width; double s = m_smoother_width; if(w < 0.0) { s += w; w = 0.0; } set(w, s); } //--------------------------------------------------------------------- line_profile_aa::value_type* line_profile_aa::profile(double w) { m_subpixel_width = uround(w * subpixel_scale); unsigned size = m_subpixel_width + subpixel_scale * 6; if(size > m_profile.size()) { m_profile.resize(size); } return &m_profile[0]; } //--------------------------------------------------------------------- void line_profile_aa::set(double center_width, double smoother_width) { double base_val = 1.0; if(center_width == 0.0) center_width = 1.0 / subpixel_scale; if(smoother_width == 0.0) smoother_width = 1.0 / subpixel_scale; double width = center_width + smoother_width; if(width < m_min_width) { double k = width / m_min_width; base_val *= k; center_width /= k; smoother_width /= k; } value_type* ch = profile(center_width + smoother_width); unsigned subpixel_center_width = unsigned(center_width * subpixel_scale); unsigned subpixel_smoother_width = unsigned(smoother_width * subpixel_scale); value_type* ch_center = ch + subpixel_scale*2; value_type* ch_smoother = ch_center + subpixel_center_width; unsigned i; unsigned val = m_gamma[unsigned(base_val * aa_mask)]; ch = ch_center; for(i = 0; i < subpixel_center_width; i++) { *ch++ = (value_type)val; } for(i = 0; i < subpixel_smoother_width; i++) { *ch_smoother++ = m_gamma[unsigned((base_val - base_val * (double(i) / subpixel_smoother_width)) * aa_mask)]; } unsigned n_smoother = profile_size() - subpixel_smoother_width - subpixel_center_width - subpixel_scale*2; val = m_gamma[0]; for(i = 0; i < n_smoother; i++) { *ch_smoother++ = (value_type)val; } ch = ch_center; for(i = 0; i < subpixel_scale*2; i++) { *--ch = *ch_center++; } } } mapnik-3.0.9/deps/agg/src/agg_pixfmt_rgba.cpp000066400000000000000000000124731262555547000211300ustar00rootroot00000000000000 #include "agg_pixfmt_rgba.h" #pragma GCC diagnostic push #include #include #include #include #pragma GCC diagnostic pop namespace agg { template void comp_op_rgba_hue::blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if (cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if (sa > 0) { using namespace boost; using namespace gil; using namespace hsv_color_space; rgb8_pixel_t rgb_src(sr,sg,sb); rgb8_pixel_t rgb_dst(p[Order::R],p[Order::G],p[Order::B]); hsv32f_pixel_t hsv_src,hsv_dst; color_convert(rgb_src, hsv_src); color_convert(rgb_dst, hsv_dst); get_color(hsv_dst,hue_t()) = get_color(hsv_src,hue_t()); color_convert(hsv_dst, rgb_dst); p[Order::R] = get_color(rgb_dst,red_t()); p[Order::G] = get_color(rgb_dst,green_t()); p[Order::B] = get_color(rgb_dst,blue_t()); p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift)); } } template void comp_op_rgba_saturation::blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if (cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if (sa > 0) { using namespace boost; using namespace gil; using namespace hsv_color_space; rgb8_pixel_t rgb_src(sr,sg,sb); rgb8_pixel_t rgb_dst(p[Order::R],p[Order::G],p[Order::B]); hsv32f_pixel_t hsv_src,hsv_dst; color_convert( rgb_src, hsv_src); color_convert( rgb_dst, hsv_dst); get_color(hsv_dst,saturation_t()) = get_color(hsv_src,saturation_t()); color_convert(hsv_dst, rgb_dst); p[Order::R] = get_color(rgb_dst,red_t()); p[Order::G] = get_color(rgb_dst,green_t()); p[Order::B] = get_color(rgb_dst,blue_t()); p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift)); } } template void comp_op_rgba_color::blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if (cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if (sa > 0) { using namespace boost; using namespace gil; using namespace hsl_color_space; rgb8_pixel_t rgb_src(sr,sg,sb); rgb8_pixel_t rgb_dst(p[Order::R],p[Order::G],p[Order::B]); hsl32f_pixel_t hsl_src,hsl_dst; color_convert( rgb_src, hsl_src); color_convert( rgb_dst, hsl_dst); get_color(hsl_dst,hue_t()) = get_color(hsl_src,hue_t()); get_color(hsl_dst,saturation_t()) = get_color(hsl_src,saturation_t()); get_color(hsl_dst,lightness_t()) = get_color(hsl_dst,lightness_t()); color_convert(hsl_dst, rgb_dst); p[Order::R] = get_color(rgb_dst,red_t()); p[Order::G] = get_color(rgb_dst,green_t()); p[Order::B] = get_color(rgb_dst,blue_t()); p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift)); } } template void comp_op_rgba_value::blend_pix(value_type* p, unsigned sr, unsigned sg, unsigned sb, unsigned sa, unsigned cover) { if (cover < 255) { sr = (sr * cover + 255) >> 8; sg = (sg * cover + 255) >> 8; sb = (sb * cover + 255) >> 8; sa = (sa * cover + 255) >> 8; } if (sa > 0) { using namespace boost; using namespace gil; using namespace hsv_color_space; rgb8_pixel_t rgb_src(sr,sg,sb); rgb8_pixel_t rgb_dst(p[Order::R],p[Order::G],p[Order::B]); hsv32f_pixel_t hsv_src,hsv_dst; color_convert( rgb_src, hsv_src); color_convert( rgb_dst, hsv_dst); get_color(hsv_dst,value_t()) = get_color(hsv_src,value_t()); color_convert(hsv_dst, rgb_dst); p[Order::R] = get_color(rgb_dst,red_t()); p[Order::G] = get_color(rgb_dst,green_t()); p[Order::B] = get_color(rgb_dst,blue_t()); p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift)); } } template struct comp_op_rgba_hue; template struct comp_op_rgba_saturation; template struct comp_op_rgba_color; template struct comp_op_rgba_value; } mapnik-3.0.9/deps/agg/src/agg_rounded_rect.cpp000066400000000000000000000111651262555547000213000ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Rounded rectangle vertex generator // //---------------------------------------------------------------------------- #include #include "agg_rounded_rect.h" namespace agg { //------------------------------------------------------------------------ rounded_rect::rounded_rect(double x1, double y1, double x2, double y2, double r) : m_x1(x1), m_y1(y1), m_x2(x2), m_y2(y2), m_rx1(r), m_ry1(r), m_rx2(r), m_ry2(r), m_rx3(r), m_ry3(r), m_rx4(r), m_ry4(r) { if(x1 > x2) { m_x1 = x2; m_x2 = x1; } if(y1 > y2) { m_y1 = y2; m_y2 = y1; } } //-------------------------------------------------------------------- void rounded_rect::rect(double x1, double y1, double x2, double y2) { m_x1 = x1; m_y1 = y1; m_x2 = x2; m_y2 = y2; if(x1 > x2) { m_x1 = x2; m_x2 = x1; } if(y1 > y2) { m_y1 = y2; m_y2 = y1; } } //-------------------------------------------------------------------- void rounded_rect::radius(double r) { m_rx1 = m_ry1 = m_rx2 = m_ry2 = m_rx3 = m_ry3 = m_rx4 = m_ry4 = r; } //-------------------------------------------------------------------- void rounded_rect::radius(double rx, double ry) { m_rx1 = m_rx2 = m_rx3 = m_rx4 = rx; m_ry1 = m_ry2 = m_ry3 = m_ry4 = ry; } //-------------------------------------------------------------------- void rounded_rect::radius(double rx_bottom, double ry_bottom, double rx_top, double ry_top) { m_rx1 = m_rx2 = rx_bottom; m_rx3 = m_rx4 = rx_top; m_ry1 = m_ry2 = ry_bottom; m_ry3 = m_ry4 = ry_top; } //-------------------------------------------------------------------- void rounded_rect::radius(double rx1, double ry1, double rx2, double ry2, double rx3, double ry3, double rx4, double ry4) { m_rx1 = rx1; m_ry1 = ry1; m_rx2 = rx2; m_ry2 = ry2; m_rx3 = rx3; m_ry3 = ry3; m_rx4 = rx4; m_ry4 = ry4; } //-------------------------------------------------------------------- void rounded_rect::normalize_radius() { double dx = std::fabs(m_x2 - m_x1); double dy = std::fabs(m_y2 - m_y1); double k = 1.0; double t; t = dx / (m_rx1 + m_rx2); if(t < k) k = t; t = dx / (m_rx3 + m_rx4); if(t < k) k = t; t = dy / (m_ry1 + m_ry2); if(t < k) k = t; t = dy / (m_ry3 + m_ry4); if(t < k) k = t; if(k < 1.0) { m_rx1 *= k; m_ry1 *= k; m_rx2 *= k; m_ry2 *= k; m_rx3 *= k; m_ry3 *= k; m_rx4 *= k; m_ry4 *= k; } } //-------------------------------------------------------------------- void rounded_rect::rewind(unsigned) { m_status = 0; } //-------------------------------------------------------------------- unsigned rounded_rect::vertex(double* x, double* y) { unsigned cmd = path_cmd_stop; switch(m_status) { case 0: m_arc.init(m_x1 + m_rx1, m_y1 + m_ry1, m_rx1, m_ry1, pi, pi+pi*0.5); m_arc.rewind(0); m_status++; case 1: cmd = m_arc.vertex(x, y); if(is_stop(cmd)) m_status++; else return cmd; case 2: m_arc.init(m_x2 - m_rx2, m_y1 + m_ry2, m_rx2, m_ry2, pi+pi*0.5, 0.0); m_arc.rewind(0); m_status++; case 3: cmd = m_arc.vertex(x, y); if(is_stop(cmd)) m_status++; else return path_cmd_line_to; case 4: m_arc.init(m_x2 - m_rx3, m_y2 - m_ry3, m_rx3, m_ry3, 0.0, pi*0.5); m_arc.rewind(0); m_status++; case 5: cmd = m_arc.vertex(x, y); if(is_stop(cmd)) m_status++; else return path_cmd_line_to; case 6: m_arc.init(m_x1 + m_rx4, m_y2 - m_ry4, m_rx4, m_ry4, pi*0.5, pi); m_arc.rewind(0); m_status++; case 7: cmd = m_arc.vertex(x, y); if(is_stop(cmd)) m_status++; else return path_cmd_line_to; case 8: cmd = path_cmd_end_poly | path_flags_close | path_flags_ccw; m_status++; break; } return cmd; } } mapnik-3.0.9/deps/agg/src/agg_sqrt_tables.cpp000066400000000000000000000176261262555547000211560ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // static tables for fast integer sqrt // //---------------------------------------------------------------------------- #include "agg_basics.h" namespace agg { int16u g_sqrt_table[1024] = //----------g_sqrt_table { 0, 2048,2896,3547,4096,4579,5017,5418,5793,6144,6476,6792,7094,7384,7663,7932,8192,8444, 8689,8927,9159,9385,9606,9822,10033,10240,10443,10642,10837,11029,11217,11403,11585, 11765,11942,12116,12288,12457,12625,12790,12953,13114,13273,13430,13585,13738,13890, 14040,14189,14336,14482,14626,14768,14910,15050,15188,15326,15462,15597,15731,15864, 15995,16126,16255,16384,16512,16638,16764,16888,17012,17135,17257,17378,17498,17618, 17736,17854,17971,18087,18203,18318,18432,18545,18658,18770,18882,18992,19102,19212, 19321,19429,19537,19644,19750,19856,19961,20066,20170,20274,20377,20480,20582,20684, 20785,20886,20986,21085,21185,21283,21382,21480,21577,21674,21771,21867,21962,22058, 22153,22247,22341,22435,22528,22621,22713,22806,22897,22989,23080,23170,23261,23351, 23440,23530,23619,23707,23796,23884,23971,24059,24146,24232,24319,24405,24491,24576, 24661,24746,24831,24915,24999,25083,25166,25249,25332,25415,25497,25580,25661,25743, 25824,25905,25986,26067,26147,26227,26307,26387,26466,26545,26624,26703,26781,26859, 26937,27015,27092,27170,27247,27324,27400,27477,27553,27629,27705,27780,27856,27931, 28006,28081,28155,28230,28304,28378,28452,28525,28599,28672,28745,28818,28891,28963, 29035,29108,29180,29251,29323,29394,29466,29537,29608,29678,29749,29819,29890,29960, 30030,30099,30169,30238,30308,30377,30446,30515,30583,30652,30720,30788,30856,30924, 30992,31059,31127,31194,31261,31328,31395,31462,31529,31595,31661,31727,31794,31859, 31925,31991,32056,32122,32187,32252,32317,32382,32446,32511,32575,32640,32704,32768, 32832,32896,32959,33023,33086,33150,33213,33276,33339,33402,33465,33527,33590,33652, 33714,33776,33839,33900,33962,34024,34086,34147,34208,34270,34331,34392,34453,34514, 34574,34635,34695,34756,34816,34876,34936,34996,35056,35116,35176,35235,35295,35354, 35413,35472,35531,35590,35649,35708,35767,35825,35884,35942,36001,36059,36117,36175, 36233,36291,36348,36406,36464,36521,36578,36636,36693,36750,36807,36864,36921,36978, 37034,37091,37147,37204,37260,37316,37372,37429,37485,37540,37596,37652,37708,37763, 37819,37874,37929,37985,38040,38095,38150,38205,38260,38315,38369,38424,38478,38533, 38587,38642,38696,38750,38804,38858,38912,38966,39020,39073,39127,39181,39234,39287, 39341,39394,39447,39500,39553,39606,39659,39712,39765,39818,39870,39923,39975,40028, 40080,40132,40185,40237,40289,40341,40393,40445,40497,40548,40600,40652,40703,40755, 40806,40857,40909,40960,41011,41062,41113,41164,41215,41266,41317,41368,41418,41469, 41519,41570,41620,41671,41721,41771,41821,41871,41922,41972,42021,42071,42121,42171, 42221,42270,42320,42369,42419,42468,42518,42567,42616,42665,42714,42763,42813,42861, 42910,42959,43008,43057,43105,43154,43203,43251,43300,43348,43396,43445,43493,43541, 43589,43637,43685,43733,43781,43829,43877,43925,43972,44020,44068,44115,44163,44210, 44258,44305,44352,44400,44447,44494,44541,44588,44635,44682,44729,44776,44823,44869, 44916,44963,45009,45056,45103,45149,45195,45242,45288,45334,45381,45427,45473,45519, 45565,45611,45657,45703,45749,45795,45840,45886,45932,45977,46023,46069,46114,46160, 46205,46250,46296,46341,46386,46431,46477,46522,46567,46612,46657,46702,46746,46791, 46836,46881,46926,46970,47015,47059,47104,47149,47193,47237,47282,47326,47370,47415, 47459,47503,47547,47591,47635,47679,47723,47767,47811,47855,47899,47942,47986,48030, 48074,48117,48161,48204,48248,48291,48335,48378,48421,48465,48508,48551,48594,48637, 48680,48723,48766,48809,48852,48895,48938,48981,49024,49067,49109,49152,49195,49237, 49280,49322,49365,49407,49450,49492,49535,49577,49619,49661,49704,49746,49788,49830, 49872,49914,49956,49998,50040,50082,50124,50166,50207,50249,50291,50332,50374,50416, 50457,50499,50540,50582,50623,50665,50706,50747,50789,50830,50871,50912,50954,50995, 51036,51077,51118,51159,51200,51241,51282,51323,51364,51404,51445,51486,51527,51567, 51608,51649,51689,51730,51770,51811,51851,51892,51932,51972,52013,52053,52093,52134, 52174,52214,52254,52294,52334,52374,52414,52454,52494,52534,52574,52614,52654,52694, 52734,52773,52813,52853,52892,52932,52972,53011,53051,53090,53130,53169,53209,53248, 53287,53327,53366,53405,53445,53484,53523,53562,53601,53640,53679,53719,53758,53797, 53836,53874,53913,53952,53991,54030,54069,54108,54146,54185,54224,54262,54301,54340, 54378,54417,54455,54494,54532,54571,54609,54647,54686,54724,54762,54801,54839,54877, 54915,54954,54992,55030,55068,55106,55144,55182,55220,55258,55296,55334,55372,55410, 55447,55485,55523,55561,55599,55636,55674,55712,55749,55787,55824,55862,55900,55937, 55975,56012,56049,56087,56124,56162,56199,56236,56273,56311,56348,56385,56422,56459, 56497,56534,56571,56608,56645,56682,56719,56756,56793,56830,56867,56903,56940,56977, 57014,57051,57087,57124,57161,57198,57234,57271,57307,57344,57381,57417,57454,57490, 57527,57563,57599,57636,57672,57709,57745,57781,57817,57854,57890,57926,57962,57999, 58035,58071,58107,58143,58179,58215,58251,58287,58323,58359,58395,58431,58467,58503, 58538,58574,58610,58646,58682,58717,58753,58789,58824,58860,58896,58931,58967,59002, 59038,59073,59109,59144,59180,59215,59251,59286,59321,59357,59392,59427,59463,59498, 59533,59568,59603,59639,59674,59709,59744,59779,59814,59849,59884,59919,59954,59989, 60024,60059,60094,60129,60164,60199,60233,60268,60303,60338,60373,60407,60442,60477, 60511,60546,60581,60615,60650,60684,60719,60753,60788,60822,60857,60891,60926,60960, 60995,61029,61063,61098,61132,61166,61201,61235,61269,61303,61338,61372,61406,61440, 61474,61508,61542,61576,61610,61644,61678,61712,61746,61780,61814,61848,61882,61916, 61950,61984,62018,62051,62085,62119,62153,62186,62220,62254,62287,62321,62355,62388, 62422,62456,62489,62523,62556,62590,62623,62657,62690,62724,62757,62790,62824,62857, 62891,62924,62957,62991,63024,63057,63090,63124,63157,63190,63223,63256,63289,63323, 63356,63389,63422,63455,63488,63521,63554,63587,63620,63653,63686,63719,63752,63785, 63817,63850,63883,63916,63949,63982,64014,64047,64080,64113,64145,64178,64211,64243, 64276,64309,64341,64374,64406,64439,64471,64504,64536,64569,64601,64634,64666,64699, 64731,64763,64796,64828,64861,64893,64925,64957,64990,65022,65054,65086,65119,65151, 65183,65215,65247,65279,65312,65344,65376,65408,65440,65472,65504 }; int8 g_elder_bit_table[256] = //---------g_elder_bit_table { 0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 }; } mapnik-3.0.9/deps/agg/src/agg_trans_affine.cpp000066400000000000000000000127441262555547000212660ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Affine transformations // //---------------------------------------------------------------------------- #include "agg_trans_affine.h" namespace agg { const trans_affine trans_affine::identity; //------------------------------------------------------------------------ const trans_affine& trans_affine::parl_to_parl(const double* src, const double* dst) { sx = src[2] - src[0]; shy = src[3] - src[1]; shx = src[4] - src[0]; sy = src[5] - src[1]; tx = src[0]; ty = src[1]; invert(); multiply(trans_affine(dst[2] - dst[0], dst[3] - dst[1], dst[4] - dst[0], dst[5] - dst[1], dst[0], dst[1])); return *this; } //------------------------------------------------------------------------ const trans_affine& trans_affine::rect_to_parl(double x1, double y1, double x2, double y2, const double* parl) { double src[6]; src[0] = x1; src[1] = y1; src[2] = x2; src[3] = y1; src[4] = x2; src[5] = y2; parl_to_parl(src, parl); return *this; } //------------------------------------------------------------------------ const trans_affine& trans_affine::parl_to_rect(const double* parl, double x1, double y1, double x2, double y2) { double dst[6]; dst[0] = x1; dst[1] = y1; dst[2] = x2; dst[3] = y1; dst[4] = x2; dst[5] = y2; parl_to_parl(parl, dst); return *this; } //------------------------------------------------------------------------ const trans_affine& trans_affine::multiply(const trans_affine& m) { double t0 = sx * m.sx + shy * m.shx; double t2 = shx * m.sx + sy * m.shx; double t4 = tx * m.sx + ty * m.shx + m.tx; shy = sx * m.shy + shy * m.sy; sy = shx * m.shy + sy * m.sy; ty = tx * m.shy + ty * m.sy + m.ty; sx = t0; shx = t2; tx = t4; return *this; } //------------------------------------------------------------------------ const trans_affine& trans_affine::invert() { double d = determinant_reciprocal(); double t0 = sy * d; sy = sx * d; shy = -shy * d; shx = -shx * d; double t4 = -tx * t0 - ty * shx; ty = -tx * shy - ty * sy; sx = t0; tx = t4; return *this; } //------------------------------------------------------------------------ const trans_affine& trans_affine::flip_x() { sx = -sx; shy = -shy; tx = -tx; return *this; } //------------------------------------------------------------------------ const trans_affine& trans_affine::flip_y() { shx = -shx; sy = -sy; ty = -ty; return *this; } //------------------------------------------------------------------------ const trans_affine& trans_affine::reset() { sx = sy = 1.0; shy = shx = tx = ty = 0.0; return *this; } //------------------------------------------------------------------------ bool trans_affine::is_identity(double epsilon) const { return is_equal_eps(sx, 1.0, epsilon) && is_equal_eps(shy, 0.0, epsilon) && is_equal_eps(shx, 0.0, epsilon) && is_equal_eps(sy, 1.0, epsilon) && is_equal_eps(tx, 0.0, epsilon) && is_equal_eps(ty, 0.0, epsilon); } //------------------------------------------------------------------------ bool trans_affine::is_valid(double epsilon) const { return std::fabs(sx) > epsilon && std::fabs(sy) > epsilon; } //------------------------------------------------------------------------ bool trans_affine::is_equal(const trans_affine& m, double epsilon) const { return is_equal_eps(sx, m.sx, epsilon) && is_equal_eps(shy, m.shy, epsilon) && is_equal_eps(shx, m.shx, epsilon) && is_equal_eps(sy, m.sy, epsilon) && is_equal_eps(tx, m.tx, epsilon) && is_equal_eps(ty, m.ty, epsilon); } //------------------------------------------------------------------------ double trans_affine::rotation() const { double x1 = 0.0; double y1 = 0.0; double x2 = 1.0; double y2 = 0.0; transform(&x1, &y1); transform(&x2, &y2); return std::atan2(y2-y1, x2-x1); } //------------------------------------------------------------------------ void trans_affine::translation(double* dx, double* dy) const { *dx = tx; *dy = ty; } //------------------------------------------------------------------------ void trans_affine::scaling(double* x, double* y) const { double x1 = 0.0; double y1 = 0.0; double x2 = 1.0; double y2 = 1.0; trans_affine t(*this); t *= trans_affine_rotation(-rotation()); t.transform(&x1, &y1); t.transform(&x2, &y2); *x = x2 - x1; *y = y2 - y1; } } mapnik-3.0.9/deps/agg/src/agg_trans_double_path.cpp000066400000000000000000000163771262555547000223320ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include "agg_math.h" #include "agg_trans_double_path.h" namespace agg { //------------------------------------------------------------------------ trans_double_path::trans_double_path() : m_base_length(0.0), m_base_height(1.0), m_kindex1(0.0), m_kindex2(0.0), m_status1(initial), m_status2(initial), m_preserve_x_scale(true) { } //------------------------------------------------------------------------ void trans_double_path::reset() { m_src_vertices1.remove_all(); m_src_vertices2.remove_all(); m_kindex1 = 0.0; m_kindex1 = 0.0; m_status1 = initial; m_status2 = initial; } //------------------------------------------------------------------------ void trans_double_path::move_to1(double x, double y) { if(m_status1 == initial) { m_src_vertices1.modify_last(vertex_dist(x, y)); m_status1 = making_path; } else { line_to1(x, y); } } //------------------------------------------------------------------------ void trans_double_path::line_to1(double x, double y) { if(m_status1 == making_path) { m_src_vertices1.add(vertex_dist(x, y)); } } //------------------------------------------------------------------------ void trans_double_path::move_to2(double x, double y) { if(m_status2 == initial) { m_src_vertices2.modify_last(vertex_dist(x, y)); m_status2 = making_path; } else { line_to2(x, y); } } //------------------------------------------------------------------------ void trans_double_path::line_to2(double x, double y) { if(m_status2 == making_path) { m_src_vertices2.add(vertex_dist(x, y)); } } //------------------------------------------------------------------------ double trans_double_path::finalize_path(vertex_storage& vertices) { unsigned i; double dist; double d; vertices.close(false); if(vertices.size() > 2) { if(vertices[vertices.size() - 2].dist * 10.0 < vertices[vertices.size() - 3].dist) { d = vertices[vertices.size() - 3].dist + vertices[vertices.size() - 2].dist; vertices[vertices.size() - 2] = vertices[vertices.size() - 1]; vertices.remove_last(); vertices[vertices.size() - 2].dist = d; } } dist = 0; for(i = 0; i < vertices.size(); i++) { vertex_dist& v = vertices[i]; d = v.dist; v.dist = dist; dist += d; } return (vertices.size() - 1) / dist; } //------------------------------------------------------------------------ void trans_double_path::finalize_paths() { if(m_status1 == making_path && m_src_vertices1.size() > 1 && m_status2 == making_path && m_src_vertices2.size() > 1) { m_kindex1 = finalize_path(m_src_vertices1); m_kindex2 = finalize_path(m_src_vertices2); m_status1 = ready; m_status2 = ready; } } //------------------------------------------------------------------------ double trans_double_path::total_length1() const { if(m_base_length >= 1e-10) return m_base_length; return (m_status1 == ready) ? m_src_vertices1[m_src_vertices1.size() - 1].dist : 0.0; } //------------------------------------------------------------------------ double trans_double_path::total_length2() const { if(m_base_length >= 1e-10) return m_base_length; return (m_status2 == ready) ? m_src_vertices2[m_src_vertices2.size() - 1].dist : 0.0; } //------------------------------------------------------------------------ void trans_double_path::transform1(const vertex_storage& vertices, double kindex, double kx, double *x, double* y) const { double x1 = 0.0; double y1 = 0.0; double dx = 1.0; double dy = 1.0; double d = 0.0; double dd = 1.0; *x *= kx; if(*x < 0.0) { // Extrapolation on the left //-------------------------- x1 = vertices[0].x; y1 = vertices[0].y; dx = vertices[1].x - x1; dy = vertices[1].y - y1; dd = vertices[1].dist - vertices[0].dist; d = *x; } else if(*x > vertices[vertices.size() - 1].dist) { // Extrapolation on the right //-------------------------- unsigned i = vertices.size() - 2; unsigned j = vertices.size() - 1; x1 = vertices[j].x; y1 = vertices[j].y; dx = x1 - vertices[i].x; dy = y1 - vertices[i].y; dd = vertices[j].dist - vertices[i].dist; d = *x - vertices[j].dist; } else { // Interpolation //-------------------------- unsigned i = 0; unsigned j = vertices.size() - 1; if(m_preserve_x_scale) { unsigned k; for(i = 0; (j - i) > 1; ) { if(*x < vertices[k = (i + j) >> 1].dist) { j = k; } else { i = k; } } d = vertices[i].dist; dd = vertices[j].dist - d; d = *x - d; } else { i = unsigned(*x * kindex); j = i + 1; dd = vertices[j].dist - vertices[i].dist; d = ((*x * kindex) - i) * dd; } x1 = vertices[i].x; y1 = vertices[i].y; dx = vertices[j].x - x1; dy = vertices[j].y - y1; } *x = x1 + dx * d / dd; *y = y1 + dy * d / dd; } //------------------------------------------------------------------------ void trans_double_path::transform(double *x, double *y) const { if(m_status1 == ready && m_status2 == ready) { if(m_base_length > 1e-10) { *x *= m_src_vertices1[m_src_vertices1.size() - 1].dist / m_base_length; } double x1 = *x; double y1 = *y; double x2 = *x; double y2 = *y; double dd = m_src_vertices2[m_src_vertices2.size() - 1].dist / m_src_vertices1[m_src_vertices1.size() - 1].dist; transform1(m_src_vertices1, m_kindex1, 1.0, &x1, &y1); transform1(m_src_vertices2, m_kindex2, dd, &x2, &y2); *x = x1 + *y * (x2 - x1) / m_base_height; *y = y1 + *y * (y2 - y1) / m_base_height; } } } mapnik-3.0.9/deps/agg/src/agg_trans_single_path.cpp000066400000000000000000000137351262555547000223340ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include "agg_math.h" #include "agg_vertex_sequence.h" #include "agg_trans_single_path.h" namespace agg { //------------------------------------------------------------------------ trans_single_path::trans_single_path() : m_base_length(0.0), m_kindex(0.0), m_status(initial), m_preserve_x_scale(true) { } //------------------------------------------------------------------------ void trans_single_path::reset() { m_src_vertices.remove_all(); m_kindex = 0.0; m_status = initial; } //------------------------------------------------------------------------ void trans_single_path::move_to(double x, double y) { if(m_status == initial) { m_src_vertices.modify_last(vertex_dist(x, y)); m_status = making_path; } else { line_to(x, y); } } //------------------------------------------------------------------------ void trans_single_path::line_to(double x, double y) { if(m_status == making_path) { m_src_vertices.add(vertex_dist(x, y)); } } //------------------------------------------------------------------------ void trans_single_path::finalize_path() { if(m_status == making_path && m_src_vertices.size() > 1) { unsigned i; double dist; double d; m_src_vertices.close(false); if(m_src_vertices.size() > 2) { if(m_src_vertices[m_src_vertices.size() - 2].dist * 10.0 < m_src_vertices[m_src_vertices.size() - 3].dist) { d = m_src_vertices[m_src_vertices.size() - 3].dist + m_src_vertices[m_src_vertices.size() - 2].dist; m_src_vertices[m_src_vertices.size() - 2] = m_src_vertices[m_src_vertices.size() - 1]; m_src_vertices.remove_last(); m_src_vertices[m_src_vertices.size() - 2].dist = d; } } dist = 0.0; for(i = 0; i < m_src_vertices.size(); i++) { vertex_dist& v = m_src_vertices[i]; double dd = v.dist; v.dist = dist; dist += dd; } m_kindex = (m_src_vertices.size() - 1) / dist; m_status = ready; } } //------------------------------------------------------------------------ double trans_single_path::total_length() const { if(m_base_length >= 1e-10) return m_base_length; return (m_status == ready) ? m_src_vertices[m_src_vertices.size() - 1].dist : 0.0; } //------------------------------------------------------------------------ void trans_single_path::transform(double *x, double *y) const { if(m_status == ready) { if(m_base_length > 1e-10) { *x *= m_src_vertices[m_src_vertices.size() - 1].dist / m_base_length; } double x1 = 0.0; double y1 = 0.0; double dx = 1.0; double dy = 1.0; double d = 0.0; double dd = 1.0; if(*x < 0.0) { // Extrapolation on the left //-------------------------- x1 = m_src_vertices[0].x; y1 = m_src_vertices[0].y; dx = m_src_vertices[1].x - x1; dy = m_src_vertices[1].y - y1; dd = m_src_vertices[1].dist - m_src_vertices[0].dist; d = *x; } else if(*x > m_src_vertices[m_src_vertices.size() - 1].dist) { // Extrapolation on the right //-------------------------- unsigned i = m_src_vertices.size() - 2; unsigned j = m_src_vertices.size() - 1; x1 = m_src_vertices[j].x; y1 = m_src_vertices[j].y; dx = x1 - m_src_vertices[i].x; dy = y1 - m_src_vertices[i].y; dd = m_src_vertices[j].dist - m_src_vertices[i].dist; d = *x - m_src_vertices[j].dist; } else { // Interpolation //-------------------------- unsigned i = 0; unsigned j = m_src_vertices.size() - 1; if(m_preserve_x_scale) { unsigned k; for(i = 0; (j - i) > 1; ) { if(*x < m_src_vertices[k = (i + j) >> 1].dist) { j = k; } else { i = k; } } d = m_src_vertices[i].dist; dd = m_src_vertices[j].dist - d; d = *x - d; } else { i = unsigned(*x * m_kindex); j = i + 1; dd = m_src_vertices[j].dist - m_src_vertices[i].dist; d = ((*x * m_kindex) - i) * dd; } x1 = m_src_vertices[i].x; y1 = m_src_vertices[i].y; dx = m_src_vertices[j].x - x1; dy = m_src_vertices[j].y - y1; } double x2 = x1 + dx * d / dd; double y2 = y1 + dy * d / dd; *x = x2 - *y * dy / dd; *y = y2 + *y * dx / dd; } } } mapnik-3.0.9/deps/agg/src/agg_trans_warp_magnifier.cpp000066400000000000000000000037151262555547000230260ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include #include "agg_trans_warp_magnifier.h" namespace agg { //------------------------------------------------------------------------ void trans_warp_magnifier::transform(double* x, double* y) const { double dx = *x - m_xc; double dy = *y - m_yc; double r = sqrt(dx * dx + dy * dy); if(r < m_radius) { *x = m_xc + dx * m_magn; *y = m_yc + dy * m_magn; return; } double m = (r + m_radius * (m_magn - 1.0)) / r; *x = m_xc + dx * m; *y = m_yc + dy * m; } //------------------------------------------------------------------------ void trans_warp_magnifier::inverse_transform(double* x, double* y) const { // New version by Andrew Skalkin //----------------- double dx = *x - m_xc; double dy = *y - m_yc; double r = sqrt(dx * dx + dy * dy); if(r < m_radius * m_magn) { *x = m_xc + dx / m_magn; *y = m_yc + dy / m_magn; } else { double rnew = r - m_radius * (m_magn - 1.0); *x = m_xc + rnew * dx / r; *y = m_yc + rnew * dy / r; } // Old version //----------------- //trans_warp_magnifier t(*this); //t.magnification(1.0 / m_magn); //t.radius(m_radius * m_magn); //t.transform(x, y); } } mapnik-3.0.9/deps/agg/src/agg_vcgen_bspline.cpp000066400000000000000000000136321262555547000214420ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include "agg_vcgen_bspline.h" namespace agg { //------------------------------------------------------------------------ vcgen_bspline::vcgen_bspline() : m_src_vertices(), m_spline_x(), m_spline_y(), m_interpolation_step(1.0/50.0), m_closed(0), m_status(initial), m_src_vertex(0) { } //------------------------------------------------------------------------ void vcgen_bspline::remove_all() { m_src_vertices.remove_all(); m_closed = 0; m_status = initial; m_src_vertex = 0; } //------------------------------------------------------------------------ void vcgen_bspline::add_vertex(double x, double y, unsigned cmd) { m_status = initial; if(is_move_to(cmd)) { m_src_vertices.modify_last(point_d(x, y)); } else { if(is_vertex(cmd)) { m_src_vertices.add(point_d(x, y)); } else { m_closed = get_close_flag(cmd); } } } //------------------------------------------------------------------------ void vcgen_bspline::rewind(unsigned) { m_cur_abscissa = 0.0; m_max_abscissa = 0.0; m_src_vertex = 0; if(m_status == initial && m_src_vertices.size() > 2) { if(m_closed) { m_spline_x.init(m_src_vertices.size() + 8); m_spline_y.init(m_src_vertices.size() + 8); m_spline_x.add_point(0.0, m_src_vertices.prev(m_src_vertices.size() - 3).x); m_spline_y.add_point(0.0, m_src_vertices.prev(m_src_vertices.size() - 3).y); m_spline_x.add_point(1.0, m_src_vertices[m_src_vertices.size() - 3].x); m_spline_y.add_point(1.0, m_src_vertices[m_src_vertices.size() - 3].y); m_spline_x.add_point(2.0, m_src_vertices[m_src_vertices.size() - 2].x); m_spline_y.add_point(2.0, m_src_vertices[m_src_vertices.size() - 2].y); m_spline_x.add_point(3.0, m_src_vertices[m_src_vertices.size() - 1].x); m_spline_y.add_point(3.0, m_src_vertices[m_src_vertices.size() - 1].y); } else { m_spline_x.init(m_src_vertices.size()); m_spline_y.init(m_src_vertices.size()); } unsigned i; for(i = 0; i < m_src_vertices.size(); i++) { double x = m_closed ? i + 4 : i; m_spline_x.add_point(x, m_src_vertices[i].x); m_spline_y.add_point(x, m_src_vertices[i].y); } m_cur_abscissa = 0.0; m_max_abscissa = m_src_vertices.size() - 1; if(m_closed) { m_cur_abscissa = 4.0; m_max_abscissa += 5.0; m_spline_x.add_point(m_src_vertices.size() + 4, m_src_vertices[0].x); m_spline_y.add_point(m_src_vertices.size() + 4, m_src_vertices[0].y); m_spline_x.add_point(m_src_vertices.size() + 5, m_src_vertices[1].x); m_spline_y.add_point(m_src_vertices.size() + 5, m_src_vertices[1].y); m_spline_x.add_point(m_src_vertices.size() + 6, m_src_vertices[2].x); m_spline_y.add_point(m_src_vertices.size() + 6, m_src_vertices[2].y); m_spline_x.add_point(m_src_vertices.size() + 7, m_src_vertices.next(2).x); m_spline_y.add_point(m_src_vertices.size() + 7, m_src_vertices.next(2).y); } m_spline_x.prepare(); m_spline_y.prepare(); } m_status = ready; } //------------------------------------------------------------------------ unsigned vcgen_bspline::vertex(double* x, double* y) { unsigned cmd = path_cmd_line_to; while(!is_stop(cmd)) { switch(m_status) { case initial: rewind(0); case ready: if(m_src_vertices.size() < 2) { cmd = path_cmd_stop; break; } if(m_src_vertices.size() == 2) { *x = m_src_vertices[m_src_vertex].x; *y = m_src_vertices[m_src_vertex].y; m_src_vertex++; if(m_src_vertex == 1) return path_cmd_move_to; if(m_src_vertex == 2) return path_cmd_line_to; cmd = path_cmd_stop; break; } cmd = path_cmd_move_to; m_status = polygon; m_src_vertex = 0; case polygon: if(m_cur_abscissa >= m_max_abscissa) { if(m_closed) { m_status = end_poly; break; } else { *x = m_src_vertices[m_src_vertices.size() - 1].x; *y = m_src_vertices[m_src_vertices.size() - 1].y; m_status = end_poly; return path_cmd_line_to; } } *x = m_spline_x.get_stateful(m_cur_abscissa); *y = m_spline_y.get_stateful(m_cur_abscissa); m_src_vertex++; m_cur_abscissa += m_interpolation_step; return (m_src_vertex == 1) ? path_cmd_move_to : path_cmd_line_to; case end_poly: m_status = stop; return path_cmd_end_poly | m_closed; case stop: return path_cmd_stop; } } return cmd; } } mapnik-3.0.9/deps/agg/src/agg_vcgen_contour.cpp000066400000000000000000000107331262555547000214760ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Contour generator // //---------------------------------------------------------------------------- #include #include "agg_vcgen_contour.h" namespace agg { //------------------------------------------------------------------------ vcgen_contour::vcgen_contour() : m_stroker(), m_width(1), m_src_vertices(), m_out_vertices(), m_status(initial), m_src_vertex(0), m_closed(0), m_orientation(0), m_auto_detect(false) { } //------------------------------------------------------------------------ void vcgen_contour::remove_all() { m_src_vertices.remove_all(); m_closed = 0; m_orientation = 0; m_status = initial; } //------------------------------------------------------------------------ void vcgen_contour::add_vertex(double x, double y, unsigned cmd) { m_status = initial; if(is_move_to(cmd)) { m_src_vertices.modify_last(vertex_dist(x, y)); } else { if(is_vertex(cmd)) { m_src_vertices.add(vertex_dist(x, y)); } else { if(is_end_poly(cmd)) { m_closed = get_close_flag(cmd); if(m_orientation == path_flags_none) { m_orientation = get_orientation(cmd); } } } } } //------------------------------------------------------------------------ void vcgen_contour::rewind(unsigned) { if(m_status == initial) { m_src_vertices.close(true); if(m_auto_detect) { if(!is_oriented(m_orientation)) { m_orientation = (calc_polygon_area(m_src_vertices) > 0.0) ? path_flags_ccw : path_flags_cw; } } if(is_oriented(m_orientation)) { m_stroker.width(is_ccw(m_orientation) ? m_width : -m_width); } } m_status = ready; m_src_vertex = 0; } //------------------------------------------------------------------------ unsigned vcgen_contour::vertex(double* x, double* y) { unsigned cmd = path_cmd_line_to; while(!is_stop(cmd)) { switch(m_status) { case initial: rewind(0); case ready: if(m_src_vertices.size() < 2 + unsigned(m_closed != 0)) { cmd = path_cmd_stop; break; } m_status = outline; cmd = path_cmd_move_to; m_src_vertex = 0; m_out_vertex = 0; case outline: if(m_src_vertex >= m_src_vertices.size()) { m_status = end_poly; break; } m_stroker.calc_join(m_out_vertices, m_src_vertices.prev(m_src_vertex), m_src_vertices.curr(m_src_vertex), m_src_vertices.next(m_src_vertex), m_src_vertices.prev(m_src_vertex).dist, m_src_vertices.curr(m_src_vertex).dist); ++m_src_vertex; m_status = out_vertices; m_out_vertex = 0; case out_vertices: if(m_out_vertex >= m_out_vertices.size()) { m_status = outline; } else { const point_d& c = m_out_vertices[m_out_vertex++]; *x = c.x; *y = c.y; return cmd; } break; case end_poly: if(!m_closed) return path_cmd_stop; m_status = stop; return path_cmd_end_poly | path_flags_close | path_flags_ccw; case stop: return path_cmd_stop; } } return cmd; } } mapnik-3.0.9/deps/agg/src/agg_vcgen_dash.cpp000066400000000000000000000137731262555547000207330ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Line dash generator // //---------------------------------------------------------------------------- #include #include "agg_vcgen_dash.h" #include "agg_shorten_path.h" namespace agg { //------------------------------------------------------------------------ vcgen_dash::vcgen_dash() : m_total_dash_len(0.0), m_num_dashes(0), m_dash_start(0.0), m_shorten(0.0), m_curr_dash_start(0.0), m_curr_dash(0), m_src_vertices(), m_closed(0), m_status(initial), m_src_vertex(0) { } //------------------------------------------------------------------------ void vcgen_dash::remove_all_dashes() { m_total_dash_len = 0.0; m_num_dashes = 0; m_curr_dash_start = 0.0; m_curr_dash = 0; } //------------------------------------------------------------------------ void vcgen_dash::add_dash(double dash_len, double gap_len) { if(m_num_dashes < max_dashes-1) { m_total_dash_len += dash_len + gap_len; m_dashes[m_num_dashes++] = dash_len; m_dashes[m_num_dashes++] = gap_len; } } //------------------------------------------------------------------------ void vcgen_dash::dash_start(double ds) { m_dash_start = ds; calc_dash_start(std::fabs(ds)); } //------------------------------------------------------------------------ void vcgen_dash::calc_dash_start(double ds) { m_curr_dash = 0; m_curr_dash_start = 0.0; while(ds > 0.0) { if(ds > m_dashes[m_curr_dash]) { ds -= m_dashes[m_curr_dash]; ++m_curr_dash; m_curr_dash_start = 0.0; if(m_curr_dash >= m_num_dashes) m_curr_dash = 0; } else { m_curr_dash_start = ds; ds = 0.0; } } } //------------------------------------------------------------------------ void vcgen_dash::remove_all() { m_status = initial; m_src_vertices.remove_all(); m_closed = 0; } //------------------------------------------------------------------------ void vcgen_dash::add_vertex(double x, double y, unsigned cmd) { m_status = initial; if(is_move_to(cmd)) { m_src_vertices.modify_last(vertex_dist(x, y)); } else { if(is_vertex(cmd)) { m_src_vertices.add(vertex_dist(x, y)); } else { m_closed = get_close_flag(cmd); } } } //------------------------------------------------------------------------ void vcgen_dash::rewind(unsigned) { if(m_status == initial) { m_src_vertices.close(m_closed != 0); shorten_path(m_src_vertices, m_shorten, m_closed); } m_status = ready; m_src_vertex = 0; } //------------------------------------------------------------------------ unsigned vcgen_dash::vertex(double* x, double* y) { unsigned cmd = path_cmd_move_to; while(!is_stop(cmd)) { switch(m_status) { case initial: rewind(0); case ready: if(m_num_dashes < 2 || m_src_vertices.size() < 2) { cmd = path_cmd_stop; break; } m_status = polyline; m_src_vertex = 1; m_v1 = &m_src_vertices[0]; m_v2 = &m_src_vertices[1]; m_curr_rest = m_v1->dist; *x = m_v1->x; *y = m_v1->y; if(m_dash_start >= 0.0) calc_dash_start(m_dash_start); return path_cmd_move_to; case polyline: { double dash_rest = m_dashes[m_curr_dash] - m_curr_dash_start; unsigned cmd2 = (m_curr_dash & 1) ? path_cmd_move_to : path_cmd_line_to; if(m_curr_rest > dash_rest) { m_curr_rest -= dash_rest; ++m_curr_dash; if(m_curr_dash >= m_num_dashes) m_curr_dash = 0; m_curr_dash_start = 0.0; *x = m_v2->x - (m_v2->x - m_v1->x) * m_curr_rest / m_v1->dist; *y = m_v2->y - (m_v2->y - m_v1->y) * m_curr_rest / m_v1->dist; } else { m_curr_dash_start += m_curr_rest; *x = m_v2->x; *y = m_v2->y; ++m_src_vertex; m_v1 = m_v2; m_curr_rest = m_v1->dist; if(m_closed) { if(m_src_vertex > m_src_vertices.size()) { m_status = stop; } else { m_v2 = &m_src_vertices [ (m_src_vertex >= m_src_vertices.size()) ? 0 : m_src_vertex ]; } } else { if(m_src_vertex >= m_src_vertices.size()) { m_status = stop; } else { m_v2 = &m_src_vertices[m_src_vertex]; } } } return cmd2; } break; case stop: cmd = path_cmd_stop; break; } } return path_cmd_stop; } } mapnik-3.0.9/deps/agg/src/agg_vcgen_markers_term.cpp000066400000000000000000000057111262555547000225000ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Terminal markers generator (arrowhead/arrowtail) // //---------------------------------------------------------------------------- #include "agg_vcgen_markers_term.h" namespace agg { //------------------------------------------------------------------------ void vcgen_markers_term::remove_all() { m_markers.remove_all(); } //------------------------------------------------------------------------ void vcgen_markers_term::add_vertex(double x, double y, unsigned cmd) { if(is_move_to(cmd)) { if(m_markers.size() & 1) { // Initial state, the first coordinate was added. // If two of more calls of start_vertex() occures // we just modify the last one. m_markers.modify_last(coord_type(x, y)); } else { m_markers.add(coord_type(x, y)); } } else { if(is_vertex(cmd)) { if(m_markers.size() & 1) { // Initial state, the first coordinate was added. // Add three more points, 0,1,1,0 m_markers.add(coord_type(x, y)); m_markers.add(m_markers[m_markers.size() - 1]); m_markers.add(m_markers[m_markers.size() - 3]); } else { if(m_markers.size()) { // Replace two last points: 0,1,1,0 -> 0,1,2,1 m_markers[m_markers.size() - 1] = m_markers[m_markers.size() - 2]; m_markers[m_markers.size() - 2] = coord_type(x, y); } } } } } //------------------------------------------------------------------------ void vcgen_markers_term::rewind(unsigned path_id) { m_curr_id = path_id * 2; m_curr_idx = m_curr_id; } //------------------------------------------------------------------------ unsigned vcgen_markers_term::vertex(double* x, double* y) { if(m_curr_id > 2 || m_curr_idx >= m_markers.size()) { return path_cmd_stop; } const coord_type& c = m_markers[m_curr_idx]; *x = c.x; *y = c.y; if(m_curr_idx & 1) { m_curr_idx += 3; return path_cmd_line_to; } ++m_curr_idx; return path_cmd_move_to; } } mapnik-3.0.9/deps/agg/src/agg_vcgen_smooth_poly1.cpp000066400000000000000000000142461262555547000224450ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Smooth polygon generator // //---------------------------------------------------------------------------- #include "agg_vcgen_smooth_poly1.h" namespace agg { //------------------------------------------------------------------------ vcgen_smooth_poly1::vcgen_smooth_poly1() : m_src_vertices(), m_smooth_value(0.5), m_closed(0), m_status(initial), m_src_vertex(0) { } //------------------------------------------------------------------------ void vcgen_smooth_poly1::remove_all() { m_src_vertices.remove_all(); m_closed = 0; m_status = initial; } //------------------------------------------------------------------------ void vcgen_smooth_poly1::add_vertex(double x, double y, unsigned cmd) { m_status = initial; if(is_move_to(cmd)) { m_src_vertices.modify_last(vertex_dist(x, y)); } else { if(is_vertex(cmd)) { m_src_vertices.add(vertex_dist(x, y)); } else { m_closed = get_close_flag(cmd); } } } //------------------------------------------------------------------------ void vcgen_smooth_poly1::rewind(unsigned) { if(m_status == initial) { m_src_vertices.close(m_closed != 0); } m_status = ready; m_src_vertex = 0; } //------------------------------------------------------------------------ void vcgen_smooth_poly1::calculate(const vertex_dist& v0, const vertex_dist& v1, const vertex_dist& v2, const vertex_dist& v3) { double k1 = v0.dist / (v0.dist + v1.dist); double k2 = v1.dist / (v1.dist + v2.dist); double xm1 = v0.x + (v2.x - v0.x) * k1; double ym1 = v0.y + (v2.y - v0.y) * k1; double xm2 = v1.x + (v3.x - v1.x) * k2; double ym2 = v1.y + (v3.y - v1.y) * k2; m_ctrl1_x = v1.x + m_smooth_value * (v2.x - xm1); m_ctrl1_y = v1.y + m_smooth_value * (v2.y - ym1); m_ctrl2_x = v2.x + m_smooth_value * (v1.x - xm2); m_ctrl2_y = v2.y + m_smooth_value * (v1.y - ym2); } //------------------------------------------------------------------------ unsigned vcgen_smooth_poly1::vertex(double* x, double* y) { unsigned cmd = path_cmd_line_to; while(!is_stop(cmd)) { switch(m_status) { case initial: rewind(0); case ready: if(m_src_vertices.size() < 2) { cmd = path_cmd_stop; break; } if(m_src_vertices.size() == 2) { *x = m_src_vertices[m_src_vertex].x; *y = m_src_vertices[m_src_vertex].y; m_src_vertex++; if(m_src_vertex == 1) return path_cmd_move_to; if(m_src_vertex == 2) return path_cmd_line_to; cmd = path_cmd_stop; break; } cmd = path_cmd_move_to; m_status = polygon; m_src_vertex = 0; case polygon: if(m_closed) { if(m_src_vertex >= m_src_vertices.size()) { *x = m_src_vertices[0].x; *y = m_src_vertices[0].y; m_status = end_poly; return path_cmd_curve4; } } else { if(m_src_vertex >= m_src_vertices.size() - 1) { *x = m_src_vertices[m_src_vertices.size() - 1].x; *y = m_src_vertices[m_src_vertices.size() - 1].y; m_status = end_poly; return path_cmd_curve3; } } calculate(m_src_vertices.prev(m_src_vertex), m_src_vertices.curr(m_src_vertex), m_src_vertices.next(m_src_vertex), m_src_vertices.next(m_src_vertex + 1)); *x = m_src_vertices[m_src_vertex].x; *y = m_src_vertices[m_src_vertex].y; m_src_vertex++; if(m_closed) { m_status = ctrl1; return ((m_src_vertex == 1) ? path_cmd_move_to : path_cmd_curve4); } else { if(m_src_vertex == 1) { m_status = ctrl_b; return path_cmd_move_to; } if(m_src_vertex >= m_src_vertices.size() - 1) { m_status = ctrl_e; return path_cmd_curve3; } m_status = ctrl1; return path_cmd_curve4; } break; case ctrl_b: *x = m_ctrl2_x; *y = m_ctrl2_y; m_status = polygon; return path_cmd_curve3; case ctrl_e: *x = m_ctrl1_x; *y = m_ctrl1_y; m_status = polygon; return path_cmd_curve3; case ctrl1: *x = m_ctrl1_x; *y = m_ctrl1_y; m_status = ctrl2; return path_cmd_curve4; case ctrl2: *x = m_ctrl2_x; *y = m_ctrl2_y; m_status = polygon; return path_cmd_curve4; case end_poly: m_status = stop; return path_cmd_end_poly | m_closed; case stop: return path_cmd_stop; } } return cmd; } } mapnik-3.0.9/deps/agg/src/agg_vcgen_stroke.cpp000066400000000000000000000142031262555547000213100ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- // // Stroke generator // //---------------------------------------------------------------------------- #include #include "agg_vcgen_stroke.h" #include "agg_shorten_path.h" namespace agg { //------------------------------------------------------------------------ vcgen_stroke::vcgen_stroke() : m_stroker(), m_src_vertices(), m_out_vertices(), m_shorten(0.0), m_closed(0), m_status(initial), m_src_vertex(0), m_out_vertex(0) { } //------------------------------------------------------------------------ void vcgen_stroke::remove_all() { m_src_vertices.remove_all(); m_closed = 0; m_status = initial; } //------------------------------------------------------------------------ void vcgen_stroke::add_vertex(double x, double y, unsigned cmd) { m_status = initial; if(is_move_to(cmd)) { m_src_vertices.modify_last(vertex_dist(x, y)); } else { if(is_vertex(cmd)) { m_src_vertices.add(vertex_dist(x, y)); } else { m_closed = get_close_flag(cmd); } } } //------------------------------------------------------------------------ void vcgen_stroke::rewind(unsigned) { if(m_status == initial) { m_src_vertices.close(m_closed != 0); shorten_path(m_src_vertices, m_shorten, m_closed); if(m_src_vertices.size() < 3) m_closed = 0; } m_status = ready; m_src_vertex = 0; m_out_vertex = 0; } //------------------------------------------------------------------------ unsigned vcgen_stroke::vertex(double* x, double* y) { unsigned cmd = path_cmd_line_to; while(!is_stop(cmd)) { switch(m_status) { case initial: rewind(0); case ready: if(m_src_vertices.size() < 2 + unsigned(m_closed != 0)) { cmd = path_cmd_stop; break; } m_status = m_closed ? outline1 : cap1; cmd = path_cmd_move_to; m_src_vertex = 0; m_out_vertex = 0; break; case cap1: m_stroker.calc_cap(m_out_vertices, m_src_vertices[0], m_src_vertices[1], m_src_vertices[0].dist); m_src_vertex = 1; m_prev_status = outline1; m_status = out_vertices; m_out_vertex = 0; break; case cap2: m_stroker.calc_cap(m_out_vertices, m_src_vertices[m_src_vertices.size() - 1], m_src_vertices[m_src_vertices.size() - 2], m_src_vertices[m_src_vertices.size() - 2].dist); m_prev_status = outline2; m_status = out_vertices; m_out_vertex = 0; break; case outline1: if(m_closed) { if(m_src_vertex >= m_src_vertices.size()) { m_prev_status = close_first; m_status = end_poly1; break; } } else { if(m_src_vertex >= m_src_vertices.size() - 1) { m_status = cap2; break; } } m_stroker.calc_join(m_out_vertices, m_src_vertices.prev(m_src_vertex), m_src_vertices.curr(m_src_vertex), m_src_vertices.next(m_src_vertex), m_src_vertices.prev(m_src_vertex).dist, m_src_vertices.curr(m_src_vertex).dist); ++m_src_vertex; m_prev_status = m_status; m_status = out_vertices; m_out_vertex = 0; break; case close_first: m_status = outline2; cmd = path_cmd_move_to; case outline2: if(m_src_vertex <= unsigned(m_closed == 0)) { m_status = end_poly2; m_prev_status = stop; break; } --m_src_vertex; m_stroker.calc_join(m_out_vertices, m_src_vertices.next(m_src_vertex), m_src_vertices.curr(m_src_vertex), m_src_vertices.prev(m_src_vertex), m_src_vertices.curr(m_src_vertex).dist, m_src_vertices.prev(m_src_vertex).dist); m_prev_status = m_status; m_status = out_vertices; m_out_vertex = 0; break; case out_vertices: if(m_out_vertex >= m_out_vertices.size()) { m_status = m_prev_status; } else { const point_d& c = m_out_vertices[m_out_vertex++]; *x = c.x; *y = c.y; return cmd; } break; case end_poly1: m_status = m_prev_status; return path_cmd_end_poly | path_flags_close | path_flags_ccw; case end_poly2: m_status = m_prev_status; return path_cmd_end_poly | path_flags_close | path_flags_cw; case stop: cmd = path_cmd_stop; break; } } return cmd; } } mapnik-3.0.9/deps/agg/src/agg_vpgen_clip_polygon.cpp000066400000000000000000000064221262555547000225200ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include "agg_vpgen_clip_polygon.h" #include "agg_clip_liang_barsky.h" namespace agg { //------------------------------------------------------------------------ // Determine the clipping code of the vertex according to the // Cyrus-Beck line clipping algorithm // // | | // 0110 | 0010 | 0011 // | | // -------+--------+-------- clip_box.y2 // | | // 0100 | 0000 | 0001 // | | // -------+--------+-------- clip_box.y1 // | | // 1100 | 1000 | 1001 // | | // clip_box.x1 clip_box.x2 // // unsigned vpgen_clip_polygon::clipping_flags(double x, double y) { if(x < m_clip_box.x1) { if(y > m_clip_box.y2) return 6; if(y < m_clip_box.y1) return 12; return 4; } if(x > m_clip_box.x2) { if(y > m_clip_box.y2) return 3; if(y < m_clip_box.y1) return 9; return 1; } if(y > m_clip_box.y2) return 2; if(y < m_clip_box.y1) return 8; return 0; } //---------------------------------------------------------------------------- void vpgen_clip_polygon::reset() { m_vertex = 0; m_num_vertices = 0; } //---------------------------------------------------------------------------- void vpgen_clip_polygon::move_to(double x, double y) { m_vertex = 0; m_num_vertices = 0; m_clip_flags = clipping_flags(x, y); if(m_clip_flags == 0) { m_x[0] = x; m_y[0] = y; m_num_vertices = 1; } m_x1 = x; m_y1 = y; m_cmd = path_cmd_move_to; } //---------------------------------------------------------------------------- void vpgen_clip_polygon::line_to(double x, double y) { m_vertex = 0; m_num_vertices = 0; unsigned flags = clipping_flags(x, y); if(m_clip_flags == flags) { if(flags == 0) { m_x[0] = x; m_y[0] = y; m_num_vertices = 1; } } else { m_num_vertices = clip_liang_barsky(m_x1, m_y1, x, y, m_clip_box, m_x, m_y); } m_clip_flags = flags; m_x1 = x; m_y1 = y; } //---------------------------------------------------------------------------- unsigned vpgen_clip_polygon::vertex(double* x, double* y) { if(m_vertex < m_num_vertices) { *x = m_x[m_vertex]; *y = m_y[m_vertex]; ++m_vertex; unsigned cmd = m_cmd; m_cmd = path_cmd_line_to; return cmd; } return path_cmd_stop; } } mapnik-3.0.9/deps/agg/src/agg_vpgen_clip_polyline.cpp000066400000000000000000000043011262555547000226560ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include "agg_vpgen_clip_polyline.h" #include "agg_clip_liang_barsky.h" namespace agg { //---------------------------------------------------------------------------- void vpgen_clip_polyline::reset() { m_vertex = 0; m_num_vertices = 0; m_move_to = false; } //---------------------------------------------------------------------------- void vpgen_clip_polyline::move_to(double x, double y) { m_vertex = 0; m_num_vertices = 0; m_x1 = x; m_y1 = y; m_move_to = true; } //---------------------------------------------------------------------------- void vpgen_clip_polyline::line_to(double x, double y) { double x2 = x; double y2 = y; unsigned flags = clip_line_segment(&m_x1, &m_y1, &x2, &y2, m_clip_box); m_vertex = 0; m_num_vertices = 0; if((flags & 4) == 0) { if((flags & 1) != 0 || m_move_to) { m_x[0] = m_x1; m_y[0] = m_y1; m_cmd[0] = path_cmd_move_to; m_num_vertices = 1; } m_x[m_num_vertices] = x2; m_y[m_num_vertices] = y2; m_cmd[m_num_vertices++] = path_cmd_line_to; m_move_to = (flags & 2) != 0; } m_x1 = x; m_y1 = y; } //---------------------------------------------------------------------------- unsigned vpgen_clip_polyline::vertex(double* x, double* y) { if(m_vertex < m_num_vertices) { *x = m_x[m_vertex]; *y = m_y[m_vertex]; return m_cmd[m_vertex++]; } return path_cmd_stop; } } mapnik-3.0.9/deps/agg/src/agg_vpgen_segmentator.cpp000066400000000000000000000033731262555547000223540ustar00rootroot00000000000000//---------------------------------------------------------------------------- // Anti-Grain Geometry - Version 2.4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // //---------------------------------------------------------------------------- // Contact: mcseem@antigrain.com // mcseemagg@yahoo.com // http://www.antigrain.com //---------------------------------------------------------------------------- #include #include "agg_vpgen_segmentator.h" namespace agg { void vpgen_segmentator::move_to(double x, double y) { m_x1 = x; m_y1 = y; m_dx = 0.0; m_dy = 0.0; m_dl = 2.0; m_ddl = 2.0; m_cmd = path_cmd_move_to; } void vpgen_segmentator::line_to(double x, double y) { m_x1 += m_dx; m_y1 += m_dy; m_dx = x - m_x1; m_dy = y - m_y1; double len = sqrt(m_dx * m_dx + m_dy * m_dy) * m_approximation_scale; if(len < 1e-30) len = 1e-30; m_ddl = 1.0 / len; m_dl = (m_cmd == path_cmd_move_to) ? 0.0 : m_ddl; if(m_cmd == path_cmd_stop) m_cmd = path_cmd_line_to; } unsigned vpgen_segmentator::vertex(double* x, double* y) { if(m_cmd == path_cmd_stop) return path_cmd_stop; unsigned cmd = m_cmd; m_cmd = path_cmd_line_to; if(m_dl >= 1.0 - m_ddl) { m_dl = 1.0; m_cmd = path_cmd_stop; *x = m_x1 + m_dx; *y = m_y1 + m_dy; return cmd; } *x = m_x1 + m_dx * m_dl; *y = m_y1 + m_dy * m_dl; m_dl += m_ddl; return cmd; } } mapnik-3.0.9/deps/boost/000077500000000000000000000000001262555547000150765ustar00rootroot00000000000000mapnik-3.0.9/deps/boost/gil/000077500000000000000000000000001262555547000156515ustar00rootroot00000000000000mapnik-3.0.9/deps/boost/gil/extension/000077500000000000000000000000001262555547000176655ustar00rootroot00000000000000mapnik-3.0.9/deps/boost/gil/extension/toolbox/000077500000000000000000000000001262555547000213535ustar00rootroot00000000000000mapnik-3.0.9/deps/boost/gil/extension/toolbox/hsl.hpp000066400000000000000000000156321262555547000226610ustar00rootroot00000000000000// Copyright 2007 Christian Henning. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) /*************************************************************************************************/ #ifndef GIL_HSL_H #define GIL_HSL_H //////////////////////////////////////////////////////////////////////////////////////// /// \file /// \brief Support for HSL color space /// \author Christian Henning \n //////////////////////////////////////////////////////////////////////////////////////// #pragma GCC diagnostic push #include #include #pragma GCC diagnostic pop namespace boost { namespace gil { /// \addtogroup ColorNameModel /// \{ namespace hsl_color_space { /// \brief Hue struct hue_t {}; /// \brief Saturation struct saturation_t {}; /// \brief Lightness struct lightness_t {}; } /// \} /// \ingroup ColorSpaceModel typedef mpl::vector3< hsl_color_space::hue_t , hsl_color_space::saturation_t , hsl_color_space::lightness_t > hsl_t; /// \ingroup LayoutModel typedef layout hsl_layout_t; GIL_DEFINE_ALL_TYPEDEFS( 32f, hsl ); /// \ingroup ColorConvert /// \brief RGB to HSL template <> struct default_color_converter_impl< rgb_t, hsl_t > { template void operator()( const P1& src, P2& dst ) const { using namespace hsl_color_space; // only bits32f for hsl is supported bits32f temp_red = channel_convert( get_color( src, red_t() )); bits32f temp_green = channel_convert( get_color( src, green_t() )); bits32f temp_blue = channel_convert( get_color( src, blue_t() )); bits32f hue, saturation, lightness; bits32f min_color, max_color; if( temp_red < temp_green ) { min_color = std::min( temp_blue, temp_red ); max_color = std::max( temp_blue, temp_green ); } else { min_color = std::min( temp_blue, temp_green ); max_color = std::max( temp_blue, temp_red ); } if ( max_color - min_color < 0.001 ) { // rgb color is gray hue = 0.f; saturation = 0.f; // doesn't matter which rgb channel we use. lightness = temp_red; } else { bits32f diff = max_color - min_color; // lightness calculation lightness = ( min_color + max_color ) / 2.f; // saturation calculation if( lightness < 0.5f ) { saturation = diff / ( min_color + max_color ); } else { saturation = ( max_color - min_color ) / ( 2.f - diff ); } // hue calculation if( std::abs( max_color - temp_red ) < 0.0001f ) { // max_color is red hue = ( temp_green - temp_blue ) / diff; } else if( std::abs( max_color - temp_green) < 0.0001f ) { // max_color is green // 2.0 + (b - r) / (maxColor - minColor) hue = 2.f + ( temp_blue - temp_red ) / diff; } else { // max_color is blue // 4.0 + (r - g) / (maxColor - minColor) hue = 4.f + ( temp_red - temp_green ) / diff; } hue /= 6.f; if( hue < 0.f ) { hue += 1.f; } } get_color( dst,hue_t() ) = hue; get_color( dst,saturation_t() ) = saturation; get_color( dst,lightness_t() ) = lightness; } }; /// \ingroup ColorConvert /// \brief HSL to RGB template <> struct default_color_converter_impl { template void operator()( const P1& src, P2& dst) const { using namespace hsl_color_space; bits32f red, green, blue; if( std::abs( get_color( src, saturation_t() )) < 0.0001 ) { // If saturation is 0, the color is a shade of gray red = get_color( src, lightness_t() ); green = get_color( src, lightness_t() ); blue = get_color( src, lightness_t() ); } else { float temp1, temp2; float tempr, tempg, tempb; //Set the temporary values if( get_color( src, lightness_t() ) < 0.5 ) { temp2 = get_color( src, lightness_t() ) * ( 1.f + get_color( src, saturation_t() ) ); } else { temp2 = ( get_color( src, lightness_t() ) + get_color( src, saturation_t() )) - ( get_color( src, lightness_t() ) * get_color( src, saturation_t() )); } temp1 = 2.f * get_color( src, lightness_t() ) - temp2; tempr = get_color( src, hue_t() ) + 1.f / 3.f; if( tempr > 1.f ) { tempr--; } tempg = get_color( src, hue_t() ); tempb = get_color( src, hue_t() ) - 1.f / 3.f; if( tempb < 0.f ) { tempb++; } //Red if( tempr < 1.f / 6.f ) { red = temp1 + ( temp2 - temp1 ) * 6.f * tempr; } else if( tempr < 0.5f ) { red = temp2; } else if( tempr < 2.f / 3.f ) { red = temp1 + (temp2 - temp1) * (( 2.f / 3.f ) - tempr) * 6.f; } else { red = temp1; } //Green if( tempg < 1.f / 6.f ) { green = temp1 + ( temp2 - temp1 ) * 6.f * tempg; } else if( tempg < 0.5f ) { green = temp2; } else if( tempg < 2.f / 3.f ) { green = temp1 + ( temp2 - temp1 ) * (( 2.f / 3.f ) - tempg) * 6.f; } else { green = temp1; } //Blue if( tempb < 1.f / 6.f ) { blue = temp1 + (temp2 - temp1) * 6.f * tempb; } else if( tempb < 0.5f ) { blue = temp2; } else if( tempb < 2.f / 3.f ) { blue = temp1 + (temp2 - temp1) * (( 2.f / 3.f ) - tempb) * 6.f; } else { blue = temp1; } } get_color(dst,red_t()) = channel_convert::type>( red ); get_color(dst,green_t())= channel_convert::type>( green ); get_color(dst,blue_t()) = channel_convert::type>( blue ); } }; } } // namespace boost::gil #endif // GIL_HSL_H mapnik-3.0.9/deps/boost/gil/extension/toolbox/hsv.hpp000066400000000000000000000143271262555547000226730ustar00rootroot00000000000000// Copyright 2004 Christian Henning. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) /*************************************************************************************************/ #ifndef GIL_HSV_H #define GIL_HSV_H //////////////////////////////////////////////////////////////////////////////////////// /// \file /// \brief Support for HSV color space /// \author Christian Henning \n //////////////////////////////////////////////////////////////////////////////////////// #pragma GCC diagnostic push #include #include #pragma GCC diagnostic pop namespace boost { namespace gil { /// \addtogroup ColorNameModel /// \{ namespace hsv_color_space { /// \brief Hue struct hue_t {}; /// \brief Saturation struct saturation_t{}; /// \brief Value struct value_t {}; } /// \} /// \ingroup ColorSpaceModel typedef mpl::vector3< hsv_color_space::hue_t , hsv_color_space::saturation_t , hsv_color_space::value_t > hsv_t; /// \ingroup LayoutModel typedef layout hsv_layout_t; GIL_DEFINE_ALL_TYPEDEFS( 32f, hsv ) /// \ingroup ColorConvert /// \brief RGB to HSV template <> struct default_color_converter_impl< rgb_t, hsv_t > { template void operator()( const P1& src, P2& dst ) const { using namespace hsv_color_space; // only bits32f for hsv is supported bits32f temp_red = channel_convert( get_color( src, red_t() )); bits32f temp_green = channel_convert( get_color( src, green_t() )); bits32f temp_blue = channel_convert( get_color( src, blue_t() )); bits32f hue, saturation, value; bits32f min_color, max_color; if( temp_red < temp_green ) { min_color = std::min( temp_blue, temp_red ); max_color = std::max( temp_blue, temp_green ); } else { min_color = std::min( temp_blue, temp_green ); max_color = std::max( temp_blue, temp_red ); } value = max_color; bits32f diff = max_color - min_color; if( max_color < 0.0001f ) { saturation = 0.f; } else { saturation = diff / max_color; } if( saturation < 0.0001f ) { //it doesn't matter what value it has hue = 0.f; } else { if( temp_red == max_color ) { hue = ( temp_green - temp_blue ) / diff; } else if( temp_green == max_color ) { hue = 2.f + ( temp_blue - temp_red ) / diff; } else { hue = 4.f + ( temp_red - temp_green ) / diff; } //to bring it to a number between 0 and 1 hue /= 6.f; if( hue < 0.f ) { hue++; } } get_color( dst, hue_t() ) = hue; get_color( dst, saturation_t() ) = saturation; get_color( dst, value_t() ) = value; } }; /// \ingroup ColorConvert /// \brief HSV to RGB template <> struct default_color_converter_impl { template void operator()( const P1& src, P2& dst) const { using namespace hsv_color_space; bits32f red, green, blue; //If saturation is 0, the color is a shade of gray if( std::abs( get_color( src, saturation_t() )) < 0.0001f ) { // If saturation is 0, the color is a shade of gray red = get_color( src, value_t() ); green = get_color( src, value_t() ); blue = get_color( src, value_t() ); } else { bits32f frac, p, q, t, h; bits32 i; //to bring hue to a number between 0 and 6, better for the calculations h = get_color( src, hue_t() ); h *= 6.f; i = static_cast( floor( h )); frac = h - i; // p = value * (1 - saturation) p = get_color( src, value_t() ) * ( 1.f - get_color( src, saturation_t() )); // q = value * (1 - saturation * hue_frac) // it drops with increasing distance from floor(hue) q = get_color( src, value_t() ) * ( 1.f - ( get_color( src, saturation_t() ) * frac )); // t = value * (1 - (saturation * (1 - hue_frac)) // it grows with increasing distance from floor(hue) t = get_color( src, value_t() ) * ( 1.f - ( get_color( src, saturation_t() ) * ( 1.f - frac ))); switch( i % 6 ) { case 0: // red to yellow { red = get_color( src, value_t() ); green = t; blue = p; break; } case 1: // yellow to green { red = q; green = get_color( src, value_t() ); blue = p; break; } case 2: // green to cyan { red = p; green = get_color( src, value_t() ); blue = t; break; } case 3: // cyan to blue { red = p; green = q; blue = get_color( src, value_t() ); break; } case 4: // blue to magenta { red = t; green = p; blue = get_color( src, value_t() ); break; } case 5: // magenta to red { red = get_color( src, value_t() ); green = p; blue = q; break; } } } get_color(dst,red_t()) = channel_convert::type>( red ); get_color(dst,green_t())= channel_convert::type>( green ); get_color(dst,blue_t()) = channel_convert::type>( blue ); } }; } } // namespace boost::gil #endif // GIL_HSV_H mapnik-3.0.9/deps/mapnik/000077500000000000000000000000001262555547000152275ustar00rootroot00000000000000mapnik-3.0.9/deps/mapnik/build.py000066400000000000000000000007231262555547000167020ustar00rootroot00000000000000import os from glob import glob Import('env') subdirs = { 'sparsehash':'sparsehash', 'sparsehash/internal':'sparsehash/internal', '../agg/include':'agg', } if 'install' in COMMAND_LINE_TARGETS: for k,v in subdirs.items(): pathdir = os.path.join(k,'*') includes = glob(pathdir) inc_target = os.path.normpath(env['INSTALL_PREFIX']+'/include/mapnik/'+v) env.Alias(target='install', source=env.Install(inc_target, includes)) mapnik-3.0.9/deps/mapnik/sparsehash/000077500000000000000000000000001262555547000173705ustar00rootroot00000000000000mapnik-3.0.9/deps/mapnik/sparsehash/dense_hash_map000066400000000000000000000372301262555547000222560ustar00rootroot00000000000000// Copyright (c) 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ---- // // This is just a very thin wrapper over densehashtable.h, just // like sgi stl's stl_hash_map is a very thin wrapper over // stl_hashtable. The major thing we define is operator[], because // we have a concept of a data_type which stl_hashtable doesn't // (it only has a key and a value). // // NOTE: this is exactly like sparse_hash_map.h, with the word // "sparse" replaced by "dense", except for the addition of // set_empty_key(). // // YOU MUST CALL SET_EMPTY_KEY() IMMEDIATELY AFTER CONSTRUCTION. // // Otherwise your program will die in mysterious ways. (Note if you // use the constructor that takes an InputIterator range, you pass in // the empty key in the constructor, rather than after. As a result, // this constructor differs from the standard STL version.) // // In other respects, we adhere mostly to the STL semantics for // hash-map. One important exception is that insert() may invalidate // iterators entirely -- STL semantics are that insert() may reorder // iterators, but they all still refer to something valid in the // hashtable. Not so for us. Likewise, insert() may invalidate // pointers into the hashtable. (Whether insert invalidates iterators // and pointers depends on whether it results in a hashtable resize). // On the plus side, delete() doesn't invalidate iterators or pointers // at all, or even change the ordering of elements. // // Here are a few "power user" tips: // // 1) set_deleted_key(): // If you want to use erase() you *must* call set_deleted_key(), // in addition to set_empty_key(), after construction. // The deleted and empty keys must differ. // // 2) resize(0): // When an item is deleted, its memory isn't freed right // away. This allows you to iterate over a hashtable, // and call erase(), without invalidating the iterator. // To force the memory to be freed, call resize(0). // For tr1 compatibility, this can also be called as rehash(0). // // 3) min_load_factor(0.0) // Setting the minimum load factor to 0.0 guarantees that // the hash table will never shrink. // // Roughly speaking: // (1) dense_hash_map: fastest, uses the most memory unless entries are small // (2) sparse_hash_map: slowest, uses the least memory // (3) hash_map / unordered_map (STL): in the middle // // Typically I use sparse_hash_map when I care about space and/or when // I need to save the hashtable on disk. I use hash_map otherwise. I // don't personally use dense_hash_set ever; some people use it for // small sets with lots of lookups. // // - dense_hash_map has, typically, about 78% memory overhead (if your // data takes up X bytes, the hash_map uses .78X more bytes in overhead). // - sparse_hash_map has about 4 bits overhead per entry. // - sparse_hash_map can be 3-7 times slower than the others for lookup and, // especially, inserts. See time_hash_map.cc for details. // // See /usr/(local/)?doc/sparsehash-*/dense_hash_map.html // for information about how to use this class. #ifndef _DENSE_HASH_MAP_H_ #define _DENSE_HASH_MAP_H_ #include #include // needed by stl_alloc #include // for equal_to<>, select1st<>, etc #include // for alloc #include // for pair<> #include // IWYU pragma: export #include #include HASH_FUN_H // for hash<> _START_GOOGLE_NAMESPACE_ template , // defined in sparseconfig.h class EqualKey = std::equal_to, class Alloc = libc_allocator_with_realloc > > class dense_hash_map { private: // Apparently select1st is not stl-standard, so we define our own struct SelectKey { typedef const Key& result_type; const Key& operator()(const std::pair& p) const { return p.first; } }; struct SetKey { void operator()(std::pair* value, const Key& new_key) const { *const_cast(&value->first) = new_key; // It would be nice to clear the rest of value here as well, in // case it's taking up a lot of memory. We do this by clearing // the value. This assumes T has a zero-arg constructor! value->second = T(); } }; // For operator[]. struct DefaultValue { std::pair operator()(const Key& key) { return std::make_pair(key, T()); } }; // The actual data typedef dense_hashtable, Key, HashFcn, SelectKey, SetKey, EqualKey, Alloc> ht; ht rep; public: typedef typename ht::key_type key_type; typedef T data_type; typedef T mapped_type; typedef typename ht::value_type value_type; typedef typename ht::hasher hasher; typedef typename ht::key_equal key_equal; typedef Alloc allocator_type; typedef typename ht::size_type size_type; typedef typename ht::difference_type difference_type; typedef typename ht::pointer pointer; typedef typename ht::const_pointer const_pointer; typedef typename ht::reference reference; typedef typename ht::const_reference const_reference; typedef typename ht::iterator iterator; typedef typename ht::const_iterator const_iterator; typedef typename ht::local_iterator local_iterator; typedef typename ht::const_local_iterator const_local_iterator; // Iterator functions iterator begin() { return rep.begin(); } iterator end() { return rep.end(); } const_iterator begin() const { return rep.begin(); } const_iterator end() const { return rep.end(); } // These come from tr1's unordered_map. For us, a bucket has 0 or 1 elements. local_iterator begin(size_type i) { return rep.begin(i); } local_iterator end(size_type i) { return rep.end(i); } const_local_iterator begin(size_type i) const { return rep.begin(i); } const_local_iterator end(size_type i) const { return rep.end(i); } // Accessor functions allocator_type get_allocator() const { return rep.get_allocator(); } hasher hash_funct() const { return rep.hash_funct(); } hasher hash_function() const { return hash_funct(); } key_equal key_eq() const { return rep.key_eq(); } // Constructors explicit dense_hash_map(size_type expected_max_items_in_table = 0, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type()) : rep(expected_max_items_in_table, hf, eql, SelectKey(), SetKey(), alloc) { } template dense_hash_map(InputIterator f, InputIterator l, const key_type& empty_key_val, size_type expected_max_items_in_table = 0, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type()) : rep(expected_max_items_in_table, hf, eql, SelectKey(), SetKey(), alloc) { set_empty_key(empty_key_val); rep.insert(f, l); } // We use the default copy constructor // We use the default operator=() // We use the default destructor void clear() { rep.clear(); } // This clears the hash map without resizing it down to the minimum // bucket count, but rather keeps the number of buckets constant void clear_no_resize() { rep.clear_no_resize(); } void swap(dense_hash_map& hs) { rep.swap(hs.rep); } // Functions concerning size size_type size() const { return rep.size(); } size_type max_size() const { return rep.max_size(); } bool empty() const { return rep.empty(); } size_type bucket_count() const { return rep.bucket_count(); } size_type max_bucket_count() const { return rep.max_bucket_count(); } // These are tr1 methods. bucket() is the bucket the key is or would be in. size_type bucket_size(size_type i) const { return rep.bucket_size(i); } size_type bucket(const key_type& key) const { return rep.bucket(key); } float load_factor() const { return size() * 1.0f / bucket_count(); } float max_load_factor() const { float shrink, grow; rep.get_resizing_parameters(&shrink, &grow); return grow; } void max_load_factor(float new_grow) { float shrink, grow; rep.get_resizing_parameters(&shrink, &grow); rep.set_resizing_parameters(shrink, new_grow); } // These aren't tr1 methods but perhaps ought to be. float min_load_factor() const { float shrink, grow; rep.get_resizing_parameters(&shrink, &grow); return shrink; } void min_load_factor(float new_shrink) { float shrink, grow; rep.get_resizing_parameters(&shrink, &grow); rep.set_resizing_parameters(new_shrink, grow); } // Deprecated; use min_load_factor() or max_load_factor() instead. void set_resizing_parameters(float shrink, float grow) { rep.set_resizing_parameters(shrink, grow); } void resize(size_type hint) { rep.resize(hint); } void rehash(size_type hint) { resize(hint); } // the tr1 name // Lookup routines iterator find(const key_type& key) { return rep.find(key); } const_iterator find(const key_type& key) const { return rep.find(key); } data_type& operator[](const key_type& key) { // This is our value-add! // If key is in the hashtable, returns find(key)->second, // otherwise returns insert(value_type(key, T()).first->second. // Note it does not create an empty T unless the find fails. return rep.template find_or_insert(key).second; } size_type count(const key_type& key) const { return rep.count(key); } std::pair equal_range(const key_type& key) { return rep.equal_range(key); } std::pair equal_range(const key_type& key) const { return rep.equal_range(key); } // Insertion routines std::pair insert(const value_type& obj) { return rep.insert(obj); } template void insert(InputIterator f, InputIterator l) { rep.insert(f, l); } void insert(const_iterator f, const_iterator l) { rep.insert(f, l); } // Required for std::insert_iterator; the passed-in iterator is ignored. iterator insert(iterator, const value_type& obj) { return insert(obj).first; } // Deletion and empty routines // THESE ARE NON-STANDARD! I make you specify an "impossible" key // value to identify deleted and empty buckets. You can change the // deleted key as time goes on, or get rid of it entirely to be insert-only. void set_empty_key(const key_type& key) { // YOU MUST CALL THIS! rep.set_empty_key(value_type(key, data_type())); // rep wants a value } key_type empty_key() const { return rep.empty_key().first; // rep returns a value } void set_deleted_key(const key_type& key) { rep.set_deleted_key(key); } void clear_deleted_key() { rep.clear_deleted_key(); } key_type deleted_key() const { return rep.deleted_key(); } // These are standard size_type erase(const key_type& key) { return rep.erase(key); } void erase(iterator it) { rep.erase(it); } void erase(iterator f, iterator l) { rep.erase(f, l); } // Comparison bool operator==(const dense_hash_map& hs) const { return rep == hs.rep; } bool operator!=(const dense_hash_map& hs) const { return rep != hs.rep; } // I/O -- this is an add-on for writing hash map to disk // // For maximum flexibility, this does not assume a particular // file type (though it will probably be a FILE *). We just pass // the fp through to rep. // If your keys and values are simple enough, you can pass this // serializer to serialize()/unserialize(). "Simple enough" means // value_type is a POD type that contains no pointers. Note, // however, we don't try to normalize endianness. typedef typename ht::NopointerSerializer NopointerSerializer; // serializer: a class providing operator()(OUTPUT*, const value_type&) // (writing value_type to OUTPUT). You can specify a // NopointerSerializer object if appropriate (see above). // fp: either a FILE*, OR an ostream*/subclass_of_ostream*, OR a // pointer to a class providing size_t Write(const void*, size_t), // which writes a buffer into a stream (which fp presumably // owns) and returns the number of bytes successfully written. // Note basic_ostream is not currently supported. template bool serialize(ValueSerializer serializer, OUTPUT* fp) { return rep.serialize(serializer, fp); } // serializer: a functor providing operator()(INPUT*, value_type*) // (reading from INPUT and into value_type). You can specify a // NopointerSerializer object if appropriate (see above). // fp: either a FILE*, OR an istream*/subclass_of_istream*, OR a // pointer to a class providing size_t Read(void*, size_t), // which reads into a buffer from a stream (which fp presumably // owns) and returns the number of bytes successfully read. // Note basic_istream is not currently supported. // NOTE: Since value_type is std::pair, ValueSerializer // may need to do a const cast in order to fill in the key. template bool unserialize(ValueSerializer serializer, INPUT* fp) { return rep.unserialize(serializer, fp); } }; // We need a global swap as well template inline void swap(dense_hash_map& hm1, dense_hash_map& hm2) { hm1.swap(hm2); } _END_GOOGLE_NAMESPACE_ #endif /* _DENSE_HASH_MAP_H_ */ mapnik-3.0.9/deps/mapnik/sparsehash/internal/000077500000000000000000000000001262555547000212045ustar00rootroot00000000000000mapnik-3.0.9/deps/mapnik/sparsehash/internal/densehashtable.h000066400000000000000000001516531262555547000243420ustar00rootroot00000000000000// Copyright (c) 2005, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // --- // // A dense hashtable is a particular implementation of // a hashtable: one that is meant to minimize memory allocation. // It does this by using an array to store all the data. We // steal a value from the key space to indicate "empty" array // elements (ie indices where no item lives) and another to indicate // "deleted" elements. // // (Note it is possible to change the value of the delete key // on the fly; you can even remove it, though after that point // the hashtable is insert_only until you set it again. The empty // value however can't be changed.) // // To minimize allocation and pointer overhead, we use internal // probing, in which the hashtable is a single table, and collisions // are resolved by trying to insert again in another bucket. The // most cache-efficient internal probing schemes are linear probing // (which suffers, alas, from clumping) and quadratic probing, which // is what we implement by default. // // Type requirements: value_type is required to be Copy Constructible // and Default Constructible. It is not required to be (and commonly // isn't) Assignable. // // You probably shouldn't use this code directly. Use dense_hash_map<> // or dense_hash_set<> instead. // You can change the following below: // HT_OCCUPANCY_PCT -- how full before we double size // HT_EMPTY_PCT -- how empty before we halve size // HT_MIN_BUCKETS -- default smallest bucket size // // You can also change enlarge_factor (which defaults to // HT_OCCUPANCY_PCT), and shrink_factor (which defaults to // HT_EMPTY_PCT) with set_resizing_parameters(). // // How to decide what values to use? // shrink_factor's default of .4 * OCCUPANCY_PCT, is probably good. // HT_MIN_BUCKETS is probably unnecessary since you can specify // (indirectly) the starting number of buckets at construct-time. // For enlarge_factor, you can use this chart to try to trade-off // expected lookup time to the space taken up. By default, this // code uses quadratic probing, though you can change it to linear // via JUMP_ below if you really want to. // // From http://www.augustana.ca/~mohrj/courses/1999.fall/csc210/lecture_notes/hashing.html // NUMBER OF PROBES / LOOKUP Successful Unsuccessful // Quadratic collision resolution 1 - ln(1-L) - L/2 1/(1-L) - L - ln(1-L) // Linear collision resolution [1+1/(1-L)]/2 [1+1/(1-L)2]/2 // // -- enlarge_factor -- 0.10 0.50 0.60 0.75 0.80 0.90 0.99 // QUADRATIC COLLISION RES. // probes/successful lookup 1.05 1.44 1.62 2.01 2.21 2.85 5.11 // probes/unsuccessful lookup 1.11 2.19 2.82 4.64 5.81 11.4 103.6 // LINEAR COLLISION RES. // probes/successful lookup 1.06 1.5 1.75 2.5 3.0 5.5 50.5 // probes/unsuccessful lookup 1.12 2.5 3.6 8.5 13.0 50.0 5000.0 #ifndef _DENSEHASHTABLE_H_ #define _DENSEHASHTABLE_H_ #include #include #include // for FILE, fwrite, fread #include // For swap(), eg #include // For iterator tags #include // for numeric_limits #include // For uninitialized_fill #include // for pair #include #include #include #include // For length_error _START_GOOGLE_NAMESPACE_ namespace base { // just to make google->opensource transition easier using GOOGLE_NAMESPACE::true_type; using GOOGLE_NAMESPACE::false_type; using GOOGLE_NAMESPACE::integral_constant; using GOOGLE_NAMESPACE::is_same; using GOOGLE_NAMESPACE::remove_const; } // The probing method // Linear probing // #define JUMP_(key, num_probes) ( 1 ) // Quadratic probing #define JUMP_(key, num_probes) ( num_probes ) // Hashtable class, used to implement the hashed associative containers // hash_set and hash_map. // Value: what is stored in the table (each bucket is a Value). // Key: something in a 1-to-1 correspondence to a Value, that can be used // to search for a Value in the table (find() takes a Key). // HashFcn: Takes a Key and returns an integer, the more unique the better. // ExtractKey: given a Value, returns the unique Key associated with it. // Must inherit from unary_function, or at least have a // result_type enum indicating the return type of operator(). // SetKey: given a Value* and a Key, modifies the value such that // ExtractKey(value) == key. We guarantee this is only called // with key == deleted_key or key == empty_key. // EqualKey: Given two Keys, says whether they are the same (that is, // if they are both associated with the same Value). // Alloc: STL allocator to use to allocate memory. template class dense_hashtable; template struct dense_hashtable_iterator; template struct dense_hashtable_const_iterator; // We're just an array, but we need to skip over empty and deleted elements template struct dense_hashtable_iterator { private: typedef typename A::template rebind::other value_alloc_type; public: typedef dense_hashtable_iterator iterator; typedef dense_hashtable_const_iterator const_iterator; typedef std::forward_iterator_tag iterator_category; // very little defined! typedef V value_type; typedef typename value_alloc_type::difference_type difference_type; typedef typename value_alloc_type::size_type size_type; typedef typename value_alloc_type::reference reference; typedef typename value_alloc_type::pointer pointer; // "Real" constructor and default constructor dense_hashtable_iterator(const dense_hashtable *h, pointer it, pointer it_end, bool advance) : ht(h), pos(it), end(it_end) { if (advance) advance_past_empty_and_deleted(); } dense_hashtable_iterator() { } // The default destructor is fine; we don't define one // The default operator= is fine; we don't define one // Happy dereferencer reference operator*() const { return *pos; } pointer operator->() const { return &(operator*()); } // Arithmetic. The only hard part is making sure that // we're not on an empty or marked-deleted array element void advance_past_empty_and_deleted() { while ( pos != end && (ht->test_empty(*this) || ht->test_deleted(*this)) ) ++pos; } iterator& operator++() { assert(pos != end); ++pos; advance_past_empty_and_deleted(); return *this; } iterator operator++(int) { iterator tmp(*this); ++*this; return tmp; } // Comparison. bool operator==(const iterator& it) const { return pos == it.pos; } bool operator!=(const iterator& it) const { return pos != it.pos; } // The actual data const dense_hashtable *ht; pointer pos, end; }; // Now do it all again, but with const-ness! template struct dense_hashtable_const_iterator { private: typedef typename A::template rebind::other value_alloc_type; public: typedef dense_hashtable_iterator iterator; typedef dense_hashtable_const_iterator const_iterator; typedef std::forward_iterator_tag iterator_category; // very little defined! typedef V value_type; typedef typename value_alloc_type::difference_type difference_type; typedef typename value_alloc_type::size_type size_type; typedef typename value_alloc_type::const_reference reference; typedef typename value_alloc_type::const_pointer pointer; // "Real" constructor and default constructor dense_hashtable_const_iterator( const dense_hashtable *h, pointer it, pointer it_end, bool advance) : ht(h), pos(it), end(it_end) { if (advance) advance_past_empty_and_deleted(); } dense_hashtable_const_iterator() : ht(NULL), pos(pointer()), end(pointer()) { } // This lets us convert regular iterators to const iterators dense_hashtable_const_iterator(const iterator &it) : ht(it.ht), pos(it.pos), end(it.end) { } // The default destructor is fine; we don't define one // The default operator= is fine; we don't define one // Happy dereferencer reference operator*() const { return *pos; } pointer operator->() const { return &(operator*()); } // Arithmetic. The only hard part is making sure that // we're not on an empty or marked-deleted array element void advance_past_empty_and_deleted() { while ( pos != end && (ht->test_empty(*this) || ht->test_deleted(*this)) ) ++pos; } const_iterator& operator++() { assert(pos != end); ++pos; advance_past_empty_and_deleted(); return *this; } const_iterator operator++(int) { const_iterator tmp(*this); ++*this; return tmp; } // Comparison. bool operator==(const const_iterator& it) const { return pos == it.pos; } bool operator!=(const const_iterator& it) const { return pos != it.pos; } // The actual data const dense_hashtable *ht; pointer pos, end; }; template class dense_hashtable { private: typedef typename Alloc::template rebind::other value_alloc_type; public: typedef Key key_type; typedef Value value_type; typedef HashFcn hasher; typedef EqualKey key_equal; typedef Alloc allocator_type; typedef typename value_alloc_type::size_type size_type; typedef typename value_alloc_type::difference_type difference_type; typedef typename value_alloc_type::reference reference; typedef typename value_alloc_type::const_reference const_reference; typedef typename value_alloc_type::pointer pointer; typedef typename value_alloc_type::const_pointer const_pointer; typedef dense_hashtable_iterator iterator; typedef dense_hashtable_const_iterator const_iterator; // These come from tr1. For us they're the same as regular iterators. typedef iterator local_iterator; typedef const_iterator const_local_iterator; // How full we let the table get before we resize, by default. // Knuth says .8 is good -- higher causes us to probe too much, // though it saves memory. static const int HT_OCCUPANCY_PCT; // defined at the bottom of this file // How empty we let the table get before we resize lower, by default. // (0.0 means never resize lower.) // It should be less than OCCUPANCY_PCT / 2 or we thrash resizing static const int HT_EMPTY_PCT; // defined at the bottom of this file // Minimum size we're willing to let hashtables be. // Must be a power of two, and at least 4. // Note, however, that for a given hashtable, the initial size is a // function of the first constructor arg, and may be >HT_MIN_BUCKETS. static const size_type HT_MIN_BUCKETS = 4; // By default, if you don't specify a hashtable size at // construction-time, we use this size. Must be a power of two, and // at least HT_MIN_BUCKETS. static const size_type HT_DEFAULT_STARTING_BUCKETS = 32; // ITERATOR FUNCTIONS iterator begin() { return iterator(this, table, table + num_buckets, true); } iterator end() { return iterator(this, table + num_buckets, table + num_buckets, true); } const_iterator begin() const { return const_iterator(this, table, table+num_buckets,true);} const_iterator end() const { return const_iterator(this, table + num_buckets, table+num_buckets,true);} // These come from tr1 unordered_map. They iterate over 'bucket' n. // We'll just consider bucket n to be the n-th element of the table. local_iterator begin(size_type i) { return local_iterator(this, table + i, table + i+1, false); } local_iterator end(size_type i) { local_iterator it = begin(i); if (!test_empty(i) && !test_deleted(i)) ++it; return it; } const_local_iterator begin(size_type i) const { return const_local_iterator(this, table + i, table + i+1, false); } const_local_iterator end(size_type i) const { const_local_iterator it = begin(i); if (!test_empty(i) && !test_deleted(i)) ++it; return it; } // ACCESSOR FUNCTIONS for the things we templatize on, basically hasher hash_funct() const { return settings; } key_equal key_eq() const { return key_info; } allocator_type get_allocator() const { return allocator_type(val_info); } // Accessor function for statistics gathering. int num_table_copies() const { return settings.num_ht_copies(); } private: // Annoyingly, we can't copy values around, because they might have // const components (they're probably pair). We use // explicit destructor invocation and placement new to get around // this. Arg. void set_value(pointer dst, const_reference src) { dst->~value_type(); // delete the old value, if any new(dst) value_type(src); } void destroy_buckets(size_type first, size_type last) { for ( ; first != last; ++first) table[first].~value_type(); } // DELETE HELPER FUNCTIONS // This lets the user describe a key that will indicate deleted // table entries. This key should be an "impossible" entry -- // if you try to insert it for real, you won't be able to retrieve it! // (NB: while you pass in an entire value, only the key part is looked // at. This is just because I don't know how to assign just a key.) private: void squash_deleted() { // gets rid of any deleted entries we have if ( num_deleted ) { // get rid of deleted before writing dense_hashtable tmp(*this); // copying will get rid of deleted swap(tmp); // now we are tmp } assert(num_deleted == 0); } // Test if the given key is the deleted indicator. Requires // num_deleted > 0, for correctness of read(), and because that // guarantees that key_info.delkey is valid. bool test_deleted_key(const key_type& key) const { assert(num_deleted > 0); return equals(key_info.delkey, key); } public: void set_deleted_key(const key_type &key) { // the empty indicator (if specified) and the deleted indicator // must be different assert((!settings.use_empty() || !equals(key, get_key(val_info.emptyval))) && "Passed the empty-key to set_deleted_key"); // It's only safe to change what "deleted" means if we purge deleted guys squash_deleted(); settings.set_use_deleted(true); key_info.delkey = key; } void clear_deleted_key() { squash_deleted(); settings.set_use_deleted(false); } key_type deleted_key() const { assert(settings.use_deleted() && "Must set deleted key before calling deleted_key"); return key_info.delkey; } // These are public so the iterators can use them // True if the item at position bucknum is "deleted" marker bool test_deleted(size_type bucknum) const { // Invariant: !use_deleted() implies num_deleted is 0. assert(settings.use_deleted() || num_deleted == 0); return num_deleted > 0 && test_deleted_key(get_key(table[bucknum])); } bool test_deleted(const iterator &it) const { // Invariant: !use_deleted() implies num_deleted is 0. assert(settings.use_deleted() || num_deleted == 0); return num_deleted > 0 && test_deleted_key(get_key(*it)); } bool test_deleted(const const_iterator &it) const { // Invariant: !use_deleted() implies num_deleted is 0. assert(settings.use_deleted() || num_deleted == 0); return num_deleted > 0 && test_deleted_key(get_key(*it)); } private: void check_use_deleted(const char* caller) { (void)caller; // could log it if the assert failed assert(settings.use_deleted()); } // Set it so test_deleted is true. true if object didn't used to be deleted. bool set_deleted(iterator &it) { check_use_deleted("set_deleted()"); bool retval = !test_deleted(it); // &* converts from iterator to value-type. set_key(&(*it), key_info.delkey); return retval; } // Set it so test_deleted is false. true if object used to be deleted. bool clear_deleted(iterator &it) { check_use_deleted("clear_deleted()"); // Happens automatically when we assign something else in its place. return test_deleted(it); } // We also allow to set/clear the deleted bit on a const iterator. // We allow a const_iterator for the same reason you can delete a // const pointer: it's convenient, and semantically you can't use // 'it' after it's been deleted anyway, so its const-ness doesn't // really matter. bool set_deleted(const_iterator &it) { check_use_deleted("set_deleted()"); bool retval = !test_deleted(it); set_key(const_cast(&(*it)), key_info.delkey); return retval; } // Set it so test_deleted is false. true if object used to be deleted. bool clear_deleted(const_iterator &it) { check_use_deleted("clear_deleted()"); return test_deleted(it); } // EMPTY HELPER FUNCTIONS // This lets the user describe a key that will indicate empty (unused) // table entries. This key should be an "impossible" entry -- // if you try to insert it for real, you won't be able to retrieve it! // (NB: while you pass in an entire value, only the key part is looked // at. This is just because I don't know how to assign just a key.) public: // These are public so the iterators can use them // True if the item at position bucknum is "empty" marker bool test_empty(size_type bucknum) const { assert(settings.use_empty()); // we always need to know what's empty! return equals(get_key(val_info.emptyval), get_key(table[bucknum])); } bool test_empty(const iterator &it) const { assert(settings.use_empty()); // we always need to know what's empty! return equals(get_key(val_info.emptyval), get_key(*it)); } bool test_empty(const const_iterator &it) const { assert(settings.use_empty()); // we always need to know what's empty! return equals(get_key(val_info.emptyval), get_key(*it)); } private: void fill_range_with_empty(pointer table_start, pointer table_end) { std::uninitialized_fill(table_start, table_end, val_info.emptyval); } public: // TODO(csilvers): change all callers of this to pass in a key instead, // and take a const key_type instead of const value_type. void set_empty_key(const_reference val) { // Once you set the empty key, you can't change it assert(!settings.use_empty() && "Calling set_empty_key multiple times"); // The deleted indicator (if specified) and the empty indicator // must be different. assert((!settings.use_deleted() || !equals(get_key(val), key_info.delkey)) && "Setting the empty key the same as the deleted key"); settings.set_use_empty(true); set_value(&val_info.emptyval, val); assert(!table); // must set before first use // num_buckets was set in constructor even though table was NULL table = val_info.allocate(num_buckets); assert(table); fill_range_with_empty(table, table + num_buckets); } // TODO(user): return a key_type rather than a value_type value_type empty_key() const { assert(settings.use_empty()); return val_info.emptyval; } // FUNCTIONS CONCERNING SIZE public: size_type size() const { return num_elements - num_deleted; } size_type max_size() const { return val_info.max_size(); } bool empty() const { return size() == 0; } size_type bucket_count() const { return num_buckets; } size_type max_bucket_count() const { return max_size(); } size_type nonempty_bucket_count() const { return num_elements; } // These are tr1 methods. Their idea of 'bucket' doesn't map well to // what we do. We just say every bucket has 0 or 1 items in it. size_type bucket_size(size_type i) const { return begin(i) == end(i) ? 0 : 1; } private: // Because of the above, size_type(-1) is never legal; use it for errors static const size_type ILLEGAL_BUCKET = size_type(-1); // Used after a string of deletes. Returns true if we actually shrunk. // TODO(csilvers): take a delta so we can take into account inserts // done after shrinking. Maybe make part of the Settings class? bool maybe_shrink() { assert(num_elements >= num_deleted); assert((bucket_count() & (bucket_count()-1)) == 0); // is a power of two assert(bucket_count() >= HT_MIN_BUCKETS); bool retval = false; // If you construct a hashtable with < HT_DEFAULT_STARTING_BUCKETS, // we'll never shrink until you get relatively big, and we'll never // shrink below HT_DEFAULT_STARTING_BUCKETS. Otherwise, something // like "dense_hash_set x; x.insert(4); x.erase(4);" will // shrink us down to HT_MIN_BUCKETS buckets, which is too small. const size_type num_remain = num_elements - num_deleted; const size_type shrink_threshold = settings.shrink_threshold(); if (shrink_threshold > 0 && num_remain < shrink_threshold && bucket_count() > HT_DEFAULT_STARTING_BUCKETS) { const float shrink_factor = settings.shrink_factor(); size_type sz = bucket_count() / 2; // find how much we should shrink while (sz > HT_DEFAULT_STARTING_BUCKETS && num_remain < sz * shrink_factor) { sz /= 2; // stay a power of 2 } dense_hashtable tmp(*this, sz); // Do the actual resizing swap(tmp); // now we are tmp retval = true; } settings.set_consider_shrink(false); // because we just considered it return retval; } // We'll let you resize a hashtable -- though this makes us copy all! // When you resize, you say, "make it big enough for this many more elements" // Returns true if we actually resized, false if size was already ok. bool resize_delta(size_type delta) { bool did_resize = false; if ( settings.consider_shrink() ) { // see if lots of deletes happened if ( maybe_shrink() ) did_resize = true; } if (num_elements >= (std::numeric_limits::max)() - delta) { throw std::length_error("resize overflow"); } if ( bucket_count() >= HT_MIN_BUCKETS && (num_elements + delta) <= settings.enlarge_threshold() ) return did_resize; // we're ok as we are // Sometimes, we need to resize just to get rid of all the // "deleted" buckets that are clogging up the hashtable. So when // deciding whether to resize, count the deleted buckets (which // are currently taking up room). But later, when we decide what // size to resize to, *don't* count deleted buckets, since they // get discarded during the resize. const size_type needed_size = settings.min_buckets(num_elements + delta, 0); if ( needed_size <= bucket_count() ) // we have enough buckets return did_resize; size_type resize_to = settings.min_buckets(num_elements - num_deleted + delta, bucket_count()); if (resize_to < needed_size && // may double resize_to resize_to < (std::numeric_limits::max)() / 2) { // This situation means that we have enough deleted elements, // that once we purge them, we won't actually have needed to // grow. But we may want to grow anyway: if we just purge one // element, say, we'll have to grow anyway next time we // insert. Might as well grow now, since we're already going // through the trouble of copying (in order to purge the // deleted elements). const size_type target = static_cast(settings.shrink_size(resize_to*2)); if (num_elements - num_deleted + delta >= target) { // Good, we won't be below the shrink threshhold even if we double. resize_to *= 2; } } dense_hashtable tmp(*this, resize_to); swap(tmp); // now we are tmp return true; } // We require table be not-NULL and empty before calling this. void resize_table(size_type /*old_size*/, size_type new_size, base::true_type) { table = val_info.realloc_or_die(table, new_size); } void resize_table(size_type old_size, size_type new_size, base::false_type) { val_info.deallocate(table, old_size); table = val_info.allocate(new_size); } // Used to actually do the rehashing when we grow/shrink a hashtable void copy_from(const dense_hashtable &ht, size_type min_buckets_wanted) { clear_to_size(settings.min_buckets(ht.size(), min_buckets_wanted)); // We use a normal iterator to get non-deleted bcks from ht // We could use insert() here, but since we know there are // no duplicates and no deleted items, we can be more efficient assert((bucket_count() & (bucket_count()-1)) == 0); // a power of two for ( const_iterator it = ht.begin(); it != ht.end(); ++it ) { size_type num_probes = 0; // how many times we've probed size_type bucknum; const size_type bucket_count_minus_one = bucket_count() - 1; for (bucknum = hash(get_key(*it)) & bucket_count_minus_one; !test_empty(bucknum); // not empty bucknum = (bucknum + JUMP_(key, num_probes)) & bucket_count_minus_one) { ++num_probes; assert(num_probes < bucket_count() && "Hashtable is full: an error in key_equal<> or hash<>"); } set_value(&table[bucknum], *it); // copies the value to here num_elements++; } settings.inc_num_ht_copies(); } // Required by the spec for hashed associative container public: // Though the docs say this should be num_buckets, I think it's much // more useful as num_elements. As a special feature, calling with // req_elements==0 will cause us to shrink if we can, saving space. void resize(size_type req_elements) { // resize to this or larger if ( settings.consider_shrink() || req_elements == 0 ) maybe_shrink(); if ( req_elements > num_elements ) resize_delta(req_elements - num_elements); } // Get and change the value of shrink_factor and enlarge_factor. The // description at the beginning of this file explains how to choose // the values. Setting the shrink parameter to 0.0 ensures that the // table never shrinks. void get_resizing_parameters(float* shrink, float* grow) const { *shrink = settings.shrink_factor(); *grow = settings.enlarge_factor(); } void set_resizing_parameters(float shrink, float grow) { settings.set_resizing_parameters(shrink, grow); settings.reset_thresholds(bucket_count()); } // CONSTRUCTORS -- as required by the specs, we take a size, // but also let you specify a hashfunction, key comparator, // and key extractor. We also define a copy constructor and =. // DESTRUCTOR -- needs to free the table explicit dense_hashtable(size_type expected_max_items_in_table = 0, const HashFcn& hf = HashFcn(), const EqualKey& eql = EqualKey(), const ExtractKey& ext = ExtractKey(), const SetKey& set = SetKey(), const Alloc& alloc = Alloc()) : settings(hf), key_info(ext, set, eql), num_deleted(0), num_elements(0), num_buckets(expected_max_items_in_table == 0 ? HT_DEFAULT_STARTING_BUCKETS : settings.min_buckets(expected_max_items_in_table, 0)), val_info(alloc_impl(alloc)), table(NULL) { // table is NULL until emptyval is set. However, we set num_buckets // here so we know how much space to allocate once emptyval is set settings.reset_thresholds(bucket_count()); } // As a convenience for resize(), we allow an optional second argument // which lets you make this new hashtable a different size than ht dense_hashtable(const dense_hashtable& ht, size_type min_buckets_wanted = HT_DEFAULT_STARTING_BUCKETS) : settings(ht.settings), key_info(ht.key_info), num_deleted(0), num_elements(0), num_buckets(0), val_info(ht.val_info), table(NULL) { if (!ht.settings.use_empty()) { // If use_empty isn't set, copy_from will crash, so we do our own copying. assert(ht.empty()); num_buckets = settings.min_buckets(ht.size(), min_buckets_wanted); settings.reset_thresholds(bucket_count()); return; } settings.reset_thresholds(bucket_count()); copy_from(ht, min_buckets_wanted); // copy_from() ignores deleted entries } dense_hashtable& operator= (const dense_hashtable& ht) { if (&ht == this) return *this; // don't copy onto ourselves if (!ht.settings.use_empty()) { assert(ht.empty()); dense_hashtable empty_table(ht); // empty table with ht's thresholds this->swap(empty_table); return *this; } settings = ht.settings; key_info = ht.key_info; set_value(&val_info.emptyval, ht.val_info.emptyval); // copy_from() calls clear and sets num_deleted to 0 too copy_from(ht, HT_MIN_BUCKETS); // we purposefully don't copy the allocator, which may not be copyable return *this; } ~dense_hashtable() { if (table) { destroy_buckets(0, num_buckets); val_info.deallocate(table, num_buckets); } } // Many STL algorithms use swap instead of copy constructors void swap(dense_hashtable& ht) { std::swap(settings, ht.settings); std::swap(key_info, ht.key_info); std::swap(num_deleted, ht.num_deleted); std::swap(num_elements, ht.num_elements); std::swap(num_buckets, ht.num_buckets); { value_type tmp; // for annoying reasons, swap() doesn't work set_value(&tmp, val_info.emptyval); set_value(&val_info.emptyval, ht.val_info.emptyval); set_value(&ht.val_info.emptyval, tmp); } std::swap(table, ht.table); settings.reset_thresholds(bucket_count()); // also resets consider_shrink ht.settings.reset_thresholds(ht.bucket_count()); // we purposefully don't swap the allocator, which may not be swap-able } private: void clear_to_size(size_type new_num_buckets) { if (!table) { table = val_info.allocate(new_num_buckets); } else { destroy_buckets(0, num_buckets); if (new_num_buckets != num_buckets) { // resize, if necessary typedef base::integral_constant >::value> realloc_ok; resize_table(num_buckets, new_num_buckets, realloc_ok()); } } assert(table); fill_range_with_empty(table, table + new_num_buckets); num_elements = 0; num_deleted = 0; num_buckets = new_num_buckets; // our new size settings.reset_thresholds(bucket_count()); } public: // It's always nice to be able to clear a table without deallocating it void clear() { // If the table is already empty, and the number of buckets is // already as we desire, there's nothing to do. const size_type new_num_buckets = settings.min_buckets(0, 0); if (num_elements == 0 && new_num_buckets == num_buckets) { return; } clear_to_size(new_num_buckets); } // Clear the table without resizing it. // Mimicks the stl_hashtable's behaviour when clear()-ing in that it // does not modify the bucket count void clear_no_resize() { if (num_elements > 0) { assert(table); destroy_buckets(0, num_buckets); fill_range_with_empty(table, table + num_buckets); } // don't consider to shrink before another erase() settings.reset_thresholds(bucket_count()); num_elements = 0; num_deleted = 0; } // LOOKUP ROUTINES private: // Returns a pair of positions: 1st where the object is, 2nd where // it would go if you wanted to insert it. 1st is ILLEGAL_BUCKET // if object is not found; 2nd is ILLEGAL_BUCKET if it is. // Note: because of deletions where-to-insert is not trivial: it's the // first deleted bucket we see, as long as we don't find the key later std::pair find_position(const key_type &key) const { size_type num_probes = 0; // how many times we've probed const size_type bucket_count_minus_one = bucket_count() - 1; size_type bucknum = hash(key) & bucket_count_minus_one; size_type insert_pos = ILLEGAL_BUCKET; // where we would insert while ( 1 ) { // probe until something happens if ( test_empty(bucknum) ) { // bucket is empty if ( insert_pos == ILLEGAL_BUCKET ) // found no prior place to insert return std::pair(ILLEGAL_BUCKET, bucknum); else return std::pair(ILLEGAL_BUCKET, insert_pos); } else if ( test_deleted(bucknum) ) {// keep searching, but mark to insert if ( insert_pos == ILLEGAL_BUCKET ) insert_pos = bucknum; } else if ( equals(key, get_key(table[bucknum])) ) { return std::pair(bucknum, ILLEGAL_BUCKET); } ++num_probes; // we're doing another probe bucknum = (bucknum + JUMP_(key, num_probes)) & bucket_count_minus_one; assert(num_probes < bucket_count() && "Hashtable is full: an error in key_equal<> or hash<>"); } } public: iterator find(const key_type& key) { if ( size() == 0 ) return end(); std::pair pos = find_position(key); if ( pos.first == ILLEGAL_BUCKET ) // alas, not there return end(); else return iterator(this, table + pos.first, table + num_buckets, false); } const_iterator find(const key_type& key) const { if ( size() == 0 ) return end(); std::pair pos = find_position(key); if ( pos.first == ILLEGAL_BUCKET ) // alas, not there return end(); else return const_iterator(this, table + pos.first, table+num_buckets, false); } // This is a tr1 method: the bucket a given key is in, or what bucket // it would be put in, if it were to be inserted. Shrug. size_type bucket(const key_type& key) const { std::pair pos = find_position(key); return pos.first == ILLEGAL_BUCKET ? pos.second : pos.first; } // Counts how many elements have key key. For maps, it's either 0 or 1. size_type count(const key_type &key) const { std::pair pos = find_position(key); return pos.first == ILLEGAL_BUCKET ? 0 : 1; } // Likewise, equal_range doesn't really make sense for us. Oh well. std::pair equal_range(const key_type& key) { iterator pos = find(key); // either an iterator or end if (pos == end()) { return std::pair(pos, pos); } else { const iterator startpos = pos++; return std::pair(startpos, pos); } } std::pair equal_range(const key_type& key) const { const_iterator pos = find(key); // either an iterator or end if (pos == end()) { return std::pair(pos, pos); } else { const const_iterator startpos = pos++; return std::pair(startpos, pos); } } // INSERTION ROUTINES private: // Private method used by insert_noresize and find_or_insert. iterator insert_at(const_reference obj, size_type pos) { if (size() >= max_size()) { throw std::length_error("insert overflow"); } if ( test_deleted(pos) ) { // just replace if it's been del. // shrug: shouldn't need to be const. const_iterator delpos(this, table + pos, table + num_buckets, false); clear_deleted(delpos); assert( num_deleted > 0); --num_deleted; // used to be, now it isn't } else { ++num_elements; // replacing an empty bucket } set_value(&table[pos], obj); return iterator(this, table + pos, table + num_buckets, false); } // If you know *this is big enough to hold obj, use this routine std::pair insert_noresize(const_reference obj) { // First, double-check we're not inserting delkey or emptyval assert((!settings.use_empty() || !equals(get_key(obj), get_key(val_info.emptyval))) && "Inserting the empty key"); assert((!settings.use_deleted() || !equals(get_key(obj), key_info.delkey)) && "Inserting the deleted key"); const std::pair pos = find_position(get_key(obj)); if ( pos.first != ILLEGAL_BUCKET) { // object was already there return std::pair(iterator(this, table + pos.first, table + num_buckets, false), false); // false: we didn't insert } else { // pos.second says where to put it return std::pair(insert_at(obj, pos.second), true); } } // Specializations of insert(it, it) depending on the power of the iterator: // (1) Iterator supports operator-, resize before inserting template void insert(ForwardIterator f, ForwardIterator l, std::forward_iterator_tag) { size_t dist = std::distance(f, l); if (dist >= (std::numeric_limits::max)()) { throw std::length_error("insert-range overflow"); } resize_delta(static_cast(dist)); for ( ; dist > 0; --dist, ++f) { insert_noresize(*f); } } // (2) Arbitrary iterator, can't tell how much to resize template void insert(InputIterator f, InputIterator l, std::input_iterator_tag) { for ( ; f != l; ++f) insert(*f); } public: // This is the normal insert routine, used by the outside world std::pair insert(const_reference obj) { resize_delta(1); // adding an object, grow if need be return insert_noresize(obj); } // When inserting a lot at a time, we specialize on the type of iterator template void insert(InputIterator f, InputIterator l) { // specializes on iterator type insert(f, l, typename std::iterator_traits::iterator_category()); } // DefaultValue is a functor that takes a key and returns a value_type // representing the default value to be inserted if none is found. template value_type& find_or_insert(const key_type& key) { // First, double-check we're not inserting emptykey or delkey assert((!settings.use_empty() || !equals(key, get_key(val_info.emptyval))) && "Inserting the empty key"); assert((!settings.use_deleted() || !equals(key, key_info.delkey)) && "Inserting the deleted key"); const std::pair pos = find_position(key); DefaultValue default_value; if ( pos.first != ILLEGAL_BUCKET) { // object was already there return table[pos.first]; } else if (resize_delta(1)) { // needed to rehash to make room // Since we resized, we can't use pos, so recalculate where to insert. return *insert_noresize(default_value(key)).first; } else { // no need to rehash, insert right here return *insert_at(default_value(key), pos.second); } } // DELETION ROUTINES size_type erase(const key_type& key) { // First, double-check we're not trying to erase delkey or emptyval. assert((!settings.use_empty() || !equals(key, get_key(val_info.emptyval))) && "Erasing the empty key"); assert((!settings.use_deleted() || !equals(key, key_info.delkey)) && "Erasing the deleted key"); const_iterator pos = find(key); // shrug: shouldn't need to be const if ( pos != end() ) { assert(!test_deleted(pos)); // or find() shouldn't have returned it set_deleted(pos); ++num_deleted; settings.set_consider_shrink(true); // will think about shrink after next insert return 1; // because we deleted one thing } else { return 0; // because we deleted nothing } } // We return the iterator past the deleted item. void erase(iterator pos) { if ( pos == end() ) return; // sanity check if ( set_deleted(pos) ) { // true if object has been newly deleted ++num_deleted; settings.set_consider_shrink(true); // will think about shrink after next insert } } void erase(iterator f, iterator l) { for ( ; f != l; ++f) { if ( set_deleted(f) ) // should always be true ++num_deleted; } settings.set_consider_shrink(true); // will think about shrink after next insert } // We allow you to erase a const_iterator just like we allow you to // erase an iterator. This is in parallel to 'delete': you can delete // a const pointer just like a non-const pointer. The logic is that // you can't use the object after it's erased anyway, so it doesn't matter // if it's const or not. void erase(const_iterator pos) { if ( pos == end() ) return; // sanity check if ( set_deleted(pos) ) { // true if object has been newly deleted ++num_deleted; settings.set_consider_shrink(true); // will think about shrink after next insert } } void erase(const_iterator f, const_iterator l) { for ( ; f != l; ++f) { if ( set_deleted(f) ) // should always be true ++num_deleted; } settings.set_consider_shrink(true); // will think about shrink after next insert } // COMPARISON bool operator==(const dense_hashtable& ht) const { if (size() != ht.size()) { return false; } else if (this == &ht) { return true; } else { // Iterate through the elements in "this" and see if the // corresponding element is in ht for ( const_iterator it = begin(); it != end(); ++it ) { const_iterator it2 = ht.find(get_key(*it)); if ((it2 == ht.end()) || (*it != *it2)) { return false; } } return true; } } bool operator!=(const dense_hashtable& ht) const { return !(*this == ht); } // I/O // We support reading and writing hashtables to disk. Alas, since // I don't know how to write a hasher or key_equal, you have to make // sure everything but the table is the same. We compact before writing. private: // Every time the disk format changes, this should probably change too typedef unsigned long MagicNumberType; static const MagicNumberType MAGIC_NUMBER = 0x13578642; public: // I/O -- this is an add-on for writing hash table to disk // // INPUT and OUTPUT must be either a FILE, *or* a C++ stream // (istream, ostream, etc) *or* a class providing // Read(void*, size_t) and Write(const void*, size_t) // (respectively), which writes a buffer into a stream // (which the INPUT/OUTPUT instance presumably owns). typedef sparsehash_internal::pod_serializer NopointerSerializer; // ValueSerializer: a functor. operator()(OUTPUT*, const value_type&) template bool serialize(ValueSerializer serializer, OUTPUT *fp) { squash_deleted(); // so we don't have to worry about delkey if ( !sparsehash_internal::write_bigendian_number(fp, MAGIC_NUMBER, 4) ) return false; if ( !sparsehash_internal::write_bigendian_number(fp, num_buckets, 8) ) return false; if ( !sparsehash_internal::write_bigendian_number(fp, num_elements, 8) ) return false; // Now write a bitmap of non-empty buckets. for ( size_type i = 0; i < num_buckets; i += 8 ) { unsigned char bits = 0; for ( int bit = 0; bit < 8; ++bit ) { if ( i + bit < num_buckets && !test_empty(i + bit) ) bits |= (1 << bit); } if ( !sparsehash_internal::write_data(fp, &bits, sizeof(bits)) ) return false; for ( int bit = 0; bit < 8; ++bit ) { if ( bits & (1 << bit) ) { if ( !serializer(fp, table[i + bit]) ) return false; } } } return true; } // INPUT: anything we've written an overload of read_data() for. // ValueSerializer: a functor. operator()(INPUT*, value_type*) template bool unserialize(ValueSerializer serializer, INPUT *fp) { assert(settings.use_empty() && "empty_key not set for read"); clear(); // just to be consistent MagicNumberType magic_read; if ( !sparsehash_internal::read_bigendian_number(fp, &magic_read, 4) ) return false; if ( magic_read != MAGIC_NUMBER ) { return false; } size_type new_num_buckets; if ( !sparsehash_internal::read_bigendian_number(fp, &new_num_buckets, 8) ) return false; clear_to_size(new_num_buckets); if ( !sparsehash_internal::read_bigendian_number(fp, &num_elements, 8) ) return false; // Read the bitmap of non-empty buckets. for (size_type i = 0; i < num_buckets; i += 8) { unsigned char bits; if ( !sparsehash_internal::read_data(fp, &bits, sizeof(bits)) ) return false; for ( int bit = 0; bit < 8; ++bit ) { if ( i + bit < num_buckets && (bits & (1 << bit)) ) { // not empty if ( !serializer(fp, &table[i + bit]) ) return false; } } } return true; } private: template class alloc_impl : public A { public: typedef typename A::pointer pointer; typedef typename A::size_type size_type; // Convert a normal allocator to one that has realloc_or_die() alloc_impl(const A& a) : A(a) { } // realloc_or_die should only be used when using the default // allocator (libc_allocator_with_realloc). pointer realloc_or_die(pointer /*ptr*/, size_type /*n*/) { fprintf(stderr, "realloc_or_die is only supported for " "libc_allocator_with_realloc\n"); //exit(1); return NULL; } }; // A template specialization of alloc_impl for // libc_allocator_with_realloc that can handle realloc_or_die. template class alloc_impl > : public libc_allocator_with_realloc { public: typedef typename libc_allocator_with_realloc::pointer pointer; typedef typename libc_allocator_with_realloc::size_type size_type; alloc_impl(const libc_allocator_with_realloc& a) : libc_allocator_with_realloc(a) { } pointer realloc_or_die(pointer ptr, size_type n) { pointer retval = this->reallocate(ptr, n); if (retval == NULL) { fprintf(stderr, "sparsehash: FATAL ERROR: failed to reallocate " "%lu elements for ptr %p", static_cast(n), ptr); //exit(1); } return retval; } }; // Package allocator with emptyval to eliminate memory needed for // the zero-size allocator. // If new fields are added to this class, we should add them to // operator= and swap. class ValInfo : public alloc_impl { public: typedef typename alloc_impl::value_type value_type; ValInfo(const alloc_impl& a) : alloc_impl(a), emptyval() { } ValInfo(const ValInfo& v) : alloc_impl(v), emptyval(v.emptyval) { } value_type emptyval; // which key marks unused entries }; // Package functors with another class to eliminate memory needed for // zero-size functors. Since ExtractKey and hasher's operator() might // have the same function signature, they must be packaged in // different classes. struct Settings : sparsehash_internal::sh_hashtable_settings { explicit Settings(const hasher& hf) : sparsehash_internal::sh_hashtable_settings( hf, HT_OCCUPANCY_PCT / 100.0f, HT_EMPTY_PCT / 100.0f) {} }; // Packages ExtractKey and SetKey functors. class KeyInfo : public ExtractKey, public SetKey, public EqualKey { public: KeyInfo(const ExtractKey& ek, const SetKey& sk, const EqualKey& eq) : ExtractKey(ek), SetKey(sk), EqualKey(eq) { } // We want to return the exact same type as ExtractKey: Key or const Key& typename ExtractKey::result_type get_key(const_reference v) const { return ExtractKey::operator()(v); } void set_key(pointer v, const key_type& k) const { SetKey::operator()(v, k); } bool equals(const key_type& a, const key_type& b) const { return EqualKey::operator()(a, b); } // Which key marks deleted entries. // TODO(csilvers): make a pointer, and get rid of use_deleted (benchmark!) typename base::remove_const::type delkey; }; // Utility functions to access the templated operators size_type hash(const key_type& v) const { return settings.hash(v); } bool equals(const key_type& a, const key_type& b) const { return key_info.equals(a, b); } typename ExtractKey::result_type get_key(const_reference v) const { return key_info.get_key(v); } void set_key(pointer v, const key_type& k) const { key_info.set_key(v, k); } private: // Actual data Settings settings; KeyInfo key_info; size_type num_deleted; // how many occupied buckets are marked deleted size_type num_elements; size_type num_buckets; ValInfo val_info; // holds emptyval, and also the allocator pointer table; }; // We need a global swap as well template inline void swap(dense_hashtable &x, dense_hashtable &y) { x.swap(y); } #undef JUMP_ template const typename dense_hashtable::size_type dense_hashtable::ILLEGAL_BUCKET; // How full we let the table get before we resize. Knuth says .8 is // good -- higher causes us to probe too much, though saves memory. // However, we go with .5, getting better performance at the cost of // more space (a trade-off densehashtable explicitly chooses to make). // Feel free to play around with different values, though, via // max_load_factor() and/or set_resizing_parameters(). template const int dense_hashtable::HT_OCCUPANCY_PCT = 50; // How empty we let the table get before we resize lower. // It should be less than OCCUPANCY_PCT / 2 or we thrash resizing. template const int dense_hashtable::HT_EMPTY_PCT = static_cast(0.4 * dense_hashtable::HT_OCCUPANCY_PCT); _END_GOOGLE_NAMESPACE_ #endif /* _DENSEHASHTABLE_H_ */ mapnik-3.0.9/deps/mapnik/sparsehash/internal/hashtable-common.h000066400000000000000000000326261262555547000246070ustar00rootroot00000000000000// Copyright (c) 2010, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // --- // // Provides classes shared by both sparse and dense hashtable. // // sh_hashtable_settings has parameters for growing and shrinking // a hashtable. It also packages zero-size functor (ie. hasher). // // Other functions and classes provide common code for serializing // and deserializing hashtables to a stream (such as a FILE*). #ifndef UTIL_GTL_HASHTABLE_COMMON_H_ #define UTIL_GTL_HASHTABLE_COMMON_H_ #include #include #include #include // for size_t #include #include // For length_error _START_GOOGLE_NAMESPACE_ namespace sparsehash_internal { // Adaptor methods for reading/writing data from an INPUT or OUPTUT // variable passed to serialize() or unserialize(). For now we // have implemented INPUT/OUTPUT for FILE*, istream*/ostream* (note // they are pointers, unlike typical use), or else a pointer to // something that supports a Read()/Write() method. // // For technical reasons, we implement read_data/write_data in two // stages. The actual work is done in *_data_internal, which takes // the stream argument twice: once as a template type, and once with // normal type information. (We only use the second version.) We do // this because of how C++ picks what function overload to use. If we // implemented this the naive way: // bool read_data(istream* is, const void* data, size_t length); // template read_data(T* fp, const void* data, size_t length); // C++ would prefer the second version for every stream type except // istream. However, we want C++ to prefer the first version for // streams that are *subclasses* of istream, such as istringstream. // This is not possible given the way template types are resolved. So // we split the stream argument in two, one of which is templated and // one of which is not. The specialized functions (like the istream // version above) ignore the template arg and use the second, 'type' // arg, getting subclass matching as normal. The 'catch-all' // functions (the second version above) use the template arg to deduce // the type, and use a second, void* arg to achieve the desired // 'catch-all' semantics. // ----- low-level I/O for FILE* ---- template inline bool read_data_internal(Ignored*, FILE* fp, void* data, size_t length) { return fread(data, length, 1, fp) == 1; } template inline bool write_data_internal(Ignored*, FILE* fp, const void* data, size_t length) { return fwrite(data, length, 1, fp) == 1; } // ----- low-level I/O for iostream ---- // We want the caller to be responsible for #including , not // us, because iostream is a big header! According to the standard, // it's only legal to delay the instantiation the way we want to if // the istream/ostream is a template type. So we jump through hoops. template inline bool read_data_internal_for_istream(ISTREAM* fp, void* data, size_t length) { return fp->read(reinterpret_cast(data), length).good(); } template inline bool read_data_internal(Ignored*, std::istream* fp, void* data, size_t length) { return read_data_internal_for_istream(fp, data, length); } template inline bool write_data_internal_for_ostream(OSTREAM* fp, const void* data, size_t length) { return fp->write(reinterpret_cast(data), length).good(); } template inline bool write_data_internal(Ignored*, std::ostream* fp, const void* data, size_t length) { return write_data_internal_for_ostream(fp, data, length); } // ----- low-level I/O for custom streams ---- // The INPUT type needs to support a Read() method that takes a // buffer and a length and returns the number of bytes read. template inline bool read_data_internal(INPUT* fp, void*, void* data, size_t length) { return static_cast(fp->Read(data, length)) == length; } // The OUTPUT type needs to support a Write() operation that takes // a buffer and a length and returns the number of bytes written. template inline bool write_data_internal(OUTPUT* fp, void*, const void* data, size_t length) { return static_cast(fp->Write(data, length)) == length; } // ----- low-level I/O: the public API ---- template inline bool read_data(INPUT* fp, void* data, size_t length) { return read_data_internal(fp, fp, data, length); } template inline bool write_data(OUTPUT* fp, const void* data, size_t length) { return write_data_internal(fp, fp, data, length); } // Uses read_data() and write_data() to read/write an integer. // length is the number of bytes to read/write (which may differ // from sizeof(IntType), allowing us to save on a 32-bit system // and load on a 64-bit system). Excess bytes are taken to be 0. // INPUT and OUTPUT must match legal inputs to read/write_data (above). template bool read_bigendian_number(INPUT* fp, IntType* value, size_t length) { *value = 0; unsigned char byte; for (size_t i = 0; i < length; ++i) { if (!read_data(fp, &byte, sizeof(byte))) return false; *value |= static_cast(byte) << ((length - 1 - i) * 8); } return true; } template bool write_bigendian_number(OUTPUT* fp, IntType value, size_t length) { unsigned char byte; for (size_t i = 0; i < length; ++i) { byte = (sizeof(value) <= length-1 - i) ? 0 : static_cast((value >> ((length-1 - i) * 8)) & 255); if (!write_data(fp, &byte, sizeof(byte))) return false; } return true; } // If your keys and values are simple enough, you can pass this // serializer to serialize()/unserialize(). "Simple enough" means // value_type is a POD type that contains no pointers. Note, // however, we don't try to normalize endianness. // This is the type used for NopointerSerializer. template struct pod_serializer { template bool operator()(INPUT* fp, value_type* value) const { return read_data(fp, value, sizeof(*value)); } template bool operator()(OUTPUT* fp, const value_type& value) const { return write_data(fp, &value, sizeof(value)); } }; // Settings contains parameters for growing and shrinking the table. // It also packages zero-size functor (ie. hasher). // // It does some munging of the hash value in cases where we think // (fear) the original hash function might not be very good. In // particular, the default hash of pointers is the identity hash, // so probably all the low bits are 0. We identify when we think // we're hashing a pointer, and chop off the low bits. Note this // isn't perfect: even when the key is a pointer, we can't tell // for sure that the hash is the identity hash. If it's not, this // is needless work (and possibly, though not likely, harmful). template class sh_hashtable_settings : public HashFunc { public: typedef Key key_type; typedef HashFunc hasher; typedef SizeType size_type; public: sh_hashtable_settings(const hasher& hf, const float ht_occupancy_flt, const float ht_empty_flt) : hasher(hf), enlarge_threshold_(0), shrink_threshold_(0), consider_shrink_(false), use_empty_(false), use_deleted_(false), num_ht_copies_(0) { set_enlarge_factor(ht_occupancy_flt); set_shrink_factor(ht_empty_flt); } size_type hash(const key_type& v) const { // We munge the hash value when we don't trust hasher::operator(). return hash_munger::MungedHash(hasher::operator()(v)); } float enlarge_factor() const { return enlarge_factor_; } void set_enlarge_factor(float f) { enlarge_factor_ = f; } float shrink_factor() const { return shrink_factor_; } void set_shrink_factor(float f) { shrink_factor_ = f; } size_type enlarge_threshold() const { return enlarge_threshold_; } void set_enlarge_threshold(size_type t) { enlarge_threshold_ = t; } size_type shrink_threshold() const { return shrink_threshold_; } void set_shrink_threshold(size_type t) { shrink_threshold_ = t; } size_type enlarge_size(size_type x) const { return static_cast(x * enlarge_factor_); } size_type shrink_size(size_type x) const { return static_cast(x * shrink_factor_); } bool consider_shrink() const { return consider_shrink_; } void set_consider_shrink(bool t) { consider_shrink_ = t; } bool use_empty() const { return use_empty_; } void set_use_empty(bool t) { use_empty_ = t; } bool use_deleted() const { return use_deleted_; } void set_use_deleted(bool t) { use_deleted_ = t; } size_type num_ht_copies() const { return static_cast(num_ht_copies_); } void inc_num_ht_copies() { ++num_ht_copies_; } // Reset the enlarge and shrink thresholds void reset_thresholds(size_type num_buckets) { set_enlarge_threshold(enlarge_size(num_buckets)); set_shrink_threshold(shrink_size(num_buckets)); // whatever caused us to reset already considered set_consider_shrink(false); } // Caller is resposible for calling reset_threshold right after // set_resizing_parameters. void set_resizing_parameters(float shrink, float grow) { assert(shrink >= 0.0); assert(grow <= 1.0); if (shrink > grow/2.0f) shrink = grow / 2.0f; // otherwise we thrash hashtable size set_shrink_factor(shrink); set_enlarge_factor(grow); } // This is the smallest size a hashtable can be without being too crowded // If you like, you can give a min #buckets as well as a min #elts size_type min_buckets(size_type num_elts, size_type min_buckets_wanted) { float enlarge = enlarge_factor(); size_type sz = HT_MIN_BUCKETS; // min buckets allowed while ( sz < min_buckets_wanted || num_elts >= static_cast(sz * enlarge) ) { // This just prevents overflowing size_type, since sz can exceed // max_size() here. if (static_cast(sz * 2) < sz) { throw std::length_error("resize overflow"); // protect against overflow } sz *= 2; } return sz; } private: template class hash_munger { public: static size_t MungedHash(size_t hash) { return hash; } }; // This matches when the hashtable key is a pointer. template class hash_munger { public: static size_t MungedHash(size_t hash) { // TODO(csilvers): consider rotating instead: // static const int shift = (sizeof(void *) == 4) ? 2 : 3; // return (hash << (sizeof(hash) * 8) - shift)) | (hash >> shift); // This matters if we ever change sparse/dense_hash_* to compare // hashes before comparing actual values. It's speedy on x86. return hash / sizeof(void*); // get rid of known-0 bits } }; size_type enlarge_threshold_; // table.size() * enlarge_factor size_type shrink_threshold_; // table.size() * shrink_factor float enlarge_factor_; // how full before resize float shrink_factor_; // how empty before resize // consider_shrink=true if we should try to shrink before next insert bool consider_shrink_; bool use_empty_; // used only by densehashtable, not sparsehashtable bool use_deleted_; // false until delkey has been set // num_ht_copies is a counter incremented every Copy/Move unsigned int num_ht_copies_; }; } // namespace sparsehash_internal _END_GOOGLE_NAMESPACE_ #endif // UTIL_GTL_HASHTABLE_COMMON_H_ mapnik-3.0.9/deps/mapnik/sparsehash/internal/libc_allocator_with_realloc.h000066400000000000000000000075221262555547000270700ustar00rootroot00000000000000// Copyright (c) 2010, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // --- #ifndef UTIL_GTL_LIBC_ALLOCATOR_WITH_REALLOC_H_ #define UTIL_GTL_LIBC_ALLOCATOR_WITH_REALLOC_H_ #include #include // for malloc/realloc/free #include // for ptrdiff_t #include // for placement new _START_GOOGLE_NAMESPACE_ template class libc_allocator_with_realloc { public: typedef T value_type; typedef size_t size_type; typedef ptrdiff_t difference_type; typedef T* pointer; typedef const T* const_pointer; typedef T& reference; typedef const T& const_reference; libc_allocator_with_realloc() {} libc_allocator_with_realloc(const libc_allocator_with_realloc&) {} ~libc_allocator_with_realloc() {} pointer address(reference r) const { return &r; } const_pointer address(const_reference r) const { return &r; } pointer allocate(size_type n, const_pointer = 0) { return static_cast(malloc(n * sizeof(value_type))); } void deallocate(pointer p, size_type) { free(p); } pointer reallocate(pointer p, size_type n) { return static_cast(realloc(p, n * sizeof(value_type))); } size_type max_size() const { return static_cast(-1) / sizeof(value_type); } void construct(pointer p, const value_type& val) { new(p) value_type(val); } void destroy(pointer p) { p->~value_type(); } template libc_allocator_with_realloc(const libc_allocator_with_realloc&) {} template struct rebind { typedef libc_allocator_with_realloc other; }; }; // libc_allocator_with_realloc specialization. template<> class libc_allocator_with_realloc { public: typedef void value_type; typedef size_t size_type; typedef ptrdiff_t difference_type; typedef void* pointer; typedef const void* const_pointer; template struct rebind { typedef libc_allocator_with_realloc other; }; }; template inline bool operator==(const libc_allocator_with_realloc&, const libc_allocator_with_realloc&) { return true; } template inline bool operator!=(const libc_allocator_with_realloc&, const libc_allocator_with_realloc&) { return false; } _END_GOOGLE_NAMESPACE_ #endif // UTIL_GTL_LIBC_ALLOCATOR_WITH_REALLOC_H_ mapnik-3.0.9/deps/mapnik/sparsehash/internal/sparseconfig.h000066400000000000000000000024671262555547000240510ustar00rootroot00000000000000/* * NOTE: This file is for internal use only. * Do not use these #defines in your own program! */ /* Namespace for Google classes */ #define GOOGLE_NAMESPACE ::google /* the location of the header defining hash functions */ #define HASH_FUN_H /* the namespace of the hash<> function */ #define HASH_NAMESPACE boost /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if the system has the type `long long'. */ #define HAVE_LONG_LONG 1 /* Define to 1 if you have the `memcpy' function. */ #define HAVE_MEMCPY 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if the system has the type `uint16_t'. */ #define HAVE_UINT16_T 1 /* Define to 1 if the system has the type `u_int16_t'. */ #define HAVE_U_INT16_T 1 /* Define to 1 if the system has the type `__uint16'. */ /* #undef HAVE___UINT16 */ /* The system-provided hash function including the namespace. */ #define SPARSEHASH_HASH HASH_NAMESPACE::hash /* Stops putting the code inside the Google namespace */ #define _END_GOOGLE_NAMESPACE_ } /* Puts following code inside the Google namespace */ #define _START_GOOGLE_NAMESPACE_ namespace google { mapnik-3.0.9/deps/mapnik/sparsehash/template_util.h000066400000000000000000000111651262555547000224150ustar00rootroot00000000000000// Copyright 2005 Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ---- // // Template metaprogramming utility functions. // // This code is compiled directly on many platforms, including client // platforms like Windows, Mac, and embedded systems. Before making // any changes here, make sure that you're not breaking any platforms. // // // The names choosen here reflect those used in tr1 and the boost::mpl // library, there are similar operations used in the Loki library as // well. I prefer the boost names for 2 reasons: // 1. I think that portions of the Boost libraries are more likely to // be included in the c++ standard. // 2. It is not impossible that some of the boost libraries will be // included in our own build in the future. // Both of these outcomes means that we may be able to directly replace // some of these with boost equivalents. // #ifndef BASE_TEMPLATE_UTIL_H_ #define BASE_TEMPLATE_UTIL_H_ #include _START_GOOGLE_NAMESPACE_ // Types small_ and big_ are guaranteed such that sizeof(small_) < // sizeof(big_) typedef char small_; struct big_ { char dummy[2]; }; // Identity metafunction. template struct identity_ { typedef T type; }; // integral_constant, defined in tr1, is a wrapper for an integer // value. We don't really need this generality; we could get away // with hardcoding the integer type to bool. We use the fully // general integer_constant for compatibility with tr1. template struct integral_constant { static const T value = v; typedef T value_type; typedef integral_constant type; }; template const T integral_constant::value; // Abbreviations: true_type and false_type are structs that represent boolean // true and false values. Also define the boost::mpl versions of those names, // true_ and false_. typedef integral_constant true_type; typedef integral_constant false_type; typedef true_type true_; typedef false_type false_; // if_ is a templatized conditional statement. // if_ is a compile time evaluation of cond. // if_<>::type contains A if cond is true, B otherwise. template struct if_{ typedef A type; }; template struct if_ { typedef B type; }; // type_equals_ is a template type comparator, similar to Loki IsSameType. // type_equals_::value is true iff "A" is the same type as "B". // // New code should prefer base::is_same, defined in base/type_traits.h. // It is functionally identical, but is_same is the standard spelling. template struct type_equals_ : public false_ { }; template struct type_equals_ : public true_ { }; // and_ is a template && operator. // and_::value evaluates "A::value && B::value". template struct and_ : public integral_constant { }; // or_ is a template || operator. // or_::value evaluates "A::value || B::value". template struct or_ : public integral_constant { }; _END_GOOGLE_NAMESPACE_ #endif // BASE_TEMPLATE_UTIL_H_ mapnik-3.0.9/deps/mapnik/sparsehash/type_traits.h000066400000000000000000000356141262555547000221210ustar00rootroot00000000000000// Copyright (c) 2006, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ---- // // This code is compiled directly on many platforms, including client // platforms like Windows, Mac, and embedded systems. Before making // any changes here, make sure that you're not breaking any platforms. // // Define a small subset of tr1 type traits. The traits we define are: // is_integral // is_floating_point // is_pointer // is_enum // is_reference // is_pod // has_trivial_constructor // has_trivial_copy // has_trivial_assign // has_trivial_destructor // remove_const // remove_volatile // remove_cv // remove_reference // add_reference // remove_pointer // is_same // is_convertible // We can add more type traits as required. #ifndef BASE_TYPE_TRAITS_H_ #define BASE_TYPE_TRAITS_H_ #include #include // For pair #include // For true_type and false_type _START_GOOGLE_NAMESPACE_ template struct is_integral; template struct is_floating_point; template struct is_pointer; // MSVC can't compile this correctly, and neither can gcc 3.3.5 (at least) #if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) // is_enum uses is_convertible, which is not available on MSVC. template struct is_enum; #endif template struct is_reference; template struct is_pod; template struct has_trivial_constructor; template struct has_trivial_copy; template struct has_trivial_assign; template struct has_trivial_destructor; template struct remove_const; template struct remove_volatile; template struct remove_cv; template struct remove_reference; template struct add_reference; template struct remove_pointer; template struct is_same; #if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) template struct is_convertible; #endif // is_integral is false except for the built-in integer types. A // cv-qualified type is integral if and only if the underlying type is. template struct is_integral : false_type { }; template<> struct is_integral : true_type { }; template<> struct is_integral : true_type { }; template<> struct is_integral : true_type { }; template<> struct is_integral : true_type { }; #if defined(_MSC_VER) // wchar_t is not by default a distinct type from unsigned short in // Microsoft C. // See http://msdn2.microsoft.com/en-us/library/dh8che7s(VS.80).aspx template<> struct is_integral<__wchar_t> : true_type { }; #else template<> struct is_integral : true_type { }; #endif template<> struct is_integral : true_type { }; template<> struct is_integral : true_type { }; template<> struct is_integral : true_type { }; template<> struct is_integral : true_type { }; template<> struct is_integral : true_type { }; template<> struct is_integral : true_type { }; #ifdef HAVE_LONG_LONG template<> struct is_integral : true_type { }; template<> struct is_integral : true_type { }; #endif template struct is_integral : is_integral { }; template struct is_integral : is_integral { }; template struct is_integral : is_integral { }; // is_floating_point is false except for the built-in floating-point types. // A cv-qualified type is integral if and only if the underlying type is. template struct is_floating_point : false_type { }; template<> struct is_floating_point : true_type { }; template<> struct is_floating_point : true_type { }; template<> struct is_floating_point : true_type { }; template struct is_floating_point : is_floating_point { }; template struct is_floating_point : is_floating_point { }; template struct is_floating_point : is_floating_point { }; // is_pointer is false except for pointer types. A cv-qualified type (e.g. // "int* const", as opposed to "int const*") is cv-qualified if and only if // the underlying type is. template struct is_pointer : false_type { }; template struct is_pointer : true_type { }; template struct is_pointer : is_pointer { }; template struct is_pointer : is_pointer { }; template struct is_pointer : is_pointer { }; #if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) namespace internal { template struct is_class_or_union { template static small_ tester(void (U::*)()); template static big_ tester(...); static const bool value = sizeof(tester(0)) == sizeof(small_); }; // is_convertible chokes if the first argument is an array. That's why // we use add_reference here. template struct is_enum_impl : is_convertible::type, int> { }; template struct is_enum_impl : false_type { }; } // namespace internal // Specified by TR1 [4.5.1] primary type categories. // Implementation note: // // Each type is either void, integral, floating point, array, pointer, // reference, member object pointer, member function pointer, enum, // union or class. Out of these, only integral, floating point, reference, // class and enum types are potentially convertible to int. Therefore, // if a type is not a reference, integral, floating point or class and // is convertible to int, it's a enum. Adding cv-qualification to a type // does not change whether it's an enum. // // Is-convertible-to-int check is done only if all other checks pass, // because it can't be used with some types (e.g. void or classes with // inaccessible conversion operators). template struct is_enum : internal::is_enum_impl< is_same::value || is_integral::value || is_floating_point::value || is_reference::value || internal::is_class_or_union::value, T> { }; template struct is_enum : is_enum { }; template struct is_enum : is_enum { }; template struct is_enum : is_enum { }; #endif // is_reference is false except for reference types. template struct is_reference : false_type {}; template struct is_reference : true_type {}; // We can't get is_pod right without compiler help, so fail conservatively. // We will assume it's false except for arithmetic types, enumerations, // pointers and cv-qualified versions thereof. Note that std::pair // is not a POD even if T and U are PODs. template struct is_pod : integral_constant::value || is_floating_point::value || #if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) // is_enum is not available on MSVC. is_enum::value || #endif is_pointer::value)> { }; template struct is_pod : is_pod { }; template struct is_pod : is_pod { }; template struct is_pod : is_pod { }; // We can't get has_trivial_constructor right without compiler help, so // fail conservatively. We will assume it's false except for: (1) types // for which is_pod is true. (2) std::pair of types with trivial // constructors. (3) array of a type with a trivial constructor. // (4) const versions thereof. template struct has_trivial_constructor : is_pod { }; template struct has_trivial_constructor > : integral_constant::value && has_trivial_constructor::value)> { }; template struct has_trivial_constructor : has_trivial_constructor { }; template struct has_trivial_constructor : has_trivial_constructor { }; // We can't get has_trivial_copy right without compiler help, so fail // conservatively. We will assume it's false except for: (1) types // for which is_pod is true. (2) std::pair of types with trivial copy // constructors. (3) array of a type with a trivial copy constructor. // (4) const versions thereof. template struct has_trivial_copy : is_pod { }; template struct has_trivial_copy > : integral_constant::value && has_trivial_copy::value)> { }; template struct has_trivial_copy : has_trivial_copy { }; template struct has_trivial_copy : has_trivial_copy { }; // We can't get has_trivial_assign right without compiler help, so fail // conservatively. We will assume it's false except for: (1) types // for which is_pod is true. (2) std::pair of types with trivial copy // constructors. (3) array of a type with a trivial assign constructor. template struct has_trivial_assign : is_pod { }; template struct has_trivial_assign > : integral_constant::value && has_trivial_assign::value)> { }; template struct has_trivial_assign : has_trivial_assign { }; // We can't get has_trivial_destructor right without compiler help, so // fail conservatively. We will assume it's false except for: (1) types // for which is_pod is true. (2) std::pair of types with trivial // destructors. (3) array of a type with a trivial destructor. // (4) const versions thereof. template struct has_trivial_destructor : is_pod { }; template struct has_trivial_destructor > : integral_constant::value && has_trivial_destructor::value)> { }; template struct has_trivial_destructor : has_trivial_destructor { }; template struct has_trivial_destructor : has_trivial_destructor { }; // Specified by TR1 [4.7.1] template struct remove_const { typedef T type; }; template struct remove_const { typedef T type; }; template struct remove_volatile { typedef T type; }; template struct remove_volatile { typedef T type; }; template struct remove_cv { typedef typename remove_const::type>::type type; }; // Specified by TR1 [4.7.2] Reference modifications. template struct remove_reference { typedef T type; }; template struct remove_reference { typedef T type; }; template struct add_reference { typedef T& type; }; template struct add_reference { typedef T& type; }; // Specified by TR1 [4.7.4] Pointer modifications. template struct remove_pointer { typedef T type; }; template struct remove_pointer { typedef T type; }; template struct remove_pointer { typedef T type; }; template struct remove_pointer { typedef T type; }; template struct remove_pointer { typedef T type; }; // Specified by TR1 [4.6] Relationships between types template struct is_same : public false_type { }; template struct is_same : public true_type { }; // Specified by TR1 [4.6] Relationships between types #if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) namespace internal { // This class is an implementation detail for is_convertible, and you // don't need to know how it works to use is_convertible. For those // who care: we declare two different functions, one whose argument is // of type To and one with a variadic argument list. We give them // return types of different size, so we can use sizeof to trick the // compiler into telling us which function it would have chosen if we // had called it with an argument of type From. See Alexandrescu's // _Modern C++ Design_ for more details on this sort of trick. template struct ConvertHelper { static small_ Test(To); static big_ Test(...); static From Create(); }; } // namespace internal // Inherits from true_type if From is convertible to To, false_type otherwise. template struct is_convertible : integral_constant::Test( internal::ConvertHelper::Create())) == sizeof(small_)> { }; #endif _END_GOOGLE_NAMESPACE_ // Right now these macros are no-ops, and mostly just document the fact // these types are PODs, for human use. They may be made more contentful // later. The typedef is just to make it legal to put a semicolon after // these macros. #define DECLARE_POD(TypeName) typedef int Dummy_Type_For_DECLARE_POD #define DECLARE_NESTED_POD(TypeName) DECLARE_POD(TypeName) #define PROPAGATE_POD_FROM_TEMPLATE_ARGUMENT(TemplateName) \ typedef int Dummy_Type_For_PROPAGATE_POD_FROM_TEMPLATE_ARGUMENT #define ENFORCE_POD(TypeName) typedef int Dummy_Type_For_ENFORCE_POD #endif // BASE_TYPE_TRAITS_H_ mapnik-3.0.9/docs/000077500000000000000000000000001262555547000137455ustar00rootroot00000000000000mapnik-3.0.9/docs/contributing.md000066400000000000000000000271441262555547000170060ustar00rootroot00000000000000# Contributing ## Testing Developers adding new features or fixing bugs should always write tests alongside. Mapnik has both C++ unit tests in `./test/unit` and visual tests in `./test/visual`. Test data for the unit and visual tests is pulled in from standalone repos via git submodules. After building Mapnik (see INSTALL.md), the submodules can be loaded and the tests can be run like: make test Developers with commit access can update test data like: cd test/data git remote set-url origin git@github.com:mapnik/test-data git commit -a -m "update test data" git push origin HEAD:master And the visual test data can up updated like: cd test/data-visual git remote set-url origin git@github.com:mapnik/test-data-visual git add styles/* images/* git commit -a -m "add more visual tests" git push origin HEAD:master After updating the test data you can then do: # then go back to mapnik core cd ../../ # the submodule should be marked dirty git status # now commit the changes to the submodule git commit test/data test/data-visual -m "update visual tests and data" ## Community Mapnik is a creative community focused on making beautiful maps with beautiful software. We host our code on github.com/mapnik and encourage anyone interested to fork the repository and provide pull requests or patches for things they want to see added or fixed. If you just have a question about the code, or a feature you want to discuss then feel free to create a new issue at github.com/mapnik-support. ## Plugins Mapnik has a plugin interface for reading various geodata formats. Plugins are both viable inside of Mapnik core and also able to be used outside of Mapnik. Plugins should be developed outside of core except in rare cases when most of the following are met: - The plugin has no external dependencies or dependencies are easily installed - The plugin has excellent unit tests - The plugin has a maintainer willing to support the plugin over time - Setup and testing of the plugin is easy on travis.ci (see .travis.yml) Therefore plugins that depend on proprietary, unmaintained, or difficult to test third-party dependencies are not viable for Mapnik core. However they are still likely very valuable for the Mapnik community, so get in touch via https://github.com/mapnik/mapnik-support if we can help you develop your plugin outside of core. ## Code Philosophy Look through the code to get an idea, and do not hesitate to ask questions. Also read the design philosophy page for the motivations that lead to code decisions. Templates are good, within reason. We seek to use templates where possible for flexible code, but not in cases where functional patterns would be just as concise and clear. Since version 3.0 we use C++11 which brings many advantages and makes the code easier to write and to read. In general we use Boost, it makes more possible in C++. It is a big build time dependency (as in time to compile against and # of headers) but ultimately compiles to small object code and is very fast (particularly spirit). It also has no dependencies itself (it's really an extension to the C++ language) so requiring it is much easier than requiring a hard dependency that itself has other dependencies. This is a big reason that we prefer AGG to Cairo as our primary renderer. Also AGG produces the best visual output and strikes an excellent balance between speed and thread safety by using very lightweight objects. Cairo not so much. You will also notice that we don't use many of the standard geo libraries when we could. For instance we don't use GDAL, OGR, or GEOS anywhere in core, and only leverage them in optional plugins. We feel we can often write code that is faster and more thread safe than these libraries but that still does the job. If this ever changes we can adapt and start using these libraries or others as dependencies - nothing is nicer than standing on the shoulders of giants when it makes sense. ## Code commits best practices. #### Big changes - awesome as pull requests We love big, aggressive refactoring - but ideally in branches. Even if the changes should go directly into the mainline code and are stable, very big changes are useful to see as a group and branches are cheap. So, branch and commit then create a pull request against master so that other developers can take a quick look. This is a great way for informal code review when a full issue is not warrented. #### Commits that fix issues should note the issue # git commit plugins/input/ogr/ -m "implemented sql query in OGR plugin (closes #472)" #### Commits that relate to issues should reference them: git commit tests/python_tests/sqlite_test.py -m "more robust sqlite tests - refs #928" #### Commits that add a new feature or fix should be added to the CHANGELOG Ideally the CHANGELOG can be a very concise place to look for the most important recent development and should not read like a full commit log. So, some developers may prefer to weekly or monthly look back over their commits and summarize all at once with additions to the CHANGELOG. Other developers may prefer to add as they go. ## License Mapnik is licensed LGPL, which means that you are a free to use the code in any of your applications whether they be open source or not. It also means that if you contribute code to Mapnik that others are free to continue using Mapnik in the same way, even with your new additions. If you choose to redistribute an application using Mapnik just make sure to provide any source code modifications you make back to the community. For the actual details see the full LGPL license in the COPYING doc. ## Copyright Mapnik is an open source project and will always be. Your contributions to Mapnik should be motivated by your desire to contribute to a community effort and by the knowledge that your open code will stay that way. Artem, as the founder and leader of the Mapnik project, is the primary copyright holder and therefore also the primary contact for any current or future license questions around Mapnik. It is important that the copyright holder is respected, trusted, and known to the community so maintaining copyright with Artem is key to maintaining the project as open source. Therefore all files created by any core developers or patch authors should have a copyright declaration like: /***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) {YEAR} Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ ## Coding Conventions Mapnik is written in C++, and we try to follow general coding guidelines. If you see bits of code around that do not follow these please don't hesitate to flag the issue or correct it yourself. #### Prefix cmath functions with std:: The avoids ambiguity and potential bugs of using old C library math directly. So always do `std::abs()` instead of `abs()`. Here is a script to fix your code in one fell swoop: ```sh DIR=./bindings for i in {abs,fabs,tan,sin,cos,floor,ceil,atan2,acos,asin}; do find $DIR -type f -name '*.cpp' -or -name '*.h' -or -name '*.hpp' | xargs perl -i -p -e "s/ $i\(/ std::$i\(/g;" find $DIR -type f -name '*.cpp' -or -name '*.h' -or -name '*.hpp' | xargs perl -i -p -e "s/\($i\(/\(std::$i\(/g;" done ``` #### Avoid boost::lexical_cast It's slow both to compile and at runtime. #### Avoid sstream objects if possible They should never be used in performance critical code because they trigger std::locale usage which triggers locks #### Spaces not tabs, and avoid trailing whitespace #### Indentation is four spaces #### Use C++ style casts static_cast(value); // yes (int)value; // no #### Use const keyword after the type std::string const& variable_name // preferred, for consistency const std::string & variable_name // no #### Pass built-in types by value, all others by const& void my_function(int double val); // if int, char, double, etc pass by value void my_function(std::string const& val); // if std::string or user type, pass by const& #### Use unique_ptr instead of new/delete #### Use std::copy instead of memcpy #### When to use shared_ptr and unique_ptr Sparingly, always prefer passing objects as const& except where using share_ptr or unique_ptr express more clearly your intent. See http://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/ for more details. #### Shared pointers should be created with [boost::make_shared](http://www.boost.org/doc/libs/1_47_0/libs/smart_ptr/make_shared.html) where possible Since Mapnik 3.0 use std::make_shared. #### Use assignment operator for zero initialized numbers double num = 0; // please double num(0); // no #### Function definitions should not be separated from their arguments: void foo(int a) // please void foo (int a) // no #### Separate arguments by a single space: void foo(int a, float b) // please void foo(int a,float b) // no #### Space between operators: if (a == b) // please if(a==b) // no #### Braces should always be used: if (!file) { throw mapnik::datasource_exception("not found"); // please } if (!file) throw mapnik::datasource_exception("not found"); // no #### Braces should be on a separate line: if (a == b) { int z = 5; // more... } #### Prefer `empty()` over `size() == 0` if container supports it This avoids implicit conversions to bool and reduces compiler warnings. if (container.empty()) // please if (container.size() == 0) // no ### Other C++ style resources Many also follow the useful [Google style guide](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml) which mostly fits our style. However, Google obviously has to maintain a lot of aging codebases. Mapnik can move faster, so we don't follow all of those style recommendations. ### Emacs helper To auto-convert to the above syntax you can put this in an .emacs file: ;; mapnik c++ (setq c-default-style "bsd") ;; no tabs please (setq indent-tabs-mode nil) ;; ident by four spaces (setq c-basic-offset 4) ;; don't ident inside namespace decl (c-set-offset 'innamespace 0) ;; (c-set-offset 'template-args-cont 'c-lineup-template-args) ### Generating *.gcov files with LLVM/clang toolchain to check tests coverage * Ensure `llvm-cov` is available * On OS X do `xcrun -f llvm-cov` to see the location of the binary * Build and link mapnik with `--coverage` and ensure optimization is off and profile flags are present. For example pass following options to Scons: `CUSTOM_CXXFLAGS='--coverage -g -O0' LDFLAGS='--coverage'` * Run test(s) e.g `make test` * To generate *.gcov file(s) run `llvm-cov gcov ` * *.gcov files can be viewed in text editor mapnik-3.0.9/docs/design.md000066400000000000000000000060341262555547000155430ustar00rootroot00000000000000# Design philosophy Above all Mapnik is about making beautiful maps. This aim drives us to be constantly forward looking. Progress in technology and design are reshaping the art of the possible for maps. Mapnik joins the best ideas in high quality graphics with robust patterns and algorithms for spatial data access. The goal should be no less than enabling a new generation of map makers and gorgeous maps. Mapnik is a library. It is not a server - rather it's for writing servers. Or for writing desktop graphics engines to display maps. Or for visualizing new galaxies - its up to you. If you have an inclination for scripting and something to render in real world or celestial coordinates, Mapnik is for you. Mapnik is not a full solution, or even half a solution. At its best, Mapnik is a drawing api that provides the right tools for the developer to make sense of, and art from, geodata. But Mapnik is not just about drawing on a canvas. Beautiful maps can also be interactive maps and Mapnik aims to provide very flexible, custom access to geo features both in its C++ api and in binding languages. MetaWriters and the Grid renderer are two recent advances that enable highly interactive feature display in mapping applications using JSON serialized features, but more will come. Mapnik core is a simple set of objects providing structures for features and the ability to query, filter, cache, and render them. This design can be lightweight, flexible, and high performance because the core library does not have to worry about where data comes from or where it goes after rendering. Datasources are separate plugin libraries loaded at runtime that, when called, provide feature arrays. The core classes make no assumptions about map size, format, or projection. The core is designed to make writing a high performance tile server, that renders on-demand and uses multi-threaded or multi-process concurrency, as easy as possible. Chasing beauty and speed, as technology advances, requires experimentation and a frequent stream of new ideas. To write fast and creative code we strive to avoid hard dependencies on older libraries or libraries that attempt to do too much at the cost of performance. At the same time, to be able to maintain ambitious goals we cannot write boilerplate code or attempt to write robust code for domains outside of mapping and graphics. As such we rely as much as possible on the Boost libraries. Mapnik is cross platform because the C++ language and Boost makes this feasible enough it would be a shame not to be. But our development target is the latest release of Linux, particularly server based distributions, and many Mapnik developers use OSX as a development environment. If you are having fun using Mapnik, stick with it. But, Mapnik is not always the right tool, of course. If you have small sets of data (MB's), try just rendering it in a web browser client using a javascript mapping api. Or if you need to set up an array of OGC Web services, use GeoServer. Lastly, if you are looking for a full solution for web cartography, use TileMill. mapnik-3.0.9/docs/textrendering.gv000066400000000000000000000034051262555547000171670ustar00rootroot00000000000000/* process with: dot textrendering.gv -Tsvg > textrendering.svg dot textrendering.gv -Tpng > textrendering.png */ digraph textrendering { /* Classes without important virtual members: Round Classes with important virtual members: Rect Pointers [style=dashed] */ Renderer [color=red] rankdir="TD"; text_placements[shape=box] text_placement_info[shape=box] node_ -> text_symbolizer_properties [label="tree_", style=dashed] TextSymbolizer -> text_placements [label="placement_options_", style=dashed] text_placements -> text_symbolizer_properties [label="properties"] text_placements -> text_placement_info [label="get_placement_info()", style=dashed] text_placement_info -> text_symbolizer_properties [label="properties"] text_placement_info -> text_path [label="placements", style=dashed] text_placement_info -> text_placement_info [label="next()"] text_symbolizer_properties -> processed_text [label="process()", style=dashed] processed_text -> string_info [label="get_string_info()", style=dashed] text_path -> Renderer [color=red, label="used by"] processed_text -> Renderer [color=red, label="owned by"] Renderer -> text_symbolizer_helper [color=red, label="creates"] text_symbolizer_helper -> placement_finder [color=red, label="creates"] placement_finder -> text_path [color=red, label="creates"] string_info -> placement_finder [color=red, label="used by"] text_placement_info -> Renderer [color=red, label="used by"] node_[label="node"] node_ -> text_node [style=dashed] node_ -> list_node [style=dashed] node_ -> format_node [style=dashed] list_node -> text_node [style=dashed] list_node -> format_node [style=dashed] format_node -> text_node [style=dashed] { rank=same; text_path text_symbolizer_helper } } mapnik-3.0.9/docs/textrendering.png000066400000000000000000003110311262555547000173340ustar00rootroot00000000000000PNG  IHDRWbKGD IDATxiXSWIBQEb}Aeu{P;[k[hAC\ۂm)b+ժTA*"a KBqi&@%yᓜ{9sȍܜ{â(@7@/ rwf:RL&kll VzJ%u7bnnnffYbeefmll `gggbbbmm#0DRUUUYYYUUU___WWG[WWW[[K?P477744455I$ XZZr\gnnneeemmmccckkK?VXYY|>oggכAA,gP򲲲OTN$UVVT*UxVVV666<ҒN-,,,,,lmml9r'˻s]]RUTJN.766d2T*Hbqccccc#~yf;;88_777ggg777KK. З!w[JKKKJJ˟_1zח?|\^^P(NNNt6mkk@;c4]>*Օٙ2~_R***={gϞ2{yyy{{X:;@oPT={kjj!\.N(i%T\1bjj:d,=֭[7oͽT*0`!C b+((((( ruue:XB=\rƍ7o޼yÇ*iȑ#G6l9ӑBJGݻwƍׯT*@@?رc=<<rw+++xbvvvvv۷JH 8eko޼yw= РDON:T*_|Ņ Ι3Ɔ?@Hg-\p…L.555999##b-\7 b:.0l!֭[~W_}eeel2\zݢ۽{wnnĉ_{9s昘0L_|1((w~;Cw[z͛7|a7N@K$]vԨQMMM?Snnʕ+̘ '~wW\9nܸk׮1`J痞~O4;e顇...^f͠A\.6l믿 cBRڽ{7x<ޟ˗3 wSVVhѢok'HwHnnnXXX,:OWZz}[oIү>=@?`\?~u>SJ7A3g0]VB055o忴´H$&&&B%p8\NW{i@@9ݻw4ٖ/̜:u*}Ɲ:w\b6=hР+d2.K2`%,K"ޥ֖.733J2L$|ul"H K$#juMMM!!!ׯ_?~|VV=zN)`uu53~&%%-XXb,fo1HRTܤy@ dbҲ}>|%;;[]8{۷o[YYzxx\/NDX?k]~ȑ#ĝ=yC<==.gӏ=j&B^dj7o.((رc;sw}W:{V(vWSSC7fXtk׿o4?!?B#:uJ'!C ѳC%$$B>sW);<4rH>{yyyyL_Z !{)**H$2,???!!aرt3gзT*RcΝS7"!_}T*U>˗+**RRR !&M IT B:0GGGD#`}J觺U;xH$D=UsZK.m9Liy733㏙>@x\nVVӁPTkYu|Ʈvuu%=JPߙd-wlM[[7nhEEʆcǎv3w׺="CCC[ԤAS}ӥϔ:FTWW fc>zJzy<^JJ ӱ5fffFFFr8ss󀀀7Rh"w`TT/^L֮[Sօ-[ۛXXX 67xq˨\BjyN V3gNaaL& 433377 ܹs:qoA:rwS_ <ٳgF}3ET/IHHظq?nYݟ\2117裏(Z===>V_|q/rȑ?!'O$\X'O,^x ,r wrw0F/rnnA&O<"#b>}s=t8T*ݾ}͛7O8_7hrw0R JII9s̃.]z bԩSt VEEŶmۼ>۷߹sgL)'yyy&Mڸq3?<-߿'>|^vrrb:(0<!1>>[t… }}} [mm?W_eff_W^ܯZ:W_=zhĈ .b:.0$ǏOJJp8s]tixx8.B .]_'''WUU5jӧO5jԀJZW\\T*_z%K̞=WCKsssff'ӋçO'˳O:u})SL6m޼yLG rw}:u*===;; 7nܸqtt{srr._|ҥk׮I$iӦM:5$$?=;@566^pŋ׮]dNNNcǎ?~|ppmllSss{nܸqҥ>>Ç mOA{(zq^^}~Vo ^^^c4j$JKKKKKK4?}TTB,,,|}}QBCƢ tqqquuuvvvuuutttppycʲO>{Nkjjj:;@UUUUZZZRRR^^ɓ:O-//onnV״vttt6O?ˉ~MMM}}}]]o]]]mmm]]]eeH$3uuʮR;::::;;999;99%...XrwCQTyyyD"Qee:U Bk_333:eVVVfff<ZYYlguuuJVR*ʺ:\(ɤRD"Q'-w?oH4?_.8 rwL"hæzX$HRL&kllt/5mT*X;sss333͏vvv&&&KKK. ҏ%=2) ;tJJJb:ce;a@`;a@=h 0";aywÀ0 w0  rwÀ0 wNJHH(,,d: #:i͚5 Q;a@`;a@=h 0",ڇ;a@=bX,0.s~ ;@7`*WF`TL!p0 wNJHH(,,$/ېH$k֬VVV+..nkNj/.[͍888gddhVP(FxaaaiiiG r޴iX,VoihhXbK||˖-ZiSTرˋ D 5_"wx<^PPP\\\ssVmͭ~bг#cT(Ǝ+LMM0PBIJJ~O#""4[ܪ55mZX~*[}RTK,i) @,k6>o< G,9t]_6W\U'99=]e2ل Z8i$\r[s_wc-79LFxN"{zzfeeן;wÃi&uM$oڴi鵵rO>![?#Be||'Od2YNNܹs)ڳg!599Y$I$`B͛5 uX,~W !666Z%!!!t}twwOKKŏ?={6!dD6&&bkk}Y[[Bbcc5n[GtBmVRR"˫;4d"IZ՛RRR!BP]S3̜5k3fffÇBZ8fBȅ 4 >|HVKAGPW YYYiFGs@BHbbf޽{?ƣG:O ߰a޽{ :4X, "NaXIIIQQQꚚ[[[zSMMT*%/˦~O/^;]RiEEV DbbbLB8\.W%ɸ\.]a-KX,JPRL*ݬz cԓL&D|>_](D"Q7j,׿#cyԩS<(2tU^}v֮]/J)jhhs_:T*JRRT*uΪy%!NӉ՜Z%ƙi=T'3:8nܸK.FFFZZZ>}_rwϟ'x{{F/G3ųgjV2d!$55W5b6LWP迋!ԩS'N Oէ_;ҍf7>vح[!Z7ϟ?АE5kVjcǎEGGkVXl!dƍw~iSSӕ+WЗΞ={޽R{7n\6>ǎdzBfÆ ߑ&L8rHIIBD~-!D@ry0^ѿ mۺGdllֻ/YA.O<7~7knI'lY|VA&4,,IsVH[v ;t544ZbΜ9Z "..חer<...00",,LF+< `ƍ-ҿm,]n'3w(JɁ ܹs:gnW+=;1˗/Zۛq} Ba@w}f:q4a;a`_:N}$ͩt#&@ λI LG`D@'Y_~a: #0 w0  rwÀ0 w0  tFEQ1@L_pn߾QiӦ={ܝb5 ;@zwג%KX,VLLLVX/gg &DQԂ z?$:`ٲe- MLL&O{?: 22ywZ{!w:u*?s89s0@tRR~pf͚eee`HF;t̬Yxِrw%K477BLMM,X`jjtDFϛEP899UWWB233'OtDFlvTT*_Z IDAT!~ĉL`,W233 IÇ߿Xt`,f3;t']z t҂ (o>C`XRR/C0.VXt;tb:0 w0  rwÀ0 w0  rwÀ0 w0  rwÀbX,Q@됻Kdw rwÀ0 w), G r޴iX,7EFFXCT*DR :b-\ݖub$ɚ5k|ռy󊋋۪e˖q8 ">>~ԨQ</,,,--M1ihhXbK||˖-EiOJrǎ^^^\.W(&&&jVhu c SSӁFFFfff3[` tiSTK,i) @,SUVVfooO9t !@$h]t͈ܪ4+r<<o< G,QOm\RNrr?J]ԛtHJJj@7ywBH}}W"H"?!NNN[677777o۶_|-YYYΝ())ٹsg5M^[[+KJJ>>Cz맟~aiiL3w\}ƨVTTt-XꫯB^~e\Y_5o̙3iiibdzgϦCGo!۶m+))UUUiii~2`RO89N&R5fBȅ 4 >|HU̘1{]vB,YnzsquIJJ !D(lffYlM̌:|pBHBBBˎ#˗駥PXXHҚ !6lػwoAAAZTT!$99Yw5z-Qfaa!HLLLԛ裑pr9]ӧt;wޥh]^555tIMMT*j6))iŭvAxcjթ0a‘#GJJJ H$o ![תx_z^|V8$]]] !iiitGB<<3˰0ۯ@qnywÀ>gq;a@`;a@`;a@`t0!!APTt\{" wׯY(` @g$''Szd[n9~>#wut__`D/ܹsÆ oߞ5kAfΜy/^ZԬYf„ {;,,, aggwС'N\x1((ŋLG ;@dW\IMM=}A:`ƌ?Io߮P(,, JĄ(>7|s̘1IIIpAЖ7nDDD(ov̘1L53m1bׅBĉl۶ XAA)e:<oɒ%7o(jĉ,x;@8p`ĈqqqL=dΝIII;wJLG :C&EGG9r7MMMzܙ3g,Xbggt8`tXiiiDDovї^zpܽ{^gΜLFkf:ٳEݺu :t˗CBBJJJλt@QQP(9s,--QRR2eBHffA1Ν F\EEŤI(vpp`:0:C$r2w GGǴŋr|}}ǜ5k0 7|oȑ#;wd:Lmt }QCC̙3|/ӱ@6h [[M69Ϗp?õӧO_'Pt8`VX/0 [TK_paذaLA&=… l6pzwm֭;~?gff߽{w֭Lrwo߾Ç=X Q5%ɚ5k|ռy󊋋۪e˖q8 ">>~ԨQ</,,,--M!ihhXbK||˖-ZI>m*;vxyyq\PY+SgGꭄ;w x</(((..+55U,O2eSLќ[BHTTԘ1cz-}h`yD"yȨT%K<b1 c}榎SX~*[!7ofTȇsZm\RNrrr[#":muj/2l„ -'M$)Zz5!̙3-{?}4!d͚5Z?3:y>C ;SSӏ?խR//,OOOpϞ=WWdH$Hrrr !7otj>w!dӦM6;mڴZ\^RR'B}!2>>ɓ'2,''gܹBPPЭ[b1}VIHHHG=--M,?~xلkMBNi:!߿b߾}քX FyQދ!-7-X @PttDZZ`!C蓩- 2.9~f7fBȅ 4z!!ח~ڕ꒔BP(lYf9;;lyb333z ! -;/_Z":fFFBaa!!Jk?w@BHbbf{?P !4B[ngZU0Fw>|cϟj33[[[ޞ~D"111QG!r .Zvmff&JMJJZxq]Ѕ<O*VTT8::jU2 вbT)JtU+SH:277d"i"H K$P( =FM ᨇeժUgϞϧ sp*ZS!tT*黔T*ul߾kKRW!MZ% l=ԼKʽ{;?P566Dٵ-[={v.F;X|zKG&ExҥK!W^m,ݾ?);;[oo(111~~~tzY Ԗ362u]G9uf'3I_\SSr_Pg5UV?AFÇZe̙^{-;;1;;^Ӭ@_9{{KҦٳgܸqtzʱcd2YG\~^uBȬYZVsww'VWW;v,::Z²e!7nܽ{ӧO\B7F!tTwٕ &96l8tPeeeee6nܨD/k/]?=yȑ#=<rggg#eΜ96~z݇;q5n="~ȓ/kV'On+v2vK:f®LPۭ#BCC[FFѣGѲsNBHRRWX1x`p: ;@>>zY\. 433 Ӽ!t"wD- 2u:ӧL&<00pΝtNQTCCK/Բp[[[D#¼t}fk׮ׇ;wG;-V׼k UUUFkֽ{DDē'O]a@;wnvvv]]ݳgٳeBH[׿$99Y0))fo޼7o/\p Z.4#G15565#λJ5۶m;y3gnݺU?;v~ ;@N:駟޾}=""wߵJ;O]tW^y~oE ?`,|LƮs;v`:00XF/xL@\իӛ? rw0 O{0k͚5UUU)))Lkf(,Zٳgϟg::uJ`:0$8L&;uTTTӁaՙ>d:0$ݡ;}tcccdd$Ӂa֬YGa:0$ݡKII;vӁ.[쫯b:0$ݡ;w.Qh{W>>611ٽ{wЮ_@CO˻ewyÃt vrr:qӁ@_z͛ @7t !wFZURϹ\.#cԩ.]L}rwo\\\4t3}^z5eJt Ч!wbk>@`Νc:ӐC?4dE111ywZ&OtЧ!w~hd_@/&Mw^yy9Ӂ@߅!oooBT*1^BCCl6  T*P(LHH`:tF?… 7466K$BHMM !(ejjjaaAё0.@(z [oeddܾ}@T*{owOb̘1|I]]5ӱtBqŋo޼P(,--=== 6uTGGG@biij;ED"HTQQٳ;w8qӧÇ 9rdXXg/!w~ !=zJqFXXӱtO8q .w>={ۃ:Ѧ!CZ+__~vZNNξ}$ĉ'O)Sžf>|V"455]|̙3?_R"""/^lccsa>}ѣ]t?vXbbK<==͛0nܸ ?՝쳼ѣGϟ?_,((`:(CзrU;^~ <شie:.o.^XVV6bĈ}1@ w[Fqu w}322RSS/ی7ڵkk׮^hVAз 6-I~Νٳg3N333;{3g&MTVVtDzAзпhs}uСYfEDDddd8::2N rJMM͘1c=zt8Ct@!݁)WްaCbb)8__˗/[[[O:pځUx>>>>>>cƌ:t 2$//(ݸqcK.c:coo?Κ5+++ЯDž ;_]XXXTTTXXx…m۶T*aÆ  IDAT6,$$dĉLiB!λCH$K,?~={-fdd9w5-`pC3(@NLSS䒒BY|Z__֭sڵ(P8qĈ^xĤ=m۶:uJgΜuVҟ癎GM/{뭷Ν;7~ 4>[|3z.Bnz vZM|s[YY?~ .deeegg .\tQz.ښO޽[pݺuZttKYBǍLIx18w/=jHYlٷ~7`(p*@@QTGw555B#"">ӛ7o>x`ڵ'O{QTZ_#DEE)ӍB!EQL:Rޱu#F,Z@sdhrwCEl޼y#__߭[޻wٳgڴiQQQF> /xī455U,O2eSL| Yl6G}޽# Jׯ_fw=d/ }Y} u- +?cǎ 'Oϙ3[ZgQQܹs---|u$Iˎt8;m/^zSݏ>)))ݿN[PJdɒb1EQeeeCMJ\CquuMNND$'''88yfÇ !r\.{{{B{-gVVV}}s<<<!6mjiӦ򒒒O>Lo裏!OܫtذaGőuM0~zzP?(>4m^m۶\^UU ݢwv_6mjvnܽJ>fBȅ 4 >|HU̘1{]vB,YnzsquIJJ »fffΚ5Y?!̌:|pBHBBBˎ#˗駥PXXHҚ&Z{u@BHbbf{%[rwmO=*VO+6^ۛ~瑥%e )rv'oذa޽mMt@ Ϻv}qL_<]]o!wgLLLLLL @kr8ugggggg:Z3u ^Pk67ߴ`nnNhّ>cd2zٴV hRTn:̌B'Q r}x<}W)9z)f}ÇMMMJ%U]]ق>/ -PhuM闻K4NZ^^Ʉv8pZk'˦-_}iӦ+]oZ~(BRT**JRQj^g\7@$^vQ+b]TP,m-X.ZEk""{oB2ϋy$@I9 ?0L|'I~9I Z[[544s߾}Y&;;}'\>}0om|Ya)&l},?lC;l󯗪ZZZ ]H"zSX144R?AѷMsl999?~X.Wxf<}uǏ{{kll׮]MSmen](*1003pyd1q%zj?77KKK=z˖-w+lTOhkk3 Ή=JKK^c4557n`jmm퐐V vͮ Աq/^]]]]]iii'NXZZvÇYxϿ^3!={Dgv<W[A| 7ի4t\[6lUk_8vNתr9,==~Akw!eb _r___AQQQׯ_22{蚝eiȮw`]JN<]ฏHkua:6Q9CPƍ53zU6J///RRRZ+++K.mmm>?z)ZW ᡣs G7]c};(No޼z!'Opbm`]ȱsr#sٱcH$Fg;vR\ k׮522"^bbbH?SSSAoy͜ANxb-I&H$ܹs:Lӏ=jnn.++;p{2)2קRGSPPpvvfv>"}fׅyf >]D" wԴm6Y))) k׮׿~:=-G/%ӦM뺛SNUQQa~~#.eOЫnebbB G}n/DU]]}޽|С|hƍ˗/8p Y ZU۷C]fMMMMwq%WWפl???*Tdd$۷oKKKo۶ T}SQQu HRα={ZҜW y;6D󧟟ӧOzJEцgtpݲe˹sV\\x-[$3(uuS@BEEҥK ,pqq9s&qu! `kkKR]O*((Ϻ$)) ,}Z[[u H̟?…qqqy]$ǵk׮\r=$ 쯜`]ۜBCt:0{</##S^___^^.|LMM؄tBHx\xQCCcԩXgǏ{zzn߾}޼yXg v`ANZZPUUؘiӦs皙1'%iiiŕ$jjjt: QVV~)Juqq)--:|kk׮ǕǸq~H\d˗/ 6mdddaN!&VMMMJJJGG@X|wT*ٳׯ_^~T;wd-!HH HxH$߿{xx={vÆ IIIrrrǏ8q":AdffiӦ%Kdgg^ZJJo=| !Kv ^---X$˧O̙ckkӧR aÆ{.66VFFfڴi#F kmm:/v266޹s rssO>M"`IIɒ%KmVPPXC /yyyᯍ 1K.{xxʲŋ?666^fKUnԄO>ҥK>>>'OgO<111;v;wߎxA‹H$¯!zjzz+dddzZgw---ݷo۷oMq}2,ȴ>}zĉ^^^<(..>p:qO())y{{D"q…Ѽj؀C /x<ǓoذaÆ QQQQQQnnnRRR#Gtqq0a+n!`.||| l:X'~cf  z zxѢElF++JGOWUUUWWgddTUU566RT(GWWWа0a1z^OOŋׯ=zt777x To߾uvv8;;8L݈/\&cmlln߾;uԵk766b av8222_rrr:hkJmMEE%(((11}С~~~Β yyyXCg``5qDt?vYZZT%%% ĉvvv/^6$`A"""}Μ9FD !6&MrJsscb/=zdkkud--E :4** 8@$""t~~~SN:vzzz?̴>|0N:$`swaJJJs֪C[[;222%%DjjI/_Qa5k֬͛71"..D;̰NҐ!Cbcc/_^SSu(H] bŊ'ODDDsԠ@kw.WHOLLTVV?~  5XC"#@윔tҥtYYY@ݻw/==}̙Xgjj@L zmhhhdd˗ ֡ !kwI ȋ/\\\$z+//:B+V())a.v$X&8VXvFGGc adnn>k,]]x===Co߾} v:Ռ033:u9s  ?K:cc۷Ϛ5+;;;""bX%666ӧO_jB: -K2X_fdd`BD`tk255͵T*wD=qIJe˲LMMN$Μ9SYYy!E^^k:kwֶy#F9s,"[ׯ_:tĉA=~DPhooWI?~\Bf())3f̏?x۬}>ۖD>}::<'`. |̙cGDU{G:e|ׁzw4x<^EESTTG$y  f;9M"Ν;7YY{xxy$% ݅]{{ŏ?֬Y5ZՍxMuuaJ`ܿX^yy9Fg)<Ÿ7. ,--?~…O<޽{X'VBǏƍ =}&δAM  zƏzM++;uqw' %88 .(++SSSk֬y?x<~3fJX ;aEhkP]u>߿wsstvvNKK:$hp̌(--ڶmŋKJJoߎu(앗cǎ i55KIIaX 5 /^[^PZTUU::: 5J8fF tttlܸ6l:P(//S!+++[Y IDAT!g䰎 !!] :nz捥ePPnTB13b@JJB߿_SSDBߵ;XCKEQp8ܯŋoڴ u(41p___2pZkwaQQQA&N!v45ŦvGHgϦHKK;88ZBvꤹYII /W:ڴiW݅BLL̐!C"vDLܳŋϷkll:'p̌К>}333:/*K)++8qŋqqqXg4993g|]]],Pֱrywww555{P$͐Mv`0KKKcJ蠥GEE͞=,P/Dds),,LNN&Xg^1vZX6@PUu"٫Vڶm۠A>}u(/;bٳyyyAAAX;$֪E" 4k֬)Sdddi[Vuuu%%tZWKK=J=|!C rQ}k׮9;;ʚmݺuPfg`]et:ܹsFԔuss @ss3wJaaƍ ϟ?8ԍYA\r߾}߮Ѯ]ٓ/CP!$d$* {СCx>b/ֲ`W 2~/J'NRܴ`0,Yҵ[[F6fb3===4 ^5qǏgNjjj{WȱqEoߎɦ)ʦM1ٺPa06mJKK:-XCNQ ::::utt ћ7occc [ne]AOOɓ'@˗.]9r7-FFFVWW988mfḵ}yyyII J:u*Ǐd2أ鑑cƌA+>þwu7\DikkaB577O-zNYGe˖;w|K^MM !'''<<sӻ8vsaV]] :477_r,P`d2yԩqqqfffXǑltk>pqqINN~ztt[[[ߚ}-L~ zyΜ9lGظqcDDDMMMMM͕+WO8n:khhhAAA[[[{{?BBBF>-Z1ܹsBǏڵ:^]]}]{ *ʧpӻ8vsaVUUㅧwtt`A(XYY%%%m߾ Pz7ҥKUUU322!Hp0u~)wEc糾t#ӣ(ʸq㺾(9;;3'ز/^VXv7O{ƍWkx:ȑ#=zqٻ8vc+ܼy#Y ۉ'޿ܹXg vxwHik媽bnn`0,X7CI]]]KFFFbo„ ˖-mnn:0jjj:`;--ڽݳ%A***vñu:sɶݻwcDYYY;w vğ,PQSSLL˗/ lll%ݹhѢ$@"LMM- Xg.{''  }ںtR8KkUIVVϟ@+x??JEGc{ӠXRUU:GS ,ڽn޼ $ZZ I^^/++k˖-kll:b0%%%FFFX wިQ|)⧺ZUUBPڽ/?uꔞY .[ ʀvޝaÆ'O555X=T*U2k}}E_v cHhhh`+߿:8x>@W} Ə:iii =zhuu… wmffu(7f̘:APZZzȑ+Wx??5kƍ?p$##;;$440??xlsBIVׯ_߸q?a.TTTNO>]p Çt:w$ص bCBh7oc̙{quSPP:w---Q?/]mIaaϝ;uϻCN)ᑖtҌ s sνz 2PJ1_8p@UUuӦM  "(,,… aaaXgv$]+Wfee]z5==~޽:P\~!H|Qss={nܸgqs-F~:L:qK^^ɓnz $##cԨQ#148f DEa>|p'O 4hӦMK,:fXp8xY0J!!!Nx3NA0o޼O>=zرc CII^ʄ ȯd8`έ]vXdV u~[nmܸqժU"M:1 EEŶ|oaDlڝ;v70mm@:s@(++'&&Z[[ϙ3'11ە߾};y 8$ :ΊNb5kq\SIIǏA<|{RԮcJ͘1C2G? 9;r䈉ɒ%Kz8lFzxx|NNNcǎtqѣGYn]@@VQyk.##3Çc[7nDill:$z222TUUE󏋋KOW455 8$`Aiikv)3`vS<?gΜߓHs:4""=S߹s ֶ֑ NO&7o޵k3J1z%%%pEUU˗p]/d0 $98~ҥK ywQt勽yPPЉ'e. .\Dv222_ZYXX`9y$cN?vؚ5k O8G@\jhh8n۶m="O222p;$`vnΝUHp@Sk'O޺ukXXFc`ܾ}{޼y Ðz}޽a`0V^ϟ?ٳy>khhze={vrr!kI@wH`΁'^FLS@*44t]'LxԩSECE k׮5446N/Zʕ+]&1͛7+++c E "tҝeJJʴiӘsW  c*55˗Xv$6J vx NOHHpvv|02dkBr}ܹ:AÇ.ѭ<@ 'ZZZ%×-[&ֆcfݻwټh1cƔ 2ۣ Fmmm/^:y%ۿ SAQtkwT``˗ 4֡|}}"&)Xĉ{lhz?:::X+hjjiii3 =DMKK l)xt:ݻwT*U]]y-fndd+rSWϟ?ϟNkwHbܾ .j7:X__?MMMd2L&7OCCC[[Ba GY***EEEt yyytJD999"xqu֭s9bFd :7/s hhhP(8Ny HD"H$(((D  0`ʀH$ȕD{AAAaaaAAAQQQii) V^^^MMMMMMSS!55uƌhWgV[-״F皚ښj>iii]]]###cccCCCccckkk+++555>>/SXXheeuuaEڽ{d2YN @} Ayݧ  *Z[[VUU5666440KsBFP?`0H$%Zwpb0쬬̆<oaa1|#F >= }}} c:Xw#99yĈiii : ; DϟiӰ"JtzUUUyyyyyyee%ZTUUUTTIEE-XOXCt4 0?0"''҂Cl%\{{Obcc߼y@P 0|pf]kjjuF^B$77799(''7j(gg':::{!(XwСCϟ/..:ky|99F+---...***...)))*****dJ(((Z2$XCFkjjJKK̊2%x<^SSS[ e IDAT[H_____@WW9[>~8***..hcǎ7nOA޿ÇwıcΞ={: vĉ ñ1Xl݊u466w*+**yTutt YD>]A0 ɥvr6Xx<^[[-MLLLMM\ѕzͨ,UUӧϘ1c„ XG EEEo߾}mllfϞdɒpL({gmmm$)88, ƌǏcCJKKssskw5FO=2t|6ZI’M%%%ŕMYbb͛׮]KKK3gٳnj NÓ'Olٲŋڽ1c¯мy@A\uZeeeѹXl/W aFP}ѻkD8rrr311xWVVfgg ^Inݺuwީ-^xÆ U"999<<͛uuuΞpD{g'N8rHX?W/t:=777333++ ׿N y̘ź̓AŒ`߾}FBx+++;;=̴̴k /^ }왞7?&T`YPPPFFFHHA >سܽ 23;T*5555111111555;;JxAڢZZZw,$*`0ddd 8x`8E=S||ѣ9!!!x<b0sٰ0;TUUy>sάYtz $9w jj ىIIIhNRy dmm-//uR۷oIII)))---hhaa!9ӛtŋӧ744T.B9s̡Cvرzjijj @dΝ;f122:t萟Ov$ɽ{ P(@΁1ׯ_QZZ Bӿ}ӧo߾t''ɓ' | z$cƀb 4wt+((AK==={{{GGaÆ3$NZZZRRRbbb444&M4e### ˗7nn߾̙3 ,8v옄<]B%??ӦM>;x Hg֏?9s&OJXC$7$0b)T7o|Wʚ7o^eeٳg-[Ƨl77lؠ++~L"߿ϓl$ii * ̞-wtt<ƍO>mhh6lٳL2rH8%I24s̥KN:U\tϟ?$!!an݂ۅAAA{~~ǏիW===yO0JJIj |ղѣGϛ7 -:6vj BSZPPx===ooocccsaٳgnnn&M}6χǡI얖77ӦMs;mmmzzz;vؼy37XCXv־|r.Ydʕt@$a.CCCC HSSӈ#^xxgbNO<"))IYYoHKK13ܓ8߯_u o:hР?޾}ׯK. A ~7nyfРA/_:޽>,,LҦ!׮]ݻwoׇ{?dbN[; ^^^>>>YYYnnn0ckלUTTdee̶n؈ 1 t p .rOtsF)##kƺ~{{>{s[d2yʕ -[D"ܹ)Vuuu%%0DR>|ёu 33! P(nK2qD*B?æ_9>,Xlp?~,S}ޣnO)t!Qt-ii? FPN=W6ݦ ]kˑ Nf7ϵHN/(**^t ?#|j˗/x<>$$O LoE!!!==ָ8mu^ 011RT*p=-,_RRBRkkkN ȳgd2]Bn!C~ظn::-3fLFFFo޼innEGoݺA@˗.]! yyh{ӦMGzJJJJJJ xO\d:::lZfǏ&>}zee%ԚГW\E7QpNg.!"''@G1UUUDb^S(ÇƎKә˹y_zL߯~{j?{Mα}]HDM2eX kk{r\MCCCCXM^ʘjkkc.a"r gamm{ihh>ϵ;kUI$RxxxuuuuuuXX:,תkw{)7sjwתvzS٣: ؅DL^hWGfff:Nqq1_ð9Tw>u\ׅ7תrs\qqԝ;wοp!cmÿ棣խ?|Պ+sBNOOА9:vsެ8{ӴsD7k$ggv6 2?7WOrlZazuS ޽x5YСCWP(WkNkᥬ.xq#p9///CCC BUVVpǏ$;$y5k)Sp8wwLn֮]kddD :ĸ"hkk"h" :7ŋ9ܓx///>z/^܉ HBB@II.T׭p\J&H$ܹsXoP(rrrD"ì[l S$6s S\/G=u^=ct!!mԩeeeX.ϻ#rU<:>M^ʺnۅuqqىH[[=\rJ1S\}]YYyժUjpƍUk 3Imm [7ϙ3ׯ7olhh>}iRPP !HD۷t̙---D\[[+={pڴi?k*~1}7I&UWWAC>3a,0͕6l9oA!ǏĔfff2eʔ'J7oݻ+W677k֬ Q߿_EEʕ+<~I?`.ˁ.xu_~ӧLF""浴AW***zCC@sppprr4i1EL޵k獌h@ݾ}{qq;kZ~I @YeDEwֽZv{Zvui{?koZ\*qn( ʾf! !='$^a2$dgΜ9cJD$x1(]噙wST</ `ԨQ#Gd2YnnnvvvNNNvvvVVqI??炂`׿9aÆ[XXeJS曻w._|֭nnnC[TD|I$\~=+++777//OP1( ;;(ֳ U*B5jTttѣr<|p֭gΜqqqy7^~aÆe$D"[YY9?xԨQCڽMEP3}}T* ssssrrrsssssdG>|8MSS3Ϟ=+))Q*VVV~~~~~~~~~pgO>ogF`+WN2JvСӧOKo glhvojwSx---U*!-=<<]\\\%BQQQQVVVRRBjs^^^>>>P#VRRҊ+ ^_[[ttgg˗ϙ3',, @=R222Ν;wȥK p aڽMʕ=;Ǡkii)**ҭ>}ZRR҂"H㹸x<cKVKKKˉ2H^^^0ɀtҴijkk.,**:rHbb'OΝ;o޼X*:d2˗Ϝ9sY@bŊe˖awݳg$ jVypA ۼ]JE/eeeDբ-e&F3p8,Ņb9;;l6 =0L*WWWWVV gMMMEEEEE+qnnnp:>|;xkh4;{sRi4!DN_r {1MNNN׮]()))իWkjjbbbǎkoo {W\}\.p8111'O5kaޑb}o jw`Fk"FP@e|'{@  jvffooooobj9aÆ1L&ikk RY__/kkkB!QeP($Bܜr!57:R,--W^%Zӌ!!!cǎ;vl@@qtҨɹ{{ݻW\\p8111111~~~3vcĉ~~~p1DPNEB!2}ҭڪK;E$!:nkkK^;Ft*jcc=n544dzLFTbx@JG,?T*T*JDQN< 444H$L~1q${lF<&fܸX,>;".͟?>kyyy^^pBUU񔽽sssswwwttp8,qQT@ JJJKD"1oHHʕ+}||Vކӧq0PPf#PM T"bm(J%I]DDCT*Vtxd2L&rB lFd2`;DB\y)JBR!"HBD͍h4 _?^5F#ΓKÇRmU66626gZ Qjbm\RR,wB$o>qJ3$i4BA?.QLx@LGr聭P((G E[ZZvN#STb Bѐαq!{X̃gg*`l>>ׯ_wuu8q 4l61S*\Z&rZU`;A7n(Hp`h* HB0Jjii!65beee"H[n!S sS{;Lqlق;Škiiٸq1cpFjw`Vׯ_w ťwAc'''A;wh voep#S rU?.[QQ;0hݫ&vvo%999<<w L&RvtsP(@L}f@14 b#Gpxj@LZpJ|>wcpҥ+V9swFP(Jcc# jw`֪166Nw]z5..wt̙hì?s ݽcLﵿu]N\fMgZ^tibF ...O-\-͜Hh"""B_}Kvލ7n@|@`p-^xŚ-Zu&MR(FPtXizS/2B B>\ ĝHTUUNapvo%99w _~~??tN$lٲ\PDgi4!MNNR4==}ܸq{Ol޼!v+Wx~_yfFsyŒH$r!tԩiSwrSRR۶mC1̟~!cFW_! Ʈ]ryzz5=vm)V%%%lQQB*`̙tR)1ڽqyUo~BCCBׯ_}-q~{W mFJ4 6{hb6dN}!doo(ɈF_ З6{hbZݗ[YY!D>RJ"|~UwSDTR~D/|bXL"tpp*0yNkUBˌ\QPPp֭;v3 .[WT*JVfoUsD]v۷u؏;;ZT.]?sLZ[rvv޴i޽{u'~6mAf@PHO<Ĥ͛7oj@ Ds>ÝH$ULL̏?Hܘ Eg^a|A ))iŊ bۣ7з D9P; Hdgg{{P֪^ꠃ.v8;0QiiiXA7]]]aċRUU{v!6{HCھ} q=Bb$''SFsIÇZ!ڽ )q8H@srrrpH999/Ν;qmABBl#v_xw f#`}R?~;{ז/_bŊrY H&Y;a޽,+>>^Pjw"#KIIɻ+Hp鋚???AN?uTnn{g; @60@$jo/"##  {Ϟ=vr ,!`~z͍N䄆ZbU\rޞ^^^{zz˗oC,^w **p&aϞ=~ZY33/n3 @=~wб (Hnݺ}v3pppHLLPTĠ #44tȑ^^^^^^GZ >@(3w`JKK;HhD&hժU 55w#yyys-((qƄ 4RI_kaaA"ZZZ?ϵB!6x6SM0 w`F9D'N3L&_ŨQOW*f̘1/Z p@T*9IXbDj?D"XBy0eee d+V,YD&TÇw W,--OW*}YL;!8R!w`/^!33xk4\A@BCCt{D/|̘1v-hd2922rƌ_рZ蕝]\\E,,,p/77 s֭")… GW*dɓ'cǶ[ZZm@! L@o/_,Z^|9<`gff;+W9rdEEE}}=ĝŴ444TUU LFF&!F`kkkkkbbbBaFFƛoikkK4+0L B' Mә,GGGqD]SSSsss}}L&MMMDÊX,+))bX,kGRX,f9swwxR1& Nxx8 gϐ'shB$TTTTVVVVVVTTTUU577h4gggblQc Q*J >_SS#Bauu5'U*++R)13Bqrrr\.cÆ F)pqq?&M;qR(Ϟ={iYYQ3ں8=p\.P455QTCxG*VTTTWWWVV?bΎiKyOOO__Ç[xx 1Y4{6(wjuqqq~~>Qk{g333m+Q:;;;;;s\[[[ X, luVVV)lmmNooowwwC? ~~mAA]]Ç|ѣOT*{{P};:hn9LL&}{߿'OjeMB(((ʺ{ݻwkjj̼:>$$d0ѣG_zF;SZZzʕZ[J9997o,((0779rddddXXɓIjwt#33;)jllu֍7]vBAjh?CPYY] eܸqp(x}iӢcX^񷿡,tBP\~ׯ_J0aBdd`奧߸q#==ɓ'D=cƌ(hdCի+++/]4+_SRR]&J}}}cccN:i$854 W\IKK|r~~>F={EX,@jwt|):|a䪫SRRRSS/_4ydhnܺu͛=zdcc3uԙ3gΚ5 Z7n\TT7|3H N:~kרT̙3M6uTH^)--|ŋSSSrI.\베voĉaaaaƍ``;v~>J2eʬYfΜ [(--MMMMII?d2رc,X/zxx@jݻdJ?dY,Y2k,>tIs%''*)S[nܹ=YU{PB"?;Ѽy uy +ǎ}aϟ3P'ɮ^z'Oֆ  ӧOn߾=~ZfUUΝhѢ9sMƤٳ'O9+/k sP/  7n|W)))T*u/ԩSd2\`hiixbRRҙ3gd2ٜ9s6n;!t̙ 644/-;;O?׭[~zgg/}߿_$-\_nWpq[];rرGGG9r'&&Μ9 wCd2yهILL&L =~8qKH0vwwសtҠ-[@n\֭[KJJ:ѣ˗?y/l6"PM CF9x#VZyΝׯ/Yzj>h/͛7o߾=|˗1СCpr:П%466kKLL|ђ%Kuä^x!++СC믿.H}!P }s޽ϟ?ٳgG  ;vٳgsy'Lp}ܡ Z|epتUׯ_ JJJrrr.]j#كAeff|ǏݻرcAAA7o%If|H$^8q8PH$Z~㭬߿{n:FLs/s= ǿꫵCA):6mڴ)SJrӦM&MZvmVss{A&Mp_+w֭{'NCRu63SؿxgWܹ3f̘ԣG^reԨQ eGx_~ٳcǎw=...dHݻ;`+O?ݱcGqqa^"b5F\]]/]{ݻw/\P&u8,^ M{ݸqcʔ)>>>K,tLɓ'ߺu w"05ͣGp bѢEꫯl=vBɓp}PA"x㍴[n-^44T?k,))A-XR?k%"""55ի6mj,#NHW^yzŝ+Vd{{K.ΠT*w`0h4ZLLٳg>|8&&dR(OO͛7unIH$/Ӯ]B˗/sppUd*>swwP(~~~ԝAwN-Rwpeii֧ PDSSS|||dd#Gpcv;%fdo&+U(۷oh4-88xΝ}`@vfϟ`0^{5TګJisǓHZMLQ$8B;v,,,lѢEbCTPPÇq׮]۳gǎi#̴f}Cz?~ؽ{wj@Gg…H$ҝH$ӧg E\\\y4Z^tib,X;Ù3g_~!2׬YfKO~PC }u.ZH*ˣ'MP(4`@x 6]cT[]]=l0{9tBb . /IJv0H6m4f)INuavt0n]]1gKoiO(|F~MNNR4==}ܸq{Ow]>ů:Bֶ͔Hb/ٳbtܹ &|24 !e˖rB!Ξ=7\RS5i}96m›)MIIill$&n۶ !d2'>GЎ;4`@xn޼wvN6+B BPxxx N:ذa'` ;v,00PV/UUUfffgϞzl435C4EMuQt6ݝdǨ7O677i!9PAw~ !;ٴ9sp8gBk"u'>{ !奻 X.ҥK Bm>6}}}Bqqqo :5iq0hUUU?onF Dcf۫۠:99i4K5:gO]}^zC%%%ٹmD\ZZe[__̙33#~M.RKu=ol?ZZZXQ 6yK{7.**QS-Ct'O~n@tv3÷oؗ_~jsCOv1gΜ)[jU^" n[iv%-)E:^}N{T7P:~תzzz">HTWWfugB{)//DC|8R\.߷o_xxxudJߖ~"B=zTTTTTbbbYYYKK ߾};BF37DFi>wCw9PZZ N+:$L&z~%S6.6.vV͹'˗/DT*L̮\ŋcLΞ{Wtԃ6nw}_٢m]뮣۷';Fhhhpuu}7ھ_}0|mj6!u6F;Pk+WԝAPL2C>d*aÆ.^{͍L&kXvLvpp ZB3{6C@ccq\]]vK.o۶Tj``۵4`@vf ΝKӇ nݺ^#psv/j=Z&J{]~<|円J$=k׮!u W_ xδu I]Է]GOnfOv]`۶mfff@Fwƍ!H:v D:ƙ6ƙ!&yʕׯ\2>>w"`*,Xf͚_-D`۷oƍS ЪU/266tQ\\CRpx2l˖-#G|IZZΝ;uoرc>|ڣ0&}vګW58ڮ1((ڵkVl6hA z~>Ok/w(`ljkk?Çyffɓq.$$9;;we˖]vÝwΝu֭X"333<}z˖-eee~h@̂}:""ڵk)))%%%-|@Zt҂ F]^^~+Wv {0M6={رc---/"y饗.^RpNT^paժUl6{ҥj:))ٳg7nkRMSHH11cݻwO8QWW7m4//;v|ܹ`ٶmO:uiӦ| $8\.z]aFB$%%%9r$##b͞={̙SN K.;wN(/_~+W,--gϞ0sL*%JSRRSRRZZZL`0LȬY3Fŋ))).\ P9a„sss RT7nܸu͛7O>k֬iӦ1LhKV6?qa'OLNN~:B:uԩSLd!Jdee]|7nhnn8q%K.\C@G֬A9J{k׮_~MXlcc6vXl`޿?###=====dN0!::zĉ!!!ffp0\Ϟ= ګϟ?…Z;a8=e8>}z֭˗/O:uڴi3gdX"T;iQTYYY:Z}61 0x߿߿_\\bXQQQсP̙3 ,hhhOWSTwܹp… ޽RlvxxxDDDxxxHHxF&ݻwhƍ>}CBB28q",,]жm wVZZz_GUUByԨQ~~~?~ǹ999YYY!gg1cƌ=8xp?Q5fdd[ZZ=zE~`IGeff>x---vvvaaaǏHǏ'$$p;~-[t6UUUľ2+++/////39oÇx4)\d'*u+++???__߀1cp;0-]T"︃tLVw!vRgAAA#GqwwvP*EEEDJEǍvojw?׮T]RTEEE999DConn'OB...D)pN=P(ˋ z{ٳgJ'̇ #|}}prrk*syyyϞ=kiiAX@ ooo;:[O^C((w @[bj)JDbNNN\.ٙ:999999::w{'j##JE"@ *//!fpuu%?> &`ZZZ O?l2YG4??!D&]\\x<x\.q`4|>_ TTTVTTe:B96d@١ Ponu SKK QVVVVVViYYYuuuYYT*I|lNNOL&0O=+ʆzXܠC( BH$ @ DN&\\\Ņ&--ɓ[TT4zWyՃGRvFsww ~uuu5P;?T*ЪUsP]]- kB_N IDATtE"QCC$Fռ5Bh4BX[[[XX0Lsss[[[2lE,TzR,JRissscc#Q2lcc{(b;99Y[[3$ԩS P,1PX]]]SSSUUE|>^[d2Q[[[3 bkkKRL&BĎa]SSSss3j\^__HTmvT*Y{b8p8C!4 6=3Q{͛QI ڲ%wb]*ɴmuuuMD.d&BAtSTD/HtEE$KKK. BP0 A&mmm͉cCd0'촏a `4BBBT*ս{&N;1#?UQQ1c H]__/HaCCH$jnn#ZdbXVwv333[[[DˈJussP(ľQ q ;pv7 |>ڸ>f@))PT*ҦNz-???}DȀӧS(7ozxxc O-^wfj!`RЮ]]Μpe<СC`(n߾;)JOOpvvNOO/[INNǝjwcv6?mތz =~fff+WwR>ٳg3GA!tJJB.!ooܙ1a6aر' &<--ѣ wtA@P&ND/Gyyhb܁zjէO F#KKK:hK 6i4ǝ[c#z-4f R*ݻh.d -5jTyy9 ';Gmut jw: ̐/=~ݺmmmm޽kL7t`ǝ;}E'^B(?\H$ܙCI}}}yyyw)2V-Kq]ڽ'NN  jfH?Pc#}څ`P3@egg#Lv///ڸq# +P;00Pߣ;QF 0Tegg3LiǍG&?CY@Wvs0RRAfHz YX²GI2v/^8qbPP9DQ`vs0P܌lA#GBt ;`T*J5k6 U=:w9s w  .@/Pf&0${E#Gcǎ˗gÚ:?FAA.E jkZVuV}[[GUĉV)  PdaHr~"+99<brs3Ϟ=\!MڝW~w%77ܻyu&9b&((JO۴i;#Vz04mb.Eǎ8z\Ry搐1//˗/s-uzߝW35EI **A^qn;)Y!!!:!rlvIPPP; Ȅ=מ+Laj;w--3)СCh !+--MJJ:!FK"##NA]ZUyH$ذNN8}G &\gϟ6mڮ]s=zեa3ڝW35GKH,޽v5HX%>}PZn޼IX@;!CCwRI ̓44pVי8sN1__jS'O wBWܹjoٲeΝT%T\ ԔjwEHOG@f̀?ӻ!555o;5m4Dcf^|<yjwyʕX]i u BH{R]]jwOOO#G=[4sgTVmTL \]nV뭷px AޚbUUUhhۆթ<<w , oQ]]zjwwwmmmmmmwwk԰fddx>~x]]]ccٳgWTTTTT̚5XOO/00MuIgffVYYY{媪* wĉWPWW700ULMM;v,>?d#ɫcD6m611QWWҥĉ!{rΜ9iT?,G݈jQ(>/ݶ#GСC>t⨨(}־pAy'涙 0:Q2=z0s5CCښ9zTƍB᠆N]󫮮fױp իi͚57n̙3622]A"L2~...aB M0ɷ:k,,,dƍ<<<ز8))33Fr6yjY[醍쐽o7ȟɣnk5}o=&&YdLKXN X~z%AAA/^:Q2Æ1uV%woF]Y)/}UV044ܾ}{~~~~~o@Z?joܸ;dȐ^z:]–!!!ݲUeTT@ ;v,+lݺydddAAAEEŋ=<<2 pB֧O.--=uꔕU!B.\0̱c .]8|pOX,bն`666lOfHs6yLBV8ꢢÇ7Cvytttiiiu6k-ߤɗn=dffo===i kѢE...\@UU;Cu8TҔiӘ:D+TXLС̃;v^m6~ ĉ)// ]pfEE0'N}v2%iiiػ^^^Ξ=[]v(0ݺup9.9v[9;;w `ժU][D"iZxq.]D"QNNNK=Z;gG4vgÇϟ?۶mɵmvEJ?_Gݤm&Mt?nvܩS'VTTcj?~\\YBQNHS,`:D"073FF)`ץ |ZZZ]455ep v ILL 0Ҥ{`ˬZa%k/XEEEEE糃a+..ӧ2dJKK+++N;w\=|㱇,d&iV~2rȼw.im׼ΛX&_h:ߵXxOdS>u 522]WХU_˝;c\O>P~MYZZfgg?|aG2hkk?vvvyyyVVVu6Ԭul}X\Cy;vۭ[6lؠc++ǣ -Re$#INNrʅ \3osgϞ-++;{{G0 {4ҸFDDdgg^v;|Xgy&IbMtyfqbg-<3b5x&1!JjwBr0wrCYݻ3|>3w.r ne^JNN>$'ݻ҅)))w+K)6gΜJy9"ko(#R*""}hŊz^ܹsƍ@UUU#efƌ .oHju7Z텲,eo&_{_Aد:4U1~W}}}Y'+TҔ|`N:dBCuuGܹ߽P(\jիk,¢ʲb M8\MMMKK>y&hZZرcutt:vck{:7IK.ӫ}e=|p̘1;vPoƏٳgg϶i{VMMg2_Öe̓*X222UM;jwBd`jUG߾ HJB@ׁHtuu'LuB80hР'OԾC+t%SSSeD;!2Ρ(>o#, ZZ\g" IHH}6AQ4mm7zW|>UhaxIPP%)b1 !A2OLڵ (sBQHoooSp懼_ //,X>{4HxӦM: !6hРNȫPN :wt^Ry uu\Uu&|SNݻӧOBEEE\X,><)HkBsD"--lތӹX"ӦB2DZɓ':u*--u%2~wBdcjݓwEP|-vI@;!iK'ǣOBRRRBbرs(i3v'D6u.ZT*Kt`$}|!h aBHٳ?o߾W^Pff#GRSS% ;w8;;+ U||Q\]]KT\<د_?@A<@^rs^1>H?[uJUUaJY;;>AD!-O ={111gb##ګ={l444:wܣGϻ5MHHȚ5k444ihxs(dtjj!C$ziG[ O?E^/CM@Ғ_giZһBPGGt @$000pss5kԩS$儼Ǝ:jjPUUp1p G^Gv60r$qͣ½])--ٳgll,A/CCß9))I"0 Sp֮]ԴDŋϜ9FPNȫ-^rubӼ&WɈî]07:Q4=====~ ȗݺuxSN:GMMmΜ9NNNKRTT|򈈈 6o4jwB^o_{cp.郰0,X70dׁgf̘qȑb"_g4hP#U:~Y=\Y[[oivKVWWXnݪUB^jwBuG\P/@?ct ssܹ0 9 :!vQxwqq3ʒ%K={rr䫯:tP(li4jh8:֝H|Ǟ=/-auÙ38r]9G ùB3rFUUc\\\ Isiv 0ɓ'#""CBڝFxXBp^TC xxzbB̝{Z8D!f̘q夤$"wFQEEDfuu5}…?N_>O/^ؼ}R/ I]S60G`e,\"Loot[S ֖I{kw~kwuuukkk]UUU//fO0ؑH$bxoޞ jDFFz{{s(uu|3V9~6&O~qW$֭pqAt4~  IDATN@6GrEprrZl|D W^bhttիWEϏbqIIѣƫqCf"D%%SW/0i ߝ_Ո7/D">Po:3H|g"իW/43ӽ{wa|YlmmPIIŋvx:|YYYgBU i*+QZvH$D|

    }}X;/P^¶m-"!NBdEEEϟH$qqq***zzz~z@@SSS(:99͝;wԩt Nڙ7AM `ean2 !D?~ɓ'EEE Aiiig6cccOeej``'|2+vjwFܿTde!;YY{};UU_N04K}熆G .ŷ߾QKKQ\vQPXְ5ЭIME(+{AEW ccb郞=![!(3HѣG=z:);㿤uuu ue``3rWbŊ sDR@PgϞ7e @OO^GGG1iWvGS>y7n=dt:U-;w[P(lz~~={lmm?~ǏU.]:ʪÓjx4 DqB$$5\kb{w8; NNpvF׮MJQ*Ͽ{ܻGQы^vOOxxwo;|˯]V5(FFFիWoݺu֭Č zzzNNNl+t|)))<СC={ͭi/]UV">gi\ }O rD(DE:vD^'<<|[n111Ç: ijjj_…/>~ڲ+[ٵlWr*,,LLLLLLdܽ{ZGGӳ>>>4$/]ݹh7.]Bu50`D֭ݍDž 8w.uD #Gb uuV{:ibkbccccc\RYYibbկ_}(ʧۗ.]|˗>|񜝝 2|45Uv ʢqq/DG#3x-ѥ Fy9.]B\ER0lF02:Q^[l7o^nn.u+..ĉO>ҥȑ# ү_?;;;)˗/9s&&&&11QMM{ذa#F۷/r%TsUDD`>aX4 /%GQ?1f̋ WIIٺuf͚u=yСCϟWQQ߿ȑ#GFÓ'Obbbbbbbcc>}jggܫW/@KvӧغwxLiR:]p O>+ױr:ujZZZ||>>n:;݉<۷Zj\i8tR```Ν>lkkDިv'rؽGBtQQQGn7Fb!!\!4Q4H$3f?"##G%VTo܆ ())9'И}ԩSVVVߗeo<:: 7>} Q2[l,..:ƚ5kLLL$j0""muuuuu5;Ç߳yXjCC۷o֬Yôg|Gw+Dv -fVFOOލ/܍+xyy8{lRSS888ǥ+7n=zTQ}YVj̼Ɇrȑ j( @믿rpc̙#FPL[ Vز2 3f?O?`ʔ)MY<|رcGmݝiٲe[!DsD0 Ϗ :Kq#Vrm$\VڸqcǎܹΊSQQN~ǮƾUWWKwRYY}%H7Ԭ*..644dW(..feWOvAܹq)-LN~EL}xbv!(bD"af3m]6RnrNQ&3f̰ڧN:=sWKd|3رZEEENLK&#IãGLLLpoKN}IPP%)ڄ}QUkuTUU#"">|+WI}*>sLJkI xAӄkÆ ۿA<==_^RR"Rrώo+V/oݺ_77y~FӧO{zzʻP yS |\i58q"0t;w޺ukzzzEEP(|-[IMV1s떂#(Ojkk_^mػwoeet,o4bʊ:u=7ɏ\:ر#㹪۷OڝO?1LjZh=ѣGZZZ</!!a9s4ŵ7&jv+oa˓H~EEQ2}YN>}*f̘{]oO>577${`ee%U{n\BpSVUU1-!'&Mrpp`$mDnWWˋ «BCC :7qDsss555--->͛´ct>(//U3Zy [区:s""(gϞ{gϞ͞=Z:@KP#o'Oпf?O{n,BpժUnnnZZZnnnWf w֛Fy<ޱc3Cxz"8[r4*:cbF| Q!܈;w5kBԩSF`˗s0:WȓooaзDɓPNH{o߾ߗąD;f̘)S,[,QNq06mB` *+NCy\G!B,sp#00ԩSQQQ^^^YYY\ySFqN.jjjf͚5mڴKn۶f;G;q(N/>: WE>|/MPQ:Q 733{HT۫;w_~:y IIIC ½PxECTWW/3 {`N\ z'rttbg#퓣˗A#FHII:Q35~ZREEŗ_~^QQq)Sp/߿ m+\_.Ε\̚`o;w0}:ׁrӧO3홁֭[ϝ;ۣG/P"h׮]...˺u.]u("_T Hȍp2|@7%E*-Œ%ppc6DGܜLD͜9377\!߿kVXm6[[ۯP9Xk׮ݻ{wާ~BS_`kwz]^8{,聐\u./˗oÇ :Q^ عs'A>ŋoݺ:$$$>>\ڣG{=oo{ܹ̌\DAvA$jw5 W""no_`>Ьd-eq#fBj*>ZZ\".$$?NV]hQzz߄ww_hD" ٸqc```RRRxx=шBQ;:A ' < c%_:Y ~z_?ܸ~BV->H0i$uup(]]ݹs&%%>}y޼yfff'O>|p%M,7 \reFݺuG֯_u: ovssKJJrvv:Kݻo< MÈsn^˓'DFq1u*idH3,YuҤI\!JΝ 711:Z[  /\?88x=z:/\vo߾)))]v:Kv:޽ͅ5Ǝر<jj\'SVw"* GbxL#u2BHۗ{Сȋ/2 ӫW#G9_~\kecbbbbbN>]QQaggܻwoeA ɋ/޴i1Y yDG#:89Kcc1c0b:t:!=***:ydll333 {ӁޚR]]}/^p~~~Æ 6l#ҡڝiio; x>>C +Hv' ]>3gp<<++޽ѧ\\`iFw#) 7nu\$Dс/hBɹjUUUGGG77={ٳ[nVVVmuܾ};11111Ν;eee<k׮l޿zQNZG׵׮u<~ ::pr!02:k*+tܻC~>ŗnݨz֭ܿ[l!{֭'OPWWspppppwppj=="ɓ'YYY)))+]M&"B;iC󑔄D_G~>/oX[9:u1`l mmgPP#/@VL`dggt''tn`g/!*((xe];v477277777ҥ1{CWC/--/,,,,,,**yqVVV^^X,fkk~~ A;i+qٳ0p8tyQ"gf"3xg#с :v==-()Ai)P^j ϿH_*Jib1O)///''ѣGYYY=bo<~ɓ'/:^WWP_zzzm/JKKAٿ={(***,,uAMMM###KKKsss KK.]XZZZXXXXXЀu"?TV5DEa@EvUU̟k_ay9򐗇Bٳe7[  DhkvݟJA_05 :uzOHj*v:UUUl%|7Aii)[jK/UUUUQQQozzzm}}}}}} Ąc&I+0p1TU!*vEb"SI}owҪDFFpB5_]={#4ǎ::8p|>x<,X\ej[7nQsbjjj9xyBH;B}W^4y&{wo#?qI=z 0K |LZ7on߾=<<G}u"BiGL5ذa@ 2 23?߽ 778BHsgdd԰ˏ=m6Bi?ߝ(g{8r_%KS  띴"[leF"unB7݉{8VoHLuBd%HV^}x D!eaam7B'o qYijjFGG[[[jwBQ0݉?Lt)ӱo9y FFFǎP7hSN!D;Q27o EXX[/{{Le˨띴.ο{ ߝBjwL8.EVv:!gĈ?ǫѹHTpጌ SW8>kd갶ƌX [IZϚ5KU$N! F KȗtL\\'Sx;wr׶qKP;!( BXu= ᅬ+PUuB^ڡCͥP;!(ϕ:H{"q2-^BluB^[ǎ;N;CHT?W^^Mxzq2uw: ! TWWS;!(]W9j,Z{wnm"l݊͛1>Qy=_}Պ+233"M'jiihii)(7!~O \gi̜?Ē%Xuؽ: ! 999EEEEEEE={e?8xٳgOWP(LLLLHHrJBBƒqttԩ !DVTq2e2[4tuB'N|^sԩSǏ?~xjj1c~QFi̭D;ii4NyV4ڳgOLLLUUՠA~.]pzÇ:t9 QFM:RSS:!@;i94NM3gbJ.%''o۶-<7رֆ HL½>XD${=n8'N,] wچhj)Z!o>Ch(7 Ox(DA=2ydGG7n9rϏ.!T|!C_ngg_qN's%%%4ikKL'.^D\h{ 5 dff7n}{zu(ww={ 0aBvv6ס!Qkq2򠩉Ey3rrBak׺$''6V~W-y󦯯/׉Hs'&&~-8qbii)׉!PUUUUUE2idx<^C4⨫c"l݊t_s1GьBCCmmmVCCoΞ=啖 ! P4' KD_{[ZZիW9no˗Y&##C$qիd +T0AAA\Qb4NFعԓVTVVYZZrG& (x$w3ZܷoCUUUq5ĉB Ddv76jorElu&(S͛gϞ[[[2ɿX,H$n:nB6w'M8P$mڴD]]K.'N{n___CCC {{ XǏ566={vEE***f͚ellɓ<̬UUU<ĉ4EEc.x:բQ|>_muuիݵ׮][SSO뱷_vƍ!]cygϘ >YZp j/9s^dʔ)rqq 4a„&_udYXX1 ￯ƍxxx3qvfyGի~L>ZQȟ={X,wC<<: ޿Sn&"## j?$?^H(4r??7~ v'Ȼ!BH{6?)I yqtd:wfNl}7q^{6ꢢÇ3 uV摑/^0… X[[>}ԩSVVVM Zp!0ǎ`bbRVVƮ/ t-o$%ɲ@WWwÆ BŋǏge<::]0̨Q;ٳꜜ/cimrޝEQ-ܗ*-h$坑iy?;ʣI߯*C4AMTDn9]s~Tv}?1;;3{f>baÆVmo/hsh<9!!A(FFF ax뭷;ܽ[dƍS^^^^^{nv͛7w1裏{"BƢܝeVF_8)+SEjV^k׮lb#G$ٜ޲=zhs֟c_6 ƍٗIw??]<3{vWeʹs6eWPHd&111""^B ukj+V3Sz[ܽQh3gdsQMLLؗ>>>d w?w w^bw 00atlj'D(w'RY?y)))nnn3y䲲2Emmmmmm---+ gFOOd%WWWw1wo)Yz1VVV555Ih#1.h``wic>| %+Ti|j z[mzٜelN?Br] ;@]D9=ܥ](y3f>}zժUO577KOvȀ;w޻wť.Jx)|R ic~ ,]4++MbqW*b5cee}޽;mMY=3K:::\BQ_5&ΝSTOF=\ٜ_~ kaii&&&//!++kΝAAAjUe577Kթ5b"_~%m۶744)ܫN _UUX;;;lmm|w}:-X|&&&ITVmbݓbqRRlL.ܝWb߾}{577GܫZYYilluVUWDd3 Ä-Z(8dsI>J-Z󭭭w!&8c GGG>o``0`5kd>377722^m/;aŋ-022:u|Vzz:9((yَijjڲeK@@Ѹqd:hS*nٲ[OO㣏>T @ Xl+Wx; {?Z:n)e ܹs344\x1".ܝa7{A@@Mz q{+&a֯_u=ɨW^yoAg0C7fY^ K|79oQ]]իWs!D83 ̸ɤz<5+UkD?j |ܹsrL6-99Y$OlUK9sfTTԿ/c!?BPrh.BCq lmϐ NM6 4cXn ݠv[`3gvɯNd#xbt6#Ng^~Gٶmjt͵ 1k`Z:Eןcƌ)Sr!O?8qB(N8qĉaaa\Gׇݻw̙3믿ZQQaff6eʔ^xa,BڠgϞJaaa\=OFݼAp0f:RKΞ=o566ʪ_~NNN13=i4=w&&&'O|gk icv,Zu(DM>]UUU[[+Ammm]]H$D짤RiMM ;m&)YɱBizj\5~2JdWx%r QlbEcT44@OOyqBqttt/^76Qk(q'a !zzBrizɐX?wACj`6l؀BԊw]ÈHIbzJIv:B̸qe& IDATB !]%K稫:BrwBQ:{+3f`]Sh H%guB!͹B !O>Xu(DywBQ{'Cw؈۹h< !D4n|g޺uΎ}^/ŌƓ!ge+y3-(B|{\G42 !Dh\^\\b vvvW4is6o_cB|vDwwI*-ABѸ>3&Lh=իgϞɉ"'C  ttuXDH$ܝBNrwGGG//6 ,рh<\X۶MMJ@*ŭ[\GF4`un4.wzT*}7{4O(@ݻ!pHܝBNs &455)љ8qb{.'C9|)ƻeeHz<&JKQBQ:MǏ T*}뭷z('CTat9}}h_77#?C"=XX E!jDsw8qbOTOdwvEfH)-3 xg|qq~2DUBCccϧfHϡ" !D544w0aDﯹU[|?ӧ QC KK=ǣܽ  5{PP>;WXGR? kkȮ/I${Ә&s\A!jHCsw]]ݐ-_\Q? ap61 >>\A!jHCsw'N՝={zP?-WW\B0 1 =9.!h %D"YvJ*~27ǹspwsYY;!N5---BP$bX\SSΗH$bX0...999gg?y'h.BBpn'=R)744D>yy9"XWWXUGhkk700`bbͻfs*M!DIxL߹rŠʊJ9l^[[|CvvvVVVNNN^@(ĢE8z~?ښX, BT* MMMMMMl0rX,ti Aծ\tuu 蘙v<=611a"ڋ/B$BBqBꍹ{sssAAAvv;w JKK4[YYY>$611166666Mgtܹcj=A,D"@ ;mϞůfVWW$5*## 3O/fA&z;n9ma_ӱ .ݚ蘛9r0077x:::&&& CJ8[Veرm'kjjR)0{X= RH$bB#6gNKKĄMMMX`aaN+wI' øq 5}ffffeeegggee-,,]]]]]]i ncf544<*??_Ws^>xA(++++++//g Y666*d6R#.vR)===;;;{{{vΎ,ׯ_?gg.)* u(z(w/++KIIINNNIIzT*577ϗ=DFg)((SBUIIDQQ&f>occckk`ccccc`kkNo]wjJ"TTTTTT+L7HRvaggggggGGG '''333nWC(uU"Pa.Ϟ=/$&&޹sG[[{РAAAAFRQ}BuuuzzzZZZjjKb'M4i$gggcD"Q^^^nno^^^QQld!CCCWWWGGGGGG>zy6gJJJ X=...nnnez>L#Q~~Ǐ>}:%%E" 2$<<|ܸq#F;|ƍ .:uܹs'OĦtQj6/))***),,doVu4u* \A!Ii{~~ÇׯL81<<<<>>~~~iw:BQOkjj8pС4KK3f̝;744T~Ed޽ݼyeܹ'qЃ^z?3//=yKXv zb|>c WU1aסBzz~_|1,,L}N&ׯ_W^^>y+VL4I= 333^eouss2d{VM50 "H>Ȑl3b<|#rU֬sz8!Dm=^~> 11qܸq3<9u]voݺu坼bqjjjRRRRRҥKmmmCCCؔ#=MSSS/\PQQ?bĈcDz;Q (cv =??ʕǏ5j'|3Ϩ:2ұ?[n :"EW^?ydFFT*utt;v1cBCCa[n?>99:thxxԩSz)㫯%v@TǑB4fnc#Dܽ{7999--ԩSnnncǎZܙ34 #$w/++={vJJ[onݺR˗/pС~H$O>|ɓ'A```ddԩSLQ5a\wu g}vܹ'O$w[zFB<gDD ֓aU]]lٲG^hQ7tȑʠٳgGFFXyyyy񱱱sy}||z#0bm뉺!DS9sf̙Æ Hý{Ym06lXnoqFUNLL/GGW_}u=|N܌;0zɺw5kT{Q kP_|5IIIӦM{N>ĝ(T]ɽ^>C}嗟~*x1c&N(u]60B8PUU5a„`8UO!@{QQѴiӦNk.zR3w/?E"˃IJJJII3gm$ja:UGy楥;w)((7Dʯ).GJ%BF+WV]h{rϒ%K9fݽ{7""r˖-/ro>~cQz^t0{}wyL*{o2!hIIIǏ߶mw<~ ƍ377zwB!֌3x<[ZZ9---xgCxuuuK,611>}z~~l .KNNN|>*,,̙3]\#6lpssۻwc/ ?3exQF\re?qGRۃlmmuuu7cƌijgx<zx"/jÆ l' 닋9u[[[Y Я_?J]& _ufff sFd{ƍٳ|ݦ6ojvǏx:::]og@GG'Nt%;ݛ^uJu¹233>L9ϼ¼67;וܽ+#!pIII*_ؑ#G=''ls=oݶmyuZr㉏9z(???ebbbDDq}}Ne9sF6'77lmm3r˗wӫ60___aaaW޵kWvv6nȾdOטƾw^slmmlo{w^0v 00loq>̮3[CM]ZJu,[,((H ]LfNsvN[l/+{?¹G~ܹ ##C嵶 ˞ҒuŊdZ:(|n͝Ηj"KA>OO?帺*\UXJJê&O\VVƾ{1VVV555I 5644/eۏg WQmuCCСCHR3ZӽUwT.~榄ֳlgvktzzzm~qLGB#cܿ\`@ssssssKK {}K.:KKK[[[>_WWgcccll>ca.] bJ`%VRVVqf|}}SSS_SRR6outڌA:88xǎ _Mzz:XktN30 7n 700شi,qo@mfT2s]ܛNJE‰7oN>JqFFFYZZk~]GB\?sRtܸq8чvy޼ywUEiiiy TQzW\qi@^^ޢE.^B[ZG  !#̰'CCÐ[nwBuuug<==UQŨQ]w^HNNVEE#??ĉh뉡t>}tOO .8pի O}rIIsz  !i xMM͜9s:>xLFveO """***}۷oOOO0`K/4o<ٽh+XW>f zZaaCw ww{.""bر}>OHH8~xAAMDDԩS'OZp^UUBI***Z|ɓ'_|uyxx@dS|_|anncǎ &p477;vݻcƌ3fLhhÕ|՞$%%%'''%%ԩAAAU{ڊ!ҥܝ+|l=v矋UV\ IDAT}\Ն7o:u*999%%0(((44tر#G1;]x1))/^=zthhhxx8|9ǝ;Kj#w HݻaÆS._|̘1 VPPg޽Bpɒ%!0o߾p… RRRrrrtuu''gذa˗/3g>q)S~~>utt|}}}|| #%Din޼u[n577ٱؔՕHz alC! խܝUZZ?YYY͚5+<<|ܸqJ Q\r%11ׯ_www1cƜ9s uh=۷[nD">>>jvCRCCCnnn^^ޝ;wdzyy9333??0 ёxxW@BJe#GC>s4.M 3gΜP!Ds)3w_N>}ٚ//#FW 0@N)))axbfffKK'OK (dHyyyMMMܜ]]]et_uuuIIIaaaqq1;QRRRTT@OOUx@ /ñgסBFSI.#HRRR~?|ѣG6lX``jo^駹%%y6`m 8:ְ-Eo B6g"D{l1[[[vB[>D7ruʳl.j744b6Ql  BayyXu~dG섓c r>ƏݻZ jvˑmKI'iɒNP(J[gzȈ=+lnntttLLLWLLLTTZSS1kjjR)0l&Smm-{3BAfff:::fff޵÷6II?wcC!ܽbP)G>DG$Ey6~lf&&&lgk9J[0anh#};wRc\6%lj0,eONxJE"QsssK$!{zA__x<‘YFghh9(:#FQC!򷾚&!##燭[3EF4̬YukMM;B!.^ Bup,BBн8A̞BT7qbc)q'^r^N!<1X/ W^#֯Ge%Bݾ}ض va@C!{=="<gߗ.!C?p!np6BիX k`C!r^FO?^^rsƍ(,ĦM8w "mUH!OD$<u(B@{ë7xV!'{'b0 B!~4!JJZZ "* ׯ#9X>>FmmFIQ# 󑑁_0BHE{dfgptĪU():,BH_ᇈѣ:B!]-`rDE᯿G3݋cBHG(wW#XؼII4'"!!ۙ3X ':B!]c*".b1"#1x0:BpXP!trw5!9XXבBz\:B!]݅ 6ocLl Z""p-7cƠ_?> }}!%k//DG#?kY\EHAƏ=Μ)B*5-֯Gq1v1!&!='Ǒh!<5#H@d$s'z 6Ξ5Byӧ#) \D!D(w'*/c ,\oolQ/uu7|? }}"ZU:#+ cb*ZT=l0cccCCq%<ʨ_rS7n;# e^pᥗ^rrrVVVaaagΜ+ӕRۃlmmuuu7cƌD5NQa$$$a]KCBF`ƍL~ ̜\z^xA~~KK˼yZdBPx<ޱc{%/lg05NfdfΤ6;;5C!sm}`Ff㙖_066.**jhhHMM6m.9::8qΌKMM>|8kײ<쳧NMMM_}Çm3_dCCCׯ/..njjJHH Sn<33 {&7yUh!( xg `vPb SOعsg?,?sȑgf_&&&FDDwW(YNKz]vegg?z+̙̙ԆWI 3f chu(B8cڹTMHOz_}ᅦ.oҲEחش~B]]]maa!iddTWW #ojj:rܹsYd3ْ_|1??_ɓ'۷ֶ[f`x8aoٳXu4B8@N#HfgcDG}3kAO:0#lnnnnnniiiii0ҥK]ӒSRR6o!E(dne--f&-Ɋ mnÆ pgٜ8sJVv7s&3s&ar3|8clLd!ywkb*`^ (!!47?V1/5k|%%%ӧO#:]v766޹s'&&&883͛7WWW ~a K~ᇆommcT ]3g23g2ԆKIa<={{)C!ҋ83/5 __cRSf@l,qhz|!nŴiؾ7Z!n/((MHJ€@J al9x#%BPNccZ\;J`07`L0ܸp"QN--DD - …Ѩ:2Bԙ36 Gass"KQNmLރ#VBI a8JK1{6&M믿7 BA;㼼|^テp&a6 7n ) Ɔ!v`kQ\ĉHH:,Bq" úu?qBCBH@;Q#zz_!."#1dTudX c";!Ft4lm#p6a)K/kc>^hz7w+V琝wB!=λ58tw\Ǥ$R|>ee"ާ_ 55x Y[[c"q;!]cdŋq&Cu5BB0l>aayd(q{b@|!""_ظwB!ܝǡecBhqY̟߽sMQWmп?,q®]pw:,B! Ʈ]04ĢEx uLOVVhh}}TUp/{jLB.!Bx ⍋J1ںvڭ]/Uθ0tgYvu[wi Sv*"QX&;Bh)x~p'oys76>Ç`TJOЧWC;OFQ}=.F[Э[l<=)9{?raô yy@[e IIJ;;8dwlLȠZ:v]Hzc'[?ޮj2[oZ͔̤ hpN$恇?Z"#ڳX*` ݝl :sxqDѿE11u+ٳw~س8ܫ 0:z,ڶ}d2kzsh͚{ J%Lz5:sf =g̠^ޣEب L=jo7ޠޣ zz{{VVX,:`x5v[r,;wQVkϞOtuu ...G$cNI/Deec ^rsx:w&i\:pT*Z22W6V߯l6u:bj (}'DG(zyy|@%|e______W_OJ%54<!| 05*ɤ=yrƧKK,j&Fc=>8>{xx =*$6SGqq8…nf2F-y`0G,oV$ǤyfA"bD2ވi4<6\.CklCvdbQ,Qە??????X7X, >)j{zzCCCL{WWW&I$D(Je2Yhhh@@d*]KzcGx)>PI0AFa"rqq bX*b???itww3@---mmmmmmQ{{{[[sFrR|Gosf++Օ<=I($ooLJKY8*'xuuuUUUU5440y[& dR;$>IDATfZtTMMMF M:]Vn0ht.. qxx9r\ ;H÷oVjZVՙL&¼.JTWW0 冄DFF* (9s #CvJUQQ;w xꫯk7oDlYYYGsΛo>slNɅƥ?##CP$==r9;8쌌osΌHKK9sWJJJ]]_|y\._sk"{ ̙3y睁ѻ ݻw=)p>裿nnn.38$N'Hvv!?b27nwww7az|KZ,M6~HPhZ71]fVV~LMMцp#)]wuu?d{!_}qtl߾߿B 8ğ.ю9l0i/$$}}}Yh޽ l_~?CCCMMM$O>C\a)J΁+WQFF-ZtMV_GYb~۔dyyyZ!))V\9&uX]ݻwηmd(J[]]]<رclN[on:xN>m[7Ѽy={fx<х ј-...^hr [ZZ\#HtgΜ5%"//08#v|ηmdO^zilWNZnD"9qۅhlk4___g0['7|s`0ttt |3YY\Аm_Lk8bym g+٬@&v{gX]x<8m ===>>>OTTۺukggg~~>ۅýBBBnݺvZ]vݹs`0Xq>Ifl6[,b˸-NvwXc=mҳfw"RUdwpP7nTTl2ҥKl.\ 1S3Zcgf"s̙3Ɯ`DPQqqM&M&ʘ0GwTtQRRrڵ@ Ԛ5kVZv-ؽ{ ϟ?g"Z~f2>㞞SNܹӾ͛(==Fի̼1mIIIy]]`0Ǐ~6'kSN Nan]6SiONKMMW*l`cQ]]-ٮj}ȴ#?^۲e}ć%wcL`Wn۶m玧汻~>@^Z"ֲ] 830J񉎎nlld{ɯ>>>|>?99>uGCt\o>ۨk[DEEx<>`?ٳg_{5Tr=<< Ezz7FkktW;!!!\.ifwZ[[}}}wء'R__d__k׮] 8 3*99/>Mb`tLv940\./..޴iSjj?_TTvEWXXjժ;vlٲ;8@pbɴ|W_}#]yfJJʊ+HR}|> ӈ|rvvvmmŋKv]288xUV-^>''ŋK.e.pJj;v,??_$m۶mΝrPYYyر'Nhڟ;w|YZZZN8yݥK&''0ׯn۶-00`:@vgZϞ={ĉٳgoܸ1%%%&&8Z|MvvvUUϺumۖ0axbnnӧR5kJT*e: Ν;wٖФx777iׯ9ssQ*J2!!a̙lWN/(((((+WT*k׮]p!4իWEEE&I.DGG/^ӓ T*JU]]rJebbb\\܌3خ EEEEEEnnngrEϟ/ .Xj͛7U*UIIɭ[L&}˖- dwxvr|ii` PB`B1oc@&;Tnkk֎&tvvvt:BЖ BP(|emt:]^tZVVkXFo>ǻx{{s8HDD>>>D$8P(tuu򚬀k2fNX,Z4 ZV`>z#L^^^cد<oR*pja``@39 #ǓmcxFq``౻1Qx|@ `2:sa[x 8 qAvp9?@j#ɉIENDB`mapnik-3.0.9/docs/textrendering.svg000066400000000000000000000345761262555547000173670ustar00rootroot00000000000000 textrendering Renderer Renderer text_symbolizer_helper text_symbolizer_helper Renderer->text_symbolizer_helper creates text_placements text_placements text_placement_info text_placement_info text_placements->text_placement_info get_placement_info() text_symbolizer_properties text_symbolizer_properties text_placements->text_symbolizer_properties properties text_placement_info->Renderer used by text_placement_info->text_placement_info next() text_placement_info->text_symbolizer_properties properties text_path text_path text_placement_info->text_path placements node_ node node_->text_symbolizer_properties tree_ text_node text_node node_->text_node list_node list_node node_->list_node format_node format_node node_->format_node processed_text processed_text text_symbolizer_properties->processed_text process() TextSymbolizer TextSymbolizer TextSymbolizer->text_placements placement_options_ text_path->Renderer used by processed_text->Renderer owned by string_info string_info processed_text->string_info get_string_info() placement_finder placement_finder string_info->placement_finder used by text_symbolizer_helper->placement_finder creates placement_finder->text_path creates list_node->text_node list_node->format_node format_node->text_node mapnik-3.0.9/fonts/000077500000000000000000000000001262555547000141465ustar00rootroot00000000000000mapnik-3.0.9/fonts/build.py000066400000000000000000000024301262555547000156160ustar00rootroot00000000000000# # This file is part of Mapnik (c++ mapping toolkit) # # Copyright (C) 2015 Artem Pavlenko # # Mapnik is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # import os import glob Import('env') if not env['SYSTEM_FONTS']: # grab all the deja vu fonts includes = glob.glob('*/*/*.ttf') # grab single unifont ttf (available at http://unifoundry.com/unifont.html) includes.extend(glob.glob('unifont*.ttf')) target_path = env['MAPNIK_FONTS_DEST'] if 'uninstall' not in COMMAND_LINE_TARGETS: env.Alias(target='install', source=env.Install(target_path, includes)) env['create_uninstall_target'](env, target_path) mapnik-3.0.9/include/000077500000000000000000000000001262555547000144405ustar00rootroot00000000000000mapnik-3.0.9/include/build.py000066400000000000000000000031141262555547000161100ustar00rootroot00000000000000# # This file is part of Mapnik (c++ mapping toolkit) # # Copyright (C) 2015 Artem Pavlenko # # Mapnik is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # import os from glob import glob Import('env') base = './mapnik/' subdirs = [ '', 'csv', 'svg', 'wkt', 'cairo', 'grid', 'json', 'util', 'group', 'text', 'text/placements', 'text/formatting', 'markers_placements' ] if env['SVG_RENDERER']: subdirs.append('svg/output') if env['GRID_RENDERER']: subdirs.append('grid') if 'install' in COMMAND_LINE_TARGETS: for subdir in subdirs: pathdir = os.path.join(base,subdir,'*.hpp') includes = glob(pathdir) inc_target = os.path.normpath(env['INSTALL_PREFIX']+'/include/mapnik/'+subdir) env.Alias(target='install', source=env.Install(inc_target, includes)) env['create_uninstall_target'](env, os.path.normpath(env['INSTALL_PREFIX']+'/include/mapnik/')) mapnik-3.0.9/include/mapnik/000077500000000000000000000000001262555547000157175ustar00rootroot00000000000000mapnik-3.0.9/include/mapnik/agg_helpers.hpp000066400000000000000000000035001262555547000207060ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_AGG_HELPERS_HPP #define MAPNIK_AGG_HELPERS_HPP // mapnik #include // agg #include "agg_gamma_functions.h" namespace mapnik { template void set_gamma_method(T & ras_ptr, double gamma, gamma_method_enum method) { switch (method) { case GAMMA_POWER: ras_ptr->gamma(agg::gamma_power(gamma)); break; case GAMMA_LINEAR: ras_ptr->gamma(agg::gamma_linear(0.0, gamma)); break; case GAMMA_NONE: ras_ptr->gamma(agg::gamma_none()); break; case GAMMA_THRESHOLD: ras_ptr->gamma(agg::gamma_threshold(gamma)); break; case GAMMA_MULTIPLY: ras_ptr->gamma(agg::gamma_multiply(gamma)); break; default: ras_ptr->gamma(agg::gamma_power(gamma)); } } } #endif // MAPNIK_AGG_HELPERS_HPP mapnik-3.0.9/include/mapnik/agg_pattern_source.hpp000066400000000000000000000040171262555547000223050ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_AGG_PATTERN_SOURCE_HPP #define MAPNIK_AGG_PATTERN_SOURCE_HPP // mapnik #include #include // agg #include "agg_color_rgba.h" namespace mapnik { class pattern_source : private util::noncopyable { public: pattern_source(image_rgba8 const& pattern, double opacity = 1.0) : pattern_(pattern), opacity_(opacity) {} unsigned int width() const { return pattern_.width(); } unsigned int height() const { return pattern_.height(); } agg::rgba8 pixel(int x, int y) const { unsigned c = pattern_(x,y); return agg::rgba8(static_cast((c & 0xff) * opacity_), static_cast(((c >> 8) & 0xff) * opacity_), static_cast(((c >> 16) & 0xff) * opacity_), static_cast(((c >> 24) & 0xff) * opacity_)); } private: image_rgba8 const& pattern_; double opacity_; }; } #endif // MAPNIK_AGG_PATTERN_SOURCE_HPP mapnik-3.0.9/include/mapnik/agg_rasterizer.hpp000066400000000000000000000024631262555547000214450ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_AGG_RASTERIZER_HPP #define MAPNIK_AGG_RASTERIZER_HPP // mapnik #include // agg #include "agg_rasterizer_scanline_aa.h" namespace mapnik { struct rasterizer : agg::rasterizer_scanline_aa, util::noncopyable {}; } #endif // MAPNIK_AGG_RASTERIZER_HPP mapnik-3.0.9/include/mapnik/agg_render_marker.hpp000066400000000000000000000132351262555547000220720ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #include #include #include #include #include #include #include #include #include // agg #include "agg_color_rgba.h" #include "agg_renderer_base.h" #include "agg_renderer_scanline.h" #include "agg_rendering_buffer.h" #include "agg_scanline_u.h" #include "agg_image_filters.h" #include "agg_trans_affine.h" #include "agg_span_allocator.h" #include "agg_image_accessors.h" #include "agg_pixfmt_rgba.h" #include "agg_span_image_filter_rgba.h" #include "agg_span_interpolator_linear.h" namespace mapnik { template void render_vector_marker(SvgRenderer & svg_renderer, RasterizerType & ras, RendererBaseType & renb, box2d const& bbox, agg::trans_affine const& tr, double opacity, bool snap_to_pixels) { agg::scanline_u8 sl; if (snap_to_pixels) { // https://github.com/mapnik/mapnik/issues/1316 agg::trans_affine snap_tr = tr; snap_tr.tx = std::floor(snap_tr.tx + .5); snap_tr.ty = std::floor(snap_tr.ty + .5); svg_renderer.render(ras, sl, renb, snap_tr, opacity, bbox); } else { svg_renderer.render(ras, sl, renb, tr, opacity, bbox); } } template void render_raster_marker(RendererType renb, RasterizerType & ras, image_rgba8 const& src, agg::trans_affine const& tr, double opacity, float scale_factor, bool snap_to_pixels) { using color_type = agg::rgba8; using const_rendering_buffer = util::rendering_buffer; using pixfmt_pre = agg::pixfmt_alpha_blend_rgba; agg::scanline_u8 sl; double width = src.width(); double height = src.height(); if (std::fabs(1.0 - scale_factor) < 0.001 && (std::fabs(1.0 - tr.sx) < agg::affine_epsilon) && (std::fabs(0.0 - tr.shy) < agg::affine_epsilon) && (std::fabs(0.0 - tr.shx) < agg::affine_epsilon) && (std::fabs(1.0 - tr.sy) < agg::affine_epsilon)) { const_rendering_buffer src_buffer(src); pixfmt_pre pixf_mask(src_buffer); if (snap_to_pixels) { renb.blend_from(pixf_mask, 0, static_cast(std::floor(tr.tx + .5)), static_cast(std::floor(tr.ty + .5)), unsigned(255*opacity)); } else { renb.blend_from(pixf_mask, 0, static_cast(tr.tx), static_cast(tr.ty), unsigned(255*opacity)); } } else { using img_accessor_type = agg::image_accessor_clone; using interpolator_type = agg::span_interpolator_linear<>; //using span_gen_type = agg::span_image_filter_rgba_2x2; using span_gen_type = agg::span_image_resample_rgba_affine; using renderer_type = agg::renderer_scanline_aa_alpha, span_gen_type>; double p[8]; p[0] = 0; p[1] = 0; p[2] = width; p[3] = 0; p[4] = width; p[5] = height; p[6] = 0; p[7] = height; tr.transform(&p[0], &p[1]); tr.transform(&p[2], &p[3]); tr.transform(&p[4], &p[5]); tr.transform(&p[6], &p[7]); agg::span_allocator sa; agg::image_filter_lut filter; filter.calculate(agg::image_filter_bilinear(), true); const_rendering_buffer src_buffer(src); pixfmt_pre pixf(src_buffer); img_accessor_type ia(pixf); agg::trans_affine final_tr(p, 0, 0, width, height); if (snap_to_pixels) { final_tr.tx = std::floor(final_tr.tx+.5); final_tr.ty = std::floor(final_tr.ty+.5); } interpolator_type interpolator(final_tr); span_gen_type sg(ia, interpolator, filter); renderer_type rp(renb, sa, sg, unsigned(opacity*255)); ras.move_to_d(p[0],p[1]); ras.line_to_d(p[2],p[3]); ras.line_to_d(p[4],p[5]); ras.line_to_d(p[6],p[7]); agg::render_scanlines(ras, sl, rp); } } } mapnik-3.0.9/include/mapnik/agg_renderer.hpp000066400000000000000000000154401262555547000210600ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_AGG_RENDERER_HPP #define MAPNIK_AGG_RENDERER_HPP // mapnik #include // for MAPNIK_DECL #include #include // for noncopyable #include // for rule, symbolizers #include // for box2d #include // for view_transform #include // for composite_mode_e #include #include #include #include // stl #include // fwd declaration to avoid dependence on agg headers namespace agg { struct trans_affine; } // fwd declarations to speed up compile namespace mapnik { class Map; class feature_impl; class feature_type_style; class label_collision_detector4; class layer; class color; struct marker; class proj_transform; struct rasterizer; struct rgba8_t; template class image; } namespace mapnik { template class MAPNIK_DECL agg_renderer : public feature_style_processor >, private util::noncopyable { public: using buffer_type = T0; using processor_impl_type = agg_renderer; using detector_type = T1; // create with default, empty placement detector agg_renderer(Map const& m, buffer_type & pixmap, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0); // create with external placement detector, possibly non-empty agg_renderer(Map const &m, buffer_type & pixmap, std::shared_ptr detector, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0); // pass in mapnik::request object to provide the mutable things per render agg_renderer(Map const& m, request const& req, attributes const& vars, buffer_type & pixmap, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0); ~agg_renderer(); void start_map_processing(Map const& map); void end_map_processing(Map const& map); void start_layer_processing(layer const& lay, box2d const& query_extent); void end_layer_processing(layer const& lay); void start_style_processing(feature_type_style const& st); void end_style_processing(feature_type_style const& st); void render_marker(pixel_position const& pos, marker const& marker, agg::trans_affine const& tr, double opacity, composite_mode_e comp_op); void process(point_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(line_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(line_pattern_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(polygon_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(polygon_pattern_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(raster_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(shield_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(text_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(building_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(markers_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(group_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(debug_symbolizer const& sym, feature_impl & feature, proj_transform const& prj_trans); void process(dot_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); inline bool process(rule::symbolizers const&, mapnik::feature_impl&, proj_transform const& ) { // agg renderer doesn't support processing of multiple symbolizers. return false; } void painted(bool painted); bool painted(); inline eAttributeCollectionPolicy attribute_collection_policy() const { return DEFAULT; } inline double scale_factor() const { return common_.scale_factor_; } inline attributes const& variables() const { return common_.vars_; } protected: template void debug_draw_box(R& buf, box2d const& extent, double x, double y, double angle = 0.0); void debug_draw_box(box2d const& extent, double x, double y, double angle = 0.0); void draw_geo_extent(box2d const& extent,mapnik::color const& color); private: buffer_type & pixmap_; std::shared_ptr internal_buffer_; mutable buffer_type * current_buffer_; mutable bool style_level_compositing_; const std::unique_ptr ras_ptr; gamma_method_enum gamma_method_; double gamma_; renderer_common common_; void setup(Map const& m); }; extern template class MAPNIK_DECL agg_renderer>; } // namespace mapnik #endif // MAPNIK_AGG_RENDERER_HPP mapnik-3.0.9/include/mapnik/attribute.hpp000066400000000000000000000040511262555547000204330ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_ATTRIBUTE_HPP #define MAPNIK_ATTRIBUTE_HPP // mapnik #include #include #include // stl #include #include namespace mapnik { struct attribute { std::string name_; explicit attribute(std::string const& name) : name_(name) {} template V const& value(F const& f) const { return f.get(name_); } std::string const& name() const { return name_;} }; struct geometry_type_attribute { template V value(F const& f) const { return static_cast(util::to_ds_type(f.get_geometry())); } }; struct global_attribute { std::string name; explicit global_attribute(std::string const& name_) : name(name_) {} template V const& operator() (C const& ctx) { return ctx.get(name); } }; using attributes = std::unordered_map; } #endif // MAPNIK_ATTRIBUTE_HPP mapnik-3.0.9/include/mapnik/attribute_collector.hpp000066400000000000000000000221201262555547000224760ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_ATTRIBUTE_COLLECTOR_HPP #define MAPNIK_ATTRIBUTE_COLLECTOR_HPP // mapnik #include #include #include #include #include // for expression_ptr, etc #include #include // for path_processor_type #include // for path_expression_ptr #include // for text_placements #include #include #include #include #include #pragma GCC diagnostic push #include #include #pragma GCC diagnostic pop // stl #include #include // std::ref namespace mapnik { template struct expression_attributes { explicit expression_attributes(Container& names) : names_(names) {} void operator() (attribute const& attr) const { names_.emplace(attr.name()); } template void operator() (binary_node const& x) const { util::apply_visitor(*this, x.left); util::apply_visitor(*this, x.right); } template void operator() (unary_node const& x) const { util::apply_visitor(*this, x.expr); } void operator() (regex_match_node const& x) const { util::apply_visitor(*this, x.expr); } void operator() (regex_replace_node const& x) const { util::apply_visitor(*this, x.expr); } template void operator() (T const&) const {} private: Container& names_; }; class group_attribute_collector : public util::noncopyable { private: std::set& names_; bool expand_index_columns_; public: group_attribute_collector(std::set& names, bool expand_index_columns) : names_(names), expand_index_columns_(expand_index_columns) {} void operator() (group_symbolizer const& sym); }; template struct extract_attribute_names { explicit extract_attribute_names(Container& names) : names_(names), f_attr_(names) {} void operator() (mapnik::expression_ptr const& expr) const { if (expr) { util::apply_visitor(f_attr_, *expr); } } void operator() (mapnik::transform_type const& expr) const { if (expr) { transform_processor_type::collect_attributes(names_, *expr); } } void operator() (mapnik::text_placements_ptr const& expr) const { if (expr) { expression_set::const_iterator it; expression_set expressions; // TODO - optimize (dane) expr->add_expressions(expressions); for (it=expressions.begin(); it != expressions.end(); ++it) { if (*it) util::apply_visitor(f_attr_, **it); } } } void operator() (mapnik::path_expression_ptr const& expr) const { if (expr) { path_processor_type::collect_attributes(*expr,names_); } } template void operator() (T const&) const {} private: Container& names_; expression_attributes > f_attr_; }; struct symbolizer_attributes { symbolizer_attributes(std::set& names, double & filter_factor) : filter_factor_(filter_factor), f_attrs_(names), g_attrs_(names, true) {} template void operator () (T const& sym) { for (auto const& prop : sym.properties) { util::apply_visitor(f_attrs_, prop.second); } } void operator () (raster_symbolizer const& sym) { boost::optional filter_factor = get_optional(sym, keys::filter_factor); if (filter_factor) { filter_factor_ = *filter_factor; } else { boost::optional scaling_method = get_optional(sym, keys::scaling); if (scaling_method && *scaling_method != SCALING_NEAR) { filter_factor_ = 2; } } for (auto const& prop : sym.properties) { util::apply_visitor(f_attrs_, prop.second); } } void operator () (group_symbolizer const& sym) { g_attrs_(sym); } private: double & filter_factor_; extract_attribute_names > f_attrs_; group_attribute_collector g_attrs_; }; class attribute_collector : public util::noncopyable { private: std::set & names_; double filter_factor_; expression_attributes > f_attr; public: attribute_collector(std::set& names) : names_(names), filter_factor_(1.0), f_attr(names) {} template void operator() (RuleType const& r) { typename RuleType::symbolizers const& symbols = r.get_symbolizers(); symbolizer_attributes s_attr(names_,filter_factor_); for (auto const& sym : symbols) { util::apply_visitor(std::ref(s_attr), sym); } expression_ptr const& expr = r.get_filter(); util::apply_visitor(f_attr,*expr); } double get_filter_factor() const { return filter_factor_; } }; inline void group_attribute_collector::operator() (group_symbolizer const& sym) { // find all column names referenced in the group symbolizer std::set group_columns; attribute_collector column_collector(group_columns); expression_attributes > rk_attr(group_columns); // get columns from symbolizer repeat key expression_ptr repeat_key = get(sym, keys::repeat_key); if (repeat_key) { util::apply_visitor(rk_attr, *repeat_key); } // get columns from child rules and symbolizers group_symbolizer_properties_ptr props = get(sym, keys::group_properties); if (props) { for (auto const& rule : props->get_rules()) { // note that this recurses down on to the symbolizer // internals too, so we get all free variables. column_collector(*rule); // still need to collect repeat key columns if (rule->get_repeat_key()) { util::apply_visitor(rk_attr, *(rule->get_repeat_key())); } } } // get indexed column names value_integer start = get(sym, keys::start_column); value_integer end = start + get(sym, keys::num_columns); for (auto const& col_name : group_columns) { if (expand_index_columns_ && col_name.find('%') != std::string::npos) { // Note: ignore column name if it is '%' by itself. // '%' is a special case to access the index value itself, // rather than acessing indexed columns from data source. if (col_name.size() > 1) { // Indexed column name. add column name for each index value. for (value_integer col_idx = start; col_idx < end; ++col_idx) { std::string col_idx_str; if (mapnik::util::to_string(col_idx_str,col_idx)) { std::string col_idx_name = col_name; boost::replace_all(col_idx_name, "%", col_idx_str); names_.emplace(col_idx_name); } } } } else { // This is not an indexed column, or we are ignoring indexes. // Insert the name as is. names_.emplace(col_name); } } } } // namespace mapnik #endif // MAPNIK_ATTRIBUTE_COLLECTOR_HPP mapnik-3.0.9/include/mapnik/attribute_descriptor.hpp000066400000000000000000000052201262555547000226700ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_ATTRIBUTE_DESCRIPTOR_HPP #define MAPNIK_ATTRIBUTE_DESCRIPTOR_HPP #include namespace mapnik { enum eAttributeType { Integer=1, Float =2, Double =3, String =4, Boolean =5, Geometry=6, Object=7 }; class attribute_descriptor { public: attribute_descriptor(std::string const& name,unsigned type, bool primary_key=false, int size=-1, int precision=-1) : name_(name), type_(type), size_(size), precision_(precision), primary_key_(primary_key) {} attribute_descriptor(attribute_descriptor const& other) : name_(other.name_), type_(other.type_), size_(other.size_), precision_(other.precision_), primary_key_(other.primary_key_) {} attribute_descriptor& operator=(attribute_descriptor rhs) { using std::swap; std::swap(name_, rhs.name_); std::swap(type_, rhs.type_); std::swap(size_, rhs.size_); std::swap(precision_, rhs.precision_); std::swap(primary_key_, rhs.primary_key_); return *this; } std::string const& get_name() const { return name_; } unsigned int get_type() const { return type_; } bool is_primary_key() const { return primary_key_; } int get_size() const { return size_; } int get_precision() const { return precision_; } private: std::string name_; unsigned int type_; int size_; int precision_; bool primary_key_; }; } #endif // MAPNIK_ATTRIBUTE_DESCRIPTOR_HPP mapnik-3.0.9/include/mapnik/boolean.hpp000066400000000000000000000043201262555547000200460ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_BOOLEAN_HPP #define MAPNIK_BOOLEAN_HPP // mapnik #include #include // std #include #include namespace mapnik { class MAPNIK_DECL boolean_type { public: boolean_type() : b_(false) {} boolean_type(bool b) : b_(b) {} boolean_type(boolean_type const& b) : b_(b.b_) {} operator bool() const { return b_; } boolean_type & operator =(boolean_type const& other) { if (this == &other) return *this; b_ = other.b_; return *this; } private: bool b_; }; // Special stream input operator for boolean_type values template std::basic_istream & operator >> ( std::basic_istream & s, boolean_type & b ) { if ( s ) { std::string word; s >> word; bool result; if (util::string2bool(word,result)) b = result; } return s; } template std::basic_ostream & operator << ( std::basic_ostream & s, boolean_type const& b ) { s << ( b ? "true" : "false" ); return s; } } #endif // MAPNIK_BOOLEAN_HPP mapnik-3.0.9/include/mapnik/box2d.hpp000066400000000000000000000101441262555547000174460ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_BOX2D_HPP #define MAPNIK_BOX2D_HPP // mapnik #include #include // boost #include // agg // forward declare so that apps using mapnik do not need agg headers namespace agg { struct trans_affine; } namespace mapnik { /*! * A spatial envelope (i.e. bounding box) which also defines some basic operators. */ template class MAPNIK_DECL box2d : boost::equality_comparable , boost::addable, boost::dividable2, T, boost::multipliable2, T > > > > { public: using box2d_type = box2d; private: T minx_; T miny_; T maxx_; T maxy_; friend inline void swap(box2d_type & lhs, box2d_type & rhs) { using std::swap; swap(lhs.minx_, rhs.minx_); swap(lhs.miny_, rhs.miny_); swap(lhs.maxx_, rhs.maxx_); swap(lhs.maxy_, rhs.maxy_); } public: box2d(); box2d(T minx,T miny,T maxx,T maxy); box2d(coord const& c0, coord const& c1); box2d(box2d_type const& rhs); box2d(box2d_type const& rhs, agg::trans_affine const& tr); box2d(box2d_type&& rhs); box2d_type& operator=(box2d_type other); T minx() const; T miny() const; T maxx() const; T maxy() const; void set_minx(T v); void set_miny(T v); void set_maxx(T v); void set_maxy(T v); T width() const; T height() const; void width(T w); void height(T h); coord center() const; void expand_to_include(T x,T y); void expand_to_include(coord const& c); void expand_to_include(box2d_type const& other); bool contains(coord const& c) const; bool contains(T x,T y) const; bool contains(box2d_type const& other) const; bool intersects(coord const& c) const; bool intersects(T x,T y) const; bool intersects(box2d_type const& other) const; box2d_type intersect(box2d_type const& other) const; bool operator==(box2d_type const& other) const; void re_center(T cx,T cy); void re_center(coord const& c); void init(T x0,T y0,T x1,T y1); void clip(box2d_type const& other); void pad(T padding); bool from_string(std::string const& str); bool valid() const; void move(T x, T y); std::string to_string() const; // define some operators box2d_type& operator+=(box2d_type const& other); box2d_type& operator*=(T); box2d_type& operator/=(T); T operator[](int index) const; box2d_type operator +(T other) const; //enlarge box by given amount box2d_type& operator +=(T other); //enlarge box by given amount // compute the bounding box of this one transformed box2d_type operator* (agg::trans_affine const& tr) const; box2d_type& operator*=(agg::trans_affine const& tr); }; template inline std::basic_ostream& operator << (std::basic_ostream& out, const box2d& e) { out << e.to_string(); return out; } } #endif // MAPNIK_BOX2D_HPP mapnik-3.0.9/include/mapnik/cairo/000077500000000000000000000000001262555547000170145ustar00rootroot00000000000000mapnik-3.0.9/include/mapnik/cairo/cairo_context.hpp000066400000000000000000000325341262555547000223750ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_CAIRO_CONTEXT_HPP #define MAPNIK_CAIRO_CONTEXT_HPP // mapnik #include #include #include #include #include #include #include #include #include #include #include #include // stl #include // cairo #include // stl #include #include // agg #include "agg_basics.h" namespace mapnik { template class box2d; using ErrorStatus = cairo_status_t; /// Throws the appropriate exception, if exceptions are enabled. inline void throw_exception(ErrorStatus status) { throw std::runtime_error(std::string("cairo: ") + cairo_status_to_string(status)); } //We inline this because it is called so often. inline void check_status_and_throw_exception(ErrorStatus status) { if(status != CAIRO_STATUS_SUCCESS) throw_exception(status); } template void check_object_status_and_throw_exception(T const& object) { check_status_and_throw_exception(object.get_status()); } class cairo_face : private util::noncopyable { public: cairo_face(std::shared_ptr const& library, face_ptr const& face); ~cairo_face(); cairo_font_face_t * face() const; private: class handle { public: handle(std::shared_ptr const& library, face_ptr const& face) : library_(library), face_(face) {} private: std::shared_ptr library_; face_ptr face_; }; static void destroy(void *data) { handle *h = static_cast(data); delete h; } private: face_ptr face_; cairo_font_face_t *c_face_; }; using cairo_face_ptr = std::shared_ptr; class cairo_face_manager : private util::noncopyable { public: cairo_face_manager(std::shared_ptr library); cairo_face_ptr get_face(face_ptr face); private: using cairo_face_cache = std::map; std::shared_ptr font_library_; cairo_face_cache cache_; }; class cairo_pattern : private util::noncopyable { public: explicit cairo_pattern(image_rgba8 const& data, double opacity = 1.0) { std::size_t pixels = data.width() * data.height(); const unsigned int *in_ptr = data.data(); const unsigned int *in_end = in_ptr + pixels; unsigned int *out_ptr; surface_ = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, static_cast(data.width()), static_cast(data.height())); out_ptr = reinterpret_cast(cairo_image_surface_get_data(surface_)); while (in_ptr < in_end) { unsigned int in = *in_ptr++; unsigned int r = static_cast(((in >> 0) & 0xff) * opacity); unsigned int g = static_cast(((in >> 8) & 0xff) * opacity); unsigned int b = static_cast(((in >> 16) & 0xff) * opacity); unsigned int a = static_cast(((in >> 24) & 0xff) * opacity); //r = r * a / 255; //g = g * a / 255; //b = b * a / 255; *out_ptr++ = (a << 24) | (r << 16) | (g << 8) | b; } // mark the surface as dirty as we've modified it behind cairo's back cairo_surface_mark_dirty(surface_); pattern_ = cairo_pattern_create_for_surface(surface_); } ~cairo_pattern() { if (surface_) cairo_surface_destroy(surface_); if (pattern_) cairo_pattern_destroy(pattern_); } void set_matrix(cairo_matrix_t const& matrix) { cairo_pattern_set_matrix(pattern_, &matrix); } void set_origin(double x, double y) { cairo_matrix_t matrix; cairo_pattern_get_matrix(pattern_,&matrix); matrix.x0 = -x; matrix.y0 = -y; cairo_pattern_set_matrix(pattern_,&matrix); } void set_extend(cairo_extend_t extend) { cairo_pattern_set_extend(pattern_, extend); } void set_filter(cairo_filter_t filter) { cairo_pattern_set_filter(pattern_, filter); } cairo_pattern_t * pattern() const { return pattern_; } private: cairo_surface_t * surface_; cairo_pattern_t * pattern_; }; class cairo_gradient : private util::noncopyable { public: cairo_gradient(mapnik::gradient const& grad, double opacity=1.0) { double x1,x2,y1,y2,rad; grad.get_control_points(x1,y1,x2,y2,rad); if (grad.get_gradient_type() == LINEAR) { pattern_ = cairo_pattern_create_linear(x1, y1, x2, y2); } else { pattern_ = cairo_pattern_create_radial(x1, y1, 0, x2, y2, rad); } units_ = grad.get_units(); for ( mapnik::stop_pair const& st : grad.get_stop_array() ) { mapnik::color const& stop_color = st.second; double r= static_cast (stop_color.red())/255.0; double g= static_cast (stop_color.green())/255.0; double b= static_cast (stop_color.blue())/255.0; double a= static_cast (stop_color.alpha())/255.0; cairo_pattern_add_color_stop_rgba(pattern_,st.first, r, g, b, a*opacity); } double m[6]; agg::trans_affine tr = grad.get_transform(); tr.invert(); tr.store_to(m); cairo_matrix_t matrix; cairo_matrix_init(&matrix,m[0],m[1],m[2],m[3],m[4],m[5]); cairo_pattern_set_matrix(pattern_, &matrix); } ~cairo_gradient() { if (pattern_) cairo_pattern_destroy(pattern_); } cairo_pattern_t * gradient() const { return pattern_; } gradient_unit_e units() const { return units_; } private: cairo_pattern_t * pattern_; gradient_unit_e units_; }; struct cairo_closer { void operator() (cairo_t * obj) { if (obj) cairo_destroy(obj); } }; struct cairo_surface_closer { void operator() (cairo_surface_t * surface) { if (surface) cairo_surface_destroy(surface); } }; using cairo_ptr = std::shared_ptr; using cairo_surface_ptr = std::shared_ptr; inline cairo_ptr create_context(cairo_surface_ptr const& surface) { return cairo_ptr(cairo_create(&*surface),cairo_closer()); } class cairo_context : private util::noncopyable { public: cairo_context(cairo_ptr const& cairo); inline ErrorStatus get_status() const { return cairo_status(cairo_.get()); } void clip(); void show_page(); void set_color(color const &color, double opacity = 1.0); void set_color(double r, double g, double b, double opacity = 1.0); void set_operator(composite_mode_e comp_op); void set_line_join(line_join_e join); void set_line_cap(line_cap_e cap); void set_miter_limit(double limit); void set_line_width(double width); void set_dash(dash_array const &dashes, double scale_factor); void set_fill_rule(cairo_fill_rule_t fill_rule); void move_to(double x, double y); void curve_to(double ct1_x, double ct1_y, double ct2_x, double ct2_y, double end_x, double end_y); void close_path(); void line_to(double x, double y); void rectangle(double x, double y, double w, double h); void stroke(); void fill(); void paint(); void set_pattern(cairo_pattern const& pattern); void set_gradient(cairo_gradient const& pattern, box2d const& bbox); void add_image(double x, double y, image_rgba8 const& data, double opacity = 1.0); void add_image(agg::trans_affine const& tr, image_rgba8 const& data, double opacity = 1.0); void set_font_face(cairo_face_manager & manager, face_ptr face); void set_font_matrix(cairo_matrix_t const& matrix); void set_matrix(cairo_matrix_t const& matrix); void transform(cairo_matrix_t const& matrix); void translate(double x, double y); void save(); void restore(); void show_glyph(unsigned long index, pixel_position const& pos); void glyph_path(unsigned long index, pixel_position const& pos); void add_text(glyph_positions const& pos, cairo_face_manager & manager, composite_mode_e comp_op = src_over, composite_mode_e halo_comp_op = src_over, double scale_factor = 1.0); template void add_path(T& path, unsigned start_index = 0) { double x, y; path.rewind(start_index); for (unsigned cm = path.vertex(&x, &y); cm != SEG_END; cm = path.vertex(&x, &y)) { if (cm == SEG_MOVETO) { move_to(x, y); } else if (cm == SEG_LINETO) { line_to(x, y); } else if (cm == SEG_CLOSE) { close_path(); } } } template void add_agg_path(T& path, unsigned start_index = 0) { double x=0; double y=0; path.rewind(start_index); for (unsigned cm = path.vertex(&x, &y); !agg::is_stop(cm); cm = path.vertex(&x, &y)) { if (agg::is_move_to(cm)) { move_to(x, y); } else if (agg::is_drawing(cm)) { if (agg::is_curve3(cm)) { double end_x=0; double end_y=0; MAPNIK_LOG_WARN(cairo_renderer) << "Curve 3 not implemented"; path.vertex(&end_x, &end_y); curve_to(x,y,x,y,end_x,end_y); } else if (agg::is_curve4(cm)) { double ct2_x=0; double ct2_y=0; double end_x=0; double end_y=0; path.vertex(&ct2_x, &ct2_y); path.vertex(&end_x, &end_y); curve_to(x,y,ct2_x,ct2_y,end_x,end_y); } else if (agg::is_line_to(cm)) { line_to(x, y); } else { MAPNIK_LOG_WARN(cairo_renderer) << "Unimplemented drawing command: " << cm; move_to(x, y); } } else if (agg::is_close(cm)) { close_path(); } else { MAPNIK_LOG_WARN(cairo_renderer) << "Unimplemented path command: " << cm; } } } private: cairo_ptr cairo_; }; template struct line_pattern_rasterizer { line_pattern_rasterizer(Context & context, cairo_pattern & pattern, unsigned width, unsigned height) : context_(context), pattern_(pattern), width_(width), height_(height) {} template void add_path(T & path, unsigned start_index = 0) { double length = 0.0; double x0 = 0.0; double y0 = 0.0; double x, y; path.rewind(start_index); for (unsigned cm = path.vertex(&x, &y); cm != SEG_END; cm = path.vertex(&x, &y)) { if (cm == SEG_MOVETO) { length = 0.0; } else if (cm == SEG_LINETO) { double dx = x - x0; double dy = y - y0; double angle = std::atan2(dy, dx); double offset = std::fmod(length, static_cast(width_)); cairo_matrix_t matrix; cairo_matrix_init_identity(&matrix); cairo_matrix_translate(&matrix, x0, y0); cairo_matrix_rotate(&matrix, angle); cairo_matrix_translate(&matrix, -offset, 0.5 * height_); cairo_matrix_invert(&matrix); pattern_.set_matrix(matrix); context_.set_pattern(pattern_); context_.move_to(x0, y0); context_.line_to(x, y); context_.stroke(); length = length + std::hypot(x - x0, y - y0); } x0 = x; y0 = y; } } Context & context_; cairo_pattern & pattern_; unsigned width_; unsigned height_; }; } #endif // MAPNIK_CAIRO_CONTEXT_HPP mapnik-3.0.9/include/mapnik/cairo/cairo_image_util.hpp000066400000000000000000000056171262555547000230320ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_CAIRO_IMAGE_UTIL_HPP #define MAPNIK_CAIRO_IMAGE_UTIL_HPP // mapnik #include #include // for cairo_surface_ptr // stl #include namespace mapnik { static inline void cairo_image_to_rgba8(mapnik::image_rgba8 & data, cairo_surface_ptr const& surface) { if (cairo_image_surface_get_format(&*surface) != CAIRO_FORMAT_ARGB32) { throw std::runtime_error("Unable to convert this Cairo format to rgba8 image"); } if (cairo_image_surface_get_width(&*surface) != static_cast(data.width()) || cairo_image_surface_get_height(&*surface) != static_cast(data.height())) { throw std::runtime_error("Mismatch in dimensions: size of image must match side of cairo surface"); } int stride = cairo_image_surface_get_stride(&*surface) / 4; const std::unique_ptr out_row(new unsigned int[data.width()]); const unsigned int *in_row = (const unsigned int *)cairo_image_surface_get_data(&*surface); for (unsigned int row = 0; row < data.height(); row++, in_row += stride) { for (unsigned int column = 0; column < data.width(); column++) { unsigned int in = in_row[column]; unsigned int a = (in >> 24) & 0xff; unsigned int r = (in >> 16) & 0xff; unsigned int g = (in >> 8) & 0xff; unsigned int b = (in >> 0) & 0xff; #define DE_ALPHA(x) do { \ if (a == 0) x = 0; \ else x = x * 255 / a; \ if (x > 255) x = 255; \ } while(0) DE_ALPHA(r); DE_ALPHA(g); DE_ALPHA(b); out_row[column] = color(r, g, b, a).rgba(); } data.set_row(row, out_row.get(), data.width()); } } } #endif // MAPNIK_CAIRO_IMAGE_UTIL_HPP mapnik-3.0.9/include/mapnik/cairo/cairo_render_vector.hpp000066400000000000000000000032271262555547000235470ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #if defined(HAVE_CAIRO) #ifndef MAPNIK_CAIRO_RENDER_VECTOR_HPP #define MAPNIK_CAIRO_RENDER_VECTOR_HPP // mapnik #include namespace agg { struct trans_affine; } namespace mapnik { class cairo_context; struct pixel_position; template class box2d; namespace svg { struct path_attributes; } void render_vector_marker(cairo_context & context, svg::svg_path_adapter & svg_path, agg::pod_bvector const & attributes, box2d const& bbox, agg::trans_affine const& tr, double opacity); } #endif // MAPNIK_CAIRO_RENDER_VECTOR_HPP #endif mapnik-3.0.9/include/mapnik/cairo/cairo_renderer.hpp000066400000000000000000000141151262555547000225120ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #if defined(HAVE_CAIRO) #ifndef MAPNIK_CAIRO_RENDERER_HPP #define MAPNIK_CAIRO_RENDERER_HPP // mapnik #include #include #include #include // for all symbolizers #include #include // stl #include namespace agg { struct trans_affine; } namespace mapnik { class Map; class feature_impl; class feature_type_style; class label_collision_detector4; class layer; struct marker; class proj_transform; class request; struct pixel_position; struct cairo_save_restore { cairo_save_restore(cairo_context & context) : context_(context) { context_.save(); } ~cairo_save_restore() { context_.restore(); } cairo_context & context_; }; template class MAPNIK_DECL cairo_renderer : public feature_style_processor >, private util::noncopyable { public: using processor_impl_type = cairo_renderer; cairo_renderer(Map const& m, T const& obj, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0); cairo_renderer(Map const& m, request const& req, attributes const& vars, T const& obj, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0); cairo_renderer(Map const& m, T const& obj, std::shared_ptr detector, double scale_factor=1.0, unsigned offset_x=0, unsigned offset_y=0); ~cairo_renderer(); void start_map_processing(Map const& map); void end_map_processing(Map const& map); void start_layer_processing(layer const& lay, box2d const& query_extent); void end_layer_processing(layer const& lay); void start_style_processing(feature_type_style const& st); void end_style_processing(feature_type_style const& st); void process(point_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(line_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(line_pattern_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(polygon_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(polygon_pattern_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(raster_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(shield_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(text_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(building_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(markers_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(group_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); void process(debug_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans); inline bool process(rule::symbolizers const& /*syms*/, mapnik::feature_impl & /*feature*/, proj_transform const& /*prj_trans*/) { // cairo renderer doesn't support processing of multiple symbolizers. return false; } bool painted() { return true; } void painted(bool /*painted*/) { // nothing to do } inline eAttributeCollectionPolicy attribute_collection_policy() const { return DEFAULT; } inline double scale_factor() const { return common_.scale_factor_; } inline attributes const& variables() const { return common_.vars_; } void render_marker(pixel_position const& pos, marker const& marker, agg::trans_affine const& mtx, double opacity=1.0, bool recenter=true); void render_box(box2d const& b); protected: Map const& m_; cairo_context context_; renderer_common common_; cairo_face_manager face_manager_; void setup(Map const& m); }; extern template class MAPNIK_DECL cairo_renderer; } #endif // MAPNIK_CAIRO_RENDERER_HPP #endif mapnik-3.0.9/include/mapnik/cairo_io.hpp000066400000000000000000000034221262555547000202150ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_CAIRO_IO_HPP #define MAPNIK_CAIRO_IO_HPP // mapnik #include #include // stl #include namespace mapnik { #if defined(HAVE_CAIRO) MAPNIK_DECL void save_to_cairo_file(mapnik::Map const& map, std::string const& filename, double scale_factor=1.0, double scale_denominator=0.0); MAPNIK_DECL void save_to_cairo_file(mapnik::Map const& map, std::string const& filename, std::string const& type, double scale_factor=1.0, double scale_denominator=0.0); #endif } // end ns #endif // MAPNIK_CAIRO_IO_HPP mapnik-3.0.9/include/mapnik/color.hpp000066400000000000000000000106431262555547000175520ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_COLOR_HPP #define MAPNIK_COLOR_HPP // mapnik #include #include //boost #include // stl #include #include namespace mapnik { class MAPNIK_DECL color : boost::equality_comparable { private: std::uint8_t red_; std::uint8_t green_; std::uint8_t blue_; std::uint8_t alpha_; bool premultiplied_; public: // default ctor color() : red_(0xff), green_(0xff), blue_(0xff), alpha_(0xff), premultiplied_(false) {} color(std::uint8_t red, std::uint8_t green, std::uint8_t blue, std::uint8_t alpha = 0xff, bool premultiplied = false) : red_(red), green_(green), blue_(blue), alpha_(alpha), premultiplied_(premultiplied) {} color(std::uint32_t rgba, bool premultiplied = false) : red_(rgba & 0xff), green_((rgba >> 8) & 0xff), blue_((rgba >> 16) & 0xff), alpha_((rgba >> 24) & 0xff), premultiplied_(premultiplied) {} // copy ctor color(const color& rhs) : red_(rhs.red_), green_(rhs.green_), blue_(rhs.blue_), alpha_(rhs.alpha_), premultiplied_(rhs.premultiplied_) {} // move ctor color(color && rhs) : red_(std::move(rhs.red_)), green_(std::move(rhs.green_)), blue_(std::move(rhs.blue_)), alpha_(std::move(rhs.alpha_)), premultiplied_(std::move(rhs.premultiplied_)) {} color( std::string const& str, bool premultiplied = false); std::string to_string() const; std::string to_hex_string() const; bool premultiply(); bool demultiply(); color& operator=(color rhs) { swap(rhs); return *this; } inline bool operator==(color const& rhs) const { return (red_== rhs.red()) && (green_ == rhs.green()) && (blue_ == rhs.blue()) && (alpha_ == rhs.alpha()); } inline std::uint8_t red() const { return red_; } inline std::uint8_t green() const { return green_; } inline std::uint8_t blue() const { return blue_; } inline std::uint8_t alpha() const { return alpha_; } inline void set_red(std::uint8_t red) { red_ = red; } inline void set_green(std::uint8_t green) { green_ = green; } inline void set_blue(std::uint8_t blue) { blue_ = blue; } inline void set_alpha(std::uint8_t alpha) { alpha_ = alpha; } inline bool get_premultiplied() const { return premultiplied_; } inline void set_premultiplied(bool status) { premultiplied_ = status; } inline unsigned rgba() const { return static_cast((alpha_ << 24) | (blue_ << 16) | (green_ << 8) | (red_)) ; } private: void swap(color & rhs) { std::swap(red_, rhs.red_); std::swap(green_,rhs.green_); std::swap(blue_,rhs.blue_); std::swap(alpha_,rhs.alpha_); } }; template std::basic_ostream & operator << ( std::basic_ostream & s, mapnik::color const& c ) { std::string hex_string( c.to_string() ); s << hex_string; return s; } // hash inline std::size_t hash_value(color const& c) { return c.rgba(); } } #endif // MAPNIK_COLOR_HPP mapnik-3.0.9/include/mapnik/color_factory.hpp000066400000000000000000000023441262555547000213000ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_COLOR_FACTORY_HPP #define MAPNIK_COLOR_FACTORY_HPP // mapnik #include //stl #include namespace mapnik { MAPNIK_DECL mapnik::color parse_color(std::string const& str); } #endif // MAPNIK_COLOR_FACTORY_HPP mapnik-3.0.9/include/mapnik/config.hpp000066400000000000000000000036221262555547000177000ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_CONFIG_HPP #define MAPNIK_CONFIG_HPP // Windows DLL support #ifdef _WINDOWS # define MAPNIK_EXP __declspec (dllexport) # define MAPNIK_IMP __declspec (dllimport) # ifdef MAPNIK_EXPORTS # define MAPNIK_DECL __declspec (dllexport) # else # define MAPNIK_DECL __declspec (dllimport) # endif # pragma warning( disable: 4251 ) # pragma warning( disable: 4275 ) # if (_MSC_VER >= 1400) // vc8 # pragma warning(disable : 4996) //_CRT_SECURE_NO_DEPRECATE # endif #else # if __GNUC__ >= 4 # define MAPNIK_EXP __attribute__ ((visibility ("default"))) # define MAPNIK_DECL __attribute__ ((visibility ("default"))) # define MAPNIK_IMP __attribute__ ((visibility ("default"))) # else # define MAPNIK_EXP # define MAPNIK_DECL # define MAPNIK_IMP # endif #endif #define PROJ_ENVELOPE_POINTS 20 #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS #define BOOST_MPL_LIMIT_VECTOR_SIZE 30 #endif // MAPNIK_CONFIG_HPP mapnik-3.0.9/include/mapnik/config_error.hpp000066400000000000000000000036551262555547000211170ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_CONFIG_ERROR_HPP #define MAPNIK_CONFIG_ERROR_HPP #include #include #include namespace mapnik { class xml_node; class config_error : public std::exception { public: config_error(std::string const& what); config_error(std::string const& what, xml_node const& node); config_error(std::string const& what, unsigned line_number, std::string const& filename); virtual ~config_error() throw() {} virtual const char * what() const throw(); void append_context(std::string const& ctx) const; void append_context(std::string const& ctx, xml_node const& node) const; void append_context(xml_node const& node) const; protected: mutable std::string what_; mutable unsigned line_number_; mutable std::string file_; mutable std::string node_name_; mutable std::string msg_; }; } #endif // MAPNIK_CONFIG_ERROR_HPP mapnik-3.0.9/include/mapnik/coord.hpp000066400000000000000000000102461262555547000175410ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_COORD_HPP #define MAPNIK_COORD_HPP // boost #include namespace mapnik { template struct coord { using type = T; }; template struct coord : boost::addable, boost::addable2,T, boost::subtractable, boost::subtractable2,T, boost::dividable2, T, boost::multipliable2, T > > > > > > { using type = T; T x; T y; public: coord() : x(),y() {} coord(T x_,T y_) : x(x_),y(y_) {} coord(coord const& rhs) : x(rhs.x), y(rhs.y) {} template coord (coord const& rhs) : x(type(rhs.x)), y(type(rhs.y)) {} coord(coord && rhs) noexcept : x(std::move(rhs.x)), y(std::move(rhs.y)) {} coord& operator=(coord rhs) { swap(rhs); return *this; } template coord& operator=(const coord& rhs) { coord tmp(rhs); swap(rhs); return *this; } template bool operator==(coord const& rhs) { return x == rhs.x && y == rhs.y; } coord& operator+=(coord const& rhs) { x+=rhs.x; y+=rhs.y; return *this; } coord& operator+=(T rhs) { x+=rhs; y+=rhs; return *this; } coord& operator-=(coord const& rhs) { x-=rhs.x; y-=rhs.y; return *this; } coord& operator-=(T rhs) { x-=rhs; y-=rhs; return *this; } coord& operator*=(T t) { x*=t; y*=t; return *this; } coord& operator/=(T t) { x/=t; y/=t; return *this; } private: void swap(coord & rhs) { std::swap(this->x, rhs.x); std::swap(this->y, rhs.y); } }; template struct coord { using type = T; T x; T y; T z; public: coord() : x(),y(),z() {} coord(T x_,T y_,T z_) : x(x_),y(y_),z(z_) {} template coord (coord const& rhs) : x(type(rhs.x)), y(type(rhs.y)), z(type(rhs.z)) {} coord(coord && rhs) noexcept : x(std::move(rhs.x)), y(std::move(rhs.y)), z(std::move(rhs.z)) {} coord operator=(coord rhs) { swap(rhs); return *this; } template coord& operator=(coord const& rhs) { coord tmp(rhs); swap(tmp); return *this; } private: void swap(coord & rhs) { std::swap(this->x, rhs.x); std::swap(this->y, rhs.y); std::swap(this->z, rhs.z); } }; using coord2d = coord; using coord2i = coord; } #endif // MAPNIK_COORD_HPP mapnik-3.0.9/include/mapnik/css_color_grammar.hpp000066400000000000000000000264341262555547000221350ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_CSS_COLOR_GRAMMAR_HPP #define MAPNIK_CSS_COLOR_GRAMMAR_HPP // mapnik #include #include #include // boost #pragma GCC diagnostic push #include #include #include #include #include #include #include #include #include #pragma GCC diagnostic pop // stl #include BOOST_FUSION_ADAPT_ADT( mapnik::color, (unsigned, unsigned, obj.red(), obj.set_red(mapnik::safe_cast(val))) (unsigned, unsigned, obj.green(), obj.set_green(mapnik::safe_cast(val))) (unsigned, unsigned, obj.blue(), obj.set_blue(mapnik::safe_cast(val))) (unsigned, unsigned, obj.alpha(), obj.set_alpha(mapnik::safe_cast(val))) ) namespace mapnik { namespace qi = boost::spirit::qi; namespace ascii = boost::spirit::ascii; namespace phoenix = boost::phoenix; using ascii_space_type = boost::spirit::ascii::space_type; struct named_colors_ : qi::symbols { named_colors_() { add ("aliceblue", color(240, 248, 255)) ("antiquewhite", color(250, 235, 215)) ("aqua", color(0, 255, 255)) ("aquamarine", color(127, 255, 212)) ("azure", color(240, 255, 255)) ("beige", color(245, 245, 220)) ("bisque", color(255, 228, 196)) ("black", color(0, 0, 0)) ("blanchedalmond", color(255,235,205)) ("blue", color(0, 0, 255)) ("blueviolet", color(138, 43, 226)) ("brown", color(165, 42, 42)) ("burlywood", color(222, 184, 135)) ("cadetblue", color(95, 158, 160)) ("chartreuse", color(127, 255, 0)) ("chocolate", color(210, 105, 30)) ("coral", color(255, 127, 80)) ("cornflowerblue", color(100, 149, 237)) ("cornsilk", color(255, 248, 220)) ("crimson", color(220, 20, 60)) ("cyan", color(0, 255, 255)) ("darkblue", color(0, 0, 139)) ("darkcyan", color(0, 139, 139)) ("darkgoldenrod", color(184, 134, 11)) ("darkgray", color(169, 169, 169)) ("darkgreen", color(0, 100, 0)) ("darkgrey", color(169, 169, 169)) ("darkkhaki", color(189, 183, 107)) ("darkmagenta", color(139, 0, 139)) ("darkolivegreen", color(85, 107, 47)) ("darkorange", color(255, 140, 0)) ("darkorchid", color(153, 50, 204)) ("darkred", color(139, 0, 0)) ("darksalmon", color(233, 150, 122)) ("darkseagreen", color(143, 188, 143)) ("darkslateblue", color(72, 61, 139)) ("darkslategrey", color(47, 79, 79)) ("darkturquoise", color(0, 206, 209)) ("darkviolet", color(148, 0, 211)) ("deeppink", color(255, 20, 147)) ("deepskyblue", color(0, 191, 255)) ("dimgray", color(105, 105, 105)) ("dimgrey", color(105, 105, 105)) ("dodgerblue", color(30, 144, 255)) ("firebrick", color(178, 34, 34)) ("floralwhite", color(255, 250, 240)) ("forestgreen", color(34, 139, 34)) ("fuchsia", color(255, 0, 255)) ("gainsboro", color(220, 220, 220)) ("ghostwhite", color(248, 248, 255)) ("gold", color(255, 215, 0)) ("goldenrod", color(218, 165, 32)) ("gray", color(128, 128, 128)) ("grey", color(128, 128, 128)) ("green", color(0, 128, 0)) ("greenyellow", color(173, 255, 47)) ("honeydew", color(240, 255, 240)) ("hotpink", color(255, 105, 180)) ("indianred", color(205, 92, 92)) ("indigo", color(75, 0, 130)) ("ivory", color(255, 255, 240)) ("khaki", color(240, 230, 140)) ("lavender", color(230, 230, 250)) ("lavenderblush", color(255, 240, 245)) ("lawngreen", color(124, 252, 0)) ("lemonchiffon", color(255, 250, 205)) ("lightblue", color(173, 216, 230)) ("lightcoral", color(240, 128, 128)) ("lightcyan", color(224, 255, 255)) ("lightgoldenrodyellow", color(250, 250, 210)) ("lightgray", color(211, 211, 211)) ("lightgreen", color(144, 238, 144)) ("lightgrey", color(211, 211, 211)) ("lightpink", color(255, 182, 193)) ("lightsalmon", color(255, 160, 122)) ("lightseagreen", color(32, 178, 170)) ("lightskyblue", color(135, 206, 250)) ("lightslategray", color(119, 136, 153)) ("lightslategrey", color(119, 136, 153)) ("lightsteelblue", color(176, 196, 222)) ("lightyellow", color(255, 255, 224)) ("lime", color(0, 255, 0)) ("limegreen", color(50, 205, 50)) ("linen", color(250, 240, 230)) ("magenta", color(255, 0, 255)) ("maroon", color(128, 0, 0)) ("mediumaquamarine", color(102, 205, 170)) ("mediumblue", color(0, 0, 205)) ("mediumorchid", color(186, 85, 211)) ("mediumpurple", color(147, 112, 219)) ("mediumseagreen", color(60, 179, 113)) ("mediumslateblue", color(123, 104, 238)) ("mediumspringgreen", color(0, 250, 154)) ("mediumturquoise", color(72, 209, 204)) ("mediumvioletred", color(199, 21, 133)) ("midnightblue", color(25, 25, 112)) ("mintcream", color(245, 255, 250)) ("mistyrose", color(255, 228, 225)) ("moccasin", color(255, 228, 181)) ("navajowhite", color(255, 222, 173)) ("navy", color(0, 0, 128)) ("oldlace", color(253, 245, 230)) ("olive", color(128, 128, 0)) ("olivedrab", color(107, 142, 35)) ("orange", color(255, 165, 0)) ("orangered", color(255, 69, 0)) ("orchid", color(218, 112, 214)) ("palegoldenrod", color(238, 232, 170)) ("palegreen", color(152, 251, 152)) ("paleturquoise", color(175, 238, 238)) ("palevioletred", color(219, 112, 147)) ("papayawhip", color(255, 239, 213)) ("peachpuff", color(255, 218, 185)) ("peru", color(205, 133, 63)) ("pink", color(255, 192, 203)) ("plum", color(221, 160, 221)) ("powderblue", color(176, 224, 230)) ("purple", color(128, 0, 128)) ("red", color(255, 0, 0)) ("rosybrown", color(188, 143, 143)) ("royalblue", color(65, 105, 225)) ("saddlebrown", color(139, 69, 19)) ("salmon", color(250, 128, 114)) ("sandybrown", color(244, 164, 96)) ("seagreen", color(46, 139, 87)) ("seashell", color(255, 245, 238)) ("sienna", color(160, 82, 45)) ("silver", color(192, 192, 192)) ("skyblue", color(135, 206, 235)) ("slateblue", color(106, 90, 205)) ("slategray", color(112, 128, 144)) ("slategrey", color(112, 128, 144)) ("snow", color(255, 250, 250)) ("springgreen", color(0, 255, 127)) ("steelblue", color(70, 130, 180)) ("tan", color(210, 180, 140)) ("teal", color(0, 128, 128)) ("thistle", color(216, 191, 216)) ("tomato", color(255, 99, 71)) ("turquoise", color(64, 224, 208)) ("violet", color(238, 130, 238)) ("wheat", color(245, 222, 179)) ("white", color(255, 255, 255)) ("whitesmoke", color(245, 245, 245)) ("yellow", color(255, 255, 0)) ("yellowgreen", color(154, 205, 50)) ("transparent", color(0, 0, 0, 0)) ; } } ; struct percent_conv_impl { template struct result { using type = unsigned; }; unsigned operator() (double val) const { return safe_cast(std::lround((255.0 * val)/100.0)); } }; struct alpha_conv_impl { template struct result { using type = unsigned; }; unsigned operator() (double val) const { return safe_cast(std::lround((255.0 * val))); } }; struct hsl_conv_impl { template struct result { using type = void; }; template void operator() (T0 & c, T1 h, T2 s, T3 l) const { double m1,m2; // normalize values h /= 360.0; s /= 100.0; l /= 100.0; if (l <= 0.5) { m2 = l * (s + 1.0); } else { m2 = l + s - l*s; } m1 = l * 2 - m2; double r = hue_to_rgb(m1, m2, h + 1.0/3.0); double g = hue_to_rgb(m1, m2, h); double b = hue_to_rgb(m1, m2, h - 1.0/3.0); c.set_red(safe_cast(std::lround(255.0 * r))); c.set_green(safe_cast(std::lround(255.0 * g))); c.set_blue(safe_cast(std::lround(255.0 * b))); } }; template struct css_color_grammar : qi::grammar { css_color_grammar(); qi::uint_parser< unsigned, 16, 2, 2 > hex2 ; qi::uint_parser< unsigned, 16, 1, 1 > hex1 ; qi::uint_parser< unsigned, 10, 1, 3 > dec3 ; qi::rule rgba_color; qi::rule rgba_percent_color; qi::rule,color(), ascii_space_type> hsl_percent_color; qi::rule hex_color; qi::rule hex_color_small; qi::rule css_color; named_colors_ named; phoenix::function percent_converter; phoenix::function alpha_converter; phoenix::function hsl_converter; }; } #endif // MAPNIK_CSS_COLOR_GRAMMAR_HPP mapnik-3.0.9/include/mapnik/css_color_grammar_impl.hpp000066400000000000000000000072051262555547000231510ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ // NOTE: This is an implementation header file and is only meant to be included // from implementation files. It therefore doesn't have an include guard. #include namespace mapnik { template css_color_grammar::css_color_grammar() : css_color_grammar::base_type(css_color) { qi::lit_type lit; qi::_val_type _val; qi::double_type double_; qi::_1_type _1; qi::_a_type _a; qi::_b_type _b; qi::_c_type _c; qi::lexeme_type lexeme; ascii::no_case_type no_case; using phoenix::at_c; css_color %= rgba_color | rgba_percent_color | hsl_percent_color | hex_color | hex_color_small | no_case[named]; hex_color = lexeme[ lit('#') >> hex2 [ at_c<0>(_val) = _1 ] >> hex2 [ at_c<1>(_val) = _1 ] >> hex2 [ at_c<2>(_val) = _1 ] >>-hex2 [ at_c<3>(_val) = _1 ] ] ; hex_color_small = lexeme[ lit('#') >> hex1 [ at_c<0>(_val) = _1 | _1 << 4 ] >> hex1 [ at_c<1>(_val) = _1 | _1 << 4 ] >> hex1 [ at_c<2>(_val) = _1 | _1 << 4 ] >>-hex1 [ at_c<3>(_val) = _1 | _1 << 4 ] ] ; rgba_color = lit("rgb") >> -lit('a') >> lit('(') >> dec3 [at_c<0>(_val) = _1] >> ',' >> dec3 [at_c<1>(_val) = _1] >> ',' >> dec3 [at_c<2>(_val) = _1] >> -(','>> -double_ [at_c<3>(_val) = alpha_converter(_1)]) >> lit(')') ; rgba_percent_color = lit("rgb") >> -lit('a') >> lit('(') >> double_ [at_c<0>(_val) = percent_converter(_1)] >> '%' >> ',' >> double_ [at_c<1>(_val) = percent_converter(_1)] >> '%' >> ',' >> double_ [at_c<2>(_val) = percent_converter(_1)] >> '%' >> -(','>> -double_ [at_c<3>(_val) = alpha_converter(_1)]) >> lit(')') ; hsl_percent_color = lit("hsl") >> -lit('a') >> lit('(') >> double_ [ _a = _1] >> ',' // hue 0..360 >> double_ [ _b = _1] >> '%' >> ',' // saturation 0..100% >> double_ [ _c = _1] >> '%' // lightness 0..100% >> -(','>> -double_ [at_c<3>(_val) = alpha_converter(_1)]) // opacity 0...1 >> lit (')') [ hsl_converter(_val,_a,_b,_c)] ; } } mapnik-3.0.9/include/mapnik/csv/000077500000000000000000000000001262555547000165125ustar00rootroot00000000000000mapnik-3.0.9/include/mapnik/csv/csv_grammar.hpp000066400000000000000000000061731262555547000215330ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_CVS_GRAMMAR_HPP #define MAPNIK_CVS_GRAMMAR_HPP //#define BOOST_SPIRIT_DEBUG #include #include namespace mapnik { namespace qi = boost::spirit::qi; using csv_value = std::string; using csv_line = std::vector; using csv_data = std::vector; template struct csv_white_space_skipper : qi::grammar { csv_white_space_skipper() : csv_white_space_skipper::base_type(skip) { using namespace qi; qi::lit_type lit; skip = +lit(' ') ; } qi::rule skip; }; template > struct csv_line_grammar : qi::grammar { csv_line_grammar() : csv_line_grammar::base_type(line) { using namespace qi; qi::_a_type _a; qi::_r1_type _r1; qi::_r2_type _r2; qi::lit_type lit; qi::_1_type _1; qi::char_type char_; qi::omit_type omit; unesc_char.add ("\\a", '\a') ("\\b", '\b') ("\\f", '\f') ("\\n", '\n') ("\\r", '\r') ("\\t", '\t') ("\\v", '\v') ("\\\\",'\\') ("\\\'", '\'') ("\\\"", '\"') ("\"\"", '\"') // double quote ; line = -omit[char_("\n\r")] >> column(_r1, _r2) % lit(_r1) ; column = quoted(_r2) | *(char_ - (lit(_r1))) ; quoted = omit[char_(_r1)[_a = _1]] > text(_a) > -lit(_a) // support unmatched quotes or not (??) ; text = *(unesc_char | (char_ - lit(_r1))) ; BOOST_SPIRIT_DEBUG_NODES((line)(column)(quoted)); } private: qi::rule line; qi::rule column; // no-skip qi::rule text; // no-skip qi::rule, csv_value(char)> quoted; //no-skip qi::symbols unesc_char; }; } #endif // MAPNIK_CVS_GRAMMAR_HPP mapnik-3.0.9/include/mapnik/datasource.hpp000066400000000000000000000113731262555547000205670ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_DATASOURCE_HPP #define MAPNIK_DATASOURCE_HPP // mapnik #include #include #include #include #include #include #include #include #include // stl #include #include #include namespace mapnik { class MAPNIK_DECL datasource_exception : public std::exception { public: datasource_exception(std::string const& message) : message_(message) { } ~datasource_exception() throw() { } virtual const char* what() const throw() { return message_.c_str(); } private: std::string message_; }; class MAPNIK_DECL datasource : private util::noncopyable { public: enum datasource_t : std::uint8_t { Vector, Raster }; datasource (parameters const& params) : params_(params) {} /*! * @brief Get the configuration parameters of the data source. * * These vary depending on the type of data source. * * @return The configuration parameters of the data source. */ parameters const& params() const { return params_; } parameters & params() { return params_; } bool operator==(datasource const& rhs) const { return params_ == rhs.params(); } bool operator!=(datasource const& rhs) const { return !(*this == rhs); } /*! * @brief Get the type of the datasource * @return The type of the datasource (Vector or Raster) */ virtual datasource_t type() const = 0; virtual processor_context_ptr get_context(feature_style_context_map&) const { return processor_context_ptr(); } virtual featureset_ptr features_with_context(query const& q, processor_context_ptr /*ctx*/) const { // default implementation without context use features method return features(q); } virtual boost::optional get_geometry_type() const = 0; virtual featureset_ptr features(query const& q) const = 0; virtual featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const = 0; virtual box2d envelope() const = 0; virtual layer_descriptor get_descriptor() const = 0; virtual ~datasource() {} protected: parameters params_; }; using datasource_name = const char* (*)(); using create_ds = datasource* (*) (parameters const&); using destroy_ds = void (*) (datasource *); class datasource_deleter { public: void operator() (datasource* ds) { delete ds; } }; using datasource_ptr = std::shared_ptr; #ifdef MAPNIK_STATIC_PLUGINS #define DATASOURCE_PLUGIN(classname) #else #define DATASOURCE_PLUGIN(classname) \ extern "C" MAPNIK_EXP const char * datasource_name() \ { \ return classname::name(); \ } \ extern "C" MAPNIK_EXP datasource* create(parameters const& params) \ { \ return new classname(params); \ } \ extern "C" MAPNIK_EXP void destroy(datasource *ds) \ { \ delete ds; \ } #endif } #endif // MAPNIK_DATASOURCE_HPP mapnik-3.0.9/include/mapnik/datasource_cache.hpp000066400000000000000000000045621262555547000217140ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_DATASOURCE_CACHE_HPP #define MAPNIK_DATASOURCE_CACHE_HPP // mapnik #include #include #include // stl #include #include #include #include #include namespace mapnik { class datasource; class parameters; class PluginInfo; class MAPNIK_DECL datasource_cache : public singleton, private util::noncopyable { friend class CreateStatic; public: std::vector plugin_names(); std::string plugin_directories(); bool register_datasources(std::string const& path, bool recurse = false); bool register_datasource(std::string const& path); std::shared_ptr create(parameters const& params); private: datasource_cache(); ~datasource_cache(); std::map > plugins_; std::set plugin_directories_; // the singleton has a mutex protecting the instance pointer, // but the instance also needs its own mutex to protect the // plugins_ and plugin_directories_ members which are potentially // modified recusrively by register_datasources(path, true); std::recursive_mutex instance_mutex_; }; extern template class MAPNIK_DECL singleton; } #endif // MAPNIK_DATASOURCE_CACHE_HPP mapnik-3.0.9/include/mapnik/datasource_geometry_type.hpp000066400000000000000000000024661262555547000235460ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_DATASOURCE_GEOMETRY_TYPE_HPP #define MAPNIK_DATASOURCE_GEOMETRY_TYPE_HPP #include namespace mapnik { enum datasource_geometry_t : std::uint8_t { Unknown = 0, Point = 1, LineString = 2, Polygon = 3, Collection = 4 }; } #endif // MAPNIK_DATASOURCE_GEOMETRY_TYPE_HPP mapnik-3.0.9/include/mapnik/debug.hpp000066400000000000000000000176421262555547000175300ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #ifndef MAPNIK_DEBUG_HPP #define MAPNIK_DEBUG_HPP // mapnik (should not depend on anything that need to use this) #include #include #include // std #include #include #include #include #include #include #ifdef MAPNIK_THREADSAFE #include #include #endif namespace mapnik { // Global logger class that holds the configuration of severity, format // and file/console redirection. class MAPNIK_DECL logger : public singleton, private util::noncopyable { public: enum severity_type { debug = 0, warn = 1, error = 2, none = 3 }; using severity_map = std::unordered_map; // global security level static severity_type get_severity() { return severity_level_; } static void set_severity(severity_type severity_level) { //#ifdef MAPNIK_THREADSAFE // std::lock_guard lock(severity_mutex_); //#endif severity_level_ = severity_level; } // per object security levels static severity_type get_object_severity(std::string const& object_name) { severity_map::iterator it = object_severity_level_.find(object_name); if (object_name.empty() || it == object_severity_level_.end()) { return severity_level_; } else { return it->second; } } static void set_object_severity(std::string const& object_name, severity_type const& security_level) { if (!object_name.empty()) { #ifdef MAPNIK_THREADSAFE std::lock_guard lock(severity_mutex_); #endif object_severity_level_[object_name] = security_level; } } static void clear_object_severity() { #ifdef MAPNIK_THREADSAFE std::lock_guard lock(severity_mutex_); #endif object_severity_level_.clear(); } // format static std::string const& get_format() { return format_; } static void set_format(std::string const& format) { #ifdef MAPNIK_THREADSAFE std::lock_guard lock(format_mutex_); #endif format_ = format; } // interpolate the format string for output static std::string str(); // output static void use_file(std::string const& filepath); static void use_console(); private: static severity_map object_severity_level_; static std::string format_; static std::ofstream file_output_; static std::string file_name_; static std::streambuf* saved_buf_; #ifdef MAPNIK_THREADSAFE static std::atomic severity_level_; static std::atomic severity_env_check_; static std::atomic format_env_check_; static std::mutex severity_mutex_; static std::mutex format_mutex_; #else static severity_type severity_level_; static bool severity_env_check_; static bool format_env_check_; #endif }; namespace detail { // Default sink, it regulates access to clog template class clog_sink { public: using stream_buffer = std::basic_ostringstream; void operator()(logger::severity_type const& /*severity*/, stream_buffer const& s) { #ifdef MAPNIK_THREADSAFE static std::mutex mutex; std::lock_guard lock(mutex); #endif std::clog << logger::str() << " " << s.str() << std::endl; } }; // Base log class, should not log anything when no MAPNIK_LOG is defined // // This is used for debug/warn reporting that should not output // anything when not compiling for speed. template

    F!@A#$+'24A4B5C8D9H6H6F3F7G;H9I6EEI%:A!*   !)$8&;(=#7"85 1 / / 0 2 2 3 3 3 4 5 5 7 986 5 3 0 3 !8 44 3 5 "4"33 4 4 2 *     HQ*HR)C!YT/IK'9@!4=!MX-%   $%+) !  .D,H3E;IAJ#BJ$=G!PZ0^o=>W"8SJT(nc=kb:ac6R`-EY&@V$9U 4NDO'SX4PW,BZ$R\-sn@wvE+,%    ___::://0112zwiڢݝߢߣƾyxn͊ݽz׶tΰqͲuܛٗؕύÁdžҏ̈˄˃̄˃׽wϴqƨlȩnijieecbV}ErH}TxOqL|oJ{tCxEzuBee8mc<|uL|yGRoxAvkB}qH|UdWXWQWRy|J[ȵϼοǹнν̲ȴÏҳصʓɎ†ӽċ†ʰqīkϱqȋؠס˓ܸΚą͘Ϻx®z̵zҽϦЫִ޼ڸձϫԵѭұҬˢśÖɜǘȚը۴խԬФУʜڪգƔӸĒĒǕжϵўҞΛĐќסњ֡˓ɒ̓Қ͖١ݤҘљڢԛČΖؠԝןؠמДΒЕӚۤ١ؠܤڥܪӠ֥ǑƎ˓‹ҲzӳyԱx׵z޺޻޻۶|ٵz޼ڹ}ʩojϯvΰuͯvȫrƫphh^^\_Y}QvK{nDac5J^)F_'Ka*Qd-Pd-;Z!-QE^&pq>ytC}tEviBjf;pn?nl>]d5N]-P^.Va2OZ-U]3MW.KV,=L#;H!9D6D+@%=;"<%<(=*?-?%<'=765"70 , 0 #6+ .'926     . / $3+4JH+HE*NQ8=D%xg?~[qN|S|S[ĨmgY_d[aVU\`__`iqѼƌCC>{v_hBq;M`[muѼo^ísìuֿǠֿbyKwpD[[\2EJ'VdZUVY[\\Z[Y]VTRzM|OTO{MsIvHpB}kAzkAql=lc;h^8`Z5RU.MR+GP'AL$AN#;J 5C4C3C3E3E6F8F8F;J=I?I CH!* !,4.85@6J1K2L8P9M>O$PY0VZ4AC+  ?K%>H"=F ?F 6I+E>N la:BK#AI#5GJU(PY+AR#OW+AM":K2E*@(A1H7E]]5R\/N_,I^)giGPP2nnK_rN$/E7D5A*<(=#;*>&>'@'?%9)? :9":5 0 1 2 4 (;'9+ #3- "4  5( '. . */751%ed>~DFISHso?YmDz~`X`ϸӻԼɰ}_qo>FR%GK'b]6?B"sIUtK{NTTXZYY]ZVVWVSRQOKvGyIlAwf=zk@um>lg;_`4U[/HS'BN$BO$FR'DO%DQ%DP%FO&+;'='<*;&:"96 6 7 6 65 5 5 6 65 %9%;"85 3 4 4 5 6 2 1,,      98*AI%DO&QW,[[3f`9jf<]_4qt>qu>wxA~NXb^XMNli:V\.@E#YU0zh@nFxh@tF}MLyFX\çhcXtHia:DD*30%'5$-;F&MU,7FD!2E5KVW/d_6FQ%VX.d^5k^7YQ.@F">F!WQ0JG,aW5LL)0?MO*cZ6ib8tl>pi;`Y7k]=?;)FC,_Y8MI0U[0>V#8R"IZ-bm:N\2*@ $>0P5W6M/H6GVU/XZ0TW.SS-EK%[Z1TQ.YT1i\9^Y1\[1oj;Xf0Ri-Mi+Ab$["Vf0vvCwNqM[qkFrjEJ_n5C[&Qa5[d:dl9_i4|FWP9    HHI444AAATTT```\\\ZZYߣƾܠܙҐ֔֒ݛՏψȀ~˂hneGzpLYeγtԸyůtab_ZV][UUW]`d`[Y[\^Ql:oCPbikW\`j`Zhó͹DzpjŽƎο͵tˬlؼ̑‡ܥˑƯpcŬjŪjȳrȎ׬޸ݫŊ̒̑ƊϓәњХÙخٯܵشɢśΦ̡Ϥܼդӥ̡̟˟ΟڲܴڲĖгչͲ{uÓջjsŕɘɗОΜΛЛќΘ͗˔ϙ͕ƎЙݤԚƋ†ˆƌʐˑȑܢɑԜ٠ٞә͔ܾ̮xȪlɮh˲l˲lʯj̮o̮pnʭvťoϪuͪsѬušlǢmßjƢlbNSYWa`T_\[SQzMec9{qDrn?U_0BX%Pd-Rg/La+I[*GX(DV':P!>S#JV*OV-PX-X^2Z`3Q^/HY)DT&ET'LS+MU,?J"?G#->-?6?8?&:$;!;:;!=!=#<#<!="<+;';3 . . , * 2/, !31 $4  +  &.+ ' #/!-$0,83>8;JD)RG,RF-_O6yaDx_A{aBxUʮq_m]U`jie`bbcUfʷİɴį~MXExvOTi~6Dkx=yuRbz]uhJa[8ib:|lDwOqƮ|êwZUWb/HY'IN)ujByOYU1?@#_S3qIVYV\SRUSRQyMUSUSMyJoDvF\h2ae3lg9gh7Ya/O_*V`/K\(EX%IW(KW)GR&PX,ET'CS$:L7L6M7M6K7K9K4I5J8M4K1H/I1H0H2J7N1G1C1E/F.C.E0D.A0H1I1F4H4H3F1D2D3B2A.@/@.@.@.?,=1@1@8C;C.B0D/?,C)B%<"9#:#:88 9 6 5 5 7 #87 !7%8#8 6 5 7 $:&;%<!9 4'1),#*#/*% 7<)KU*GP'QX-VX0ok>~uFwtBwxBF}}C~ESUVSyE`a2Y^3ni;pCPvHtf?ZV2`X5yM_\UrEOwm@\X1vjAi]> 05"1;2>1;09    00%2:->.A5F4E:'.0 !# 72$RQ-]U3VR.`Y297"!LJ/:J#Vd1Sb0Qc/6_A^$3[>Z!;SMX(WX.c]4tGyJsGyg?nc;d_6ti>xk?vm=tFxJnj;ai5be5I^)@b#Am$;g#Y!7T!Sr@@h.@g):] ^f9rgC]Q3n^se=RV-ab7}rDuHxNRtt?\h2Id+De&Da)Mj+]l3tqAS]X}}LMgp=gw:Ql,Us.ay4~E^ldP   uuujjiڝ۞ܞЋ̉ҏ֕ˇʃ}}{ŰokfWVN8><-yPec^XXZd[VVigYVRMMWZ\^Tan4ns@XiobcìijҿƳȵxoxuƫw˓laжuƋɎNJЕآћئӞӞګߦ؟޴ݲӥŕռʜ֨٨٪ңҤǗƘǗ͠ÚԼؾܼӷǖ׽ɖʖܿǔƓ֦̚ΞȘПǕɖœǒӜ˔Íנ֛ƊˆŋȎЗמҗʑʒљΗܢޣ՝ןٺϳtçeδrNJȌÇsqsl¢okhbVTR\WYR]]bbgaYXZ|Mso@yJsm@W`1EX';T!=W"DZ':N =Q"?N$;H"=L#AL%?K#IP)JP*HP)JS*AO%HP(>A)*%$5,'/. ,45>:B(;":!;"<#>"=&>!;#=!9';$9'>$71 . - ) * .0 10$2"  ,9'70- #3%3%1 +&1*5AD"a[5UN-5<JI/C>%HA'^O3w]@|bB_pf`g_XWeqsdi[d[oǯ|mθyԽtjj^bi9~Dhs9{OzN|O~MYo]tMzPfb_V{Kio9W^0lg;}oFPP.II,?@#k\8PTVZTSRR{N}OTVSSSQ}NxKuJnC[e1Oe*Rb+_d4Xb0W`1R]-NZ+OX,OU,NW*NX+ER&CR$:N6L9P9N8L6J3H4I3I4M3N/J/H3K4M2J1I0C1E/F.G,A+?2D0G1G7K/F2G6I5I5G3E3D3C/@/?.?.@/@.?2B3C5E8E7C@GBEBD 7C)>#:$=,D'>#<!<7 7%7$7!7!86 6 6 7 6"8!7"7"67 $;%;'=(<%;%<'<(7&.  \`8PV-JT)]e4_d4hi9tn@wtBmp;XW0Wb0lw;{vAri;rCwo?c`5df5ollc;rM *49G9G7B3<*/    >G%.A5D,@0FJX+T[0NP/CE)ld:ga7SQ1>J$BK%>F!;?DB#AG"DG$AJ"WM.=G BQ#KO-(( PL-JI'6? %$2.#   ;K"1>=O#FW&GW'AV#?W!@M"LS(PQ*HG&EF%dZ5eX4xh>wJ{M^XWOyHxGzKyL~nDof;Qg-We0]g3`n4aw?eyGnp@uuC`d3te>lc:bW4ub>xi?sn=qi=yjBiFta>q_=ub?ua>r`hj9unBjqtʹru|r̶Ӻǚ͟ջǖϛԞ˷yąóhhȷuκxЕܤ͗СѣҤўӟϙӦ͡Ȟ˞ΟОϜҜ٪њʓĎʓΕϗ٨צש޴ةմܻɑ̕ɒɑɑ՜ןїȎ„ňƍɏϕڠݣڠ؞ڟ؝Ԛ۠ןӜסƎΑNjԹz̐ם֝՝ԚƎӷд|Ѵ}éqĨqh^c`j˯qg[XYbfbNW[]`WPllS#>L&AR%3J2I1E0A9K 9I?K#AK$FO(IR)U\1^b58=& )& :A*='=(>)@&@/E&A%>#835678 62 / . 0+ / / !3&2  8#73/ 1' "0"2,8!-$/D@#jZ6md;[P2GH&;B 59>B"RQ,gkjuRg©zme^xaiogmfjm]í|qslī|ӾͷaknGf6nx<`qƯuůuӹÍDZzbZ_{NzKpp=Vc/Zd1JT)_\5OM,?A#SP3GD'yj@QOZUSSVUSVXVSVTTO}NvKtIyo@ih8cd6hf9kd:m`<\]3PZ+VY/UX/R[.VZ/EQ&>M!?O":L8Q7Q9P9L5H5I5K4M0K.I/G4M5O2M2J3H4J.D,C,@2A3E1D0E0E.B0C4F3F8I3F3E6E0A2?/?2D5D3D5C5E7G6F3D5F:I7D2B,@%="<$=";7 $; 7";&:&9'<8 5 6 !8!75 6 %:';%7)=/B-@%;'<*>)<):-='7ah8V^0AM$=K!ZZ2qp>Y[1Zb1JU)NX,Sa/jj?ljAhh=Va1N^+nm;S\Y[[P^~MVT/a[5qd=RrHk`9aY4whAyiD3D9H;E 8?   #.$;/A+A3FBS&BJ(# *'!^X5RQ/  3;GK'EL%;C7=*5=ERM+SM-FG'3C;@%"93&))   ! ;<#6=EM$@F$6<"HJ,YU3OT-EH*JK+MR+QS,^[3ZT2ZS2fZ6cX5]S2}iBxL{Nyg>rFyKxINSW[XvHuHzKwJqFsIlC}kCqg=]c3\d1pe;pc=}hBjFhDfBnHyb?lHV[zR{QxNnIiE}eBiFpIo`;nEyM}S]^XT~O{}SSR5%) piA`p9Qg.Ge'w~CWXuwjshѱu±}VO>$#!((&   KKKݤߛߚۗږٛ؝ߥޡީԓԕۘȃؖו͆}ȃ|̻zտ~ӽ{վ{վzտzҺu˲q͹rebeiebdbZbibZ]`[ZVUyJtt@ws@en;|yLsGTquuz|{zrŮ|ҼѹѺŔē׽Ѥ߬ۤ١љۥߩ֡˔֡آϙڧܯ֤߳߳ܲƋʔئ٦̖Ǎ͙ΘӞڦۮ֦ǎɑΖɏ˔ȐċÉƊˑːɌƈŊƌɎ͒Еҙ֜ۢؠܢ؞Иϙנڡޣޣ؞Εڡ؞֜ҘїƍˑʐȍĊڸյzնzԳxϯuղx԰uƤlcbZgb]_f^\ZyHUyK[b4N[-T^2zuIci:IZ*8OBV&FS()?,@*@(A)A0D.C":&<89!9';40 . 2 "5"7)<.=.1 1 0 / / # /5=4<)1.4lZ7zFf`8JO(8D5=:EEJ&eX8xLxQPF4`qw°cpklletñbjct_yiɭɪfkec~B{Bw~AcuӼĔ׺ؿ˵m|P\sJztBN]*LS*cc7g`9ZT2te@MI*KJ,@A$uh>QXb_WSXTSUVUVTPPQRzO}QQkD~jDzgBsf@jb;`]6ea8_[5TW/Z\3WY1SW-HO'FP&=P 5N5N8N8M5I6K5K:N4L0K.G6N:S6O4J5G4G-C.A/B0C0D0C0D0C.B2D4E3F0D/D-D1D0C4C7F@P!=M 6H9H6G5H7H3E8I;K=E 5C.@&>&=$<";";#; 8 9 !:#;!96 %:"9"9!7!6-=+>*>,?.?->4G*A'<,:18,=%6(5 #( V_0NY*6A8AWY0|~Eom>np>uBtAey9qz?rAgx:u@M\cbb¢gţf_ZvItg>nc094:   $;&>-?%%KL* $(IR(>K 0='//89EFI%LL)EJ'*5,&" 94%7;;A8B4?@N!HS&\^2LW)5B;BKK)JR&GX%[W1l^M'1=$ ,. 2 1 31 .   (7?D5:,4l\8~yDhq:ba66G,>4DGN(mb9sH^{RXmѼҼ~mhjhskiiĬ}eefujȥťͮ־ƞѶj[Lt~=Ke\hwлxa~sIqg?qH{lEij9Z_1c`6sfAnb>UT/VS3PM.[U5CA%m_:oFY_]]XUSURQSS}OOQTT|QuL{PvMuMvMpIykDmd=jfI @N"EX&>S!5K/F1F2E'=#;$<$<!:6 6 7 !9!86 8 %<"96 !6&95B'</A/A*>)=*>+@*91>,;&6- )!#0 %>?I35?!.-.: KQ.Y`1RZ-?I$LO+`a6utBop?ku=j{I$  8>#0=2@3=5=1>HM&KP)[V3VQ0"+MG,KG'*1&19@JO'i_9_[4DH$CD#\S2ZQ0^T2RL+eT5y`@|QRcZWhYWURUY[Y[ZSUT{M}kAvc>rKTTTuMnIpIvMqKgDmItLvLoJVuNtNtOsNuPW{T{SXVVZ[^wOuRxObWrIem8rtEXq1Le*Op,yC\[Tjx20. 444Х˺y͌ݝޡؙזژޜߝ֔ؗߝݚܛϐ͋ĸtx̿˃·ƂŁz³lfehͫkǤjŸfa_kgXf]^v`kIt}]}k}VyTZsenťvjpʬzÑˢ˷Կ̵ҼɗȜĐİunȹߩߩ٣ܪڨՠМЛϘϘЙϙӟ֤֩ڭџҞўգҢŕƖџƯ̏͝ҸؽșșǔÅ֞Й̒֟ڦߩءИ̑ȎƍŋÉƈʏȑϗݥ؟їۢߧؠԛәӛڟݤڠ˓ȐϕҘ̓ǎ⿆ߺ޺ٵ֯yٲ{ԯwүuҬtҪtΤqge^dfa_d]NO[Mef9DT'L^,7K@P%rmDzPtoFtrFgk>T`3N\.Rc1V^3ns?twCsxCFK0     +,"NQ*DL$BN"BN#=G 2; % ,62=8E6@19/4[P0~rA_k3[i2ZY2,>*@;D ZT2`V4tLxSa{ɸyl_aulhjomoѷlZgz­}ϬҨԺзǛαyg_Wsu>TԼͱ|zNrKsLpd@pe?xLvlBqI{QvmCsj@YX1]W3NM+NM/PM/WQ4]T5@=$OJ*oDrGyMxNTRUTQSUS~O~OzMQQQQzMyMxLzMyKzL}tGwoDol>hh:ho:ag6L]*F[%AW">R!;O=R 8O8O4L3L0H6K3J5I4I5K5L7M2E4F1E,B.D/C1D/B2C6E6F6F1A2C.B/C/E1E,C(A'?-A4F3F5J)@+B1D8F.B.B2E4E2B*> 8 ":#;-B-A$;$97 7 #8 6 5 4 7"7!7!6+=-?/@/A*=*;'9*'7%2(5,9!2+  !/34?FFN!&3+GKQ"-  **1$$,"8<*`k6nt=jm;Ya3]_4fw:br8m{?gw;e:j=Y9X6Re.Zc2LR+QT-]a3kf9uHh̪oӰsȤk^\[Ød{NTb\5WrNVO4~K:8-  &S^*}|CW[.5>  1  1>2;(4(/  <@!;?>A @B"7<IM&YX1TS/VS1MK*!  /.!#!DB%FG&HJ'TS.c\7KH(>@!RN-GE&g]6rd:lB[R.}iAR\\di`YUW[WX[cb^ddSmc9|OQZ^V}PzNzOUY[j\YrFpHsItM~V{UYYd[X\\Yb|U``eŬpѷ}iFrz=Yy1_x4mu<{H`êm˭oij" ߝۗޛژߝؘՔ͓ŏӕnjҒΈЈҊ҉Ս̀λsİmbeΨpΦqҰçyj}ei{}vm[mīʶªɷ²gqdqѴǮugƱvmվըӤʔʷ}˹ǔ٬ݭߪݨܦܦݧڦԟӝӟףԞϚǓȔ˗ʖ˚ԣդة˜ěșиƮȳŕșǕʛͯҽѹԽӿɴxĮӺĎҢҟŊ͖ՠܩעӜ̓ȏǎ˕מәٟۡіϔڠڡ٢ޣݢݣڠїȐʑϕ̑˒ƍŠ۸հ|ѤsΤr΢qѦsŞmƠlějśkc\TZb_]U|OxJzMxKhdPY1DX+H].G\,O]0w{FptAP#'#   A?*HK)QU+MS,*2  8A 1A.;&6"58%:3A *'9 51 &8- /   "48@BC!8;KE'|qAmu=jp;uq?XW.3G2CPT,::%j]>{Tbèz͵ɱūx§rdme~jeqǬynnfanfʡ‹ϻϭٿğérUlLR̵ٽ׺ɯ\ia9yOqigWpHW\0ES&LS*gb=LK+bZ;h[=zfDkHJA*@9#\S/~hAlDuK|QSVWTXXSPRSVTVVNN{KwDuEwIvGol>ij;bh6mn7+>1C0C-A)@0@5A+@0F-@$<%<":$;$<&>*?*>%:%:"9$:#97 4 "5$8!6!7(<.A*?.@*=)</:$2.>.<( "ABJACK&  "wzCov>Nlq=xzDvBm=e{9o}?dv:bu8`|8l@rDo@]q5Uf0W_0ij9uEO\ťiЮpʤjbccȢiexh@XU0{oCqj?  9>&do3PW,=;*). !3,+:.:QS,9.69!93&DE%cZ7UP.]X3RO-IH'ML)aZ4f\6oClCtItHse*; 6#:":$6 1 ':3 5'9, * /9AGF#=>!KE(`V3|Ghq;su>ypAEO$.FKR)UQ7pc>|TpĬtʲѷ͵δc[wi^blǭ{WhZoTԽֽ_PizuBnƖƐХƔȳ|սhoGrIf}qIrk?_a4Y\2d_:`Y9aW;i\?yeEtQbQ6OE+ZO0lEuLUWUZWYXWQNOSWTXT|N}O|LwIrFynC{uDmoP!?S!IT(?M!:M:O>Q '=/C'='=.C+@!: ":#:%<'=*?(=&<%:#9!8 !86 5 4 !5#6!6&;%:%=(?,;%6.;%8 !0/?-?) %$&268A   #.2$u}BpuBx{Cu|BxCyCyCuALOPKWRm?d~:bv7hq9gr9wDW[ÙeYuMV\fg_[mc;vH~rCJF/'(    '1% 4A2:77'%++2)1(1+9}Ua^YdƩpЮvşkͫsdytA_n4rv>tFTV\MpAx`DED!"%!### BBB֑ӈؙؙؑڕכ٘ݙޙߛܚژؗΎۚۜܝ֘ʋƈËƌՔ~ϼrϻsΉƁнuʵoæjˢqЭٽ̫ʧÙҰɦz`]XN[a[ȽξƺyƵîͿʨ̾{wֿIJw͸}ʗթΟtfԧ߲߭߬ߩߨߩߪ߬߫ݩީߪ޵۱›ѿϽ;ɹԭݷӪ̠ɝǚǛΣԧݴ߼ݻɠ›ŎϡԦ٭ԨDzӥӣʗӷ϶ɲθͷӺtǭzwlͯzͭv׺¨jָ~ܿƎ͓՛ןܧءҙʏɍЖƌΓ̑ДٞҖĉMcnĈۢ՜̔Ȏ۽ܿۺ׳}ٯyשv˞oedaY_Sro?}uHmu>mn>Yh3Rg.GW)R_/mm?rnBnn@kn>af9Y_4FT*bf;oqCwzIkl@LN0RQ4@;3()("#$       16%=B&$)!$.:H:C/?(;6!78)A&6' %-0 1 / 2 "6+   #.;ALQ(EH$OJ*I|GxwEsHh_6CS$=K!_Z7j\<lEVf[|èwƫzèu^ud]dǪxαɠnkVooʹyּѸжҵ~dwI}Qug@kg;Ȯ~ŒȔԝИٷmnGiEkc;qKef~oESS.`X6l]=SL0m`BtaAo\?iV9aS5\Q1vLW^\_WVX^^QzKORSTTQxK{NR}O{KvHtp@`j5fm:jo:il;bj6Oa+EY%@V"DU$AQ"DS$CS#AS">Q @R!:O7N=P8K3H4K-E-D'@&>'@)?.A:FBH$6G8N9P4I3J4J8K8L6K=N7I3F$=*@-B,?-?-@(>+@)?'>$;*?%;7 !9 $9";%<(>'=%=#;!9 6 4 3 1 4 "62 ,?)=!8 &=*>%8!2&8"6,,=.>)8+,9(' !"  )!    TO7xuG{|Ek};h9{Dr@o>p@I~SyJzyBHLFnxRa.ES'O^-{wGOtwCZg4[g5mqAkn@kh?}vJ~NvuFcd;QN4C?=%''           #-1@5D,@(>7H(?#:#<&8#4)  (94 $:/ /@0B  !-bj5MW(NW+~yCsC|INqDPZ)Uh`:hZ;{cF{eFbT6QK.fX9[O3]O4~iD\^`cgd[WWWb`[YXYYT|M|O~PNM|zE~xGzKxvCnp>el9fh9Ze1J^(EY%HX&CS$DS$HU&@Q!'?'>%<)?7G4H3J7M7N1I7L:M:N7J7J0B0D+@#:*>,?3B0B4H(@(?0D/C0D)@9 "; &<'<$<&>(=%<":"86 2 4 4 "84 /A2B#9)>*?#9#7.0"6$.*;&8<+=#60!0%+ 3 3 '9/ )7(   HV'[^5]\8umAOjpMzFxsAja7DM$6CrjFaY}Yuaj{ūǜʮгֹʯ|̰ëz_ϴʯvĦpazPsLUkб|]qJob>~lFpKrd@zMؼx俉էtϨu˞pŞoX\Zub@]U4^Y6TQ1XO3TJ0gX:fU9hFXpa@o^=SL.xe@Waf\\\YYW^[ZWVVU~N}N{M}MNJHyvB~JsxAju, % %'5&   kw;MIH}EzDSi/Nj,Ps.`x6ex8gx:Tf.O`+JY)AY$Tc/Yd1uvAPSUSS,UR.k_:rf>{oDV`hzU $ ) -2 &/.&CF+#$ ,'*!$/"* ,.",-67 =; ###!B>$IC)TL.+, $#AA&g_9kiph=qa_S8bS8aS8_Q6~Uj]j[>m[Y Na)O_*BW#:Q>R >R 2K,D,E*B%<+B*@)>&=*@'= 8&;,?'=1E2F0F2F0C2D8H7E6C:D7E9F+>&<,@,?#:.D+E,D0G1F.D&> : #<; !; #:";":#9#8';"8&>&<5 5 6 &;#9": %:#8"8#9"8#:#9%92 %5   CONL~DE[g2Wc0N`,Ne,Pe-Mi*Hb(Xg1nt;!D?'((^O7   KJ-|rFnf=ic:gf9e_7{vAtBrDU}RrJWscCtJj]>t`?TWkʵ~ѷ~ۻЙӽϱzˮuǪpepltJtj@yN|LRYbd`Ÿi[ZXuJ}Q}QSTW\_žeabaaġpcbbekʨpȧqѰwˮxCJ>kiQҵʭqŨplɨoƢlàj]^][Z@X6   '!54;E123OOOVWWړыǁѽy̶vʷwʵwθzȮsĪp̮u¤nɮp־yԾw}Džږю}ݚܚŃԶtȇՖטԖБӓ٘ٗ՗ȇΎņΉڕדʇŪnϷvٿyȀ׸yյwjȭm׾x̸mƲi`X`sootWvο±|Ɩ̳ȯΰßƺg\ètɕ޴ҡŊڨܨܦߪߩީߩߪߪݩީ߫٥ۧޫșȵǦ˯ӭ׬ܳ۲ХӧѦʜҠҡՕƘӣڪܬڪդܬݭکإ٪–ȠϺʘҟȗԸټؾǭ~vд˭}é|t|sg[ZVdX[QZĦvΰyѴxƍʒ˒˒˒˒͓͓ΔɏÉƭpkȍʼnňݽۻճ|ճ|Ӳ{԰yɧrkiabb\}QRV,EM&a[5eY8ST/qh?{H~vFRS.db9OT-X[3QW.FU'GT(NX,NX-Z`5[`7Q]1[i9Xe7Y`5RX0]`7qgE}mJugEojB^R>       '09%5; 096@+:(4- * ( ( ' &      01(62 1 2 3!6#%18&id;yo>zFJOKzpCXP.AN"JP*{XtjI`ɬ{euêwǮwȩsͰ}պѶеβ{ǫunmo]VzP[S^xuBi`<{Pd`eܺڱ{ػձ~Ϝm^|UZYtN~jCRP-6?:?!ZS6IG+MH-FB(cU8V^dfZ3E0B7G8I*?*?.B1E0E*C0J*D0G/E%=: : 9 9 !9 $:%<$<"9#7"8"8&;$; 7 $8"8"8'<$8#7!7 "7$9+:%: 5"7) , zBw?GKyDHHgm9V]0fq9HPSRR[Y]~MReZdVtKna=yjEk^?[M9dS>   ! ! $ ,6": $ $ #  =>+IK-`d4O[*FW%DT$JV'SW,EK$+/   17-324@>"3311   voEZY3ba7^Z5ZW1k]9kB{hAgX5q]<~Q~PuI\X3n_XT1RN-UM0=?"ZR3FF(QK.hFW~WrNGE(KI*eX7]fZsJ{PXYZ]WUXTJLKwHuFxI~I{nB~qC{E}G|I|uDvrApt=[j1Kd'D^$=UK\'J`&M^)KZ'NY)JX&EV#BU!3L7N8N3I1F0F1E*? 97 6 7 7 6 &>5I,A+A,@'>$<(?'<)=.@)<(=%=%=%=,E/H&@'A+C(@":&=7 7 "8 8 ":$;!: 6 !7 $8":#;#:#7);(;*>)<)<%9"8#84 %7"5 3"4%% $lu9ty?lxLWVX^][cğeǟeŚdV_̠gөlڭq΢kʝhƛe`_͢iȠgb]_Z[[[\ʨme*@2W`RtȩnĠiΧnΩpƢlͩo˨pccßlMuYtx9<> ! " # (/&+;;_V=1+*! ')!ea:fc9X]1KS)LS)]]4PU-_a5NS-.6$   4807&4+9!0+ + / 1' 0  $&62 0 0 2 / 1A3 * %+>P[+ad4}sASPPXP{DW].ZX4bmcr¥qmб{ĥoi̯vϴ{ɱvӻǬuʫsǨpԴzֺɩq׳z˧qǠmʢoͥpeqĢrƞoԤr辈崀ďɔྉֹsrNwQjGjHjZ;k[<[T3RL.q^>XXxbCNI-KE)OI+f]7P~PnFqIyNTZ[XUXTPLtF}oDwIyKzKqFvHN~IMvEur@qr>[j1Ie&E]$!7-A&<'>'?'?+A,D/F2J(A,E'?-B7 )=#<7 5 7 !7 $:$<$;#9%<#9%:(:);$9*<$7)<*<(<$9!7 !7 5 "8 5 (>%6 +   +#&:07/:=,CD.PQ4ag>*-& **"ab?}R^]PL[T~LQZxIwoTaV4`S2jZ9o^Ft{CE(.&  +)"E@-e_8LR(BJ# -2)-(.04,.   )$$C;, ##25!78#::$BG$7?>@!VR.j]8qHY[xm@wFji:Y^1hd:Xb{QzQX gѮsάtlgwq@UXS]PMfn6PUȚdبn۰tسtŚc͡iѣm١mzիnΨjӧk̡eӣfܦmץlǘb`ŗcӥmӪmիmΣha[[`^\hȥlbxeѮsÜgǡkҮvٹڼݹ֮vffisGeBkDrJtS-7+& $ '*%3.2=>@F&#'*oqqùb}Mb9ZȏіДĊņ߾ʼnljˌͫrǧn̮pڿ}·̅ڿ{ݽ|ܿʌ̏ϓԗӖϒˎˍ͏ϐՓڗߝ۪סіŅÈ͏|ζwٺ{ֳwʨpϮtϬsȧp£rp±ƹ¶׽²ſ˹ŭ³˻̹űwе|ѷͳʲͷʶƓ֣ܩКȏأۥןءڢ߮اӡܪۨؤ۪بԤϡȟŝѾʨձڴө֬ȚĔœ׻jÓʗǓ͚͚͚ΝڽÔ̦ҿŖРԤӠѝϮqֶ~ݺͲyq×ҡѝ׿ԺŕȜȹ׫̠ɛĖȰħwfcgORB(&edPkLtCuBl=lJF2BB-ne@pj?he;b`7_a5]a3ej7fj8YX3WY0'/#   /67A)8)7"1,,01!3  --(84 "4 41 6 #;"6 4- & ^a&;%;,A%;&;1C&;6 3 4 #96J?O DU"ES#9J3H2G-C1$9&>'?!9$;$:#:#: 7 %9)<,?)<(;%9#85 5 !7"8'<(<(50: ,   $ !99KLLY ! __Ysv>|JtF|Jtc@gZ.GM2tCxEr{Bbh;NT5  5K/Ofpl?X\^]Yfȩq^LvoEc`AUX[@?126'iz7Oŝe^̙cۤlȥiΫkХlبpڥp}v֭pǞgȞgקkҤh˞cϟf֦nצl٫nfdװqӪmǧeŦcĪe£cdƩz˦m̧oͬqЯtѰsүtơlŤmŨqϰxֳzղyʥpbdf_VgZOIg8.90!$$258PRRUXWx{s\aYOZI\kSwagF\8qAmɏޣ֛ٝĈ۹|ݻ}ÅňɌ͎ąֳܺyҲwʆבȅ̋ˋɍː͑ԕѓΐϑϑӔח֑ۚߡЈڗݠ۝̈~ٽ|ѳwֵx̬qŤliŦsq{Ƴ̿ȶĪ˧˪ƧϾϽø{|ϼǵŕ̛֥ްܯݲΙ֡ޭ޴ݱݭڨѡлʻԷӮڳԭ̢—̤ЦėԺӷԷھÏڿؾؾĘɥÕʚѠ͞ңԥץӣ͛ʙƒНÏËؿÝɮyšĐǛѧӧثԥÔּռę˥ε`9F4"!+86zyhaxBr?NLgw8Kg(jt6\l˱vϳyԶ}Ӷ}ͳyҷ|ֻڻո~ٻϳzɭtʫrȧpk]SYZZZ~V}TY_^|Tqe=h^9s_@XU1;H ;E wqBtIja;GL(MN,h`rbJQ'kѿpnĪzßǪwʘͲ{jѺvlȌ͑Ϸ¦obťmcşkƢk}kCpe=ԯwῈȒ⽉د|cTȩw伇޳Wǫz˖ϴ}ȩsɫvi\}iFrd@oHRN-q]?zUKH+RJ-ra=VZRTZWWZUUUTTQWYQSO~N{LrHtH}JNNIxvAls:Oe*F`$?T 8MEY#S&;"97 )>9K=MGU$?S4D3G:M3I6H!54 $<3F9M'@"=6 !96 2 7 : ; &>&>#;&=*?(=*A%=#9$;#<&="9#:#8';)<':&9 4 32 !6#9&<!6#83 $5 ' ++;88F&RL;Zry=Va,]Z0D?)B<+ D>1OJ6DE-AD)^a5gi;wBkzC0 -*'XR3wM^^WasJvc??:-"=>9+/2][7O_Ó]ǎ\ڟkuuȩm}}y‚~}w֯pֱnձl߼v}xvxͭo۵txүmҰnѵpʬkŧlĪyǪv̩nղuֳvֳuմxүw׶{Ȫq׹عٶ}ӰxέtcW][ee_m|@Uw2[{6Qj4;X+Lh>yesehFI$NS,WZ3VW2LP-CO)MT-PU.JP*]`7KM5    " *"1!0,6 0/&5-9$0,,  )1'4&38C+?L11* '#%5, /*<  " $ !:M$TZ-{IzuB]S2Tc[WQI\a/^[7{mFdz¦uǫyg̸sϲ~γ~hZѽȘؿnjɮuaYScŠixMgZ6W׭yȔԲ{ j[Uү|ɠqm[N5G4I=P0E-B"73 : $<":+=*<)?$<7 &>8 6 5 7!;":'=*=.B/D0D'<2I'=!8 9 &=+@&:':(:.>);*<$8#8#96 &<#:"9#7#5&9!/ _`9bh4Zc00))tScֺƫp`WMNEP\[]YYUY[]__^\TVXTMSTY]aeZ^nOI9$   !$1  96&KB0$"LD/`Z5VR756)dY9pEvd?ta=m[:PD0/)( ";F'J\Ù_ئkۧmw|ұtٵyÃÂ~Έ͆˅ȃ͇~|͆ɄĀȂʃzz~}ٷsڻwѳqȫlkŧkcͫoҮsѫrʩnϬtԴz׶{ٷ}ֶ|״zٸ|شzΪsecЩqȨm˫rfedL^[s|AMt,Dw)5n?r%Ns+WѲ{ܾۼ̒࿅ԯxЮxڹϫuŠʑۼԱvٸ|ԴzҳxέsֵxecдsɇĄѐۚёϑϐӒӒՖғϊ͆{сЀ؏ҐΉˆɃȄȈ͍΍Ɍǎ˓̑̐ˊ}Džغ{kqk˾ʹpy]vjQzczmg`x{_{þƮεʹ̾ƹȼɽ˷ðʼ—ėѥըСǙűʵгִЮЭɣƟȟƝȝȜǝŚڿȞմԴƙśřęÙŚɤѯ~ԶٻոҹŠѸѴ•ջͷɺ˥ҫͣҪɟȟΧϩϩǛ˜Ҿ̜ēβʯȮŪ|uçwӶѵѴ§v_Y|Krp>|yCIOdniiifmƫwçqɬuĦojo§pjjfifdvK\]3OU,LU*pj?lg=OU,qk?WzjDqf?OX,XV1qbAyfDLP*@H#\Z3ulBkb=NN,?E#PQ/JO*?N%>N$@N#KW*RU.PQ,VU1`\7YY3RW/FP(RV/^Z7FM(GO)MS,^]7OT.IO+?J$QT0IG/PH16=(    "1+7'3"2!3'7-8!/!/!/  **:(8."/ .!,) ) % -6;> 8@BG#0?4>   # % 49"f_7yxBja9tGeaYVT~z=WW.{lDcĦsħpquɮϮvɮyŏ©qĊƮ}bmhlbV}Q_ѰrbkDtLΩsຆÏ۹״}̨sgֲ}ddS7weB˳~ƎܿҴ}ҳ}ǩt\NO*MM)uc@cEC'DF&saQIZ%bf4JZ&:K0F-C>P6J*B'? ;9 $;%;75 $8$8&;>NAP!:JBW"N:L!868 #< 9 ,>(9%<: 8'?7 7 6 9 *>.?-@*<(>&="9$9%96 !8 "9(>+>,<6@4?-=+<%7%5&7&;(>*>%:!7 4 ,#  #&iUCƣqܿ}ӶyƩp`WUOSXaƧjбpαoϲsέmгrǮkϷsѹuѼ{Ӻvپy̶rʵnԼuԻrxz|roƼgaŴr‚ٿg[G  ">9*    ").)OZ͔^͘a٣mۮuڶxa\̩pְqձqճvǃ}ƂʅŀΉ͈͇̇̆ψ̅̃~Ȁ̈́ˁʄٺwiͮqe`Ģj̨oέrѭuִz޿ĉ޼ش}ش{ֳzΫsԯuճvÇȊչ}ǩsãurǥ|ұrpkzFq}@YҴ}‰ަڰغƏճ}ݾ‰͔Ж͓ƈ޾ݹ~زvڳwܻ{մw߻}Ņ͌ɉݿćˋȉȉёՖؗӓҌІхшӊՑԕ͌ȋƋ׾ĈƇƇnjƋڻӴ}ƌڽÅϰvl̯}ªvyĵysVn`Bwbzo\qOlµ˴ͱ˲ˣѮ˧í˽õƸ˿ʾȸϱڹڹҭѩЧѧΤȟƜˡѧѧȞɜǛ̢ӮΧҥƖĕțսÔڿܿݿԻո͸ѹڼ׳үնܿœӾ͵Ƴ̹ǞĭҺ׿ӺӸȭ~˲зƙջӵˮ}̰xƫ~kzQTǧuѱingfnm?\b^Zģo^^`hhmΰyѳzåog_`iiggb`SAQ$CV%S^.sn@rl@.   +51;0 0- "2,5$/+5)4!    )* #4-) )& ' ' '#%&1@A#@C#9A*7  # %9B"\[2|JO]miaZFqj;TmӡʚζjջؾŎȬsкnlʩtĦpȮy]bSZ jӯs_~RiЪy濊⿉ٵЭxiƟmwSlY<[ɭwŨtѴ~ԷԷҵ~ɬuoG]U2rLY@A#AC#rFROT]Yf_]]]ZYRVUQwL{MyJ|NvNxLuG}rCyDIL|Hcn4R^*Yb.N](DV#CX"HZ%Ta+CR"+@,B+A"<: 9 6 5 7 "9 7 7$:*>:JDR"AR CU"BW!=N1C;NMY'>M,A'=86 8 !<(A+A,A%<*C)@8 7 7 5*?,>(= 9 4 7%;&9"8 6"6&9-=+</@*:(;*>->&91 +9/=)=.A)='9&92 )90'$  "# snAmn;)' ?9*n^<mKnֲ|ݾϫrf`iȪkԲu~łϏژۗۘ΍ŴtͷxԼ{k͹tѸx׼Ȕܿ{پyǁϸs}~{zăȊ͎ҖټsdM  #     " Ya6CY֣hڤissy~ں|ƀ˃~~͉̉ƀҍԐэӎԑבԍЉ̄؍Јʆ޽{ܼ|Ӵuѳte`^eƣkͪqۻĊݼǨqѯxֵ}Գ{ط~ַӴ~βy̱|ũvѬzٴҮ~ִ޿ۼӶն~Ҳ{ظˑč˘Éյ~ɒ˓࿅Éἃص{ݾ߾ἂ۳|֫uժsԲvʫrƤl޻}аrʩmظ{Ȋ̍Ä̎ђՔד҄цՏԌԒђΔΖ˔̓ÐѷӸеֻܿ۾ÌָбwؾϰwѲ{ǩuϳĪyyXukO]V9EMR*KO+]Z5UW0;G =G!@I#EN(:M"GT)MS+YW1SR-NR*QR-MN,SP/QP/^[7ih=_`7]_6UZ1SX/V^2JR+NS-YX3HE.   2<)5/-..(3&1"/'2    % 3 1 ) ' & & ) %/'$$+32/.3:.<#+ ! $ "nFYeiciUwm?XÊӶ|ۿֹѱyʔռϴz˲x־ǩq̱zĨsɬvڿojǣldVbVtb>q]=v]Aڳȑߵf̦tҮ|WlIcWpKdˮwrzRħsϮxnâog~iDj[9sK}QU_cZğgġh`[XXXUWVS|N~N}M~OzOzOvJxHK|xB|}D|F|yBRd*\g0[f/K[&DX"=OFT%=N9G8F:I=L4F3G+>$9#:$9)<&7&:-?@O BS ;P>Q;O/A9I?P 8I,A*@&=":6 9 %?(A'>(@$=,C8 6 !7 %7+?,A3 4 3 5 #8$9);!7#7$9+>)<%4.=+>$8%<&:%8,;5D9G-?/A+?*<&7.%   gb>|zBzxAZV4 XJ7tJyNvK^iױyۺ}iǥmʩn֮qߵvÅ͐ϓӗȍؚ͑ޟޜۮްݙ׿~i_h`ìiپw~}ԽvؿyӺt׾zŅђ͑Αߧ۬[PC97(KL,OJ1  '!% B>.73+ cc=P_ܨjnx{ɂэՑוԑԒґχx~ыԍܗыӑӒהؗԏҋؑˁЊdžܽ|ڼ{ѳsd^ǦlͪpƤlۺ߿ĊǍƌݼճz̪sյ}ϰzյڹڹڶËݾÌ俋۴ݾʕڨЕ̓Šٹͫsţpյ~ۺХ٪ٜ؞ˑݻ࿃ڻԶ{аvǧǫq˩qӯvϩpͫpϪpݹ|ܽͮtĈГҒԓԍρ֎Ւˋֿδ|ͳؿďŕŔ־Ի͟Ē̱}inqsè|tsqsphg^=RM0XR6ST8mkQj`sqNvoNh_V!jm;sH~uFWg/S^-ykFnI{kF{kFZX2*@7EVW0SS.JO)7K@P#MQ+RS.>N$:O"@P$KQ)NR+IM'MS*MT*RR/ON.YR3jd=gc<^[6RV/__6RZ/XY3PX-PU.02&   (0(6!2$2,/ /(4*5#0%/*(  # $( ) "  "  + ,3,3+' * $%'$' )/++'3("Za8[b2i\<{R\gl\zk@Wʑ͓ΔԸѵ~ΚȖѺӻԹɭtϯxؽʯwԳ|Ǫuɩt_`gg\rGvjAxiCyTФsœݸ⻉⼈صɨtiWoH|jEjRhӷͯx^T kYzP[`db_aba[UTRUXWS|QzO}P|O{N{OxMyMzIMxCzDux?nv;C["O])HY%J\&?S ?Q3B9J=M>L DQ#8I5H,B'=2B5F6F6G6H4FAM 8I@S7LAR BP!4?7E2F.B%<%<)@#: : "=-G'B&@'@(?(A8 7 "4);&;4 4 7 3 3 0 3!6#8(9*<&:%8,8+:.?(:$7*7+6194AFP$AN!>I6E(:$5 1'    N}Blv:qr=pf?NC2<2*fQ=waFgJq_H_1,' #$~qJvHTXXd\`Ƣl`eدrݱwĆ̎ӖɏŊƍ˞ɍ͑ԕޙϋȥjgTWݽ{߽yƂÀΰq׽ąӕ֗ѕٟߦ٢̒ucM   )((3-'SG8SO6qf@{qBoo;RL.42#-+!'$!& )0QY,[^1qt<('#95,[\ܩjۥk|zʆҍג֓۔חؖדэ~ْٓՎؕؕבۖەՋۓ׍և|̀ͅԏłȆ|ӵsίkĥg£gȩmʨoֲwڻ޿ܽع~ٺܽڿָӴ|Ե}ʩtȦrۺΕ͌՚қɋϓ՚לӗΔϝď˔Êɑҙ٨nj߾԰xڹ~ȉȉ߿ݼ޾ྀضxүrݶ|߸}ڵzΎђ促ȍٛٙ֐~ʃՒז΍ˌƊȏ͖ɕǘ•ƟŗÖ̝̝Ǘɗսpt~}iplu{Q_~sJ|sN^]6ga;qm>_a7psGchHejIVW:~f}qW}oRiƽtmqűɥǣ{ˮ̜ҤϫѩղөϬѦϢ̝֨ԥש٭ӨңӣϞ̜ʛ˧ֲܷخң˛طصŬڿܾɬp}ٸӱԱٲʦ~vլլ׳г̰δϱӳڼڼ̯Ͱso¤tѴϸѸѵԴѰίq[a_~_ukFoj?|oFvJLywFssDooB[g5OY.Ud1bd8SY0Uf3bzBlp@xeAzfBqL{Rd][XVlg;og=nf=vNxPsJqHqGhg:4PN\)\b2pi?pLxQsMumB}sGpk@WV04?KN*5A/>AJ$FN&WW1WW1NU,OX-EW(EW&T\.OX+OU+RU-MX)M])GT(;C"TR0^[5YZ2QU.PS-XX3PV.TZ0X_2:@' &("0:6=)9%6!5%7'5!/&-15'  2"8, ') ) $"#( ' "  ! *-41)!!!!! #    *  @A5QKN-bY9zSvLrGxFUҶ}ϜҢЗЙ׺ֹ͗պ̗˱yܾټе~ϴzƧrqlcYVɬsĤp_~QxmBV׮{~漉㹉Ǘ׷ʧr^blGyOͯwѪvұ{ϰxknEťnh]_ded^_^YRQSTVTVzNSSXUzOQP}M{I{H}E{~Bsw=pv<\k0Sc+EW#FY#@R BR!9I/C/D/B0E'=&=!8#9!6!7':*=1D7I;M:LFW">O>M;I9E9G,B)?'>)?%<2 )A+B.F+C5I6I= : ":7 ,=(<6 5 5 5 2 2 1 5*<3@/="64 %8$6,<1@&8'8.85@9C3?6D9G2B/?$6 4+% YP:M}BEHM{KS_bϭs㿁֮t˫q]K\WYtI}R[_f_\Řgˣmܱw輀黁Ȍ۝כҢʏӲy徃޻Åܛؔăֿ͊э͈ӎܛѓ֚۟ԗ՗ѕәݧߩؠĒ    ?;,0+%  13/3+/46LV)-0! OH3\]^styÀDŽʈߞޠߟޝܜΏȈۖڑْݕڐՈڐޗҎό̉{ϯoҴuѱsȩl˩nֱwڸ}ѮuԳzϰv׸~͖̓ǎҷδyؼ~ѱ|ȕԘВǐЕϒϔɏϔϔДҙ֛ՙӗ؞ڥ߾ޮ֚җ߽ݼƔϕϑΎ̍ϒ͏ljִzЫrӔٙט͑̏֘ёˈŅΎғΐϒNjȐΚ͛ӧΣĕֽśʝ͝Ǘē’ɯsrok̶{ɱzoV}O|tIhd;vIyIQJqv>sy?I^(MY+LU1~}c{bbdrpppĽĶɿѽҵ–ҪŖĖɞ͢ė²ŝϯƢͩΰ–ưּėǙ׾ƗʜŜÓÑ͝ŕșΡ̡ի˞ʜЦʞѱΰٶԱЪ{ppүհЭұٸʪ˥xѪzԮұԷʮnomnq^iaZ^dksmN^^ZC¤uģsţrkwe}_cc[_1rh@of>{nExMxvDuJbe7^a6YW4JL*:C 93! ++ 43#   R\̡hyЏߟؘܜܛڜڛ֗֘֗טߡԔˊݕߔߚ۔ωټzնvήnϱq̭oάqѯtϫqȨlhiҳzǍܼ̮yǩrִzɎΏӗԠٿɎӖ֚͑ўϨЖқڡ֞פܢٞך֙ϐܝڠ߻͓ݳʎŇNJВٝΐ՗ȊĆ߽ՕܝٛӖnj‰ոھԹ~پؽֺڼ̙ΞѢəʙŔșӐپʭ|ywpawUqɒư|ʵʷƶ]OVoYPOqv=Sl-Se-M^*GS+mpOKU/GU(NZ/]a9olIn|wju÷|qƵxѴ•ζе͸ɹԼɵѻѷƱȫϹīūֹٿ͢Ǜؿƙ–ٽ׿ٿ׻պ–ҥլȡƚĖ΢̠ÛʹܺұɢwmiǤzШ~Ω}Ү~ײЭѯͧyldp˪{ٸɫ{pfd]Xa{WsOrKxOXzSZejqpz]x]\_7\a6W^4[^4W[3N\-Qj.[o4Pa.Q`/Ue3IV*GR)]d5_h5bf6[j3^d4qFwLyLSQwMvl@CT$I^'kd<[\3QW,NW*xjDpi?lgnj@_e7P^-N[+GV&GS%GU%DR$BR$>M!BK$FN&4; KN*HP'IR(UW0[[4DK(8B"6>%!"! %"("(;HJ "(8?-> /%3   *!8 3%7);- .&1%.  #0/ +# %      ! $"&DM*kn?xH~uGmd;xJWXfqս̗߮ϛâp׾lˬwɨtlƩpĦmaLeWtImg 4+@%; 7 6 )< 6 5 4 !5$9)=,?(9+=%9"5 3. . / !2+89B7D,<7E1B1B);%7%7- niGWXTQPR][aĄ̑͑ޞʥqǟlfƟmѦtۮz߲~溄幄ǐҗ֛כ}כϔ̑ĉˆ⹀ϔӗ̐ܞߣҘǖ     zmD¦hv}ώݝߠژޛޝݟܛۙڙڛٛߞٖߜߟܟ~ݖՖޖܕԍھ|ϬmԵuغ{նyаtͬpѯsˮpƧojjˮvÈɍČίxӴ}̭wĥpΘӵɢˎ֙ӕÇɐǔИٶث֞ܩڞٝʐܦԙ՚әݼӔ…ҬrЪq޼~ɋ̎ҔNJϒєƈВטڛ֙Җ̏ċؾƏָϭyͬxұ{ӳٻŕșÒ׻ֺչڼٺҲ~ƣtʪyֺϴqrȰ|к̴vϻǐ̾qpmXUQHbu5^n4jw9M^)BO%CN'ci7Ud0^b:plIwliejʻ|±ȾǷxw{ ǩv{™ĝǴɷvŬss¨}ƗζФѤȤɫйӵܿÕɛϣʟ˟̠Ѥ͠ԾӼгͲгuǥwȧz̥zѫԱٴְְཐױЪ~ʧ{lŧvbV_ZVU~RZ^mKmKiHjZ;o`>uP{Tdl|ZzkKkd@ef;^e7T[1N\-L[,Qa.Te0Vf1Rg0M^,GT*cnLo{]Kc1Yo5fc9W`1Ve4]d4rEUrFY^09O?S!G[&ab6nf>ld=h`:lchY=k\@lZ<|gExR~Zj|SxNtjCfd;Za5Z^4YZ5WV3V]2Ra/\e5Yi2Ve1KX-P[8V`=Yc?L\0Jc,`b7^h9]c4yNsIHT&.H-H3L:W9Q>X!CT#LT)Y\0]]3b]6c]7b[6GS%9PFS&KQ*@L">G!ML*5=-88@CH&NO+YU2]X4XV1\[4OS-ER&GW(L_(MW(MT)GP&MX)MT*HM(PR,QS,QS.MR,JT)BQ$6F 8@#@M$@J$;H"4@@G%EM'Zg6ij`bdc*74+&   -%4!/.+   )+ +"  (     !! efSX`UbǓα~rͱ~ӤͷőųyӚغӸն~ҳz˫sh¢ncZTziBkE{hDlHl`;GQ&UV/YW1kaR7L4J%>%=&?(A&=5 2 3 3 2 "8;L=K.>FS#DS";L&<'8)?0C,@2D%;5 7 4 7!8$:%<$;&:!84 6 "8-;-8-8*:*;):#6#61. 0 (8)84>%5 3/=.>.=,<):2B.?)    BF.KVeȮl_WW[aYRc۽ܺşm۷Жݢԛ̓З؟מڠݣۡ՛ܡל꾆Ǎĉ繀}ךۜ՞ΔѦ///_\P*)*  "' #/,+5009"+1<05?16?37@69@/19   tI̫nܮq̌ߟޟݟڜߡٛ֙֗ۜڛܝכ⣲Ϛ۾z۾y~ՋؓŃвtɨlѱsϮq̮qäkɦk˧mʨs˫qбwѱwػ۾ƌѵ‡ċԺʰzҶ}ݿԸֹͭuض}ÉϓܠЕӘٲΒ̒ݼәӖʼnϓ֫q}޹|…۴yĈNJ̎ԗךٜ͐ʏΒɍٷ~̩tֶ~ںǎ‰ڻܿɓΙʔ׻д}ԷѴͰ|ˮ{oȪyָؽoһйȱ}oYbW|zHou=|JUhXYgZI`r4K`(Rd,Rf,Ra2ooHyuDpq>Z^:lnQƺohrgʹŬlvtn^yѸðӹҼ}ɴƴ|зǘÖԹֹϴ׻ٿչ’˙Ț̞ˤϪѫ“ٹ۹×ؼìϷֹӳ˰uҸα̭ʨzɩyϰҳԵί}ärãp¤q_Tdma_]UyWuOuNsKueBvfPvhRj\DfTS"L5ECR"=L=K%:$:$;"8%;.A,>5 4 3 / 3 ,;#9$8(<!7 6 $:"8$72<,:):);$6"4"5 3/$5,:)8,;)9,<(6"5#7 4%9!1    !. !0GJ0^t6Pg+zxB}J\RTSNVŢj`bŤnԘʎΔٞݡלϖЗ͒ݣڟޢٝі͓ÊŌ뿆龆Ǎߢةȃ՗כӡfi_a`Y &,,-7EEG\\\$ ,2=.4>/4>6;BEFJ7;@ !<6,ZЧjʅڠ؛۞ؙۛߟۛݝڜܡݢݢÐн|̶sӌˉÄѵzˮrʭoϮpϪnѯrȥiϬpӭs׺}׻ֻɉȗɒΗ׽rĭyȎԛԭˡŊؼˏΒҖ۠̓˚̓ٵ{Éݣ߾ÇyNJ†㾀ݷ|ݹ~ᾂˎєؚכ١іÇŊݹԯwص{׵|׺~ڻÈNj͔ӞϘе}jҶ}ҷӷ׼Ͱ{׹۽ϳęɰ{ȊϺվqNflTRO]ecj_aaTky;^p3^k3Yl0trNnlEcf8GM)@G(]bKļin|}~ҿwiihe{̴Լֿ̟˵zīsxջջβӶ۽پиԻÖƜϴŞѨөȞ•ř׸ٸں޿ؾַ׷Գêwkʮʩɮɬ̮ȪƥvƧwϬ|ǥsmdYZmEuPqb~S{rDka>tlMtdPbP:\K6^P8zhQ|mTl\B^U7XV3ST0PN0RO1IN+FL)CM&EP'=L"CO&BO%CN*VU2_Y6NO+IM(4?0=0=/=0=-;*71Ab[7]մ}ɭyҶ|©o«{hai2Gjйyս}͸uҨoʩl_^^]]˜dśda]XUSUUfdOPPEhx7^p3iw:_r4]l4Td/[h2Sa-Q_+O\)@P!8M1I+D(A$8-A7F 5!63 !63 3 !5,?7I2AFT$@N!=M 7%;5 5 4 +?'<4 4 4/ 4);$9%;6 6 7 !8 4 %8(:,;"4!5"4 2"4+;+9,;!3$4-=&7):"4%/ 0 3   "(*7ijn# 5:.oqDsBYr2K[+mf~zVvnOmfEgd=_[8bX7s_Bm^AxcwgPt_Gl[B\N7UI3OL/LR,QP1UQ7GN(DM'?N#?M#?N#=K$9J+;*8&5*<;I%@G(UO0SP.8C2@3C.@/@,=2?9C;D1A.A(:(:-<4A5B4B5B*;*:1??I"9H@N"=J!8G_[5c^8a_5kh<``7eg:[^4RZ/RZ.UZ0SZ/S^/M`+Of,M^+N\+Xb0Ub.Ui/Se-KZ)R].7D"7>/=G3+@5E+;Ũv۴Ӽ˨ֿʦs™j̢q̤qױ{ܹϯyĦoԸ~ھnj߽ßjXVYͬucYX~Q_uk@d]7]]2Wˬtֶ̰uݼ˯w`j1~BĭnӼ~Ƈӽzկtʨldc^ƛcϜdΞdǝdœc`[WQ[ZaXJMEmu;^q2et6ly;ft8ip:soBzvDP\,KY'GW%>S9P2G,D%<#9#9.@44 2 4 4 5 !55G9L3C;K>M.A#:$;6 5 55 *>6 2 "60 2 ';4 6 4 4 6 3 #6"7%:&92 2 $5&7(8.=.?+=(:"5,<"53 1 "4. *    Y]aNRX8:C]\?NI]l4`l5zsBQɣjġhơh\bOTԯx͓Nj؛ܢʼnːȎҗȎˑҗːЕϕЕŌϕɐËїߤܠ֘ߥյhd]  & -'*4==BVVV==E,#+7(/:,3<9=DMNO"-  ;5*Z\Y_بlʣkZ⾃٢؛יҔѓ͑Гڛޡݡٝԯ̒ҺuzҏٙΑֽڿÃˉֹzƨmdënϼۿػۿÍ͙̗ΙҝҚÊ˰vǩpγx˳{Ư~ϞːƏ˔͖ʗֵ̒}ڹڼ̒Ċʐڵ{Ṁ}ҧn֯t⽁ὁݷzٵxὀȋ…}㿄࿅࿅ȎĈʼnŋċغгxҸ|׿̏Ѹ}׾е~ַԹҹ̘ڬɓȑηhX\qϺ~Ƿzͼnsл|ɴskfid^WH]q4Oj,Lf*AQ#=J 9@2?SY>b^FhjϾyϸīrjel­xũx̲̳ʟȗӳ֫zسױŕœĔÕț̣ЦɝԭؽϹܾΞՔھطȫնظֳī|̪xȥuɦuȥv˫ɩ}ɧxȬŲnki\]_ySySwTsNpHuPxNyPyHto=pq@li@c^=d`?]W6WZ2`^8dd;mgHrhLubHjV?^O7PJ/KL,EL(JH-QM2GM(KN+AK%?M#?J#AP(9H2?.;:;$+;?I'GM)MK+5A5@>F!BF%IK)DJ$8E7D0?.=*;):2?0B5E4D0?.=1@LQ*TU.YY1c^6c^7jahe;ik;cg9_c<^d5[f4Q_.Pa.M_+I_(G\'I\(Pa+|J{Isr@R`,EW#:M1F0G-E&=!6 7!5)<4 6 5 5 4$83FCR 9K0A)=-A*?(> 7 "9"87 2 6 7 5 2 0 3 '<%94 / 2 6 5 5 5 3 4 $6*9%7#5)9):*;*=':3 $70 0 . /#  (,-9 piI[YWuFyrByN^ִwյv£e[Sbŋẁɏʏƌˆ伃ΕїŌЕӘÊƌ轆溃㺃ǏܞߦDzucJSF5o_EƱ|~zjb`VABEEEG]\]!!/ .'3&-8+2<;?FKLN466B92A7+aS6u^ArPkXG-&+zK`vbĎ_[yQ]bęhݹܢ؜ӗ͐ҕԗ֗טޟߢߥRUO׻ϛӻs}̆ښٯ߮ܤВכӛюˈʈڿѺ{ƱssïtʳwغŌÌōƑӛءѷ}вwϳxĎйɠʑڢ֝ƌɒ˓б{׹‰Иӛōڴ}必企߸|DŽԱuЯtཀݺ}„޻~ƉÇ߾ǎȏۢߦΔغвzٽٽʭsȬrɍćÇ͑ȍ͔׻ֺٽѴèsʔסԡϙһpvUN]îtɊNjʑxտ̵vênbc`b[\XoCi=H`&8N5E.A4EOQ:}kxzwĖѽϸ϶Ũvqqrjuȱ̹|Øھ԰{ЬyήzȖڼƗĖƗپƛǙʜǚę͢͞ǕؼۻŒݿ׶Էӵΰͭϫ{Ӭ|Χv˥uǣu¤zzŲvl[{SoKtT}WrMrEtIxmBrKrp=rn>mi>urQtqRd_CkaFrhJifBt{TgsHZd:shLPT/SS0NQ.JL,FI)>D%?A%CF'DO'=J"?J#=I"BQ*;H$-=-<AD,4@"4C$0</?,>)@/@3=6C.?-<1?+=0@->2A7C7@?E">G!,;7CAJ#HN(FL'JM,c_6YZ1cc8^`6wqD|sFjf':"7&9$7*9$5*9+;/>*:);,<'8#5'9.?-?"60 - %    # $+4 peGQH`cƞibájШpìiʶn]O[kҲyȧvϩrԮuΧọm֬sݵ|ɏҙ֜ˑʐǍ縁{纃Êїȑ԰y޼Ӕܢޡٱ~{hAED !!///=##2  #,PMKrԢoX[p͑⦜z '$7+&9+&8*$5&!1+#&( )! ** Xjʥܯr}ؤr~W`d–gʞkΓΑȊʋ۝ٚԖݞܝܜޝݢϷ˶ŒdznغtǁЎݿ|ۼyԹ|ǎ֦ݟՓҏ̉ȅȄʆƃăιԽÎ۾ŌиČͿΑԞŎƍ̔՚ܢӛ̴|ּǐŠҴ|޿ǎљӚċҮvص{㽃ὁݸ|ڳvױtִxٳwܷ{ݺ|Գwߺ~͐‡͓ແ֛ߥ՝ϕÉĉȎǨoʬrˆڠמԚNj͓ċյ}ٺԷϳzϗ˔ޭɒ˶suIJakćДƌuvƱqgiͯtj\VSXPtGkCm~Y5P4EJQ1pp]t÷ĵķijɞʦλӽεȮ|rƪxҹԻѹɱ™̵Ӿ̰~ͰϭzҲ~ۻڽڽĔݿ‘ݿʛȜʛŔ׷Եѳɪ{˯}Ҵ~Î޽ٺ׹̰sѰ~ղ׵Ϯ~ȥtǥreclm{pzphqla}VL~tDxp@nm:hh8_]6qkMhzu\[X?a\AqpR}gmoSKX.OS0TU6PQ2VR8SR8AE)>C%7=!3:5>7A:C!@H(XYD4>$%1)7BK4.A(:$4'9*>(</</:-<(8)8)8+:.>/@0@3?1=0<-;'9*<';"7'8(70>7DDL&\]3V[0\b4fh:ie:ZZ0ET%GU'NZ,Rh.Uj/CZ%D^(?Y$AZ%HY)I`+H[)L^,Ta2Wh0Yg0Xf/Q_,CR$FS&WX1[Z4VV2DQ'HV)F[)F_)Re/Q[3MP??@@   16;   "14 0 , !%PN6rgD|jIwgGɬ|kϚշЕǍʥpiװxˢmÚjز|̩sçskPYnƦsŤoͩsոүxԭvڴ|ձyϬtٴ}޸ǩoiǏѭsֵ{ƌ̑ưpcһyڲzҧmѨmͪmʤhĢb_Üee`^^YPLPL{}C~Cy|Aw~?q|)<5 1 1 0 (<AO;J,=-;3 %8(8%62 / 1 / 1 / / 0 3 4 !4#7+=2@(;4 2 3 21 #5&74E0B,=%7 3$6,</@*< 42*   %\Y5nk9RdɪlѪqߵ|ٰxֱsaSTZdbjȩpҬsذw߷~伃‡‡迄Ċڞ轅ċ縂~鼄ɎߣٚҔБӛĉώޟ١I@;""-,9&7+*sScԡqГͬFFG+,3 92DC:JLBP[OYldhddh#(&&.1/4=:9.bäoŦğhdž֕ƄʠmУnԧpᾅˍƇljʎ̐͑Ӗӗ؛ߞɶ|ƮpʯrΏ̻ҵt߿|āɏ۰ۛؕǂ»wшψΈDžƯqԺËNjȌĊÉɏΖئ۩ݰӴٽڠКѶ|Ͱxɒչն|ط{†ČЗҘٵ|ض~༃Š⿄ݽ޼ٶz״yں}ֵxܻ†ٶ|ܸ|ć֚ˎ͓ϖٟїמޣݣʔŌ˒ĉݽݾЗןČʔΗƏǭvolrhmк}ڟ̑ú~~ǿztkfadd`zYyPpL~NRuCi}:Mk(A\$Zf>[^A|yfmoSļ»{|ϲкƤknqϴҹͲӸ˱ϸnnm¥uƪyēÎݿ̵Úջշڿȝٻxůʳ~ƭгӳѲԵӱϯֶԲmj^YW|W~^xZrTlĺuTJL{G{qEc^:FI+`bF||dKO9LP8EJ.BH.?D)?C&?C&?D&HI.SR@8='>C'6:#-4)27=$QVB_cT3:(&/)2(2!.."2!1!1&5.9(8%7'8&6&7'9(<)=);*<2D'9 3!4+;/=%7%7';$8'::EOU,W\1_d7SY/SX.8H6K=O!IW*N[-S`1M\-GY)@W%GZ(DY&K],Ua4J[+\i7ir:ty@]g3;M@Q#CP&OS/HS+FO*HT.MY0Gb)F`*H_*J\)hy@JL=+-/,24     & !53 2 d]>xjE|kI]֨ӭֺ˞ќlճ|šl`ٱzͤpejʧpʬwƥoXig̨tYRͨr̪rǥlŤlЮuͩrڲ|Ƞn˭tÌбw׷}͏Ƕy`~Ȇضz֭qѨlֵyʭmˬlǨjŢhơgc]\WWVUKF||Bw}?}Bq{=dp6]j1P_+et5bq3Td*CT"3F4J/F,A+A(>%<&<"9"8(=$9/ 1 0 2 ,?=J8E 22 2 "51 3 0 / . / . - . / / 2 1 5 3 2 2 1 1 0 (7+:.?2C1B(9%7!4"6);*<0- -  ($!}NZcfǢiƝiɡlĜiէqʟg\\dʣoʥq˥oծwຂĊϔٝڝ̑ȍʎɎ湁躀ÉӘߣߡܢ̐ӖݠߨۥҚɏὃ㻀…΍ӫzi & ^exԖ۪rxtb{dXUM(>6GFB#rNdҵ̨mטߢȈ㾃ٱz޳yƌՙ؜̑nj†ŋϓԗڛͼǰqӴvɍӔŀՓ͗ڭשܛɄχݖԍьÃԾ־ʼnÇŊɑʑЖԜڦݱ׷Ďؼĉ؟ܦǐʭvÈ̓޾޾غ~͖̒מNjܷ}ٳ{ݸ۹~׶}Ϋtص{޽߿ִxŊῃڻ~ljҕӖ؝ޥݣߥߧ՜֝јϖɏәؠɐҵ|۾׺ڽċïzqɴ|hjɉߡԗ~ǍʍȉÃnhjpqduZwTnKvLmCn}ArBRm.XU2GH.MP7^aEccIb`IML7=?*RTBXZDEH0>B)>A(9=$AD,AD-@C0II7?B-8<)+34;'MSCGN>/8($,%-'*+ #3(8(6*6+7,9+:)8(8(8)9*:%8&6'9&8%:!52 1 #4#6);-=(:$7#63BSY1U_1IU)IU(IW'=Q 0M1I9N GV(JX*IX*AT%=Q"=T"E[&M^+Oa-_j7dh8bi7Yb2@R#>Q"EQ)SU2BS$AS$DW'HT-JZ.S\7Ydjs8am3an2hx5dt3Sc*:P6L0G,B$;&=&<&=&<"8+ 6 (<*=/ / 2 (;4E'91 / 0 1 2 #5"4!30 1 / , - - / 0 2 !4$7&9':':0 20</?->+>4E-=%8"6&;$830 ,  24@yiCb}ٯyڵ{žigcZ]YalšnҪu޶Ċלݡߣ۞۞כ}Ŋלޠܝڣܡݢ۠ݢߥޡؘ¨   "6.+伂Ȍט.+- .=5FKAPYMXf\bxvv&&4 $!*)*189:QOG7:;"72,WX˝˽ٲvٜ࿄ަךƈڞڝԗ֛ʏ֚ڟΟҷxۼˑϏ̋ئֿܿؗȄߜ֐ӏÂƇϹ|‰ˆǎȏƍǎӛۨϗ‡ڽռɑۨћΒÉ԰vԱuĉ̔ƌϕ⹂߼߿Ѱxص{ЭvۼֶyݼῄںҖ֚כݤߥՙݣ֝٠֝ۢϖ̔ɫsӷ~׻ÊŌȑȒwgqc_ÄǍҔђ‚sqqole][YzSg{@q|DtE^v4Gg&@`"?`!>Z!BQ#GN/}y[{jϴȕtoDZt¦sũxpkeyǫ}ӺıѼǢѶӷʛĖʱ̳ȫ~ϴ׽֫˞ǘԺyvqε{v_WXLadXœțӶͱɯ{apVTS}QuQpNr|cZGhbOsq^wfuvexRicBQM3GE.\ZDus_WV:JG,@B'8=#BE/Z[KNM;LM8JJ3FG-8:$27 56:9:>SSOΑ̨p̥o˜fɠnhzNqIlDmDTYd\wOPXiԶƧpֶ}͙߲ۧסȏʑƌǎʑк{иy‚̌ˌʉӴuΰpвsѵtѶuѹwɵlYTVZ[YQJ}Ckr:lt:it8hq7gr5py9jv7cr3Ob(:L5C-=.?%8,=0B5E,>);':"7)=!5/ ) &bT=[d潁㻁߼ʤo\tNuQ]bjԯz༄㿆ݶ~߸ׯyٱ|ј֜כߡܟÊË罆ⵀܡܞߡߣ̠*       ϵ۞ùڽċthzvkgdpSK[QESbV^ngjwwx  %BF8|Y]hjFO3( +((_fϬoĞЏٜϩoۻڜݟ؜ޡ߻͗…޼Зٽ{ު߯Ϲ}ɴzkjJ~ɌϋޢܕڔғȌҿ~ڿˆɏÉċÈϗ߫Ԡ͓̒Ë̕ՠˆːҙÈشy״yɑɐ͔їË׵|ڷ~ض}׷ҘŊ࿃ڹ~ۺྃӕ֚ޣ۠ټԷzֺۿٻԺȱ{onme^ѻ|ڜ}ЗՙӖɽrqupkf_dbwVoGozEyHOa{7Fd(Ba#A[">M!IT(IV(rtSgrlȰ|Ʊ|kkvgrnufƬ}ɯ}ͻvÚȞй–ҷ˰˱չØҷּ׿zбwŪ}}|mhrxsätƨuǩwute[^WSuO}kK{lIriPjdPkfUliXfdR]_I{mpK|wO}NY~TtpQ_\GJI2=>)KI4`ZDJG+??)/3 37!/47:%IF4[WHKL;DF449 168;$89%66"$.CG7LREOUJ3;-&#&"/>J!@I#8A3<1<1=4@0=/<(6(6(6(6'5'5(6(9':(;+=+<(<"5$:#6#7&7'9)>5LK[,5J&=-G6M@T$JZ*=Q!:P 3L1K$?&A#>!:*@/H9Q"@V(@K.9G&5H?M)7G"1D :N!D-HL.>B(NT0en>knRr|X|YYY%18  *+%&%1+0EER~~ 4NQaYXUtLrcBnLǓ354.,1heVʐֵ|ɧpe^bzOmExMyM^[[^[tDaɧp˥p̩rťqʬyԱբƏѹ~׼еzȨn„پٻzոxѾyϺvлvʸp˷peSMNPOSSIhr9_n3^j2mq;mr:in7Wg.dw3`q0G]"9O3J.G2I'>!9 "95 ' , ) 0 3 2 3 -=.?*;31 0 0 2 !4 "51 1 0 - . / / + "4!32 1 #5*:3B9FAL7G0B6G6E1D1C1A*<4/ 1 "61 - " !!0#$2 nNXh̥rd^zPkN^ΦtÌԯxݶ}濇׬vǙgɚhңnܯw㹀ƌәŋݠҖȍĊˆқڡ㯰jli67A!neSڞܠߥ֚ЕΓᬣZXcJKU)+/jka]^CUi+9O(2,.$ &+/(.137;>@CtșNJԔ֕չֿؙ֜ԯrݼŐё̎ąԗˎȌϔݡʒܷحʊ̵֧ܸ͐טړ؛͑ȉȌÆٿɐΕǎȎŋǐӞŌˆΖњˆ̔ɐ࿄ѭqܹ~Éї̓Ȏ߹ڵ}۸}ĉΖܻ‡ںܠޣޤܡڟ؝ۡަбuؼ׼׼д|ˮvɰz˳}зε{mnlҽ~՗{Ζ֛ۡxsqsulgdmb}Yl|ItH}LvGuFhAIf+A^#IX'HT&HV%AS$x_øýv}xrhpȬyouvӼռӸ|urzr]{Ͱz˰кʤԺ̮|t~pVqìũynbftvjmejnemyT\aUU{VpQuYvrc[[JTU>ru\T\3UZ3uqLypIb}|c[YDIG3><&`WBZQ9NK-IC,23,1-2?B'EG-SK;DA17:%==)/5<<(44!57#&.>E26=+vyr^`X' -@M$CN%7A;D3>2>0?3A7B4>,9,9-:+7-7+7-8.:0@1B2A3A-<,=(<(:#7"5'=!9*CL%4D"?P(:Q 4K7F&=?<3;'HL1EM-lt@{}Jz~Vhhh:HF $    '$&7---?||($%2xPSmJkǓj "ԼӴ}d[ğmV|QuJqGpIvPmFV{RVxJ˩qӭteccʨrƝőԺffƦoɩoյzбvZ\gԾz{ϽwƵoe[RJIIGIMOHv{?fr7S`-Ya0gk7`i2hu6_t1Tk+K^%9S6P4N+C$94 6 6 2 !5 5 4 !5 1 1 $6#51 2 / "3%61 0 / , ) - / - + . 1/, / $4$6->3C7D5C1@.@*=+>-?):1 , * * . + ,;/=4D!7#6(;8G9F"+>3A ,=.A4F7F,@3G7K:J#:B,*84B%FU6FT.\bHTU^]_h+,:**.^uQyRӴ~ȩxzk¥rƢnh{SVWyN}iDjGqKyPyPoDyL{K^f̣lbέtβ~ǖ͝вzӹԽjƨuȩrɪpǥhKJUͲrʵsfb[YWOKHF~zBGJLH{ApxMe.I]*GY%DV!9L0CLX8q_ryͶʫ}]}]nhMlquƬлֿĦƫ~е̲ؽʮ~rū|§vwŪzn˸Ħxolghhgsj`]\`tU9A:ssggY{Yx]xUbwr~uQqiCrTzs^qVyjNn`FUJ5QG0bS9eV8^U5QL4AB*a[HqlS\R:DE+RL4A?'-2/26;$07&)2 FI;06$$-(1(#77FKQ+7D:E2@2@/?/<*:*:,=(:);*<+>+>,=%5+80@AT$?Q!CS#DT$@X!@["8T!;Q#DR(OM/HL,?K';P 8M+A'? 7"85F.?3@!1?'9#:"73 4!8 8*A%?3@ :L#>R%B[*IU=^_[aa`\[[HGG'( ""6  ! $HJU &lOzS}U˜eҤpB=4Ѹj mcgYXsJpH{lC~kDnFrJvj>{Mib7ka8Webȧnɨoոɧp_ɮuȒ̮{aϰqʪkZW_\_b\WQKJFHCEG~DEwy?ot;_i2af3QX+ch5hv6Uh*Jb$?VGY#C[ 2M(<&<!8 8 5 #8 8 6 !6%:3E;J@K:J+=2 $7.<0 ) #% . + '! #1# .%3&5"41 / 3!52 3 '9(<!6+ -0+9&$  $!hŝkدvݬsףnӟm֡oܨr㹀ݭtҠlԢmؤoۭu߰xڨs؝ϒ͐ƊʌՖۜڜטԔ[\c*+5༩d\x1m~=w֭ʼӡ߳՗˛ҕϒϔԜˏ…㽀ʼn̎†ڝךٜ֗߸ެܶؐҋ{Կ~ōٽѳ{׷˒ŋԶ|Ӥ׾մ{ɤnĠkàkֲwѬrӯtկuݹձwѮu̒ߦܢ՜͒Êإp٢lܸ}Ǎʑ࿅۬ߧԘޣޡٜ؛͐ҔڜכܠݡӖҔӖ۟njїڡ۽˦qȧqâmƏњћӜ׽ȩr̰uзzɉڞyyΐztttz}xzwpeda\{bwax^qRmHn~CzIju=La+>Z!7U5M=T0L1S2XH\-õuʸ϶̩ٿӷȯϴ̳ͼԺìʯväqƨwppzʮ}ui`\cia]W\bbǼxO~nFxhGyoSxbvw½|{l]Hk_HnRm_FOF1SI/f[7bY5HC+PO:LJ3piRaV:RK3?@&(.")+.;="ML=+1 "+-2!%& -%:->3A7C5B/=3A=F!AG$:D 6C9G4D2C7E3C-?3A&7.</=.>*:):+=,>,>*<&7):7D;P!?N#5F9NBX";S!>U$=P"BL'PP/EJ*EL*>N%5M,D#<!:/F5H5F");20 22 51 24 :)A?F&GQ,CS0QYGacZaa_PPPTUSORI#3 (      /+.WwSdęf("Y[][|S{Rb{NyqAuHxnAtGrEsFtiqw302$1"1) :1-Ԭ{բqڨr֢mМkҟm֢nݬs{{yګtz{{߯yĊڝєߣՙ՘ާNJ͐Αߥߦܤܣݣߦܲal޾ީ߰җғ͑ܢҘÈƋ͒̐ϒNjÄڞߣޡٝܩǴֻhleݦӌʁ}ˈ׾ڿ͹~ιzֻۿČÊغЙҚܿƎōѬsÜhhӰwݽݸ~߽ŸiݼמٟәԙȎѝjاqۺٻњڻ֜ԙϓݣޢܟڜѓˎɌϒГ؛ٜВϐӕː͒ټүxӰvӯvϱyČ֞ѕ׻ɎҺ}͍ՙx|}xwxwwy}~uigdbf{dz^sQkGlDlBeu<[j5ds91S*L0M:X4P,V2T]rDasFt]v]qz_rɵ}mȫ}ε“ϸ̸ʲĨ{ws̳wè{Ǭf_`bn^yUyUgcustOnIyjDvhFxoMx\y_~u`nkP|zi~zuve`{Rr^wc{smj[DiX;kY=cS1@7D:E 7C5E3C1C4B:H1@0>*;':+=);&9&8(:,@(=&:&:':&:0D6O:O ?R!N#:G#7J"1G1F5G6A&:J$+>5/ / 0 2"924:#>)?4? =F%AK*M\4Pc0L`6UWRGT=U^H!%    "   !_YbɣoceVBǣnibxP]cWF}Lwm@yKwDuF_d0NU(FL%^Z2wh?QZ\]ZZǰvƋ˫tmǨsǪnW`ħlǭqhhhX_lh]OH{@y@pv;jp8fk6^h2ls9`k2Xe.O\)Wh,Zs-Jd#C] I]$AX ;VB\ P\'[[/RT*=J-?8J5H1=*+(#6$.-71=$3%8- 0#70!-(2    * )    ". 1(;'>3&5 2!2 ,-9#$1  gեu_Пl߮vޫtޫtݫs|Ŋ漂ҙҖːΒNjڟܟܠݡіԖؙǐ~ˆҔנ̐ˍԜۢ١ؠۣݤܭŖ᳸Ξף֠ٞΟϚȌyƌɎԘNjӖ֙ƒˍ؛ٜ۟ݾ}@LJ@PN6BC)36ܜ΄̄ǃ€ŊĉNjμ{ֽéw§vԴ{ʑԠܨԱvƠiÙdƠi׷}ձyڵ}ֳzԳz͕̒ȎΔ‹թ{Ἁܻӵ|ϗ۾ѕ۴ޡ՗ѓɌˎȋ͐ѓϑˌ͏ޣ֜ŊЖҙƐټ࿃߼Ɏ̐ʎϔջѹ{ݠ}uyuuwsvvyzʼnÆ̺{mlfca}YwMrGrHpEfy=Qj0Qh.Ym38Y.O7Z?`9d3Y6[-V2W4WmxVfVb:Q`6sϵçx~ʲʳƳξwènvħzè}ĩ{i|ZZ`ua~YxR]Zum}YoJqKrI}pEsi?yjJwgGjbF~xfpo[ghUPT?Y\Jpuatx^anKgZXsEfsPytkcRUK2]P6NG0A>'TI.A=&ED+yo\`ZBi\FNL-<:$&+-023CC3Z\O) ( % .'7);-=+<,<6C4B0A1B2C0B4C4D6E2@1?)8&8&:):"6$8%9!6#7#7&;':):+=2H3M7M>P"9M;L 1>2;!>P#6L5H+D$@0I,A7I!8H"82 3 3 #=4H )? 67:'@#;%<*A%E.V$WKe,CZ,KYnk`8`;b>_G_$@Z"L]2AU 6HZdCrqYñmeǮŬïncgmxrnnkt_[e`YYyS}U\`[boJtN}lGvgDqeCteDtO|h{g|lxwfkkZabQRW@IQ3CM.<'GB.SJ6@?(]P?`YD;;%+-,/ '+IH;`eW&*"  ' 5@-=*<(:2B=G"=G!9E5B,?2CBI%3A-?,<'9)=&:)=%9$8&<*>$:':$7#8'9(:->5J8L6M7K7G:F!AI%1B-C-B*A'>$<*B%=)A*::C#)=%=5 2 1 - / -A 3, (: :!;.A$=*C1I#H.M-HAH:$+*  !.  (   !/ 3+*sQY^~WaR@SD5 :3,|Vhg_UXpH{oCW_.gd8dj4pm:]d0T\+QT*YV/zOoATTQoB^oćjmnkѾSZųvT_RUL|DQXSVJExAt?t?c{5cy4cz4yBo9i3[z+Tv(Mp%DhJf"]n.Rd(EV!EP HQ"@G""   &           $ -,<):2 ) + . H;2“h֜nݥqwwv缄鼃ˆܱ}ժxӦt~꿄ВՖיݢڜՙʍϒԖ۩ڮ٬̚ئզӟԡݭݣߧۣԚʐ؜ߩߨ븵hڶٟݡ֛ڿ?<<ûŐȐ͖ÆΑѕi[Jͣt輄ЕӗˏƊ†~{ᅢ̏єךҖϑɌÆϑܠ۞ڝڝٝ֙ѕӕԖϒ՗ݞǰdpfFXV89 $+$   "&*ذ֖ӹtϴpٿ|˪jϭpˮtͲ~׶{ֶ|ζ˻˭y׶{ַ}άtȥÏۼҰvɥmefddâlӴ|ַŎۺˑϖڽаvƍֻ̓޾†ˎ̑ϓϓ۹ϰzƤpmŢnË֜޿ۺȎַ޿ʍ͎͑ϔΓʐޤӑnwvxȼ}ąޡߣڟʽϿņҼŴxsŶwkkpm`tXuUkOgG[{9Xt6^=d>_y6Lp)5`<\;W=^@_@_DdEb @R @O AM!AM%xoihibaa^j\xQzR{S|U{T_VX[`ZwRY|VtNyPvOqK}pJuiDh_;haCkfN__GggSHM6`cPBI4KR=RXDjq_A[6=GU=zonj[MG3PL=22 D<(:7$<:&04:;)RH7OD166!%+;?0:<.WUK7=,, .%4&*&5/?-=2B4E=I!*='9*>)<':(=(>#9'='<&:+>(:&9(:(:,?3F4H9L8? *;&;)>!;0D3G29+  ,     !hKtQ[d" 2(&nV@oZCίyƢohgZtKsGjg9P^)bl1mq7[d.R[*QV*i`6}nAtERzLQvjE               '6/=-< 31 #3" ,)#:5- UI>׭}ංzx~纂Ō龆ⵀ䷁ʒݲ|߲{ȎĈԗٝ۟ޣ۞͙ۡ忉ȑ߳بҢۥ٠ڠɏҗ۠מޫ٦֣߮ܩީީܨݧܧנ֝ѕęw߱e`Y$ϯƎȊˎ΢uQG>ݫx̝oȍٟڟ̐lj~Æȉˌ̍ΑГלל؜ڞܠߤߦݡڜٛԘѕݠʎ{#'!  {|ٿ{ƃҴt̩lӵxӴx׸|аvҲvָ|ٸ{ڸ|˒ʑӴz̒ݿֶ{ַ|˫q^a^ȧn̮vԹċھɑ̓ŊҶ~̓ʐȏȒˆڼۺ~ܻĉ⿄ڻϮwѮvִ{͑؞ΔČٻ׶yٹ~ˑݼĉĆڞє؜ڟ֞uoŇňȊٜߢޣˎƈ̎В՘ѓГԗ͐ňIJuqgae]vXmIjD]{;eDaBvG|ETs0El(3\Bf#/[/W3Y>`Kc$:M5@>G#DN)abF{is|ifdussj\e\}WsQsUwQ{S{RxP~TrKwNSxPqNaueBoaBoInIkFtdB|jF[V7EG(DF)@C*AE-CI3TYJU^LN^B*K 7AO9*>-C*>*=)>&;'='=$;'<(;&:&9#7$9-A4F6H;J!=L 3F2=!;F*=)=1A':$9%;0 . &9;E 9E!.=9D"6B*;52 . / 2%47?4>5>,:,7%6":1E.F2E;?1#! ,"     1 vbHwSucFpO1($@2*uUiǡnjaxNwk>Va,Qg'Xj*Te)X`-PY)VY,jb6uDyHwILPqi:M]ǰqg_ǮqȪl^VWzLdk^vDGco3ir8[i1~DHTGt=sAj:o9v>r;l9e6n:^{/Oo%Hh!Pj'H^%Rd*KZ'ܫxϜm巂ƌNj羂澁}濂ąŇ۞ߣߤߣߣ4EF (    068ϑѶq}Ըyּټչ}ÆÇ۾ظzضzض|ܼҳwӵz˫pʪpϭtģkæmìtѹ_aռɗћءɏÉ׷|Ǎ׹дzгyҷċۻ⾁NJȌÇƈʼnć‰عͮyɪuԳzҲvȍɐ۹ˎߩjuޥߢܞٜΏʋϑΐΐԖԖԗҕ̏NJۼ~ҸztnhdZ{QzPf>nEyKK{FrAVv4Xu3Fd*Wv0Fj#4^.Y5Y:S2K(G4GJQ0qp[x´itòoygdmwi`g^VUY}X{Vh}mK~nMyR|UxSuTwSzfC]T5QP9acSmoahn`go_*@4O, <; 7J.4 A 0FIQ7XbIPWAmpcTZJzxmqpeBE5CF5EF6FE4;9'BC2A?-F?.32 ',!''','/IO>-7!.:!/)7#3,<+;(8-;3?3B5D3A/>)9#5*=1A,?/C-B,@,?)=*?(>'='<+=%74 3 3 !6(=)>/C1?8?"E"7G3D9G2@);&:/ 3 $5'6&5%8!8#8&7)5"6,B)@0D;K#881 "'#RR]  "   ()746B58C% !01@ 1 "   sbGdWL[TFI|DBj=a~9c:Zu5d7Pr(Ji#Jj#Cb#JZ)-5%$!  "&0    /:&9$8/:=B 2=-! |^#   TF9޹٫yգsѢrԣt縁ɍǍާ՟̑ѕםٝ˔ƋǍЕʍ̏ɏ՛לїڥݨۤ߰ݰ޵߭ޭܨݪ‹Е帀漄ӝΥvסڹ޺s^833ŜpɖkŒi_L?{eO޺Ùlԥs弁ƒƒƒ߷zڰtݲu鿂…„ϐݠޣ۟ڟݪ$!+    abLɉٽzٽ|ٿňćĈNjȌД͕Njظ|ڻյx۽ٺ~ָ|äkakbʼnhӶ{էدۼݼۺ~ܼݼ׳wӯsȪrӹǎ࿄͐ϓӗʌϑʎظҲ{عʏלכݼ~ճwȎ׷ݿϬt՘ߪ͔ȶw;ՙۢܩةzkwטٚܜՖܝؚғԖѓ̎ҔєΑ̎ɌжvqqrrmT[|QtJzMXNOzLkH_}+>(:$6 2. ':->-B/C.A,@1C2C(<+@-A0@*< 5 534 55 6$:*>5A9E-=+=#9#70 / / 4 %9GM%OO*VQ0IM)9@!6B)<&9)<);-;*8#3/ $8%8$7&8!46: :2ERT3((*   (    ,-0>  '$)77;E`xUnM}VwT~eJvRuPWlf;kr7Vj)H_#@YIT%RZ*MW'KR'YX/d\4~k@M~GNOQVWa\VYTcZoReRHMd'Ll'l8BRTLGR}Cq=j@n@lBg=Yy5Zr1Gd$B\"6M%-" #&*4 *9,=!5,;/: 0 2$ 2.&"! .)+eSC   /+)|mUܹǑܴ֬yܱ~ṅč˓ȎߥڤԙӗΕ꽆뽅뻃콅뿆ʼn뾄njЕԚќ޴Μޮ٨丁З۶Ǡ֠࿊Ϫ|ɕWPF633ʞܬyͤt.-/ܩׯ|ˡq輂߶{޶x澀z~޸z޷{޶|徂՗ܠٜٞ3IJ ") ),ǠܨɆ|ݾۻ~ƉljČ͒ѕԙҙƊÇÈܽع|غбyʪphmֽ͑Ɏܼ˦kЯrȠjϧpɣnҬrѬtյ{ŌnjǎȬu׼Ǎˏִۤ͒wnjݿԳz̫tȧp̑ιoc_Z^drwúwĄ֘ٛיܝ۝ܞ֘ԗؚ֘Ҕѓϑˍƈ俁׶wmjturkhe]U}S[_^TuKd>f~>Ch'`z:b|tY`OV[MMTC/8%MQBQUF79&%-;>//4#BD5%,!*#("*#. 03?3<2;6<3B8I4D/?/<,;,>0?'7/ $6/?.@.B+?-A,@,@3E0B+?)=,=):%8 4"52 53 66!7(=+=+<:@ 4@*:%94 6$9-=:FEN$LN)IN(BI#9C/>DG#8@&6:)$$0!  -  #8@4 ($  #$({ŤuavS{`D  WF5~iJwPOP*Y^/IW&3L/H4H@Q SX*PP*QN*SL-WN/wd>n@xHxIvIS_[ZYUUh_i^_K[m-Ok&BPOGMPO{?v?xBq>o<^4]|6[s7]q=BP-!&*0-9/;-9)4+2 $/ +  '  -&& !zgC5/-#  484lo^uڨƔő˗Ԣݰϙ̒آϖ͔Ȑ}{蹃̕ɐ͕ƌԜܯ߶Κ͖ōߩ͒ߺŌ濳ϔӛЪyЯΘf_OQQLϢƑPRSAEKFGFƯҭ{ɟqݲ~~Zʙg٪sڪr|ĉĈ†ܶ{Αݢާ֜ݣߧ㧩 !# +8;Ќ€۹zć‡Èȍćƍ̓ЖѕܽЫqϫqΫrâlҲxévֹ~Җݺ}Բvğhb˜dfɡjͦkʤm׺ċŌؿԺʒܥיٛ۝֛̐ݽڻۺܻۼ˫täm߾ňk`^^goqzӖכؚؚΓ̑ӗٞڝכڟڟ֚ϑ͐̏ɋƉ~̰ngcklrlqifc]~XY[TaF_~>^z7Mn)Oo,Un2^t7}Gb{6.^Gk"Ce!1X:[7Z5[6\Dj0Ei/@e&Ac"?\FU'GR,bdHffMkoSpǼx~aKR9tuf>F2qqeyuh_\GqgTxmZnth/3 =3 +LTpI;[-: e!4X#G=(:^aQ]eL,>IQ8=E+7B+,=.=+<+;.=1A-@0D-A,@.@1B/@"5&:*<&9"6&9$5%7#6!8,A*?)=,?':,;4=+82%7$7*>,>-?DL#PQ*1- + + ) , 4+ . , - - 0 $56=<:)$$"' "   +&TY@_viNfzdڼĢswaDx]BG8.eUB^Y3sg?X`.4Q.K/I>MOX'XV,WS.\S1aU4m^9tj;uE|KuJxMccaQ{NReVeʓa_^ICgv5Q`UQPNEFLv>c6^3f8]q9\i@$#2=1>.=(4 2!3+    " D83  /1/ϫܼˣw㼊کסڢޥؤԞ۪ϛ丄㳀ԥԠɑՠΙ͝سܺ߱ўӛݨעݦԞа}ϔӮvԮtش|ض㶪qЗә̫{Ì$0(,668>  )#'pšmЦtaĔfǖgԣp}漄企ՙȔʑٟޥٞڠDPJ! 6>5;?NMw{xIYYbcUmܾΗɏɍɏʐ֟ȎƊݽܹ~ϬsɣlұvֶzȬtkʏڠءȒͭ{ֱ{ԱyŌÉٵzѱvʪqӳw۽ۼ׽ؾË͕ҘәːːѕΒʏ‰ۼ۾ŌܼܼԳ{в{̬tݻɍh`imwxڝۛڜѓ٠ܤޤڠՙݡ۠םԚДΑˍňň⿂Ҳt¦gcafceiyehe_a}VTwOlKa;Ty,p:a|1Vs.`v:}I~Eb}3Yy/Dh#;b@g#Ag"7]-W8`5]2[;]Ha#Fa ;\:Y:T{f~jAa,egNuuaQX@mjJrlHfdL"<$9PW@8C(.91)8>H3CG4XYLHS@1* +24>>.KF[%L[.Fb*@b$-T!B'50; B"D< 7 #62<$.;%(4 ,.4 16$,4,403*..1;8 (5.>5C:C?F"=G AM"?O!;M0D.B0A8I8G3B/=.<0A3F5H7H-B*>.@1@';5 ':'932#62/ 0 %<.C-@6D3A,=.</:*6"2)8&6'9%7'73B7A$6'7,9+7.9+ )* ' 20 0 / ) + ) , 2+;=>& $   .%     #%+404;4$!RG5[ò׺ұtRnW=u\AWE4VJ;zVvQil7L`%RI^"XY,]Y/\V0[T0g]6tCtC|L~OXVjcR\`k[Vv\K°tOS[k¹qcSVMZSLt;m:p>\5Wm6A&0 sۿ֡ڣƌɐƍ޾ċĊĉȍNJ޾Ɗع}ŧoɫsȧpϔۧӜ࿅ۺͮtͬqٸ|ČڽپϱzۿǏƎ޿ݾԶٺËʒٻҴ|ڹӱ{ƣlѰu†ɼ_dĵtsԤܠۛݞ۞ڠ١֜ٞכ֛ܣߦݣՙ͑ΑʍյvŪiŪkbb^Nausrkhha]_^|TsMe8LHp<]x7rG}Cw?w@r=yF|GyIsDLk+0X*T&T2[:^8\Jh'@j1b2[-\)_!V+N)CZdI*F-@? #77 1. - : -08"0/; ++5 8 5QG`#Vd1H]&9Z1[;c /V? 9)@N %S= = 0%3%3#1,#/+2170603/276JB'2:(;*<1A8C6ECJ$BK#?N 8G:H6E9G;I9G8D0A6H9L9J1D)@'<';':$9%:->&81 #5!3/ . 4%<&='<.@0@"5&6'6"2'601 3 #80?9B,;(8"5- . '6/ 0 / / 3 1 / 0 , . . 0 3*:)+" !  #!/ %./ ''.62&/- tdJȯdlΰ~WfS8dQ6>3* YH9gKvO~uCN]'I\#?SB]GU"T\)XV-TO,aZ2fa5ult>r C $WJ 7 8, #1(4'1 -".;C,)3157634$26"9#;)=/A8DEJ#NR(RT,BK#6A8D:F?K!AJ#;F>J!AL#8H2D/C,A+=(<!6#9(;);4 3 !4/ * . '<.C0B7E4C*=*;&7,9)9'7. &:';+<;ABC"+:)80 + %3&511 / 0 2 110. . 14#7!/%%,7 "   &/. !*)4:5'' *$$sbHpmY]M2EB#kU:!wTpHN^';Y7X=\D] Uf*UZ*MM(NP(^[1ug=}L|k?uGSY_daiҵ}ھzeeVlYkdQZl;FW[SSGGr:Vo.EY&Y]G)%0$6"4!2  '#'  %!'%*!&$#   !   !      $)5hjp* 7:D) fݤߩݩ͡ظ͝հͦzӪ}̕ʐǏʑۥڣީ٣ڥљӚܬ֞‹繃ᴀỊܪաإǐ۪߼߮٠֞ɚяǗܴبڷ濏۰߲٩ԟ֤קبʙőפҜݬݬ۪ߴޭܼЫŗpˣmƜk躲s٧ަԜמʐܲ}忄ۣJLP  !(#&ĥxȑ㽄ٳ}Ϣqfơuݨқ٠ޥΕČᶀ}㻄佄ڱzⷀ佅Ǎ؟ݤݥ˂y#*!195GL6IN,AH 8A!#$)k۬Ӡ٨Ϛ̔Зܫx|j'~}i̕ѰtcĢh̬pΰv̭tͯvʯ{̯yۼ׶}ȪtlälͫrϭwӲ{׷~ع׷~׶~۽ܧעōÊƎÊճx̪mfhâj˧oȥoұuӝܶŵtsмyޣٝݟؘכәԘД̏ʏːӘ͒ȍ…۸|ծsصwߺ}۶xص{Ŕϲuddehbifglnc^^yQW_]W}Ll<HzHzHqExFuA}CnAuJsKby>j~Dl}Ff}FfDqH{KoDb;Y5>y"$i#h*k0j0c)_T Q ![$`T P K NTF 9 >=>B EE 'K%K!J&M7VN]+I](F[#4R-U-Z(PH G 8 : > < HR : 1 ) $2-8&1)$1/8(3-736'4!76)B&:&;7G>H!?F!CF#SJ-GH'<@!7?;D=F BJ#CK$GM'CL$;H5E/B/@+=*;*<%:%: 65 3 0 + ) !5+B+@+?3C1A%95@9@1<1<&5$6"7);#7BF"FG%"61 , / (6/ , 0 . 0 3 0- . 0 . !4$8"0 "     !,..<& *"   !  ).!!2   #&284EF= '#"^gF\K0SG,J=,7,&*$#>6+|qDMZ&~Bz>_y3A_#S`; +1-9'8(8#2,"/68  $/ !! $)&$$   &*       %-$$'8:F "RPJҟȨ}ƚʛ߽ܷ֨޴ɐ˒ЗҚӜܱ٬߬ԝŋ龆币Ðۨۧ߷ܫۥܣݧڣɓЗ֟ڥʖ⺅ϡװkĜn⿑ɝخ޷ڰתТ֨ը٩ՠӝްئ۷ڪ߰ٳ}Ġoiذxಳs؟ڠїڣߧ‰ćʼnmdV  H;4ҬyΓ༂΢jΚihÌ⻄˔ަ١љ΢rˡq轅ċ̒ɐ̓ҙޥݭۢ߷֣   ( !0 !0"/"/!.+% INKPSMeleȴʑw}vyh]_W" !)1صtàhȩkɯph¥jgfæk̫oʨmɨoãkfĠg˧nͨq̩rϭuѯwүxղ}ݽԤԠܹٴ}׳{ѮtάpϯsȪphihŤm״zԞ֦̹|nɊӕߢ٘БƈɋɌȌĉ̍̏Ɖ㼀⻀ݶz۶vѱsֲuӮqΪpɪqʯtɯs˰rªkbejbechifbVX^[Z}PxHMoCiAnBg@f~?oDlAhAmKcBeGhJhKfFpKqJnGrJiBpEf>N1bEUAXBQa"Ea$G`&Oc-F]'?X#2P;T 5Q/N%K F &I8U"2T C C E D A ; G R F 3 * %7/<+4$0*6:?.:4?4;)94@0@/A3@2A9E?G!BE#CA$2:6>18/7090=/<-;4?7C9C:G7K-?/?-=(:"85 5 2 / 0 - , 3(= 5#75D4?2@,;3>9B(8.:/ / . 1 8A,;1- !5(72- * + , 1 . - . #511 "1$." ', .4=$) ,% !,06,"TU]cfmTXa;BN!1>CO-   )% !""1$#"--=IIU  oPiH\I0XH0iV: PG4`^2GV#5Q-I1E2B>JOS(TS-NI+VM/UN.sFRR_c˲wվǎsmub]LiVQ`Ƅk[u/Wz/g:{JQNzDMRKr}EVc9'(* +4(6 1$4+$46 $&$+BD5  '$ ECB۬ͬС޲۪ҝܦۣ֟қ뿇Ҝՠӣݯޭ߱՟ܦܪס⼇͗ϗݩ⾆Η޺կ~֭}ٸ߼߷گ}߸ɝ—ț޿Ɨ߰ʕ廆鼃꾆Ҝ߰߭߮߯ެҟܹǣt˕ؤz֟җ١߫Еܱ|̭|(dxćשoʛeФnѪvϧsӪw忊޻ܶЙ԰~b̧uɐљҙΕϕݤԛܣٞܩ؟ݤީܭݲߵ=G>"   )0<(lFdE]@gLbHeHnHoLjIiJY9a=fBmKdFs[xapWdLP9Qy:Wv=Us3Nl,On-Pu/Nn-Ff(Rh1Lc+Db(?]%Ga'bj;CW&2M,ME =K 1QG A @ "<(G"I !E B = "H B @ H L B7 .,>6A )62=2>;A;D8>.9-:-:9E@F @G!?F 8AJK'=B!4>.8)4*3*6(6,;3@8B9D9E;E 2B+?(<,>*=!85 6 5 5 1 . , / / 1 1 ,@6F,;.;0>2?,:$5- - + / $6 135@&9-<*;#61 2 0 . / . / - - . 0#1  ( 17? !!#0! ! &((6 *"29?KJPZ")8"3);AJIOW49C8>H).: $2" =>G??H**9.55D.0)&jJYI1\M3/("obB^[2EW!,L.N+I.JBX DP#IJ'FE&GB'ZR0rENzJV`bgrоztSYMgSȷ{kbs=l80^zDTTL~ITSyJar:&,&#,,$ % " %-12!'!( #!"/ GEDݮڸԧۮ۬͜ߩުԜߩڥљŎћ߰͛߰ޯؤנڦҝ޳~Ɛܬ὆իsΔϢ׳ƟqǟsǝnѦtΡp͟oԦtӦtěmk̥wذ֩إ֣{zΔݭ߫ݧۧ߭̐՜ߢբіҗםϘtʾǐۦʍߴ~Ê{r_*(0ìЙ̒ҦleoͦtÜoƚlhϢoΧtҬ{ɠpҧqŊƋ͓Ɏ؞ٞٞԘܠݦެמ֝ۡ؝ܱۢ߬۫󷺱1:9#?JIYa\ +0;)>FANR_ab-9E  ##1[MA^RF #*ӖȈNjŊĊ̓njÈĈظ|׹|յyֳy״{ݿŒԴ|Ѳzոն~ӳ{ήyܿŒ̜Ң׸ԱxԱyίxعŏɫuãmٻѕءۦϾsǹ~ƶzκ~Ԕ۝Ӓ}ĄŇNJɋ͏ѓӕˍ仁⼂޺ӳvӱuʩoҰrήpkjm®qoee^Q]RUZ]dca^XXVS}RtLoGnA{GzGrEhCpHeDeEeEfKXAUu=a}BhGdJ`zL^;W{EDF#4=-9+9DH"UM->C!6@6@EI&=B"8?=@!18(3&4$5*</==E!-?+@#<!;7 4 4 2 2 4 . 0 1 #9*>(;, ) %7*:(70- , / 1%8);%80<1?"7!7!30 / . , / 2. - "3!1'3*1     89D'  1 ##3 ""2 # $  .# )!!.(.( ]K:t]@QE,0+ "! qIsi@sn_?R EJ$IJ'GE'ZR0|j@zKsH~L[}QzO]rmƯ}ʥԸ߻Ð^NŲyo[uBI`2F_aLwEQ^wQozDBF3  $ !  79%'  |޳ɘ˘Ӣޯ߮ݩޮݭݮ۩ޯۧުܪޯȕ฀⻁޷}۲x٭unj޲׮}ྌ׸Φv͡rʞoΡq̠qƝnǟpҨwහɕץ߱ǑԠ߰ҡް}~|Ѡ߯ڣ߬ܫ߻ܭ֜ܢޡڷŒԡԢ֝ڪČؚ֝Ĉߴ‹0-2ok^՟߹~ɣnp׶şrjhŜla|[c֭vݯu{̒ݥɎڠ؝ߪ؞ܦҖٟٞۡ۠ؠۭ߸&DLP!%вbps #,1:,AGFQUZ]_&5 $$(6 # #'n[MA !+?PW֣ܽޫ߳ܮؤݫ٣՜̒Ɏ…ŇΜУ˔྇ҥ޳ʑٷճ}ֳ}ղ{ִ|ش}޺ˆŠֻͱ{֭ϙʫtҰwʼn֜٠߱ķ~ɺ~ʺˎΌɆ|ʌƉÇŇ̎В̏Ɍʼn俅ܹض{Ұu`hϰrĩlhciijaiH_0DD~IR_a]\YTQVRWWqKwKzGtGsJeIeFkGoJgElLwUdKRw>_~D`{GhIkFexOfDZ9O7ZC`I]F\BW|A_}KVu=Vt9Sq4hzDey@4_)Q,R-Q'L#FA !D D (Q5TD H )NE @ > BH!AI!);2A2@TN,@D!2>7E5BFJ%?E"=B!DF$5:,5)8(6*<4C0B1C.A0A+>+>.A0B.C!: !;":"<(@'>8 4 . . )?0C!6- 48EW.Z8b;SKQ'GN%HH'PL+f]6pB}NuI{J|OuhAzmD]gĪs”ȶ{ɳ~̲~̳~UZ]a2Wf1Uv,h7HPWMyGRbnHYd;$%#   " %8@  )0 $%28+ $Тצް߮ӡ٧ПҞӠס٢ݫΚأ㾅㾅ܲy}ܨϝΚ٦ݰϠ߶ۯ|էv˞oϣs׫y徊Μݭӳ߮ēݫv}֢қڬդɔܥ˜Ϟܵڪکݯ߳ߩա͗ߨˍ}۫x㺂l$'2ެ۴{߿ڻ׹ܹnbib\cХp۱yةqתr企Ɏ޶|ˑ١ۢۤޭԚіכٞڡԚ՞ڭ߂x gpkYkg*05:3GIQXYKQV ),+cbUɓڵ{1-/ !+ 85G+2B\\a֧լڳզ޸եМڹÑΛɔ͙ČÐɛ̵ֵɓѯvʏٟ٤Ϳ˺м׿~ņĆʼn…Ɖ͐͏ɋ״z㽂ٳy״yطzƫmg˪o̭ngfa`ehgbF^.Jy?O[UXYVQ}OvL}MOWW|SwQmJkJjLeGfGhFjIdEpKqKoKaFhLvYiOaAeCpTaD`EWET}BZ?X~?ZAfO]x?Tq4Ln2jzFAn"&U"I "F $F2C0@.A%? ; ? D C >D 5 : : : $H 'S= A #E &L,W P "M -T#Q C3"8!<,>':-=.@/A6A3D/G*>-B/B/A0B3C0C%: 7 4 8 ": : 2 1 4 !8%9$8';7G3C5B2@$30"5/ #7/ - )</< 51 6#5- );4+ + / 1 20 , 1%68="12' -*  $&' ""2'0;;I88E"5.(yTydCVI.QC/(' bW:bY6DR"2W1[1S=Q:J>C HG'dZ4}k@nAwd>mDsJYqGUXdȼcSU~MR|uEqm/=.X?L6P6W@PzAg}TlTrVmUoZpWaM]FRx:Sy:\}>\{B4>:C=E);BI$8>8@?C!FI%GH%?C!(6,:*9+:-=5BAL!4G/C-E3K-E1F2E+@)>'>4 4 5 ";3 '>:H$;1 4 )=6E2/"3)8(932 4 0 5.>5@-;3 3 1 / 2 - ) . / !2)5$3"30;EE,%+%%# )(%BCMJLS>?I!0&=AMBGQ/4B/    TH8nK~hG[M2KA(#  ;;*NS*>T/P-N0K1B1<3:CC%m^8wn:qe;iCqHvKV[QY^[^\SyIWKVfb7@R ;fV{)m7BNtjAqHUzP}Q[W``AY~BVvCG7A-Q7K/];iBdB\GTCI4G0G1P9N~76(U{@Cm/Os:V:Q~2bBQy5`xASp5Oh1C\(A^';^#Ig(G`':WB/9/;,91:ED&:A=DLJ(>C!7?,<,;*9):4@:H6L4H2I0I+E,F0F(@0G,C6 : &@ 84 )=7E"8';(;;H.>- / 2(7$3 3*="9!6.<&8 6 4%8$84 6 "70 /, . +8-8/98?IF*%# $&&, 6:CJJQ ! :;L^_iVWa&)=3 % +2?#2"(6%.; ! A<4~jK\nJVK/H?+ e]9he9Sc).M-M2F.@.<=@!UO,]Z/}I{LxLpHwKQ]_gnPZQjdd]]nk;7WLw"f3=i@gPo'o8}D`eD    14>3      ")"% " !  ߲߰ՠјćɍNjϒɍ˒ԡ޽մÔ޼רڴۧ͘ѠƑʙݰ̟ڹ֯Ϊ~̟p佇ŒЬȢzٱٮ翊֢̖қբϗӨϞԤڴܷۯϜƍΓܱ۪נޭޱ߲͖Ɗ纃ස˨xqRF=). *9Čbahe]ĝnϦrȞkǜkӧt広帀翈ԛƌʐϖԛڢۤߪ߭Ḩ&(.   $؝ܴΠj] #    KLB|uXzɖsmeaȶyݽ⻁潃羅翅漁ƏЙ͔Ɖ׺|Զz̰riVN[©je[Z^^W^aaaVHPUu?uBJGFEF>q7t9v>zFtDLPRUOMlAqBe7W2qGh>sGzK}MhCV;A*|P~LPmD[5A*V}=Cr1Hr3Mt4Ss6^:S{3\x=Kj1?V),I1Q"Cc)Fa)CX'AT';R!9S@W#:X"P"R2NCW!(K#L4T7U-PC G F 1TH !K "K "K *D5O-H-E2FFS%P^(H^"BWFT"?N;G.?&6,9*7-8/:?A#AA&BF$OJ*JF'CC#8@*@&8$8&94F3F.D,B+B&A+B/J0J.F2G*A#<'?5I)?$;2 6-A3A0 =H '82 0 &90 * 0 0A%91 3 5 %9$;!9.A$;3 4 1 0 0 2 $6)68?YO3+,&"!,"   WX[IIP  QS_XYc ,"  +'#iYB[{kGME/ "!MH1X_/EZ *I-I(=*;1;@D"QP*RP,wCrFvKyO|O|PUXĨpdXXPWTeh~ODT!3fRw&Dj3eJl#du3ds5QUB   %(=CF1;?5ACpq^OW7*1'     $) # " ! )(޲߰߭ϛnjˑɐեתʟ٬ďΈП߻˥sќЛɗצʗǕݩ߮کܫɝܱ㷃յٴԧ㵁Ȕ͖کޭݼկӬ֮۵ݹ۲ڬÎ鼅ː޲ݯݥđϒӗ乄~ܻΙή~r  + , .A:8Uø۾ΧuhȦt›jԭx̦s̥nhϦs亁ȏʑ֞מÈ٠ߩݪ޲߼ڣ  '/$ *69ߥן罆ɘjݴzDB8  !#6 !'  qt]{znqtj׽Ŋ必ʕƎѽڸʼnؿųp®mX[CLWab^RLRvJVUTYR|?SMHi;uEuDG{:n1t6AFxDMxJ~KPUTPPRNzGPsBtA~HLa9H,R1{FPXQK[3O3X};_}HS{8Kk0Rj6_z>V{6awACa+Jd-:V'-MCa*G])7R 3O,K-N(L"J R O3J9Q%N"L,L&IG C !H *PJ I N $O 'M*F+F'D)E6GJ^,@[AZL]%N^&?P'>$:!75 '7,9.;:A8H :B?C!?E!':4 6 !8+=+@)B%@)@)?*>*D.H-F.G1H-D)@.C7H7I5I#;&>'=)<+?@K!(94 1 &8(:%9/ $9"8!7 !74 7(@(?%=&<"7 53 !42 $77@;<%23&&(#*" "  *01<  ':=N&(8  ! C9/|kK\Q6$2,%LN/L]&+L(I#B$<)93;FF&XR/to:qfrsfLUB     *11$00!0/.+,<7߯޲ݻЛ潆滄ǍːўݳުӞҟղ߿ȓۨǑԠϛݨϞӳ۸ҟݶ㽉ǑҬ}̢zܵǐĔ۫ЗӜ؝۟ڼګܵڹӦ纇淁Ǒ߱ߺ߽ީ߰˙Ȑ̓ǎ罇㿈ţvgsz_  + . 7)-I('DCCRqΥ̚ھȟmѣmˤni^ְܽzӪv۰z}ŋ侃Ӛߦ՞آ̖ܻΔޣߥܥߨ߸߷تص۷ݽ}s' 278&38@NM4@BV`cispʹۦϘňդpڭvھ)// &,; #2%*> #\aT~Ĵ׿ѡݯگҰۺϯɸvliWW}@M[dVDJsy@{{GNRLMPJu;QJvIlBe;[2y=}9GHz=j2e5Io>w>p8n8GJ^c=H}HIp<_2R~)e2o;xDRZVTPyBe=Z:N{3Pw7Wz;Xt;Jj0On0]y<`wAE[,Kc)D\(-ND](=X#4T&M HK I O &Y%R0O'M)W$N8YJ 'L$G $I4W<[@Y(M=[&I*I'E-H0I1F8P?TH[#EW"N[&HS$+?!= 7 8 &9)8%8>F!BE$CL#CH#3C1?2<+;$7#8%=(B(A%?&@%<)?-F.F*@+A'>(?(?(@3E?J!6H0E3 8 4 7,>':0 3 2 (:,?.C0@4G.A$:5 -A-D/C4E)=%76 #7%8%8#53?05"  9;"*# " ')4/0;  %DGT05C  #) ?AMMOZ `R)=6>?B"XS0{IvDum>pB{R{RTMQZYZ]`mcZaRW),J0de3`q4Hh$Xm,On&4=+   $egk/2=06>/8<)27+37GJI]cH  & "#&)*//*20JPM۪٨ݸڴ֣Ċ轆꿊Εіثڤ٣ܩۧ޸ŒɖۨƕҨwְ߾͚٧߰ޮ͙ʠuڰњ㷅כ֗ՖѐڛѤ޼Šٵܴ͢ڵϢ渄黄߸ף۪߷޸ݧԞԹǏč͊ỆѮ~Œtǫ~ng_ ) + 1=56O4+)0ӤӬwөqɠjǤqbmײz֮wӫvߵ|ʼnҘ֜ǐʒ̔޽ծwƎۢܢܱߴׯڸ蹍aecʻݬܭИ̐۲{Õgٮw˳zBB:  % */ 6#(,y¿½ذ׾÷z´unh`~BRcĪe[KKFKLPMJJGv=x@}EvJoEi=l=y?{@}A{;C{=EJq9AUt(f3DxHbr@g7U-V/l!8 7 / &<&=(=0A3A!6'<#6,>(;1=8<) -/"3: .$ & &&)4&# !0/7C*rv{HPY6=I14A !-^^ettxllp))8bQ=e[6;C65#  *6.J#E'C)7078<=>!ZS1ziAqDqHzQ~STXNTW[\[TTP~M][14E2QWq*eo5/WF_#Kh%1:'  ! "/  !*1)378<=OQQlmc!,*.59;@B        sqfݷݴ߳ݬ˒麀†͚ӝ߹دyܴ}⸁{但˖ۭyĐ͔߫߯޵ÔϗИН߮לٞלک乃~צrƛɘزܰحڴߴூխƒاըٰ޷߹ףɴwZڧӜɐȐ۷ãur&&-  $*0"< ) ˒ܳvЦnϧod^ġnƣqֱz߹͓̓ݥ١՜עɏ̒ԛɐݵ~Ӛޥڟسݰ޵اϔˍỂgbͣnڱyˬx|\aTB*&(  " "   $+'#;A@~}xƳٽְ֯ڹþ̘ҤڬȒֿǷyoff_[dêe]TNJONJI~F{D{Cv=}COzLuC{C{Dv?}>N~:ya-m5Z5`;Z:Z=W?SP&;R#6U0P%L"N L K H L J "H $C"O!K&RK$R;]De>fRs."WKLM#O 3U,N.L(I5M-M.S0P3L:M$B$="9!< ">)C%C'B9KJV'JV&0F= .J,G&A: 8 7 ";:85 9H6<II(e\7YS1wg@lDqG{OU}QSXX^XvG~sDsFvl?c^5>$(  '14=DENWQ")/'13     #    !ήحܧ߲ް٤֠ʐʼnјИӠܷڝ۠߮Օܝߩѝߺ΢nӪt彃|סЗyܧߪءˆΕ٩ܬޯڨƏמڟ՘ɖНߵÒʙѡ꿕КΔݳ۲٬ڲիϡΗȍڴڴگ٫ƫϝlpaHڸۯޱ͘˒دկ~s̯67> &&&/0437ݩܴ|߶yÖca\շϩsڷ྅ƏҜњۥЖÊnjۢܤÊČҚݣݦضۭܲܰڭܯܱ۱ݱ۩՝ђɋΕͥr\Ye˥nƠkӱ~Ѳ|WK> % %037dd_ѶԳvڻɕְеȒ˘ԷѧҾȸ~k`ihªh«hh]OLOKJ~I{G|GtAw@}C~FMqFsAma1a~1Vy)\)g0Xy&|:w8T}$1t?|C!\-Z+?wKxBv9sy6BKeR~;Gy1@t0Ou8St9Fg0Lu/Nw,Su0Ea(N^1AS-9M(2M8W4T'K"I H K I P M (K)G,UH #QJ,TUo+Ok$-Z,]R S LO T *P=W,O*M/M"P 0V6P:Q4L(D#?= < &@2D*E3K2G>K6GVU/AI":DGN%?L-H0K6L6N/K.G1G3I1L4O9Q4L4Q5Q$>+E=P?P O3K*D,D6G)?";!:#:&:4A=D AC%!+   "k=_.s5e7Sv-aw.p3l0St#Ns =@Fa/j3x?Ce5\(g*e)e,MHDV3zOdCuMuO`D`BU:U=K|6W|8Ru6Km3>`*Kw+Lr-Ea*2QAY&?O,(L/N>Y$0R)N$IL M Q !O )J-I8]%P$T$Q@ao}9^u.8`*_$Y"ZU#V #U $Q/T+O L "O Q2V9R;S1M#B= > > %@)D'E,H+L-M6M:N-F/I$:%<#<!92ASS/VU3GP<)IS'7G?L "<#; 9*A(=0>;B' ,.!1:) " (   44:("",((1HHMSSX00=50$# 5B!3M)F8LJ[%MS)NN*qb=LK)WS/xn?wK|PqLS]][SvJrh?{pCvlAwF>XT @kPk)Ld'b) )%26=1=-;*8*7'5$2"1##+)  ##'#'!(%%")%/2$+        !%¾ܪڦݶ۲޻޸ߴޱݮۮ޻ڮԠўҤݶݶتפء֚БєأۮϕŐݮצƐກ必{yŌ͗ƒӡק֟֠ҝԞ߰ެޮΕŋԟ۬ا֞͒ÎὈߵ~Ɠ٪⼉߽իڶثפ޻޹ڳݷ޺̝ҧשڭݶ֬ݸرӭi{ėɘǛ԰ܸϚŽӳӹк#)7 "&''2 %B@Aќ۴yʡjb^fھߺiĞmȐ֟֟ܡڡ˔ʓÌ⿋߷ݲ۳ڱجש֨ث׮خܭ؞ڠۤ؛ʐן澃ЪuÜh™f]YXˣnȶ' $!>ABqiXkƮttg}uxfhįqjt{gjhfbd]aZMP~LNJyFoP:O{3An+Cn-2X%:h$<^(;T'+K6W AU-1N!B8R#5U)P=I O O J (J)G6Y#R;dFg!Rm&Az=Pu("]X X U-W(U6W,R1O#LP S +V2S9Q9Q+M#C#=#>? #E 'M&M'P)R(K%J L !K,I0I#I!M $O-X+P,O1P1O)K+K*H(F?U=P*>:GHK+RP3RR1YV4\Z3?J!?N /D#;5D4AAH#7>#'09) # "&$""/GGK*((3$$0aacbbg) 6B!0N6OF["NZ(IV%lb;ja8]c0MY(zl@~N}NPW[VwMQpEMY'gg7wH7Q"Z >cRc-[h1Pg(C\# #   /'9/?-#$"&$2-7-:&5!10.        "&%'%#$)$-92KVB     _][߸ڪݱް٤ݫݱ߹޼ϱš߾޶ݳ޶߽߽ݸݽܽدըحܸߺگ֦ԥ֤ԜϗΖΕѠϥ԰زݲ߬ۥڣ޽ְyرyʒ‰ĊڪƔݱ߰ޭޭԞ˒Γۥ٤ԛɍإ޲٩ʗڦ͕ե߰ܯÐ۪s߱yԩңɕץ۱߿ݻ۴޻߽ڳ߽׭۴Ԥզڮ޷߹̸p`sַ̠֭ʘܺٶϛԣnӸ)*5"#3&⿁Фlbaeݿ͖ŎЗڣܥʒИЙآ⿋伆ЙީߺܶڶٱԨԤӢԣש֧۬ܮݫܧݥ֞ڢȏћ迃仁Ԫrɟjҧo޴{ʋw',5"$?BDFGGBCB>AA*-.#((vtU\^ĭqǯsfnkjcY\bbWZ\MLMKsD^6W-^0t=uGnDoFa?[;`6Wy)h,9<@et0Wy)b~+c{+EiKj")k@ (x9}$l%q^+y6u3i-{8e.S*.|C,mDNcDO7T:[?W9J{5Du1>r*=c-Cj2;X/Da/Dg-0W0^6b@\*AQ1D[)V^ACZ/6W=D Q N !K .I&E5XM $Tax0Lt=l=m:(aSX#V +W)R)P'N/P-Q$W W(V+R:U5P#F @ #@ @ @ C !OFp9"U!N -Y&PG U #Q%K!K #R"R )X+V+S,S+O'H+K-K6OBS FR$GP%>N2F6G4J0I>UEY#1K%A"<'?;I/D&?)A.EAM"JK.JL,<:,_\5AF%$/%  ;=$+" &   ''@@G))6FFL##0 Ra+3R6LHP%=MLQ(b]5Z^/dc4ne:pCvi=MRTwOiFmIlc<=Nrm>}oDEQ#!T /WQb)Zg.HY([;N|7Dq3Bq+Cn.Vw>Rp=Lg7-Q5T7^;`#F`,CW0FL9KLGDI=7K (JG J C A *C#B+PCI`t/LLrCIHm((R/V7U-W7U6R3U,Q0U%[']3Z7V4R*IB B > =@ @D MR1_! P $R"G #H(X!V P #QL K %R)R%P %G&E&B3I=M?L@J 7E9I9K!6"8/C";5JFO$?G"@D$BF%%*%*4#   "3       ! !  %28V-L=HFIH'Z].bc3V]-[Y0dX4uGzO}OTnI|gEPP+;LMX(sj>CQ"P 1XD^!R_*M](_xEEl48]+#C@F^+Ja*O_3GS5?E4999),-/,?&;4A:GVg,-T+D6D?G @I Q[)Yb-SW+[^/ia6wENzLQkFwbAdT6AH 9NV]/7R#S 7\E`#I`%C]!=].F::I "              #26$+  /13(?2H1F.F(<)8('..:VV]  -167<8ݹќҞ޸ܳ߷ݵ߽ںڻح׮ٲر֪תӤНЛΗΘΗ͔Ǝ츅ҧܵ޸߹ߪݫŐ֥ݮߺ޳߶߱ۦޯدുƑ٪ݲզҞإݪӚɕĚ߽֮ҧڱ߸ңs߶֧vḆئtԠnפoೃԭӠ޴Ӧџخڵ͜رڴ׮תخخ޷Ӧҩ|Ǘ۲ڶٳ۲߹ָ˳۲۸ٴҩֳڹڶک͜ǖŗǗ˟ɢspe̬yoaYX_16 ;)+G .yuce`iԸٟЫuŌ͘ɓڞЕ՜ҙ՛ޥۣҜИ߬Ӛޣݻ߼ںָչѱѫҩҩөӰհյ۴ܰޭٝԚןӛӛЙإҜӜ߷Ӥg`S" -(&Ya`ZXJpX{5Zz4|EGM{>o~8qx;Xq,Oo&`z/e20e?jKne/e3j6u9x9r6{<;t4@{Y)|7b)#iU-)gOv(@h6W/f Y{9_~\5:a14V+%?)? GN>NYMNSQ\p53Z"N )N"O2X5X=\+W)]&_([:Z7W)Q*O&E$L #S L G FF7d+C H G $O "S $P > E &Q!G/X(U(RH "E #A(D"<4 3 : &?1D5A=H6C;K4K@R DS#:M@N 1D(<.A:G8B3>,8& !02:   "6  $- 8R8V4L0EDK#AQ OS)Ra)S[+TY+ok8ux9vt;re;uInFo^L4L(O$M ,O:_Ed"=]Ce"Aa*+    !  '  &&   '$(B0K&;)>"3 #( !%7NTX]{{vpTXIn?wGwJLMPJ~FKMJxFd?Lx-Wy1IJyGx>p>Ss)Gm!Lp$p:n7])*bVv%t7u:|x?_%P$:{2sLz+0sI~'s:g6$`Nw5]{AZrDAU6)8)TWTckYFS@;J:BS=7?7$!! ,31=?>,00(-I I I I G %=&;H P Pk%FPMPTrB4]H!M !Q5X8V5T!Q)_(_(X8W1U"RN E!O NNI JJ!RG IJ $T $P #R "F $F!L *P2U.S3R6X+H(D&D&@= <(>1(".JN*>J$?I%T\+HT%KV&KR(EN#7E&4     # !1 1;$'6  $97U;Q-F9I=NNY'CX!EW"P])T_*er0do1RZ(g^5ugb@a>cQw,9P(   '1%9%9"60+#;& "0& &&/L0M#:40(      /6!!٭ܿ໗کz|͚ۺܻٹۺݿְܼТҦѣТԩٷ۽ܼܿ޽޼޹߼߿۪Ȑפۯݵ߽߽߼ܲ޳޵ݴ޳ګܮ޲گ͞ΜԠ۰޲ߺӘʚ̧ǘk˚k߭uݬwݯzՠlأnۨtӟlʗiӡlʢ޵⺍֢٭njџ߽ׯѦܷ߼ݹ߻ݺКК۱ܽڸ۸զٯ޿޽ܳձĐ̐פ۬Ӱϩ֫ȎܴժvخyÏЩ{ɠnȑȔicذxў7;P7""="$<1.1ÑҵklʓޥݥƝjໃ•cbڴ~̓Γ؜׼ڽԜڡ՜ѕܡߪݺ۪ݨޯ߲ӹѵӯӭլح׭ظۻߴݰۮԢա֠ݱܵ&&-yLO|Cx?MWUL`uuthwQuKS3Rh7KVZVPtHY9uDyI{JhAT5N}3gDlIiGlFp~=t?tBk+"@N"CQ#MQ- $  ),3    " '-(%6!'    '*4&@-K6L6H7I:RPW(:XF["G\#M^&Vc*Ua*fk3ef2VR,{m>ph;tg=]R2eY6=K-B)B*K/S5Y<`Jk&Ea)   %/&5$400 43541 /%B$1,),8 )79D 'B)G8 #8&9(7+5(3%.'  )$lzBQ]0   ڵԳس⿓ԟs߱ϡҨݾݿݾۻپ׹طֲٷڻܿ޿߽ܺ߳إ֢֦֧ܶ߾߾ܲԝӜ߷ܰڬѠฆƐћۭ޲ڪΘ֮سѩݶޯf۬wӡmکsܪtΜjأnܦpڤpݱ~Ա֦vÎԟ֪ܳҠدܺҩԬٴܹէ֬޷רٳۼٴد׬߽ܽ߻ڮ۴ܹŏԙ̎ݫڦ޷ʗנЕ֥߽۹ɖԭ~ӫwќɕǑek٬vϕxyw6 !<2ĥ۫ÊŠmbfԳںڵ~͡labË߻җ؞ԛطܷЙݥם͐ܥڪۢޭ߲޿սѵҰԱ֯جٰػֽԺݰݨ }{GAR'|>U[l``\UUUbgSvQgIj>Y2JV]]WS{PiFoGqGwJ|LxKNuIQtFg}:e~;xEwCr?d/P}!Kvv5u8l5u9?Ev3Al-i,z3f/P&C=|5tl9]6Dy'Ay%kBc{GSn?TcF   &8U%O+R!O G B O !P cu/XRKOX{C-TL\#\m*8X8V4T'LM !R$Y&V,Q7S%NIJOICH KGLQN M %P (R%V *O%M)L!H .PAV#^b7ee9[\2DP"-A/E*># /9!MU(9A'(.&$   % ")-#-9+6+ !)"*)+ 0K!< )<.?;H?OBO UY,HX!OZ&PZ'OU)QX)V]+V\+b_2c]4KR'RT0i^?xjLd])@"D "I ,O:T=W$   +1@=BN '?0 . - . . / 3$:!74$;/E% %)>?I& /001+;+<5>:A7B     '   ڱܷܾ˨ʠ跈ɦݾܿۼܽܽ۽ֵջݿܿݿܽٶۺ߿ߨܠ޴بԢ֧خ۷޿߼۪֡߶߶޷جڭ߷ϙϛ֡֟ް߳פةذԨҤΞȚڧu֥qգoڦqџoϝmҝlswکuڪw䷅͚Ӟ߷߸ثҢկկΟҤײӧ֬ڳڵ߼ٯ׫׬թժذج׫޹ݵ۱ذ֥ء߯ݰ޲ܯל؞ҠڶȖԮ̨z۩̘ˬ|˕߸|ysh &+ &55=ٷڤڵxc\Ûhͧqˤoɝiɝi͢nčЗ٠ʒ՞ΕȒԝڣї͓۩ܰݪޫ߱߿ܻ۽غԸѲӳֱ֮װٻػ׺ؼ۾ݽئ٧ݳ6>> HL1P~SojVmmk|||CDE$&*-./itNmNRy49qw9QTSSOyNnKsPtJNO{~HKkEwKpLmCdCZv;au&-*4E:UJ` 4T#I D I #Pfo3TKry9NHt{AO a_.Qd%BZ3SAU D H J O #O'M&J"V RQIGAK#P !K L !P L J "I $L !L L #H *E(D$?,FLP*UW/Y[/PV):<)(!#&-=&PY+4<&  #      <=H' 2&8*8+;1D?WDT"__2DS MY#T\(IR$HQ$NV'Q^'K[$P_)HV%OR*VY0bW8n^?lcs2iZ$e(q.e)n.&e#` )d'c/i?s"W2`:oEbx;]p7>F/ >K!GW"N[&'MLF "P Zi,wHTROOtz?M NX$8RL`!,O!H J K O "N #Q+T&P*[U PEBFN %P C 'S$S %R I BFA ? "I &H%E"<)A-@FR%QZ*@H$"5D&?&>(81@3F1GJU&8F=D(EL%P_%CS KW%M[&DS!;L=T?Q JS'V]4eb=[X3X[0gc9NK+LK*:H*G3S>W>U2E  " #"3jlq??K)3. ,/ ..0 32 25   '(:&72A:F0?*</?1?6R7X$=  #(0*AF;)1,   !$Կղٺ伖䴅Үܽܿھײ͘ڡܢɍčܦٞɏÈʌғݥ߮߱ޭ߲ܬګ۰ٯ֨դҞңٴٳٶٱ̣˝٭ٰרٮ۳׬ܯااרٴױװٷܷܺşԤvџnҠnv{աnxޮyz͘ڲ޻׳ٷֱҬЫЯ׸ΞΙСݿخէڰڲ֫حۮ߹۰ݲݲݳܱۯڭݶݴ޷ߺܴجٯݸ׫Ȗޯݯџԛ٤ڡۣԜܽ֡ҝ˕۽ǨyԫwԤlǐx %(URTsȎƍٲuafˣlѫwɔ̓ާ١מ؟םіˏסЖ͓٣ۦڪߵݬ޷߹߽۾ַֻгԴڶ޹޲޲ޱ̤),2!!"*! % %'*(*+  /3/uLnFet@xDo@o@qAfGrGGq/Q}4O)A$n 3qHwHyn/Y%9n)fV#t2=q04n&a 4d4k$e>r`~6nB^9g~>\t7LX/OT,X[/,NV PJ E^ op=WVbv/Qo&s~=#W7VAZI\!3O'T'S'O(Q'N$M&U'T4`5a+\MKO&T E I %U#P $S L >E; 9 @ @ "A %A*A+?@Q"DW$(0  0!!.   $   NX:$- .)I$B";/A0F*AIT#0D1E5G3H5H3E4C3ADP(5KAR!EP$GR'JT+KU'\_1f`7zdBZS1SM.;D/G.G1K6O)C#1eiodgm($2 ,+-.3 1 2 0 0 .  1.)%**&!0:=!99$#'"   !%)"%     ؽֻսǦʦɣͫЬܾԯѣسϙӚާךәȎס՚۠ƊćÄ؛ݥؤ֤۬ݱ޳ڭܴٯحԤўȖΞ԰ɣ—Ӥyݼ۶֪֫ҧ޵שզذٲ۾զyҢqۨrⳁףpr贀꺄˔خܹܻںغֶؽϩִձ׵ظϞӤէڳٱڰݶ޸ܲۮܱۭ٩٬֪حٰڱݸڲٯ۲߼ڰդ޶߳٩۱٨ڧڥ٠әՠҞɧyoլuңl߷|o(*TMFѥʒĢhccǡkܿȑÍܦÍјәʒ̔՚қЗ՟ޯܳݻܻڴ۱߽߾߿ܿ׹ոҴҳֶڹ޴ܯݯئ EK:sJjEg7h0`|3gy;u~As{?oD|JLQzMp|C{tFjo;noaBuFZ{4\0a0)ul By)l5k]%n.[$Fxx5l.['N|f `&a )kCu!=r>s!Sp4Ic3Qk2L\429$&>"S] H5\do2LUa|1!X Dl T V 5N9Z'S %S K )N-N)M,Q6^(W8b7b-WRQO &RK $Q %M%L K HE E B: ? "A 9 !> 4G6E=G$! ),/?!*6*0  *.:KVZ"07 !&+*.8*%;$C &C+C,H;N3H-G!> &@+D+=*;-</>?M 4K.=6D'bS'T?a/Iez3(]Pu( XS2RC`$U LL $P-Q+N5W,V0Y8_@`!R PM L H H $L%P"K @A A B CD "D "> < < +D=G"   )3!;Q ;PBT!AQ!'8-8  $%4MPZ16A"(4,)&0  7 &B%?!9.A-D)A#>*B/G%4+;.<0=.=,?*;.?7CGQ%JP'GG(fY>TM/SP,[V1YP1\P5o[AKH,,A4I+< &  #:61 0 1 994 4 2 '6!3   $  #6O0I  !   !&$4$$3$%2 &.-=5ѢŽЮʧγѲ̪״۽ݾټ׷׹ִ˛ǕЙޯެٝ̑⹄՟֞ԙӖΔ٣ޱܬڭگ۰۲۳در׮֮իխٸʞڲˡƙשܶزԪ֫ʢƔڬʘ軄}蹃ÌϠѩӰ׹׹ؽؾټظŖ͚Ŏ׮֮ҧ̙М֪دڲڲگݳ۲ܴ٭רެݱ޷۱۳ڭקܲݲ޸֣ȏ՝۬޷޲߼˜˙߮ҚӚқϗӞՠđհzͥmŝgԬrï$ ",>JQ+8C / #'hЕϮwn£m̦ņrʔƏྈƐ߽ܸȐ٤ݬ٧գա֦٬ܯܰܰݳ޶߹޹ݹܻܻںٻۿ׷ط԰ӰӲҴѰдӹۦ՟՟՟֢{uc" *,&,3$)2".$ 16/pHh>R|)Gs n8Hi{W}=_CY|=Ry9jAwHc;2u*qjcb>ra)Vz$~6m.Tt$@b.f-g!_ 'U;^J_%J]'   &<(H!S L 3YLq$g18f!W >l2aW)P/F3I#9+>AP2G0E1F-?4E2D0D2E2C/;6<ZW35;BC&EF'@B%[V3IH(^U8UK2,78 .B=P&%+5 !:0 1 2 1 4 5 5 4 #7-    %.*7-8iO*dDm[Q "Q K HM 'O#P Q +TJ 'Q5W*O%N$V *T#L %P'T!K &R%O F "G G = = < 'M/W.R>YH\&/8 #&N[6(?((( 67K1!, !**8&    ($ ,@(A#<!6-E-C5I2D'?.A3E0D/C2D:G1=:E9E;GCM"GJ'SR-bY5cZ8PG//=!?3G@S8O06 3 5 0 2 2 3 5 7 6 4)?  $ ! "(# "/:/;9E6D0>"0!.#6+C7Q1L-J(B2S,     # ' +'6@8EKBMZPWwprMKBгΤХӬԬڸۺܽڻ׶ҪөөΠҤڴݺݷگ֞ˑϖӟ֢ɏ̑Ԧܱܲܯݲ޷ݶ޽ݺ۶۵ڶذ֭ԨԬؽۼėڱ澎ɞި|ᰃ羗ɧߺ߻٭֨ԡӟ͟ⷉ–ԬҬӷԻտѳϱռś峄őΝҢƎΓҝОӦٲߺڱٱէأިܧޯް߱ޱڮڭ۰ץ˓ϕҚתԝگҧɖǒگ۫߫Иί|ǫ{Ӱy׳xկuЩnƍZVQ0NONgcausrHHR SS<[|5?qi3GNKNONLyJmF^~7Wz0Zz1[{5Vw0Zz7rLctElJcGfImIPM@w'4q#/o2s5tU!n0HsTw#m}1Qd&>\2c8e>d9Z:Y"(  7!7,RF P Hr$i2Ln"P!Y Wx*%] NM J F R #Q !P $S9]H L O J G $X &WF $P O J H #Q Q E L K B B < 4 -JK_(Q[+! ++N]95**'- )<""100=   #        #<!; 5 $=!; (>6>:?7GW'@&<%<!'# !99 6 6 4 4 3 5 7 9 9&)?!# --:PPY$!!1!(()8"$3!   $>E!6C/>.>,9(6$4'A4M4K0G>VOp Ru!%8       $"1* 5/>C;GOEOaV\~|"$'utoɦɜ̝ΝϟΝѣԫ״عں׵նۿٹկԮԭծի͝ԥڮզ۸٫פЙҚԜǍƍԢ۰ܱ߷޵ݴ۲ܵ۳ڰڴٴس֮ӤԮ׼ֻӲѦ֪~⹉ʙ輌宀гܼ߽ڴӤϚЛرձΪЬӴԺӺӹѶԾͱ˯бӬӨʘǑ̔˓̗ѠخدթԤݧܧܪܫݭݬޱܯ޹ݷգҙӜӣҝٲۻծ˘߲ՠԣҢݴҙčҶܻص{ܺٵzǣtiW 8HKdnm-CF?@9= KD=æxȫyaڷÏʘŔձ}ܳ˒ٟڥ֠آأڦ۪ݱݳݳݶ۳ٱخ֬ԫҫҩӫԯҬҪѩҦԨԨ֧֨էҧҬ׵ٸܻݽܼݺܺ޽ڮסќ&>@DYXWusq|{z((6 U`;Jz(@oo}9EHz}HUVOKu|DiyAe~9a3_~5e9Xw0h>oK~MlHmKsNtIMPY9?u'8s#!q$l D|E|2qEtZj*df2,56 /1 1'     ""!!--#++9'    !;< !? 8 "> *<(<9JS7M1F>N;K,F:R4N6S=[5R(@ "(-(8&8$:,* 5"; 8 8 5 5 3 4 6 8 #;(</% 1#    ,**8+" *$ ")(?(?%8%6# )72?1>.'$"+'2BF%>D"5=!IK)5<'/&0*A)0!!#",1?:Y' +)+"04=*",   ", +!2 82?G>ISHQf[_Z\_ 7iCpGN}L~Kl>i>@|'Y:>u&*u#s 9y?zE~1kIa$J^"9_Pq&c{3Xl.6@" #L QFt"i5b2*_MJt Uu(QQLL +Y0X-YJi*2X.W/WH/X&Q+TI &P,Y(U.[0\0U"I H =WAY3O= @ "E "D9 /KL]#+.    $ $.1 + *> )E ? "3  ( )!#& $337C)-:%   /!<%C#>$<&;/@5I3I6K1C@OAQCP=I9E0@KO%ZS/NI)B?%@B#.<7 92N6O?UDX)4H4I$4#7#@'A-E1J5K(9!5&?$;'<'=%=#:7 6 5 3 4 6 6 &>4H*)<*#&    )ddj*+823? .# ##3#24J=P 5L*A%*   %"0&6   , . 4%;A\"&3 *'! %"&)7  )%4=5ARGPf[_{xx:;D"(.һб跄깁鶉ϭٽШٻؽ׻پپ׺ַմԲԱմ׳۹ڳج̔ϟ֧՝ԗӖїˑϓњНٱ۴٩تتإؤاإ֨ԫԫӥѝϜѢϡѥ̚ආ輈䴂缌ͥծԠ۱ܿܽݿٶٸײ׹ھ۾׸ؾջԼҹӹԷԺԸШѩӫװخܴ߻ذզӡ׫۷Ԭըأۣ֜ܥߪ߯ڭ٬گ޶޻ر֧۸ТѥЧүڷ̛Ϛῌɘݫ˖ϛީۢםؠϖ̑ŊѭuЬv̬|ؽгuB>= &'!,*#* &+,wǬ|fbӫvˣoӬyϨvf̝oຄݦڤڨϗ֞٨ئ٦۫ܬڭخիӪҭҫӨԠ՞ףףککڦ۬ڨ۪ܫۨڥڨڭѤרاجڲݲاܲک֡Кʕ¤} 019KJMwvvssx*Fr%Eu#Mp#|vA|LKNdq>O}L|I|~Cgy7cz3e|4^}/a|1qEtJvMLMRO_;a>F|-@y(`@5m!5qC{#A{ 3o%R7P6Q1YUq+Wf/$'BN7hl6j9:hM3ei4&ZPWJ 'R0T9Z-R&O:\/U#P:_ R "O !N2]4a0[8`6^;_:_?]\i*[i+Ug)@Z $D#B!B 8 !?,P.M7F'      % "+02<# .D,G? -K.G3L")+""1 "##1 0)?)<'5*:,:5C8EEO!IP$FN"LQ$:GBK FH#ED%PI,7:081 2: (E-I2J )B)B(?%@"<":$<(?*@'?%=%?(?3F1E&;$:!98 7 4 4 77$6'9)'       $#"&(03?"     $!(    ' ( "'&4$(.1뾎ÌșֽխԲֺ׼ٿؼַղӱӯҮԶֵٸز׫Ǝʕש՞Ֆ՘ՙђЖӝէح֦֢դ֣ةڪ׫֭դӞѠҡјЛϚ̗ɓʓ庆꼅zڦw㺇ʙܹצݽܺ٬׮ճԳֹձշֽ־ѳ׿ٽٷڸӱȣŘ˔ҟ׬ڳ߸޵۲Ԩթש١җДޫܮااګܴܲڰرׯ׬ԥңԬٷڳƒֱ}Ӯ{Ȕ߬ܥנӝߨߧۤȑԜ߾׭pԭuͭ{æyt`гħ   #*"1E5dʜlhddělcѣs俈ן؟֝ԙמ٤إ٦ܫګեңѣϣѪҩԤפأ֡إڨڨפڨڪۭڬکܱ۬٭զڭա֢٪ޱץݮsl`WNC>63  .77C--; Jg%Gn$Th(xqAuMOOp?KL|IJ@l7w9n}4x;cr;sGKKOWQlDYgn:k:?eJ"\^t22cOSN K 'O*K,Q)O/W0[ 'Q*X'O*T/Y ; D2V#Ea6$%     #  *B%A> *I1H$> ", , ,()511> --D)>%6%3-:0=9CBJ!EK"JL$:H7D>F?A"JE(NE+38!/,4 > -H.H(E(B&A#="= ; !< < #>"=#@#@(C0G*B!8686 7 5 3 4 1 1'7      "   !14= -       AECۿִҮβ̱ˮΰѹӽϮΠ̢깁꺁꺁̫׽ռаҴյ΢ҭӵԸؽ׺ֹոյ԰ҮҩҭԷַ׷ׯ̘֫ȏաՠҔӘԛӟўӢըիذٲخدر֮֮׫եԢѝѝ͕̕ɓŽ꺅嵀۫|Îџتإ޼۳ڰطֹֽڿ׹պ迖㸎۪ܰ߮~ۨ{۩{ⶅɔѣڱ޺޺ݵگ׬ѥСרۨנן߱ڬקاڬ۰۴ڳױӧСɚΞհֱҦ͞ҭլʚأکإ̔؞ާڡȐȋ׮qӨmʦrͫwӳhWkէt  " & -#2G6WjSDOIʯ߻ldhŝme˞qὈ۠ڣԘ֜ڧ٥ڧڨקԤӡҞџҢӤ̘ȑ͖֣۬ګکӞԡКԞ֦֦ګٮگӤثѠҟکۭӝ̓ɑTK@7O Lq)Dd"zsAvGQSRM~FJK|@h4x;z:l8k=kBLSTXTPnG[@X:Vz9Vu6Lp1.a#`/^/L>QBS@G$(Z [y/g4j9Ut+Y 3kSe07gY &]VS !R !KG*R'R2\"@e,Pm6:]%)V-]5_Em(Qt/Su-Wt+\s+Zq'Rm$\q*Ne$Vj*Qb)Ge%3Z H#I> ; &G;Y-8B-  *4I ; 9 +E6H(A      *) /@0E'="8+;/?4B6B6?1>,:2>:?DC$]N2?@ *3-0 2 6 ;!= ; 7 1 2 6 6 6 5 4 6 : 5 76 5 865 7 5 1 4 7 5$4       %93    &  !#  +  $ !rӥЛΝʟˣ̥˥Ǘ˞’ÎǐŒ븁뻄ėΪҳӸͩͧЬӶԻԺ׽ԱӰͣ͠ЩЪҲֹԳնոԹӶұӫҨҧҬҳԷֶַֹհզɏ̎ԞҔҖզӪӪӭӭӧը֭ծ״ձհسײԬԡЙМ͔ǐ蹅쾆龇ҡ۱ڬڮܷ߾ܺڷٶҵ龔ެީw߬z~ⴂÏď֥ڳݹݺݷ۱ٯ׮ҧԩݱޱڪܫ޴ٯزدܸ۶ڴزԩϠ争㶄ֱճΞΜ۾߼֩ݲʕňྃ۾Εܩ٦ՠؚիqҪpɤoصͰf]cÎΛ '$( -"0B/@WE$KGA˔ܷhg̥qe˜qٮ~ՠ٥ӗ֜ۧۦؤդӟқ֡ԟԞԛȓ긄긃쿈˖٪ةҟϛΘ̗Κӡ٭جϟ˘ő͚ŐĐÏظẄֱ|70/(5Ps*Ij#ut=|xAHOSSM~GIG}BCe5oDjCa=MXXYRNzJeBQ9Ry5Sw4Sw32f!Dn.Cf&9R8F+ +aj~8az1c{6\t/4lHu&`n6Wm1*c*^;`!#U"R N D6Y)RMp8c{BZt7>_!0^3cFk">eXv1Yr.Yr+Xr*bu/_u,hx1[s,Qm,Pf)Kf%Oi)6[!J DA > 'NJe=A@= %B3 $D/J1D+D8&  %  '#"12>'&:,?3G4G.?"54 !9 4 )7=C ;?EC#LE*58+60 - / 6 2 (*. ) / 2!02 !42 0 / 1 0$='?$=93 5 8 3 3(;    &##  )# &(7"%5 %'5    7/%# "ơСϛǓǜǞÐɔ켇‘Ɩȕ꼉—ƛƕɟƓĔɝΨЯѵϪϨҰѫФ͙ȒɗΧΪϫҴ׿ؽԴүѧӤҭҳѲϩӯӯӭӧҬ̨ɥ̧ͮЯѭ֬ҟʏЙҝҝӞϢ̜Νǎ过ΖңҥѥӨҦӦӦҠќЗΗϘ̖ŎハǒÎŎȗ޽ݻ٫ڰ޾޺ֽճԸɦ×綁辆ŌΖ˕͘қҢٲ۶۸۲گج׫خ׫ۮاפܱ׮׭תٲذسԬУǖ‘ⰀݶԱضҫҩխ۵ݷȒқٺ侀གྷפњ٤ԕ̌߿ܼ¤ve˥ldjÈMKB#*(*$0#.B/BVH!-sɧujͤrĝm͟sӦy޷ƏЗ՛؟՟Ӡԟՠ͓ס٣ם͖꾌~麄Č̖ثҟМԣ˖ɔ͙ٮܲحΝƓÐÎحy^|nPp`Hol\L[t,Ko%xt=er6jz6FRSRRMuAE~E{AQTzHRSY^W|KjCeCT{8Tt6bz;i@g~CZn>Ng.0@C Nr)cz3\w/Qn,Wp0Qp,ct5qx=ljP[i63]Lj*3[Q(VO ?a$De(Yy9c}=Xq3Mi)Ln)Lo'Jq(@f!Ae!Rn)To&Mk#k{7By?Uo*Bf#Gf%Rm)`p2Fd#'N!G G J A Ie@HY401#%?!6#>*F(<3M4_ * +   (#$0()578C*+8' );1D.D&B$D"@ ; 3 %6%28=\N2ID(/7&4!31 $8 52,. $6"3+7)5+6'60- - +39 &=)="7$:%;3 0 5$7  !    "    "$2   $'4" *+8  #$4&(7  %(+9-    \]UϣΝ͟ĖƞĖǒ̠ʟœȕ軅뾌‘Œ뼅뻄쾈ĐŔƔɗɖ˚ʔʖȐō‰ȐȒ˕ϢЫЮЦУЦѤӫӪʜ̡ЫԯҦ˝ʜƖʙ˖ɗ˛̝śЧљ澀ÆϓϕЕ˖˜͜ǏČ˓͞ҨԧԥҡҡҟњЗ̒˒Р͜ʕǑkȓ˕ӛџݼݿٯ۶޽ܼܽӴҧ԰ѭϩʞǐ̖ƐϚϜѤٲڵٳڱ٭֪Ԩըը۪ڨڧٰܴ֭תذ֯ԩլЧͣѪ濐伋ǛϢӮҭҧذحԦ̙ĎËdžʼnɏĉ侁Ã̌ϐїȐkŠkѫq]`qf %#+(0+6(FUG`j\rnd"402ܿܶmƟnزʝrѣwӤwΥyɗԡӚҜԢڣؠΒן٢بǒ~ĎΙ֥ԤНթݹԤ֦͘͘ԣɒŒǔmnOJ=3  Yq*Qs'br0cw6_v5}}AzFLOQSOQS]^ZS\]b_SlFkE^@Wz<[v5rAVl=WlE]nEBT(#0 /[Zm/[p/Tu.Rm+Ga)ap:F{LiidgmVLj,Rk.Ge',Z:\"N5\Bc#Ii(]w5]v3[p/Di$>fTs0+V6\Ff"Fg AX"tr|=Gk%Ei"4^Wn-Ge%Vk<cw8mu=~wFQUQSW_kdYZ`_XSsWmTgP]qA[m3Vm84K(@R/I]3,> !:ZUg-Yh0Ui.F\#O`)mr:yqLg_OTRSLLJ`o=Q_-@Z!-T'K0KK 9`Kf)Ym2Yj2Ui/?_ ,TOk*G (PUk+Ok&Kd$es4nz7hu4p~;p~9Xl,Bd Uk+Ea#Zm:=Y&%F"H!K.W 1O)#>+>'   *>1E #9,D(D/F&@#   $34L7P,@0?1<LH&BA")4*7$7.=,3%",!4)@4 3 %7/%6+=/:(40 1177: < )@1E%)?":        + " $!%yÝʳ’ÓĖˢŘƜϫַӴұʣѰƕŠ۳y߳z۰v~y翁Ċ|쾅뽂뺁뽃ǏÍ轈黅Œϡϟ̛˗˚̚ʕ˗ʔʖǖͤ˞ӡ͖̔̔̓ΘɓÇÆň۽Ŋʼn鿅纂}ܭx龅迆߲}ݱ|ǕǕ޷ɖ˗̕ϗЙϘΕΕː͑ϒїϕϔӚ՝֤ت۶ܽۺٷ۾̤ڻھؿԻҳڽضҥΜΘљЗːɏȎϖԢ֪װٳկԩѢ͚˘̘̙Εۨ۩՝۪ݯ۶ٶ۽ٹծ֮ӮТ͢ѮΥǙʙ鿇ʓ̙˘Ŕ˒Ċŋɉʈ征Ĉ㽀x异شy޽̐Ë῅Ьtg]]]dԽ !-+5 **0#4$ - 'zcϐ̨r`hỂ㿅ƌܺŌٟߦߦۢۥܦ˓ȕ㷆洂終蹄鼇縄䴁帄湇Λ֟٦բԠϛӥӥ˦24?  $ ,$*=47FGK(\o+Lb%Xp.qr=zzDzzFzuE}N~MOTX\Pjb_ayFmCMyMvRhM_LYo9Qh0Tl8=L-5JY(Xc0R^-N\)Q_)ej=WRB,,.!#(&'+%&)LQ=Ld)0R&P F !H G:bJj(Ng+Ob.J_,So/>h?g#N $HLd%Zj-Vo)my7pw9et4gv;mx9ar/Tm)Rj'Ka&Se25S-J C ? ? 6 ;!<1/   (#1 7L')@(A: 9 0      +"2(:/B+>%7&8(9, 11 . 1 4"4/?1?//9:9 < !> 9P+5J*&=*       3:@#-2  '     :0-Śͬ}׮t޶㻆濍ĔĔȚˣάΪΨΪȗແٲw޶ڱwڱsvv޸u߷wvr꽂뾄뾄빀귀Š跂蹅ʖʖǓՌȒ̙˚ɖÎǖƚɗƒǒŎʒ˔ɏ„ÈćĄ}ƆŌǍ軄鿆鿈͝ɕ輅滅Ɛŏܴ{ȖɔǎČˑȌnjˑȍȋΒϕҚЕҘ՜֟جٯٱشٻ۾۾ڼڻٹٹ׻ѳаԶغҨУ͚͘ϖЖЖˏ̒ΖԣӦӦҤУʗ˗˓ʑɏȎҙססҗסکدذٷطֱϣѧЦ̚Ф̞ʙϠƘ컁ȐʙʚĎȏĊÈʼnÅ̌yyw߳wڭv~۶|߻ʼnnj⽂߻Ьt[TZuRзIC= ryq#;*5 -5#2)! #mm]̎Ħnbͧpݹ⼃Ƌӗٞܢަۥڣڥќդȗ幇嵂漈辉迊织帄䵃纈翈Æ澊Ɠy $ ,1PS]DEP#']m-Ii%Rr)qx:|L}Q~PVVSZStFU\\PutJ`|@Oq7l|>`]{ZrQJ`1F\,@R*'=E(MU,?N%IV&QX.-/0!  /30B`$0U&P#K I F1]St)Nh,I`,AU'Hi*Ej$Hj#<^Ka#Od&\m-\q-DG{?w@\p6\p.Xo*Zl+C^Ze,ET!!B <@ 9.,63L.">2C  //(;2J+B 94     !/-  & 8 - 26 +@+>&2. 4976 9 %=*A,A!5 1/#/M"A%@4."4':(@(A4 2 - ,-    !+";    +G6 1 '7+9.6,5/ 0 1 4 !9+A&;1&;%:-E8R'D"9":,>*?'=2 50 *. 3-% $     !    7?D   !'+ !#  )i̤œհrԱrٳv۷|⼇佊޸ӯvկtձtڽܾ߿ŒݺӲwٸ}вsϬkحpߵyܱtիm˫jرqݰsy{wwy~跁细弇꽈䵀껅콇껄輅Ǐʒڹ˰ѶƖĐĎ͍ŽʖƎʓȐ˔ȏćɍ͕͒˖ΖȏƏʕѦѦ̜Π̝Š忉Èǎ̔ǎ{ѡp߯{ÉȎŊȎˑ͔ΒЖΒԚס֡ԢӢԤիիժ׮ددڷڹٻھ۾ܿپپٿݿڷ׷ԷҮѧϝ͚̘̙̗͚͛ϖʐÉʏ͒Βʏː̔njǍΗʎʍŇ케쿃Ljzڮxǃѓ͐˒ϛիխӥϛ辈Ȓ˕ɑʑʚÉŌÈǐË߻ڱ}{|ܱyܳwدrڱuܲvԧqki۪s߮v׮u׮w׭rğgʤlխsծuְvdWwJ\XKLW\\-,' 0+O!G @ ;@H Lf%Ph*Lb+G`)Sf*Jf&Ph)gp5|K{vBal3[m0ep2aq0ht7et6mx8nzJ)6E!7H'.N5   !  #&$5<&EG1   ?70mݶӮuѰrճvɱpjŬoɪrĦkhdbf_dɷw϶vεsշxhXij]^bȥfʪbЬg̩eխm֪nΦiԬoڰrլpޯvwլqԭrֲw伄伄弃ֳxxxTUůˮ|ԧkѩmཱྀ|~޶{ΦrҪx~ǏʓɒȒ̖ʓǏÌǑ˘ʗǒΝ͙˖ΟΟϢѥ˖˗껂yݭxެx~븁켄ƏŏÌϚКƍ˕ҟΖϘϖ͔ΙϜΟձٿֹ׺ٻپڽػ״عھ׸׹׻ٺݻ۲ڸկڽҩϢ˚ǔŎÇňǍŎ̉È|}글齅Γ̒ʐƋĈŊNj̑ȍňȍ龉џɍΔЙnjʐ͗ΗɏƊȌ˙ǘ뿆†aテËַۯw̨rɧrҪrթoɡhʠgϤjҨkӦjǛhheϧrŞlœeÙca`b`VWrKUT~qK[sVtY^WK'(/طͮ}g\agĞkhƠoЮ{ҲÍÐ֥͗濎†ȊÆὀ߻}ɄɅ‚|}c$#) (,  4Y(L9Rqp5~IKLRTRVNZ\XVNsCPP\X)(&,   )A8 0 ==E FZ#Qc*Ia(>Y$F]$O](Hc$Sd(ur>qq=Uc,^k.Se'\j-ap3qu:jt6`m1dr4Ug(eq.io25J7R&D= : -D$A5< 6 1 8#=&%2-E /*> 7,    2B,=+< 6#3#2*6 1,;;I)6D#4C"/>-<21 2 2 0#1 1#7%=-E*D6 ,/// 4 5+:*   !,    "!%fY?dׯzӫuЯrIJouqfolpt|~{c[__\]`ocSXV^ʧb˧eʧḑeƦ_ɦecdĢfģhΨlҩn֬rϯw߶~彆彄ltwQ}{O}߸vثmֱq޸szy|߷|ݶ{߹ề㽁Š‰Ë‹Ď‹쾆ǒčĎɕʔʕΛ͚͛ϞΞʖtףpޭyčŏȕΝ˗˖ϛǑƍΛɔƏōƏǑǎʑ͛ΟҫӰհԪհؼ׸ۿ۽ٵٷөѡџѣԯձ԰ձֳׯקըҤџϞɗУѦΟʕÈĈȎǏǏ꿇~{鸀鹂뾅Ɏ̒Ȏĉ‰†ÇÆŊ~{ɑϙӠϙ͒ΖŋƋ˔ƌ͙ĉƊƋɓÉÉﻀテԳ丁{ͨrţnثsѧmeƝfŞhǞgědb``][S[WX{M~SUW|QWXrKiǶɱ̲}_:41 ¨~ڷ^adʠpǞkg̣pĜkm̤y׭‘ʘ㺇⺆ᾁ~޶wܳt֩nѥj}e`U$ &,<1UAXsp7KNMOW^_Y`YWX]NNM_}~L:;- :;G!#4 '<!; < !E 4 -Jch5dg5I`'W"Pc'2WE] L\%\h0JX&G\#Ob(Qb(Wg,^l0Vh,Nb'Lb&Rd'Zh*Rd$0M;R&E: "@"@9 6"> )?3 5 :$<!$8#*<$<   4?,@%A9 !5%7"6*:-?%8&8+<!01!3$5,:!0(50$=0G!6N',F4.-.4&>)A*= /   #%#$  # .N*H=QK[&Ob*Ma&E]!2Q1P-O%G+K+K&J!E6Q$!A: 7:879 5F%<%='@#<'# *4 *,B  /!    ,%>":%<%?%<&;&;$9$: 5"7(=&5&6)6+5'4)7';3I#1H#%=4 1 3%<-D$)B2U*F(    ! &'"7?F.:@&08){W]fwvsxw}}wpe|TuSzVeGkJ^Ua`^PJPMOIO_^ǡlɦjǩiƨhZeƪp޷}״~o^llIiѫt߯t߷yȋʼn߸y۲r{޸xߺ}߹~ὂ⽁湂纃蹃躄黅꼄齉ÎËÌɔƑǒ˙ʙ̛˙꿊ܣp۩u轇ŎǑƓ̜Ι͘Ι͘͘ʔ̘ɖƒÏ꿅‰ɖ̜˙ХӨҤѢְ¬iȫΠРʕčƏ͘ʔʔНРΜҟΙОϛčɕŏƒ濋ō‰‰Š麃~zxۥux{귀븀}~ާuۧt{컀뻁ōˆƊʐː̘͘뻁꺁뼂콅ƍɑŏŌĊÊᅥČٶѦuȥp̥ṇmhŢmba``\VRWP}~>Yw-Vz&]r)rx6JEGNQRVX{Suɺer^TIۺl`]`bfkmllko›s͢v˟n׳}ʦ}pb !*-!#5.1B .F9SPd$Mv(}BrY&.O/P0TBA?U /L.I)FC C @ B CB @ 2K(C'<9 :9 63 &7'8)?*@.D#,)"1%:/A!-C&9 "'A!;          #4%;*=#7%9!6)@.E*?0C,?)9&5,:2F +?8 ;9 9(A8M.4L*AS;:T'%9 ,'  $   #"%#  LVX%-8B.x{EZkjksiuqxvs{msbrVjUpT`JdN[zPTvXwYsMp;~@@z>y=IXạmȡlƤlģi`ȩm˯sês̯y̮vk`ɭu׭pԩn⾀߿ذsҧjثn۰qܲuݵy޸|ݸ{߹|{|湂湂黄꿇‹龈꼅ϋ‹뼅쾈ÍĐÍǓ㷂ݩu߯zŠŐőȕɔʖʖȒǐƑʗ΃Ž뼆軂辇Ēʜʝ̤ϣΡ˛ʙСȰ_a?vP㾍̙ŏŒƎƎ̗̘ƖŖ͜ЛΘΘ˕龇濋翇Ë芈溂齆蹂|{{yܣrz|}}|{֟pj|뻃踃ŠĉȎÊÇǍÇ~{~~~~빁캂ŌďŌÊﺃ⽆n̦pơl̡lhid]\XVSPOIis2>gFpDmKspz3n}5g3I{KU\\UpunѲdZL  ʪ|o_]_cc`eÞnլyšn̥zծЪݺh##-   $)&)<"&8#\+aKp(Mp&QPWYZXSXYW_q~P"JS*V\0AT$;H"DU$H[%K]&GX$@U!HY(P[*4H8I"GB @ E!ED ? > &A:: <? < ";.:+7&:*@.A/9 ' &/E(8 %6.,@".5!9 &  !1!3+<)>0F4K9OAM  " !$ (    ' KPQRuOyS}QwXu_w^sZkYfVoYs\kViP`zJ]yH\w9e}@az<[x8Zy7\x6^}5]x0a{0^z/c{0~AJXXYR\[^kgѳtԱtͮrånƣjĠh˥lүufơkѦo֨oשpΣoˢmթqիqڰu۱tݸ{۳vݷz߷|ݳzܴy߻|⺂őÎ}漄Ì྇سv㾆຃ܫt޲Ē濈巃뾉ÏÑÏőƐŒŐďÐ뾊ÐÐŗȞ˥̤ȚÐďǕőShe<èsԺۿ“ТѢΜɒŔĒȔɓ̘ɒ뾆Ԫx̧x||߷~ݴzܱtܲwحx޲yyݪt۩rإpգnؤp߫uuvzzxܤq’j̜q絁軃黃黂꽂ŋɑĊ翂yz|zuw}Č부~纂ǩtgee^]]yPPQQ}N~Q|Gwx;Rm%@cDfAhMo Om Ro$bq1rGQTXZXkSNFqi\|_UQLhĢqbf\^a|Y`ea^˲ϾiXXW1 . - '"4 ' $  Vc*0N$M @ ]f.PJ}KPOKMUSSQ{~@Ri.dt9qo;WR9 : 5; =TS^*9M0A=B%DG(";(<1E#>*D$4  # !.! "4'<!   *+@1H3K(;+6K)B#:#<!; #= !; ; ? *FAV5 9)=6G,+ $ # $4 $%-*  %()+$)<,htC`i`9\>bPm"IlFe \`2zgBZXXY`hϹ{hfgh rЩwb^gjpvxC82$#%"')', '+ 17#:HJS OY++LF F ch1sAu@DFCEIQQVsw=v~?mw+D,F!>-@.A,?' -'1( 1*= %  (&@'D!< $;"9 : ; #@*F%A'B6M*-E %5$  /   '  FFP%!1 0 ! " ! * #  ]n@b}>`|J\wJ\vKRoBNl?Fe6\{LjXgT]{KRsBWuGZvL[zHYvF[wF[yEVt>Xw?Ln,Pp/Df',CUy2b5n7_0X|,Xy,k9{=Bs9h2{=LFUZ]Y\cb\aaT`dcgdhΥlΥlϦjرrӭmհqԯqΫkɧfŦcͧfʦdЫlسt۲uߺݷy὇⼄แߵ|俇߻ѰpƬiڴ{رw۴w׷y\c̱nϨmڱw۴zհrڳxߴzݳv巀縅軈齋꽋繇ඁ乆溆鼈黈꾉龋ᶅڳ᷃丂޽~i}ZvXjk\Va״~߻ڷ״~ߵݱzǡojl޵}ٯv㺁خs֩kخrլqׯt֮rʥk͡j̟hѩmԧnҡlˡi`_͟m͡m˝lեs̠mU\͜o{渁幃~}{||~~}vtusvrrswzz~캃츀ܬw|ʧr^XW[XJDf}8p~8n{:v|~AD{=EKQSLdp4ly9vCJvo?kd<   = 3< (K>R 8B%Yh2;W+K,G*G,K*NAY$+D  &KZ)DX$%B/M= B +K1O-L E%E<9)='9#:2L6N ?S!  #7$9'".A$$2# ''3& '!8$>%B#@&>'@ = < = $@< < $@%<)""#1  &"'6  %2-.6   $ TZ8myJayM^vLXrHSoDVrEZuI_NcR\~KWxFTrDVtFWvGTsC\xJXvEVtBMm2Rr6Qr-Im)Gn*Di)V}3W~.S{,Rx)Ou'Px+U,r9p9a0m4@D|@CR]]YZSPZdYW_ehcɥjҫoҫnΩmѫmҭmֲrҲo]VRPTTé_˪fӮlˮfٵzӱrիrܱzݵzرuѱsˬj̤gذsԳtcQYֱnίlɨkȯeǮbïfְrڱu䶃渆躈淃黆ղ|Ϋuڲ|亅⸃ു庅㷀ݴ|ഀݳ|ߺ}ῂʩphuET[æjĤfȦhͫmȨiɨiҬqѪpΦoˢjcǣmٮs֫rΦnfdҪoѩlЦkͥiťcŢg͢kУm̠kϠmȜfYǛiěicdˠnТpdcעp{崀浀~{z{||{}~zzwwߩsަprtݩuvۤq֤r֦sګw٫vЦr׫vƢnaXSTODy:_0Yx(Ux)`|/Wu'FhBf@fAiNqWs'pp8ys@wo=~pEoGqFuG|OWh}Vg[Aqmh^cjbm`Pmœswı}pXtfR '-7%,BCEQ66@     %5W"NC8Xpr9zz?Gu>g~5n9GEGsx;Sg+Ul-yDxtAoh&"".#  %?(F+C%:#=!: > < ">"? (C+E!:# &(6BCP  " "&3,,5!&(, #%  $V]8bhK^oQUlGTlENm=<`-Hn8Q}=Y~EOx>Ns?Z{CXwBVtDVrG`zMZvAWuAIm/Jn.Ko-Fm*Hn,Dl'Hs*Gr&Do$Cj Hl"Dp"?rh4A^+f.h1t;Ds;GQ`ZTKEJ\ZUZbfţhϮnϯnͪnƧk^˰fӴpįfRKMKFDGKHFéjaĢdƨeʪf˭pʫmƨcŦaWcNïaҰsүm­cT^__ǫgЯqղwٴ|ං㷃㷁۵~r˪t޵ⷀ߳}ݳzسwֳwѳr߲||…ڹ|ɮj]¨p״|̫tɪnʪkƪd`ëcâgҪpժsϥlŞhcȡiǟid`PàgʢgWLRWcabȞfȞg˟jУog]WSVץpvx{{yxzzwwxzz}vvݥpޢmߦpަqԣpdiŞmœkßkšmjžkğkbXMQMx>f3W}$GoJtGr@gfEjMo bs.nx5vs>lq9jq5lj8xj?|jD~tGRVf`^ffj_Z\dnִ601 % #   * 07$+B(-B% zhLXl],Rkr7rv?yCWv0b{4g4k7t{=z}Bx@:\Vk.Jmh;a]6@>*    #>5 2 5UCT"  #)A/M#OL &K>QN^):M"AN3#=@P*:Q#4T%+NC]&4U%I!G E9 7 .C*A)@7 +E&5 *@      "-& (9;I%:?+0@#7!8%<7L&0H9Q&?R.4H%%!0"#3 "  " "+1;#  0.,d\DrnCacH #%+/"  &#)$ % -7,V^B[jL]oHRl?Ml;Bd4Lj:Om8Ur?Qn=Nk9Ok8<['5X ;\(Cc.Df/Kj55_5^3Z4[6\5]5[7]5a5`MNQNCPMLKRWeƧfdbħf[VXîaUPLMJ}HHHuA{FEOb`ad̬m԰pӱpKR_aƯi̮n̳mhVbc_gŭeǮgϱqմwгzϲzѳzͭuֱx۵xֲvױv˪jƫe_îbϬm۰vάnfaZZ`Ŧk˫oūeXV_hơiͦpΤobȟhŜhfaU`QBpw5wx:xy;BIRZSbĜgàjĜjaIK]ϡl֤s߫wzݬyשtܭw֢pީuzyޮw{߰wztuxw۩rڢmأn˞kf^]gƟmeachabN{DzGxDz>Tu'Km BfCfEj > . ";3? 2I!C A? "E/L1N@R">N&7H)AT0I\94J"0L"E!CC "E9#78 !A 3 / !7$#$    $   $4+<$ )' %7 8&<! *   9K/C)9+ 6%;$:6K"@S1-?# %1%1*  e_>OW~XA;.mo=##* $%"'& $ !     "'( MOJ]oITfDexMfyT\tLFe0;\&9W%6U!;Z&9X#,R%O(O5X5U0U,W+V*T)Q'M*Q-W0U4Z,R,Q:c=bAgDf@`EbMp$\y+]w,Xt*]v,by0r:x=t;DMSHH~FI~EUWLK\WLUYUH?NVQQQN~MJJUımbZǭnЪkUJYhdf`_c]XWdk``ɱjҶvٸ|ںаv˭qέrЭtЭraYPW_ĩeϬpdWWXPQlp;`Ŧi]W^a^eßkcXZ¢c]ADm0g~+q0mx1w{4qv5qw5GHH\c^VYUUȟl΢o͡pϣqקsԥs֨rԦrРl٫sݲyۭvޱzܮvեpبqݬt|ߴ{֨peU\X[V][Rc^\cYV|G~t@qBma7cq1Hd!Gg @_A`9[3T1X0W9]Ra/ge``aZSe-[m,f_7a]2j^8j[=mb>mi>|Pgcfnsh\yV^zUa]mZF      #MD=!!  ,@3Q3L+HSm(Izr@Ga!EbAY ps;Yf.Ra*N_(}~DwwAZ^/+-     1 ; -1 ) +< < 5 9 (H9PRY,_c?Yc@IV68Q!/Q%H(H)J5P'>*:!< 9 '720 !' #  )   2A'  "8)<   "  %!  5G%:   4 "99L%rHk^B.++F=3}Q+-)!%2 # !*.$)"' "     .68:D<;G\;Y,L&J0X2Z8[G^!O\2Ya>Xl(dq2qq=lf9mc:wd?{jDej7xIb`hpsi[xTcrRaQ;!        x[ٳyȠl-(*   +D4M3Q"N lr6nq74[3XWg-ot;Oa'I\$Na&sy>wq?^`/    ' 1- 5   : = ; !> 'FCV ih9NR.vMY`99H >Y=[@Z+;Y&/I$@6 $;,=0>(9=B .&   $    !&:        0  ! !:/E6J():$  &,:;GnkFnn<,*+k}sV%57F4")$  % ! " $  DNM.99#$(# !  )("4-&60,85E[>Eb3-R-O4T 6W6Y,U&P$L*L4N4N2Q1N)M'N-P*J-S,Q-R6UG[!Oa%A]=X9S9aIgOk$j~5c1[v,Wr(\r*m~5by0Zs,bx0jy5}AEvC}DvAi?f};_}:n?d<`|;s2j{0[n+Tj&[v(j-b~)a|,]z&^~&g4c5Pu%Ux(hz/ow5fx1t}:JOQeea\ŜdȚcѣlʢiŠiѥpڬuӤmΠgңkҢkإnޭuԢmϙh`]{MwAKI?@y;JIOUVVIzNtAvr9Xj)Mm Ki!Kc%A^6V0Q+L'I2W3T7VJY"BVE[Uj$[i*hg5p_=ga4oh:hj9Zi0qu>XclrdSqNhbydIsQX\O@    %   +)(fS=vUǡlѤm•ca/L(L#O 6R;[ks7gt5}F{KYb.O_'Zf0Ze0be2LR)   * 4 0% ': = ?&HOY+li%<$9!3FC+      "92-%+ + 6 0)%   !!+  &  &<.C9I/!-" (<,-6&=-@3J =U!.4"  "~ub~oLPuk>AQ /S:Q%9M$EW6 &% #! ! " $ %2*'53/9:  # $    .A3&50"-.JTBAY4-O 0R0R5U5Y.W4Y 'N.M=T 2M2O)M'M2S1N:U#0Y+T-Q.OFY!M_$C^C^:X9^?`Vo(j3Vz(Os&Tu(Sq'ex2\q,Xp*[q,Wn+CMq?c~8gko<\i0gq7}uHftģqiaqeO|XabbdܻF>8 HFDGEC55:ROKdƧsdū۲nҟaեi٩m|޲wg  + +A+TG ;^r};STv|?yvA`g2Q_)T_,gn6sq<@L#$  - 27  : 7-I-L@R%_a7UX61?SR5N!aZ531%! #  " &<$< (?)  /@%"4#$5 &   !"+ '  ( .  Q/'"0--;"!1A )$7EM8EJ3AM.0A->!:5IBU" ,"DI1nk@[c3FX CP!UR,CO$4T6O$?X.E]3DR:   # 43&#)    #!")+9G/,C#2R4X1V-T&L/R)O,M4R0O0R*P/R6U1Q0R/S,S0T>W>U>X;Y2S6T2U,SJk#Uv)Lp$Lr%Nr%Km$Wr/bs1gt4lu7gp5k|;vOgC_z=i@lm4u8t7J~Jb{7zHMV\JyDs|UXc1O~D|GrBHq=d{5_w-]u*ax+Ig Ef =];`CjDlNq%j3[v,Hg"Il$Rt,Sw-Lq%Gg"Zs,c{1EQCHVaedgşkǠkΣmФpĜid[Z̠kʠkśgǜgǖf^]Mmq5z=D?x:s7Ar}8k|3hw4o7Jv~<`i/Kj Fe?\LoKh C]:X,M)H'I*K3T=XEV!OY*PZ(P^%Yc(Ue(X^-YW/]\2rb?}nCrrO$U\30B,A8I9I EB1/+-&  $#7$8(#) '(9"  &QQXGGP""/,!!     !&) " ';6G']iVReC8Q'6N(7N*. +,:#;d3X#D"E$E >'G4Q5V-O6T5R4R)H&I.N@Z AX BV 4P5P,I4N-L)M7Y?aJh$Ro(Ji#Tn*m;kz8s`}8gn>b~2Tr*Jm$Hi!DeV/N,J*H)G&G)M5Y?^=`Jj#Ki$So*f6_y1_y1b{4Vq-Zt>XuBVs@^xCaxAnDoDn>]z7c~:^{=[y<`=`zBt?pDhJqHOmShPcN[{G_}La~IbOb}TbPYFcKr]|e_]nWnWs\k[lZgL~P}JrEd@mCWhFeQeJq?k:IOZbjY?z[B\2R0P9YHaNa"Rb%L]!\j,bu-^q,mz4rw8PN=mw2mw2vz9nu6ft1ap.ny4M\XRF^k-Wd*S_(Rc%Qj$Rh&Kd!Uk&bq-Xk)Lk"Oh#Ul%Fd Me%B]A]=Z>\DeEj>[0O2O1L(B)D,F6K.E2F@RATOd#T_(MX&PU(^a0eg3kl7db5sg=ut>xlAmbjcgj׬tjǞmӫsjϪvܶ̮}n_vgYu’߿زr߽|㼂ת{ŗmުz鶁~鳁긃궄븇ĔʙȘĕțȡsqoIL^ 3<"E-/O;T-DZ Jb#"!0H%N0QOW(EM$VQ1b]9DO$7K":'<6D4C8E=~>IGJJJq>Pf+Pg'I^$GZ"Cd=f7dAf!@c9_6\6_6`4ZFg.Cf)7V6W9X7U>X9S4P2Ntg?ZZbgmڮy۰w۶}֫uʠjeiȦwäxԭ~㿊ֲ޼ճv˥iٸ}濆~ۧwz|꾆쵂밀뱀~|岂뻋ホͪ /5>"&G02Q12L     )-9)-8 ' @I"$!  2+(@-;*:!6- ) !'   , *'K$E'@/J1L3O9P5L'@)=:R"E^-E)>"'N%D&E-?MQ*FS/.E%?9 .D*>4G@Q%$*    # '20->"*D*F.J)I!D#JHFF A !B"C? A !A#C"G#I!E !C @ !C $M&Q$N0SEe!Dd Bf#>d"Ch#Km(6Z3W^xI\vJUq@YtD`xEWs>f~Cg@[y8Nn1>b"Gq*N~5W;[<[<\9`AiGiMhQpRzXkOVwFLrAZzKa}OkWfPT{D[|M^}NeRphSW}MoY^LcQoapvgOPx7Qw1\~3_7jAx@HpINn9b3b=\~@~KNQv;yCs>m:pGKm&]w+f0E|Bx;d}-tV;Q=X:X@]:X9W6SA`EcGaDW BT @RUi&Th'Qb'Uc)V],Z_,co-^o*Yk)aj.]f-_k-`r+\i,\g,O_%Na#Td'Qh$K_"K_!F_D]>_=^Kb"@c@cHh#Vk-Vd*FU!=T=^9[6S2R:TDS 2L*E%@2L7R5M6L@T>YJa K^"S^*\`-tqIt5Pv9l]`Q[M`NX}GrR|eju\nUZEQx5^9g>]~>t8EHQHzAwJ_=t=k5n7]2h^7b4a:e5Z5\:aCf Li$:^1V.S1N7RTHd#5Z,K3R7Q=Q=RBV,I,C4J:P-FCRE[B\Lb"Qb'Wd)bf0vx5pu4yu`mXWcRBT;-G9H(BF<   )/ 3 ! '"5.$+$ &,  *EEMAAJ  !"   +       "5)=0"4.@&3G+   (A'>-E# <9& 1">.J3L)@#=(C-I+H+F5/5K 0K,H (<#  /D'@[)3K/?3Q/Q5RIY'GW%8U1M6N=UH`!=YGbVm8^s;Qi#EZE]>V4M/M-Q;ZQa6`iH]dDU]8KZ2;P*3J'5L(0I#WaTWbQ#;4C.<<<$  )  ) (F-P)K"@#@"A#C!DA< @ > > < < : ; 9 : 9 A $JC %G'F,N,Q<] Ql+Wp/@_(4X!=^)Lh2A_-Gd3Fc5Fe2Rn3Lh/Pm5A_,?^*:\&>c(Rr0w?Sy4Ks1]~:lLmSiRVwG_}LZwJHg>Ghf}SVsG]wP_yS[uN_zOQpBLm;f~Y^yHQrASsA^yCTpWnPsHkFaCQy6XIHOKo>dGgm5Vu0Wt(BzBVu%Wt%dz+ay-Pp$Il!c|-ky4bl1[f.Uo'Ae5_Af.T*Q6W:Z7T4P.M*K-M0K5L2I/H.H2L1K1K1L2K5M3L3L6M6O6Q5M7P;Q>S@V@U?SJ["Rc$L^#>OBTJZ"Ja!?XI[!DX]0O5L0H/G7LAV8L5GQ#);$!  +35   >>I-  *,9*! 1.5#IP3UW9CC4>>>MPT  ""    ': CEIYY\( &++>  *> " @@J.    '!-/8 0 &7DU>?K@ "68/*=*9'6H2$@"B A6 "8*F&E(F,D-0$A$> 9 ; )6 UfJH'8@-C)H;X1O7OO^*:S.N/M7S>XO`)La$G^%Me$MhSo"Hh!:Y/M(K7[mn7ag;]b?beBW^;DO.DP.>M'9M+1I&56. .uvq`ac  %>+J(H$?"@"A$A= > = > @ !B = = < 9 8 !: 9 = G @ @'E#C*M4W;[4W3T(J:Y#C_';X$D`*Fb-@^)He+Gf/Jg4B_1;X(Dc,Ej+Nn+=d$;c%?d$_u3ezFZuINpABg5UuBOn?Df9:\1Gf=SqCGg9]uQ`xVl_m^]wNUpFPpC`zJPl?Tp>_v@UwSaE]z6c:h>]=H~/Dy(Jz)>u$V{(n:xBFlCMw-Nu/Tt4Ww6p:G?h0^~,Tx!Vu)Ml!w5Pg%JkWt$Mj3W:\2X=`Xm({Bys@Yg*?[?^A_2S5R=T:U*H,H.I)F+G)E*E*D'C&@*C.I.G0H,D+A,D0F0F1H,E-C6L8M=R>S=N;OBUDVEU @PRY(ag/Ud'JY#Ye,2AAUSf'Wk)I_!;N5J,>0F.C2J7R7Qou:{vAwF}Q{Q}Q[`[ϟhףkqquwxsߪrݩqۧpw„ʊÆċ㵀嶃ȗ꺇쾊㾀Ĉƌu"$'(6!"1 7P/M9[SQrv?a[>0,) % ,<%%;:   % * 431 $& "...**! "    # !    ) 8  )  :>D.1<#     !72 '  ' +#   &  " ! -$3 !;#;7H(^hX;M2 6(!6&A#?#:  #$E/N"A*B#  *>,E-K'F)E!82 4&A%F(C 9/ ; L_?=X&8V9X!-K@Q0@C,:9#(A7V5U7V0O+J-K%F'F#A/QA`@SBQ ZZ.Zh)Mf"D^9Q/G-H(J=Xeg3cd4\^1W\43B#5, + + 47+I?? 4)G(J'A)?!CA> > ? ? "BD B > > 9 8 #> !< !@ D A @ ? ? 5V/S/T*O-O$H2T@]&8W >](4T 2T=^#;Z&9V);Y*4R"=]&Gj+De%=_#;a$Ef+bz:gJXvGCi6@h1Pp;Fe8>a34W-@`7Hh7Fd5]uRdz[laVqK\wO]wOPs=Rs9Km7Jj=[sG]vNhNQs=Nr1Wz2Js,X;\>L2M{*X0Oy-m:Go>[?Kw4Lt3Us3j8j5s9z8a(PwJgA`9VHb7T,HEf=a:ZDaA^2VEaak/mk8D\N_%Ne#C_5Q/H8YF`4U&L'M)J'F&C%A%A$@$?'B+F*D,E'?'?*A,C/E.D+A-C3J7L9O:P6K2G;QMFS"]g,\f,JY#-B+B.AFY"I^":N1A*=*B'>:OCY5P>X@^:\=[@T1H6L8Q.L$F+C+@.E6M4J0C;JFR!=N}wC|pB{pB~GRwMzQ]_ZɕaԜfppߨnߨpަpݤpݜjܞkݤnt侀Ȋʉ͒ȑƒ͚ɗ轆~ÂÄٻ#    KLVPQZ ./N3[UZW! %9%;; 9  * 1 6 8. )  $'!'  !!  06 %  !.fik".  5E*2$<73 $)3(49@%(4!  !  &/">'>&>3I"0E*=';DS68J'+B3G(   8%C"ADW=&'DY93L+E,G%C&D$@'G1L#1N!"E )D$<!; 6 QbE9V#.M4P9L'>E&6/<3#8AR<1) ( %-:#-;# +!C%K"C$= CA = = ?C C C ? +L< > 9 67> D FB = > %K1U/R)L*M+K8^;\!7Y <[#5W0R7Z7X">[,`5Ge9RnFj1;b/6_+8_,6^,?d8Eg:Cf+Jo+Hs/\ %?#>"> "? < < "< #<#<$;&;&>)@*B*A*@*@2H1H.E.F0H/H5P1M0I2K3I7L;QOV&VU,V])JX#.?7NNb#RGV!LU%VW,ji7}tESxKlc<`_4gu9}OtLtKvKuKOL|M}T]eY[іaޣkޢkݡkۜhܠl۝jٗfؒcݛiܠj߯t{ʼnŋÌŐʘ̠ƐĂ}}` *A'[Vp2i` !$91E+B"</ - 2 7 !:4 / 4-+ #     % ""#    '0   ,GTB (&8#70 62 "%)4KNS) (""/$ (+5 !    "-?&:P+*@(>*@7J%(    !? A&B$@#?U7:S)1K+K)H*E4I+K^D1J(8N.'F1I,?1<%:!= 'D2IKV<=H,FN38H'5R7U-N/R2U1Q*I'H$D'G1T2Q5W*L,E1<7BPU*jg5\[/KP&KU%R\(FU"8MVZ0PV/^Z3BF".:4<.G'@(?EW@!8)') (@ )@ ,@$$4$! "@$IC A@@= > <=A :8 ;T6'I*L#D#C8S-+L!FA B A B&H0R,Q0N7T;W!8]">d&3W 8X3U-R)R1T7X'>^0<]0;c+6d&Hl+Hj+@S.Kb6a|FZpDRtF;h.Mp=ZtJQmBHl8SqFRnDKk:If?\rTdx[`uYYoRj~`e~QOq8@f0?e-6_%5^%0[&1\)>`4=e+Fi)Ks0T0_/p;C{@m8X~/W}.e !> ; 9 7 5 4 6 4 3 6 %=%>&@'?(?&>-D'@)@,B-D-G0M.L.L2N1K2M=T]a.ek0U`'AQ*<52 1 -  $!5:A% %77A -$".1;    +'"1% ,22>(" "0 :P()@'?/C'@$G$F(F>T4.3J)-J9O*I`<.K7P$bl[SaL(A(?+D-F,E@G)7I$3P4JCR3'@2J9O'UdI7K+0 *)02F)4H+-C%4G.0B($    +A< >??=< ?.J'TgN1 4/H%2L(7Q,8S-H`=ZlR?Y28T*@ D%K,J5R!+M-O6T!9W#DZ*>[/Eb/5X#:X#2S,M,O0T0Q!9Y-5U'=\.Dd6Bc.Hg0Gc.L`4N]6J[6Ag46b)Gg6TnE@`1Aa-Sne.>e)+V-Y8`+;_-Ab3Fg9Kj7Ji6Ck7Zz?a}&=%<)@&>&<(=+A&>&?(C(C,F-F2J4J@QIU#:I>NO\&DU ;M-@,A0C->1G1H3HHU$IW$MW&DL!AT8O D "A8 6I2G4I1K>SCQ@NER"Y^/vIkbCoDYY.[e-[g.kn:uMsGqFyjBil8un@WbǗeɛh`ƙgإnϓaԓbԓcݥoܡmݣpܢo֓bԎ`ؓcٗeڜh֛gלiߤv~魀筀붂뽃ٷ}2.-  % 4A&>*A'>(@'>,$ -"  0862%4     !    "7'    #& $>BG9:A*0 3 .C%7 40?"+ %8BO6#603 6#; %'4::D?AJ)&$$$1$))5"*(   ', %  +     7:D. ./<66B$&$&!6&=/B%+'NB[3;R3;#=2O"/J"1J)H]>)D$=%=>L57!9'A-H.I':4I!"K *M,ND "H B]+8T1M#A$?)D1S2T/P3X,P%K,T2V8]2S*G,H3PAQ!>NHU$kh8CK(=D(BI*8D!5A-?;GOO+2; ,62D?P.@R3$:1- 01225F01B,,@#"  +19 :8 770 . 2/ 1 876 9*A:Q.'D+H9 %AEY;.O-L,N5O5O=Q!Oc1K`4F^5>]0B^3#<#<!= < %= 9": 9 8 9 9 9 8 5 3 6 5 6 5 5 4 6 ":!9 "9#:$;&=&=(>'=(=%;$;%<%<&=%;(=0C4G3F:F;KDP":H1D/?,?)>3E8L5L8K4C@SSBWJW#EP"FQ"ZZ0vmDqNwgExD^[/Y_+ot8jq6iDlDfFyc@NY(lg9~Q`ƖfȚg[[ҧqڮvٛjҏaٝjܠmܢnؘgהcҎ^Ў^Փaזd֛i֛iv|}ߥz{竀Ϟ~% '5!; 83 3 5+=&' !* 6!9 6#0    #"   -#':'$#40@'!' +,=%:!86 6 5 %?"))7[\a'(7     " ($!  ")  ##<%;*#C*J9Q0$@5N+?Y0+B"@S:[hV5H)6 / ':3 3 #>)D)D!9 ':(@!::%M 'N,M&E> !>'A*C1K0N+P*M)K.U4];^@a/R(H*J1L6KMh6=],#MG F FD!A!D'H0I.F&@1H9M0I"="=9 !< .G+D%@$>&?(@#=$=$=#< : #;!9 9 6 5 6 7 8 7 5 7 4 5 4 3 5 6 5 5 6 !: #:#;$;#:&='>'=&;$;$;$;'>%<#:%=-A,A0E7G7L.@,D+@*<.?1F/E5Q/B.=/<8K2D3F5LFT!DO"BO$:R8R/L#GH F (H-M2N,J:SAYAUOS(UZ*ja;qiASL3eb6fi4nq8\X1ne%?: -B5B3A9 6)R%K(I'E(C$?#>(D+I&F >(B/@BU6J7G3H/A,D1H,D5J4H,C%A,E!?U5CY8/G#&@,F5EPM'.48K&OW51E BM-!61 1 . '($78I21)?.C$9@.  ! %583 1 0 2 2 49; <9"=?V3)F <!>6 $B1W/T'H/K'D5S"7T%B\2A\3<[0<\06U,1P&3P&3P&.L#4Q&+M$I*K.K0H&=*F6N ,3U#-P5TD\3=W2A]/L^2Rd:QeB]nSTfIYhJOeDPaHBY;4S,7U,3T$3U!4V!Gd9Lk?Gg:Ed8[pDFa3@h/In.Il9Hi:[t;j{>zItJTn>Eb3@a1/V""L"N+QC @ (D:W8P-G4O0H0J1J4J6J4H&@)@&@(B'@$=+B";#<"<!<9 7 ";6 7 6 6 5 5 4 5 6 4 5 6 3 4 4 5 5 5 8 !9 9 #:"9#:&>'='>%<#:"9#:#;":!:!;$=+@.C,A,A4G.D0D+B/A2F(@'B0C-9/=5I;L;LDS!:SBc$;T4L7Q:S/S&G'K/P3L3L5O=W:S@RFR"UY+gb9he;]_5\e,u}>y}G\^0w}Cz~Co}:pp;{n>pj9yLZĘgŚiyN˜iϞjcURǞl^~TĊ[͐^Քaܝgؚb̕^ښfܛfޣlx鯁|}̝קr-'''(5')'B52 / / 2 %7#3() "  "8,@(6 # .! '(&     '" 0"7"9(?,B5(F-   /!      $$.E()C!AR@3I,)@!8':.>$5"65I'&B; "?$@)ABN)2E6?1 8 +P-R(H$C(E+D'?'B#<)=0A7D=IGP#KS&W[,SY)RW*7HHQ&&B"B 0D%=#?'B:Q1>U35M*.G"$B(>/@++ (D>R1;P--D7/ . * $7(;1+>$$9+A +@!1;%92,  355 3 46; ==<9 <%A%A"=: ='H8\%4[$5Z#>_+9Y+=Z(:X&9V(:W)<\0PgE@[5:V->W36P-3P*7S-$L+R$J'H-J,F5O 7O!';[(5W:W'Ia8C]6WlBTgGI`=ZkOisd_kZ^hZXdSZdUI]C>W77T.6T*+M!0O'WlQMjEHg>MhCTmJGb;Ho.Gq/Ei2Qt>ax=gw;NhGGc43V()Q!L KL?ZA];T0F)@+B)A0G*C(D*F)@*?)A(@6H.C*@!:7 9 8 9 ; #<8 7 8 7 5 9 8 5 2 2 3 3 2 6 4 4 4 3 3 5 6 9 !9 9 #:!9!:":$;$;%<!8 8!9 9!9"?#>"=%<'<$;%>4K9MBQ )C)C.C.D&C'B.<0C3E7I>OJV%7M9Q=R9P7Q=T /T%J"G5R;P3I/H5T4SCXFR"YZ/l^>mf>CQ!Tb'_k1PZ*NO+ff:bs6bp3^a0i?mA}Jaˡlѣo]٪sתsśfTsE_f[\ː\Ӗ_ؚbٚbؙaީrߩr{趂ԥž!')' !"= 8 2"34 *?!5' ! ,A!)@/B!5  !   &&0GHM(+3%& !   /46 :"9 + .     %%1"!"'(  *  1 %.E(M\K7K0'>%6#4*9$32 8J)AO$8G5E48,!B 0T'I!?*@(>(9$8"31?6B3>AH IP%WY,WW-AG#?E"5E2E)+<$6F)@J6   "%3 $'+#$'3(  -86 :;> ?=:8<=< 8 /F%?0O3Y"6\#;_'@a-@`/:[$>Y%8T%;Z-MgA_oXD\:C[9@W76R.7T-4P,8U0E`25T(K/Q5O#3D -:%%4%7S%9V%B^0C]2Ja8UhHVhJOf@ZnHYlK]jVtwdceajki_h]PbJD^;E]<>Y4A\7Ea>>d3Cj1Om?RlFHe:On0Fm3[{>pI[x@[q;av:Kg0:[)'O&N'J.N*O1QAZ;R)A%<#; 9'@#>$D%G!<"="<'=,B+@#;!7"8-B!98 8 $=!:7 8 5 4 5 6 3 3 1 2 2 4 6 6 6 6 2 3 5 6 8 "< #<!8 65!9!8$:"9!77":!:";">">#=&;%;"<%>(A1F7I/F/EAU5J.F&F6H>P>L;L?NHS$9L7P5O8O3G7N8Q7N-G6P?U-B$A0N6QDURW)bW7d_@da7FW!G[ 4I!70QGa#_k-hl3oi9qg8kg3on7Ǟi׬vҫvЧqΦpԩrٯwЩrcϤm׫rɒbŠ[̒]ϕ^ԕ]ښaܞf߫t㷀Ŏ뵂ﴅȘ֨mg` &).;! #=!:!73 (=";% )?0F"%=$;&9%; -)2  KLO-.6 "%   -:,  *4#8"9 6     *+6?@H  !% "0 .&!   ' +#!  2D,;L74F/7I.'6!3(7$3/ #:%>EX83I$!:*=0L)@4CFL.&24LMf9&G'B*?*<*<+@&:.>:G7B1?4C9E3B6B?F"-?44 4 :4 $;04&</E$4J(:4 !62 . - 0 5 3 4 67F,)>2 6$<'=+@!&<$93';(9=O+/5+!  &.%    ') " !"$%%2JKS"$2(876 ==9978<9 9.C"'<)H(H-J/O6W 6V"7\!?`%6Y 5X >`.A`4>W4AY6A[7;W18U.1N($B+H*F+G@V4&=!:,D1LB^'Tg.ei9X_5FR0GP;;I1-D(/A0;E80:73:;'-3=I=L`AJaAD_9B]4=[,6Z&=_'A^,UgAG`3I`*Ng0Zt6cz;Nj4>[',N#F*K#H%I&B-B2E(B$@%>42 2 22":"?$?$@&B#>"<":*?%;#;%;(;6 5 5 !84 3 4 3 4 5 70 / / 0 2 6 : 8 6 5 2 3 3 4 8 9 7 !6"7!8 754 554 6 6!8:"<$<#<$:$:'@&>(>-@2D,?4G5F2F/I8L7G;I;L;I;I+F"@   ++B 7467 0      (8 76$:   "2! & *A&>'>%:!4  " -"$$1\\aQQY  #-)*$##  ! -++8% TTY??H!+ %3&(  "(   7H1AE#)74 E[/Rj<+H(?&:%9-C5M4I8L>N=N5G7I5H0ABJ"?J !: /.6 4 04D+0+%;.B%,B 4 +- / / -(. !76$96E,$9- 1 ":!8331- / 13G(5I!7>%(&  !/+ (47>HJP  * <$B=9555 7 3 960F%(I+L+K-J(I.P@f(@d)6]9a$3\ :]+Y24Q).J"#?*D*F/H1J$A%E+J3K>P!5LYc3LG3 ! '&% '%*%#('>$9%:)=.E-C+=4F8I6L6M;H9E>GDJ!CL!9L=V!I\&BN#8P7O;R!C\$B_#Na)/M-MK`&Wc.Yb-ei4uzZQ`1Wn-[q+Nc$Tc(L]#kw2kn4aa0bb1tFxIs=x$<4 '< $E+L-M)I,L:Y'Hl0?d*3[/Y9^*@\79P5,3P'6V#6T".NEZ(@]&:\&<\*>Z*@_-&I"E?<7 9 (A0C$7)<85 6 2 3 40.8 9 : ; :96 7 !:&=5 3 3 4 3 0 / 1 5 3 1 3 3 2 2 2 3 5 7 9%= 96 3 1 5 5 4 5 5 6 75 5 6 6 4 3 2 2 2 2 4 6#;":75 !9%=$;%<$:(<.E,E/F0D0C7O=WGP"CR>J?KPY)KY)P_+Td-]c3OU+X\1\]3`i2bi4af5.E8SOh&\i/bh2KV*U^.L^,Yh0Nd$?U\d,Wd)xz9po9ag0ii5qs8TyAde.vAu@zI\ҥkӦmΦoԯwѫu٬qڮqۨlәaQƌUГ[ҝcܤjݤjߥmqﻋŗțLJM        !. 7- 0 + .4 #8$   &6, / . - . ) " %    0 ccgddh()6 /  88Bmmo22>  !   % #    $" (:#DT@S^PWbUCP>"3!5- 0 8 !8)>ES;chZ\eFKY'BI$,A!F &N*J-I9N7H&5'9:Q;P8K8I;J:G7F4D2?>F:K<1/1 !8!85I(6F.)8"- #8(< 7-,/ .'- (&.: 9@'5=$%:)>51&- $8.A'. + + #651 2 1 1 "70- + , , 4 6 4 0 /$ $     -:624#<+B (@'<#;-B&(K-O+L,LG_7@_-?c*?a/9`*7^)fubQcLCY=@Y79U/:V/9P1'C'C(C*D,G4O$5RHT*SQ:!% !  !$,%,(.%04"-2 ! 7A=7B44J+3P#3Q+K3Q=\'6X$9Z*4T)(L 76 ;A>5 '>0C(=&:89 8757 1/798 : :5 4 6 7 7 4 3 3 4 3 1 1 3 5 4 4 4 3 3 6 5 4 5 7 :#<#:7 3 2 4 3 2 2 1 3 6 6 6 7 8 4 3 3 1 1 1 0 5 6 6 6 5 9 9 8$;"9%<*C,C.E/F5HIX#C_KX#GULS%KQ%bk3M`'L\(Y`1[]3ne>pJxkEpp=nh>h`3 "01 #95 4JT?runI]22L,B$I,S+O-K+K/I.A,=2D9MI\FlpjU^OK[C@R;=T6>S81J*!='A!<+E8O%5L&);"!#%) &(.%,$+!,1'. #3 < '>*=47>< 87801<78< : 5 4 6 6 7 53 2 3 433 65 5 4 4 3 6 7 5 6 2 5 ; <":7 3 3 0 / 0 0 0 3 6 6 6 8 7 5 2 4 3 2 0 1 4 2 3 3 5 8 8 75 7$=+D0H,B)@.DCUB\BSGT!KN$TU)gr6`m3_h3hn9^[4sdB|nIxiEoLuP[upEYg.qr?ruAypCjb;S].vi=nBod7]X.QX't@xJwn=ni8qj9ol9gl2WtBO]ÛaQRȖbĖbѦpLjԾ̱tܶ{ʚaR͔Xԝb٦kޫoߧlu|칉컊絃б38B ! ":>F59B>AI   *$8.     +)6!6*- ( ,5-* !C 9L. 46I)?J)*7 -58CS8G1:M),@7B' 6 #93 (;OXCU]J9N-J'I0T0Q)L0N(A'=/E/A->.A1B6G8F;J4F->/>3A-?:21063 3 0 0 +="/B$:K2.+*,+. / - ,+ -)34;;C$-9.>! 21.B&3 . . . /F"5 92 / 4>7 4 9 : 2 4735< : 3 4 4 4 4 5 1 2 2222!6344 3 3 9987 6 : #< :6 5 4 2 --0 0 1 1 1 2 3 4 4 2 1 1 2 0 0 0 0 0 1 1 6 986 86"9":';'<)>2EoFpDpCwKkp5vw2E*7L2(>"44.B'0-*))(*)'' & + - + '( +! ' 3)    "*## " "!223":1E%IY39H"*-#C-$ $ & %!QY8CT)3L#@1C!AO)?S$6M3K6L%' % ( + * 96!:, )2#>1 2 3 2 2 8 655!A !A !964 1 0 41 223!43 5!64447!=: 6 8 9 !>"<#;4 6 !72 . 2 0 / / 0 1 0 . , , - . / 1 / - . . . . 0 4 8 8 6"74!7!7#8$8&:3CHU$6J6I7H9LTX,cm5km,,9,''4(*) .//<   +-:  -,EFO,/8IMS/3<$)3F,0&:2E(HV7;O*\eSCO7)=';$7T\FntfMWB*E5T4N)D)<,B7P9N8K2E1C-@2G1F(?%=$>$95 1/ , -,"82, )+($(;N\G3C*/- )&) - 0 3* * -. 8 /=:?FH!>C:A4E%BT<;N5%<6#9#90- *) , *))'& +1*+)''&%)/"7+:!#  "!$"%"%!$ *&;%9 " ##% !% $ $  !V]PdqLET.}uD}MyH{k=q@tExqAqk9vb9oh8cv1dm1hk5ZϤj٩o۫r`YСkװrJv8GO_٦kߴxϣkZ^Мeڧpwt㸂Լ-  " ) + ' ( $ %#-    "/VX_),7  & 2.* ' ) % .( * - $ ( ' #  !8F3FU?!621, + +D4M$"3  ! $$2::E',,9//<""0' *  % /cdjSU[oou .%* .$*="1#7AO4/A@P1AK6#6*=,>"6cj[mshGZ79Y:X8N8K;JBP ; :7620.-,,- /- + *+'#0!2,)+*&&*..,+-0)@5CBK ?H"=7 4 6 !8&<7 7 73 0 3 5 1 - +,+,.,,+-1 3 3 0 0 0 / . - . 2 2 0 1 !5$9$;!8"9$8&:3D5D0D(A(B/GEX#Ue/K_*^d3wMrMhhilzUqTZRGhZZwQY|Nuo@|QvEkM4H/E-B(>$="> =:8731000 . , , . / *++)%#%"*. ,+- / 4 1//."78F7FCL#?H );0=0@,>/B&%;"9-B$/ 0 0) * 0)1*('- * ,/2*@!&?43$(    !$#&%'    $&!( $!( '  ! $ !  -0:%4'%.?(+C$+A$$;)?K[CRdI;1 / 5+K 7 .//0668 9 8 0 . )&(+ 0 1 2. , !6)>%<6 1 5 7 80*,-/3 !7 / + ,/-,--,+0 3 0 0 / 0 3 1 2 0 . 3 2 1 !6(9#9#=#;'>&<&9+A.D/D-B%B @ 3RWc1kg>ni@wpDrK_nim[nbLPH>m[[gjiW|nAzGwBuCvAwj :=;7551/02 .+ +=/ . , (++%' ($%) -.5IZ@$9 53103 />4A2 / 3..$7.@&1A)$8))0 #80('(, ) -/..C%*@ 41+   "%'*)      $$243A> $$*& % $'2(  FNI)14/5<",>-6K11H(*C!-C$dn`3K&9/ - IYCbp^7 .,++/3 5 22- - * &%' * , - +, 3%:#:5 3 "8#73 . )*,-0 4 3 - *-,**+++-.-,0 3 1 / 4 3 1 3 4 3 %9%8 9"<&?":'=%8-B2D5F8F*@*F:Q HU(%(*CO\I4H+0 . + ) CS>EW>3- ,*( ) #8)?* *- 1/+-1( ( ) ( ( / 2 4 - 1 5&81, ( '))+++ ))*+((''()+*)- 1 . , + - 0 / 0 1 2 1 7 !9 !8 &=.A4C7H2D9F2B+@.E;M=L;KBN"mgtT^ƞslwX%}kLzXŜpśq_WXTot;ks4y{;_n,ss9sDU|Ns@{HN~IzDŒZˡgϨnYBsw4wr7ij0W_(Xa)|{>a[b_XQ\׸jio $ (12  "!-) / 2 43   ->+!3.- , //*$  &&  (*8+-9!0 2+ ' &&$!  ' 6F0(=!, #    )* # "4" '(,$   " ""1  jko, + 7qwp>M0':=G1.<$(;9F:G3F$ 8%?%?4K1G/@-<)8(:(8 632233 3 / -,,*7. !75( , *'&()/, , )0 ,( -. 2 1 01 / - 0 ; 2DDJ!NO'TQ+LL%,8+ $9KYGIYE5I-. ,- 1 0 53//#614- * + 1 5+ * ) * %.(; (;!1,*   )8 6 : 6. +, *04I-'=**)' ' + +?") ( , 1 31 1/( ( ( ' ) , . / / 2 / 1/, ) &&'*('( ( ())(&&')((() . , * ) , 0 / 0 1 3 2 9 ": "9 ,@K9I)@(>';(=1F;O5JGS$X\.woBtjC_Z6g[:vNԦxrѯ]W@i]BkK|Zd`^ch]Ndn5nu9}H|MSwELLNs;n8JƜadEAw=y>nz/hu-mp0FWX\Ǜ`VNл~|} $ *-$);%(7 &) 1 . #60 6 ";, 0;+50- -0*!         .- + & $%&%$ #' 61.$   "#4 "( *   +$%3%  )  !  %  $25? - +@#ZeU&73A#X_O5A->N-8H>P,YcS!9: 8 (D&?(?-<(9#8%76 4 324 3 1 .,+)()))')*(''') +**+,'*), 2 2 1 32 0 3 ; 7BHJ$NO'2A&8*4)4+75F*:M6'=0 . - , 1$9, )) 1#7 5, + + %9-A# 6(=.-* "6%8(;!!6.#1)*##"*&  & 06 4 2 .*)*)0FW?7. ** *( ( ) 3* * ..2 2++( ( ( ' ( * . 0 0 / , , - , + * ( *, ++, ) )))*,)&&'*(( ( ( * + , - / / . - 2 6 6 "9 0B5D6F6G'G%B,B*A.F5J1E;LU],woBtNwiFl^?^էyݴմnDD1r_BgGgնh\`tJ~tDIYWzIUUSVKw?s:z:TTC}s8sr78CIOT_dW]Ynmg] # (+348E !0    120 $1!3!7!:";/ &#,8:@0/$7*<#"3"         *    "+-* ' ( ( %#' $ / 1* + * ) + #   !   "   "   )   * / 5I+5G)$64? ;H.,>.@8I#gp`3F* 94 9 8 5 6 8 #: : 742113 1 /-+*))))(*- )'&&(**** +-,+ * )34 2 430 7 #A$<=G4C#:0@-59=>A%9%<%<1 , / - - /, )&/+=!"7.* . ';*@&<,A!(<3 4/A'*<#/A)#6/%865""%$% [[\hii6:A :5 22 *('((6G/. +,++*( ( ( * * '' %' -' ( ( ' ' ( + *,,+, / , * * ( ' , . 0 .*)*,+'(, )&%%&() ) ' * + / - - + - , , -4 7 &<+?3B:I,F,H'C.F3L7M8L3F=LPT,qpA}mIreAfΠsٯ~oΨynaG-- g^6fݸȣvfuLf`5jk9^ɟe\}MRTSR\XZ=MH@~@>7 531/130.-+(()(()++)('&)))* , +,.,+(23 3 1 2 2 8 ,G: : 7 4 (:1818%40$:2 2. - + *+ + (&&#7'<+ + - 2 6"7%:$9. 02D*1C*:I5*=$"5!55B?3(92$5/% ^^_VY\>DH$.3 3 ,C)@*('/HUCx}u5, ++), ) ( * .- ( '% $ $ % ( ) ( ) ) ' ), , 5, - . , ) ( ) ,0 2 2 . / -(&&'. )&%&'* /) & ) * - - *)* ''(/#9!7 -AGT*GM$5E+E!= 5JAWCX9O6H4A@I"lm 1& (% - 4 97%!**   %!211//(B2      '  0+ )  .* /32* ' & &&%% $#$$50>)OZJ* ( ) ' $2 5   2 $   %        ! ("$0%%2+%  BX:>W3*B!&;FT<6H-?4B#aiZ?O2:K&BQ0WcP.E1L(C,E2J",D6 1 3 $<5 4 1/-.-,++)&'''( 5+)(''(+ +)+ - , ,,+102./ 1 - 1 7 4 5 2 5 4#8#3*9 42,B 0 / . +* ***+ + ,+ . +*+ . 0/ 2!65 5)#=;P1\iSAQ9**#7dlbksg7/ , + , /2, - , * ( ' $$"#% % $ & & % %%) );",* + * ) ( ) ' ' ) + , , +&%%&((()) + 3$9"7' & ' - + '&%$'')2 5 6GGR4#.+>"<&=3F:J?K=K;I=GBJ#@K#WX0od?WV/~Slj[wTqMwHԧv̤t}Vmy?|MVeȞjXΘ`ȏZXGBHFY^@Y{?~88A|8hy/i~0ACG\uW$  !  $).1 %+ , 0+ - 473C-CN8/ /"5"5*;#92F*  04<"!'#,.8)+7;=G+*+   )- /2/1*(&$$' ) & * $5,;$,>%$%$& ( 02  %'-: #  ,    *-9   #%':KKU66C   "   &  ' :=>!$&)503;$ +    4E3=R6-C'5'<:J/@=I13E'&?)AQ_FJ[=0I+E(>"87I%*A3 .+4 2 2 0.--,+*('&&&+ -'***('(*)).- 2/ "63, (=2 .--- / 3 / . 1 2 1 !60 !6,>")<$91 / , *0,++, . )3"2-+*)(+ *- - + - !44*:$ 37F3&:1%584#WE9\G=2(-(   )#,B#4 61 '* 1B'IUCP5 7/ . , + , 31/, ( & & % %$$$ " " $ % $$$' ,# ' ' ( ( ' ' *&''% & )(' &' ('(+))- 31' & ( ) ' %$$$&%* 5 $9): 5'<,=0A0>/;8C4@AF TV-7A\Z2`\5naU4/G%6%90C' 8/G,E*D)B8 4 6 1 -. - 01 2 1 --,,+*(''&'1((***(')*, , -* / 5"515G-}z6- ,+- "72 & + , . 0 1 - / 4+>!50- , *+ ,, *), &3#60 - ,*)***)'-0,+-2/ . 4 - $3^ME# % (<$4%) ('(* '- 1 1 / - , / 0.2+ ) ) &&%$$$ # $ #$ % ### #%& ( ( ( & & % &&&( &&& (') + *(), , ) ) ) ' &%%( &$& %&'* !5 ';3*<%9%8-;#0 /'4"09AKK'TW/7G1 3 0-,,02 02 3 ., ,,+*)((((-%()**)'))+ -'+ 01, 3DQ=?P7/ - + + - - ) $ )% + . / , +) 20 0+ , ) )++*(+ 26!8$:&;1,)))() ' % & ' -+/"1.31?#XJE !& (28)60AP>2%(+ * * '(02 1 / * * * + ) -( ' ( &&$$ % & % ' #% $ %" & #$% ( ( ' ' & & &&&$9-''('( ( )(*- .+ $$$#$' ) %#%'')- !6 )= ! 4 %:$7*90;4@%3"2+.9GN$[`.CR!@R"ZZ/vh?^f1v{?vnAtRh_" #2   / 0 "3 1"0 4, * %8+((:&/ (+4)&$   #,+09"   &:!813 42--* + ) $*( -) -/% + $%) /!3( !$*0 0-/ 3';"#  "   & )= 3+ "3! #  #!   *  *1G'*G55)<bkVT\AaiX_jX74 5(A+C'>!: 6 1 1 --,+,0 / 0 1 -,,***)('(('%* ())+ (+ )'9* * /#7*((-2C).@$- + + * % & % ' & + 1 2 0 +'* !6/ /-))+ *)()13. 0 . 20 *(((( ( ' ' +// 04#=%?0??22*-5$&1   "&00FPD-( (:AP80, - 2440 3+ )* *) * ' ( + ( ( % & )' ( & % $ % % %' % %( ( ' ' & & ) &'(, '* + * & ) ))(. / 0,###$$( &##$$())7 0A/ 6 4 !7(;,;)81@,>-@2A5BGU#Zf.D]!@O)DR"LW$Ph(]o0ql?uQjd=xq>{CN~:XY`f_pŧt˦oVbj^^]PGC^s-Wq)Gj!Ih.Pl6\r9ooD!/.  % *+ 0 2 61 ( 1..!7-' .$*$&$$.  !$/W[_9>F" !882 1 5 5. , + . + " (* #' !2-'8( /-,(7!CO?dk`' (. '=3- 0 -04 <    1 5-% ( 6( ,- +',  ! BGN)" ``d}}bbd$   #">M6@S.7L)hsdhsd:N0,AR\HeoTOY@bl[235)04*1-$-   HIPuuv$(1?BJ69D%&8 ( ( &7/?%' ( ): '9. 8J..C&* * , + ) ) ) ( * + )'' ) ' % ( & % & & & ' .,' ' ( ' % % % ' * + (+ '') * *( + +(/ + /' $$' .%* ' $"$#+1 ,1 "9$;$=%;'<+?,>';)>,?0A3C6CGR#P['R])BS IU#OX&sw3@;A#9G*EQ8+?'=!9#:1 2 2 4 1 . 0 1 ,+*/)) * )4#<. /+ * + * ++(&&') ('%''&&/*>!=M3!8- , ( ' & ( $0(& " & ) * '  +11 . + *- *)*(. ) *+ )) ( + ))(, 0"7- *)('2&:)* , 5)<&6(7'2'72, ?0/I99I87H55E88       , / ".==EGGN&' & $* ( ) !2#5(;!/.@&& +!6, ( ( (+ ) + - *)) ( % ' & % & " $%( & % & & % % $ $ %%%%'&&* ( ( ) +- * 2 *) &$##' ') '$#$(3 6 + ->#74 8 6 #:%<&;*@*@/C(;.=4B>IALIQ#IQ#CLGO"lm7\^0VT/shFqd:sHP~JQNqxIfp9OȢnөuШtϭy˩s^J`j\ZWvu:AX2T>c%jy?lc@ "        . ) * . - / 20%4%8%6"))008'7D().')- *, #/%'4(HIR*1:"",K 0Y9J1-A$-@&)> 6G.)<"4"8 5#6$7/36330A(1'9,$' -4- 4 6 / 4!93  ( )@(  + $  ! $ ()'(5 3 77 , -( 3(&      "!   (+8&   %;amYcq\htd"8(5%1"530 #;6 553 0 / 0 / -.,+** )* ()4 9- - ' ) ) * ,, )( %''&&$')' $ $) ./ * + + ( ' * )! "  " $ + '$ ) + - - . ./'(), , )* + * * * * ()(+ &90,-+)(, - ).0 4):%5"/,10;091B 3)&2"':)-F89! %    %SSYSS[',% & 1 1+<$8G1(;8I1) ' & ,$7 4' ' '( , , , + )) ( & %' & $ " "$$#$ & & % % $ % &&$' &'&' & '',*)+ )'%$##' ')&$#%,!7 #80 Q)2C.:%9).'5>FHQ!EO :G>N]j/MY&TP,ZT.d_3uD{Gws>lq@kvB_u4\q/?WhW[ɦoeSSUIN|v?FY"1P6VYo3shF   $/ + + + + * 0-+2.*"1 9J.Ne>+A   ,-9PQY01=  #,)L1@0/>-0@,.@((< 1C'!8. ,#81- ('* -4C-0 5'&* 2-D#, 3 2 03 9'  ! *    $()7   "0"    # &<=H((6$%4 !&3#'4 *$'   -,!     !%$!8P'FZ7er\SbN-:6<'2/@$55 7 6 $91 1 0 / / 1 -,+*)((('() . *('( ( **)'&& &%'%&'''% $ %'* ) ) ) ( * * * & ( ! ( ) , $ ( ( + +, , + , ((* &&&+ + * ) * ) (, +/2. -,++)/, - 0"7-@%$;)/-8,3',+3%2$0+#9,/OA@101   8=C-hhl88C%5#,;*9F61/&8#2B,IVD0?%40+$$),>&1('( ) + , 0 - ( ) ' & % ' % # " ! !#$$ & & & & % % %$#% ) '&&')(+)((('%$$$' &'%$##(%6)80-7/'?$<#:#:':->(7!     )IQ"FO!CL FX"=WBQ e\6h^5^\0wDz~C_b2V_/Zm.bu.Ke!m}0JbYZlhU|@}<|?{w=>\0R2SH\)pmI   #  !   2$7+ * ( , ' ( 1/ ! '1G&7Q'+<     89C88D%&4$%3    !.+%'.-01 / . %:1 +*)%'$7/, $&&, 0+ . , -39$ "    ,)     !1!  # %&323?  / &*6(* !0 ! $%# ! $0I0I/G|u>O8-:'3*$7W`p/l{/|6Lks~2£kÞgdi`~Jwp;dk1tv5"9'F,F# '  099F(',5,*)(:$*<($5& # )4G.enb9K6-,, 0 . + *6!0. 1 0 / - ) ( ' $$ & #  % % ' )+;%) & % % $ # %%$& ( ) ) ( '( ()(&((&('%'#!%%$$#). %7  /3 *>4H/B,</?'9        -9?G CMMd%7[CZO\(Z]2cd7Uh+[j-`o/dp2ix1ky/}|6Wf%vv5S]™gn^zE]f-al0Xd*;V2V?^#wuL&'.%  #$- ("  " #  '-- + ) 23-11.@(=T0(>"  -    % #PSY    ' & $ * - / ) 1 5!6 6/ - '((/. - / , * ', 2 24 8)A,?* (2     %  &*  #45%5&   %''. " ! "#2'%* +OPYtty$/.#+2+     P\7EZ&@S'EU4|w,K'C+GLT#8E,?#95 3 0 - ) * ( * & &  ' ) ' -;I3( & % $ # $ $$ $% ( & ((''',*) ) ('))(+'$%$#% ' %. "6*:!5&:2E3G7H8F0A"7      :JBQ?PPi'Jh#7S6IQZ*aa8Th*Wh'ho1nk5rr4yz7t}3il/yp8O\c_Tyq10 0 (, &<0D'&;3G(4K+*<% $ $5.<-JMR+,9 %*.A(.@(  "*     %*, + /,#6)(   !, 35@)*7$#%2       "    ' "  !    JO.K\*5MIY#itTovg:@ '= 3+     ".  *-9'(5.,)&#3 2%6!.% % ' ' ' & ) !:/M+G;RKU!DQ0@&9"84 4 2 + + * ) ) ( % & ) ( ( ' & & & % $ $ #$#$ ' &'''&&,+* )'()((%&'(%$%#'4 3 4 &8JV;KZ#7L0E>L.@4 !      &RZ*DT B[Ke$Zk/{}ES_+X^-qJlo7il2rv6tQ[(:R3M )+   **9!?L;)># 51,( 1232-*#       $    (/ / 1 *& + "7MXI=N4 :2 ,,.2 4 862 1 *) 5-@&,?$"7,?'  $=3D%&9 3 "&5"9F4(+:$.=(  !*      /#/3-* *( * & -) )% .! /  "%#,&  )"+    ""0$ ! "       8D$74 6"2%("     #1" (( ' (,!2,& &.( ( ) ) ) '@3N+GESJVEQ/>(:"61 5 2 , +( ( ( ( % ' & & ' & & ' ' & % $ $##% ( &'&&%&+)&&&* , '''&%%&+ $+/ 5 ) 3%49F(LZ&=M%<2B/>*<%    PV+IV$GV"Nd%\r-kt9yLrHzg@uMxq>IA|=|o<;[m'Zf(nk5VYTTzDii1kk5GX"DX&F_,6C%% " 0-40 / 2/+@!3 7 64, /  !$,!     , - (%%' 5E0=M552 0 / 3 + + + 0- , ) 0"7-@%/C( 1!  (8':.5D. ,#DN?&80$6%"7H3&8#    " .-(( - . + ' ,*" '  )$'1 '(, "#2 '(5*)    $ %!& $ "&3#  +>3N;PO[*z]eN6:!+5-1 -@ "71. 4&:3+ )()+))((. 2%:/ 3- + )(((0"7+ *) * , )''&&)*)* & & 4JVH(:&) %%&'&&&%- , + '" - , , 1,   ). 0+ , + * ) ' ' ' .,, . , + 3 4 4 5 1 , 2"2#2"/ 1-+ ' + 0 / ()* (   00 4 4 9 9 $= :2 + 2 72."2 *# ' * '( &)*)*-1* ) ' ( * *E4O,H=ODRGR9E5B(9 5 6 5 , ( * ' ) + #   # & ' ' ' ' ' & % $#% $ % &&&&%&*'&%%), (&&%&$#%%) / !6)%4&44A$'>!     , / ))%& * 70 4 0 / * &'&( ) + , 1-A%:L2+<)  '"7&9%77D-'<)7 "3?I:+<#$    ( ).(&#  +- ' , ,-,&       &  !  . %%3>>I $ "  &(& ,71HDU"os"<2 / 1 2 2 4(@7F,!%ACL36@8!82562 0$<1C'%2-#     *13>(+ )    (35@ZZ_ACI-&1.O^I%9**&7!(84C*syqbj_2A+"3./ 4: : 0D=K8E6A.<,<&72@)711 , , - );0C(%'1+) & ' ' % % $#$ //,="&&&&'')( &%&''( ) &%'$##,( ':'!;E'AH'CN!?K6H^f+OW$tf:PS|Qrl;Xe.8T!SfD`hV " -.>#%7// 343 .* * * ( % % * / 0':8H3%5&   :) ( ((00/   "     123,) 1!1  (    " +* - 3 3 4 .    #   =?G-((544?PPWjjn # !0"&  2'>$   #  " & -' !+&(6$&5&"RSTUP;GK#%1C.7J2*>%=534';09--9.!',6*TXT!   #05?7>@    /=13& ) 2+>#8C):&7"5 4 5 1?$2/ , . 0 0 0 /  *( * &&&'&%$$$& ):);%$%) .(' & & %%%#),"%''' $,2,>+"2LV;?I%CL!>E!9L7I1A+;-> .+:+1#%.gl;dn5Pa&Oa&`o0qs>wQrs=coul>~kAsFzQxPol8{q=]`,ui8rGXxPmEEP"CR$9Q$AO1     - &7$( 5/C'%:,.@)*= 4 62+& =0 6%>(C'A!;6&@"=$=66 + ' ( ) . 4 0 * / 0 !7.D%(?!!%  2 + ,#4'5B05D0, " (+6AEK#  !   /  '&&%$) 3F+34!70 ,*  "!!  KKT+# !!0 /,,:,"!    +;/+$ (+7!#1   !)HJR49@/2&16##,MZFEO;QVECK3di_>P/.?2.. - +*)))* *)****))()5-A#"8&''')+, , +*++++, - ++ ) ) ) ( % & +(#5 .A'* * ) ) ' ) * ) ( ( ' %  !#$&%#$$$$ &+)*)( ()* .&#9. , 52,+,,"90B)2/"7)'')** . , 1 . 5 0 - 5 &:(< "6.3(>,E'@8!7#.23',-10^fGQX<)1%!     %.   )'1AS96H/8H/!4 3-?(5E22C.5,//)8;C9B5@-:%7)9+:#2/ 0 0 / 54 1 + +('('&')%$$$,1A%+ &%$&' ) '& % $%&## ""'') %%$ + (7%6%9;H)5@AS!>L4H0E+@6DRW*)3>MY`-hi7]b5w{@ox;lu:uvA]i/Ic!cr3uK]~V{RvrDuJsL]`tPpf773 478- ( & + 7 82, 2$9$88J4&,0:# , ) #!0!6/,<+$/%+   "/"&2)09$(3   &$70.+  ) &&) .+4H-)?3';+?!- ,1 42+ '' ==H*'EFMYY`-$( )0*.23 -92*"  !-*% ! "%"$$/)!FU<9B-EL6,4\cV.@10 -,,+*)('* *())**)))(. 5J,GVA(*&&+-+*(), , ++- , , ( ( ( ( ' %%% % 0@,':* + ( ( ( ) * ) ) & $ % %$ ' $& $ %% ( * ) & % ' (())' /+))+,+,-$9.A/- - ) ((*)+ - * 5- . . - 6 (= 51 415G1=S0,E53!+ .2 1 30 2 )9.?)<);;E!*9"0B&-C 8L#@S@Q DT4*$  ("! 5BR:;M3(;#"6. 3 3+>$0 .010 +9/=*;'9'8+:#61 1 / 2 1 4 4 !4 31 -)()'&%%' %#$( ' &%%&((&& %& "3( ') ! '+ &#$$,19H%+<(:6DAR :I0C3E';/?GN"LU%JR$_a1ac2op@rv=qweg7Re(nq=Ucdt8[q1~zJW[zSKR%VW/l^6ic5lg4tL~T]xNUW*3G1;"       ") .>I9"50(< .B)8I2$80 2#546 ?!?()!8$  &3$6 , (%;0B&%$+ 06475, 0 3 40)-4 "73F./?0,     / + ' . 2 )NYM+0*(' LOT    # (# %  &2&*<%"5);%$8!*% # !  %%%' 3D0BP@NZMFVAgqeO^I9M2*@!0 +6$<&<1 / ; ;'  ##2.+?@HTU\66A%%4$!!1)--:   "&',    !  '(5" + !EPA8G-%1-7@H77F,/? %8. - ,,,*+*-* *)))), ***(( @Q9HWC%9-?&- (--+**+. .- - , * ( ( ('( & $ # #$% . , * ( ( ' & ) ) ) ' ( *  ! ! "#!  ! #  $* ) & % & ( ( ()(! ( +)('*-,/3 1D 6G)5/ / + ())*. * + 1 * , , / 2 0 - /13E-8L07M)(?-,".54 1 2 41 %6&9%:,=';*A8S1K0J/H4K@_W|BY+   \]b!#0#'!52!61B)'9023692 -,!4/Bfp][gP;M*3F!"83 1 / / 2 44 4#5!40 *'(('( *; '9-$$' ' ''( &* + ( ' ( + 8G&( &&#%))$"#*&& LX?1>%7?K!AP"5F3D0A(<';4DMU&MT&ea5ki9el7bf5yoEvKnJkh:Qf'gd;uJ`o4Km$Vk,Uop>jk+0!905-C$M`D8P,-E%?0  %*+9--9   //<    -0  .     *" "  )  .)-0!LR:fo_1A":?%EJ8QYL/@#0? *=2 --,-- 1/ - , +**)(+ - , , ) ) 0/5G.6D0_d^#7/ ,*+ , , - - + + , ) ((((( &$ # # ) ++ ) ) & ' ( ( ( ( ' *) ! # % & ' % !" " ) ' & ' & ( (((((  )+''(,/ 2 2 "7.A! 6* , / / , ,*. / . - 2 * - + - 0 0 0 ) * +@ '?5 4 , 1 36 7!7 84#6*;(:);'<$9,BhGf!2% ) %.0<>@I/3= 0")<%3 4 6 )<1C*?6I&%92 / 0 . 3%9#8"7%7#40 +*('(* 0* .?#%$& ') & ' ) / - , . ) , , ) + $%&'+&%(&%) OYC0=X`=EP$8I3E*=!6$:/AHO$[\/Z\,[b/Zg1kqI{VsRrRtKy{Bip8}[sQvi>xtMpgpJng7gg1}MrNe`3_c68D)"  #1%  !-/6G+41D)7H142 2 2. . 9!:       -    ! % 2330D+8H35E4%# !"/.& ,  * , 2@+%.'$ $# "   , . /'<"7   #-(7<=   %:#; "!&"7+ $ # "-&9 '& & !1$  & # /=L6?L89E1=J5- - ) (* (''''(( ( ''( ) &$ #$# ) ' % % # % ' ) ) ' ' ' $ " # # $ " # " ! # " # ,+,% & ) )('''' (++,-3 0 -- 1 1. + . . 1 2 3 -- - 1 6 1 *)- / 2 5 . (, !7$= 9#: 70 1 65 7 7 7%9%< 8 9 &>&;%='@.J+E0J.GAV3N+H-L2O?G+$$$%1 .,,:,6J/(<3/$3UbKO^H)@ 964 "8 62 3"65H#"86 6 6 4 6)=':,<&<$9#71 **+*)'''* , , , * '( - !3 "5)90 , - 0 / - (&*,*+(&.3.>]Z1fb6wE{xHjuRmMvU`gc}duO[a/wtQ|kA{eDmIqKqL~kF\]-~gAo_8o^8uc:m\6f_5^b=',$"   $! "'#/ , #23$7$8#731 1 1 !40 96      ) "(&   :N*:M/9L/*6*4E2     +':)<"  ( ) *& '<&=N:9E>,08#$2 &/- $! $!!/" '0,(*8!$3 2G)'>  #,-!7$9/A'7F00>'+ $ ! ('( .0<'4>+1>&"3>K6&9) -"6(<#"64":-C&>P87J.,C# <'A -F ,D :&  !   (  ! ! %,!" " +-:$&4*.;%&5$&599FH?+CF!$7&:(9-;.8#4"9.?(;(<3 6.,+- . -*++*))'&*)'&)+ + + * * - . /* )* '&%%%&' ( ( ( ) '% # # #$% & & % " % ( ) ) ( & # #### # $ $ #   # +,.( * ) )). 0 ) - -1 . - - 0 -+ ++ +++** + / 2 3 -  + 6 1 +*+ . 6 4 - +8"<">$>":$>#; 8!962 2 1 5 95 #9$<';'?*@6K+G&C.G9P-H/K3N+F7J=C* "35, * - )?/F$;&<!6$7*=*=';%7$65I%!655767 9":.>)<!8 8 7 5 1 -+)(((, , + + ) )(. + - &6%5#3!2"2- )/ +,,,- , - 7 5 -=->  *9G6H)@'=":";3J&=%;QU(vm@}wJvHwNpd>qeBwiFvjIXsIii9oj=H]!ch7ef2eZ6k_8gDmG{jAec2S[&f^2p]9[T,IM"b_7Z\D - 1  !.&  !5!3&8!2. / 0 2 #5"4$7'<4   ++(" 0C% ,! *41   "1,<# +03(    $  % %(*6')5& " $3#'5%  &:$:-?#9D2.;++6#@G:TYPJPE-6$,5$*3!/9$*7DL$?$@; #;(@&?&> 73 3 2 1 %?99'<"8#9)@5E9G*D)A5J5N-GIT5:J'-B$83<>M-%84!5 547 :!:#9"89 "9 #96 6 3 - , - ((* ) , * ''&%%$- )6&4%62 *- 0 3 3 0 0 3 1 1 ; #;.?2E!  3G9G.@#:!9$<9N,A%;AMfe4fp:zE|Gzw?he9i`$341526%>%A#>)66BiinCCN&&5 # $  0 %   $!"!   !&uT[Q1`V2^T0=A-;3<3@% 4'80 $:5 3 1 ,)*--**++*** ('(&&'** ( ' & ( . . /- * *'%%%%&'''( * * '% # ##& & % %  # & & ' % & % % # "  ! # % & $ # # & ( ( ,2/*+* + . )**)&%(*,-+( +*())*,1 1 +*  3 5 / . 3 3 = > !> < 6 !; < 7 9 &=#:$;7 3 6%84 !=3I%/B,>#9#7(=3B3D&A(A8N8P1I7O6N4LLW"U[&]_,GK/  &  ,!7FU?P]K2!54 !59H' $>*?$9  2@>I3A$:$;(@9M0C.AFP"FR"Nb*_g1qp;~yDei5ca5ytAth>mK`Y6XV0zjDqk=h`7hc6OZ%MW$Vc*fn9rKjc7DO 9IAE@K#             0&8  -(     0*-922=%      #   $ * * + ) ' . "8+ 0+<".=$)8)6 >E7LRDFO?1/ /0.... / , // 5 "=!>87 6 !!!/||~RRY'! 02  ) (   + "  _UAZuIh_7CG"DJ+7A IU?!8.>#0 /D5 6/ .****(*+++*)()&%%&*) (''(. 1203/&%%%%&''(+ ('* ' ##$% % % % $ % ' & & % % $ ### " # $ & % # $ $''' ( 0/)%&,,)**)'(+ +++* )*)()*+,/++0 * 4 4 2 3 7 9 $A $?$@ 7 0 1 : 5 9 "< !;";8 4 55E!,? 8 ":$<5C(;#9'<4C,A&=/D:N4L7P3L1J9PESKU"ef/ac.NT%&1'  %     "2LZHdob0E&3 4 &87G!JV32>)=!9&?(A"7"66#8!7!8$:%;!8&8"8 8 5 "5%71 , * + )*, / . ) , ( $'&'* '5'5!21 / / 2 4 4. 31 . 1: %@#;"5  9G2D+>*</@;P9I/A2CBNBQI]#`m0mo9ag2W_-SY,gn5RYpl;R[)lk:yLpE]d._d.]^.[e/ae2`]1XW,8K,B.<5B!    +  &"2   %'  -"5+?!5/ &69H?K!.A    &      %- 1   -!"  %9;B+  '    #/.?*-?*2C.;J6,>($9+ . - * &6@I9CK=#5,02%7$64, '+ * )1 3 6 97 4 6  /'$* &9  "    & $00 fa~lF\V/5ARY?R]G'=.@6 !;6 3/ .+*++*+ ****, - , ) &%&''&&&+ (- /21( &&$$%&&(* ( &%'&# #$% % $ $ $ % % %  # $ $$## # # $ $ $ () ( &%&&( ) ( ( * *')* *(') 30* .-* )'(()*-/+/ 1 6 #;5 ";!9 8 &C)G)H+J < . 2 = ; != "= : 9 !< 7 &=:M*3I$$<8G%=2B/?)@/DAM,A2E:JDU7Q8S:U:SF]Tg&We(`h-NW#U['cd7MV*28+17(#.-7'"*(bdijkpKKU&'6=@I!-"- 0GV@8N.4J&6 4 $7CO(M\:7H%6G(?7 2 0 32. +**+*)**+ . , ) ( ''''&&%%, %%$#$''%$$$&') (&% $ # # # #$% % $ $ $ $ $ " " # $$$ $ # " $#" # # % %%%%%( ( * * 1, * + * ( ' ' ( ) &-,) (())*+/100 4 !; $:4 655 = $D+K,M"B 5 6 ; > !> = : "?%@: ; 9: !< (?.C;I7G1G1G?O3GAQAQ>T4O3Q;X>WB[Sh$br-Qc$4LAVN^$M_"Xh)`m,Ob#Od2[a699-67B9:FABM $2) EHL#,& IZD?R4)B5 !7'96J/G*B/F3I5K#(@3 1 2 .3 *@!9!9#=$>: "> #= -@,@"; 7 #9#81 . 2 *. 0 '* * ) $/ :K/+>BR.*<%9 7%>&A"? = : $> ; 7 6 9 6 5 5  ,>/=-=.>-?.=5A1?0?7JYc,Wc)_j,O^#FVBW7OFV"I["BSP[&AWMZ&jc9`^3ES!6K@J4C+=DQ4@K!CM!#5/ - -? $7%80 )*+))++ , . , ( ''' * '&%%%1%$#"#&&$#$%(* ''&%$ # # ##% % % & % % # " " !" # % % $ $ $ # % $###$%%%%%( , .)+ ( + , + ) ( ( &&%&%%)()+- /,+-00 ; &?%?!= 8 4 "@&D*F$@#>!= ; ";7 4 6 6 "=&A!< 7 !:#=%<!; 2C@K4D&B+BWBYQf"Xi&Xl&]h)^n*I]!Ve'^k,`k,`e-HW!D\+GZ(EL% -!"1+,: '%UaP[hU?R43 #7*;-D*@-@(=(>*@72 . 0 1 6 /D%<#;%=":'>$<.A5E6E*>#:'<!72 1 , * . 3 . 0 (90 ++ 6G,%8,>(:"5#7#;#>%B; 8 8 : : ">%=8 5 !7!4  ,=7E7B*;)=+=/?.=.>3H\b.Ub(?O9I:M6O3M8QEW CT\`.X^-AUY^,ja8NW(4I:F'=":-C>T$4H9H(   ( /""0$! # &  #4!- %) &         "/ . #   "-$" -*   !%7(  1   ) ) -$:1020- 785 0221-<#"1#.$ # '++. $9%965*:%' ) (:$,@&)? /"45":3":#8 64#-* , -!+'  # !!  [TBe\P.;;>>"4@GM$?I2@&5 -);2 ';%9-2 +**+, , . * (''' * (&&%%.$$#"$&%$##&) ('&&%$#$#$% $ & % # # " " !" #' ' % $ $ $ $ $$#"%%%%##, , * (,- !5#6) ) ( '&&'&&'*++- - .*(,0 4 %@(B$?: 9 4#;";*@%<#<#=#<$92 0 (7):";";!:7 7 9 #:#:(=2B5E/F5JAP(<$:$= : ; 7 7 5 5 9 #=$;!8"8'<'4  "2,>3@':)<*</@1@AE@LIU#R\'9J8K9K),7 + ,0E$!. #  ^XI¼ol];@@>D)7@9D;B&44:/6"."7';!41-. **, * ),* ((''- )''%$*$#"#%&&%$$') ''&%$$###$& & & $ # # # # " ! " # % %$$ $ $#$$##%&%$#'* , , , &9#7%7&8+ ) ( &&&(('), - . - / /,''- !; ,D*C'B%?"9"9":"7%>#=+=4A#:/=2=7@<@2=$756 6"8$:+=-?#8.?3F*C3H:K8H=L=O;Q4N/J6P6MNf!Nd JdOd"Sg$Sg%Wc)L\#PZ&KV%J]4Rb8RY&CP#* +'(6 *)9)@$< 6(<#<7 6 5 $92 //-0 2 "<8 98 #:%<'>,@1B)=#: "9$:"9 60 2 / . 0 2 !4!34 ,=9B'82 "5+?-C-C$<#<!< ; 5 6 4 8 #>$=$;"9"8';"/  *<*=*<&=;I.?*</??EHO%GL$FP"?N:J6H?Q:P=TS`*imM|vWtFrJ|iDm_9xdCVR.3B)>.C'@6J5F&0  ?L8( '-#  ! . ".  *$-%,*)'+'0           "    '&      0C)8   67C6C!RR,@D 09/6'2* ) *< '<$81/ + +* ('* ) (((') ('&%%' $#"#&&'&&') (''&%$$$##$& & & $ # # ## # ! # $ $$#$ $ % %$#"#%&%$$&( * ) ) - 1%8/- + * &''(((++ 0 0 2 "83 /1 / 6 "A(E&C"A#=":&A%=&>#?!< %;-B,A,<>A8</8*7%6%8(:';$;+@+>6C1?/@0G0F2F4FHS#4E3J7P1J+F>X?VQj#E_KdYk'Qb$Qe$dr.Zh*S`(LW%IZ,U^-HU ;M+9  %&4  $9J#+A": 6 +B";5 4 7)>1 /.0-4 :6 86 7 8 !; '</A6 7 8 85':#81 11 1 1 2(9&<,?6B1>#7#:&?'?*C'@#<!< ; 6 8 6 4 '?&<$:#:&<(<3D! !/$6%:(B>O8F&8-=6FGO#KP&LO'GR#AN8L7M=TBX?WO](fh9rHoKqb"&=2%7%4-:=I2$6'<- ),: , #&'  ! RUX&,5& 4/E"! &* A=2ud@ZN/B?!CF#CL&BG";>-2-&'$8)C,B6+- -/ +)'''* , &&&%$##$$%%&(&&&%%((('&%%$$$#%' ' & $ # ###"$ # # #"" # $ % % $ $ #$$#& &$%&&'( * !5;J3(:.) , + ((((*,, - "3 4%;%=: 9 $=";)G.I%D#@!<$C'E5D)A,D!@ 0D1H.G2A;A.9/91>+<-?1C.=2B=M 8 3 4 6 2 6 "85 ; : 7 7 7&=&?*C4F8F,B(B(C#<'@*E&@'A"< : 6 7 3 6 !86 !86H&);,>5?0  6 #@ ,F#;!5&98K?QET >L>M//;     ) &+4      40.0.01- +/-0$>(= 53E+(:251)<#;K82C-2+ 1 "35A*)>8 6 ' % % +,9)*7*  ?FKHPT!//'E1     E@2~kIOG(1==E CD$>B 58#-% ) #8"=6 6* + ,/ +('%') + &$$%$$$%%%%&'&%$$&((''&%$$$$#%& ' % $ # #### & ## " """ # % % & $ #$$$+-* '&'(') -+ 0)'&((((),, , - 1 3$;8 !8 %;'>&?,L-I%?$A$@'E1G6D7A>F/C1HGS7I5D>H=I=H4D8E2A5B3A7EBL>L7I=M9L9N9LCSM[$^d-H[ F]8U?Z=W:S>ZC_FaF`C]Ja!Uj%gv0kw4_l/]h.HZ FW 2L5L1A #0B(> 9#:*?&= 75 "9!62 2 0 //0 0 03 1 /0/7 #93 98 2 4 #8 79 #;!9 98 7 !8*A.F-E+D*H)F&>(@&?'A,D!; : 8 #=5 3 3 0 1 #8'9#4/B#  %'B2K+C":"64L>!)-% (-5 2 !50 - / . )&&%&'(&%$%%%%$$$$%''&%$&'(''&$$####% & & $ # "### # $## # #"" # % & ) % $$$%$ ,3A)* '&%&( + + 0'%&'''(*. + , - - 35 3 7 $:(>'@-I*C%=%@)A,H@L,C.A>IUU)AKCP:JAK8F:K@P8I3C1@2A7DU%>#;#;&>!86%; 6/ 0 / 1 6 %:2 / / 0 ./0 2 7 2 562 3 6!87 #;$;!9: 7 5 #<'@(A'E,K$A$;$: 7 $>)B"< : #=&>$95 4 1 0 5->(7%72A*  9 1G:R,F(@?Y!CXDW BT>O;MATDW!G["Re)G_"C[ BXb`5JR&?M8K(@!:-B!9+D":#94#<:K&3>#   "  %'- , 0 - ( + 01/ 200A% 4)<+; 4"5#8)=&;':(:&8%5-1*!)#)     %#  ' $%2# # (   #-)+* !6(<"- 2-,44 1 4 1 . - - *)+ /8 5 0 + &63B'$7+ "!  #(1$JQT   %  "" )00<$%2&$  " ;@EciiDLN./'sTRK.KH'AC"MI*LG*;8& ", 2 !6 40,- 0 *'&&&'')+ %$$$$$#$%(''&%$&''''&$$$##%& $ $ # # "##$ $#$ $ # "" " # % % $ $ $&&%% '9 /?'( &%&&'* (*&$''()((,+,++ . 6 24 %<%<%=%=&?)B'A&>2H?K,D&?%>.CARAR?O>L 70 6 7/ /. 2 (:/>(: 53 6 6 0 / / 2 2 0 2 2 3 4 6!9#;7 7 "< < 8 : != "> 'C2M'C&> 8 5 #<"=!< #? (C$?"96 3 2 4 %<)=&9&:);(:   8 >M7R+@5C)BZ*5M7M=Q9K5I5I9SCZ Pb'dm6Uc+cf3T],QZ-H\2:K(='?: 9 (B2C)847)= !' &#    ( 0 1 5#85144 3"4"4'7%9(>"9"7$8'7*4       "$.3   1$5! "&##$' * 65"7!7/0%<70 2 5141- *& * ;8 4 / 55G*)8 +.%HMQ)2:!   "#3   -  #-.: !     `agoss1;=), }tbGC'BC#JG)NI*:9"(!!3!63/ - ,, / , ('&&'&** '%$$%$$%$&&&&%#&''''( &%$$%% % $ # # # # $ $% $ $% $ # ## " $ $ $ $ $ %&%$$*&('&&%( ((*)'''))((+*,++ 02 1 5 ":!7%:&:$=)@,D0G:K>H9F0B-?*>-C4G5E:I3D.?9G6C2>6B9B;J>J+A7H2F1G=T!=QKZ"EVJ\"EX`h,ns1cm,Oc"G\K["^m)J]!FZM]"\h)`k,N_#LZ$V`(rl9cj2qvgvVBV*-@ "#  ,<.=':$;,A(?0 5 "93/. 1 4 ):'9'96: : 2 / / 2 2 0 0 - . 0 5$:9 6 7 : 9 7 !; "= "> %C&E#A!9 ; 8 !< ; : ; 'C#<5 3 3 3 3 "8!5 "8(;+<$5  % 5EER"2F49.8C..H)D*E.C1G/F4O:XMc'Yi.BU@S[c2R]07LCV3>Q.7M!9 ":.?9E0>"54 $:# "!&$%3 ! 1WW_RS[eek99F      -2&  ( 4$6%5%5!2.?#60A)9,:2@!$1"%1#!'.+!)"  9#*    "+(# 8,$+4 4 . 0 . /5B,+ 1  -    , >  () !     #!"0,"   !!189EDEOBFL %+0meNbZ@WS8^[Dc`L<=!/3% -2 !6// , , , / , *('''( ('%$'&'( &'('('%$''&&'''&%%$%%%$ # #% %% % $ $'&'' $#$$#$$& %%%$%&(( &&''((*- )))**))- , , * *,.0 9 #;":,B&>'B-D2H4O@N;G8F:F4B.?7I8H>I3E0A=I;I>G;E;E4AN*  78DnnsNNX$(35X^^&04"' &*=$;9#=#;4 6<#:30 . 1 5 "5#8&:!; 9 6 1 0 2 3 7 6 4 1 / 3 6 7 3 6 9 9 ; ; !; !< #A #@#=!: : 8 !; 9 7 ";&>#;5 2 4 5 3 4 4 !7)<); 2$7   "40@?J3E!9978?.0G,F;N5G'<)<:MIZ%>Q0A8DBG!IR0;Q*;T,,D%: 8 '=:E(@-D(B$>&>#4!     &++9/99D44A>>J   %5-- "48G+;J/'7%4)5/:"*9$5'6$4#5  !"       #!  &'$& " !$6): ,,&&')2352#90C*.'=,C#%<$9!8 8$5 (7=>?EH   - 4 / -( #5$7       %)"%2,0;WO:oiYB@)8; ?="(0) < %B*:!2, + . 2 "4, ) ( ( ( ) ( ' ' & ' ' ( + ) + ()*)&&''&&&''&&&&&%%%$$& % & $ $%(') ' %%%$$$$& %&' * '')(' ' .):* (*, **)***+. - . , , -4 1/"< &=+A(>(C.A3K8U=K7F/D:F9E:F;J8H9F3D9G:F@J?HLQ%AI.?8L3G,B>M>MP-CR9 0  /XX`ST]"(0ltlnvoV_Z   1=%<9 6 3 7 7; %;"75 8 = 8 1 6 6 : 6 #8 43 3 4 5 #9!7 #81 1 9 8 5 5 9 8 ; 9 8 6 !> != $< 6 6 6 ; 7 5 / ; 5 5 5 7 !85 4 #7 4#5#9"7$:  $ *:=GHS$@O(QW58?/2J@QDV 4GAO S\+M`%HV!6A2=7CVcD.I!74!7&=0B-?"@*F&C@ A " #        .$%*,# ++& $ !$% - !  +%        ( "        ")#!$'"1$5 -'6)"  - 4212!562*:'+;%+:&)7!*6"$ % 0 !4-5?+(9!*  !   ,.9$'3) %&! %)>$  "     -C@2cW<]TAA?(9; DA%66) / 8 ->0- , 0 !40 1, ( ) ( ( ) ) ( ' ' ' ) ( ' '()))'''&&&'''&&&&%%%%$%& ' %$$%'& ( ( ' %%$$$$& * & & ) ( ( ((''* '9$6+ *- +****),/ . , - , .234 8 #<'=&:%=1C0H2O0E2B*A7D2B8GGT?J9E:G?HCK7CGL EJ>E0C4I+>+@2C3D5H4IBAB&-B73 6 7 7 9 "5 578 != #?5 8 :: ":,?'9$6$7 6 5 !6 7 "92 1 5 6 6 3 6 2 6 8 4 9 !; 8 #;$9"8 9 9 6 . / 3 $6%7!5 5 "6$9"5&1 3'$3$6%   +;; : )>)>$= @ +F2G"A$I $    "$-0;36?KMS!,#     #  !,!!0) "0   .8G*CP9!(!1 2 / / +$&       ! '*%00(  +  #"&$'(#####%!%   +211( +-*>'';!0/*1%#   6 - ."-2B*+ )      #  !      ) ! "$0"    "  )( '-:  n`DRI1EA)EF2BC(;9%.()9#7)9/ / 0 / 0 + - * * ' ' ) ) '' ' ' ' ' ' &((*+))'&&(, ,)&'&&%% & %%' .+  $$&'& ' &&%% %$$$%' ' ' ( ( ('''&( );'9+ ) * , +***)-. - , , . ./.2 8 ; !;"8)<3B1E3M4G0B'>4C6EBPGN FN/A7G2E3G>M:J?N=MEU GV!AQ5GMZ&Yd+ps5S}Htk=xr9W[)po9bi1]i-fk3oqG"  &- 1*#&201<     ()758B*hdNk_BC@'ZVALO9@>$<9 ,3A%!5,<"6- , . . * * - ( ' ( * ( '' ' ' ' ' &'((**+/ (&&&+,''''&&%$%& ) ) ' ' $$('( &&%&%$$$$%%%%%'()'() '('&'* - *)*)*- - , - + - .5 3 14 !; !9"8*>2A-B4MCL7H'>4C7DCNKN#:G4BFL 9E:H+>)<?JJT$M^0;M@O@O=M:ICR DU IX#MY&to'=: ; %?*B$; = ; &* .     !0&5"1+  "#     ++)8$+  &%).'    1 - @M;/=(/- '/.' +=($   ,RRY-.; % '=+#  ! "MPW   &&  hcY@PI3__LGH2EC*4: '6/A!,>2B&+ . !3!3+ '() ( ) ) ( '''((( ' ()()''* + ()'*)'''''&%%) ) ('( ) & &+*+ &%&&%$$#&) + &$(**,*'+ , ,)&&+ , ,**),--, , + 1 0!: 9 3 2 %<&:'=)=3B-D5K3C6G,@5B=HPT%WT*FM >H:E?JBJ=GBK>JHN +=&<1C:KBQ!JX)Wj;JZ$GU"DQ LZ%\d1GT*^g.lr6HS$sGT\*GY"Zb,lk5[`*{v?tr>yu@Hls:E\!8W5R=TL]3AS5 RRZffk;;%GK$3E$>8 5 9%:"7!7!6'A)C":!8 %>*D!> 8 !8 2 0 1 8 &;%:#9"8*=&:%=&;3 2 1 5 !: 4 3 / 77 : 5 1 / 1 6 5 3 3 3 "9%9"4"4 6 #!50 0 !2):(9%6 3'6.;8F7H1D-?=K?L=HIZ60K%;-:FN,PZ=HT69M(23 2 4 !9 -@0B 9 < !>)?(?$; = : '(!"-!  ''7&&588E&       &)7%5%4$       !&+CJH:>:   #        '!6(>BO;/>%!55!9"-:*   # !/$   )5- ( '    !  "  ' |oWy\PG3QJ5[XExc`P.1$5)>7L/1-* 0+)') ) * + * '%&'''&())(''*- / / / 0 *)+)*+ (&'('** , / . - + ,+$$%%%%$$&) * (&&. .2 1 ,/ 5 1 + ++ . 0 /,+,,--*+,5 34#= $< 9 9 &<+@.@8E1F1H8I*?)?;GLO#YZ+WY)b]1OP&DGYX+VW(KR!>L@MUFW!S[5MV3bdCcc=QZ'tm:tm@!22 3 $;'<-=*=&;#:)@0C$;#:#<(B = 6 42/0 4 $:$;&<1>';(<%:';2 4 2 3 "< : 4 2 56 7 3 1 / 2 6 6 #74 7 '=7 !4 35 $:,=5 5 "8!6%9'9):&7'9*;*=.?'6)55C7EFQ 3D%>! +,C-C=N+@!= %A(B(B#@"B? "<"+    "++*(  ((7^^f-.<-.<*' 3#6,;07  !0%3$3$3# ! "%0 $ $"$(#&'03 *E%?#8&>2H4D)1     # $.A#2 ,   #& !.   % ""*"    (" <:5uUPF/LA/RN=!(42I)5 0 22+ + '* * * + * '%&''''''('(),- 1 #73 4 2 - , +(('' &')+ , - 0 2/ . . )$$%$%%%&''))* * 3 5 4 3 1 4 7 &<%;4 3 6 7 1,,/. . ,,- 0 4 28 &= 8 7 3 !9-?1B7E4K6K9H2D3D#:)>1B)?'>4 5 2 3 3 7 6 28 4 43 2 !7%<';+<#84 7$90 0 3 1 8 4 / 1 2 5 1 1 / - 0 1 "7#8"9&=2E%<3 33 %?+>%9&;(;!4#5#5(8*:$6)<(>.?+60=/>3ECR6E/E (68H($:0D 2 . 5 '=)?0C5H)>"<,D'A&C"D #B"=$?     !  $ "#,)91<!():,9(5%         '86N'C#= 7 "2-9H++      '*   "'55B)*7 " #    ,-8   {^m[B[P;LD0ml]UL5D=%:7)1)? :0 11.*)/ , * ) * '%&&'%(''('(***. 3 !6 6 1 )('&&&) )'). 1/ 1 1 2 2 3 , $%%%)'&&+ + )(, )1 04 2 2 1 4 %<$: 6 6 '; 7 0.-$8 / ,, / "5 1 3 5 %?(@9 3 , 4)=/@3C;N=NNYa)S](QZ'OY&3M/KCXiy=:H- .+:; 31 &;#9#;%<"< 82 3!435 3 /*04 /1 "6"65 6 *< 43 4 0 . 1 7 0 2 0 , / 1 1 / . - - 1 $6%6$7 6!9 ,A&<2 !32 !: ,@1 #8"4$7'<)=&9#70@4C.A*;,:3A2@-@5G9G8I-7  !3#7!41 2 $8)<)=->0B&9!; "=$?,H-H&?(@,D#9 * #     !'!2"/  #,;) !    (4-- + + -!       &'  %"%  !      ./:"$0  F@7}jMXM5ME0hbOQL6IA(B;$-1"3/A&"630$4+ ) - + * * ) &%&&$$((()'(++++, 3 - )'&'&&( - * )*, . 0 - . 5 8 !73 &)'&&''&)* + ) + , / / +*- 2 4 !9 $;(<)=*?!8 1 -..-+. ':(;1 7 8 ": 5 5 !7' 1"4(;4C:L;KBK2E.@/ACL{l?ti<`[0na9]R/LL$7C?M5K+C.B3I*?6GQW*=LO!EW+HU0AN!DTS\(AX C] J\$Se&Rc%L["CRCSO[$PT&GS!;N-J6SetAS]=  !#3$==!)74$:&;#<::433!41// .,//*/ 0 !4*;%8%92 4N_D0 . 0 7 !7 1 2 !64 4 3 / . - 3 1 #4&7"84 8 "<";2 #43 3 .A3 %9#9&<(<"7$9)<&:)='7/9/>*<(</A2DDO5C0C +8%71 !2!3-<,=,?*>/@,?#;$=%@+B9L/E.D(C(C+B$,;;F   #        # * ! $$)##2+     )!      %&3!#0"$!  ZS9hY>e]IWL8RI6WP2KC,66 .(9&8'8(8'71. - + * * ) ((*(&')+ ''', , - 1 0 - , ))''''') - )(+** + ', 4 7 #8 7- +*&&%%'(+ ** + +/ - ++2 0 . 3 $9,>*?%<3 .+++,+0 *<.?&:%:%90 1 * /% 1 %7*>1C8J4H?I5F&=5EHN!vh9INV*IS#\]/DS"BQ X`3P[0DN#@JX`,GU%Un@dyHZl9[k*Ob$Td&Yb(N\#W`)KR$3N9SE_2M_@5;4", !% "2=?I02=ADK.+"?A! 9)>*?'?!;7 5!43 4"62 / / .++,/ #5%5)9+;$8 40 52 0 0 "9"84 4 1 1 / / 1 0 . %77C1 3%8$9"93 6 4 0 1 1 6 %9%:$:&<)=%:#7#6$7&9.>:H4E(<-B0C1C2D,=); "3"3"2/;'8,=*<,=->2A-A&=&>%>,D>L6D3F.C-D*@%: 78C::E..; &&5  +"    !!-"              %"& $ ,### ! 1 $$4 %%5  *#&""1##1IIS**8! "!    !  )*) 35/uTq^FUK5PF3PI0C@)<8#+463 23D,1C*%7!50 0 - + !39H)'9(9/-. + + *+- 0 $8&8/ + * **+**+ - )+, (), + *((*4 6 #;%: 8 0 )+(''(()- 2 3 /3 6 / 0 0 2 / . 1 4 $9 !9 5 6 . *. -, 3 ->$8 &>$;3 + ' ) 45 4 7 (=,B7N9O4H6J'A-CGP!uj;pEvk>o`7PP&JO"9I(D#A )@0H1I-E3GQ[(`c/lg7CPOY#h_2UZ)OU'EK MR%AN!Oc;iuP]k8FW  0 $6!4#6)<*;0<4A0@'9-B/D%>*?1C,?  :A7@(7(8%:)=&;-@-?7EAN2G+D8L6K4H3F8G/A&<71G!   #56@   %                "%      &)* %  #)7)+#& !  & "  &&3CCM"!%7;C!&1 |YoOSJ0NE1UK6KD-H@,9=%.&476 7&:#61 0 1 / .@;J-5E"$5. 0- + + + + - . 2 !3- , + ,+++ * + +***)+, , + ) ) (+1 #9#: 8 6 1 3 +(((()2 6 #:2 4 #:(?"9 $9/!2 0 1 1 3 /02 2 +---2 !4 )="= 2I 7 . , &:!65 7 !: ,@2G>Q?P2I9N0H5M9IQV'~nBqh:UT*DNAM?N.E'D&@/I8M2H3HETPZ%JQ%)9?Kl_3g[2]X-9BQQ'4G.HP](T_(R_&BRLY%RX'FM"7@9H>S*FV606.  `W4)@,@1B+>6 6 )?);&:#:5 34 2 2 / 0 / / "2!3$6"4%7&8&6&5&4"-%5!5"44 5 1 0 /$5!1/. - ,,++ 0 2 5 2 1 4 5 8 #;6I*C)> %& %1(9&7+<,:1>%9 7 &?,C&@1C6I'= (03?'8-;(=.B+>.@-@6FAO-E-E,E*E#?$>'?#<7 8 2E  ! ! #! !/$! *  "+ -      $   #(5%HJR. " "$$3&)**8&&4! !- ++)qcCeW=LF.YQBKB0UG6H?,)'(6&>!90'6"64 4 2 )<&8$62!3%60 + * * + / / . - + + + + + + ** + )))*)+, - - * ( ((/ 54 5#8"8!81 *)))*3 '9"61 5 &;$9!6 5 2 . 0 #10 0 1 "5 ---..-/ %7&:,A+C+C 6 0 #743 #=%=1D2K7M7K/F6I6I8L:K'=-A2C!9#:,?,>/A3B.A*<"6 5 42 2 1 1 2"4(8'9':(709%,%&$2#53 3 4 3 3 2 0/ 01 0 +++. 0 0 0 !6#93 5 !; #:%;'>(=)+ #4-7-;*;->(7):"7+A$?%?'<BK =H,>  %3)9/=.@,?-@1A7E-A(A)B0H,F)B = < !:(C > %@2A  ! %-    <(A$<*D,B" ",!0 +(  $,* &  2    ! !+/1E6O:S8M1H4H3H4J7I;M9K\[.mm3al*gg2a]/:M6O2L9P1K4N4H/A-@1?5B-=*:%7#7!50$4!2 1$46A&8%7 3 !, ''&!+"."0"02 2 3 3!2"2!20 - ++*- 2 0 52C2C7 4 5 !8 6 #:%; .) &9,;+<+;6C+< 6,A7J/C"<2?MQ'0? 8 !  !/.<.>+?+=/?0@.?(?&B&C,F*F&A!> = 7 #?#A&D.E  ) . !. !"#:)A.E0E$ ("7C />)  +!-%        %  ( #,66C  %'   UY[zvd\Q8PF1YM=MC3H@,RG1:9#",((94 + '4"65 3/* + , , . - , + * * , . , + + * ***++ * +*+, - + , , . 10. - - *1 #7"8#;4 0 , ++, , , + + - 3 1 - ,*,/ !1 *73=2=/=1 ,++-. . /!4 0 1A+=';*@(<!2%633$;2A5I7P=W8N0G5K4L7N4IMuu5dk-V](XZ+?OI7 "))5F3C$=%:.>.?(;->/?5A5@5@6A7B)8$6#3"2 2$4!2"2*8!51 0 )& '% ($% 12 4 4/ . - - ,,, ,+1 5 2 4"6 65 5 3 #9"96 %;&1! *5+9!5%71@%9%;=M6H(?(<CG!NP(+</   -;5A+=(>*;,<);,=(@&B%C.G/G'B; 9 8 9 < 'GGb# )!3),<0 ! AAJ,$&         !(&# %#*!( 7C#;D4=1;1:'2"   #-!. +"*   #%  *$-    $$3 &TSMueL`O;PF1TK;]O=YN7KC-89 )1.@$5( "1&9!6"42@&>J4.>!#6/ --,+*)- 0 - - , + ,,+, ,- /./ / . . 2 1 0 . . - ***0 2 2 / 1 2 - , - . - , , . /2 5 2 - -0 "2 "3 1?0>1?/<1 -,,//-- / 3 ,B(>/B7K%; 7!74"5)?9H4H:Q?VR4G(?+?0@/>4C8E1?=E?F>F8D.='8#4'5'6#5$5&5%4#3#51 2(5(4$0-)$ ./ 3 40 / . / . 0 . . 0 , "6$8"8!6#6#7+?5 7 3 7 7+?*9+8+:%8&90A&:'>6IQX(3E%>1?LI&MK'-?)  #.-:,;%;$;*<%7$:.@-D,C,D.F-G(D$@ ;9 : 8 $C+A   "-$+   $$3 '.  ;;G<I>EAE :B+9*:)8* .$2!, -&'/ 0-!    .   #%%   -$%(6"_Q=qYAXI4]Q?t]JmZFgW@XN6MK5HL76 -3%B(D&;,;?H3OZG8I-&;---.++0 "5 / / . - ./ / . -/2 2 2 !3!31 2 2 0 -+) . , - . 1 -0 #8"7. 0 "40 . / 0 2 3&9!7 4 02 0 0=%60>6D6C,9/ / -.01/.1": 0D8H0D/I$:#:!5 7 !< .G8K5K:Q7O/J+H2J7L;P@RHY=SE^eo*ru2N\"ERAN;LJV#8N0I8Q5M4N4U9SJZ"CYAV5F,>.H7M")B,ECQ)=K%ET1@R/;M-;M-=O0.@ &1%"#]T>QX+@V4K-C/B.@5B;G5D6BAH AH AJ />)9':(7'6*8-<%7$5#4'6'8"5 5-84:1<1?)703 5 6 50 0 0 1 / 11 2"3"3 4 511"4)<8H2C+A4 3 3 &;&:&;(<(:->2C&=7MH[!FU"0D$=8ACF"JJ%7C):  ,%7#5#7 7 6 6 7 $<.E1G3H,F)E*E)C$?; !=; 9 7 */0>+3,;,4      -!$44F2Q+N)I'G*I,F8IFR"RW(NP'LP&?I6C+; 8':+<)7!-#1!++0!2. -    **  !|dK`N7]M7x^Jr[GjZBgX@[O6IC+/66 3 !="82@"2?"BK5ZaP8J-3-,0.,-1 1 / 0 0 1 !/// 0 !.1 !30- #2%5"4"000/ -,+* - , , . !7 #9"81 / &5. / 0 1 #5$8!6 (93 0 2 0 %6+=.B6E9E+8/ 0 .011001%< /E2F0G'@%9';"7 &@8L:P7L6K:O;O*G0K:O?RDUHX@R,D6L$,A1C5A5BAO*9N&6J"-'*3" 1,,bqgDDT#.=8EWV-GK#H1?,<(9'8&6*8(7%6)8(7(7)8&7$5!5'99>8?9F1>,:):5 4 5 4 3 3/ . 0%8%7"4"4 4 4 4!3"5#7'==J.A+@4 4 !6"6(;.>7B;G/?%>?RG[ 9L(@$:+:':CO!8H!5" %5$5#76 / 4 !9 *A0H,D-F-E*C)A(A%?< != #>6 4 ) %.2>/8!% ( )@1F0F-H0M2K-G+E-FBM!SV+Z[.UW+KO%RR(IJ"8C;E;D-=(6)4%1  ,!2"3"2. ) (    ZQ>mQv\GpZEz`Lw_JbUmk\jhWtyl7I,/,3 .--/ . . / / 0 . !/0 . !/#3 0 -#1 /!3 2%4 / ///,( +* ) & ( / #6(<&:&:/ - / / !2):+<3 /=(8"50 1 3 #60I9I3B?SAT;O9O=O9P1L4L3I;L>OAS@QFUCVff.pv/GW0C:GLR%NZ$7HJZ 8M;Q0O.P4OL_!BW5E6?7>,>2J9L 2A/;+:1F8L$2F"!.! m_KrPT[.@UVa,V_,BQ /@6?:D?F:D:B0;6>0</B&:"8$8.<!61 1$6'9'8#5$5"6"6 4 4"64 !8 ':>KEP!"75 !6#7,>3A5@2?+<,DCT=Q+A#;%:(:';DP"DN!+;)2 *92:&73 /3 !8 *@)C-F'B&@)B*A4H7H(?*A(@6 &7 #-@ALQR\.AE"CF6<*8   "0" +F6O8J5M6O;S8N3L5K8JJR&]]1db4DM E7A>EBE5@,7(2$. $ 0#3 3"3. 5  !' (& dnSyaIoZD{`Jt]F]R:LF+B=%04'0%/?E/ccRVP=^R=cZGh]K\\J*9/ +)-2 . . - , - / 1 0 / 0 !0#2/+ ."0#62#5+"1,. ' * ++( )& , / '9&:*>3 0 / '5,87C/=3 9C7A*90 3 !3 &62F0A0>7B,9+9"3&8%73 "6 -=0A7I7JOCTEV;Taf+`f*T>S-9$5*@2G ,># eVFwW`Y9LV(@T:N:L=P5F=AAF!9B7B;G:H4B.?+=*9+9'5)72=+8.;*8)8)7)8-;$5"5$7/?:D=D=B3;9B/?#8*92>$8+<(:$7$7$6$5 2 4 4 4 4$7!7%<(=4F4E#8 6#6'93C4A-=+@)@=PKY#*?*?":+A2B"5 4 !64 7 #>$?,B,B&>'A5H2F1E+@*@.A7 7 %( %  *24B_`hlmr(   BF;>47&5* +@!/N8J7L4P:U8U=U@OEP"KQ&RT*FM"9E;F?E?DBGHI#NJ'A'PL2IH-TL2XM7^N9WM7RR?AD0/;24%:- - - . - / 1 1 / 1 !0 00-,!0"6 3"41-/, ) * . -- . + * -- 3 6 1 )7"13<8AAI6A!06>=D7?!3 &6"4 &62?5E,=*94>5>2 *=.>&:(;0A2C:K:J8J+@"7$8*A*B:Q8Q7M;Q7P9PN"1?'7&8'=.D0A*   pRvhFNR+CQ"?R?S5JFN#?E KJ'AH =F1?6D8G5B1?,9-;*7,81<&5(7&6(74?3?0=,:-:'7+<+@AK AI >E/8=C?H #8#7 5%8"7"8 6#6&7#5#6"644!4%8#9+?-@%9+>'9(9/>/=1?0?,A3H,E=Q0F)>0G6H8I:G?K>LCK#3A2@  %5#63 4 "6%:6 !; '='=)>%=!; ,@9H)@&?,B3D!8!7     UU]FFR &):9@@@+7*9)"  &@0L,G4J6U3R>VAZHY ER HU!DO KP%>I-8)5+4!; %     !,!+,9**8$''4&"%  5 -&!   &   -//ʳ˩}oScR=`O:jT?eT;dW:^W6PL.VQ0CB&=A!NJ-SP/QM-NH,WK2_S2?&:-B4F:J9OFT CPDMDQE[Babh,Y])RV'JP$RW'hg3ih3IX 8LBWAZ1N)C)C#4 ,$&`]ed7IW$M]&HY#=Jh^7SQ+IO%BO ?M5E8J6I2C4E9E3?8A3<0<*9+:+;+:,:4D4B0?-=$7$:'B1FEL"EL#:D)>%<*>/C-D8J=J4F$<": %""2##?#<5 , CC4E*?$:#    ).-2 +.O;TBXEV:XGb!Pf$Xf*\i*JU"Ub'cf1]a.TY)VX)SY&U_'NU%NU$DL mV?lY>_S7j]<]X5HK(UN2]V3`V6a\4WP1\R3_P7bR:uaIiV>_N;J?/23&220 / ,+-0 1 4$8#:$8%:#7#6&:$7!42 2 0 . /./ ,.0/+-,/ #9&<)?4 2<6>CC"<?E =DBJ 7D3C7F6D(?0D.A;K1B2A:FIQ!IP!GR 3E9I4K@TDW>S'C+@/F1H:WKgEc?X=W=UI]=O>L0?HU!AQBG ENI[Nd Hecc/QT'VX*GQ!PW&mj6ae.BX=WH];TU=TR[&RZ'R`'Zf*Oa%HS!0;+=.J(E!=!6|gPmcxIhm5[f.]g/PW)[_/IS%EQ"DQ!7I4F6H2E1A6E9G7C2>*>2B->2D+>#7#60?2@.=,?/?6C3@.<.<$7$;,E0J2L.FCTU^*IT#TX*TY**?)?4G>J=I*>5 8 "2&7;O%,C%<   +3.5VX-TX(NQ&,-1"0P<["?VO^$Va'CcTh%]k+^i,pp5UZ(S_%Zc)ei1Y`+Xg*T`'QT&NR%QU&MT%5@7>(37+93>3=4@8C4A&8&3    & 0D&;"/B !BCKZ\a aae:;E) +$%2,23="   #   &%4  "!(   (::G!!0$%4##!0   2-/ŧ{o{hLbQ;rZ@u]CkX>p]@dU;]S6_S6p]?iW=nd-3409.3* )+/1 2 #6#7";!9"9#9#8543 0 2 1 - /.-/00-,,/ 4 +?$:)>7=5>MH(IE&AB!>D3D0D2G=M6F > '>*B9T;YPlA[=VVGYGS CRBPLW#=NOS$TW&Q`#Qe"MfF\`[/WV*WY*Y^+_a.\c*B\8V?VMb!:X;UXl&--.> ~cKh|Spm=Ua*HY"N[&HR%IS%GR$GR$=L2C4E9G=I4B2A6D8D8B9A8A:C1=4?0=0@8F2A1A;F@N1A-=+=7D2@,94A'>&=.?$:/A48 >H(=I%9(59B+8;I$-A&= /0%'+ UZ+S](FV]].f_4k`7/.%    6J$=X!=T8O>C>D3A0>.='6  +*7 ++6 (,/4;  #%3CDN)*8,'(45@-      +,7IKR%(3 *'4/-:   '##3""1)--;66B#   l[LħuazaIeKu\Bs]@eHu_CkJyUsTmSubBk[IBL 9FCI#QP*5>4?AG!RS+;C7B@H!8C/>0?3@7D8J/F3EGM$AL HQ#*</A8F9FAJ =G9D+=*=*?/F3I-D-G7KCO!CN!1D+?'>.F.D'?!96 (<4C(<&;$:)>'= : $;-@-B*?:D => KO!;?>D:A*91B.C#:  78)h^=TV.YW3X],Q[&TY)tf<~lAwf>=ABCVVTmiX[c1S`'HZ!V`*Uc(OZ&Vd(ks1km4cj/Y_+Tc'Yb*Vd(P]%V[*\\-X\*IT"FM$KM+ 5>1<;ABD7A9A@F3?0=.<2=)8     "/,$-hjplnt(( !/' % ! ')5;=F*/9*$    %  ;>I$4./lletVu]EtZBw_Ct^AwQtSkOkQ{`G}aEp\@p\?cR9eS9oW>|aDbN8`K6RD0[O?@>,:F/#2) )++2 "63 3 2 3 6 ";#8"62 1 / - //-.0/--- . 02 $9+>%:)A"<!7#8)=4I1D4I3I/E-@1A0B/?-:7F?N7HOQ(X[*V[(QX&ES6I6S2J>W;V-I(>7P5RDcEe7Q4P5TBYHXARAQCTDSKT!MU#LX!R]$Sa$Ze(_a+je5fc3Y\+]\+DQ6I?Q9N/J4U.P6P?[0P.M7O3H7NDY=O,@(?)@-D,F$B+ ""2 88FklqNFAoisJW^-rGQ{Mqi;|qB~rBvDWY-CM"CL"FN$JS$PY%HR!@J>HFL";E;EBI!NO(DH"KN'[X2BJ"5A4@1>=H@N2E8GOR(LP'QX*;H1GDM#AK!>JHQ$EN":G;G9G0A6E9J-A*=1@8E=I9F>J7E:F5D,B.D/D/E*?0F.H)A';,@*>':#;&?9J4H*> 8 #8"6,<;E5F*=5E4D5E5E2C1C5G4E1A1A/C*?(4',*-LL$HNAH=BKO&GQ-0?&;&=-  OO,FL$EO"OW&^]/c\2zi?qGvf=~j?YP8PJ0{p?VvrmVif7\d,gg3su9yr<_]1Xg(_k+OX&Wg*O\%MZ$P\'Vb)R\&TY']]-]^.NT%AI EK(" =F7@DE LH#DC:A>E7A6?4?1:2:'6'1     #!&0 ")"  $  '    "0%(6   !*'+9(.=$5 "  /;>K943nqepRlVAdS:nXA}aD|`CeJdImOfIfFy_Ev]Ew_GmW>cFeR:ZG6`K8VF5<9$IQ>GV> 6-A#6)4 !: 8 7 7 "7*=+>'<,<%94 2 1 1 0 -.21/. - 2 4 (=2H)9->5H0I:P3M6L=O2G3H5I.C1C0A0C7E?K7ELR%HM#U^'Ta%CT;JBP:L4M(A:N;W0J9TB_7WAaA\2N1Q=\I=J?NDQ"SX*TV+SV,^]2TX,>I XU/RS,HO%DS!=M8J0C0B/D2F1E)<*=4C3C8I:J9H;I=I?J5F0A(=(>+@6L.H&>*?-A*?&?%?3G8K3F+@$=!: 8 7 .?4E7L4G,'5%;#:)@$8';,@-B'<(; 7 "8>KAL$82 4 5 $+PR'7BRV&EN9ICGMK#?F!0A %;&:&? # '6FK)VU0LS%QW(]k*^k)fa2rh:ue<~nCwKsMtn9ch.de/zRtJ]su;oq7^k-qw8yu=zw>ou7V`)T\)cl/be/]`.[e,hk2ad/\a,hg3db1JR#FL"GM#TU*(/  FU FL LI$SK'HG!HK DKDJ8B6A3@4>)9/ +) (    !%0)$)3      "!1+%#2    XRCgj_waJiU@nVCeIeImV|\E|^EgNdKw[C~aFeLfI|bCiV<*' TC4FC-=A)^hX6K.%=-F#1 5 "; "; "; %=/?+=*=(='8+=&:5 4 3 3 1 1 4 2 1 0 0 4 9 !7&9):2D.D9KCV;Q;JHP!GP HU K\ Zi&?R?PIW!=N.H1L9S>]6S@]Ce=_@_;W4U:[?]8T6O7NCTRa$HW 6MRY&Q\$Xb&Xb&]f)L[ NZ$HT!TY(O^$]f,K[!BY@W7Q:V8TG`?U7MAN@N9J3F3E1C0H5J1G.J%C 4+ ""3,$#))7"&4ˤШx\]R}Dhs6qw:fu2Yp*`h1[d.Ye+ml8`g0Wa+Y`-OY'U_*Uc)LX%Z^/^_2ca6^]2cb5\_0Za.^c2[e0^d2Wa-Wb+Tb*EX QY)eb6`_2]]1_]3a^3>J WV-TS,JP&MW'BR >P7M1J1J3G-@*=,?/C6J6F3A7H*A7 !7+=G8G9B):1 -"5) *>   !    8jStXtWb`tRnLjJyZC{dS|aKmQmOqY@jR=mU=C<( &$J?/><(HJ8KWA6I-#:$;!6 6 8 !: !9 .?(='=*@!8!6!7"63 4 5 1 0 2 1 3 3 0 7 #8&9"3!4)?)<3E=L:J=L?Q1J/G-@3C9H7G>J1E0DEL =M[A[8M2F?M9K4H,A(>+A/H3L5O0J+G 7 0  /56A33?rrvtĔŸukdZ}Jbl3in8hr5yx?mn:Ua*R^(ki8xl@nl:]c/dd3si=piP6M2H7F+:OAS@VBS AO":H!6A!=F$,;!1;GN[%FXCR7I,C*B0F5G5H@MAM ?K2F->$74 "9 &>: /A5 7':7DAJ4B'93 3  84#ld6pe7LP$BHGVFV9H=LSX-FH 2?*=   '  WW^ !)AR"jf6ha6g^7[[-_f.Vf(fg2mh7vCQPQNL|y?qu9}E~{BB{?FB{@zqAI{Bmr7lk5lk5nn5lr3|x;Zl(hk0vr7ni4[Z,jc4ng7a^/`\.MO#@H=F /6#!+" 8G BUCVBP=HFK QO&RL&CHBG?F=B7A,>!8    !'7(< #     DKO1:?$+3;@F !*$ &  ]MBiˤwǡsȠrˤsgkMcL}aKiPzZiNoVAdO%8&;*94FL4F6I3J3E-B6F8I2E$;$<+A9FBN?W=R6R:K;I9J8L8P4N1M7SY1K2H:HDV?Q6J/F0F(A*C/F3J6L/H 70 -64FIO23=./;ʚĝsițj}Prn=kf;rh?js5lp7|oCdg4[b.df4zmApFwp>yp@~mEzmC~qC{mCri?pjQ8M;LAM!>L>KCN!FP$AQ EP"DP!9KP%8;G*;'9(9 #,/>HWT)bV/ra5|g=QN&JL"^c+JQ!LJ#GH!LJ#CD4E 4I !*+: QU.df2ca1d[4f^5qk;gh4jg5wl>sj<{GP}O~LyFtF|DDDz~?|IF@~D}zBHC~}>on6ek/ag-go1mp4]i*fj.y|5`f+_^-wj;pe7f^1c]/YX*Y\*SY'PT+NT.'0   HT*AQHUQY%KV#FQZ\)b[.XU(RU%FKHNS06=* !   " ! (!2. %*$'r]JrٱߺͨxžokvYeQ?eNbKdKlUA`N8gP3B3C/B0F.C'=(?9I.A9 7'<@J?KCWBY\>^=a@c>_7\8[8[FW G[EYASHV!LZ#K["J^Yf&M_"L[!R_$P_#Te%Oc#HaJ] EU9P.T8VGY7K3F;O?R8O/F.D%=*B2G8J3F5L1H#;( &-NRV %!!1!!0nnt>>JɑÝqh|SlFyjAwdBwcCyOsHoKpIxlBzq@xJpq9ttnd=ha9vgAqgMDP"FR"HQ#EP"EP"CO;I6G;L@Q@QAR@P9LET T](V_+me:yoAtm=vDvq:JX"{CFHIG~?||%+8 i[KwϦyqqpfNboTlRmQoWA^K7ZG6bL:@8)oS #;*<3D1FDTH[>W0FFN@OO3P9V;J5I0H1G4H+A1H/F)?.A3F9K6K3K+A,A '+3 !&88D33@ ##1+㾌p\~VxPoEkFiHTlHpJ|SxOQOxFttuf?th>jg7mc<`[5e_6mb=la=nc=j`:e^7a]5lc;W[.bb4vl@kh8wq>ac2YZ/ea8d_8a_5^^3RZ+GV$S]*NV'?LMU&NU'KR%DHN~qA{p@}FKIJHHrm6e`1b_1d`1b`1ef0PW&EQ EST['pj4zn:lg4lc3cc-ne5wh=]\/OQ'PO([X.GK$&/  67 %  &3%Zl'Vb&a\.h[3aX/m`5sh8ph6fg0Zf(d`.XS'ML#EI*:'   #  '1  46A=AF0;3   "63K 5 &     $/ 0 '!!  '(7"  #AFP "  +0; .  E=7nЦwϬ~ƥ{okNvWrRoOz_Ey]DhHrKhIkLmKTH1F?)9C"/=7>MH+4. 09<7737 !: .F:O1D)A,D!: 4 2 . 3 5 !6!52 3 7 7&;-='7&4"6; 8 6 8 ? #D%B$C3G8J6JO]#E`=ZM]!P]#>T6RA]A_@]B[A]B`CaGbBYIaFeEgOKR%MV%K\"DZS_$S^%MV#LT#T_&S`$K_ EYAN:F?L7M6D>P :U 1F4H7J-D-C&=&;)>-C5K7O*A%9)/1; !0&&4͢v_c_}PqFrL~UrMvQ\X\VyFxu<|qAqJoHnDhk3^b.qj;uk?zjAwl?zmBoc={jBoc=mavh@_a2X]-[^/`b1ac2c`4_b1gf6W`,R[*V].cb6d_8]^3SZ,IX$JZ$GV"OX'V]*Z[.TV*LU%DR :I/7")'*376CU]+W],KT%KT%We'V_)eh1S[)MV%IS#;LRY)GT#ES"*D:J(@(?.B:I4F/C/D2L; 7 //0 '<4 3 0 1 4#5$6.:  ).5AG?ARM%WU(ENOS$SU'ZW-l`5md3gZ.dZ,TM'QH&QF%*1' &:5L$(' ($^\1LP+hc:he2z~=y}yn>zGF~D}EKJ}IL~FHLILLNNyDyDMQKJJt@ea2ic3ga3lf4kf4ri6od8d]2e^3`^/XY)[_*kg3t<{oUT_%N`!H\FVNZ$Wf(IaHdGbA]CZE\BWAYTf$Wc'K\!C`Bd:`9\=^Mf ?WEXK=IyOxO|O{JsEwi?zpAwj?zkCsHrj=sg>rg>nd0<*!   %#+3 BHTS'EEZO(f`/HM JM"YS+_Y.o^5g^/PL%YK)bU-HG"EA". 3(B!4!+,77A #% _Y2of7nf6.2&<>1\ii4iq3@IzHzEDG|CII~HKI|AJMMKGJKv@u?ILJO{Eti:o?q?|j,-4A,]v(a|)t3v5uArDlAqCpBkh2f`0re7d^0YT+AFIR"5G;  "3 !+# QQY )     !%/"  "1.. )+669@   "*1  . !  !2,/mܴ}˞mxUnOhMoRiMjNtQ}V{UW}WzTqOt\@`Q5lY;n^=XJ1>="2, ,/4 #> 5J,D9K>N=QHU#ES MX%'=6 !:7 &<5 3 3 6 88#9(: 2% " + 6 : %H,F3F9IUEYM]$GS!NV$MZ!FXLZ!LZ"M[#T^'QY%XW*S[&GZ=M0D/B;I+>+?+C)D(@)A,C7L:N>R '=&9ѾȔÜsX}TZrJXZzRV_dfjb\{L|GzFzCzz=wq=sBpFrE}nCpGtFvl@ie8kb:l_:j_9le9ea5g`7d]6a_3__2f_7PX)DU L[%Ja#al1U_+Ua+N]'Wc-AUGZ"O[&LY%GU"TX*SW)XZ-CL!-A)?(?-A9G7E1D6J1M)A : 0015 (;$7$6 (      >C HJ!GKGG!SQ%jf3DPRU&[W,j[2jW2fY/NG#NC$dU/VN(>?$1!:$? " #JG*e^1qf7jd5uJ~[oi8y~;p|7>HH|KJKHKMNJ~B}CL}MOKQKL}t>{s=~EKKQMtAp@p@qBrc8{k9vCn`5i:wc7vCxiPER!FP":F'; 6":!9%; 73 4 6 5 6 77 7 0 & 0 6 $=7M=L2C4C,>(?'D+D*@+B0F9M?S@S#%8%8  ȨďԨz—ja_cZyQwP\lŠnȤpҮzƟpjYQzMyG|}AB{r@sGuIvFtD~uBuGrDwk@th@kb:cf4jl7kc9f_7d_5k`:_[3\[1LZ&GX"K_$^l/fm4oo:S`(2HC\N\&MZ%KW#JW#PW(CQ AL9> JP%JS$O['ah2hl6|uAS[)ZZ-\\.Za*cf1RU(JP$GM#QT(b]2\[.QT'YW-VV,PR(&=":&=*@)@,@4F7J1J#=6 13 !8!7"7#  AJ HI!KJ"NL#YX*kd5d]/i[1cV.^Q,_Q-XN)WH(TG&TN&BF(3$/(=-F(``d44?  JF*d\0uj9jb4ne8mc9j_3JJ~=MINPOPMMMMIHOQNMzErB{p?}q?tAvCLPRPNuCl=n?pAyGLIIzE{g:wBq@l_5mb6op3gd2b]1hb4yl=qe9e[3qa7j?~l=fc1][.U]'yC~TDF5(&.8-a]=~Hck1[e+de1qm7pu5mm5oj7sn9oh7k`4g]1q`8nb7fZ4PL(5<$85 : #$"%4#$4"  ))5 5W6!7#7   + 1 #,     "   +/9'  +FMTLRYU[`KQW&3)%    -]_bUWZ=?F>AGvwz),8 [L@j̢tѧu\uTrSmOmRvRXrQpRřk—iacHbEv]@cQ5eQ6QH-EB%A@$8B$)3/ ,1 1BLW%EQ"7FBH!(9&8$9!8#:#:%:!86 4 3 5 "85 6 51 . 8 4C>LHS#DO!EM"?H7E;OBXAYH[ GZ;WA\Ud&GV O]#EXCaF]J_!N^$Tb&M`"GYBRIZ!N`#E`Pf%Jd!FXCRCSAQFV Sa&J_ L]"Xd'Q\%Z\+RV&OS%\[+OT$LW!7@@L:C-<*>0D+?-D/F.F.F,C*>-C1F4I:N4G2 ( !z伊Ɯq–kh__]Z{T{UcΪvϭxԴɣsͦs_[WR}KI}HtGqCzG{FwFzH|MsEso;pi;znAznAvj?qg7 $<(@(>/EAX,-D/G$?6 2 7 607BLJ#eZ/\U*e`1l_3ZU*PK$MM"TL'[T/WP+VJ(XM*yo>ui;se:mb6oe6pj8of7tg9`[/vfCKghjefh9:D    $&%11>==HZ[aqqu6,-qᾇѦt_qU|gzheJnTrQpQ{YΟnY|_EjKjJ{c@lZ9]R1SL,OG*GC&CC$7@0="; ,B`l-9M*@*<%9$8!8!;!<#;':)<5 3 3 2 2 4 4 33. * #5/ACS,o|ZSb::J@O@PJ\"H\ H[ EYC[9YDc6GJW"JW!G\G^KZ"R^%N`"HbG`FYFXL\"DZC^<`C`I`D[JZ EWW](HY T^%MZ#JT!T\&RY%UW(TX(JR"KT"DQCVAE!;C,?+G'C)F)F2K+E+B0D6K8M=R>S.C% l[Mݳdbbcf`\]\Zbhhţsʣpl_XSLGD}FxIxHJNP|KuGxEzGzIyHyE~u@zD~wCwG}qDuh@vo>yGzzCuz>vt?np9~vAyq>nl7Yd(TZ(OW&JV#QZ']`.Z^-Y],Y]-`c0|n?yk=b^2_`/IU"JV"PY&NV%PT'UU+f]6\W/HL#IK$RS)RR*YP-2@&>8 %;)>)>*A&>&>: "= +A$=%> 4 5:HD UP(f[1b_.KR!JO#LM"JN RQ'VR+YR,WO+ZR,HF#:>A@* #;6M!   ??I>B6x=zD}HvBkCJOMPQSOJMPROLKLNQFyEzEGzDuCwCH|FPXKUX×\QQVTP}LDJLIIQyINIG|JuFM~kAtDLPL}CDGJMxmwm;v?yCqAzj>f]3LQ#?J7C(8; /     !'-3A$4&  %1 & ,%" $  !   ""2OR`0"7.0%8deiEEO$%3"&'4KKR89BVV[eeh&  !%$mر|czXde_\|X^\fYtYAeG{^Bs\HC&ED$AE!3A%=0HDZ)> 6$9 9 7"8!9";";&=%= :6 4 3 1 1204- ' 0 70 ,A:J@P 2F=PH\ N`#Xb*Q]%Lb!F\Pa#E[M`"M[#NY#R]%JX N]#K_ Ma!Kb HY FUFY@VAU6NB]F_=[7NJ["M]"P\$T]&HYHW I]SZ%OW$LQ$^\,Wa%S^#>YEJ#?H2L#D 'C)D*F/K,H0G3E3F8K{wAD 1:071 &?6I% ;3&ONOOzI|PWSNOLLKNMPSQPLOUSLJ|Hv@yDtDyHLMQVNTYYUTOUONONOF>NOKMJLLKwE~LMURNINTSvFwBXfzpPcV?rdBsF|H}G|EzFH?qd6wi;e^1MV"DPAJ+86 ; #   $    % &,;-"5 #    ! %   "#41 * ./ 0$67A^^b;NAO DWEVO^$Zf)Sf%F\I]?ZIcH\IX K\!Q^#G[GYTX&U^%Q[%\c(P\!]b)IZ IR"@O&L $A *B)A+E/K0I2F3D2E6H8K4H$6 ,&&yla_[zV{V\^×ca``lżøi}rBvozu@{uA}EE{EyFMNtEyI~M{LyH~K}Jrt;Ti)o~5rs;yISOyEzHD}@ry9wy:sr:gn0^e+be1ce2\a-LS%ST+qd:ug?wk?xm>um;kd6lc6lg4R\%U_'Z\+mh7RQ*PN*OO(TU*VV,OR(OP)GH#';":"; 8 #< %?(?!9 6 6 !5 $:"8$EI;I=K;H6B;H8JEXM]#HX NZ$LZ#N\#Xb(O[#W`(Ub&R_%W^(J[ ?[C[BX=V9OHU!CUDWP[#Xa)]`,Ud&Wd(IZ!>RJ[!M_"Pb#J_ R`$G[CRCPI\W](dc/Z](Y_'KX!FQ!4L$G %? &>*C-F5J4H2E1C0B1D5G(;$7*/7  IA<׸mkesOY]^[\]]ͼǵpgtcDoe9oc;nd:k`9xj@IK|H~KMOtG{K}FLJxI{K{Ilm9; )@%=#9#8"6!4,   6CCJAPri8UZ'LR#TR'SO&QR$OQ"TL&SJ'JH#0?3=1 +E(=  lY:qI[Y{OyOxMRʕ]ӛ_ϗ^VWRRUNQNQSLNPPQTVVTzK~JLN|NNNQTXÒ\YRTUSURUš\TR`\]^ZXUVRSY]VSWXVRNW`TNNLKyFr@kf6ng9ti9e]3nb7ha4^[/XU,LJ&JF%DE!0= 5  $$$"    -    "      $3#7#%& +{{~''6!    !      - fN>h`cagfwϵßskf^kLrPlLgGdCx_@|`AmX9ZN0+:6 #7'9?GAD!4@'8$8"7 6!7!6679 "9 : 9 6 5 8 7 9 "9 : #;8I9J6F7F7D8I:QAXJ["FV FY H[ S^&S^&_h,Y`)WZ(T[&T]&J`J`L^!E[AVAYJ]!C\DWMX#R`%Yb)Wa(Ub'J`!CYAVCXKX"M]"LZ"L[!BT>RO\!\a)Ta%KZU]%LX!BS8E*H%? '?*E0G-E.C/A.B.@0B2C,=$8  16>   ֮—qmśmc`]\YXvQ~YuVv_At\@mY;nc9fa6hb7b^4f`6}nBNOQURO}Mz@GIJzx@ww>wr@0E>LJS%b_1tF}G}@Dyy>kr5cu/js5`i1[d/_e1Y\/Z^._\1^Z1ZV/CN"SV*YZ.OS'PS(j`6mb9HN"mf7UQ+QQ)TO,\V0d^4vh>yg@l`:td=LM%7D+>3F'@+B+B$;#9&:&5"7>BOGT"ib4QU%IQ"LK#OL$IK JL!PJ&OI(PI&3;#4!5 *D"3 OL7eD|Tɓ_ǐ^YWXȏ\ןdҙb˓^ǐ\ɓ[VRMPPRRQwM~PTOSTTPU|MKzL}N{M|MxM}PXϠe‘\WTXŐZTUSR|PrLWVbĠf``]X[TSYb[SRXVUUZWTSROPNvEyl>^[1a[2ud<_X1b[2ZW-VS+LI&RK)XO.RK+0:)9(.!  "    $   !        %+!"&0  #( #% !  11=# " & #E61ԭx™k`^`dzŻĨh}\]rR^tQoLkHt\>u\>bS4QL*+:5 *;+=/@7ACL"'8$9%;"9!:!8!88 9 9 : ; ; 8 9 : (>)=&>*A'>&=)>(=(;&<7K?UBTGV @XJ_!Xc(W`(Y^)Yb(HV O[$M\"J^ H^Qa$G[ F[!Nc"P`$H^ EXJ\ L^!U`&Pa#I^F]E[F\ HX!M\#GXLZ"R[%@SIYU]$KY BS=RBPDSDR:F0I+G : +C2K3H*@(>,A.A1B->+<,>     256Ȝx_Zccb\WuQVpNiH{aBiX8ib7jk6fg5be2jc8qd=sFMLOXTQJwDyBGQOqv<{Lge8:Ife4tq;NQJ}M|Htz;nx7jt5oo:aj1fk4dj3gh6WY-XX.WT.HP$NS'\Y/FI#JM&VT-e^4MT&FL"SS*h`6b[3[Y.ib6pFuLrJs_<@B(9#;$B8 < )B,B,='7&3FASXX,b[/WQ)TO(RN&PN#LP#FK#KL'QI'/8*?(>+E" ! +$ )#    EG7jCsM}RVɑ\Ȑ^VXԚdϚdȔ`Zʔ_ʓ]͖\URO^]PSWTYQQSRPzLzJ~J{L{L{NRSYԢhޭoɘaVXZYVXVSxRwT~TOU]ơe`aZÜ]Ý[YV^]Q~MTYYX]^WYUNRN}Hwl;a]2b\1h\5TO)TP*[U.UR+^Y/]U/\T0cW5SK,:DFQ#4I8E$        %    #  ()9#        17B !    !%( &!ÊӫycZ\ažqwθnUfdlWcDoHdBpZ;^Q38@ 86 "90BDP!AL CR",?(<$;#:#=#=!;: ; : 9 ; $B = ; .H8H3D&:&?%A"9%=%: 5 #74KCSHV ?TR[&W_)bg.P]$N[#M["JY!Vb'Ta%Ub&S]&S_&L`$Tj&Mc#L^$N]%M^"Se$Pd"Oa"J\!I] H\ J\"E[EU DQEO FQ JW!?TP^"JYAV9O7M6K9K*>+? 2 ($~ԬvWsS|Zbb^{VZ[~TtPkEod;nCxk@mk7tm;sEyLRRRLNRQKvDrBzGUSLQ}Kup>zr@JQQN}N|~CvHyCvv>wCBz~=lr7gb9^^3ld9vc@XX-PR(NP'JK%PP)NT'Y\,]^.NV&vo;sh:oe9|n@rApB}mA}iBVN+5:*7 8 9 8 %B%B+F-<#$&5F6NSW(i_3_T-TR(TS([U*XU*JP"TR'PM&,<0F.G/J   '%           NB4o^Aub=}P}QWɔ\̙`̕^XVɕ`͘aϙ`ՠfŖb[[YVYWUSQ[’]ZWVTUR}S|RxL~NTTYWʕ`Yǐ[ZZƒ]Ȕ^͓_YXUU{R~TXTTZb`ĞdbɡeÞaWPPQNLOTUXXbW]\OPMJpAuie\4RX(Sc)Wj,5>"  " !(  *+'   KLV..> !  %-:"1 $  #+ %#+-#)  ׽đlgdǟp`x\wTqOiR9mU;nJeDpYSFWATPX%V]']a,S\&O^#AQS_%R^%O\$T`&X](W_(R\)N_&Wj)Pb'CV!H]!I`!O_$U^(AS=Q8N;QNO)OR)QU(da2V\*SY*W^+hf5tAVZ+[X.e]4VV+_]0cb2JO$VO+*9$;A ; "? 'C*E0K)"-DLS"WW*jc4m_6^W.VV)WP-TP+RQ&HN!/E0J+B          IC2RK2F=4nZAlJVǎY͓\͒\Д]W͗`ǒ]̗cЛdŔaϖ^˖\˗aÎZ̘aҝdƔ_‘\Ӛ`ƐYǎ\ʑ[ƒ]XYcSQŒYWSSQ{N{N|PX‹YUΖ^͔]XČZ˕_Ԛb͓^͒^ɏ\Ǝ\Ď\ʒ\VWTWZ]VZYX_Śb͢dͣdƝ]LKzGPPMSRVW]Y^bXTQTNxIpCfY4YO-[P0\R0\Q/RO)\W/i`8pc;}kBm`9^U0OY%U_)Y[,KQ':?$   $ '  +)   $ 'ww{/   " $ "!0 #+,   &,3   ׶{ŒqjΥx˥vͮԾuegHpW;dO6}aAbBs]=BD"0;5 3 )<';&;#:": :7 6 #9!88 : $?< ,D1B$<%@%@)D/G1G.F8Q9RFXBTOW$SY'R[%W^(]^+X`)Y_*O]$S`%O\#M\"MV#ES"DS%]k,\l+Zi*Zk*Vh'Vi%GZ ES"BT6O9OBTG[ @T8G8DBKRZ$L[!J[ J]?T8K3G0C,A*7%6"= )A0F-D.B*?*>+?(;*;"5 (6 #" !$f`ThM\_ggcd_[}W{VlLlG~mArCLTVXbbXRTTRZVPQXXWXX]ZTPPPzJxLvMzJj}PnwP[^1XV0f^6zi@qFrH\R2ZV/WZ+RY'QY(\_.TY*\^.~rAul=LT%JQ$``/gf4IS$8E?H->%E ? > $B %B(B*A 5C9PQS$\Y,{k=h`2US)aW0ZP.UM*OM&LO"9B+@-D1M(& - )  &"RE4wJxItJ}QyNTS}QXVRSQÌXϘ`˔]˓\љa̖`XƐ]ʔ^̔_՚c٢gԟe˗_ɓ]ӝcȒ][jZPǒZVƓXƑXOPP}QWŒZǐ\ōZËXʑ\˕avۧj֞cӘa͑_VĊZYUVUYZÍ[đZŐ\̕_ї_Ȕ]ͣgѦfΣeȡ_VUSWUROSVQZĠecXVFPV\V}OpFh@p\:cT3aV4cY5i]9se@td>tc;`V1eW4[U-\]-[W.MQ$KP$3B/   +   %,]^e#$6 '    *#%4 ()7    ! &   &( )$(ҧoܳ{΢skϟq˥sƷοʿүšmhHmU9gQ6lT9qX:F5F-D.B0B5D-=&;%;$<"9 7 66#7!78 ; &@; &<,=$< ; != /H1I0G=T=UCX?SGTXX+\\,^^,PY$UZ'\]+Y^)PZ%Ra%Q_%NY$DT H]"Ob&Xi)Uj'Ne#Xj)\m*]k)L_"IZ!Ma#:UrHma:NO(MQ'VV-kg8X\-[`.\`/@Onl8eg3Q['R](P]'ET")?)<#(5F9LOV$na6xLk_4NN%WU+XR-UO)RQ'EM(=)@-G0H      ,.;9;F .0<,.:#   ^I3dBkFT{PyNxKxNqIvLSnJvNUYXWSQŒYɒ]ǐ]͕`њd̓^ɒ^͖a̒]םdܣj֝fċ[Ǒ]ΖaǓa\љbȐ[XVÒZRORUTÍXǎZˆXWTU‰Yɑ^Ԛcәb؝e٠hXWQVUTUVȐ[՚`̔\̒]Д^ʐ\\̣iͤgʡbǛa[VWXQPQWX\ѪnàeYRQR[[[TsFlBkDp[9^T0WQ-n`O5G9F:E4C6E-B.C.B1E*@-B-A0A/C0B,>)  )+6 ~hQvV}[aϧx~٦sʛhƘg_zUpMxMuGuF{JMNSQOLNOTTYY[\X[YQ{KS[]UTQTZ|Rk{|nLp]>o]<gEtb?qHoCYX/fb4me9ff5wEzJih6[d-[f-X`-FV":L1F.C?U&GU'BN*C#< : !< "; (=.A,@2>*;9FIQ!]Z,{i>qHn]7cT1^Q.[S.OL&OP$4E-E,D/G)<$&4,&  #" 8,%iP:z_A{^?tW<~_?b@gElHXWyOxOTzL}M~LtKzQ}QÌYUƐZȑ[TSVXZZȐ\ʓ^՜eמfڣiۢiԗbZTXW̔`͕aΓ_čZčZVTWĎZÍ]˓b̑]ƍ[ƊYɌXňXÆVTUTSVnjZWɏ]X‰YVT~TVXՖ_͐\͓]Ȏ\|SzUƌ]ϢhѤiҥfҨgѩgWYU}NOTZÚbͥk̥j[RQ\][[SPR~PrJgCp\9sa(?$2$  #%   //; "( )  %)+" '    0ѧr߭yԨzΣt`e–jǩϳğs{W˥w̤qŝl]mHw]=x^>dEn\:XU++=8 *<.A.E.C.B-B(>&>(=.@(='='<'<#8(<#7%8"8!8 "9$=$<(A,E*B+C0G5J9O@Y9S>RDSJR!MR#UX(PV%P@Q@Q;JFR ER 8J4F3C3?6A6C4F6F9I;M5I6J5H6G2E8I9D "+))u{gLkP`ᶂ}ܩrɗhbuUwUVPRQPLMQQVQQRRUY]YVWR~KM[b\QxO{K[`eU|Peyz\te=oa;tc>oG|iC~oC{kBzMfc5X_-GX$^g0We,J\$`h2Ya-7M4L7M7Q;REU 3J*B#?; < $=&>,A,C1G&/%6>KL#YW*ja3tJiAp\8kClB|g:SN)RN&+:)?-D1D&!*,8  $tW;fBa@kFtGsHrH}RtMwNR}NsGmD|OUKMN~NTUÏXƐYőYQ{NVTXZ֟iӚgՙdԙd٢iܤk֗cǍ]Ə^˔aXZT}RVnj\\aː_ʏ[͐[ˏ^ZVĉXƋZƈYWSS†UT}Q~QzPwORWUT~TUWё^ϑ^Ō[WX̛bԠfҟfФiԧiЧgZVYS{M[XTƜcЩnȣg`YZȢcŠc^Ġ^^XTyM|OrGkCud=vh?vk?oD}oBxk?wg>qc=]V1QP)QK(6A%F/L$#(  !0'  ! $  ??ILLU||//<        ((6&'5a丂ݶjdwǡuʟměkŞpԱɠnf{ScBdBhEgFsGzh*@;HK5E%8$7%7)<)<*<%:$9#<'>%=&A*C.F-D-D>M?S?X6P@RHR HQ ESMW#KU"DSFTBQIW!KV#KV"JW"FS!Yc)Vd)Qa%L`#Tc'N]%HX"?Q?SM]#GY!IX"GX!9N9Ltf=}Q~Quh=vDbf1O\(L]%E[!H[#EW!:Q9Q8SEV!EU CT:N2J(C)C(A,C*B&@ < $= ,77")8@CST&\X+pb7xg=d\1u^:jCpFh=`V.LM#,:,A/C4B  3% \?d@`>~_=pGvIrGoEuJTWUsGwJrGQS~H}HOOVQUɒZ˔\VSQsLxNVљg٫~բrМlϔbӗdГb̑_ʑ_םfїd^WxPUZhZXVSƋWUW‡WUVWSRTRRTyO~RwMVNJ\~T}RTÇWVʋ[А_ąYȐ\ԟeةjשjϣfթkϠeǒZɛ\ț]VT[[OƜdѩkɣd›aŞbš[ÝcÞb\ž\ğ^ZXT~SuKyMpHzkA{k@~nDyk@th=uIod;e\5XQ,PM(@H$=-J,D-+ #%'4 !ZZ_77C   (@AL k仆˗ڷ˜n^rqƝuΣqcɣqg|XfHfDeBdCjGuEwH@F!7);1F3E3B&:#6%8)94B.?);$8!9 !: "; %<.F,C,C0F5G;MCVN=QDUPZ%GVHY FV@OCPHT!0BSZ(^d-[h+Sc'I]!M^#Q_%O_$Oa$BVASFU DQCSK6>.?-?6F7I2F3H2H5H8H@MMS& uYҲњɓ⻂{\`aXRNMyJwJvEtCyH|KRTQQPVYZWRQW_^b__YVSTURwOuLyNpIlGlB~kCyiA|iBpHzf@lClD}mAyLwIsDjj5P]'GW"BTBLQ#WX)\[,hb4`V/gT2u_:d?~e=iY3EH /:0D4C-9 \D2c@][O/MG'RP)CK 2D/J#  !. #4(    88Bffj* " /!%4 !023@  țoٱĐЪ{Ɲpe}Y^Ӫ|̟qd`azXlK~TzPxOYs@h_21 3 ";2I/D/DCL#4A)<)<0@.>(;+;+:5E>JMM>L>M9K>L>P:G0<(:->2B2D0D1F1E/C,A9GHQ%!( GEAѣɔŐǍ͠nĕg^[WU|O{NzJ{GzDyF|JPQTY[Y\_YVZZX_c_db^SPRPzM{F{MvNnG}lArh>|iBlEqIoGgBhC~fCmC|h@hBuf>ye?c\3PV'8R5M9M=P0H0G-C3E3E/C,>(;+>(>!: 6 3 & ,.NO-9B:D:IUU)PS'\Y,eX2mV5oZ7mW6ya5D9D+>0AFO#@PPW'QT(QU(!: 9 9 $=)A*@3H/F0G1I9UEUAQFPAN;O9PDXWk(Nc#N`#HV!BQ:L?N!_f-^c-]g,_i.Ye*Yb*T^(K[#J["BZCXGV @P;M=NN:I9H@Q+>+>*B9M4? )sn]Мڣ͔潃ӨsƘieaZTzPQL{E|E{I|L~OPW^WXX\\^[[Yabcbf`URS{OtKxJ~O}NrFlDi`8vf>fBhCmD}d@jEnHqIpHrJrHxMvb;`W0HR#2K8O7L*B'<8 4 2(5  :?#8??C>FKO#k\4`X/m`6kW5jT4s]9^O/[M-JE%!2#;*>+<hU>L;0cG|[lR5oU7vX9tU8rX9nW6sY9nV6pY6s[8x_;uJzLrD}IwEvDwG|KRSOWÇVWzUҙc̒`ÍaӘdW|R~TZ֟i‡ZNj\YĊZ֝iךf՜gsPwQ{T|T[Ţ_ćWLjYU}QyNVUYU~QWXP~PuKnIoIgEjHuMUό]ăVVƇYTŇXʈŻYˇYƊV̔]̘`ؤhݮoݯqԡgȕ_ϛbԥfҤeΟaϤhœb[UTQ\``ZXXTUU\Y~RyQpItJrFtBrDnDj]7\P0\M1WL-]Q0]T1PN)AE/?$13'1%     ,+  &+  (' -4@)1=58D-.:HHQSS[MMUEFMoor''4    "" !#0!. L:5›nőڹʩ{պÙjǚjŚpͣxʞoj_]{T_]Y|eBKN&01: #A-E'=)=>H HP&)=&;.@,>&;(<3EEP!`_1le9Z_,5I#87 8 6 !: '?'>'=)@+A'A+F8NJ?LH9J7H9J9H7E/=%6&7/ &;/A6G6E1@)9&:3 6 (= ijءÌ۲|دzЧr]SRRUNILROQTUZ[_]][\_[Z^\_b_bUW\R|PyNQMrF}nApi9iCqHvJqFkEiFnHvMuLpGiCgCk\9YW.LT%5L4O,H'?:K>M1H8L7G3C1A+@%;6 3 !5 '6 &3>BGF"OJ&NO$_U.eW1fW3cS2s[8}dqV8y];hAd@|[<|Z:sY8r[7xa;s[9mR7hN5`L1kBj@nBl@hAmDRPNPȏZWaܪqܥnĕkɑaÇZĉYV~TU~SUÊ[Ǎ\̐_͐_ѓaĆ[Y~XŝɻiƒYʇ\WwO|RWÆWT}RsLoIyN{P{PoIwNyOoHrHsHxL~PSÉXƋYňY͏\͍ZU|TȍZϗbנgئkޱqݱrڦjϙaԠgשm׭l֪mͥgWZʢc_ZVbΨl̨hš^[USYa\Y}SZXuJ|HtDqHvd>[Q/XM.IF&]U0bX3^W1UQ+LR'XV?LO2)      +)6>  ! ! !/    :;E*,8dOAˣsĐЬ|ásȦwȟq`˝nn΢uխ~šoƜoeZ^]iI_S4$6)8; /L7N,C)<0>FN%:I(=%:)<+<%:3DGP"WX+MV$@M-B"85 6 6 !: (@'?(=0C.A,D+G2H=L=H(zf˔͘ǒױ}ɥt|UTSTTPLLSYRQSU]b[[XZVY]dd`]`[XQWcZSU}O~MyJum:nm6rEoB|n?rEiDfCoIoIiHdChFo];]U1QW(@Q9W8Y,E)@/A3D6I@N'>5 1 5 *; &;FDG @ITP'`X.xd:g@jW4~c>e?hY2XQ+IK#2;-?1?!y`F_X~XxSxQyNwNvLsJlF`=e>gBiB}^;~a<{`,=*;3A=J3H*>(=&9.?*<*=0A5G7H%9"63 3 6 !: *?.B.A/B-B2I,E3L9N/>-?3E8G=K?I7E6D9G6H7L8KALJM%3D0@(;4 %70<-:-9) " -,?G"??&(*%/ p١ܨբ֠cYXVUTQNMSTRRSSZ]^[]`VX\bg`_^XXRWZ^[VQ~LpF}l?qB}p@sEvGmAeCq_a=a(E-B)>,?7FDK!HN$EM!7E*>,?!6 1 4 -< 5?4A#-%"{QYZX~TzPyNsLnGzOuLoFkChCb=nFf?w]:uZ9w]:{_D" +$ElHtIkFqaK6D+>2C&81 3 *8 &(8FHM!h\2uH}g?_T0lY5t[9c?[O-@A08)6,?->! 2($sM|UZ}U|QSUiE{_>rIuKvL}QmHa?z^n\:eV5LL&TP*RQ)BI % $%14EK&3<'    &+.'+  CDM  i\Mmྊֲ~ȨwǠqȟnʡrܷŝ`j԰şqwn^ȩ|goY?QJ-!1 ,'DI4@%76;=>!2=%7#3-$  ޞީ٣ٴ۵|ha`Σi^[QRSVWT}QYVZ_abc`ca``dd`dYWPRVYVwKqHsKsKqIwIsIwKoEiCzcAtKwMwPxcAta==RX`+Ya,S])GY!9Y7Q*D+C:L0F)>,>6E0A,?2A+:#3 3 (4TS-IR#^`.ti9mb7fX2ua;{a<|_fBdAfAa>a=kApCoDqEgBsJuLvK}Q~QWǒgb~U‡ZVˊ[͍]wOqJrKsMqMpLˆ\іe՛iәi[À[̈`΋bÃ]ZqɈ_džZdžZX{T}UVT{SuQvPyQzSoLgFgGgEfExPtMwNtMwOXĄYɀY΅[Ά[ԋ]ӊ]΅\І\Ҍ^הbږdߣn径‡߰s߷{ܺzᾂcͧoЬqҭqͧlÛcXQZU^_ͧmd]XPO{JQmEzKoE{LPyNUM,bU4\S0`V3j\9k[9r^?jX9dV5SO*]U1KL&OQ(28!  #'4 *+4-7 .9 '&    ## ! #not  '"'ʧx۴ӬyӱhɜiѪyѬ~۾gh̩—jf`pŮzXcQ7,9 *; "A(@*>1AJN'FM$7D*>&;&;%:$:"8$:(>%>$<-B4F%:5 3 6 8!9$;&<*@.G.F:I$;.C1GDL=PDTFR FV 7FKV#IV"GT!HV!CQ3G,A.B2F4G1E-B1G8L9K;IBM>H;E:E4A=H8D3@$4 1 +5.5/ % !%   ߠŇ伆ʏѩpΤlٰvڭsԥnǜfŕcVVTXXbYX\\`dee`\_]ccbbQPOTRUSrIoGoFrIyNwJsHuh>j`7k^9j]8tj=rEyRjFzb@2K5SHW"GU"OZ'ET!=V.G-G8N;K8G*<#8#9%:$;'=(<(>+@*A,B(>&>)@1D9M7L&>)<.?3A=G=H@H:B?E9@1<$5- '&( ٥罃~ŠɏҮtʣiΟg֨oəgѦpݱzТm̜dĎ[ŒZĎ[͚b̗aǔ_ədĕcϟi˟jƛhɝkרqȞjh^]\]V|NzKzJ|LU}P{KuJkDgDfDoHnG}kBf`6XU.^V3ZR1`^2ld9n^;o[;y`>2D@T1I9KHU%GX"CV:KBQ4NG/=1<1<9>%!#NM)UP+cY2kCqJ~c?q\8YJ+NC%TH'TI&>=$0*7   NA5rh[yVoKÐ_YUTWTwNmHiEiDgDeCnHlHbBcC_?bB`?dBe@nGsLzPxOXWyRuOWȌ]YYŇYё_Ɉ[ÄYxRrMrLnKoL|TWБcѓcГdяaϊ\Ӑ`ԐbXYlj]Ֆfۢm؝kӕeՖeό]ˈ[ƄXVWrM\>cDjJhHmMpPrPrPySrOpNƒZƇ[„Z͉_ЌbЇaӎbӐ`Ҍ`ԎaҊ`Ӊ`ы_Տcߨx͚Θ待ӵ}αyເ|ĈۻœbMQVZYȠgşgYW|OuKuK{MwKsHxJoBtEpd:}oB}O~lDnEh[8aT4_R5dU5[T09EOP(i_7oa:cZ4FH"9G8G&2)  $1"" ?5/lֺɗּа~ԭ|ʡtmiaȦ™p˧hb[eIx_D@L!-@*F4O'D3Q>T8K&;)=&;/A2E.D)@1E'>!9 *@0B0B.?1C1D5G1D4H1G1B/B0B3A1C)?#6+ ,:2=4=(3%1'4)7 1 - 4 2G!&;) sqrڬu||Ɲc^XWqSYɜhҠj̞gƐ^ȏ\ʎZΖ_ڦlԠhפlԤnӧr۱y֭wϣoˠmbbcǣlaXP~N}NPO~NwJtFkDkDkF~eCxk@tn';&<)=(<+>+=$9$:%: 6!7"8);$8%9)='=%=+A+@+@&;->2E1D-B*=.C)?,A0C*>.<-?-D/G.D-D.C-?.@.@,>-?$:$5,;9B.;*90 "3%6/ / 5 ,@4I#*<# *(/Ҧtzܵ|›cYYrS|Y^^ˠjԡiΗb؛fҒ]Д^՜eݪpاn٫tԩsخwݱxРlafƠlhf_SVXQ}OvK}NtFqDyHqDzj?ra=b_5W^.W\-WW-_X2j]8`S3UR-YU/k]9hGfFiT7[M/EC":FBR >R4Q:Y2L1J0G9M9J6DEL!CJ /<+8#4&:7&FI#NO'pa:|gAgBfAbS0FC"RI)YK,/7(7&' NC9aUxQpLwNtLVYWY]VnIdDgEhG^?\>^?cC`A`@`?bAeDjHmJvOoLqN|UuPxPYƍ^É\X|T}TV{TqNoLuP}UWӖeɌavT{Ủ^͋]ό_ɇ]Dž\X}WÂZʈ\Zˉ`Ą]]_\yV}WÀZyUvRyS‚[YÇ[XXdž]ǃ[ʃ\щ`ܘiޞkܢnٚiՓfьaՓfؗiۜlܞnۚlۛkޢo丄ҢԢԦƕể~խvׯuܼ~ʋܳw͠gɞeę`ƟcœaYYYYV}RsLrIpHwMxJtElc9TS,KL'oc:ui=b[3TR(NN$SS*c[4WT.XW-ib7a_2d]5UP,NM'7?"6#:)?4B# *  )!"K>4delέ|ͤrΧyck~bȕkΟqͤujfJbO9ON+:I%=*>< /KR\(IU#0B,;.?%9':&;&<%:&:&: 6"8$9$9%;$9%8#7$9(>'?&</B/B&7(8.@0B0C(<,?*=1D/@&6*9.A1C1E/C-C-D,A+>'9(;$9!7&7-<6?1?*:!52 1 / 0 "7 1   iŊ{wܫtѤmȟh۹Ɠf~[\Őb޴|ۨoբhΕ`В]є_؝fҚdբj߳z۰xөr׫tӢm˜g˜dƟjfeaZWS~PSzPoHzi@~l@qe;`\3\[0`\4Z]0X[.WX.\[1aY4^T2\W1YX/pb"4=>SLZ%3M6S.K1F'A*B9L?OAL5B'4' ZT1GK$\U.eX4VN,o^:\P.GC$9=17'4(3!"1 Y]WuOjFiCWWWZÏ\R|OqIbB\?aCaB\@^@{X;b@hCgEeDgFdDrMgGdD_BoKU{QyRŌ^ć[xRxRySuPrNqOtPxRxS{VNJ_oNuQɇ\ˊ^Ɖ]Z~W|UzS~UzSySŃ[}Wʆ]͊`ȕqszZtTpQwUxV}Z~Yń[̊_ƃ[ȅ]˄_̈́_Ӊ`֍cٕgޡoݟoۛlٗiۜnڙkۛlݟmtvxϝǓئǜǶۮxذx۶zްuӥl[_̡e–^ĘbR|O[UtJdZ4oHmGtKsHoEnCd]5FI$CJ"HO$?G@E>ECJ!IR%HQ#Ya-QZ)^]0\V1QJ*CC":@/=,;->8DCL"/2 $RV^'$'-)#!{Xb]ƞmѨvحol}lŪiŜpĘk`kLqX?EK%AM&79!?8OHV#FQ"*=(;$6%7&8&:$9 7$7"6"6$8"7$:&:#8"8#8)>*@(>'>+A/A1@/@+@,A.A1?0A+<2D0@"1*</B(<0A,?,A+B)?&:#4"30 !5'7,:7A-:/ 1 , - / . +     QJ@֠…{龄ҞjϟjݹҜiˆ]]Ñdߵ|ܯuզmԞeҕ`Ҕ`֚d؞gݨn{ƍݴ~گwۭvجsbƠjğkƠlŝj[WvKuKzO|QqK|eAnCi`7[X0gZ6nf:ie7ec5^^1ZY0oa=eb5[Z1b_4jGl`9dW5aP1NF(MF'FA#&94K;O4J7S.M.F1H0G,D3H,8  G>4WS0e\4yh@bX2UQ+LL'TK*WM-;? +0 -.;  cN;uOoJeCgE[Ȓ_XXVXRsKpIqJnJuMlI`B\@]?iFuJtKpIgEhGjIcE[=tR8^@iFzQ|TXĈ\yRVvQmJlLrOxQuOsOvS}WqO~WÄZ͌_ń\|WyTxSxSyRnLwR|U|UɅ[wTrRtUvWqSiMiLrRZ|Y~Y~YόaБd͉aҌaӊ`ԋaڜkޢpߢpݠpٗjۚm۝oߢqvwy꼆ΝʓɓרҧҲ޻ߴy޵~]ȟhȘbȞeѥmcdYyKpa:KI&i\6pIpIlEzhBwf?ti=]W0NP)8A6>8?3=AH S]*;I9G5CAJ PO)NI(==AA!9?5>0>GEK% '- %'"" ^oqǠmѨuǚqu~dhy[ekεȥ|[tPwT\Z/%<!7 7#:(=0C1D/@EL!3B5F1D1E/B;D5D&8&9/A!2*>*?4 .B+@)?"7 &81 #2&3) . !2 0&7)7!0&227+ + !   aXNТ弃ڭvСl߬vˏ`Ď`̐`͐_ɍ_ʖhᾄ㺀٭sѣkȒ^Εaċ[ҙe߭s۬rܵ|ᾇڴ}ٯxԪtǢlĠlžkŠnb`YyNtKuKsKtKmDrFna:^[1TY+id7ab3eh4ja8e[6|jBsFeb5k_9eDn];NN*MN(TR)UQ+2C-CAQ8K4J5P1M,C.A+=&  <5+qHSz@yo=51& '"#1" aEnL_@}YzW;\>aBjFmHxQ`WW}SxOqLlLlJiJhHvQuRwQvQ|UWX~VqPqP{TÅYąZVzT}TVW{VuStSoQuVzZtUvUYă]͊_ɂ[Ї^ؗhۡoӎaؐdؗiޤqqߠpߠpܛlݜnޡrޢq~贀鴀뾊ϜƑǎϘӞ˖ھʫwڿz٬tǚhٳ{ĜcͨnҬsc[Wwa=dQ2YN.dX4pJhByc?xgAqb=vh>bY3ZW.NO(7>6>FK$@IFQ"CP!1?DK"UV,MP'CG"6<=ADF"5>:A3@.>(8$3"   qTȞpe`aśkhkaz[{^s`ÞtͭZZ]i_7@S :QOk)M[(7K0@BO";G1@.?+<+<,<&73 0 4 $63 !8)>%;!8%:%:$9&;*=2B,=5E3C1C0B3E5D3B.A)<,B.A&81 1 ';-@.A(=!52 1 "2 0 %'0 !10 !0'4.649* (  C=<߼幀٤pyΚh~W{UÉ\ʏ]Ċ]Ŏeٴ{޵yجrةqʕbYYҞf֦lʝgݸ޹ԮyҬvšlȤq˦rg[ZZ~RwMnHsK{NvItGj@^Y1_\1c`4][0]\0b\4ZY0hd7nDsd>}gB|dAcW6aV4WR.VV+RR(7K.I1E,C5L8P2K-?0>  JA.GA. %!.(%PA5yUoKiG`AaB}STS}RuMmJiFyN|PtLfE~VI[a.hb6nh:WY-IM%JL%FL#IN$BF!6A(;!6 )>(   yWe\[dcf}_b`ouV`ȡsЬ{_xUyUmS:BU!;SK_&GW$DP#:GBK":C0>3@1@,=/B$72 . . $67D$9&<-B*?,A(=)>)=&9*:*9,9(?(B,E(@/ -0 +?.A.B/A(:!2 - '90B$$8$. . . , #1*6"/( %  &"(յ‡vsڧq\V`̒_ƈ]ŋbͥo}ۮsܰu˘fÌ^ZȐ_إmէpٳ}Šس}šoàlɠl̥p™eZVwOxNrJuL}R}P|M|K|j?dW6k\9vf>pd;_X2_W1b[3ib8~lCqeqKZZTyNSuNpMxQwPiHgHtPuP|UmKmLsOnMlKjKjKfIeHtRsQ|WzUyUsPmMlMpOvR}V{UxTyVuUsTlOmOnNyTVɐ_nj\ʑ_Ҙd֞iԟl֤p{zߤrޡqy浂蹇ŗ͟ύΜП٫ӨХȕÎĕ澃~yۧrbSbզpܮuϢj–bSkF~SwO}b?jV6s^;xb>q]:sa=ue>q`<]T0VT-MM(`Y2a^2hg6zq@^\1RV*qi=ti?od<^^1VY,KN&4>@C 4:0;);';!6 +  ^eŖgfnɪgahfgn]pmb`zSte?5VHS%BT#;THV%DQ#9C7B4A1@2@+<3D,?%81 0 2 ';-A&;3F8J7I0C/D)A.?+<&3&67F2D+?1C-A'<"9 &?'@#:/ -.$;,A+>-?(9 1 - &:8K.=R0. 0 "1, - - !., . $  Ɗ؛Δ轂٩sȔb̟jҜgȊ``šlǣjԬnٱuתp̜gϘfϔbō]٠ix۲{ʏ⽄ʤqΪuϨṣnb_fYyOpIvLoIxNyMzJuGpErD}kBvb>q]]@mJnJoI{PwNwNmIyNxMnHuMkHbB}U:nP4xT7vS7]?qIpGlFeB~[r_;jZ7j\7BC";@UQ,HK%jf8ul>ng;rj=kd:pe=pc=FG%9A8D5<9<6;8A3@)>*@3   ``dhɬ{϶p}p^ƪulhfY\lf=9XER$:WMl*Se,7E6C3A/>,<-=->0D@Q3F.C+A,?-=&6"31B-A(;/A+?!7 8 (>%;#80 -/ 7 -@.@+=(8 1 + + %$) - , 0 , + ) / %3$  xl]ɕި٠Ȏ֨qңl̝iʎa^`\\ÜcӨuԣm˖d̒bҘe͓bסl߯vݰwṀ޴|װyˤpŜg_^œg[{OoHzOtK{PSLvIyJIwB|nArd;q\vS7jFhDjCiDgCgDmHwO|QR^vMwPuNuQqNfGmJsNiHfGfItQzUqOyUvS|VwStQqPnNqQkNeI`E^AfHiKbGoQkOmNmMoOsStRnNuRyUxTrPxSȑ`ϘdЛfӟkܱyתsݧru߫u辇Κԥڬک٨ȕǖ濉|{߲|‰f^Šhʝf–`Фmg\|QsKUnH}^=|_=pY8lW7ya>nX8eU4aT3iZ7_U2bW3^V1g^7kg7qk;kh8oi:\Y2^W3LJ)28'3)59=@@ 8=6;2:4 &>"8 $' (  &&5((7,))   (#%tSfemiȡpnhxay^w־ĤmѶqZ~ZuiB7\B\!Li(_y6Ta-4B0@4C2A.>,=0@K?L/A)>.C*A-E.E)>,?);%83G6H':+=,@%;%=(>(<3 / 0 2 4 ,=+=,=+;+:"2- %2' , , & * * ( , 1 3  ?94ɕњߪ̕ժvΞiեm٬tћiÒc`™aabÑe٢m՜iנkإnӘdӚfڤnw߶|զnҥnŜg—c]_aT{PUvLeBoFzLyJrEuGtE|o>ve=jd8na:vh?xkAqheC\>aAcAmHqKuMVTzQsNrOjJnLwP~UnJaC{WzUoLzTʼn^}WqOrQmNkMoOsRuSgJbHfIfHjLfKhNkOlPtUlPpRvS{S|StQnNqPyUʐa˒bɏbИg֡l֨qޮvߨs|ǐݴץæѪɗڱ˙߰wy؟o؞mžgfԨoϡh^˖ba\}QyNWnIkEc@x_LO(^U3RL-SM-^W2^U4NI+FG$CG!>E.;3 4 %; $ '!&#$2 YL=cʣqa]eƠxg{ys^Ȳҹm]otlO[a1/SNd(]r2hs9MS*=E"?G#8F.>3B.?8IEQ"8I6F5FCS!DT!AP BP 9J/D(>&<(?,E.E+@'9$8$8.A=N5F->3D/C*@#:"60 1 / ,2 .=.=1>4B6C-="2'6'6'4%2"0+ #2- *0 3 )ʮ}ˑʒסϱ]Ҧn֫s{ǘgΩsdɗhÑd̕f՝jڢmӞi׬sҞhϚeɔc٧pܮuԧoӨoȝgƙe^Y`X\QgCp\=ya?sI|LsGoBxh=ti;rewW9sR7rR7dEdC|TzRxQsLtL[=|T:bC_BW}V;W=vS9hEwNxX:[=fC~PWxPvMoKkJkImJqLqNaBhInLpMxRsOoMxTYvQtRzY~[xVpPhKlMlNvUpQlOhNdKfMgMnPsR{TV[XLj[Lj\Z[Ć^ڤp٣n٨r۬u޲z‡КŸŸɜÏҢٹڵ㻊סqΔi‹_śf_РhΞdÍ[ǒ`[ZTTTmHgCa>|a>|d?lEhT5YK.YL.^P0cV2]T0aU2f]4h`5gb5ic6ec5WW.YU0YR1JI(KI(GE'ME+RN,EN"BP7F7H)=&7   #  !0 ") nmhaciʞpjű{wki^evR]xa_8+O=ZLb&]g2Y`0IQ'DK)AI'0A3B-;-?%82 2 1 3 #75 )<-;-;0=1@1@-=+;,<-;*6+6%1* '5%3- (0 ,`ةr|ĎֳZțdԦoجuǘiذx͘gԣm]^ƏetܥnۦoҞjИcŎ]Ζcўiتq۱vңjS~SU\WrKrZ]@~X;kG`@}X;_?bAbBbB[?{U;[>dC{P~RmGgEiFqJ}RzRtLVxQlIrL{QxQpMjJuQbDrPoNpN~XWnMxSvTpRpQlOiKjLqQnPjNjOgMfLgNiOrRsRpOvSuQ~Vǎ^آjݦnݧpx߭uۨqץp٨rگwŌۮ㷂䷂‘ɤۯ˚߮xآnɐbǔb\˛eƒ_Ď]ǖbZWzQVWiEcAiEgCjDgBlW7fR4aO1^M/cR2aR1`U0]X/f_5ia7jb9f^7]V2\T2]T3]T2CC#6;KE*QI-WS/OT'>L:G#5,9    *!      wj]dg_impuroؽ|VViIx_Ak\:S_*4VI_$EW#LU*HQ&EO%GP'>H#=L 8F8F+=0B;N@S KW'KX&Wc-KX%FQ#2D(?%=$9*=4F:H.C*>'8(8)8,;+9#/#0>-;!62 !43 &:0B1B+</=.:-<0?1?1?.<1>5>-9*7'4!/- $2"0 , ,, ;3/հyԧq}өv͡m^aØfdװyީqΚd\]̕fpnۨrНh֜h՛hϕb͘eاo٫rҤj}OoJuMaBnJiFbO7XI3z`AaAiDlElFrG|KuGqDoBK~JrFrEwi?vc?s`>k_9h`7ac3ec5V]-JN&@F EK#;F2G%7,;(6#dY4wd=r^9uX8aAgElIlIsMwPtNhGbBsN`BZ>|X;Z<`@wT8aA`?[>^B_A[>Z>]@pIqIfDuMsMwN}QV|SVpKxP~SÆXWZ{UsO[?mKsOvT|WzUyUmMsSsSlOhMdJmOrRjNmQqSlQmQtVtVoSpSuTqQjMoO̐`ۦmtڪo߫qڨo՟jӞjՠlګuʔԦŒ仄溄Ƞ;ӿΞỈ֦oҧs™ia]ҟj͕cɜiȖb[WY\wO]=a?b@tW8hDiDy]=x^<~a>pY7z`dY3UO,_V2ZQ0_U3]T2FF&397;DA&JH(MP(6E>I,:7?%* % " / .$#$2()6  .#"E:2ħwáo]cf`Ěnzldhck|kCwN]ʣs\b]59ZZh-HT&EO%IO'PR,]e2Za09H1A3E3C7G@RCT"&<%:*=+A4D+?+>'8%7#0&5&3**7-?,<"5 !5 #5+:0C2F2D1G0F1>2@2>3A2?2>4@/<+:+7&3)4+ ) + ( *&   z[⿄y彆ϥqY[ĝjص}ŊȌܩq`ċ`֚imߦoqunڜhמjЛe֢lڭs٭qSiEcC~^>mS:tZ>gU:dS9yf@dA|_?nGrKwLyL{MxHuGvExHlDuJ~kCzfAva>ra&5)5UR.p`9r_9t]9oT6lQ4fDgDkHnIjF[>rS8iGyPpLbCZ;fBY;{U9{T9`AbC]AZ>bEiImIgD|X]N.ufgbW^defx]`}XYnJśm侇lVW/=QWd,V\.HQ&EP$EN%LY(V^.:G0A,=/@9J9H:G/@,20:1<2?0A.B*>%91C*?6D*=+=(9(7(6#1* *+;0B*:,</>-<.?1D1K0H0G/G2B2B2C2D0@-=/<2=,9#0*5*4!-' & + *"  rڭu龃֭xd^jسxկvϥmѠiϟkĐdċb̒eԕfГdךjޡnіeΖdÍ]Í^ȕbըmWlFz\>sW:lR9oXs`=`e2kc:iX9[M1YN/CE";F@J 3=&5!* `d6pv9AtCjU5bL0aAaAiFoJkGbAjFeDgFiGfE\=yW:kM3zU9uQ7aB^@Z>wS9\@hFlKhEgDjGsMtNtMjHpKtP}VuOvO{SƊ\ː_Ɗ\ň[…[zUtQrNtPxTzSYvRrQeHaDrPdI]EfKkOtVȃ_ΉbҎeЋdҌe{[lPnRWA`HpQץl߯sܬrܯuްu⻀ڲz߷}⺂⾉֬俊Č仄ОЛӡܫקȗݪxڣq՜mkɢq̛jϚgŒb[ÑadYjJhDiDkDeAlEwLkFiDdAy]NES#FQ#2<)2(3/=0B,B':/@1@.B,?*;%6%5!/++)71C4H1C:G@I6C2B1@3H1J0G0F3H2D2D4F0B+=&6'6+8"0'2%1"-( - #5 1    d߶|ֳ}ndbŢh_~Qۺʎݸ͢sbwUzU\ИfԕeYVsOUėaėasLaC_Ax^@s]@xcCrLiIgGlJyQmHnHvNpHdB{cBoGyKnFnE}fAyd@s`=kZ:`]3d^5`W2WO.^O2aR3IJ%EI#9C-;*9'!Uf,gr4|v?mB`@qV8rW8`AcDxOU}RuNpKgF_ByX;|X:uS7zX:\={V:~X<^?[=cB^>hEgE]>^?cCfEmJmJhG`ChGqMwRyTYXyS„YXXWsO`CiIwR{UoMjIcFkJkJmLoO`G]E_HhNvV|Zʄ`ΆbwYgNeLZC`HkNȓb~߭syyʼnܰwĈΑӚ׫Ǔ翈ÍОčʔاԣ緅ܥu՚mň`ԛlНlŽ_]YYZ{SeD`BiGjFb@`?oHsJjDlFjDt[:hB{c>{e@xf@th=tg@{qCqEl\6ZN.\R1TP.ZT2XP0A@#&.>=!C@#AA!=A!2- 0, .#"+ #!oLZ\cc|kbyZjJzRySu^@zQarMཆٳoJRX,[\2DY#BZ!DU#:KKT(dd7MV(KV&6D0@'8&4!0#1%3(5.?3G5G=I?L?P5>,:%5*1Vg+lt7{r~^=|PpGkDkCub=xb=u[:q\:{mDia;xlAypBvk=jY6RM,LK*PM-XR1bW7NI+9:HC&HC&59(4+ * 1 - -  "  cR;zSY~Tbƞmp`}[~\uQ_`jIydByTnKlwMIP'NS*]]3BU"J[&IU&7D_\5{mFSW,DO#BN!5CAQ ?SYl/Sf+Wd+Sb(KZ$?L8@6>,?;IDP"2C;I0@+<'9/A3D9I/?(62C8HBP ANAN?N>O>M4I2H1M2P3L2B3F5E4C)<"40 . - , * + , !4,;'       w߰}iY_[ЪvݹҬwӭxӯyÙh|蹀}Ϥo^˛gÏ^]]\vNrLlGeE}bDkI{RvPrMsNnJrLiGgFfCw]=|c@mFrFwHrEsFi^7RN,TW,[f0Vc-QY+GL%UN,NK(7D;G1A.=&6Qe)av2n{7wm:tDqX7xX:fP2oW7zOvMeC`?[>fK2bJ0_?}^>lO4xV9iL3jK2}V<^BY=~X<]>zV:fEyV:hK3Y=]?cCgFgHqPsO{T̍bɊ_Æ\uQsQvQ{SwQuQsPnMhIaEZA^CeHeFkJmKdE^DYAYB^E\EgMjPrUrUhM^FjOiO{Y؛iۨov|彀}ۭv}彃ܱÏȘޱӟÑΘlآrxԙkɋcć^Ǝbx«ʘڸrN_BbC[>cG}`?zYn]:{jBsj@piBnf=zpCnh=m_:YU0JO'LO)BI$MJ*QJ+8:DB$@>!88-2+ & 1 &9(<$7$+,:!!1-% `W][qǤyà{eαxWw`ErMwRzfJj_d\8BQ#EQ$FN%SS,cnmI6D3AIR%IS#?N L\&Wd-Xc-\g-M_%S])IU#>J3F,?FO#@L 5DM@O;M9Q6Q4M5J0A4E4E(=%:3 , - . $1*5#/- (9     &"&ʠs֪yhӭwɏ̓É㺀ᾆ۲{ݭwy~뾅ΞjǕc\YY|T~TeFdEgGiHtMxQoMuO}TlIfF]B_BtZ=rZ<gAoFqFNSrh;TS,UR.[L2PO+O](TZ,JQ'DH#2@1@3G2A"/ &1^z3b2no7|l=hDuY:VF+ZG-bAgEx[;vU9]>\H-dL0{^Ay^vVvW;U?)W@+XB+lN4iK2}V;|W:ZuO6tV9rQcB^H-oX8rHmF|hCt_=xd@oe?me<{mB|pCrj>|sDmf;YY2EN&HK(DG&AG$FJ'AB#8:36==4604&2$+ . 0     !gWApMuPsh{pßshjKeF~hE[kW;lGdiX:YW0]T3mIzTmJEK%HK'PN+VT/~ZGM,DI#?G DM#YZ.OU)NY(IT%CL#R\)KX$MY&IT$>I1C7EHS%7F5I5E.A6H>NAP@P7H2?5DDN"OX(IS%GR#RX'OV&@N3J3H6L2K3M4G1C2C)?'>';"5/ - + * $2. 1 !     v^بxѥq΢m߭tz踀}vޫu߯x淀߳}ٰzẃ仂ޱyުsИeÍ]uPgGbEeGnLuPvP}T{S}U}UfEzY=jO7lQ8jS9kU9eBnFuISj`7UP-TM._R4fP7]L3QT+LX'AS!-?.?9E7L$3L^*Wz,[u-pk7wd;gDqX;kS8{Z>rV9gDyW;bJ0N?&TD)VF+kMlO^E-Q>(`G0}dOsX?nO6uS8`BbEgGaCrR7~[=\>zXhHoY8dM2aP2jY7ua?m\A"A?"88>=!34,037& $- ' '  +"$$5(5.'uOzSjfbho^hJ}Qg֩v~XnJҪvh`:h^9xgCuOnIrKWW1`X5vKQS,b^9FK&b\5DQ"GR$SV+KI'LP'?C"T[+[a.6@>J ?K8E3EDQ"DR"4C4I4F/C:MP-=2B1@CF&_t1dw3sqBmr6}GwNRD+RA)taGlQy[=_I.K?%QF)TE*[G.dM2pS7cI0fM3dL4}^AuS9~aIkM4uT:gHtQ8hM3rU8|\={ZxW>xW=\A[AaC}X>tQ9|W>bEdF^B\BjMcI_FaHeKhLvU{Yɇb΋eؖmהjזkٚnؘl֝kܭs}ݨs۬uСm޽֪Ð߻仃|٤qتvḂӨ㹆}߫wߪvکsթr̞k͚hϦyĞ̜iUkK`C^AcC_A]@pR7_L0gR4pX:|hBrIRzOuiAlc;of>nh>ea8We/KW*KO(FH'MK*KK*KG'<::7>;658;38$  ) "1*  '! =4,|fDmK|Y~Xed]]oNtKʥqƕgןpyT}VuKxfBUwQwlHsm@tjByiD{lOFP1>K!TW-V`-Se*LX(=E!69??!TW-oy9jo6W]-PW)?O P?R?V?R?N?J HS$KW%NY'OW'JT$PX&U\(JX#T\)QZ'FX!AVBSGU"JU%BR @RAO;J6C4C4B>F7G9F1;``tQ]`ć^נlәiϛiSzQ~RVUWgfצo˓c‹^yRhHxRsPxQ{SZ|RjGaBrYSP-\Q2XK0]M2YL/RX*HZ$9F0<%5/<1<?G%]i0np;|tE^i.yv%MC&]K/XG,L=&iR4sW;kO4wV:jO4pR7pS;w]EcI1vW@bLjK3bG/WD+jD}PVYV`C}Z>|[?yZ>bBnKuOzSuPjHz]@wY>^AyY>rS:qT9{[=_BaD_C~X?_CcFdH_FaGaGbHnPjNxXvWaʉdʅbȃaȄäcόeˋd՚jܪr~罁ޯxץrݮ{仅ԥrcgᾇ亁޳zѡl\k忉޺˙㷄ޫx֞mդo֨rۭsתsĎ`ɗhZuPbD_BmKmK_BhKdFjR6v_ArH~P~OTytEvnHi^;oi?if<_a5\^1Y^/VV-SP-TO.GH%>= >;1322:9<@08! $*  `Q8w`AnJ[b^y\wT\tdCzMƝjžn^~WlJuOwPnb>c]7c^:og@pPrSokJIT.LU)Q[+Pc)^h1CN$@J"6;:;=B#hw5gs4Vc+V]+DR!LX'P`(;I3C7E-B3G:J;KCS @T@R@M @N HX$NZ'NZ'LW&HT#CRHV!KX$R\)MX&HW#FT"FT"DS!CQ!IV$DR!@O;I7D6D3::B=G5A6<#bQBarPeG|W\Ìaȕf•eW~R|PW[\g\fcY{TzSxR{SxPX~UqL~aBjS:s[~RWuNrPjL_AtW!10*'%*bt2fq2^f.Ya,GX"P^(P](:I2C:I3G7H8G3A2C4?&##$6(WA*L;$\E-bH/[F,bJ0}a?`@_?iHcDaCaCfGtP~VzTrOtOjI`BiFlGiByd<~h>xc<e>c?gAkCkCrH~T{S|U}WrPnMoOmNtSzXDž`ԒiэfԓjюgȆ`xXɉbԔiڜn؞oלpЕjءsةxέ߫yǙiZgFsZmFzbCmJrQcawW}VtQpLdֱy߹c`T6tNVXhZ;UY/Z\3SV0WX1LX*NY+BN$U^.Zj/e{6Zo/T`,:>$ (dx2fv3es2]g.R`)Xf,L[%;N4D@K!3E/A4E9J+;IN(Qu*Zs-Jh#Wo+kv6z=DMNJN{cg?e>~c?dAt[:kV5oY7|b=iCnHsM|SXvRuQwT~X[̎cϏeɉcՖkԔiיlҕj՗lӔkАh̐iȋdјmїlќp}vۭ{rQhGeO5eC×iƿĔ۪yءrқnҙmԞnқlƑeԦs۪vˑbƍ_XÕngXzSpKiE^H-U@)[F,SA'RB'L@&UI+xk@znB\\2fi6Me)lj:OO*<=&.%--2PI*C?#F>$?9 11:9@? (-"  %# ^Q9jHqNoIZ`[qPV}cFqNaҨrѫtϬxzgFk^J # QW2! iMsQ}V_ċa~VeEbDeF{SYSyOmJiGgF{[@yZ?tUsY>lT;pXu`?waA\M2VH.VG.JP%SW+X[,]\0YW/:A5?2<*;@(P^*Zk.Hc"Tj(^m.by0z{?yHxBtBxIzi>{f@t\<`Q3\M1]O/aR0k\5F>#C8K<#XC*N<&^E-ZC,N=%M=$G:"K=$TC)XG+dO2`AmLoNnMjKnMxSqNnM^AyY=qT:uW<}]@gEx]>v\>~aA~`AeCx^>mV7fR4mW7rZ9t]:jFsMVxRjIrOYŠ`ϔh֝n՜m՚lʍdȉbєj՞uѓj͐iʑi`Đgɖkegzȝq^jS8gR6pMgĦʗ۩wۣrΓgәlΟm̘h\\^É^ZUazVXzRlHrR7\F,VB)VA(Q@'I>$QC&XG*sa;ri>VZ.gi6^i2\b1b^4ZT/&-).AB!OG)JD'H@%JB&,07:;=%+ #) (C<*ybChH{\mivcvObR8\M5wQm\q^B}VdT9mJm\=aT7gZ:]W4XT2LP+Yb0YZ0fd8CZ"[t0Vw.Wr.[o/Yo/\k1\f1an3Ym.Rk)Rj)Og'Ri)J]%7H>I#=N!8M6K4KF!JT%LX&Q](Wa,bi1T])HT#6J2F?RGZ!FW!AU>R=M;I/@):0A4D:KIZ"BP!/4!!!?H%18+  {^C|`C]b{cDy]BcO7eN7_CUUwOvNrMhGdDvW=oS:aCdDdEcDxY>lR9tW=oW;gR7ZI1YH1[I1ZH1bO6bQ6kW;oZ=]P3PM*XP.DK"QP*\W0`W3AI!8B,9%.SZ/O\+HZ$IV"]g-gm3qs:sp;rq;tk=}oE{j@vg=|j@p\9ND(JB%QI)RF)E=">693<6wiY`J2_I/TA(E: H>$H="QB'L>$OB([H0iO5vS;}W>~Z@^BpT9qU:mKxY>mS9gO5hP6uX<|^@x\?v]?x]@sZ>nW;gS7XI-VG+]K/bO1WJ*cS4ycByTZqOiKvTf]ǔj̖k˓i`{YŐhrϮ˞~˖np|\_dctѠpdDiJēfԤsݭy䳁آq؞nғgݧrʝkѠlȏc|Vŏa\vQ}WjvQWwQ`A}YWY.V`-V_.Z`/W\-AD!/5<@DD"C@">:!=9 H@$89).2:&. '   (*h[9p[>nTwXn]WkX=eU8TVq`@}hHɟn}VgtbBi];]Z4a^6hb9TY.yrAri>db7Kc(my;]x2^t2Zp/[l0Zn/Zg0cp4\n0Ri*Na'Me&Og(I['6C @O#>Q 6K4K9N@S LX'GV#GP$KV$PZ'Vc*Ya-\e/T`)=O8L>QGZ!K^#H[!CX>Q%L>$<5:5>8D;!H>#QC)XG.aK3mR9sS;rT;oS:rVQDX F[ FZ >QBP9G6D3B+>1BK*3*  S@0fFmIm[8I>%^I.<5623194<7@:KC&WI-\J0aM3lT9wZ?pU;pT;qV~_A~_AsYMP^'_e1nm:rroe:wk?zq?f^4VS-35359934?; A; A; 95RF.@:!3063//42G>$B=!OF)\N1YK/XJ.gS6nV;lT9fP6cO5VH-RG+IB&KD(IC'><":8"0, !$"81('#!XQ;zmEnc:rd$I?#MA%YI+jX5h^5ee5hh7]^0ZY.GD$&-NQ\)[d/Uc+Ub+N]'DU!?PCU FX!BRCT AQ?PJ'.7B &#!nJq`>TJ/x_A{UtOlHkX:u]@~cDjS:YG1bM5iT:nX=\J3cEfG}`CfGTF-SG,hS7XI/H@&MB)[L0cS5gT7eU7n]NV_+df4ko7op:vk>qe;tk=sn%OF+=934/04210.-,-,.:695:8XK.XK.NF)VK-]Q0XK.RF+@:#(& "%'! '& xiByMwPfE~`BgL4qQ9dQfS}V>Y@vR:_DlN~XdBXpMkJYXZ]\˓eΓeʑcԚiԖgёcZráxʧrЧrdkI|Y<]?tV9lP5bJ/XE*M=$R?&L=#M>%UF*YG+gS3eT3b_3]c0]^/OS(IR$EV!EP"AK /4)-),+.<;/4) + * %! # )* $FGOTT\"HT(RR,jY:eH~h[qN_Q5`gYtP{Umu`Ao^?f\9ZW2hb8qe>b^6ce5VZ.N])[k0Wo/Zu1Xs/Wp-Sp*Wo,Xl-Tm+Q`)G`$Ia%Mc'Le&7J:K Ma'GZ#O^'JX%ET#MZ(IY%CP#HZ#EW"M>OJ8C$'$  %$ p`@^R3D>%\J3mLyfF|fEdU8_N6iT;aO7nY>nY>oZ>kW=dQ9nMjJuZ@kJtY>v[?t[>|aC{aBdS6NF*VM-MH)MJ(IK&EK#MO(?J ;K1A-A4C  2D& !(4;@MVW,if6nk9qh;sf=qh;h`6_Y1]Y2EE$A>"QI+TM2<:#A<"8797D@(11-,++%)+-43D?#dS5WK-_P1PG)>< ,.#!VM4tMhEt_ATD+[E.nP7tS;rQ:yT=~X?bGkMdHhV7oLoMxSZyT}WpN{U_Y^ΗhȐeň`cqȠm[dĖg|VeEcCqS8pS7iO4cK/RA(ZD+WB)]D,ZF+^I-ZJ,^O0bW2]Z0\^/DK"AP AU?HFM#?E*0!( &*099,7%2+ % %%5# " :=DEHOxxz !bd3XY/l_;m[=wcNznu[mXAT J^$IZ$GV#O\)JX%=K =LEV"DU!CU FW#CS";I /9@P!CT DQ!GS#CR AM>M;J8E3>"#!76%YP4aV5XO.HC&NB+tZ?iHq\>fT9YK3aP8bP7o[?gT:gV;dS9\L4lVH4D(;* &'+D$ )20?5ACL YY-kd8nb:wf?pd>#EA%TK/UK/-/# %!&$)23=; =; >>=>9;$ $ ((0'0  $ ORWYZ`@?+gi4JL(jb9jW=qbU7vcBxMyIiHt`Bn]>wOsN_U5[V3d^6gc9qh>|qC}zDZe0_w3az4d{6Ys0Ql+No(Qr)Vw+at0Th*J_&H[%L^&E_$J_&R\+3F%;-?1BDV!JX%P^)GV$=G!BP!CV!AQ!:HGV#K[$I\#EW"DW!FU#GV#GV">NAMDO >J3>&.#/% ),OJ,WZ-GQ";?MA+nVcW4pa:wc=lV9iP6vX*LO&je6oFhIvRwT|W`DhIqS8bJ1rU9uSpibyRsNiHlIwQcXW~TvNn]9\K.J=$F<"SF)_P/`N/fU3aT0aW0ZW-S_)9A?QAY ?B>==>23%*" # " $  ,.8&(4!,MN,W_,LQ)ro>_U5}kX¹m_CbY6yeCu`BlHlGrbAm`>na>g]:WT0SV.dh6zwBqn=pm=wx@s|=g|7_z3^x4Rm,Om*Qm*Ug+Sg+Up+Og(Ka%M^&Q]'IZ%O_(S`+Wa.=K ,@-@1D0>GV#=I!@P!FX#FY"FW"GX#GY"FZ"GX"FV"DT!BS HT$BP @P?N:F5B0=#'/<&,=@$KT&DT"?F A>#RF.hS9z_AlU:iS9eS7VI/RG-TK.SI-C=$LC*TH/^N4YJ1`O4hT7pZ;q[6LER"V\-`_5`]2`^7hd>WU,VQ-RO+JH'YV/NK)B=#:;FF%TR,FJ$@C .4'"))..2)/153674&TM,VN-vf>|kB~oC}nD{iChT7iT8jdqb;m[7dT3gX3gU2cU0gW4^[0]c0\]/PY)>I@W:O@O BH 7<04!  " " $    69B# KK.^k0Wd.on=f]9tdM¸}dh^:n_>}eEhGqJyfDm_>ZV3^Y5^[8fd@ph=|qCsl>mr:tz>r=h9d~7Wp/Pk+Pg)Rd+Se*Xn-Uj,Rh*Jb&EZ#FV$Mb'Rc*P`)U`,OY)AO".?+:4F8M1:HZ$FX#FW"EV"CU!EX"GZ"CW!DX!EX"DV!GU">O>LC ;C?H!MQ-JR(EK$/5  .2>+&#7 3 ) "1-A5J>NDR!OS(TV,TU,d`;IL&/3JH'VS.EB%55FD%CH"AJ BK 7C2>2>-9.:4>*2,0/3()FF%;=YW.}I{JylAiY7t\?QB2g^:`a0^o/hy4vKb^~^@nS7`K0fN2yZ=iIsOzStLmFiDv\<{Ot];t[;xRWWyP~kDqa[;RBN:D5=%+$ 36& DFN;>E(+#ik5Wb,rh>sm=to>qw=kw9`u3^t3Qf+Ni)Sc+NW)Uk+Yn.Vg,Pa)N['K\&FX$M_'J\&O\)LZ(FS$JV&ET#5D,=*@3BIW&EW"BU ?T@VBWDX CW EV!DV BR CR AO4C0?-<.>*:%27:@25=9"MB*B<#D?%E>&IB)MD*LB*G?'<:!67EC$KI'7@/:0;'34937:<>@!5>)6@F"  $$1$,.  %+ $;*@/G3J9LEP"NR(LO'PN*ON(IK%<=47.1/3XJ,vP}V~UV{QsImEfB~c>qY8aQ0mW5d[3d\4T^+DU#BR!;K3BB\ 9L-5/;2="+" ' B@ 54 /19"%-  GK'sp:RY+;C OQ+RL/wapx_lEjEvcAmGmb=\Y4h\;(CR#BW =V>V>U=U>SBTDT FS!FR!;G0@,<%7#6 '  $)35== 79ID&FE%@A 9>3:4756)-    *2  " ( '% , '<0D5DAHDI!?FCE!@@ >@#+-2IR%MU%YU,! CNAB"YT-Wa)Rg(d_2x\?cDdBgCw`=~hBnHpKuOrNjFs\;_L/[K-\N.o[9sLvNvO~TtLW~RuJ|iCt`2:-3" " %.,3 DFJ*,3   DG${x>\b0KV'FL&ZQ8zo\fXoHrJvfAPviBe[9qc@qe?uiAng>|Fai3jh9qlK3C-=%6#5 *  $*24;?@ 99!!%!.%    #% $4'7.?1;+2,4?D07)2$$?L@J**#*EQ :9$[h,[o-[a.lX8xa@hFxPtLyOqLmGuLuMmHxb=]O/jW6hW5}iB~lDUR.n`R1I.G3G3F8D7FAN IL%76/1($$%1LMP$&/)  YX.gf5X^-OV*:? wkVo`mHmEkExe@wDlj;^Z5i_=VS2a\8c`8wxAml;ji9nk;bj4^j2`n3\q1Vj.Tb-JV'GY%La'Oc(O^(JU%9BEQ"DO!DP!EQ#GS$CS!CS!CS"IX%M\'P`(Td*V_.kd>YN;QE=WHDSD@J;8C@,H8C4B-=0>#1  &+%) * "# ' #5+=,=/=) :B#,$@L IP)KZ%EW"i[6xc?oIrI{QToGYN-TK*VK,t`;n\9`V2p_;o_:vb>vd?zlE~qGzLxNpFoCmDne:Y_/M[(PY)^e0^e0EV"=S/D-F2I1F9DBH!HM%NG)B>!-1!/' ++-4/18/17#$   %-LP'`e2Xa/JT&<@!vgKd}RjDkDkGs`?uc@h]:ph?qk?WU2\X5d`:kk;mg<&!"'         " & ) $8+%+8<09=:(:IR_)pb:|jArEyJmb9{j@zh?SN+QK*VN-n_9mCsaeZ9pc@`[7aZ8c]9ga=S`a1cd5vp>|J|K~rCwFxHsGmC}kAmClCwKvOoIjClg:b\5ma;rd>ug@wf@od:mc:gb6`\3N[(Gc%Bc!8W6N-H(?(A0 # 49FA$KC(B<"*-  )'"#*,2   ## !  (2:RW+S]+@N!-7lcc|Q]d~VzN}jCoc=l`>c\9hcpGkIv^>u]=e]5Y[/]X1b[4dZ7b_5Zb0Sa,P])LV'FP$=R8S6R2N-D(>$2"  *+<6./47%   #! & ) + #3$** #*  #$%2$ (2RR+[^/O](,:27neM{a~S}QkZTuJpEviBxkCgbK=J@L!CN!AO APFP!GO"IL"DL!BJ CK?KN7B     AH&T\,`g2MS)dc7ga9jb;\X2nh=zqIj`6h^6_V2bV4jZ7]R1`[1]a0]Z2e`5FJ&HY&D_"@V 8J5I3K0G+@ 1 0&9$456$,+4140"&"   3 0   -5NP)cb3V_,.<(3m_Bo]AwWcX}R~fDsK|OXPuJ|OqGuKicJ=J>L:K/7#% @M"KY&\m.Vj,Wc-]h0Wb+Za.if6[W/XX.PP+WT/ZW/[U/gc5dd3gc6Xj-Ql*Ia%B\!9S1J,B'?&8%9#7' 1)JK>84@9!<5!&!   (1  ! 4=TV,V`-LZ&$49<gY9r]?]vSu^@pLtN{cCkE|OxLpIxMrHrJof@uGzmCe^9QQ,PP+GN&DN$BL"EP$ac5ce6be6gj8cf6[^1V\.S[+Q[*OW)JP&EM$EN$JR%KR$GP#BM ?K>J?LAK>I>K?NAOBM=J@P>I#- />K^%Wk+Va,IS&JS(@I"BH#OS*WX-PT*KR'GQ%GS$HO%SW+[b/PY)[i.M`)>S :S/H-E)E$?0* (   $25#:5B:";6% )      1   &# (25=HQ&]c/UZ+%4HJ/\R4u]>zTpL|bBbuNzdB|gDtKmGvdBzhDugAmGnb?thA}nFla=e[8]U3JM(UV/OS+PV+T[.T[.ae6hk:eg8_b4\`1X[/PS,NO*PS*PS*JR&HN$JP%IQ%FO"CO!>N>K?J=JAQ ;R.A"4' & ! " # " #  ! "%/.97$ %/    #3  #  !),$+/# &1AG#5AKQ&ZX--7JH)l]>za?pKnI|eDczQmIwb@p^=sb@k[M>K;J=I9D6B6D2>2=)4    &~~ffp LR)Ua*N_&GY#D]!:Q;L@P 5G,<#00?0A*82A6F1<0@2B5C1B-D1B0@!2 %47!' #  $+!( ) 1 $      %4 ,,87A;J7DEI$*7:<$ZN2ya>nHwM~V\mHcVxOkGtbBo_@wgGi\=h]Fo`A_U6VP1JH)AC$CG%JN(ST-YX0QT,\\2Z]3[\4\]4W]1R[-TZ-V[.X_/W^.W\-SX+KS&HQ$DP"=J@K!AK!BJ!BK!=H8F7C8E9E9D9C%!@AI&&5%+HY$@XBW 6G->6Q7Z/D,) .D-C':0F0C"1$3):0B/ $80 !    & ",    1'6'8$7!  $2*)76CMY'@L";F*9IK*`P3wa=lFwNXlJ[YtOmIpKpKn_?qdJn_@xgIxdDn]>]S5RL-DC&BE$>B"BG$FO&KU(OW+X]0_a5[^3TZ/SY-W\/X[/TY-OX*MV)KS'KQ'IN%GN$CL"DK!BJ!EL#FM#AK ?J:D5A6C3>  \]aiilZZ_HIP?@I)*6( "*+       *3"/:B;FtM]oOuS[vRsNU|RuMo`?iZ<~jGxdCj[;_T6XR2NL+FJ'=A"9@ =G!;J WO4j\=pa@h[:]U6WS5US2VU0LQ*AL$ ) # 2 (<(;- , $ # $ $  # (%43=?L"CZ$=W 3J9G%>F"X[.|kBoHV[V|bCmMoOmMhHzdEt`At`BvcC`T7[R4aZ7VS0OO.c\;\[5MT+KQ*KU)@S"@M#8B!CM&T^0Zg1\n2_k3^d3`a5VZ/U\.V].OT*KQ'RS*PP(OQ'JM&KM&JL%IK$FJ$37 %%6EESccn/ ",'4;Q4L)>"7- "-/H+B#5) ( '    1"9 5 - - $6%7( !2%7- %&7Fq^@hY<\R5^X5VS0RP.OM-aY9YW4W]0MW*HT'AG&=F#AM'S]0QW4Zb4Za1Z^2X_0RZ,OZ*SZ,SS,PP*SQ*OP(LN&DH$:<"-0  # $'    )-C.)   /3 1 * $ /'  " (9'8'  9I!AT#Lf*Fg&?\",H=R+=M#mc<|jCpH}eBxM[^[_]}VrIqG{jEn^>gX;cV8[T3XR2[T4TO/NK,QO.TT/PU,KS*EO&?L#?K#SZ.imi_8M'PZ0td>zb?gCeErMyR}TxQyT]}UZ]\Z~VwUqbA{jFk]>k^>md>d]8b[7XU3MN,GJ(BH&>D(AG%GN(OS-SW/CK&    $  3$7. 2 3 .  2 ,@"0 /(<7P Gf(+B.I-E9W$O\,zjAiEgDmIsNmIxRvRvSwSmLuQ|UVXV~VuOygFl^?k^>l_>f\:e[9c\8LK+II*CE&>C$FI'LN+YZ2ca8:9*  !+ $%<4 +(5 %; (<AY&Rt1Or.--N6N%4W"N]1ygBhFfEqLmIvOgGdEnNlLpNpMqOtOxQoKzeE{hGuPqaBreEyq[|ed\>aX6`X6PN-EG'CF&JK)NO,`^6]X6,,%('! !$93 . 1 5,"2K$8T'T]5rb=x`At]@zbClJjIeGeGfH~aEoNz`BiIfF~hG~hFoJoK~kIqRm^@j]BumWd]@^U5bX8SN.GG(AE$BK$KM,\Z6]Y615%       5,1 . *19T Qz1Ov.>_($@-C@Z0/E#jiBm\;~eCfEoIdDiHjIhGiT9w`AdEhHhIv_Bq]?taAr^@q_@s`AwcEp]@iYQ1>B&sb>iEiFpIy`AqYhS9eQ8iT:pZ>{cDlLjKq^C   $ " % -+$ &  !   $1%#+ % )1A.=#/F_,?S&-!82Q$3\"<[&Wj8qFgEmHoKhFgDrJya@oGoIyaB~eC{bBjT;pX=jU:jU:jS:{aCmLiJhJhI    + ( &4 +   !$' & #00<9A ),;!) 1=P0]yQCh3Kf4\f8{iBsLuLW{RnJgDw_@hEkFiE~eCyaBjU;nX{cDrNhIoLmKrOpNwcE/)$94)     #  "* *  ."+ %"$:<=9:5;7+/ !%20G- 01J&un`{OXl?ee9pFOTsKxOWyRuOsLxQiFs\=oW;jT8qZ=~fE}fDnZ<~eEfFhIlKkZ>]P7H@/!71(_T;,*% !".'0  (3(1*5!+ +'+2 !$& ,0-/*.!* .7   7@]4bWLh>Lg1~tFsJS]VWWvN|SnHkFjFv_?mW9cP3q\kX=cS9_P860&     !  +!-'# %79A++1 ()-(0(8)8!$ ) % 3H'Fc9]vNTp>Rl3go8wh@mE}QrIoHpK}eA[^VjD|RtMX^~W|UmKxaBxaCu`AiY;dW;C:.     %+#&1 "2D$YaMMQ=26,.+1%3 1!1   !7VjIi]Ni@Kr:Ed(Qc,tk?kDvLjEiE}eBkW7VsJsLceXZ~U{TzTgHybCkIp^?dT8G?.        .<&uyjLL8@>#;90;,A0D&8,    (8X*SqFYxIPv=Pq:ln?0E4K7L-B'9"1)       1M'-Z"-\!Dj9QuFOf8rCzL{PuK}cBs\=w^@kGuMmIsNlI{cBx`AnJxRsNu`AxaC|dFaP7VI2QH0 ( -2=&RXAST:BC)IB)BQ 8G8P:P)8   ' :)XYzS@j76d'Nj/|FOuLvLnFeC}cCx`?jDzb@dBbQ5nX;gU7pM_s^?n[. *5!QXEU[C;C"#+>?XQ,WN-IC)QM)HJ#9O  "#"9A.R'Jm@=i0?f/M`*wFQ}Q|OwMfDgR7q];|SoJvQdS9ycCzdBlGrLs^=ZM1XN1WO2`U7QF3  '2-7"*489BB HH$SR+TQ*SH(QE(NR'ER#2E #,  1L(*O"OpF;e.8f%Dg*dl5oEsJpFjDpJ~dBiU8jV7zNiExbBmX;kX:iU7{eCp]=SJ-eY:YN8)$#&""'#"  $%+0+1,2FE&HF%TW+[c0SW*KL$JL#?P!!  % :,M*6c.8c,Cg.Mi.hf5n]9fCjFgCkEqIyNtKqjL`{ZVqKkG~iFUK/=8* !-?AD79<'  " ' & 7726E>"JF$LI'SN)QQ(KN%EI"".$    +<.R+.V(4Z.Bj)F`&]]/m\8{e?lEdAlEsKYrJwhB\xWoKjV:\O2FA.#$) !(  (%)) ) !5*6)3;D)G'A5P0E9F1@,=% ((" " 5MiFi}`[oRYjMVdB{Yvg>zeAx`?~cAeBeCeC}`@oIUpKlW:lY;m\=aU71-'! $)/       "-      )#C%E!;,K7V7U3O$8#&" " ( ,H^B3M([qOKb?ku^b`J:9+'$"TI5~eC}cAdBeCaAsW;}aA~SnIhE{cDlKn]>GA/   #    ! "#?%D+I/D9O!%:+  #! & )~奯n^-=(LZB|a}TyfCgV=oJoIkEkFzOuL{QT|RsMkHzaBt]@]Q5D?-   %'. * ' NKV" 0  ?K7na>Q'Yl9gayYnOrQ~SU~QmHnHqJ}hDyNzQvOTsNiGuaA^Q6*'"    !  5B-틙~^sDFY%[b5`^:wMuP}SVWYYzRUtOiFnGzObxNyQrMsMq]?n^?k[>_S9UL3"!!     '9G0yq_tJ^qGjfzOlħla]]VVW]qLnGjDyNjEsLtOkJgE}hF{eEeV:WM3,*#66=$&,     %&6@R:xo`oa|msX[ddiaTUsNfEhCkDuK[^wQsNqMiF}hFvdDQI0347"$)$&     '"4@S;j|awityvfqU[^a[c_WVtOyQQ{PUf[tOwPkHvaBdT8m^?C=+     &!##155?)*5'& #%)#%(#** &&     *epVeq\etW|w|gr\UXVVTQS}QsKvMnGmHzQ{SuOycCoJxQxfF^R9'&   "($1(.9lmoXZ]WWYTUWWXYhhheefLMO338**2&  !% !!#   *3$ӊep]yrOwQPT{MwL{OyLVcZzNnIzcCxbAn[<{jJ2/' )+$/#)337@QTY',4%#!&.?AFNORVVYCCH9:?017  w{pUaTZeWw}gju~VTQT~NRS[}QoGlG~fElY;\O3JC.<>F49A@CI@@9     !'! !(qug㙞W_HdiXXcOR`yJsFjCuKyNqIoIvbAhZ=A<- ((5||}oprPSUXVL.-%   (  "&" %"DK7IRC酄lv^VT[XS~M~L}LmDoFtb>n\;raAfY;VN2#NOU]^bZ\`7;Ayvn(&   !119RRU     '.'"'.5*^cXb`LnlS{rRVZYY]VTNNoDoFkDzgDvrfLXN3  %(opm#"45."%&" &#'/()$# %&&.#  &,%GLD提uIT|S]YxKX^SuDrc:n_9}lBxNve@gZ;j[=^S6GB-   %'1#  #(4789=-&("     )    $).257&  "            '(.&'.89;FFG''.  "%SXQͷiu]mlCmeFyNSUOrFrE{j?ue<_R1n_:dW4dY551%         %(-$        #   -/7'(1-.4   &#45:016     *4(%.(."BF>ekd샌rfjuPqExHwHmBwf>qc;eW4dU4k\8k^9]U5    ($    !'"  !#-"  !",,2/04    $,#+fl`𝡚bgOZT4l`;rd>{f=}h>yf=oAyg>m]9dU4`S2tcIF/    "      "&'0         ") IPA*1 04"RH,^N0mY6mX6jU5eS3t`rdo^8qa:pa:l`9'/'    !).(. 9=:> +0!'  ((  58)ae]HMD+1*)0NL+]W-aX0bT/dU2jX2kY3q^7tb:ra9n^8j]6bX5IG0     +.:;!#/3CD GF#6: $   %-   *.%38,AF>NQI+1*&.%,5IL&RP)ZR+gX2n^3cU.hW1gW2fW2`S1fX2cX0e[244% '+"$GD!66,.   # &)."5:*4;.5<,39 Z]IQU:EC!i^5th9E=NDRG"NG PH%B=%&(=<&GF)$'         #!      )/*#)$#+%$,#$#)58 c\2RO*VO%\R(@?!&+,       $ $>@E=?D>?D&(0     CIG_c^BHB#*%(/"",1-3*--2%3#(4 "8633010147,"       (ABG   ""EJDnqg7=1#+! ', .6*./1=9H?OJ*[X>$'      :=<$         ILD7;/*0&$+#+3(:?(%)!(   ##B=>=fc3_]7@B-  %           690IK?LOH$* '-$ORA@E2.5&1&0+%2!   -/01gb0v=~p>--# &FFM((2         be`IME"$'*2!07.IS:%/ # &'11HE!VP'^U+c\/>A*         $   ?AG(*3 !!-, $447QQR88@)%("    "!)'!,*"* :B1$  !'-3$%*26%>?"@>EB :;=@8B ,      $)FJLrst-3859>WXZPRUABGWWY..: (' #$*STUbbcTUVaadKKS ""   *:E8W_V]c^TZXOSSZ_\;@@FJJ9>%! % "#+[[\yyy /   $!      ! $*30-51ENIHRI*4/+00LOOqutdjbAIA/601728>.*0#, ")" %UUVVVVKLL367!%)$'-WXY 44>'(LLN[[^kkmHIO !'(2"#.)*5(*4(      )DFJBGHDHI'//JPKMSLag_285#"!(")1 )&'1--4=>BmmoffgooozzzGGP   >?A%%+LLM``a&%&0&'0::A45<@AH79@LNR## *(+$$ 4:0)/("(    )**611;  "&&2)&,'(4#    ! "$3         [YeIFV%   !'0-@0+mapnik-3.0.9/benchmark/run000077500000000000000000000026701262555547000155060ustar00rootroot00000000000000#!/bin/bash cd "$( dirname "${BASH_SOURCE[0]}" )" cd ../ source ./localize.sh BASE=./benchmark/out function run { ${BASE}/$1 --threads 0 --iterations $3; ${BASE}/$1 --threads $2 --iterations $(expr $3 / $2); } run test_getline 30 10000000 #run test_array_allocation 20 100000 #run test_png_encoding1 10 1000 #run test_png_encoding2 10 50 #run test_to_string1 10 100000 #run test_to_string2 10 100000 #run test_polygon_clipping 10 1000 #run test_polygon_clipping_rendering 10 100 run test_proj_transform1 10 100 run test_expression_parse 10 1000 run test_face_ptr_creation 10 1000 run test_font_registration 10 100 run test_offset_converter 10 1000 ./benchmark/out/test_rendering \ --name "text rendering" \ --map benchmark/data/roads.xml \ --extent 1477001.12245,6890242.37746,1480004.49012,6892244.62256 \ --width 600 \ --height 600 \ --iterations 20 \ --threads 10 ./benchmark/out/test_rendering \ --name "gdal tiff rendering" \ --map benchmark/data/gdal-wgs.xml \ --extent -180.0,-120.0,180.0,120.0 \ --width 600 \ --height 600 \ --iterations 20 \ --threads 10 ./benchmark/out/test_rendering \ --name "raster tiff rendering" \ --map benchmark/data/raster-wgs.xml \ --extent -180.0,-120.0,180.0,120.0 \ --width 600 \ --height 600 \ --iterations 20 \ --threads 10 ./benchmark/out/test_quad_tree \ --iterations 10000 \ --threads 1 ./benchmark/out/test_quad_tree \ --iterations 1000 \ --threads 10 mapnik-3.0.9/benchmark/template.cpp000066400000000000000000000004351262555547000172700ustar00rootroot00000000000000#include "bench_framework.hpp" class test : public benchmark::test_case { public: test(mapnik::parameters const& params) : test_case(params) {} bool validate() const { return true; } void operator()() const { } }; BENCHMARK(test,"test name") mapnik-3.0.9/benchmark/test_array_allocation.cpp000066400000000000000000000265561262555547000220530ustar00rootroot00000000000000#include "bench_framework.hpp" #include #include #include #include #include #include #include #if BOOST_VERSION >= 105400 #include #endif // http://stackoverflow.com/questions/17347254/why-is-allocation-and-deallocation-of-stdvector-slower-than-dynamic-array-on-m #define FULL_ZERO_CHECK inline void ensure_zero(uint8_t * data, uint32_t size) { #ifdef FULL_ZERO_CHECK for (std::size_t i=0;i array_; test1(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i array_; test1b(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i array_; test1c(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i(::operator new(sizeof(uint8_t) * size_)); std::fill(data,data + size_,0); ensure_zero(data,size_); ::operator delete(data); } return true; } }; class test2 : public benchmark::test_case { public: uint32_t size_; std::vector array_; test2(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i(::operator new(sizeof(uint8_t)*size_)); memcpy(data, &array_[0], size_); ensure_zero(data,size_); ::operator delete(data),data=0; } return true; } }; class test3 : public benchmark::test_case { public: uint32_t size_; std::vector array_; test3(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i data(size_); ensure_zero(&data[0],data.size()); } return true; } }; class test3b : public benchmark::test_case { public: uint32_t size_; std::vector array_; test3b(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i data(0); data.resize(size_,0); ensure_zero(&data[0],data.size()); } return true; } }; class test3c : public benchmark::test_case { public: uint32_t size_; std::vector array_; test3c(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i data(0); data.assign(size_,0); ensure_zero(&data[0],data.size()); } return true; } }; class test3d : public benchmark::test_case { public: uint32_t size_; std::vector array_; test3d(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i data(size_); for (std::size_t i=0;i array_; test3d(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i data(size_); for (std::size_t i=0;i array_; test4(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i array_; test5(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i array_; test5b(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i // http://isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting // http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130909/088700.html // http://stackoverflow.com/questions/17303902/any-alternative-to-stddynarray-presently-available class test6 : public benchmark::test_case { public: uint32_t size_; std::vector array_; test6(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i data(static_cast(0),static_cast(size_)); ensure_zero(&data[0],size_); } return true; } }; #if BOOST_VERSION >= 105400 // http://i42.co.uk/stuff/vecarray.htm // http://www.boost.org/doc/libs/1_54_0/doc/html/boost/container/static_vector.html class test7 : public benchmark::test_case { public: uint32_t size_; std::vector array_; test7(mapnik::parameters const& params) : test_case(params), size_(*params.get("size",256*256)), array_(size_,0) { } bool validate() const { return true; } bool operator()() const { for (std::size_t i=0;i data(size_,0); ensure_zero(&data[0],size_); } return true; } }; #endif int main(int argc, char** argv) { int return_value = 0; mapnik::parameters params; benchmark::handle_args(argc,argv,params); { test4 test_runner4(params); return_value = return_value | run(test_runner4,"calloc"); } { test1 test_runner(params); return_value = return_value | run(test_runner,"malloc/memcpy"); } { test1b test_runner(params); return_value = return_value | run(test_runner,"malloc/memset"); } { test1c test_runner(params); return_value = return_value | run(test_runner,"operator new/std::fill"); } { test2 test_runner(params); return_value = return_value | run(test_runner,"operator new/memcpy"); } { test3 test_runner(params); return_value = return_value | run(test_runner,"vector(N)"); } { test3b test_runner(params); return_value = return_value | run(test_runner,"vector/resize"); } { test3c test_runner(params); return_value = return_value | run(test_runner,"vector/assign"); } { test3d test_runner(params); return_value = return_value | run(test_runner,"deque(N)"); } { test5 test_runner(params); return_value = return_value | run(test_runner,"std::string range"); } { test5b test_runner(params); return_value = return_value | run(test_runner,"std::string &[0]"); } { test6 test_runner(params); return_value = return_value | run(test_runner,"valarray"); } #if BOOST_VERSION >= 105400 { test7 test_runner(params); return_value = return_value | run(test_runner,"static_vector"); } #endif return return_value; } mapnik-3.0.9/benchmark/test_expression_parse.cpp000066400000000000000000000021541262555547000221050ustar00rootroot00000000000000#include "bench_framework.hpp" #include #include #include #include class test : public benchmark::test_case { std::string expr_; public: test(mapnik::parameters const& params) : test_case(params), expr_("((([mapnik::geometry_type]=2) and ([oneway]=1)) and ([class]='path'))") {} bool validate() const { mapnik::expression_ptr expr = mapnik::parse_expression(expr_); std::string result = mapnik::to_expression_string(*expr); bool ret = (result == expr_); if (!ret) { std::clog << result << " != " << expr_ << "\n"; } return ret; } bool operator()() const { for (std::size_t i=0;i #include class test : public benchmark::test_case { public: test(mapnik::parameters const& params) : test_case(params) {} bool validate() const { std::size_t count = 0; std::size_t expected_count = mapnik::freetype_engine::face_names().size(); mapnik::freetype_engine::font_file_mapping_type font_file_mapping; mapnik::freetype_engine::font_memory_cache_type font_cache; mapnik::font_library library; for (std::string const& name : mapnik::freetype_engine::face_names()) { mapnik::face_ptr f = mapnik::freetype_engine::create_face(name, library, font_file_mapping, font_cache, mapnik::freetype_engine::get_mapping(), mapnik::freetype_engine::get_cache()); if (f) ++count; } return count == expected_count; } bool operator()() const { std::size_t expected_count = mapnik::freetype_engine::face_names().size(); for (unsigned i=0;i #include #include class test : public benchmark::test_case { public: test(mapnik::parameters const& params) : test_case(params) {} bool validate() const { return mapnik::freetype_engine::register_fonts("./fonts", true); } bool operator()() const { unsigned long count = 0; for (unsigned i=0;i #include #include "../plugins/input/csv/csv_utils.hpp" class test : public benchmark::test_case { public: std::string line_data_; test(mapnik::parameters const& params) : test_case(params), line_data_("this is one line\nand this is a second line\nand a third line") { boost::optional line_data = params.get("line"); if (line_data) { line_data_ = *line_data; } } bool validate() const { std::string first = line_data_.substr(line_data_.find_first_not_of('\n')); char newline = '\n'; std::string csv_line; std::stringstream s; s << line_data_; std::getline(s,csv_line,newline); if (csv_line != first) { return true; } else { std::clog << "Error: the parsed line (" << csv_line << ") should be a subset of the original line (" << line_data_ << ") (ensure you pass a line with a \\n)\n"; } return true; } bool operator()() const { char newline = '\n'; std::string csv_line; std::stringstream s; s << line_data_; for (unsigned i=0;i line_data = params.get("line"); if (line_data) { line_data_ = *line_data; } } bool validate() const { std::string first = line_data_.substr(line_data_.find_first_not_of('\n')); char newline = '\n'; char quote = '"'; std::string csv_line; std::stringstream s; s << line_data_; csv_utils::getline_csv(s,csv_line,newline,quote); if (csv_line != first) { return true; } else { std::clog << "Error: the parsed line (" << csv_line << ") should be a subset of the original line (" << line_data_ << ") (ensure you pass a line with a \\n)\n"; } return true; } bool operator()() const { char newline = '\n'; char quote = '"'; std::string csv_line; std::stringstream s; s << line_data_; for (unsigned i=0;i class test : public benchmark::test_case { std::vector images_; public: test(mapnik::parameters const& params) : test_case(params), images_{ "./test/data/images/dummy.jpg", "./test/data/images/dummy.jpeg", "./test/data/images/dummy.png", "./test/data/images/dummy.tif", "./test/data/images/dummy.tiff", //"./test/data/images/landusepattern.jpeg", // will fail since it is a png //"./test/data/images/xcode-CgBI.png", // will fail since its an invalid png "./test/data/svg/octocat.svg", "./test/data/svg/place-of-worship-24.svg", "./test/data/svg/point_sm.svg", "./test/data/svg/point.svg", "./test/data/svg/airfield-12.svg" } {} bool validate() const { return true; } bool operator()() const { unsigned count = 0; for (std::size_t i=0;i #include #include #include #include #include #include #include #include #include #include class test : public benchmark::test_case { public: test(mapnik::parameters const& params) : test_case(params) {} bool validate() const { return true; } bool operator()() const { mapnik::Map m(256,256,"+init=epsg:3857"); mapnik::parameters params; params["type"]="memory"; auto ds = std::make_shared(params); // add whitespace to trigger phony "reprojection" mapnik::layer lay("layer",m.srs() + " "); lay.set_datasource(ds); lay.add_style("style"); m.add_layer(lay); // dummy style to ensure that layer is processed m.insert_style("style",mapnik::feature_type_style()); // dummy bbox, but "valid" because minx and miny are less // with an invalid bbox then layer.visible() returns false // and the initial rendering setup is not run m.zoom_to_box(mapnik::box2d(-1,-1,0,0)); for (unsigned i=0;i ren(m,im); ren.apply(); } return true; } }; BENCHMARK(test,"rendering with reprojection") mapnik-3.0.9/benchmark/test_numeric_cast_vs_static_cast.cpp000066400000000000000000000044021262555547000242570ustar00rootroot00000000000000#include "bench_framework.hpp" // boost #include static double STEP_NUM = 0.0000000001; static std::uint8_t START_NUM = 2; class test_static : public benchmark::test_case { double step_; std::uint8_t start_; public: test_static(mapnik::parameters const& params) : test_case(params), step_(STEP_NUM), start_(START_NUM) {} bool validate() const { return true; } bool operator()() const { double value_ = 0.0; std::uint8_t x; for (std::size_t i=0;i(start_) * value_; if (c >= 256.0) c = 255.0; if (c < 0.0) c = 0.0; x = static_cast(c); value_ += step_; } return static_cast(x) < (static_cast(start_) * value_); } }; using boost::numeric::positive_overflow; using boost::numeric::negative_overflow; class test_numeric : public benchmark::test_case { double step_; std::uint8_t start_; public: test_numeric(mapnik::parameters const& params) : test_case(params), step_(STEP_NUM), start_(START_NUM) {} bool validate() const { return true; } bool operator()() const { double value_ = 0.0; std::uint8_t x; for (std::size_t i=0;i(start_ * value_); } catch(negative_overflow&) { x = std::numeric_limits::min(); } catch(positive_overflow&) { x = std::numeric_limits::max(); } value_ += step_; } return static_cast(x) < (static_cast(start_) * value_); } }; int main(int argc, char** argv) { mapnik::parameters params; benchmark::handle_args(argc,argv,params); int return_value = 0; { test_static test_runner(params); return_value = return_value | run(test_runner,"static_cast"); } { test_numeric test_runner(params); return_value = return_value | run(test_runner,"numeric_cast"); } return return_value; } mapnik-3.0.9/benchmark/test_offset_converter.cpp000066400000000000000000000050511262555547000220700ustar00rootroot00000000000000#include "bench_framework.hpp" // mapnik #include #include #include #include struct fake_path { using coord_type = std::tuple; using cont_type = std::vector; cont_type vertices_; cont_type::iterator itr_; fake_path(std::initializer_list l) : fake_path(l.begin(), l.size()) { } fake_path(std::vector const &v) : fake_path(v.begin(), v.size()) { } template fake_path(Itr itr, size_t sz) { size_t num_coords = sz >> 1; vertices_.reserve(num_coords); for (size_t i = 0; i < num_coords; ++i) { double x = *itr++; double y = *itr++; unsigned cmd = (i == 0) ? mapnik::SEG_MOVETO : mapnik::SEG_LINETO; vertices_.push_back(std::make_tuple(x, y, cmd)); if (i == num_coords - 1) cmd = mapnik::SEG_END; vertices_.push_back(std::make_tuple(x, y, cmd)); } itr_ = vertices_.begin(); } unsigned vertex(double *x, double *y) { if (itr_ == vertices_.end()) { return mapnik::SEG_END; } *x = std::get<0>(*itr_); *y = std::get<1>(*itr_); unsigned cmd = std::get<2>(*itr_); ++itr_; return cmd; } void rewind(unsigned) { itr_ = vertices_.begin(); } }; class test_offset : public benchmark::test_case { public: test_offset(mapnik::parameters const& params) : test_case(params) {} bool validate() const { return true; } bool operator()() const { std::vector path; int mysize = 2500; int x1 = 0; path.reserve(mysize*2); for( int i = 0; i < mysize; i++ ) { path.push_back( i ); path.push_back( 0 ); } fake_path fpath(path); for (std::size_t i=0;i off_path(fpath); off_path.set_offset(10); unsigned cmd; double x, y; while ((cmd = off_path.vertex(&x, &y)) != mapnik::SEG_END) { x1++; } } return x1 > 0; } }; int main(int argc, char** argv) { mapnik::parameters params; benchmark::handle_args(argc,argv,params); int return_value = 0; { test_offset test_runner(params); return_value = run(test_runner,"offset_test"); } return return_value; } mapnik-3.0.9/benchmark/test_png_encoding1.cpp000066400000000000000000000010661262555547000212300ustar00rootroot00000000000000#include "bench_framework.hpp" #include class test : public benchmark::test_case { mapnik::image_rgba8 im_; public: test(mapnik::parameters const& params) : test_case(params), im_(256,256) {} bool validate() const { return true; } bool operator()() const { std::string out; for (std::size_t i=0;i im_; public: test(mapnik::parameters const& params) : test_case(params) { std::string filename("./benchmark/data/multicolor.png"); std::unique_ptr reader(mapnik::get_image_reader(filename,"png")); if (!reader.get()) { throw mapnik::image_reader_exception("Failed to load: " + filename); } im_ = std::make_shared(reader->width(),reader->height()); reader->read(0,0,*im_); } bool validate() const { std::string expected("./benchmark/data/multicolor-hextree-expected.png"); std::string actual("./benchmark/data/multicolor-hextree-actual.png"); mapnik::save_to_file(*im_,actual, "png8:m=h:z=1"); return benchmark::compare_images(actual,expected); } bool operator()() const { std::string out; for (std::size_t i=0;i #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // boost geometry #include // agg #include "agg_conv_clip_polygon.h" // clipper #include "agg_path_storage.h" // rendering #include "agg_basics.h" #include "agg_rendering_buffer.h" #include "agg_pixfmt_rgba.h" #include "agg_rasterizer_scanline_aa.h" #include "agg_scanline_u.h" #include "agg_renderer_scanline.h" // stl #include #include #include void render(mapnik::geometry::multi_polygon const& geom, mapnik::box2d const& extent, std::string const& name) { using path_type = mapnik::transform_path_adapter>; using ren_base = agg::renderer_base; using renderer = agg::renderer_scanline_aa_solid; mapnik::image_rgba8 im(256,256); mapnik::fill(im, mapnik::color("white")); mapnik::box2d padded_extent(155,134,665,466);//extent; padded_extent.pad(10); mapnik::view_transform tr(im.width(),im.height(),padded_extent,0,0); agg::rendering_buffer buf(im.bytes(),im.width(),im.height(), im.row_size()); agg::pixfmt_rgba32_plain pixf(buf); ren_base renb(pixf); renderer ren(renb); mapnik::proj_transform prj_trans(mapnik::projection("+init=epsg:4326"),mapnik::projection("+init=epsg:4326")); ren.color(agg::rgba8(127,127,127,255)); agg::rasterizer_scanline_aa<> ras; for (auto const& poly : geom) { mapnik::geometry::polygon_vertex_adapter va(poly); path_type path(tr,va,prj_trans); ras.add_path(path); } agg::scanline_u8 sl; agg::render_scanlines(ras, sl, ren); mapnik::save_to_file(im,name); } class test1 : public benchmark::test_case { std::string wkt_in_; mapnik::box2d extent_; std::string expected_; public: using conv_clip = agg::conv_clip_polygon>; test1(mapnik::parameters const& params, std::string const& wkt_in, mapnik::box2d const& extent) : test_case(params), wkt_in_(wkt_in), extent_(extent), expected_("./benchmark/data/polygon_clipping_agg") {} bool validate() const { mapnik::geometry::geometry geom; if (!mapnik::from_wkt(wkt_in_, geom)) { throw std::runtime_error("Failed to parse WKT"); } if (mapnik::geometry::is_empty(geom)) { std::clog << "empty geom!\n"; return false; } if (!geom.is>()) { std::clog << "not a polygon!\n"; return false; } mapnik::geometry::polygon const& poly = mapnik::util::get>(geom); mapnik::geometry::polygon_vertex_adapter va(poly); conv_clip clipped(va); clipped.clip_box( extent_.minx(), extent_.miny(), extent_.maxx(), extent_.maxy()); clipped.rewind(0); mapnik::geometry::polygon poly2; mapnik::geometry::linear_ring ring; // exterior ring unsigned cmd; double x, y, x0, y0; while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) { if (cmd == mapnik::SEG_MOVETO) { x0 = x; y0 = y; } if (cmd == mapnik::SEG_CLOSE) { ring.add_coord(x0, y0); break; } ring.add_coord(x,y); } poly2.set_exterior_ring(std::move(ring)); // interior rings ring.clear(); while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) { if (cmd == mapnik::SEG_MOVETO) { x0 = x; y0 = y; } else if (cmd == mapnik::SEG_CLOSE) { ring.add_coord(x0,y0); poly2.add_hole(std::move(ring)); ring.clear(); continue; } ring.add_coord(x,y); } std::string expect = expected_+".png"; std::string actual = expected_+"_actual.png"; mapnik::geometry::multi_polygon mp; mp.emplace_back(poly2); auto env = mapnik::geometry::envelope(mp); if (!mapnik::util::exists(expect) || (std::getenv("UPDATE") != nullptr)) { std::clog << "generating expected image: " << expect << "\n"; render(mp,env,expect); } render(mp,env,actual); return benchmark::compare_images(actual,expect); } bool operator()() const { mapnik::geometry::geometry geom; if (!mapnik::from_wkt(wkt_in_, geom)) { throw std::runtime_error("Failed to parse WKT"); } if (mapnik::geometry::is_empty(geom)) { std::clog << "empty geom!\n"; return false; } if (!geom.is>()) { std::clog << "not a polygon!\n"; return false; } bool valid = true; for (unsigned i=0;i const& poly = mapnik::util::get>(geom); mapnik::geometry::polygon_vertex_adapter va(poly); conv_clip clipped(va); clipped.clip_box( extent_.minx(), extent_.miny(), extent_.maxx(), extent_.maxy()); unsigned cmd; double x,y; // NOTE: this rewind is critical otherwise // agg_conv_adapter_vpgen will give garbage // values for the first vertex clipped.rewind(0); while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END) { count++; } unsigned expected_count = 30; if (count != expected_count) { std::clog << "test1: clipping failed: processed " << count << " verticies but expected " << expected_count << "\n"; valid = false; } } return valid; } }; class test3 : public benchmark::test_case { std::string wkt_in_; mapnik::box2d extent_; std::string expected_; public: test3(mapnik::parameters const& params, std::string const& wkt_in, mapnik::box2d const& extent) : test_case(params), wkt_in_(wkt_in), extent_(extent), expected_("./benchmark/data/polygon_clipping_boost") {} bool validate() const { mapnik::geometry::geometry geom; if (!mapnik::from_wkt(wkt_in_, geom)) { throw std::runtime_error("Failed to parse WKT"); } if (mapnik::geometry::is_empty(geom)) { std::clog << "empty geom!\n"; return false; } if (!geom.is >()) { std::clog << "not a polygon!\n"; return false; } mapnik::geometry::polygon & poly = mapnik::util::get >(geom); mapnik::geometry::correct(poly); mapnik::geometry::linear_ring bbox; bbox.add_coord(extent_.minx(), extent_.miny()); bbox.add_coord(extent_.minx(), extent_.maxy()); bbox.add_coord(extent_.maxx(), extent_.maxy()); bbox.add_coord(extent_.maxx(), extent_.miny()); bbox.add_coord(extent_.minx(), extent_.miny()); std::deque > result; boost::geometry::intersection(bbox, poly, result); std::string expect = expected_+".png"; std::string actual = expected_+"_actual.png"; mapnik::geometry::multi_polygon mp; for (auto const& _geom: result) { //std::clog << boost::geometry::dsv(geom) << "\n"; mp.emplace_back(_geom); } mapnik::geometry::geometry geom2(mp); auto env = mapnik::geometry::envelope(geom2); if (!mapnik::util::exists(expect) || (std::getenv("UPDATE") != nullptr)) { std::clog << "generating expected image: " << expect << "\n"; render(mp,env,expect); } render(mp,env,actual); return benchmark::compare_images(actual,expect); } bool operator()() const { mapnik::geometry::geometry geom; if (!mapnik::from_wkt(wkt_in_, geom)) { throw std::runtime_error("Failed to parse WKT"); } if (mapnik::geometry::is_empty(geom)) { std::clog << "empty geom!\n"; return false; } if (!geom.is >()) { std::clog << "not a polygon!\n"; return false; } mapnik::geometry::polygon & poly = mapnik::util::get >(geom); mapnik::geometry::correct(poly); mapnik::geometry::linear_ring bbox; bbox.add_coord(extent_.minx(), extent_.miny()); bbox.add_coord(extent_.minx(), extent_.maxy()); bbox.add_coord(extent_.maxx(), extent_.maxy()); bbox.add_coord(extent_.maxx(), extent_.miny()); bbox.add_coord(extent_.minx(), extent_.miny()); bool valid = true; for (unsigned i=0;i > result; boost::geometry::intersection(bbox, poly, result); unsigned count = 0; for (auto const& _geom : result) { mapnik::geometry::polygon_vertex_adapter va(_geom); unsigned cmd; double x,y; while ((cmd = va.vertex(&x, &y)) != mapnik::SEG_END) { ++count; } unsigned expected_count = 29; if (count != expected_count) { std::clog << "test3: clipping failed: processed " << count << " verticies but expected " << expected_count << "\n"; valid = false; } } } return valid; } }; /* Commented out section because clipper moved out of mapnik core. inline void process_polynode_branch(ClipperLib::PolyNode* polynode, mapnik::geometry::multi_polygon & mp) { mapnik::geometry::polygon polygon; mapnik::geometry::linear_ring outer; for (auto const& pt : polynode->Contour) { outer.emplace_back(static_cast(pt.x),static_cast(pt.y)); } if (outer.front() != outer.back()) { outer.emplace_back(outer.front().x, outer.front().y); } polygon.set_exterior_ring(std::move(outer)); for (auto * ring : polynode->Childs) { mapnik::geometry::linear_ring inner; for (auto const& pt : ring->Contour) { inner.emplace_back(static_cast(pt.x),static_cast(pt.y)); } if (inner.front() != inner.back()) { inner.emplace_back(inner.front().x, inner.front().y); } polygon.add_hole(std::move(inner)); } mp.emplace_back(std::move(polygon)); for (auto * ring : polynode->Childs) { for (auto * sub_ring : ring->Childs) { process_polynode_branch(sub_ring, mp); } } } class test4 : public benchmark::test_case { std::string wkt_in_; mapnik::box2d extent_; std::string expected_; public: test4(mapnik::parameters const& params, std::string const& wkt_in, mapnik::box2d const& extent) : test_case(params), wkt_in_(wkt_in), extent_(extent), expected_("./benchmark/data/polygon_clipping_clipper") {} bool validate() const { mapnik::geometry::geometry geom; if (!mapnik::from_wkt(wkt_in_, geom)) { throw std::runtime_error("Failed to parse WKT"); } if (mapnik::geometry::is_empty(geom)) { std::clog << "empty geom!\n"; return false; } if (!geom.is >()) { std::clog << "not a polygon!\n"; return false; } mapnik::geometry::polygon & poly = mapnik::util::get >(geom); mapnik::geometry::correct(poly); ClipperLib::Clipper clipper; mapnik::geometry::line_string path; for (auto const& pt : poly.exterior_ring) { double x = pt.x; double y = pt.y; path.emplace_back(static_cast(x),static_cast(y)); } double area = ClipperLib::Area(path); if (area > 0) { std::reverse(path.begin(), path.end()); } if (!clipper.AddPath(path, ClipperLib::ptSubject, true)) { std::clog << "ptSubject ext failed!\n"; } for (auto const& ring : poly.interior_rings) { path.clear(); for (auto const& pt : ring) { double x = pt.x; double y = pt.y; path.emplace_back(static_cast(x),static_cast(y)); } area = ClipperLib::Area(path); if (area < 0) { std::reverse(path.begin(), path.end()); } if (!clipper.AddPath(path, ClipperLib::ptSubject, true)) { std::clog << "ptSubject ext failed!\n"; } } std::cerr << "path size=" << path.size() << std::endl; mapnik::geometry::line_string clip_box; clip_box.emplace_back(static_cast(extent_.minx()),static_cast(extent_.miny())); clip_box.emplace_back(static_cast(extent_.maxx()),static_cast(extent_.miny())); clip_box.emplace_back(static_cast(extent_.maxx()),static_cast(extent_.maxy())); clip_box.emplace_back(static_cast(extent_.minx()),static_cast(extent_.maxy())); clip_box.emplace_back(static_cast(extent_.minx()),static_cast(extent_.miny())); if (!clipper.AddPath( clip_box, ClipperLib::ptClip, true )) { std::clog << "ptClip failed!\n"; } ClipperLib::PolyTree polygons; clipper.Execute(ClipperLib::ctIntersection, polygons);// ClipperLib::pftNonZero); clipper.Clear(); mapnik::geometry::multi_polygon mp; for (auto * polynode : polygons.Childs) { process_polynode_branch(polynode, mp); } std::string expect = expected_+".png"; std::string actual = expected_+"_actual.png"; //mapnik::geometry::geometry geom2(mp); auto env = mapnik::geometry::envelope(mp); if (!mapnik::util::exists(expect) || (std::getenv("UPDATE") != nullptr)) { std::clog << "generating expected image: " << expect << "\n"; render(mp,env,expect); } render(mp,env,actual); return benchmark::compare_images(actual,expect); } bool operator()() const { mapnik::geometry::geometry geom; if (!mapnik::from_wkt(wkt_in_, geom)) { throw std::runtime_error("Failed to parse WKT"); } if (mapnik::geometry::is_empty(geom)) { std::clog << "empty geom!\n"; return false; } if (!geom.is >()) { std::clog << "not a polygon!\n"; return false; } mapnik::geometry::polygon & poly = mapnik::util::get >(geom); mapnik::geometry::correct(poly); bool valid = true; for (unsigned i=0;i > result; boost::geometry::intersection(extent_,poly,result); unsigned count = 0; for (auto const& geom : result) { mapnik::geometry::polygon_vertex_adapter va(geom); unsigned cmd; double x,y; while ((cmd = va.vertex(&x, &y)) != mapnik::SEG_END) { ++count; } unsigned expected_count = 29; if (count != expected_count) { std::clog << "test3: clipping failed: processed " << count << " verticies but expected " << expected_count << "\n"; valid = false; } } } return valid; } }; */ int main(int argc, char** argv) { mapnik::parameters params; benchmark::handle_args(argc,argv,params); // polygon/rect clipping // IN : POLYGON ((155 203, 233 454, 315 340, 421 446, 463 324, 559 466, 665 253, 528 178, 394 229, 329 138, 212 134, 183 228, 200 264, 155 203),(313 190, 440 256, 470 248, 510 305, 533 237, 613 263, 553 397, 455 262, 405 378, 343 287, 249 334, 229 191, 313 190)) // RECT : POLYGON ((181 106, 181 470, 631 470, 631 106, 181 106)) // OUT (expected) // POLYGON ((181 286.6666666666667, 233 454, 315 340, 421 446, 463 324, 559 466, 631 321.3207547169811, 631 234.38686131386862, 528 178, 394 229, 329 138, 212 134, 183 228, 200 264, 181 238.24444444444444, 181 286.6666666666667),(313 190, 440 256, 470 248, 510 305, 533 237, 613 263, 553 397, 455 262, 405 378, 343 287, 249 334, 229 191, 313 190)) mapnik::box2d clipping_box(181,106,631,470); std::string filename_("./benchmark/data/polygon.wkt"); std::ifstream in(filename_.c_str(),std::ios_base::in | std::ios_base::binary); if (!in.is_open()) throw std::runtime_error("could not open: '" + filename_ + "'"); std::string wkt_in( (std::istreambuf_iterator(in) ), (std::istreambuf_iterator()) ); int return_value = 0; { test1 test_runner(params,wkt_in,clipping_box); return_value = return_value | run(test_runner,"clipping polygon with agg"); } { test3 test_runner(params,wkt_in,clipping_box); return_value = return_value | run(test_runner,"clipping polygon with boost"); } /* { test4 test_runner(params,wkt_in,clipping_box); return_value = return_value | run(test_runner,"clipping polygon with clipper_tree"); } */ return return_value; } mapnik-3.0.9/benchmark/test_polygon_clipping_rendering.cpp000066400000000000000000000050441262555547000241260ustar00rootroot00000000000000#include "bench_framework.hpp" #include #include #include #include class test : public benchmark::test_case { std::string xml_; mapnik::box2d extent_; public: test(mapnik::parameters const& params, std::string const& xml, mapnik::box2d const& extent) : test_case(params), xml_(xml), extent_(extent) {} bool validate() const { mapnik::Map m(256,256); mapnik::load_map(m,xml_); m.zoom_to_box(extent_); mapnik::image_rgba8 im(m.width(),m.height()); mapnik::agg_renderer ren(m,im); ren.apply(); //mapnik::save_to_file(im.data(),"test.png"); return true; } bool operator()() const { mapnik::Map m(256,256); mapnik::load_map(m,xml_); m.zoom_to_box(extent_); for (unsigned i=0;i ren(m,im); ren.apply(); } return true; } }; int main(int argc, char** argv) { mapnik::parameters params; benchmark::handle_args(argc,argv,params); mapnik::datasource_cache::instance().register_datasources("./plugins/input/"); mapnik::box2d z1(-20037508.3428,-8317435.0606,20037508.3428,18399242.7298); // bbox for 16/10491/22911.png mapnik::box2d z16(-13622912.929097254,6026906.8062295765,-13621689.93664469,6028129.79868214); int return_value = 0; { test test_runner(params, "benchmark/data/polygon_rendering_clip.xml", z1); return_value = return_value | run(test_runner,"polygon clip render z1"); } { test test_runner(params, "benchmark/data/polygon_rendering_no_clip.xml", z1); return_value = return_value | run(test_runner,"polygon noclip render z1"); } { test test_runner(params, "benchmark/data/polygon_rendering_clip.xml", z16); return_value = return_value | run(test_runner,"polygon clip render z16"); } { test test_runner(params, "benchmark/data/polygon_rendering_no_clip.xml", z16); return_value = return_value | run(test_runner,"polygon noclip render z16"); } return return_value; } mapnik-3.0.9/benchmark/test_proj_transform1.cpp000066400000000000000000000067511262555547000216510ustar00rootroot00000000000000#include "bench_framework.hpp" #include #include #include class test : public benchmark::test_case { std::string src_; std::string dest_; mapnik::box2d from_; mapnik::box2d to_; bool defer_proj4_init_; public: test(mapnik::parameters const& params, std::string const& src, std::string const& dest, mapnik::box2d const& from, mapnik::box2d const& to, bool defer_proj) : test_case(params), src_(src), dest_(dest), from_(from), to_(to), defer_proj4_init_(defer_proj) {} bool validate() const { mapnik::projection src(src_,defer_proj4_init_); mapnik::projection dest(dest_,defer_proj4_init_); mapnik::proj_transform tr(src,dest); mapnik::box2d bbox = from_; if (!tr.forward(bbox)) return false; return ((std::fabs(bbox.minx() - to_.minx()) < .5) && (std::fabs(bbox.maxx() - to_.maxx()) < .5) && (std::fabs(bbox.miny() - to_.miny()) < .5) && (std::fabs(bbox.maxy() - to_.maxy()) < .5) ); } bool operator()() const { for (std::size_t i=0;i box(j,k,j,k); if (!tr.forward(box)) throw std::runtime_error("could not transform coords"); } } } return true; } }; // echo -180 -60 | cs2cs -f "%.10f" +init=epsg:4326 +to +init=epsg:3857 int main(int argc, char** argv) { mapnik::parameters params; benchmark::handle_args(argc,argv,params); mapnik::box2d from(-180,-80,180,80); mapnik::box2d to(-20037508.3427892476,-15538711.0963092316,20037508.3427892476,15538711.0963092316); std::string from_str("+init=epsg:4326"); std::string to_str("+init=epsg:3857"); std::string from_str2("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"); std::string to_str2("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"); int return_value = 0; test test_runner(params, from_str, to_str, from, to, true); return_value = return_value | run(test_runner,"lonlat->merc epsg"); test test_runner2(params, from_str2, to_str2, from, to, true); return_value = return_value | run(test_runner2,"lonlat->merc literal"); test test_runner3(params, to_str, from_str, to, from, true); return_value = return_value | run(test_runner3,"merc->lonlat epsg"); test test_runner4(params, to_str2, from_str2, to, from, true); return_value = return_value | run(test_runner4,"merc->lonlat literal"); return return_value; } mapnik-3.0.9/benchmark/test_quad_tree.cpp000066400000000000000000000030541262555547000204650ustar00rootroot00000000000000#include "bench_framework.hpp" #include #include using quad_tree_type = mapnik::quad_tree; class test : public benchmark::test_case { public: test(mapnik::parameters const& params) : test_case(params) {} bool validate() const { return true; } bool operator()() const { std::random_device rd; std::default_random_engine engine(rd()); std::uniform_int_distribution uniform_dist(0, 2048); quad_tree_type tree(mapnik::box2d(0,0,2048,2048)); //populate for (size_t i = 0; i < iterations_; ++i) { int cx = uniform_dist(engine); int cy = uniform_dist(engine); int sx = 0.2 * uniform_dist(engine); int sy = 0.2 * uniform_dist(engine); mapnik::box2d box(cx - sx,cy - sy, cx + sx, cy + sy); tree.insert(i, box); } // bounding box query std::size_t count=0; for (size_t i = 0; i < iterations_; ++i) { int cx = uniform_dist(engine); int cy = uniform_dist(engine); int sx = 0.4 * uniform_dist(engine); int sy = 0.4 * uniform_dist(engine); mapnik::box2d box(cx - sx,cy - sy, cx + sx, cy + sy); auto itr = tree.query_in_box(box); auto end = tree.query_end(); for ( ;itr != end; ++itr) { ++count; } } return true; } }; BENCHMARK(test,"quad_tree creation") mapnik-3.0.9/benchmark/test_rendering.cpp000066400000000000000000000064601262555547000204750ustar00rootroot00000000000000#include "bench_framework.hpp" #include #include #include #include #include #include #include class test : public benchmark::test_case { std::string xml_; mapnik::box2d extent_; mapnik::value_integer width_; mapnik::value_integer height_; double scale_factor_; std::string preview_; public: test(mapnik::parameters const& params) : test_case(params), xml_(), extent_(), width_(*params.get("width",256)), height_(*params.get("height",256)), scale_factor_(*params.get("scale_factor",1.0)), preview_(*params.get("preview","")) { boost::optional map = params.get("map"); if (!map) { throw std::runtime_error("please provide a --map arg"); } xml_ = *map; boost::optional ext = params.get("extent"); if (ext && !ext->empty()) { if (!extent_.from_string(*ext)) throw std::runtime_error("could not parse `extent` string" + *ext); } /* else { throw std::runtime_error("please provide a --extent= arg"); }*/ } bool validate() const { mapnik::Map m(width_,height_); mapnik::load_map(m,xml_,true); if (extent_.valid()) { m.zoom_to_box(extent_); } else { m.zoom_all(); } mapnik::image_rgba8 im(m.width(),m.height()); mapnik::agg_renderer ren(m,im,scale_factor_); ren.apply(); if (!preview_.empty()) { std::clog << "preview available at " << preview_ << "\n"; mapnik::save_to_file(im,preview_); } return true; } bool operator()() const { if (!preview_.empty()) { return false; } mapnik::Map m(width_,height_); mapnik::load_map(m,xml_); if (extent_.valid()) { m.zoom_to_box(extent_); } else { m.zoom_all(); } for (unsigned i=0;i ren(m,im,scale_factor_); ren.apply(); } return true; } }; int main(int argc, char** argv) { int return_value = 0; try { mapnik::parameters params; benchmark::handle_args(argc,argv,params); boost::optional name = params.get("name"); if (!name) { std::clog << "please provide a name for this test\n"; return -1; } mapnik::freetype_engine::register_fonts("./fonts/",true); mapnik::datasource_cache::instance().register_datasources("./plugins/input/"); { test test_runner(params); return_value = run(test_runner,*name); } } catch (std::exception const& ex) { std::clog << ex.what() << "\n"; return -1; } return return_value; } mapnik-3.0.9/benchmark/test_rendering_shared_map.cpp000066400000000000000000000140501262555547000226520ustar00rootroot00000000000000#include "bench_framework.hpp" #include #include #include #include #include #include #include #include #include #include #include #include template void process_layers(Renderer & ren, mapnik::request const& m_req, mapnik::projection const& map_proj, std::vector const& layers, double scale_denom) { unsigned layers_size = layers.size(); for (unsigned i=0; i < layers_size; ++i) { mapnik::layer const& lyr = layers[i]; if (lyr.visible(scale_denom)) { std::set names; mapnik::layer l(lyr); ren.apply_to_layer(l, ren, map_proj, m_req.scale(), scale_denom, m_req.width(), m_req.height(), m_req.extent(), m_req.buffer_size(), names); } } } class test : public benchmark::test_case { std::string xml_; mapnik::box2d extent_; mapnik::value_integer width_; mapnik::value_integer height_; std::shared_ptr m_; double scale_factor_; std::string preview_; mutable mapnik::image_rgba8 im_; public: test(mapnik::parameters const& params) : test_case(params), xml_(), extent_(), width_(*params.get("width",256)), height_(*params.get("height",256)), m_(new mapnik::Map(width_,height_)), scale_factor_(*params.get("scale_factor",2.0)), preview_(*params.get("preview","")), im_(m_->width(),m_->height()) { boost::optional map = params.get("map"); if (!map) { throw std::runtime_error("please provide a --map= arg"); } xml_ = *map; boost::optional ext = params.get("extent"); mapnik::load_map(*m_,xml_,true); if (ext && !ext->empty()) { if (!extent_.from_string(*ext)) throw std::runtime_error("could not parse `extent` string" + *ext); } else { m_->zoom_all(); extent_ = m_->get_current_extent(); std::clog << "Defaulting to max extent " << extent_ << "\n"; std::clog << " (pass --extent= to restrict bounds)\n"; } } bool validate() const { mapnik::request m_req(width_,height_,extent_); mapnik::attributes variables; m_req.set_buffer_size(m_->buffer_size()); mapnik::projection map_proj(m_->srs(),true); double scale_denom = mapnik::scale_denominator(m_req.scale(),map_proj.is_geographic()); scale_denom *= scale_factor_; mapnik::agg_renderer ren(*m_,m_req,variables,im_,scale_factor_); ren.start_map_processing(*m_); std::vector const& layers = m_->layers(); process_layers(ren,m_req,map_proj,layers,scale_denom); ren.end_map_processing(*m_); if (!preview_.empty()) { std::clog << "preview available at " << preview_ << "\n"; mapnik::save_to_file(im_,preview_); } return true; } bool operator()() const { if (!preview_.empty()) { return false; } for (unsigned i=0;iwidth(),m_->height()); mapnik::attributes variables; m_req.set_buffer_size(m_->buffer_size()); mapnik::projection map_proj(m_->srs(),true); double scale_denom = mapnik::scale_denominator(m_req.scale(),map_proj.is_geographic()); scale_denom *= scale_factor_; mapnik::agg_renderer ren(*m_,m_req,variables,im,scale_factor_); ren.start_map_processing(*m_); std::vector const& layers = m_->layers(); process_layers(ren,m_req,map_proj,layers,scale_denom); ren.end_map_processing(*m_); bool diff = false; mapnik::image_rgba8 const& dest = im; mapnik::image_rgba8 const& src = im_; for (unsigned int y = 0; y < height_; ++y) { const unsigned int* row_from = src.get_row(y); const unsigned int* row_to = dest.get_row(y); for (unsigned int x = 0; x < width_; ++x) { if (row_from[x] != row_to[x]) diff = true; } } if (diff) throw std::runtime_error("images differ"); } return true; } }; int main(int argc, char** argv) { int return_value = 0; try { mapnik::parameters params; benchmark::handle_args(argc,argv,params); boost::optional name = params.get("name"); if (!name) { std::clog << "please provide a name for this test\n"; return -1; } mapnik::freetype_engine::register_fonts("./fonts/",true); mapnik::datasource_cache::instance().register_datasources("./plugins/input/"); { test test_runner(params); return_value = run(test_runner,*name); } } catch (std::exception const& ex) { std::clog << ex.what() << "\n"; return -1; } return return_value; } mapnik-3.0.9/benchmark/test_to_bool.cpp000066400000000000000000000015131262555547000201470ustar00rootroot00000000000000#include "bench_framework.hpp" #include class test : public benchmark::test_case { std::string value_; public: test(mapnik::parameters const& params) : test_case(params), value_("true") {} bool validate() const { bool result = false; mapnik::util::string2bool(value_.data(),value_.data()+value_.size(),result); if (!result) return result; mapnik::util::string2bool(value_,result); return (result == true); } bool operator()() const { for (std::size_t i=0;ibool") mapnik-3.0.9/benchmark/test_to_double.cpp000066400000000000000000000017011262555547000204650ustar00rootroot00000000000000#include "bench_framework.hpp" #include class test : public benchmark::test_case { std::string value_; public: test(mapnik::parameters const& params) : test_case(params), value_("1.23456789") {} bool validate() const { double result = 0; if (!mapnik::util::string2double(value_.data(),value_.data()+value_.size(),result)) return false; if (result != 1.23456789) return false; result = 0; if (!mapnik::util::string2double(value_,result)) return false; if (result != 1.23456789) return false; return true; } bool operator()() const { for (std::size_t i=0;idouble") mapnik-3.0.9/benchmark/test_to_int.cpp000066400000000000000000000017151262555547000200120ustar00rootroot00000000000000#include "bench_framework.hpp" #include class test : public benchmark::test_case { std::string value_; public: test(mapnik::parameters const& params) : test_case(params), value_("123456789") {} bool validate() const { mapnik::value_integer result = 0; if (!mapnik::util::string2int(value_.data(),value_.data()+value_.size(),result)) return false; if (result != 123456789) return false; result = 0; if (!mapnik::util::string2int(value_,result)) return false; if (result != 123456789) return false; return true; } bool operator()() const { for (std::size_t i=0;iint") mapnik-3.0.9/benchmark/test_to_string1.cpp000066400000000000000000000012001262555547000205740ustar00rootroot00000000000000#include "bench_framework.hpp" #include class test : public benchmark::test_case { double value_; public: test(mapnik::parameters const& params) : test_case(params), value_(-0.1234) {} bool validate() const { std::string s; mapnik::util::to_string(s,value_); return (s == "-0.1234"); } bool operator()() const { std::string out; for (std::size_t i=0;istring") mapnik-3.0.9/benchmark/test_to_string2.cpp000066400000000000000000000011631262555547000206050ustar00rootroot00000000000000#include "bench_framework.hpp" #include class test : public benchmark::test_case { double value_; public: test(mapnik::parameters const& params) : test_case(params), value_(-0.1234) {} bool validate() const { std::ostringstream s; s << value_; return (s.str() == "-0.1234"); } bool operator()() const { std::string out; for (std::size_t i=0;istring") mapnik-3.0.9/benchmark/test_utf_encoding.cpp000066400000000000000000000063111262555547000211570ustar00rootroot00000000000000#include "bench_framework.hpp" #include #include #include #ifndef __linux__ #include class test : public benchmark::test_case { std::string utf8_; public: test(mapnik::parameters const& params) : test_case(params), utf8_(u8"שלום") {} bool validate() const { std::wstring_convert, char32_t> utf32conv; std::u32string utf32 = utf32conv.from_bytes(utf8_); if (utf32.size() != 4) return false; if (utf32[0] != 0x5e9 && utf32[1] != 0x5dc && utf32[2] != 0x5d5 && utf32[3] != 0x5dd) return false; return true; } bool operator()() const { std::u32string utf32; std::wstring_convert, char32_t> utf32conv; for (std::size_t i=0;i(utf8_); if (utf32.size() != 4) return false; if (utf32[0] != 0x5e9 && utf32[1] != 0x5dc && utf32[2] != 0x5d5 && utf32[3] != 0x5dd) return false; return true; } bool operator()() const { std::u32string utf32; for (std::size_t i=0;i(utf8_); } return true; } }; class test3 : public benchmark::test_case { std::string utf8_; public: test3(mapnik::parameters const& params) : test_case(params), utf8_(u8"שלום") {} bool validate() const { mapnik::transcoder tr_("utf-8"); mapnik::value_unicode_string utf32 = tr_.transcode(utf8_.data(),utf8_.size()); //std::u32string utf32 = boost::locale::conv::utf_to_utf(utf8_); if (utf32.length() != 4) return false; if (utf32[0] != 0x5e9 && utf32[1] != 0x5dc && utf32[2] != 0x5d5 && utf32[3] != 0x5dd) return false; return true; } bool operator()() const { mapnik::transcoder tr_("utf-8"); mapnik::value_unicode_string utf32; for (std::size_t i=0;i is not supported on __linux__\n"; #endif test2 test_runner2(params); return_value = return_value | run(test_runner2,"utf encode boost::locale"); test3 test_runner3(params); return_value = return_value | run(test_runner3,"utf encode ICU"); return return_value; } mapnik-3.0.9/benchmark/utils/000077500000000000000000000000001262555547000161075ustar00rootroot00000000000000mapnik-3.0.9/benchmark/utils/random_image.py000066400000000000000000000006141262555547000211040ustar00rootroot00000000000000import mapnik import random im = mapnik.Image(256,256) for x in xrange(0,im.width()): for y in xrange(0,im.height()): r = int(random.random() * 255) g = random.random() * 255 b = random.random() * 255 a = random.random() color = mapnik.Color('rgba(%i,%i,%i,%f)' % (r,g,b,a)) im.set_pixel(x,y,color) im.save('./benchmark/data/multicolor.png')mapnik-3.0.9/bootstrap.sh000077500000000000000000000107761262555547000154040ustar00rootroot00000000000000#!/usr/bin/env bash #set -eu : ' todo - docs for base setup: sudo apt-get -y install zlib1g-dev make git - shrink icu data ' function setup_mason() { if [[ ! -d ./.mason ]]; then git clone --depth 1 https://github.com/mapbox/mason.git ./.mason else echo "Updating to latest mason" (cd ./.mason && git pull) fi export MASON_DIR=$(pwd)/.mason export PATH=$(pwd)/.mason:$PATH export CXX=${CXX:-clang++} export CC=${CC:-clang} } if [[ $(uname -s) == 'Darwin' ]]; then FIND_PATTERN="\/Users\/travis\/build\/mapbox\/mason" else FIND_PATTERN="\/home\/travis\/build\/mapbox\/mason" fi REPLACE="$(pwd)" REPLACE=${REPLACE////\\/} function install() { MASON_PLATFORM_ID=$(mason env MASON_PLATFORM_ID) if [[ ! -d ./mason_packages/${MASON_PLATFORM_ID}/${1}/${2} ]]; then mason install $1 $2 mason link $1 $2 if [[ $3 ]]; then LA_FILE=$(${MASON_DIR:-~/.mason}/mason prefix $1 $2)/lib/$3.la if [[ -f ${LA_FILE} ]]; then perl -i -p -e "s/${FIND_PATTERN}/${REPLACE}/g;" ${LA_FILE} else echo "$LA_FILE not found" fi fi fi } ICU_VERSION="55.1" function install_mason_deps() { install gdal 1.11.2 libgdal & install boost 1.59.0 & install boost_liball 1.59.0 & install freetype 2.6 libfreetype & install harfbuzz 0.9.40 libharfbuzz & install jpeg_turbo 1.4.0 libjpeg & install libpng 1.6.17 libpng & install webp 0.4.2 libwebp & install icu ${ICU_VERSION} & install proj 4.8.0 libproj & install libtiff 4.0.4beta libtiff & install libpq 9.4.0 & install sqlite 3.8.8.1 libsqlite3 & install expat 2.1.0 libexpat & install pixman 0.32.6 libpixman-1 & install cairo 1.14.2 libcairo & install protobuf 2.6.1 & wait # technically protobuf is not a mapnik core dep, but installing # here by default helps make mapnik-vector-tile builds easier } MASON_LINKED_ABS=$(pwd)/mason_packages/.link MASON_LINKED_REL=./mason_packages/.link export C_INCLUDE_PATH="${MASON_LINKED_ABS}/include" export CPLUS_INCLUDE_PATH="${MASON_LINKED_ABS}/include" export LIBRARY_PATH="${MASON_LINKED_ABS}/lib" function make_config() { if [[ $(uname -s) == 'Darwin' ]]; then local PATH_REPLACE="/Users/travis/build/mapbox/mason/mason_packages:./mason_packages" else local PATH_REPLACE="/home/travis/build/mapbox/mason/mason_packages:./mason_packages" fi echo " CXX = '$CXX' CC = '$CC' CUSTOM_CXXFLAGS = '-fvisibility=hidden -fvisibility-inlines-hidden -DU_CHARSET_IS_UTF8=1' RUNTIME_LINK = 'static' INPUT_PLUGINS = 'all' PATH = '${MASON_LINKED_REL}/bin' PKG_CONFIG_PATH = '${MASON_LINKED_REL}/lib/pkgconfig' PATH_REMOVE = '/usr:/usr/local' PATH_REPLACE = '${PATH_REPLACE}' BOOST_INCLUDES = '${MASON_LINKED_REL}/include' BOOST_LIBS = '${MASON_LINKED_REL}/lib' ICU_INCLUDES = '${MASON_LINKED_REL}/include' ICU_LIBS = '${MASON_LINKED_REL}/lib' HB_INCLUDES = '${MASON_LINKED_REL}/include' HB_LIBS = '${MASON_LINKED_REL}/lib' PNG_INCLUDES = '${MASON_LINKED_REL}/include/libpng16' PNG_LIBS = '${MASON_LINKED_REL}/lib' JPEG_INCLUDES = '${MASON_LINKED_REL}/include' JPEG_LIBS = '${MASON_LINKED_REL}/lib' TIFF_INCLUDES = '${MASON_LINKED_REL}/include' TIFF_LIBS = '${MASON_LINKED_REL}/lib' WEBP_INCLUDES = '${MASON_LINKED_REL}/include' WEBP_LIBS = '${MASON_LINKED_REL}/lib' PROJ_INCLUDES = '${MASON_LINKED_REL}/include' PROJ_LIBS = '${MASON_LINKED_REL}/lib' PG_INCLUDES = '${MASON_LINKED_REL}/include' PG_LIBS = '${MASON_LINKED_REL}/lib' FREETYPE_INCLUDES = '${MASON_LINKED_REL}/include/freetype2' FREETYPE_LIBS = '${MASON_LINKED_REL}/lib' SVG_RENDERER = True CAIRO_INCLUDES = '${MASON_LINKED_REL}/include' CAIRO_LIBS = '${MASON_LINKED_REL}/lib' SQLITE_INCLUDES = '${MASON_LINKED_REL}/include' SQLITE_LIBS = '${MASON_LINKED_REL}/lib' BENCHMARK = True CPP_TESTS = True PGSQL2SQLITE = True XMLPARSER = 'ptree' SVG2PNG = True SAMPLE_INPUT_PLUGINS = True " > ./config.py } # NOTE: the `mapnik-settings.env` is used by test/run (which is run by `make test`) function setup_runtime_settings() { echo "export PROJ_LIB=${MASON_LINKED_ABS}/share/proj" > mapnik-settings.env echo "export ICU_DATA=${MASON_LINKED_ABS}/share/icu/${ICU_VERSION}" >> mapnik-settings.env echo "export GDAL_DATA=${MASON_LINKED_ABS}/share/gdal" >> mapnik-settings.env source mapnik-settings.env } function main() { setup_mason install_mason_deps make_config setup_runtime_settings echo "Ready, now run:" echo "" echo " ./configure && make" } main mapnik-3.0.9/configure000077500000000000000000000001431262555547000147220ustar00rootroot00000000000000#!/bin/sh PYTHON=${PYTHON:-python} $PYTHON scons/scons.py --implicit-deps-changed configure "$@" mapnik-3.0.9/demo/000077500000000000000000000000001262555547000137415ustar00rootroot00000000000000mapnik-3.0.9/demo/c++/000077500000000000000000000000001262555547000143115ustar00rootroot00000000000000mapnik-3.0.9/demo/c++/Makefile000066400000000000000000000007541262555547000157570ustar00rootroot00000000000000CXXFLAGS = $(shell mapnik-config --includes --defines --cxxflags --dep-includes) LDFLAGS = $(shell mapnik-config --libs --dep-libs --ldflags) OBJ = rundemo.o BIN = rundemo all : $(BIN) $(BIN) : $(OBJ) $(CXX) $(OBJ) $(LDFLAGS) -o $@ .c.o : $(CXX) -c $(CXXFLAGS) $< gyp: rm -rf ./build gyp rundemo.gyp --depth=. -f make --generator-output=./build/ make -C ./build build/out/Release/rundemo `mapnik-config --prefix` .PHONY : clean clean: rm -f $(OBJ) rm -f $(BIN) rm -f ./buildmapnik-3.0.9/demo/c++/README.md000066400000000000000000000037441262555547000156000ustar00rootroot00000000000000## rundemo.cpp This directory contains a simple c++ program demonstrating the Mapnik C++ API. It mimics the python 'rundemo.py' example with a couple exceptions. If building on unix you can have this program automatically build by configuring Mapnik like: ./configure DEMO=True However, this example code also should be able to be built standalone. The following notes describe how to do that on various operating systems. ## Depends - Mapnik library development headers - `mapnik-config` on unix and `mapnik-config.bat` on windows ### Unix On OS X and Linux you also need `make`. ### Windows On windows, additional dependencies to build are: - MSVS 2010 with C++ compiler - Python 2.x - gyp: https://code.google.com/p/gyp | https://github.com/springmeyer/hello-gyp `mapnik-config.bat` should come with your Mapnik installation. First confirm it is on your path: mapnik-config # should give usage To install gyp, which is pure python do: svn checkout http://gyp.googlecode.com/svn/trunk/ gyp cd gyp python setup.py install If you do not have svn installed you can grab gyp from: https://github.com/TooTallNate/node-gyp/archive/master.zip # unzip and extract the 'gyp' subfolder then do cd gyp python setup.py install ## Building the demo ### Unix Simply type: make Then to run do: ./rundemo `mapnik-config --prefix` On OS X you can also create an xcode project: gyp rundemo.gyp --depth=. -f xcode --generator-output=./build/ xcodebuild -project ./build/rundemo.xcodeproj ./build/out/Release/rundemo `mapnik-config --prefix` ### Windows First you need to build the visual studio solution with gyp: C:\Python27\python.exe c:\Python27\Scripts\gyp rundemo.gyp --depth=. -f msvs -G msvs_version=2010 Then you can compile with `msbuild`: msbuild rundemo.sln /p:Configuration="Release" /p:Platform=Win32 Then run it! for /f %i in ('mapnik-config --prefix') do set MAPNIK_PREFIX=%i Release\rundemo.exe %MAPNIK_PREFIX% mapnik-3.0.9/demo/c++/build.py000066400000000000000000000027551262555547000157730ustar00rootroot00000000000000# # This file is part of Mapnik (c++ mapping toolkit) # # Copyright (C) 2015 Artem Pavlenko, Dane Springmeyer # # Mapnik is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # import os from copy import copy Import ('env') source = Split( """ rundemo.cpp """ ) demo_env = env.Clone() demo_env['CXXFLAGS'] = copy(env['LIBMAPNIK_CXXFLAGS']) demo_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES']) if env['HAS_CAIRO']: demo_env.PrependUnique(CPPPATH=env['CAIRO_CPPPATHS']) demo_env.Append(CPPDEFINES = '-DHAVE_CAIRO') libraries = [env['MAPNIK_NAME']] libraries.extend(copy(env['LIBMAPNIK_LIBS'])) rundemo = demo_env.Program('rundemo', source, LIBS=libraries) Depends(rundemo, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) # build locally if installing if 'install' in COMMAND_LINE_TARGETS: env.Alias('install',rundemo) mapnik-3.0.9/demo/c++/common.gypi000066400000000000000000000015121262555547000164720ustar00rootroot00000000000000{ 'variables': { 'conditions': [ ['OS == "mac"', { 'target_arch%': 'x64' }, { 'target_arch%': 'ia32' }] ] }, 'target_defaults': { 'default_configuration': 'Release', 'defines': [ ], 'conditions': [ ['OS == "mac"', { 'defines': [ 'DARWIN' ] }, { 'defines': [ 'LINUX' ] }], ['OS == "mac" and target_arch == "x64"', { 'xcode_settings': { 'ARCHS': [ 'x86_64' ] }, }] ], 'configurations': { 'Debug': { 'cflags': [ '-g', '-O0' ], 'xcode_settings': { 'OTHER_CFLAGS': [ '-g', '-O0' ] } }, 'Release': { 'cflags': [ '-O3' ], 'defines': [ 'NDEBUG' ], 'xcode_settings': { 'OTHER_CFLAGS': [ '-O3' ] } } } } }mapnik-3.0.9/demo/c++/rundemo.cpp000066400000000000000000000332461262555547000164760ustar00rootroot00000000000000/***************************************************************************** * * This file is part of Mapnik (c++ mapping toolkit) * * Copyright (C) 2015 Artem Pavlenko * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *****************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(HAVE_CAIRO) #include #include #endif #include int main ( int, char** ) { using namespace mapnik; const std::string srs_lcc="+proj=lcc +ellps=GRS80 +lat_0=49 +lon_0=-95 +lat+1=49 +lat_2=77 +datum=NAD83 +units=m +no_defs"; const std::string srs_merc="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"; try { std::cout << " running demo ... \n"; datasource_cache::instance().register_datasources("plugins/input/"); freetype_engine::register_font("fonts/dejavu-fonts-ttf-2.34/ttf/DejaVuSans.ttf"); Map m(800,600); m.set_background(parse_color("white")); m.set_srs(srs_merc); // create styles // Provinces (polygon) feature_type_style provpoly_style; provpoly_style.reserve(2); // prevent reallocation and copying in add_rule { rule r; r.set_filter(parse_expression("[NAME_EN] = 'Ontario'")); { polygon_symbolizer poly_sym; put(poly_sym, keys::fill, color(250, 190, 183)); r.append(std::move(poly_sym)); } provpoly_style.add_rule(std::move(r)); } { rule r; r.set_filter(parse_expression("[NOM_FR] = 'Québec'")); { polygon_symbolizer poly_sym; put(poly_sym, keys::fill, color(217, 235, 203)); r.append(std::move(poly_sym)); } provpoly_style.add_rule(std::move(r)); } m.insert_style("provinces", std::move(provpoly_style)); // Provinces (polyline) feature_type_style provlines_style; { rule r; { line_symbolizer line_sym; put(line_sym,keys::stroke,color(0,0,0)); put(line_sym,keys::stroke_width,1.0); dash_array dash; dash.emplace_back(8,4); dash.emplace_back(2,2); dash.emplace_back(2,2); put(line_sym,keys::stroke_dasharray,dash); r.append(std::move(line_sym)); } provlines_style.add_rule(std::move(r)); } m.insert_style("provlines", std::move(provlines_style)); // Drainage feature_type_style qcdrain_style; { rule r; r.set_filter(parse_expression("[HYC] = 8")); { polygon_symbolizer poly_sym; put(poly_sym, keys::fill, color(153, 204, 255)); r.append(std::move(poly_sym)); } qcdrain_style.add_rule(std::move(r)); } m.insert_style("drainage", std::move(qcdrain_style)); // Roads 3 and 4 (The "grey" roads) feature_type_style roads34_style; { rule r; r.set_filter(parse_expression("[CLASS] = 3 or [CLASS] = 4")); { line_symbolizer line_sym; put(line_sym,keys::stroke,color(171,158,137)); put(line_sym,keys::stroke_width,2.0); put(line_sym,keys::stroke_linecap,ROUND_CAP); put(line_sym,keys::stroke_linejoin,ROUND_JOIN); r.append(std::move(line_sym)); } roads34_style.add_rule(std::move(r)); } m.insert_style("smallroads", std::move(roads34_style)); // Roads 2 (The thin yellow ones) feature_type_style roads2_style_1; { rule r; r.set_filter(parse_expression("[CLASS] = 2")); { line_symbolizer line_sym; put(line_sym,keys::stroke,color(171,158,137)); put(line_sym,keys::stroke_width,4.0); put(line_sym,keys::stroke_linecap,ROUND_CAP); put(line_sym,keys::stroke_linejoin,ROUND_JOIN); r.append(std::move(line_sym)); } roads2_style_1.add_rule(std::move(r)); } m.insert_style("road-border", std::move(roads2_style_1)); feature_type_style roads2_style_2; { rule r; r.set_filter(parse_expression("[CLASS] = 2")); { line_symbolizer line_sym; put(line_sym,keys::stroke,color(255,250,115)); put(line_sym,keys::stroke_width,2.0); put(line_sym,keys::stroke_linecap,ROUND_CAP); put(line_sym,keys::stroke_linejoin,ROUND_JOIN); r.append(std::move(line_sym)); } roads2_style_2.add_rule(std::move(r)); } m.insert_style("road-fill", std::move(roads2_style_2)); // Roads 1 (The big orange ones, the highways) feature_type_style roads1_style_1; { rule r; r.set_filter(parse_expression("[CLASS] = 1")); { line_symbolizer line_sym; put(line_sym,keys::stroke,color(188,149,28)); put(line_sym,keys::stroke_width,7.0); put(line_sym,keys::stroke_linecap,ROUND_CAP); put(line_sym,keys::stroke_linejoin,ROUND_JOIN); r.append(std::move(line_sym)); } roads1_style_1.add_rule(std::move(r)); } m.insert_style("highway-border", std::move(roads1_style_1)); feature_type_style roads1_style_2; { rule r; r.set_filter(parse_expression("[CLASS] = 1")); { line_symbolizer line_sym; put(line_sym,keys::stroke,color(242,191,36)); put(line_sym,keys::stroke_width,5.0); put(line_sym,keys::stroke_linecap,ROUND_CAP); put(line_sym,keys::stroke_linejoin,ROUND_JOIN); r.append(std::move(line_sym)); } roads1_style_2.add_rule(std::move(r)); } m.insert_style("highway-fill", std::move(roads1_style_2)); // Populated Places feature_type_style popplaces_style; { rule r; { text_symbolizer text_sym; text_placements_ptr placement_finder = std::make_shared(); placement_finder->defaults.format_defaults.face_name = "DejaVu Sans Book"; placement_finder->defaults.format_defaults.text_size = 10.0; placement_finder->defaults.format_defaults.fill = color(0,0,0); placement_finder->defaults.format_defaults.halo_fill = color(255,255,200); placement_finder->defaults.format_defaults.halo_radius = 1.0; placement_finder->defaults.set_format_tree(std::make_shared(parse_expression("[GEONAME]"))); put(text_sym, keys::text_placements_, placement_finder); r.append(std::move(text_sym)); } popplaces_style.add_rule(std::move(r)); } m.insert_style("popplaces", std::move(popplaces_style)); // layers // Provincial polygons { parameters p; p["type"]="shape"; p["file"]="demo/data/boundaries"; p["encoding"]="latin1"; layer lyr("Provinces"); lyr.set_datasource(datasource_cache::instance().create(p)); lyr.add_style("provinces"); lyr.set_srs(srs_lcc); m.add_layer(lyr); } // Drainage { parameters p; p["type"]="shape"; p["file"]="demo/data/qcdrainage"; layer lyr("Quebec Hydrography"); lyr.set_datasource(datasource_cache::instance().create(p)); lyr.set_srs(srs_lcc); lyr.add_style("drainage"); m.add_layer(lyr); } { parameters p; p["type"]="shape"; p["file"]="demo/data/ontdrainage"; layer lyr("Ontario Hydrography"); lyr.set_datasource(datasource_cache::instance().create(p)); lyr.set_srs(srs_lcc); lyr.add_style("drainage"); m.add_layer(lyr); } // Provincial boundaries { parameters p; p["type"]="shape"; p["file"]="demo/data/boundaries_l"; layer lyr("Provincial borders"); lyr.set_srs(srs_lcc); lyr.set_datasource(datasource_cache::instance().create(p)); lyr.add_style("provlines"); m.add_layer(lyr); } // Roads { parameters p; p["type"]="shape"; p["file"]="demo/data/roads"; layer lyr("Roads"); lyr.set_srs(srs_lcc); lyr.set_datasource(datasource_cache::instance().create(p)); lyr.add_style("smallroads"); lyr.add_style("road-border"); lyr.add_style("road-fill"); lyr.add_style("highway-border"); lyr.add_style("highway-fill"); m.add_layer(lyr); } // popplaces { parameters p; p["type"]="shape"; p["file"]="demo/data/popplaces"; p["encoding"] = "latin1"; layer lyr("Populated Places"); lyr.set_srs(srs_lcc); lyr.set_datasource(datasource_cache::instance().create(p)); lyr.add_style("popplaces"); m.add_layer(lyr); } m.zoom_to_box(box2d(-8024477.28459,5445190.38849,-7381388.20071,5662941.44855)); image_rgba8 buf(m.width(),m.height()); agg_renderer ren(m,buf); ren.apply(); std::string msg("These maps have been rendered using AGG in the current directory:\n"); #ifdef HAVE_JPEG save_to_file(buf,"demo.jpg","jpeg"); msg += "- demo.jpg\n"; #endif #ifdef HAVE_PNG save_to_file(buf,"demo.png","png"); save_to_file(buf,"demo256.png","png8"); msg += "- demo.png\n"; msg += "- demo256.png\n"; #endif #ifdef HAVE_TIFF save_to_file(buf,"demo.tif","tiff"); msg += "- demo.tif\n"; #endif #ifdef HAVE_WEBP save_to_file(buf,"demo.webp","webp"); msg += "- demo.webp\n"; #endif msg += "Have a look!\n"; std::cout << msg; #if defined(HAVE_CAIRO) // save to pdf/svg files save_to_cairo_file(m,"cairo-demo.pdf"); save_to_cairo_file(m,"cairo-demo.svg"); /* we could also do: save_to_cairo_file(m,"cairo-demo.png"); but instead let's build up a surface for more flexibility */ cairo_surface_ptr image_surface( cairo_image_surface_create(CAIRO_FORMAT_ARGB32,m.width(),m.height()), cairo_surface_closer()); double scale_factor = 1.0; cairo_ptr image_context(create_context(image_surface)); mapnik::cairo_renderer png_render(m,image_context,scale_factor); png_render.apply(); // we can now write to png with cairo functionality cairo_surface_write_to_png(&*image_surface, "cairo-demo.png"); // but we can also benefit from quantization by converting // to a mapnik image object and then saving that mapnik::image_rgba8 im_data(cairo_image_surface_get_width(&*image_surface), cairo_image_surface_get_height(&*image_surface)); cairo_image_to_rgba8(im_data, image_surface); save_to_file(im_data, "cairo-demo256.png","png8"); cairo_surface_finish(&*image_surface); std::cout << "Three maps have been rendered using Cairo in the current directory:\n" "- cairo-demo.png\n" "- cairo-demo256.png\n" "- cairo-demo.pdf\n" "- cairo-demo.svg\n" "Have a look!\n"; #endif // save map definition (data + style) save_map(m, "map.xml"); } catch ( std::exception const& ex ) { std::cerr << "### std::exception: " << ex.what() << std::endl; return EXIT_FAILURE; } catch ( ... ) { std::cerr << "### Unknown exception." << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; } mapnik-3.0.9/demo/c++/rundemo.gyp000066400000000000000000000023211262555547000165010ustar00rootroot00000000000000{ 'includes': [ 'common.gypi' ], 'default_configuration': 'Release', 'targets': [ { 'target_name': 'rundemo', 'type': 'executable', 'sources': [ 'rundemo.cpp', ], 'conditions': [ [ 'OS=="mac"', { 'libraries': [ '-lmapnik', '-undefined dynamic_lookup' ], 'xcode_settings': { 'OTHER_CPLUSPLUSFLAGS':[ '(!Aok80AXj&*!A#ߝ70Ar*!Ao60A|*!A'#փ50A4|? ,!AT50A@VZ:/!A\10A}3!Ao/0AzV2!A0.0Az,!Aؓ,0A0!ANz+0A1/!A)G*0AdO0!A^+0AOS2!A_W*0AD6!Aޢ*0AA5!A횺*)0Aׂ2!A (0Aq3!A,5'0A ǕP6!AJiK(0A 9!A:J)0AB!A/,)0AMzD!A&'0A-{E!A˿'0At/L9I!A B'0ACͱI!A:i%&0Aw1I!Alb$0A/QF!A}"0AH]~C!ArN 0A$h% C!A`20AtPH!A0AئrH!AqaW&0ADz)K!AQ !0A(L!ALyl#0Al: U!A &0AY!A_^0Al Y;!AyO0A5 D˜!AC0AX0tʐ!A0Av8s!A0AΑ!Aڛj0Ag!A.6,"0A8!A3#0A-KN!AS7#0A,-!A,k"0AqA !A" 0AČ։!AA'|q0A1!A&s0A4pke!A郓0A m!AË 0A@>m!A'"0A;}!AٟFP"0AT t !AV~0A<`Ɇ!Ab{0A,h!AJ0A$!!A*Yо40A !Az0Ai !A70AL}F!A^[a0Al&aɀ!A[wH0AGw1!Au0A!AsI0A1?H܂!A61A0A܃!AY'L0A(}g<Ƈ!AF0A>ʊ!AV(I^0Aģ!A+0Ahw栎!AE8c0Ah!A *0Atg !AOP5]0A(㜆!Aٯ 0ACۃ!Akk?d 0A<,!AȘ: 0A4!A80A=&{!A 0A1fʋ!A8Y0A풚!Ac7$K 0A)!A 8& 0AC4ᣌ!Aug 0ADGF!AhO0ALa!A9TNO0AL!N!Ag0ATXl!AFPv00Al4̮!A#:0AT!Ab 0A x^>!A{X/A2!AC0AYg!Aƾ%t0A!A-n(0AԠ2!Ah~0AY`n!A(}0A =O!A;`1;0A@i,!A@/AZ-P!Ayi"0A\(!Ae0A,?!Ar0AT?[!AwY0AC!ACq6J0A wj۬!A[`d 0A!A' 0A`]+y!Aa" 0A g!A4Ma 0Av:!A50A,#!A$Ny 0AP dם!Aj< 0ADӶ!As 0A:V!A#_ 0AW!Ar5+ 0AJM!ACt\ 0A,!Aߣ5/A!AV/Ahkn!Arę/AL`!AjP>0j/A4s!AbV]/A$-'G!A)Lc4/A!Ap/ApoG!A:/A\!AY/AȢa!A,rzw/A4!A ז/AHˁ!AMwx0ALR 2"AϏP0Aң#75"A)0Avf8"A–/AXr;"AN/A@Z'<"AcE/Az :"AvƊ/A:"A/A v0n"Aib/A@g3qr"A./A Ls"A-ۣ+/ASMx"A$"u/AxФj{"A+/AX I{"A紱&/AV?}"A9/AyV"A}m/Avp"A!/A?$"A [/A"AR ]%/A#z<"An/AD %6"Ag#~/A"A!S/Aо49"AWջy/AXTS"AQC/AZ"A]/AXe"APm/A8ڞ"AvWɱ/AT6 \"AyP/Ap,I"AE/A|!8"AW0Y/ApCIt"AH/Aޤ"AE/At̡"A [/Ą"A/A;e"A#o/A[m"A: Ȗ/AI"A\x/Ad 6"A E/A8Wֻ"A$/Az6+"A-ڲ/A+_M"A~?.L/A4F%"AuR/A،!x"A1A /ADY3"A|l/A+"A>/A IJu"A5+]P/At.2S"ASK/A*"A h/A;"Az r/AP4L"AՁT/AN"A/AKy"AUZt_/A/"AD>$/A&"Am/A|p"A/A$"AUAT/AH"AXsR/AD["AUϫ/A""A/Ahb,"Aވ/ATý"Au/AZ"A` /A$:@"AAogr/Aݡ"AT/A䱏i"A\h/AS"A 5/AcH"AO(^v/Ax߿"Aw܈U/AJ"Aj/À>"A{/ALuCl"Ae^ /A8"Ar e/AC7"AĀ/A "A1/A5 "Ax-s/A"A z/A=z"AO|u/A\"Ai o/A#M"A@/A~"A)_C/A(%"A4^}^/A"AB Ԃ/A"Aq鈅/A> "AC/Ath^)"A{/Aq"A7B/Apv"Az ߊ/ATѶ"AoG/Ag"Aȵϋ/AK"A]jc/A8g#"A4g/A0V"AtT/A(Y&"ACH/AX0"A\弍/Ap 1"A;/A,"A"Af>ߡ/A"A̝ʜ/A|zVK"A!&@ݙ/AH]"Apu/A\L"A 9T/A<("Au~/A|1!F"APi>0#AŶr/ATRB2#A Wz/AH{3#A~/A,{3#A?/Aͼ5#AUN;/A,\5#AɈ/AXA͖J8#AFd#/ADv[;#Ag/ApQX=#A/A!?#Ar/AV>#AƤv}/AT~@#AV~/AF#Auy/A6rF#A s/ATYmJ#A+)r/A!J#A^!s/AS/Ad3Ͼ^#Au{X/AxC^#Al@+/Aj#a#Aov#A:SK/A"s#Az!/Ayu#AX/A zy#AO/APTz#Atn]/A+"+|#A͟]/Aܕny#A"V|/A`x#AAp/AkWo#AʌUq/A{7n#AOgv/ATǍJq#Ajg/w/A*rbs#ASx/Ao'q#AWEbs/A(i#A^r/Al(;i#A?p/AHm~f#A_<\ l/ATf#A+'g/Ag2g#AdAb/Az(d#AZP`/A Rd#AX]/Axg#A\S]/A4k#AVb/Aͥ*j#A9c/AP^k#A-Sc/A|nKn#Acgv_/A8b5t#AJ!]/Aځv#ACe]/A(S~j{#AˁB/`/Ae}#AW +r_/A,^鿇#A%Ng/At #A&3fGj/Aム#A)m/AMN]#A.l/Ad9#AXr85hh/A]Z/AI{#A ^V/A\V‘#A)cV/A[)8#A@Y/A#AYʨZ/Aw#AZLj^/Ae-#A;Kb/Ac.#A3g/A7Fy#AfZk1g/A<҂#Ah3@f/ALXE#A=X^/A4Oz#ACX[/A0?#AY/A|#A\/ZZ/Am٣#AWc/Ap#AaJ-f/Aڦ#A=Fk/A#A{@l/AC*#Aj`p/Appi#Aدo/AUϘ#ALm/Atxs#Awi/AaÅm#AEzj/Ayb7n#A'BdCh/A%|&#Ax$d/Af,H#AΌ0a/A%#AC[/A]$#A{X/A #A;KT/Axn#A r>TP/Aw#A7fL/AҊ#AL/A'9#A udN/A|-N#A!)rG/A #AiD/Ah!1<#Afq@/A+F#AVOv8/A9#A3"P6/AhM#A4Dm4/A#A5t5/Ad6#AY52/Ax #A\Y./A,ɷ#AEw(/Ap0h#A'9{"/AtfV#A4(b/A"X#A/A` #A1@V~/AZ#A1p'Em/A\xɹ#ATC /A#Ad*%/AuF+#A,'/A00 #A2)/AO{P߻#AYV'+,/AйF#Ag'/AĘY#ABam&/AL#AU5(/A͐#AEߴM./A#AcZ 4/A3#Aa8/Ax;+#A?;/Atԓ#AvV:/A0~1J#AZC/Av|Jc#AɕE/A8Ŷy#A hH/A0#AN{H/Ad߹#A,>/A#AESz=/Ad=#AkWA>/AX]+#A"ϖG/Af#A)(:N/AJ|#A m3P/A 'C#AĥR/A:#AJ¥dN/ApNF#A2.M/Aii#A}J/Abb#A+G/A`=dF#AČB/AP"#A+>/Aoz#AR[?/A7#AX8\C+A/Aj#A?C C/A`W #Aj"G/A6#A2G/A+0#A!\J/Aڻ2#Ak`L/AX#AW>N/A#A]H4MQ/A&4u#AT/A#A?W/A%)#AZ/ATd#AVS/AH8j.#A0N/AxH#AuH/A0؄W#Al/ѱD/Ae:#A|.\?/A(#A0+;/AԬ@#A3/AFF#A%~);/A@q܅#A-+78/Apbtk#A_8n1/A#A^23/A<;#Aiog6/Ap% #A{mlگ:/A۵#Ai?/A`o#AP/A\d"$Af|A>J/AKL3($A,`M/A5$k&$AbS/A, ($AZU/A;t.$Aԇ3u_/At韭)$AMj/AL?)$AL\Rk/Ax,$AYOk/A-$A{WAj/A`) 1$Ap.j/A`i2$Ab;i/AQ7$A8a/A}u6$A^/AM^6$A2a[/A0a `8$A7 \/A46:$A!V`/A,A;$AbpAe/A,@':$A+;j/ADwf~<$A]dk/AT<$APk/A詰=$A,Ak/A,\?$AU(k/A` C$A+ t g/A zD$A~p,b/A1LD$Ay[/AUqC$AǴyT/ALTpC$AY\6N/A@k.B$AJ/As C$A -I/AA$AScG/ALµA$Ai/B/AQ@B$Aя?/A`pA$Aˇ}=/AF?=?$AټL8/Ap|;$A ;4/Ap(=$A}<0/AU+P<$A^4W//A5:$A5[,/A`Bv8$AP<Ց)/A$0U9$Aǃ?&/A2H@$A|su!/A/uB$AKh "/AeE$AYV)#&/A0JD$A '/A`sWJ$Arx%/A iK$As!/A4 `P$A&d!/AX[Q$A=8#/A(2mR$AѢ'/AՐQ$A;'/A<$R$AZ %/AX$A`!/AY%[$A/,/A(p@[$ART/AY6Z$ATQ`/A]$AB /A ^$A /A| `$AXq /A4F%d$Arr/ADW..d$Ak /A(9}4b$AwD/At*h$A9u\kH/Ae$A}&x,K/AS&g$Ad|L/A(sl$AR"tG/Ap$AvJB/AؒFvr$A{ik?/A#0s$Ajϡ$Aߕ.Aua|E$A%bK.AP]Ȫ$A—7.A4{fą$A.}.AUƌ $AFh.A4]9$Aʮ$V/A>$AwH6 /Aʈ$AbȖ/A\$A F/AE$A/"/A 2$Ai^#/A)k2$AB!/A0j\$AŽŞ2/AwX$Asn|/A1M$A^ۇm[/A8^(l$Ah /A<`=;$AmQr; /A$A-/Ap$Aw2p/A\)Fh$A$sI/AUt1$A* /A,Ӓ$A !/Ax#P$Aj/AP/$Au/A$6$AO%/A6$A-,:)/AX $AΐW0/At-"$A]1 3/AzĘ$A*Ts4/A0v $A|?3/Aln`$P$Aʄ//Au $Aef*/Af$A#Z%/AH6q$AYr;#/AtZ$AC"L"/A#f$AWb/Ahq>v$AprY!/A $AX/AW,$AJ` /AT3jF$ABR:|/AT$AYV>/A.ٜ$A@W/A#$Aw*F/A`5$A~~"T /A{mF$AP÷ /A$Ai)g/Ad`Ν$A Qŝ.A"ꟻ$A[.A˼$AnZ.A@WD`$Aɒ/A|$Ay?/A]Be$AI/A}2~$A. Y /A.:$A˘]/As̽$AP`X/ADͩ$AM/A\e.$Aeg/At$Ag" k/A$Ah/AlG$A$J/A2±$A- /Apl$AB[r /A,cN+$A5/Aש(ζ$AC/Aې:$Ay]w /A j/p$A/+f8/Aph4$As7/A*˹$A5/ARn$A /AGM$A6,#/AR9$AeKR-'/A[?$A>#Q4./Av<$AӔ04/Af$AMH8/Ah}S$A4>/A1J>$AmC_8@/A(<$Aفw3A/AƋ$Aإ@/At -&0$ATf;/Al$A?N;/A$AS69/AwN$A*;6/A3*$Ay]1/A7h$A_(/Adl$AwkR%/A$Sj[$AH)/A($AZ/Aw"%$AZ /A#$A3/A|m$AG/Ax{$A;Vȑ/ASs$A/,wm/ALkit$A➦*/A`$A_c/A|f㳇$A //AL+kN$A9JL/A eCC$A76k/Auw$Am/AW&j$AEx/AV"$A (l1 /A|k$A%/ALT{k{$A"/AM($A_eL.AtKڏ$Ai<.A`$Ai{׭.AW$AX:͎.A\Y$A1k.A3B$AvA.A0x$A.AR2$A.A%(n$As&R.AHFH$A.A5my$Ag.A X$Asڻ.A'\$A:?Ҩ.AK$AF I.A{$Ān.A K!$A H.AM$A4fa.A>$A]3.Aш>$ANg.Ad{_$A.A4=J$AU.A?$AoU<-~.A4Z:5M$AkG.AwM$A [0.A]$Aïyj.AXV$A/Xg.AH$A~.AWJ$AEHa.A"o$A6.AE$Ao+2A.A Uw$A1f=.A $AI).Aߠټ$Ah?~.AвD<$Aw*5 .A[x$AC.A8Ĝ$Aby.A$A?.A$A9.A4$AeI.ADsk$AaQ.A”$A+!.AhM$A=[ .ALW$Ajg8.AP<{$Aq.Axi$AՄ.A8V$AH.A$T>"$Aw"D.Atr$A@O.A\v$Ah:[.AO^$AWEKz.A;$A ){.AH3OL$A.A;(2`$A -B.A>$A3.A`y$AgL.AKXo%A.?j/.A8y|@%A}#.A\ZP%Akĭ.A$>'%Aa.A8;j$AQ-.A $A=3e .A~$A1 .ADox$A{+Cg.Al}0@;$A<c.Ax/#$AF.A %Af:.A0|%A,3.A(sP%A.W.Aa">%Ae.A0}s%AC.A’}%AG`.AVAL%A(#N.A`K8e%Av.Aj6 %A!.A$ %AiT.A(> %A.A c %Aso.A" %AO.AlD/%AK.A|?%Aᛤ.APS%A7.A%A;S@.A@캎%Anz.Aks%A.A%AmS.A3F%A .A/%A-K.Ax`f%A߄)5.Ad9}%A/8.A %AD3.ApTh#%AЙ!.Ax$%A.A@90,%%AJ2.Ad #%AqϞ.AK#%AzT.A6y'%A .Aד=*%AQV(?i.A傩*%A<#8.AH|dQ*%AFIM.A r&%A l1 .A J&%ANˋ.Aro"%A"ԁ.AD' #%AhV.A\Ʒ%%A{i.A8 )%A T.A؎_+%A (Mz.Ajs.%AH .A)-%A$F.A(Q#/%A mO.AdT3%Ai1.Aɤ4%A5.At26%A38.AI):%Aq^w.A\ހ<%AґN.A`Bc?%A.AY@%A}.AxFC%A$1.An1B%Ad.A5B%A䰧.AzWC%A\`.AP@%Aa.APѬ=%A̜/.A!X;%A ^.Adt;%A%9>.Aț*hi:%AR|4.A9%A{-P.AH𥘣:%AL93.A`8%AaY3.Apë1%AP%Alm.A+@%As-q.A4f}@%A'.ա.AH#aA@%A$ݏ˅.A(??%A7aTr.A>%AH.As;%A A.A"8%Acy.A$Cs6%A7Tv.Alb62%AWr.A]wp1%Axm.APj-%A^հj.AuU,%AG\j.AЩ-%AM)Mn.A\2%ADZm.AT4S E4%A\wqk.Axy%3%AbTp%Xi.Aӓ1o1%A#Pb.Awp,%AЫv_.Aܘ_0%A}* \.A@xO2%A+1%A'RHM.A/{0%Av!vhJL.AlI-%AY5BN.Aؼ,r+%AɗM &M.A, )%ADK.A(%A__x&H.A(%AX@D.Awْ'%AfC.A;)2=(%AIC.A4z *%AװYG.A7.%A|F.AO)0%A8r}G.Ahڛ2%AjGL.A>:3%A`M.A0IF6%AKN.Auu8%AtnQ.At8%APR.A4*i:%AQ.A̘'L?%A{ǽiJO.AS+@%AB7P.AP^x>wC%A7S.AlZ=D%AA*]X.A͚VG%A(Z.A0oG%AyjkvZ.AxֻE%AhX.Ami(|C%A\O#W.A Z A%AW)reX.A\0Nì?%A].A!|C%AEґF^.A,DD%A &d.AԈK%AcHb.Ad5@M%AÖE^.Ad@.7zL%Am8֠&^.A+N%A )D`.AQ%A7f.AcU%A9m.A@ƴW%Az?o.A$+Y%As|Zo.ANB[%A,)Om.A yJ]%A]k.Aj]%Ahvj.Ac#a%AAhj.A *d%AGh.A$bf%ACnf.AZhf%A] _.Adj%A/Y.Aپi%A\dg+X.ADEk%AVRT.Ak%A֐Q.AJyj%AxL5I.A[m%AUo*H.A>k%A& L.Aęh%A4NL.A8f%AnwI.A:e%A{^D.A.A/t%Aڛ;.A Ffow%A]<.A@6|%A9.At8i~%A S;.A@.%A߬;.Av%A%fM8.Al>2%A,994.A!"ƃ%Ag34.AԮ1%AZ 7.AH~Ex%At 4.Amt%A4+D2.A0 ,"u%A+...Apuqt%ANq8+.Au%AKL9'.AVPv%Akt^%.ALps%AH*m&.AԤeq%A'Gj&.Ann%A<_R#.Aznfn%A"{ .Ax#lZdp%A}G=Ah .A-t%AdO5%.A;J{%A?@/@Z%.AG,%A+n #.ApC%A$.A$SaG*%A0#.AӪ;N%AMą .Aaȳ%AZ.AJ͆%A"%;.A([ܿ%A\W.AUܶM%As5.AL͇%AOcb.AR+C%AD.A.]%A.A=%AdX.A)?%A{! .AU7n%Aq2>.A]%Am-OP.Axx;%AM,A.A[%AUVI.Alb%Ax&-A8"d%Alԯ-ApQ%AJ,-Ap㽌%AK.Aþ%A݌R_.A|%A /f.A@$͍u%Af .AlATͩ%A\.At%A".AHO%Aϴ .A='&%ABv.AtA%AO.A@:%A,{.A6%AI7.A`ު%AP@.A@.%A.A<:lQ%A_.Ad%A]$/ .Am%Ag.A׫x%AvJ.As?L%A R.AD&)%Aˣk|-AX%Ae-Aԥ?%A*uX-Ai%Ae-A((%A-Adv%%ABr-AL]F%AOr-AqWf%A15.A%A .AjG%AO%.A螇VV%Aj7.AK=%AJj.A%An,.AP̞?%A\.AGB'%A\/y.A6%A&o-A~?U~%AdL-A|q$%AM8}-Av%AJ-AG%Aӻ-Apqr%AH|-Auiʯ%A=-A%Aڬ-A!%A0Ii1-Ag_%A4-Ao#%ÀӞ-A,é%AeE-A܄w2%Akr-A-%A܆ -APs%AO-Aī%A(4 d-A;J"Ҷ%A3^x-Ag%A]@H-A̝%A8-APi%Axc-ARq%Ayh-ASr~%Aː(P-Ap%AX1-ADr%AF.+-A~x%A:,-AT.Z~%A}a4-Ao¹%Aڒ-A)%A~ԳL-A,ah%A-Ak%A"E-AܰW%Aѡ-A\z%A;|-AE3P%A}8a+v-A\#+%At|-A%Afb6-A %AAs-A\'e%Ah-AF%Auc-AUr%Aa[.-Ac%A\;-A <%AHD-AR%AYTХ{-AdO%A)v-A^6gp%A$Z-A\9%Az;-A(%A0B-A%A-A%AaH-AT>%AӦ3H-A4<F%A_%-AL#%AQGP|-A f%AHRe-A bd%ApY-A0x_%A^N-Ad%AQ&{-AH%A:n`-AxA%A~%-A8D&AЙ -A,ɩ5&AwL-ApH&AA!+mI-A&AFV-A$%Ab -AL3l&AHo -Ar%A~-ADEK͜&AjDmM-A f&A3-A^N&ALR<-AVHa&A܁j-Ax 6&Ac]z-Apb &A"Z28-Ad &ApO2-A3&AP@-Az]&A7-A&Ao5-A.&A5Lp-AԤ/&A -A ao-A H&A]C-A~&A Qc-A֣|&AF\5-ACƃw&A`T:1 -ACUv&A#%}-A!r&AYK{-A q&AOy-Ar&AxGL}-ATxUu&Apb|-AXG[tv&Ahy-A.u&AVL3Yu-A5q&A3+oq-A eQr&AO6j-A tm&AQ :k-A`A\t&A(pm-A4w&Ai"l-AQВy&Awyvh-Ar"Kz&A/]H-AYx&A~!$D-A34`r&A4<-AܔEq&AIڡP:-A n&Afٔ :-Ak&Aq8-Aji&AN,6-AZ2j&Am6-Ax.H[o&Atwu4-ADjOp&A jx4-Ah,%s&A;n6-A&s&AE$ 9-A,'v&A$$p8-A4м}&Auhp:-A4r&A6<-A(},(&AKUA5<-A(|&AGF=-Aghz&AiYqAB-A5"Jx&A7 1D-ArԂHy&A@5SF-Atw{l~&A֡G-A;&Ajr8I-A,f݈&AԐ/N-AQ&AkƑr^Q-AՐ&AK,iU-AJ&AbX-A0{&A} Y-A  &A>\-A-ɠ&A i]-Aj&A(Ry_-Ax&AEb܄e-ANʄ&AWKj-A_<&A2Ek-A|k&Ap#{j-A(F&A@8΂l-AS&A? n-A߹&AkHlq-A&Aʪu-A|&(Up&A>w-A):&Aa|-A4*&A$}-A,k&AP-A44s&AV-Am<_&A4q-A&AaAY,-Aw&A-A$q&A-uLe-A_,&A3-A`*&A飪-A@fR&A #Z-Athf&A ~-Av=&A@Ϲ-Ad&APt-A\q&A-ATخ&Aگ-Af&A-A'AtH).AGB'AԎ7.A:CL'AxUB.A̮mS'A+I.AԞ['A ӴO.Ahi]'A_Y.APr`'A(e\.AtDfd'A(fib.A ,ef'AƏpXg.A4i6fRk'A^*l.A8$41n'Ag*p.A!*w'AW{As.A쀌 Ow'A{8w.AMFmt'A[w1c}.A\ɩs'A9~L.AP t'A~]ED.A̼}'A:5 X.Apr ˁ'Ao/,.Ax5V'ARs.A>'A:.A\$W*'Aޫ0.AN⸖'Aޑ.A<Φ'Abx-.AMbZ'AT.A6'Aڪx.AhS'A$,.Atʵ橢'A ϖ.A6'AyK.A(|BĪ'A7.AD'A.AFk'AV.A'o'AD Z.A4$}Y'A‹7.A,0p'AܚU.Ab'A{g.A(z''AM{3.AX>'A2{ĥ.A`Ʒ'AUUn.AҺ'A2=.A7ϻ'AC8.A0uO'A$W.A` 'A.A8c|'ALL.Aٞ'A׼.A]'A<= .Ax"8'A\.Ad*'A>=.A|$'At.Ap'AV'.AOo'A]TLv.AB'A_W1.AЀ'A^c~.A('Aڿ'.A#3'AB*'J.AT&'Af.AW'A^].AT]'AʯY}.Ax'Ax 3.A='A\yv.AX:io'A>D}.A<'A`u.AHu('A܂ˉK.At4^'Ax.A'Aҷ/A'A8A/AM'AT_/A4(Ag/Ah%(AoF/A0(L(A2/A? (Amd^/A$OW(A:1 /AlSh(AS?""/AP'(Ae $/AX:M(A9'/A(A$,/AH]j(AyIS+/AP +(AA*/AP + (ABPL+/AS$(A 6"1/A&M((Am0-/AD-(A~-/AŒ0(AeX0/Av0(Aeb1/Ad$+-(A&X:2/As0(AG 6/A,$,1(Aj:/A(PE5(A71i>/A %y:(AwMIA/A=(A⟳A/A]8>(A j/D/Aֱ@(ARG/A:?(A#*0H/A|%E?(A?aI/AE@(A˵K/ATtA(A?HjP/AB(AR/A G(A !T/A8J(A;zoY/At3>K(AYD'^/A(x1P(A}b/A02V(A$=f/A 0V(A l/A^'X(Ay=o/AiwZ(As/Al϶Q[(AĮ4u/AC_(AԮ&z/A@c(A}cJ`}/ALVg(AJ/Awpj(A,]φ/ATm(A9/Aeu(AW6/A1y(A~W|/A,0~(ACS/A4Z(A" Cÿ/AxB1(ATh/A\;E(A6/AHϢ(AD_/AG_(Ak./A(A["nW/AnK(A/A]](A{/A4,(AjX/A]Vs(ADc,/AQ6(AM$/AXO(ArD$/AP7(AŇO6E/Aʑ(Aَ}|/AhU(A*ň/A(A"Nw/A\I|(AT _n/AL-W(AYc/A/A|ۥ(Aڸ/A((A-/A|F4z2(A/A$=9j(AV4f/AXX(A6/A@]H(Aq@4>/AXZ(Ar/A!(AB/A (A]wG/A8l3(A~/A4(A;O/Al(AV/Azi(AJL/Alᯱ(AW /Ao s)A/oR/A@c )AȐ/A|6I)A%/A,G)Ar`D0A|7)ArK Ua0A,<)A+0A")At0AMK%)Apf0_ 0AN:1)A4і/ 0A fN2)Af 0A)4)AJu @{0AA9)A^|80Ab;)AT]߶0AxX7;)A`0AԳD)Aa0AD)A$^0A{G)AOI0A< $UJ)A·0AL\aN)A2~0AHd]P)Am,0Al+I/V)Awy0A`GW)A%k0A\/QX)AGlp0A"%\)A 0Adɣ\)AU0A\2b)A#GX0A@>ճg)Aٌ 0A&v9g)ANw!0A䖙ph)AdV܆"0Ami)A$8尗"0A)սk)A~E$0AChl)AA&0A嵾'k)A'0A 4k)Al=Z*0At'p)A:S.0AȺpt)AU/0A Nv)A /0A D })AjN,0Ajy)Al[+0AO)z)At+0A,s{)A{s-0AP1C)AnB-0A-)APg00A0)A踥V00A10A1\)Amv20A<3T)AXE40A|ܰ)Aj=760Aݎo9)Ag}80A,0))AZzX90Af)A~:0A8b)AFsp;0A,)AU1";0A>>Fb)Au[jY=0A@xT)A[G)>0A07Τ)A@V)G?0Aԉ6)A5%?0A`| )AAA?0A)AqIA0ADìS)AvB0Amdz)At^yC0Alo)Aa{:XD0A!!)AKD0A (@y)AƷB0A8Z)A]h|C0A|y)AR[.E0Aw[)AefG0AHA)AQ_G0A*)AOcz6J0A|>ډ)A@K0Ad<)Av>d\L0Aho)AFzBBM0A=0)AuGO0Aݫ)AJLQ0A䎧}))AX5bR0A P *A:U0Ae*A2PX0AE*Apr[0AX8)*Af:6\0A`p1*A%^0A=/5*A}e`0AGT<*Aʐ4a0A=*Afa0Ac4D*A0ie0A\!-VR*A{VHf0A?U*AKi/g0Aj7CY*A0_X g0AG\*AAg0A1G^*A]kNh0A,]*AO}3Bk0A0bc*A[Gk0AY(h*A%ݟl0ADe!j*Aeim0Ain*A|o0A܉,r*A0sq0ADy*A3s0AlaB|*A-Yt0Ai)*As u0A*A6>s0AZ~*AҕHr0AKh*Aou0A{n*Aʨp\w0A Q*A2t̥x0AxoYʑ*A_~Ix0An*A x0AE;*ALf/z0ABٜ*A'My0A-2ؠ*AcQz0Ago*AkTi|0An*A,P|ʁ0At!R*A =10Ah"7Hm*A0>|y0A@k*ASAE0Aޘ*Ae_0Ax*Ar0A`yGbS*ASŊ0A}Z*A=-ڋ0A\8*AMՋ0A(5*Ae0A5*AZ0Aj*Ay(SL0AdVP}4*Aͮ00A\,sy+AY0A1+X+AH0A ~+Avc0A|7+A2̈́0ALg&B+AYD)0A4 +A5 |0Ar +A-?0AFS+A.VOA0Ap"w +AB]C0A;N$+AݶNș0A q,+A7KC0A]@+A[^0ATD-wC+AGԚ0A@ C+ANJ㻦0Af>+A%+=$0A#*N@+ARp0A Ҙ?+Acr0At) <+A 6Ж0A@ԝp8+AN9\0AI7+A@0A\4+AɕE0A },+A*t0A%+A{lD0A(*K!+A0\p0A|?{G+AH0A/pp+AZ0A8b+AxS0A4[f+A#z0A +AH,0ACEJ3 +A{0ATir +AbA,0AGp+AxG0An,Aۜ:80A< ,AC.Eն0A`ӧ# ,A90Ax9} ,A?s0APs,A@R0Ae,AlYU0AUV|,Avx0ADQ݃%,Ahuk0Ah%$(,AX׽0AD +,A0Ax},,ASq0A.,A7:0A0\X6,Aʺ0A&.^v=,AL2g]0A(D+W?,A׻0A TZVjD,AQnAǺ0ASM,Aq0AHG&P,A&E50A0AiK)X,Avp`0AD)ujm0A f,A 0Apr,Aa7ӊ60A~,AqΒ0A8,A~н;0AtVW~,A0yR>0A{1.,A0A 2,Asr<40A Y,AQ{0AL`V,A0A$,A•M0A)Y,Af20Aa,A~{0AL|?,AtULi20AMs,AO0AhZi,Ab:kE0Aj~F,A#0A7=,A1}0f0AfSl1,A=Ψ0AѰ%,A9Eڗ0Ao<$,Ad=0At,A70AHtd,Ag0AN,Ay,*0A\G,A](m^0A-A=`b^C0A-AgS0A`e1-AOh0AD=/-At00A|]V-A,{0Ae -A,60Ap.-AN 0A$"I^-Azz0Ab*-A 70AtA,-A-9s0AF1-A勯0AxKD4-A)F0AT6-AJ@0AX,;-AB0AlK DI-A>}0AvjS-AX88j0ASl-AmW0A+u-APPz0AtH{-A'h0ADÃsH-Aޟ0AĠ {-Ao0A-Ad0A -Ao0A`-A&0ATe>-A8 C0AM L-A0A4A-ANjx0An-A gU0Ał2-AA0AEd-AO0AtT>-AcǑ0Aе-A۰s0AtB-Am#0AKL-APK0A,N-Ai*0A;>D-A5˲0A !-AC0A#-A>WA0A-A0A1r.-Aţ0AԆ-A+0A@tB-AO:移0AD|-AH 0A; .A {Ƶ0An.Aii&e0AШ.Aw>̲0A(_.A-i0A@5C%.Aց>0A(.A94W0A|=Eu.Ab.0A$.}.AH0AL.Af\ڤ0A|y.A$)d0AL.ASZ&20A̹d.AQ0A+5O.ADS۠0Ah.AsP10AS(.Ai!Ǜ0A9Cr.AO:œ0AJ).Ahl0ATM1.Aii0AL?u.AW0Apӊ.AVf0AA.Aʗ0A b.Ak40A{|.Aw00ADm/Ay0A0Q/A7 0AH$/A b0A\x,/A`܊0A/H7/AV0AۮbN/Aky&B0A$jU/AA?@0Ahh|HY/A8n_|0AKT]/A9H0Az[/A%0A o`/AnB}0A(e/A֕~0A||Ej/AU&3y0A#/AOEx0A,҇'/A5FLx0Aё/Av0A|p/A_Ou0AX>^/AiRs0A/AxE9r0A,p/AfZs0Ap8h/A-,q0A ";/Alp0A0p/A( p0A\/An0ABx/A%@Ql0A8`m/Asm0A]L/A/Kn0AD*/A8S.o0AP`/A n0Ae0A"lGN0A\4:v90A:vQ0A!2:0ABmS0AQR90A%Q8T0Ax 70AjeS0A950ATo"OT0Ahj150A4@U0A& HO70AHU0A70A2V0Aٌ*b40A_Z0A^?40A]^0Aqȸ10Ana0AH#_n.0A|e0AH+0A8Mf0AȚ_+0AЙwg0Anŏ"e,0Aվqi0AjɜW+0A6B&n0Ao(*0A`an0A(0AD9n0A,a&0A^:7km0Ayi%0A(%n0AwѐN!0A4^z0AS0Af{0A'50A@[}0As0AXI}0Aԃ0A")u|0Aʒ0AF>뼠}0Ap0AX0AQ50Aђ0ApL0A\(؄0AbN0Ac0AJg0A0H~0A4'0ApՄu0AO;0A"} 0AQ0ADƃ0A#ND0APzɜ0A =(0Arpv0A"'0A,7$A0AN! 0ArO$0A; 0ALAC0Ai& 0AV-gQ0AMe 0A(50AP# 0A ;͌0A 0Ags0AJ] 0A|/0ANHWsF 0AЭ+ 0A>t)0A0A,n0AhŃ0AM(s0A0A/Aw؅0A1NS/Al]a0AJ7/A>x0A7 /AN0AFGb/A50A^!/A'o0A[/AS0A/A@nζ1A4[=/A1A"=q|J81ADZi.A#:1A#p_4.Ad:1A!=Hx.A;1A+'.A6R:1Aϥa.At7uS;1A p.Ah)<1AE<[\.A(Ĭ?1AA0.AI@1AJʄ.A ^B1A7.AhC1AvN3.AğβB1AK.AD1A9Ui.AsJD1Al1D.Adce;D1A=/A|DfD1Al6!/AYeG1Aﱢ-/A@CH1As?s(./ATP쒝K1AGSx3.AzH1A!.ArH1A`nX.AJ1A)f݆.AȶI1ADuG.A QM1Az.A@d_ M1Au.A.,L1A'.A,N1AAXsɽ.Ad\қP1Al.AHCP1A^'Bd.Av8P1A,JR.AT{Q1Aƪ.AC6nP1A3.A%/P1A"܁.AAQ1A5.ATae,yS1Aކ5.A0p U1AM۫.A|XH-V1AG.Ap03CV1Aw.AxAzXX1AT.AJL&Z1AP.AtC|BZ1A.ADZn[1A# .A(aUZ1A[.AV2}[1A`cF.A4Y1A[ٍ.AO1Z1A9.AB\1A3">.AHtF\1A%L~.A.]1Asa=|.A Qf`]1AT$y.A ,N[1A]2v.A&K\1A>v.Aʜ]1ATEw.Ai_1Aqv.A1-`1A@حr.ARa1AWRko.AfXHqd1Ah' i.A^_g1A[NXb.AN?f1Aca.A~ f1Aшa.Ag1Alg;[.AMi1A5YX.An\Th1AʛV.Aj h1AIQ.AHXi1AY}M.Ar h1AO:.A7Ol1Av;1.A>rl1A8h0.Aʝl1AQ(I3.AHm1A;>.A*t4o1AOqC.Aq4fo1A7;_F.A"#o1A䇙I.A~#o1AkJ.A[q1A|~O.AFq1Ag?:P.Av1A'Ķ6.AB,z1AMN)3.Ax[z1A+}1.AVD7{1Ag{d-.A5{1A..A#.A2X0 1A`,)$.A ^1AmM'.A6G1AF31_).AH)1ASWs*I).Ar1A;l;'.AP1Ax=M!.Abf31A>.AHxz1Aa!.Ab V1A~#.AO81A9-).A711A>)͟!3.A:Ҧ1A/6.Ab^1A04:4.Ac1A_k[\2.Ane׭1A@Bt/.A%]1Alb-Au1A<`Ca-ASџ<1AGlQ-A.{}1AJ-ATBm1A칠(F-A`o21Awi™@-AtbU1Azĭ--A}~1Ap*-A21AE(-A 1Av%-A`~1Ag{#-A xХ1A5-AJs1A`-A{1AP.-A:p1A?t -A Ic1A$>-A̎1AUq.-A^`1Ao-Ad:aM1A&xsZ-A5I41AFۊ-Ag1ATƦ-Abܬ1Ai7'-Aޡ@1A'-AbX1A9ӉI-AZX41An-A1A-AL 1A^9-Aډ!M1A+-AGwk`1A9Џ -As81Am˫-ALk ;1A -A31A+C,A>41A01A,ArP1Aky,AX1A9j܀,ABJ0F1A_,Ap+V1AL ,Ah6 1Ag,Af̣51A/,ALA-I1Ar,A u1AQΒ,AU1AYt,A 1Ac*`*,A\N1AfDg,A51AR,A2W1ATA,A K1A-Y}R,AF71AX,A|C1A/%b,Ag1Aa,A=M1AF,,A7,A\1AE?,A~T@Y1A ɂ,AT1AA-,AW C1Ay{|,A**.1AY{,AV1AԤ|,Aʣ1A2|,Ak'1AMay,AzMi"v1A =p,A(ֳ+1A)3\o,A@61A#'hq,A:1AU3n,A\1A8i,A 1A"Bg,A,c1A#h,ADT1AtAd,AW_1Abl`,Av1A-r+G`,ARe1AYc,AY1AWb,AnMCm1AuH~`,A1A`D'\,A 1A[GZ,A9>j1A\a,AKym1AK]'\c,AX1Aw-[f,AV=1A`Lj,AԹW1Aۤ9o,Ad1Ac9p,Aα1Ap,A|1A s,ABr1A$p,A& _1A'l,AdZ1Anj,AoA1Aw>i,A$1ATм`,AN`1A:`=_,A"ۚ-1A:6^,AhEδ1AS^\,A1A>Wċ[,A1AFCuZ,A˴1ARnT,AL;W1AsT,AZ *1AHNT,A-1AczO,ARO1A$L,AHҀ1A0I,AL"1ApAN#XF,A5*1AxJ,Atq/1A}J .J,A{ԩ1AGAC,Aʐt1AD9,A$/~1Agl0,AŬ1A(.,AчZ 1A|D4,A1Anq*:,ANB1AqR5<,A]ɳ1Ap=,A(Sá1Aw=`C,A2j1A>cXI,A\61AYj@:H,Aima 1A7TD,A]T1A|V6D,A- w1A~ 2D,AB1Al'D,A4;~_11A+?F,AZ~Bf1A vK,A?m1AP.ٞJ,AT=l1AG,As 1A#A"G,AH1AKS,Ax1AL`W,A6Yeu1A̙Y,AT1AJ [,AD1A'h^,A%1Azj,Ap"Ro1Ay@m,Aк 1A4Wx,AN1Aoy,A1AXm7l,A51AZ2l,A|+.1A?i k,Aj1A=:sf,AT`1AzZ{ya,A' 1A>>[,A+1Aq^tdY,AdG}1A; QeW,A>( 1AV,Aﲳ1A_@R,A<'1AM@,Arq1AY6 :=,A\ʥ1A :,A<1A3:,AǢ1Ak51T>,A?G1A۷ so>,A1AylM 8,A2-1AW2R6,A#1AE<4,Ag1Aʎ r5,A¼1Asf0,Ar7^1A[%,Ajnt ,Ai'2Anq ,A@:3k)2A2j, ,A>D*L(2A7,A"x'2A#,Az*#2A$y,A#2At>,A6ڡ 0%2A i3!,A %2Aj9E%,Am$2A|2A'bH>,Aªm72A=YUq@,Az(2A/gC,AxQG5R2Ah"'C,Am`KQ2Ar?,AZn32A2c<,Aq2Aj; j;,AUG62Ac*T;,A6]G2Aq!?,AN$2A3@,AŨK2AaB7A,AuI2AW[F,A,2AFsH,A82A2&L,ApQ2AHU,A'[2A9V,A˫2AVT,A^A2A +O,A@W2A##w]K,A/,P2A|7NG,A82S2A SsbF,A?2AFH,AQ& 2AosE,A6҈!2AJs=E,A"2A 5C,A2Ϝa$2AAwC,A]2Ak`C4>,ADt1 !2A9,A>n!2AT:,Aa #2AT7,AC0$2A}yb9,AZcP&2AwDZ6,A,'2ARL25,AR>$2AuM0,Av3#2Ab@2,A•X+2A\\z ,AΨ,2A-ʡn ,A -2A6n,Ak*2A6>6+Aj5<*.2A3V9+AjI.2AKA/,ArSJ-2At,A^hK/2A{&+AyO02AVO+A 02Aʓ+AVl12A.++Ak42A"6+A52A{_+A-[/62AS+AZ<"72AF+Aq72A%L+AZ72A^S+AA%L82A9+AOv192A}_+AF<P92A"o+A ɬ:2AAP,+AΥy;2A +A7G=2A~]+Ao ?2ACO+AT==2A/6(p+Aj ?2A]FX+A@2A4f+At+@2AЏc4+Ar6({A2AQ+A\0jB2A/,+ADDoC2A+ATFfE2A$R+Ac^G2A ƀ+A8G2A<:a+A `D2AsN[+A2loC2AeTU+AP\qD2AUT+A^^G2AqV'+A4d}G2A*0/+AjymG2Alj+AH2A)+AxdJ2A *+AJ#}N2A +A[lc!P2Awl+A!hQ2AW%+AB⸵Q2AA+A{R2Ah2+Aq]#W2Alڱ+An>X2AV +A5Z2AU@+AV\2Aʙ+A@2 ^2A4e9(+A^c{,^2A /+Ad\2A b+Alz^2A8+A,DWa2AS_+An6Xe2A'+AN g2A\c+A|e2A(a+A<e2A~+A:{f2A+Afbg2AF~_+A.l2AǛs+A o2Au+And$So2AČdP+A9r2A]X^2+AHr2Aph+A:Np2Aq"cc+A&dip2Ar+A o2ADL+A2#l2A +A5ai2A1 +AGcOg2Aň +A֛nc2ADE+A җM_2A-+A [2AJ)V+AY2AwJ+AQ2A+A=O2AKã+AvQ2A Y5+A[4KS2Ar ,+A8` S2AJŽ+AWS2A+A&9cS2Ayf +Ar5NS2A*q+AYrT2A%+AeBV2A3+A` b}[2A\+A|^2A2L+AJ@a2AIb+A2(Jxa2A9R^Q+A#%`2ACr+A^2Av+ALOT2A}$h+AYQ2AUr4Q+A:!O2A+-+AtAVL2Aj2Ajm ,A*P9'l2AHs,A0yek2APR,Ati2At%",AVQh2A %W,A׹@h2A%&,Afg-2k2A ,A(Ipk2A !,A+h2AL#,Ag߽h2A^',AH'tj2A5),A> gi2A#@n*,A&ok2Ag`{(,A>qm2Aݓ%,Azm2A*#,A;`l2AƠ!,Al2ASH~ ,Aho2A*",ADr2A9ʈ',A",0v2A ,,ADw2A==Y',A&`x2A8[׵p(,Ab4{2A:',AD8}2A2%,AZe}2AS",A*75|2AhPx ,Am|2ALSK,A].}2A@i",A332Aw&,A֭謇2Aj c',A13=A2A8*,A?ON2A33,A 2A4,A 2A?3,Aނ772AS1,AS2Aˢ.,AT)͓2AI_ c.,A=ޕ2AO.,APf2Ad!L#,Ap2Aj,A*[2AmS,AhKS\e2A֢,A:-xlg2Ap*9,Aܮ2Aq,A詡2A$ ,AnV*2A]!,AM2ABt#,A0=2A(,Ac Q2A?*,A)'2A [U-,A0f2Axq1,AJwY2Ay5,Ar2A 7,AtAԉ,2AB<<,A|}Z2AU>,Aav2A):,A~2AU}7,A8e2A.ZM4,A,2A6:lE4,AE"2Aڀ 0,A.A2A#-,Aة2ACJ,,AQi2AqA&,Aq-#2A,AJ }H2Ahu0G,A,Ъ2AxGQL,A22A"[XOP,A@ @+2AwF^hT,A|k2A$7'7V,A 8>2AHP,AҒc2Ap".R,AP;2A$ZE],AJ%2A[\,A8b2A1!L_,Aŕ 2Az"`,Amw2Astx^,A`EU2A#CZja,ABe2A֓:`,A"H92AKW,AZg'ڗ2AԪ{Z,AV-k2Ac˾Z,A&12Av1Y,AI72ArGS,APv2Abt{Q,AncD2A\?=4R,Aa2AW N,AAF2AYCH,AKP2AiCF,AVO2AX@7E,A);P2Ar4E,A2#2Ah'XD,ABEJZ2AAJrbA,A:2AJK:,ARE2A8,A[Q2A̘-9,Am42A;i6,AJh2Ae +7,A“c2A -=,AੳR2A^sB,Axm2A_&D,AІm2AZ,J,Ab*=2AcbyL,A4\?2A_/ެN,AڈQ2AwiP,A\2AQ,A&2A S+P,AO@~2AL,A`"D2ACHPGL,A`IW2AwJ,A@~_2A7=rH,Av2A3eF,A(oT 2AG,ADڷ2AB,A@2AC,Ap# g2A{I=H,AU2A_I,Aú$2A?I,AO2AW.G,A)/2A8hjE2AZHk,Aj2A\b,A:N3Ahں_,AN3ALa,AIȷ3AKˆi,A^)3A"}r,AM3ABdLs,An2A9u,Adī2A܀,A@2AcW;,A Ǵ2A/ZWw,AOG2A!'ׯ,A.6A2AJC,A4Gb{2A?,A~3A0SZ,AP?23AU1ɇ,AJ*H3A>.,Aޡ3A 2C܎,A6~3AMА,AFվ3A/ɒ,A8B$3Ar7,A0"e3A_B,AN}3A˒T,AX4 3AbS,AG 3A:T,Algm 3AyU,A 3A]U3,A&` 3A9,A`b3Aw,At-@3A%\q{,A D3A$@4;s,AO3Aƻr,A3A\Lv,A^3A#8q,AZ 3A +Fr,Aت{j 3Azp,A 3Aif,AJZ+K 3A"e,AlFZ 3Ae,AVO 3A ݄h,AXu:$ 3Ah,AP PJ3AlrNMp,As3A%q,ADU13A p,A]ZU3AY ")p,AE_3ATt,A3Aမv,A4>.3Az,A~{o3AU,,A~ԓЪ3A24,AN:3AIg,A3AԒ,Ao3A]Ď,AZ3A=û6,A*7.. 3A ,A6@ 3AzQ֣,A" 3A(ʀ,Al 3AL),AI93Ai[J,Am3AZdɍ,A 83Ak9,AH#13AB,ANR!3AӶ_ݎ,Ak3Ay&,A\c9K3Am,A&)3Af,Afsv3AޔM,Aص33A>},A"KY3A>V,A$[3A0,A0] zt3AI,AEQ3AkSFp,APk+XA3AAO,A@X3AG-ާ,Am3AGI2,An%3AH𱉇,Ab&3A3A_*,A3?3AF,A_ >3A(Y,A3DA3A+Z,A}@3AY2,ArH@3AT w,AVx?@3Ace4,AҙjC3A#5e,AZ(C3A\9s<,A /vHC3Aq<,AXWbD3A_ i,A+*D3A#},A*?3-E3Aul쒖,ADE3Aj,A>ϪF3A׽M,A|JU3AXr,AZtiV3AxI*,AnS3AcD=,A(q7T3A,AD#U3AP,A<`U3A4,A^(P@T3A,AU/1S3As0,AK(dR3A$[`^,AS3A㏷,ACtX3A:ʶ~,Abx|W3A@K,AfX3AB,A{ [3A\,Ax[3Am ,A9Y3A ,AvwBY3A!S,ABq[3Ag]j,ADL[3A6/D't,A8GY3A]/TK,Ah0X=Y3A^',AJ\3A!E,A[3A/ ,A|X3A[ ,Av X3A6{,AOGX3A\K ,A(]TZ3A<=\,AK]3A,A`3Au,AR a3A,U,A`3ANB",AR$ b3AKiد,A6Vb3AŇ,A^b3AlaI,A `3A4P,Agl^3Aqs sH,A( ;^3A,,A]3AmB,A\3Arb,AB4Z3AC,ApoZ3Aˋ5},AF[tغX3Aqw~,AL+6W3Al|,A^ [V3A+;:},AQlS3A S3Alt,A[ R3AMu,A^JDLiQ3AuCEt,AP3Ak,o,AT92P3AUVNNm,ALP'sP3Apwk,AP3A#'i,AUO3A*Gl,A'\~N3A`f۴p,AFN3Ab/n,A8wK3A5o,A|!J3AKHn,AD}I3A^,Ak%Q3AR(.`,AT/R3Aڔd,Apyh%R3A`wpe,AېR3A[2d,Aث T3Arh,A҂ޫT3AST4i,AhֳU3Af,AwW3Aىh,A^{X3A _,ATa& ]3AZBj^,AL^3At`,A{u^3A Ce,AK\3AyZh,Ab9]3A;i,Ak^3A6l,AYa^3A\$?q,A\3A4q,AJq\3Ag[},A \3ABz,AZ]3AA,A ͓a3A:GX(],Alb3AGN,ApUXd3AO_,A+lg3Aۜ~,A2g3AN|,Aa&te3AgCy,Avt e3AQqu,A/dg3A~ik.o,A^2g3A+j,A`i3A.$l,A#]j3A?o,Aj3AOlo,Aғ=k3Afk,A)k3A E1e,AZsUk3A338?d,Aˆ0l3A(e,A*Zm3A, rh,ARn3AIhi,Ak9o3Aל&h,AzIr3Aơe,A.t3ACOa,A?ys3AE_s^,A᲋t3Ao;_,Atut3ABf,A.dTvbv3A. h,AF"\w3A Sg,Ab/x3A¬[b,A*j<w3Aq`,A`{jx3A! a,A`l|3AAb,AԐx}3Ai,Ac}3A.mm,Aˆh"~3A n,A,w3Asq,A|ٞv3A7fJq,Aٳ}3A01^n,ADH3ARo,Asi3A5XD`p,A҈3A]+r,A^j3Au,A 3A@w,A1S 3A{dy,A#A3An{,ANK3AN|,AL򔓉3A"Aq~,A|3Ad0R,A‡3AhA,A23A7,A֋3A),ARN3Aң,A*Y3A# ,A Lt3A^6Ax,,AQ3AE,C ,A`J3AlniQ,A?I3Aä,AD3AP3,A ,63A7,AX3A8ɤ>,Aֿ3AQ,A[֖3A|D,Ap 铕3Ap`f ,AvoR 3Av,A3AΥ,AFB[3Aߞ ,AHa3A{kGϔ,A/6d3Aerr,Ab`3A$,Ajn73A ,A03A?,Apg3Aj,,Ad*] 3AݠO,A6aȕ03A;7,AL<>&3A,p,A|/6j3A ,AƎYj3A~d!r,A'.3AE,A083A,,AZg3A ٩,Ak3A)!,A\x3Al b,Ac3AN㍇,APξ3A-\m,A3Ad,}r,A0^3AO4C,AoY3A,A G53Ah43~,A@T3A9Z},A j󞪲3Ak {,A,(ұ3A3`x,AO3A .Br,A@yζ3A_3uɹo,A3Am(ʨn,A<513ABp,A·eظ3A5$n,APnx3Aqm,AL3A%j,AtǺ3A⊶@>h,Aóq`3AȮng,A13A )W b,A@3A&b,A o3A 'a,Aix3Aߠ4Z,AYk33A}!YW,A|(3A W,A$3AS^Z,A T3AHVU`,AJ샂3Avf,A0H3Ah@Og,A3ATk,Aʽ)3A\1j,AvYK3A$>e,AަT3Az %a,AF.x3A}[,ARk(3A.2.W,AX03A[8W,A r3A a~Z,Ad3AFCqž^,AO+3AUbkCa,A~ւK3A3XP}d,A<3A Al,AxG3AT k,A :>3AѮ8m,A293A&.Zvq,AC,3A{ľ;r,Aq3Ag p,AO+3A^%K[r,AZ-O3AƦ.u,AN3A/?x,A&{m3A@9'!z,AuC3AW,AΈ/3A4?]e,A&jZ3AO!,A,)3A'笐,A>'3A~#,Aͱ3A,A]3A,A* V*3A@,A*R&3A)Y6,Al3AvʢQ,AP3APg,AЫ3A7YI,Ac3A9d,At33AG,AA3Aۅ+",APS<3A¢,Aޮ1?3A7,Aex]$3Af_ce,Ag3A7h.,A3AR).Y,AҤ|PB3A6M,AT1r3A/Xۤ,A7 (3A-ҍ,A%3AJ [,A^3A2;?Q,A*{T3A2Vto,A.2L3A@,A&:j~3AP<&1,AĬ13A8`\4,A;-3AwX,A*:3AU7,A,w3A&&x,A>h3ASϭ,A< 3AŽ,ARȂ43AR}s0,Aƽk3Ac,An/:3A '",Aޯ3AY:6,A&qT3AvɎ,Ah(3AA4R8,AUL3A Mü,A aG3AmȺ,A\wf3Aj,v,A1>3A(,A&23A:D,ATNܵ3Ak,A])3AzXA,A>3A!sP,An3Aҥ(,A3A~i!,A3A6oZ,Ae3Aflj,A3An+i,A%93AʧP,AZP3Aq&N$,A]O 3A[w,A.s3AG=,Aߘx3Aq1,AH(3A4+,AfP3A=,Ab3B3AyhT,Ax23A,A!3Aё,Aؘ3A*",A(\3A,ex,AvX͝3Aw,A w3AH?ְ,Aą~3A xݬ,AXD3A,A¿ 3Ac.,A`\3A`\W,A$uX3A“s,A2`3A$0,A<豈3A s,AwB3A?,A"O~$3Au{c;t,A%k3A|,A}`3A-Le,A>on3A $,A[ 3A ng,A~33Am^O,ABnt3AJ4F,Az>3A ђ(,AFM3Ag=,A~r 3A{3\,A3A',ADԆ4Aⵡ,AL~4AkƋQ,A͹3AW3d,A F4Au7,Agm4Aӷg,A$4A%k,A:4AR,A4A7N,AB+d4A9t,A<}4AOL),ABu4A#}=,Ag!4A9,At/4A,Aonp4A˥,AҗGG 4A,,Af] 4A=,AvӵQ> 4AA#CF,Ar5k| 4A1b~T,AnΛx 4A^|,A| 4ASi,Adߗb4At9N7,A&UX4A}.,Aꪦ4A)Opj,AKn 4Ai,A44AŤi-A UI4A"P-AP4A -A.Y54At T-ApaJ4A!Z-A|/#4AQ6y-A4Aɼr-A@j 4Ae0& -A%e4Agm-A /4Aן]-A;4Aj,Ap:4A+,Ax}4AW ,A|{.4A h,Ab/S4A5c-A M2X4AA0w-A‰N4AF[xX -AG/4A0 -Aˊ!4Ag4~ -A~s@#4A^%-A%4A[-Ag&4AJJ-AJ^T$4A'na-AhBg#4Av-A!4A0--A^ަ 4A$,Ar;KQ 4A l,AZ"!4A_S,A$!4A 6cQ,A05!4ASm,A2"4A?,A\I"4ATb,A<9#4Au,A.$4A|Դ,A$G%4Ac,A,(o8'4AQ,Aˡ['4AЩ,AZ'4AC),ABQ&4A/,Ar&4A4b8,AƓ+4A#U,Aǿa,4A;,A\5--4Adؘ,A834A8$G,A9984A=,AX]ʮ;4A)),A:4AVæ,A!594A=G#Go,A+;4A]Pkݐ,A~2294Aۖ9,Ai94Aw| ,AO{:4A.ᣁ,A>M+'94A1,A{h;4AM6,Ar94An,A=D94A91,A'ھ:4ASx,A!y<4A˜Y8,A<4AY/(,A%>;4A,A z<4AWD,A&ƕR>4A,Aן>4A1,AIg=4A)<&q,A*,G?4AQ,AزF=4AJ,AB<6M=4AY#,Ae_=;?4A?n|b,A`n>4A4ZU,AlQ=^A4A,A'A4AU'@Ch4AV}O,Ah4Apm ,A:i4ALT[,A -i4AFSf,AJL*h4AZ6f,AJ~h4A,AȞ^Wg4A$'#,A>f4A)q',ATf4ACX$,AVZg4A4g,A^!e4A'ɠs,Aqٗe4AM],Aԛe4Ary$,A&ذe4AM5h?,A4f4AXhID,AlXh4A6 %n,A Tqdi4A5,A:u'k4Agr`,Aj4Ax.,Aek4Av,Alj4A],Abl4Ae,Aމn4Avk,Ax?jlq4Ats,A )1q4Aufڳ,AZF6r4A`\W3,As4A,Ap t4AK<,Aku4Al6> ,AGu4AR ۶,AmHw4ASӔ,AB'v4Ahî,A"n2w4A@g,A@nٲu4AA8T!,A㡴=u4A_aɭ,AX;pt4A,AWbs4A㬷?S,Ak'q4A:r3,A@_aq4AR,A\Yr4AAd,A2HCr4Aե8,AJ#)p4A;8(,A# Uo4Aye,A,2'n4AKl,AfEn4AhΜ,ABScbi4A2t,Ahi4A=l,A _Ki4A,Ash4A̋e,AfuHm4Aೋ,AOl4AI,Ala5m4AM>T,A댿ll4Aq\,AoNj4A+1u,Alyg4AwJ,AzImbf4A#ʰ,Aθ-i4Aߞ{,A0}Rj4ACy,Aci4A$aw,AMi4AMX)v,Api4AZ3Or,A 3-g4Apo,AhϠg4A,`,AUni4AV D_,ASaDk4Aۨ\LV,A1Vel4AfS,Ai4AvhL,Al4AXnVwL,Ae m4AriP,Ar\}m4A19mQ,A&n4Aih^,A/HQo4AxVl^,A^p4ADY,A 3Aq4A7o[,ABeur4A0sW,A`-t4A)q4Asy,Aꨰ‹4A&v,A֌ 4AFo?{v,AR﵎4AϧR*|,A4AXL,A&4AMv,A.4A.6,A2|I4A)Rt],Avэ4Aі{,A.yӍ4A8,Ao4Ae,A$ _9%4ASt~,A0|Jm4A?ll{,AJ%W'4AP+Zt,Ah*C4A;s,AEk44AMIv,ASAܓ4A͇cu,A-N4AdW@Gt,ADWz!4Ai,AA4A/4AD*\,A&GԨ4A ^,ALNK4Axxn`,A4A4,\&2d,Ae4AXxk,AK4AD'΢g,A跛=4A}DRf,AA4A0Ιe,A"_Z4A*qc,As֓4A,],A(<ǜ˱4AglvU,A k4A!k:X,AB~P$4A *T,A|44Av T,A ]4AZ,Aap4Ad^\,ALJhո4AB rX,A'mպ4A(X,A3 4A9q#U,AbJHɨ4AҔrQ,A4AZ ƷJ,A4A7SH,A,A4AW6>,AQ4AbB,A>҇ꣾ4A$oD,A/BE4A?F,AD\14A͉D,A$S4AM؈!?,A̵ 4A;,Adٻ4A/G9,AJJ( 4A:,A__4A7,A-4AZ s|S6,Ak4A*ם7,A<4Az9,A^ 4A{@:,Ah+4AMq;,An:4A4R?,Anѱ54Ae&`/F,A4E4A;ҴG,AԆT4A%N,AlS4AJ,Ausy4AB_A,AJm4A;?,A 2ME4ATx;>,AŮ-4A=A,Ae4Ad;|D,AP)}4A&D,A' 4A^C,Az\4AOZ9,Al4AŤ=)8,A@"4AE!4,Aַh4A 2,AH+ 4A+}H3,A"4A#l0,A4A.,A\m4A*(,A6D|4AzE|$,A_r4Aq. $,Ah4AaO*,A i4A@7(,AԣGr4AK),AQ |w4AC?L+,Ah=4Aϔ7+,AV 4A@),A"Ȃq4AĀ(,Ap4AA}{$&,A _4AXwXH#,A.4AӤo",A"* 4Ac#,Awº4A,+,A֢>]4A1䌅,AZo/4ANG,AVt4AZIs,AZ4A3Ї!,Ap4AA],A֣[@4AP ,Ai4Aa ,AX7m4A# ,A`%^4AJ[6 ,A4AZWiv ,A<4AF,A~g4Aa9",A[ 74A`Mh+AR=c4Ag^u+Axy{!4AO=+Aƻa{4AHu+A4Ah+A<4AdM+A4A9[+AJZh4Af+AnX44A=T+AmW4A+>+AR9Rb4Ai +A洂4ANz+AvP|44A.w+AR!B^4Aۈ+A,4A:+AXl24A+AxA4A9B+Ajɴ[4Ar+AXZ4AWa[M+A84AKބv+A~Hhx4A)lXs+Am&4A9t'+A4AKXfr+AV_4AXw+A?4Aa+AJ#4AO0z+A1K4AMl)+ATj5Ag:o+AJv5A@֌I+A*5Ao+A|"!5AsE0B+Al25A*+A lfl5A+AK,5AJmx+A05A++Ah5 5Aul$+Az 5A/ O+Ac¨ 5Ad+AQ}5A۝y+AO135A+AuP5ADF+ApX(5AC+A_5Adĕ+A5AgE+A95AXzY +A5Avyv)+ANQ75AS y+AN,5AtFY+An\5AU+AuA&5AG+AdY5AJY+AX5A߲+A "5Ab*8+Al^[5A7!+A(C:c5A$_f+A5AeR,A3ƣ 5A/m+AHA%5A]+Au>J'5A=';,A1)5Ae+A,*O,5Ac$+Ap-p,5A9 +A.\H.5AS+AR15AsdB,AVl35A=o_ ,A"055ACH`k,AΙ85Airuc ,Af<($75A,4tw&,At |U75Af,1,AE v:5A6ݲ8,AΖ1Q:5Ak*.{B,A0e75Ak,/I,A<t55APvT,A>!35AY5Z,A|g35Am\,A~O45A`X,A` "55A L! R,Av555Ac\cL,AL R 75A)VE,A95A}=@,ARE:5ASw6,Al"!<5AHOF0,A<5A28 ,Aض8<5A8/g8,A ;5Aw,AY~=5A\/,AJl=5A(T; ,A,=5AF,Akb;5AH+A;5A%-(6+AX:5An&QI+Ap;`:5AQg5(+A<}65Ar+A" 655AMZM+Alfh45A@o+A25A>T+AN?915A؅~+A$05Af+Ab9 05A J0R+A 6|05AA+ABkDA/5Ad+Ad"K.5ASD+AbSWu-5Af]r+A4$.5Al8ٽ)+AX Υe05A|٣+AXp05A; j+ADi25Aj!a+A'45A,4+A.45Aʶ[+A4X95AJa+A`/y:5A ?o+Ai95Aq [+A%H';5A_=͚+A޸[:5A^ը+A֛ ;5Aœ+Ahu<5Aw&L+A4'>5A!:o+A_R?5A5z!+AT0B5AS+AB5AotF+A:Ɔ#C5A .+AD5A)H4+A#="C5A6<+A X3C5AqȌ+AD5AK?Y+A61E5AS9JL+A([E5ABOA+A' ]G5Az +Aї'I5Al=b+A(fJ5A?a+A|I5Az+Ar~N5Ai{+AP5ApWy+A9R8S5A ~+AbV5AznD΃+ASoW5A>T+Az8\5AϏ+AAGCH`5Aτ{+A"$nL`5Aw+A~c5A=ۢ+AT!Ri5Aѯ+A0h`sl5AK+A&TEn5Arg+Afo5Aȡ S+A;Ro5A*c+A\pp5A*2A+APVq5AϬ+AZM1u5A n+A²u5A ^q+Au w5A3+ATSw5AW22+ACx5A{mL+AhFeD{5A@ +AHAu}5AΒ+A71~5A_+A$o)n5AKg+A>J}5A3+A?75AhM,+A"˼5A?+A^n5A3Nm+A5A`p+A#rÇ5Al+A^5Arf`9+AƋ5A繽+AL Πc5Aw+A*|k:ن5A>+AІ5A[.+Ap:cy5A+A~I95A"+A ۧ5A+A5> 5AyC+Aόg5A( %+AE嵎5A6+AaV5At\#v+AK 5A/ƻG+AxE5A S+A+^5AKB99+A7m5AUk+A}mb+5A<NW+A@C[#̉5A&+Aiv?5A7+An(5Ao}+AgoΓy5AK Yz+AxPtry5AH+A~j65AF{+ABv5A+5h+A5A:$+AS#5A;+A"oY5A:Qk+A 5Aղ<+Ag*5A[Ɍ+A MR{5AE_+Aȶ5A tU+A]fR5AOr5+A(Yހ5AKv'|+A`̀5AF.}+A35AH\+A8Y5An+A^5A4^pc+AD+C5AS2+A x5Axo +A> 5Aft+A5AD +Aܒ5Aw+A/!5A%h +APѿ5AL+A̓Jt=5A`,+A25Ap(δ+AU[W5A0+AV}5AF[+Ai5AW=c+Avd$5A]&џ+Aq5Ar +AV/5A +A V5Aӌ+A gb5A3W{+AVڤ5Aټv+A+A5A7+Ax.5A +AZ~}5A. +AR+d'6~5AE^h +A胾5AۂWh +A xX5AKۚt+Ax%i05A"Ԕ*A'/\~5AaJ*AV|5A*ADvP}5AR*An@5A8Cg*Aiڃ5Ao"Q*AFW65A.n)*A`Pyn5Al}ߧp*Al!55A/Z*Ahn5A6d.*A(A|5A8g*Aj^TPw5Aug*AQqt5A}r*Apu}"t5AI{*A(qq5A]mp**A%q5A*AVDWr5AcIX*A@w r5A/' *AM2u5Aր>*ArUʷy5ATt*Ajy5AZ*Ac+|5A ѩ*A$"~5ADhz*A+ h{5APv3پ*A<˖y5A:C*A8F1Tz5Ai.*A %_{5A>*A架x}5A(*AHϏ\5A<*AJ<55A[*Aˢ5AN*Af,- 5AE$O*A0t 5A**Av 5A~kK*A[g|5ARٽ*A(SyN|5Am"*Ax~)N}5A *A<B5A/_*A{C5AEݿ*AS=5A5G:*Au5A)w*A?3q5ASH*A 15AcT*A_tŎ5AY.*A zt55AOsc*A9kd5Ay*Ao5A=!*AK<5Aih*A pM5AIA6*AΚ5AA/݊*A5A.!*AD8{5AV *A8"ۄ5A%?.]*A!`5Af!z^*Aǘ5Aܑx*A^ގu5A)%,*A# 5AĻ*AU.ݳ5AO*AĞc%5AR3G*A;5AbPFF*A5A^]J%*Ax/2+չ5A.*AbEW5ARs*ADؾ_5AsE*A(5A_R*AA@5A4)J*A!=5A*AJ|5ACT*A, ?5Aoo*Ab^5A+w{*AG*]5AƕF*A6 A5Ah)*A]]5Aj*A5Aτ+5*AUA55A\*AHE5Aӯ*AX85A3 *A|5A6*A5A*A=eO5A$w**c*Az75A*AQG5Aty+AdgS5Ak|~*AF5A[w(+A5AW骃+Aqt%/5ATtU+AB5Ai+Ar*5A +AL5AQ +Ak5A퇸+A~ mJ5Ax9py +A`<5AVv +A:5A˽+Ay05A!HF+ATȔ5Aq]+AN05Ax+Ak/5A3 +AXQb5A +AbYn5AfԻ[+A~5A+A'5Ac8+A @>5A.E+AضN[5A;BN+A m5AG+A5Af) +ALO5AzNW+AµA5A:?H!+AS05AB!+A5A+ARL5AE+An5A+AN#Rh6APZ[G+A<†] 6At+A:"-6A8+AƵl6A9o+A K6AlH<+Az 6Ay_Rj+AL 6Av i+A^bT6A,_+A(vb 6ACB!+AM"6AʧS+Ab Vk(6A,+AzP)6A7u+A z*6A^F+Ap`l+6AQ+ATC*6A(b!+ATmL+6A!{ 6#+A5)6A\Ԫ$+AֈD*6AQ$+A:^+6AE|+A&P.6Ax +AZ^.6AF+AO/6Ajj +AH26Aӫk&+Ah9T06A14A(+A|R۫06A*+ARC:16ADuk.+AS~Q06A\^tN/+AU`/6A 2+A<,/6A 5+A*w.6AR*5+APGѢ/6AZO{1+AB3ݟ16ANp3+AY46A|2+AVj46AJ0+Ac"46Ag3; /+AtX56A|2+A\m'O86A]%-+A"cn<6A7&+A2߾>6AHl]#+A>6AFAr"+A?6A!ڊ +ABhhG@6Ap+Ay?6Au,B<+AR9EJA6A9yI+AKBC6AqR+A\2B6AM!+AsC6Aupc+ApY E6A:8 +Ah9jD6A1T+APCD6A ԧ+A.ƀF6AmfU+A8,5KH6A{+A!&EI6A{>+AN6Ab+As+Q6Aa +A@R6ADAK+AvU6A%Wog+AH9 X6AZ +ApAeiY6Azߎ+AU\[6Am+A@9]6A\~+Az`_6Am+A<`6Al+AHVa6A]*+AJ3ӀWb6A]VZ+Ag!"c6AbP+AZ d6A:*AYf6AM'*ADe6A~d2*A>d~f6A!-z*AX_g6AUU,*AV$zrh6A߸V*AAi6A>5q*Aj6A,p*AڛLrl6A C4*Akn6A+r*A*" m6As-V*A{zq6AT 2|*A~r6AԞ *ADp;#r6A*AvZ7v6AZW|6Ap=~*A_`~6AmC*An9,6A&S#*A[M6Ao*AB 56Ad*AI5:i6A/E$*Az\!6A&f*AdVWm6Afо*A%6An33 *A+e6A}M*A,ȉ6A@<*APw6AG8*A*T|36A]J沸*AޮD6AĚi*A r6A-܉*ARF*e6Apm/[*A<6A*A~{7x6A2/To*A.}?6A.*A=c6Ai^j*A~ʜ6A#ڼ*AJN6A!a *AԷ/6AvB2*Aޞ6A~*Axϝ6A-j>*A܆J6ARA*A|y]76A#*AN6Aki2*A '?6AW*ATs̩6A똝n]*A.~֒6A_{ *A*TC6Ad*ASM6A:;Z*AΑ@e6A*Aػ6AdQ%*AH6Ab*A,06AC^P+AU(6A:$ +Aꏿَ6Ar(+Aɍ6A@ +A| "-06A. +AH*6A[Q +Avv6ADZ+ApӾً6Avvd:+A<5%6A[ +Aآ#6A[n+A$Y`6AQݰ+AdBQ06A1vN+A7eE6Afv+A9&&6AJ%]+A>ҞŅ6ATT|+Ax҆6A}O%+Ay6A:L7Ȓ'+Ab}#P6AY)#+A6Ac]+AH6A*X+A"6A;8'(+AO[,c6Am4%+Aڶ6Aa +AVE6A>O+A0a86AUk*AgFP6Ak?*A$ed6Afب*As6A1*AR6AJDG*AJ6AD*Ad6AQ_t*AVb_76A̔*Af0s6A ґ*Aʌ6A^*A ,6A7\*At%٨6A@$*AZ[܂6A}C/*A(>c6Ax*A> A6A[zԐ,*Abr6Alg$+A6C36Abz +Af,6A}g+A]6A_ +ApZ6Au$+A&6Aϥ'+Alܱ6A+)+A6AB[X*+A;6A?`)+A,6A?'+APC6AZV$+Al´ ߱6A= E"+AZŲ6A+Al[ K6AVo+A$+6AZ+A$Oӻ6A0s +A6A$+AjH2Ź6Au+Ar*6A*j +A()6A## +Al!6Ah| +AHڷ6AB5q*A~Z6AhUٷ*Aķ206A}*ATk6AETT$*A-{6A)KG*A% 6A A*AjI>6ARs*Aj 6A*Av쳬r6Ay<*AXx6A +"*A6AuF*A6Ay*APڦ6A *A%6AϠK*Af6A3_*AY)6A&4*AL4 6A!*AJF_6A ,`N*AtC6A̦*A[6A)x*AlJ6Aב *AH38I$6Aq2d*AԷI6Aްqg*A6A*A/6A; *A?6A`KN*AI6Ah.*AF*6A2n*Ah׃6A^r[g*A4V6A*A0/f6A\F*Aax6A P+A ^Oz6AzNw+A@*Z6A' +A=6A%/c +Aq6AX6o+Aq6ASߥ+A6A%յ)+A:w)6AVz+AY7T6AE?_#+Aqff6AX# %+AM6A|a#+A6A*(+AK6A^*+AO"%6A++A6AL},+ANҋG6A}/+AO)6Ai 3+A|6AC.ߎ7+AI6A$:+A`'26A:CO(;+A>6Aw!8+A 6Aq=+ABaj\6AR;+AA6A )58+A 6A>y0+A\6AQq/+A^C6AF*AtSz}6Ar!4*A @O6A|:2 *A6AFw*A@Yj6A@*A 6A\Ħ*A^ ?6A#*AH"]6A^? p*A-Z6A6:*AZ6AW*AY56AO*A6Aܠ*AO 6A,NȞ*A1;6AE4ߡ*A+6A'K*AEѾ7A)2.*A?7Au@i*A7AWK*A\<77Ae*ASdl 7A.*A<^7A`,*AO 7Af~*A7! 7A5x`щ*Aj 7AiWᔏ*A) 7A!*AN D7AR_v*A;3)7A @s*AxS7A)-%]*A(/7AjU*A76A\#*Ax꧹f6A *A@t6ή6A**AT!'6A*A`:6A s**APJ*6A̓|i*A5\6A5Sn*Ax96Aa;{*AjyŸ6A!'y*AS<6A!o w*A! J6Al g*Aj6AFP`*A0?tn6A]AU*A^Z%_6A8|EO*ArQ6Am[J*A"O6AxXII*A6AZV7A70F*Ae @7A@a*A ]A7A8VN*AgoJE7A:T)A2}F7Av()ALsoiH7AlET)Aw'H7A$K¾?)A :H7AVϽ)APL7AHMr)AxjP7Az)AgQ7A )Av3jQ7AtB)A4 )W7AdC)A:ޚw]7Au;)AP>6^7A@)A4dS_7A5)Ad> `7AR*)A+b7Ay؂M)Ae7A~3{)A<`Cdd7AU)A77A?U-)A۳7A93t:)A٢7A ))A4y^7A`)A24g7AN )AX7Aiiy)Az7A^dz)A7A5)A^wE~7A7W)A8R7AH0I)AA7A)A7A$lQ5)A$e{7AP=ܓ)A K7AZZ)A'}7A')A#7A Ԙ)A+7AK)A..7A[ž)AdZ7A()A >t8AP@P)A~-l8Ah})A!8Ab')Aj}z8Aߌ)A4 8AT [&)Ay 8A͎*)A:Y?8A*)1)AZ(78A gc)A> A8A ")A(ɓ8Aݤ:6)Ag8AdM)AI8A5^)AN7Ac@)A27A59@*=)Arh7AEQ9)Ajz7A]@I-)Ad8A|)APd8At~)A! 8A\n)Ag 8A(Rc)Aȱ7^8A ')AWz8Af-)Aj} 8Å~F)Aj 8A5+)Ah8A R)AXu8A8u)ẠԨ8A ~)A[8A>tF)A0 8AP)A2x 8AQ)A18AG;)A"8Ar)AplL8A +)Ad7h8A} )Aß8A)AG18Ay[?')A  8A4kܕ)A`[T!8A)AP>#8AЍ)AI#8AϽ)Ax$8Ak瑅)A'Bq%8AbDq)AnjzU$8Ad)Av4%8A)Aa-&8A)N,x)A0'8Au^)AZwT(8AU `)A_*8AWIڌ)A /?D-8A=%O)Ar6A.8AFƊ)A38A_./)AtIPa68AB6)A%68A*A|>e58A;t*AB%88Ay *As֥98Auu *AʏR498Ax*AꘈB8Ak/*A E8AJB*AxoH8Ae/*A(DJ8ADE*AQ#N8A**AMO8AoՎp*AN8A!sF*A`HO8A>W"*AEU8At9.;%*AOU8AV2ZB**A>Wٞ*X8AvyB-*AX8AS87*AHT8A7*A'K"V8A\l;5*AKG.Z8A#7*AQG\8AxUp6*AL]8A?O6*A`8A8L<*A`4[c8Aw@?*A0TVg8AxB*Ad li8A@߱B*A l8AZxA*Aklm8A @*A; n8Ar7@*A1o8AG@*Ap8AMM5fB*AJ#ar8Aw !@*A^6u8A#ZA*A5Vu8A GF*A/t8AӴB|0H*A&[wt8A,}I*AWu8A<9N*AfIt8A\.V*A~w8AoMa*A}v|x8Apc*Avre5x8A9:6)h*AvwLu8A3Ni*A̽Zs8A. ˆi*Af %p8AfX,m*Aj_m8A~r*AHUe8Aٷ:u*A0b8Aj4Dw*Ata8A3>z*A*eJc8Aѣ7{*A>rdd8A;#x*A)j8Agw*AzQ.q8Aĩy*AZr8AL~*AGn"Ls8A4*Afd?r8A9KDQ*A)o8A\ь*AJxr8ACx*A8j0s8A@y%*Ab\nt8A2&*A(u8AJ12*A/:jRt8A2y*ANDgt8Ak4*Ar8A1ܤu*AP ,r8Aȭ*A™٤r8AwyК*A~GZt8AE 7*Ajs$u8A{V*AOt8AEe*ALs8AwA*A ut8A,*AadZs8A8*A\Xcs8ALe-'*A6 v8A*A|ĭt8An*AX t8Ai:T*A}p8A:*Axo8ArK'*A!W9l8ARށ*A,@6i8A94*A,j8A29_*AZr8A{hlN*AM9-u8A۔,*As8A.+`*A v8AD*A w8A 1*Aڳr8Ab*AeU*}o8AAW5Y*Arl8Ahx*A>O{j8Al_j*Al%n8AOo*Ahp}t8AK*Aޭ]!x8A'1*A2ZWw8A *A g>"t8A6s+A3t8AǦH*AsBsx8A*Acx8AB\+Ar^x8Aв+Anwٝ{8Aw1j +Ab, |8Am! +ABb}8A_8+Ab}8Avxd+A r8Aun+A,5?8AQQ#+AD[ǁ8A캏c(+AkK8AP͖C)+A~~8AlU>'+Ahn|8A@%+Ax8A~[ +AxX< u8AZ"+APDs8ACr&+ARt8Ai)+A.g[x8As++ANS{8A$₯++A }{8A+S"1+ARb{8Ae-5+A:h8A?7+Ar8Aw8+Aj/}8A 7+A"WQw8AKI';+Aqr8A0/r?+AWfo8A^A+A&? Do8A00@+AV.3r8A5;+A\qw8Ah k>+Ao!z.~8AK`A+A`$98Ai.D+Aq8A.܌G+AT|8A JM I+A$|8AdQ݇I+A+r}8AQ l6J+A4}8AzYI+AԨ8Aq)K+As8AY6P+A!o8A(R+A V8Ac\`+Ab+8Aت8b+AT_ux8A]|d+A4̅:8A+f+AZ>8A[)ռi+A8At4Ēl+AΕ2Nb8AQk+A 0<}8A^m+Ak={8A=?jSp+AC;|8AFYu+A 8A ꊏ|+A@8A+ATT~8A[at+Aȧ{8Ă+A\[y8Aj2u+ARo"y8A^e+AVK2w8A_c+Av8A$£+AZtt^|8A~;+A6O{8A3kW+Ad1|8A+Aޕ~z8AŤ+Aox8Aaķ7+A:y;w8ASO+A"u8AN>+Aǧs8A.͚+A Sir8Apn3ם+A zp8A"[w0U+AҴml8A&Ͻ+Aj3qg8A]Жz+Aʖmo8A +A`RQRr8AUSת+Aȧr8Az!+A`չr8A~ݴ+A5Cbr8AcMž+A&wOm8A +AB"i8A9+A0gh8A92d+A:j8AE+Ap\hn8Ax6g+A}NQr8A"G+Aƀ_a&t8A!(+ARwu8A/q+A왯u8A.1Lo+Aq~s8AH<_+A@Ep8A&V}+An8AfG5+A.p8A+ABq8AZ+A$1L s8As+AUׂYt8AQfc8A*:,AƂb8Aw,AtY:b8AF8,Af8A",A =l8AE,AXm8A:,A&l8A8z,AES7o8AAOZX,ASko8Am,ARn8ABRW ,Al^m8AHE,A)l8AUu,A4#Pj8AQ,Api8AK:!,A4TsMg8A[1,A.(h8A˼\,A46h8A%4,Aذog8A]Ym,A$IWh8Ax4,Aljg8A=11E,A~AXh8A>h,ADg8An-AУ۳g8A_L -A,#x;f8AI$Hn-AFg8AHI-A @e8Av-An?f8A˰k-AP1!>i8A@fň"-Ab!i8A|i*-Ah8AfNɹ.-AhW-"j8A"+zX3-AJmvi8A1f7-A g8AL*ƸC-Az Fdk8AL-A BTi8AyM-A>ti8A|lR-ABi8A97V-Aޠ?i8ApqeɅV-Ab, g8A5Y-Ae8AR\-Aje8A'Dc-A~*if8A 8d-Airg8Aዠh-A쮗f8A}.j-A&eY Gg8A4 ^m-Az_3f8Aûo-AnKjf8AԦyMp-A^e8A ƶj-A`8Aw?Y-A(Vu\cZ8A"!T(U-A"N40ZY8AG?xO-A|E|T8A'iUH-AؤsR8A4#6I-A5ZKO8A%#H-ANJE%O8AIG-A-M8AJ!^4G-ALxfK8A@.]D-A^H8A 6?-A F8AV?9-A|z@8Av .-A*o>8Aq-(-A[<8A-AH`78Al-A7*28Abq:|-A8\.8A>ֿ-A34-8A<-A<"B"+8AYP -Ad{:i)8ADeh -Az'8A-A` L'8Ak-A[v(8A&'!-A?*8A2X;$-A:ˌ)8AB1.-ATkm,8A (32-A$΄R+8Aq:-Aw~'8Ac @-A` 8AHjh[VC-A0D\8AနL-Aߙ(8A@wM-AX;8AԉQ-AlF8Az[-Ap8AR[-ATl8A0d\-A򓙄\8A&/[b-A88A[h-A6zS8A/ f-A8A b-A(4M8A]u^-AV8A(6sO-AU^8A8?M-A<)t8ABkE-Adf8A~wA-Aܭ!8A?-A &8A7z?-A'8AM탷7-Aஶ+8A9-4-AU.8Aǖ0-AN/8A+ۯ#.-AAO18A%:d\--AV9M38Avڧ .-A&~Tq58AV0-A@L78A=sW;-AP u#98A+}={B-At-88AM-AZ@8ALKLZP-A2D8Aq,U-A%T_D8A[\-A!G8Alf^-A>i[H8A&]-A&$ M8Ac(W_-AI]Q8A`0I`-A VR8A1繻Ad-AJv@P8A֪k-A9-vS8Aj-AҼI:U8A~7m-A DV8AlC^t-AYƒY8A`cy-AWS^8Av':-A.P\_8A|'-AVca8A -Akib8Ar-A,?7hh8A I-ATs8AOaΉ-A,Zs8AY-A>|[ x8A-Ay8AO{C-A -y8A/c!-A*B`v8AO^V-A|t8Ao ?-A|fk8Adc-AHj8AnV-A,7Uj8Apm/-AK4^k8A g-A2$wm8A)훢-AiPkn8A-Aoq8A0I -Aӣr8A!-Azu8A -A"Mz8AebV-A8s\}8A'-A™ke}8A?m-Ahu18Ap|V-A(8A)-A,t8A|-Ay8A 7-Ag8A/%dK^-A:<8Ay8-A8ANF-AXO8AJX°-AF3M:8AA-AM8A{-Aڑhi8A -AB*Ғ8A-A Hp8Ak0-AP8A :-A28Aش.Aق8A? .ARC#8A9.AV_}8AE=Ώ).A4 R8A.A2{8AZx.AFw8ATk.Apldt8AKk.Abo8A [o.Al8A7.ADk8A:0!!.A,x3m8AScK!.A.e`q8A!A%.A>;*v8A7".A~8AD1$.AF0߂8AV).AZ58A:e8.Aрz8AUH7C<.A-38A_c&>.AX]8A'j#C.AN:"8A%G.Ay8A@8h'GL.A+kX8AooS.AΤ58AvQW.A_Y8Aru`.A lEͅ8A<8A!bm.A,T8Ay.Az2Y[8AStq}.AV}8A5.6@.A5O|8A)h .Az]z8ABO.A>ecx8A/.Ah'8p8AЀ).A47o8A,.Aro8A٤0;.Av:=)p8AR.A8"u8AIYQ.A~Q%w8A\`o.Ajv8A8.A%us8A.AHp8A4t۫.AECq8AO'C.A.8onn8AJt.A,Tk8Anj .Aa:h8AyV.A_8A8[Ᾰ.A@* _8A @.AZpm_8AL4Ӕ.A0}c8A.AJf8Aj'=.AϮWMj8Aҽ{.A#j8A[Ro].Azhh8A[.Aˀf8A&?O.ANsd8Ao{Q.Aβb8Ak3.Ama8AQZV.A8|a8AI.Ar,``8A |\].A'x6`8AX7.AR|d3a8A͠a.Ag\a8A?'/A0b8A:5o /Ab8A>Iˇ /A|NXb8A:i/A xqd8A.{O/ABPd8A]0w /Ah7ec8A3/AYb8Adǩ /AO b8Ag˵m/Ak z_8An]dL/AX^8AXw/Ae_8A0/AfS-|b8AjZ/Afx f8A1v7 /Ahf8ATO1/Ah8A(9G.A.h8A3( r.A8Yi8AҀ|.AQi8Al .A& Ek8AeD .ApC;tw8A+].A"{x8Aט.Aj7{8A.A<}T}8AyX.AEI~8AfZ⒠.A(\І8A,/.A~+l8At.ApD8A9-1ֱ.ARf8A 7.AZ8A .A:#ʍ8A.A|Atؐ8AOi.AJ`8AC*y.A>2ɒ8A8.Apʒ8A `x.A`2 68A7FZ.Aɓ8A ).A,<+c8Aػ.AY8A鹀.A|pe.:8Am8.A:in8AVX.Ad&R8A.AHL▙8A>sT.APQј8ANm.ABBx8A%ͭ.A$J78AɴR/AQl 8A/AJm8Az+/A ž8AX>/Aٞ8A;th /AFj8A!o )#/Am.8AE8o}%/A`𒨡8A{)/A3٤8A;wD(/AZ`lKq8A ))/A@|<8A!XF./ANtm8A~Bh2/AlD8Ar[6/A8"W8Ao u9/A=xۮ8A 6/A%8A'*85/A/48A"8/Azn8A_9/A4Y8AZ=/Aj)8A=/AuQ;8Av_?/Aj|K8AE' A/A~8A(({D/A)!8A9=pC/AlG5r8A$c^F/Adcֶ8AS:F/A8ArC@|vD/AϹ8A[SC/Aj8AyOPբD/A ڻ8A?MI/Ab68AI/A0ZP8AN4E/A8AځVI/A8A$)I/A8A|K/AF x:8A%[L/AY.8ABQ/A]878A$T/A/Q8AHB S/A6%_;8A~|X/AJU1z8A,k+Y/A8$(8Au]/ATb^8A^eZc/A#[?8AOR^f/Av8A€)zk/A/8A8 q/ARv8Ag's/A4%}8AQO8~/A58Ao/Al&08A;Au/AxV&R+8A/D`c/A<2at8Aw+o|/A>E8A9/AW8AR/:4/AЩc8AE/A058Ay,ɒ/ATX)8A mP/AD8Aali/Anqf8A /A8ǵ8AП/Akg8ApU,s~/AG 8A/A"[o8AI_Ok/A.k8A5/A>$;8AII/A8(8AZ/A,j|8A%/AHdf8ADn%/A˘q08AE֖С/ANb8Ag /Aܖ8A|b/Aw}8AP-/AZO8A /A@P8A;</Arʟ9A3/A89AjὪ/AtTs\9A/AK9AHY7/AK 9AR4/AʫT9As /An(9AM\u!/A%Z,9Ae-/A\ 39A 8U]/Aԍ̉9A`qhj/Ay9Apg/AH=-9A0G //At79A*y/A)(I 9A#AH/Al-!9AJ P/AD 6&9Ae/A'9Aپp/Ad2*9A %oH/AYD+9Aco/Afg5Y+9A'Ww/A`'Z+9AUF/A  +9AF0 /AIC+9A*_L0A-! $9A 'G0AZp(g$9A0A%aA"9A7)O3 0An9A:{ 0A89A on 0A\_9A.eZ 0AS9AF5 0Am9AH0Aƾ9A0AF!9A(T0A϶9A7(0AJ9Ai'Q0Ap9A==0Aw9Axy0A`Rذ9A}0A,9An9>0AA9Afr0AfWO9Ar*DB0A4dCa9AjlL0Am9A[ui0A#9A}@0A 9Ao$Q 0Ad 9A*!0A&4K 9APոh#0A>9A; &0A郓9Amh&0A'9A6e'0A9AwW*0AH9A@.YC.0A9A10A L9Ar30A9A{hı40AP{9A G=30Am/ 9A&ڕr40AV]: 9A˜D50At[9AQB60AJ4 9AYDck70Aw 9A1{70A6C9AH90A9Aqe:0Ay39A2>0A޸PK9AgE0Ac3M9A I0AJPD9AQN0Ai@#D 9ADӺKO0A݌ 9A0?Q0A%9AW0Aܛ 9AQm.]0Am!@ 9AIΝa0A@*_g 9A>-g0AĢby 9Ad%j0At\ 9Anۮ m0Ad9A/0k0AO/9Aj5Ak0A9A[m0A'+8ATn0Add238A7n0AQn8AG> l0A 48AMl0AN 8AX_m0A&8Arnn0A:_U8A"Kʲp0AhY08A[+w0A8iR@ 8A ~x0Ay 8AEfz0Al8AH/|0A:8AmDQ0AFM8A ,aЃ0A8Ak9\0A`8A[JO0AVC!8AI"pƉ0AtVa8Asc0A[8Afl0A,8A} a0ADq8A8K~0A\V98A`|/0A8A/o0A<+V8Ajb,0A.S8AfTU0A`#8A5x;0Aꪁ8A~A0AVw8A.0AE)8A7Mt0A[Y88A0A[=T8Aq0AJ=8A|=0A|A_%8A/z0A8ANuM֨0Ah8A ]Y֨0A}G8A}|0A[o8A9h0A(>N8A<+0A *0i8A^w̮0A6δ8A._ 0AlS98AYk0AB,Y8AX#R0AtM8Ajx>0AMl8An?+0AH(k8A0A^F}q8ALs0A~ƿ|8A 70A|f8Aj>0A+P98AS׽0A޷38AX'r0A)8A*ƫ0A(?8A.z0ABJ8A S0AHo8Au(p0Ah\8Af0A!$8AO0Arj8A;d0A6=O8A+d<80AnacD8Aq.(0AP8Ai0A8Al70A/y#8Al+0AW?8AET0Au8A;WF0Af~8Aŷ0A6#8}8A9p*X0AL姿8A0AvAr8ASY0As)8A6T0A0x78AC0Anl8AǓ0Af//8AwQf0A-E88Aam0A8A>-l0AI08A$;0A>Jӆ8A3I0A8AKO0A<۟G8AcRP0A±8Ai'0AX-}&8A10A"8Ae#.m0AhNH8A\c.0AzJ8Ay}0AۼT8A40A׳L8A@ ʼ0A"ٖ\8Ai0A&T8AWT0A\a1I8A`0AȬ48Al0A 8Az0As8A܅t0Axf8AA=0Ap 8AOD40Ao8AփX0A18AOtJ:0AY8AlsS0A8Af0A*Q+8Ajw0AN]8A0Aj 8A]7_0A p8AEA0Ad]8A)Lz0AL8A~H0A"8A0A(y8AgT0AVex8AQ?0ApoQ8A0A5#8A70A Y68AL1A2]`8A(1A^xL?28AS0AG6/8A_mE0Al7բ8A.0AU÷8A~0Q 0A.8AҖ0AG8AQ*1AP 8AU1A858A'1A( b8A1A GI8A+G^Ű1A<1۽8AFx^1AFϾ8A1A~5j8A 3 1APw~8A xD81A|o8Aj0AnV΃8A`{1Ah[8AFc1Aj8A6_1A|{Q8A,ӟ 1AhM8A%rϓ31A}YD8AS]A 1A\8AZF~ 1A1۬8AĺP~ 1A/8APEE{ 1A~Ԙh8Ag\O 1A!K>8A-ԑs1A@ں8A)H9X1AW8Abd'1A 8Axo0A2/9]8AgG0ALfH8ANTt0A@헆8AS 10AV8A 0AT_B8AV8/~0A8Aa61AҧbR8Aa71A8AJ 1AXQ 8AaI1Aw݂8A01A$8AJv>1AX/z8AH aB1A)xDz8AE1As8AvY?0A$~Bk8ApQ0A @g8Aݬ0A2|*b8A!}e0A.**b8AFs=0A)g8Af˜70AH j8A>ۜ1AX%p8A1A 1q8A9@1A蓽r8Ack1A2u8A^ ́1AH Np}8Ac~yG1AR8AK3fa 1AED8Asc# 1A\<8AE)l 1AF8AhbK1At@J8AI1A^t8A/_ީ1A^Vr8A)C81A^Qp8A9y1AOp8ALm1AJ 1o8A^81A=k8AJ1Ai8AG_y!1Afp g8A$1A9Xzd8A$1Ap `8AKt&1Ah9_8A^#1A䬦tYi8Af|!1AЫ[El8A7t 1AjWXp8AS1Ap=w8ApV1Adsz8AD1A.}8AFS\a1A½FŃ8AS[1ĂL8A;1A4+=F8AgY%1ALQ%+8A .R1Ag8AI1A䇓8A'V1A?L8AKGU*1A( 8A!4s, 1AƓ`8Ah h1A78A[1A:{8Aʢ1A!|8AU\yW1A2r 8A;91A޿P8AM 1A0u8AOڬ!1AX 18A(1Atg8A`E1AƝ8Ag$ą1A]+'8A-fo 1Aޑ98AQar"1AH8A$!j"1A~KO48AL#1A&M8A_%1A8A[>)1A68AK7h)1AnP1 58AT.1A&S8Ax^/1A{ rM8A:m`D01ATZ58Aop511A޸8AJ*21A }!8AMU31A ,E8A#41A- 8A9lN61Ad8AN|<1AO|b8As,L>1A=R8A&ڸ?1A;!8A?1A2d 8Ad/@1A!J8A2!A1ASĜ8AQF1AP#8AҹnG1A4u18AsӀI1A+UĚ8AwJ1A0x8A^ L1AsO8Aѻn5Q1AXI 8ADS1AV`8A6FU1A6ͬs8A X1AtUݞ8A<Y[1Al-8Aȴ\1AbP8Aw`1AVî8A,>b1AˇD8A̫d1A[P8A#կg1A+$8AMrzi1AP"{R8A>iXVk1A:{8A:H;Wk1Ajb8Ax*hi1A|!8A[l1Az08Am1A,!8A1n1Aΰ8AbVp1AxL78A ׀r1A`^8Aҽ61A*28A0HM1AYx8AJ&z1Axs8AF}x1A,ׄ8Aqv1AB*^с8A4uj"u1A\T58Af;t1A %#8A{lr1AԣPr~8AJm1A{}8A!g1A:@z8A(c1AOG&x8Azܰc1AЯf/>w8A6zf1Awzv8A{m1AP)z8AQp1ADdZy8A`St s1AqTy8ABPvt1Ausy8A\_t1A8Ts'x8A蛓q1AXjw8A>_8,o1A,t8A{o1A^$?p8Apn1A4#\)p8A&o1Adn8ADpp1A\ m8AŹr1AXp}1n8A؇s1ArzɌm8Aѐs1A쭒j8A8 /t1A j8A%kuw1A\Q/k8AKLx1AE)nGk8A y1A@.]k8A\y1A l8AĄl}1Aqbn8AȢ&'}1Ag}q8A|}1A k@s8A:RB1AzŰu8A1Aew8AnOT1A${|z8AbN1Ay8AJ1A~px8A Qֈ1AT~t8Af|B"1A+ t8A67)Z1A0ct8AsK1A~p6v8A򘋑1Am6 w8A601A`,u8A1A:kz[r8ALP1A8q8A~Y+1Abqr8A d1A*Pj_r8AН1A"o8A51A>N k8A_;|1A$>p\j8Ac1Aj*@h8A1A(c8A1A.G\`Ob8AW1Ap!$c8A>gY1A 3b8A991Aa8ȦP61AK\sZ8Aʨ11AT8Ary1A1R8A8`1AhlN8A|1AnPK8AwT61ArI8AF1AE8AI$ϣ1AXA8A[\1AL=8Ai6xԢ1Au<8Ao)1A6]m78A(Ń1Apǃ78AwC1AL* &88AJ7\1AZa:8AQd1A#:8Aߣ^&1A*F:8ALj1Ak78AD3k1A,t 68A=XӦׇ1A%48Af3 1AhQae48APޕ71A'/38A$3-؂1Af28Aw3~l1A"ݡ08A,xU1A+*8At1A.t&8A 2`1AP ڰ$8A.\`1Aᗶ!8A=$1Aw`w 8A-=1A'%`!8A[Oy1Atsc6%8A&j΅1Ay'8A @%1A=)8AX1AnKa,8AqΥ1AY18A8$1AA38A),1A/<&68AaA1A.u58AB 41A 48Aty1A 38A21A ɫ>38A1AH.18Af;1A dA28Au1AC58AhCh1At$<48A zyZ1A48A?q;1Ai68A/1A0^+78Ax^i,1A9oh88AkWe1A%;8Ac1A?=8A8A{K1Aq?8AA4Lr1AHoA8A!1A$C8Abz1AT:+G8A)ϑk1Ar[7K8Aљ1A˰M8Axi1A@:R8A1A˜\8A3Rʷ1A^8AJ_?1AAe8AO^1A1Ni8AXwu1AvNj8A'z@1A:kj8AY|b1Ah8AF>21At3 h8As楩1A%k8Apª1A%@o8AESR1Ayp8A1AXB~p8A eV1A(,p8Ax1A7;p8Aհ1Au r8AeJRy1A2>^q8An%1A(iӷq8A%1Adnp8AeZ1A gn8Ad}1Ax_m8AP팱1AFߵQo8A hdغ1AB=1Al9k8A#t1A0Рi8A.1A^h8ASd]2A8mu~ f8A=Xֵ2AEDc8A$2Aއ`8A{(2A[5]8A+M=2A:Ҳ\8A2iNr2AFu>]8A,+ 2Ap^\\8A[ 2A ѻZ8Aj 2A;{U8AA 2A>p%pT8AQ 2AоzR8A2 2A"0LtuQ8AZP,L2APR8A`2AB{T8A `2AU)TS8A8A@1Aݙ@8A1A;4>8ALY*1Aa=8A 1A6WwM<8Aߵ31A"&m:8A 1A.98Aܼ1As888Ar1A+-,78A7(~1Ap68AIЋ1AD58Aux1Abr48Akz#D1A޶28AB஫1A6 mF08ADbU1A8}8B18AZ 1AQ08A~)1AC9{18A5!8A˂31A" #!8Aͼ1A)54!8Am1Al넼a#8AlA1A6h!8ASn=1A]8ACPW1ApJ8A*H\1AC} 8AKd'1Avd 8AXc1A`8Awf1AW8Ay1AVmv8A\1[1A8AṴG1AP8A!d1A48A^ǵD1A38A1A7G8Ad?1AX8AfrL1A6l 8Ac[:1A$~f8A1A 8A,­1Ah7J 8A_k|1A ː] 8AO/1App 8A!Q1A`4B 8AD 1A 8Aou21A 8AN1A, 8A- y1AF/ 8A>n 1A4+̈́| 8A~`1ALV8 8A1Av&8A<1AjW 8A91AčM8A91ANJk 8A'I1Abk8 8A|j1A 8AK02AH 8A8[2A|= 8AY92ALp 8Aev 2AnyJu 8A 2AT 8Aƒ 2A7 8Auz+ 2Ao^ 8A: 2AWn8A(2Ap8j8Arɕ0p2A& 8A?Zd2A>ړ"8Arf22A 8A`׾72AJِ8A2A88Av;q_2A98A霁/2A0(ܺ8AsD2A`tp8A-R>2AB;O8A<6/2Aa8A:2Ae\8AD2Ap`כ8A#2A8A3c2A8AD2A2 8A62A@d 8AIAJ2AB00 8ARbX2A & 8Apha2A:(` 8AKA2AR 8A2AƗ 8A+(2Ax 8Ac2AHio 8A 2Aܱr- 8A1AN$7A{ 31A/V7ABx21A>7AOӢ;1A,7AK1A(y7Arcg1AR97A"\1A17Am1ArCi 7A'jyv2A r7AY{2A\87A O 2AL (R7A 2A67AEv(2ALT7AU;2AHl7A>2A;7AR#2A~q=7AU \V2Aj7AXF7Apa2A3e7AUNN2AHH7ANЪAG2A7ASN:x2AT7AQ82A{7Af`9-2Aчt7ArY2A6)7A=T@'2Afa7AY2A8ۍ7Ai*2Ad7Az"x 2A$7Aiޥ@ 2ABvM[7Aq! 2A-<7A+IG 2A^d7A࿽e2A\v97A5|2A%!7A@o2A_Sg7AJ%Q2Ashy7AR2Ad?7A:x2AV7A2AM7A5$N2A"D@7A/$]2Apl 7Aj7AS2A^IԲ7A4U=V2A 0]7Ad< V2A]7AֽV2A Z7A~iW2A.3F/p7A<ƱW2AQc27AV2A .7AE_?Z2A$7ArY2A8i7AµZ2A*R\7Ao>^2A`7AoԤ_2AN7Aɠ:_2A4RL7AR`2AB7AZ։b2A%F7AO.IZb2A9{m#7Aw{}Wd2Ap 7A=/8e2A't7A ;of2AL7A:Mf2AV/q7A~d2A;7Ab2AI>ٵ7ABiG4a2A.67A" vc2Ah}]7Ac2Ap*Q7AMd2ApAԭ7A\rf2AZb:T7Ao#-g2A]Z7Atf2AM5b7A-Bc2A%R7AMd2A ڵ7A߁?f2A2\Bu7Aa>g2Abd7AB{h2AЁJY7Ai2AS)7A6˱j2Ado7ATܷi2AUK7A!]j2AÝ7A@Rj2At@뀳7A+_Sj2ASB7A@Rk2AD0m[7A8m2AB7ACo2A&"7ADVo2AntG7Ak<m2A͔7A.HRm2A&w7AFm2AŻ7A{n2Ap6E=7Aho2AfRS7A"!Gp2A$T2Ay7AKo72A.p[7A|2A2$7A~`i \2A̅9^7AG('ĕ2AL7л7AoL2A(в7A'I2AnnBt7Ak 2A&87AQqL52Av 7Ap 2A 7APC2Adl7AS2Ay8v7A942AZU147A &(2AfRj7Ap2A9W7AFBd2A7A2A P47Ac2Alo7A% 2Al7AGuС2A7A{@C2A05e7A+W2AkYk7A̎a2ASK7A>2A8@7A.r2AH7AҼ2AD/p7A[/2AB_"7AR2AR'67A~c2A B07Aփ2A7陽7AB2A+k7A:2Aji7AƉ2Aȗ?7Ax&/ 2A-]7A7=bU2A\پI7A22Ar7A- G2Aʢ7AR2A*j7Ado2Apj7A <2AaHD7Aش 2A7A7*2A@Lk7AjŸ42A ^7Aj2AT7AćG2Aqm7A?#+2A.d37A'2AIꁯ7AnY2A;A7A.92A6}z7Aհ2Ae7A32A־?7AY2Ar7A! ċ2A00)7A 2AJ3|7AX2A^87AZy(2AEGk7A.=2AI7A<z2A@7AAH513A_4c7AX03A}!7A<3A 7ATl3A07A|Rd3AL[7A`**3A 뫘7Afy43A8Er7A^3A|67AIJZ3Aʾ7AӺB3A2l7AaxY3A:i7A5[ 3Aڙ#L7A"\ 3Azh7A33A jHX7Ad菟 3A\l7An 3AB7A#3A֣6)7A|3A37At$%3Az7AC3AЂj7A\C 3AwW3A07Ae93As7AnR3Ar7Axb"3A[G)7Aip9(3Azn77AS'})3Ansb7A6z*3A4r7Axz=-3AT9@7AE/3AqF7A.3Abj»7Ap.3A'7AA.3A(U77A<4`03AL{Q7AR$ħ~23A{*!;3A"cײ&7A[>.93Ab7ASԥp83AT軌7A3y[D93A ̋7A^m 93A^#W7A*/3A"nzL7Aq+3Ab7AE+3Av7A׺E03Aɶ_]7Ab13A6s7ApG2(33A^HZ7A63A<Q7Ay{73A5!7Aկe >3A*t7Ag?3A]7Anvv>3A7A"VvRN73A67A\ 73A47A^:3Ad}7A%%\:3Az`7A+0;3AB67A'GM;3A#]7Au7>3A6E7A,4">3AR7Ar.]<3A2w7AG9[=3Ag+J7A`W3AT8z7A!Y3Ale8Aa[3A`8Az]3Ax1N}8AٽN^3A2ʆ/8AU}L_3Ad8A{VV`3Au8A7gH`3Ar7AQ5a3A #EB 7AAob3Aգ#O7AܵȈc3A:<7Avwc3A@(17A,[e3AX2ݿ7Aug3A)WJ7A?ACi3AP:Wͅ7A{_j3A7A g3AZe7AL`g3A(|l7A\Wlf3A׳7AP8g3AlGq7A#Vi3Aba7A_"xh3Aƌ 7A3(j3AƁM7AeYZfk3AOs7A3AB&ր7A)zs3AJn7Aü,r3A@57Ax63A4JM7A]3Ai#r7A<3AvG7A9nh,3AGԪ7A񩁓3Ad~7A3A ,7A"23AF7A7#x3A7A.ϕ3A4O\7A|/3A%7A+J3AvOq7Aޗ3AX7Aޮn3AxZ7AY/3A&ro7A[xo3A7A3At֋57A{ 9e3An-TIb7A$3Aԩ7A+6l3Aۑ7AdT3A %ȫ7As|3Au7A13Ad嚨7A%-3AI~7A_3At?>7A|q3A27AJ-H}3A6AZ7AX43A¢7A2&3AN¥7A3AH7A\7̻3A.9F7A>c3A27AG3A z7A䙾3Aڶ7Aרi3Anv@7A2^3Aτ{7A<3AzN7Aɝн3A*J7A[z3A&=V7Aԙ,Y3AsJ7A|ط3A>+i7Azd'3A4!7Au 3ADZg7A N3Aϩ7A3AM7A,3A37A43A+f۴7A833A.87A급3A~5G*7A^t~3AD7AnYI3A7A ]3A=7Ae3A6V,@7A;b3AW.27Af3A<{H7A M3A uV7AFj3A]47AV)`3AslT7A$4k3A5j7Axs3A 7A`p3A@X7An+3A\7A6!03Aq$7Au3ABH=7A;݋3A,+7A&'n3A؆`L7A{D{3AѦq7AlS3An!j7Ake3AjC7A~[3A&NA7Aib3A"-7AGvZ3A{27A#D/3AEP7AJf3ANvq7Au\3AV7A t.3A0B7AOò3An=57A?e3ANR7ARQ$3Av&7AI4x3AP7A y3A$7ApP3AlL7A$3AFPwS7AR3Almd7Ac"~3A4[z7A1;3AIz7A"{3AT7Aw*3AR 7AXDva3A|7A4&3Aϭtl7AAj3A迦f7A<%3Au7AXPf3A);7Aa23Av9l]7AqD3A7Au03A`7A2H3AFϰ. 7A'8|3AQ7AS_3A7A8 3ALl7A끎3Agf7A~:_%3Azβh7A!G#c3ATiO7Aa3A 4^7A 3A?0%7A G3A**7A!e*3A27A:q3A697A=3AH*F7A6EL3A&7A93c3A7Av3A>!_7Am^WH3A67Al3A?7AX;gfx3A(K7AD;3AE7AWIa3Aʹ7AF3AA7A羯3Az17AoT3Aj7A2Nk3A.08A2Xi3A.8A@C3A[78A\$2 3A`8A8 !3AV8A(]T3A~ 8ADP3A\2 8A+z3Am 8Amd-3A.8 8Ag3AbC 8A9\3Ae8Aʵ`3Aja8Am3An8A $#3Ai678AfѼb3Az:{ 8A8I[3AGr8AG533AfVO8Av:j3Ap08AY3Aa8ArA3Ax08A:3At(8A_N{3Aluu8AŰb3A8A3AiG8Al(3A2aR8A'3Aǣz8AKc3AJx8Al3A8A3AC8AD"3A~ܗ8Adz3AC1>8A 3Aj;*~8AiR)3ANw7A4D4AV(s7A+L4A'p7Adu4AA7Av24AF77AvT4A.lҌ7Aۍ*4Afw 7AS4Ab_7Aܭ4AA7A$74AM7Avp4Aw37A*&Lb 4A~3"7A![|4Av 7AL34A^N7Ag4AR7AW4Ab 7A4F4AVK7AI%4AVt7A'4A,h7A Ň/4ALCOv7A^>4Ada97Ak4H4A|B݆7Aœ4A~7A> (4Ae7AY&4A -7A 4AA7Ai 4A'27AhSC4Ab97AnJW4A< 7A K4APY7A-4A6p7Aޟ!Ɛ4AƼ7A1B L4ADS}7A*Cx84A:siֻ7Ae4A:Gغ7Ap=v 4A,+7AW$84A 7A6N%a4A2[4(7Aݴ=c4Aa[7AgsG4AwIL7A6v b 4Aeʵ7A 4A. P7A 4A'䠲7A$u 4A07A 4AȂ7AP@f4A8]^7A4A2W7A4%4A7AV4A]7A0sP4A27AcҠ4AV5<թ7AM}Nl4A*eK7A\s4A8^ 7A4Ajڦ7AK.4AoG7A8 4A=7Aq4A*#`7A|%4AJlx7A;ݢ3AW\7A44AЛⱢ7AZ3A+7AŖ3A7AO3A=rȟ7AG3AN]7A*M3AA7AZb…3Au;67Ay"3A4R֝7AYƎ"3Aԑ~ϛ7Ay3AiF7AA[3A 7A3AZߚ7A3Ag!7A)g23At|N7A w[3Ab߂+Ϗ7AUqs3Ap7Aub?3A~wM7A63A:7A > r3A0oq7A3A8Uu7As'O3A\{7A4tL3AH*v7A3AR7AA'i3A:7A13AdW87A2o43APan87AE3Ar:7AX7LM3Af̔87AP3AJ4t77A,C{3AR)67A)F`4A8'`77A4AbQU47A!4Ae27AȣtC 4At027AKy 4ArS27AGM 4AN17A~+v 4A<.7A-54A{J-7Ai9 4A~+7A4AP,7AT4AlTR-7A7Q4A,7AR,l4A$ɦ|)7A&a4A&"$7Au 4A]n"7A4A07AgaO4A`07A` {4AZh7AFtp4A6:7A>4A7Ac4AS7A" 4AMY7Aju4A]&7ARٲ4Av7A(B*4A^{o57A' z4AR7Aì4A]4A39YY7Al*!4A67A !4Ax'7AM(4Aq3 7Aa,)4A 7A{s)4A:@> 7A$*4A,a,O 7AƯ -4A 7AmH.4A2 7AaǣE14AZiW 7Avω14A&/7A^G.4A(.7AZ|{,4Afv7AD,4Aʇ7AxJC.4As7AU,4A=d7As--4Az7A>+.4A_7A4R *4A C7A &)4Av7Ao*4Ali7A6-*4A,@7Au'4APK)6A '4A,Ry6Aݖ &4Ab86AtO'4AVZi6AXV&4AԵr8T6Ar%4A8գ6Aꋎj'4A!6A)8%4AH=q\6Av#4A|2k6ALs&%4AJ.6A^"4AXW[6AV&K"4A^u6A3M#4AV6A+;1ek%4AK6Aލa&4A> 6AW *4A;VT6Awm-4AS`l6AR!/4Af,6Aj14A޿o6A"v:24Ap76AC24A5.h26A<44At9ϝ6A 44Al6A34A$ 6Ay54A}6A264Ap6A~uCE64A:iYC6AA-84AI6A|)Z>4Ahz6Aقr_=4A*;!6A+2z:4A.6Agd'D:4Az%6Aײn;4A`r6A&f:4ALhil6A⡯~;4A︜76A.?4AU66AXۙ@4AA6A[VTnHA4AY6Ar B4AG6A ,D4A<.{T6A{raF4AV,6A`-E4AFڼ:6Ajq}|H4A6Ar DCH4A&E6A$qH4AP:6AhqK4A(00а6A0M4A2$6A4&O4Ayf06AvsgR4A ,)6AQ3ݎR4Ab:^6A3[HU4A$6A`?bU4A6Ad)aU4ArO6ANp S4A+c6A+U4A^ށ6Ak~V4AH"66AIV4A ǠY6A ԐS4Ay46A'}ߔ&T4AJt+6AGV4A=܊6A'WʮV4Aʰ|6Aȷ$Z4A+ 6Az]\4Aڕ26AI>]4A4e6Ae;=[4A9#6A |]X4A0i| 6AMwīY4AT>V6Aq9;Y4A56A KGZ4Am]^b6A劏[4A6A IYY4AC6AY)Y4AFQ6A"١X4A"l6A+=Y4AP6A\4AjBU &6AO]4AF϶06AIB\4A6A;\4A8j3ݺ6AŸ^4A0W_6AZV_4Afwd6AzW_4AJ7t6Ah_4A}p6A;ixE^4AoQɳ6A3_4A_6A>^4AK6AS5H`4A$46AN#Xb4A2e6A9 qc4AQ36A4dg_4Anױڽ6A\_4A&e6AQؚ\4A`v6AxC\4A0s6A;G^4A - 6AA]pa4ALg6A De4A١6A+f4A؟& 6Ab(Lg4A m6AZe4A9=|6AE 8mb4AEW6Ahb4A!6A@xH]4A\`6A[4AN[6AD[4A~X*6Aɦ]fV4AX6AFGT4AG6A8_T4A1)6AOS4A6zǒ6AZT4A 6AL~gX4A`"6A3Y4A2mć6A`xY[4AS%6AmR݁'Z4AQ;6A}2)Z4AJ6A:mY4ANw"Њ6AݴT4Afh6A)AR4A!\͎6AhaO4AC6AՀN4AVPߍ6A PM4AY6AL4AG6A3\I^I4A6AXјG4A Xߏ6Ab!/\E4AO"6AOC4A.! 6ACK>4ADX6Aj!=4APp6Al<4A:P6AA4Aԯ U6AniB4A,R)}6AV&B4A0:z6AMB4Ajz6A\C4A-+z6AI{YE4Awfx6A;sgXJ4A(z6A,HM4Aȷ+z6AE; O4A{6A9SP4A+L-{6AN[R4A+d|6ASgS4Am z6AꑣT4A`>Lu6A3U4AQ!r6A TS4AUr6A,=!R4ATes6A14Q4AJlKt6AtIQ4AŴt6AP4Ar t6A[O4A"&s6A3O4As6A&N4Af+q6A-uK4Ahr6A!NK4A r6ACWTK4A4Asm6A;H<4Ajl6A74A&,$l6AYF.4AYнm6A4.4ATތl6AV+4AGUj6ATQ)4A5j6As[&'4ABm6i6Aϡ&4A~i6A*pz$4ALvQh6A P"4A4yBi6AWS!4Aɮf6Agb}4ATe6As4A=}ʞc6AY#4A׷a6A4mE4ALH`6Aн 4AZ_zN`6AI4Ar_6Ah4AwA\6AL@`3A$<]6A2Q3Ad;Z6A%G3AfZ6Akv3A5E3AiN6A=03Aj\N6Aʍ>3A(T/L6AD\3ArFdQJ6AM@v3A>5S'\I6A8OL 3AI6AW\03ALlF6Aգ-3A.*V_E6AP73AQ:=6A3AX+&!<6A L<3Aޑm:6AǩB3A>b86Afz3Aj86A}/%3AV76A3A|76AĚ3AQHs76A~n3A86A,ū3ANA0p<6AuY~ݪ3Avj<6A!43Azd1|:6Ayk3A~656A@3A!26A :O3A>,16Aswk3AFۓe26AA3A 26A/,Bs3A> 46A;p3Aʝd36A㷎̙l3AXt46AtA8Z3AЗ66ArX3A>V'66A8¶oY3AbtK36AATZ3A"Eu06ADC[\3A~(16A`+_3Af Q06Aa{e3AH5̗/6A ezm3AR06A1q3Ao306A+|~3AR_>~,6AG3A|"؏,6A+n3A$i,6ADW3Ax-6A ԶZ+3A΀Q36AtA3AJJ16A5>n3Ag%/6A7W3AT5B/6A1>8˩3AB{-6A/[E3Aڎ,6AK3A5,6A3AWŃ\/6Ae>o:3A<./6Alx`3A!gY.6Ah 3A^j.6Aƾ{@3AH ,6A4K3Ab:06AS a3ADƽ46A:63Aq66A' ڠ3A0E96Ar]eH3A8<6AH3AIS@6A$3A@A6Avw 03A*BB6A.$3A)L E6A ;t3A([2k E6Af&3AD6Ad3A#@6A} 3AF A6Aj3A5C6AL&ܯ3AmE6A5{`3AMF6A%I3ALFH6A3ApBK6AA /3AOmO6A<3A Q6AE4AdQ6A4Av\ЀO6A*HG4A'P6Al4A$#OM6A r4A:[k(L6AkW 4A?K6Ax{{4AH4dZN6ATf4AnZM6At9L4A 'O6A1q 4AB!M6A"4As3P6Am$4A<R6A(4A:+?T6AS[)4AjU6A,4AX6A_IN.4AVgXFW6A ^+D/4AaW6A_34A{Y6A64A.8X6Axsd<4AXq[6Av<4AğG]6AL8CB4AF]6A1C4AS$\6AIљE4AL/\6AXYoH4A A9]6A K4AP4_6AM4AP'a6Aݍ>IQ4AT%c6A@R4Axe8`Qf6Axc:S4A f6A=U4A oaf6AbfU4A֧h6A)sV4Ah6Au$^4A楒!j6AF(c4Al6A˝d4A.p/m6Af4AYyl6Am%+h4A )j6Ad$i4A=e6A%|k4A8sc6Anm4A \6A'wm4A}&Z6Azf4AB8W6ALb4AYX6AuG*$g4A_S6Ayi4AzS6A.>k4AۗT6AZUl4Ax?T6Aen4AfR6AƄq4AT;HR6A̼s4A"vP6A6Ap4A+U'?6AՊ4AD>A6AuMv4AH@6A2*4A5݉?6A%:<@4Ayr<>6AUFf}4Aƿs=6A(ʘ4AGl<6ASTQ4ApSB=6A**4AWP<6AQ&4Air;6AhP4A: L:6AF4AɈ96Aa4AkG96AKxP'4AZ766A ӗ4Ay56A,us\4AX-26Ad6; 4Aď06Aro4AfVu>16A.pǛ4AV欦/6Aϑa4ALf/6A@*4Ab&.6A.UpG4AFX/-6Act4A>߮.6Azb;4AP/6A4A[D06A}Ǿo4A$,Uun/6A&bS֣4A"u-6A-"p4A@qCP6AmGqJ4A+ 6Am?4A7]$ 6AБt4A`(6A jGk4AS5A>(!4A]5APs4Am5AG4AK5AE\9K4A; 5Aye\ 4Ap5A5V#4A 5A 4AL5A/Ƚ4AfՎ5A\s 4Axa㷛5AC R4APۤ5AQ_4Ap 5AթN4ArHV^75AB4AsO85A:6ѝ4AD^5A`R4A쌚65A4A4A^G5Aaͱ4Ar75A4AhY5A T4ARr5Aut4Ap5A,ᔰ4A;f5A85UR4A'^5Aw=y4A5Aeڮ4A0^5A|mݮ4Av#f5A4A4~5AU !;4A!x5A.vF4AS5A84Ajl5A[QH4AF>_[5Aح4ArLJõ5A =4A>tr85AWO4AFp5AX4A^<5ACҔ 4AJ+5A814Afa5A:9e4A6yO*5Aw4AԱ5AEԺ4A$`n5A4A845A)'84A>5A!4A*@5A㾄4A>\(5A2^*4A5AX 4A"'p5A1 ,e4Ac‹5A۸84A C'5A/ijߴ4AR-t5AC4A^5AEEx4Ag5F5A6| 4A4(Ґ5Agb4Ar"5A^4Ak$5A4ADV~5Au!4Ač5Aj4A$=t 5AJ4Ag;5Asxcz4A`kԔ5AUg4AYhc}5ACnD4Ab׎5A4AFW(5A\4AK=5ADb4A~Ƀ5Aw A4A ޑ5A?^H=4AJpj5A=4A-5AXd4Ahڀ|O5AyRJ4AX-v5AAN4Af%75A[%v4AРr6}5A%ϔ4AP& 0z5A%4ALiUw5AV814A(ުv5A*24ALt5A#c>b4A\4|q5Aq4A:Hn5AO&4AbFm5AV;/4A3I-l5AmG4APҨ}j5AX4ANȈCj5A4Au/m5AD4A3l5AI4A^m5AL4Al-`m5AbO4AB-n5A2oL4Ab[q5A-?4AAûs5Abn4AϤt5A$B4AK2r5A>H N4AVyjm3s5A贸N4An}Oq5A]1/4AI n5AԸ4ApBB,m5A4AX3n5A#64AfAo5A#A4A8n5Ab"4A\pCn5A!C:4A`Lp5A4Ro4AWr5A~4A~3y5AQ3o4A6{5A Y4ArN{p5Ahe4A6 uԁ5A U4A;z5A#̰`4A>.ϡ5A(|4A>ؚ~5A4A׆5A˖:9/4Ac5A*9A4A/5Ahť4AP !u5ASS4Ac5AQ4A.5AV5AKZ5Ar(5AG5A n5A>ڕ5AvS45AHou䯔5A}\5Aǔ5Av|r5A! K5AFqΦ5A5A)`H 5Ae5A5A=˗5A}- 5Ab|5A9 ' 5ADO͙5AHܞ5A,5Ab ,5A(5Ayl5APљ5A T5A6{5Ap 5A}~5Ae.45ALn5AJ^5A4?:5A,u5AXQ5Ao$,5AZʎ5AL% 5A'5AUD>5A` F5Ab5API5A*Q5A+5AIJL25ABj4+5A5AXu75A?5A(Щ5Aq,5Ala?5A1|5A&-5A_#!5AL;\5AXo"5AU8`5AB=ĉ$5Aν_Z5Aw@$5A*;AF5A:n!5AY_j5A%'i$5A4,5Ab(5A9k=5A>'5AiY>z5A g+5A,)5A 5s-5A4b5A% .5AH5AB725As_5Amk25A5A&yW15A$Sv5A<.5Ars5Ap%-5Aw 5AUѳ-5A6lc5AȆ/5AX ǵ5Ap/5A꧌5A;%/5A>fX5AR0t3+5A9B5A?+5AlM5AL:[//5A0ߋ5AuB05A-5AX?N/5AVt5AS3 !05A4*Җ5A15AbTC5An=~a55A.3XP5Ae |O^85A25A|M6:5A|7X~5AB;5Arӄ<|5A26?5Af$z5A^5\@5Ah1x5AU@5AZv5Ayp?5AR?Tv5A)>5A0$w5AC ͻ|;5A0vguy5AF;:5AF[)y5A> +<5AjF0v5A0 r3<5A$t5A3j>5AlYA6s5Aۘ=5ApAr5A?̐:5A08r5A[ 85A2QP1q5AYl75AXX/e5A0A*5A(X_bb5A_S+5A;#`5A)z*5APr+K^5AZ)5A [5Au(5A2z[5AVP%5Ag]5A%5AE [5Al:#5ADc[5Ax"5Af,nZ5AEe 5AVs\5Ad5Al+]5ACRR5AAKJ^5A} 5A)`5AT쟋5A)e5A85A6n*f5A\<5A>䅀f5Ah{)5A@b5AqٽO5At`5AZ%5A!-\5A.$5Aܺ)\5A) $`5AY1]5AV 5AoW[5Ac-5AW6Z5A1S5]5Az_WFW5Ak-5A V5Ai>?o5Ar"Q5A؆5AԳ~P5Ad5AȕN5An5A=CJ5A65AƗuEG5A5AaD5AY15A?ցC5AVW|@5ATq$e?5Ab=c5A4=5AI5A]I<5Auf5AL00;5AN{W5Aq:5AT45Ao95A5A4F]55AK{a"5A)15A1=.5At6/5A45AT 05A25AZ;25ABrF!5Ahbk35A2KV55A^q95Ap5A&n:5A)Ӈ5A6 n8>5A"ё!5Aܬs)@5A,-$5AT>5A֙p&5AJW>?5A/'5Aۂ>5A[))5AIk95A!n)5A=85Acخ *5A'65A&y+5A>45ADE,5AaqF:5Aŀ05AȥD<5AN&"35AL|>5Auj45AJG+A5A:85A "Yj@5A&Y:5A앴@5A^L:5AB5AZ95A&uC5Aa|75APB5Acw65A[oB5A&tΒ65AH@`C5A(75APD5Am:5Aa)E5Am>95AlF5A:95At^H5AҸP85AwJ5Aa%85A@fP5A&^95A| Q5Aȑ7<5AS5AOC=5AZݥR5A n@5A:8O5AJB5AR5A'IB5APVU5A;qC5A:EDU5A t8F5AEY\5A^P]G5AO\5AL*\M5Av[5A}:P5A@X9Y5AbWR5AR[5AR S5Af!^[5AT5A"[5AEX5AZY5A X5AcbLW5AeԸY5A@-(V5A f5Ab1c5ATzw=5AFf5AŪV?5Ax3g5Aww.=5AҶh5Az=5AN6h5At.?5A¨\g5A^$@5AKf5A\@}E5AKf5AoF5Av$9g5AV\XG5A!>~m5A@sB5Ac~\r5A=MY@5A#iw5A`u^A5A$^w5Ap@5A]*w5A(>5ALps5AB(<5A̜Fu5AܔM;5A£r5Alz85A Xqr5AM/65A=a5q5AF55Ao5Af p55A|{n5AD]T.45Ao5A25AH`n5AG05AxƂq5At9=/5A#9r5AF9-5A)Wq5A/-5A_r5AإۙR,5ArZs5AH^,5A"zr5Ap4n*5Ađn5A)5Ah`3n5Amjw&5AlgԹl5AI#5Ajl5Arۚ( 5Adŵl5AXz<5A&x5A PSo5Ak[5AV n5A(ԈW 5Am5A 5A@3|k5Ahh2 5At1Jch5A 5Auըd5Atii5AHa5A jX5A34`K_5A*r5A ? p^5A|C5AޑVh^5AVlO5Ab;?]5Aץ5AE\[5A{)-5AVYW X5AwȪ5AJP}Y5AO*5AJY5A r4A9')X5ApSL4A=VV5AmH4AR U5AZ\5A CV5A5Oq5AB{V5A2c 5A~V5Alsi 5AֻU5AK 5AbʽS5AP޼Q5A+S5A: 5AeW5A(g5AlQ$GqV5A4YC5A{W5A&r5AJU5A*=B5AʭV5A l2O!5AS5AJ&5AyA`uP5Abg/85Aюt7O5Aޥ\95AിO5Ay95A7xM5Ad\]N85A8HF@K5AT|f;5A~-K5A.<5A$8k|J5AX=5A&J5H5A~y=5A;nG5Ax=5A]2G5A@Ah?5A͎F5AE@5A釪E5AB;ZA5A61yD5A6ZA5A^@5AeaH@5A u=5AbB5An¢=5A"A5A=5A/?5AW3?5A<G4=5AW!3e@5A#:5AW5E>5Afdl;95Am>>5A6} 75Az!=5AN_45AF=5ASpB15A6<5A+n05A/;5A!kI05A;5A"/5Aj;5AP@-5A\5S[:5AQ,5A̮85Ase+5AͿ'.75A4=0)5AmZ75Axu&5Ae`85A>35AQN+;65Abr5AjjU55A4.5As?T15A}5A2eh15A`5AV^w.5ADLT5A(.5AO"5A=ZJ\-5A,y#5Ap,5A"5AU-5A5A2_+5A&#O5A WT*5AE!5A>C'5AJt$5A҇ڌj'5Ap'5Ac(%5A´'5A~s$5Ad'gU%5AL (5AK'!5Ae`(5AB5A%\(,5A7Z /5A .5AG5A$45A5AVbB55Aᬮ 5A +˜:5ANǨ5A ޭr%<5Al4AoĄ=5AF64A A5ALX 4AtW/3rD5A/A4ABF5AU4AکH5A '4AC K5A}.Q4A^K5AL&4ASTI5Awf$4A59I5Al4A٪!K5Ah4Au2+L5Abѿ4AYRTJ5A5`4A)xF5Ah4A48E5A%4A,Y=5A64A(,b]<5AĄS4A-.<5AVk4A\=<5AR4A\3;?5A4A>B5A74AB5A@-4A}ʁA5A4AV?5AVR.L4AG(&*?5A.04A_Y4O@5ASR4As=5A.4A9i=5A'4A9>5A I\4AuC5A44Av!UC5AE4A>HyoE5A Ղ4AAE5A×Ӹ4AIh@iD5A,4A[.@3C5ARY64A'0h@5A!4APb@5AӰٸ4A {A5A,߂d4AE DE@5A::Z4As;5A 4A95Al4A L75A,Ú4AD45A. :S4A{315AH#4Aܖl15A8վ4A$35Adج4A4435A45 74Aۜ25A|]{ާ4Aoc,5ACU4A0Aڲ)5A<4At5%5Ar4AAa4AdC !5AIY"4A5A "4A]5A.4A±A|5A`tM^4A 55A4Ap\b5A;E4Ag93!5A!4A&_"5A"4AK"5A4A}J 5A&wE4A- 5A4A25A^w4AO nl<5ARDž14AI@;5A%?4AmcrN5A$zF4AE5ATG~Bl4A>n135A?4A}w5A54Aw5Al )~4A065Azv;>4AF;ff5AbӸJ4A0}5A8)4A6u&5A6E4AR>5AG4AhZ5An4Avtp*Q5Axh) 4A u5A`>-4A_S5Az Ύ4AH5A 4A6%i5A.DA4AE5A K4Aon"5Ah4A>iz5A*T4A 5AT4A}Sߕ. 5Aؑpi4A]-߱ 5A4{4A|Un5AQ)4A535A@]4AWl5AzM4APDcG5A$ &4A/5Az#4A[/:5AV4A%W 5Ax&4Aes} 5A4ARm5A v[4AblBZ5ASԴ4Ah$5AΧBCP4AE C5A_Ӝ4A :LD4A&8*4A44A²4AD4A%4AEl4AVsez.4AT4A_54AIe4A>4Ajb)4Aە4AaP4AHr4APJ4AstB4AMwl4A%T4AϠ4Ai 4A@5A4AX5Apv4A.d_4AU 4A ?4A$Q4A(;y4A4A24At4AG9_4A4Ak4A1z4AW,j4AQ4Ax+1w4A~;4AA4A 4A4APY4A̖4AL_4AY+I4AZSb4A2% &H4Ah4AU4AQ(ҷ4A<|[4AެKp5Ay4Am;3)5A,],4A e-4A0g4Al74Aa&4Atq5[4AsS?4An_4A-D 4AP4A{dS4A4Ƥ4AT4A4AKP]4AP4Aj#4A߉4AUj4Axw(4Al34Aq4A)4AtZX4AeY4A5S4Ar44A 4A܁4A>4Aou4A:_A 4A͡4Aо 64A?s4AmE4A"p 4AZp]4AF64Ai:5A֎4A[]5A>>4Ap*5A:q4Aӡ5A Yu4A#{ 5A›d4AAF 5A0ł4AV4Ad'S4Ae4A-em4A_W4A8z4A&=4A'4A s4AODIJ4AzL4A5:4AzB34A<4AU4A[\4A^E 4APA4A=S)e4A];4A!y54Ay4Ae4A_4A~=e4Az 24A4A~`4A-\4A|4A&;/4AQA4AN4A1t4AR:4AY,4A$#4AN4A ݸ)4A"fB4A 4A?uLG4AƾN,4A Ο4AY&G4A4A"ʭ4A64A`.f4AOOX4A̴_4A”d4A$:4Aol4ASoV4A{i4A@~Շ4A|%4AU4A]4A϶u~4A̔~4AW]nE{4Ai"_4AWz4A+4A34A4A*ST14A˪jqP4AVg4Ad4ADg;4A8{n4Ap64A Wȼ4ADu4AR:(4Atyq4As+4AtLo4ApE 24A}Hm4AS|b ð4A<]Vf4AȔH4A [4A*2ث4AVGU4A=4AH QvU4AzD]թ4Azt٨O4AJ4At)iH4Aj%`4A JD4Av%0ǯ4A׮@4A=߯4AjA>4Av4AT;4A8 *4A*w64A/S#4A&34AJȯ4A5 l34An4Atv 34AYԷ4A:^;4AGv4A34@4Aﹲ4A,|5@4Atޫ4Ac"C4ACO4AD+3KK4APvܕ4Aw}R4A4AVk[4A >4APcb4AZb8{ڷ4Anuh4A{B4AnZ xk4AH}U4A\=Um4A/yS4AvAo4A`[4AFWp4A'}54A_x4AˏcT4Azy4A+:0s4Acw4Aj4A( دv4AJe-4Au4A1&}4AXٗt4AvW4Avsdq4Az?4APKr4A(G `R4A;t4A`j4A#?Hv4Av.'4A((ax4A7i4A~{4AYH4A2ʻ̧{4A84Al*cw4Af2F4Afw4A54ATz4Aci{ 4A\iz4Au*o4A(jZy4AqC4AUw4A.sT4AJ/u4A5o}]4Ar7f?t4Ax{4AjGQ:s4A\4A`fr4A&i]Mz4Ap\s4A9w4A\2*$t4AU`4A5x4A y4ATW^z4ALQ^4A?xg4A\\34Au(4A龙(5An4AU*5A r04AO5A,~4A G5AXTp{4A5AK&+x4ArȡX5AI`r4A<.1b 5AB&l4A{ft 5Aղj4Abcw 5A0Uh4AsR 5A==e4A`ғ< 5AWh4AiB)5AQk4AĨ5A|X6o4Ai[o5A|Mbt4A45ANw4A4vh5A`{4A}5An-~4AX 5Aj\4A-5A _4A<5ABF4A:H 5A_ 4A!5AXc~4As@'w5A< }4AJ 5AV,y4AHN6!5Aѡy4A!5ALy4A5Rsj#5Az4A֟fY%5A.´m~4AeQn&5AZv~4Av'5A'?*5|4Aٰ[(5A4h9y4AOm'5As4A&5AHo4AOj%5ABBýn4A?#5AD}q4A(N"K#5ABmn4A  5AdMj4A}5A.xZ4A 5A'q"Z4A>ᰮ"5AT,Z4AaN$5A4%Y4A#x%5AjT4AHZ&5AgR4A,(5AmQ4Ay>+5AXݪ@R4A9D.5An⭵P4A g15AcÏM4Aർh45AĐPHK4A8q55A(ZGAI4A%E\65A{gX4AN`:5A5A|C4A,/>5A}Tg4Aؿ>5A8H‚4A@5AbH4Ag/A5A2l4AB5AfW҂4AT:B5A(U4A6C5A .a%4A5PD5Aau|4A¾տF5A:vyEz4AHvI5A<-x4A48I5ALx)jy4A)+I5A΢#{4A֚eC5Ai?E4A/ZB5A4A3A5AҙK4AalA5A*4A!Z?5A[4A{7?5A04AeNtZoA5AZk:Q4A \B5A,`Im4AND5A7qݧ4A D5AJ4A@ l&F5A4S_4A=H5AR-4A"r.YI5A Ǐŭ4A鞏L5A~24AדM5A.r54A=(N5A l+4AF`O5Aj4AÕtO5A=ᚲ4A)`P5A:FȲ4AN}aT5Aԫ4A,U5A z 4A7U5A"64ATU5AP.4A2:V5A_4A%Y5A鑤ض4ARZ5AňS4A'Y5A(B4AobZ5AJ4A'X[5A0JU4AzZ5A2 h4Aps;Y5AƔY4A.Y5Adb[4A2d\5A͆k4Ai`_5AZ[ 4Ar7^5A|+64AxQ\5An 4At[5AV4A*Y5A$Q4A[CX5A!4A(jN,Y5AL.4A2Z5A Fb4Ak\5AkN4A3эC \5A^94A [O\5A4AoqZ5A `[4A Z5A.4A/\5A'-4AL^5Ae7=4AFwa5A~u4A[]b5A4AJ#e5ArC4AT7e5ATK4AGf5A4A#e.i5A> (4A0jk5A4AFm5A4apI4Aͽ>p5Aq4A 8s5A[14A*r5Ax4AmǪo5A؂A4AʇB/o5Ap4A.p5A^U4Az3r5AS044A57s5AU4Aot5Az4Azu5AX0½4A.w5An-f4Ar@;x5A 4At@kx5A>/rZ4AtKy5A􃔁 4A0z5A2ծ 4AC{5Au7 4Aj)Eg{5A4A|5A0z54A25AZYI4A.|~5A74A=r~5A`4A 5AM e4ANDs5Ax?w{4AC6D5A*64A2\5AMź4Af5Aʚ4AQB5A G߂Y4A͉v5ATd4APRk5Ah?ޕ5A[1bG5A 5Af>5A@x5Agϖ5APR5Av^5AP$v5Alش|5Al5AS'M5Ae5A 5APÅg5A^zR5A&[ 5A@5AN ;P 5AB/Uq5A; 5Aޚ@J5A\} 5A1435AD5Aѧ(5A 5Ayf5AȀ. 5A!d5AVf5AXO5A9 5ATNx5AZ5A˶5AҔ35AyuO\5ALo 4A375Aī65A\F5A j5A85Aڢ5Aeoޮ5Ano5AZ,-5Ay5AfB?5ApB5A65A֘V$5A.5ANx8 5AjS5AB# 5Alik5A~ Д5A֮a5AP5A$rR15APC5A$ES5AJ9 5Adm5AŘJ5Am Qd5ABp "5AR[5AV}?n&5A_gk5AbM&5A4V5AܘO>$5An5A0#5AeB5A&!5A'5Ap 5AU\v5A֔U5A l5A5A_y=(5Al5A ] 5A C!5Aٮ_5A !5A5A(_S}A"5Am1 }5A!5Ab5A U$]#5AO{5A,#G&5A::5AaiQ(5A\R5A`D2)5A`V>S 5Af*5Ax~w5Av$.5A' ;5A4d.5AI5AW*5ASf5Avp)5A5A}^*5A5A$ ,5AgBp5AiB;-5AᱸG5A] <.5Atg5A4j,5A'W5A0-5A'N5Ag,5AATR5A@1*5Ase5A̋F)5AŮO6AB'5AFW6A| %5Av 6A^ %5AE!䶟6ALVU'5A6Az+#)5A6z6Amu)5AG_ 6A )5A_7@" 6At_%5A[} [6AD"5AZ 6Aj$ 5AF16A Ue5A$9,6A?j5A緕v6A1R5A-l%6AXbH 5ABy*T6Ab)fe5A*u6Az5A9q!6AwI5A@#6A5AD%6A5A+6A4!5A&2.6An6[5Aiz.6AV^S5A}޺6.6A8v5A7QW16AƔd\5ApK%06Aݸ5A# 36A:9z5A x46AY5Aw|5v66A\k5A76A^5AU0%:6A V5A+f;6A=!5AqlS"<6AКy5A5J <6AlP 5A=4;6A 5AJ;~=6A,Пj^5A`q=6A:55A7T<6A@ 5Al՘=6AZ5A<6A5AW}>6A 5A1)IA?6A4Mp4A\I@6A+D4AlbA6A4AƾrKC6A4A|WE6Aب`4AG6A o4A'ŌH6An4A aH6AXr4A ¬MD6A8=c4AocKD6A0{4A}fF6A4AwyI6AFM84A*F(VL6Aґ4A9j2M6At4A1`FP6A0k4A78`xS6AEtk44A,.R6AW4A&YS6A4Ai&W6A\p4Aޒ*W6AH24A LX6Af>4AQ9Z6A:$4A*Z6Av@D4AWWY6AUU4A2V[6AV93 4AM*c]6A]X4A3la6AY54Ao?. c6Adf4Ad6Ak4A*Sd6Al74A ?f6A̵f4Ayg6A\o4A=j6A2T=4AZ@o6Ao4AG6o6A(4ALq6A~ G4AJ`"Kr6AA#4Apgs6AfmB?4Ar6APtw4A!9r6A` 4A s6A,8\4AZFu6Ag4Alw6ALFP4AIJPz6AHn4A(sϩ{6Aķ4A%}6A}A4Aφ!Q}6AvL)4Aq|6A{[4A}6A4A-Z<-+6A&g44A>4t6A*4A>S *6AL4Ak+UT6A6 4AhEn6Al4A!M^W6A!M4Aw 6A ׌4Ajl̆6AN,3Q4A-I6A#4A,`6Am4Ay6A8Q)4A5%K6Ap c4A%mّ6AdnK4A=ԅX6A9%4Aض_6A&3I4A z6A^m4A.6APR4A\e6ATEY*4Akoٗ6Ah?74AQ^_6A`*Sa4As6R6AZ44AW}$6A!׿4AUX6A#p4A~a6AQ14AoV6Ah4Aur΢6A==>4Asb6ApQʹ4A"b6As&A<4Aۥ6A04A"AQ6AFjgn4AZ} 6A4A=6A4AB"6Ax'4A:a6AT{4A9Kت6AR74A=6AVP4Ag!q6Al9TN4Aө6A zO4Af6A׽4A'6A|4A<6AP0Z4Ae46A*4A}Ed6AC}4Aȅ6AaN_4A;3j6A^_!.4Aj6Ab4AXN6AE4Az6Ad4ADQVL6Ab4AD5h6Aę4A3F(6AZV~4A`rQ6AD7Z4A 96A%4A|u߸6Aa4A߱@6A~D4ARQ6AP{;4A%jW6A,u<34A>6AhX4Ak6Ao)4A X¶6Ab4A[݃6A6kG4A ߿6ArJ{`4A`Q^6A/4A9H6A9|4Aƅ6A|14A5yD6AZ4AJ%6AH 4AD~6A8 z4A6A0X`14ApK46A$j*4A%I26Ar)+4A6 6AɽC4A M6Am\پ4A&Be6A굉U4A}B=+6Afy4A~}i6AVߺ4ANx6AS(4ACPI6A m'4A)Kn6AEȸ4AOE6A4AC4Ae86AXyI/4A}D6AvQ54A=Y 6AjӴ4A=J6}6A\4A4Q6AE4AkOä6AJI(4A߭6AzXEl4AL6A’O4Ad6A 4Af6A984A+RSK6A74A^x6AfK%4Axa6A/S4Ah366AǮɢ4A(6AHʡ4A}q/6A=ET(4A&6A}34A66A,Ջl4A6A&ie4A;R6AU 4Ap6A Z,4A 6Alp4A!ڠ6AP-5u4A 뮸6A\24A 6ApUf4AѨ 6Aʱ4Ah36AO0<4AtZ6A^pW4Ai6A4AUЁ6A[4A6A=ɑ4A6A4AR;6AEAl4A+$X6AH4Aчt6A.b34A46A>2ؼ|4AjF6AP̏4A%t6AP4A,{6A貥o4AhS6A*#4A6A5q4A'eJ6AČ4Alm6Ac܌4Ac[C6A4v4AuX6A4ALn|6A4AIQn6Aaރ4Ac*xb6Ajf4A y6A*r4AvgC6A4AA21416ANZ~4Aa6Ajz4A X6A?<&w4AeZ#6A2o!v4A柫6AIt4A 66A4ir4A"v6A"@r4A ے6Ap[q4AH Ro6A,o4A8 6An n4Ag6A 0n4A\i6Az m4A6A%Xj8k4A7V6An`zh4A Ho6A^Lf4AX6A9qK?e4A_d6A1c4AxG6Aذb4A\qK6A.-x`4A6A[]4A.6A<_-_4A= 6AMCJb4AthH6A`Eb4Ak6Au(]e4AȮ6Azgf4A-;̡6Ah4AY6ATvEm4A"6Aim4AUS%6A:n4A%8Z6A0Mpo4AQ6A=n4Aq^:|7AYm4A4@7A=mo4A6A?&q4A y6ADBr4AA+6AH {4A _O6A20p4AgV6A3RhY4A0R36Ak4AC"P6A|@4Aנp6AM04AX.ή6A}4A,6A a΋4AQ6A2׌q4ArT*6A$Cߌ4A%v6ARU4Apg6A6ӏ4AN6Av~4A6Af P4Aߕ6AbT`4A\026Aĉ"4Aȃ6A^̙4A$6A14A ΧX6A0a4AmrW6A\ڑ4ArۤU6ArvT4ABv36ADH,P4A譗6A 7{4AA'A;6A/4Alo6Ao7!4AN6Ac14A26AI4A+A=6A,#84A%u6A֨4APMo6A{O4A[M6An1,4AfL6A@ JS@4AW6AXsKB4A&]6A.4Aj6AjЧ4A {=6AǛP4AS)6A~?,O4A2 6AZlu4AFaU6AJ7禞4Ab]6Aq(4AjA6AzM44Aj26AVa4AƋ6A-4A,U6AF4Aqխ6Am4AU@6A?Q4Ab!6A(Ͷ4AfjL6Av⬺4Abgg6A4"m4Al6AM~4Av.A&6A84AhHj6ArA:4AC$6ATUwf4AA,6A&5͐4A)76A H>4AuH6A֥U4AgwV6AnU4Ag6A֛j4AJZ6A4A 6AHKe4A=zS6A 1354A=06An!Q4A|6A(M4AhD4AST<7ArѴ4A DǸ7A>?4A<7AC4A7ApMPS4Ap7AؿD-4Ah7A{"g4AD7A~ 4A=N7A«4A7AJ+}Y4Aǹd^ 7AvP&4AS>~7AZ34AjPɉ7A(G4A=ܷ7Aw4A%SR7AJ:84A(v7Ay^4A >Ҭ 7AajE4AI 7A^4AeID/7AzTa.4AR7AŐ4AD7A:4AW37A AdH4A<7Ap.04A37An4A7 {^7A{4AAtT7A4Azϥ17Ap ?-4A0Id7A]W4A|ln7Aމ4At7A44A7A224AV 67AZ:4AY7AnO4Aa^p7Aм4AC7AS4AȈ7A+Tp4Ap"c3=7AFw4AJ+I2P7A";4APqR"7Aރ4A*!($7A h4A^~%7A,4AF %7AN?N4A81%7A4AdWE%7A924AA>}%7A~ 4AO%7Azq` 4Ar'7A˜c:4AQFHl'7A<4A}z&7A&\&ٵ~4A^&7A}4A21((7AR {4A)ōF(7A y4AWu-(7Ahs4Aŵ |(7A<߳r4A)1"7AILv4A< "7A]u4AиF(7AJXq4AG6}(7A j4A2p~**7A,1d4A3 )7Avc4AFks(7A4E0c4AP+7AH_4AG+7AdXP]4A#G.7Aǐ^T4Ar17A6،3N4A=97A^G4A J/:7AguE4AyG1@7Aظ0 A4A@7A!Q=4A2ngB7Al 84A0ܩA7Atg24A4B7AXbx14AYNB7A<^y-4A#uBB7A47x.*4A$ C7A"nEj_&4AS C7Ah݆4AC7A²M4AaUF7At4A,F7A\4A9qE7AkE4A-rD7A>+Z4Ai E7A 4A4%y.M7A 4AI:P7An y4AtZ4vQ7A@54AvR7Aw4A9}S7AF@4A,X:M%T7AT^,-4AE5AsT7AvV~4A]7A e74AU2=7A*.. #4A.ښ=7Aǩ4Am y=7AZޞEn4ATE7A 4AT(E7AAҫ4A:`E7Ar4APrG7AϥS4A6;cjK7A~[04A[$ӯ&M7AzBį4A)T.N7A&n 4AZO7AW[4A[rmNS7AdB:4AR2S7A4AcYR7A21-4A1$P7A*J4ASYK_}P7Af6B4Aʨ:/Q7A*4AS7Ai4A $T7A~4AIhU7Ag4AI$V7AH 4A:D/W7A<>4A5&qX7Au>֡4A5z")X7A\h˞4A'xY7AT[j]4A"Y7A9Z4AwZ7Aȝ"4A/=Z7A+4AX7ABFͷ4A~Y7A~&14AWWY7AӳY4AG [7A|7154AF'Z7AB7k4AEG[7AZ 4Afz`G^7Atc+4A_7A|K4Aw&a7A)ϣM4A(b7A{4A{b7A4AAgc7AiL4A0&f7A] 4Aۅfh7AP4Afsd)&i7ANI4AΜ>j7A&sk84Ak7Ax~e4A@w(j7AEf4A<j7AXb4A&5on7Ap34A\їn7Ap#4Al7AL &4A-m7A(L4AS9Jo7AD14AyMp7AV4B4A83n7A~g4A5˱ij7A4A6V7j7A/C4Ayk7AfF!_4A![-l7APK4A;l7AX^4AϬ{n7AƀI4A|q7AHN4A_噁 s7AX4AtDs7AF4Auv7AJl4ATv7A8㙗4AM:tw7AŅ/?4AT> Ӏ7A4Aff7A>n $4APp7At;4A+O>7A=zj4AuTS7A 4Av.7A8[w4A 7A4A{Dغ+7A>4A^{7AZ-4AԢ(7A$4A~)ͅ7Aw4A>57AjO 4A'x7ARP,4Afn}7A54AHw{7A@74A/P{7Ahc4A|e|7A|le4Ah~7A~n4AiU7A5A[r1!}7Apq\5A!,*7A+2k5A Zd~7AM R 5Ak(g]7Ab]; 5Aص܊h7A춉v 5A2h7A./5A4㜄7A|Zd5AI1g7A5A<a_*5AD7AX h*5A+7A'4+5A%7AL݉+5AWz7A,5AxŢc7Az-5A7A%05AEo؇7Ag{'15AKs7A6I05A`PF7A.5AJ7Armm,5A贈8T7A > ,5At7AN,5A a7Aq.5A;7A0dK/5A{4T7AbTiӈ-5A7AԊ)5AM7AJu*5A*q7A|ҍX+5A_Dݕ7AD%q,5A7Ay)5A!V7AOXߚ)5A(bl7A<&5Añ7APw(&5AO=7A'Y$%5A8ZL7Ar>"5A8[7A^gC!5AYK7An 5AD7Alu5A@7AN07A475ABb7A0g5AZ4$ڪ7Ag5An47A2iU5A7AgEb5Apc7A?5A:B7APU!5A™ {ƣ7A7#5A+7A}!$5AV7A#(%5At>w^35AxSm7A255At7AWx445AB(^;7AQZ55AYk 7Az 65ANJ~ڦ7AbTپ85A뿛&7A/j85An=7A&P͸:5A+7A~95Aܬ7An<:5A1Z]7ArQ<5AЌԭ7A6m]S?5A 7A(B5AL9ɲ7A@C5A]07e7AҵB5A9Ye7A8q@5AuU7AԢ?5A7AEBA5A*/-7At d @5A7AbYˋ?5AȂz7AּxuT>5A?&U7A>&<5AB*7Av|I=5A(s7A6 A5AY 7AroA5A?7Al@@5A$kK7AK3OC5Aȿ7Agk D5Ay7A9SB5AC}7A$*R @5AB/v7AbU?5A,fL7A,>5Al_~7A)=5A94x7A/j=5A7A=ƒ>5Ak7Aƍ>5A5A 6H7A>5A-s7Aδ{V=5At7Atnq>5AD.7AX/A5Ap6" 7A`)RRA5A׹m7AT@5A\!7Aܞ@5AOL7A&MA5A9`e7AC"C5A7A6tG5Ahp17AuRH5Av7A' H5AF7A|֯C5Ab s7A@5ARH:7AqAA5AX7A)B5ArR7AKG5A I97AGΚeJ5Ay 7A@?L5A嬪7AnoV`M5ATJS7A"rN5AMH7AfP7O5Abк.7AwR|P5Au֬>"7A4`8Q5A#v<{7A[R5A)7AJ6T5A0; 7A+V5AX7Aj>X5Am&^7AоY5ADw ǹ7A ]5Aw7AI]5A#T7A򊩩]5A7A8[5AhJZ7ARGZ5Ab07A^1\5A7A$]5Aܐc7A^c_5AКI7Aib5ASs?7A`K~e5Aft7A@g5A |7AWj5Aȳ7Ah}j,Gl5Ahuϋ7A\o5AtT∷7AFLq5Aəo.07A=@r5AZӊqҵ7A4Ixu5A2*7AyTv5Ax7A5y5A@+7ArlEz5A,N7A;w?z5AD9"7AtF{5A7AI.5Aj 7A(<75Aņԯ7A"_o5AHC ۼ7A*Ť5Af3f7AԿL5A<]7Ard5Aί`97A0D'{5A>>E͵7A:&ނ5ALNF7A 5A37Af*s5AՐ97Ao5Ac$7Ahǣ5A}7AJB5AW 7A:[A5AS?|7AJ 5A}9 7AY3A5AE9]7AR=ڲ5A܆E7ACH5A:U? 7Az5AAY.77AiL5Aq8=7Ah"}5Aǽ7A5AR 7A^5Aۼ7An5A*mҺ7AvSX5A/&袵7A::ٿ5A?[S7AI5Aކ˵7A`8c5AjY7A,Y5AĮ7A95A7)>7AAJv5Apa7A2,05ANh7A~75A T7AJ5A#7A =5Ax_7A~DA5AD 7A4_4 5A7ANQ5A~퀭7A*ߪl!5A!7A2E!5AZQK7AJhX25Aذ7Ah5AG@,γ7A>BGT5A.s7A5AZ7A*"5A\Ⲳ7AFbmn5Ac9D7AH5V5A^7A?5AHŵ7A!5A67A<<'!5A Ʋ7AĖ= 5AMbF7ATI5Ap"7A+rA5Aٵ(&7AB&n5A7A: i5A U&:7AdxK5Aq7A3J5ADz7AįW'5A'\7A 5A꺆7A)05A 7An:5A)ec׺7AQ}5AS'7X7A $,*5AJ7AG 5AMx7Aq5A7A65AG7AZ)5A7A4e,5A &7ATݎ(5Adu\{y7A[On5A LbC7A-q5AZ487A8k:5AH 7A`{5A6iT7A<-5A'mL7A Fѵ+5AMG7A$s5Azo7Adxc5AW7A @@5A7Aψ5ATڄ`7AM5AG?B7ALiA;5A4S7A>iJ<5A}uW7A 95A-FE7Aj 5A1M7AzxL5AU7A <5A/77AJ5Ai\b7AEo+5AL_q7A- 5A nr#7AOl5Aoׅ7A$kJ5A Eb7AVQV<5AF_7A6R5Aۥy7AZ[5AKs87Ah%5A.Z7Ap5As47AI5A .G7AV5A }7AN`5AS7AN|45A5}7A8 m5Ar!57A =-5Az:l8AH %5A~˭M^8ADgC5A8AU_5AqgB8AH5A0[ 8A^5A\8 8AZ't5A8` E8A(~5A|.a8A ,5AMp 8ArG5A)?\l8A6o5A<<8A5Ao8A`- 5A@!T8A5Å8Aؔ5A]}]8ANY5Ac!v"8A@û5AYl&8A65Aͧ~&8A T5A~!8A5A3C!8A> 5AVci"8Abd95AJX#8AP??5AI+8A9 5A ѭ,8A>=gH5A/-8Ajta5Aw6u9+8A-5A{X+8AUH5Ak+8A\Gg 5A9.8A%5A(/8AOcY5A,8Axy#ع5AnN+8A|¸5A𝽕-8Av 955A18AE5A\LR48A dՍ5A+98A)q5AR;;8A8ټ5ANt>8ApS7~5A>D8AP E.5A*iC8A"Ij5A@C8A פ5Aa2mj@8A75C5Ang@8Af5A&TB8A*/QР5Ac C8ATb5A[?E8A{Neƚ5AB-F8AV5A͵@ E8A2Ô5Ad_N$?8A y5A7B8A@ō5A2#B8A. 85A!(C8Anx5Aꥒ=B8A.J5A^tB8Ak_N5A#PkA8A5A7=A8AށqY"5A@6C8Ad}5AF. E8Az9|5A4]F8AF>|5AY>P8A0v5A<6S8A#s5AEYU8A<'p5AfOMU8Af^j5Au+V8Ab!f5ARX8Az|^d5AM-X8A33c5A'qV8Ak\Gb5A%ݒ&V8A>Ӳ'`5A'|NT8A“_5AlRyU8A,I\5A$'U8AxG"Y5AiT8AZy-X5A AQ8A&[mV5A5cN8A3ЇU5A'+K8A-lLK8AJF5AdҢU8A+ =5AvV8AXQ:5A-" Y8Ad!95A(Њa8A)'75A3b8A&?65A`{c8A`V*(#85A­" d8A0vj95A a8A\:5A8L3T8AD5AV~Q8ALbG5Ak,@Q8A陪I5A BR8APڏJ5AS8A VzN5A:ۀS8A2S5AT8A4ܴ'T5AH@V8A\V5A1.RX8AB6vX5A:Y8A T[5AQp[8AZ\5AA?W]8A虼`5A6r2`8Apt{`5AF`8Aiha5AX_8AԷd5A54]8A5jcg5AY[8A|m5A)Ѓߗ[8AHN[0o5A9EZ8A>_Lv&r5AasC[8A4U{z:t5ANa sU8Ay5AgmRbHU8Aݏ{5A{VNJ8A~5AaK^XG8A`5A~]-F8A35A!:wF8A(ӢG5Az8K8ABF 5AFIwI8A)F5A_^I8A5AADzK8A']5A&uN8Aeo5AׂȰO8A 95A&4O8A|85AK8Al̲5AK8A4a5AsjߦL8AVٗё5ArQ8AdCa5AȢP8A=5AttO8ATǑ5AVaO8AIJ35AR8AZ5A{4O8AfuLϘ5A@ RO8ARج5A6\;\Q8A6\J5AzV8AFj5AR8A\:5A3Q8A&!5A&nP8A8&Vr5Aw;N8A5A! N8A#k5AcXRQ8A~@g5APP8A A5Az9@I8A(5Aqv!H8A|~5Ab I8AnjAs5AzR J8A{4ö5A5-k]Q8AE5A Q#1V8Av5A"YW8A*LEu5A$}X8AO5At!Z8Aޫ8A b5AŇɟ 8AW~Ύ5Ae# 8A.'5AÇ8Ax5AX38AeR,5A3ʔ8A75AS 8An5A<}8AC'5AV,8A t5AK 8Az5A!ݥ 8A!c5AS&8A975A_c8A;QU5Al_TR8AF5ART8AJS5Aե 8A"^5At8A"%u6Aw;p8A䍤>6A>b8A՛Ok6A'T8AxU6AGJ8A>6A>j78A6Aҫ8OB`6A`;(&8A~V+ 6A|p]&8AY_x!6AZ '8Ahsn"6AP~X)8Ao9"6AN,8Az6A$з0-8A6A`.8A5޺6ACf0:08A"ʆ6AŁ2v38Aj6e6A# 48A !6Aprg48A*F6AnB/8A>#؊6AjVf-8AV׺B!6A ]-8AJ#6A~z.8A*v$6AM(x-8AfvY%6Aə+8AЎ%6A8,9+8A8w{o&6A:),8A!(6Aڈ)l*8A&}L)6AXgJ&8AJ(5{P&6Az["8ADi~U&6A!8A>g.%6AE8A&Ot"6A=8A5p!6A8A`±!6A:iG8A(: #6A5^}J8AYQA"6AIg8AZ6A%K]8Ac6Aݪ 8A֖y6Ah v 8A&6A&0h,8A0O'6A8A(6AeV8Av5+6Af8Al6Av7A3 73"6A7AJp$k"6A~<>7A> Q#6AMV7A:ԓd(6AJ9 \7A~)6Ak&57A\A,6A䂌8A\06Ak8Aˀ<46ApF8A5V/66Amrn8Ao 96A[}8A"˵I<6A[;8A"=6A#Ȟ 8AIa.=6AH$ 8ALɸ>6A򌦐. 8ABCA6A"¤Y8AD6AD8AdF6At68AZ'G6A]8AݟL6A7#!8A)N6A1R8AvgN6A,MW 8AOP6AS~'8ASS6A5:8AxiT6A 58A)S6AF8AbS6Ao(zX)8AOmP6A p/8ApQ6A1zc&18AfP6A.d38ASpM6A(ł48Av7M6Ajf58Ax~M6Aܱ@@58AP6AZ&58A{R6A瓿G38AT6Aއ38Ay|W6AN!B}.8A./]X6A&.8A S_Y6Af0H.8AJq\6As*-8A\6Abu7+8A:v\6Aٌa(8AHCX]6AŨ$8AҨw]6A58A^a2y[6A8A݌[6A#8A*[6Ai8Ath\6AKN8ApE^6A;~8Aޠ`6AxGg8At6A:ifC8A H"#s6ABR`E8APpt6AԈ!M8Av^wts6AXbԍR8Ah>q6Ah V8A4=s2o6Az-W8A Nzl6AX8All6Ai^8A`EPk6A^Aˠd8AAg6A2i8Ake4f6Aդ$q8A @f6A|}g{r8Ar.g6A 7Yq8Aq@h6Adl8A j6A[zj8AR2Li6A^=i8AD!/Ri6As6AZNP8A[5)v6AƠcN8ABq_Fw6AI8A"fx6A PjG8AX+y6A+F8A2y6AUAD8A2! av6A8Affz6As\<8AA|6Ah6o:8Avg0}6AD-e(c88Aq{6A(ɕ68A- Yy6A^648AG|d@x6A;528Andjbx6A968A92~6A Gy98An.~6AAȜ88A6A#W*38AQ }6A&]Q28Ar5?A}6A=08AOjk}6AI$,8A>26AH*,8Airb6Al>-8A 06A׫ *38A|o 6A058ASJ 6A$68A28S<6Azlf68Ar`)>:6Ah"c%38AU6A 548Ah6Aw<8Ax#hq6AZL<8A|* 6AX<8A;6A.̓k?8Ab=t6A;G8A쒦%j6Aj;nH`K8A֓ʉ6AN|W$L8Aj˗h6A&J8AF6A}%G8A8ݑʎ6AKjG8Aj>O6AsbI8ATː6AxH4N8A6AsM8A|{p?6A튾M8A쯒6AO8AnoR6A3nP8A^w6AWiO8A _y6AZlQ8Aoe6A}C(qU8AǓ6AYH\8AR#6ALQ\8A86A4q.[8A'R_6ABEX8A&-6A8ZX8Aj4L6AX8A,5tHҘ6A+I|]^8A 6A*d8A976A1SHh8A~=^6A&#&k8Aɖ6A0Nl8AZ`h6AX 5l8A6Aq h8AIy6A#Jd8A#a6Ara8A|%:6A!dI_8A?Us6A׃\8A#EZB6Aȓ^ӡĝ6A۟$R8A*င6AMJ8ABm=66AAMYG8A6A&&D8A`g?6A@8Al ޘ6AJ=8AZ6A ct<8AH6Au:8A 6B6AO78Adɋ6AV,48A`* 6A48A K6A5.2J538A`=6A 8o08AȚ6Am|"+8A캝6A.L'8AQ6A1?&8AT76AL./&8A|6A#P'8At+.U6A$ >,8A6 ]i6A-8A406Auw28A4db6A,9*38AH0_Ò6A6A'pE8A@k66A28A@~6A?9+t8AK6Ax 8AV 6Aa8A6A,v=͙8AO^З6Ag_8A|26A=F8A:6A7A16A C 7APCn6A6-,c7Adf6Axe%7A6A؅7At6AY {7AvoꞲ6A,D7A:tڡ6A-C_7A 6Aw`T7ASȡ6ANخ7Aϙ 6A+7A 76Ak&7Apէ6Axbfo`7AF/@z6A:Dk7A}6Ai7AD6AE7APo~6A8AX߬6A?X8APO6Ai`8Aj6ADž7?8AB{h/6A1;`P8Ar`6Apc8A>76AX8ApS6Ax+S8APߝm6A8A(N6A>88A 6A*qX8A0y6AɇԀ7A6A7Aq*6A7Al 6AJ07ArLڰ6A[a7A6AF֐t7A6ADd07A 6ADg 7A36AU7A6AE]{7AO6A'Q7A$`@6A;6ߌ7AĀiKѴ6A { 7AX4>6A2aB7ADb{'6ASs7AB7Q6ARB7A P6A<7ABkJ6Ab.oY7AV)p6A[k7AZ6AB7A|l6A뫟87Ajp]{6AJ7A.6Aj 7Aܽ B6Ank7ANCE6A=a7A6A#7Abw6AN ^7Avᰡ6A\P7A4`<6Aϭ7A.6A7AU6Aw7AZ/n6Al_7AzTM6A UJ7AP6AP M7A*ג6Ag$7A0Hz6AmU7Ax6A*7Ax6A7A [6AS8AD]X6A(8Al#~6AAT8A̢,6AJ#Z 8A{a6ADN 8ATʇ6A{|,8AGTϯ6AyR8A8S,6A^a8A_d6Ay8AXB6AZ%L!8A(A6A$(#8A$󎻪6A~!8AT6A^8AB6A'58A4`DÛ6AqF8A3v6A~8A>>Գ6A}Rb8A6A8A 6AY8A^-6AɠV8A@f6Ax,}8A0"6Aao 8A>Or6A&Q +8AWye6AGǵR8Aꖷϻ6Aq9 8AY6A 8A?6A5W 8Ao#6A68A76A<"Z8A{6A3(SB78ASi6A-T 8A36A J8A: ]v6AUrS 8A (6AV!<8AE?^6Ahq8A6Aƀ8A1@!ž6A9 8AV>6A *8AOU6AŪ?.8A6AG/8A2*僫6A648A:j6A '58A6-6AY 018AV96AfHuZ-8A$>*ǯ6AX,8A@cT6Ag'-8A 6A:j,8A u6A*)8Al^'6A3(8A<䩥J6AOȣ$8A6A9˿$8AԚ6Ar 8Ar`O6AF)8A 6AZR]8A(6A`8AJZ6AjO8A*aE;@6A׫d8A~6A|8A6ANZ97Ars6A5d7ASt6A7A8 36Ag7A‘6AK[9;7A`L@6A3kI77Ae!6Ay.!X8A:6AV8A6Ai:D8A5T6Af d8ACe6Al(k7A޻.6ADD&7A6A.7A3u6AQ7AB,6A>7AP]\6A w\7AˊHZ6Ama/7A]6A-{7Aj{7AB< 7A.Qs7A[mp7AˬD7A'>O7A6i6BC6Ais7A\)6A(7AT6AK7AΛ6Anд 8A"q6A@{8AEݴ6ASTh78ARd6An668Aؠ26AM7A\6Af7AP7Afœ7A{D7AH$8AxGa6AI 8Ahw7Aa'ؼ 8A0;6Agy8AL?6AR/8ADK6A:8A 6AƦe8A6A1FI8Ang6A w8A.36AC{: 8AM06AŠs2;8AEK6A`=8A bzX6Avֈ@8A&H>6ACOM?8Aj6A&98A^ 6ArOE<8A 6A>}:8Atޜ6A88Alә6AT48A:6AN-28Ajy6A4sA],-8Azk6AϹ+8Aze6A<Ee'8Ap6AsV#8A(oxF6A*8ARP 6A u8A.6AW8A^!O6A-f8A>y6Ag Yj8ACN[6A{Vg8A.66A( 8A 6Aj8A?6A>xS 8AGP6A@3A'8AJhe7AAJ8A7AG8AV7A5s8A^[8/7A;ۢ\g8Az"7AUÒM8A|7Ad?8A&/yC7AVe 8A$@ H7Al 8AT7A/ 8Ă 7AmyR8A̽z| 7AMkqU8AW 7Al8A^q) 7A) 8AOD7As8A(7AR&l^8A戂7A٨<8A}7Ah 8A|*.7Aa*~( 8A%Z7AA< 8AtS7Av=J4 8A&Q7AE} 8AMpH7A&>8AB7A`8A8=7A!8A4}L7A`oO8AC1Q7Aה8A27AMF9~8ADm7AP -8A̎7A+?8A4J.7A&e8Akă7AW%<8Ax7A# 8AJ 7ACT48Al7Aj8A7AO68A7As2< 8A:t7AI(8A4ܵv7A[h7Av)7AC37AA+(7AUR7A1+)7A=CD7A&7A3 *8A ['7A96P"8Ax=*7A\# 8A(ڞ+7A/q.8A-7A2Y8AI-7AV*8A k$.7A88A4.7Awv 8AW 17A{!8A37A17n8A57A4JI8ANKKR67Ah?8A&~p97AKfk8AAg:7ACq8As[U:7A|R8A*87ANK|8Af;87A)c8A ]g":7A{ > 8A#\:7A 8Add<7AkJ 8Ae=7AF,&8ABOh<7AU;_8A4 t=7Ac,8Aǻ<7AP8AUN=7Aľ98A>7A.qE8An ;A7A̓8AJ]D7A:xƺ8AE_D7AY#~j8A@7Au8A@7ApYs#8A`ݥB7As $`18AD7AH 28A@2ԿD7Ad;38A1Z+C7A.28Ax1?7AP`[28AΨ<7A58AN97A%DIu<8AV~57AAR@8A0 l047AkM[JE8A747A+!pG8AJl27AZR>L8A{E17AO8A#s17A1qT8A.2*37A$(KW8A(J37A2Z8A>d.n27A甴}Y8AA057A̓yY8A<$z57AvoY8A&,m|77A=7W8Ai?H87A*.=S8A:n87A:L8A67A{-J8A77A_V(H8Axj+97A`3ND8AN/}97A[>8A0z6<7AG88AZ>7AM68AEiS@7Ae[߭68ANE7A248AhH7AaB.8ARmHI7A40+8A7AU:7AO"z>7A 7A)l/A7ADW7AcOrA7A(p7A,SxB7Ao( 7ASUE7A7AxN J7A87A@IK7AU:7AZׇ]L7ARn 7Aw/P7A~7AΡS7A;!7AvZZT7AppOi7Aap4QV7AarvQ7AJeW7AX7AwX7A-@7AY7A]7Au^7Az97A4z_7AG@7AOpωe7Ajx7Alܤi7Aep7AQl7Ax7A| l7AQk[7A~Kn7AAw 7AH<;p7Aj@7A xp7Am7Az*p7A,I7A T Zp7A n7A~s7A|V7A*a&%}u7Aݦ7Au7ABᴮ7Ak_#s7AK7Au}o7Av-7A*o7AqV@7A:fk7AB7Aj [ij7A 7AYdj7Ae}7A\ol7Ap.7AUo7A7Ao7ARlSU7AHtEs7A7AUma7A[.F̿7A z,,ڜ7Ag¡7AVb7AԱ 7Aփٌ7A<7~&7Az7AG)47A5@¡7A1 07Aү7A`7Af$87Adg7A:iz7A[7A#7Ai7A 7A9N7A⫰7A (l7A/7Ah;,7Aq8"7A1&7Ad7AQ7A\7A< W7A1zň7ALX7Aw7AbiV7Aڋ7AΒ0H7A?7A7A6î7A <7Aj]>7Ax07A 7AXֲ7A y7Ah7A7AK7AC7AId7A7Ahg7Atf7Ȁ87A W7A$7Aҋ7A{&7AzYV7A8F7A6-R7Air7Af37AV8dP7A&p:7A9ۖGd7Aq7A)LfV7A@˜7A>0kR7AU[7A\u7A:i&7A- 57AJҿY7A&7A >7A#A7à 7A}7AL|7AU7A޵7AbbmA7A7A A7A @[7Ag607AVJ7A.-7ARڹ7AE7AO7A-O7Al7At7AR7A97A& 7AU7A147A7Aݿ7AE7A 17AgޣW7AK7A3">7Adh7Ae4Xs7A`7A=7AVﰗ7AXT7A`؆]q7A;Ek{7A8A@7A!R8AT~7A65{8AE7A0 8A`Һ7A/F 8A7At_8AX|7A8Ah+7A6K;8AB7A5&}8AdX 7Aʎ7AB67A517A'7A;’7A2Q7A3K7A-mh+7Ap7A7A"0k+7Ahh7Aq7A&v7A87RK7AK 7A®7AHռa7A&,7A37AxDoM7AІym7A7A-7AN77Adĸ87ALv;7AГc7A͵1S7A(S7A#ވ7ABN7A7ALIε7Azq:7AH7Ag$7Al(7A/*Y7A@7AK0{7Anȝ}7AN;n7A^C7AДK7AV|7A6?7Av7AM17A4Y7A[C7A@7A4E>M7A%a7ASd7A 7Auբ7AT77A"7Av7A2 l7Ab7A‚7A`{7A 7A$pg7AD.7AL_7Aުa7A4p7A_d27A$i k7A3^7AL07A0wR7Ad Oݧ7AQ7A M"7Az? 7ABz7A .va7Av47ApbfJG7A+*7A7A$ 7AOb7AwH)7A=i7AАh$7A J7AK7AܛB7AӅ7ALXC7A7AjE7AXL7A&c7AFQ7Ab07ApZ7AYۃb7A~7AK7Ģ7AxCd 7A'D7A, L7Ap7A+r7A"lMF7A:7A x7AdC7A#7AႪu7Au57A:AL7AH:7Ap7A`ё7AyY7A]L7A27A,j 7A–7AW7AX5~67A!J7A >7A+7AֽU7Af7A$m!7As nj7A{7A$ C7Aܩ7ARX7AJ3EU7Ao7Aw/7Ane7ALDWd7A/7A,f7A$Gs<7A҉yq7A 7A`7A27A>刏7A3Gs 7ANل7AN*7A e(7A)2K7AI߻ 7A(J7A'!7A4Y7AX9ZM7AuA7A5\7A%{7AZ37AҪ@7ANDc07A8쩚7A37AW7A*btM7A*7AF7AgZ7A7A%~7A 7vD7Av8L7A ;ԛ|7AvU7ArC7A(*b/7AN7A[7A,z7A}z7Aj6'47A`7A/\T7A*#7A?.ť7A+/7AnMc7AwS7Ap7A#7AV87A|7Aag7A|iZ7A~yM7A߾7AhE7A5!7AjH7AmZ7A².7AJ7Aw7A w7A5O7An q7A2a'-8AݜU7AkYK8A"7AHUT8A[7Ah:S8Aw2@ 7A мd8A 7AʶL8AJl7A:7A^mJW7A;7AUy_7ArX7AuL7A G7A!Q7A1d7AE茫7An&,7A7Ah77AU 7A37A^7APcZ7A3ܾ7Ar7AR7A"nW8Af<7AN,Ľ8A=^h7A<8A3AV7A@M8A D7ApAP]8AUQ+'7AG8Ap7A G68Aw7Ad\ʢ8A`7A|Sj8Abu7Al'zX-8A7Apq88A(7ADu8A 67ANu=8A47Ap(8A,Zx7A\M 8Ac7A7p& 8A~S]7Am 8A)Uj7AYҗ 8A/$7Aа*r 8Ag7A 8Aద7A du8A%7ADI8Atc7AtN8AD;87A>$48A|7A8A6&7An@y8Ay57APJ$8A3%7Axl8A!;D_7A,' 8Avbq7AbM 8A67Af' 8A*ah7AǢK 8A s87AGj 8A*i!7AFH 8A.77A $K8A\I7A4]8Az7A8AP7AH8AO7A} 8AYT ̪7ACF"8A m7Ax48A"7A&'8AB&X7A<48ApF$7Als|P8A#7A\$G\8Afl7A\%8AN;v7At(z18AK[7A"'8AGV7A{8A7AX?8Ae)7Aޞ@8Aьs 7A_O8AU.(7A6S8AKÝ07At=8A*k}V7Az8A̼ P7A58AZ7AΒ+8A7A2U8Ay7AP8AMʇ7A,;MH8A`-7A&8AgW7A!8Ab7AY 8A5X>7Al#"8A \m7An#8A17Af~5#8A/7A<#>$8A7A%q3%8A}017Al^&8A_<>7A?M'8A 7A|(8A򆟲7ABG(8A~ZNb7AVfo)8A~7A%+8A rZ?7AM,8AƋ7AnX),8A*G7A[E(8A7AuX'8A(7A`'8A|7A2} (8AϷjw7ATN*8Aٳx7Arq*8Ad>7A?Mj9+8AL7Aȣ=t*8Ac 7A$G ,8Av7AQIj.8A0b57A\Ce-8AA"7Ax(-8A^7A9nI+8A#\@47At,8AW7A\>-8AL7ANr$%A/8A j7A<18AfN,7AK/8A3'7AF/8AM7Ahͮ28AkV^7ABl38A>7A{ Hi48Abf7A~;G/8AE67A|08AVsX7A #28A*3#7AĞp48A҈47Ahʚ78A)9{7A4B@88A$7A^R88Ad7AG6ib98AZ7Ah2ڛ98A _7A88A<"X7A& ,b<8AG,7Aw O<8A27AVՉ;8A{;T7Ai;8AED7A;̡;8A^07A<ۛ98A|pl7Axc88A)7A;8A`͎7A2<8AH27AȰ=8A&7AA8Ah7Az C8A!s7AgmjB8A.^7AzU?8Ao[7Ai%=8Asd7A >8Ac7Ah d?8A(ϥ7ArA8Aie7AB8AEa7A F8AB7AzcH8A7A2z I8A67k7A[J8AXs7ADI8A;\7A~zJ8A|27Aq:-L8Aj7AæM8A_7A&0՗M8Ag&7Ae_J8AU7AV/fH8AH/7A塝D8Ak[7AZsE8Aۃ*7An`KD8AA7AtJA8A'7AD%@8Ag 7AUgِ@8A9[7A  A8AD7A'NvVE8Ax)F7AOG8A.T7A~>}[sH8Aq+¼7A6nJ8AN7A+L8A at7AV3N8Axߝr7AT'oANO8Aj1U47A aP8AŰ`q7A2/LLQ8Aʲ.7A{Q8A#e]7A2wCS8AuuG7AӴiT8AkÞ7A"V8AhvX7A쿲IPV8A5'X7AXV8Ac)A7A`fW8A}k17AqX8A/?Y7AY8A7Aj?[8A BD7An<~b\8AV97Ax"gFS8A]th7A$`O8A̗{7A6N8A `o7AC O8AѺ7A$-P8AJ7ANS8A" !7Ad)S8A> 7AęV8A 7Abd]8A(97A;[`8A*c(7A[kNb8A~ 7Abc8Arj(7AAe8A[!. 7AzdDQi8A" 7Anj8A^V7A\k8AKO7A4nm8A 7A.4o8AE7A>o8Ab`!7A'r8At7A.ئHs8As0N7A:z ot8Aڶ57AAxu8Aì/7AfwS>yv8A7A8!Wt8A> 7A@;v8A|S7AΑ>v8AouVt7AHo+x8ANv7ARJ?7|8AI57A6`|8A07A\ʒy8Ak]@7A\Ѓy8AG7Az?3x8A#l*(7A"vy8A?VVX7Apـ q|8ASD7An)l~8A-l7A#8AxN7A(/T}8ADg7AVʴz8Aٽ7ALc5&{8Aﶄ~y7A(sUU}8AkЍc7AV1x8A-H k}7A?s8AKc7A@'#8AK%7A=wּ8A,7AB`P8AXy7A_8AP8,H/7AP8APVp7AGڢ8A%P)7A5q8A%V r7A*HncG8Am<7AB4q~8A?Q7A 3{8A/7Avx8A7AsO8AZ7A)=h8A~5'7A|fn8A27AJͫT8AB-7A/28Au7A|^8As57AԄk!8A#Yg7A8AZp3v7AZE8A0zG7Anw8Aн7Aq8AZr]7A *r8ATo7Ab-aY8Af7A(8AX 7A.~8A27AЬl8A>.E7AHk8A!|D7A|>8A# 7A 8AY7A M48ABHx7A@8A Xb7A,8A?7A=8Aj7A2/8A 57Abz78A~7A0Weݨ8A7r7Arڥ8A%7Aѥ8Aj7AZ|]8Am"47A֥8A/,7A23 8AkXe&7AVGg88A¡!d7A>3o8AlE7A:M( 48A]9Y7A2]'8A%/ 7A,e8A1Z7Al^8AZlMs7AȝQ8AX8[7A`Ӧ8Aw7A7B8AY.7Apƭ8Atc8A7AH8Aڦ7Af[ϳ8Aex7A,8A(7A0CsT8AN@i{N7A8A;7A\Oػ8A" 7ALB8AFmK 7A ;8A |~7A8A'57AL8A7AۓԺ8A.7ATP;8A4W,7A*8AZ7AhZ8A7A58A]}7AjڦT8A }7A,-%8A2md7A?8AzC7Aژ2'8A/K87A_(!Ӹ8A7A{8Aߔa7AF~h8A87AftB8Ax7Aff8A1 )7AE8AW7A牨8Ap7A?r78A77Afh$8A7Ao8AfCQ7ABB"8Agy7A-WL8A0g7A"r5d8ARU. 7AQ 8Aes7A2WFw8A>ց7Ap8A)7Ay)8AU7A8/C8A7AN8A&7AƤH}8A@7Ajs8Aw7AU>}8Aƹ$7Aל8A+>7AlGb8A~S~7Az8A!"P7A`ȣ(8A܃M7AK8A~G7Af",8AWɘ7A"Hӹ8A-H7AH8A¨7AаLY/8A9A7A&7q8AGS"7Al '8Ag7A՗4O8AY7AD~8Ab33l)7A&E(8ACɄk;7AQ8Ab8A8 \=8A!8A`n8AU?o8Asl8Arڝ8A2938Ai r, 8ATkӾ8AFp6 8Ai8AeN 8A:8A{A8Ah38A0 N8Aj|0̼8AZ#[8A)8A:?i8A b8A e=8A#8Aq8AnNtҼ8A٦7Ax88A)S7A!q8Aw47Ah8AN7A= 8Asd7A :j́8AJ7AϰP8AF67AX58A\7A\8X8AsbJ7A8AT7An8A6O7Al8Ar?$7ACF8A7A|v8Acg7At}8AJS7A>8A{7A8A7AP 8AJxđ7A\cC8A2ӹ7A0'c8A7A'T8Ah~p7A0oh8A&17A'8AΏ-V7Af,8Ai2%-7A8A}T7A`8Am7A "8Ax7Av8A[b7A 8AM[7A 8Ae7AXVQ8Ad7A#KK8Ad/7A>8A- U7A~zn8AS:I7Abc8AxY7A J t8AF7AH28AͧH7Aay8ANQ7A 8AEd37A.o8AHqģ7An㱐8A4v7A08AģH{7A/F8AAZ_`L7AN LO8AC< 7Aj8Ah27Ae#p8AF-7A8AUR7APv%ĕ8A#e7A*z58A7AJ;+8AF<7APn8AC&O7A*Uf18A7ArYc48A2ؠ7A(ٻ8Az7A m8A22f7Alh݉8An:77A>$8A]͊7An~i8AÓ7AP8AĬ7A)!8A,7AQ8Aa~7A:k8AS}7A$ᆝ8A|/7AH.8AtAL8>O8AT#7ADՂ8A7A$I8AU[7A{F8A7Al!Wڅ8AD7A"mJ8Ay7Al8A.7ABӁ8AgES7A,(8A7A]\8Aä"<7AP&,8APYR{7AT8A7Adk8ARcό|7AkD~8AKX7A.~8AvK7Ao~8AP?7A\k~8A5x37A~8A|gx7A8ɳ~8A7AXsAR}8A=wՖ7A={8A.7AY;z8AfH7A~upx8AM7AP.w8A+=7A<Zzw8A(-7A8w8A= p7AJ60w8AA97AJxx8AԞI7ADf y8Ab8AD[$n{8Ai\8AD@)|8A@8Atw}8AyRS8A.~8A"k/8AV8AiT 8Al& 8AdNO8AB8AN8A5f8AĖH8Arv8An8AnF8Akה8AL^8AHh8A ^Մ8Aj8AH@8A|ǫj8AGC)L8A87 e8A\2 8A07d8AC 8AS8Ed8An6# 8A>jc8AAQ 8A}c8A.OL 8ASb8AC۫8Anz`b8AMz8A6O"rBb8Aڸc8AZMF8A_i8AdXF8Aҳ8AD8A8p88ApC8A9 pv8A`tC8Ac8AC8AP%X7A心^C8AZ̧7A"C8A@@7A*j XB8AWE;7A'B8Aw7AجB8Ad(7A }B8A17A*k B8A7AsB8A\7AÑB8Ad,(7A֡"B8A/]7A12A8A3Q7APB@8A3XQ7AA6@8A8Ad7A>8Au5̄7Ajg=8A@7A$<8AQ7AF $T:<8A;wa7A9ʍ;8Am:V7A@:8Až7A&a<:8AA &7Aβ+:8A5Mx7AT88Az@7A>L78A 7A(78Axd7AfZ*68Aa67A*#^58A0c7Ad妥48A7AU38AZ,8A> k28A:-m8AҎ18Ai8A5x08A|g8A:.8A\x@8Asx-8A8Ap7,8A -b8AJN*+8A>Zq$8Ai5+8A> 8A_*8A5^8AjxT)8AI 8An#(8AK]Z 8Avap&8A9q 8AW%8ANwV8A%ciJ$8AU~8AjR#8A08A@cv$8AK8ABg%8Ap 8A#%8Axd8AqY&8A!8A:oHE'8A,SN8Ar O'8AF 8Ap)8At}Ͱ8AdvO*8AČ~8As<8,8AClP8ATrh5-8A)#8A.j-8A%8A9-8A!8AZB.8A 8A<{nS.8A^ 8Ar.8AF;o 8A1-8ACH!8AbU-,8A0 t"8AE޲x+8A6Q"8Ai5*8Az #8A(8A9ob#8A 3&8A6#8AY&8A#%8Axw-Q&8A3d'8Af:&8Aǘels'8A@w='8A^?(8A"{(8AtK*8AΪ)8A*8ACR*8Al+8A:D}+8A,$&mm,8Aj*-8A/,8A?-8A{.8A8 -8A1/8AtDu.8AsR18A~G.8AX38As.8A\38AGYt.8A"48AA,8Aߒ58Aʱ, +8A3"68AԲ)8Ad968A^4O)8A068Ar]'8Ah68A k%8AՔ68AEr_S%8A8/Yq88Ad0v{$8AJ88ALV/%8A 98A6f&8AZ:8Awr(8Ax@;8A/*8Ane<8A*8A1/'=8A65ۊ*8As>8A ;)8A1=>8A4\)8AWSb>8A@V'8A]Y?8A pF%8A,8"?8A~Q$8A O?8A^\#8A?i?8Ah8Aک ?8A"*.K8A#R>8A\8Aum>8A8ASo>8A*\8A>8AT8AhY?8A=;8AiÏ?8A@K8A-f?8Ax 8A2?8A9Uw 8A8>>8Av58AX^/o>8A8AJig=8Ajz8Aw7_;8AD8AW98A4l9q8An .P98A.|8ADW78A"Lv68Aߍ58A P8AL48Al6}8A ^M28APF 8Ap ,18AA9h8Aվ08A^+8A&R/8Ar9 8A# /8A9K 8A]I/8A# 8A̳m/8Ab# 8A6:/8A8A.=08A&L!8A&^V08Ahb# !8AuG J28A98A8@T=48A|[h8A8j168A'P8A68AZ 8A-֨78Aҹ8A: v88A8A/ׂ688AYu8Ad68AGX8A58AJÃ;8A47A"38A7Aإ58A8j%7Acѩ68A&7AdkT78A"57A88AcZ7A>88A7Aw̸a88ARmF7At|ͩ78A2B7As̈́78AF-7A?b68A[w7A%58A,x7A=E68AnHf7Ar68Az7A@/78AKdY7AW,88Ah7A :98A6WA7A :8A4!7A#Fo<8AzB7AH >8A^7Apӂ?8AF$7A͌@8A07AZґA8A A`7AսA8AC7AtBB8A@FQ7A#OB8A2L7AE^B8A̘7AlrC8AD7AǒC8A+=7AC8AP 7Ac_C8AEI7A C8AX47AsC8ABR37A?.^D8A^7r7AK֦E8A37Ae(OF8A.ѽ7A{YH8AB>m7A%&J8A7A=yOJ8Aa7A*%K8A]#j7A?IM8A*U7AQmO8AA7A#!Q8A[u7AQ8AXUj7AP8A}l7AP8AB/o7AoP8A [7A4P8A6}7AFwO8Aw7A  bO8A>k17AρKN8ADTS7A[N8A r7AQb(N8A79H|7AI( pM8AB(7ArL8A0J ڻ7A L8A/7AJK8Ax77ARJ8A$a7AlJ8A4`7A.J8Am7A-J8AΓp7A407#I8A.& 7An2G8AJɊǫ7AaF8A>I7A[jE8APF|7AC8AW7ALs6C8A27AsB8AN9:7ARA8A♊/7A{A8A꣹7A ٧+A8A:Wi7AӫA8AZG7A +B8A7A*B8A*7AV,C8Afܢ7A2izDC8A`7A=oKQD8AWQ7AL}E8A&]Wڟ7A F8A .d7Ai2H8AnV7AGL~I8A$w7A>CJ8A.q7AuL8Aڃ܉7A~\DL8A:ES7A&DůM8A%2r7A!@XO8A.,j7A<Q8AXb7A8[R8AxiZ[7A蘡kMT8AnXVW7A KT8AP7Am8fS8A(<,l7AQ,S8A^W7A7mR8A.<-XI7AGӮP8AvU+7Ώ7Asx9N8An)S7AkfL8A'׎7AZUK8AL%\7A jI8A#7A7G8A!f7Abv:$G8A<a7AԔG8AT47A#L- H8A*+7A`qH8AFͧ07AɳH8A4}"Ç7AiH8Aπ݅7AN6jI8A"u7AbI8AROR7ACӪJ8A f7AGYK8AJ?7AIM8A y~7AO8AMѴ 7Aֵ~Q8AL7A\ mpS8A䉐*#7A\VSS8A1w87A*6U8A~7AY?V8AL.7AڹX8A\mɂ7Av{Z8An@ 7AMVH[8Aܬ7AeEj[8AR2̼7A)]8A(7Aqi^8AB5E7AB_8Ad7A+_8A.؆7Am3ja8A mk7A0cS c8AbSP7Atsd8A67A s6e8Atoу7AzM"v7Ax[}~8A.Gv7A  ǀ8AP+ u7A(i>8Au7A}D8AVCt7AC8As%c;s7AKx;8AJq7A]7A^՝8AT7Ac38A~7Ax<8A~7AW~à8AL=#7AL=n^8AC7A^8AAfH7Ap`8A(G7A[hb8AfF7A!c8AcFև7AՕee8ALZL‰7Abh8A ɉ7A[_98A7A 8ApaV7A9zڣ8A7A8Afh=7A¡8Alb7A9!8Ah7Af78A, 7A@Pѧ8A6f+7AXk8AtJ7A̜{Q8A,kv[7Ap"h8Aҕ7A4<8A`b7A1}T8A͖7A KJ8A37AE8AP7A~8A&b?7AE8A"Fz7A.]28AN,7A:9T8A>ɡ7A"y8At7A8AIVß7A}<8ArɜԠ7A4lI8AZ=ܠ7AF)­8A2IH7A#>8A;ؖ7A;<[8A7A8Aҥ7A*4Wݮ8A.q7A'8A,I`7A\1B58A'`7AT̪8Ap7AP{t8AXr[M7A2׳8A\U7Ao߮G8A7AN;8AxL7Am/8AV:F7A ܬ#8A7A2/8AԖw7A+18Ao} 7A&'8Ag9?7AnW8ADuA7A7x8A7Ag:8A0 ѩ7A-8A47Aw8ALb7A?8A7AR8A7A@q8AS7A51!" 8AĞK>7Aܻ8A`{-+7A9)8Al46i7Aڍ8AdN:"7AE8A7A38A# 7A^U'8A(k7A-G'8A.*w7AJd8A~Rv7A9f8A~={7Ar/68A\ʢ7A:Mq8A`٠7Ae48AJ/7A8A5| 7A,8A쿍7Aq(8Aq17A&[8AhvE(7AZMn)8A\ X7AT+}18ArBl7AWD{8A_)Ε7A~-8A+ŕ7AD<8A㜿7AgK8AvFW7A8Av J7Ah8APYғ7ABRI8A2l7AE8AJ[.7A8A37Aէ_8A6-7A2U 8AϿ7A8Ax32Q7AE"Za8A̋`7A`ź8AP&#=7AAޓHʺ8Aq3-7AAҺ8APC97AF׺8ABߑH7A `8A רI7A͇C8Ad/ma7At˽׹8A@2y7A᳭k8A~7A8A^1|7AT#8AWցz7A,KMp8Ax$Naz7AǴJ(8A|Gx7A1q8A v7AiQ8A,7Qv7AP0B8A`"Wv7A8Azbv7A\ ź8ADSmw7A8A @w7A"ێ8Atmx7A u58A4H nx7A-q8AKIx7AM8AN>K˰w7A"+r8A8RSw7A*X8Av7Alʄ8A"6u7AW8Aϐs7AjN8A0Ҿ*r7Ay >8A Vp7AeU8AB}p7A}8A嗬ip7AdDR8Avݴo7AȄ"8A=h@n7A4Db8Aف n7A "8Awm7A~FQع8Ak7A 8AkDbj7Aċ8A6gi7AĻ8A~Tg7AR8Af7Ah8Az;f7AsR8AfGd7AE"8AToRSb7Ax8A>S_`7Ap]8A< `7A/d8AqcK_7AMֿ8And^7A28Axi]7A'̥8ArC]7AiR8APM9q]7A8؂8A}']7Aį^q8Ahs\7A]h8A`v\7A&_8AxaT\7AVp8Ahߑ\7A8AtZcZ7A?8A@|Z7AӺ:_8A>8YX7AhaR8A ]X7AVJ8AW7A78A2 PU7AoM88A@q,,U7AXZ8A|_8S7AŮ#а8ArDQ7A8AB/PO7Am@8AR N7Ac8AlM7AÆ8AbZ9pL7AEg098Ak L7Ak8A,6J7AKSV8AI7A3o8A"YH7ABߖ`8A;G7A/M8A}͒F7A"ȵ8A/Q_[E7AB [8A )Q#D7AH 8A"QB7AO5j8AA7Ay`8A}@7A\ ~8AD @7AD8A\g&m?7AC8AŅr>7Av+g8Aw=7Ak8A2h%p<7A 8A^rE}<7AƕU8A0ե;7Aa[8AT:7AI<h8ANa4iO:7A E8A4^87A3r;8AN67A^n8A67A4.38AL 57A8A~|47An8ADD27Abel8A 417A<Ǥ8A17AuvXQ8A23/7Af3a8A;^-7Az8A+7Aʈ W8Aboq)7A>W8ARwf'7A1ީ-8A<~ &7A\8A3$7A3O 8Aّ^"7A8APJ 7A8A,ФM 7A b8A 7AoE.48AXR!7AQ bI8Am!7Aq8Aw!7A}8ARӈN!7Aڳ8A"> 7A8Al/ 7Af8ADZI7AKu8A(:D7AxG{8A~ΝK7AAۼM8A7A$T[8Av۷07AKZ8AJmI7AYa;8A$b7AښJh8A 7z7An8AV7AKQ*8AH=R7A 88A8z7A)^8Ark7A8A&{\ 7Azdy8AH 7A޸u8AH 7A, 8A 7Al,H8A&'@ 7A"Y8A2a7A`6s8A7Aέj8A7AF8AJf[+7A O"8Al h87Awnz8AhV"7A n8A {7AmuL 8Av=uc6A}8AiEC6A8AyL6ACHl+8Ar57AʵF68A7A-o?9A \-7A(9A0XH7A 9A\LJ77Ai(9AC7Aa:9AVN7AS|Mp9Aɻ7AU_U 9Aix\7A?r: 9A.37AQ'` 9A47A5k粼 9AM.;7A?Tt69AAN7Aoq59A54^7AJ)9Atq7A6&N9A^N7AzF?9AG7A-7A.9AǮs7A#39Axu7A&99AA.7AڲQw>9A0t7A+Q49A_6AanO9AXfx6AKC9A(S떷7A9A`7AlN9A"oG7A &x!9AZ[7AoB#9AwH7AFxZ#9AZ7Ana$9Alݜ7AKd&9A7Aw1'9AVI%k7AT)9AZ>6A˩+9A&6AR<+9An^6AO(H,9Atcp6A,?.9AL[C6A/9A:hT6AOn19A L6A<39AIEf6A)39ADPɽ6AP4`49AF\Z6Awc69Anl6AFÐ689Ae׈6A79AXVu6AkD%79AfE"6AEYM9A1dq6A|d59A$kA{6A6(o9A@L6AiQ=9A}16A2­L 9AP26A2; 9A0Ӫ6A'\?~ 9AJV#6A 9A76AT*9A%~:6Am9AQ6A \XF9AT}M6A6A,4R9A ]U6A _9A|z6A`m9Ac6AV+$9A˖6AFi9A4C6A'UI8AKI6A8An46ArjLT8AX(˱6AJ8Ac2f6AM)n8A}6A=v8Aϭ6Ag8A@Lm6AT*Y8A96AeI 8Az6ALA&8ARRo6AU8A-b6A%R p18Ar u6A 8Aw6A.u8A(4uP6A,8AV> 6Ax_8Aٖ6Aj8A(T6AL8A|J|6AQK8A&B6Ad8A6Aa_8Axe6Adn8AL6AU8AH6AOL,8AfxBR6ADň8AH)96A8AE};6A3d?f8A^6A8A2@6ACvC8Ai"?:6Ao8Av _6AJ 8A56AOJ_8AԷ-B6Aȯ?W8AT6A [8A=6AB8AbZ:6A\b8AGp6A^E18A~V)6A|8A0K6AE8A^>]>6AQ08A"=6A^[A8AT6A=?8AT16Ad8A\ %6AkxԴ8Ab "A6Ah8Av s6Ac98Apc76Am8A> 4~6A J 8A삷'6Aa8A(B6Au8Ad 6A$K8A_+6A=ܫ8Aܛ86A~RDS8AgcbT6Ag8A.2o6Al!q8A<6A{8A}6Amٴ8A6eט6A78A,16A|k(8A]6AY-8A 6ADG>8Ag1 6A8AnVa6AΜ4.8A6AX8Ap6A7-lK8AF`6A I%8At2D-6AȦ8Aοdս6AGKE8A<##?6A#8A :6Ac8A83y=36ALL98Alo,6A8AHȹ6At+8A8Ad>a6A,!8AfПb6A+98A46AeS]8A+6A2,8AV6At8A҃3ߡ6A38Axjڠ6A>"8AV=Jg6AuU08AulQ6A7bk8A``6Azd8A-L|p6A4R8A^Y6A0Ue8An56A| 8AKN6AtQ)8ARٜ6AmC68A"6A_ D*8A^ۢO6Az8A)6A^?8Ac66AX6:8A,6䐛6A&18A6AV8A:46Aj#8AJ~Ξ6AҲ8ANI0t6AG&CX8A8S6A#R78A:8v6A#'8A6Aq8AWǙ6Aô8ABg'n6AC8A*6A4L8A8 Q6AJ8AZ6Aj}8A yA6A)78Ar6l'6AQq8ALn6A`k8A:õ6Ae8An6A<8A<íU26Aƒl8Atζ͢6A):/J8AfV6AK8A4Π6A88AN6A@{{8A˧6A'aK8AyZ6Asߓ8AciE6AIK8A,&K 6AO8A,լ6AuP8A06A:8Ap߮6AG8Al4h,6AZ 8A2 :І6A3P(̶8AA?86Au8AZ6ABZr8Ank@6AkRH 8APб6A.56M`8ASŲ6ALǬ8Aymղ6Ax 8A|o<6AHT8A\q6A־Zh8As 6A38AQg(6A^ 45F8A y6A8AdCDw6AQ~\8A&zo6AY*8A&-6A9Ac6A9AB` 6A:) \j9AHr6Aa/ 9A*%da6A]QC9AW 6Aso9AI6AKH19A%<6ALc 9A6A`an= 9AGC6A7 h 9Ays6A T89Aޫ#6A89At6A^9Aچ.6A(r9A :j6AC$9AآG:6A|Jh9Aa)6A,0K\9A֗yEM6A9A6Aͫ9A^cX56AvbY^9A2Ml6AT99Atr|6A 9Ae6Atf9A6N6A4%G 9APe76Aw%jw 9AoUm6Ay,!9A6(خ6AA>!9Ab6A>!9Ap q6Acv"9A Hj6A#9Aoc`6AM=#9A߫86A)#9A„6A $9A[!Է6AA &9A sk]6AG^&9A'}6A+e'9Aq6A5K)9A־W#!6AN0+9ALĂ06AS-9Aɭ=6Am4h-9At׎%6Aío.9Ad6A{/9A蚂b6A 09AʥN6ATxR19A§b6Ao]adq29A'{6Ay׫49AR6ASM49AN$6Az>ј39A6A;U!39Av+6A jK29Av;!6A $om39Al6AT59APQ|6At.69A\G6AnH69A混6A 89A|p[6A):9A)6A2k<9AYǔ6AzD;U>9Ar16A 8%>9A`l6AC>9Aw6Au0?9A,K6AOx?9A.w 6A> k9A>96AL8m9AL6AWfo9A&@6An'sq9Azn$6AMq9A nC6Ar9A",6An_8s9Aa6A8džs9Av26AusCt9Azn 6Au9AjhR6A qv9A\K6AHw9AR6AdGy9A J6A@z9AX6As(z9A82Z٣6Alx |9A4}6A ̏}9AUK6A S\~9A6AV+9A&Ъ@6Ay9AV/6Avj9AF?6AxVԂ9AjF6A8^]<9Ap26A9A@-6A[؅9A(3ֱ6A9A;DB6A0B9A*PR&6A;~m9A%6AE옉9Ah6AOvZĊ9ALWnF6A?9A6Aw9A6Aa9Aң6AW׌9AR֨6AL9ABqJǪ6AN9A0ɼ6A;n9AYj­6A 9AN ܅6A9AA,6Avڊ9A+/ұ6A159A,ײ6AW>9AסYp6Aj,ы9A\6A9A"ޥ6AU"/9A2=M׷6A.k܍9A(56A6Ά~9AE^!6AMn\,9A U 6A9AL=P6AS`m9AzF6A-9A 6Ae;Q9A،\6A9ot9AzV6Al9A06AvɌ9A״x6Al9A3 6Af$9AY<6A &9AbP6A]9A6A9AJuj6A9AF&6Adr9Al lw6Agʔ89AT66AwZ;\9Am=6A-% 9AT&6A(9A$w׮6AHٔQ9A d6AӪ9Ax6Aت9AޖfП6A_"9A6Ax5~9A>=6Ae 9Alz6A9A806AN9AY6Ak9A̡6A'x9AJK~6A@9A6Ac89A^TY26Am2w9AxD6A,9AV6A`<9bg9Ah> 6AI 29AZ6A](29Ah;6Aɯ9A -|6A_9A2n6A#U7j`9AđB_6A9a?79A$6Ac&9A6Aw9ATϑs6A[Duo9A_6AoX*T9Ajw|-c6A%LT:9A{z6A99Ap8)R6A1Q9A̵6AR`J9A,T_ 6AGXf9A6AO}9A/%6A^蚀9A6A6Ax!Q9AHg֖6AMx9A46A+Jl9A}N6AwF`9Ad6Aɬ69A]6AK(9AC(]6A]19A>76A 9ACz{6A\`o19AnEc6AUH9Aܵ6AX(9A>)Ou6A9N9AG6A?ڑ,9A6A 9Agk6ALa9A`L/6A7619A62EN6A9AA]6A8"9A`96A~9Aj>@:6A$9Azpٶ6AtA9A<6A.p9ABY \6Aߢ|/9A(&6AT*9A16Aٱ9AS6AM9Ad(6A-B_~9A.6Aǒ7d9AZ/6AV,J9A(6Ao!(19A=hF6A^k9A#6A4Ӕ9A6A'i@N9Ab@u6ABC9Ag6A89A F 6Ak9ANpu6Ao;9A[E6A|V9Au6A/R9Ad p6A9Aƛ/\6AG09AL6AO9A<6AK)qx9AzP-6A :9Ac6A-9A:&m6A9A`oMo6Afz19AREo6A>M9AP=ox6Ah.9AHG6o66A! 9ARd~6A]9A:.o6A퟇+9An6AL(9AAE :A$+:6AL/ :ARӹD6AA%9A|6An:Athc6Ajf]:AtB6AaR`:AlVtN6Ain:AZ@6Asm9AlC@6AOh!9A66A9Ao-6A[Q͈9A$36A`<9AP6A39AH2H6A;9AIG6Ao9Ag6AW^9A^[l6AS9AĦ1M6AN9Au76A9An9EA6A&;Jp9A%6Al6=9At86A>9A2E]Y6A0@X9A {6A9A~9A-6A9T9Am6AdD #9AV6A| 9A6A#9A6Aul9A36A'ݛ9A#6AӍ9AP6A 9A1}6A9A6A]9AJ36A_9Ag=86AKb9A\D6Afڠ9AE6Ae69AnZQ6AX9AI w6AM{9A~)6AsY"9AHW 6AYi9Af*6AAA@9ABpʟ6AZ9Av6AnxF9AK^׺6A.z;9Aa̪6AĚ9A 6AvC9Aؤ6A09A6A5aZuU9A6A,9AVKԻ6A\}9AF)h6A!9Afs6AH@)9A Yɺ6A_h9AL/1F~6AN=zMm9Ai$η6AFTq9A46AVt9Ah!96Az~9AcLi6Am9Aاn6A|E9Az>(6AV9Y9AtVٱ6AD}9Ađ o6Aӹa9A6AB*,9APL46Ax39A b6A/l9Aƪ36Aqc9AvN6A 9Z9AE)6A9A:06Aqg9Aċ^E6Azp9AԚ6A"9A@͍6Aq|9Ahu+Ҩ6A٬v9A\߽6ATJz9AZ@06AG9A[+6AN9A] 6AYM9APn(6Ax 9A$#6AcE;9AR=6A!bW9Ah¨6A2c~(r9A_H6AOy19A^86Anjp9An6AN ̨Զ9AS~֤6A'9At7f!6A9A6a>6A@}pXϵ9AD6AdG9Apֆ*6Ao79Anj76A;']9A FmE6AQ9A 96A;ʣ[9A${Ԛ6A }9APP6AJ 4z9A6ABۈn9AX;6A,}s9A?ɘ6Ax99A`:o6AQ9Ap6Al9^9Atj^6A@b9AP&6A3j9A~ח6Aow9AD 6A񉃃t9Aʮ\6AO9A6A/>9A2X6A),ҡ9A46A/ݛ>G9AJt]H6A@9A6Y6AoP V9Ad/6AuCB9A,!6AL9Aȩ6A39A126AxSd9A"$+6A*9A^D=6ANW=9A=6AiI9A2J6A?CY9AW6A%̷i9Awbc6Ay9ANo6A`9A:!{h6A9e ܠ9AQm6AB9ez9A6A8eV9AT6Au7 q9A!6A$9A臃 6A6VD9A$t>~6A9Ap`e|6AI;w9AL9z6A"{O9ADPUy6AV9AѼx6Aӻ9Aʡ5v6Agͮ9Az-5u6A0nm9A2A(ss6AM99A\[q6A|*B9Aq6A8,ӣ9AУmyo6AtR.d9Az m6A/9A)sl6A(Gl9ATj6AlE9AtJgj6A 9A~i6AOZ9A"h6AqFM)9A`,h6A0ˬ9A|bg6Aџ9AdWg6A(B«9A*m͡e6Ah4Ъ9APuc6Aٲt9A9bGc6A⟰29A Pb6Aod d9AY`6Av29A"*39_6AƮ9AN]6At!L9A]6AgY9A!\6A{d69A\6A9Ai݄[6A9AM5Z6AQϷ9A\Z6Ad\[9AN' 1Z6A<¹T9A6Y6A!'9AgW6Az9A( qV6Ai7a9APט2$V6A{9A.CV6Aӫ ^9A]uW6A_N;9AqtX6Ak=c9AF.RW6Ai+9A5V6AMW9Al>U6Ae9AoU6A0&j9A&g?bV6A,9AH0"N X6A3Ʈ9A@\Y6Aw9AȭhZ6Ab'9A^Z *[6AyC9A>پ[6A#Oį9A^G[6Aa|9A\6AH9A|Yq]6A1.9A\bNX^6Aá9ABDQt^6A84pZ9A2T`6Ab}>9A);3b6A: t9AAޛd6A3˜9AHӦd6A?+9AKe6AO0K9A07g6Aa9AB_i6Aګ;>9A.ovk6AF-$%9A:Wk6AoC9A9m6A9AFIn6A++]9A 7p6AB~9Aqxr6ArZ\9A>,8t6A9A0Su6AL9A ou6A70hs9A>Iз(v6A:;9A&av6A6ib~O9Av6AwC9AH:v6A*R,q79AԤv6Agj+9Asv6AH|s9Alv6A :9A,v6A29A8 Mt6A\9Amr6Ayl-9A5r6A"M|9A)6q6A`9AP-^Mq6A֊9AjBq6A%x?qo9AhWo6Ai9A~n6A~JT9Apl6AkŐV9A9Ql6A*U{9A6^j6AϠ9AElh6ADɿ9A( f6A|9A(.ffif6A^~&9A|ӛd6AU9AxHc6A9A֥,ba6A?E+9AQ瀗`6AeMx69A M׶`6A '9AF/`6AcN9A+a6A R9A@c2a6Ak89A ea6A$z9A$Zca6A9AC\qa6A49A"t5 `6AI9A]v`6A %9AA``6AP,&9AF3B^6A>9Al\6AfX jW9AnxZ6Adbp9A?X6A_Xp9A\%X6AW`9AGW6AL9AHkU6A9AT6Aq=9A6A9AfU=6A9A=6AX-9A_)<6AzY:9A"<6A*0G9Ab<6A$g9AVA<6A d[9AL>;6A׻ 9Ab;ș96A/3D9A).76A @U9AĊA56Aw9Ad~v46Ab39A>46A~Zt9Ai36Akƭ9A26AlC9A`Z26ANA9A06Ai9A.6Au{9AF ,6AjT9A+6AN9AL}C*6A ^K'9AjĖ)6A 9AZx :'6A@6B9A:T=[%6Ao9Ax)#6A &L9A(iW#6A 9AAr!6AgO9ASir 6A}9A>cA6Aߍ9A&r6ADZ9A3O6A(i9A f6ARU9AR6Awgr9A[6AwrA9Ax*qy6Av}C9Ax6A.9Aޜ6A/9AZ6A -9Aj6AwI9ABKa6A59A,a6A{+9Ax~-6AIA9A!O6A9W9A#*6A?9AJ6A<@9A"M6A>=9ANC6AO4@9Aآ6A\99A6A瘷˻9A/l6AG@qW9As"6A)/z9Abp6AI7B9A6A9A t{i6A o9AG$6As9A)[5f6Aos9A0Z6Ag? Q9Aę 6A^9AJ3 6A-!|9AWR2 6A@`s9A[f& 6AZ09AW6A:9ADm6A9ARI76AMo9A u6Apt@q9A6A 9Aʺ5A@9At5A/{p9Aیf5A9A[nm.5A |9Az5A8Bn9AXP5A9A3 5A3|"L9Aݽq5AM0)9AR Y-5AEI9A*zn5AVh9AN5Ak+49AXqDz5ALg{9Ap 5A&K_9A|HyO5AG~C9A6ӝ5A䭍~9AZ5A5ֆ:9AU5A@P09AYΘG5A΄&9A^[5AVb9Aw5A]g*9A}05A^9Af5Aƨ=9Aq5A 1Q9Ax ="j5A:9A #X5A]U9AG#5ApW9A65AUֽ9Ac_5Aj?_9A\5A:eͩ=9A(rY5A@Hy9A,~5AA9AeK™5AAj9A|5A9A|TO5A̼%9A4d5AY֬`9An%9;5AS b9A0jY5APn9Az}Qi5Ae`%9Ah&W=}5Au-{9A5A;p9A*D5A..B9A,5A\|r9AT5AzP9A 5Aӯ+9A\Il5A9Ae5A<09A"o5A@ԓ9A-RT5Ak9A؟95AI[9A5Ah9/9A=Q5A):9A.5ABw9A@{b5Aۂ69AN\9AFQ5AX] 9A 5AS̱~9AT3V5A\9A'o5A&9A5ANL٭9Af>m5A749A~?m5A^}c9A~\5AbV]9Av\5AYm9A0=;5AD9Ah%5AyF9A ͉5AEǑ9AB3Ή5AyE9A!5AEw9AW 5AG Fvj9AbFF25AF[]9A4S5ACL9A2 mY5Ac9A5Ax9A"Ң5AUҊ9A/5AD' A9AوL5AER'H9A.s05AH^9AwW5Ab9A;5Ad_9Al/5Auˎp9A8Z5A~bD9A8\n5An9A4=05ALs9A,ڎ5A^-9A 5An9A!5AfQ9A nA5AX9Az}5AfvX9AA5A9#f9AT5AEҾ 9AU5A4fV9A,%]5At[9A eNJ5Al09Aaܩ5AԽ9A2PL5AY9I 9ANē5AG@):A͋5A B:A|q5A_hV:AT ‰5A9A<,K݇5Ab9A5Awl_19AW45Ae9A7Q15A *:Ag}5A z3:AL5AjK :Ap6)5A@:A 5A)*:AV~5AQh;:A ~5AB,:A<&}5Aa~MI:A }|5A3B:A^i*,p{5Ai :AB"=y5Acn:Ay5AU :Ax5A'eF :A&4w5AkkFu :ADv5A8::AE1v5AH!8H:Awu5A75e:A­nu5A^Ts:Aj\cs5Asa8:Av'q5A&T:A+p5Aұo:APun5Aа:ANl5A7ŧ:A^b+k5AV:AfȆi5Ae[f:A*ű>h5AbB:A*D(*h5A5n:A5g5AV:A\@f5AP-:A e5AgϻK:Alg`e5A֐2 :A8uWSf5A":AMf5AQ":A$Z;f5A:))#:Aӑe5AH̝$:A,pd5Ai *d$:AEutd5ABv%:A$b5AJ&:AF# a5A1_v':A]0zY_5Aeѫ(:Ajѥ]5A>q,):Aa'[5AJ1*:AL+5[5Ay*:AHRiZ5AR,:AMY5AO-:A HӛW5Ak /:AD4V5AJf0:A ?T5A)1:AR:fS5A3:AHlQ5AVz4:AwP5A74:AZvP5A'45:ATD2O5AK947:AM5A8:A%eL5AT 9:ApJ5AJ;:AI5AV&⎧<:A\/e3H5AD|=:A3 F5Ax>:AoF5A_QZ.?:A2/;E5Ab\@:A {C5An%A:A{B5AA:AA5A-lB.C:A#A5ADͅD:AjՀW@5A`ȾF:AX?5A|A H:AL>5A/J:Ay >5AlGJ:AVq=5Af%K:A~<5AG1WM:ALhw;5A}=N:AA:5AWqHgP:A 95ASQ:A4no75A!R:A> 75A S:A&f975A[izU:A ڈB75AZ|R]W:AH<85A;@Y:Avow85A %#[:Aݍ@95A.]:A95A27D]:A+~95A}\\:Aˀe;5AF[[:A 04=5A([:AM ?5A_ [:AniJ`?5A7Y:A(X@5AAX:Au#A5At\V:ApvB5AOKV:AC5A莕U:A" sD5Af BU:A.NF5AutT:A:Ec*H5AQT:AcDH5AuY U:AJ5A;SU:AŢFK5ADtU:AJ5AHW:Aͬ J5A3X:ArA骗I5A:b\X:A2+(J5AY:AbB}L5AݫZY:A04M5ANzY:A FhN5A8(ԋY:AͽN5A{U[:AԃQN5AF(\:A@lHM5A`z^:AۀIM5Anx`:AxL5Aa:AԧL5Asb}b:AJ㼁M5AӖ<@5d:Ah pN5A9.Fd:A^$zN5Ad:AvwKBN5A7Qd:AnN5AQe:AN5A;ge:A^M5A͜rg:At9(L5A3Yg:ADG[zL5ABQZEi:AzCL5A~ti:Aގ{&L5Aqj:ANOM5A*"2k:A=}O5AO:k:A`q10O5A_,Kk:A* P5Ao:nl:A.$R5Ahl:A(զS5A)m:Ag5S5A`Un:AƆ{S5APNBo:AbR5AP&o:AmP5Ap:Ab)O5A^Doq:AD4YM5A6])r:A|'MK5Aۨ_r:AxX)K5A`3Rs:ADNI5Av!t:A)qH5A78u:Ar %G5AO5AS{:AA{=5AH>}:AK`3<5AK3~:ANX:5A.:A.~95AQ?x:A %$85Av>:AlA65Aju$:Al55AxU:Af"55AhJ-:A( J65AU.:AJ/q65A<:AH*T75A:A185A9'W:ALMA:5A:A*7;5ApM:Aj>;5AOF:A';5A.7?m:A|:5A7P:An4%:5A@㹑:A&R95A"%+:A /d95A6dz:A#85A &ɔ:Axї65A x:AZP1=55AWq:AP{,-45AyT:A245A81Le:Af35Al=7:A\e}35AJfҚ:AL45Ao:AO.65A:Af9w65Ai?.:AJOtg85Abk:A76W:5AǧYި:A G<5ATxR:A<5AP:AfY:>5A9n:Ary.@5AI:Az/ϻ"B5AC<%:A:D5A:AS F5Av𞄜:A8F5AkdL:Al>9E5AoP:AH':C5A+U:A .A5Ag7HZ:An9@5A(#:ATRQ>5A.ct:A">>5As٢:AsB=5A7ˁ>:A6:1;5Ac,/:Aԏun;5A):AV6:5A Aե:Aa85A&K:AR0~65A&c֦:AH55A):ANK'55A e:A6-45AgCFv:A:235A]˫:AmM25AGì:Ah"a35Abn:A86'5AHѻ:Ax?5AG|N:Aփ@5A\^g:Ap-X?B5A<ု:A*A:Av'G5AW +:A~I5AZi:A VI5A~cW :Aax.K5A:AJ>M5A!P8:A* N5A61- :A=N5A/.i:AO5AV:AvP5AW4:A֯!Q5A]X:A@SS5A@:Aq T5A9O:Ah U5Aa=:AXV5A,:A{9BJV5A=c:AVk.V5A5:A ^̑V5A<:A0X5A:AvxZ5AK9ٲ:Af:[5A:}:Ah\5AjuA2:Aʛ7*]5ALHɶ:AL^5A Ƿ:Au._5AZP(:A^"H]^5Aᢾn):Aq"\5AD~*:AO[5A'덪+:AX]|WY5AM,:ACW5A$:At&1W5Am:AqiU5Ah?:A.~T5A#Ƚ:A$ř.T5A殖|:AyqR5Aw:ADMR5AWP:A^y[P5AKxؾ:Ax߀iN5ABRI:AڔuwL5ALUb:Ak@K5Aˉؿ:A!>K5A4:ANOJ5Ali:AϞxJ5Ao :AҚZ5J5AdːC:AœgH5APJ:A0+F5AYB:A)LD5AK6}:AYB5Aٗ:AߢzA5AHz:A!m!A5A~:A 2?5A؛3IR:AB=5A?7t:A6ZKS;5AY:A<4EP;5Air6:A_:Am#5Ai:A:й$5A5{:A$5A5炓ֻ:A{;#5A"j :AZfj!5Ai:A 5ApR!:A:[na5AX:AT=lk75A2:A5A. :A$p"+5A ]:A[_5A*:A|\5A :A5AcN|뼺:A:A,w5A+P:A:n5AF;&0ڵ:AH*5A# :AJs 5AtS8:A 5AHC\h:Al lX 5A x(:Ah~\ 5A:Ag5A$ :A(~{5Ab,p:A@05A#lӾ:Ay5A]6:AFm[5AW:An`5A\ :A&SdU5AnV":A*qxV5ALml:A큒4A˶!>:Ab!4AbY:AP4A{d|:A4A R:A<ۀi4AzB:A:,c4A:A\;04A +F:A4A*4AodO\:A24Aa&l:A?^;&4AΗ:AHnv4AQ6:A CH4AZ:AB+Lj4A8 ĥ:A)4AB`:A YEt4A :A%+L4A#:Al4AZN:AƘ94Ag`:AʋO4A5s :A~Xr'4AZ:AkVW4A$U$:A ˜4AljsN:Aj{4A::AB7kT4Aâ:A*4Ab:Ar[4AŸko:As4A'+:AXۜ4Ao*R:AUN\4AU:At;C4AG:Abg4A:A4A3{q:A'hb4Awq :AZD4A~ɺF:A4AY:AEwp4AS*2:A$la4ANk:A]R4AS:Av~4A`:A:9فj4A{px):A~s4ADc5l:A"en4Aq:AJLxV4A ;;:AB\͝4A&%E:ApMB4AE0[:A54A::AK4Aiz:ANb4An:A]Uy4Ap;+:A4A&\:Az_>4AYճP:Af;A4Ae:AC4A=x:AF4Aκ:A|H4AS:A~Mli4AB"FP:A*m4A:AB00z4A:A\E4A@r:Aʈ4AhJ&:Az64A@:A)%4AnXس:Ab4AZ:AH4ARh:At~4AB:Ap$4A6:A]GN4A%~:ArS,4AVY:AYjN4A]:A^ܿp4A̒G+:A"R94A5vY:AZC4AQ%B:AUb4Ae͉:AA)}4Av!c:APV؜4Ac:AF4AKd:A.4A7> :APh4A}z:A>IJ4A[:A۰4A!L:A54A۔:Ah84Ae:A$w4A\(A:A4XQ4A,нٚ:A!;AM*4AN#!;AX>%)W4A0p#;AGl4A^]H%;Au4A8~&;A #{4A< &';A2e4Ae8 );A%0b4AX3E*;Ar<4A1_7*;A4A1+;A2E͎4A]F,;AB63AArr ;Ag3A@;A>j3AN ;A8b3A Z;A!מ3A!;AV83A z#t;Ah͋!Ӿ3A@;Az3A9%;A8T^O3A®Op;AڔV\3Ai;AJS3A̳;Ay m3A;Aht_3AL-;AB73A[m;AVwQ3AWCI;A*뻷3A6;Ae{3AC);AL3A&F;A\$'3AOW;Ar3A&;Aп3ASðy;A[3A;Ab3A}̐];A:~ਵ3AY%T4;AC3A{[;AȬ3A;A¹۪3AV;A'F3A\;A"jA3A  ;At3A j&;A^@{3Ai@;A3AZo;Ae9#3AntM;Al_03Awj+;A]P=3AȻ*;AB{13Aoڎ ;Az3Aߓs;A W3A _;AKA3A ;AК3Ahr;A繤_3A˸X ;A3Ah( ;A"]3A}!;A\"3A["1#;A$C3AFc%;Al3Aܗk';AZEAƕ3A]OC);A(p 3Axy);AKޔ3A*;A 3A,;A^W}3AF,;A73Amv-;Amf3AӖ/;An#Ó3A]u0;A'3A!T2;AD;Aæ3A"Z>;A s3A @;A:E_3ARrcA;A\VH3AyC;A2r13AM2UE;A [3A9G;A 3AuHFI;AL 3AE)WJ;Ajރ3A7kK;AJy<3A֘+L;A$3A 7 M;Ah3A{M;A+|3A d)sN;AаX3A7O;AXU+~3AdP;A~3AA!R;Aݒ?}3ATbzT;A c|3A#T;AF|3AXacV;A/14 |3AJS%SX;AD{3AS`Y;A{3Ap x3Z;AG3_{3ALԹ[;A@ t&z3A$l}/@];AЧOx3A=I];A\+zx3A^;A^hğ%x3A c`;A|Nw3A"P^3AuJo$s;A/m\3A s;A@5\3APJu;A \3A?Bru;AP6S\3AAc&w;A֟]3Aa~w;A|]3A+3.x;AV&q+_3AGk9 y;Ap{`3AVly;A4d̰a3Acz;Aн5b3A:G|;A"c3AwR|;A?c3A@2|;A0a3AA}Y};A_3AE};Av]_3A-;A_^3A];AT/]3A;A\3A^'ɚ;A@y\3A(W;ADx [3ARi;AZ3A4Y1;AD,Y3A{M?;A >W3A5;AiU3A#Xۂ;A!oU3A;A.#;U3AG;A`nbV3A/8~;AƬŘV3A?u5~;AV3A[T};A5>U3ANW|;AS3AQ {;A g*R3A9 {;Af%mP3A%z;AFN3Aŏ@y;At,#L3A4t[x;A98K3Aw;AI3A(w;AϸrI3AmmUw;ARՂG3A/w;AAE3AM`Rv;AXI?D3A^$gv;A>!C3A {t;AeVB3A[^t;A:DB3A ?s;A)A3A!3q;ApV@3AhBq;AjO@3AFW p;AC?3Ar/o;AF4;?3Am;AXg?3A:`m;A@'c?3Aš!l;A ?3Ak[j;A4˓@3AfBP j;AQ@3A nM&h;A$`@3Af;APY3?3AJd;A،Y ?3AYusd;Ah >3Aqbb;A0>3Au6`;Aב>3AG'_;AD@In>3A<"=J_;AR.!>3Ajnd];A: 7=3A[;A" M<3A KY;A c;3Arb3Y;AH6 ^;A*#3A_;A(R"3A~ZAz`;AD"3Aia;A|Q*3"3Avc;AZf;ALN3AJ6f;A Z3Af;AbƆ)3A]7Gh;AT!13A5ei;AnO3AEj;AF3Avޔj;A3ACyj;AQ3AYwj;Aˇ3A淆tj;A%\D3Ai;Ap3A`h;Aʙ<3AvYth;A2=T3Ag;A,3AN2 zf;ADr 3Ak4te;Al. 3AQ81{e;Ab^[ 3Abe;A(m 3AoVCf;A&T3ADFf;A*d3Afbh;A"Vw3Ai;At3B 3AUj;A~._V 3AFk;A, 3AS[~m;ANr3Am;AZ3ASMo;AFf3AH p;A:~K3Aqw;AH]D3A%x;At=3ASoy;A&<3AMz;A&TTc2A@{;A&kH2A|x|;AT2A#B};Aet2A,S^~;A.Ct2A&x>;A.2AAj;AhX3A3ȁ;At Ė~3AJ0@ ;A63ANrQ;AJw3A;AQ3Aچ;A B?o3AX㴚;Ah^PP3A8 Tme;ABj3A8n)U;A4("3AeD;AeN3AF)';A? 3A4;A z. 3AX]$;Ao 3A;AkѰ 3Aaա;AV 3AHe;Aj 3A弆;AH1 3A|_;A.}= 3AosRq;A=OJx3A%?;A3A>O;A(qe23AKW;A1H2A\9UӜ;Ab륥2Ao6";A 2A.1;AµO2ABP;A镺2AQ<;AW2A(U;A`2A1}}+;A:I2^2Ah2S;A62AOE;A0DY2AjF;AJ2Az%l;AS(X2AGϤ;AR{n2A2;A2A]6;Aw?s2ACJ)Ԧ;Az{2AlK;Az2A!;AQVW[2A:\;Aı2A;A̡2AP ;A`]y2A;A+x2A)#;AZa i2A)Z;A(O2Aq^ü;A̚2A,;A(>+2A]B;A2Ag:;Ah2Awi=G;A#2A˦;Af …2A}*k;A.Xb2Az:;AK&2A{\;AI32AJo u;AFP2AnCg;A/h.2A>s#;AF2A[6;AEI_2A% ;AFH2AK\;Azw2A~$;A.2AV;A2Anf,;AD 2A:ߘ;Ak,2ASBY;A2SN2AȪ;A[E2A{xj;A_&l2A`;A<{2AH|;AmϜ2A"]7;A2r#2A1;A<4w2Aq䐹;A /2Ap/';A:In2AH;A$:2Ajx;Al2A1ߡȠ;A*\A2AN&;A2A"p;AxF2A;A>W2A+Խ;A152Ax`;A 2A"@=;AC2AA<;AIg2A}& );Ag2AA,;;A w2A "4;A|4t2Ar;Ax!2A.7I;AC;?2AC;Aؽ2Ayv2 ;ArcAn2A¤Xq;Aʀ%2Aj;A`*w߅2AoQN;ABM2A)Z2;Ark2Ae+$;A}2Ak';A_2A ;A8^.2A˞q;Ad 2A!02A K ;A`*P2Ay+;A;2AYd;A\2Ab ;A:2A#7{;AU2AE$;Až2ANo;AM˕2A!нh;A&Ո|2A +y;A]=2AaP;A<%_=2Au;A|2A<;A2Q2A4;A 2ANk;Aΐk2Aփ;A ߉}52A ;AM և2A&P;A w2A ;A`2AX4<;A2A0Ttw;A&72A8Sx;AcI2Ad?x;AHU2A rM;Ajtݎ2A#;AVXHf:2Ar,;A\2Ar;Ae52A7;A2I2A0X;AT;a2Ay;Ax:%k2A5J,;A: ؄2Ay;Ala2AD;AvC2Aʥ;Al^?52At;AnB*2A˥2je;A-2AfV*4K+O o;A_$2An{J;AD]A2AY`;A^|=2AQT;AlSY2A$M;Ar 2AQlj;A<2A-;;AH^2AFKu(;AX2AV;A@•2A߱;AnQUF2A);A9 Y2A@3;A]2A0/Q;A@r2AɸU;AM 2A nP;A$\䍎2ATݒ;AtX`2A?O;AG862A@H@;AZ}2Ara;Alޜ2AiaNv;Aݹr2AVd;ABJʼn2AoʥL;A1rX2A&>4;AXhI2ANݱR͖e2Aq9SB2A)S~2A4<V )-v2A@'*Oy2A@_-t3y+b2Aw[U5 7R2AHބ9?WM2A\<2A%92A=E2AI=?B;mE2A"xC7H2AiSD2A9E)T}s@2AͬoN2A7NabA2A"&u?+]a 1A'$X\1A1cRbmZ1A]21AVʄNvZ,1APlĠ1AQ=է,1A/`ݗ!1AJ-*JIfs1AeQ#Y&K1AlތhFQ:1AB31AK20A]b>_S0Au =Ac80A=A3S0Aѣ{&& =AȘϕ0AD =Atf0AM_< =AlA O޾0A'E)^ =A.yLp0A\L=A r0A=Rgt=A:Jѿ0A =Aʵ"0A!$=A630AXZL=AH0AG=A3家0Ax_=AnYB0A [ 0AFNPs 0A>N}0A{~0Ah|$D0A\ns/ЖqgfR螧0AЛ{SGڕ0AzRJ?}0AM#.W,sv0A;Nc |j|0Ađx;A*<0AjA;ARo#0A4;A[ٔ0AZ|;AB20AFI;A@2Ɠ0APgd;A;0Ax=;A2} D20Aӏj;AX  0ARfw~;A,0AP&'N;A6L20Azg;A60A>n%;AH:c0AHj;Al\+0A}k;AflÇ0AZ.;Arm80A1f:;An60AE;A0Ayڷ/;Azn0A[@*;A&ԙ0A;AKT0As\v;AX㎓0Aͧ;AS0Af__<;A/EYБ0AZf.;Aݫ0A/qG;Ap.>0AA.?;Ahs%0A9>;A2F0A+;A hؑ0A8 ;AEGBs0AT};A$f0AR;Aڀ[ܓ0A6*p;Aד0Aoԗ;Ayg0A{F;Ap=F0A'Q;AB|F0Al;AC0Al5#;Apm0AO];Ar+z0AǾ;A܏0A XS;Ah$0A#֫";Að\0A~ f*;A/270A?\b;A}0A;AԌ0AW;A`ϒ0A\ ;AJ@d 0AWZ;A=Kop0AkLֿ ;A(0AH;A C0A|M;A0A;ABt70Aб:;A~(0A:;AT0Av#;A40A墌;A^r0A?6ג;AD0AͤXUB;ALM0Are;A*Y0A(2;A0ACڀ;AD6 0AN;AWep0A[;AC0A{s;A0A8|;A&c0A9=;Ab\Gl0A!F;A\0Ae7);A0i 0AD8sJ;A,J0Aq;A.&{b0A ;AS 0AN!OGu;A4Uh]0A Z;Ao0A*;At@+0Asј;AL 0A ;AР0Aņ{5;A.M{0A*c;A0A dD;AjC 0AEK;A 80Abj;A0A+S;AKn0A :;A u0A҈.;A"0AvZ;A A0Ao| z;A4No0A;;A0(0A-;Ar侜0A"?h;Aۤ0A$;A(|+Ȥ0At;Ay0A-.;AR|ԕ0AŶ;A01!B 0A!^;AO|0ASYD;A5 0Ax;A睢0Aġa;A@$w0AЈr;A0A^<;A@<0A7h;Ar$N0Aw;Az0A˩ !;A(ǧ0Ah~;AGEǧ0AUBE0A[כ;AԜX0Ao;A< 0A;A|0AX;A@0Aa~Ǹ;A% Π0A̒;A(ީ0A*!dõ;AGN0APW\;Ax R0Ai/(ܳ;AZ0AT';AB0Ar;AGa0AVU峱;Ao0A)ݰ;A$u0AM.=;A50A7;A󍭤0A1$x;A $I0AZEvX;ANo0A÷;A"Z0AHC;Ar5JB0AOӁ/;A0ƥ0A_ ;AvB:0A;Awh<0A_Ɩ;AQ0AJ1&;As0A~R";A&V0A܆;A;{0AI<;ABm0A ;;Aʇ.V0ALb,s;A%0A(:H;A w0A$;A>Ƨ0Ap9?;A~10AU ;AtFS0Aڡ;A1C0A+;A$3MPv0Aꢡ;A8/0Au;A|u0A\8;AtL0ARh;Aa:'0AV0;A@+k0Azr;At ?Z0A<&汜;ADBg0AҒAe;A.պ0Aلُ;Aa}cs0AI1Y;AXX0AC;Aj0A>ߝ;ADFxM0Ab";Am0At Y;Ax0Aל;A {0Af!z6;Aّ)0ARF;Ada0A1U;AR0AՈx;AF؉0Aczԙ;AU֮!0A9+;A*t0ACA Y;A>E0A;A`kHW0AÚ;A&Fm~0A#Y;Af0Aay;A+0A61z;Ae?u0A7;Aہ0A!]5;Ai4~0A7W;A )|}0AHߛ̚;A=&{0A`ɚ;A͛{0AaE;ArMy0AX};AA#y0A煚;A(Ex0A0Bؚ;A.w0AuM;A|v0ADJ;Aeu0Aތ;At0Ajk;Ak6et0Ab;A|5n}s0AB;Akr0A|;Ar0A.;AvNhr0Ac H;A|';r0A$x;Aj%=q0A=;A\jp0ABX ";AXo0A$4Z9;ABe}n0ApCQ;APBl0Ak}8A;A7ol0Aw ;A:i7k0A";A˘j0AWB(;Aγi0AyVH;A2i0A۩;AX+1si0Aܭ;A:^i0AI7;A+i0A+r;A&cPh0Ahf;AƟHh0AÕ;A8g0AJk ;A'f0A?X};Ae0Aӌ|Q;AU,d0AM6;A4j%Ic0A݊|;ASfb0A;L;A( a0A ;A`^`0A) ;A$w9/_0AyB;Ab)^0Aȡ};A \0Aa.;Adm\0A:;AYy\0A44;ATf[0At;ACgM[0Ap5̄;Aj5Z0A~r(;AY0A%Y34;AY0A`넘;AX0A{;ALW0A]\5;AfW0ARN;AtqYV0A4d5ڑ;A4V0A`nԑ;An V0AuBԑ;AtԊV0A5̑;A? U0AJ);A%2CU0AJ'eK;A` U0AB鋏;AKU0A!;A.zV0AR;AxX0A=3;AvEX0Aaɋ;A&7Y0AE_8;A1bZ0Aiw;AljZ0AXqmۈ;Ac][0A;A\0A{;A6(]0A,;A$p6F^0AG~kd;A^0A8²;A`@E^0Ads}튂;Az^0An;A I&M^0A?3 ;A<\0AyX;Ar\0A ;AtR\0A;AY0A~ZɄ;A +W0A*(ք;AD)"W0Aބ;AqW0A`i+;A0B3tV0A^+P;A)8V0AQB;A(TU0A%U;A+ 3U0AX;AB`%S0A#;A^lS0A0=;A~yXR0AiCI;A99Q0AT;Aڛ5Q0AG;A8<QQ0Aos;A0O0AR;AD?O0A,dqׂ;Ad(qO0A*;A.O0A[< ؀;AP0AH5s;AF_2 Q0A+~;A*]Q0Al<9~;A4_Q0A m};A}`tQ0A36 };A Q1eQQ0Ay|;A\տP0A9\{;A4*P0ARG{;APN0AC8{;Au*>N0A^z;ApQTL0A5>z;ATRK0ANu3y;A~qJ0Ax;A)&J0Ad)x;AJ0Am,^w;AYK0A{Vmv;Ap3L0A `:u;AİM0A@Wu;A$M0AKװt;AЙO0AF&0t;A^FQ0Aw I't;AXJjQ0AÞQs;AD&TR0Ax-s;AP$ `R0A0A4yUl;Aj>0APm;A̬R=0A үjAo;Af4C(=0A|"}o;A =0AFfq;A$Ɔ<0Ak r;Al8 t<0AXSs;Ak<0A `t;A%[<0A_v9u;A$R<0A?v;AG;0At!x;A8p:0A=$y;A290A\Z)z;AJagT:90A{;A6)=70Ah|;A8'50A]|;AJ40A};A*40AqRe!~;AB20AK<;Az00Amq;A8.a00AooM;A}«C/0Ac[;Aݚ+-0A:n;AxGU-0A;A ,0A };AX^|+0A9#`;An+0A˶;A2,+0Aٺ;A:++0A>~;AЗ)0AUAx~;AE)0AJ^~;Aǭ'0A@ d~;A'0A^'~;AN &0Ao7~;A4%0AS;An͡b4$0A];AbQ8+$0Ape;AlGn"0A(Oy;A෍>P"0AS?P~;A8[ !0A@I.36~;A!0Ah|;Aeyg 0A(]|;A_c 0Abُz;AzQ0AK x;A00AMtx;A9J0A l=v;AHtJI0A3W`~v;AG!]0AQp/Eu;AiJ " 0Aۜ~% u;A`3Ij 0Aݵ3t;AF 0A Nםs;A\'# 0A=};s;A'0AuVq;AP0Amq;AIJ0Az"p;A:y0Aƻn;A܀0An;Aֺ 0AWm;Ayh\0Aym;A!'0APKo0AT1S;A8 0AXaS;AR 0A]L}S;AT 0A S;Aԫr 0AɌS;A3 0A~xR;Am0Aa@vOR;AzJZ0AQ;AI'U0A!P;A&ŭ0A)&O;At c0A/(O;ArEQ 0AB(1#O;A!@0AY:O;A1k0AΑN;A41190A_ ZL;AvH0AFf̘J;A4X0AG`bJ;A]0AAp/0AG#%;AP S30A|L5#;A6v0A  M!;A0AW;e;A~,|}0A`j%~;A0AiS;A;AR +F 0A;AXb`!0AI;AТ!0AeQ;A&!0AHz;ANs#0A{j5;AM$0A^Z;A{%0A*3K;AMK%0AFL;A!&0A|;A{u'0A:/%=;AOA(0A,SRZ;Aa@(0AσH;AH_w*0A\W;A.c*0A& a;A[bh,0A*;AbmY.0AQv;AxJ00AXe;ALSo00AoM5;A)|0 20A}M;Af:530A] ;A2=Z30A8f ;ARb/30AL ;A/F30A\; ;A.׭k40AuٽF;A[t 50A.xx;A~-50A0V);AC60ATVem;A~ݰ60Aj;AB80A4$ ;AM:0A? ;AZ&U:0A<" ;A.I<0Aa& ;Ay!<0ASjk' ;Aj<0AM ;A=0Ar;A>0A{S;A( A?0A" ?;A̤I?0A"Lc;A ?0A;A]P@0AҴ|A0A s:AHA;D@0Av0A ή:A?8>0Azݙ:AE>0AŪUկ:ArK+>0A x:Angm>0A݌y:AbF?0Amw:A]= F?0As:AZq_?0A #~:A+0w?0Ae:A\(%?0AsR% :A0G?0AJm5u:AD [?0Aph:Ap.Q?0Aqg:AP?0Aqp><:A`?0A ;:A2`a?0Afh:AJ,H?0Ad U8:Ap$FqJ>0A6͋:A<0Ann:A N<0AS:A<_;0A :AcJJV;0Aq`e:AqE/;0AUl20A:Ҵ5:A i10Aӿ:A9E 10ABr:A>A/0A :A/0AP ? :A1.0Af :A.0AAjK:A9?-0A_7%:AB_-0Aa :A,R,0Al'@:AjP+0As:A 0;:A#/20Au"]:AZ3320A7h:ANzPl00A,:Ap&.0A!:ALv,0AM2J:Aւ"p,0A-g:Am*0A,:AmI*0Auw :A*0A:A2v+0A9Kį:A*J+0A4:AT,-0Alh:Aζ,`.0AT :A&VR.0A[:A~t|00A+:A:Z+j10A4k!:AY20Aޛ:A6{20Ay":Alv Z20AoN:Aj6z20As|ۚ:AZE20AE*>:AS{n30A *C:A&VW40A6\:A*M60A媞n:AZ_70A|ͥ9:Ae70AyI8:Ap80A1U:A"80A9ޒ:A2p90Ax:A^y>:0AZ":AZ:0A,-Oď:A;0A>P:AqIC;0A}..:At:鱲;0A-}:AI;0Ap:A^<0AIo ):A};0A^ :AfSǰ;0AVKlj:A\6<0Av|%K:A|O=0A PV:ATV2=0Ay7ù:Ap `>0AkQ:A7y>0Amж),:Af?0A4:AVA0A8:A`A0AO4:A<*OB0AK Lj:AmRC0A?~:A̋UD0A [~:AnD0At@6}:Aj6S(E0AO rJ{:A09E0A6Ny:A+bqF0Ay:AF0Aoe w:A$2G0A@^v:A(H0Ac%v:AD]fH0A$+Mt:Af캽MI0Aㅳtr:API0AIdp:As2J0Aݠp:AJ0AVFfn:Av{ψK0A~+m:A`lqL0Aҏgl:AFNL0A"tck:Ap8:M0Agmi:AM0A>ڵ)g:A4N0Asf:AO0Ake:A*mO0A2S^Xd:AO&tP0AmKb:A}pQ0A Mb:AQ0Ar(a:A=KR0A_ڻ_:A.3S0A3Mg_:A1T0AB|]:Aڙ T0A[:AUn T0Aq~[:AP%QT0AwY:A('nT0A~X:Ah\+U0A X:A{@N5U0AYbV:A+#FV0Ah9.T:ATy0W0AST:A^TW0AӯpS:A KRX0As `Q:A<\_0A:0KI:A[)_0A{iyH:Abc`0A&H:A+Daa0A1?AG:AĈ\b0A뙃fF:A$c0AXD:A _e0AA~FD:An'4f0AlC:Azf0AA:Ap+7h0AA:A4h0A@A:A4 zFwh0A7@:A~^x>h0A2Y?:A4h0AOR?:A 'h0Ae<3w>:A"&)+g0Al>:A=%g0A-b>:A8/Be0A]>:A\/d0A>:A2\mc0A5惷[?:A%F~b0Arc,O?:A0~b0A@9i>:A]zb0Aߨ@>:A`9ozb0AO =:ABc0AGN<:A 1$.d0Ap0A7FwV:Agfp0ALx:A$don0A{ Ԛ:A(hRxl0A܌:AI\kk0A2]:Ayj0Aaů:Aij0A(tq:Ajk0ATk:Al0A?PZ.:AĢkl0Aɴ:AK"Ln0Aâg:A>Wn0Ap :Aǩ9o0Ad :AF6oo0AX$ :A0~sp0A8u:AP"q0ATyMN:Aa4q0A=:Albr0Ae:AR 8.br0A$ :AT:d}s0A;\Z:AfYs0Ȃ#:Abt0A4:A Pt0AP w:A<v0A6:A&Nkx0AH W:Amy0A_ *:AhQ+z0A辺:Ai{0Ad.`:AGp |0A(X9Ar]}|0A759As|0A)9A2|0A@9Ac-cm|0AT& 9AsRO|0Aj>n9AR3){0ADrJ 49AUͤ{0A+59AdϤ{0A׆7+9An{0AhJ9AHZ[|0ANң9A2!}0A|A\9Aƛ~0Ap{9A'~0A9A>-+0A8!9A^N0Ao@9Axp0Ajp9Af|-S0AYF9AQJº0A9A0A z9A.ہ0AԢ9AB0AgmYw 9Av0Ah09Aڴ#a0A]qA9Af0AF9A jg0A8цn9AU0AK59A膍5A0A&KU^B9A|x 0AF9Aa0APY ^9A%T؁0A9A(K0A3=u9ArR0T0A?!9A_!0A9A`l}0A~׃9A$@mY}0ArWZ9A~^({0A#9AI*{0AD9A:_z0A5F %9Aty0AQJqT9Aax0AnJSZ9Azkx0Au9A0ȳw0Ae9Aiw0A?s9Au0A49Aղt0Ano @9AG$t0AE2T9A>dFt0Aj9A`!15t0A"m(&9AVJ4s0An&9AtBTs0AZ_s9AV]Kt0Aa19Aއ t0AN9'9Ans0AO 9AU8s0AC 19A>TDr0AZBj9A@7/p0A9AD}o0A%)m9AOo0AHh(9Ar)Im0A29Am;D1m0A]jC`9Al0AIq5Z9AT}:l0Ae9A 8"k0Ag9AT j0AE9A:gi0Ax>e9A_0h0ATrN9Av-Vg0A'|9A()f0AU9ABmكTf0A99Ay%e0AJ9A4FNd0AZ9A@Xd0ABr9Af1\c0A 9Afc0A]ʭ9AptUc0A~19A9 xb0A[~x9A򤴿a0A)Q9A^.ua0AËW9Ab#DJa0AK 9A\`0A069A4`0A:Ah̠H`0A:ApE_0AkuV:Aಢ6_0AEvU:A_0AFKnV:A7_0An[:A,$^0A/8g:Ajg]0A1? :A8r\0A:At[0ARR:A$w[0A8C :A`Im[0Ai :AB[0A.An:AZ򽿠Z0AY;p:A`Z0A:AܛY0A:ABq}Y0AsE :A(QgX0A8G:A'wQW0A{ :AT;V0AVW:Au0WU0A^^:A]T0Ad:AS0A@7:AwS0A+®:A(6-0R0A^:AaP0AI:A pO0A|lI:A˧N0AN}:A̋L0Aٹ:A"L0A~d:At}dK0A0:A$bK0AԲ:A+J0AM:A0 |J0AzȘU:AFJ0A=ԗb:ABВK0AU4[:A\L0AQ:Al M0AfY:AHzM0AB:A`3N0AJN:Az N0AFs:AZߏO0A C :AbP0ATd:A wQ0A]ǵ:A$Q0A9a:A칁_R0A/(n:AR0AUԪ:A[bR0A9A :AYR0A[ :A0D,R0Az:Ar@7Q0A"Z:AuQ0A*K2:A/Q0AJw:ABPP0A [^:AOy~"P0A'e :A@3+P0AՁ:A(XrN0A:Ar,c:A[:0H0AlL :AjwG0A0Az*:AR=0AtU:AUv<0A jN:ASu<0A $V:AH&z!;0A :AY:0ANt:AK[90AHd:A|_ 80AF:A70A^:AlL70A00:Aʦ70A˩]J:A 270A10AbO:A&00A>o:ANk00A;o:Af.0AK(g:A:c-0A9:A Q,0AsZ5:Ac,b*0ARE:AdQ^ *0AA̵[:A @(0Af:Ajn~k9(0A+:A,\'0A[Q?:AD\Q&0AF9[:A4PA&0A@Vl:A6n'0Aei:A.Es^(0A :AޗI(0A ޼:AǏE)0A:A )0Aog:Am<)0A,*qu:ASP)0A%D:A/)0AB 0S{:AT(0Ad60:Aȳ(0A?:AH'0AawX:A(`'0A k:A_&0A':An<%0AxY :ADY%0A1Y!:A\}J$0A> o!:A4$0Aܫh1%#:A$ّ#0A{Tt$:Adi #0A_,$:AeA"0A*:7&:AU{="0A du(:A!0A.-):A@@!0Aà }*:AU} 0A4lOD,:A]0A5;':A0A%(&:A v10At!R$:Ay\0AbY#:Aʚ 0AO/":AT1s 0A}t :AY4!0AVs :A\փ!0A+i:ALF"0AImy:A\&z"0A{I:AYtw!0AP<:A*0!0AnoL~:AZ C0A>+:As0A<:AmbD0AU8@ :A(H0A%E :AԶ0A)!:AФ0At!:Aڙ—0AL":A|I_0A`^ s":A4SŖ 0AqEan#:AR7ސ0A;#:A0Wu0Ap%:A,'I0AE&:AE e0At$m':A[s)0AF':Azd 0AS(:Aci0Ada(:AXi0AL(:AbF0AR(:Aw/0A wi):A» 0AG):A]f70A*:Aq50A=$+:And=0A0/oʷ,:A]yQ0A#U-:A=ΰ10Aj-:A<00A eh.:Aʲ#10A /:A%\0A@ٚ/:AHQYV0A _0:ACd0A\+-Z1:A;}0A@\E2:A}/0An2:A~10A g14:Aq0A "5:Aw0AAջ(5:AF0AO5:AS&0At{~7:A-bE0A5J7:ALY0AUs78:A$OJ0Aڌ$9:ARph>0AJ9:A*]k60A픟 ;:AA0A(f\I;:A|g0AMEl<:AxZA 0AĶ=:AHx0A>:A 0AvX?:AW0AV40AtTK:Akf0AxZL:A^49n0A|W:L:AP0Am*(%M:A".ȩ0AeL:Au0AL:A[ 0A .L:Ay0AޡK:AnWd0Aa㈖K:AGV0A(J:A50AUJ:A^0A7I:AF7[0As:I:Aʕ":0A J:A g"0AkI:A3p/AcfI:A,%/A vG:A`/ACF:AyVo"0A¤E:AP0A,D:A0A^C:A0A:n&B:AZ4p0A" xA:A=2&0Aﶍ8@:A£x_0AỆL>:A Ʒ0AZC>:Ai0A4<:A80A]%<:A 5j0A2GG<:A䕜[0A ^m{;:A"60Av9:A0A~n9:At0A/7:A 0A?6:AV6*0AR6:AT0Aj/6:AJr0Ac@6:A׉O0A.Ӹ}4:Ad\.x0A2:A.t0AE1:A mF0AD`1:A2"0A瓎 0:A<]0A<%N/:A.}0A?lv/:A@|0A8&.:A*n0A8ed~-:Afaُ0A+VQ-:ARC0Am)fP-:A6 <0Aw,jJ.:At9b'/An3.:AE9+:ArV/AH+:A+?/A{|-+-:A P/As-:AP /Aku/:A|}/AEP0:Ars/AS1:A@t`Y/Ax!)03:Aʷ*)/AHN n3:Ad/A k?4:Al7%/A]6:AА/AԺ6:A`2(/AdL6:A/A\^]K5:A &/A 5:A@b/A)1I5:A(/Ap=5:Ayx/Ant`7:AJN/AaT{7:A=A/A2_Eb9:A^/A7I;:A^ʼ{/A]#i;:Al/AL0=:AkJ/Ac>:Ay/AO5>:A ‡/A"ɸ?:AdUĴ/AnK.?:Aw>/Aԍ@:A8s/A)@S\1A:A*0/AQRB:AX96/AWWC:A /A?]|D:A/AvPZF:A i/AnxF:A4j/A H:AT/A4>I:A\/ALǑI:Aq'/A}K:A~/AK:A4Y/ACL:Axp /AsvYL:A܊/AL:Ax/A| L:A}K/A;>L:A]/APiR:AF /AdtIR:AW/ART:ACX/A(~KU:AC /A(U:AҔI/AO$wW:A /AW:A\o/A)Y:A(/AY:Ax/AePZ:A80/A2f$[:AL5/A[:ASt /A[:AE/A!\:A /A?-]:A/A'|]:ASiץ/A"%^:AG/A`7?^:A }/AJHP_:A7̟/A@:h_:A@ H2/A֩_:A(("/A8ha:Ahir/A&ŴU)b:A̦ٸ/A'3]=c:AtΠ/A.kGc:Arנ/AĽ/d:A4Գ/A\ ed:A$*2/AԘe:A*,/Auϵe:A!/AaFf:A^k/Am4Ug:Aδ—/ALmQh:Ak/A6i:ApC/A%sj:AX`ie`/A2D+k:Aő/A7zl:A00/{/ArCm:ALg/A2Ho:A${y/A؆ p:Ad\/AJp:AĩD/Aq:AO/Acq:A<=u/Ajbq:AD:'m/A{q:A */AWeq:A|g/A &q:AM/ALj wq:AxV2ׂ/ARq:AT Q ρ/AKsvJlp:A1/Ad9o:Aoe~/AA`TW)o:A)R,|/An*o:A |/A2vp:A8S y/A35%Eq:A _w/ADCr:Ak"u/ATr:ATWu/Ay2q:A<;v/A=K"p:AX嫪v/Aw%PQn:Aheiw/A˧8n:Acw/Ay;m:A"X!w/ANl:Au/AM ql:Ax"t/Apl:Ap*q/A{pl:APݓ q/A qPl:Ad n/Al:A$Lm/A"n:AA1k/A#)cn:AP%j/Aa<ʪn:AP_Fi/A6)uKn:A魋g/A"wlm:AId/A1Um:A3c/A m:Aȴ/X:APad/AY:Ax [Ob/AaY:AQa/AʺhC[:AX|`/A_U T[:A\!_/Ap[:ATy\/A{7M[:A5[/AD'[:A4Y/A.![:Ax5X/A%3+[:A,f$V/Aʗ&[:As+ET/AӶ9\:Af/As:AL~z $=/Acs:AX!XNS[:A)9/AIA[:Ab59/AZ:AX'j9/Azg\Z:Ab9/A5 ) Z:A(]:/Ab5_X:Al Y~;/Az7DW:AXYMOT=/A_')W:A$q=/AhV:AQB?/Aҁ'S'V:A@@/Ai{U:APA/AlEET:A2mO:AnD/A+O:A]D/A޴N:AώzE/AZjcN:A{E/A6,NM:AHOE/ArL:AP[RzF/A[AdK:A|`VF/Aە+J:A\IG.F/A]OtqI:Ab[F/AF I:A~ F/AB:A8:J/Ab:ALY 2O/A9>:A0T'O/A2=:Ah2IO/A<:ApO/A::Al9P/A@9:AңQ/ARX9:A Q/A 27:AYR/Ar*6:AS/AY5:A8S(T/A_4:A4T/Aǥe4:AkT/Asَ$)4:AZl/A̢9AcJNm/A:9Alm/A 9.9Abn/A=*9A4Wo/AWi9AKvo/A&>Y9AD o/A}V9A9Tfq/Ah9AGr/A h9A>)s/AN4TL9A28t/A?*9Ap%~v/AH19A+_v/A{Y9Aw/A ?9A` x/A);9AoCz/A/\9A#B{/A 9ApC{/AWLq39A=}/A r9APw`/A]9A5{//A9A$A!/AљV9A 7/A?*19A /A!ޗ9A/AuK9A`n0/A9`9A~Ne/A(59AUt/Aw!H 9Ax5/A"e9AH/A!j9AYN1/A by9Af=>/A9A\/A\Y9A "C/Ax@9A(=/A;{9APN/A/59A]/AhY9An/A89Ap/A?Qj9AqZؑ/AqMz9A @d/AC9A`Z/AEB9Az/AtZhx9A*Y/AK9AКW/AH 9AH/A9ApgΗ/A9AH,#/A 9At /A 9A7.=/A-˪9ATD/A. 0^9A,UauX/ACM9A,.͝/AnѶ9A2>/AfX9AԚm&/A89A@/AOd׿9A^/A7#9A:f/AN9A>K)|/A#H+9Ad /A2?9AѺf /A% S9A$0/A69AѸ/A:Kb9AzOR/AY{q9A蹤_/AH9A\cע/Ah9A/ApW9A<"3ȥ/Ap9A"/A>却9AвCI/A$HJ9A:$p/Aɵ9An /A9Al]D8~/Abo49A  /Adj9AEwB/AF\Ѻ9A8 }/Atf9A\p/A>ר<9AxAv8/Ana9AبC3ſ/Ae 9A/AVa9A$#/A&EZ9AE@/A9AH-c/Am˳9A5/A$I9Almd{/A!9A|'/AExC9ASw3P/Aßׯ9A/A g9A0t/AA/A1S9A|Y$YA/AX 9AH H?/A/xC9A vͯ9A/*/A,h9APe*/AW|O9A(=C)/A@L9A3(2)/A@m|59A(/ANi.i9A@y6>'/A)OD9A/'/Adl9Adx˗m$/AA V!9A`#/A忕9Alǝޒ"/ABg9A8P>'!/A$^9AlGz7 /A}9Ag/Axp9Aս/Ag(39AL/AFʄ=9Al@I/A(k9A/Asr9A5/A{9A- /A>Æ9A/A$L9Ab/Avx9AD'|/A2" 9AȠ/A;:9AX_+/A`$o9A{H/A9A@8`/A;9A</AV9A@I@/A9A۟}/A9AH3{ /A g9AܔPhc /A5w9Aǃ /A}9A{#/A^邬9A4/ACZ9A L/A$)9A(hF /AÅ1 9A G/A~89A_yF".A:B9ALuR(.A2^h9A`.A {E9Ak.AƲZ9AT.AZԱ 9A8.AL9AȠ@s.AN9A.A9A8j.Au`9A䖃.AT9A޿# .A_a9Ai7.A#vs9ATZ.AGPҹ9A~f!.Aa9Ab4*.AV9Ahk.A"19A@CRf.Ak9AP.AK-9AzW.A覈9AT3.A.9A8.AC}S9At.AAh9AkԨ.A h:A<.A\ :A0]&.Ap:AR.A:ACķ.A@#6:AJR2.A~ :AlO.AӪ:A(d,n.Aԥ:A'.A!:Adٟ.Aj*:A33a.Aʐ2 :AD͍.Aٱy :A(R69K.AqCQ? :AP.AQ$:AC.A-':AH@T.A6:A⚞Y.Aʎ:AXQѱ.A S:A| .A$:Ahfi.AM:A .A!O:A..A 1:Aā .AXX:A;9[.A_J*):A9.A:AT6/h .A,[$|:A(:.A:AX.A,7::A0DUv.Axg"=):A4~I.AS:A.A:A_u .A8? :Aa.A :ATP.Aܸ :AiY(.AYM :A0.Az:Atn) .A :A.AlY:A/.A\,:Ah.Af(:Aǿ.A0M~Y :A0rxi.AR?!:AxAi.A4":Ah~<ؽ.Av":A3hѻ.A-!:AL.Axc :A~.Ai:A,᩶.A]_:Aa.A:A.A^FZ:ASzm.AD<:A~F<.A.z.o:A..Aw@:AHu.AѤs:Ar,.AЩo[:A_!Do.AzL:A88g.AY:A11.A.֜mm:A O.Ae:A4].AE[ :A̗.A( [:A1P.AH:AcӜ.A6sJ:A8uH.AN|:A .ACsF:A^.A:AyJ.AFp:A1ۑ.A:ALvȐ.A7:A\,'.ADW:Ac_.Ah8$:A ㅊ.A Vr:A${ռ.A:AGj.A^:AVӆ.A:AǽjX.AyΟ:AIۄ.A(Ch:ApϺ.A8j:ApA :A``.AyIq :Az]g^.AՓK :Aq].A؞c7:Atƃ.Z.AOlT:A Y.A&+:AV.Ai<:A0 {V.Ad :A=~U.A[ :A&mU.A :AܲWU.A3yrv:A'yTU.A]U:A`ysT.Ah:A]xT.Aן:A_S.A:AKR.ABy:A.R.Ai;K:Ai#O.At5:AFŮM.AA= [:A̚`L.A58:AlI.A 9:AH.A;:Ah$ F.A|u%;s:AtGD.Ab:Ap%vC.AB6ۈ :AL-"A.A[ :A0 <@.ABK :AP҄=.A?Q :A`"a<.Ae"6:A@N:.A UZ:A4{0v:.Ak\U:Aw8.A:A 6.AZ2:AX6.ATc:AB(4.A]Ƙ:AH]#b4.A3|:AJ+)2.A(Z :A( 1.Aq,ǡ:AT1.A" :AtX1.A#:AdzH1.A:A 1.Aٱ :A1.Al< :A}5k1.Azc :A>v&3.A :A y3.A :Ah a6.A^9 :A@66.AmP:AdmXN4.ArJU^:ApU%3.ApE:Abk0.A ;:Ay/.AAȤe:AaP-.A7S:Aԍ$,.A H7:A(b+.AP 2:Axk*.AJѭw:A/).AZi:A^Em).A 0՝:A ).A3գ,]:A_)).A?0O:Ax&).A *:A8R#+.AHuE:AX:=+.A :A]Q*.AV:A$+*.A4H/:AhGS'.A+8:AxT&t%.Auҥ:APi#.A:AT".A>x:AYPl!.Au:A& Mt .A 6}:AEo.Au:AÂ.AYq:An.AD Jfp:A,.AB]:A|#.A@:Au.AsG:A.ATh :AC .AK^:A,ۙ.A3:A`1y.Ab:A+.A{_:A0B_.Ae :A .A2=k:Ar z .A!5{:ApT .AX4:A@M .AdnL:Ar- .Ack:Axj.A~:AXp.A-Zo_:A..A9٩::AxY4.A:A<\p.Aw:AZ.A;8:At،4.A"Uh:A.Ap:A.Ay:A|.A2:A0DH.A(V:AP.sg .AH:A .Ay:Ah: .A?z:A|Zq.A-_:APB;[.AX6:A(H=.AC :A84E .AͰ :A.#.A/BY :A\OX.AvTo :A0`B.A` :Aɣ5.Aw,:AT_U .AlZW:A: .A39W:A.l .AP:A_").A sP:AD{%.AD6:A0.A':A,.A;BI%:A`s26.Ae:A-.Ae:A]|.AzԚ:Ax\ .A:AD): .A*s:AI.AHE:AHM.A\:ADr.AR::A4f.As :AVm.A-nH:AL,wo .A4IK:A`g .AZ{:AY[L .AP69AL+^ .A+ z9A:j.A0.A-n9A$LN.A;an9A%.A(߇X9AL.An* 9Af.A2z9A/.A_1]9AF.A9A9^.A9A w.Aap9Ar$.A3?ӵ9A __'.AY(9A\?.A2ꈞ9Ag .Aʼ99AXן5 .Ae$9Adq .AƄm9A޻\ .A#lן9A$@.A9A8H.AXL9AL+.AӴ]9A()Y.AE9AP8.A*ύS%9AI&.AH29AdI.A9Au.A9Am?.AQ٧9A..AE/:9A}5&.A͛9A`w-Al@9A$4y-AL 89AAPE,-AM{.9A”Y-Ao9A7-A?hU9A?w8-Axt9A!UK-ACy9Ah7-AJo9Aӗ-A/C;9A`-A~Yח9AHh-AJc9A >o+-Afl9AT(-AKٳ9A/o-Ave9AGA-Az9AP-AC J9Aqm-A0j3J9A SV-A. 1H9A -A9AUd-Ai39APȈ¤-AE9A<=i7-A=w}9A܅w-A":9A -A+r9A[-A-W9AHys-AJF(9AZ2-AeN9Ah'-A+ -9ATfE Q-Av9APK-A#A9A$8-A9Ak6-A>=F9AtҐ-Af|՟9A,ρq8-AlO9Ai-A8‘y9A?-AtP'9ADHkq-A㊅9ApEG-AY P9Af -A9A`-A !au9Aħ -Awrd9Ap-A|"9A-b-A5B9Ap3-Ak9Ar3%-AS|X9A3R-AÌ 9A?-A<9A-A\[O9A-&-Ak#F9AO--AT9A|݆/-ATP#9AB?-AY9AZ-A:-9A35-AN9A+-AX-AR P9A-AIJU9A4ݯ-A9Aܥ-A=ݿ9A4W89-AbHo9AРNF?-AHX9A4WK-A39Ax'-Ai$)ɾ9A0NB-A$9A̰I+ս-A}r9AԌ]-Aˋ.9AΥ--A;ߧ9AOx-A 419A!-A;O9A`ů-A$SP9A-AD(9AoȬ-A%hh9A -A799AڹR-APnl9A<-A'_9Ah̉Sˣ-A!+59A, -A~^:k9A >y-ARϣ99A^-Aq9A`yD-AtMP9A|He'-A/x:9A ed-A1e%9A'?-A49AT5J-AɆ9Ax\-A g >9A sO}-AĖr9AN0-Aa9AM8-A|1N9Aȍg-Aڏ$9A F<-Ai9Au-A9)9Ad7v4-Afb9A<ň-A2Ȋ9A h-A4}9As8+-Aq񈁻9ApfI<-A*Is9ARj-AsHر9AZ*j-A~9A1g-A69AfWg-A7mè9A)Ve-AY!9A ]Ke-AŎ9A|;e-A`El9A(me-Aaq9A] e-A5to9APJd-AC9Aub-AhB9A`DdTa-A;L X9AeV_-A9A|k^-AI(=9A:\-AO9AhOP[-AWU9A<Z-ALܸ7,9AdaeY-A [9AxX6Y-A' 9AL<5X-Ao9AwnW-A-9A8W-A;DT9A|WtS-A\*I9A@IY,M9Ados/O-AIC9ATmL-AJ?9AC-Aj9AX!A-At9A=-A9A9A75k--A*l;,9AB:--A(])9AH@,-A6!9A[,-A;9APg=,-Ay9A@=h,-Ab9API,-A9AH 48,-A 9Ax+-A5QJ9A _+-Ao9A$S*-Aj9Ad*-AH˥9ApsN)-A`0t9A֮(-A[9Ax'-A09V9AQ)&-A;Ҿ9Ai$-AZ>9A\*;#-A&9AQh!-A9Aϟ -Aڴ&9AWcV-AFpK~9A|--AmE9AS-ABƬ99At8N-AL9AH-A-D\j9Ah2H-AR:9A-AhҶ:9AY[-AM>9At46-A|9A;-AӳI9A>-A7t9Als-A>9AN-A\U9ATg -Az U9ALFL -AwҲ9A-Aa9Ab-A@YR9A@E-AfU9A9A>,AMD9Ak_#,A/9A k,AOp9AS],Ao9A@Y֋,AJ9A },AQA`9ATH,A߉b9AK,AV%9AE,A 9A ~<,A_29AX#,A$Q*9Aމ,AH̎9Ad^_,A!Q#K9A0,As$L9AS>,Ar9Aعb,As9A\=,Ac,A^9A< 7a^b,A_Տ9AdxD7b,A69Ah]H{`,Ahn9Aп3f_,Awq9A 28^,AMᆛ9AvK[,AB9APY[,A ?9A!qX,Ay%9AnV,Ay\9A(V,A5 9A _IR,Axo-9A`mEQ,A ^:09A0JiN,A*\f39AH'K,AiE9AWِJ,Arw=9A|'pG,AnqR 9A2F,A9A^C,A{6u9AJ@@,Ahf.9AtD#@,AόbI9Aс=,AR09AHҍ<,A 9Apl :,AP%Q9A@"]9,AJ39A۹t6,AHzU_9A8F23,A|h+9ApK,83,A~/O9A[s0,A\B9Atu/,An D&9A>+,Ahxچ9AHd*,A1U9A|eV(,A9A%,Aew9AS7%,A’ӛ9A .n",AԯX9A|",AFN9Ah칋",A 59A-ӱ",Av9AX#,Amx[(9A3#,A 9A ń#,A`z8v,9A$**$,A J|9Ag$,A9A 2\$,A{v9A,T",A59A,f,AU'uA9A/~;,AX29A#,A%9A-x,A9A,AŒĿ9A?r,A2i99A܌ *,A_2+,9A<,AEE@<9Aɺ,A9A@\u_#,A !9AD,A9AMƫ,A9AT&m=!,A:)9A>q",Avȁ9AH5`",ABwכ9A^ #,Ar:As$,A}6:Aݑ9c#,A:#:AБ] ,Aܙ:AH1tJ,Aߌ>:A/%v,A_{'P:A$1R,Av :A ,AʄPV:Ahv,A:ADX,A8i- :A$P&ۮ,At1?5 :A,AOaM( :A:,A$!rw :A,A,(r :A,Ay :An'w ,AJ:ATv,A'w:A,ArPV:AG,AT z:A8uS,AZ :A<<,A~|:A,Ah:A1(),AFlj:Ay:A,_l,A׈:A|v፮,AE,:AdD( ,Ac:A`J,,AL=ۀ:At0,A :A4 h+A}!:AT$qO+A4":A$ Vg+A}":A+A4Z$:AT,AiP$:AKٶe,Ar245&:A`q,A*Ӧ&:A,A#':A%,Aw#(:A%,A쫛B):A4A4u,ArY\*:AJ1u,A% *:A$xw,AHx+:A,A$/M,:AEvU,A"SP-:AtN,AP̌-:AUwd,A,.:AtcC,A/:AID,AK{Ҟ0:A',AS7Sb1:A ,Ai3:A,Ai,A$3:A O^,AN3:A+B,A R3:AXF_,A3:Ajb`+A3:A4D+AN+3:A<+A{}3:AT'+A̓3:AW-]+A'Ϡӷ4:A$`+A&5:A@7 +AtD6:ADO+A`l68:A+ADcN8:A$E"+Aw<8:A8+Ah7:AL+A7:A\V+A,Ã5:At+A")'3:A H+A@4:AH4+A4:A6+AΑ[?4:ADʹ+AnRR5:Atu+AiC1w5:Ad6+A6:A+A%7:A!+AV*28:Ax"Mbr+AZz8:A+A|#8:A0O(+A8:AT$b+A F9:A|XG+Aip9:AT+ARM::Ad+AneW<:A\zw+A<:A3 5+ALsd>:A4+A:u>:AlJp+AxTm?:A2+A/#a?:AT+A!@:A哿+A4L1@:A$`1`0+A[?{A:Af!+AӴA:A;=+A[}A:Agӿ+A8HA:A M*+A]C:AD$+AizC:A^(0+AWE:A+A,E:A@Z##+A<^G:Ad,ÿ+AêG:AO+Aw3F:A}6+Aנ F:A,0+A':/F:A]me+AmQF:AXȆ|y+A"CF:A+AG:Ai6+AH:A(資+AJ:ATTt+AS]K:ApDg+AȣHK:AUNy +A|+M:A+A86Z:AA+A}0Z:A9ҵ(+AOHM"Z:Ald+AzY:A"zo+APX:AA+AjؖX:Ao+ADW:A@f+A 8V:Aӳ+AO~5V:A +A:\V:AΩ&+A`qV:Ax}M穾+AX`V:AۄIB+As]}V:Aq[+AWhV:Ag+AeV:A,+AHT:A?ׂ+A[T:Az}E+AFRSS:A(R/Z+Ab OQ:Aןe+Avͷ9Q:AL+A7nO:A()+AZ(N:ADU۫+A}gL:A\U"+A_1jK:Adz_)+AtrJ:A|=+A.I:A4 +A3H:Ab/+A3ŸfH:A, 12+A}WH:AL[z+A*&CBI:A=k+A5K:Ar5+ARgL:A+AT(M:A|R'+A@O:A|)X+AK׷P:A<o~+A'UQ:AtѠ+AAHR:Ap.+A)7ZS:ACތ+AIT:ASݰ+AyCU:A,7+AxU:A$Jޟ+AZXU:As+ASܴAU:A4"5+AST:A K=+A~\T:A e:ʘ+Ai5R:Ah$+A=TS|Q:ATO+AP:A -+AwC/FO:Ay3+AТCN:Ad^+AY N:At+AfiM:A6n+A}M:A5O+A@AO:A$i+Al{jO:ALm+A篵JQ:AbN+A\Q:AM+A$<,S:APzK"+AL)*T:Al+AU:AT`^j+AV:A }{+AQ/oW:A7ʍ+AS.X:A\A+A(鏩Y:A&+ALZ:AxW;+A[:Aμ+A팭([:ALoF+A92[]:Awĕ+A{.km]:AZЕ+AF_:A@[+A^o_:A󾎗+AY`J/a:A1mƗ+AHܣ c:A]+Azc:A<7+A:~d:At~s+Ae:A|jۚ+AoŐSf:AXl&+A3vf:AW+A=ODg:Aȷwd+A4g:A,YZ+AVh:A4Cht+A.v`h:A$F+AkTQh:A b(+AbSg:At@+A: Kg:A,a+Af:Af+At}f:A"+A f:A8:+AD0g:A[Є+Aq_h:AZp+A3u\!i:Al_+AKGk:A'z+A9]k:AP 2x+Aۓk:AtE~+A7.k:A Ce}+Azlm:A(~+A8m:A-"~+Albn:AQd4~+AcR_o:A&]M~+A,9DSq:A3~~+AKOSr:A:~+A@Fs:A,d~+A):u:Af~+AE.w:AԠ~+A9;Kw:A$ ~+Aey:AjF+A~p{:A a+A[$|:AEԀ+A(b|:Af+ARͿ~:A\P+A7~:AX$+A Am~:AL+AT~:Akﱬ+A;x}:Ac+A!P|:A$S+Am|:A4 +A'sz:A;8+AK4/z:AM +An{:A<2+A -}:A+A퓋}:AATU+A?~:A_+A~QF:A+A0o:APZOǒ+A :AC+A`l:Ato)Q+A KO:A,@G+A9~+:A,EP+Adn:AP#ڇ+AF%G{:A0 +A 2?:AisS+AO2:AЀDn+Ahؼ]:A4~+Aa:A|3|~+AK:6:A&|+Ak:A<fy{+A=:A]{{+A?Y :A+.{+ARb:Y:A8wW{+Aû:A z+AA:A0y+AŠ:Aw+Aӌ:AȤ6t+AE&{:A`t+AOi<:ALfBr+A&/:APq+AHd:Aao+A}$:A25?o+A*A:A'| al+Auъ:AD]Ki+AE]:AYsi+Ap :Aaeg+AXT:A<GVe+Ay]:AMZe+Aэ:A䱸8b+Abm:A8Q W`+A9:A.e_+Ap7.:A9]+A~_:A q[+Ad^y:A3:[+AK:A&X+AfSr֠:A`GW+AO.:Aئ&qU+Ahѕ:A̻T+A9:APG#R+AϞc:A-ÏQQ+AaK̗:A(:N+A<::AXM+Aė:AXJ+AJF:AXYG+ARY ߗ:A8F+Ax:ABD+A~Nq :AпD+AK^:AOD+AӖv.̛:A86D+A1u:A?7D+AбF~y:Ac9D+AGެ:AaKC+A:At=9B+Ac:AXp?+A3j`:ATR=+Az:AL1D<+AL`W:A8O]:+A }:Axq;+Ao":A{r<+AQ?:Avk<+AMs:AJ=+A%:A >+A]ǵS:Ahv>+A&:Aw0K>+Ad@:A;~n5>+A3'My:A.(=+AJ=:A+=+AaOM:A$;+Ad:AT=3;+AܬXԭ:Al9=<+ASխ:A<+AFf:A$i=+AƗ͸:Axd|_>+As&:AxO<+AlG:A8gc<+A~bJ:A9+A-+A`%x:APw<+A7!&:AL+A8ն:AXbc>+A{jl:A+A_:A+?+AVy/:Af?+ATSy:A[$?+A^:Ax_n A+A S؅:APA+A*:AvgC+A!:AԗwE+AI;(:AWF+AYy?:AF1/G+Aw1:APJ+ACud:Au*fL+A :AJ,`M+A/N:AXP+A eW:A?#)P+A"$:A̽=N+AbI:A$M;N+A:AVHL+A <:Ap&L+A#`|:A$~-L+Aə:Ato]2L+AJ#:At^fM+A/o:Al_O+AP:AD69O+Ac+_:A$[O+AˆA:Aј M+A:AIL+A :ATK+ATd=;AH+A>/4;Ap!G+AvLd;APF+Ai5-;AtE+A$ ;AaE+A;A0cdC+A(;AH-;@+A:ںd;A62@+Am爫;Axju?+A} ;AdT@+AeFrl;AƟ@+A22 ;A1>+AꟂ) ;A=+A ^p ;A sRd?+AdJr ;A7 A+AY#9 ;AV#@+A-͆ ;AD>+AmW ;A)=+AzU| ;AtGT:+AT@ ;Axe_9+AS- ;AS6+A.q! ;Ax5+A*ARhu;A\*AMP+;A@]ي*AnKO ;A0*xC*ADʫ ;A*A75{";A(Yax7*A(O}";AI 9*AͫM-#;AHV*At#;A B*A}$;ALZ*A#;A*AC l#;AnY0E*Auۤ";A39*A^t";ADD*A|!;A%C-u*Ac ;AΈ *AԂG ;Aloh*A/z3L ;A)G*AdR ;A< `*Av@QS ;A(p_غ*A(9!;A}4*A#>C";AT*AuC";AL\ *Ab#;AE*Aps$;A2Z*AnG%;A zӱ*A!';Ax-Y*AADI(;Ax y*A+);AHD*AWC6oS);Ah2*Ah>*;A-߹*A9m*;A*A,;Am*ANc,-,;AG*Ag_.;A\^*Al(0;Au*AZ>4R2;A**AI2;A"*A^>x4;A3lK*A[ g5;AXbp*A.55;A,^w>*Ar{6;A!%׮*A-7;A3 *Ab8;AY%ӫ*A52e9;AjO*A79;ADu*A0y!:;A)tAU*AfyE:;AAah+*Aa5O/n:;A3*AmU+:;AP*A-t9;Aϓי*A$]9;AHSj*A攽B:;A $l*A,.:;Ap5*AG;;Ah VT*A};;Ag_rd*Aw;;A2*Ap;;Ahฆ*AU<;AɄ*Ac5<;A*Alf<;AY*A.<;At]+'<*Az=;A Q4{*A&8>;Apxz*AmR>;A|"'5x*A>C?;AlRt*AF?;AHq*A?;Axep*A61b@;ALRm*A!nA;ArTѰi*AzTA;A]vg*A*ESSB;A4%Af*APC;A!c*AH1ND;A@k{`*A_2HE;A+]^*AF;AK*A?JG;A8J*AUF;A잾H*A-?E;AAuE*A.Z 'E;AEkyE*AodD;AH~EB*A6oPD;AWiA*AL C;A\h>*A;mC;Ad*>*A'ycC;AH-2>*A;]C;A:*ASd*VC;A $ 6*A`J;VC;Af6*Ai0qhD;A4(03*A%aD;AO'0*A,tD;A/*ALsF;AMr-*ABYG;Afś+*AyH;Aeqh+*A nI;ALcx**A\0J;A(rv**A3ލK;A )*At9K;A)i)*A#.M;AL+*AW "O;A\n)K,*ALP;A-*A/ fQ;A-*A|$S;A*b~/*A]NT;A-0*AD yT;A#m/*A6҂T;AdȨ'-*AqOT;Aq~+*A% ,_$S;A%(*A*]րR;A'*A R;A辟bz%*A?Q;A_!*AP;A< *A 2P;ABEN*A[fP;A YZo*AtdP;A]EH]*A$zBNQ;A j.*A'R;Ar'*ALR;A*AXZWS;Ao*A~T;Ap*A+ T;A{ *AU;A< *Ag̬U;A&, *AQ V;A-*A_3jLW;AD*A ݆W;AXL*A0CV;AҤ*A4"V;A!Y*AR4OT;Aԇb)AwNT;AgU)AiT;A]k)A*ϛR;A)AR;A)&)A;wd7Q;ALT|)A0\ߗlQ;A_)AxQ;A(t쯍)Aؖ)O;Ah)AMO;A̼)AxM;A 5)Af7L;AG)Aȧ5%L;A8&)A][C@PJ;Ax_?)A` VaH;A$=)A0~H;A$)A#FaF;A&T)ANPE;A(k`)Asj7 E;A i)A`6D;AX})ApD;A][&)A5D;A:)A^1D;AL{)AB;AMvV)Ar,B;AL:)A,A;Ap@)Au2A;A!O)AdFA;AXyS)A*vA;A[-*A.A;AY*AB;A3*Ag"'7;C;AX+&*Av7C;ADq*A|/C;A`Y *A ݼ*C;A'e*AJB;A0*A}\AA;A,P*A= A;A*A:&@;A*AL9?;A|*A)+;2?;A~^,*A,09>;Apk*ANP>;Ad+<*Ag=;Al4|*A;;A:Wb*A ;;AdC*Al[O:;Ax*AM:\8;Atݚ*AOye8;A Ԅ*A`W8;Ap mM*AÀzi8;AƁh*A)Qf8;Ak+<*A:'*8;A4 *A{g8;A0w *A%χ7;A$ *An76;A9*AD/16;A_ *A(A6;AlgN*A)M5;A)Ai+F4;A 3֓)AQJ\4;AO)Ap4;At\)Ayc5;AXG)AO4;AH)A#3;AW7)AK~3;Aiox)A?y2;Aa ;AxH *Aw;A&_ *A@PYM;Al*AWQ;A(W*'*A;Ax^Ɩ*A-;A*A̟;Ap)*A@!;ATӅ*A,B;A;Ͳ*Aw><;A|FH5*AkjBO;A䉽z*AsG;ALz}*Av};Aq*AbJ;A4;T*AŸy?;AN[*ASk ;AlaJ*A< ;A&*Ax#b ;A!.R*A@2` ;Ao *An9 ;AUY[ *A ;AU] *A[kx3;Axˉ*Afv;A05*Aa.;A,a;*A]K;Ah*Al;A /*A}M.+;A *A6x:;A0 *A ;AHފD *AIP;A\}`/*Adf;AH ќ*Ai`~;ANZ*ABGV;A͉)AqT4;A9,X)A2{;AL:)AS^;ApHe)A,/Q9);AfH>)AJaգ;AD)ALyi-;AԶqԒ)A φN*;A$G)A4;Aˍ)Ax:Ne;A)A`{;Ac)Aϥ=;A )AXj2%};AK)Aacdc;Aks)AT ;AUOk)Ae i;A)AQ#ǿ;A59)An;AG,)AE;A*)AZF;A輑+)AI;A` ༤)A08~:A$>gY)AA.\:A 57)A:A*)Av`$:A])A&?:A=|)AK:AT7)A]9m(:AF׬Z)A}:Ae-3)A߉e:A@:!H)A[:A$ë)Aj4i:AQ, )A>l[:AE:)A:ApR1)AÁ:AoW f)A$tΆ:AZʾ)AEً2:A)Ad>0:AD)AWHe:APomt)A]:At)A:Me[>:A+Y)A n:Ah!)A1$D:Al.)AWWmE:A`l)Ab:AnRR)A̍~:Ax|)Aߚ:APCJb})AiΥ:ApZW)A!n+:A|r)Ae :All#ތ)Ai%:APS)Aw\ٜ:AG1)A|"4a:APu)A%:A)AJ:A˰P)AgF:A )A;X:AX\)AI"n:AΚ)Ak|:ALH8)AVSh:A, )A0) :A=:)AEV:A䚉AO)A^(}:A 2)A(:A"*)AW:Aȁ)A'b/:AЦ)A73V:A4y)AX37k:A` t )AK\:A)A(Nĭ:AY&)AX+:A)A:Ad벗)A6m:A`KiMp)Ao $:A`p)AB);Aڣ-)A ;AĞ)AUF#;A΍)AZe;A|)g)AN 6;ALO)A;Aqb)AU;AX K)Av;A3()A &3;A(s/)Aٙ| ;AN)A]| ;AHN)Ad0 ;AZ~)AS.. ;AVe֗})Aci ;AZga{)Aɘ ;A<x)A3ܞX ;ABx)A#;AUA|Sv)A]F;A(v)AS9;AyϐD;AhSvr)AnPi%0 ;A5o)Ad ;AY:n)A ;A~l)Aw ;A(3l)A>;A`hj)A8V0;AIEEj)A$w';AUh)A;A?ee)AZ2;AL0ke)Ae;A@B Kd)AYg1;Ab)A 8Y;Alpb)Ax>;A8Hc)AN#;Ard)AU* ;AdAe)A̤p ;AD2e)AMX;A$9g)A};A$I;cjh)AgGu';Ah)A\!;Aylk)Ah{J";A *m)A[Op";A -n)AUB'#;A,CIq)A~4$;A7Cr)Aqo.%;A(#s)A+';AOts)Al$';Adns)A͠ );A8ZUt)AA*;At)A#*+;AlG)u)AL,;Ad9v)A-(.;A= @)A%;Au)A;;AhO<)A[Ջ1;A3s8)A8]?;A7)ATM;Ah5)A>;A"%4)A_Ln ;A x3)AR /!;Agk1)A$";A,0)A̘F#;A-x1)At _O#;A1)Aeሞ%;AdW.)An&;A8L-,)AM݆E|&;AT,)Alq&;AXHQ()AYf&;A0i$)A(^&;AD8&!)A#&;A|< )Ax7?V(;A ;8)AV9r(;A;A}0!)Ay&/@;Ad/l)Ak@;A1Z)AA;A)A JXC;A]!)A jeE;Ah)AGc?E;A| )A ܣE;A6)APSE;Aȉ=)AC=G;A8 )ACI;A)A{I;Ad@,)A-g'J;AO)AW$K;A@H)A&lL;A]X )A)bٰL;A/w)AwkM;A?kw)A'M;Ad)ARO;Ae)AkP;ABt9)AhQ;A)AIQ;AeI)A2JS;AC)A4 NT;A)Am9U;A@)A;R+,V;A@)AW;Asd)A4ҮX;Ath6D)AڟHZ;A`s )Av[;A )A v \;AQl )AC݋];A@ )AS];A@E )A Y-_;A4_x )AK_;A +&2T )Ah._;A܄,)AdW_;A)A$,^;A`)A}' ^;AK8;)AGZ.];A)Awd\;A( w)ADh )K\;A,ܦ8)A6:b[;Aၭ")AK$[;AHX#)AKZ;AqE&)A%Z;A<\&)AQR [;AK6*)Ay_0[;ADH+)Aۃ\;Ah.+)A];Aԩ+)A"p^;A8.%m+)AiNh_;A ,)A;_;ADLY-)A7G _;A{1)At_;A 5)Ah`;A|U`7)AR`;A "?8)Ao}a;AG9)AF>Rb;A7r;)AZz_c;A Y=)Agc;A⪃G>)A Vd;A$9A)A"e;Atw)C)A\q9e;Ag$D)A҈6g;AzVG)A2؃[h;ADJ)Acn i;A|9V0L)AKKi;A|sL)A&xak;AFN)Aͧk;A N)ATF\m;A<onL)A;o;A4J)A8so;A`KJ)A3?io;AtNG)AE0gp;A2YC)Ap;Ay+B)ACتq;A@)AsEr;A=)A,kt;A-R;)AOTrt;A ND;)A Wu;A7)AVAv;Am4)A#0'Dv;A`c4)A1)Kv;AdA0)Al0ARv;ALZ,)AZ:[҂)Aǩ;A/)Ad;A\'[)Aw7~;A07)A5G;Ahb(ANR";Aq(A60;Ab(Aդc;A3w(Ayyp;AW(Ad;A{(Aӥ;Ax(AA ;Ahߍ(AܷY[;AG2W(AH'1u0;A?(Av)2;AP>#(Aݰ: ;A,(A jj;Au(Al;A (AYM&˯;A`Ϟ+(A#);A<&3b(A+xㇲ;A}ǘ(AQKR޳;A2>(A7 /;AT h(Al;AXx(AFh;A7C(Ae/J;A-L(AYԸ;A(A;A;(AS ;ALm;g(AJ;AD>x(A;A 0(A ;Aб(A>N ;A`((A2;A$(Ab4;A(A ;A|^+#B(A=s#;A (AHQ;AtZ(A;ATĩ@(Asx;Af%(A;A(A78kjG;A(A!;Al(A;AI6(Ac;ATOO(A%z+";Aij(A( O;A):r(AC^;At(A 8;AZ:(Ac$ ;AlVD(AHb4;AȞ(A-H8;A(AKa;AT(A+;A{.6(Azі ;AxA(AS:;A0Z(A!k;A'x(Aۜ;AS(Aή;Ac'n(A ;APpMkj)A`1;A,)AG 8p;A(e)Aw+;AptlA)AӘ,;A)AA;A{O)A1yo;Ac)A^8;A?)A{q;Ah.R)AK;A8M)Aɼv;AM)A9);AhOy)A-;A%!)AMU;Av)AT;A F2)AG;A`O}P)A;Añ;Ac= )AA;A )A^P;A@L )ABC;A T)A!%1;A, )Au';Al, %)AJVpf;AW)A*R;Ae )A1 ;AD[ )Aq.;A-d)AǮH`;Ai)Ac?F;A9)Ajz;A (AqѢr;A`)(Abj0;A](ANbd;Ayꑀ(A[gsg;AoWx(A ;pf;A5"((A?mɯ;A@o4(A=;Apl@(AX6{;A(A-{;APq(A\{;AqRs(A2V#;A(A.uk;A4?5=(Ax8+;ArOg(A77;A|_(A;AW:L(Aꣾs;Ai(AXs;A60h(Aq9h4;ADJs(A z;A$Nv0(A;Aר@(AXf1@;A؄VV(A+-tߜ;Aj(Aެ;Ay(ADt;A)A4;AT`3)AF;AD]5)Af!;AΪ )A-;APF3 )A];A@ )AF^t7;A,PR )Aݿh;A;)A3|/;A@'`)A,\;Ak>)A~;AL)Ao;ADT)AKc;A8&)AR;Aܗè)A'ծU;A)Az6;At_I)A2sUi;Asr&)A;A|C4h")A:-d;A%)A{;A0\&)AD ;AE))A?H;An|*-)Aqj;AƳ0)Ad-F;A͵1)A@X;Ak{a,3)AnK;AXh3)A@;AT"+>6)A3X;AD^8)AEL;A<:)At"1;Asp'=)A?KX;A$2u?)A ;AH@)A>8-;A`3XB)A-;AT_A#E)A-:;A@O#H)A֦R;A$ϝ$I)A6?WW;AgAJ)AkZ;A#wM)A˺;AlbO)A ;ALEP)AHCu;A?IR)A)'d;AQR)A$;A3`R)AAOR;A *R)A L;Al]P)ALϜ;AtrNO)A7F)AJ*;A0.#iE)AAP*;A E)Ay`;Ap#E)Ar)>;Av;D)A ;AeD)A;Ad59D)AD;AtpD)A?+;A,ZF)Aþ;AxG)A3|Y;AsAI)A.\;A>fI)A;A9eK)AbN;APK)AM;A:O)A˛;AnjQ)A-;A4CS)A[OU5;An+V)AM@"=;AsC Z)ATr;AC {[)A2$;Ali])A"=گ;API@l_)A8L;A-ِa)A%;A-rIb)Ah;A3(c)A;o;AĆc)AjhR;A(L=c)A<TЫ;APc)A" ;AǺza)AV;A$"Z_)AC;A|xe`)A*SE1;Aa`)ACN;A`)AdN$;A$c)Au +;A ^d)AK!Mr;A4wh)A]h;A. PKh)A]bf ;A/Gj)A[\;A5Zm)Aۉ;AbVm)AsI;AUo)ACzl;A8iq)AM49;A@s)AH;Ad\t)A6.L;Au>w)AS&;;A(Vx)ALnk;A㬆z)AҰf;AJ!~)A?b;A  )AA;Ah7')ApY(F;Al@)AnH`;A` _')Ah7>{;Ahu )Ao;AD)A:D;A?)A ;AݑȔ)A}>c;AP Nw)AR`;AXP˨)AGw;A8Nh)A<$;A\қ)A8!GT;AD#)A)E;AH$r4ŝ)ASuk;AdΟ)A־;A\2+b)AXtz1;A̟C )A~;AG)A ;A+v)A ڣ;AC5)A`<,y;A%)Atk;Aup)A&3;AFж)Ao;AX,k)Av;AMN)ALƵ;A F)AEG;Ad)AP;A()A'G+;ArH)ADMR;A9)A#yJ;Avr-)A[B*;Ax,*)Aќ;A*o)Ap`W;AOC)A)SC;A/2 )A7ڝ8;AS)AM;At)Aru<;AH&])A\>%;A$г4)A!{;Ad69)A@1;A,")A T$;AHE)Ad'P;A(Z)AI\;A8])AbK;A0r)A#za/B;A,R_)AjJ6)$;A;A6|*A)r;Ab*A?e,B;AsO*A]Q:;A4l*AF@غ;AO9*Aw^;Al*A݂,;A p*Aqw;At*Aʻ`;AUc!*A.Rm ;A <*"*AV r5;Ad#*A0y_;AUڹ%*A W3;A|Q"(*Ao$k;A(*A2;Al+*AF;A`+*AzT;AD-*As;AG3%7.*Ay;Aާ-*AmcY;A,*A}5;A,,*AK;A6^,*A;A(O.*Aav;AY0*A'yQ;A$J4*A!O;AT)a4*A/QN;A\]g4*Aݐ;A|w_6*AiH;AT5p7*A̲-;A|aз9*ALt;A@fQ>;*AMY;A|E<*AH Z;AoF?*AGŬ;A/ B*A)^~H;AKAWC*A"r7;APF*A'#;A4!I*Aa;Ap4I*Az;AjM*Aslݛ;A9$M*A;AhO*A5Ry"m;AkR*Ac$_;A$|R*ADI&;A2?U*A0c,;A0U*AV1Ǔ;A\OX*A ;A,z%Y*A(;Au\*A*A;Apz]*A';AH;`*Aio;A$`*AJܑ;AoK*_*A/;A^}_*AP;A+n?^*Ax;A`(^*Aq ;AT]*A} J*ANf;AQI*A.(;A~F*AS;AX-F*AH*Ah*AF*AM4 /*A\m <Va)A}8^)AzmC!8C[)A{;.)A{THB)AÇ?)AW׺=|)A, Iy/SF(<(AQ4#FL(A-ȬWtmo(A~O\(Ac~)/*WZ'Aw0@'A)fA3Ǩ?$(A'h/D(A>4+=(A |' (AOau+ (AcZ=AP|+(Aشo=A/Zr(Azl=Age(AN F^L=Aڴ(A0 Y1=A@zUI(A;$=At (A N=Af(Ai=Aذ~(A_=f=AXW(A[g=A(A5HkY=A(AWIJM=AF?(AuO=A(A=Aٚ7(A>0I=A0ڔ(Ai` =AP(A(KB =A(ծZ(AW{n =AlŽ(A) =Apy6"(A| =APͰv"(A\[!=AP#(AYf "=AlFYX"(A?r_"=AL (A0c"=A(A~y"=A\(Aګ#=A< xg(A&}#=A(ڡDg(A!MM%=ATcK(A貣&=ATįE(A '=Aj7(AĄ!))=A(ACh)=AP$(A+=AX6g(AhO+=AXDI(Ai _F+=A' (AXy+=Aă裧"(A6F*=A(W$(A>%+=AI(%(AC55wF+=A4S%(A?,=A/b$(AuD2-=A(ɿ$(ANK.=A O"(A.=At-6"(AYv/=Ap"(A8;/=A0(($(A6YI/=A$C%(Ap@-0=AQ'(Aҹ0=A@ZC&(ARl@2=A`]#(Aef2=Ap"(AR񔭠3=AS (A7o4=A hS3(A9':4=Aln1(A4=A@#(AJU6=Al(A 67=A.y(AVL7=AWZ(Acy9=AŔ(A 9=Aı(ApNr:=A&(A":=Am+(AoŒ:=A|B(AD8:=AX& (AB =;=A(#(A 8Q;=Al#(AǑK!;=A'(A/L5;=AҤ'(A~s<=A $B-*(A;<=AȄ+(Ax==Ap.[+(Amy>=A3L-(A>=AiB/(A\_mW?=At0(Anj?=A=2(AցG@=A0ǀZ3(A#@=A U%]5(A]@=AVB9(A-@=AA~;(AU@=A,)=(AKB@=AJ/A(A`|@=AFA(AbFzB=AƄB(A/B=A~{B(AMSC=A$)οA(Ar PC=AIo@(ACRD=AzUD<(AD=A`}:(ARE=A;&9(A/ mcF=A0l%5(Au.F=A4(A!4G=A2(AUH=Ax>'0(Af' I=A@ԡH0(AJ=AHz.(A+^K=A@LZ-(AzL=Apκ,(A5XN=A~&1+(As.^(N=A)]*(AfN=A89'(A#ťN=A̶B'(A(ؖ O=Ap,2#(A7eO=A( P(AmO=AŰx(AoJP=ATCY(AٲۅDQ=A _(AĽQ=Az(Al aaR=A) (AIx@?R=A6}(AMQ=A_(A,SQ=AsJd(A@P=A0D4(A3zFP=A' (APBO=A@a (A8VN=A0ڄ(A'4N=Aq(AXN=Aqw(Al@P=A.(A{w5R=AG(ASQ~owR=A0((AV[TS=A|s'AS=Ayrj'A>/S=A\+g7'AzT=A<~R'AR}T=A6-'AS=A"Nj'A;C[S=AG'AoT=AX(AƦ[m=AȆ, [(A_/;m=A$*G\(Ak=A,7d_(A($k=AȀB_(A\*k=Alb(A*vk=A,ic(A5Ek=A9d(Ajk=Ä0e(Af-l=AЮ(pd(Al=A80a(ACO=m=Aua(Aem=Ae;a(A ,&o=Aj*,a(AҿIo=Af`(A.p=A"^(A - {#(A)]=Ay2Z"(A=A!2!(AuZ=AL]#!(A"N=A`24N(A*=AH(AՅ;=A˘M(A:}=Aw (ANܖ=APrWR(A2=A,$(A鬘=A4(Aq sX=Ay(Aph=AH`(A"=AXB[(Ai=A5X(AҤ^<=A (A =AFq (AZ\=A\k (Ao~=AФ^ (AbR=Anq (Ad͙o=AD@ (A02=AE(A P=A%s(Am.a=A,(A@n=AȤ (AK7$=AMȰ(A=Aܠ(A`=A(Aʻz$=Ah(A1Q=AD9D(AV*=A]ƀ(ABf=Ah'0(A%V=A |K (A=AL8!(A|=AV|!(Aן=A0Kg"(A& 2=AX\"(A% =AD>#(A@ڇ֞=A$(AbzO=At%((A%)Wh=AP[((A|AO==A+(A1ʢU=AM*+(Ah1+=AHH'(A~>PD=AlV<'(A*٢=A5%(A.=AXD$(A2=AP2c#(A̞1=A<5"(AfQI=A`$Q\(AX{=Aظ(A'i=A(F2(A{]CĨ=AX=(A6ΐZ=AQ(?(Aƞ"Ɠ=Ax (AhifM=AXvt(Am]=A)w(Ay=A\: @ (A>#FeX=A,2x (A1?G=A씯J (Asܮ=A![ (AFTD=AL,N (Aį=Aq(Af==AČJ(Aci=A@{(AG+=An(AY=A=Ax{ȵ'A=,=ALp'AtfC=Ark'A&V=Ar'A&=A"F'A~u=A07'Aaz=A(r'A1Gi$=A'Ad=Aّv'A"Jf=At'An<-=Aq'Ariζ=Atq~'A =A,U'AFaq¸=AT1=A,+pdQ'Az'z]x=Ad\'Ag=A Sg'A1N=A 'A^KV=A$pm'A;m\=Aן'Am]=A8p9'A=AV#ғ'AHl0=Aȅl 'AJ=Az;'Atf-.=A'A+ =Agj5'A#=A'A<=A('A@A=AB'A7.=A bNv'A8=Aa'ASɟ=A, 'A&=Ah!Y'A_U<=AMӕ'A}=A.Is'A=AXC'A!M=A$_'A,=AJ_'A/AwC=AL?I~'A=AP 'AX`=Aq('Au=A ?'A( =A|o18'An%=AQ'AJG^=A]'A%L\k=Ad 'A^"=A߫1'A&s=AMG'A騰7M=A`E'Ad=Azd'Aћu=A:hD'A)˂=AN%'AN%4=Ab(M'AEL=A'A=A}+'A=A(ki'Al=A(Q}`'AX#g/=A@'A m=Ad&'AW=AHj'Aḏz=A*m'A3]=Ax!P'Ar=A,8OZ'ATl=AD'ACY=Am@ 'A kj=A?xo'A)1wD=AB!Q'At!4=A9y'A=6=A L'ApA, =A kĜ'AVJ=AtL'A.{=A-'AƠ=AsKY'A7σ=AT'A_:=A^ 'A==Alڀ!'APإh=A c'A(A=A8Pa'AAv=A(c'AO=AD'ALG׿=Ac;'Apq"=AB('At=A@'A݆=AH$g'A7܃=An'Ad =A!6}D'A=A^G'A:r=A'AeDw=Ar'Aq=AX [i'AWL\/=A'A `*=Ap䃽l'AHWX=A0Ll'A?\=A4V W'A܃=A/'AqO=AɯϽ'AA\"=A'AU=A@P<'Aيb=A'Aצn=A gz1'A[{׎=A(Y'A4=AU'A=@ƀ_=Aͥ'A==Ap>'A§s{=A1'ǩ'Al_8=A(7s'A#N=A4'A>)=Ah'A=A.'AUUu=A2gC'A-a=AȌ'A\=Aq'Ah>AN'Aȭ°>AH*'A$>Apꅙ'Ay!>ASB:'Acq>A8'A6z>AL'AFIc>ArҬ'ApMF>A#d'A/`P >A thq'AQ >A8'Aڎ,5? >A2'AU0Ǥ >A6'AWQ/ >Ast'ArH >ARN'A?妫>A)z'A28>AU,'AX >Ay'AG>A3U'A>A0mƮ'AN>AW'Aw;D>Ah~'AaДM>AB!&1'A7M>>A!'A6>A(մ'A]m/>A'AZP>A'A4sӚ>AH>v'A[5>ADbɻ'A>AlNv^'Ap>AfC'Aj>A-3'A}>AhAMD'Ag>AȴW'A*F>AA'A3!>AdrC'AxR>A3S'A(^_>A#C'A$>A8sŐ/'A;?>A'A,]|>A4x_Jo'Ad>A{pi'A>A*?'A >A{'Ak!>AP$1'A׾' z!>AE'A&O">Ax%3N'AH(#>A>@'Ak<_#>AlRƁ 'Ab!>Ad'ALq7!>Afk$'Ab|$!>A-'AdYB!>Aj'A%!!>A4'A"">A8?h'A݄ $>Ah'AXm$>AE'A n~;%>AdR8'A:&>Aِ4"'ACw @&>AԈ!'A%07&>AP'AĖ&>A|"'AK@'>Az|%'A|VT'>A@8'ATߴ'>A8ܬź'A'>A^'A7'>A\'A=1A'>AC='ADm'>A:'AJg(>Ack'A1N(>A8@'An(>A8A'AL%!(>APE 'A@+(>A'A_o8(>A㭊!'Adl,E(>A.'A!}R(>Ae;'AO\(>AZF'A9]og(>A%tQ'Aq=:(>A!6'A.?(>A̅'A DJ)>ApU:'AJs$O)>A'AIS*>Ax(J'Aik*>A0gCŁ'Au*>A@.'Aϥ+>A8q'AKWX,>A;-%'Aݴ ->AV5'A;.>Ax4'Aݤ1.>AD 'Al0>Alһ'A}`1>A4'AA9|'AFdL4>A i$'Ar-Y4>AĨM'A1>6>AX4Om'AM 28>A׸'Aǎ8>A8Z}̸'Ax!:>A\Q'AN1:>Ax\'A1';>Aq'AD!<>A\'A=>A,KukԻ'A!J>>A4'AMs@?>A b'AX/?>A;'A=2@>A`'A*?@>AsK'Al&@>At'A!@>Ah!u'Aʮ^u?>APX:'AmjT?>AEa'Az>?>A'AV?>AS<'Ao ?>Ax'A=z2@>A`'A?>H@H@>Av'AE?>A<|ۿ'A_>>A\'A4'L=>A5 'A?\J=>A؊'AzPJ;>A'A)x;>A'AKh$:>AL`w'A>5&:>A|/0'A`.):>Aw'AXF:>AXa'AVw}:>AK'Aإ:>Ah'A3 :>AT{'AQ 铦:>AT'A&9>A\?X'A7.+9>AKZ'Ao>X7>A蔪B'A3 6>A*@S'AL`*)5>AN~'Axd5>Aw 'Ac4>AXR'AI'64>Aam'AM3>Ab'AF۔3>Aשf7'A?Bo3>A|'Ab|5Z3>A4Q'AtQh?4>AL>'AL4>AlNc'Aܬ4>AAй'A\4>A(Tk'A46>A p'AAiiy7>A i'Aօnڍ8>Ad<'A,:>AxG5'A/r2;>A Ķ='A*ޛt<>A\q'A@,+>>Az~'Ay c>>Ac'A jG:@>AP`2'ASgdG@>ALtY;'A%|A>APn'A;3A>A0B'AܨݙB>AA'A@C>A0 ,'A8]MD>A;m'A]/#E>AؙC'AZpF>AP{'A.rG>A'L'AH>A&'AgI>A 7'AI&J>A~'A W.J>A@ϟP'AڣJ>AaOv'A}ޗHK>Ai'A:vfL>A4tZ(A_UM>AE(A{ÒM>AM(A 5N>AyQT (A_:O>AA|} (A%P>A & (ASQ>A "I (AWc^LR>A (A0.DS>APhq (ASڂ _T>A8u=(AT>A+(A4H:V>AM Y(AGpV>A4 (AeWMW>A< A](AaEY>Aɵa(AKY>A4tIj(A[>A$↛(A\>Ab=)(A>]]>A@(A&]>A((A;+'I^>A}G(A2Q_>A@v\(Aq5_>AC&(A as6_>Alo(A3c`>ApJrg (Aod1`>AdC (AWyb>Ae[ (A TP c>APL (Ac>A(Ac>AEk(Ae>A/~{(AT:e>A>(A嵪X+f>A|2 (Aef>ALyK (AUg>Ac (AOh>A/o (Ai>AH LT (Ai>Al*9(A2j>A!4u(A[ k>AD(A | l>AY҄u(A)5l>A$-(Ȃ*m>A0(A%avm>A(A^Odm>Al (Am>A,e(Aȗm>ALiF; (AI|Tm>Aԃ+= (ARp|n>APIC(A\*o>A&(A"/so>ANC(A9,Ԭp>Az9(As|p>A,-(A_f}q>A`܈n'Atq>AFiG'A$r>AAl''AjHs>A0>(A᠖1t>A(!R'Agbt>A'A++t>A?!#'Au>A'A[! AsIx'ADRw>AT?;'Aν3x>AT'A}x>ATm4'Au"JFy>A'AX*cy>Ap'A!`y>A!'A}zz>AہN'A8{>A{'Aol]{>ApF<'A{>A/'A-|>A~a'A9A ~>AHez'Ai6~>AX=\'A~ T,~>A҂'A>Al'A>z=>AAxǫ.'A‚*>A1V'A2!>Aϙt'AzK>Adjn'A'a\>A$Nt'AAR>A 'A>A,'A]>A|}B8'AZp]>A'A#qj>A|L*(u'A;>A_!'A+l.>Axy<'AS”>A$?jZ'A[>AuHl'A6>ALG0'A?4>A0/'A,_J>AԸDo'A\p>A8-'Asf->A}'Ael',>A8N'A,l>AL喨'A)?>A/'A.mݐ>ATh'Acr >A+[]'An$v>A0'A@qϒ>A()ܸ9'Aa>AxO'Aψ>AP$\'AoXy?>Ai%'A >A]v'ACWK>Al'A&>A|]'A؈–>A1N'A7^h:#>Ảd'Ay>A@z6'A= >A 'A`=>Agx'A-볖>A T'A~`>A'A×>AgY'AL>Ad 'A?t>Aa'A{Na>Au'Aw>A\'A</>Ari'AH=?>A'AQ>AE'AR>Alj'A0R)>A c'A#cmo>ARF'ALZ<>AT*'AjP1>Al+ 'AW>AC'Am9>A''AY $>A|q'A:7>Ac'A>A;n'Ay:>AxD*e'AnejQ>A 1f'A>AA' 'Ar>A"2 g'A^a>A'Axw>Aġ#'AsW}>A9'A3>A"'Ast2э>A t'A3Q،Y>ABr'A\A\稬'A9Bcְ>APG'Ah>Alu1ǵ'A5֒q>AŞZ'A *>A`5'Avd>AT'AjŽ%>Ap(E'Aq>A.'A8d>Aψ'A&>AȪ5'AfOɵ>A6A'AÐ>AAZt:'Aj$O>A6'A >ATF'A%d>K`>A^{Ŀ'A'b>A Υ'AQ P>AXY'Ac-ַ>A ~'ALA>Ah_ 'AWC7>A,v'AXDp>A0ܿC'Aֹ߯>A3'A35 w>AԊ'AmV>AL T'Aл>A,4T'AS>A 'A&4&>AU-'AY>AD1'AF Ѿ>AC='AD>ApV'Az>AQD!'AF2>Aq2,'A>AԘj'Aeli|>A\- 'Ai~>Aʛ'A!]٢>A(~'A+Z>Aof'A%>AtX'AEs>Ah Ы'Ae>AՏ'ARY>AL'AWfO>Alv(ALA>A\Fk^(Alq;>A~(ApE%G >A.= (Am&>A|a (A0->A+ (A9oB>A6 eB(AOd>AXh (A^&K{>A"(ABV>AdD(A>AyD(AE>A)z(A6޿>A Z(A_>AP(A( >AP, (A! 2>A lv(A G~>AD9[(AʾW`>A\m(Ag>AtM(A[p5->AY(A`M>AaD(Atz>A4(AMp>A (Ak#>AdMb(Ae>Å(A(o>A "(A>At *H(AV>A,+(AL>A n2(AV>AP"#(Aϱ=k>A9*#(Art2>AQ%(A05Q8>A0˫&(AS>AL-.q)(A `>Axxm)(AŴT>AL0Z)(AϝY>AtV)(AoRG>At8)(Aˉ>A((A_,(>A)(Ar>A\H7*(A*>Af{J-(AY>A(Rt/(Ai]%>AEx$1(A=:7>At 5(A5,.>A<6(A)S>AD|&8(Aϙy>Ah<(A%>At,tx<(A@طC>A?(A>A\hC@(Ajm%E>AOB(AAxB(Av1AwPF(AE?i>A|F(Aez>A4I(A?Bh>Aq;K(A Ԙ>A)M(A;X_>A,sC/O(A=ްM>A@ iP(A!4>Ac 'R(Ade*>>A܃JS(A<2 >A!(S(Ae>A(IU(A'>AtmayU(A|a>ABX(A=h>AY(A^E>AL\(A$">A$>L3](A"-A(w+X`(ALp2>Aت`(Am.v>A<~c(AJx>Ax+%c(A4mU>A\mc(Agf>AI=%d(Amw >Ag(A-oY 2>A0*ΕGi(AƏ/V\>A@k(AL0>Ayo(AJn>AD9o(A^I!>A$Yws(AAg>Ast(A׊>A*8u(AV0>A(ނv(Ad=l>A5v(AYGk>A\v(A11A@w(AW>AcY!Gw(Aj3>Aww(A- >ARw(Ae%>Arw(AV.9 >A mOFx(A{y}>A\mx(A(3J>ANz(Al>AEx|(A>;sL>AHljt}(AT358>A$,(A!e$>At hX(AJҮT>A./(Api M.>A4w΄(A>AhoЇ(Ag>A @{(A_>A?N(Ac >A֓ն(A[c >A@VD(A7/H >A!(A>Atʼ(A>An (Aۯ)$>Auxl(A¾>Ai(AgIU>AԔd(A;P>À(A4  >Axw,(A-nB>ASU.5(A}>AX T(AdMG&>AE${(A<>AtE(Ak>Ah (ATsT>Av(A!H%֜>Aj\u(AlPv>A?(Af=>A(AJ>AH(A1eݷ>A'/E(AO^۷>AC~G(A}9>A>d(A>wr>AH=+f(AƠ >A:(AJ:5>AF@T(AS>AK߫(AĻt>A$3֬(AѬ1>AAHx=(A1])>Ads5Q(A@g>At;Z(AZFK>Aͬt(A?Ĭ>A@6ŵ(AiX>Adӷ(AM?!>A(AbMڴ>A.ك(A@\>A3妽(A7yK>A?!(A[>A`Ő(A>ATlL(AYȧ$/>A?(A([9>Adܑw(AGÏ>AZ(A e<>A P.(Au0ys>AoB(APWa>AxD(AN>Al)L(AuKs>A`kC(A]@JӨ>A(Ac>A$&t(AE~y>A(Aj7;">A|j43f(Ay_b>ALě(A j>AA(A>*T>A(O (A&\Q>A5(AgGn->A&3(A;De>Af}(AZ4B*>A̼A1(AV ֡>A(N^(A}.F>A (AnG@>Ad6(AI3vq>ALN(A9Ak>AdpO(A;=>A(A2,->ALQ)4,(A߉ ٝ>Ahet8(AvwX>A(](A 4>A P(A^.F>A0 (A[Eg}>A$EE(AA쳜>AI^(AUx>A0(A^ִכ>Ah,f(AΛ>A\^(AEț>ADO)A{>A$X#)A&0>Aw)A(*>A)A=љ>AQ"5 )A >AR!F )Ab>AG0)A.KM>Ay)A->A)Ah%q>A^=)A坖>A|)A=ȯ>A )AB>AHn)AY3>A`)A|§>ATG)Ax{>A)Aē>A`fe)AʼnVۆ>A4#6)A~39Ӕ>APLA)A5!j>At{h)AKvg>A<)A @>A̲ ` )A};>At )A s>A@")AdA$>A #)AdA >A ػH%)ALBwđ>AH_%)AweD>A[:=&)A/C2>At')A- ,>Al')A(A/')A 8>A')AIZ>A')AL>AHg()A0#?c>AA8 *)A߉>Ad]r*)Abb>A,)Aڈ>A@Di.)A3J>A@Ɗ.)A)3K>A۩/)AU4 >A((/)A) >Av0)Abд>A؄0)A^8+>Ax).)A#|>AČ-)Aƕ>ADG-)At= >AҙX+)ARe>Až*)Ac .>A/U*)A] >Aȧ~()A*J>Ay()AXG7>AP`Cd()A p=>AT+U()A/\>Alc()A/ #>A຺')AH>A ڴ')AM>AEl')A+lP>A|lE()Ak>AȻ_')A5L>AO)')A4ɡ>A K&)A i>AЩW$)A"P>Apr(#)A1B>A l#)A{!>AA 8W%)A"uF>A0')Ai>AX))AY3>A6))AUѫ>Ax` ,)AO5p>A 9.)ALm>AXi0)AM!>Ahn>&1)Abc%h>Aܓ&3)ASt/>At{6)AG>A#rx7)ARU>AS:)Ah;&>A噈;)A^x>Aܕ =)A5M>A{=)Aޑ>A\X=)AR>A@r=)AT5>A1?)A>o>Am?)AvIʨ>AiU@)A{[>A|A)A >AD)A8"0Ԥ>AxE)A-M>A\EF)A̢>A`tt)H)A{>At J)Aһ >Ad[8K)Agoq>Axt8 L)ADK>ALS|N)AF{>A4PO)A\K>A>P)A+̪>A̭R)A!Z>A̋9R)A#>AlMJT)A>A0U)AOM>AY)AU7m>AZ4Z)AGgG>AT ])AzoD>AX])AhԘ>AlJ6_)AA/>A8Gc_)A f˖>A̖`)Aq>AL]ϳa)AI6>Ap*yb)A>A`3`;e)A%H>A<g)A$?*>AlJg)A>AHej)AJ?>Ap-l)Aw٩>A0jRm)AaVҎ>AXǒo)AiV̸>Adp)A$Q>Alx r)Aۿ>AMq)A,[8>A$Ij\q)A]J`>ANQr)A]C{>A`!u)A4>A I[Tu)Ape= >Adv)Am>Aca-w)AYϕ>AXdYw)A>AV=x)A-- ݗ>A,-{)Aֳŗ>AT츦{)Ai+!>A@EN)AwƖ>AݙT)AZ1>AD)AKIj2>A0)Ak˔>A@VN)A\Ȫ>A?n)A/>A߲!)A977>AfO)Ay4K>A:)A֟>A,))ARWI>AD5:h)AzF&Õ>ALgR)A.>A4=)Aљ>At#)A)ȏ>A  )AvD~94>Ah~ۘ)At>>A13M)A۪5Z>AX8)Awyob>As)Ĝ)A썐>Ald)Av>A3KI)ATC>A|)A*B%>AП)A>A l)A5^>Aqh)Aod#>AԺ])Af^>Alo)A,y>AԭN)Atf>Ai)AQA>Ag)Ag!:>Aj)A:Sd>Ad0[)A# >A{$Z)AJI!*>A,X)A?p >A`K)Ai>AH.)As+>AL")Aͽ/>A)ARە>A7)AKMі>A8[)AÜ̗>AA)AW|>A"L)AO]Ȫ>A*)A0>Aו)AV>A;!)AMН>Aߐ1)A- >AOOhu)ADl>A A,;)ARX>A`m T)A^(X~>A|))AL>AԹ)A";>A5-)AC9^%>A7 )AikJq>AdK)A9>AXT)A4jӉ>Alf3)A>*]`>Ad"")Ad >A@N)A3A>Ad 2)A1x>As)A׌bk>A ~)A !\>AJ%˹)A~BT>A0lT/)Awd>Al'g)A\>A3+])Anܟ>A{)Azf>AzA)A솗>A0ŏ)A>A\b5)AN>A0y)Ab>ܙ>A)A[.`Pi>A:G)AV>At:L)AQ.>A|n)A}͕>AU)AuHt>ACq)A/>ATgO)A3.`ɒ>A"y)A$>APӫ")A-R>AhNd)Ap#>A4s)AiЏ>AtJ)A$*8>AxX)A*+>AH)A^>>A))AB>AT>U)A`{/ʋ>A\y)Aa>AqwH)A[*C>Ae)A.>A/)AݓY>AD;)AI>A ;)Azү >A(=)AϏΆ>At#8)AkHG>AG-)A?_>A\n~)AR>A|_)Aha>A!_)A ,>A4(69)AOXAt /)A!iލ>A8kW)AAy}^>A|l)A:`(>A4AV)Ai>A ԰W)A^>A2zw)A7>Aq)AV">AMC;)A l4>A\'@)A]\>A^ )AZ3]>AnE )AƵ>A`!')A냵>AmF))AM>A`t)A&L~>AxA)AZy6~>Ax)A2T}>ALۃvT*AC`Gk}>A.K*AJW)}>At|:*A[}>A88<*A|>Aĭ4M*A'|>A4W*AZ\|>AL/m *AJ{>A0k! *Aoz>A^= *Az>ABz *A߳Q;x>A\ *A2w>AD *Alm2v>A *A=^v>A<뇽< *AB4t>A5`` *Acs>At#*As>ALo*AWSq>A|@;*AHIAr>A|*AMWs>Aphɺ*ASs>AI**AHj*s>A *Aqgts>A<}*A2"4ir>A*A7Qr>A`J*A|ȓr>AX,*A+es>Ap!*Avuu>A"l*ACu>A*AAFv>A\VYL*A+vFw>Aܢ*Ax>A`<(*AeScx>Aز *Afx>A(3!*AE.x>AP+o$*A;w>AqT*(*A0nw>AH}D)*A5B#v>AZ)*A6·u>AW**AHV!t>Aw  **ANrP4s>Au**AUK6r>A}**AJiq>A؂w**A7p>AMh,*A0_p>A^.*A7Wp>A >;0*A5Ƣp>A=2*A=q>ADB4*A~,}q>ADK5*A2d\r>Av6*ACCr>AD彩17*ALs>A\6*Aht>A$ 6*AU$}+v>A@9\4*APv>A ]3*AFw>A01*A֎x>AA.*A] Mx>AhJ ,.*A#gz>AR+*AYz>A1NL **AxS{>A(o)*Ag{>Au)*Ao{>A| +*Agt[{>A\X,,*Ai~f3{>A(FT0*A{>ADr0*AP{>Ai04*A6fo%{>Adh\6*AYz>A"c7*A҅pz>A7*Ar>{>Axʪ"9*AF{>At9*A/}>A,v;*Az0{}>ATR;*Aճ}>A, >*Ay-y}>AltB?*Ang7}>Ax>EB*Ak^|>AokC*AMz{>A F*Ak{>A5F*Auly>AHAG*AϢ4y>A kH*A*'|y>AX]HK*A{Fy>ATgK*AG6Ix>A8M*Ag@x>A8 M*Ad `v>A48cL*Ag*Xu>A8xL*A*u>At}weAQO*AObv>Aȿg/P*AReQ>x>A@/&eQ*Az>ACR*A sz>AĕR*A#Oy>A(Y V*ACy>ATR3W*A]$HGx>AHwBW*A3x>A4W/W*A0v>A+qsY*Aפv>A=;Z*Ak'u>Ap)x]*Avt>Ahy/`*Ac6s>A`c\d*A댴s>AtnOe*AE*Xs>Agg*A! ws>A@:Lg*AE]u>ADnjh*A/9~Ku>AFh*A8*v>AlSWsk*A,EKw>AU[n*A"*x>AHܨqsq*A-x>A q*AI9Nx>A Zu*A.mo|x>Ah`sy*AnGx>Aܓfn}*Adx>A^*A E x>ADg O*Am?~x>A|3Ƅ*Ab;ۡx>AM*Ap8 y>A`0;*A0oy>A؁?)̇*AgTz>Ap:&*AFaKz>AAg *A.Yy>A i/*Ad]w>A*)*A\v>A̙*A$ۮ v>A0*AAS\*Aw>AGە*A;w>A`e*A\ew>AIX:*AU4jM)v>AH7A*AY!v>A47p*A t>A(k*Asɯs>A z*AċYr>A>|z*A q*q>A lwl*Aeq>Al0p0*A&r)~p>A KP*A(o>Al׊*A: +o>Ahk*An;n>Ax *A.wq m>Aq_#*Arm>A("*AiP?m>ARX*A,m>A,>*A-m>AS)!*AEm>A D'*A=/l>AɎl*A"9k>AР_s*Aqhi>Al?%^c*A8Ђi>A(p8 *A7h>A=^P*A6Hg>AՓ*A|{m0g>A4L*AjZX-Pf>A( :n*A5Sd>A#aV*A^#c>AGe*A*c>A8w'*Ab>A.(*A \"a>A3*Ana>A[Kn*A4{`>AxW*Aw_>AؚsJ*Aav_>A!U*A?GD^>AP*A|ZPc^>ALsq*A%j7]>A*AN\>A@p*A"p^[>A̠ų*Aͭ>[>A̮u*A9t]Z>A8*A$)\Q(Z>A(ܜG*AL8Y>A|q*A6Y>AM*A>Y>AhO|˒*A* Y>AT5*AQRZX>AXj*A^ W>ARL*Aѻ/V>AtҸc*A{U>A6Uv*A!S>At*엉*A{Q>Ad(Q*AUQ>AP>*ATP>AVRd*A ܴKP>Ax*A5ۤ;P>ADt]*AEO>AnX*AhN>A)*APxjM>A9*A N>AJ*Ag+M>A8H*AkGK>AwJ*A&;EK>A4{K*A" .[I>Aܻ*AwtnG>Ao)ž*AEG>AT*A@EnE>A *A >C>A;(*A4C>Aǣ *A3A>B>Am*A:@>A *A>>ALL?/*A)τ>>AWK*A=>AS 7*A 0;>A0*A^!:>A`lR*A9>AW{*A:ɚ9>A4Ɇ*A0IO:>A4$+AAc;>A8$A+Awr=>AЮS}+A?>AlH+AtϤ8?>Az9+Ašz?>AP+AK?>Av+Al1U?>Aeȼ+AJ/LB>>Aa&"+AxC=>A  +Aڜ=>AF4 +A92=>A`H+AkR==>Ax+Ap=>Aev+A,=>A)+A"g?>A<+A%R@>A2s+AU`A>A8XS)+AuC>A@+AGD>A07+A_SE>A\+AE>A9d+Aױg E>A`+AɪD>AQl+A/^aD>Alo+A)D>A+AEd1,D>AA$2+A#HoE>AS +AAsE>A,V+AۮE>A܏R9 +AOE>AS!+A}* mXD>A<X"+AW,t-C>Ane#+AB>A,piT#+A3^@>A/lD$+A x@>A$$+A:Vl?>A0'+AW茨k?>A0s D'+A3>>A Ik ++A >>AXo,+A"n>>A.+A; >>A+b:$1+Az;g>>A,U2+AL>>Ax=6+AHƂ>>A`ҙ8+A4>>AJ":+AW1>>ATX=+Ah>>A5=+A"j=>A)qA+A5P=>AOB+Acj`LS<>Aa"D+AkX@;>A$ƇE+A;:>ADF+Aװ,9>AT⿅I+AE9>A`3I+A 7>AbؙK+A>6>Ads]M+A4>Adת}!O+A-4>Ap&O+A =՛3>AΠTR+A4f3>AV}U+A#)R3>A.U+A[K3>A,K(6V+A'4>A LV+Ae=5>AV+AL\ 7>A;aV+A];8>ASqjNV+A:Jꢠ8>A$KPW+A89>A99_Z+AgS"9>AN~[+A[ :>AN^+A#:>AȘSy_+Akt:>APb+A^` 6:>A<c+AVI]>;>A +Qf+A6R;>A2Yf+A+Hv:>A+!j+AG:>A|IDl+A=Q4f:>Ax/m+A8R9>A<|;q+A̳I}9>AdS @q+A2m7>AtC!r+A].6>A-+s+A5>Ad4¶Ct+A޻M4>A۬Qmu+A[;3>AХAv+AE4r1>AH؄w+A+l['1>AyIy+A0>Ac{+A)I 0>AXn}}+A)`0>AhNT+AL0>A;#+A }0>A|Є+Asݢ0>A|+Al1>AIנ+A궉2>AI&+A!Ҹ\3>Ai,+A& 5>ApEOnj+AE86>APAq+A)67>AG+Ay~S8>A!ې+AWj& :>Aѕ +AI䏷:>An+AΗN;>A0&+AJ] ;>Aԝٖ+A*:]<>Ah)v+AL،{<>A_+AkdN>>A +Afy!@>Axp&+Aƪ|pA>AG /+A 6B>A|H“+AynC>A>+AEAgE>A#+AAbE>A4i+A!F>Aĝ|+A?nhG>A4$+AUGG>AQ11+ARmnG>AFC+AYȩiG>Avܟ+As7F>AlqH+A@ ZE>A|ױ+A'E>Ap/+AۮF>ATeޱ+AϽG>A0,k+AͩjH>Aln+AvbPs J>AJ+ALQJ>A$O=+A oEK>A$m+ApK>Ah˩+AdL>AhVz+A( M>An;%+Ab|LO>AhL|+AʧO>AKU+A'EQ>AXD+A { zS>Aѯ:+AAAS>A8+A FT>A +AKh;PU>AG<+AXV>A Ë+AB·W>AxMD«+A]MX>A1}2+AC"Y>ADc&;+Aqy!Y>AhA+A4.zs[>At<+A \>ADɴȴ+A$|f1^>A"+Ap&D^>A +Aff_>AӌK+AE@.`>A4ny+A^`>A2W+Awl`>A Q+A``>A,Ϗt+A2 2_>AT4^+A9^>A0|:{+A66|^>A;+A,^>ALHT+A3E9+_>A$Tb+Ac^^>A.+5+Adw@^>Az+As±[]>Au+AoE]>Aa?j+A&5x\>A|+Aɺ\>At3{+A^JR"]>A4+A^$A^>A"X+A˩Q^>AHz+AKe`>A֩+A(ba>A%A+AF(b>A@ +Ad>Al7+A3Dd>A3mUq+A1e>APFF+Aebe>A$Q+AlO%#f>AQ+A8e>AL=2+AG}c>Al+Avhc>A ,+A_qa>A[T+AEړa>Apn+Ab>A@&+Aʵc>AԺP+ARCAd>A`P+A,d>A@#eO +A+FMyd>A5쓡+A,`d>A$]+Ae\d>AY(6+Aeie>A0t/+AJ0e>A/+A0/Fg>A2+A@ ug>Aho?+A>Vh>A8ܑ6i+AkKu]Ki>AL+AMfGj>A`V.+AWf2k>AA>9+A9  o>A+Ar8o>Aw+A;_p>AX&`+ADXr>Aģx+AesWs>A`.+A2t>AdQ +A㬸u>ADG+A qu>A } +Av>A y+A~ȝ"v>A+AXw>A+A,O6w>Ad}#+AVXb;x>A<&+ASvy>A\^++AѠz>Ag+Az>Ap7 ]+AfH>%{>A<&+A'T{>AXgi+A {>AXi+A^PC}>A,AT.}>A0QH,AԖ~>A$,AЈ>A Dm,A¸Vc>A||,AT>A@ݫ,Aϋ}n>A6,A 2(>Ak4,A^p#ƒ>AP,A{N>A$ŢU,A]h>ATSŭ,A>Ag,AiPk>AU=,A]#`>AP<4 ,Ab͇>A,ф ,A 3݇>Axҕ ,A'2/Q>A }]2 ,AM˞4>Ap|,Ag\>AP\,A >A|e,A >Al:,A>AW,A)pN>A@,A2?*>ADl,A[ҁ>A,ApeJ>A \B6,AU^>AA,lL,AB_",>ApBi,A}R>ABN,A.M>Ag[,AB/>Ap,Aiσ>Aٚ ,A+̃>AH,A*0Ӎ>Ax,AŶ>AL6,Aאq>At+",AZiЂ>A|C#,A*h_>A<ڰ$,A3>Apk%,AlO>An',A>A;v',AR >A\*,ABΆ>AH*,A(&>Aqn}-,Aht|Ӆ>A8j@.,AH̄>A*0,AB >A`G71,A"[ym>A?:2,AUh>A0Y~X!0,A*ܧg>A\*.,A.I>Al.,A:!>A(MD0,Aܧ>A|JZ0,AzIۊ>A8lXo3,A+#+>Ad3,A%g>Ax!5,A>A8I7,A2Mԍ>A(.^8,ArM>ALIOu;,Aܵ >A;,A`i>A%?,A,lB>A|ۦKC,Al$>AE,Ai(>A`%šG,A~,>A0fK,A NW%>AܮƄK,Aye'ҍ>A6M,A󮚘>>A,G\N,A:>A;4O,A*>AO,A>A2'P,Ax5H>AH eVP,A`y}Yd>AH|[P,AёX>Ap\P,AS[X>AG^P,A7#S>A^P,AخM>AHLP,Au6E>A@dv5Q,Aƴ&'>AqR,A[}g>Az$ T,Ai3 >A:U,A)g>AHUV,A1U>AV,Ab+娻>AD9W,A Qd>Ah nX,AҚ>AY,Am7>A(/;X,Agˊ>A7X,A_ ъ>Aۜ6X,A.Zv>AHܞ(X,A_">A} X,A>A>A}Y,Aa4>A -YsY,AZ|>AA=-Y,Ajq͐>AH$Y,AL@Mv>A`aQY,AW>A'[,ArY+m>A$=\,AlE>AtyN^,A.}>A@@Lb,Ao nÑ>A(dlb,A @>A(sd,AB<>AXc_d,AbO>ATج1e,AoT>A%@e,Aߜ!u>A[f,AZz>A+g,A`aJ\>A3h,A>Agkl,AҖG>Ay n,Aԙ>At}`o,A>>AO?kp,A2kH>A{nr,Af>A`[#s,AK>AIt,AR>A$qpt,Al*>A4nq,A*˳5 >A( o,A9X>Ad6fo,A !'L>APʐq,AO>A q,AuE>A|Wp,A ?X>A;]}m,A;暎>AH9Nk,A(%o@>APoD!j,Ao eя>A@G2h,Aې>At'}Aq&>g,A>A$:Gf,Aa(מ>A?3f,ArL>A ؔc,A/w>A`,AS3>Ae^,AG<>AK^,AL SQ>A|cSZ,An>A = TY,A5>A?V,A>AtxR,A\z>A8~R,A%鷨>A=IO,AA[>AgL,Ae;Cez>AHK,Af5>A&[I,A];"0>ApE,Aq`>Aj"B,AIKu>A0A,A\ ٝ>A$zCI>,A*>A<,AN8i>AAs};,Aq'@1>A,Q%q9,AsHB9>A26,A>A8 u5,Ahed>ArU3,AJYʛ>AÚ3,A1\>A;0,A^>AD!,,Aaj>AQ?),A%$>A@8>X&,A]%9u>A *&,A5 pW>APG%,A4z{>APt- %,AP ?>A\%,A(>A C&,A,ǥ>Avn',A0>Az\',A*>A8N`?',A(>A#=',A^|ٶ>A+&,A9Kެ>A,7t&,Ao>A4y %,A*b>A$Y#,A*X>A(\>l",A{e>A$X!,A&>A!,AJ)o>AH,A>AT-,ApV<\>ApCJ,A[B=>A`9,A;}H>A4h|(,AxN>Ap%),A-S>A⻵,A >9>A4O,ANϾ>Aix{,Ar~>AL0H,Au>Ay?,AGe>Ah,A&P>A&,A>A>3,A3>A9p,Ai{>Ac,AVU>AhA" ,A¸+0>AHz ,Ab ~>A$`!,A*}h>A3|]",A)>AP",AAz(",A}@>A .!,AF{/>A.!,Ad>A4`- ,A4 >A=<,Aεa>A3|J,Ad~c>AZ?ʮ,A/ >A@Ә,A[>A,Aɷ̿>ATd,A^$>A~ñ`,A/>Ai0,AW5K>A^r,AL>AR,ADh>AG,A2yQ>ALE~x,AWf>Ayv#,Ag%=,>ATeJ,A0ğ>A#p,A]<>Aɖ^,Ae]>A9a0,A"3>Al{m ,AZ>AHdF ,A>A~W,AZhq>Ax,A3>A(̛,AA!>A,A/} >A5O,AzvA^>A f,A,eտ>ADCnP,Aݦ>A O,A>AWg+Al~->A8Da+AAQ7>A@O-+A%t>A 3+Aa۽>AM+AM ;!>Aw+A^h!J>A|+A{`ҕ8>APԫ+A%-le>A /hG+AB>A!_+A1>A~+A>Ap0i)+A>A|+A{;ADzO+A h>A@LV+A>A$(5+A4>AF+A.m>A,^+AƂ#D>AwR+AåPA>ABu+A8}v>A,6x+AE>AJA+Ac7>A>vW+AȒX>A+A">A+A`{n>AxC+A+y >Al";+Ar(>A8bg+AT6[>A^+Aػ>A@[}+A z>AW=+AjO6>AAPz@+A-`>A(Mb+A>Aҷ+ADA>A8.Ģ+A4rd>A\+AE-½>A(H|^+A[>A}D:+AO0U}>A$K+AI>AYW +Ar>A/K+A*>AH+A%y[>AIøٿ+A>A`C+Aw͸>A=&+A)g`>Aܨo]@+A$B>A*_+A0K<ְ>A83+۴+AF>A}+AI>A'+A (>Ah̖#έ+A]ף>A1vt+A.^c >AXc+Au/z>Am+AI$>A(D/og+A7;>Ar8ߣ+At@l>A Q+AwM>ATbM5+Au3>A4+AV>A۪+A6e>A"5'+A4>Ak+A/G>A#+AbFU>Ao>Ag +ATʙ>AHJ+Aȋ>Adg1ڗ+A>A( $+ATW>Afh+A r>A 2+A2_Eϕ>A$@+Aг8+>A;Ɏ+A#a*>A\#+Ap֓>AɊ+AZ%>A+A`U>AU+A-Տ>A`+A}֎>A|A+A\`֍>A1Q+A"ƍ>Ad++A9*>Al4u]~+As-r>A$|+A!꺈>Az+A>AW߀y+AƄ11>A,%Kx+A3 ʅ>ADX,u+A;c>ADr+A&>A(q+AUVʏ>ABdpo+A$>A&w#l+AĴ>A$k+AK]-J>ALi+AL>A5ng+AAxf0g+A&W~>AHIc+Aj}>Aܧ.2a+A0}>A `+A,Z}>Ad]+A]q~I}>AL\M$]+A}4}>Asks\+Am$|>A%Xm[+A z>AY+AEy>AW%X+Ay>A[KpX+A6@!w>A_rW+A!v>Ae{SW+Aʚw>ATS+A7/w>AĪmP+A#">w>AJÔN+A6#A*v>Ab^M+A yvt>A tK+ASAH\6K+Aחs>A@G+AkPMs>A64$D+A箤9s>AЈNC+A/r 'r>A A+A0Cp>A>+A}Ao>A8 ;+A_Y,o>A9+AI)o>A+K7+AA]>o>ALg5+ABU n>A8_ea3+Al n>Ad]3+Aan>Ap\0+Am>A\Q/+A8{xZm>Au~,+A?(m>A46 ++A+d@l>A^)+A_j>A.tR,'+A:vA8qE$+Ah>Ahj<$+Awi>AVp#+Ai>A\"+A0Qi>ANl+AoKc.i>ADςh+A-i>AC+A8 Wo j>AJ87+Aߔj>At+ANk>AHC+Aܙ~k>A +AItk>A$ +AtOEXk>A" +Ac¢Jk>A:+AAk>A,-s+Ak>A4X!+AO{k>APJL+AiH#k>A"E*Ap$$k>ACo*At>k>AZDs*A.l>A#*Aw3l>Ap KL*AZX%l>Au*AE=l>A\*AqLm>AE**ASnm>A*A OIm>Al~*A#l>AOʇ*Avʈj>Awz*Aփi>A`ru*A 0-j>Aj>A;!*AT}k>AM*A |/k>A<8\*A,k>Aȅb*A|Tfl>A`}n_*Al>AB*AQ*Lm>Adj*Alq$.n>AEU4*An>A=a{*A?G|]o>A*Ap`o>AtS*Az? vp>A3TY*AJq>A 0*AEr>A*Am"cs>Ah*ھ*A;Lw)t>A|޼*Avv>Avv*Aqm%x>A$p*Ahoy>A$`*A}Xny>A,*A {>A$@O*Aj}>AWr*A[@>AIF*A Vt>A@t *Aj>Aq߷*Au>Aܐp*Ak4`>A*An >A *AhԆ>Al`V*Atᎈ>Aȴ-<*ALH>A0 i*A$K>A]ە*A}lc[>Ax)*A \\>AkYL*Aʆc>AhJfd*Aq9}j>A }*A_n>A|6B*A>A|oB*AL>A|T*A<=>A|~9*AHΒ>AdgF*A/:>AP*Aw7>A.*A>A8`6Ï*A9`g>A숉*A>A2W*A/٘>A S*Ae>A*A6;Lƚ>AD<*A2ߚ>ATD*AKAl>A,K*AeF%>Aىz*AT=>AlrF*Aq|)>Aл6*A?>A c*A/ǡ>ASf*Ai}sX>A"*A-rc >A`i *Al=>A$[*A* $>A7-r*AH >A֖6*A>A>*Aʂ!>A4 eB*A9ի>Axuԑ*AJݺ>AӷȒ*Aܔß>A2*A>A,.*A W>A'+7*A%tp>Apg"*Ac>A *AHt>A ڔ*A'R>A4z*AJ:>Ad⊛*Amac#>AҒ*AdI >AП*Al>A**A}j>A,ڼ*AD>A"[G*Af>A-5*A9w>At*AA]>Atx*Axf>A~*A ik>A̶*A)3>A Q vi*A:M>Anc*A(E(>AP3 *A=>AXHU*A4D>Aڰ|*AF>AxS+*Amf>AX&M,*AK{Լ>A7*A}3>A*Au? >A"*A:+>A (Ģ*AX@Ǯ>A(]0U*A__Gy>A@0g}*ABC>AH0z *Au >AX֯*AJݼ>At8Ο-*AF>A N*Az:l>AM*Ax6>AMݭ*Aeb>AxDZ*A >A裀*A6a>A@ik*Ao>A$\*Ah>A`d*AwQ>A(GnN*AE>APԋ*A4G>Ayy*A?dM3>A83*AdC>A+g**A,>Ajܘx*AQĶ>A*A86>A(٣*C*A >AD =*AT>AhnƖ*AG~>AP.*A#0>Aģb*A? >AC*AP>A\36*A!_ >Ab*A;^>A b*Ax/>Ao*AZ>AHa*As{h>AD 3*Ajc>Aֵ%*AّS2>AaQ8*A'>A|d*AT>As*Ad>A=ٚ*A rj>Ak*A堮A>AĔIH2*AߐgU>A **A梅>APp*A?_>Ak*AJ>Av /*A E>A]{*AK/>A 5K*AiŖ>AP *AX7>A(9*AX8@$>AEM*Aci>AAc*Af~>A,|[*AXߖ>Aqv*A>At*As.>A!H@*A>Am*As>A԰>j*A>c0>A©d*A7>AuJ*A0]>A87A0*Az>A$e*A>Av+*AY~>AT?Q*Ar$R>Ad*AAm>A|*AB8t>Ak *A^,>AS*Aq>AAb*A^F`>Atqq*A7DE>Axy^*A'S>A{c*AOH->AA$8*A\>AJˇ*Ag >A8J1*Aq>AV*Ab]hg>Arƃ*ASy>A-9f*Age>AQ*A>A؁*AIhe>A*A=+>A|D*AiΖ>A@8*A'm>Atwm*A:Ĺ>Ah/1 *A[AnS~*AF>AxQ}*A#L(>AhMw}*A=>A0'R*Aءy/>Aؓc,!*A4L!}>A>*Aw&>A0o Z*A0R>AH̫*Ad0>Ah$~*A'7>A+[*Ao;4>A냖D*AE.QӖ>A <\u}*AVݞ >A,I5}*AVBn>Au{*A$>A%z*A1>A.~6x*AJ>A׎w*A(n*>AP+v*A7 >Atzu*Ame>AXQt*A ؁>ADGØ`q*A{[VH>A8MHon*Ax>Aۃl*A`7>A ~G5k*AV>Al}~Gj*A`]PC&>Ar"h*AE>A$ ̞h*AnE >AH`Pf*A>A`"aMe*A>A\ Zc*AS>Apyyb*AE>Aa*Av >APNPbO_*AOLQ>A_L3\*Ar>AkZ*AVXI]>ADbW*A1>A0sU*A}k>AvyU*As ?A%Q*AW?A"@N*A??A?A}=*AѝN ?AH;*Az^ ?A(:*AjeO ?A487*A%P= ?AH4*Ajc ?A-X1*Agh",?A,7\/*A ?ALǘK.*Aҥ?Acֽ,*Ar?A_Z,*A*P?A9+g)*A9?A &*A*?A7%*Aʟm?A!*A1?A *AnK?A*G*Av?A&e*A":?A$#ı*A<X?A̮bg#*A@{?APb*AA8'd?A6 *A%?At f *AX?A|g*An??A|VL*AL?AtV6`*A^?A#(*A?A̭*Asl: ?A9I*A ?A d*A7?AL *AF^?Av^ *AxzF?A쫚 *AGW?ALS *AO?AD*Ad"x!?Aԇ*A"?A ˯*AigK$?Ay0*A\$?A\/*A59%?A)ANK?Ak)A5&?A )Q)Aq3?A<+)AZ!O0?Ad)AjP ?AX.Υ)AN4p ?Ac)A ?A(_ )AD I?Aa R)A8c?A`9)Aɻچ?AqI%)Av??AԕIO)A+/z?AHGy)A"Mb?A X)A?A =B)A.?A")Aɀ̵?AԸQ)Ap?A6+)A.#>A,D)Aˉ0>A9)AVC>A|`)AP;>A{$x)AJ>ANt)AhW;>AJ)A+>A_l)AR>A4R)Ay0>A$)Ar.^>Ack)AB$>AUM)AQ>L>A+)AD8>A)Aҡ@x>A0)A,>A|')AوA$}O)A_m>AdP)Ag5D;+>ADLQ2)Ax>APY4R)Ai?AV)A?Au؀)AeS<?A7dy)A0 ~?A4r)An?A\٣)A;Vf?A gY)A?ATG)AY;?A'v)Am?Al$ν)A>zk?Atu)AΕ?AS)A?A)A H ?Ahr%)AE*?A)LR)AF3 ?ATx6)A + ?Aq)AZ{ ?A$ă)Akhl ?AR)A߿ ?A /Q)AԌ ?AX\XG)A= ?AT# ѹ)Aɽ?Alb)A"N?A죵)AJ٤g?A4WͲ)A:"?A)A9?A L)AtB?A )An?AY)A!)?A)A&4?A $)Ad2n@?A:H)A{P3L?A9L)AW?A%)AזƎc?Aؼɇ*AFY:o?AdAC,*AAz?A8Po*A9I?AL,*A‹Jn5?A&59*ALSD۝?AOE*A)/I?A R*A_Y%?Ai_*A7?ADg.l*A)2h?A*sx*A<\ ?A8Dž*Aȧ?A *A*RAE?ARr*An?A@ެO*A|9(>@AH) 1*A, @Av*A7@A5H@Aވ-U+AqN@A2Jb+A85T@Anmo+AurY@Ap|+A^Bg_@Ah$+A:$~e@A] +A(S@k@Aq'&+AIq@AO_+AY7v@A`K!D+AK7|@A(dC+A^:.@@A (+ATz@A X"u+Ag]@AV1+ADy@Aj~,A&W5@Aңu,AN;@AaS,A.䫤@AHw7),AX(f@A&蜟6,AG-Z@Az+ D,A1eص@AV}Q,A>,搻@AHc^,Am_uH@A {ml,AV@AGty,A@AHp,A[k@A?2,AJH@A8,A>@A_Q,AX@AX@5D,AiS:@AF,An@A-,Aڝ@Atj,AfN@A01,A^L@A-A9+AAp8-A \ AAAAy-A; DAA0xА]-A˜BIAA- E-A@N,VOAA<2-AMkI6TAA (#-A9Ҡ"ZAAg-AF [E`AAB6-ApeAAL-A\xkAA$Ťi .A=-qAAh.Af1vAA:*%.A8o|AAh;3.A"AAD&QA.A%AA`pkO.A/϶MAA;QW].AeБAA,ЄAA\Z/A4AAlt^/AwֺAA$%/AkjBAAZs3/Ao€AA`A/AqgAAD^JEP/A_QAA4.^/A :iAA*)m/AۗAAҡ{/Ah BAq/A^8BAH8/A p BAy&/ASdTBA1/AIՎBA6@/A|*[lBA/A4k#BAPk/A 忁)BA# /AW /BA/Ax34BAb3@0A}[R:BA 0AY/?BA@& S0A>X*EBAv0A@JBA3$0ACi5PBALe+0AtչUBATJ20A=[BAD (:0A=Csr`BA|A0A2CBfBA0&H0AGvkBAzjj\P0AoDqBAW0AB{vBAl\n4_0AC|BAf0AߋgBA: 3l0Amp>BAX!Ch0AtBAdJfg0A˂BAĤ)ag0A-WBA~e0AYBA~'d0AupBAvb0ABAdWX`0A YJBA:I `0A1zBBAN_0AgmBA0o]0A~[BAw2\0AI+0BAQvZ0AÞBA ƺ1Y0A6μBAn9nX0A4$qIBA*B BAk>/Ab2BAuQ"/A BAS/A1KN,BAl,..Ao8BA.AЋlBAk]1.ATD0EBAM|.Ar>BA%q.Aff#BAmy.A>BAO.A%nӘBALj .AfܛBA.AK|GBAM.AV?BAP.AnBA@?.A\BA,.Ajx BA07?.A;BsBAQ6.Ai=BAx\aƼ.AYPBA4~6 .AF[LBAu.Au)GBA\s .AB0BAܢɿ.A:3BA8Ql.AUo ʒBAS.A^BAPm.A~n{BAn8.AܥcBA3.Ax1BAA .AuBA쫴 .AZ BA .AmYBA0.Ar#BAOP.Ad`BAA%8.A 1 ԎBA|)3.ArdBAxdR.An͍BApWrv.A ABA+BAsc.A78NOnBAL+̤.A< ^ŊBAd?՝.AͳbBAh .A-$ψBA?Б.A?0BA^Kҏ.AgfBAg.A.?@BApi.AlBA|ڇ.AgwBAأq.ABAp#Tй.AW6BA-.A\a@:BA.A>BAd).AٺwBA}x.A2BAy!.AcBA4TA.AGz.BAK@O.As6BA z/.A^BATK.AvsBAdk%.A3%#BA= }.Ae~BA".At}BA(.A 4}BA:Ư.AqyBA|.AGT.wBA|NJ.AlwBA{.Ay~vBAͭ.A?UʱRsBACd.A1k]rBAlpBA3W}BA@VQy.A=Ba}BA|٬8W.A?}BAԟK.AQs}BA\vtOx.AfǗ}BARKv.A}BAQt.A|BAuq.AYl|BA4йl.A }BA|yNk.AU}BA8l.Ar}BA,o.ANIh~BA0 ^p.A3~BAn.A\MFBA֞e.As 1BAs@Ja.A/YXvBApa.pT_.A7y~BAa.Ac|BAXK{\.A|6|BA].A\QzBA c.AwzBA*g.AX%+*{BAe~t.A;8^{BA y&y.ANzBAT8rz.A;zBA 䭨r.AqrkxBAù j.AnwBA䩘e.A wBA C6a.AZvxBAt`].A+,y4yBA-V.A' xBA\K:Q.AcbwBAy+G.Anl@vBA@.ATHy(uBAoo2.AivBATC[U,.A'a_vBA Yؠ*.AEDȗvBAG%.AqqFvBAF.A-ItBA-A NrBAҲ-A6|qBA`-A1pBAdy -ADooBA0,-AfBAL-AoZfBA#-AwgBA0-A(]hBA?D3-A#ʳ{hBA`*=0-A+2jBA-AFvjBAi-Ao-ѦxjBAR-AJHgiBA$ηſ-A'yeiBA(#-Ap iBA=-A`4 iBArm_-Ad hBA8 -A|hBA腽ذ-AT+Z-gBA\a1-A?fBA(*έ-AfeBA +i-A" fBA$.-A-eBA<7z,-A?HeBA03-A\A=dBA\-AwQcBA "-A+bBAdw6ܣ-A|0raBA2-Aɔ`BA( h-AE_BAV-A:^BAXG-Adޗ^BA!a-A^BAH5-ASI`BADTҸ-A6aBAgP-APckbBAlS-Aɗ-bbBAR];-AA`BA܈-AQ8_BA1yLG-Aɺ(&^BAx/-AM^BADp^-A\HQ]BAhN-Ad ]BAiOUđ-As:ZBA "ą-A qfQeYBA$ۀ-AJIk'YBA&jޢ-A1YBALc|-A A\YBA4\ʗ-AHn[BAȬ"MT-Ao]BAL꛰π-AϺ]BAe}-A%+]BAnRXz-Af_HZBATV|-Ab fYBA[D-A2BWBAϫ-A7VBA$}?yLBAl-AWJLBA,Qwh-A(XbKBAkW-A[xJBAP7p-AZ;yIBA-A=IBA)-A`f_HBAPp-AH_uIBAHx`T-ApIBAÈޜ-Aʽ`IBAʏ-A+0NJBA`t-AlKBAT-A4IBAC!-AK8IBAud-AGBAJȳ-A9FBA ϵ-A]vFEBAp#-A~*EBAx2x-AAjlEBAD\-AFBAd0ӟ-AcZIGBAx-AQ.)HBA|\-AuWHBAx -AV[HBAX!c]-AY!IBA1-AI>`*JBAD ؠ-A꓅JBA/$A-AFMBATۛ-AmcBHNBAC--A917NBA -AbUvNBAoz-AP! PBAX-ArQBADꐓ-A 'RBAFv-AR̺GsQBA]\I-A쓎;QBAq .t-A=ŽRBAXg<-AjeTBA(}3-Ah#STBAͷg-A4pMSBAˏ-AwRBA;-Ai ORBAǣr-AQBAت)A-A_)0PBAP-AYUOBA$-A˅OBA/0m-A*BRBA/M-AM&jSBA.g-A|KRBAD]{Ё-A RfqQBA҃-AwPBAr -A3#rQBAѪ-A lQBA>kx-A?9RBA]ݡw-AIISBAN|z-AdTBAzZu-AO6UBAyt-Ae;ȥ VBA?ns-AGc/ VBA y&p-Aq|VBAh6E*n-AqÒVBA00i-A˛UBA4b-A[TBAPIb-AMRBA$Ed-AQBA`sb-AwءܶOBAĻAd-ANBA4rb-A_^bNBA >]-A:JJBAX!Kcc-Ai JBA6sa-A{AeJBAF1^-AF3JBAh\-AR([JBA(FrX-A![jIBA9X-A$HBAh^-A$HBA)dѓ]-A~FBAT9_-A6 FBA_^-A`O/GBA ;Y-Aծ/GBAV-A^EBALZbT-Ad6QEBA3[T-AJ"05CBA}4a-AT9BBAjRMa-A;PBBA$D9_-AQABAld^-Ac @BA^b-A޼>BA,@Y-A:ű=BA$P-A+=BAM-A.~"X-A[S 1BAPP[,AשO2BAe:,AqWK3BAT{d,AqD7k3BA,Aэ3BAű5,A@DO4BALӶC,Aq+4BA-J,A-M~p3BAX> ,A2BA ,APX1BATSB,A$b-BAT,AI: -BAH5L,A8k*BAAl,AGa(BA2%c-A8]u(BAC3M-AXU%(BA,#-A@S%BA`k1-A~ħ BA'_=-A0zBALF-AsZBASS-AfBAL/AuO[-A\BA\`-AbXfBA˖g-AyS BA)*l-A-y9wBA@>[r-ACnBAgOv-ATq賀BA( 01}w-Ax7[BAu-A,@BA}u-As~-BAըavw-A`BA8dy-A; BA鞧y-ABA |-A?Vu BAA܈-AƁqBA3^-A5iBA#j_~-AxHBA̍|-A43BAU6(|-AGܜ BAL4z-Ai,t@BALu-AF0lBAFEr-AE&BA$Z5cs-AWr5BAF-r-A\BA)BA8X-A 죍+BA(K,AH6+BAQ0,AY%*BArm ,ApGP)BA?-,A|T*BA7#Ʉ,Ae,BAw,Ac*-BAZh,A| w&/BAGa,Aƥz0BA(,Ak3BAW,A۶A4BA',AGhY4BA ,A;,o6BA@M5,A4Vʬ7BA`A,A-d9BA=,ASaIBAԂuD,ABA\5@p,A4"@BA0I,Aa@BA(K?Z,Ao ABAdKG,A1@BA@,A̪ 4@BAwm ,ABA<,AA?>BAHx,Ax\a=BAًq,AN׳BA/v,A7>BA ,A/av=BA5,A{=BAs,AYMW4BA,F[0h,A e3BA$ i,AH3BA =kd,A=j)5BA}u+_,AHN'5BA g\,A|4BAEg[,A 4BAV,A)f2BAkgQ,AՓ0BA̕X,ASi0BAZ\,AtW0BAh\,A7:e/BA SWY,A\Q/BACW,A51BA`tjQ,A)^2BAhL,AC2BAQ9E,AQp2BA{A,Aޢ1BAYA,A(z\1BA@f<,A1BAÜ8,A>Y0BAT7,Av./BAP'EB,A:_v-BAt;#yA,A0.BAgFq=,AQ l;.BAT.1 "4,A/BAb/,AW0BA-OE,,A`.BA8,ARU.BA,A]H/BAP%},A )/BAܹMc ,A~]0BA T#,A*&J2BAQF%,A4H 2BAy2(,ADɌ`1BA@j5&*,AyǗZS1BA;,R.,Ay,1BA"/,AZ3BA8~w),Ah23BAֻf(,A 5BA0u,A! 44BARF,AEPO3BAU",A9F@H3BA4Y?!,Av83BA˜,Aj]3BA5A,A3BAdT4,AQt2BAy. ,A7/IF3BA,A}2BAXx ,A k1BA՞' ,A9 ,1BAXEN ,Aiט2BA4+A1BAb+A?pq,@2BA8~ C+A1BApp+A7)2BA8H[+AC i1BA(+A苘0BA +Aя0BA$6S+Ay/BA@Ab+A!N$_.BA0^Z+AV@-BAj{+A-BA<)'+Ax-BAv-u+AN:-BAx!`G,A9I-BAJ),Aʕ-BAd^29,A@/,BA,Aa9OM+BA8j,AU*BAl,Ag)BA^ ,A (BA5v,At4$I(BAU,AwI`(BAD,AC**BA)L,A/bO*BAL}P2,A@*BAՐB,A'(BA ,AHR(BAvI,A?'BA(Ƅz,A'BA`q',A]be&BA;,A0&BAi}R ,AiPf&BA4b,A/&BA(|B,A(&'BA4,Ayo&BAh+A}%BA,D+AUw%BA#+A+%BAcķ+AL $BAQ?+A)w%BAX"+Ah!&BAd\+AD%BA("+AU%BA?r+AVk%BA@F6+A*L'$BA`:L+AȌ8~"BA { +Am!BA0+AxT#"BA+A6Y#BA.5+A-G%BA7h+AN"9 &BA<+Ac/.9 &BAT+A*ARK&BA)+A) TK&BAC+Af&BAȭ0+A6&BA,*+Au'BA Z+Aj믇(BAW`1Q+Ay$*BA"C+AOm*BAX-+AS|0*BA]Eq8+Ag}+BAT+Aqԛ,BAhv`+A޻,BA=+AJ+BA+Ai+BAw+A{S,BAR+AG,BA+AI5BA0|+Ap+Av=BALin+A=BABAh+A0S4=BAlQ@f+AH2j?BA}b+A>BAH"`+A_:h=BA=BA@\+Acq@BA(ު+AmO@BAND+Aוxn@BAH1J+AvU6>BAh9e+A2BAp!+AD2BAV'+A@[B1BAX^+A09$,BA.b+A og-BAQd+A 29-BA8Jh+AQc,BA Mm+Ak,BAgp+A+BAp?vq+AST*BA`Q1x+Ab o*BAM$pz+A F+BA)~y+A¥<\+BAM\|+AO:K*BA6~+A2)BA`n}+A0g)BAv+AIa)BA%,q+A-9")BAh1Jp+A^*'BAp59p+A^X(BAk+AY"'BAя;j+AJC'BALJbf+Aٛ0E'BAa+A:(BAUZiX+AW)BAZYW+A";)BAP,#\+ADf*BA`?^+A +BA \+Am U5+BAz%'Y+AiV+BA|N4V+AU",BA0D9;N+AB`+BA@Q`UJ+AZ!,BAOE+A5ԧ,BA!>?+A;lFm-BA8+A4$\<-BATI;4+A#8]_,BAt.v24+A{*n-BAd,+AY.BA ++Au /BAx%+A/v-/BA,N+Akh.BA( ?+ATp.BA I+A5(.BAtNnE+A9fm-BAPڣ9+AF'=.BAdɖ+AV$[-BAآg+AB.BA܅{]+A=,BAXIH+AS R+BAϒ*ALA'BA oI*A(BAtډ4*AfT)BA.*Ace)BAZ*A~/=)BA,-VW*A¿ZgD*BAtDS*ASĜ*BA,)*AgH-+BA"V*A\E+BAxr$?*A ,-BAE*A qq,BA|*w=*AXH",BA *A,BA&xu#*A{?Eq,BA "R*A:D ,BADVi*A8+BA*Akubc+BADѪ*A ^*BA&*A]\3*BA{>4*A*BAT*AV1iG+BAbwb*AwKd+BAAU*Aw"+BAPJ*A9()BA]**Ac5*)BA *A~e?O(BAwn*A߉M(BAP[1*AE'BA [d*A2 &BAԘ*AO &BA*o*AGF%BA&*AQFE%BAaF*A%BA̵~*AȈJr$BAo *AR[K`$BA*A\#BAtt=*AֺMW#BA|5*Ay"BAo\*A T"BAm*A<"BAiá*AMqv"BAwbe*A$BA+*A*2(%BA\1'*A2va&BA 2%S*A5f=&BAO*AQc'BAorĿ*AO-2{'BA2*AvF&BA\[Yɶ*A^%BA%nkn*A6$BATa_*AC3$BAdv*A ̯M$BAp*Ao_IJ#BA ,BE*AGNz"BAKڣ*Adv*A{Q~ BAPgWo*ABA1w1m*Au?BA|]hh*AtOBAHզf*Ay>SBA4h*AHeBA-Gn*AKDvBA0o*AkBA:#o*A-BA@cYn*AsBAk*AtBAg`*AXvBAj,[*A:laBAtX*AMBAL IW*A]D GBAePY*A BA M"X*A  BA-R*A4ȭBBAxӤG*A.eBAȔ(C*AT!BAStD*A.gz.BA,- /E*A^?BAܝ-"#L*AABAwtI*AuBAК[UF*A>}BAHIA*A+BAglq>*Al\'BAl=*Aw@y BAe::G*AH'm BA N*AD BAD}|"S*A&@JBA`ꄀNU*A6BA0JzZJS*Ar^BA( PT*AhgIBAX<+bY*AZBA cdU]*A5kBAlg*An~BAğ?i*A3!:BAuth*ABAtc*ABAx ^*a*ALBAta*A]QBADk]*A1e9BA4[*A0BAVۺT*ARمPBAHyN*AځBA,nK*AUCaBA*Ab$:BAy>*AZ0BAd;E*A׭BA$"D*ABApU:?*A BA`<*A&IBA@4*AZxǴBAhMhu/*A݇kBAT,(*AxQ3^BA<5$*A>BAPu*AޘfBAtб/`*ABA7f*A?BA\YZ *AQy@IBA,=*AX6IBA6R*A0BA(j *AZERCBAt[e0*AR8qBAdyBA( )AiX BA{)AguBA#wA)AVBAU)A CGBA\|[)A`b BAӂ)A(BARD)A`|BAlo)A۽BATX~)Aa7BA)AsBAD#/+)A ABA)Aþ0>BATV )AiBA|V)Adڡ-BA8@8պ)A|wR4BAd'c)AP^BAX)Am%BAX)A0ZܹBAM N)A.W]BA ")Awz{+BAdB0)AծnBA3)AVGBAs)AᵋBA$L)A5ǡBAxk])A~Q+BAl<)AwBA z6)AhBA(&Äg)A BA])AVgBA{鶆)AS%>BAd]_)A3xDBAXD! )AmBAl'uh)Aۙ~BAz*AӫBAL*APu>EBA)A PBA`n)A54sBATii)AY ABAĎ2)A( BAqE)AJoBAUm)ARGBA*wK)AaBApR)An ;BA)A`b%BAzLM)AбBAX)A*$BALI+)A($BADuo)A0cBA!)AFtBAd#p)AG FBAŴ)Ar =BAL` )Al/}>BAʏ)ApBAa')A1lzBA0c_)A5BA0)AIaBAJ)AOևBAy/)AK+BAd )A_66 SBASs)AYĠBA$'~)A2BA6>})A5{BAmx)AU2=BA|u)A UBAt0s)AXWBAhr)A'BAts)A[- BA6مq)Ad&UBATب9d)A{E~BAt b`)A#ĺR BA])A̚X BA`6+Z)AjR BA|s4oR)ALUX BA|#R)Avg# BA3ڹV)A> BAV)AQz BAB;U)Ae@@ BA8uR)A M;F BAP\yN)A#`j:BAp| M)A|+ 0BA|NN)Ai?BA^])AgZBAߨb)A=2BABe)A$&(*BAHNoja)A7BApF[)Aٹ;nBA|œT)An|sBA'L)A%fBAdSH)A4o BAkk#B)A(tBA+d;)A ^FBA(p=4)Aٕ$BA@ &)Ac:BA0up()AQ>FBBAX*)ALBAD(8!)AS.?BAt )A=zBA@X)AnMMBAa SK)AfBA{])AGBAVW )ABA\.')A,3BAK)Az BAJk(AI BA1(Av@* BA`O(A}BALN(Ab;HBA0P(A¥[BAQ(A ,BA\-(A^,lBAp(a(AunBAKھ(AYFBAx;(AaCBAxd)A߳<BA|t(Aj}BAԦZ(A֔DBA<)AS8 BA dA)A@V BA4=S )A_FBA(ouT)Az NcBAl)AyBAl] )A땹 BAt)A >BA~2)A7BAHy(AW4BArR(ABAԺB(AI1iBA`̖W(AM9BA^O(A-`BALkY^(Ai?BA{™(Ah30BAԱB(ǍBA|X}Z(A;h,BA3X a(A;8R BAXd(A M BA8.b^(AzN> BAR(AAj BAn(Ax̲ BAQt(AiB BA9j&(AAŮ BA<+)?(AW BA(A ~ BA,ʶ(A@[ BAGL(AY ^t BA0!i(AWgM BA!(A) BAm꫿(Ad0 BAܝWl(A-A7> BA`;(A'r BA|~s(Ay;PX BAWЩ(Arr BAФ+ܡ(AWF BAH̢(A:QBAE$(AbV-pBAD$xȩ(A7BAzm-(Av^PBA<(ARBAtbS(AZBA>r(A(BAXK(A kBAI(A[:W BArg(Az)HBA؋mQ(AeҝBAծB(A RϩBAp"(A}͈BAF- (ASaYBA$2ޱ(A{BA8>(A{i BAЬ(AGBA$@(A[sBA\ (AGd'BA@B~(ABA@(AWк;BAP>MU(AtdBA3(Ai)BA7(AąBA(AϰBAT (AqaEhkBA=(AzAA4r(A^XAA(AcxAAX7(A8ɅfAAW[(ADE|AAtȌM(A? AA(Atm|AA]^(AAATLC,(A#)AA #W(A;HwAAȱb#(Aq&AA|M=(A8cAA )(AGfM AAv(A&AAL,(A>QAAڲ(AqµAAPxi(A~,6AAD~(AeAA0`*^(AWF+AA0hųj(A:AAu(A@ 0]>AA\MR(A] `LAAasA(A AAY(A_'gAA`1uJX(A@AAU}(AÛOAAm"w(Alx!uBAɆ(AObBAZ(A3LBA7qd(A`6BAO(AnRMGBA((A⺼BA\?(Au1BAp/(ALa:^BA0\;족(AZBAp(A㛰IBAp,(Al!>YBAᖐ(A3x~BA(׺(A>ilBAo^(Aq.BAT$(A$,OBA&`(A1FsBAˣ(A'BA0 נ(As~BAЛ܇(ABA%(AT|BAT(A'6uBAxԐ)(A2BA0(Asv5tBAx;(Av3DS[BA#}1(ABAI(Ak BAT2(ABADU\a(ACW}+BAaKA(AfBA8 `(AɹBA/=:(AIVBAP#R(A5BA`Z[(AtBApR(AG2BAA(ABAu(A AAP}/#(A ')AARM0(A~DBAl^](AELHBAt ,(AgPFTBA0[(A>kvAAO(AHTAAT [(A ͩDdBAw=(A )^BADW{S(Ad BAW(AUBA 5v(A}"tBA@ ؽp(A0RBAiXp(A&iBATtq(A6BA,`r(A2'BA 4m(AJaAAOk(A-AATl(A<|JAA yY1p(AAAaku(AVU=lAAH_y(A6AAw(A$`OAAZ`Zr(A7f:AAt%*u(A8AAu(AwAA#k(A%geAAsHi(A[@{AAf(A,mAA4:7c(ANj!AA|-_(AxAAZc(A.^vAA(Y&k(A]$,UAA1no(A\>ɇIAAWh(AQ).AA\K`g(A*zAAܿ z\(Ax_AAts8[(A- AA[`(AM4AAh8d[(A*yAA}Q(A:!1AAqe$P(AU;AAHP(AxAA<˯S(AeQAAKS(A^$AAŭ=Q(AWS1AA)K(At8AA̚wF(A+6$AA\'C(A(]AAA(A%,\aAAeu:(AĥB?AAt5(AGMu\AAPͪC7(AIAANM5(A[!CAA(A`{AAơ@(A[7AAOdDA(ABy%AAۈeA(AAA#e4G(AtAA0~K(AlAAP(A<0AA({P(Ad\aAA9=L(AR]AA\8;[E(AOAApe,B(A"]7AA,:(Aq"AAnU9(A|9ײAA,K(A <{AAYB!Q(A+AA\`c(AR(xwAAWPm(ARfѹAA6r(Am~AAtna(AvNAA ](Ae%AAH Z(A\?AALV(A~sAAV(A AA QGBZ(A;hAAp؁X(A=s/AAVY(A%iJ[AA1V](A"CAA<Wmc(A 8AALmj(A 0f]AAtEiq(A 5#AAӚ͋z(Aj\2AAX{(A@͇AAds(AAA0Ѿo(AbGAA i(AόyAAhff(AGlAA Yxe(A,x+ AA4h(AT'IAA%dq(Ay'AAr(A0yAA q(AUWAAn(ATpAA̖k(A[u[AAg[d(AF8FKAA##o_(AFAA :(A%AA73(A ȶAApv+.(A6$'AA\'(AU$|AA<Ә((AQAAhu؛)(A2rAA|/(A)AAM22(AMGwAA=t;(AkTAAH(AG{OAA|V(AAA0X(AaߔAAӺ|V(AQAA PQ(AFP AAt7K(APсAA }pI(AHsAA<FF(Aa0RHAAT:C(AmC$AA KW<(A<7;AAD;(AܢRAA@@(AWAA @(AdAAxglB(AMPAATw(AkIAA~~(AeĭAAP7>[(A8oAA@- (Am(p(A"AA!'j(A,(AAvg(A AA}Nbe(A AAx +g(A&AAl >o(A\AAL >n(A6 AAl[f(ANjAAeN_(A%AAX Z(A5zAA0̑R(A8G#AA`O(Ab}X(ASLʅAA4p=(A AAd̊>(A `AA;(A0nAA( '(ANwAA_(AݐV3AAL+ZA(AAA۷r'(Aa;HAAK-(A$IAAt'+(A#}AAz(AAAHW(A*^VAA eD# (A">AAXPZF2 (A1fԨAA>(As 7AA,S>(Aÿ:AA}w(A>tAA(AP3MAAP(A[AA7S=?(A`AA4 (AvAAd'(A,,AA(AiF=AAT4r (A4t#AA#I (AQ$AAHEj(A,=AA7(A4AAp}(Adj{AA@*(Aq8gAAh0 (AAA (AذAAHOw(Ao:AAt&(A ݫAA\? U (Ag4,=AAqS(A{ vAA'A]1AAA'A-x^AAX`ZD'AbAAch(A XCAA0Y (AS~AA  (AhBAA &(AؘZAAtO=\(An#AAD;"'A ̥ "AA;'A*׊AACR'A> tAAN%'AOYAAd'AtvAAxj7'A{0M5AAئj'AqoAA{t'A@tAAp'A]1q AA$;'AUϗ-AA|9'A,AAh'AAA('AeoAA|…'A[ZAAPOڂ'A?IAAe 'A15=|AA^'AAALͽ'AeMAA\u'A{&AAvQV'A?EAA<"'AP)KAA8z('A!M;"AA`J ]'A06AASs%ϼ'A4g⛽AAlS/3'ADC^AA'A$AA('A#t|AA^'A[G0AAسLC'AAAVC'AD2(AA7'Ah0AA$FLnȽ'A1ؑAATzg'AйAA ݷ'AEAA ܲ'A${_(AASٰ'Aa AAp 'A%mԶAAC'A/6`AA]Ư'A CW۶AA'A+ @_AA4'ATAA|r'A_T9;AADAAK)'AC%'AW1IAAň'A!yAA\5'AO#AAtx'AɡAA(m'A\Nɜ AA%LA'AcֈAA4n'AvAA`cv٬'Aj ¥AAl-'AƟNAA  'AأAAto'Aڣ6D\AA"都'Ae/ AAz*'A gAA@>;'A/AA4'ApoYAA 'ANᙨAA'A=)AAs'AԪiAA'A֌jAA`|a\'AՀAAJ'Aŷ\AA94f'ADAA[ (P'AׇAA(ǯ+n'A:ҥAAAA ˼'AgPAAh_%'AXߙAA@H 'A oAA>'A:MAAt zv'AOAA &/'AԪ&XAA ͠'A ohtAAxX'A(AAe`|'AvXAAԊa'ATAAY'AG-AAŘS'AuAAI߯'A22AAt'A+AAi'A1AAİ0_'A_' /AAH4Қ'A*6wAAd3-'A♂AA8<'AhAA4!'AٟAAW %'AI@ )AA&ƕ̂'A1AAXUe}'A5AA8Ew'AMܟAALvr'AAAXXq'ARKyAAyyt'AV AAbh&u'A@uKAA~?vr'AS_AAi^ q'AXu]ƜAA33l'AK AA 8>l'AN AAX5j'AeAAVd'AFmAAŐS]a'A3-zAA|+}]'AE`AAjjV'Ah9`AAP'A AA$/TO'Af1͚AA@CS'AAAAA Z~['AtʤAAVC_'At5kRAAL6d'AISoAA(ɩg'A:nAAhn'AT3tAAR,p'A$d-ӗAA $q'A3FAAm۩t'AAA0J0v'A 6fЖAAāG{'AX]|VAAL1'AAA~'An\AAڢv'AϾ^AA֌AA DkT'AֈAAT$ǃ.R'A;7AALcyL'A[AANglE'A=ȆAA$&D'ArCD7AAjIH'AeהAAbM'A]VAA1UI'A*AAlF'A%MAAUcG'A5W9AA@(K'A\+AANۂE'AI`AA>B'AAA,QU>'AK|AA3?'Aͯ]AAX<>'A:GAAt.޶k<'AҖAA 5'ApAA$UD7'AGAA T5'AR_8AAPhPI0'A:jAA| J,'APyAAG\>)'A$xAAPqwY%*'A'I7AA4 W,'Aa**AA\t.'AAAIfR,'A0AA@T2'AAAIpU2'AaAAr#0'Af6%0}AAX&%]'Au%}AAs'AG7}AA5'AnN$MAAZ:ù'AckhrAA$^'A>YAAZ 'AiyAA RA'A+AA؏R'AS<AAX9,'A~AAJ' 'Ad}AAd&zl 'AYG8M|AA$Ζ'Abdj'{AA7S}i'A4 %zAAhw1'A1;pAyAATEپ'A40zAA7V 'Aӡ*zAAxWC 'A*tzAA|E 'A' yAA 'AZXUxAAXe 'A Ϟ}wAAxm= 'AπU9wAAiAAЍHĩ&A,cۼkAA8O&A791kAAi۪~&AESMgAADOy&AayfAAQ&A6y"fAAtvK&AueAeAAj&A%dAA[s/&AVg_AA)&AnVR:_AAOW&AF]AA4t:&ALS%>YAA>AՇ&AJ 6=XAAaׁ&AvUAẠvo&AVqRAASPT[&A6PAA(^=P&AD PAAPQL&AQbHAA~…2,&AEAAS=%&AY3AAA6db9$&A@@?AAaj%&AxQ3>AAkf$&AB霐=AA3%&Ab{=AAU|Q'&AeeWY?AA:)&Ai@AAD1N,&AJqBAA1&A\DAA;&A}5HDAA .D&AGf QFAA`ZN&A,RGAA]8X&A5(HAAHML]&A>WBIAAWb&AkNAAJ̿k&A!.1OAAuv&APAA0:\>K}&AQuRAA}&Ax7fRAAfE&ARGPAAKzӘ&A$)PAAa.AAd5xb&AZ-AALck\&AR,AA~&Z&Ag,AArZ&Alg,AADaJy*W&Aȷ%*AA4q]&ANF_+AA̛_&A@k+AA c&A3vW-AA8g&AmL*-AARu+j&A.,AA?k&A( +AA>h&A!_*AAHըOi&Ay)AA$lf&AVg)AACVi&A`^h(AA4H~i&A6'AA|?d&Ax&AA vc&Au<$AAD}c&Ag(#AAd{Y`&A6]?B #AAH_&Ao="AAgB/W&A%/"AA2V&A"BU"AAQ^X&A!AA!pd&AG\ AA$x:b&AT& !AAT"3xb&A& J AA0;z[&Auq AAIW&AO7AA03ͤU&Aݜ/AA( eR&AV쀀AAp1V&A[AA DU&A.AAyW&AFAA Y1X&AvAAT&A^yAA໼0O&AAA`XM&Ah*AAF_H&A_ɣ AAd`E&AQ3AA\yyD&A886AAZA&A!\uAAx]l@&A/AA(I<&A=:AA<-x;&AfAA,7=&AAA;&A6aAAsB69&A#1w[AAS8&A[i5AAr<&AgAAnE<&ADm¨AAP[l:&AAA@8&A?AA,@5&A7WAAƆya0&A]<AA|b *&AMiRAA 8)&A,p AAt3k-&A\' AA\JX+&A]c # AAW0&Ak<AAJ/&AAAu,&A!)@nAA +&A_X AA$yp+&A1 AAd'&AAϤy AAmu5)&A76h AA(&A'= AA.q&&AP6 AAĝ!&A'BAA@:=$&A:41AA&\!&AGCAAy/"&Al AA f&A5F?AAXG&Ak@Ah &A @A &AX@A8nM&A*C@A+~T&AQL$@ADpb&A4S@Ai&A7#>)@A42&AK(@A j &A[]R8@Az&A6 M@A%Acy/@A3%A=#@A@~u%At~@A8e%A@A-E+%A$W@Ad4p +%AF@A%Aް@AXG~г%A1B?^G@A$@˲%AM@A)F%ADܴ@AԞς%A4dP @A8D%AqJ@Ai%A9@AL'7%A^2@At͵%AҲ@A%Ay/@A5>c%A.@AhY%A6@A0%ARq@Am%Aq_@Ai%&%Aג8@Ae>%AP@AC%A" @AD)%A( '@A4Y-د%A6V@AK%A*ʬ@Af*%Ak'@A,R}á%ATl0A@AXb cĨ%AoO+@Aa u%AB@Ad`,%A9@@AD.*%Aى@A,DÒ%A;,N@A(gx%AC/zD@A$1%AʺM@AlM0%A؟@ALS~%A,@Ahi%AiR@A&T%AB@Al@{%Ak1$@AxS;ʇ%A$˩@Aԝ%Ae!k@Az_(%Ak@AP;%A?B@AtE%Af@ArW%A-@AXΈӈ%Au@A`X(%Am@AƂ%AdQ@Ad[T@%A>@A@l|%Ayyb @A[)Zz%AKX[@AT_Rsx%AbA;@ApIu%Aqzt(@@A\&;v%A@AxIs%Aޢ@AVTn%AغL@A|h/l%A17x@Adk%Ai\@A?m%AI qΝ@AhZnn%A`8@A\}i%Aȥ䷛@A8h%An6i6@Ahe%AVT@A ;f%ACY@AP &m%A42@A\kl%Aé}ۘ@Awn%A-B@A2"ss%Ay?X@Ar v%A5#@A[[ѕx%Alt@A>s%AH|y̔@At)t%A@Amu%As1ؓ@Axj%AI rE@A^f%Aۑ@A$|wc%Ama3@A蠓^%A@AZ]%A*#@A7`%A@2sv@At]`%AXٓ@AoF`%A:@Axba^%A!@ALv/Z%A8@A)ALX%As0@A ]U%A M@AxfDP%A@A<=J%A(@AlH%Awe@AF%AG4vw@AMA%A @A(>6?%Al@A@`@%AAi^"@A $C%A%@AVC&E%Al5@Atc]2B%ANbT݉@A8u B%A/@@A/s>%AĀ@AV=%AK+(@A(;%A;bк@A(_6%A`鸃@A*2%AA6ZB@Ayn-%Ac:@A0eʂ+%Aݒ+@A'H'%A@A'%Ak@AD# %A@AG!%Al@Aܿӡ* %A0 @AY$A@A"$A_'g@AI$Aμ@AXK'} $A~@APٞ8$Av_@0~@AT+.$ArLM|@Ap,j$AK7\{@A Y($AXz@Ax$J$As20y@At0hb$A x@AT$Aw@A~$A )Hv@A,'K $A(x*Yu@A_ $Am?u"u@ApEM$A s@AȰr$Aߴr@AT[$AnIq@A/oE*$ACh)p@A&#$AOMW>p@AđJC$A]#q@A$Aċn@At|2$A7ekcl@AD$A<Ok@AzH$Ak@AZ-S$AV~h@AdI$A?xg@A@/Dֺ$AD+pmg@A'$AxPde@AW5$Ad@A$Ay"fc@A4$AhIn`@A]&$AR]^@AD q$Ap-\@A w$A6\Y@A$Ca$A `W@A8vN$AUAU@A:X$A{T@Aދƞ$AsR@Ad Qդ$A۰3R@A|^-$AP@AGy$At5O{O@A%$ANM@At{w$AOЙwL@A:$A%2YL@A *$ADI@Aܼ$A^;H@ATΐ$AQG@A,$A bG@ApO$A( F@AG$A=ԱXF@AU$AΎ}E@A`򋏥$AiC@ATȩ$AUo^B@A%-ϩ$AD3>@A8都$A }=@A7T$A<{;@AM-$AF:@A$7$$AY3r9@AI$A8@A6?$AʱH8@AD×$A=E7@AH]$As~6@A }v$A(ru6@A $5$AiT$a8@A po$A&9@AtDw:$A:@A,["7?$A/{q;@A*$A>ַT>@AtIø$A+?@AHݸ$AYA@@Aħћ$AQMD@A8#$ABMF@A Ӯ$A_ G@AWӫ$ATG@A\No*$A+hH@A NOuh$AhPI@A$A !J@Ä́.$AgL@AN}X$A` nM@AlS2$Aad}YQ@Aph$AZK->S@A21$A[i U@AU{$AL;#X@A3`^$$AwX@A$A2X@AX7@$A`W@AdV$AX%T@ALhk$A3DS@Ax$A=AaQ@Aj*$Ah'\P@A(Exo$AE$[ M@A <[T$A|LmJ@Au2$AG0I@Ad?0$A|<8G@AW6U$A׬_F@AD$A3 ^=F@A}l$A`"E@A췴i5$A%+;B@Ad$AZ% ?@A8-$Ar>@Aэؠ$AN=@A(>$$Ap1;@A}$AW2|:@A]#$A2q9@A 4$A)Z98@A4pz$Aܶ1G8@ÀQ$A񪑒 8@A(`İ$ACiO7@Ad+$ADm7@A0 ah#$Ao5@A4)$AR6R05@A@I&$APv3@A+U$A,V<1@A@3$Ax1@AS?AD= h $A+*??Ah{ h$A{G?AY$ABD?A$A~9?A\|s $A2L?AD$A'R?Aԥ$A?t!f?AQ| $AhG?A,vU$AR^s?A0tB#A)s?A[#A<>g?AH7Ua9#Al?Aې#AaHU?A< ĸ#A1Q?A>#A%~?A+J#AÅL?A<Fk#A@]/x @At`"AU @A"A|> @A+K"A @Al߯"A+[V @A4y"A#Dž @Ak"A;g @A~,"A;jv@A%."A>H"@A/3"A:/@AY-"A# R@AO^"A@@Ad2#AU@A ,#AiD+!@AB #Aea"@A'H #A)"@A(A#A(N#@A ݺ#A2[$@AP#AfNiq'@Ah!#AڍT>,@AZ)#AP6 ,@AjE.#A&..@A@a4#A!n8?<7@A|D7#A 7@A\kz7#AI%9@A?5#A>Dꋴ:@A$c.6#A5 z;@A9#A=@A̳(@#A `@@AA#AN.B@A3FJA#A| E@AuF#A5"G@AHfF#AF"TZI@Ax;tI#AK8J@A:#Aec@A,f#Aa@A:#AAaϢ@A1r#A.2@A|E~#A{@AxE#A[W:@AT(#A#|٪@AAo#AZ>u`@A$ #Ahޭ@A8QM#AF]K@AԊ#A f@A (#AXҙ_@A8/q#AǤ 9µ@Apb#AjY ͷ@Ad"bl#A1)@Ap!B1#AS@ApZ㣛#Ahoqw@Ad܉#A&@A#Aq@AH #Aڪ@AX#A/@Ah䗀#A&@A`H#ABJ@AlYX#AQգ@AXT#A.O@Agiq]#A!@A<Y#AG@AnX{#AŻD@A0D#A@A #A* @AhH4RX#A_~@Amj#AjO|@ATXy#AO0@Aha#AdNR@A䵃#A3{Ln/@A8 #A@A#AϐDv&@AbH#AU|@A~#A(> *@Al h#AJ(!@A#A&̓@Ap#AY"@A( I#ASv@AhI J#A3T~@A<%#A8ga@AR#A=n@AtJo#Ai@A$#AALQ,%AAdS0#ACa*AA3ف/#AAAz#AzOAA 49#A AAH]#AA AAAAľ#Aנ}?AA#A4?AAJʪ#A>@AA!#A2NCAA\?_#A} DAA>G##AsrDAA\̹#A+颙EAA #AW`GAA/#Am;jIAA$oE#A86aJAA;T#ApHKAAϗUv#Az--LAA(#A0LAAaٷ#AgZqMAA#AktNAAUܟ4#A %>OAA8##Aj PAAY^#A,ARAAtSL#A7hk9SAAOi#AU/TAAv1;i#AY+UAAojk#AWKVAA2#A4EXAAlZ#A-ZAA@s|#AB)h;[AA!_#AF N\AA7ާ#Aֽ\AA$zEϮ#A]AAPǣ:ݰ#AwZ^AA4h$@#AFcAAW#AueAA4i#AO:hAALޮ_#AlihAA?a̲#AǡiAA X#A{iAA6IY#AB_kAADJz #A 7mAAWH#A.DoAAHZ#A8nKGrAAO#A<;]tAA-b#AFuAADX;Y#A!ܴvAAv #A$2 wAA8u#A{xAA$GAH#AA4xAA P\#A?tzAAwY#AZǫx{AA-ѻ#Ayּ|AA##A~}AA.#AD܏~AAؗČ#AjurvAAD#AAAt#A5^AA,X#Ae~AA8#A{-mAAe,׻#A~WƚAA`x#Aώ AAL/j;#A5AA,#AhAADv#AYQAA˥#AUN.AA$B$|#AAA8#Aw,AA05̯#AIwAAA r#Av`&AA+#A ďzAAx3ϴ#ANKߕAARm#AuAA,#Ah9AAdG#ANAAÆFH#AP8AA ~-#AvU7AA,җ5#A:AAi#Aa0AA<ň#A G1ͅAA! #A[3AA3>#AzAA9#A,FAAlQ)u #A"1AAr+Ғ#A/鹨AAU*ݐ#AOAANq#A|AA$9%#AHRAAPs<#AG>AAD=#AlAA@a;#A+@}AA`6#A AA~.#A<|GAAJ"#A.>CΪAAXB#A AAaf#A$AA\f#AAA,~ՉAA"A:AA¶0"A3ξqAAa"Ai<ÆAAg"AU{6DAAT#7"A΃AA<.ɋý"AeAA"AiOAA<~"AA9zAA(8h"AY@$zAA2"A6RxAAHlQL"ABxAA`ל"AҒwAAG="AH<vAALk0"A+sAAܛ"AlZ qAA"A0pAA "AeioAA"AtmAAB"AlAALl"AmgAAf"A#2eAAO%׏"A^bAA(244"AZ`AAJK"AsV _AA}_"A|\AAH0P|"AYAATo"A) eWAAxKQ"AJMSAAx"A4RAA@!>&"ARAAՠ?"AnNQAA\}"A~ PAA"A~LAAO L?~"Aβ;KAAvOz"A2IAA$&=xy"A `WHAAVu"A~OGAAwr"A7lEAAP4ir"A sDAAT:o"A֠?AAt?|l"AB"=AAYf"Ab;AAl=e"AlX};AA4AANY"AN2AAМU SY"Ahe1AAx' E?["A0AA|!V"AS#|/AA p@R"A -AA踌?O"A `; *AAXO"A(AA48AM"A I'AAL"Ad|!AAT|ȢK"AyIAA` :-I"Ak 6AA@D"AAAh!BC"AmoAA4¢?"AKmAAOl<"Ab@_BAAlƍ:"AkCAAk29"AE5 {AA)kZ:"A ,uAA72-9"A1G}+ AA3G?5"Ai#1 AAX5"A>oAA1kn3"ADZDAA@R3"A"AAD:"W1"AA AAp*_2"AF{oAA4A0"AIl@A|,"Ak!@Apa0,"AB@AL=*"A$!@Ad\)"A2@A\+"A@A,+"Aգ@A?4)"A@A,.)"A;^FJ@ATwr'"A[`Z@Ao_)"AB/@A lH("A4s@A3*"AG@A#)"A =@A.)"Ao_@A8u/"Au@A/,/"AqS@AHF*1"A0r@A:B9"Am @A56o:"Aďy@A48;"A]@AL#;"A6'@A]="AǦsx@Al?"A!@A``@"A~H@AǃV+A"AZh@AVe?"Aɂ{@A8?<"AXDs@Au9"A1r:@AsD8"A9,A@A:8"AEޯ@AH| :"A;}f@AлR;"A| @A;"A)ԝ@A:"A[ۯ-@A|t 9"A1.@Apr9"AS@AW49"Aj뛁@A"8"AI*kВ@A97"Alz@Av47"Aآ L@A:17"AE=:@Aj6"A@AtE4"A*ه@A 1R10"AE!@A."AI!@AR1"A#@A1"A{@AԙTf0"A;@AՖI0"AaVL@AAe0"Ac&#j@ASw*"A @AnU-"A}¾@A<:-"Al,H@AX\*"A1ٵ@AXмT&"Atִ@A?B$"An ;@Al6 &"AF8@A\& s#"A)U @AdGp#"Aiz@A@rF!"A 6.@A6HV "Atۮf@A@)"A@Aa5"A0X@A""A~@APdL"A ~@AdC &"A{^8@Aܪ%,"A U@AA/}0"ABUI-@A즡3"A;62ד@A-;"A~{-@A$gȷK"Aݸ@As\!X"A N@AN["AI#0G@A-+_"A/á@AS]"AJGjȟ@A[?^"A$ePg@Av~le"AoҬM@A8wpr"A춘@A'js"AA!R?@Atl{"Ah_@A}"AM=:@AԬ.}"Ad=@ADF@̀"Af@A5Y"A%6[@AN"A߉@A\F_"AQ輇@Ai3("Aqi@A..+"Ai@AlL"A0G~K@A(F"AOw|@A=Qm"A\w@A"AK9u@A<"AXp@AWʚ"AjGBuo@A<"A vh@A0xښ"ATmxg@A "AɉCf@Ax'[0"A?ld@A\."A*9NVb@A"A13a@Ayc"AZ_@Ad2"Anrh^@A"Fx"AM|]@AoW"AF0iT@A||"A_ S@A G"A:W1EQ@Ax{"A6FKP@Al/"A>& N@AD_E"Ae>GEK@AL"Aa*J@A͎"A8G@A0"A |F@A(ѩ˸"A6C@A_"A$B@A("ArB@A$Ȏ"AgA@AЫy"AtS@@A"A֘3?@Aۊ"AK>@Apmu萈"AN=@Adw~"A <@A">u"AQx9@Ap"Am8@Al"AE.| 7@Ap3QJ"ADH%2@ALh4H"A]l/@A_T"AL'r+@AR(`"A+])@AB"AfA(@Ahl*"AGĤ!'@A("A h&@AC ͗"A\$@A{ɘ"ASX:#@AsY"AE"@A""A_!@A$jz"AS!@A2"A@A)K6"A -@A ў"A0#@A6 "A-'얔@A)("AS"@A9"AM@A [nc"Ad G@A}"AE:}@As"A5F0!@A 56Z"A1Y!@A}ؖ"A܄ @ATw~"Az@A=}"Af`u@ATT"A6m @AQdl"A @A@X2֎"A3@Ap"AD E@AMY"AMkڭ1 @AĪ,F"A 5@AI"AC#4@A0>eZ]!Ao~U@AlgDa A}\@A峇, A\@A, AB~B_@AL:3* AW!L`@AՍ$' AFla@AfB& A Bc@AX<' Aᬙd@AUS& A{d@A! # A]heIe@A,K# Aif@Ax*# ABX`*h@A@Uel AO7j@A Ax9Yn@A$hL A?o@AG ANs*En@A+r A6+Reno@Aw A@\q@Aoڣ@A+)A?V:@A̐+A C w@AxyD^;A(t@A`Mp=AGk@AhXMA8@AV"DRA {@Ah.kQAG @AXNMAJ@AP"RAXKÌ@AWmPAWAvb@Ah%USA(m@AxizKAР1@A&7)PADC!@Agg@AA`9h@A{^APli@AAbWSj@A`!EAfk@AYK<A ]ml@A|.A u@ArAUbu@A0DvAw@AXA{H7x@A^A<2ky@Axk\A+Ղ{@A'EA b}@Ap͐~XA>m@A Aث¡@Ahc^AnVK@Aശq A9@A"k/A[}-Ҋ@AgAG@Aw ?A|@Ao e"(A$+|@AHNw+AWj}@A<+A1u @ALU(A>@APAQg ނ@A ALx,@AvAʼ…@A0(;A @A 9CA]H͏@A V7A&-<@Aқ1A G@AȇxAM/|*@AhVAx'Ar@AxAxA D@AG%`ָAeV@Ap)Az@A(h A"ʆ@AS/AFÕ@AxɪA4p@A`A#P!@A-=A|~VQ@A`-ɨAc@AA:"@AtA]£@AHœqA;8n@A>A^l@AOwAL߆@A, A8@AXRA 9@A#AO@ADAA@A(OɴA|z@AЙ0%iA>VY@A<ރAQ@A)ЏA{U^@Ah`ΊAxh@@A@A9zm@AP#AftL@ACA_l@AЈm>A΁|b@A>~AI@A@bAQ@Ax~At@AXWqAI@A~xlA=)@AkACmu@A^qhA<@Ah6 XAzi@Am VAܩ@A84WAgɮ@A IWJ~QA2ծ@A0SA6@A`bhBPA2+ca@A`eJA@Ag~Aw@AhkeAAqL$@A+Aʂ_߯@A7AZd]@A=x[AjT@A۲A4U@A`>AL1T@A)AWc @AXZ&A\h@A[A6Ō@A#FYTAXI4@AFAp[Ɍ@Ao:=AC~@A``Nm6ASS @A`Cq'A59@A@!A>#i@Ap}@A5s@A@AU6'`@A`RA܋@AkPA򬲀@A^A!@A2ZAI40\@A0[%A}S>i@AAh@A0X2~AMsь@A@;AԻ@ApئAM$T@A [A0o@Az=A=c㖋@A@Q?AE@AqDA+@AϊtAK$&=@APJcAx@Av5bA߳@AR{YAÐ{@A`^mJAI)$@A Aդ7~@A0?5AZc}@A`C#-AS{@AgA#Âz@A`A\ȯy@AM:A4x@Ap LFAF__x@Apf6AXv@A Y"AoN>ct@A`%A)v@ApuAnw@AZA%ѽx@A AWCy@A`k-A;{@ACAj6F|@AXAĹ|@AA-tk{@A^ABߘz@A*Ay@AXFAMxy@ȂAx@A.AQw@APv9AA&rw@APAŔzv@AokAGX?v@AлzN}A˕&?u@A sA;s@A3 ]:kAnXs@A}jAzr@Ap@A9ADso@Apփ$A̕%,m@AG ( A8"m@A A$m@A@ЃZAo}l@A@tdAĔ*j@A=Ay\Yd@AJA|<@APfA8d-@A .A=@AKZA@A`DnAS @AW(An @A¼bA!D[@ALuAR@APApC~@ANA2ž@Ak(q(Aʭ@A (AM?AP]VXAMJ?A ArY?A/F&AR,?A0[OAsKB?Ab:A#~?A`7W3A ?A`/A҈J?A1<1A.eD?A0$AOK?A ywA)K?AAosڳ?A# AhYe?ABnYAy q?AwA>~R?AtN?AA?AGAs?A`NAܬ?AĶļAJ?AU< Aa ,?A`*MDAd?Au?v3Ay?A`sJtA(?b?A=[idAR&_?A!gxGAyi?A}9AZ?AF%A?Ap#(A8g*?Aڇ/9Awh?A+'<Am﫶?Af`@A'ϑ?A DG@AߛX?Awwk5A?Ap1/A30?Aq+A|?A0P-AWK?A@;AŸή?A@}x=A-eԮ?A햁8AI&£?Adզ(AQ/?A )(!AIoz9ź?A`oAYNQ?AfY AG酶?AؤAlw>?A GVAL"?A0ޱ` A]?A/,A1F^{?A0,)6A\?A%A6بѤ?A@ArŻ\?AzmA؟?ADuAJS?APRRAR@?A#KAYX?APA\4?Aۇ)iAWW0A-?A2,AĮ?ApweOA5E83?AȉA-6t?A ,+ܴAt̴?APȪAW˘~?A|A65ǧ?A9aAxҒգ?A0㰋A8(K?A,AK:s?A:A^?AxAq7D?APgAg,?AWˉA*Ls?A<ʾAm^?AA,?ALk,A֢JR}?A55Afh[Iz?AAM7x?A AS{ A]gw?AP,A VjIw?A~e܉Ao(v?AWӒA>{plt?Ac"APs?A0ƭCAUt?A{AKs?Ap.%AEr?A AŊq?ApA9cp?Aw2xA f+m?AH0A{Ggj?A yRA4hZg?A*?A g?AZ5A2 g?AP6A&k=j?Aহ(6AU: k?A3Ag;Rl?AaF(A}gi?A 奦A4Zc?A Ab?A"Aq =d?AP^A{]?A&8AX\?A0 Al"bX?AABV?A.AqanQ?A@AҔP?A5A'A`֑R?A`֜xA.cQ?A곺A#l-yN?A'Aju"N?AHA:έL?A@D,A ta*H?Ay(A\LF?A`yA34B?A\A{KA?AdHʑA??A 1NY|Ai*=?AqAID`;?A0ElA90e8?Ai`A_k8?A0YA)7?Ap=CWA}4L7?A;VA:7?A QA=jL7?A`?#wLAuT)66?APV*HA׿5?AרFA;ԯ3?ACA9K3?AtCA]xf2?A>BAUi0?ApOAAGq.?AOAAwET-?ApOAAE2,?AP'OAA;*+?Ap+@AKt(?A0 (!V?AjnD'?A06ɚ=A %?Aâ:AgFvT$?A.7A8I"?A?c4AC!?A@ݲ]1A!GI?A A}ѣ?A۶A^?A`ﭩA ??AFGyA?A@!p Afε?AA:^?APCAF"H?AʕAxɱ\?A0jA'=?A0gTA!c?AeMAe?A/FAA??APPMoA[$z?A9AQ"?A/A?AV9%Aس?AܰseAس?A MdAm?Aq@AQ"?A@[AJq!n:?AˏvSAGq!n:?AAA&%?AЁndAsE?Ap-KKAk"߀?A?ـAnj_?A>A/?ApmȩA'?Ap^pA)G?A02jAdj_?A`reAEӚ?A<Ay{?APdͫA` ?A=<`AY?AuA$ć?AP'FߓAB?ApAk@Y?AoFA*?AOAo?AhzAVݛ?A]={A?Aj`+'{Axws3?AOxA [?AhuA $?AЪǛuA~?AVtAL?AೄUytAWF?AǁvAy•9?AP.vAI ?AP>PwA"<?AP8wwAդ?ApHuAzk~?A`VCtAfgE?ApÛsA´?ACnA,3?A gmAk?ApEےfAjϠN?Apj0eA+'?AqZ_Aa~?A@v \Ac0X?A@;HZA6 JJ?A@sZAA?A&YAC,?A&YA1E9(?AfDWA-dO?AЉ%UATc?AI >TA6?ARA2o?ApAQA|??A fQAm?A-`A7]?A h'h`A?AA:bA%G?AebADnJ?AߚbA1>A<(bADj>A@,j=cA= >A|eAx>A0}fAsA>AojAU'>Ai#pkAc<>A qkA.a>AL+|kAl>A@9}kA~u}>ApiצkAIՆCo>AcCkA n>Ap+vkAPyH>AkAh>AP|lAݫ>AlA_>A@#lAm>A[E]kA>A`@kA>A`˖iArz>A`^RiA%j:>A 8̒hA:%>AvTdAs>AEbAF]L>A []AnU~>APkV SA#}x>AplVNA\q>A 688IA^E>AUnFA$K`o>A0Ë7?Ak^>A7A{`p>A J0AL|>A-A\>A`\,A?&>A@*N)AR>A+!&Aw>Ap}AY% >AHA4=[O>ADuAM]>A{׆ AZ*>A05Ak@J>An5IA&߭+>A6A >A0[lAF@ >A A?s>A0oA<`^F>AAj>A Ar>A0PAզ>Aw'A9>A0#KA{4>AAЌ>APA/>AYK_A9U>AEA"o>A0tAzN>AAq>AvAkj>A1'c{A¡>AVWZAV5>A/pmAH.>Aɦ)A|G>A6{A8UO >A6wA7%hb>A $A>A4cAt}>AyAY>AP>.ATQ>A9RA|Y>AcAL?W>A@,mHA9u?>AA0Aٖ>A@ CAȹ?>A +AM+.>A AC?>A0vyU>A^WGq>AT^A5i>AU0AiȂ!>AXACȵC>ApyAz>A ҦA>s>APg`QA >ACA^Ą>AEBA[m?>AٺA*G >A0AѴ2@>A-A)1>ARPưAONl >A0Aߝ@>A`nA!'>AAA0Y7Af>A@]Al|L >Ap"~AU@o>AVyAsRU>Ah{A yvϼ>A1۪A 0f>A`  A&>Ao'A>AAᠶ>A{kAWT>A`1-6Aިj>A -nA:Z>A8AbV>AC^{Aň|>A@U>A>A FA->A@ Aâ>A7[AlY\>A7]AS>Ak7IA09AǺ>Akr}ARﳺ>A@ixAˠ>AI\OwA4>ATowA'k>A zWuAXB.K>A(sA[>A6sxrA׮>AhEsA u4]>A0L>vAMP~>A xA4Ƿ>A ƏzAp>A kyA^d>AКwA-,ϐ>APztAzsZֶ>Al_ rA8n>ApAQ3ӷ>AT|lAR>AiA\ >APcA7Lnv>A`5wG^AR7>A_.A\A!v}">A ZXAǩۖX>AhUAx>ATA >ApQ7BSAorS>AЛ LQAB˛>A0NA챹>A0TbFIJA>_>A``kuGA4z*>AߥEA_^I>AA(UτBAu%L>A`>4@A H>A ]@A+k>A2S>A6I>A*=AϪ>Aй=A_ǘD>All>A8þ>AځM?A֠}->Ar?A>ApKR`?AU>ApZ>AⓃ>Aɡ:>Af㳱>AT[>A=>Alay?A悰>Ař[@Am>A{BASi|>A㐳CA Z>Av{EAV>A?GAѫ>AHACڏn;>An JAS>A@ LA->ApJvNAgCѱ>APgPA%f>AkPA>A [PA4*Z~>AWHOAbn>AH8NAW:5>A=NAiМ]^>A܂MA0򈬮>A0*!MA#d>Ap]/KMAE}>APFZWNAEg>A*#*PA X>ALASAÕD>App^VA<[$>AqXA}sݬ>ApZAAmہ>AZZALk)>A@uaZABNW>A@XAJ>ArlWAz:>A~ۋVA6'i>A0iVArݣaȪ>ATuWA%Yyd>AXA/>A SYA;ѫt>A@<YA,>AQYAM>A%YA%>A YAJ,>AEZAZ>AjZA rz>A8ηZAē>A`յyYAe>AIYA̠>AK4YApn;>A蘑YA ǣ>AwZA^>APXM#[A7>A{\Anهˢ>A@v\\A,0e>A6e~[A#>A WZA^oҡ>A w\HYAKw>A0"sXA,>Ae`.XAHh>A ]-XASs>AWAƞ>A XAA>AiGXAXn\ޝ>A`gyjCYAUN>A`PFZ[A >A@4]Aք+Ȋ>Av2]A2ۑ>Al]A>A϶r]AĘ>A_%\A&>A \?]AaPY>AM!^A*+>A+n<_A1#>AOD^A.>Av&]Aї>As]Ar[>A_D\A?4>A [A=A–>Aе\A@^'L>A]Ay#H>AWTT]ANF>APe^A媂>A0DQ^Ay]>A]A"@A>A8|0]AT*B\>A@]Ax55xF>Ab"]Aȼܑ>A0R{*_AQ+z>A D/`Aa>A`N"`A>AG`A6Y>Aq`A8qu>A cA=㌎>AP 1$eAs'2>AZeABK>AƔFeA>%8>AʹdAbd>A`%1bAY5>A0u%/bAyI>A$aAh08e>A3Z0aA9P>Az+`Aj#kc>Aj1`A=m>A0F_Acx΍>ApEn`A)F>APAK`AB>A`B`A]vm>Ak@bA}K>A0*d+dA>AS{eA}^>A*JeA ܃>A`YTpeAf~p>A dA}Y>ApSbcA`O>APDtK&cA})/>A j]cAC>A5 ecA}4Vā>A#FxbAz^@>AN\`A#N>AR_ANI>A0I^AE>Adq'_A+ACA~>A`P]A Ί}>A)9w]A#}>Apg]A '=|>A?o^Az{>A`3n:^AݶXXz>AŹ`AMD{y>A|aASH y>A6)`ATNy>A`-`A<rKx>AROH^A(w>And[Aٸ #lw>A#7YA v>A&HYA0u>A0ĖXA0&~t>AXAUB-t>ABXACAir>AcYAIM[q>AYAzޫo>A68ZAS3o>A"YAIon>AК$bA.?SAm>A@XmQA1+m>AMծPAR l>A^I|QAtNk>A@i]VAv[AP$hUYA1+k>A5 ZA*j>A`JE[AzcUj>A02[A69i>A`+L3ZAeh>A0FUZAC h>A-[A`/g>AX\Alf>A::7]A,6f>Aв^AMf-f>A'weA@Nf>AwgANe>A"%iA<.se>A]'jAE7e>A O;ݗkAOd>A0xmA#nd>ApPQxoA[_d>AdpA8n*~e>Ac#wA0Fe>AMyAapWe>A`xnzAdvd>A@Qx{A"d>A0Q{AJ{c>Ag:{AVc>A(a{AWGsb>A#<A!b>A DAbhf|b>A QUA߷b>A`H ALc>AyڜAkZc>A]Acc>A-3Axlc>AP{bA7*٭c>A`Amc>A|A:}uc>A AK2Rc>AU>Adb>A0IAfדsnb>A p˘Ara>A0?bA?`>AG 7NA'ug`>AVAg{c4`>A+AC^>A<9ǝAm]>AiA@;]>AH,AFv]>A?OA2}\]>AMAYvE]>APAA7]>A@1@Aj]>APXA\>AƧAt(\>AA\>A?NWA=w\>A^2.A.s\>A0վAZFi\>A0c+XAy\>A 8zA,\>A`ΪuA;X%]>A@TחA ^>Ah߼A^>A tyA^>A [Aº^>AAW ^>AAA;ʛ^>A:`0A]>Ap(A9X-]>AP|Ay]>A@ӶAD]>AC Aj]>A<A3:X[>Ad,|A;A> AFZY>A]*A/W>A`YAxJV>A0AωwU>As.{A%>T>A".6״A OR>AT8*A|V:xR>Ah啱A^mP>AqTA*N>A@@AX$M>A ѧAF^K>A#AǒI>AJOA G>AI A F>A Bz̚A潬D>A0hA yCD>A7ًA>n̺6>AP~A(>AaZ+eA l>A]w;AzF>A]o7AIH >Apٹ},A>A0|)A_F,>A)>&ANgo>A0/[шA[=A A:1K=APj#A iÕ=ABIFAKoL=A AH ^=AȜ AL S=Au|UA'D=v=A3UAG=APm lAs5!=ApOAUx=APz5sATF=A0(vA8=A]A4c}J@=Af #AR7=Ap= `CAgl)?=A84#AHa=A`CCAOx=A'A*I =AhAGrEn=Aɸ2uAG =APO{Ah=kٱ=AڑALBϖ=A@XAЊ=A@֝BA)Xij=Ap=Aőٳ=A=mA9t=AV}A߸=A!>Ab=A}vdIAc?ٻ=A@fA=M=AE,A;ЌiK=AAADR=A BPAx]=A@ Aqcִ==AӞI A ؿ=A`aHV A=A, ARzd=A j]н ATMȼ=A; AG=A* Al=A }2J APmP=A`> AP(=A`m_y A~*=ACF0% A܎=A * AI R=A` Az`bR=AcS_ A+ R=A ka A {R=Ach AP!=R=AKXl A=TR=ATo Au]pRPR=A { t AX{Q=A#˓} AKfpO=A @{ AoOgO=A`] ATM=A E ARZ.>L=A`XW A3L=A A6nS'L=A7 A_Bi&H=AU AюaG=At AeO9CF=A" Al@F=AM_g+ AU D=AO26E AoD=AmpF A4D=AulH Ada*E=A MoZ A8E=A6Z A!Hx~E=A#;_ A)}D=Ac Ak7?'UE=A@Z n A~F=Aq{s AؤNF=ALq AɮF=Al~ ALOr_E=AL A[D=Ar} A)?=D=AXk A5D=A % A8NRE=A@֨ ACE=A%C A+bsE=A A^BC=AgJ AdnA=AgJ A[@=And A >=Ay\ A&S>=A Aǽ@>=A;C Al >=A`j" A,==AC[ A6"==Ax A e >>=AB ANsfX>=A` A_m>=AA ALnmb>=AYM Au'p7>=A D) A==A y A]Ɏ==AFL Avz<=AϱJ A05==A A <==A@U AT==AjF A7N.\==A` Ay ==A { A<=A . A~$.;=A]} ACgT";=A^q A:=A#P AwH:=A @D A w_9=A\. A .u9=A#P AVO,9=A;߈ A_9=AUO AM~8=Ar9 A+8=A@E Abln8=AM Ap;8=A-  AGxA)8=A#P Aq|98=A` Ac>bY8=AEV A@8=A@F A98=A Ay)8=Ab,d At~8=Aq| AWAR8=Aڍj A@xA)8=A|HX AP7=A̒ A%{7=AB| AϽU7=AƤ AS7=A4.% A놯7=A A[c"<7=A> Ar?6=AƯ A43qmE6=A(k A< i5=Ai. A _6o5=A  A\5=AK A4 94=A  A%4=A@Gp' AP3=A|$ AXh3=A (} Ay2=Ä́ A6E><42=A@%X AOɉ1=AzǨ A B1=A`VB AN1=A֗ A0=A`{2 Ay*00=A-%Ӻ At/=A :u AL/=An(, AQ/=A`Y; A)/=AᩆS A)T.=An  AAp7.=A[=A ACܱ=A` Ak=A" A<=A) A<z=A 8 A5K ? QA.!xMuA0uO5@?E2õ#'@h @y5@6Tb̵@ǼW//@;¢[j@ غh$:eҦ@s14@G@toı@BKYYm@S(u@*h ?@"JO@GĐ@s @?aa+|}x@bX@cFqNp}# v@='7@,?qGe Vlt@ʸ1a@^?.@n@ 6@,"XՅ@pF~@tK+]x@\RL?:DG!P%?ξx־m.޼JT47 pZi4^O ]:X,ߌQ9)a![bgk>!3!sv OE~M*Ҷ᪬MI?c)tB+z8z ;Fn9*$>~o a?BZ $33t6ϲ/{ {įG< Y-7]d#I9z`|Qwwczsǩks`WBqpɳ?pQaa`*2.aa7dca^]4X?]=WVS}SSMR3FJXF/1CeBA:@[3>M3_1fy 91V8޹/'||/35k D-e"w[T{3"-9#!* \ՆZB  'nJ [# \ oWV4,=H, IVU˰.$̻/Vz*[1z1\l}!4̓#U~Pk3d{bp@9Yt׬lidDKm ;A@ ,J.];AtiԂ;AEޙz ;AU0#;A@pJ`r;A{{ ;A|ZXa;Aµ#c+;A@PI.l4;ALD0}go;AUC27UC%;Ai4 k=!;A4*- ;A4Or;A6u̳;A@(i<a4;A N>v;AlT?sM;A@)3 CX;A_$-Jv';AgPx[;A~xy1d;A@WzZ;Am;AʛI}0;A8FѿOc;A@yQ,c{:V;A@Q*Ҟ;A@B7;A!oSy B;A.Apeyѓ;AQ{-N/;A@޸N`;AY q,.O;AMXPRԉ;AWg;A^,;A@~L$!~;A@7f};A o}z;A@뿜!@ܭx;Ax-kv*x;A@r@O0Zv;AS;o{Tt;ALmH@)t;A.I뇱p;A %AW_>o;AG"wht~&n;AlzZn;A@)nm;A@yqm`m;ALDt?]m;A@#%Xt!tRm;A-kta+m;A7u &[k;A@\o 0*aj;AȝQFj;A@yOY( Qj;AAj;Al@fh;A_`Ғ+f;A@e2-e;A@ڢp?e;AT R&`c;A,2{b;AN]tJWf`;AeCp`;A 0Cg`;A5scLn6_;Af,U'D<#^;A_I  ^;A@O{^Y;Aqem XeX;A@ˍzW;A;Aڲ|)>;A@NhW)<;A|{ޢMu;;A@U2:;A/'β O8;A@DžIB7;A13M4;A@8zh1;A@%GE/;A@k72\.;AW$"C-;AۮNM(;A TV%;A## 2o}Z$;A@%*0@;AG/JH꾩;AVQ`Kc;AtT?Ž+;AI6P[Ɋ;AUd8;Akc;A@ t3;A5Jr;Aڂu# ;AV4M;A@/]jP ;AhE?Oc;A jjHi;A;Bn:A :AnDR~ޅ:A`5:A3MZw{:AL}z/O\:ARxPlml:A-Plag:A/R>b:AxZmK:A@}/^M~vA:AI a |:A`G-ef :AՀj'.:AEos:Am>Z;$/e:AwB:AcѪ<:A ҟہi-VD:A@Ht\:A'Tt(:ABD:A, k:A41RP֋:A@V¯:A|Aa9eJ:ACPyVg:A F:A`XdZ<:A@yy¦:A`2:AG!&9:A!졡Wv:Aa[ ڌ_:AY)њ:A*z:A@) t:A GLT ^:A @B:AM ?Мb:AKtO:A :::A`k39A M|OT9A@F?Q9A`suu~9AMf9A<" 9A > ~K9Aa -b9AJ 9A 3fyh9AdҪc9A "~L<9A+^+9A//K9A@I8 A9A@Ƕf8l9AZ8'st~9A 9r9A?#lG9>9A`@uj9A4yJj9A@HS `9AN?Vd+p9A@Ÿ<]uF9A >iXmj3p9AŖtkԙQ9A‚2,`9A 5ml9A@m?=29AlMۜ* 9AgbԎ9A@.wLst]9ApoYy@89A>@ɴ9ADW9A\ݬ%IF9AEuz+#9A`HhLmb9A@S9A@G.(]9Av角c9AI:9A3 579A ;is-9AqŏǮ9A@K_1v 8}9A44Q9A`& [_͐9A`'U9A`;X,F9A; 1 v9A *>;6jx9AGm89A5ǛPj39A=tVMeNu}9A@n^%:z9A@'P{wfQ'x9Aԗ'nZ?w9A`k mpnq9A`EE"vl9A}I#i9A NM`B]f9A3Q:\c9A@ a`9A 0 L/Gh]9Ash8@[9AЫYZ9A 0=zoW9A qNgW(QU9A@^m3p4R9A5P HO9A@^ܯGO9A Cw%a0L9Arb5U9 I9Av7wyF9A bg D9A`UΓy@9A`i8p?<9A(H<9A y6'+~Q79A v9/Ǒ39AKNF #d09AS N=ܹ09AP>,9AȨ[;)9A^^g?E%9A৹1sSB%9Aus/6%9ASs|!9A ŷu?B9A`hĊSzF9A@JFH|9AѰ[F Y>l9A^Ix|9A`!CI69AGN) % 9A{++ 9Ak#өY4D 9A@20"9AG.?/9A"f ԰8A6h /+aD8A s8A@uv8A@ )~ğ(8ASP{8A@ɛ˪8A /%Z8A\*ʀE8A *6߼8A@+cA8A",=2}8A.,3|f8Ad|nn,z8A`K.o5Y8Ant;` 8A@t'C*t2z8AA1L}48A´R48AXkˤ8A<_+8ACfGL8A #mY-x48A3m 3XČI8A ׅ*Ob8A:$ )8A d8A`eO}8A / ~e:I|8AS$,7z8A5*?$o~y8A w++x/y8At1,jy8A Ғ,H#y8AR/N& ۩v8A`!Zw8A>MEE x8A@}@_y8A; 8A8^kA8A4R@T38A%o-=Q՘8ACT8A˗9 8Ad~h$?;8A0xPZ8Axbh"G8A;>BEXE8A$_H8A`" ]R48A{0y8A < )~Q8AKP@,~`ɺ8Auw}m?U8Aw5j68A]?v!8A ~v8Am^;v$8Aq^/v?8A Au;8A@xwj@8A<i+&` 8A@Z_il9 r8A%gJzx8AL@ c0c38A ]8A`YLi 8A0K`f8A@Iڿ8A` %F_8A.5EX`28A: _CqL/8AmC8A`q_Cꟹ8A2A68A`\q?\<_ݪ8A 6s9Ae?F8A 36X\8A`2I8A@`{2E?8A _0࿨8A@0?m8A`3.Xo W8Aƿ *) 8A?&`s8Aࠨ<&`8A%E8A@yҿ8ߟ8Ap : D8A 8A)Z~ _8AE\-M8A)?C忾8A`%=T8AH@ƽ`;8Ar!E_8AOJP`8A@&& 8A:8A y`_)'8A/@c8ASOR_ĕ8A/?q8A߁p?u8A#n_b8A'!`8A@{ 8A@["8A p[༓8A`cS `t8A?Eh 38A`m 8A# 8A`xR$8A{ ג8ADTP8A O %_8A b]8A@_ڎ8An_8AĚ_c,"8As6m8A @.K_>8A^$`8Aw3hI 8AeQn 8A?u8A x%t8A_˪n8A^m.H8A_tu@8A d?U8A?! M8A:[ݿ8A_8AUw3?8A  8A;__ O8Aonb L8A_=I8A#WII8A$3?C8A+9D=8A@ȄVb.8Al)`$8A EU$8A`u?q8A@E8A@@y 8Ay:?8AD6ayL8A`y,j`8A!`m.l `݆8A`*'jE׆8AgKfֆ8A gA%͆8AWHci1͆8A '!(cia#̆8Az`bÆ8AV_ࠆ8A߰NZ8A@ J2%`~8AN>xv s8A@l>9߿T8A'*,"@M8A@Ѫ(:8A@@@%8A__8A_P*_҅8A ͅ8A1a88A@0 qb8Aodhu8A ?K l8A҈  O8A >   E8AEi>8A*ؾ"z`<8A|c,8A 2 8A`^8A 8A@@njߟ8Az`ψTx8A?M `8A7_߄8A __݄8A=ٿ_݄8Aڄ8A !v;؄8A55Uׄ8A ~W_/VԄ8ArI_Ԅ8A ޼kf@̈́8A|.Ʉ8AߌzX྄8A&u㟺8Aޕs 8A8rRS_8Aadj^V'8A`-0XG8A8?W`8Aj5kVv{8A਌T:@{8A`(!To8AaOZ_8A8G^8Au F8?]8A FA8A8|>8A@- 7Ċ@,8Aq?S.!E'$8A< A+8A@'@)@8At(8A 8A`7@8A+ 8Az dŃ8A ?➽8A N@8A je$_8AD"8A $8AWsL 8AG>H8AmH6t8A@Ih8A~ a]8A@ NY8A`:,=8A@x۾ u`8AFkЂ8AP8Ђ8A^JG`8A@# v8A@ ~ t8A]}l8A`"zFvc8A` vTQ8A?cp[?H8A_lF>8Ad`=id@>8A`)_h;:8AGɠgD88A !fx+8A൩a 8A'{s\8Au-!|[v8A@VZ6?8AgZ*'#8AYJc ؁8AB#*~8A@~>_~8A@ ^~8A@_h_f_ P~8Ab^_G~8AYE~8A@laY5~8A@+Q~8A@?^%:@}8A^7 }8AX)@}8A}8A 9#|}8AZ9(?|}8A@z+rh}8A/\Q}8A@w,@P}8A!i 9}8An}8AFn|8A}3T.`|8A;w|8AX)|8AI{{8AR{8A}{8AD >{8As_ޭQ{8Aj?^z8A&\z8A:r@?z8A^J"y8AO:y?y8A!dy8A{,<?x8AA[BTx8A)K?w8A&DܟRw8AXw@v8A@x>Gv8A@L`r u8A?bxBu8A[9AwP/俼t8A@T߿:t8A0};;s8Avc`0s8A@Er8A"=5r8AQ?=q8A@)Vq8AS%_-q8A@Єp8A$bH*p8Az10&^p8A|q0@,p8A@6q['o8A@j}vw o8ARKho8A@t߄o8A^X_fo8A@UCk$?o8AxGio8Aá6 n8A@@E?n8A@a-n8A@L@C@|n8A@?^$`_Un8A?64-n8Aa7sn8A@n?>8m8Ag/?zm8Ajv?)m8A@>_l8Aj{@l8A@p]+\l8Aaal8A@+AOk8A]U[埠k8Ak^_ak8A !&k8A@՗Aj8AOe j8AG\9j8A@[#i8A|!9&@i8A٭/g fi8A4?(i8A8=E h8A@sB`ܿh8ACch8A?Έ#h8A)uug8AݯA=%g8A 6 }g8A@ =t_9g8A,?g8A*Sr$`f8AA@f8AB^8A@b1٤2 >^8AD ^8Av]8Awb_]8A@v!]8A9*\8A:j5ߩ\8A@Wr[\8AV_0u,\8A@R\8A@~Q[8A¿kT?z[8AsހUsD[8Aj]w[8A样Z8A@?uRt?Z8A@ rZ8A>4VYZ8ACdV|_ Z8Aau _Y8A 8VY8A  f Y8A(`µGK& X8Ap`r?X8AOጻ*X8AтW8Af,!W8AZᝡ V8A~8߹V8AD(uV8Akm_8V8ATn U8A ^̬U8A=_U8A@ju?NU8A@\U8AȂT8AUA^ uT8A#T8Ap3_S8A@k7s @zS8Ahx ,S8A@sGR8A VX_R8A@ _OR8A@SaD_R8A@N;Q8A~~?uQ8AUО)Q8A@pUP8A P8A"8@=P8AW O8ATbO8A'?FO8A,J#O8Av$N8A@b9N8A\ġx1`nM8A?(_L8A=w{# L8A@WOiK8Am K8A7-J8AMJ8AwJ8AǪ__FI8AP}@_I8Ab%i@[I8A.J `I8ADH8A߽_H8A@bN`~H8ABG4H8A@?`G8A@Z^)`?G8A@3]۟wG8A}hG8AeM_F8A;@⿭F8AAt#uF8A,b+WF8A@@4`E8A_b KD8A dC8A.N1C8Av&Y៕B8AV!ilA8A@vQ?A8A @8A@+]s_?8A5x_?8A@(bSA=8A~<8AIG)1<8AM~x ;;8A@MX:8A&5g98Ac⿋88A@b!3_78A ~@S78A(ܟ68A@!~{?+68Aȣ58AbJKR58A\+[0E`48A@s~ :?'48AB 5`38A_**n"38Aݟ28A@D[^?18A-Q&t18Ax_08A^-X#@d08A ߹@V08Ak`Z&Q08A^x"/8AP 럳/8A`l/8A|  //8Ao^.8A/U?.8AS`?c.8A~1B_ .8AіK-8A@z [1 @l-8Aώ3%-8A@n O,8AK?6?S,8A 5+8A=v+8AYN?$o+8A=l d+8A޲D=*8Aw!m*8A+~d_)8A}| T)8A~{Ʃῼ(8AWa{ 9(8A|_'8A7P ~.J'8AE`Br(&8A@H R&8A@Ϧ+%8A5%8AAhv0_$8AoNz,&`o$8A@#rK$8AH"1#8A@Dc[@K#8A2^"8A@RH#@B"8A@|iHc!8An!bOߺ 8AğԿo8A0X G8AA@LYw8A@28A@,"?"&N8A@NB|?8A%e8Aԙ`+'!8AT"x8AAne 8A m.ڿV8Avap~%8A˴Df)8A?, $ 8A?~`r 8A@LQq8A@ _8AeWNaX8A?`8A@l#>8A]8A~ BB#8Ah(#=58A-m8A?E0(s?D8A D^25,8A@ў?9318A =18AΉ]?K_8A@jJ@@l;S8A@)PC 8AEH8A}Gr8A@ʛ@I۹8A Ku8AIL 8AEÿM<#N 8A3M#K 8A`oMG.9 8AN/Nfߒ 8AګNH? 8A O  8A%bTO,2 8A JOpD 8A@أOO6 8AjOw `E 8A @O_8AOUi?8A⁋Oz8A>O 8AWOB"F8A@SOU8A!' ]PKM8Aؓ!8Q̹/8A{M…R8AS958AT}g@g8ApWV߇7AoWB7A@Բ@YJU7A@\Mg &7Ag`Y C7Ayc~7A>hf Z7AQ_bk翦7A?/o%7A@怡u7A@j{7A#j ~w?_7A$֎`7A@!vof7A=Ɋ7AMw W7AA36@7AD Xܟ=7AOAl7A @uc`^7A@zo:?7A[TGm@7A%aK¢7A@P3$@7AЩn7A(sF?7A@=n`7Azr)V7Ata1t 7A1p5$c7A 7_-7A٧]7A77Al ֻ߰7A@=@_]7AĬ:7A*q۟7A}]_?m7AY 77Az@T7Ah7AWQb@?e7A@Jd.m 7Ay`77AbH`7A@w@cj7A@oUL  7A@fFQ7A}7A927A@7A@} c7A:p7AS=F:^7AL/_,7Awެr7A@ݟ7A@%_7Aۈ}7A@3X@D7A$#҅7AqaK 7A>ݿ&7A^71k_7Aҿ7AabO@7A2{^<`7A]^_7AI)7A}_E7A:q7A ?7A:z7A_sZ7A%@h_L7A@~[>7A- 7AWaB 7A]N`7A`5  7A9B7A|_?7Am}u7AO"` ~7Aގ 7A^K7A$q7A[f7A@Uz 7Aѡ3?7A1|7A457A@:?7A{r7A]^X_7A@F?9=?7Ab7Av37AP7A(2C7A@WE|N7A̺f*7A* 7A>*C7A p7Ah5c&7A b ?7A@jrߑ7A@1P7A' 7A ߟ7A( 7A0  w!7A \47A@w `27AX!Z @7AT?u K7Af.b%7Ak86Y7AJiE227AIϝKS7A:zIdb7A5_w~K|7AMs@7AN 7Á7ABu@7A ~S hx&7A$YB7A`C)7AmD!_7A_E|7A@[>E(h!`7A`M//Ff% 7AvFF7A)`2G?x7A@nH@f7AvI'K7Ad Iߟ77A@BJE 7A`^K 7A`^dLL 7Aj$M j 7APMK7AիN ?7A@"7A&ĥ7A^ރ͸7Ac@ƅn7A@۬ԇc@7Aä7A)`;g/ҷ7A4Zo77A 4\L e7AQ? 7A`C` ۶7A`3ࠐё_7Af!V`a7A b+A%7A~/X`7A`)?)5Zv7A #ܖ!H7A0vmQ_7Ax ̴7A`HR @^7A_^=7A`Ҡ==Rѳ7Aԟ!! 7AZT7A4@M?7A`y@7Aog`97A r9@E?Ʊ7A `7A>.7A @)7Aրͣ `7AWT?# 7A Sm?2A% 7A`@ R*7A`a,eP7A6?+e 7A߾*hذ7A/`ˤE_ư7A qOȅ?7A`K`;+7A ᐥ7A?i_q7AV-6a7AYMJ @U7A~0KP?C7A`jў@.7A%7A pS&@7A+@7A`Q7Ahj`߯7A`w,<ԯ7A`J,q į7A?m6_7A -!꿣7AorL$7A`E?_m#7A {7A%m7A?ߨ`7A`? _N7AĴ2r>7Ac ?k07A~M`?7A `ܩq7Aˉ3 7Ac?`7Aa `e} ծ7A埍ػî7A /AꟵ7AJh4򟪮7A 7A?To 7A/`x3 y7A`^?ޟn7Aq`sa7A ?R7AV)aB7A6u67ADM{$`-7A`mq7Ad?7A09v7A?^7A C^X7Aj+A-7A @KVAԭ7A@p@ɭ7A7 `ڿ7A _7AN V?7A%L? k 7Ag06W7AN>R{%7AӞ_B7A;^w`v7A,@8 k7A Ӏ_7A3خS+R7A@2 >07A]v'7A~V7A-ޯ}7Aۯ^l@7AܟYp@7A -7AYGe7A?-g1۬7A࠘۔?Ҭ7A Ǭ7A) c7A~{`7AU W?7AH|ࠬ7A@; n\7A y_7Ah/ ?7A αA`}7A_@[\?p7A0_@f7A?RR\7Akޮ @O7A`ZLy_F7A`9<7AAɟ?p27A 最 %C)7A(F5.7A6h7A GVsٿ7A Pv_7A`ʞγ_7AK!`7Aby@7A* ݫ7A``ԫ7Ah˴_?̫7A@w_;ī7A+@7AI?Up7A u>\蟪7A: .7A>ӵP7AW?X\ٿ7A@_5H 7A C}_{7A$߾Cf r7A d_rf7A`,8| @]7A O`rÆX7A A P7AྷB7A 87A v H>D.7A@1 P'!7A@Ne?7AG>? 7Ax_7A#7A EM 7A`{>+w7A@i\dJ@7A uE"`ߪ7A|_ת7A@5"3$Ѫ7A^xe`Ȫ7Aջ7A1ߺ7A2 ^ū7A?@7A _?7A `Ef[7A`e]7A@*7ѽ7A6 ?7A0k_YD߁7A`,?|7A ־!u7A`xZm7A`Eh?u&ue7Aǿ]7A$2`T7A^qK7A`07_E7AC)=7A1oF|77A ʿ@17A ``'*7A`oK= `$7A(`7A@(ߧn7AC 7A? 7A`Yze7A4&(7A`VC7A c f7A p$'7A jک7A@@4}ϩ7A K$ é7A` 7AqiBi$@7A`<P7Aq[_7Aq=ɶ7Ag?7AG7A@(?<M" 7A`<%y{7A`p7A@ fh7A#Va7A8ߢX7A +A.Q7AG_ L7Ac;}JJE7A@@=7A^97A. 47Ai*_-7A@uGF)7A d?$7A 7A@"EK!7A>?7A`>*^7A@V'0R! 7A ^`97A`dk l!@7AH[7A@hZ7A_Lڨ7A`YШ7A W$Qʨ7A` _T7A߸7Al> న7A=Wਨ7A`x ߡ7A`^mi?7A ~*[7A St7Aݟi󿇨7A` _"|7A{]]s7A 'j7Ao@+\7A$eFۿY7Ad p?V7A`-YpyO7A )&#J7A j OD7Aؾqo<7A:aK77A`rQ-7A'ؠEpP@!7A`c_7A ң# 7A`ܷ 07AJs @7Ai7A-@7Al 7A &`7A__ا7Aas@Ч7AMħ7A``Q s7APP `7A?俰7A`陀7A-0x7A~%b7A tc4 `7A@Kޟ7Am 6J"7A``E{7A_ߓOq7A `h7A)AH1a7Auz?Z7AjS7A `6$H7A^OS@7Am_47A s߾ _+7AL=`%7Aqs uiؿ7A-!_7A΍`CA? 7AվX7A3v_V`7A[=7A/Q7A qd?7A mV?7A`K{uW7AU2?Zئ7A@ `p?֦7A`@K>ܟͦ7A&Ħ7A 4i27A Mrm7A_p @7A_f`%O7A@0Dr ?7A `_7A7A B࿐7AӒ7A: Q7A& ߀7A!nLNP}7A `o u7A@ƠC_r7A"u&`k7A)b7A. ?c_[7A `itU7AN7A __J7A@?F7A: W A7AE/=97AV1_cn57A`x@17A@8a5)7A@`>7A(;I 7AßyX 7A^W7A `5 7A 27A~7Anߥ7A!`=#ۥ7A 'Х7A ;m;y$˥7Aĥ7A]U&7AY_ ඥ7Av` )7A`r97A@Ky[蟗7A Eߍ7AE`A7A> <w7A wm7AQA;[ b7A@8- \7A`7_W7A WuY?P7A^k`J7A'eS@7Arf?u@07A^)7ART"7A@d$@+7A?}7A& 7A E?7A`-_N@7Ao@7Awz7A`a7Aa? \t 7A`<!O`ڤ7A~դ7A Q@j'`Ϥ7Al`ɤ7A 5?-Ť7A dH$7AQ)_G^ 7A ދ[M 7Af৤7Ae8_ߡ7A 7A`%[7AܿQsO򿏤7A`Z}q柈7Aܥ{7AёPs7A>+:@k7Adb<e7A`eخ؟`7A!_W7A{ P7AA|]@K7AoM6G7AFQٟA7A Ӡ!s`97A`U17AC@ `+7A_>5B$7AYp7ACܿ7AaYs7A@_$g7A ]{DJ7A?7A 7A?7 "`٣7ACO?q+?ԣ7A@ !̣7A ѕ £7A^ 7AouA``7A qK_7A@@7A d 7A@<"?7Agbx7A(*c7Aۥ:V7A91x%'`R7A r# I@E7A@n g77A@D !+'7A __7A ~@ 7A`?7A@ `EǛ7A >|7A{3u֢7A k "7A`c)ঢ7AŸ'h`7A;a`7AKU_7A@S_Ec0󟄢7A@GxKy7A?h7A@}_I7A`o*`=7AD{17A(?7 `#7A`(#_7A@m0 7A`g5N[_7AS 7A)a7Aj@ܡ7A"i# ͡7A@[ 7AGy 7AkJ7A &Ao2&7A|l p7A`VH^7A@` MK7A3?=u27ACw,7AK?*@$7AM?7Au\ 7A`k2C7A`"_ @7Az?@ݠ7Aӧ@Р7AJƠ7A_˳7A@o;K67A|_O x7Ah*$@7A@r*_7A>7A=7Arpm7A5e @7A3!9?y7A+ t7A 1.h7A`ZI`7A>yeJJ7AAӟ?I7AkJD7A@ ,?7ATy@=7AX_:7A`ne> 67A\?Ο37A I_s/7A !_+7A*2C'7A(;@$7AO 7Alt`̧7A> .`7A  `7A`@qU 7A 7A<_R @7A@/&7A@}X*9_7A`@o,ڟ7A@>6`П7A ^S˟7A0Q$ȟ7A{4`7Ak "`7A >7A^WQ7Al?7AIVs7Aq`p: 7A@7A?7A2N  Q{7AN0 es7A* pk7A`NF 6e7A9U `7Aʀn rU7A ׏ p L7A`?鞪 E7A" 67AH K/7A #u &7A{5 L7A ?+ 7AG M v۟ 7AΓ?p 7A/ s7A : 0_7A7  7AY ݞ7A@/_ Z`Ϟ7A3* Ğ7A 5P  7Af ?7A ?7A@`  7A Օ7A`:a 8ߋ7A UK7A!_ Tz7Aܸ` RPs7A  l7A` Na7A%  [7A@4 9Q7A`M h?C7AIl XZ$;7A@g>y  47A 9! K7A@? Sg7A@ y 7A@ a ֵ7A@> y0 7A۔ 3_7A 5 U7A`R &ݝ7A K@֝7A@@? 5?ϝ7A@? Wȝ7A 2_7A 㟵7A%7 ߯7A@` z⟤7A])  7A`W6 7A@dX?F ۛ7AQ2O $`}7A\ X#r7A`\h gg7A { YZ ]7A _} ;S7A`Y I7A]  ~j7A@ { 7A = {7AM4 *ߜ7A !@Ҝ7A@B`ʜ7A<%"U%@7AG1㟷7A ٟ2? ௜7A !,a? 7A C_7ADߒ7A 6aE7A4N 7A m UTw7A7, d$o7A51 gRd7A^iKd#^7A ^f_U7Acex؟Q7A w_hZ4F7A T`j_@7Aԝh77A zxh!7A~?7A@{ ޟ7A@e_7A`oB`7A@؛7AY ͛7AK6 %7AFO 7A2;7Am7AC`7A:*>#7A (` % 7AN6A q7A@G$@[7A7NP7A`Y!=7A`Bo07A;R !7A5o 7A`?:? 7A7A &?D 7AN 7A H7A$^S֚7A@@˚7A7~m7A `7A _@7ARoF_7Aa);?7AU,7A)n7A`J \7A|%T7Ak| lqG7A5?+<7AR~5 57A<^G@*7AGV@7A`?j9$@7A`8}cN7A} a7Ar߮I$_7A2& 7A`<ٙ7A1 ;ƙ7A`9>7AX2@7A@D_7A@8G`7A@C7 Ꟃ7A`ԠCѼ$u7AR0h7Amf]7A`ĝ@KH_S7A+[ G7A5)?;7A>_ʛ_/7Aр6 %7A3&7A8E _ 7A`@&k7A X_B7A@P_ZJ @7Ay}l ޘ7A `w?%ט7A `wL_ɘ7A@7A`JߒL`7A`mߧظ`7AN3n7AM?ߏ7A+  7A@ ׎$w7A`"Yn7A`k*#g7A՜>b7A~ApZ7Am,T:?T7AVn@G7A@w_m@7A@Q3xY`57A ⿌ *7A ?7A?7A@M+7A INݿ7A "7A@@7A g8 @7A Uޗ7A`/@ח7A͛ ї7A(Ǘ7AY?8|7AUP஗7A >{7Ayg7AXC&7AJ߾2N7A9k8"x7A`?o7A>U`f7A`3B \7A]@Y`P7Az_*E7A@٠> <7AeW:`?27A``%q'7Au` 7A৵w `7A@ar7A@$ 7A w7Ay`Q 7A( t7A.^v7A~O7A,Ժ_7AR_ؖ7At &ϖ7A5X `Ȗ7Al Ae 7AYPP7A@XmZ'`7Af㿆[E`7A`Q̟7A`߫Zz`7A>|u%7A\^1?7Aaڜ`v7A4XP"j7A~^9C޿a7A`~c. Y7A@ף@y N7A`U06A7A`J@27A@@" !7AF __c`7A" 7A`qn?J7A*`7AH;@6 7Alu^yl7Aە7A]BЕ7A@?dɕ7Ar7 7A'Lb߶7Aq`syx7A@+[7A@Q}7A  7AW|  7A 7AB {7AԵ/!>j7A[!%`7Ar!?V7A`"!`K7A`T!$s A7A8&"N57A^",7A"@?&7A"7A@$" 7A`=#P7Av#7Ar_#ߓ7A $ӓ7Ag ;$s'Ó7A@¨$_7AH$7A'%?7Ak`Z%z7A`u%&sc7A@%O7A&&F@7A`I '&37A@-^T&$M+7Ag&Jx 7A &_7A᠞&7A ξ&,T 7A&7A@5& ޒ7A& ˒7A} 'ྒ7A ?-'L7AѤ`8' 7A .QE' 7A (^'# 7A.r'r7A@@'+a7A ߞ'P7A@K'8A7A ' T 67Az'`*7A y@'7Aђ@'77A@.?'  7A '7A(`'- 7A(X'oؑ7A`' ȑ7Ad'" 7AK`(,7A`4 'ѵ@7A`a ({7A`(S@7AG@(׊s7A h(S@c7A@(F"(SY7A`!(WN7AH#(97A (s$7A(H7A@(~7A'uR&7A`'u7A(X'Tڐ7A'6ѐ7A7'Đ7A '%7A@@'n2_7Ax' 7A '-y7A ?'`7AJ'7Ak'w_n7A'5& Z7A 'D7A 'X07A@ v' 7A?`'7A`\'w7ACh3'@ޏ7A )'Ï7A-L_&&7A`'&w?_7AѶ&&`l7A`u&:S7A V&?>7A@:&;'`7AŽ &݀@7Au@%7A >2W%:7AI%`F @7A`Ԁ9%d@7A_ !%e7A$R7A&$Kڟ@7A$757A7_a$>7A!:$$v7A5$d 7Aۿ#/Ѝ7A#e#@7A#_7A@jq#C򟠍7A ؾI#c򿐍7A^#G7A`y#|7A`a#o7A`/"q@f7A @"Ȯ W7A5"%kI7A`x"ö?7A '_U"A17A``X4"Jn'7A@\"ň 7A@!b?7Ai!'7A* !܍7A,! 7A`!7Aap!׌7A,vH!B_Ќ7Ay?0!ƌ7Aaw !@7A@> #`7A'_ w7A #7A _ _7A@⟐  7Ax ~_7Ar `7AU[ 7A`W _`D7Av`7A@\--7A K?X7A$W߀ 7A`ly?6ߑ7A/u"T7A!PW7A(l`M?7A>_-7AP@@܈7A@ W⟡7A`n9G7A@=@7A ?ч7AC{?7A&`t` R7A|5G'7A SdIݟ7A ǬM7A ! ~ 7A9 B" 7A H_"ˣ7A@#Z7Am#*_i7Abax%5]ǃ7Am&1_-7Ab N(@7Ax~)x  =7A`* F'@7Ah ,7A V?.r& l7A?0l 7A1]27A`1Ē`7A`J !3N?77A"3a4+~7A@Y>7sT"^~7A5/9"~7AM`:M~}7A L6<qN%}7A8l=R"``}7A@NM>F6H}7A`X]?_.}7Ab @-?|7Aj_A|7A~C_|7AS+kDl|7A@*E3a!@|7A@E0f@|7AVWFqo|7A?GPj_]|7A!GY E|7A y\H@0|7A5=I |7A nIh@{7A@,7 Jb{7A`FLt{7AmOsn{7APp4^{7A ~;QSL{7Ag_Rv {7A;SDz7A@je?5U7@z7AW+ z7A Z0z7Aa ^ ?Hx7A 9q%v7A }ڇr7AqL?;p7A ׀zp7A fX~p7AJdߏp7AԿ"p7AcO5㟅p7A 豿4ٟp7A` ̾vzp7A_;op7AҒ<fp7A_p7A `e՜?Up7A@IWۿPp7A@^ }`Lp7A[\  Ep7A`V?c#$p7A L?~"p7A %xF p7A@p7A6#^p7A`"[kp7A! {# p7A@F;e p7A} p7A`Ap7Ah@vo7A` o7A\dao7AW?Zٿo7A%o7A& 9o7A@`o7Au^Zo7A,ko7A wqb o7A`$o7A[_o7A ? o7A_B?o7A`i`%o7A F=@= o7A`޶@o7A"_7o7A΅j{`o7A~t޸@o7AK A9Yo7Aʟ o7AE~?o7AV__?o7AN e>o7A,#޿o7Ac o7A`! ;o7A `TY@o7AR_ o7A#$o7A W^m#o7Ap\>뿻o7A@űӾ?o7A@Xcoo7A `?o7A`>8o@o7A@o7A ލv:߮o7AUo7Ah @o7A Fo7A`TH\俧o7Aߡo7A`G!o7A` ?%o7Ap_?o7A U] o7Aaꟛo7AWy翙o7A yrߕo7A4͞h;o7A@#'`o7A@= , @o7A]uo7A@V_o7A.o7A?zۘۿo7Ag{ o7A ;6""}o7AZ[K@zo7A to7AA5?so7Aee@ro7AC^#`no7A}_`ko7Af.ho7A 2bo7A@.@" ^o7A֟|e`Yo7A Wo7A f_Vo7AՂ?(GTo7A?jTo7A  Qo7A?AMo7Ar~ Jo7A@<@o7AL[X8o7A@[@4o7A@;_ /o7A B&o7A[8h؟!o7A@W =1 o7A`|@3 o7A1J:o7A)? o7Axo7AEj& o7A&>)n7A`on7A ߲vn7AzXn7A Y2_Hn7Al]d&`n7A Ž n7Aـ&Yq?n7A W9n7ANn7A`_%n7A@)a`>G n7A^ّ?n7ATn7A`C˞Cn7AXl n7A@a?>n7A`9`n7A@o=n7A0߽:蟌n7AB@:㟉n7A``6n7Au"n7A`O>=|n7AMY޿vn7A}^ tn7A z'=Y pn7A`bS:@kn7A ~h bn7A`/%0Zn7A`@B?Sn7A@|_Hn7A@پ!`(#@n7Ass_6n7AɠE!/n7Ad@7('n7A* !n7ARo\?n7A@ۭ?_?n7A@\z*n7A1f_}`m7AؘN'm7Aa m7A1^m7Aeb<@m7A@'Nm7AS]g&m7A u(?m7A`A?ݟm7A: T$`m7Aο+m7AqW`G?m7A_рm7Am7A`tۀ ~E_m7A $~HA m7A`|`m7ACm7A@>!9m7AF3`m7AF]?m7A@wm7AqJm7A@س?m7A 0>M m7Am7A D4m7A_*,m7A"m7AP?|h_m7A`>`@|m7A@,ˎ#m7Ar"& l7AW#l7A"l7AZ?l7Af[l7A`~ l7A`l7A &'l7A}@l7A`9dI l7Av&@l7ACo?l7A@C C+ퟓl7A`ѿh@l7A`d&l7A% !l7A`D !oE{l7A"@rl7A X!d?hl7A;D_l7A*dCYl7A.!Sl7A`_Nl7A !={Il7A@.i(uCl7A@=_;l7A`"4l7A@s(gk@/l7A#V@[%l7A"l7Ah^i$@l7AÔ$DKk7Aak?k7A#߿k7A JI `Ek7AwF_j7A x` j7A`67 Q= kj7A+ !j7AUDi7A6 T i7AlDi7A|h7A@O~Մ&h7A}X#wE?ch7A_Fh7A__Tng7A`_~!^g7AĊ?#O_3g7A&_%_f7A 1(߈f7A =*_;f7AjN,c e7AjY.迟e7A+`0<Qe7A i2e7AVwe4?d7Ah6'dd7Ac8Q!@d7A`]:jc7AfT<E?uc7AF>W$c7Av!8@b7Ar%Bb7AG%D\2b7A`7EQa7AGa7A"KI5T `=a7A '_K~`7A`T_{M濘`7ATOSTE`7A+Q5_7AӟRӑ_7AdT@L_7A8V`^7Au+?kX^7AU@SZ9_S^7AU^\I?]7A ]u¦]7A`هT_I]7A`I\7A ?Vb\7A9bMY\7Ao;dT\7A 7?Uf( \7A `hԴ/[7AL'&i-*[7A sRDoY7A@㤓D|@\iV7A {R7AlعJKP7ANo^K7AAbJ7A[J7A*+@ʰUJ7A^Ұ&NJ7A@u_ݰ HJ7A 3AJ7A`M9J7A@3J7A@ο.,J7A`K!?&J7AE@=ך&J7AMt`UJ7A t /J7AJ7AR{@J7Aٱ`J7A`u$Z$ I7A@?݅I7A I7A " +xi I7A Z`I7AV`_I7AE`I7A?@δ?I7A`%_֐yI7A7 ђ۟sI7AM{_65nI7AUv?hI7A`wpaI7A\I7AEWI7A@H#յPI7AnS[KI7A|y@EI7A`#a5>I7A/`Wr}?9I7A`wT4I7A ,-I7A b6['I7A!׶e_"I7A I7A``I7A  9I7A`<) [>, I7A?z_I7A``Y( H7A__H7A`vԷQH7A NnH7A@`H7A@'.;jH7A>vLC@H7A@>mMH7Ah@H7AQI?H7A@u`Ƹ%H7A_矼H7AzH7A )H7A?H7A[] H7AJ7!z'韝H7AĻ7yH7Az?H7An չZuH7A`9>y@H7A@@x@H7A`3%YzH7AzE&`sH7A !]?lH7A`k\xbfH7A@~?!`H7A)=YH7AO̺_&SH7A g>x?NH7Aڿ<HH7A?% #AH7A\_<_;H7AfWy4H7A`\v@/H7A?&`)H7A ҟ>/#H7A`7@H7AY.ϻBcH7A%z?H7A _ H7A S:`Ya H7A` ;G7A SG7A6`o=7!G7AٞG7A@9_G7A 4]G7A!ҼG7A`> G7A`4@ G7A"?G7Ao?>G7A@>`G7Asdv“G7A.]G7A!G7A`ɽG7A@J[?G7AG7A̮X_G7A@o?<G7A lTCG7A@ѿv5zG7A +` `tG7A_1mG7A`Ǿ _gG7AG7A@ߺڿ7G7As@ֿ|%?1G7A`4v ,G7A"%G7A 6G7A@L>G7A MinG7AɟހG7A .G7A`,~@G7A`p BF7A a H'F7A1/'`F7AqQaF7Aֿs%$F7A7?F7Aդ)F7A 3F7AAjF7Aw @F7A5CIF7APF7A# { _F7A+F>@F7Aq޸hF7A`jF7AV`&F7A ^`"[NF7ACBF7AVa¡F7AٿF7A`3~GU F7A@j@`}F7A!a_xF7A1ݢsF7A`R :mF7AkUB hF7A DaF7A_"_\F7A@Z" _VF7Ae}QF7APٟ KF7A<.H%GF7ASs@F7AߞuT;F7A3S?g"5F7A 2A 0F7A@+'r*F7A }ޟS%F7AR@4_ F7AT&F7A *{ňF7A<iF7A`/߀C  F7Aut?F7A F7Ak+5ڟE7A >^ "E7A %h߃E7AJE7A;)"E7A#`E7A`a+ܟE7AA U#E7A=ўf_E7A/8E7A2nE7A j?E7A W@E߿E7Aڵ_/ $E7ALW8E7A@gE7A5^?E7AH?E7A +࿞E7A`#"aߙE7A_{IbR E7A?ofTE7AU2E7A?뿅E7Az"߀E7A_`z{E7A8 wE7A`2Og@uE7A h{I.pE7A~KG0jE7A`eE7A E`E7A` L\E7AUN>#WE7A@,t@SE7AD,`NE7Aa?' `HE7AƄCE7A`Vo`G>E7A`F:E7A{)`l,`5E7A?0E7A_+E7AYL>&E7AϠ!E7A@!5?E7A``Z E7AN@_E7A>I E7A7E7A E7A}$ܿD7AbJ\D7Ae~sǖD7A` @?D7A[i$`D7A?MKD7Abh JMD7Aԫ`5D7A9?^D7A߃D7A/_%D7A>5D7A` ߿D7A( D7AG D7A@pgD7A@GdD7A@?D7A AD7A@.m# D7A2`+ @D7AQFD7A`_{hX$ D7An0D7AC${D7AƗ yD7A ~ tD7Ap0jnD7AR iD7A@)wHcD7A۟^D7A>XD7A@hSD7AgڟMD7A`#0v`GD7AcE?BD7A d ) 57A"Bg47Ay%GLu37AO@27A W 27A BY 17A[`_17AޞeT(ܿ17A9j5 07A-p/7Axt#V/7A`b9` x7.7A{{a,.7A ?-7A`m-7AXr@ -7A2_,7A b,7A࿓m,7A `3_+7AA@'Cq+7At(+7A@q\V_*7A/OB c*7A񿖩}_*7A`_ Aq#%@)7A ?)7A` K)7A _qR')7AyS9(7A`i1(7A E8'7A8&7A El [|b &7A+F%7A`[YA;`$7A``>nez#7A:ZWj!7A1. ;? 7A@_1}%87A@y;7AApe7A0+Q7A_a{o 7A@AmB7A+ʠG7A`7A xT[7A!PR|*7A?. ?7A1MG_7Ai\7A?7A%!L:/7A >@%7A +0%` 7A 7A`& 7A@u'@ 7At~+Ʉڟt 7AhB/o@ 7A@_3ٿ 7A%`h720 7A"uU;s 7A@I@U 7AK E@t 7Aj@G0 7A`@6N 7A`U\߾ 7A`m]@ 7A`V^mp_h 7A`irw  7A xˉ 7A@b&_Ŧ  7A&@sY 7A` ͦL/ 7Agng7A\f$C@7A@9A(,7A VWB+zI7A*:K7AOKu$7A@|^»7A`,rΞ27A`0]{»7A@zٺ@7A͖7A 4W"7A@#L@)7APytg7A`hPl\17AevU7A ٨~tTE~T7A@JUwL7A`+ͬA7A` L' ߺ7A6oR޿6A#u 6A_` 6A mc2J6AUVJL6A@dG6AuT 6A@'u 6Ah@q6A_6A@6A@?6A6A pݟ6A`쿼6A3t6A`4J 6A`@[忨6A@X(l ۿ6A@_3ߛ6AѾ76A` Z"6A.uwK6AaE'6Aa2y6A _7*r6A(Tl6A@!;xe6A@O"p^6A`4`X6A `G1_Q6A`tXUJ6A`Aj!@C6At<6A[}66A`?Lh.6A4'6AO6_\4'!6A@G?6A&y@6A`R`6 6A ;_6A /"6A`* Q6A@? @6A2!% 6Ac,!ٿ6A@:36A .KU6AoS$@6A h@6Az\3_6A%q6Ads6A`$?UQ6A :#`6A6A远6A Ğ*{ 6A2B; 6A B]`a;]`6A@X||6A@瀔}!}6A6_K_w6A U#p6A`^k6A@_[ae6A y_6A`??_X6A_Z@7 R6A)z[L6A@$?G6AL#A6A`8_:6A 9A46A.!׺/6AE_4)6A!LRf& #6Aɀ~]p6A_y:6A-; 6A`(@ 6AS6A/b#bA#6A aB6A95bڿ6AC &6A n`6A '}_j_6A"A[|6A% @6A\8;6A & b_ 6A ]> 6A@ޞ\6A# 6A&?6A'=_6A@L`6A rcU6A@,?6At@6A`A<_6Aݾ ?_6A5}ߑ6APw`dZ_6Aĵ@6A8` %6A~6A=D ]z6Aߊ3??u6ASXp6Ayl6A,`[?g6A6$#b6A| }^6AZ 5ߟY6A`d#A&T6Ao@P6A@0?L6A@ұ?H6AdÿNC6A$=}?6A`& mi;6AJ._76A@;_36A!e.6A&  ?*6A ~U >H&6A| "6A@j @6A  6A)_ ZE6AKD `6A@p 7@6A ` 6A A4@ ܿ6A $S$@6A`_/ d6A"c c6A  _6A@b o'@6A7 p"@6A' a6A@Z C6A` 7$_6A? "]?6A.  6A7( Y6A P\ @X_6A>i BY_6A@. 2 6A 36An#?6AM@X 6A ;ߑ6An6A:_b%6A`:h& 6AXay6A`ݿD*6AE;ߺ6A&6A9%6A@_kd%!6A枙=_6A~]6A6A`->ߩ6A mv 6Aq6A 89Af!6AՓC3ߡ6A_Qޫ6A@~6Ad"D_6A  6As)|6A@^3bޮ6A@ ?6A?6A`]6A@ް6A`u?6A`&6Av@<`6A_۲6ARy+6Ay׳6A@t#&`6A? <$@6AZ?4\" 6A aiDm߂6A鿁6A[w@鿁6A ڿ\e6A є_5 =@6A@_n6A@6AYf6A@x`6A`eR6A@R 6A~?@~6Aݬ^ ~6AJ@?&?~6AxqG}6A E,\g{6AG _{6A@?z6A_Py6Ap?^hx6A k_v6A`؞|u6An0"t6A u_iajr6A q6AQ`~o6AИ m6AnHB<`l6A; ~ݿj6AJߴh6A Af6A4'e6Aĵ?\]c6A@aa6AC&(__6A`a?\6A/^Y6A}g N6Ap!?K6A D H6A E6Aus_ 1B6AG 2?6A`0{  =6A  :6A] ĕ `66A`1!@36AC!06A`v!>_,6A`_G@!;_)6A@N@!*$&6A`ݟ ":$06An$6A '!$6Ag$"+@6Aa%6AE%e6A|%#6A7A%6A``S%h6A $&Ʀ 6A[& 6A & 6A`z?&o6A@uP`';6A l:'{P6A y''` @6AU'_6A`mO'h 6A/6A 1/G_6A *506A`6A"_.6\^ 6Amc6~ `6A6? 6A` 6" 6A 7e 6A A7`6Ay?7!@6A@`7} 6A@*7`6A)8;i_6A@{_8?6A _8I6A8;j_6A@39?6A`r >9Z6A@m"A}9z6A=9`6A W?9E3'6A :% 6A@Z:$6Ad:`6A:@6A_@; 6A{9;\6A@Ln;6A `;v6AV͠;^6A X <~6A R<Vg6A@5ľ<'޿6A/b<[h6A<_6A{?4=%@6A ~i=$6A`=b6AS0a=B뿔6AP>#r6AM>d26A@m >R6A%?>D;ߐ6A@*>@6AH-? 6A db?`46A@T?>=ߊ6A@T`?b56A΃@@U 6A^D@C `6A,~@@6A@Y@ 6A@`6A{ (A?6Acg?`Az6A?2A}6A PK`AZ~6AB_}6A:B<_{6A:xB_z6A`D`BZy6AT Bw6A 3_Cٻv6A`ɠRCF `t6AN$C\s6A`nrC}r6A;!C۽p6A?/D:_o6AJdD.@m6A$DVl6A U^D_j6A /Eؿi6AJE`$g6Az!!E("`f6A@ =`Ed6A[Ec6A 'F` a6A_F*``6A$F^6AaF]6A`Gb [6A6A@U K<6AWKڟ;6Ax KC&`96A@Gd?K" 76AL|66A #@4L`46AЧoL16A??Lr?06APL/6A@@ M,6A_EM ?+6A1!|M% )6AM#(6AM= %6A$Nb$6A +[NC!6A`N? 6AN޿6A ,_NXQ6A`ɑ7O^6A_kO9%6A:Oj6ACOD#6ARP;_6A`E@GP6AQ1_PB`6APm 6ALTP~ 6A?&Q? 6A VQ6A*Q @6AHQ 6A`4RA6A^9R#@6A'pR c6A R 6A`_R)$6A`J2S6AKS}6A|Sc6A gS"?6A_S-^5_I6A` cF7H6AZ+gip6A`x\oOF6ASDtdv+6Aq x6A@{|0bk6Av O) 6Ac6AI~^=/46A2͌*6AB%{6A6AS3(O6ATE;?6A,ȡ19^6A`8a6Aa`K46AwF6A@6A`@6A@`G_Į6A@6A{6A&[#`6AY= 6A@x\]*6A}{6A6W.6A࿯=h6A@F<`֯A6A`46A 0`#`6A`V?:䟳6A~ZI6A~o6A9k@_6APf_6A̰a6A`,1a6A]?6AI@%~76A@E|6Aخ]~kv6A`+$A޿p6A`Q^w_k6A෱[d6Ao_ֱb`^6A~ X6A`>zwR6A>(>QL6AۗH?@F6A c^M?6AA96A`q36A`@d ,6A ز\_'6A[_!6A.d#6AD_)b#_6A,R_A} 6A c_6A跀y[Y`6AԾ6AJ`6Aoͳ?6A C16A ?6A`X>{]6A`;86A#wP?6A :k{6A@"}6A|_Ň#6A`e?9?6Akp_д6A Oe 6A _6A# 6A86AR6A`z_j^_6A@4a߂6A= |6A`@nv6A@aҵ@o6AA i6A*# ,b6A@A`[6A`)@-U6A@F!O6A4^H6AsyB6A l?<6A@?dS46A`2/6A`J?նC(6A=F"6A4c!6A ,!M 6A0O 6AO9I6AHaa"6A>*Avc6A'!6A 7ߧ6A i@T?6AQ ѷ6A`:@P_6A- "6A`"6A@7(B6A?DA 6A#aP6Ab@k-ܿ6Aທ`{?6A`.@6Am৸3% 6A3``6A Ҹf_6AA蟊6Ap!?6A  }6A@@'v6AO82 `p6A@aHi6Acdb6Ajti[6ApjU6A@#O6A`I?G6A!s¹%2A6AM_ҹ ;6AT46A` -6AU J&6Ah|$6A `1?6AzF*6AWU 6A g]6AW! 6A n]ȹ6A`oD6Arg6Aƺ6Aw5պ26A`#J@&ݟ6A J6A'! cA_6A@9gs `6A ?.m6A@v?/6A!H)6A@>6@Zgߥ6A`k6A!8⿘6A &j 6A`?GU忊6A@g_6A`»O!@}6AIͻ ?v6A޻=!@o6A[hh6AO a6A _ nZ6A`mS6A8@0x@M6A@~9h+_F6A`UJn]`?6A4\86A`e 16Ad¾v,<*6A>0n'#6A ٗ6A6A%`*6A< 6AiǼ6AA Aټ?6A `6A yh@Kx6A`P6A@A6A`q&`6A@y`%6A5K6A@1F?6A`Z?Q 6AZa`6A` 短6A`'l>6A ;}@6AK 6Aw` o6A@?PW6Ay 6A K7ൽ;}6AIA໽/v6AՇƽo6A׽ h6AӬ!a6A 9.Z6A s)$`S6A@%>ѳL6A@Q E'`E6A@^2>6A&R?76A 34.$06A"h_7k7_)6AAT!@"6AJ*L6A@ՠT% 6Ad\ 6A@+AhUB6AÀi,6A }z26A{6A`߄?6Ae5" 6A `T6Ao信0R% 6A]6A`?Oؿ6A~T!?6A~{6A` ɾuM `6A@~Ҿ6A`6@Ӿ7*"6A@{޾6A +A 6A,8 6Ad 6A u_6A@`y6A@΋@S2r6A`9Ӵ?k6AIFc6Ay R?]6A`$X$U6A`3(N6A@g0_H6AM7uj@6A@{<U<@:6A@@Eվ26AF+6AiP| #6A-Q6A@Rڏ$@6A ^ZuB_6A]6Aë]06A_'hT?6Aiw6A=_q 6A 2s `6A`ztb6A#d6A* j6AaM6A3a?Gx?&6A A^Z56A#`]6A`z5'`o6A>^a6A`` O@?6AV>i,6AH`7,/ ÿ6A+ `;6A 6Ao@E<ߟ*6A`l~(6A 7Mun6AXz`6A* 6 ߮6A'ߧ6A`D6A{(b6A m&@6A@`}6A\=i0/6A@ _O-1 6A ( @6A2L{6A:_u6A`:Alo6A Zi6A |C!@d6A@0^(^6A:?Y6A )`S6A DM6A* H6AꪀIoB6A9` <6Aseb `76A@`H,16A a`$P>+6A?#%6A`д? _ 6A@76A@q!@6Aul?6A[ 6A}6M6A A@6A п6 6A?6A`iR6A n|6Ac-V6A@K?oݶ6A 9׶6A`ۮ`Ѷ6Ar˶6A`!Ŷ6A ,MY6A 8hrtQ?6Am6A@@;S 6Am?6AZ 6A`O@ߧ6A`-C`r?6Aj7d6AC6A@ 6AP6Ai?6A@?v_{ 6A/p`6A)JRg{6AF# w6AS0:r6A ` _m6A|@"`g6AZlgb6A@wZ I]6AG~,W$X6A$`S6AU N6A)_I6A6f`D6A>d0>6A`! @96A=@246AI@ _/6AVX@1 )6Ab@$6Ap?26A{?_n `6A ^?886A"?lz?6A!& 6AAsE6A@v66A@~ @6A`dX_6A@m_1Q6Ax ^%6A _2(6A@^@޵6A@_ص6A ט@zӵ6Ab^X͵6A~:iȵ6A``zõ6A@ ?6A@ x6A`66A3Sb6A?e{ 6A FE?6A "6AW16A_S6AeAY5 6Aᒠ6A`!v@~6A@6 Y!x6A25Wls6A`Q_Vl6A +!~hf6A`! u?a6A-6[6A`w?U6A Jv`O6A@^R`I6A9_C6A ?e>6A`)T 76Ai16A+?+6A%`m%6Aw?`6A@"`6AB\6Ai' 6Ay@6A@/ڀ\ 6A x?6A aV6A 8_W'ܟ6A`I u1 6A@Zt#6A~>|U ۴6Aҿ@7ִ6Ay?д6A83ʴ6A;ô6Au?6A@_w6AzZ36A 0b9m6A%F|/?6A —+y1?6A @6A-_6AkH|!6A)@⟄6Az &}6A@ w6A\u_q6Ad!k6Az+aBe6AC4,8N^6A_X6A %@9Q6A4yDJ6A 3~C6A klߴ@P&>6AQ 76AV_06A_: r6 *6A' Va#6A Y`E 6A@F@)6A A6A@T@i@ 6AJ0 6Aod%#6AXo?6A`*I 6Aֿ 6A.I }"6Am>h۳6Aj \@Գ6AKC_γ6A 1dz6A7_I6A@S,C๳6A(t@; 6A! e7! 6AFc`?6A `6A!._6Au W 6A]__B6ACmz߃6A`}6AV!_v6AEz=Do6A.^h6A ٟa6A[6AK_?T6A 1T!@M6AC~?F6A b'@6A.z@96A@ğ?26A`Z ?$`+6A`l_$6A$?6Atyp6A@,?g&`6A^V 6AMڿ6A@a>6A^/ݿ6AT7_| 6A wb6Aܾ߲6A7Ȼز6A` Ҳ6A`A@@ʲ6A l`Zò6A ȠT6A @D6Ak'I"ல6A@Cߤ_6A ` V𿠲6A3>C6A`UDr󿒲6Al~矋6A9 z6A@_g%}6A`m^C@v6A \o6A b`S h6A戀J* a6A`a7L?[6A`2>S6AV,L6A#_F6A 5 @>6AF8!?76A,_ "06ANtj )6A` `"6AA6A U@I36A g 6A_x6A I 6A+5,@6A=`V6A?6AG 6A@@۱6A`o%_Ա6A!ͱ6A6ű6AH)f`6Ak螯fޟ6A| "@6A e6A@  6A=ۿ("ߛ6A ߔ6A i6A@6A rŞ6A_=w6A)q6A 3i"j6A@L#@b6A`v[6A$/1 `T6A1.!O+M6Ap G6A@$S?6AN86AT_16A_*)6A_'"`"6Ab'#6A ZDž 6A+ 6A@6A` Q<6A&_6A `MA6A<_`6A\E%6A୨W ܰ6A``3%԰6AͰ6AH). Ű6A2.࿰6A`.?s@6AE8m`6Ai_p6A`*#6A<6A}/a%6A俍6A` ߆6A5 66A XGlx6A@P@jr6A@CLj6A؀._c6A?\6A@ޫ? ?W6A` U .mP6A >qI6A%B6A U_0D?;6Af:O46A;@(_-6A@M?K&6A^U 6A!]06Ag6A`r 6A_xՍ 6AI_|Sx6A%u # 6AA#_`6A@0>&& 6A UI6A8P_;ٯ6Aő`ү6Am˯6A@Tį6A%a _6A)7f 6Ai^V!6A ߧ6A@P@忠6APbn6Ab^q6Ag ݟ6Al6Ax$!9}6A`@v6A_o6A` 28 g6A`'Sa6A B?%$Z6ANU_.?S6A^/S9K6A)9uD6AY=U=6A`fF5`66A @Gq:06AT`H (6AcO5_!6A@)S6A`2@T6A\V? 6A_@6A _v6A )*id6A;_j?6AkV6A.uY6Ai@uݝ ڮ6A`&?yU Ӯ6A`ty7Z̮6A`老`Ů6A`#?6_߽6A$!?!ථ6A 2_C6A`߇u 6A R v㟡6Az6A_|6As_6A`6AMy+~6Aڥ@!`w6Al@p6A `B%i6A?a6A`?^oZ6A]>)R6A`SڟL6AiTD6A Jsv>6A?j76A`y$06A Z(6A;^y"6A@/ߖ6AYZ~6A{l| 6Aڥ@6A Ş46A`<4. 6A d6As`6Am@6Aߒ|# ڭ6Aߌ:ӭ6A澊! @̭6A`N_[ŭ6Ap6A ~?6A}?f௭6A׾Pߨ6A6A@U L6AND6A@HZ>6AE=66A) @ 06ALd_7(6A@;Z!6A72B`6A)6A#â% 6AiG%`6A`a6AG>q6AY_ $d@6AkI_&6A6A !۬6A >e_Ԭ6A P@̬6A`?@Ƭ6A@'_{6A@I&翷6AZ06A}ƺ`6A@T࣬6A6b76A,Yߔ6A  `6A@Ϟb6A`6AU2@y6A{E_q6A?(j6Axc6AIi# ]6A_`e`V6A3WN6A 5QG6AWQH@A6Ay @''96A 2146A U_0)[",6A2*&6A Uۿ!_6Av6@*6AŞ6A`  6A`ۺ? iܿ6A_; 6A@<i6A@">6AD&_b6A VQj߫6A  ׫6A !A?ѫ6A  ʫ6A`?«6A V? 6AFr_6AAL(D"6Ac .6Ai_ 6A`'K6A?m='6AQ6A F_C_6A`n |6A`1ft6Aÿ?"n6A#_G_g6A`KE`6AG_Y6AZ{ Q6A lu*\@K6A]wC6ASq<6A`_h 66A _.6A3ci(6AVcZ 6AgT-46AǠR6A L@ 6ACl6A8?A6AL ?%?6AN 9 6A@q`0,6A +`4m#6AQ+٪6A "'C @Ҫ6A ;_#˪6A@H;Ϳê6A J1  6Al@6A~߮6AvX6A 0 6A>hu6A`o&6A@`K_6A#!6A)6|6A ^v6Aj {n6A`|<@M`h6A͟_`6A ϕ_2Z6A=A S6A BTK6ACJKC6AUuh=6A ڟ56A G`/6A=.߿(6A)c!6A@;~`6A@k) 6A? 6AM6A@6AN@N_6AP@ 6A6AP!6AE\ ک6Agߐ ҩ6AxF̩6A&ĩ6A !6A"* 76AKK@$@06A |q7(6A@__!6Ac 6A@= 6A`V 6A q*_6As6A$ 6A@^6A~֠6A1vF6A@ڧ6A s ԧ6A_V_̧6AU/"Ƨ6A 4z6A 5\6AvV_6Ax񿨧6A`#%a@6A'u6A56AEq6A H 6AV~6A Fw6A o6A@1\e `h6Aa6A๝IZ6A`&aS6A ?L6AZ@و_E6A1ߺ`>6A`l " 76A/6A @)6A@*a[D!6AZ@6A}[6A "S 6Ab=6A$?֗6A/M߰6A`,`6A Ov6A 06A`6[?ۦ6A-W߶b`Ӧ6A0M߰˦6A~ViŦ6A`ι{6A@N쟷6A@m&`@௦6A`o`]+ߨ6Aޞݭ_6A`~VW&6A J_6A@\ 6A.R߳6A/\i}6A%\_w6Ap6Ah6A`S~a6A.R߳_76A@ q1@6A ׼Ir6A0Ҍ6A?@,?6A`>ћ6A!9d86AJJʂ @6AjD?⿍6AP4_ 6AS?19`6Aണ: 6A M^R `6AMz4 6Adޠ&6A5x6A ^ 6Ah!B 6A 8 8#6A`)[!`!6AM u6A^$ 6A ࡟Ҳ6A` ~6Aq:aG`~6AԀ'P @}6A`+C}6A9 |6A?.|6A`ݻOv{6Af$PP{6A7)Cz6A&Zr6A @=q6AA p6A--{6Tp6A#Jo6A`atGIo6A@n6A?f`-J an6AT΍@m6AjG @&l6A势V?-k6Ay_i6A@_ i6AAqh6A;!-`h6Aqy_g6A!f6A^*f6A܀)f6A@;+ e6A@1q,fe6A Re6Aމ?p_d6AdF Cd6A> &c6A@ y!@c6Ao@Cc6Avb6A៚X_b6A`t`b6A3`b6A@G?:Zb6AS"ib6A a}$ߴb6A(kSe6A `qe6Aോ x; we6Ar?`qe6A`>Sp]e6A`.D¡@e6A:b{d6A,9ڻ?d6AYtd6At2An"d6A  1c6A 2 1c6A鿶b6A[BFTa6A .9 ``6A@_Qh n`6A?S `6Aրpj_6AW ^6Abp_M^6A@m& _\6A /h*I(\6A~[6A`dY#-p[6A '`In [6A6BZ6A\rPZ6AŽ#Z6A ?Y6A Wl/Y6Ae`X6A_?iX6A`h3RX6A?W6Ax mݽ]W6AnW6A@ p8V6A?jV6AөE\'V6A` w@U6Au/a"UU6A3T6A@  T6A@w=_HGqT6ALɳT6A*yS6AA?& _R6A^$R6AP/1@Q6AB_P6A>Pi_O6A@0!l iܟN6A~ qM6AAܿL6Al /&wڟK6Ax%W"@H6A?\@G6Ao@ G6AO?M_?F6A `E6Aо$#yAD6AF˾$m@C6A %2C6A`&zMB6An\r&O؟A6AtU *&X_@6A@]&"`B@6A %) `?6Al@$>6As @$ܟ{>6A@!#ߵ#Pd=6A@ˁ "9z=6Ao'" ;6A@|0 :6A96A'm>96AAx@76A@"q?76Ag`66A466A`v[=36A26A@' _tB?26AgĠG#16A l?[@B16AR?06A`<_1S06A˦XC/6A#! P?B/6A"v,.6A@G!6AM?XYN!6A`T8{ 6A@.TWA@ 6Ak 6Aa?,6A&@l6A @,6A>V`k6Aia6A T`gY6AD`z6A`:ٞ^;#@a6A ~Օ6A z߁6A4-@߈!`B6A@)6A@t9?6A!?0?L6An X6A,{ 6A-?w6A E$G6A@ {3b6A M6Aa1v 6AKz>6Ax~_6A 2ా`6A۞?6A87$ %6A@. @j6As5A,_5A஬@Cg>5A 5A^,`5A rߖ[5A`}V8ȭ5A^-5A=MPA5A >oݎ"5A|5A0 F5A j ٨"95AM:5HE5AtjK5ARh/5A1&* @5A R5A^'m?5A@ #5A\) 5A DͿPt5A Wh@t5A`x+?N5A4 5Ae5Ak T5ARq5Ao|5Al:5?F5A`?M^_ 5A+!)ݐ5A-e5A @_,]5A1%& %5ALd5AQ@mD5A@PB?x5A@d-`ܷ"45A`)?ն ޟ5A@5A`4^$5A`& Z5A`GB9ʕ*5A°I 5AW Hnbߠ5A`_P! X5Az&{%&J5Ag_qE35A |-i 5A^æ5A@,A5AU5AxoW3 k5A uB5Agq$5A??5Ae5AD> 5A7Ῐrf5A\=0#5A)?=5A* =5AD`8ݿt5Au'@25A@Ιv]=5A5.?8g5A]ȍ{Z5A`qJ 5A!} 5AV_5A‰t 5A :(65A*_'q"@5A6U_ 5A@d-b=5A?b@5A1@O"ߨ5A`/Vj5A@Mj_~?55A _},%5A*?\}_5Am|U5Acރ{U5Aߎy55A 4 x 5A׋^w@v5AƑu35A`itE"5A*`ls) `5A@?re⟦5AT q?]5A'ߞp?5A5og5Ann X"@5AAl h5AkSJ5A!j 5A`hY>5A}@f@5A'O `e05A@eTGcp5A"@da`5A@%`_s5A@t]R5AV[ə5AV#Ytw 5A`Y V5AT!5APRQG5A`SQn>5A@KP/G_5A rN 5AGLv*5A&, IM5A_FRg5A>D 5A`9aBP5A`?@5Aq)@5A+?1 `5AC3=K5AC0A:ļ5Aֳ49Np5Ax8Qj5A465Al4 ?55A6`B3CZ5A`U1l 5AI 05A q'/J=5A._5A@߷-b5A@zP-Z5A@VSA+{4k5A@t%q5Aew5A lU45AáO@ 5A(DZq5Asl5AiHg j5AiXǹA5A:k_|i5AҘFF d5A`NE> +5A~taIJq5AOE~5A[$1xdi15Adе7DǾ5A`S 5A<ˢD?5Ap >55A@u #S!5AΑ^5A@>a} h5A ϧp^,5A _y]; 5ApZ_5A+`5A`_+fٲ5A_( a5Ac5AJ6j~5A Y䜫(\d5A4| <05A4f45A@g95A >ɱq5A TG‘M (5A1'/ߦ5A]p5A`E<%wbzM5A H^jԥ5A@TaM5A TxǾ5A=G$+*5A!;8՚O5A`i՟,5Ay1-Ok]5A ;5c^l5ACf!5A`I5A ll95A "-{s5A7'a@5A&&5A@E!5AH_غ=Ҟ5A5D5AuHԶ 5A `|`5A@D>Yݿ>5An%_$T5A[`?`5A%4`e5A b5A`_`_5AcB@V5A`& K5A755A U+A ݟ5A@^x5A<ė?5A#`Y#ʞ5Aan忴5Az #`5Atrcp_~5A`a zEo5A^` `[5A`-]95At5A `k?5A=~ӝ5A Miߴ5A΃1 5A X;|5A{_%@\5A@KA5A?-~5&5A_z|%_5A?a{5A@@8ys@؜5A qw5A`upߦ5Asߌ5ANqz{5A0}oh5A7=m@[5A%k0G5ABi$`05A`g 5Ae5A`! dٛ5A@"b75Ax?az?5AEf_@l5A;{N^H5AT_ ]; $5A[:![@D5A;Z5AY;`ߚ5A;Xݘ Ϛ5An`W5AR^V _5A @{T#"`5A@%?Rê5AV]3Q:ܿ5A}"OX[ڟ5A`L?N_5AnL9濝5Aw@J?5AJ8I`5A "G}@5AߪE%)'ച5AaiDߞ5AeB!5A`ξ`r@ @Ś5A>z?ʚ5A a&= Қ5AP.e;dٚ5A@ 9e{ 5A7L8& 5Ahs5A _d@5Apf!5A(`5A Rc{ഐ5A "n5Aan05A _,_5A^5A`S l5A@qLB?(5A $?5A`@ &5A@m5A@@)!5AxMJ 5A`@-N"5A"O]5A"dN@5A@/ڌ5A[Hୌ5AO 5A N_tp_V5A0$p 5A7 5Ai?̋5A| B5A G` 5A@ V@5A@:ZjN5A'?}T&5AV:5A|@5AZډ5AG#5A `k_5A@:M m5A Ou@T5ACW.5A@y*?x5A`ߵ5AYg ؁5ANـ5A33ds" 5A`ՠ k5A`ˠ˿?~5A:Ѿ{uL~5Akw}5A `Z!}5A`~B]}5A.t# 1}5A6̟:؟|5A@{=߾|5A`lZ b||5Ao& U|5AK?&|5A%M{5AC F{5A٠_ 7뿒{5A>&> @c{5A :{5A@4֟@{5A@d޿uz5Ad9+z5A 62/9z5A` Ogkz5A@grFz5Aa4ؿz5A7SHsy5Ap%9 y5A@.ay5AVh|y5A4.aCy5Aʞϥy5A@?g1@x5A^H_x5A ` yx5A @)3@;x5AyG.6?x5A I۶"`w5AŀQw5A`/qtw5A`6?Dw5A{ w5AF&j{v5A@` v5A46<@v5Aj_v5At0hVv5A @@v5A@cu5A6?u5Ad`2 pu5A(A.u5AO"t5AL[H@t5A@WQnt5AO 1l5AH!k5An&k5A,@l?Ik5AC,j5Ao@j5A+qfj5A@qH"j5A 1 "i5A@)i5A `(`fi5A.ta_)i5A`8:"h5Ae h5A) %nh5A'[h@4h5A@29lg5A)߲g5A {g5A` i9g5A_ް g5AIAaf5AI]Nf5A l e5AE1&@e5A@p[d5A-!JKd5A' @d5A@>Gd5A@Sed5A ɞ_d5AV-{ d5A`:d5A`>?d5A#2ߙd5Amߞ>d5A e#_d5AԎ?d5A`Y^ q$d5A@x.Afe5A  @!e5AU He5Ar` C!re5A`- %e5Aur Ve5A` e5A }~\g f5A@w,f5A@;;f5A@ "֤Fg5A@/@ `lg5A@Jp@#"@g5A #5g5Ak>%5#g5A™',h5A@J (0XLh5AdO*tWh5A@G&*i'`h5Aq?+=mh5A@_-[rh5Am~H/_h5Az614h5A@ 2h5A`ߊ5~@h5Ar6h5A!i8Vh5A`~9i?i5A`r;ܟ0i5A`?<* ]i5A@#?N>1ߊi5A@r ?i5AR_q@i5AFA?j5A ݨC&`Kj5A.`Dw j5Aൿ`hE!dj5AయAF& k5A >fGE$ Xk5A@nߠ5Hk5AD@Hk5A`IBl5A``o Il5A`aJJl5A`U!J m5A ;K/Fm5AK6Zm5A Le m5A@ ?oMӽ?m5A`ńQNn5A``BOP)?In5A ^P8cn5ATQn5A@C`jR[_n5Ak$S꿽n5A?~T_n5AzVn5A`#Xk `o5A_Xo5A@X?YG(o5A IZ, >o5A[{Ro5AK[<ho5A@?\k`o5A 3\ao5A ^>\o5Al] `o5AzW]:3p5A`D]dp5A@]`p5AQ^E?p5A^$9 p5A}_ p5A` ?_F`$ p5A0>/aBp5A5n5A@O1 m5A`*2!'m5A`@%@tm5A0*_Ym5AQ:?m5ABՁQEl5A_џl5A_^l5Aa!U ?(l5Aɢ`Uk5A~?Â!`k5Agk5At_aak5A :k5A~ {+@k5A?j5AR(j5A@o#j5Aj5A*:# $yj5Aɀ@yjj5A ? Zj5A:Mj5Ai?I=Bj5A Mg=j5A ھ_6=j5A`EU_Cj5A P^$@Jj5A -߀>Yj5A?k_hj5A`@U{zj5AAOsj5A@ `j5A8 j5A@`3k5AF"@k5A`s<`l5A@)@Krl5A}/l5A?@دF?m5A@+9n5AVY n5A?o5A7,kwp5A3 ]矧p5A Ϟ@%q5A yq5A A  r5A ߏor5AeN`r5A~r5A-@6?-s5Ay@_s5ATcx`s5A >ߨs5Av\es5A@ ?s5At"@t5Ah1 t5A A?1t5A@@|_>t5A%`=hLt5A@H {Yt5A?_ ^X#dt5AJ7c_gt5A`n@J_jt5A`U &xkt5AT}"ct5Am??Nt5Afq+t5Ai#Ns5A`o>s5A`?6"|_s5A*%._s5A &)r5A`-Sr5A z>.E> Ir5A@f2r5Aw⠾5 q5Aէ@s9gTq5A_F>hp5A`Byp5AH8Fp5A`b5A¿̂ `a5AJ`Rxa5A -a5A>O/]`5A ]@t &@`5A32q`5A ࣄPAq`5A@bߛ5K`5A@`5A _@n_5A`%!@__5A@- ?_5ABU`n_5AEqG_5Ai_5A{ ^5A^@^5AZ_j^5A bmt^5A`9N^5Ai~2^5A``?$~%`]5A" } &V]5A@Рz\5A[?xg \5Au\5A |sC`[5A:qW<[5A@nZ5Aob?Bl `mZ5A 8jϞY5A@8쾄g/rߐY5AԼ`eu"Y5A ?bAX5A0A`4FX5A/2!^W5AQ\ bW5A!C`ZSV5A;[&YdHV5AsW7m_ V5A`Eq@W=U5A@cVU5A#5@UY 7U5A@+6Ud U5A TT5A.uT,a?T5AZF$Tl1?T5A``Sb @ T5A/SdٟS5A'>SQS5AW,E5A8۱_D5A`3?C5AK@1U_C5A8.[?C5A,EiB5AZ**#`nB5A߿*k{% B5A`_I)QA5A S`(" A5Ap(i⿚@5A _'6b@5ASN's?5A?&u ?5Ap%?>5AX?$[8>5A`B_v##z @=5A?"!ڟ<5AH <5A`e`)_;5A`6y_;5A^x`:5AW:5AFZ߅95A`=t85A T!}75A 73#@65A-a#|Nz65A F^$$3s55A%[%n45A?%35A2@%J(?25Ap`%+?Y25AGӞ &}޿15Aa`Q&15A K7&]l05Ac'AL05A"'K05A-'/5A&J/5A`t"&e?.5A X,@S%k@F.5A͞!$?-5A ;?!D,5A٠I  +5A}`uB@*5AB_=38*5A@{c濽)5A``9( (5A>Q 6(5A8kv'5A`p!tjb#'5A&5A N[s&5A4ou5A@!H Ѱ%5AH)qB5A_~@K5A J@F 5A ݠet  5A@X< 5A 5A@QѾ&ݟh 5A'ݘZ 5A 8]< 5A {N@ 5A `'' 5A Bcl 5A5ALv@5A k(@T$ 5AC^5A` Mߝ5A r@5AT}! h5A]\{/?W5A`yS@H5A4v}A5A@u05ABdr$5A\pX5A Nne 5AN[kO_5AnHߵj 5AYli $ n5A)_gy /5A5^e6ڿ5A?e"5ANc?J5A`b5AK?ka5A]`F!5A0 p_45AP=Zۄ#@5A/3V7_4A`ޟT_44A@ jS_4AEhMJ4AĞhKd4AG4A_B0f4A *m?@u 14A ;K<?L4A`7B 4A`A1|4AQ+?<4Ai%jI4A@c`">4ADU0`|4A  H4A` ^_4A@S_4A$ 9 o4AV' 4A`;z 4Ao r4A@ߠ4A'?^4A Ad4ANC4A`{_h4A` L<? \4A_n/4AB S4A@p_4A _p d4A@ֱӶ9 D4A~I?ݲ+'4Aiݮ4L 4A`b8ު_4A[~ 4A `T]`4A+X`4AI"aa4A>d4A$)_4A@!4A*4Ah > 4A@+?@4A_ {uC4AwͿy^!` 4An &4A`e9y?04Aa\`(4A,!^#4A M(\\{ 4A`^Z4AΦW%4A@I7Vc`4A@'UM$4A-S 4AtQf O4A)N`4A K4A-_mH4A`%F4A@\ND 4AB4AAw !`4A_|?|`4A~>@"4A3><4AQ=~4A`74?J=@4A#@]<?e4A ;4Ab;ca4A@J;-84A@:0X4AO-B:``K4A.g`84A ~7{ X4Aߜ6?4A5c /4AN8*^GM4A t~!#4A`Q T 4A  9! H4A` j>p4A` R.`z4A\`% ޟ4A AY4A x$4A8J;$?74AL4A?H4AB6 4A`<4M4A~ i4A@ 4ATk [!4A :`4A`9.4A$4A` +`tu4A@ y@4AA4A`?{W4Ag_}eS4A@B[#4A89Z`}4A_4A_ 04A@jp 4A,`4A`&?iש4A R4A謹lZ4A `44A c7 _)4Avр$4Ada?7t _4A ~s%d4A<%a\M4AU;ޖ`4AT֭4AK?լ4AC72?4A E߶x< 4A2_tc4A@/`re4A kZc8qԗ4AlP0&ԋ4A )cP+vN4A9M!"=4A`j*Q4A@*|忝|4A `[Uy4A`(gR@w4A`3 >t4AP'8r4A[NNCn4Aaj4A@57 U84Av~ .-4A45M:c&4AUw.C '!4An|%$C4AQ`+@4A@@-_4AQ: 4A`D@<r4A ?> 0 @z4A~ %4A[ zI4Aֆ_f 4A@) 7?f4A`T_ ?4A= `4A&:~??R4Af@%3A> ec`x3A N d3A``)e$3A `c_v3A<ߙs3A`>s 3A#ɠX4G3A +mJ93Am?\ #@3A ; 3A ܦ?f3A0#73A Zd83Ae`u3AI8'3Az3A n I(_3A`v B3A AHi3A "a" B(3A@'!3A¾\# o3A`n$gu?93A `?6&3A`'}(`v3A} + >3A!-i3A]߀/ ߎ3A@\06E3A_1q?3A3[3AU>B4`}3A*5U T3A ]߾C7s@23A ]83A A;hz3A??};3AU@?߬3A*8> 3A`_<&3A;? 3Az;n |3AT;t 3As `;1_3Ad@3<D3A?V=֚i3A C=?@3A`9!= @3As= 3A<13A;B!_3A`W: =3A8P3A@5+3A a3T`3ACb2Vlߖ3A +!1fw3Al1\3A 11":3A :!1{3AB_l1}3Ar0E `3Ae0!@3A"0fܟ3A`7/Zw|3Ag/^3AI_-/r?A3A. *3A  .3A.LS.L%`3AdC.x3A -u3As ~-s3A@{-ZR3A`B- 73A -T3A`w@,3AHA,!3A@,&3A`|h,q3A`HF,A?S3A "/+,_._-3A( ,b3Aɟ , @3Ag`+?3A@T`+2 @3A1 +3A +(3A Nؾ+"ޟ3A ?+K3AY+s3A+YL3A`"F+T)3A :S +ܟ3A +3A+wP3A{+r3A` *+ u{3A`+ y3A-A+P3A F +u?)3A +К3A9?+3A<_u+f3A ++q3A* @3A (*^3Az7O*:K>3A *_!3A?_)3A-;);3ADp)3A`:)y3A@J(nn3A@,A(=$C3AFi(#3AV9( 3As(C3A@K_(t3A ?'3A@#'y3A3e'S_3A`yr'a @w3ABS'Y3A`)'t 23A & 3A &$3ANj_&3A&ߓ3A?&l3A,Q&_I3A IH&°ߟ.3A0&Ʉ 3A|"&#`3A@0&DB3A .&*3A&&@$`3A.& f_p3A`u&`I3Av?%ɵ&3A_%nh@3ALw%N3A B% _3An%.3AS$)c3AL3?$06_3A #P>3ALWQ#a"3A`"R@ 3AQ˿~"(?3Al"qz?3A@=b!Q3A (3A@H 9 u3A$e Q3A X b83A`/7 P?3A@L %@3A a 3A_ +_3A7$ J3A7 ?a3AF@z &/;3An ڿ 3AE@d 0 3A`5u 2ߴ3A4.p 8$`3A,~X &@Z3A@J N*3AVg 0 _3Aw *3A`( ?3A@ɀ  3A8 l k3A @3Ac ͇3A#m ޿3A^_N @3Ar_Z  3A<X d3A _aO ֶ<3Ar= Ys3A`X4 % 3A/ :3A@f3 쿼3A`2 \$3A`y_. k'3A8!- c3A֢2 ?G3A`eM @B`93A@Qy  03Az 9H_'3A` z #3A> >3AB? &@3A? zB3A@10 C!`3A 42 _3Arޞ>  3A@&j 3A@‖ ?3A b8 u3A ? 3Ae.!# K@3AmA w3A`g ~ 3A`% 3A=Z 㿙3A @3A F7 }3AD!`3A@)B\s3A@ܢpC=i3A] %@b3A`O)\3A u|lڟT3A`Gw%O3A`0zH3A`PO`WT <3A`43A6`_.3A/?b'3A`d 3A`g8 _3A`4ER`3A^ 3A>3A?3A{L@>_3A+ҿ'%@3AϥG?3Aaya& 3A@43A? 3Ai_3A}#߯3A`OCE3A\z 3A :ߨ߀3A/d3A`ހƾ߆3A@6|3Abb- p3A˞?h3A 4@E_3AkL X3A N]58O3Ad*H3Au@3A` :3ALU`23AT`/3A6 f!3AP_Q3AbI$`3Aꝟ3Af3AE_3A AJ_3A`_J I`3Aq3A#T 3A p@F!@⿼3A`_x3A`#``3A ܼI 3AM3Ab :hn3A.Akk 3Anw3A2o3A6O"[$e3A@\_Gf_]3AX@g_Y3A*vl|K3A ?B3Aǣ_53A %_ +3An7"3A)Ad_3Ags0/@3Aj$`e3A(5?3A@ 3Aų3A &o?3A~/3A`BS͈`3AtNI`3A5 3A3A?3A`4@3A W }3A@{_r3Ac(  U3Ar?VH"F3A`$rJ@3ACtt13A``&3&3Azǭ_3A?3A6?g 3A@V`T `3A@Mh3A `3A`W ˄3AX@W @3Aߕ?f3A  3A`M߳3Ag~7-3A%<lx3AU:濓3AYl3A`VMR{3A[v3A@ _`ٿL3A ߾zN?=3A@_u)3A {R3A3Am3ASŸ`3A 3A@M_3A” 3A@)`3A`@6?3A WpH3A5ߑ3A f迚s3A*?N)n3Aյ @]3A@)`ܟP3A'?w@3Ax833AlR8_'3A4!3A@_! 3A{e 3A@A_|h3A`[6!#3Ao3A`Sy3A.[} 3A_{8"?3A .~53Av7`3A`_~d3A``3AM[]`3A |߈ q3A-߉ a3A;@W3A@N}FL3Ay=3Aݒ|13A n z )3A{3A ItB&3A%?]v`3A枞S3AĊX3A@:?3A`[`\_3A3A 93Ap߱3Al3A@- !3A;:L?3Av3A6S[c_x3AOD_p3AR%`3A<?5?S3A$0;BJ3AR`9Av=3A~Gf $`03A` NA !3A\d|s3A 3_j/_3A@]y_K`3A &`[N_3AFߖ3A}3A ݠ `3A@V_3A@1H~3A` `A @3Av>?3A`@`"=3A`z0D3A`P4{3AT@Xcm3A@^f `3A _rU3A`F3A [`=3A_fE/3A=%3A(W! 3A`$ EU@3AZ?? bR`3A@N`e 3AU} )# 3An? j `3Ae@ 俼3A@ I@3A _ b `3A { !Ɔ3A C`*!ܟ3A7A>!}3Aaa!#`n3ATe ~!%^3A!fJ3A@_!_;3Ae "-3A`l_&"&3A "X"H 3A@C-!u"j`3Ay " 3A߾"ͯ3A"c3Aӱ#&3A&9#"3AǾ_#L_3A@V_m#3A #,3A@gH#mn%3Avf#,@s3Ab:$Q?l3A/?F$`3ARm$T3Aӗ $J@3A 4$d+3A@J_ %̩?3AB% 3A Ad%3A5#%W3A%w 3A`?&Y3A.?&i3Ah:&r3A`_l&&"3A8@&.3A&MK3Aӟ'p3A?a'L?\3AH~'LK3A؀'>3A@(,d43A#(3A ( ' 3A@(+=ߟ3A?((t3A<_$)U @3A`o^R)R3Ak q)a 3A )4 3A@`)mF_3Ay7*\3A A?p*{o3A p_*Y@f3A*?S3A`p4+A3AC`^+ `93AK_~+_'3A$+{!3A_+ 3A_?,Ҋ?3A`C,Z@3AҾ_, 3A`{ ,xq3A w`0-3AIx-W?3A -)3A-s߄3AA3.o3A~.|!j3A@@.z"a3A.MX3A `.6jJ3A8/] @=3A@A./&`.3A8_`/W!3Ag/d3A`/ۿ3A 03A`):033A^ Z03A TZ`06ٿ3A 0(3A ? 1?3A@7$1xL߮3Ah>1"3Aށr13A1@3A7߸1x3A@ 1 n3A`?? 2Yd?e3A32 ]3A^w e2|`T3AM 2L3Aࡠ`2WA3A `2+53A3H'3ARV3~l3A@@3 3A@[P3`3A`@43A 7U43A@4% 3A@i>43A 53AH59$3Av53AA5`3A53Ax!6$3A976_3A'?q6#3A`}[6_t3A6d3AA7a`\3Az7B T3A ^7"K3A7`?3A d>V8`=73AO8W!/3A ?8"&3A`d 9aE3A Ua9`3A&_9bz3As9E3AE:?3A@Nd?:a3A]_:sHi3A;,Է3A`/9s@G3AJ~[.3A0$NU3A@0$Nƴl3A,3M)3 3A`,3Mori3A`vҝNT5+3A KBPz3A`#U,3AXb 3A`.-sb1Ґ3AwOm5UN3AP >y&ʧ3A2z%`3A&Cw3A1޺3A`p` R3AZ9e 3A ߕl3A` 3A ./Er%@3A>ans%W3A FB_s$`3As=n3A$~s?3Au`ts3A`Cu+3Au%_3A$ c3A Gu?c3A`oܿb3Abq$b3A_ a3Ai?$a3A%_ҭ/߿`3AEp;@[`3A@w@"@_3AB B-@[3A`-#I[3A6xZ3ARFߡ[Y3A`]'`@Y3A$_n?X3A@^˟ډW3Aต 0W3ArDzV3A@V3A`kWU3AZF^῟T3A cw7y2T3A`1ٜt&|S3Av?ǜ6R3A%5?g?/R3A[Q3An2@FQ3A`F+|r `P3AO3A P%ePO3AsӾ^N3A`a?QJN3A,M3A k`fpPM3AKoL3A m``PL3A < fK3A RV,AK3A^ALJ3A Kf )J3A!`I3A`$='`$I3A j_oH3A@}>xH3A^Wm eG3A-_F3A@aHF3A ݋7E3AֿyD3A-_8_D3Au< nC3A@$:?~C3A@G$!+|@3Ai\ƠaR>3A#\<3Ab8ڿ;3A+L7YF83A!At73A`fgN353A(= z 43AT _33A$A& 33AW;?۾B ,33A@ { 23A`:_3>23Ay>m @13A@mHC13A P!@03AXIm?K03A` _/3AG_s/3A _7C/3AQNZ! H.3A`  -3A@8-3AM^o ,3A `8 ,3A`7" F+3A`*3A ~_8]*3A@hR]p4*3A@ IJ5)3AU u@ )3AKASR*)3ApE۟(3A`Jޟ (3A")=n'3A@;7 `8'3AI$ )'3A%T'3Aa' >_&3Aa&3AX`,@&3A!0@%3AZJ`d%3A5N`I"(%3A`\L$3A`6$3A`h$3A` Ah L$3A "@@$3A`F`˷_#3A@s/_X#3A,~QR`#3Aލ "3A)QM⟚"3A`@&.߿I"3A  !3A !3A@Z7`!3A`Xi !3A{k 3A૱~ 3A`  8 3A_?3A.C@3A ~@`3AP@$ L3A .b%3Ax3A@ !ZEV꿷3A 3A ֿ K@c3A` 93A_”3A տ3AqIҜ#@3A@ P&@3A͋3A3A`/q{ 3A-6az3A_#3A@m[}@3A ^=zd3Alvq!`3Asj3A`D?p3A`Hkm23Au@Uila߄3A dp3A`|` [3A@P\C3A`O~,Y-3A`.(V"3An QTSL3A`9`yQ 3A T`M`3AyJZ3AE]@3A 4"A3A@><ۃ3A A?8 G3A.4Y ܿ3AH%@0?/3A3@-_俺3A.+Z ܿ3AjU)Ã3A@_^.`3A_IE3AH|?b%,J3Aࢂɳ 3Aə S3A@Gl3A@J>3A@ 3A; `3A@ i 5Q3Ar> 3A@gf3A@A?j3AW$`3A_ ;83A w?3A@hW3A@Eh=3ADC3A>^_3A@$?f!3Aah@3A@*ݍ.3A@jTr3A@%>i9b3A@9`? 3A@gp>(#%@3A3_"3A~ߨ3A@ZsZZp3A 9?,3A#3A@3Aց3A@p>&O3A?3Bxp3A?}<3Al |3A` 3A@&f+53A\v 3A@ @\ 3AC=x 3A`K[ 3A-Bܽ" 3A2‘ 3AZĦi_3AK?=K3Amߝ?3A3Y.?c3AU53A@G 3AAՒ3AgY: |3A ^26N3A:."3A]G3AEM73A1 ,c3A@u=A1;3A ù 3A ''}`3A@cO{,_3A>y_3ATGtv2ADnD2A@oh_2Ac2A__2A]Z 2A@xUP2AZ?PF+2A@Lc2AIO2A@^OG2Ag>zDYy92AW0A2A@}?f2Ag;: 2Aw_6m%-2A< 2n\82A6 /zh2Ah,2A@٠u+2AA*S2AV+޵`e2A@.=k,>O?2A@?,y}2A,f 2A@ @N,-2A@+@2A (d_d2A=%1%2A1""JRؿy2A籡N12A{2A@Jp3[~2AYh_2A~BWm 2A- [2A@ C ?2AU3~`e2AD?2Aȇq``m2Aޠi2AR!Hw2Aub$2A 2AV*2A ~2AxJ42A@n2A{^%= 2A=2A@yT_a2A@Ï]nd2A@_@2Asc2A=^C 2Aa: 2A@ ǵ;2A_J2A7%Wt2A@}2A&Ѿ_ 2A@2`_2A!C[!:2AXZ<2Aڙ~3z?2A@@tI]fC2A!R`1a2A(`NYh2A^2Ae<5Ľ? 2A@-*2Az_&$2A[JGw2A}xw;`"2A@r5ߋ52A`Y2AJ@g E2A5? 2ADXeW&2Awv2A 8 !2A@d?2A@nd2Ab?/2AUy12A@v_u=2A(!ߥ2Ax6/2ARga& 2A@z2Aآ<$2A@pE 2A=`"Z`2AC82Adnp% e2A@N?2Axap?L2A@֒_2A@$` 'z2Aˉ2Ah"j?2A@DW2A~_{| 2An`uT2A@L_pu(U2A@k]m2AY_f92A`>_z2A ^Y?2AGNo 2A@z>Ie-2A@tG#ۿ52AD  {2AA=г ൿ2A9@;52A@1.2A^(U_2Amq_Q2ANXW~2Aʞ@ȼ2A@[_{2A@1_*N02A?M>2A@8 4ࡻ2A ?k2A4Jƽ@#2A@Wk&2Af_n$`p2Aџ,!.2A=} 22A=>R02A_#`92A@Ip_2A7=N2APe 62A2R[2Af)2A>CLkH2AQ<2AVt={;vԵ2Aj~`B:o]2A%ExEh2AO4$=䪴2A}60ao2AUZ RG2A8Q޷˳2A@ȃu2A@ck2l2A@ztHk|2A/ەGT92ABBK]2A=X_ȯ2A82A!1z2AHO2A@ |_'2Aaɒ#2A; @2Aܽ5@`Ѯ2A@|٠4 @v2Ax5`2A@8i 2A@UZO2A L:w_2AZ~A2A^4U2A1>>*2A@E{AQ |ߒ2AMoI_2AAѪ2A@vm2APGL2Amh2A +p72Aɝlin52A@mN~d2AoYx2AQ*pN3֗2A@zW眕2A@x=/ȓ2Au7!r2A^cO5k?#2A@- #2A3ڸ2A9 N͋2A,6韊2A0es.O+P2A Mk1uk2A)y/Q32A@ U'N2A@#@ E=2AO8hk\J2A=%~2A6 [FqDNs{2AzJNqx2A@L9v2A@l B[)t2A!jr2r2A@%zDpp2A@êۘo2A Q&dl2Aic*j2AyѺ3i2A)SGVh2AQ4 Ԭf2A~Q %e2Aw|ľc2A"}#!%a2A:8_2A9*]2A"}cA[2A-;uwM?>%Y2A.÷iKgAY2Ae ?Y2AHdz6 X2A au`X2A_`xV2A@ qC`YV2A@0]vBʽU2A-ޗ;p_LU2A@Su9H<ܟT2A@:A1_~T2A@$.@S2A~% wS2A@r#y@rS2Ad S2A5 R2A!$R2AJ3Mry?R2Au?PR2AƬ~dSQ2AxQ2An]Q2A;5Q2Am[#P2APSA7?P2AZw_O2Ai؟uO2A]мGN2Aa{MN2ARQ%M2AuOM2A1`B[L2AE@[K2A@~(v?J2Av!|蟙J2A@wh|J2A>"OvI2A an? I2A@)^P `SH2A@Sҏ_%H2AޏQWG2APNsG2A@2A@gާ}̇;2A@#Pسڻ|72A&u32A) M8/2A$.,>,2Ar1,iBM*2Al0|y(2A@N`2+'2A ~/%2Ab`g#2Am!2A@Gsv2A_ߏ2A@=ܞw^@S2A>4_Zl:2Apz@]Yfܟ2A% W3#2A@R?Scߔ2A/ O &?u2A@NR U2AO]lL/_2A@Hb?2AL+_EQv 2A{v.C2AA9`2A桐?92A=`v2A6e2AZ'$M2A,$4?2AR w2A@h2H2AVQ 2AU$ey n 2A@gKrU92AA"±N2A7ķ1A ys1Ao9>n1A+35z+ղ1A3ů1AH\p<1ApY$Cn1A ҫ(ֽ1A•ju1A/?fM"1A{җ1Alr1Ac9j81A~5@1A u\tG1A'<'N1AK ޴1A)-%ɻ1Akؿ1ABE $`1ARq1A^x]1A>.d?1A/P~OG `1Ac8]1AA* ۿ1Aբa1A$1A{V 1A^1Ai@%1A$dj1A!5% N1Aܟ"1A&ҺLp`1Ade1Ab濙1Ap ߟe1A,Ci1A뿖S#`1AFUw1A]11Ao96_1A\z1A_g} 1A.~6c 1A: ^^%@m1AR,Y]`;1A5~\Sְ1A3^Fӹ㋈1Ap zZ1AʞcN1AP![r=1AM#]z1A26'N؍1AKzt='K1A-^1ADP+"a1A,6Nc1AʦCڑ51A^]NBs1Ac!Rœˆ1A9gsS1Adyc1AzJqCD1A0Eaͮ1A"-#51Aw@ 7P|1AZf*3ꊰ1AdC81AroB5h1A l1A&̉q®1AD l1AeH l1A{âN 1AE E8"1A($>H'@1A&@71Aei&f}?1A|M` 1AEb1A=21AÉٰH1A_?F1ANn&?>1Ae%M 51A֩G%41A611AYXg7.1A[A+1Aͤ #1A=^`t1ACI~?1A\;zd 1Aqkn`1Ad` 1AiW 1A{JN`1A8D1Acg:1A`1!1A) &1A)&_1A='W$`1A( {@װ1ADӰ1Av`Ͱ1AƎ1&Ű1A%y `İ1A):1A`%ݟ1A)1AQj 1A六!_1AQ 1Aaɱ(_1AO1A6Ss1A`Fnk1AO{"|Z1AYdo/_O1A2}gc F1A0^$=1A:V`/1A]\K`)1AwnF1$1A}-5+V1A/ +J1AKL#F1A n1AJaN 1A% J1A(د1A5oӯ1Ads'ί1AIz-ʯ1Ahg ů1AY̬ï1A6F1Av ද1A”:/i`1Ar 1A",K1A łK1A\Oe 1A`1A>!$য1An){Ɓ" 1A v-ࢯ1A~߮nL1A 1h?1AW`ߤ1A9rZM1A.@~Ts-򟨯1ANl,1AytGܿ1A!GC s?1AA˨ 4,j`1A/O1A4)𿷯1AT& !o?1Acd7! ů1A8b :?̯1A;{o ү1Ap<;߯1A+_1A#h 1Ad^\u1AevP ?1A&U>1A1Q'1A[c0!1AJd `/1Afe_<1AĢB1Af ]1A3oj_1AK'*_i1A_ك-?n1Ai}i/ 1A#Cto, 1A'nL1A?5gm1Avh` 1AYR1AoR1AldBM̰1A=WDD_԰1A"@E?1A@8i1A75] 1AEC)0oA 1A\)c 1AN$߿91AgzX1A%p1ALW +`1AIG%1AJ'`б1A4T\p-1AF[H?&1A %DH1Ah8Vj" p1Adhcޟ1AA`"1Ase~B~ײ1AAt*1A ( 1AX[\Ve1Atl`1AHq? 1AM 1ATwuX?\1A>@C 1APC _+1AnT_1A G!q\!@1A07`1A;߸1A#mjL1AHH9U+1Aڙo<1A̙&{_1A&<\ Ӹ1Ai&(أ'Ÿ1AD#1A/Dy1Af&s1A$pg(?W1A_1181A:Lv 1A{"{O_ܷ1A^FkS1A%^t2 @1A)GTN1A:BF`1AҾ>n8].ζ1A'a1AIXIc1A21Aٿ&1A.I_ҵ1Ap5 1A`f }1AY(&%`[1A[Hl#21A އqEh 1AhTd1Ac1?˴1AΣ&}ʴ1Ak) ɴ1A !?A1A=Y"?>1A _1Au8!`=1A0<d1ApvsxĀ1A]1A>е@R_ے1A" @Z1A%p,@z}1A=3A@r[s1A=@ h1A?-@la^1AR:@oS1A@ @jI1Aܓ>@>1A@sE&@x41A_$@'?*1A@l@%1AA 1A`A 1Ai$ *A ,1A m{A00AHA"G0AZ`A%0A V`mAܥ g0A`t A,0A`bQ A@0APR^ A&"0A@ή Az?0Am_AyJ0A@@h'Aߗ0Aph`PA+`u0AU+wA  0A0&A?x0A@ A(>n0AןfnA c0Ap&y A~sY0A٠AO0AR!eA D0AE A0?H:0APA[_/0A@fZ][A`%0AuA̒0AeސA,YO0ApmBmA($0A0A%.A"f 0APX8Au 0AteAgf* 0AprA+H0A࢑?IA1'~0A@Arz0AAŎ0AOAEt0Ay pA0A2A"6OM&0AP1AEz0APWA{J0A̟A5&0Ar2'1 A~، 0ALA?* 0A= Aa1 0Ag$Aޭ00AI)&A,J0A ޗ.A#0A*Af+$0Aк>X,A]0A㯰1Aa`0Az:A, 0A!X?@AQbi0AHAV0AкnAdԭ0AAϧJ0A`-W-AS0A /;AfV30A0A[*#0A`Ue`AϠo0AIAw۫0A@);Aw߾0A@feN*Aǿ0Ab\ A-Km]|0Ax-Ah>0APq7! AaO+0Ah)A.0ADAq;@S0A&%A<0A PA؅0A A0AU0A`="pADHq)0Ap|rxjA(M`0Apg:[AA0A`鶘RAct0Aа;PAQ10A.EA* :0Ap0@GAN0A0rCAK0A`7:FACOi}0AHAc@0AeNXOA`0Ap~; YAjJ0Aw.a`ZAry0AW=`A~ԑ0A~/kAA|0AQŤuA4`0A?Ab0AP4oA">}0A FcAϧ3#0AAh0Aಽ?[A19Z0AGsA$-@D%0Ap _A@a"0AaA q0A0OA|-] 0A@՚$A7 .0A,A@tkW0AMGAF[0A }}YA;50Ak'&iAsg0A"sAQK0A<2zAG@ W0AKAN0A}|A=`3(}0AyABS\|0A5qAܝv0AP*mA{ַn0A?qA,vg0ARtA~L0AE"fzAsn;0Ap.o A)]J0Ap9A5E^S)0AWAv 0AtA0=0A0KzAF_50A0jȎA?Ng0A 8?AZ0A@5PAS%_0ASAn0A #GAĮc{0AyAv0A{@Aw{0A-Ap"0AШ@$}AV0AО~Ae 0AiA0A i A0APpCA0AJ)I/Al0A,6X4A1Q0A` <A]9&o0A`qFA2ؐ0AH]AQq0A{]}Ai4R0A`@A 0Ań A/0Ap>A A'I̟0A0EԏA!0AFxA|w0A :#At0A}A40AQ AA&I0A4N A4T0A@ZNAe2>0AP)A0Al䶥ATN0A0vA"i0AZOAp'0A.3A<@0A;AdAȧfx0AZ^wAWӛ_0AA⬄A10X0AAmz0ApՆAnkn0APuIA.VL0A1An 0A.A~F0ApbAe0AP5LAP0AfAcAing0AI;A`]N0A@vA 0A ŮAHHc0Anz#A.H0AQ%A 0A|*A`,Q0AV/A5)0Ahz-AK?W0Ac*AďX30A@g9Y&Ak٫0A>*A?H10Au0AOb0APHA p<Af η0An FA2Ȳ0APX RA5.V0A(~1[A 0AW@C eA涧0Ap|dAE~30AE#]Ayf"0AQ;aAH(0A{A2(W0A0hA0A0A 0AŇ0AuBAi0A*6A/0A71AOؒ0AӀȥA;0ArA10A@ؼKAa'W0A EEYAg]@"0AAgdϟ0AЍbA %>$0A *mqA |f0AkgA,ZH߈0A(AJ0A #An]0Au ?At&<0A^[GAZUY{0AoA{0A ALlz0AA:*i#x0AAE¡w0AA)!x0A-qA`&z0Ab4AX>}0A`h&AI0A u@AΑ0A{MAϖ׆0A'PAq0A" RA<@ŋ0AU[OA-V0A-MAZ0ANAZW50ATAU%0A &]A7i0A[&hAԽ0AUg|A-#aǝ0A0G vAdp0A`:rA؞e?0A0L|VqAuK0AgA4(0A';Av 0A09ӬAlW0A.OALgӡ0AIAԂD(0A-xA#K0AAŝ^0A96Ayrp20APrpA$0A8pAz[I̘0A4N A̗0AІyA".0AdX<Au0AYA)60A0\A& "ӏ0ArʇAFo(0At3Aܘ0AHI8"A9nߎ0AX!)AUB0A'd,Ak0A&72AM0AIv8AkrO0Av|<Ajw0A-~|AGPĸ0A9UAwvݹ0AeAq$d-0AXIAӵ0AhŃA5˞TA0AnzAYó0AϗApR0A(!VrA$ڱ0AIE?$A3>0A@r&AiI@0A9&,ARe0A%*AK0Ay7*A&0A*,Ac,0AȪh.A7ʄ\0A Al6Al=0A8U͚<Ahv0AHgHHAص00ACLA$60A+mWAC0Af[aAf60Ap'hA:nM0AzFc>lA#O0AvmA5; 0ApstAV3w0AhY~wAʺ0Ax\PwA,f.0A¸ uA2w0Ab81}A]\0A#A090A3#AqF0A؊~Aw?J--0AHkA0A2r+SAO)0AH[AX50A\ A0AiA0ARAQ0AA&rm0AψKA0ApAy]5;$0A&$ܰAb0A06A]I p0AիA*0A@*5w A6=0AqAmz;g0AT+%Aڥ0Ag#0A$us0A`FLAc֯0AP QA9*F0A@^UAq{eQ0A@WAjxp0ACr~bA0A{9bAJ0ASdA)0A“:A⛿J0A9 A<;0A`fMARw0AAE0AATk0AxAU0AxcQA0A(rҼAv0AXGxA%0AGA>A0ArA[rZX0AnA*0A[=0A]ۜپ0AjZAkؼ0AY AhX\0A@$A_"*K0AAnHƚ0AʤIA3c.0AwA_`0AˑAC~W0AbAI0ANvS2Ab30A~!A%0A*TκAiγ0AAw0A`;JVAТi 0AK/ʀAr850A1?g AhH0AAOZ"\0A@AM0AòAM0A`Gr7Aֹ0A{A1([0A WA]90A jqAު0Ax+Ai0ApM{JA悐0A$!\Ay^U0AWb`A~0AgbA0Apcc^eA=s0A"PnA-0AxԹxAD$X0Aœ=sAL=0AhAX30AGsU.eAQbB0AHydAB'[M0A [lA^o0AmACvy`0AHoAy06Ծ0A1 !StAK`u0A`nMrA4YV0A sAfs0Ax{8}A׺0AP'ĉA/20AȑA0AA?UI0A ^KAt 90AfAMf 0A~'At)m0AℾAWʢ>0A~.\AӀ90A gARx0A<%AyY0AA)30ApV iAGa0A`^A5 )B0AALѱ0A8zAէղ0Ah8A=*0A 2rAXЕ0A$(/YAP0ALkA|0AmWcA/i0AȆ  Am&0Ajc  AfJ0A0k AV"v@0A G A9`0Ak4U A0Aೞk| AQq30A(E- A5!0Ass1 AF0A0ALq > Ab?0A̰6 A!0A AFT0ALNU A| 0Aht A^E?*0A(Є A9Ĩ0At AkB㩩0A&n A&!GД0A_M A7nЭ0A AW}_0A@`y Aeǜ0AN Apz0A40! A*{0A^+8% Aޣ0AO* A0AЦT* A ޟ0A\[FT, A40AR", AP0A# 1( AmTY0AtC* AY0A@TNA- AKÔN0A`‘0 A^0AU/ A0A4.4$1 A^ Q0A<"/ A.0A+ AQ30AUL% Af7䭑0AfuY$ A0Ab3# AmZ0A! Aג0Alk AF'i0A, A&x0Aj' Aۈ0A(Ry% A0AXat% A0A ' A_H߲0A,* A=0A.* A}i0Apri| , Ab@0A&^0 A:ot0Au2 AO0AL A{Ao0Alq< A'$q0A+7< Ak]q0AT|G AEd}Iq0A'_I A'2Gy=t0ApAQQ A#ow0A@¨N A/x0ALTģR Agz0A0ytS A;n{0A&܇V As{0Aسc<)X A'z0A MIY Aʋ8y0A2!BX A$v0A$o-BY AI{w0AB.\ AȨy0AbJc Auv|0AJi f A#}0A h A8Ma{0A@NZh AIy0A<"g Azx0A&e AHևv0AXm0e AWt0AHf Av.r0Aܫ.-d A㤤5q0A\DӴe AMr0AS\j Apj%/p0A8m AF[n0Avj Aѓ.l0Aa7l A!!l0Acj AN k0Aq|"j AZ j0A8k AE#{l0A|\hp A_r `%m0AT.xZ0Atr AaI NY0A Jp AX0AP l AWW0A8wk AF:SV0AlCm A dT0ASPn A.;T0A:aHp A0$-[V0Ak:r A۹+ˏW0AVw A4NMY0A@LЫu AQ#Y0Aw AR [0ANo x A]0A S~x Al`0AHL~ A,c0Aˁ A9~e0A~؇ Aq7h0A\PN Ah\h0AV] Ai0Ax AB'j0Alt Asi0A$* A|+g0A{% AÙe0AHaiy AOBd0AP A܏c0Ax%@ AfZVc0A('] A焞Q`0Ad&z AMZ0AH A<5iW0A(e A {>U0AV Ae5S0AP5 A+P0Agp A'm>N0AdU7Q AxL0A; A_LMsK0Aܧ?) A])K0AJɿ AL~M0A9 AHbzO0A~ A. bS0AMҡ Af9T0A@gܳ AާV0Aޥ ABQW0A| ̦ A{ ùX0A<i AR6Y0Au AgW0Ad A*8U0A3L AxT0AP} A+2P0A0H AhQ0A4cR Ai-U0A0s AKdV0AA AYX0A8e A׾=X0A|_v'b Aƹ!V0AD AF"2U0A.l" AUHR0Ao`4 AO0AxԚM A̒"N0A`|) A]ףM0AtTs AD8VgM0AG A'$IL0A AԎK0A\e A~J0A`i AJ2J0A\ [2 ATDI0Aڼ> A^nG0A#X A*X|zF0A(j A!C0Ah A_ʐ@0AJ AAFݺ>0ApBv AfH;=0A>qr An;0AT} Avr:0Ad ! Aȅ%:0A3 A '<0A AΫ6=0A AH>0AO A fV@0A ) 5 A0A0Ah ArC0A}k AruD0A`& Aó\D0ADK Aw9%C0AXP} Ab~B0A|kg= AHu@@0ADU' A¶?0Adg A{A0AL  AY& C0A| AYp E0AvP A?(J0A2 A KK0AHXn8 A6ckJ0A嚖: AA-{H0AT' A]Kx T0Auy A$j8S0A ĸA ANZ3S0A@+h A#oT0AL A^ɗ4V0Aa At(X0AÙ AҶZ0A00 AҹZ0AX4 AF۾[0A쌴{ Ahx]0A' Av^0A\Ŝ A]&8 a0A$nn Asuꝱb0Al+ AS fc0AD^S0 AGz`0A@g Aw6v|`0A4O AJC_0Ad AhIH\0Ad.ʺ AkW[0A8pD A{0vDY0A0d Aل/b]X0A,rCt APX0AEv AHK[0Aj AMpZ0Ay A#X0A !A+`aNY0A{(.!Ar9X0A3!A%.^V0Ao螖!A$H89S0AAO!AYD¥R0AGED!AgR0APsv!A٤t R0A$ !A^ .|T0Aط !Arr;T0AX< !AE[Q0ADN%!A:rO0AW[9!ACPmON0Akq!A^aM0A(l!A7 IL0A0 AD@J0An!A'cI0A!AfokG0Ax%[!AJH0A7Zϑ!AbE^J0Ac!A=qK0A@r(} !AN0A4}=l!AEM0A>!t!AɕN0Ad7!A R0AT!AʧjT0APQ!AAU0AV<"!Ac06T0Aj$!A@nP0AY? #!A=P0AЫ{%!AhFEKQ0A$ko'!A(kS0A+!A-w1ATm8AtH$v1AJ]m8AP>a,v1AСHo8A+0Hw1AC!r8Ax1Adc6s8A )y1A< Fq8A-w1ATm8A߶Y> 4A,߇P6AL4A0d P6Ai,4A C`P6A34A: R6A[ 4ARoR6AS;r 4A}8R6A s 4Aɂ[Q6A߶Y> 4A,߇P6A{l<4A3^6A\84AeK^6A24A:=M`6AY^34AWa6A+ R<64A&`6A x:4A"Xv!`6AAv<4A:_6A{l<4A3^6AT0n7Av7AYI7A)7A׉7A37A8{4$7A7AzF&b7AR@7A,7Auk8A˲7A#I7AA7Ar7A[f7Av72]8Ar97A`t8A;Y7A"ݙM8A<7A<|7AT0n7Av7AZUR7A|F7AU7A0(:7A,7Az7A I7A#3-7A% 7A>GP7A R7Ay7AZUR7A|F7A*[M7A4Z47A7An7AJc7Ap$7AdbEU7Axr7A J7A*ߨ7AT7A'E7A>7Ao|7AC7A>Y=y7A퀅l7A17Ad7Ay7AQ?~7AʖST7AB(7A7Av(7AkVP7Axփ7AZ&7Ae7AP7AȆRX7A㜪7A-7Ap7A ׅ7AHP7A8J.7AXCK7A*[M7A4Z47A9}1 8A"oUx7AG} 8A'i 7A+@t8Al7Aۏ0a\8A._|7A 8Aҙ7P7Atp 8A&UF7A9}1 8A"oUx7Alt8Axq6AF=KL8A$ռ6AkϤI8A Rm6A8A6Arg8Ab6A]8AZ6AQ`8A2F6AFd8Ap~6AD8AGF6AEs98An~6Aň8A"^+Y6Alt8Axq6A8A[ 6Aw8A"6ACL8Az6AO)/8AEɮ6A5A"5A4=5A ,C5AҒ R5A75Ae˾htQ5A:{5AoQ5AM-5A,ʳQ5A\D55AjBn5T5Ax 5AV3MT5AxN5AҒ R5A75A(bH5AAQ,4A1?G5AR4A OnF5A| Kv4Axd&D5A4AE#A5AL|5A[ӳ@5A`75Aݞ>5Aj;_5Arv m>5A5A|v?5A(k5AI 2?5Av|5AzyA5AMg5AuSYhi5Aƈ465A'gki5APA45A)h5ALV4At1k^ 5A̴4A2Y 5ASW4A"I6 5AL.4Az&)J 5Ak44AL 5Aݙ4AG< 5A2<4At1k^ 5A̴4Ak1M5AhåI4AfL5Ae4AKDÏK5A4ASL5A4A% L5A&g4A>DM5A`44A.N5A(r4AsN5A}4Ak1M5AhåI4ALi!5AY4Aj{5AJר {4A\i܂5AH"G^4AzڸBA,~U.ABAT.A~9BAgV .A#SBA@Rv.Ac %FՍBA3a.AL$BA\.Ah@BA4/>.Aq BA.AVBBA3o.A-qBA6Γ.A!qGBAv.ALvBA`Xv.A2żƊBA)]{.AO׬nBAhLN~.A8 BAP.A~BALkU.AZBA8~.A!qGBAv.A]KBAaӫ/AyaBAԩ}/AW)mBAP/A3VBAx6/ACBAaA/A%(-BAn(jR/A=eOBAwS@/AѪBA Т /AaBA#v/AiCBA~b /AX BA;S}M!/A]KBAaӫ/A0 BAS.AҜѶBAtT.AdK܁BA|JY.A4N~BA @[.Aak_ԁBA3c].A!P"BA@^g\.AԞ=BAԛrZ.ABAHX.Ap%q꾂BAtOW.A0 BAS.ABA4.A+ d*BAdXlm.AzʁpBAwA/AqBAh/AYBAh¸0 /AuBA/ABA4.A 2awBA݃..AavBA@2f..Am vBA裏3.Ay|vBA.45.AKӠVwBAn7.A?wBA<"4.A3 wBA$60.A 2awBA݃..AN3~5{BAGa..AyBAL,.A1,.yBA..A>yBA4.A4)gFyBAț?29.A(γ{BA̴X=.A~78|BA\;.A `|BA`18.A00|BAmCr6.A:&sD{BA[+4.AN3~5{BAGa..A'דu؄BA *7.A띗!BA~w6.A-&BApkɟ8.A GfNBA|@=.ArlcBAtN@.A$BA,IYH.Ai{BAӁJ.AvBAzF.AU;҅BAhףD.A9ßBABAa6-AYxv>BA (6-A1BA!F-Acr%>BA@ԥK-A =?BADϦU-A)?BAxT-AXa|@BA 3V-A],BBA(U-ADBA\Ѵ=Q-AuDBACJ-AE[3DBA{F-A٨BBA/eB-A$ABAp<-A;J?BAh'k&7-A]JBAkSEI-AXIBA].K-AYHBAv(J-A&HBA `N-A ~zGBA\N-AjBKBA0M-A&CpKBAP-A~,D܎,A$29BAԇ$-AIS'9BADA-A۞0:BAd6 -AVk:BA-A;';BA4*-Amt;BAJ{-A1R;BA܌Z=-AQ;BAj,-ABA--Ag>BA$/-A!_T?BA&ơ5-Aq##FBAzjI-Ao!GBApxG-A@GBASB-A.`HBAvGA-A8eHBAu@<-Ah@HBA9<-A$#IBAS|=-AtAIBAN?-A)rKBAv o[<-A-LBAb`9-AKBA/:6-Av†LBAp/-ANJBA Hp_!-A[JBA<$"-Ae6JBAY,-A IBA|zs0-AʌSIBACZX1-AʏRHBAo20-At;QHBATo(--A>xDIBA:j)-AHBA4w'-A^:HBAZa} -ANIBA8~R-A}uQIBAخ-AkHBAd-Ax?K0HBA=P-A4zaGBA-A-r9FBApa5N-AaFBAhF%A-A< FBA,5-AXlZBAtչD-A-VXBA<,H-A[Ð XBAXY@M-A}GWBATVO-Aj"VBAN-A4IVBAI-A|6UBAV-A%fXPBAY-AXԜOBAm[-A)'OBAdIG4^-A\QBAz[-A7 rءQBASIt^-AܟRBAd_-AqDTBAle\^-A7e%TBAjY-AWgxIVBA,O~)\-A"VBALBAQ>-A֔_[JBAUHB-A1[dJBAYE-A tT9`KBA}vF-A `nLBA "E-Acs{>LBAQ>-AMPTBAj,-A:TBAc,-AױSBABF'--AQ&SBAjW/-A1XSBA~=/-A2$$SBAMt)-A( #RBA&-A4RBApS%-A;aRBAL\7$-Aˑ,SBA쎪|E"-A/-RBAÕ-A┐*SBA-Ag.VQBAej-A;QBA (g-A{ZPBAPb-AUiOBA Fa-APOd(NBA%A-A慨~MBA -A*2LBA ' -An]KBAT9u[-AuvKBA\jC-AխgXKBA胮-AtMBA0BT(-A MBAؕ1-AHkMBAws@-A37?NBAG~C-A^INBASH-AcNBA*QJ-A vOBAjLI-AgOBA4 ;>#J-A OBA:H-A3δOBACB-A ̟PPBA$UUB-AhxQBA vI-AbwRBAX谻E-ALU- RBAjB-AWUBA2-AMPTBAj,-A]RUBAtE7-ACHTBAfo:-A3RTBAp5A-Aϭ~VBAP)?-A UBA0~g9-A]RUBAtE7-AMPTBAj,-A3 IWVBAp4-A|VBA4mM;-A{pWBA;A-AJ4YBAA-AZ?XYBAO :O@-A tsXBAUg5-A>WBA 2-AmWBA11-A@dXBA@.-AqXBAF)-Au٨WBAH(-AZWBAjg%-A P WBA0Ix#-A %VBA$*I$-A/̀TBAX](-AfNTBATH#6*-AMPTBAj,-AJ&BDBAy2-A";CBAǮk-AVv!=BA ၑ,AXzg=BApd߯,A>BA,A2d>BA`49,A{nF?BA,A@BAdK-AABAT-A0}yCBAeR-AS8 DBApV?=-AiDBA){-AJ&BDBAy2-AHBA4Yy -AfӅGBAh -A(GBAN7v -AƄHBA -A޶' IBAt-AIBATa-AixIBA解 -AHBA4Yy -A۶A4BA',A<ݖ4BAF,AdL@5BA)1,AB]6BA,A#_7BABBAsp,AJc.BBA3 ,A':;ABAE,A(&@BA,b旒,A /?BA92,AX>BAp%"g,AY>BABn,AbN@BAyw,Ah @BA,A_ZABALTG ,A%@BA8 ,AP] GABA<%\,AM_BBAP/,A`EBA_j,ADIqFBAt,AbI}FBA8,AꇔFBAA8,AUEBApS,Ac4DBA u,AѐDBA@,A֬-EBA ,A:(r3FBA0,A ܼ.FBApKO,AUEBApS,A&q LBA1|,AWvJBA|CF,A6IBAdɥ,A{IBAhg!,AvOKBAKs,A*S[KKBA(%,AHmJBAo6-AgNOJBAйl'+-AWc#JBA0NcN-Aq}!MBA4-A%D-LBAH ,A&q LBA1|,A;BA ,Ak3ξ:BAh,A>&S<:BA̘<,A:^ :BAVX,AdHG:BA,ApɏPBA<.,A#PBA,AobZNBA<,A|,NBAY߈,AӜn|NBALF,A#PNBA&,AxVk(NBA}m,ANBAaAv,AlNBAL m,ANBALq,ABAifz,AI<>BA,2,A]4!>BAX.,AD=BA6,A$=BAMۦ,Ax'BA`,A x>BAD'}w,ApG?BAŮ,ANUK8?BAp<5V,A ?BAX7],AO{@BA~Ǽ,AzZ@BA>,A5ABA|$,AHk>ABARU,AޥBBA),A/5'CBAEC,A.XCBAYT5,A~DBA@{8,AֆEBA8q,Ad1DBAqZ,A5fCBA U,AԔ\CBA<,AeADBA#,A K9DBA& {,APc/ QBA̓r,A3'pQBA,A$QBA(,AEPBA ϱ:,AcOOQBA4],AcOBAɀh,A>=OBA?i,Ad1OBA!,AX.APBA],AvQBA),AcOOQBA4],A}!(HBAWΚ,Ap{,GBAK,AԮEBAT/,ArDBA|g=,AWtDBAL;\,,AN\`vEBAvZ,ArE!FBA<(Z,A$AHBAW,AE%'HBAA,AIBA),A"IBA?N,ARIBA.Z,A}dS^HBA`߿7,A~wxHBAɧ,AqGHBA˾ڗ,A}!(HBAWΚ,ANBPz3BA|8">,Au#4BA@ًNJG,AV5BA$E,A?!R5BA(6G,A{P!4BA(l`V_K,AeV5BA,N,AQV%\5BAӋ0)R,AUo26BA;1S,A@du5BAqyX,AV7BA c,A{7BA “sZc,A'X7A9BA9b,A`N8BAԫ@f,A8BA1fk,A-:BA? t|,A:F:BAc)6,A_!BA;r,AfoqN=BAd N!p,AD/>=BAT 'm,A0W?w>BA฻l,A)g>BAHDkj,AN>BAdnh,A H{,A' 9BAg1 D,A$ۇ8BA,D,AjY8BAL@,A<2~9BAl0!8,Ax.K9BAěmXN4,ACHxa9BA @c/,AՏ\m:BA60,Ay-;BA0{.,ANA;BA@y*,Arn+@BAP(|,AR)?BADuVB},A*@w>BAX,A}V=BAșe0,Ac Q?BAեO,AdV~@BAp[ ,AABAϐ,A[CABBAd意,ADwBBAUY,ATNPBBA܃,AxzϣBBA{,AT`MBBAP=I~,A ˆABAT,AeWABA\;~,ABABA짩|,A% 9ABAv&x,A]]FBA>,A oFBA},A FBA0Ɋ,Aİ],AيI5(JBAr,A-IBAt,A;)HBA,Ak!HEAIBAHN/,AAIBA,A4VKBA k!,AӔX#KBA` \,AيI5(JBAr,A9xFBA؉V\,AಊGFBAU.r\,A (EBAĔy|_,A+ImDBA ^,AʤN EBAGi&[,A4hCDBA Y,AZ1DBA -EY,A aDBA?_a,AC`DBA'f,A?DBA~_zl,A[*EBA,+om,Aaz)GBA4_j,A=eGBAd>f,A܄FBA5b,A9xFBA؉V\,A+ I=BA,p½8,AvVBAScH,A~@=BAcE,A5*>BA8.A,A+ I=BA,p½8,Aa)BAL|+A(f|)BAP&1+Aj(BA;#ݳ,Aǯ@)BAG;,A xl*BAr] ,A(l*BA_,A<1e*BA(1,Aa)BAL|+Aݗ\X9BAhAt|,A!E6BA ",Au$6BA8"\$,A37BAFS ,A*s9BAPa,Aݗ\X9BAhAt|,A;BAҮ,A¸5k:BADkX,AUh9BAYS0,A4Qk9BA@-,A>68BA{D",AS`8BAO;$,Ao E;BAľZC,A;BAҮ,AK֒9BA|a,A *a}:9BA\7,Au18BAMS;,AXqp7BAK,AAb6BA@,A5BA,!_,AN6BAl ,A8BA,7,AK֒9BA|a,AAV]=-BAS+AlN+BA!+AsJ+BA S +AF$,BA`鴮+AE l,BAz+A V,BA(N+AQ9zp-BA+AAV]=-BAS+Al ~:BAAɟj+Ag9BAH'u+A0l9BA@=,AwcY:BAtw,Al ~:BAAɟj+A%}4BA Ӓ+Ao*3BA4i`K+AA![(3BA4s;+A>#2BA(ح+ANd2BAǗu+A5Le72BA#.+A!lv2BAJp+AC2BA<_n+AM1BA +AAt/BA|Po8+An0BAOU{+AsO1BA4&2+AG{2BAhcŴ+A>73BA@ +A:rw2BA.[`+A#k\3BA=y+A!b4BAX!`+AvD4BA<E͍+Aڅ%4BA|_v+AJ-ō5BA H+AD5BAѾ+A$g3BAl/[+A*p3BA,0{{+A֡3BA1+Ah^5BAH+Az6BA˩+A{!6BAc<G+A1 f5BA +A`4BAqQ+A*(j 4BA]+A%}4BA Ӓ+A`4ZB6BA`+Aɻ3Ae4BA R +A?ZWi3BA2l+Aiu@3BAʺ+AM*D4BA02;+An7BA4Ў+A:|7BAp+A`4ZB6BA`+Aw{LBA\t+Ah#HLBAtk+AÏMBA[k+ARN;NBAD Yi+A.WmMBAR f+AONBAPx?`+A<jNBAЅ_+A?HyMBA$н c+ARLBAc+AK:dqKBARle+A)?KBAl폎e+AIBAXc+A\iy]IBA؞a+AIBA$;[+AILaqIBAxמZ+AIBAH= ]+A bHBAi\`+AQC]HBABd+A‚HBA|utMf+A^;IBAj+A7k-OHBA( Kp+AU.HBADu+AoHBA@O&z+AƨXGBAt+A g FBAܿV+A8{GBA|V+A5GBAdE+AkGBA<+A&$PIBAM+An>IBA9Ƕv+A{4JBA,Gu+A4'JBA@,z+AIk]XJBAh L+AKBAL6E+AM'I5uKBA\9+Aj<&LBAdVv+Aue%nfMBA4BY|w+A&MBA3U.v+AZMBA}մo+Aw{LBA\t+AUtm3BAk{LP+A>2BA0M +A2ݵ52BAk6+A1BAhA: +A[ǯ1BA r/< +A1h1BA hi+Aļ70BA%PR+A~/0BA=+AbF|0BApp++Aid 0BA} M+AIf/BATOr+A~.~.BAt +A l.BA`+A8/BAx4ur+A)0BA +A݂/BA$3#+A =0BArvxu$+AD빬0BAh"+A0BATsh+AFd2BA+Ap3BA[}+AІ3BA(ݫ_+AUtm3BAk{LP+A+6BAu:<*A ' 5BA^*A*l\@4BAV*AOc3BA"B;*AlEy3BAW*A#V4BA7+A=P4BAo +A<?6BAj+AG]tc6BA\y+A8w5BA+AoI(5BA h-BA<k*Ao\.BAm *A 8].BA2һ*A5kX-BAH'|*A)GP-BApk*Aal9-BA@-*A*a,BA8lVD*A1{*'+BA*Aˢ-BA_Q*A:7 ,BA>᢭*AMZ]+BA01*A|*BA֯*ALE7*BAi*A*BA0a,Ķ*AF(K,BAtgY *Az7n-BAc*ApH-BA}A*Aˢ-BA_Q*A3IG(BARP<*A3lu&BA0Cf*A]{%BAg8*A~b&BARi٩*A;&BAdi%*Aܭ[(BAǵ*A3IG(BARP<*A >%+BATmu*Ad*BAXvt*A'*BA-]庒*A q (BAL ܕ*A/(BA\f*ALT*BA e*A$w*BAX}G*Ak3+BALf1*AD+BAfU*A >%+BATmu*A8W(BAq*AůM'BA3*ASHf'BA y*Abb&BA ݉*A. l&BAGK*A$Z%BAJȼ*A18'BAɄ*Ak?'BA*A#$)BA<t*A8W(BAq*AD-BA>2*A5 A,BAE*AK+BAC*AǑ)BAhHl*A(e)BA]*AO}%]+BAh,w*At'?,BAL.n*Aq,BA̋*AD-BA>2*A/BAT_.0*A1BAVU̙*Apl1BA,ڍ*A{U/BAe )*A|.BA,bՆ*A,-BA(ʅ*AM-BAKJ*AWi.BA Ȕ*A/BAT_.0*AlEc4*AlEc4BAԎއ*A=BAАQ*A;%!BAdɨ*A >BAP x*AAx>BAԎއ*AD"9BATÔ*Av'9BAŀ*Ap7BA(<Ę*A:?(7BAt*Ap7BATľĝ*AF{^7BA\L*AQ7BAݽaH*A[8BAl*!U*AP5 9BAy*AΑ9BAF*AD"9BATÔ*AHx2BA6*Ak 2BA$rCH*AW)0BAx"fS*AmP,/BAPC*AC$p.BArq#*A+.BAD>iX'*A--BApF 9*A4m,BAvuzI*AIB-BAL*AUxg,BAx]SQ*AU+BA!T*AOB+BA( ST*A(X+BA/Q*Ag+BA֘L*A^*A.i9:2BA >E͌*A)2BAԎ*A]B}3BA$]*A=}2BAeB*A=`0BAjy*Am/hF0BAXz*Al|0BA`˝}*Aː.BA;3*AU.BA`"*A 0BAlR *A1BA`!у*A!1BAh4*A1BAe_ǘ*Ao1BAL~*A |d1BAĬ5;{*A=`0BAjy*A,"BA:K*A] kP!BA M*A{EBAƜU*At,QJBA+ xY*AOtBAlXZ[*A iudf!BATyIS*A,"BA:K*AGC=BAp*A04NBA5*Ap5>BA n%*AGC=BAp*A,+w5BAx(&*AWDJ5BA|"Cg*A74BAT*AmmK4BAdbY҂*Ap)}C5BA *A,+w5BAx(&*A5}47BA̮_y*A-J4BA`u /z*Ar4BAL2}*AP5BAl}*A_F)6BAp*AK6BA Z5+*A,1Vd7BAS*Atz7BA L{*A5}47BA̮_y*A0BA b*A|z4/BAcXe*A ]x/BA(Xg*Aa/BA=}zh*ATnB=1BA b*A{ u1BAp`*Aܰ0BA`w`*A0BA b*A#BAL2;1*A-&BA(,*A0&BA\m*Ag0&BAL *A!#BA^o*Akv!BAxZ"*A}*A`dMBA ;*A+vG!BA*Ark"BA6 4*AD%BAfDu*ADi0'BAm*A&>xǫ'BA,8S)*AI &BA0=*A&BA8ŀl*Aؑ%BA *A,<%BAL *A`'BA & *AtT'BALܢ *A˽S&BA^*A=&T#BAtdl)AG.j"BAВj)Afv|!BAx)A.[u!BAb)A`ShB#BAhlҪ)As; $BACW)A-6f$BA@a1P)A=&T#BAtdl)AuPU'BA')Ao%$BA΃)A6S/#BAwG)A1Ϣ#BAp )A&9C$BA )A W($BAR#)A,Kq$BAۜ)A>w '%BA@ه)AT8%BAA)A5'BA8{H)AEC'BA$)AuPU'BA')A7,BA3t1)AD,BA/)APȣI*BA8@lW~)ApE*BAG?)Aḱ+BAp)AjěH,BAxqGV)A7,BA3t1)Aup BA2:jf;)A!? BAx8)AN BA9N<:)A>Q BA]$B)AD7O BA@W\C)A=`TX BADE'B)A9 BAx<)Aup BA2:jf;)A7l BA0IA)A/ BA(PD)AU BApkA)A,8 BA )AgtU(BA]=)AƳ(BALn5)A#!(BA~G2)A'BA:)A ׉v'BAXq)Aݯ +'BA܂Q")A-'(BADЁ/)A IЀ(BA9.)A[q(BAT+)A[f(BA|$)Az/,)BAxa{Z$)ADzVM)BAlY\")Aao(BA)A'BA:)AULBA`:(AzBA@R(AD+BA6O )AG%&BAp` )A\RBA0MIb )AcĂBA)AHBAPU?)AULBA`:(ALBAam(Af`BA(A>S0iBA0HLs(A'`BAP@(A2BA̕kh(A#DBAC(Aq\BA\x(A5σfBAM(ABA`_V(ALBAam(AS}.@Af]$Auz!@A`\$ARmt!@A`7[$A@A~ Y$A /@A Y$AT \@AbT$AAi@A@T$AƂ/@AUV$AH\@A0 I+[$AL(@Af%h]$AS}.@Af]$A A6@A }$A-X5@Ah)|$AV# D4@At=[I}$Ah`y4@AHa$AJgP5@AP$A$D 26@A7H$AWH\7@A ҆$Aw/8@A\$A A6@A }$A-W? BAhn(ARSA BAV7kȯ(Aނ BADhQ(Ap BA?H(A:q'/+ BA,z(ArK BA1c(A˩ BA(A~6BA6(Ag+BAP#>G(A\pmBA1-(A-W? BAhn(At0ˡAAHQ>KO(A@b7AA N(A^w_AAkJQ(Az$TAA#W(AdYZAA,\w\(AUia$AA @.b(AZzAAla(A1AA@|[(At0ˡAAHQ>KO(A~,@A}*%A#\\@AxT-%A]24T@A;t)%Aj@A6 )%AiɅ@A%L?,%ARH@Ap"/%A @A%A*@An1d:%A @w@A`}7%A:ڴ@AE73%AjE@A o/%A~,@A}*%Aʟ>8$@A׊D^7$A%P&$@Aju6$A@j#@AuȒ5$AD /"@Ahtaj8$A @A 8$AЗO @A-`4$A0x@ALO5$Aw|q@AX6$Aog! @A,:$A @At L;$A^x!@A80?$A e"@Aa@$Axu"@AvL5A$Ax@?#@AUB$Acg%@ADd@$A5%@Aa9(:$A+u,X$@A9$Aʟ>8$@A׊D^7$Awt.7@A:J|1$A6@AJہG$Ang.@A,r}P$AuKZ.@Aw!W$A47?:/@A+X$AB$0@AGX$A=x52@Ah=Z$A54@AxfjV$A7o4@A(l- R$A4!W5@A0EQ$AQ+6@A(N S$Ae͏R7@A=Q$Aq9@ARuE$A"(h:@A`i²?$A9ߎ_:@Ax:$AX:@AP89$A$9@AL`<$Afh9@A8s_;$A 8@A}oG8$A7@ALj5$Awt.7@A:J|1$AD@AV$A4c@AxD|\$Ara@A| $AwPw@AۮB$AOM@AOQ%Ag@AM%A=B@Ḁ%AUY@Al༃%AC^3T@A`@%Aj'hL@A<% %A@'@A$` %Aݒ@AT%A~ߌ@Aԣ%A:P$@A0ol%ArM"C@A(%Adw|@A\2%A&h@A$Qvc%A9 R@AAc̐%A&[@A %A* c@A7%A֬@AZ$%Avj[?@A,VK%AIɒ@AP%A[@A 0%Af@AC<%AtEu\@A ,c%Ag:@AC8%A @AȠE?%Ae r@Ax0\ %A3rh@AAX%Aq..1@AH7^%A9x֬@A6=%AX𙞈@A| x%AU^l;@A =$A7S@ALA(AdIAA`dM<(A#H9AA}/>(A6JAA̽=(A:MAAD1J;(A_BG@Axa[$AUF@A)oZ$AAE@AIc$AGR%QD@Aީf$AARB@AXmf$A ٻB@Ah$A)iekC@AŌKk$ArUuC@A^{n$AYK C@A$`r$A0YTuC@A/oZt$A]{+D@A53ޢu$A\WzE@ADĺxs$A -ZE@A$:=@AWphG$A@9@ALoIdS$A<9@A|".W$Aia9@AleX$AV;@Aw]$A"<@Ah `$Axb<@Ata$AuӲc>@A,N]$A=Y>@AF[*^$AO >@A8ґb$A Ia3?@A %Sd$Arƪ?@A8V9f$A]H=@@A1e$AA,z@@AX`$A`@@A \\$A:=@AWphG$A AApvoS(A̗\N`AAثT(AsAAAd\C[(Aַ@AA j`Z(A AApvoS(ALAAT5'A(}AAؐc'A0OAA ?'A ڦ"AAH'Ae9BlAA%OI'A1ЕAA#Z'A.AAt'AUBAAT'AQV}mAA$'ALAAT5'A|šAA 5m'A@yAAi'AAA9^'A AA 7 (AxQ}AAĮh(A߹>RAAD\< (A|šAA 5m'A5=OBA{MY(A M 6BA0[(AH) BADOBk(A5e=UBA,qm(A AbBAp(AˌBA +פs(A$BA(lu(A BAs(A{Al.BABA8yu^d(A5ͶBAP`OO_(A5=OBA{MY(Ab۲'AA|MY&AL&AAX&A%*#$&AArY&A1]%AA$M_&AF%`8&AAESa&A|Sc'AATX_&Ab۲'AA|MY&AD|@ARnB$AvC'X{@A|D $A#Sy@A4'Amq-AAŰ`'A3{AA8F'Aw AArru'AAAAdn'AhSAA(m'AJAA|0+p'A+oAA[}'A]zWAAwcY|'ATtAAXgz'A'^AAuTq'AAAAdn'A&B+AA#3(Af$AA7k4(A24%o[AAV>(AmbIAAD>@(A.AA/Pk@(AcAAuYC(AIAAxH(A`UUAA,J(A dAAytM(A?z>BAf;P(A>BA1DO(A BAD#P(AP!#}BAfL(AwBADCN(A^>/BAu M(A BASJ(A BẠIF(A NQBA2›C(AHXcBA؇=(A&B+AA#3(AuAA#n/&A7԰tAAPc&AX ]QsAA|ZS&AL61uAA3&AL5LvAAm^&A;vAAT Hr&A'd2vAA+*&AuAA#n/&A8܌AA]#'AUPAAxN"'AXdwAAT#$'A$ AAv&'Ae֊AA,'3('AAAz$'A8܌AA]#'ArMAA~ |&A4;MAA *|&AKl+MAA<H&AJݦMAARʁk&ACLAA7L&AŘ@MAA&A9ANAA4`&A `NAAxL&A*o"!NAAX>S~&ArMAA~ |&Au PAA8&A%bV5PAA]&AZ$pOAAUCԠ&AQ!ŎNAA1Ϙ&A)AOAA /k&A QAAY&A0u3QAA&Au PAA8&AVbzAAp^xѐ'A~ rsNAATKT'Ak#AAQ(Al=LqAA|=(AsAA,(f(A>ZAA,?#\'AVbzAAp^xѐ'ADy2@A*ߑA3Q@AoA"@A LANL@Ap@3A{4@AxbAUN@A"[AZQ@AgXA!:0U0@A8BAtiI@A#ݭӱA9@AAu @A 0Ax(@AؘXADy2@A*ߑAϱeBA-ԝAt gbeBA@gI.IA]D*bBAXї;A bBA+*AsP`BAlTAn'`BAjwA~J^`BA(3pA s2_BA jAZ__BA=!L\A.Y>_BA-UA^]BA XAZ0[BAxG SASN[BAXimTAÐ[BA@3#=gAGV\BAFmA1\BArA]BAh`uA _BAU<A";`BA(JA  cBAXߕAϱeBA-ԝAaMA- kBA#|<AndjBAXP?A zjBANKRAjBAu9TA2nhBAЎLDA>!.hBA^0A?fBAH: = A",gfBA %jAhh^}dBAx]A䙱d?_BA(kmAco<_BAhԧ~m_A9e02\BAΐ#A뀪\BAHNnW Av]IZBAʼA>8XBAX `IAg}q0XBA}A'zWBABwAkawWVBA2gAWYeUBA5]Aq1UBA8ݝFVAUBAؼ]LA>Q=VBA_FAM$^WBA_ruAA3'WBA 4:AIYBAHf b@AklYBAXT>A2HZBA|#?NAf*[BA``6HANmV^f[BAxJ%AbZBA. Au_3[BA+gtAqU[BAp]RAq_z[BA jAߣ([BA@XKqA9XBA aWUAEWBAP;AN6VBATaAL'VBAplA1ƈTBApuAaPTBAPFʐASBA`kMAvTTBAPA WUBA` yMAS`VBApj-`A6"[[BAjvQA'[BArzVA&&?J\BAYê ZA/"\BA-`A@i%\BA𤢮gAW'D]BAXhHwA`^BAА5AѲΐ^BAeGAt_BA338A81_BAIASO4`BAJ&rA>Ny`BAhR`ůA2_BAX6A B]BAXtMATy]BA&{A ^d]BAc3Ai]BA A$aBA8wA@EA&aBAzI,*A"2maBA8 OAAbBAP=~A abBAZ*A*#|cBAxRֵrA1cBA؂A<dBAKAzˉeBA* ߨAQUfBAS[AgBA$AewhBA=AWOiBAPAgR[hBABMA`t_gBA0 AeBATϰAo _"dBAk"AkbBAr%"hA bBA s4A=](bBAu 6$A!EbBAPADA=ϔaBAZAbBAqAcBA_}MA !3dBAP-CAeBA džA ndBAJ8uAadBAUgARŚGdBApi`A8LZBAâ4jA&}"XBA@/Q%wAg UBAA?}UBApVAxwUBA% rAwoDVBAФ}\A?ÇWBAnAGlXBAO@AςmZBA ?1xA [BA+SoA8LZBAâ4jA|uwzBAЉ+SAZ yBA. ; A&wBA AfxBA SA26 xBA]GBA̕{BA02O7kA zt|BA tZN,A7|BAfAA|BAA-/{BAuCA|uwzBAЉ+SA[~Fظn&XE8AKe*Al+:+Z+`+udt.A05Ax?|.A0VA~.AwAP.Ap~A w.Ap1A% ).ATSA2.AAQ'.A)hhAyAeo¤.A/uA*.A lA[.A0ˠA;ɰx.AAl.A0DAz.A 'A=CS.A,PAQ.AsAy*'Q.A|xA6ZR.A% LA {r.A82Ay| /A ohA/AM\EAz3s6U/Ap(1YAV'O/AApg/AAAJ*)/A@ =AC<(0/ApA$!>e/A3aAh) /ATW[A3)֩/APvyHA҅/ApXaGRCAo][|/Ap|vAAx'/ARAA8Y|^!/AVKAA0#(/ALTJAA_Vy[/APL3CAaPgY/A04ZDAw/A ODA8/A{ͦFA"/A GA|/ApruLAi<p/A (PA /A廓TA6=/A0t=aYAir/AP{=n_AK/AkIdAċ/A<gA0{/AXgjADD/A@{GlA.z/AdrlA[,/A@lAiv]/ApM`pKmA9./A5PqkA hl/A`~2jAKe;/A@&1nANF3/A HxsA'Xk/AryAAg)2/A?9A0/ATA/ANAe/A5fA)x/A@&ORA//Apd\Ao/A#fg|A w/A0ĕ?]Az;q/ArgAPo/AAXj0A}=KA-0A5p8AbxV80AcAd0A0G AYE 0A}S ApPu 0A@xOY A'L0AϿ A%Y0AA80A mAq0AYh A1 W_0A`"t@ Aحu 0A \FEA^8m50APlՠAp| 0AKA A 0AAɑ0A+A'0AcA0AAꐴ'0A)߸d'A0A8(1Ab0A`/1Ant0A`άP3A)/6/Ah6A0z/A\&;A# 0A ?AF.=0APܟCAU/A|DA&Qt/ASYCAO"x:/AY>AV/Ax =A`/A6BArOU/A0_OA4U/ATVA\tj/A`7]%dAhO}/A ~qAu/Ap\A{ᶸ/AnɋA7./Ap7LA8{}|/AAK&m/A<&A[i/A/ުA}C{/ApnAAs/A@夿AP6/A_A/APڨ[A/A0 fAjGq /Ag12AbʍR/A !]A0/A` 9AR#u/A PA߉;/A_xAU/A1GArY/+/AAޕD&/Ap7]Ar /ASADA}Za/ArA)[/A@$Aɕ9/A}AFO/A =fA D/AP9Awt/A`tݡA3+lN/A0\:]A ǧ/A`UA*89/A8A_.T/AARO/A"tAc7/A@ہ$AN3/ATAӟ|/AA8IE/A+%A6/Agk]0A/AA!y}/A*dAl-/ADA|/A` AL-//AA0AxKgAW=T0A p A 0A@GqAVIz90A)XAY0A%!AF00A?"A#N0AKj"AAb~0A)A@0A/A*Ǻ0ADA[\} 0AFFA% 0AVg'EA7c 0A7>g KA= 0Av:OAQy 0ATWA<G 0A@ 0fAE0AW{Av 0AkzLA_+ 0AI AMyle0A{JA!o+0AxkA}o0AQoA30A0A7&0APSOÆA$=0A2HA 0AqA̒0AeސA`%0AuA[_/0A@fZ][A0?H:0APA D0AE AO0AR!eA~sY0A٠A| c0Ap&y A(>n0AןfnA?x0A@ A 0A&A+`u0AU+wAߗ0Aph`PAyJ0AP@h'Ap?0Am_A&"0A@ή A@0APR^ A,0A`bQ Aܥ g0A`t A%0A V`mA"G0AZ`A00AHA ,1A m{A 1Ah$ *A 1A`A%1AA'?*1A@l@x41A_$@>1A@sE&@jI1Aܓ>@oS1A@ @la^1AR:@ h1A?-@r[s1A=@z}1A=3A@Z1A%p,@R_ے1A" @]1A>е@Ā1A<d1Apvsx8!`=1A0 _1Au"?>1A!?A1A=Y) ɴ1A &}ʴ1Ak?˴1AΣd1Ac1Eh 1AhTl#21A އq(&%`[1A[Hf }1AY5 1A`_ҵ1Ap&1A.I21AٿXIc1Aa1AI].ζ1A'`1AҾ>n8N1A:BFt2 @1A)GTS1A%^O_ܷ1A^Fkv 1A{"{181A:L?W1A_1&s1A%pg(y1Af#1A/Dأ'Ÿ1ADӸ1Ai&({_1A&<\ 1A̙&+1Aڙo@M 1ATwuq? 1Al`1AHe1At( 1AX[\V1A B~ײ1AAt*"1Ase~gޟ1AA`n" p1AdhFH1Af8VD?&1A %-1AF['`б1A4T\pG%1AJ+`1AI$p1ALW X1A߿91Ahzc 1AN$kA 1A])] 1AEC)0i1A75E?1A@8D_԰1A"@̰1A=WD1AldBMR1AoR 1AYm1Avh`L1A?5go, 1A'ni/ 1A#Ct-?n1Ai}*_i1A_كoj_1AK' ]1A3B1Afe_<1AĢ`/1Af+!1AId 1Q'1A[c>1A ?1A&Uu1AevP 1Ad^\+_1A#h;߯1Ao ү1Ap< :?̯1A;{! ů1A8b o?1Aad7𿷯1AT& !O1A4),j`1A/ s?1AA˨ 4ܿ1A!GCl,1AytGs-򟨯1ANM1A.@~Tߤ1A9rZ?1AW`L1A 1h-ࢯ1A~߮n" 1A v$য1An){Ɓ`1A>!Oe 1AK1A\K1A łr 1A",/i`1A ද1A”:F1Av̬ï1A6 ů1AY-ʯ1Ahg'ί1AIzoӯ1Adsد1A3O1A(N 1A% n1AJaE1A J1AKL#+V1A/ +1$1A}-5`)1AwnF`/1A]\K$=1A:Vc F1A0^/_O1A2}gZ1AYdoFnk1AO{"|Ss1A`O1A6(_1A 1Aaɱ!_1AQf 1A六1AQ`%ݟ1A):1Ay `İ1A)1&Ű1A%v`Ͱ1AƎӰ1A{@װ1AD'W$`1A( )&_1A=1A!1A) &1A`11Acg:`1A8D 1A{JN` 1AiW`1Add 1Aqkn~?1A\;z`t1ACI #1A>^A+1Aͤ7.1A[611AYXgG%41AM 51A֩?>1Ae%?F1ANn&H1A_?21AÉٰb1A` 1AE}?1A|M&@71Aei&fH'@1AE8"1A($>N 1AE  l1A{â l1AeHi®1AD l1A&̉B5h1AC81Aro3ꊰ1Ad@ 7P|1AZf*#51Awͮ1A"-qCD1A0Eac1AzJgsS1Adyœˆ1A9NBs1Ac!Rڑ51A^]Nc1AʦC+"a1A,6^1ADP='K1A-N؍1AKztM#]z1A26'r=1AN1AO![zZ1Aʞc㋈1Ap ְ1A3^Fӹ]`;1A5~\S%@m1AR,Y 1A: ^^} 1A.~6c1A_g6_1A\z11Ao9Uw1A]S#`1AFi1A뿖 ߟe1A,C濙1Apk1AbLp`1Adܟ"1A'Һ5% N1A dj1A!@%1A$1AiV 1A^$1A{a1A ۿ1Aբ]1AA*G `1Ac8?1A/P~O]1A>.d1A^xC $`1ATqؿ1AB%ɻ1Ak1A)-'N1AK ޴\tG1A'<@1A uj81A~5lr1Ac9җ1AfM"1A{u1A/?(ֽ1A•jCn1A ҫ\p<1ApY$ů1AH5z+ղ1A39>n1A+3ys1Aoķ1A ±N2A7rU92AA"ey n 2A@gKVQ 2AU$H2Aw2Ah24?2AR M2A,$e2AZ'$`v2A692A=9`2A桐?2AAQv 2A{v.Cb?2AL+_E/_2A@HR U2AO]lL &?u2A@Ncߔ2A/ O3#2A@R?Sfܟ2A% Wl:2Apz@]Y@S2A>4_Zߏ2A@=ܞw^v2A_m!2A@Gsg#2A/%2Ab``2+'2A ~ |y(2ANiBM*2A@l0>,2Ar1,8/2A$.,&u32A) Mڻ|72Aާ}̇;2A@#PسB|>2A@gzo&A2AP? A2Aa$B2A@z ň?C2A@C@F'c?D2A4ˁ+D2A&.A#@3E2A]1_E2A@65_#F2A2)W:0 dF2Ap =ם_G2A@;_CsG2A@"Ov蟙J2A@wv?J2Av!|[K2A@~([L2AE@OM2A1`B%M2AuMN2ARQGN2Aa{i؟uO2A]мw_O2A7?P2AZ[#P2APSA5Q2Am]Q2A;Q2AnSQ2Axu?PR2AƬ~dry?R2A$R2AJ3MR2A! S2A5 y@rS2Ad wS2A@r#@S2A~%_~T2A@$.H<ܟT2A@:A1p_LU2A@Su9ʽU2A-ޗ;`YV2A@0]vBxV2A@ qCu`X2A_`v6 X2A a ?Y2AHdKgAY2AeM?>%Y2A.÷icA[2A-;uw*]2A"}8_2A9#!%a2A:ľc2A"}Q %e2Aw|Ԭf2A~SGVh2AQ4Ѻ3i2A)c*j2Ay&dl2Aiۘo2A Qpp2A@ê2r2A@%zDB[)t2A!jrv2A@l Nqx2A@L9FqDNs{2AzJ=%~2A6 [k\J2AE=2AO8hU'N2A@#@ Q32A k1uk2A)y/.O+P2A M韊2A0es9 N͋2A,6ڸ2A #2A35k?#2A@-r2A^cO/ȓ2Au7!眕2A@x=N3֗2A@zW2AQ*p~d2AoYxin52A@mNp72A@ɝluҸ>2A +h>*2A^4:w_2AZ~AO2A L 2A@UZ;`2A@8i @v2Ax2@`Ѯ2A|٠4 @2Aܽ#2A;|_'2AaɒO2A 1z2AH2A!X_ȯ2A9K]2A=GT92ABBk|2A/ەk2l2A@ztHȃu2A@cQ޷˳2A@ RG2A870ao2AUZ=䪴2A}xEh2AO4$B:o]2A%E;vԵ2Aj~`<2AVt={LkH2AQ2A>C[2Af) 62A2RN2APep_2A7=#`92AIR02A_22A=>,!.2A=} l$`p2Aџk&2Af_ǽ@#2A@W?k2A4J4ࡻ2A >2A@8 N02A?M_{2A@1_*@ȼ2A@[~2Aʞq_Q2ANXWU_2Am2A^(2A@1.г ൿ2A9@;5  {2AA=#ۿ52ADe-2A@tGo 2Az>I?2AGN>_z2A ^Y>2A`]m2AY_fu(U2A@kT2A@L_p| 2An`uDW2A~_{?2A@2Ah"j 'z2Aˉ_2A@$`?L2A@֒2Axapnp% e2A@N?82Ad"Z`2ACE 2A=`<$2A@p2Aآ& 2A@z/2ARgaߥ2Ax6u=2A(!2A@v_b?/2AUy1d2A2A@n !2Ad?v2A 8eW&2Aw5? 2ADXE2AY2AJ@g 52A`w;`"2A@r5ߋGw2A}x$2A[J*2Az_&Ľ? 2A@-2Ae<5R2A<>"2A@``F}P#2AQcH#2A#Mh2A^]fn2A[iR2A-j;2A~SmIzDO2A@^OGc2AIF+2A@LP2AZ?P 2A@xU_2A]Z2A__2AcD2A@ohv2ADn_3ATGt,_3A>y`3AcO{ù 3A ''}91;3A  ,c3A@u=3A1G3AEM7:."3A]6N3A: |3A ^23AgY 3AAՒ53A@G.?c3AU?3A3YK3Amߝi_3AK?= 3AZĦ" 3A2‘[ 3A-Bܽ=x 3A`K@\ 3ACv 3A@ 53A\ 3A@&f+3A`}<3Al |xp3A?O3A?3B3Ap>&3Aց#3A@?,3AZZp3A 93A@Zs3_"3A~ߨ#%@3A ? 3A@gp>(9b3A@9`r3A@%>i.3A@jTh@3A@*ݍd!3A@a^_3A@$?3A>=3ADC3A@Ehw?3A@hW83A $`3A_ ;A?j3AWf3A@ 3A`g5Q3Ar>`3A@ i 3A; J>3A@ l3A@S3A@Gɳ 3Aə %,J3AࢂIE3AH|?b.`3A_Ã3A@_^Z ܿ3AjU)_俺3A.+<]@3A 4"AZ3AE`3AyJ 3A T`MSL3A`9`yQ"3An QT-3A`.(VC3A`O~,Y [3A@P\p3A`|`la߄3A d*3A u@Ui3A`Hkmj3A`D?pq!`3Ast3Alv@3A ^=z3A@m[}z3A_#{ 3A-6a3A`/q3AP&@3A͋Ҝ#@3A@ 3AqI3A տ 93A_”K@c3A` 3A ֿ EV꿷3A 3A@ !Zb%3Ax$ L3A .3AP@C@3A ~@`?3A. 8 3A_~ 3A` {k 3A૱ !3A7`!3A`Xi!3A@Z !3A .߿I"3A M⟚"3A`@& "3A)QR`#3Aލ/_X#3A,~Q˷_#3A@s@@$3A`F`h L$3A "$3A` A$3A`hL$3A`6"(%3A`\J`d%3A5N`I!0@%3AZ@&3Aa&3AX`,>_&3AT'3Aa' $ )'3A%;7 `8'3AI=n'3A@Jޟ (3A")pE۟(3A`R*)3Au@ )3AKASJ5)3AU p4*3A@ I]*3A@hR]*3A ~_8" F+3A` ,3A`7o ,3A `88-3AM^ -3A@Z! H.3A` 7C/3AQN_s/3A __/3A@Gm?K03A`@03AXIHC13A P!m @13A@m>23Ay> 23A`:_3B ,33A@ {& 33AW;?۾ _33A$Az 43ATgN353A(= At73A`f7YF83A!<ڿ;3A+L\<3AbaR>3A#!+|@3Ai\Ơ~C3A@G$ nC3A@$:?2_D3Au<uD3A-_E3AֿHF3A ݋7F3A@am eG3A-_H3A^WoH3A }>x'`$I3A j_!`I3A`$=f )J3ALJ3A K,AK3A^AK3A RVPL3A < foL3A m``pPM3AK,M3A k`fQJN3A^N3A a?%ePO3AsӾO3AP~r `P3A 2@FQ3A`F+Q3Ang?/R3A[6R3A%5?t&|S3Av?ǜ7y2T3A`1ٜJ^῟T3AcwWU3AZV3A kDzV3A@ 0W3ArډW3Aต?X3A ^˟]'`@Y3A$_nXY3AxZ3ARFߡ#I[3A6-@[3A`-"@_3AB B@[`3A@w@/߿`3AEp;?$a3A%_ҭa3Aiq$b3A_ oܿb3AbGu?c3A`$ c3A N?5d3A>ans\3A~s` 3A@$~ _s23AsU  3A`QsK*3A:su@V3A頟s|3AS_jsߥ3AK`GsDŽ3A[p`s4 3A@?rPݟ3A@?_r~ 23Aer`[3Ajrz3Ap?ri|뿝3A ^r !3A`ʿTr3A+_Tr3AHr73A3;=r%`_3A ;4Or 3A`Lr%@3A>Er3A`B =rG 3AT71r 03Ag_/rdY3A &7rA㟄3A@Cr3A`ٿ]rÇ3Acr-3A`@yr,8} 3AP~r3A~(uS-<ڌ3A@5ݢO3A7 16I/3A2./y1Ґ3AwOmb 3A`.-sb,3AXz3A`#UT5+3A KBPori3A`vҝN)3 3A`,3Mƴl3A,3MU3A@0$N~[.3A0$NG3AJ,Է3A`/9s@sHi3A;a3A]_:?3A@Nd?:E3AE:bz3As9`3A&_9aE3A Ua9#&3A@d 9W!/3A?8`=73AO8`?3A d>V8"K3A7B T3A ^7a`\3Az7d3AA7_t3A6#3A`}[6_3A'?q6$3A9763Ax!6`3A53AA59$3Av53AH53A 5% 3A@i>43A@43A 7U4`3A`@4 3A@[P3~l3A@@3H'3ARV3+53A3WA3A `2L3Aࡠ`2|`T3AM 2 ]3A^w e2Yd?e3A32 n3A`?? 2x3A@ 1@3A7߸13A1"3Aށr1xL߮3Ah>1?3A@7$1(3A ? 16ٿ3A 03A TZ`033A^ Z03A`):0ۿ3A 0d3A`/W!3Ag/&`.3A8_`/] @=3A@A./6jJ3A8/MX3A `.z"a3A.|!j3A@@.o3A~.s߄3AA3.)3A-W?3A -3AIx-xq3A w`0- 3A`{ ,Z@3AҾ_,Ҋ?3A`C, 3A@_?,{!3A_+_'3A$+ `93AK_~+A3AC`^+?S3A`p4+Y@f3A*{o3A p_*\3A A?p*mF_3Ay7*4 3A@`)a 3A )R3Ak q)U @3A`o^R)(t3A<_$)+=ߟ3A?( ' 3A@(3A (.d43A#(>3A@(LK3A؀'L?\3AH~'p3A?a'MK3Aӟ'.3A&&"3A8@&r3A`_l&i3Ah:&Y3A.?&w 3A`?&W3A%3A5#% 3A Ad%̩?3AB% d+3A J_ %J@3A 4$T3Aӗ $`3ARm$Q?l3A/?F$,@s3Ab:$mn%3Avf#,3A@gH#3A #L_3AV_m#"3AǾ_#&3A&9#c3Aӱ#ͯ3A" 3A߾"f`3A@y "K 3AB-!u"&3A "X"-3A`l_&"k;3A`e "fJ3A@_!%^3A!#`n3ATe ~!}3Aaa!ܟ3A7A>!Ɔ3A C`*!b `3A { !I@3A _ 俼3A@ j `3Ae@ )# 3An? 3AU} bR`3A@N`e EU@3AZ?? (W! 3A`$ %3AfE/3A=`=3A_F3A [U3A` `3A _rcm3A@^f{3AT@XD3A`P4"=3A`z0?3A`@`A @3Av>~3A` `3A@1Hݠ `3A@V_}3A 3A[N_3AFߖ_K`3A &`/_3A@]y|s3A 3_jA !3A\df $`03A` NAv=3A~G;BJ3AR`9>?S3A$0R%`3A`<?p3A[c_x3AOD_v3A6SL?3A!3A;:l3A@- p߱3A93A3A \_3A:?3A`[`X3A@S3AĊ]v`3A枞B&3A%?3A Itz )3A{|13A n =3AݒFL3Ay;@W3A@N} a3A q3A-߉]`3A |߈3AM[d3A``7`3A_~53Av8"?3A .~\} 3A _{q3A.3A`S#3Aoh3A`[6!e 3A@A_|! 3A{!3A@_R8_'3A4833Alw@3AxܟP3A'? @]3A@)`Q)n3Aյs3A*?ߑ3A f迚pH3A56?3A W)`3A`@ 3A@Q_3A”3A@`3A m3ASŸ3AR3A)3A {N?=3A@_uٿL3A ߾zv3A@ _`MR{3A[l3A`V:濓3AYlx3AU-3A%<M߳3Ag~7 3A`f3A W @3Aߕ?˄3AX@`3A`W Mh3A T `3A@g 3A@V`3A6?ǭ_3A?&3&3Azt13A``J@3ACtH"F3A`$r  U3Ar?V_r3Ac( W }3A@{4@3A3A`3A?3AI`3A5 Ɉ`3AtN3A`BS&o?3A~/ų3A  3A(5?3A@e3A0/@3Aj$`_3Ags"3A)Ad+3An7ǣ_53A %_ ?B3A`g|K3A_Y3A*vf_]3AX@g[$e3A@\_Go3A6O"nw3A2k 3Ahn3A.Ak3Ab :I 3A`M`3A ܼ3A`#`$@⿼3A@_xT 3Ao@Fq3A#I`3AJ_3A`_J E_3A Af3A3AH$`3Aꝟ_Q3Abf!3AP`/3A6 23AT:3ALU`u@3A` *H3A8O3AdX3A N]5E_3AkL ?h3A 4@- p3A˞|3Abb߆3A`6d3A`ހ߀3A/ 3A:ߨE3A\z߯3A`OC_3A}# 3Ai3A?c& 3A 4?3Aay%@3A@ХG>_3A+ҿ'?3A{L@3A 3A>ER`3A^_3A@4 3A`g8 b'3A`d_.3A/?43A6`T <3A`zH3A`PO`W%O3A`0|lڟT3A`Gw)\3A u%@b3A`OC=i3A] \s3A@ܢpD!`3A@)B}3A @3A F7 㿙3A 3A=Z ~ 3A`% w3A`g K@3A`mA ? 3Ae.!# u3A ?3A b8 3A@‖  3A@&j _3Arޞ> 9!`3A42 B3A10 &@3A? >3AB? z #3A> 9H_'3A`  03Az @B`93A@Qy ?G3A`eM c3A֢2 k'3A8!- \$3A`y_. 쿼3A`2 :3A@f3 % 3A/ Us3A`X4 ֶ<3Ar= d3A _aO  3A<X @3Ar_Z ޿3A^_N ͇3A#m @3A c l k3A  3A8 ?3A@ɀ 23A`( 0 _3Aw N*3AVg &@Z3A@J 8$`3A`-~X 2ߴ3A4.p 0 3A`5u ڿ 3AE@d &/;3An ?a3AF@z J3A7 +_3A7$ 3A_ %@3A a P?3A@L b83A`/7 d Q3AX 9 u3A$3A@H ,?3A>(Q3A@^S 3A@#3A 'C3Aq?e3A艀T>r3Ab3A@ 3A)@3A dP`K}D 3Ae` ]C-3AeH3A@ \l3Afv[3A_;&3A`n?i3A7?3AP3A0,3A@Fy`E3A @5d3A@ro}3Aӥ *l3A Q3A 3ALWQ#06_3A #)c3AL3?$.3AS$ _3An%N3A B%sh@3ALw%ɵ&3A_%`I3Av?% f_p3A`u&@$`3A.&*3A&&DB3A .&#`3A@0&Ʉ 3A|"&°ߟ.3A0&_I3A IH&l3A,Q&ߓ3A?&3A&$3ANj_& 3A &t 23A &Y3A_)'a @w3ABS'S_3A`yr'y3A3e'3A@#'t3A ?'C3A@K_( 3As(#3A`V9(=$C3AFi(nn3A@,A(y3A@J(3A`:);3ADp)3A -;)_!3A`?_):K>3A *^3Az7O* @3A (*q3A*f3A ++3A<_u+К3A9?+u?)3A +P3AE + y3A-A+ u{3A`+r3A` *+wP3A{+3A+ܟ3A +T)3A@:S +YL3A`"F+s3A+K3AY+_3A>?+23A0{ߚ+L4$@;3A`im`+f`W3A+__3A ++ h z3A`U+"ޟ3A };3AU@?hz3A??3A A;s@23A ]8U T3A ]߾C7`}3A*5[3AU>B4n?3A36E3A_1 ߎ3A@\0i3A]߀/ >3A!-`v3A} +3A`'}(gu?93A `?6& o3A`n$3A¾\#B(3A@'!i3A "a" B3A AH(_3A`v 3A n I8'3Az3AI83Ae`u#73A Zdܦ?f3A0; 3A \ #@3A J93Am?4G3A +ms 3A#ɠXs3A`>_v3A<ߙe$3A `cd3A``)ec`x3A N @%3A> ??R4Af= `4A':~?4A7?f4A`T_ 4A@) zI4Aֆ_f %4A[ 0 @z4A~ r4A ?> Q: 4A`D@<_4A@4A@@-$C4AQ`+C '!4An|%M:c&4AUw.-4A457 U84Av~ .+u@4A>@5/H4Ay,L?N4A_% V4A@o:7 Y4A`X-"]4A 5#9e^4A Ay$ B^4A@oC$+_4AnC$'@`4ANr#K`4A z"Ř`4A J s 7t4APgR@w4A`3 ][Uy4A(忝|4A Q4A@*|=4A`j*cP+vN4A9M!"0&ԋ4A )8qԗ4AlPe4A kZcc4A@/`r< 4A2_t72?4A E߶xլ4A`C֭4AK?ޖ`4AT\M4AU;%d4A<%a7t _4A ~sր$4Ada?? _)4Av44A cZ4A `4A謹lש4A R`4A`&?ip 4A,04A@j4A_ Z`}4A້_#4A89}eS4A@B[{W4Ag_A4A`?y@4Atu4A@ $4A` +`.4A :`4A`9!4A 4ATk [i4A@M4A~ 4A@<4H4AB6 4A?;$?74ALx$4A8J4A ޟ4A AYR.`z4A\`% >p4A`  9! H4A` jT 4A#4A`Q^GM4A t~!c /4AN8*?4A5{ X4Aߜ64A ~7``K4A.g`84X4A O-B:-84A@:ca4A@J;4Ab;?e4A ;@4A#@]<~4A`74?J=@4AQ=="4A3>|`4A~>w !`4A_|?4AA4AB4A@\ND4A`%F4A-_mH`4AKf O4A)N 4AtQM$4A-Sc`4A@'U%4A@I7V4AΦW{ 4A`^Z#4A M(\\\`(4A,!^9y?04Aa &4A`e`!` 4A`nuC4AwͿy?@4A_ {> 4A@+*4Ah 4A_4A@!4A$)a4A>dX`4AI"a]`4A+T~ 4A`T_4A4L 4A`b8ު+'4Aiݮ5 D4A~I?ݲp d4A@ֱӶ_4A _S4A@pn/4AB ? \4A_h4A` L<E4A{_d4AN^4A A4A'? r4A@ߠz 4AoV' 4A`;o4AS_4A$ 9 _4A@ H4A` ^0`|4A >4ADUjI4A@c`"?<4Ai%|4AQ+B 4A`A1?L4A`7u 14A ;K<0f4A *m?@4A_Bd4AGJ4AĞhK_4AEhM_44A@ jS7_4A`ޟTۄ#@5A/3V45AP=ZF!5A0 p_5A]`5AK?ka?J5A`b"5ANc6ڿ5A?e} /5A5^e $ n5A)_g 5AYliO_5AnHߵje 5AN[kX5A Nn$5A\p05ABdr}A5A@uS@H5A4v/?W5A`y! h5A\\{@5AT}Mߝ5A r^5A` T$ 5AC@5A k(@5A Lvcl 5A'' 5A B{N@ 5A `_< 5A Z 5A 8&ݟh 5A'ݘ 5A@QѾ 5At  5A@X< 5A ݠeK5A J@FrB5A``~@Ѱ%5AH)u5A@!H N[s&5A4o&5A`jb#'5Akv'5A`p!tQ 6(5A8( (5A>{c濽)5A``938*5A@B@*5AB_= +5A}`uD,5A٠I ?-5A ;?!k@F.5A͞!$e?.5A X,@S%J/5A`t"&/5A&K05A-'DL05A "']l05Ac'15A K7&}޿15Aa`Q&+?Y25AGӞ &J(?25Ap`%35A3@%n45A?%$3s55A%[%|Nz65A F^$ü@65A-a#}75A 73#t85A T!Z߅95A`=:5AF`:5AW_;5A^x_;5A`6y<5Ae`)ڟ<5AH #z @=5A?"![8>5A`B_v#?>5AX?$u ?5Ap%s?5A?&6b@5ASN'i⿚@5A _'" A5Ap(QA5A S`(k{% B5A`_I)*#`nB5A߿*EiB5AZ*[?C5A,U_C5A 8.?C5A@K@1۱_D5A`3W,E5A8^E5A&?>F5A`Z C_@G5AH= ڟI5A]A`$ I5Az&A^v `J5Ag]`# J5AftbmK5AcTK5A`?0dt(ߍK5APNd K5A y!d2 `L5A`W?eߟL5A e,M5A@`eM5A$e M5A e`M5A@ @7ej`?N5A/d#yN5A;c'N5AKcDN5A qZb!AO5AQ?a@}O5A% a}O5A*T`} O5A瞲_hP5AE_ _'T XP5A`/"^P5A EV ]P5A |_ \Q5AǾ[ MQ5A`` ZQ5A@L`XQ5AXvR5AޠVTy_8R5A83VvaR5AMzSb @ T5A@/Sl1?T5A``S,a?T5AZF$TT5A.uTd U5A TY 7U5A@+6UU5A#5@U=U5A@cV7m_ V5A`Eq@WdHV5AsWSV5A;[&Y! bW5A !C`ZW5AQ\4FX5A/2!^AX5A0A`u"Y5A ?b/rߐY5AԼ`eϞY5A@8쾄g `mZ5A 8jZ5Aob?BlW<[5A@nC`[5A:q\5A |sg \5Au\5A[?x &V]5A@Рz$~%`]5A" }2^5A``?9N^5Ai~mt^5A`j^5A b@^5AZ_ ^5A^i_5A{qG_5AU`n_5AE?_5AB__5A@- _5A@%!@`5A _@n5K`5A@PAq`5A@bߛ2q`5A ࣄ &@`5A3/]`5A ]@t -a5A>Oxa5A`a5AJ`Rb5A¿̂#@b5A>b5A@&Ȁ c5A|f~5.Re5A @yWU@+g5Av@tğ?i5AAofk5Ahl5A@)dQ@m5Ao@c|m5A@b6xm5ADan5A Gj`/Whn5A`qo_kn5A@=տ%^(n5A@ ?\& 1o5A@cX@o5Ae`To5A`7QOR!p5A_N%^p5AJʼ_p5A`߂Hp5A` q5Aէ@s9r5Aw⠾5E> Ir5A@f2Sr5A z>.r5A`-._s5A &)|_s5A*%s5A`?6"#Ns5A`o>+t5Ai?Nt5Afq}"ct5Am?xkt5AT_jt5A@U &_gt5A`n@J^X#dt5AJ7c{Yt5A?_ =hLt5A@H _>t5A%` A?1t5A@@| t5A"@t5Ah1?s5Ats5A@ >ߨs5Av\ex`s5A @_s5ATc?-s5Ayr5A-@6N`r5A~or5Ae r5A ߏq5A`A @%q5A y]矧p5A Ϟwp5A3 ?o5A7,kY n5A+9n5AVF?m5A@/l5A ?@دKrl5A}s<`l5A@)@k5A`3k5AF"@ j5A@``j5A8sj5A@ {zj5AAO_hj5A`@UYj5A?k^$@Jj5A -߀>U_Cj5A P=j5A`Eg=j5Aپ_6=Bj5A MMj5Ai?I? Zj5A:yjj5A # $yj5Aɀ@j5A*:j5Aj5A@o#j5A`R(+@k5A? :k5A~ {ak5Agk5At_a!`k5Ak5A~?ÂU ?(l5Aɢ`U^l5Aa!џl5A_QEl5A_Q:?m5ABՁ_Ym5A%@tm5A0*!'m5A`@1 m5A`*2 _>n5A@O*rn5A@|~fB_n5A`I ?n5A ů?o5Aaa_Jo5A.a`o5AM`o5A3ao5A)a!a p5A\~]Ep5A "@(qp5AgɁ__p5A_[Bk&p5ATۀp5A$-p5Av_w. q5A1!t~-!q5At}X?q5A#]_|Zq5A`B{"$zq5A zzA7"@q5Ay}#q5AKx|q5A bwC%$q5A;v/ q5A~Du9?r5A E s?r5A@`s r5A<^rږr5Ad [qq r5A9?p]q5Awp"q5A Y0o?.q5A1Avnq5A!mY q5A `SlX @|q5A`kč&@lq5A&k\_Wq5A`CjYGq5A~\i% 7q5ADJh)q5A):gG q5A`9f ` q5A*`dIp5A`VfcBp5A5/a p5A` ?_F`$9 p5A}_E?p5A^`p5AQ^dp5A]:3p5A`D] `o5AzW]o5Al]ao5A ^>\k`o5A 3\<ho5A@?\{Ro5AK[, >o5A[G(o5A IZo5A@X?Yk `o5A_Xn5A`#X_n5AzV꿽n5A?~T[_n5Ak$Sn5A@C`jR8cn5ATQP)?In5A ^Pn5A``BOӽ?m5A`ńQNe m5A@ ?oM6Zm5A L/Fm5AK m5A ;Kl5A`U!Jl5A`aJJBl5A `o Ik5A`Ik5AD@HH$ Xk5Anߠ5H& k5A >fG!dj5AయAFw j5A`hE&`Kj5A.`D?j5A ݨCi5AFAi5AR_q@1ߊi5A@r ?* ]i5A@#?N>ܟ0i5A`?<i?i5A`r;Vh5A`~9h5A!i8~@h5Ar6h5A`ߊ54h5A@ 2_h5Az61[rh5Am~H/=mh5A_-i'`h5Aq?+tWh5A@G&*.XLh5A@dO*,h5A@J (6#g5A@™'5g5Ak>%@g5A #`lg5A@Jp@#"֤Fg5A@/@ g5A@'>f5A iQC f5A k,f5A` c f5A_߅f5ASq rf5Atgf5A`i`v[f5A%d5A e#2ߙd5Amߞ?d5Ad5A`>{ d5A`:_d5AV-ed5A ɞGd5A@S @d5A@>JKd5A'[d5A-!1&@e5A@pL>e5AEq?ce5A4cܿe5A pe5A9"`e5A I}1?f5A  @;f5ANu 1l5As@l5Ah~ `l5A`Y垁)m5AiЀM?\m5A@;9Xgm5A#Zm5Av?Bc@n5A k~#Qn5A_yn5A@_7s`n5A&bn5An?u5o5A $oo5A`|o5A-}o5Axw`8p5Ap5AڸLp5A\B@p5A^~ f7q5AĂ.Bq5A3q5A`r$r5A`x*Clr5A@`}`r5A S $r5Ai_Y*6s5A ^ %ws5A`A7es5A`(AZs5A @c{5A 7뿒{5A>{5A٠_{5AC F?&|5A%M& U|5AKb||5Ao=߾|5A`lZ ؟|5A@{# 1}5A6̟:]}5A.tZ!}5A`~Bw}5A `uL~5Ak?~5A:Ѿ{ k5A@ˠ˿s" 5A`ՠـ5A33dg ؁5ANߵ5AYy*?x5A`W.5A@u@T5AC m5A O_5A@:MG#5A `kډ5A|@5A[5AT&5AV:ZjN5A'?}V@5A@:5A@ B5A G` ?̋5A| 5Ais 5A7 p_V5A0$ 5A N_tୌ5AOڌ5A\HN@5A@/O]5A"d-N"5A"J 5A`@!5AxM@m5A@@)&5A$?5A`@ B?(5A  l5A@qL5A`S_,_5A^n05A "n5Aa{ഐ5A 5A Rc!5A(`@5Apf=>s5A _dw5AZ2 ˑ5Ap؜`5A@Mm$5A`O5A `k@5Ad5AK``5A˾K15A`~/?d5A`k8Ө`5A JT_5Aؓ5Ax g5A6_?5A`V!75A@*qN5A |G p5AJCH_5A` ?5A$ +!͔5A`,f,5A tK 5Aw6`aʅ 5A[߅"?5A*SK1 05Am!5A`ξ`r@5AeB%)'ച5AaiD}@5AߪE`5A "G?5AJ8I9濝5Aw@J!_5AnLX[ڟ5A`L?N:ܿ5A}"Oê5AV]3Q#"`5A@%?R_5A` @{T5AR^Vݘ Ϛ5An`W;`ߚ5A;X5AY@D5A;Z; $5A[:![H5AT_ ]@l5A;{N^{?5AEf_75Ax?aٛ5A@"b5A`! d 5Ae$`05A`g<G5ABi@[5A%kh5A7=mz{5A0}oߌ5ANqpߦ5As5A`us@؜5A qw5A@@8y%_5A?a{5&5A_z|A5A?-~@\5A@K;|5A{_%1 5A@Xiߴ5A΃ӝ5A Mg?5A=~5A `95At `[5A`-]Eo5A^`p_~5A`a z #`5Atrc忴5Az#ʞ5Aan?5A#`Y5A<ė ݟ5A@^x55A U+A" K5A7cB@V5A``_5Ab5A`_`e5A `?`5A%4$T5A[Yݿ>5An%_|`5A@D> 5A `D5AuHԶ=Ҟ5A5E!5AH_غ5A@a@5A&&-{s5A7'll95A "5A Cf!5A`I`^l5AOk]5A ;55Ay1-3՚O5A`i՟,$+*5A!;xǾ5A=GM5A Tԥ5A@TabzM5A H^jp5A`E<%w/ߦ5A]M (5A1'>ɱq5A TG‘95A f45A g<05A4(\d5A4| ~5A Y䜫c5AJ6j( a5A+fٲ5A_+`5A`_pZ_5Ay]; 5Ap^,5A _ h5A ϧ5A@>a}S!5AΑ^>55A@u #D?5Ap S 5A<ˢ7DǾ5A`di15AdеE~5A[$1xaIJq5AO+5A~tF d5A`NE>_|i5AҘFǹA5A:kg j5AiXsl5AiHZq5A 5A(D45AáO@5A lUq5Aeww4k5A`t%Z5A@VSA+b5A@zP-_5A@߷-J=5A.5A q'/l 5AI 0CZ5A`U1 ?55A6`B35Al4Qj5A46Np5Ax8ļ5Aֳ49K5AC0A:1 `5AC3=5A+?5Aq)@P5A`?@ 5A`9aBRg5A>DM5A_Fv*5A&, I 5AGL/G_5A rNn>5A@KPQG5A`SQ!5APR5ATrw 5A@Y Və5AV#YR5AV[s5A@t]`5A@%`_p5A"@da05A@eTGc@5A'O `eY>5A}@f 5A`hSJ5A!j h5Ak X"@5AAlg5Ann?5A5o?]5A@'ߞpe⟦5AT q) `5A@?rJ"5A*`ls35A`it@v5AƑu 5A؋^w55A 4 xU5AߎyU5Acރ{_5Am|,%5A*?\}?55A _}Vj5A@Mj_~"ߨ5A`/b@5A1@Ob=5A?U_ 5A@d-q"@5A6(65A*_'t 5A :_5A‰ 5AV 5A!}{Z5A`qJg5A]ȍ]=5A5.?8u'@25A@Ιv8ݿt5A=5AD`=5A* =0#5A)?rf5A\> 5A7Ῐ5AD5Aeq$5A??B5Ag3 k5A uU5AxoWA5A5A@,i 5A^æqE35A |-%&J5Ag_! X5Az&{nbߠ5A`_PI 5AW Hʕ*5A° Z5A`GB9$5A&5A`4^ ޟ5A@$45A)?նB?x5A@d-`ܷD5A@Pd5AQ@m%& %5AL]5A1e5A @_,ݐ5A-^_ 5A+!):5?F5A`?Mx5AlRq5AoT5Ae5Ak  5A+?N5A4h@t5A`xPt5A W 5A DͿ#5A\),m?5A@ R5A^&* @5A /5A1K5ARh@5A`*>tj@HӞ5A4o-!l%ɉ5Ao$32$l5A*HF,5AxM\5#5A`%iB;i5A@XzR'5AYH0-35AOR`5Aە5HE5Ao-5A=M8ȭ5A^[5A}V`5A rߖ 5A^,Kg>5A_5A஬@s5A,. @j6A7$ %6A@?6A9>`6A۞ ]6A=0o 6A`'_ 6A`xs 6At-O? 6Ay& 6A _k2 6A`[! 6Aj__ 6A`X-` 6Ai<7Q6A ߱6A03lF6A@$E6A~@: ,6A``x6AC#@6A`DɔO6A\T.= 6A @l6A Au'6A F?Ľ„x6A16Ax~v 6AKzM6Aa13b6A $G6A@ {w6A E{ 6A-?X6A,0?L6An 9?6A!?)6A@t߈!`B6A@6A4-@Օ6A z߁;#@a6A ~6A`:ٞ^U6A D`za6A T`gV`k6Ai,6A>&@l6A @,6A 6Aa?A@ 6Ak{ 6A@.TWYN!6A`T8G!6AM?Xc)"6A>"6A@0#6A` `$6A`X4r;%6A$Em&6A`࿎'6A@;#Z(6AXԠ(6A *2I)6A`V*6A/#+6Aw]`+6A`;?^y_v,6A@$`-6A mZ?-6A~Y/M.6A` ?0s,.6A@96AAx96A'm :6A ;6A@|09z=6Ao'"Pd=6A@ˁ "ܟ{>6A@!#ߵ#>6As @$) `?6Al@$"`B@6A %X_@6A`]&K؟A6AtU *&zMB6An\r&2C6A`&m@C6A %yAD6AF˾$`E6Aо$#[?F6A @ G6AO?M\@G6AoW"@H6A?&wڟK6Ax%ܿL6Al /qM6AAiܟN6A~ Pi_O6A@0!l _P6A >01@Q6A B$R6AP _R6A^*yS6AA?&ɳT6AGqT6AL  T6A@w=_HT6A@"UU6A3 w@U6Au/aE\'V6A`?jV6Aө8V6AW6A@ pݽ]W6An?W6Ax m3RX6A_?iX6A`h`X6Al/Y6Ae ?Y6A W#Z6ArPZ6AŽBZ6A\In [6A6#-p[6A '`[6A`dYI(\6A~ _\6A /h*p_M^6A`m&W ^6Abpj_6AS `6AրQh n`6A? ``6A@_FTa6A .9鿶b6A[B 1c6A1c6A 2n"d6A  td6At2Aڻ?d6AY{d6A,9¡@e6A:bp]e6A`.D`qe6A`>S8 we6Ar?`qe6Aോ xkSe6A ߴb6A(ib6A a}$:Zb6AS"`b6A@G?t`b6A3X_b6A`b6A៚@Cc6Avy!@c6Ao&c6A@ Cd6A> _d6AdF e6Aމ?pfe6A R+ e6A@1q,)f6A@;*f6A܀!f6A^y_g6A`h6AqAqh6A;!-_ i6A_i6A@V?-k6AyG @&l6A势΍@m6AjF an6ATn6A?f`-GIo6A@Jo6A`at{6Tp6A# p6A--=q6AA?&Zr6A@ `r6Ar@s6A"a,1t6A`Y-!@t6A`orZju6A]D(v6AAMG`w6A 32Ahey6A,`."@y6A@oJkz6A lz6AћҌ6A?@,Ir6A0q1@6A ׼_76A@ ~a6A.R߳h6A`Sp6A\_w6A\i}6A%6A/\ 6A.R߳6A@W&6A J_ݭ_6A`~V]+ߨ6Aޞ@௦6A`o`N쟷6A@m&`6A@iŦ6A`ι˦6A~Vb`Ӧ6A0M߰6[?ۦ6A-W߶16A@v6A  6A O6A`,`֗6A/M߰=6A$?"S 6Ab6A 6A}[VD!6AZ@ @)6A*a/6A " 76Aߺ`>6A`lԈ_E6A1?L6AZ@S6A IZ6A`&aa6A๝^e `h6Ao6A@1w6A V~6A F 6Aq6A H56AE6A@6A'ux񿨧6A`#%aV_6A5\6Av6A /"Ƨ6A 4V_̧6AU ԧ6A_@ڧ6A svF6A6A16A~֠$ 6A@^6A*_6AsV 6A q6A`c 6A@= _!6Aq7(6A@_$@06A |* 76AKK@V_>6A"!D6A@i@L6A ! T6A V_Z6A@\a6A jRh6A`Wuo6Aw6A{?~6A6A`f2L'_6A`T<`6AE6A u6A` sN6A 6A_7! @6A NO߽6A._Ũ6Al0tB̨6A`J`Ө6A ˿Q٨6A`h36Ar!9I6A`6_"6A9)6Ax?'6A. 6AD`/ 6A)4[?6A 4Q6A<N`!6A S8w)6A`Aa8/6A A76A G=6A@E&E6A"Kl)K6A[NS6A+@J Z6A S9!b6AdX5?h6A6Wmo6A _w6A^P_}6A] @6A tv`cߋ6A R la$6Ak6A1At 6A_p;?6A]y.鿯6A^_@u.`6A`<~X6A ߮6Av6A~  6Al@ɿê6A@J1˪6A@H;'C @Ҫ6A ;_#٪6A"m#6AQ+,6A +`4 6A@q`0%?6AN 96AL ?l6A8?A@ 6AC6A L-46AǠR 6AgTi(6AVcZ.6A3c 66A _<6A`_hC6ASq*\@K6A]w Q6A lu_Y6AZ{E`6AGG_g6A`K"n6A#_ft6Aÿ? |6A`1C_6A`n6A F_i='6AQ'K6A? 6A`.6Ai_(D"6Ac Fr_6AAL 6A«6A V? ʫ6A`?!A?ѫ6A ׫6A j߫6A  _b6A VQ6AD&i6A@">; 6A@< iܿ6A_ 6A`ۺ?6A` @*6Aާ_6A w6&6A Uۿ!)[",6A2*146A U_0''96A2@A6Ay @G6AWQHN6A 5Qe`V6A3W# ]6A_`c6AIi(j6AxE_q6A?2@y6A{`6AUb6A `6A@ϞYߔ6A b76A,T࣬6A6`6A@6A}&翷6AZ0{6A@I@Ƭ6A@'_̬6A`??e_Ԭ6A@P@!۬6A 6A _&6A$d@6AkIq6AY_ 6AG>G%`6A`aâ% 6Ai6A#B`6A)Z!6A72(6A@; 06ALd_7=66A) @Z>6AED6A@H> L6AN<|_S6A)SZ6A S}7a6An?[T!i6A]ao6A `zw6A f^~6A@Lh6A VnI6AIm_g6A 8_s 6Am|6AU6A?TD6A JsSڟL6Ai)R6A`VoZ6A]>a6A`?B%i6A? @p6A@`!`w6Aly+~6Aڥ@`6AMx_6A|6Az6A_v㟡6Au 6A R C6A`߇?!ථ6A 2_6_߽6A$!`Ů6A`#?7Z̮6A`老U Ӯ6A`tyݝ ڮ6A`&?yY6Ai@uV6A.u?6Akd6A;_jv6A )*i@6A _V? 6A_6A\6A`2@T6_!6A`)S (6A cOq:06AT`H5`66A @GU=6A`fFuD6AY=S9K6A)9?S6A^/$Z6ANU_.Sa6A B?%28 g6A`'o6A` @v6A_9}6A`6Ax$! ݟ6Alq6Ags6Ab^忠6APbߧ6A@P@V!6A f 6Ai^ _6A)7Tį6A%av˯6A@@`ү6A;ٯ6AƑUI6A8P_&& 6A `6A@0>u # 6AA#_Sx6A%Ս 6AI_| 6A_x6A`r06Ag 6A!]&6A^U(_-6A@M?KO46A;@D?;6Af:B6A U_0qI6A%-mP6A`> ?W6A` U \6A@ޫ?+_c6A?Lj6A؀hr6AClx6A@P@ 66A XG߆6A5俍6A` %6A<6A}/a*#6Ap6A`m`6Ai_s@6AE8.࿰6A`.?. Ű6A2Ͱ6AH)3%԰6AW ܰ6A``%6A୨`6A\EMA6A<_&_6A `T<6A6A@ + 6A@Dž 6A#6A Z6"`"6A`c'*)6A_T_16A_N86A?6Ap G6A@$SO+M6A*1 `T6A1.!v[6A$L#@b6A`i"j6A@q6A 3=w6A)6A_ @6ArŞ6A ߔ6A i("ߛ6A 6A=ۿe6A@  "@6A fޟ6A|f`6Ak螯ű6AH)!ͱ6A6%_Ա6A۱6A`oG 6A@@?6AV6A,@6A=`I 6A+5x6A g 6A_I36A A6A U@ `"6Aj )6A`"06ANt?76A,_ @>6AF8!_F6A 5 L6A#>S6AV,L?[6A`2* a6A`a7 h6A戀Jo6A b`SC@v6A \)}6Am^6A@_g矋6A9 zr󿒲6Al~C6A`UD V𿠲6A3>_6A `'I"ல6A@CߤD6AkT6A @Zò6A Ƞ@ʲ6A l` Ҳ6A`A@Ȼز6A`߲6A7b6Aܾ| 6A wݿ6AT7_6A@^/ڿ6A@a> 6AM&`6A^Vp6A@,?g6Aty_$6A$?$`+6A`l?26A`Z ?@96A@ğ b'@6A.z{?F6A`!@M6AC?T6A1T[6AK_ٟa6A^h6A Do6A. !_v6AEz=}6AV߃6A`_B6ACmzW 6A]__6Au  `6A!.?6Ae7! 6AFc`; 6A! C๳6A(t@I6A@S,dz6A7__γ6A 1@Գ6AKC>h۳6Aj \"6Am 6A.I }I 6Aֿo?6A`*d%#6AX6Aoi@ 6AJ0 A6A@T@6A@ 6A@F@)a#6A Y`E6 *6A' V_06A_: r76AV@P&>6AQ C6A klߴyDJ6A 3~9Q6A4_X6A %@8N^6Ae6AC4,!k6Az+aB_q6Adw6A\u&}6A@ ⟄6Az |!6A)@-_6AkH6Ay1?6A @|/?6A —+9m6A%FZ36A 0b6Azu?6A@_w;ô6A83ʴ6Ay?д6A7ִ6A|U ۴6Aҿ@t#6A~>1 6A@ZW'ܟ6A`I uV6A 8_v?6A a\ 6A y@6A@/ڀ 6A\6Ai'6AB?`6A@"`m%6A@w+?+6A%`i16A76Ae>6A`)T _C6A ?`I6A9`O6A@^Rw?U6A Jv6[6A`u?a6A-}hf6A@! Vl6A +!Wls6A`Q_!x6A25@~6A6 Y6A`!vY5 6AᒠS6AeAW16A_6AE?6A "{ 6A`FSb6A?e66A3u6A` ?6A@ zõ6A@iȵ6A``X͵6A~:ӵ6Ab^_ص6A ט@z@޵6A@2(6A@^^%6A _Q6Ax _6A`m_1 @6A`dX66A@~sE6A@v& 6AAlz?6A!86A`"?n `6A ^?826A{?_$6Ap?1 )6Ab@ _/6AVX@246AI@96A=@0>6A`! @`D6A>d_I6A6fU N6A)`S6AW$X6A$ I]6AG~,lgb6A@wZ"`g6AZ_m6A|@0:r6A `  w6ASRg{6AF#`6A)J{ 6A@/pi?6A@?v_P6A 6A6A@7d6ACr?6Ajߧ6A`-C`6AO@m?6A Z S 6A6A@;tQ?6AmMY6A 8hr!Ŷ6A ,˶6A``Ѷ6A`r9׶6A`ۮoݶ6A -V6A@K?n|6AcR6A 6A`i6 6A?@6A пF6A A 6A}6l?6A[q!@6Au6A@ _ 6A@7#%6A`д?P>+6A?,16A a`$b `76A@`H <6AseIoB6A9`* H6AꪀM6A)`S6A D?Y6A (^6A:C!@d6A@0^Zi6A |lo6A u6A`:AL{6A:_ @6A2-1 6A (0/6A@ _O}6A\=im&@6A@`(b6A D6A{ߧ6A`߮6A'z`6A* 6n6AX(6A 7MuE<ߟ*6A`l~6Ao@+ `;6A / ÿ6Ai,6AH`7,@?6AV>a6A`` O5'`o6A>^6A`zZ56A#`]Gx?&6A A^M6A3a? j6Aa6A*b6A#d `6A`zt 6A 2sw6A=_qT?6Ai06A_'h6Aë]uB_6A]؏$@6A^Z6A@R| #6A-Q+6AiPվ26AFU<@:6A@@Euj@6A@{<_H6AM7N6A@g0X$U6A`3(R?]6A`$Fc6Ay Ӵ?k6AIS2r6A`9`y6A@΋@u_6A@ 6A 8 6Ad 6A,6A+A7*"6A@{޾6A`6@ӾuM `6A@~Ҿ{6A` ɾT!?6A~Oؿ6A~6A`?0R% 6A]T6Ao信5" 6A `?6Ae6A`߄26A{,6A }zUB6AÀi 6A@+Ah% 6A e\6A@ՠTT!@"6AJ*Lk7_)6AA$06A"h_7R?76A 34.2>6A&E'`E6A@^ѳL6A@Q s)$`S6A@%>3Z6A Ӭ!a6A 9 h6Ao6A׽/v6AՇƽ;}6AIA໽y 6A@K7ൽPW6Ao6A@? 6Aw` @6AK>6A ;} 短6A`'la`6A` 6AZ6A`Z?QK6A@1F?6A5&`6A@y`%6A`qP6A@AKx6A` `6A yh@?6A6AA Aټ 6AiǼ*6A<6A%`6A0n'#6A ٗ,<*6A> 16Ad¾v86A`en]`?6A4\h+_F6A`UJx@M6A@~9S6A8@0nZ6A`mO a6A _ hh6A=!@o6A[ ?v6A޻O!@}6AIͻg_6A`»EU忊6Aj 6A`?8⿘6A &6A!kߥ6A`k)6A@>6@Z/6A!Hm6A@v?gs `6A ?.cA_6A@9J6A'! #ݟ6A`26A`#J@6Aw5պn6AƺD6Arȹ6A`oW! 6A n]]6A 6A g*6AWU?6AzF|$6A `1J&6Ah -6AU 46A` ;6AT%2A6AM_ҹG6A!s¹#O6A`I?jU6A@i[6Apdb6Ajti6Ac2 `p6A@aHv6AO8}6A@@'?6A  蟊6Ap!c_6AA`6A Ҹ3% 6A3`@6Am৸?6A`.-ܿ6Aທ`{6Ab@kDA 6A#aPB6A?"6A@7("6A`P_6A- 6A`:@T?6AQ ѷ6A i@6A 7ߧc6A'!"6A>*Av6AHaaO 6AO9IM 6A0c!6A ,!F"6A4C(6A=/6A`J?նdS46A`2<6A@?B6A l?H6Asy!O6A4^U6A F[6A`)@-,b6A@A` i6A*# @o6AAnv6A@aҵ= |6A`@a߂6Ab_6A@46A`z_j6AR 6A8_6A`# e 6A 6A O9?6Akp_дŇ#6A`e?}6A }_{6A@"Ĺ?6A :k6A#wP{]6A`;8?6A`X>?16A ?6A `6Aoͳ6AJ[Y`6AԾ_6A跀y} 6A cb#_6A,R_A#6AD_)[_!6A.d\_'6Ad ,6A ز36A@A96A`q^M?6A?@F6A c>QL6AۗHzwR6A>( X6A`>_`^6A[d6Ao_ֱ^w_k6A෱޿p6A`Q~kv6A`+$A|6Aخ]~76A@E]?6AI@%6Aa6A`,1a_6A̰_6APf6A9k@I6A~o䟳6A~Z#`6A`V?:6A 0`A6A`49h6A@F<`֯W.6A࿯{6A6X*6A} 6A@x\[#`6AY={6A&6A6A@@6A@`G_Į6A`6A@K46AwF6Aa`19^6A`8aE;?6A,ȡ3(O6AT6ASB%{6A*6A=/46A2͌6AI~^) 6Ac|0bk6Av O6A@{dv+6Aq xOF6ASDtp6A`x\oF7H6AZ+gi-^5_I6A` c"?6A_Sc6A gS}6A|S6AKS)$6A`J2S 6A_R c6A R#@6A'pRA6A^9R 6A`4R @6AHQ6A*Q? 6A VQ~ 6A?&Qm 6ALTPB`6AP6AQ1_P;_6A`E@GPD#6ARPj6ACO9%6A@:O[6A_kOXQ6A`ɑ7O޿6A ,_N? 6ANC!6A`Nb$6A +[N= %6A$N#(6AM% )6AM ?+6A1!|M,6A_EM/6A@@ Mr?06AOL16A??L`46AЧoL|66A #@4L" 76ALC&`96A@Gd?Kڟ;6Ax K<6AWKV?>6AU KZ@6AMjJA6A`~J!@C6A@SGyJaC E6A[`AJ#"F6A Jj @H6A_I)J6A@x@IK6AdI޿M6A,IN6A n{@H'P6A2H~R6AHS6AlOHaU6AH%"V6A@GX6Az^G,`Z6A.ƾqGb [6A=ߊ6A@T`?`46A@T? 6A db?@6AH-?E;ߐ6A`*>R6A%?>d26A@m >#r6AM>B뿔6AP>_6AS0a=$6A`=%@6A ~i=_6A{?4=[h6A<'޿6A/b<Vg6A@5ľ<~6A R<^6A X <v6AV͠;6A `;\6A@Ln; 6A{9;@6A_@;`6A:$6Ad:% 6A@Z:E3'6A :`6A W?9z6A=9Z6Al"A}9?6A`r >9;j_6A@39I6A8?6A _8;i_6A@{_8`6A)8} 6A@*7!@6A@`7`6Ay?7e 6A A7" 6A 7? 6A` 6~ `6A6\^ 6Amc6>6A"_.6n?6A @5M_6Ai5\-6AvM5m?6A{E5L_6A `5b6A?46A`4@6ADf46A*4E6AZ?36Ah?36An߀36A݅K3J_6Aҷ_3`*6AB 2y#`6Au`2 @6A@e26AjO12y6A #1_6AOc16A@s41@6ADL16Ag}?1ܟ6AG/`06A 06A`/)6A` /6A@AO/6A/'6A.S_.A^`6A Q).=6A` @m.[6A?0.n6A&$-M?6A`-6A :@-^%6AK- ! 6ATU ;-|6A;,h 6A:$=W6A&a $e 6A`#6A[#\ܿ 6A\%r#j 6Am?# 6A #_6Alg "|6A} "_ܟ6Aa?"u6A`Όs"_,6A`_G@!06A`v!@36AC!ĕ `66A`1! :6A]  =6A 2?6A`0{ 1B6AG  E6Aus_  H6A!?K6A D N6ApP6AV>{ S6A U6A_`6A_6Av@?6A`&ް6A`u]6A@6A`?6A?ޮ6A@ |6A@^3b 6As)D_6A ~6Ad"ޫ6A@C3ߡ6A_Qf!6AՓq6A 89A 6Aߩ6A mv6A`->]6A=_6A~d%!6A枙%6A@_k6A9;ߺ6A&D*6AEy6A`ݿ 6AXab%6A`:h&n6A:_6A 6A ;ߑ?6AM@X36An#2 6A BY_6A@. @X_6A>i Y6A P\  6A7( "]?6A. 7$_6A? C6A` a6A@Z p"@6A' o'@6A7 _6A@b ^6A  d6A"c $S$@6A`_/ ܿ6A ` 6A A4@ 7@6A `6A@p _E6AKD  6A)_ @6A "6A@j >H&6A|  ?*6A ~U e.6A& ;_36A!76A@i;6AJ._}?6A`& mNC6A$=?H6AdÿL6A@ұ@P6A@0?A&T6AoߟY6A`d}^6AZ 5$#b6A| [?g6A6yl6A,`{p6A ??u6ASXw]z6Aߊ3~6A=D  %6A@6A8`V_6Aĵ}ߑ6APw`d?_6A5<_6Aݾ @6AA?6AtcU6A@,`6A r=_6A@L?6A' 6A&\6A# 6A@ޞ_ 6A ]>;6A & b @6A\8[|6A%j_6A"A`6A '}_&6A nڿ6AC 6A95bbA#6A aB6A/b# 6AS; 6A`(@y:6A-]p6A_f& #6Aɀ~)6A!LR׺/6AE_49A46A.!8_:6A L#A6A`?G6AYL6A$@7 R6A)z_X6A_Zy_6A`??[ae6A ^k6A@_U#p6A`K_w6A y!}6A6_|6A@瀔;]`6A@X|; 6A B]`a{ 6A2B远6A Ğ*6A:#`6AUQ6A s6A`$?6Ad2_6A%q@6Az\$@6A hU6AoS76A .K!ٿ6A@: 6Ac, @6A2!%Q6A@?/"6A`* 6A 6 6A ;_y@6A`R`G?6A&\4'!6A@'6AO6_Yh.6A`4}66A`?<6A[!@C6AtUJ6A`Aj5_Q6A`tX`X6A `Gp^6A`4xe6A@O"Tl6A@!;7*r6A(2y6A _E'6AawK6AaR"6A.u76A` 3ߛ6AѾ ۿ6A@_忨6A X(l 6A`@[t6A`4J쿼6A3pݟ6A`6A ?6A6A@_6A@q6Au 6Ah@T 6A@'G6AuL6A@dJ6AUVJ` 6A mc2u 6A_޿6A#' ߺ7A6oRͬA7A` LwL7A`+TE~T7A@JUevU7A ٨~tPl\17Ag7A`hL@)7APyt"7A@#͖7A 4W@7A»7A@zٺrΞ27A`0]{»7A`,Ku$7A@|^*:K7AOzI7AA(,7A VWB+$C@7A@9ng7A\fƦL/ 7AgY 7A` ɦ  7A&@s 7A@b&_r  7A xˉp_h 7A`ir@ 7A`V^m\߾ 7A`m] 7A`U0 7A`@6N@t 7Aj@GU 7AK Es 7A@I@20 7A"uU;ٿ 7A%`h7o@ 7A@_3Ʉڟt 7AhB/@ 7At~+& 7A@u'7A`%` 7A >@%7A +0:/7Aໟ ?7A%!L\7AG_7Ai. ?7A1MR|*7A?T[7A!P7A x7A`mB7A+ʠGo 7A@AQ7A_a{e7A0+;7AAp}%87A@y;? 7A@_1Wj!7A1. nez#7A:ZA;`$7A``>F%7A`[Y|b &7A+&7A@El [8'7A81(7A E9(7A`iR')7AySK)7A _q)7A` q#%@)7A ?}_*7A`_ AOB c*7A񿖩V_*7A/+7A@q\#Cq+7At(3_+7AA@m,7A ` b,7A࿓_,7A@ -7A2m-7AXr?-7A`{a,.7A 7.7A{#V/7A`b9` x/7Axt; 07A .pT(ܿ17A9j_17Aޞe 17A[` 27A BY@27A WLu37AOg47Ay%G) 57A"B d 57A ]@ >% 567A`867AN~_*4$] k77A 2`/7?+87A U )} 87A"%g 97A["`=7A`0=7A`eM_RA7A 9n B7A!U C7AppC7A@ ZC7Ahy?C7A CLC7A@;Pr C7Aߓ"忥C7A@]{ →C7AaLC7A@/?l$ꟸC7A Ҿ'@C7A=@C7A %F_C7AQNC7AI3J?C7A"OC7AsC7A(c0!C7A`cAmJC7A@C7A  `C7AC`ߟD7A`_D7A@!_ D7A!AWD7AB?o)_D7A@`߿ND7A*z,+I$D7A@e+D7ANu1D7A@yy kk6D7A`2 HcD7A iD7A`)wjnD7ARtD7A p0 yD7A ~ {D7AƗ0D7AC$hX$ D7AnFD7A`_{ @D7AQm# D7A2`+AD7A@.?D7A dD7A@gD7A@G D7A@p D7AG߿D7A(5D7A` %D7A>D7A/_D7A߃D7A9?^OMD7Aԫ`5MKD7Abh i$`D7A?@?D7A[ǖD7A` \D7Ae~sܿD7AbJE7A}$E7A D E7A7_E7A> E7AN@?E7A``Z!E7A@!5L>&E7AϠ_+E7AY?0E7A,`5E7A:E7A{)`lG>E7A`FƄCE7A`Vo`& `HE7A`,`NE7Aa?@SE7AD>#WE7A@,tL\E7AUNE`E7A` eE7A G0jE7A`I.pE7A~K@uE7A h{ wE7A`2Ogz{E7A8"߀E7A_`뿅E7AzE7A?fTE7AU2bR E7A?o"aߙE7A_{I࿞E7A#?E7A +?E7AHgE7A5^8E7A@ $E7ALWE߿E7Aڵ_/?E7AW@nE7A j8E7A2$_E7A/ U#E7A=ўf+ܟE7AAE7A`a)"E7A#`E7A;E7AJ "E7A %h߃ڟE7A >^F7Ak+5?F7A C  F7AutiF7A`/߀ňF7A<&F7A *{_ F7ATS%F7AR@4'r*F7A }ޟ0F7A+g"5F7A 2AT;F7A3S?s@F7AߞuH%GF7ASKF7A<.}QF7APٟ  _VF7Ae(_\F7AZ"DaF7A_B hF7A mF7AkUݢsF7A`R :!a_xF7A1e}F7AGU F7A@j@ٿF7A`3~šF7A`F7AVa[NF7ACB&F7A ^`"jF7AV`hF7A`>@F7Aq޸ _F7A+FF7A# {CIF7AP @F7A5F7Aw3F7AAj)F7A ?F7Aդ%$F7A7aF7Aֿs'`F7AqQH'F7A1/BF7A a ~@G7A`p G7A`,ހG7A .G7Aɟ>G7A MinG7A@L%G7A 6v ,G7A|%?1G7A`4ڿ7G7As@ֿ9@>G7A@ߺ&#CG7A@D` IG7A~OG7A`R cFY'VG7Am A?\G7A` C? aG7ArO _gG7A`?G7Ao?>G7A" G7A`4@ G7A`>]G7A!Ҽ_G7A4G7A 9=7!G7AٞG7A6`oG7A SYa H7A` ;_ H7A S:`z?H7A >cH7A%@H7AY.ϻ>/#H7A`7)H7A ҟ@/H7A?&`y4H7A`\v_;H7AfW #AH7A\_<<HH7A?%x?NH7Aڿ_&SH7A g>=YH7AO̺?!`H7A)bfH7A@~?lH7A`k\x&`sH7A !]YzH7AzEx@H7A`3%y@H7A@@ZuH7A`9>w?H7Am չ7yH7A'韝H7AĻ] H7AJ7!zH7A[)H7A?zH7A 矼H7A`%H7A_I?H7A@u`ƸH7AQMH7Ah@C@H7A@>m;jH7A>vL`H7A@'.nH7A QH7A N_H7A`vԷY( H7A__I7A``>, I7A?zI7A`<) [`I7A  9 I7A`e_"I7A6['I7A!׶-I7A bT4I7A ,t}?9I7Aw>I7A/`W|y@EI7A`#a5[KI7API7AnSWI7A@H#յ\I7AEpaI7Av?hI7A`w5nI7AUђ۟sI7AM{_6֐yI7A7 ?I7A`%_`I7A?@δ_I7AE`I7AV`xi I7A ZI7A " +݅I7A Z$ I7A@?`J7A`u${@J7AٱJ7AR/J7AJ7A tך&J7AMt`U?&J7AE@=.,J7AK!3J7A@ο9J7A@3AJ7A`M HJ7A &NJ7A@u_ݰUJ7A^Ұ[J7A*+@ʰAbJ7A^K7AJKP7ANo{R7Alع@\iV7A RDoY7A@㤓D|-*[7A sԴ/[7AL'&i( \7A `hT\7A 7?UfIY\7Ao;d\7A9bI\7A ?VbI]7A`u¦]7A`هT_I?]7A ]9_S^7AU^\^7AU@SZ`^7Au+?kX@L_7A8Vӑ_7AdT5_7AӟRSTE`7A+Q濘`7ATO~`7A`T_{M5T `=a7A '_Ka7A"KIQa7AG\2b7A`7Eb7AG%Db7Ar%BW$c7Av!8@E?uc7AF>jc7AfT<Q!@d7A`]:'dd7Ac8?d7Ah6e7AVwe4@Qe7A i2迟e7A+`0c e7AjY._;f7AjN,߈f7A =*_f7A1(O_3g7A&_%^g7AĊ?#Tng7A`_~!h7A__wE?ch7A_FՄ&h7A}X#|h7A@O~lDi7AT i7ADi7A6  !j7AUQ= kj7A+j7A`67 F_j7A x`  `Ek7Aw߿k7A JIk?k7A#DKk7Aai$@l7AÔ$"l7Ah^%l7Agk@/l7A#V@["4l7A@s(_;l7A`(uCl7A@={Il7A@.i_Nl7A !=!Sl7A`CYl7A.D_l7A*dc?hl7A;@rl7A X!E{l7A"!l7A`D !od&l7A% h@l7A`C+ퟓl7A`ѿo?l7A@C &@l7ACI l7Avl7A`9d'l7A}@l7A &l7A`[l7A`~ ?l7Af"l7AZ#l7A& l7AWˎ#m7Ar"|m7A@,|h_m7A`>`@"m7AP?,m7AD4m7A_*D`>m7A qGm7Ao_\.?Pm7AR´؟Um7A(YR[m7A`A?I' ~m7Aǀ{M m7AJm7A@سm7Aq]?m7A@w`m7AF9m7AF3Cm7A@>!`m7AA m7A`|~E_m7A $~Hm7A`tۀ m7A`G?m7A_рm7AqW T$`m7Aο+ݟm7A:(?m7A`A?g&m7A u Nm7A`S]b<@m7A@'m7Aea m7A1^'m7A}`m7AؘN*n7A1f__?n7A@\z\?n7A@ۭ? !n7ARo('n7A*E!/n7Ad@7s_6n7Aɠ`(#@n7AsHn7A@پ!B?Sn7A{_%0Zn7A`@ bn7A`/:@kn7A ~h=Y pn7A`bStn7A z'Y޿vn7A}^ =|n7AM"n7A`O>n7Au:㟉n7A``6:蟌n7AB@=n7A0߽}`n7A o>n7A`9n7A a?n7AXl Tn7AC˞Cّ?n7A>G n7A^%n7A@)a`n7A`_n7ANYq?n7A W9Ž n7Aـ&d&`n7A n7Al]Xn7A Y2_Hvn7Azn7A ߲n7A`o?j& o7A`&>)xo7A? o7A:o7A)@3 o7A1J=1 o7A`|8h؟!o7A@W &o7A[ /o7A@B@4o7A@;_[X8o7A@[<@o7AL Jo7A@AMo7As~ Qo7A?To7A GTo7A?jf_Vo7AՂ?(Wo7A e`Yo7A @" ^o7A֟|bo7A@.ho7A 2_`ko7Af.^#`no7A}e@ro7AC5?so7Aeto7AA[K@zo7A ""}o7AZ{ o7A ;6ۘۿo7Ago7A?z_o7A.o7A@V, @o7A]u#'`o7A@= ;o7A@|rߕo7A4͞hWy翙o7A ꟛo7A o7Aa?o7A U]%o7Ap_!o7A` ?o7A`G\俧o7AߡAo7A`TH@o7A o7Ah v:߮o7AUo7A ލ@o7A@?o7A`>8ocoo7A `Ӿ?o7A@X\>뿻o7A@ű^m#o7Ap#$o7A W o7AY@o7AR_;o7A `T o7A`! #޿o7Ac>o7A,_?o7AN e?o7AV_ o7AE~Yo7A ʟ޸@o7AK A9{`o7A~t_7o7A΅j޶@o7A"= o7A`%o7A F=@?o7A`i` o7A_Bo7A ?$o7A[_ o7A`o7A wqbZo7A,ko7Au^9o7A@`%o7A& Zٿo7Aao7AW?o7A\do7A` p7Ah@v} p7A`A;e p7A{# p7A@Fkp7A! ^p7A`"[p7A6#F p7A@"p7A %x>$p7A L?~_)p7A(?&`3p7A Tc#qN%}7A8l=M~}7A L6<"~7AM`:sT"^~7A5/9+~7A@Y>7N?77A"3a4Ē`7A`J !3]27A`1l 7A1r& l7A?07A V?. F'@7Ah ,x  =7A`*@7Ax~)1_-7Ab N(5]ǃ7Am&*_i7Abax%Z7Am#ˣ7A@# 7A H_" ~ 7A9 B"ǬM7A !dIݟ7A G'7A S` R7A|5{?7A&`t?ч7AC=@7A 6G7AY⟡7An@܈7A@ _-7AP@M?7A>PW7A(l`u"T7A!ߑ7A/ 7Aly?6?X7A$W߀)-7A K7A@\_`D7Av`7A`W `7AU[ ~_7Ar  7Ax _7A@⟐ #7A _ w7A #`7A'_ @7A@> ƌ7Aaw !B_Ќ7Ay?0!׌7A,vH!7A@ap! 7A`!܍7A,!'7A* !b?7Ai!ň 7A@!Bn'7A@\"A17A``X4"ö?7A '_U"%kI7A`x"Ȯ W7A5"q@f7A @"o7A`/"|7A`a#G7A@y#c򿐍7A^#C򟠍7A ؾI#_7A@jq#e#@7A#/Ѝ7A#\ 7Aۿ#$v7A5$C7A!:$757A7_a$Kڟ@7A$R7A&$e7A$d@7A_ !%`F @7A`Ԁ9%:7AI%7A >2W%݀@7Au@%;'`7AŽ &?>7A@:&:S7A V&&`l7A`u&w?_7AѶ&!&7A@'&Ï7A-L_&@ޏ7A )'w7ACh3'7A`\' 7A?`'X07A@ v'D7A '5& Z7A 'w_n7A'7Ak'`7AJ'-y7A ?' 7A 'n2_7Ax'%7A@@'Đ7A '6ѐ7A7'Tڐ7A'u7A(X'uR&7A`'~7A'H7A@(s$7A(97A (WN7AH#(SY7A`!(S@c7A@(F"(׊s7A h(S@7AG@( {7A`(ѵ@7A`a (,7A`4 '" 7AK`( ȑ7Ad'oؑ7A`'- 7A(X'7A(`'  7A '77A@.?'7Aђ@'`*7A y@' T 67Az'8A7A 'P7A@K'+a7A ߞ'r7A@@'# 7A.r' 7A (^' 7A .QE'L7AѤ`8'ྒ7A ?-' ˒7A} ' ޒ7A& 7A 5&,T 7A&7A ξ&_7A᠞&Jx 7A &$M+7Ag&37A@-^T&)F@7A`I '&O7A&&sc7A@%z7A`u%?7Ak`Z%7A'%_7AH$s'Ó7A@¨$ӓ7Ag ;$ߓ7A $7Ar_#P7Av# 7A`=#7A@$"@?&7A",7A"N57A^"$s A7A8&"`K7A`T!?V7A`"!%`7Ar!>j7A[!{7A`Ե/!7AB  7A 7AW| c ࠔ7Ab> gஔ7A`_7A@?@ @7A»v/ǔ7AI+Ӕ7A ޔ7A57AO`7A"`7AuN=7A"  7A$xg7A^#7Aa`_&7AaT\^`27A0֠+@7AmL7AW7A ;?}:?b7Aq 8;?n7A Vyv7AV |7A{H 7A:L}7A7A`߫[E`7A`Q̟Z'`7Af㿆P7A@Xme 7AYPX `Ȗ7Al Aϖ7A5U_ؖ7At &Ժ_7AO7A,v7A~t7A.^Q 7A( w7Ay`$ 7A r7A@w `7A@au` 7A৵'7A:`?27A``%q <7AeWE7A@٠>S`P7Az_*B \7A]@T`f7A@3?o7A>8"x7A`2N7A9kXC&7AJ߾g7A7Ay஗7A >{|7AUPǗ7AY?8ї7A(ח7A͛ Uޗ7A`/@ @7A @7A g87ANݿ7A "N+7A@I?7A@?7A *7A Y`57A ⿌@7A`Q3xn@G7Av_m:?T7AVpZ7Am,Tb7A~A#g7A՜>Yn7A`k*׎$w7A`"  7A@ M?ߏ7A+n7Aظ`7AN3L`7A`mߧ7A`JߒL_ɘ7A@?%ט7A `w ޘ7A `wJ @7A y}l7A P_Zp7A X_B_ 7A`@&3&7A8E 6 %7Aʛ_/7Aр)?;7A>_[ G7A5KH_S7A+]7A`ĝ@0h7AmfѼ$u7ARꟂ7A`ԠCG`7A@C7 M_7A`8@7A@7AX2;ƙ7A`9><ٙ7A1 & 7A`I$_7A2a7Ar߮cN7A} 9$@7A`8}@7A`?j@*7AGV 57A<^G<7AR~5lqG7A5?+%T7Ak| J \7A|n7A`,7A));?7AUF_7Aa@7ARo`7A _m7A @˚7A7~cS֚7A@H7A$ 7A D 7AN7A &?:? 7Ao 7A@?R !7A507A;!=7A`BoP7A@Y$@[7A7NA q7A@G% 7AN6>#7A (` C`7A:*7A;7Am7A2%7AFO  ͛7AK6 ؛7AYB`7A@e_7A@o{ ޟ7A@7A@~h!7A~?77A zx_@7AԝhZ4F7A T`jx؟Q7A w_h_U7AceKd#^7A ^fRd7A^i$o7A51 gTw7A7, d 7A m U7A4Nߒ7A 6aE_7AD 7A C? ௜7A !,a?㟷7A ٟ2"U%@7AG1`ʜ7A<%!@Ҝ7A@B*ߜ7A 7A N4 { 7A = ~j7A@ 9x_7A`> *7A5C@ 7A~ t?&7A@ ܰ 07A 67A?  y 7A@ a Sg7A@ K7A@?  47A9! XZ$;7A@g>y h?C7AIl 9Q7A`M  [7A@4 Na7A%  l7A` RPs7A Tz7Aܸ` UK7A!_ 8ߋ7A Օ7A`:a  7A ?7A@` ?7A  7Af Ğ7A 5P Z`Ϟ7A3* ݞ7A@/_  7AY 0_7A7 s7A : 7A/ v۟ 7AΓ?p 7AG M L7A ?+ &7A{5 K/7A #u 67AH E7A" p L7A`?鞪 rU7A ׏ `7Aʀn 2e7A9U mk7A NF es7A* Q{7AN0 7A2N  7A?p: 7A@q7A@q`?7AIVQ7Al7A^W"`7A >4`7Ak Q$ȟ7A{S˟7A0П7A ^o,ڟ7A@>6`*9_7A`@&7A@}XR @7A@/7A<_qU 7A 7A`@.`7A  `̧7A>  7Alt`@$7AOC'7A(;_+7A*2s/7A !Ο37A I_> 67A\?_:7A`ne@=7AX ,?7ATykJD7A@?I7AJJ7AAӟI`7A>ye.h7A`Z t7A 19?y7A+e @7A3!m7A57Arp7A=*_7A>*$@7A@r x7AhQ67A@|_O˳7A@o;JƠ7A_@Р7A@ݠ7Aӧ @7Az?C7A`"_ 7A`k2M?7Au\*@$7Aw,7AK?u27ACEK7A`3?=H^7A@` q p7AVo2&7A|D7A &Ay 7Ak7AGi# ͡7A@[@ܡ7A"7Aj 7A)a"[_7AS 7A`g5N#_7A@m07 `#7A`(D{17A(?*`=7A_I7A`o?h7A@}Ky7Ac0󟄢7A@GxU_7A@S_E7AK'h`7A;a`)ঢ7AŸ "7A`cu֢7A k7A{3Ǜ7A >|;7A@ `E@ 7A`_7A ~+'7A _g77A@D !J@E7A@n %'`R7A r# V7A91x>c7Aۥ:µk7A U17A C@ !s`97A`ٟA7A ӠG7AFQ|]@K7AoM6{ P7AA!_W7Aخ؟`7A<e7A`e:@k7AdbPs7A>+ܥ{7Aёq柈7AzO򿏤7AZ}[7AܿQ 7A`%ߡ7A@৤7Ae8_^M 7A f^ 7A ދdH$7AQ)_G-Ť7A l`ɤ7A 5?j'`Ϥ7Aդ7A Q@!O`ڤ7A~\t 7A`<a7Aa? z7A`@7Aw@7Ao?7A`-_N& 7A E}7A+7A?"7A@d$@)7ARTu@07A^@7Arf?k`J7A'eSuY?P7A^7_W7A W8- \7A`[ b7A@wm7AQA;<w7A A7A> Eߍ7AE`[蟗7A 97A@Ky)7A`r ඥ7Av` U&7AY_ĥ7A];y$˥7A'Х7A ;m=#ۥ7A ߥ7A!`7An7A~9 7A2W7A `X 7A^I 7Aßy7A(;5)7A@`>x@17A@8an57A`=97AV1_cW A7AE/F7A: _J7A@?N7A _tU7Ac_[7A `ib7A. ?u&`k7A)C_r7A" u7A@ƠNP}7A `o ߀7A!nLQ7A&7A: ࿐7AӒ7A B_7Ar ?7A `O7A@0Dp @7A_f`%rm7A_27A MĦ7A 4iK>ܟͦ7A&p?֦7A`@Zئ7A@ `W7AU2?7A`K{uqd?7A mV?Q7A 7A/V`7A[=7A3v_A? 7AվX7A΍`Ciؿ7A-!_`%7Aqs u _+7AL=_47A s߾K@7Am6$H7A^OjS7A `?Z7A1a7Auz `h7A)AHOq7A{7A_ߓ6J"7A``EKޟ7Am 4 `7A@b7Atc0x7A~%7A-俰7A`陀 `7A?r7APPMħ7A``Q s@Ч7A_ا7Aa&`7A_ 7A 7Al7A-@s @7Ai7AJң# 7A`ܷ 07A pP@!7A`c_Q-7A'ؠEK77A`ro<7A:aD7Aؾq&#J7A j OmyO7A(p?V7A`-YeFۿY7Ad +\7A$j7Ao@]s7A '"|7A{]i󿇨7A` _7Aݟ[7A Stmi?7A ~* ߡ7A`^ਨ7A x న7A=W߸7Al>T7A`Qʨ7A` _Ш7A W$Lڨ7A@YhZ7A_7A@l!@7AH[97A`dk R! 7A ^`*^7A@V'0?7A`>K!7A>7A@"Ed?$7A N)7A *_-7A@uG 47Ai97A.=7A^FJE7A@_ L7Ac;}.Q7AGX7A +Aa7A8ߢfh7A#Vp7A@ {7A`M" 7A`<%y7A@(?<g?7AGɶ7A[_7Aq=P7Aqi$@7A`<7AqiBK$ é7A` }ϩ7A jک7A@@4$7A@  f7A p$C7A c&(7A`Ve7A4 7A`Yz 7A?n7AD`7A@(ߧ `$7A()*7A@oK=@17A ``F|77A ʿ)=7A1o7_E7ACK7A`02`T7A^q]7A`$&ue7AǿZm7A`Eh?u!u7A`x?|7A ־D߁7A`,?7A0k_Y7A6 e]7A@*7ѽf[7A`_?7A `E@7A ū7A?ߺ7A2 ^7A1e`Ȫ7Aջ$Ѫ7A^x|_ת7A@5"3E"`ߪ7AdJ@7A uw7Ai\HM 7A`{>+#7A _7A 7Axe?7AG>?P'!7A@NED.7A1 87A v HB7A A P7AྷÆX7A| @]7A O`rrf7A`,8Cf r7A d_}_{7A$߾H 7A CX\ٿ7A@_5P7AW? .7A>ӵ>\蟪7A: p7A u@7AI?U;ī7A+_?̫7A@w_ԫ7Ah˴ ݫ7A``by@7A*!`7A_7AK_7A`ʞγVsٿ7A Pv7A G.7A6h%C)7A(F5?p27A 最 9<7AAɟy_F7A`ޮ @O7A`ZLR\7Ak_@f7A?RY\?p7A0A`}7A_@A7A@ α_7Ah/ d7A y|ࠬ7A@; nW?7AH{`7AU c7A~ Ǭ7A) ۔?Ҭ7A1۬7A࠘e7A?-g7AYGYp@7A -^l@7Aܟ}7AۯV7A-ޯ'7A~>07A]vS+R7A@2 _7A3خ8 k7A Ӏw`v7A,@B7A;^{%7AӞ_9W7AN>Rk 7Ag0V?7A%L? 7AN `ڿ7A_@ɭ7A7 VAԭ7A@p7A @KX7Aj+A-^7A C^v7A?7A09q7Ad?{$`-7A`mu67ADMB7A6R7AV)asa7A ??ޟn7Aq`3 y7A`^o 7A/`x7A?T4򟪮7A Ꟶ7AJhػî7A /A} ծ7A埍`7Aa `e3 7Ac?q7AˉM`?7A `ܩ07A~r>7Ac ?k_N7AĴ2`7A? %m7A?ߨ {7A#7A$7A`E?_m꿣7AorLm6_7A -!,q į7A?)<ԯ7A`Jj`߯7A`w7Ah7A`QS&@7A+@7A pў@.7A%KP?C7A`jMJ @U7A~06a7AYi_q7AV-7A?+7A ᐥȅ?7A`K`;E_ư7A qO&hذ7A/`ˤ+e 7A߾P7A6?.7A@a,eA% 7A`@ R 7ASm?2 `7AWT?#@)7Aրͣ.7A `7A@>E?Ʊ7A `97A r9@@7Aog@M?7A`yZT7A@4! 7A=Rѳ7Aԟ!=7A`Ҡ= @^7A_^ ̴7A`HRQ_7Ax!H7A0vm5Zv7A #ܖX`7A`)?)A%7A~/V`a7A b+ё_7Af! ۶7A`3ࠐ? 7A`C`L e7AQo77A 4\g/ҷ7A4Z7A)`;c@7Aän7A ۬ԇ͸7Ac@ƅĥ7A^ރ1>7A&_(7Aѯa7Az)~ 🏺7A@;_{E `7A~uy^H7A PwP7A@c@u@7A`]_s807A`X/rkែ7A&5py 7A/2an7A:`l<7A@@ukXo7A` j`7A=_h]`׽7A gq7A࣠fz"7A J eoL7A22ALd7A@ICbRڿ7A{ |a7A@` y?޾7AZ _q @7A(_K7A`M1^ !7Am] @77A@}4]J F7A@l\NO7AZ@Z\OKk7A?r[v7A`|[jޟ7AY ZZ?7AY)`7A?|Y_7A(Y!¿7A`(X"п7A?W@7A :_Wz `7A@n VH%7AeUo#7A TP77Af@3T#B7AY?S?M7ALjSH}]7AR @m7A\hR$y7A@Rf?7A E!_7A_E)7AmD7A`Chx&7A$YBu@7A ~S 7ABN 7Ás@7AK|7AMb7A5_w~7A:zId227AIϝKSY7AJiE7Ak86u K7Af.b%Z @7AT?w `27AX!\47A@w!7A 7A0  ߟ7A( 7A 1P7A' rߑ7A@ ?7A@jc&7A bp7Ah5C7A * 7A>*f*7A|N7A̺C7A@WE7A)237APb7Av=?7A`_7AG?9r7A]^:?7A{457A|7A3?7A1z 7Aѡ[f7A@Uq7AK7A$ 7A^ ~7Aގu7AO"`?7Am}B7A|_  7A9N`7A`5B 7A] 7AWa[>7A-@h_L7A@~sZ7A%:z7A_?7A:q7A E7A7A}__7AI)<`7A]^@7A2{^7AabO1k_7Aҿݿ&7A^7K 7A>҅7AqaX@D7A$#7A@3%_7Aۈ}7A@r7A@ݟ_,7AwެF:^7AL/p7AS=c7A:7A@} 27A@7A9FQ7A}  7A@fcj7A@oUL`7A@w@y`77AbHm 7Ab@?e7A@Jd.7AWQ@T7Ah77Az_?m7AY q۟7A@}]:7A*_]7AŬ߰7A@=@7Al ֻէ]7A7-7A5$c7A 7_,t 7A1p)V7Atan`7AzrF?7A@=n7A(s$@7AЩ¢7A@P3Gm@7A%aK:?7A[Ta`^7Azol7A @uܟ=7AOA6@7AD Xw W7AA37AMof7A=Ɋ֎`7A@!vw?_7A$7A#j ~7A@j{%7A@怡u翦7A?/of Z7A@Q_bk~7A>hY C7AycNg &7Ag`JU7A@\B7A@Բ@Y߇7AoW}g@g8ApWV=58AT8AS̹/8A{M…RKM8Aؓ!8QU8A@!' ]PB"F8A@SO 8AWOz8A>OUi?8A⁋O_8AOw `E 8A @O6 8AjOpD 8A@أOO,2 8A JO  8A%bTOH? 8A Ofߒ 8AګNH.9 8AN/N#K 8A`oM<#N 8A@3M 8AEÿMu8AIL۹8A Kr8A@ʛ@IH8A}G 8AEl;S8A@)PCK_8A@jJ@@18AΉ]?318A =,8A@ў?9(s?D8A D^25m8A@E0#=58A-8Ah(]8A~ BB#l#>8A@?`8A@aX8A_8AeWNQq8A@ r 8A@L $ 8A?~`f)8A?,j~%8A@˴DڿV8Avae 8A m."x8AAn`+'!8ATe8Aԙ|?8A%D"&N8ANB8A,"Yw8A@2X G8AA@Lo8A0Oߺ 8AğԿHc!8An!bH#@B"8A@|i"8A@Rc[@K#8A2^#8ADK$8AH"1,&`o$8A@#rv0_$8AoNz5%8AAh+%8A R&8A@Ϧr(&8A@H.J'8AE`B_'8A7P ~ 9(8A|Ʃῼ(8AWa{ T)8A~{__)8A}|m*8A+~=*8Aw! d+8A޲D?$o+8A=lv+8AYN+8A=6?S,8A 5,8AK?5%-8An O1 @l-8AώK-8Az [B_ .8Aі?c.8A~1U?.8AS`.8A/ //8Ao^`l/8A| 럳/8A"/8AP&Q08A^x@V08Ak`ZX#@d08A ߹_08A^-&t18Ax18A-Q28A@D[^?*n"38Aݟ5`38A_* :?'48AB 0E`48A@s~KR58A\+[58AbJ~{?+68Aȣܟ68A@!~@S78A(_78A ⿋88A@b!3g98AcMX:8A&5x ;;8A@G)1<8AM~ <8AIA=8A~x_?8A@(bSs_?8A5 @8A@+]L?A8AilA8A@v&Y៕B8AV!N1C8AvdC8A.b KD8A 4`E8A_WF8A@@t#uF8A,b+⿭F8AAM_F8A;@hG8Ae]۟wG8A})`?G8A@3`G8A@Z^G4H8A@?N`~H8AB_H8A@bH8A߽J `I8AD%i@[I8A.@_I8Ab_FI8AP}J8AǪ_MJ8Aw-J8AK8A7WOiK8Am {# L8A@(_L8A=w1`nM8A?9N8A\ġxv$N8A@bJ#O8AFO8A,bO8A'? O8AT@=P8AW P8A"8P8A)Q8A@pU~?uQ8AUО7Q8A~D_R8A@N_OR8A@SaX_R8A@ GR8A Vx ,S8A@ss @zS8Ah_S8A@k7#T8Ap3 uT8AȂT8AUA^U8Aju?NU8A@\_U8A@̬U8A=n U8A ^_8V8AT(uV8Akm8߹V8AD V8A~!W8AYᝡW8Af,*X8Aтr?X8AOጻGK& X8Ap`f Y8A(`µ8VY8A  u _Y8A |_ Z8AaVYZ8ACdVrZ8A>4Rt?Z8A@ Z8A@?uw[8A样sD[8Aj]Q?z[8AsހUQ[8A¿kR\8A@~u,\8A@[\8AV_0j5ߩ\8A@Wr*\8A:v!]8A9b_]8A@v]8Aw ^8A2 >^8A@DB^8A@b1٤?^8A;'> 3_8A7)ޥ|_8Aj p=?_8A?`'0`8A``8A@_݇`8A#پҪ҂_%a8A@;qma8A|ߏa8AR;/nb8A@_1.@Yb8A@rbϲb8Amb_B&b8A5 Cc8A@Bc8A@W c8ÁJ `,d8A+ypd8Ad8AUYddd8A<9&fd8AzAޛbe8A@Ծ4@He8Ab^'e8At`qe8A@L`F`e8A@ 4)f8AXf8A@&@f8A2?zm8Aj=m8Agsn8A@n?>4-n8Aa7`_Un8A?6C@|n8A@?^$-n8A@L@?n8A@a6 n8A@@Eio8Aá$?o8AxGX_fo8A@UCk߄o8A^o8A@tvw o8ARKh['o8A@j}q0@,p8A@6q10&^p8A|*p8Azp8A$bH%_-q8A@Є)Vq8ASq8A@=5r8AQ?=r8A"`0s8A@E;;s8AvcT߿:t8A0}P/俼t8A@Bu8A[9Awr u8A?bxGv8A@L`@v8A@x>ܟRw8AXwG?w8A&D>Tx8A)<?x8AA[!dy8A{,:y?y8A"y8AO@?z8A^J&\z8A:r^z8AQ{8Aj?>{8As_ޭ}{8AD {8A{{8ARX)|8AIw|8AT.`|8A;n|8A}3n}8AFi 9}8A,@P}8A!Q}8A@w+rh}8A/\(?|}8A@z#|}8AZ9}8A 9)@}8A }8AX@}8A^7~8A@?^%:5~8A@+QE~8A@laY_G~8AY_ P~8Ab^ ^~8A@_h_f>_~8A@*~8A~zI!~8A@.\>/~8AAn`~8A8V_~8A~~8A3a-xw ~8A`pܟ~8AV?~8A@{AQ(8AXk`78A@ "`ٿ_8A#TPp8AWHUq8A;8AA ?8AX{@G 8AҠ%l 8A{78A@+;#8AB?5@,C `8AU@A"_8A}F}ؿ8A@7O*@8A@aS$޿08A@la8Aؕ't8Aߖ%{8A`ޚ8Ak=8AXRր8Ay!@؀8A`*#`ـ8A`1{ @ڀ8A@Tnyڀ8A= z 8AB~48A &Z8Ae98A5!\_ 8AE^tw8A{A?d8A@A8A_/f_!8As <18A z `58A@H OTA8Ar!0K8A T/WQ8A)=T S8A GL_2^8A _1a8A@8A`0#3 8A%) 8A@1-a7 8A`)_hF>8Ad`=i[?H8A_lTQ8A?cpFvc8A` vl8A`"z t8A]}@# v8A@ ~G`8A8Ђ8A^JkЂ8APu`8AF,=8A@x۾ NY8A`:]8A@ Ih8A~ aH6t8A@8AmL 8AG>H $8AWs"8A e$_8AD8A@j8A N@dŃ8A ?➽ 8Az @8A+ 8A`7(8A@8At8A@'@)(E'$8A< A+Ċ@,8Aq?S.|>8A@- 7A8A88?]8A F^8Au FZ_8A8Go8AaO:@{8A`(!Tv{8A਌T`8Aj5kVG8A8?W^V'8A`-0X[S_8Aadj 8A8r㟺8AޕsW྄8A`&u2Ʉ8Aߌzf@̈́8A|_Ԅ8A ޼kVԄ8ArIUׄ8A ~W_/;؄8A55ڄ8A !v_݄8A_݄8A=ٿ߄8A _M `8A7_Tx8A?ߟ8Az`ψ8A@@nj8A  8A`^,8A 2z`<8A|ci>8A*ؾ"  E8AE O8A > K l8A҈ hu8A ?b8Aod88A@0 q ͅ8A1a*_҅8A_8A _P@%8A_:8A@"@M8A@Ѫ(߿T8A'*,xv s8A@l>92%`~8AN>Z8A` J_ࠆ8A߰N8A@߬?>VT8A`\hVÆ8A8A^m8A @.c,"8As68AĚ_ڎ8An_]8A@__8A bTP8A O %%ג8ADR$8A{ 8A`x`m 8A#Eh 38AcS `t8A?[༓8A`"8A p{ 8A@[8A@n_b8A`'!`p?u8A#q8A߁R_ĕ8A/?8ASO)'8A/@c8A y`_& 8A:JP`8A@&E_8AOý`;8Ar!T8AH@C忾8A`%=\-M8A)?~ _8AE8A)ZD8A ߟ8Ap : %E8A@yҿ8`8A`s8Aࠨ<&) 8A?&Xo W8Aƿ *?m8A`3.࿨8A@0M?8A_0I8A@`{2X\8A`2Ae?F8A 36\<_ݪ8A 6s968A`\q?ꟹ8A2A8A`q_CqL/8AmCX`28A: _C_8A.5Eڿ8A` %F`f8A@Ii 8A0K8A`YL0c38A ]Jzx8AL@ cl9 r8A%g+&` 8A@Z_i@8A<i;8A@xwj?8A Au$8Aq^/v8Am^;v!8A ~v5j68A]?vm?U8Aw`ɺ8Auw}N8A KP@,~y8A < )~eR48A{0H8A`" XE8A$_bh"G8A;>BEZ8Ax$?;8A0xP9 8Ad~hT8A˗՘8AC38A%o-=QA8A4R@T8A8^k_y8A; EE x8A@}@Zw8A>MN& ۩v8A`!8?u8A@WsD#;u8Aʈ@0Çr8Adr=jĿl8Ay?35g8A`"_K\e8A{c`Xca8Ao\8AtBY8A`Ж^[p Q8A0كyf/MsN8A5ѵxk5prM8A`I_*`^cJ8A a-Ӽl5I8A [vDdE8AaoH܅C8Aa2yykA8A`M Ċ@8AYTB>8AbH^Ɵ<8ART9K?q<8AXEO?88Aa/GM58A, F\28AEuY18A[xi<"%8A@ uhp7iL8AOOt8A sV{8A`s0sP8A"C!8A@qӟm 8A`,(? 8A`5{o$ 8A Z:8 8AWL 8A@G bm O߼R7A@Ɍ 6_HM7A-ґ $_f7A@DI s7A`S 7A`WT &+/!7AIH e8h7A`a!N SV 7Aqje M2 7A 9q 5Tx]7A,> 7[A*7A Kmq =7A ;1=}07Aiի X7AÙ= KO7A a@ '͛wF7AbߒX Cρ7Af ~7A`ѿ zÍ07A@$ 7A4A }mͼ7A-a8 o7AeׁS !]J 7A*#e &-|67ARj _,7Ah}B 7A] Mq7A@y,B o7A`N#`~% -{7AR-QՏw7A0[!v7A裁%kv7A>5v*7%m7A #69j7g7A<&>f`>Jh7A }fb?hy^7A@H0 [K#jcT7A0z3S7Aہݡ(R7A δ]cO7A4_tM7A$OrH7AxêG7A 唆F7Ap`fT\&lE7A@,cs˩D7A,M(ދv;D7A0ǘ@ C7A0S XKgB7A0Eb=PA7AsD62;FA7AolyA7A~@4[>7A(.H<7ATO Ii27AqGx'7AzБ`X6״)#7A7I`n6!7Ap|mhOK/7Af=l*Z7Ax>ja)t27A0y,47A?ђ7ABh]B7Aٓ7APM#2 6Am"|A X6A5d.S򎠬6AЊv6A 146AxT3e86Aɕn5A6A*7k=-f6AЙ]:9q6A6!j<٧ᮡ6Aþ>(QӠ6A}@: 6A(| CL.6A/E@6AHGsXe6A` XIv!t6A]Ka߭6APYMt&JҚ6AJOij6Ag|3Q46AP=S;s?6A`ST|*6c6ArBV, T6AqXT@6A(ZDє6Ap?R[-6Ay] ԋ6Az_K>6A1`Ůb6A<*b6AЇ!cq6A Ze:ώ6Amfq16A@g6ACS6i}<6AjMa6A k󩅊6AXl?6A 3)nraΈ6AпaNou6A`U~Euu6A\e6t6AP<5hZs6Alv~r6A0o)q6A  M@p6A  .?o6A@% X@o6Aw 4n6A >WXm6A@ ;|l6A[U#ޠk6A@eK` j6A`_-bgbi6Ap?~{s i6Az~]1h6A[~=a#Vg6AU6~Bbzf6A0}Oe6A)N1}3)d6Ap9|c6AW9|V c6Aۮ{&!/b6A@ {OSa6A@T}z'x`6A0fvy\)?_6A]"yLx^6AdygxY]6APzw}]6Av -\6Apu!ΘSQ[6A2u"AuZ6A*t#Y6A&5s$X6A5r%"W6A *q&hUW6App' D*V6A0q!n(6NU6A9m):rT6A0ȡl*aPS6Apfk+/zER6A!j,`lrQ6A,h-۟Q6A!g{g.\w'P6Aaf/Y%KO6AP_d04#pN6A8c1_VMM6A\a2(wL6A/`3) K6APD^4K6A\53($J6A)Y[6dII6AZqY7h2jB6AJ?SSA6AsH@7r@6AިFAx?6A``DB.rF>6A 7gBC >6A:6@D(B=6A߯=E-g<6AP˹;F,K";6Al9G1B<:6Ae 7H&RV96Adl4I`p86ArI2JU}ۈ86A`s/K?76AW-L$c66A*M!·56A@]=(NBHE46Aӡ%OW36A"P 26Aа,M QR!26ASR_94<16ASςF`06A}T{T-X/6A@x0.Ufh.6AVMV:!y-6APDcW,6Ap@o Xh,6AKq Y[8+6AEkZv\*6AY[ʂf)6A=\.ˤ(6AI\k^X'6A>]u&6A"ر^&6Ao_J4%6AT#`.X$6Aa+e}#6APnb! "6A`bc5H!6Ad5 6Asxe 6Alfh~16A`gK(M#U6Aah"C&y6A0︽iY'6APBj)6A Xk!+*6Awl)A/* 6AmE)-6Ap$in2'Q6Ao.Ք%u6An,p`"6A0H:qlj6Ap=r 6A6s8'6A&tXH)6AF u M6A v`q6A?wED6A0xP6A{By6AP1Rzw+6Aн|{EB;$ 6A;D|H 6A`ǜ}0{l 6A j{~iC~w 6AduggD6A@_ cVh6Ap%7[E6A$NvV 26AcQcO6ALK 6A`,Gdq6AC ?6A0>Ȭc5A#9@d5Ap4l-5A/;X5A)r1n5A$&U5Ah1D;;5Ao0 _5A0s/Y5AYs}5A; 5Aw3L5Aw5A ;[{r65AuپRZ5A:Z>2~5A.n5A335AUޜhS5A&M؝X 5A 0/Ӟq>15AP)o͟R7bU5AxǠ=y5AjM5A;5A ru5A5Ap$"|y,5Ay!OP5A`i%t5A25A5PՑW7uϻ5A愩] 5A u2v5Ap5+I'5A0qxsK5A]{r8n5A0w`5A2e_MT[5AX)5A6afRS!5AK>v>E5A )AEbi5A0>|7\5AM7|G&5Ap?1d?5Al*95AH#~5A@2tK@5A Dd5A \"Kބه5A1?45Ap/8d5A J4i)5A'L5A5>י:5A#%NLs^5A+Æ55A@0$d65A P|5AZqv5AigZ55A0Z45A{~X5A𞕄drn|5AT  +5A0g5A0<;5Ac[ 5A/+ÄP/5A}%R5A duDv5AKmy=5Areyo5AS> ^[5A0 ^0Vp`5A WJN6)5A[FWL5APa>#{p5ADI_6.5AFR.~෹5A`X<&&ّ۸5AxG4B5Alc"5A  {F5A39Oj5A28tp5Af$̪5A@sH2Wղ5AR&5A˶"5Au>Q^X@5A*Ad5A =/5AOEIXS5Ay>ά5AP OY5A* H5AVޖǞg95A}_]5A`ܥEh65AP5Zj|٤5Abs,|Ȧ5AP2Ejs5A >aFu]5AjX`35A,OW5A /zFZfz5AZ=->5Al1465A-*m=z5A! 5AyX,5A(paMP5Ap3PSs5AzLif$5AĂW5AT7ޙ5Aɰ0K5A@j~ud %5A@cZyI5A@!@mm5A4M5Ae^885ApQ'`kד5AK`^5A`Uf 5A`m쵈&B5A~lf5A=t j#5A@ j 2KX35AP(` bЍ5A!V _P5AsoL 5AB}j;5A@8^5A?hM.25A $ 5A ɇ5Apͪz5xs 5APř 25A̟145ANATW5A5O>{5A 9/)`5A\Ӎ ?L_5A[o? Wp^5AhG@C]5APyAL'\5ApB2[5A갓C(xZ5AQ,ED4.[!Z5APE DY5A F ^u%hX5A࣮GpdW5A (IHQV5A7$I_OU5A =wJyڰT5A KkK NT5AP)Qg^LvrKN5AplRoN5AASoQ4M5AOkSBD^WL5AгnT%zK5A&U;J5AVէkI5A`W@WH5AXLH5APSY*r+G5AZ NF5AM[rE5A@\O_sD5A t]',ȸC5A 0`g^B5AnY_|nA5AÐL`(."A5A ?0?agF@5AБ1bKci?5AM$cq>5Aczd}=5APe]R<5AP5e;5A IfcWA;5A%g$kE;=:5A͇hH[`95A4iQV҃85A`S\jTu75Ayk8g65Al55Aʍmw55Ay~nB445A=}po$W35Aybp+z25A@[Tq,15AX4Fr\05Ap8s_qD/5A~$)t&/5AuG)+.5AV3 vbkN-5AOvq,5A`^"xw¸?+5A0RI x/0*5A6Jy=2p)5A@Hz(5Ah {7?[!(5A|N,E'5A([}ih&5A #ڳ~H%5A|$5AGm4$#5A@cx^`X"5A셳Ozے"5Ap@ ;!5A)1_ 5A0u #K<5AvGtP5A5A:=H5An[|Jy5AElw(5A@]CK5A,Nbio5AP߽>45AР /Bb5A zZ5A0nBɺ5A`\4; 5Aw"B5A 6:e 5A^љc 5A 5B 5A;\5o 5A {ʫ 5AP덑 8I 5APz'bH(85Ap zqeM[5APaFr~5A ]d{Q]>5A]Ais5A@61M5 5Ap!q 5AаMo .5AP~?Q5A@҉7D=_t5A@ߧ_=4A/"}Ϩf4Adr?4A`ٙ Ř4ATAM#4A`g.cG4Ap |E,j4A`lG4AW,[`4A[Ks.Lz4APcL:4A0)z 4A4*<4A@z4_4Aa4A%4A'ն4A ķ?f8,4AL w?4A"R24AP␺%KdU4AЉϺux4AP%gn|+4AN];ޕ4Aj LA4A>:U4A1c)ׯ'4A<X3J4Ap^'m4AZ+4Apvc4A'cw4AT4A@O%4A@<YO\@4AQ!c4Aeoy!G(4A hf^/4A`=V(54A dD9B:4A92/?4A@ 3C54A)mFX4ApSI{4ApTu'1K4AFUL4Adf+M4AP2?pM4A! dɪL*4Adҏ*UKM4A0V} `Ip4AP0?k~F4A@7XMC4AXF}?4AS4s :4APܡ!c54A!0i/B4A nx(e4A`] ×!4A=7gF4A,xT4AH IX4A@U|S4AqG64Aܿy@V Y4A fg7,|4A@YTϟ4AθAG4A4!.84A!Z4Apidd+4A`^ N4ArS)^IZ4Aph0R/}4A`4Ѫ"MH4A+ ²4A`\=X4Ado;$4A[.+4Ap3GK.N4A`3dq4AP+nD4A n H!$4AпR)5ګ4A>d {4AP<(14Ap, )jB4AйϦxe4AUT`T4A1:~jm/4Ai5C Υ4A~U c4A@yA {ݼ4A},  p64As  $mY4Al D|4A 34A8_4A74Apwa2T4A6J5om*4AP`#BAM4A&rep4AA]A咚4A@6Hڶ4A`~ 4ؘ4A`@ŖW4AP`U e&4AD .w@4AUEc4AVH4AfT ]4A0>a)̒4A`?C4AuG4A[Į`-44AGVK c~SW4A`>5!yz4A "M,㜍4A\ #r-4A#q4A{$#84APo%Hw'4A@Kqд&8J4A@;('ք[m4A:w(I4AGjs) 4A`F]* Յ4AqF%H+34A K2,enQ4APh->>4AM{.wHW`4A.64Ap*/*N4A0x0-Vg 4Aa2e1zj~4A`F2m~4A36EA1}4A uik4CmS|4A`bJhr4AϏ^?q4A`UG@[@q4A!1A9p4Ap[B ף\o4AC(wTn4A@i,j4AyHjOi4AŷbIȟrh4A KJ4<”g4Ap[4K}lf4ALLٕe4AJMd4AUM7|id4AWyNIBc4A[ Odb4AỨPe`a4ANQ#`4A `qyR _4ApVzUbScP^4A=]JTsd^4AQ43U4]4AVVXj4AH!E=4Ap`S| 4AvPh4ADTW4Abwͫ4A`X9S P4Aq!єR4A)[EєR4A@fWo..4A; 4Apu W;4Af664AP!T (4A:qW4AN8'YXz 4ANζ 4A@TH· !4A?!4A T#ζ 4Asd(PB; 4A`&k.Y\}4APHP22q4AМ8I t4Ap'="4AQA664A@Dukt4Apk)IJ-4AbMu]:4AvQc4AQUO4A o2[OڇX4AԧU a ( 4AgBڇX4A@Sqc4AJo9xG\}4ANp n4APܞoBڇX4A+B 4AP wr 4A\ .YF!4AJ@F|$O$4Aǒֶ'4Aʑr54A`!84A:n84Aү}84AP/l84A"\QҐ84Agb~84APVO#da84A*Zg2a74A"U1VUS64A wW64Ar…!364AP8D %74AwcvrE74A' #94A`6w a|8;4ApI3-)=4Apfr @4A A)$-83B4A&8D4Az*kkG4A0+:I4Ap.C7K4A3=2L4A/5QNN4A@&H9; O4A@}";]UP4AP[;0T4A :;vV4ApkqJQ6X4A )i|6]4A', @&%b4AҦTkWd4AldA(g4APdlf4A&I^/f4A J:we4Aфѯ ƀ%3AA8"Ԙ1AHD Q#;˯v0Amݗ%¸u0A8vH%0t0Al5P%kbs0A$%E“s0A a%Hgr0A^Ƽ%H#4q0A@%2u$Kp0Ax@{% Sao0AD%֩ wn0ApZ6%5m0AXd^%?ݣl0AfO %^ k0AhO%N7j0ArsN%jQOci0A|G %#h0A 'h%ùh0APs% c(g0A-#%Z ?f0A8 %C7Ue0A@a%/+`kd0Aɞ<&Ctc0A0璙&Qnb0Ar<&K׭a0A@oT&#`0Aֱ&6$_0A8&sJ^0AXPl&0AH#a#&? >0Ad&S/\R"=0A -@&Yd8<0A(}39&vN;0Aŕ&d:0AhP&Mz90A1N&80A@X&_5*70A`f&RƼ60A5Kd&S50AȌ$&N'J40Aܷ*&Y&30AVy&N30A؁b&/ +20AXyQ2&&.A10A`'&[ W00A&'9+m/0Ah[)IG&:5.0A1&g?-0A(E&H,0A(e\&{Q+0ARJ&sY*0Ah}&"a)0Ap&Gi)0A0& o(0A@F}(&@gu3'0A*&i{I&0A/&_%0AkC=&§u$0AW S&#0A;\&%s"0A aQ&f!0A`&b 0AXZ &y&S'0A(&i%0A y&nȘ;0A$&eQ0A0&Rfg0A^&%}0An&PD/AP%MܧV.A@v;%g$.Av$uḵ.A`?$%h.AP\Ä$v;Ţ.AP8u$֮.AЉ6ql$i[.AP,i$v;Ţ.Af$K;.A tMd$Ӳ.A؀=a$ L;w.AGV=^$Qs.A[$E.AW,T$.AoKJ$[W.Ahy?$wFH.AH}7$?“.AH 0$ff.A0VD+$8pb.AP h'$˻3.Ab $ }a .A rl$̀8.AH1m$Z .Ao!x$86.AxF$BlE.A1N@$6].Ahm $*I.A| $zr/A+MO$gFЬ /A@j鋛$cR/An#}/APw4P#l`/A@Yv#2$/A#äP*/A#ik./A #GgZ/A`S#f/A(:#$7C/A(E0#k,/AS)#ݦ]%/AV($#\oK/Af#=;r/Ax<##)/ABb#J/Ah#їE/A0Y#9I/A0Y#"./AT6^#~,/A`#\/A#ã/A0Y#+ā/A<#؉j/AC #S/Ap#qE¿/A@ A#%U/AP"Z0zGF/A8B "B/AkN"/A"{;/AXmll"K/A12"M߆f/AIxy"6!/A0:o"Y"/AxOMi"h~/A`Z/"̛/AHu"C9 j/A(<_ַ"A-/Aa"?y/A@K颦"2/Abߜ/"?y/AB5"[/A^&k"Hj/A@؈"G( /A0 "L( /AP|?{"V( /AQmu"j5/Af_n"4Y"/A`YHh"c~/Ap-0 a"j5/Aصaa["stBR0AZP"!F/AQ!p/AEb!!F/A_S!]/A %?!?5g\/An4!nwo/A{B!杺J/Axˡۿ!F5g\/A`\A!Uס q/Aغ!Wr/A`:!OS/Akl7!Ự/AH+Ě!9 j/AN d!cM/AD9!hM/A^^.و!^`k/A>P!m{/AXkr?!OS/Aؖ{!u@/APrv!՛/A8K*Er!/A ۍl!i@y/As)*Pi!Fs=/A@saTF!2K%0Ap6]#1o".AQ F|)X+A``Z+AHy}%+A~| %gG*A| })ͨ *Av/,*AO& aj*A`h1BM*A 읲W22*A`ͮt6E`*AV\Jy)*A\a =8[)AYx 0o2)A`|֚- 9`')A Ch ^d)A;N{ )A@<(s ɇL)A Uq ^\e)A r? )ʤ)ACZz )A<=+ !Kd)As ]t ()AAQaZ /)])A1M Rޟ)A 1"{ w)A@<@)AXk)AXul)AYc1)AbG :$)䯈)Av TԹ{)Av ~)Av mb{)A bG }y)A`FDfv)A[]8x2p)A p}Hhԥj)A@YcB?qd)A i %`)A@ B])Af- PY)ApF V)A&`L^ uT)A4q EU(R)A` 򍈖M)A`Fخ 9-K)ADh |0F)ANVg Qp3@)A@ 'V]8)AGj 0)A14 f>*)Awt FgQ#)A>G[ m )A vm)A6 Gy)A ϦA)AJ! b%v(A`) my4(A J4(AYd: n[2(Al3  x(Ai 6 (AQM<|S'AR5}Fe AYba6iZ=Ac fVAJPSL3/(A@qsqߝOAQL=}AO%ʅ)}3A@.ypAxT ˮWA@D'AU<z=*AQZ+~HA@1 VUgؾA,AdA@T? @:A'\L\Aa_94Atj-peAGAokAE['A;(LAH4T߱AhJ^TS)@AmAe_ҵz UA4D=v@A@~3W_A~OAYT½ޫA@߈ zbA4KUZ #A@6+kHAMn-/jA<<A:ǮqA@t̞HpМAɒdrA=μPAѵ7ɀ9AT4gXiA2gDL>ӗA6dzA}KRv5A@|sYM=|A@CpQ?AM8@UA>Ap9|@=ALP !lA4 A(ںӹ'搊Av+Q3vA:?mfT1Aϫ SA]|V\A,D-hA; psV}AȮ/>a|A@\|A'/Q{Alpm.Z}AcJfUѫZ}A_LoLT~A@ +@~A5w\|A-zA43=jxA@yqwA dɑޱpA??g6nA~=OkAoiA\ )iA@V qsgA@mer4Ei_fAxcH\~IeA<%]p>`Ap4+Ѝo_Ad.^A@L/7;k^AJQ,Wt A@8 g A29AF?wA@^^jAڸR9A&yQ2 A&I9S AAJ\˹UyACoQA5ADbA#*Iޝ A\eGA wL=A?H*A]X˻aA@CDۊB@<A@5 RA=4uAW-c!wAmwAt!A@80o3EAFs޽ZAHN2;*A@Tf=OcATnA@ ABT9:6A:'G\4A0*ҪPzA(C tf6A@-fA@A5ů*AZb cjDA7/ GAVÈluALu杲 RZ A@I2A Aqm;y* A<6YSE> A@!Ej AG+u A@,?dΙv Aٓ A@8zR A&ht1mu A@[q=6 A^~_ A2@: A@luC'ݡkA ,9h~A@F{;9SA0Hf[AVk?8'AizTAƓA@q}nA|4HA=Y\oI;A܂rH[A@T )j,ӹA@ƈDBwQAkeA)qA#_ӲA"Ako-A]rA햧CW"AN%;ʁ A00Ac[t-0AO pC#nO Az7X6KA{ M-AR>A;R iBA@ 61 ,TA@d넏;AMqRA@g4ҶjA9`uJ^AWX\ _A5ckAi]IwAK<+XIkA\I֗A籌wAb4G7>A^CnggvAy:bE!A$$\A@(\M縏A@s!AE (iA@JlS W:AKsq/A+]6IA@sC1A@IRA@e UAz֔nqA%fA@ wEgaA@K$!Aҧ{Kw<(9AxVE8A-ӄ8Bs4A@򡦃p3A@ `/A@edΟ.A@-AۀsW)A^F_$A@)!vA4na_Aࠍ~p`*AAU (A'['A@ yA2A=Aemg_A)|2'A20hAY:=A@ $\\AGǓJ\AB`U^SAI*A p++qkA# +O~AK7MAIGBv +rAJ[MAp#~\T$A` `ANHc _A@;[ca#{0A?d_v~A}UhC*A@ZɹieZ.AgBA-;j)o, AE|jq?A&&`A2? HjA@{NĚA_Afe"19RAHkȝ!RAB?jJA@ sÞNXJAC'ɦJAE( DHA@K؉u- FA@V/}uբMFA@|=HvtX9`CA oM2AAv"rhgEAAnuf+tAA^Y4?A yQOET>A\DO9A@"QP<0i7A 9g9W5A@27\j6A,wg5A i+'T5A@)>)4 5A)XZ4A@v!-Gk74Anu.4G3AԡI.eQ3A/}-i?3Ar,V3A{+lE3At-L+G{2A|9.ʮ1Aك- h1Aᰆ* 0A@r&3.ANJ0AP $&1AyX;1A P>|}3A5}e4A^`PI܅D5A@%R N5f6A66AZ6A@t5A>Y 3A(͛Sv7$2A†1AjFcF=B1AGW E Pj#&A~gG`%A@HJ}%A@'AKC%A?}N:T#A=!>U#A@zUİg:!AKyt!A@.FIb~!A@KE'UD A: mBOQ Ayv9A `cA@x }A6ߤAbvs;;gAQJ5Tq[$AX1dsANĕ 2Au6C"]AoA}rA s#AdwvAG\Bni Ak}l R A/"Obܷ>A@ҬYIٓAΎU飊A@LlÕAR٫,A fB.A@:+DAYi;b1A!2A s AMʜer1AeYSm/Ae+V%HsAѥ3~)zA@\nsAP`mbd A;ARTA^8$՘AtzAF4?A2Ll7AJ¹zrAcᅒ#A@?wLACAg#Ax~M/AKa{,1CArSA=j}A@1T JAf L3JUXvA 1l)yUApCĠA@ҝ׃AXE8=AaJA@9d[A'y ,A@[Vŋ_A-LJW-mUhA@^Qg{&A@9bMfA—TzVJA@~galJ,A|coҿ_.Avrz[#AT' u A@+ƕwp&(A5%AҜ<-A:4FA@W2mв.A-NA@C IO(3A,b [ZA6#%Ei A@Kqt A,EBѪGn A26yQ A %OxAA}A[4O|A%i]u̅AR2NA[%3<A qvnA@a&%?ASN.AUL5A@0 aAF3$9I5Au.1Agf=+fAC<00Agl,eAA(1{A@:L'ϴ`SA7]*IA2QHAX9{wA8f+)p@>دA@R-/(|Ar8:{A@X1RДA(Om ATAki ~VA\c5vAוyaLٓAZrEp?A# Y)^A@˸4A@_A~lAȯd9 fA@cAX^\A@6qu gAATFX/42A@DAuC$@+A­N8A@Q}x)eAQ 2-A8<$"CA@%45@:A[?<TBA@rABCpAp~BYA rwBkA?{CoACA_CsBhA@^'A?IAMC7A<iA@b?tGAaD?eiA@7t@K!ZdA&dBi9[A7CM:?A'Cgdu A8CF 6GAd9KڳLATo{AaUh9YAw0XW A9 \ևA ,_`LA^]\U<A@٬\\[5AD\hKA^ FgALaoOAqi`:hA@4VcHA@F]ALIR7ԧA\qVw/AmRuT.= AY7MT SFlAEV 4)A@#EXGF@ˤA@YDYZA'ȐYZqUAu ]*pA2 zN\A@mio37YA@~C~q;AysA@'?xQ0yA]380¦ _AReC^A@}ɇQj^A@@ιWFUA,C²RA^B#PA@@J_TOA$%jLA@͵ PCA@@\ϪuMCAKOl[0BAJe+BAڸ9lxkBAӃaZy$BA@``%BAsb-SBAG[赋7Aj`7A@9 3AL:Ălx"Aڴ[AcWg`A!wh %XAI-Qlβ EA@J)3/IAX0eXAA#VwJAMaNoA@LhBY5_AyLW;<9AY>p@kA  Ah A1AΛ'-8kA!kXtdA8@JAQ)ȐA@DA&~TtAIc)%A)kLA@A߇A@8"*\q}A~ ӃIQɆA@le}\AxzL$iA&]oAIy0"nA:ٍbknA@*L[ڥHjAU<5iA[loxcA@ߥZA6}MAr}CASܫs5AAi)^M3A@|ut <A"Fo k (>AEI5֠+Au- Zk'A^eZ1*Ahj@t(A?ҭra98&AB? u-A{pwzT¡A@Ɯh¼ Af ? AlpGA A(egx AZ>j}LX AxlWs AhňebgA@EIk? A@f?>JKnA.CA@ g6PdA=VݗAR{SAtXxnAKv>Ն~A@عQ<} Ap5y: Am [J_Ad)e8 AbY纇a A 2ֈ#3q A\m5{9 AxufiACW>^RA9lKUQ4ABh5I;cA@p[Bx3cAОD- YAtl AqT*QJ AƑkc A@ͦ~Ht A68' A@>HL55E A@S33 A֣jC A5ËU ANh Ab_/ AײB0 A$98Y"e A>I.ҥ AunT AN\wL ȫ A@$N_b A ;P A֑@[;H ArbE w A/bF橶t! A!g8^a Ae\x A v)t A@$>5^Hq A?M=XvJ A@) ? A ,3a[69 A^F`&m2 A@S0E6J.# A#_6S$  A@,@ Z@L Aq''> Aj*dd A@&*=< \ AVVb N A 2H- A3@Z(W} A簶(U A5X^z9 > AV`) A@^Ve{! A=^: A]|Ig AXb= A'IXn AEWVC A@?ksX-ic A@YF==. A@/sXQ/ A+U' A ?Uڞ7 A@j h8Vo8ø A3xW#b A#YehCe6 A=tm-6 % AA5{Kc=Q AʭmD A7g Agރ6u A^ {/%v Ap5Y3 Afm# A w_Fwej A<<u A+C)6d A@Th+Hz A@x N A뤟7? A=>yǮ A@b^gĎͮ AU- A@$.lm A0si A F^Kf5 AS&g A@4 V9Q AM,N`*e A9Rq@ A|iUza`j AoQg AigLhr״ A!K`ĉ A7 P2 Aɱ{=K A@?1 QPd AYLX8 A$ Lʆ AFW~C Afj'J߈ AA"C@ Av A#rW AsO,B"] A@e.l-Á A5ŧ2}| A;/5Ϥ&/׀ A@\j5 . A@ B6zѿ} A]1=q{ A@oX9+X9z A51Eׄy AuO5_ly AO44nC/y Aw2lEy A@VƏ0 y A08˴Oz AǴ/"Hz AH,EXhy A::)=4Rx A%o(ƍ6w Au^&(/v Ai(r A^=%|`\ Ay/{3 AbOU/ AtAG$*# A f=G A@~@9 A$2/,[Fm A! !~i A0ʾ$ A5lܦ AM}wJy A;\wCC* At-6%ƕ A@/gY| A@-+EYr An˴[}47a A@it7+W'& A`pW6 AZ & AH[dGX A,&oVC? A@(ftxY A@ D$>|_Ty A'mHv AdӎX'q A@XQaym A}N͜|ug A#WZ-Uc Ay\p@p^ ASۂ$Y A( {qU A@dp,+S A@hQ A9jZ^yQ AA@UkM=A@<AmJ?<ALe2_<AZX)8A@v7_ƵM7Ag96AupM(_^@5Ag}=ܒ4A@'|2A@BPNyD2A@Lr^$1AWs/A@Ta.A%yF-Ax=JTN+AixHzp'A@`%'" A9лH`ճAWtAR ;P[A@cIWA@w/$vAI3*AU—1 ASOL[ Aҕ)@eA TA$ ~A@5gqA|yFBpVDA\ ʲ8Az7$YxA@%?#u9_ATwAiL븤CAZSn'vA4`~:A!(ǿFA-u'QubAy ,tAN/_RA6t7zA@8@6,2SA@ !+jTWUA*7$cAooTAيvZo۶A+# 윆zAh]rfA,̜RrAEE$éMA#P> R٘A>)A@UiQΩA#b5YWAoHABf 2 Aie{A.[fiA"L<;QDAm/AYj@x@)A4wTȦ A@swkmvukAUAC&@fA|}*ZZtA^uϏsfA2ōBw\W%Aݕ艓~HA> 䚦5ACC0AR<.PLA@%p{AEA$?p? AloJEAŔ gz0A7`hqA$J^TA@bIA1fGA#efީʳAv2ucA@z@_dSܳAAUVkA@ 6@X͘ԺA@n!JQjALp`&9A-~4}29A@w̨:LAMsWfA71CAm[*[ɵ A:ֶAj:L_8EAPHp/A0m.BQyA}pLps6@4Aba*AF#PDA E`A:b/jA :`-51BAHkpKAeE=x G|A#W;.IAd:J̀A.ݼ"*7AxII%A=䪸 eAԥܟA2kOȹAiLoȷA )AATb #OsAq] AY#A'>TȦ3AY,DJDA~;~.mA{Qu+)A)3Jw4A9l1y1xFjA'BCGi\A(DH^0%A!~߲p@ɘyًov@]Yd#t[@$[O@iQ/<*5@G M@|~XtV}\_@Cy$@Gos@!_n@luεcH@u|`@sT[K,k@0La@>ݩ }1@#E@BJ}U@%&97@priPAAk!@BRк@ .v[ W@mw@1Ʋ@n_R`qj@` O(3X@28$Ot,@FºPذQj@pGVDd@3@@OБ@w_&@,eO@=#' W@d!c,@NϮ8g&@ԫf=-@$MJ\:@Dڵyn@seJ"N8O@~-@EDwߟ@摻@~A@'8mw@rei[@(f0@M`Q;~v@  MS@5; CX@@B#a|@G$?;d- `@ʧ= ϻ<@{3h8ٻ@4H@GLr$ی%@Y}Iͣ@)^ GR@OOM0@65I{@U+H _@zC  E6@6t>@vn|@l\T~ڞ>@ڌzd@uIp?zH7Z@J* ݟ9@HbHɐ:@Lo|@ OfQ@7rz0 @=tgs>Ӛ{@7VA .@D8M#/1@aTK4̰]@Q'2fĎ@0&OŴ@ܽ%*@ν4\IW@&"X\*@u~ID@XLog@P}p@̓=_^w@F?*QkL @aJ@@}v_#@"5.9G@×o[@r6HbP`+=@܉C)@JXQt6S@c$Tj@ siX$ъ@ 0^ʚl/@o BLU b@Bْ^ϸ@!6L(p_@>n @@`K @+Q+@-Wخk e@aY ,?V a@**87loP@Tv@^Q(9 @:ɽze-5@J0y> @0-Zȷo3@P V<*@ѓR@3@QC+T0@X9@w(_@I p؀@U}@y}J@L@ԇ`4@˹@A @; 8I@p@1蘽o2@aO@J@mu@4V!A@?]@5\~@d.@v¹@u@T@'@1q]@ˣtz$@@@0@3ۙP@H@%BRl*X@:H0)@Q&`5QPu+@@?Xp!J@w9OK@!ɤ:6P@ҕylC@qn t*!@ iC@fl*A[r@L:]͏ @DE C!4@z#Rɡ@FظT} K@dNKbjcaF@3/a^@ɚC|=@7~Bf@G! Eð#@3?7@406dɶ@Tjk\G@I@mVt@1"Qr@9 >@)3@܊54@d]\Y@$zC?@xvc^B!h@T Ol@Neڢe@J dq 5@[ft@ ͟NKA@qE_ȟ~iC@V4˞o@Leq@xu!oi@^@M @=Jq@2oa<@Q]@<\@RC@r@i]@G9pFYB4z@vz߾@rN)@a@)"%@>vu{!?@}@+xx@}@@Fx;f|D@YA|,{Q@9}XzX|@ oO=y' @xB@"Mw*n6@3_Qvt"9@#Lv@ibW@ƫuNdE~@< t@ݦ@2ȱOs@=M@eYsQU@\!rԯwB@_XvIq@K Gn@:[ Ofpe]^@vp{&pҞ/@>Q%o{@vn47!i@ӳl?m@ ?[@>?l@兀Ir@Wgel@@`@Ak _@BZjO @MiCr:@4Gh@9g@Ӥh@&@og>@%hf@@4pd-af@Ht;d/]q@i"c4@Ёb@bv@ˁ4aх4.@egݬ`<W@ig^@:@>O ]@ 1@HiQ[QN:Z@fϒZkݽ@mZ@ @qMX=j!@_-l0X@1\G@.V@9wUb~o@ᢎRU)]a@S`A/S A$]RS M!A,{"N?AZM9LIA!XzM G?AtrJJ@w AlCHCTAOo`B E⨿ZA7syC@l?A<@>oAH>+X?6WAO;`$ A,ArJ;89sAws5\@w7A?`3 TmxAQe. t`cA.,Ԛ 2AvbA\) GKAb12" A@+rFA+ʵP@RPRA?t ;@A 뜖z x A5ҕ `n \XA0Zz JÕAiD<`k AsbAgծ</AK7AzgF2hQQuAY;G .PAQ9#68AҏMj=u" A=7`$G@8 A]`+ ASD`,A AjZЯ 3 A{}`\ A`R p_ AwdR_ AM! ; A(xd S Aݷ@@ Av@o Y A]g`WJ ARbRAZ A~0O\ AA9 AU A^^<;A % Ap[^%!p A1]Oe AV y0_4 A` A :@H&;A$u@9AH#cK`AeOA 56A:s|'!!lAu=݁@#A{)maǿ6AQa6̵uTA2yi`A@@AڰWYAȣ@UAT?j A&?HA̟ o?IA``m @I|Ao#I`xAT AH0/r@A_߃.ZA@>Rp_'Ai̇L@AȺlDxݓAWHp_A 2A_iV(t_|AGI0z S&&AjMx䀟HA'%zu `mA)3TtP/@{A0(qPH_.AE"nom=Aw^2lŸA)}wiHKoA-goD@&An2Pvcp)9@VAvW{a0u oAWL._-@AW\@=z#AYMoA7X`cz`;AV0UAS`GAJj=P0`NA~JOpZAw^K?AO$H A7EgcA֪uSD@ޟkAl=L9ABy A3pO@@qPA 7-S=0fCA,J9@'㿙wAKLmD7ÑA{4(ijA-)3 0'A/AҡRf-p6`eAl)aߐAAF(`_ LAgϩQ&hhAzR#pA()"}A z>pAi]m0qz_hA%I' 5r; Az機2Ajip|NA80@v?eqA/hʳoqATT@A{8 ߾A2 ClAd5jBAp@G,A.a 0OAXD`g^ABZ ~vAX MI@sAF_AU!7Pn_xAC>u*Aۙ4|A>l@f``A0i>AםG[hκm_2A%HZqz8A@_0߻_KAi# R~faAhޓ@ɟuAA߫(@@zA0`I@ AAK흖z@gO_A4>@P ,AuK@ A_Zd@_A@J?  A]-@d A(j@+p6 A}nSN@b߽N AV^u@Z៖n A|?R@)y A?ݾ @l A]rB@,No A4P@_ AOL@4k? A&?@ A*?@$w;!APl@\M!Ai@P#Z!AXkr@Fߕ%!Az0@@Z8!Aښ@H_V!A%T@tzc!Au>V@,2`t!A\9 7@!A)_͟@r_!Ac?A>/!Aɿ8A0?!A???Aܿ"!Ap?A_ "A6?l!Ax "A:d`%dA(."A..SA,A@"AXu@]A@; L"AAw?-M"A5~~DA b"A#A<[m"Aǟ^gA$4"A]yAX3|"AHz AD_7"Am@ A<"A[,Ab)K"A ްAH "A*2EAL`"A5A"A,A\ @#AN2FA<` #A ҜAD @<#A9A,W#AR?&Apj#A!aAT:l}#A~bA}#AzA#A`A#A|xMA`׿j#An@LAX+#A@ZA@v#A GA7L$A3c)4A $A& m?9A`$$A&; =A_32$A}fAϿ7$AHA! I$AiXAV$A2_ATI )a$A1h~LAA`hr$A+$[tAZ X$AAT3 $AAԄ;$A]\ Al5϶$ApGٞo At$A+qบ Aʟ$AY~߹ A<_2$A  A%AR + A6H@%A(M A`+ %Aap~ A8 *%A9 AP( 4%A,\0 A LY@%A,`K AJ%As AIQR%AC\& A$Wa%ACV AL7q%Ad\y A y8+}%AX7 A'ێ%A-+ APt%AE4 A_%Al~j AM@p%A Ap%A7ΟT A ?>%A0v AH?%A* A<#Z &A@ A4C,@&ABy AY%&A  Aط>&A? ALO&A#㻟vAV4[&AW68iAQPt&AױA/&A/?0A&AY j A&Au`YA$^V&AYaĿiApY?&A? Z|Az &A ?CAXt$&A+cA0$`&A//ȿAĀ 'AҖ$A5'A NAH_.'AÙS 3YAP_4'A?+ atA2F'AEvAd]_S'AfQAH?g'AO6Aߌ'Azsu A4 #'Ax_| A|@Ϳ'Afg*A_'A_;AH2'A51XA0]@ 'AW;3 mA61 'A%a@AHI?4(A`v`YA#_ (AࢺAtߥ(ABhA0(AqA8@D(A*W}@oA[↓I(A B. A^R(AW`#A /H b(AsAFAy(A֟)XA, @}(AzA=&(AUA@ɱ(A?iA f(A)AJ@(A&lA@6LU(Am\/YA~i(AMA)AI+A,6ğ*)ABTA+)A'K@_A<53)AdVG_A< 3)A?ɊAѼO)A=8ۘA Y)A~CAD_m)A6Կ1A?z)Am ApR_)A'A]ē)Ab Ak`)A@qPA줳?L)Al 8Aeݿ!)A!َ?GA\*V)ATA )A燠bA4@|)A0}A)AZA,ß'*AorTA) *A=h@A^.**AAy_sAg) 9*AhPAF@dH*A ALؿ[*A*>A|_o*AUAxQ~*AmAdR=*AfA?Y*A C-A$*A?9A&!*AN`BA*A@Al5%@*Ap{]A]*AMAG4*ABoe:AJ䪫*AmA(8O)*AԻmTA}i(*ALo)A16/*A>]0A 6AKe*A;Q>AdDಁ*A CA*A{IHAK*AHA:W*Ayh.NATi^*A8*{"RA<K*A`H%WA0>*AvRA >*AJ ?WTAu"*A|P>eA*A'qpA^ؐ*A0vA8*AJ{Ap*A 1KzA4IR`*A܅P6sA#U*A>k+MjAKaA*A4hAo*AUoMnA}dbAgZ5n(A`6^A$Oήi(AهLBLdAPb(AfkGuA04X(A0GxADT(A7YzA|&WK(A4Z$6zAׇE(Ai"HwAɎA(ALqAJRG=(A LI#ADRD(AQ\hA ΞL(A]l,AsU(AD#;AX(Amj^UAHr-2^(ANo{A(](AAh\(AN(fAh0qZ(A N4Ax>6Z(AgA8}\T(AY!ADSS(AT_(A\گO(A/AܹX'FK(AK%8A(nI(ApC˰KAOH(ASeë[APLf+D(AH\ŸnA4Pj;(Af4WqA,v7(A YnA|,%d5(A GnAB* -(A&}!vAd6^)(A-{NwADl0(AzAA2(AofA2?*x4(A"(A2@6Ah39 #(A'DQAT5 \!(AjEqxXbAбo> (ACKApZ!(AhA$Z?$(Aw\A&$(A֜bAX|~!(A+a,A0+R (AYAش*#(AīILA!(A3[EA(?'!(AX D Ap<$(AqA,]:|$(Ahss'AtV$(AKAύ,(A?juXAT6(AdA(Ai &A1(A2(V쥝A0 (AKk)AH m(A{SAG+d (AJ3A$ȇ!- (ALAhOlq'AAp(I'AP2KA0B'AW A2'A^$=Ap:.'A@IFAV2'A*bx1RA8V?'AHZA 'A#4a*hAОh'ADChAt'A>PAuMe'A.A'AVT AB'A~4 Al 'A6* A`s'AXA)( AD'A7^aL Ax=,'AF3Z ACh'Arg A5T'Aee| AZ'Ay̐ A:u͖'Aal AvM'A+sl A~ 'AI AF&'A1. A{hg'Aɵ A'A~EP A#x'Aabd A4'AmNv AHAAa'A- A Ll'AۨN| A(!A/X 'A`a!A8|'Af!A<&A/4"ASvF&AUy"AM=&AAP""A,&A={Ё)"A7&Ay[:"AY&AQ't@"A\lҿ&A7mWE"A@q&AcH"Ali&A5&Av#Axx~&AMz#A\?&A#B#A@F|&A߉c#Ad͖&A'#AUӗ&A1? #A `&AVw$#A8*&AJX?#Av&A}P#A㼷&A|~#A-&Ad:$ACL#&Aj"+W $Ao&AyQN.$A8l&AbH2$Ap_޿&A 5$Az?#&A D>$A&AEeG$A8 [4&AK4aO$AX^&A X$AN <&A;Cb^]$AR&A=!La$AqS&Ae$A&Aw- j$A҆C&AW0Дl$A|&ABo$A &AUN]s$AXR&Ar v$A6&AUx$A&A}$ADr/&A$Atgq-&A/Ɛ$AL;ng&ACr $A0uu.&AN2$AB۠&A P$A9Ss&ARE$A.&AF3x]$A5b&AT$A&Ajg9$A&A$ASK J&AJOU$Al P&AQH $A0ho-&A`w$AHogy&A'#y$A@%;&A"Y.$A ,I`&Az$A4(U&AvV$Amkե&Aa$Aƴ`w&A3Y$Ani&A`1$Ak&A<$A@H&A@h~%Ai=Be&A&熴%AŊP&A] %A2%&AIi%A/&Aqz+g*%AM&A =1%Aoz&Au.7%A1A,&AEr&AMKu&A= r&ASo&AFҕ|&Aŏ&AmH&A0&A &A&AjC&A,O7&A&A4U0k&A/s{4&Ard&A>='Avn&A'A)>.&ASB} 'AP:N&A'A(&AtM'ATU&A$'A~^ &A(:o?,'Ac&A$KcC1'Ax&A :3'A(%Ld&Aʜ8'A*J&Ae%>'Aa&AwnDYC'AL4&AtUD'AS&AIG'AXX&A.FL'Ahu&AO'A-g&A;M'A W:&A-pJ'A&AlӈG'Al[&A,G'A &A#)(H'Ad͑4&A1 ;J'A0M&AM'AWԾ&A%R'A7&ANDT'A ģ&A=eX'A8D&A&44Y'A0҂7&A*Y'AX&AmvW'Ay9&AvR:Z'A%H'AL>Y'AԹS'AqlxU'A&AWiv'Az&A  'AP &&A6&'A&A I'Asz&AU'A-e5&A@Ѳ'A 8{&Afޮ'A>:5&AmP^'A;&ARe'ANN&Aᅾ'A?S&A3Ԩ'AW&AmP'A^2&AWs{'AZ}&A<3'A}&A]SB'A@4&AdE6'Am?_&A {ݾ'A=+&Ac+K'A)J&Ar-J'AQ\&Akc'AX9&A& )'A̫&AL5'Atm&A({'A&A['A3/&Al,(AkN&A&`(A ;&AU(A8&Ahg(AxϺ7&A\(AF|&ArشA(Aq&Ap(ALf&A,G(A3p&A#vX (AhX&AZ`s (A&A) (A|q&AFѱR(A-&A}(A`'&A (b(A|&A(AT|,&A7L2a(Al׾?'A\(Ah:'A5x3K'AJr'AC'A, 'A'Aεe'Al拰f'AA֭ 'AT'AJ/'A7,'A?'A5_'AD#/'3 'A=R'AlOB'A^q(A1\'A?s(A?4'Af%p(Atg'AnzH(A>X'A=P(Axq%'Ac (A\VF'A@E(A\hBL'AbLF(Aj|&ApU(A8&A(AІb&A](Apu&A29-(A+&Asf/(Al%&A D1(ADf&Az*O9(A](7&Aya:(A 9A&AZ @8(Ae&Ah> 2(A+`.&A.(AHĐ&A%OX&/(A<;&ArS1(A@x-&A,x2c5(A/&Aq$N28(AԈ{&A&=(ATx̙&AE>(AX^a&A<@S@(At&A8C(AJl&AofI(Ayl&A*] J(A Li&A#D9 I(A4Fe&AۊF(A+`rg&AEE(ADHAf&AE(AL]L_&A*F/UG(Ah)S&A ]M(A0MB&A%P(A8?&AԣQ(A"5;&AkVU(A)p2&A#~x[(A\(&As,^(A0Yn'&ACƫ_a(A\'&AwuO5c(Ae1&Aw} g(AP68&Ar6xi(A6&ALU l(A"2&Am(A9+&AЫr(Aڎ&Afw(Av'&A7,y(Aë&Af1}H{(AtT%AA|(ATkt%A[{(A7F{(A'N%A虾w(A\ x%A Cu(ApXp%A?olr(Ah%Aagp(AGЦĬ%A-%j(Ay|%AMh(Aav%A3#j(Als%All(AD7^n%A"/o(Ap:]Md%Ako(A4`%A}im(Al絚JU%Ak m(A)ER%A!em(AKC%A%po(A7%Ap(A%A|Lq(A]%Ag1u(A.$ATr(A`$AӼ1n(A$A-؉l(AP=$ATi(A퉘۟$A׻\h(Ad=$$Aqlg(At>$A:f(Arv$Add(AMm$A7Da(A hWl$Ad:6NY(A\/Vm$AGlhU(A&Mm$A>V(A'j$A?Z(A\LMd$A [(A2T^$A4(^(AZ$AQ=`(A;1$AXNc(At2!$A=R@jd(Ak$ABHf(A0\$A`#Hp(A,~ĵ#AgCmp(Ar4#Aq(A FZ#Aln"r(At#Aq(A{#Al(A|y#AbpKAf(AxLA#An+c(A,#W#Ajh(A]B#A8I-p(ApǢ#A)[s(A($]#Asz(AHT@}#A7|(A,ڇ#A~Q(Ap#S#A (AJ #AkQf"(Ax`#A gp(A Ԣ#Asfp(A#AfӅ (A$m3q#A~V(AxA#AKdї(A$`V#A^Y(Ad-Q#A D (Adm]#AAh(Ax]#AzlM(Aܣyp#A(Aȭ#Af5(Aƫ#A P(AIE1#Ah$-(AV#AY@ϰ(Ar-m#A!(APgqӡ#A#A(AQ#Ay"(Ad:~p#AJ-(Ar#AtP(Ay@v#A4P(AdG#A)A4un"AA b_A)AAis)AAk=#)A0JjAOU8v)A۬|AT[)A(2"Ad)AǩJ/Am)A'CڝAr )A0ȊAG)A8AA׌)AA}0H)APm~ÅAW\R)A*"Awթw)A(רVA>)D)AU5A=ܗ^)AYzAF{`)A,jA_\V)Ay 4eA]:q)AcmA)APjnAjm~)A`xAxOZ)ABzA֥)AZ1xAX)AWvhAUU z)A`TU$aAIC**AhLAv@> *ALOAAb=G*Ag14A~ĭ*AЬ>y*A?՟!*A$Ayjp]-*A8܊ A.[<4*A#ADK@*AA&C A\zJ*A74An6O*A8F<AѠaP*AHKAoN*A|XARZڧH*AA~G*A.>A;51G*A@K9XA9A*A|0%AO(#=*A(xRALY?*A0VgA(ʰH*A(rtAE^ I*AHY[A?6 3}M*A6AB7T*AXn! A;^*A{Ana*A8&A-~ n*A!G\hA~u*A`eXA- *A8CCA|q*A[)5A`Q *A@-A}k*A O'A*A &A5"̧*APbWAg[#*Apw A+*AR>Acfۓ*AhAA:Jǁ*AxAuF=*AAv޲*AH*WA'7ѵ*APAF@A_h*AB`A2Op9+A̴{Au+AhB%oOA_x4+A`+A<>+Aj!,A@+AA C-+}+AV8AǦy+Aw+A:Z|+AA'A ~+A3#AZ1Bn+Ao&AU+A`sy&A'G+A!dS'AN2ݐ+A%AJ a+A5dAT,+Ah{ULA!p+ALAwlF'+AkV A\,H+A@ AJ=2+A0Nd Ae#+A{AR+A?A =+A` AfgKӅ+A 2TA+AiAy9%+A AS,Z+A;Ay?7b+AWALJx+AKAo +AA,+AdMA 3>+A@,ʻA|p+As~ԶA"c[o+AX.GoA9\+A`Am+ANՓA%"+A`G A+Ap:@Ag'+Am؏A(+A ^}AY+AHsA m+A\[VAao&+A0qزOA,JTS+A;9<Aa{+A.jd7A6+A*)0Ad.9+AxF.ALY+A()A1Ip^+A`d$A2#+A0 &Ah*jY\+AØA)" +A> AG+A$AEk=+A@+AA,AA+,A`vRAR;>,A`RAc/*%,A-AԊr1,A}A ILB,A@yAsDK,A+mA-\S,Ai_hA2 ],ApGGAu)_c,AP׃A6g,A"A(l,A]AIsSp,A`OAӈQr,AoAVvlu,AG%Ab#y,A LA,|,A 'ASpG,AIA p,AwهAy&U,Apq_A67,A0/?qASǭ4,A)|Am7-,APjTA'%8:2,A@E9A\y>,AAL^m,A(hKANyJ,A`.A;/ ,A#A-G,ApAe[,AT Asz,A1 A:< ,AdA䰖,AGA_,AP++-A)hf,Ap:-eAo,Ag1y@APq,AA?vь,Ah*VA6ˆ,A<A*9,AטA,A [;ZARxm ,A+ޱA[,A A" ,Ap*AÙ`,,AFlAOe,A/ A~hd,A aGAq/,A1%UARST,AUA$߿,A/SyAN)C,A@zA!V,A UeADH,APd>NA:$,A0m@A#,AG0A/pF-A.C&Akcx -A_ID!A5F--ApIÙA05-A0X^&AĻ!-A^&NAqb%-A`1qA3.)-AW Ag7$0-A0B'A1 V9-AЍXA_6A-A/A %KB-A@dgASF-AR]AOF-A2>yA:F-APU;6A~,G-A@. A$L-A hACH@0N-A A8xO-ABX`YAW-A@ydhA\"mY-A ȳAx,A8+AK+As`HK~+AJ9*Y-Aڸ+Aoa2A׶Q+A`#7Amapnik-3.0.9/demo/data/boundaries.shx000066400000000000000000000001641262555547000175320ustar00rootroot00000000000000' :Fظn&3VBAYD+9A2&\&[~mapnik-3.0.9/demo/data/boundaries_l.dbf000066400000000000000000000017141262555547000200000ustar00rootroot00000000000000j*WUIDN F_CODECMBL_TYPENVTR_TYPENTYPEC USENRIVERC 25374900FA000 0 0INTERN 23N 25369900FA000 0 0INTERN 23N 25370900FA000 0 0INTERN 23N 25373900FA000 0 0PROV/TERR26N 25380900FA000 0 0PROV/TERR26N 25381900FA000 0 0PROV/TERR26N 25356900FA000 0 0PROV/TERR26N 25382900FA000 0 0PROV/TERR26N 25351900FA000 0 0PROV/TERR26N 25383900FA000 0 0PROV/TERR26N 25350900FA000 0 0PROV/TERR26N 25384900FA000 0 0PROV/TERR26N 25379900FA000 0 0PROV/TERR26N 25386900FA000 0 0PROV/TERR26N 25387900FA000 0 0PROV/TERR26N 25385900FA000 0 0PROV/TERR26N 25388900FA000 0 0PROV/TERR26N mapnik-3.0.9/demo/data/boundaries_l.prj000066400000000000000000000007451262555547000200430ustar00rootroot00000000000000PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]mapnik-3.0.9/demo/data/boundaries_l.sbx000066400000000000000000000002041262555547000200320ustar00rootroot00000000000000' pBA3=IwyA< Ɗ O2 BNb,mapnik-3.0.9/demo/data/boundaries_l.shp000066400000000000000000002723141262555547000200450ustar00rootroot00000000000000' fI=3AywƠ 1ſl8AOy?I;g8Ag"_de8Am-_Z%[a8A[\8A u,BY8A|^Y Q8A?Ay+sN8AxkEeprM8Aٽ*`cJ8AӼl%5I8AC[vdE8AŪao"i܅C8Ary[kA8A63Ċ@8ALYT:q>8AzXGjƟ<8AJu8I4q<8ANXXݦK?88Aj@{/.rD58A<F鷬\28ASNda18Aܡbxi1"%8AG>vgp7[L8A0BDOO&i8A!sy8ABtYP8A] '!8ASNj 8A,PL 8A}9{y% 8A3k:8  8AR VL 8ACAbm z&ɼR7A2Ɍ sHM7Aӕґ Bf7ADI 7AߵS 7ArU 7/!7A bIH Bh7AX;!N ɵ 7Au3ke RK 7A9q ̀]7AE)ꂙ j6*7AA$q N7AЙ E)}07A@5 yrZ7Ao= ;7Aa@ ꣿwF7Ao#ߒX u2ρ7A/ 7AuD 07A`$ (7AKy'A 3mͼ7A-,e.a8 3<7AY؁S BJ 7A9)#e =67A@b 肅,7A;6|B ~7AYxU q7AVho7A=*"_~Ӏ+{7AXeho 9Տw7AB[!v7An^%!kv7A(&4v*Em7AC69j]̀7g7AI>Y&Jh7Am|fbAy^7Af\ [}cT7AV#zq~S7Ah ݡ](R7A(Šδ;hO7AwڇJM7A٤r%rH7Ax|G7AC唆F7ALfˀ&lE7Ax#D7A t,MXv;D7AJ1=Ͳ" C7A[ hKgB7A೷EPA7A 62bZA7AɯAlA7A[?[>7AH<7AN Znن27A8*Qx'7Aox`X_)#7AAJ`6#6!7ANamhZ9K/7AHU=l 7Ak>jy27A `Q7ASu7A) Bhw7Akŋ7AP#2ց 6A@|AW6Axݛc.STy6A6Af3476A"3$6AHn5A6A27Rf6A:HVq6A'i<ᮡ6Auǩ>ô3QӠ6A0@X6An_ CY0.6AtZ/EZ@6AxHGMe6A`4WIc-Ht6Ao]Kf߭6AD\YM_JҚ6AD9KO6A#3Q#6A[wSd?6A*TGc6A(°VT6AyqX=6A9^(Zpє6AI[1&6Ay]P$6Aó_[qK>6AM`;b6A-`)b6A*hcwq6AreEBώ6A-f26Ag%?6A O6iwn<6A`EЁjv7Ma6Alk6A0gslf'6A#˕)nNaΈ6AzMoc6A"|hpm6As?yq3Io;6Aor9r{{]_6Ah}s:lB 6A!pt"pw6AHhZû6A8:vG#6AQ>w`-x6Ayw(C(:A"4&Ơ = ;A^,J!];A{ŏiԂ;A:2Dޙ;AfU0;A3k:3`r;A) ` ﮙ;A0X܉;A?T/;A* bI. ;AzD0Qxfo;A4E2]LC%;Amj4kF!;A(4. ;Aa]4cb;A6";Axipx;A9T?'N;A; C;Aِ\%-J-5v';AngPxbw;A"wy2;AwJD;Aܘz9;At 0;AoE;tOc;AzU,c?V;A_{Q*0Ҟ;A2;7;AoSB;A ڦApeѓ;A{N/;A5}߸J|"`;AA .O;A{aNO00Zv;Aׅ;לTt;AamH$@)t;A`1QII p;A^hAW_b>o;Aq& whg`&n;Ap|lZn;Anm;AyqRzm`m;AWDt*]m;AXtRm;A˾'mt+`+m;A.06uA&[k;A}l !aj;AfRAWj;APxjPj;AD,j;AEL1ű@fh;Am aҒlff;AN H-e;AHڢo?e;AfRc;A9@,2Kb;A!ߩ]UYf`;A4}`;AeAL 0UCg`;AaLu6_;ASO#^;Ahc^*( ^;AzsY;AS1empXeX;A W;A0ÑjF4PW;ANKU;A 0+H4xT;AN^NT;AI} |q[P;A=!mhN;A ,1M;AX5@M;A :jP"L;Aw׃;<F;Aab!K?;A<>'W%W?;As0>;AfڲC)>;A+XC <;AC}ޢ O@u;;A/ U}2:;AS'βO8;AgF:7;AbJ3%A4;Afsyh1;AEAGXE/;AY2W.;A%UC-;AHNM(;AIl THqh%;A?z%#o}Z$;A&Rc*}@;A(F/Jө;AڋQ*c;AwTt+;APP[T;A/'dj;AkLl;A[ t:;AL*X;AYEuO> ;ARC3;AdN]W^jP ;AlEChc;A0i;A=BaGn:Ab :A]$D܅:ATo :AX3zw{:Aʑ7~aRw6֋:A)w:A5@aKrJ:AįPWg:A0 ΕF:A,dmC+Z<:Al믠3¦:AЮd:A*.˴$9:Aſv:Aq _:ARY)#Gњ:AYy*=:A5B) qt:AأGLd^:A^'8BJǓ:Ax0L ۍb:Ap3^:An::AV":AJ/ɑ+$C(:A"4&bکv8AUwPR/C(:A"4&C(:A"4&{0^Ʋ:AzB':A㖤I2:AR\N46M:Av\Fi:ApJ?Hx~:AE U>C~:ApsV뿷D}:AX6WX[{:ALlj`<z:AlwrbQ v:AP(o02u:A4{r/~Gt:Agwym:AHL? k:An$bȓ*h3j:Awli:AsG"q}o39AY PT9AF?SQ9ARv~9A8f9A<"  9AU L9A. r9ARG Fh9A\ey9Akd%tc9A"c<9AcW+S9A޻//E9A<=I8H(9Af8m9AJɊ8ct~9A 9Ŗr9A6kG9ۗ>9A2y@ggj9An0JSrj9AeS%9A ?VwDp9AQ۠<]]}F9AWmj磶9ADt~Q9A>‚,`9AI>5l9ATy=29ALۜѦ 9A.gp<Ԏ9A^v]t]9AuDZyI@89Ae>@]֣ɴ9A ډ9AMHݬ(}IF9AvR#9A]3gL b9A8][j9AeG.7e]9Av!~c9Ahz9A<]0aY79A/iW69A^qfǮ9Ag,2v B8}9A84,Nc9A@dbtZ>9Ad'f&_͐9AAW'cU9AY|W,Ȍ9AL 1Zʜ9A xH>jx9A]` GSD89A㠰PcF9AvuVkNu}9Afun^F:z9A=lzwfx9A2&'nZ?w9AUmpq9AI30ßvl9AWH{#a#i9AM`f9Au:g\c9A,Ka`9A K/&zGh]9A s!@[9A/NZ Z9A|\T02gzoW9AۺMg?QU9Am_4R9A %PTO9A6`^5ɯGO9AE%͇0L9Ab5t` I9AvPyF9A D9Any@9Aklw?<9A'(=8<9AeI6'+64wQ79AIUv9?Ǒ39ANFRMd09ALiNȹ09AYP1,9AW[;)9A*`^gE%9Aw1sRB%9Assr-.6%9A޷s[!9AJZv?_9A]_{ĊkF9ABF׎9ATܝ[nc>l9ADKux|9A( xNo69Aμ(? 9Av+u9 9A|j#ҽ?4D 9AzS"9AR.?.C9AfQ8Ak: saD8A bs8AߐM8A>1*N(8A"8oRu{8A^fț ˪8A 9I%#Y8A1j] E8AH *߼8A+4Q8AN,@*2}8A({.,O|f8ABron,ɰz8A-L.KGY8AXDt;6D 8Aͷt'Ca2z8AEG0L8A {R~ւ8AmXɤ8A}"<_lz8A{LCf-M8AIm:T8A%At>8AY{wл8Ap=xe8A>l(N8Ah B9 8AkF)~Ȣү8AJX΢m!B׭8A #ݳ8AG} -L8A!ўK8A54h-#C8A.%R,ZZ8Aұ!lڣ8A! fn8A!&BS8AHZ30`e8A1GP1q8Ae<'%\=V8AdjجM8A Id 8Aa;M,!8AMx/3PA8Aꏷ &gԨH8A@X(48A% n I8A*cw8Aj$ֶ)8A ^8A$k@ P}8AǢP Kf:I|8A$$-7z8Ag5*?T~y8AY+W/y8A:,jWy8A8㍜,y8AUwPR/bکv8Ak!bکv8Ak!_E8A,bکv8Ak!v8w8A"uM8 x8Au@t8_y8Au88A\u^k}*8AZR@T5Ԭ8A_,=QE՘8A(V8A՜88ABE_E8A_8A]oB48A |0v8A)~8A,?,~_ɺ8Aw}?U8Aٹw58Aj?v!8Av8A=_;v8AZ_/v?8Au;8Awj?8ARi_ 8AL_ir8A%gx8A|? c38Aкߜ]8A?L 8AԺK_f8AݹI8A4%F_8A޻E_28Aݺ_C/8AC8A_C8AeA68Afq?_ݪ8A]s9?F8Au6\8A*2I8Aƻ{2?8AX_0߿8A׺0?m8A.W8Aj *8Ah?&_s8A<&_8A޻E8A8ߟ8AA: 8A*8AY_8A̼L8A__t8A?38AȾ" 8A# 8A008A{ג8A>D+8A%9_8AWb]8A?_@ڎ8AO_98AQ_/8A6=8A?.>>8AT5_8AC388AQX8AsMu8AcNs8A&_Kn8Am<8AtC?8AsI?U8AG S8A[H8AʿO_8A~D?8A$\8A_9O8AML8A__EI8AQAI8A3c?C8AF=8ARVL.8AC_$8Ar#8Am?r8A+ED8A?yi8Ayr?8Aayq8A_ye_8Ax_mc_݆8AxjT׆8AgTֆ8Ag[͆8AHcX͆8A(c[̆8A_b^Æ8AhH^8AhVp8A?>Vtߠ8A߰N8AW J{_~8AM>~s8A>9T8A,?M8A(u98A??%8A__8A_P_҅8A ͅ8A_8Aq8Adu8A?l8AO8A9 E8A=8A"_<8Ab,8A?28A_8A8A#nj8A_ψ8Al?_8AJ_߄8A__݄8A(_݄8A{ڄ8Aqv؄8A5ׄ8AH_/Ԅ8A_Ԅ8AFk?̈́8A|Ʉ8Aߌz߾8Au8Aߕs8Ar_8A_dj߃8AX8A|?W_8A*kV{8AT?{8A#To8A_O^8A8G^8AF?]8AmFA8Az8>8A 7?,8A?S.$8A?+8Al?)?8A?8A8A?8Atߗ8A Ń8A48A?8Aj_8AD8Aߓ8A9s8AN?H8Aߪt8A]h8A`]8AG Y8A =8Ax _8AF#Ђ8APЂ8A*_J"_8A1v8A~0t8A}&l8Az:c8Av4Q8A>?cp"?H8AF_l>>8A|_=i)?>8A_h8:8AgC88Af-+8Aa98As\68A\|[88AZ+?8A gZV8AY;؁8A$BGՁ8A?BQ8A_7W8A%H߀8A0#Oa8AX^8A_]S8AW_dQ8Ai=NK8ATQA8Au!Y_58A W18Az R_!8ARe8Af]8A?b8A?w8A_tV8Aҟg8A\8A,d5A׽?دH_e5AF6>5A_XS5A[I?`5A#4H_e5A_Kb5A-_g__5A1@?V5AoNJ5AE55A~??5AĽxd5APėZ?5A_Yfɞ5A_nO5AK_5Ac`_~5Azao5AԾ_^_[5A \X95AW5A_s?5ADPӝ5ACXߴ5A̓l5ATM|5AӾ_%f?\5AoA5A-~V&5A׿_z|e_5Aؿ?a{W5Ayd?؜5AqwX5AWߎuQߦ5As|ߌ5A׿Nqe{5A}ooh5A=mX?[5AA߄ktG5Aܿib_05A;gv5Aee5A dsٛ5Abf5A?ap?5Af_dk5AZN^oH5A_ ]$5A[w5AjZp5A7Yk_ߚ5AXlϚ5A/_Wv5A_Vd_5A?{Ts_5A?Rj5A(3Q5AOOp5AI?Nm_5AVLg5A?Ji?5AO8Ih_5A0Gy?5AߪEbߴ5A*Dl5AdBk5A_r@l?Ś5A>y?ʚ5A_&=Қ5Ae;ٚ5Ao95A!L85Adx6w_5A 55A35A15A0ۚ5Ax/Қ5AR;.lɚ5A?-_5A_5,}?5AC+ߩ5A?)x5A?(u5A?'5Ae&{5A$5A#5A ?!5AB߈ 5A5A_Nߍ5A\ߓ5A_{5Az_5A_"5A]{w5A_$g5AP5A}_;5A__ 5Ad_5A5AZ ș5A]?W {5A ? n5A\ߒ &5A _5A И5Ak |5A__<5A5AG_5A-X5A?-R5A+5A_5A_M5A ?5A _MY5AR55A_5Ak5A%m˕5A<#_5A_5A8_5A }5ACp5A+^5A+_O5AaA5Ah,05A?5AS 5A߅5AM_a5A͔5Aef?5A_5Ap5ACM5A|75A5A}V5A`_?ؓ5A g_5A_5A?d5A15A_5AMK5A`?5A9O5A8_k$5A__5Aˑ5Ap5AZs5A _d@5Ahf!5A`5Acߴ5A`n5A05A_5Au^5Al5Ae5A?e5A~d5A^! d5A]?d5A?d5A d5Az_d5Aߓd5Apd5A>?d5Aߙd5Ad5Ae_d5A ?d5A&qd5A>?e5AT  ?!e5Ao He5A3 re5A ߔe5Avr e5Ae5Af5A,f5A;f5A"Jf5AP[f5A9gf5A&_vrf5Ac߅f5Aqf5A_f5Af5Af5Ag5A?Fg5A? _lg5A\?#"?g5AS#g5A-?%g5A ',h5A(Lh5AO*Wh5A*_h5A?+mh5A_-rh5AyH/_h5A461h5Aw2ߡh5A5?h5A6h5ATi8h5A%9?i5Ar;0i5AA?<\i5A4N>ߊi5AY?i5A_q@i5AdA?j5AC_Kj5A_D߉j5A_hEj5AAF k5A\?fGXk5A5Hk5A?Hk5AIBl5A%Il5AɿJJl5AJ m5A;KFm5AKm5A/Lm5A~?oM?m5A/QNn5A_BO?In5A^Pcn5AQn5A_jR_n5AпSn5AT_n5AhzVn5A#X_o5At_Xo5A?Y(o5AIZ>o5As[Ro5A׿[ho5A?\_o5Aa\o5A?\o5A]_o5AվW]3p5A`]dp5A]_p5ANQ^?p5Az^p5Au}_p5A[_F`p5A?/ap5A?ap5Afc_ q5AϿ_dq5A!_9f)q5A:g7q5AJhGq5A!\i_Wq5ACj?lq5Aſ&k?|q5A>kq5A?lq5Amq5Aھ?vnq5A0oq5Apr5A?pr5A[qr5A^rr5A_s?r5ACsq5AؾDuq5A;vq5Abwq5A"Kx?q5AԿyzq5A^zZq5A{?q5AM_|!q5A} q5A`t~p5A _wp5Aо-p5Aڀ_p5A__[pp5AɁEp5A?( p5A~o5A__o5A_o5Ag_Jo5A6_?o5A_?n5A_n5A_rn5A~_>n5A>Om5Ak2m5AҾ??tm5A=_Ym5A?m5AWԁl5Av_l5A_^l5A0_!?(l5AY_Uk5A?Â_k5AHk5A[_aak5A9k5A@{?k5AK?j5Abj5A#j5Aӿj5Ayj5Aֿ@jj5AHZj5AMj5A?IBj5AM=j5A_6=j5AC_E_Cj5AP?Jj5AK>Yj5A?k_hj5A?Uzj5AӽOߒj5A_j5A87j5A_3k5Ax?k5A_l5A?rl5A[l5A׽?دPI=3A͸ߣkt5Aȟl5A׽?د?m5Ak?n5AyVn5Ac?o5Akp5Aм p5A?%q5Ayq5A@ r5Aߏor5A޻e_r5Avr5A?6?-s5Ay?_s5As_s5Aߨs5APes5Av?s5At?t5A1}t5A߯?1t5A?|_>t5Aȼ_zLt5A\ Yt5A__ nct5Acs_gt5A7Iq_jt5AP&kt5Act5AŻ?m?Nt5A8q+t5Ans5A:?zs5A׻?6"n_s5Aw%_s5A{){r5A-~r5A?.wIr5AAf2r5Aú5nq5A`?s9hTq5A_F>lp5ABjp5A8Fwp5AYEG_5Av_5A^5A_?^5At_ߖ^5At^5Aƹ_N^5A\2^5A)?_]5AP }V]5Aqz\5Aι?x}\5Au\5A+s_[5A۹q<[5AnZ5A_?Bl_mZ5AʸjY5A)gߐY5As_e"Y5A?bX5A/A`FX5A޹^W5ATP\bW5A$_ZV5A&YHV5A˹W_ V5Ax?WU5Am?cVU5Ae?U7U5A6U U5A!TT5AyuT?T5A$T?T5A_S? T5ASS5Aڹ?S߂S5AS8S5ASR5A_0TR5ATR5A[,E5A(8_D5A_3?C5A?1_C5Al.?C5A8,B5A*_nB5Aκ* B5A׺I)A5A_( A5Ap(@5AS_'@5AM'?5A?&?5Aͺp%?>5A?$>5Aк_v#?=5A?"!<5A <5A%_)_;5A]_;5A_x_:5Aź:5ArF߅95A85A߱!}75A3#?65A_#z65A^$s55A[%45A#?% 35A=?%?25A_%?Y25A &15Ad_Q&15A&05A' 05Aº"' K05A'/5A& I/5A"&?.5Aƺ?S%?F.5Aݺ!$?-5AZ?!,5A(I ߾+5A$_u?*5A%_=8*5A)5Ad_9(5A?"6(5A'5A2t#'5AX &5Ar&5Aa45AG @5A(25A@?RJ5Av?Fq 5Aeg 5A<w 5Aoh 5AҾnh 5Aݘk 5A8t 5Av[@ 5A)_| 5AݾBrl 5A|5Av@5Až? 5As5Aߝ5Arm?5A}h5AE\{?W5A`y?H5AvA5Ayuy05Aɿdr$5Ap5AxNn5Aok|_5Aֿߵj5Alin5Aȿ_g/5A _e5Aݿ?e5A>Nc?J5Ab5A?ka5AͿ`5Ap_5Ai=Z?5A߉V4AXT34A|jS_4AhMJ4AChKd4AG4A_B4A?@14AK<?L4A74A14A9+?<4Abi%4AV_"4AU_|4AH4A_4A_4A9 o4A4A|; 4AXor4AFߠ4A6?4A?d4AN4A[_4A`<\4A_/4A4A4A!_d4AӶD4A$?ݲ'4AFݮ 4Aު_4A4A_T_4A_4Aj_4Au?d4A)_4A1 4A4A4A?+ ?4A_ {4Ay_ 4Ann&4Ae?04Aa_(4A^#4A#[\ 4AZ4AQW4AW7V _4A?'U 4A-S4AQO4A)N_4A!K4A_mH4A_%F*4A-ND4A2B04AA#_4A_|?>_4A>-4A3>64A[=~4Ak?J=6?4A?]<+?e4A5;:4A];9a4A?J;A4A::X4AnB:D_K4A_894A7"X4AMߜ6&?4A5*/4Ay*LM4AE!X4AhQK4A UH4A-jLp4A A_z4A_% W4A ?Yn4AU$4AJl?74A"U4Af?c4AT4A4jM4A 4A?s4A[l4A_4A4AR~4AF_zu4AT?4A4A ?W4AU_|S4A[4Ah9_}4A_4Av04A4Aq~_4A ?i4A4Al4A_44Ac_)4Arvߒ4A_?_4Asd4A_M4A(`4A֭4A?լ4A?4A߶x 4AQtc4A"_r4AZcԗ4A P.Ӌ4A),vN4AYN!" 4Av*ߟQ4A }|4AܢXuUy4Ai(t@w4Aw. [">t4A.8r4A &OCn4A_j4Av X(i4AIhdg4AlUd4ANc4Aȟb4A:bb4A˜oJb4Aě[b4AdܑHb4Ao b4An! a4A%\+a4AL ,+0 a4A)~1{a4Ao('7 P?z4A =4As 7I4A_f 24A 3AR!-N3A.߀/Hߎ3AT0<E3A_19?3Ap3N3A?B4=_}3AA5IT3AC7+?23A8D3A;@z3A1??<;3A@?F߬3A8>E3A_<H&3A;B3A2;S|3A(;93A_;T_3A3<M3A?V==i3A=S?3A)=C?3A=E3A߭<\13A;o_3A:I=3AP8ߦ7A7AY7AY?7AS 7A!B7AQC7AjD_7A*_E7A?E_7A'/F7AqF7A_2G?x7AjnH?f7A+IK7AI77A#J 7A_K 7AI_dL7A$M7AM7AN?7A7ZZv7A[k7Al?r[O7A7?Z\E7A\?77A 4]!7A]7A1^?7A_?޾7A_7A'`7A{a7ACbL7A?Ld"7AQe7Asf_׽7A}g_7A+_ho7A j<7A3?uk7A_l7A!_n7A5p07Aj/r?7A:_s7A?uH7APw_7Auy7A7_{7Az)~7Ana>7A&7A߃͸7A?ƅn7A?ԇ@7Ap_̈7Aa_;ҷ7AZ7A\\e7A 7A@_۶7Aߠ_7A_a7A*%7A=/_7A?)v7AwܖH7A5m_7Al̴7Au?^7A;_^7A=ѳ7A!7AT7Aߘ?7A,_y?7AI_97Ad??Ʊ7A+ `7A?>.7AN?)7Aͣ_7Af?# 7A?27A[R7A/e7A?7A߾ذ7AE_ˤ_ư7AZ?7A_;7Aߐ7A?_q7A a7A?U7Aq0?C7A_j?.7A7A?7A?7AQ7Ah߯7Aԯ7Aį7A?_7A%!7ANL7A_m߉7A{7Am7Aw?ߨ`7A N7Ao2>7A?k07A7?7A[_ܩ7A7A?_7A@_eծ7Aî7A?7A7A7A?T7A_xy7A.n7A_a7A?R7A_B7A667AM_-7ABm7A?7A7A?7AK_7Aa?-7A5Jԭ7A?p?ɭ7A7A_7A?7A? 7A07A?Rߋ7A/_7A^_v7A?k7AE_7A0خR7Al 07Av'7A!7A߯7Aۯ?7A?7A<-7AG7Ag۬7A?Ҭ7AƬ7A7A_7A?7AHߠ7A]n7Alߗ_7A;7Axͱ}7A??p7A<0?f7Am?R\7Ak?O7A_F7AU<7A 27A= (7A57Ah7A7Ad_7Aγ_7A_7A?7Aݫ7Aԫ7A˴?̫7A_ī7A+?7AG?U7Au7AK7Aӵߜ7A?7AM_57A:_{7A߾r7AZ_f7A 8?]7A_rX7AP7AH߾B7Aa87AH.7Av!7A?7A?? 7A_7A7A7A?+7AG[?7A_ߪ7A+_ת7A3Ѫ7Ap_x_Ȫ7Aջ7Aߺ7A^7AP?7A@?7A/_E7AK_7A(н7A?7A _Y߁7A?|7A%־u7Al7A?ud7Aǿ\7A_T7A_qK7A_E7AN=7AGo77Aj?17A_)7A=_$7A~_7Abߧ7A7A? 7AOz7A7Av7A7A*7AUک7AQ?4Ω7Aé7A7AB?7A7A_7A=7Aߘ?7Aq7Aw?<7Ay{7A9p7ABh7AVa7AߢX7A?Q7A6GL7As}E7A?=7AG_97A.37Ai_-7A)7A?$7A 7A!E7A??7AR7A07AR_`7A?7A7A7A_٨7AaШ7A$ʨ7A_7A߸7A;?߰7AWߨ7Aߡ7AM_?7A*7Atߌ7A7A_|7A:]s7A(j7AB?\7A%Y7Ai?V7AO7AJ7AOD7Aq;7A_77Ap-7A6E?!7A_7AX7A^07A^J?7A7A??7Aal7A]_7A__ا7A{a?Ч7A"ħ7A 7AP_7A?7A)7A?7A%7Ac_7Az7A7A_E{7Aߓq7A_h7Ac?Ha7Az?Z7AS7A'_H7A8O@7A_47A_+7A =_%7ARu7A_7Ay_C? 7ALX7A__7A7AM7A?7AO?7Au7AW?ئ7AR_?֦7A?ͦ7A&Ħ7Ah7AD7A_?7A_%7AWD?7A`_7A.7A7A7A7A&߀7AML}7Ah_ou7A_r7A_k7Aa7A?_[7Aj_iU7AN7A__J7A?E7A A7Ap/97Ax_c57A?17A6_)7A?7Am;7Ay 7A_7A_7A$27A~7Amߥ7A\_ڥ7AХ7Am˥7A*ĥ7A7A_߶7A_ 7Ar7A7Af ߍ7A_7AHw7Am7AF;b7A\7AU__W7A^?P7Af__J7A)S@7A??07A-_(7AT"7A?7A?7Al 7A?7AZ_N?7A?7A7A7A? 7A:<_ڤ7A~դ7A?_Ϥ7A@_ɤ7A?Ť7A7A_G7Aiߋ7Aߧ7A+_ߡ7A7A_%7ACQ7A}7A+{7A]s7AX?+?k7Aae7A~`7A_W7ALP7A??K7A6G7AQA7A_97Ag17A? _+7A_>$7Ap7A7A_7A_$7A߈7A?7Aa7A?7_٣7A?q?ԣ7Ạ7AA£7A,_ 7AA_7ALq_7A[?7A7A"?7Agx7Ap7A?k7Ac7Az:V7Ax_R7A?E7A77Az'7A_7A? 7A$7AV_E7A|7A֢7A\7AHbߦ7A N7A7#(ߦ7Aߦ7A_7A_7AH_7A#_E7A,xy7A^?h7A)_I7Ano_=7A07A?_#7A_7A0 7AbN_7A7AR7A?ܡ7Aw͡7A?[7A7A7AtA7A|p7A^7AK7A?=27Ad,7A??$7A7?7Ai\7A7A_?7A?ݠ7A?Р7AƠ7A_7A;7Au_O7Ag?7Ar_7A?7Ax7A'7A?7A?y7At7Av1h7A*Z_7A2eJ7A?I7A0D7A?7A?=7AY_:7A67A37A+_/7Ac!_+7A2'7A;?$7AO 7A`7A_7A_7A 7A7A_?7AQ?/7AX_7A?ڟ7A_ϟ7A_˟7Aǟ7A_7A _7A>7A _W7Al?7A7AN_7Ag?7Ab?7A {7A s7A|* k7AKF e7AU `7A;n U7A L7A E7A. 67A! /7A %7A 7A?+ 7AM  7A?p 7A 7A~ _7Am 7A ݞ7A_ _Ϟ7A$* Ğ7AIP 7AVf ?7A ?7A_ 7A> 7A*_ ߋ7A. 7A_ z7A_ s7A l7A1_ a7A#% [7A4 Q7AtM ?C7Al ;7A?y 47AH 7A? 7A  7A_ 7A 7A _7A 7A ݝ7A ?֝7AD? ?ϝ7A? ȝ7Ag _7At 7Ar ߯7A9_ 7A) ߜ7Am6 7A?F 7AO _}7A\ r7Ah g7AAz \7AA_} S7A I7A3 ??7A? 67A? /7A ?&7A 7Ax 7A? _7A? 7AE 7Av 7A] ߜ7A ?Ҝ7A_ʜ7A?7A17A2߯7A_?7A]C7ADߒ7A_E7AvN7AUw7AYdo7Agd7Au_i^7A_f_U7AeQ7A hF7A_j@7Ah77Ax!7A?7A7A)_7A_7An؛7A͛7AH7A7A7A7A_7A*7Aa_ 7A;6q7AG[7ANP7A Y=7Ao07AN!7A7A?? 7A/7A ?7A7A7A߷֚7A?˚7A]7A_7A_?7A_7An?7A7An7A\7ATT7AG7A?+<7A557A_G?*7AmV?7A?j?7A|7A7Ab߮_7A7AKٙ7A{ƙ7A?7A6?7Ag?_7A_7A7ACu7A4Rh7Ae]7A?_S7AߜG7A?;7A__/7A%7A77A _ 7A?&7A_B7A_Z?7Alޘ7A[_wט7A_w_ɘ7A%7AYߒ_7Afߧ_7A7Aߏ7A7A w7An7AH*g7A=a7AiAZ7AT?T7AV?G7A_m?7Ax_57A*7A?7A~7A7A7AL7AV?7A(?7Aޗ7A?ח7AT ї7A(Ǘ7AA?87AP߮7Af?{7A7Aߊ7Ah߾7Ax7A_?o7A*?_f7A\7A?_P7A_*E7A>;7AW?27Aip'7A_ 7Am_7A_7A 7Aj7A/_7A 7AQ_7A7A_7Ai_ؖ7A&ϖ7At5_Ȗ7AA7AP7Am_7A_7A07Ar߫_7Ac7A_?7AK_v7ADj7A_9a7AbY7A?yN7A߭A7A&?27A\?"!7A__7A 7A?7AG_7A?67A~^7A8ە7A;Е7A?ɕ7A7AL߶7A_s7A+7A7A7AK7A/v7A?n7A?b7A8W7A,?}L7A@7A_27A+_&7A\7A{7A_ 7Aw7A 7AN7AJ_7Au_ޔ7AӔ7Aǔ7A2I?7AGv_7Al?߮7A1_ߠ7A> 7A| 7A 7A {7A/!j7AS!`7A!?V7Au!_K7A!A7A}&"57A^",7A,"?&7A^"7A|" 7A_=#7Av#7A|_#ߓ7A $ӓ7A;$Ó7A$_7AR$7A<'%7A_Z%z7AX%c7A%N7A&@7A'&37AuT&+7A1g& 7Aj߃&_7A&7A&7A&7A&ޒ7A&˒7AD'߾7A]?-'7AV_8'7AE'7A^'7A9r'r7AF?'a7Aߞ'P7AC'A7A'67A'_*7A?'7Af?'7A '7A'7Am_'7Ag'ؑ7A_'ȑ7A'7Am_(7A'?7A (7A(?7A?(s7A(?c7A`"(Y7Am_!(N7A7#( @7AY |}8A>{ |}8A(":?|}8Azh}8A>Q}8Acv?P}8Aa9}8A}8A|8A3_|8Am;w|8AҬ)|8AګH{8AR{8A}{8A >{8A߭{8A??z8A5\z8A?z8AJy8A4?y8Ady8AǮ,?x8ATx8A?w8ADRw8A)?v8A?Gv8AO_u8A_xBu8A?wt8AQ:t8Aĭs8A_c_0s8Ar8A-ߋ5r8A^?=߱q8AVq8AS_-q8Ap8A_Hp8AĪz]p8Am|?,p8Aլqo8AЪ|o8A0ho8A,߄o8Ag_fo8AJk?o8A7o8An8A=?n8Au_n8A??|n8A_$_Un8AN?6-n8A7n8Aū?>m8A$zm8Aj?)m8A_l8A5?l8A\l8Au_l8A?k8Aӫ_Uk8AӪ^_ak8Aīk8Anj8AMej8Ab8j8Ai8A ?i8Ah/fi8Ag4?(i8Aԫ?E h8As?h8Ach8Aɬ?#h8Ag8A?߯g8A6}g8Aͩ _9g8A׬+?g8A7S_f8AǬ??f8A? Xf8A)f8A_e8ADe8A__F e8A_?He8Ae8Ad8AIߛd8A9d8Apd8AȮ _,d8A{c8A\c8A7Cc8A®Bb8AĬb8A_$?Yb8Am_ϲb8A߫_1a8A::"ma8Aߏ_%a8A; `8A1Ҫ`8A*߇0`8AѬ?_8A?&|_8Ap"2_8Aޥ?^8Af>$^8Aì٤%>^8AD^8Ah]8AF+_]8A>? ]8A9\8A:)ߩ\8ATrZ\8A_0,\8A-?)\8A|[8A*k'?z[8A/U D[8A_/[8Aڭ-Z8A+u?Z8AA%Z8A5?49YZ8AV(_ Z8A?>_Y8A>-VY8AG 2 Y8A(_µ%X8A_%?X8A˫ߌ'*X8A,W8A,&W8AJ6V8AD*߹V8A֫.uV8A)_8V8A7U8A_*U8A _U8A'.?NU8AZ)U8Aˬ+T8A7?^0uT8AI$#T8A3#_S8A?zS8AhA,S8As%R8A_R8A6_OR8A_"_R8ANDQ8A?uQ8Aߪ0)Q8A2P8ANߠ7ߍP8A8.H8A߽+H8AR_1_~H8AB14H8A;_G8A_J?G8A ?wG8AOG8AFN_F8A?GF8AsRuF8A_+LF8A5W`E8A_OKD8AQdC8A%]1C8A.\B8Ar!\A8A\?A8Axd@8Av_Y_?8A~5P_?8A_SX=8AQ<8Ae1<8Auh;;8AߢSX:8A]5\g98Aq88Ad3m_78AOi?S78A68Aj?+68AFr58AkJuQ58AZn_48A?'48A߭? s_38AϬ_*v"38A28A_?x18A8rs18AE{08A_-u?d08AC߹V08A}_Z08Aܫ_x~/8Aw/8A _l/8A }//8A_.8A٭?.8A_?c.8A1_ .8Aі-8Af[?l-8Aoώ%-8AO,8A??S,8A+8Aa?v+8Aίo+8A ld+8AƯD*8Am*8A+~_)8A|T)8A>{(8A_{9(8A|_'8A ~J'8A_B&8AR&8A5%8Aƭ5%8Aݬ?h_$8Az_o$8AM$8A1#8AWD?K#8A"8A?B"8Ac!8AXbߺ 8AԿ8AG8Aͫ?Lw8AN?28A[N8A??8A8A:!8A۬Sx8Aԫ?n8A@.V8AK_8AD)8A?,8A$_8A¬q8AP _8ANW8Aߢ_8AQ=8A!8A?B#8A,(58A-8AūE0?D8Ab_258A?918A =8A\?_8A?@S8AxOC8A7E8A{}G8A'?Iߙ8A K8A<L 8A©MN 8A3M 8A_oM9 8A/Nߒ 8AݨN? 8A٩O 8A0_TO2 8AOJO 8A,OO 8AjO_E 8A@O_8A(O?8AO8A֨?O8AzOF8AªOU8Az]PM8AJ8Q/8AYR8AS48AT?g8A)WV7A@nWB7A?YU7AƧ\%7Ag`C7Ayc7A?hZ7A_bk7Aϧ?/o7AQu7Aj{7A ~?_7A$_7Avf7A?Ɋ7AMV7A?3?7AiX=7AҦ?7A?u_^7A%?7A#T?7AV_K7Aا3?7AЩn7AGs?7A?_7AWrV7Aj_7Apc7A_7A]7Aw7AZֻ߰7A?_]7A7A*7A6_?m7A7A^?T7A7A1?e7A.7Ar_77AФ_H_7AϦ?j7ARK7AP7A}߲7A 27Aߩߒ7AG 7Aߣp7Aۦ=^7A/_,7AY߬7A>7A_7AB7A?D7A.7A_7A ?&7A_7_7AB7A_O?7Aޥ__7A_^_7A)7AΥ_E7A7Aܦ ?7Az7AV_Z7A_L7A1~>7AǤ 7Ab_7A_7AФ_57A B7Aզ_?7Aj7AǤ`~7Aߎ7A_7A$7Af7AM7AY?7A|7A47AR?7A{q7A_ _7A?9?7A'b7A37AɧP 7Aפ7AEN7Ao*7A 7Ab)7A 7A7A_?7A*ߑ7A O7AŤ 7AD 7A 7AT ߌ7AŤ 47Aߙ_27As!?7A'? K7A1_%7A67AE7AKS7AIdb7A_w~|7AA?7A7A7AY 8\7AnꠃbN7Ax_N7A7#(97A ($7A\ (7A(7A '7A' 7A'ڐ7A'ѐ7A:'Đ7A'7A)?'_7A'7A'7A?'_7A'7A'_n7A'Z7A'D7A '07Avv'7A*?`'7A:\'7Av3'?ޏ7AE'Ï7A_&7A&_7A&_l7Au&S7A3V&?>7A:&_7A &?7A?%7ADV%7A=I%?7A9%?7AW!%e7A.$R7A$@7AX߇$47At_a$7A:$7A{$7A`#Ѝ7A#?7Ao#_7Aq#7AI#7A#7A3#|7Af_#o7A"?f7Ax?"W7A{"I7A_x"?7A_U"17A4"'7A&" 7A!?7A%!7A!7A9! 7A!7AH}7A]? _.}7A @?|7A9_A |7AC_|7AkD|7A*E?|7A-E?|7AWFn|7AG_]|7A"GE|7AV\H?0|7Am=I|7AI?{7AJ{7AFL{7AmO n{7A6P^{7A;Q L{7A_R {7AISz7A=?5U?z7AWz7AZ 0z7AI_ ^ ?Hx7AI9qv7Aڇr7A;?p7Aߢp7AXp7Aߏp7Ap7A5Op7Ap7A̾zp7AQ_op7Afp7A_p7A_e?Up7A&Pp7A _Lp7Ay[Ep7A?bn7AZn7A ??Sn7A_Hn7A#!@n7As_6n7A/n7A?7'n7A%!n7A?n7A??n7A)yn7A__m7AANm7Am7Am7A?m7A'm7A]m7Au?m7A&?m7Ao_m7A+m7AW?m7Am7A߼m7A _m7AvHm7Aw_|_m7A@m7A?!m7A83_m7AF?m7A]wm7AKߌm7A?m7A?߃m7A9?L~m7A{[m7A?Um7A!?Pm7ARGm7A__>m7A-4m7A*,m7Ap!m7A?_m7A0_@m7Ajm7A"l7Al7Al7A?l7Afl7A&l7Al7AS&l7Af?l7A~l7Ahv?l7A?l7A l7A?l7A+l7A l7Ao{l7A,?rl7A?hl7A;_l7AYl7ASl7A__Nl7AU=Il7AkiBl7A߭;l7A_4l7A(?/l7A7?[%l7Al7A?l7A$k7AE߾?k7Ak7AI_Ek7A_j7A_ ߴj7A+ kj7A+!j7ATi7Ai7AXDi7Ah7Ah7Ai#?ch7A_Fh7A^g7A_~!g7A"?#_3g7AS_%_f7A91(߈f7Ax=*;f7AN,e7AY.e7A`0Qe7A7i2e7Ae4?d7A"h6dd7Ab8?d7A0_]:c7AT<?uc7A!F>$c7A8@b7A%Bb7AD2b7AEa7AGa7AI_=a7A_K`7A%_{M`7ANTOE`7A+Q_7AHR_7A.T?L_7AؿV_^7A?kX^7Ak?SZ_S^7AU_\?]7Am]]7AT_I]7Ap`\7AVb\7Anꠃb  |}8A,\8A(":1\8A,N8AYڀ8A? {?ڀ8Aj_ـ8A_1?؀8AΟ_*bՀ8AQc8A Qj8Ac{8A$_ޚit8AMߖra8A08Al{?8AS_S8AO_8A~F_8AS?A|8A?5@8A;8A{7߼8At%?8Ag?G8Adq8Ap8A!U_8AϥT_78A4`(8A?~8Ac?~8A~8A_~8A_-_~8A֨_~8A~8A?~8Ak>~8A^_~8Aߨ^~8AR_fP~8A.^G~8A YE~8AB_Y5~8A+Q~8AB_%:?}8AK7}8A;?}8Aë}8A,9 |}8A(": ?%7A0\7Anꠃbs\7Anꠃbߠ\7AB;dT\7A?Uf \7A_h/[7A*%iqj-*[7AP sS+oY7A D|iV7Aȗi{R7A@׹v'KP7Ae"MpYSGK7A SAbJ7A-[J7A?ʰUJ7A_ҰNJ7A_ݰHJ7A@J7A39J7At?3J7A,J7A!?&J7A?=J7A_UJ7AQtJ7AߏJ7A?J7Aر_J7AGI7A ?I7A$ I7A.+I7AZ_I7A_I7Ay_I7Ac?δ?I7AϽ_yI7An sI7A_6nI7AU?hI7A_waI7A\I7AVI7AյPI7A޽KI7A?EI7AC_5>I7Aþ_W?9I7A)w4I7A+-I7A'I7Ar׶_"I7AI7A_I7A9I7AǾ[ I7Aо?z_I7AȽ_H7A__H7AԷH7AH7A_H7A-H7AsL?H7A?mH7Ak?H7Aͽ?H7A_ƸH7A_H7AH7AH7A?H7A[H7AzH7A6H7A?H7AչH7A??H7A??H7A%zH7AD_sH7A]lH7AnxfH7A`H7AYH7A`̺SH7Aǽ??NH7AGH7A%AH7A3_<_;H7A}W4H7AJv.H7A_)H7A#H7A)?H7ALϻH7A?H7A _ H7A¾_H7Ad;G7AySG7A_oG7AG7AV_G7AG7AҼG7AV?G7A? G7A"?G7Aֽ?>G7A6?`G7AvG7AߐG7AG7AbɽG7A߾?G7AνG7AP_G7AF?<G7ATG7A(vzG7Ao__tG7A@_mG7AǾ_gG7AZaG7AL?\G7A`?UG7AAOG7AcIG7A.~CG7A_?>G7Aٽߺ7G7A?ֿ?1G7AW,G7Ag%G7AY5G7ALG7A*nG7AѽG7AEG7A?G7AF7A8 F7A/_F7ALQF7ADsF7AI?F7AvF7AF7AzF7A?F7AC4F7APF7Aڽ{_F7A?F7AT߸F7AF7Am_ߟF7A_"F7ABF7AZaF7AF7A;F7Aw?}F7A _xF7A̾sF7A&:mF7AUgF7AȽaF7A__\F7AH_VF7AQF7A KF7AȽ.FF7AuS@F7A u;F7A?5F7Au?0F7Aʾ*F7A%F7A?4_ F7ATF7A-{ F7AF7Aս F7AF7A#F7A5E7Aƽ?^E7A߃E7AE7AoE7A_E7A E7A~@E7AJf_E7AؽE7AE7A_?E7A?E7Aý_/E7AսWE7A߀E7A_?E7A?E7AE7A#ߙE7AIE7A?oE7AE7A?E7A ߀E7A_{E7AE7wE7ASg?uE7A]{pE7AjE7Až_eE7A `E7A\E7ANWE7At?SE7Aν_NE7A?_HE7A]CE7A~_>E7AF:E7A_l_5E7AW?0E7Aν_+E7A%E7Av!E7Aɽ5?E7AZE7An?_E7A޽? E7AE7ANE7AȽ$D7A8JD7AUsD7A?D7A_D7A;?D7A D7A_5D7A۽?^D7Ay߃D7A_D7AD7A>D7AWD7AGD7ApD7AD7A\??D7AD7A^D7A_+?D7ABPD7A_{D7A߄D7AԼD7ARyD7A] tD7AӼ0nD7ASQiD7AQwcD7A[^D7A?XD7A!SD7AMD7Al#_GD7A9E?BD7A d;D7AC6D7A1D7A+D7Az$D7AiD7A,_D7A8ND7A?o_ D7A?_D7AƼ?D7A __C7AP_C7A. C7AC7AA C7A}cC7Ao?C7AfC7AC_C7Aɼ?C7A?C7AҽC7A'C7A?C7AaC7A{C7AߓC7A?C7A#C7AC7A} C7AӼB7AB!_RA7An=7A`=7A"097A["87A"%?+87Am )k77A_/67Aź_*4567A857A4 >57A"Bf47AGu37AҺO?27AW27AKY17A`_17Ae17Aj07Ap/7A+wtV/7AL_ x.7AO{,.7A?-7Am-7A -7A2_,7Ab,7A߿,7A__+7A@q+7A+7A\_*7Ae/c*7A=_*7A9??)7A?)7Aŷ)7A>q')7A(7Ay1(7AE'7Aa&7AF[ &7A+F%7A`$7A?z#7AZ!7Ao? 7Aʶ087Aߏ7A?p7Af+Q7A{7A&?B7AG7A_7A[7A_P*7A8??7AM_7A`\7A?7AwL/7A?%7A0 w5Ar&MB6A_.MB6Ar&A6A*&_@6A&_B@6Aڨ߅%_?6AG?$>6Ag@${>6A٧ߵ#=6Ad"z=6AO'";6A̧0:6Aި96AU=96Ap?76A?76A_66A466A[=36A26A)_t ?26A16A??B16A?06A_S06AX/6A ?B/6A.6A#?M.6Ao?0 ?-6AǪY -6Am _v,6Aש__+6Ai?^$#+6AmwV*6AJ)6A_(6AZ(6ATX*'6A%&6A?%6AϩE$6A\q)#6Aª_ "6A0<)"6A?'!6AA?X>!6A87 6AW&@ 6A66AN?$,6Anߴ,?l6A@-6A(?-_k6Ai1a6Ar_g36A_zE6A^/?a6A B6A߁F6A?P_B6A?6A'?tA?6A?1?L6A36AĪN6A$?Q6AE86A{Lb6AZ@6A_1W6A|zZ=6A«~E_6A߰[?6AJ?:Ox6AE6A?ĽZ6A"K6A?ZO6AҩP?6AV6A.b,6A_T6AȪ@QF6AW߱6AߴdP6An6AI<N_ 6A__ 6A__2 6A9L 6A_kR? 6AoK 6AOk_ 6Aªss6Aq]6A0_6Am?6AZo%6A|?t?j6AΩ^5Aĩ_5A?v>5Au5A2_,_5Aߖ5AV*55A*J5AOA5Al`cp G "5AL5A ̅5A.+Uk d2!95AoDn:vME5Ae`5A=*35AEF'5ACG0B#i5Af^z 5A!diJ,5A 7M\a"5AuGFEɉ5Ai22PkӞ5AJo-{_@5A sjƚK5Auh/5A0?5Aհ"5A_,?5A5A˱ 5ADߚ5AޱW?t5A_x1?N5A85A85Aް /T5A!5AI45Al-?F5A?M0_ 5A)'5A -B5A_,D]5A1 %5AL@5A?m*5AR/?x5Az_ܷA45Aj?նD5AޱE5A?_35A )Y5Ax9C*5A!;5A9HFߠ5Aα_PIX5A{*J5A_C35A0-I 5AӲæ\5A&D5A@5A۱WKk5AuWB5A߱gJ5A?\5AeA5AG5Ak߿Te5AW#5A?P5A ?5A_Rt5AZE?25AvV5A ?8\5AȍkZ5AW5AR}U5AVQ_5A‰@5A`65AA_'M?5APl5A,`=5Ab?5A?OPߨ5Aò[j5Aݲ_~F?55Aɱ_}k%5A7?\}c_5A|W5A?߃{xU5Ayg5A6xp5A ^wb?v5Aߥuy35A_itb5Ae_lsk_5A^?rn5Aq_?]5Aߞpo5A5o5An_?5Alah5AɳkoJ5AƲje5AܲhW5A@?fh?5A`e~5AGco5Adal_5A__o5Att]5AV[q5A#Y|5AVp5A,T5APRd5AhSQu5AKP|_5ArN 5AqGL*5ABIM5A_Ff5AD5Aճ_Bu5A?@r5Aش)@ߩ5A+?x_5As3=t5A?:%5AƁ59r5Ayx8r5A 65A34s?55A_B3Z5Af1o5A05A&'/q5A._5A߷-5ASP-$Z5AMTA+k5Aw^X%5AŐfw9+5A)U7,5ADO@ۖ5A4j(D;Cq5A)Rd`l5A£Ho" j5AuhX亊A5A\}RkQp5A*F*d5AF>_F-5A/6t#Kq5A/2r~5A^2xB15AеjjDǾ5A]жi6 5Abw<ˢB_5AVY .5Au"*!#5A;W^|65AVb}^h5ANcϧY^,5A.x_ 5Alˎ_5Alpg)`5Ax_kٲ5Ay_n a5Ar c5A7j5AsF䜫ytd5A /E5AY4f45A^ɫg 5AҼq5AKH‘ (5AO'\ߦ5A+hV5Al"%w5mM5A]j\ԥ5AC̷a*=5AiTؾ5Abw=Gn%*5A!;UO5A՟,X5A{,2-k]5Aؙ;5-Ll5A??!5AHw5A8롂Dl95Aҫs5A3'T?5A*K5A[5AE_غAҞ5A˽K5AԶM 5A_B_5A6>5A_ `MB6Ar&r>6AJr>6A?x76A"06AQe(6A۰T!6AߖS6Ae6Aİz 6AC?l6AX6A|6Ah6AVy_6Aߎn6AVߒoڭ6A˰ߌaӭ6AV?̭6Aӱzŭ6A߅n6Adp?6A}߯6Aaߨ6A6A{yq6A|g6A _sp6Awm_߅6Anw}6Ahmw6Af\o6A`li6A1aja6An[xZ6A`Rr_S6AS{L6ANTD6A?H_>6AEo66A@o06AC_7j(6A?;o!6A2w_6Aa)6AT#t 6A}_6Ag6A?e6AJ_ s?6A9Y6AsT6Aqzڬ6Aks_Ԭ6A?h̬6A"?e?Ƭ6Ar_u6A_o6Ay6A]_6AW?sߣ6ASZ6AOmߔ6Ai_6Avu6Aɱ}6A̰l?y6A`_q6Af?hj6A;xvc6AGiV]6A_`o_V6AWtN6AQbG6AH?A6A[@^96Az2e46AѰ_0x,6A*x&6A!n_6A-_6A[6Aư 6A?{6A<_6Ab6A?e6Aj6Aİv߫6A{׫6ABg?ѫ6Ayhʫ6A'?d«6A?n6Aq_6Ax6A6A_h6At6A?e6Aj6Ax_r_6Aa|6ABwt6A?{n6A˱_o_g6A`t`6Ac_Y6A9{kQ6Aiuv?K6AwnC6AqY<6A_hz66AB_o.6AcY'6AZ] 6ATf6ARw6AڰLi? 6ACr6A?Aj6A?[?6A9i6A_0n6A^_46Aq+{٪6A"n?Ҫ6A_#˪6Aê6Al6A?o6Ae߮6AAy6A r6A?^6Ag}6A}_r_6A'6Ae|6A±_jv6A0un6A&?[_h6AŰ_`6A_sZ6Ai?yS6Aq|K6AnC6A;f=6A~56AUx_/6A:߿(6ANo!6Aϰ_6A q6A?m 6A߬o6A?6A?r_6A?6Aߗv6Aαu6A_ک6Aߐkҩ6Aj̩6Abĩ6A?6A`߃|_6A}m6A?uz?6Ay6AѰ_ph6A?t]6Akfߋ6Alo?6A_c_}6Al]ow6Ap^uo6A[__?h6AlW~a6AXZ6ARgS6A?JK6AdNE6A]K=6AEEj76A3Gk/6AA(6A[_8n_!6A8u6A<?6A4~ 6A.4b6A_/n6A.q6AH?'r6Aڱ)i6A_"i6Ae!٨6A&yӨ6Aq˨6A_p_Ũ6Aױl߽6AP?6Aq6A%_6Av 6Aj q6A y_6A~l_6Av6Aذ?~6AJrw6A>co6Ah6Ava6A#_Z6ArT6Aְr?L6AűtD6AKx_>6A76A?p?06Ay(6A_p_!6Aw6AF6A  6A3_6Aj6Ao6A-t6Av6Aw6Awڧ6A.yԧ6ADx_̧6A=}ŧ6Av6A{6Aհ{_6An6A+_?6Aαr6Aư6AB6A|6Ac~6ANw6Aro6Aֱn_h6Aba6A7rZ6A _kS6Am?L6A?k_E6A{r_>6Av{76A/6A?)6A,_s!6A?x6Ap6A= 6Al6A?6A߰6A_{6ATs6Aa6Ao?ۦ6AL߶r_Ӧ6A;߰k˦6AsŦ6Az6A?[6A_p߯6AG_ߨ6A~_6Aw6Aа_q6A?~6A߳n6As}6A=q_w6A߬o6A{h6Aa6Aİ߳_76AY ?6Aq׼r6Ab0Ҍ6A?,?6Aڱћ6Aod6AJ?6AZ?6Af_ 6Aٰ?1_6A: 6A2_R_6Az6A6A56A6Al! 6A86A[_!6AM6A_$ߒ6AҲ6A~6A__~6Au'?}6AC}6Ac|6A@.|6Aݻ{6A $O{6ABz6Af_Ykz6Ak?y6AwJy6A9_._w6A?h(v6A^?Mju6A?t6Ayr1t6Av_Ys6A_,_r6AHYr6AC?%7A0?%7A0_ 7A 7AC 7AS'? 7A+t 7AB/? 7A_3 7A&_h7/ 7AU; 7A?@ 7AE?t 7Aմ?G0 7A?6N 7AtU߾ 7A]? 7Aߗm_h 7A~r 7A?ˉ 7Aϱ_ 7Ap?s 7A tQ/ 7Aeng7Aۇgy47A,X9dD,7AB+H7AH(ceK7A OMQ#7Av{^kۮ7A!ty27Aw{\ۮ7Am3o A7Ay7A4W[57A&;۟n@)7A/ytKW7ABh4J17ATHU7ApR}tp}T7A4TWL7Ay_+A7AI2Kߺ7AR6A6As__ 6AU26APJ6A]d6Au6A6A|?6Aa_6A¯6Az?6A6AH 6A6A36AI6A0?[6Ael6Ac_ߛ6Aߔ6A6A6A߰_6A.y6AW_r6Al6Ae6As"^6Aۯ_4_X6AG_Q6A0XJ6Aְ?j?C6At<6A߄56Aޯ?.6A'6A_!6A>??6A?6AX_ 6Aׯ_6A6A 6A`??6A%6A,6A5:6AvK6A$S?6Ah?6Am_6A6Ap6A?6AE_6AQ6A6A*6A9Bߐ6AK_a_6A|6A}6A=__w6Ap6Aj6A_e6A _6A??X6A_ZR6A"zL6AC?G6Az@6A_:6A 46AG/6AO_4)6AeR#6A{~6AT_6A6A? 6A6A#6A%_B6Ab6Au6Ad6A __6A[?6A*?6A׮86Apb6A?6A)6A6A$?6A'_6AήL_6Aur6AC?6AB?6A-?_6A _6A®5ߑ6AN_d6A߉6A_6A~6Az6A43?u6AWXp6AXl6Ay_?g6AҮb6AR ^6A5Y6AdT6A?P6A~?L6A?H6AC6A=?6A$m;6A?_76A(_36A<.6A& ?*6AU &6A߁ "6A߷ ?6A 6A_ 6AD _6Ap ?6Aߣ  6A? 6A ?6A _/ 6Ac 6Aߖ _6AD ?6A ?6Aܯ' 6AnZ 6Aد_ _6A& ?6A 6A' 6A\ _6Ae _6A  6AV 6A(#6A?X6A˯ߑ6A6A_6Aڮ&6AƮa6Aܮ߼6Aߺ6AD6A96AV_k6A_6Aׯ6A$6A>ߩ6Adv6A6AЮ?6Aߡ6A_Q6A6AJ_6A6A)6Aîb6A?6A?6A6A@6A/u?6A߭6Ar?_6A6AR6AQ6A_6AE?6A?46Ai߂6Ak6A?6AB6AB_5?6A̯_n6A6A6AԮ_6A R6A6A ?~6Ax~6A???~6Aq}6Aߦ{6Ai_{6AT??z6APy6A?x6Aڮ_v6Au6Ao0t6Al_ir6Aq6Aӯ_o6AE m6AkH_l6A~j6A_ߴh6A=f6Aԯ&e6AЮ?\c6A_a6A__6Aʮ?\6A/Y6AgW6Av?U6Ay_S6A| P6A'>N6A p?K6AH6AE6A]_ B6AG ?6Az =6A :6AѮ _66Au!?36AүC!06Apv!_,6A/?!_)6A?!%6A "!6A @"6ADs"6AJ?"6Aj"6A"6A # 6A[?# 6Ar#6A,#6A_#6Ak_ $6Ai?:$6An$6A{$6AY$?6A%6AE%6A3|%6Aݮ?%6Ab%6A$&6A[&6AB&6A?&6A_'6A?:'6Aޮy'?6AR'_6A@'6Aj(6Aڮ,6Ar;-6AK-6A?-?6A-6A-6A0.6A?m._6A.6A_.6AƮ/6AO/6A/?6A?/6A/_6A506Ai06A9ߣ06Aޮ_06A ?1?6A7L16A16A̯16AM16A-12?6A˭e2_6A,_26A2_6A7_36A٭K36A߀36A36AT?36A*4?6Acf46A46A?4_6A@_5?6AͭE56Aw5_6AN5?6A?56A(_.66AIc6_6A_66A66A 76AA7_6A?7?6A376A7_6AX)8_6A_8?6A߭_86A8_6AǮ9?6AD>96Aծ?}96A96A?9ߨ6Ae:6A Z:6Aߏ:6A:?6A?;6A9;6A(n;6A_;6A;6A2<6A&R<6AP<6A<6A<_6A-?4=?6AѮi=6A=6As_=6A|>6A#M>6A>ߑ6Aۮ?>ߐ6A>?6A-?6Ab?6A?ߊ6A_?6A?@߈6AD@_6A ~@?6A>@6A5@6Aw(A?6A?`A6AA6Aխ_A~6AkB_}6A:B_{6AxB_z6A_By6AjBw6A_Cv6AoRC_t6AsCs6ACr6A>C pr>6Adb6A_b6Ad6Auj6Aa6A_??&6A1]6AĬ_]6A0z_o6Aϭ?^6A^_ O??6A V>6A_7,4ÿ6A/_;6Av W6A?S*6AY6AuE6AİXO_6A°6>߮6A]ߧ6AZ6A`E6AѰ>?6A^6AiP6As_OA6A'H?6A$Mz6A_Cu6A?Po6A@i6Aް|b?d6A6^R^6Aհ:I?Y6AtV_S6AHQM6A_G6AVB6A_D<6A+eE_76A>_HO16A_$Q+6A?O%6A?W_ 6A߰P6A?D?6A:u]6AwZY 6AZ6\6ADV?6A^i6A?X6Ai߫X6AQ6AicD6A?[ܶ6A[ Y׶6AB[_Ѷ6A7V˶6A_Ŷ6AK6ArY?6A:mQ6A;J6A1S?6Aװ?6A?fߧ6A&_6?6AiL6AӯBJ6A?\6AG6A&]?6A_V6AoP_6A JY{6Aհ#\v6A%cq6A?_m6A6?S_g6A ߀bb6AYX]6A,cX6A9c_S6A\N6Ag_I6A`W_D6A)?d^>6A@l96A?]36A?e_/6A?\)6A?X$6A?<6AQ?_e_6A;?8E6A?X?6AG 6A?P6ArG6A?~X?6AXT_6A_1P6A  X6Aǯ_B6AU_W?޵6Aհ?f_ص6A]?zSӵ6A°^C͵6A:Iȵ6AR_bµ6Ay?h?6Ae6A;I6A߉e6A%e>6AFH?6Aʰ"^6AаD6Ae6A?Y6A|[߃6Av_?~6AYex6Ay4Hs6A_Hl6AAf6AX?a6A0Z[6A4c?U6Av\_O6AW_RP_I6A$9R_C6A7?d=6A_76Ae16Ac?+6AҰ_S%6AwF_6A`\6AB`6AP&c 6Ac?6AK[6Ag?6A_R6A _d6AuC6AZJ6Am>M۴6A?Kִ6Aj?д6ATɴ6AȰnô6Ak?6A*V6Avyi6A-bS6AFN?6A+W?6A?f6Aʱn_6A`6A?O6AR}6ATXw6Au^q6AidNj6A _BEe6A ,_^6Aa_X6Ab]Q6AfJ6AeC6AߴY=6AH76AB_06AϰrS*6AzVj#6Aذ_EZ6A?)T6AI6AX6A.M6A_t6AZ6A X߲6A^ز6AwnҲ6Av?_?ʲ6Aѱ_{ò6AF6A?_6Anc߮6Aߤ`_6A_V6Ab?m6A̱m6A~W6AczX6Agl}6Ay^X?v6A \o6Au_SMh6AJUa6A7^?[6A@2cS6A̱,_L6Ah#qF6An?>6A`f76A_ j06AM)6AnV_"6A]6Ac?V6A!S 6Aΰ_R6Aeg6AR?6A[f6ArY?6AL6A?^۱6AްS_Ա6Agͱ6ASű6A߱T_6Ad6AűV?6Aߪr6A:ߤ\6APߛ6Ahߔ6AW6Aаi?6Ae6A_hw6A'lq6Acj6Aݯ?^?b6AO_W[6A d_T6A|jM6A;mG6Af?6AW76A@f_16A_j)6A _[_"6Ar6A{Y6AZ 6Aߛd6A1f6A}X_6A_q6A_f_6ADj6A\ܰ6Ac_^԰6A߭UͰ6A]߱Ű6Ab[߿6A?v?6AbߺQ_6A_a6Ayb6Af6Aj_V6Abi6Ao߆6AܰY6A6bx6A?br6AXj6AGi_c6A?p\6A?l?W6A hP6Aձ?qI6A%nB6A_0k?;6AZ:c46A@{_-6A3?K_&6AUq 6Af]j6Azgn6Are 6Aѱ_xj6A_|_6AƱ_6A>_h_6Ai?f6A;W߯6Aа_bٯ6AQd_ү6Apb˯6A?Qį6A|_q_6An6A_V6AUߧ6A?b6AӰY6A_i6Ap6Ae6ACs}6A_t?v6Ab_ko6Ahg6Af_'ga6A ?%yZ6A_.`?S6A.^K6Ad9XD6A =o=6AdF[_66A?Gj06A_Hx(6AOc_!6AxSX6An?T|6A[o? 6A_i?6AѰ_z6A߰ik6A_jb?6Aðks6Au\6AͰ?u`ڮ6A:?y]Ү6Aye̮6A__Ů6A@?X߽6Aq߶6AF_{6Aѱ߇b6A\6Ah6Axb6Ads6AıX6Ah~6AV?`_w6A°ߑ\?p6AG_[i6A̰?fa6AO?^Z6A?fR6AߘzL6A_WD6Agr>6A? xb6Adr6A>CLr6A>Cp6A?/D_o6A̭dD?m6APߟDl6AI_Dj6AEi6A]JEg6ATE_f6A_Ed6AgEc6A'Fa6A_F_`6A5F^6AƭF]6A_G[6A6A" K<6AWK;6AK_96Aڭ?K76AL66A4?4L46A׮oL16A?L?06AL/6A? M,6A_EM?+6A|M)6AM'6A^M%6Aӭ$N#6A[N!6ADN? 6A"N6AZ_N6A7O6A:_kO6AUO6AO6AP_6Aq?GP6A}_P_6AP 6AP 6A&Q? 6AVQ6AQ?6AQ6AͭR6AЮ_9R?6AoR6AR6A_R6AS6A KS6AЭ{S6AS?6A_S_I6AV c,H6AFCgi^6Ahٹ\oUF6A_ Et-,+6A*q x>6Ag]{vAbk6A O6X 6AcP6Aj~^ .46A:.͌6A}~N%{6A0h' 6AZ%x(O6A310?6AQȡ$^6A?G0aR6AXb`2hق6A4xF06A }6A8v?6A_Į6A ?6A~6A6&_6Ad=v6Az[|6A̫}6Aث6Ad߿6A_֯6A6A__6AX?:6AZ|6A+o{6A?x_6Ac_6A ̰6A*_6A?6A?%y6AmE|6A$]v6A?zp6A7_k6A߷d6A_ֱ_^6A{W6A?R6A@?(L6A$H?F6Ac?6AD96A(36A?,6A:ز_'6A^_!6A6A)_6A_A 6Ac6Ay_6A6AK6AE̳?6AZ6Aw?6A-?6A֫86AP?6A/k6A6AS_6A??6Am_д6A6A_6A 6AT86ARw6A_j_6A~߂6A|6AΫ?v6A[_ҵo6A٫?~i6Ab6A_[6A?-U6AFO6A/^H6AuyB6A<6A?46A/6A?նu(6A"6A6A 6A06AI6Aa6AW?v6Aq6A/ߧ6A̪??6Aѷ}6A?y_6A/}6AX_y6A(w6Aت?6A._P6Akz6Af_{?6As?6A ߧ6A__6AҸ{_6A6?6A^?6A9 {}6A?'v6A%8_p6A_Hi6A!cb6At[6AzU6AߟN6Aګ?G6A¹A6A_ҹ:6A46AZ~-6Aߪ&6Ai6Aʫ_16AE6AU 6AOg6A~6A6A6A6Aƺ6Aպ6A?6A6A _6Aq_6A?.6A?6A~H߬6A?Zߥ6A^k6A6A6A?6Ay_6Aߪ»?}6ABͻ{?v6A1޻?o6Ah6Ata6A_ Z6AS6A?0?M6Aʪ9_F6AJ_?6AB\86APe16Akv*6AΫ~#6A\6Ae6A_6Af6AǼ6A?ټ?6A{_6AѪ?6A~6A6A_6A!_%6A56A?{6A_?Qx6ArZ}_6A`6Al6AO}6AG6Atߑ6A?6AȪ6A̫ߵ}6A>߻v6Aƽo6A׽h6Ara6A@zZ6A_S6Ax?L6A| _E6Az>6A~&{?76A:-06A_7_)6AA?"6AVL~6AT6A [ 6A?hu6Adi6Az6Aɪ{6A>߄?6A 6A_y6Az6A6A6?6A?6A6Aɾ_6AīҾߪ6A?Ӿ6Abݾ6A?6Aë6AC6A _6A_y6Aū?r6A<?k6A\c6A?]6A_$U6A(N6Al/_H6Aȫ7@6A;?:6A?E26A_F+6AP#6AQ6AR?6A_Z_6A\6A]}6Ah?6AXi6A_q6As}_6ATtb6Admapnik-3.0.9/demo/data/boundaries_l.shx000066400000000000000000000003541262555547000200460ustar00rootroot00000000000000' vI=3AywƠ  VJ@d 8qsn " ` `v p xmapnik-3.0.9/demo/data/ontdrainage.dbf000066400000000000000000010054101262555547000176230ustar00rootroot00000000000000j.EWAREAN PERIMETERN ONCART_N ONCART_IDN F_CODECHYCN CGNDB_ENCCGNDB_FRCNAME_ENCXNOM_FRCXShape_LengN Shape_AreaN 0.00606000000 1.04365000000 12106.00000000000 10035.00000000000BH000 8.00000000000EKIEAEKIEALac aux Allumettes Lac aux Allumettes 94904.18074050000 5.36794786801e+007 0.00320000000 0.77054000000 12159.00000000000 10041.00000000000BH000 8.00000000000 70249.35405230000 2.84195761152e+007 0.00118000000 0.30217000000 12169.00000000000 10046.00000000000BH000 8.00000000000FATLQFATLQLac Coulonge Lac Coulonge 28540.19775180000 1.04145341908e+007 0.00158000000 0.62052000000 12193.00000000000 10075.00000000000BH000 8.00000000000 59196.61874280000 1.40690903977e+007 0.00140000000 0.31393000000 12215.00000000000 10166.00000000000BH000 8.00000000000FCFRFFCFRFMuskrat Lake Muskrat Lake 30055.55138390000 1.25058123793e+007 0.00778000000 3.46993000000 12240.00000000000 9849.00000000000BH000 8.00000000000 292702.26612500002 6.95225291696e+007 0.00790000000 2.14028000000 12242.00000000000 10180.00000000000BH000 8.00000000000 191101.86033000000 7.07321240013e+007 0.00007000000 0.05679000000 12252.00000000000 10240.00000000000BH000 8.00000000000 5135.04802324000 586762.39023300004 0.00056000000 0.11513000000 12258.00000000000 10293.00000000000BH000 8.00000000000FDVDQFDVDQMink Lake Mink Lake 10020.883473500005033471.83992000020 0.00066000000 0.16527000000 12301.00000000000 10426.00000000000BH000 8.00000000000FASSSFASSSConstant Lake Constant Lake 15474.742595500005962369.59399999960 0.00017000000 0.06333000000 12302.00000000000 10244.00000000000BH000 8.00000000000FASSHFASSHConstance Lake Constance Lake 5888.263830190001552033.11430000000 0.00049000000 0.13571000000 12304.00000000000 10371.00000000000BH000 8.00000000000FBPPVFBPPVHurds Lake Hurds Lake 12173.866877300004357037.73479999970 0.00104000000 0.44120000000 12306.00000000000 10345.00000000000BH000 8.00000000000 39107.128497700009325764.22925000080 0.00192000000 0.23861000000 12310.00000000000 10233.00000000000BH000 8.00000000000EGCZGEGCZGLac Deschnes Lac Deschnes 21198.53407970000 1.72099875283e+007 0.00342000000 0.69545000000 12317.00000000000 10387.00000000000BH000 8.00000000000FDDESFDDESWhite Lake White Lake 63748.86267480000 3.07837490373e+007 0.00043000000 0.11258000000 12322.00000000000 10435.00000000000BH000 8.00000000000FDKJNFDKJNNorway Lake Norway Lake 9943.991039550003828894.82800999980 0.00006000000 0.03779000000 12328.00000000000 10441.00000000000BH000 8.00000000000 3230.71311523000 500947.29785999999 0.00146000000 0.22734000000 12340.00000000000 10490.00000000000BH000 8.00000000000FANSOFANSOCalabogie Lake Calabogie Lake 21782.44869700000 1.31792796905e+007 0.00013000000 0.05286000000 12344.00000000000 10124.00000000000BH000 8.00000000000 5054.876930120001173343.42506000000 0.00045000000 0.10030000000 12350.00000000000 10150.00000000000BH000 8.00000000000FBGSIFBGSILoch Garry Loch Garry 8850.522137720004014869.65077000020 0.00210000000 0.35668000000 12355.00000000000 10567.00000000000BH000 8.00000000000FAJJNFAJJNBlack Donald Lake Black Donald Lake 33485.07673000000 1.89567537363e+007 0.00110000000 0.36572000000 12358.00000000000 10543.00000000000BH000 8.00000000000 31243.479413700009935173.99588000030 0.00009000000 0.04481000000 12361.00000000000 10335.00000000000BH000 8.00000000000 4307.35705623000 846712.24436500005 0.00041000000 0.15543000000 12367.00000000000 10446.00000000000BH000 8.00000000000 14299.702566200003735852.78085999980 0.00005000000 0.03051000000 12373.00000000000 10632.00000000000BH000 8.00000000000 3106.87436578000 477112.62222199998 0.00767000000 0.67649000000 12378.00000000000 10089.00000000000BH000 8.00000000000EHZTQEHZTQLac Saint-Franois Lac Saint-Franois 62479.62325850000 6.93584920355e+007 0.00108000000 0.23564000000 12380.00000000000 10622.00000000000BH000 8.00000000000FDSHAFDSHANorcan Lake Norcan Lake 22291.378614700009759106.75307000060 0.00091000000 0.11908000000 12383.00000000000 10513.00000000000BH000 8.00000000000FARGQFARGQClayton Lake Clayton Lake 10993.100226500008224460.91719000040 0.00034000000 0.08241000000 12388.00000000000 10477.00000000000BH000 8.00000000000 8078.809758790003036933.96306000000 0.00171000000 0.38738000000 12389.00000000000 10677.00000000000BH000 8.00000000000FAPPOFAPPOCentennial Lake Centennial Lake 36170.82657080000 1.54120928888e+007 0.00227000000 0.54339000000 12397.00000000000 10393.00000000000BH000 8.00000000000 52169.02979750000 2.05853914667e+007 0.00007000000 0.03819000000 12402.00000000000 10691.00000000000BH000 8.00000000000 3289.26549773000 616743.68836499995 0.00044000000 0.08262000000 12405.00000000000 10539.00000000000BH000 8.00000000000FCVCIFCVCITaylor Lake Taylor Lake 7973.699318160004002776.18227999980 0.00006000000 0.04240000000 12410.00000000000 10631.00000000000BH000 8.00000000000 3571.46601997000 573891.69180000003 0.00007000000 0.03639000000 12411.00000000000 10638.00000000000BH000 8.00000000000 3148.76974452000 606256.81763700000 0.00331000000 0.51430000000 12413.00000000000 10528.00000000000BH000 8.00000000000FEALEFEALEMississippi Lake Mississippi Lake 49031.29073440000 2.99782840373e+007 0.00049000000 0.11773000000 12427.00000000000 10739.00000000000BH000 8.00000000000FAOOMFAOOMCanonto Lake Canonto Lake 11239.475212100004399514.90397999990 0.04847000000 6.34132000000 12431.00000000000 10264.00000000000BH000 8.00000000000 570990.80401299999 4.45378570863e+008 0.00013000000 0.05036000000 12435.00000000000 10675.00000000000BH000 8.00000000000 4822.882554300001151202.41708999990 0.00017000000 0.05033000000 12436.00000000000 10642.00000000000BH000 8.00000000000FBLCWFBLCWHaley Lake Haley Lake 5083.279097920001495848.03960000000 0.00072000000 0.18140000000 12438.00000000000 10774.00000000000BH000 8.00000000000FDRCFFDRCFPalmerston Lake Palmerston Lake 16831.661415900006513223.30977999980 0.00012000000 0.05796000000 12440.00000000000 10769.00000000000BH000 8.00000000000 5180.472207690001089821.77718000000 0.00022000000 0.07060000000 12449.00000000000 10802.00000000000BH000 8.00000000000 6319.112623860001973219.71992000010 0.00025000000 0.08387000000 12450.00000000000 10740.00000000000BH000 8.00000000000FCHGCFCHGCPatterson Lake Patterson Lake 7349.998102540002282564.09317999990 0.00015000000 0.04645000000 12452.00000000000 10786.00000000000BH000 8.00000000000 4682.440137540001341602.22401000000 0.00065000000 0.14013000000 12458.00000000000 10784.00000000000BH000 8.00000000000FAVFGFAVFGDalhousie Lake Dalhousie Lake 12374.284045100005886130.60850000010 0.00012000000 0.05056000000 12461.00000000000 10463.00000000000BH000 8.00000000000 4764.086543040001060033.28461000000 0.00251000000 0.60111000000 12463.00000000000 10835.00000000000BH000 8.00000000000FAUOSFAUOSCrotch Lake Crotch Lake 54646.80962550000 2.28522062325e+007 0.00052000000 0.20257000000 12464.00000000000 10808.00000000000BH000 8.00000000000 17718.521255000004685527.73648000040 0.00019000000 0.09035000000 12467.00000000000 10850.00000000000BH000 8.00000000000 8016.736296310001710678.13250000010 0.00081000000 0.31462000000 12468.00000000000 10777.00000000000BH000 8.00000000000FAHDXFAHDXBennett Lake Bennett Lake 29020.017484900007372221.49309999960 0.00246000000 0.64126000000 12475.00000000000 10696.00000000000BH000 8.00000000000 61403.25252710000 2.24080348236e+007 0.00019000000 0.06240000000 12480.00000000000 10752.00000000000BH000 8.00000000000 5918.100012680001703251.40524000000 0.00008000000 0.03934000000 12482.00000000000 10796.00000000000BH000 8.00000000000 3631.99031545000 695741.53601499996 0.00002000000 0.02172000000 12484.00000000000 10766.00000000000BH000 8.00000000000 1969.93674310000 221734.95065399999 0.00003000000 0.02408000000 12485.00000000000 10795.00000000000BH000 8.00000000000 2202.26895403000 295098.48803600000 0.00137000000 0.33354000000 12487.00000000000 10943.00000000000BH000 8.00000000000FBTEAFBTEAKashwakamak Lake Kashwakamak Lake 29906.83865850000 1.25046972704e+007 0.00154000000 0.21246000000 12488.00000000000 10776.00000000000BH000 8.00000000000FCBUKFCBUKLower Rideau Lake Lower Rideau Lake 19977.98559260000 1.40066757641e+007 0.00020000000 0.08805000000 12489.00000000000 10792.00000000000BH000 8.00000000000 7587.724487860001805476.39904999990 0.00005000000 0.03413000000 12498.00000000000 10855.00000000000BH000 8.00000000000 3363.74436319000 439446.09425199998 0.00320000000 0.58503000000 12499.00000000000 10950.00000000000BH000 8.00000000000FAHYHFAHYHBig Gull Lake Big Gull Lake 53191.81855280000 2.91542098092e+007 0.00076000000 0.17694000000 12501.00000000000 10811.00000000000BH000 8.00000000000FDOJWFDOJWOtty Lake Otty Lake 17485.568971400006899920.64304000050 0.00586000000 0.81493000000 12504.00000000000 10812.00000000000BH000 8.00000000000FAIGJFAIGJBig Rideau Lake Big Rideau Lake 79232.66816380000 5.35167930457e+007 0.00005000000 0.03242000000 12508.00000000000 10710.00000000000BH000 8.00000000000 3206.31965794000 441914.33047500002 0.00028000000 0.07542000000 12514.00000000000 10826.00000000000BH000 8.00000000000FEGQEFEGQEBass Lake Bass Lake 7556.607784280002564089.45262000010 0.00007000000 0.04019000000 12515.00000000000 10729.00000000000BH000 8.00000000000 4102.80584479000 631143.55331400002 0.00083000000 0.19152000000 12516.00000000000 10889.00000000000BH000 8.00000000000FAQSWFAQSWChristie Lake Christie Lake 17569.740686400007541785.58994999990 0.00055000000 0.11761000000 12517.00000000000 11005.00000000000BH000 8.00000000000 10506.096521100005051962.74679999980 0.00003000000 0.02559000000 12519.00000000000 10940.00000000000BH000 8.00000000000 2365.06728631000 312342.68510599999 0.00023000000 0.06049000000 12521.00000000000 10790.00000000000BH000 8.00000000000FATWTFATWTCranberry Lake Cranberry Lake 5626.905110120002106072.58299000000 0.00062000000 0.13008000000 12523.00000000000 10842.00000000000BH000 8.00000000000FDOFWFDOFWOtter Lake Otter Lake 12900.894369900005650426.40837999990 0.00009000000 0.04441000000 12524.00000000000 10872.00000000000BH000 8.00000000000 3969.21328192000 795764.66898700001 0.00040000000 0.08788000000 12525.00000000000 11007.00000000000BH000 8.00000000000 8169.542603550003619814.63445999990 0.00044000000 0.11504000000 12526.00000000000 10897.00000000000BH000 8.00000000000FAJMXFAJMXBlack Lake Black Lake 11117.078570400004058662.35502000010 0.00009000000 0.04579000000 12529.00000000000 10873.00000000000BH000 8.00000000000 4531.66525334000 786523.16984400002 0.00198000000 0.36082000000 12530.00000000000 10995.00000000000BH000 8.00000000000FDXVDFDXVDSharbot Lake Sharbot Lake 33913.30826180000 1.80593835511e+007 0.00014000000 0.06452000000 12533.00000000000 10970.00000000000BH000 8.00000000000 5896.777666920001306982.88348000010 0.00015000000 0.06776000000 12535.00000000000 10848.00000000000BH000 8.00000000000FBQLMFBQLMIrish Lake Irish Lake 6875.701813630001392634.81823999990 0.00423000000 0.72854000000 12541.00000000000 10993.00000000000BH000 8.00000000000FDJGIFDJGIBobs Lake Bobs Lake 72585.38116560000 3.87265622940e+007 0.00039000000 0.10699000000 12545.00000000000 11090.00000000000BH000 8.00000000000FAHVHFAHVHBig Clear Lake Big Clear Lake 10182.604843300003589287.44054999990 0.00049000000 0.13261000000 12551.00000000000 11028.00000000000BH000 8.00000000000FAUQKFAUQKCrow Lake Crow Lake 13977.053493900004478115.11632999960 0.00013000000 0.05267000000 12553.00000000000 10912.00000000000BH000 8.00000000000FAGVQFAGVQBellamys Lake Bellamys Lake 5028.046404790001177749.60084000000 0.00022000000 0.06714000000 12555.00000000000 11075.00000000000BH000 8.00000000000FBXBOFBXBOLeggat Lake Leggat Lake 6087.759854630002005234.53921000010 0.00046000000 0.15811000000 12558.00000000000 11127.00000000000BH000 8.00000000000 14678.832904300004230614.95739999970 0.00160000000 0.30048000000 12559.00000000000 10996.00000000000BH000 8.00000000000FCZFHFCZFHUpper Rideau Lake Upper Rideau Lake 27670.66141350000 1.46080909904e+007 0.00079000000 0.17995000000 12562.00000000000 11086.00000000000BH000 8.00000000000FBAVCFBAVCEagle Lake Eagle Lake 16187.570996900007229707.46544000040 0.00101000000 0.23674000000 12563.00000000000 11036.00000000000BH000 8.00000000000FDERAFDERAWolfe Lake Wolfe Lake 22300.035710600009250776.13598000070 0.00047000000 0.15348000000 12565.00000000000 11112.00000000000BH000 8.00000000000FCALLFCALLLong Lake Long Lake 13569.741660700004287594.51745000020 0.00029000000 0.08688000000 12567.00000000000 11027.00000000000BH000 8.00000000000 7616.896946560002623889.40319000000 0.00021000000 0.06034000000 12569.00000000000 10944.00000000000BH000 8.00000000000FBCKJFBCKJLake Eloida Lake Eloida 5714.445647850001920771.39053000000 0.00009000000 0.04074000000 12571.00000000000 11085.00000000000BH000 8.00000000000 3830.02622023000 797934.74309799995 0.00007000000 0.03493000000 12573.00000000000 10926.00000000000BH000 8.00000000000 3413.58323506000 658317.49908900005 0.00342000000 0.68535000000 12574.00000000000 11030.00000000000BH000 8.00000000000FDOOUFDOOUNewboro Lake Newboro Lake 62528.48054580000 3.13231919133e+007 0.00086000000 0.17818000000 12578.00000000000 11002.00000000000BH000 8.00000000000FCYYUFCYYUUpper Beverley Lake Upper Beverley Lake 16509.631732800007920079.07577999960 0.00019000000 0.07757000000 12579.00000000000 11196.00000000000BH000 8.00000000000FEHVZFEHVZFifth Depot Lake Fifth Depot Lake 7683.780631980001764189.65510000010 0.00034000000 0.08821000000 12581.00000000000 10982.00000000000BH000 8.00000000000 8890.946068790003137464.77503000010 0.00103000000 0.21272000000 12582.00000000000 11040.00000000000BH000 8.00000000000FCBPSFCBPSLower Beverley Lake Lower Beverley Lake 20959.475838500009438846.07265999910 0.00033000000 0.13249000000 12583.00000000000 11130.00000000000BH000 8.00000000000FAOOBFAOOBCanoe Lake Canoe Lake 13545.069652600003051734.07565000000 0.00026000000 0.09481000000 12584.00000000000 11227.00000000000BH000 8.00000000000 9135.680320890002372194.98070000020 0.00023000000 0.08049000000 12585.00000000000 11154.00000000000BH000 8.00000000000 7716.901303520002151167.41689000000 0.00021000000 0.06485000000 12590.00000000000 11017.00000000000BH000 8.00000000000 6218.066607760001911306.95188999990 0.00151000000 0.29987000000 12591.00000000000 11122.00000000000BH000 8.00000000000FAWRDFAWRDDevil Lake Devil Lake 26949.72157650000 1.38122031448e+007 0.00040000000 0.10107000000 12593.00000000000 11018.00000000000BH000 8.00000000000FBIWBFBIWBGraham Lake Graham Lake 10140.445438600003659964.45894999990 0.00104000000 0.18406000000 12594.00000000000 11105.00000000000BH000 8.00000000000FDTYDFDTYDSand Lake Sand Lake 17122.492449800009500035.17961000090 0.00110000000 0.27366000000 12596.00000000000 11116.00000000000BH000 8.00000000000FDMQYFDMQYOpinicon Lake Opinicon Lake 25741.93208840000 1.01403670492e+007 0.00010000000 0.04861000000 12602.00000000000 11079.00000000000BH000 8.00000000000 4419.49753857000 948253.09452799999 0.00038000000 0.12911000000 12603.00000000000 11177.00000000000BH000 8.00000000000 12297.985196400003516476.78926000000 0.00340000000 0.51868000000 12604.00000000000 11063.00000000000BH000 8.00000000000FAQAIFAQAICharleston Lake Charleston Lake 51539.44606060000 3.12160175967e+007 0.00009000000 0.04734000000 12605.00000000000 11189.00000000000BH000 8.00000000000 4871.13711309000 853178.50386299996 0.00045000000 0.14918000000 12607.00000000000 11199.00000000000BH000 8.00000000000FAWOOFAWOODesert Lake Desert Lake 14857.837333100004174747.45303000000 0.00100000000 0.30209000000 12608.00000000000 11172.00000000000BH000 8.00000000000FAMLHFAMLHBuck Lake Buck Lake 29673.622020200009169982.14922999960 0.00033000000 0.09939000000 12611.00000000000 11107.00000000000BH000 8.00000000000 10116.394421000003001701.95477000020 0.00361000000 0.88037000000 12615.00000000000 11138.00000000000BH000 8.00000000000 84665.81818069999 3.32256820177e+007 0.00010000000 0.03960000000 12616.00000000000 11167.00000000000BH000 8.00000000000 3734.55976375000 939671.65505299997 0.00011000000 0.05326000000 12621.00000000000 11165.00000000000BH000 8.00000000000 5330.136759390001034923.38771000000 0.00012000000 0.04650000000 12622.00000000000 11129.00000000000BH000 8.00000000000 4391.452742250001107635.27284000000 0.00010000000 0.04820000000 12624.00000000000 11259.00000000000BH000 8.00000000000 4626.81251794000 923085.09431299998 0.00022000000 0.07270000000 12626.00000000000 11152.00000000000BH000 8.00000000000FBKGRFBKGRGrippen Lake Grippen Lake 7006.372216950002036839.86672999990 0.00063000000 0.11169000000 12627.00000000000 11315.00000000000BH000 8.00000000000FAGKHFAGKHBeaver Lake Beaver Lake 11211.868017000005774860.04208000000 0.00008000000 0.04406000000 12629.00000000000 11150.00000000000BH000 8.00000000000 4507.40780361000 774526.41040800000 0.00011000000 0.05051000000 12631.00000000000 11192.00000000000BH000 8.00000000000 4962.304061920001052368.03334999990 0.00006000000 0.04165000000 12632.00000000000 11137.00000000000BH000 8.00000000000 3670.89629612000 506251.46239599999 0.00251000000 0.58680000000 12635.00000000000 11215.00000000000BH000 8.00000000000FCBKIFCBKILoughborough Lake Loughborough Lake 55249.51053590000 2.31053902287e+007 0.00006000000 0.03292000000 12639.00000000000 11287.00000000000BH000 8.00000000000 3323.09326502000 544981.78460400004 0.00012000000 0.05293000000 12640.00000000000 11173.00000000000BH000 8.00000000000 4998.973236010001147228.13559999990 0.00023000000 0.10781000000 12641.00000000000 11184.00000000000BH000 8.00000000000 10393.042081900002121464.28777999990 0.00008000000 0.04751000000 12643.00000000000 11295.00000000000BH000 8.00000000000 4565.48714891000 697865.67323299998 0.00041000000 0.09651000000 12646.00000000000 11216.00000000000BH000 8.00000000000FBGLZFBGLZGananoque Lake Gananoque Lake 9142.853841500003762013.41801000010 0.00017000000 0.06257000000 12647.00000000000 11293.00000000000BH000 8.00000000000 6284.190349800001608489.54334999990 0.00032000000 0.08138000000 12649.00000000000 11238.00000000000BH000 8.00000000000FCQMCFCQMCSouth Lake South Lake 7418.390330040002936141.86509000000 0.00087000000 0.12496000000 12650.00000000000 11358.00000000000BH000 8.00000000000FANXRFANXRCamden Lake Camden Lake 12343.543075400008050796.31032000020 0.00054000000 0.15951000000 12652.00000000000 11301.00000000000BH000 8.00000000000FCUODFCUODSydenham Lake Sydenham Lake 14097.857684100005018213.70368000030 0.00002000000 0.02146000000 12653.00000000000 11245.00000000000BH000 8.00000000000 2182.06601715000 226536.60946000001 0.00082000000 0.15368000000 12654.00000000000 11374.00000000000BH000 8.00000000000FCZQWFCZQWVarty Lake Varty Lake 15535.200044000007547284.72805000000 0.00011000000 0.06167000000 12655.00000000000 11310.00000000000BH000 8.00000000000 5820.791266210001027894.45856000010 0.00005000000 0.03580000000 12658.00000000000 11299.00000000000BH000 8.00000000000 3367.86595844000 501058.67063700000 0.00042000000 0.15453000000 12661.00000000000 11333.00000000000BH000 8.00000000000FASHRFASHRCollins Lake Collins Lake 15026.806376400003900239.08409000000 0.00190000000 0.39417000000 12662.00000000000 11318.00000000000BH000 8.00000000000 36473.72526710000 1.75677493231e+007 0.00062000000 0.12977000000 12663.00000000000 11256.00000000000BH000 8.00000000000 11315.138381900005680714.14871000030 0.00045000000 0.12977000000 12664.00000000000 11405.00000000000BH000 8.00000000000FCGPWFCGPWOdessa Lake Odessa Lake 12942.672373800004135833.00516999980 0.03546000000 3.45011000000 0.00000000000 0.00000000000BH000 8.00000000000EFLFFEFLFFRservoir Baskatong Rservoir Baskatong 326999.88362199999 3.06411801945e+008 0.00672000000 2.18344000000 0.00000000000 0.00000000000BH000 8.00000000000 203237.39914299999 5.82796531733e+007 0.01282000000 1.71007000000 0.00000000000 0.00000000000BH000 8.00000000000EIGGFEIGGFRservoir Taureau Rservoir Taureau 161905.31762300001 1.10792042365e+008 0.00071000000 0.22729000000 0.00000000000 0.00000000000BH000 8.00000000000EGKKGEGKKGLac Franchre Lac Franchre 23228.238630700006120699.55308000000 0.00045000000 0.10379000000 0.00000000000 0.00000000000BH000 8.00000000000 9218.408411440003923882.41569999980 0.00044000000 0.11786000000 0.00000000000 0.00000000000BH000 8.00000000000 12622.050580800003799481.17999000010 0.00005000000 0.03044000000 0.00000000000 0.00000000000BH000 8.00000000000 2969.07570178000 394664.53547399997 0.00031000000 0.08853000000 0.00000000000 0.00000000000BH000 8.00000000000 9396.567616590002665791.32903000010 0.00013000000 0.05520000000 0.00000000000 0.00000000000BH000 8.00000000000 4706.105609680001109279.29906000010 0.00023000000 0.08073000000 0.00000000000 0.00000000000BH000 8.00000000000 7339.602515430001992985.66292000000 0.00003000000 0.03073000000 0.00000000000 0.00000000000BH000 8.00000000000 2611.42362020000 292852.64665900002 0.00008000000 0.03973000000 0.00000000000 0.00000000000BH000 8.00000000000 3339.29050560000 666728.88427899999 0.00011000000 0.05768000000 0.00000000000 0.00000000000BH000 8.00000000000 4933.27484999000 960962.22371299996 0.00015000000 0.06076000000 0.00000000000 0.00000000000BH000 8.00000000000 5268.690748910001269576.81545000010 0.00005000000 0.04164000000 0.00000000000 0.00000000000BH000 8.00000000000 3815.51912284000 467214.81635600002 0.00006000000 0.04385000000 0.00000000000 0.00000000000BH000 8.00000000000 4032.24366456000 561187.85932100005 0.00009000000 0.04570000000 0.00000000000 0.00000000000BH000 8.00000000000 3757.89456487000 773534.37892699998 0.00014000000 0.06174000000 0.00000000000 0.00000000000BH000 8.00000000000 5429.806206490001185690.11085000010 0.00023000000 0.07442000000 0.00000000000 0.00000000000BH000 8.00000000000 6957.133359660002027136.88785999990 0.00009000000 0.04398000000 0.00000000000 0.00000000000BH000 8.00000000000 4317.15068917000 768914.70795199997 0.00124000000 0.34379000000 0.00000000000 0.00000000000BH000 8.00000000000 32496.02419070000 1.07506903260e+007 0.00009000000 0.04253000000 0.00000000000 0.00000000000BH000 8.00000000000 3856.07694346000 749923.22943199996 0.00010000000 0.04454000000 0.00000000000 0.00000000000BH000 8.00000000000 3866.71588843000 892212.85314799997 0.00007000000 0.03547000000 0.00000000000 0.00000000000BH000 8.00000000000 3097.85116625000 631655.71470699995 0.00014000000 0.06619000000 0.00000000000 0.00000000000BH000 8.00000000000 5397.753736940001168228.26450000000 0.00006000000 0.03436000000 0.00000000000 0.00000000000BH000 8.00000000000 3120.50813846000 491407.43601300003 0.00008000000 0.03589000000 0.00000000000 0.00000000000BH000 8.00000000000 3472.36966441000 709009.63345500000 0.00010000000 0.04709000000 0.00000000000 0.00000000000BH000 8.00000000000 4022.26159015000 848304.65977699996 0.00031000000 0.07508000000 0.00000000000 0.00000000000BH000 8.00000000000 6754.098710100002659099.56821000020 0.00002000000 0.01941000000 0.00000000000 0.00000000000BH000 8.00000000000 1954.27325001000 197758.43094100000 0.00019000000 0.06317000000 0.00000000000 0.00000000000BH000 8.00000000000 6128.476131380001620886.13079000010 0.00007000000 0.03218000000 0.00000000000 0.00000000000BH000 8.00000000000 3083.17489297000 630126.40641299996 0.00025000000 0.10151000000 0.00000000000 0.00000000000BH000 8.00000000000 8763.835678170002169596.59361999990 0.00057000000 0.15835000000 0.00000000000 0.00000000000BH000 8.00000000000EIHOKEIHOKLac Tomasine Lac Tomasine 16164.946975000004941877.24933000000 0.00111000000 0.28987000000 0.00000000000 0.00000000000BH000 8.00000000000 28762.097765900009648517.01046000050 0.00191000000 0.65141000000 0.00000000000 0.00000000000BH000 8.00000000000 63064.59863030000 1.65683681044e+007 0.00005000000 0.03686000000 0.00000000000 0.00000000000BH000 8.00000000000 3065.75281102000 435389.61988999997 0.00008000000 0.05008000000 0.00000000000 0.00000000000BH000 8.00000000000 4115.19367399000 704742.74567800004 0.00007000000 0.05458000000 0.00000000000 0.00000000000BH000 8.00000000000 4647.89828858000 604394.20352700003 0.00100000000 0.35512000000 0.00000000000 0.00000000000BH000 8.00000000000EIMHSEIMHSLac Wapizagonke Lac Wapizagonke 34120.171330300008648881.11405999960 0.00009000000 0.05681000000 0.00000000000 0.00000000000BH000 8.00000000000 4727.43559469000 776882.05159299995 0.00010000000 0.05268000000 0.00000000000 0.00000000000BH000 8.00000000000 4811.96908182000 866821.49938499997 0.00017000000 0.06798000000 0.00000000000 0.00000000000BH000 8.00000000000 7016.749603560001504520.37076000010 0.00006000000 0.03914000000 0.00000000000 0.00000000000BH000 8.00000000000 3259.66796743000 535743.03191999998 0.00067000000 0.13358000000 0.00000000000 0.00000000000BH000 8.00000000000 12552.121131800005765732.05131999960 0.00016000000 0.07478000000 0.00000000000 0.00000000000BH000 8.00000000000 7114.303321020001417414.95374000000 0.00008000000 0.04037000000 0.00000000000 0.00000000000BH000 8.00000000000 3449.38237812000 686434.44005300000 0.00011000000 0.04913000000 0.00000000000 0.00000000000BH000 8.00000000000 4675.73222497000 950831.20066300000 0.00052000000 0.15571000000 0.00000000000 0.00000000000BH000 8.00000000000 15631.597030000004535343.55709999990 0.00007000000 0.03695000000 0.00000000000 0.00000000000BH000 8.00000000000 3483.15138845000 638754.95863600005 0.00015000000 0.07466000000 0.00000000000 0.00000000000BH000 8.00000000000 6245.492304450001273631.49576000010 0.00088000000 0.21602000000 0.00000000000 0.00000000000BH000 8.00000000000EFTTYEFTTYLac du Caribou Lac du Caribou 19313.190070700007629120.66428000010 0.00017000000 0.06692000000 0.00000000000 0.00000000000BH000 8.00000000000 6649.828791010001490590.51639000000 0.00005000000 0.03755000000 0.00000000000 0.00000000000BH000 8.00000000000 3274.40419510000 454670.66757500003 0.00108000000 0.25357000000 0.00000000000 0.00000000000BH000 8.00000000000EGSBREGSBRGrand lac des les Grand lac des les 22633.584117900009346512.05755000000 0.00010000000 0.04539000000 0.00000000000 0.00000000000BH000 8.00000000000 3956.01051414000 849797.32263900002 0.00006000000 0.03711000000 0.00000000000 0.00000000000BH000 8.00000000000 3177.15984248000 540845.73224799999 0.00074000000 0.19915000000 0.00000000000 0.00000000000BH000 8.00000000000 18413.527311600006368845.61526000030 0.00022000000 0.07153000000 0.00000000000 0.00000000000BH000 8.00000000000 6714.793028480001928327.55816000000 0.00025000000 0.07952000000 0.00000000000 0.00000000000BH000 8.00000000000 6966.674193910002168778.68496000020 0.00007000000 0.03733000000 0.00000000000 0.00000000000BH000 8.00000000000 3172.07323116000 568014.28816000000 0.00019000000 0.07567000000 0.00000000000 0.00000000000BH000 8.00000000000 6952.791479220001664743.59835999990 0.00016000000 0.05288000000 0.00000000000 0.00000000000BH000 8.00000000000 4719.096447730001374071.58887000010 0.00017000000 0.06240000000 0.00000000000 0.00000000000BH000 8.00000000000 5835.764958670001459038.20218000000 0.00007000000 0.03358000000 0.00000000000 0.00000000000BH000 8.00000000000 3225.91279923000 596008.08611300006 0.00426000000 1.46397000000 0.00000000000 0.00000000000BH000 8.00000000000 148685.94474700000 3.71594430260e+007 0.00034000000 0.07795000000 0.00000000000 0.00000000000BH000 8.00000000000 7893.161736530002907961.54088000020 0.00008000000 0.04270000000 0.00000000000 0.00000000000BH000 8.00000000000 3522.13981422000 670851.90309299994 0.00011000000 0.05100000000 0.00000000000 0.00000000000BH000 8.00000000000 4873.07521257000 958918.47308400006 0.00012000000 0.05852000000 0.00000000000 0.00000000000BH000 8.00000000000 5197.661298080001014063.62735000000 0.00021000000 0.09015000000 0.00000000000 0.00000000000BH000 8.00000000000 7386.058853110001829446.83419999990 0.00063000000 0.13460000000 0.00000000000 0.00000000000BH000 8.00000000000 13152.967449000005455795.25311999950 0.00363000000 0.75726000000 0.00000000000 0.00000000000BH000 8.00000000000EGVLCEGVLCRservoir Kiamika Rservoir Kiamika 70809.37178370000 3.14981134457e+007 0.00113000000 0.26841000000 0.00000000000 0.00000000000BH000 8.00000000000EIEHWEIEHWLac au Sorcier Lac au Sorcier 24518.088263300009830378.55230000060 0.00108000000 0.16695000000 0.00000000000 0.00000000000BH000 8.00000000000EGEFQEGEFQLac Doolittle Lac Doolittle 15919.864280500009373471.95340999960 0.00051000000 0.12040000000 0.00000000000 0.00000000000BH000 8.00000000000EHBYEEHBYELac Lusignan Lac Lusignan 12240.485238500004461834.99808999990 0.00011000000 0.04462000000 0.00000000000 0.00000000000BH000 8.00000000000 4417.39786605000 923532.31457799999 0.00013000000 0.05557000000 0.00000000000 0.00000000000BH000 8.00000000000 5033.364765910001087708.61055000010 0.00025000000 0.08823000000 0.00000000000 0.00000000000BH000 8.00000000000 9198.300757340002124559.05902000000 0.00031000000 0.08462000000 0.00000000000 0.00000000000BH000 8.00000000000 9016.388111430002715576.74282999990 0.00008000000 0.03686000000 0.00000000000 0.00000000000BH000 8.00000000000 3671.55845350000 689956.44374300004 0.00011000000 0.04571000000 0.00000000000 0.00000000000BH000 8.00000000000 4380.60198534000 923137.25162700005 0.00020000000 0.08234000000 0.00000000000 0.00000000000BH000 8.00000000000 7144.158102430001760055.32345000000 0.00016000000 0.06197000000 0.00000000000 0.00000000000BH000 8.00000000000 5996.904560550001363049.49096999990 0.00044000000 0.09984000000 0.00000000000 0.00000000000BH000 8.00000000000 10179.225899100003781922.62865999990 0.00048000000 0.12091000000 0.00000000000 0.00000000000BH000 8.00000000000 11959.590882900004176540.20584000000 0.00051000000 0.16604000000 0.00000000000 0.00000000000BH000 8.00000000000EIDEWEIDEWLac Shawinigan Lac Shawinigan 13788.192200000004426662.08578999990 0.00020000000 0.07081000000 0.00000000000 0.00000000000BH000 8.00000000000 6529.383303900001707154.75975000000 0.00007000000 0.03577000000 0.00000000000 0.00000000000BH000 8.00000000000 3723.24452914000 605310.03290999995 0.00007000000 0.03465000000 0.00000000000 0.00000000000BH000 8.00000000000 3446.71517422000 588897.18314800004 0.00065000000 0.19404000000 0.00000000000 0.00000000000BH000 8.00000000000 18224.698266100005607015.29545999970 0.00013000000 0.06562000000 0.00000000000 0.00000000000BH000 8.00000000000EIDEWEIDEWLac Shawinigan Lac Shawinigan 5615.400645790001145395.07837000000 0.00049000000 0.11982000000 0.00000000000 0.00000000000BH000 8.00000000000 11748.777573400004215404.70639999960 0.00012000000 0.05672000000 0.00000000000 0.00000000000BH000 8.00000000000 5749.906539260001053477.04481000010 0.00011000000 0.04189000000 0.00000000000 0.00000000000BH000 8.00000000000 3789.43723273000 913856.53521300002 0.00006000000 0.03893000000 0.00000000000 0.00000000000BH000 8.00000000000 3216.25504385000 521961.65932999999 0.00004000000 0.03390000000 0.00000000000 0.00000000000BH000 8.00000000000 2838.41030871000 367939.44038300001 0.00066000000 0.13223000000 0.00000000000 0.00000000000BH000 8.00000000000EHQQEEHQQELac des Piles Lac des Piles 11716.035585500005693784.67867999990 0.00041000000 0.13784000000 0.00000000000 0.00000000000BH000 8.00000000000 11705.559720700003560917.38970000020 0.00015000000 0.05830000000 0.00000000000 0.00000000000BH000 8.00000000000 5526.502354270001304766.05456000010 0.00042000000 0.13345000000 0.00000000000 0.00000000000BH000 8.00000000000 12858.942137500003687570.21676000020 0.00062000000 0.12920000000 0.00000000000 0.00000000000BH000 8.00000000000EHXFSEHXFSLac Rond Lac Rond 11563.280703800005421060.69233000000 0.00017000000 0.05970000000 0.00000000000 0.00000000000BH000 8.00000000000 5357.165303950001517629.70107000000 0.00026000000 0.10218000000 0.00000000000 0.00000000000BH000 8.00000000000 8954.607212410002258170.62216999990 0.00017000000 0.05488000000 0.00000000000 0.00000000000BH000 8.00000000000 5484.244240810001500267.59929000000 0.00042000000 0.15679000000 0.00000000000 0.00000000000BH000 8.00000000000 14055.733869700003605062.60265999990 0.00007000000 0.03875000000 0.00000000000 0.00000000000BH000 8.00000000000 3671.58290686000 597196.15162200003 0.00009000000 0.05078000000 0.00000000000 0.00000000000BH000 8.00000000000 4202.45199727000 787201.97022200003 0.00011000000 0.04354000000 0.00000000000 0.00000000000BH000 8.00000000000 3724.61144440000 918788.12884699996 0.00010000000 0.05025000000 0.00000000000 0.00000000000BH000 8.00000000000 4471.80090377000 903151.88801200001 0.00022000000 0.08881000000 0.00000000000 0.00000000000BH000 8.00000000000 7948.171967800001896971.90534000010 0.00015000000 0.07346000000 0.00000000000 0.00000000000BH000 8.00000000000 6250.257589290001272394.42583000010 0.00293000000 0.66372000000 0.00000000000 0.00000000000BH000 8.00000000000EGDATEGDATLac Dsert Lac Dsert 61460.29018540000 2.54347598863e+007 0.00015000000 0.05276000000 0.00000000000 0.00000000000BH000 8.00000000000 5505.106007040001301442.42117000000 0.00025000000 0.09613000000 0.00000000000 0.00000000000BH000 8.00000000000 8893.387993300002174291.73483000000 0.00016000000 0.05060000000 0.00000000000 0.00000000000BH000 8.00000000000 4473.738245420001428955.84250000000 0.00057000000 0.22813000000 0.00000000000 0.00000000000BH000 8.00000000000 20690.578773500004950943.06357000020 0.00007000000 0.03494000000 0.00000000000 0.00000000000BH000 8.00000000000 3551.50025546000 573202.56999300001 0.00012000000 0.05488000000 0.00000000000 0.00000000000BH000 8.00000000000 5144.536961840001017110.12512000000 0.00014000000 0.05104000000 0.00000000000 0.00000000000BH000 8.00000000000 5070.634930850001193387.59676999990 0.00033000000 0.10993000000 0.00000000000 0.00000000000BH000 8.00000000000 9890.663125770002865689.22031999980 0.00021000000 0.07984000000 0.00000000000 0.00000000000BH000 8.00000000000 6941.668960960001780823.90002000010 0.00020000000 0.07093000000 0.00000000000 0.00000000000BH000 8.00000000000 6706.182059510001703997.73341999990 0.00053000000 0.13110000000 0.00000000000 0.00000000000BH000 8.00000000000 12126.987534700004570265.32711999960 0.00009000000 0.06959000000 0.00000000000 0.00000000000BH000 8.00000000000 5609.31126701000 767464.41997699998 0.00010000000 0.04364000000 0.00000000000 0.00000000000BH000 8.00000000000 4181.63447556000 896055.40939900000 0.00008000000 0.03422000000 0.00000000000 0.00000000000BH000 8.00000000000 3154.48553603000 700136.77112199995 0.00006000000 0.03760000000 0.00000000000 0.00000000000BH000 8.00000000000 3674.31863142000 564388.85471800005 0.00007000000 0.03949000000 0.00000000000 0.00000000000BH000 8.00000000000 3317.06437391000 617384.49480700004 0.00011000000 0.04537000000 0.00000000000 0.00000000000BH000 8.00000000000 4151.61693952000 971230.74155399995 0.00013000000 0.04976000000 0.00000000000 0.00000000000BH000 8.00000000000 4882.761676970001105489.22038999990 0.00043000000 0.16181000000 0.00000000000 0.00000000000BH000 8.00000000000 14657.491432600003702360.30392999990 0.00040000000 0.14186000000 0.00000000000 0.00000000000BH000 8.00000000000 13745.504072400003494309.70306000020 0.00010000000 0.04119000000 0.00000000000 0.00000000000BH000 8.00000000000 4172.49906502000 892962.50948200002 0.00009000000 0.03970000000 0.00000000000 0.00000000000BH000 8.00000000000 3738.66699241000 742480.90966400004 0.00010000000 0.04837000000 0.00000000000 0.00000000000BH000 8.00000000000 4368.42427378000 864783.09583699994 0.00024000000 0.09071000000 0.00000000000 0.00000000000BH000 8.00000000000 7956.797157680002106351.11483999990 0.00013000000 0.06713000000 0.00000000000 0.00000000000BH000 8.00000000000 5494.614727030001132157.11754000000 0.00006000000 0.03368000000 0.00000000000 0.00000000000BH000 8.00000000000 3132.33175974000 537505.50369799999 0.00027000000 0.08068000000 0.00000000000 0.00000000000BH000 8.00000000000 7309.413308150002369338.38157999980 0.00020000000 0.07353000000 0.00000000000 0.00000000000BH000 8.00000000000 6518.540508020001724769.53526000000 0.00102000000 0.35496000000 0.00000000000 0.00000000000BH000 8.00000000000 33135.684669700008836878.24734999980 0.00013000000 0.04655000000 0.00000000000 0.00000000000BH000 8.00000000000 4569.980468480001114676.84795999990 0.00005000000 0.04165000000 0.00000000000 0.00000000000BH000 8.00000000000 3472.27493460000 465728.01017800003 0.00027000000 0.08432000000 0.00000000000 0.00000000000BH000 8.00000000000 7679.991916080002316131.29149000020 0.00003000000 0.03071000000 0.00000000000 0.00000000000BH000 8.00000000000 2882.16341669000 264283.91051299998 0.00006000000 0.03606000000 0.00000000000 0.00000000000BH000 8.00000000000 3578.01795095000 530232.97667500004 0.00010000000 0.06400000000 0.00000000000 0.00000000000BH000 8.00000000000 5106.66998284000 910318.29959800001 0.00002000000 0.02139000000 0.00000000000 0.00000000000BH000 8.00000000000 1875.68457216000 207786.81246200000 0.00006000000 0.03274000000 0.00000000000 0.00000000000BH000 8.00000000000 3205.21038068000 516836.52367000002 0.00043000000 0.10348000000 0.00000000000 0.00000000000BH000 8.00000000000 9808.088460300003716242.64006000010 0.00022000000 0.08272000000 0.00000000000 0.00000000000BH000 8.00000000000 7672.270535740001876618.54618000010 0.00040000000 0.16789000000 0.00000000000 0.00000000000BH000 8.00000000000 14260.951887400003485713.80712000000 0.00027000000 0.10432000000 0.00000000000 0.00000000000BH000 8.00000000000 9176.866767480002304356.14821999990 0.00007000000 0.03508000000 0.00000000000 0.00000000000BH000 8.00000000000 3516.15435263000 641147.70833299996 0.00016000000 0.06102000000 0.00000000000 0.00000000000BH000 8.00000000000 5072.604393790001371283.78814000010 0.00033000000 0.08117000000 0.00000000000 0.00000000000BH000 8.00000000000 7409.696438970002863529.80164999980 0.00006000000 0.03876000000 0.00000000000 0.00000000000BH000 8.00000000000 3642.80442503000 562091.11858799995 0.00005000000 0.03774000000 0.00000000000 0.00000000000BH000 8.00000000000 3074.27775678000 439058.70198499999 0.00062000000 0.11033000000 0.00000000000 0.00000000000BH000 8.00000000000 10481.215357500005368601.96183000040 0.00009000000 0.04313000000 0.00000000000 0.00000000000BH000 8.00000000000 4583.56545926000 750507.27550500003 0.00012000000 0.04658000000 0.00000000000 0.00000000000BH000 8.00000000000 4364.929153190001033139.62830999990 0.00029000000 0.07428000000 0.00000000000 0.00000000000BH000 8.00000000000EHYWTEHYWTLac Saint-Bernard Lac Saint-Bernard 6625.456097280002546346.87460000020 0.00008000000 0.04003000000 0.00000000000 0.00000000000BH000 8.00000000000 3386.88669149000 676209.49947399995 0.00018000000 0.06164000000 0.00000000000 0.00000000000BH000 8.00000000000 5292.238710590001590219.93482999990 0.00013000000 0.06176000000 0.00000000000 0.00000000000BH000 8.00000000000 5560.598110030001144722.98988000000 0.00018000000 0.08424000000 0.00000000000 0.00000000000BH000 8.00000000000 8280.218711260001596390.34717000000 0.00100000000 0.18584000000 0.00000000000 0.00000000000BH000 8.00000000000EGFWVEGFWVLac l'Eau Claire Lac l'Eau Claire 16336.423422000008683391.03895000000 0.00028000000 0.07028000000 0.00000000000 0.00000000000BH000 8.00000000000 6691.865813380002405116.88668000000 0.00009000000 0.04558000000 0.00000000000 0.00000000000BH000 8.00000000000 4147.65387521000 786521.51387000002 0.00018000000 0.06070000000 0.00000000000 0.00000000000BH000 8.00000000000 5904.294470920001576238.50407000000 0.00008000000 0.04940000000 0.00000000000 0.00000000000BH000 8.00000000000 4049.59200398000 707796.31387499999 0.00031000000 0.08341000000 0.00000000000 0.00000000000BH000 8.00000000000 8160.302904390002717238.96804999980 0.00114000000 0.24623000000 0.00000000000 0.00000000000BH000 8.00000000000EFRDPEFRDPLac Brodtkorb Lac Brodtkorb 22603.166948100009937597.84751000070 0.00003000000 0.02438000000 0.00000000000 0.00000000000BH000 8.00000000000 2164.79016524000 243312.02716699999 0.00045000000 0.12206000000 0.00000000000 0.00000000000BH000 8.00000000000 11075.001171000003930294.82163000010 0.00009000000 0.04025000000 0.00000000000 0.00000000000BH000 8.00000000000 4083.47000553000 782876.13074800000 0.00016000000 0.07074000000 0.00000000000 0.00000000000BH000 8.00000000000 6410.499469160001430112.11556999990 0.00095000000 0.18761000000 0.00000000000 0.00000000000BH000 8.00000000000 17955.489886800008278685.51676999960 0.00036000000 0.11003000000 0.00000000000 0.00000000000BH000 8.00000000000 9886.449766800003163361.19645999980 0.00017000000 0.05794000000 0.00000000000 0.00000000000BH000 8.00000000000 5191.043468580001500566.34865999990 0.00006000000 0.03891000000 0.00000000000 0.00000000000BH000 8.00000000000 3236.01644198000 513706.29951799999 0.00006000000 0.03151000000 0.00000000000 0.00000000000BH000 8.00000000000 3262.08750610000 478762.92952300003 0.00104000000 0.21711000000 0.00000000000 0.00000000000BH000 8.00000000000EGJSEEGJSELac Forbes Lac Forbes 20615.707894600009075056.65496000090 0.00116000000 0.20119000000 0.00000000000 0.00000000000BH000 8.00000000000EHYMFEHYMFLac Sacacomie Lac Sacacomie 19834.53113050000 1.00596504995e+007 0.00043000000 0.13075000000 0.00000000000 0.00000000000BH000 8.00000000000 11329.170668100003715668.69467000010 0.00015000000 0.06102000000 0.00000000000 0.00000000000BH000 8.00000000000 5235.438616220001325196.21744000000 0.00012000000 0.05809000000 0.00000000000 0.00000000000BH000 8.00000000000 6247.125190680001085490.93528999990 0.00010000000 0.04375000000 0.00000000000 0.00000000000BH000 8.00000000000 4161.95659290000 831627.32361800002 0.00039000000 0.09992000000 0.00000000000 0.00000000000BH000 8.00000000000 9214.793107210003436497.90461000010 0.00011000000 0.04939000000 0.00000000000 0.00000000000BH000 8.00000000000 4289.24447398000 976991.54561899998 0.00163000000 0.70188000000 0.00000000000 0.00000000000BH000 8.00000000000 67079.20198880001 1.42518066985e+007 0.00040000000 0.11174000000 0.00000000000 0.00000000000BH000 8.00000000000 9871.140726080003496633.18159999980 0.00006000000 0.04112000000 0.00000000000 0.00000000000BH000 8.00000000000 3722.65857115000 485530.01775200001 0.00010000000 0.04635000000 0.00000000000 0.00000000000BH000 8.00000000000 4115.50533155000 894740.92261300003 0.00019000000 0.06561000000 0.00000000000 0.00000000000BH000 8.00000000000 6407.929782520001641911.11312000010 0.00014000000 0.04842000000 0.00000000000 0.00000000000BH000 8.00000000000EIHFREIHFRLac Tibriade Lac Tibriade 4943.618689910001178336.11751000000 0.00009000000 0.04061000000 0.00000000000 0.00000000000BH000 8.00000000000 3905.82013601000 824759.99496899999 0.00008000000 0.03615000000 0.00000000000 0.00000000000BH000 8.00000000000 3310.14411003000 659793.52569000004 0.00024000000 0.07920000000 0.00000000000 0.00000000000BH000 8.00000000000 7392.215851130002088407.19424000010 0.00007000000 0.03711000000 0.00000000000 0.00000000000BH000 8.00000000000 3496.78768535000 604614.55302200001 0.00012000000 0.05437000000 0.00000000000 0.00000000000BH000 8.00000000000 5089.728964480001038649.80748000000 0.00017000000 0.08733000000 0.00000000000 0.00000000000BH000 8.00000000000 8016.192882920001500381.88100999990 0.00235000000 0.50839000000 0.00000000000 0.00000000000BH000 8.00000000000EFRRAEFRRALac Bryson Lac Bryson 48378.20332270000 2.04888609919e+007 0.00050000000 0.15531000000 0.00000000000 0.00000000000BH000 8.00000000000 14338.057738300004386338.28741000030 0.00017000000 0.06271000000 0.00000000000 0.00000000000BH000 8.00000000000 5692.605203320001485495.20744000000 0.00002000000 0.02159000000 0.00000000000 0.00000000000BH000 8.00000000000 1926.24674909000 216096.69758899999 0.00006000000 0.04452000000 0.00000000000 0.00000000000BH000 8.00000000000 3746.92287645000 559812.85190500005 0.00017000000 0.05954000000 0.00000000000 0.00000000000BH000 8.00000000000 6096.381344400001455413.18655000000 0.00015000000 0.05643000000 0.00000000000 0.00000000000BH000 8.00000000000 5284.968204620001287218.05175000010 0.00083000000 0.14788000000 0.00000000000 0.00000000000BH000 8.00000000000 14080.247098600007219670.42251999960 0.00011000000 0.05347000000 0.00000000000 0.00000000000BH000 8.00000000000 4415.14228998000 932302.49676200002 0.00037000000 0.09533000000 0.00000000000 0.00000000000BH000 8.00000000000 9139.148745680003259028.25735000010 0.00031000000 0.10789000000 0.00000000000 0.00000000000BH000 8.00000000000 9696.809178030002709414.19655000000 0.00062000000 0.12990000000 0.00000000000 0.00000000000BH000 8.00000000000EHUBXEHUBXLac Quinn Lac Quinn 13432.744808900005368061.50342000000 0.00009000000 0.03787000000 0.00000000000 0.00000000000BH000 8.00000000000 3565.60442254000 768524.02257799997 0.00007000000 0.03649000000 0.00000000000 0.00000000000BH000 8.00000000000 3478.95487435000 633817.13774000003 0.00183000000 0.29320000000 0.00000000000 0.00000000000BH000 8.00000000000EGRYQEGRYQLac des les Lac des les 29722.48598330000 1.59641651014e+007 0.00007000000 0.03687000000 0.00000000000 0.00000000000BH000 8.00000000000 3497.34533768000 592211.61092799995 0.00006000000 0.04298000000 0.00000000000 0.00000000000BH000 8.00000000000 3880.75749671000 523663.09747400001 0.00007000000 0.03368000000 0.00000000000 0.00000000000BH000 8.00000000000 3495.64139309000 571822.95386300003 0.00005000000 0.03417000000 0.00000000000 0.00000000000BH000 8.00000000000 3340.79744817000 453305.08324499999 0.00011000000 0.05831000000 0.00000000000 0.00000000000BH000 8.00000000000 5097.25653239000 994493.02251899999 0.00014000000 0.06242000000 0.00000000000 0.00000000000BH000 8.00000000000 5406.335626600001238854.36067000010 0.00005000000 0.02794000000 0.00000000000 0.00000000000BH000 8.00000000000 2851.96342731000 401900.46858599997 0.00030000000 0.12243000000 0.00000000000 0.00000000000BH000 8.00000000000 11026.898903300002643795.73058999980 0.00084000000 0.14666000000 0.00000000000 0.00000000000BH000 8.00000000000 15526.246046100007295746.60952000040 0.00018000000 0.08019000000 0.00000000000 0.00000000000BH000 8.00000000000 6611.792335700001576068.58605999990 0.00050000000 0.14064000000 0.00000000000 0.00000000000BH000 8.00000000000 12299.821171400004344389.10668000020 0.00007000000 0.05926000000 0.00000000000 0.00000000000BH000 8.00000000000 5200.90798041000 631351.92505299998 0.00006000000 0.03511000000 0.00000000000 0.00000000000BH000 8.00000000000 3220.83922038000 519508.50676700001 0.00030000000 0.12158000000 0.00000000000 0.00000000000BH000 8.00000000000 10789.279670600002616756.12648000010 0.00013000000 0.05138000000 0.00000000000 0.00000000000BH000 8.00000000000 5088.023000450001174488.39541000010 0.00006000000 0.03763000000 0.00000000000 0.00000000000BH000 8.00000000000 3246.67450380000 561686.92701900005 0.00007000000 0.03683000000 0.00000000000 0.00000000000BH000 8.00000000000 3283.99050174000 576485.59261900000 0.00019000000 0.08163000000 0.00000000000 0.00000000000BH000 8.00000000000 7019.184054620001668221.77367000000 0.00005000000 0.03722000000 0.00000000000 0.00000000000BH000 8.00000000000 3274.87782247000 466517.14332600002 0.00247000000 0.29922000000 0.00000000000 0.00000000000BH000 8.00000000000ELTXJELTXJGrand lac Nominingue Grand lac Nominingue 27974.01112380000 2.15373611510e+007 0.00014000000 0.04788000000 0.00000000000 0.00000000000BH000 8.00000000000 4629.584923990001233839.62589000000 0.00007000000 0.03322000000 0.00000000000 0.00000000000BH000 8.00000000000 3087.40839658000 576018.47925500001 0.00028000000 0.08932000000 0.00000000000 0.00000000000BH000 8.00000000000 8358.090038350002419316.40493999980 0.00014000000 0.05458000000 0.00000000000 0.00000000000BH000 8.00000000000 4996.048956090001197038.35977000000 0.00193000000 0.37998000000 0.00000000000 0.00000000000BH000 8.00000000000EHTQMEHTQMLac Pythonga Lac Pythonga 38916.13701400000 1.68245362944e+007 0.00041000000 0.11006000000 0.00000000000 0.00000000000BH000 8.00000000000 9997.088452480003603558.95031999980 0.00005000000 0.03245000000 0.00000000000 0.00000000000BH000 8.00000000000 3299.50024752000 420149.12958299997 0.00004000000 0.03249000000 0.00000000000 0.00000000000BH000 8.00000000000 2782.90766157000 334881.67868000001 0.00004000000 0.02703000000 0.00000000000 0.00000000000BH000 8.00000000000 2526.02879822000 331537.08406099997 0.00007000000 0.03380000000 0.00000000000 0.00000000000BH000 8.00000000000 3184.33728886000 597321.58579000004 0.00051000000 0.11291000000 0.00000000000 0.00000000000BH000 8.00000000000 10756.492917600004494001.24517000000 0.00006000000 0.03589000000 0.00000000000 0.00000000000BH000 8.00000000000 3128.49094356000 539340.67279099999 0.00017000000 0.06856000000 0.00000000000 0.00000000000BH000 8.00000000000 6256.379736300001452309.95366000010 0.00013000000 0.05090000000 0.00000000000 0.00000000000BH000 8.00000000000 4923.711307980001164365.19242000000 0.00006000000 0.03181000000 0.00000000000 0.00000000000BH000 8.00000000000 3148.98428885000 538556.17663300002 0.00016000000 0.06038000000 0.00000000000 0.00000000000BH000 8.00000000000 6296.473907960001386475.03086999990 0.00006000000 0.03246000000 0.00000000000 0.00000000000BH000 8.00000000000 3296.34423546000 500996.15363199997 0.00020000000 0.06096000000 0.00000000000 0.00000000000BH000 8.00000000000 5945.400596340001774390.86893000010 0.00010000000 0.04049000000 0.00000000000 0.00000000000BH000 8.00000000000 3920.91056177000 860310.28256600001 0.00049000000 0.11997000000 0.00000000000 0.00000000000BH000 8.00000000000 11469.370225200004297762.11357999970 0.00009000000 0.04860000000 0.00000000000 0.00000000000BH000 8.00000000000 4262.03634919000 812144.42684400000 0.00008000000 0.05829000000 0.00000000000 0.00000000000BH000 8.00000000000 4693.30119577000 673176.30494199996 0.00022000000 0.05978000000 0.00000000000 0.00000000000BH000 8.00000000000 5464.780078470001933628.66721000010 0.00012000000 0.05408000000 0.00000000000 0.00000000000BH000 8.00000000000 4678.480488920001020118.47473000000 0.00013000000 0.04976000000 0.00000000000 0.00000000000BH000 8.00000000000 4490.467157350001164407.11885000000 0.00009000000 0.04358000000 0.00000000000 0.00000000000BH000 8.00000000000 3688.75264881000 799762.00597599999 0.00014000000 0.06299000000 0.00000000000 0.00000000000BH000 8.00000000000 6194.859670990001219431.09402000000 0.00008000000 0.04240000000 0.00000000000 0.00000000000BH000 8.00000000000 3575.57680503000 728111.90855800000 0.00017000000 0.05959000000 0.00000000000 0.00000000000BH000 8.00000000000 5688.130075400001488181.20340000000 0.00003000000 0.02055000000 0.00000000000 0.00000000000BH000 8.00000000000 1882.03500715000 231135.29609900000 0.00008000000 0.04583000000 0.00000000000 0.00000000000BH000 8.00000000000 3872.50083510000 726579.62379300001 0.00007000000 0.03617000000 0.00000000000 0.00000000000BH000 8.00000000000 3657.63549930000 596896.36908900004 0.00010000000 0.04532000000 0.00000000000 0.00000000000BH000 8.00000000000 4087.58065571000 861966.55437400006 0.00012000000 0.04419000000 0.00000000000 0.00000000000BH000 8.00000000000 4275.713212230001052341.07144999990 0.00059000000 0.17593000000 0.00000000000 0.00000000000BH000 8.00000000000 16585.687338400005177796.82515999950 0.00015000000 0.05626000000 0.00000000000 0.00000000000BH000 8.00000000000 5435.632288760001271896.32080000010 0.00008000000 0.04387000000 0.00000000000 0.00000000000BH000 8.00000000000 4592.49180923000 722628.25045499997 0.00012000000 0.05358000000 0.00000000000 0.00000000000BH000 8.00000000000 4836.736521670001079586.65182000000 0.00012000000 0.05090000000 0.00000000000 0.00000000000BH000 8.00000000000 4609.079181340001074867.10055999990 0.00058000000 0.17294000000 0.00000000000 0.00000000000BH000 8.00000000000 16178.288046500005067344.44878000020 0.00011000000 0.06264000000 0.00000000000 0.00000000000BH000 8.00000000000 6390.31202943000 928176.60339900001 0.00009000000 0.04096000000 0.00000000000 0.00000000000BH000 8.00000000000 4083.40772395000 812696.05300299998 0.00014000000 0.05750000000 0.00000000000 0.00000000000BH000 8.00000000000 5649.080887450001214402.02762999990 0.00017000000 0.06108000000 0.00000000000 0.00000000000BH000 8.00000000000 5452.567169030001479066.18142000000 0.00038000000 0.14283000000 0.00000000000 0.00000000000BH000 8.00000000000 13436.276510100003350237.01116999980 0.00018000000 0.05741000000 0.00000000000 0.00000000000BH000 8.00000000000 5287.167435210001559333.50337000000 0.00009000000 0.05452000000 0.00000000000 0.00000000000BH000 8.00000000000 4509.00323194000 789878.70214199997 0.00144000000 0.35231000000 0.00000000000 0.00000000000BH000 8.00000000000 32835.89154980000 1.25844852869e+007 0.00003000000 0.02760000000 0.00000000000 0.00000000000BH000 8.00000000000 2580.04252994000 276355.03846299998 0.00022000000 0.09817000000 0.00000000000 0.00000000000BH000 8.00000000000 9000.265095980001921274.31177000000 0.00028000000 0.11278000000 0.00000000000 0.00000000000BH000 8.00000000000 10620.846805400002430870.56491999980 0.00047000000 0.14131000000 0.00000000000 0.00000000000BH000 8.00000000000 11943.810929100004096571.66109000010 0.00027000000 0.08142000000 0.00000000000 0.00000000000BH000 8.00000000000 7666.754318760002389443.06195000000 0.00022000000 0.06918000000 0.00000000000 0.00000000000BH000 8.00000000000 6396.996526800001947803.70203000000 0.00014000000 0.05177000000 0.00000000000 0.00000000000BH000 8.00000000000 4953.114332460001217200.10572000010 0.00017000000 0.06983000000 0.00000000000 0.00000000000BH000 8.00000000000 6416.520360340001519115.69750000000 0.00046000000 0.15339000000 0.00000000000 0.00000000000BH000 8.00000000000 15002.398552700004058705.11138000010 0.00051000000 0.10950000000 0.00000000000 0.00000000000BH000 8.00000000000 10448.576108800004420782.36524999980 0.00007000000 0.03934000000 0.00000000000 0.00000000000BH000 8.00000000000 3436.09900444000 648330.79404099996 0.00010000000 0.05545000000 0.00000000000 0.00000000000BH000 8.00000000000 5228.37143980000 884063.38355000003 0.00083000000 0.13954000000 0.00000000000 0.00000000000BH000 8.00000000000 12775.608727400007236345.36625000000 0.00016000000 0.04904000000 0.00000000000 0.00000000000BH000 8.00000000000 4693.376263970001441555.69864999990 0.00056000000 0.16204000000 0.00000000000 0.00000000000BH000 8.00000000000 16188.929709200004897105.04669999980 0.00017000000 0.08738000000 0.00000000000 0.00000000000BH000 8.00000000000 7110.642232590001507258.48173000010 0.00014000000 0.06439000000 0.00000000000 0.00000000000BH000 8.00000000000 6237.610999150001254306.81014000000 0.00029000000 0.10756000000 0.00000000000 0.00000000000BH000 8.00000000000 9675.639230120002567700.97190999980 0.00007000000 0.03750000000 0.00000000000 0.00000000000BH000 8.00000000000 3508.90503278000 621830.98688099999 0.00034000000 0.09844000000 0.00000000000 0.00000000000BH000 8.00000000000 9489.686257290002987085.65989999990 0.00037000000 0.09950000000 0.00000000000 0.00000000000BH000 8.00000000000 9580.436315780003216010.58711999980 0.00010000000 0.04817000000 0.00000000000 0.00000000000BH000 8.00000000000 4366.76025902000 893906.15878800000 0.00015000000 0.05798000000 0.00000000000 0.00000000000BH000 8.00000000000 5580.679318870001321284.06028000010 0.00016000000 0.06069000000 0.00000000000 0.00000000000BH000 8.00000000000 5457.189467540001370526.42710000000 0.00007000000 0.04579000000 0.00000000000 0.00000000000BH000 8.00000000000 3971.36874707000 583101.80761300004 0.00028000000 0.09716000000 0.00000000000 0.00000000000BH000 8.00000000000 9156.865585550002441723.94974000010 0.00019000000 0.06078000000 0.00000000000 0.00000000000BH000 8.00000000000 6101.835492480001692749.60541000010 0.00148000000 0.33399000000 0.00000000000 0.00000000000BH000 8.00000000000EGFRUEGFRULac Duval Lac Duval 32071.03303310000 1.29376683505e+007 0.00009000000 0.04137000000 0.00000000000 0.00000000000BH000 8.00000000000 3930.61193355000 746746.62839900004 0.00007000000 0.03750000000 0.00000000000 0.00000000000BH000 8.00000000000 3525.19742446000 650273.15995899995 0.00005000000 0.03799000000 0.00000000000 0.00000000000BH000 8.00000000000 3269.64245007000 475769.60471599997 0.00008000000 0.03781000000 0.00000000000 0.00000000000BH000 8.00000000000 3478.96432485000 684529.78663900006 0.00014000000 0.05291000000 0.00000000000 0.00000000000BH000 8.00000000000 4948.344533250001229417.47875000000 0.00014000000 0.05004000000 0.00000000000 0.00000000000BH000 8.00000000000 4636.595960400001191595.45750000000 0.00008000000 0.04343000000 0.00000000000 0.00000000000BH000 8.00000000000 3840.72402786000 658856.67920300004 0.00020000000 0.08710000000 0.00000000000 0.00000000000BH000 8.00000000000 8393.124308470001769674.50301999990 0.00006000000 0.03417000000 0.00000000000 0.00000000000BH000 8.00000000000 3222.32215120000 541453.56443699996 0.00031000000 0.08319000000 0.00000000000 0.00000000000BH000 8.00000000000 8489.910622870002696535.30213000020 0.00157000000 0.30396000000 0.00000000000 0.00000000000BH000 8.00000000000EFISPEFISPLac Archambault Lac Archambault 29698.13366750000 1.37546029688e+007 0.00027000000 0.06706000000 0.00000000000 0.00000000000BH000 8.00000000000 6221.126695630002386160.35192999990 0.00116000000 0.14298000000 0.00000000000 0.00000000000BH000 8.00000000000EHELOEHELOLac Maskinong Lac Maskinong 13015.16999850000 1.01804862263e+007 0.00004000000 0.02884000000 0.00000000000 0.00000000000BH000 8.00000000000 2618.43444617000 332401.51129400003 0.00006000000 0.03253000000 0.00000000000 0.00000000000BH000 8.00000000000 3311.72833677000 510132.63083600003 0.00024000000 0.09456000000 0.00000000000 0.00000000000BH000 8.00000000000 9268.154959050002060608.61580000000 0.00014000000 0.05164000000 0.00000000000 0.00000000000BH000 8.00000000000 4947.034728550001205397.58226000010 0.00011000000 0.05411000000 0.00000000000 0.00000000000BH000 8.00000000000 5391.61989388000 996315.58233400004 0.00009000000 0.04069000000 0.00000000000 0.00000000000BH000 8.00000000000 3837.01259436000 746690.03888699994 0.00012000000 0.05385000000 0.00000000000 0.00000000000BH000 8.00000000000 5326.379620750001066940.75108999990 0.00010000000 0.04692000000 0.00000000000 0.00000000000BH000 8.00000000000 4205.43245694000 857428.03661800001 0.00010000000 0.04917000000 0.00000000000 0.00000000000BH000 8.00000000000 4663.10919556000 917635.38611900003 0.00055000000 0.10323000000 0.00000000000 0.00000000000BH000 8.00000000000 9173.587274520004850815.11967999950 0.00007000000 0.03298000000 0.00000000000 0.00000000000BH000 8.00000000000 3216.73603725000 574423.36318900005 0.00132000000 0.22519000000 0.00000000000 0.00000000000BH000 8.00000000000EHHSXEHHSXLac Montjoie Lac Montjoie 22240.47511340000 1.15561066755e+007 0.00025000000 0.09984000000 0.00000000000 0.00000000000BH000 8.00000000000 8781.470216600002174977.73235999980 0.00497000000 0.92411000000 0.00000000000 0.00000000000BH000 8.00000000000EHYKNEHYKNRservoir aux Sables Rservoir aux Sables 90786.88741570000 4.36185317739e+007 0.00748000000 1.19680000000 0.00000000000 0.00000000000BH000 8.00000000000EIIMCEIIMCLac des Trente et Un Milles Lac des Trente et Un Milles 118192.73734700000 6.56851346888e+007 0.00170000000 0.24369000000 0.00000000000 0.00000000000BH000 8.00000000000EHMRMEHMRMLac Ouareau Lac Ouareau 23452.85629220000 1.48822797026e+007 0.00020000000 0.06159000000 0.00000000000 0.00000000000BH000 8.00000000000 5636.465111160001738137.37922000000 0.00011000000 0.04548000000 0.00000000000 0.00000000000BH000 8.00000000000 4347.50944952000 936477.87296199996 0.00006000000 0.03322000000 0.00000000000 0.00000000000BH000 8.00000000000 3268.61992858000 491708.26323600003 0.00031000000 0.07560000000 0.00000000000 0.00000000000BH000 8.00000000000 7558.491066740002748364.52307000010 0.00007000000 0.03929000000 0.00000000000 0.00000000000BH000 8.00000000000 3950.51674800000 596292.42713299999 0.00040000000 0.12111000000 0.00000000000 0.00000000000BH000 8.00000000000 11397.692719700003480991.02588000010 0.00003000000 0.02160000000 0.00000000000 0.00000000000BH000 8.00000000000 2058.23271344000 228505.75632799999 0.00022000000 0.09565000000 0.00000000000 0.00000000000BH000 8.00000000000 9412.074258030001925730.14794999990 0.00009000000 0.04323000000 0.00000000000 0.00000000000BH000 8.00000000000 3792.84229936000 803969.43431699998 0.00045000000 0.11020000000 0.00000000000 0.00000000000BH000 8.00000000000 10484.274608300003963526.72738000010 0.00026000000 0.12248000000 0.00000000000 0.00000000000BH000 8.00000000000 10625.200613100002300496.23881000000 0.00169000000 0.24019000000 0.00000000000 0.00000000000BH000 8.00000000000EFVLBEFVLBGrand lac du Cerf Grand lac du Cerf 23174.17666430000 1.48326297954e+007 0.00005000000 0.03719000000 0.00000000000 0.00000000000BH000 8.00000000000 3160.95874564000 435835.91098900000 0.00018000000 0.06117000000 0.00000000000 0.00000000000BH000 8.00000000000 5971.498631820001547398.99206999990 0.00013000000 0.05827000000 0.00000000000 0.00000000000BH000 8.00000000000 5018.820112570001106650.28092000000 0.00010000000 0.04225000000 0.00000000000 0.00000000000BH000 8.00000000000 4282.66844216000 876540.70912000001 0.00022000000 0.06626000000 0.00000000000 0.00000000000BH000 8.00000000000 6777.288758420001912532.61617999990 0.00036000000 0.14723000000 0.00000000000 0.00000000000BH000 8.00000000000 13516.065612100003170975.42498000010 0.03560000000 0.92583000000 0.00000000000 0.00000000000BH000 8.00000000000EIATYEIATYLac Saint-Pierre Lac Saint-Pierre 80537.24645140000 3.12648851642e+008 0.00050000000 0.16540000000 0.00000000000 0.00000000000BH000 8.00000000000 15087.383180500004383211.56039999980 0.00006000000 0.03224000000 0.00000000000 0.00000000000BH000 8.00000000000 3107.45272952000 499860.26416999998 0.00005000000 0.03242000000 0.00000000000 0.00000000000BH000 8.00000000000 3453.79476926000 447637.68702100002 0.00014000000 0.05958000000 0.00000000000 0.00000000000BH000 8.00000000000 5874.516171630001213587.89739999990 0.00115000000 0.23568000000 0.00000000000 0.00000000000BH000 8.00000000000 22118.90528650000 1.00563213973e+007 0.00010000000 0.04497000000 0.00000000000 0.00000000000BH000 8.00000000000 4350.01014403000 864023.77556900005 0.00015000000 0.05923000000 0.00000000000 0.00000000000BH000 8.00000000000 5236.085885910001271735.37488000000 0.00007000000 0.03488000000 0.00000000000 0.00000000000BH000 8.00000000000 3175.21658157000 603539.82270200003 0.00008000000 0.03943000000 0.00000000000 0.00000000000BH000 8.00000000000 3519.55242175000 680962.48720199999 0.00003000000 0.02541000000 0.00000000000 0.00000000000BH000 8.00000000000 2214.77272204000 284867.17377200001 0.00003000000 0.02386000000 0.00000000000 0.00000000000BH000 8.00000000000 2388.76743264000 234698.60766700000 0.00037000000 0.14835000000 0.00000000000 0.00000000000BH000 8.00000000000 12675.678305200003282596.93380000020 0.00039000000 0.11343000000 0.00000000000 0.00000000000BH000 8.00000000000 10990.100906600003454269.06790000010 0.00180000000 0.24288000000 0.00000000000 0.00000000000BH000 8.00000000000EFOLWEFOLWLac Blue Sea Lac Blue Sea 24140.60378710000 1.57681487901e+007 0.00023000000 0.08107000000 0.00000000000 0.00000000000BH000 8.00000000000 7754.493596610001998304.72922999990 0.00025000000 0.07864000000 0.00000000000 0.00000000000BH000 8.00000000000 6826.441777800002149919.04648000000 0.00017000000 0.05999000000 0.00000000000 0.00000000000BH000 8.00000000000 5882.112225160001453876.70139000010 0.00081000000 0.23928000000 0.00000000000 0.00000000000BH000 8.00000000000 24859.460025700007075510.64879999960 0.00068000000 0.16875000000 0.00000000000 0.00000000000BH000 8.00000000000 15604.574463600005980881.36615000010 0.00006000000 0.03607000000 0.00000000000 0.00000000000BH000 8.00000000000 3536.54739225000 528736.99113900005 0.00007000000 0.04176000000 0.00000000000 0.00000000000BH000 8.00000000000 3509.37418716000 578836.77170299995 0.00033000000 0.11974000000 0.00000000000 0.00000000000BH000 8.00000000000 10168.251949200002922814.15964000020 0.00066000000 0.12124000000 0.00000000000 0.00000000000BH000 8.00000000000 12123.006435300005793640.23912000000 0.00063000000 0.18437000000 0.00000000000 0.00000000000BH000 8.00000000000 17715.266207700005532646.55583999960 0.00006000000 0.03346000000 0.00000000000 0.00000000000BH000 8.00000000000 2963.58262013000 549168.26524600002 0.00016000000 0.06032000000 0.00000000000 0.00000000000BH000 8.00000000000 5841.288435360001388348.59572999990 0.00040000000 0.09238000000 0.00000000000 0.00000000000BH000 8.00000000000 9182.806737610003481861.29591999990 0.00053000000 0.12537000000 0.00000000000 0.00000000000BH000 8.00000000000 11335.010351600004657611.29427000040 0.00013000000 0.05748000000 0.00000000000 0.00000000000BH000 8.00000000000 5119.997542310001167729.27655000010 0.00017000000 0.08113000000 0.00000000000 0.00000000000BH000 8.00000000000 7459.721178940001527780.83170000000 0.00008000000 0.05077000000 0.00000000000 0.00000000000BH000 8.00000000000 4420.80208395000 672113.57523800002 0.00006000000 0.03502000000 0.00000000000 0.00000000000BH000 8.00000000000 3281.04987238000 507131.57999699999 0.00004000000 0.02673000000 0.00000000000 0.00000000000BH000 8.00000000000 2688.49764250000 368749.80215200002 0.00012000000 0.04922000000 0.00000000000 0.00000000000BH000 8.00000000000 4902.656125490001051276.60680000000 0.00034000000 0.09396000000 0.00000000000 0.00000000000BH000 8.00000000000 9606.771631730003017942.07826999990 0.00014000000 0.05471000000 0.00000000000 0.00000000000BH000 8.00000000000 4975.403554810001211040.99799000010 0.00008000000 0.04992000000 0.00000000000 0.00000000000BH000 8.00000000000 4503.26620251000 666824.34082000004 0.00007000000 0.04046000000 0.00000000000 0.00000000000BH000 8.00000000000 3385.74642048000 647871.62720100000 0.00015000000 0.05820000000 0.00000000000 0.00000000000BH000 8.00000000000 5513.900881110001353825.76310000010 0.00009000000 0.04619000000 0.00000000000 0.00000000000BH000 8.00000000000 4061.39879832000 772812.17147099995 0.00009000000 0.04531000000 0.00000000000 0.00000000000BH000 8.00000000000 4404.63908036000 813126.70598600002 0.00026000000 0.07856000000 0.00000000000 0.00000000000BH000 8.00000000000 7845.887013980002319610.02981999980 0.00032000000 0.08469000000 0.00000000000 0.00000000000BH000 8.00000000000 7762.905348860002795417.61829000010 0.00006000000 0.03874000000 0.00000000000 0.00000000000BH000 8.00000000000 3996.25917139000 536661.48757799994 0.00003000000 0.02360000000 0.00000000000 0.00000000000BH000 8.00000000000 2457.83979172000 261166.11072800000 0.00012000000 0.05365000000 0.00000000000 0.00000000000BH000 8.00000000000 4906.947423990001039949.47965000000 0.00055000000 0.18575000000 0.00000000000 0.00000000000BH000 8.00000000000 17823.374927100004867063.27417000010 0.00028000000 0.07933000000 0.00000000000 0.00000000000BH000 8.00000000000 7562.478602780002452385.31566999990 0.00006000000 0.03741000000 0.00000000000 0.00000000000BH000 8.00000000000 3290.88723289000 543252.58594200003 0.00028000000 0.08473000000 0.00000000000 0.00000000000BH000 8.00000000000 8129.954513720002480814.18246999990 0.00006000000 0.03397000000 0.00000000000 0.00000000000BH000 8.00000000000 3386.33018465000 527047.71269099996 0.00015000000 0.06798000000 0.00000000000 0.00000000000BH000 8.00000000000 7307.567108630001330139.49961000010 0.00024000000 0.06483000000 0.00000000000 0.00000000000BH000 8.00000000000 6535.263115620002140169.06522000020 0.00007000000 0.04380000000 0.00000000000 0.00000000000BH000 8.00000000000 4393.29124785000 634293.33253599994 0.00031000000 0.08683000000 0.00000000000 0.00000000000BH000 8.00000000000 8810.071246850002691155.00058000020 0.00021000000 0.06708000000 0.00000000000 0.00000000000BH000 8.00000000000 6174.426894340001847714.28101000000 0.00032000000 0.10492000000 0.00000000000 0.00000000000BH000 8.00000000000 9288.109160120002829158.40108999980 0.00235000000 0.34298000000 0.00000000000 0.00000000000BH000 8.00000000000EGLDVEGLDVLac Gagnon Lac Gagnon 34275.53293030000 2.06643884272e+007 0.00008000000 0.04531000000 0.00000000000 0.00000000000BH000 8.00000000000 3870.37344907000 685077.42427700001 0.00011000000 0.04213000000 0.00000000000 0.00000000000BH000 8.00000000000 4034.03680460000 990659.09195399994 0.00009000000 0.04538000000 0.00000000000 0.00000000000BH000 8.00000000000 4103.89911419000 766579.60043400002 0.00020000000 0.08220000000 0.00000000000 0.00000000000BH000 8.00000000000 6746.791094300001796120.18655000000 0.00026000000 0.10089000000 0.00000000000 0.00000000000BH000 8.00000000000 9580.794716250002271253.22257999980 0.00008000000 0.04351000000 0.00000000000 0.00000000000BH000 8.00000000000 4321.59562881000 703389.60598500003 0.00129000000 0.20547000000 0.00000000000 0.00000000000BH000 8.00000000000EIELGEIELGLac du Sourd Lac du Sourd 19267.85524010000 1.13802590503e+007 0.00036000000 0.10641000000 0.00000000000 0.00000000000BH000 8.00000000000 11164.789214600003189443.90976999980 0.00044000000 0.14366000000 0.00000000000 0.00000000000BH000 8.00000000000 12237.108596300003850864.38320000000 0.00079000000 0.20494000000 0.00000000000 0.00000000000BH000 8.00000000000 19280.184013900006916028.98795000000 0.03584000000 4.77236000000 0.00000000000 0.00000000000BH000 8.00000000000 452573.67974499997 3.18076329876e+008 0.00008000000 0.03826000000 0.00000000000 0.00000000000BH000 8.00000000000 3956.24955243000 731716.49327900005 0.00005000000 0.03403000000 0.00000000000 0.00000000000BH000 8.00000000000 3547.92046110000 476004.82044799998 0.00010000000 0.04842000000 0.00000000000 0.00000000000BH000 8.00000000000 4394.65502448000 919966.52447199996 0.00016000000 0.06619000000 0.00000000000 0.00000000000BH000 8.00000000000 6901.054766520001432642.60709000010 0.00066000000 0.11720000000 0.00000000000 0.00000000000BH000 8.00000000000EPEGWEPEGWLac Marie-Le Franc Lac Marie-Le Franc 10942.343771800005821122.96691000000 0.00007000000 0.03713000000 0.00000000000 0.00000000000BH000 8.00000000000 3478.54222753000 588772.98773599998 0.00147000000 0.31923000000 0.00000000000 0.00000000000BH000 8.00000000000 33339.50298830000 1.29284052260e+007 0.00015000000 0.05161000000 0.00000000000 0.00000000000BH000 8.00000000000 5054.909209620001361828.71118999990 0.00139000000 0.58477000000 0.00000000000 0.00000000000BH000 8.00000000000 54311.71807080000 1.22407950328e+007 0.00016000000 0.08529000000 0.00000000000 0.00000000000BH000 8.00000000000 7571.165612830001441399.83025000010 0.00008000000 0.04518000000 0.00000000000 0.00000000000BH000 8.00000000000 4138.35996445000 734427.36749700003 0.00013000000 0.04693000000 0.00000000000 0.00000000000BH000 8.00000000000 4283.754843400001122553.60567000000 0.00015000000 0.04879000000 0.00000000000 0.00000000000BH000 8.00000000000 4484.618149520001276364.51633000000 0.00010000000 0.04574000000 0.00000000000 0.00000000000BH000 8.00000000000 4373.29012913000 904178.33330599999 0.00035000000 0.12188000000 0.00000000000 0.00000000000BH000 8.00000000000 11416.629929100003066247.65707999980 0.00099000000 0.20040000000 0.00000000000 0.00000000000BH000 8.00000000000EFVBWEFVBWLac Cayamant Lac Cayamant 20616.556786000008720113.48587000000 0.00011000000 0.05236000000 0.00000000000 0.00000000000BH000 8.00000000000 4737.36344522000 999419.03411100002 0.00006000000 0.04408000000 0.00000000000 0.00000000000BH000 8.00000000000 3685.85938413000 508845.51534899999 0.00022000000 0.08819000000 0.00000000000 0.00000000000BH000 8.00000000000 7733.705089400001912755.29654000000 0.00005000000 0.04008000000 0.00000000000 0.00000000000BH000 8.00000000000 3367.94463241000 433755.18009400001 0.00049000000 0.15498000000 0.00000000000 0.00000000000BH000 8.00000000000 14260.128681400004351372.10926000030 0.00014000000 0.05248000000 0.00000000000 0.00000000000BH000 8.00000000000 4542.921175200001214370.30728000010 0.00013000000 0.05379000000 0.00000000000 0.00000000000BH000 8.00000000000 4703.881336750001134613.27975000000 0.00004000000 0.03096000000 0.00000000000 0.00000000000BH000 8.00000000000 3196.29419643000 388217.13782800001 0.00006000000 0.03503000000 0.00000000000 0.00000000000BH000 8.00000000000 3149.91991145000 487897.83791399997 0.00732000000 0.97129000000 0.00000000000 0.00000000000BH000 8.00000000000EHRZREHRZRLac du Poisson Blanc Lac du Poisson Blanc 93594.94854160000 6.46739993493e+007 0.00012000000 0.04672000000 0.00000000000 0.00000000000BH000 8.00000000000 4872.062973760001085613.40082999990 0.00016000000 0.06949000000 0.00000000000 0.00000000000BH000 8.00000000000 6264.258050840001432700.64127000000 0.00037000000 0.10759000000 0.00000000000 0.00000000000BH000 8.00000000000 9433.284848790003274824.12634000000 0.00408000000 1.57916000000 0.00000000000 0.00000000000BH000 8.00000000000 139454.43587300001 3.60324097861e+007 0.00185000000 0.50111000000 0.00000000000 0.00000000000BH000 8.00000000000 48829.88574750000 1.62722170474e+007 0.00032000000 0.08635000000 0.00000000000 0.00000000000BH000 8.00000000000 8739.765434210002837266.37061000010 0.00220000000 0.49555000000 0.00000000000 0.00000000000BH000 8.00000000000EGFIMEGFIMLac Dumont Lac Dumont 44146.25471840000 1.93482322934e+007 0.00019000000 0.06850000000 0.00000000000 0.00000000000BH000 8.00000000000 6086.973377510001630024.82948000010 0.00010000000 0.04154000000 0.00000000000 0.00000000000BH000 8.00000000000 4160.92712143000 865202.11032400001 0.00014000000 0.06860000000 0.00000000000 0.00000000000BH000 8.00000000000 6307.108392500001265698.45552999990 0.00071000000 0.15895000000 0.00000000000 0.00000000000BH000 8.00000000000 13481.151715400006259217.76382999960 0.00013000000 0.05214000000 0.00000000000 0.00000000000BH000 8.00000000000 4605.716117420001187889.14800000000 0.00021000000 0.07631000000 0.00000000000 0.00000000000BH000 8.00000000000 7593.773071660001869715.92126000000 0.00042000000 0.13398000000 0.00000000000 0.00000000000BH000 8.00000000000 11720.560419700003721654.82210000000 0.00024000000 0.08692000000 0.00000000000 0.00000000000BH000 8.00000000000 8432.337130390002132760.33797000020 0.00015000000 0.06429000000 0.00000000000 0.00000000000BH000 8.00000000000 5616.640450070001307859.70769000010 0.00014000000 0.05026000000 0.00000000000 0.00000000000BH000 8.00000000000 4706.429431850001197671.12241000010 0.00011000000 0.04688000000 0.00000000000 0.00000000000BH000 8.00000000000 4683.34815008000 959307.45603700005 0.00008000000 0.05290000000 0.00000000000 0.00000000000BH000 8.00000000000 4390.60718952000 675123.34346000000 0.00006000000 0.03843000000 0.00000000000 0.00000000000BH000 8.00000000000 3266.81486213000 552680.09863499994 0.00004000000 0.02699000000 0.00000000000 0.00000000000BH000 8.00000000000 2712.50314456000 353526.13923199999 0.00008000000 0.04208000000 0.00000000000 0.00000000000BH000 8.00000000000 3748.40557191000 716369.05045500002 0.00017000000 0.07950000000 0.00000000000 0.00000000000BH000 8.00000000000 6872.617343210001491918.72598999990 0.00005000000 0.03232000000 0.00000000000 0.00000000000BH000 8.00000000000 3114.23695855000 411289.18685699999 0.00007000000 0.04306000000 0.00000000000 0.00000000000BH000 8.00000000000 4310.43338502000 621699.65984099999 0.00021000000 0.07969000000 0.00000000000 0.00000000000BH000 8.00000000000 7637.507888490001815648.36479000000 0.00014000000 0.07075000000 0.00000000000 0.00000000000BH000 8.00000000000 6500.288975400001265045.64198000010 0.00013000000 0.05528000000 0.00000000000 0.00000000000BH000 8.00000000000 5301.136637570001152137.12905000010 0.00016000000 0.06102000000 0.00000000000 0.00000000000BH000 8.00000000000 5641.551394430001383505.09575999990 0.00216000000 0.44608000000 0.00000000000 0.00000000000BH000 8.00000000000EHOXGEHOXGLac Pemichangan Lac Pemichangan 43051.03958290000 1.90402773442e+007 0.00009000000 0.04864000000 0.00000000000 0.00000000000BH000 8.00000000000 4472.58517331000 781081.01194800006 0.00010000000 0.03882000000 0.00000000000 0.00000000000BH000 8.00000000000 3872.42026394000 877221.42578299996 0.00008000000 0.03607000000 0.00000000000 0.00000000000BH000 8.00000000000 3361.07130705000 715571.64141699998 0.00012000000 0.05101000000 0.00000000000 0.00000000000BH000 8.00000000000 4760.734194900001060581.04458000000 0.00063000000 0.18139000000 0.00000000000 0.00000000000BH000 8.00000000000 15878.342591200005539963.11216000000 0.00009000000 0.04587000000 0.00000000000 0.00000000000BH000 8.00000000000 4013.06627681000 800848.79256600002 0.00190000000 0.33702000000 0.00000000000 0.00000000000BH000 8.00000000000 32494.38741900000 1.67708140207e+007 0.00007000000 0.03755000000 0.00000000000 0.00000000000BH000 8.00000000000 3606.88490619000 620543.30938500003 0.00015000000 0.07790000000 0.00000000000 0.00000000000BH000 8.00000000000 8098.520699490001299044.40247999990 0.00053000000 0.15315000000 0.00000000000 0.00000000000BH000 8.00000000000 13782.549716400004706775.39524000040 0.00020000000 0.06477000000 0.00000000000 0.00000000000BH000 8.00000000000 6336.946256200001735155.52453000010 0.00011000000 0.04198000000 0.00000000000 0.00000000000BH000 8.00000000000 3889.25009434000 961774.79766799998 0.00006000000 0.03538000000 0.00000000000 0.00000000000BH000 8.00000000000 3269.25382773000 569300.16558699997 0.00012000000 0.05114000000 0.00000000000 0.00000000000BH000 8.00000000000 4883.345259060001016421.24032999990 0.00030000000 0.16504000000 0.00000000000 0.00000000000BH000 8.00000000000 13297.136606300002657425.30375000000 0.00006000000 0.03624000000 0.00000000000 0.00000000000BH000 8.00000000000 3414.14597963000 511709.11770599999 0.00009000000 0.05540000000 0.00000000000 0.00000000000BH000 8.00000000000 5061.58259629000 781314.66632800002 0.00039000000 0.11199000000 0.00000000000 0.00000000000BH000 8.00000000000 9864.619732260003473144.80855999980 0.00006000000 0.03664000000 0.00000000000 0.00000000000BH000 8.00000000000 3145.66745834000 500071.17084400001 0.00012000000 0.05277000000 0.00000000000 0.00000000000BH000 8.00000000000 5288.515381130001029945.57652000000 0.00034000000 0.10251000000 0.00000000000 0.00000000000BH000 8.00000000000 10558.354485700002961793.10691000010 0.00025000000 0.08922000000 0.00000000000 0.00000000000BH000 8.00000000000 7987.873921180002191499.61357000000 0.00008000000 0.04239000000 0.00000000000 0.00000000000BH000 8.00000000000 4104.61247028000 715044.60415399994 0.00011000000 0.06188000000 0.00000000000 0.00000000000BH000 8.00000000000 5822.63580541000 995865.20268200000 0.00013000000 0.04618000000 0.00000000000 0.00000000000BH000 8.00000000000 4720.900402360001111109.13463000000 0.00058000000 0.16559000000 0.00000000000 0.00000000000BH000 8.00000000000 16118.837647200005110621.66665999960 0.00006000000 0.03480000000 0.00000000000 0.00000000000BH000 8.00000000000 3047.99946595000 538476.64459899999 0.00011000000 0.04652000000 0.00000000000 0.00000000000BH000 8.00000000000 4911.18242062000 944608.91717899998 0.00096000000 0.26501000000 0.00000000000 0.00000000000BH000 8.00000000000 24006.758868500008456193.20419999960 0.00007000000 0.04629000000 0.00000000000 0.00000000000BH000 8.00000000000 3824.70213003000 660905.67587499996 0.00336000000 0.36804000000 0.00000000000 0.00000000000BH000 8.00000000000EIDPYEIDPYLac Simon Lac Simon 36997.38779200000 2.96918047053e+007 0.00036000000 0.10328000000 0.00000000000 0.00000000000BH000 8.00000000000 10048.672074100003156021.29914999990 0.00049000000 0.09114000000 0.00000000000 0.00000000000BH000 8.00000000000 8799.414770920004371965.53196000030 0.00022000000 0.07993000000 0.00000000000 0.00000000000BH000 8.00000000000 7523.308820670001959436.38115000000 0.00486000000 0.80544000000 0.00000000000 0.00000000000BH000 8.00000000000EKIEAEKIEALac aux Allumettes Lac aux Allumettes 74147.04431980000 4.30871247260e+007 0.00006000000 0.03159000000 0.00000000000 0.00000000000BH000 8.00000000000 3191.53891077000 556238.84232399997 0.00011000000 0.04620000000 0.00000000000 0.00000000000BH000 8.00000000000 4765.35425465000 958795.19000299997 0.00021000000 0.07854000000 0.00000000000 0.00000000000BH000 8.00000000000 7009.039623460001821237.49608000000 0.00009000000 0.03857000000 0.00000000000 0.00000000000BH000 8.00000000000 3537.87354099000 820709.45688600000 0.00015000000 0.06160000000 0.00000000000 0.00000000000BH000 8.00000000000 5231.093424510001300726.88828999990 0.00006000000 0.03856000000 0.00000000000 0.00000000000BH000 8.00000000000 3413.46418587000 554949.23826599994 0.00025000000 0.08694000000 0.00000000000 0.00000000000BH000 8.00000000000 8397.786098970002223140.51642999980 0.00013000000 0.05520000000 0.00000000000 0.00000000000BH000 8.00000000000 5643.048035530001192093.18193000000 0.00015000000 0.06856000000 0.00000000000 0.00000000000BH000 8.00000000000 6002.586596300001342823.29431000000 0.00006000000 0.03469000000 0.00000000000 0.00000000000BH000 8.00000000000 3090.13683020000 529060.29862400005 0.00277000000 0.65785000000 0.00000000000 0.00000000000BH000 8.00000000000 64167.48454420000 2.44972173188e+007 0.00017000000 0.04956000000 0.00000000000 0.00000000000BH000 8.00000000000 4910.270638820001511239.95289000010 0.00061000000 0.20645000000 0.00000000000 0.00000000000BH000 8.00000000000 20697.809795000005372799.65297999980 0.00049000000 0.14191000000 0.00000000000 0.00000000000BH000 8.00000000000 13465.709157300004339309.06512000040 0.00008000000 0.04023000000 0.00000000000 0.00000000000BH000 8.00000000000 3495.75601753000 690407.53461700003 0.00055000000 0.14077000000 0.00000000000 0.00000000000BH000 8.00000000000 12908.616335300004820383.55650999960 0.00012000000 0.04652000000 0.00000000000 0.00000000000BH000 8.00000000000 4488.462218140001076623.44405000000 0.00024000000 0.07492000000 0.00000000000 0.00000000000BH000 8.00000000000 6948.040342720002083301.08146000000 0.00013000000 0.06158000000 0.00000000000 0.00000000000BH000 8.00000000000 5957.239155960001108460.73582000010 0.00006000000 0.03875000000 0.00000000000 0.00000000000BH000 8.00000000000 3597.25514328000 528358.26530700002 0.00004000000 0.03373000000 0.00000000000 0.00000000000BH000 8.00000000000 3373.85046315000 367632.64590900001 0.00008000000 0.03807000000 0.00000000000 0.00000000000BH000 8.00000000000 3569.40287357000 689664.05210199999 0.00064000000 0.12919000000 0.00000000000 0.00000000000BH000 8.00000000000EGGBJEGGBJLac cho Lac cho 13604.080485100005640769.83457999960 0.00007000000 0.03524000000 0.00000000000 0.00000000000BH000 8.00000000000 3131.75470459000 590755.62663800002 0.00006000000 0.03362000000 0.00000000000 0.00000000000BH000 8.00000000000 3533.51075284000 493361.70709099999 0.00606000000 1.35709000000 0.00000000000 0.00000000000BH000 8.00000000000 119172.95652700000 5.37062810680e+007 0.00029000000 0.10605000000 0.00000000000 0.00000000000BH000 8.00000000000 10108.056940500002530975.86078000020 0.00016000000 0.06121000000 0.00000000000 0.00000000000BH000 8.00000000000 5567.222700260001448552.50068000010 0.00010000000 0.04949000000 0.00000000000 0.00000000000BH000 8.00000000000 4620.25128757000 888004.06582999998 0.00010000000 0.04648000000 0.00000000000 0.00000000000BH000 8.00000000000 4082.63778444000 851382.41235000000 0.00008000000 0.04923000000 0.00000000000 0.00000000000BH000 8.00000000000 4075.27327150000 718507.27642200002 0.00019000000 0.07942000000 0.00000000000 0.00000000000BH000 8.00000000000 7174.995646690001663433.02560000010 0.00033000000 0.10941000000 0.00000000000 0.00000000000BH000 8.00000000000 11145.020789600002931559.59485000000 0.00010000000 0.04064000000 0.00000000000 0.00000000000BH000 8.00000000000 3811.24533157000 918616.86833299999 0.00230000000 0.40640000000 0.00000000000 0.00000000000BH000 8.00000000000EGHJTEGHJTRservoir l'Escalier Rservoir l'Escalier 38758.16707500000 2.03639777606e+007 0.00011000000 0.04713000000 0.00000000000 0.00000000000BH000 8.00000000000 4074.89000261000 981037.20359000005 0.00007000000 0.03361000000 0.00000000000 0.00000000000BH000 8.00000000000 3127.06815218000 646400.75351600000 0.00010000000 0.05993000000 0.00000000000 0.00000000000BH000 8.00000000000 5321.29530596000 910267.99640499998 0.00078000000 0.24041000000 0.00000000000 0.00000000000BH000 8.00000000000 22826.645308400006932396.20645000040 0.00009000000 0.04033000000 0.00000000000 0.00000000000BH000 8.00000000000 4092.29406351000 773760.32880100003 0.00016000000 0.05578000000 0.00000000000 0.00000000000BH000 8.00000000000 5201.816675080001405283.50746000000 0.00008000000 0.03974000000 0.00000000000 0.00000000000BH000 8.00000000000 3845.10244437000 730456.59599399997 0.00011000000 0.04929000000 0.00000000000 0.00000000000BH000 8.00000000000 4238.24817484000 947750.50438199996 0.00016000000 0.06532000000 0.00000000000 0.00000000000BH000 8.00000000000 5807.403621890001379157.06358999990 0.00170000000 0.30250000000 0.00000000000 0.00000000000BH000 8.00000000000FATLQFATLQLac Coulonge Lac Coulonge 28702.32705470000 1.50907001579e+007 0.00006000000 0.03656000000 0.00000000000 0.00000000000BH000 8.00000000000 3246.45010724000 551040.19295000006 0.00024000000 0.06081000000 0.00000000000 0.00000000000BH000 8.00000000000 5684.482795000002125834.23630000000 0.00014000000 0.06320000000 0.00000000000 0.00000000000BH000 8.00000000000 6156.685493270001258776.45208000000 0.00027000000 0.09772000000 0.00000000000 0.00000000000BH000 8.00000000000 9904.683758640002374348.81748000020 0.00008000000 0.03878000000 0.00000000000 0.00000000000BH000 8.00000000000 3995.53194023000 686294.04709200002 0.00018000000 0.05643000000 0.00000000000 0.00000000000BH000 8.00000000000 5379.267206300001624027.66221000000 0.00049000000 0.12724000000 0.00000000000 0.00000000000BH000 8.00000000000 13072.327354600004371421.18826999980 0.00012000000 0.04288000000 0.00000000000 0.00000000000BH000 8.00000000000 3945.628042480001027170.67794000000 0.00050000000 0.12226000000 0.00000000000 0.00000000000BH000 8.00000000000 11675.818612700004413821.22049000020 0.00015000000 0.07437000000 0.00000000000 0.00000000000BH000 8.00000000000 6381.669521620001334429.40885000000 0.00007000000 0.04426000000 0.00000000000 0.00000000000BH000 8.00000000000 3934.96130610000 630733.06058900000 0.00011000000 0.04545000000 0.00000000000 0.00000000000BH000 8.00000000000 4510.04226965000 970034.73447699996 0.00016000000 0.07068000000 0.00000000000 0.00000000000BH000 8.00000000000 6527.651800360001414515.60287000010 0.00033000000 0.11224000000 0.00000000000 0.00000000000BH000 8.00000000000 9836.966590090002885882.58656999980 0.00014000000 0.04710000000 0.00000000000 0.00000000000BH000 8.00000000000 4422.120900920001280567.47431000000 0.00019000000 0.07450000000 0.00000000000 0.00000000000BH000 8.00000000000 7623.659680360001651146.73765000000 0.00011000000 0.05269000000 0.00000000000 0.00000000000BH000 8.00000000000 5111.63713342000 980019.82449999999 0.00177000000 0.41096000000 0.00000000000 0.00000000000BH000 8.00000000000EHNRFEHNRFLac Papineau Lac Papineau 41373.19682180000 1.57394827602e+007 0.00010000000 0.05128000000 0.00000000000 0.00000000000BH000 8.00000000000 5071.92334344000 899670.65546299994 0.00008000000 0.03729000000 0.00000000000 0.00000000000BH000 8.00000000000 3507.53084483000 746086.17486699997 0.00009000000 0.04140000000 0.00000000000 0.00000000000BH000 8.00000000000 3968.49111476000 827570.93495899998 0.00014000000 0.06371000000 0.00000000000 0.00000000000BH000 8.00000000000 5586.607762330001249484.37359000000 0.00010000000 0.03886000000 0.00000000000 0.00000000000BH000 8.00000000000 3791.02164452000 906378.02947700000 0.00022000000 0.07466000000 0.00000000000 0.00000000000BH000 8.00000000000 7313.914457200001948623.73558000010 0.00004000000 0.02501000000 0.00000000000 0.00000000000BH000 8.00000000000 2521.98484880000 352024.59753400000 0.00014000000 0.04539000000 0.00000000000 0.00000000000BH000 8.00000000000 4506.842456300001267891.62200000000 0.00015000000 0.05134000000 0.00000000000 0.00000000000BH000 8.00000000000 4903.847924770001335470.63816000010 0.00009000000 0.04425000000 0.00000000000 0.00000000000BH000 8.00000000000 3971.58434352000 814823.31570899999 0.00054000000 0.13644000000 0.00000000000 0.00000000000BH000 8.00000000000 14093.545040100004820784.36433000020 0.00013000000 0.05907000000 0.00000000000 0.00000000000BH000 8.00000000000 5288.879421340001123745.60675000000 0.00007000000 0.03561000000 0.00000000000 0.00000000000BH000 8.00000000000 3213.10498334000 634367.21845799999 0.00012000000 0.05143000000 0.00000000000 0.00000000000BH000 8.00000000000 4890.104029230001046938.95308000000 0.00006000000 0.03238000000 0.00000000000 0.00000000000BH000 8.00000000000 3133.30482913000 503604.88513499999 0.00025000000 0.07120000000 0.00000000000 0.00000000000BH000 8.00000000000 7498.730551670002182084.06576000010 0.00421000000 1.40039000000 0.00000000000 0.00000000000BH000 8.00000000000 133307.33969200001 3.74404833979e+007 0.00008000000 0.04558000000 0.00000000000 0.00000000000BH000 8.00000000000 3796.37687927000 714242.59619600000 0.00012000000 0.04452000000 0.00000000000 0.00000000000BH000 8.00000000000 4066.362743540001055537.96659999990 0.00010000000 0.04380000000 0.00000000000 0.00000000000BH000 8.00000000000 4479.95767926000 927154.28776500002 0.00005000000 0.03190000000 0.00000000000 0.00000000000BH000 8.00000000000 2941.71715125000 416095.95143199997 0.00007000000 0.04074000000 0.00000000000 0.00000000000BH000 8.00000000000 3415.84804587000 648183.51769500005 0.00014000000 0.04872000000 0.00000000000 0.00000000000BH000 8.00000000000EIDRIEIDRILac Simonet Lac Simonet 4813.051287550001280551.14119000010 0.00010000000 0.04745000000 0.00000000000 0.00000000000BH000 8.00000000000 4310.77950748000 902713.77933100006 0.00008000000 0.03664000000 0.00000000000 0.00000000000BH000 8.00000000000 3325.90868772000 679775.47278600000 0.00019000000 0.05434000000 0.00000000000 0.00000000000BH000 8.00000000000 5344.025400000001679647.55311000000 0.00032000000 0.12426000000 0.00000000000 0.00000000000BH000 8.00000000000 12287.534260600002811501.83326999980 0.00008000000 0.05299000000 0.00000000000 0.00000000000BH000 8.00000000000 4597.51474091000 711442.01929700002 0.00047000000 0.11265000000 0.00000000000 0.00000000000BH000 8.00000000000 11834.869980100004172698.40817999980 0.00055000000 0.15236000000 0.00000000000 0.00000000000BH000 8.00000000000 13869.859236500004895187.02333999980 0.00007000000 0.03779000000 0.00000000000 0.00000000000BH000 8.00000000000 3282.81448354000 598859.12617499998 0.00035000000 0.10718000000 0.00000000000 0.00000000000BH000 8.00000000000 10394.645898600003077615.04450999990 0.00017000000 0.07780000000 0.00000000000 0.00000000000BH000 8.00000000000 6342.326451760001481454.98572000000 0.00007000000 0.03813000000 0.00000000000 0.00000000000BH000 8.00000000000 3716.01102629000 582170.89960200002 0.00019000000 0.06332000000 0.00000000000 0.00000000000BH000 8.00000000000 6167.769662740001651628.30947000000 0.00029000000 0.09888000000 0.00000000000 0.00000000000BH000 8.00000000000 9020.023629250002569447.17010999980 0.00047000000 0.12467000000 0.00000000000 0.00000000000BH000 8.00000000000 11328.833990000004182286.77400999980 0.00007000000 0.03246000000 0.00000000000 0.00000000000BH000 8.00000000000 3218.03327013000 631330.46385800000 0.00006000000 0.03241000000 0.00000000000 0.00000000000BH000 8.00000000000 3129.15466768000 542875.92452600005 0.00008000000 0.03912000000 0.00000000000 0.00000000000BH000 8.00000000000 3647.62577041000 728806.74920399999 0.00055000000 0.15384000000 0.00000000000 0.00000000000BH000 8.00000000000EFMZKEFMZKLac Bernard Lac Bernard 13988.221326200004882539.48969000020 0.00031000000 0.09551000000 0.00000000000 0.00000000000BH000 8.00000000000 8592.908215130002754682.26929999980 0.00015000000 0.07142000000 0.00000000000 0.00000000000BH000 8.00000000000 6418.270140000001363612.34488000000 0.00006000000 0.03678000000 0.00000000000 0.00000000000BH000 8.00000000000 3376.61907877000 496835.27205400000 0.00007000000 0.03501000000 0.00000000000 0.00000000000BH000 8.00000000000 3582.67835719000 593915.76550099999 0.00007000000 0.03723000000 0.00000000000 0.00000000000BH000 8.00000000000 3534.29647034000 653438.79413699999 0.00006000000 0.03726000000 0.00000000000 0.00000000000BH000 8.00000000000 3192.33646007000 533967.31975200004 0.00012000000 0.05080000000 0.00000000000 0.00000000000BH000 8.00000000000 4972.450341440001101995.73276000000 0.00016000000 0.06736000000 0.00000000000 0.00000000000BH000 8.00000000000 6061.022183190001442616.07329000000 0.00020000000 0.06295000000 0.00000000000 0.00000000000BH000 8.00000000000 6343.355937290001764874.21763000010 0.00094000000 0.16475000000 0.00000000000 0.00000000000BH000 8.00000000000EJQTYEJQTYLac la Blanche Lac la Blanche 15166.726026400008393754.92544000040 0.00052000000 0.17799000000 0.00000000000 0.00000000000BH000 8.00000000000 16676.004289300004587215.70442000030 0.00007000000 0.03898000000 0.00000000000 0.00000000000BH000 8.00000000000 3458.55239556000 639009.11825900001 0.00008000000 0.04090000000 0.00000000000 0.00000000000BH000 8.00000000000 3642.69653182000 698611.88900199998 0.00016000000 0.05805000000 0.00000000000 0.00000000000BH000 8.00000000000 5891.232025000001420843.94145999990 0.00008000000 0.03885000000 0.00000000000 0.00000000000BH000 8.00000000000 3639.12599900000 755308.26644599997 0.00690000000 2.20687000000 0.00000000000 0.00000000000BH000 8.00000000000 198940.43698299999 6.15853015954e+007 0.00017000000 0.06700000000 0.00000000000 0.00000000000BH000 8.00000000000 6425.560186560001525571.66879000000 0.00007000000 0.03689000000 0.00000000000 0.00000000000BH000 8.00000000000 3623.15740135000 651816.27886900003 0.00021000000 0.06660000000 0.00000000000 0.00000000000BH000 8.00000000000 6090.317536630001878134.32601000000 0.00011000000 0.04585000000 0.00000000000 0.00000000000BH000 8.00000000000 4430.77113331000 997948.63676599995 0.00060000000 0.16145000000 0.00000000000 0.00000000000BH000 8.00000000000EGNRXEGNRXLac Grand Lac Grand 15338.680311900005315343.68740999980 0.00006000000 0.03148000000 0.00000000000 0.00000000000BH000 8.00000000000 2894.18620035000 493266.66745399998 0.00006000000 0.04247000000 0.00000000000 0.00000000000BH000 8.00000000000 3693.96453290000 552713.93387499999 0.00014000000 0.04976000000 0.00000000000 0.00000000000BH000 8.00000000000EHCPBEHCPBLac Mahon Lac Mahon 4541.429599880001284527.19411999990 0.00032000000 0.11606000000 0.00000000000 0.00000000000BH000 8.00000000000 10385.404349500002813712.91185999990 0.00016000000 0.05853000000 0.00000000000 0.00000000000BH000 8.00000000000 5328.092208270001394686.92253999990 0.00008000000 0.04106000000 0.00000000000 0.00000000000BH000 8.00000000000 3719.45731746000 672558.68625899998 0.00012000000 0.04727000000 0.00000000000 0.00000000000BH000 8.00000000000 4302.752626460001078124.91886000010 0.00067000000 0.17698000000 0.00000000000 0.00000000000BH000 8.00000000000EHFEIEHFEILac McGregor Lac McGregor 16269.005812500005952565.06121999960 0.00101000000 0.22536000000 0.00000000000 0.00000000000BH000 8.00000000000EIUNCEIUNCLac la Pche Lac la Pche 21330.334737300009040702.58262000050 0.01090000000 3.84259000000 0.00000000000 0.00000000000BH000 8.00000000000 323524.00839899998 9.74230330247e+007 0.01115000000 2.07772000000 0.00000000000 0.00000000000BH000 8.00000000000 184294.67886399999 9.98173556935e+007 0.00011000000 0.04161000000 0.00000000000 0.00000000000BH000 8.00000000000 3909.813865160001005737.31920000000 0.00025000000 0.08936000000 0.00000000000 0.00000000000BH000 8.00000000000EHQBFEHQBFLac Philippe Lac Philippe 8601.283632540002193903.21710000000 0.00010000000 0.04004000000 0.00000000000 0.00000000000BH000 8.00000000000 3891.64806441000 932340.04828200000 0.00127000000 0.52512000000 0.00000000000 0.00000000000BH000 8.00000000000 49370.02233700000 1.13935354196e+007 0.00013000000 0.05365000000 0.00000000000 0.00000000000BH000 8.00000000000 4704.321349730001156531.91843000010 0.00029000000 0.12010000000 0.00000000000 0.00000000000BH000 8.00000000000EJTMJEJTMJLac Mousseau Lac Mousseau 11116.842681300002628544.05115000020 0.00010000000 0.04669000000 0.00000000000 0.00000000000BH000 8.00000000000 4509.94803193000 857539.83310299995 0.00038000000 0.12287000000 0.00000000000 0.00000000000BH000 8.00000000000EJXJYEJXJYLac Meech Lac Meech 11148.236185900003412017.67535000020 0.01564000000 1.42136000000 0.00000000000 0.00000000000BH000 8.00000000000EGDJPEGDJPLac des Deux Montagnes Lac des Deux Montagnes 126034.03500600001 1.40022527649e+008 0.00484000000 1.17250000000 0.00000000000 0.00000000000BH000 8.00000000000 123203.95762600000 4.36480551603e+007 0.02704000000 2.80156000000 0.00000000000 0.00000000000BH000 8.00000000000EIAIXEIAIXLac Saint-Louis Lac Saint-Louis 246879.16467599999 2.42986085035e+008 0.00002000000 0.02097000000 0.00000000000 0.00000000000BH000 8.00000000000 1810.11024907000 185936.42404600000 0.00099000000 0.20187000000 0.00000000000 0.00000000000BH000 8.00000000000EGCZGEGCZGLac Deschnes Lac Deschnes 17675.077530400008846502.99857999940 0.01549000000 1.03917000000 0.00000000000 0.00000000000BH000 8.00000000000EHZTQEHZTQLac Saint-Franois Lac Saint-Franois 93450.25967090001 1.39929420613e+008 0.00519000000 0.38519000000 0.00000000000 0.00000000000BH000 8.00000000000EFVUKEFVUKLac Champlain Lac Champlain 35417.07675970000 4.70129842020e+007 0.00170000000 0.41695000000 0.00000000000 0.00000000000BH000 8.00000000000 36785.66431780000 1.53990481992e+007mapnik-3.0.9/demo/data/ontdrainage.prj000066400000000000000000000007451262555547000176700ustar00rootroot00000000000000PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]mapnik-3.0.9/demo/data/ontdrainage.sbx000066400000000000000000000012041262555547000176600ustar00rootroot00000000000000' pB.A4loƴA:i@:{*2*,Z j~$ *B R bnz  2 BNV^fz 64nDbVH :lx &$ N, ~  D X .D v0 .B$jvddFf(<mapnik-3.0.9/demo/data/ontdrainage.shp000066400000000000000000017125241262555547000176750ustar00rootroot00000000000000' ʪɏl4Aoi:A*{:@ɏl4AQU5A@-cr4A@-cr>N4Ayvok4ANp {,q b4AVJ*GZ4AAȒt4A=td4A@9:4A (4Aj9dfX*4A$TM4A`G :4AJS2:4Aro 4A`jުÐ'4Ao ݮ>|D4Aܲ@Ed4A`ԶC4A T4A`04AȀ\4A@Q^T4A`Ȱ;!#24A=d4A3zNd,D4A 2h34A@:r_r4A@RW1 4AM*n,[4A&Ϣ<to4A#?\64A@q9 V#4Aw!2I4A' _uU|4A"<ҪT4A,WQe4A9"~;4A 3]i%^4A {+O4A1S`L4A`3D7H14AT2K<$&4A+~@4-4APBd4A@[G5WJ4A /PiK%4A@_dgMH34A9iS-e*4A`U,$m5AeV5A`m>Z55Aɳp_֘5A n`CS5A *bmka>LJ5Abk5AKMc.5ANeu8//5Au!e#m5A 佩gOݢ5Ami(a25A@_jD5Akхv5A`Onh!#5A<įp05A wbrY4,x|=l 5A h 5AczA h@ 5A-̸ 5A) 5Aq9Ҭh 5A ߘɕ 5Aə% K 5A`95 5A`C/|< hJ 5A VeBK5Al=F 5A}L85A'85A@H -r&5AE7.&5A@`TB#'5Azn2V'5ACs6(5A,;E(5AAq2쌽)5A`69%P8*5A`ϲjo0*5Al="þ+5APvk,5A I 65A#1}75Aa1#!B85A"3!#Lą95AG_ =:5AhEj{:5Amf;5Ay`;5A%}<5AO)Bh<5A@" >L8=5A@#!@{>5A+v#+x>5AП~$<?5A`~fo%px֜?5A&@5A :M'Wp@5A~'"{ A5A4]p(MکA5A`r.( \B5AP7J)CenB5A@p*B5Az͸*/cC5AIA,J'iC5A A. RKC5AO'1OX_D5A`l3,E5A(Ƶ89KE5A R>><F5A5C,\@G5AH>’I5AzB]8T(I5AI^qkJ5A`B^`y+iJ5AJC6ubPbK5A@krcYGTK5As/ddK5AdoQ=K5A4dbK`L5A .e=L5A fe,M5Aıe7M5AaVeM5AeeJDhM5A8emu?N5A%yd/xN5A+^c;HN5A`9JcbDN5A`1b5A P7:5A`6<ۘs75A`zVQ"l 25A`;\ M%5A sܝ7NnH5A <6W$ꮃ5A J9$)Tb5A@_{5A@ 5A@wLFڰp5A@!TCsc5Aj5k0|+4A`X {b4A@IL6mg4AvhfN4A@y֨d4A@.{umɺ4A 7t5 Y4Ab^ 4A5-ɏl4A]{S?b4A@d:!4A`O(Ik 4A64A@B7pԓ44A mj-4A`3ϕ'4Ap+36@4A`-Tr4A eG W4A`[6) +ź4A@?;4A+" _4A)C4A%W|'M4AMs4A@-cr x|:=nS5AnecZ5AYGlecZ5Ag(]\V5A`* ^++ʀ5Au>fx W5A`O8Z~5Aa).}5A "Ki|5AJhpܺpz5A(f.,x5A\3s5Ap@8t5A`zL-aRy5A >|v`Lt5AU]kdVgo5A`S`ײk5A@Sb0.߁g5A.d8Hj5A`2 QIco5A-(ޓIo5A`2M9Coo5AA[s5A`ȨOhGCt5Ap~ѝOP@z5AVld,0-z5AAa>y5AbQBq4b,v5As+K 2v5A]yEDQ&1x5Aԯ-Tw5A \\xt5A(` Ǐ0.t5Ask:0s5A D=_\ms5A@r#qZRRq5Aȩ\n_5AE@ _5A`(CɠO_5A+~N`5Aq$@md&4J`5A fB?˓q`5AZ`5AO{`5A`LW`5AFs3~.a5A ݟM+wa5A`a5A*mRMݽb5Âob5AU贁>b5A7ʀ"Cl8c5A{&g~Re5Ay^5^+g5A ٧ti5A-:CoUfk5A`h l5A@;dm5A/c텼|m5A%bXƂm5A UYaV!n5ArY`8hn5A m_;n5A '^@8n5A_>\x0o5A"Xp6wo5ATtEo5AxQyޟp5A dNE9]p5A J~ KDp5A H_p5A@*t>GMQp5A7Fp5A*:BYUq5Ae;G>#q5A t9'ۿr5A @5= Jr5A`[f23sHr5A@"1.\r5A@Lv-Ts5AJ)–}_s5A o%Sإs5Au4"s5AQ_JF+t5A@QȠ8Nt5AGrO̸ct5AR>GLkt5AyXtfwrjt5A]у&Iggt5A@ I8M/ dt5AdNYt5Aj0 qMt5A -ԡ  >t5A OptE1t5A`V |G?t5A ,̏t5A@d2Ss5A<׼sW5s5AFc{s5AMfT0s5AC ,g"}_s5A;-s5A`zzh r5A`OIH7.(r5AhVq5AS{Rq5A UҪq5A[Џor5AVTx1krr5AG8+zq5AwI q5AHީo -p5A]]h;n5AܿF#Xәyn5Au{Vcn5AryTn5A`S$n5ARiR} cn5AQ [In5A mA_Pjn5A:hBOgtm5ALoRN!(@m5A`>mM*rzm5Au L%Fm5A`j,hKti m5A ;KMX"l5A@W;J]Ql5A{KJqBl5A@FHI|k5AsIɗk5AmHJ7Xk5A|6Hg@ k5AIfGBj5A@)OBBF8yj5A}iEOcKj5A"PDl=j5Aa~CpDi5A, A॥i5A Uxp@:i5AE?y\i5AN0N>0i5A^<-Ci5A@cq;h5A` 9ԫh5A5j8 h5AZ6$h5A{]{2;6h5A@a61rh5AzsH/)mh5A .-)_h5A /t+qWh5Av*vMh5A jO*ȁ,h5AĈ(5Ig5A`rx'%g5A{$%og5A#bbWlg5A$"EFg5A1~ $g5A@e绹!f5Aڊwyf5A@pf5A@d "f5A fּTf5A#sr6sf5A|gf5Auu=[f5A`P1 pKf5Aҵ(W;f5ArE#cO,f5AG {Uf5ADmre5A $>e5AO2+ؔe5A 4q ^re5A* /He5A`+" V!e5Apb )e5A` dVd5A@T{"|d5Ap[@d5A"čecnd5AdʞǙd5A`u8Qd5A9S8d5A@-=d5Ai0G-Hd5A]Ld5A>d d5A{&(d5A,[nd5A@!,} d5AU !LW%e5AʅNܟ>e5A$Uce5Ac띦e5AX_Te5A`^{\e5A 2g3v f5A巁ۨ)_;f5A@Tvlf5A5tUf5A jf5A׿. g5A|:g5A5{g5A Jg5A-,F jg5A"X,c4h5A ov3[nh5A{Z4 έh5A 8R h5AbAy)i5A rJ8fi5AЄvO"i5A-%4(i5AH?'"j5A^gj5AM[Ej5A HC+j5A``3EIk5A`}kC!k5A`QK"7fk5A 0tx1l5A`l5A@uwl5AC /m5A`Lr'\m5A`ClZem5A@B"Uײ m5A kAJ Gn5AJmEKQn5A zUblƉyn5A@WO7~n5A@2en5Alt|5o5AQk oo5A #3o5A۔o5A`̣"o8p5A1bŀp5A@Ljŷp5A{:p5A] ǔ7q5Arԉ70dq5ADk>;~Yq5A -o?X3$r5Ay/xCplr5AoQѿr5A0nr5A`;&Y#6s5A-IBvs5AQ6&/vs5A5=Gs5A`Vmx:5AAVa75A>@L\M5AP~ q5APEE |/e5Av5AI+͔5A@v e̛5A@35A@ a > 5Ä@5A DXT05A3<]vA5A@?*-hO5AO6%T^5A j>ٻp5A@Xe,/Oi}5A@:vIET5A5V{"Ba5AC/9E5A`ڞЈ]˕5Ax#&ƼG5ALo/*j5A`|j65Aۙ{]Vr65Ai0$'5A ̝࿙5A'a\̍5Au 5A L-%׆5AӅ5Aˆ ӆ5A@!z/5A@#x6$5A@z$Ȓ5Ac&5A 'Qؠ5A =(r5A \I) ]5A +҆i5A@j5,ɚ5A}A-LҚ5AT:.RNۚ5A@4y/B5A:F0^d5A`Jy15A3"t5A` 5V5Azx6u@K5AhM8\ٚ5A3q9.Қ5Af;nhʚ5A`y^$=9`Ś5A>5A@YSt@2G5A\eBfM봚5A@Dļ5AwEIZB5A`̠GH5A`z7I4H5A8JI5A;oLn5A@LNc5A`ԮOq#z5AWt2QD>5A+dR5A ]G{TP$5AZxV҄*"Ϛ5A`Wlߚ5A1CX/d5A`CYw-5A@;ZcW$5A=h[qH5A]>Ll5AFN^>i5A`c af_[ҹ5A1a}Aٛ5Abc"CU5A1|d!5A7e)b05A3gG5Ai,Qi[5A4ҐkQh5A\?mnk{5A` T|o'85A ([5A\;o5A:m~5AVx)C|5Ab˴5AOOY|qY,ʞ5Aܐn5AWY)gd5Ak,Ȟ5A?V 5A KMH\v5A 2_*老5A@15R:5AB_o2ܚ5A@( !jR}5A@oM9I5A{-g•5AkR* ŏ5ASv""I5A`"}!R5A Gup5A@l06m5A& H<_&5A<gG5A _35W5AAs"E5A@KZE75A:iN5A8k$"5ABr"ͥU5Aa񩵀5A x W5A`O++ʀ5Au>f\V5A`* ^ecZ5Ag(]uuP5A !E5Ak,Ȟ5A?V)gd5AC5A{×XY5AU_x55A"=-J5ArU5A`ա*_5A /0b5AU^?|Le5A`+~LR @`5A 4-S5A@[f>5A?/Yhl5A`>nל 5A 1HNW5A`̋ҶwҞ5A `8寸5A`׺65A KZh5A@|q5A@+E=fZ\5A r-I5A\%x#885AfY/!JP'5A:ϴ5A&]I{ 5A>m~ f5AϠXN5A4B745A3' 3֝5Ao'Ksǝ5Ao_$aj~Zm5A`bo+5A 7Q+!$5AMъ5AQ?H@5ABqIw5A`-rPm5A@U5A͉({`w5A{r㝝5A`65A Z;>^5AԢ^%0_5A@HR7,ct5Ai]*5A ?.p8$wǝ5A~fѝ5A[k]~ݝ5Al>5AKʎ5AΞ!& ѷ 5A@hϕ3#5A@M]?:5A@I(3$JY5A K>.q55A@/, 5Aq Mڞ5As#}? 6w5A@#ey?5A`:Ck5A'%㢒5A@eo\5A |Z&r5A@ fZy5A`HH5A`E-\?_q5ALyP 5AFK6Ԡ5A`Ϯ5Az? | 5AփŦ!ot,5A@i"$G5AH[$䗉Z5AM%pmh5AU&%#{5A+q(}ۋ5A@4)i!С5AˆHx+Q5A5V-^Uɡ5A@2"/]Gߡ5A ~0K5A@Sj2I5Aƪ3"5A 5bT ;5A`[*?7(dZ5A~8b215A@Jd:\5AB;-|x5A`;=xtl5AMG>u5A'? *5A@@9R>5A CB0b5ArDD,C{5A`PEmٛ5A`9'Gf+b֣5AJQ.5A@;*L˙5A~EM֠=5A@N&'!5A`O.95AHQ0)T5AR3áTx5A]Sv5AAS2ä5A^ݜ=Tz5A T& 5A@vk UM$5A}Uš*75AVE5A X]džL5A;uY}L5ANZG5A`d \;5A`P&^55A /p_B&5A`\Ya0g5AZvbt5Ad5AL)Ds5A` "0nȺ5Ag&)'5AX<ʲtB5AdKl5A{Ru5A-i 5A815A@; vj 5A` Η5A %C+5Az65A H_<5A %-K H5Aw\ߴ5AaVWvF5A Ѯj)5A{pi 5A |B`5A`Fve: 5A01"uJJ15AfsQtEA5A@=n QI5A`?Z*U5A@_LZ7?a5A`[.b_m5A਺64s}5A֤(@ތ5AQ+,5A@ΰ'm5A`eKI!ḵ5AEA ĵ5AOH5Hrε5AVΧTܵ5A\P5APk⁥5AWR>Y!5AS_ 5A@/65AKh*25A\d>5A HPĬjP5A vm!^5A zƩCr5ActҒ5Aҏm5A+ǰB5A@hrѰs/Ƕ5A Տֶ5A`{*$5AMdN|5A e55A^V{ 5A@,o$  5A`}ܣ !5A:)35Ao9D5AygU5A L"nb5A?RTp5A)?а)-V5A̰z5A ͏65A>{\md5Avӫٺ5A I_SJʷ5A,)0 _ҷ5AEiT5A`GJ45AGջgU>5A_կRA5A P=nA5ACtP>s"5AU!T!35Aή?"R5ADML1U$r5A~ﭭ5A 9N6_5Aק׬?6뀩5AhmZ05Awݫw и5A߸5AĪ`ό5ACj&5A@Ϣc/|5A`@Gf %5A ʓa379-5A'$urJ75A|m #7F5A@JKFhD^5AМLk5A{ݦ@1{5A `5A ͥ&5ATw75A@,Q55A [Ⓥ5Av:NRŹ5A ;V"2չ5A nzzi5A2M[5A ΢nVj$5A~ 6~5AWi 5A.:55A -;,.G5A xR5AƝŠt4[5A4h5AFcXy5A`Zij%s 5A = 7#5AੜDz5A``$Fչ5A}1Ǻ5Aԧ޺5A`#zYl5AdVq5A(I 5A`u65A ֪rFUF&5Ak\ pR65Ap P&K@5A"՞H>:K5A qZ'HV5Amf5AA}ZWG&s5AGdͽ*5A6+Q &5AU2)5A@aàĻ5AظZk׻5Al7}+&5A[TQU5A ?ğb5AK$x˕{@'5A`mtz845A@+o>5A`$!BJ5A҂LAT5A xΜa5AQ$e k5A!K4u5A ם1 ~5AMd(Nއ5Ad8I65AxА5A` Cw\ړ5A`/ޟ?5A`ta"5A]eo45Aeok=5A@iaCl5Ad,5A@,f O5AJO;U;5A [415AI܈3,<5A8ism 5AFX}5A`@ܧvu5A@ZX,ȼ5A)5;9׼5A`S&5A`H25AkU$5A`?D;5A`hFu|K 5A O>U5A`R(r5AlݬmgA*5AF='z25A@$|A=5A ϥqTH5A@ħ4ST`T5A,"oE]5A ۮ5cxk5Av@4Ou5A_=4c~5A vܯ !5A Aޗ5Aܭ2L5A۰P%5AոxWѺ5A׉c)<ͽ5A`lTֱ"mؽ5A'^<5Ae$̷5A 35A8!M5Aka!5A@ߴ}oS05A >OцN>5AQK5Az*R5AѠ.p'd5A [{r5A૜5AL5A%DݶѮ5AIF陾5A s15Ana¶ɦ5A@t Ҿ5Aqη&ܾ5A_m-5A&5A@KIM 5A}~նH/5AW~Ԕ85A`"-U5A n_5A[9(K8^g5A Qᄹ`s5A]5AmЇ5A չÇ"ז5A:U8dž5A vͧt5A@t,.s5Ax*9_`ҿ5A@y5A`8M%t5ATc! 5A ?TTe_5A no#5Ay05A`h낺 =5A |^6H5A4W5A.ۆeqc5Ao {5A Hov5A ]x5A_nu5AMo{5A¸a5A[%Qd75A@KO)֒5A oD>9i5^ 5A< =N5AjK{65A0l7C5A/(L5A@N}[T5A+ sX5A:)H(\5AXWߝbc5A`Y;&{Bk5A`oq5A vsGgv5A`7apy5AfX6-~5A  r5A`pf>o5AVehfk5A@y%gri5A`>MDc5A!1bG\5As'5U5A%w5UN5A (C*mG5A˞@5A[Cx85Ah<߯.5A^f L#5A`U>65A)DG5A !r 5A )t 5A sL 5A:YF]5A`RJ`.@\5A`45A` B ltI5A_ޘ"5AzrE{2[+5Aq695A.C5A@H4M5Al^I~_5A=Lr5A|DR5A92"J5A2-X5ARN5A`D7@5A` KK5A@K5Ap 5A:~3$5Al,B 5AnzAxOb"5A0Sa35A\m@5AlxR5A w[$8_5AW+L{5A;/Ē5AؠOe5A]Q]a j;}5A ۩;5AP\t=i65A@غ,yї5A`  H5A & {5AF}A 5Av+H3 5A̢ w+5Ate!:!!D<5A8KsP5A;Ai`5A@Pyt5AΌJ 5AdFV͚5AO"A5A \,}a5A@!KR`T5AV`r5A(x5A D"XtT,5A KH_ 5AB7JEc5A@/s15AN?A5AJOnR5Aޟv@"xa5A r5A -p0e5AQ ܫZ5Am=a-5A`RhS5AlDZp5A uF˔5A`MT 5AX=5A4|45A`1&5A@4a&_vc;5A@)Ȉ#5A}Krz25At\{+A5A \X5A 5{jVh5A nX t5A`6:X҂5A[{)G5A-NjR5AIUa 5A*W;5A 2.5A@o_S 5Agcj5A>'5A 9 ]O 5A`å5A@ |5A:4=15AnK)5AħH!$?5Abj5Ab>V 5AqeRj5AGK*W?5At2˜5A`OY k-5AP K 5A@+ U5Azg, qj5AeD 3O5AJ9  5AH 2i 5A 7 )V5Ag ^5A{ k5AڑaDC3~5A@t4^t5A`66›D5A y8GLoE5Ar;qN+5A 1 LP6\ 5Ar9RQA5AORݒ75ATT\25A@^VI5Aj?T#Yk35Ae:W[D⓵5A`t]=u:5Au_B޾5AX:cayvb5AqGc)5A_eK$5Af8n5AѨIhԹJ5Adj>Fh5A`zÃk<5Aۨly5AinN|I5AV&6ok@27]5ALpĦ5A;q͘5AyrW5A@ZjmsT35AtitUAtv5AQ8UuN}5AnP^w:|5A xyU5ATzg5A.{ʧ5A`#J|]%5AZ}E55A`sd})cj5Aa~ݶ~Ѩ5A@G_*v5A`S Qʥ4=5A`sO5Ah-)5Ag1"Vr"65Ad&͗5A @ț5AĖ7 5AQUQKh5A`|Z5A[,}ץ5Aoƍk͙5A@پ7zj<25A =x~t5A`NХ"q.=5AXZhܟ5A  #5A߳.e5A K> 5A f"5A yG5Awh5A/5I܂5A@}q)5A !E ߺ5AJ9N,x5A ZП_]5A .(xӸq5Ab,a5A@5/ [U5A`$;E.5A/Ly!D>S5A{i}5AX?K~5A`)5Sh5AW^k!% 5AX|HW{5A@ cd~5A`q )5A Ernx5A55A %8dGݹ5Aı-25A ж 65A }5Ak_g`H5AWӞ@y5A X0'5AB 5A5CԃPJ;5A`u]?xܟ+5Ah xLɪ5A@n<͝5A`O k4c]Ԝ5AL`~FWU5A@Exvr5A`|#uuP5A:<б5A*^6 5A Kk,Ȟ5A?V|)^Y`5AlQCd;٘q5A T oXӪ5AdWD5A7<a~5A wqV|)^Y`5AlQCd;8Ck5AgHD)5A@dJ4$m\k5A 2;2.HHl5A@dJ49TCq5AQbt2t5AR#NӇy5A`=}Yq5A@R=ßݑZ5A4pPe5AAƯS'Ԋ5A|LP65Ao3ٌ5A`G\eaWv5A@n Z5A8gAe5AЌƃ y5A))5A |-,5A@?vM5AgHDjqs5AmK>g艎5AWR5A`F2at5AJ 5A`J͆5A ;5K5AҾۄ5Ach5u5A}׼b |5A p\:EGwy5A &n}$+;w5A egv5A@ѣ_5)t5AЦc}q5Ap`=YBVH=o5AYCk5A{'=m\k5A 2;pS6A{sd}8A*[{  v8A@Ux|f8A@UoCv`8A>Q8A~2LEo~;8A@:[ڈ5[8AIĜ͝ 8AP,18A'r#}3?8ALU~lu%7A77A?"߉ 7A>qJ*7AcG37Ad \2E8AƳM58A@mE~5c7A@),эb 7ANMD^S"7A Y.7A@G`7AMqc7A@ʁE7A@,sx~7Asq%&7Ao%['#R7A4zj57A+n7A@d7A`H|)Q7A@CbI?c/]7AT>Cyf7AN%ڔ*^7A5 V7AZ'7AIooѬ7A-=i7A;7A`Dӣ"J'd7Aj),za7AR+=Jl7AU&.7A qcJ7A`j7A`#n*m^(7Aq33b"7Ah+ND|7A`MXWZ*{7A lW oN2$y7A LB@:q7AL2vKJo7A@qPSPLp7A`9K1n7Ac^)byk7AG@b~+9h7A ?YDFRT`7A |݉l3=_7A|IoSf]7A`fݯ >Z7A?w>Y7A:wڄBCW7AyyS7AT U?\ O7Ad1ʹL7A`Rx)$:H7A` |DF7A4_?B7Armg`r?7A |4#xWA87A.U'LS67A63iYO{N67AB۩H6F?x07AzSY+7A 7A`C6H~A 7A,^4la 7A@8xwnF 7As6RR 7AHQ_ 7A@x&7A~l,7Ak" {7Am j'7A pw\S6A;WurZ6Agz0QPة6A Px`ӿ6#d6A_c0[|26AҔպ6A V` N6A >Pop6A{sS6AڬU6Atug 6AQC6AnB` 0j6A`88k6A:em#6A@K(6A -ʧU-!.6AGN36AكU$96AU.[R7>6A S5¿}'D6A!WlM6A8\ǦƸS6A݌X6A*/^6A`ZWzљc6A1u Voi6A@S# +s6A*̼Ux6A@e4}6Arm󍼂6A pG 6AU&v6AڤGs6Aݱ5/6A`!e\6A .<6A֓W6AHǣx$6A6A fsޓ 6A $!KP6Aaul%6Aˉ6Alc ‘6A@p45eGg6A  `#6A% 6A@ђ,T6A ll e6ACrGC 6AwFPi6A@j?OW6A 6A`lu>$6A`Of3*6A w&?~]/6A`\?:;46A ҟ@86Aट|ąB6AGXTG6A*1K6AxwQ6A6WԞkUV6A筞y Z6A3_6A MY˦9K6AzΚ^]L6A ! D 6AYU6A i.s.6A` q!6A>06A{v`4+6An}TTW6A1Lw6A׬Z F6A`^γl6A>˗]GO 6A` yܥa6A@6=u?6A@6A!#itM6Amڰǹ6A`O\FH^6A+6A xICt6AXLXR[(6A`z_(&,6Aq4I ^>6APn|4A6A@"QF6A]*O6A LϋRYS6A xΜG\6AG%>/a6A52_e6AkTi6A`xϒ}kv6A&6+z6A s 7V6Aw8uG6A@o ;X6A)̈<6A4[C36A`A;eEz6A uJ@ "6AGY8ʞ6A`?︇f-I6A8/86A`@m6A@lՆ~6Aâ6A/F-ug6A&G6A5h66A S)X6A@^b6A@E3V 6AZwׄ6AQ L56AJiv_v6AAwKq6A?fK6AHNl 6A \p6A}6A_b<6Ad-[6A 6|a!6Aӂ*9$6Aƽ8Z6)6A`rɩ,6AWQGZ16Acj46A Cd/96A`T\Ɓ<6AKxA6AD-OW<3`D6A;+H6AJC>pL6A`Bʀ_P6A hPޔT6A pqW6A`*/c>i\6A {/~`6A)>d6A}n;Xg6A !I|Fyl6ATbN@o6A&"Xs6A@T~^~w6Aۭ~z6A@Ǝ~S6A `~~r6AC-~(6A }3Po6A`}6AC}{W/D6Ak}Pڕ6A s6@}hk!6A@" }n6A (|I6A |Ȍ6A ܚ| A(˨6A J|a6A b|%Rd6A-rh{oU[66A{!ú6A;4X{/%Q6AM*{o6A ,?'z=6 /6A#zhm6A 3z6A jz9l86Adfez-6A@tkyf6A`UWy;6A@2pyRC6ADyC6Ay%y{F6ABxJ^6Ax6AJJx-6A״x6A@i=wR6Ayw6AJwʀ+ 6ALd$wˆi6AEοv356A@=VvwcC6A`-)vNj6A{ut"6A`Uu=3&6AòuH6*6A킌buA-6AT#7uBZ46A5#tuڼ:6AjtE;~>6A%?t|N6A ki?smS6A=sV6Aq]rY6AɯrrB]6Adxrp6Ao3Eq t6A`Aq'v6A2[#p%{6A+p+]}6A )؂p6AOo5rg6A`z=Pn. 6A`nn^6A@ܴly6A@~lƩ6A["lox6Ak.6A0gk<6A@kl6A`^jw16Afwٹj|(6As~jj6A`EQidK6AjiF6A8Nia6A2iu6A|hn6A@J6LhB6A~Eh!Y96AAg,t6A0[lgʒ16AcjGzgΝL 6A@3Ig>d 6ABzg" [6A3?f`o6AgNsfa6Agwf86A&DfAw76Aq}C f!6AKe$6AeQueЮ '6A uao:eҹY)6A z e ,6A9d.6A?dh-56A^7dsh,76ANec%s:6Atkc@<6A=Ûc?6A4`c.B6AwS:0cdrNE6A`bb8NG6A`)ibIJ6A\xbbL6A ~(Yb*ƛO6A&b(Ѷ)R6A g\a4JpU6Af6aoW6A@Ӊa^7Z6A6|Va$\6A@Ja/_6A ``?Kb6AA}`YJd6A`uAAg6A 7G`\i6Aqǐ`"l6A k_ǪIn6A#_:r6A`Ww_6t6A~?_Qkv6A. _#by6A^0~6A "r^06A77^[6A>b] wE6AhW]e 6A@]():6Am2c]&4Uڌ6A\62] S'я6A2\WБ6AKE\!r6A\@D6A`S\K_e6A?h#\3d6A@Ծ[16A, [9|6A@([LAm6AȝN[6A\[G6AuZ.>6A Z96A@QyZ.6A`d0& ZI۲6A IYѵ6A FYdKѷ6AL9eY< 6Ae4Y6Akl.XFn6AÅX'Ye6A`Xjd6AAXXu6A'X-6A ӶW I6A`_-W)6AKKW~ٓO6A58"W`eF6A@AVnD6AzqVq 6A`@V6A $X U}"6A|qfU86AΟ.UǴ)/6AT<,6A kTW{6AfS]y6AxzSh6A1WJSt6Ay-R6A pR1= 6AVQ/Xa 6A(%Qj` 6A b/P?h6A`P`f6AD=FPk6AV;Pĸ6A.mO#U6A,7O`ꮺ6A |qN` 6A`Ԋ"N(6AMt)6AM_M /6AZY M-06A L5426A@L-Ob46A*nL©a66A66L-ai76ANQLg;6Ab>K #o<6AYKXn@6A.JJuA6A\JBtE6A@ 6BJ {F6A`jQ JΔzJ6ANJI:K6A(eIkƔM6A *C-I1LN6A ^HՇR6A @l.6A\u}@;-6AvE@i2}56A 0.@Ys6A%?6A`+?6A ,a-?A6A > 6A35>“6A)K>^ʔ6A@>tɖ6Av7N=MEї6A/i=;t;6A %6i=J6A<:ڗ6A ,N<4O6A!<Yvf6ALO;kd6A0;6-6A_;ZW6A@?b:$16As[:W6Az:Kë6A3{9ܿ{6A +>96G6A@fc8C6A\Ô8kR6A@B(8x 6AY7`6A67/Ѵ6A`+@A7TL6A Q(6,6A`66A 2,6}`6A@'5|o6AW5'6ANE57/6A^596Aj3446A^jf4R6A WI+46Ah3ط~6A3Co6ACgK3F6A t_3|N6A@-2Ԡp6A"^V21w6A`o12OE]6A`l16A Ȉ1R6A f1?6A@CM1fU6A8ec1xe6A- 0m6A 0Q%6Anzh056A@50#A6Aws/L=6A(/w6A m/H6A~P/p ?u6As/t|6A ,.?J=6A`\x.(E6Ak.vU6A/0.L6A -:6A`->6A(TL-,6AI]:-tl6A),YZ6AX(j6AY'"6A ̱'36A Tx'n6A :'f6Ank'3~6Ad 0&`ù6Ah[&L6A+%8Sڿ6A@x%Oc6A`$vC%T 6A }T%+ 6A$ S6A`Ȩ$GGR6Ako$3ۘ6A#F<$;6A{ğ $ 6AaQ ?#?6A`pVj #+P6Ag("w6A`7ܪ"6A`x#"آgR6A2r"T!6AA?"?%6AF "Mj[m)6A`!{=6A# {Ėc?6Az-{ 3%B6A`ŌG DҠE6A 5 JLG6A\V6K6AQ9,N6A`GXn R6A! U6A~m+.X6Aֆ=W\6A0U_6A_XUa6A 9: c6Ab3;e6A@1\af6AƪN&>BOD6A!;6A4D%{Q:6A@Ú]ط6Ax9Ϻ6ABZ 6A`86A 7`6c6AnbQZ6A'J6Ag:6Ao+?6A6A@md7L6A`7O2b:P6A.#3/T6A8xY6A {cy$Og6A<# ,l6AտLHu6A@'X&z6A` dL6A`} ׅX6A%Y9#_6A`5Z@He6Aj;j6A-p6A^w6A@F}6Aޭ 6AHb06Aa9C{?6A@I}:l6A|dy6A`h5Z6A4"R,6A J56A@q9 d6A 9->e!6A %ֿ6A6A i6A dX!ɱ 6AX:6AѲ=O!6Ai](6A&&a'/6A@ɧmuC6A[fs`J6A7ie6A#E56AjY(6A`zmс6A@JM16A`Fa1e m6A~(v6 6A x.D3}6AWhf6A +6A~36ALuAn5d6Apc-M 6Axt1=/6A@6)p&6A"g4-6A߲jG6A+^Ս{L6A *wG@s6ALhvey6A^N6A@\̋6AENHFn6A{Z%Eڞ6An76A Ts6Aָ=6A@);6A 956A?hsZ6AV'&kH6AO Wm6A˨6A~u26Ag[46A%y@}6AGz"E6A`T?ZY6A:_vxE7A 7A.⏗7A C 7AU$7A0^_v)7A5@2A>/7A FD}57AA-k:7A.HM@7A`!AE7Aoј܂kX7A 86I]7A@I mc7A@+eKh7A*t7A@;ry7A `'~7A?NB5%.u7A S7A0hLw7AƍL1v7A Нfvz7A`[r O7A bZ|7A@_)YD ;aQ7Aѩ~7A+?eS7Aw{7A@`37AQguT7A'AZ7A |i;M7AM@'Sv7Ap|g7A`0B7A@Q7A`!js7AvQch 7Af>je7ASM7Aiэg7A`؛4Z&7A+vg+7AxDH#57AΚ97AU]8Å?7AJ\6fD7Auw'{H7A(JQx~M7Ab#%\R7A@{7V7ABP,[7A$i7A*'?Mn7A_BPq7A` qv7A``IT$O{7AyY7AjB7A hR7An#=b7A|]7A W27A,pw7AWV\7A 󶐝ZZ7A.oS7AP@Dk7A)7T7A 7A`d6]o(7A@j1D7A=bCOK 27A`54# g7A PcE7A6K`7A.s >7A@PM7A>7A`.l67AkF 7AHL7A v|5?7A70iy!7AV&7A`)FD+,7A@&X 17A2Qd667AtA <7AKj8A7A`Xlr-@ G7A R 52M7A _R7A@D-jLX7Ac {)SY^7A֠{Jc7A0a]+i7A.D9Dv7A *S%q{7A@wN7A`-0\ 7Ap©dW7A&97A jo\r7A+ $~7A;V ̕h7A: -7Apy`7A|vGe7A $Ϟf7A Bb7AUb7A@8LzIϟ7A~O 7AU.7A2jmd7Agnخ7A 6&7A y"{.r-7A|kP7A5XzV7A@YzڼqW^7A Xxl}ke7At`nctl7A࢑`ls7A ͤb wG{7A<ˤ`[7AVB\+Ȉ7A_hW?7AYhQd`7A`aQYG7A"WR7A@J{!X7Axy!VL b7A@A6['N7A`R;kW7A@ݶ9eٻ7A "ж7A@ 47A@> ;H7A <o7A`GwY7A;lV~7A L$7A@,!E7AjAoGr7A I# $G7A@ L$7AsE?7A 1ޣx7A@`9M'7A@!eoF7A7-_/7AM6e!7A =&#7AFH+<&7Aa;(7A>m k(7A ᠡu)7Akm>")7Aڝ0YN7)7A6;KK)7A'7A@FsPj%7A`7b!7A@oW[a7A%Pxr537A`-B}7A3 x>7A-!)7Am|jR 7A`r)Wd7Ay7,}7AH7A-J7A@ ~ALv7AjZ7A`|'rl7A@"L| 7Ao9Z7AJR47Aౠ7A` <*iZZ7A9R]7A\{@s7AH#xA17A r7AjX F7A`8 N7ALb97A"j"}7Aqou64kx7AJD:v7A@Kcr7Avtׂo7AF`/4uk7A`Dq$f7A UbwNXf7A`46'chf7A?Ǫ/ g7A@~4j'h7A.Q=4_h7A mBi7A@m 5l7A_+h1,o7AsLO|7+q7Ah,vqt7A )5=v7A3 =}z7A|9!7A@".vJ7A TJ;fE7A"7A7A`& a5՚7Aݧ7A`jd#'7A~hCK7A%G̷\7A@V$7A UR07AW7AfqK8t7A 4%07A@x=n]0D7A@Ed` 7AE]#u7A`ƉSR7A8Qo7AaQv]*7A`M0C17A'nINFRF7Ag 1#DM7A,XT7A$a7A/Vh7AwAeo7A hDJێw|7AD3n(7AdtdU7A@Vɍ7A R=Sʞ7A&4@˘7A Xt8̠7A 87AwD [F7AU0'7A$07ArIpQ7A@%=7AxpA7A@ 7A-7d7A rPx(S'B7A$Rw7Ay8<7A`̻$>u7AB 7AQɉi Hh 7AOXr8e 7Am< 7Ak]qg: 7AtUr30 7A``7N}+t 7AG+n3 7A#Ec^ 7A7#`@KZK0 7A_sU; 7A!1g7LA 7A^3{Rt 7A`A/;d 7A u+d 7AFr'I7A!GL 7A@= L%7Aޔ0n/7Ag,7A M\7AȊvd,7A f5K4C7A "L%*7A{kO9[7AcPyS7AZ$q7A`-lpB7AH67A^ښQ7A>vz7A`K,`jVŏ7A9nCo87AޙH>> 7A@0!!7Ah835pz#7A}(\G`$7Ai\q>qF%7A&]u &7A-Y}k&7A(ZA'7A @z`-1(7A.DuCx(7AH.$.a')7A})7A==qrr)7AU)7At1*7AΩܼ?.3c*7A`I CMV*7A`Þ0%i/+7A ,[q+7Ax2 >+7A@r@ ,7A[6b,7A`'567A` =8o67Aљ*4$yj77A+/w+87Aϻ )2287A@fu,#%( 97A`V"]"B`=7ATY03/=7A roBRA7A K|oԯB7A`H G[ C7A@w C7A 2ٙC7A@b;C7AŔ<.C7AOzMbERC7A WA7/gC7A ~C7A`y-fC7A7Ov)C7AvC7A/7UC7A + C7A >" b^D7A5,;D7A mlg D7AXFD7A=Π-^$D7A(*PB1D7As>\n6D7A@u ɮDخAǸD7AGqpD7AE CD7A3jD7AX'دxD7AE"D7A`׫6{1}D7A@ڛ mD7AzlnD7AjrTE7AZ&:cnE7A &E7AIE7As'E7A $KZ/E7A1@w5E7Ap .?E7A@ EiCE7A5 THE7A+biNE7AT"ESE7A2$WE7A 9tu\E7A`SNb8aE7Ao+ 9xF7AN@ }F7A@[F7A@f1mĈF7AF7A@?8F7AA Ka~uF7A`-Bmo F7A*!D5F7AhZSF7Aേ] w+F7AfL"WF7ARKTFzF7A` VzTMF7A@賓QA*yF7A/3SqF7A`;,C<<F7A&d1F7Aq^9:]F7Askkr{F7AoCPG7A@ZK[G7A@U0gG7A@oQaG7ANΏ&G7A8}5gS@,G7Aߒil1G7A՜r7G7A&տ,>G7A`̈́껿^%DG7A ~<ϕQIG7Ai~|ܤOG7AyCcJ--bG7A`P妩gG7AE1mG7A Ⱦi?tG7A TisbzG7A`{| րG7ALQAuS0G7A cJT tG7A=OG7A@0# G7A]gG.G7A(fďG7A@8ﯽ07G7A~CtG7A =xP&G7A`P_V}IG7A >2/G7A` RG7AP 2OG7AխG7A`5nXH7A_z<sQ H7A „G$vgH7A` ꙊH7A 2 bH7Ayϻ;P#H7AO)H7AXGN.H7A@IؐЇ+5H7AΛwdN;H7A1V4HH7AU.$1vWNH7A70SH7A{YH7A91˺fH7A; flH7A`yx1yH7AEbH7A )' sH7AR; 6H7A@^DH7A@K#ӹ C>H7AŲj{jH7ABO!'ݣH7A.{L!H7A@*Z=]ZsH7A '@4wH7A@r%>85H7A U8/)V{H7A VK6eH7AO:H7A n1X`H7A@ԁ,J?gH7ApH7A`izs6"H7A&ԷShI7A  I7A`J!x{8I7A5dZKyp"I7A1yF\J7A0ʰT){J7AHuY璭bJ7A`1w%J7A=eAJ7A$*W[J7A`SƃJ7A@ޯJ7A%ͯ2hiJ7AůX K7A1wO5זK7A =Π"y7K7Akoz>K7Awh^![K7A I7Q*aK7A%[2wK7Ap4}K7AF[m*K7AֆٮlʘK7A)ʮޟK7A`nK7A@TOYK7A@iA}ǴK7A `K7Ah~K7A ٘l!DK7AnWY,v>K7A*GXK7ApG42K7Ae"TPL7A`X65L7APr$L7A]e|+L7A`έ!9L7A`]Lmyf@L7AUʩͷ#NL7A+;HOUL7A"[3k[L7A`7r}PucL7A <)q8jL7A1_4vTpL7A%aX"gwL7A@oNA#"L7Al:3=L7A`O3L7AU!:$R'L7A >MyLL7ACL7A`4sL7A)rHL7Aoͬ^ L7A@eaT'L7A 2h"L7A)AkL7A@-iiL7A"|`;|L7A@>rv?L7A@ ` fM7A,M)1) M7A`֪;@<M7AA1 eM7A9a žM7A1$M7A'X2M7Alq9M7ALO@M7A =֫:GM7A{īItNM7AnkUM7A}q@~\M7AI|AcM7A@A(7TjM7A``qM7Ar.+xM7APi4~M7A/W M7A#LP}hČM7AJ<xדM7A@k2NM7A%#֭M7A8յM7A`Pq OM7A̚>ZM7A[&M7A`dѪ#9M7AhǪSM7AسWM7Az{M7Ar)M7A!F쯨M7AM7A?u~M7A7{dN7A:_ [N7A6bN7Av竼oN7AKApMvN7A#g=N7A KDŜNPN7AeV:HN7A[(ғ&N7A@ @N7AӸڿN7A_>EN7AJ:Ϩ. YN7A`qŨQN7Am}aN7Ae8*xN7A9ؠu̹N7ABkyN7A@H{%O7A TM ?o0 O7A)g@O7A>KD"O7A9W)O7A@-qF۠=O7A鰧D]DO7A", 4:RO7A o`CMYO7AUzmO7AܶEPtO7Ah<TO7A2i} O7Aӵģ[O7AsڦBkO7A7Ц? O7As]r0O7AHޕ~}UO7Ak|yO7A`xck ;O7AU(cO7A tWO7A4M~1O7AcFWWO7A4P7A`7EQ!`% P7A@-=5P7AWeYP7A@Oi!P7A;j3M/P7A ǥ`6P7At壅P7A3P7A ҤVK׻P7A `Y.P7A ѧ"P7ANػdP7A@E}(P7A$kr!#P7Al@RRv^P7AK@;DP7A ŢT_P7A]9P7A`'cecP5P7ANRQ7A2_ Q7A >>Q7Av5\$Q7A 71ȢVG"Q7ACħ$t-/Q7AKIu‹nP5Q7AQTC/:Q7A`h="GQ7AŦMQ7AhFݰRQ7Aá7 XQ7A'z$F_Q7AoصieQ7A hFajQ7A~OJrN|Q7Afi$*Q7A@mȠLQ7A& fpnQ7AM?S4Q7A 6LQ7A 4k1Q7AԹןE*Q7A. Q7AkᐐplQ7A@ANrjPQ7A-gI JQ7A౰o( Q7A>0Q7AsF0fQ7A 䔞:Y9Q7Aơ2l|Q7AF@7Q7A` %&geQ7AIQ7A@H&֝K yR7A`)cpK R7A:࡛R7A 4 ^jR7A^B=$R7A qc(R7ACㆃ-R7A^`02R7A;S 7R7Ay0sɛ`E;R7A`󷆛r@R7ATu:IR7A%}e^eNR7A@c[L|WR7AmtG8_X\R7A@Bq`oeR7AkSriR7AjEjvR7A@|<`:zR7A@Э4R7A@"&MR7A`?/R7Aғ~R7A˕2QS7A_{*-S7AU S7A'2oS7AfaےPBS7ASvtR!S7A {{~6&S7AgcVσ5S7AY8ɦ;S7A y@Б=_@S7A[CUFS7A@\z=xLS7Ayd`SQS7A 9s2: UVS7A`X9R\S7A  F3ubS7A@BҐjPgS7A<߫+smS7A AO芐sDrS7AplvS7AS bO3S7A bvS7A0X*L S7A7mq^S7A@|/дS7AB@fS7AHTfS7A`9 ܎<pS7ALX^S7A`k˜Xh (S7A@77S7A !f.p1S7A@k 3+S7A`-݈%T7AcgڍГ T7AZ+Kˋ T7A.:nVT7A_o0W#T7A l,}4 T7ApLof&T7APTrb.T7A0-9Ʒ:T7A`@y?cAT7AqiJ-pT7A@E҄wT7A ` {vQT7A_XeT7AMz8Nm+(T7A@-"< ;;T7A<2a5T7Ah!WT$T7A lNT7AS*FT7A;eˋi>T7AKȋ %QT7A@wfaIT7A xT7AA󱟋>d U7A`iBU7A{N U7AiI/>5U7A4/LZ(V7AVZՈn/V7A 50Ĉs5V7Ag76V7Aq7 EV7ATͺKV7AQ RV7A6B\S`V7A;pr9mV7A꠾=cpV7A,twV7A@|jv~V7A { #V7A"¿!6V7A௱V7A@Yb҇ + V7A$ȇ`JV7As'ZV7AQțJN+V7Ax}I^>V7A@ni|V7A`DKV7A&B?]V7A@y ސpV7AU6|W7AV,Gφ8ճW7A`F~ņ6)W7Ajgv0W7A`*"RW7A=/YW7A@%.W7A@BFr0 W7A DŽ2_X7ALX7A33%8X7A܃_4?X7A ƒ#]SX7AgMYX7A ÜutX7A.O{X7A`EuՈX7AйlHX7A@|ق[͜X7Atf@X7A :6nưX7A@:.za9X7A@o`ֿX7A`{o=tӻ2X7Aତ$(X7Au%?6hX7A1gX7AO1ցXaX7A`fq@$X7AJ]K~X7A`|ߒ9ZY7AEK[.Y7A@wh= Y7A@ؘV1gY7Aq [=CcaY7AQ+6nF9!Y7Alj'Y7AKBOo.Y7A g' &J25Y7AFRր 1/;Y7A`x)hBY7A A\HY7ArRIVNY7A@ {VY7A`mg\Y7AQN*ObY7A UN?5oY7A@p kuY7AN+ďY7ALTO[%Y7A\uEf ZY7A`\աY7A _E%@Y7AnݪOY7A=0~kY7AI8~֠ܿY7A~7[j"Y7A h~^MY7A оUJ~HY7A@Ce~k!oY7A=3},Y7Am9}M]mY7A};WY7Amz}72kY7A +S}}>Y7Ag)+}Z7AP[|jd: Z7A@'|-<Z7A@`Oi| Z7A;|) Z7Aю|zq%Z7A |X{L*Z7Ao{aum.Z7A`{eٳ3Z7A/Pm{}EZ7AzxuIZ7A 2zTRNZ7AF E\zSuofZ7A@gugZ7A ^+zur׋WZ7A{XGum[Z7AFu,&Z7A`)t%l2Z7A ІtsZ7A5tz|Z7AguYtSZ7A+tZ7A trdqZ7A5vs\;pZ7AsZ7AqsmZ7ADsBZ7A/ruQZ7A`rqu-Z7A79rWp̸Z7AG rLZ7A|yqA(Z7A`#Vq?[7A2}^q9 [7AX5q*[7A@ qqU,T[7A "ypS,[7A`pRM"[7A[gp ĩ([7A@>pi-[7Ayup2[7AVoa5Q7[7APoB R<[7AvoF-.A[7A@ҷmoDJ[7Ao_M[7A]sn`R[7An?nV?W[7ADSnԃZ[7A -_ng+_[7A@1n3b[7A@KnMxf[7A-"/mrj[7A¤m0m[7Aqmq[7A';mIAu[7A YmVBy[7A@ le"[7A =jSi \7AoRmhoT\7AԮUfCච\7As=dw\7Aw^WbJ]7A=`]7A%FU_yj]7A>]2QS^7A:%\p^7ATZ{w^7AUjXc="L_7AW[VƟ_7A`N_T`B_7A`RnF`7A,,Qm`7AVO)`7A#&{M, b=a7A@jK>Ka7A վINa7AHGR2b7A3Eb7AȷDI?b7Am%B㒃%c7A 1r6@okuc7A vF>zc7AzCU<eCd7A ֶ\:R!Idd7A@CTl7A`Vn_l7A@cxVRXhl7A&,=a^rl7Az~ujzl7A A)ަDl7A Cnμl7A l7A;iWГl7Aࢧh5l7A,C l7A2 81l7A~u:ƹl7A@ril7A@tfx-l7A ΍ '.Vl7A`a:l7A?zl7Agl7A|o[l7AC=zl7ArNm7A '!U@m7ABE!m7A?,m7A5ʺ4m7Ad3a*>*HPm7A QWzUm7A>![m7AQ|R/]~m7A `|vV߃m7AԠK N>m7A9m7ARΒm7A } m7A x4=m7A`^Gʳ[ٝm7A@$%3+fm7AǸf!M낪m7AKuܫm7A^n{m~m7A }Hm7A tm7ANQm7AUU*gm7A cį*O-m7A`ކQ9m7A@k@m7ACLyuSm7Ag^+m7A,(Mm7A Gm7AxEZm7A U3m7A`On7A@t+-n7A@Ry 5n7Au n7A`j]Q'n7A+R/n7A7 k6n7A@1b@n7A@4&sxzHn7Am!|XYSn7AåZn7A볫@Hbn7An\I kn7AXIon7AUztn7A 7'pvn7A1/ -T|n7AP-n7A`ʂ>w᷄n7Aj)u<ޙn7AaG55S݌n7A`!!n­n7A$;OZ-n7ATp޵hn7A`7:dSn7A`VA65n7A`$Oci@n7A$CSLn7AڡqЪn7A_( n7A0u^4n7A@Dix"on7AM#@TDn7A8`%+un7An7A`2n7A@I8[t];37o7A # 6o7Aw%z=?o7A o7Aơ"ro7AgJ1]o7A@9&4o7Ayd)- o7A@Ik9%bo7A5cmugo7A]T#p=Po7A .o7A`zٻo7A`#[o7A@0o7A`ouUBJo7A/Vo7A` "o7AT o7Ao7AeZno7A`ؑ3o7A[o7A/`o7Av+ Co7A@X.:0!Go7AIPo7A`?oj9o7AM" o7A*QJhXo7A` =;o7AfCHo7ASno7Aoheo7Axɒo7A@|ܥdqo7A .o7A Ukyo7AX$FWo7A R 0~o7AAY<o7AŨn=o7Ado7A ˷p7A%p~v,p7A@C/XCSJ p7A~; p7AأӤ"p7A@d*| p7A$ϏZDp7A`ۓ$ 6p7AFg"p7AH>`$p7A@Y~)p7A)%x4p7A8+[ƺPp7AKm HUp7AC+'I_p7AufQ fp7A`]1op7Alzp7AD$Sp7A%;-5Yp7A@Vҋp7A QP6{ p7Atp7A gn8ߢp7AYe2p7A"1/Zrr7A`9yxv7A`Fه;Hx7Ax,:q%0z7A } ^dFz7ArZ6Lz7A7:W -z7A6US {7A ySM{7AGYR^{7Ad?I[E|7A˰[H,]|7A@|GNHo|7A ~w G~8|7AP&b}7Axm=0}7A~v7<W~7A`:Ve]~7A#/9B3g{~7A[D7abr77A@4r7A1!3,] 7Ap,1dҠ7A1C,l7A` &@07Ag.(Rm7A ,y'i=7A*(07A)>0-7AaM(#ǃ7Aڔ&Yri7AQv%Zij7A {#t7A3#=]ߺ7A b}"q7A#A"L7A+!̢7AC@q 7A`OX<;KwR7Aٓ5o7A_Ju.ч7A^MBv+7A`ϾG7A D9Se7Aũ܈7Ay6-7A`$7A9+?mH7A'qrT7A`h=?+7AgH7A.5MteX7A $BԀ4jH7A,",7A@H]Ӂ]D7AJTrK7AU ;Fm7A`Z r׳7Aqr X07Aw Fӌ7A R?Ϗ7Afr hd7A`M 9v ?7A F7A |ƌ7A ,!{>Ќ7A1!-׌7AcpI!;E7Ap!97A !7A^=!e97A9!Tߊf7A!M7A 6ʪ!dT'7A`8?"ط?17AHC6"V?7A?U"AI7Alw" W7A" ,af7A7"Fo7A@'"%;}|7A 8D^#*7An#n7Ap#v7AңkH#R5U7A@pr#~u7A`ɔ#ia>Ѝ7A`L0#*{7Av#YS?17A˓`$:@7A`k1:$f鰴47Ab$ƍ@7A†$rR7A{{$ `e7A`A$cD 7AlK %e7A`H%%7AӃV%~C7A@ܠB%BA7AH&hY>7A@r9&׽S7A@hW&Gl7A@zt&#Du7A8ž&)[7AX{&G8dÏ7A@u& Rޏ7A{S ' Tf7AG4'|7A\',c7A=ߣ_'Ҷ07A.8w'(D7A}'#=Z7A`'1_n7A5',7Av'6e7A_'M907A:'զzr7A@'Q7AH)G'Đ7Ab'}ӻѐ7A!!'s ې7Ah9'/7A@'Τcn7A j'Z7AoP(jP$7AgZ({C! :7A&* ($a5O7A`n!(8KY7A ({s7Ac'!(E A7AHP(H 7AS(44E7A` (plF7A A'S7A;2'#&Ǒ7A'Jؑ7A`ET'(g7AN#'-y_7A`Rs' ] 7A' 7A`'hV7A@_'ֱ<*7A ='44?s67AH'cA7A4x'r.P7Ae'a{a7A`ĝ'Kjr7AP'D{7Ags]'qZiW7AE'7A6'Q7A`m*'Ki˒7A`'ӣޒ7A&7A@1&I7A<&#b7A t&%7A`&l/37A R&DjP@7A(&jc7A@S%az7A@x%^U`7A'%97A$HÓ7A <$Tӓ7A9$ŕߓ7A G $ ?7AE޽#܊G7APH w#{ 7A@<#7A"͠&7A_ "3N3,7A^ "$57A)L]"TK~A7A%}%"P|K7A`ŀ!S9rV7A!`7A .!Bj7A '~! u{7A0!HAۅ7A9a f7A`s p7A} T7A@;t> V߮7A] 7A "|S7A` u:Ȕ7AfGJԔ7A7jݔ7AH7AzXm7A@67A`[BOS F7A`&!7u 7Aa7A B jK&7A…[)827A@I{+³i@7Ayv}daVL7A#9l]fV7A)Y!a7A`T7|:n7A h`v7A k7O7AG9W?ۛ7A3KyI7A ,Y`7AgHfɤ7A@F'7A/t =/7AO Kɕ7A`.PЕ7Ae-Qە7A`,#iAD7A\ 7A_e7A4Ke7A%A#Q 7A _7A@5S1c!7A K_y\27A`="{.A7A`kvN7A@ɻ_x^Y7A`C`yjeSb7Ab jk7Ak I: qv7A@27A=ap 7AUxl u7APJlȖ7A IU?Mϖ7A5ؖ7A@7&;l7A%?S|7AOGd7A@C7AJ*7A`%N]7A&T 7AI@lx7A@`ɍ 7Aԕ; 7AKߛN'7A䭄p~1=27A EpV[E7A!>T{P7A`Ie*a\7A qfpYf7AuU Zo7A?dvx7A0r@ZK7Aଊ&7A@L{+µ7A `z7A`< RǗ7A`.9,ї7A; 'mח7AgN IEޗ7A,h7A`kH9 7A~,Z27A7A@@7Ahe7A@,0*7Aczٹ@7Asfxm!!G7An4bS7A@ )UHiZ7AΏVe2#b7A@B'Gg7A>K8=so7Ax()#x7AOL]77ASU 7A@+ M 7A z07A6L2%^ɘ7A@=* ט7A^v>ޘ7A "G6w_z7A_m!Zu7AtY=Ռ7A C)7Aˈb e5%7A`( !cd/7AMTNS7AՊ|&h7A`^eAή悙7A`lC\j7A;@H7A_&q m7Aj|ṙ7A pzƙ7A H{ٙ7A@[ 7Al,V7A,(7A b7Aj@7A$|N}z7A@j a*7A`oykTB57A`.GH#kb<7A \#6PG7A*T7AuY)]7A@jn7Al[妍7AB,l7A1?4J7A D7AA#OO7A ?Ɛ7A`lL ˚7A\p֚7A*K7A m7AaM7AWHV37AB%ON 7A =Y7AS!7ASp07A <~>7ASoC^XP7A Y[7A RL-q7AؗFH#7A+Y5 qG7A"R97ArZ*'17Ar37A@SF$s7A ; 7A`/h@؛7AJ7A\kZf7A`?I7AN7A >6!7Aw~p^77AxbS_@7A@iuF7A(9j)cQ7AsPhEU7A@nf0S1_7AfTd7Ai={=o7A@|g*w7A`qb,17A@]VoE鉜7AM4:7ARE{cۜ7A Fs7AfD%ͯ7AE? ׷7A3E97Ai1̭(ʜ7A`(ʩ2Ҝ7AoQBV7A\ 3W7A@a ;rd7A b 7A`k )t7A`ss 7ASx &7A w/7A`p 77AQOU $?7A` lI7A[ !T7A@~ks iV]7A S} Sg7Aʂk{ `pLr7Aےg %J`%}7A] ɼ[7ADHEO zУ7AkţE `݀7AK6 h 7As* 07A) g7A@PK oo󯿝7A w W ȝ7AUH t7&ϝ7A 4t psݝ7A = Kc27A`K4 2N7AN "9 7A p  7A_ "7A0r 47A V`g;7A,Yx ]G=qC7Al r DwAt7A(Gp (kĞ7A`gGO  =Ϟ7A1+ [47AC N7At M7A( +7Aക ﷭07AJ sN @{I7A˷* ED7A SW zPL7AlѪ  U7A gF`7A1kn -^e7A`sW J!bk7A H is7A^TM* X{7A 1< 劝7A ; 27A`(7A`6yu'7A 41H7A/m=7At?WM7ADǟ7A@ ZIR1̟7A`z˗ П7A݇\ڟ7A &Q7A`)(Ӹ7AQeY77A\.uū7A<͘o 7AQ 7A`W7A&˝@ʲ 7A`ʀ'7A@^J=>+7A qA3d./7A we!fڱ37A< oY=7A&R?7A Ĕ=rD7A(g;4K7A`@ew0'`7A[k~f81h7Aj&Zmt7A`@1Zy7AR 7A4hޞ7A jZ+7AguJn^7ALtSg7A{KgxⳠ7Ab/Qw1Ǡ7A&8Р7A}w\lݠ7A[I'7A 7A DH{67A '{7A l\VJ$7A9%,7Ah27Ama=7A-߸*I7A@XYo sh7A@'^y7A y0;x7AףwV<敢7A7 Zť7A=aJ7A`r't.A7A`\ocyQע7Ac%bao7AиRP7A P|긅7A ^E5 7A 䲀% '7Au` 77A Oh' >R7AiR]XV7AwTc7A@ <.k7AxbJp7A`1iTx7A@ڰFG7ADg} L7A:e"Iߚ7A1D7AfV+7A pw񆹣7A|jCSԃ£7A}}Ụ7A ce4ԣ7AjU9E٣7A`oL7A 7V7A ެ,Y7A+7Au7A@6N"2TX7A`97A`^͊H$7A mSpu617AGf u}97A WT&P7A[xW7A 1 Ա`7Alve7A^[Gk7Ac*!+s7A@0+$m{7A-ק7Ab6Ə7A`//|^"7Aj tS}O!7AR%S^ᡤ7A|ϰ7A`3VBˮ7A@3n"7A騳e7A eJHp5iŤ7AmT,Lɤ7AC/CϤ7A'^ߧդ7A!ڤ7A#L1&7A#<G7A@m EY7A'4d7Ai Y57A+T7AM,ۦ7A|='7A{y|"7A`BM(7A@X%Tc07A-`~6A7ADJ7A R kP7Ań R:4W7Ah^\7A 5crla7A2:*im7A:5w7A`uDxH:7AgK-7A[_wޗ7A R력7Ab8E7A r'鶥7AWT7AvöYĥ7Aa!lg˥7A{ZХ7Adl8ۥ7A )ߥ7Aɒ|c7A>f7A]8x7A3,è57Aî# 7AqZ7Ay,y:;!7A^; X)7A`qCXn17A 2&b297A3coRDA7Au;.7!nF7AUY J7A`#L)WN7AU7At[7Agi =b7Aԋ>o6Jk7A-,iir7AkPbsTu7Ao,tI}7A`_[p,A7A@iL43х7A!k&䗙7A<-̐7A/zD坖7A sR7AZ]7ADI_\_+7AC@V7A5 H%»ﶦ7ADPN#g7A@RWHĦ7AVZh)ͦ7A&mJ֦7AL\ئ7A  L7A`f7AMvoN7A@Z>܉7A]>7A +|NF;7ASv\7A|_| -$7A ?*7A`:=2*17A Y€y=7A p|㗕E7AL7A@Er/T7A+~q \7A F_~d7A`ƿ$m7A@mtAu7Aਥuh|7AOh־恪7A]%!ߛ7AqY `7A ::Ͻӛ7A锽W:NH7AqoEٱaϨ7A %!7A%n`/ﺪ7A X]7AeU]Ȫ7Aͩӻ{şѪ7A wwת7A[5<ߪ7A @]@7A`3)^7A@7AHnj 7A`Λ-v7A }k?ݫ*"7A`ؔ_u.7A&P997A-OHJջB7Ar[P7AG [E]7A`4rxqf7A`N8$Dr7A`U65^K{7A 8M6Ó 7A2o7A@]7-7A@~?7AETk7A v/`7A}UPϊī7A q*NJ̫7Adի7A`in̴ݫ7A`Wf65x7A ZM{`7A lMcɠo7A@hELҙ7AGγ!7A@w|7A2}O(7A96;@27A5A -,<7ASfzs*F7A sn uO7A@ힲyd\7AN Yl/ f7ATASLpZp7A ~/ |7A$7A~'ͱ$A7A@ĩ7AP k7A?'mM7A IHD7A yEqC7Aj}\g$IҬ7A`ҹT&۬7Ak+7A@Lh-7A TH K7AWS,,77AAT7Aۢۯ 7A`Pwǰ[E'7AHG07A$vJS7A} x3<_7A;pڮgWv7Aŀ׎3Y7A5^ᄆ7A`̝Z_]g䐭7A@iR'c27ARD{/ μ7AT7A@vȂɭ7AiYo~ԭ7A`!oU7A@bx7A*Ī7A=:)% 7A$Y-7A.?o&67A6mN2B7A@ 8vMya7A%݃;n7A༫1y7A R z 7A bU7A (!hҵ7ATg î7A+YhJ'oծ7AnP`7A`yf6[7A^v>m87A+<277A2ܩ+407A{V jm7A j -‹l{7A(뽨K7Aoy}7AOn "[)į7AXʽӯ7A p .7AH#߱7A sW&jis7A^2?Q\q7A!J7A#e.7A S ŅQC7AqdiXU7A`1,m>a7A~Wq7A@q4S7A> %9M7AV5~7A w%9}ذ7A;ͤx7A\] "7A5Æc7A RNn 7A@+>18=Q97A`},/"pSs)7ABzΣTtCy`7Av'?o1Ʊ7A@ lem97A@H 17A3tB7A Z"x.&mmJQv7A@vږ (7A.y*I %7A1a-a7A`0+ǚc7A@GRqǦy۶7A@iG 7A`2:e7A@ΔK7AǠ\ҷ7AY"7Ae:+P@7AP̈$V o7A 6emӇ C͸7AԧxŅ{7Apn<>7A%N&7A|a_"7A'~׏7Aw{IUi7Auy@'H7Aa^Pwʡ%7A5u1 7A@M2xs A07Aڐ.re͂7A@6pd=7A`n 7A rlC,<7A~vkno7A [ j237Athin$׽7AgX 87A'Elfom"7A@e2vL7A@2Kd ȍ7A`7CbZ婾7A¢zax7A:i`16M޾7A`4N_ 77A`kc_=˜7AD0^>&!7A@۲],77AҼ4]B F7A`<\^rO7A`bJ[\5Ek7A+Rq[KEv7A4d[ќ7A F[Zw 7A2_Yp[7Ac;}Yc%. 7A*$ )Yb¿7A ^ 'XǢп7A qWWфb7ACW Ey7AVD7AyU;$7Aa(T+Ņ77Ae2TwB7AjS`G6M7A`hSm7A)cjRl[y7AqR7A rQ`$1A7AgaP/A7A mjP\pK7Am;PVV7A@C̤Oϴ7AϣK?7A5.GL7Ahۜ|#Z7A,Rlz7A@\T>7AL7A@k/b ZE7A*vP 7Aoj 7A@ \')27A@]d7A7?Rl7ASPӪ.e7A-kr '7A@p71KiH7AiM&ٶ7A~L+D7A&r>7A@z,E7Ag37A {D*7A9S8,7A@R.>_^7Ai[p2ip7AKt9|p 7A@;ǒ7A1m27A@ X%/7A? "WQ7A G_[7Azj7A85Oi7Aen]moq77A@SE ¿7ATGse7A\0:h7AbT7A5G)5nh7A y~EPlm7Ao7A?@S7A4g, u]7A@@'%7A@Pt"7A@Dػ|k ^7ANyE57A@N =kc7A9p7AK#n"5V7A/f-@y7A@9nǶ{7AZrgIKo7ANo7^7AAѩ4~p7A5.2b7A@fL7AN`U_i^7A@(pȶ7Ait =7A8/Ɓ7AكUKݲV7Ar57AMJ8g7ÅM'7AyE_7Atq$7A ~{7A@QQdm{G[7A@@u7A-.oȘaZ7AUvbkI.7A@I%hQC7Aܝ_|c~P%7A@)i`U7A$\fWyB7AOYn7ASqWg8AaYV&48A'TU졢8AWAS /8AwR}M8A 8Q疑V8AT]PsИrF8AtMPN8AiiO󯌷8A@IK;O>*]8A\O!u8Aq8On9ˤiD8A.58A@oCF0GK58AQ- B8AO(ni]8AcB#LE1>8A@ӓq8A:X8A"zN8AnOvCq8A@7  l58A=8A@En(8A>/ 8A@=@郙V8A@W V8A@/IOx8A@қq]b`!8AZUj58AQz18Ar[ N8At:8A]2ȑw8A@aj-1F8A9wJBQ8APKwy 8A@ֿKc!8A@cED=B"8Av-M"8A+)ILK#8Ah]# TU#8A A$k$8A,b2]+o$8Aho+G$8A@dxmx5%8AYj)0ٵ%8AokR&8ABn/}}&8A7ΐ {J'8A=-D rb6'8A@los ~C[9(8AJP|GB(8A@7 {~jT)8A*[{)B)8A |Nm*8At+~r*8A,nd+8A5E#Ӣo+8A@U pj^v+8AO (t+8A#,GdS,8A}q&v,8A@ر.Rv%-8AbNPrBl-8A@y:ώW-8A@*ZYRʔ .8AƯ0ЖOrc.8A -%r.8A@ˏb}.8A@RhHqv./8A W Ul/8A@ o/8A+ć 0j/8AfN08A=zw8V08A;FY5,cnd08A-nm08A5+%s18A04818A@z+[28A`^A `#38ApXfla38AmY-v'48AV= t}48A@,R58A@,oZH 58AL-4+68AXi68A㨷IB;S78A@#@W78Aދ88A@./STg98AzeW:8A4R<;;8A@[oJgQ1<8A@q幔<8AƹiBd=8Aߛ3>?8A@'QYI?8AG*7Rh>@8A@{?=?A8A>A8A$]B8A~!1C8Atz eC8A@KD8A0]`E8A@5@,F8A@JĘuF8A}'cF8A@z=R/NF8A hwG8A@LG8AE A,+G8AǙbn4H8A@~̗q~H8A;PD?W8H8Aa}H8Ao tkI8Adh2[I8AdM{I8A/KI8A@@'\}J8A/O'NJ8AXz9J8A@ YYkK8AXiK8A1.Dw L8A8bx76L8A\yUqnM8AӳfL9N8A?]xON8A@xYwħO8A h3jGO8A@A@|{O8A@KO8A@aT8A^8A@+CcĆ^8AMu٤r^8Ap=t2_8AYߥx,|_8A,pE!_8A}l~-W1`8A@͔=`8A8a `8AOЪ%a8A|9ma8Aэya8At*:, b8A .~uYb8AϲkeTb8A9I8b8AtmԈBc8A|o@#լc8A펼cqJc8A@%eNN·,d8AfM\bpd8AAD4d8A//d8A@w'he8A@d jHe8A@X+ʨe8A/o*e8A2XCAx=e8AG&)f8ARNXf8Alf8ATɉf8AඟZMg8AS">9g8A@+n}g8A@۔)g8Aڃ>9+-g8Atʕ #h8A!8ݲGch8A"i.˥nh8A@fYh8A%[`T(i8AmF"fi8A@lA3Zi8A2{/#9j8Aȅj8AOL7j8A@ek8AέOφak8A|}2gk8A@^^Gk8A@U"nl8AҌIm[l8A>gl8Aħ4yl8A&+f>)m8A/W8Hzm8AdhYm8A0 9n8A.ٯ?d-n8A@Jf8X#Un8A5ñe|n8A #Mn8AzUn8A@jJn8AT?o8A@c:粸?o8Aԛ.[fo8A~jc8$o8A@/8Co8Abao8A@cg o8AE9zy؂u,p8A?Vun;B]p8A0U(| !јp8A,]@{tp8AMLr}\-q8AWVq8AgU/q8A N25r8AT=@3r8AeMޅ0s8A@_{ps8A@Ae <:t8A2t8A@?gzNBu8A@y.u8A@yػoGv8ASrgcv8Aָh^ORw8A@^Dnww8A C!Tx8A@۩Yx8A@dV^dy8A?\+^uy8AѷB|y8A@OBmz8A#H5F\z8Az8AkB{8A@-;+>{8AE}U}{8AndyR{8A/Kc4{8AbN)A)|8AIv|8A@㠔GYX|8A@m=_|8Ac 0.}8A@mty&:59}8A[l] g7ArgCwaƹg7A\AHwPXh7A_$m=`m7A k(2_n7A#N vKn7A@B U.nl7A`ő lHk7A L )ȴjA7A 6:_s,@7A`R!!hM/.?7A'e-K4UW:7A@o/q"(:7A 9$WB7A@|)ȴjA7A 6: ~n#7A@r#7A`FW@ߎ7AsxŜq7An!7Aza +7Ar֚$ 7A`a 7A q$7A^`w ~n#7A@r&xq)5AS)yW x66AKI܂5A@}5A/5-5A`~[LB5A\hPk5A@-ɨufZ5AYXXK5A@4+#5A{ި 5Aग¦'Ky35A ).J5A@u pFX5A`y|zd 5A` PX5AlG *5A[!ðQY5A@ݒ9.Y5A`!9:55AŤit5Ap"B r45AWն^`x5Aƍڷ7#5A~@5A`ە9oʭK%5A 2.Jvvf]5A816}Q]5A:+s5A@-(&m 5AV)E5A[Li D5A`l5u5A&T5AaG5AL[5A P"N5AW$Q/dt5ATtwQŚ5A`mXV5Am(`f5A`AS5AS5Ay^5A`6g.5AYVh]5A@[iSwgf5A`2l5A`-V%6p5A ciY{5Au:5A@BO+5A$0_9<5A`w0 5A"j5AE^T'O5A` :8q5AK՜ 5Au3:5A`=55[5A`u"1LCw5A04if5A Xò5AH}5A ez(5AD|sqs<5A@ M5AH"[([5AZC$.*oe5A`kN&Őw5A )+~5A;8-R5A8/mMg5A`ZE35A@!xC7^1$5Aqor8s蔁5A 9%ǟ5AoE :5A:5A>1;к5A`~];LV5AK |I<5A`c+<p5A9=(5A`>M5AGb>A)95A`'[?r5A͵@ υ5A@^JA5A@+Aأ5A"XBV'ƅ5ALB챭D5A єQCN5A`sCq%S5A"Du\5A ID5ALErH5A9?EV5Aw`dFݼ5A-:FDQu5A ՌGi褘5A݅GG5AHYH+8H5A-H5i5AnyKI|kQ5A`r(I++5A`b?nJ5AvJ /W5A%Kn.X5A5p&L5l5ALh"5At%M5A`MYA 5A=NA5A MṈ5A`O_Bc5A@rOV8;5A`:S%u5A@ Sз\5A}^'Td5A T$ 5An9bPU55A UU!5A`VXV7&5AV105A&xWΞ/=5A yWm2zE5A0XW M5AH=XUk(T5AUXl2W5A@R7XA:\5A 3{X$_5Aub Yo?a5AYLd5A`d=Y¾i5A`;~|Y6$u5A CY^}5A A~'Z;~5A@,ZV&ׇ5A`sZR4k5A ,mѩZKȜ5A` [Eާ5A e[;5ASWX[Q¼5A`>X\:5Aug\p5A9]v5A`KO]ҕ5A6]{5A@^ 5A u:_4hE5A)n_è5A_!5A8_T'.5A,Yq`[L55Aд`X$>5AfaG5Aya1D3W5A §w5A@E1WI5A\{765A ),h.>5A~{5A؎y5AvZj6A`>hOK%V-%6A&yj6AҶ#=[6AM]6Ax0n6A@{W 6As 6AN24 6A ̬˳R 6A`;kM3 6A@F 6A 9_6A@>}EP6AFzh6A0/[F6AH.qa֫6A`>&@' +6A`ݼn6A`K2c6A[32zO6A7~*˘6A )6A@S6A`Ž x6ARh.6A :A[6A@LH=6A#;%L۝6ASzjv6AVH2za6A HG‚6AoSm{" 6A@ Ec6A81Ol6A@ѼձuʂL6Av2П)6A@v8{6Aft u=:B6Ag6A'if6A\O^na6A 26Al8]6A{͍a6A*Rh:k6Ai'6AsIl6A F@JC,6Av}Uaj6A`Gjn@ 6A@Wآ D 6Ah0XV !6A$8-!6A`X)"6A`Lr"6A@C. =5#6AdҲ$6A@cq\"l%6A`-Euڗ&6A` nd'6AZ(6A@& Y\a(6A@I!sA)6A@;iGV*6A 3%$+6AҨ)xS9+6A@\ v,6A`&L[-6A$+nh-6A YaM.6Ao1z9.6A'$C!B/6A`f/^/6A` _&S06AXnV06Ab KB16A?16A|ƫ26Ak ƹqm=26AysA=36Ap _66AYL|66A`4g+76Au6 `76A-/p=96A  96AF:6AR  ;6A `Y_0oz=6A@{%'"B'+=6A`"{>6AX#Cb>6A`A>@$)?6AQb$c|B@6A]% ʖC@6A@;&p A6A Ƶ*&.qqMB6Aॴus&ޅ C6A&6xC6A`^2߄%'aAD6A@]H$;0E6Avn&#/*MF6A`~ ){G6Aq@MvG6A<(okmH6A:F@/qK6Ag$ōL6A!b.4M6A챌6xN6Aܟ F6eO6A\j u}_P6Aqu[.Q6AuBΫ$R6A5`RӗJ$R6A NaʻS6A`$ET6A/ qT6A(3JW$T6A`i HGT6Az:UU6A`~uF?߄U6A`} V6A+jV6A090V6Ay&bW6A<+ok]W6A`lέ}W6AJmqX6A;џp{iX6AvSїX6A5Э-T/Y6A MVa++]Y6A@$,Z6AlTPZ6A`#1垀Z6A[ :Z [6A!T}0q[6A]#Ne[6A 'Y(p(\6A`kq! \6A#)RM^6At#w+^6A`߼օj_6A`XP57`6Av-n`6Aa`6A-a6A|:8Rʹb6A/Cos1c6A1c6AK0)#d6A`=Sttd6A0n d6A<#d6A H7o@e6Ala?@?]e6AVC]qe6AjS2ve6A&0*Qqe6A`vHSe6Aœ7b6A`1R(8kb6A@܉$ ːb6AֵT"b6ARS`Ob6AGIb6A@lhb6AlxBZGCc6A@w!m c6A@}|VX#c6A" bCd6A-% 4d6A ^[G ,Ce6Ayq_ܯfe6A`  (e6A<*ū)f6AC;5JPf6Aqf6AV7Hg6Aƭ>2_h6AQ/qh6A-.J i6AYb^"%i6A`8,k6A w x:'&l6Aq\"m6A`X΄an6A e9ycn6A.rIo6Acgo6A@_$[t/6Tp6A#}^1p6A``y.fɸq6A`diSSD3Zr6A/yTCr6A>s6Am+߰61t6A}WXG;t6A Ntiu6A|(v6ALZpw6A8gvSy6AO˭-ay6AGtI*kz6ADjk!z6A}#X)x`O{6Au7C1N{6A?$%=.|6A@> ޻VE|6A兞:%}6A"ǻ!e}f}6A`¶KEgb_~6A[&}YuX~6A=T.6Af~b6A@WJв/n6A{i#J!6AೄOgiM6A$\n6Ag}8F6A@ 9!υ6A`e Y@6A6cx^6A`R] 6A`;z4 6Ah,MT6s6A d_:ԇ 6A@Lq0Q6A?Ҵ^ W6A>,u ՗6AK|T 6AyfdJx6Aћ@G.Ҍ6A@*<0r6A`\/joq6A`k;ּOqe=76A  oa6Aȳuw6A@6]%bv~6A`g \6AcNr&]$6Aઁڴ0O뚦6AOW6A N)ZxA6AQѷ6A`)pg?R=6A`RG.ˠŦ6A@&  ̦6A@mDpӦ6A`Jk*#ۦ6A|qw+6A UV6AEt6Avږ%6A\ .6A 6AO.W1!6ACruF*)6A|12ݪ/6A@ĪH66Ai! >6AZ E6A*xnS6ACQFZ6A *5 a6A > kh6A gyqo6A3'떁w6A0T}6AacpQ6A6A`˺zt7!p6A 6A`ީnD6A~M\L6A@H>,T6AEZc,{Z6A`v=?ĥa6A p=h6A;To6AܧKưw6ALj6A %,,y;6A ^YQ6A.ݾZ6A"K 76AE(Z c8*6AvQ Hݯ6A ]@6A`iZY6A@^I_Ũ6A!j̨6AuX~Ө6AXg'٨6AɁ ɝ6A"B6A" ڼ6A)S 6A} '0c6Aig/Rd?6Au-E* 6A`ļ5"u^6A43[ 6A <(6A@S.8l/6A1t@4|O76A`>Fk}=6A`IFCnE6A/'L2K6A`PM!>S6A-KY6A@xtSg*a6A^>Yh6AYzo6A@v8_]8/w6A]v9}6Aೀ,^N6A@c| 6A=lk0m6A@ LjC(6A`r2A6A hp G6ATxQ6Avf6A`կ=6A`,ĩ6Aֺ 9̩6A[?` ҩ6AXک6A`GT'6Aq<W,w6A^,6A ̑L#I6A$^#6A p 6A`u46Ad̏6APLPB!6A /U(6A#dza/6Aj56A)zA=6A`C6AAK59SS6A ujZ6A%֧z`6A:-h6Alznșn6A5Lv6A`5ٸ|6ALZfk6A#>'6Ajoڒ6A4F6A)3x6A`K 6A@7 6AV Ե6A@B%76A(3.1ê6AzA˪6ADaҪ6A@$R٪6A*"TB<6A(3616A 'q61h [6A |9:6A@>F?Уz6A@h?+- 6AEYK6A`M \6A߷Sp\ 6A7Tl'6AZPw.6AHb,}56A nW`\KQC6Ap |K6A'vppQ6AP9wC#Y6Aނ}O_6AnJLg6A4$8Nn6A86AhD6A t% A>ë6A@i qNʫ6AOCInѫ6AD/g׫6A@_!߫6AE:n I6A:&6A X`6AD6A`88 6A"b CF6A@l+ܟ6AXrTe6A Ȁ!?,6A@)o46A.F:6A1uA6AcAzN6A ;qR9V6A:X^c6Auhx>j6A@-xPwq6A "*y6Aۆ26AiePU6A3=6AͷzW6A@f}k'ϣ6AVHF6A4 rD)6A>X,ͬ6AsяԬ6A(K۬6A@qj6Aןu6A@*@ )6A\ =6A4wr 6AɣJN6A#3~r6A ).(6A$:v1M06A1876A@x@)>6A`uBF(E6A`F0L6A1LgȫS6AT NZ6A@Rq}A6A@YJL6QH6A@?|ʫ6Aa$@66Adf 6A`{076A!!6A2>& wLj(6Ay\06A@`|Z76A/=6AFL6A%6 S6Aly˜(8a6A`ȧri6A٪ Qsp6AR7w6A@U1~6AQUǏ96AwM6A46A@>6Abό?G6A,eԳ6A V7̮6A@iҮ6Az^%6AGt 96Ak6A 7mk@ 6AYܞi@"6A_L!>6A`\x6AT/Y(6A@KP@/6A;OGG66A m!GOr=6AEe;TD6A =< -"L6A'K:6S6A0{Z6A.x]a6A %h6AO=%'lKBv6A` 1]}6A0@͋6AT16A`&M6A`6ALNٮ6Ayc><6A` tү6A)ҵDٯ6AK+; 6AE}H6A橏U7 6AVjp6A?O|C 6A̮]z@ 6A@U]o,&6AV%V P6A $whW6A+ ss\6A@. Uc6A Jk6A(JYr6Am5x6A\{6Ả񬆰6Avxj6A`bTv$6A@=DC6A L6Az6A)66A |⿰6AOcwnŰ6A`hN԰6A۰6A@w٤,>6A-6AM6A80&)U\6A.MUqb6A`@؎$j6A`Frq6A`iᰒ{3w6A <C6A`<Dn6Ae\xƍ6A@[6A }tE6A}ajS6AQb+[6A7,1pa6A`,s9#h6A`svI@}\v6AKZp~6A@}_KO˄6Ahh֋6ALxzCj6A A]$tzE6A`''O<6A@nk 6A0pD-Ȯ6A``ӵ6Ak˹;H6A aUwò6A`f09Vʲ6A RJKds Ҳ6A`36AOv6A D}_ڒ6A`mآ6A@ǧ^ 6AԯM^{6AoU]26Athz6A cwxUM[$6AWsŇ@6A#HLF6A4n[6A:@c`a6AXtv6A>e}6A{U Ã6A~,`6A`MVx`)6AXѮ=6AdeؚI6A@٪\6A ,YAh6A[f.2ó6Aֹ6Ae B6ATę"Ƴ6A-/Qγ6A`1dԳ6AIUDwR۳6A (\6A vAn06A.~6lB6A@И7LV6Aj4NY=6A W6Ay 6A0I;>36AHXD=6AOta6A*D+*6ABgV1g}06ABpv-76A3Q=6A`4]J6Aө R6A_Eh!X6A^d6Ae[.hQj6A@Wq6AlbZfw6AOu6AG{E6AjP^ִ6A`;< ܴ6A`!S6AP?_6AO^t 6AmU6A@sQ6A/L 6Aφ:6A ߬(6A Bc6A9_z%6Ay+6A tM+16A`J76A@>6Af#6#TpC6A CY,I6AFa`8IяO6AьR%9hKU6A@.5wD?[6A I.wja6AVvf6At l6A`FyGEs6A-"Fx6Aʕ5l~6A#s Z2a؃6AvPt6A3G6AQ*;F6AWr榵6A-gص6Az'26A@"6A?@|D6AeLސI6AA ?S6A@ҍX6A]*pQ]6AɌ,8*b6A@[3pg6A`ch,m6A࿼aJq6A@+&#ew6AZDŠ6A0 ~JP6Aknq!\6A֝L䔶6A|K}%66Ap)fŝ6A %C$6Ajڜ6A3cB%6A-86Ay@6A0a<@}6Am@m`6A"IsNƶ6Ab4N˶6AC}=ܶ6A !!<'6A eU>UZ6A^4U6AaDh6A6Z!6AW{vI\ 6A@Կ4\&6A@u776AIyt<6A`ZfXM6Ap8BS6A o |ud6A  ^i6A z3Xu6A\NHz6A3c6A -M^d6Avjmۜ6A^c]t\G6AHK.6ATg6A@*6AK5m6(޹6AmWR6A@ v낡*6A` 6A5ɷ<]J;6AO| @Ŀ6A`\6A@?I 8,n?6A@@T>6F6A 2yOL1o6A`Wd2^?qk6A4|pz66A&NJ\;_&6A ] x66A&D 66A'$6A`,aDobIz6A@H]')>6A?|Lf6A4|ȣ|xP6A`Y3! A6AU2O6AGI̫6A`%a6A=2\t6APge6AрҞ6A`@@qUl6AP< 36AxJj=6Al8 K6AcM p%'6A@va$6A[[ W6A eҽ6A@)6Aa9tqЋ6A@֢M6A=tw7[S6A s49:~/U6A@mdMO"FT6AS)yWٯO6AFxG6AS> O> o>6A2\9bu.<6A@(@,&$46A ]$)16Ag@*W1ZX.6A ͊o+(*6AunUd:&6A*!6A Vy`޺{6A@WN 6A@{7H_6Ax>6Aгߊۄg6A`2KB6A`VQh6A*ur6A೽ƣw~K6A%U싅6A@>M6A ņWb S 6A?MS` 6A ksO6A 76AT6ACW|V)6AM#Y5Ap3]5A`;H9f(5AU//5A -[ůf5AOTR5A |SE)`5A\1+5A }l;5A@`HюI5AI<%b5AYkVQoS5A ZmuxS5Ayع$Qz8]5Av fTK5A@+ N 5Aɹ j5A@80"x5A u+5An֋xN>5A ;l5A@"q)5A !EI܂5A@}@W5A`bTg5A/Tg5A`b]K)5A ֩W5A/ή -5A CաTg5A`b pI9d5A\ T?u5An]T q[s5A\Ǥ4m5A5wJwf5A r-d5A‰#I9d5A'kuL~de5A?sbXf5An]T%\t5A`^& T?u5A8Qt5AOoq[s5A\ ΩF5A@}t|;95AG] ΩF5A_q5A nӯU z5At)^D5Ao@6>5A@.(\t5A`f3,5A lU,)5Aޤ5A@堣YU'65A 0"w;/5Aɮvj)5A@@&5A(=]5At $Kr*5A~ 5A uh~U5A 90 O5k6A@a$iz6Ap -(b6A&=:dGe6p6A >avLd 96AL#rAM6AZmhæ6A໢hz~Z6A@:_}D6AD[{86AQQ$6A_RD?~+6AP426A@H`Fh96A`XeDN A6A Ԯ:kNgpH6A@8氢N6A`{1i,U6A 'h]6A`MS%}0k6AJ]}r6A[b1y6A@:=6AM/k?6A<ࣕ6Aك{6AԾpF6AҾVo6A 9*6A%s6AJJp6A8Okm6A{6A{&yҖ6A@eOh*1 6A@hZG6A I\H$6AsRbA"6A[KKM>6A=$/āYE6A`=S`#o6A@ٽmv6AǽcT4}6A`S~콽q؋6A`%~3'6A[D6A[RƠ6A暅6Akb~ 6A@lwѴ6A c`/ѻ6A`K|Y"6A`O|+6AU>r<6A4Z6A*#l6A C5s6AIv6A1tL6A-ea6A-eټcW&6A/ǼL^ ;6Aڪ;EH6A|T8z#6A@[vB*6A E)116AM6A{ w76AxrB\6A@6ZG6AUg#bJEel6A`6Aw6A@P(a!6A S |'6A :i,6A@6ײPT36A-J( @6A 胲[.F6AlbYёL6AIR6A=((FX6A,k^6A>dd6A@OرܛMk6A`![r܃p6AMCoJ|6A`^{C6AodEPO6Av6A`ZN16A9˰CU6A@. 6A rfpn6A@/Z6Asy֯w6A #ȿ96A`=]36Aۑ>d6A+1a%6A a 6AUŮK9tW 6A`+=GA6Adf=$6A"*6A!ܒ<6A`ٙЀpA6A3`bE6 N6Aഽ BR6ALH[g3_6A qad6A@'lp6A`5X[ u6A)} 2Aԁ6A`S0t}96AѫR#׌6Aw!R6An5P6ASEH-6A"J?S6A{N〮6A`z`DagV6A`ޭ{6A!$m)Y6A@s~6AR֥6AH?$4K(6Az ˯6A ЀP6A aĩ;k6Asݵx6A`S[H}U6A@Z\ꠋ6A)/6e6A@UlAɎ6AզMd6AG'kƨS6AڬPop6A{s]Bk6A۩`̃6A ڲ)M6A?L(Ь6AIx|)r6A`>a`xX6A(I6A "$J(6A`ҁ[6AZ,qS6A`VY%P6Ab̐6A`<+;6A@!A6A`]!q6A3a_;u6AX$6A`,aDD 66A' x66A&l*W6A S@Gy 6D+86AJ7W(%6A྘)4Y8(6AT -`Ȣ&6A xIi%6A@H9:v%6AF)'6A` 9R)6ACNKT326A q34g46AHy(o66A/珤/ޖz66Adl":Ez46A5rP`N46A`,t636A@S`CzOidY46A #2_ t36AoY㢛/6AV>ܘ;$I.6Arr/X}06A־SV/6AGPMg-6AV@P",6A""doIU+6A@:h"])6Amu`>{(6A c '6A?魆mY )6A }t>)6Aa}VB(6A`ԧ)6A@"he*Yk*6AN!?BwP.6AR@u/6Ae+\B8-6AxqlwG06A#$Bv06AVZ L;,6A@bBB p*6A n .v%*6A@kYJ g[0<(6A`E eԥ&6AXD ;tR%6A`q)! o2&6A,yF( Ĵ?K+6A+% rߴe-6A u\ ~ ׵/6Aӆ 26A`]{ 6D+86A@j ay16A A`7 ׊,6A1(? &6A@ ,^@ rF #6AѠxI pg!6AtZm E: 6Aj~ܒs b  6A Q>t 1#6A ,'k ]Q6A S@Gy l*W6A@9w Mte6AM̓i UX(w6A@TTR^ 96AmgL pћ6A/ Q{ 6Al~1" C6U^"6A4< S2ڲ#6A I#6A@[1 t!1%6A@J JxC #6A n>u}#6A0 Mh[xw%6A cN7T%6A 2p3넔#6A ǧi%6AxCx,I%6AErDje$6A#!g,#6A`aȑ@WhqH/#6AcD"6A z"6A0wr)AQ 6AX,6A{kK#6Aac /#6AJ7(%6A྘)|p5A`?iw5A`٬V~5A`?i|p5ArDƟ5Ai~J5A3ƐOy5A 뺥5A9f5AĖgw5A`٬J5Aww5A `5A cJ5A r5A,3ey5A V~5A`?iP5Ay9/35A jKrPN 5Ay95A@sͮL5Ai5-5A jK/35A /K65AV1rPN 5Ay9D7y5Aؘ r4W5ALF b5A {x Ьߴ5A{@iq mך5A Nx)R 6t5A9'Z 5ALF m!5A^ {wX5AUiY r4W5A`Rs Q~aE5A ;B5A s U \5A`ߠp )=5AQQv !,L5A * %DP5Alr u`5AY"^ -C E5A>ql %Ar5A@ Ӷ+5A\[ UHM5Ax( +VI5A:s ˆ'[5Aؘ F(5AC P5A i;5A D7y5A`G m#5A /B ,KC5A 1蛟 b5A {x `SBP8A HŸVeT8AJzE^ SBP8A HŸM?`:Q8A ^~8ER8AF7pk%R8A&^d~ "T8AJzE^VeT8A`/!e7T8A`㷂RLQVS8A|M,^SBP8A HŸxmC@8Ah)_3xK8A rYJ8A{pFK8At_3xK8A8InJ8A3vE8As#mFtȂA8Ah)mC@8AmUU"}™@8A`t4 AϺ}E8AFj nG8AqyK>H8A L rYJ8APuY95A@qw| hjl5A` 'h5i5AZ N[Ļ5A…v) ׻5A`-pu; :E5AƃuI ̃Gɴ5A`a C = 5A`kœ: f-.5A\fL" F0|5A~ ( 5A0U Knu5A io F.i5A  Piı5A@*p9 25Ail2M @Ӣ#5A@gO{ 5A@qw| uY95AMes \5A9M# 듐%5A[FN ̇5A`XZG p 75A j t5A`S ⥲5Af /5A.Z {%5A`J 5Aq Tcg5A` !:qܺ5A_Xe }[5A yȻ5A`  hjl5Ah* -5A`Ķ5 ӊ5A, ;5AZ" Wj5A@ttW z,۵5At z5A$: ~5A ?< P$9'5A *5Q h5i5AZ HN[Ļ5A@4+2 VMZ5A!N &LF5Arn VMZ5A`~ + ͨ = 5A`".7A zf OZ6A`R| -6A@ĴZ6A@qe=vS6A# 75 6A@Ĵb,Zh6A fG6Ar:R ;'6A '# *6A=Z ¬"g6A -6A@=u 6A@hQD, K Xץ6A`R| vzk6Amz O6ASL Z6A@qeH}[XU5A&jF fg`5Af> }[XU5A ,{# ߩJu5Af> $r쫤5A`tJ" fg`5Aɍ> N=k5A&jF }[XU5A ,{# J8A˲8/jE8A /0+]J58A /8A/jE8As,H8AAE 悭8A1xDZO;8A`RPȤ8AkhGɍÙ8A,ݫ(G8Amo8A۬98A˲8'ʠ8AI5x8A@J1J8Aܢ ~;8A`)E2ۦ-B?8At50Lz8AcL9KП8A`Y*<|u8A`Vp1X>8A c D@ۙ8Ax`Fd~8A~+ְFGҚ8AE<,(Vc8AӺ;@sƎ8A xmj8Axr3'8AHEhMJL8Aa8A e*l•8A`.YL8A}u8A~Ndy9=8Aܻ<8A@ú618A ~S'8AS]J58A /#Űh8A@&G8A .8A`-8A:0#Űh8A@&(yD5A fG >g!P5A` "hV5A@ҜS 2#$a5A` nVw5A i $\5Au  I5A@= #Q5AU.) 6q 5A@qq}*1 T5A}+= U5AG+T v 65A@q՚b ũ5A N =55APxh %|u[5Aޑ >g!P5A7dA q5A GW ^È5A fG B5A`F #F5A D:6 '85A@^ `]\+25A Z2)5A`7C- X5Aכ [5A Qɀ F%5Aփ &ϓ5AI i \r5A =M P !5AlV o<5A_u9 Ut5A` !H, A5A m]8 yD5Aͼ S5A`_ c55A@# hV5A@ҜS paKre6AM+ r6Aԙ  kp6AM+  g6A`cr :'f6Am_ aKre6A ͺU"k6A 5Atޙ 6-j5A` >lx5Am 6, 5A_ Nޘ5Ag 0 V5A0B KX5A :tޜ75A@|: 3X5A^^i ^=5A K Rܝ5A` -蝟5A 5A ݑ=G #k5A@F D5Atޙ {5A@Oe tѨr5AA_ 5A U]35Axz p5A$ Y5A' RD_5A} aL>5A :j( (5ANq3 8+Ҩ5A`] 6 H5A ty- |95A@G5 %LHx5A.5 d5Ag. Z?5A1 eg5ADC y5A~ʇ) `5AwWS* 5jz5A`Cj> k5AfM xȓ5A@/y |_5AB{ z5A@q/Xk +5A"W g m5Av G *wn e5A :p `>[5AE" `^Q5A X+5A~ ԭ"5A` j5A` `c5A/4 #5Ax 5A m 5A@  h5A :> }5AYu ^_5A`!g )S5A 96j `c5A/4 y>D-7Au < qM7A@&0WLG7A`,da ޾,\7E7Ax T@7Au0 /^=?7AG x273?7A@gc &Ɵ=7A N@w V;7A`qlw Z77A= 4/7Ah!3{ ݵ.7AH y>D-7Au ӁP-7A@MD Mv-7A9:Z W/7A` ІD {$47Aa !-]67A@=λ m/87A C97A>yr K:7A)p ;CF:7A~+ ZD<7A` y&lD7A6_ =,FE7A{͂\ 8}F7AI |fG7A@ğ % ܥbG7AԳ$v+G7AK`jڀJ7A׌7An;W=7A=I%R{ћ:?7A^3A7A@&W%jA7AfZ/Y@7A o*DA7A@j:Q'C7A /GA]r(D7A1s9SFI7A`s9o6L7A(< qM7A>1wcJ7A kJ7A$6> \]II7A 5U WLG7A`,da Pebα5A;, ƙ45A` 2<5A@$! P%y5A;, ebα5A@ sx 5A r. nTE5A` ƙ45A 2<5A@$! !x~Sm6A``G` هu6A0h  kp6AM+ r6A0h myt6A@;; هu6A`$/3 $u6Ac? )(Jp6A``G` 8o6A@2-] &n6A0S ~Sm6A C zXRp6A3 op6A@ kp6AM+ "@>SwQ6ABc1 p46A@Z p46A` " L&6ABc1 >SwQ6A& u)6A@Z p46A` " #X 6A`eL #R!D6A 2 潊6AKe7 #R!D6A 9 ݸ6A@ A 486A`eL 6AhJ 6A@T7 HP6A 2 潊6AKe7 $(396ArC\K u6A& Bލ36A& "6A?| hA(6Az8 r6A@/ # Uh6A\i0 $n6Aw6 {f6A`Y~_ `Ǹ6AKi En6A,g -6A Ar EܑjͰ6AEy Cը6A`< u6A n6A& "Ѵ6A% m0J6A sϰ6A' zL6A%e6 -^iK6A%V !ī6A &7Z6A@. |¶6A` ƃ m9l6ArC\K `6A?Y u6A IpS Uc6A`> i^ћ6A4`&7 &\6Amf3 =Z6AE 8F5^6A6UID O7 O6Atz`< gOG6A`!hG% |R6A!! X6A`V笸( 396A# ?ts6Am@ e?6A_ 66A e o-/6A$ I]r6A  X6A`XK! Y/6A T_ XA16A`B hbxV6A Ug H䱫6A@qh %_6A _ w6A`LO $6A` ƉU6A@Y m6A@ (u6A"X Bݫ6Ao2 sT6A%n  Na6A@w %Q6AMv Ņ6A3Ze գ6A@S ~HBB 6A667> LW6A1 [ۃ6A9Χ+ mQL6A O- w6AeN`' 6D*ڡ6A9DT o,"c6A  6A`7מ ލ36A& %1 5AN Y'OK5AV X Y'OK5A vx e{5A yZn %5AWi z*6e5A 5䥾 7d5AN dux5Az Ӡj5A@~{ 1 5AS կ &"W5A`Z@ r5AE }B5A`ûIm EYaV5AxUh 95A`&Ej .5AV X o5AFa[ Y'OK5A vx &ROJ6Ao98Aܢ uJ8Aܢ x8A@J1'ʠ8AI598A˲8V?8A& 7T>AB8A`J@G8A`kSt~8A`bk իy8A@ x8Aj6Bb(w8AEʸKXکv8A!+=?u8AOrkn;u8A ~@0*gr8A@=ſl8A&y?ɞg8A`"_be8At_Sa8As}>\8AuiNZ8A/}(gElQ8AڂN8A 0r8}jM8A g4g^OJ8A 9tpI8A [`}G_ F8A]vC8AM. 3fB8A 4A#dg@8Ap䢳ЗK>8A`n hE<8A7$zL<8A綳R#88A`)58A*Vm)y 38A=[*@428A w"X&8A`<8AZ%LU(*8Abyly8AzyV-?X8Aaksy8A`-i8AːX8AGe}-l 8A@F= Uj 8A!R `8A@u^}r ~8>8A0Q 197A` Z ʈO7Aɜи U<7Awws +QUi7A ͅ ߞ 7A FLM ƫQ7A S M7Aj 7A3v dؓI7A M`7Ah (kq7A@U }f7AԌ" ȸ 7A`Î Cr7A`E 6P7AΡc à7A Sgw|}7AA z,{f7A` ZU7AwP* NEnFj7A @pC Ygl7A@xǐ^ O#7A2p vӶ7A @[~ɫ7A`BAlM Gӄ/7A- !ud7A R 7AO% Y'}7A ,y7A p2&ه~x7A +}x7AF/Pdo7A`usomTh7A[9$i7A .i+k[_7A>6`Q1ݏV7A̲%S7AݡQ(R7A δbhO7AhM7A@ԡrH7AوxG7AԔF7AP/>f_&lE7A^z>D7AJ,Mmv;D7A@  C7ANA /KgB7A^kEPA7Aj52A7ALl1웠A7AZ(@͌[>7AH<7A{H }І27A0>]Ysx'7AP-p`X)#7A:J`JA6!7A`+mhv;K/7APV=l 7ADa>jgAi27AÝ~7Ap!~7AAh 7APbey7AD#2؁ 6AP|AtY6A04c.S 16Aoo6A@9W{d6A@+ᶦv6AB{mē6A0gБ^O6Axv6A btF*Q6A,3Eg2)r~6A0]V6APx}p 6A`9}q@6Aہt__6Aˡqq(6AA^yl6A`؀yH+6AXkt`%x6ApgHVh}*tT6A:i}6A0Q=zo,6Ay9 6A0OxlsnH,6A@?Q0m_6AnS6Acx86ApKe{o6A0``XqE@6A0zL>^`a6Al)W6A V,/N6AIN)C6AzJhA6AIOuR6AMAs]6A`p@y@Uŷ6AH5t֥7A@(6T;S7A s2lO|7A/C3^ȼu7Av*1+Ȏ<7A`'o,O7Azu`^=7Apgy7A\sQS7A$i97A[F+b&[R7ApwTE 7AP- 4] 7ASLD3keW 7A0 (7Aɐ J7A2hV"F7A@gqEDk6A@2K 6A!ju6A쫐@Au6APO֨6AD$i6A܂|,쁹6A*!vT46A7Xn6A I Qd6A E&6A`p-%{F6A&E,rC6A`yM+8#6A_9P!=66A0a$6AА^p 956A0 4.GI6AH 1=6AP 5vuR)6A~Aܫį6A1=4:6Ae.Gr 6ApLdIi56A`:GO< # 6AQ<7[;6A,C46A0 (I;*6APzQGKJ6A`<3L-=6AАU??+jy6A?b0zڂ6A`u`E#6A-Z2gkE~6A`"r'tOJ6AЮDs]RM'b6A;Yf6APQ{Ⱦ66AkY~FX6A]jZv[=96A`OYl6AB3Oo.)6A`*c8FV6A`05b6A8&Q6A@5?w6A@_ q6A]lYܿ6A@$Gz`6A%E8t 6A@Z l6Ap"5W6A@yߘ6AV\ZsQ"6Ay̢6A0Vi{ʉ@BGT6AA[g6A#cV6A_~H6AL[`ึ7A`J'l)7Ak|S7A`ϱQsJ% 7A13]=c 7AIN;=7ACH,7A@~A;'7A8F7A{Q%}7A ]iL!7A`"$h%7A4@SuG-7AdhD@WU/7AܫNE37AY*e%67Ap?77A;׊:7A032'.FB7A@' %q(C7A$0vE7A!>9I7Au,bnK7A|܎?׼N7A@8nqu*4?R7Augx^^0"&R7A`GAZm^Y5P7A^[I&sW7A1 DfY7Ap;**\_7AबI_7Az I3`7A7AžHEsc7A /;ƒNc7Ar`Pd7A Rjdfe7A0=i'}nh7A(]4>/Aj7A(U.WOl7AP&=p zNo7A"9o7A@j5,Rp7A\*kλr7A+|5(KBJOs7AP>5$Eus7Ajt7APx_<ĉt7APn z7A2yCZ~7A*uP+37A`ƿ dWH7A#>67Aŕ̗7A/$\P7AvXPz7A YYfbgF7A` 0=GM3B7A`#*b1d7AtD Z^7A֡KW7A@s #BC7A0 /` L7ADM (ơ7Aq ۑ7A`~A'Z ڄЦ7A F {07AC&. =l7A@< {;F7A@ 53 %7A`Ԯ tՂ7A WpS7A`?g̯ >7A#* W57AC #,?37AT غ!h7A 傸j 7A`jN^ Rryq7A`sV 7.7Ad%I 7AޔFF ή'7As& {>+7A mA {7A ' 똧 7Aݍ *ՎK7AIP &<(7A@]sI18A@HDu28A`cM38AhKB48A@Q48APd[;98A`8jD<8A| XM q?8AW$JTBB8A aI! )7G8Ab[*m"J8A`xPfLPd8M8A@9(Pu'1,P8A=^/g. mU8A Ă| SsƼ^8A a826H`8AFu3f/c8A$M%qi8A\XR#Tq8AjJ7k}8A'.[O8Au bX>d`8A@t0^/ 8Av{S[8A@5R}-_8ARud̍8A`)J8Aܢ .Z8A3cLiB`\8A'Ny#^8A`?Sa8A@2z'ic8A@ pd+ld8A^#\ de8AIdS'y8B:W7A`h/Ԋ\7APT`H^7A`tC<43c7A"&o`y_7AAE ^7A[|.VA@YX7AිIX7AlWTs,V7AО2ص]8hS7AJ"Pz3T7A`_J}-P7A@vy҉ȴ>iQ7AZ!~mR7Alme,HQ7A@3nn "N7A[A;N7A [Oӊ-P7A@vy҉̜P7AP\(˯:s^L7A'mxO\L7A'NZeJ7A0Q8t(sF7A l(!foB7A`5(l A7A&U@/?7AN2&ou@7AzbfB7AFiC7Ap~DHE7A0\}u*F7A떹'~tf#G7AsZQ}?H7AZ-<iI7AҔ Q/I7A01Ye1/L7AZb/N7A` 5'$WoO7A(=O7AЩ̜P7AP\(˯/7n6ADaREeP6ApS;#襎6AݸIk~C6A较15q6APf\Fn In 6A`!6A5m-606A@7{66APBntɊ396A  VX6A4 H6A`T_9F6A0~61ST,U7A;!r 7A^|b7A]7&R7Aniw7Ap v|>$ 7AОjxFKV7AЋК<{:\L6A-wWB6Aؿwx86Ap g晽6ASf0E6A0IԤA .0S6ACZ6A{k %6A`wLc6AЪ2̽6A^냇9F6A+*8 r6AҚA06Alt,S6AP)*AԂ6A`ֶl&6A4d]4%a6AJRl[6Ahdjge6APa2g6A$ms6A`=C06A F/7n6ADaR'X!o6A!q CNRv6A"\ CNRv6Ay)з ?t6A!q rp6A= !o6AC-= p6A t lq6A"\ զr6A_F CNRv6Ay)з (XK?6A@^` zt{6A! D !6A@^` &s6A`6׺ K?6A` W vpא6A`?I e6A! D zt{6AL *͂g6Ax !6A@^` )*5A`OS *+\5A@ o +5A`OS &5A~ *5A 6u g$TȺ5AW G ML5A*^TD j]/j5A 01 2IQr5A-6 #5A@{ H sr5A,XL /̩5A@L@ d>o5A@q YvԊ5A.8 Bq!(5Ami> xtz5A@ Ԓ65A]^ ' @5A଑x 5AeJ *+\5A# :5A@?(