Merge branch 'master' of github.com:mapnik/mapnik into release/image_data_any

Conflicts:
	tests/python_tests/pgraster_test.py
This commit is contained in:
Dane Springmeyer 2015-01-27 15:19:12 -08:00
commit dfb6116786
29 changed files with 864 additions and 85 deletions

View file

@ -5,14 +5,28 @@ sudo: false
addons:
postgresql: "9.3"
matrix:
include:
- os: osx
compiler: clang
env: JOBS=6
- os: linux
compiler: clang
env: JOBS=6
- os: linux
compiler: gcc
env: JOBS=2
install:
- psql -U postgres -c 'create database template_postgis;' -U postgres
- psql -U postgres -c 'create extension postgis;' -d template_postgis -U postgres
- if [[ $(uname -s) == 'Linux' ]]; then psql -U postgres -c 'create database template_postgis;' -U postgres; psql -U postgres -c 'create extension postgis;' -d template_postgis -U postgres; fi;
- if [[ $(uname -s) == 'Darwin' ]]; then brew install bash; export PATH="$(brew --prefix)/bin":${PATH}; fi;
- echo `which bash`
script:
- source bootstrap.sh
- ./configure
- JOBS=6 make
- cat config.log
- make
- git clone --depth=1 https://github.com/mapbox/mapnik-test-data tests/data/mapnik-test-data
- make test
#- source localize.sh && make grind

View file

