olena: olena-2.0-598-g7bc3af9 Add DoG Space + Keypoints detection and edge responses elimination

--- milena/sandbox/anthony/Makefile | 6 +- milena/sandbox/anthony/new-implem/src/dog-space.hh | 233 ++++++++++++++ milena/sandbox/anthony/new-implem/src/keypoint.hh | 48 +++ milena/sandbox/anthony/new-implem/src/main.cc | 59 ++-- .../sandbox/anthony/new-implem/src/scale-space.hh | 24 +- milena/sandbox/anthony/new-implem/src/vrac.hh | 323 ++++++++++++++++++++ milena/sandbox/anthony/new-implem/src/vrac/vrac.hh | 296 ------------------ milena/sandbox/anthony/src/main.cc | 94 ++++-- milena/sandbox/anthony/test-opencv/Makefile | 19 -- milena/sandbox/anthony/test-opencv/keith.pbm | Bin 262159 -> 0 bytes milena/sandbox/anthony/test-opencv/main.cpp | 66 ---- milena/sandbox/anthony/test-opencv/tongue.pbm | 29 -- 12 files changed, 718 insertions(+), 479 deletions(-) create mode 100644 milena/sandbox/anthony/new-implem/src/dog-space.hh create mode 100644 milena/sandbox/anthony/new-implem/src/keypoint.hh create mode 100644 milena/sandbox/anthony/new-implem/src/vrac.hh delete mode 100644 milena/sandbox/anthony/new-implem/src/vrac/vrac.hh delete mode 100644 milena/sandbox/anthony/test-opencv/Makefile delete mode 100644 milena/sandbox/anthony/test-opencv/keith.pbm delete mode 100644 milena/sandbox/anthony/test-opencv/main.cpp delete mode 100644 milena/sandbox/anthony/test-opencv/tongue.pbm diff --git a/milena/sandbox/anthony/Makefile b/milena/sandbox/anthony/Makefile index 2953013..43d90fd 100644 --- a/milena/sandbox/anthony/Makefile +++ b/milena/sandbox/anthony/Makefile @@ -1,8 +1,8 @@ -CCACHE=ccache +CCACHE= CC=g++ -CFLAGS=-Wall -Werror +CFLAGS=-Wall -Wextra CLIBS=-I../../ -CLEAN=*.o output/* log +CLEAN=*.o output/* log debug_* SRC=src/main.cc src/matrix.cc src/keypoint.cc OUTPUT=a.out diff --git a/milena/sandbox/anthony/new-implem/src/dog-space.hh b/milena/sandbox/anthony/new-implem/src/dog-space.hh new file mode 100644 index 0000000..a93b52a --- /dev/null +++ b/milena/sandbox/anthony/new-implem/src/dog-space.hh @@ -0,0 +1,233 @@ +#ifndef DOG_SPACE_HH +# define DOG_SPACE_HH + +# include <string> +# include <vector> +# include <list> + +#include <mln/core/image/image2d.hh> +#include <mln/data/all.hh> +#include <mln/io/pgm/all.hh> +#include <mln/io/ppm/save.hh> +#include <mln/core/alias/neighb2d.hh> +#include <mln/literal/all.hh> +#include <mln/value/int_s16.hh> + +#include "scale-space.hh" +#include "keypoint.hh" + +using namespace mln; + +template<typename I, typename S> +class DoGSpace : protected ScaleSpace<S> +{ + public: + DoGSpace(ScaleSpace<I>* _ss) + { + ss = _ss; + } + + ~DoGSpace() + { + ScaleSpace<S>::~ScaleSpace(); + } + + void build(void) + { + ScaleSpace<S>::o = ss->octave_count(); + ScaleSpace<S>::g = ss->gradient_count() - 1; + + typedef typename std::vector< std::vector<I> >::iterator PIT; + typedef typename std::vector<I>::iterator IIT; + + std::vector< std::vector<I> > sspyramid = ss->getPyramid(); + S dog; + + for (PIT pit = sspyramid.begin(); pit != sspyramid.end(); ++pit) + { + std::vector<S> octave; + for (IIT iit = pit->begin(); (iit + 1) != pit->end(); ++iit) + { + initialize(dog, *iit); + mln_piter(I) p(iit->domain()); + + for_all(p) + { + value::int_s16 up = (value::int_s16) (*iit)(p); + value::int_s16 down = (value::int_s16) (*(iit+1))(p); + value::int_s16 diff = down - up; + //value::int_s16 diff = ( (int) (*iit)(p) ) - ( (int) ((*(iit+1))(p)) ); + + //std::cout << up << " - " << down << " = " << diff << std::endl; + + dog(p) = diff; + } + octave.push_back(dog); + } + ScaleSpace<S>::pyramid.push_back(octave); + } + } + + void findKeypoints(std::list<Keypoint>& keypoints) + { + typedef typename std::vector< std::vector<S> >::iterator PIT; + typedef typename std::vector<S>::iterator IIT; + + unsigned octave = 0; + for (PIT pit = ScaleSpace<S>::pyramid.begin(); pit != ScaleSpace<S>::pyramid.end(); ++pit) + { + unsigned gradient = 1; + for (IIT iit = pit->begin() + 1; (iit + 1) != pit->end(); ++iit) + { + S upper = *(iit-1); + S current = *iit; + S lower = *(iit+1); + + mln_piter(I) p(current.domain()); + + for_all(p) + { + value::int_s16 center = current(p); + value::int_s16 min = 255; + value::int_s16 max = -256; + mln_niter(neighb2d) n(c8(), p); + + int extrema = isExtrema(current, center, n); + + if (extrema == -1) // Is a minimum + { + findMin(min, lower, upper, p, n); + if (center < min) + keypoints.push_back(Keypoint(p.col(), p.row(), octave, gradient, false)); + } + else if (extrema == 1) // Is a maximum + { + findMax(max, lower, upper, p, n); + if (center > max) + keypoints.push_back(Keypoint(p.col(), p.row(), octave, gradient, true)); + } + } + + ++gradient; + } + + ++octave; + } + } + + void discardLowContrastKeypoints(std::list<Keypoint>& keypoints) + { + keypoints = keypoints; + } + + void eliminateEdgeResponses(std::list<Keypoint>& keypoints) + { + const static float bound_ratio = 12.1; + + for (std::list<Keypoint>::iterator k = keypoints.begin(); + k != keypoints.end(); ++k) + { + unsigned octave = k->getOctave(); + unsigned gradient = k->getGradient(); + S dog = ScaleSpace<S>::pyramid[octave][gradient]; + unsigned col = k->getX(); + unsigned row = k->getY(); + + /* Set the neighbors: + * n5 n1 n6 + * n2 p n3 + * n7 n4 n8 + */ + float p = dog(mln_psite(S)(row, col)); + + float n1 = dog(mln_psite(S)(row - 1, col)); + float n2 = dog(mln_psite(S)(row, col - 1)); + float n3 = dog(mln_psite(S)(row, col + 1)); + float n4 = dog(mln_psite(S)(row + 1, col)); + + float n5 = dog(mln_psite(S)(row - 1, col - 1)); + float n6 = dog(mln_psite(S)(row - 1, col + 1)); + float n7 = dog(mln_psite(S)(row + 1, col - 1)); + float n8 = dog(mln_psite(S)(row + 1, col + 1)); + + // Set Hessian matrix and find the ratio + + float dxx = n3 - 2.0 * p + n2; + float dyy = n4 - 2.0 * p + n1; + float dxy = (n8 - n6 - n7 + n5) / 4.0; + + float trace = dxx + dyy; + float determinant = dxx * dyy - dxy * dxy; + float ratio = (trace * trace) / determinant; + + if (determinant <= 0 || ratio >= bound_ratio) + keypoints.erase(k); + } + } + + virtual void save() + { + //std::stringstream name; + + //for (unsigned i = 0; i < ScaleSpace<S>::pyramid.size(); ++i) + //{ + //for (unsigned j = 0; j < ScaleSpace<S>::pyramid[i].size(); ++j) + //{ + //name << "output/dogs-o" << i << "-" << j << ".pgm"; + //io::pgm::save(ScaleSpace<I>::pyramid[i][j], name.str()); + //name.str(""); + //} + //} + } + + private: + ScaleSpace<I>* ss; + + int isExtrema(S& current, value::int_s16& center, + typename neighb2d::fwd_niter n) + { + bool min = true; + bool max = true; + + for_all(n) + { + min = (min && center < current(n)); + max = (max && center > current(n)); + } + + if (min) + return -1; + else if (max) + return 1; + else + return 0; + } + + void findMin(value::int_s16& min, S& lower, S& upper, + typename S::piter& p, typename neighb2d::fwd_niter& n) + { + min = (lower(p) < min) ? lower(p) : min; + min = (upper(p) < min) ? upper(p) : min; + + for_all(n) + { + min = (lower(n) < min) ? lower(n) : min; + min = (upper(n) < min) ? upper(n) : min; + } + } + + void findMax(value::int_s16& max, S& lower, S& upper, + typename S::piter& p, typename neighb2d::fwd_niter& n) + { + max = (lower(p) > max) ? lower(p) : max; + max = (upper(p) > max) ? upper(p) : max; + + for_all(n) + { + max = (lower(n) > max) ? lower(n) : max; + max = (upper(n) > max) ? upper(n) : max; + } + } +}; + +#endif /* ! DOG_SPACE_HH */ diff --git a/milena/sandbox/anthony/new-implem/src/keypoint.hh b/milena/sandbox/anthony/new-implem/src/keypoint.hh new file mode 100644 index 0000000..b6b2415 --- /dev/null +++ b/milena/sandbox/anthony/new-implem/src/keypoint.hh @@ -0,0 +1,48 @@ +#ifndef KEYPOINT_HH +# define KEYPOINT_HH + +# include <ostream> + +class Keypoint +{ + public: + Keypoint(int _x, int _y, + unsigned _octave, unsigned _gradient, + bool _maximum) + { + x = _x; + y = _y; + octave = _octave; + gradient = _gradient; + maximum = _maximum; + } + + inline int getX() const { return x; } + inline int getY() const { return y; } + inline unsigned getOctave() const { return octave; } + inline unsigned getGradient() const { return gradient; } + inline bool getType() const { return maximum; } + inline float getOrientation() const { return orientation; } + + inline void setX(int _x) { x = _x; } + inline void setY(int _y) { y = _y; } + inline void setOrientation(float _o) { orientation = _o; } + + friend std::ostream& operator<< (std::ostream& stream, const Keypoint& k) + { + stream << "(" << k.getX() << "," << k.getY() << ")" + << " o:" << k.getOctave() << " g:" << k.getGradient(); + + return stream; + } + + private: + int x; + int y; + unsigned octave; + unsigned gradient; + bool maximum; + float orientation; +}; + +#endif /* ! KEYPOINT_HH */ diff --git a/milena/sandbox/anthony/new-implem/src/main.cc b/milena/sandbox/anthony/new-implem/src/main.cc index 45a36ad..afbb476 100644 --- a/milena/sandbox/anthony/new-implem/src/main.cc +++ b/milena/sandbox/anthony/new-implem/src/main.cc @@ -4,60 +4,69 @@ #include <mln/io/ppm/save.hh> #include <mln/core/alias/neighb2d.hh> #include <mln/literal/all.hh> -#include <mln/value/int_s8.hh> +#include <mln/value/int_u8.hh> +#include <mln/value/int_s16.hh> //#include <cmath> #include <string> +#include <list> #include "scale-space.hh" -//#include "dog-space.hh" -//#include "keypoint.hh" +#include "dog-space.hh" +#include "keypoint.hh" //#include "matrix.hh" int main(void) { typedef image2d<value::int_u8> I; + typedef image2d<value::int_s16> S; typedef image2d<value::rgb8> C; // General parameters std::string source("images/keith.pbm"); const unsigned blur_level = 5; - const unsigned octave_level = 3; - const bool black = false; + const unsigned octave_level = 4; ScaleSpace<I> *ss = new ScaleSpace<I>(octave_level, blur_level); - //DoGSpace<C>* dog = new DogSpace(); - //std::vector<Keypoint>* keypoints = new std::vector<Keypoint>(); + DoGSpace<I, S>* dogs = new DoGSpace<I, S>(ss); + std::list<Keypoint> keypoints; I original; - C extrema, improved; + C extrema, extrema_b, + extrema2, extrema2_b; + //improved, improved_b; io::pgm::load(original, source.c_str()); - if (black) - { - initialize(extrema, original); - initialize(improved, original); - } - else - { - extrema = data::convert(value::rgb8(), original); - improved = data::convert(value::rgb8(), original); - } + initialize(extrema_b, original); + initialize(extrema2_b, original); + //initialize(improved_b, original); + + extrema = data::convert(value::rgb8(), original); + extrema2 = data::convert(value::rgb8(), original); + //improved = data::convert(value::rgb8(), original); // Localization ss->build(original); - ss->save(); - //buildDifferenceOfGaussianSpace(scaleSpace, dogSpace); - //buildExtrema(extrema, dogSpace, keypoints); - //discardLowContrastKeypoints(dogSpace, keypoints, improved); + //ss->save(); + dogs->build(); + //dogs->save(); + dogs->findKeypoints(keypoints); + + writeKeypoints(keypoints, extrema, extrema_b); + + dogs->discardLowContrastKeypoints(keypoints); + dogs->eliminateEdgeResponses(keypoints); - // Processing - // TODO + writeKeypoints(keypoints, extrema2, extrema2_b); // Save io::ppm::save(extrema, "output/extrema.ppm"); - io::ppm::save(improved, "output/extrema_improved.ppm"); + io::ppm::save(extrema_b, "output/extrema_b.ppm"); + io::ppm::save(extrema2, "output/extrema2.ppm"); + io::ppm::save(extrema2_b, "output/extrema2_b.ppm"); + //io::ppm::save(improved, "output/extrema_improved.ppm"); + //io::ppm::save(improved_b, "output/extrema_b_improved.ppm"); return 0; } diff --git a/milena/sandbox/anthony/new-implem/src/scale-space.hh b/milena/sandbox/anthony/new-implem/src/scale-space.hh index 2fbb4fd..e2262b6 100644 --- a/milena/sandbox/anthony/new-implem/src/scale-space.hh +++ b/milena/sandbox/anthony/new-implem/src/scale-space.hh @@ -10,9 +10,10 @@ #include <mln/io/ppm/save.hh> #include <mln/core/alias/neighb2d.hh> #include <mln/literal/all.hh> -#include <mln/value/int_s8.hh> +#include <mln/value/int_u8.hh> +#include <mln/value/int_s16.hh> -#include "vrac/vrac.hh" +#include "vrac.hh" using namespace mln; @@ -41,23 +42,22 @@ class ScaleSpace return pyramid[i]; } - void build(const I& original) { // Upscaled octave - I upscaled = vrac::upscaling2(original); + I upscaled = upscaling2(original); addOctave(upscaled); // 1st octave addOctave(original); // 2nd octave - I downscaled = vrac::downscaling2(original); + I downscaled = downscaling2(original); addOctave(downscaled); for (unsigned i = 3; i < o; ++i) { - downscaled = vrac::downscaling2(downscaled); + downscaled = downscaling2(downscaled); addOctave(downscaled); } } @@ -79,22 +79,26 @@ class ScaleSpace inline unsigned octave_count() { return pyramid.size(); } inline unsigned gradient_count() { return pyramid[0].size(); } + const std::vector< std::vector<I> >& getPyramid() { return pyramid; } - private: + protected: unsigned o; unsigned g; std::vector< std::vector<I> > pyramid; + ScaleSpace() + { + } + void addOctave(const I& original) { I blured; std::vector<I> octave; - //float variance = sqrt(2); - float variance = 0.84089642; + float variance = sqrt(2); for (unsigned i = 0; i < g; ++i) { - blured = vrac::blur(original, variance); + blured = blur(original, variance); variance *= sqrt(2); octave.push_back(blured); } diff --git a/milena/sandbox/anthony/new-implem/src/vrac.hh b/milena/sandbox/anthony/new-implem/src/vrac.hh new file mode 100644 index 0000000..7a0c8a5 --- /dev/null +++ b/milena/sandbox/anthony/new-implem/src/vrac.hh @@ -0,0 +1,323 @@ +#ifndef VRAC_HH +# define VRAC_HH + +# include <mln/core/image/image2d.hh> +# include <mln/data/all.hh> +# include <mln/io/pgm/all.hh> +# include <mln/io/ppm/save.hh> +# include <mln/core/alias/neighb2d.hh> +# include <mln/literal/all.hh> +# include <mln/value/int_s8.hh> + +# include <cmath> +# include <list> + +# include "matrix.hh" +# include "keypoint.hh" + +//# include "keypoint.hh" +//# include "matrix.hh" + +using namespace mln; + +// Set the gaussian kernel +float *gaussian_kernel(float variance) +{ + unsigned index = 0; + float *kernel = new float[49]; + Matrix matrix(7, 7); + float sum = 0; + + for (int i = -3; i < 4; ++i) + { + for (int j = -3; j < 4; ++j) + { + kernel[index] = exp(- (i*i + j*j) / (2.0 * variance * variance) ); + sum += kernel[index++]; + } + } + + sum = 1. / sum; + + for (int i = 0; i < 49; ++i) + kernel[i] *= sum; + + return kernel; +} + +// Apply the convolution of the image by the kernel +template<typename I> +void convolve(const I& original, I& filtered, float *kernel) +{ + mln_piter(I) p(filtered.domain()); + window2d win; + + for (int i = -3; i < 4; ++i) + for (int j = -3; j < 4; ++j) + win.insert(i, j); + + // Iterate through all image sites + for_all(p) + { + // Create the window around the site + mln_qiter(window2d) q(win, p); + float sum = 0; + int index = 0; + + // Iterate through all window image sites + for_all(q) + { + if (filtered.has(q)) + sum += original(q) * kernel[index++]; + else + sum += 127 * kernel[index++]; + } + + filtered(p) = static_cast<int>(sum); + } +} + +// Blur the image thanks to a convolution matrix +template<typename I> +I blur(const I& original, float variance) +{ + I filtered; + float *kernel = gaussian_kernel(variance); + + initialize(filtered, original); + convolve(original, filtered, kernel); + + return filtered; +} + +float *upscalingTL_kernel() +{ + const static float one = 1.0 / 8.0; + const static float two = 2.0 / 8.0; + const static float three = 2.0 / 8.0; + const static float four = 3.0 / 8.0; + + float *kernel = new float[4]; + + kernel[0] = one; + kernel[1] = two; + kernel[2] = three; + kernel[3] = four; + + return kernel; +} + +float *upscalingTR_kernel() +{ + const static float one = 2.0 / 8.0; + const static float two = 1.0 / 8.0; + const static float three = 3.0 / 8.0; + const static float four = 2.0 / 8.0; + + float *kernel = new float[4]; + + kernel[0] = one; + kernel[1] = two; + kernel[2] = three; + kernel[3] = four; + + return kernel; +} + +float *upscalingBL_kernel() +{ + const static float one = 2.0 / 8.0; + const static float two = 3.0 / 8.0; + const static float three = 1.0 / 8.0; + const static float four = 2.0 / 8.0; + + float *kernel = new float[4]; + + kernel[0] = one; + kernel[1] = two; + kernel[2] = three; + kernel[3] = four; + + return kernel; +} + +float *upscalingBR_kernel() +{ + const static float one = 3.0 / 8.0; + const static float two = 2.0 / 8.0; + const static float three = 2.0 / 8.0; + const static float four = 1.0 / 8.0; + + float *kernel = new float[4]; + + kernel[0] = one; + kernel[1] = two; + kernel[2] = three; + kernel[3] = four; + + return kernel; +} + +template<typename I> +unsigned upscalePixel(const I& original, int i, int j, int type) +{ + float *kernel; + window2d win; + mln_psite(I) p(i, j); + float value = 0; + unsigned index = 0; + int iStart = 0; + int jStart = 0; + + if (type == 0) + { + kernel = upscalingTL_kernel(); + iStart = -1; + jStart = -1; + } + else if (type == 1) + { + kernel = upscalingTR_kernel(); + iStart = 0; + jStart = -1; + } + else if (type == 2) + { + kernel = upscalingBL_kernel(); + iStart = -1; + jStart = 0; + } + else + { + kernel = upscalingBR_kernel(); + iStart = 0; + jStart = 0; + } + + for (int ii = iStart; ii < iStart + 2; ++ii) + for (int jj = jStart; jj < jStart + 2; ++jj) + win.insert(ii, jj); + + mln_qiter(window2d) q(win, p); + + for_all(q) + { + if (original.has(q)) + { + value += original(q) * kernel[index]; + } + + ++index; + } + + return (static_cast<int>(value)); +} +// Downscale by 2 the image resolution +template<typename I> +I downscaling2(const I& original) +{ + mln_piter(I) p(original.domain()); + window2d win; + int index = 0; + + // Initialize the rescaled image + box2d size(original.nrows() / 2, original.ncols() / 2); + I reduced(size); + + // Set the 2x2 window matrix + for (int i = 0; i < 2; ++i) + for (int j = 0; j < 2; ++j) + win.insert(i, j); + + // Iterate through all image sites + for_all(p) + { + // Get 1/4 of total pixels + if (index % 2 == 0) + { + int i = (index % original.ncols()) / 2; + int j = (index / original.ncols()) / 2; + int count = 0; + int sum = 0; + mln_qiter(window2d) q(win, p); + + // Iterate through all window image sites + for_all(q) + { + if (original.has(q)) + { + sum += original(q); + ++count; + } + } + + if (reduced.has(point2d(j, i))) + opt::at(reduced, j, i) = sum / count; + } + + ++index; + } + + return reduced; +} + +// Upscale by 2 the image resolution +template<typename I> +I upscaling2(const I& original) +{ + box2d size(original.nrows() * 2, original.ncols() * 2); + I upscaled(size); + + mln_piter(I) p(upscaled.domain()); + int index = 0; + + for_all(p) + { + int i = p.col(); + int j = p.row(); + + if (i % 2 == 0 && j % 2 == 0) // Top left + opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 0); + else if (i % 2 == 0) // Bottom left + opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 2); + else if (j % 2 == 0) // Top right + opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 1); + else // Bottom right + opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 3); + + ++index; + } + + return upscaled; +} + + +template<typename C> +void writeKeypoints(std::list<Keypoint> keypoints, C& black, C& copy) +{ + for (std::list<Keypoint>::iterator it = keypoints.begin(); it != keypoints.end(); ++it) + { + unsigned o = it->getOctave(); + + if (o == 0) + { + mln_psite(C) p(it->getY() / 2, it->getX() / 2); + copy(p) = literal::red; + black(p) = literal::red; + } + else if (o == 1) + { + mln_psite(C) p(it->getY(), it->getX()); + copy(p) = literal::red; + black(p) = literal::red; + } + else + { + mln_psite(C) p(it->getY() * pow(2, o-1) - (o-1), it->getX() * pow(2, o-1) - (o-1)); + copy(p) = literal::red; + black(p) = literal::red; + } + } +} + +#endif /* ! VRAC_HH */ diff --git a/milena/sandbox/anthony/new-implem/src/vrac/vrac.hh b/milena/sandbox/anthony/new-implem/src/vrac/vrac.hh deleted file mode 100644 index fc9e3f2..0000000 --- a/milena/sandbox/anthony/new-implem/src/vrac/vrac.hh +++ /dev/null @@ -1,296 +0,0 @@ -#ifndef VRAC_HH -# define VRAC_HH - -# include <mln/core/image/image2d.hh> -# include <mln/data/all.hh> -# include <mln/io/pgm/all.hh> -# include <mln/io/ppm/save.hh> -# include <mln/core/alias/neighb2d.hh> -# include <mln/literal/all.hh> -# include <mln/value/int_s8.hh> - -# include <cmath> - -# include "../matrix.hh" - -//# include "keypoint.hh" -//# include "matrix.hh" - -using namespace mln; - -namespace vrac -{ - // Set the gaussian kernel - float *gaussian_kernel(float variance) - { - unsigned index = 0; - float *kernel = new float[49]; - Matrix matrix(7, 7); - float sum = 0; - - for (int i = -3; i < 4; ++i) - { - for (int j = -3; j < 4; ++j) - { - kernel[index] = exp(- (i*i + j*j) / (2.0 * variance * variance) ); - sum += kernel[index++]; - } - } - - sum = 1. / sum; - - for (int i = 0; i < 49; ++i) - kernel[i] *= sum; - - return kernel; - } - - // Apply the convolution of the image by the kernel - template<typename I> - void convolve(const I& original, I& filtered, float *kernel) - { - mln_piter(I) p(filtered.domain()); - window2d win; - - for (int i = -3; i < 4; ++i) - for (int j = -3; j < 4; ++j) - win.insert(i, j); - - // Iterate through all image sites - for_all(p) - { - // Create the window around the site - mln_qiter(window2d) q(win, p); - float sum = 0; - int index = 0; - - // Iterate through all window image sites - for_all(q) - { - if (filtered.has(q)) - sum += original(q) * kernel[index++]; - else - sum += 127 * kernel[index++]; - } - - filtered(p) = static_cast<int>(sum); - } - } - - // Blur the image thanks to a convolution matrix - template<typename I> - I blur(const I& original, float variance) - { - std::cout << "variance: " << variance << std::endl; - I filtered; - float *kernel = gaussian_kernel(variance); - - initialize(filtered, original); - convolve(original, filtered, kernel); - - return filtered; - } - - float *upscalingTL_kernel() - { - const static float one = 1.0 / 8.0; - const static float two = 2.0 / 8.0; - const static float three = 2.0 / 8.0; - const static float four = 3.0 / 8.0; - - float *kernel = new float[4]; - - kernel[0] = one; - kernel[1] = two; - kernel[2] = three; - kernel[3] = four; - - return kernel; - } - - float *upscalingTR_kernel() - { - const static float one = 2.0 / 8.0; - const static float two = 1.0 / 8.0; - const static float three = 3.0 / 8.0; - const static float four = 2.0 / 8.0; - - float *kernel = new float[4]; - - kernel[0] = one; - kernel[1] = two; - kernel[2] = three; - kernel[3] = four; - - return kernel; - } - - float *upscalingBL_kernel() - { - const static float one = 2.0 / 8.0; - const static float two = 3.0 / 8.0; - const static float three = 1.0 / 8.0; - const static float four = 2.0 / 8.0; - - float *kernel = new float[4]; - - kernel[0] = one; - kernel[1] = two; - kernel[2] = three; - kernel[3] = four; - - return kernel; - } - - float *upscalingBR_kernel() - { - const static float one = 3.0 / 8.0; - const static float two = 2.0 / 8.0; - const static float three = 2.0 / 8.0; - const static float four = 1.0 / 8.0; - - float *kernel = new float[4]; - - kernel[0] = one; - kernel[1] = two; - kernel[2] = three; - kernel[3] = four; - - return kernel; - } - - template<typename I> - unsigned upscalePixel(const I& original, int i, int j, int type) - { - float *kernel; - window2d win; - mln_psite(I) p(i, j); - float value = 0; - unsigned index = 0; - int iStart = 0; - int jStart = 0; - - if (type == 0) - { - kernel = upscalingTL_kernel(); - iStart = -1; - jStart = -1; - } - else if (type == 1) - { - kernel = upscalingTR_kernel(); - iStart = 0; - jStart = -1; - } - else if (type == 2) - { - kernel = upscalingBL_kernel(); - iStart = -1; - jStart = 0; - } - else - { - kernel = upscalingBR_kernel(); - iStart = 0; - jStart = 0; - } - - for (int ii = iStart; ii < iStart + 2; ++ii) - for (int jj = jStart; jj < jStart + 2; ++jj) - win.insert(ii, jj); - - mln_qiter(window2d) q(win, p); - - for_all(q) - { - if (original.has(q)) - { - value += original(q) * kernel[index]; - } - - ++index; - } - - return (static_cast<int>(value)); - } - // Downscale by 2 the image resolution - template<typename I> - I downscaling2(const I& original) - { - mln_piter(I) p(original.domain()); - window2d win; - int index = 0; - - // Initialize the rescaled image - box2d size(original.nrows() / 2, original.ncols() / 2); - I reduced(size); - - // Set the 2x2 window matrix - for (int i = 0; i < 2; ++i) - for (int j = 0; j < 2; ++j) - win.insert(i, j); - - // Iterate through all image sites - for_all(p) - { - // Get 1/4 of total pixels - if (index % 2 == 0) - { - int i = (index % original.ncols()) / 2; - int j = (index / original.ncols()) / 2; - int count = 0; - int sum = 0; - mln_qiter(window2d) q(win, p); - - // Iterate through all window image sites - for_all(q) - { - if (original.has(q)) - { - sum += original(q); - ++count; - } - } - - if (reduced.has(point2d(j, i))) - opt::at(reduced, j, i) = sum / count; - } - - ++index; - } - - return reduced; - } - - // Upscale by 2 the image resolution - template<typename I> - I upscaling2(const I& original) - { - box2d size(original.nrows() * 2, original.ncols() * 2); - I upscaled(size); - - mln_piter(I) p(upscaled.domain()); - int index = 0; - - for_all(p) - { - int i = p.col(); - int j = p.row(); - - if (i % 2 == 0 && j % 2 == 0) // Top left - opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 0); - else if (i % 2 == 0) // Bottom left - opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 2); - else if (j % 2 == 0) // Top right - opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 1); - else // Bottom right - opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 3); - - ++index; - } - - return upscaled; - } -} - -#endif /* ! VRAC_HH */ diff --git a/milena/sandbox/anthony/src/main.cc b/milena/sandbox/anthony/src/main.cc index fae3c64..59fa1ce 100644 --- a/milena/sandbox/anthony/src/main.cc +++ b/milena/sandbox/anthony/src/main.cc @@ -403,6 +403,7 @@ void find_min(T& min, const I& upper, const I& lower, const P& pUpper, const P& { mln_niter(neighb2d) nUpper(c8(), pUpper); mln_niter(neighb2d) nLower(c8(), pLower); + T tmp = min; // Upper processing for_all(nUpper) @@ -413,6 +414,8 @@ void find_min(T& min, const I& upper, const I& lower, const P& pUpper, const P& for_all(nLower) if (lower(nLower) < min) min = lower(nLower); + + std::cout << tmp << " >= " << min << std::endl; } // Find the maximum value in the upper and lower layers around p @@ -421,6 +424,7 @@ void find_max(T& max, const I& upper, const I& lower, const P& pUpper, const P& { mln_niter(neighb2d) nUpper(c8(), pUpper); mln_niter(neighb2d) nLower(c8(), pLower); + T tmp = max; // Upper processing for_all(nUpper) @@ -431,6 +435,8 @@ void find_max(T& max, const I& upper, const I& lower, const P& pUpper, const P& for_all(nLower) if (lower(nLower) > max) max = lower(nLower); + + std::cout << tmp << " >= " << max << std::endl; } template<typename T, typename I, typename P> @@ -473,30 +479,44 @@ bool hasEdgeResponse(const I& dog, const P& p, const T& center) // Build the extrema image template<typename I, typename C> void buildExtrema(C& extrema, - const I& original, std::vector< std::vector<I> >& dogSpace, std::vector<Keypoint>& keypoints) { // Number of scales (gaussian meaning) unsigned scales = dogSpace.at(0).size(); + std::cout << "Scales: " << scales << std::endl + << "Resolutions: " << dogSpace.size() << std::endl; + // Iterates through all scales - for (unsigned i = 0; i < scales; ++i) + for (unsigned i = 0; i < scales - 2; ++i) { + std::cout << "scales ENTER" << std::endl; + // Iterates through all resolutions - for (unsigned j = 1; j < dogSpace.size() - 1; ++j) + for (unsigned j = 1; j < dogSpace.size() - 2; ++j) { + std::cout << "resolutions ENTER" << std::endl; I current = dogSpace.at(j).at(i); I upper = dogSpace.at(j+1).at(i); I lower = dogSpace.at(j-1).at(i); + C debugDraw1 = data::convert(value::rgb8(), upper); + C debugDraw2 = data::convert(value::rgb8(), lower); + + mln_piter(I) p(current.domain()); + int first = 0; + int bound = 1000; + unsigned threshold = 0; + for_all(p) { value::int_u8 min = 255; value::int_u8 max = 0; value::int_u8 center = 0; + ++first; mln_niter(neighb2d) n(c8(), p); center = current(p); @@ -507,26 +527,47 @@ void buildExtrema(C& extrema, // Find the min and max in the current neighborhood (c8) find_extremum(min, max, current, n); - if (center <= min) + if ((unsigned) center + threshold < min) { + // Find the min in other levels of the pyramid find_min(min, upper, lower, pUpper, pLower); - if (center < min && !hasEdgeResponse(current, p, center)) + if ((unsigned) center + threshold < min && !hasEdgeResponse(current, p, center)) { + std::cout << center << " < " << min << std::endl; + + if (first > bound) + { + debugDraw1(pUpper) = literal::yellow; + debugDraw2(pLower) = literal::yellow; + + + ++first; + } mln_psite(I) pOriginal(p.row() * pow(2, (j-1)), p.col() * pow(2, (j-1))); extrema(pOriginal) = literal::red; keypoints.push_back(Keypoint(p.row(), p.col(), i, j, false)); } } - else if (center >= max) + else if (center > (unsigned) max + threshold) { // Find the max in other levels of the pyramid find_max(max, upper, lower, pUpper, pLower); - if (center > max && !hasEdgeResponse(current, p, center)) + if (center > (unsigned) max + threshold && !hasEdgeResponse(current, p, center)) { + std::cout << center << " > " << max << std::endl; + + if (first > bound) + { + debugDraw1(pUpper) = literal::yellow; + debugDraw2(pLower) = literal::yellow; + + ++first; + } + mln_psite(I) pOriginal(p.row() * pow(2, (j-1)), p.col() * pow(2, (j-1))); extrema(pOriginal) = literal::red; @@ -534,6 +575,8 @@ void buildExtrema(C& extrema, } } } + io::ppm::save(debugDraw1, "debug_upper.ppm"); + io::ppm::save(debugDraw2, "debug_lower.ppm"); } } } @@ -661,6 +704,7 @@ void discardLowContrastKeypoints(const std::vector< std::vector<I> >& dogSpace, C& extrema) { Keypoint k_old(0, 0, 0, 0, true); + bool hasMoved = false; for (unsigned i = 0; i < keypoints.size(); ++i) { @@ -681,48 +725,36 @@ void discardLowContrastKeypoints(const std::vector< std::vector<I> >& dogSpace, if (isMajorOffset) { - std::cout << "<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << std::endl; - std::cout << "First order matrix:" << std::endl; - firstOrder.print(); - - std::cout << "Second order matrix:" << std::endl; - secondOrder.print(); - - std::cout << "Offset: " << std::endl; - x.print(); - - std::cout << "k_old: " << k_old.getI() << " " << k_old.getJ() << std::endl; - std::cout << "k: " << k.getI() << " " << k.getJ() << std::endl; - bool hasMoved = k.add(x, k_old); - std::cout << "k++: " << k.getI() << " " << k.getJ() - << "\thasMoved: " << hasMoved << std::endl; + hasMoved = k.add(x, k_old); point2d p(k.getI(), k.getJ()); - std::cout << "Final point: " << extrema.domain() << "\t" << p << std::endl; if (hasMoved && extrema.has(p) && p.row() >= 0 && p.row() < geom::max_row(extrema) && p.col() >= 0 && p.col() < geom::max_col(extrema)) { - std::cout << "VALID" << std::endl; - extrema(p) = literal::red; + // extrema(p) = literal::red; k_old = keypoints.at(i); keypoints.at(i--) = k; } - - std::cout << std::endl; } else { point2d p(k.getI(), k.getJ()); - extrema(p) = literal::red; + + if (hasMoved) + extrema(p) = literal::green; + else + extrema(p) = literal::red; + + hasMoved = false; } } } } // Main entry point -int main(int argc, char** argv) +int main(void)//int argc, char** argv) { typedef image2d<value::int_u8> I; typedef image2d<value::rgb8> C; @@ -736,7 +768,7 @@ int main(int argc, char** argv) C extrema, improved; bool black = true; - io::pgm::load(original, "images/lena.pgm"); + io::pgm::load(original, "images/keith.pbm"); if (black) { @@ -752,7 +784,7 @@ int main(int argc, char** argv) // Localization buildScaleSpace(scaleSpace, original, octave_level, blur_level); buildDifferenceOfGaussianSpace(scaleSpace, dogSpace); - buildExtrema(extrema, original, dogSpace, keypoints); + buildExtrema(extrema, dogSpace, keypoints); discardLowContrastKeypoints(dogSpace, keypoints, improved); // Processing diff --git a/milena/sandbox/anthony/test-opencv/Makefile b/milena/sandbox/anthony/test-opencv/Makefile deleted file mode 100644 index 1634b35..0000000 --- a/milena/sandbox/anthony/test-opencv/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -.PHONY: cv - -CCACHE= -CXX=g++ -SRC=main.cpp -LIBS=-L/opt/local/include -lopencv_highgui -lopencv_core -lopencv_features2d -lopencv_nonfree -D_GNU_SOURCE -OUTPUT=cv -CLEAN=${OUTPUT} - -all: cv - -cv: - ${CCACHE} ${CXX} -O2 ${LIBS} ${SRC} -o ${OUTPUT} - -debug: - ${CCACHE} ${CXX} -g -ggdb -O0 ${LIBS} ${SRC} -o ${OUTPUT} - -clean: - rm -rf ${CLEAN} diff --git a/milena/sandbox/anthony/test-opencv/keith.pbm b/milena/sandbox/anthony/test-opencv/keith.pbm deleted file mode 100644 index b0997a3..0000000 Binary files a/milena/sandbox/anthony/test-opencv/keith.pbm and /dev/null differ diff --git a/milena/sandbox/anthony/test-opencv/main.cpp b/milena/sandbox/anthony/test-opencv/main.cpp deleted file mode 100644 index c91a6c3..0000000 --- a/milena/sandbox/anthony/test-opencv/main.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include <iostream> -#include <vector> - -#include "opencv2/core/core.hpp" -#include "opencv2/features2d/features2d.hpp" -#include "opencv2/nonfree/features2d.hpp" -#include "opencv2/highgui/highgui.hpp" - - -// MAIN ENTRY POINT -int main(int argc, char* argv[]) -{ - const cv::Mat input = cv::imread("tongue.pbm"); - cv::SiftFeatureDetector detector; - std::vector<cv::KeyPoint> keypoints; - detector.detect(input, keypoints); - - cv::Mat output; - cv::drawKeypoints(input, keypoints, output); - cv::imwrite("sift.jpg", output); - - return 0; - - - - // std::string inputPath, inputPath2, toolchainPath, outputPath; - // std::deque<ourfilters::eFilter> toolchain; - // bool* multithread = new bool(true); - - // int validCommandLine = getCommandLine(argc, argv, inputPath, - // inputPath2, - // toolchainPath, - // outputPath, - // multithread); - - // bool twoSources = inputPath2.length() > 0; - - // if (!validCommandLine) - // return errors::invalidCommandLine(); - - // parser::getSteps(toolchainPath, toolchain); - - // if (!(*multithread)) - // { - // std::cout << "single-threader" << std::endl; - // tbb::task_scheduler_init intit(1); - // } - - // tbb::pipeline pipeline; - - // Picker picker(inputPath, inputPath2, twoSources); - // pipeline.add_filter(picker); - - // ApplyFilters applicator(toolchain); - // pipeline.add_filter(applicator); - - // Writer writer(outputPath, - // picker.get_codec(), - // picker.get_fps(), - // picker.get_dimensions()); - // pipeline.add_filter(writer); - - // pipeline.run(128); - - // return 0; -} diff --git a/milena/sandbox/anthony/test-opencv/tongue.pbm b/milena/sandbox/anthony/test-opencv/tongue.pbm deleted file mode 100644 index a85a0f6..0000000 --- a/milena/sandbox/anthony/test-opencv/tongue.pbm +++ /dev/null @@ -1,29 +0,0 @@ -P5 -512 -512 -255 -���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������õ���}yusqpppqtx~����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ǯ��xrpsuwwxxyyyyyyxxwuqr|��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ϰ�|squwxxyyyyyyyyyyyyyyyyyyywsr���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̣�tquwyyyyyyyyyyyyyyyyyyyyyyyyyyyxuq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֪�srwxyyxyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyuq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vqvxyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyr|�������������������������������������������������������ѻ��~ytqpqrssssrqppsw}��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������封qtxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyvt��������������������������������������������������ݻ�upsvwxxyyyyyyyyyyyyyxwvspv���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|qvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyxq����������������������������������������������ᶍxptwxyyyyyyyyyyyyyyyyyyyyyyyyxvrt����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{qwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyp�������������������������������������������ʗzquxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxuq~�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~pwyyyyyyyyyyyyyyyyyyyyyyyyyxwutsrrstvwyyyyyyyyyyyyyyyyxq���������������������������������������ssxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̇qwyyyyyyyyyyyyyyyyyyyyyyyywrry���������{rswxyyyyyyyyyyyyywr������������������������������������﵁quyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyvq�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������styyyyyyyyyyyyyyyyyyyyyyyxss��������������Ý|qvyyyyyyyyyyyyyvy������������������������������������qvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~rxyyyyyyyyyyyyyyyyyyyyyyxrw������������������赂qwyyyyyyyyyyyyt��������������������������������ϋqvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyuu�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rvyyyyyyyyyyyyyyyyyyyyyyysv�����������������������zsyyyyyyyyyyyyq������������������������������styyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Մrxyyyyyyyyyyyyyyyyyyyyyywr��������������������������ޑqxyyyyyxyyyywv����������������������������~rxyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxp�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vtyyyyyyyyyyyyyyyyyyyyyyys|������������������������������swyyyyxyyyyys��������������������������qvyyyyxyyyyyyyyyyxxyyxyyyyyyxwvtqprrppsuwxyyyyyyyyyyyyyyyyyxq�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qwyyyyyyyyyyyyyyyyyyyyyyxq���������������������������������uvyyxyyyyyyxr�����������������������ˀryyyyyyyyyyyyyyyyyyyyyxyyywvqs|�����þ����vquwyyyyyyyyyyyyyyyxr��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyywr�����������������������������������vwyxyyyyyyyu�����������������������tuyyyyyyyyyyyyyyyyyyyyyyyxvqx���������������Ը�yqvyyyyyyyyyyyyyyvv������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyuw�������������������������������������sxyyyyyyyyxr��������������������qxyyyyyyyyyyyyyyxxyyyyyyxss���������������������ఃqwyyyyyyyyyyyyyt����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������݀syyyyyyyyyyyyyyyyyyyyyyyu{���������������������������������������qyyyyyyyyys������������������ڄryyyyyyyyyyyyyyyyyyyyyyxrw��������������������������~ryyyyyyyyyyyyyq���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}tyyyyyyyyyyyyyyyyyyyyyyyu}�����������������������������������������syyyyyxyyxu�����������������ytyyyyyyyyyyyyyyyyyyyyyysw������������������������������rwyyyyyyyyyyyxr�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}tyyyyyyyyyyyyyyxyyyyyyyyu������������������������������������������zwyyyyyyyyr����������������uuyyyyyyyyyyyyyyyyyyyyyus����������������������������������vvyyyyyyyyyyyu������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~tyyyyyyyyyyyyyyyxyyyyyyyt}��������������������������������������������qyyyyyyyyw~��������������rwyyyyyyyyyyyyyyyyyyyyxr�������������������������������������xvyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syxyyyyyyyyyyyyyyyyyyyyyww���������������������������������������������}wyyyyyyyyq�������������qxyyyyyyyyyyyyyyyyyyyywr���������������������������������������wwyyyyyyyyyyxv��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyxyyyyyyyyyyyyyq�����������������������������������������������qyyyyyyyys������������pyyyyyyyyyyyyyyyyyyyyyux�����������������������������������������ryyyyyyyyyyys��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyxyyyyyyyyyyyyyyyyyyys������������������������������������������������uxyyyyyyyw}����������pyyyyyyyyyyyyyyyyyyyyyt}�������������������������������������������ryyyyyyyyyyxt������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyxu������������������������������������������������wyyyyyyyxr���������pxyyyyyyyyyyyyyyyyyyyyv}��������������������������������������������|wyyyyyyyyyys�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������txyyyyyyyyyyyyyyyyyyyyyyyyr��������������������������������������������������vyyyyyyyyr��������qyyyyyyyyyyyyyyyyyyyyywy����������������������������������������������qyyyyyyyyyyxt���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyyyyyyyyyyyyyyyyyxv��������������������������������������������������uyyyyyyyyu�������qyyyyyyyyyyyyyyyyyyyyyyr�����������������������������������������������yxyyyyyyyyyys���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyt��������������������������������������������������vyyyyyyyyxy�����qxyyyyyyyyyyyyyyyyyyyyyt�������������������������������������������������uyyyyyyyyyyxw�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyq��������������������������������������������������xxyyyyyyyyyq����swyyyyyyyyyyyyyyyyyyyyyxr�������������������������������������������������pyyyyyyyyyyyr������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{vyyyyyyyyyyyyyyyyyyyyyyyyyxy��������������������������������������������������qyyyyyyyyyyq���uwyyyyyyyyyyyyyyyyyyyyyyw~�������������������������������������������������ryyyyyyyyyyyw~�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyv���������������������������������������������������uyyyyyyyyyyu��|vyyyyyyyyyyyyyyyyyyyyyyyw��������������������������������������������������vxyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rxyyyyyyyyyyyyyyyyyyyyyyyyyyu��������������������������������������������������tyyyyyyyyyyyy|�vyyyyyyyyyyyyyyyyyyyyyyyyw}�������������������������������������������������wxyyyyyyyyyyyt����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyyyyyyyyyv��������������в����������������������������������tyyyyyyyyyyyyxwyyyyyyyyyyyyyyyyyyyyyyyyyxs�������������������������������������������������tyyxyyyyyyyyyxv��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyxw����������ȣ�uqtwvsqy���������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys�������������������������������������������������qyyxyyyyyyyyyyq�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyyyyyyyyyyyyyyyyyyyyyywz�����Ҽ�~srvxyyyyyyxsr������������������������txyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys��������������ֳ�yz����������������������������tyyyyyyyyyyyyyv�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyywry��}vqtwxyyyyyyyyyyyxtr���������������������uwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyvy����������ܲ�vquwxwup�������������������������wxyyyyyyyyyyyyyxs�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ywyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyxwwwxyyyyyyyyyyyyyyyyyxts�����������������rxyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyvu������ն�xpvxyyyyyyys{�����������������������syyyyyyyyyyyyyyyr�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyss�������������ryyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxrx����wquwyyyyyyyyyyyuw���������������������ryyyyyyyyyyyyyyyyw���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyytr��������˪�rvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxutuvxyyyyyyyyyyyyyyyvu�������������������uxyyyyyyyyyyyyyyyyyr���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywrs|���}tqvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyws����������������rwyyyyyyyyyyyyyyyyyyr��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywvvvwxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxq�������������~rxyyyyyyyyyyyyyyyyyyyw�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyxyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyytu�������Ų�zrwyyyyyyyyyyyyyyyyyyyyyxs������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxtqx~~|wrquxyyyyyyyyyyyyyyyyyyyyyyyyr�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyxyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyxwwwxyyyyyyxyyyyyyyyyyyyyyyyyyyyyw�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyt���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyv��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxv�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyp������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyxyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyu�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxy����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyxyyyyyyyyyq���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|wyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyt���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyw{�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxq�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qxyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyw����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxr����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyw���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyxs�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyr������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyw�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyxyyyyyyyyyyyyyyr����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������txyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyx{��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyu�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxu�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyw���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyxyyyyyq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxwvtrpqrrppruvxyyyyyyyyyyyyxyyyyyyyyyyyyyxyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyu�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������txyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyxuqs|������������xqswyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxs�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyxtqz����������������۾�}qtxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyuqz����������������������꿏tsxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxv���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxss����������������������������љusyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������xwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywrw��������������������������������Ԕruyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxwwwwxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyywx������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyywqz������������������������������������Ƅqxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywvtqptwz|}}|yvspqtvxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyr������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyywr{����������������������������������������utyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxvqs{�������������Ⱦ���yqswyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxw����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyxry�������������������������������������������Ӈqxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxtqy��������������������������ssxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyr���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyysu�����������������������������������������������svyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxuqz�����������������������������țyqwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxu�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~uyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxuq���������������������������������������������������~ryyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyywqv�����������������������������������~qwyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyys������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syxyyyyyyyyyyyyyyyyyyyyyyyyyyyywq������������������������������������������������������pxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyxtq���������������������������������������{sxyyyyyyyyyyyyyyyyyyyyyyxyyyxyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyr�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyxyxry���������������������������������������������������������utyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyxst��������������������������������������������rvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyv����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyxyyyyyyxyyyyyyyyyyyyyyyyyyyyur�����������������������������������������������������������҄rxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxvqx�����������������������������������������������ƀsyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rxyyxyyyyyxyyyyyyyyyyyyyyyyyy}v���������������������������������������������������������������rvyyyyyyyyyyxyyyyyyyyyyyyyyyyyyup���������������������������������������������������qxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxt������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������twyyyyyyyyyyyyyyyyyyyyyyyyyyz�b�����������������������������������������������������������������ŀrxyyyyyyyyxyyyyyyyyyyyyyyyxsr��������������������������������������������������������swyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyt�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������wvyyyyyyyyyyyyxyyyyyxyyyyyyy~{Ma������������������������������������������������������������������usyyyyyyyyyyyyyyyyyyyyxvqx�����������������������������������������������������������vvyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{uyyyyyyyyyyyxyyyyyyyyyyyyy{�g%���������������������������������������������������������������������������������������������������������������������������������������������������������zuyyyyyyyyyyyyyyyyyyyyyyyr0--�����������������������������pxyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyut�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz�Mxyyyyyyvs��������������������̑sq9--M}|xyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyym- "(09EO]lv{�|zyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz|��J-)Jgvz~��~}}|||{{{{{{{zzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy{~>-S�zyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr|������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syyyyyyyyyyyyyyyyyyyyyyyyyyy~_-=o�|yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyy}s"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy�Z yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyr}������������{wyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyy�W--a�yyxxyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyytz����������������sxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyeyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyxr�������������������syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz<-eyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyu���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|vyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyq��������������������~vyyyyyyyyyyyyy:yyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyxt���������������������ryyyyyyyyyyyyyyWyyyyyyyyyyyyyyyyyyyyyyyyyyyyys����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyr����������������������uwyyyyyyyyyyyyyy6yyyyyyyyyyyyxxyyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr�����������������������ryyyyyyyyyyyyyyy�Byyyyyyyyyyyyyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyyyww�����������������������syyyyyyyyyyyyyyy{q-`~xyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyyxx�����������������������vxxxyyyyyyyyyyyyyy{n --m|yyyyyxyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyt��������������������{xyyyyyyyyyyyyyyyyyyyyyyyyyyyyzv~yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyxw���������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyy|m yyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyv�����������������������ryyyyyyyyyyyyyyyyyxyyyyyyyyy|m -yzyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyxyyyu����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������wyyyyyyyyyyxyyyyyyyyyyyxyyyyyyyyyu�����������������yxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxt���������������������������wyyyyyyyyyyyyyyyyyyyyyyxy|iyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyxwxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxt�����������������������������syyyyyyyyyyyyyyyyyyyyyyyy}dyyyyyyyyyyyyyyyyyyyyyyyyyyyywy��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyw{������������������������������syyyyyyyxyyyyyyyyyyyyyyyyMyyyyyyyyyyyyyyyyyyxyyyyr����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyys�������������������������������vyyyyyyyyyyyyyyyyyyyyyyyzzyyyyyyyyyyyyyyyxp�����������������������������������`--�-����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyxyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyZ--{�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy|w����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz�D-d����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zuyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyy�Z -Z����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq%-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zrxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy|g,->��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������宀qtxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz}k<����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ø����~zwusqqppppoppqrtvz~����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� \ No newline at end of file -- 1.7.10.4
participants (1)
-
Anthony Seure