@ -2,9 +2,6 @@
#set -eu
# NOTE: requires at least bash >= 4.0
# brew install bash
: '
todo
@ -19,28 +16,6 @@ todo
- gdal shared lib?
'
declare -A DEPS
DEPS["freetype"]="2.5.4"
DEPS["harfbuzz"]="2cd5323"
DEPS["jpeg_turbo"]="1.4.0"
DEPS["libxml2"]="2.9.2"
DEPS["libpng"]="1.6.13"
DEPS["webp"]="0.4.2"
DEPS["icu"]="54.1"
DEPS["proj"]="4.8.0"
DEPS["libtiff"]="4.0.4beta"
DEPS["boost"]="1.57.0"
DEPS["boost_libsystem"]="1.57.0"
DEPS["boost_libthread"]="1.57.0"
DEPS["boost_libfilesystem"]="1.57.0"
DEPS["boost_libprogram_options"]="1.57.0"
DEPS["boost_libregex"]="1.57.0"
DEPS["boost_libpython"]="1.57.0"
DEPS["libpq"]="9.4.0"
DEPS["sqlite"]="3.8.6"
DEPS["gdal"]="1.11.1"
DEPS["expat"]="2.1.0"
CPP11_TOOLCHAIN="$(pwd)/toolchain"
function dpack() {
@ -86,14 +61,38 @@ function setup_mason() {
fi
}
function ip() {
if [[ ! -d ./mason_packages/${3}/${1}/ ]]; then
echo ./mason_packages/${3}/${1}/
mason install $1 $2
mason link $1 $2
fi
}
function install_mason_deps() {
MASON_PLATFORM_ID=$(mason env MASON_PLATFORM_ID)
for DEP in "${!DEPS[@]}"; do
if [[ ! -d ./mason_packages/${MASON_PLATFORM_ID}/${DEP} ]]; then
mason install ${DEP} ${DEPS[$DEP]}
mason link ${DEP} ${DEPS[$DEP]}
fi
done
ip freetype 2.5.4 $MASON_PLATFORM_ID
ip harfbuzz 2cd5323 $MASON_PLATFORM_ID
ip jpeg_turbo 1.4.0 $MASON_PLATFORM_ID
ip libxml2 2.9.2 $MASON_PLATFORM_ID
ip libpng 1.6.13 $MASON_PLATFORM_ID
ip webp 0.4.2 $MASON_PLATFORM_ID
ip icu 54.1 $MASON_PLATFORM_ID
ip proj 4.8.0 $MASON_PLATFORM_ID
ip libtiff 4.0.4beta $MASON_PLATFORM_ID
ip boost 1.57.0 $MASON_PLATFORM_ID
ip boost_libsystem 1.57.0 $MASON_PLATFORM_ID
ip boost_libthread 1.57.0 $MASON_PLATFORM_ID
ip boost_libfilesystem 1.57.0 $MASON_PLATFORM_ID
ip boost_libprogram_options 1.57.0 $MASON_PLATFORM_ID
ip boost_libregex 1.57.0 $MASON_PLATFORM_ID
ip boost_libpython 1.57.0 $MASON_PLATFORM_ID
ip libpq 9.4.0 $MASON_PLATFORM_ID
ip sqlite 3.8.6 $MASON_PLATFORM_ID
ip gdal 1.11.1 $MASON_PLATFORM_ID
ip expat 2.1.0 $MASON_PLATFORM_ID
ip pixman 0.32.6 $MASON_PLATFORM_ID
ip cairo 1.12.18 $MASON_PLATFORM_ID
}
function setup_nose() {
@ -112,19 +111,17 @@ function make_config() {
export LIBRARY_PATH="${MASON_LINKED_REL}/lib"
export PATH="${MASON_LINKED_REL}/bin":${PATH}
local CUSTOM_CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden -DU_CHARSET_IS_UTF8=1"
local MASON_LIBS="${MASON_LINKED_REL}/lib"
local MASON_INCLUDES="${MASON_LINKED_REL}/include"
echo "
CXX = '$CXX'
CC = '$CC'
CUSTOM_CXXFLAGS = '-fvisibility=hidden -fvisibility-inlines-hidden -DU_CHARSET_IS_UTF8=1'
CUSTOM_LDFLAGS = '-L${MASON_LINKED_REL}/lib'
RUNTIME_LINK = 'static'
INPUT_PLUGINS = 'csv,gdal,geojson,occi,ogr,osm,pgraster,postgis,python,raster,rasterlite,shape,sqlite,topojson'
INPUT_PLUGINS = 'all'
PREFIX = '/opt/mapnik-3.x'
PATH = '${MASON_LINKED_REL}/bin'
PATH_REMOVE = '/usr:/usr/local'
PATH_REPLACE = '/Users/travis/build/mapbox/mason/mason_packages:./mason_packages'
MAPNIK_NAME = 'mapnik_3-0-0'
BOOST_INCLUDES = '${MASON_LINKED_REL}/include'
BOOST_LIBS = '${MASON_LINKED_REL}/lib'

View file

@ -219,6 +219,8 @@ bool proj_transform::backward (box2d<double> & box) const
return true;
}
/* Returns points in clockwise order. This allows us to do anti-meridian checks.
*/
void envelope_points(std::vector< coord<double,2> > & coords, box2d<double>& env, int points)
{
double width = env.width();
@ -236,15 +238,32 @@ void envelope_points(std::vector< coord<double,2> > & coords, box2d<double>& env
double xstep = width / steps;
double ystep = height / steps;
for (int i=0; i<=steps; i++) {
coords.push_back(coord<double,2>(env.minx() + i * xstep, env.miny()));
coords.push_back(coord<double,2>(env.minx() + i * xstep, env.maxy()));
coords.resize(points);
for (int i=0; i<steps; i++) {
// top: left>right
coords[i] = coord<double, 2>(env.minx() + i * xstep, env.maxy());
// right: top>bottom
coords[i + steps] = coord<double, 2>(env.maxx(), env.maxy() - i * ystep);
// bottom: right>left
coords[i + steps * 2] = coord<double, 2>(env.maxx() - i * xstep, env.miny());
// left: bottom>top
coords[i + steps * 3] = coord<double, 2>(env.minx(), env.miny() + i * ystep);
}
}
/* determine if an ordered sequence of coordinates is in clockwise order */
bool is_clockwise(const std::vector< coord<double,2> > & coords)
{
int n = coords.size();
coord<double,2> c1, c2;
double a = 0.0;
for (int i=0; i<n; i++) {
c1 = coords[i];
c2 = coords[(i + 1) % n];
a += (c1.x * c2.y - c2.x * c1.y);
}
for (int i=1; i<steps; i++) {
coords.push_back(coord<double,2>(env.minx(), env.miny() + i * ystep));
coords.push_back(coord<double,2>(env.maxx(), env.miny() + i * ystep));
}
return a <= 0.0;
}
box2d<double> calculate_bbox(std::vector<coord<double,2> > & points) {
@ -276,7 +295,7 @@ bool proj_transform::backward(box2d<double>& env, int points) const
}
std::vector<coord<double,2> > coords;
envelope_points(coords, env, points);
envelope_points(coords, env, points); // this is always clockwise
double z;
for (std::vector<coord<double,2> >::iterator it = coords.begin(); it!=coords.end(); ++it) {
@ -287,6 +306,16 @@ bool proj_transform::backward(box2d<double>& env, int points) const
}
box2d<double> result = calculate_bbox(coords);
if (is_source_longlat_ && !is_clockwise(coords)) {
/* we've gone to a geographic CS, and our clockwise envelope has
* changed into an anticlockwise one. This means we've crossed the antimeridian, and
* need to expand the X direction to +/-180 to include all the data. Once we can deal
* with multiple bboxes in queries we can improve.
*/
double miny = result.miny();
result.expand_to_include(-180.0, miny);
result.expand_to_include(180.0, miny);
}
env.re_center(result.center().x, result.center().y);
env.height(result.height());
@ -306,7 +335,7 @@ bool proj_transform::forward(box2d<double>& env, int points) const
}
std::vector<coord<double,2> > coords;
envelope_points(coords, env, points);
envelope_points(coords, env, points); // this is always clockwise
double z;
for (std::vector<coord<double,2> >::iterator it = coords.begin(); it!=coords.end(); ++it) {
@ -318,6 +347,17 @@ bool proj_transform::forward(box2d<double>& env, int points) const
box2d<double> result = calculate_bbox(coords);
if (is_dest_longlat_ && !is_clockwise(coords)) {
/* we've gone to a geographic CS, and our clockwise envelope has
* changed into an anticlockwise one. This means we've crossed the antimeridian, and
* need to expand the X direction to +/-180 to include all the data. Once we can deal
* with multiple bboxes in queries we can improve.
*/
double miny = result.miny();
result.expand_to_include(-180.0, miny);
result.expand_to_include(180.0, miny);
}
env.re_center(result.center().x, result.center().y);
env.height(result.height());
env.width(result.width());

View file

@ -101,7 +101,9 @@ int main(int argc, char** argv)
BOOST_TEST(params.get<std::string>("rvalue") == std::string("rvalue"));
// Currently this fails because rvalue gets moved and nulled out
// Is this really the right behavior?
BOOST_TEST(rvalue == std::string("rvalue"));
std::clog << "FIXME: line 104 of tests/cpp_tests/params_test.cpp\n";
std::clog << "https://github.com/mapnik/mapnik/issues/2651\n";
//BOOST_TEST(rvalue == std::string("rvalue"));
// ensure that const member is not moved incorrectly when added to params
detail::string_holder holder;

View file

@ -5,7 +5,7 @@ from nose.tools import *
import mapnik
import random
import math
from utilities import run_all
from utilities import run_all, assert_box2d_almost_equal
# Tests that exercise map projections.
@ -114,5 +114,39 @@ def test_proj_transform_between_init_and_literal():
eq_(math.fabs(coord.y - lon_lat_coord4.y) < 1,True)
# Github Issue #2648
def test_proj_antimeridian_bbox():
# this is logic from feature_style_processor::prepare_layer()
PROJ_ENVELOPE_POINTS = 20 # include/mapnik/config.hpp
prjGeog = mapnik.Projection('+init=epsg:4326')
prjProj = mapnik.Projection('+init=epsg:2193')
prj_trans_fwd = mapnik.ProjTransform(prjProj, prjGeog)
prj_trans_rev = mapnik.ProjTransform(prjGeog, prjProj)
# bad = mapnik.Box2d(-177.31453250437079, -62.33374815225163, 178.02778363316355, -24.584597490955804)
better = mapnik.Box2d(-180.0, -62.33374815225163, 180.0, -24.584597490955804)
buffered_query_ext = mapnik.Box2d(274000, 3087000, 3327000, 7173000)
fwd_ext = prj_trans_fwd.forward(buffered_query_ext, PROJ_ENVELOPE_POINTS)
assert_box2d_almost_equal(fwd_ext, better)
# check the same logic works for .backward()
ext = mapnik.Box2d(274000, 3087000, 3327000, 7173000)
rev_ext = prj_trans_rev.backward(ext, PROJ_ENVELOPE_POINTS)
assert_box2d_almost_equal(rev_ext, better)
# checks for not being snapped (ie. not antimeridian)
normal = mapnik.Box2d(148.766759749,-60.1222810238,159.95484893,-24.9771195151)
buffered_query_ext = mapnik.Box2d(274000, 3087000, 276000, 7173000)
fwd_ext = prj_trans_fwd.forward(buffered_query_ext, PROJ_ENVELOPE_POINTS)
assert_box2d_almost_equal(fwd_ext, normal)
# check the same logic works for .backward()
ext = mapnik.Box2d(274000, 3087000, 276000, 7173000)
rev_ext = prj_trans_rev.backward(ext, PROJ_ENVELOPE_POINTS)
assert_box2d_almost_equal(rev_ext, normal)
if __name__ == "__main__":
exit(run_all(eval(x) for x in dir() if x.startswith("test_")))

View file

@ -2,6 +2,7 @@
# -*- coding: utf-8 -*-
from nose.plugins.errorclass import ErrorClass, ErrorClassPlugin
from nose.tools import assert_almost_equal
import os, sys, inspect, traceback
import mapnik
@ -92,3 +93,10 @@ def side_by_side_image(left_im, right_im):
if width > 80:
im.composite(mapnik.Image.open(HERE+'/images/actual.png'),mapnik.CompositeOp.difference,1.0,left_im.width() + 1, 0)
return im
def assert_box2d_almost_equal(a, b, msg=None):
msg = msg or ("%r != %r" % (a, b))
assert_almost_equal(a.minx, b.minx, msg=msg)
assert_almost_equal(a.maxx, b.maxx, msg=msg)
assert_almost_equal(a.miny, b.miny, msg=msg)
assert_almost_equal(a.maxy, b.maxy, msg=msg)

View file

@ -10,15 +10,9 @@ try:
except ImportError:
import simplejson as json
COMPUTE_THRESHOLD = 16
# testcase images are generated on OS X
# so they should exactly match
if platform.uname()[0] == 'Darwin':
COMPUTE_THRESHOLD = 2
# returns true if pixels are not identical
def compare_pixels(pixel1, pixel2, alpha=True):
# returns true if pixels are not nearly identical
def compare_pixels(pixel1, pixel2, alpha=True, pixel_threshold=0):
if pixel1 == pixel2:
return False
r_diff = abs((pixel1 & 0xff) - (pixel2 & 0xff))
@ -26,15 +20,15 @@ def compare_pixels(pixel1, pixel2, alpha=True):
b_diff = abs(((pixel1 >> 16) & 0xff)- ((pixel2 >> 16) & 0xff))
if alpha:
a_diff = abs(((pixel1 >> 24) & 0xff) - ((pixel2 >> 24) & 0xff))
if(r_diff > COMPUTE_THRESHOLD or
g_diff > COMPUTE_THRESHOLD or
b_diff > COMPUTE_THRESHOLD or
a_diff > COMPUTE_THRESHOLD):
if(r_diff > pixel_threshold or
g_diff > pixel_threshold or
b_diff > pixel_threshold or
a_diff > pixel_threshold):
return True
else:
if(r_diff > COMPUTE_THRESHOLD or
g_diff > COMPUTE_THRESHOLD or
b_diff > COMPUTE_THRESHOLD):
if(r_diff > pixel_threshold or
g_diff > pixel_threshold or
b_diff > pixel_threshold):
return True
return False
@ -47,6 +41,7 @@ def compare(actual, expected, alpha=True):
delta_pixels = (im2.width() * im2.height()) - pixels
if delta_pixels != 0:
return delta_pixels
# TODO: convert to C++ to speed this up
for x in range(0,im1.width(),2):
for y in range(0,im1.height(),2):
if compare_pixels(im1.get_pixel(x,y),im2.get_pixel(x,y),alpha=alpha):

View file

@ -0,0 +1,306 @@
{
"keys": [
"",
"42",
"41",
"40",
"24",
"44",
"26",
"38",
"23",
"46",
"36",
"22",
"28",
"21",
"47",
"34",
"29",
"33",
"30",
"19",
"15",
"14",
"12",
"18",
"16",
"11",
"31",
"49",
"48",
"10",
"50",
"51",
"9",
"52",
"8",
"54",
"6",
"56",
"5",
"58",
"4",
"60",
"3",
"62",
"1",
"63",
"66",
"65",
"64"
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" !# $ % ",
" & ' ",
" ( ) ",
" * + , ",
" - . ",
" / 0 1 ",
" 2 3 4 56 7 ",
" 8 9 : ",
" ; <= ",
" > ? ",
" @ ",
" A B ",
" C D ",
" ",
" E F ",
" ",
" G H ",
" I J ",
" K L ",
" ",
" M N ",
" OP ",
" Q ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

View file

@ -0,0 +1,286 @@
{
"keys": [
"",
"42",
"40",
"24",
"37",
"46",
"22",
"28",
"35",
"20",
"30",
"15",
"12",
"32",
"17",
"48",
"10",
"50",
"9",
"52",
"54",
"7",
"57",
"5",
"60",
"3",
"1",
"63",
"66"
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ! # $ ",
" ",
" % ",
" & ' ",
" ( ",
" ) * ",
" + , - ",
" . / ",
" 0 ",
" 1 2 ",
" ",
" 3 4 ",
" 5 ",
" 6 ",
" ",
" 7 ",
" 8 ",
" 9 ",
" : ",
" ",
" ; < ",
" = ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

View file

@ -5,7 +5,7 @@
],
"data": {},
"grid": [
" ! !! ",
" ! !!! ",
" !!!! !!!! ",
" !!!!!! !!!!! ",
" !!!!!!!! !!!!!!! ",

View file

@ -63,7 +63,7 @@
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",

View file

@ -66,7 +66,7 @@
" ! ! !!! !!! ",
" !! !!!! ",
" ! !!!!!! ",
" ! !!!! ",
" ! !!! ",
" ",
" ! ",
" ",

View file

@ -369,7 +369,7 @@
" \u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c \u009d\u009d\u009d\u009d\u009d ",
" \u009e\u009e \u009f\u009f\u009f\u009f\u009f\u009f \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2 \u00a3\u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6 \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7 \u00a8\u00a8 \u00a9\u00a9 ",
" \u009e\u009e \u009f \u009f \u009f \u00a0\u00a0\u00a0\u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5 \u00a5 \u00a6\u00a6 \u00a7\u00a7 \u00a7\u00a7 \u00a8\u00a8\u00a8\u00a8 \u00a9\u00a9 \u00a9 ",
" \u009e\u009e\u009e \u009e\u009e\u009e \u009f \u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0 \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c\u009c\u009c\u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5 \u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 \u00a9 ",
" \u009e\u009e\u009e \u009e\u009e\u009e \u009f \u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0 \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5 \u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 \u00a9 ",
" \u009e\u009e \u009e\u009e \u009f \u009f \u00a0\u00a0\u00a0\u00a0 \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c\u009c\u009c \u009c \u00a1\u00a1 \u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5\u00a5 \u00a5 \u00a6 \u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 ",
" \u009e\u009e \u009e\u009e \u009f \u009f \u00a0\u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3\u00a3 \u00a3\u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5 \u00a5 \u00a6\u00a6 \u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 \u00a9 ",
" \u009e \u009e \u009f \u009f \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3 \u00a4\u00a4 \u00a4 \u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5 \u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a7\u00a7 \u00a7\u00a7 \u00a8\u00a8 \u00a8\u00a8 \u00a9 \u00a9 ",
@ -436,7 +436,7 @@
" \u00d8 \u00d8\u00d8 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db \u00dc \u00dc\u00dc\u00dc\u00dc \u00de\u00de \u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0 \u00e0\u00e0 \u00e1 \u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 \u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00e5 ",
" \u00d8\u00d8 \u00d8\u00d8 \u00d9 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db \u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de \u00df\u00df \u00df \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3 \u00e4 \u00e4 \u00e4 \u00e4 \u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00e5 ",
" \u00d8\u00d8\u00d8\u00d8\u00d8\u00d8 \u00d9 \u00d9 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db \u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de \u00df \u00df \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 ",
" \u00d8\u00d8\u00d8 \u00d8\u00d8 \u00d9\u00d9\u00d9 \u00d9 \u00d9 \u00d9 \u00db\u00db\u00db\u00db\u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00de\u00de \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 ",
" \u00d8\u00d8\u00d8 \u00d8\u00d8 \u00d9\u00d9\u00d9 \u00d9 \u00d9 \u00d9 \u00db\u00db\u00db\u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00de\u00de \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 ",
" \u00d8 \u00e2\u00e2\u00e2 ",
" ",
" ",

View file

@ -340,7 +340,7 @@
" \u0087\u0087\u0087\u0087\u0087\u0087 \u0087\u0087\u0087\u0087\u0087}}}}} }}}}} ~~~~~~~ ~~~~~~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b \u008b\u008b\u008b\u008b\u008b\u008b\u0089\u0089\u0089\u0089 \u0089 \u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0083\u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084\u0084\u0084\u0084\u0084\u0084\u0084\u0085\u0085 \u0085 \u0085 \u008a\u008a \u008a\u008a\u0086 \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}} }}}}}} \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b \u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089\u0089 \u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084\u0084\u0084 \u0084\u0084\u0085\u0085\u0085\u0085\u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}} }}}}}} ~~~~~~~ ~~~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089 \u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0083 \u0083\u0083\u0084 \u0084\u0084\u0084\u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085\u0085\u0085\u0085\u008a\u008a \u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}}}}}}}}}}}~~~~~~~ ~~~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080 \u0080\u0080 \u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089\u0089\u0082\u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0083 \u0083\u0083\u0084 \u0084\u0084\u0084 \u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}}}}}}}}}}}~~~~~~~ ~~~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080 \u0080\u0080 \u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089 \u0082\u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0083 \u0083\u0083\u0084 \u0084\u0084\u0084 \u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087}}}}}}}}}}}}}}}}}~~ ~~ ~~~~~~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089\u0089\u0082\u0082\u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0084 \u0084\u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u008a \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}} }}}}}}}~~ ~ ~~ ~ ~~~~ \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089\u0089\u0089 \u0089\u0089\u0082\u0082\u0082\u0082\u0082 \u0082 \u0082\u0082\u0082 \u0083\u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0084 \u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084\u0085\u0085\u0085 \u0085\u0085\u0085 \u008a\u008a \u008a\u008a \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}} }}}}}}}~~ ~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b \u0089\u0089\u0089 \u0089\u0089\u0089\u0089\u0089\u0089 \u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0082\u0082 \u0083\u0083\u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0084 \u0084\u0084 \u0084\u0085\u0085 \u0085\u0085\u0085 \u008a\u008a\u008a \u008a\u008a\u008a \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
@ -356,14 +356,14 @@
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f \u008f\u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0092\u0092\u0092 \u0092 \u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099 \u008e\u008e\u008e \u008e\u008e\u008e\u008e\u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095\u0095\u0095\u0095 \u0095\u0095 \u0095\u0095 \u0096\u0096\u0096 \u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097 \u0097\u0097\u0097\u0097 \u0097\u0097 \u0097\u0097 \u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 \u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090 \u0090\u0090 \u0090\u0090 \u0091\u0091 \u0091\u0091\u0091 \u0091\u0091\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099 \u008e\u008e\u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094 \u0095\u0095\u0095\u0095\u0095 \u0095 \u0095 \u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090 \u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0091\u0091\u0091 \u0091\u0091\u0092\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099 \u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095 \u0095 \u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f\u008f\u008f\u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0092\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099\u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095\u0095 \u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f\u008f\u008f\u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0092\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099\u008e\u008e\u008e\u008e \u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095\u0095 \u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u008e\u008e\u008e\u008e \u008e \u0093\u0093 \u0093\u0093 \u0093 \u0094\u0094 \u0094 \u0094\u0095\u0095\u0095\u0095\u0095\u0095\u0095\u0095\u0095 \u0095 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097 \u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f\u008f\u008f \u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0091\u0091 \u0091\u0091\u0091 \u0091\u0091 \u0092\u0092\u0092\u0092 \u0092\u0092 \u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099 \u0099\u0099 \u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093\u0093\u0093\u0093 \u0093 \u0094\u0094\u0094\u0094\u0094 \u0094\u0095\u0095\u0095 \u0095\u0095 \u0095\u0095 \u0095 \u0096\u0096\u0096 \u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097 \u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f\u008f\u008f\u008f \u0090\u0090\u0090 \u0090\u0090 \u0090\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u0091 \u0091\u0091\u0091 \u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093\u0093 \u0093\u0093\u0093 \u0093 \u0094\u0094\u0094\u0094\u0094 \u0094\u0094\u0094\u0095\u0095 \u0095\u0095 \u0095\u0095 \u0095\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097\u0097 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f\u008f\u008f \u008f\u008f\u008f\u008f \u0090\u0090 \u0090\u0090\u0090\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u008e\u008e \u008e \u008e\u008e \u0093\u0093\u0093\u0093\u0093 \u0093\u0093\u0093 \u0093 \u0094\u0094 \u0094\u0094\u0094\u0094\u0094\u0094\u0094\u0095\u0095 \u0095\u0095 \u0095\u0095\u0095\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f \u0090\u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d \u008e\u008e\u008e\u008e\u008e\u008e \u008e \u0093\u0093\u0093\u0093 \u0093\u0093\u0093\u0093 \u0094\u0094 \u0094\u0094\u0094 \u0095\u0095\u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f \u0090 \u0091\u0091\u0091\u0091\u0091\u0091\u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093\u0093 \u0093\u0093\u0093 \u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c \u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f\u009f\u009f\u009f\u0091\u0091\u0091\u0091\u0091\u009f\u009f \u00a0\u00a0 \u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u008e\u008e\u008e\u008e\u008e\u008e\u008e \u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3 \u0094\u0094\u00a4\u00a4\u0094\u0094 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a7 ",
" \u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c \u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f\u009f\u009f\u009f\u0091\u0091\u0091\u0091\u0091\u009f\u009f \u00a0\u00a0 \u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u008e\u008e\u008e\u008e\u008e\u008e \u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3 \u0094\u0094\u00a4\u00a4\u0094\u0094 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a7 ",
" \u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c \u009d\u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f \u0091\u0091\u0091 \u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a8\u00a8 \u00a3\u00a3 \u00a3\u00a3\u00a3 \u0094\u0094\u0094\u0094\u0094 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a9\u00a9\u00a9 \u00a7\u00a7 ",
" \u009b\u009b\u009b\u009b \u009c \u009c \u009c\u009c \u009d\u009d\u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f \u0091 \u009f\u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a1 \u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8 \u00a3\u00a3 \u00a3\u00a3 \u00a4\u0094\u0094\u0094\u0094\u00a4 \u00a5 \u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a9\u00a9\u00a9\u00a9 \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7 ",
" \u009b\u009b\u009b\u009b \u009c \u009c \u009c\u009c \u009d\u009d\u009d\u009d \u009f\u009f \u009f\u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8 \u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4 \u00a4\u00a4 \u00a5 \u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a9\u00a9\u00a9\u00a9\u00a9\u00a9 \u00a7\u00a7 \u00a7\u00a7\u00a7 ",
@ -440,7 +440,7 @@
" \u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5 \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df \u00d8\u00d8\u00d8 \u00d8\u00d8\u00d8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3\u00e3\u00d9\u00d9 \u00d9\u00d9 \u00d9\u00d9 \u00d9\u00d9 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 ",
" \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df \u00d8\u00d8\u00d8 \u00d8\u00d8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e1\u00e1\u00e1 \u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 ",
" \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 \u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00dc\u00dc\u00dc \u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00df\u00df\u00df\u00df \u00d8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3\u00e3\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 ",
" \u00e5\u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3\u00e6\u00e6\u00e6\u00e6\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 ",
" \u00e5\u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3\u00e6\u00e6\u00e6\u00e6\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 ",
" \u00e5\u00e5\u00e5\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd \u00e8\u00e8\u00e8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3\u00e6\u00e6\u00e6\u00e6\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e9\u00e9\u00e9\u00e9\u00e9 ",
" \u00e5\u00e5\u00e5 \u00ea\u00ea\u00ea \u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7 \u00eb\u00eb \u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec \u00ed \u00ed\u00ed \u00e8\u00e8\u00e8 \u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee \u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef \u00e2\u00e2\u00e2\u00e2\u00e2 \u00f0\u00f0 \u00e6 \u00e6\u00e6 \u00f1\u00f1\u00f1\u00f1\u00f1\u00f1\u00f1 \u00f1\u00f1\u00f1\u00f1\u00f1 \u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9 ",
" \u00f2\u00f2\u00f2\u00f2\u00f2\u00f2 \u00ea\u00ea\u00ea \u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7 \u00eb\u00eb\u00eb \u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec \u00ed\u00ed \u00ed\u00ed \u00f3\u00f3\u00f3\u00f3 \u00e8\u00e8\u00e8\u00e8\u00e8 \u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee \u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef \u00e2\u00e2\u00e2\u00e2 \u00f0\u00f0\u00f0\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6 \u00f1\u00f1\u00f1 \u00f1\u00f1 \u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9 ",

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 B

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 B

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 B

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View file

@ -0,0 +1,93 @@
<Map srs="+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs " maximum-extent="274000,3087000,3327000,7173000">
<Parameters>
<Parameter name="sizes">1000,1000</Parameter>
<Parameter name="bbox">200000.0,1087000.0,7007000.0,7173000.0</Parameter>
</Parameters>
<Style name="mystyle" filter-mode="first">
<Rule>
<PointSymbolizer/>
</Rule>
</Style>
<Layer name="src_layer" srs="+init=epsg:4326">
<StyleName>mystyle</StyleName>
<Datasource>
<Parameter name="extent">-180,-47.2754736667,180,-34.0036943</Parameter>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
WKT,id,
"POINT (-176.662157383264883 -43.096109795145765)",
"POINT (-176.854671182715663 -42.903595931039007)",
"POINT (-177.252533072573982 -42.646910782400411)",
"POINT (-177.611892228793693 -42.415894147047872)",
"POINT (-178.099593973519461 -42.159208996768882)",
"POINT (-178.56162722744844 -41.735678488584703)",
"POINT (-178.72847257314487 -41.555998877995457)",
"POINT (-178.985157723427307 -41.222308171291367)",
"POINT (-179.152003072780786 -40.965623011559309)",
"POINT (-179.511362290676971 -40.490755465927869)",
"POINT (-179.80655022231997 -40.054390693250525)",
"POINT (179.923930360184784 -39.784871275110177)",
"POINT (179.75708500598833 -39.643694437033751)",
"POINT (179.346388748199729 -39.772037019858125)",
"POINT (179.025532296262895 -39.861876827647727)",
"POINT (178.563499004992451 -40.067224958370574)",
"POINT (178.281145326853419 -40.208401797959127)",
"POINT (178.02446016489057 -40.054390701181269)",
"POINT (177.677935196187519 -39.900379604399049)",
"POINT (177.485421324683159 -39.669362958813636)",
"POINT (177.331410227479353 -39.425512055075657)",
"POINT (177.215901904577578 -39.181661151299444)",
"POINT (177.023388033074042 -38.86080469896423)",
"POINT (176.76670287107433 -38.604119537111721)",
"POINT (176.535686225282944 -38.565616762876971)",
"POINT (176.317503837598906 -38.783799150566402)",
"POINT (176.176326998513417 -38.989147280139598)",
"POINT (175.932476094645182 -39.425512055467188)",
"POINT (175.701459448881849 -39.759202766009246)",
"POINT (175.52177983551357 -40.080059218446856)",
"POINT (175.149586350685809 -40.37524715469236)",
"POINT (174.880066930641647 -40.298241606113201)",
"POINT (174.700387317279876 -40.131396250851466)",
"POINT (174.469370671529759 -39.861876830812001)",
"POINT (174.418033639140958 -39.707865733646173)",
"POINT (174.212685509585867 -39.374175023120273)",
"POINT (174.148514219099951 -39.143158377371385)",
"POINT (174.05867441241972 -38.937810247816806)",
"POINT (173.930331831447972 -38.719627860165083)",
"POINT (173.699315185698993 -38.527113988707669)",
"POINT (173.327121700881207 -38.552782504902005)",
"POINT (172.993430990354909 -38.655456569679323)",
"POINT (172.839419893188989 -38.732462118262291)",
"POINT (172.659740279828696 -38.899307473525418)",
"POINT (172.45439215027406 -39.027650054497059)",
"POINT (172.197706988330737 -39.284335216440311)",
"POINT (172.018027374970359 -39.669362959355176)",
"POINT (-170.809757996124091 -39.258667337666161)",
"POINT (-171.092108440755396 -39.489683796643384)",
"POINT (-171.374459297976472 -39.72070029102813)",
"POINT (-171.669644665725599 -39.95171681078768)",
"POINT (-171.964830399850541 -40.195567616117053)",
"POINT (-172.208679740446428 -40.426584197598665)",
"POINT (-172.542368540167502 -40.631932262228219)",
"POINT (-172.696378898013165 -40.785943335635686)",
"POINT (-173.055736583802087 -41.068296973781855)",
"POINT (-173.273918197572641 -41.299313602634044)",
"POINT (-173.658944763471993 -41.645838554189496)",
"POINT (-173.504934101572132 -41.491827462434976)",
"POINT (-173.979800429072611 -41.992363516983445)",
"POINT (-174.108142742586438 -42.172043129406539)",
"POINT (-174.313490466537729 -42.377391260144812)",
"POINT (-174.608677910682047 -42.736750491079746)",
"POINT (-176.058947562102475 -43.429800480947527)",
"POINT (-174.955202379135329 -42.967767146816229)",
"POINT (-175.481406377455045 -43.160281038130286)",
"POINT (-175.802262571951218 -43.352794922023079)",
"POINT (-176.328466827030041 -43.339960685516779)",
"POINT (-176.508146353344472 -43.250120886092468)",
</Parameter>
</Datasource>
</Layer>
</Map>

View file

@ -27,17 +27,9 @@ defaults = {
'grid': mapnik.has_grid_renderer()
}
cairo_threshold = 10
cairo_threshold = 0
agg_threshold = 0
grid_threshold = 5
if 'Linux' == platform.uname()[0]:
# we assume if linux then you are running packaged cairo
# which is older than the 1.12.14 version we used on OS X
# to generate the expected images, so we'll rachet back the threshold
# https://github.com/mapnik/mapnik/issues/1868
cairo_threshold = 230
agg_threshold = 12
grid_threshold = 6
grid_threshold = 0
def render_cairo(m, output, scale_factor):
mapnik.render_to_file(m, output, 'ARGB32', scale_factor)
@ -64,7 +56,7 @@ renderers = [
},
{ 'name': 'cairo',
'render': render_cairo,
'compare': lambda actual, reference: compare(actual, reference, alpha=False),
'compare': lambda actual, reference: compare(actual, reference, alpha=True),
'threshold': cairo_threshold,
'filetype': 'png',
'dir': 'images'
@ -123,6 +115,16 @@ class Reporting:
else:
print ''
def updating(self, actual, expected):
self.passed += 1
if self.quiet:
sys.stderr.write('\x1b[33m.\x1b[0m')
else:
print '\x1b[33m✓\x1b[0m (\x1b[34mUpdating\x1b[0m)'
contents = open(actual, 'r').read()
open(expected, 'wb').write(contents)
def not_found(self, actual, expected):
self.failed += 1
self.errors.append((self.NOT_FOUND, actual, expected, 0, None))
@ -244,6 +246,8 @@ def render(filename, config, scale_factor, reporting):
renderer['render'](m, actual, scale_factor)
if not os.path.exists(expected):
reporting.not_found(actual, expected)
elif os.environ.get('UPDATE'):
reporting.updating(actual, expected)
else:
diff = renderer['compare'](actual, expected)
if diff > renderer['threshold']: