Slic3r-1.3.0/000077500000000000000000000000001327442435500126635ustar00rootroot00000000000000Slic3r-1.3.0/.github/000077500000000000000000000000001327442435500142235ustar00rootroot00000000000000Slic3r-1.3.0/.github/CONTRIBUTING.md000066400000000000000000000100231327442435500164500ustar00rootroot00000000000000Did you encounter an issue with using Slic3r? Fear not! This guide will help you to write a good bug report in just a few, simple steps. There is a good chance that the issue, you have encountered, is already reported. Please check the [list of reported issues](https://github.com/alexrj/Slic3r/issues) before creating a new issue report. If you find an existing issue report, feel free to add further information to that report. If you are reporting an issue relating to a release version of Slic3r, it would help a lot if you could also confirm that the behavior is still present in the newest build [(windows)](https://bintray.com/lordofhyphens/Slic3r/slic3r_dev/). Otherwise your issue will be closed as soon as someone else isn't able to reproduce it on current master. When possible, please include the following information when [reporting an issue](https://github.com/alexrj/Slic3r/issues/new): * Slic3r version (See the about dialog for the version number. If running from git, please include the git commit ID from `git rev-parse HEAD` also.) * Operating system type + version * Steps to reproduce the issue, including: * Command line parameters used, if any * Slic3r configuration file (Use ``Export Config...`` from the ``File`` menu - please don't export a bundle) * Expected result * Actual result * Any error messages * If the issue is related to G-code generation, please include the following: * STL, OBJ or AMF input file (please make sure the input file is not broken, e.g. non-manifold, before reporting a bug) * a screenshot of the G-code layer with the issue (e.g. using [Pronterface](https://github.com/kliment/Printrun) or preferably the internal preview tab in Slic3r). * If the issue is a request for a new feature, be ready to explain why you think it's needed. * Doing more prepatory work on your end makes it more likely it'll get done. This includes the "how" it can be done in addition to the "what". * Define the "What" as strictly as you can. Consider what might happen with different infills than simple rectilinear. Please make sure only to include one issue per report. If you encounter multiple, unrelated issues, please report them as such. Simon Tatham has written an excellent on article on [How to Report Bugs Effectively](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html) which is well worth reading, although it is not specific to Slic3r. Do you want to help fix issues in or add features to Slic3r? That's also very, very welcome :) * A good place to start if you can is to look over the [Pull Request or Bust](https://github.com/alexrj/Slic3r/milestones/Pull%20Request%20or%20Bust) milestone. This contains all of the things (mostly new feature requests) that there isn't time or resources to address at this time. * Things that are probably fixable via scripts (usually marked as such) have the lowest bar to getting something that works, as you don't need to recompile Slic3r to test. * If you're starting on an issue, please say something in the related issues thread so that someone else doesn't start working on it too. * If there's nothing in the [Pull Request or Bust](https://github.com/alexrj/Slic3r/milestones/Pull%20Request%20or%20Bust) milestone that interests you, the next place to look is for issues that don't have a milestone. Lots of people commit ideas to Slic3r, and it's difficult to keep up and sort through them. * Before sending a pull request, please make sure that the changes you are submitting are contained in their own git branch, as PRs merge histories. * Pull requests that contain unrelated changes will be rejected. * A common workflow is to fork the master branch, create your new branch and do your work there. git-rebase and git-cherry-pick are also helpful for separating out unrelated changes. * If you are pushing Slic3r code changes that touch the main application, it is very much appreciated if you write some tests that check the functionality of the code. It's much easier to vet and merge in code that includes tests and doing so will likely speed things up. Slic3r-1.3.0/.github/ISSUE_TEMPLATE.md000066400000000000000000000020621327442435500167300ustar00rootroot00000000000000### Version _Version of Slic3r used goes here_ _Use `About->About Slic3r` for release versions._ _Do not report Prusa3D Slic3r bugs here without confirming it is a problem on a development release of Slic3r, or your issue will be closed. *Only* use normal Slic3r version IDs._ _For -dev versions, use `git describe --tag` or get the hash value for the version you downloaded or `git rev-parse HEAD`_ ### Operating system type + version _What OS are you using, and state any version #s_ ### Behavior * _Describe the problem_ * _Steps needed to reproduce the problem_ * _If this is a command-line slicing issue, include the options used_ * _Expected Results_ * _Actual Results_ * _Screenshots from __*Slic3r*__ preview are preferred_ _Is this a new feature request?_ Related guides for writing feature requests: http://meta.stackexchange.com/a/259196 http://nickohrn.com/2013/09/write-great-feature-request-bug-report/ #### STL/Config (.ZIP) where problem occurs _Upload a zipped copy of an STL and your config (`File -> Export Config`)_ Slic3r-1.3.0/.gitignore000066400000000000000000000003531327442435500146540ustar00rootroot00000000000000build Build Build.bat MYMETA.json MYMETA.yml _build blib xs/buildtmp *.o MANIFEST.bak xs/MANIFEST.bak xs/assertlib* .init_bundle.ini local-lib package/osx/Slic3r*.app *.dmg *.swp *.swo CMakeFiles *.orig *.a core CMakeCache.txt *.cmake Slic3r-1.3.0/.travis.yml000066400000000000000000000030111327442435500147670ustar00rootroot00000000000000language: perl before_install: - sh package/linux/travis-decrypt-key install: - export BOOST_DIR=$HOME/boost_1_63_0 - export SLIC3R_STATIC=1 - export CXX=g++-4.9 - export CC=g++-4.9 - source $HOME/perl5/perlbrew/etc/bashrc script: - bash package/linux/travis-setup.sh - perlbrew switch slic3r-perl - perl ./Build.PL after_success: - eval $(perl -Mlocal::lib=$TRAVIS_BUILD_DIR/local-lib) - LD_LIBRARY_PATH=$WXDIR/lib package/linux/make_archive.sh linux-x64 - package/linux/appimage.sh x86_64 - package/deploy/sftp.sh linux ~/slic3r-upload.rsa *.bz2 Slic3r*.AppImage - package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa AppImage Slic3r*.AppImage - package/deploy/sftp-symlink.sh linux ~/slic3r-upload.rsa tar.bz2 *.bz2 branches: only: - master - xsgui cache: apt: true directories: - "$HOME/cache" addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-4.9 - gcc-4.9 - libgtk2.0-0 - libgtk2.0-dev - freeglut3 ssh_known_hosts: dl.slic3r.org notifications: irc: channels: - chat.freenode.net#slic3r on_success: change on_failure: always use_notice: true dist: trusty env: matrix: global: - secure: eEVRZNMv7FM6jrOU9iAFkDhWxFQ1WtHBEaObImcvtFUxy6vWSt3ehFFeTRouj3uHQAnbvUzziDyvPPm8/95alv5g/du8ML6YzzqKBKfazM0xQ7SF6R2DQL8lfFIp+RSV7T02byEP1f1g7Zva7xH9szIlDcSfU0pXW4KWbkBFMd8= - secure: gj338h+qHGccTD/VQFmEJkqdg2McIe2pO0iZ4Ae9BvY5vxkIML4BpoYZQXQTqiAOETnUjlcknY9lx0hI/PfkDD9MSJc5BC/3fMYRCu3SgAclEwklWf9vvtodUeT69mtnZuw1zze1nTbExuOw2mepbqFjxKKMl+9l5oCz4O54fXU= Slic3r-1.3.0/Build.PL000066400000000000000000000126651327442435500141710ustar00rootroot00000000000000#!/usr/bin/perl use strict; use warnings; use Config; use File::Spec; my %prereqs = qw( Devel::CheckLib 0 Encode 0 Encode::Locale 1.05 ExtUtils::CppGuess 0 ExtUtils::MakeMaker 6.80 ExtUtils::ParseXS 3.35 File::Basename 0 File::Spec 0 Getopt::Long 0 Module::Build::WithXSpp 0.14 Moo 1.003001 POSIX 0 Scalar::Util 0 Test::More 0 Thread::Semaphore 0 IO::Scalar 0 threads 1.96 Time::HiRes 0 Unicode::Normalize 0 ); my %recommends = qw( Class::XSAccessor 0 Test::Harness 0 Thread::Queue 0 threads::shared 0 ); my $sudo = grep { $_ eq '--sudo' } @ARGV; my $gui = grep { $_ eq '--gui' } @ARGV; my $xs_only = grep { $_ eq '--xs' } @ARGV; if ($gui) { %prereqs = qw( Class::Accessor 0 Wx 0.9918 Socket 2.016 ); %recommends = qw( Growl::GNTP 0.15 Wx::GLCanvas 0 OpenGL 0 LWP::UserAgent 0 Net::Bonjour 0 ); if ($^O eq 'MSWin32') { $recommends{"Win32::TieRegistry"} = 0; # we need an up-to-date Win32::API because older aren't thread-safe (GH #2517) $prereqs{'Win32::API'} = 0.79; } } elsif ($xs_only) { %prereqs = %recommends = (); } my @missing_prereqs = (); if ($ENV{SLIC3R_NO_AUTO}) { foreach my $module (sort keys %prereqs) { my $version = $prereqs{$module}; next if eval "use $module $version; 1"; push @missing_prereqs, $module if exists $prereqs{$module}; print "Missing prerequisite $module $version\n"; } foreach my $module (sort keys %recommends) { my $version = $recommends{$module}; next if eval "use $module $version; 1"; print "Missing optional $module $version\n"; } } else { my @try = ( $ENV{CPANM} // (), File::Spec->catfile($Config{sitebin}, 'cpanm'), File::Spec->catfile($Config{installscript}, 'cpanm'), ); my $cpanm; foreach my $path (@try) { if (-e $path) { # don't use -x because it fails on Windows $cpanm = $path; last; } } if (!$cpanm) { if ($^O =~ /^(?:darwin|linux)$/ && system(qw(which cpanm)) == 0) { $cpanm = 'cpanm'; } } die <<'EOF' cpanm was not found. Please install it before running this script. There are several ways to install cpanm, try one of these: apt-get install cpanminus curl -L http://cpanmin.us | perl - --sudo App::cpanminus cpan App::cpanminus If it is installed in a non-standard location you can do: CPANM=/path/to/cpanm perl Build.PL EOF if !$cpanm; my @cpanm_args = (); push @cpanm_args, "--sudo" if $sudo; # install local::lib without --local-lib otherwise it's not usable afterwards if (!eval "use local::lib qw(local-lib); 1") { my $res = system $cpanm, @cpanm_args, 'local::lib'; warn "Warning: local::lib is required. You might need to run the `cpanm --sudo local::lib` command in order to install it.\n" if $res != 0; } push @cpanm_args, ('--local-lib', 'local-lib'); # make sure our cpanm is updated (old ones don't support the ~ syntax) system $cpanm, @cpanm_args, 'App::cpanminus'; my %modules = (%prereqs, %recommends); foreach my $module (sort keys %modules) { my $version = $modules{$module}; my @cmd = ($cpanm, @cpanm_args); # temporary workaround for upstream bug in test push @cmd, '--notest' if $module =~ /^(?:OpenGL|Math::PlanePath|Test::Harness|IO::Scalar)$/; push @cmd, "$module~$version"; my $res = system @cmd; if ($res != 0) { if (exists $prereqs{$module}) { push @missing_prereqs, $module; } else { printf "Don't worry, this module is optional.\n"; } } } if (!$gui) { # clean xs directory before reinstalling, to make sure Build is called # with current perl binary if (-e './xs/Build') { if ($^O eq 'MSWin32') { system '.\xs\Build', 'distclean'; } else { system './xs/Build', 'distclean'; } } my $res = system $cpanm, @cpanm_args, '--reinstall', '--verbose', './xs'; if ($res != 0) { die "The XS/C++ code failed to compile, aborting\n"; } } } if (@missing_prereqs) { printf "The following prerequisites failed to install: %s\n", join(', ', @missing_prereqs); exit 1; } elsif (!$gui) { eval "use App::Prove; 1" or die "Failed to load App::Prove"; my $res = App::Prove->new->run ? 0 : 1; if ($res == 0) { print "If you also want to use the GUI you can now run `perl Build.PL --gui` to install the required modules.\n"; } else { print "Some tests failed. Please report the failure to the author!\n"; } exit $res; } __END__ Slic3r-1.3.0/LICENSE000066400000000000000000001033301327442435500136700ustar00rootroot00000000000000 GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . Slic3r-1.3.0/README.md000066400000000000000000000625651327442435500141600ustar00rootroot00000000000000![](var/Slic3r_128px.png) Slic3r [![Build Status](https://travis-ci.org/slic3r/Slic3r.svg?branch=master)](https://travis-ci.org/slic3r/Slic3r) [![Build status](https://ci.appveyor.com/api/projects/status/8iqmeat6cj158vo6?svg=true)](https://ci.appveyor.com/project/lordofhyphens/slic3r) [![Build Status](http://osx-build.slic3r.org:8080/buildStatus/icon?job=Slic3r)](http://osx-build.slic3r.org:8080/job/Slic3r) ====== We have automated builds for Windows (64-bit) and OSX (>= 10.7). [Get a fresh build now](http://dl.slic3r.org/dev/) and stay up-to-date with the development! The MacOS X build server is kindly sponsored by: ### So, what's this Slic3r? Slic3r is mainly a **toolpath generator** for 3D printers: it reads 3D models (STL, OBJ, AMF, 3MF) and it converts them into **G-code** instructions for 3D printers. But it does much more than that, see the [features list](#features) below. Slic3r was born in **2011** within the RepRap community and thanks to its high configurability became the swiss-army knife for 3D printing. It served as a platform for experimenting several **new ideas that later became technology standards**, such as multiple extruders, brim, variable-height layers, per-object settings, modifiers, post-processing scripts, G-code macros and more. Despite being based on volunteer efforts, Slic3r is still pushing the boundaries of 3D printing. Slic3r is: * **Open:** it is totally **open source** and it's **independent from any commercial company** or printer manufacturer. We want to keep 3D printing open and free. * **Compatible:** it supports all the known G-code dialects (Marlin, Repetier, Mach3, LinuxCNC, Machinekit, Smoothie, Makerware, Sailfish). * **Advanced:** many configuration options allow for fine-tuning and full control. While novice users often need just few options, Slic3r is mostly used by advanced users. * **Community-driven:** new features or issues are discussed in the [GitHub repository](https://github.com/alexrj/Slic3r/issues). Join our collaborative effort and help improve it! * **Robust:** the codebase includes more than 1,000 unit and regression tests, collected in 6 years of development. * **Modular:** the core of Slic3r is libslic3r, a C++ library that provides a granular API and reusable components. * **Embeddable:** a complete and powerful command line interface allows to use Slic3r from the shell or to integrate it in server-side applications. * **Powerful:** see the list below! See the [project homepage](http://slic3r.org/) at slic3r.org for more information. ### Features (Most of these are also available in the command line interface.) * **G-code generation** for FFF/FDM printers; * **conversion** between STL, OBJ, AMF, 3MF and POV formats; * **auto-repair** of non-manifold meshes (and ability to re-export them); * **SVG export** of slices; * built-in **USB/serial** host controller, supporting **multiple simultaneous printers** each one with a spool queue; * **OctoPrint integration** (send to printer); * built-in **projector and host for DLP printers**; * tool for **cutting meshes** in multiple solid parts with visual preview (also in batch using a grid); * tool for **extruding 2.5D TIN meshes**. ### What language is it written in? The core parts of Slic3r are written in C++11, with multithreading. The graphical interface is still mostly written in Perl, but we're gradually porting it to C++ (want to help?). The goal is to port everything to C++. ### How to install? You can download a precompiled package from [slic3r.org](http://slic3r.org/) (releases) or from [dl.slicr3r.org](http://dl.slic3r.org/dev/) (automated builds). If you want to compile the source yourself follow the instructions on one of these wiki pages: * [Linux](https://github.com/alexrj/Slic3r/wiki/Running-Slic3r-from-git-on-GNU-Linux) * [Windows](https://github.com/alexrj/Slic3r/wiki/Running-Slic3r-from-git-on-Windows) * [Mac OSX](https://github.com/alexrj/Slic3r/wiki/Running-Slic3r-from-git-on-OS-X) ### Can I help? Sure! You can do the following to find things that are available to help with: * Development * [Low Effort tasks](https://github.com/alexrj/Slic3r/labels/Low%20Effort): pick one of them! * [More available tasks](https://github.com/alexrj/Slic3r/milestone/31): let's discuss together before you start working on them * Please comment in the related GitHub issue that you are working on it so that other people know. * Contribute to the [Manual](http://manual.slic3r.org/)! (see its [GitHub repository](https://github.com/alexrj/Slic3r-Manual)) * You can also find us in #slic3r on [FreeNode](https://webchat.freenode.net): talk to _Sound_, _LoH_ or the other members of the Slic3r community. * Add an [issue](https://github.com/alexrj/Slic3r/issues) to the GitHub tracker if it isn't already present. * Drop Alessandro a line at aar@cpan.org. ### Directory structure * `Build.PL`: this script installs dependencies into `local-lib/`, compiles the C++ part and runs tests * `lib/`: the Perl code * `package/`: the scripts used for packaging the executables * `slic3r.pl`: the main executable script, launching the GUI and providing the CLI * `src/`: the C++ source of the `slic3r` executable the and CMake definition file for compiling it (note that this C++ `slic3r` executable can do many things but can't generate G-code yet because the porting isn't finished yet - the main executable is `slic3r.pl`) * `t/`: the test suite * `utils/`: various useful scripts * `xs/src/libslic3r/`: C++ sources for libslic3r * `xs/src/slic3r/`: C++ sources for the Slic3r GUI application * `xs/t/`: test suite for libslic3r * `xs/xsp/`: bindings for calling libslic3r from Perl (XS) ### Acknowledgements The main author of Slic3r is Alessandro Ranellucci (@alexrj, *Sound* in IRC, [@alranel](http://twitter.com/alranel) on Twitter), who started the project in 2011 and still leads development. Joseph Lenox (@lordofhyphens, *Loh* in IRC) is the current co-maintainer. Contributions by Henrik Brix Andersen, Vojtech Bubnik, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Y. Sapir, Mike Sheldrake, Kliment Yanev and numerous others. Original manual by Gary Hodgson. Slic3r logo designed by Corey Daniels, Silk Icon Set designed by Mark James, stl and gcode file icons designed by Akira Yasuda. ### How can I invoke Slic3r using the command line? Usage: slic3r.pl [ OPTIONS ] [ file.stl ] [ file2.stl ] ... --help Output this usage screen and exit --version Output the version of Slic3r and exit --save Save configuration to the specified file --load Load configuration from the specified file. It can be used more than once to load options from multiple files. -o, --output File to output gcode to (by default, the file will be saved into the same directory as the input file using the --output-filename-format to generate the filename.) If a directory is specified for this option, the output will be saved under that directory, and the filename will be generated by --output-filename-format. Non-slicing actions (no G-code will be generated): --repair Repair given STL files and save them as _fixed.obj --cut Cut given input files at given Z (relative) and export them as _upper.stl and _lower.stl --split Split the shells contained in given STL file into several STL files --info Output information about the supplied file(s) and exit -j, --threads Number of threads to use (1+, default: 2) GUI options: --gui Forces the GUI launch instead of command line slicing (if you supply a model file, it will be loaded into the plater) --no-gui Forces the command line slicing instead of gui. This takes precedence over --gui if both are present. --autosave Automatically export current configuration to the specified file Output options: --output-filename-format Output file name format; all config options enclosed in brackets will be replaced by their values, as well as [input_filename_base] and [input_filename] (default: [input_filename_base].gcode) --post-process Generated G-code will be processed with the supplied script; call this more than once to process through multiple scripts. --export-svg Export a SVG file containing slices instead of G-code. -m, --merge If multiple files are supplied, they will be composed into a single print rather than processed individually. Printer options: --bed-shape Coordinates in mm of the bed's points (default: 0x0,200x0,200x200,0x200) --has-heatbed This will provide automatic generation of bed heating gcode --nozzle-diameter Diameter of nozzle in mm (default: 0.5) --print-center Coordinates in mm of the point to center the print around (default: 100,100) --z-offset Additional height in mm to add to vertical coordinates (+/-, default: 0) --gcode-flavor The type of G-code to generate (reprap/teacup/repetier/makerware/sailfish/mach3/machinekit/smoothie/no-extrusion, default: reprap) --use-relative-e-distances Enable this to get relative E values (default: no) --use-firmware-retraction Enable firmware-controlled retraction using G10/G11 (default: no) --use-volumetric-e Express E in cubic millimeters and prepend M200 (default: no) --gcode-arcs Use G2/G3 commands for native arcs (experimental, not supported by all firmwares) --gcode-comments Make G-code verbose by adding comments (default: no) --vibration-limit Limit the frequency of moves on X and Y axes (Hz, set zero to disable; default: 0) --pressure-advance Adjust pressure using the experimental advance algorithm (K constant, set zero to disable; default: 0) Filament options: --filament-diameter Diameter in mm of your raw filament (default: 3) --extrusion-multiplier Change this to alter the amount of plastic extruded. There should be very little need to change this value, which is only useful to compensate for filament packing (default: 1) --temperature Extrusion temperature in degree Celsius, set 0 to disable (default: 200) --first-layer-temperature Extrusion temperature for the first layer, in degree Celsius, set 0 to disable (default: same as --temperature) --bed-temperature Heated bed temperature in degree Celsius, set 0 to disable (default: 0) --first-layer-bed-temperature Heated bed temperature for the first layer, in degree Celsius, set 0 to disable (default: same as --bed-temperature) Speed options: --travel-speed Speed of non-print moves in mm/s (default: 130) --perimeter-speed Speed of print moves for perimeters in mm/s (default: 30) --small-perimeter-speed Speed of print moves for small perimeters in mm/s or % over perimeter speed (default: 30) --external-perimeter-speed Speed of print moves for the external perimeter in mm/s or % over perimeter speed (default: 70%) --infill-speed Speed of print moves in mm/s (default: 60) --solid-infill-speed Speed of print moves for solid surfaces in mm/s or % over infill speed (default: 60) --top-solid-infill-speed Speed of print moves for top surfaces in mm/s or % over solid infill speed (default: 50) --support-material-speed Speed of support material print moves in mm/s (default: 60) --support-material-interface-speed Speed of support material interface print moves in mm/s or % over support material speed (default: 100%) --bridge-speed Speed of bridge print moves in mm/s (default: 60) --gap-fill-speed Speed of gap fill print moves in mm/s (default: 20) --first-layer-speed Speed of print moves for bottom layer, expressed either as an absolute value or as a percentage over normal speeds (default: 30%) Acceleration options: --perimeter-acceleration Overrides firmware's default acceleration for perimeters. (mm/s^2, set zero to disable; default: 0) --infill-acceleration Overrides firmware's default acceleration for infill. (mm/s^2, set zero to disable; default: 0) --bridge-acceleration Overrides firmware's default acceleration for bridges. (mm/s^2, set zero to disable; default: 0) --first-layer-acceleration Overrides firmware's default acceleration for first layer. (mm/s^2, set zero to disable; default: 0) --default-acceleration Acceleration will be reset to this value after the specific settings above have been applied. (mm/s^2, set zero to disable; default: 0) Accuracy options: --layer-height Layer height in mm (default: 0.3) --first-layer-height Layer height for first layer (mm or %, default: 0.35) --infill-every-layers Infill every N layers (default: 1) --solid-infill-every-layers Force a solid layer every N layers (default: 0) Print options: --perimeters Number of perimeters/horizontal skins (range: 0+, default: 3) --top-solid-layers Number of solid layers to do for top surfaces (range: 0+, default: 3) --bottom-solid-layers Number of solid layers to do for bottom surfaces (range: 0+, default: 3) --solid-layers Shortcut for setting the two options above at once --fill-density Infill density (range: 0%-100%, default: 40%) --fill-angle Infill angle in degrees (range: 0-90, default: 45) --fill-pattern Pattern to use to fill non-solid layers (default: honeycomb) --solid-fill-pattern Pattern to use to fill solid layers (default: rectilinear) --start-gcode Load initial G-code from the supplied file. This will overwrite the default command (home all axes [G28]). --end-gcode Load final G-code from the supplied file. This will overwrite the default commands (turn off temperature [M104 S0], home X axis [G28 X], disable motors [M84]). --before-layer-gcode Load before-layer-change G-code from the supplied file (default: nothing). --layer-gcode Load after-layer-change G-code from the supplied file (default: nothing). --toolchange-gcode Load tool-change G-code from the supplied file (default: nothing). --seam-position Position of loop starting points (random/nearest/aligned, default: aligned). --external-perimeters-first Reverse perimeter order. (default: no) --spiral-vase Experimental option to raise Z gradually when printing single-walled vases (default: no) --only-retract-when-crossing-perimeters Disable retraction when travelling between infill paths inside the same island. (default: no) --solid-infill-below-area Force solid infill when a region has a smaller area than this threshold (mm^2, default: 70) --infill-only-where-needed Only infill under ceilings (default: no) --infill-first Make infill before perimeters (default: no) Quality options (slower slicing): --extra-perimeters Add more perimeters when needed (default: yes) --avoid-crossing-perimeters Optimize travel moves so that no perimeters are crossed (default: no) --thin-walls Detect single-width walls (default: yes) --overhangs Experimental option to use bridge flow, speed and fan for overhangs (default: yes) Support material options: --support-material Generate support material for overhangs --support-material-threshold Overhang threshold angle (range: 0-90, set 0 for automatic detection, default: 0) --support-material-pattern Pattern to use for support material (default: honeycomb) --support-material-spacing Spacing between pattern lines (mm, default: 2.5) --support-material-angle Support material angle in degrees (range: 0-90, default: 0) --support-material-contact-distance Vertical distance between object and support material (0+, default: 0.2) --support-material-interface-layers Number of perpendicular layers between support material and object (0+, default: 3) --support-material-interface-spacing Spacing between interface pattern lines (mm, set 0 to get a solid layer, default: 0) --raft-layers Number of layers to raise the printed objects by (range: 0+, default: 0) --support-material-enforce-layers Enforce support material on the specified number of layers from bottom, regardless of --support-material and threshold (0+, default: 0) --dont-support-bridges Experimental option for preventing support material from being generated under bridged areas (default: yes) Retraction options: --retract-length Length of retraction in mm when pausing extrusion (default: 1) --retract-speed Speed for retraction in mm/s (default: 30) --retract-restart-extra Additional amount of filament in mm to push after compensating retraction (default: 0) --retract-before-travel Only retract before travel moves of this length in mm (default: 2) --retract-lift Lift Z by the given distance in mm when retracting (default: 0) --retract-lift-above Only lift Z when above the specified height (default: 0) --retract-lift-below Only lift Z when below the specified height (default: 0) --retract-layer-change Enforce a retraction before each Z move (default: no) --wipe Wipe the nozzle while doing a retraction (default: no) Retraction options for multi-extruder setups: --retract-length-toolchange Length of retraction in mm when disabling tool (default: 10) --retract-restart-extra-toolchange Additional amount of filament in mm to push after switching tool (default: 0) Cooling options: --cooling Enable fan and cooling control --min-fan-speed Minimum fan speed (default: 35%) --max-fan-speed Maximum fan speed (default: 100%) --bridge-fan-speed Fan speed to use when bridging (default: 100%) --fan-below-layer-time Enable fan if layer print time is below this approximate number of seconds (default: 60) --slowdown-below-layer-time Slow down if layer print time is below this approximate number of seconds (default: 30) --min-print-speed Minimum print speed (mm/s, default: 10) --disable-fan-first-layers Disable fan for the first N layers (default: 1) --fan-always-on Keep fan always on at min fan speed, even for layers that don't need cooling Skirt options: --skirts Number of skirts to draw (0+, default: 1) --skirt-distance Distance in mm between innermost skirt and object (default: 6) --skirt-height Height of skirts to draw (expressed in layers, 0+, default: 1) --min-skirt-length Generate no less than the number of loops required to consume this length of filament on the first layer, for each extruder (mm, 0+, default: 0) --brim-width Width of the brim that will get added to each object to help adhesion (mm, default: 0) Transform options: --scale Factor for scaling input object (default: 1) --rotate Rotation angle in degrees (0-360, default: 0) --duplicate Number of items with auto-arrange (1+, default: 1) --duplicate-grid Number of items with grid arrangement (default: 1,1) --duplicate-distance Distance in mm between copies (default: 6) --dont-arrange Don't arrange the objects on the build plate. The model coordinates define the absolute positions on the build plate. The option --print-center will be ignored. --xy-size-compensation Grow/shrink objects by the configured absolute distance (mm, default: 0) Sequential printing options: --complete-objects When printing multiple objects and/or copies, complete each one before starting the next one; watch out for extruder collisions (default: no) --extruder-clearance-radius Radius in mm above which extruder won't collide with anything (default: 20) --extruder-clearance-height Maximum vertical extruder depth; i.e. vertical distance from extruder tip and carriage bottom (default: 20) Miscellaneous options: --notes Notes to be added as comments to the output file --resolution Minimum detail resolution (mm, set zero for full resolution, default: 0) Flow options (advanced): --extrusion-width Set extrusion width manually; it accepts either an absolute value in mm (like 0.65) or a percentage over layer height (like 200%) --first-layer-extrusion-width Set a different extrusion width for first layer --perimeter-extrusion-width Set a different extrusion width for perimeters --external-perimeter-extrusion-width Set a different extrusion width for external perimeters --infill-extrusion-width Set a different extrusion width for infill --solid-infill-extrusion-width Set a different extrusion width for solid infill --top-infill-extrusion-width Set a different extrusion width for top infill --support-material-extrusion-width Set a different extrusion width for support material --infill-overlap Overlap between infill and perimeters (default: 15%) --bridge-flow-ratio Multiplier for extrusion when bridging (> 0, default: 1) Multiple extruder options: --extruder-offset Offset of each extruder, if firmware doesn't handle the displacement (can be specified multiple times, default: 0x0) --perimeter-extruder Extruder to use for perimeters and brim (1+, default: 1) --infill-extruder Extruder to use for infill (1+, default: 1) --solid-infill-extruder Extruder to use for solid infill (1+, default: 1) --support-material-extruder Extruder to use for support material, raft and skirt (1+, default: 1) --support-material-interface-extruder Extruder to use for support material interface (1+, default: 1) --ooze-prevention Drop temperature and park extruders outside a full skirt for automatic wiping (default: no) --ooze-prevention Drop temperature and park extruders outside a full skirt for automatic wiping (default: no) --standby-temperature-delta Temperature difference to be applied when an extruder is not active and --ooze-prevention is enabled (default: -5) For more information about command line usage see the relevant [manual page](http://manual.slic3r.org/advanced/command-line). Slic3r-1.3.0/appveyor.yml000066400000000000000000000030131327442435500152500ustar00rootroot00000000000000version: 1.3.0-{branch}-{build} image: WMF 5 init: - ps: environment: LDLOADLIBS: -lstdc++ SLIC3R_STATIC: 1 SLIC3R_VERSION: 1.3.0 BOOST_DIR: C:\dev\boost_1_63_0 WXDIR: C:\dev\wxwidgets WXSHARED: SHARED=0 FORCE_WX_BUILD: 0 FORCE_BOOST_REINSTALL: 0 ENC_SECRET: secure: QfeTOSKXz1uFCEACqFKLNw== UPLOAD_USER: secure: fYPwnI3p6HNR+eMRJR3JfmyNolFn+Uc0MUn2bBXp9uU= matrix: - ARCH: 64bit - ARCH: 32bit install: - IF DEFINED ENC_SECRET nuget install secure-file -ExcludeVersion - IF DEFINED ENC_SECRET secure-file\tools\secure-file -decrypt package/deploy/slic3r-upload.ppk.enc -secret %ENC_SECRET% - ps: "& package/win/appveyor_preinstall.ps1" cache: - C:\Users\appveyor\local-lib-64bit.7z - C:\Users\appveyor\local-lib-32bit.7z - C:\Users\appveyor\freeglut.64bit.7z - C:\Users\appveyor\freeglut.32bit.7z - C:\users\appveyor\strawberry.64bit.msi - C:\users\appveyor\strawberry.32bit.msi - C:\Users\appveyor\winscp.zip - C:\Users\appveyor\extra_perl.7z - C:\Users\appveyor\wxwidgets-64bit.7z - C:\Users\appveyor\wxwidgets-32bit.7z - C:\Users\appveyor\boost.1.63.0.32bit.7z - C:\Users\appveyor\boost.1.63.0.64bit.7z build_script: - ps: "& package/win/appveyor_buildscript.ps1" artifacts: - path: .\slic3r*zip name: slic3r-dev deploy_script: - ps: "cd C:/projects/slic3r; & package/win/appveyor_deploy.ps1" on_success: - ps: on_failure: - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) on_finish: - ps: Slic3r-1.3.0/doc/000077500000000000000000000000001327442435500134305ustar00rootroot00000000000000Slic3r-1.3.0/doc/How_to_build_Slic3r.txt000066400000000000000000000364131327442435500200350ustar00rootroot00000000000000How to build Slic3r on Mac OS X 10.7 Lion 64bit --------------------------------------------- Vojtech Bubnik, 2016-04-26 1) Install Mac OS X 10.7 Lion 64 bit with X Code ------------------------------------------------ One has to build the OSX Slic3r on a real Mac, either directly on the system, or on a virtualized OSX. On Mac, two commercial solutions are available to legally virtualize MacOS on MacOS: http://www.parallels.com/eu/products/desktop/ http://www.vmware.com/products/workstation/ Installation of a X Code on an OS X 10.7 Lion needs a bit of work. The latest X Code supported by the Lion on a Virtual Box is 4.21. The trouble is, the certificates of the X Code 4.21 installation package expired. One way to work around the certificate is to flatten the installation package by unpacking and repacking it: pkgutil --expand Foobar.pkg foobar pkgutil --flatten foobar barfoo.pkg The flattened package is available here: \\rs.prusa\Development\Slic3r-Prusa\installxcode_421_lion_fixed.pkg This installer does not install the X Code directly. Instead, it installs another installer with a set of 47 pkg files. These files have their certificates expired as well. You will find the packages on your MacOS here: /Applications/Install Xcode.app/Contents/Resources/Packages/ It is best to flatten them in a loop: cd /Applications/Install\ Xcode.app/Contents/Resources/Packages/ for f in *.pkg; do pkgutil --expand $f /tmp/$f rm -f $f pkgutil --flatten /tmp/$f $f done After that, you may finish the installation of Xcode by running /Applications/Install\ Xcode.app 1b) Installing the Xcode on a newer system ------------------------------------------- You will need to register as an Apple developer on https://developer.apple.com/ log in and download and install Xcode https://developer.apple.com/downloads/ You will likely need to download and install Xcode Command Line Tools, though the Xcode 4.1 came with the command line tools installed. 2) Prepare the development environment -------------------------------------- Install the brew package manager: http://brew.sh/ The brew package manager requires the git command line tool. Normally the git tool is installed as part of the Xcode command line tools. Copy and execute a command line from the top of http://brew.sh/ . It is possible, that the invocation of git fails because of some parameters the old git does not recognize. If so, invoke the git call manually. Compile the boost library using brew. Following line compiles a 64bit boost with both static and shared libraries. brew install boost --universal Install dylibbundler tool. The dylibbundler tool serves to collect dependent dynamic libraries and fix their linkage. Execute brew install dylibbundler 3) Install perl --------------- We don't want to distribute perl pre-installed on the Mac OS box. First, the system perl installation is not correct on some Mac OS versions, second it is not rellocatable. To compile a 64bit rellocatable perl, we use the perlbrew distribution. The perlbrew distribution installs into a user home directory and it allows switching between multiple versions of perl. http://perlbrew.pl/ First install perlbrew \curl -L http://install.perlbrew.pl | bash Then compile the newest perl with the rellocatable @INC path and with multithreading enabled, execute following line: perlbrew install --threads -Duserelocatableinc --switch perl-5.22.0 The --switch parameter switches the active perl to the currently compiled one. Available perl versions could be listed by calling perlbrew available Initialize CPAN, install PAR and PAR::Packer modules execute cpan command, from the cpan prompt, run install App::cpanminus install PAR install PAR::Packer quit 4) Download and install Slic3r ------------------------------ git clone git://github.com/alexrj/Slic3r cd Slic3r perl Build.PL Now Slic3r shall be compiled. You may try to execute perl slic3r.pl to get a help screen, or perl slic3r.pl some_model.stl to have the model sliced. 5) Download and compile the GUI libraries needed to execute Slic3r in GUI mode ------------------------------------------------------------------------------ For the current Slic3r 1.2.30 code base, set the environment variable SLIC3R_STATIC to link a static version of the boost library: export SLIC3R_STATIC=1 then execute perl Build.PL --gui and keep your fingers crossed. The Build.PL script downloads and compiles the WxWidgets 3.0 through a Alien::Wx PERL package. The WxWidget shared libraries will land into ~/perl5/perlbrew/perls/perl-5.22.1/lib/site_perl/5.22.1/darwin-thread-multi-2level/Alien/wxWidgets/ On Maverics, we experienced following issue compiling WxPerl: http://wiki.bolay.net/doku.php?id=acdsn:acdsn-a:mac Now you could run the GUI version of slic3r by calling perl slic3r.pl --gui If some dependency is missing, the MacOS system will let you know. 6) Packing the Slic3r --------------------- Perl is an operating system on its own. Many modules are shared among multiple applications and it is difficult to extract a stand-alone application from a perl installation manually. Fortunately, tools are available, which automate the process to some extent. One of the tools is the PAR::Packer. The PAR::Packer tool (pp executable) is able to create a standalone executable for a perl script. The standalone executable contains a PAR archive (a zip file) bundled with a perl interpreter. When executed, the bundled executable will decompress most of the PAR archive into a temp folder. Because of that, we will use the PAR::Packer to resolve and collect the dependencies, but we will create an installer manually. The PAR::Packer could analyze the dependencies by a statical analysis, or at a runtime. The statical analysis does not resolve the dynamically loaded modules. On the other side, the statical analysis is pessimistic, therefore it often collects unneeded packages. The dynamic analysis may miss some package, if not all branches of a code are executed. We will try to solely depend on the dynamic analysis to keep the installation size minimal. We may need to develop a protocol or an automatic UI tool to exercise as much as possible from the Slic3r GUI to pack the GUI version reliably. Once a reliable list of dependencies is collected, we may not need the PAR::Packer anymore. To create a PAR archive of a command line slic3r, execute pp -e -p -x slic3r.pl --xargs cube.stl -o slic3r.par and let the slic3r slice a cube.stl to load the dynamic modules. To create a PAR archive of a GUI slic3r, execute pp -e -p -x slic3r.pl --xargs --gui -o slic3r.par and exercise the slic3r gui to load all modules. Rename the slic3r.par file to slic3r.zip and decompress. Most of the code needed to execute Slic3r is there, only the perl executable is missing for the command line slic3r, and the WxWidgets shared libraries and the liblzma shared library are missing for the GUI version. 7) Collecting the dependent shared libraries, making the link paths relative ---------------------------------------------------------------------------- We have linked Slic3r against a static boost library, therefore the command line slic3r is not dependent on any non-system shared library. The situation is different for the GUI slic3r, which links dynamically against WxWidgets and liblzma. The trick developed by Apple to allow rellocable shared libraries is to addres a shared library relatively to the path of the executable by encoding a special token @executable_path at the start of the path. Unfortunately the libraries requried by Slic3r are compiled with absolute paths. Once the slic3r.par archive is unpacked, one may list the native shared libraries by find ./ -name '*.bundle' and one may list the dependencies by running otool -L somefile.bundle Most of the dependencies point to system directores and these dependences are always fulfilled. Dependencies pointing to the WxWidget libraries need to be fixed. These have a form ~/perlbrew/perls/perl-5.22.1/lib/site_perl/5.22.1/darwin-thread-multi-2level/Alien/wxWidgets/osx_cocoa_3_0_2_uni/lib/libwx_*.dylib and we need to replace them with @executable_path/../Frameworks/libwx_*.dylib Another dependency, which needs our attention is /usr/local/Cellar/xz/5.2.2/lib/liblzma.5.dylib Fortunately, a tool dylibbundler was developed to address this problem. First install dylibbundler by calling brew dylibbundler For some installations, the dylibbundler tool sufficiently fixes all dependencies. Unfortunately, the WxWidgets installation is inconsistent in the versioning, therefore a certain clean-up is required. Namely, the WxWidgets libraries are compiled with the full build number in their file name. For example, the base library is built as libwx_baseu-3.0.0.2.0.dylib and a symlink is created libwx_baseu-3.0.dylib pointing to the full name. Then some of the Wx libraries link against the full name and some against the symlink, leading the dylibbundler to pack both. We solved the problem by whipping up a following script: \\rs.prusa\Development\Slic3r-Prusa\How_to_build_on_MacOSX_Lion\fix_dependencies.sh call slic3r_dependencies.sh --fix to collect the shared libraries into Content/Frameworks and to fix their linkage. call slic3r_dependencies.sh --show to list dependent libraries in a sorted order. All the non-system dependencies shall start with @executable_path after the fix. 8) Packing Slic3r into a dmg image using a bunch of scripts ----------------------------------------------------------- Instead of relying on the PAR::Packer to collect the dependencies, we have used PAR::Packer to extract the dependencies, we manually cleaned them up and created an installer script. \\rs.prusa\Development\Slic3r-Prusa\How_to_build_on_MacOSX_Lion\Slic3r-Build-MacOS First compile Slic3r, then call build_dmg.sh with a path to the Slic3r source tree as a parameter. The script will collect all dependencies into Slic3r.app and it will create Slic3r.dmg. If SLIC3R_GUI variable is defined, a GUI variant of Slic3r will be packed. How to build on Windows ----------------------- The prefered perl distribution on MS Windows is the Strawberry Perl 5.22.1.3 (32bit) http://strawberryperl.com/ Let it install into c:\strawberry You may make a copy of the distribution. We recommend to make following copies: For a release command line only build: c:\strawberry-minimal For a release GUI build: c:\strawberry-minimal-gui For a development build with debugging information: c:\strawberry-debug and to make one of them active by making a directory junction: mklink /d c:\Strawberry c:\Strawberry-debug Building boost: Slic3r seems to have a trouble with the latest boost 1.60.0 on Windows. Please use 1.59. Decompress it to c:\dev\ otherwise it will not be found by the Build.PL on Windows. You may consider to hack xs\Build.PL with your prefered boost path. run bootstrap.bat mingw b2 toolset=gcc Install git command line https://git-scm.com/ Download Slic3r source code git clone git://github.com/alexrj/Slic3r.git Run compilation cd Slic3r perl Build.PL perl Build.PL --gui With a bit of luck, you will end up with a working Slic3r including GUI. Packing on Windows ------------------ Life is easy on Windows. PAR::Packer will help again to collect the dependencies. The basic procedure is the same as for MacOS: To create a PAR archive of a command line slic3r, execute pp -e -p -x slic3r.pl --xargs cube.stl -o slic3r.par and let the slic3r slice a cube.stl to load the dynamic modules. To create a PAR archive of a GUI slic3r, execute pp -e -p -x slic3r.pl --xargs --gui -o slic3r.par and exercise the slic3r gui to load all modules. The standalone installation is then created from the PAR archive by renaming it into a zip and adding following binaries from c:\strawberry to the root of the extracted zip: perl5.22.1.exe perl522.dll libgcc_s_sjlj-1.dll libstdc++-6.dll libwinpthread-1.dll The GUI build requires following DLLs in addition: libglut-0_.dll wxbase30u_gcc_custom.dll wxmsw30u_adv_gcc_custom.dll wxmsw30u_core_gcc_custom.dll wxmsw30u_gl_gcc_custom.dll wxmsw30u_html_gcc_custom.dll and the var directory with the icons needs to be copied to the destination directory. To run the slic3r, move the script\slic3r.pl one level up and create a following tiny windows batch in the root of the unpacked zip: @perl5.22.1.exe slic3r.pl %* A windows shortcut may be created for the GUI version. Instead of the perl.exe, it is better to use the wperl.exe to start the GUI Slic3r, because it does not open a text console. The strawberry perl is already rellocatable, which means that the perl interpreter will find the perl modules in the lib directory, and Windows look up the missing DLLs in the directory of the executable, therefore no further rellocation effort is necessary. Packing on Windows, a single EXE solution ----------------------------------------- One may try to create a PAR executable for command line slic3r: pp -M Encode::Locale -M Moo -M Thread::Semaphore -M Slic3r::XS -M Unicode::Normalize -o slic3r.exe slic3r.pl One may as well create a PAR executable for Windows GUI: pp -M Encode::Locale -M Moo -M Thread::Semaphore -M OpenGL -M Slic3r::XS -M Unicode::Normalize -M Wx -M Class::Accessor -M Wx::DND -M Wx::Grid -M Wx::Print -M Wx::Html -M Wx::GLCanvas -M Math::Trig -M threads -M threads::shared -M Thread::Queue -l C:\strawberry\perl\site\lib\auto\Wx\Wx.xs.dll -o -l C:\strawberry\perl\site\lib\Alien\wxWidgets\msw_3_0_2_uni_gcc_3_4\lib\wxbase30u_gcc_custom.dll -l C:\strawberry\perl\site\lib\Alien\wxWidgets\msw_3_0_2_uni_gcc_3_4\lib\wxmsw30u_core_gcc_custom.dll -l C:\strawberry\perl\site\lib\Alien\wxWidgets\msw_3_0_2_uni_gcc_3_4\lib\wxmsw30u_gl_gcc_custom.dll -l C:\strawberry\perl\site\lib\Alien\wxWidgets\msw_3_0_2_uni_gcc_3_4\lib\wxmsw30u_adv_gcc_custom.dll -l C:\strawberry\perl\site\lib\Alien\wxWidgets\msw_3_0_2_uni_gcc_3_4\lib\wxmsw30u_html_gcc_custom.dll -o slic3r.exe slic3r.pl Remember, that these executables will unpack into a temporary directory. The directory may be declared by setting an environment variable PAR_GLOBAL_TEMP. Otherwise the temporaries are unpacked into C:\Users\xxx\AppData\Local\Temp\par-xxxxxx Debugging the perl, debugging on Windows ---------------------------------------- It is possible to debug perl using the integrated debugger. The EPIC plugin for Eclipse works very well with an older eclipse-SDK-3.6.2. There is a catch though: The Perl debugger does not work correctly with multiple threads running under the Perl interpreter. If that happens, the EPIC plugin gets confused and the debugger stops working. The same happens with the Komodo IDE. Debugging the C++ code works fine using the latest Eclipse for C++ and the gdb of MinGW. The gdb packed with the Strawberry distribution does not contain the Python support, so pretty printing of the stl containers only works if another gdb build is used. The one of the QT installation works well. It is yet a bit more complicated. The Strawberry MINGW is compiled for a different C++ exception passing model (SJLJ) than the other MINGWs, so one cannot simply combine MINGWs on Windows. For an unknown reason the nice debugger of the QT Creator hangs when debugging the C++ compiled by the Strawberry MINGW. Mabe it is because of the different exception passing models. And to disable optimization of the C/C++ code, one has to manually modify Config_heavy.pl in the Perl central installation. The SLIC3R_DEBUG environment variable did not override all the -O2 and -O3 flags that the perl build adds the gcc execution line. Slic3r-1.3.0/lib/000077500000000000000000000000001327442435500134315ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r.pm000066400000000000000000000275061327442435500151400ustar00rootroot00000000000000# This package loads all the non-GUI Slic3r perl packages. # In addition, it implements utility functions for file handling and threading. package Slic3r; # Copyright holder: Alessandro Ranellucci # This application is licensed under the GNU Affero General Public License, version 3 use strict; use warnings; require v5.10; our $VERSION = VERSION(); our $debug = 0; sub debugf { printf @_ if $debug; } # load threads before Moo as required by it our $have_threads; BEGIN { # Test, whether the perl was compiled with ithreads support and ithreads actually work. use Config; $have_threads = $Config{useithreads} && eval "use threads; use threads::shared; use Thread::Queue; 1"; warn "threads.pm >= 1.96 is required, please update\n" if $have_threads && $threads::VERSION < 1.96; ### temporarily disable threads if using the broken Moo version use Moo; $have_threads = 0 if $Moo::VERSION == 1.003000; # Disable multi threading completely by an environment value. # This is useful for debugging as the Perl debugger does not work # in multi-threaded context at all. # A good interactive perl debugger is the ActiveState Komodo IDE # or the EPIC http://www.epic-ide.org/ $have_threads = 0 if (defined($ENV{'SLIC3R_SINGLETHREADED'}) && $ENV{'SLIC3R_SINGLETHREADED'} == 1) } warn "Running Slic3r under Perl 5.16 is neither supported nor recommended\n" if $^V == v5.16; use FindBin; # Path to the images. my $varpath = decode_path($FindBin::Bin) . "/var"; if ($^O eq 'darwin' && !-d $varpath) { $varpath = decode_path($FindBin::Bin) . "/../Resources/var"; } our $var = sub { "$varpath/$_[0]" }; use Moo 1.003001; use Slic3r::XS; # import all symbols (constants etc.) before they get parsed use Slic3r::Config; use Slic3r::ExPolygon; use Slic3r::ExtrusionLoop; use Slic3r::ExtrusionPath; use Slic3r::Flow; use Slic3r::GCode::ArcFitting; use Slic3r::GCode::MotionPlanner; use Slic3r::GCode::PressureRegulator; use Slic3r::GCode::Reader; use Slic3r::GCode::VibrationLimit; use Slic3r::Geometry qw(PI); use Slic3r::Geometry::Clipper; use Slic3r::Layer; use Slic3r::Line; use Slic3r::Model; use Slic3r::Point; use Slic3r::Polygon; use Slic3r::Polyline; use Slic3r::Print; use Slic3r::Print::GCode; use Slic3r::Print::Object; use Slic3r::Print::Simple; use Slic3r::Print::SupportMaterial; use Slic3r::Surface; our $build = eval "use Slic3r::Build; 1"; use Thread::Semaphore; use Encode::Locale 1.05; use Encode; use Unicode::Normalize; # Scaling between the float and integer coordinates. # Floats are in mm. use constant SCALING_FACTOR => 0.000001; # Resolution to simplify perimeters to. These constants are now used in C++ code only. Better to publish them to Perl from the C++ code. # use constant RESOLUTION => 0.0125; # use constant SCALED_RESOLUTION => RESOLUTION / SCALING_FACTOR; use constant LOOP_CLIPPING_LENGTH_OVER_NOZZLE_DIAMETER => 0.15; # use constant INFILL_OVERLAP_OVER_SPACING => 0.3; # Keep track of threads we created. Each thread keeps its own list of threads it spwaned. my @my_threads = (); my @threads : shared = (); my $pause_sema = Thread::Semaphore->new; my $parallel_sema; my $paused = 0; sub spawn_thread { my ($cb) = @_; my $parent_tid = threads->tid; lock @threads; # Set up a default handler for preventing crashes in case signals are received before # thread sets its handlers. $SIG{'STOP'} = sub {}; @_ = (); my $thread = threads->create(sub { @my_threads = (); local $SIG{'KILL'} = sub { Slic3r::debugf "Exiting thread %d...\n", threads->tid; $parallel_sema->up if $parallel_sema; kill_all_threads(); Slic3r::thread_cleanup(); threads->exit(); }; local $SIG{'STOP'} = sub { $pause_sema->down; $pause_sema->up; }; Slic3r::debugf "Starting thread %d (parent: %d)...\n", threads->tid, $parent_tid; $cb->(); }); push @my_threads, $thread->tid; push @threads, $thread->tid; return $thread; } # If the threading is enabled, spawn a set of threads. # Otherwise run the task on the current thread. # Used for # Slic3r::Print::Object->layers->make_perimeters # Slic3r::Print::Object->layers->make_fill # Slic3r::Print::SupportMaterial::generate_toolpaths sub parallelize { my %params = @_; lock @threads; if (!$params{disable} && $Slic3r::have_threads && $params{threads} > 1) { my @items = (ref $params{items} eq 'CODE') ? $params{items}->() : @{$params{items}}; my $q = Thread::Queue->new; $q->enqueue(@items, (map undef, 1..$params{threads})); $parallel_sema = Thread::Semaphore->new(-$params{threads}); $parallel_sema->up; my $thread_cb = sub { # execute thread callback $params{thread_cb}->($q); # signal the parent thread that we're done $parallel_sema->up; # cleanup before terminating thread Slic3r::thread_cleanup(); # This explicit exit avoids an untrappable # "Attempt to free unreferenced scalar" error # triggered on Ubuntu 12.04 32-bit when we're running # from the Wx plater and # we're reusing the same plater object more than once. # The downside to using this exit is that we can't return # any value to the main thread but we're not doing that # anymore anyway. threads->exit; }; @_ = (); my @my_threads = map spawn_thread($thread_cb), 1..$params{threads}; # We use a semaphore instead of $th->join because joined threads are # not listed by threads->list or threads->object anymore, thus can't # be signalled. $parallel_sema->down; $_->detach for @my_threads; } else { $params{no_threads_cb}->(); } } # call this at the very end of each thread (except the main one) # so that it does not try to free existing objects. # at that stage, existing objects are only those that we # inherited at the thread creation (thus shared) and those # that we are returning: destruction will be handled by the # main thread in both cases. # reminder: do not destroy inherited objects in other threads, # as the main thread will still try to destroy them when they # go out of scope; in other words, if you're undef()'ing an # object in a thread, make sure the main thread still holds a # reference so that it won't be destroyed in thread. sub thread_cleanup { return if !$Slic3r::have_threads; if (threads->tid == 0) { warn "Calling thread_cleanup() from main thread\n"; return; } # prevent destruction of shared objects no warnings 'redefine'; *Slic3r::BridgeDetector::DESTROY = sub {}; *Slic3r::Config::DESTROY = sub {}; *Slic3r::Config::Full::DESTROY = sub {}; *Slic3r::Config::GCode::DESTROY = sub {}; *Slic3r::Config::Print::DESTROY = sub {}; *Slic3r::Config::PrintObject::DESTROY = sub {}; *Slic3r::Config::PrintRegion::DESTROY = sub {}; *Slic3r::Config::Static::DESTROY = sub {}; *Slic3r::ExPolygon::DESTROY = sub {}; *Slic3r::ExPolygon::Collection::DESTROY = sub {}; *Slic3r::Extruder::DESTROY = sub {}; *Slic3r::ExtrusionLoop::DESTROY = sub {}; *Slic3r::ExtrusionPath::DESTROY = sub {}; *Slic3r::ExtrusionPath::Collection::DESTROY = sub {}; *Slic3r::Filler::DESTROY = sub {}; *Slic3r::Flow::DESTROY = sub {}; *Slic3r::GCode::DESTROY = sub {}; *Slic3r::GCode::AvoidCrossingPerimeters::DESTROY = sub {}; *Slic3r::GCode::OozePrevention::DESTROY = sub {}; *Slic3r::GCode::PlaceholderParser::DESTROY = sub {}; *Slic3r::GCode::Sender::DESTROY = sub {}; *Slic3r::GCode::Wipe::DESTROY = sub {}; *Slic3r::GCode::Writer::DESTROY = sub {}; *Slic3r::Geometry::BoundingBox::DESTROY = sub {}; *Slic3r::Geometry::BoundingBoxf::DESTROY = sub {}; *Slic3r::Geometry::BoundingBoxf3::DESTROY = sub {}; *Slic3r::Layer::PerimeterGenerator::DESTROY = sub {}; *Slic3r::LayerHeightSpline::DESTROY = sub {}; *Slic3r::Line::DESTROY = sub {}; *Slic3r::Linef3::DESTROY = sub {}; *Slic3r::Model::DESTROY = sub {}; *Slic3r::Model::Object::DESTROY = sub {}; *Slic3r::Point::DESTROY = sub {}; *Slic3r::Pointf::DESTROY = sub {}; *Slic3r::Pointf3::DESTROY = sub {}; *Slic3r::Polygon::DESTROY = sub {}; *Slic3r::Polyline::DESTROY = sub {}; *Slic3r::Polyline::Collection::DESTROY = sub {}; *Slic3r::Print::DESTROY = sub {}; *Slic3r::Print::Object::DESTROY = sub {}; *Slic3r::Print::Region::DESTROY = sub {}; *Slic3r::SLAPrint::DESTROY = sub {}; *Slic3r::Surface::DESTROY = sub {}; *Slic3r::Surface::Collection::DESTROY = sub {}; *Slic3r::TriangleMesh::DESTROY = sub {}; return undef; # this prevents a "Scalars leaked" warning } sub get_running_threads { return grep defined($_), map threads->object($_), @_; } sub kill_all_threads { # if we're the main thread, we send SIGKILL to all the running threads if (threads->tid == 0) { lock @threads; foreach my $thread (get_running_threads(@threads)) { Slic3r::debugf "Thread %d killing %d...\n", threads->tid, $thread->tid; $thread->kill('KILL'); } # unlock semaphore before we block on wait # otherwise we'd get a deadlock if threads were paused resume_all_threads(); } # in any thread we wait for our children foreach my $thread (get_running_threads(@my_threads)) { Slic3r::debugf " Thread %d waiting for %d...\n", threads->tid, $thread->tid; $thread->join; # block until threads are killed Slic3r::debugf " Thread %d finished waiting for %d...\n", threads->tid, $thread->tid; } @my_threads = (); } sub pause_all_threads { return if $paused; lock @threads; $paused = 1; $pause_sema->down; $_->kill('STOP') for get_running_threads(@threads); } sub resume_all_threads { return unless $paused; lock @threads; $paused = 0; $pause_sema->up; } # Convert a Unicode path to a file system locale. # The encoding is (from Encode::Locale POD): # Alias | Windows | Mac OS X | POSIX # locale_fs | ANSI | UTF-8 | nl_langinfo # where nl_langinfo is en-US.UTF-8 on a modern Linux as well. # So this conversion seems to make the most sense on Windows. sub encode_path { my ($path) = @_; return undef if !defined $path; $path = Unicode::Normalize::NFC($path); $path = Encode::encode(locale_fs => $path); return $path; } # Convert a path coded by a file system locale to Unicode. sub decode_path { my ($path) = @_; return undef if !defined $path; $path = Encode::decode(locale_fs => $path) unless utf8::is_utf8($path); # The filesystem might force a normalization form (like HFS+ does) so # if we rely on the filename being comparable after the open() + readdir() # roundtrip (like when creating and then selecting a preset), we need to # restore our normalization form. $path = Unicode::Normalize::NFC($path); return $path; } # Open a file by converting $filename to local file system locales. sub open { my ($fh, $mode, $filename) = @_; return CORE::open $$fh, $mode, encode_path($filename); } # this package declaration prevents an ugly fatal warning to be emitted when # spawning a new thread package GLUquadricObjPtr; 1; Slic3r-1.3.0/lib/Slic3r/000077500000000000000000000000001327442435500145705ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r/Config.pm000066400000000000000000000305411327442435500163360ustar00rootroot00000000000000# Extends C++ class Slic3r::DynamicPrintConfig # This perl class does not keep any perl class variables, # all the storage is handled by the underlying C++ code. package Slic3r::Config; use strict; use warnings; use utf8; use List::Util qw(first max); # C++ Slic3r::PrintConfigDef exported as a Perl hash of hashes. # The C++ counterpart is a constant singleton. our $Options = print_config_def(); # overwrite the hard-coded readonly value (this information is not available in XS) $Options->{threads}{readonly} = !$Slic3r::have_threads; # generate accessors { no strict 'refs'; for my $opt_key (keys %$Options) { *{$opt_key} = sub { $_[0]->get($opt_key) }; } } # Fill in the underlying C++ Slic3r::DynamicPrintConfig with the content of the defaults # provided by the C++ class Slic3r::FullPrintConfig. sub new_from_defaults { my $class = shift; my (@opt_keys) = @_; my $self = $class->new; if (@opt_keys) { $self->set($_, $Options->{$_}{default}) for grep exists $Options->{$_}{default}, @opt_keys; } else { $self->apply_static(Slic3r::Config::Full->new); } return $self; } # From command line parameters sub new_from_cli { my $class = shift; my %args = @_; # Delete hash keys with undefined value. delete $args{$_} for grep !defined $args{$_}, keys %args; # Replace the start_gcode, end_gcode ... hash values # with the content of the files they reference. for (qw(start end layer toolchange)) { my $opt_key = "${_}_gcode"; if ($args{$opt_key}) { if (-e $args{$opt_key}) { Slic3r::open(\my $fh, "<", $args{$opt_key}) or die "Failed to open $args{$opt_key}\n"; binmode $fh, ':utf8'; $args{$opt_key} = do { local $/; <$fh> }; close $fh; } } } my $self = $class->new; foreach my $opt_key (keys %args) { my $opt_def = $Options->{$opt_key}; # we use set_deserialize() for bool options since GetOpt::Long doesn't handle # arrays of boolean values if ($opt_key =~ /^(?:bed_shape|duplicate_grid|extruder_offset)$/ || $opt_def->{type} eq 'bool') { $self->set_deserialize($opt_key, $args{$opt_key}); } elsif (my $shortcut = $opt_def->{shortcut}) { $self->set($_, $args{$opt_key}) for @$shortcut; } else { $self->set($opt_key, $args{$opt_key}); } } return $self; } sub merge { my $class = shift; my $config = $class->new; $config->apply($_) for @_; return $config; } # Load a flat ini file without a category into the underlying C++ Slic3r::DynamicConfig class, # convert legacy configuration names. sub load { my $class = shift; my ($file) = @_; # legacy syntax of load() my $config = $class->new; $config->_load($file); return $config; } sub save { my $self = shift; my ($file) = @_; return $self->_save($file); } # Deserialize a perl hash into the underlying C++ Slic3r::DynamicConfig class, # convert legacy configuration names. sub load_ini_hash { my $class = shift; my ($ini_hash) = @_; my $config = $class->new; $config->set_deserialize($_, $ini_hash->{$_}) for keys %$ini_hash; return $config; } sub clone { my $self = shift; my $new = (ref $self)->new; $new->apply($self); return $new; } sub get_value { my $self = shift; my ($opt_key) = @_; return $Options->{$opt_key}{ratio_over} ? $self->get_abs_value($opt_key) : $self->get($opt_key); } # Create a hash of hashes from the underlying C++ Slic3r::DynamicPrintConfig. # The first hash key is '_' meaning no category. sub as_ini { my ($self) = @_; my $ini = { _ => {} }; foreach my $opt_key (sort @{$self->get_keys}) { next if $Options->{$opt_key}{shortcut}; $ini->{_}{$opt_key} = $self->serialize($opt_key); } return $ini; } # this method is idempotent by design and only applies to ::DynamicConfig or ::Full # objects because it performs cross checks sub validate { my $self = shift; # -j, --threads die "Invalid value for --threads\n" if $self->threads < 1; # --layer-height die "Invalid value for --layer-height\n" if $self->layer_height <= 0; die "--layer-height must be a multiple of print resolution\n" if $self->layer_height / &Slic3r::SCALING_FACTOR % 1 != 0; # --first-layer-height die "Invalid value for --first-layer-height\n" if $self->first_layer_height !~ /^(?:\d*(?:\.\d+)?)%?$/; die "Invalid value for --first-layer-height\n" if $self->get_value('first_layer_height') <= 0; # --filament-diameter die "Invalid value for --filament-diameter\n" if grep $_ < 1, @{$self->filament_diameter}; # --nozzle-diameter die "Invalid value for --nozzle-diameter\n" if grep $_ < 0, @{$self->nozzle_diameter}; # --perimeters die "Invalid value for --perimeters\n" if $self->perimeters < 0; # --solid-layers die "Invalid value for --solid-layers\n" if defined $self->solid_layers && $self->solid_layers < 0; die "Invalid value for --top-solid-layers\n" if $self->top_solid_layers < 0; die "Invalid value for --bottom-solid-layers\n" if $self->bottom_solid_layers < 0; # --gcode-flavor die "Invalid value for --gcode-flavor\n" if !first { $_ eq $self->gcode_flavor } @{$Options->{gcode_flavor}{values}}; die "--use-firmware-retraction is only supported by Marlin, Smoothie, Repetier and Machinekit firmware\n" if $self->use_firmware_retraction && $self->gcode_flavor ne 'smoothie' && $self->gcode_flavor ne 'reprap' && $self->gcode_flavor ne 'machinekit' && $self->gcode_flavor ne 'repetier'; die "--use-firmware-retraction is not compatible with --wipe\n" if $self->use_firmware_retraction && first {$_} @{$self->wipe}; # --fill-pattern die "Invalid value for --fill-pattern\n" if !first { $_ eq $self->fill_pattern } @{$Options->{fill_pattern}{values}}; # --external-fill-pattern die "Invalid value for --top-infill-pattern\n" if !first { $_ eq $self->top_infill_pattern } @{$Options->{top_infill_pattern}{values}}; die "Invalid value for --bottom-infill-pattern\n" if !first { $_ eq $self->bottom_infill_pattern } @{$Options->{bottom_infill_pattern}{values}}; # --fill-density die "The selected fill pattern is not supposed to work at 100% density\n" if $self->fill_density == 100 && !first { $_ eq $self->fill_pattern } @{$Options->{external_fill_pattern}{values}}; # --infill-every-layers die "Invalid value for --infill-every-layers\n" if $self->infill_every_layers !~ /^\d+$/ || $self->infill_every_layers < 1; # --skirt-height die "Invalid value for --skirt-height\n" if $self->skirt_height < -1; # -1 means as tall as the object # --bridge-flow-ratio die "Invalid value for --bridge-flow-ratio\n" if $self->bridge_flow_ratio <= 0; # extruder clearance die "Invalid value for --extruder-clearance-radius\n" if $self->extruder_clearance_radius <= 0; die "Invalid value for --extruder-clearance-height\n" if $self->extruder_clearance_height <= 0; # --extrusion-multiplier die "Invalid value for --extrusion-multiplier\n" if defined first { $_ <= 0 } @{$self->extrusion_multiplier}; # --default-acceleration die "Invalid zero value for --default-acceleration when using other acceleration settings\n" if ($self->perimeter_acceleration || $self->infill_acceleration || $self->bridge_acceleration || $self->first_layer_acceleration) && !$self->default_acceleration; # --spiral-vase if ($self->spiral_vase) { # Note that we might want to have more than one perimeter on the bottom # solid layers. die "Can't make more than one perimeter when spiral vase mode is enabled\n" if $self->perimeters > 1; die "Can't make less than one perimeter when spiral vase mode is enabled\n" if $self->perimeters < 1; die "Spiral vase mode can only print hollow objects, so you need to set Fill density to 0\n" if $self->fill_density > 0; die "Spiral vase mode is not compatible with top solid layers\n" if $self->top_solid_layers > 0; die "Spiral vase mode is not compatible with support material\n" if $self->support_material || $self->support_material_enforce_layers > 0; } # extrusion widths { my $max_nozzle_diameter = max(@{ $self->nozzle_diameter }); die "Invalid extrusion width (too large)\n" if defined first { $_ > 10 * $max_nozzle_diameter } map $self->get_abs_value_over("${_}_extrusion_width", $max_nozzle_diameter), qw(perimeter infill solid_infill top_infill support_material first_layer); } # general validation, quick and dirty foreach my $opt_key (@{$self->get_keys}) { my $opt = $Options->{$opt_key}; next unless defined $self->$opt_key; next unless defined $opt->{cli} && $opt->{cli} =~ /=(.+)$/; my $type = $1; my @values = (); if ($type =~ s/\@$//) { die "Invalid value for $opt_key\n" if ref($self->$opt_key) ne 'ARRAY'; @values = @{ $self->$opt_key }; } else { @values = ($self->$opt_key); } foreach my $value (@values) { if ($type eq 'i' || $type eq 'f' || $opt->{type} eq 'percent') { $value =~ s/%$// if $opt->{type} eq 'percent'; die "Invalid value for $opt_key\n" if ($type eq 'i' && $value !~ /^-?\d+$/) || (($type eq 'f' || $opt->{type} eq 'percent') && $value !~ /^-?(?:\d+|\d*\.\d+)$/) || (defined $opt->{min} && $value < $opt->{min}) || (defined $opt->{max} && $value > $opt->{max}); } elsif ($type eq 's' && $opt->{type} eq 'select') { die "Invalid value for $opt_key\n" unless first { $_ eq $value } @{ $opt->{values} }; } } } return 1; } # CLASS METHODS: # Write a "Windows" style ini file with categories enclosed in squre brackets. sub write_ini { my $class = shift; my ($file, $ini) = @_; Slic3r::open(\my $fh, '>', $file); binmode $fh, ':utf8'; my $localtime = localtime; printf $fh "# generated by Slic3r $Slic3r::VERSION on %s\n", "$localtime"; # make sure the _ category is the first one written foreach my $category (sort { ($a eq '_') ? -1 : ($a cmp $b) } keys %$ini) { printf $fh "\n[%s]\n", $category if $category ne '_'; foreach my $key (sort keys %{$ini->{$category}}) { printf $fh "%s = %s\n", $key, $ini->{$category}{$key}; } } close $fh; } # Parse a "Windows" style ini file with categories enclosed in squre brackets. # Returns a hash of hashes over strings. # {category}{name}=value # Non-categorized entries are stored under a category '_'. sub read_ini { my $class = shift; my ($file) = @_; local $/ = "\n"; Slic3r::open(\my $fh, '<', $file) or die "Unable to open $file: $!\n"; binmode $fh, ':utf8'; my $ini = { _ => {} }; my $category = '_'; while (<$fh>) { s/\R+$//; next if /^\s+/; next if /^$/; next if /^\s*#/; if (/^\[(.+?)\]$/) { $category = $1; next; } /^(\w+) *= *(.*)/ or die "Unreadable configuration file (invalid data at line $.)\n"; $ini->{$category}{$1} = $2; } close $fh; return $ini; } package Slic3r::Config::Static; use parent 'Slic3r::Config'; sub Slic3r::Config::GCode::new { Slic3r::Config::Static::new_GCodeConfig } sub Slic3r::Config::Print::new { Slic3r::Config::Static::new_PrintConfig } sub Slic3r::Config::PrintObject::new { Slic3r::Config::Static::new_PrintObjectConfig } sub Slic3r::Config::PrintRegion::new { Slic3r::Config::Static::new_PrintRegionConfig } sub Slic3r::Config::Full::new { Slic3r::Config::Static::new_FullPrintConfig } sub Slic3r::Config::SLAPrint::new { Slic3r::Config::Static::new_SLAPrintConfig } 1; Slic3r-1.3.0/lib/Slic3r/ExPolygon.pm000066400000000000000000000017761327442435500170650ustar00rootroot00000000000000package Slic3r::ExPolygon; use strict; use warnings; # an ExPolygon is a polygon with holes use List::Util qw(first); use Slic3r::Geometry qw(X Y A B point_in_polygon epsilon scaled_epsilon); use Slic3r::Geometry::Clipper qw(union_ex diff_pl); sub wkt { my $self = shift; return sprintf "POLYGON(%s)", join ',', map "($_)", map { join ',', map "$_->[0] $_->[1]", @$_ } @$self; } sub dump_perl { my $self = shift; return sprintf "[%s]", join ',', map "[$_]", map { join ',', map "[$_->[0],$_->[1]]", @$_ } @$self; } sub offset { my $self = shift; return Slic3r::Geometry::Clipper::offset(\@$self, @_); } sub offset_ex { my $self = shift; return Slic3r::Geometry::Clipper::offset_ex(\@$self, @_); } sub bounding_box { my $self = shift; return $self->contour->bounding_box; } package Slic3r::ExPolygon::Collection; use Slic3r::Geometry qw(X1 Y1); sub size { my $self = shift; return [ Slic3r::Geometry::size_2D([ map @$_, map @$_, @$self ]) ]; } 1; Slic3r-1.3.0/lib/Slic3r/ExtrusionLoop.pm000066400000000000000000000003501327442435500177560ustar00rootroot00000000000000package Slic3r::ExtrusionLoop; use strict; use warnings; use parent qw(Exporter); our @EXPORT_OK = qw(EXTRL_ROLE_DEFAULT EXTRL_ROLE_CONTOUR_INTERNAL_PERIMETER EXTRL_ROLE_SKIRT); our %EXPORT_TAGS = (roles => \@EXPORT_OK); 1; Slic3r-1.3.0/lib/Slic3r/ExtrusionPath.pm000066400000000000000000000006561327442435500177520ustar00rootroot00000000000000package Slic3r::ExtrusionPath; use strict; use warnings; use parent qw(Exporter); our @EXPORT_OK = qw(EXTR_ROLE_PERIMETER EXTR_ROLE_EXTERNAL_PERIMETER EXTR_ROLE_OVERHANG_PERIMETER EXTR_ROLE_FILL EXTR_ROLE_SOLIDFILL EXTR_ROLE_TOPSOLIDFILL EXTR_ROLE_GAPFILL EXTR_ROLE_BRIDGE EXTR_ROLE_SKIRT EXTR_ROLE_SUPPORTMATERIAL EXTR_ROLE_SUPPORTMATERIAL_INTERFACE EXTR_ROLE_NONE); our %EXPORT_TAGS = (roles => \@EXPORT_OK); 1; Slic3r-1.3.0/lib/Slic3r/Flow.pm000066400000000000000000000005211327442435500160330ustar00rootroot00000000000000package Slic3r::Flow; use strict; use warnings; use parent qw(Exporter); our @EXPORT_OK = qw(FLOW_ROLE_EXTERNAL_PERIMETER FLOW_ROLE_PERIMETER FLOW_ROLE_INFILL FLOW_ROLE_SOLID_INFILL FLOW_ROLE_TOP_SOLID_INFILL FLOW_ROLE_SUPPORT_MATERIAL FLOW_ROLE_SUPPORT_MATERIAL_INTERFACE); our %EXPORT_TAGS = (roles => \@EXPORT_OK); 1; Slic3r-1.3.0/lib/Slic3r/GCode/000077500000000000000000000000001327442435500155515ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r/GCode/ArcFitting.pm000066400000000000000000000205631327442435500201470ustar00rootroot00000000000000package Slic3r::GCode::ArcFitting; use Moo; use Slic3r::Geometry qw(X Y PI scale unscale epsilon scaled_epsilon deg2rad angle3points); extends 'Slic3r::GCode::Reader'; has 'config' => (is => 'ro', required => 0); has 'min_segments' => (is => 'rw', default => sub { 2 }); has 'min_total_angle' => (is => 'rw', default => sub { deg2rad(30) }); has 'max_relative_angle' => (is => 'rw', default => sub { deg2rad(15) }); has 'len_epsilon' => (is => 'rw', default => sub { scale 0.2 }); has 'angle_epsilon' => (is => 'rw', default => sub { abs(deg2rad(10)) }); has '_extrusion_axis' => (is => 'lazy'); has '_path' => (is => 'rw'); has '_cur_F' => (is => 'rw'); has '_cur_E' => (is => 'rw'); has '_cur_E0' => (is => 'rw'); has '_comment' => (is => 'rw'); sub _build__extrusion_axis { my ($self) = @_; return $self->config ? $self->config->get_extrusion_axis : 'E'; } sub process { my $self = shift; my ($gcode) = @_; die "Arc fitting is not available (incomplete feature)\n"; die "Arc fitting doesn't support extrusion axis not being E\n" if $self->_extrusion_axis ne 'E'; my $new_gcode = ""; $self->parse($gcode, sub { my ($reader, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0) { # this is an extrusion segment # get segment my $line = Slic3r::Line->new( Slic3r::Point->new_scale($self->X, $self->Y), Slic3r::Point->new_scale($args->{X}, $args->{Y}), ); # get segment speed my $F = $args->{F} // $reader->F; # get extrusion per unscaled distance unit my $e = $info->{dist_E} / unscale($line->length); if ($self->_path && $F == $self->_cur_F && abs($e - $self->_cur_E) < epsilon) { # if speed and extrusion per unit are the same as the previous segments, # append this segment to path $self->_path->append($line->b); } elsif ($self->_path) { # segment can't be appended to previous path, so we flush the previous one # and start over $new_gcode .= $self->path_to_gcode; $self->_path(undef); } if (!$self->_path) { # if this is the first segment of a path, start it from scratch $self->_path(Slic3r::Polyline->new(@$line)); $self->_cur_F($F); $self->_cur_E($e); $self->_cur_E0($self->E); $self->_comment($info->{comment}); } } else { # if we have a path, we flush it and go on $new_gcode .= $self->path_to_gcode if $self->_path; $new_gcode .= $info->{raw} . "\n"; $self->_path(undef); } }); $new_gcode .= $self->path_to_gcode if $self->_path; return $new_gcode; } sub path_to_gcode { my ($self) = @_; my @chunks = $self->detect_arcs($self->_path); my $gcode = ""; my $E = $self->_cur_E0; foreach my $chunk (@chunks) { if ($chunk->isa('Slic3r::Polyline')) { my @lines = @{$chunk->lines}; $gcode .= sprintf "G1 F%s\n", $self->_cur_F; foreach my $line (@lines) { $E += $self->_cur_E * unscale($line->length); $gcode .= sprintf "G1 X%.3f Y%.3f %s%.5f", (map unscale($_), @{$line->b}), $self->_extrusion_axis, $E; $gcode .= sprintf " ; %s", $self->_comment if $self->_comment; $gcode .= "\n"; } } elsif ($chunk->isa('Slic3r::GCode::ArcFitting::Arc')) { $gcode .= !$chunk->is_ccw ? "G2" : "G3"; $gcode .= sprintf " X%.3f Y%.3f", map unscale($_), @{$chunk->end}; # destination point # XY distance of the center from the start position $gcode .= sprintf " I%.3f", unscale($chunk->center->[X] - $chunk->start->[X]); $gcode .= sprintf " J%.3f", unscale($chunk->center->[Y] - $chunk->start->[Y]); $E += $self->_cur_E * unscale($chunk->length); $gcode .= sprintf " %s%.5f", $self->_extrusion_axis, $E; $gcode .= sprintf " F%s\n", $self->_cur_F; } } return $gcode; } sub detect_arcs { my ($self, $path) = @_; my @chunks = (); my @arc_points = (); my $polyline = undef; my $arc_start = undef; my @points = @$path; for (my $i = 1; $i <= $#points; ++$i) { my $end = undef; # we need at least three points to check whether they form an arc if ($i < $#points) { my $len = $points[$i-1]->distance_to($points[$i]); my $rel_angle = PI - angle3points(@points[$i, $i-1, $i+1]); if (abs($rel_angle) <= $self->max_relative_angle) { for (my $j = $i+1; $j <= $#points; ++$j) { # check whether @points[($i-1)..$j] form an arc last if abs($points[$j-1]->distance_to($points[$j]) - $len) > $self->len_epsilon; last if abs(PI - angle3points(@points[$j-1, $j-2, $j]) - $rel_angle) > $self->angle_epsilon; $end = $j; } } } if (defined $end && ($end - $i + 1) >= $self->min_segments) { my $arc = polyline_to_arc(Slic3r::Polyline->new(@points[($i-1)..$end])); if (1||$arc->angle >= $self->min_total_angle) { push @chunks, $arc; # continue scanning after arc points $i = $end; next; } } # if last chunk was a polyline, append to it if (@chunks && $chunks[-1]->isa('Slic3r::Polyline')) { $chunks[-1]->append($points[$i]); } else { push @chunks, Slic3r::Polyline->new(@points[($i-1)..$i]); } } return @chunks; } sub polyline_to_arc { my ($polyline) = @_; my @points = @$polyline; my $is_ccw = $points[2]->ccw(@points[0,1]) > 0; # to find the center, we intersect the perpendicular lines # passing by first and last vertex; # a better method would be to draw all the perpendicular lines # and find the centroid of the enclosed polygon, or to # intersect multiple lines and find the centroid of the convex hull # around the intersections my $arc_center; { my $first_ray = Slic3r::Line->new(@points[0,1]); $first_ray->rotate(PI/2 * ($is_ccw ? 1 : -1), $points[0]); my $last_ray = Slic3r::Line->new(@points[-2,-1]); $last_ray->rotate(PI/2 * ($is_ccw ? -1 : 1), $points[-1]); # require non-parallel rays in order to compute an accurate center return if abs($first_ray->atan2_ - $last_ray->atan2_) < deg2rad(30); $arc_center = $first_ray->intersection($last_ray, 0) or return; } # angle measured in ccw orientation my $abs_angle = Slic3r::Geometry::angle3points($arc_center, @points[0,-1]); my $rel_angle = $is_ccw ? $abs_angle : (2*PI - $abs_angle); my $arc = Slic3r::GCode::ArcFitting::Arc->new( start => $points[0]->clone, end => $points[-1]->clone, center => $arc_center, is_ccw => $is_ccw || 0, angle => $rel_angle, ); if (0) { printf "points = %d, path length = %f, arc angle = %f, arc length = %f\n", scalar(@points), unscale(Slic3r::Polyline->new(@points)->length), Slic3r::Geometry::rad2deg($rel_angle), unscale($arc->length); } return $arc; } package Slic3r::GCode::ArcFitting::Arc; use Moo; has 'start' => (is => 'ro', required => 1); has 'end' => (is => 'ro', required => 1); has 'center' => (is => 'ro', required => 1); has 'is_ccw' => (is => 'ro', required => 1); has 'angle' => (is => 'ro', required => 1); sub radius { my ($self) = @_; return $self->start->distance_to($self->center); } sub length { my ($self) = @_; return $self->radius * $self->angle; } 1; Slic3r-1.3.0/lib/Slic3r/GCode/MotionPlanner.pm000066400000000000000000000253331327442435500207020ustar00rootroot00000000000000package Slic3r::GCode::MotionPlanner; use Moo; has 'islands' => (is => 'ro', required => 1); # arrayref of ExPolygons has 'internal' => (is => 'ro', default => sub { 1 }); has '_space' => (is => 'ro', default => sub { Slic3r::GCode::MotionPlanner::ConfigurationSpace->new }); has '_inner' => (is => 'ro', default => sub { [] }); # arrayref of ExPolygons use List::Util qw(first max); use Slic3r::Geometry qw(A B scale epsilon); use Slic3r::Geometry::Clipper qw(offset offset_ex diff_ex intersection_pl); # clearance (in mm) from the perimeters has '_inner_margin' => (is => 'ro', default => sub { scale 1 }); has '_outer_margin' => (is => 'ro', default => sub { scale 2 }); # this factor weigths the crossing of a perimeter # vs. the alternative path. a value of 5 means that # a perimeter will be crossed if the alternative path # is >= 5x the length of the straight line we could # follow if we decided to cross the perimeter. # a nearly-infinite value for this will only permit # perimeter crossing when there's no alternative path. use constant CROSSING_PENALTY => 20; use constant POINT_DISTANCE => 10; # unscaled # setup our configuration space sub BUILD { my $self = shift; my $point_distance = scale POINT_DISTANCE; my $nodes = $self->_space->nodes; my $edges = $self->_space->edges; # process individual islands for my $i (0 .. $#{$self->islands}) { my $expolygon = $self->islands->[$i]; # find external margin my $outer = offset([ @$expolygon ], +$self->_outer_margin); my @outer_points = map @{$_->equally_spaced_points($point_distance)}, @$outer; # add outer points to graph my $o_outer = $self->_space->add_nodes(@outer_points); # find pairs of visible outer points and add them to the graph for my $i (0 .. $#outer_points) { for my $j (($i+1) .. $#outer_points) { my ($a, $b) = ($outer_points[$i], $outer_points[$j]); my $line = Slic3r::Polyline->new($a, $b); # outer points are visible when their line has empty intersection with islands my $intersection = intersection_pl( [ $line ], [ map @$_, @{$self->islands} ], ); if (!@$intersection) { $self->_space->add_edge($i+$o_outer, $j+$o_outer, $line->length); } } } if ($self->internal) { # find internal margin my $inner = offset_ex([ @$expolygon ], -$self->_inner_margin); push @{ $self->_inner }, @$inner; my @inner_points = map @{$_->equally_spaced_points($point_distance)}, map @$_, @$inner; # add points to graph and get their offset my $o_inner = $self->_space->add_nodes(@inner_points); # find pairs of visible inner points and add them to the graph for my $i (0 .. $#inner_points) { for my $j (($i+1) .. $#inner_points) { my ($a, $b) = ($inner_points[$i], $inner_points[$j]); my $line = Slic3r::Line->new($a, $b); # turn $inner into an ExPolygonCollection and use $inner->contains_line() if (first { $_->contains_line($line) } @$inner) { $self->_space->add_edge($i+$o_inner, $j+$o_inner, $line->length); } } } # generate the stripe around slice contours my $contour = diff_ex( $outer, [ map @$_, @$inner ], ); # find pairs of visible points in this area and add them to the graph for my $i (0 .. $#inner_points) { for my $j (0 .. $#outer_points) { my ($a, $b) = ($inner_points[$i], $outer_points[$j]); my $line = Slic3r::Line->new($a, $b); # turn $contour into an ExPolygonCollection and use $contour->contains_line() if (first { $_->contains_line($line) } @$contour) { $self->_space->add_edge($i+$o_inner, $j+$o_outer, $line->length * CROSSING_PENALTY); } } } } } # since Perl has no infinity symbol and we don't want to overcomplicate # the Dijkstra algorithm with string constants or -1 values $self->_space->_infinity(10 * (max(map values %$_, values %{$self->_space->edges}) // 0)); if (0) { require "Slic3r/SVG.pm"; Slic3r::SVG::output("space.svg", no_arrows => 1, expolygons => $self->islands, lines => $self->_space->get_lines, points => $self->_space->nodes, ); printf "%d islands\n", scalar @{$self->islands}; eval "use Devel::Size"; print "MEMORY USAGE:\n"; printf " %-19s = %.1fMb\n", $_, Devel::Size::total_size($self->$_)/1024/1024 for qw(_space islands); printf " %-19s = %.1fMb\n", $_, Devel::Size::total_size($self->_space->$_)/1024/1024 for qw(nodes edges); printf " %-19s = %.1fMb\n", 'self', Devel::Size::total_size($self)/1024/1024; exit if $self->internal; } } sub shortest_path { my $self = shift; my ($from, $to) = @_; return Slic3r::Polyline->new($from, $to) if !@{$self->_space->nodes}; # create a temporary configuration space my $space = $self->_space->clone; # add from/to points to the temporary configuration space my $node_from = $self->_add_point_to_space($from, $space); my $node_to = $self->_add_point_to_space($to, $space); # compute shortest path my $path = $space->shortest_path($node_from, $node_to); if (!$path->is_valid) { Slic3r::debugf "Failed to compute shortest path.\n"; return Slic3r::Polyline->new($from, $to); } if (0) { require "Slic3r/SVG.pm"; Slic3r::SVG::output("path.svg", no_arrows => 1, expolygons => $self->islands, lines => $space->get_lines, red_points => [$from, $to], red_polylines => [$path], ); exit; } return $path; } # returns the index of the new node sub _add_point_to_space { my ($self, $point, $space) = @_; my $n = $space->add_nodes($point); # check whether we are inside an island or outside my $inside = defined first { $self->islands->[$_]->contains_point($point) } 0..$#{$self->islands}; # find candidates by checking visibility from $from to them foreach my $idx (0..$#{$space->nodes}) { my $line = Slic3r::Line->new($point, $space->nodes->[$idx]); # if $point is inside an island, it is visible from $idx when island contains their line # if $point is outside an island, it is visible from $idx when their line does not cross any island if ( ($inside && defined first { $_->contains_line($line) } @{$self->_inner}) || (!$inside && !@{intersection_pl( [ $line->as_polyline ], [ map @$_, @{$self->islands} ], )}) ) { # $n ($point) and $idx are visible $space->add_edge($n, $idx, $line->length); } } # if we found no visibility, retry with larger margins if (!exists $space->edges->{$n} && $inside) { foreach my $idx (0..$#{$space->nodes}) { my $line = Slic3r::Line->new($point, $space->nodes->[$idx]); if (defined first { $_->contains_line($line) } @{$self->islands}) { # $n ($point) and $idx are visible $space->add_edge($n, $idx, $line->length); } } } warn "Temporary node is not visible from any other node" if !exists $space->edges->{$n}; return $n; } package Slic3r::GCode::MotionPlanner::ConfigurationSpace; use Moo; has 'nodes' => (is => 'rw', default => sub { [] }); # [ Point, ... ] has 'edges' => (is => 'rw', default => sub { {} }); # node_idx => { node_idx => distance, ... } has '_infinity' => (is => 'rw'); sub clone { my $self = shift; return (ref $self)->new( nodes => [ map $_->clone, @{$self->nodes} ], edges => { map { $_ => { %{$self->edges->{$_}} } } keys %{$self->edges} }, _infinity => $self->_infinity, ); } sub nodes_count { my $self = shift; return scalar(@{ $self->nodes }); } sub add_nodes { my ($self, @nodes) = @_; my $offset = $self->nodes_count; push @{ $self->nodes }, @nodes; return $offset; } sub add_edge { my ($self, $a, $b, $dist) = @_; $self->edges->{$a}{$b} = $self->edges->{$b}{$a} = $dist; } sub shortest_path { my ($self, $node_from, $node_to) = @_; my $edges = $self->edges; my (%dist, %visited, %prev); $dist{$_} = $self->_infinity for keys %$edges; $dist{$node_from} = 0; my @queue = ($node_from); while (@queue) { my $u = -1; { # find node in @queue with smallest distance in %dist and has not been visited my $d = -1; foreach my $n (@queue) { next if $visited{$n}; if ($u == -1 || $dist{$n} < $d) { $u = $n; $d = $dist{$n}; } } } last if $u == $node_to; # remove $u from @queue @queue = grep $_ != $u, @queue; $visited{$u} = 1; # loop through neighbors of $u foreach my $v (keys %{ $edges->{$u} }) { my $alt = $dist{$u} + $edges->{$u}{$v}; if ($alt < $dist{$v}) { $dist{$v} = $alt; $prev{$v} = $u; if (!$visited{$v}) { push @queue, $v; } } } } my @points = (); { my $u = $node_to; while (exists $prev{$u}) { unshift @points, $self->nodes->[$u]; $u = $prev{$u}; } unshift @points, $self->nodes->[$node_from]; } return Slic3r::Polyline->new(@points); } # for debugging purposes sub get_lines { my $self = shift; my @lines = (); my %lines = (); for my $i (keys %{$self->edges}) { for my $j (keys %{$self->edges->{$i}}) { my $line_id = join '_', sort $i, $j; next if $lines{$line_id}; $lines{$line_id} = 1; push @lines, Slic3r::Line->new(map $self->nodes->[$_], $i, $j); } } return [@lines]; } 1; Slic3r-1.3.0/lib/Slic3r/GCode/PressureRegulator.pm000066400000000000000000000076141327442435500216140ustar00rootroot00000000000000# A pure perl (no C++ implementation) G-code filter, to control the pressure inside the nozzle. package Slic3r::GCode::PressureRegulator; use Moo; has 'config' => (is => 'ro', required => 1); has 'enable' => (is => 'rw', default => sub { 0 }); has 'reader' => (is => 'ro', default => sub { Slic3r::GCode::Reader->new }); has '_extrusion_axis' => (is => 'rw', default => sub { "E" }); has '_tool' => (is => 'rw', default => sub { 0 }); has '_last_print_F' => (is => 'rw', default => sub { 0 }); has '_advance' => (is => 'rw', default => sub { 0 }); # extra E injected use Slic3r::Geometry qw(epsilon); # Acknowledgements: # The advance algorithm was proposed by Matthew Roberts. # The initial work on this Slic3r feature was done by Luís Andrade (lluis) sub BUILD { my ($self) = @_; $self->reader->apply_print_config($self->config); $self->_extrusion_axis($self->config->get_extrusion_axis); } sub process { my $self = shift; my ($gcode, $flush) = @_; my $new_gcode = ""; $self->reader->parse($gcode, sub { my ($reader, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $self->_tool($1); } elsif ($info->{extruding} && $info->{dist_XY} > 0) { # This is a print move. my $F = $args->{F} // $reader->F; if ($F != $self->_last_print_F || ($F == $self->_last_print_F && $self->_advance == 0)) { # We are setting a (potentially) new speed or a discharge event happend since the last speed change, so we calculate the new advance amount. # First calculate relative flow rate (mm of filament over mm of travel) my $rel_flow_rate = $info->{dist_E} / $info->{dist_XY}; # Then calculate absolute flow rate (mm/sec of feedstock) my $flow_rate = $rel_flow_rate * $F / 60; # And finally calculate advance by using the user-configured K factor. my $new_advance = $self->config->pressure_advance * ($flow_rate**2); if (abs($new_advance - $self->_advance) > 1E-5) { my $new_E = ($self->config->use_relative_e_distances ? 0 : $reader->E) + ($new_advance - $self->_advance); $new_gcode .= sprintf "G1 %s%.5f F%.3f ; pressure advance\n", $self->_extrusion_axis, $new_E, $self->_unretract_speed; $new_gcode .= sprintf "G92 %s%.5f ; restore E\n", $self->_extrusion_axis, $reader->E if !$self->config->use_relative_e_distances; $new_gcode .= sprintf "G1 F%.3f ; restore F\n", $F; $self->_advance($new_advance); } $self->_last_print_F($F); } } elsif (($info->{retracting} || $cmd eq 'G10') && $self->_advance != 0) { # We need to bring pressure to zero when retracting. $new_gcode .= $self->_discharge($args->{F}, $args->{F} // $reader->F); } $new_gcode .= "$info->{raw}\n"; }); if ($flush) { $new_gcode .= $self->_discharge; } return $new_gcode; } sub _discharge { my ($self, $F, $oldSpeed) = @_; my $new_E = ($self->config->use_relative_e_distances ? 0 : $self->reader->E) - $self->_advance; my $gcode = sprintf "G1 %s%.5f F%.3f ; pressure discharge\n", $self->_extrusion_axis, $new_E, $F // $self->_unretract_speed; $gcode .= sprintf "G92 %s%.5f ; restore E\n", $self->_extrusion_axis, $self->reader->E if !$self->config->use_relative_e_distances; $gcode .= sprintf "G1 F%.3f ; restore F\n", $oldSpeed if $oldSpeed; $self->_advance(0); return $gcode; } sub _unretract_speed { my ($self) = @_; return $self->config->get_at('retract_speed', $self->_tool) * 60; } 1; Slic3r-1.3.0/lib/Slic3r/GCode/Reader.pm000066400000000000000000000052001327442435500173060ustar00rootroot00000000000000package Slic3r::GCode::Reader; use Moo; has 'config' => (is => 'ro', default => sub { Slic3r::Config::GCode->new }); has 'X' => (is => 'rw', default => sub {0}); has 'Y' => (is => 'rw', default => sub {0}); has 'Z' => (is => 'rw', default => sub {0}); has 'E' => (is => 'rw', default => sub {0}); has 'F' => (is => 'rw', default => sub {0}); has '_extrusion_axis' => (is => 'rw', default => sub {"E"}); our $Verbose = 0; my @AXES = qw(X Y Z E); sub apply_print_config { my ($self, $print_config) = @_; $self->config->apply_static($print_config); $self->_extrusion_axis($self->config->get_extrusion_axis); } sub clone { my $self = shift; return (ref $self)->new( map { $_ => $self->$_ } (@AXES, 'F', '_extrusion_axis', 'config'), ); } sub parse { my $self = shift; my ($gcode, $cb) = @_; foreach my $raw_line (split /\R+/, $gcode) { print "$raw_line\n" if $Verbose || $ENV{SLIC3R_TESTS_GCODE}; my $line = $raw_line; $line =~ s/\s*;(.*)//; # strip comment my %info = (comment => $1, raw => $raw_line); # parse command my ($command, @args) = split /\s+/, $line; $command //= ''; my %args = map { /([A-Z])(.*)/; ($1 => $2) } @args; # convert extrusion axis if (exists $args{ $self->_extrusion_axis }) { $args{E} = $args{ $self->_extrusion_axis }; } # check motion if ($command =~ /^G[01]$/) { foreach my $axis (@AXES) { if (exists $args{$axis}) { $self->$axis(0) if $axis eq 'E' && $self->config->use_relative_e_distances; $info{"dist_$axis"} = $args{$axis} - $self->$axis; $info{"new_$axis"} = $args{$axis}; } else { $info{"dist_$axis"} = 0; $info{"new_$axis"} = $self->$axis; } } $info{dist_XY} = sqrt(($info{dist_X}**2) + ($info{dist_Y}**2)); if (exists $args{E}) { if ($info{dist_E} > 0) { $info{extruding} = 1; } elsif ($info{dist_E} < 0) { $info{retracting} = 1 } } else { $info{travel} = 1; } } # run callback $cb->($self, $command, \%args, \%info); # update coordinates if ($command =~ /^(?:G[01]|G92)$/) { for my $axis (@AXES, 'F') { $self->$axis($args{$axis}) if exists $args{$axis}; } } # TODO: update temperatures } } 1; Slic3r-1.3.0/lib/Slic3r/GCode/VibrationLimit.pm000066400000000000000000000040161327442435500210440ustar00rootroot00000000000000package Slic3r::GCode::VibrationLimit; use Moo; extends 'Slic3r::GCode::Reader'; has '_min_time' => (is => 'lazy'); has '_last_dir' => (is => 'ro', default => sub { [0,0] }); has '_dir_time' => (is => 'ro', default => sub { [0,0] }); # inspired by http://hydraraptor.blogspot.it/2010/12/frequency-limit.html use List::Util qw(max); sub _build__min_time { my ($self) = @_; return 1 / ($self->config->vibration_limit * 60); # in minutes } sub process { my $self = shift; my ($gcode) = @_; my $new_gcode = ""; $self->parse($gcode, sub { my ($reader, $cmd, $args, $info) = @_; if ($cmd eq 'G1' && $info->{dist_XY} > 0) { my $point = Slic3r::Pointf->new($args->{X} // $reader->X, $args->{Y} // $reader->Y); my @dir = ( ($point->x <=> $reader->X), ($point->y <=> $reader->Y), #$ ); my $time = $info->{dist_XY} / ($args->{F} // $reader->F); # in minutes if ($time > 0) { my @pause = (); foreach my $axis (0..$#dir) { if ($dir[$axis] != 0 && $self->_last_dir->[$axis] != $dir[$axis]) { if ($self->_last_dir->[$axis] != 0) { # this axis is changing direction: check whether we need to pause if ($self->_dir_time->[$axis] < $self->_min_time) { push @pause, ($self->_min_time - $self->_dir_time->[$axis]); } } $self->_last_dir->[$axis] = $dir[$axis]; $self->_dir_time->[$axis] = 0; } $self->_dir_time->[$axis] += $time; } if (@pause) { $new_gcode .= sprintf "G4 P%d\n", max(@pause) * 60 * 1000; } } } $new_gcode .= $info->{raw} . "\n"; }); return $new_gcode; } 1; Slic3r-1.3.0/lib/Slic3r/GUI.pm000066400000000000000000000414531327442435500155610ustar00rootroot00000000000000package Slic3r::GUI; use strict; use warnings; use utf8; use Wx 0.9901 qw(:bitmap :dialog :icon :id :misc :systemsettings :toplevelwindow :filedialog :font); use Wx::Event qw(EVT_MENU); BEGIN { # Wrap the Wx::_load_plugin() function which doesn't work with non-ASCII paths no warnings 'redefine'; my $orig = *Wx::_load_plugin{CODE}; *Wx::_load_plugin = sub { $_[0] = Slic3r::decode_path($_[0]); $orig->(@_); }; } use File::Basename qw(basename); use FindBin; use List::Util qw(first any); use Slic3r::Geometry qw(X Y); use Slic3r::GUI::2DBed; use Slic3r::GUI::AboutDialog; use Slic3r::GUI::BedShapeDialog; use Slic3r::GUI::BonjourBrowser; use Slic3r::GUI::ConfigWizard; use Slic3r::GUI::Controller; use Slic3r::GUI::Controller::ManualControlDialog; use Slic3r::GUI::Controller::PrinterPanel; use Slic3r::GUI::MainFrame; use Slic3r::GUI::Notifier; use Slic3r::GUI::Plater; use Slic3r::GUI::Plater::2D; use Slic3r::GUI::Plater::2DToolpaths; use Slic3r::GUI::Plater::3D; use Slic3r::GUI::Plater::3DPreview; use Slic3r::GUI::Plater::ObjectPartsPanel; use Slic3r::GUI::Plater::ObjectCutDialog; use Slic3r::GUI::Plater::ObjectSettingsDialog; use Slic3r::GUI::Plater::LambdaObjectDialog; use Slic3r::GUI::Plater::OverrideSettingsPanel; use Slic3r::GUI::Plater::SplineControl; use Slic3r::GUI::Preferences; use Slic3r::GUI::ProgressStatusBar; use Slic3r::GUI::Projector; use Slic3r::GUI::OptionsGroup; use Slic3r::GUI::OptionsGroup::Field; use Slic3r::GUI::Preset; use Slic3r::GUI::PresetEditor; use Slic3r::GUI::PresetEditorDialog; use Slic3r::GUI::SLAPrintOptions; use Slic3r::GUI::ReloadDialog; our $have_OpenGL = eval "use Slic3r::GUI::3DScene; 1"; our $have_LWP = eval "use LWP::UserAgent; 1"; use Wx::Event qw(EVT_IDLE EVT_COMMAND); use base 'Wx::App'; use constant FILE_WILDCARDS => { known => 'Known files (*.stl, *.obj, *.amf, *.xml, *.3mf)|*.3mf;*.3MF;*.stl;*.STL;*.obj;*.OBJ;*.amf;*.AMF;*.xml;*.XML', stl => 'STL files (*.stl)|*.stl;*.STL', obj => 'OBJ files (*.obj)|*.obj;*.OBJ', amf => 'AMF files (*.amf)|*.amf;*.AMF;*.xml;*.XML', tmf => '3MF files (*.3mf)|*.3mf;*.3MF', ini => 'INI files *.ini|*.ini;*.INI', gcode => 'G-code files (*.gcode, *.gco, *.g, *.ngc)|*.gcode;*.GCODE;*.gco;*.GCO;*.g;*.G;*.ngc;*.NGC', svg => 'SVG files *.svg|*.svg;*.SVG', }; use constant MODEL_WILDCARD => join '|', @{&FILE_WILDCARDS}{qw(known stl obj amf tmf)}; use constant STL_MODEL_WILDCARD => join '|', @{&FILE_WILDCARDS}{qw(stl)}; use constant AMF_MODEL_WILDCARD => join '|', @{&FILE_WILDCARDS}{qw(amf)}; use constant TMF_MODEL_WILDCARD => join '|', @{&FILE_WILDCARDS}{qw(tmf)}; our $datadir; # If set, the "Controller" tab for the control of the printer over serial line and the serial port settings are hidden. our $autosave; our $threads; our @cb; our $Settings = { _ => { version_check => 1, autocenter => 1, autoalignz => 1, invert_zoom => 0, background_processing => 0, threads => $Slic3r::Config::Options->{threads}{default}, color_toolpaths_by => 'role', tabbed_preset_editors => 1, show_host => 0, nudge_val => 1, reload_hide_dialog => 0, reload_behavior => 0 }, }; our $have_button_icons = &Wx::wxVERSION_STRING =~ / (?:2\.9\.[1-9]|3\.)/; our $small_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); $small_font->SetPointSize(11) if &Wx::wxMAC; our $small_bold_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); $small_bold_font->SetPointSize(11) if &Wx::wxMAC; $small_bold_font->SetWeight(wxFONTWEIGHT_BOLD); our $medium_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); $medium_font->SetPointSize(12); our $grey = Wx::Colour->new(200,200,200); # to use in ScrolledWindow::SetScrollRate(xstep, ystep) # step related to system font point size our $scroll_step = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)->GetPointSize; our $VERSION_CHECK_EVENT : shared = Wx::NewEventType; our $DLP_projection_screen; sub OnInit { my ($self) = @_; $self->SetAppName('Slic3r'); Slic3r::debugf "wxWidgets version %s, Wx version %s\n", &Wx::wxVERSION_STRING, $Wx::VERSION; $self->{notifier} = Slic3r::GUI::Notifier->new; $self->{presets} = { print => [], filament => [], printer => [] }; # locate or create data directory # Unix: ~/.Slic3r # Windows: "C:\Users\username\AppData\Roaming\Slic3r" or "C:\Documents and Settings\username\Application Data\Slic3r" # Mac: "~/Library/Application Support/Slic3r" $datadir ||= Slic3r::decode_path(Wx::StandardPaths::Get->GetUserDataDir); my $enc_datadir = Slic3r::encode_path($datadir); Slic3r::debugf "Data directory: %s\n", $datadir; # just checking for existence of $datadir is not enough: it may be an empty directory # supplied as argument to --datadir; in that case we should still run the wizard my $run_wizard = (-d $enc_datadir && -e "$enc_datadir/slic3r.ini") ? 0 : 1; foreach my $dir ($enc_datadir, "$enc_datadir/print", "$enc_datadir/filament", "$enc_datadir/printer") { next if -d $dir; if (!mkdir $dir) { my $error = "Slic3r was unable to create its data directory at $dir ($!)."; warn "$error\n"; fatal_error(undef, $error); } } # load settings my $last_version; if (-f "$enc_datadir/slic3r.ini") { my $ini = eval { Slic3r::Config->read_ini("$datadir/slic3r.ini") }; if ($ini) { $last_version = $ini->{_}{version}; $ini->{_}{$_} = $Settings->{_}{$_} for grep !exists $ini->{_}{$_}, keys %{$Settings->{_}}; $Settings = $ini; } delete $Settings->{_}{mode}; # handle legacy } $Settings->{_}{version} = $Slic3r::VERSION; $Settings->{_}{threads} = $threads if $threads; $self->save_settings; if (-f "$enc_datadir/simple.ini") { # The Simple Mode settings were already automatically duplicated to presets # named "Simple Mode" in each group, so we already support retrocompatibility. unlink "$enc_datadir/simple.ini"; } $self->load_presets; # application frame Wx::Image::AddHandler(Wx::PNGHandler->new); $self->{mainframe} = my $frame = Slic3r::GUI::MainFrame->new; $self->SetTopWindow($frame); # load init bundle { my @dirs = ($FindBin::Bin); if (&Wx::wxMAC) { push @dirs, qw(); } elsif (&Wx::wxMSW) { push @dirs, qw(); } my $init_bundle = first { -e $_ } map "$_/.init_bundle.ini", @dirs; if ($init_bundle) { Slic3r::debugf "Loading config bundle from %s\n", $init_bundle; $self->{mainframe}->load_configbundle($init_bundle, 1); $run_wizard = 0; } } if (!$run_wizard && (!defined $last_version || $last_version ne $Slic3r::VERSION)) { # user was running another Slic3r version on this computer if (!defined $last_version || $last_version =~ /^0\./) { show_info($self->{mainframe}, "Hello! Support material was improved since the " . "last version of Slic3r you used. It is strongly recommended to revert " . "your support material settings to the factory defaults and start from " . "those. Enjoy and provide feedback!", "Support Material"); } if (!defined $last_version || $last_version =~ /^(?:0|1\.[01])\./) { show_info($self->{mainframe}, "Hello! In this version a new Bed Shape option was " . "added. If the bed coordinates in the plater preview screen look wrong, go " . "to Print Settings and click the \"Set\" button next to \"Bed Shape\".", "Bed Shape"); } } $self->{mainframe}->config_wizard if $run_wizard; $self->check_version if $self->have_version_check && ($Settings->{_}{version_check} // 1) && (!$Settings->{_}{last_version_check} || (time - $Settings->{_}{last_version_check}) >= 86400); EVT_IDLE($frame, sub { while (my $cb = shift @cb) { $cb->(); } }); EVT_COMMAND($self, -1, $VERSION_CHECK_EVENT, sub { my ($self, $event) = @_; my ($success, $response, $manual_check) = @{$event->GetData}; if ($success) { if ($response =~ /^obsolete ?= ?([a-z0-9.-]+,)*\Q$Slic3r::VERSION\E(?:,|$)/) { my $res = Wx::MessageDialog->new(undef, "A new version is available. Do you want to open the Slic3r website now?", 'Update', wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxICON_INFORMATION | wxICON_ERROR)->ShowModal; Wx::LaunchDefaultBrowser('http://slic3r.org/') if $res == wxID_YES; } else { Slic3r::GUI::show_info(undef, "You're using the latest version. No updates are available.") if $manual_check; } $Settings->{_}{last_version_check} = time(); $self->save_settings; } else { Slic3r::GUI::show_error(undef, "Failed to check for updates. Try later.") if $manual_check; } }); return 1; } sub about { my ($self) = @_; my $about = Slic3r::GUI::AboutDialog->new(undef); $about->ShowModal; $about->Destroy; } # static method accepting a wxWindow object as first parameter sub catch_error { my ($self, $cb, $message_dialog) = @_; if (my $err = $@) { $cb->() if $cb; $message_dialog ? $message_dialog->($err, 'Error', wxOK | wxICON_ERROR) : Slic3r::GUI::show_error($self, $err); return 1; } return 0; } # static method accepting a wxWindow object as first parameter sub show_error { my ($parent, $message) = @_; Wx::MessageDialog->new($parent, $message, 'Error', wxOK | wxICON_ERROR)->ShowModal; } # static method accepting a wxWindow object as first parameter sub show_info { my ($parent, $message, $title) = @_; Wx::MessageDialog->new($parent, $message, $title || 'Notice', wxOK | wxICON_INFORMATION)->ShowModal; } # static method accepting a wxWindow object as first parameter sub fatal_error { show_error(@_); exit 1; } # static method accepting a wxWindow object as first parameter sub warning_catcher { my ($self, $message_dialog) = @_; return sub { my $message = shift; return if $message =~ /GLUquadricObjPtr|Attempt to free unreferenced scalar/; my @params = ($message, 'Warning', wxOK | wxICON_WARNING); $message_dialog ? $message_dialog->(@params) : Wx::MessageDialog->new($self, @params)->ShowModal; }; } sub notify { my ($self, $message) = @_; my $frame = $self->GetTopWindow; # try harder to attract user attention on OS X $frame->RequestUserAttention(&Wx::wxMAC ? wxUSER_ATTENTION_ERROR : wxUSER_ATTENTION_INFO) unless ($frame->IsActive); $self->{notifier}->notify($message); } sub save_settings { my ($self) = @_; Slic3r::Config->write_ini("$datadir/slic3r.ini", $Settings); } sub presets { return $_[0]->{presets}; } sub load_presets { my ($self) = @_; for my $group (qw(printer filament print)) { my $presets = $self->{presets}{$group}; # keep external or dirty presets @$presets = grep { ($_->external && $_->file_exists) || $_->dirty } @$presets; my $dir = "$Slic3r::GUI::datadir/$group"; opendir my $dh, Slic3r::encode_path($dir) or die "Failed to read directory $dir (errno: $!)\n"; foreach my $file (grep /\.ini$/i, readdir $dh) { $file = Slic3r::decode_path($file); my $name = basename($file); $name =~ s/\.ini$//i; # skip if we already have it next if any { $_->name eq $name } @$presets; push @$presets, Slic3r::GUI::Preset->new( group => $group, name => $name, file => "$dir/$file", ); } closedir $dh; @$presets = sort { $a->name cmp $b->name } @$presets; unshift @$presets, Slic3r::GUI::Preset->new( group => $group, default => 1, name => '- default -', ); } } sub add_external_preset { my ($self, $file) = @_; my $name = basename($file); # keep .ini suffix for my $group (qw(printer filament print)) { my $presets = $self->{presets}{$group}; # remove any existing preset with the same name @$presets = grep { $_->name ne $name } @$presets; push @$presets, Slic3r::GUI::Preset->new( group => $group, name => $name, file => $file, external => 1, ); } return $name; } sub have_version_check { my ($self) = @_; # return an explicit 0 return ($Slic3r::have_threads && $Slic3r::VERSION !~ /-dev$/ && $have_LWP) || 0; } sub check_version { my ($self, $manual_check) = @_; Slic3r::debugf "Checking for updates...\n"; @_ = (); threads->create(sub { my $ua = LWP::UserAgent->new; $ua->timeout(10); my $response = $ua->get('http://slic3r.org/updatecheck'); Wx::PostEvent($self, Wx::PlThreadEvent->new(-1, $VERSION_CHECK_EVENT, threads::shared::shared_clone([ $response->is_success, $response->decoded_content, $manual_check ]))); Slic3r::thread_cleanup(); })->detach; } sub output_path { my ($self, $dir) = @_; return ($Settings->{_}{last_output_path} && $Settings->{_}{remember_output_path}) ? $Settings->{_}{last_output_path} : $dir; } sub open_model { my ($self, $window) = @_; my $dir = $Slic3r::GUI::Settings->{recent}{skein_directory} || $Slic3r::GUI::Settings->{recent}{config_directory} || ''; my $dialog = Wx::FileDialog->new($window // $self->GetTopWindow, 'Choose one or more files (STL/OBJ/AMF/3MF):', $dir, "", MODEL_WILDCARD, wxFD_OPEN | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST); if ($dialog->ShowModal != wxID_OK) { $dialog->Destroy; return; } my @input_files = map Slic3r::decode_path($_), $dialog->GetPaths; $dialog->Destroy; return @input_files; } sub CallAfter { my ($self, $cb) = @_; push @cb, $cb; } sub scan_serial_ports { my ($self) = @_; my @ports = (); if ($^O eq 'MSWin32') { # Windows if (eval "use Win32::TieRegistry; 1") { my $ts = Win32::TieRegistry->new("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM", { Access => 'KEY_READ' }); if ($ts) { # when no serial ports are available, the registry key doesn't exist and # TieRegistry->new returns undef $ts->Tie(\my %reg); push @ports, sort values %reg; } } } else { # UNIX and OS X push @ports, glob '/dev/{ttyUSB,ttyACM,tty.,cu.,rfcomm}*'; } return grep !/Bluetooth|FireFly/, @ports; } sub append_menu_item { my ($self, $menu, $string, $description, $cb, $id, $icon, $kind) = @_; $id //= &Wx::NewId(); my $item = Wx::MenuItem->new($menu, $id, $string, $description // '', $kind // 0); $self->set_menu_item_icon($item, $icon); $menu->Append($item); EVT_MENU($self, $id, $cb); return $item; } sub append_submenu { my ($self, $menu, $string, $description, $submenu, $id, $icon) = @_; $id //= &Wx::NewId(); my $item = Wx::MenuItem->new($menu, $id, $string, $description // ''); $self->set_menu_item_icon($item, $icon); $item->SetSubMenu($submenu); $menu->Append($item); return $item; } sub set_menu_item_icon { my ($self, $menuItem, $icon) = @_; # SetBitmap was not available on OS X before Wx 0.9927 if ($icon && $menuItem->can('SetBitmap')) { $menuItem->SetBitmap(Wx::Bitmap->new($Slic3r::var->($icon), wxBITMAP_TYPE_PNG)); } } sub save_window_pos { my ($self, $window, $name) = @_; $Settings->{_}{"${name}_pos"} = join ',', $window->GetScreenPositionXY; $Settings->{_}{"${name}_size"} = join ',', $window->GetSizeWH; $Settings->{_}{"${name}_maximized"} = $window->IsMaximized; $self->save_settings; } sub restore_window_pos { my ($self, $window, $name) = @_; if (defined $Settings->{_}{"${name}_pos"}) { my $size = [ split ',', $Settings->{_}{"${name}_size"}, 2 ]; $window->SetSize($size); my $display = Wx::Display->new->GetClientArea(); my $pos = [ split ',', $Settings->{_}{"${name}_pos"}, 2 ]; if (($pos->[X] + $size->[X]/2) < $display->GetRight && ($pos->[Y] + $size->[Y]/2) < $display->GetBottom) { $window->Move($pos); } $window->Maximize(1) if $Settings->{_}{"${name}_maximized"}; } } 1; Slic3r-1.3.0/lib/Slic3r/GUI/000077500000000000000000000000001327442435500152145ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r/GUI/2DBed.pm000066400000000000000000000175751327442435500164510ustar00rootroot00000000000000# Bed shape dialog package Slic3r::GUI::2DBed; use strict; use warnings; use List::Util qw(min max); use Slic3r::Geometry qw(PI X Y unscale deg2rad); use Slic3r::Geometry::Clipper qw(intersection_pl); use Wx qw(:misc :pen :brush :font :systemsettings wxTAB_TRAVERSAL wxSOLID); use Wx::Event qw(EVT_PAINT EVT_ERASE_BACKGROUND EVT_MOUSE_EVENTS EVT_SIZE); use base qw(Wx::Panel Class::Accessor); # Color Scheme use Slic3r::GUI::ColorScheme; __PACKAGE__->mk_accessors(qw(bed_shape interactive pos _scale_factor _shift on_move _painted)); sub new { my ($class, $parent, $bed_shape) = @_; if ( ( defined $Slic3r::GUI::Settings->{_}{colorscheme} ) && ( Slic3r::GUI::ColorScheme->can($Slic3r::GUI::Settings->{_}{colorscheme}) ) ) { my $myGetSchemeName = \&{"Slic3r::GUI::ColorScheme::$Slic3r::GUI::Settings->{_}{colorscheme}"}; $myGetSchemeName->(); } else { Slic3r::GUI::ColorScheme->getDefault(); } my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, [250,-1], wxTAB_TRAVERSAL); $self->{user_drawn_background} = $^O ne 'darwin'; $self->bed_shape($bed_shape // []); EVT_PAINT($self, \&_repaint); EVT_ERASE_BACKGROUND($self, sub {}) if $self->{user_drawn_background}; EVT_MOUSE_EVENTS($self, \&_mouse_event); EVT_SIZE($self, sub { $self->Refresh; }); return $self; } sub _repaint { my ($self, $event) = @_; my $dc = Wx::AutoBufferedPaintDC->new($self); my ($cw, $ch) = $self->GetSizeWH; return if $cw == 0; # when canvas is not rendered yet, size is 0,0 if ($self->{user_drawn_background}) { # On all systems the AutoBufferedPaintDC() achieves double buffering. # On MacOS the background is erased, on Windows the background is not erased # and on Linux/GTK the background is erased to gray color. # Fill DC with the background on Windows & Linux/GTK. my $brush_background = Wx::Brush->new(Wx::Colour->new(@BACKGROUND255), wxSOLID); my $pen_background = Wx::Pen->new(Wx::Colour->new(@BACKGROUND255), 1, wxSOLID); $dc->SetPen($pen_background); $dc->SetBrush($brush_background); my $rect = $self->GetUpdateRegion()->GetBox(); $dc->DrawRectangle($rect->GetLeft(), $rect->GetTop(), $rect->GetWidth(), $rect->GetHeight()); } # turn $cw and $ch from sizes to max coordinates $cw--; $ch--; my $cbb = Slic3r::Geometry::BoundingBoxf->new_from_points([ Slic3r::Pointf->new(0, 0), Slic3r::Pointf->new($cw, $ch), ]); # leave space for origin point $cbb->set_x_min($cbb->x_min + 4); $cbb->set_x_max($cbb->x_max - 4); $cbb->set_y_max($cbb->y_max - 4); # leave space for origin label $cbb->set_y_max($cbb->y_max - 13); # read new size ($cw, $ch) = @{$cbb->size}; my $ccenter = $cbb->center; # get bounding box of bed shape in G-code coordinates my $bed_shape = $self->bed_shape; my $bed_polygon = Slic3r::Polygon->new_scale(@$bed_shape); my $bb = Slic3r::Geometry::BoundingBoxf->new_from_points($bed_shape); $bb->merge_point(Slic3r::Pointf->new(0,0)); # origin needs to be in the visible area my ($bw, $bh) = @{$bb->size}; my $bcenter = $bb->center; # calculate the scaling factor for fitting bed shape in canvas area my $sfactor = min($cw/$bw, $ch/$bh); my $shift = Slic3r::Pointf->new( $ccenter->x - $bcenter->x * $sfactor, $ccenter->y - $bcenter->y * $sfactor, #- ); $self->_scale_factor($sfactor); $self->_shift(Slic3r::Pointf->new( $shift->x + $cbb->x_min, $shift->y - ($cbb->y_max-$self->GetSize->GetHeight), #++ )); # draw bed fill { $dc->SetPen(Wx::Pen->new(Wx::Colour->new(0,0,0), 1, wxSOLID)); $dc->SetBrush(Wx::Brush->new(Wx::Colour->new(@BED_COLOR), wxSOLID)); $dc->DrawPolygon([ map $self->to_pixels($_), @$bed_shape ], 0, 0); } # draw grid { my $step = 10; # 1cm grid my @polylines = (); for (my $x = $bb->x_min - ($bb->x_min % $step) + $step; $x < $bb->x_max; $x += $step) { push @polylines, Slic3r::Polyline->new_scale([$x, $bb->y_min], [$x, $bb->y_max]); } for (my $y = $bb->y_min - ($bb->y_min % $step) + $step; $y < $bb->y_max; $y += $step) { push @polylines, Slic3r::Polyline->new_scale([$bb->x_min, $y], [$bb->x_max, $y]); } @polylines = @{intersection_pl(\@polylines, [$bed_polygon])}; $dc->SetPen(Wx::Pen->new(Wx::Colour->new(@BED_GRID), 1, wxSOLID)); $dc->DrawLine(map @{$self->to_pixels([map unscale($_), @$_])}, @$_[0,-1]) for @polylines; } # draw bed contour { $dc->SetPen(Wx::Pen->new(Wx::Colour->new(0,0,0), 1, wxSOLID)); $dc->SetBrush(Wx::Brush->new(Wx::Colour->new(255,255,255), wxTRANSPARENT)); $dc->DrawPolygon([ map $self->to_pixels($_), @$bed_shape ], 0, 0); } my $origin_px = $self->to_pixels(Slic3r::Pointf->new(0,0)); # draw axes { my $axes_len = 50; my $arrow_len = 6; my $arrow_angle = deg2rad(45); $dc->SetPen(Wx::Pen->new(Wx::Colour->new(255,0,0), 2, wxSOLID)); # red my $x_end = Slic3r::Pointf->new($origin_px->[X] + $axes_len, $origin_px->[Y]); $dc->DrawLine(@$origin_px, @$x_end); foreach my $angle (-$arrow_angle, +$arrow_angle) { my $end = $x_end->clone; $end->translate(-$arrow_len, 0); $end->rotate($angle, $x_end); $dc->DrawLine(@$x_end, @$end); } $dc->SetPen(Wx::Pen->new(Wx::Colour->new(0,255,0), 2, wxSOLID)); # green my $y_end = Slic3r::Pointf->new($origin_px->[X], $origin_px->[Y] - $axes_len); $dc->DrawLine(@$origin_px, @$y_end); foreach my $angle (-$arrow_angle, +$arrow_angle) { my $end = $y_end->clone; $end->translate(0, +$arrow_len); $end->rotate($angle, $y_end); $dc->DrawLine(@$y_end, @$end); } } # draw origin { $dc->SetPen(Wx::Pen->new(Wx::Colour->new(0,0,0), 1, wxSOLID)); $dc->SetBrush(Wx::Brush->new(Wx::Colour->new(0,0,0), wxSOLID)); $dc->DrawCircle(@$origin_px, 3); $dc->SetTextForeground(Wx::Colour->new(0,0,0)); $dc->SetFont(Wx::Font->new(10, wxDEFAULT, wxNORMAL, wxNORMAL)); $dc->DrawText("(0,0)", $origin_px->[X] + 1, $origin_px->[Y] + 2); } # draw current position if (defined $self->pos) { my $pos_px = $self->to_pixels($self->pos); $dc->SetPen(Wx::Pen->new(Wx::Colour->new(200,0,0), 2, wxSOLID)); $dc->SetBrush(Wx::Brush->new(Wx::Colour->new(200,0,0), wxTRANSPARENT)); $dc->DrawCircle(@$pos_px, 5); $dc->DrawLine($pos_px->[X]-15, $pos_px->[Y], $pos_px->[X]+15, $pos_px->[Y]); $dc->DrawLine($pos_px->[X], $pos_px->[Y]-15, $pos_px->[X], $pos_px->[Y]+15); } $self->_painted(1); } sub _mouse_event { my ($self, $event) = @_; return if !$self->interactive; return if !$self->_painted; my $pos = $event->GetPosition; my $point = $self->to_units([ $pos->x, $pos->y ]); #]] if ($event->LeftDown || $event->Dragging) { $self->on_move->($point) if $self->on_move; $self->Refresh; } } # convert G-code coordinates into pixels sub to_pixels { my ($self, $point) = @_; my $p = Slic3r::Pointf->new(@$point); $p->scale($self->_scale_factor); $p->translate(@{$self->_shift}); return [$p->x, $self->GetSize->GetHeight - $p->y]; #]] } # convert pixels into G-code coordinates sub to_units { my ($self, $point) = @_; my $p = Slic3r::Pointf->new( $point->[X], $self->GetSize->GetHeight - $point->[Y], ); $p->translate(@{$self->_shift->negative}); $p->scale(1/$self->_scale_factor); return $p; } sub set_pos { my ($self, $pos) = @_; $self->pos($pos); $self->Refresh; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/3DScene.pm000066400000000000000000001615311327442435500170050ustar00rootroot00000000000000package Slic3r::GUI::3DScene::Base; use strict; use warnings; use Wx::Event qw(EVT_PAINT EVT_SIZE EVT_ERASE_BACKGROUND EVT_IDLE EVT_MOUSEWHEEL EVT_MOUSE_EVENTS); # must load OpenGL *before* Wx::GLCanvas use OpenGL qw(:glconstants :glfunctions :glufunctions :gluconstants); use base qw(Wx::GLCanvas Class::Accessor); use Math::Trig qw(asin); use List::Util qw(reduce min max first); use Slic3r::Geometry qw(X Y Z MIN MAX triangle_normal normalize deg2rad tan scale unscale scaled_epsilon); use Slic3r::Geometry::Clipper qw(offset_ex intersection_pl); use Wx::GLCanvas qw(:all); __PACKAGE__->mk_accessors( qw(_quat _dirty init enable_picking enable_moving on_viewport_changed on_hover on_select on_double_click on_right_click on_move volumes _sphi _stheta cutting_plane_axis cutting_plane_z cut_lines_vertices bed_shape bed_triangles bed_grid_lines background origin _mouse_pos _hover_volume_idx _drag_volume_idx _drag_start_pos _drag_start_xy _dragged _camera_target _zoom ) ); use constant TRACKBALLSIZE => 0.8; use constant TURNTABLE_MODE => 1; use constant GROUND_Z => -0.02; use constant PI => 3.1415927; # Constant to determine if Vertex Buffer objects are used to draw # bed grid and the cut plane for object separation. use constant HAS_VBO => eval { glGenBuffersARB_p(0); GL_ARRAY_BUFFER_ARB; 1 }; # phi / theta angles to orient the camera. use constant VIEW_TOP => [0.0,0.0]; use constant VIEW_BOTTOM => [0.0,180.0]; use constant VIEW_LEFT => [90.0,90.0]; use constant VIEW_RIGHT => [-90.0,90.0]; use constant VIEW_FRONT => [0.0,90.0]; use constant VIEW_BACK => [180.0,90.0]; use constant VIEW_DIAGONAL => [45.0,45.0]; # Color Scheme use Slic3r::GUI::ColorScheme; use constant GIMBAL_LOCK_THETA_MAX => 170; # make OpenGL::Array thread-safe { no warnings 'redefine'; *OpenGL::Array::CLONE_SKIP = sub { 1 }; } sub new { my ($class, $parent) = @_; if ( ( defined $Slic3r::GUI::Settings->{_}{colorscheme} ) && ( Slic3r::GUI::ColorScheme->can($Slic3r::GUI::Settings->{_}{colorscheme}) ) ) { my $myGetSchemeName = \&{"Slic3r::GUI::ColorScheme::$Slic3r::GUI::Settings->{_}{colorscheme}"}; $myGetSchemeName->(); } else { Slic3r::GUI::ColorScheme->getDefault(); } # We can only enable multi sample anti aliasing with wxWidgets 3.0.3 and with a hacked Wx::GLCanvas, # which exports some new WX_GL_XXX constants, namely WX_GL_SAMPLE_BUFFERS and WX_GL_SAMPLES. my $can_multisample = Wx::wxVERSION >= 3.000003 && defined Wx::GLCanvas->can('WX_GL_SAMPLE_BUFFERS') && defined Wx::GLCanvas->can('WX_GL_SAMPLES'); my $attrib = [WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 24]; if ($can_multisample) { # Request a window with multi sampled anti aliasing. This is a new feature in Wx 3.0.3 (backported from 3.1.0). # Use eval to avoid compilation, if the subs WX_GL_SAMPLE_BUFFERS and WX_GL_SAMPLES are missing. eval 'push(@$attrib, (WX_GL_SAMPLE_BUFFERS, 1, WX_GL_SAMPLES, 4));'; } # wxWidgets expect the attrib list to be ended by zero. push(@$attrib, 0); # we request a depth buffer explicitely because it looks like it's not created by # default on Linux, causing transparency issues my $self = $class->SUPER::new($parent, -1, Wx::wxDefaultPosition, Wx::wxDefaultSize, 0, "", $attrib); if (Wx::wxVERSION >= 3.000003) { # Wx 3.0.3 contains an ugly hack to support some advanced OpenGL attributes through the attribute list. # The attribute list is transferred between the wxGLCanvas and wxGLContext constructors using a single static array s_wglContextAttribs. # Immediatelly force creation of the OpenGL context to consume the static variable s_wglContextAttribs. $self->GetContext(); } $self->{can_multisample} = $can_multisample; $self->background(1); $self->_quat((0, 0, 0, 1)); $self->_stheta(45); $self->_sphi(45); $self->_zoom(1); # 3D point in model space $self->_camera_target(Slic3r::Pointf3->new(0,0,0)); $self->reset_objects; EVT_PAINT($self, sub { my $dc = Wx::PaintDC->new($self); $self->Render($dc); }); EVT_SIZE($self, sub { $self->_dirty(1) }); EVT_IDLE($self, sub { return unless $self->_dirty; return if !$self->IsShownOnScreen; $self->Resize( $self->GetSizeWH ); $self->Refresh; }); EVT_MOUSEWHEEL($self, sub { my ($self, $e) = @_; # Calculate the zoom delta and apply it to the current zoom factor my $zoom = $e->GetWheelRotation() / $e->GetWheelDelta(); if ($Slic3r::GUI::Settings->{_}{invert_zoom}) { $zoom *= -1; } $zoom = max(min($zoom, 4), -4); $zoom /= 10; $self->_zoom($self->_zoom / (1-$zoom)); # In order to zoom around the mouse point we need to translate # the camera target my $size = Slic3r::Pointf->new($self->GetSizeWH); my $pos = Slic3r::Pointf->new($e->GetX, $size->y - $e->GetY); #- $self->_camera_target->translate( # ($pos - $size/2) represents the vector from the viewport center # to the mouse point. By multiplying it by $zoom we get the new, # transformed, length of such vector. # Since we want that point to stay fixed, we move our camera target # in the opposite direction by the delta of the length of such vector # ($zoom - 1). We then scale everything by 1/$self->_zoom since # $self->_camera_target is expressed in terms of model units. -($pos->x - $size->x/2) * ($zoom) / $self->_zoom, -($pos->y - $size->y/2) * ($zoom) / $self->_zoom, 0, ) if 0; $self->on_viewport_changed->() if $self->on_viewport_changed; $self->_dirty(1); $self->Refresh; }); EVT_MOUSE_EVENTS($self, \&mouse_event); return $self; } sub mouse_event { my ($self, $e) = @_; my $pos = Slic3r::Pointf->new($e->GetPositionXY); if ($e->Entering && &Wx::wxMSW) { # wxMSW needs focus in order to catch mouse wheel events $self->SetFocus; } elsif ($e->LeftDClick) { $self->on_double_click->() if $self->on_double_click; } elsif ($e->MiddleDClick) { if (@{$self->volumes}) { $self->zoom_to_volumes; } else { $self->zoom_to_bed; } $self->_dirty(1); $self->Refresh; } elsif (($e->LeftDown || $e->RightDown) && not $e->ShiftDown) { # If user pressed left or right button we first check whether this happened # on a volume or not. my $volume_idx = $self->_hover_volume_idx // -1; # select volume in this 3D canvas if ($self->enable_picking) { $self->deselect_volumes; $self->select_volume($volume_idx); if ($volume_idx != -1) { my $group_id = $self->volumes->[$volume_idx]->select_group_id; my @volumes; if ($group_id != -1) { $self->select_volume($_) for grep $self->volumes->[$_]->select_group_id == $group_id, 0..$#{$self->volumes}; } } $self->Refresh; } # propagate event through callback $self->on_select->($volume_idx) if $self->on_select; if ($volume_idx != -1) { if ($e->LeftDown && $self->enable_moving) { $self->_drag_volume_idx($volume_idx); $self->_drag_start_pos($self->mouse_to_3d(@$pos)); } elsif ($e->RightDown) { # if right clicking on volume, propagate event through callback $self->on_right_click->($e->GetPosition) if $self->on_right_click; } } } elsif ($e->Dragging && $e->LeftIsDown && defined($self->_drag_volume_idx)) { # get new position at the same Z of the initial click point my $mouse_ray = $self->mouse_ray($e->GetX, $e->GetY); my $cur_pos = $mouse_ray->intersect_plane($self->_drag_start_pos->z); # calculate the translation vector my $vector = $self->_drag_start_pos->vector_to($cur_pos); # get volume being dragged my $volume = $self->volumes->[$self->_drag_volume_idx]; # get all volumes belonging to the same group, if any my @volumes; if ($volume->drag_group_id == -1) { @volumes = ($volume); } else { @volumes = grep $_->drag_group_id == $volume->drag_group_id, @{$self->volumes}; } # apply new temporary volume origin and ignore Z $_->origin->translate($vector->x, $vector->y, 0) for @volumes; #,, $self->_drag_start_pos($cur_pos); $self->_dragged(1); $self->Refresh; } elsif ($e->Dragging) { if ($e->AltDown) { # Move the camera center on the Z axis based on mouse Y axis movement if (defined $self->_drag_start_pos) { my $orig = $self->_drag_start_pos; $self->_camera_target->translate(0, 0, $pos->y - $orig->y); $self->on_viewport_changed->() if $self->on_viewport_changed; $self->Refresh; } $self->_drag_start_pos($pos); } elsif ($e->LeftIsDown) { # if dragging over blank area with left button, rotate if (defined $self->_drag_start_pos) { my $orig = $self->_drag_start_pos; if (TURNTABLE_MODE) { $self->_sphi($self->_sphi + ($pos->x - $orig->x) * TRACKBALLSIZE); $self->_stheta($self->_stheta - ($pos->y - $orig->y) * TRACKBALLSIZE); #- $self->_stheta(GIMBAL_LOCK_THETA_MAX) if $self->_stheta > GIMBAL_LOCK_THETA_MAX; $self->_stheta(0) if $self->_stheta < 0; } else { my $size = $self->GetClientSize; my @quat = trackball( $orig->x / ($size->width / 2) - 1, 1 - $orig->y / ($size->height / 2), #/ $pos->x / ($size->width / 2) - 1, 1 - $pos->y / ($size->height / 2), #/ ); $self->_quat(mulquats($self->_quat, \@quat)); } $self->on_viewport_changed->() if $self->on_viewport_changed; $self->Refresh; } $self->_drag_start_pos($pos); } elsif ($e->MiddleIsDown || $e->RightIsDown) { # if dragging over blank area with right button, translate if (defined $self->_drag_start_xy) { # get point in model space at Z = 0 my $cur_pos = $self->mouse_ray($e->GetX, $e->GetY)->intersect_plane(0); my $orig = $self->mouse_ray(@{$self->_drag_start_xy})->intersect_plane(0); $self->_camera_target->translate( @{$orig->vector_to($cur_pos)->negative}, ); $self->on_viewport_changed->() if $self->on_viewport_changed; $self->Refresh; } $self->_drag_start_xy($pos); } } elsif ($e->LeftUp || $e->MiddleUp || $e->RightUp) { if ($self->on_move && defined($self->_drag_volume_idx) && $self->_dragged) { # get all volumes belonging to the same group, if any my @volume_idxs; my $group_id = $self->volumes->[$self->_drag_volume_idx]->drag_group_id; if ($group_id == -1) { @volume_idxs = ($self->_drag_volume_idx); } else { @volume_idxs = grep $self->volumes->[$_]->drag_group_id == $group_id, 0..$#{$self->volumes}; } $self->on_move->(@volume_idxs); } $self->_drag_volume_idx(undef); $self->_drag_start_pos(undef); $self->_drag_start_xy(undef); $self->_dragged(undef); } elsif ($e->Moving) { $self->_mouse_pos($pos); $self->Refresh if $self->enable_picking; } else { $e->Skip(); } } sub reset_objects { my ($self) = @_; $self->volumes([]); $self->_dirty(1); } sub set_viewport_from_scene { my ($self, $scene) = @_; $self->_sphi($scene->_sphi); $self->_stheta($scene->_stheta); $self->_camera_target($scene->_camera_target); $self->_zoom($scene->_zoom); $self->_quat($scene->_quat); $self->_dirty(1); } sub zoom{ my ($self, $direction) = @_; if( $direction eq 'in'){ $self->_zoom($self->_zoom / (1-0.3)); } elsif($direction eq 'out'){ $self->_zoom($self->_zoom / (1+0.3)); } $self->on_viewport_changed->() if $self->on_viewport_changed; $self->_dirty(1); $self->Refresh; } # Set the camera to a default orientation, # zoom to volumes. sub select_view { my ($self, $direction) = @_; my $dirvec; if (ref($direction)) { $dirvec = $direction; } else { if ($direction eq 'top') { $dirvec = VIEW_TOP; } elsif ($direction eq 'bottom') { $dirvec = VIEW_BOTTOM; } elsif ($direction eq 'left') { $dirvec = VIEW_LEFT; } elsif ($direction eq 'right') { $dirvec = VIEW_RIGHT; } elsif ($direction eq 'front') { $dirvec = VIEW_FRONT; } elsif ($direction eq 'back') { $dirvec = VIEW_BACK; } elsif ($direction eq 'diagonal') { $dirvec = VIEW_DIAGONAL; } } $self->_sphi($dirvec->[0]); $self->_stheta($dirvec->[1]); # Avoid gimbal lock. $self->_stheta(GIMBAL_LOCK_THETA_MAX) if $self->_stheta > GIMBAL_LOCK_THETA_MAX; $self->_stheta(0) if $self->_stheta < 0; # View everything. $self->volumes_bounding_box->defined ? $self->zoom_to_volumes : $self->zoom_to_bed; $self->on_viewport_changed->() if $self->on_viewport_changed; $self->_dirty(1); $self->Refresh; } sub zoom_to_bounding_box { my ($self, $bb) = @_; # calculate the zoom factor needed to adjust viewport to # bounding box my $max_size = max(@{$bb->size}) * 1.05; my $min_viewport_size = min($self->GetSizeWH); if ($max_size != 0) { # only re-zoom if we have a valid bounding box, avoid a divide by 0 error. $self->_zoom($min_viewport_size / $max_size); # center view around bounding box center $self->_camera_target($bb->center); $self->on_viewport_changed->() if $self->on_viewport_changed; } } sub zoom_to_bed { my ($self) = @_; if ($self->bed_shape) { $self->zoom_to_bounding_box($self->bed_bounding_box); } } sub zoom_to_volume { my ($self, $volume_idx) = @_; my $volume = $self->volumes->[$volume_idx]; my $bb = $volume->transformed_bounding_box; $self->zoom_to_bounding_box($bb); } sub zoom_to_volumes { my ($self) = @_; $self->zoom_to_bounding_box($self->volumes_bounding_box); } sub volumes_bounding_box { my ($self) = @_; my $bb = Slic3r::Geometry::BoundingBoxf3->new; $bb->merge($_->transformed_bounding_box) for @{$self->volumes}; return $bb; } sub bed_bounding_box { my ($self) = @_; my $bb = Slic3r::Geometry::BoundingBoxf3->new; if ($self->bed_shape) { $bb->merge_point(Slic3r::Pointf3->new(@$_, 0)) for @{$self->bed_shape}; } return $bb; } sub max_bounding_box { my ($self) = @_; my $bb = $self->bed_bounding_box; $bb->merge($self->volumes_bounding_box); return $bb; } sub set_auto_bed_shape { my ($self, $bed_shape) = @_; # draw a default square bed around object center my $max_size = max(@{ $self->volumes_bounding_box->size }); my $center = $self->volumes_bounding_box->center; $self->set_bed_shape([ [ $center->x - $max_size, $center->y - $max_size ], #-- [ $center->x + $max_size, $center->y - $max_size ], #-- [ $center->x + $max_size, $center->y + $max_size ], #++ [ $center->x - $max_size, $center->y + $max_size ], #++ ]); $self->origin(Slic3r::Pointf->new(@$center[X,Y])); } sub set_bed_shape { my ($self, $bed_shape) = @_; $self->bed_shape($bed_shape); # triangulate bed my $expolygon = Slic3r::ExPolygon->new([ map [map scale($_), @$_], @$bed_shape ]); my $bed_bb = $expolygon->bounding_box; { my @points = (); foreach my $triangle (@{ $expolygon->triangulate }) { push @points, map {+ unscale($_->x), unscale($_->y), GROUND_Z } @$triangle; #)) } $self->bed_triangles(OpenGL::Array->new_list(GL_FLOAT, @points)); } { my @polylines = (); for (my $x = $bed_bb->x_min; $x <= $bed_bb->x_max; $x += scale 10) { push @polylines, Slic3r::Polyline->new([$x,$bed_bb->y_min], [$x,$bed_bb->y_max]); } for (my $y = $bed_bb->y_min; $y <= $bed_bb->y_max; $y += scale 10) { push @polylines, Slic3r::Polyline->new([$bed_bb->x_min,$y], [$bed_bb->x_max,$y]); } # clip with a slightly grown expolygon because our lines lay on the contours and # may get erroneously clipped my @lines = map Slic3r::Line->new(@$_[0,-1]), @{intersection_pl(\@polylines, [ @{$expolygon->offset(+scaled_epsilon)} ])}; # append bed contours push @lines, map @{$_->lines}, @$expolygon; my @points = (); foreach my $line (@lines) { push @points, map {+ unscale($_->x), unscale($_->y), GROUND_Z } @$line; #)) } $self->bed_grid_lines(OpenGL::Array->new_list(GL_FLOAT, @points)); } $self->origin(Slic3r::Pointf->new(0,0)); } sub deselect_volumes { my ($self) = @_; $_->selected(0) for @{$self->volumes}; } sub select_volume { my ($self, $volume_idx) = @_; $self->volumes->[$volume_idx]->selected(1) if $volume_idx != -1; } sub SetCuttingPlane { my ($self, $axis, $z, $expolygons) = @_; $self->cutting_plane_axis($axis); $self->cutting_plane_z($z); # grow slices in order to display them better $expolygons = offset_ex([ map @$_, @$expolygons ], scale 0.1); my $bb = $self->volumes_bounding_box; my @verts = (); foreach my $line (map @{$_->lines}, map @$_, @$expolygons) { if ($axis == X) { push @verts, ( $bb->x_min + $z, unscale($line->a->x), unscale($line->a->y), #)) $bb->x_min + $z, unscale($line->b->x), unscale($line->b->y), #)) ); } elsif ($axis == Y) { push @verts, ( unscale($line->a->y), $bb->y_min + $z, unscale($line->a->x), #)) unscale($line->b->y), $bb->y_min + $z, unscale($line->b->x), #)) ); } else { push @verts, ( unscale($line->a->x), unscale($line->a->y), $z, #)) unscale($line->b->x), unscale($line->b->y), $z, #)) ); } } $self->cut_lines_vertices(OpenGL::Array->new_list(GL_FLOAT, @verts)); } # Given an axis and angle, compute quaternion. sub axis_to_quat { my ($ax, $phi) = @_; my $lena = sqrt(reduce { $a + $b } (map { $_ * $_ } @$ax)); my @q = map { $_ * (1 / $lena) } @$ax; @q = map { $_ * sin($phi / 2.0) } @q; $q[$#q + 1] = cos($phi / 2.0); return @q; } # Project a point on the virtual trackball. # If it is inside the sphere, map it to the sphere, if it outside map it # to a hyperbola. sub project_to_sphere { my ($r, $x, $y) = @_; my $d = sqrt($x * $x + $y * $y); if ($d < $r * 0.70710678118654752440) { # Inside sphere return sqrt($r * $r - $d * $d); } else { # On hyperbola my $t = $r / 1.41421356237309504880; return $t * $t / $d; } } sub cross { my ($v1, $v2) = @_; return (@$v1[1] * @$v2[2] - @$v1[2] * @$v2[1], @$v1[2] * @$v2[0] - @$v1[0] * @$v2[2], @$v1[0] * @$v2[1] - @$v1[1] * @$v2[0]); } # Simulate a track-ball. Project the points onto the virtual trackball, # then figure out the axis of rotation, which is the cross product of # P1 P2 and O P1 (O is the center of the ball, 0,0,0) Note: This is a # deformed trackball-- is a trackball in the center, but is deformed # into a hyperbolic sheet of rotation away from the center. # It is assumed that the arguments to this routine are in the range # (-1.0 ... 1.0). sub trackball { my ($p1x, $p1y, $p2x, $p2y) = @_; if ($p1x == $p2x && $p1y == $p2y) { # zero rotation return (0.0, 0.0, 0.0, 1.0); } # First, figure out z-coordinates for projection of P1 and P2 to # deformed sphere my @p1 = ($p1x, $p1y, project_to_sphere(TRACKBALLSIZE, $p1x, $p1y)); my @p2 = ($p2x, $p2y, project_to_sphere(TRACKBALLSIZE, $p2x, $p2y)); # axis of rotation (cross product of P1 and P2) my @a = cross(\@p2, \@p1); # Figure out how much to rotate around that axis. my @d = map { $_ * $_ } (map { $p1[$_] - $p2[$_] } 0 .. $#p1); my $t = sqrt(reduce { $a + $b } @d) / (2.0 * TRACKBALLSIZE); # Avoid problems with out-of-control values... $t = 1.0 if ($t > 1.0); $t = -1.0 if ($t < -1.0); my $phi = 2.0 * asin($t); return axis_to_quat(\@a, $phi); } # Build a rotation matrix, given a quaternion rotation. sub quat_to_rotmatrix { my ($q) = @_; my @m = (); $m[0] = 1.0 - 2.0 * (@$q[1] * @$q[1] + @$q[2] * @$q[2]); $m[1] = 2.0 * (@$q[0] * @$q[1] - @$q[2] * @$q[3]); $m[2] = 2.0 * (@$q[2] * @$q[0] + @$q[1] * @$q[3]); $m[3] = 0.0; $m[4] = 2.0 * (@$q[0] * @$q[1] + @$q[2] * @$q[3]); $m[5] = 1.0 - 2.0 * (@$q[2] * @$q[2] + @$q[0] * @$q[0]); $m[6] = 2.0 * (@$q[1] * @$q[2] - @$q[0] * @$q[3]); $m[7] = 0.0; $m[8] = 2.0 * (@$q[2] * @$q[0] - @$q[1] * @$q[3]); $m[9] = 2.0 * (@$q[1] * @$q[2] + @$q[0] * @$q[3]); $m[10] = 1.0 - 2.0 * (@$q[1] * @$q[1] + @$q[0] * @$q[0]); $m[11] = 0.0; $m[12] = 0.0; $m[13] = 0.0; $m[14] = 0.0; $m[15] = 1.0; return @m; } sub mulquats { my ($q1, $rq) = @_; return (@$q1[3] * @$rq[0] + @$q1[0] * @$rq[3] + @$q1[1] * @$rq[2] - @$q1[2] * @$rq[1], @$q1[3] * @$rq[1] + @$q1[1] * @$rq[3] + @$q1[2] * @$rq[0] - @$q1[0] * @$rq[2], @$q1[3] * @$rq[2] + @$q1[2] * @$rq[3] + @$q1[0] * @$rq[1] - @$q1[1] * @$rq[0], @$q1[3] * @$rq[3] - @$q1[0] * @$rq[0] - @$q1[1] * @$rq[1] - @$q1[2] * @$rq[2]) } sub mouse_to_3d { my ($self, $x, $y, $z) = @_; my @viewport = glGetIntegerv_p(GL_VIEWPORT); # 4 items my @mview = glGetDoublev_p(GL_MODELVIEW_MATRIX); # 16 items my @proj = glGetDoublev_p(GL_PROJECTION_MATRIX); # 16 items $y = $viewport[3] - $y; $z //= glReadPixels_p($x, $y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT); my @projected = gluUnProject_p($x, $y, $z, @mview, @proj, @viewport); return Slic3r::Pointf3->new(@projected); } sub mouse_ray { my ($self, $x, $y) = @_; return Slic3r::Linef3->new( $self->mouse_to_3d($x, $y, 0), $self->mouse_to_3d($x, $y, 1), ); } sub GetContext { my ($self) = @_; if (Wx::wxVERSION >= 2.009) { return $self->{context} ||= Wx::GLContext->new($self); } else { return $self->SUPER::GetContext; } } sub SetCurrent { my ($self, $context) = @_; if (Wx::wxVERSION >= 2.009) { return $self->SUPER::SetCurrent($context); } else { return $self->SUPER::SetCurrent; } } sub Resize { my ($self, $x, $y) = @_; return unless $self->GetContext; $self->_dirty(0); $self->SetCurrent($self->GetContext); glViewport(0, 0, $x, $y); $x /= $self->_zoom; $y /= $self->_zoom; glMatrixMode(GL_PROJECTION); glLoadIdentity(); my $depth = 10 * max(@{ $self->max_bounding_box->size }); glOrtho( -$x/2, $x/2, -$y/2, $y/2, -$depth, 2*$depth, ); glMatrixMode(GL_MODELVIEW); } sub InitGL { my $self = shift; return if $self->init; return unless $self->GetContext; $self->init(1); glClearColor(0, 0, 0, 1); glColor3f(1, 0, 0); glEnable(GL_DEPTH_TEST); glClearDepth(1.0); glDepthFunc(GL_LEQUAL); glEnable(GL_CULL_FACE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); # Set antialiasing/multisampling glDisable(GL_LINE_SMOOTH); glDisable(GL_POLYGON_SMOOTH); glEnable(GL_MULTISAMPLE) if ($self->{can_multisample}); # ambient lighting glLightModelfv_p(GL_LIGHT_MODEL_AMBIENT, 0.1, 0.1, 0.1, 1); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); # light from camera glLightfv_p(GL_LIGHT1, GL_POSITION, 1, 0, 1, 0); glLightfv_p(GL_LIGHT1, GL_SPECULAR, 0.8, 0.8, 0.8, 1); glLightfv_p(GL_LIGHT1, GL_DIFFUSE, 0.4, 0.4, 0.4, 1); # Enables Smooth Color Shading; try GL_FLAT for (lack of) fun. Default: GL_SMOOTH glShadeModel(GL_SMOOTH); glMaterialfv_p(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, 0.3, 0.3, 0.3, 1); glMaterialfv_p(GL_FRONT_AND_BACK, GL_SPECULAR, 1, 1, 1, 1); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50); glMaterialfv_p(GL_FRONT_AND_BACK, GL_EMISSION, 0.1, 0.1, 0.1, 0.9); # A handy trick -- have surface material mirror the color. glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_MULTISAMPLE) if ($self->{can_multisample}); } sub Render { my ($self, $dc) = @_; # prevent calling SetCurrent() when window is not shown yet return unless $self->IsShownOnScreen; return unless my $context = $self->GetContext; $self->SetCurrent($context); $self->InitGL; if($SOLID_BACKGROUNDCOLOR == 1){ glClearColor(@BACKGROUND_COLOR, 0); } else { glClearColor(1, 1, 1, 1); } glClearDepth(1); glDepthFunc(GL_LESS); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (TURNTABLE_MODE) { glRotatef(-$self->_stheta, 1, 0, 0); # pitch glRotatef($self->_sphi, 0, 0, 1); # yaw } else { my @rotmat = quat_to_rotmatrix($self->quat); glMultMatrixd_p(@rotmat[0..15]); } glTranslatef(@{ $self->_camera_target->negative }); # light from above glLightfv_p(GL_LIGHT0, GL_POSITION, -0.5, -0.5, 1, 0); glLightfv_p(GL_LIGHT0, GL_SPECULAR, 0.2, 0.2, 0.2, 1); glLightfv_p(GL_LIGHT0, GL_DIFFUSE, 0.5, 0.5, 0.5, 1); if ($self->enable_picking) { glDisable(GL_MULTISAMPLE) if ($self->{can_multisample}); glDisable(GL_LIGHTING); $self->draw_volumes(1); glFlush(); glFinish(); if (my $pos = $self->_mouse_pos) { my $col = [ glReadPixels_p($pos->x, $self->GetSize->GetHeight - $pos->y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE) ]; my $volume_idx = $col->[0] + $col->[1]*256 + $col->[2]*256*256; $self->_hover_volume_idx(undef); $_->hover(0) for @{$self->volumes}; if ($volume_idx <= $#{$self->volumes}) { $self->_hover_volume_idx($volume_idx); $self->volumes->[$volume_idx]->hover(1); my $group_id = $self->volumes->[$volume_idx]->select_group_id; if ($group_id != -1) { $_->hover(1) for grep { $_->select_group_id == $group_id } @{$self->volumes}; } $self->on_hover->($volume_idx) if $self->on_hover; } } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glFlush(); glFinish(); glEnable(GL_LIGHTING); } # draw fixed background if ($SOLID_BACKGROUNDCOLOR == 0 && $self->background) { glDisable(GL_LIGHTING); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glBegin(GL_QUADS); glColor3f( @BOTTOM_COLOR ); # bottom color glVertex2f(-1.0,-1.0); glVertex2f(1,-1.0); glColor3f( @TOP_COLOR ); # top color glVertex2f(1, 1); glVertex2f(-1.0, 1); glEnd(); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glEnable(GL_LIGHTING); } # draw ground and axes glDisable(GL_LIGHTING); # draw ground my $ground_z = GROUND_Z; if ($self->bed_triangles) { glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnableClientState(GL_VERTEX_ARRAY); my $triangle_vertex; if (HAS_VBO) { ($triangle_vertex) = glGenBuffersARB_p(1); $self->bed_triangles->bind($triangle_vertex); glBufferDataARB_p(GL_ARRAY_BUFFER_ARB, $self->bed_triangles, GL_STATIC_DRAW_ARB); glVertexPointer_c(3, GL_FLOAT, 0, 0); } else { # fall back on old behavior glVertexPointer_c(3, GL_FLOAT, 0, $self->bed_triangles->ptr()); } glColor4f( @GROUND_COLOR ); glNormal3d(0,0,1); glDrawArrays(GL_TRIANGLES, 0, $self->bed_triangles->elements / 3); glDisableClientState(GL_VERTEX_ARRAY); # we need depth test for grid, otherwise it would disappear when looking # the object from below glEnable(GL_DEPTH_TEST); # draw grid glLineWidth(2); glEnableClientState(GL_VERTEX_ARRAY); my $grid_vertex; if (HAS_VBO) { ($grid_vertex) = glGenBuffersARB_p(1); $self->bed_grid_lines->bind($grid_vertex); glBufferDataARB_p(GL_ARRAY_BUFFER_ARB, $self->bed_grid_lines, GL_STATIC_DRAW_ARB); glVertexPointer_c(3, GL_FLOAT, 0, 0); } else { # fall back on old behavior glVertexPointer_c(3, GL_FLOAT, 0, $self->bed_grid_lines->ptr()); } glColor4f( @GRID_COLOR ); glNormal3d(0,0,1); glDrawArrays(GL_LINES, 0, $self->bed_grid_lines->elements / 3); glDisableClientState(GL_VERTEX_ARRAY); glDisable(GL_BLEND); if (HAS_VBO) { # Turn off buffer objects to let the rest of the draw code work. glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); glDeleteBuffersARB_p($grid_vertex); glDeleteBuffersARB_p($triangle_vertex); } } my $volumes_bb = $self->volumes_bounding_box; { # draw axes # disable depth testing so that axes are not covered by ground glDisable(GL_DEPTH_TEST); my $origin = $self->origin; my $axis_len = max( max(@{ $self->bed_bounding_box->size }), 1.2 * max(@{ $volumes_bb->size }), ); glLineWidth(2); glBegin(GL_LINES); # draw line for x axis glColor3f(1, 0, 0); glVertex3f(@$origin, $ground_z); glVertex3f($origin->x + $axis_len, $origin->y, $ground_z); #,, # draw line for y axis glColor3f(0, 1, 0); glVertex3f(@$origin, $ground_z); glVertex3f($origin->x, $origin->y + $axis_len, $ground_z); #++ glEnd(); # draw line for Z axis # (re-enable depth test so that axis is correctly shown when objects are behind it) glEnable(GL_DEPTH_TEST); glBegin(GL_LINES); glColor3f(0, 0, 1); glVertex3f(@$origin, $ground_z); glVertex3f(@$origin, $ground_z+$axis_len); glEnd(); } glEnable(GL_LIGHTING); # draw objects $self->draw_volumes; # draw cutting plane if (defined $self->cutting_plane_z) { my $plane_z = $self->cutting_plane_z; my $bb = $volumes_bb; glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBegin(GL_QUADS); glColor4f( @COLOR_CUTPLANE ); if ($self->cutting_plane_axis == X) { glVertex3f($bb->x_min+$plane_z, $bb->y_min-20, $bb->z_min-20); glVertex3f($bb->x_min+$plane_z, $bb->y_max+20, $bb->z_min-20); glVertex3f($bb->x_min+$plane_z, $bb->y_max+20, $bb->z_max+20); glVertex3f($bb->x_min+$plane_z, $bb->y_min-20, $bb->z_max+20); } elsif ($self->cutting_plane_axis == Y) { glVertex3f($bb->x_min-20, $bb->y_min+$plane_z, $bb->z_min-20); glVertex3f($bb->x_max+20, $bb->y_min+$plane_z, $bb->z_min-20); glVertex3f($bb->x_max+20, $bb->y_min+$plane_z, $bb->z_max+20); glVertex3f($bb->x_min-20, $bb->y_min+$plane_z, $bb->z_max+20); } elsif ($self->cutting_plane_axis == Z) { glVertex3f($bb->x_min-20, $bb->y_min-20, $bb->z_min+$plane_z); glVertex3f($bb->x_max+20, $bb->y_min-20, $bb->z_min+$plane_z); glVertex3f($bb->x_max+20, $bb->y_max+20, $bb->z_min+$plane_z); glVertex3f($bb->x_min-20, $bb->y_max+20, $bb->z_min+$plane_z); } glEnd(); glEnable(GL_CULL_FACE); glDisable(GL_BLEND); } if (defined $self->_drag_start_pos || defined $self->_drag_start_xy) { $self->draw_center_of_rotation($self->_camera_target->x, $self->_camera_target->y, $self->_camera_target->z); } glFlush(); $self->SwapBuffers(); # Calling glFinish has a performance penalty, but it seems to fix some OpenGL driver hang-up with extremely large scenes. glFinish(); } sub draw_axes { my ($self, $x, $y, $z, $length, $width, $allways_visible) = @_; if ($allways_visible) { glDisable(GL_DEPTH_TEST); } else { glEnable(GL_DEPTH_TEST); } glLineWidth($width); glBegin(GL_LINES); # draw line for x axis glColor3f(1, 0, 0); glVertex3f($x, $y, $z); glVertex3f($x + $length, $y, $z); # draw line for y axis glColor3f(0, 1, 0); glVertex3f($x, $y, $z); glVertex3f($x, $y + $length, $z); # draw line for Z axis glColor3f(0, 0, 1); glVertex3f($x, $y, $z); glVertex3f($x, $y, $z + $length); glEnd(); } sub draw_center_of_rotation { my ($self, $x, $y, $z) = @_; $self->draw_axes($x, $y, $z, 10, 1, 1); $self->draw_axes($x, $y, $z, 10, 4, 0); } sub draw_volumes { my ($self, $fakecolor) = @_; glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); foreach my $volume_idx (0..$#{$self->volumes}) { my $volume = $self->volumes->[$volume_idx]; glPushMatrix(); glTranslatef(@{$volume->origin}); if ($fakecolor) { my $r = ($volume_idx & 0x000000FF) >> 0; my $g = ($volume_idx & 0x0000FF00) >> 8; my $b = ($volume_idx & 0x00FF0000) >> 16; glColor4f($r/255.0, $g/255.0, $b/255.0, 1); } elsif ($volume->selected) { glColor4f( @SELECTED_COLOR , $volume->color->[3]); } elsif ($volume->hover) { glColor4f( @HOVER_COLOR, $volume->color->[3]); } else { glColor4f(@{ $volume->color }); } my @sorted_z = (); my ($min_z, $max_z); if ($volume->range && $volume->offsets) { @sorted_z = sort { $a <=> $b } keys %{$volume->offsets}; ($min_z, $max_z) = @{$volume->range}; $min_z = first { $_ >= $min_z } @sorted_z; $max_z = first { $_ > $max_z } @sorted_z; } glCullFace(GL_BACK); if ($volume->qverts) { my ($min_offset, $max_offset); if (defined $min_z) { $min_offset = $volume->offsets->{$min_z}->[0]; } if (defined $max_z) { $max_offset = $volume->offsets->{$max_z}->[0]; } $min_offset //= 0; $max_offset //= $volume->qverts->size; glVertexPointer_c(3, GL_FLOAT, 0, $volume->qverts->verts_ptr); glNormalPointer_c(GL_FLOAT, 0, $volume->qverts->norms_ptr); glDrawArrays(GL_QUADS, $min_offset / 3, ($max_offset-$min_offset) / 3); } if ($volume->tverts) { my ($min_offset, $max_offset); if (defined $min_z) { $min_offset = $volume->offsets->{$min_z}->[1]; } if (defined $max_z) { $max_offset = $volume->offsets->{$max_z}->[1]; } $min_offset //= 0; $max_offset //= $volume->tverts->size; glVertexPointer_c(3, GL_FLOAT, 0, $volume->tverts->verts_ptr); glNormalPointer_c(GL_FLOAT, 0, $volume->tverts->norms_ptr); glDrawArrays(GL_TRIANGLES, $min_offset / 3, ($max_offset-$min_offset) / 3); } glPopMatrix(); } glDisableClientState(GL_NORMAL_ARRAY); glDisable(GL_BLEND); my $cut_vertex; if (defined $self->cutting_plane_z) { if (HAS_VBO) { # Use Vertex Buffer Object for cutting plane (previous method crashes on modern POGL). ($cut_vertex) = glGenBuffersARB_p(1); $self->cut_lines_vertices->bind($cut_vertex); glBufferDataARB_p(GL_ARRAY_BUFFER_ARB, $self->cut_lines_vertices, GL_STATIC_DRAW_ARB); glVertexPointer_c(3, GL_FLOAT, 0, 0); } else { # Use legacy method. glVertexPointer_c(3, GL_FLOAT, 0, $self->cut_lines_vertices->ptr()); } glLineWidth(2); glColor3f(0, 0, 0); glDrawArrays(GL_LINES, 0, $self->cut_lines_vertices->elements / 3); if (HAS_VBO) { # Turn off buffer objects to let the rest of the draw code work. glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); glDeleteBuffersARB_p($cut_vertex); } } glDisableClientState(GL_VERTEX_ARRAY); } package Slic3r::GUI::3DScene::Volume; use Moo; has 'bounding_box' => (is => 'ro', required => 1); has 'origin' => (is => 'rw', default => sub { Slic3r::Pointf3->new(0,0,0) }); has 'color' => (is => 'ro', required => 1); has 'select_group_id' => (is => 'rw', default => sub { -1 }); has 'drag_group_id' => (is => 'rw', default => sub { -1 }); has 'selected' => (is => 'rw', default => sub { 0 }); has 'hover' => (is => 'rw', default => sub { 0 }); has 'range' => (is => 'rw'); # geometric data has 'qverts' => (is => 'rw'); # GLVertexArray object has 'tverts' => (is => 'rw'); # GLVertexArray object has 'mesh' => (is => 'rw'); # only required for cut contours has 'offsets' => (is => 'rw'); # [ z => [ qverts_idx, tverts_idx ] ] sub transformed_bounding_box { my ($self) = @_; my $bb = $self->bounding_box; $bb->translate(@{$self->origin}); return $bb; } package Slic3r::GUI::3DScene; use base qw(Slic3r::GUI::3DScene::Base); use OpenGL qw(:glconstants :gluconstants :glufunctions); use List::Util qw(first min max); use Slic3r::Geometry qw(scale unscale epsilon); use Slic3r::Print::State ':steps'; use Slic3r::GUI::ColorScheme; __PACKAGE__->mk_accessors(qw( colors color_by color_toolpaths_by select_by drag_by volumes_by_object _objects_by_volumes )); sub default_colors { [@COLOR_PARTS], [@COLOR_INFILL], [@COLOR_SUPPORT], [@COLOR_UNKNOWN] } sub new { my $class = shift; my $self = $class->SUPER::new(@_); if ( ( defined $Slic3r::GUI::Settings->{_}{colorscheme} ) && ( Slic3r::GUI::ColorScheme->can($Slic3r::GUI::Settings->{_}{colorscheme}) ) ) { my $myGetSchemeName = \&{"Slic3r::GUI::ColorScheme::$Slic3r::GUI::Settings->{_}{colorscheme}"}; $myGetSchemeName->(); } else { Slic3r::GUI::ColorScheme->getDefault(); } $self->colors([ $self->default_colors ]); $self->color_by('volume'); # object | volume $self->color_toolpaths_by('role'); # role | extruder $self->select_by('object'); # object | volume | instance $self->drag_by('instance'); # object | instance $self->volumes_by_object({}); # obj_idx => [ volume_idx, volume_idx ... ] $self->_objects_by_volumes({}); # volume_idx => [ obj_idx, instance_idx ] return $self; } sub load_object { my ($self, $model, $obj_idx, $instance_idxs) = @_; my $model_object; if ($model->isa('Slic3r::Model::Object')) { $model_object = $model; $model = $model_object->model; $obj_idx = 0; } else { $model_object = $model->get_object($obj_idx); } $instance_idxs ||= [0..$#{$model_object->instances}]; my @volumes_idx = (); foreach my $volume_idx (0..$#{$model_object->volumes}) { my $volume = $model_object->volumes->[$volume_idx]; foreach my $instance_idx (@$instance_idxs) { my $instance = $model_object->instances->[$instance_idx]; my $mesh = $volume->mesh->clone; $instance->transform_mesh($mesh); my $color_idx; if ($self->color_by eq 'volume') { $color_idx = $volume_idx; } elsif ($self->color_by eq 'object') { $color_idx = $obj_idx; } my $color = [ @{$self->colors->[ $color_idx % scalar(@{$self->colors}) ]} ]; $color->[3] = $volume->modifier ? 0.5 : 1; push @{$self->volumes}, my $v = Slic3r::GUI::3DScene::Volume->new( bounding_box => $mesh->bounding_box, color => $color, ); if ($self->select_by eq 'object') { $v->select_group_id($obj_idx*1000000); } elsif ($self->select_by eq 'volume') { $v->select_group_id($obj_idx*1000000 + $volume_idx*1000); } elsif ($self->select_by eq 'instance') { $v->select_group_id($obj_idx*1000000 + $volume_idx*1000 + $instance_idx); } if ($self->drag_by eq 'object') { $v->drag_group_id($obj_idx*1000); } elsif ($self->drag_by eq 'instance') { $v->drag_group_id($obj_idx*1000 + $instance_idx); } push @volumes_idx, my $scene_volume_idx = $#{$self->volumes}; $self->_objects_by_volumes->{$scene_volume_idx} = [ $obj_idx, $volume_idx, $instance_idx ]; my $verts = Slic3r::GUI::_3DScene::GLVertexArray->new; $verts->load_mesh($mesh); $v->tverts($verts); } } $self->volumes_by_object->{$obj_idx} = [@volumes_idx]; return @volumes_idx; } sub load_print_object_slices { my ($self, $object) = @_; my @verts = (); my @norms = (); my @quad_verts = (); my @quad_norms = (); foreach my $layer (@{$object->layers}) { my $gap = 0; my $top_z = $layer->print_z; my $bottom_z = $layer->print_z - $layer->height + $gap; foreach my $copy (@{ $object->_shifted_copies }) { { my @expolygons = map $_->clone, @{$layer->slices}; $_->translate(@$copy) for @expolygons; $self->_expolygons_to_verts(\@expolygons, $layer->print_z, \@verts, \@norms); } foreach my $slice (@{$layer->slices}) { foreach my $polygon (@$slice) { foreach my $line (@{$polygon->lines}) { $line->translate(@$copy); push @quad_norms, (0,0,-1), (0,0,-1); push @quad_verts, (map unscale($_), @{$line->a}), $bottom_z; push @quad_verts, (map unscale($_), @{$line->b}), $bottom_z; push @quad_norms, (0,0,1), (0,0,1); push @quad_verts, (map unscale($_), @{$line->b}), $top_z; push @quad_verts, (map unscale($_), @{$line->a}), $top_z; # We'll use this for the middle normal when using 4 quads: #my $xy_normal = $line->normal; #$_xynormal->scale(1/$line->length); } } } } } my $obb = $object->bounding_box; my $bb = Slic3r::Geometry::BoundingBoxf3->new; $bb->merge_point(Slic3r::Pointf3->new_unscale(@{$obb->min_point}, 0)); $bb->merge_point(Slic3r::Pointf3->new_unscale(@{$obb->max_point}, $object->size->z)); push @{$self->volumes}, my $v = Slic3r::GUI::3DScene::Volume->new( bounding_box => $bb, color => $self->colors->[0], verts => OpenGL::Array->new_list(GL_FLOAT, @verts), norms => OpenGL::Array->new_list(GL_FLOAT, @norms), quad_verts => OpenGL::Array->new_list(GL_FLOAT, @quad_verts), quad_norms => OpenGL::Array->new_list(GL_FLOAT, @quad_norms), ); } sub load_print_toolpaths { my ($self, $print) = @_; return if !$print->step_done(STEP_SKIRT); return if !$print->step_done(STEP_BRIM); return if !$print->has_skirt && $print->config->brim_width == 0 && $print->config->interior_brim_width == 0 && $print->config->brim_connections_width == 0; my $bb = Slic3r::Geometry::BoundingBoxf3->new; { my $pbb = $print->bounding_box; $bb->merge_point(Slic3r::Pointf3->new_unscale(@{$pbb->min_point})); $bb->merge_point(Slic3r::Pointf3->new_unscale(@{$pbb->max_point})); } my $color_by_extruder = $self->color_toolpaths_by eq 'extruder'; if (!$print->brim->empty) { my $color = $color_by_extruder ? $self->colors->[ ($print->brim_extruder-1) % @{$self->colors} ] : $self->colors->[2]; push @{$self->volumes}, my $volume = Slic3r::GUI::3DScene::Volume->new( bounding_box => $bb, color => $color, qverts => Slic3r::GUI::_3DScene::GLVertexArray->new, tverts => Slic3r::GUI::_3DScene::GLVertexArray->new, offsets => {}, # print_z => [ qverts, tverts ] ); my $top_z = $print->get_object(0)->get_layer(0)->print_z; $volume->offsets->{$top_z} = [0, 0]; $self->_extrusionentity_to_verts($print->brim, $top_z, Slic3r::Point->new(0,0), $volume->qverts, $volume->tverts); } if (!$print->skirt->empty) { # TODO: it's a bit difficult to predict skirt extruders with the current skirt logic. # We need to rewrite it anyway. my $color = +($self->default_colors)[0]; push @{$self->volumes}, my $volume = Slic3r::GUI::3DScene::Volume->new( bounding_box => $bb, color => $color, qverts => Slic3r::GUI::_3DScene::GLVertexArray->new, tverts => Slic3r::GUI::_3DScene::GLVertexArray->new, offsets => {}, # print_z => [ qverts, tverts ] ); my $skirt_height = 0; # number of layers if ($print->has_infinite_skirt) { $skirt_height = $print->total_layer_count; } else { $skirt_height = min($print->config->skirt_height, $print->total_layer_count); } $skirt_height ||= 1 if $print->config->brim_width > 0 || $print->config->interior_brim_width; # get first $skirt_height layers (maybe this should be moved to a PrintObject method?) my $object0 = $print->get_object(0); my @layers = (); push @layers, map $object0->get_layer($_-1), 1..min($skirt_height, $object0->layer_count); push @layers, map $object0->get_support_layer($_-1), 1..min($skirt_height, $object0->support_layer_count); @layers = sort { $a->print_z <=> $b->print_z } @layers; @layers = @layers[0..($skirt_height-1)]; foreach my $i (0..($skirt_height-1)) { my $top_z = $layers[$i]->print_z; $volume->offsets->{$top_z} = [$volume->qverts->size, $volume->tverts->size]; $self->_extrusionentity_to_verts($print->skirt, $top_z, Slic3r::Point->new(0,0), $volume->qverts, $volume->tverts); } } } sub load_print_object_toolpaths { my ($self, $object) = @_; # order layers by print_z my @layers = sort { $a->print_z <=> $b->print_z } @{$object->layers}, @{$object->support_layers}; # Bounding box of the object and its copies. my $bb = Slic3r::Geometry::BoundingBoxf3->new; { my $obb = $object->bounding_box; foreach my $copy (@{ $object->_shifted_copies }) { my $cbb = $obb->clone; $cbb->translate(@$copy); $bb->merge_point(Slic3r::Pointf3->new_unscale(@{$cbb->min_point}, 0)); $bb->merge_point(Slic3r::Pointf3->new_unscale(@{$cbb->max_point}, $object->size->z)); } } my %volumes = (); # color => Volume # Maximum size of an allocation block: 32MB / sizeof(float) my $alloc_size_max = 32 * 1048576 / 4; my $add = sub { my ($coll, $top_z, $copy, $color) = @_; my $volume = $volumes{$color}; if (!$volume) { push @{$self->volumes}, $volumes{$color} = $volume = Slic3r::GUI::3DScene::Volume->new( bounding_box => $bb, color => $color, qverts => Slic3r::GUI::_3DScene::GLVertexArray->new, tverts => Slic3r::GUI::_3DScene::GLVertexArray->new, offsets => {}, # print_z => [ qverts, tverts ] ); } $volume->offsets->{$top_z} //= [ $volume->qverts->size, $volume->tverts->size ]; $self->_extrusionentity_to_verts($coll, $top_z, $copy, $volume->qverts, $volume->tverts); }; my $color_by_extruder = $self->color_toolpaths_by eq 'extruder'; foreach my $layer (@layers) { my $top_z = $layer->print_z; foreach my $copy (@{ $object->_shifted_copies }) { foreach my $layerm (@{$layer->regions}) { if ($object->step_done(STEP_PERIMETERS)) { my $color = $color_by_extruder ? $self->colors->[ ($layerm->region->config->perimeter_extruder-1) % @{$self->colors} ] : $self->colors->[0]; $add->($layerm->perimeters, $top_z, $copy, $color); } if ($object->step_done(STEP_INFILL)) { my $color = $color_by_extruder ? $self->colors->[ ($layerm->region->config->infill_extruder-1) % @{$self->colors} ] : $self->colors->[1]; if ($color_by_extruder && $layerm->region->config->infill_extruder != $layerm->region->config->solid_infill_extruder) { # divide solid and non-solid infill my $solid = Slic3r::ExtrusionPath::Collection->new; my $non_solid = Slic3r::ExtrusionPath::Collection->new; foreach my $fill (@{$layerm->fills}) { if ($fill->[0]->is_solid_infill) { $solid->append($fill); } else { $non_solid->append($fill); } } $add->($non_solid, $top_z, $copy, $color); $color = $self->colors->[ ($layerm->region->config->solid_infill_extruder-1) % @{$self->colors} ]; $add->($solid, $top_z, $copy, $color); } else { $add->($layerm->fills, $top_z, $copy, $color); } } } if ($layer->isa('Slic3r::Layer::Support') && $object->step_done(STEP_SUPPORTMATERIAL)) { { my $color = $color_by_extruder ? $self->colors->[ ($layer->object->config->support_material_extruder-1) % @{$self->colors} ] : $self->colors->[2]; $add->($layer->support_fills, $top_z, $copy, $color); } { my $color = ($color_by_extruder) ? $self->colors->[ ($layer->object->config->support_material_interface_extruder-1) % @{$self->colors} ] : $self->colors->[2]; $add->($layer->support_interface_fills, $top_z, $copy, $color); } } } foreach my $color (keys %volumes) { my $volume = $volumes{$color}; if ($volume->qverts->size() > $alloc_size_max || $volume->tverts->size() > $alloc_size_max) { # stop appending to this volume; create a new one next time delete $volumes{$color}; } } } } sub set_toolpaths_range { my ($self, $min_z, $max_z) = @_; foreach my $volume (@{$self->volumes}) { $volume->range([ $min_z, $max_z ]); } } sub _expolygons_to_verts { my ($self, $expolygons, $z, $verts, $norms) = @_; my $tess = gluNewTess(); gluTessCallback($tess, GLU_TESS_BEGIN, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_END, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_VERTEX, sub { my ($x, $y, $z) = @_; push @$verts, $x, $y, $z; push @$norms, (0,0,1), (0,0,1), (0,0,1); }); gluTessCallback($tess, GLU_TESS_COMBINE, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_ERROR, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_EDGE_FLAG, 'DEFAULT'); foreach my $expolygon (@$expolygons) { gluTessBeginPolygon($tess); foreach my $polygon (@$expolygon) { gluTessBeginContour($tess); gluTessVertex_p($tess, (map unscale($_), @$_), $z) for @$polygon; gluTessEndContour($tess); } gluTessEndPolygon($tess); } gluDeleteTess($tess); } # Fill in the $qverts and $tverts with quads and triangles # for the extrusion $entity. sub _extrusionentity_to_verts { my ($self, $entity, $top_z, $copy, $qverts, $tverts) = @_; my ($lines, $widths, $heights, $closed); if ($entity->isa('Slic3r::ExtrusionPath::Collection')) { $self->_extrusionentity_to_verts($_, $top_z, $copy, $qverts, $tverts) for @$entity; return; } elsif ($entity->isa('Slic3r::ExtrusionPath')) { my $polyline = $entity->polyline->clone; $polyline->remove_duplicate_points; $polyline->translate(@$copy); $lines = $polyline->lines; $widths = [ map $entity->width, 0..$#$lines ]; $heights = [ map $entity->height, 0..$#$lines ]; $closed = 0; } else { $lines = []; $widths = []; $heights = []; $closed = 1; foreach my $path (@$entity) { my $polyline = $path->polyline->clone; $polyline->remove_duplicate_points; $polyline->translate(@$copy); my $path_lines = $polyline->lines; push @$lines, @$path_lines; push @$widths, map $path->width, 0..$#$path_lines; push @$heights, map $path->height, 0..$#$path_lines; } } # Calling the C++ implementation Slic3r::_3DScene::_extrusionentity_to_verts_do() # This adds new vertices to the $qverts and $tverts. Slic3r::GUI::_3DScene::_extrusionentity_to_verts_do($lines, $widths, $heights, $closed, # Top height of the extrusion. $top_z, # $copy is not used here. $copy, # GLVertexArray object: C++ class maintaining an std::vector for coords and normals. $qverts, $tverts); } sub object_idx { my ($self, $volume_idx) = @_; return $self->_objects_by_volumes->{$volume_idx}[0]; } sub volume_idx { my ($self, $volume_idx) = @_; return $self->_objects_by_volumes->{$volume_idx}[1]; } sub instance_idx { my ($self, $volume_idx) = @_; return $self->_objects_by_volumes->{$volume_idx}[2]; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/AboutDialog.pm000066400000000000000000000103661327442435500177520ustar00rootroot00000000000000package Slic3r::GUI::AboutDialog; use strict; use warnings; use utf8; use Wx qw(:font :html :misc :dialog :sizer :systemsettings :frame :id); use Wx::Event qw(EVT_HTML_LINK_CLICKED EVT_LEFT_DOWN EVT_BUTTON); use Wx::Print; use Wx::Html; use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, -1, 'About Slic3r', wxDefaultPosition, [600, 340], wxCAPTION); $self->SetBackgroundColour(Wx::wxWHITE); my $hsizer = Wx::BoxSizer->new(wxHORIZONTAL); $self->SetSizer($hsizer); # logo my $logo = Slic3r::GUI::AboutDialog::Logo->new($self, -1, wxDefaultPosition, wxDefaultSize); $logo->SetBackgroundColour(Wx::wxWHITE); $hsizer->Add($logo, 0, wxEXPAND | wxLEFT | wxRIGHT, 30); my $vsizer = Wx::BoxSizer->new(wxVERTICAL); $hsizer->Add($vsizer, 1, wxEXPAND, 0); # title my $title = Wx::StaticText->new($self, -1, 'Slic3r', wxDefaultPosition, wxDefaultSize); my $title_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); $title_font->SetWeight(wxFONTWEIGHT_BOLD); $title_font->SetFamily(wxFONTFAMILY_ROMAN); $title_font->SetPointSize(24); $title->SetFont($title_font); $vsizer->Add($title, 0, wxALIGN_LEFT | wxTOP, 30); # version my $version = Wx::StaticText->new($self, -1, "Version $Slic3r::VERSION", wxDefaultPosition, wxDefaultSize); my $version_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); $version_font->SetPointSize(&Wx::wxMSW ? 9 : 11); $version->SetFont($version_font); $vsizer->Add($version, 0, wxALIGN_LEFT | wxBOTTOM, 10); # text my $text = '' . '' . '' . 'Copyright © 2011-2017 Alessandro Ranellucci.
' . 'Slic3r is licensed under the ' . 'GNU Affero General Public License, version 3.' . '


' . 'Contributions by Henrik Brix Andersen, Vojtech Bubnik, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Joseph Lenox, Y. Sapir, Mike Sheldrake, Kliment Yanev and numerous others. ' . 'Manual by Gary Hodgson. Inspired by the RepRap community.
' . 'Slic3r logo designed by Corey Daniels, Silk Icon Set designed by Mark James. ' . '
' . '' . ''; my $html = Wx::HtmlWindow->new($self, -1, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER); my $font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); my $size = &Wx::wxMSW ? 8 : 10; $html->SetFonts($font->GetFaceName, $font->GetFaceName, [$size, $size, $size, $size, $size, $size, $size]); $html->SetBorders(2); $html->SetPage($text); $vsizer->Add($html, 1, wxEXPAND | wxALIGN_LEFT | wxRIGHT | wxBOTTOM, 20); EVT_HTML_LINK_CLICKED($self, $html, \&link_clicked); my $buttons = $self->CreateStdDialogButtonSizer(wxOK); $self->SetEscapeId(wxID_CLOSE); EVT_BUTTON($self, wxID_CLOSE, sub { $self->EndModal(wxID_CLOSE); $self->Close; }); $vsizer->Add($buttons, 0, wxEXPAND | wxRIGHT | wxBOTTOM, 3); EVT_LEFT_DOWN($self, sub { $self->Close }); EVT_LEFT_DOWN($logo, sub { $self->Close }); return $self; } sub link_clicked { my ($self, $event) = @_; Wx::LaunchDefaultBrowser($event->GetLinkInfo->GetHref); $event->Skip(0); } package Slic3r::GUI::AboutDialog::Logo; use Wx qw(:bitmap :dc); use Wx::Event qw(EVT_PAINT); use base 'Wx::Panel'; sub new { my $class = shift; my $self = $class->SUPER::new(@_); $self->{logo} = Wx::Bitmap->new($Slic3r::var->("Slic3r_192px.png"), wxBITMAP_TYPE_PNG); $self->SetMinSize(Wx::Size->new($self->{logo}->GetWidth, $self->{logo}->GetHeight)); EVT_PAINT($self, \&repaint); return $self; } sub repaint { my ($self, $event) = @_; my $dc = Wx::PaintDC->new($self); $dc->SetBackgroundMode(wxTRANSPARENT); my $size = $self->GetSize; my $logo_w = $self->{logo}->GetWidth; my $logo_h = $self->{logo}->GetHeight; $dc->DrawBitmap($self->{logo}, ($size->GetWidth - $logo_w) / 2, ($size->GetHeight - $logo_h) / 2, 1); $event->Skip; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/BedShapeDialog.pm000066400000000000000000000253471327442435500203600ustar00rootroot00000000000000# The bed shape dialog. # The dialog opens from Print Settins tab -> Bed Shape: Set... package Slic3r::GUI::BedShapeDialog; use strict; use warnings; use utf8; use List::Util qw(min max); use Slic3r::Geometry qw(PI X Y unscale); use Wx qw(:dialog :id :misc :sizer :choicebook wxTAB_TRAVERSAL); use Wx::Event qw(EVT_CLOSE); use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent, $default) = @_; my $self = $class->SUPER::new($parent, -1, "Bed Shape", wxDefaultPosition, [350,700], wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); $self->{panel} = my $panel = Slic3r::GUI::BedShapePanel->new($self, $default); my $main_sizer = Wx::BoxSizer->new(wxVERTICAL); $main_sizer->Add($panel, 1, wxEXPAND); $main_sizer->Add($self->CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND); $self->SetSizer($main_sizer); $self->SetMinSize($self->GetSize); $main_sizer->SetSizeHints($self); # needed to actually free memory EVT_CLOSE($self, sub { $self->EndModal(wxID_OK); $self->Destroy; }); return $self; } sub GetValue { my ($self) = @_; return $self->{panel}->GetValue; } package Slic3r::GUI::BedShapePanel; use List::Util qw(min max sum first); use Scalar::Util qw(looks_like_number); use Slic3r::Geometry qw(PI X Y scale unscale scaled_epsilon deg2rad); use Wx qw(:font :id :misc :sizer :choicebook :filedialog :pen :brush wxTAB_TRAVERSAL); use Wx::Event qw(EVT_CLOSE EVT_CHOICEBOOK_PAGE_CHANGED EVT_BUTTON); use base 'Wx::Panel'; use constant SHAPE_RECTANGULAR => 0; use constant SHAPE_CIRCULAR => 1; use constant SHAPE_CUSTOM => 2; sub new { my $class = shift; my ($parent, $default) = @_; my $self = $class->SUPER::new($parent, -1); $self->on_change(undef); my $box = Wx::StaticBox->new($self, -1, "Shape"); my $sbsizer = Wx::StaticBoxSizer->new($box, wxVERTICAL); # shape options $self->{shape_options_book} = Wx::Choicebook->new($self, -1, wxDefaultPosition, [300,-1], wxCHB_TOP); $sbsizer->Add($self->{shape_options_book}); $self->{optgroups} = []; { my $optgroup = $self->_init_shape_options_page('Rectangular'); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'rect_size', type => 'point', label => 'Size', tooltip => 'Size in X and Y of the rectangular plate.', default => [200,200], )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'rect_origin', type => 'point', label => 'Origin', tooltip => 'Distance of the 0,0 G-code coordinate from the front left corner of the rectangle.', default => [0,0], )); } { my $optgroup = $self->_init_shape_options_page('Circular'); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'diameter', type => 'f', label => 'Diameter', tooltip => 'Diameter of the print bed. It is assumed that origin (0,0) is located in the center.', sidetext => 'mm', default => 200, )); } { my $optgroup = $self->_init_shape_options_page('Custom'); $optgroup->append_line(Slic3r::GUI::OptionsGroup::Line->new( full_width => 1, widget => sub { my ($parent) = @_; my $btn = Wx::Button->new($parent, -1, "Load shape from STL...", wxDefaultPosition, wxDefaultSize); EVT_BUTTON($self, $btn, sub { $self->_load_stl }); return $btn; } )); } EVT_CHOICEBOOK_PAGE_CHANGED($self, -1, sub { $self->_update_shape; }); # right pane with preview canvas my $canvas = $self->{canvas} = Slic3r::GUI::2DBed->new($self); # main sizer my $top_sizer = Wx::BoxSizer->new(wxHORIZONTAL); $top_sizer->Add($sbsizer, 0, wxEXPAND | wxTOP | wxBOTTOM, 10); $top_sizer->Add($canvas, 1, wxEXPAND | wxALL, 10) if $canvas; $self->SetSizerAndFit($top_sizer); $self->_set_shape($default); $self->_update_preview; return $self; } sub on_change { my ($self, $cb) = @_; $self->{on_change} = $cb // sub {}; } # Called from the constructor. # Set the initial bed shape from a list of points. # Deduce the bed shape type (rect, circle, custom) # This routine shall be smart enough if the user messes up # with the list of points in the ini file directly. sub _set_shape { my ($self, $points) = @_; # is this a rectangle? if (@$points == 4) { my $polygon = Slic3r::Polygon->new_scale(@$points); my $lines = $polygon->lines; if ($lines->[0]->parallel_to_line($lines->[2]) && $lines->[1]->parallel_to_line($lines->[3])) { # okay, it's a rectangle # find origin # the || 0 hack prevents "-0" which might confuse the user my $x_min = min(map $_->[X], @$points) || 0; my $x_max = max(map $_->[X], @$points) || 0; my $y_min = min(map $_->[Y], @$points) || 0; my $y_max = max(map $_->[Y], @$points) || 0; my $origin = [-$x_min, -$y_min]; $self->{shape_options_book}->SetSelection(SHAPE_RECTANGULAR); my $optgroup = $self->{optgroups}[SHAPE_RECTANGULAR]; $optgroup->set_value('rect_size', [ $x_max-$x_min, $y_max-$y_min ]); $optgroup->set_value('rect_origin', $origin); $self->_update_shape; return; } } # is this a circle? { # Analyze the array of points. Do they reside on a circle? my $polygon = Slic3r::Polygon->new_scale(@$points); my $center = $polygon->bounding_box->center; my @vertex_distances = map $center->distance_to($_), @$polygon; my $avg_dist = sum(@vertex_distances)/@vertex_distances; if (!defined first { abs($_ - $avg_dist) > 10*scaled_epsilon } @vertex_distances) { # all vertices are equidistant to center $self->{shape_options_book}->SetSelection(SHAPE_CIRCULAR); my $optgroup = $self->{optgroups}[SHAPE_CIRCULAR]; $optgroup->set_value('diameter', sprintf("%.0f", unscale($avg_dist*2))); $self->_update_shape; return; } } if (@$points < 3) { # Invalid polygon. Revert to default bed dimensions. $self->{shape_options_book}->SetSelection(SHAPE_RECTANGULAR); my $optgroup = $self->{optgroups}[SHAPE_RECTANGULAR]; $optgroup->set_value('rect_size', [200, 200]); $optgroup->set_value('rect_origin', [0, 0]); $self->_update_shape; return; } # This is a custom bed shape, use the polygon provided. $self->{shape_options_book}->SetSelection(SHAPE_CUSTOM); # Copy the polygon to the canvas, make a copy of the array. $self->{canvas}->bed_shape([@$points]); $self->_update_shape; } # Update the bed shape from the dialog fields. sub _update_shape { my ($self) = @_; my $page_idx = $self->{shape_options_book}->GetSelection; if ($page_idx == SHAPE_RECTANGULAR) { my $rect_size = $self->{optgroups}[SHAPE_RECTANGULAR]->get_value('rect_size'); my $rect_origin = $self->{optgroups}[SHAPE_RECTANGULAR]->get_value('rect_origin'); my ($x, $y) = @$rect_size; return if !looks_like_number($x) || !looks_like_number($y); # empty strings or '-' or other things return if !$x || !$y or $x == 0 or $y == 0; my ($x0, $y0) = (0,0); my ($x1, $y1) = ($x ,$y); { my ($dx, $dy) = @$rect_origin; return if !looks_like_number($dx) || !looks_like_number($dy); # empty strings or '-' or other things $x0 -= $dx; $x1 -= $dx; $y0 -= $dy; $y1 -= $dy; } $self->{canvas}->bed_shape([ [$x0,$y0], [$x1,$y0], [$x1,$y1], [$x0,$y1], ]); } elsif ($page_idx == SHAPE_CIRCULAR) { my $diameter = $self->{optgroups}[SHAPE_CIRCULAR]->get_value('diameter'); return if !$diameter or $diameter == 0; my $r = $diameter/2; my $twopi = 2*PI; my $edges = 60; my $polygon = Slic3r::Polygon->new_scale( map [ $r * cos $_, $r * sin $_ ], map { $twopi/$edges*$_ } 1..$edges ); $self->{canvas}->bed_shape([ map [ unscale($_->x), unscale($_->y) ], @$polygon #)) ]); } $self->{on_change}->(); $self->_update_preview; } sub _update_preview { my ($self) = @_; $self->{canvas}->Refresh if $self->{canvas}; $self->Refresh; } # Called from the constructor. # Create a panel for a rectangular / circular / custom bed shape. sub _init_shape_options_page { my ($self, $title) = @_; my $panel = Wx::Panel->new($self->{shape_options_book}); my $optgroup; push @{$self->{optgroups}}, $optgroup = Slic3r::GUI::OptionsGroup->new( parent => $panel, title => 'Settings', label_width => 100, on_change => sub { my ($opt_id) = @_; #$self->{"_$opt_id"} = $optgroup->get_value($opt_id); $self->_update_shape; }, ); $panel->SetSizerAndFit($optgroup->sizer); $self->{shape_options_book}->AddPage($panel, $title); return $optgroup; } # Loads an stl file, projects it to the XY plane and calculates a polygon. sub _load_stl { my ($self) = @_; my $dialog = Wx::FileDialog->new($self, 'Choose a file to import bed shape from (STL/OBJ/AMF/3MF):', "", "", &Slic3r::GUI::MODEL_WILDCARD, wxFD_OPEN | wxFD_FILE_MUST_EXIST); if ($dialog->ShowModal != wxID_OK) { $dialog->Destroy; return; } my $input_file = Slic3r::decode_path($dialog->GetPaths); $dialog->Destroy; my $model = Slic3r::Model->read_from_file($input_file); my $mesh = $model->raw_mesh; my $expolygons = $mesh->horizontal_projection; if (@$expolygons == 0) { Slic3r::GUI::show_error($self, "The selected file contains no geometry."); return; } if (@$expolygons > 1) { Slic3r::GUI::show_error($self, "The selected file contains several disjoint areas. This is not supported."); return; } my $polygon = $expolygons->[0]->contour; $self->{canvas}->bed_shape([ map [ unscale($_->x), unscale($_->y) ], @$polygon ]); $self->_update_preview(); } # Returns the resulting bed shape polygon. This value will be stored to the ini file. sub GetValue { my ($self) = @_; return $self->{canvas}->bed_shape; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/BonjourBrowser.pm000066400000000000000000000030071327442435500205340ustar00rootroot00000000000000# A tiny dialog to select an OctoPrint device to print to. package Slic3r::GUI::BonjourBrowser; use strict; use warnings; use utf8; use Wx qw(:dialog :id :misc :sizer :choicebook wxTAB_TRAVERSAL); use Wx::Event qw(EVT_CLOSE); use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent, $devices) = @_; my $self = $class->SUPER::new($parent, -1, "Device Browser", wxDefaultPosition, [350,700], wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); $self->{devices} = $devices; # label my $text = Wx::StaticText->new($self, -1, "Choose an OctoPrint device in your network:", wxDefaultPosition, wxDefaultSize); # selector $self->{choice} = my $choice = Wx::Choice->new($self, -1, wxDefaultPosition, wxDefaultSize, [ map $_->name, @{$self->{devices}} ]); my $main_sizer = Wx::BoxSizer->new(wxVERTICAL); $main_sizer->Add($text, 1, wxEXPAND | wxALL, 10); $main_sizer->Add($choice, 1, wxEXPAND | wxALL, 10); $main_sizer->Add($self->CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND); $self->SetSizer($main_sizer); $self->SetMinSize($self->GetSize); $main_sizer->SetSizeHints($self); # needed to actually free memory EVT_CLOSE($self, sub { $self->EndModal(wxID_OK); $self->Destroy; }); return $self; } sub GetValue { my ($self) = @_; return $self->{devices}[ $self->{choice}->GetSelection ]->address; } sub GetPort { my ($self) = @_; return $self->{devices}[ $self->{choice}->GetSelection ]->port; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/ColorScheme.pm000066400000000000000000000145021327442435500177570ustar00rootroot00000000000000package Slic3r::GUI::ColorScheme; use strict; use warnings; use POSIX; use vars qw(@ISA @EXPORT); use Exporter 'import'; our @ISA = 'Exporter'; our @EXPORT = qw($DEFAULT_COLORSCHEME $SOLID_BACKGROUNDCOLOR @SELECTED_COLOR @HOVER_COLOR @TOP_COLOR @BOTTOM_COLOR @GRID_COLOR @GROUND_COLOR @COLOR_CUTPLANE @COLOR_PARTS @COLOR_INFILL @COLOR_SUPPORT @COLOR_UNKNOWN @BED_COLOR @BED_GRID @BED_SELECTED @BED_OBJECTS @BED_INSTANCE @BED_DRAGGED @BED_CENTER @BED_SKIRT @BED_CLEARANCE @BED_DARK @BACKGROUND255 @TOOL_DARK @TOOL_SUPPORT @TOOL_STEPPERIM @TOOL_INFILL @TOOL_SHADE @TOOL_COLOR @BACKGROUND_COLOR @SPLINE_L_PEN @SPLINE_O_PEN @SPLINE_I_PEN @SPLINE_R_PEN ); # DEFAULT values our $DEFAULT_COLORSCHEME = 1; our $SOLID_BACKGROUNDCOLOR = 0; our @SELECTED_COLOR = (0, 1, 0); our @HOVER_COLOR = (0.4, 0.9, 0); # Hover over Model our @TOP_COLOR = (10/255,98/255,144/255); # TOP Backgroud color our @BOTTOM_COLOR = (0,0,0); # BOTTOM Backgroud color our @BACKGROUND_COLOR = @TOP_COLOR; # SOLID background color our @GRID_COLOR = (0.2, 0.2, 0.2, 0.4); # Grid color our @GROUND_COLOR = (0.8, 0.6, 0.5, 0.4); # Ground or Plate color our @COLOR_CUTPLANE = (.8, .8, .8, 0.5); our @COLOR_PARTS = (1, 0.95, 0.2, 1); # Perimeter color our @COLOR_INFILL = (1, 0.45, 0.45, 1); our @COLOR_SUPPORT = (0.5, 1, 0.5, 1); our @COLOR_UNKNOWN = (0.5, 0.5, 1, 1); our @BED_COLOR = (255, 255, 255); our @BED_GRID = (230, 230, 230); our @BED_SELECTED = (255, 166, 128); our @BED_OBJECTS = (210, 210, 210); our @BED_INSTANCE = (255, 128, 128); our @BED_DRAGGED = (128, 128, 255); our @BED_CENTER = (200, 200, 200); our @BED_SKIRT = (150, 150, 150); our @BED_CLEARANCE = (0, 0, 200); our @BACKGROUND255 = (255, 255, 255); our @TOOL_DARK = (0, 0, 0); our @TOOL_SUPPORT = (0, 0, 0); our @TOOL_INFILL = (0, 0, 0.7); our @TOOL_STEPPERIM = (0.7, 0, 0); our @TOOL_SHADE = (0.95, 0.95, 0.95); our @TOOL_COLOR = (0.9, 0.9, 0.9); our @SPLINE_L_PEN = (50, 50, 50); our @SPLINE_O_PEN = (200, 200, 200); our @SPLINE_I_PEN = (255, 0, 0); our @SPLINE_R_PEN = (5, 120, 160); our @BED_DARK = (0, 0, 0); # S O L A R I Z E # # http://ethanschoonover.com/solarized our @COLOR_BASE03 = (0.00000,0.16863,0.21176); our @COLOR_BASE02 = (0.02745,0.21176,0.25882); our @COLOR_BASE01 = (0.34510,0.43137,0.45882); our @COLOR_BASE00 = (0.39608,0.48235,0.51373); our @COLOR_BASE0 = (0.51373,0.58039,0.58824); our @COLOR_BASE1 = (0.57647,0.63137,0.63137); our @COLOR_BASE2 = (0.93333,0.90980,0.83529); our @COLOR_BASE3 = (0.99216,0.96471,0.89020); our @COLOR_YELLOW = (0.70980,0.53725,0.00000); our @COLOR_ORANGE = (0.79608,0.29412,0.08627); our @COLOR_RED = (0.86275,0.19608,0.18431); our @COLOR_MAGENTA = (0.82745,0.21176,0.50980); our @COLOR_VIOLET = (0.42353,0.44314,0.76863); our @COLOR_BLUE = (0.14902,0.54510,0.82353); our @COLOR_CYAN = (0.16471,0.63137,0.59608); our @COLOR_GREEN = (0.52157,0.60000,0.00000); # create your own theme: # 1. add new sub and name it according to your scheme # 2. add that name to Preferences.pm # 3. Choose your newly created theme in Slic3rs' Preferences (File -> Preferences). sub getSolarized { # add this name to Preferences.pm $DEFAULT_COLORSCHEME = 0; # DISABLE default color scheme $SOLID_BACKGROUNDCOLOR = 1; # Switch between SOLID or FADED background color @SELECTED_COLOR = @COLOR_MAGENTA; # Color of selected Model @HOVER_COLOR = @COLOR_VIOLET; # Color when hovering over Model # @TOP_COLOR = @COLOR_BASE2; # FADE Background color - only used if $SOLID_BACKGROUNDCOLOR = 0 # @BOTTOM_COLOR = @COLOR_BASE02; # FADE Background color - only used if $SOLID_BACKGROUNDCOLOR = 0 @BACKGROUND_COLOR = @COLOR_BASE3; # SOLID Background color - REQUIRED for NOT getDefault @GRID_COLOR = (@COLOR_BASE1, 0.4); # Grid @GROUND_COLOR = (@COLOR_BASE2, 0.4); # Ground or Plate @COLOR_CUTPLANE = (@COLOR_BASE1, 0.5); # Cut plane @COLOR_PARTS = (@TOOL_COLOR, 1); # Perimeter @COLOR_INFILL = (@COLOR_BASE2, 1); # Infill @COLOR_SUPPORT = (@TOOL_SUPPORT, 1); # Support @COLOR_UNKNOWN = (@COLOR_CYAN, 1); # I don't know what that color's for! # 2DBed.pm and ./plater/2D.pm colors @BED_COLOR = map { ceil($_ * 255) } @COLOR_BASE2; # do math -> multiply each value by 255 and round up @BED_GRID = map { ceil($_ * 255) } @COLOR_BASE1; # Bed, Ground or Plate @BED_SELECTED = map { ceil($_ * 255) } @COLOR_YELLOW; # Selected Model @BED_INSTANCE = map { ceil($_ * 255) } @SELECTED_COLOR; # Real selected Model @BED_OBJECTS = map { ceil($_ * 255) } @COLOR_PARTS; # Models on bed @BED_DRAGGED = map { ceil($_ * 255) } @COLOR_CYAN; # Color while dragging @BED_CENTER = map { ceil($_ * 255) } @COLOR_BASE1; # Cross hair @BED_SKIRT = map { ceil($_ * 255) } @COLOR_BASE01; # Brim/Skirt @BED_CLEARANCE = map { ceil($_ * 255) } @COLOR_BLUE; # not sure what that does @BED_DARK = map { ceil($_ * 255) } @COLOR_BASE01; # not sure what that does @BACKGROUND255 = map { ceil($_ * 255) } @BACKGROUND_COLOR; # Backgroud color, this time RGB # 2DToolpaths.pm colors : LAYERS Tab @TOOL_DARK = @COLOR_BASE01; # Brim/Skirt @TOOL_SUPPORT = @COLOR_GREEN; # Support @TOOL_INFILL = @COLOR_BASE1; # Infill @TOOL_COLOR = @COLOR_BLUE; # Real Perimeter @TOOL_STEPPERIM = @COLOR_CYAN; # Inner Perimeter @TOOL_SHADE = @COLOR_BASE2; # Shade; model inside # Colors for *Layer heights...* dialog @SPLINE_L_PEN = map { ceil($_ * 255) } @COLOR_BASE01; # Line color @SPLINE_O_PEN = map { ceil($_ * 255) } @COLOR_BASE1; # Original color @SPLINE_I_PEN = map { ceil($_ * 255) } @COLOR_MAGENTA; # Interactive color @SPLINE_R_PEN = map { ceil($_ * 255) } @COLOR_VIOLET; # Resulting color } sub getDefault{ $DEFAULT_COLORSCHEME = 1; # ENABLE default color scheme # Define your function here # getDefault is just a dummy function and uses the default values from above. } 1; # REQUIRED at EOF Slic3r-1.3.0/lib/Slic3r/GUI/ConfigWizard.pm000066400000000000000000000277451327442435500201570ustar00rootroot00000000000000# The config wizard is executed when the Slic3r is first started. # The wizard helps the user to specify the 3D printer properties. package Slic3r::GUI::ConfigWizard; use strict; use warnings; use utf8; use Wx; use base 'Wx::Wizard'; use Slic3r::Geometry qw(unscale); # adhere to various human interface guidelines our $wizard = 'Wizard'; $wizard = 'Assistant' if &Wx::wxMAC || &Wx::wxGTK; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, -1, "Configuration $wizard"); # initialize an empty repository $self->{config} = Slic3r::Config->new; $self->add_page(Slic3r::GUI::ConfigWizard::Page::Welcome->new($self)); $self->add_page(Slic3r::GUI::ConfigWizard::Page::Firmware->new($self)); $self->add_page(Slic3r::GUI::ConfigWizard::Page::Bed->new($self)); $self->add_page(Slic3r::GUI::ConfigWizard::Page::Nozzle->new($self)); $self->add_page(Slic3r::GUI::ConfigWizard::Page::Filament->new($self)); $self->add_page(Slic3r::GUI::ConfigWizard::Page::Temperature->new($self)); $self->add_page(Slic3r::GUI::ConfigWizard::Page::BedTemperature->new($self)); $self->add_page(Slic3r::GUI::ConfigWizard::Page::Finished->new($self)); $_->build_index for @{$self->{pages}}; return $self; } sub add_page { my $self = shift; my ($page) = @_; my $n = push @{$self->{pages}}, $page; # add first page to the page area sizer $self->GetPageAreaSizer->Add($page) if $n == 1; # link pages $self->{pages}[$n-2]->set_next_page($page) if $n >= 2; $page->set_previous_page($self->{pages}[$n-2]) if $n >= 2; } sub run { my $self = shift; if (Wx::Wizard::RunWizard($self, $self->{pages}[0])) { # it would be cleaner to have these defined inside each page class, # in some event getting called before leaving the page { # set first_layer_height + layer_height based on nozzle_diameter my $nozzle = $self->{config}->nozzle_diameter; $self->{config}->set('first_layer_height', $nozzle->[0]); $self->{config}->set('layer_height', $nozzle->[0] - 0.1); # set first_layer_temperature to temperature + 5 $self->{config}->set('first_layer_temperature', [$self->{config}->temperature->[0] + 5]); # set first_layer_bed_temperature to temperature + 5 $self->{config}->set('first_layer_bed_temperature', ($self->{config}->bed_temperature > 0) ? ($self->{config}->bed_temperature + 5) : 0); } $self->Destroy; return $self->{config}; } else { $self->Destroy; return undef; } } package Slic3r::GUI::ConfigWizard::Index; use Wx qw(:bitmap :dc :font :misc :sizer :systemsettings :window); use Wx::Event qw(EVT_ERASE_BACKGROUND EVT_PAINT); use base 'Wx::Panel'; sub new { my $class = shift; my ($parent, $title) = @_; my $self = $class->SUPER::new($parent); push @{$self->{titles}}, $title; $self->{own_index} = 0; $self->{bullets}->{before} = Wx::Bitmap->new($Slic3r::var->("bullet_black.png"), wxBITMAP_TYPE_PNG); $self->{bullets}->{own} = Wx::Bitmap->new($Slic3r::var->("bullet_blue.png"), wxBITMAP_TYPE_PNG); $self->{bullets}->{after} = Wx::Bitmap->new($Slic3r::var->("bullet_white.png"), wxBITMAP_TYPE_PNG); $self->{background} = Wx::Bitmap->new($Slic3r::var->("Slic3r_192px_transparent.png"), wxBITMAP_TYPE_PNG); $self->SetMinSize(Wx::Size->new($self->{background}->GetWidth, $self->{background}->GetHeight)); EVT_PAINT($self, \&repaint); return $self; } sub repaint { my ($self, $event) = @_; my $size = $self->GetClientSize; my $gap = 5; my $dc = Wx::PaintDC->new($self); $dc->SetBackgroundMode(wxTRANSPARENT); $dc->SetFont($self->GetFont); $dc->SetTextForeground($self->GetForegroundColour); my $background_h = $self->{background}->GetHeight; my $background_w = $self->{background}->GetWidth; $dc->DrawBitmap($self->{background}, ($size->GetWidth - $background_w) / 2, ($size->GetHeight - $background_h) / 2, 1); my $label_h = $self->{bullets}->{own}->GetHeight; $label_h = $dc->GetCharHeight if $dc->GetCharHeight > $label_h; my $label_w = $size->GetWidth; my $i = 0; foreach (@{$self->{titles}}) { my $bullet = $self->{bullets}->{own}; $bullet = $self->{bullets}->{before} if $i < $self->{own_index}; $bullet = $self->{bullets}->{after} if $i > $self->{own_index}; $dc->SetTextForeground(Wx::Colour->new(128, 128, 128)) if $i > $self->{own_index}; $dc->DrawLabel($_, $bullet, Wx::Rect->new(0, $i * ($label_h + $gap), $label_w, $label_h)); $i++; } $event->Skip; } sub prepend_title { my $self = shift; my ($title) = @_; unshift @{$self->{titles}}, $title; $self->{own_index}++; $self->Refresh; } sub append_title { my $self = shift; my ($title) = @_; push @{$self->{titles}}, $title; $self->Refresh; } package Slic3r::GUI::ConfigWizard::Page; use Wx qw(:font :misc :sizer :staticline :systemsettings); use base 'Wx::WizardPage'; sub new { my $class = shift; my ($parent, $title, $short_title) = @_; my $self = $class->SUPER::new($parent); my $sizer = Wx::FlexGridSizer->new(0, 2, 10, 10); $sizer->AddGrowableCol(1, 1); $sizer->AddGrowableRow(1, 1); $sizer->AddStretchSpacer(0); $self->SetSizer($sizer); # title my $text = Wx::StaticText->new($self, -1, $title, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); my $bold_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); $bold_font->SetWeight(wxFONTWEIGHT_BOLD); $bold_font->SetPointSize(14); $text->SetFont($bold_font); $sizer->Add($text, 0, wxALIGN_LEFT, 0); # index $self->{short_title} = $short_title ? $short_title : $title; $self->{index} = Slic3r::GUI::ConfigWizard::Index->new($self, $self->{short_title}); $sizer->Add($self->{index}, 1, wxEXPAND | wxTOP | wxRIGHT, 10); # contents $self->{width} = 430; $self->{vsizer} = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($self->{vsizer}, 1); return $self; } sub append_text { my $self = shift; my ($text) = @_; my $para = Wx::StaticText->new($self, -1, $text, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); $para->Wrap($self->{width}); $para->SetMinSize([$self->{width}, -1]); $self->{vsizer}->Add($para, 0, wxALIGN_LEFT | wxTOP | wxBOTTOM, 10); } sub append_option { my $self = shift; my ($full_key) = @_; # populate repository with the factory default my ($opt_key, $opt_index) = split /#/, $full_key, 2; $self->config->apply(Slic3r::Config->new_from_defaults($opt_key)); # draw the control my $optgroup = Slic3r::GUI::ConfigOptionsGroup->new( parent => $self, title => '', config => $self->config, full_labels => 1, ); $optgroup->append_single_option_line($opt_key, $opt_index); $self->{vsizer}->Add($optgroup->sizer, 0, wxEXPAND | wxTOP | wxBOTTOM, 10); } sub append_panel { my ($self, $panel) = @_; $self->{vsizer}->Add($panel, 0, wxEXPAND | wxTOP | wxBOTTOM, 10); } sub set_previous_page { my $self = shift; my ($previous_page) = @_; $self->{previous_page} = $previous_page; } sub GetPrev { my $self = shift; return $self->{previous_page}; } sub set_next_page { my $self = shift; my ($next_page) = @_; $self->{next_page} = $next_page; } sub GetNext { my $self = shift; return $self->{next_page}; } sub get_short_title { my $self = shift; return $self->{short_title}; } sub build_index { my $self = shift; my $page = $self; $self->{index}->prepend_title($page->get_short_title) while ($page = $page->GetPrev); $page = $self; $self->{index}->append_title($page->get_short_title) while ($page = $page->GetNext); } sub config { my ($self) = @_; return $self->GetParent->{config}; } package Slic3r::GUI::ConfigWizard::Page::Welcome; use base 'Slic3r::GUI::ConfigWizard::Page'; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, "Welcome to the Slic3r Configuration $wizard", 'Welcome'); $self->append_text('Hello, welcome to Slic3r! This '.lc($wizard).' helps you with the initial configuration; just a few settings and you will be ready to print.'); $self->append_text('To import an existing configuration instead, cancel this '.lc($wizard).' and use the Open Config menu item found in the File menu.'); $self->append_text('To continue, click Next.'); return $self; } package Slic3r::GUI::ConfigWizard::Page::Firmware; use base 'Slic3r::GUI::ConfigWizard::Page'; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, 'Firmware Type'); $self->append_text('Choose the type of firmware used by your printer, then click Next.'); $self->append_option('gcode_flavor'); return $self; } package Slic3r::GUI::ConfigWizard::Page::Bed; use base 'Slic3r::GUI::ConfigWizard::Page'; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, 'Bed Size'); $self->append_text('Set the shape of your printer\'s bed, then click Next.'); $self->config->apply(Slic3r::Config->new_from_defaults('bed_shape')); $self->{bed_shape_panel} = my $panel = Slic3r::GUI::BedShapePanel->new($self, $self->config->bed_shape); $self->{bed_shape_panel}->on_change(sub { $self->config->set('bed_shape', $self->{bed_shape_panel}->GetValue); }); $self->append_panel($self->{bed_shape_panel}); return $self; } package Slic3r::GUI::ConfigWizard::Page::Nozzle; use base 'Slic3r::GUI::ConfigWizard::Page'; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, 'Nozzle Diameter'); $self->append_text('Enter the diameter of your printer\'s hot end nozzle, then click Next.'); $self->append_option('nozzle_diameter#0'); return $self; } package Slic3r::GUI::ConfigWizard::Page::Filament; use base 'Slic3r::GUI::ConfigWizard::Page'; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, 'Filament Diameter'); $self->append_text('Enter the diameter of your filament, then click Next.'); $self->append_text('Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average.'); $self->append_option('filament_diameter#0'); return $self; } package Slic3r::GUI::ConfigWizard::Page::Temperature; use base 'Slic3r::GUI::ConfigWizard::Page'; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, 'Extrusion Temperature'); $self->append_text('Enter the temperature needed for extruding your filament, then click Next.'); $self->append_text('A rule of thumb is 160 to 230 °C for PLA, and 215 to 250 °C for ABS.'); $self->append_option('temperature#0'); return $self; } package Slic3r::GUI::ConfigWizard::Page::BedTemperature; use base 'Slic3r::GUI::ConfigWizard::Page'; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, 'Bed Temperature'); $self->append_text('Enter the bed temperature needed for getting your filament to stick to your heated bed, then click Next.'); $self->append_text('A rule of thumb is 60 °C for PLA and 110 °C for ABS. Leave zero if you have no heated bed.'); $self->append_option('bed_temperature'); return $self; } package Slic3r::GUI::ConfigWizard::Page::Finished; use base 'Slic3r::GUI::ConfigWizard::Page'; sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, 'Congratulations!', 'Finish'); $self->append_text("You have successfully completed the Slic3r Configuration $wizard. " . 'Slic3r is now configured for your printer and filament.'); $self->append_text('To close this '.lc($wizard).' and apply the newly created configuration, click Finish.'); return $self; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Controller.pm000066400000000000000000000150101327442435500176720ustar00rootroot00000000000000# The "Controller" tab to control the printer using serial / USB. # This feature is rarely used. Much more often, the firmware reads the G-codes from a SD card. # May there be multiple subtabs per each printer connected? package Slic3r::GUI::Controller; use strict; use warnings; use utf8; use List::Util qw(any); use Wx qw(wxTheApp :frame :id :misc :sizer :bitmap :button :icon :dialog); use Wx::Event qw(EVT_CLOSE EVT_LEFT_DOWN EVT_MENU); use base qw(Wx::ScrolledWindow Class::Accessor); __PACKAGE__->mk_accessors(qw(_selected_printer_preset)); our @ConfigOptions = qw(bed_shape serial_port serial_speed); sub new { my ($class, $parent) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, [600,350]); $self->SetScrollbars(0, 1, 0, 1); $self->{sizer} = my $sizer = Wx::BoxSizer->new(wxVERTICAL); # warning to show when there are no printers configured { $self->{text_no_printers} = Wx::StaticText->new($self, -1, "No printers were configured for USB/serial control.", wxDefaultPosition, wxDefaultSize); $self->{sizer}->Add($self->{text_no_printers}, 0, wxTOP | wxLEFT, 30); } # button for adding new printer panels { my $btn = $self->{btn_add} = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new($Slic3r::var->("add.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, Wx::wxBORDER_NONE); $btn->SetToolTipString("Add printer…") if $btn->can('SetToolTipString'); EVT_LEFT_DOWN($btn, sub { my $menu = Wx::Menu->new; my %presets = map { $_->name => $_ } @{wxTheApp->presets->{printer}}; # remove printers that already exist my @panels = $self->print_panels; delete $presets{$_} for map $_->printer_name, @panels; foreach my $preset_name (sort keys %presets) { my $preset = $presets{$preset_name}; next if !$preset->dirty_config->serial_port; my $id = &Wx::NewId(); $menu->Append($id, $preset_name); EVT_MENU($menu, $id, sub { $self->add_printer($preset); }); } $self->PopupMenu($menu, $btn->GetPosition); $menu->Destroy; }); $self->{sizer}->Add($btn, 0, wxTOP | wxLEFT, 10); } $self->SetSizer($sizer); $self->SetMinSize($self->GetSize); #$sizer->SetSizeHints($self); EVT_CLOSE($self, sub { my (undef, $event) = @_; if ($event->CanVeto) { foreach my $panel ($self->print_panels) { if ($panel->printing) { my $confirm = Wx::MessageDialog->new( $self, "Printer '" . $panel->printer_name . "' is printing.\n\nDo you want to stop printing?", 'Unfinished Print', wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION, ); if ($confirm->ShowModal == wxID_NO) { $event->Veto; return; } } } } foreach my $panel ($self->print_panels) { $panel->disconnect; } $event->Skip; }); $self->Layout; return $self; } sub OnActivate { my ($self) = @_; # get all available presets my %presets = (); foreach my $preset (@{wxTheApp->presets->{printer}}) { $preset->load_config; next if !$preset->dirty_config->serial_port; $presets{$preset->name} = $preset; } # decide which ones we want to keep my %active = (); # keep the ones that are currently connected or have jobs in queue $active{$_} = 1 for map $_->printer_name, grep { $_->is_connected || @{$_->jobs} > 0 } $self->print_panels; if (%presets) { # if there are no active panels, use sensible defaults if (!%active && keys %presets <= 2) { # if only one or two presets exist, load them $active{$_} = 1 for keys %presets; } if (!%active) { # enable printers whose port is available my %ports = map { $_ => 1 } wxTheApp->scan_serial_ports; $active{$_} = 1 for grep exists $ports{$presets{$_}->dirty_config->serial_port}, keys %presets; } if (!%active && $self->_selected_printer_preset) { # enable currently selected printer if it is configured $active{$self->_selected_printer_preset} = 1 if $presets{$self->_selected_printer_preset}; } } # apply changes for my $panel ($self->print_panels) { next if $active{$panel->printer_name}; $self->{sizer}->DetachWindow($panel); $panel->Destroy; } $self->add_printer($presets{$_}) for sort keys %active; # show/hide the warning about no printers $self->{text_no_printers}->Show(!%presets); # show/hide the Add button $self->{btn_add}->Show(keys %presets != keys %active); $self->Layout; # we need this in order to trigger the OnSize event of wxScrolledWindow which # recalculates the virtual size Wx::GetTopLevelParent($self)->SendSizeEvent; } sub add_printer { my ($self, $preset) = @_; # check that printer doesn't exist already foreach my $panel ($self->print_panels) { if ($panel->printer_name eq $preset->name) { return $panel; } } my $printer_panel = Slic3r::GUI::Controller::PrinterPanel->new($self, $preset); $self->{sizer}->Prepend($printer_panel, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10); $self->Layout; return $printer_panel; } sub print_panels { my ($self) = @_; return grep $_->isa('Slic3r::GUI::Controller::PrinterPanel'), map $_->GetWindow, $self->{sizer}->GetChildren; } sub printing { my ($self) = @_; return any { $_->printing } $self->print_panels; } sub update_presets { my $self = shift; my ($group, $presets, $selected, $is_dirty) = @_; # update configs of currently loaded print panels foreach my $panel ($self->print_panels) { foreach my $preset (@$presets) { if ($panel->printer_name eq $preset->name) { my $config = $preset->config(\@ConfigOptions); $panel->config->apply($config); } } } $self->_selected_printer_preset($presets->[$selected]->name); } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Controller/000077500000000000000000000000001327442435500173375ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r/GUI/Controller/ManualControlDialog.pm000066400000000000000000000237671327442435500236120ustar00rootroot00000000000000package Slic3r::GUI::Controller::ManualControlDialog; use strict; use warnings; use utf8; use Scalar::Util qw(looks_like_number); use Slic3r::Geometry qw(PI X Y unscale); use Wx qw(:dialog :id :misc :sizer :choicebook :button :bitmap :textctrl wxBORDER_NONE wxTAB_TRAVERSAL); use Wx::Event qw(EVT_CLOSE EVT_BUTTON EVT_TEXT_ENTER); use base qw(Wx::Dialog Class::Accessor); __PACKAGE__->mk_accessors(qw(sender writer config2 x_homed y_homed)); sub new { my ($class, $parent, $config, $sender, $manual_control_config) = @_; my $self = $class->SUPER::new($parent, -1, "Manual Control", wxDefaultPosition, [500,400], wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); $self->sender($sender); $self->writer(Slic3r::GCode::Writer->new); $self->writer->config->apply_dynamic($config); $self->config2($manual_control_config); my $bed_sizer = Wx::FlexGridSizer->new(2, 3, 1, 1); $bed_sizer->AddGrowableCol(1, 1); $bed_sizer->AddGrowableRow(0, 1); my $move_button = sub { my ($sizer, $label, $icon, $bold, $pos, $handler) = @_; my $btn = Wx::Button->new($self, -1, $label, wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); $btn->SetFont($bold ? $Slic3r::GUI::small_bold_font : $Slic3r::GUI::small_font); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("$icon.png"), wxBITMAP_TYPE_PNG)); $btn->SetBitmapPosition($pos); } EVT_BUTTON($self, $btn, $handler); $sizer->Add($btn, 1, wxEXPAND | wxALL, 0); }; # Y buttons { my $sizer = Wx::BoxSizer->new(wxVERTICAL); for my $d (qw(+10 +1 +0.1)) { $move_button->($sizer, $d, 'arrow_up', 0, wxLEFT, sub { $self->rel_move('Y', $d) }); } $move_button->($sizer, 'Y', 'house', 1, wxLEFT, sub { $self->home('Y') }); for my $d (qw(-0.1 -1 -10)) { $move_button->($sizer, $d, 'arrow_down', 0, wxLEFT, sub { $self->rel_move('Y', $d) }); }; $bed_sizer->Add($sizer, 1, wxEXPAND, 0); } # Bed canvas { my $bed_shape = $config->bed_shape; $self->{canvas} = my $canvas = Slic3r::GUI::2DBed->new($self, $bed_shape); $canvas->interactive(1); $canvas->on_move(sub { my ($pos) = @_; if (!($self->x_homed && $self->y_homed)) { Slic3r::GUI::show_error($self, "Please home both X and Y before moving."); return ; } # delete any pending commands to get a smoother movement $self->sender->purge_queue(1); $self->abs_xy_move($pos); }); $bed_sizer->Add($canvas, 0, wxEXPAND | wxRIGHT, 3); } # Z buttons { my $sizer = Wx::BoxSizer->new(wxVERTICAL); for my $d (qw(+10 +1 +0.1)) { $move_button->($sizer, $d, 'arrow_up', 0, wxLEFT, sub { $self->rel_move('Z', $d) }); } $move_button->($sizer, 'Z', 'house', 1, wxLEFT, sub { $self->home('Z') }); for my $d (qw(-0.1 -1 -10)) { $move_button->($sizer, $d, 'arrow_down', 0, wxLEFT, sub { $self->rel_move('Z', $d) }); }; $bed_sizer->Add($sizer, 1, wxEXPAND, 0); } # XYZ home button $move_button->($bed_sizer, 'XYZ', 'house', 1, wxTOP, sub { $self->home(undef) }); # X buttons { my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); for my $d (qw(-10 -1 -0.1)) { $move_button->($sizer, $d, 'arrow_left', 0, wxTOP, sub { $self->rel_move('X', $d) }); } $move_button->($sizer, 'X', 'house', 1, wxTOP, sub { $self->home('X') }); for my $d (qw(+0.1 +1 +10)) { $move_button->($sizer, $d, 'arrow_right', 0, wxTOP, sub { $self->rel_move('X', $d) }); } $bed_sizer->Add($sizer, 1, wxEXPAND, 0); } my $optgroup = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Manual motion settings', on_change => sub { my ($opt_id, $value) = @_; $self->config2->{$opt_id} = $value; }, ); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Speed (mm/s)', ); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'xy_travel_speed', type => 'f', label => 'X/Y', tooltip => '', default => $self->config2->{xy_travel_speed}, )); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'z_travel_speed', type => 'f', label => 'Z', tooltip => '', default => $self->config2->{z_travel_speed}, )); $optgroup->append_line($line); } my $left_sizer = Wx::BoxSizer->new(wxVERTICAL); $left_sizer->Add($bed_sizer, 1, wxEXPAND | wxALL, 10); $left_sizer->Add($optgroup->sizer, 0, wxEXPAND | wxALL, 10); my $right_sizer = Wx::BoxSizer->new(wxVERTICAL); { my $optgroup = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Temperature', on_change => sub { my ($opt_id, $value) = @_; $self->config2->{$opt_id} = $value; }, ); $right_sizer->Add($optgroup->sizer, 0, wxEXPAND | wxALL, 10); { my $line = $optgroup->create_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'temperature', type => 's', label => 'Extruder', default => '', sidetext => '°C', default => $self->config2->{temperature}, )); $line->append_button("Set", "tick.png", sub { if (!looks_like_number($self->config2->{temperature})) { Slic3r::GUI::show_error($self, "Invalid temperature."); return; } my $cmd = $self->writer->set_temperature($self->config2->{temperature}); $self->GetParent->append_to_log(">> $cmd\n"); $self->sender->send($cmd, 1); }); $optgroup->append_line($line); } { my $line = $optgroup->create_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'bed_temperature', type => 's', label => 'Bed', default => '', sidetext => '°C', default => $self->config2->{bed_temperature}, )); $line->append_button("Set", "tick.png", sub { if (!looks_like_number($self->config2->{bed_temperature})) { Slic3r::GUI::show_error($self, "Invalid bed temperature."); return; } my $cmd = $self->writer->set_bed_temperature($self->config2->{bed_temperature}); $self->GetParent->append_to_log(">> $cmd\n"); $self->sender->send($cmd, 1); }); $optgroup->append_line($line); } } { my $box = Wx::StaticBox->new($self, -1, "Send manual command"); my $sbsizer = Wx::StaticBoxSizer->new($box, wxVERTICAL); $right_sizer->Add($sbsizer, 1, wxEXPAND | wxALL, 10); my $cmd_sizer = Wx::BoxSizer->new(wxHORIZONTAL); my $cmd_textctrl = Wx::TextCtrl->new($self, -1, '', wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); $cmd_sizer->Add($cmd_textctrl, 1, wxEXPAND, 0); my $btn = Wx::Button->new($self, -1, "Send", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); $btn->SetFont($Slic3r::GUI::small_font); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("cog_go.png"), wxBITMAP_TYPE_PNG)); } $cmd_sizer->Add($btn, 0, wxEXPAND | wxLEFT, 5); my $do_send = sub { my $cmd = $cmd_textctrl->GetValue; return if $cmd eq ''; $self->GetParent->append_to_log(">> $cmd\n"); $self->sender->send($cmd, 1); $cmd_textctrl->SetValue(''); }; EVT_BUTTON($self, $btn, $do_send); EVT_TEXT_ENTER($self, $cmd_textctrl, $do_send); $sbsizer->Add($cmd_sizer, 0, wxEXPAND | wxTOP, 5); } my $main_sizer = Wx::BoxSizer->new(wxHORIZONTAL); $main_sizer->Add($left_sizer, 1, wxEXPAND | wxRIGHT, 10); $main_sizer->Add($right_sizer, 0, wxEXPAND, 0); $self->SetSizer($main_sizer); $self->SetMinSize($self->GetSize); $main_sizer->SetSizeHints($self); $self->Layout; # needed to actually free memory EVT_CLOSE($self, sub { $self->EndModal(wxID_OK); $self->Destroy; }); return $self; } sub abs_xy_move { my ($self, $pos) = @_; $self->sender->send("G90", 1); # set absolute positioning $self->sender->send(sprintf("G1 X%.1f Y%.1f F%d", @$pos, $self->config2->{xy_travel_speed}*60), 1); $self->{canvas}->set_pos($pos); } sub rel_move { my ($self, $axis, $distance) = @_; my $speed = ($axis eq 'Z') ? $self->config2->{z_travel_speed} : $self->config2->{xy_travel_speed}; $self->sender->send("G91", 1); # set relative positioning $self->sender->send(sprintf("G1 %s%.1f F%d", $axis, $distance, $speed*60), 1); $self->sender->send("G90", 1); # set absolute positioning if (my $pos = $self->{canvas}->pos) { if ($axis eq 'X') { $pos->translate($distance, 0); } elsif ($axis eq 'Y') { $pos->translate(0, $distance); } $self->{canvas}->set_pos($pos); } } sub home { my ($self, $axis) = @_; $axis //= ''; $self->sender->send(sprintf("G28 %s", $axis), 1); $self->{canvas}->set_pos(undef); $self->x_homed(1) if $axis eq 'X'; $self->y_homed(1) if $axis eq 'Y'; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Controller/PrinterPanel.pm000066400000000000000000000665231327442435500223140ustar00rootroot00000000000000package Slic3r::GUI::Controller::PrinterPanel; use strict; use warnings; use utf8; use List::Util qw(first); use Wx qw(wxTheApp :panel :id :misc :sizer :button :bitmap :window :gauge :timer :textctrl :font :systemsettings); use Wx::Event qw(EVT_BUTTON EVT_MOUSEWHEEL EVT_TIMER EVT_SCROLLWIN); use base qw(Wx::Panel Class::Accessor); __PACKAGE__->mk_accessors(qw(printer_name config sender jobs printing status_timer temp_timer manual_control_config)); use constant CONNECTION_TIMEOUT => 3; # seconds use constant STATUS_TIMER_INTERVAL => 1000; # milliseconds use constant TEMP_TIMER_INTERVAL => 5000; # milliseconds sub new { my ($class, $parent, $preset) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, [500, 250]); $self->printer_name($preset->name); $self->config($preset->dirty_config); $self->manual_control_config({ xy_travel_speed => 130, z_travel_speed => 10, temperature => '', bed_temperature => '', }); $self->jobs([]); # set up the timer that polls for updates { my $timer_id = &Wx::NewId(); $self->status_timer(Wx::Timer->new($self, $timer_id)); EVT_TIMER($self, $timer_id, sub { my ($self, $event) = @_; if ($self->printing) { my $queue_size = $self->sender->queue_size; $self->{gauge}->SetValue($self->{gauge}->GetRange - $queue_size); if ($queue_size == 0) { $self->print_completed; } } $self->append_to_log("$_\n") for @{$self->sender->purge_log}; { my $temp = $self->sender->getT; if ($temp eq '') { $self->{temp_panel}->Hide; } else { if (!$self->{temp_panel}->IsShown) { $self->{temp_panel}->Show; $self->Layout; } $self->{temp_text}->SetLabel($temp . "°C"); $temp = $self->sender->getB; if ($temp eq '') { $self->{bed_temp_text}->SetLabel('n.a.'); } else { $self->{bed_temp_text}->SetLabel($temp . "°C"); } } } }); } # set up the timer that sends temperature requests # (responses are handled by status_timer) { my $timer_id = &Wx::NewId(); $self->temp_timer(Wx::Timer->new($self, $timer_id)); EVT_TIMER($self, $timer_id, sub { my ($self, $event) = @_; $self->sender->send("M105", 1); # send it through priority queue }); } my $box = Wx::StaticBox->new($self, -1, ""); my $sizer = Wx::StaticBoxSizer->new($box, wxHORIZONTAL); my $left_sizer = Wx::BoxSizer->new(wxVERTICAL); # printer name { my $text = Wx::StaticText->new($self, -1, $self->printer_name, wxDefaultPosition, [220,-1]); my $font = $text->GetFont; $font->SetPointSize(20); $text->SetFont($font); $left_sizer->Add($text, 0, wxEXPAND, 0); } # connection info { my $conn_sizer = Wx::FlexGridSizer->new(2, 2, 1, 0); $conn_sizer->SetFlexibleDirection(wxHORIZONTAL); $conn_sizer->AddGrowableCol(1, 1); $left_sizer->Add($conn_sizer, 0, wxEXPAND | wxTOP, 5); { my $text = Wx::StaticText->new($self, -1, "Port:", wxDefaultPosition, wxDefaultSize); $text->SetFont($Slic3r::GUI::small_font); $conn_sizer->Add($text, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); } my $serial_port_sizer = Wx::BoxSizer->new(wxHORIZONTAL); { $self->{serial_port_combobox} = Wx::ComboBox->new($self, -1, $self->config->serial_port, wxDefaultPosition, wxDefaultSize, []); $self->{serial_port_combobox}->SetFont($Slic3r::GUI::small_font); $self->update_serial_ports; $serial_port_sizer->Add($self->{serial_port_combobox}, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 1); } { $self->{btn_rescan_serial} = my $btn = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new($Slic3r::var->("arrow_rotate_clockwise.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, &Wx::wxBORDER_NONE); $btn->SetToolTipString("Rescan serial ports") if $btn->can('SetToolTipString'); $serial_port_sizer->Add($btn, 0, wxALIGN_CENTER_VERTICAL, 0); EVT_BUTTON($self, $btn, sub { $self->update_serial_ports }); } $conn_sizer->Add($serial_port_sizer, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); { my $text = Wx::StaticText->new($self, -1, "Speed:", wxDefaultPosition, wxDefaultSize); $text->SetFont($Slic3r::GUI::small_font); $conn_sizer->Add($text, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); } my $serial_speed_sizer = Wx::BoxSizer->new(wxHORIZONTAL); { $self->{serial_speed_combobox} = Wx::ComboBox->new($self, -1, $self->config->serial_speed, wxDefaultPosition, wxDefaultSize, ["57600", "115200", "250000"]); $self->{serial_speed_combobox}->SetFont($Slic3r::GUI::small_font); $serial_speed_sizer->Add($self->{serial_speed_combobox}, 0, wxALIGN_CENTER_VERTICAL, 0); } { $self->{btn_disconnect} = my $btn = Wx::Button->new($self, -1, "Disconnect", wxDefaultPosition, wxDefaultSize); $btn->SetFont($Slic3r::GUI::small_font); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("delete.png"), wxBITMAP_TYPE_PNG)); } $serial_speed_sizer->Add($btn, 0, wxLEFT, 5); EVT_BUTTON($self, $btn, \&disconnect); } $conn_sizer->Add($serial_speed_sizer, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); } # buttons { $self->{btn_connect} = my $btn = Wx::Button->new($self, -1, "Connect to printer", wxDefaultPosition, [-1, 40]); my $font = $btn->GetFont; $font->SetPointSize($font->GetPointSize + 2); $btn->SetFont($font); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("arrow_up.png"), wxBITMAP_TYPE_PNG)); } $left_sizer->Add($btn, 0, wxTOP, 15); EVT_BUTTON($self, $btn, \&connect); } # print progress bar { my $gauge = $self->{gauge} = Wx::Gauge->new($self, wxGA_HORIZONTAL, 100, wxDefaultPosition, wxDefaultSize); $left_sizer->Add($self->{gauge}, 0, wxEXPAND | wxTOP, 15); $gauge->Hide; } # status $self->{status_text} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, [200,-1]); $left_sizer->Add($self->{status_text}, 1, wxEXPAND | wxTOP, 15); # manual control { $self->{btn_manual_control} = my $btn = Wx::Button->new($self, -1, "Manual control", wxDefaultPosition, wxDefaultSize); $btn->SetFont($Slic3r::GUI::small_font); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("cog.png"), wxBITMAP_TYPE_PNG)); } $btn->Hide; $left_sizer->Add($btn, 0, wxTOP, 15); EVT_BUTTON($self, $btn, sub { $self->{manual_control_dialog} = my $dlg = Slic3r::GUI::Controller::ManualControlDialog->new ($self, $self->config, $self->sender, $self->manual_control_config); $dlg->ShowModal; undef $self->{manual_control_dialog}; }); } # temperature { my $temp_panel = $self->{temp_panel} = Wx::Panel->new($self, -1); my $temp_sizer = Wx::BoxSizer->new(wxHORIZONTAL); my $temp_font = Wx::Font->new($Slic3r::GUI::small_font); $temp_font->SetWeight(wxFONTWEIGHT_BOLD); { my $text = Wx::StaticText->new($temp_panel, -1, "Temperature:", wxDefaultPosition, wxDefaultSize); $text->SetFont($Slic3r::GUI::small_font); $temp_sizer->Add($text, 0, wxALIGN_CENTER_VERTICAL); $self->{temp_text} = Wx::StaticText->new($temp_panel, -1, "", wxDefaultPosition, wxDefaultSize); $self->{temp_text}->SetFont($temp_font); $self->{temp_text}->SetForegroundColour(Wx::wxRED); $temp_sizer->Add($self->{temp_text}, 1, wxALIGN_CENTER_VERTICAL); } { my $text = Wx::StaticText->new($temp_panel, -1, "Bed:", wxDefaultPosition, wxDefaultSize); $text->SetFont($Slic3r::GUI::small_font); $temp_sizer->Add($text, 0, wxALIGN_CENTER_VERTICAL); $self->{bed_temp_text} = Wx::StaticText->new($temp_panel, -1, "", wxDefaultPosition, wxDefaultSize); $self->{bed_temp_text}->SetFont($temp_font); $self->{bed_temp_text}->SetForegroundColour(Wx::wxRED); $temp_sizer->Add($self->{bed_temp_text}, 1, wxALIGN_CENTER_VERTICAL); } $temp_panel->SetSizer($temp_sizer); $temp_panel->Hide; $left_sizer->Add($temp_panel, 0, wxEXPAND | wxTOP | wxBOTTOM, 4); } # print jobs panel $self->{print_jobs_sizer} = my $print_jobs_sizer = Wx::BoxSizer->new(wxVERTICAL); { my $text = Wx::StaticText->new($self, -1, "Queue:", wxDefaultPosition, wxDefaultSize); $text->SetFont($Slic3r::GUI::small_font); $print_jobs_sizer->Add($text, 0, wxEXPAND, 0); $self->{jobs_panel} = Wx::ScrolledWindow->new($self, -1, wxDefaultPosition, wxDefaultSize, wxVSCROLL | wxBORDER_NONE); $self->{jobs_panel}->SetScrollbars(0, 1, 0, 1); $self->{jobs_panel_sizer} = Wx::BoxSizer->new(wxVERTICAL); $self->{jobs_panel}->SetSizer($self->{jobs_panel_sizer}); $print_jobs_sizer->Add($self->{jobs_panel}, 1, wxEXPAND, 0); # TODO: fix this. We're trying to pass the scroll event to the parent but it # doesn't work. EVT_SCROLLWIN($self->{jobs_panel}, sub { my ($panel, $event) = @_; my $controller = $self->GetParent; my $new_event = Wx::ScrollWinEvent->new( $event->GetEventType, $event->GetPosition, $event->GetOrientation, ); $controller->ProcessEvent($new_event); }) if 0; } my $log_sizer = Wx::BoxSizer->new(wxVERTICAL); { my $text = Wx::StaticText->new($self, -1, "Log:", wxDefaultPosition, wxDefaultSize); $text->SetFont($Slic3r::GUI::small_font); $log_sizer->Add($text, 0, wxEXPAND, 0); my $log = $self->{log_textctrl} = Wx::TextCtrl->new($self, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxBORDER_NONE); $log->SetBackgroundColour($self->GetBackgroundColour); $log->SetFont($Slic3r::GUI::small_font); $log->SetEditable(0); $log_sizer->Add($self->{log_textctrl}, 1, wxEXPAND, 0); } $sizer->Add($left_sizer, 0, wxEXPAND | wxALL, 0); $sizer->Add($print_jobs_sizer, 2, wxEXPAND | wxALL, 0); $sizer->Add($log_sizer, 1, wxEXPAND | wxLEFT, 15); $self->SetSizer($sizer); $self->SetMinSize($self->GetSize); $self->_update_connection_controls; return $self; } sub append_to_log { my ($self, $text) = @_; $self->{log_textctrl}->AppendText($text); } sub is_connected { my ($self) = @_; return $self->sender && $self->sender->is_connected; } sub _update_connection_controls { my ($self) = @_; $self->{btn_connect}->Show; $self->{btn_disconnect}->Hide; $self->{serial_port_combobox}->Enable; $self->{serial_speed_combobox}->Enable; $self->{btn_rescan_serial}->Enable; $self->{btn_manual_control}->Hide; $self->{btn_manual_control}->Disable; if ($self->is_connected) { $self->{btn_connect}->Hide; $self->{btn_manual_control}->Show; if (!$self->printing || $self->printing->paused) { $self->{btn_disconnect}->Show; $self->{btn_manual_control}->Enable; } $self->{serial_port_combobox}->Disable; $self->{serial_speed_combobox}->Disable; $self->{btn_rescan_serial}->Disable; } $self->Layout; } sub set_status { my ($self, $status) = @_; $self->{status_text}->SetLabel($status); $self->{status_text}->Wrap($self->{status_text}->GetSize->GetWidth); $self->{status_text}->Refresh; $self->Layout; } sub connect { my ($self) = @_; return if $self->is_connected; $self->set_status("Connecting..."); $self->sender(Slic3r::GCode::Sender->new); my $res = $self->sender->connect( $self->{serial_port_combobox}->GetValue, $self->{serial_speed_combobox}->GetValue, ); if (!$res) { $self->set_status("Connection failed. Check serial port and speed."); } else { if ($self->sender->wait_connected) { $self->set_status("Printer is online. You can now start printing from the queue on the right."); $self->status_timer->Start(STATUS_TIMER_INTERVAL, wxTIMER_CONTINUOUS); $self->temp_timer->Start(TEMP_TIMER_INTERVAL, wxTIMER_CONTINUOUS); # request temperature now, without waiting for the timer $self->sender->send("M105", 1); # Update the printer preset with the new connection info { my $preset = first { $_->name eq $self->printer_name } @{wxTheApp->presets->{printer}}; if ($preset) { $preset->load_config; $preset->_dirty_config->set('serial_port', $self->{serial_port_combobox}->GetValue); $preset->_dirty_config->set('serial_speed', $self->{serial_speed_combobox}->GetValue); $preset->save([ 'serial_port', 'serial_speed' ]); } } } else { $self->set_status("Connection failed. Check serial port and speed."); } } $self->_update_connection_controls; $self->reload_jobs; } sub disconnect { my ($self) = @_; $self->status_timer->Stop; $self->temp_timer->Stop; return if !$self->is_connected; $self->printing->printing(0) if $self->printing; $self->printing(undef); $self->{gauge}->Hide; $self->{temp_panel}->Hide; $self->sender->disconnect; $self->set_status(""); $self->_update_connection_controls; $self->reload_jobs; } sub update_serial_ports { my ($self) = @_; my $cb = $self->{serial_port_combobox}; my $current = $cb->GetValue; $cb->Clear; $cb->Append($_) for wxTheApp->scan_serial_ports; $cb->SetValue($current); } sub load_print_job { my ($self, $gcode_file, $filament_stats) = @_; push @{$self->jobs}, my $job = Slic3r::GUI::Controller::PrinterPanel::PrintJob->new( id => time() . $gcode_file . rand(1000), gcode_file => $gcode_file, filament_stats => $filament_stats, ); $self->reload_jobs; return $job; } sub delete_job { my ($self, $job) = @_; $self->jobs([ grep $_->id ne $job->id, @{$self->jobs} ]); $self->reload_jobs; } sub print_job { my ($self, $job) = @_; $self->printing($job); $job->printing(1); $self->reload_jobs; open my $fh, '<', $job->gcode_file; my $line_count = 0; while (my $row = <$fh>) { $self->sender->send($row); $line_count++; } close $fh; $self->_update_connection_controls; $self->{gauge}->SetRange($line_count); $self->{gauge}->SetValue(0); $self->{gauge}->Enable; $self->{gauge}->Show; $self->Layout; $self->set_status('Printing...'); $self->append_to_log(sprintf "=====\n"); $self->append_to_log(sprintf "Printing %s\n", $job->name); $self->append_to_log(sprintf "Print started at %s\n", $self->_timestamp); } sub print_completed { my ($self) = @_; my $job = $self->printing; $self->printing(undef); $job->printing(0); $job->printed(1); $self->_update_connection_controls; $self->{gauge}->Hide; $self->Layout; $self->set_status('Print completed.'); $self->append_to_log(sprintf "Print completed at %s\n", $self->_timestamp); $self->reload_jobs; } sub reload_jobs { my ($self) = @_; # reorder jobs @{$self->jobs} = sort { ($a->printed <=> $b->printed) || ($a->timestamp <=> $b->timestamp) } @{$self->jobs}; # remove all panels foreach my $child ($self->{jobs_panel_sizer}->GetChildren) { my $window = $child->GetWindow; $self->{jobs_panel_sizer}->Detach($window); # now $child does not exist anymore $window->Destroy; } # re-add all panels foreach my $job (@{$self->jobs}) { my $panel = Slic3r::GUI::Controller::PrinterPanel::PrintJobPanel->new($self->{jobs_panel}, $job); $self->{jobs_panel_sizer}->Add($panel, 0, wxEXPAND | wxBOTTOM, 5); $panel->on_delete_job(sub { my ($job) = @_; $self->delete_job($job); }); $panel->on_print_job(sub { my ($job) = @_; $self->print_job($job); }); $panel->on_pause_print(sub { my ($job) = @_; $self->sender->pause_queue; $job->paused(1); $self->reload_jobs; $self->_update_connection_controls; $self->{gauge}->Disable; $self->set_status('Print is paused. Click on Resume to continue.'); }); $panel->on_abort_print(sub { my ($job) = @_; $self->sender->purge_queue; $self->printing(undef); $job->printing(0); $job->paused(0); $self->reload_jobs; $self->_update_connection_controls; $self->{gauge}->Disable; $self->{gauge}->Hide; $self->set_status('Print was aborted.'); $self->append_to_log(sprintf "Print aborted at %s\n", $self->_timestamp); }); $panel->on_resume_print(sub { my ($job) = @_; $self->sender->resume_queue; $job->paused(0); $self->reload_jobs; $self->_update_connection_controls; $self->{gauge}->Enable; $self->set_status('Printing...'); }); $panel->enable_print if $self->is_connected && !$self->printing; EVT_MOUSEWHEEL($panel, sub { my (undef, $event) = @_; Wx::PostEvent($self->{jobs_panel}, $event); $event->Skip; }); } $self->{jobs_panel}->Layout; $self->{print_jobs_sizer}->Layout; } sub _timestamp { my ($self) = @_; my @time = localtime(time); return sprintf '%02d:%02d:%02d', @time[2,1,0]; } package Slic3r::GUI::Controller::PrinterPanel::PrintJob; use Moo; use File::Basename qw(basename); has 'id' => (is => 'ro', required => 1); has 'timestamp' => (is => 'ro', default => sub { time }); has 'gcode_file' => (is => 'ro', required => 1); has 'filament_stats' => (is => 'rw'); has 'printing' => (is => 'rw', default => sub { 0 }); has 'paused' => (is => 'rw', default => sub { 0 }); has 'printed' => (is => 'rw', default => sub { 0 }); sub name { my ($self) = @_; return basename($self->gcode_file); } package Slic3r::GUI::Controller::PrinterPanel::PrintJobPanel; use strict; use warnings; use utf8; use Wx qw(wxTheApp :panel :id :misc :sizer :button :bitmap :font :dialog :icon :timer :colour :brush :pen); use Wx::Event qw(EVT_BUTTON EVT_TIMER EVT_ERASE_BACKGROUND); use base qw(Wx::Panel Class::Accessor); __PACKAGE__->mk_accessors(qw(job on_delete_job on_print_job on_pause_print on_resume_print on_abort_print blink_timer duration queued)); sub new { my ($class, $parent, $job) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize); # Estimate print duration { my $estimator = Slic3r::GCode::TimeEstimator->new; $estimator->parse_file($job->gcode_file); $self->duration($estimator->time); } $self->job($job); $self->queued(scalar localtime); $self->SetBackgroundColour(Wx::SystemSettings::GetColour(Wx::wxSYS_COLOUR_LISTBOX)); { my $white_brush = Wx::Brush->new($self->GetBackgroundColour, wxSOLID); my $pen = Wx::Pen->new(Wx::Colour->new(200,200,200), 1, wxSOLID); EVT_ERASE_BACKGROUND($self, sub { my ($self, $event) = @_; my $dc = $event->GetDC; my $size = $self->GetSize; $dc->SetBrush($white_brush); $dc->SetPen($pen); $dc->DrawRoundedRectangle(0, 0, $size->GetWidth,$size->GetHeight, 6); }); } my $left_sizer = Wx::BoxSizer->new(wxVERTICAL); { $self->{job_name_textctrl} = my $text = Wx::StaticText->new($self, -1, $job->name, wxDefaultPosition, wxDefaultSize); my $font = $text->GetFont; $font->SetWeight(wxFONTWEIGHT_BOLD); $text->SetFont($font); if ($job->printed) { $text->SetForegroundColour($Slic3r::GUI::grey); } $text->SetToolTipString("Queued on " . $self->queued) if $text->can('SetToolTipString'); $left_sizer->Add($text, 0, wxEXPAND, 0); } { my $stats = join "\n", map "$_ (" . sprintf("%.2f", $job->filament_stats->{$_}/1000) . "m)", sort keys %{$job->filament_stats}; $stats .= sprintf "\nEstimated time: %d hours and %d minutes", int($self->duration/3600), int($self->duration/60) % 60; my $text = Wx::StaticText->new($self, -1, $stats, wxDefaultPosition, wxDefaultSize); $text->SetFont($Slic3r::GUI::small_font); if ($job->printed && !$job->printing) { $text->SetForegroundColour($Slic3r::GUI::grey); } $left_sizer->Add($text, 0, wxEXPAND | wxTOP, 6); } my $buttons_sizer = Wx::BoxSizer->new(wxVERTICAL); my $button_style = Wx::wxBORDER_NONE | wxBU_EXACTFIT; { my $btn = $self->{btn_delete} = Wx::Button->new($self, -1, 'Delete', wxDefaultPosition, wxDefaultSize, $button_style); $btn->SetToolTipString("Delete this job from print queue") if $btn->can('SetToolTipString'); $btn->SetFont($Slic3r::GUI::small_font); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("delete.png"), wxBITMAP_TYPE_PNG)); } if ($job->printing) { $btn->Hide; } $buttons_sizer->Add($btn, 0, wxBOTTOM, 2); EVT_BUTTON($self, $btn, sub { my $res = Wx::MessageDialog->new($self, "Are you sure you want to delete this print job?", 'Delete Job', wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION)->ShowModal; return unless $res == wxID_YES; wxTheApp->CallAfter(sub { $self->on_delete_job->($job); }); }); } { my $label = $job->printed ? 'Print Again' : 'Print This'; my $btn = $self->{btn_print} = Wx::Button->new($self, -1, $label, wxDefaultPosition, wxDefaultSize, $button_style); $btn->SetFont($Slic3r::GUI::small_bold_font); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("control_play.png"), wxBITMAP_TYPE_PNG)); $btn->SetBitmapCurrent(Wx::Bitmap->new($Slic3r::var->("control_play_blue.png"), wxBITMAP_TYPE_PNG)); #$btn->SetBitmapPosition(wxRIGHT); } $btn->Hide; $buttons_sizer->Add($btn, 0, wxBOTTOM, 2); EVT_BUTTON($self, $btn, sub { wxTheApp->CallAfter(sub { $self->on_print_job->($job); }); }); } { my $btn = $self->{btn_pause} = Wx::Button->new($self, -1, "Pause", wxDefaultPosition, wxDefaultSize, $button_style); $btn->SetFont($Slic3r::GUI::small_font); if (!$job->printing || $job->paused) { $btn->Hide; } if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("control_pause.png"), wxBITMAP_TYPE_PNG)); $btn->SetBitmapCurrent(Wx::Bitmap->new($Slic3r::var->("control_pause_blue.png"), wxBITMAP_TYPE_PNG)); } $buttons_sizer->Add($btn, 0, wxBOTTOM, 2); EVT_BUTTON($self, $btn, sub { wxTheApp->CallAfter(sub { $self->on_pause_print->($job); }); }); } { my $btn = $self->{btn_resume} = Wx::Button->new($self, -1, "Resume", wxDefaultPosition, wxDefaultSize, $button_style); $btn->SetFont($Slic3r::GUI::small_font); if (!$job->printing || !$job->paused) { $btn->Hide; } if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("control_play.png"), wxBITMAP_TYPE_PNG)); $btn->SetBitmapCurrent(Wx::Bitmap->new($Slic3r::var->("control_play_blue.png"), wxBITMAP_TYPE_PNG)); } $buttons_sizer->Add($btn, 0, wxBOTTOM, 2); EVT_BUTTON($self, $btn, sub { wxTheApp->CallAfter(sub { $self->on_resume_print->($job); }); }); } { my $btn = $self->{btn_abort} = Wx::Button->new($self, -1, "Abort", wxDefaultPosition, wxDefaultSize, $button_style); $btn->SetFont($Slic3r::GUI::small_font); if (!$job->printing) { $btn->Hide; } if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("control_stop.png"), wxBITMAP_TYPE_PNG)); $btn->SetBitmapCurrent(Wx::Bitmap->new($Slic3r::var->("control_stop_blue.png"), wxBITMAP_TYPE_PNG)); } $buttons_sizer->Add($btn, 0, wxBOTTOM, 2); EVT_BUTTON($self, $btn, sub { wxTheApp->CallAfter(sub { $self->on_abort_print->($job); }); }); } my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $sizer->Add($left_sizer, 1, wxEXPAND | wxALL, 6); $sizer->Add($buttons_sizer, 0, wxEXPAND | wxALL, 6); $self->SetSizer($sizer); # set-up the timer that changes the job name color while printing if ($self->job->printing && !$self->job->paused) { my $timer_id = &Wx::NewId(); $self->blink_timer(Wx::Timer->new($self, $timer_id)); my $blink = 0; # closure my $colour = Wx::Colour->new(0, 190, 0); EVT_TIMER($self, $timer_id, sub { my ($self, $event) = @_; $self->{job_name_textctrl}->SetForegroundColour($blink ? Wx::wxBLACK : $colour); $blink = !$blink; }); $self->blink_timer->Start(1000, wxTIMER_CONTINUOUS); } return $self; } sub enable_print { my ($self) = @_; if (!$self->job->printing) { $self->{btn_print}->Show; } $self->Layout; } sub Destroy { my ($self) = @_; # There's a gap between the time Perl destroys the wxPanel object and # the blink_timer member, so the wxTimer might still fire an event which # isn't handled properly, causing a crash. So we ensure that blink_timer # is stopped before we destroy the wxPanel. $self->blink_timer->Stop if $self->blink_timer; return $self->SUPER::Destroy; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/MainFrame.pm000066400000000000000000000746511327442435500174260ustar00rootroot00000000000000# The main frame, the parent of all. package Slic3r::GUI::MainFrame; use strict; use warnings; use utf8; use File::Basename qw(basename dirname); use List::Util qw(min); use Slic3r::Geometry qw(X Y Z); use Wx qw(:frame :bitmap :id :misc :panel :sizer :menu :dialog :filedialog :font :icon :aui wxTheApp); use Wx::AUI; use Wx::Event qw(EVT_CLOSE EVT_AUINOTEBOOK_PAGE_CHANGED EVT_AUINOTEBOOK_PAGE_CLOSE); use base 'Wx::Frame'; our $qs_last_input_file; our $qs_last_output_file; our $last_config; sub new { my ($class) = @_; my $self = $class->SUPER::new(undef, -1, 'Slic3r', wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE); if ($^O eq 'MSWin32') { $self->SetIcon(Wx::Icon->new($Slic3r::var->("Slic3r.ico"), wxBITMAP_TYPE_ICO)); } else { $self->SetIcon(Wx::Icon->new($Slic3r::var->("Slic3r_128px.png"), wxBITMAP_TYPE_PNG)); } $self->{loaded} = 0; $self->{preset_editor_tabs} = {}; # group => panel # initialize tabpanel and menubar $self->_init_tabpanel; $self->_init_menubar; # set default tooltip timer in msec # SetAutoPop supposedly accepts long integers but some bug doesn't allow for larger values # (SetAutoPop is not available on GTK.) eval { Wx::ToolTip::SetAutoPop(32767) }; # initialize status bar $self->{statusbar} = Slic3r::GUI::ProgressStatusBar->new($self, -1); $self->{statusbar}->SetStatusText("Version $Slic3r::VERSION - Remember to check for updates at http://slic3r.org/"); $self->SetStatusBar($self->{statusbar}); $self->{loaded} = 1; # initialize layout { my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($self->{tabpanel}, 1, wxEXPAND); $sizer->SetSizeHints($self); $self->SetSizer($sizer); $self->Fit; $self->SetMinSize([760, 490]); $self->SetSize($self->GetMinSize); wxTheApp->restore_window_pos($self, "main_frame"); $self->Show; $self->Layout; } # declare events EVT_CLOSE($self, sub { my (undef, $event) = @_; if ($event->CanVeto) { if (!$self->{plater}->prompt_unsaved_changes) { $event->Veto; return; } if ($self->{controller} && $self->{controller}->printing) { my $confirm = Wx::MessageDialog->new($self, "You are currently printing. Do you want to stop printing and continue anyway?", 'Unfinished Print', wxICON_QUESTION | wxYES_NO | wxNO_DEFAULT); if ($confirm->ShowModal == wxID_NO) { $event->Veto; return; } } } # save window size wxTheApp->save_window_pos($self, "main_frame"); # propagate event $event->Skip; }); return $self; } sub _init_tabpanel { my ($self) = @_; $self->{tabpanel} = my $panel = Wx::AuiNotebook->new($self, -1, wxDefaultPosition, wxDefaultSize, wxAUI_NB_TOP); EVT_AUINOTEBOOK_PAGE_CHANGED($self, $self->{tabpanel}, sub { my $panel = $self->{tabpanel}->GetPage($self->{tabpanel}->GetSelection); $panel->OnActivate if $panel->can('OnActivate'); if ($self->{tabpanel}->GetSelection > 1) { $self->{tabpanel}->SetWindowStyle($self->{tabpanel}->GetWindowStyleFlag | wxAUI_NB_CLOSE_ON_ACTIVE_TAB); } elsif(($Slic3r::GUI::Settings->{_}{show_host} == 0) && ($self->{tabpanel}->GetSelection == 1)){ $self->{tabpanel}->SetWindowStyle($self->{tabpanel}->GetWindowStyleFlag | wxAUI_NB_CLOSE_ON_ACTIVE_TAB); } else { $self->{tabpanel}->SetWindowStyle($self->{tabpanel}->GetWindowStyleFlag & ~wxAUI_NB_CLOSE_ON_ACTIVE_TAB); } }); EVT_AUINOTEBOOK_PAGE_CLOSE($self, $self->{tabpanel}, sub { my $panel = $self->{tabpanel}->GetPage($self->{tabpanel}->GetSelection); if ($panel->isa('Slic3r::GUI::PresetEditor')) { delete $self->{preset_editor_tabs}{$panel->name}; } wxTheApp->CallAfter(sub { $self->{tabpanel}->SetSelection(0); }); }); $panel->AddPage($self->{plater} = Slic3r::GUI::Plater->new($panel), "Plater"); $panel->AddPage($self->{controller} = Slic3r::GUI::Controller->new($panel), "Controller") if ($Slic3r::GUI::Settings->{_}{show_host}); } sub _init_menubar { my ($self) = @_; # File menu my $fileMenu = Wx::Menu->new; { wxTheApp->append_menu_item($fileMenu, "Open STL/OBJ/AMF/3MF…\tCtrl+O", 'Open a model', sub { $self->{plater}->add if $self->{plater}; }, undef, 'brick_add.png'); wxTheApp->append_menu_item($fileMenu, "Open 2.5D TIN mesh…", 'Import a 2.5D TIN mesh', sub { $self->{plater}->add_tin if $self->{plater}; }, undef, 'map_add.png'); $fileMenu->AppendSeparator(); wxTheApp->append_menu_item($fileMenu, "&Load Config…\tCtrl+L", 'Load exported configuration file', sub { $self->load_config_file; }, undef, 'plugin_add.png'); wxTheApp->append_menu_item($fileMenu, "&Export Config…\tCtrl+E", 'Export current configuration to file', sub { $self->export_config; }, undef, 'plugin_go.png'); wxTheApp->append_menu_item($fileMenu, "&Load Config Bundle…", 'Load presets from a bundle', sub { $self->load_configbundle; }, undef, 'lorry_add.png'); wxTheApp->append_menu_item($fileMenu, "&Export Config Bundle…", 'Export all presets to file', sub { $self->export_configbundle; }, undef, 'lorry_go.png'); wxTheApp->append_menu_item($fileMenu, "&Import Config from GCode-File…", 'Load presets from a created GCode-File', sub { $self->import_fromGCode; }, undef, 'lorry_import.png'); $fileMenu->AppendSeparator(); my $repeat; wxTheApp->append_menu_item($fileMenu, "Q&uick Slice…\tCtrl+U", 'Slice file', sub { wxTheApp->CallAfter(sub { $self->quick_slice; $repeat->Enable(defined $Slic3r::GUI::MainFrame::last_input_file); }); }, undef, 'cog_go.png'); wxTheApp->append_menu_item($fileMenu, "Quick Slice and Save &As…\tCtrl+Alt+U", 'Slice file and save as', sub { wxTheApp->CallAfter(sub { $self->quick_slice(save_as => 1); $repeat->Enable(defined $Slic3r::GUI::MainFrame::last_input_file); }); }, undef, 'cog_go.png'); $repeat = wxTheApp->append_menu_item($fileMenu, "&Repeat Last Quick Slice\tCtrl+Shift+U", 'Repeat last quick slice', sub { wxTheApp->CallAfter(sub { $self->quick_slice(reslice => 1); }); }, undef, 'cog_go.png'); $repeat->Enable(0); $fileMenu->AppendSeparator(); wxTheApp->append_menu_item($fileMenu, "Slice to SV&G…\tCtrl+G", 'Slice file to SVG', sub { $self->quick_slice(save_as => 1, export_svg => 1); }, undef, 'shape_handles.png'); $fileMenu->AppendSeparator(); wxTheApp->append_menu_item($fileMenu, "Repair STL file…", 'Automatically repair an STL file', sub { $self->repair_stl; }, undef, 'wrench.png'); $fileMenu->AppendSeparator(); # Cmd+, is standard on OS X - what about other operating systems? wxTheApp->append_menu_item($fileMenu, "Preferences…\tCtrl+,", 'Application preferences', sub { Slic3r::GUI::Preferences->new($self)->ShowModal; }, wxID_PREFERENCES); $fileMenu->AppendSeparator(); wxTheApp->append_menu_item($fileMenu, "&Quit", 'Quit Slic3r', sub { $self->Close(0); }, wxID_EXIT); } # Plater menu { my $plater = $self->{plater}; $self->{plater_menu} = Wx::Menu->new; { my $selectMenu = $self->{plater_select_menu} = Wx::Menu->new; wxTheApp->append_submenu($self->{plater_menu}, "Select", 'Select an object in the plater', $selectMenu, undef, 'brick.png'); } wxTheApp->append_menu_item($self->{plater_menu}, "Undo\tCtrl+Z", 'Undo', sub { $plater->undo; }, undef, 'arrow_undo.png'); wxTheApp->append_menu_item($self->{plater_menu}, "Redo\tCtrl+Shift+Z", 'Redo', sub { $plater->redo; }, undef, 'arrow_redo.png'); wxTheApp->append_menu_item($self->{plater_menu}, "Select Next Object\tCtrl+Right", 'Select Next Object in the plater', sub { $plater->select_next; }, undef, 'arrow_right.png'); wxTheApp->append_menu_item($self->{plater_menu}, "Select Prev Object\tCtrl+Left", 'Select Previous Object in the plater', sub { $plater->select_prev; }, undef, 'arrow_left.png'); wxTheApp->append_menu_item($self->{plater_menu}, "Zoom In\tCtrl+up", 'Zoom In', sub { $self->{plater}->zoom('in') }, undef, 'zoom_in.png'); wxTheApp->append_menu_item($self->{plater_menu}, "Zoom Out\tCtrl+down", 'Zoom Out', sub { $self->{plater}->zoom('out') }, undef, 'zoom_out.png'); $self->{plater_menu}->AppendSeparator(); wxTheApp->append_menu_item($self->{plater_menu}, "Export G-code...", 'Export current plate as G-code', sub { $plater->export_gcode; }, undef, 'cog_go.png'); wxTheApp->append_menu_item($self->{plater_menu}, "Export plate as STL...", 'Export current plate as STL', sub { $plater->export_stl; }, undef, 'brick_go.png'); wxTheApp->append_menu_item($self->{plater_menu}, "Export plate with modifiers as AMF...", 'Export current plate as AMF, including all modifier meshes', sub { $plater->export_amf; }, undef, 'brick_go.png'); wxTheApp->append_menu_item($self->{plater_menu}, "Export plate with modifiers as 3MF...", 'Export current plate as 3MF, including all modifier meshes', sub { $plater->export_tmf; }, undef, 'brick_go.png'); $self->{object_menu} = $self->{plater}->object_menu; $self->on_plater_object_list_changed(0); $self->on_plater_selection_changed(0); } # Settings menu my $settingsMenu = Wx::Menu->new; { wxTheApp->append_menu_item($settingsMenu, "P&rint Settings…\tCtrl+1", 'Show the print settings editor', sub { $self->{plater}->show_preset_editor('print'); }, undef, 'cog.png'); wxTheApp->append_menu_item($settingsMenu, "&Filament Settings…\tCtrl+2", 'Show the filament settings editor', sub { $self->{plater}->show_preset_editor('filament'); }, undef, 'spool.png'); wxTheApp->append_menu_item($settingsMenu, "Print&er Settings…\tCtrl+3", 'Show the printer settings editor', sub { $self->{plater}->show_preset_editor('printer'); }, undef, 'printer_empty.png'); } # View menu { $self->{viewMenu} = Wx::Menu->new; wxTheApp->append_menu_item($self->{viewMenu}, "Top\tCtrl+4" , 'Top View' , sub { $self->select_view('top' ); }); wxTheApp->append_menu_item($self->{viewMenu}, "Bottom\tCtrl+5" , 'Bottom View' , sub { $self->select_view('bottom' ); }); wxTheApp->append_menu_item($self->{viewMenu}, "Left\tCtrl+6" , 'Left View' , sub { $self->select_view('left' ); }); wxTheApp->append_menu_item($self->{viewMenu}, "Right\tCtrl+7" , 'Right View' , sub { $self->select_view('right' ); }); wxTheApp->append_menu_item($self->{viewMenu}, "Front\tCtrl+8" , 'Front View' , sub { $self->select_view('front' ); }); wxTheApp->append_menu_item($self->{viewMenu}, "Back\tCtrl+9" , 'Back View' , sub { $self->select_view('back' ); }); wxTheApp->append_menu_item($self->{viewMenu}, "Diagonal\tCtrl+0", 'Diagonal View', sub { $self->select_view('diagonal'); }); $self->{viewMenu}->AppendSeparator(); $self->{color_toolpaths_by_role} = wxTheApp->append_menu_item($self->{viewMenu}, "Color Toolpaths by Role", 'Color toolpaths according to perimeter/infill/support material', sub { $Slic3r::GUI::Settings->{_}{color_toolpaths_by} = 'role'; wxTheApp->save_settings; $self->{plater}{preview3D}->reload_print; }, undef, undef, wxITEM_RADIO ); $self->{color_toolpaths_by_extruder} = wxTheApp->append_menu_item($self->{viewMenu}, "Color Toolpaths by Filament", 'Color toolpaths using the configured extruder/filament color', sub { $Slic3r::GUI::Settings->{_}{color_toolpaths_by} = 'extruder'; wxTheApp->save_settings; $self->{plater}{preview3D}->reload_print; }, undef, undef, wxITEM_RADIO ); if ($Slic3r::GUI::Settings->{_}{color_toolpaths_by} eq 'role') { $self->{color_toolpaths_by_role}->Check(1); } else { $self->{color_toolpaths_by_extruder}->Check(1); } } # Window menu my $windowMenu = Wx::Menu->new; { wxTheApp->append_menu_item($windowMenu, "&Plater\tCtrl+T", 'Show the plater', sub { $self->select_tab(0); }, undef, 'application_view_tile.png'); wxTheApp->append_menu_item($windowMenu, "&Controller\tCtrl+Y", 'Show the printer controller', sub { $self->select_tab(1); }, undef, 'printer_empty.png'); wxTheApp->append_menu_item($windowMenu, "DLP Projector…\tCtrl+P", 'Open projector window for DLP printing', sub { $self->{plater}->pause_background_process; $self->{slaconfig} = Slic3r::Config->new; Slic3r::GUI::SLAPrintOptions->new($self)->ShowModal; $self->{plater}->resume_background_process; }, undef, 'film.png'); } # Help menu my $helpMenu = Wx::Menu->new; { wxTheApp->append_menu_item($helpMenu, "&Configuration $Slic3r::GUI::ConfigWizard::wizard…", "Run Configuration $Slic3r::GUI::ConfigWizard::wizard", sub { $self->config_wizard; }); $helpMenu->AppendSeparator(); wxTheApp->append_menu_item($helpMenu, "Slic3r &Website", 'Open the Slic3r website in your browser', sub { Wx::LaunchDefaultBrowser('http://slic3r.org/'); }); my $versioncheck = wxTheApp->append_menu_item($helpMenu, "Check for &Updates...", 'Check for new Slic3r versions', sub { wxTheApp->check_version(1); }); $versioncheck->Enable(wxTheApp->have_version_check); wxTheApp->append_menu_item($helpMenu, "Slic3r &Manual", 'Open the Slic3r manual in your browser', sub { Wx::LaunchDefaultBrowser('http://manual.slic3r.org/'); }); $helpMenu->AppendSeparator(); wxTheApp->append_menu_item($helpMenu, "&About Slic3r", 'Show about dialog', sub { wxTheApp->about; }); } # menubar # assign menubar to frame after appending items, otherwise special items # will not be handled correctly { my $menubar = Wx::MenuBar->new; $menubar->Append($fileMenu, "&File"); $menubar->Append($self->{plater_menu}, "&Plater") if $self->{plater_menu}; $menubar->Append($self->{object_menu}, "&Object") if $self->{object_menu}; $menubar->Append($settingsMenu, "&Settings"); $menubar->Append($self->{viewMenu}, "&View") if $self->{viewMenu}; $menubar->Append($windowMenu, "&Window"); $menubar->Append($helpMenu, "&Help"); $self->SetMenuBar($menubar); } } sub is_loaded { my ($self) = @_; return $self->{loaded}; } sub on_undo_redo_stacks_changed { my $self = shift; # Enable undo or redo if they have operations in their stack. $self->{plater_menu}->Enable($self->{plater_menu}->FindItem("Undo\tCtrl+Z"), $#{$self->{plater}->{undo_stack}} < 0 ? 0 : 1); $self->{plater_menu}->Enable( $self->{plater_menu}->FindItem("Redo\tCtrl+Shift+Z"), $#{$self->{plater}->{redo_stack}} < 0 ? 0 : 1); } sub on_plater_object_list_changed { my ($self, $have_objects) = @_; return if !defined $self->{plater_menu}; $self->{plater_menu}->Enable($_->GetId, $have_objects) for $self->{plater_menu}->GetMenuItems; $self->on_undo_redo_stacks_changed; } sub on_plater_selection_changed { my ($self, $have_selection) = @_; return if !defined $self->{object_menu}; $self->{object_menu}->Enable($_->GetId, $have_selection) for $self->{object_menu}->GetMenuItems; $self->on_undo_redo_stacks_changed; } sub quick_slice { my $self = shift; my %params = @_; my $progress_dialog; eval { # validate configuration my $config = $self->{plater}->config; $config->validate; # select input file my $input_file; my $dir = $Slic3r::GUI::Settings->{recent}{skein_directory} || $Slic3r::GUI::Settings->{recent}{config_directory} || ''; if (!$params{reslice}) { my $dialog = Wx::FileDialog->new($self, 'Choose a file to slice (STL/OBJ/AMF/3MF):', $dir, "", &Slic3r::GUI::MODEL_WILDCARD, wxFD_OPEN | wxFD_FILE_MUST_EXIST); if ($dialog->ShowModal != wxID_OK) { $dialog->Destroy; return; } $input_file = Slic3r::decode_path($dialog->GetPaths); $dialog->Destroy; $qs_last_input_file = $input_file unless $params{export_svg}; } else { if (!defined $qs_last_input_file) { Wx::MessageDialog->new($self, "No previously sliced file.", 'Error', wxICON_ERROR | wxOK)->ShowModal(); return; } if (! -e $qs_last_input_file) { Wx::MessageDialog->new($self, "Previously sliced file ($qs_last_input_file) not found.", 'File Not Found', wxICON_ERROR | wxOK)->ShowModal(); return; } $input_file = $qs_last_input_file; } my $input_file_basename = basename($input_file); $Slic3r::GUI::Settings->{recent}{skein_directory} = dirname($input_file); wxTheApp->save_settings; my $print_center; { my $bed_shape = Slic3r::Polygon->new_scale(@{$config->bed_shape}); $print_center = Slic3r::Pointf->new_unscale(@{$bed_shape->bounding_box->center}); } my $sprint = Slic3r::Print::Simple->new( print_center => $print_center, status_cb => sub { my ($percent, $message) = @_; return if &Wx::wxVERSION_STRING !~ / 2\.(8\.|9\.[2-9])/; $progress_dialog->Update($percent, "$message…"); }, ); # keep model around my $model = Slic3r::Model->read_from_file($input_file); $sprint->apply_config($config); $sprint->set_model($model); # FIXME: populate placeholders (preset names etc.) # select output file my $output_file; if ($params{reslice}) { $output_file = $qs_last_output_file if defined $qs_last_output_file; } elsif ($params{save_as}) { $output_file = $sprint->output_filepath; $output_file =~ s/\.gcode$/.svg/i if $params{export_svg}; my $dlg = Wx::FileDialog->new($self, 'Save ' . ($params{export_svg} ? 'SVG' : 'G-code') . ' file as:', wxTheApp->output_path(dirname($output_file)), basename($output_file), $params{export_svg} ? &Slic3r::GUI::FILE_WILDCARDS->{svg} : &Slic3r::GUI::FILE_WILDCARDS->{gcode}, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if ($dlg->ShowModal != wxID_OK) { $dlg->Destroy; return; } $output_file = Slic3r::decode_path($dlg->GetPath); $qs_last_output_file = $output_file unless $params{export_svg}; $Slic3r::GUI::Settings->{_}{last_output_path} = dirname($output_file); wxTheApp->save_settings; $dlg->Destroy; } # show processbar dialog $progress_dialog = Wx::ProgressDialog->new('Slicing…', "Processing $input_file_basename…", 100, $self, 0); $progress_dialog->Pulse; { my @warnings = (); local $SIG{__WARN__} = sub { push @warnings, $_[0] }; $sprint->output_file($output_file); if ($params{export_svg}) { $sprint->export_svg; } else { $sprint->export_gcode; } $sprint->status_cb(undef); Slic3r::GUI::warning_catcher($self)->($_) for @warnings; } $progress_dialog->Destroy; undef $progress_dialog; my $message = "$input_file_basename was successfully sliced."; wxTheApp->notify($message); Wx::MessageDialog->new($self, $message, 'Slicing Done!', wxOK | wxICON_INFORMATION)->ShowModal; }; Slic3r::GUI::catch_error($self, sub { $progress_dialog->Destroy if $progress_dialog }); } sub repair_stl { my $self = shift; my $input_file; { my $dir = $Slic3r::GUI::Settings->{recent}{skein_directory} || $Slic3r::GUI::Settings->{recent}{config_directory} || ''; my $dialog = Wx::FileDialog->new($self, 'Select the STL file to repair:', $dir, "", &Slic3r::GUI::FILE_WILDCARDS->{stl}, wxFD_OPEN | wxFD_FILE_MUST_EXIST); if ($dialog->ShowModal != wxID_OK) { $dialog->Destroy; return; } $input_file = Slic3r::decode_path($dialog->GetPaths); $dialog->Destroy; } my $output_file = $input_file; { $output_file =~ s/\.stl$/_fixed.obj/i; my $dlg = Wx::FileDialog->new($self, "Save OBJ file (less prone to coordinate errors than STL) as:", dirname($output_file), basename($output_file), &Slic3r::GUI::FILE_WILDCARDS->{obj}, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if ($dlg->ShowModal != wxID_OK) { $dlg->Destroy; return undef; } $output_file = Slic3r::decode_path($dlg->GetPath); $dlg->Destroy; } my $tmesh = Slic3r::TriangleMesh->new; $tmesh->ReadSTLFile($input_file); $tmesh->repair; $tmesh->WriteOBJFile($output_file); Slic3r::GUI::show_info($self, "Your file was repaired.", "Repair"); } sub export_config { my $self = shift; my $config = $self->{plater}->config; eval { # validate configuration $config->validate; }; Slic3r::GUI::catch_error($self) and return; my $dir = $last_config ? dirname($last_config) : $Slic3r::GUI::Settings->{recent}{config_directory} || $Slic3r::GUI::Settings->{recent}{skein_directory} || ''; my $filename = $last_config ? basename($last_config) : "config.ini"; my $dlg = Wx::FileDialog->new($self, 'Save configuration as:', $dir, $filename, &Slic3r::GUI::FILE_WILDCARDS->{ini}, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if ($dlg->ShowModal == wxID_OK) { my $file = Slic3r::decode_path($dlg->GetPath); $Slic3r::GUI::Settings->{recent}{config_directory} = dirname($file); wxTheApp->save_settings; $last_config = $file; $config->save($file); } $dlg->Destroy; } sub load_config_file { my $self = shift; my ($file) = @_; if (!$file) { my $dir = $last_config ? dirname($last_config) : $Slic3r::GUI::Settings->{recent}{config_directory} || $Slic3r::GUI::Settings->{recent}{skein_directory} || ''; my $dlg = Wx::FileDialog->new($self, 'Select configuration to load:', $dir, "config.ini", &Slic3r::GUI::FILE_WILDCARDS->{ini}, wxFD_OPEN | wxFD_FILE_MUST_EXIST); return unless $dlg->ShowModal == wxID_OK; $file = Slic3r::decode_path($dlg->GetPaths); $dlg->Destroy; } $Slic3r::GUI::Settings->{recent}{config_directory} = dirname($file); wxTheApp->save_settings; $last_config = $file; my $name = wxTheApp->add_external_preset($file); $self->{plater}->load_presets; $self->{plater}->select_preset_by_name($name, $_) for qw(print filament printer); } sub import_fromGCode{ # import configuration from gcode file sliced with Slic3r my ($self, $file) = @_; if (!$file) { my $dir = $last_config ? dirname($last_config) : $Slic3r::GUI::Settings->{recent}{config_directory} || $Slic3r::GUI::Settings->{recent}{skein_directory} || ''; my $dlg = Wx::FileDialog->new($self, 'Select GCode File to load config from:', $dir, &Slic3r::GUI::FILE_WILDCARDS->{gcode}, &Slic3r::GUI::FILE_WILDCARDS->{gcode}, wxFD_OPEN | wxFD_FILE_MUST_EXIST); return unless $dlg->ShowModal == wxID_OK; $file = Slic3r::decode_path($dlg->GetPaths); $dlg->Destroy; } $Slic3r::GUI::Settings->{recent}{config_directory} = dirname($file); wxTheApp->save_settings; # open $file and read the first line to make sure it was sliced using Slic3r open(FILEFIRSTLINE, '<', "$file") or die( "Can't open file to import gcode: $!" ); my $firstLine = ; close (FILEFIRSTLINE); # Exit, if file was not sliced using Slic3r if( index($firstLine, "generated by Slic3r") < 0){ return; } # if file sliced by Slic3r, read it open(GFILE, "$file") or die( "Can't open file to import gcode: $!" ); my @lines = reverse ; # read the file from the back my $line; my @settinglines=""; foreach $line (@lines) { # if line is empty, we're done -> EOF if (substr($line, 0, 1) eq ";"){ $line = substr($line,2, length($line)-2); push @settinglines, $line; } else { last; } } close (GFILE); # (over-) write config to temp-file -> my $tempfile = substr $file, 0, rindex( $file, q{.} ); $tempfile="$tempfile.ini"; open (TEMPFILESETTINGS, "> $tempfile"); print TEMPFILESETTINGS @settinglines; close (TEMPFILESETTINGS); $self->load_config_file($tempfile); # todo: do we want to delete the file after load_config? } sub export_configbundle { my $self = shift; eval { # validate current configuration in case it's dirty $self->{plater}->config->validate; }; Slic3r::GUI::catch_error($self) and return; my $dir = $last_config ? dirname($last_config) : $Slic3r::GUI::Settings->{recent}{config_directory} || $Slic3r::GUI::Settings->{recent}{skein_directory} || ''; my $filename = "Slic3r_config_bundle.ini"; my $dlg = Wx::FileDialog->new($self, 'Save presets bundle as:', $dir, $filename, &Slic3r::GUI::FILE_WILDCARDS->{ini}, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if ($dlg->ShowModal == wxID_OK) { my $file = Slic3r::decode_path($dlg->GetPath); $Slic3r::GUI::Settings->{recent}{config_directory} = dirname($file); wxTheApp->save_settings; # leave default category empty to prevent the bundle from being parsed as a normal config file my $ini = { _ => {} }; $ini->{settings}{$_} = $Slic3r::GUI::Settings->{_}{$_} for qw(autocenter); $ini->{presets} = $Slic3r::GUI::Settings->{presets}; foreach my $section (qw(print filament printer)) { my @presets = @{wxTheApp->presets->{$section}}; foreach my $preset (@presets) { next if $preset->default || $preset->external; $ini->{"$section:" . $preset->name} = $preset->load_config->as_ini->{_}; } } Slic3r::Config->write_ini($file, $ini); } $dlg->Destroy; } sub load_configbundle { my ($self, $file, $skip_no_id) = @_; if (!$file) { my $dir = $last_config ? dirname($last_config) : $Slic3r::GUI::Settings->{recent}{config_directory} || $Slic3r::GUI::Settings->{recent}{skein_directory} || ''; my $dlg = Wx::FileDialog->new($self, 'Select configuration to load:', $dir, "config.ini", &Slic3r::GUI::FILE_WILDCARDS->{ini}, wxFD_OPEN | wxFD_FILE_MUST_EXIST); return unless $dlg->ShowModal == wxID_OK; $file = Slic3r::decode_path($dlg->GetPaths); $dlg->Destroy; } $Slic3r::GUI::Settings->{recent}{config_directory} = dirname($file); wxTheApp->save_settings; # load .ini file my $ini = Slic3r::Config->read_ini($file); if ($ini->{settings}) { $Slic3r::GUI::Settings->{_}{$_} = $ini->{settings}{$_} for keys %{$ini->{settings}}; wxTheApp->save_settings; } if ($ini->{presets}) { $Slic3r::GUI::Settings->{presets} = $ini->{presets}; wxTheApp->save_settings; } my $imported = 0; INI_BLOCK: foreach my $ini_category (sort keys %$ini) { next unless $ini_category =~ /^(print|filament|printer):(.+)$/; my ($section, $preset_name) = ($1, $2); my $config = Slic3r::Config->load_ini_hash($ini->{$ini_category}); next if $skip_no_id && !$config->get($section . "_settings_id"); { my @current_presets = @{wxTheApp->presets->{$section}}; my %current_ids = map { $_ => 1 } grep $_, map $_->dirty_config->get($section . "_settings_id"), @current_presets; next INI_BLOCK if exists $current_ids{$config->get($section . "_settings_id")}; } $config->save(sprintf "$Slic3r::GUI::datadir/%s/%s.ini", $section, $preset_name); Slic3r::debugf "Imported %s preset %s\n", $section, $preset_name; $imported++; } $self->{plater}->load_presets; return if !$imported; my $message = sprintf "%d presets successfully imported.", $imported; Slic3r::GUI::show_info($self, $message); } sub load_config { my ($self, $config) = @_; $self->{plater}->load_config($config); } sub config_wizard { my $self = shift; if (my $config = Slic3r::GUI::ConfigWizard->new($self)->run) { foreach my $group (qw(print filament printer)) { my $name = 'My Settings'; $config->save(sprintf "$Slic3r::GUI::datadir/%s/%s.ini", $group, $name); $Slic3r::GUI::Settings->{presets}{$group} = "$name.ini"; $self->{plater}->load_presets; $self->{plater}->select_preset_by_name($name, $group); } } } sub select_tab { my ($self, $tab) = @_; $self->{tabpanel}->SetSelection($tab); } # Set a camera direction, zoom to all objects. sub select_view { my ($self, $direction) = @_; $self->{plater}->select_view($direction); } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Notifier.pm000066400000000000000000000026651327442435500173420ustar00rootroot00000000000000# Notify about the end of slicing. # The notifications are sent out using the Growl protocol if installed, and using DBus XWindow protocol. package Slic3r::GUI::Notifier; use Moo; has 'growler' => (is => 'rw'); my $icon = $Slic3r::var->("Slic3r.png"); sub BUILD { my ($self) = @_; if (eval 'use Growl::GNTP; 1') { # register with growl eval { $self->growler(Growl::GNTP->new(AppName => 'Slic3r', AppIcon => $icon)); $self->growler->register([{Name => 'SKEIN_DONE', DisplayName => 'Slicing Done'}]); }; # if register() fails (for example because of a timeout), disable growler at all $self->growler(undef) if $@; } } sub notify { my ($self, $message) = @_; my $title = 'Slicing Done!'; eval { $self->growler->notify(Event => 'SKEIN_DONE', Title => $title, Message => $message) if $self->growler; }; # Net::DBus is broken in multithreaded environment if (0 && eval 'use Net::DBus; 1') { eval { my $session = Net::DBus->session; my $serv = $session->get_service('org.freedesktop.Notifications'); my $notifier = $serv->get_object('/org/freedesktop/Notifications', 'org.freedesktop.Notifications'); $notifier->Notify('Slic3r', 0, $icon, $title, $message, [], {}, -1); undef $Net::DBus::bus_session; }; } } 1; Slic3r-1.3.0/lib/Slic3r/GUI/OptionsGroup.pm000066400000000000000000000405711327442435500202310ustar00rootroot00000000000000# A dialog group object. Used by the PresetEditor, Preferences dialog, ManualControlDialog etc. package Slic3r::GUI::OptionsGroup; use Moo; use List::Util qw(first); use Wx qw(:combobox :font :misc :sizer :systemsettings :textctrl wxTheApp); use Wx::Event qw(EVT_CHECKBOX EVT_COMBOBOX EVT_SPINCTRL EVT_TEXT EVT_KILL_FOCUS EVT_SLIDER); has 'parent' => (is => 'ro', required => 1); has 'title' => (is => 'ro', required => 1); has 'on_change' => (is => 'rw', default => sub { sub {} }); has 'staticbox' => (is => 'ro', default => sub { 1 }); has 'label_width' => (is => 'rw', default => sub { 180 }); has 'extra_column' => (is => 'rw', default => sub { undef }); has 'label_font' => (is => 'rw'); has 'sidetext_font' => (is => 'rw', default => sub { Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) }); has 'sizer' => (is => 'rw'); has '_disabled' => (is => 'rw', default => sub { 0 }); has '_grid_sizer' => (is => 'rw'); has '_options' => (is => 'ro', default => sub { {} }); has '_fields' => (is => 'ro', default => sub { {} }); sub BUILD { my $self = shift; if ($self->staticbox) { my $box = Wx::StaticBox->new($self->parent, -1, $self->title); $self->sizer(Wx::StaticBoxSizer->new($box, wxVERTICAL)); } else { $self->sizer(Wx::BoxSizer->new(wxVERTICAL)); } my $num_columns = 1; ++$num_columns if $self->label_width != 0; ++$num_columns if $self->extra_column; $self->_grid_sizer(Wx::FlexGridSizer->new(0, $num_columns, 0, 0)); $self->_grid_sizer->SetFlexibleDirection(wxHORIZONTAL); $self->_grid_sizer->AddGrowableCol($self->label_width != 0); # TODO: border size may be related to wxWidgets 2.8.x vs. 2.9.x instead of wxMAC specific $self->sizer->Add($self->_grid_sizer, 0, wxEXPAND | wxALL, &Wx::wxMAC ? 0 : 5); } # this method accepts a Slic3r::GUI::OptionsGroup::Line object sub append_line { my ($self, $line) = @_; if ($line->sizer || ($line->widget && $line->full_width)) { # full-width widgets are appended *after* the grid sizer, so after all the non-full-width lines my $sizer = $line->sizer // $line->widget->($self->parent); $self->sizer->Add($sizer, 0, wxEXPAND | wxALL, &Wx::wxMAC ? 0 : 15); return; } my $grid_sizer = $self->_grid_sizer; # if we have an extra column, build it if ($self->extra_column) { if (defined (my $item = $self->extra_column->($line))) { $grid_sizer->Add($item, 0, wxALIGN_CENTER_VERTICAL, 0); } else { # if the callback provides no sizer for the extra cell, put a spacer $grid_sizer->AddSpacer(1); } } # build label if we have it my $label; if ($self->label_width != 0) { $label = Wx::StaticText->new($self->parent, -1, $line->label ? $line->label . ":" : "", wxDefaultPosition, [$self->label_width, -1]); $label->SetFont($self->label_font) if $self->label_font; $label->Wrap($self->label_width) ; # needed to avoid Linux/GTK bug $grid_sizer->Add($label, 0, wxALIGN_CENTER_VERTICAL, 0); $label->SetToolTipString($line->label_tooltip) if $line->label_tooltip; } # if we have a widget, add it to the sizer if ($line->widget) { my $widget_sizer = $line->widget->($self->parent); $grid_sizer->Add($widget_sizer, 0, wxEXPAND | wxALL, &Wx::wxMAC ? 0 : 15); return; } # if we have a single option with no sidetext just add it directly to the grid sizer my @options = @{$line->get_options}; $self->_options->{$_->opt_id} = $_ for @options; if (@options == 1 && !$options[0]->sidetext && !$options[0]->side_widget && !@{$line->get_extra_widgets}) { my $option = $options[0]; my $field = $self->_build_field($option); $grid_sizer->Add($field, 0, ($option->full_width ? wxEXPAND : 0) | wxALIGN_CENTER_VERTICAL, 0); return; } # if we're here, we have more than one option or a single option with sidetext # so we need a horizontal sizer to arrange these things my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $grid_sizer->Add($sizer, 0, 0, 0); foreach my $i (0..$#options) { my $option = $options[$i]; # add label if any if ($option->label) { my $field_label = Wx::StaticText->new($self->parent, -1, $option->label . ":", wxDefaultPosition, wxDefaultSize); $field_label->SetFont($self->sidetext_font); $sizer->Add($field_label, 0, wxALIGN_CENTER_VERTICAL, 0); } # add field my $field = $self->_build_field($option); $sizer->Add($field, 0, wxALIGN_CENTER_VERTICAL, 0); # add sidetext if any if ($option->sidetext) { my $sidetext = Wx::StaticText->new($self->parent, -1, $option->sidetext, wxDefaultPosition, wxDefaultSize); $sidetext->SetFont($self->sidetext_font); $sizer->Add($sidetext, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 4); } # add side widget if any if ($option->side_widget) { $sizer->Add($option->side_widget->($self->parent), 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 1); } if ($option != $#options) { $sizer->AddSpacer(4); } } # add extra sizers if any foreach my $extra_widget (@{$line->get_extra_widgets}) { $sizer->Add($extra_widget->($self->parent), 0, wxLEFT | wxALIGN_CENTER_VERTICAL , 4); } } sub create_single_option_line { my ($self, $option) = @_; my $line = Slic3r::GUI::OptionsGroup::Line->new( label => $option->label, label_tooltip => $option->tooltip, ); $option->label(""); $line->append_option($option); return $line; } sub append_single_option_line { my ($self, $option) = @_; return $self->append_line($self->create_single_option_line($option)); } sub _build_field { my $self = shift; my ($opt) = @_; my $opt_id = $opt->opt_id; my $on_change = sub { my ($opt_id, $value) = @_; $self->_on_change($opt_id, $value) unless $self->_disabled; }; my $on_kill_focus = sub { my ($opt_id) = @_; $self->_on_kill_focus($opt_id); }; my $type = $opt->{gui_type} || $opt->{type}; my $field; if ($type eq 'bool') { $field = Slic3r::GUI::OptionsGroup::Field::Checkbox->new( parent => $self->parent, option => $opt, ); } elsif ($type eq 'i') { $field = Slic3r::GUI::OptionsGroup::Field::SpinCtrl->new( parent => $self->parent, option => $opt, ); } elsif ($type eq 'color') { $field = Slic3r::GUI::OptionsGroup::Field::ColourPicker->new( parent => $self->parent, option => $opt, ); } elsif ($type =~ /^(f|s|s@|percent)$/) { $field = Slic3r::GUI::OptionsGroup::Field::TextCtrl->new( parent => $self->parent, option => $opt, ); } elsif ($type eq 'select' || $type eq 'select_open') { $field = Slic3r::GUI::OptionsGroup::Field::Choice->new( parent => $self->parent, option => $opt, ); } elsif ($type eq 'f_enum_open' || $type eq 'i_enum_open' || $type eq 'i_enum_closed') { $field = Slic3r::GUI::OptionsGroup::Field::NumericChoice->new( parent => $self->parent, option => $opt, ); } elsif ($type eq 'point') { $field = Slic3r::GUI::OptionsGroup::Field::Point->new( parent => $self->parent, option => $opt, ); } elsif ($type eq 'point3'){ $field = Slic3r::GUI::OptionsGroup::Field::Point3->new( parent => $self->parent, option => $opt, ); } elsif ($type eq 'slider') { $field = Slic3r::GUI::OptionsGroup::Field::Slider->new( parent => $self->parent, option => $opt, ); } return undef if !$field; $field->on_change($on_change); $field->on_kill_focus($on_kill_focus); $self->_fields->{$opt_id} = $field; return $field->isa('Slic3r::GUI::OptionsGroup::Field::wxWindow') ? $field->wxWindow : $field->wxSizer; } sub get_option { my ($self, $opt_id) = @_; return undef if !exists $self->_options->{$opt_id}; return $self->_options->{$opt_id}; } sub get_field { my ($self, $opt_id) = @_; return undef if !exists $self->_fields->{$opt_id}; return $self->_fields->{$opt_id}; } sub get_value { my ($self, $opt_id) = @_; return if !exists $self->_fields->{$opt_id}; return $self->_fields->{$opt_id}->get_value; } sub set_value { my ($self, $opt_id, $value) = @_; return if !exists $self->_fields->{$opt_id}; $self->_fields->{$opt_id}->set_value($value); } sub _on_change { my ($self, $opt_id, $value) = @_; $self->on_change->($opt_id, $value); } sub enable { my ($self) = @_; $_->enable for values %{$self->_fields}; } sub disable { my ($self) = @_; $_->disable for values %{$self->_fields}; } sub _on_kill_focus { my ($self, $opt_id) = @_; # nothing } package Slic3r::GUI::OptionsGroup::Line; use Moo; has 'label' => (is => 'rw', default => sub { "" }); has 'full_width' => (is => 'rw', default => sub { 0 }); has 'label_tooltip' => (is => 'rw', default => sub { "" }); has 'sizer' => (is => 'rw'); has 'widget' => (is => 'rw'); has '_options' => (is => 'ro', default => sub { [] }); has '_extra_widgets' => (is => 'ro', default => sub { [] }); use Wx qw(:button :misc :bitmap); use Wx::Event qw(EVT_BUTTON); # this method accepts a Slic3r::GUI::OptionsGroup::Option object sub append_option { my ($self, $option) = @_; push @{$self->_options}, $option; } sub append_widget { my ($self, $widget) = @_; push @{$self->_extra_widgets}, $widget; } sub append_button { my ($self, $text, $icon, $cb, $ref, $disable) = @_; $self->append_widget(sub { my ($parent) = @_; my $btn = Wx::Button->new($parent, -1, $text, wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); $btn->SetFont($Slic3r::GUI::small_font); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->($icon), wxBITMAP_TYPE_PNG)); } $btn->Disable if $disable; $$ref = $btn if $ref; EVT_BUTTON($parent, $btn, $cb); return $btn; }); } sub get_options { my ($self) = @_; return [ @{$self->_options} ]; } sub get_extra_widgets { my ($self) = @_; return [ @{$self->_extra_widgets} ]; } package Slic3r::GUI::OptionsGroup::Option; use Moo; has 'opt_id' => (is => 'rw', required => 1); has 'type' => (is => 'rw', required => 1); has 'default' => (is => 'rw', required => 1); has 'gui_type' => (is => 'rw', default => sub { undef }); has 'gui_flags' => (is => 'rw', default => sub { "" }); has 'label' => (is => 'rw', default => sub { "" }); has 'sidetext' => (is => 'rw', default => sub { "" }); has 'tooltip' => (is => 'rw', default => sub { "" }); has 'multiline' => (is => 'rw', default => sub { 0 }); has 'full_width' => (is => 'rw', default => sub { 0 }); has 'width' => (is => 'rw', default => sub { undef }); has 'height' => (is => 'rw', default => sub { undef }); has 'min' => (is => 'rw', default => sub { undef }); has 'max' => (is => 'rw', default => sub { undef }); has 'labels' => (is => 'rw', default => sub { [] }); has 'values' => (is => 'rw', default => sub { [] }); has 'readonly' => (is => 'rw', default => sub { 0 }); has 'side_widget' => (is => 'rw', default => sub { undef }); package Slic3r::GUI::ConfigOptionsGroup; use Moo; use List::Util qw(first); extends 'Slic3r::GUI::OptionsGroup'; has 'config' => (is => 'ro', required => 1); has 'full_labels' => (is => 'ro', default => sub { 0 }); has '_opt_map' => (is => 'ro', default => sub { {} }); sub get_option { my ($self, $opt_key, $opt_index, %params) = @_; $opt_index //= -1; if (!$self->config->has($opt_key)) { die "No $opt_key in ConfigOptionsGroup config"; } my $opt_id = ($opt_index == -1 ? $opt_key : "${opt_key}#${opt_index}"); $self->_opt_map->{$opt_id} = [ $opt_key, $opt_index ]; my $optdef = $Slic3r::Config::Options->{$opt_key}; # we should access this from $self->config my $default_value = $self->_get_config_value($opt_key, $opt_index, $optdef->{type} eq 's@'); return Slic3r::GUI::OptionsGroup::Option->new( opt_id => $opt_id, type => $optdef->{type}, default => $default_value, gui_type => $optdef->{gui_type}, gui_flags => $optdef->{gui_flags}, label => ($self->full_labels && defined $optdef->{full_label}) ? $optdef->{full_label} : $optdef->{label}, sidetext => $optdef->{sidetext}, # calling serialize() ensures we get a stringified value tooltip => $optdef->{tooltip} . " (default: " . $self->config->serialize($opt_key) . ")", multiline => $optdef->{multiline}, width => $optdef->{width}, min => $optdef->{min}, max => $optdef->{max}, labels => $optdef->{labels}, values => $optdef->{values}, readonly => $optdef->{readonly}, %params, ); } sub create_single_option_line { my ($self, $opt_key, $opt_index, %params) = @_; my $option; if (ref($opt_key)) { $option = $opt_key; } else { $option = $self->get_option($opt_key, $opt_index, %params); } return $self->SUPER::create_single_option_line($option); } sub append_single_option_line { my ($self, $option, $opt_index, %params) = @_; return $self->append_line($self->create_single_option_line($option, $opt_index, %params)); } sub reload_config { my ($self) = @_; foreach my $opt_id (keys %{ $self->_opt_map }) { my ($opt_key, $opt_index) = @{ $self->_opt_map->{$opt_id} }; my $option = $self->_options->{$opt_id}; $self->set_value($opt_id, $self->_get_config_value($opt_key, $opt_index, $option->type eq 's@')); } } sub get_fieldc { my ($self, $opt_key, $opt_index) = @_; $opt_index //= -1; my $opt_id = first { $self->_opt_map->{$_}[0] eq $opt_key && $self->_opt_map->{$_}[1] == $opt_index } keys %{$self->_opt_map}; return defined($opt_id) ? $self->get_field($opt_id) : undef; } sub _get_config_value { my ($self, $opt_key, $opt_index, $as_string) = @_; if ($opt_index == -1) { my $value = $self->config->get($opt_key); if ($as_string && ref($value) eq 'ARRAY') { return join "\n", @$value; } return $value; } else { return $self->config->get_at($opt_key, $opt_index); } } sub _on_change { my ($self, $opt_id, $value) = @_; if (exists $self->_opt_map->{$opt_id}) { my ($opt_key, $opt_index) = @{ $self->_opt_map->{$opt_id} }; my $option = $self->_options->{$opt_id}; # get value my $field_value = $self->get_value($opt_id); if ($opt_index == -1) { if ($option->type eq 's@' && ref($field_value) ne 'ARRAY') { $field_value = [ split /(?config->set($opt_key, $field_value); } else { my $value = $self->config->get($opt_key); $value->[$opt_index] = $field_value; $self->config->set($opt_key, $value); } } $self->SUPER::_on_change($opt_id, $value); } sub _on_kill_focus { my ($self, $opt_id) = @_; # when a field loses focus, reapply the config value to it # (thus discarding any invalid input and reverting to the last # accepted value) $self->reload_config; } package Slic3r::GUI::OptionsGroup::StaticText; use Wx qw(:misc :systemsettings); use base 'Wx::StaticText'; sub new { my ($class, $parent) = @_; my $self = $class->SUPER::new($parent, -1, "", wxDefaultPosition, wxDefaultSize); my $font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); $self->SetFont($font); return $self; } sub SetText { my ($self, $value) = @_; $self->SetLabel($value); $self->Wrap(400); $self->GetParent->Layout; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/OptionsGroup/000077500000000000000000000000001327442435500176645ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r/GUI/OptionsGroup/Field.pm000066400000000000000000000453671327442435500212640ustar00rootroot00000000000000package Slic3r::GUI::OptionsGroup::Field; use Moo; # This is a base class for option fields. has 'parent' => (is => 'ro', required => 1); has 'option' => (is => 'ro', required => 1); # Slic3r::GUI::OptionsGroup::Option has 'on_change' => (is => 'rw', default => sub { sub {} }); has 'on_kill_focus' => (is => 'rw', default => sub { sub {} }); has 'disable_change_event' => (is => 'rw', default => sub { 0 }); # This method should not fire the on_change event sub set_value { my ($self, $value) = @_; die "Method not implemented"; } sub get_value { my ($self) = @_; die "Method not implemented"; } sub set_tooltip { my ($self, $tooltip) = @_; die "Method not implemented"; } sub toggle { my ($self, $enable) = @_; $enable ? $self->enable : $self->disable; } sub _on_change { my ($self, $opt_id) = @_; $self->on_change->($opt_id, $self->get_value) unless $self->disable_change_event; } sub _on_kill_focus { my ($self, $opt_id, $s, $event) = @_; # Without this, there will be nasty focus bugs on Windows. # Also, docs for wxEvent::Skip() say "In general, it is recommended to skip all # non-command events to allow the default handling to take place." $event->Skip(1); $self->on_kill_focus->($opt_id); } package Slic3r::GUI::OptionsGroup::Field::wxWindow; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field'; has 'wxWindow' => (is => 'rw', trigger => 1); # wxWindow object sub _default_size { my ($self) = @_; # default width on Windows is too large return Wx::Size->new($self->option->width || 60, $self->option->height || -1); } sub _trigger_wxWindow { my ($self) = @_; $self->set_tooltip($self->option->tooltip); } sub set_tooltip { my ($self, $tooltip) = @_; $self->wxWindow->SetToolTipString($tooltip) if $self->wxWindow->can('SetToolTipString'); } sub set_value { my ($self, $value) = @_; $self->disable_change_event(1); $self->wxWindow->SetValue($value); $self->disable_change_event(0); } sub get_value { my ($self) = @_; return $self->wxWindow->GetValue; } sub enable { my ($self) = @_; $self->wxWindow->Enable; $self->wxWindow->Refresh; } sub disable { my ($self) = @_; $self->wxWindow->Disable; $self->wxWindow->Refresh; } package Slic3r::GUI::OptionsGroup::Field::Checkbox; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field::wxWindow'; use Wx qw(:misc); use Wx::Event qw(EVT_CHECKBOX); sub BUILD { my ($self) = @_; my $field = Wx::CheckBox->new($self->parent, -1, ""); $self->wxWindow($field); $field->SetValue($self->option->default); $field->Disable if $self->option->readonly; EVT_CHECKBOX($self->parent, $field, sub { $self->_on_change($self->option->opt_id); }); } package Slic3r::GUI::OptionsGroup::Field::SpinCtrl; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field::wxWindow'; use Wx qw(:misc); use Wx::Event qw(EVT_SPINCTRL EVT_TEXT EVT_KILL_FOCUS); has 'tmp_value' => (is => 'rw'); sub BUILD { my ($self) = @_; my $field = Wx::SpinCtrl->new($self->parent, -1, $self->option->default, wxDefaultPosition, $self->_default_size, 0, $self->option->min || 0, $self->option->max || 2147483647, $self->option->default); $self->wxWindow($field); EVT_SPINCTRL($self->parent, $field, sub { $self->tmp_value(undef); $self->_on_change($self->option->opt_id); }); EVT_TEXT($self->parent, $field, sub { my ($s, $event) = @_; # On OSX/Cocoa, wxSpinCtrl::GetValue() doesn't return the new value # when it was changed from the text control, so the on_change callback # gets the old one, and on_kill_focus resets the control to the old value. # As a workaround, we get the new value from $event->GetString and store # here temporarily so that we can return it from $self->get_value $self->tmp_value($event->GetString) if $event->GetString =~ /^\d+$/; $self->_on_change($self->option->opt_id); # We don't reset tmp_value here because _on_change might put callbacks # in the CallAfter queue, and we want the tmp value to be available from # them as well. }); EVT_KILL_FOCUS($field, sub { $self->tmp_value(undef); $self->_on_kill_focus($self->option->opt_id, @_); }); } sub get_value { my ($self) = @_; return $self->tmp_value // $self->wxWindow->GetValue; } package Slic3r::GUI::OptionsGroup::Field::TextCtrl; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field::wxWindow'; use Wx qw(:misc :textctrl); use Wx::Event qw(EVT_TEXT EVT_KILL_FOCUS); sub BUILD { my ($self) = @_; my $style = 0; $style = wxTE_MULTILINE if $self->option->multiline; my $field = Wx::TextCtrl->new($self->parent, -1, $self->option->default, wxDefaultPosition, $self->_default_size, $style); $self->wxWindow($field); # TODO: test loading a config that has empty string for multi-value options like 'wipe' EVT_TEXT($self->parent, $field, sub { $self->_on_change($self->option->opt_id); }); EVT_KILL_FOCUS($field, sub { $self->_on_kill_focus($self->option->opt_id, @_); }); } sub enable { my ($self) = @_; $self->wxWindow->Enable; $self->wxWindow->SetEditable(1); } sub disable { my ($self) = @_; $self->wxWindow->Disable; $self->wxWindow->SetEditable(0); } package Slic3r::GUI::OptionsGroup::Field::Choice; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field::wxWindow'; use List::Util qw(first); use Wx qw(:misc :combobox); use Wx::Event qw(EVT_COMBOBOX EVT_TEXT); sub BUILD { my ($self) = @_; my $style = 0; $style |= wxCB_READONLY if defined $self->option->gui_type && $self->option->gui_type ne 'select_open'; my $field = Wx::ComboBox->new($self->parent, -1, "", wxDefaultPosition, $self->_default_size, $self->option->labels || $self->option->values || [], $style); $self->wxWindow($field); $self->set_value($self->option->default); EVT_COMBOBOX($self->parent, $field, sub { $self->_on_change($self->option->opt_id); }); EVT_TEXT($self->parent, $field, sub { $self->_on_change($self->option->opt_id); }); } sub set_value { my ($self, $value) = @_; $self->disable_change_event(1); my $idx; if ($self->option->values) { $idx = first { $self->option->values->[$_] eq $value } 0..$#{$self->option->values}; # if value is not among indexes values we use SetValue() } if (defined $idx) { $self->wxWindow->SetSelection($idx); } else { $self->wxWindow->SetValue($value); } $self->disable_change_event(0); } sub set_values { my ($self, $values) = @_; $self->disable_change_event(1); # it looks that Clear() also clears the text field in recent wxWidgets versions, # but we want to preserve it my $ww = $self->wxWindow; my $value = $ww->GetValue; $ww->Clear; $ww->Append($_) for @$values; $ww->SetValue($value); $self->disable_change_event(0); } sub get_value { my ($self) = @_; if ($self->option->values) { my $idx = $self->wxWindow->GetSelection; if ($idx != &Wx::wxNOT_FOUND) { return $self->option->values->[$idx]; } } return $self->wxWindow->GetValue; } package Slic3r::GUI::OptionsGroup::Field::NumericChoice; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field::wxWindow'; use List::Util qw(first); use Wx qw(wxTheApp :misc :combobox); use Wx::Event qw(EVT_COMBOBOX EVT_TEXT); # if option has no 'values', indices are values # if option has no 'labels', values are labels sub BUILD { my ($self) = @_; my $field = Wx::ComboBox->new($self->parent, -1, $self->option->default, wxDefaultPosition, $self->_default_size, $self->option->labels || $self->option->values); $self->wxWindow($field); $self->set_value($self->option->default); EVT_COMBOBOX($self->parent, $field, sub { my $disable_change_event = $self->disable_change_event; $self->disable_change_event(1); my $idx = $field->GetSelection; # get index of selected value my $label; if ($self->option->labels && $idx <= $#{$self->option->labels}) { $label = $self->option->labels->[$idx]; } elsif ($self->option->values && $idx <= $#{$self->option->values}) { $label = $self->option->values->[$idx]; } else { $label = $idx; } # The MSW implementation of wxComboBox will leave the field blank if we call # SetValue() in the EVT_COMBOBOX event handler, so we postpone the call. wxTheApp->CallAfter(sub { my $dce = $self->disable_change_event; $self->disable_change_event(1); # ChangeValue() is not exported in wxPerl $field->SetValue($label); $self->disable_change_event($dce); }); $self->disable_change_event($disable_change_event); $self->_on_change($self->option->opt_id); }); EVT_TEXT($self->parent, $field, sub { $self->_on_change($self->option->opt_id); }); } sub set_value { my ($self, $value) = @_; $self->disable_change_event(1); my $field = $self->wxWindow; if ($self->option->gui_flags =~ /\bshow_value\b/) { $field->SetValue($value); } else { if ($self->option->values) { # check whether we have a value index my $value_idx = first { $self->option->values->[$_] eq $value } 0..$#{$self->option->values}; if (defined $value_idx) { $field->SetSelection($value_idx); $self->disable_change_event(0); return; } } elsif ($self->option->labels && $value <= $#{$self->option->labels}) { # if we have no values, we expect value to be an index $field->SetValue($self->option->labels->[$value]); $self->disable_change_event(0); return; } $field->SetValue($value); } $self->disable_change_event(0); } sub get_value { my ($self) = @_; my $label = $self->wxWindow->GetValue; if ($self->option->labels) { my $value_idx = first { $self->option->labels->[$_] eq $label } 0..$#{$self->option->labels}; if (defined $value_idx) { if ($self->option->values) { return $self->option->values->[$value_idx]; } return $value_idx; } } return $label; } package Slic3r::GUI::OptionsGroup::Field::ColourPicker; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field::wxWindow'; use Wx qw(:misc :colour); use Wx::Event qw(EVT_COLOURPICKER_CHANGED); sub BUILD { my ($self) = @_; my $field = Wx::ColourPickerCtrl->new($self->parent, -1, $self->_string_to_colour($self->option->default), wxDefaultPosition, $self->_default_size); $self->wxWindow($field); EVT_COLOURPICKER_CHANGED($self->parent, $field, sub { $self->_on_change($self->option->opt_id); }); } sub set_value { my ($self, $value) = @_; $self->disable_change_event(1); $self->wxWindow->SetColour($self->_string_to_colour($value)); $self->disable_change_event(0); } sub get_value { my ($self) = @_; return $self->wxWindow->GetColour->GetAsString(wxC2S_HTML_SYNTAX); } sub _string_to_colour { my ($self, $string) = @_; $string =~ s/^#//; return Wx::Colour->new(unpack 'C*', pack 'H*', $string); } package Slic3r::GUI::OptionsGroup::Field::wxSizer; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field'; has 'wxSizer' => (is => 'rw'); # wxSizer object package Slic3r::GUI::OptionsGroup::Field::Point; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field::wxSizer'; has 'x_textctrl' => (is => 'rw'); has 'y_textctrl' => (is => 'rw'); use Slic3r::Geometry qw(X Y); use Wx qw(:misc :sizer); use Wx::Event qw(EVT_TEXT); sub BUILD { my ($self) = @_; my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $self->wxSizer($sizer); my $field_size = Wx::Size->new(40, -1); $self->x_textctrl(Wx::TextCtrl->new($self->parent, -1, $self->option->default->[X], wxDefaultPosition, $field_size)); $self->y_textctrl(Wx::TextCtrl->new($self->parent, -1, $self->option->default->[Y], wxDefaultPosition, $field_size)); my @items = ( Wx::StaticText->new($self->parent, -1, "x:"), $self->x_textctrl, Wx::StaticText->new($self->parent, -1, " y:"), $self->y_textctrl, ); $sizer->Add($_, 0, wxALIGN_CENTER_VERTICAL, 0) for @items; if ($self->option->tooltip) { foreach my $item (@items) { $item->SetToolTipString($self->option->tooltip) if $item->can('SetToolTipString'); } } EVT_TEXT($self->parent, $_, sub { $self->_on_change($self->option->opt_id); }) for $self->x_textctrl, $self->y_textctrl; } sub set_value { my ($self, $value) = @_; $self->disable_change_event(1); $self->x_textctrl->SetValue($value->[X]); $self->y_textctrl->SetValue($value->[Y]); $self->disable_change_event(0); } sub get_value { my ($self) = @_; return [ $self->x_textctrl->GetValue, $self->y_textctrl->GetValue, ]; } sub enable { my ($self) = @_; $self->x_textctrl->Enable; $self->y_textctrl->Enable; } sub disable { my ($self) = @_; $self->x_textctrl->Disable; $self->y_textctrl->Disable; } package Slic3r::GUI::OptionsGroup::Field::Point3; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field::wxSizer'; has 'x_textctrl' => (is => 'rw'); has 'y_textctrl' => (is => 'rw'); has 'z_textctrl' => (is => 'rw'); use Slic3r::Geometry qw(X Y Z); use Wx qw(:misc :sizer); use Wx::Event qw(EVT_TEXT); sub BUILD { my ($self) = @_; my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $self->wxSizer($sizer); my $field_size = Wx::Size->new(40, -1); $self->x_textctrl(Wx::TextCtrl->new($self->parent, -1, $self->option->default->[X], wxDefaultPosition, $field_size)); $self->y_textctrl(Wx::TextCtrl->new($self->parent, -1, $self->option->default->[Y], wxDefaultPosition, $field_size)); $self->z_textctrl(Wx::TextCtrl->new($self->parent, -1, $self->option->default->[Z], wxDefaultPosition, $field_size)); my @items = ( Wx::StaticText->new($self->parent, -1, "x:"), $self->x_textctrl, Wx::StaticText->new($self->parent, -1, " y:"), $self->y_textctrl, Wx::StaticText->new($self->parent, -1, " z:"), $self->z_textctrl, ); $sizer->Add($_, 0, wxALIGN_CENTER_VERTICAL, 0) for @items; if ($self->option->tooltip) { foreach my $item (@items) { $item->SetToolTipString($self->option->tooltip) if $item->can('SetToolTipString'); } } EVT_TEXT($self->parent, $_, sub { $self->_on_change($self->option->opt_id); }) for $self->x_textctrl, $self->y_textctrl, $self->z_textctrl; } sub set_value { my ($self, $value) = @_; $self->disable_change_event(1); $self->x_textctrl->SetValue($value->[X]); $self->y_textctrl->SetValue($value->[Y]); $self->z_textctrl->SetValue($value->[Z]); $self->disable_change_event(0); } sub get_value { my ($self) = @_; return [ $self->x_textctrl->GetValue, $self->y_textctrl->GetValue, $self->z_textctrl->GetValue, ]; } sub enable { my ($self) = @_; $self->x_textctrl->Enable; $self->y_textctrl->Enable; $self->z_textctrl->Enable; } sub disable { my ($self) = @_; $self->x_textctrl->Disable; $self->y_textctrl->Disable; $self->z_textctrl->Disable; } package Slic3r::GUI::OptionsGroup::Field::Slider; use Moo; extends 'Slic3r::GUI::OptionsGroup::Field::wxSizer'; has 'scale' => (is => 'rw', default => sub { 10 }); has 'slider' => (is => 'rw'); has 'textctrl' => (is => 'rw'); use Slic3r::Geometry qw(X Y); use Wx qw(:misc :sizer); use Wx::Event qw(EVT_SLIDER EVT_TEXT EVT_KILL_FOCUS); sub BUILD { my ($self) = @_; my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $self->wxSizer($sizer); my $slider = Wx::Slider->new( $self->parent, -1, ($self->option->default // $self->option->min) * $self->scale, ($self->option->min // 0) * $self->scale, ($self->option->max // 100) * $self->scale, wxDefaultPosition, [ $self->option->width // -1, $self->option->height // -1 ], ); $self->slider($slider); my $textctrl = Wx::TextCtrl->new($self->parent, -1, $slider->GetValue/$self->scale, wxDefaultPosition, [50,-1]); $self->textctrl($textctrl); $sizer->Add($slider, 1, wxALIGN_CENTER_VERTICAL, 0); $sizer->Add($textctrl, 0, wxALIGN_CENTER_VERTICAL, 0); EVT_SLIDER($self->parent, $slider, sub { $self->_update_textctrl; $self->_on_change($self->option->opt_id); }); EVT_TEXT($self->parent, $textctrl, sub { my $value = $textctrl->GetValue; if ($value =~ /^-?\d+(\.\d*)?$/) { # Update the slider without re-updating the text field being modified. $self->disable_change_event(1); $self->slider->SetValue($value*$self->scale); $self->disable_change_event(0); $self->_on_change($self->option->opt_id); } }); EVT_KILL_FOCUS($textctrl, sub { $self->_update_textctrl; $self->_on_kill_focus($self->option->opt_id, @_); }); } sub set_value { my ($self, $value) = @_; $self->disable_change_event(1); $self->slider->SetValue($value*$self->scale); $self->_update_textctrl; $self->disable_change_event(0); } sub get_value { my ($self) = @_; return $self->slider->GetValue/$self->scale; } # Update internal scaling sub set_scale { my ($self, $scale) = @_; $self->disable_change_event(1); my $current_value = $self->get_value; $self->slider->SetRange($self->slider->GetMin / $self->scale * $scale, $self->slider->GetMax / $self->scale * $scale); $self->scale($scale); $self->set_value($current_value); $self->disable_change_event(0); } sub _update_textctrl { my ($self) = @_; $self->textctrl->ChangeValue($self->get_value); $self->textctrl->SetInsertionPointEnd; } sub enable { my ($self) = @_; $self->slider->Enable; $self->textctrl->Enable; $self->textctrl->SetEditable(1); } sub disable { my ($self) = @_; $self->slider->Disable; $self->textctrl->Disable; $self->textctrl->SetEditable(0); } sub set_range { my ($self, $min, $max) = @_; $self->slider->SetRange($min * $self->scale, $max * $self->scale); } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater.pm000066400000000000000000003771021327442435500170130ustar00rootroot00000000000000# The "Plater" tab. It contains the "3D", "2D", "Preview" and "Layers" subtabs. package Slic3r::GUI::Plater::UndoOperation; use strict; use warnings; sub new{ my $class = shift; my $self = { type => shift, object_identifier => shift, attributes => shift, }; bless ($self, $class); return $self; } package Slic3r::GUI::Plater; use strict; use warnings; use utf8; use File::Basename qw(basename dirname); use List::Util qw(sum first max none any); use Slic3r::Geometry qw(X Y Z MIN MAX scale unscale deg2rad rad2deg); use LWP::UserAgent; use threads::shared qw(shared_clone); use Wx qw(:button :cursor :dialog :filedialog :keycode :icon :font :id :misc :panel :sizer :toolbar :window wxTheApp :notebook :combobox); use Wx::Event qw(EVT_BUTTON EVT_COMMAND EVT_KEY_DOWN EVT_MOUSE_EVENTS EVT_PAINT EVT_TOOL EVT_CHOICE EVT_COMBOBOX EVT_TIMER EVT_NOTEBOOK_PAGE_CHANGED EVT_LEFT_UP EVT_CLOSE); use base qw(Wx::Panel Class::Accessor); __PACKAGE__->mk_accessors(qw(presets)); use constant TB_ADD => &Wx::NewId; use constant TB_REMOVE => &Wx::NewId; use constant TB_RESET => &Wx::NewId; use constant TB_ARRANGE => &Wx::NewId; use constant TB_EXPORT_GCODE => &Wx::NewId; use constant TB_EXPORT_STL => &Wx::NewId; use constant TB_MORE => &Wx::NewId; use constant TB_FEWER => &Wx::NewId; use constant TB_45CW => &Wx::NewId; use constant TB_45CCW => &Wx::NewId; use constant TB_SCALE => &Wx::NewId; use constant TB_SPLIT => &Wx::NewId; use constant TB_CUT => &Wx::NewId; use constant TB_LAYERS => &Wx::NewId; use constant TB_SETTINGS => &Wx::NewId; # package variables to avoid passing lexicals to threads our $THUMBNAIL_DONE_EVENT : shared = Wx::NewEventType; our $PROGRESS_BAR_EVENT : shared = Wx::NewEventType; our $ERROR_EVENT : shared = Wx::NewEventType; our $EXPORT_COMPLETED_EVENT : shared = Wx::NewEventType; our $PROCESS_COMPLETED_EVENT : shared = Wx::NewEventType; use constant FILAMENT_CHOOSERS_SPACING => 0; use constant PROCESS_DELAY => 0.5 * 1000; # milliseconds sub new { my $class = shift; my ($parent) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); $self->{config} = Slic3r::Config->new_from_defaults(qw( bed_shape complete_objects extruder_clearance_radius skirts skirt_distance brim_width serial_port serial_speed host_type print_host octoprint_apikey shortcuts filament_colour )); $self->{model} = Slic3r::Model->new; $self->{print} = Slic3r::Print->new; $self->{processed} = 0; # List of Perl objects Slic3r::GUI::Plater::Object, representing a 2D preview of the platter. $self->{objects} = []; # Objects identifier used for undo/redo operations. It's a one time id assigned to each newly created object. $self->{object_identifier} = 0; # Stack of undo operations. $self->{undo_stack} = []; # Stack of redo operations. $self->{redo_stack} = []; $self->{print}->set_status_cb(sub { my ($percent, $message) = @_; if ($Slic3r::have_threads) { Wx::PostEvent($self, Wx::PlThreadEvent->new(-1, $PROGRESS_BAR_EVENT, shared_clone([$percent, $message]))); } else { $self->on_progress_event($percent, $message); } }); # Initialize preview notebook $self->{preview_notebook} = Wx::Notebook->new($self, -1, wxDefaultPosition, [335,335], wxNB_BOTTOM); # Initialize handlers for canvases my $on_select_object = sub { my ($obj_idx) = @_; $self->select_object($obj_idx); }; my $on_double_click = sub { $self->object_settings_dialog if $self->selected_object; }; my $on_right_click = sub { my ($canvas, $click_pos) = @_; my ($obj_idx, $object) = $self->selected_object; return if !defined $obj_idx; my $menu = $self->object_menu; $canvas->PopupMenu($menu, $click_pos); $menu->Destroy; }; my $on_instances_moved = sub { $self->on_model_change; }; # Initialize 3D plater if ($Slic3r::GUI::have_OpenGL) { $self->{canvas3D} = Slic3r::GUI::Plater::3D->new($self->{preview_notebook}, $self->{objects}, $self->{model}, $self->{config}); $self->{preview_notebook}->AddPage($self->{canvas3D}, '3D'); $self->{canvas3D}->set_on_select_object($on_select_object); $self->{canvas3D}->set_on_double_click($on_double_click); $self->{canvas3D}->set_on_right_click(sub { $on_right_click->($self->{canvas3D}, @_); }); $self->{canvas3D}->set_on_instances_moved($on_instances_moved); $self->{canvas3D}->on_viewport_changed(sub { $self->{preview3D}->canvas->set_viewport_from_scene($self->{canvas3D}); }); } # Initialize 2D preview canvas $self->{canvas} = Slic3r::GUI::Plater::2D->new($self->{preview_notebook}, wxDefaultSize, $self->{objects}, $self->{model}, $self->{config}); $self->{preview_notebook}->AddPage($self->{canvas}, '2D'); $self->{canvas}->on_select_object($on_select_object); $self->{canvas}->on_double_click($on_double_click); $self->{canvas}->on_right_click(sub { $on_right_click->($self->{canvas}, @_); }); $self->{canvas}->on_instances_moved($on_instances_moved); # Initialize 3D toolpaths preview $self->{preview3D_page_idx} = -1; if ($Slic3r::GUI::have_OpenGL) { $self->{preview3D} = Slic3r::GUI::Plater::3DPreview->new($self->{preview_notebook}, $self->{print}); $self->{preview3D}->canvas->on_viewport_changed(sub { $self->{canvas3D}->set_viewport_from_scene($self->{preview3D}->canvas); }); $self->{preview_notebook}->AddPage($self->{preview3D}, 'Preview'); $self->{preview3D_page_idx} = $self->{preview_notebook}->GetPageCount-1; } # Initialize toolpaths preview $self->{toolpaths2D_page_idx} = -1; if ($Slic3r::GUI::have_OpenGL) { $self->{toolpaths2D} = Slic3r::GUI::Plater::2DToolpaths->new($self->{preview_notebook}, $self->{print}); $self->{preview_notebook}->AddPage($self->{toolpaths2D}, 'Layers'); $self->{toolpaths2D_page_idx} = $self->{preview_notebook}->GetPageCount-1; } EVT_NOTEBOOK_PAGE_CHANGED($self, $self->{preview_notebook}, sub { wxTheApp->CallAfter(sub { my $sel = $self->{preview_notebook}->GetSelection; if ($sel == $self->{preview3D_page_idx} || $sel == $self->{toolpaths2D_page_idx}) { if (!$Slic3r::GUI::Settings->{_}{background_processing} && !$self->{processed}) { $self->statusbar->SetCancelCallback(sub { $self->stop_background_process; $self->statusbar->SetStatusText("Slicing cancelled"); $self->{preview_notebook}->SetSelection(0); }); $self->start_background_process; } else { $self->{preview3D}->load_print if $sel == $self->{preview3D_page_idx}; } } }); }); # toolbar for object manipulation if (!&Wx::wxMSW) { Wx::ToolTip::Enable(1); $self->{htoolbar} = Wx::ToolBar->new($self, -1, wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL | wxTB_TEXT | wxBORDER_SIMPLE | wxTAB_TRAVERSAL); $self->{htoolbar}->AddTool(TB_ADD, "Add…", Wx::Bitmap->new($Slic3r::var->("brick_add.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddTool(TB_REMOVE, "Delete", Wx::Bitmap->new($Slic3r::var->("brick_delete.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddTool(TB_RESET, "Delete All", Wx::Bitmap->new($Slic3r::var->("cross.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddTool(TB_ARRANGE, "Arrange", Wx::Bitmap->new($Slic3r::var->("bricks.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddSeparator; $self->{htoolbar}->AddTool(TB_MORE, "More", Wx::Bitmap->new($Slic3r::var->("add.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddTool(TB_FEWER, "Fewer", Wx::Bitmap->new($Slic3r::var->("delete.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddSeparator; $self->{htoolbar}->AddTool(TB_45CCW, "45° ccw", Wx::Bitmap->new($Slic3r::var->("arrow_rotate_anticlockwise.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddTool(TB_45CW, "45° cw", Wx::Bitmap->new($Slic3r::var->("arrow_rotate_clockwise.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddTool(TB_SCALE, "Scale…", Wx::Bitmap->new($Slic3r::var->("arrow_out.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddTool(TB_SPLIT, "Split", Wx::Bitmap->new($Slic3r::var->("shape_ungroup.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddTool(TB_CUT, "Cut…", Wx::Bitmap->new($Slic3r::var->("package.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddSeparator; $self->{htoolbar}->AddTool(TB_SETTINGS, "Settings…", Wx::Bitmap->new($Slic3r::var->("cog.png"), wxBITMAP_TYPE_PNG), ''); $self->{htoolbar}->AddTool(TB_LAYERS, "Layer heights…", Wx::Bitmap->new($Slic3r::var->("variable_layer_height.png"), wxBITMAP_TYPE_PNG), ''); } else { my %tbar_buttons = ( add => "Add…", remove => "Delete", reset => "Delete All", arrange => "Arrange", increase => "", decrease => "", rotate45ccw => "", rotate45cw => "", changescale => "Scale…", split => "Split", cut => "Cut…", layers => "Layer heights…", settings => "Settings…", ); $self->{btoolbar} = Wx::BoxSizer->new(wxHORIZONTAL); for (qw(add remove reset arrange increase decrease rotate45ccw rotate45cw changescale split cut layers settings)) { $self->{"btn_$_"} = Wx::Button->new($self, -1, $tbar_buttons{$_}, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); $self->{btoolbar}->Add($self->{"btn_$_"}); } } # right pane buttons $self->{btn_export_gcode} = Wx::Button->new($self, -1, "Export G-code…", wxDefaultPosition, [-1, 30], wxBU_LEFT); $self->{btn_print} = Wx::Button->new($self, -1, "Print…", wxDefaultPosition, [-1, 30], wxBU_LEFT); $self->{btn_send_gcode} = Wx::Button->new($self, -1, "Send to printer", wxDefaultPosition, [-1, 30], wxBU_LEFT); $self->{btn_export_stl} = Wx::Button->new($self, -1, "Export STL…", wxDefaultPosition, [-1, 30], wxBU_LEFT); #$self->{btn_export_gcode}->SetFont($Slic3r::GUI::small_font); #$self->{btn_export_stl}->SetFont($Slic3r::GUI::small_font); $self->{btn_print}->Hide; $self->{btn_send_gcode}->Hide; if ($Slic3r::GUI::have_button_icons) { my %icons = qw( add brick_add.png remove brick_delete.png reset cross.png arrange bricks.png export_gcode cog_go.png print arrow_up.png send_gcode arrow_up.png export_stl brick_go.png increase add.png decrease delete.png rotate45cw arrow_rotate_clockwise.png rotate45ccw arrow_rotate_anticlockwise.png changescale arrow_out.png split shape_ungroup.png cut package.png layers variable_layer_height.png settings cog.png ); for (grep $self->{"btn_$_"}, keys %icons) { $self->{"btn_$_"}->SetBitmap(Wx::Bitmap->new($Slic3r::var->($icons{$_}), wxBITMAP_TYPE_PNG)); } } $self->selection_changed(0); $self->object_list_changed; EVT_BUTTON($self, $self->{btn_export_gcode}, sub { $self->export_gcode; }); EVT_BUTTON($self, $self->{btn_print}, sub { $self->{print_file} = $self->export_gcode(Wx::StandardPaths::Get->GetTempDir()); }); EVT_LEFT_UP($self->{btn_send_gcode}, sub { my (undef, $e) = @_; my $alt = $e->ShiftDown; wxTheApp->CallAfter(sub { $self->prepare_send($alt); }); }); EVT_BUTTON($self, $self->{btn_export_stl}, \&export_stl); if ($self->{htoolbar}) { EVT_TOOL($self, TB_ADD, sub { $self->add; }); EVT_TOOL($self, TB_REMOVE, sub { $self->remove() }); # explicitly pass no argument to remove EVT_TOOL($self, TB_RESET, sub { $self->reset; }); EVT_TOOL($self, TB_ARRANGE, sub { $self->arrange; }); EVT_TOOL($self, TB_MORE, sub { $self->increase; }); EVT_TOOL($self, TB_FEWER, sub { $self->decrease; }); EVT_TOOL($self, TB_45CW, sub { $_[0]->rotate(-45) }); EVT_TOOL($self, TB_45CCW, sub { $_[0]->rotate(45) }); EVT_TOOL($self, TB_SCALE, sub { $self->changescale(undef); }); EVT_TOOL($self, TB_SPLIT, sub { $self->split_object; }); EVT_TOOL($self, TB_CUT, sub { $_[0]->object_cut_dialog }); EVT_TOOL($self, TB_LAYERS, sub { $_[0]->object_layers_dialog }); EVT_TOOL($self, TB_SETTINGS, sub { $_[0]->object_settings_dialog }); } else { EVT_BUTTON($self, $self->{btn_add}, sub { $self->add; }); EVT_BUTTON($self, $self->{btn_remove}, sub { $self->remove() }); # explicitly pass no argument to remove EVT_BUTTON($self, $self->{btn_reset}, sub { $self->reset; }); EVT_BUTTON($self, $self->{btn_arrange}, sub { $self->arrange; }); EVT_BUTTON($self, $self->{btn_increase}, sub { $self->increase; }); EVT_BUTTON($self, $self->{btn_decrease}, sub { $self->decrease; }); EVT_BUTTON($self, $self->{btn_rotate45cw}, sub { $_[0]->rotate(-45) }); EVT_BUTTON($self, $self->{btn_rotate45ccw}, sub { $_[0]->rotate(45) }); EVT_BUTTON($self, $self->{btn_changescale}, sub { $self->changescale(undef); }); EVT_BUTTON($self, $self->{btn_split}, sub { $self->split_object; }); EVT_BUTTON($self, $self->{btn_cut}, sub { $_[0]->object_cut_dialog }); EVT_BUTTON($self, $self->{btn_layers}, sub { $_[0]->object_layers_dialog }); EVT_BUTTON($self, $self->{btn_settings}, sub { $_[0]->object_settings_dialog }); } $_->SetDropTarget(Slic3r::GUI::Plater::DropTarget->new($self)) for grep defined($_), $self, $self->{canvas}, $self->{canvas3D}, $self->{preview3D}; EVT_COMMAND($self, -1, $THUMBNAIL_DONE_EVENT, sub { my ($self, $event) = @_; my ($obj_idx) = @{$event->GetData}; return if !$self->{objects}[$obj_idx]; # object was deleted before thumbnail generation completed $self->on_thumbnail_made($obj_idx); }); EVT_COMMAND($self, -1, $PROGRESS_BAR_EVENT, sub { my ($self, $event) = @_; my ($percent, $message) = @{$event->GetData}; $self->on_progress_event($percent, $message); }); EVT_COMMAND($self, -1, $ERROR_EVENT, sub { my ($self, $event) = @_; Slic3r::GUI::show_error($self, @{$event->GetData}); }); EVT_COMMAND($self, -1, $EXPORT_COMPLETED_EVENT, sub { my ($self, $event) = @_; $self->on_export_completed($event->GetData); }); EVT_COMMAND($self, -1, $PROCESS_COMPLETED_EVENT, sub { my ($self, $event) = @_; $self->on_process_completed($event->GetData); }); if ($Slic3r::have_threads) { my $timer_id = Wx::NewId(); $self->{apply_config_timer} = Wx::Timer->new($self, $timer_id); EVT_TIMER($self, $timer_id, sub { my ($self, $event) = @_; $self->async_apply_config; }); } $self->{canvas}->update_bed_size; if ($self->{canvas3D}) { $self->{canvas3D}->update_bed_size; $self->{canvas3D}->zoom_to_bed; } if ($self->{preview3D}) { $self->{preview3D}->set_bed_shape($self->{config}->bed_shape); } { my $presets = $self->{presets_sizer} = Wx::FlexGridSizer->new(3, 3, 1, 2); $presets->AddGrowableCol(1, 1); $presets->SetFlexibleDirection(wxHORIZONTAL); my %group_labels = ( print => 'Print settings', filament => 'Filament', printer => 'Printer', ); $self->{preset_choosers} = {}; $self->{preset_choosers_names} = {}; # wxChoice* => [] for my $group (qw(print filament printer)) { # label my $text = Wx::StaticText->new($self, -1, "$group_labels{$group}:", wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); $text->SetFont($Slic3r::GUI::small_font); # dropdown control my $choice = Wx::BitmapComboBox->new($self, -1, "", wxDefaultPosition, wxDefaultSize, [], wxCB_READONLY); $self->{preset_choosers}{$group} = [$choice]; # setup the listener EVT_COMBOBOX($choice, $choice, sub { my ($choice) = @_; wxTheApp->CallAfter(sub { $self->_on_change_combobox($group, $choice); }); }); # settings button my $settings_btn = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new($Slic3r::var->("cog.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); EVT_BUTTON($self, $settings_btn, sub { $self->show_preset_editor($group, 0); }); $presets->Add($text, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); $presets->Add($choice, 1, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxBOTTOM, 0); $presets->Add($settings_btn, 0, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxLEFT, 3); } { my $o = $self->{settings_override_panel} = Slic3r::GUI::Plater::OverrideSettingsPanel->new($self, on_change => sub { my ($opt_key) = @_; my ($preset) = $self->selected_presets('print'); $preset->load_config; # If this option is not in the override panel it means it was manually deleted, # so let's restore the profile value. if (!$self->{settings_override_config}->has($opt_key)) { $preset->_dirty_config->set($opt_key, $preset->_config->get($opt_key)); } else { # Apply the overrides to the current Print preset, potentially making it dirty $preset->_dirty_config->apply($self->{settings_override_config}); # If this is a configured shortcut (and not just a dirty option), # save it now. if (any { $_ eq $opt_key } @{$preset->dirty_config->shortcuts}) { $preset->save([$opt_key]); } } $self->load_presets; $self->config_changed; # Reload the open tab if any if (my $print_tab = $self->GetFrame->{preset_editor_tabs}{print}) { $print_tab->load_presets; $print_tab->reload_preset; } }); $o->can_add(0); $o->can_delete(1); $o->set_opt_keys([ Slic3r::GUI::PresetEditor::Print->options ]); $self->{settings_override_config} = Slic3r::Config->new; $o->set_default_config($self->{settings_override_config}); $o->set_config($self->{settings_override_config}); } my $object_info_sizer; { my $box = Wx::StaticBox->new($self, -1, "Info"); $object_info_sizer = Wx::StaticBoxSizer->new($box, wxVERTICAL); $object_info_sizer->SetMinSize([350,-1]); { my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $object_info_sizer->Add($sizer, 0, wxEXPAND | wxBOTTOM, 5); my $text = Wx::StaticText->new($self, -1, "Object:", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); $text->SetFont($Slic3r::GUI::small_font); $sizer->Add($text, 0, wxALIGN_CENTER_VERTICAL); # We supply a bogus width to wxChoice (sizer will override it and stretch # the control anyway), because if we leave the default (-1) it will stretch # too much according to the contents, and this is bad with long file names. $self->{object_info_choice} = Wx::Choice->new($self, -1, wxDefaultPosition, [100,-1], []); $self->{object_info_choice}->SetFont($Slic3r::GUI::small_font); $sizer->Add($self->{object_info_choice}, 1, wxALIGN_CENTER_VERTICAL); EVT_CHOICE($self, $self->{object_info_choice}, sub { $self->select_object($self->{object_info_choice}->GetSelection); $self->refresh_canvases; }); } my $grid_sizer = Wx::FlexGridSizer->new(3, 4, 5, 5); $grid_sizer->SetFlexibleDirection(wxHORIZONTAL); $grid_sizer->AddGrowableCol(1, 1); $grid_sizer->AddGrowableCol(3, 1); $object_info_sizer->Add($grid_sizer, 0, wxEXPAND); my @info = ( copies => "Copies", size => "Size", volume => "Volume", facets => "Facets", materials => "Materials", manifold => "Manifold", ); while (my $field = shift @info) { my $label = shift @info; my $text = Wx::StaticText->new($self, -1, "$label:", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); $text->SetFont($Slic3r::GUI::small_font); $grid_sizer->Add($text, 0); $self->{"object_info_$field"} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); $self->{"object_info_$field"}->SetFont($Slic3r::GUI::small_font); if ($field eq 'manifold') { $self->{object_info_manifold_warning_icon} = Wx::StaticBitmap->new($self, -1, Wx::Bitmap->new($Slic3r::var->("error.png"), wxBITMAP_TYPE_PNG)); $self->{object_info_manifold_warning_icon}->Hide; my $h_sizer = Wx::BoxSizer->new(wxHORIZONTAL); $h_sizer->Add($self->{object_info_manifold_warning_icon}, 0); $h_sizer->Add($self->{"object_info_$field"}, 0); $grid_sizer->Add($h_sizer, 0, wxEXPAND); } else { $grid_sizer->Add($self->{"object_info_$field"}, 0); } } } my $print_info_sizer; { my $box = Wx::StaticBox->new($self, -1, "Print Summary"); $print_info_sizer = Wx::StaticBoxSizer->new($box, wxVERTICAL); $print_info_sizer->SetMinSize([350,-1]); my $grid_sizer = Wx::FlexGridSizer->new(2, 2, 5, 5); $grid_sizer->SetFlexibleDirection(wxHORIZONTAL); $grid_sizer->AddGrowableCol(1, 1); $grid_sizer->AddGrowableCol(3, 1); $print_info_sizer->Add($grid_sizer, 0, wxEXPAND); my @info = ( fil => "Used Filament", cost => "Cost", ); while (my $field = shift @info) { my $label = shift @info; my $text = Wx::StaticText->new($self, -1, "$label:", wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); $text->SetFont($Slic3r::GUI::small_font); $grid_sizer->Add($text, 0); $self->{"print_info_$field"} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); $self->{"print_info_$field"}->SetFont($Slic3r::GUI::small_font); $grid_sizer->Add($self->{"print_info_$field"}, 0); } $self->{sliced_info_box} = $print_info_sizer; } my $buttons_sizer = Wx::BoxSizer->new(wxHORIZONTAL); $buttons_sizer->AddStretchSpacer(1); $buttons_sizer->Add($self->{btn_export_stl}, 0, wxALIGN_RIGHT, 0); $buttons_sizer->Add($self->{btn_print}, 0, wxALIGN_RIGHT, 0); $buttons_sizer->Add($self->{btn_send_gcode}, 0, wxALIGN_RIGHT, 0); $buttons_sizer->Add($self->{btn_export_gcode}, 0, wxALIGN_RIGHT, 0); $self->{right_sizer} = my $right_sizer = Wx::BoxSizer->new(wxVERTICAL); $right_sizer->Add($presets, 0, wxEXPAND | wxTOP, 10) if defined $presets; $right_sizer->Add($buttons_sizer, 0, wxEXPAND | wxBOTTOM, 5); $right_sizer->Add($self->{settings_override_panel}, 1, wxEXPAND, 5); $right_sizer->Add($object_info_sizer, 0, wxEXPAND, 0); $right_sizer->Add($print_info_sizer, 0, wxEXPAND, 0); $right_sizer->Hide($print_info_sizer); my $hsizer = Wx::BoxSizer->new(wxHORIZONTAL); $hsizer->Add($self->{preview_notebook}, 1, wxEXPAND | wxTOP, 1); $hsizer->Add($right_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, 3); my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($self->{htoolbar}, 0, wxEXPAND, 0) if $self->{htoolbar}; $sizer->Add($self->{btoolbar}, 0, wxEXPAND, 0) if $self->{btoolbar}; $sizer->Add($hsizer, 1, wxEXPAND, 0); $sizer->SetSizeHints($self); $self->SetSizer($sizer); } $self->load_presets; $self->_on_select_preset($_) for qw(printer filament print); return $self; } sub prompt_unsaved_changes { my ($self) = @_; foreach my $group (qw(printer filament print)) { foreach my $choice (@{$self->{preset_choosers}{$group}}) { my $pp = $self->{preset_choosers_names}{$choice}; for my $i (0..$#$pp) { my $preset = first { $_->name eq $pp->[$i] } @{wxTheApp->presets->{$group}}; if (!$preset->prompt_unsaved_changes($self)) { # Restore the previous one $choice->SetSelection($i); return 0; } } } } return 1; } sub _on_change_combobox { my ($self, $group, $choice) = @_; if (0) { # This code is disabled because wxPerl doesn't provide GetCurrentSelection my $current_name = $self->{preset_choosers_names}{$choice}[$choice->GetCurrentSelection]; my $current = first { $_->name eq $current_name } @{wxTheApp->presets->{$group}}; if (!$current->prompt_unsaved_changes($self)) { # Restore the previous one $choice->SetSelection($choice->GetCurrentSelection); return; } } else { return 0 if !$self->prompt_unsaved_changes; } wxTheApp->CallAfter(sub { # Close the preset editor tab if any if (exists $self->GetFrame->{preset_editor_tabs}{$group}) { my $tabpanel = $self->GetFrame->{tabpanel}; $tabpanel->DeletePage($tabpanel->GetPageIndex($self->GetFrame->{preset_editor_tabs}{$group})); delete $self->GetFrame->{preset_editor_tabs}{$group}; $tabpanel->SetSelection(0); # without this, a newly created tab will not be selected by wx } $self->_on_select_preset($group); # This will remove the "(modified)" mark from any dirty preset handled here. $self->load_presets; }); } sub _on_select_preset { my ($self, $group) = @_; my @presets = $self->selected_presets($group); my $s_presets = $Slic3r::GUI::Settings->{presets}; my $changed = !$s_presets->{$group} || $s_presets->{$group} ne $presets[0]->name; $s_presets->{$group} = $presets[0]->name; $s_presets->{"${group}_${_}"} = $presets[$_]->name for 1..$#presets; wxTheApp->save_settings; # Ignore overrides in the plater, we only care about the preset configs. my $config = $self->config(1); $self->on_extruders_change(scalar @{$config->get('nozzle_diameter')}); if ($group eq 'print') { my $o_config = $self->{settings_override_config}; my $o_panel = $self->{settings_override_panel}; my $shortcuts = $config->get('shortcuts'); # Re-populate the override panel with the configured shortcuts # and the dirty options. $o_config->clear; foreach my $opt_key (@$shortcuts, $presets[0]->dirty_options) { # Don't add shortcut for shortcuts! next if $opt_key eq 'shortcuts'; $o_config->set($opt_key, $config->get($opt_key)); } $o_panel->set_default_config($config); $o_panel->set_fixed_options(\@$shortcuts); $o_panel->update_optgroup; } elsif ($group eq 'printer') { # reload print and filament settings to honor their compatible_printer options $self->load_presets; } $self->config_changed; } sub load_config { my ($self, $config) = @_; # This method is called with the CLI options. # We add them to the visible overrides. $self->{settings_override_config}->apply($config); $self->{settings_override_panel}->update_optgroup; $self->config_changed; } sub GetFrame { my ($self) = @_; return &Wx::GetTopLevelParent($self); } sub load_presets { my ($self) = @_; my $selected_printer_name; foreach my $group (qw(printer filament print)) { my @presets = @{wxTheApp->presets->{$group}}; # Skip presets not compatible with the selected printer, if they # have other compatible printers configured (and at least one of them exists). if ($group eq 'filament' || $group eq 'print') { my %printer_names = map { $_->name => 1 } @{ wxTheApp->presets->{printer} }; for (my $i = 0; $i <= $#presets; ++$i) { my $config = $presets[$i]->dirty_config; next if !$config->has('compatible_printers'); my @compat = @{$config->compatible_printers}; if (@compat && (none { $_ eq $selected_printer_name } @compat) && (any { $printer_names{$_} } @compat)) { splice @presets, $i, 1; --$i; } } } # Only show the default presets if we have no other presets. if (@presets > 1) { @presets = grep { !$_->default } @presets; } # get the wxChoice objects for this group my @choosers = @{ $self->{preset_choosers}{$group} }; # find the currently selected one(s) according to the saved file my @sel = (); if (my $current = $Slic3r::GUI::Settings->{presets}{$group}) { push @sel, grep defined, first { $presets[$_]->name eq $current } 0..$#presets; } for my $i (1..(@choosers-1)) { if (my $current = $Slic3r::GUI::Settings->{presets}{"${group}_$i"}) { push @sel, grep defined, first { $presets[$_]->name eq $current } 0..$#presets; } } @sel = (0) if !@sel; # populate the wxChoice objects my @preset_names = (); foreach my $choice (@choosers) { $choice->Clear; $self->{preset_choosers_names}{$choice} = []; foreach my $preset (@presets) { # load/generate the proper icon my $bitmap; if ($group eq 'filament') { my $config = $preset->dirty_config; if ($preset->default || !$config->has('filament_colour')) { $bitmap = Wx::Bitmap->new($Slic3r::var->("spool.png"), wxBITMAP_TYPE_PNG); } else { my $rgb_hex = $config->filament_colour->[0]; $rgb_hex =~ s/^#//; my @rgb = unpack 'C*', pack 'H*', $rgb_hex; my $image = Wx::Image->new(16,16); $image->SetRGB(Wx::Rect->new(0,0,16,16), @rgb); $bitmap = Wx::Bitmap->new($image); } } elsif ($group eq 'print') { $bitmap = Wx::Bitmap->new($Slic3r::var->("cog.png"), wxBITMAP_TYPE_PNG); } elsif ($group eq 'printer') { $bitmap = Wx::Bitmap->new($Slic3r::var->("printer_empty.png"), wxBITMAP_TYPE_PNG); } $choice->AppendString($preset->dropdown_name, $bitmap); push @{$self->{preset_choosers_names}{$choice}}, $preset->name; } my $selected = shift @sel; if (defined $selected && $selected <= $#presets) { # call SetSelection() only after SetString() otherwise the new string # won't be picked up as the visible string $choice->SetSelection($selected); my $preset_name = $self->{preset_choosers_names}{$choice}[$selected]; push @preset_names, $preset_name; # TODO: populate other filament preset placeholders $selected_printer_name = $preset_name if $group eq 'printer'; } } $self->{print}->placeholder_parser->set_multiple("${group}_preset", [ @preset_names ]); } } sub select_preset_by_name { my ($self, $name, $group, $n) = @_; # $n is optional my $presets = wxTheApp->presets->{$group}; my $choosers = $self->{preset_choosers}{$group}; my $names = $self->{preset_choosers_names}{$choosers->[0]}; my $i = first { $names->[$_] eq $name } 0..$#$names; return if !defined $i; if (defined $n && $n <= $#$choosers) { $choosers->[$n]->SetSelection($i); } else { $_->SetSelection($i) for @$choosers; } $self->_on_select_preset($group); } sub selected_presets { my ($self, $group) = @_; my %presets = (); foreach my $group (qw(printer filament print)) { $presets{$group} = []; foreach my $choice (@{$self->{preset_choosers}{$group}}) { my $sel = $choice->GetSelection; $sel = 0 if $sel == -1; push @{ $presets{$group} }, grep { $_->name eq $self->{preset_choosers_names}{$choice}[$sel] } @{wxTheApp->presets->{$group}}; } } return $group ? @{$presets{$group}} : %presets; } sub show_preset_editor { my ($self, $group, $i) = @_; wxTheApp->CallAfter(sub { my @presets = $self->selected_presets($group); my $preset_editor; my $dlg; my $mainframe = $self->GetFrame; my $tabpanel = $mainframe->{tabpanel}; if (exists $mainframe->{preset_editor_tabs}{$group}) { # we already have an open editor $tabpanel->SetSelection($tabpanel->GetPageIndex($mainframe->{preset_editor_tabs}{$group})); return; } elsif ($Slic3r::GUI::Settings->{_}{tabbed_preset_editors}) { my $class = "Slic3r::GUI::PresetEditor::" . ucfirst($group); $mainframe->{preset_editor_tabs}{$group} = $preset_editor = $class->new($self->GetFrame); $tabpanel->AddPage($preset_editor, ucfirst($group) . " Settings", 1); } else { my $class = "Slic3r::GUI::PresetEditorDialog::" . ucfirst($group); $dlg = $class->new($self); $preset_editor = $dlg->preset_editor; } $preset_editor->select_preset_by_name($presets[$i // 0]->name); $preset_editor->on_value_change(sub { # Re-load the presets in order to toggle the (modified) suffix $self->load_presets; # Update shortcuts $self->_on_select_preset($group); # Use the new config wherever we actually use its contents $self->config_changed; }); my $cb = sub { my ($group, $preset) = @_; # Re-load the presets as they might have changed. $self->load_presets; # Select the preset in plater too $self->select_preset_by_name($preset->name, $group, $i, 1); }; $preset_editor->on_select_preset($cb); $preset_editor->on_save_preset($cb); if ($dlg) { $dlg->Show; } }); } # Returns the current config by merging the selected presets and the overrides. sub config { my ($self, $ignore_overrides) = @_; # use a DynamicConfig because FullPrintConfig is not enough my $config = Slic3r::Config->new_from_defaults; # get defaults also for the values tracked by the Plater's config # (for example 'shortcuts') $config->apply(Slic3r::Config->new_from_defaults(@{$self->{config}->get_keys})); my %classes = map { $_ => "Slic3r::GUI::PresetEditor::".ucfirst($_) } qw(print filament printer); my %presets = $self->selected_presets; $config->apply($_->dirty_config) for @{ $presets{printer} }; if (@{ $presets{filament} }) { my $filament_config = $presets{filament}[0]->dirty_config; for my $i (1..$#{ $presets{filament} }) { my $preset = $presets{filament}[$i]; my $config = $preset->dirty_config; foreach my $opt_key (@{$config->get_keys}) { if ($filament_config->has($opt_key)) { my $value = $filament_config->get($opt_key); next unless ref $value eq 'ARRAY'; $value->[$i] = $config->get($opt_key)->[0]; $filament_config->set($opt_key, $value); } } } $config->apply($filament_config); } $config->apply($_->dirty_config) for @{ $presets{print} }; $config->apply($self->{settings_override_config}) unless $ignore_overrides; return $config; } sub get_object_index { my $self = shift; my ($object_indentifier) = @_; return undef if !defined $object_indentifier; for (my $i = 0; $i <= $#{$self->{objects}}; $i++){ if ($self->{objects}->[$i]->identifier eq $object_indentifier) { return $i; } } return undef; } sub add_undo_operation { my $self = shift; my @parameters = @_; my $type = $parameters[0]; my $object_identifier = $parameters[1]; my @attributes = @parameters[2..$#parameters]; # operation values. my $new_undo_operation = new Slic3r::GUI::Plater::UndoOperation($type, $object_identifier, \@attributes); push @{$self->{undo_stack}}, $new_undo_operation; $self->{redo_stack} = []; $self->limit_undo_operations(8); # Current limit of undo/redo operations. $self->GetFrame->on_undo_redo_stacks_changed; return $new_undo_operation; } sub limit_undo_operations { my ($self, $limit)= @_; return if !defined $limit; # Delete undo operations succeeded by 4 operations or more to save memory. while ($#{$self->{undo_stack}} + 1 > $limit) { print "Removing an old operation.\n"; splice @{$self->{undo_stack}}, 0, 1; } } sub undo { my $self = shift; my $operation = pop @{$self->{undo_stack}}; return if !defined $operation; push @{$self->{redo_stack}}, $operation; my $type = $operation->{type}; if ($type eq "ROTATE") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $angle = $operation->{attributes}->[0]; my $axis = $operation->{attributes}->[1]; $self->rotate(-1 * $angle, $axis, 'true'); # Apply inverse transformation. } elsif ($type eq "INCREASE") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $copies = $operation->{attributes}->[0]; $self->decrease($copies, 'true'); } elsif ($type eq "DECREASE") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $copies = $operation->{attributes}->[0]; $self->increase($copies, 'true'); } elsif ($type eq "MIRROR") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $axis = $operation->{attributes}->[0]; $self->mirror($axis, 'true'); } elsif ($type eq "REMOVE") { my $_model = $operation->{attributes}->[0]; $self->load_model_objects(@{$_model->objects}); $self->{object_identifier}--; # Decrement the identifier as we will change the object identifier with the saved one. $self->{objects}->[-1]->identifier($operation->{object_identifier}); } elsif ($type eq "CUT" || $type eq "SPLIT") { # Delete the produced objects. my $obj_identifiers_start = $operation->{attributes}->[2]; for (my $i_object = 0; $i_object < $#{$operation->{attributes}->[1]->objects} + 1; $i_object++) { $self->remove($self->get_object_index($obj_identifiers_start++), 'true'); } # Add the original object. $self->load_model_objects(@{$operation->{attributes}->[0]->objects}); $self->{object_identifier}--; $self->{objects}->[-1]->identifier($operation->{object_identifier}); # Add the original assigned identifier. } elsif ($type eq "CHANGE_SCALE") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $axis = $operation->{attributes}->[0]; my $tosize = $operation->{attributes}->[1]; my $saved_scale = $operation->{attributes}->[3]; $self->changescale($axis, $tosize, $saved_scale, 'true'); } elsif ($type eq "RESET") { # Revert changes to the plater object identifier. It's modified when adding new objects only not when undo/redo is executed. my $current_objects_identifier = $self->{object_identifier}; my $_model = $operation->{attributes}->[0]; $self->load_model_objects(@{$_model->objects}); $self->{object_identifier} = $current_objects_identifier; # don't forget the identifiers. my $objects_count = $#{$operation->{attributes}->[0]->objects} + 1; foreach my $identifier (@{$operation->{attributes}->[1]}) { $self->{objects}->[-$objects_count]->identifier($identifier); $objects_count--; } } elsif ($type eq "ADD") { my $objects_count = $#{$operation->{attributes}->[0]->objects} + 1; my $identifier_start = $operation->{attributes}->[1]; for (my $identifier = $identifier_start; $identifier < $objects_count + $identifier_start; $identifier++) { my $obj_idx = $self->get_object_index($identifier); $self->remove($obj_idx, 'true'); } } } sub redo { my $self = shift; my $operation = pop @{$self->{redo_stack}}; return if !defined $operation; push @{$self->{undo_stack}}, $operation; my $type = $operation->{type}; if ($type eq "ROTATE") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $angle = $operation->{attributes}->[0]; my $axis = $operation->{attributes}->[1]; $self->rotate($angle, $axis, 'true'); } elsif ($type eq "INCREASE") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $copies = $operation->{attributes}->[0]; $self->increase($copies, 'true'); } elsif ($type eq "DECREASE") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $copies = $operation->{attributes}->[0]; $self->decrease($copies, 'true'); } elsif ($type eq "MIRROR") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $axis = $operation->{attributes}->[0]; $self->mirror($axis, 'true'); } elsif ($type eq "REMOVE") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); $self->remove(undef, 'true'); } elsif ($type eq "CUT" || $type eq "SPLIT") { # Delete the org objects. $self->remove($self->get_object_index($operation->{object_identifier}), 'true'); # Add the new objects and revert changes to the plater object identifier. my $current_objects_identifier = $self->{object_identifier}; $self->load_model_objects(@{$operation->{attributes}->[1]->objects}); $self->{object_identifier} = $current_objects_identifier; # Add their identifiers. my $obj_identifiers_start = $operation->{attributes}->[2]; my $obj_count = $#{$operation->{attributes}->[1]->objects} + 1; for (my $i_object = 0; $i_object <= $#{$operation->{attributes}->[1]->objects}; $i_object++){ $self->{objects}->[-$obj_count]->identifier($obj_identifiers_start++); $obj_count--; } } elsif ($type eq "CHANGE_SCALE") { my $object_id = $operation->{object_identifier}; my $obj_idx = $self->get_object_index($object_id); $self->select_object($obj_idx); my $axis = $operation->{attributes}->[0]; my $tosize = $operation->{attributes}->[1]; my $old_scale = $operation->{attributes}->[2]; $self->changescale($axis, $tosize, $old_scale, 'true'); } elsif ($type eq "RESET") { $self->reset('true'); } elsif ($type eq "ADD") { # Revert changes to the plater object identifier. It's modified when adding new objects only not when undo/redo is executed. my $current_objects_identifier = $self->{object_identifier}; $self->load_model_objects(@{$operation->{attributes}->[0]->objects}); $self->{object_identifier} = $current_objects_identifier; my $objects_count = $#{$operation->{attributes}->[0]->objects} + 1; my $start_identifier = $operation->{attributes}->[1]; foreach my $object (@{$operation->{attributes}->[0]->objects}) { $self->{objects}->[-$objects_count]->identifier($start_identifier++); $objects_count--; } } } sub add { my $self = shift; # Save the current object identifier to track added objects. my $start_object_id = $self->{object_identifier}; my @input_files = wxTheApp->open_model($self); $self->load_file($_) for @input_files; # Check if no objects are added. if ($start_object_id == $self->{object_identifier}) { return; } # Save the added objects. my $new_model = $self->{model}->new; # Get newly added objects count. my $new_objects_count = $self->{object_identifier} - $start_object_id; for (my $i_object = $start_object_id; $i_object < $new_objects_count + $start_object_id; $i_object++){ my $object_index = $self->get_object_index($i_object); $new_model->add_object($self->{model}->get_object($object_index)); } $self->add_undo_operation("ADD", undef, $new_model, $start_object_id); } sub add_tin { my $self = shift; my @input_files = wxTheApp->open_model($self); return if !@input_files; my $offset = Wx::GetNumberFromUser("", "Enter the minimum thickness in mm (i.e. the offset from the lowest point):", "2.5D TIN", 5, 0, 1000000, $self); return if $offset < 0; foreach my $input_file (@input_files) { my $model = eval { Slic3r::Model->read_from_file($input_file) }; Slic3r::GUI::show_error($self, $@) if $@; next if !$model; if ($model->looks_like_multipart_object) { Slic3r::GUI::show_error($self, "Multi-part models cannot be opened as 2.5D TIN files. Please load a single continuous mesh."); next; } my $model_object = $model->get_object(0); eval { $model_object->get_volume(0)->extrude_tin($offset); }; Slic3r::GUI::show_error($self, $@) if $@; $self->load_model_objects($model_object); } } sub load_file { my $self = shift; my ($input_file, $obj_idx_to_load) = @_; $Slic3r::GUI::Settings->{recent}{skein_directory} = dirname($input_file); wxTheApp->save_settings; my $process_dialog = Wx::ProgressDialog->new('Loading…', "Processing input file…", 100, $self, 0); $process_dialog->Pulse; local $SIG{__WARN__} = Slic3r::GUI::warning_catcher($self); my $model = eval { Slic3r::Model->read_from_file($input_file) }; Slic3r::GUI::show_error($self, $@) if $@; my @obj_idx = (); if (defined $model) { if ($model->looks_like_multipart_object) { my $dialog = Wx::MessageDialog->new($self, "This file contains several objects positioned at multiple heights. " . "Instead of considering them as multiple objects, should I consider\n" . "this file as a single object having multiple parts?\n", 'Multi-part object detected', wxICON_WARNING | wxYES | wxNO); if ($dialog->ShowModal() == wxID_YES) { $model->convert_multipart_object; } } for my $obj_idx (0..($model->objects_count-1)) { my $object = $model->objects->[$obj_idx]; $object->set_input_file($input_file); for my $vol_idx (0..($object->volumes_count-1)) { my $volume = $object->get_volume($vol_idx); $volume->set_input_file($input_file); $volume->set_input_file_obj_idx($obj_idx); $volume->set_input_file_obj_idx($vol_idx); } } my $i = 0; if (defined $obj_idx_to_load) { return () if $obj_idx_to_load >= $model->objects_count; @obj_idx = $self->load_model_objects($model->get_object($obj_idx_to_load)); $i = $obj_idx_to_load; } else { @obj_idx = $self->load_model_objects(@{$model->objects}); } foreach my $obj_idx (@obj_idx) { $self->{objects}[$obj_idx]->input_file($input_file); $self->{objects}[$obj_idx]->input_file_obj_idx($i++); } $self->statusbar->SetStatusText("Loaded " . basename($input_file)); if($self->{scaled_down}) { $self->statusbar->SetStatusText('Your object appears to be too large, so it was automatically scaled down to fit your print bed.'); } if($self->{outside_bounds}) { $self->statusbar->SetStatusText('Some of your object(s) appear to be outside the print bed. Use the arrange button to correct this.'); } } $process_dialog->Destroy; # Empty the redo stack $self->{redo_stack} = []; return @obj_idx; } sub load_model_objects { my ($self, @model_objects) = @_; # Always restart background process when adding new objects. # This prevents lack of processing in some circumstances when background process is # running but adding a new object does not invalidate anything. $self->stop_background_process; my $bed_centerf = $self->bed_centerf; my $bed_shape = Slic3r::Polygon->new_scale(@{$self->{config}->bed_shape}); my $bed_size = $bed_shape->bounding_box->size; my $need_arrange = 0; my @obj_idx = (); foreach my $model_object (@model_objects) { my $o = $self->{model}->add_object($model_object); $o->repair; push @{ $self->{objects} }, Slic3r::GUI::Plater::Object->new( name => $model_object->name || basename($model_object->input_file), identifier => $self->{object_identifier}++ ); push @obj_idx, $#{ $self->{objects} }; if ($model_object->instances_count == 0) { if ($Slic3r::GUI::Settings->{_}{autocenter}) { # if object has no defined position(s) we need to rearrange everything after loading $need_arrange = 1; # add a default instance and center object around origin $o->center_around_origin; # also aligns object to Z = 0 $o->add_instance(offset => $bed_centerf); } else { # if user turned autocentering off, automatic arranging would disappoint them $need_arrange = 0; if ($Slic3r::GUI::Settings->{_}{autoalignz}) { $o->align_to_ground; # aligns object to Z = 0 } $o->add_instance(); } } else { if ($Slic3r::GUI::Settings->{_}{autoalignz}) { # if object has defined positions we still need to ensure it's aligned to Z = 0 $o->align_to_ground; } } { # if the object is too large (more than 5 times the bed), scale it down my $size = $o->bounding_box->size; my $ratio = max(@$size[X,Y]) / unscale(max(@$bed_size[X,Y])); if ($ratio > 5) { $_->set_scaling_factor(1/$ratio) for @{$o->instances}; $self->{scaled_down} = 1; } } { # if after scaling the object does not fit on the bed provide a warning my $bed_bounds = Slic3r::Geometry::BoundingBoxf->new_from_points($self->{config}->bed_shape); my $o_bounds = $o->bounding_box; my $min = Slic3r::Pointf->new($o_bounds->x_min, $o_bounds->y_min); my $max = Slic3r::Pointf->new($o_bounds->x_max, $o_bounds->y_max); if (!$bed_bounds->contains_point($min) || !$bed_bounds->contains_point($max)) { $self->{outside_bounds} = 1; } } $self->{print}->auto_assign_extruders($o); $self->{print}->add_model_object($o); } $self->make_thumbnail($_) for @obj_idx; $self->arrange if $need_arrange; $self->on_model_change; # zoom to objects $self->{canvas3D}->zoom_to_volumes if $self->{canvas3D}; $self->object_list_changed; return @obj_idx; } sub bed_centerf { my ($self) = @_; my $bed_shape = Slic3r::Polygon->new_scale(@{$self->{config}->bed_shape}); my $bed_center = $bed_shape->bounding_box->center; return Slic3r::Pointf->new(unscale($bed_center->x), unscale($bed_center->y)); #) } sub remove { my $self = shift; my ($obj_idx, $dont_push) = @_; $self->stop_background_process; # Prevent toolpaths preview from rendering while we modify the Print object $self->{toolpaths2D}->enabled(0) if $self->{toolpaths2D}; $self->{preview3D}->enabled(0) if $self->{preview3D}; # if no object index is supplied, remove the selected one if (!defined $obj_idx) { ($obj_idx, undef) = $self->selected_object; } # Save the object identifier and copy the object for undo/redo operations. my $object_id = $self->{objects}->[$obj_idx]->identifier; my $new_model = Slic3r::Model->new; # store this before calling get_object() $new_model->add_object($self->{model}->get_object($obj_idx)); splice @{$self->{objects}}, $obj_idx, 1; $self->{model}->delete_object($obj_idx); $self->{print}->delete_object($obj_idx); $self->object_list_changed; $self->select_object(undef); $self->on_model_change; if (!defined $dont_push) { $self->add_undo_operation("REMOVE", $object_id, $new_model); } } sub reset { my ($self, $dont_push) = @_; $self->stop_background_process; # Prevent toolpaths preview from rendering while we modify the Print object $self->{toolpaths2D}->enabled(0) if $self->{toolpaths2D}; $self->{preview3D}->enabled(0) if $self->{preview3D}; # Save the current model. my $current_model = $self->{model}->clone; if (!defined $dont_push) { # Get the identifiers of the curent model objects. my $objects_identifiers = []; for (my $i = 0; $i <= $#{$self->{objects}}; $i++){ push @{$objects_identifiers}, $self->{objects}->[$i]->identifier; } $self->add_undo_operation("RESET", undef, $current_model, $objects_identifiers); } @{$self->{objects}} = (); $self->{model}->clear_objects; $self->{print}->clear_objects; $self->object_list_changed; $self->select_object(undef); $self->on_model_change; } sub increase { my ($self, $copies, $dont_push) = @_; $copies //= 1; my ($obj_idx, $object) = $self->selected_object; my $model_object = $self->{model}->objects->[$obj_idx]; my $instance = $model_object->instances->[-1]; for my $i (1..$copies) { $instance = $model_object->add_instance( offset => Slic3r::Pointf->new(map 10+$_, @{$instance->offset}), z_translation => $instance->z_translation, scaling_factor => $instance->scaling_factor, scaling_vector => $instance->scaling_vector, rotation => $instance->rotation, x_rotation => $instance->x_rotation, y_rotation => $instance->y_rotation, ); $self->{print}->objects->[$obj_idx]->add_copy($instance->offset); } if (!defined $dont_push) { $self->add_undo_operation("INCREASE", $object->identifier , $copies); } # only autoarrange if user has autocentering enabled $self->stop_background_process; if ($Slic3r::GUI::Settings->{_}{autocenter}) { $self->arrange; } else { $self->on_model_change; } } sub decrease { my ($self, $copies, $dont_push) = @_; $copies //= 1; $self->stop_background_process; my ($obj_idx, $object) = $self->selected_object; my $model_object = $self->{model}->objects->[$obj_idx]; if ($model_object->instances_count > $copies) { for my $i (1..$copies) { $model_object->delete_last_instance; $self->{print}->objects->[$obj_idx]->delete_last_copy; } if (!defined $dont_push) { $self->add_undo_operation("DECREASE", $object->identifier, $copies); } } else { $self->remove; } $self->on_model_change; } sub set_number_of_copies { my ($self) = @_; $self->pause_background_process; # get current number of copies my ($obj_idx, $object) = $self->selected_object; my $model_object = $self->{model}->objects->[$obj_idx]; # prompt user my $copies = Wx::GetNumberFromUser("", "Enter the number of copies of the selected object:", "Copies", $model_object->instances_count, 0, 1000, $self); return if $copies == -1; my $diff = $copies - $model_object->instances_count; if ($diff == 0) { # no variation $self->resume_background_process; } elsif ($diff > 0) { $self->increase($diff); } elsif ($diff < 0) { $self->decrease(-$diff); } } sub center_selected_object_on_bed { my ($self) = @_; my ($obj_idx, $object) = $self->selected_object; return if !defined $obj_idx; my $model_object = $self->{model}->objects->[$obj_idx]; my $bb = $model_object->bounding_box; my $size = $bb->size; my $vector = Slic3r::Pointf->new( $self->bed_centerf->x - $bb->x_min - $size->x/2, $self->bed_centerf->y - $bb->y_min - $size->y/2, #// ); $_->offset->translate(@$vector) for @{$model_object->instances}; $self->refresh_canvases; } sub rotate { my $self = shift; my ($angle, $axis, $dont_push) = @_; # angle is in degrees $axis //= Z; my ($obj_idx, $object) = $self->selected_object; return if !defined $obj_idx; my $model_object = $self->{model}->objects->[$obj_idx]; my $model_instance = $model_object->instances->[0]; # we need thumbnail to be computed before allowing rotation return if !$object->thumbnail; if (!defined $angle) { my $axis_name = $axis == X ? 'X' : $axis == Y ? 'Y' : 'Z'; my $default = $axis == Z ? rad2deg($model_instance->rotation) : 0; # Wx::GetNumberFromUser() does not support decimal numbers $angle = Wx::GetTextFromUser("Enter the rotation angle:", "Rotate around $axis_name axis", $default, $self); return if !$angle || $angle !~ /^-?\d*(?:\.\d*)?$/ || $angle == -1; } $self->stop_background_process; if ($axis == Z) { my $new_angle = deg2rad($angle); $_->set_rotation($_->rotation + $new_angle) for @{ $model_object->instances }; $object->transform_thumbnail($self->{model}, $obj_idx); } else { # rotation around X and Y needs to be performed on mesh # so we first apply any Z rotation $model_object->transform_by_instance($model_instance, 1); $model_object->rotate(deg2rad($angle), $axis); # realign object to Z = 0 $model_object->center_around_origin; $self->make_thumbnail($obj_idx); } $model_object->update_bounding_box; # update print and start background processing $self->{print}->add_model_object($model_object, $obj_idx); if (!defined $dont_push) { $self->add_undo_operation("ROTATE", $object->identifier, $angle, $axis); } $self->selection_changed; # refresh info (size etc.) $self->on_model_change; } sub mirror { my ($self, $axis, $dont_push) = @_; my ($obj_idx, $object) = $self->selected_object; return if !defined $obj_idx; my $model_object = $self->{model}->objects->[$obj_idx]; my $model_instance = $model_object->instances->[0]; # apply Z rotation before mirroring $model_object->transform_by_instance($model_instance, 1); $model_object->mirror($axis); $model_object->update_bounding_box; # realign object to Z = 0 $model_object->center_around_origin; $self->make_thumbnail($obj_idx); # update print and start background processing $self->stop_background_process; $self->{print}->add_model_object($model_object, $obj_idx); if (!defined $dont_push) { $self->add_undo_operation("MIRROR", $object->identifier, $axis); } $self->selection_changed; # refresh info (size etc.) $self->on_model_change; } sub changescale { my ($self, $axis, $tosize, $saved_scale, $dont_push) = @_; my ($obj_idx, $object) = $self->selected_object; return if !defined $obj_idx; my $model_object = $self->{model}->objects->[$obj_idx]; my $model_instance = $model_object->instances->[0]; # we need thumbnail to be computed before allowing scaling return if !$object->thumbnail; my $object_size = $model_object->bounding_box->size; my $bed_size = Slic3r::Polygon->new_scale(@{$self->{config}->bed_shape})->bounding_box->size; my $old_scale; my $scale; if (defined $axis) { my $axis_name = $axis == X ? 'X' : $axis == Y ? 'Y' : 'Z'; if (!defined $saved_scale) { if ($tosize) { my $cursize = $object_size->[$axis]; # Wx::GetNumberFromUser() does not support decimal numbers my $newsize = Wx::GetTextFromUser( sprintf("Enter the new size for the selected object (print bed: %smm):", $bed_size->[$axis]), "Scale along $axis_name", $cursize, $self); return if !$newsize || $newsize !~ /^\d*(?:\.\d*)?$/ || $newsize < 0; $scale = $newsize / $cursize * 100; $old_scale = $cursize / $newsize * 100; } else { # Wx::GetNumberFromUser() does not support decimal numbers $scale = Wx::GetTextFromUser("Enter the scale % for the selected object:", "Scale along $axis_name", 100, $self); $scale =~ s/%$//; return if !$scale || $scale !~ /^\d*(?:\.\d*)?$/ || $scale < 0; $old_scale = 100 * 100 / $scale; } } else { $scale = $saved_scale; } # apply Z rotation before scaling $model_object->transform_by_instance($model_instance, 1); my $versor = [1,1,1]; $versor->[$axis] = $scale/100; $model_object->scale_xyz(Slic3r::Pointf3->new(@$versor)); # object was already aligned to Z = 0, so no need to realign it $self->make_thumbnail($obj_idx); } else { if (!defined $saved_scale) { if ($tosize) { my $cursize = max(@$object_size); # Wx::GetNumberFromUser() does not support decimal numbers my $newsize = Wx::GetTextFromUser("Enter the new max size for the selected object:", "Scale", $cursize, $self); return if !$newsize || $newsize !~ /^\d*(?:\.\d*)?$/ || $newsize < 0; $scale = $model_instance->scaling_factor * $newsize / $cursize * 100; $old_scale = $model_instance->scaling_factor * 100; } else { # max scale factor should be above 2540 to allow importing files exported in inches # Wx::GetNumberFromUser() does not support decimal numbers $scale = Wx::GetTextFromUser("Enter the scale % for the selected object:", 'Scale', $model_instance->scaling_factor * 100, $self); return if !$scale || $scale !~ /^\d*(?:\.\d*)?$/ || $scale < 0; $old_scale = $model_instance->scaling_factor * 100; } return if !$scale || $scale < 0; } else { $scale = $saved_scale; } $scale /= 100; # turn percent into factor my $variation = $scale / $model_instance->scaling_factor; foreach my $range (@{ $model_object->layer_height_ranges }) { $range->[0] *= $variation; $range->[1] *= $variation; } $_->set_scaling_factor($scale) for @{ $model_object->instances }; $object->transform_thumbnail($self->{model}, $obj_idx); $scale *= 100; } # Add the new undo operation. if (!defined $dont_push) { $self->add_undo_operation("CHANGE_SCALE", $object->identifier, $axis, $tosize, $scale, $old_scale); } $model_object->update_bounding_box; # update print and start background processing $self->stop_background_process; $self->{print}->add_model_object($model_object, $obj_idx); $self->selection_changed(1); # refresh info (size, volume etc.) $self->on_model_change; } sub arrange { my $self = shift; $self->pause_background_process; my $bb = Slic3r::Geometry::BoundingBoxf->new_from_points($self->{config}->bed_shape); my $success = $self->{model}->arrange_objects($self->config->min_object_distance, $bb); # ignore arrange failures on purpose: user has visual feedback and we don't need to warn him # when parts don't fit in print bed $self->statusbar->SetStatusText('Objects were arranged.'); $self->on_model_change(1); } sub split_object { my ($self, $dont_push) = @_; my ($obj_idx, $current_object) = $self->selected_object; # we clone model object because split_object() adds the split volumes # into the same model object, thus causing duplicates when we call load_model_objects() my $new_model = $self->{model}->clone; # store this before calling get_object() my $current_model_object = $new_model->get_object($obj_idx); if ($current_model_object->volumes_count > 1) { Slic3r::GUI::warning_catcher($self)->("The selected object can't be split because it contains more than one volume/material."); return; } $self->pause_background_process; # Save the curent model object for undo/redo operataions. my $org_object_model = Slic3r::Model->new; $org_object_model->add_object($current_model_object); # Save the org object identifier. my $object_id = $self->{objects}->[$obj_idx]->identifier; my @model_objects = @{$current_model_object->split_object}; if (@model_objects == 1) { $self->resume_background_process; Slic3r::GUI::warning_catcher($self)->("The selected object couldn't be split because it contains only one part."); $self->resume_background_process; return; } foreach my $object (@model_objects) { $object->instances->[$_]->offset->translate($_ * 10, $_ * 10) for 1..$#{ $object->instances }; # we need to center this single object around origin $object->center_around_origin; } # remove the original object before spawning the object_loaded event, otherwise # we'll pass the wrong $obj_idx to it (which won't be recognized after the # thumbnail thread returns) $self->remove($obj_idx, 'true'); # Don't push to the undo stack it's considered a split opeation not a remove one. $current_object = $obj_idx = undef; # Save the object identifiers used in undo/redo operations. my $new_objects_id_start = $self->{object_identifier}; print "The new object identifier start for split is " .$new_objects_id_start . "\n"; # load all model objects at once, otherwise the plate would be rearranged after each one # causing original positions not to be kept $self->load_model_objects(@model_objects); # Create two models to save the current object and the resulted objects. my $new_objects_model = Slic3r::Model->new; foreach my $new_object (@model_objects) { $new_objects_model->add_object($new_object); } $self->add_undo_operation("SPLIT", $object_id, $org_object_model, $new_objects_model, $new_objects_id_start); } sub toggle_print_stats { my ($self, $show) = @_; return if !$self->GetFrame->is_loaded; if ($show) { $self->{right_sizer}->Show($self->{sliced_info_box}); } else { $self->{right_sizer}->Hide($self->{sliced_info_box}); } $self->{right_sizer}->Layout; } sub config_changed { my $self = shift; my $config = $self->config; if ($Slic3r::GUI::autosave) { $config->save($Slic3r::GUI::autosave); } # Apply changes to the plater-specific config options. foreach my $opt_key (@{$self->{config}->diff($config)}) { # Ignore overrides. No need to set them in our config; we'll use them directly below. next if $opt_key eq 'overrides'; $self->{config}->set($opt_key, $config->get($opt_key)); if ($opt_key eq 'bed_shape') { $self->{canvas}->update_bed_size; $self->{canvas3D}->update_bed_size if $self->{canvas3D}; $self->{preview3D}->set_bed_shape($self->{config}->bed_shape) if $self->{preview3D}; $self->on_model_change; } elsif ($opt_key eq 'serial_port') { if ($config->get('serial_port')) { $self->{btn_print}->Show; } else { $self->{btn_print}->Hide; } $self->Layout; } elsif ($opt_key eq 'print_host') { if ($config->get('print_host')) { $self->{btn_send_gcode}->Show; } else { $self->{btn_send_gcode}->Hide; } $self->Layout; } } return if !$self->GetFrame->is_loaded; $self->toggle_print_stats(0); if ($Slic3r::GUI::Settings->{_}{background_processing}) { # (re)start timer $self->schedule_background_process; } else { $self->async_apply_config; } } sub schedule_background_process { my ($self) = @_; warn 'schedule_background_process() is not supposed to be called when background processing is disabled' if !$Slic3r::GUI::Settings->{_}{background_processing}; $self->{processed} = 0; if (defined $self->{apply_config_timer}) { $self->{apply_config_timer}->Start(PROCESS_DELAY, 1); # 1 = one shot } } # Executed asynchronously by a timer every PROCESS_DELAY (0.5 second). # The timer is started by schedule_background_process(), sub async_apply_config { my ($self) = @_; # pause process thread before applying new config # since we don't want to touch data that is being used by the threads $self->pause_background_process; # apply new config my $invalidated = $self->{print}->apply_config($self->config); # reset preview canvases (invalidated contents will be hidden) $self->{toolpaths2D}->reload_print if $self->{toolpaths2D}; $self->{preview3D}->reload_print if $self->{preview3D}; $self->{AdaptiveLayersDialog}->reload_preview if $self->{AdaptiveLayersDialog}; if (!$Slic3r::GUI::Settings->{_}{background_processing}) { $self->hide_preview if $invalidated; return; } if ($invalidated) { # kill current thread if any $self->stop_background_process; # remove the sliced statistics box because something changed. $self->toggle_print_stats(0); } else { $self->resume_background_process; } # schedule a new process thread in case it wasn't running $self->start_background_process; } sub start_background_process { my ($self) = @_; return if !$Slic3r::have_threads; return if $self->{process_thread}; if (!@{$self->{objects}}) { $self->on_process_completed; return; } # It looks like declaring a local $SIG{__WARN__} prevents the ugly # "Attempt to free unreferenced scalar" warning... local $SIG{__WARN__} = Slic3r::GUI::warning_catcher($self); # don't start process thread if config is not valid eval { # this will throw errors if config is not valid $self->config->validate; $self->{print}->validate; }; if ($@) { $self->statusbar->SetStatusText($@); return; } if ($Slic3r::GUI::Settings->{_}{threads}) { $self->{print}->config->set('threads', $Slic3r::GUI::Settings->{_}{threads}); } # start thread @_ = (); $self->{process_thread} = Slic3r::spawn_thread(sub { eval { $self->{print}->process; }; if ($@) { Slic3r::debugf "Background process error: $@\n"; Wx::PostEvent($self, Wx::PlThreadEvent->new(-1, $PROCESS_COMPLETED_EVENT, $@)); } else { Wx::PostEvent($self, Wx::PlThreadEvent->new(-1, $PROCESS_COMPLETED_EVENT, undef)); } Slic3r::thread_cleanup(); }); Slic3r::debugf "Background processing started.\n"; } sub stop_background_process { my ($self) = @_; $self->{apply_config_timer}->Stop if defined $self->{apply_config_timer}; $self->statusbar->SetCancelCallback(undef); $self->statusbar->StopBusy; $self->statusbar->SetStatusText(""); $self->{toolpaths2D}->reload_print if $self->{toolpaths2D}; $self->{preview3D}->reload_print if $self->{preview3D}; $self->{AdaptiveLayersDialog}->reload_preview if $self->{AdaptiveLayersDialog}; if ($self->{process_thread}) { Slic3r::debugf "Killing background process.\n"; Slic3r::kill_all_threads(); $self->{process_thread} = undef; } else { Slic3r::debugf "No background process running.\n"; } # if there's an export process, kill that one as well if ($self->{export_thread}) { Slic3r::debugf "Killing background export process.\n"; Slic3r::kill_all_threads(); $self->{export_thread} = undef; } } sub pause_background_process { my ($self) = @_; if ($self->{process_thread} || $self->{export_thread}) { Slic3r::pause_all_threads(); return 1; } elsif (defined $self->{apply_config_timer} && $self->{apply_config_timer}->IsRunning) { $self->{apply_config_timer}->Stop; return 0; # we didn't actually pause any running thread; need to reschedule } return 0; } sub resume_background_process { my ($self) = @_; if ($self->{process_thread} || $self->{export_thread}) { Slic3r::resume_all_threads(); } } sub export_gcode { my ($self, $output_file) = @_; return if !@{$self->{objects}}; if ($self->{export_gcode_output_file}) { Wx::MessageDialog->new($self, "Another export job is currently running.", 'Error', wxOK | wxICON_ERROR)->ShowModal; return; } # if process is not running, validate config # (we assume that if it is running, config is valid) eval { # this will throw errors if config is not valid $self->config->validate; $self->{print}->validate; }; Slic3r::GUI::catch_error($self) and return; # apply config and validate print my $config = $self->config; eval { # this will throw errors if config is not valid $config->validate; $self->{print}->apply_config($config); $self->{print}->validate; }; if (!$Slic3r::have_threads) { Slic3r::GUI::catch_error($self) and return; } # select output file if ($output_file) { $self->{export_gcode_output_file} = $self->{print}->output_filepath($output_file); } else { my $default_output_file = $self->{print}->output_filepath($main::opt{output} // ''); my $dlg = Wx::FileDialog->new($self, 'Save G-code file as:', wxTheApp->output_path(dirname($default_output_file)), basename($default_output_file), &Slic3r::GUI::FILE_WILDCARDS->{gcode}, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if ($dlg->ShowModal != wxID_OK) { $dlg->Destroy; return; } my $path = Slic3r::decode_path($dlg->GetPath); $Slic3r::GUI::Settings->{_}{last_output_path} = dirname($path); wxTheApp->save_settings; $self->{export_gcode_output_file} = $path; $dlg->Destroy; } $self->statusbar->StartBusy; if ($Slic3r::have_threads) { $self->statusbar->SetCancelCallback(sub { $self->stop_background_process; $self->statusbar->SetStatusText("Export cancelled"); $self->{export_gcode_output_file} = undef; $self->{send_gcode_file} = undef; # this updates buttons status $self->object_list_changed; }); # start background process, whose completion event handler # will detect $self->{export_gcode_output_file} and proceed with export $self->start_background_process; } else { eval { $self->{print}->process; $self->{print}->export_gcode(output_file => $self->{export_gcode_output_file}); }; my $result = !Slic3r::GUI::catch_error($self); $self->on_export_completed($result); } # this updates buttons status $self->object_list_changed; $self->toggle_print_stats(1); return $self->{export_gcode_output_file}; } # This gets called only if we have threads. sub on_process_completed { my ($self, $error) = @_; $self->statusbar->SetCancelCallback(undef); $self->statusbar->StopBusy; $self->statusbar->SetStatusText($error // ""); Slic3r::debugf "Background processing completed.\n"; $self->{process_thread}->detach if $self->{process_thread}; $self->{process_thread} = undef; $self->{processed} = 1; # if we're supposed to perform an explicit export let's display the error in a dialog if ($error && $self->{export_gcode_output_file}) { $self->{export_gcode_output_file} = undef; Slic3r::GUI::show_error($self, $error); } return if $error; $self->{toolpaths2D}->reload_print if $self->{toolpaths2D}; $self->{preview3D}->reload_print if $self->{preview3D}; $self->{AdaptiveLayersDialog}->reload_preview if $self->{AdaptiveLayersDialog}; # if we have an export filename, start a new thread for exporting G-code if ($self->{export_gcode_output_file}) { @_ = (); # workaround for "Attempt to free un referenced scalar..." our $_thread_self = $self; $self->{export_thread} = Slic3r::spawn_thread(sub { eval { $_thread_self->{print}->export_gcode(output_file => $_thread_self->{export_gcode_output_file}); }; if ($@) { Wx::PostEvent($_thread_self, Wx::PlThreadEvent->new(-1, $ERROR_EVENT, shared_clone([ $@ ]))); Wx::PostEvent($_thread_self, Wx::PlThreadEvent->new(-1, $EXPORT_COMPLETED_EVENT, 0)); } else { Wx::PostEvent($_thread_self, Wx::PlThreadEvent->new(-1, $EXPORT_COMPLETED_EVENT, 1)); } Slic3r::thread_cleanup(); }); Slic3r::debugf "Background G-code export started.\n"; } } # This gets called also if we have no threads. sub on_progress_event { my ($self, $percent, $message) = @_; $self->statusbar->SetProgress($percent); $self->statusbar->SetStatusText("$message…"); } # This gets called also if we don't have threads. sub on_export_completed { my ($self, $result) = @_; $self->statusbar->SetCancelCallback(undef); $self->statusbar->StopBusy; $self->statusbar->SetStatusText(""); Slic3r::debugf "Background export process completed.\n"; $self->{export_thread}->detach if $self->{export_thread}; $self->{export_thread} = undef; my $message; my $send_gcode = 0; my $do_print = 0; if ($result) { if ($self->{print_file}) { $message = "File added to print queue"; $do_print = 1; } elsif ($self->{send_gcode_file}) { $message = "Sending G-code file to the " . $self->{config}->host_type . " server..."; $send_gcode = 1; } else { $message = "G-code file exported to " . $self->{export_gcode_output_file}; } } else { $message = "Export failed"; } $self->{export_gcode_output_file} = undef; $self->statusbar->SetStatusText($message); wxTheApp->notify($message); $self->do_print if $do_print; $self->send_gcode if $send_gcode; $self->{print_file} = undef; $self->{send_gcode_file} = undef; { my $fil = sprintf( '%.2fcm (%.2fcm³%s)', $self->{print}->total_used_filament / 10, $self->{print}->total_extruded_volume / 1000, $self->{print}->total_weight ? sprintf(', %.2fg', $self->{print}->total_weight) : '', ); my $cost = $self->{print}->total_cost ? sprintf("%.2f" , $self->{print}->total_cost) : 'n.a.'; $self->{print_info_fil}->SetLabel($fil); $self->{print_info_cost}->SetLabel($cost); } # this updates buttons status $self->object_list_changed; } sub do_print { my ($self) = @_; my $controller = $self->GetFrame->{controller} or return; my %current_presets = $self->selected_presets; my $printer_panel = $controller->add_printer($current_presets{printer}->[0], $self->config); my $filament_stats = $self->{print}->filament_stats; $filament_stats = { map { $current_presets{filament}[$_]->name => $filament_stats->{$_} } keys %$filament_stats }; $printer_panel->load_print_job($self->{print_file}, $filament_stats); $self->GetFrame->select_tab(1); } sub prepare_send { my ($self, $skip_dialog) = @_; return if !$self->{btn_send_gcode}->IsEnabled; my $filename = basename($self->{print}->output_filepath($main::opt{output} // '')); if (!$skip_dialog) { # When the alt key is pressed, bypass the dialog. my $dlg = Slic3r::GUI::Plater::OctoPrintSpoolDialog->new($self, $filename); return unless $dlg->ShowModal == wxID_OK; $filename = $dlg->{filename}; } if (!$Slic3r::GUI::Settings->{octoprint}{overwrite}) { my $progress = Wx::ProgressDialog->new('Querying OctoPrint…', "Checking whether file already exists…", 100, $self, 0); $progress->Pulse; my $ua = LWP::UserAgent->new; $ua->timeout(5); my $res; if ($self->{config}->print_host) { if($self->{config}->host_type eq 'octoprint'){ $res = $ua->get( "http://" . $self->{config}->print_host . "/api/files/local", 'X-Api-Key' => $self->{config}->octoprint_apikey, ); }else { $res = $ua->get( "http://" . $self->{config}->print_host . "/rr_files", ); } } $progress->Destroy; if ($res->is_success) { my $searchterm = ($self->{config}->host_type eq 'octoprint') ? '/"name":\s*"\Q$filename\E"/' : '"'.$filename.'"'; if ($res->decoded_content =~ $searchterm) { my $dialog = Wx::MessageDialog->new($self, "It looks like a file with the same name already exists in the server. " . "Shall I overwrite it?", $self->{config}->host_type, wxICON_WARNING | wxYES | wxNO); if ($dialog->ShowModal() == wxID_NO) { return; } } } else { my $message = "Error while connecting to the " . $self->{config}->host_type . " server: " . $res->status_line; Slic3r::GUI::show_error($self, $message); return; } } $self->{send_gcode_file_print} = $Slic3r::GUI::Settings->{octoprint}{start}; $self->{send_gcode_file} = $self->export_gcode(Wx::StandardPaths::Get->GetTempDir() . "/" . $filename); } sub send_gcode { my ($self) = @_; $self->statusbar->StartBusy; my $ua = LWP::UserAgent->new; $ua->timeout(180); my $path = Slic3r::encode_path($self->{send_gcode_file}); my $filename = basename($self->{print}->output_filepath($main::opt{output} // '')); my $res; if($self->{config}->print_host){ if($self->{config}->host_type eq 'octoprint'){ $res = $ua->post( "http://" . $self->{config}->print_host . "/api/files/local", Content_Type => 'form-data', 'X-Api-Key' => $self->{config}->octoprint_apikey, Content => [ # OctoPrint doesn't like Windows paths so we use basename() # Also, since we need to read from filesystem we process it through encode_path() file => [ $path, basename($path) ], print => $self->{send_gcode_file_print} ? 1 : 0, ], ); }else{ # slurp the file we would send into a string - should be someplace to reference this but could not find it? local $/=undef; open (my $gch,$path); my $gcode=<$gch>; close($gch); # get the time string my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); my $t = sprintf("%4d-%02d-%02dT%02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec); my $req = HTTP::Request->new(POST => "http://" . $self->{config}->print_host . "/rr_upload?name=0:/gcodes/" . basename($path) . "&time=$t",); $req->content( $gcode ); $res = $ua->request($req); if ($res->is_success) { if ($self->{send_gcode_file_print}) { $res = $ua->get( "http://" . $self->{config}->print_host . "/rr_gcode?gcode=M32%20" . basename($path), ); } } } } $self->statusbar->StopBusy; if ($res->is_success) { $self->statusbar->SetStatusText("G-code file successfully uploaded to the " . $self->{config}->host_type . " server"); } else { my $message = "Error while uploading to the " . $self->{config}->host_type . " server: " . $res->status_line; Slic3r::GUI::show_error($self, $message); $self->statusbar->SetStatusText($message); } } sub export_stl { my $self = shift; return if !@{$self->{objects}}; my $output_file = $self->_get_export_file('STL') or return; $self->{model}->write_stl($output_file, 1); $self->statusbar->SetStatusText("STL file exported to $output_file"); } sub reload_from_disk { my ($self) = @_; my ($obj_idx, $object) = $self->selected_object; return if !defined $obj_idx; if (!$object->input_file) { Slic3r::GUI::warning_catcher($self)->("The selected object couldn't be reloaded because it isn't referenced to its input file any more. This is the case after performing operations like cut or split."); return; } if (!-e $object->input_file) { Slic3r::GUI::warning_catcher($self)->("The selected object couldn't be reloaded because the file doesn't exist anymore on the disk."); return; } # Only reload the selected object and not all objects from the input file. my @new_obj_idx = $self->load_file($object->input_file, $object->input_file_obj_idx); if (!@new_obj_idx) { Slic3r::GUI::warning_catcher($self)->("The selected object couldn't be reloaded because the new file doesn't contain the object."); return; } my $org_obj = $self->{model}->objects->[$obj_idx]; # check if the object is dependant of more than one file my $org_obj_has_modifiers=0; for my $i (0..($org_obj->volumes_count-1)) { if ($org_obj->input_file ne $org_obj->get_volume($i)->input_file) { $org_obj_has_modifiers=1; last; } } my $reload_behavior = $Slic3r::GUI::Settings->{_}{reload_behavior}; # ask the user how to proceed, if option is selected in preferences if ($org_obj_has_modifiers && !$Slic3r::GUI::Settings->{_}{reload_hide_dialog}) { my $dlg = Slic3r::GUI::ReloadDialog->new(undef,$reload_behavior); my $res = $dlg->ShowModal; if ($res==wxID_CANCEL) { $self->remove($_) for @new_obj_idx; $dlg->Destroy; return; } $reload_behavior = $dlg->GetSelection; my $save = 0; if ($reload_behavior != $Slic3r::GUI::Settings->{_}{reload_behavior}) { $Slic3r::GUI::Settings->{_}{reload_behavior} = $reload_behavior; $save = 1; } if ($dlg->GetHideOnNext) { $Slic3r::GUI::Settings->{_}{reload_hide_dialog} = 1; $save = 1; } Slic3r::GUI->save_settings if $save; $dlg->Destroy; } my $volume_unmatched=0; foreach my $new_obj_idx (@new_obj_idx) { my $new_obj = $self->{model}->objects->[$new_obj_idx]; $new_obj->clear_instances; $new_obj->add_instance($_) for @{$org_obj->instances}; $new_obj->config->apply($org_obj->config); my $new_vol_idx = 0; my $org_vol_idx = 0; my $new_vol_count=$new_obj->volumes_count; my $org_vol_count=$org_obj->volumes_count; while ($new_vol_idx<=$new_vol_count-1) { if (($org_vol_idx<=$org_vol_count-1) && ($org_obj->get_volume($org_vol_idx)->input_file eq $new_obj->input_file)) { # apply config from the matching volumes $new_obj->get_volume($new_vol_idx++)->config->apply($org_obj->get_volume($org_vol_idx++)->config); } else { # reload has more volumes than original (first file), apply config from the first volume $new_obj->get_volume($new_vol_idx++)->config->apply($org_obj->get_volume(0)->config); $volume_unmatched=1; } } $org_vol_idx=$org_vol_count if $reload_behavior==2; # Reload behavior: discard while (($org_vol_idx<=$org_vol_count-1) && ($org_obj->get_volume($org_vol_idx)->input_file eq $new_obj->input_file)) { # original has more volumes (first file), skip those $org_vol_idx++; $volume_unmatched=1; } while ($org_vol_idx<=$org_vol_count-1) { if ($reload_behavior==1) { # Reload behavior: copy my $new_volume = $new_obj->add_volume($org_obj->get_volume($org_vol_idx)); $new_volume->mesh->translate(@{$org_obj->origin_translation->negative}); $new_volume->mesh->translate(@{$new_obj->origin_translation}); if ($new_volume->name =~ m/link to path\z/) { my $new_name = $new_volume->name; $new_name =~ s/ - no link to path$/ - copied/; $new_volume->set_name($new_name); }elsif(!($new_volume->name =~ m/copied\z/)) { $new_volume->set_name($new_volume->name . " - copied"); } }else{ # Reload behavior: Reload all, also fallback solution if ini was manually edited to a wrong value if ($org_obj->get_volume($org_vol_idx)->input_file) { my $model = eval { Slic3r::Model->read_from_file($org_obj->get_volume($org_vol_idx)->input_file) }; if ($@) { $org_obj->get_volume($org_vol_idx)->set_input_file(""); }elsif ($org_obj->get_volume($org_vol_idx)->input_file_obj_idx > ($model->objects_count-1)) { # Object Index for that part / modifier not found in current version of the file $org_obj->get_volume($org_vol_idx)->set_input_file(""); }else{ my $prt_mod_obj = $model->objects->[$org_obj->get_volume($org_vol_idx)->input_file_obj_idx]; if ($org_obj->get_volume($org_vol_idx)->input_file_vol_idx > ($prt_mod_obj->volumes_count-1)) { # Volume Index for that part / modifier not found in current version of the file $org_obj->get_volume($org_vol_idx)->set_input_file(""); }else{ # all checks passed, load new mesh and copy metadata my $new_volume = $new_obj->add_volume($prt_mod_obj->get_volume($org_obj->get_volume($org_vol_idx)->input_file_vol_idx)); $new_volume->set_input_file($org_obj->get_volume($org_vol_idx)->input_file); $new_volume->set_input_file_obj_idx($org_obj->get_volume($org_vol_idx)->input_file_obj_idx); $new_volume->set_input_file_vol_idx($org_obj->get_volume($org_vol_idx)->input_file_vol_idx); $new_volume->config->apply($org_obj->get_volume($org_vol_idx)->config); $new_volume->set_modifier($org_obj->get_volume($org_vol_idx)->modifier); $new_volume->mesh->translate(@{$new_obj->origin_translation}); } } } if (!$org_obj->get_volume($org_vol_idx)->input_file) { my $new_volume = $new_obj->add_volume($org_obj->get_volume($org_vol_idx)); # error -> copy old mesh $new_volume->mesh->translate(@{$org_obj->origin_translation->negative}); $new_volume->mesh->translate(@{$new_obj->origin_translation}); if ($new_volume->name =~ m/copied\z/) { my $new_name = $new_volume->name; $new_name =~ s/ - copied$/ - no link to path/; $new_volume->set_name($new_name); }elsif(!($new_volume->name =~ m/link to path\z/)) { $new_volume->set_name($new_volume->name . " - no link to path"); } $volume_unmatched=1; } } $org_vol_idx++; } } $self->remove($obj_idx); # TODO: refresh object list which contains wrong count and scale # Trigger thumbnail generation again, because the remove() method altered # object indexes before background thumbnail generation called its completion # event, so the on_thumbnail_made callback is called with the wrong $obj_idx. # When porting to C++ we'll probably have cleaner ways to do this. $self->make_thumbnail($_-1) for @new_obj_idx; # update print $self->stop_background_process; $self->{print}->reload_object($_-1) for @new_obj_idx; $self->on_model_change; # Empty the redo stack $self->{redo_stack} = []; if ($volume_unmatched) { Slic3r::GUI::warning_catcher($self)->("At least 1 volume couldn't be matched between the original object and the reloaded one."); } } sub export_object_stl { my $self = shift; my ($obj_idx, $object) = $self->selected_object; return if !defined $obj_idx; my $model_object = $self->{model}->objects->[$obj_idx]; my $output_file = $self->_get_export_file('STL') or return; $model_object->mesh->write_binary($output_file); $self->statusbar->SetStatusText("STL file exported to $output_file"); } # Export function for a single AMF output sub export_object_amf { my $self = shift; my ($obj_idx, $object) = $self->selected_object; return if !defined $obj_idx; my $local_model = Slic3r::Model->new; my $model_object = $self->{model}->objects->[$obj_idx]; # copy model_object -> local_model $local_model->add_object($model_object); my $output_file = $self->_get_export_file('AMF') or return; $local_model->write_amf($output_file); $self->statusbar->SetStatusText("AMF file exported to $output_file"); } # Export function for a single 3MF output sub export_object_tmf { my $self = shift; my ($obj_idx, $object) = $self->selected_object; return if !defined $obj_idx; my $local_model = Slic3r::Model->new; my $model_object = $self->{model}->objects->[$obj_idx]; # copy model_object -> local_model $local_model->add_object($model_object); my $output_file = $self->_get_export_file('TMF') or return; $local_model->write_tmf($output_file); $self->statusbar->SetStatusText("3MF file exported to $output_file"); } sub export_amf { my $self = shift; return if !@{$self->{objects}}; my $output_file = $self->_get_export_file('AMF') or return; $self->{model}->write_amf($output_file); $self->statusbar->SetStatusText("AMF file exported to $output_file"); } sub export_tmf { my $self = shift; return if !@{$self->{objects}}; my $output_file = $self->_get_export_file('TMF') or return; $self->{model}->write_tmf($output_file); $self->statusbar->SetStatusText("3MF file exported to $output_file"); } sub _get_export_file { my $self = shift; my ($format) = @_; my $suffix = $format eq 'STL' ? '.stl' : ( $format eq 'AMF' ? '.amf' : '.3mf'); my $output_file = $main::opt{output}; { $output_file = $self->{print}->output_filepath($output_file // ''); $output_file =~ s/\.gcode$/$suffix/i; my $dlg; $dlg = Wx::FileDialog->new($self, "Save $format file as:", dirname($output_file), basename($output_file), &Slic3r::GUI::STL_MODEL_WILDCARD, wxFD_SAVE | wxFD_OVERWRITE_PROMPT) if $format eq 'STL'; $dlg = Wx::FileDialog->new($self, "Save $format file as:", dirname($output_file), basename($output_file), &Slic3r::GUI::AMF_MODEL_WILDCARD, wxFD_SAVE | wxFD_OVERWRITE_PROMPT) if $format eq 'AMF'; $dlg = Wx::FileDialog->new($self, "Save $format file as:", dirname($output_file), basename($output_file), &Slic3r::GUI::TMF_MODEL_WILDCARD, wxFD_SAVE | wxFD_OVERWRITE_PROMPT) if $format eq 'TMF'; if ($dlg->ShowModal != wxID_OK) { $dlg->Destroy; return undef; } $output_file = Slic3r::decode_path($dlg->GetPath); $dlg->Destroy; } return $output_file; } sub make_thumbnail { my $self = shift; my ($obj_idx) = @_; my $plater_object = $self->{objects}[$obj_idx]; $plater_object->thumbnail(Slic3r::ExPolygon::Collection->new); my $cb = sub { $plater_object->make_thumbnail($self->{model}, $obj_idx); if ($Slic3r::have_threads) { Wx::PostEvent($self, Wx::PlThreadEvent->new(-1, $THUMBNAIL_DONE_EVENT, shared_clone([ $obj_idx ]))); Slic3r::thread_cleanup(); threads->exit; } else { $self->on_thumbnail_made($obj_idx); } }; @_ = (); $Slic3r::have_threads ? threads->create(sub { $cb->(); Slic3r::thread_cleanup(); })->detach : $cb->(); } sub on_thumbnail_made { my $self = shift; my ($obj_idx) = @_; $self->{objects}[$obj_idx]->transform_thumbnail($self->{model}, $obj_idx); $self->refresh_canvases; } # this method gets called whenever print center is changed or the objects' bounding box changes # (i.e. when an object is added/removed/moved/rotated/scaled) sub on_model_change { my ($self, $force_autocenter) = @_; # reload the select submenu (if already initialized) if (my $menu = $self->GetFrame->{plater_select_menu}) { $menu->DeleteItem($_) for $menu->GetMenuItems; for my $i (0..$#{$self->{objects}}) { my $name = $self->{objects}->[$i]->name; my $count = $self->{model}->get_object($i)->instances_count; if ($count > 1) { $name .= " (${count}x)"; } my $item = wxTheApp->append_menu_item($menu, $name, 'Select object', sub { $self->select_object($i); $self->refresh_canvases; }, undef, undef, wxITEM_CHECK); $item->Check(1) if $self->{objects}->[$i]->selected; } } # reload the objects info choice if (my $choice = $self->{object_info_choice}) { $choice->Clear; for my $i (0..$#{$self->{objects}}) { my $name = $self->{objects}->[$i]->name; my $count = $self->{model}->get_object($i)->instances_count; if ($count > 1) { $name .= " (${count}x)"; } $choice->Append($name); } my ($obj_idx, $object) = $self->selected_object; $choice->SetSelection($obj_idx // -1); } my $running = $self->pause_background_process; if ($Slic3r::GUI::Settings->{_}{autocenter} || $force_autocenter) { $self->{model}->center_instances_around_point($self->bed_centerf); } $self->refresh_canvases; my $invalidated = $self->{print}->reload_model_instances(); if ($Slic3r::GUI::Settings->{_}{background_processing}) { if ($invalidated || !$running) { # The mere fact that no steps were invalidated when reloading model instances # doesn't mean that all steps were done: for example, validation might have # failed upon previous instance move, so we have no running thread and no steps # are invalidated on this move, thus we need to schedule a new run. $self->schedule_background_process; $self->toggle_print_stats(0); } else { $self->resume_background_process; } } else { $self->hide_preview; } } sub hide_preview { my ($self) = @_; my $sel = $self->{preview_notebook}->GetSelection; if ($sel == $self->{preview3D_page_idx} || $sel == $self->{toolpaths2D_page_idx}) { $self->{preview_notebook}->SetSelection(0); } $self->{processed} = 0; } sub on_extruders_change { my ($self, $num_extruders) = @_; my $choices = $self->{preset_choosers}{filament}; while (@$choices < $num_extruders) { # copy strings from first choice my @presets = $choices->[0]->GetStrings; # initialize new choice my $choice = Wx::BitmapComboBox->new($self, -1, "", wxDefaultPosition, wxDefaultSize, [@presets], wxCB_READONLY); push @$choices, $choice; # copy icons from first choice $choice->SetItemBitmap($_, $choices->[0]->GetItemBitmap($_)) for 0..$#presets; # settings button my $settings_btn = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new($Slic3r::var->("cog.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); # insert new row into sizer $self->{presets_sizer}->Insert(6 + ($#$choices-1)*3, 0, 0); $self->{presets_sizer}->Insert(7 + ($#$choices-1)*3, $choice, 0, wxEXPAND | wxBOTTOM, FILAMENT_CHOOSERS_SPACING); $self->{presets_sizer}->Insert(8 + ($#$choices-1)*3, $settings_btn, 0, wxEXPAND | wxLEFT, 4); # setup the listeners EVT_COMBOBOX($choice, $choice, sub { my ($choice) = @_; wxTheApp->CallAfter(sub { $self->_on_change_combobox('filament', $choice); }); }); EVT_BUTTON($self, $settings_btn, sub { $self->show_preset_editor('filament', $#$choices); }); # initialize selection my $i = first { $choice->GetString($_) eq ($Slic3r::GUI::Settings->{presets}{"filament_" . $#$choices} || '') } 0 .. $#presets; $choice->SetSelection($i || 0); } # remove unused choices if any while (@$choices > $num_extruders) { my $i = 6 + ($#$choices-1)*3; $self->{presets_sizer}->Remove($i); # label $self->{presets_sizer}->Remove($i); # wxChoice my $settings_btn = $self->{presets_sizer}->GetItem($i)->GetWindow; $self->{presets_sizer}->Remove($i); # settings btn $settings_btn->Destroy; $choices->[-1]->Destroy; pop @$choices; } $self->Layout; } sub object_cut_dialog { my $self = shift; my ($obj_idx) = @_; if (!defined $obj_idx) { ($obj_idx, undef) = $self->selected_object; } if (!$Slic3r::GUI::have_OpenGL) { Slic3r::GUI::show_error($self, "Please install the OpenGL modules to use this feature (see build instructions)."); return; } my $dlg = Slic3r::GUI::Plater::ObjectCutDialog->new($self, object => $self->{objects}[$obj_idx], model_object => $self->{model}->objects->[$obj_idx], ); return unless $dlg->ShowModal == wxID_OK; if (my @new_objects = $dlg->NewModelObjects) { my $process_dialog = Wx::ProgressDialog->new('Loading…', "Loading new objects…", 100, $self, 0); $process_dialog->Pulse; # Create two models to save the current object and the resulted objects. my $new_objects_model = Slic3r::Model->new; foreach my $new_object (@new_objects) { $new_objects_model->add_object($new_object); } my $org_object_model = Slic3r::Model->new; $org_object_model->add_object($self->{model}->get_object($obj_idx)); # Save the object identifiers used in undo/redo operations. my $object_id = $self->{objects}->[$obj_idx]->identifier; my $new_objects_id_start = $self->{object_identifier}; $self->add_undo_operation("CUT", $object_id, $org_object_model, $new_objects_model, $new_objects_id_start); $self->remove($obj_idx, 'true'); $self->load_model_objects(grep defined($_), @new_objects); $self->arrange if @new_objects <= 2; # don't arrange for grid cuts $process_dialog->Destroy; } } sub object_layers_dialog { my $self = shift; my ($obj_idx) = @_; $self->object_settings_dialog($obj_idx, adaptive_layers => 1); } sub object_settings_dialog { my $self = shift; my ($obj_idx, %params) = @_; if (!defined $obj_idx) { ($obj_idx, undef) = $self->selected_object; } my $model_object = $self->{model}->objects->[$obj_idx]; # validate config before opening the settings dialog because # that dialog can't be closed if validation fails, but user # can't fix any error which is outside that dialog return unless $self->validate_config; my $dlg = Slic3r::GUI::Plater::ObjectSettingsDialog->new($self, object => $self->{objects}[$obj_idx], model_object => $model_object, obj_idx => $obj_idx, ); # store pointer to the adaptive layer tab to push preview updates $self->{AdaptiveLayersDialog} = $dlg->{adaptive_layers}; # and jump directly to the tab if called by "promo-button" $dlg->{tabpanel}->SetSelection(1) if $params{adaptive_layers}; $self->pause_background_process; $dlg->ShowModal; $self->{AdaptiveLayersDialog} = undef; # update thumbnail since parts may have changed if ($dlg->PartsChanged) { # recenter and re-align to Z = 0 $model_object->center_around_origin; $self->make_thumbnail($obj_idx); } # update print if ($dlg->PartsChanged || $dlg->PartSettingsChanged) { $self->stop_background_process; $self->{print}->reload_object($obj_idx); $self->on_model_change; } else { $self->resume_background_process; } } sub object_list_changed { my $self = shift; my $have_objects = @{$self->{objects}} ? 1 : 0; my $method = $have_objects ? 'Enable' : 'Disable'; $self->{"btn_$_"}->$method for grep $self->{"btn_$_"}, qw(reset arrange export_gcode export_stl print send_gcode); if ($self->{export_gcode_output_file} || $self->{send_gcode_file}) { $self->{btn_export_gcode}->Disable; $self->{btn_print}->Disable; $self->{btn_send_gcode}->Disable; } if ($self->{htoolbar}) { $self->{htoolbar}->EnableTool($_, $have_objects) for (TB_RESET, TB_ARRANGE); } # prepagate the event to the frame (a custom Wx event would be cleaner) $self->GetFrame->on_plater_object_list_changed($have_objects); } sub selection_changed { my $self = shift; my ($obj_idx, $object) = $self->selected_object; my $have_sel = defined $obj_idx; # Remove selection in 2d Plater. $self->{canvas}->{selected_instance} = undef; if (my $menu = $self->GetFrame->{plater_select_menu}) { $_->Check(0) for $menu->GetMenuItems; if ($have_sel) { $menu->FindItemByPosition($obj_idx)->Check(1); } } my $method = $have_sel ? 'Enable' : 'Disable'; $self->{"btn_$_"}->$method for grep $self->{"btn_$_"}, qw(remove increase decrease rotate45cw rotate45ccw changescale split cut layers settings); if ($self->{htoolbar}) { $self->{htoolbar}->EnableTool($_, $have_sel) for (TB_REMOVE, TB_MORE, TB_FEWER, TB_45CW, TB_45CCW, TB_SCALE, TB_SPLIT, TB_CUT, TB_LAYERS, TB_SETTINGS); } if ($self->{object_info_size}) { # have we already loaded the info pane? if ($have_sel) { my $model_object = $self->{model}->objects->[$obj_idx]; $self->{object_info_choice}->SetSelection($obj_idx); $self->{object_info_copies}->SetLabel($model_object->instances_count); my $model_instance = $model_object->instances->[0]; { my $size_string = sprintf "%.2f x %.2f x %.2f", @{$model_object->instance_bounding_box(0)->size}; if ($model_instance->scaling_factor != 1) { $size_string .= sprintf " (%s%%)", $model_instance->scaling_factor * 100; } $self->{object_info_size}->SetLabel($size_string); } $self->{object_info_materials}->SetLabel($model_object->materials_count); my $raw_mesh = $model_object->raw_mesh; $raw_mesh->repair; # this calculates number_of_parts if (my $stats = $raw_mesh->stats) { $self->{object_info_volume}->SetLabel(sprintf('%.2f', $raw_mesh->volume * ($model_instance->scaling_factor**3))); $self->{object_info_facets}->SetLabel(sprintf('%d (%d shells)', $model_object->facets_count, $stats->{number_of_parts})); if (my $errors = sum(@$stats{qw(degenerate_facets edges_fixed facets_removed facets_added facets_reversed backwards_edges)})) { $self->{object_info_manifold}->SetLabel(sprintf("Auto-repaired (%d errors)", $errors)); $self->{object_info_manifold_warning_icon}->Show; # we don't show normals_fixed because we never provide normals # to admesh, so it generates normals for all facets my $message = sprintf '%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d facets reversed, %d backwards edges', @$stats{qw(degenerate_facets edges_fixed facets_removed facets_added facets_reversed backwards_edges)}; $self->{object_info_manifold}->SetToolTipString($message); $self->{object_info_manifold_warning_icon}->SetToolTipString($message); } else { $self->{object_info_manifold}->SetLabel("Yes"); } } else { $self->{object_info_facets}->SetLabel($object->facets); } } else { $self->{object_info_choice}->SetSelection(-1); $self->{"object_info_$_"}->SetLabel("") for qw(copies size volume facets materials manifold); $self->{object_info_manifold_warning_icon}->Hide; $self->{object_info_manifold}->SetToolTipString(""); } $self->Layout; } # prepagate the event to the frame (a custom Wx event would be cleaner) $self->GetFrame->on_plater_selection_changed($have_sel); } sub select_object { my ($self, $obj_idx) = @_; $_->selected(0) for @{ $self->{objects} }; $_->selected_instance(-1) for @{ $self->{objects} }; if (defined $obj_idx) { $self->{objects}->[$obj_idx]->selected(1); $self->{objects}->[$obj_idx]->selected_instance(0); } $self->selection_changed(1); } sub select_next { my ($self) = @_; return if !@{$self->{objects}}; my ($obj_idx, $object) = $self->selected_object; if (!defined $obj_idx || $obj_idx == $#{$self->{objects}}) { $obj_idx = 0; } else { $obj_idx++; } $self->select_object($obj_idx); $self->refresh_canvases; } sub select_prev { my ($self) = @_; return if !@{$self->{objects}}; my ($obj_idx, $object) = $self->selected_object; if (!defined $obj_idx || $obj_idx == 0) { $obj_idx = $#{$self->{objects}}; } else { $obj_idx--; } $self->select_object($obj_idx); $self->refresh_canvases; } sub selected_object { my $self = shift; my $obj_idx = first { $self->{objects}[$_]->selected } 0..$#{ $self->{objects} }; return undef if !defined $obj_idx; return ($obj_idx, $self->{objects}[$obj_idx]), } sub refresh_canvases { my ($self) = @_; $self->{canvas}->Refresh; $self->{canvas3D}->update if $self->{canvas3D}; $self->{preview3D}->reload_print if $self->{preview3D}; } sub validate_config { my $self = shift; eval { $self->config->validate; }; return 0 if Slic3r::GUI::catch_error($self); return 1; } sub statusbar { my $self = shift; return $self->GetFrame->{statusbar}; } sub object_menu { my ($self) = @_; my $frame = $self->GetFrame; my $menu = Wx::Menu->new; wxTheApp->append_menu_item($menu, "Delete\tCtrl+Del", 'Remove the selected object', sub { $self->remove; }, undef, 'brick_delete.png'); wxTheApp->append_menu_item($menu, "Increase copies\tCtrl++", 'Place one more copy of the selected object', sub { $self->increase; }, undef, 'add.png'); wxTheApp->append_menu_item($menu, "Decrease copies\tCtrl+-", 'Remove one copy of the selected object', sub { $self->decrease; }, undef, 'delete.png'); wxTheApp->append_menu_item($menu, "Set number of copies…", 'Change the number of copies of the selected object', sub { $self->set_number_of_copies; }, undef, 'textfield.png'); $menu->AppendSeparator(); wxTheApp->append_menu_item($menu, "Move to bed center", 'Center object around bed center', sub { $self->center_selected_object_on_bed; }, undef, 'arrow_in.png'); wxTheApp->append_menu_item($menu, "Rotate 45° clockwise", 'Rotate the selected object by 45° clockwise', sub { $self->rotate(-45); }, undef, 'arrow_rotate_clockwise.png'); wxTheApp->append_menu_item($menu, "Rotate 45° counter-clockwise", 'Rotate the selected object by 45° counter-clockwise', sub { $self->rotate(+45); }, undef, 'arrow_rotate_anticlockwise.png'); { my $rotateMenu = Wx::Menu->new; wxTheApp->append_menu_item($rotateMenu, "Around X axis…", 'Rotate the selected object by an arbitrary angle around X axis', sub { $self->rotate(undef, X); }, undef, 'bullet_red.png'); wxTheApp->append_menu_item($rotateMenu, "Around Y axis…", 'Rotate the selected object by an arbitrary angle around Y axis', sub { $self->rotate(undef, Y); }, undef, 'bullet_green.png'); wxTheApp->append_menu_item($rotateMenu, "Around Z axis…", 'Rotate the selected object by an arbitrary angle around Z axis', sub { $self->rotate(undef, Z); }, undef, 'bullet_blue.png'); wxTheApp->append_submenu($menu, "Rotate", 'Rotate the selected object by an arbitrary angle', $rotateMenu, undef, 'textfield.png'); } { my $mirrorMenu = Wx::Menu->new; wxTheApp->append_menu_item($mirrorMenu, "Along X axis…", 'Mirror the selected object along the X axis', sub { $self->mirror(X); }, undef, 'bullet_red.png'); wxTheApp->append_menu_item($mirrorMenu, "Along Y axis…", 'Mirror the selected object along the Y axis', sub { $self->mirror(Y); }, undef, 'bullet_green.png'); wxTheApp->append_menu_item($mirrorMenu, "Along Z axis…", 'Mirror the selected object along the Z axis', sub { $self->mirror(Z); }, undef, 'bullet_blue.png'); wxTheApp->append_submenu($menu, "Mirror", 'Mirror the selected object', $mirrorMenu, undef, 'shape_flip_horizontal.png'); } { my $scaleMenu = Wx::Menu->new; wxTheApp->append_menu_item($scaleMenu, "Uniformly…", 'Scale the selected object along the XYZ axes', sub { $self->changescale(undef); }); wxTheApp->append_menu_item($scaleMenu, "Along X axis…", 'Scale the selected object along the X axis', sub { $self->changescale(X); }, undef, 'bullet_red.png'); wxTheApp->append_menu_item($scaleMenu, "Along Y axis…", 'Scale the selected object along the Y axis', sub { $self->changescale(Y); }, undef, 'bullet_green.png'); wxTheApp->append_menu_item($scaleMenu, "Along Z axis…", 'Scale the selected object along the Z axis', sub { $self->changescale(Z); }, undef, 'bullet_blue.png'); wxTheApp->append_submenu($menu, "Scale", 'Scale the selected object by a given factor', $scaleMenu, undef, 'arrow_out.png'); } { my $scaleToSizeMenu = Wx::Menu->new; wxTheApp->append_menu_item($scaleToSizeMenu, "Uniformly…", 'Scale the selected object along the XYZ axes', sub { $self->changescale(undef, 1); }); wxTheApp->append_menu_item($scaleToSizeMenu, "Along X axis…", 'Scale the selected object along the X axis', sub { $self->changescale(X, 1); }, undef, 'bullet_red.png'); wxTheApp->append_menu_item($scaleToSizeMenu, "Along Y axis…", 'Scale the selected object along the Y axis', sub { $self->changescale(Y, 1); }, undef, 'bullet_green.png'); wxTheApp->append_menu_item($scaleToSizeMenu, "Along Z axis…", 'Scale the selected object along the Z axis', sub { $self->changescale(Z, 1); }, undef, 'bullet_blue.png'); wxTheApp->append_submenu($menu, "Scale to size", 'Scale the selected object to match a given size', $scaleToSizeMenu, undef, 'arrow_out.png'); } wxTheApp->append_menu_item($menu, "Split", 'Split the selected object into individual parts', sub { $self->split_object; }, undef, 'shape_ungroup.png'); wxTheApp->append_menu_item($menu, "Cut…", 'Open the 3D cutting tool', sub { $self->object_cut_dialog; }, undef, 'package.png'); wxTheApp->append_menu_item($menu, "Layer heights…", 'Open the dynamic layer height control', sub { $self->object_layers_dialog; }, undef, 'variable_layer_height.png'); $menu->AppendSeparator(); wxTheApp->append_menu_item($menu, "Settings…", 'Open the object editor dialog', sub { $self->object_settings_dialog; }, undef, 'cog.png'); $menu->AppendSeparator(); wxTheApp->append_menu_item($menu, "Reload from Disk", 'Reload the selected file from Disk', sub { $self->reload_from_disk; }, undef, 'arrow_refresh.png'); wxTheApp->append_menu_item($menu, "Export object as STL…", 'Export this single object as STL file', sub { $self->export_object_stl; }, undef, 'brick_go.png'); wxTheApp->append_menu_item($menu, "Export object and modifiers as AMF…", 'Export this single object and all associated modifiers as AMF file', sub { $self->export_object_amf; }, undef, 'brick_go.png'); wxTheApp->append_menu_item($menu, "Export object and modifiers as 3MF…", 'Export this single object and all associated modifiers as 3MF file', sub { $self->export_object_tmf; }, undef, 'brick_go.png'); return $menu; } # Set a camera direction, zoom to all objects. sub select_view { my ($self, $direction) = @_; my $idx_page = $self->{preview_notebook}->GetSelection; my $page = ($idx_page == &Wx::wxNOT_FOUND) ? '3D' : $self->{preview_notebook}->GetPageText($idx_page); if ($page eq 'Preview') { $self->{preview3D}->canvas->select_view($direction); $self->{canvas3D}->set_viewport_from_scene($self->{preview3D}->canvas); } else { $self->{canvas3D}->select_view($direction); $self->{preview3D}->canvas->set_viewport_from_scene($self->{canvas3D}); } } sub zoom{ my ($self, $direction) = @_; #Apply Zoom to the current active tab my ($currentSelection) = $self->{preview_notebook}->GetSelection; if($currentSelection == 0){ $self->{canvas3D}->zoom($direction) if($self->{canvas3D}); } elsif($currentSelection == 2){ #3d Preview tab $self->{preview3D}->canvas->zoom($direction) if($self->{preview3D}); } elsif($currentSelection == 3) { #2D toolpaths tab $self->{toolpaths2D}->{canvas}->zoom($direction) if($self->{toolpaths2D}); } } package Slic3r::GUI::Plater::DropTarget; use Wx::DND; use base 'Wx::FileDropTarget'; sub new { my $class = shift; my ($window) = @_; my $self = $class->SUPER::new; $self->{window} = $window; return $self; } sub OnDropFiles { my $self = shift; my ($x, $y, $filenames) = @_; # stop scalars leaking on older perl # https://rt.perl.org/rt3/Public/Bug/Display.html?id=70602 @_ = (); # only accept STL, OBJ and AMF files return 0 if grep !/\.(?:stl|obj|amf(?:\.xml)?)$/i, @$filenames; $self->{window}->load_file($_) for @$filenames; } # 2D preview of an object. Each object is previewed by its convex hull. package Slic3r::GUI::Plater::Object; use Moo; use List::Util qw(first); use Slic3r::Geometry qw(X Y Z MIN MAX deg2rad); has 'name' => (is => 'rw', required => 1); has 'identifier' => (is => 'rw', required => 1); has 'input_file' => (is => 'rw'); has 'input_file_obj_idx' => (is => 'rw'); has 'thumbnail' => (is => 'rw'); # ExPolygon::Collection in scaled model units with no transforms has 'transformed_thumbnail' => (is => 'rw'); has 'instance_thumbnails' => (is => 'ro', default => sub { [] }); # array of ExPolygon::Collection objects, each one representing the actual placed thumbnail of each instance in pixel units has 'selected' => (is => 'rw', default => sub { 0 }); has 'selected_instance' => (is => 'rw', default => sub { -1 }); sub make_thumbnail { my ($self, $model, $obj_idx) = @_; # make method idempotent $self->thumbnail->clear; my $mesh = $model->objects->[$obj_idx]->raw_mesh; # Apply x, y rotations and scaling vector in case of reading a 3MF model object. my $model_instance = $model->objects->[$obj_idx]->instances->[0]; $mesh->rotate_x($model_instance->x_rotation); $mesh->rotate_y($model_instance->y_rotation); $mesh->scale_xyz($model_instance->scaling_vector); if ($mesh->facets_count <= 5000) { # remove polygons with area <= 1mm my $area_threshold = Slic3r::Geometry::scale 1; $self->thumbnail->append( grep $_->area >= $area_threshold, @{ $mesh->horizontal_projection }, # horizontal_projection returns scaled expolygons ); $self->thumbnail->simplify(0.5); } else { my $convex_hull = Slic3r::ExPolygon->new($mesh->convex_hull); $self->thumbnail->append($convex_hull); } return $self->thumbnail; } sub transform_thumbnail { my ($self, $model, $obj_idx) = @_; return unless defined $self->thumbnail; my $model_object = $model->objects->[$obj_idx]; my $model_instance = $model_object->instances->[0]; # the order of these transformations MUST be the same everywhere, including # in Slic3r::Print->add_model_object() my $t = $self->thumbnail->clone; $t->rotate($model_instance->rotation, Slic3r::Point->new(0,0)); $t->scale($model_instance->scaling_factor); $self->transformed_thumbnail($t); } package Slic3r::GUI::Plater::OctoPrintSpoolDialog; use Wx qw(:dialog :id :misc :sizer :icon wxTheApp); use Wx::Event qw(EVT_BUTTON EVT_TEXT_ENTER); use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent, $filename) = @_; my $self = $class->SUPER::new($parent, -1, "Send to Server", wxDefaultPosition, [400, -1]); $self->{filename} = $filename; $Slic3r::GUI::Settings->{octoprint} //= {}; my $optgroup; $optgroup = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Send to Server', on_change => sub { my ($opt_id) = @_; if ($opt_id eq 'filename') { $self->{filename} = $optgroup->get_value($opt_id); } else { $Slic3r::GUI::Settings->{octoprint}{$opt_id} = $optgroup->get_value($opt_id); } }, label_width => 200, ); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'filename', type => 's', label => 'File name', width => 200, tooltip => 'The name used for labelling the print job.', default => $filename, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'overwrite', type => 'bool', label => 'Overwrite existing file', tooltip => 'If selected, any existing file with the same name will be overwritten without confirmation.', default => $Slic3r::GUI::Settings->{octoprint}{overwrite} // 0, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'start', type => 'bool', label => 'Start print', tooltip => 'If selected, print will start after the upload.', default => $Slic3r::GUI::Settings->{octoprint}{start} // 0, )); my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($optgroup->sizer, 0, wxEXPAND | wxTOP | wxBOTTOM | wxLEFT | wxRIGHT, 10); my $buttons = $self->CreateStdDialogButtonSizer(wxOK | wxCANCEL); $sizer->Add($buttons, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); EVT_BUTTON($self, wxID_OK, sub { wxTheApp->save_settings; $self->EndModal(wxID_OK); $self->Destroy; }); $self->SetSizer($sizer); $sizer->SetSizeHints($self); return $self; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater/000077500000000000000000000000001327442435500164435ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r/GUI/Plater/2D.pm000066400000000000000000000430431327442435500172520ustar00rootroot00000000000000# 2D preview on the platter. # 3D objects are visualized by their convex hulls. package Slic3r::GUI::Plater::2D; use strict; use warnings; use utf8; use List::Util qw(min max first); use Slic3r::Geometry qw(X Y scale unscale convex_hull); use Slic3r::Geometry::Clipper qw(offset JT_ROUND intersection_pl); use Wx qw(:misc :pen :brush :sizer :font :cursor wxTAB_TRAVERSAL); use Wx::Event qw(EVT_MOUSE_EVENTS EVT_KEY_DOWN EVT_PAINT EVT_ERASE_BACKGROUND EVT_SIZE); use base 'Wx::Panel'; # Color Scheme use Slic3r::GUI::ColorScheme; use constant CANVAS_TEXT => join('-', +(localtime)[3,4]) eq '13-8' ? 'What do you want to print today? â„¢' # Sept. 13, 2006. The first part ever printed by a RepRap to make another RepRap. : 'Drag your objects here'; sub new { my $class = shift; my ($parent, $size, $objects, $model, $config) = @_; if ( ( defined $Slic3r::GUI::Settings->{_}{colorscheme} ) && ( Slic3r::GUI::ColorScheme->can($Slic3r::GUI::Settings->{_}{colorscheme}) ) ) { my $myGetSchemeName = \&{"Slic3r::GUI::ColorScheme::$Slic3r::GUI::Settings->{_}{colorscheme}"}; $myGetSchemeName->(); } else { Slic3r::GUI::ColorScheme->getDefault(); } my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, $size, wxTAB_TRAVERSAL); # This has only effect on MacOS. On Windows and Linux/GTK, the background is painted by $self->repaint(). $self->SetBackgroundColour(Wx::Colour->new(@BACKGROUND255)); $self->{objects} = $objects; $self->{model} = $model; $self->{config} = $config; $self->{on_select_object} = sub {}; $self->{on_double_click} = sub {}; $self->{on_right_click} = sub {}; $self->{on_instances_moved} = sub {}; $self->{objects_brush} = Wx::Brush->new(Wx::Colour->new(@BED_OBJECTS), wxSOLID); $self->{instance_brush} = Wx::Brush->new(Wx::Colour->new(@BED_INSTANCE), wxSOLID); $self->{selected_brush} = Wx::Brush->new(Wx::Colour->new(@BED_SELECTED), wxSOLID); $self->{dragged_brush} = Wx::Brush->new(Wx::Colour->new(@BED_DRAGGED), wxSOLID); $self->{bed_brush} = Wx::Brush->new(Wx::Colour->new(@BED_COLOR), wxSOLID); $self->{transparent_brush} = Wx::Brush->new(Wx::Colour->new(0,0,0), wxTRANSPARENT); $self->{grid_pen} = Wx::Pen->new(Wx::Colour->new(@BED_GRID), 1, wxSOLID); $self->{print_center_pen} = Wx::Pen->new(Wx::Colour->new(@BED_CENTER), 1, wxSOLID); $self->{clearance_pen} = Wx::Pen->new(Wx::Colour->new(@BED_CLEARANCE), 1, wxSOLID); $self->{skirt_pen} = Wx::Pen->new(Wx::Colour->new(@BED_SKIRT), 1, wxSOLID); $self->{dark_pen} = Wx::Pen->new(Wx::Colour->new(@BED_DARK), 1, wxSOLID); $self->{user_drawn_background} = $^O ne 'darwin'; $self->{selected_instance} = undef; EVT_PAINT($self, \&repaint); EVT_ERASE_BACKGROUND($self, sub {}) if $self->{user_drawn_background}; EVT_MOUSE_EVENTS($self, \&mouse_event); EVT_SIZE($self, sub { $self->update_bed_size; $self->Refresh; }); EVT_KEY_DOWN($self, sub { my ($s, $event) = @_; my $key = $event->GetKeyCode; if ($key == 65 || $key == 314) { $self->nudge_instance('left'); } elsif ($key == 87 || $key == 315) { $self->nudge_instance('up'); } elsif ($key == 68 || $key == 316) { $self->nudge_instance('right'); } elsif ($key == 83 || $key == 317) { $self->nudge_instance('down'); } else { $event->Skip; } }); return $self; } sub on_select_object { my ($self, $cb) = @_; $self->{on_select_object} = $cb; } sub on_double_click { my ($self, $cb) = @_; $self->{on_double_click} = $cb; } sub on_right_click { my ($self, $cb) = @_; $self->{on_right_click} = $cb; } sub on_instances_moved { my ($self, $cb) = @_; $self->{on_instances_moved} = $cb; } sub repaint { my ($self, $event) = @_; # Focus is needed in order to catch keyboard events. $self->SetFocus; my $dc = Wx::AutoBufferedPaintDC->new($self); my $size = $self->GetSize; my @size = ($size->GetWidth, $size->GetHeight); if ($self->{user_drawn_background}) { # On all systems the AutoBufferedPaintDC() achieves double buffering. # On MacOS the background is erased, on Windows the background is not erased # and on Linux/GTK the background is erased to gray color. # Fill DC with the background on Windows & Linux/GTK. my $brush_background = Wx::Brush->new(Wx::Colour->new(@BACKGROUND255), wxSOLID); my $pen_background = Wx::Pen->new(Wx::Colour->new(@BACKGROUND255), 1, wxSOLID); $dc->SetPen($pen_background); $dc->SetBrush($brush_background); my $rect = $self->GetUpdateRegion()->GetBox(); $dc->DrawRectangle($rect->GetLeft(), $rect->GetTop(), $rect->GetWidth(), $rect->GetHeight()); } # draw bed { $dc->SetPen($self->{print_center_pen}); $dc->SetBrush($self->{bed_brush}); $dc->DrawPolygon($self->scaled_points_to_pixel($self->{bed_polygon}, 1), 0, 0); } # draw print center if (@{$self->{objects}} && $Slic3r::GUI::Settings->{_}{autocenter}) { my $center = $self->unscaled_point_to_pixel($self->{print_center}); $dc->SetPen($self->{print_center_pen}); $dc->DrawLine($center->[X], 0, $center->[X], $size[Y]); $dc->DrawLine(0, $center->[Y], $size[X], $center->[Y]); $dc->SetTextForeground(Wx::Colour->new(0,0,0)); $dc->SetFont(Wx::Font->new(10, wxDEFAULT, wxNORMAL, wxNORMAL)); $dc->DrawLabel("X = " . sprintf('%.0f', $self->{print_center}->[X]), Wx::Rect->new(0, 0, $center->[X]*2, $self->GetSize->GetHeight), wxALIGN_CENTER_HORIZONTAL | wxALIGN_BOTTOM); $dc->DrawRotatedText("Y = " . sprintf('%.0f', $self->{print_center}->[Y]), 0, $center->[Y]+15, 90); } # draw frame if (0) { $dc->SetPen($self->{dark_pen}); $dc->SetBrush($self->{transparent_brush}); $dc->DrawRectangle(0, 0, @size); } # draw text if plate is empty if (!@{$self->{objects}}) { $dc->SetTextForeground(Wx::Colour->new(@BED_OBJECTS)); $dc->SetFont(Wx::Font->new(14, wxDEFAULT, wxNORMAL, wxNORMAL)); $dc->DrawLabel(CANVAS_TEXT, Wx::Rect->new(0, 0, $self->GetSize->GetWidth, $self->GetSize->GetHeight), wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL); } else { # draw grid $dc->SetPen($self->{grid_pen}); $dc->DrawLine(map @$_, @$_) for @{$self->{grid}}; } # draw thumbnails $dc->SetPen($self->{dark_pen}); $self->clean_instance_thumbnails; for my $obj_idx (0 .. $#{$self->{objects}}) { my $object = $self->{objects}[$obj_idx]; my $model_object = $self->{model}->objects->[$obj_idx]; next unless defined $object->thumbnail; for my $instance_idx (0 .. $#{$model_object->instances}) { my $instance = $model_object->instances->[$instance_idx]; next if !defined $object->transformed_thumbnail; my $thumbnail = $object->transformed_thumbnail->clone; # in scaled model coordinates $thumbnail->translate(map scale($_), @{$instance->offset}); $object->instance_thumbnails->[$instance_idx] = $thumbnail; if (defined $self->{drag_object} && $self->{drag_object}[0] == $obj_idx && $self->{drag_object}[1] == $instance_idx) { $dc->SetBrush($self->{dragged_brush}); } elsif ($object->selected && $object->selected_instance == $instance_idx) { $dc->SetBrush($self->{instance_brush}); } elsif ($object->selected) { $dc->SetBrush($self->{selected_brush}); } else { $dc->SetBrush($self->{objects_brush}); } foreach my $expolygon (@$thumbnail) { foreach my $points (@{$expolygon->pp}) { $dc->DrawPolygon($self->scaled_points_to_pixel($points, 1), 0, 0); } } if (0) { # draw bounding box for debugging purposes my $bb = $model_object->instance_bounding_box($instance_idx); $bb->scale($self->{scaling_factor}); # no need to translate by instance offset because instance_bounding_box() does that my $points = $bb->polygon->pp; $dc->SetPen($self->{clearance_pen}); $dc->SetBrush($self->{transparent_brush}); $dc->DrawPolygon($self->_y($points), 0, 0); } # if sequential printing is enabled and we have more than one object, draw clearance area if ($self->{config}->complete_objects && (map @{$_->instances}, @{$self->{model}->objects}) > 1) { my ($clearance) = @{offset([$thumbnail->convex_hull], (scale($self->{config}->extruder_clearance_radius) / 2), 1, JT_ROUND, scale(0.1))}; $dc->SetPen($self->{clearance_pen}); $dc->SetBrush($self->{transparent_brush}); $dc->DrawPolygon($self->scaled_points_to_pixel($clearance, 1), 0, 0); } } } # draw skirt if (@{$self->{objects}} && $self->{config}->skirts) { my @points = map @{$_->contour}, map @$_, map @{$_->instance_thumbnails}, @{$self->{objects}}; if (@points >= 3) { my ($convex_hull) = @{offset([convex_hull(\@points)], scale max($self->{config}->brim_width + $self->{config}->skirt_distance), 1, JT_ROUND, scale(0.1))}; $dc->SetPen($self->{skirt_pen}); $dc->SetBrush($self->{transparent_brush}); $dc->DrawPolygon($self->scaled_points_to_pixel($convex_hull, 1), 0, 0); } } $event->Skip; } sub mouse_event { my ($self, $event) = @_; my $pos = $event->GetPosition; my $point = $self->point_to_model_units([ $pos->x, $pos->y ]); #]] if ($event->ButtonDown) { # On Linux, Focus is needed in order to move selected instance using keyboard arrows. $self->SetFocus; $self->{on_select_object}->(undef); $self->{selected_instance} = undef; # traverse objects and instances in reverse order, so that if they're overlapping # we get the one that gets drawn last, thus on top (as user expects that to move) OBJECTS: for my $obj_idx (reverse 0 .. $#{$self->{objects}}) { my $object = $self->{objects}->[$obj_idx]; for my $instance_idx (reverse 0 .. $#{ $object->instance_thumbnails }) { my $thumbnail = $object->instance_thumbnails->[$instance_idx]; if (defined first { $_->contour->contains_point($point) } @$thumbnail) { $self->{on_select_object}->($obj_idx); if ($event->LeftDown) { # start dragging my $instance = $self->{model}->objects->[$obj_idx]->instances->[$instance_idx]; my $instance_origin = [ map scale($_), @{$instance->offset} ]; $self->{drag_start_pos} = [ # displacement between the click and the instance origin in scaled model units $point->x - $instance_origin->[X], $point->y - $instance_origin->[Y], #- ]; $self->{drag_object} = [ $obj_idx, $instance_idx ]; $self->{objects}->[$obj_idx]->selected_instance($instance_idx); $self->{selected_instance} = $self->{drag_object}; } elsif ($event->RightDown) { $self->{on_right_click}->($pos); } last OBJECTS; } } } $self->Refresh; } elsif ($event->LeftUp) { $self->{on_instances_moved}->() if $self->{drag_object}; $self->{drag_start_pos} = undef; $self->{drag_object} = undef; $self->SetCursor(wxSTANDARD_CURSOR); } elsif ($event->LeftDClick) { $self->{on_double_click}->(); } elsif ($event->Dragging) { return if !$self->{drag_start_pos}; # concurrency problems my ($obj_idx, $instance_idx) = @{ $self->{drag_object} }; my $model_object = $self->{model}->objects->[$obj_idx]; $model_object->instances->[$instance_idx]->set_offset( Slic3r::Pointf->new( unscale($point->[X] - $self->{drag_start_pos}[X]), unscale($point->[Y] - $self->{drag_start_pos}[Y]), )); $model_object->update_bounding_box; $self->Refresh; } elsif ($event->Moving) { my $cursor = wxSTANDARD_CURSOR; if (defined first { $_->contour->contains_point($point) } map @$_, map @{$_->instance_thumbnails}, @{ $self->{objects} }) { $cursor = Wx::Cursor->new(wxCURSOR_HAND); } $self->SetCursor($cursor); } } sub nudge_instance{ my ($self, $direction) = @_; # Get the selected instance of an object. if (!defined $self->{selected_instance}) { # Check if an object is selected. for my $obj_idx (0 .. $#{$self->{objects}}) { if ($self->{objects}->[$obj_idx]->selected) { if ($self->{objects}->[$obj_idx]->selected_instance != -1) { $self->{selected_instance} = [$obj_idx, $self->{objects}->[$obj_idx]->selected_instance]; } } } } return if not defined ($self->{selected_instance}); my ($obj_idx, $instance_idx) = @{ $self->{selected_instance} }; my $object = $self->{model}->objects->[$obj_idx]; my $instance = $object->instances->[$instance_idx]; # Get the nudge values. my $x_nudge = 0; my $y_nudge = 0; $self->{nudge_value} = ($Slic3r::GUI::Settings->{_}{nudge_val} < 0.1 ? 0.1 : $Slic3r::GUI::Settings->{_}{nudge_val}) / &Slic3r::SCALING_FACTOR; if ($direction eq 'right'){ $x_nudge = $self->{nudge_value}; } elsif ($direction eq 'left'){ $x_nudge = -1 * $self->{nudge_value}; } elsif ($direction eq 'up'){ $y_nudge = $self->{nudge_value}; } elsif ($direction eq 'down'){ $y_nudge = -$self->{nudge_value}; } my $point = Slic3r::Pointf->new($x_nudge, $y_nudge); my $instance_origin = [ map scale($_), @{$instance->offset} ]; $point = [ map scale($_), @{$point} ]; $instance->set_offset( Slic3r::Pointf->new( unscale( $instance_origin->[X] + $x_nudge), unscale( $instance_origin->[Y] + $y_nudge), )); $object->update_bounding_box; $self->Refresh; $self->{on_instances_moved}->(); } sub update_bed_size { my $self = shift; # when the canvas is not rendered yet, its GetSize() method returns 0,0 my $canvas_size = $self->GetSize; my ($canvas_w, $canvas_h) = ($canvas_size->GetWidth, $canvas_size->GetHeight); return if $canvas_w == 0; # get bed shape polygon $self->{bed_polygon} = my $polygon = Slic3r::Polygon->new_scale(@{$self->{config}->bed_shape}); my $bb = $polygon->bounding_box; my $size = $bb->size; # calculate the scaling factor needed for constraining print bed area inside preview # scaling_factor is expressed in pixel / mm $self->{scaling_factor} = min($canvas_w / unscale($size->x), $canvas_h / unscale($size->y)); #) # calculate the displacement needed to center bed $self->{bed_origin} = [ $canvas_w/2 - (unscale($bb->x_max + $bb->x_min)/2 * $self->{scaling_factor}), $canvas_h - ($canvas_h/2 - (unscale($bb->y_max + $bb->y_min)/2 * $self->{scaling_factor})), ]; # calculate print center my $center = $bb->center; $self->{print_center} = [ unscale($center->x), unscale($center->y) ]; #)) # cache bed contours and grid { my $step = scale 10; # 1cm grid my @polylines = (); for (my $x = $bb->x_min - ($bb->x_min % $step) + $step; $x < $bb->x_max; $x += $step) { push @polylines, Slic3r::Polyline->new([$x, $bb->y_min], [$x, $bb->y_max]); } for (my $y = $bb->y_min - ($bb->y_min % $step) + $step; $y < $bb->y_max; $y += $step) { push @polylines, Slic3r::Polyline->new([$bb->x_min, $y], [$bb->x_max, $y]); } @polylines = @{intersection_pl(\@polylines, [$polygon])}; $self->{grid} = [ map $self->scaled_points_to_pixel([ @$_[0,-1] ], 1), @polylines ]; } } sub clean_instance_thumbnails { my ($self) = @_; foreach my $object (@{ $self->{objects} }) { @{ $object->instance_thumbnails } = (); } } # convert a model coordinate into a pixel coordinate sub unscaled_point_to_pixel { my ($self, $point) = @_; my $canvas_height = $self->GetSize->GetHeight; my $zero = $self->{bed_origin}; return [ $point->[X] * $self->{scaling_factor} + $zero->[X], $canvas_height - $point->[Y] * $self->{scaling_factor} + ($zero->[Y] - $canvas_height), ]; } sub scaled_points_to_pixel { my ($self, $points, $unscale) = @_; my $result = []; foreach my $point (@$points) { $point = [ map unscale($_), @$point ] if $unscale; push @$result, $self->unscaled_point_to_pixel($point); } return $result; } sub point_to_model_units { my ($self, $point) = @_; my $zero = $self->{bed_origin}; return Slic3r::Point->new( scale ($point->[X] - $zero->[X]) / $self->{scaling_factor}, scale ($zero->[Y] - $point->[Y]) / $self->{scaling_factor}, ); } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater/2DToolpaths.pm000066400000000000000000000614111327442435500211470ustar00rootroot00000000000000# 2D preview of the tool paths of a single layer, using a thin line. # OpenGL is used to render the paths. # Vojtech also added a 2D simulation of under/over extrusion in a single layer. package Slic3r::GUI::Plater::2DToolpaths; use strict; use warnings; use utf8; use Slic3r::Print::State ':steps'; use Wx qw(:misc :sizer :slider :statictext wxWHITE); use Wx::Event qw(EVT_SLIDER EVT_KEY_DOWN); use base qw(Wx::Panel Class::Accessor); # Color Scheme use Slic3r::GUI::ColorScheme; __PACKAGE__->mk_accessors(qw(print enabled)); sub new { my $class = shift; my ($parent, $print) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition); if ( ( defined $Slic3r::GUI::Settings->{_}{colorscheme} ) && ( my $getScheme = Slic3r::GUI::ColorScheme->can($Slic3r::GUI::Settings->{_}{colorscheme}) ) ) { $getScheme->(); $self->SetBackgroundColour(Wx::Colour->new(@BACKGROUND255)); } else { Slic3r::GUI::ColorScheme->getDefault(); $self->SetBackgroundColour(Wx::wxWHITE); } # init GUI elements my $canvas = $self->{canvas} = Slic3r::GUI::Plater::2DToolpaths::Canvas->new($self, $print); my $slider = $self->{slider} = Wx::Slider->new( $self, -1, 0, # default 0, # min # we set max to a bogus non-zero value because the MSW implementation of wxSlider # will skip drawing the slider if max <= min: 1, # max wxDefaultPosition, wxDefaultSize, wxVERTICAL | wxSL_INVERSE, ); my $z_label = $self->{z_label} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, [40,-1], wxALIGN_CENTRE_HORIZONTAL); $z_label->SetFont($Slic3r::GUI::small_font); my $vsizer = Wx::BoxSizer->new(wxVERTICAL); $vsizer->Add($slider, 1, wxALL | wxEXPAND | wxALIGN_CENTER, 3); $vsizer->Add($z_label, 0, wxALL | wxEXPAND | wxALIGN_CENTER, 3); my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $sizer->Add($canvas, 1, wxALL | wxEXPAND, 0); $sizer->Add($vsizer, 0, wxTOP | wxBOTTOM | wxEXPAND, 5); EVT_SLIDER($self, $slider, sub { $self->set_z($self->{layers_z}[$slider->GetValue]) if $self->enabled; }); EVT_KEY_DOWN($canvas, sub { my ($s, $event) = @_; my $key = $event->GetKeyCode; if ($key == 85 || $key == 315) { $slider->SetValue($slider->GetValue + 1); $self->set_z($self->{layers_z}[$slider->GetValue]); } elsif ($key == 68 || $key == 317) { $slider->SetValue($slider->GetValue - 1); $self->set_z($self->{layers_z}[$slider->GetValue]); } else { $event->Skip; } }); $self->SetSizer($sizer); $self->SetMinSize($self->GetSize); $sizer->SetSizeHints($self); # init print $self->{print} = $print; $self->reload_print; return $self; } sub reload_print { my ($self) = @_; # we require that there's at least one object and the posSlice step # is performed on all of them (this ensures that _shifted_copies was # populated and we know the number of layers) if (!$self->print->object_step_done(STEP_SLICE)) { $self->enabled(0); $self->{slider}->Hide; $self->{canvas}->Refresh; # clears canvas return; } $self->{canvas}->bb($self->print->total_bounding_box); $self->{canvas}->_dirty(1); my %z = (); # z => 1 foreach my $object (@{$self->{print}->objects}) { foreach my $layer (@{$object->layers}, @{$object->support_layers}) { $z{$layer->print_z} = 1; } } $self->enabled(1); $self->{layers_z} = [ sort { $a <=> $b } keys %z ]; $self->{slider}->SetRange(0, scalar(@{$self->{layers_z}})-1); if ((my $z_idx = $self->{slider}->GetValue) <= $#{$self->{layers_z}}) { $self->set_z($self->{layers_z}[$z_idx]); } else { $self->{slider}->SetValue(0); $self->set_z($self->{layers_z}[0]) if @{$self->{layers_z}}; } $self->{slider}->Show; $self->Layout; } sub set_z { my ($self, $z) = @_; return if !$self->enabled; $self->{z_label}->SetLabel(sprintf '%.2f', $z); $self->{canvas}->set_z($z); } package Slic3r::GUI::Plater::2DToolpaths::Canvas; use Wx::Event qw(EVT_PAINT EVT_SIZE EVT_IDLE EVT_MOUSEWHEEL EVT_MOUSE_EVENTS); use OpenGL qw(:glconstants :glfunctions :glufunctions :gluconstants); use base qw(Wx::GLCanvas Class::Accessor); use Wx::GLCanvas qw(:all); use List::Util qw(min max first); use Slic3r::Geometry qw(scale unscale epsilon X Y); use Slic3r::Print::State ':steps'; # Color Scheme use Slic3r::GUI::ColorScheme; __PACKAGE__->mk_accessors(qw( print z layers color init bb _camera_bb _dirty _zoom _camera_target _drag_start_xy )); # make OpenGL::Array thread-safe { no warnings 'redefine'; *OpenGL::Array::CLONE_SKIP = sub { 1 }; } sub new { my ($class, $parent, $print) = @_; if ( ( defined $Slic3r::GUI::Settings->{_}{colorscheme} ) && ( Slic3r::GUI::ColorScheme->can($Slic3r::GUI::Settings->{_}{colorscheme}) ) ) { my $myGetSchemeName = \&{"Slic3r::GUI::ColorScheme::$Slic3r::GUI::Settings->{_}{colorscheme}"}; $myGetSchemeName->(); } else { Slic3r::GUI::ColorScheme->getDefault(); } my $self = (Wx::wxVERSION >= 3.000003) ? # The wxWidgets 3.0.3-beta have a bug, they crash with NULL attribute list. $class->SUPER::new($parent, -1, Wx::wxDefaultPosition, Wx::wxDefaultSize, 0, "", [WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 24, 0]) : $class->SUPER::new($parent); # Immediatelly force creation of the OpenGL context to consume the static variable s_wglContextAttribs. $self->GetContext(); $self->print($print); $self->_zoom(1); # 2D point in model space $self->_camera_target(Slic3r::Pointf->new(0,0)); EVT_PAINT($self, sub { my $dc = Wx::PaintDC->new($self); $self->Render($dc); }); EVT_SIZE($self, sub { $self->_dirty(1) }); EVT_IDLE($self, sub { return unless $self->_dirty; return if !$self->IsShownOnScreen; $self->Resize; $self->Refresh; }); EVT_MOUSEWHEEL($self, sub { my ($self, $e) = @_; return if !$self->GetParent->enabled; my $old_zoom = $self->_zoom; # Calculate the zoom delta and apply it to the current zoom factor my $zoom = -$e->GetWheelRotation() / $e->GetWheelDelta(); if ($Slic3r::GUI::Settings->{_}{invert_zoom}) { $zoom *= -1; } $zoom = max(min($zoom, 4), -4); $zoom /= 10; $self->_zoom($self->_zoom / (1-$zoom)); $self->_zoom(1) if $self->_zoom > 1; # prevent from zooming out too much { # In order to zoom around the mouse point we need to translate # the camera target. This math is almost there but not perfect yet... my $camera_bb_size = $self->_camera_bb->size; my $size = Slic3r::Pointf->new($self->GetSizeWH); my $pos = Slic3r::Pointf->new($e->GetPositionXY); # calculate the zooming center in pixel coordinates relative to the viewport center my $vec = Slic3r::Pointf->new($pos->x - $size->x/2, $pos->y - $size->y/2); #- # calculate where this point will end up after applying the new zoom my $vec2 = $vec->clone; $vec2->scale($old_zoom / $self->_zoom); # move the camera target by the difference of the two positions $self->_camera_target->translate( -($vec->x - $vec2->x) * $camera_bb_size->x / $size->x, ($vec->y - $vec2->y) * $camera_bb_size->y / $size->y, #// ); } $self->_dirty(1); $self->Refresh; }); EVT_MOUSE_EVENTS($self, \&mouse_event); return $self; } sub zoom{ my($self, $direction) = @_; if( $direction eq 'in'){ $self->_zoom($self->_zoom / (1+0.3)); } elsif($direction eq 'out'){ $self->_zoom($self->_zoom / (1-0.3)); $self->_zoom(1) if $self->_zoom > 1; # prevent from zooming out too much } #apply changes $self->_dirty(1); $self->Refresh; } sub mouse_event { my ($self, $e) = @_; return if !$self->GetParent->enabled; my $pos = Slic3r::Pointf->new($e->GetPositionXY); if ($e->Entering && &Wx::wxMSW) { # wxMSW needs focus in order to catch mouse wheel events $self->SetFocus; } elsif ($e->Dragging) { if ($e->LeftIsDown || $e->MiddleIsDown || $e->RightIsDown) { # if dragging, translate view if (defined $self->_drag_start_xy) { my $move = $self->_drag_start_xy->vector_to($pos); # in pixels # get viewport and camera size in order to convert pixel to model units my ($x, $y) = $self->GetSizeWH; my $camera_bb_size = $self->_camera_bb->size; # compute translation in model units $self->_camera_target->translate( -$move->x * $camera_bb_size->x / $x, $move->y * $camera_bb_size->y / $y, # /** ); $self->_dirty(1); $self->Refresh; } $self->_drag_start_xy($pos); } } elsif ($e->LeftUp || $e->MiddleUp || $e->RightUp) { $self->_drag_start_xy(undef); } else { $e->Skip(); } } sub set_z { my ($self, $z) = @_; my $print = $self->print; # can we have interlaced layers? my $interlaced = (defined first { $_->config->support_material } @{$print->objects}) || (defined first { $_->config->infill_every_layers > 1 } @{$print->regions}); my $max_layer_height = $print->max_allowed_layer_height; my @layers = (); foreach my $object (@{$print->objects}) { foreach my $layer (@{$object->layers}, @{$object->support_layers}) { if ($interlaced) { push @layers, $layer if $z > ($layer->print_z - $max_layer_height - epsilon) && $z <= $layer->print_z + epsilon; } else { push @layers, $layer if abs($layer->print_z - $z) < epsilon; } } } # reverse layers so that we draw the lowermost (i.e. current) on top $self->z($z); $self->layers([ reverse @layers ]); $self->Refresh; } sub Render { my ($self, $dc) = @_; # prevent calling SetCurrent() when window is not shown yet return unless $self->IsShownOnScreen; return unless my $context = $self->GetContext; $self->SetCurrent($context); $self->InitGL; if ($DEFAULT_COLORSCHEME==1){ glClearColor(1, 1, 1, 0); } else{ glClearColor(@BACKGROUND_COLOR, 0); } glClear(GL_COLOR_BUFFER_BIT); if (!$self->GetParent->enabled || !$self->layers) { glFlush(); $self->SwapBuffers; return; } glDisable(GL_DEPTH_TEST); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); # anti-alias if (0) { glEnable(GL_LINE_SMOOTH); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); glHint(GL_POLYGON_SMOOTH_HINT, GL_DONT_CARE); } my $tess; if (!(&Wx::wxMSW && $OpenGL::VERSION < 0.6704)) { # We can't use the GLU tesselator on MSW with older OpenGL versions # because of an upstream bug: # http://sourceforge.net/p/pogl/bugs/16/ $tess = gluNewTess(); gluTessCallback($tess, GLU_TESS_BEGIN, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_END, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_VERTEX, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_COMBINE, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_ERROR, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_EDGE_FLAG, 'DEFAULT'); } foreach my $layer (@{$self->layers}) { my $object = $layer->object; # only draw the slice for the current layer next unless abs($layer->print_z - $self->z) < epsilon; # draw slice contour glLineWidth(1); foreach my $copy (@{ $object->_shifted_copies }) { glPushMatrix(); glTranslatef(@$copy, 0); foreach my $slice (@{$layer->slices}) { glColor3f(@TOOL_SHADE); # Inside part shade if ($tess) { gluTessBeginPolygon($tess); foreach my $polygon (@$slice) { gluTessBeginContour($tess); gluTessVertex_p($tess, @$_, 0) for @$polygon; gluTessEndContour($tess); } gluTessEndPolygon($tess); } glColor3f(@TOOL_COLOR); # Perimeter foreach my $polygon (@$slice) { foreach my $line (@{$polygon->lines}) { glBegin(GL_LINES); glVertex2f(@{$line->a}); glVertex2f(@{$line->b}); glEnd(); } } } glPopMatrix(); } } my $skirt_drawn = 0; my $brim_drawn = 0; foreach my $layer (@{$self->layers}) { my $object = $layer->object; my $print_z = $layer->print_z; # draw brim if ($self->print->step_done(STEP_BRIM) && $layer->id == 0 && !$brim_drawn) { $self->color(@TOOL_DARK); $self->_draw(undef, $print_z, $_) for @{$self->print->brim}; $brim_drawn = 1; } if ($self->print->step_done(STEP_SKIRT) && ($self->print->has_infinite_skirt() || $self->print->config->skirt_height > $layer->id) && !$skirt_drawn) { $self->color(@TOOL_DARK); $self->_draw(undef, $print_z, $_) for @{$self->print->skirt}; $skirt_drawn = 1; } foreach my $layerm (@{$layer->regions}) { if ($object->step_done(STEP_PERIMETERS)) { $self->color(@TOOL_STEPPERIM); $self->_draw($object, $print_z, $_) for map @$_, @{$layerm->perimeters}; } if ($object->step_done(STEP_INFILL)) { $self->color(@TOOL_INFILL); $self->_draw($object, $print_z, $_) for map @$_, @{$layerm->fills}; } } if ($object->step_done(STEP_SUPPORTMATERIAL)) { if ($layer->isa('Slic3r::Layer::Support')) { $self->color(@TOOL_SUPPORT); $self->_draw($object, $print_z, $_) for @{$layer->support_fills}; $self->_draw($object, $print_z, $_) for @{$layer->support_interface_fills}; } } } gluDeleteTess($tess) if $tess; glFlush(); $self->SwapBuffers; } sub _draw { my ($self, $object, $print_z, $path) = @_; my @paths = $path->isa('Slic3r::ExtrusionLoop') ? @$path : ($path); $self->_draw_path($object, $print_z, $_) for @paths; } sub _draw_path { my ($self, $object, $print_z, $path) = @_; return if $print_z - $path->height > $self->z - epsilon; if (abs($print_z - $self->z) < epsilon) { glColor3f($self->color->[0], $self->color->[1], $self->color->[2]); } else { glColor3f(0.8, 0.8, 0.8); } glLineWidth(1); if (defined $object) { foreach my $copy (@{ $object->_shifted_copies }) { glPushMatrix(); glTranslatef(@$copy, 0); foreach my $line (@{$path->polyline->lines}) { glBegin(GL_LINES); glVertex2f(@{$line->a}); glVertex2f(@{$line->b}); glEnd(); } glPopMatrix(); } } else { foreach my $line (@{$path->polyline->lines}) { glBegin(GL_LINES); glVertex2f(@{$line->a}); glVertex2f(@{$line->b}); glEnd(); } } } sub InitGL { my $self = shift; return if $self->init; return unless $self->GetContext; $self->init(1); } sub GetContext { my ($self) = @_; if (Wx::wxVERSION >= 2.009) { return $self->{context} ||= Wx::GLContext->new($self); } else { return $self->SUPER::GetContext; } } sub SetCurrent { my ($self, $context) = @_; if (Wx::wxVERSION >= 2.009) { return $self->SUPER::SetCurrent($context); } else { return $self->SUPER::SetCurrent; } } sub Resize { my ($self) = @_; return unless $self->GetContext; return unless $self->bb; $self->_dirty(0); $self->SetCurrent($self->GetContext); my ($x, $y) = $self->GetSizeWH; glViewport(0, 0, $x, $y); glMatrixMode(GL_PROJECTION); glLoadIdentity(); my $bb = $self->bb->clone; # center bounding box around origin before scaling it my $bb_center = $bb->center; $bb->translate(@{$bb_center->negative}); # scale bounding box according to zoom factor $bb->scale($self->_zoom); # reposition bounding box around original center $bb->translate(@{$bb_center}); # translate camera $bb->translate(@{$self->_camera_target}); # keep camera_bb within total bb # (i.e. prevent user from panning outside the bounding box) { my @translate = (0,0); if ($bb->x_min < $self->bb->x_min) { $translate[X] += $self->bb->x_min - $bb->x_min; } if ($bb->y_min < $self->bb->y_min) { $translate[Y] += $self->bb->y_min - $bb->y_min; } if ($bb->x_max > $self->bb->x_max) { $translate[X] -= $bb->x_max - $self->bb->x_max; } if ($bb->y_max > $self->bb->y_max) { $translate[Y] -= $bb->y_max - $self->bb->y_max; } $self->_camera_target->translate(@translate); $bb->translate(@translate); } # save camera $self->_camera_bb($bb); my ($x1, $y1, $x2, $y2) = ($bb->x_min, $bb->y_min, $bb->x_max, $bb->y_max); if (($x2 - $x1)/($y2 - $y1) > $x/$y) { # adjust Y my $new_y = $y * ($x2 - $x1) / $x; $y1 = ($y2 + $y1)/2 - $new_y/2; $y2 = $y1 + $new_y; } else { my $new_x = $x * ($y2 - $y1) / $y; $x1 = ($x2 + $x1)/2 - $new_x/2; $x2 = $x1 + $new_x; } glOrtho($x1, $x2, $y1, $y2, 0, 1); glMatrixMode(GL_MODELVIEW); } sub line { my ( $x1, $y1, $x2, $y2, # coordinates of the line $w, # width/thickness of the line in pixel $Cr, $Cg, $Cb, # RGB color components $Br, $Bg, $Bb, # color of background when alphablend=false # Br=alpha of color when alphablend=true $alphablend, # use alpha blend or not ) = @_; my $t; my $R; my $f = $w - int($w); my $A; if ($alphablend) { $A = $Br; } else { $A = 1; } # determine parameters t,R if ($w >= 0 && $w < 1) { $t = 0.05; $R = 0.48 + 0.32 * $f; if (!$alphablend) { $Cr += 0.88 * (1-$f); $Cg += 0.88 * (1-$f); $Cb += 0.88 * (1-$f); $Cr = 1.0 if ($Cr > 1.0); $Cg = 1.0 if ($Cg > 1.0); $Cb = 1.0 if ($Cb > 1.0); } else { $A *= $f; } } elsif ($w >= 1.0 && $w < 2.0) { $t = 0.05 + $f*0.33; $R = 0.768 + 0.312*$f; } elsif ($w >= 2.0 && $w < 3.0) { $t = 0.38 + $f*0.58; $R = 1.08; } elsif ($w >= 3.0 && $w < 4.0) { $t = 0.96 + $f*0.48; $R = 1.08; } elsif ($w >= 4.0 && $w < 5.0) { $t= 1.44 + $f*0.46; $R = 1.08; } elsif ($w >= 5.0 && $w < 6.0) { $t= 1.9 + $f*0.6; $R = 1.08; } elsif ($w >= 6.0) { my $ff = $w - 6.0; $t = 2.5 + $ff*0.50; $R = 1.08; } #printf( "w=%f, f=%f, C=%.4f\n", $w, $f, $C); # determine angle of the line to horizontal my $tx = 0; my $ty = 0; # core thinkness of a line my $Rx = 0; my $Ry = 0; # fading edge of a line my $cx = 0; my $cy = 0; # cap of a line my $ALW = 0.01; my $dx = $x2 - $x1; my $dy = $y2 - $y1; if (abs($dx) < $ALW) { # vertical $tx = $t; $ty = 0; $Rx = $R; $Ry = 0; if ($w > 0.0 && $w < 1.0) { $tx *= 8; } elsif ($w == 1.0) { $tx *= 10; } } elsif (abs($dy) < $ALW) { #horizontal $tx = 0; $ty = $t; $Rx = 0; $Ry = $R; if ($w > 0.0 && $w < 1.0) { $ty *= 8; } elsif ($w == 1.0) { $ty *= 10; } } else { if ($w < 3) { # approximate to make things even faster my $m = $dy/$dx; # and calculate tx,ty,Rx,Ry if ($m > -0.4142 && $m <= 0.4142) { # -22.5 < $angle <= 22.5, approximate to 0 (degree) $tx = $t * 0.1; $ty = $t; $Rx = $R * 0.6; $Ry = $R; } elsif ($m > 0.4142 && $m <= 2.4142) { # 22.5 < $angle <= 67.5, approximate to 45 (degree) $tx = $t * -0.7071; $ty = $t * 0.7071; $Rx = $R * -0.7071; $Ry = $R * 0.7071; } elsif ($m > 2.4142 || $m <= -2.4142) { # 67.5 < $angle <= 112.5, approximate to 90 (degree) $tx = $t; $ty = $t*0.1; $Rx = $R; $Ry = $R*0.6; } elsif ($m > -2.4142 && $m < -0.4142) { # 112.5 < angle < 157.5, approximate to 135 (degree) $tx = $t * 0.7071; $ty = $t * 0.7071; $Rx = $R * 0.7071; $Ry = $R * 0.7071; } else { # error in determining angle printf("error in determining angle: m=%.4f\n", $m); } } else { # calculate to exact $dx= $y1 - $y2; $dy= $x2 - $x1; my $L = sqrt($dx*$dx + $dy*$dy); $dx /= $L; $dy /= $L; $cx = -0.6*$dy; $cy=0.6*$dx; $tx = $t*$dx; $ty = $t*$dy; $Rx = $R*$dx; $Ry = $R*$dy; } } # draw the line by triangle strip glBegin(GL_TRIANGLE_STRIP); if (!$alphablend) { glColor3f($Br, $Bg, $Bb); } else { glColor4f($Cr, $Cg, $Cb, 0); } glVertex2f($x1 - $tx - $Rx, $y1 - $ty - $Ry); # fading edge glVertex2f($x2 - $tx - $Rx, $y2 - $ty - $Ry); if (!$alphablend) { glColor3f($Cr, $Cg, $Cb); } else { glColor4f($Cr, $Cg, $Cb, $A); } glVertex2f($x1 - $tx, $y1 - $ty); # core glVertex2f($x2 - $tx, $y2 - $ty); glVertex2f($x1 + $tx, $y1 + $ty); glVertex2f($x2 + $tx, $y2 + $ty); if ((abs($dx) < $ALW || abs($dy) < $ALW) && $w <= 1.0) { # printf("skipped one fading edge\n"); } else { if (!$alphablend) { glColor3f($Br, $Bg, $Bb); } else { glColor4f($Cr, $Cg, $Cb, 0); } glVertex2f($x1 + $tx+ $Rx, $y1 + $ty + $Ry); # fading edge glVertex2f($x2 + $tx+ $Rx, $y2 + $ty + $Ry); } glEnd(); # cap if ($w < 3) { # do not draw cap } else { # draw cap glBegin(GL_TRIANGLE_STRIP); if (!$alphablend) { glColor3f($Br, $Bg, $Bb); } else { glColor4f($Cr, $Cg, $Cb, 0); } glVertex2f($x1 - $Rx + $cx, $y1 - $Ry + $cy); glVertex2f($x1 + $Rx + $cx, $y1 + $Ry + $cy); glColor3f($Cr, $Cg, $Cb); glVertex2f($x1 - $tx - $Rx, $y1 - $ty - $Ry); glVertex2f($x1 + $tx + $Rx, $y1 + $ty + $Ry); glEnd(); glBegin(GL_TRIANGLE_STRIP); if (!$alphablend) { glColor3f($Br, $Bg, $Bb); } else { glColor4f($Cr, $Cg, $Cb, 0); } glVertex2f($x2 - $Rx - $cx, $y2 - $Ry - $cy); glVertex2f($x2 + $Rx - $cx, $y2 + $Ry - $cy); glColor3f($Cr, $Cg, $Cb); glVertex2f($x2 - $tx - $Rx, $y2 - $ty - $Ry); glVertex2f($x2 + $tx + $Rx, $y2 + $ty + $Ry); glEnd(); } } package Slic3r::GUI::Plater::2DToolpaths::Dialog; use Wx qw(:dialog :id :misc :sizer); use Wx::Event qw(EVT_CLOSE); use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent, $print) = @_; my $self = $class->SUPER::new($parent, -1, "Toolpaths", wxDefaultPosition, [500,500], wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add(Slic3r::GUI::Plater::2DToolpaths->new($self, $print), 1, wxEXPAND, 0); $self->SetSizer($sizer); $self->SetMinSize($self->GetSize); # needed to actually free memory EVT_CLOSE($self, sub { $self->EndModal(wxID_OK); $self->Destroy; }); return $self; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater/3D.pm000066400000000000000000000053461327442435500172570ustar00rootroot00000000000000package Slic3r::GUI::Plater::3D; use strict; use warnings; use utf8; use List::Util qw(); use Slic3r::Geometry qw(); use Slic3r::Geometry::Clipper qw(); use Wx qw(:misc :pen :brush :sizer :font :cursor wxTAB_TRAVERSAL); use Wx::Event qw(); use base qw(Slic3r::GUI::3DScene Class::Accessor); sub new { my $class = shift; my ($parent, $objects, $model, $config) = @_; my $self = $class->SUPER::new($parent); $self->enable_picking(1); $self->enable_moving(1); $self->select_by('object'); $self->drag_by('instance'); $self->{objects} = $objects; $self->{model} = $model; $self->{config} = $config; $self->{on_select_object} = sub {}; $self->{on_instances_moved} = sub {}; $self->on_select(sub { my ($volume_idx) = @_; my $obj_idx = undef; if ($volume_idx != -1) { $obj_idx = $self->object_idx($volume_idx); } $self->{on_select_object}->($obj_idx) if $self->{on_select_object}; }); $self->on_move(sub { my @volume_idxs = @_; my %done = (); # prevent moving instances twice foreach my $volume_idx (@volume_idxs) { my $volume = $self->volumes->[$volume_idx]; my $obj_idx = $self->object_idx($volume_idx); my $instance_idx = $self->instance_idx($volume_idx); next if $done{"${obj_idx}_${instance_idx}"}; $done{"${obj_idx}_${instance_idx}"} = 1; my $model_object = $self->{model}->get_object($obj_idx); $model_object ->instances->[$instance_idx] ->offset ->translate($volume->origin->x, $volume->origin->y); #)) $model_object->invalidate_bounding_box; } $self->{on_instances_moved}->() if $self->{on_instances_moved}; }); return $self; } sub set_on_select_object { my ($self, $cb) = @_; $self->{on_select_object} = $cb; } sub set_on_double_click { my ($self, $cb) = @_; $self->on_double_click($cb); } sub set_on_right_click { my ($self, $cb) = @_; $self->on_right_click($cb); } sub set_on_instances_moved { my ($self, $cb) = @_; $self->{on_instances_moved} = $cb; } sub update { my ($self) = @_; $self->reset_objects; $self->update_bed_size; foreach my $obj_idx (0..$#{$self->{model}->objects}) { my @volume_idxs = $self->load_object($self->{model}, $obj_idx); if ($self->{objects}[$obj_idx]->selected) { $self->select_volume($_) for @volume_idxs; } } } sub update_bed_size { my ($self) = @_; $self->set_bed_shape($self->{config}->bed_shape); } 1;Slic3r-1.3.0/lib/Slic3r/GUI/Plater/3DPreview.pm000066400000000000000000000130071327442435500206120ustar00rootroot00000000000000package Slic3r::GUI::Plater::3DPreview; use strict; use warnings; use utf8; use Slic3r::Print::State ':steps'; use Wx qw(:misc :sizer :slider :statictext); use Wx::Event qw(EVT_SLIDER EVT_KEY_DOWN); use base qw(Wx::Panel Class::Accessor); __PACKAGE__->mk_accessors(qw(print enabled _loaded canvas slider)); sub new { my $class = shift; my ($parent, $print) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition); # init GUI elements my $canvas = Slic3r::GUI::3DScene->new($self); $self->canvas($canvas); my $slider = Wx::Slider->new( $self, -1, 0, # default 0, # min # we set max to a bogus non-zero value because the MSW implementation of wxSlider # will skip drawing the slider if max <= min: 1, # max wxDefaultPosition, wxDefaultSize, wxVERTICAL | wxSL_INVERSE, ); $self->slider($slider); my $z_label = $self->{z_label} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, [40,-1], wxALIGN_CENTRE_HORIZONTAL); $z_label->SetFont($Slic3r::GUI::small_font); my $vsizer = Wx::BoxSizer->new(wxVERTICAL); $vsizer->Add($slider, 1, wxALL | wxEXPAND | wxALIGN_CENTER, 3); $vsizer->Add($z_label, 0, wxALL | wxEXPAND | wxALIGN_CENTER, 3); my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $sizer->Add($canvas, 1, wxALL | wxEXPAND, 0); $sizer->Add($vsizer, 0, wxTOP | wxBOTTOM | wxEXPAND, 5); EVT_SLIDER($self, $slider, sub { $self->set_z($self->{layers_z}[$slider->GetValue]) if $self->enabled; }); EVT_KEY_DOWN($canvas, sub { my ($s, $event) = @_; my $key = $event->GetKeyCode; if ($key == 85 || $key == 315) { $slider->SetValue($slider->GetValue + 1); $self->set_z($self->{layers_z}[$slider->GetValue]); } elsif ($key == 68 || $key == 317) { $slider->SetValue($slider->GetValue - 1); $self->set_z($self->{layers_z}[$slider->GetValue]); } else { $event->Skip; } }); $self->SetSizer($sizer); $self->SetMinSize($self->GetSize); $sizer->SetSizeHints($self); # init canvas $self->print($print); $self->reload_print; return $self; } sub reload_print { my ($self, $obj_idx) = @_; $self->canvas->reset_objects; $self->_loaded(0); $self->load_print($obj_idx); } sub load_print { my ($self, $obj_idx) = @_; return if $self->_loaded; # we require that there's at least one object and the posSlice step # is performed on all of them (this ensures that _shifted_copies was # populated and we know the number of layers) if (!$self->print->object_step_done(STEP_SLICE)) { $self->enabled(0); $self->slider->Hide; $self->canvas->Refresh; # clears canvas return; } my $z_idx; { my %z = (); # z => 1 if(defined $obj_idx) { # Load only given object foreach my $layer (@{$self->{print}->get_object($obj_idx)->layers}) { $z{$layer->print_z} = 1; } }else{ # Load all objects on the plater + support material foreach my $object (@{$self->{print}->objects}) { foreach my $layer (@{$object->layers}, @{$object->support_layers}) { $z{$layer->print_z} = 1; } } } $self->enabled(1); $self->{layers_z} = [ sort { $a <=> $b } keys %z ]; $self->slider->SetRange(0, scalar(@{$self->{layers_z}})-1); if (($z_idx = $self->slider->GetValue) <= $#{$self->{layers_z}} && $self->slider->GetValue != 0) { # use $z_idx } else { $self->slider->SetValue(scalar(@{$self->{layers_z}})-1); $z_idx = @{$self->{layers_z}} ? -1 : undef; } $self->slider->Show; $self->Layout; } if ($self->IsShown) { # set colors $self->canvas->color_toolpaths_by($Slic3r::GUI::Settings->{_}{color_toolpaths_by}); if ($self->canvas->color_toolpaths_by eq 'extruder') { my @filament_colors = map { s/^#//; [ map $_/255, (unpack 'C*', pack 'H*', $_), 255 ] } @{$self->print->config->filament_colour}; $self->canvas->colors->[$_] = $filament_colors[$_] for 0..$#filament_colors; } else { $self->canvas->colors([ $self->canvas->default_colors ]); } if(defined $obj_idx) { # Load only one object $self->canvas->load_print_object_toolpaths($self->{print}->get_object($obj_idx)); }else{ # load all objects # load skirt and brim $self->canvas->load_print_toolpaths($self->print); foreach my $object (@{$self->print->objects}) { $self->canvas->load_print_object_toolpaths($object); #my @volume_ids = $self->canvas->load_object($object->model_object); #$self->canvas->volumes->[$_]->color->[3] = 0.2 for @volume_ids; } } $self->_loaded(1); } $self->set_z($self->{layers_z}[$z_idx]); } sub set_z { my ($self, $z) = @_; return if !$self->enabled; $self->{z_label}->SetLabel(sprintf '%.2f', $z); $self->canvas->set_toolpaths_range(0, $z); $self->canvas->Refresh if $self->IsShown; } sub set_bed_shape { my ($self, $bed_shape) = @_; $self->canvas->set_bed_shape($bed_shape); } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater/LambdaObjectDialog.pm000066400000000000000000000164211327442435500224340ustar00rootroot00000000000000# Generate an anonymous or "lambda" 3D object. This gets used with the Create Modifier option in Settings. # package Slic3r::GUI::Plater::LambdaObjectDialog; use strict; use warnings; use utf8; use Slic3r::Geometry qw(PI X); use Wx qw(wxTheApp :dialog :id :misc :sizer wxTAB_TRAVERSAL wxCB_READONLY wxTE_PROCESS_TAB); use Wx::Event qw(EVT_CLOSE EVT_BUTTON EVT_COMBOBOX EVT_TEXT); use Scalar::Util qw(looks_like_number); use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, "Create Modifier", wxDefaultPosition, [500,500], wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); # Note whether the window was already closed, so a pending update is not executed. $self->{already_closed} = 0; $self->{object_parameters} = { type => 'slab', dim => [1, 1, 1], cyl_r => 1, cyl_h => 1, sph_rho => 1.0, slab_h => 1.0, }; $self->{sizer} = Wx::BoxSizer->new(wxVERTICAL); my $buttons = $self->CreateStdDialogButtonSizer(wxOK | wxCANCEL); EVT_BUTTON($self, wxID_OK, sub { $self->EndModal(wxID_OK); $self->Destroy; }); EVT_BUTTON($self, wxID_CANCEL, sub { $self->EndModal(wxID_CANCEL); $self->Destroy; }); $self->{type} = Wx::ComboBox->new($self, 1, $self->{object_parameters}{type}, wxDefaultPosition, wxDefaultSize, [qw(slab box cylinder sphere)], wxCB_READONLY); my $optgroup_box; $optgroup_box = $self->{optgroup_box} = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Add Cube...', on_change => sub { # Do validation my ($opt_id) = @_; if ($opt_id == 0 || $opt_id == 1 || $opt_id == 2) { if (!looks_like_number($optgroup_box->get_value($opt_id))) { return 0; } } $self->{object_parameters}->{dim}[$opt_id] = $optgroup_box->get_value($opt_id); }, label_width => 100, ); $optgroup_box->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 0, label => 'L (x)', type => 'f', default => $self->{object_parameters}{dim}[0], sidetext => 'mm', )); $optgroup_box->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 1, label => 'W (y)', type => 'f', default => $self->{object_parameters}{dim}[1], sidetext => 'mm', )); $optgroup_box->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 2, label => 'H (z)', type => 'f', default => $self->{object_parameters}{dim}[2], sidetext => 'mm', )); my $optgroup_cylinder; $optgroup_cylinder = $self->{optgroup_cylinder} = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Add Cylinder...', on_change => sub { # Do validation my ($opt_id) = @_; if ($opt_id eq 'cyl_r' || $opt_id eq 'cyl_h') { if (!looks_like_number($optgroup_cylinder->get_value($opt_id))) { return 0; } } $self->{object_parameters}->{$opt_id} = $optgroup_cylinder->get_value($opt_id); }, label_width => 100, ); $optgroup_cylinder->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => "cyl_r", label => 'Radius', type => 'f', default => $self->{object_parameters}{cyl_r}, sidetext => 'mm', )); $optgroup_cylinder->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => "cyl_h", label => 'Height', type => 'f', default => $self->{object_parameters}{cyl_h}, sidetext => 'mm', )); my $optgroup_sphere; $optgroup_sphere = $self->{optgroup_sphere} = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Add Sphere...', on_change => sub { # Do validation my ($opt_id) = @_; if ($opt_id eq 'sph_rho') { if (!looks_like_number($optgroup_sphere->get_value($opt_id))) { return 0; } } $self->{object_parameters}->{$opt_id} = $optgroup_sphere->get_value($opt_id); }, label_width => 100, ); $optgroup_sphere->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => "sph_rho", label => 'Radius', type => 'f', default => $self->{object_parameters}{sph_rho}, sidetext => 'mm', )); my $optgroup_slab; $optgroup_slab = $self->{optgroup_slab} = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Add Slab...', on_change => sub { # Do validation my ($opt_id) = @_; if ($opt_id eq 'slab_h') { if (!looks_like_number($optgroup_slab->get_value($opt_id))) { return 0; } } $self->{object_parameters}->{$opt_id} = $optgroup_slab->get_value($opt_id); }, label_width => 100, ); $optgroup_slab->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => "slab_h", label => 'Thickness', type => 'f', default => $self->{object_parameters}{slab_h}, sidetext => 'mm', )); EVT_COMBOBOX($self, 1, sub{ $self->{object_parameters}->{type} = $self->{type}->GetValue(); $self->_update_ui; }); $self->{sizer}->Add($self->{type}, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); $self->{sizer}->Add($optgroup_box->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); $self->{sizer}->Add($optgroup_cylinder->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); $self->{sizer}->Add($optgroup_sphere->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); $self->{sizer}->Add($optgroup_slab->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); $self->{sizer}->Add($buttons,0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); $self->_update_ui; $self->SetSizer($self->{sizer}); $self->{sizer}->Fit($self); $self->{sizer}->SetSizeHints($self); return $self; } sub ObjectParameter { my ($self) = @_; return $self->{object_parameters}; } sub _update_ui { my ($self) = @_; $self->{sizer}->Hide($self->{optgroup_cylinder}->sizer); $self->{sizer}->Hide($self->{optgroup_slab}->sizer); $self->{sizer}->Hide($self->{optgroup_box}->sizer); $self->{sizer}->Hide($self->{optgroup_sphere}->sizer); if ($self->{type}->GetValue eq "box") { $self->{sizer}->Show($self->{optgroup_box}->sizer); } elsif ($self->{type}->GetValue eq "cylinder") { $self->{sizer}->Show($self->{optgroup_cylinder}->sizer); } elsif ($self->{type}->GetValue eq "slab") { $self->{sizer}->Show($self->{optgroup_slab}->sizer); } elsif ($self->{type}->GetValue eq "sphere") { $self->{sizer}->Show($self->{optgroup_sphere}->sizer); } $self->{sizer}->Fit($self); $self->{sizer}->SetSizeHints($self); } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater/ObjectCutDialog.pm000066400000000000000000000341101327442435500220020ustar00rootroot00000000000000# Cut an object at a Z position, keep either the top or the bottom of the object. # This dialog gets opened with the "Cut..." button above the platter. package Slic3r::GUI::Plater::ObjectCutDialog; use strict; use warnings; use utf8; use POSIX qw(ceil); use Scalar::Util qw(looks_like_number); use Slic3r::Geometry qw(PI X Y Z); use Wx qw(wxTheApp :dialog :id :misc :sizer wxTAB_TRAVERSAL); use Wx::Event qw(EVT_CLOSE EVT_BUTTON); use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, $params{object}->name, wxDefaultPosition, [500,500], wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); $self->{model_object_idx} = $params{model_object_idx}; $self->{model_object} = $params{model_object}; $self->{new_model_objects} = []; # Mark whether the mesh cut is valid. # If not, it needs to be recalculated by _update() on wxTheApp->CallAfter() or on exit of the dialog. $self->{mesh_cut_valid} = 0; # Note whether the window was already closed, so a pending update is not executed. $self->{already_closed} = 0; $self->{model_object}->transform_by_instance($self->{model_object}->get_instance(0), 1); # cut options my $size_z = $self->{model_object}->instance_bounding_box(0)->size->z; $self->{cut_options} = { axis => Z, z => $size_z/2, keep_upper => 0, keep_lower => 1, rotate_lower => 0, preview => 1, }; my $optgroup; $optgroup = $self->{optgroup} = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Cut', on_change => sub { my ($opt_id) = @_; # There seems to be an issue with wxWidgets 3.0.2/3.0.3, where the slider # genates tens of events for a single value change. # Only trigger the recalculation if the value changes # or a live preview was activated and the mesh cut is not valid yet. if ($self->{cut_options}{$opt_id} != $optgroup->get_value($opt_id) || ! $self->{mesh_cut_valid} && $self->_life_preview_active()) { $self->{cut_options}{$opt_id} = $optgroup->get_value($opt_id); $self->{mesh_cut_valid} = 0; wxTheApp->CallAfter(sub { $self->_update; }); } }, label_width => 120, ); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'axis', type => 'select', label => 'Axis', labels => ['X','Y','Z'], values => [X,Y,Z], default => $self->{cut_options}{axis}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'z', type => 'slider', label => 'Z', default => $self->{cut_options}{z}, min => 0, max => $size_z, full_width => 1, )); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Keep', ); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'keep_upper', type => 'bool', label => 'Upper part', default => $self->{cut_options}{keep_upper}, )); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'keep_lower', type => 'bool', label => 'Lower part', default => $self->{cut_options}{keep_lower}, )); $optgroup->append_line($line); } $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'rotate_lower', label => 'Rotate lower part upwards', type => 'bool', tooltip => 'If enabled, the lower part will be rotated by 180° so that the flat cut surface lies on the print bed.', default => $self->{cut_options}{rotate_lower}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'preview', label => 'Show preview', type => 'bool', tooltip => 'If enabled, object will be cut in real time.', default => $self->{cut_options}{preview}, )); { my $cut_button_sizer = Wx::BoxSizer->new(wxVERTICAL); $self->{btn_cut} = Wx::Button->new($self, -1, "Perform cut", wxDefaultPosition, wxDefaultSize); $self->{btn_cut}->SetDefault; $cut_button_sizer->Add($self->{btn_cut}, 0, wxALIGN_RIGHT | wxALL, 10); $self->{btn_cut_grid} = Wx::Button->new($self, -1, "Cut by grid…", wxDefaultPosition, wxDefaultSize); $cut_button_sizer->Add($self->{btn_cut_grid}, 0, wxALIGN_RIGHT | wxALL, 10); $optgroup->append_line(Slic3r::GUI::OptionsGroup::Line->new( sizer => $cut_button_sizer, )); } # left pane with tree my $left_sizer = Wx::BoxSizer->new(wxVERTICAL); $left_sizer->Add($optgroup->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); # right pane with preview canvas my $canvas; if ($Slic3r::GUI::have_OpenGL) { $canvas = $self->{canvas} = Slic3r::GUI::3DScene->new($self); $canvas->load_object($self->{model_object}, undef, [0]); $canvas->set_auto_bed_shape; $canvas->SetSize([500,500]); $canvas->SetMinSize($canvas->GetSize); $canvas->zoom_to_volumes; } $self->{sizer} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{sizer}->Add($left_sizer, 0, wxEXPAND | wxTOP | wxBOTTOM, 10); $self->{sizer}->Add($canvas, 1, wxEXPAND | wxALL, 0) if $canvas; $self->SetSizer($self->{sizer}); $self->SetMinSize($self->GetSize); $self->{sizer}->SetSizeHints($self); EVT_BUTTON($self, $self->{btn_cut}, sub { # Recalculate the cut if the preview was not active. $self->_perform_cut() unless $self->{mesh_cut_valid}; # Adjust position / orientation of the split object halves. if (my $lower = $self->{new_model_objects}[0]) { if ($self->{cut_options}{rotate_lower} && $self->{cut_options}{axis} == Z) { $lower->rotate(PI, X); } $lower->center_around_origin; # align to Z = 0 } if (my $upper = $self->{new_model_objects}[1]) { $upper->center_around_origin; # align to Z = 0 } # Note that the window was already closed, so a pending update will not be executed. $self->{already_closed} = 1; $self->EndModal(wxID_OK); $self->Destroy(); }); EVT_BUTTON($self, $self->{btn_cut_grid}, sub { my $grid_x = Wx::GetTextFromUser("Enter the width of the desired tiles along the X axis:", "Cut by Grid", 100, $self); return if !looks_like_number($grid_x) || $grid_x <= 0; my $grid_y = Wx::GetTextFromUser("Enter the width of the desired tiles along the Y axis:", "Cut by Grid", 100, $self); return if !looks_like_number($grid_y) || $grid_y <= 0; my $process_dialog = Wx::ProgressDialog->new('Cutting…', "Cutting model by grid…", 100, $self, 0); $process_dialog->Pulse; my $meshes = $self->{model_object}->mesh->cut_by_grid(Slic3r::Pointf->new($grid_x, $grid_y)); $self->{new_model_objects} = []; my $bb = $self->{model_object}->bounding_box; $self->{new_model} = my $model = Slic3r::Model->new; for my $i (0..$#$meshes) { push @{$self->{new_model_objects}}, my $o = $model->add_object( name => sprintf('%s (%d)', $self->{model_object}->name, $i+1), ); my $v = $o->add_volume( mesh => $meshes->[$i], name => $o->name, ); $o->center_around_origin; my $i = $o->add_instance( offset => Slic3r::Pointf->new(@{$o->origin_translation->negative}[X,Y]), ); $i->offset->translate( 5 * ceil(($i->offset->x - $bb->center->x) / $grid_x), 5 * ceil(($i->offset->y - $bb->center->y) / $grid_y), ); } $process_dialog->Destroy; # Note that the window was already closed, so a pending update will not be executed. $self->{already_closed} = 1; $self->EndModal(wxID_OK); $self->Destroy(); }); EVT_CLOSE($self, sub { # Note that the window was already closed, so a pending update will not be executed. $self->{already_closed} = 1; $self->EndModal(wxID_CANCEL); $self->Destroy(); }); $self->_update; return $self; } # scale Z down to original size since we're using the transformed mesh for 3D preview # and cut dialog but ModelObject::cut() needs Z without any instance transformation sub _mesh_slice_z_pos { my ($self) = @_; my $bb = $self->{model_object}->instance_bounding_box(0); my $z = $self->{cut_options}{axis} == X ? $bb->x_min : $self->{cut_options}{axis} == Y ? $bb->y_min : $bb->z_min; $z += $self->{cut_options}{z} / $self->{model_object}->instances->[0]->scaling_factor; return $z; } # Only perform live preview if just a single part of the object shall survive. sub _life_preview_active { my ($self) = @_; return $self->{cut_options}{preview} && ($self->{cut_options}{keep_upper} != $self->{cut_options}{keep_lower}); } # Slice the mesh, keep the top / bottom part. sub _perform_cut { my ($self) = @_; # Early exit. If the cut is valid, don't recalculate it. return if $self->{mesh_cut_valid}; my $z = $self->_mesh_slice_z_pos(); my ($new_model) = $self->{model_object}->cut($self->{cut_options}{axis}, $z); my ($upper_object, $lower_object) = @{$new_model->objects}; $self->{new_model} = $new_model; $self->{new_model_objects} = []; if ($self->{cut_options}{keep_upper} && $upper_object->volumes_count > 0) { $self->{new_model_objects}[1] = $upper_object; } if ($self->{cut_options}{keep_lower} && $lower_object->volumes_count > 0) { $self->{new_model_objects}[0] = $lower_object; } $self->{mesh_cut_valid} = 1; } sub _update { my ($self) = @_; # Don't update if the window was already closed. # We are not sure whether the action planned by wxTheApp->CallAfter() may be triggered after the window is closed. # Probably not, but better be safe than sorry, which is espetially true on multiple platforms. return if $self->{already_closed}; # Only recalculate the cut, if the live cut preview is active. my $life_preview_active = $self->_life_preview_active(); $self->_perform_cut() if $life_preview_active; { # scale Z down to original size since we're using the transformed mesh for 3D preview # and cut dialog but ModelObject::cut() needs Z without any instance transformation my $z = $self->_mesh_slice_z_pos(); # update canvas if ($self->{canvas}) { # get volumes to render my @objects = (); if ($life_preview_active) { push @objects, grep defined, @{$self->{new_model_objects}}; } else { push @objects, $self->{model_object}; } # get section contour my @expolygons = (); foreach my $volume (@{$self->{model_object}->volumes}) { next if !$volume->mesh; next if $volume->modifier; my $expp = $volume->mesh->slice_at($self->{cut_options}{axis}, $z); push @expolygons, @$expp; } my $offset = $self->{model_object}->instances->[0]->offset; foreach my $expolygon (@expolygons) { $self->{model_object}->instances->[0]->transform_polygon($_) for @$expolygon; if ($self->{cut_options}{axis} != X) { $expolygon->translate(0, Slic3r::Geometry::scale($offset->y)); #) } if ($self->{cut_options}{axis} != Y) { $expolygon->translate(Slic3r::Geometry::scale($offset->x), 0); } } $self->{canvas}->reset_objects; $self->{canvas}->load_object($_, undef, [0]) for @objects; my $plane_z = $self->{cut_options}{z}; $plane_z += 0.02 if !$self->{cut_options}{keep_upper}; $plane_z -= 0.02 if !$self->{cut_options}{keep_lower}; $self->{canvas}->SetCuttingPlane( $self->{cut_options}{axis}, $plane_z, [@expolygons], ); $self->{canvas}->Render; } } # update controls { my $z = $self->{cut_options}{z}; my $optgroup = $self->{optgroup}; { my $bb = $self->{model_object}->instance_bounding_box(0); my $max = $self->{cut_options}{axis} == X ? $bb->size->x : $self->{cut_options}{axis} == Y ? $bb->size->y ### : $bb->size->z; $optgroup->get_field('z')->set_range(0, $max); } $optgroup->get_field('keep_upper')->toggle(my $have_upper = abs($z - $optgroup->get_option('z')->max) > 0.1); $optgroup->get_field('keep_lower')->toggle(my $have_lower = $z > 0.1); $optgroup->get_field('rotate_lower')->toggle($z > 0 && $self->{cut_options}{keep_lower} && $self->{cut_options}{axis} == Z); $optgroup->get_field('preview')->toggle($self->{cut_options}{keep_upper} != $self->{cut_options}{keep_lower}); # update cut button if (($self->{cut_options}{keep_upper} && $have_upper) || ($self->{cut_options}{keep_lower} && $have_lower)) { $self->{btn_cut}->Enable; } else { $self->{btn_cut}->Disable; } } } sub NewModelObjects { my ($self) = @_; return grep defined, @{ $self->{new_model_objects} }; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm000066400000000000000000000603271327442435500222110ustar00rootroot00000000000000# Configuration of mesh modifiers and their parameters. # This panel is inserted into ObjectSettingsDialog. package Slic3r::GUI::Plater::ObjectPartsPanel; use strict; use warnings; use utf8; use File::Basename qw(basename); use Wx qw(:misc :sizer :treectrl :button wxTAB_TRAVERSAL wxSUNKEN_BORDER wxBITMAP_TYPE_PNG wxID_CANCEL wxTheApp); use List::Util qw(max); use Wx::Event qw(EVT_BUTTON EVT_TREE_ITEM_COLLAPSING EVT_TREE_SEL_CHANGED EVT_TREE_ITEM_RIGHT_CLICK); use Slic3r::Geometry qw(X Y Z MIN MAX scale unscale deg2rad rad2deg); use base 'Wx::Panel'; use constant ICON_OBJECT => 0; use constant ICON_SOLIDMESH => 1; use constant ICON_MODIFIERMESH => 2; sub new { my $class = shift; my ($parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); my $object = $self->{model_object} = $params{model_object}; # create TreeCtrl my $tree = $self->{tree} = Wx::TreeCtrl->new($self, -1, wxDefaultPosition, [300, 100], wxTR_NO_BUTTONS | wxSUNKEN_BORDER | wxTR_HAS_VARIABLE_ROW_HEIGHT | wxTR_SINGLE | wxTR_NO_BUTTONS); { $self->{tree_icons} = Wx::ImageList->new(16, 16, 1); $tree->AssignImageList($self->{tree_icons}); $self->{tree_icons}->Add(Wx::Bitmap->new($Slic3r::var->("brick.png"), wxBITMAP_TYPE_PNG)); # ICON_OBJECT $self->{tree_icons}->Add(Wx::Bitmap->new($Slic3r::var->("package.png"), wxBITMAP_TYPE_PNG)); # ICON_SOLIDMESH $self->{tree_icons}->Add(Wx::Bitmap->new($Slic3r::var->("plugin.png"), wxBITMAP_TYPE_PNG)); # ICON_MODIFIERMESH my $rootId = $tree->AddRoot("Object", ICON_OBJECT); $tree->SetPlData($rootId, { type => 'object' }); } # buttons $self->{btn_load_part} = Wx::Button->new($self, -1, "Load part…", wxDefaultPosition, wxDefaultSize, wxBU_LEFT); $self->{btn_load_modifier} = Wx::Button->new($self, -1, "Load modifier…", wxDefaultPosition, wxDefaultSize, wxBU_LEFT); $self->{btn_load_lambda_modifier} = Wx::Button->new($self, -1, "Create modifier…", wxDefaultPosition, wxDefaultSize, wxBU_LEFT); $self->{btn_delete} = Wx::Button->new($self, -1, "Delete part", wxDefaultPosition, wxDefaultSize, wxBU_LEFT); if ($Slic3r::GUI::have_button_icons) { $self->{btn_load_part}->SetBitmap(Wx::Bitmap->new($Slic3r::var->("brick_add.png"), wxBITMAP_TYPE_PNG)); $self->{btn_load_modifier}->SetBitmap(Wx::Bitmap->new($Slic3r::var->("brick_add.png"), wxBITMAP_TYPE_PNG)); $self->{btn_load_lambda_modifier}->SetBitmap(Wx::Bitmap->new($Slic3r::var->("brick_add.png"), wxBITMAP_TYPE_PNG)); $self->{btn_delete}->SetBitmap(Wx::Bitmap->new($Slic3r::var->("brick_delete.png"), wxBITMAP_TYPE_PNG)); } # buttons sizer my $buttons_sizer = Wx::BoxSizer->new(wxHORIZONTAL); $buttons_sizer->Add($self->{btn_load_part}, 0); $buttons_sizer->Add($self->{btn_load_modifier}, 0); $buttons_sizer->Add($self->{btn_load_lambda_modifier}, 0); $buttons_sizer->Add($self->{btn_delete}, 0); $self->{btn_load_part}->SetFont($Slic3r::GUI::small_font); $self->{btn_load_modifier}->SetFont($Slic3r::GUI::small_font); $self->{btn_load_lambda_modifier}->SetFont($Slic3r::GUI::small_font); $self->{btn_delete}->SetFont($Slic3r::GUI::small_font); # part settings panel $self->{settings_panel} = Slic3r::GUI::Plater::OverrideSettingsPanel->new($self, on_change => sub { $self->{part_settings_changed} = 1; }); my $settings_sizer = Wx::StaticBoxSizer->new($self->{staticbox} = Wx::StaticBox->new($self, -1, "Part Settings"), wxVERTICAL); $settings_sizer->Add($self->{settings_panel}, 1, wxEXPAND | wxALL, 0); my $optgroup_movers; # initialize the movement target before it's used. # on Windows this causes a segfault due to calling distance_to() # on the object. $self->{move_target} = Slic3r::Pointf3->new; $optgroup_movers = $self->{optgroup_movers} = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Move', on_change => sub { my ($opt_id) = @_; # There seems to be an issue with wxWidgets 3.0.2/3.0.3, where the slider # genates tens of events for a single value change. # Only trigger the recalculation if the value changes # or a live preview was activated and the mesh cut is not valid yet. my $new = Slic3r::Pointf3->new(map $optgroup_movers->get_value($_), qw(x y z)); if ($self->{move_target}->distance_to($new) > 0) { $self->{move_target} = $new; wxTheApp->CallAfter(sub { $self->_update; }); } }, label_width => 20, ); $optgroup_movers->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'x', type => 'slider', label => 'X', default => 0, full_width => 1, )); $optgroup_movers->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'y', type => 'slider', label => 'Y', default => 0, full_width => 1, )); $optgroup_movers->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'z', type => 'slider', label => 'Z', default => 0, full_width => 1, )); # left pane with tree my $left_sizer = $self->{left_sizer} = Wx::BoxSizer->new(wxVERTICAL); $left_sizer->Add($tree, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10); $left_sizer->Add($buttons_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10); $left_sizer->Add($settings_sizer, 1, wxEXPAND | wxALL, 0); $left_sizer->Add($optgroup_movers->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); # right pane with preview canvas my $canvas; if ($Slic3r::GUI::have_OpenGL) { $canvas = $self->{canvas} = Slic3r::GUI::3DScene->new($self); $canvas->enable_picking(1); $canvas->select_by('volume'); $canvas->on_select(sub { my ($volume_idx) = @_; # convert scene volume to model object volume $self->reload_tree($canvas->volume_idx($volume_idx)); }); $canvas->load_object($self->{model_object}, undef, [0]); $canvas->set_auto_bed_shape; $canvas->SetSize([500,700]); $canvas->zoom_to_volumes; } $self->{sizer} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{sizer}->Add($left_sizer, 0, wxEXPAND | wxALL, 0); $self->{sizer}->Add($canvas, 1, wxEXPAND | wxALL, 0) if $canvas; $self->SetSizer($self->{sizer}); $self->{sizer}->SetSizeHints($self); # attach events EVT_TREE_ITEM_COLLAPSING($self, $tree, sub { my ($self, $event) = @_; $event->Veto; }); EVT_TREE_SEL_CHANGED($self, $tree, sub { my ($self, $event) = @_; return if $self->{disable_tree_sel_changed_event}; $self->selection_changed; }); EVT_TREE_ITEM_RIGHT_CLICK($self, $tree, sub { my ($self, $event) = @_; my $item = $event->GetItem; my $frame = $self->GetFrame; my $menu = Wx::Menu->new; { my $scaleMenu = Wx::Menu->new; wxTheApp->append_menu_item($scaleMenu, "Uniformly… ", 'Scale the selected object along the XYZ axes', sub { $self->changescale(undef, 0) }); wxTheApp->append_menu_item($scaleMenu, "Along X axis…", 'Scale the selected object along the X axis', sub { $self->changescale(X, 0) }, undef, 'bullet_red.png'); wxTheApp->append_menu_item($scaleMenu, "Along Y axis…", 'Scale the selected object along the Y axis', sub { $self->changescale(Y, 0) }, undef, 'bullet_green.png'); wxTheApp->append_menu_item($scaleMenu, "Along Z axis…", 'Scale the selected object along the Z axis', sub { $self->changescale(Z, 0) }, undef, 'bullet_blue.png'); wxTheApp->append_submenu($menu, "Scale", 'Scale the selected object by a given factor', $scaleMenu, undef, 'arrow_out.png'); } { my $scaleToSizeMenu = Wx::Menu->new; wxTheApp->append_menu_item($scaleToSizeMenu, "Uniformly… ", 'Scale the selected object along the XYZ axes', sub { $self->changescale(undef, 1) }); wxTheApp->append_menu_item($scaleToSizeMenu, "Along X axis…", 'Scale the selected object along the X axis', sub { $self->changescale(X, 1) }, undef, 'bullet_red.png'); wxTheApp->append_menu_item($scaleToSizeMenu, "Along Y axis…", 'Scale the selected object along the Y axis', sub { $self->changescale(Y, 1) }, undef, 'bullet_green.png'); wxTheApp->append_menu_item($scaleToSizeMenu, "Along Z axis…", 'Scale the selected object along the Z axis', sub { $self->changescale(Z, 1) }, undef, 'bullet_blue.png'); wxTheApp->append_submenu($menu, "Scale to size", 'Scale the selected object to match a given size', $scaleToSizeMenu, undef, 'arrow_out.png'); } { my $rotateMenu = Wx::Menu->new; wxTheApp->append_menu_item($rotateMenu, "Around X axis…", 'Rotate the selected object by an arbitrary angle around X axis', sub { $self->rotate(undef, X) }, undef, 'bullet_red.png'); wxTheApp->append_menu_item($rotateMenu, "Around Y axis…", 'Rotate the selected object by an arbitrary angle around Y axis', sub { $self->rotate(undef, Y) }, undef, 'bullet_green.png'); wxTheApp->append_menu_item($rotateMenu, "Around Z axis…", 'Rotate the selected object by an arbitrary angle around Z axis', sub { $self->rotate(undef, Z) }, undef, 'bullet_blue.png'); wxTheApp->append_submenu($menu, "Rotate", 'Rotate the selected object by an arbitrary angle', $rotateMenu, undef, 'arrow_rotate_anticlockwise.png'); } $frame->PopupMenu($menu, $event->GetPoint); }); EVT_BUTTON($self, $self->{btn_load_part}, sub { $self->on_btn_load(0) }); EVT_BUTTON($self, $self->{btn_load_modifier}, sub { $self->on_btn_load(1) }); EVT_BUTTON($self, $self->{btn_load_lambda_modifier}, sub { $self->on_btn_lambda(1) }); EVT_BUTTON($self, $self->{btn_delete}, \&on_btn_delete); $self->reload_tree; return $self; } sub reload_tree { my ($self, $selected_volume_idx) = @_; $selected_volume_idx //= -1; my $object = $self->{model_object}; my $tree = $self->{tree}; my $rootId = $tree->GetRootItem; # despite wxWidgets states that DeleteChildren "will not generate any events unlike Delete() method", # the MSW implementation of DeleteChildren actually calls Delete() for each item, so # EVT_TREE_SEL_CHANGED is being called, with bad effects (the event handler is called; this # subroutine is never continued; an invisible EndModal is called on the dialog causing Plater # to continue its logic and rescheduling the background process etc. GH #2774) $self->{disable_tree_sel_changed_event} = 1; $tree->DeleteChildren($rootId); $self->{disable_tree_sel_changed_event} = 0; my $selectedId = $rootId; foreach my $volume_id (0..$#{$object->volumes}) { my $volume = $object->volumes->[$volume_id]; my $icon = $volume->modifier ? ICON_MODIFIERMESH : ICON_SOLIDMESH; my $itemId = $tree->AppendItem($rootId, $volume->name || $volume_id, $icon); if ($volume_id == $selected_volume_idx) { $selectedId = $itemId; } $tree->SetPlData($itemId, { type => 'volume', volume_id => $volume_id, }); } $tree->ExpandAll; Slic3r::GUI->CallAfter(sub { $self->{tree}->SelectItem($selectedId); # SelectItem() should trigger EVT_TREE_SEL_CHANGED as per wxWidgets docs, # but in fact it doesn't if the given item is already selected (this happens # on first load) $self->selection_changed; }); } sub get_selection { my ($self) = @_; my $nodeId = $self->{tree}->GetSelection; if ($nodeId->IsOk) { return $self->{tree}->GetPlData($nodeId); } return undef; } sub selection_changed { my ($self) = @_; # deselect all meshes if ($self->{canvas}) { $_->selected(0) for @{$self->{canvas}->volumes}; } # disable things as if nothing is selected $self->{btn_delete}->Disable; $self->{settings_panel}->disable; $self->{settings_panel}->set_config(undef); # reset move sliders $self->{optgroup_movers}->set_value("x", 0); $self->{optgroup_movers}->set_value("y", 0); $self->{optgroup_movers}->set_value("z", 0); $self->{move_target} = Slic3r::Pointf3->new; if (my $itemData = $self->get_selection) { my ($config, @opt_keys); if ($itemData->{type} eq 'volume') { # select volume in 3D preview if ($self->{canvas}) { $self->{canvas}->volumes->[ $itemData->{volume_id} ]{selected} = 1; } $self->{btn_delete}->Enable; # attach volume config to settings panel my $volume = $self->{model_object}->volumes->[ $itemData->{volume_id} ]; my $movers = $self->{optgroup_movers}; my $obj_bb = $self->{model_object}->raw_bounding_box; my $vol_bb = $volume->mesh->bounding_box; my $vol_size = $vol_bb->size; $movers->get_field('x')->set_range($obj_bb->x_min - $vol_size->x, $obj_bb->x_max); $movers->get_field('y')->set_range($obj_bb->y_min - $vol_size->y, $obj_bb->y_max); #,, $movers->get_field('z')->set_range($obj_bb->z_min - $vol_size->z, $obj_bb->z_max); $movers->get_field('x')->set_value($vol_bb->x_min); $movers->get_field('y')->set_value($vol_bb->y_min); $movers->get_field('z')->set_value($vol_bb->z_min); $self->{left_sizer}->Show($movers->sizer); $config = $volume->config; $self->{staticbox}->SetLabel('Part Settings'); # get default values @opt_keys = @{Slic3r::Config::PrintRegion->new->get_keys}; } elsif ($itemData->{type} eq 'object') { # select nothing in 3D preview # attach object config to settings panel $self->{left_sizer}->Hide($self->{optgroup_movers}->sizer); $self->{staticbox}->SetLabel('Object Settings'); @opt_keys = (map @{$_->get_keys}, Slic3r::Config::PrintObject->new, Slic3r::Config::PrintRegion->new); $config = $self->{model_object}->config; } # get default values my $default_config = Slic3r::Config->new_from_defaults(@opt_keys); # append default extruder push @opt_keys, 'extruder'; $default_config->set('extruder', 0); $config->set_ifndef('extruder', 0); $self->{settings_panel}->set_default_config($default_config); $self->{settings_panel}->set_config($config); $self->{settings_panel}->set_opt_keys(\@opt_keys); $self->{settings_panel}->set_fixed_options([qw(extruder)]); $self->{settings_panel}->enable; } $self->{canvas}->Render if $self->{canvas}; } sub on_btn_load { my ($self, $is_modifier) = @_; my @input_files = wxTheApp->open_model($self); foreach my $input_file (@input_files) { my $model = eval { Slic3r::Model->read_from_file($input_file) }; if ($@) { Slic3r::GUI::show_error($self, $@); next; } for my $obj_idx (0..($model->objects_count-1)) { my $object = $model->objects->[$obj_idx]; for my $vol_idx (0..($object->volumes_count-1)) { my $new_volume = $self->{model_object}->add_volume($object->get_volume($vol_idx)); $new_volume->set_modifier($is_modifier); $new_volume->set_name(basename($input_file)); # input_file needed to reload / update modifiers' volumes $new_volume->set_input_file($input_file); $new_volume->set_input_file_obj_idx($obj_idx); $new_volume->set_input_file_vol_idx($vol_idx); # apply the same translation we applied to the object $new_volume->mesh->translate(@{$self->{model_object}->origin_translation}); # set a default extruder value, since user can't add it manually $new_volume->config->set_ifndef('extruder', 0); $self->{parts_changed} = 1; } } } $self->_parts_changed; } sub on_btn_lambda { my ($self, $is_modifier) = @_; my $dlg = Slic3r::GUI::Plater::LambdaObjectDialog->new($self); if ($dlg->ShowModal() == wxID_CANCEL) { return; } my $params = $dlg->ObjectParameter; my $type = "".$params->{"type"}; my $name = "lambda-".$params->{"type"}; my $mesh; if ($type eq "box") { $mesh = Slic3r::TriangleMesh::make_cube(@{$params->{"dim"}}); } elsif ($type eq "cylinder") { $mesh = Slic3r::TriangleMesh::make_cylinder($params->{"cyl_r"}, $params->{"cyl_h"}); } elsif ($type eq "sphere") { $mesh = Slic3r::TriangleMesh::make_sphere($params->{"sph_rho"}); } elsif ($type eq "slab") { my $size = $self->{model_object}->bounding_box->size; $mesh = Slic3r::TriangleMesh::make_cube( $size->x*1.5, $size->y*1.5, #** $params->{"slab_h"}, ); # box sets the base coordinate at 0,0, move to center of plate $mesh->translate( -$size->x*1.5/2.0, -$size->y*1.5/2.0, #** 0, ); } else { return; } my $center = $self->{model_object}->bounding_box->center; if (!$Slic3r::GUI::Settings->{_}{autocenter}) { #TODO what we really want to do here is just align the # center of the modifier to the center of the part. $mesh->translate($center->x, $center->y, 0); } $mesh->repair; my $new_volume = $self->{model_object}->add_volume(mesh => $mesh); $new_volume->set_modifier($is_modifier); $new_volume->set_name($name); # set a default extruder value, since user can't add it manually $new_volume->config->set_ifndef('extruder', 0); $self->_parts_changed($self->{model_object}->volumes_count-1); } sub on_btn_delete { my ($self) = @_; my $itemData = $self->get_selection; if ($itemData && $itemData->{type} eq 'volume') { my $volume = $self->{model_object}->volumes->[$itemData->{volume_id}]; # if user is deleting the last solid part, throw error if (!$volume->modifier && scalar(grep !$_->modifier, @{$self->{model_object}->volumes}) == 1) { Slic3r::GUI::show_error($self, "You can't delete the last solid part from this object."); return; } $self->{model_object}->delete_volume($itemData->{volume_id}); $self->{parts_changed} = 1; } $self->_parts_changed; } sub _parts_changed { my ($self, $selected_volume_idx) = @_; $self->{parts_changed} = 1; $self->reload_tree($selected_volume_idx); if ($self->{canvas}) { $self->{canvas}->reset_objects; $self->{canvas}->load_object($self->{model_object}); $self->{canvas}->zoom_to_volumes; $self->{canvas}->Render; } } sub CanClose { my $self = shift; return 1; # skip validation for now # validate options before allowing user to dismiss the dialog # the validate method only works on full configs so we have # to merge our settings with the default ones my $config = Slic3r::Config->merge($self->GetParent->GetParent->GetParent->GetParent->GetParent->config, $self->model_object->config); eval { $config->validate; }; return 0 if Slic3r::GUI::catch_error($self); return 1; } sub PartsChanged { my ($self) = @_; return $self->{parts_changed}; } sub PartSettingsChanged { my ($self) = @_; return $self->{part_settings_changed}; } sub _update { my ($self) = @_; my $itemData = $self->get_selection; if ($itemData && $itemData->{type} eq 'volume') { my $volume = $self->{model_object}->volumes->[$itemData->{volume_id}]; $volume->mesh->translate(@{ $volume->mesh->bounding_box->min_point->vector_to($self->{move_target}) }); } $self->{parts_changed} = 1; my @objects = (); push @objects, $self->{model_object}; $self->{canvas}->reset_objects; $self->{canvas}->load_object($_, undef, [0]) for @objects; $self->{canvas}->Render; } sub changescale { my ($self, $axis, $tosize) = @_; my $itemData = $self->get_selection; if ($itemData && $itemData->{type} eq 'volume') { my $volume = $self->{model_object}->volumes->[$itemData->{volume_id}]; my $object_size = $volume->bounding_box->size; if (defined $axis) { my $axis_name = $axis == X ? 'X' : $axis == Y ? 'Y' : 'Z'; my $scale; if (defined $tosize) { my $cursize = $object_size->[$axis]; # Wx::GetNumberFromUser() does not support decimal numbers my $newsize = Wx::GetTextFromUser( sprintf("Enter the new size for the selected mesh:"), "Scale along $axis_name", $cursize, $self); return if !$newsize || $newsize !~ /^\d*(?:\.\d*)?$/ || $newsize < 0; $scale = $newsize / $cursize * 100; } else { # Wx::GetNumberFromUser() does not support decimal numbers $scale = Wx::GetTextFromUser("Enter the scale % for the selected object:", "Scale along $axis_name", 100, $self); $scale =~ s/%$//; return if !$scale || $scale !~ /^\d*(?:\.\d*)?$/ || $scale < 0; } my $versor = [1,1,1]; $versor->[$axis] = $scale/100; $volume->mesh->scale_xyz(Slic3r::Pointf3->new(@$versor)); } else { my $scale; if ($tosize) { my $cursize = max(@$object_size); # Wx::GetNumberFromUser() does not support decimal numbers my $newsize = Wx::GetTextFromUser("Enter the new max size for the selected object:", "Scale", $cursize, $self); return if !$newsize || $newsize !~ /^\d*(?:\.\d*)?$/ || $newsize < 0; $scale = $newsize / $cursize; } else { # max scale factor should be above 2540 to allow importing files exported in inches # Wx::GetNumberFromUser() does not support decimal numbers $scale = Wx::GetTextFromUser("Enter the scale % for the selected object:", 'Scale', 100, $self); return if !$scale || $scale !~ /^\d*(?:\.\d*)?$/ || $scale < 0; } return if !$scale || $scale < 0; $volume->mesh->scale($scale); } $self->_parts_changed; } } sub rotate { my $self = shift; my ($angle, $axis) = @_; # angle is in degrees my $itemData = $self->get_selection; if ($itemData && $itemData->{type} eq 'volume') { my $volume = $self->{model_object}->volumes->[$itemData->{volume_id}]; if (!defined $angle) { my $axis_name = $axis == X ? 'X' : $axis == Y ? 'Y' : 'Z'; my $default = $axis == Z ? 0 : 0; # Wx::GetNumberFromUser() does not support decimal numbers $angle = Wx::GetTextFromUser("Enter the rotation angle:", "Rotate around $axis_name axis", $default, $self); return if !$angle || $angle !~ /^-?\d*(?:\.\d*)?$/ || $angle == -1; } if ($axis == X) { $volume->mesh->rotate_x(deg2rad($angle)); } if ($axis == Y) { $volume->mesh->rotate_y(deg2rad($angle)); } if ($axis == Z) { $volume->mesh->rotate_z(deg2rad($angle)); } $self->_parts_changed; } } sub GetFrame { my ($self) = @_; return &Wx::GetTopLevelParent($self); } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm000066400000000000000000000325621327442435500230600ustar00rootroot00000000000000# This dialog opens up when double clicked on an object line in the list at the right side of the platter. # One may load additional STLs and additional modifier STLs, # one may change the properties of the print per each modifier mesh or a Z-span. package Slic3r::GUI::Plater::ObjectSettingsDialog; use strict; use warnings; use utf8; use Wx qw(:dialog :id :misc :sizer :systemsettings :notebook wxTAB_TRAVERSAL wxTheApp); use Wx::Event qw(EVT_BUTTON EVT_MENU); use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, "Settings for " . $params{object}->name, wxDefaultPosition, [1000,700], wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); $self->{$_} = $params{$_} for keys %params; $self->{tabpanel} = Wx::Notebook->new($self, -1, wxDefaultPosition, wxDefaultSize, wxNB_TOP | wxTAB_TRAVERSAL); $self->{tabpanel}->AddPage($self->{parts} = Slic3r::GUI::Plater::ObjectPartsPanel->new($self->{tabpanel}, model_object => $params{model_object}), "Parts"); $self->{tabpanel}->AddPage($self->{adaptive_layers} = Slic3r::GUI::Plater::ObjectDialog::AdaptiveLayersTab->new( $self->{tabpanel}, plater => $parent, model_object => $params{model_object}, obj_idx => $params{obj_idx} ), "Adaptive Layers"); $self->{tabpanel}->AddPage($self->{layers} = Slic3r::GUI::Plater::ObjectDialog::LayersTab->new($self->{tabpanel}), "Layer height table"); my $buttons = $self->CreateStdDialogButtonSizer(wxOK); EVT_BUTTON($self, wxID_OK, sub { # validate user input return if !$self->{parts}->CanClose; return if !$self->{layers}->CanClose; # notify tabs $self->{layers}->Closing; # save window size wxTheApp->save_window_pos($self, "object_settings"); $self->EndModal(wxID_OK); $self->Destroy; }); my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($self->{tabpanel}, 1, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10); $sizer->Add($buttons, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); $self->SetSizer($sizer); $self->SetMinSize($self->GetSize); wxTheApp->restore_window_pos($self, "object_settings"); return $self; } sub PartsChanged { my ($self) = @_; return $self->{parts}->PartsChanged; } sub PartSettingsChanged { my ($self) = @_; return $self->{parts}->PartSettingsChanged || $self->{layers}->LayersChanged; } package Slic3r::GUI::Plater::ObjectDialog::BaseTab; use base 'Wx::Panel'; sub model_object { my ($self) = @_; return $self->GetParent->GetParent->{model_object}; } package Slic3r::GUI::Plater::ObjectDialog::AdaptiveLayersTab; use Slic3r::Geometry qw(X Y Z scale unscale); use Slic3r::Print::State ':steps'; use List::Util qw(min max sum first); use Wx qw(wxTheApp :dialog :id :misc :sizer :systemsettings :statictext wxTAB_TRAVERSAL); use base 'Slic3r::GUI::Plater::ObjectDialog::BaseTab'; sub new { my $class = shift; my ($parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize); my $model_object = $self->{model_object} = $params{model_object}; my $obj_idx = $self->{obj_idx} = $params{obj_idx}; my $plater = $self->{plater} = $params{plater}; my $object = $self->{object} = $self->{plater}->{print}->get_object($self->{obj_idx}); # store last raft height to correctly draw z-indicator plane during a running background job where the printObject is not valid $self->{last_raft_height} = 0; # Initialize 3D toolpaths preview if ($Slic3r::GUI::have_OpenGL) { $self->{preview3D} = Slic3r::GUI::Plater::3DPreview->new($self, $plater->{print}); $self->{preview3D}->canvas->set_auto_bed_shape; $self->{preview3D}->canvas->SetSize([500,500]); $self->{preview3D}->canvas->SetMinSize($self->{preview3D}->canvas->GetSize); # object already processed? wxTheApp->CallAfter(sub { if (!$plater->{processed}) { $self->_trigger_slicing(0); # trigger processing without invalidating STEP_SLICE to keep current height distribution }else{ $self->{preview3D}->reload_print($obj_idx); $self->{preview3D}->canvas->zoom_to_volumes; $self->{preview_zoomed} = 1; } }); } $self->{splineControl} = Slic3r::GUI::Plater::SplineControl->new($self, Wx::Size->new(150, 200), $object); my $optgroup; $optgroup = $self->{optgroup} = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Adaptive quality %', on_change => sub { my ($opt_id) = @_; # There seems to be an issue with wxWidgets 3.0.2/3.0.3, where the slider # genates tens of events for a single value change. # Only trigger the recalculation if the value changes # or a live preview was activated and the mesh cut is not valid yet. if ($self->{adaptive_quality} != $optgroup->get_value($opt_id)) { $self->{adaptive_quality} = $optgroup->get_value($opt_id); $self->{model_object}->config->set('adaptive_slicing_quality', $optgroup->get_value($opt_id)); $self->{object}->config->set('adaptive_slicing_quality', $optgroup->get_value($opt_id)); $self->{object}->invalidate_step(STEP_LAYERS); # trigger re-slicing $self->_trigger_slicing; } }, label_width => 0, ); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'adaptive_slicing_quality', type => 'slider', label => '', default => $object->config->get('adaptive_slicing_quality'), min => 0, max => 100, full_width => 1, )); $optgroup->get_field('adaptive_slicing_quality')->set_scale(1); $self->{adaptive_quality} = $object->config->get('adaptive_slicing_quality'); # init quality slider if(!$object->config->get('adaptive_slicing')) { # disable slider $optgroup->get_field('adaptive_slicing_quality')->disable; } my $right_sizer = Wx::BoxSizer->new(wxVERTICAL); $right_sizer->Add($self->{splineControl}, 1, wxEXPAND | wxALL, 0); $right_sizer->Add($optgroup->sizer, 0, wxEXPAND | wxALL, 0); $self->{sizer} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{sizer}->Add($self->{preview3D}, 3, wxEXPAND | wxTOP | wxBOTTOM, 0) if $self->{preview3D}; $self->{sizer}->Add($right_sizer, 1, wxEXPAND | wxTOP | wxBOTTOM, 10); $self->SetSizerAndFit($self->{sizer}); # init spline control values # determine min and max layer height from perimeter extruder capabilities. my %extruders; for my $region_id (0 .. ($object->region_count - 1)) { foreach (qw(perimeter_extruder infill_extruder solid_infill_extruder)) { my $extruder_id = $self->{plater}->{print}->get_region($region_id)->config->get($_)-1; $extruders{$extruder_id} = $extruder_id; } } my $min_height = max(map {$self->{plater}->{print}->config->get_at('min_layer_height', $_)} (values %extruders)); my $max_height = min(map {$self->{plater}->{print}->config->get_at('max_layer_height', $_)} (values %extruders)); $self->{splineControl}->set_size_parameters($min_height, $max_height, unscale($object->size->z)); $self->{splineControl}->on_layer_update(sub { # trigger re-slicing $self->_trigger_slicing; }); $self->{splineControl}->on_z_indicator(sub { my ($z) = @_; if($z) { # compensate raft height $z += $self->{last_raft_height}; } $self->{preview3D}->canvas->SetCuttingPlane(Z, $z, []); $self->{preview3D}->canvas->Render; }); return $self; } # This is called by the plater after processing to update the preview and spline sub reload_preview { my ($self) = @_; $self->{splineControl}->update; $self->{preview3D}->reload_print($self->{obj_idx}); my $object = $self->{plater}->{print}->get_object($self->{obj_idx}); if($object->layer_count-1 > 0) { my $first_layer = $self->{object}->get_layer(0); $self->{last_raft_height} = max(0, $first_layer->print_z - $first_layer->height); $self->{preview3D}->set_z(unscale($self->{object}->size->z)); if(!$self->{preview_zoomed}) { $self->{preview3D}->canvas->set_auto_bed_shape; $self->{preview3D}->canvas->zoom_to_volumes; $self->{preview_zoomed} = 1; } } } # Trigger background slicing at the plater sub _trigger_slicing { my ($self, $invalidate) = @_; $invalidate //= 1; my $object = $self->{plater}->{print}->get_object($self->{obj_idx}); $self->{model_object}->set_layer_height_spline($self->{object}->layer_height_spline); # push modified spline object to model_object #$self->{plater}->pause_background_process; $self->{plater}->stop_background_process; if (!$Slic3r::GUI::Settings->{_}{background_processing}) { $self->{plater}->statusbar->SetCancelCallback(sub { $self->{plater}->stop_background_process; $self->{plater}->statusbar->SetStatusText("Slicing cancelled"); $self->{plater}->preview_notebook->SetSelection(0); }); $object->invalidate_step(STEP_SLICE) if($invalidate); $self->{plater}->start_background_process; }else{ $object->invalidate_step(STEP_SLICE) if($invalidate); $self->{plater}->schedule_background_process; } } package Slic3r::GUI::Plater::ObjectDialog::LayersTab; use Wx qw(:dialog :id :misc :sizer :systemsettings); use Wx::Grid; use Wx::Event qw(EVT_GRID_CELL_CHANGED); use base 'Slic3r::GUI::Plater::ObjectDialog::BaseTab'; sub new { my $class = shift; my ($parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize); my $sizer = Wx::BoxSizer->new(wxVERTICAL); { my $label = Wx::StaticText->new($self, -1, "You can use this section to override the layer height for parts of this object. The values from this table will override the default layer height and adaptive layer heights, but not the interactively modified height curve.", wxDefaultPosition, wxDefaultSize); $label->SetFont(Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); $label->Wrap(800); $sizer->Add($label, 0, wxEXPAND | wxALL, 10); } my $grid = $self->{grid} = Wx::Grid->new($self, -1, wxDefaultPosition, wxDefaultSize); $sizer->Add($grid, 1, wxEXPAND | wxALL, 10); $grid->CreateGrid(0, 3); $grid->DisableDragRowSize; $grid->HideRowLabels if &Wx::wxVERSION_STRING !~ / 2\.8\./; $grid->SetColLabelValue(0, "Min Z (mm)"); $grid->SetColLabelValue(1, "Max Z (mm)"); $grid->SetColLabelValue(2, "Layer height (mm)"); $grid->SetColSize($_, -1) for 0..2; $grid->SetDefaultCellAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE); # load data foreach my $range (@{ $self->model_object->layer_height_ranges }) { $grid->AppendRows(1); my $i = $grid->GetNumberRows-1; $grid->SetCellValue($i, $_, $range->[$_]) for 0..2; } $grid->AppendRows(1); # append one empty row EVT_GRID_CELL_CHANGED($grid, sub { my ($grid, $event) = @_; # remove any non-numeric character my $value = $grid->GetCellValue($event->GetRow, $event->GetCol); $value =~ s/,/./g; $value =~ s/[^0-9.]//g; $grid->SetCellValue($event->GetRow, $event->GetCol, $value); # if there's no empty row, let's append one for my $i (0 .. $grid->GetNumberRows) { if ($i == $grid->GetNumberRows) { # if we're here then we found no empty row $grid->AppendRows(1); last; } if (!grep $grid->GetCellValue($i, $_), 0..2) { # exit loop if this row is empty last; } } $self->{layers_changed} = 1; }); $self->SetSizer($sizer); $sizer->SetSizeHints($self); return $self; } sub CanClose { my $self = shift; # validate ranges before allowing user to dismiss the dialog foreach my $range ($self->_get_ranges) { my ($min, $max, $height) = @$range; if ($max <= $min) { Slic3r::GUI::show_error($self, "Invalid Z range $min-$max."); return 0; } if ($min < 0 || $max < 0) { Slic3r::GUI::show_error($self, "Invalid Z range $min-$max."); return 0; } if ($height < 0) { Slic3r::GUI::show_error($self, "Invalid layer height $height."); return 0; } # TODO: check for overlapping ranges } return 1; } sub Closing { my $self = shift; # save ranges into the plater object $self->model_object->set_layer_height_ranges([ $self->_get_ranges ]); } sub _get_ranges { my $self = shift; my @ranges = (); for my $i (0 .. $self->{grid}->GetNumberRows-1) { my ($min, $max, $height) = map $self->{grid}->GetCellValue($i, $_), 0..2; next if $min eq '' || $max eq '' || $height eq ''; push @ranges, [ $min, $max, $height ]; } return sort { $a->[0] <=> $b->[0] } @ranges; } sub LayersChanged { my ($self) = @_; return $self->{layers_changed}; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater/OverrideSettingsPanel.pm000066400000000000000000000176201327442435500232670ustar00rootroot00000000000000# Maintains, displays, adds and removes overrides of slicing parameters. package Slic3r::GUI::Plater::OverrideSettingsPanel; use strict; use warnings; use utf8; use List::Util qw(first); use Wx qw(:misc :sizer :button wxTAB_TRAVERSAL wxSUNKEN_BORDER wxBITMAP_TYPE_PNG wxTheApp); use Wx::Event qw(EVT_BUTTON EVT_LEFT_DOWN EVT_MENU); use base 'Wx::ScrolledWindow'; use constant ICON_MATERIAL => 0; use constant ICON_SOLIDMESH => 1; use constant ICON_MODIFIERMESH => 2; my %icons = ( 'Advanced' => 'wand.png', 'Extruders' => 'funnel.png', 'Extrusion Width' => 'funnel.png', 'Infill' => 'infill.png', 'Layers and Perimeters' => 'layers.png', 'Skirt and brim' => 'box.png', 'Speed' => 'time.png', 'Speed > Acceleration' => 'time.png', 'Support material' => 'building.png', ); sub new { my $class = shift; my ($parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, $params{size} // wxDefaultSize, wxTAB_TRAVERSAL); $self->{default_config} = Slic3r::Config->new; $self->{config} = Slic3r::Config->new; $self->{on_change} = $params{on_change}; $self->{can_add} = 1; $self->{can_delete} = 1; $self->{fixed_options} = {}; $self->{sizer} = Wx::BoxSizer->new(wxVERTICAL); $self->{options_sizer} = Wx::BoxSizer->new(wxVERTICAL); $self->{sizer}->Add($self->{options_sizer}, 0, wxEXPAND | wxALL, 0); # option selector { # create the button my $btn = $self->{btn_add} = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new($Slic3r::var->("add.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, Wx::wxBORDER_NONE); $btn->SetToolTipString("Override one more option") if $btn->can('SetToolTipString'); EVT_LEFT_DOWN($btn, sub { my $menu = Wx::Menu->new; my $last_cat = ''; # create category submenus my %categories = (); # category => submenu foreach my $opt_key (@{$self->{options}}) { if (my $cat = $Slic3r::Config::Options->{$opt_key}{category}) { $categories{$cat} //= Wx::Menu->new; } } # append submenus to main menu foreach my $cat (sort keys %categories) { wxTheApp->append_submenu($menu, $cat, "", $categories{$cat}, undef, $icons{$cat}); } # append options to submenus foreach my $opt_key (@{$self->{options}}) { my $cat = $Slic3r::Config::Options->{$opt_key}{category} or next; my $cb = sub { $self->{config}->set($opt_key, $self->{default_config}->get($opt_key)); $self->update_optgroup; $self->{on_change}->($opt_key) if $self->{on_change}; }; wxTheApp->append_menu_item($categories{$cat}, $self->{option_labels}{$opt_key}, $Slic3r::Config::Options->{$opt_key}{tooltip}, $cb); } $self->PopupMenu($menu, $btn->GetPosition); $menu->Destroy; }); my $h_sizer = Wx::BoxSizer->new(wxHORIZONTAL); $h_sizer->Add($btn, 0, wxALL, 0); $self->{sizer}->Add($h_sizer, 0, wxEXPAND | wxBOTTOM, 10); } $self->SetSizer($self->{sizer}); # http://docs.wxwidgets.org/3.0/classwx_scrolled.html#details $self->SetScrollRate(0, $Slic3r::GUI::scroll_step); $self->set_opt_keys($params{opt_keys}) if $params{opt_keys}; $self->update_optgroup; return $self; } # Sets the config used to get the default values for user-added options. sub set_default_config { my ($self, $config) = @_; $self->{default_config} = $config; } # Sets the target config, whose options will be displayed in the OptionsGroup. sub set_config { my ($self, $config) = @_; $self->{config} = $config; $self->update_optgroup; } # Sets the options listed in the Add button. sub set_opt_keys { my ($self, $opt_keys) = @_; # sort options by label $self->{option_labels} = {}; foreach my $opt_key (@$opt_keys) { my $def = $Slic3r::Config::Options->{$opt_key} or next; $self->{option_labels}{$opt_key} = $def->{full_label} // $def->{label}; }; $self->{options} = [ sort { $self->{option_labels}{$a} cmp $self->{option_labels}{$b} } keys %{$self->{option_labels}} ]; } # Sets the options that user can't remove. sub set_fixed_options { my ($self, $opt_keys) = @_; $self->{fixed_options} = { map {$_ => 1} @$opt_keys }; $self->update_optgroup; } sub fixed_options { my ($self) = @_; return keys %{$self->{fixed_options}}; } sub update_optgroup { my $self = shift; $self->{options_sizer}->Clear(1); return if !defined $self->{config}; $self->{btn_add}->Show($self->{can_add}); my %categories = (); foreach my $opt_key (@{$self->{config}->get_keys}) { my $category = $Slic3r::Config::Options->{$opt_key}{category}; $categories{$category} ||= []; push @{$categories{$category}}, $opt_key; } foreach my $category (sort keys %categories) { my $optgroup; $optgroup = Slic3r::GUI::ConfigOptionsGroup->new( parent => $self, title => $category, config => $self->{config}, full_labels => 1, label_font => $Slic3r::GUI::small_font, sidetext_font => $Slic3r::GUI::small_font, label_width => 120, on_change => sub { my ($opt_key) = @_; $self->{on_change}->($opt_key) if $self->{on_change}; }, extra_column => sub { my ($line) = @_; my $opt_id = $line->get_options->[0]->opt_id; # we assume that we have one option per line my ($opt_key, $opt_index) = @{ $optgroup->_opt_map->{$opt_id} }; # disallow deleting fixed options return undef if $self->{fixed_options}{$opt_key} || !$self->{can_delete}; my $btn = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new($Slic3r::var->("delete.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, Wx::wxBORDER_NONE); EVT_BUTTON($self, $btn, sub { $self->{config}->erase($opt_key); $self->{on_change}->($opt_key) if $self->{on_change}; wxTheApp->CallAfter(sub { $self->update_optgroup }); }); return $btn; }, ); foreach my $opt_key (sort @{$categories{$category}}) { # For array options we override the first value. my $opt_index = (ref($self->{config}->get($opt_key)) eq 'ARRAY') ? 0 : -1; $optgroup->append_single_option_line($opt_key, $opt_index); } $self->{options_sizer}->Add($optgroup->sizer, 0, wxEXPAND | wxBOTTOM, 0); } $self->GetParent->Layout; # we need this for showing scrollbars } # work around a wxMAC bug causing controls not being disabled when calling Disable() on a Window sub enable { my ($self) = @_; $self->{btn_add}->Enable; $self->Enable; } sub disable { my ($self) = @_; $self->{btn_add}->Disable; $self->Disable; } # Shows or hides the Add/Delete buttons. sub set_editable { my ($self, $editable) = @_; $self->{can_add} = $self->{can_delete} = $editable; } # Shows or hides the Add button. sub can_add { my ($self, $can) = @_; $self->{can_add} = $can if defined $can; return $can; } # Shows or hides the Delete button. sub can_delete { my ($self, $can) = @_; $self->{can_delete} = $can if defined $can; return $can; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Plater/SplineControl.pm000066400000000000000000000347371327442435500216120ustar00rootroot00000000000000package Slic3r::GUI::Plater::SplineControl; use strict; use warnings; use utf8; use List::Util qw(min max first); use Slic3r::Geometry qw(X Y scale unscale); use Wx qw(:misc :pen :brush :sizer :font :cursor wxTAB_TRAVERSAL); use Wx::Event qw(EVT_MOUSE_EVENTS EVT_PAINT EVT_ERASE_BACKGROUND EVT_SIZE); use base 'Wx::Panel'; # Color Scheme use Slic3r::GUI::ColorScheme; sub new { my $class = shift; my ($parent, $size, $object) = @_; if ( ( defined $Slic3r::GUI::Settings->{_}{colorscheme} ) && ( Slic3r::GUI::ColorScheme->can($Slic3r::GUI::Settings->{_}{colorscheme}) ) ) { my $myGetSchemeName = \&{"Slic3r::GUI::ColorScheme::$Slic3r::GUI::Settings->{_}{colorscheme}"}; $myGetSchemeName->(); } else { Slic3r::GUI::ColorScheme->getDefault(); } my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, $size, wxTAB_TRAVERSAL); $self->{object} = $object; $self->{is_valid} = 0; # This has only effect on MacOS. On Windows and Linux/GTK, the background is painted by $self->repaint(). $self->SetBackgroundColour(Wx::Colour->new(@BACKGROUND255)); $self->{line_pen} = Wx::Pen->new(Wx::Colour->new(@SPLINE_L_PEN), 1, wxSOLID); $self->{original_pen} = Wx::Pen->new(Wx::Colour->new(@SPLINE_O_PEN), 1, wxSOLID); $self->{interactive_pen} = Wx::Pen->new(Wx::Colour->new(@SPLINE_I_PEN), 1, wxSOLID); $self->{resulting_pen} = Wx::Pen->new(Wx::Colour->new(@SPLINE_R_PEN), 1, wxSOLID); $self->{user_drawn_background} = $^O ne 'darwin'; # scale plot data to actual canvas, documentation in set_size_parameters $self->{scaling_factor_x} = 1; $self->{scaling_factor_y} = 1; $self->{min_layer_height} = 0.1; $self->{max_layer_height} = 0.4; $self->{mousover_layer_height} = undef; # display layer height at mousover position $self->{object_height} = 1.0; # initialize values $self->update; EVT_PAINT($self, \&repaint); EVT_ERASE_BACKGROUND($self, sub {}) if $self->{user_drawn_background}; EVT_MOUSE_EVENTS($self, \&mouse_event); EVT_SIZE($self, sub { $self->_update_canvas_size; $self->Refresh; }); return $self; } sub repaint { my ($self, $event) = @_; my $dc = Wx::AutoBufferedPaintDC->new($self); my $size = $self->GetSize; my @size = ($size->GetWidth, $size->GetHeight); if ($self->{user_drawn_background}) { # On all systems the AutoBufferedPaintDC() achieves double buffering. # On MacOS the background is erased, on Windows the background is not erased # and on Linux/GTK the background is erased to gray color. # Fill DC with the background on Windows & Linux/GTK. my $brush_background = Wx::Brush->new(Wx::Colour->new(@BACKGROUND255), wxSOLID); my $pen_background = Wx::Pen->new(Wx::Colour->new(@BACKGROUND255), 1, wxSOLID); $dc->SetPen($pen_background); $dc->SetBrush($brush_background); my $rect = $self->GetUpdateRegion()->GetBox(); $dc->DrawRectangle($rect->GetLeft(), $rect->GetTop(), $rect->GetWidth(), $rect->GetHeight()); } # draw scale (min and max indicator at the bottom) $dc->SetTextForeground(Wx::Colour->new(0,0,0)); $dc->SetFont(Wx::Font->new(10, wxDEFAULT, wxNORMAL, wxNORMAL)); $dc->DrawLabel(sprintf('%.4g', $self->{min_layer_height}), Wx::Rect->new(0, $size[1]/2, $size[0], $size[1]/2), wxALIGN_LEFT | wxALIGN_BOTTOM); $dc->DrawLabel(sprintf('%.2g', $self->{max_layer_height}), Wx::Rect->new(0, $size[1]/2, $size[0], $size[1]/2), wxALIGN_RIGHT | wxALIGN_BOTTOM); if($self->{mousover_layer_height}){ $dc->DrawLabel(sprintf('%4.2fmm', $self->{mousover_layer_height}), Wx::Rect->new(0, 0, $size[0], $size[1]), wxALIGN_RIGHT | wxALIGN_TOP); } if($self->{is_valid}) { # draw original spline as reference if($self->{original_height_spline}) { #draw spline $self->_draw_layer_height_spline($dc, $self->{original_height_spline}, $self->{original_pen}); } # draw interactive (currently modified by the user) layers as lines and spline if($self->{interactive_height_spline}) { # draw layer lines my @interpolated_layers = @{$self->{interactive_height_spline}->getInterpolatedLayers}; $self->_draw_layers_as_lines($dc, $self->{interactive_pen}, \@interpolated_layers); #draw spline $self->_draw_layer_height_spline($dc, $self->{interactive_height_spline}, $self->{interactive_pen}); } # draw resulting layers as lines unless($self->{interactive_heights}) { $self->_draw_layers_as_lines($dc, $self->{resulting_pen}, $self->{interpolated_layers}); } # Always draw current BSpline, gives a reference during a modification $self->_draw_layer_height_spline($dc, $self->{object}->layer_height_spline, $self->{line_pen}); } $event->Skip; } # Set basic parameters for this control. # min/max_layer_height are required to define the x-range, object_height is used to scale the y-range. # Must be called if object selection changes. sub set_size_parameters { my ($self, $min_layer_height, $max_layer_height, $object_height) = @_; $self->{min_layer_height} = $min_layer_height; $self->{max_layer_height} = $max_layer_height; $self->{object_height} = $object_height; $self->_update_canvas_size; $self->Refresh; } # Layers have been modified externally, re-initialize this control with new values sub update { my $self = shift; if(($self->{object}->layer_height_spline->layersUpdated || !$self->{heights}) && $self->{object}->layer_height_spline->hasData) { $self->{original_height_spline} = $self->{object}->layer_height_spline->clone; # make a copy to display the unmodified original spline $self->{original_layers} = $self->{object}->layer_height_spline->getOriginalLayers; $self->{interpolated_layers} = $self->{object}->layer_height_spline->getInterpolatedLayers; # Initialize to current values # initialize height vector $self->{heights} = (); $self->{interactive_heights} = (); foreach my $z (@{$self->{original_layers}}) { push (@{$self->{heights}}, $self->{object}->layer_height_spline->getLayerHeightAt($z)); } $self->{is_valid} = 1; } $self->Refresh; } # Callback to notify parent element if layers have changed and reslicing should be triggered sub on_layer_update { my ($self, $cb) = @_; $self->{on_layer_update} = $cb; } # Callback to tell parent element at which z-position the mouse currently hovers to update indicator in 3D-view sub on_z_indicator { my ($self, $cb) = @_; $self->{on_z_indicator} = $cb; } sub mouse_event { my ($self, $event) = @_; my $pos = $event->GetPosition; my @obj_pos = $self->pixel_to_point($pos); if ($event->ButtonDown) { if ($event->LeftDown) { # start dragging $self->{left_drag_start_pos} = $pos; $self->{interactive_height_spline} = $self->{object}->layer_height_spline->clone; } if ($event->RightDown) { # start dragging $self->{right_drag_start_pos} = $pos; $self->{interactive_height_spline} = $self->{object}->layer_height_spline->clone; } } elsif ($event->LeftUp) { if($self->{left_drag_start_pos}) { $self->_modification_done; } $self->{left_drag_start_pos} = undef; } elsif ($event->RightUp) { if($self->{right_drag_start_pos}) { $self->_modification_done; } $self->{right_drag_start_pos} = undef; } elsif ($event->Dragging) { if($self->{left_drag_start_pos}) { my @start_pos = $self->pixel_to_point($self->{left_drag_start_pos}); my $range = abs($start_pos[1] - $obj_pos[1]); # compute updated interactive layer heights $self->_interactive_quadratic_curve($start_pos[1], $obj_pos[0], $range); unless($self->{interactive_height_spline}->updateLayerHeights($self->{interactive_heights})) { die "Unable to update interactive interpolated layers!\n"; } $self->Refresh; } elsif($self->{right_drag_start_pos}) { my @start_pos = $self->pixel_to_point($self->{right_drag_start_pos}); my $range = $obj_pos[1] - $start_pos[1]; # compute updated interactive layer heights $self->_interactive_linear_curve($start_pos[1], $obj_pos[0], $range); unless($self->{interactive_height_spline}->updateLayerHeights($self->{interactive_heights})) { die "Unable to update interactive interpolated layers!\n"; } $self->Refresh; } } elsif ($event->Moving) { if($self->{on_z_indicator}) { $self->{on_z_indicator}->($obj_pos[1]); $self->{mousover_layer_height} = $self->{object}->layer_height_spline->getLayerHeightAt($obj_pos[1]); $self->Refresh; $self->Update; } } elsif ($event->Leaving) { if($self->{on_z_indicator} && !$self->{left_drag_start_pos}) { $self->{on_z_indicator}->(undef); } $self->{mousover_layer_height} = undef; $self->Refresh; $self->Update; } } # Push modified heights to the spline object and update after user modification sub _modification_done { my $self = shift; if($self->{interactive_heights}) { $self->{heights} = $self->{interactive_heights}; $self->{interactive_heights} = (); # update spline database unless($self->{object}->layer_height_spline->updateLayerHeights($self->{heights})) { die "Unable to update interpolated layers!\n"; } $self->{interpolated_layers} = $self->{object}->layer_height_spline->getInterpolatedLayers; } $self->Refresh; $self->{on_layer_update}->(@{$self->{interpolated_layers}}); $self->{interactive_height_spline} = undef; } # Internal function to cache scaling factors sub _update_canvas_size { my $self = shift; # when the canvas is not rendered yet, its GetSize() method returns 0,0 my $canvas_size = $self->GetSize; my ($canvas_w, $canvas_h) = ($canvas_size->GetWidth, $canvas_size->GetHeight); return if $canvas_w == 0; my $padding = $self->{canvas_padding} = 10; # border size in pixels my @size = ($canvas_w - 2*$padding, $canvas_h - 2*$padding); $self->{canvas_size} = [@size]; $self->{scaling_factor_x} = $size[0]/($self->{max_layer_height} - $self->{min_layer_height}); $self->{scaling_factor_y} = $size[1]/$self->{object_height}; } # calculate new set of layers with quadaratic modifier for interactive display sub _interactive_quadratic_curve { my ($self, $mod_z, $target_layer_height, $range) = @_; $self->{interactive_heights} = (); # reset interactive curve # iterate over original points provided by spline my $last_z = 0; foreach my $i (0..@{$self->{heights}}-1 ) { my $z = $self->{original_layers}[$i]; my $layer_h = $self->{heights}[$i]; my $quadratic_factor = $self->_quadratic_factor($mod_z, $range, $z); my $diff = $target_layer_height - $layer_h; $layer_h += $diff * $quadratic_factor; push (@{$self->{interactive_heights}}, $layer_h); } } # calculate new set of layers with linear modifier for interactive display sub _interactive_linear_curve { my ($self, $mod_z, $target_layer_height, $range) = @_; $self->{interactive_heights} = (); # reset interactive curve my $from; my $to; if($range >= 0) { $from = $mod_z; $to = $mod_z + $range; }else{ $from = $mod_z + $range; $to = $mod_z; } # iterate over original points provided by spline foreach my $i (0..@{$self->{heights}}-1 ) { if(($self->{original_layers}[$i]) >= $from && ($self->{original_layers}[$i]< $to)) { push (@{$self->{interactive_heights}}, $target_layer_height); }else{ push (@{$self->{interactive_heights}}, $self->{heights}[$i]); } } } sub _quadratic_factor { my ($self, $fixpoint, $range, $value) = @_; # avoid division by zero $range = 0.00001 if $range <= 0; my $dist = abs($fixpoint - $value); my $x = $dist/$range; # normalize my $result = 1-($x*$x); return max(0, $result); } # Draw a set of layers as lines sub _draw_layers_as_lines { my ($self, $dc, $pen, $layers) = @_; $dc->SetPen($pen); my $last_z = 0.0; foreach my $z (@$layers) { my $layer_h = $z - $last_z; my $pl = $self->point_to_pixel(0, $z); my $pr = $self->point_to_pixel($layer_h, $z); $dc->DrawLine($pl->x, $pl->y, $pr->x, $pr->y); $last_z = $z; } } # Draw the resulting spline from a LayerHeightSpline object over the full canvas height sub _draw_layer_height_spline { my ($self, $dc, $layer_height_spline, $pen) = @_; my @size = @{$self->{canvas_size}}; $dc->SetPen($pen); my @points = (); foreach my $pixel (0..$size[1]) { my @z = $self->pixel_to_point(Wx::Point->new(0, $pixel)); my $h = $layer_height_spline->getLayerHeightAt($z[1]); my $p = $self->point_to_pixel($h, $z[1]); push (@points, $p); } $dc->DrawLines(\@points); } # Takes a 2-tupel [layer_height (x), height(y)] and converts it # into a Wx::Point in scaled canvas coordinates sub point_to_pixel { my ($self, @point) = @_; my @size = @{$self->{canvas_size}}; my $x = ($point[0] - $self->{min_layer_height})*$self->{scaling_factor_x} + $self->{canvas_padding}; my $y = $size[1] - $point[1]*$self->{scaling_factor_y} + $self->{canvas_padding}; # invert y-axis return Wx::Point->new(min(max($x, $self->{canvas_padding}), $size[0]+$self->{canvas_padding}), min(max($y, $self->{canvas_padding}), $size[1]+$self->{canvas_padding})); # limit to canvas size } # Takes a Wx::Point in scaled canvas coordinates and converts it # into a 2-tupel [layer_height (x), height(y)] sub pixel_to_point { my ($self, $point) = @_; my @size = @{$self->{canvas_size}}; my $x = ($point->x-$self->{canvas_padding})/$self->{scaling_factor_x} + $self->{min_layer_height}; my $y = ($size[1] - $point->y)/$self->{scaling_factor_y}; # invert y-axis return (min(max($x, $self->{min_layer_height}), $self->{max_layer_height}), min(max($y, 0), $self->{object_height})); # limit to object size and layer constraints } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Preferences.pm000066400000000000000000000164641327442435500200260ustar00rootroot00000000000000# Preferences dialog, opens from Menu: File->Preferences package Slic3r::GUI::Preferences; use Wx qw(:dialog :id :misc :sizer :systemsettings wxTheApp); use Wx::Event qw(EVT_BUTTON EVT_TEXT_ENTER); use base 'Wx::Dialog'; sub new { my ($class, $parent) = @_; my $self = $class->SUPER::new($parent, -1, "Preferences", wxDefaultPosition, wxDefaultSize); $self->{values} = {}; my $optgroup; $optgroup = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'General', on_change => sub { my ($opt_id) = @_; $self->{values}{$opt_id} = $optgroup->get_value($opt_id); }, label_width => 200, ); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # version_check opt_id => 'version_check', type => 'bool', label => 'Check for updates', tooltip => 'If this is enabled, Slic3r will check for updates daily and display a reminder if a newer version is available.', default => $Slic3r::GUI::Settings->{_}{version_check} // 1, readonly => !wxTheApp->have_version_check, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # remember_output_path opt_id => 'remember_output_path', type => 'bool', label => 'Remember output directory', tooltip => 'If this is enabled, Slic3r will prompt the last output directory instead of the one containing the input files.', default => $Slic3r::GUI::Settings->{_}{remember_output_path}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # autocenter opt_id => 'autocenter', type => 'bool', label => 'Auto-center parts (x,y)', tooltip => 'If this is enabled, Slic3r will auto-center objects around the print bed center.', default => $Slic3r::GUI::Settings->{_}{autocenter}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # autoalignz opt_id => 'autoalignz', type => 'bool', label => 'Auto-align parts (z=0)', tooltip => 'If this is enabled, Slic3r will auto-align objects z value to be on the print bed at z=0.', default => $Slic3r::GUI::Settings->{_}{autoalignz}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # invert_zoom opt_id => 'invert_zoom', type => 'bool', label => 'Invert zoom in previews', tooltip => 'If this is enabled, Slic3r will invert the direction of mouse-wheel zoom in preview panes.', default => $Slic3r::GUI::Settings->{_}{invert_zoom}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # background_processing opt_id => 'background_processing', type => 'bool', label => 'Background processing', tooltip => 'If this is enabled, Slic3r will pre-process objects as soon as they\'re loaded in order to save time when exporting G-code.', default => $Slic3r::GUI::Settings->{_}{background_processing}, readonly => !$Slic3r::have_threads, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # threads opt_id => 'threads', type => 'i', label => 'Threads', tooltip => $Slic3r::Config::Options->{threads}{tooltip}, default => $Slic3r::GUI::Settings->{_}{threads}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # tabbed_preset_editors opt_id => 'tabbed_preset_editors', type => 'bool', label => 'Display profile editors as tabs', tooltip => 'When opening a profile editor, it will be shown in a dialog or in a tab according to this option.', default => $Slic3r::GUI::Settings->{_}{tabbed_preset_editors}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # show_host opt_id => 'show_host', type => 'bool', label => 'Show Controller Tab (requires restart)', tooltip => 'Shows/Hides the Controller Tab. Requires a restart of Slic3r.', default => $Slic3r::GUI::Settings->{_}{show_host}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # nudge_val opt_id => 'nudge_val', type => 's', label => '2D plater nudge value', tooltip => 'In 2D plater, Move objects using keyboard by nudge value of', default => $Slic3r::GUI::Settings->{_}{nudge_val}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # reload hide dialog opt_id => 'reload_hide_dialog', type => 'bool', label => 'Hide Dialog on Reload', tooltip => 'When checked, the dialog on reloading files with added parts & modifiers is suppressed. The reload is performed according to the option given in \'Default Reload Behavior\'', default => $Slic3r::GUI::Settings->{_}{reload_hide_dialog}, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # default reload behavior opt_id => 'reload_behavior', type => 'select', label => 'Default Reload Behavior', tooltip => 'Choose the default behavior of the \'Reload from disk\' function regarding additional parts and modifiers.', labels => ['Reload all','Reload main, copy added','Reload main, discard added'], values => [0, 1, 2], default => $Slic3r::GUI::Settings->{_}{reload_behavior}, width => 180, )); $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( # colorscheme opt_id => 'colorscheme', type => 'select', label => 'Color Scheme', tooltip => 'Choose between color schemes - restart of Slic3r required.', labels => ['Default','Solarized'], # add more schemes, if you want in ColorScheme.pm. values => ['getDefault','getSolarized'], # add more schemes, if you want - those are the names of the corresponding function in ColorScheme.pm. default => $Slic3r::GUI::Settings->{_}{colorscheme} // 'getDefault', width => 180, )); my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($optgroup->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); my $buttons = $self->CreateStdDialogButtonSizer(wxOK | wxCANCEL); EVT_BUTTON($self, wxID_OK, sub { $self->_accept }); $sizer->Add($buttons, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); $self->SetSizer($sizer); $sizer->SetSizeHints($self); return $self; } sub _accept { my $self = shift; if ($self->{values}{mode}) { Slic3r::GUI::warning_catcher($self)->("You need to restart Slic3r to make the changes effective."); } $Slic3r::GUI::Settings->{_}{$_} = $self->{values}{$_} for keys %{$self->{values}}; wxTheApp->save_settings; $self->EndModal(wxID_OK); $self->Close; # needed on Linux } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Preset.pm000066400000000000000000000141661327442435500170240ustar00rootroot00000000000000package Slic3r::GUI::Preset; use Moo; use Unicode::Normalize; use Wx qw(:dialog :icon :id wxTheApp); has 'group' => (is => 'ro', required => 1); has 'default' => (is => 'ro', default => sub { 0 }); has 'external' => (is => 'ro', default => sub { 0 }); has 'name' => (is => 'rw', required => 1); has 'file' => (is => 'rw'); has '_config' => (is => 'rw', default => sub { Slic3r::Config->new }); has '_dirty_config' => (is => 'ro', default => sub { Slic3r::Config->new }); sub BUILD { my ($self) = @_; $self->name(Unicode::Normalize::NFC($self->name)); } sub _loaded { my ($self) = @_; return !$self->_config->empty; } sub dirty_options { my ($self) = @_; my @dirty = (); # Options present in both configs with different values: push @dirty, @{$self->_config->diff($self->_dirty_config)}; # Overrides added to the dirty config: my @extra = $self->_group_class->overriding_options; push @dirty, grep { !$self->_config->has($_) && $self->_dirty_config->has($_) } @extra; # Overrides removed from the dirty config: push @dirty, grep { $self->_config->has($_) && !$self->_dirty_config->has($_) } @extra; return @dirty; } sub dirty { my ($self) = @_; return !!$self->dirty_options; } sub dropdown_name { my ($self) = @_; my $name = $self->name; $name .= " (modified)" if $self->dirty; return $name; } sub file_exists { my ($self) = @_; die "Can't call file_exists() on a non-file preset" if !$self->file; return -e Slic3r::encode_path($self->file); } sub rename { my ($self, $name) = @_; $self->name($name); $self->file(sprintf "$Slic3r::GUI::datadir/%s/%s.ini", $self->group, $name); } sub prompt_unsaved_changes { my ($self, $parent) = @_; if ($self->dirty) { my $name = $self->default ? 'Default preset' : "Preset \"" . $self->name . "\""; my $opts = ''; foreach my $opt_key ($self->dirty_options) { my $opt = $Slic3r::Config::Options->{$opt_key}; my $name = $opt->{full_label} // $opt->{label}; if ($opt->{category}) { $name = $opt->{category} . " > $name"; } $opts .= "- $name\n"; } my $msg = sprintf "%s has unsaved changes:\n%s\nDo you want to save them?", $name, $opts; my $confirm = Wx::MessageDialog->new($parent, $msg, 'Unsaved Changes', wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxICON_QUESTION); $confirm->SetYesNoCancelLabels('Save', 'Discard', 'Cancel'); my $res = $confirm->ShowModal; if ($res == wxID_CANCEL) { return 0; } elsif ($res == wxID_YES) { return $self->default ? $self->save_prompt($parent) : $self->save; } elsif ($res == wxID_NO) { $self->dismiss_changes; return 1; } } return 1; } sub save_prompt { my ($self, $parent) = @_; my $default_name = $self->default ? 'Untitled' : $self->name; $default_name =~ s/\.ini$//i; my $dlg = Slic3r::GUI::SavePresetWindow->new($parent, default => $default_name, values => [ map $_->name, grep !$_->default && !$_->external, @{wxTheApp->presets->{$self->name}} ], ); return 0 unless $dlg->ShowModal == wxID_OK; $self->save_as($dlg->get_name); } sub save { my ($self, $opt_keys) = @_; return $self->save_as($self->name, $opt_keys); } sub save_as { my ($self, $name, $opt_keys) = @_; $self->rename($name); if (!$self->file) { die "Calling save() without setting filename"; } if ($opt_keys) { $self->_config->apply_only($self->_dirty_config, $opt_keys); } else { $self->_config->clear; $self->_config->apply($self->_dirty_config); } # unlink the file first to avoid problems on case-insensitive file systems unlink Slic3r::encode_path($self->file); $self->_config->save($self->file); wxTheApp->load_presets; return 1; } sub dismiss_changes { my ($self) = @_; $self->_dirty_config->clear; $self->_dirty_config->apply($self->_config); } sub delete { my ($self) = @_; die "Default config can't be deleted" if $self->default; die "External configs can't be deleted" if $self->external; # Otherwise wxTheApp->load_presets() will keep it $self->dismiss_changes; if ($self->file) { unlink Slic3r::encode_path($self->file) if $self->file_exists; $self->file(undef); } } # This returns the loaded config with the dirty options applied. sub dirty_config { my ($self) = @_; $self->load_config if !$self->_loaded; return $self->_dirty_config->clone; } sub load_config { my ($self) = @_; return $self->_config if $self->_loaded; my @keys = $self->_group_class->options; my @extra_keys = $self->_group_class->overriding_options; if ($self->default) { $self->_config(Slic3r::Config->new_from_defaults(@keys)); } elsif ($self->file) { if (!$self->file_exists) { Slic3r::GUI::show_error(undef, "The selected preset does not exist anymore (" . $self->file . ")."); return undef; } my $external_config = Slic3r::Config->load($self->file); if (!@keys) { $self->_config($external_config); } else { # apply preset values on top of defaults my $config = Slic3r::Config->new_from_defaults(@keys); $config->set($_, $external_config->get($_)) for grep $external_config->has($_), @keys; # For extra_keys we don't populate defaults. if (@extra_keys && !$self->external) { $config->set($_, $external_config->get($_)) for grep $external_config->has($_), @extra_keys; } $self->_config($config); } } $self->_dirty_config->apply($self->_config); return $self->_config; } sub _group_class { my ($self) = @_; return "Slic3r::GUI::PresetEditor::".ucfirst $self->group; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/PresetEditor.pm000066400000000000000000002202221327442435500201630ustar00rootroot00000000000000package Slic3r::GUI::PresetEditor; use strict; use warnings; use utf8; use File::Basename qw(basename); use List::Util qw(first any); use Wx qw(:bookctrl :dialog :keycode :icon :id :misc :panel :sizer :treectrl :window :button wxTheApp); use Wx::Event qw(EVT_BUTTON EVT_CHOICE EVT_KEY_DOWN EVT_TREE_SEL_CHANGED EVT_CHECKBOX); use base qw(Wx::Panel Class::Accessor); __PACKAGE__->mk_accessors(qw(current_preset config)); sub new { my $class = shift; my ($parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize, wxBK_LEFT | wxTAB_TRAVERSAL); $self->{presets} = wxTheApp->presets->{$self->name}; # horizontal sizer $self->{sizer} = Wx::BoxSizer->new(wxHORIZONTAL); #$self->{sizer}->SetSizeHints($self); $self->SetSizer($self->{sizer}); # left vertical sizer my $left_sizer = Wx::BoxSizer->new(wxVERTICAL); $self->{sizer}->Add($left_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, 3); my $left_col_width = 150; # preset chooser { # choice menu $self->{presets_choice} = Wx::Choice->new($self, -1, wxDefaultPosition, [$left_col_width, -1], []); $self->{presets_choice}->SetFont($Slic3r::GUI::small_font); # buttons $self->{btn_save_preset} = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new($Slic3r::var->("disk.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); $self->{btn_delete_preset} = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new($Slic3r::var->("delete.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); $self->{btn_save_preset}->SetToolTipString("Save current " . lc($self->title)); $self->{btn_delete_preset}->SetToolTipString("Delete this preset"); $self->{btn_delete_preset}->Disable; ### These cause GTK warnings: ###my $box = Wx::StaticBox->new($self, -1, "Presets:", wxDefaultPosition, [$left_col_width, 50]); ###my $hsizer = Wx::StaticBoxSizer->new($box, wxHORIZONTAL); my $hsizer = Wx::BoxSizer->new(wxHORIZONTAL); $left_sizer->Add($hsizer, 0, wxEXPAND | wxBOTTOM, 5); $hsizer->Add($self->{presets_choice}, 1, wxRIGHT | wxALIGN_CENTER_VERTICAL, 3); $hsizer->Add($self->{btn_save_preset}, 0, wxALIGN_CENTER_VERTICAL); $hsizer->Add($self->{btn_delete_preset}, 0, wxALIGN_CENTER_VERTICAL); } # tree $self->{treectrl} = Wx::TreeCtrl->new($self, -1, wxDefaultPosition, [$left_col_width, -1], wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_SUNKEN | wxWANTS_CHARS); $left_sizer->Add($self->{treectrl}, 1, wxEXPAND); $self->{icons} = Wx::ImageList->new(16, 16, 1); $self->{treectrl}->AssignImageList($self->{icons}); $self->{iconcount} = -1; $self->{treectrl}->AddRoot("root"); $self->{pages} = []; $self->{treectrl}->SetIndent(0); $self->{disable_tree_sel_changed_event} = 0; EVT_TREE_SEL_CHANGED($parent, $self->{treectrl}, sub { return if $self->{disable_tree_sel_changed_event}; my $page = first { $_->{title} eq $self->{treectrl}->GetItemText($self->{treectrl}->GetSelection) } @{$self->{pages}} or return; $_->Hide for @{$self->{pages}}; $page->Show; $self->{sizer}->Layout; $self->Refresh; }); EVT_KEY_DOWN($self->{treectrl}, sub { my ($treectrl, $event) = @_; if ($event->GetKeyCode == WXK_TAB) { $treectrl->Navigate($event->ShiftDown ? &Wx::wxNavigateBackward : &Wx::wxNavigateForward); } else { $event->Skip; } }); EVT_CHOICE($parent, $self->{presets_choice}, sub { $self->_on_select_preset; }); EVT_BUTTON($self, $self->{btn_save_preset}, sub { $self->save_preset }); EVT_BUTTON($self, $self->{btn_delete_preset}, sub { my $res = Wx::MessageDialog->new($self, "Are you sure you want to delete the selected preset?", 'Delete Preset', wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION)->ShowModal; return unless $res == wxID_YES; $self->current_preset->delete; $self->current_preset(undef); wxTheApp->load_presets; $self->load_presets; $self->select_preset(0, 1); }); $self->config(Slic3r::Config->new_from_defaults($self->options)); $self->build; $self->update_tree; $self->load_presets; $self->_update; return $self; } # This is called by the save button. sub save_preset { my ($self) = @_; # since buttons (and choices too) don't get focus on Mac, we set focus manually # to the treectrl so that the EVT_* events are fired for the input field having # focus currently. is there anything better than this? $self->{treectrl}->SetFocus; my $preset = $self->current_preset; $preset->save_prompt($self); $self->load_presets; $self->select_preset_by_name($preset->name); $self->{on_save_preset}->($self->name, $preset) if $self->{on_save_preset}; return 1; } sub on_save_preset { my ($self, $cb) = @_; $self->{on_save_preset} = $cb; } sub on_value_change { my ($self, $cb) = @_; $self->{on_value_change} = $cb; } # This method is supposed to be called whenever new values are loaded # or changed by user (so also when a preset is loaded). # propagate event to the parent sub _on_value_change { my ($self, $opt_key) = @_; wxTheApp->CallAfter(sub { $self->current_preset->_dirty_config->apply($self->config); $self->{on_value_change}->($opt_key) if $self->{on_value_change}; $self->load_presets; $self->_update($opt_key); }); } sub _update {} sub on_preset_loaded {} sub select_preset { my ($self, $i, $force) = @_; $self->{presets_choice}->SetSelection($i); $self->_on_select_preset($force); } sub select_preset_by_name { my ($self, $name, $force) = @_; my $presets = wxTheApp->presets->{$self->name}; my $i = first { $presets->[$_]->name eq $name } 0..$#$presets; if (!defined $i) { warn "No preset named $name"; return 0; } $self->{presets_choice}->SetSelection($i); $self->_on_select_preset($force); } sub prompt_unsaved_changes { my ($self) = @_; return 1 if !$self->current_preset; return $self->current_preset->prompt_unsaved_changes($self); } sub on_select_preset { my ($self, $cb) = @_; $self->{on_select_preset} = $cb; } sub _on_select_preset { my ($self, $force) = @_; # This method is called: # - upon first initialization; # - whenever user selects a preset from the dropdown; # - whenever select_preset() or select_preset_by_name() are called. # Get the selected name. my $preset = wxTheApp->presets->{$self->name}->[$self->{presets_choice}->GetSelection]; # If selection didn't change, do nothing. # (But still reset current_preset because it might contain an older object of the # current preset) if (defined $self->current_preset && $preset->name eq $self->current_preset->name) { $self->current_preset($preset); return; } # If we have unsaved changes, prompt user. if (!$force && !$self->prompt_unsaved_changes) { # User decided not to save the current changes, so we restore the previous selection. my $presets = wxTheApp->presets->{$self->name}; my $i = first { $presets->[$_]->name eq $self->current_preset->name } 0..$#$presets; $self->{presets_choice}->SetSelection($i); return; } $self->current_preset($preset); # We reload presets in order to remove the "(modified)" suffix in case user was # prompted and chose to discard changes. $self->load_presets; $self->reload_preset; eval { local $SIG{__WARN__} = Slic3r::GUI::warning_catcher($self); ($preset->default || $preset->external) ? $self->{btn_delete_preset}->Disable : $self->{btn_delete_preset}->Enable; $self->_update; $self->on_preset_loaded; }; if ($@) { $@ = "I was unable to load the selected config file: $@"; Slic3r::GUI::catch_error($self); } $self->{on_select_preset}->($self->name, $preset) if $self->{on_select_preset}; } sub add_options_page { my $self = shift; my ($title, $icon, %params) = @_; if ($icon) { my $bitmap = Wx::Bitmap->new($Slic3r::var->($icon), wxBITMAP_TYPE_PNG); $self->{icons}->Add($bitmap); $self->{iconcount}++; } my $page = Slic3r::GUI::PresetEditor::Page->new($self, $title, $self->{iconcount}); $page->Hide; $self->{sizer}->Add($page, 1, wxEXPAND | wxLEFT, 5); push @{$self->{pages}}, $page; return $page; } sub reload_preset { my ($self) = @_; $self->current_preset->load_config if !$self->current_preset->_loaded; $self->config->clear; $self->config->apply($self->current_preset->dirty_config); $self->reload_config; } sub reload_config { my $self = shift; $_->reload_config for @{$self->{pages}}; } sub update_tree { my ($self) = @_; # get label of the currently selected item my $selected = $self->{treectrl}->GetItemText($self->{treectrl}->GetSelection); my $rootItem = $self->{treectrl}->GetRootItem; $self->{treectrl}->DeleteChildren($rootItem); my $have_selection = 0; foreach my $page (@{$self->{pages}}) { my $itemId = $self->{treectrl}->AppendItem($rootItem, $page->{title}, $page->{iconID}); if ($page->{title} eq $selected) { $self->{disable_tree_sel_changed_event} = 1; $self->{treectrl}->SelectItem($itemId); $self->{disable_tree_sel_changed_event} = 0; $have_selection = 1; } } if (!$have_selection) { # this is triggered on first load, so we don't disable the sel change event $self->{treectrl}->SelectItem($self->{treectrl}->GetFirstChild($rootItem)); } } sub load_presets { my $self = shift; my $presets = wxTheApp->presets->{$self->name}; $self->{presets_choice}->Clear; foreach my $preset (@$presets) { $self->{presets_choice}->Append($preset->dropdown_name); # Preserve selection. if ($self->current_preset && $self->current_preset->name eq $preset->name) { $self->{presets_choice}->SetSelection($self->{presets_choice}->GetCount-1); } } } # This is called internally whenever we make automatic adjustments to configuration # based on user actions. sub _load_config { my $self = shift; my ($config) = @_; my $diff = $self->config->diff($config); $self->config->set($_, $config->get($_)) for @$diff; # First apply all changes, then call all the _on_value_change triggers. $self->_on_value_change($_) for @$diff; $self->reload_config; $self->_update; } sub get_field { my ($self, $opt_key, $opt_index) = @_; foreach my $page (@{ $self->{pages} }) { my $field = $page->get_field($opt_key, $opt_index); return $field if defined $field; } return undef; } sub set_value { my $self = shift; my ($opt_key, $value) = @_; my $changed = 0; foreach my $page (@{ $self->{pages} }) { $changed = 1 if $page->set_value($opt_key, $value); } return $changed; } sub _compatible_printers_widget { my ($self) = @_; return sub { my ($parent) = @_; my $checkbox = $self->{compatible_printers_checkbox} = Wx::CheckBox->new($parent, -1, "All"); my $btn = $self->{compatible_printers_btn} = Wx::Button->new($parent, -1, "Set…", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); $btn->SetFont($Slic3r::GUI::small_font); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("printer_empty.png"), wxBITMAP_TYPE_PNG)); } my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $sizer->Add($checkbox, 0, wxALIGN_CENTER_VERTICAL); $sizer->Add($btn, 0, wxALIGN_CENTER_VERTICAL); EVT_CHECKBOX($self, $checkbox, sub { if ($checkbox->GetValue) { $btn->Disable; } else { $btn->Enable; } }); EVT_BUTTON($self, $btn, sub { my @presets = map $_->name, grep !$_->default && !$_->external, @{wxTheApp->presets->{printer}}; my $dlg = Wx::MultiChoiceDialog->new($self, "Select the printers this profile is compatible with.", "Compatible printers", \@presets); my @selections = (); foreach my $preset_name (@{ $self->config->get('compatible_printers') }) { push @selections, first { $presets[$_] eq $preset_name } 0..$#presets; } $dlg->SetSelections(@selections); if ($dlg->ShowModal == wxID_OK) { my $value = [ @presets[$dlg->GetSelections] ]; if (!@$value) { $checkbox->SetValue(1); $btn->Disable; } $self->config->set('compatible_printers', $value); $self->_on_value_change('compatible_printers'); } }); return $sizer; }; } sub _reload_compatible_printers_widget { my ($self) = @_; if (@{ $self->config->get('compatible_printers') }) { $self->{compatible_printers_checkbox}->SetValue(0); $self->{compatible_printers_btn}->Enable; } else { $self->{compatible_printers_checkbox}->SetValue(1); $self->{compatible_printers_btn}->Disable; } } sub options { die "Unimplemented options()"; } sub overridable_options { () } sub overriding_options { () } package Slic3r::GUI::PresetEditor::Print; use base 'Slic3r::GUI::PresetEditor'; use List::Util qw(first any); use Wx qw(:icon :dialog :id :misc :button :sizer); use Wx::Event qw(EVT_BUTTON EVT_CHECKLISTBOX); sub name { 'print' } sub title { 'Print Settings' } sub options { return qw( layer_height first_layer_height adaptive_slicing adaptive_slicing_quality match_horizontal_surfaces perimeters spiral_vase top_solid_layers bottom_solid_layers extra_perimeters avoid_crossing_perimeters thin_walls overhangs seam_position external_perimeters_first fill_density fill_pattern top_infill_pattern bottom_infill_pattern fill_gaps infill_every_layers infill_only_where_needed solid_infill_every_layers fill_angle solid_infill_below_area only_retract_when_crossing_perimeters infill_first max_print_speed max_volumetric_speed perimeter_speed small_perimeter_speed external_perimeter_speed infill_speed solid_infill_speed top_solid_infill_speed support_material_speed support_material_interface_speed bridge_speed gap_fill_speed travel_speed first_layer_speed perimeter_acceleration infill_acceleration bridge_acceleration first_layer_acceleration default_acceleration skirts skirt_distance skirt_height min_skirt_length brim_connections_width brim_width interior_brim_width support_material support_material_threshold support_material_max_layers support_material_enforce_layers raft_layers support_material_pattern support_material_spacing support_material_angle support_material_interface_layers support_material_interface_spacing support_material_contact_distance support_material_buildplate_only dont_support_bridges notes complete_objects extruder_clearance_radius extruder_clearance_height gcode_comments output_filename_format post_process perimeter_extruder infill_extruder solid_infill_extruder support_material_extruder support_material_interface_extruder ooze_prevention standby_temperature_delta interface_shells regions_overlap extrusion_width first_layer_extrusion_width perimeter_extrusion_width external_perimeter_extrusion_width infill_extrusion_width solid_infill_extrusion_width top_infill_extrusion_width support_material_extrusion_width support_material_interface_extrusion_width infill_overlap bridge_flow_ratio xy_size_compensation resolution shortcuts compatible_printers print_settings_id ) } sub build { my $self = shift; my $shortcuts_widget = sub { my ($parent) = @_; my $Options = $Slic3r::Config::Options; my %options = ( map { $_ => sprintf('%s > %s', $Options->{$_}{category}, $Options->{$_}{full_label} // $Options->{$_}{label}) } grep { exists $Options->{$_} && $Options->{$_}{category} } $self->options ); my @opt_keys = sort { $options{$a} cmp $options{$b} } keys %options; $self->{shortcuts_opt_keys} = [ @opt_keys ]; my $listbox = $self->{shortcuts_list} = Wx::CheckListBox->new($parent, -1, wxDefaultPosition, [-1, 320], [ map $options{$_}, @opt_keys ]); EVT_CHECKLISTBOX($self, $listbox, sub { my $value = [ map $opt_keys[$_], grep $listbox->IsChecked($_), 0..$#opt_keys ]; $self->config->set('shortcuts', $value); $self->_on_value_change('shortcuts'); }); my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($listbox, 0, wxEXPAND); return $sizer; }; { my $page = $self->add_options_page('Layers and perimeters', 'layers.png'); { my $optgroup = $page->new_optgroup('Layer height'); $optgroup->append_single_option_line('layer_height'); $optgroup->append_single_option_line('first_layer_height'); $optgroup->append_single_option_line('adaptive_slicing'); $optgroup->append_single_option_line('adaptive_slicing_quality'); $optgroup->get_field('adaptive_slicing_quality')->set_scale(1); $optgroup->append_single_option_line('match_horizontal_surfaces'); } { my $optgroup = $page->new_optgroup('Vertical shells'); $optgroup->append_single_option_line('perimeters'); $optgroup->append_single_option_line('spiral_vase'); } { my $optgroup = $page->new_optgroup('Horizontal shells'); my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Solid layers', ); $line->append_option($optgroup->get_option('top_solid_layers')); $line->append_option($optgroup->get_option('bottom_solid_layers')); $optgroup->append_line($line); } { my $optgroup = $page->new_optgroup('Quality (slower slicing)'); $optgroup->append_single_option_line('extra_perimeters'); $optgroup->append_single_option_line('avoid_crossing_perimeters'); $optgroup->append_single_option_line('thin_walls'); $optgroup->append_single_option_line('overhangs'); } { my $optgroup = $page->new_optgroup('Advanced'); $optgroup->append_single_option_line('seam_position'); $optgroup->append_single_option_line('external_perimeters_first'); } } { my $page = $self->add_options_page('Infill', 'infill.png'); { my $optgroup = $page->new_optgroup('Infill'); $optgroup->append_single_option_line('fill_density'); $optgroup->append_single_option_line('fill_pattern'); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'External infill pattern', ); $line->append_option($optgroup->get_option('top_infill_pattern')); $line->append_option($optgroup->get_option('bottom_infill_pattern')); $optgroup->append_line($line); } } { my $optgroup = $page->new_optgroup('Reducing printing time'); $optgroup->append_single_option_line('infill_every_layers'); $optgroup->append_single_option_line('infill_only_where_needed'); } { my $optgroup = $page->new_optgroup('Advanced'); $optgroup->append_single_option_line('fill_gaps'); $optgroup->append_single_option_line('solid_infill_every_layers'); $optgroup->append_single_option_line('fill_angle'); $optgroup->append_single_option_line('solid_infill_below_area'); $optgroup->append_single_option_line('only_retract_when_crossing_perimeters'); $optgroup->append_single_option_line('infill_first'); } } { my $page = $self->add_options_page('Skirt and brim', 'box.png'); { my $optgroup = $page->new_optgroup('Skirt'); $optgroup->append_single_option_line('skirts'); $optgroup->append_single_option_line('skirt_distance'); $optgroup->append_single_option_line('skirt_height'); $optgroup->append_single_option_line('min_skirt_length'); } { my $optgroup = $page->new_optgroup('Brim'); $optgroup->append_single_option_line('brim_width'); $optgroup->append_single_option_line('interior_brim_width'); $optgroup->append_single_option_line('brim_connections_width'); } } { my $page = $self->add_options_page('Support material', 'building.png'); { my $optgroup = $page->new_optgroup('Support material'); $optgroup->append_single_option_line('support_material'); $optgroup->append_single_option_line('support_material_threshold'); $optgroup->append_single_option_line('support_material_max_layers'); $optgroup->append_single_option_line('support_material_enforce_layers'); } { my $optgroup = $page->new_optgroup('Raft'); $optgroup->append_single_option_line('raft_layers'); } { my $optgroup = $page->new_optgroup('Options for support material and raft'); $optgroup->append_single_option_line('support_material_contact_distance'); $optgroup->append_single_option_line('support_material_pattern'); $optgroup->append_single_option_line('support_material_spacing'); $optgroup->append_single_option_line('support_material_angle'); $optgroup->append_single_option_line('support_material_interface_layers'); $optgroup->append_single_option_line('support_material_interface_spacing'); $optgroup->append_single_option_line('support_material_buildplate_only'); $optgroup->append_single_option_line('dont_support_bridges'); } } { my $page = $self->add_options_page('Speed', 'time.png'); { my $optgroup = $page->new_optgroup('Speed for print moves'); $optgroup->append_single_option_line($_, undef, width => 100) for qw(perimeter_speed small_perimeter_speed external_perimeter_speed infill_speed solid_infill_speed top_solid_infill_speed gap_fill_speed bridge_speed support_material_speed support_material_interface_speed ); } { my $optgroup = $page->new_optgroup('Speed for non-print moves'); $optgroup->append_single_option_line('travel_speed'); } { my $optgroup = $page->new_optgroup('Modifiers'); $optgroup->append_single_option_line('first_layer_speed'); } { my $optgroup = $page->new_optgroup('Acceleration control (advanced)'); $optgroup->append_single_option_line('perimeter_acceleration'); $optgroup->append_single_option_line('infill_acceleration'); $optgroup->append_single_option_line('bridge_acceleration'); $optgroup->append_single_option_line('first_layer_acceleration'); $optgroup->append_single_option_line('default_acceleration'); } { my $optgroup = $page->new_optgroup('Autospeed (advanced)'); $optgroup->append_single_option_line('max_print_speed'); $optgroup->append_single_option_line('max_volumetric_speed'); } } { my $page = $self->add_options_page('Multiple extruders', 'funnel.png'); { my $optgroup = $page->new_optgroup('Extruders'); $optgroup->append_single_option_line('perimeter_extruder'); $optgroup->append_single_option_line('infill_extruder'); $optgroup->append_single_option_line('solid_infill_extruder'); $optgroup->append_single_option_line('support_material_extruder'); $optgroup->append_single_option_line('support_material_interface_extruder'); } { my $optgroup = $page->new_optgroup('Ooze prevention'); $optgroup->append_single_option_line('ooze_prevention'); $optgroup->append_single_option_line('standby_temperature_delta'); } { my $optgroup = $page->new_optgroup('Advanced'); $optgroup->append_single_option_line('regions_overlap'); $optgroup->append_single_option_line('interface_shells'); } } { my $page = $self->add_options_page('Advanced', 'wand.png'); { my $optgroup = $page->new_optgroup('Extrusion width', label_width => 180, ); $optgroup->append_single_option_line($_, undef, width => 100) for qw(extrusion_width first_layer_extrusion_width perimeter_extrusion_width external_perimeter_extrusion_width infill_extrusion_width solid_infill_extrusion_width top_infill_extrusion_width support_material_interface_extrusion_width support_material_extrusion_width); } { my $optgroup = $page->new_optgroup('Overlap'); $optgroup->append_single_option_line('infill_overlap'); } { my $optgroup = $page->new_optgroup('Flow'); $optgroup->append_single_option_line('bridge_flow_ratio'); } { my $optgroup = $page->new_optgroup('Other'); $optgroup->append_single_option_line('xy_size_compensation'); $optgroup->append_single_option_line('resolution'); } } { my $page = $self->add_options_page('Output options', 'page_white_go.png'); { my $optgroup = $page->new_optgroup('Sequential printing'); $optgroup->append_single_option_line('complete_objects'); my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Extruder clearance (mm)', ); foreach my $opt_key (qw(extruder_clearance_radius extruder_clearance_height)) { my $option = $optgroup->get_option($opt_key); $option->width(60); $line->append_option($option); } $optgroup->append_line($line); } { my $optgroup = $page->new_optgroup('Output file'); $optgroup->append_single_option_line('gcode_comments'); { my $option = $optgroup->get_option('output_filename_format'); $option->full_width(1); $optgroup->append_single_option_line($option); } } { my $optgroup = $page->new_optgroup('Post-processing scripts', label_width => 0, ); my $option = $optgroup->get_option('post_process'); $option->full_width(1); $option->height(50); $optgroup->append_single_option_line($option); } } { my $page = $self->add_options_page('Notes', 'note.png'); { my $optgroup = $page->new_optgroup('Notes', label_width => 0, ); my $option = $optgroup->get_option('notes'); $option->full_width(1); $option->height(250); $optgroup->append_single_option_line($option); } } { my $page = $self->add_options_page('Shortcuts', 'wrench.png'); { my $optgroup = $page->new_optgroup('Profile preferences'); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Compatible printers', widget => $self->_compatible_printers_widget, ); $optgroup->append_line($line); } } { my $optgroup = $page->new_optgroup('Show shortcuts for the following settings'); { my $line = Slic3r::GUI::OptionsGroup::Line->new( widget => $shortcuts_widget, full_width => 1, ); $optgroup->append_line($line); } } } } sub reload_config { my ($self) = @_; $self->_reload_compatible_printers_widget; { my %shortcuts = map { $_ => 1 } @{ $self->config->get('shortcuts') }; for my $i (0..$#{$self->{shortcuts_opt_keys}}) { $self->{shortcuts_list}->Check($i, $shortcuts{ $self->{shortcuts_opt_keys}[$i] }); } } $self->SUPER::reload_config; } sub _update { my ($self, $key) = @_; my $opt_key = $key; $opt_key = "all_keys" if (length($key // '') == 0); my $config = $self->{config}; if (any { /$opt_key/ } qw(all_keys spiral_vase perimeters top_solid_layers fill_density support_material)) { if ($config->spiral_vase && !($config->perimeters == 1 && $config->top_solid_layers == 0 && $config->fill_density == 0 && $config->support_material == 0)) { my $dialog = Wx::MessageDialog->new($self, "The Spiral Vase mode requires:\n" . "- one perimeter\n" . "- no top solid layers\n" . "- 0% fill density\n" . "- no support material\n" . "\nShall I adjust those settings in order to enable Spiral Vase?", 'Spiral Vase', wxICON_WARNING | wxYES | wxNO); if ($dialog->ShowModal() == wxID_YES) { my $new_conf = Slic3r::Config->new; $new_conf->set("perimeters", 1); $new_conf->set("top_solid_layers", 0); $new_conf->set("fill_density", 0); $new_conf->set("support_material", 0); $self->_load_config($new_conf); } else { my $new_conf = Slic3r::Config->new; $new_conf->set("spiral_vase", 0); $self->_load_config($new_conf); } } } if (any { /$opt_key/ } qw(all_keys support_material)) { if ($config->support_material) { # Ask only once. if (! $self->{support_material_overhangs_queried}) { $self->{support_material_overhangs_queried} = 1; if ($config->overhangs != 1) { my $dialog = Wx::MessageDialog->new($self, "Supports work better, if the following feature is enabled:\n" . "- Detect bridging perimeters\n" . "\nShall I adjust those settings for supports?", 'Support Generator', wxICON_WARNING | wxYES | wxNO | wxCANCEL); my $answer = $dialog->ShowModal(); my $new_conf = Slic3r::Config->new; if ($answer == wxID_YES) { # Enable "detect bridging perimeters". $new_conf->set("overhangs", 1); } elsif ($answer == wxID_NO) { # Do nothing, leave supports on and "detect bridging perimeters" off. } elsif ($answer == wxID_CANCEL) { # Disable supports. $new_conf->set("support_material", 0); $self->{support_material_overhangs_queried} = 0; } $self->_load_config($new_conf); } } } else { $self->{support_material_overhangs_queried} = 0; } } if (any { /$opt_key/ } qw(all_keys fill_density fill_pattern top_infill_pattern)) { if ($config->fill_density == 100 && !first { $_ eq $config->fill_pattern } @{$Slic3r::Config::Options->{top_infill_pattern}{values}}) { my $dialog = Wx::MessageDialog->new($self, "The " . $config->fill_pattern . " infill pattern is not supposed to work at 100% density.\n" . "\nShall I switch to rectilinear fill pattern?", 'Infill', wxICON_WARNING | wxYES | wxNO); my $new_conf = Slic3r::Config->new; if ($dialog->ShowModal() == wxID_YES) { $new_conf->set("fill_pattern", 'rectilinear'); } else { $new_conf->set("fill_density", 40); } $self->_load_config($new_conf); } } my $have_perimeters = $config->perimeters > 0; if (any { /$opt_key/ } qw(all_keys perimeters)) { $self->get_field($_)->toggle($have_perimeters) for qw(extra_perimeters thin_walls overhangs seam_position external_perimeters_first external_perimeter_extrusion_width perimeter_speed small_perimeter_speed external_perimeter_speed); } my $have_adaptive_slicing = $config->adaptive_slicing; if (any { /$opt_key/ } qw(all_keys adaptive_slicing)) { $self->get_field($_)->toggle($have_adaptive_slicing) for qw(adaptive_slicing_quality match_horizontal_surfaces); $self->get_field($_)->toggle(!$have_adaptive_slicing) for qw(layer_height); } my $have_infill = $config->fill_density > 0; if (any { /$opt_key/ } qw(all_keys fill_density)) { # infill_extruder uses the same logic as in Print::extruders() $self->get_field($_)->toggle($have_infill) for qw(fill_pattern infill_every_layers infill_only_where_needed solid_infill_every_layers solid_infill_below_area infill_extruder); } my $have_solid_infill = ($config->top_solid_layers > 0) || ($config->bottom_solid_layers > 0); if (any { /$opt_key/ } qw(all_keys top_solid_layers bottom_solid_layers)) { # solid_infill_extruder uses the same logic as in Print::extruders() $self->get_field($_)->toggle($have_solid_infill) for qw(top_infill_pattern bottom_infill_pattern infill_first solid_infill_extruder solid_infill_extrusion_width solid_infill_speed); } if (any { /$opt_key/ } qw(all_keys top_solid_layers bottom_solid_layers fill_density)) { $self->get_field($_)->toggle($have_infill || $have_solid_infill) for qw(fill_angle infill_extrusion_width infill_speed bridge_speed); } if (any { /$opt_key/ } qw(all_keys fill_density perimeters)) { $self->get_field('fill_gaps')->toggle($have_perimeters && $have_infill); $self->get_field('gap_fill_speed')->toggle($have_perimeters && $have_infill && $config->fill_gaps); } my $have_top_solid_infill = $config->top_solid_layers > 0; $self->get_field($_)->toggle($have_top_solid_infill) for qw(top_infill_extrusion_width top_solid_infill_speed); my $have_autospeed = any { $config->get("${_}_speed") eq '0' } qw(perimeter external_perimeter small_perimeter infill solid_infill top_solid_infill gap_fill support_material support_material_interface); $self->get_field('max_print_speed')->toggle($have_autospeed); my $have_default_acceleration = $config->default_acceleration > 0; $self->get_field($_)->toggle($have_default_acceleration) for qw(perimeter_acceleration infill_acceleration bridge_acceleration first_layer_acceleration); my $have_skirt = $config->skirts > 0 || $config->min_skirt_length > 0; $self->get_field($_)->toggle($have_skirt) for qw(skirt_distance skirt_height); my $have_brim = $config->brim_width > 0 || $config->interior_brim_width || $config->brim_connections_width; # perimeter_extruder uses the same logic as in Print::extruders() $self->get_field('perimeter_extruder')->toggle($have_perimeters || $have_brim); my $have_support_material = $config->support_material || $config->raft_layers > 0; my $have_support_interface = $config->support_material_interface_layers > 0; $self->get_field($_)->toggle($have_support_material) for qw(support_material_threshold support_material_pattern support_material_spacing support_material_angle support_material_interface_layers dont_support_bridges support_material_extrusion_width support_material_interface_extrusion_width support_material_contact_distance); # Disable features that need support to be enabled. $self->get_field($_)->toggle($config->support_material) for qw(support_material_max_layers); $self->get_field($_)->toggle($have_support_material && $have_support_interface) for qw(support_material_interface_spacing support_material_interface_extruder support_material_interface_speed); $self->get_field('perimeter_extrusion_width')->toggle($have_perimeters || $have_skirt || $have_brim); $self->get_field('support_material_extruder')->toggle($have_support_material || $have_skirt); $self->get_field('support_material_speed')->toggle($have_support_material || $have_brim || $have_skirt); my $have_sequential_printing = $config->complete_objects; $self->get_field($_)->toggle($have_sequential_printing) for qw(extruder_clearance_radius extruder_clearance_height); my $have_ooze_prevention = $config->ooze_prevention; $self->get_field($_)->toggle($have_ooze_prevention) for qw(standby_temperature_delta); } package Slic3r::GUI::PresetEditor::Filament; use base 'Slic3r::GUI::PresetEditor'; use Wx qw(wxTheApp); sub name { 'filament' } sub title { 'Filament Settings' } sub options { return qw( filament_colour filament_diameter filament_notes filament_max_volumetric_speed extrusion_multiplier filament_density filament_cost temperature first_layer_temperature bed_temperature first_layer_bed_temperature fan_always_on cooling compatible_printers min_fan_speed max_fan_speed bridge_fan_speed disable_fan_first_layers fan_below_layer_time slowdown_below_layer_time min_print_speed start_filament_gcode end_filament_gcode filament_settings_id ); } sub overriding_options { return ( Slic3r::GUI::PresetEditor::Printer->overridable_options, ); } sub build { my $self = shift; { my $page = $self->add_options_page('Filament', 'spool.png'); { my $optgroup = $page->new_optgroup('Filament'); $optgroup->append_single_option_line('filament_colour', 0); $optgroup->append_single_option_line('filament_diameter', 0); $optgroup->append_single_option_line('extrusion_multiplier', 0); } { my $optgroup = $page->new_optgroup('Temperature (°C)'); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Extruder', ); $line->append_option($optgroup->get_option('first_layer_temperature', 0)); $line->append_option($optgroup->get_option('temperature', 0)); $optgroup->append_line($line); } { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Bed', ); $line->append_option($optgroup->get_option('first_layer_bed_temperature')); $line->append_option($optgroup->get_option('bed_temperature')); $optgroup->append_line($line); } } { my $optgroup = $page->new_optgroup('Optional information'); $optgroup->append_single_option_line('filament_density', 0); $optgroup->append_single_option_line('filament_cost', 0); } } { my $page = $self->add_options_page('Cooling', 'hourglass.png'); { my $optgroup = $page->new_optgroup('Enable'); $optgroup->append_single_option_line('fan_always_on'); $optgroup->append_single_option_line('cooling'); my $line = Slic3r::GUI::OptionsGroup::Line->new( label => '', full_width => 1, widget => sub { my ($parent) = @_; return $self->{description_line} = Slic3r::GUI::OptionsGroup::StaticText->new($parent); }, ); $optgroup->append_line($line); } { my $optgroup = $page->new_optgroup('Fan settings'); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Fan speed', ); $line->append_option($optgroup->get_option('min_fan_speed')); $line->append_option($optgroup->get_option('max_fan_speed')); $optgroup->append_line($line); } $optgroup->append_single_option_line('bridge_fan_speed'); $optgroup->append_single_option_line('disable_fan_first_layers'); } { my $optgroup = $page->new_optgroup('Cooling thresholds', label_width => 250, ); $optgroup->append_single_option_line('fan_below_layer_time'); $optgroup->append_single_option_line('slowdown_below_layer_time'); $optgroup->append_single_option_line('min_print_speed'); } } { my $page = $self->add_options_page('Custom G-code', 'script.png'); { my $optgroup = $page->new_optgroup('Start G-code', label_width => 0, ); my $option = $optgroup->get_option('start_filament_gcode', 0); $option->full_width(1); $option->height(150); $optgroup->append_single_option_line($option); } { my $optgroup = $page->new_optgroup('End G-code', label_width => 0, ); my $option = $optgroup->get_option('end_filament_gcode', 0); $option->full_width(1); $option->height(150); $optgroup->append_single_option_line($option); } } { my $page = $self->add_options_page('Notes', 'note.png'); { my $optgroup = $page->new_optgroup('Notes', label_width => 0, ); my $option = $optgroup->get_option('filament_notes', 0); $option->full_width(1); $option->height(250); $optgroup->append_single_option_line($option); } } { my $page = $self->add_options_page('Overrides', 'wrench.png'); { my $optgroup = $page->new_optgroup('Profile preferences'); my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Compatible printers', widget => $self->_compatible_printers_widget, ); $optgroup->append_line($line); } { my $optgroup = $page->new_optgroup('Overrides'); $optgroup->append_single_option_line('filament_max_volumetric_speed', 0); # Populate the overrides config. my @overridable = $self->overriding_options; $self->{overrides_config} = Slic3r::Config->new; # Populate the defaults with the current preset. $self->{overrides_default_config} = Slic3r::Config->new; $self->{overrides_default_config}->apply_only (wxTheApp->{mainframe}->{plater}->config, \@overridable); my $line = Slic3r::GUI::OptionsGroup::Line->new( label => '', full_width => 1, widget => sub { my ($parent) = @_; $self->{overrides_panel} = my $panel = Slic3r::GUI::Plater::OverrideSettingsPanel->new($parent, size => [-1, 300], on_change => sub { my ($opt_key) = @_; $self->config->erase($_) for @overridable; $self->current_preset->_dirty_config->erase($_) for @overridable; $self->config->apply($self->{overrides_config}); $self->_on_value_change($opt_key); }); $panel->set_editable(1); $panel->set_default_config($self->{overrides_default_config}); $panel->set_config($self->{overrides_config}); $panel->set_opt_keys([@overridable]); return $panel; }, ); $optgroup->append_line($line); } } } sub reload_config { my ($self) = @_; $self->_reload_compatible_printers_widget; { $self->{overrides_config}->clear; foreach my $opt_key (@{$self->{overrides_default_config}->get_keys}) { if ($self->config->has($opt_key)) { $self->{overrides_config}->set($opt_key, $self->config->get($opt_key)); } } $self->{overrides_panel}->update_optgroup; } $self->SUPER::reload_config; } sub _update { my ($self) = @_; $self->_update_description; my $cooling = $self->{config}->cooling; $self->get_field($_)->toggle($cooling) for qw(max_fan_speed fan_below_layer_time slowdown_below_layer_time min_print_speed); $self->get_field($_)->toggle($cooling || $self->{config}->fan_always_on) for qw(min_fan_speed disable_fan_first_layers); } sub _update_description { my $self = shift; my $config = $self->config; my $msg = ""; my $fan_other_layers = $config->fan_always_on ? sprintf "will always run at %d%%%s.", $config->min_fan_speed, ($config->disable_fan_first_layers > 1 ? " except for the first " . $config->disable_fan_first_layers . " layers" : $config->disable_fan_first_layers == 1 ? " except for the first layer" : "") : "will be turned off."; if ($config->cooling) { $msg = sprintf "If estimated layer time is below ~%ds, fan will run at %d%% and print speed will be reduced so that no less than %ds are spent on that layer (however, speed will never be reduced below %dmm/s).", $config->slowdown_below_layer_time, $config->max_fan_speed, $config->slowdown_below_layer_time, $config->min_print_speed; if ($config->fan_below_layer_time > $config->slowdown_below_layer_time) { $msg .= sprintf "\nIf estimated layer time is greater, but still below ~%ds, fan will run at a proportionally decreasing speed between %d%% and %d%%.", $config->fan_below_layer_time, $config->max_fan_speed, $config->min_fan_speed; } $msg .= "\nDuring the other layers, fan $fan_other_layers" } else { $msg = "Fan $fan_other_layers"; } $self->{description_line}->SetText($msg); } package Slic3r::GUI::PresetEditor::Printer; use base 'Slic3r::GUI::PresetEditor'; use Wx qw(wxTheApp :sizer :button :bitmap :misc :id :icon :dialog); use Wx::Event qw(EVT_BUTTON); sub name { 'printer' } sub title { 'Printer Settings' } sub options { return qw( bed_shape z_offset z_steps_per_mm has_heatbed gcode_flavor use_relative_e_distances serial_port serial_speed host_type print_host octoprint_apikey use_firmware_retraction pressure_advance vibration_limit use_volumetric_e start_gcode end_gcode before_layer_gcode layer_gcode toolchange_gcode between_objects_gcode nozzle_diameter extruder_offset min_layer_height max_layer_height retract_length retract_lift retract_speed retract_restart_extra retract_before_travel retract_layer_change wipe retract_length_toolchange retract_restart_extra_toolchange retract_lift_above retract_lift_below printer_settings_id printer_notes use_set_and_wait_bed use_set_and_wait_extruder ); } sub overridable_options { return qw( pressure_advance retract_length retract_lift retract_speed retract_restart_extra retract_before_travel retract_layer_change wipe ); } sub build { my $self = shift; $self->{extruders_count} = 1; { my $page = $self->add_options_page('General', 'printer_empty.png'); { my $optgroup = $page->new_optgroup('Size and coordinates'); my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Bed shape', ); $line->append_button("Set…", "cog.png", sub { my $dlg = Slic3r::GUI::BedShapeDialog->new($self, $self->config->bed_shape); if ($dlg->ShowModal == wxID_OK) { my $value = $dlg->GetValue; $self->config->set('bed_shape', $value); $self->_on_value_change('bed_shape'); } }); $optgroup->append_line($line); $optgroup->append_single_option_line('z_offset'); } { my $optgroup = $page->new_optgroup('Capabilities'); { my $option = Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'extruders_count', type => 'i', default => 1, label => 'Extruders', tooltip => 'Number of extruders of the printer.', min => 1, ); $optgroup->append_single_option_line($option); } $optgroup->append_single_option_line('has_heatbed'); $optgroup->on_change(sub { my ($opt_id) = @_; if ($opt_id eq 'extruders_count') { wxTheApp->CallAfter(sub { $self->_extruders_count_changed($optgroup->get_value('extruders_count')); }); } else { wxTheApp->CallAfter(sub { $self->_on_value_change($opt_id); }); } }); } { my $optgroup = $page->new_optgroup('USB/Serial connection'); my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Serial port', ); my $serial_port = $optgroup->get_option('serial_port'); $serial_port->side_widget(sub { my ($parent) = @_; my $btn = Wx::BitmapButton->new($parent, -1, Wx::Bitmap->new($Slic3r::var->("arrow_rotate_clockwise.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, &Wx::wxBORDER_NONE); $btn->SetToolTipString("Rescan serial ports") if $btn->can('SetToolTipString'); EVT_BUTTON($self, $btn, \&_update_serial_ports); return $btn; }); $line->append_option($serial_port); $line->append_option($optgroup->get_option('serial_speed')); $line->append_button("Test", "wrench.png", sub { my $sender = Slic3r::GCode::Sender->new; my $res = $sender->connect( $self->config->serial_port, $self->config->serial_speed, ); if ($res && $sender->wait_connected) { Slic3r::GUI::show_info($self, "Connection to printer works correctly.", "Success!"); } else { Slic3r::GUI::show_error($self, "Connection failed."); } }, \$self->{serial_test_btn}); $optgroup->append_line($line); } { my $optgroup = $page->new_optgroup('Print server upload'); $optgroup->append_single_option_line('host_type'); my $host_line = $optgroup->create_single_option_line('print_host'); $host_line->append_button("Browse…", "zoom.png", sub { # look for devices my $entries; { my $res = Net::Bonjour->new('octoprint'); $res->discover; $entries = [ $res->entries ]; } if (@{$entries}) { my $dlg = Slic3r::GUI::BonjourBrowser->new($self, $entries); if ($dlg->ShowModal == wxID_OK) { my $value = $dlg->GetValue . ":" . $dlg->GetPort; $self->config->set('print_host', $value); $self->_on_value_change('print_host'); } } else { Wx::MessageDialog->new($self, 'No Bonjour device found', 'Device Browser', wxOK | wxICON_INFORMATION)->ShowModal; } }, \$self->{print_host_browse_btn}, !eval "use Net::Bonjour; 1"); $host_line->append_button("Test", "wrench.png", sub { my $ua = LWP::UserAgent->new; $ua->timeout(10); my $res = $ua->get( "http://" . $self->config->print_host . "/api/version", 'X-Api-Key' => $self->config->octoprint_apikey, ); if ($res->is_success) { Slic3r::GUI::show_info($self, "Connection to OctoPrint works correctly.", "Success!"); } else { Slic3r::GUI::show_error($self, "I wasn't able to connect to OctoPrint (" . $res->status_line . "). " . "Check hostname and OctoPrint version (at least 1.1.0 is required)."); } }, \$self->{print_host_test_btn}); $optgroup->append_line($host_line); $optgroup->append_single_option_line('octoprint_apikey'); } { my $optgroup = $page->new_optgroup('Firmware'); $optgroup->append_single_option_line('gcode_flavor'); } { my $optgroup = $page->new_optgroup('Advanced'); $optgroup->append_single_option_line('use_relative_e_distances'); $optgroup->append_single_option_line('use_firmware_retraction'); $optgroup->append_single_option_line('use_volumetric_e'); $optgroup->append_single_option_line('pressure_advance'); $optgroup->append_single_option_line('vibration_limit'); $optgroup->append_single_option_line('z_steps_per_mm'); $optgroup->append_single_option_line('use_set_and_wait_extruder'); $optgroup->append_single_option_line('use_set_and_wait_bed'); } } { my $page = $self->add_options_page('Custom G-code', 'script.png'); { my $optgroup = $page->new_optgroup('Start G-code', label_width => 0, ); my $option = $optgroup->get_option('start_gcode'); $option->full_width(1); $option->height(150); $optgroup->append_single_option_line($option); } { my $optgroup = $page->new_optgroup('End G-code', label_width => 0, ); my $option = $optgroup->get_option('end_gcode'); $option->full_width(1); $option->height(150); $optgroup->append_single_option_line($option); } { my $optgroup = $page->new_optgroup('Before layer change G-code', label_width => 0, ); my $option = $optgroup->get_option('before_layer_gcode'); $option->full_width(1); $option->height(150); $optgroup->append_single_option_line($option); } { my $optgroup = $page->new_optgroup('After layer change G-code', label_width => 0, ); my $option = $optgroup->get_option('layer_gcode'); $option->full_width(1); $option->height(150); $optgroup->append_single_option_line($option); } { my $optgroup = $page->new_optgroup('Tool change G-code', label_width => 0, ); my $option = $optgroup->get_option('toolchange_gcode'); $option->full_width(1); $option->height(150); $optgroup->append_single_option_line($option); } { my $optgroup = $page->new_optgroup('Between objects G-code (for sequential printing)', label_width => 0, ); my $option = $optgroup->get_option('between_objects_gcode'); $option->full_width(1); $option->height(150); $optgroup->append_single_option_line($option); } } $self->{extruder_pages} = []; $self->_build_extruder_pages; { my $page = $self->add_options_page('Notes', 'note.png'); { my $optgroup = $page->new_optgroup('Notes', label_width => 0, ); my $option = $optgroup->get_option('printer_notes'); $option->full_width(1); $option->height(250); $optgroup->append_single_option_line($option); } } $self->_update_serial_ports; } sub _update_serial_ports { my ($self) = @_; $self->get_field('serial_port')->set_values([ wxTheApp->scan_serial_ports ]); } sub _extruders_count_changed { my ($self, $extruders_count) = @_; $self->{extruders_count} = $extruders_count; $self->_build_extruder_pages; $self->_on_value_change('extruders_count'); $self->_update; } sub _extruder_options { qw(nozzle_diameter min_layer_height max_layer_height extruder_offset retract_length retract_lift retract_lift_above retract_lift_below retract_speed retract_restart_extra retract_before_travel wipe retract_layer_change retract_length_toolchange retract_restart_extra_toolchange) } sub _build_extruder_pages { my $self = shift; my $default_config = Slic3r::Config::Full->new; foreach my $extruder_idx (@{$self->{extruder_pages}} .. $self->{extruders_count}-1) { # extend options foreach my $opt_key ($self->_extruder_options) { my $values = $self->config->get($opt_key); if (!defined $values) { $values = [ $default_config->get_at($opt_key, 0) ]; } else { # use last extruder's settings for the new one my $last_value = $values->[-1]; $values->[$extruder_idx] //= $last_value; } $self->config->set($opt_key, $values) or die "Unable to extend $opt_key"; } # build page my $page = $self->{extruder_pages}[$extruder_idx] = $self->add_options_page("Extruder " . ($extruder_idx + 1), 'funnel.png'); { my $optgroup = $page->new_optgroup('Size'); $optgroup->append_single_option_line('nozzle_diameter', $extruder_idx); } { my $optgroup = $page->new_optgroup('Limits'); $optgroup->append_single_option_line($_, $extruder_idx) for qw(min_layer_height max_layer_height); } { my $optgroup = $page->new_optgroup('Position (for multi-extruder printers)'); $optgroup->append_single_option_line('extruder_offset', $extruder_idx); } { my $optgroup = $page->new_optgroup('Retraction'); $optgroup->append_single_option_line($_, $extruder_idx) for qw(retract_length retract_lift); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Only lift Z', ); $line->append_option($optgroup->get_option('retract_lift_above', $extruder_idx)); $line->append_option($optgroup->get_option('retract_lift_below', $extruder_idx)); $optgroup->append_line($line); } $optgroup->append_single_option_line($_, $extruder_idx) for qw(retract_speed retract_restart_extra retract_before_travel retract_layer_change wipe); } { my $optgroup = $page->new_optgroup('Retraction when tool is disabled (advanced settings for multi-extruder setups)'); $optgroup->append_single_option_line($_, $extruder_idx) for qw(retract_length_toolchange retract_restart_extra_toolchange); } } # remove extra pages if ($self->{extruders_count} <= $#{$self->{extruder_pages}}) { $_->Destroy for @{$self->{extruder_pages}}[$self->{extruders_count}..$#{$self->{extruder_pages}}]; splice @{$self->{extruder_pages}}, $self->{extruders_count}; } # remove extra config values foreach my $opt_key ($self->_extruder_options) { my $values = $self->config->get($opt_key); splice @$values, $self->{extruders_count} if $self->{extruders_count} <= $#$values; $self->config->set($opt_key, $values) or die "Unable to truncate $opt_key"; } # rebuild page list @{$self->{pages}} = ( (grep $_->{title} !~ /^Extruder \d+/, @{$self->{pages}}), @{$self->{extruder_pages}}[ 0 .. $self->{extruders_count}-1 ], ); $self->update_tree; } sub _update { my ($self) = @_; my $config = $self->{config}; my $serial_speed = $self->get_field('serial_speed'); if ($serial_speed) { $self->get_field('serial_speed')->toggle($config->get('serial_port')); if ($config->get('serial_speed') && $config->get('serial_port')) { $self->{serial_test_btn}->Enable; } else { $self->{serial_test_btn}->Disable; } } if (($config->get('host_type') eq 'octoprint')) { $self->{print_host_browse_btn}->Enable; }else{ $self->{print_host_browse_btn}->Disable; } if (($config->get('host_type') eq 'octoprint') && eval "use LWP::UserAgent; 1") { $self->{print_host_test_btn}->Enable; } else { $self->{print_host_test_btn}->Disable; } $self->get_field('octoprint_apikey')->toggle($config->get('print_host')); my $have_multiple_extruders = $self->{extruders_count} > 1; $self->get_field('toolchange_gcode')->toggle($have_multiple_extruders); for my $i (0 .. ($self->{extruders_count}-1)) { my $have_retract_length = $config->get_at('retract_length', $i) > 0; # when using firmware retraction, firmware decides retraction length $self->get_field('retract_length', $i)->toggle(!$config->use_firmware_retraction); if ($config->use_firmware_retraction && ($config->gcode_flavor eq 'reprap' || $config->gcode_flavor eq 'repetier') && ($config->get_at('retract_length_toolchange', $i) > 0 || $config->get_at('retract_restart_extra_toolchange', $i) > 0)) { my $dialog = Wx::MessageDialog->new($self, "Retract length for toolchange on extruder " . $i . " is not available when using the Firmware Retraction mode.\n" . "\nShall I disable it in order to enable Firmware Retraction?", 'Firmware Retraction', wxICON_WARNING | wxYES | wxNO); my $new_conf = Slic3r::Config->new; if ($dialog->ShowModal() == wxID_YES) { my $retract_length_toolchange = $config->retract_length_toolchange; $retract_length_toolchange->[$i] = 0; $new_conf->set("retract_length_toolchange", $retract_length_toolchange); $new_conf->set("retract_restart_extra_toolchange", $retract_length_toolchange); } else { $new_conf->set("use_firmware_retraction", 0); } $self->_load_config($new_conf); } # user can customize travel length if we have retraction length or we're using # firmware retraction $self->get_field('retract_before_travel', $i)->toggle($have_retract_length || $config->use_firmware_retraction); # user can customize other retraction options if retraction is enabled # Firmware retract has Z lift built in. my $retraction = ($have_retract_length || $config->use_firmware_retraction); $self->get_field($_, $i)->toggle($retraction && !$config->use_firmware_retraction) for qw(retract_lift); $self->get_field($_, $i)->toggle($retraction) for qw(retract_layer_change); # retract lift above/below only applies if using retract lift $self->get_field($_, $i)->toggle($retraction && $config->get_at('retract_lift', $i) > 0) for qw(retract_lift_above retract_lift_below); # some options only apply when not using firmware retraction $self->get_field($_, $i)->toggle($retraction && !$config->use_firmware_retraction) for qw(retract_restart_extra wipe); # retraction speed is also used by auto-speed pressure regulator, even when # user enabled firmware retraction $self->get_field('retract_speed', $i)->toggle($retraction); if ($config->use_firmware_retraction && $config->get_at('wipe', $i)) { my $dialog = Wx::MessageDialog->new($self, "The Wipe option is not available when using the Firmware Retraction mode.\n" . "\nShall I disable it in order to enable Firmware Retraction?", 'Firmware Retraction', wxICON_WARNING | wxYES | wxNO); my $new_conf = Slic3r::Config->new; if ($dialog->ShowModal() == wxID_YES) { my $wipe = $config->wipe; $wipe->[$i] = 0; $new_conf->set("wipe", $wipe); } else { $new_conf->set("use_firmware_retraction", 0); } $self->_load_config($new_conf); } if ($config->use_firmware_retraction && $config->get_at('retract_lift', $i) > 0) { my $dialog = Wx::MessageDialog->new($self, "The Z Lift option is not available when using the Firmware Retraction mode.\n" . "\nShall I disable it in order to enable Firmware Retraction?", 'Firmware Retraction', wxICON_WARNING | wxYES | wxNO); my $new_conf = Slic3r::Config->new; if ($dialog->ShowModal() == wxID_YES) { my $wipe = $config->retract_lift; $wipe->[$i] = 0; $new_conf->set("retract_lift", $wipe); } else { $new_conf->set("use_firmware_retraction", 0); } $self->_load_config($new_conf); } $self->get_field('retract_length_toolchange', $i)->toggle ($have_multiple_extruders && !($config->use_firmware_retraction && ($config->gcode_flavor eq 'reprap' || $config->gcode_flavor eq 'repetier'))); my $toolchange_retraction = $config->get_at('retract_length_toolchange', $i) > 0; $self->get_field('retract_restart_extra_toolchange', $i)->toggle ($have_multiple_extruders && $toolchange_retraction && !($config->use_firmware_retraction && ($config->gcode_flavor eq 'reprap' || $config->gcode_flavor eq 'repetier'))); } } # this gets executed after preset is loaded and before GUI fields are updated sub on_preset_loaded { my $self = shift; # update the extruders count field { # update the GUI field according to the number of nozzle diameters supplied my $extruders_count = scalar @{ $self->config->nozzle_diameter }; $self->set_value('extruders_count', $extruders_count); $self->_extruders_count_changed($extruders_count); } } sub load_config_file { my $self = shift; $self->SUPER::load_config_file(@_); Slic3r::GUI::warning_catcher($self)->( "Your configuration was imported. However, Slic3r is currently only able to import settings " . "for the first defined filament. We recommend you don't use exported configuration files " . "for multi-extruder setups and rely on the built-in preset management system instead.") if @{ $self->config->nozzle_diameter } > 1; } package Slic3r::GUI::PresetEditor::Page; use Wx qw(wxTheApp :misc :panel :sizer); use base 'Wx::ScrolledWindow'; sub new { my $class = shift; my ($parent, $title, $iconID) = @_; my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); $self->{optgroups} = []; $self->{title} = $title; $self->{iconID} = $iconID; $self->{vsizer} = Wx::BoxSizer->new(wxVERTICAL); $self->SetSizer($self->{vsizer}); # http://docs.wxwidgets.org/3.0/classwx_scrolled.html#details $self->SetScrollRate($Slic3r::GUI::scroll_step, $Slic3r::GUI::scroll_step); return $self; } sub new_optgroup { my ($self, $title, %params) = @_; my $optgroup = Slic3r::GUI::ConfigOptionsGroup->new( parent => $self, title => $title, config => $self->GetParent->{config}, label_width => $params{label_width} // 200, on_change => sub { my ($opt_key, $value) = @_; wxTheApp->CallAfter(sub { $self->GetParent->_on_value_change($opt_key); }); }, ); push @{$self->{optgroups}}, $optgroup; $self->{vsizer}->Add($optgroup->sizer, 0, wxEXPAND | wxALL, 10); return $optgroup; } sub reload_config { my ($self) = @_; $_->reload_config for @{$self->{optgroups}}; } sub get_field { my ($self, $opt_key, $opt_index) = @_; foreach my $optgroup (@{ $self->{optgroups} }) { my $field = $optgroup->get_fieldc($opt_key, $opt_index); return $field if defined $field; } return undef; } sub set_value { my $self = shift; my ($opt_key, $value) = @_; my $changed = 0; foreach my $optgroup (@{$self->{optgroups}}) { $changed = 1 if $optgroup->set_value($opt_key, $value); } return $changed; } package Slic3r::GUI::SavePresetWindow; use Wx qw(:combobox :dialog :id :misc :sizer); use Wx::Event qw(EVT_BUTTON EVT_TEXT_ENTER); use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent, %params) = @_; my $self = $class->SUPER::new($parent, -1, "Save preset", wxDefaultPosition, wxDefaultSize); my @values = @{$params{values}}; my $text = Wx::StaticText->new($self, -1, "Save profile as:", wxDefaultPosition, wxDefaultSize); $self->{combo} = Wx::ComboBox->new($self, -1, $params{default}, wxDefaultPosition, wxDefaultSize, \@values, wxTE_PROCESS_ENTER); my $buttons = $self->CreateStdDialogButtonSizer(wxOK | wxCANCEL); my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($text, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10); $sizer->Add($self->{combo}, 0, wxEXPAND | wxLEFT | wxRIGHT, 10); $sizer->Add($buttons, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); EVT_BUTTON($self, wxID_OK, \&accept); EVT_TEXT_ENTER($self, $self->{combo}, \&accept); $self->SetSizer($sizer); $sizer->SetSizeHints($self); return $self; } sub accept { my ($self, $event) = @_; if (($self->{chosen_name} = $self->{combo}->GetValue)) { if ($self->{chosen_name} !~ /^[^<>:\/\\|?*\"]+$/i) { Slic3r::GUI::show_error($self, "The supplied name is not valid; the following characters are not allowed: <>:/\|?*\""); } elsif ($self->{chosen_name} eq '- default -') { Slic3r::GUI::show_error($self, "The supplied name is not available."); } else { $self->EndModal(wxID_OK); } } } sub get_name { my $self = shift; return $self->{chosen_name}; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/PresetEditorDialog.pm000066400000000000000000000036521327442435500213110ustar00rootroot00000000000000package Slic3r::GUI::PresetEditorDialog; use strict; use warnings; use Wx qw(:dialog :id :misc :sizer :button :icon wxTheApp WXK_ESCAPE); use Wx::Event qw(EVT_CLOSE EVT_CHAR_HOOK); use base qw(Wx::Dialog Class::Accessor); use utf8; __PACKAGE__->mk_accessors(qw(preset_editor)); sub new { my ($class, $parent) = @_; my $self = $class->SUPER::new($parent, -1, "Settings", wxDefaultPosition, [900,500], wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxDIALOG_EX_METAL); $self->preset_editor($self->preset_editor_class->new($self)); $self->SetTitle($self->preset_editor->title); my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($self->preset_editor, 1, wxEXPAND); $self->SetSizer($sizer); #$sizer->SetSizeHints($self); if (0) { my $buttons = $self->CreateStdDialogButtonSizer(wxCLOSE); $sizer->Add($buttons, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); } wxTheApp->restore_window_pos($self, "preset_editor"); EVT_CLOSE($self, sub { my (undef, $event) = @_; # save window size wxTheApp->save_window_pos($self, "preset_editor"); # propagate event $event->Skip; }); EVT_CHAR_HOOK($self, sub { my (undef, $event) = @_; if ($event->GetKeyCode == WXK_ESCAPE) { $self->Close; } else { $event->Skip; } }); return $self; } package Slic3r::GUI::PresetEditorDialog::Printer; use base qw(Slic3r::GUI::PresetEditorDialog); sub preset_editor_class { "Slic3r::GUI::PresetEditor::Printer" } package Slic3r::GUI::PresetEditorDialog::Filament; use base qw(Slic3r::GUI::PresetEditorDialog); sub preset_editor_class { "Slic3r::GUI::PresetEditor::Filament" } package Slic3r::GUI::PresetEditorDialog::Print; use base qw(Slic3r::GUI::PresetEditorDialog); sub preset_editor_class { "Slic3r::GUI::PresetEditor::Print" } 1; Slic3r-1.3.0/lib/Slic3r/GUI/ProgressStatusBar.pm000066400000000000000000000061071327442435500212130ustar00rootroot00000000000000# Status bar at the bottom of the main screen. package Slic3r::GUI::ProgressStatusBar; use strict; use warnings; use Wx qw(:gauge :misc); use base 'Wx::StatusBar'; sub new { my $class = shift; my $self = $class->SUPER::new(@_); $self->{busy} = 0; $self->{timer} = Wx::Timer->new($self); $self->{prog} = Wx::Gauge->new($self, wxGA_HORIZONTAL, 100, wxDefaultPosition, wxDefaultSize); $self->{prog}->Hide; $self->{cancelbutton} = Wx::Button->new($self, -1, "Cancel", wxDefaultPosition, wxDefaultSize); $self->{cancelbutton}->Hide; $self->SetFieldsCount(3); $self->SetStatusWidths(-1, 150, 155); Wx::Event::EVT_TIMER($self, \&OnTimer, $self->{timer}); Wx::Event::EVT_SIZE($self, \&OnSize); Wx::Event::EVT_BUTTON($self, $self->{cancelbutton}, sub { $self->{cancel_cb}->(); $self->{cancelbutton}->Hide; }); return $self; } sub DESTROY { my $self = shift; $self->{timer}->Stop if $self->{timer} && $self->{timer}->IsRunning; } sub OnSize { my ($self, $event) = @_; my %fields = ( # 0 is reserved for status text 1 => $self->{cancelbutton}, 2 => $self->{prog}, ); foreach (keys %fields) { my $rect = $self->GetFieldRect($_); my $offset = &Wx::wxGTK ? 1 : 0; # add a cosmetic 1 pixel offset on wxGTK my $pos = [$rect->GetX + $offset, $rect->GetY + $offset]; $fields{$_}->Move($pos); $fields{$_}->SetSize($rect->GetWidth - $offset, $rect->GetHeight); } $event->Skip; } sub OnTimer { my ($self, $event) = @_; if ($self->{prog}->IsShown) { $self->{timer}->Stop; } $self->{prog}->Pulse if $self->{_busy}; } sub SetCancelCallback { my $self = shift; my ($cb) = @_; $self->{cancel_cb} = $cb; $cb ? $self->{cancelbutton}->Show : $self->{cancelbutton}->Hide; } sub Run { my $self = shift; my $rate = shift || 100; if (!$self->{timer}->IsRunning) { $self->{timer}->Start($rate); } } sub GetProgress { my $self = shift; return $self->{prog}->GetValue; } sub SetProgress { my $self = shift; my ($val) = @_; if (!$self->{prog}->IsShown) { $self->ShowProgress(1); } if ($val == $self->{prog}->GetRange) { $self->{prog}->SetValue(0); $self->ShowProgress(0); } else { $self->{prog}->SetValue($val); } } sub SetRange { my $self = shift; my ($val) = @_; if ($val != $self->{prog}->GetRange) { $self->{prog}->SetRange($val); } } sub ShowProgress { my $self = shift; my ($show) = @_; $self->{prog}->Show($show); $self->{prog}->Pulse; } sub StartBusy { my $self = shift; my $rate = shift || 100; $self->{_busy} = 1; $self->ShowProgress(1); if (!$self->{timer}->IsRunning) { $self->{timer}->Start($rate); } } sub StopBusy { my $self = shift; $self->{timer}->Stop; $self->ShowProgress(0); $self->{prog}->SetValue(0); $self->{_busy} = 0; } sub IsBusy { my $self = shift; return $self->{_busy}; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/Projector.pm000066400000000000000000001023001327442435500175150ustar00rootroot00000000000000# DLP Projector screen for the SLA (stereolitography) print process package Slic3r::GUI::Projector; use strict; use warnings; use File::Basename qw(basename dirname); use Wx qw(:dialog :id :misc :sizer :systemsettings :bitmap :button :icon :filedialog wxTheApp); use Wx::Event qw(EVT_BUTTON EVT_CLOSE EVT_TEXT_ENTER EVT_SPINCTRL EVT_SLIDER); use base qw(Wx::Dialog Class::Accessor); use utf8; __PACKAGE__->mk_accessors(qw(config config2 manual_control_config screen controller _optgroups)); sub new { my ($class, $parent) = @_; my $self = $class->SUPER::new($parent, -1, "Projector for DLP", wxDefaultPosition, wxDefaultSize); $self->config2({ display => 0, show_bed => 1, invert_y => 0, zoom => 100, exposure_time => 2, bottom_exposure_time => 7, settle_time => 1.5, bottom_layers => 3, z_lift => 5, z_lift_speed => 8, offset => [0,0], }); $self->manual_control_config({ xy_travel_speed => 130, z_travel_speed => 10, temperature => '', bed_temperature => '', }); my $ini = eval { Slic3r::Config->read_ini("$Slic3r::GUI::datadir/DLP.ini") }; if ($ini) { foreach my $opt_id (keys %{$ini->{_}}) { my $value = $ini->{_}{$opt_id}; if ($opt_id eq 'offset') { $value = [ split /,/, $value ]; } $self->config2->{$opt_id} = $value; } } my $sizer = Wx::BoxSizer->new(wxVERTICAL); $self->config(Slic3r::Config->new_from_defaults( qw(serial_port serial_speed bed_shape start_gcode end_gcode z_offset) )); $self->config->apply(wxTheApp->{mainframe}->{slaconfig}); my @optgroups = (); { push @optgroups, my $optgroup = Slic3r::GUI::ConfigOptionsGroup->new( parent => $self, title => 'USB/Serial connection', config => $self->config, label_width => 200, ); $sizer->Add($optgroup->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Serial port', ); my $serial_port = $optgroup->get_option('serial_port'); $serial_port->side_widget(sub { my ($parent) = @_; my $btn = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new($Slic3r::var->("arrow_rotate_clockwise.png"), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, &Wx::wxBORDER_NONE); $btn->SetToolTipString("Rescan serial ports") if $btn->can('SetToolTipString'); EVT_BUTTON($self, $btn, sub { $optgroup->get_field('serial_port')->set_values([ wxTheApp->scan_serial_ports ]); }); return $btn; }); $line->append_option($serial_port); $line->append_option($optgroup->get_option('serial_speed')); $line->append_button("Test", "wrench.png", sub { my $sender = Slic3r::GCode::Sender->new; my $res = $sender->connect( $self->{config}->serial_port, $self->{config}->serial_speed, ); if ($res && $sender->wait_connected) { Slic3r::GUI::show_info($self, "Connection to printer works correctly.", "Success!"); } else { Slic3r::GUI::show_error($self, "Connection failed."); } }, \$self->{serial_test_btn}); $optgroup->append_line($line); } } { push @optgroups, my $optgroup = Slic3r::GUI::ConfigOptionsGroup->new( parent => $self, title => 'G-code', config => $self->config, label_width => 200, ); $sizer->Add($optgroup->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); { my $option = $optgroup->get_option('start_gcode'); $option->height(50); $option->full_width(1); $optgroup->append_single_option_line($option); } { my $option = $optgroup->get_option('end_gcode'); $option->height(50); $option->full_width(1); $optgroup->append_single_option_line($option); } } my $on_change = sub { my ($opt_id, $value) = @_; $self->config2->{$opt_id} = $value; $self->screen->reposition; $self->show_print_time; my $serialized = {}; foreach my $opt_id (keys %{$self->config2}) { my $value = $self->config2->{$opt_id}; if (ref($value) eq 'ARRAY') { $value = join ',', @$value; } $serialized->{$opt_id} = $value; } Slic3r::Config->write_ini( "$Slic3r::GUI::datadir/DLP.ini", { _ => $serialized }); }; { push @optgroups, my $optgroup = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Projection', on_change => $on_change, label_width => 200, ); $sizer->Add($optgroup->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Display', ); my @displays = 0 .. (Wx::Display::GetCount()-1); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'display', type => 'select', label => 'Display', tooltip => '', labels => [@displays], values => [@displays], default => $self->config2->{display}, )); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'zoom', type => 'percent', label => 'Zoom %', tooltip => '', default => $self->config2->{zoom}, min => 0.1, max => 100, )); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'offset', type => 'point', label => 'Offset', tooltip => '', default => $self->config2->{offset}, )); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'invert_y', type => 'bool', label => 'Invert Y', tooltip => '', default => $self->config2->{invert_y}, )); $optgroup->append_line($line); } $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'show_bed', type => 'bool', label => 'Show bed', tooltip => '', default => $self->config2->{show_bed}, )); } { push @optgroups, my $optgroup = Slic3r::GUI::OptionsGroup->new( parent => $self, title => 'Print', on_change => $on_change, label_width => 200, ); $sizer->Add($optgroup->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Time (seconds)', ); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'bottom_exposure_time', type => 'f', label => 'Bottom exposure', tooltip => '', default => $self->config2->{bottom_exposure_time}, )); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'exposure_time', type => 'f', label => 'Exposure', tooltip => '', default => $self->config2->{exposure_time}, )); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'settle_time', type => 'f', label => 'Settle', tooltip => '', default => $self->config2->{settle_time}, )); $optgroup->append_line($line); } $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'bottom_layers', type => 'i', label => 'Bottom layers', tooltip => '', default => $self->config2->{bottom_layers}, )); { my $line = Slic3r::GUI::OptionsGroup::Line->new( label => 'Z Lift', ); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'z_lift', type => 'f', label => 'Distance', sidetext => 'mm', tooltip => '', default => $self->config2->{z_lift}, )); $line->append_option(Slic3r::GUI::OptionsGroup::Option->new( opt_id => 'z_lift_speed', type => 'f', label => 'Speed', sidetext => 'mm/s', tooltip => '', default => $self->config2->{z_lift_speed}, )); $optgroup->append_line($line); } } $self->_optgroups([@optgroups]); { my $sizer1 = Wx::BoxSizer->new(wxHORIZONTAL); $sizer->Add($sizer1, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); { my $btn = $self->{btn_manual_control} = Wx::Button->new($self, -1, 'Manual Control', wxDefaultPosition, wxDefaultSize); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("cog.png"), wxBITMAP_TYPE_PNG)); } $sizer1->Add($btn, 0); EVT_BUTTON($self, $btn, sub { my $sender = Slic3r::GCode::Sender->new; my $res = $sender->connect( $self->config->serial_port, $self->config->serial_speed, ); if (!$res || !$sender->wait_connected) { Slic3r::GUI::show_error(undef, "Connection failed. Check serial port and speed."); return; } my $dlg = Slic3r::GUI::Controller::ManualControlDialog->new ($self, $self->config, $sender, $self->manual_control_config); $dlg->ShowModal; $sender->disconnect; }); } { my $btn = $self->{btn_print} = Wx::Button->new($self, -1, 'Print', wxDefaultPosition, wxDefaultSize); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("control_play.png"), wxBITMAP_TYPE_PNG)); } $sizer1->Add($btn, 0); EVT_BUTTON($self, $btn, sub { $self->controller->start_print; $self->_update_buttons; $self->_set_status(''); }); } { my $btn = $self->{btn_stop} = Wx::Button->new($self, -1, 'Stop/Black', wxDefaultPosition, wxDefaultSize); if ($Slic3r::GUI::have_button_icons) { $btn->SetBitmap(Wx::Bitmap->new($Slic3r::var->("control_stop.png"), wxBITMAP_TYPE_PNG)); } $sizer1->Add($btn, 0); EVT_BUTTON($self, $btn, sub { $self->controller->stop_print; $self->_update_buttons; $self->_set_status(''); }); } { { my $text = Wx::StaticText->new($self, -1, "Layer:", wxDefaultPosition, wxDefaultSize); $text->SetFont($Slic3r::GUI::small_font); $sizer1->Add($text, 0, wxEXPAND | wxLEFT, 10); } { my $spin = $self->{layers_spinctrl} = Wx::SpinCtrl->new($self, -1, 0, wxDefaultPosition, [60,-1], 0, 0, 300, 0); $sizer1->Add($spin, 0); EVT_SPINCTRL($self, $spin, sub { my $value = $spin->GetValue; $self->{layers_slider}->SetValue($value); $self->controller->project_layer($value); $self->_update_buttons; }); } { my $slider = $self->{layers_slider} = Wx::Slider->new( $self, -1, 0, # default 0, # min 300, # max wxDefaultPosition, wxDefaultSize, ); $sizer1->Add($slider, 1); EVT_SLIDER($self, $slider, sub { my $value = $slider->GetValue; $self->{layers_spinctrl}->SetValue($value); $self->controller->project_layer($value); $self->_update_buttons; }); } } my $sizer2 = Wx::BoxSizer->new(wxHORIZONTAL); $sizer->Add($sizer2, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); { $self->{status_text} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, wxDefaultSize); $self->{status_text}->SetFont($Slic3r::GUI::small_font); $sizer2->Add($self->{status_text}, 1 | wxEXPAND); } } { # should be wxCLOSE but it crashes on Linux, maybe it's a Wx bug my $buttons = Wx::BoxSizer->new(wxHORIZONTAL); { my $btn = Wx::Button->new($self, -1, "Export SVG…"); EVT_BUTTON($self, $btn, sub { $self->_export_svg; }); $buttons->Add($btn, 0); } $buttons->AddStretchSpacer(1); { my $btn = Wx::Button->new($self, -1, "Close"); $btn->SetDefault; EVT_BUTTON($self, $btn, sub { $self->_close; }); $buttons->Add($btn, 0); } $sizer->Add($buttons, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); } EVT_CLOSE($self, sub { $self->_close; }); $self->SetSizer($sizer); $sizer->SetSizeHints($self); # reuse existing screen if any if ($Slic3r::GUI::DLP_projection_screen) { $self->screen($Slic3r::GUI::DLP_projection_screen); $self->screen->config($self->config); $self->screen->config2($self->config2); } else { $self->screen(Slic3r::GUI::Projector::Screen->new($parent, $self->config, $self->config2)); $Slic3r::GUI::DLP_projection_screen = $self->screen; } $self->screen->reposition; $self->screen->Show; wxTheApp->{mainframe}->Hide; # initialize controller $self->controller(Slic3r::GUI::Projector::Controller->new( config => $self->config, config2 => $self->config2, screen => $self->screen, on_project_layer => sub { my ($layer_num) = @_; $self->{layers_spinctrl}->SetValue($layer_num); $self->{layers_slider}->SetValue($layer_num); my $duration = $self->controller->remaining_print_time; $self->_set_status(sprintf "Printing layer %d/%d (z = %.2f); %d minutes and %d seconds left", $layer_num, $self->controller->_print->layer_count, $self->controller->current_layer_height, int($duration/60), ($duration - int($duration/60)*60)); # % truncates to integer }, on_print_completed => sub { $self->_update_buttons; $self->_set_status(''); Wx::Bell(); }, )); { my $max = $self->controller->_print->layer_count-1; $self->{layers_spinctrl}->SetRange(0, $max); $self->{layers_slider}->SetRange(0, $max); } $self->_update_buttons; $self->show_print_time; return $self; } sub _update_buttons { my ($self) = @_; my $is_printing = $self->controller->is_printing; my $is_projecting = $self->controller->is_projecting; $self->{btn_manual_control}->Show(!$is_printing); $self->{btn_print}->Show(!$is_printing && !$is_projecting); $self->{btn_stop}->Show($is_printing || $is_projecting); $self->{layers_spinctrl}->Enable(!$is_printing); $self->{layers_slider}->Enable(!$is_printing); if ($is_printing) { $_->disable for @{$self->_optgroups}; } else { $_->enable for @{$self->_optgroups}; } $self->Layout; } sub _export_svg { my ($self) = @_; my $output_file = 'print.svg'; my $dlg = Wx::FileDialog->new( $self, 'Save SVG file as:', wxTheApp->output_path(dirname($output_file)), basename($output_file), &Slic3r::GUI::FILE_WILDCARDS->{svg}, wxFD_SAVE | wxFD_OVERWRITE_PROMPT, ); if ($dlg->ShowModal != wxID_OK) { $dlg->Destroy; return; } $output_file = Slic3r::decode_path($dlg->GetPath); $self->controller->_print->write_svg($output_file); } sub _set_status { my ($self, $status) = @_; $self->{status_text}->SetLabel($status // ''); $self->{status_text}->Wrap($self->{status_text}->GetSize->GetWidth); $self->{status_text}->Refresh; $self->Layout; } sub show_print_time { my ($self) = @_; my $duration = $self->controller->print_time; $self->_set_status(sprintf "Estimated print time: %d minutes and %d seconds - %.2f liters", int($duration/60), ($duration - int($duration/60)*60), # % truncates to integer $self->controller->total_resin); } sub _close { my $self = shift; # if projection screen is not on the same display as our dialog, # ask the user whether they want to keep it open my $keep_screen = 0; my $display_area = Wx::Display->new($self->config2->{display})->GetGeometry; if (!$display_area->Contains($self->GetScreenPosition)) { my $res = Wx::MessageDialog->new($self, "Do you want to keep the black screen open?", 'Black screen', wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION)->ShowModal; $keep_screen = ($res == wxID_YES); } if ($keep_screen) { $self->screen->config(undef); $self->screen->config2(undef); $self->screen->Refresh; } else { $self->screen->Destroy; $self->screen(undef); $Slic3r::GUI::DLP_projection_screen = undef; } wxTheApp->{mainframe}->Show; $self->EndModal(wxID_OK); } package Slic3r::GUI::Projector::Controller; use Moo; use Wx qw(wxTheApp :id :timer); use Wx::Event qw(EVT_TIMER); use Slic3r::Geometry qw(unscale); use Slic3r::Print::State ':steps'; use Time::HiRes qw(gettimeofday tv_interval); has 'config' => (is => 'ro', required => 1); has 'config2' => (is => 'ro', required => 1); has 'screen' => (is => 'ro', required => 1); has 'on_project_layer' => (is => 'rw'); has 'on_print_completed' => (is => 'rw'); has 'sender' => (is => 'rw'); has 'timer' => (is => 'rw'); has 'is_printing' => (is => 'rw', default => sub { 0 }); has '_print' => (is => 'rw'); has '_heights' => (is => 'rw'); has '_layer_num' => (is => 'rw'); has '_timer_cb' => (is => 'rw'); sub BUILD { my ($self) = @_; Slic3r::GUI::disable_screensaver(); # init print { my $print = Slic3r::SLAPrint->new(wxTheApp->{mainframe}->{plater}->{model}); $print->apply_config(wxTheApp->{mainframe}->{plater}->config); $print->apply_config(wxTheApp->{mainframe}->{slaconfig}); $self->_print($print); $self->screen->print($print); # make sure layers were sliced { my $progress_dialog = Wx::ProgressDialog->new('Slicing…', "Processing layers…", 100, undef, 0); $progress_dialog->Pulse; $print->slice; $progress_dialog->Destroy; } $self->_heights($print->heights); } # projection timer my $timer_id = &Wx::NewId(); $self->timer(Wx::Timer->new($self->screen, $timer_id)); EVT_TIMER($self->screen, $timer_id, sub { my $cb = $self->_timer_cb; $self->_timer_cb(undef); $cb->(); }); } sub delay { my ($self, $wait, $cb) = @_; $self->_timer_cb($cb); $self->timer->Start($wait * 1000, wxTIMER_ONE_SHOT); } sub current_layer_height { my ($self) = @_; return $self->_heights->[$self->_layer_num]; } sub start_print { my ($self) = @_; { $self->sender(Slic3r::GCode::Sender->new); my $res = $self->sender->connect( $self->config->serial_port, $self->config->serial_speed, ); if (!$res || !$self->sender->wait_connected) { Slic3r::GUI::show_error(undef, "Connection failed. Check serial port and speed."); return; } Slic3r::debugf "connected to " . $self->config->serial_port . "\n"; # TODO: this wait should be handled by GCodeSender sleep 4; # send custom start G-code $self->sender->send($_, 1) for grep !/^;/, split /\n/, $self->config->start_gcode; $self->sender->("G90", 1); # set absolute positioning } $self->is_printing(1); # TODO: block until the G1 command has been performed # we could do this with M400 + M115 but maybe it's not portable $self->delay(5, sub { # start with black Slic3r::debugf "starting black projection\n"; $self->_layer_num(-1); $self->screen->project_layer(undef); $self->delay($self->config2->{settle_time}, sub { $self->project_next_layer; }); }); } sub stop_print { my ($self) = @_; if ($self->sender) { $self->sender->disconnect; } $self->is_printing(0); $self->timer->Stop; $self->_timer_cb(undef); $self->screen->project_layer(undef); } sub print_completed { my ($self) = @_; # send custom end G-code if ($self->sender) { $self->sender->send($_, 1) for grep !/^;/, split /\n/, $self->config->end_gcode; } # call this before the on_print_completed callback otherwise buttons # won't be updated correctly $self->stop_print; $self->on_print_completed->() if $self->is_printing && $self->on_print_completed; } sub is_projecting { my ($self) = @_; return defined $self->screen->layer_num; } sub project_layer { my ($self, $layer_num) = @_; if (!defined $layer_num || $layer_num >= $self->_print->layer_count) { $self->screen->project_layer(undef); return; } $self->screen->project_layer($layer_num); } sub project_next_layer { my ($self) = @_; $self->_layer_num($self->_layer_num + 1); Slic3r::debugf "projecting layer %d\n", $self->_layer_num; if ($self->_layer_num >= $self->_print->layer_count) { $self->print_completed; return; } $self->on_project_layer->($self->_layer_num) if $self->on_project_layer; if ($self->sender) { my $z = $self->current_layer_height + $self->config->z_offset; my $F = $self->config2->{z_lift_speed} * 60; if ($self->config2->{z_lift} != 0) { $self->sender->send(sprintf("G1 Z%.5f F%d", $z + $self->config2->{z_lift}, $F), 1); } $self->sender->send(sprintf("G1 Z%.5f F%d", $z, $F), 1); } # TODO: we should block until G1 commands have been performed, see note below $self->delay($self->config2->{settle_time}, sub { $self->project_layer($self->_layer_num); # get exposure time my $time = $self->config2->{exposure_time}; if ($self->_layer_num < $self->config2->{bottom_layers}) { $time = $self->config2->{bottom_exposure_time}; } $self->delay($time, sub { $self->screen->project_layer(undef); $self->project_next_layer; }); }); } sub remaining_print_time { my ($self) = @_; my $remaining_layers = @{$self->_heights} - $self->_layer_num; my $remaining_bottom_layers = $self->_layer_num >= $self->config2->{bottom_layers} ? 0 : $self->config2->{bottom_layers} - $self->_layer_num; return $remaining_bottom_layers * $self->config2->{bottom_exposure_time} + ($remaining_layers - $remaining_bottom_layers) * $self->config2->{exposure_time} + $remaining_layers * $self->config2->{settle_time}; } sub print_time { my ($self) = @_; return $self->config2->{bottom_layers} * $self->config2->{bottom_exposure_time} + ($self->_print->layer_count - $self->config2->{bottom_layers}) * $self->config2->{exposure_time} + $self->_print->layer_count * $self->config2->{settle_time}; } sub total_resin { my ($self) = @_; my $vol = 0; # mm^3 for my $i (0..($self->_print->layer_count-1)) { my $lh = $self->_heights->[$i] - ($i == 0 ? 0 : $self->_heights->[$i-1]); $vol += unscale(unscale($_->area)) * $lh for @{ $self->_print->layer_slices($i) }; } return $vol/1000/1000; # liters } sub DESTROY { my ($self) = @_; $self->timer->Stop if $self->timer; $self->sender->disconnect if $self->sender; Slic3r::GUI::enable_screensaver(); } package Slic3r::GUI::Projector::Screen; use Wx qw(:dialog :id :misc :sizer :colour :pen :brush :font wxBG_STYLE_CUSTOM); use Wx::Event qw(EVT_PAINT EVT_SIZE); use base qw(Wx::Dialog Class::Accessor); use List::Util qw(min); use Slic3r::Geometry qw(X Y unscale scale); use Slic3r::Geometry::Clipper qw(intersection_pl union_ex); __PACKAGE__->mk_accessors(qw(config config2 scaling_factor bed_origin print layer_num)); sub new { my ($class, $parent, $config, $config2) = @_; my $self = $class->SUPER::new($parent, -1, "Projector", wxDefaultPosition, wxDefaultSize, 0); $self->config($config); $self->config2($config2); $self->SetBackgroundStyle(wxBG_STYLE_CUSTOM); EVT_SIZE($self, \&_resize); EVT_PAINT($self, \&_repaint); $self->_resize; return $self; } sub reposition { my ($self) = @_; my $display = Wx::Display->new($self->config2->{display}); my $area = $display->GetGeometry; $self->Move($area->GetPosition); # ShowFullScreen doesn't use the right screen #$self->ShowFullScreen($self->config2->{fullscreen}); $self->SetSize($area->GetSize); $self->_resize; $self->Refresh; } sub _resize { my ($self) = @_; return if !$self->config; my ($cw, $ch) = $self->GetSizeWH; # get bed shape polygon my $bed_polygon = Slic3r::Polygon->new_scale(@{$self->config->bed_shape}); my $bb = $bed_polygon->bounding_box; my $size = $bb->size; my $center = $bb->center; # calculate the scaling factor needed for constraining print bed area inside preview # scaling_factor is expressed in pixel / mm $self->scaling_factor(min($cw / unscale($size->x), $ch / unscale($size->y))); #) # apply zoom to scaling factor if ($self->config2->{zoom} != 0) { # TODO: make sure min and max in the option config are enforced $self->scaling_factor($self->scaling_factor * ($self->config2->{zoom}/100)); } # calculate the displacement needed for centering bed on screen $self->bed_origin([ $cw/2 - (unscale($center->x) - $self->config2->{offset}->[X]) * $self->scaling_factor, $ch/2 - (unscale($center->y) - $self->config2->{offset}->[Y]) * $self->scaling_factor, #)) ]); $self->Refresh; } sub project_layer { my ($self, $layer_num) = @_; $self->layer_num($layer_num); $self->Refresh; } sub _repaint { my ($self) = @_; my $dc = Wx::AutoBufferedPaintDC->new($self); my ($cw, $ch) = $self->GetSizeWH; return if $cw == 0; # when canvas is not rendered yet, size is 0,0 $dc->SetPen(Wx::Pen->new(wxBLACK, 1, wxSOLID)); $dc->SetBrush(Wx::Brush->new(wxBLACK, wxSOLID)); $dc->DrawRectangle(0, 0, $cw, $ch); return if !$self->config; # turn size into max visible coordinates # TODO: or should we use ClientArea? $cw--; $ch--; # draw bed if ($self->config2->{show_bed}) { $dc->SetPen(Wx::Pen->new(wxRED, 2, wxSOLID)); $dc->SetBrush(Wx::Brush->new(wxWHITE, wxTRANSPARENT)); # draw contour my $bed_polygon = Slic3r::Polygon->new_scale(@{$self->config->bed_shape}); $dc->DrawPolygon($self->scaled_points_to_pixel($bed_polygon), 0, 0); # draw grid $dc->SetPen(Wx::Pen->new(wxRED, 1, wxSOLID)); { my $bb = $bed_polygon->bounding_box; my $step = scale 10; # 1cm grid my @polylines = (); for (my $x = $bb->x_min - ($bb->x_min % $step) + $step; $x < $bb->x_max; $x += $step) { push @polylines, Slic3r::Polyline->new([$x, $bb->y_min], [$x, $bb->y_max]); } for (my $y = $bb->y_min - ($bb->y_min % $step) + $step; $y < $bb->y_max; $y += $step) { push @polylines, Slic3r::Polyline->new([$bb->x_min, $y], [$bb->x_max, $y]); } $dc->DrawLine(map @$_, @$_) for map $self->scaled_points_to_pixel([ @$_[0,-1] ]), @{intersection_pl(\@polylines, [$bed_polygon])}; } # draw axes orientation $dc->SetPen(Wx::Pen->new(wxWHITE, 4, wxSOLID)); { foreach my $endpoint ([10, 0], [0, 10]) { $dc->DrawLine( map @{$self->unscaled_point_to_pixel($_)}, [0,0], $endpoint ); } $dc->SetTextForeground(wxWHITE); $dc->SetFont(Wx::Font->new(20, wxDEFAULT, wxNORMAL, wxNORMAL)); my $p = $self->unscaled_point_to_pixel([10, 0]); $dc->DrawText("X", $p->[X], $p->[Y]); $p = $self->unscaled_point_to_pixel([0, 10]); $dc->DrawText("Y", $p->[X]-20, $p->[Y]-10); } } # get layers at this height # draw layers $dc->SetPen(Wx::Pen->new(wxWHITE, 1, wxSOLID)); return if !$self->print || !defined $self->layer_num; if ($self->print->layer_solid($self->layer_num)) { $self->_paint_expolygon($_, $dc) for @{$self->print->layer_slices($self->layer_num)}; } else { # perimeters first, because their "hole" is painted black $self->_paint_expolygon($_, $dc) for @{$self->print->layer_perimeters($self->layer_num)}, @{$self->print->layer_solid_infill($self->layer_num)}; $self->_paint_expolygon($_, $dc) for @{union_ex($self->print->layer_infill($self->layer_num)->grow)}; } # draw support material my $sm_radius = $self->print->config->get_abs_value_over('support_material_extrusion_width', $self->print->config->layer_height)/2; $dc->SetBrush(Wx::Brush->new(wxWHITE, wxSOLID)); foreach my $pillar (@{$self->print->sm_pillars}) { next unless $pillar->{top_layer} >= $self->layer_num && $pillar->{bottom_layer} <= $self->layer_num; my $radius = min( $sm_radius, ($pillar->{top_layer} - $self->layer_num + 1) * $self->print->config->layer_height, ); $dc->DrawCircle( @{$self->scaled_points_to_pixel([$pillar->{point}])->[0]}, $radius * $self->scaling_factor, ); } } sub _paint_expolygon { my ($self, $expolygon, $dc) = @_; my @polygons = sort { $a->contains_point($b->first_point) ? -1 : 1 } @$expolygon; $self->_paint_polygon($_, $dc) for @polygons; } sub _paint_polygon { my ($self, $polygon, $dc) = @_; if ($polygon->is_counter_clockwise) { $dc->SetBrush(Wx::Brush->new(wxWHITE, wxSOLID)); } else { $dc->SetBrush(Wx::Brush->new(wxBLACK, wxSOLID)); } $dc->DrawPolygon($self->scaled_points_to_pixel($polygon->pp), 0, 0); } # convert a model coordinate into a pixel coordinate sub unscaled_point_to_pixel { my ($self, $point) = @_; my $zero = $self->bed_origin; my $p = [ $point->[X] * $self->scaling_factor + $zero->[X], $point->[Y] * $self->scaling_factor + $zero->[Y], ]; if (!$self->config2->{invert_y}) { my $ch = $self->GetSize->GetHeight; $p->[Y] = $ch - $p->[Y]; } return $p; } sub scaled_points_to_pixel { my ($self, $points) = @_; return [ map $self->unscaled_point_to_pixel($_), map Slic3r::Pointf->new_unscale(@$_), @$points ]; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/ReloadDialog.pm000066400000000000000000000037271327442435500201110ustar00rootroot00000000000000# A tiny dialog to select how to reload an object that has additional parts or modifiers. package Slic3r::GUI::ReloadDialog; use strict; use warnings; use utf8; use Wx qw(:button :dialog :id :misc :sizer :choicebook wxTAB_TRAVERSAL); use Wx::Event qw(EVT_CLOSE); use base 'Wx::Dialog'; sub new { my $class = shift; my ($parent,$default_selection) = @_; my $self = $class->SUPER::new($parent, -1, "Additional parts and modifiers detected", wxDefaultPosition, [350,100], wxDEFAULT_DIALOG_STYLE); # label my $text = Wx::StaticText->new($self, -1, "Additional parts and modifiers are loaded in the current model. \n\nHow do you want to proceed?", wxDefaultPosition, wxDefaultSize); # selector $self->{choice} = my $choice = Wx::Choice->new($self, -1, wxDefaultPosition, wxDefaultSize, []); $choice->Append("Reload all linked files"); $choice->Append("Reload main file, copy added parts & modifiers"); $choice->Append("Reload main file, discard added parts & modifiers"); $choice->SetSelection($default_selection); # checkbox $self->{checkbox} = my $checkbox = Wx::CheckBox->new($self, -1, "Don't ask again"); my $vsizer = Wx::BoxSizer->new(wxVERTICAL); my $hsizer = Wx::BoxSizer->new(wxHORIZONTAL); $vsizer->Add($text, 0, wxEXPAND | wxALL, 10); $vsizer->Add($choice, 0, wxEXPAND | wxALL, 10); $hsizer->Add($checkbox, 1, wxEXPAND | wxALL, 10); $hsizer->Add($self->CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxALL, 10); $vsizer->Add($hsizer, 0, wxEXPAND | wxALL, 0); $self->SetSizer($vsizer); $self->SetMinSize($self->GetSize); $vsizer->SetSizeHints($self); # needed to actually free memory EVT_CLOSE($self, sub { $self->EndModal(wxID_CANCEL); $self->Destroy; }); return $self; } sub GetSelection { my ($self) = @_; return $self->{choice}->GetSelection; } sub GetHideOnNext { my ($self) = @_; return $self->{checkbox}->GetValue; } 1; Slic3r-1.3.0/lib/Slic3r/GUI/SLAPrintOptions.pm000066400000000000000000000112221327442435500205600ustar00rootroot00000000000000package Slic3r::GUI::SLAPrintOptions; use Wx qw(:dialog :id :misc :sizer :systemsettings wxTheApp); use Wx::Event qw(EVT_BUTTON EVT_TEXT_ENTER); use base qw(Wx::Dialog Class::Accessor); __PACKAGE__->mk_accessors(qw(config)); sub new { my ($class, $parent) = @_; my $self = $class->SUPER::new($parent, -1, "SLA/DLP Print", wxDefaultPosition, wxDefaultSize); $self->config(Slic3r::Config::SLAPrint->new); $self->config->apply_dynamic(wxTheApp->{mainframe}->{plater}->config); # Set some defaults $self->config->set('infill_extrusion_width', 0.5) if $self->config->infill_extrusion_width == 0; $self->config->set('support_material_extrusion_width', 1) if $self->config->support_material_extrusion_width == 0; $self->config->set('perimeter_extrusion_width', 1) if $self->config->perimeter_extrusion_width == 0; my $sizer = Wx::BoxSizer->new(wxVERTICAL); my $new_optgroup = sub { my ($title) = @_; my $optgroup = Slic3r::GUI::ConfigOptionsGroup->new( parent => $self, title => $title, config => $self->config, label_width => 200, ); $sizer->Add($optgroup->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); return $optgroup; }; { my $optgroup = $new_optgroup->('Layers'); $optgroup->append_single_option_line('layer_height'); $optgroup->append_single_option_line('first_layer_height'); } { my $optgroup = $new_optgroup->('Infill'); $optgroup->append_single_option_line('fill_density'); $optgroup->append_single_option_line('fill_pattern'); { my $line = $optgroup->create_single_option_line('perimeter_extrusion_width'); $line->label('Shell thickness'); my $opt = $line->get_options->[0]; $opt->sidetext('mm'); $opt->tooltip('Thickness of the external shell (both horizontal and vertical).'); $optgroup->append_line($line); } { my $line = $optgroup->create_single_option_line('infill_extrusion_width'); $line->label('Infill thickness'); my $opt = $line->get_options->[0]; $opt->sidetext('mm'); $opt->tooltip('Thickness of the infill lines.'); $optgroup->append_line($line); } $optgroup->append_single_option_line('fill_angle'); } { my $optgroup = $new_optgroup->('Raft'); $optgroup->append_single_option_line('raft_layers'); $optgroup->append_single_option_line('raft_offset'); } { my $optgroup = $new_optgroup->('Support Material'); $optgroup->append_single_option_line('support_material'); { my $line = $optgroup->create_single_option_line('support_material_spacing'); $line->label('Pillars spacing'); my $opt = $line->get_options->[0]; $opt->tooltip('Max spacing between support material pillars.'); $optgroup->append_line($line); } { my $line = $optgroup->create_single_option_line('support_material_extrusion_width'); $line->label('Pillars diameter'); my $opt = $line->get_options->[0]; $opt->sidetext('mm'); $opt->tooltip('Diameter of the cylindrical support pillars. 0.4mm and higher is supported.'); $optgroup->append_line($line); } } my $buttons = $self->CreateStdDialogButtonSizer(wxOK | wxCANCEL); EVT_BUTTON($self, wxID_OK, sub { $self->_accept }); $sizer->Add($buttons, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); $self->SetSizer($sizer); $sizer->SetSizeHints($self); return $self; } sub _accept { my $self = shift; # validate config eval { die "Invalid shell thickness (must be greater than 0).\n" if $self->config->fill_density < 100 && $self->config->perimeter_extrusion_width == 0; die "Invalid infill thickness (must be greater than 0).\n" if $self->config->fill_density < 100 && $self->config->infill_extrusion_width == 0; }; if ($@) { Slic3r::GUI::show_error($self, $@); return; } wxTheApp->{mainframe}->{slaconfig}->apply_static($self->config); $self->EndModal(wxID_OK); $self->Close; # needed on Linux my $projector = Slic3r::GUI::Projector->new($self->GetParent); # this double invocation is needed for properly hiding the MainFrame $projector->Show; $projector->ShowModal; # TODO: diff the new config with the selected presets and prompt the user for # applying the changes to them. } 1; Slic3r-1.3.0/lib/Slic3r/Geometry.pm000066400000000000000000000446101327442435500167260ustar00rootroot00000000000000package Slic3r::Geometry; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw( PI X Y Z A B X1 Y1 X2 Y2 Z1 Z2 MIN MAX epsilon slope line_point_belongs_to_segment points_coincide distance_between_points normalize tan move_points_3D point_in_polygon point_in_segment segment_in_segment polyline_lines polygon_lines point_along_segment polygon_segment_having_point polygon_has_subsegment deg2rad rad2deg rotate_points move_points dot perp line_intersection bounding_box bounding_box_intersect angle3points chained_path chained_path_from collinear scale unscale rad2deg_dir bounding_box_center line_intersects_any douglas_peucker polyline_remove_short_segments normal triangle_normal polygon_is_convex scaled_epsilon bounding_box_3D size_3D size_2D convex_hull directions_parallel directions_parallel_within ); use constant PI => 4 * atan2(1, 1); use constant A => 0; use constant B => 1; use constant X1 => 0; use constant Y1 => 1; use constant X2 => 2; use constant Y2 => 3; use constant Z1 => 4; use constant Z2 => 5; use constant MIN => 0; use constant MAX => 1; our $parallel_degrees_limit = abs(deg2rad(0.1)); sub epsilon () { 1E-4 } sub scaled_epsilon () { epsilon / &Slic3r::SCALING_FACTOR } sub scale ($) { $_[0] / &Slic3r::SCALING_FACTOR } sub unscale ($) { $_[0] * &Slic3r::SCALING_FACTOR } sub tan { my ($angle) = @_; return (sin $angle) / (cos $angle); } sub slope { my ($line) = @_; return undef if abs($line->[B][X] - $line->[A][X]) < epsilon; # line is vertical return ($line->[B][Y] - $line->[A][Y]) / ($line->[B][X] - $line->[A][X]); } # this subroutine checks whether a given point may belong to a given # segment given the hypothesis that it belongs to the line containing # the segment sub line_point_belongs_to_segment { my ($point, $segment) = @_; #printf " checking whether %f,%f may belong to segment %f,%f - %f,%f\n", # @$point, map @$_, @$segment; my @segment_extents = ( [ sort { $a <=> $b } map $_->[X], @$segment ], [ sort { $a <=> $b } map $_->[Y], @$segment ], ); return 0 if $point->[X] < ($segment_extents[X][0] - epsilon) || $point->[X] > ($segment_extents[X][1] + epsilon); return 0 if $point->[Y] < ($segment_extents[Y][0] - epsilon) || $point->[Y] > ($segment_extents[Y][1] + epsilon); return 1; } sub points_coincide { my ($p1, $p2) = @_; return 1 if abs($p2->[X] - $p1->[X]) < epsilon && abs($p2->[Y] - $p1->[Y]) < epsilon; return 0; } sub distance_between_points { my ($p1, $p2) = @_; return sqrt((($p1->[X] - $p2->[X])**2) + ($p1->[Y] - $p2->[Y])**2); } # this will check whether a point is in a polygon regardless of polygon orientation sub point_in_polygon { my ($point, $polygon) = @_; my ($x, $y) = @$point; my $n = @$polygon; my @x = map $_->[X], @$polygon; my @y = map $_->[Y], @$polygon; # Derived from the comp.graphics.algorithms FAQ, # courtesy of Wm. Randolph Franklin my ($i, $j); my $side = 0; # 0 = outside; 1 = inside for ($i = 0, $j = $n - 1; $i < $n; $j = $i++) { if ( # If the y is between the (y-) borders... ($y[$i] <= $y && $y < $y[$j]) || ($y[$j] <= $y && $y < $y[$i]) and # ...the (x,y) to infinity line crosses the edge # from the ith point to the jth point... ($x < ($x[$j] - $x[$i]) * ($y - $y[$i]) / ($y[$j] - $y[$i]) + $x[$i]) ) { $side = not $side; # Jump the fence } } # if point is not in polygon, let's check whether it belongs to the contour if (!$side && 0) { return 1 if polygon_segment_having_point($polygon, $point); } return $side; } sub point_in_segment { my ($point, $line) = @_; my ($x, $y) = @$point; my $line_p = $line->pp; my @line_x = sort { $a <=> $b } $line_p->[A][X], $line_p->[B][X]; my @line_y = sort { $a <=> $b } $line_p->[A][Y], $line_p->[B][Y]; # check whether the point is in the segment bounding box return 0 unless $x >= ($line_x[0] - epsilon) && $x <= ($line_x[1] + epsilon) && $y >= ($line_y[0] - epsilon) && $y <= ($line_y[1] + epsilon); # if line is vertical, check whether point's X is the same as the line if ($line_p->[A][X] == $line_p->[B][X]) { return abs($x - $line_p->[A][X]) < epsilon ? 1 : 0; } # calculate the Y in line at X of the point my $y3 = $line_p->[A][Y] + ($line_p->[B][Y] - $line_p->[A][Y]) * ($x - $line_p->[A][X]) / ($line_p->[B][X] - $line_p->[A][X]); return abs($y3 - $y) < epsilon ? 1 : 0; } sub segment_in_segment { my ($needle, $haystack) = @_; # a segment is contained in another segment if its endpoints are contained return point_in_segment($needle->[A], $haystack) && point_in_segment($needle->[B], $haystack); } sub polyline_lines { my ($polyline) = @_; my @points = @$polyline; return map Slic3r::Line->new(@points[$_, $_+1]), 0 .. $#points-1; } sub polygon_lines { my ($polygon) = @_; return polyline_lines([ @$polygon, $polygon->[0] ]); } # given a segment $p1-$p2, get the point at $distance from $p1 along segment sub point_along_segment { my ($p1, $p2, $distance) = @_; my $point = [ @$p1 ]; my $line_length = sqrt( (($p2->[X] - $p1->[X])**2) + (($p2->[Y] - $p1->[Y])**2) ); for (X, Y) { if ($p1->[$_] != $p2->[$_]) { $point->[$_] = $p1->[$_] + ($p2->[$_] - $p1->[$_]) * $distance / $line_length; } } return Slic3r::Point->new(@$point); } # given a $polygon, return the (first) segment having $point sub polygon_segment_having_point { my ($polygon, $point) = @_; foreach my $line (@{ $polygon->lines }) { return $line if point_in_segment($point, $line); } return undef; } # return true if the given segment is contained in any edge of the polygon sub polygon_has_subsegment { my ($polygon, $segment) = @_; foreach my $line (polygon_lines($polygon)) { return 1 if segment_in_segment($segment, $line); } return 0; } # polygon must be simple (non complex) and ccw sub polygon_is_convex { my ($points) = @_; for (my $i = 0; $i <= $#$points; $i++) { my $angle = angle3points($points->[$i-1], $points->[$i-2], $points->[$i]); return 0 if $angle < PI; } return 1; } sub rotate_points { my ($radians, $center, @points) = @_; $center //= [0,0]; return map { [ $center->[X] + cos($radians) * ($_->[X] - $center->[X]) - sin($radians) * ($_->[Y] - $center->[Y]), $center->[Y] + cos($radians) * ($_->[Y] - $center->[Y]) + sin($radians) * ($_->[X] - $center->[X]), ] } @points; } sub move_points { my ($shift, @points) = @_; return map { my @p = @$_; Slic3r::Point->new($shift->[X] + $p[X], $shift->[Y] + $p[Y]); } @points; } sub move_points_3D { my ($shift, @points) = @_; return map [ $shift->[X] + $_->[X], $shift->[Y] + $_->[Y], $shift->[Z] + $_->[Z], ], @points; } sub normal { my ($line1, $line2) = @_; return [ ($line1->[Y] * $line2->[Z]) - ($line1->[Z] * $line2->[Y]), -($line2->[Z] * $line1->[X]) + ($line2->[X] * $line1->[Z]), ($line1->[X] * $line2->[Y]) - ($line1->[Y] * $line2->[X]), ]; } sub triangle_normal { my ($v1, $v2, $v3) = @_; my $u = [ map +($v2->[$_] - $v1->[$_]), (X,Y,Z) ]; my $v = [ map +($v3->[$_] - $v1->[$_]), (X,Y,Z) ]; return normal($u, $v); } sub normalize { my ($line) = @_; my $len = sqrt( ($line->[X]**2) + ($line->[Y]**2) + ($line->[Z]**2) ) or return [0, 0, 0]; # to avoid illegal division by zero return [ map $_ / $len, @$line ]; } # 2D dot product sub dot { my ($u, $v) = @_; return $u->[X] * $v->[X] + $u->[Y] * $v->[Y]; } # 2D perp product sub perp { my ($u, $v) = @_; return $u->[X] * $v->[Y] - $u->[Y] * $v->[X]; } sub line_intersects_any { my ($line, $lines) = @_; for (@$lines) { return 1 if line_intersection($line, $_, 1); } return 0; } sub line_intersection { my ($line1, $line2, $require_crossing) = @_; $require_crossing ||= 0; my $intersection = _line_intersection(map @$_, @$line1, @$line2); return (ref $intersection && $intersection->[1] == $require_crossing) ? $intersection->[0] : undef; } sub collinear { my ($line1, $line2, $require_overlapping) = @_; my $intersection = _line_intersection(map @$_, @$line1, @$line2); return 0 unless !ref($intersection) && ($intersection eq 'parallel collinear' || ($intersection eq 'parallel vertical' && abs($line1->[A][X] - $line2->[A][X]) < epsilon)); if ($require_overlapping) { my @box_a = bounding_box([ $line1->[0], $line1->[1] ]); my @box_b = bounding_box([ $line2->[0], $line2->[1] ]); return 0 unless bounding_box_intersect( 2, @box_a, @box_b ); } return 1; } sub _line_intersection { my ( $x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3 ) = @_; my ($x, $y); # The as-yet-undetermined intersection point. my $dy10 = $y1 - $y0; # dyPQ, dxPQ are the coordinate differences my $dx10 = $x1 - $x0; # between the points P and Q. my $dy32 = $y3 - $y2; my $dx32 = $x3 - $x2; my $dy10z = abs( $dy10 ) < epsilon; # Is the difference $dy10 "zero"? my $dx10z = abs( $dx10 ) < epsilon; my $dy32z = abs( $dy32 ) < epsilon; my $dx32z = abs( $dx32 ) < epsilon; my $dyx10; # The slopes. my $dyx32; $dyx10 = $dy10 / $dx10 unless $dx10z; $dyx32 = $dy32 / $dx32 unless $dx32z; # Now we know all differences and the slopes; # we can detect horizontal/vertical special cases. # E.g., slope = 0 means a horizontal line. unless ( defined $dyx10 or defined $dyx32 ) { return "parallel vertical"; } elsif ( $dy10z and not $dy32z ) { # First line horizontal. $y = $y0; $x = $x2 + ( $y - $y2 ) * $dx32 / $dy32; } elsif ( not $dy10z and $dy32z ) { # Second line horizontal. $y = $y2; $x = $x0 + ( $y - $y0 ) * $dx10 / $dy10; } elsif ( $dx10z and not $dx32z ) { # First line vertical. $x = $x0; $y = $y2 + $dyx32 * ( $x - $x2 ); } elsif ( not $dx10z and $dx32z ) { # Second line vertical. $x = $x2; $y = $y0 + $dyx10 * ( $x - $x0 ); } elsif ( abs( $dyx10 - $dyx32 ) < epsilon ) { # The slopes are suspiciously close to each other. # Either we have parallel collinear or just parallel lines. # The bounding box checks have already weeded the cases # "parallel horizontal" and "parallel vertical" away. my $ya = $y0 - $dyx10 * $x0; my $yb = $y2 - $dyx32 * $x2; return "parallel collinear" if abs( $ya - $yb ) < epsilon; return "parallel"; } else { # None of the special cases matched. # We have a "honest" line intersection. $x = ($y2 - $y0 + $dyx10*$x0 - $dyx32*$x2)/($dyx10 - $dyx32); $y = $y0 + $dyx10 * ($x - $x0); } my $h10 = $dx10 ? ($x - $x0) / $dx10 : ($dy10 ? ($y - $y0) / $dy10 : 1); my $h32 = $dx32 ? ($x - $x2) / $dx32 : ($dy32 ? ($y - $y2) / $dy32 : 1); return [Slic3r::Point->new($x, $y), $h10 >= 0 && $h10 <= 1 && $h32 >= 0 && $h32 <= 1]; } # http://paulbourke.net/geometry/lineline2d/ sub _line_intersection2 { my ($line1, $line2) = @_; my $denom = ($line2->[B][Y] - $line2->[A][Y]) * ($line1->[B][X] - $line1->[A][X]) - ($line2->[B][X] - $line2->[A][X]) * ($line1->[B][Y] - $line1->[A][Y]); my $numerA = ($line2->[B][X] - $line2->[A][X]) * ($line1->[A][Y] - $line2->[A][Y]) - ($line2->[B][Y] - $line2->[A][Y]) * ($line1->[A][X] - $line2->[A][X]); my $numerB = ($line1->[B][X] - $line1->[A][X]) * ($line1->[A][Y] - $line2->[A][Y]) - ($line1->[B][Y] - $line1->[A][Y]) * ($line1->[A][X] - $line2->[A][X]); # are the lines coincident? if (abs($numerA) < epsilon && abs($numerB) < epsilon && abs($denom) < epsilon) { return Slic3r::Point->new( ($line1->[A][X] + $line1->[B][X]) / 2, ($line1->[A][Y] + $line1->[B][Y]) / 2, ); } # are the lines parallel? if (abs($denom) < epsilon) { return undef; } # is the intersection along the segments? my $muA = $numerA / $denom; my $muB = $numerB / $denom; if ($muA < 0 || $muA > 1 || $muB < 0 || $muB > 1) { return undef; } return Slic3r::Point->new( $line1->[A][X] + $muA * ($line1->[B][X] - $line1->[A][X]), $line1->[A][Y] + $muA * ($line1->[B][Y] - $line1->[A][Y]), ); } # 2D sub bounding_box { my ($points) = @_; my @x = map $_->x, @$points; my @y = map $_->y, @$points; #,, my @bb = (undef, undef, undef, undef); for (0..$#x) { $bb[X1] = $x[$_] if !defined $bb[X1] || $x[$_] < $bb[X1]; $bb[X2] = $x[$_] if !defined $bb[X2] || $x[$_] > $bb[X2]; $bb[Y1] = $y[$_] if !defined $bb[Y1] || $y[$_] < $bb[Y1]; $bb[Y2] = $y[$_] if !defined $bb[Y2] || $y[$_] > $bb[Y2]; } return @bb[X1,Y1,X2,Y2]; } sub bounding_box_center { my ($bounding_box) = @_; return Slic3r::Point->new( ($bounding_box->[X2] + $bounding_box->[X1]) / 2, ($bounding_box->[Y2] + $bounding_box->[Y1]) / 2, ); } sub size_2D { my @bounding_box = bounding_box(@_); return ( ($bounding_box[X2] - $bounding_box[X1]), ($bounding_box[Y2] - $bounding_box[Y1]), ); } # bounding_box_intersect($d, @a, @b) # Return true if the given bounding boxes @a and @b intersect # in $d dimensions. Used by line_intersection(). sub bounding_box_intersect { my ( $d, @bb ) = @_; # Number of dimensions and box coordinates. my @aa = splice( @bb, 0, 2 * $d ); # The first box. # (@bb is the second one.) # Must intersect in all dimensions. for ( my $i_min = 0; $i_min < $d; $i_min++ ) { my $i_max = $i_min + $d; # The index for the maximum. return 0 if ( $aa[ $i_max ] + epsilon ) < $bb[ $i_min ]; return 0 if ( $bb[ $i_max ] + epsilon ) < $aa[ $i_min ]; } return 1; } # 3D sub bounding_box_3D { my ($points) = @_; my @extents = (map [undef, undef], X,Y,Z); foreach my $point (@$points) { for (X,Y,Z) { $extents[$_][MIN] = $point->[$_] if !defined $extents[$_][MIN] || $point->[$_] < $extents[$_][MIN]; $extents[$_][MAX] = $point->[$_] if !defined $extents[$_][MAX] || $point->[$_] > $extents[$_][MAX]; } } return @extents; } sub size_3D { my ($points) = @_; my @extents = bounding_box_3D($points); return map $extents[$_][MAX] - $extents[$_][MIN], (X,Y,Z); } # this assumes a CCW rotation from $p2 to $p3 around $p1 sub angle3points { my ($p1, $p2, $p3) = @_; # p1 is the center my $angle = atan2($p2->[X] - $p1->[X], $p2->[Y] - $p1->[Y]) - atan2($p3->[X] - $p1->[X], $p3->[Y] - $p1->[Y]); # we only want to return only positive angles return $angle <= 0 ? $angle + 2*PI() : $angle; } sub polyline_remove_short_segments { my ($points, $min_length, $isPolygon) = @_; for (my $i = $isPolygon ? 0 : 1; $i < $#$points; $i++) { if (distance_between_points($points->[$i-1], $points->[$i]) < $min_length) { # we can remove $points->[$i] splice @$points, $i, 1; $i--; } } } sub douglas_peucker { my ($points, $tolerance) = @_; no warnings "recursion"; my $results = []; my $dmax = 0; my $index = 0; for my $i (1..$#$points) { my $d = $points->[$i]->distance_to(Slic3r::Line->new($points->[0], $points->[-1])); if ($d > $dmax) { $index = $i; $dmax = $d; } } if ($dmax >= $tolerance) { my $dp1 = douglas_peucker([ @$points[0..$index] ], $tolerance); $results = [ @$dp1[0..($#$dp1-1)], @{douglas_peucker([ @$points[$index..$#$points] ], $tolerance)}, ]; } else { $results = [ $points->[0], $points->[-1] ]; } return $results; } sub douglas_peucker2 { my ($points, $tolerance) = @_; my $anchor = 0; my $floater = $#$points; my @stack = (); my %keep = (); push @stack, [$anchor, $floater]; while (@stack) { ($anchor, $floater) = @{pop @stack}; # initialize line segment my ($anchor_x, $anchor_y, $seg_len); if (grep $points->[$floater][$_] != $points->[$anchor][$_], X, Y) { $anchor_x = $points->[$floater][X] - $points->[$anchor][X]; $anchor_y = $points->[$floater][Y] - $points->[$anchor][Y]; $seg_len = sqrt(($anchor_x ** 2) + ($anchor_y ** 2)); # get the unit vector $anchor_x /= $seg_len; $anchor_y /= $seg_len; } else { $anchor_x = $anchor_y = $seg_len = 0; } # inner loop: my $max_dist = 0; my $farthest = $anchor + 1; for my $i (($anchor + 1) .. $floater) { my $dist_to_seg = 0; # compare to anchor my $vecX = $points->[$i][X] - $points->[$anchor][X]; my $vecY = $points->[$i][Y] - $points->[$anchor][Y]; $seg_len = sqrt(($vecX ** 2) + ($vecY ** 2)); # dot product: my $proj = $vecX * $anchor_x + $vecY * $anchor_y; if ($proj < 0) { $dist_to_seg = $seg_len; } else { # compare to floater $vecX = $points->[$i][X] - $points->[$floater][X]; $vecY = $points->[$i][Y] - $points->[$floater][Y]; $seg_len = sqrt(($vecX ** 2) + ($vecY ** 2)); # dot product: $proj = $vecX * (-$anchor_x) + $vecY * (-$anchor_y); if ($proj < 0) { $dist_to_seg = $seg_len } else { # calculate perpendicular distance to line (pythagorean theorem): $dist_to_seg = sqrt(abs(($seg_len ** 2) - ($proj ** 2))); } if ($max_dist < $dist_to_seg) { $max_dist = $dist_to_seg; $farthest = $i; } } } if ($max_dist <= $tolerance) { # use line segment $keep{$_} = 1 for $anchor, $floater; } else { push @stack, [$anchor, $farthest]; push @stack, [$farthest, $floater]; } } return [ map $points->[$_], sort keys %keep ]; } 1; Slic3r-1.3.0/lib/Slic3r/Geometry/000077500000000000000000000000001327442435500163635ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r/Geometry/Clipper.pm000066400000000000000000000005711327442435500203220ustar00rootroot00000000000000package Slic3r::Geometry::Clipper; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(offset offset_ex diff_ex diff union_ex intersection_ex JT_ROUND JT_MITER JT_SQUARE is_counter_clockwise union_pt offset2 offset2_ex intersection intersection_pl diff_pl union CLIPPER_OFFSET_SCALE union_pt_chained intersection_ppl); 1; Slic3r-1.3.0/lib/Slic3r/Layer.pm000066400000000000000000000013071327442435500162030ustar00rootroot00000000000000# Extends the C++ class Slic3r::Layer. package Slic3r::Layer; use strict; use warnings; # the following two were previously generated by Moo sub print { my $self = shift; return $self->object->print; } sub config { my $self = shift; return $self->object->config; } sub region { my $self = shift; my ($region_id) = @_; while ($self->region_count <= $region_id) { $self->add_region($self->object->print->get_region($self->region_count)); } return $self->get_region($region_id); } sub regions { my ($self) = @_; return [ map $self->get_region($_), 0..($self->region_count-1) ]; } package Slic3r::Layer::Support; our @ISA = qw(Slic3r::Layer); 1; Slic3r-1.3.0/lib/Slic3r/Line.pm000066400000000000000000000005571327442435500160240ustar00rootroot00000000000000package Slic3r::Line; use strict; use warnings; # a line is a two-points line use parent 'Slic3r::Polyline'; sub intersection { my $self = shift; my ($line, $require_crossing) = @_; return Slic3r::Geometry::line_intersection($self, $line, $require_crossing); } sub grow { my $self = shift; return Slic3r::Polyline->new(@$self)->grow(@_); } 1; Slic3r-1.3.0/lib/Slic3r/Model.pm000066400000000000000000000106741327442435500161760ustar00rootroot00000000000000# extends C++ class Slic3r::Model package Slic3r::Model; use List::Util qw(first max any); use Slic3r::Geometry qw(X Y Z move_points); sub merge { my $class = shift; my @models = @_; my $new_model = ref($class) ? $class : $class->new; $new_model->add_object($_) for map @{$_->objects}, @models; return $new_model; } sub add_object { my $self = shift; if (@_ == 1) { # we have a Model::Object my ($object) = @_; return $self->_add_object_clone($object); } else { my (%args) = @_; my $new_object = $self->_add_object; $new_object->set_name($args{name}) if defined $args{name}; $new_object->set_input_file($args{input_file}) if defined $args{input_file}; $new_object->config->apply($args{config}) if defined $args{config}; $new_object->set_layer_height_ranges($args{layer_height_ranges}) if defined $args{layer_height_ranges}; $new_object->set_origin_translation($args{origin_translation}) if defined $args{origin_translation}; return $new_object; } } sub set_material { my $self = shift; my ($material_id, $attributes) = @_; my $material = $self->add_material($material_id); $material->apply($attributes // {}); return $material; } # Extends C++ class Slic3r::ModelMaterial package Slic3r::Model::Material; sub apply { my ($self, $attributes) = @_; $self->set_attribute($_, $attributes{$_}) for keys %$attributes; } # Extends C++ class Slic3r::ModelObject package Slic3r::Model::Object; use File::Basename qw(basename); use List::Util qw(first sum); use Slic3r::Geometry qw(X Y Z rad2deg); sub add_volume { my $self = shift; my $new_volume; if (@_ == 1) { # we have a Model::Volume my ($volume) = @_; $new_volume = $self->_add_volume_clone($volume); if ($volume->material_id ne '') { # merge material attributes and config (should we rename materials in case of duplicates?) if (my $material = $volume->object->model->get_material($volume->material_id)) { my %attributes = %{ $material->attributes }; if ($self->model->has_material($volume->material_id)) { %attributes = (%attributes, %{ $self->model->get_material($volume->material_id)->attributes }) } my $new_material = $self->model->set_material($volume->material_id, {%attributes}); $new_material->config->apply($material->config); } } } else { my %args = @_; $new_volume = $self->_add_volume($args{mesh}); $new_volume->set_name($args{name}) if defined $args{name}; $new_volume->set_material_id($args{material_id}) if defined $args{material_id}; $new_volume->set_modifier($args{modifier}) if defined $args{modifier}; $new_volume->config->apply($args{config}) if defined $args{config}; } if ($new_volume->material_id ne '' && !defined $self->model->get_material($new_volume->material_id)) { # TODO: this should be a trigger on Volume::material_id $self->model->set_material($new_volume->material_id); } $self->invalidate_bounding_box; return $new_volume; } sub add_instance { my $self = shift; my %params = @_; if (@_ == 1) { # we have a Model::Instance my ($instance) = @_; return $self->_add_instance_clone($instance); } else { my (%args) = @_; my $new_instance = $self->_add_instance; $new_instance->set_rotation($args{rotation}) if defined $args{rotation}; $new_instance->set_x_rotation($args{x_rotation}) if defined $args{x_rotation}; $new_instance->set_y_rotation($args{y_rotation}) if defined $args{y_rotation}; $new_instance->set_scaling_factor($args{scaling_factor}) if defined $args{scaling_factor}; $new_instance->set_scaling_vector($args{scaling_vector}) if defined $args{scaling_vector}; $new_instance->set_offset($args{offset}) if defined $args{offset}; $new_instance->set_z_translation($args{z_translation}) if defined $args{z_translation}; return $new_instance; } } 1; Slic3r-1.3.0/lib/Slic3r/Point.pm000066400000000000000000000010501327442435500162130ustar00rootroot00000000000000package Slic3r::Point; use strict; use warnings; sub new_scale { my $class = shift; return $class->new(map Slic3r::Geometry::scale($_), @_); } sub dump_perl { my $self = shift; return sprintf "[%s,%s]", @$self; } package Slic3r::Pointf; use strict; use warnings; sub new_unscale { my $class = shift; return $class->new(map Slic3r::Geometry::unscale($_), @_); } package Slic3r::Pointf3; use strict; use warnings; sub new_unscale { my $class = shift; return $class->new(map Slic3r::Geometry::unscale($_), @_); } 1; Slic3r-1.3.0/lib/Slic3r/Polygon.pm000066400000000000000000000017201327442435500165550ustar00rootroot00000000000000package Slic3r::Polygon; use strict; use warnings; # a polygon is a closed polyline. use parent 'Slic3r::Polyline'; use Slic3r::Geometry qw(PI); sub grow { my $self = shift; return $self->split_at_first_point->grow(@_); } # this method subdivides the polygon segments to that no one of them # is longer than the length provided sub subdivide { my $self = shift; my ($max_length) = @_; my @points = @$self; push @points, $points[0]; # append first point as this is a polygon my @new_points = shift @points; while (@points) { while ($new_points[-1]->distance_to($points[0]) > $max_length) { push @new_points, map Slic3r::Point->new(@$_), Slic3r::Geometry::point_along_segment($new_points[-1], $points[0], $max_length); } push @new_points, shift @points; } pop @new_points; # remove last point as it coincides with first one return Slic3r::Polygon->new(@new_points); } 1;Slic3r-1.3.0/lib/Slic3r/Polyline.pm000066400000000000000000000006431327442435500167240ustar00rootroot00000000000000package Slic3r::Polyline; use strict; use warnings; use Slic3r::Geometry qw(X Y); sub new_scale { my $class = shift; my @points = map { ref($_) eq 'Slic3r::Point' ? $_->pp : $_ } @_; return $class->new(map [ Slic3r::Geometry::scale($_->[X]), Slic3r::Geometry::scale($_->[Y]) ], @points); } sub dump_perl { my $self = shift; return sprintf "[%s]", join ',', map "[$_->[0],$_->[1]]", @$self; } 1; Slic3r-1.3.0/lib/Slic3r/Print.pm000066400000000000000000000365401327442435500162320ustar00rootroot00000000000000# The slicing work horse. # Extends C++ class Slic3r::Print package Slic3r::Print; use strict; use warnings; use File::Basename qw(basename fileparse); use File::Spec; use List::Util qw(min max first sum); use Slic3r::ExtrusionLoop ':roles'; use Slic3r::ExtrusionPath ':roles'; use Slic3r::Flow ':roles'; use Slic3r::Geometry qw(X Y Z X1 Y1 X2 Y2 MIN MAX PI scale unscale convex_hull); use Slic3r::Geometry::Clipper qw(diff_ex union_ex intersection_ex intersection offset offset2 union union_pt_chained JT_ROUND JT_SQUARE diff_pl); use Slic3r::Print::State ':steps'; use Slic3r::Surface qw(S_TYPE_BOTTOM); our $status_cb; sub set_status_cb { my ($class, $cb) = @_; $status_cb = $cb; } sub status_cb { return $status_cb // sub {}; } # this value is not supposed to be compared with $layer->id # since they have different semantics sub total_layer_count { my $self = shift; return max(map $_->total_layer_count, @{$self->objects}); } sub size { my $self = shift; return $self->bounding_box->size; } sub process { my ($self) = @_; ### No need to call this as we call it as part of prepare_infill() ### until we fix the idempotency issue. ###$self->status_cb->(20, "Generating perimeters"); ###$_->make_perimeters for @{$self->objects}; $self->status_cb->(70, "Infilling layers"); $_->infill for @{$self->objects}; $_->generate_support_material for @{$self->objects}; $self->make_skirt; $self->make_brim; # must come after make_skirt # time to make some statistics if (0) { eval "use Devel::Size"; print "MEMORY USAGE:\n"; printf " meshes = %.1fMb\n", List::Util::sum(map Devel::Size::total_size($_->meshes), @{$self->objects})/1024/1024; printf " layer slices = %.1fMb\n", List::Util::sum(map Devel::Size::total_size($_->slices), map @{$_->layers}, @{$self->objects})/1024/1024; printf " region slices = %.1fMb\n", List::Util::sum(map Devel::Size::total_size($_->slices), map @{$_->regions}, map @{$_->layers}, @{$self->objects})/1024/1024; printf " perimeters = %.1fMb\n", List::Util::sum(map Devel::Size::total_size($_->perimeters), map @{$_->regions}, map @{$_->layers}, @{$self->objects})/1024/1024; printf " fills = %.1fMb\n", List::Util::sum(map Devel::Size::total_size($_->fills), map @{$_->regions}, map @{$_->layers}, @{$self->objects})/1024/1024; printf " print object = %.1fMb\n", Devel::Size::total_size($self)/1024/1024; } if (0) { eval "use Slic3r::Test::SectionCut"; Slic3r::Test::SectionCut->new(print => $self)->export_svg("section_cut.svg"); } } sub escaped_split { my ($line) = @_; # Free up three characters for temporary replacement $line =~ s/%/%%/g; $line =~ s/#/##/g; $line =~ s/\?/\?\?/g; # replace escaped !'s $line =~ s/\!\!/%#\?/g; # split on non-escaped whitespace my @split = split /(?<=[^\!])\s+/, $line, -1; for my $part (@split) { # replace escaped whitespace with the whitespace $part =~ s/\!(\s+)/$1/g; # resub temp symbols $part =~ s/%#\?/\!/g; $part =~ s/%%/%/g; $part =~ s/##/#/g; $part =~ s/\?\?/\?/g; } return @split; } sub export_gcode { my $self = shift; my %params = @_; # prerequisites $self->process; # output everything to a G-code file my $output_file = $self->output_filepath($params{output_file} // ''); $self->status_cb->(90, "Exporting G-code" . ($output_file ? " to $output_file" : "")); { # open output gcode file if we weren't supplied a file-handle my ($fh, $tempfile); if ($params{output_fh}) { $fh = $params{output_fh}; } else { $tempfile = "$output_file.tmp"; Slic3r::open(\$fh, ">", $tempfile) or die "Failed to open $tempfile for writing\n"; # enable UTF-8 output since user might have entered Unicode characters in fields like notes binmode $fh, ':utf8'; } Slic3r::Print::GCode->new( print => $self, fh => $fh, )->export; # close our gcode file close $fh; if ($tempfile) { my $renamed = 0; for my $i (1..5) { last if $renamed = rename Slic3r::encode_path($tempfile), Slic3r::encode_path($output_file); # Wait for 1/4 seconds and try to rename once again. select(undef, undef, undef, 0.25); } Slic3r::debugf "Failed to remove the output G-code file from $tempfile to $output_file. Is $tempfile locked?\n" if !$renamed; } } # run post-processing scripts if (@{$self->config->post_process}) { $self->status_cb->(95, "Running post-processing scripts"); $self->config->setenv; for my $script (@{$self->config->post_process}) { Slic3r::debugf " '%s' '%s'\n", $script, $output_file; my @parsed_script = escaped_split $script; my $executable = shift @parsed_script ; push @parsed_script, $output_file; # -x doesn't return true on Windows except for .exe files if (($^O eq 'MSWin32') ? !(-e $executable) : !(-x $executable)) { die "The configured post-processing script is not executable: check permissions or escape whitespace/exclamation points. ($executable) \n"; } system($executable, @parsed_script); } } } # Export SVG slices for the offline SLA printing. sub export_svg { my $self = shift; my %params = @_; $_->slice for @{$self->objects}; my $fh = $params{output_fh}; if (!$fh) { my $output_file = $self->output_filepath($params{output_file}); $output_file =~ s/\.gcode$/.svg/i; Slic3r::open(\$fh, ">", $output_file) or die "Failed to open $output_file for writing\n"; print "Exporting to $output_file..." unless $params{quiet}; } my $print_bb = $self->bounding_box; my $print_size = $print_bb->size; print $fh sprintf <<"EOF", unscale($print_size->[X]), unscale($print_size->[Y]); EOF my $print_polygon = sub { my ($polygon, $type) = @_; printf $fh qq{ \n}, $type, (join ' ', map { join ',', map unscale $_, @$_ } @$polygon), ($type eq 'contour' ? 'white' : 'black'); }; my @layers = sort { $a->print_z <=> $b->print_z } map { @{$_->layers}, @{$_->support_layers} } @{$self->objects}; my $layer_id = -1; my @previous_layer_slices = (); for my $layer (@layers) { $layer_id++; if ($layer->slice_z == -1) { printf $fh qq{ \n}, $layer_id; } else { printf $fh qq{ \n}, $layer_id, unscale($layer->slice_z); } my @current_layer_slices = (); # sort slices so that the outermost ones come first my @slices = sort { $a->contour->contains_point($b->contour->first_point) ? 0 : 1 } @{$layer->slices}; foreach my $copy (@{$layer->object->_shifted_copies}) { foreach my $slice (@slices) { my $expolygon = $slice->clone; $expolygon->translate(@$copy); $expolygon->translate(-$print_bb->x_min, -$print_bb->y_min); $print_polygon->($expolygon->contour, 'contour'); $print_polygon->($_, 'hole') for @{$expolygon->holes}; push @current_layer_slices, $expolygon; } } # generate support material if ($self->has_support_material && $layer->id > 0) { my (@supported_slices, @unsupported_slices) = (); foreach my $expolygon (@current_layer_slices) { my $intersection = intersection_ex( [ map @$_, @previous_layer_slices ], [ @$expolygon ], ); @$intersection ? push @supported_slices, $expolygon : push @unsupported_slices, $expolygon; } my @supported_points = map @$_, @$_, @supported_slices; foreach my $expolygon (@unsupported_slices) { # look for the nearest point to this island among all # supported points my $contour = $expolygon->contour; my $support_point = $contour->first_point->nearest_point(\@supported_points) or next; my $anchor_point = $support_point->nearest_point([ @$contour ]); printf $fh qq{ \n}, map @$_, $support_point, $anchor_point; } } print $fh qq{ \n}; @previous_layer_slices = @current_layer_slices; } print $fh "\n"; close $fh; print "Done.\n" unless $params{quiet}; } sub make_skirt { my $self = shift; # prerequisites $_->make_perimeters for @{$self->objects}; $_->infill for @{$self->objects}; $_->generate_support_material for @{$self->objects}; return if $self->step_done(STEP_SKIRT); $self->set_step_started(STEP_SKIRT); # since this method must be idempotent, we clear skirt paths *before* # checking whether we need to generate them $self->skirt->clear; if (!$self->has_skirt) { $self->set_step_done(STEP_SKIRT); return; } $self->status_cb->(88, "Generating skirt"); # First off we need to decide how tall the skirt must be. # The skirt_height option from config is expressed in layers, but our # object might have different layer heights, so we need to find the print_z # of the highest layer involved. # Note that unless has_infinite_skirt() == true # the actual skirt might not reach this $skirt_height_z value since the print # order of objects on each layer is not guaranteed and will not generally # include the thickest object first. It is just guaranteed that a skirt is # prepended to the first 'n' layers (with 'n' = skirt_height). # $skirt_height_z in this case is the highest possible skirt height for safety. my $skirt_height_z = -1; foreach my $object (@{$self->objects}) { my $skirt_height = $self->has_infinite_skirt ? $object->layer_count : min($self->config->skirt_height, $object->layer_count); my $highest_layer = $object->get_layer($skirt_height - 1); $skirt_height_z = max($skirt_height_z, $highest_layer->print_z); } # collect points from all layers contained in skirt height my @points = (); foreach my $object (@{$self->objects}) { my @object_points = (); # get object layers up to $skirt_height_z foreach my $layer (@{$object->layers}) { last if $layer->print_z > $skirt_height_z; push @object_points, map @$_, map @$_, @{$layer->slices}; } # get support layers up to $skirt_height_z foreach my $layer (@{$object->support_layers}) { last if $layer->print_z > $skirt_height_z; push @object_points, map @{$_->polyline}, @{$layer->support_fills} if $layer->support_fills; push @object_points, map @{$_->polyline}, @{$layer->support_interface_fills} if $layer->support_interface_fills; } # repeat points for each object copy foreach my $copy (@{$object->_shifted_copies}) { my @copy_points = map $_->clone, @object_points; $_->translate(@$copy) for @copy_points; push @points, @copy_points; } } return if @points < 3; # at least three points required for a convex hull # find out convex hull my $convex_hull = convex_hull(\@points); my @extruded_length = (); # for each extruder # skirt may be printed on several layers, having distinct layer heights, # but loops must be aligned so can't vary width/spacing # TODO: use each extruder's own flow my $first_layer_height = $self->skirt_first_layer_height; my $flow = $self->skirt_flow; my $spacing = $flow->spacing; my $mm3_per_mm = $flow->mm3_per_mm; my @extruders_e_per_mm = (); my $extruder_idx = 0; my $skirts = $self->config->skirts; $skirts ||= 1 if $self->has_infinite_skirt; # draw outlines from outside to inside # loop while we have less skirts than required or any extruder hasn't reached the min length if any my $distance = scale max($self->config->skirt_distance, $self->config->brim_width); for (my $i = $skirts; $i > 0; $i--) { $distance += scale $spacing; my $loop = offset([$convex_hull], $distance, 1, JT_ROUND, scale(0.1))->[0]; my $eloop = Slic3r::ExtrusionLoop->new_from_paths( Slic3r::ExtrusionPath->new( polyline => Slic3r::Polygon->new(@$loop)->split_at_first_point, role => EXTR_ROLE_SKIRT, mm3_per_mm => $mm3_per_mm, # this will be overridden at G-code export time width => $flow->width, height => $first_layer_height, # this will be overridden at G-code export time ), ); $eloop->role(EXTRL_ROLE_SKIRT); $self->skirt->append($eloop); if ($self->config->min_skirt_length > 0) { $extruded_length[$extruder_idx] ||= 0; if (!$extruders_e_per_mm[$extruder_idx]) { my $config = Slic3r::Config::GCode->new; $config->apply_static($self->config); my $extruder = Slic3r::Extruder->new($extruder_idx, $config); $extruders_e_per_mm[$extruder_idx] = $extruder->e_per_mm($mm3_per_mm); } $extruded_length[$extruder_idx] += unscale $loop->length * $extruders_e_per_mm[$extruder_idx]; $i++ if defined first { ($extruded_length[$_] // 0) < $self->config->min_skirt_length } 0 .. $#{$self->extruders}; if ($extruded_length[$extruder_idx] >= $self->config->min_skirt_length) { if ($extruder_idx < $#{$self->extruders}) { $extruder_idx++; next; } } } } $self->skirt->reverse; $self->set_step_done(STEP_SKIRT); } sub make_brim { my $self = shift; # prerequisites $_->make_perimeters for @{$self->objects}; $_->infill for @{$self->objects}; $_->generate_support_material for @{$self->objects}; $self->make_skirt; $self->status_cb->(88, "Generating brim"); $self->_make_brim; } # Wrapper around the C++ Slic3r::Print::validate() # to produce a Perl exception without a hang-up on some Strawberry perls. sub validate { my $self = shift; my $err = $self->_validate; die $err . "\n" if (defined($err) && $err ne ''); } 1; Slic3r-1.3.0/lib/Slic3r/Print/000077500000000000000000000000001327442435500156645ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r/Print/GCode.pm000066400000000000000000001113121327442435500172020ustar00rootroot00000000000000package Slic3r::Print::GCode; use Moo; has 'print' => (is => 'ro', required => 1, handles => [qw(objects placeholder_parser config)]); has 'fh' => (is => 'ro', required => 1); has '_gcodegen' => (is => 'rw'); has '_cooling_buffer' => (is => 'rw'); has '_spiral_vase' => (is => 'rw'); has '_vibration_limit' => (is => 'rw'); has '_arc_fitting' => (is => 'rw'); has '_pressure_regulator' => (is => 'rw'); has '_skirt_done' => (is => 'rw', default => sub { {} }); # print_z => 1 has '_brim_done' => (is => 'rw'); has '_second_layer_things_done' => (is => 'rw'); has '_last_obj_copy' => (is => 'rw'); has '_autospeed' => (is => 'rw', default => sub { 0 }); # boolean use List::Util qw(first sum min max); use Slic3r::ExtrusionPath ':roles'; use Slic3r::Flow ':roles'; use Slic3r::Geometry qw(X Y scale unscale chained_path convex_hull); use Slic3r::Geometry::Clipper qw(JT_SQUARE union_ex offset); sub BUILD { my ($self) = @_; { # estimate the total number of layer changes # TODO: only do this when M73 is enabled my $layer_count; if ($self->config->complete_objects) { $layer_count = sum(map { $_->total_layer_count * @{$_->copies} } @{$self->objects}); } else { # if sequential printing is not enable, all copies of the same object share the same layer change command(s) $layer_count = sum(map { $_->total_layer_count } @{$self->objects}); } # set up our helper object: This is a C++ Slic3r::GCode instance. my $gcodegen = Slic3r::GCode->new; $self->_gcodegen($gcodegen); $gcodegen->set_placeholder_parser($self->placeholder_parser); $gcodegen->set_layer_count($layer_count); $gcodegen->set_enable_cooling_markers(1); $gcodegen->apply_print_config($self->config); $gcodegen->set_extruders($self->print->extruders); } $self->_cooling_buffer(Slic3r::GCode::CoolingBuffer->new($self->_gcodegen)); $self->_spiral_vase(Slic3r::GCode::SpiralVase->new($self->config)) if $self->config->spiral_vase; $self->_vibration_limit(Slic3r::GCode::VibrationLimit->new(config => $self->config)) if $self->config->vibration_limit != 0; $self->_arc_fitting(Slic3r::GCode::ArcFitting->new(config => $self->config)) if $self->config->gcode_arcs; $self->_pressure_regulator(Slic3r::GCode::PressureRegulator->new(config => $self->config)) if $self->config->pressure_advance > 0; } # Export a G-code for the complete print. sub export { my ($self) = @_; my $fh = $self->fh; my $gcodegen = $self->_gcodegen; # Write information on the generator. my @lt = localtime; printf $fh "; generated by Slic3r $Slic3r::VERSION on %04d-%02d-%02d at %02d:%02d:%02d\n\n", $lt[5] + 1900, $lt[4]+1, $lt[3], $lt[2], $lt[1], $lt[0]; # Write notes (content of all Settings tabs -> Notes) print $fh $gcodegen->notes; # Write some terse information on the slicing parameters. my $first_object = $self->objects->[0]; my $layer_height = $first_object->config->layer_height; for my $region_id (0..$#{$self->print->regions}) { my $region = $self->print->regions->[$region_id]; { my $flow = $region->flow(FLOW_ROLE_EXTERNAL_PERIMETER, $layer_height, 0, 0, -1, $first_object); my $vol_speed = $flow->mm3_per_mm * $region->config->get_abs_value('external_perimeter_speed'); $vol_speed = min($vol_speed, $self->config->max_volumetric_speed) if $self->config->max_volumetric_speed > 0; printf $fh "; external perimeters extrusion width = %.2fmm (%.2fmm^3/s)\n", $flow->width, $vol_speed; } { my $flow = $region->flow(FLOW_ROLE_PERIMETER, $layer_height, 0, 0, -1, $first_object); my $vol_speed = $flow->mm3_per_mm * $region->config->get_abs_value('perimeter_speed'); $vol_speed = min($vol_speed, $self->config->max_volumetric_speed) if $self->config->max_volumetric_speed > 0; printf $fh "; perimeters extrusion width = %.2fmm (%.2fmm^3/s)\n", $flow->width, $vol_speed; } { my $flow = $region->flow(FLOW_ROLE_INFILL, $layer_height, 0, 0, -1, $first_object); my $vol_speed = $flow->mm3_per_mm * $region->config->get_abs_value('infill_speed'); $vol_speed = min($vol_speed, $self->config->max_volumetric_speed) if $self->config->max_volumetric_speed > 0; printf $fh "; infill extrusion width = %.2fmm (%.2fmm^3/s)\n", $flow->width, $vol_speed; } { my $flow = $region->flow(FLOW_ROLE_SOLID_INFILL, $layer_height, 0, 0, -1, $first_object); my $vol_speed = $flow->mm3_per_mm * $region->config->get_abs_value('solid_infill_speed'); $vol_speed = min($vol_speed, $self->config->max_volumetric_speed) if $self->config->max_volumetric_speed > 0; printf $fh "; solid infill extrusion width = %.2fmm (%.2fmm^3/s)\n", $flow->width, $vol_speed; } { my $flow = $region->flow(FLOW_ROLE_TOP_SOLID_INFILL, $layer_height, 0, 0, -1, $first_object); my $vol_speed = $flow->mm3_per_mm * $region->config->get_abs_value('top_solid_infill_speed'); $vol_speed = min($vol_speed, $self->config->max_volumetric_speed) if $self->config->max_volumetric_speed > 0; printf $fh "; top infill extrusion width = %.2fmm (%.2fmm^3/s)\n", $flow->width, $vol_speed; } if ($self->print->has_support_material) { my $object0 = $self->objects->[0]; my $flow = $object0->support_material_flow; my $vol_speed = $flow->mm3_per_mm * $object0->config->get_abs_value('support_material_speed'); $vol_speed = min($vol_speed, $self->config->max_volumetric_speed) if $self->config->max_volumetric_speed > 0; printf $fh "; support material extrusion width = %.2fmm (%.2fmm^3/s)\n", $flow->width, $vol_speed; } printf $fh "; first layer extrusion width = %.2fmm (%.2fmm^3/s)\n", $region->flow(FLOW_ROLE_PERIMETER, $layer_height, 0, 1, -1, $self->objects->[0])->width if $region->config->first_layer_extrusion_width; print $fh "\n"; } # prepare the helper object for replacing placeholders in custom G-code and output filename $self->placeholder_parser->update_timestamp; # GCode sets this automatically whenever we call change_layer(), # but we need it for skirt/brim too $gcodegen->set_first_layer(1); # disable fan print $fh $gcodegen->writer->set_fan(0, 1) if $self->config->cooling && $self->config->disable_fan_first_layers; # set bed temperature if ($self->config->has_heatbed && (my $temp = $self->config->first_layer_bed_temperature) && $self->config->start_gcode !~ /M(?:190|140)/i) { printf $fh $gcodegen->writer->set_bed_temperature($temp, 1); } # set extruder(s) temperature before and after start G-code my $include_start_extruder_temp = $self->config->start_gcode !~ /M(?:109|104)/i; foreach my $start_gcode (@{ $self->config->start_filament_gcode }) { # process filament gcode in order $include_start_extruder_temp = $include_start_extruder_temp && ($start_gcode !~ /M(?:109|104)/i); } my $include_end_extruder_temp = $self->config->end_gcode !~ /M(?:109|104)/i; foreach my $end_gcode (@{ $self->config->end_filament_gcode }) { # process filament gcode in order $include_end_extruder_temp = $include_end_extruder_temp && ($end_gcode !~ /M(?:109|104)/i); } $self->_print_first_layer_temperature(0) if $include_start_extruder_temp; printf $fh "%s\n", Slic3r::ConditionalGCode::apply_math($gcodegen->placeholder_parser->process($self->config->start_gcode)); foreach my $start_gcode (@{ $self->config->start_filament_gcode }) { # process filament gcode in order printf $fh "%s\n", Slic3r::ConditionalGCode::apply_math($gcodegen->placeholder_parser->process($start_gcode)); } $self->_print_first_layer_temperature(1) if $include_start_extruder_temp; # set other general things print $fh $gcodegen->preamble; # initialize a motion planner for object-to-object travel moves if ($self->config->avoid_crossing_perimeters) { my $distance_from_objects = scale 1; # compute the offsetted convex hull for each object and repeat it for each copy. my @islands_p = (); foreach my $object (@{$self->objects}) { # discard objects only containing thin walls (offset would fail on an empty polygon) my @polygons = map $_->contour, map @{$_->slices}, @{$object->layers}; next if !@polygons; # translate convex hull for each object copy and append it to the islands array foreach my $copy (@{ $object->_shifted_copies }) { my @copy_islands_p = map $_->clone, @polygons; $_->translate(@$copy) for @copy_islands_p; push @islands_p, @copy_islands_p; } } $gcodegen->avoid_crossing_perimeters->init_external_mp(union_ex(\@islands_p)); } # calculate wiping points if needed if ($self->config->ooze_prevention && (my @extruders = @{$self->print->extruders}) > 1) { my @skirt_points = map @$_, map @$_, @{$self->print->skirt}; if (@skirt_points) { my $outer_skirt = convex_hull(\@skirt_points); my @skirts = (); foreach my $extruder_id (@extruders) { my $extruder_offset = $self->config->get_at('extruder_offset', $extruder_id); push @skirts, my $s = $outer_skirt->clone; $s->translate(-scale($extruder_offset->x), -scale($extruder_offset->y)); #) } my $convex_hull = convex_hull([ map @$_, @skirts ]); $gcodegen->ooze_prevention->set_enable(1); $gcodegen->ooze_prevention->set_standby_points( [ map @{$_->equally_spaced_points(scale 10)}, @{offset([$convex_hull], scale 3)} ] ); if (0) { require "Slic3r/SVG.pm"; Slic3r::SVG::output( "ooze_prevention.svg", red_polygons => \@skirts, polygons => [$outer_skirt], points => $gcodegen->ooze_prevention->standby_points, ); } } } # set initial extruder only after custom start G-code print $fh $gcodegen->set_extruder($self->print->extruders->[0]); # do all objects for each layer if ($self->config->complete_objects) { # print objects from the smallest to the tallest to avoid collisions # when moving onto next object starting point my @obj_idx = sort { $self->objects->[$a]->config->sequential_print_priority <=> $self->objects->[$b]->config->sequential_print_priority or $self->objects->[$a]->size->z <=> $self->objects->[$b]->size->z} 0..($self->print->object_count - 1); my $finished_objects = 0; for my $obj_idx (@obj_idx) { my $object = $self->objects->[$obj_idx]; for my $copy (@{ $self->objects->[$obj_idx]->_shifted_copies }) { # move to the origin position for the copy we're going to print. # this happens before Z goes down to layer 0 again, so that # no collision happens hopefully. if ($finished_objects > 0) { $gcodegen->set_origin(Slic3r::Pointf->new(map unscale $copy->[$_], X,Y)); $gcodegen->set_enable_cooling_markers(0); # we're not filtering these moves through CoolingBuffer $gcodegen->avoid_crossing_perimeters->set_use_external_mp_once(1); print $fh $gcodegen->retract; print $fh $gcodegen->travel_to( Slic3r::Point->new(0,0), EXTR_ROLE_NONE, 'move to origin position for next object', ); $gcodegen->set_enable_cooling_markers(1); # disable motion planner when traveling to first object point $gcodegen->avoid_crossing_perimeters->set_disable_once(1); } my @layers = sort { $a->print_z <=> $b->print_z } @{$object->layers}, @{$object->support_layers}; for my $layer (@layers) { # if we are printing the bottom layer of an object, and we have already finished # another one, set first layer temperatures. this happens before the Z move # is triggered, so machine has more time to reach such temperatures if ($layer->id == 0 && $finished_objects > 0) { printf $fh $gcodegen->writer->set_bed_temperature($self->config->first_layer_bed_temperature), if $self->config->first_layer_bed_temperature && $self->config->has_heatbed && $self->config->between_objects_gcode !~ /M(?:190|140)/i; $self->_print_first_layer_temperature(0) if $self->config->between_objects_gcode !~ /M(?:109|104)/i; printf $fh "%s\n", Slic3r::ConditionalGCode::apply_math($gcodegen->placeholder_parser->process($self->config->between_objects_gcode)); } $self->process_layer($layer, [$copy]); } $self->flush_filters; $finished_objects++; $self->_second_layer_things_done(0); } } } else { # order objects using a nearest neighbor search my @obj_idx = @{chained_path([ map Slic3r::Point->new(@{$_->_shifted_copies->[0]}), @{$self->objects} ])}; # sort layers by Z my %layers = (); # print_z => [ [layers], [layers], [layers] ] by obj_idx foreach my $obj_idx (0 .. ($self->print->object_count - 1)) { my $object = $self->objects->[$obj_idx]; foreach my $layer (@{$object->layers}, @{$object->support_layers}) { $layers{ $layer->print_z } ||= []; $layers{ $layer->print_z }[$obj_idx] ||= []; push @{$layers{ $layer->print_z }[$obj_idx]}, $layer; } } foreach my $print_z (sort { $a <=> $b } keys %layers) { foreach my $obj_idx (@obj_idx) { foreach my $layer (@{ $layers{$print_z}[$obj_idx] // [] }) { $self->process_layer($layer, $layer->object->_shifted_copies); } } } $self->flush_filters; } # write end commands to file print $fh $gcodegen->retract; # TODO: process this retract through PressureRegulator in order to discharge fully print $fh $gcodegen->writer->set_fan(0); foreach my $end_gcode (@{ $self->config->end_filament_gcode }) { # Process filament-specific gcode in extruder order. printf $fh "%s\n", Slic3r::ConditionalGCode::apply_math($gcodegen->placeholder_parser->process($end_gcode)); } printf $fh "%s\n", Slic3r::ConditionalGCode::apply_math($gcodegen->placeholder_parser->process($self->config->end_gcode)); $self->_print_off_temperature(0) if $include_end_extruder_temp; # set bed temperature if (($self->config->has_heatbed) && $self->config->end_gcode !~ /M(?:190|140)/i) { printf $fh $gcodegen->writer->set_bed_temperature(0, 0); } print $fh $gcodegen->writer->update_progress($gcodegen->layer_count, $gcodegen->layer_count, 1); # 100% print $fh $gcodegen->writer->postamble; # get filament stats $self->print->clear_filament_stats; $self->print->total_used_filament(0); $self->print->total_extruded_volume(0); $self->print->total_weight(0); $self->print->total_cost(0); foreach my $extruder (@{$gcodegen->writer->extruders}) { my $used_filament = $extruder->used_filament; my $extruded_volume = $extruder->extruded_volume; my $filament_weight = $extruded_volume * $extruder->filament_density / 1000; my $filament_cost = $filament_weight * ($extruder->filament_cost / 1000); $self->print->set_filament_stats($extruder->id, $used_filament); printf $fh "; filament used = %.1fmm (%.1fcm3)\n", $used_filament, $extruded_volume/1000; if ($filament_weight > 0) { $self->print->total_weight($self->print->total_weight + $filament_weight); printf $fh "; filament used = %.1fg\n", $filament_weight; if ($filament_cost > 0) { $self->print->total_cost($self->print->total_cost + $filament_cost); printf $fh "; filament cost = %.1f\n", $filament_cost; } } $self->print->total_used_filament($self->print->total_used_filament + $used_filament); $self->print->total_extruded_volume($self->print->total_extruded_volume + $extruded_volume); } printf $fh "; total filament cost = %.1f\n", $self->print->total_cost; # append full config print $fh "\n"; foreach my $config ($self->print->config, $self->print->default_object_config, $self->print->default_region_config) { foreach my $opt_key (sort @{$config->get_keys}) { next if $Slic3r::Config::Options->{$opt_key}{shortcut}; printf $fh "; %s = %s\n", $opt_key, $config->serialize($opt_key); } } } sub _print_first_layer_temperature { my ($self, $wait) = @_; for my $t (@{$self->print->extruders}) { my $temp = $self->config->get_at('first_layer_temperature', $t); $temp += $self->config->standby_temperature_delta if $self->config->ooze_prevention; printf {$self->fh} $self->_gcodegen->writer->set_temperature($temp, $wait, $t) if $temp > 0; } } sub _print_off_temperature { my ($self, $wait) = @_; for my $t (@{$self->print->extruders}) { printf {$self->fh} $self->_gcodegen->writer->set_temperature(0, $wait, $t) } } # Called per object's layer. # First a $gcode string is collected, # then filtered and finally written to a file $fh. sub process_layer { my $self = shift; my ($layer, $object_copies) = @_; my $gcode = ""; my $object = $layer->object; $self->_gcodegen->config->apply_static($object->config); # check whether we're going to apply spiralvase logic if (defined $self->_spiral_vase) { $self->_spiral_vase->set_enable( $layer->id > 0 && ($self->print->config->skirts == 0 || ($layer->id >= $self->print->config->skirt_height && !$self->print->has_infinite_skirt)) && !defined(first { $_->region->config->bottom_solid_layers > $layer->id } @{$layer->regions}) && !defined(first { $_->perimeters->items_count > 1 } @{$layer->regions}) && !defined(first { $_->fills->items_count > 0 } @{$layer->regions}) ); } # if we're going to apply spiralvase to this layer, disable loop clipping $self->_gcodegen->set_enable_loop_clipping(!defined $self->_spiral_vase || !$self->_spiral_vase->enable); # initialize autospeed { # get the minimum cross-section used in the layer my @mm3_per_mm = (); foreach my $region_id (0..$#{$self->print->regions}) { my $region = $self->print->get_region($region_id); my $layerm = $layer->region($region_id); if ($region->config->get_abs_value('perimeter_speed') == 0 || $region->config->get_abs_value('small_perimeter_speed') == 0 || $region->config->get_abs_value('external_perimeter_speed') == 0 || $region->config->get_abs_value('bridge_speed') == 0) { push @mm3_per_mm, $layerm->perimeters->min_mm3_per_mm; } if ($region->config->get_abs_value('infill_speed') == 0 || $region->config->get_abs_value('solid_infill_speed') == 0 || $region->config->get_abs_value('top_solid_infill_speed') == 0 || $region->config->get_abs_value('bridge_speed') == 0 || $region->config->get_abs_value('gap_fill_speed') == 0) { push @mm3_per_mm, $layerm->fills->min_mm3_per_mm; } } if ($layer->isa('Slic3r::Layer::Support')) { if ($object->config->get_abs_value('support_material_speed') == 0 || $object->config->get_abs_value('support_material_interface_speed') == 0) { push @mm3_per_mm, $layer->support_fills->min_mm3_per_mm; push @mm3_per_mm, $layer->support_interface_fills->min_mm3_per_mm; } } # ignore too thin segments @mm3_per_mm = grep $_ > 0.01, @mm3_per_mm; if (@mm3_per_mm) { my $min_mm3_per_mm = min(@mm3_per_mm); # In order to honor max_print_speed we need to find a target volumetric # speed that we can use throughout the print. So we define this target # volumetric speed as the volumetric speed produced by printing the # smallest cross-section at the maximum speed: any larger cross-section # will need slower feedrates. my $volumetric_speed = $min_mm3_per_mm * $self->config->max_print_speed; # limit such volumetric speed with max_volumetric_speed if set if ($self->config->max_volumetric_speed > 0) { $volumetric_speed = min( $volumetric_speed, $self->config->max_volumetric_speed, ); } $self->_gcodegen->set_volumetric_speed($volumetric_speed); } } if (!$self->_second_layer_things_done && $layer->id == 1) { for my $extruder (@{$self->_gcodegen->writer->extruders}) { my $temperature = $self->config->get_at('temperature', $extruder->id); $gcode .= $self->_gcodegen->writer->set_temperature($temperature, 0, $extruder->id) if $temperature && $temperature != $self->config->get_at('first_layer_temperature', $extruder->id); } $gcode .= $self->_gcodegen->writer->set_bed_temperature($self->print->config->bed_temperature) if $self->config->has_heatbed && $self->print->config->first_layer_bed_temperature && $self->print->config->bed_temperature != $self->print->config->first_layer_bed_temperature; $self->_second_layer_things_done(1); } # set new layer - this will change Z and force a retraction if retract_layer_change is enabled if ($self->print->config->before_layer_gcode) { my $pp = $self->_gcodegen->placeholder_parser->clone; $pp->set('layer_num' => $self->_gcodegen->layer_index + 1); $pp->set('layer_z' => $layer->print_z); $pp->set('current_retraction' => $self->_gcodegen->writer->extruder->retracted); $gcode .= Slic3r::ConditionalGCode::apply_math($pp->process($self->print->config->before_layer_gcode) . "\n"); } $gcode .= $self->_gcodegen->change_layer($layer->as_layer); # this will increase $self->_gcodegen->layer_index if ($self->print->config->layer_gcode) { my $pp = $self->_gcodegen->placeholder_parser->clone; $pp->set('layer_num' => $self->_gcodegen->layer_index); $pp->set('layer_z' => $layer->print_z); $pp->set('current_retraction' => $self->_gcodegen->writer->extruder->retracted); $gcode .= Slic3r::ConditionalGCode::apply_math($pp->process($self->print->config->layer_gcode) . "\n"); } # extrude skirt along raft layers and normal object layers # (not along interlaced support material layers) if (((values %{$self->_skirt_done}) < $self->print->config->skirt_height || $self->print->has_infinite_skirt) && !$self->_skirt_done->{$layer->print_z} && (!$layer->isa('Slic3r::Layer::Support') || $layer->id < $object->config->raft_layers)) { $self->_gcodegen->set_origin(Slic3r::Pointf->new(0,0)); $self->_gcodegen->avoid_crossing_perimeters->set_use_external_mp(1); my @extruder_ids = map { $_->id } @{$self->_gcodegen->writer->extruders}; $gcode .= $self->_gcodegen->set_extruder($extruder_ids[0]); # skip skirt if we have a large brim if ($layer->id < $self->print->config->skirt_height || $self->print->has_infinite_skirt) { my $skirt_flow = $self->print->skirt_flow; # distribute skirt loops across all extruders my @skirt_loops = @{$self->print->skirt}; for my $i (0 .. $#skirt_loops) { # when printing layers > 0 ignore 'min_skirt_length' and # just use the 'skirts' setting; also just use the current extruder last if ($layer->id > 0) && ($i >= $self->print->config->skirts); my $extruder_id = $extruder_ids[($i/@extruder_ids) % @extruder_ids]; $gcode .= $self->_gcodegen->set_extruder($extruder_id) if $layer->id == 0; # adjust flow according to this layer's layer height my $loop = $skirt_loops[$i]->clone; { my $layer_skirt_flow = $skirt_flow->clone; $layer_skirt_flow->set_height($layer->height); my $mm3_per_mm = $layer_skirt_flow->mm3_per_mm; foreach my $path (@$loop) { $path->height($layer->height); $path->mm3_per_mm($mm3_per_mm); } } $gcode .= $self->_gcodegen->extrude_loop($loop, 'skirt', $object->config->support_material_speed); } } $self->_skirt_done->{$layer->print_z} = 1; $self->_gcodegen->avoid_crossing_perimeters->set_use_external_mp(0); # allow a straight travel move to the first object point if this is the first layer # (but don't in next layers) if ($layer->id == 0) { $self->_gcodegen->avoid_crossing_perimeters->set_disable_once(1); } } # extrude brim if (!$self->_brim_done) { $gcode .= $self->_gcodegen->set_extruder($self->print->brim_extruder-1); $self->_gcodegen->set_origin(Slic3r::Pointf->new(0,0)); $self->_gcodegen->avoid_crossing_perimeters->set_use_external_mp(1); $gcode .= $self->_gcodegen->extrude($_, 'brim', $object->config->support_material_speed) for @{$self->print->brim}; $self->_brim_done(1); $self->_gcodegen->avoid_crossing_perimeters->set_use_external_mp(0); # allow a straight travel move to the first object point $self->_gcodegen->avoid_crossing_perimeters->set_disable_once(1); } for my $copy (@$object_copies) { # when starting a new object, use the external motion planner for the first travel move $self->_gcodegen->avoid_crossing_perimeters->set_use_external_mp_once(1) if ($self->_last_obj_copy // '') ne "$copy"; $self->_last_obj_copy("$copy"); $self->_gcodegen->set_origin(Slic3r::Pointf->new(map unscale $copy->[$_], X,Y)); # extrude support material before other things because it might use a lower Z # and also because we avoid travelling on other things when printing it if ($layer->isa('Slic3r::Layer::Support')) { if ($layer->support_interface_fills->count > 0) { $gcode .= $self->_gcodegen->set_extruder($object->config->support_material_interface_extruder-1); $gcode .= $self->_gcodegen->extrude_path($_, 'support material interface', $object->config->get_abs_value('support_material_interface_speed')) for @{$layer->support_interface_fills->chained_path_from($self->_gcodegen->last_pos, 0)}; } if ($layer->support_fills->count > 0) { $gcode .= $self->_gcodegen->set_extruder($object->config->support_material_extruder-1); $gcode .= $self->_gcodegen->extrude_path($_, 'support material', $object->config->get_abs_value('support_material_speed')) for @{$layer->support_fills->chained_path_from($self->_gcodegen->last_pos, 0)}; } } # We now define a strategy for building perimeters and fills. The separation # between regions doesn't matter in terms of printing order, as we follow # another logic instead: # - we group all extrusions by extruder so that we minimize toolchanges # - we start from the last used extruder # - for each extruder, we group extrusions by island # - for each island, we extrude perimeters first, unless user set the infill_first # option # (Still, we have to keep track of regions because we need to apply their config) # group extrusions by extruder and then by island my %by_extruder = (); # extruder_id => [ { perimeters => \@perimeters, infill => \@infill } ] # cache bounding boxes of layer slices my @layer_slices_bb = map $_->contour->bounding_box, @{$layer->slices}; my $point_inside_surface = sub { my ($i, $point) = @_; my $bbox = $layer_slices_bb[$i]; return $layer_slices_bb[$i]->contains_point($point) && $layer->slices->[$i]->contour->contains_point($point); }; my $n_slices = $layer->slices->count - 1; foreach my $region_id (0..($self->print->region_count-1)) { my $layerm = $layer->regions->[$region_id] or next; my $region = $self->print->get_region($region_id); # process perimeters { my $extruder_id = $region->config->perimeter_extruder-1; foreach my $perimeter_coll (@{$layerm->perimeters}) { next if $perimeter_coll->empty; # this shouldn't happen but first_point() would fail # init by_extruder item only if we actually use the extruder $by_extruder{$extruder_id} //= []; # $perimeter_coll is an ExtrusionPath::Collection object representing a single slice for my $i (0 .. $n_slices) { if ( # $perimeter_coll->first_point does not fit inside any slice $i == $n_slices # $perimeter_coll->first_point fits inside ith slice || $point_inside_surface->($i, $perimeter_coll->first_point)) { $by_extruder{$extruder_id}[$i] //= { perimeters => {} }; $by_extruder{$extruder_id}[$i]{perimeters}{$region_id} //= []; push @{ $by_extruder{$extruder_id}[$i]{perimeters}{$region_id} }, @$perimeter_coll; last; } } } } # process infill # $layerm->fills is a collection of ExtrusionPath::Collection objects, each one containing # the ExtrusionPath objects of a certain infill "group" (also called "surface" # throughout the code). We can redefine the order of such Collections but we have to # do each one completely at once. foreach my $fill (@{$layerm->fills}) { next if $fill->empty; # this shouldn't happen but first_point() would fail # init by_extruder item only if we actually use the extruder my $extruder_id = $fill->[0]->is_solid_infill ? $region->config->solid_infill_extruder-1 : $region->config->infill_extruder-1; $by_extruder{$extruder_id} //= []; # $fill is an ExtrusionPath::Collection object for my $i (0 .. $n_slices) { if ($i == $n_slices || $point_inside_surface->($i, $fill->first_point)) { $by_extruder{$extruder_id}[$i] //= { infill => {} }; $by_extruder{$extruder_id}[$i]{infill}{$region_id} //= []; push @{ $by_extruder{$extruder_id}[$i]{infill}{$region_id} }, $fill; last; } } } } # tweak extruder ordering to save toolchanges my @extruders = sort { $a <=> $b } keys %by_extruder; if (@extruders > 1) { my $last_extruder_id = $self->_gcodegen->writer->extruder->id; if (exists $by_extruder{$last_extruder_id}) { @extruders = ( $last_extruder_id, grep $_ != $last_extruder_id, @extruders, ); } } foreach my $extruder_id (@extruders) { $gcode .= $self->_gcodegen->set_extruder($extruder_id); foreach my $island (@{ $by_extruder{$extruder_id} }) { if ($self->print->config->infill_first) { $gcode .= $self->_extrude_infill($island->{infill} // {}); $gcode .= $self->_extrude_perimeters($island->{perimeters} // {}); } else { $gcode .= $self->_extrude_perimeters($island->{perimeters} // {}); $gcode .= $self->_extrude_infill($island->{infill} // {}); } } } } # apply spiral vase post-processing if this layer contains suitable geometry # (we must feed all the G-code into the post-processor, including the first # bottom non-spiral layers otherwise it will mess with positions) # we apply spiral vase at this stage because it requires a full layer $gcode = $self->_spiral_vase->process_layer($gcode) if defined $self->_spiral_vase; # apply cooling logic; this may alter speeds $gcode = $self->_cooling_buffer->append( $gcode, $layer->object->ptr . ref($layer), # differentiate $obj_id between normal layers and support layers $layer->id, $layer->print_z, ) if defined $self->_cooling_buffer; print {$self->fh} $self->filter($gcode); } # Extrude perimeters: Decide where to put seams (hide or align seams). sub _extrude_perimeters { my ($self, $entities_by_region) = @_; my $gcode = ""; foreach my $region_id (sort keys %$entities_by_region) { $self->_gcodegen->config->apply_static($self->print->get_region($region_id)->config); $gcode .= $self->_gcodegen->extrude($_, 'perimeter', -1) for @{ $entities_by_region->{$region_id} }; } return $gcode; } # Chain the paths hierarchically by a greedy algorithm to minimize a travel distance. sub _extrude_infill { my ($self, $entities_by_region) = @_; my $gcode = ""; foreach my $region_id (sort keys %$entities_by_region) { $self->_gcodegen->config->apply_static($self->print->get_region($region_id)->config); my $collection = Slic3r::ExtrusionPath::Collection->new(@{ $entities_by_region->{$region_id} }); for my $fill (@{$collection->chained_path_from($self->_gcodegen->last_pos, 0)}) { if ($fill->isa('Slic3r::ExtrusionPath::Collection')) { $gcode .= $self->_gcodegen->extrude($_, 'infill', -1) for @{$fill->chained_path_from($self->_gcodegen->last_pos, 0)}; } else { $gcode .= $self->_gcodegen->extrude($fill, 'infill', -1) ; } } } return $gcode; } sub flush_filters { my ($self) = @_; print {$self->fh} $self->filter($self->_cooling_buffer->flush, 1); } sub filter { my ($self, $gcode, $flush) = @_; # apply vibration limit if enabled; # this injects pauses according to time (thus depends on actual speeds) $gcode = $self->_vibration_limit->process($gcode) if defined $self->_vibration_limit; # apply pressure regulation if enabled; # this depends on actual speeds $gcode = $self->_pressure_regulator->process($gcode, $flush) if defined $self->_pressure_regulator; # apply arc fitting if enabled; # this does not depend on speeds but changes G1 XY commands into G2/G2 IJ $gcode = $self->_arc_fitting->process($gcode) if defined $self->_arc_fitting; return $gcode; } 1; Slic3r-1.3.0/lib/Slic3r/Print/Object.pm000066400000000000000000000746151327442435500174450ustar00rootroot00000000000000package Slic3r::Print::Object; # extends c++ class Slic3r::PrintObject (Print.xsp) use strict; use warnings; use List::Util qw(min max sum first any); use Slic3r::Flow ':roles'; use Slic3r::Geometry qw(X Y Z PI scale unscale chained_path epsilon); use Slic3r::Geometry::Clipper qw(diff diff_ex intersection intersection_ex union union_ex offset offset_ex offset2 offset2_ex intersection_ppl CLIPPER_OFFSET_SCALE JT_MITER); use Slic3r::Print::State ':steps'; use Slic3r::Surface ':types'; # TODO: lazy sub fill_maker { my $self = shift; return Slic3r::Fill->new(bounding_box => $self->bounding_box); } sub region_volumes { my $self = shift; return [ map $self->get_region_volumes($_), 0..($self->region_count - 1) ]; } sub layers { my $self = shift; return [ map $self->get_layer($_), 0..($self->layer_count - 1) ]; } sub support_layers { my $self = shift; return [ map $self->get_support_layer($_), 0..($self->support_layer_count - 1) ]; } # 1) Decides Z positions of the layers, # 2) Initializes layers and their regions # 3) Slices the object meshes # 4) Slices the modifier meshes and reclassifies the slices of the object meshes by the slices of the modifier meshes # 5) Applies size compensation (offsets the slices in XY plane) # 6) Replaces bad slices by the slices reconstructed from the upper/lower layer # Resulting expolygons of layer regions are marked as Internal. # # this should be idempotent sub slice { my $self = shift; return if $self->step_done(STEP_SLICE); $self->set_step_started(STEP_SLICE); $self->print->status_cb->(10, "Processing triangulated mesh"); $self->_slice; # detect slicing errors my $warning_thrown = 0; for my $i (0 .. ($self->layer_count - 1)) { my $layer = $self->get_layer($i); next unless $layer->slicing_errors; if (!$warning_thrown) { warn "The model has overlapping or self-intersecting facets. I tried to repair it, " . "however you might want to check the results or repair the input file and retry.\n"; $warning_thrown = 1; } # try to repair the layer surfaces by merging all contours and all holes from # neighbor layers Slic3r::debugf "Attempting to repair layer %d\n", $i; foreach my $region_id (0 .. ($layer->region_count - 1)) { my $layerm = $layer->region($region_id); my (@upper_surfaces, @lower_surfaces); for (my $j = $i+1; $j < $self->layer_count; $j++) { if (!$self->get_layer($j)->slicing_errors) { @upper_surfaces = @{$self->get_layer($j)->region($region_id)->slices}; last; } } for (my $j = $i-1; $j >= 0; $j--) { if (!$self->get_layer($j)->slicing_errors) { @lower_surfaces = @{$self->get_layer($j)->region($region_id)->slices}; last; } } my $union = union_ex([ map $_->expolygon->contour, @upper_surfaces, @lower_surfaces, ]); my $diff = diff_ex( [ map @$_, @$union ], [ map @{$_->expolygon->holes}, @upper_surfaces, @lower_surfaces, ], ); $layerm->slices->clear; $layerm->slices->append($_) for map Slic3r::Surface->new (expolygon => $_, surface_type => S_TYPE_INTERNAL), @$diff; } # update layer slices after repairing the single regions $layer->make_slices; } # remove empty layers from bottom while (@{$self->layers} && !@{$self->get_layer(0)->slices}) { $self->delete_layer(0); for (my $i = 0; $i <= $#{$self->layers}; $i++) { $self->get_layer($i)->set_id( $self->get_layer($i)->id-1 ); } } # simplify slices if required if ($self->print->config->resolution) { $self->_simplify_slices(scale($self->print->config->resolution)); } die "No layers were detected. You might want to repair your STL file(s) or check their size or thickness and retry.\n" if !@{$self->layers}; $self->set_typed_slices(0); $self->set_step_done(STEP_SLICE); } sub make_perimeters { my ($self) = @_; return if $self->step_done(STEP_PERIMETERS); # Temporary workaround for detect_surfaces_type() not being idempotent (see #3764). # We can remove this when idempotence is restored. This make_perimeters() method # will just call merge_slices() to undo the typed slices and invalidate posDetectSurfaces. if ($self->typed_slices) { $self->invalidate_step(STEP_SLICE); } # prerequisites $self->slice; $self->_make_perimeters; } # This will assign a type (top/bottom/internal) to $layerm->slices # and transform $layerm->fill_surfaces from expolygon # to typed top/bottom/internal surfaces; sub detect_surfaces_type { my ($self) = @_; # prerequisites $self->slice; $self->_detect_surfaces_type; } sub prepare_infill { my ($self) = @_; return if $self->step_done(STEP_PREPARE_INFILL); # This prepare_infill() is not really idempotent. # TODO: It should clear and regenerate fill_surfaces at every run # instead of modifying it in place. $self->invalidate_step(STEP_PERIMETERS); $self->make_perimeters; # Do this after invalidating STEP_PERIMETERS because that would re-invalidate STEP_PREPARE_INFILL $self->set_step_started(STEP_PREPARE_INFILL); # prerequisites $self->detect_surfaces_type; $self->print->status_cb->(30, "Preparing infill"); # decide what surfaces are to be filled $_->prepare_fill_surfaces for map @{$_->regions}, @{$self->layers}; # this will detect bridges and reverse bridges # and rearrange top/bottom/internal surfaces $self->process_external_surfaces; # detect which fill surfaces are near external layers # they will be split in internal and internal-solid surfaces $self->discover_horizontal_shells; $self->clip_fill_surfaces; # the following step needs to be done before combination because it may need # to remove only half of the combined infill $self->bridge_over_infill; # combine fill surfaces to honor the "infill every N layers" option $self->combine_infill; $self->set_step_done(STEP_PREPARE_INFILL); } sub infill { my ($self) = @_; # prerequisites $self->prepare_infill; $self->_infill; } sub generate_support_material { my $self = shift; # prerequisites $self->slice; return if $self->step_done(STEP_SUPPORTMATERIAL); $self->set_step_started(STEP_SUPPORTMATERIAL); $self->clear_support_layers; if ((!$self->config->support_material && $self->config->raft_layers == 0 && $self->config->support_material_enforce_layers == 0) || scalar(@{$self->layers}) < 2 ) { $self->set_step_done(STEP_SUPPORTMATERIAL); return; } $self->print->status_cb->(85, "Generating support material"); $self->_support_material->generate($self); $self->set_step_done(STEP_SUPPORTMATERIAL); my $stats = sprintf "Weight: %.1fg, Cost: %.1f" , $self->print->total_weight, $self->print->total_cost; $self->print->status_cb->(85, $stats); } sub _support_material { my ($self) = @_; my $first_layer_flow = Slic3r::Flow->new_from_width( width => ($self->print->config->first_layer_extrusion_width || $self->config->support_material_extrusion_width), role => FLOW_ROLE_SUPPORT_MATERIAL, nozzle_diameter => $self->print->config->nozzle_diameter->[ $self->config->support_material_extruder-1 ] // $self->print->config->nozzle_diameter->[0], layer_height => $self->config->get_abs_value('first_layer_height'), bridge_flow_ratio => 0, ); return Slic3r::Print::SupportMaterial->new( print_config => $self->print->config, object_config => $self->config, first_layer_flow => $first_layer_flow, flow => $self->support_material_flow, interface_flow => $self->support_material_flow(FLOW_ROLE_SUPPORT_MATERIAL_INTERFACE), ); } # Idempotence of this method is guaranteed by the fact that we don't remove things from # fill_surfaces but we only turn them into VOID surfaces, thus preserving the boundaries. sub clip_fill_surfaces { my $self = shift; return unless $self->config->infill_only_where_needed && any { $_->config->fill_density > 0 } @{$self->print->regions}; # We only want infill under ceilings; this is almost like an # internal support material. # proceed top-down skipping bottom layer my $upper_internal = []; for my $layer_id (reverse 1..($self->layer_count - 1)) { my $layer = $self->get_layer($layer_id); my $lower_layer = $self->get_layer($layer_id-1); # detect things that we need to support my $overhangs = []; # Polygons # we need to support any solid surface push @$overhangs, map $_->p, grep $_->is_solid, map @{$_->fill_surfaces}, @{$layer->regions}; # we also need to support perimeters when there's at least one full # unsupported loop { # get perimeters area as the difference between slices and fill_surfaces my $perimeters = diff( [ map @$_, @{$layer->slices} ], [ map $_->p, map @{$_->fill_surfaces}, @{$layer->regions} ], ); # only consider the area that is not supported by lower perimeters $perimeters = intersection( $perimeters, [ map $_->p, map @{$_->fill_surfaces}, @{$lower_layer->regions} ], 1, ); # only consider perimeter areas that are at least one extrusion width thick my $pw = min(map $_->flow(FLOW_ROLE_PERIMETER)->scaled_width, @{$layer->regions}); $perimeters = offset2($perimeters, -$pw, +$pw); # append such thick perimeters to the areas that need support push @$overhangs, @$perimeters; } # find new internal infill $upper_internal = my $new_internal = intersection( [ @$overhangs, @$upper_internal, ], [ # our current internal fill boundaries map $_->p, grep $_->surface_type == S_TYPE_INTERNAL || $_->surface_type == S_TYPE_INTERNALVOID, map @{$_->fill_surfaces}, @{$lower_layer->regions} ], ); # apply new internal infill to regions foreach my $layerm (@{$lower_layer->regions}) { next if $layerm->region->config->fill_density == 0; my (@internal, @other) = (); foreach my $surface (map $_->clone, @{$layerm->fill_surfaces}) { if ($surface->surface_type == S_TYPE_INTERNAL || $surface->surface_type == S_TYPE_INTERNALVOID) { push @internal, $surface; } else { push @other, $surface; } } my @new = map Slic3r::Surface->new( expolygon => $_, surface_type => S_TYPE_INTERNAL, ), @{intersection_ex( [ map $_->p, @internal ], $new_internal, 1, )}; push @other, map Slic3r::Surface->new( expolygon => $_, surface_type => S_TYPE_INTERNALVOID, ), @{diff_ex( [ map $_->p, @internal ], $new_internal, 1, )}; # If there are voids it means that our internal infill is not adjacent to # perimeters. In this case it would be nice to add a loop around infill to # make it more robust and nicer. TODO. $layerm->fill_surfaces->clear; $layerm->fill_surfaces->append($_) for (@new, @other); } } } sub discover_horizontal_shells { my $self = shift; Slic3r::debugf "==> DISCOVERING HORIZONTAL SHELLS\n"; for my $region_id (0 .. ($self->print->region_count-1)) { for (my $i = 0; $i < $self->layer_count; $i++) { my $layerm = $self->get_layer($i)->regions->[$region_id]; if ($layerm->region->config->solid_infill_every_layers && $layerm->region->config->fill_density > 0 && ($i % $layerm->region->config->solid_infill_every_layers) == 0) { my $type = $layerm->region->config->fill_density == 100 ? S_TYPE_INTERNALSOLID : S_TYPE_INTERNALBRIDGE; $_->surface_type($type) for @{$layerm->fill_surfaces->filter_by_type(S_TYPE_INTERNAL)}; } EXTERNAL: foreach my $type (S_TYPE_TOP, S_TYPE_BOTTOM, S_TYPE_BOTTOMBRIDGE) { # find slices of current type for current layer # use slices instead of fill_surfaces because they also include the perimeter area # which needs to be propagated in shells; we need to grow slices like we did for # fill_surfaces though. Using both ungrown slices and grown fill_surfaces will # not work in some situations, as there won't be any grown region in the perimeter # area (this was seen in a model where the top layer had one extra perimeter, thus # its fill_surfaces were thinner than the lower layer's infill), however it's the best # solution so far. Growing the external slices by EXTERNAL_INFILL_MARGIN will put # too much solid infill inside nearly-vertical slopes. my $solid = [ (map $_->p, @{$layerm->slices->filter_by_type($type)}), (map $_->p, @{$layerm->fill_surfaces->filter_by_type($type)}), ]; next if !@$solid; Slic3r::debugf "Layer %d has %s surfaces\n", $i, ($type == S_TYPE_TOP) ? 'top' : 'bottom'; my $solid_layers = ($type == S_TYPE_TOP) ? $layerm->region->config->top_solid_layers : $layerm->region->config->bottom_solid_layers; NEIGHBOR: for (my $n = ($type == S_TYPE_TOP) ? $i-1 : $i+1; abs($n - $i) <= $solid_layers-1; ($type == S_TYPE_TOP) ? $n-- : $n++) { next if $n < 0 || $n >= $self->layer_count; Slic3r::debugf " looking for neighbors on layer %d...\n", $n; my $neighbor_layerm = $self->get_layer($n)->regions->[$region_id]; my $neighbor_fill_surfaces = $neighbor_layerm->fill_surfaces; my @neighbor_fill_surfaces = map $_->clone, @$neighbor_fill_surfaces; # clone because we will use these surfaces even after clearing the collection # find intersection between neighbor and current layer's surfaces # intersections have contours and holes my $new_internal_solid = intersection( $solid, [ map $_->p, grep { ($_->surface_type == S_TYPE_INTERNAL) || ($_->surface_type == S_TYPE_INTERNALSOLID) } @neighbor_fill_surfaces ], 1, ); if (!@$new_internal_solid) { # No internal solid needed on this layer. In order to decide whether to continue # searching on the next neighbor (thus enforcing the configured number of solid # layers, use different strategies according to configured infill density: if ($layerm->region->config->fill_density == 0) { # If user expects the object to be void (for example a hollow sloping vase), # don't continue the search. In this case, we only generate the external solid # shell if the object would otherwise show a hole (gap between perimeters of # the two layers), and internal solid shells are a subset of the shells found # on each previous layer. next EXTERNAL; } else { # If we have internal infill, we can generate internal solid shells freely. next NEIGHBOR; } } if ($layerm->region->config->fill_density == 0) { # if we're printing a hollow object we discard any solid shell thinner # than a perimeter width, since it's probably just crossing a sloping wall # and it's not wanted in a hollow print even if it would make sense when # obeying the solid shell count option strictly (DWIM!) my $margin = $neighbor_layerm->flow(FLOW_ROLE_EXTERNAL_PERIMETER)->scaled_width; my $too_narrow = diff( $new_internal_solid, offset2($new_internal_solid, -$margin, +$margin, CLIPPER_OFFSET_SCALE, JT_MITER, 5), 1, ); $new_internal_solid = $solid = diff( $new_internal_solid, $too_narrow, ) if @$too_narrow; } # make sure the new internal solid is wide enough, as it might get collapsed # when spacing is added in Fill.pm { my $margin = 3 * $layerm->flow(FLOW_ROLE_SOLID_INFILL)->scaled_width; # require at least this size # we use a higher miterLimit here to handle areas with acute angles # in those cases, the default miterLimit would cut the corner and we'd # get a triangle in $too_narrow; if we grow it below then the shell # would have a different shape from the external surface and we'd still # have the same angle, so the next shell would be grown even more and so on. my $too_narrow = diff( $new_internal_solid, offset2($new_internal_solid, -$margin, +$margin, CLIPPER_OFFSET_SCALE, JT_MITER, 5), 1, ); if (@$too_narrow) { # grow the collapsing parts and add the extra area to the neighbor layer # as well as to our original surfaces so that we support this # additional area in the next shell too # make sure our grown surfaces don't exceed the fill area my @grown = @{intersection( offset($too_narrow, +$margin), # Discard bridges as they are grown for anchoring and we can't # remove such anchors. (This may happen when a bridge is being # anchored onto a wall where little space remains after the bridge # is grown, and that little space is an internal solid shell so # it triggers this too_narrow logic.) [ map $_->p, grep { $_->is_internal && !$_->is_bridge } @neighbor_fill_surfaces ], )}; $new_internal_solid = $solid = [ @grown, @$new_internal_solid ]; } } # internal-solid are the union of the existing internal-solid surfaces # and new ones my $internal_solid = union_ex([ ( map $_->p, grep $_->surface_type == S_TYPE_INTERNALSOLID, @neighbor_fill_surfaces ), @$new_internal_solid, ]); # subtract intersections from layer surfaces to get resulting internal surfaces my $internal = diff_ex( [ map $_->p, grep $_->surface_type == S_TYPE_INTERNAL, @neighbor_fill_surfaces ], [ map @$_, @$internal_solid ], 1, ); Slic3r::debugf " %d internal-solid and %d internal surfaces found\n", scalar(@$internal_solid), scalar(@$internal); # assign resulting internal surfaces to layer $neighbor_fill_surfaces->clear; $neighbor_fill_surfaces->append($_) for map Slic3r::Surface->new(expolygon => $_, surface_type => S_TYPE_INTERNAL), @$internal; # assign new internal-solid surfaces to layer $neighbor_fill_surfaces->append($_) for map Slic3r::Surface->new(expolygon => $_, surface_type => S_TYPE_INTERNALSOLID), @$internal_solid; # assign top and bottom surfaces to layer foreach my $s (@{Slic3r::Surface::Collection->new(grep { ($_->surface_type == S_TYPE_TOP) || $_->is_bottom } @neighbor_fill_surfaces)->group}) { my $solid_surfaces = diff_ex( [ map $_->p, @$s ], [ map @$_, @$internal_solid, @$internal ], 1, ); $neighbor_fill_surfaces->append($_) for map $s->[0]->clone(expolygon => $_), @$solid_surfaces; } } } } } } # combine fill surfaces across layers # Idempotence of this method is guaranteed by the fact that we don't remove things from # fill_surfaces but we only turn them into VOID surfaces, thus preserving the boundaries. sub combine_infill { my $self = shift; # define the type used for voids my %voidtype = ( &S_TYPE_INTERNAL() => S_TYPE_INTERNALVOID, ); # work on each region separately for my $region_id (0 .. ($self->print->region_count-1)) { my $region = $self->print->get_region($region_id); my $every = $region->config->infill_every_layers; next unless $every > 1 && $region->config->fill_density > 0; # limit the number of combined layers to the maximum height allowed by this regions' nozzle my $nozzle_diameter = min( $self->print->config->get_at('nozzle_diameter', $region->config->infill_extruder-1), $self->print->config->get_at('nozzle_diameter', $region->config->solid_infill_extruder-1), ); # define the combinations my %combine = (); # layer_idx => number of additional combined lower layers { my $current_height = my $layers = 0; for my $layer_idx (0 .. ($self->layer_count-1)) { my $layer = $self->get_layer($layer_idx); next if $layer->id == 0; # skip first print layer (which may not be first layer in array because of raft) my $height = $layer->height; # check whether the combination of this layer with the lower layers' buffer # would exceed max layer height or max combined layer count if ($current_height + $height >= $nozzle_diameter + epsilon || $layers >= $every) { # append combination to lower layer $combine{$layer_idx-1} = $layers; $current_height = $layers = 0; } $current_height += $height; $layers++; } # append lower layers (if any) to uppermost layer $combine{$self->layer_count-1} = $layers; } # loop through layers to which we have assigned layers to combine for my $layer_idx (sort keys %combine) { next unless $combine{$layer_idx} > 1; # get all the LayerRegion objects to be combined my @layerms = map $self->get_layer($_)->get_region($region_id), ($layer_idx - ($combine{$layer_idx}-1) .. $layer_idx); # only combine internal infill for my $type (S_TYPE_INTERNAL) { # we need to perform a multi-layer intersection, so let's split it in pairs # initialize the intersection with the candidates of the lowest layer my $intersection = [ map $_->expolygon, @{$layerms[0]->fill_surfaces->filter_by_type($type)} ]; # start looping from the second layer and intersect the current intersection with it for my $layerm (@layerms[1 .. $#layerms]) { $intersection = intersection_ex( [ map @$_, @$intersection ], [ map @{$_->expolygon}, @{$layerm->fill_surfaces->filter_by_type($type)} ], ); } my $area_threshold = $layerms[0]->infill_area_threshold; @$intersection = grep $_->area > $area_threshold, @$intersection; next if !@$intersection; Slic3r::debugf " combining %d %s regions from layers %d-%d\n", scalar(@$intersection), ($type == S_TYPE_INTERNAL ? 'internal' : 'internal-solid'), $layer_idx-($every-1), $layer_idx; # $intersection now contains the regions that can be combined across the full amount of layers # so let's remove those areas from all layers my @intersection_with_clearance = map @{$_->offset( $layerms[-1]->flow(FLOW_ROLE_SOLID_INFILL)->scaled_width / 2 + $layerms[-1]->flow(FLOW_ROLE_PERIMETER)->scaled_width / 2 # Because fill areas for rectilinear and honeycomb are grown # later to overlap perimeters, we need to counteract that too. + (($type == S_TYPE_INTERNALSOLID || $region->config->fill_pattern =~ /(rectilinear|grid|line|honeycomb)/) ? $layerms[-1]->flow(FLOW_ROLE_SOLID_INFILL)->scaled_width : 0) )}, @$intersection; foreach my $layerm (@layerms) { my @this_type = @{$layerm->fill_surfaces->filter_by_type($type)}; my @other_types = map $_->clone, grep $_->surface_type != $type, @{$layerm->fill_surfaces}; my @new_this_type = map Slic3r::Surface->new(expolygon => $_, surface_type => $type), @{diff_ex( [ map $_->p, @this_type ], [ @intersection_with_clearance ], )}; # apply surfaces back with adjusted depth to the uppermost layer if ($layerm->layer->id == $self->get_layer($layer_idx)->id) { push @new_this_type, map Slic3r::Surface->new( expolygon => $_, surface_type => $type, thickness => sum(map $_->layer->height, @layerms), thickness_layers => scalar(@layerms), ), @$intersection; } else { # save void surfaces push @new_this_type, map Slic3r::Surface->new(expolygon => $_, surface_type => $voidtype{$type}), @{intersection_ex( [ map @{$_->expolygon}, @this_type ], [ @intersection_with_clearance ], )}; } $layerm->fill_surfaces->clear; $layerm->fill_surfaces->append($_) for (@new_this_type, @other_types); } } } } } # Simplify the sliced model, if "resolution" configuration parameter > 0. # The simplification is problematic, because it simplifies the slices independent from each other, # which makes the simplified discretization visible on the object surface. sub _simplify_slices { my ($self, $distance) = @_; foreach my $layer (@{$self->layers}) { $layer->slices->simplify($distance); $_->slices->simplify($distance) for @{$layer->regions}; } } sub support_material_flow { my ($self, $role) = @_; $role //= FLOW_ROLE_SUPPORT_MATERIAL; my $extruder = ($role == FLOW_ROLE_SUPPORT_MATERIAL) ? $self->config->support_material_extruder : $self->config->support_material_interface_extruder; my $width = $self->config->support_material_extrusion_width || $self->config->extrusion_width; if ($role == FLOW_ROLE_SUPPORT_MATERIAL_INTERFACE) { $width = $self->config->support_material_interface_extrusion_width || $width; } # we use a bogus layer_height because we use the same flow for all # support material layers return Slic3r::Flow->new_from_width( width => $width, role => $role, nozzle_diameter => $self->print->config->nozzle_diameter->[$extruder-1] // $self->print->config->nozzle_diameter->[0], layer_height => $self->config->layer_height, bridge_flow_ratio => 0, ); } 1; Slic3r-1.3.0/lib/Slic3r/Print/Simple.pm000066400000000000000000000101711327442435500174530ustar00rootroot00000000000000# A simple wrapper to quickly print a single model without a GUI. # Used by the command line slic3r.pl, by command line utilities pdf-slic3s.pl and view-toolpaths.pl, # and by the quick slice menu of the Slic3r GUI. # # It creates and owns an instance of Slic3r::Print to perform the slicing # and it accepts an instance of Slic3r::Model from the outside. package Slic3r::Print::Simple; use Moo; use Slic3r::Geometry qw(X Y); use Slic3r::Geometry::Clipper qw(diff); has '_print' => ( is => 'ro', default => sub { Slic3r::Print->new }, handles => [qw(apply_config config extruders output_filepath total_used_filament total_extruded_volume placeholder_parser process)], ); has 'duplicate' => ( is => 'rw', default => sub { 1 }, ); has 'scale' => ( is => 'rw', default => sub { 1 }, ); has 'rotate' => ( is => 'rw', default => sub { 0 }, ); has 'duplicate_grid' => ( is => 'rw', default => sub { [1,1] }, ); has 'status_cb' => ( is => 'rw', default => sub { sub {} }, ); has 'print_center' => ( is => 'rw', ); has 'dont_arrange' => ( is => 'rw', default => sub { 0 }, ); has 'output_file' => ( is => 'rw', ); sub _bed_polygon { my ($self) = @_; my $bed_shape = $self->_print->config->bed_shape; return Slic3r::Polygon->new_scale(@$bed_shape); } sub set_model { # $model is of type Slic3r::Model my ($self, $model) = @_; # make method idempotent so that the object is reusable $self->_print->clear_objects; # make sure all objects have at least one defined instance my $need_arrange = $model->add_default_instances && ! $self->dont_arrange; # apply scaling and rotation supplied from command line if any foreach my $instance (map @{$_->instances}, @{$model->objects}) { $instance->set_scaling_factor($instance->scaling_factor * $self->scale); $instance->set_rotation($instance->rotation + $self->rotate); } my $bed_shape = $self->_print->config->bed_shape; my $bb = Slic3r::Geometry::BoundingBoxf->new_from_points($bed_shape); if ($self->duplicate_grid->[X] > 1 || $self->duplicate_grid->[Y] > 1) { $model->duplicate_objects_grid($self->duplicate_grid->[X], $self->duplicate_grid->[Y], $self->_print->config->duplicate_distance); } elsif ($need_arrange) { $model->duplicate_objects($self->duplicate, $self->_print->config->min_object_distance, $bb); } elsif ($self->duplicate > 1) { # if all input objects have defined position(s) apply duplication to the whole model $model->duplicate($self->duplicate, $self->_print->config->min_object_distance, $bb); } $_->translate(0,0,-$_->bounding_box->z_min) for @{$model->objects} ; if (!$self->dont_arrange) { my $print_center = $self->print_center // Slic3r::Pointf->new_unscale(@{ $self->_bed_polygon->centroid }); $model->center_instances_around_point($print_center); } foreach my $model_object (@{$model->objects}) { $self->_print->auto_assign_extruders($model_object); $self->_print->add_model_object($model_object); } } sub _before_export { my ($self) = @_; $self->_print->set_status_cb($self->status_cb); $self->_print->validate; } sub _after_export { my ($self) = @_; # check that all parts fit in bed shape, and warn if they don't # TODO: use actual toolpaths instead of total bounding box if (@{diff([$self->_print->bounding_box->polygon], [$self->_bed_polygon])}) { warn "Warning: the supplied parts might not fit in the configured bed shape. " . "You might want to review the result before printing.\n"; } $self->_print->set_status_cb(undef); } sub export_gcode { my ($self) = @_; $self->_before_export; $self->_print->export_gcode(output_file => $self->output_file); $self->_after_export; } sub export_svg { my ($self) = @_; $self->_before_export; $self->_print->export_svg(output_file => $self->output_file); $self->_after_export; } 1; Slic3r-1.3.0/lib/Slic3r/Print/State.pm000066400000000000000000000005601327442435500173030ustar00rootroot00000000000000# Wraps C++ enums Slic3r::PrintStep and Slic3r::PrintObjectStep package Slic3r::Print::State; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(STEP_LAYERS STEP_SLICE STEP_PERIMETERS STEP_PREPARE_INFILL STEP_INFILL STEP_SUPPORTMATERIAL STEP_SKIRT STEP_BRIM); our %EXPORT_TAGS = (steps => \@EXPORT_OK); 1; Slic3r-1.3.0/lib/Slic3r/Print/SupportMaterial.pm000066400000000000000000001307631327442435500213670ustar00rootroot00000000000000# Instantiated by Slic3r::Print::Object->_support_material() # only generate() and contact_distance() are called from the outside of this module. package Slic3r::Print::SupportMaterial; use Moo; use List::Util qw(sum min max); use Slic3r::ExtrusionPath ':roles'; use Slic3r::Flow ':roles'; use Slic3r::Geometry qw(epsilon scale scaled_epsilon PI rad2deg deg2rad convex_hull); use Slic3r::Geometry::Clipper qw(offset diff union union_ex intersection offset_ex offset2 intersection_pl offset2_ex diff_pl diff_ex); use Slic3r::Surface ':types'; has 'print_config' => (is => 'rw', required => 1); has 'object_config' => (is => 'rw', required => 1); has 'flow' => (is => 'rw', required => 1); has 'first_layer_flow' => (is => 'rw', required => 1); has 'interface_flow' => (is => 'rw', required => 1); use constant DEBUG_CONTACT_ONLY => 0; # increment used to reach MARGIN in steps to avoid trespassing thin objects use constant MARGIN_STEP => MARGIN/3; # generate a tree-like structure to save material use constant PILLAR_SIZE => 2.5; use constant PILLAR_SPACING => 10; sub generate { # $object is Slic3r::Print::Object my ($self, $object) = @_; # Determine the top surfaces of the support, defined as: # contact = overhangs - clearance + margin # This method is responsible for identifying what contact surfaces # should the support material expose to the object in order to guarantee # that it will be effective, regardless of how it's built below. my ($contact, $overhang) = $self->contact_area($object); # Determine the top surfaces of the object. We need these to determine # the layer heights of support material and to clip support to the object # silhouette. my ($top) = $self->object_top($object, $contact); # We now know the upper and lower boundaries for our support material object # (@$contact_z and @$top_z), so we can generate intermediate layers. my $support_z = $self->support_layers_z( [ sort keys %$contact ], [ sort keys %$top ], max(map $_->height, @{$object->layers}) ); # If we wanted to apply some special logic to the first support layers lying on # object's top surfaces this is the place to detect them my $shape = []; if ($self->object_config->support_material_pattern eq 'pillars') { $self->generate_pillars_shape($contact, $support_z, $shape); } # Propagate contact layers downwards to generate interface layers my ($interface) = $self->generate_interface_layers($support_z, $contact, $top); $self->clip_with_object($interface, $support_z, $object); $self->clip_with_shape($interface, $shape) if @$shape; # Propagate contact layers and interface layers downwards to generate # the main support layers. my ($base) = $self->generate_base_layers($support_z, $contact, $interface, $top); $self->clip_with_object($base, $support_z, $object); $self->clip_with_shape($base, $shape) if @$shape; # Detect what part of base support layers are "reverse interfaces" because they # lie above object's top surfaces. $self->generate_bottom_interface_layers($support_z, $base, $top, $interface); # Install support layers into object. for my $i (0 .. $#$support_z) { $object->add_support_layer( $i, # id ($i == 0) ? $support_z->[$i] : ($support_z->[$i] - $support_z->[$i-1]), # height $support_z->[$i], # print_z ); if ($i >= 1) { $object->support_layers->[-2]->set_upper_layer($object->support_layers->[-1]); $object->support_layers->[-1]->set_lower_layer($object->support_layers->[-2]); } } # Generate the actual toolpaths and save them into each layer. $self->generate_toolpaths($object, $overhang, $contact, $interface, $base); } sub contact_area { # $object is Slic3r::Print::Object my ($self, $object) = @_; my $conf = $self->object_config; # if user specified a custom angle threshold, convert it to radians my $threshold_rad; if (!($conf->support_material_threshold =~ /%$/)) { $threshold_rad = deg2rad($conf->support_material_threshold + 1); # +1 makes the threshold inclusive Slic3r::debugf "Threshold angle = %d°\n", rad2deg($threshold_rad); } # Build support on a build plate only? If so, then collect top surfaces into $buildplate_only_top_surfaces # and subtract $buildplate_only_top_surfaces from the contact surfaces, so # there is no contact surface supported by a top surface. my $buildplate_only = ( $conf->support_material || $conf->support_material_enforce_layers) && $conf->support_material_buildplate_only; my $buildplate_only_top_surfaces = []; # determine contact areas my %contact = (); # contact_z => [ polygons ] my %overhang = (); # contact_z => [ polygons ] - this stores the actual overhang supported by each contact layer for my $layer_id (0 .. $#{$object->layers}) { # note $layer_id might != $layer->id when raft_layers > 0 # so $layer_id == 0 means first object layer # and $layer->id == 0 means first print layer (including raft) # if no raft, and we're at layer 0, skip to layer 1 if ( $conf->raft_layers == 0 && $layer_id == 0 ) { next; } # with or without raft, if we're above layer 1, we need to quit # support generation if supports are disabled, or if we're at a high # enough layer that enforce-supports no longer applies if ( $layer_id > 0 && !$conf->support_material && ($layer_id >= $conf->support_material_enforce_layers) ) { # if we are only going to generate raft just check # the 'overhangs' of the first object layer last; } my $layer = $object->get_layer($layer_id); last if $conf->support_material_max_layers && $layer_id > $conf->support_material_max_layers; if ($buildplate_only) { # Collect the top surfaces up to this layer and merge them. my $projection_new = []; push @$projection_new, ( map $_->p, map @{$_->slices->filter_by_type(S_TYPE_TOP)}, @{$layer->regions} ); if (@$projection_new) { # Merge the new top surfaces with the preceding top surfaces. # Apply the safety offset to the newly added polygons, so they will connect # with the polygons collected before, # but don't apply the safety offset during the union operation as it would # inflate the polygons over and over. push @$buildplate_only_top_surfaces, @{ offset($projection_new, scale(0.01)) }; $buildplate_only_top_surfaces = union($buildplate_only_top_surfaces, 0); } } # detect overhangs and contact areas needed to support them my (@overhang, @contact) = (); if ($layer_id == 0) { # this is the first object layer, so we're here just to get the object # footprint for the raft # we only consider contours and discard holes to get a more continuous raft push @overhang, map $_->clone, map $_->contour, @{$layer->slices}; push @contact, @{offset(\@overhang, scale +MARGIN)}; } else { my $lower_layer = $object->get_layer($layer_id-1); foreach my $layerm (@{$layer->regions}) { my $fw = $layerm->flow(FLOW_ROLE_EXTERNAL_PERIMETER)->scaled_width; my $diff; # If a threshold angle was specified, use a different logic for detecting overhangs. if (($conf->support_material && defined $threshold_rad) || $layer_id <= $conf->support_material_enforce_layers || ($conf->raft_layers > 0 && $layer_id == 0)) { my $d = 0; my $layer_threshold_rad = $threshold_rad; if ($layer_id <= $conf->support_material_enforce_layers) { # Use ~45 deg number for enforced supports if we are in auto $layer_threshold_rad = deg2rad(89); } if (defined $layer_threshold_rad) { $d = scale $lower_layer->height * ((cos $layer_threshold_rad) / (sin $layer_threshold_rad)); } $diff = diff( [ map $_->p, @{$layerm->slices} ], offset([ map @$_, @{$lower_layer->slices} ], +$d), ); # only enforce spacing from the object ($fw/2) if the threshold angle # is not too high: in that case, $d will be very small (as we need to catch # very short overhangs), and such contact area would be eaten by the # enforced spacing, resulting in high threshold angles to be almost ignored $diff = diff( offset($diff, $d - $fw/2), [ map @$_, @{$lower_layer->slices} ], ) if $d > $fw/2; } else { $diff = diff( [ map $_->p, @{$layerm->slices} ], offset([ map @$_, @{$lower_layer->slices} ], +$conf->get_abs_value_over('support_material_threshold', $fw)), ); # collapse very tiny spots $diff = offset2($diff, -$fw/10, +$fw/10); # $diff now contains the ring or stripe comprised between the boundary of # lower slices and the centerline of the last perimeter in this overhanging layer. # Void $diff means that there's no upper perimeter whose centerline is # outside the lower slice boundary, thus no overhang } if ($conf->dont_support_bridges) { # compute the area of bridging perimeters my $bridged_perimeters; # Polygons { my $bridge_flow = $layerm->flow(FLOW_ROLE_PERIMETER, 1); # Get the lower layer's slices and grow them by half the nozzle diameter # because we will consider the upper perimeters supported even if half nozzle # falls outside the lower slices. my $lower_grown_slices; { my $nozzle_diameter = $self->print_config->get_at('nozzle_diameter', $layerm->region->config->perimeter_extruder-1); $lower_grown_slices = offset( [ map @$_, @{$lower_layer->slices} ], +scale($nozzle_diameter/2), ); } # Get all perimeters as polylines. # TODO: split_at_first_point() (called by as_polyline() for ExtrusionLoops) # could split a bridge mid-way my @overhang_perimeters = map $_->as_polyline, @{$layerm->perimeters->flatten}; # Only consider the overhang parts of such perimeters, # overhangs being those parts not supported by # workaround for Clipper bug, see Slic3r::Polygon::clip_as_polyline() $_->[0]->translate(1,0) for @overhang_perimeters; @overhang_perimeters = @{diff_pl( \@overhang_perimeters, $lower_grown_slices, )}; # only consider straight overhangs @overhang_perimeters = grep $_->is_straight, @overhang_perimeters; # only consider overhangs having endpoints inside layer's slices foreach my $polyline (@overhang_perimeters) { $polyline->extend_start($fw); $polyline->extend_end($fw); } @overhang_perimeters = grep { $layer->slices->contains_point($_->first_point) && $layer->slices->contains_point($_->last_point) } @overhang_perimeters; # convert bridging polylines into polygons by inflating them with their thickness { # For bridges we can't assume width is larger than spacing because they # are positioned according to non-bridging perimeters spacing. my $w = max( $bridge_flow->scaled_width, $bridge_flow->scaled_spacing, $fw, # width of external perimeters $layerm->flow(FLOW_ROLE_PERIMETER)->scaled_width, ); $bridged_perimeters = union([ # Also apply safety offset to ensure no gaps are left in between. map @{$_->grow($w/2 + 10)}, @overhang_perimeters ]); } } if (1) { # remove the entire bridges and only support the unsupported edges my @bridges = map $_->expolygon, grep $_->bridge_angle != -1, @{$layerm->fill_surfaces->filter_by_type(S_TYPE_BOTTOMBRIDGE)}; $diff = diff( $diff, [ (map @$_, @bridges), @$bridged_perimeters, ], 1, ); push @$diff, @{intersection( [ map @{$_->grow(+scale MARGIN)}, @{$layerm->unsupported_bridge_edges} ], [ map @$_, @bridges ], )}; } else { # just remove bridged areas $diff = diff( $diff, $layerm->bridged, 1, ); } } # if ($conf->dont_support_bridges) if ($buildplate_only) { # Don't support overhangs above the top surfaces. # This step is done before the contact surface is calcuated by growing the overhang region. $diff = diff($diff, $buildplate_only_top_surfaces); } next if !@$diff; push @overhang, @$diff; # NOTE: this is not the full overhang as it misses the outermost half of the perimeter width! # Let's define the required contact area by using a max gap of half the upper # extrusion width and extending the area according to the configured margin. # We increment the area in steps because we don't want our support to overflow # on the other side of the object (if it's very thin). { my $slices_margin = offset([ map @$_, @{$lower_layer->slices} ], +$fw/2); if ($buildplate_only) { # Trim the inflated contact surfaces by the top surfaces as well. push @$slices_margin, map $_->clone, @{$buildplate_only_top_surfaces}; $slices_margin = union($slices_margin); } for ($fw/2, map {scale MARGIN_STEP} 1..(MARGIN / MARGIN_STEP)) { $diff = diff( offset($diff, $_), $slices_margin, ); } } push @contact, @$diff; } } next if !@contact; # now apply the contact areas to the layer were they need to be made { # get the average nozzle diameter used on this layer my @nozzle_diameters = map $self->print_config->get_at('nozzle_diameter', $_), map { $_->config->perimeter_extruder-1, $_->config->infill_extruder-1, $_->config->solid_infill_extruder-1 } map $_->region, @{$layer->regions}; my $nozzle_diameter = sum(@nozzle_diameters)/@nozzle_diameters; my $contact_z = $layer->print_z - $self->contact_distance($layer->height, $nozzle_diameter); # ignore this contact area if it's too low next if $contact_z < $conf->get_value('first_layer_height') - epsilon; $contact{$contact_z} = [ @contact ]; $overhang{$contact_z} = [ @overhang ]; if (0) { require "Slic3r/SVG.pm"; Slic3r::SVG::output("out\\contact_" . $contact_z . ".svg", green_expolygons => union_ex($buildplate_only_top_surfaces), blue_expolygons => union_ex(\@contact), red_expolygons => union_ex(\@overhang), ); } } } return (\%contact, \%overhang); } sub object_top { my ($self, $object, $contact) = @_; # find object top surfaces # we'll use them to clip our support and detect where does it stick my %top = (); # print_z => [ expolygons ] return \%top if ($self->object_config->support_material_buildplate_only); my $projection = []; foreach my $layer (reverse @{$object->layers}) { if (my @top = map @{$_->slices->filter_by_type(S_TYPE_TOP)}, @{$layer->regions}) { # compute projection of the contact areas above this top layer # first add all the 'new' contact areas to the current projection # ('new' means all the areas that are lower than the last top layer # we considered) my $min_top = min(keys %top) // max(keys %$contact); # use <= instead of just < because otherwise we'd ignore any contact regions # having the same Z of top layers push @$projection, map @{$contact->{$_}}, grep { $_ > $layer->print_z && $_ <= $min_top } keys %$contact; # now find whether any projection falls onto this top surface my $touching = intersection($projection, [ map $_->p, @top ]); if (@$touching) { # grow top surfaces so that interface and support generation are generated # with some spacing from object - it looks we don't need the actual # top shapes so this can be done here $top{ $layer->print_z } = offset($touching, $self->flow->scaled_width); } # remove the areas that touched from the projection that will continue on # next, lower, top surfaces $projection = diff($projection, $touching); } } return \%top; } sub support_layers_z { my ($self, $contact_z, $top_z, $max_object_layer_height) = @_; # quick table to check whether a given Z is a top surface my %top = map { $_ => 1 } @$top_z; # determine layer height for any non-contact layer # we use max() to prevent many ultra-thin layers to be inserted in case # layer_height > nozzle_diameter * 0.75 my $nozzle_diameter = $self->print_config->get_at('nozzle_diameter', $self->object_config->support_material_extruder-1); my $support_material_height = max($max_object_layer_height, $nozzle_diameter * 0.75); my $contact_distance = $self->contact_distance($support_material_height, $nozzle_diameter); # initialize known, fixed, support layers my @z = sort { $a <=> $b } @$contact_z, @$top_z, # TODO: why we have this? (map $_ + $contact_distance, @$top_z); # enforce first layer height my $first_layer_height = $self->object_config->get_value('first_layer_height'); shift @z while @z && $z[0] <= $first_layer_height; unshift @z, $first_layer_height; # add raft layers by dividing the space between first layer and # first contact layer evenly if ($self->object_config->raft_layers > 1 && @z >= 2) { # $z[1] is last raft layer (contact layer for the first layer object) my $height = ($z[1] - $z[0]) / ($self->object_config->raft_layers - 1); # since we already have two raft layers ($z[0] and $z[1]) we need to insert # raft_layers-2 more splice @z, 1, 0, map { sprintf "%.2f", $_ } map { $z[0] + $height * $_ } 1..($self->object_config->raft_layers - 2); } # create other layers (skip raft layers as they're already done and use thicker layers) for (my $i = $#z; $i >= $self->object_config->raft_layers; $i--) { my $target_height = $support_material_height; if ($i > 0 && $top{ $z[$i-1] }) { $target_height = $nozzle_diameter; } # enforce first layer height if (($i == 0 && $z[$i] > $target_height + $first_layer_height) || ($z[$i] - $z[$i-1] > $target_height + Slic3r::Geometry::epsilon)) { splice @z, $i, 0, ($z[$i] - $target_height); $i++; } } # remove duplicates and make sure all 0.x values have the leading 0 { my %sl = map { 1 * $_ => 1 } @z; @z = sort { $a <=> $b } keys %sl; } return \@z; } sub generate_interface_layers { my ($self, $support_z, $contact, $top) = @_; # let's now generate interface layers below contact areas my %interface = (); # layer_id => [ polygons ] my $interface_layers_num = $self->object_config->support_material_interface_layers; for my $layer_id (0 .. $#$support_z) { my $z = $support_z->[$layer_id]; my $this = $contact->{$z} // next; # count contact layer as interface layer for (my $i = $layer_id-1; $i >= 0 && $i > $layer_id-$interface_layers_num; $i--) { $z = $support_z->[$i]; my @overlapping_layers = $self->overlapping_layers($i, $support_z); my @overlapping_z = map $support_z->[$_], @overlapping_layers; # Compute interface area on this layer as diff of upper contact area # (or upper interface area) and layer slices. # This diff is responsible of the contact between support material and # the top surfaces of the object. We should probably offset the top # surfaces vertically before performing the diff, but this needs # investigation. $this = $interface{$i} = diff( [ @$this, # clipped projection of the current contact regions @{ $interface{$i} || [] }, # interface regions already applied to this layer ], [ (map @$_, map $top->{$_}, grep exists $top->{$_}, @overlapping_z), # top slices on this layer (map @$_, map $contact->{$_}, grep exists $contact->{$_}, @overlapping_z), # contact regions on this layer ], 1, ); } } return \%interface; } sub generate_bottom_interface_layers { my ($self, $support_z, $base, $top, $interface) = @_; # If no interface layers are allowed, don't generate bottom interface layers. return if $self->object_config->support_material_interface_layers == 0; my $area_threshold = $self->interface_flow->scaled_spacing ** 2; # loop through object's top surfaces foreach my $top_z (sort keys %$top) { my $this = $top->{$top_z}; # keep a count of the interface layers we generated for this top surface my $interface_layers = 0; # loop through support layers until we find the one(s) right above the top # surface foreach my $layer_id (0 .. $#$support_z) { my $z = $support_z->[$layer_id]; next unless $z > $top_z; if ($base->{$layer_id}) { # get the support material area that should be considered interface my $interface_area = intersection( $base->{$layer_id}, $this, ); # discard too small areas $interface_area = [ grep abs($_->area) >= $area_threshold, @$interface_area ]; # subtract new interface area from base $base->{$layer_id} = diff( $base->{$layer_id}, $interface_area, ); # add new interface area to interface push @{$interface->{$layer_id}}, @$interface_area; } $interface_layers++; last if $interface_layers == $self->object_config->support_material_interface_layers; } } } sub generate_base_layers { my ($self, $support_z, $contact, $interface, $top) = @_; # let's now generate support layers under interface layers my $base = {}; # layer_id => [ polygons ] { for my $i (reverse 0 .. $#$support_z-1) { my $z = $support_z->[$i]; my @overlapping_layers = $self->overlapping_layers($i, $support_z); my @overlapping_z = map $support_z->[$_], @overlapping_layers; # in case we have no interface layers, look at upper contact # (1 interface layer means we only have contact layer, so $interface->{$i+1} is empty) my @upper_contact = (); if ($self->object_config->support_material_interface_layers <= 1) { @upper_contact = @{ $contact->{$support_z->[$i+1]} || [] }; } $base->{$i} = diff( [ @{ $base->{$i+1} || [] }, # support regions on upper layer @{ $interface->{$i+1} || [] }, # interface regions on upper layer @upper_contact, # contact regions on upper layer ], [ (map @$_, map $top->{$_}, grep exists $top->{$_}, @overlapping_z), # top slices on this layer (map @$_, map $interface->{$_}, grep exists $interface->{$_}, @overlapping_layers), # interface regions on this layer (map @$_, map $contact->{$_}, grep exists $contact->{$_}, @overlapping_z), # contact regions on this layer ], 1, ); } } return $base; } # This method removes object silhouette from support material # (it's used with interface and base only). It removes a bit more, # leaving a thin gap between object and support in the XY plane. sub clip_with_object { my ($self, $support, $support_z, $object) = @_; foreach my $i (keys %$support) { next if !@{$support->{$i}}; my $zmax = $support_z->[$i]; my $zmin = ($i == 0) ? 0 : $support_z->[$i-1]; my @layers = grep { $_->print_z > $zmin && ($_->print_z - $_->height) < $zmax } @{$object->layers}; # $layer->slices contains the full shape of layer, thus including # perimeter's width. $support contains the full shape of support # material, thus including the width of its foremost extrusion. # We leave a gap equal to a full extrusion width. $support->{$i} = diff( $support->{$i}, offset([ map @$_, map @{$_->slices}, @layers ], +$self->flow->scaled_width), ); } } sub generate_toolpaths { my ($self, $object, $overhang, $contact, $interface, $base) = @_; my $flow = $self->flow; my $interface_flow = $self->interface_flow; # shape of contact area my $contact_loops = 1; my $circle_radius = 1.5 * $interface_flow->scaled_width; my $circle_distance = 3 * $circle_radius; my $circle = Slic3r::Polygon->new(map [ $circle_radius * cos $_, $circle_radius * sin $_ ], (5*PI/3, 4*PI/3, PI, 2*PI/3, PI/3, 0)); Slic3r::debugf "Generating patterns\n"; # prepare fillers my $pattern = $self->object_config->support_material_pattern; my @angles = ($self->object_config->support_material_angle); if ($pattern eq 'rectilinear-grid') { $pattern = 'rectilinear'; push @angles, $angles[0] + 90; } elsif ($pattern eq 'pillars') { $pattern = 'honeycomb'; } my $interface_angle = $self->object_config->support_material_angle + 90; my $interface_spacing = $self->object_config->support_material_interface_spacing + $interface_flow->spacing; my $interface_density = $interface_spacing == 0 ? 1 : $interface_flow->spacing / $interface_spacing; my $support_spacing = $self->object_config->support_material_spacing + $flow->spacing; my $support_density = $support_spacing == 0 ? 1 : $flow->spacing / $support_spacing; my $process_layer = sub { my ($layer_id) = @_; my $layer = $object->support_layers->[$layer_id]; my $z = $layer->print_z; # we redefine flows locally by applying this layer's height my $_flow = $flow->clone; my $_interface_flow = $interface_flow->clone; $_flow->set_height($layer->height); $_interface_flow->set_height($layer->height); my $overhang = $overhang->{$z} || []; my $contact = $contact->{$z} || []; my $interface = $interface->{$layer_id} || []; my $base = $base->{$layer_id} || []; if (DEBUG_CONTACT_ONLY) { $interface = []; $base = []; } if (0) { require "Slic3r/SVG.pm"; Slic3r::SVG::output("layer_" . $z . ".svg", red_expolygons => union_ex($contact), green_expolygons => union_ex($interface), ); } # islands $layer->support_islands->append(@{union_ex([ @$interface, @$base, @$contact ])}); # contact my $contact_infill = []; if ($self->object_config->support_material_interface_layers == 0) { # if no interface layers were requested we treat the contact layer # exactly as a generic base layer push @$base, @$contact; } elsif (@$contact && $contact_loops > 0) { # generate the outermost loop # find centerline of the external loop (or any other kind of extrusions should the loop be skipped) $contact = offset($contact, -$_interface_flow->scaled_width/2); my @loops0 = (); { # find centerline of the external loop of the contours my @external_loops = @$contact; # only consider the loops facing the overhang { my $overhang_with_margin = offset($overhang, +$_interface_flow->scaled_width/2); @external_loops = grep { @{intersection_pl( [ $_->split_at_first_point ], $overhang_with_margin, )} } @external_loops; } # apply a pattern to the loop my @positions = map @{Slic3r::Polygon->new(@$_)->equally_spaced_points($circle_distance)}, @external_loops; @loops0 = @{diff( [ @external_loops ], [ map { my $c = $circle->clone; $c->translate(@$_); $c } @positions ], )}; } # make more loops my @loops = @loops0; for my $i (2..$contact_loops) { my $d = ($i-1) * $_interface_flow->scaled_spacing; push @loops, @{offset2(\@loops0, -$d -0.5*$_interface_flow->scaled_spacing, +0.5*$_interface_flow->scaled_spacing)}; } # clip such loops to the side oriented towards the object @loops = @{intersection_pl( [ map $_->split_at_first_point, @loops ], offset($overhang, +scale MARGIN), )}; # add the contact infill area to the interface area # note that growing loops by $circle_radius ensures no tiny # extrusions are left inside the circles; however it creates # a very large gap between loops and contact_infill, so maybe another # solution should be found to achieve both goals $contact_infill = diff( $contact, [ map @{$_->grow($circle_radius*1.1)}, @loops ], ); # transform loops into ExtrusionPath objects my $mm3_per_mm = $_interface_flow->mm3_per_mm; @loops = map Slic3r::ExtrusionPath->new( polyline => $_, role => EXTR_ROLE_SUPPORTMATERIAL_INTERFACE, mm3_per_mm => $mm3_per_mm, width => $_interface_flow->width, height => $layer->height, ), @loops; $layer->support_interface_fills->append(@loops); } # Allocate the fillers exclusively in the worker threads! Don't allocate them at the main thread, # as Perl copies the C++ pointers by default, so then the C++ objects are shared between threads! my %fillers = ( interface => Slic3r::Filler->new_from_type('rectilinear'), support => Slic3r::Filler->new_from_type($pattern), ); my $bounding_box = $object->bounding_box; $fillers{interface}->set_bounding_box($object->bounding_box); $fillers{support}->set_bounding_box($object->bounding_box); # interface and contact infill if (@$interface || @$contact_infill) { # make interface layers alternate angles by 90 degrees my $alternate_angle = $interface_angle + (90 * (($layer_id + 1) % 2)); $fillers{interface}->set_angle(deg2rad($alternate_angle)); $fillers{interface}->set_min_spacing($_interface_flow->spacing); # find centerline of the external loop $interface = offset2($interface, +scaled_epsilon, -(scaled_epsilon + $_interface_flow->scaled_width/2)); # join regions by offsetting them to ensure they're merged $interface = offset([ @$interface, @$contact_infill ], scaled_epsilon); # turn base support into interface when it's contained in our holes # (this way we get wider interface anchoring) { my @p = @$interface; @$interface = (); foreach my $p (@p) { if ($p->is_clockwise) { my $p2 = $p->clone; $p2->make_counter_clockwise; next if !@{diff([$p2], $base, 1)}; } push @$interface, $p; } } $base = diff($base, $interface); my @paths = (); foreach my $expolygon (@{union_ex($interface)}) { my $p = $fillers{interface}->fill_surface( Slic3r::Surface->new(expolygon => $expolygon, surface_type => S_TYPE_INTERNAL), density => $interface_density, layer_height => $layer->height, complete => 1, ); my $mm3_per_mm = $_interface_flow->mm3_per_mm; push @paths, map Slic3r::ExtrusionPath->new( polyline => Slic3r::Polyline->new(@$_), role => EXTR_ROLE_SUPPORTMATERIAL_INTERFACE, mm3_per_mm => $mm3_per_mm, width => $_interface_flow->width, height => $layer->height, ), @$p; } $layer->support_interface_fills->append(@paths); } # support or flange if (@$base) { my $filler = $fillers{support}; $filler->set_angle(deg2rad($angles[ ($layer_id) % @angles ])); # We don't use $base_flow->spacing because we need a constant spacing # value that guarantees that all layers are correctly aligned. $filler->set_min_spacing($flow->spacing); my $density = $support_density; my $base_flow = $_flow; # find centerline of the external loop/extrusions my $to_infill = offset2($base, +scaled_epsilon, -(scaled_epsilon + $_flow->scaled_width/2)); my @paths = (); # base flange if ($layer_id == 0) { $filler = $fillers{interface}; $filler->set_angle(deg2rad($self->object_config->support_material_angle + 90)); $density = 0.5; $base_flow = $self->first_layer_flow; # use the proper spacing for first layer as we don't need to align # its pattern to the other layers $filler->set_min_spacing($base_flow->spacing); # subtract brim so that it goes around the object fully (and support gets its own brim) if ($self->print_config->brim_width > 0) { my $d = +scale $self->print_config->brim_width*2; $to_infill = diff_ex( $to_infill, offset($object->get_layer(0)->slices->polygons, $d), ); } else { $to_infill = union_ex($to_infill); } } else { # draw a perimeter all around support infill # TODO: use brim ordering algorithm my $mm3_per_mm = $_flow->mm3_per_mm; push @paths, map Slic3r::ExtrusionPath->new( polyline => $_->split_at_first_point, role => EXTR_ROLE_SUPPORTMATERIAL, mm3_per_mm => $mm3_per_mm, width => $_flow->width, height => $layer->height, ), @$to_infill; # TODO: use offset2_ex() $to_infill = offset_ex($to_infill, -$_flow->scaled_spacing); } my $mm3_per_mm = $base_flow->mm3_per_mm; foreach my $expolygon (@$to_infill) { my $p = $filler->fill_surface( Slic3r::Surface->new(expolygon => $expolygon, surface_type => S_TYPE_INTERNAL), density => $density, layer_height => $layer->height, complete => 1, ); push @paths, map Slic3r::ExtrusionPath->new( polyline => Slic3r::Polyline->new(@$_), role => EXTR_ROLE_SUPPORTMATERIAL, mm3_per_mm => $mm3_per_mm, width => $base_flow->width, height => $layer->height, ), @$p; } $layer->support_fills->append(@paths); } if (0) { require "Slic3r/SVG.pm"; Slic3r::SVG::output("islands_" . $z . ".svg", red_expolygons => union_ex($contact), green_expolygons => union_ex($interface), green_polylines => [ map $_->unpack->polyline, @{$layer->support_contact_fills} ], polylines => [ map $_->unpack->polyline, @{$layer->support_fills} ], ); } }; Slic3r::parallelize( threads => $self->print_config->threads, items => [ 0 .. $#{$object->support_layers} ], thread_cb => sub { my $q = shift; while (defined (my $layer_id = $q->dequeue)) { $process_layer->($layer_id); } }, no_threads_cb => sub { $process_layer->($_) for 0 .. $#{$object->support_layers}; }, ); } sub generate_pillars_shape { my ($self, $contact, $support_z, $shape) = @_; # this prevents supplying an empty point set to BoundingBox constructor return if !%$contact; my $pillar_size = scale PILLAR_SIZE; my $pillar_spacing = scale PILLAR_SPACING; my $grid; # arrayref of polygons { my $pillar = Slic3r::Polygon->new( [0,0], [$pillar_size, 0], [$pillar_size, $pillar_size], [0, $pillar_size], ); my @pillars = (); my $bb = Slic3r::Geometry::BoundingBox->new_from_points([ map @$_, map @$_, values %$contact ]); for (my $x = $bb->x_min; $x <= $bb->x_max-$pillar_size; $x += $pillar_spacing) { for (my $y = $bb->y_min; $y <= $bb->y_max-$pillar_size; $y += $pillar_spacing) { push @pillars, my $p = $pillar->clone; $p->translate($x, $y); } } $grid = union(\@pillars); } # add pillars to every layer for my $i (0..$#$support_z) { $shape->[$i] = [ @$grid ]; } # build capitals for my $i (0..$#$support_z) { my $z = $support_z->[$i]; my $capitals = intersection( $grid, $contact->{$z} // [], ); # work on one pillar at time (if any) to prevent the capitals from being merged # but store the contact area supported by the capital because we need to make # sure nothing is left my $contact_supported_by_capitals = []; foreach my $capital (@$capitals) { # enlarge capital tops $capital = offset([$capital], +($pillar_spacing - $pillar_size)/2); push @$contact_supported_by_capitals, @$capital; for (my $j = $i-1; $j >= 0; $j--) { my $jz = $support_z->[$j]; $capital = offset($capital, -$self->interface_flow->scaled_width/2); last if !@$capitals; push @{ $shape->[$j] }, @$capital; } } # Capitals will not generally cover the whole contact area because there will be # remainders. For now we handle this situation by projecting such unsupported # areas to the ground, just like we would do with a normal support. my $contact_not_supported_by_capitals = diff( $contact->{$z} // [], $contact_supported_by_capitals, ); if (@$contact_not_supported_by_capitals) { for (my $j = $i-1; $j >= 0; $j--) { push @{ $shape->[$j] }, @$contact_not_supported_by_capitals; } } } } sub clip_with_shape { my ($self, $support, $shape) = @_; foreach my $i (keys %$support) { # don't clip bottom layer with shape so that we # can generate a continuous base flange # also don't clip raft layers next if $i == 0; next if $i < $self->object_config->raft_layers; $support->{$i} = intersection( $support->{$i}, $shape->[$i], ); } } # this method returns the indices of the layers overlapping with the given one sub overlapping_layers { my ($self, $i, $support_z) = @_; my $zmax = $support_z->[$i]; my $zmin = ($i == 0) ? 0 : $support_z->[$i-1]; return grep { my $zmax2 = $support_z->[$_]; my $zmin2 = ($_ == 0) ? 0 : $support_z->[$_-1]; $zmax > $zmin2 && $zmin < $zmax2; } 0..$#$support_z; } sub contact_distance { my ($self, $layer_height, $nozzle_diameter) = @_; my $extra = $self->object_config->support_material_contact_distance; if ($extra == 0) { return $layer_height; } else { return $nozzle_diameter + $extra; } } 1; Slic3r-1.3.0/lib/Slic3r/SVG.pm000066400000000000000000000101601327442435500155630ustar00rootroot00000000000000package Slic3r::SVG; use strict; use warnings; use SVG; use constant X => 0; use constant Y => 1; our $filltype = 'evenodd'; sub factor { return &Slic3r::SCALING_FACTOR * 10; } sub svg { my $svg = SVG->new(width => 200 * 10, height => 200 * 10); my $marker_end = $svg->marker( id => "endArrow", viewBox => "0 0 10 10", refX => "1", refY => "5", markerUnits => "strokeWidth", orient => "auto", markerWidth => "10", markerHeight => "8", ); $marker_end->polyline( points => "0,0 10,5 0,10 1,5", fill => "darkblue", ); return $svg; } sub output { my ($filename, @things) = @_; my $svg = svg(); my $arrows = 1; while (my $type = shift @things) { my $value = shift @things; if ($type eq 'no_arrows') { $arrows = 0; } elsif ($type =~ /^(?:(.+?)_)?expolygons$/) { my $colour = $1; $value = [ map $_->pp, @$value ]; my $g = $svg->group( style => { 'stroke-width' => 0, 'stroke' => $colour || 'black', 'fill' => ($type !~ /polygons/ ? 'none' : ($colour || 'grey')), 'fill-type' => $filltype, }, ); foreach my $expolygon (@$value) { my $points = join ' ', map "M $_ z", map join(" ", reverse map $_->[0]*factor() . " " . $_->[1]*factor(), @$_), @$expolygon; $g->path( d => $points, ); } } elsif ($type =~ /^(?:(.+?)_)?(polygon|polyline)s$/) { my ($colour, $method) = ($1, $2); $value = [ map $_->pp, @$value ]; my $g = $svg->group( style => { 'stroke-width' => ($method eq 'polyline') ? 1 : 0, 'stroke' => $colour || 'black', 'fill' => ($type !~ /polygons/ ? 'none' : ($colour || 'grey')), }, ); foreach my $polygon (@$value) { my $path = $svg->get_path( 'x' => [ map($_->[X] * factor(), @$polygon) ], 'y' => [ map($_->[Y] * factor(), @$polygon) ], -type => 'polygon', ); $g->$method( %$path, 'marker-end' => !$arrows ? "" : "url(#endArrow)", ); } } elsif ($type =~ /^(?:(.+?)_)?points$/) { my $colour = $1 // 'black'; my $r = $colour eq 'black' ? 1 : 3; $value = [ map $_->pp, @$value ]; my $g = $svg->group( style => { 'stroke-width' => 2, 'stroke' => $colour, 'fill' => $colour, }, ); foreach my $point (@$value) { $g->circle( cx => $point->[X] * factor(), cy => $point->[Y] * factor(), r => $r, ); } } elsif ($type =~ /^(?:(.+?)_)?lines$/) { my $colour = $1; $value = [ map $_->pp, @$value ]; my $g = $svg->group( style => { 'stroke-width' => 2, }, ); foreach my $line (@$value) { $g->line( x1 => $line->[0][X] * factor(), y1 => $line->[0][Y] * factor(), x2 => $line->[1][X] * factor(), y2 => $line->[1][Y] * factor(), style => { 'stroke' => $colour || 'black', }, 'marker-end' => !$arrows ? "" : "url(#endArrow)", ); } } } write_svg($svg, $filename); } sub write_svg { my ($svg, $filename) = @_; Slic3r::open(\my $fh, '>', $filename); print $fh $svg->xmlify; close $fh; printf "SVG written to %s\n", $filename; } 1; Slic3r-1.3.0/lib/Slic3r/Surface.pm000066400000000000000000000005421327442435500165170ustar00rootroot00000000000000package Slic3r::Surface; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(S_TYPE_TOP S_TYPE_BOTTOM S_TYPE_BOTTOMBRIDGE S_TYPE_INTERNAL S_TYPE_INTERNALSOLID S_TYPE_INTERNALBRIDGE S_TYPE_INTERNALVOID); our %EXPORT_TAGS = (types => \@EXPORT_OK); sub p { my $self = shift; return @{$self->polygons}; } 1; Slic3r-1.3.0/lib/Slic3r/Test.pm000066400000000000000000003006451327442435500160550ustar00rootroot00000000000000package Slic3r::Test; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(_eq); use IO::Scalar; use List::Util qw(first); use Slic3r::Geometry qw(epsilon X Y Z); my %cuboids = ( '20mm_cube' => [20,20,20], '2x20x10' => [2, 20,10], ); sub mesh { my ($name, %params) = @_; my ($vertices, $facets); if ($cuboids{$name}) { my ($x, $y, $z) = @{ $cuboids{$name} }; $vertices = [ [$x,$y,0], [$x,0,0], [0,0,0], [0,$y,0], [$x,$y,$z], [0,$y,$z], [0,0,$z], [$x,0,$z], ]; $facets = [ [0,1,2], [0,2,3], [4,5,6], [4,6,7], [0,4,7], [0,7,1], [1,7,6], [1,6,2], [2,6,5], [2,5,3], [4,0,3], [4,3,5], ], } elsif ($name eq 'box') { my ($x, $y, $z) = @{ $params{"dim"} }; $vertices = [ [$x,$y,0], [$x,0,0], [0,0,0], [0,$y,0], [$x,$y,$z], [0,$y,$z], [0,0,$z], [$x,0,$z], ]; $facets = [ [0,1,2], [0,2,3], [4,5,6], [4,6,7], [0,4,7], [0,7,1], [1,7,6], [1,6,2], [2,6,5], [2,5,3], [4,0,3], [4,3,5], ], } elsif ($name eq 'cube_with_hole') { $vertices = [ [0,0,0],[0,0,10],[0,20,0],[0,20,10],[20,0,0],[20,0,10],[5,5,0],[15,5,0],[5,15,0],[20,20,0],[15,15,0],[20,20,10],[5,5,10],[5,15,10],[15,5,10],[15,15,10] ]; $facets = [ [0,1,2],[2,1,3],[1,0,4],[5,1,4],[6,7,4],[8,2,9],[0,2,8],[10,8,9],[0,8,6],[0,6,4],[4,7,9],[7,10,9],[2,3,9],[9,3,11],[12,1,5],[13,3,12],[14,12,5],[3,1,12],[11,3,13],[11,15,5],[11,13,15],[15,14,5],[5,4,9],[11,5,9],[8,13,12],[6,8,12],[10,15,13],[8,10,13],[15,10,14],[14,10,7],[14,7,12],[12,7,6] ], } elsif ($name eq 'cube_with_concave_hole') { $vertices = [ [-10,-10,-5],[-10,-10,5],[-10,10,-5],[-10,10,5],[10,-10,-5],[10,-10,5],[-5,-5,-5],[5,-5,-5],[5,5,-5],[5,10,-5],[-5,5,-5],[3.06161699911402e-16,5,-5],[5,0,-5],[0,0,-5],[10,5,-5],[5,10,5],[-5,-5,5],[5,0,5],[5,-5,5],[-5,5,5],[10,5,5],[5,5,5],[3.06161699911402e-16,5,5],[0,0,5] ]; $facets = [ [0,1,2],[2,1,3],[1,0,4],[5,1,4],[6,7,4],[8,2,9],[10,2,11],[11,12,13],[0,2,10],[0,10,6],[0,6,4],[11,2,8],[4,7,12],[4,12,8],[12,11,8],[14,4,8],[2,3,9],[9,3,15],[16,1,5],[17,18,5],[19,3,16],[20,21,5],[18,16,5],[3,1,16],[22,3,19],[21,3,22],[21,17,5],[21,22,17],[21,15,3],[23,17,22],[5,4,14],[20,5,14],[20,14,21],[21,14,8],[9,15,21],[8,9,21],[10,19,16],[6,10,16],[11,22,19],[10,11,19],[13,23,11],[11,23,22],[23,13,12],[17,23,12],[17,12,18],[18,12,7],[18,7,16],[16,7,6] ], } elsif ($name eq 'V') { $vertices = [ [-14,0,20],[-14,15,20],[0,0,0],[0,15,0],[-4,0,20],[-4,15,20],[5,0,7.14286],[10,0,0],[24,0,20],[14,0,20],[10,15,0],[5,15,7.14286],[14,15,20],[24,15,20] ]; $facets = [ [0,1,2],[2,1,3],[1,0,4],[5,1,4],[4,0,2],[6,4,2],[7,6,2],[8,9,7],[9,6,7],[2,3,7],[7,3,10],[1,5,3],[3,5,11],[11,12,13],[11,13,3],[3,13,10],[5,4,6],[11,5,6],[6,9,11],[11,9,12],[12,9,8],[13,12,8],[8,7,10],[13,8,10] ], } elsif ($name eq 'L') { $vertices = [ [0,10,0],[0,10,10],[0,20,0],[0,20,10],[10,10,0],[10,10,10],[20,20,0],[20,0,0],[10,0,0],[20,20,10],[10,0,10],[20,0,10] ]; $facets = [ [0,1,2],[2,1,3],[4,5,1],[0,4,1],[0,2,4],[4,2,6],[4,6,7],[4,7,8],[2,3,6],[6,3,9],[3,1,5],[9,3,5],[10,11,5],[11,9,5],[5,4,10],[10,4,8],[10,8,7],[11,10,7],[11,7,6],[9,11,6] ], } elsif ($name eq 'overhang') { $vertices = [ [1364.68505859375,614.398010253906,20.002498626709],[1389.68505859375,614.398010253906,20.002498626709],[1377.18505859375,589.398986816406,20.002498626709],[1389.68505859375,589.398986816406,20.002498626709],[1389.68505859375,564.398986816406,20.0014991760254],[1364.68505859375,589.398986816406,20.002498626709],[1364.68505859375,564.398986816406,20.0014991760254],[1360.93505859375,589.398986816406,17.0014991760254],[1360.93505859375,585.64697265625,17.0014991760254],[1357.18505859375,564.398986816406,17.0014991760254],[1364.68505859375,589.398986816406,17.0014991760254],[1364.68505859375,571.899963378906,17.0014991760254],[1364.68505859375,564.398986816406,17.0014991760254],[1348.43603515625,564.398986816406,17.0014991760254],[1352.80908203125,589.398986816406,17.0014991760254],[1357.18408203125,589.398986816406,17.0014991760254],[1357.18310546875,614.398010253906,17.0014991760254],[1364.68505859375,606.89599609375,17.0014991760254],[1364.68505859375,614.398010253906,17.0014991760254],[1352.18603515625,564.398986816406,20.0014991760254],[1363.65405273438,589.398986816406,23.3004989624023],[1359.46704101562,589.398986816406,23.3004989624023],[1358.37109375,564.398986816406,23.3004989624023],[1385.56103515625,564.398986816406,23.3004989624023],[1373.06311035156,589.398986816406,23.3004989624023],[1368.80810546875,564.398986816406,23.3004989624023],[1387.623046875,589.398986816406,23.3004989624023],[1387.623046875,585.276000976562,23.3004989624023],[1389.68505859375,589.398986816406,23.3004989624023],[1389.68505859375,572.64599609375,23.3004989624023],[1389.68505859375,564.398986816406,23.3004989624023],[1367.77709960938,589.398986816406,23.3004989624023],[1366.7470703125,564.398986816406,23.3004989624023],[1354.31201171875,589.398986816406,23.3004989624023],[1352.18603515625,564.398986816406,23.3004989624023],[1389.68505859375,614.398010253906,23.3004989624023],[1377.31701660156,614.398010253906,23.3004989624023],[1381.43908691406,589.398986816406,23.3004989624023],[1368.80700683594,614.398010253906,23.3004989624023],[1368.80810546875,589.398986816406,23.3004989624023],[1356.43908691406,614.398010253906,23.3004989624023],[1357.40502929688,589.398986816406,23.3004989624023],[1360.56201171875,614.398010253906,23.3004989624023],[1348.705078125,614.398010253906,23.3004989624023],[1350.44506835938,589.398986816406,23.3004989624023],[1389.68505859375,606.153015136719,23.3004989624023],[1347.35205078125,589.398986816406,23.3004989624023],[1346.56005859375,589.398986816406,23.3004989624023],[1346.56005859375,594.159912109375,17.0014991760254],[1346.56005859375,589.398986816406,17.0014991760254],[1346.56005859375,605.250427246094,23.3004989624023],[1346.56005859375,614.398010253906,23.3004989624023],[1346.56005859375,614.398010253906,20.8258285522461],[1346.56005859375,614.398010253906,17.0014991760254],[1346.56005859375,564.398986816406,19.10133934021],[1346.56005859375,567.548583984375,23.3004989624023],[1346.56005859375,564.398986816406,17.0020332336426],[1346.56005859375,564.398986816406,23.0018501281738],[1346.56005859375,564.398986816406,23.3004989624023],[1346.56005859375,575.118957519531,17.0014991760254],[1346.56005859375,574.754028320312,23.3004989624023] ]; $facets = [ [0,1,2],[2,3,4],[2,5,0],[4,6,2],[2,6,5],[2,1,3],[7,8,9],[10,9,8],[11,9,10],[12,9,11],[9,13,14],[7,15,16],[10,17,0],[10,0,5],[12,11,6],[18,16,0],[6,19,13],[6,13,9],[9,12,6],[17,18,0],[11,10,5],[11,5,6],[14,16,15],[17,7,18],[16,18,7],[14,15,9],[7,9,15],[7,17,8],[10,8,17],[20,21,22],[23,24,25],[26,23,27],[28,27,23],[29,28,23],[30,29,23],[25,31,32],[22,33,34],[35,36,37],[24,38,39],[21,40,41],[38,42,20],[33,43,44],[6,4,23],[6,23,25],[36,35,1],[1,0,38],[1,38,36],[29,30,4],[25,32,6],[40,42,0],[35,45,1],[4,3,28],[4,28,29],[3,1,45],[3,45,28],[22,34,19],[19,6,32],[19,32,22],[42,38,0],[30,23,4],[0,16,43],[0,43,40],[24,37,36],[38,24,36],[24,23,37],[37,23,26],[22,32,20],[20,32,31],[33,41,40],[43,33,40],[45,35,26],[37,26,35],[33,44,34],[44,43,46],[20,42,21],[40,21,42],[31,39,38],[20,31,38],[33,22,41],[21,41,22],[31,25,39],[24,39,25],[26,27,45],[28,45,27],[47,48,49],[47,50,48],[51,48,50],[52,48,51],[53,48,52],[54,55,56],[57,55,54],[58,55,57],[49,59,47],[60,56,55],[59,56,60],[60,47,59],[48,53,16],[56,13,19],[54,56,19],[56,59,13],[59,49,14],[59,14,13],[49,48,16],[49,16,14],[44,46,60],[44,60,55],[51,50,43],[19,34,58],[19,58,57],[53,52,16],[43,16,52],[43,52,51],[57,54,19],[47,60,46],[55,58,34],[55,34,44],[50,47,46],[50,46,43] ], } elsif ($name eq '40x10') { $vertices = [ [12.8680295944214,29.5799007415771,12],[11.7364797592163,29.8480796813965,12],[11.1571502685547,29.5300102233887,12],[10.5814504623413,29.9830799102783,12],[10,29.6000003814697,12],[9.41855144500732,29.9830799102783,12],[8.84284687042236,29.5300102233887,12],[8.26351833343506,29.8480796813965,12],[7.70256900787354,29.3210391998291,12],[7.13196802139282,29.5799007415771,12],[6.59579277038574,28.9761600494385,12],[6.03920221328735,29.1821594238281,12],[5.53865718841553,28.5003795623779,12],[5,28.6602592468262,12],[4.54657793045044,27.9006500244141,12],[4.02841377258301,28.0212306976318,12],[3.63402199745178,27.1856994628906,12],[3.13758301734924,27.2737407684326,12],[2.81429696083069,26.3659801483154,12],[2.33955597877502,26.4278793334961,12],[2.0993549823761,25.4534206390381,12],[1.64512205123901,25.4950904846191,12],[1.49962198734283,24.4613399505615,12],[1.0636739730835,24.4879894256592,12],[1.02384400367737,23.4042091369629,12],[0.603073298931122,23.4202003479004,12],[0.678958415985107,22.2974300384521,12],[0.269550800323486,22.3061599731445,12],[0.469994693994522,21.1571502685547,12],[0.067615881562233,21.1609306335449,12],[0.399999290704727,20,12],[0,20,12],[0.399999290704727,5,12],[0,5,12],[0.456633001565933,4.2804012298584,12],[0.0615576282143593,4.21782684326172,12],[0.625140011310577,3.5785219669342,12],[0.244717106223106,3.45491504669189,12],[0.901369392871857,2.91164398193359,12],[0.544967114925385,2.73004698753357,12],[1.27852201461792,2.29618692398071,12],[0.954914808273315,2.06107401847839,12],[1.74730801582336,1.74730801582336,12],[1.46446597576141,1.46446597576141,12],[2.29618692398071,1.27852201461792,12],[2.06107401847839,0.954914808273315,12],[2.91164398193359,0.901369392871857,12],[2.73004698753357,0.544967114925385,12],[3.5785219669342,0.625140011310577,12],[3.45491504669189,0.244717106223106,12],[4.2804012298584,0.456633001565933,12],[4.21782684326172,0.0615576282143593,12],[5,0.399999290704727,12],[5,0,12],[19.6000003814697,0.399999290704727,12],[20,0,12],[19.6000003814697,20,12],[20,20,12],[19.5300102233887,21.1571502685547,12],[19.9323806762695,21.1609306335449,12],[19.3210391998291,22.2974300384521,12],[19.7304496765137,22.3061599731445,12],[18.9761600494385,23.4042091369629,12],[19.3969306945801,23.4202003479004,12],[18.5003795623779,24.4613399505615,12],[18.9363307952881,24.4879894256592,12],[17.9006500244141,25.4534206390381,12],[18.3548793792725,25.4950904846191,12],[17.1856994628906,26.3659801483154,12],[17.6604404449463,26.4278793334961,12],[16.3659801483154,27.1856994628906,12],[16.862419128418,27.2737407684326,12],[15.4534196853638,27.9006500244141,12],[15.9715900421143,28.0212306976318,12],[14.4613399505615,28.5003795623779,12],[15,28.6602592468262,12],[13.4042100906372,28.9761600494385,12],[13.9608001708984,29.1821594238281,12],[12.2974300384521,29.3210391998291,12],[7.13196802139282,29.5799007415771,0],[8.26351833343506,29.8480796813965,0],[8.84284687042236,29.5300102233887,0],[9.41855144500732,29.9830799102783,0],[10,29.6000003814697,0],[10.5814504623413,29.9830799102783,0],[11.1571502685547,29.5300102233887,0],[11.7364797592163,29.8480796813965,0],[12.2974300384521,29.3210391998291,0],[12.8680295944214,29.5799007415771,0],[13.4042100906372,28.9761600494385,0],[13.9608001708984,29.1821594238281,0],[14.4613399505615,28.5003795623779,0],[15,28.6602592468262,0],[15.4534196853638,27.9006500244141,0],[15.9715900421143,28.0212306976318,0],[16.3659801483154,27.1856994628906,0],[16.862419128418,27.2737407684326,0],[17.1856994628906,26.3659801483154,0],[17.6604404449463,26.4278793334961,0],[17.9006500244141,25.4534206390381,0],[18.3548793792725,25.4950904846191,0],[18.5003795623779,24.4613399505615,0],[18.9363307952881,24.4879894256592,0],[18.9761600494385,23.4042091369629,0],[19.3969306945801,23.4202003479004,0],[19.3210391998291,22.2974300384521,0],[19.7304496765137,22.3061599731445,0],[19.5300102233887,21.1571502685547,0],[19.9323806762695,21.1609306335449,0],[19.6000003814697,20,0],[20,20,0],[19.6000003814697,0.399999290704727,0],[20,0,0],[5,0.399999290704727,0],[5,0,0],[4.2804012298584,0.456633001565933,0],[4.21782684326172,0.0615576282143593,0],[3.5785219669342,0.625140011310577,0],[3.45491504669189,0.244717106223106,0],[2.91164398193359,0.901369392871857,0],[2.73004698753357,0.544967114925385,0],[2.29618692398071,1.27852201461792,0],[2.06107401847839,0.954914808273315,0],[1.74730801582336,1.74730801582336,0],[1.46446597576141,1.46446597576141,0],[1.27852201461792,2.29618692398071,0],[0.954914808273315,2.06107401847839,0],[0.901369392871857,2.91164398193359,0],[0.544967114925385,2.73004698753357,0],[0.625140011310577,3.5785219669342,0],[0.244717106223106,3.45491504669189,0],[0.456633001565933,4.2804012298584,0],[0.0615576282143593,4.21782684326172,0],[0.399999290704727,5,0],[0,5,0],[0.399999290704727,20,0],[0,20,0],[0.469994693994522,21.1571502685547,0],[0.067615881562233,21.1609306335449,0],[0.678958415985107,22.2974300384521,0],[0.269550800323486,22.3061599731445,0],[1.02384400367737,23.4042091369629,0],[0.603073298931122,23.4202003479004,0],[1.49962198734283,24.4613399505615,0],[1.0636739730835,24.4879894256592,0],[2.0993549823761,25.4534206390381,0],[1.64512205123901,25.4950904846191,0],[2.81429696083069,26.3659801483154,0],[2.33955597877502,26.4278793334961,0],[3.63402199745178,27.1856994628906,0],[3.13758301734924,27.2737407684326,0],[4.54657793045044,27.9006500244141,0],[4.02841377258301,28.0212306976318,0],[5.53865718841553,28.5003795623779,0],[5,28.6602592468262,0],[6.59579277038574,28.9761600494385,0],[6.03920221328735,29.1821594238281,0],[7.70256900787354,29.3210391998291,0] ]; $facets = [ [0,1,2],[2,1,3],[2,3,4],[4,3,5],[4,5,6],[6,5,7],[6,7,8],[8,7,9],[8,9,10],[10,9,11],[10,11,12],[12,11,13],[12,13,14],[14,13,15],[14,15,16],[16,15,17],[16,17,18],[18,17,19],[18,19,20],[20,19,21],[20,21,22],[22,21,23],[22,23,24],[24,23,25],[24,25,26],[26,25,27],[26,27,28],[28,27,29],[28,29,30],[30,29,31],[30,31,32],[32,31,33],[32,33,34],[34,33,35],[34,35,36],[36,35,37],[36,37,38],[38,37,39],[38,39,40],[40,39,41],[40,41,42],[42,41,43],[42,43,44],[44,43,45],[44,45,46],[46,45,47],[46,47,48],[48,47,49],[48,49,50],[50,49,51],[50,51,52],[52,51,53],[52,53,54],[54,53,55],[54,55,56],[56,55,57],[56,57,58],[58,57,59],[58,59,60],[60,59,61],[60,61,62],[62,61,63],[62,63,64],[64,63,65],[64,65,66],[66,65,67],[66,67,68],[68,67,69],[68,69,70],[70,69,71],[70,71,72],[72,71,73],[72,73,74],[74,73,75],[74,75,76],[76,75,77],[76,77,78],[78,77,0],[78,0,2],[79,80,81],[81,80,82],[81,82,83],[83,82,84],[83,84,85],[85,84,86],[85,86,87],[87,86,88],[87,88,89],[89,88,90],[89,90,91],[91,90,92],[91,92,93],[93,92,94],[93,94,95],[95,94,96],[95,96,97],[97,96,98],[97,98,99],[99,98,100],[99,100,101],[101,100,102],[101,102,103],[103,102,104],[103,104,105],[105,104,106],[105,106,107],[107,106,108],[107,108,109],[109,108,110],[109,110,111],[111,110,112],[111,112,113],[113,112,114],[113,114,115],[115,114,116],[115,116,117],[117,116,118],[117,118,119],[119,118,120],[119,120,121],[121,120,122],[121,122,123],[123,122,124],[123,124,125],[125,124,126],[125,126,127],[127,126,128],[127,128,129],[129,128,130],[129,130,131],[131,130,132],[131,132,133],[133,132,134],[133,134,135],[135,134,136],[135,136,137],[137,136,138],[137,138,139],[139,138,140],[139,140,141],[141,140,142],[141,142,143],[143,142,144],[143,144,145],[145,144,146],[145,146,147],[147,146,148],[147,148,149],[149,148,150],[149,150,151],[151,150,152],[151,152,153],[153,152,154],[153,154,155],[155,154,156],[155,156,157],[157,156,79],[157,79,81],[57,110,108],[57,108,59],[59,108,106],[59,106,61],[61,106,104],[61,104,63],[63,104,102],[63,102,65],[65,102,100],[65,100,67],[67,100,98],[67,98,69],[69,98,96],[69,96,71],[71,96,94],[71,94,73],[73,94,92],[73,92,75],[75,92,90],[75,90,77],[77,90,88],[77,88,0],[0,88,86],[0,86,1],[1,86,84],[1,84,3],[3,84,82],[3,82,5],[5,82,80],[5,80,7],[7,80,79],[7,79,9],[9,79,156],[9,156,11],[11,156,154],[11,154,13],[13,154,152],[13,152,15],[15,152,150],[15,150,17],[17,150,148],[17,148,19],[19,148,146],[19,146,21],[21,146,144],[21,144,23],[23,144,142],[23,142,25],[25,142,140],[25,140,27],[27,140,138],[27,138,29],[29,138,136],[29,136,31],[33,31,134],[134,31,136],[33,134,132],[33,132,35],[35,132,130],[35,130,37],[37,130,128],[37,128,39],[39,128,126],[39,126,41],[41,126,124],[41,124,43],[43,124,122],[43,122,45],[45,122,120],[45,120,47],[47,120,118],[47,118,49],[49,118,116],[49,116,51],[51,116,114],[51,114,53],[55,53,112],[112,53,114],[57,55,110],[110,55,112],[30,135,137],[30,137,28],[28,137,139],[28,139,26],[26,139,141],[26,141,24],[24,141,143],[24,143,22],[22,143,145],[22,145,20],[20,145,147],[20,147,18],[18,147,149],[18,149,16],[16,149,151],[16,151,14],[14,151,153],[14,153,12],[12,153,155],[12,155,10],[10,155,157],[10,157,8],[8,157,81],[8,81,6],[6,81,83],[6,83,4],[4,83,85],[4,85,2],[2,85,87],[2,87,78],[78,87,89],[78,89,76],[76,89,91],[76,91,74],[74,91,93],[74,93,72],[72,93,95],[72,95,70],[70,95,97],[70,97,68],[68,97,99],[68,99,66],[66,99,101],[66,101,64],[64,101,103],[64,103,62],[62,103,105],[62,105,60],[60,105,107],[60,107,58],[58,107,109],[58,109,56],[30,32,135],[135,32,133],[52,113,115],[52,115,50],[50,115,117],[50,117,48],[48,117,119],[48,119,46],[46,119,121],[46,121,44],[44,121,123],[44,123,42],[42,123,125],[42,125,40],[40,125,127],[40,127,38],[38,127,129],[38,129,36],[36,129,131],[36,131,34],[34,131,133],[34,133,32],[52,54,113],[113,54,111],[54,56,111],[111,56,109] ], } elsif ($name eq 'sloping_hole') { $vertices = [ [-20,-20,-5],[-20,-20,5],[-20,20,-5],[-20,20,5],[20,-20,-5],[20,-20,5],[4.46294021606445,7.43144989013672,-5],[20,20,-5],[-19.1420993804932,0,-5],[-18.8330993652344,-2.07911992073059,-5],[-17.9195003509521,-4.06736993789673,-5],[-16.4412002563477,-5.87785005569458,-5],[-14.4629001617432,-7.43144989013672,-5],[-12.0711002349854,-8.66024971008301,-5],[-9.37016010284424,-9.51056003570557,-5],[-3.5217399597168,-9.94521999359131,-5],[-6.4782600402832,-9.94521999359131,-5],[-0.629840016365051,-9.51056003570557,-5],[2.07106995582581,-8.66024971008301,-5],[6.44122982025146,-5.87785005569458,-5],[4.46294021606445,-7.43144989013672,-5],[-12.0711002349854,8.66024971008301,-5],[-9.37016010284424,9.51056003570557,-5],[7.91947984695435,-4.06736993789673,-5],[8.83310031890869,-2.07911992073059,-5],[-6.4782600402832,9.94521999359131,-5],[-0.629840016365051,9.51056003570557,-5],[2.07106995582581,8.66024971008301,-5],[9.14214038848877,0,-5],[8.83310031890869,2.07911992073059,-5],[-3.5217399597168,9.94521999359131,-5],[7.91947984695435,4.06736993789673,-5],[6.44122982025146,5.87785005569458,-5],[-14.4629001617432,7.43144989013672,-5],[-16.4412002563477,5.87785005569458,-5],[-17.9195003509521,4.06736993789673,-5],[-18.8330993652344,2.07911992073059,-5],[20,20,5],[3.5217399597168,-9.94521999359131,5],[-8.83310031890869,-2.07911992073059,5],[-9.14214038848877,0,5],[-8.83310031890869,2.07911992073059,5],[6.4782600402832,-9.94521999359131,5],[-7.91947984695435,4.06736993789673,5],[-6.44122982025146,5.87785005569458,5],[-4.46294021606445,7.43144989013672,5],[-2.07106995582581,8.66024971008301,5],[0.629840016365051,9.51056003570557,5],[12.0711002349854,-8.66024971008301,5],[9.37016010284424,-9.51056003570557,5],[3.5217399597168,9.94521999359131,5],[6.4782600402832,9.94521999359131,5],[9.37016010284424,9.51056003570557,5],[12.0711002349854,8.66024971008301,5],[14.4629001617432,7.43144989013672,5],[16.4412002563477,-5.87785005569458,5],[14.4629001617432,-7.43144989013672,5],[16.4412002563477,5.87785005569458,5],[17.9195003509521,4.06736993789673,5],[18.8330993652344,-2.07911992073059,5],[17.9195003509521,-4.06736993789673,5],[18.8330993652344,2.07911992073059,5],[19.1420993804932,0,5],[0.629840016365051,-9.51056003570557,5],[-2.07106995582581,-8.66024971008301,5],[-4.46294021606445,-7.43144989013672,5],[-6.44122982025146,-5.87785005569458,5],[-7.91947984695435,-4.06736993789673,5] ]; $facets = [ [0,1,2],[2,1,3],[1,0,4],[5,1,4],[6,2,7],[0,2,8],[0,8,9],[0,9,10],[0,10,11],[0,11,12],[0,12,13],[0,13,4],[13,14,4],[15,4,16],[17,4,15],[18,4,17],[19,4,20],[18,20,4],[21,2,22],[4,19,23],[4,23,7],[23,24,7],[22,2,25],[26,2,27],[28,29,7],[25,2,30],[29,31,7],[30,2,26],[31,32,7],[27,2,6],[32,6,7],[28,7,24],[33,2,21],[34,2,33],[35,2,34],[36,2,35],[8,2,36],[16,4,14],[2,3,7],[7,3,37],[38,1,5],[3,1,39],[3,39,40],[3,40,41],[42,38,5],[3,41,43],[3,43,44],[37,3,45],[37,45,46],[37,46,47],[48,49,5],[37,47,50],[49,42,5],[37,50,51],[37,51,52],[37,52,53],[37,53,54],[55,56,5],[37,54,57],[37,57,58],[59,60,5],[37,58,61],[37,62,5],[37,61,62],[62,59,5],[60,55,5],[63,1,38],[64,1,63],[65,1,64],[66,1,65],[67,1,66],[39,1,67],[44,45,3],[56,48,5],[5,4,7],[37,5,7],[41,40,36],[36,40,8],[39,9,40],[40,9,8],[43,41,35],[35,41,36],[44,43,34],[34,43,35],[33,45,44],[34,33,44],[21,46,45],[33,21,45],[22,47,46],[21,22,46],[25,50,47],[22,25,47],[30,51,50],[25,30,50],[26,52,51],[30,26,51],[27,53,52],[26,27,52],[6,54,53],[27,6,53],[32,57,54],[6,32,54],[31,58,57],[32,31,57],[29,61,58],[31,29,58],[28,62,61],[29,28,61],[59,62,28],[24,59,28],[60,59,24],[23,60,24],[55,60,23],[19,55,23],[55,19,56],[56,19,20],[56,20,48],[48,20,18],[48,18,49],[49,18,17],[49,17,42],[42,17,15],[42,15,38],[38,15,16],[38,16,63],[63,16,14],[63,14,64],[64,14,13],[64,13,65],[65,13,12],[65,12,66],[66,12,11],[66,11,67],[67,11,10],[67,10,39],[39,10,9] ], } elsif ($name eq 'ipadstand') { $vertices = [ [17.4344673156738,-2.69879599481136e-16,9.5],[14.2814798355103,10,9.5],[0,0,9.5],[31.7159481048584,10,9.5],[62.2344741821289,2.06667568800577e-16,20],[31.7159481048584,10,20],[17.4344673156738,-2.69879599481136e-16,20],[62.2344741821289,10,20],[98.2079696655273,10,0],[98.2079696655273,8.56525380796383e-16,10],[98.2079696655273,0,0],[98.2079696655273,10,20],[98.2079696655273,0,20],[81.6609649658203,-4.39753856997999e-16,10],[90.0549850463867,10,10],[78.5079803466797,10,10],[93.2079696655273,8.56525380796383e-16,10],[14.2814798355103,10,20],[0,0,20],[87.4344711303711,2.81343962782118e-15,20],[84.2814788818359,10,20],[0,10,20],[0,0,0],[0,10,0],[62.2344741821289,2.06667568800577e-16,30],[66.9609756469727,10,30],[62.2344741821289,10,30],[70.1139602661133,8.5525763717214e-16,30],[67.7053375244141,10,28.7107200622559],[71.6787109375,1.24046736339707e-15,27.2897701263428] ]; $facets = [ [0,1,2],[1,0,3],[4,5,6],[5,4,7],[8,9,10],[9,11,12],[11,9,8],[13,14,15],[14,13,16],[17,2,1],[2,17,18],[19,11,20],[11,19,12],[17,21,18],[21,2,18],[2,21,22],[22,21,23],[8,22,23],[22,8,10],[24,25,26],[25,24,27],[23,1,8],[1,23,21],[1,21,17],[5,15,3],[15,5,7],[15,7,28],[28,7,26],[28,26,25],[8,14,11],[14,8,3],[3,8,1],[14,3,15],[11,14,20],[26,4,24],[4,26,7],[12,16,9],[16,12,19],[29,4,13],[4,29,24],[24,29,27],[9,22,10],[22,9,0],[0,9,16],[0,16,13],[0,13,6],[6,13,4],[2,22,0],[19,14,16],[14,19,20],[15,29,13],[29,25,27],[25,29,15],[25,15,28],[6,3,0],[3,6,5] ]; } elsif ($name eq 'A') { $vertices = [ [513.075988769531,51.6074333190918,36.0009002685547],[516.648803710938,51.7324333190918,36.0009002685547],[513.495178222656,51.7324333190918,36.0009002685547],[489.391204833984,51.4824333190918,24.0011005401611],[488.928588867188,51.7324333190918,24.0011005401611],[492.06201171875,51.7324333190918,24.0011005401611],[496.840393066406,51.2324333190918,24.0011005401611],[495.195404052734,51.7324333190918,24.0011005401611],[498.981994628906,51.7324333190918,24.0011005401611],[506.966613769531,51.6074333190918,24.0011005401611],[510.342010498047,51.7324333190918,24.0011005401611],[507.163818359375,51.6074333190918,24.0011005401611],[512.515380859375,54.7190322875977,36.0009002685547],[514.161987304688,54.5058326721191,36.0009002685547],[493.06201171875,54.7190322875977,36.0009002685547],[495.195404052734,51.7324333190918,36.0009002685547],[496.195404052734,54.7190322875977,36.0009002685547],[497.195404052734,57.7058334350586,36.0009002685547],[500.851989746094,60.2658309936523,36.0009002685547],[498.915405273438,62.8258323669434,36.0009002685547],[506.701995849609,62.8258323669434,36.0009002685547],[503.648590087891,60.2658309936523,36.0009002685547],[508.381805419922,57.7058334350586,36.0009002685547],[496.418792724609,60.052433013916,36.0009002685547],[506.515197753906,72.2124328613281,36.0009002685547],[502.808807373047,74.5324325561523,36.0009002685547],[503.781982421875,71.6058349609375,36.0009002685547],[515.358764648438,55.4658317565918,36.0009002685547],[499.375183105469,76.9058380126953,36.0009002685547],[501.168792724609,78.0658340454102,36.0009002685547],[504.568786621094,78.0658340454102,36.0009002685547],[506.32861328125,81.599235534668,36.0009002685547],[502.928588867188,81.599235534668,36.0009002685547],[499.528594970703,81.599235534668,36.0009002685547],[498.20361328125,77.8658294677734,36.0009002685547],[495.195404052734,51.7324333190918,30.0011005401611],[498.981994628906,51.7324333190918,27.0011005401611],[506.555206298828,51.7324333190918,33.0009002685547],[506.555206298828,51.7324333190918,36.0009002685547],[510.342010498047,51.7324333190918,36.0009002685547],[512.515380859375,54.7190322875977,24.0011005401611],[509.361999511719,54.7190322875977,24.0011005401611],[508.381805419922,57.7058334350586,24.0011005401611],[506.701995849609,62.8258323669434,24.0011005401611],[509.188812255859,60.052433013916,24.0011005401611],[493.06201171875,54.7190322875977,24.0011005401611],[503.648590087891,60.2658309936523,24.0011005401611],[500.851989746094,60.2658309936523,24.0011005401611],[498.915405273438,62.8258323669434,24.0011005401611],[502.808807373047,62.8258323669434,24.0011005401611],[491.425201416016,54.5058326721191,24.0011005401611],[506.421813964844,76.9058380126953,24.0011005401611],[502.808807373047,74.5324325561523,24.0011005401611],[504.568786621094,78.0658340454102,24.0011005401611],[506.32861328125,81.599235534668,24.0011005401611],[507.618804931641,77.8658294677734,24.0011005401611],[499.221801757812,72.2124328613281,24.0011005401611],[501.835388183594,71.6058349609375,24.0011005401611],[501.168792724609,78.0658340454102,24.0011005401611],[499.528594970703,81.599235534668,24.0011005401611],[502.048583984375,79.8324356079102,24.0011005401611],[490.253601074219,55.4658317565918,24.0011005401611],[488.928588867188,51.7324333190918,30.0011005401611],[488.928588867188,51.7324333190918,36.0009002685547],[490.253601074219,55.4658317565918,31.5009002685547],[498.20361328125,77.8658294677734,34.5009002685547],[508.381805419922,57.7058334350586,30.0011005401611],[505.585388183594,57.7058334350586,27.0011005401611],[502.788818359375,57.7058334350586,36.0009002685547],[499.992004394531,57.7058334350586,33.0009002685547],[509.851989746094,53.2258338928223,33.0009002685547],[509.361999511719,54.7190322875977,36.0009002685547],[508.871795654297,56.2124328613281,27.0011005401611],[496.695404052734,56.2124328613281,33.0009002685547],[495.695404052734,53.2258338928223,27.0011005401611],[506.32861328125,81.599235534668,30.0011005401611],[507.618804931641,77.8658294677734,25.5011005401611],[515.358764648438,55.4658317565918,34.5009002685547],[501.228607177734,81.599235534668,33.0009002685547],[504.628601074219,81.599235534668,27.0011005401611],[503.781982421875,71.6058349609375,33.0009002685547],[502.808807373047,74.5324325561523,30.0011005401611],[498.915405273438,62.8258323669434,30.0011005401611],[500.861999511719,62.8258323669434,27.0011005401611],[502.808807373047,62.8258323669434,36.0009002685547],[504.755187988281,62.8258323669434,33.0009002685547],[501.835388183594,71.6058349609375,33.0009002685547],[499.888793945312,65.7524337768555,33.0009002685547],[499.888793945312,65.7524337768555,36.0009002685547],[513.128601074219,51.4824333190918,36.0009002685547],[513.075988769531,51.6074333190918,24.0011005401611],[516.648803710938,51.7324333190918,24.0011005401611],[513.128601074219,51.4824333190918,24.0011005401611],[513.495178222656,51.7324333190918,24.0011005401611],[506.966613769531,51.6074333190918,36.0009002685547],[507.163818359375,51.6074333190918,36.0009002685547],[490.337799072266,51.4824333190918,24.0011005401611],[489.391204833984,51.4824333190918,36.0009002685547],[492.06201171875,51.7324333190918,36.0009002685547],[490.337799072266,51.4824333190918,36.0009002685547],[513.233764648438,51.2324333190918,24.0011005401611],[513.233764648438,51.2324333190918,36.0009002685547],[504.773803710938,51.4824333190918,36.0009002685547],[504.773803710938,51.4824333190918,24.0011005401611],[489.266998291016,51.2324333190918,24.0011005401611],[489.266998291016,51.2324333190918,36.0009002685547],[490.253601074219,55.4658317565918,25.5011005401611],[499.528594970703,81.599235534668,30.0011005401611],[498.20361328125,77.8658294677734,31.5009002685547],[515.358764648438,55.4658317565918,28.5011005401611],[515.358764648438,55.4658317565918,25.5011005401611],[495.246795654297,61.0124320983887,36.0009002685547],[490.253601074219,55.4658317565918,34.5009002685547],[490.253601074219,55.4658317565918,36.0009002685547],[494.228607177734,66.6658325195312,24.0011005401611],[499.068786621094,67.5192337036133,24.0011005401611],[498.20361328125,77.8658294677734,25.5011005401611],[498.20361328125,77.8658294677734,24.0011005401611],[506.608795166016,67.5192337036133,36.0009002685547],[509.09521484375,64.7458343505859,36.0009002685547],[507.618804931641,77.8658294677734,34.5009002685547],[507.618804931641,77.8658294677734,36.0009002685547],[510.385406494141,61.0124320983887,24.0011005401611],[515.358764648438,55.4658317565918,24.0011005401611],[489.32861328125,47.7324333190918,31.5009002685547],[492.95361328125,47.7324333190918,33.5634994506836],[489.32861328125,47.7324333190918,34.5009002685547],[489.32861328125,47.7324333190918,28.5011005401611],[489.32861328125,47.7324333190918,25.5011005401611],[492.95361328125,47.7324333190918,26.4385013580322],[492.95361328125,47.7324333190918,30.5635013580322],[492.95361328125,47.7324333190918,32.0634994506836],[492.95361328125,47.7324333190918,31.3135013580322],[492.95361328125,47.7324333190918,35.4384994506836],[489.32861328125,47.7324333190918,36.0009002685547],[492.95361328125,47.7324333190918,34.3134994506836],[492.95361328125,47.7324333190918,34.6884994506836],[492.95361328125,47.7324333190918,27.9385013580322],[492.95361328125,47.7324333190918,28.6885013580322],[492.95361328125,47.7324333190918,29.0635013580322],[489.32861328125,47.7324333190918,24.0011005401611],[492.95361328125,47.7324333190918,24.5635013580322],[492.95361328125,47.7324333190918,25.6885013580322],[492.95361328125,47.7324333190918,25.3135013580322],[492.95361328125,47.7324333190918,24.1885013580322],[492.95361328125,47.7324333190918,24.0011005401611],[513.443786621094,50.7324333190918,24.0011005401611],[492.95361328125,47.7324333190918,35.8134994506836],[492.95361328125,47.7324333190918,36.0009002685547],[513.443786621094,50.7324333190918,36.0009002685547],[506.350402832031,51.4824333190918,36.0009002685547],[506.350402832031,51.4824333190918,24.0011005401611],[492.743804931641,48.2324333190918,24.0011005401611],[492.638793945312,48.4824333190918,24.0011005401611],[492.743804931641,48.2324333190918,36.0009002685547],[492.638793945312,48.4824333190918,36.0009002685547],[490.089599609375,50.9824333190918,36.0009002685547],[490.089599609375,50.9824333190918,24.0011005401611],[510.342010498047,51.7324333190918,30.0011005401611],[499.068786621094,67.5192337036133,36.0009002685547],[494.228607177734,66.6658325195312,36.0009002685547],[499.375183105469,76.9058380126953,24.0011005401611],[506.421813964844,76.9058380126953,36.0009002685547],[506.608795166016,67.5192337036133,24.0011005401611],[505.728607177734,65.7524337768555,24.0011005401611],[509.09521484375,64.7458343505859,24.0011005401611],[506.701995849609,62.8258323669434,30.0011005401611],[505.728607177734,65.7524337768555,27.0011005401611],[501.835388183594,71.6058349609375,27.0011005401611],[499.888793945312,65.7524337768555,27.0011005401611],[494.228607177734,66.6658325195312,30.0011005401611],[495.553588867188,70.3992309570312,28.5011005401611],[492.903594970703,62.9324340820312,28.5011005401611],[495.553588867188,70.3992309570312,31.5009002685547],[492.903594970703,62.9324340820312,31.5009002685547],[511.488800048828,66.6658325195312,24.0011005401611],[511.488800048828,66.6658325195312,30.0011005401611],[512.778564453125,62.9324340820312,28.5011005401611],[515.358764648438,55.4658317565918,31.5009002685547],[507.618804931641,77.8658294677734,31.5009002685547],[510.198791503906,70.3992309570312,28.5011005401611],[511.488800048828,66.6658325195312,36.0009002685547],[512.778564453125,62.9324340820312,31.5009002685547],[510.198791503906,70.3992309570312,31.5009002685547],[502.788818359375,57.7058334350586,24.0011005401611],[497.195404052734,57.7058334350586,30.0011005401611],[492.903594970703,62.9324340820312,34.5009002685547],[492.903594970703,62.9324340820312,36.0009002685547],[495.553588867188,70.3992309570312,24.0011005401611],[496.725189208984,69.4392318725586,24.0011005401611],[495.553588867188,70.3992309570312,25.5011005401611],[495.246795654297,61.0124320983887,24.0011005401611],[492.903594970703,62.9324340820312,25.5011005401611],[492.903594970703,62.9324340820312,24.0011005401611],[495.553588867188,70.3992309570312,36.0009002685547],[496.725189208984,69.4392318725586,36.0009002685547],[495.553588867188,70.3992309570312,34.5009002685547],[510.198791503906,70.3992309570312,36.0009002685547],[509.002014160156,69.4392318725586,36.0009002685547],[510.198791503906,70.3992309570312,34.5009002685547],[512.778564453125,62.9324340820312,25.5011005401611],[512.778564453125,62.9324340820312,24.0011005401611],[510.198791503906,70.3992309570312,24.0011005401611],[509.002014160156,69.4392318725586,24.0011005401611],[510.198791503906,70.3992309570312,25.5011005401611],[510.385406494141,61.0124320983887,36.0009002685547],[512.778564453125,62.9324340820312,34.5009002685547],[512.778564453125,62.9324340820312,36.0009002685547],[496.840393066406,51.2324333190918,36.0009002685547],[498.981994628906,51.7324333190918,36.0009002685547],[498.981994628906,51.7324333190918,33.0009002685547],[506.555206298828,51.7324333190918,24.0011005401611],[506.555206298828,51.7324333190918,27.0011005401611],[503.82861328125,47.7324333190918,30.7509002685547],[507.45361328125,47.7324333190918,32.8134994506836],[503.82861328125,47.7324333190918,33.7509002685547],[503.82861328125,47.7324333190918,29.2511005401611],[503.82861328125,47.7324333190918,26.2511005401611],[507.45361328125,47.7324333190918,27.1885013580322],[493.921813964844,57.2792320251465,36.0009002685547],[491.425201416016,54.5058326721191,36.0009002685547],[497.195404052734,57.7058334350586,24.0011005401611],[496.418792724609,60.052433013916,24.0011005401611],[509.188812255859,60.052433013916,36.0009002685547],[511.675415039062,57.2792320251465,24.0011005401611],[514.161987304688,54.5058326721191,24.0011005401611],[507.45361328125,47.7324333190918,34.3134994506836],[503.82861328125,47.7324333190918,35.2509002685547],[507.45361328125,47.7324333190918,25.6885013580322],[503.82861328125,47.7324333190918,24.7511005401611],[500.20361328125,47.7324333190918,31.6885013580322],[500.20361328125,47.7324333190918,28.3135013580322],[500.20361328125,47.7324333190918,30.1885013580322],[507.45361328125,47.7324333190918,29.8135013580322],[507.45361328125,47.7324333190918,31.3135013580322],[507.45361328125,47.7324333190918,30.5635013580322],[503.82861328125,47.7324333190918,36.0009002685547],[507.45361328125,47.7324333190918,35.4384994506836],[507.45361328125,47.7324333190918,35.0634994506836],[507.45361328125,47.7324333190918,28.6885013580322],[507.45361328125,47.7324333190918,29.4385013580322],[503.82861328125,47.7324333190918,24.0011005401611],[507.45361328125,47.7324333190918,24.5635013580322],[507.45361328125,47.7324333190918,24.9385013580322],[500.20361328125,47.7324333190918,34.6884994506836],[500.20361328125,47.7324333190918,33.1884994506836],[500.20361328125,47.7324333190918,33.9384994506836],[500.20361328125,47.7324333190918,25.3135013580322],[500.20361328125,47.7324333190918,26.8135013580322],[500.20361328125,47.7324333190918,26.0635013580322],[500.20361328125,47.7324333190918,30.9385013580322],[500.20361328125,47.7324333190918,35.0634994506836],[500.20361328125,47.7324333190918,35.4384994506836],[500.20361328125,47.7324333190918,29.0635013580322],[500.20361328125,47.7324333190918,29.4385013580322],[500.20361328125,47.7324333190918,24.9385013580322],[500.20361328125,47.7324333190918,24.5635013580322],[507.45361328125,47.7324333190918,24.1885013580322],[507.45361328125,47.7324333190918,24.0011005401611],[513.86376953125,49.7324333190918,24.0011005401611],[507.45361328125,47.7324333190918,35.8134994506836],[507.45361328125,47.7324333190918,36.0009002685547],[513.86376953125,49.7324333190918,36.0009002685547],[500.20361328125,47.7324333190918,24.1885013580322],[500.20361328125,47.7324333190918,24.0011005401611],[502.988800048828,49.7324333190918,24.0011005401611],[500.20361328125,47.7324333190918,35.8134994506836],[500.20361328125,47.7324333190918,36.0009002685547],[502.988800048828,49.7324333190918,36.0009002685547],[504.755187988281,62.8258323669434,27.0011005401611],[499.205383300781,51.2324333190918,36.0009002685547],[498.786193847656,51.1074333190918,36.0009002685547],[502.358795166016,51.2324333190918,36.0009002685547],[499.205383300781,51.2324333190918,24.0011005401611],[502.358795166016,51.2324333190918,24.0011005401611],[498.786193847656,51.1074333190918,24.0011005401611],[502.568786621094,50.7324333190918,24.0011005401611],[505.931213378906,51.3574333190918,24.0011005401611],[509.503601074219,51.4824333190918,24.0011005401611],[502.568786621094,50.7324333190918,36.0009002685547],[505.931213378906,51.3574333190918,36.0009002685547],[509.503601074219,51.4824333190918,36.0009002685547],[499.048583984375,50.4824333190918,36.0009002685547],[492.428588867188,48.9824333190918,36.0009002685547],[499.048583984375,50.4824333190918,24.0011005401611],[492.428588867188,48.9824333190918,24.0011005401611],[506.088806152344,50.9824333190918,24.0011005401611],[506.036010742188,51.1074333190918,24.0011005401611],[506.088806152344,50.9824333190918,36.0009002685547],[506.036010742188,51.1074333190918,36.0009002685547],[498.891204833984,50.8574333190918,36.0009002685547],[498.943786621094,50.7324333190918,36.0009002685547],[498.891204833984,50.8574333190918,24.0011005401611],[498.943786621094,50.7324333190918,24.0011005401611],[499.573608398438,49.2324333190918,24.0011005401611],[499.783813476562,48.7324333190918,24.0011005401611],[499.573608398438,49.2324333190918,36.0009002685547],[499.783813476562,48.7324333190918,36.0009002685547],[506.403594970703,50.2324333190918,24.0011005401611],[506.298797607422,50.4824333190918,24.0011005401611],[506.403594970703,50.2324333190918,36.0009002685547],[506.298797607422,50.4824333190918,36.0009002685547],[501.228607177734,81.599235534668,27.0011005401611],[502.928588867188,81.599235534668,24.0011005401611],[499.2587890625,49.9824333190918,36.0009002685547],[499.363800048828,49.7324333190918,36.0009002685547],[499.2587890625,49.9824333190918,24.0011005401611],[499.363800048828,49.7324333190918,24.0011005401611],[496.695404052734,56.2124328613281,27.0011005401611],[496.195404052734,54.7190322875977,24.0011005401611],[509.851989746094,53.2258338928223,27.0011005401611],[493.464782714844,51.1074333190918,36.0009002685547],[493.464782714844,51.1074333190918,24.0011005401611],[502.768798828125,51.7324333190918,24.0011005401611],[500.215789794922,51.3574333190918,24.0011005401611],[497.628601074219,51.2324333190918,24.0011005401611],[502.768798828125,51.7324333190918,36.0009002685547],[500.215789794922,51.3574333190918,36.0009002685547],[497.628601074219,51.2324333190918,36.0009002685547],[507.033813476562,48.7324333190918,24.0011005401611],[506.823791503906,49.2324333190918,24.0011005401611],[507.033813476562,48.7324333190918,36.0009002685547],[506.823791503906,49.2324333190918,36.0009002685547],[494.4501953125,51.1074333190918,24.0011005401611],[494.4501953125,51.1074333190918,36.0009002685547],[500.807006835938,51.3574333190918,36.0009002685547],[503.591186523438,51.4824333190918,36.0009002685547],[503.591186523438,51.4824333190918,24.0011005401611],[500.807006835938,51.3574333190918,24.0011005401611],[505.728607177734,65.7524337768555,36.0009002685547],[505.728607177734,65.7524337768555,33.0009002685547],[499.221801757812,72.2124328613281,36.0009002685547],[501.835388183594,71.6058349609375,36.0009002685547],[506.515197753906,72.2124328613281,24.0011005401611],[503.781982421875,71.6058349609375,24.0011005401611],[503.781982421875,71.6058349609375,27.0011005401611],[499.888793945312,65.7524337768555,24.0011005401611],[495.695404052734,53.2258338928223,33.0009002685547],[516.648803710938,51.7324333190918,30.0011005401611],[498.20361328125,77.8658294677734,28.5011005401611],[505.585388183594,57.7058334350586,33.0009002685547],[508.871795654297,56.2124328613281,33.0009002685547],[499.992004394531,57.7058334350586,27.0011005401611],[504.628601074219,81.599235534668,33.0009002685547],[500.861999511719,62.8258323669434,33.0009002685547],[496.878601074219,74.1324310302734,27.0011005401611],[496.878601074219,74.1324310302734,33.0009002685547],[491.57861328125,59.199031829834,27.0011005401611],[490.253601074219,55.4658317565918,28.5011005401611],[491.57861328125,59.199031829834,33.0009002685547],[514.068786621094,59.199031829834,27.0011005401611],[514.068786621094,59.199031829834,33.0009002685547],[508.908813476562,74.1324310302734,27.0011005401611],[507.618804931641,77.8658294677734,28.5011005401611],[508.908813476562,74.1324310302734,33.0009002685547],[491.271789550781,50.9824333190918,36.0009002685547],[490.877807617188,50.9824333190918,36.0009002685547],[491.271789550781,50.9824333190918,24.0011005401611],[490.877807617188,50.9824333190918,24.0011005401611],[495.213806152344,50.9824333190918,36.0009002685547],[493.636993408203,50.9824333190918,36.0009002685547],[495.213806152344,50.9824333190918,24.0011005401611],[493.636993408203,50.9824333190918,24.0011005401611],[503.985412597656,51.4824333190918,36.0009002685547],[503.985412597656,51.4824333190918,24.0011005401611],[511.675415039062,57.2792320251465,36.0009002685547],[493.921813964844,57.2792320251465,24.0011005401611],[502.768798828125,51.7324333190918,30.0011005401611],[506.555206298828,51.7324333190918,30.0011005401611],[498.981994628906,51.7324333190918,30.0011005401611],[492.848815917969,50.9824333190918,24.0011005401611],[492.848815917969,50.9824333190918,36.0009002685547],[500.861999511719,68.6792297363281,36.0009002685547],[500.861999511719,68.6792297363281,24.0011005401611],[496.878601074219,74.1324310302734,24.0011005401611],[496.878601074219,74.1324310302734,36.0009002685547],[504.755187988281,68.6792297363281,24.0011005401611],[504.755187988281,68.6792297363281,36.0009002685547],[508.908813476562,74.1324310302734,36.0009002685547],[508.908813476562,74.1324310302734,24.0011005401611],[505.728607177734,65.7524337768555,30.0011005401611],[504.755187988281,68.6792297363281,30.0011005401611],[503.781982421875,71.6058349609375,30.0011005401611],[500.861999511719,68.6792297363281,30.0011005401611],[499.888793945312,65.7524337768555,30.0011005401611],[501.835388183594,71.6058349609375,30.0011005401611],[491.57861328125,59.199031829834,24.0011005401611],[491.57861328125,59.199031829834,36.0009002685547],[514.068786621094,59.199031829834,36.0009002685547],[514.068786621094,59.199031829834,24.0011005401611],[511.07861328125,47.7324333190918,34.8759002685547],[511.07861328125,47.7324333190918,31.8759002685547],[514.70361328125,47.7324333190918,33.9384994506836],[511.07861328125,47.7324333190918,25.1261005401611],[514.70361328125,47.7324333190918,26.0635013580322],[511.07861328125,47.7324333190918,28.1261005401611],[502.788818359375,57.7058334350586,30.0011005401611],[502.048583984375,79.8324356079102,36.0009002685547],[514.70361328125,47.7324333190918,30.9385013580322],[511.07861328125,47.7324333190918,30.3759002685547],[514.70361328125,47.7324333190918,29.0635013580322],[511.07861328125,47.7324333190918,29.6261005401611],[496.57861328125,47.7324333190918,31.1259002685547],[496.57861328125,47.7324333190918,32.6259002685547],[496.57861328125,47.7324333190918,34.1259002685547],[496.57861328125,47.7324333190918,28.8761005401611],[496.57861328125,47.7324333190918,27.3761005401611],[496.57861328125,47.7324333190918,25.8761005401611],[496.57861328125,47.7324333190918,29.6261005401611],[514.70361328125,47.7324333190918,35.4384994506836],[511.07861328125,47.7324333190918,35.6259002685547],[514.70361328125,47.7324333190918,24.5635013580322],[511.07861328125,47.7324333190918,24.3761005401611],[496.57861328125,47.7324333190918,34.8759002685547],[496.57861328125,47.7324333190918,25.1261005401611],[496.57861328125,47.7324333190918,35.6259002685547],[496.57861328125,47.7324333190918,24.3761005401611],[511.07861328125,47.7324333190918,36.0009002685547],[511.07861328125,47.7324333190918,24.0011005401611],[514.70361328125,47.7324333190918,30.1885013580322],[514.70361328125,47.7324333190918,35.8134994506836],[514.70361328125,47.7324333190918,29.8135013580322],[514.70361328125,47.7324333190918,24.1885013580322],[496.57861328125,47.7324333190918,36.0009002685547],[496.57861328125,47.7324333190918,24.0011005401611],[510.238800048828,49.7324333190918,24.0011005401611],[510.238800048828,49.7324333190918,36.0009002685547],[514.70361328125,47.7324333190918,24.0011005401611],[514.70361328125,47.7324333190918,36.0009002685547],[496.158813476562,48.7324333190918,36.0009002685547],[496.158813476562,48.7324333190918,24.0011005401611],[502.808807373047,62.8258323669434,30.0011005401611],[509.608795166016,51.2324333190918,24.0011005401611],[509.608795166016,51.2324333190918,36.0009002685547],[491.641204833984,50.8574333190918,24.0011005401611],[495.423797607422,50.4824333190918,36.0009002685547],[495.423797607422,50.4824333190918,24.0011005401611],[491.641204833984,50.8574333190918,36.0009002685547],[495.528594970703,50.2324333190918,24.0011005401611],[492.0087890625,49.9824333190918,24.0011005401611],[509.818786621094,50.7324333190918,24.0011005401611],[495.948608398438,49.2324333190918,36.0009002685547],[495.528594970703,50.2324333190918,36.0009002685547],[495.948608398438,49.2324333190918,24.0011005401611],[509.818786621094,50.7324333190918,36.0009002685547],[492.0087890625,49.9824333190918,36.0009002685547],[491.956207275391,50.1074333190918,24.0011005401611],[491.956207275391,50.1074333190918,36.0009002685547],[502.928588867188,81.599235534668,30.0011005401611],[491.851013183594,50.3574333190918,36.0009002685547],[491.851013183594,50.3574333190918,24.0011005401611],[496.195404052734,54.7190322875977,30.0011005401611],[509.361999511719,54.7190322875977,30.0011005401611],[488.632598876953,51.7256317138672,30.0011005401611],[488.632598876953,51.7256317138672,29.5091018676758],[488.632598876953,51.7188339233398,24.0011005401611],[488.632598876953,51.7256317138672,27.4929008483887],[488.632598876953,51.7324333190918,30.0011005401611],[488.632598876953,51.7324333190918,29.0175018310547],[488.632598876953,51.7324333190918,24.9847011566162],[488.632598876953,51.7324333190918,24.0011005401611],[488.632598876953,51.7188339233398,30.0011005401611],[488.632598876953,51.7176322937012,24.0011005401611],[488.632598876953,51.7182312011719,30.0011005401611],[488.632598876953,51.7176322937012,30.0011005401611],[488.632598876953,51.715030670166,24.0011005401611],[488.632598876953,51.7162322998047,30.0011005401611],[488.632598876953,50.761833190918,24.0011005401611],[488.632598876953,50.7578315734863,24.0011005401611],[488.632598876953,50.7598342895508,30.0011005401611],[488.632598876953,50.7522315979004,24.0011005401611],[488.632598876953,49.7838325500488,24.0011005401611],[488.632598876953,50.2680320739746,30.0011005401611],[488.632598876953,51.7046318054199,24.0011005401611],[488.632598876953,51.709831237793,30.0011005401611],[488.632598876953,50.9120330810547,24.0011005401611],[488.632598876953,50.8882331848145,24.0011005401611],[488.632598876953,50.9002304077148,30.0011005401611],[488.632598876953,47.7324333190918,24.0370998382568],[488.632598876953,48.5612335205078,30.0011005401611],[488.632598876953,47.7324333190918,24.0011005401611],[488.632598876953,47.7324333190918,24.1091003417969],[488.632598876953,48.5612335205078,30.0189018249512],[488.632598876953,47.7324333190918,25.3211002349854],[488.632598876953,48.5612335205078,30.0551013946533],[488.632598876953,47.7324333190918,25.4651012420654],[488.632598876953,48.5612335205078,30.6609001159668],[488.632598876953,47.7324333190918,25.5371017456055],[488.632598876953,48.5612335205078,30.7329006195068],[488.632598876953,47.7324333190918,25.6091003417969],[488.632598876953,48.5612335205078,30.7689018249512],[488.632598876953,47.7324333190918,25.8971004486084],[488.632598876953,48.5612335205078,30.8051013946533],[488.632598876953,47.7324333190918,28.321102142334],[488.632598876953,48.5612335205078,30.9491004943848],[488.632598876953,47.7324333190918,28.4651012420654],[488.632598876953,48.5612335205078,32.1609001159668],[488.632598876953,47.7324333190918,28.5371017456055],[488.632598876953,48.5612335205078,32.2329025268555],[488.632598876953,47.7324333190918,28.6811008453369],[488.632598876953,48.5612335205078,32.2689018249512],[488.632598876953,47.7324333190918,31.1049003601074],[488.632598876953,48.5612335205078,32.3411026000977],[488.632598876953,47.7324333190918,31.3929004669189],[488.632598876953,49.3900299072266,36.0009002685547],[488.632598876953,47.7324333190918,31.536901473999],[488.632598876953,47.7324333190918,31.6809005737305],[488.632598876953,47.7324333190918,34.1049003601074],[488.632598876953,47.7324333190918,34.3929023742676],[488.632598876953,47.7324333190918,34.464900970459],[488.632598876953,47.7324333190918,34.5369033813477],[488.632598876953,47.7324333190918,34.6809005737305],[488.632598876953,47.7324333190918,35.8929023742676],[488.632598876953,47.7324333190918,35.964900970459],[488.632598876953,47.7324333190918,36.0009002685547],[488.632598876953,50.8816299438477,24.0011005401611],[488.632598876953,50.8850326538086,30.0011005401611],[488.632598876953,49.7480316162109,24.0011005401611],[488.632598876953,49.7426300048828,24.0011005401611],[488.632598876953,49.745231628418,30.0011005401611],[488.632598876953,49.7592315673828,24.0011005401611],[488.632598876953,49.7536315917969,30.0011005401611],[488.632598876953,49.3900299072266,24.0011005401611],[488.632598876953,49.5664329528809,30.0011005401611],[488.632598876953,50.8786315917969,24.0011005401611],[488.632598876953,50.7764320373535,24.0011005401611],[488.632598876953,50.8274307250977,30.0011005401611],[488.632598876953,50.7550315856934,30.0011005401611],[488.632598876953,50.7692337036133,30.0011005401611],[488.632598876953,50.9284324645996,24.0011005401611],[488.632598876953,50.9202308654785,30.0011005401611],[488.632598876953,51.1788330078125,24.0011005401611],[488.632598876953,51.139232635498,24.0011005401611],[488.632598876953,51.1590309143066,30.0011005401611],[488.632598876953,51.2324333190918,24.0011005401611],[488.632598876953,51.2056312561035,30.0011005401611],[488.632598876953,51.4340324401855,24.0011005401611],[488.632598876953,51.3946304321289,24.0011005401611],[488.632598876953,51.4142303466797,30.0011005401611],[488.632598876953,51.4498329162598,24.0011005401611],[488.632598876953,51.5772323608398,30.0011005401611],[488.632598876953,51.4418334960938,30.0011005401611],[488.632598876953,51.3136329650879,30.0011005401611],[488.632598876953,49.7714309692383,30.0011005401611],[488.632598876953,51.0338325500488,30.0011005401611],[488.632598876953,50.8816299438477,30.0011005401611],[488.632598876953,50.8800315856934,30.0011005401611],[488.632598876953,51.7188339233398,36.0009002685547],[488.632598876953,51.7176322937012,36.0009002685547],[488.632598876953,49.3900299072266,30.0011005401611],[488.632598876953,50.7522315979004,30.0011005401611],[488.632598876953,50.7522315979004,36.0009002685547],[488.632598876953,49.7426300048828,30.0011005401611],[488.632598876953,49.7426300048828,36.0009002685547],[488.632598876953,49.7480316162109,30.0011005401611],[488.632598876953,49.7480316162109,36.0009002685547],[488.632598876953,51.715030670166,30.0011005401611],[488.632598876953,51.715030670166,36.0009002685547],[488.632598876953,50.7578315734863,30.0011005401611],[488.632598876953,50.7578315734863,36.0009002685547],[488.632598876953,50.761833190918,30.0011005401611],[488.632598876953,50.761833190918,36.0009002685547],[488.632598876953,50.8882331848145,30.0011005401611],[488.632598876953,50.8882331848145,36.0009002685547],[488.632598876953,49.7592315673828,30.0011005401611],[488.632598876953,49.7592315673828,36.0009002685547],[488.632598876953,51.1788330078125,30.0011005401611],[488.632598876953,51.1788330078125,36.0009002685547],[488.632598876953,50.9120330810547,30.0011005401611],[488.632598876953,50.9120330810547,36.0009002685547],[488.632598876953,51.4498329162598,30.0011005401611],[488.632598876953,51.4498329162598,36.0009002685547],[488.632598876953,51.7046318054199,30.0011005401611],[488.632598876953,51.7046318054199,36.0009002685547],[488.632598876953,51.2324333190918,30.0011005401611],[488.632598876953,51.2324333190918,36.0009002685547],[488.632598876953,51.3946304321289,30.0011005401611],[488.632598876953,51.3946304321289,36.0009002685547],[488.632598876953,51.4340324401855,30.0011005401611],[488.632598876953,51.4340324401855,36.0009002685547],[488.632598876953,49.7838325500488,30.0011005401611],[488.632598876953,49.7838325500488,36.0009002685547],[488.632598876953,50.7764320373535,30.0011005401611],[488.632598876953,50.7764320373535,36.0009002685547],[488.632598876953,51.139232635498,30.0011005401611],[488.632598876953,51.139232635498,36.0009002685547],[488.632598876953,50.9284324645996,30.0011005401611],[488.632598876953,50.9284324645996,36.0009002685547],[488.632598876953,50.8816299438477,36.0009002685547],[488.632598876953,50.8786315917969,30.0011005401611],[488.632598876953,50.8786315917969,36.0009002685547],[488.632598876953,51.7324333190918,35.0173034667969],[488.632598876953,51.7324333190918,36.0009002685547],[488.632598876953,51.7324333190918,30.9847011566162],[517.188415527344,51.7140884399414,24.0011005401611],[517.188415527344,51.7140884399414,36.0009002685547],[517.188415527344,50.4475173950195,24.0011005401611],[517.188415527344,51.7324333190918,35.3734130859375],[517.188415527344,51.7324333190918,36.0009002685547],[517.188415527344,51.7324333190918,34.1185760498047],[517.188415527344,51.7324333190918,31.88330078125],[517.188415527344,51.7324333190918,30.0011005401611],[517.188415527344,51.7324333190918,28.1187744140625],[517.188415527344,51.7324333190918,25.8834266662598],[517.188415527344,51.7324333190918,24.6285915374756],[517.188415527344,51.7324333190918,24.0011005401611],[517.188415527344,47.7324333190918,24.0600452423096],[517.188415527344,47.7324333190918,24.0011005401611],[517.188415527344,50.4475173950195,36.0009002685547],[517.188415527344,47.7324333190918,24.1779975891113],[517.188415527344,47.7324333190918,24.6498031616211],[517.188415527344,47.7324333190918,28.7625770568848],[517.188415527344,47.7324333190918,29.7061901092529],[517.188415527344,47.7324333190918,29.9420928955078],[517.188415527344,47.7324333190918,30.0600452423096],[517.188415527344,47.7324333190918,30.2959480285645],[517.188415527344,47.7324333190918,31.2395629882812],[517.188415527344,47.7324333190918,35.3521995544434],[517.188415527344,47.7324333190918,35.8240051269531],[517.188415527344,47.7324333190918,35.9419555664062],[517.188415527344,47.7324333190918,36.0009002685547] ]; $facets = [ [0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,2,1],[12,1,13],[14,15,16],[17,18,19],[20,21,22],[17,19,23],[24,25,26],[27,13,1],[28,25,29],[30,31,32],[28,33,34],[35,36,7],[37,38,39],[40,10,41],[42,43,44],[45,5,4],[46,47,48],[46,48,49],[45,4,50],[51,52,53],[51,54,55],[56,52,57],[58,59,60],[61,50,4],[62,63,64],[65,34,33],[66,67,42],[68,17,69],[70,71,22],[66,42,72],[73,16,15],[35,7,74],[75,76,54],[77,27,1],[78,32,31],[75,54,79],[80,26,25],[81,80,25],[82,83,48],[84,20,85],[81,25,86],[87,88,19],[0,89,1],[90,91,92],[90,10,93],[38,94,39],[94,95,39],[3,7,96],[97,15,98],[97,99,15],[92,91,100],[89,101,1],[102,39,95],[103,11,10],[104,96,7],[105,15,99],[106,61,4],[107,108,33],[76,55,54],[109,91,110],[111,23,19],[112,63,113],[114,115,48],[116,59,117],[118,20,119],[120,31,121],[122,44,43],[110,91,123],[124,125,126],[127,128,129],[127,130,124],[131,124,132],[126,133,134],[135,136,126],[137,138,127],[139,127,138],[128,140,141],[142,128,143],[144,140,145],[100,91,146],[147,148,134],[101,149,1],[102,150,39],[103,10,151],[145,140,152],[152,140,153],[148,154,134],[154,155,134],[156,15,105],[157,104,7],[36,8,7],[158,37,39],[159,19,88],[160,19,159],[161,59,58],[161,117,59],[162,31,30],[162,121,31],[163,43,164],[163,165,43],[166,167,43],[167,164,43],[168,57,52],[82,48,169],[114,170,171],[108,65,33],[64,63,112],[114,172,170],[160,173,170],[171,170,173],[172,174,170],[160,170,174],[175,176,177],[178,77,1],[179,31,120],[175,180,176],[181,182,176],[177,176,182],[180,183,176],[181,176,183],[184,42,67],[185,69,17],[160,111,19],[186,187,160],[188,189,114],[190,188,114],[114,48,191],[192,114,193],[194,160,195],[196,160,194],[197,198,181],[199,197,181],[122,43,165],[200,201,175],[202,175,203],[204,175,202],[205,119,20],[206,181,207],[208,209,15],[210,15,209],[211,10,9],[212,10,211],[213,214,215],[216,217,218],[219,14,17],[113,63,220],[221,222,48],[191,48,222],[22,223,20],[205,20,223],[224,40,42],[123,91,225],[214,226,215],[227,215,226],[218,217,228],[229,228,217],[215,230,213],[125,135,126],[217,216,231],[129,128,142],[216,213,232],[130,132,124],[213,216,233],[234,213,235],[236,227,237],[238,237,227],[239,240,216],[233,216,240],[241,242,229],[243,229,242],[215,227,244],[245,215,246],[217,247,229],[248,249,217],[232,213,250],[230,250,213],[133,147,134],[244,227,251],[236,252,227],[251,227,252],[231,216,253],[254,253,216],[141,140,144],[247,255,229],[241,229,256],[255,256,229],[257,241,258],[259,146,91],[260,261,236],[262,1,149],[263,264,241],[265,241,264],[266,236,267],[268,267,236],[49,48,83],[166,43,269],[270,271,272],[273,274,275],[276,274,277],[278,151,10],[279,280,272],[281,39,150],[272,282,279],[155,283,134],[274,276,284],[153,140,285],[286,276,287],[265,276,286],[288,289,279],[268,288,279],[290,291,272],[271,290,272],[292,274,293],[275,274,292],[294,265,295],[276,265,294],[296,297,268],[279,296,268],[241,265,298],[298,265,299],[236,300,268],[300,301,268],[107,33,78],[302,303,59],[304,305,279],[282,304,279],[306,276,307],[284,276,306],[185,17,73],[308,309,221],[158,39,70],[310,41,10],[15,311,208],[7,6,312],[313,314,6],[315,6,314],[316,208,317],[318,317,208],[258,241,319],[319,241,320],[261,321,236],[321,322,236],[6,315,323],[208,324,318],[270,325,318],[326,318,325],[327,328,315],[273,315,328],[118,329,20],[330,20,329],[331,332,25],[86,25,332],[333,334,52],[335,52,334],[115,336,48],[169,48,336],[62,106,4],[35,15,210],[35,337,15],[158,10,212],[158,310,10],[338,178,1],[339,59,116],[107,302,59],[66,22,340],[66,341,22],[185,221,342],[185,308,221],[75,31,179],[75,343,31],[166,20,330],[166,85,20],[81,52,335],[81,168,52],[82,19,344],[82,87,19],[108,339,345],[346,108,345],[64,347,348],[349,347,64],[178,109,350],[351,178,350],[179,352,353],[354,352,179],[355,208,356],[356,208,311],[357,358,6],[358,312,6],[68,22,21],[68,340,22],[221,48,47],[184,342,221],[359,270,360],[318,360,270],[361,362,273],[315,273,362],[272,102,270],[363,270,102],[274,273,103],[364,103,273],[21,19,18],[21,20,84],[184,46,42],[43,42,46],[12,22,71],[365,22,12],[14,98,15],[14,220,63],[40,93,10],[40,225,91],[45,221,309],[366,221,45],[313,367,212],[212,367,368],[36,369,367],[313,36,367],[316,37,367],[37,368,367],[210,367,369],[316,367,210],[362,370,315],[370,323,315],[360,318,371],[371,318,324],[372,331,159],[159,195,160],[373,115,56],[115,114,189],[52,56,161],[374,161,56],[25,28,331],[375,331,28],[376,333,163],[163,203,175],[377,118,24],[118,181,198],[25,24,162],[378,162,24],[52,51,333],[379,333,51],[167,380,381],[376,167,381],[377,381,330],[330,381,380],[335,381,382],[376,381,335],[373,383,169],[169,383,384],[168,385,383],[373,168,383],[372,87,383],[87,384,383],[377,80,381],[80,382,381],[86,383,385],[372,383,86],[106,348,347],[386,106,347],[375,65,346],[108,346,65],[64,112,349],[387,349,112],[171,190,114],[346,345,171],[374,190,345],[171,345,190],[349,172,347],[172,114,192],[386,347,192],[172,192,347],[173,160,196],[171,173,346],[375,346,196],[173,196,346],[172,349,174],[174,186,160],[387,186,349],[174,349,186],[64,348,62],[106,62,348],[108,107,339],[59,339,107],[374,345,116],[339,116,345],[76,353,352],[379,76,352],[388,77,351],[178,351,77],[179,120,354],[378,354,120],[177,200,175],[351,350,177],[389,200,350],[177,350,200],[354,180,352],[180,175,204],[379,352,204],[180,204,352],[182,181,206],[177,182,351],[388,351,206],[182,206,351],[180,354,183],[183,199,181],[378,199,354],[183,354,199],[91,109,338],[178,338,109],[76,75,353],[179,353,75],[389,350,110],[109,110,350],[390,391,392],[393,394,395],[224,122,389],[122,175,201],[365,388,205],[205,207,181],[66,340,396],[68,396,340],[184,396,342],[185,342,396],[66,396,67],[184,67,396],[68,69,396],[185,396,69],[219,111,387],[111,160,187],[366,386,191],[191,193,114],[150,272,280],[102,272,150],[151,277,274],[103,151,274],[161,374,117],[116,117,374],[366,61,386],[106,386,61],[111,187,387],[186,387,187],[56,188,374],[190,374,188],[191,386,193],[192,193,386],[331,375,194],[196,194,375],[28,34,375],[65,375,34],[219,387,113],[112,113,387],[224,389,123],[110,123,389],[51,55,379],[76,379,55],[24,197,378],[199,378,197],[122,201,389],[200,389,201],[333,379,202],[204,202,379],[205,388,207],[206,207,388],[365,27,388],[77,388,27],[162,378,121],[120,121,378],[162,30,25],[30,29,25],[51,53,54],[303,60,59],[28,29,33],[29,397,33],[161,58,52],[53,52,58],[21,84,19],[84,344,19],[46,49,43],[49,269,43],[208,316,209],[210,209,316],[327,313,211],[212,211,313],[36,35,369],[210,369,35],[37,158,368],[212,368,158],[6,8,313],[36,313,8],[326,38,316],[37,316,38],[392,391,398],[399,398,391],[394,400,395],[401,395,400],[390,214,391],[214,213,234],[393,395,218],[218,239,216],[402,230,403],[230,215,245],[125,124,131],[404,125,403],[405,406,231],[231,248,217],[129,137,127],[407,406,129],[130,127,139],[402,130,408],[194,195,331],[159,331,195],[115,189,56],[188,56,189],[14,219,220],[113,220,219],[45,50,366],[61,366,50],[221,366,222],[191,222,366],[17,23,219],[111,219,23],[118,198,24],[197,24,198],[202,203,333],[163,333,203],[40,224,225],[123,225,224],[12,13,365],[27,365,13],[22,365,223],[205,223,365],[42,44,224],[122,224,44],[399,391,234],[214,234,391],[401,239,395],[218,395,239],[214,390,226],[226,238,227],[218,228,393],[228,229,243],[401,399,233],[233,235,213],[392,409,390],[410,390,409],[394,393,411],[412,411,393],[402,403,131],[125,131,403],[405,137,406],[129,406,137],[405,408,139],[130,139,408],[230,245,403],[404,403,245],[231,406,248],[407,248,406],[232,254,216],[402,408,232],[413,404,244],[244,246,215],[414,247,407],[247,217,249],[133,126,136],[415,133,413],[141,143,128],[416,414,141],[410,238,390],[226,390,238],[412,393,243],[228,243,393],[233,399,235],[234,235,399],[237,260,236],[238,410,237],[417,260,410],[237,410,260],[239,401,240],[233,240,401],[242,241,257],[243,242,412],[418,412,257],[242,257,412],[401,419,399],[398,399,419],[417,410,420],[409,420,410],[400,421,401],[419,401,421],[418,422,412],[411,412,422],[413,135,404],[125,404,135],[414,407,142],[129,142,407],[130,402,132],[131,132,402],[133,136,413],[135,413,136],[423,147,415],[133,415,147],[137,405,138],[139,138,405],[141,414,143],[142,143,414],[424,416,144],[141,144,416],[405,254,408],[232,408,254],[244,404,246],[245,246,404],[247,249,407],[248,407,249],[232,250,402],[230,402,250],[415,413,251],[244,251,413],[252,236,266],[251,252,415],[423,415,266],[252,266,415],[231,253,405],[254,405,253],[416,255,414],[247,414,255],[256,263,241],[255,416,256],[424,263,416],[256,416,263],[257,258,418],[425,418,258],[260,417,261],[426,261,417],[422,418,427],[427,259,91],[420,428,417],[428,1,262],[147,423,148],[429,148,423],[263,424,264],[264,295,265],[266,267,423],[267,268,297],[144,145,424],[430,424,145],[49,431,269],[166,269,431],[82,431,83],[49,83,431],[84,85,431],[166,431,85],[82,344,431],[84,431,344],[432,278,90],[10,90,278],[433,0,281],[39,281,0],[362,361,434],[435,271,359],[270,359,271],[436,361,275],[273,275,361],[360,437,359],[277,287,276],[151,278,277],[280,279,289],[150,280,281],[436,438,439],[439,285,140],[90,92,432],[440,432,92],[282,272,291],[441,282,442],[284,293,274],[443,438,284],[278,432,286],[286,299,265],[281,288,433],[288,268,301],[0,433,89],[444,89,433],[435,445,442],[445,134,283],[439,446,436],[361,436,446],[442,290,435],[271,435,290],[438,436,292],[275,292,436],[445,435,447],[359,447,435],[286,287,278],[277,278,287],[288,281,289],[280,289,281],[145,152,430],[443,430,152],[148,429,154],[441,154,429],[424,430,294],[294,307,276],[423,296,429],[296,279,305],[425,440,100],[92,100,440],[290,442,291],[282,291,442],[292,293,438],[284,438,293],[298,320,241],[432,440,298],[300,236,322],[433,300,444],[426,101,444],[89,444,101],[107,448,302],[302,79,54],[78,31,343],[107,78,448],[75,79,448],[302,448,79],[78,343,448],[75,448,343],[427,418,259],[425,259,418],[428,262,417],[426,417,262],[437,449,359],[447,359,449],[434,361,450],[446,450,361],[32,33,397],[78,33,32],[53,303,54],[302,54,303],[152,153,443],[438,443,153],[429,304,441],[282,441,304],[430,443,306],[284,306,443],[154,441,155],[442,155,441],[298,299,432],[286,432,299],[300,433,301],[288,301,433],[185,451,308],[308,74,7],[73,15,337],[185,73,451],[35,74,451],[308,451,74],[73,337,451],[35,451,337],[158,452,310],[310,72,42],[70,22,341],[158,70,452],[66,72,452],[310,452,72],[70,341,452],[66,452,341],[313,327,314],[315,314,327],[316,317,326],[318,326,317],[15,156,311],[356,311,156],[7,312,157],[358,157,312],[211,9,327],[364,327,9],[38,326,94],[363,94,326],[294,295,424],[264,424,295],[296,423,297],[267,297,423],[262,149,426],[101,426,149],[258,319,425],[440,425,319],[261,426,321],[444,321,426],[259,425,146],[100,146,425],[306,307,430],[294,430,307],[304,429,305],[296,305,429],[319,320,440],[298,440,320],[321,444,322],[300,322,444],[445,283,442],[155,442,283],[439,438,285],[153,285,438],[17,68,18],[21,18,68],[46,184,47],[221,47,184],[102,95,363],[94,363,95],[9,11,364],[103,364,11],[6,323,357],[370,357,323],[371,324,355],[208,355,324],[270,363,325],[326,325,363],[327,364,328],[273,328,364],[0,2,39],[12,39,2],[90,93,91],[40,91,93],[14,16,17],[73,17,16],[45,309,7],[308,7,309],[12,71,39],[70,39,71],[40,41,42],[310,42,41],[97,98,63],[14,63,98],[3,5,7],[45,7,5],[118,377,329],[330,329,377],[331,372,332],[86,332,372],[333,376,334],[335,334,376],[115,373,336],[169,336,373],[167,166,380],[330,380,166],[80,81,382],[335,382,81],[86,385,81],[168,81,385],[169,384,82],[87,82,384],[159,88,372],[87,372,88],[163,164,376],[167,376,164],[24,26,377],[80,377,26],[56,57,373],[168,373,57],[32,397,30],[29,30,397],[58,60,53],[303,53,60],[205,181,119],[118,119,181],[163,175,165],[122,165,175],[453,454,455],[454,456,455],[457,455,456],[458,455,457],[459,455,458],[460,455,459],[461,462,463],[464,465,466],[467,468,469],[470,471,472],[465,473,474],[475,476,477],[478,479,480],[481,482,478],[483,484,481],[485,486,483],[487,488,485],[489,490,487],[491,492,489],[493,494,491],[495,496,493],[497,498,495],[499,500,497],[501,502,499],[503,504,501],[505,504,503],[506,504,505],[507,504,506],[508,504,507],[509,504,508],[510,504,509],[511,504,510],[512,504,511],[513,504,512],[514,504,513],[476,515,516],[517,518,519],[520,517,521],[518,522,523],[522,480,479],[524,525,526],[468,470,527],[525,467,528],[529,475,530],[531,532,533],[534,531,535],[536,537,538],[473,539,540],[539,536,541],[537,534,542],[471,520,543],[532,529,544],[545,524,546],[453,461,547],[463,464,548],[523,549,504],[527,550,551],[519,552,553],[521,554,555],[466,556,557],[469,558,559],[528,560,561],[477,562,563],[543,564,565],[535,566,567],[530,568,569],[540,570,571],[474,572,573],[542,574,575],[538,576,577],[541,578,579],[472,580,581],[526,582,583],[533,584,585],[544,586,587],[516,545,588],[588,589,590],[455,460,4],[591,592,63],[462,455,4],[592,547,63],[547,548,63],[465,462,4],[548,557,63],[127,124,501],[127,501,499],[505,503,124],[124,126,507],[124,507,506],[509,508,126],[126,134,512],[126,512,511],[510,509,126],[128,127,493],[128,493,491],[497,495,127],[489,487,128],[140,128,483],[140,483,481],[487,485,128],[478,480,140],[480,522,140],[514,513,134],[504,514,134],[551,581,437],[471,470,434],[445,447,555],[445,555,553],[134,445,553],[134,553,504],[446,439,518],[446,518,517],[439,140,522],[439,522,518],[515,476,358],[563,588,356],[557,573,63],[473,465,4],[437,360,559],[437,559,551],[360,371,561],[360,561,559],[362,434,470],[362,470,468],[370,362,468],[370,468,467],[499,497,127],[506,505,124],[495,493,127],[513,512,134],[481,478,140],[447,449,565],[447,565,555],[450,446,517],[450,517,520],[356,156,569],[356,569,563],[157,358,476],[157,476,475],[357,370,467],[357,467,525],[371,355,583],[371,583,561],[460,459,4],[63,62,593],[63,593,591],[62,4,459],[62,459,458],[532,531,104],[531,534,104],[567,585,105],[575,567,105],[4,3,539],[4,539,473],[536,539,3],[97,63,573],[97,573,571],[571,579,97],[99,97,579],[99,579,577],[105,99,577],[105,577,575],[96,104,534],[96,534,537],[3,96,537],[3,537,536],[503,501,124],[508,507,126],[491,489,128],[511,510,126],[485,483,128],[434,450,520],[434,520,471],[449,437,581],[449,581,565],[156,105,585],[156,585,587],[587,569,156],[104,157,529],[104,529,532],[475,529,157],[590,583,355],[355,356,588],[355,588,590],[358,357,524],[358,524,515],[525,524,357],[458,457,62],[457,593,62],[479,478,482],[479,504,549],[479,482,504],[482,481,484],[472,551,550],[581,551,472],[482,484,504],[484,483,486],[523,553,552],[504,553,523],[540,573,572],[571,573,540],[544,585,584],[587,585,544],[542,577,576],[575,577,542],[526,590,589],[583,590,526],[535,575,574],[567,575,535],[533,567,566],[585,567,533],[538,579,578],[577,579,538],[543,581,580],[565,581,543],[477,569,568],[563,569,477],[530,587,586],[569,587,530],[541,571,570],[579,571,541],[528,583,582],[561,583,528],[591,453,592],[547,592,453],[521,565,564],[555,565,521],[474,557,556],[573,557,474],[516,563,562],[588,563,516],[519,555,554],[553,555,519],[527,559,558],[551,559,527],[469,561,560],[559,561,469],[462,461,455],[453,455,461],[461,463,547],[548,547,463],[465,464,462],[463,462,464],[464,466,548],[557,548,466],[469,560,467],[528,467,560],[472,550,470],[527,470,550],[474,556,465],[466,465,556],[477,568,475],[530,475,568],[516,562,476],[477,476,562],[519,554,517],[521,517,554],[521,564,520],[543,520,564],[523,552,518],[519,518,552],[479,549,522],[523,522,549],[526,589,524],[589,546,524],[527,558,468],[469,468,558],[528,582,525],[526,525,582],[530,586,529],[544,529,586],[533,566,531],[535,531,566],[535,574,534],[542,534,574],[538,578,536],[541,536,578],[540,572,473],[474,473,572],[541,570,539],[540,539,570],[542,576,537],[538,537,576],[543,580,471],[472,471,580],[544,584,532],[533,532,584],[524,545,515],[516,515,545],[545,546,588],[589,588,546],[453,591,454],[593,454,591],[484,486,504],[486,485,488],[486,488,504],[488,487,490],[488,490,504],[490,489,492],[490,492,504],[492,491,494],[492,494,504],[494,493,496],[494,496,504],[496,495,498],[496,498,504],[498,497,500],[498,500,504],[500,499,502],[500,502,504],[501,504,502],[454,593,456],[457,456,593],[594,595,596],[597,598,594],[599,597,594],[600,599,594],[601,600,594],[602,601,594],[603,602,594],[604,603,594],[605,604,594],[606,607,608],[609,606,608],[610,609,608],[611,610,608],[612,611,608],[613,612,608],[614,613,608],[615,614,608],[616,615,608],[617,616,608],[618,617,608],[619,618,608],[620,619,608],[596,608,607],[595,594,598],[608,596,595],[605,594,91],[91,338,602],[91,602,603],[598,597,1],[594,596,91],[608,595,1],[595,598,1],[616,617,392],[610,611,394],[419,421,613],[419,613,614],[422,427,607],[422,607,606],[427,91,596],[427,596,607],[428,420,619],[428,619,620],[1,428,620],[1,620,608],[420,409,618],[420,618,619],[411,422,606],[411,606,609],[398,419,614],[398,614,615],[421,400,612],[421,612,613],[409,392,617],[409,617,618],[394,411,609],[394,609,610],[604,605,91],[338,1,599],[338,599,600],[392,398,615],[392,615,616],[400,394,611],[400,611,612],[603,604,91],[601,602,338],[597,599,1],[600,601,338] ]; } elsif ($name eq 'gt2_teeth') { $vertices = [ [15.8899993896484,19.444055557251,2.67489433288574],[15.9129991531372,19.1590557098389,2.67489433288574],[15.9039993286133,19.1500549316406,2.67489433288574],[15.9489994049072,19.2490558624268,2.67489433288574],[15.9579992294312,19.3570556640625,2.67489433288574],[15.8819999694824,18.690055847168,2.67489433288574],[15.8319997787476,17.7460556030273,2.67489433288574],[15.8489999771118,18.819055557251,2.67489433288574],[15.8589992523193,17.7190551757812,2.67489433288574],[15.8769998550415,19.0490550994873,2.67489433288574],[15.7529993057251,17.8080558776855,2.67489433288574],[15.7869997024536,19.5010547637939,2.67489433288574],[14.0329990386963,18.7170543670654,2.67489433288574],[13.9599990844727,18.7460556030273,2.67489433288574],[13.9869995117188,20.2840557098389,2.67489433288574],[14.2029991149902,20.149055480957,2.67489433288574],[14.1939992904663,19.9560546875,2.67489433288574],[14.1939992904663,20.1670551300049,2.67489433288574],[14.2119998931885,20.0590553283691,2.67489433288574],[12.1899995803833,19.1840553283691,2.67489433288574],[12.096999168396,19.1950550079346,2.67489433288574],[12.1099996566772,20.6690559387207,2.67489433288574],[11.382999420166,19.9750556945801,2.67489433288574],[11.2599992752075,19.2490558624268,2.67489433288574],[11.2369995117188,19.9320545196533,2.67489433288574],[11.5349998474121,20.0640544891357,2.67489433288574],[11.6259994506836,20.1550559997559,2.67489433288574],[11.6829986572266,20.2390556335449,2.67489433288574],[11.7369995117188,20.3570556640625,2.67489433288574],[11.8449993133545,20.645055770874,2.67489433288574],[11.7729988098145,20.4640560150146,2.67489433288574],[11.7799987792969,20.5370559692383,9.41389465332031],[11.7639999389648,20.4470558166504,2.67489433288574],[11.9559993743896,20.6810550689697,2.67489433288574],[12.3079996109009,20.6020545959473,2.67489433288574],[12.1959991455078,19.1860542297363,2.67489433288574],[12.2059993743896,20.6540546417236,2.67489433288574],[12.3489990234375,20.3740558624268,2.67489433288574],[12.3579998016357,20.2750549316406,2.67489433288574],[12.3669996261597,20.266056060791,2.67489433288574],[12.3849992752075,20.1670551300049,2.67489433288574],[12.4269990921021,20.0680541992188,2.67489433288574],[12.5029993057251,19.9540557861328,2.67489433288574],[12.6169996261597,19.8550548553467,2.67489433288574],[12.7449989318848,19.7800559997559,2.67489433288574],[12.7629995346069,19.7800559997559,2.67489433288574],[12.8799991607666,19.7350559234619,2.67489433288574],[13.0369997024536,19.7250556945801,2.67489433288574],[13.0149993896484,19.0340557098389,2.67489433288574],[11.1699991226196,19.2580547332764,2.67489433288574],[11.0959987640381,19.2580547332764,2.67489433288574],[11.1209993362427,19.9230556488037,2.67489433288574],[13.0599994659424,19.024055480957,2.67489433288574],[14.9049997329712,18.3170547485352,2.67489433288574],[14.8779993057251,18.3400554656982,2.67489433288574],[14.8779993057251,19.149055480957,2.67489433288574],[13.3039989471436,19.77805519104,2.67489433288574],[13.1589994430542,18.9890556335449,2.67489433288574],[13.1559991836548,19.7350559234619,2.67489433288574],[13.4269990921021,19.8600559234619,2.67489433288574],[13.5339994430542,19.9700546264648,2.67389440536499],[13.6359996795654,20.1220550537109,2.67489433288574],[13.6359996795654,20.1400547027588,2.67489433288574],[13.6719989776611,20.2210559844971,2.67489433288574],[13.6899995803833,20.2300548553467,2.67489433288574],[13.7509994506836,20.3010559082031,2.67489433288574],[13.8539991378784,20.3180541992188,2.67489433288574],[14.8329992294312,18.3580551147461,2.67489433288574],[14.1849994659424,19.8530559539795,2.67489433288574],[14.0769996643066,18.7000541687012,2.67489433288574],[14.1099996566772,20.2400550842285,2.67489433288574],[14.2009992599487,19.6230545043945,2.67489433288574],[14.2729997634888,19.4670543670654,2.67489433288574],[14.3379993438721,19.3790550231934,2.67489433288574],[14.4549999237061,19.2770557403564,2.67489433288574],[14.5899991989136,19.2040557861328,2.67489433288574],[14.6079998016357,19.2040557861328,2.67489433288574],[14.7209997177124,19.1600551605225,2.67489433288574],[15.1379995346069,19.210054397583,2.67489433288574],[14.9949998855591,18.2680549621582,2.67489433288574],[15.0029993057251,19.1580543518066,2.67489433288574],[15.2369995117188,19.2760543823242,2.67489433288574],[15.3779993057251,19.4060554504395,2.67489433288574],[15.4539995193481,19.520055770874,2.67489433288574],[15.471999168396,19.52805519104,2.67489433288574],[15.5449991226196,19.5830554962158,2.67489433288574],[15.6529998779297,19.573055267334,2.67489433288574],[15.7059993743896,17.8360557556152,2.67489433288574],[15.9449996948242,18.5560550689697,2.67489433288574],[15.8589992523193,18.9380550384521,2.67489433288574],[14.9589996337891,18.2950553894043,2.67489433288574],[15.7779998779297,19.5100555419922,2.67489433288574],[14.0049991607666,20.2750549316406,2.67489433288574],[12.3489990234375,20.5000553131104,2.67489433288574],[13.0689992904663,19.0150547027588,2.67489433288574],[13.0999994277954,19.0100555419922,2.67489433288574],[15.9489994049072,19.3670558929443,9.41489505767822],[15.9489994049072,19.2490558624268,9.41489505767822],[15.75,17.8080558776855,9.41489505767822],[15.6639995574951,19.5710544586182,9.41489505767822],[15.5709991455078,17.9260559082031,9.41489505767822],[15.8769998550415,18.690055847168,9.41489505767822],[15.8499994277954,18.8170547485352,9.41489505767822],[15.9459991455078,18.5520553588867,9.41489505767822],[15.914999961853,17.6890544891357,9.41489505767822],[15.3999996185303,19.4290542602539,9.41489505767822],[15.3099994659424,19.339054107666,9.41489505767822],[15.3729991912842,18.0440559387207,9.41489505767822],[15.4579992294312,19.5170555114746,9.41489505767822],[15.5469999313354,19.5820541381836,9.41489505767822],[13.2309989929199,19.7610549926758,9.41489505767822],[13.168999671936,19.7360553741455,9.41489505767822],[13.096999168396,19.0140552520752,9.41489505767822],[13.1999988555908,18.9870548248291,9.41489505767822],[15.1399993896484,19.2080554962158,9.41489505767822],[15.0159997940063,19.1600551605225,9.41489505767822],[14.9859991073608,18.2770557403564,9.41489505767822],[15.1749992370605,18.1690559387207,9.41489505767822],[15.9039993286133,19.1320552825928,9.41489505767822],[15.8949995040894,19.4460544586182,9.41489505767822],[15.8769998550415,19.0420551300049,9.41489505767822],[12.2169990539551,20.6500549316406,9.41489505767822],[11.9379997253418,20.6810550689697,9.41489505767822],[11.8629989624023,19.2130546569824,9.41489505767822],[12.096999168396,19.1950550079346,9.41489505767822],[14.1669998168945,18.6640548706055,9.41489505767822],[14.1039991378784,20.2460556030273,9.41489505767822],[13.9849996566772,18.7360553741455,9.41489505767822],[14.7349996566772,19.1590557098389,9.41489505767822],[14.5849990844727,19.2050552368164,9.41489505767822],[14.5719995498657,18.4850559234619,9.41489505767822],[14.1939992904663,19.6760559082031,9.41489505767822],[14.1849994659424,19.9330558776855,9.41489505767822],[14.1759996414185,18.6640548706055,9.41489505767822],[14.261999130249,19.4890556335449,9.41489505767822],[14.3539991378784,19.3610553741455,9.41489505767822],[14.3559989929199,18.5830554962158,9.41489505767822],[11.6039991378784,20.1250553131104,9.41489505767822],[11.5209999084473,20.0520553588867,9.41489505767822],[11.4209995269775,19.2480545043945,9.41489505767822],[11.6989994049072,20.2690544128418,9.41389465332031],[11.7609996795654,20.4310550689697,9.41489505767822],[11.8359994888306,19.2130546569824,9.41489505767822],[14.1889991760254,20.1710548400879,9.41489505767822],[13.9689998626709,20.2840557098389,9.41489505767822],[13.8739995956421,20.315055847168,9.41489505767822],[13.7799997329712,18.8080558776855,9.41489505767822],[13.9869995117188,20.2750549316406,9.41489505767822],[12.3129997253418,20.5980548858643,9.41489505767822],[12.3399991989136,20.5090560913086,9.41489505767822],[12.3489990234375,20.3830547332764,9.41489505767822],[12.3599996566772,20.2680549621582,9.41489505767822],[12.3849992752075,20.1850547790527,9.41489505767822],[12.3849992752075,20.1670551300049,9.41489505767822],[12.4249992370605,20.065055847168,9.41489505767822],[12.4729995727539,19.1350555419922,9.41489505767822],[14.4399995803833,19.2900543212891,9.41489505767822],[14.3649997711182,18.5740547180176,9.41489505767822],[13.5729999542236,20.0310554504395,9.41489505767822],[13.4889993667603,19.9140548706055,9.41489505767822],[13.5639991760254,18.8710556030273,9.41489505767822],[13.6389999389648,20.1310558319092,9.41489505767822],[13.6719989776611,20.2130546569824,9.41489505767822],[13.75,20.3020553588867,9.41489505767822],[12.7399997711182,19.7810554504395,9.41489505767822],[12.6189994812012,19.8520545959473,9.41489505767822],[12.5799999237061,19.1200542449951,9.41489505767822],[12.8349990844727,19.069055557251,9.41489505767822],[11.2669992446899,19.9350547790527,9.41489505767822],[11.1029987335205,19.9230556488037,9.41489505767822],[11.0209999084473,19.2600555419922,9.41489505767822],[11.3819999694824,19.9710559844971,9.41489505767822],[13.418999671936,19.8530559539795,9.41489505767822],[13.4329996109009,18.9160556793213,9.41489505767822],[11.8399991989136,20.6430549621582,9.41489505767822],[13.3119993209839,19.7800559997559,9.41489505767822],[15.2189998626709,19.2600555419922,9.41489505767822],[15.1839990615845,18.1600551605225,9.41489505767822],[15.3639993667603,18.0520553588867,9.41489505767822],[13.0189990997314,19.7250556945801,9.41489505767822],[12.8949995040894,19.7350559234619,9.41489505767822],[15.9039993286133,19.1500549316406,9.41489505767822],[15.7699995040894,19.5140552520752,9.41489505767822],[15.8589992523193,18.9340553283691,9.41489505767822],[14.1939992904663,19.9510555267334,9.41489505767822],[14.2119998931885,20.0630550384521,9.41489505767822],[14.8589992523193,19.149055480957,9.41489505767822],[14.8159999847412,18.3670558929443,9.41489505767822],[14.8959999084473,18.3220558166504,9.41489505767822],[12.5189990997314,19.9360542297363,9.41489505767822],[11.0209999084473,19.9290542602539,9.41489505767822],[11.0209999084473,19.2530555725098,2.67489433288574],[11.0209999084473,19.9300556182861,2.67489433288574],[15.9799995422363,18.505931854248,5.58724021911621],[15.9799995422363,18.5044555664062,9.41489505767822],[15.9799995422363,18.5041732788086,2.67489433288574],[15.9799995422363,18.1684837341309,2.67489433288574],[15.9799995422363,18.1288299560547,9.41489505767822],[15.9799995422363,17.9876575469971,2.67489433288574],[15.9799995422363,17.6247596740723,3.91620373725891],[15.9799995422363,17.6247596740723,2.67489433288574],[15.9799995422363,17.6254329681396,4.32245063781738],[15.9799995422363,17.8920269012451,9.41489505767822],[15.9799995422363,17.8795108795166,2.67489433288574],[15.9799995422363,17.629810333252,4.58585262298584],[15.9799995422363,17.6336059570312,5.27938556671143],[15.9799995422363,17.8311748504639,2.67489433288574],[15.9799995422363,17.638355255127,9.41489505767822],[15.9799995422363,17.6346111297607,5.98653984069824],[15.9799995422363,17.8728256225586,2.67489433288574],[15.9799995422363,18.2221603393555,2.67489433288574] ]; $facets = [ [0,1,2],[0,3,1],[0,4,3],[5,6,7],[8,6,5],[2,9,0],[6,10,11],[12,13,14],[15,16,17],[18,16,15],[19,20,21],[22,23,24],[25,23,22],[26,23,25],[27,23,26],[28,23,27],[29,30,31],[29,32,30],[29,28,32],[33,28,29],[33,23,28],[21,23,33],[20,23,21],[34,35,36],[37,35,34],[38,35,37],[39,35,38],[40,35,39],[41,35,40],[42,35,41],[43,35,42],[44,35,43],[45,35,44],[46,35,45],[47,35,46],[48,35,47],[49,50,51],[52,48,47],[23,49,24],[53,54,55],[56,57,58],[59,57,56],[60,57,59],[61,57,60],[62,57,61],[63,57,62],[64,57,63],[65,57,64],[66,57,65],[13,57,66],[54,67,55],[68,69,70],[71,69,68],[72,69,71],[73,69,72],[74,69,73],[75,69,74],[76,69,75],[77,69,76],[67,69,77],[70,16,68],[70,17,16],[78,79,80],[81,79,78],[82,79,81],[83,79,82],[84,79,83],[85,79,84],[86,79,85],[87,79,86],[88,8,5],[11,7,6],[11,89,7],[11,9,89],[11,0,9],[55,90,53],[55,79,90],[55,80,79],[91,11,10],[92,69,12],[92,70,69],[34,93,37],[47,94,52],[47,95,94],[47,57,95],[47,58,57],[51,24,49],[21,35,19],[21,36,35],[14,92,12],[86,10,87],[86,91,10],[77,55,67],[66,14,13],[96,97,4],[98,99,100],[101,102,98],[103,101,98],[104,103,98],[105,106,107],[108,105,107],[109,108,107],[100,109,107],[110,111,112],[113,110,112],[114,115,116],[117,114,116],[118,119,120],[121,122,123],[124,121,123],[125,126,127],[128,129,130],[131,132,133],[71,131,133],[134,71,133],[135,134,133],[136,135,133],[137,138,139],[140,137,139],[141,140,139],[142,31,141],[142,141,139],[143,126,132],[144,145,146],[147,144,146],[127,147,146],[148,121,124],[149,148,124],[150,149,124],[151,150,124],[152,151,124],[153,152,124],[154,153,124],[155,154,124],[129,156,157],[130,129,157],[158,159,160],[161,158,160],[162,161,160],[163,162,160],[146,163,160],[164,165,166],[167,164,166],[168,169,170],[171,168,170],[139,171,170],[159,172,173],[123,174,142],[175,110,113],[173,175,113],[106,176,177],[178,106,177],[179,180,167],[112,179,167],[175,173,172],[119,118,181],[119,181,97],[119,97,96],[182,98,102],[182,102,183],[182,183,120],[182,120,119],[143,132,184],[184,185,143],[147,127,126],[174,123,122],[159,173,160],[126,125,133],[126,133,132],[186,187,188],[186,188,116],[186,116,115],[99,98,182],[109,100,99],[106,178,107],[114,117,177],[114,177,176],[128,130,187],[128,187,186],[135,136,157],[135,157,156],[163,146,145],[164,167,180],[179,112,111],[171,139,138],[189,155,166],[189,166,165],[149,150,93],[154,155,189],[31,142,174],[114,176,78],[81,78,176],[7,89,183],[89,9,120],[89,120,183],[78,80,114],[176,106,81],[88,5,103],[183,102,7],[118,120,9],[9,2,181],[9,181,118],[115,114,80],[82,81,106],[101,103,5],[102,101,5],[5,7,102],[97,181,2],[2,1,97],[1,3,97],[80,55,115],[172,159,59],[59,56,172],[3,4,97],[4,0,96],[105,108,82],[186,115,55],[82,106,105],[83,82,108],[60,59,159],[175,172,56],[119,96,0],[0,11,119],[108,109,84],[84,83,108],[55,77,186],[56,58,110],[56,110,175],[60,159,158],[11,91,182],[182,119,11],[91,86,182],[85,84,109],[86,85,99],[128,186,77],[58,111,110],[158,161,60],[26,25,137],[138,137,25],[99,182,86],[109,99,85],[77,76,128],[58,47,111],[61,60,161],[137,140,26],[27,26,140],[25,22,138],[129,128,76],[76,75,129],[75,74,129],[74,73,156],[73,72,135],[68,16,184],[68,184,132],[16,18,185],[161,162,62],[62,61,161],[179,111,47],[171,138,22],[156,129,74],[135,156,73],[134,135,72],[72,71,134],[68,132,131],[185,184,16],[18,15,185],[63,62,162],[28,27,140],[22,24,171],[71,68,131],[15,17,143],[15,143,185],[17,70,143],[70,92,126],[162,163,64],[64,63,162],[180,179,47],[47,46,180],[140,141,28],[168,171,24],[126,143,70],[92,14,147],[147,126,92],[14,66,144],[14,144,147],[65,64,163],[66,65,145],[46,45,180],[32,28,141],[24,51,168],[145,144,66],[163,145,65],[164,180,45],[45,44,164],[44,43,164],[43,42,165],[38,37,151],[150,151,37],[37,93,150],[141,31,30],[30,32,141],[169,168,51],[165,164,43],[189,165,42],[42,41,189],[40,39,152],[40,152,153],[151,152,39],[39,38,151],[93,34,149],[154,189,41],[153,154,41],[41,40,153],[148,149,34],[34,36,148],[36,21,121],[31,174,29],[121,148,36],[21,33,122],[21,122,121],[33,29,122],[174,122,29],[116,188,53],[104,98,10],[87,10,98],[98,100,87],[79,87,100],[79,100,107],[90,79,107],[90,107,178],[178,177,90],[53,90,177],[53,177,117],[117,116,53],[54,53,188],[54,188,187],[67,54,187],[67,187,130],[69,67,130],[69,130,157],[12,69,157],[12,157,136],[136,133,12],[12,133,125],[125,127,12],[13,12,127],[127,146,13],[57,13,146],[57,146,160],[95,57,160],[95,160,173],[173,113,95],[94,95,113],[113,112,94],[52,94,112],[48,52,112],[112,167,48],[35,48,167],[35,167,166],[19,35,166],[139,170,50],[50,49,139],[166,155,19],[20,19,155],[155,124,20],[23,20,124],[23,124,123],[49,23,123],[49,123,142],[142,139,49],[190,191,170],[192,191,190],[191,192,51],[191,51,50],[170,169,190],[169,51,192],[169,192,190],[170,191,50],[193,194,195],[196,197,198],[199,200,201],[198,202,203],[204,201,200],[205,204,200],[206,207,208],[206,208,205],[206,205,200],[207,206,209],[207,209,203],[207,203,202],[202,198,197],[197,196,210],[197,210,195],[197,195,194],[8,88,195],[8,195,210],[210,196,8],[196,198,8],[198,203,8],[203,209,8],[209,206,8],[206,200,8],[202,197,104],[207,202,104],[103,104,197],[103,197,194],[193,195,88],[88,103,194],[88,194,193],[200,199,8],[199,201,8],[204,205,6],[6,8,201],[6,201,204],[10,6,205],[10,205,208],[104,10,208],[104,208,207] ]; } elsif ($name eq 'pyramid') { $vertices = [ [10,10,40],[0,0,0],[20,0,0],[20,20,0],[0,20,0], ]; $facets = [ [0,1,2],[0,3,4],[3,1,4],[1,3,2],[3,0,2],[4,1,0], ]; } elsif ($name eq 'two_hollow_squares') { $vertices = [ [66.7133483886719,104.286666870117,0],[66.7133483886719,95.7133331298828,0],[65.6666870117188,94.6666717529297,0],[75.2866821289062,95.7133331298828,0],[76.3333435058594,105.333335876465,0],[76.3333435058594,94.6666717529297,0],[65.6666870117188,105.33332824707,0],[75.2866821289062,104.286666870117,0],[71.1066818237305,104.58666229248,2.79999995231628],[66.4133529663086,104.58666229248,2.79999995231628],[75.5866851806641,104.58666229248,2.79999995231628],[66.4133529663086,99.8933334350586,2.79999995231628],[66.4133529663086,95.4133377075195,2.79999995231628],[71.1066818237305,95.4133377075195,2.79999995231628],[75.5866851806641,95.4133377075195,2.79999995231628],[75.5866851806641,100.106666564941,2.79999995231628],[74.5400161743164,103.540000915527,2.79999995231628],[70.0320129394531,103.540000915527,2.79999995231628],[67.4600067138672,103.540000915527,2.79999995231628],[67.4600067138672,100.968002319336,2.79999995231628],[67.4600067138672,96.4599990844727,2.79999995231628],[74.5400161743164,99.0319976806641,2.79999995231628],[74.5400161743164,96.4599990844727,2.79999995231628],[70.0320129394531,96.4599990844727,2.79999995231628],[123.666717529297,94.6666717529297,0],[134.333312988281,94.6666717529297,0],[124.413360595703,95.4133377075195,2.79999995231628],[129.106674194336,95.4133377075195,2.79999995231628],[133.586669921875,95.4133377075195,2.79999995231628],[123.666717529297,105.33332824707,0],[124.413360595703,104.58666229248,2.79999995231628],[124.413360595703,99.8933334350586,2.79999995231628],[134.333312988281,105.33332824707,0],[129.106674194336,104.58666229248,2.79999995231628],[133.586669921875,104.58666229248,2.79999995231628],[133.586669921875,100.106666564941,2.79999995231628],[124.713317871094,104.286666870117,0],[124.713317871094,95.7133331298828,0],[133.286712646484,95.7133331298828,0],[133.286712646484,104.286666870117,0],[132.540023803711,103.540000915527,2.79999995231628],[128.032028198242,103.540008544922,2.79999995231628],[125.460006713867,103.540000915527,2.79999995231628],[125.460006713867,100.968002319336,2.79999995231628],[125.460006713867,96.4599990844727,2.79999995231628],[132.540023803711,99.0319976806641,2.79999995231628],[132.540023803711,96.4599990844727,2.79999995231628],[128.032028198242,96.4599990844727,2.79999995231628], ]; $facets = [ [0,1,2],[3,4,5],[6,4,0],[6,0,2],[2,1,5],[7,4,3],[1,3,5],[0,4,7],[4,6,8],[6,9,8],[4,8,10],[6,2,9],[2,11,9],[2,12,11],[2,5,12],[5,13,12],[5,14,13],[4,10,15],[5,4,14],[4,15,14],[7,16,17],[0,7,18],[7,17,18],[1,19,20],[1,0,19],[0,18,19],[7,3,21],[3,22,21],[7,21,16],[3,23,22],[3,1,23],[1,20,23],[24,25,26],[25,27,26],[25,28,27],[29,24,30],[24,31,30],[24,26,31],[32,29,33],[29,30,33],[32,33,34],[32,34,35],[25,32,28],[32,35,28],[36,37,24],[38,32,25],[29,32,36],[29,36,24],[24,37,25],[39,32,38],[37,38,25],[36,32,39],[39,40,41],[36,39,42],[39,41,42],[37,43,44],[37,36,43],[36,42,43],[39,38,45],[38,46,45],[39,45,40],[38,47,46],[38,37,47],[37,44,47],[16,8,9],[16,10,8],[10,16,15],[15,16,21],[22,15,21],[15,22,14],[22,23,14],[23,20,14],[17,16,9],[18,17,9],[19,18,9],[19,9,11],[19,11,20],[13,14,20],[20,11,12],[13,20,12],[41,40,30],[42,41,30],[43,42,30],[43,30,31],[43,31,44],[27,28,44],[44,31,26],[27,44,26],[40,33,30],[40,34,33],[34,40,35],[35,40,45],[46,35,45],[35,46,28],[46,47,28],[47,44,28], ]; } elsif ($name eq 'small_dorito') { $vertices = [ [6.00058937072754,-22.9982089996338,0],[22.0010242462158,-49.9998741149902,0],[-9.99957847595215,-49.999870300293,0],[6.00071382522583,-32.2371635437012,28.0019245147705],[11.1670551300049,-37.9727020263672,18.9601669311523],[6.00060224533081,-26.5392456054688,10.7321853637695] ]; $facets = [ [0,1,2],[3,4,5],[2,1,4],[2,4,3],[2,3,5],[2,5,0],[5,4,1],[5,1,0] ]; } elsif ($name eq 'bridge') { $vertices = [ [75,84.5,8],[125,84.5,8],[75,94.5,8],[120,84.5,5],[125,94.5,8],[75,84.5,0],[80,84.5,5],[125,84.5,0],[125,94.5,0],[80,94.5,5],[75,94.5,0],[120,94.5,5],[120,84.5,0],[80,94.5,0],[80,84.5,0],[120,94.5,0] ]; $facets = [ [0,1,2],[1,0,3],[2,1,4],[2,5,0],[0,6,3],[1,3,7],[1,8,4],[4,9,2],[10,5,2],[5,6,0],[6,11,3],[3,12,7],[7,8,1],[4,8,11],[4,11,9],[9,10,2],[10,13,5],[14,6,5],[9,11,6],[11,12,3],[12,8,7],[11,8,15],[13,10,9],[5,13,14],[14,13,6],[6,13,9],[15,12,11],[15,8,12] ]; } elsif ($name eq 'bridge_with_hole') { $vertices = [ [75,69.5,8],[80,76.9091644287109,8],[75,94.5,8],[125,69.5,8],[120,76.9091644287109,8],[120,87.0908355712891,8],[80,87.0908355712891,8],[125,94.5,8],[80,87.0908355712891,5],[120,87.0908355712891,5],[125,94.5,0],[120,69.5,0],[120,94.5,0],[125,69.5,0],[120,94.5,5],[80,94.5,5],[80,94.5,0],[75,94.5,0],[80,69.5,5],[80,69.5,0],[80,76.9091644287109,5],[120,69.5,5],[75,69.5,0],[120,76.9091644287109,5] ]; $facets = [ [0,1,2],[1,0,3],[1,3,4],[4,3,5],[2,6,7],[6,2,1],[7,6,5],[7,5,3],[5,8,9],[8,5,6],[10,11,12],[11,10,13],[14,8,15],[8,14,9],[2,16,17],[16,2,15],[15,2,14],[14,10,12],[10,14,7],[7,14,2],[16,18,19],[18,16,20],[20,16,1],[1,16,8],[8,16,15],[6,1,8],[3,11,13],[11,3,21],[21,3,18],[18,22,19],[22,18,0],[0,18,3],[16,22,17],[22,16,19],[2,22,0],[22,2,17],[5,23,4],[23,11,21],[11,23,12],[12,23,9],[9,23,5],[12,9,14],[23,18,20],[18,23,21],[10,3,13],[3,10,7],[1,23,20],[23,1,4] ]; } elsif ($name eq 'step') { $vertices = [ [0,20,5],[0,20,0],[0,0,5],[0,0,0],[20,0,0],[20,0,5],[1,19,5],[1,1,5],[19,1,5],[20,20,5],[19,19,5],[20,20,0],[19,19,10],[1,19,10],[1,1,10],[19,1,10] ]; $facets = [ [0,1,2],[1,3,2],[3,4,5],[2,3,5],[6,0,2],[6,2,7],[5,8,7],[5,7,2],[9,10,8],[9,8,5],[9,0,6],[9,6,10],[9,11,1],[9,1,0],[3,1,11],[4,3,11],[5,11,9],[5,4,11],[12,10,6],[12,6,13],[6,7,14],[13,6,14],[7,8,15],[14,7,15],[15,8,10],[15,10,12],[12,13,14],[12,14,15] ]; } elsif ($name eq 'slopy_cube') { $vertices = [ [-10,-10,0], [-10,-10,20], [-10,10,0], [-10,10,20], [0,-10,10], [10,-10,0], [2.92893,-10,10], [10,-10,2.92893], [0,-10,20], [10,10,0], [0,10,10], [0,10,20], [2.92893,10,10], [10,10,2.92893], ]; $facets = [ [0,1,2], [2,1,3], [4,0,5], [4,1,0], [6,4,7], [7,4,5], [4,8,1], [0,2,5], [5,2,9], [2,10,9], [10,3,11], [2,3,10], [9,10,12], [13,9,12], [3,1,8], [11,3,8], [10,11,8], [4,10,8], [6,12,10], [4,6,10], [7,13,12], [6,7,12], [7,5,9], [13,7,9], ]; } else { return undef; } my $mesh = Slic3r::TriangleMesh->new; $mesh->ReadFromPerl($vertices, $facets); $mesh->repair; $mesh->scale_xyz(Slic3r::Pointf3->new(@{$params{scale_xyz}})) if $params{scale_xyz}; $mesh->translate(@{$params{translate}}) if $params{translate}; return $mesh; } sub model { my ($model_name, %params) = @_; my $model = Slic3r::Model->new; my $object = $model->add_object(input_file => "${model_name}.stl"); $model->set_material($model_name); $object->add_volume(mesh => mesh($model_name, %params), material_id => $model_name); $object->add_instance( offset => Slic3r::Pointf->new(0,0), rotation => $params{rotation} // 0, scaling_factor => $params{scale} // 1, ); return $model; } sub init_print { my ($models, %params) = @_; my $config = Slic3r::Config->new; $config->apply($params{config}) if $params{config}; $config->set('gcode_comments', 1) if $ENV{SLIC3R_TESTS_GCODE}; my $print = Slic3r::Print->new; $print->apply_config($config); $models = [$models] if ref($models) ne 'ARRAY'; $models = [ map { ref($_) ? $_ : model($_, %params) } @$models ]; for my $model (@$models) { die "Unknown model in test" if !defined $model; if (defined $params{duplicate} && $params{duplicate} > 1) { $model->duplicate($params{duplicate} // 1, $print->config->min_object_distance); } $model->arrange_objects($print->config->min_object_distance); $model->center_instances_around_point($params{print_center} ? Slic3r::Pointf->new(@{$params{print_center}}) : Slic3r::Pointf->new(100,100)); foreach my $model_object (@{$model->objects}) { $print->auto_assign_extruders($model_object); $print->add_model_object($model_object); } } $print->validate; # We return a proxy object in order to keep $models alive as required by the Print API. return Slic3r::Test::Print->new( print => $print, models => $models, ); } sub gcode { my ($print) = @_; $print = $print->print if $print->isa('Slic3r::Test::Print'); my $fh = IO::Scalar->new(\my $gcode); $print->process; $print->export_gcode(output_fh => $fh, quiet => 1); $fh->close; return $gcode; } sub _eq { my ($a, $b) = @_; return abs($a - $b) < epsilon; } sub add_facet { my ($facet, $vertices, $facets) = @_; push @$facets, []; for my $i (0..2) { my $v = first { $vertices->[$_][X] == $facet->[$i][X] && $vertices->[$_][Y] == $facet->[$i][Y] && $vertices->[$_][Z] == $facet->[$i][Z] } 0..$#$vertices; if (!defined $v) { push @$vertices, [ @{$facet->[$i]}[X,Y,Z] ]; $v = $#$vertices; } $facets->[-1][$i] = $v; } } package Slic3r::Test::Print; use Moo; has 'print' => (is => 'ro', required => 1, handles => [qw(process apply_config)]); has 'models' => (is => 'ro', required => 1); 1; Slic3r-1.3.0/lib/Slic3r/Test/000077500000000000000000000000001327442435500155075ustar00rootroot00000000000000Slic3r-1.3.0/lib/Slic3r/Test/SectionCut.pm000066400000000000000000000155671327442435500201430ustar00rootroot00000000000000# 2D cut in the XZ plane through the toolpaths. # For debugging purposes. package Slic3r::Test::SectionCut; use Moo; use List::Util qw(any min max); use Slic3r::Geometry qw(unscale); use Slic3r::Geometry::Clipper qw(intersection_pl); use SVG; use Slic3r::SVG; has 'print' => (is => 'ro', required => 1); has 'scale' => (is => 'ro', default => sub { 30 }); has 'y_percent' => (is => 'ro', default => sub { 0.5 }); # Y coord of section line expressed as factor has '_line' => (is => 'lazy'); has '_height' => (is => 'rw'); has '_svg' => (is => 'rw'); has '_svg_style' => (is => 'rw', default => sub { {} }); has '_bb' => (is => 'lazy'); sub _build__line { my $self = shift; # calculate the Y coordinate of the section line my $bb = $self->_bb; my $y = ($bb->y_min + $bb->y_max) * $self->y_percent; # store our section line return Slic3r::Line->new([ $bb->x_min, $y ], [ $bb->x_max, $y ]); } sub _build__bb { my ($self) = @_; return $self->print->bounding_box; } sub export_svg { my $self = shift; my ($filename) = @_; # get bounding box of print and its height # (Print should return a BoundingBox3 object instead) my $print_size = $self->_bb->size; $self->_height(max(map $_->print_z, map @{$_->layers}, @{$self->print->objects})); # initialize the SVG canvas $self->_svg(my $svg = SVG->new( width => $self->scale * unscale($print_size->x), height => $self->scale * $self->_height, )); # set default styles $self->_svg_style->{'stroke-width'} = 1; $self->_svg_style->{'fill-opacity'} = 0.5; $self->_svg_style->{'stroke-opacity'} = 0.2; # plot perimeters $self->_svg_style->{'stroke'} = '#EE0000'; $self->_svg_style->{'fill'} = '#FF0000'; $self->_plot_group(sub { map @{$_->perimeters}, @{$_[0]->regions} }); # plot infill $self->_svg_style->{'stroke'} = '#444444'; $self->_svg_style->{'fill'} = '#454545'; $self->_plot_group(sub { map @{$_->fills}, @{$_[0]->regions} }); # plot support material $self->_svg_style->{'stroke'} = '#12EF00'; $self->_svg_style->{'fill'} = '#22FF00'; $self->_plot_group(sub { $_[0]->isa('Slic3r::Layer::Support') ? ($_[0]->support_fills, $_[0]->support_interface_fills) : () }); Slic3r::open(\my $fh, '>', $filename); print $fh $svg->xmlify; close $fh; printf "Section cut SVG written to %s\n", $filename; } sub _plot_group { my $self = shift; my ($filter) = @_; foreach my $object (@{$self->print->objects}) { foreach my $layer (@{$object->layers}, @{$object->support_layers}) { my @paths = map $_->clone, map @{$_->flatten}, grep defined $_, $filter->($layer); my $name = sprintf "%s %d (z = %f)", ($layer->isa('Slic3r::Layer::Support') ? 'Support Layer' : 'Layer'), $layer->id, $layer->print_z; my $g = $self->_svg->getElementByID($name) || $self->_svg->group(id => $name, style => { %{$self->_svg_style} }); foreach my $copy (@{$object->_shifted_copies}) { if (0) { # export plan with section line and exit my @grown = map @{$_->grow}, @paths; $_->translate(@$copy) for @paths; require "Slic3r/SVG.pm"; Slic3r::SVG::output( "line.svg", no_arrows => 1, polygons => \@grown, red_lines => [ $self->_line ], ); exit; } $self->_plot_path($_, $g, $copy, $layer) for @paths; } } } } sub _plot_path { my ($self, $path, $g, $copy, $layer) = @_; my $grown = $path->grow; $_->translate(@$copy) for @$grown; my $intersections = intersection_pl( [ $self->_line->as_polyline ], $grown, ); if (0 && @$intersections) { # export plan with section line and exit require "Slic3r/SVG.pm"; Slic3r::SVG::output( "intersections.svg", no_arrows => 1, polygons => $grown, red_lines => [ $self->_line ], ); exit; } # turn intersections to lines die "Intersection has more than two points!\n" if any { @$_ > 2 } @$intersections; my @lines = map Slic3r::Line->new(@$_), @$intersections; my $is_bridge = $path->isa('Slic3r::ExtrusionPath') ? $path->is_bridge : any { $_->is_bridge } @$path; foreach my $line (@lines) { my $this_path = $path; if ($path->isa('Slic3r::ExtrusionLoop')) { # FIXME: find the actual ExtrusionPath of this intersection $this_path = $path->[0]; } # align to canvas $line->translate(-$self->_bb->x_min, 0); # we want lines oriented from left to right in order to draw rectangles correctly $line->reverse if $line->a->x > $line->b->x; if ($is_bridge) { my $radius = $this_path->width / 2; my $width = unscale abs($line->b->x - $line->a->x); if ((10 * $radius) < $width) { # we're cutting the path in the longitudinal direction, so we've got a rectangle $g->rectangle( 'x' => $self->scale * unscale($line->a->x), 'y' => $self->scale * $self->_y($layer->print_z), 'width' => $self->scale * $width, 'height' => $self->scale * $radius * 2, 'rx' => $self->scale * $radius * 0.35, 'ry' => $self->scale * $radius * 0.35, ); } else { $g->circle( 'cx' => $self->scale * (unscale($line->a->x) + $radius), 'cy' => $self->scale * $self->_y($layer->print_z - $radius), 'r' => $self->scale * $radius, ); } } else { my $height = $this_path->height != -1 ? $this_path->height : $layer->height; $g->rectangle( 'x' => $self->scale * unscale($line->a->x), 'y' => $self->scale * $self->_y($layer->print_z), 'width' => $self->scale * unscale($line->b->x - $line->a->x), 'height' => $self->scale * $height, 'rx' => $self->scale * $height * 0.5, 'ry' => $self->scale * $height * 0.5, ); } } } sub _y { my $self = shift; my ($y) = @_; return $self->_height - $y; } 1; Slic3r-1.3.0/package/000077500000000000000000000000001327442435500142565ustar00rootroot00000000000000Slic3r-1.3.0/package/common/000077500000000000000000000000001327442435500155465ustar00rootroot00000000000000Slic3r-1.3.0/package/common/coreperl000066400000000000000000000003271327442435500173060ustar00rootroot00000000000000# Core perl modules used in Slic3r attributes base bytes B POSIX FindBin Unicode::Normalize Tie::Handle Time::Local Math::Trig IO::Socket Errno Storable lib overload warnings local::lib strict utf8 parent Slic3r-1.3.0/package/common/shell.cpp000066400000000000000000000065131327442435500173660ustar00rootroot00000000000000#include // from the Perl distribution #include // from the Perl distribution #ifdef WIN32 // Perl win32 specific includes, found in perl\\lib\\CORE\\win32.h // Defines the windows specific convenience RunPerl() function, // which is not available on other operating systems. #include #include #endif #include #include #ifdef WIN32 int main(int argc, char **argv, char **env) { // If the Slic3r is installed in a localized directory (containing non-iso // characters), spaces or semicolons, use short file names. char exe_path[MAX_PATH] = {0}; char script_path[MAX_PATH]; char gui_flag[6] = {"--gui"}; #ifdef FORCE_GUI char** command_line = (char**)malloc(sizeof(char*) * ((++ argc) + 2)); #else char** command_line = (char**)malloc(sizeof(char*) * ((++ argc) + 1)); #endif { // Unicode path. This will not be used directly, but to test, whether // there are any non-ISO characters, in which case the path is converted to a // short path (using 8.3 directory names). wchar_t exe_path_w[MAX_PATH] = {0}; char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; bool needs_short_paths = false; int len; int i; GetModuleFileNameA(NULL, exe_path, MAX_PATH-1); GetModuleFileNameW(NULL, exe_path_w, MAX_PATH-1); len = strlen(exe_path); if (len != wcslen(exe_path_w)) { needs_short_paths = true; } else { for (i = 0; i < len; ++ i) if ((wchar_t)exe_path[i] != exe_path_w[i] || exe_path[i] == ' ' || exe_path[i] == ';') { needs_short_paths = true; break; } } if (needs_short_paths) { wchar_t exe_path_short[MAX_PATH] = {0}; GetShortPathNameW(exe_path_w, exe_path_short, MAX_PATH); len = wcslen(exe_path_short); for (i = 0; i <= len; ++ i) exe_path[i] = (char)exe_path_short[i]; } _splitpath(exe_path, drive, dir, fname, ext); _makepath(script_path, drive, dir, NULL, NULL); if (needs_short_paths) printf("Slic3r installed in a loclized path. Using an 8.3 path: \"%s\"\n", script_path); SetDllDirectoryA(script_path); _makepath(script_path, drive, dir, "slic3r", "pl"); command_line[0] = exe_path; command_line[1] = script_path; memcpy(command_line + 2, argv + 1, sizeof(char*) * (argc - 2)); #ifdef FORCE_GUI command_line[argc] = gui_flag; command_line[argc+1] = NULL; #else command_line[argc] = NULL; #endif // Unset the PERL5LIB and PERLLIB environment variables. SetEnvironmentVariable("PERL5LIB", NULL); SetEnvironmentVariable("PERLLIB", NULL); #if 0 printf("Arguments: \r\n"); for (size_t i = 0; i < argc + 1; ++ i) printf(" %d: %s\r\n", i, command_line[i]); #endif } #ifdef FORCE_GUI RunPerl(argc+1, command_line, NULL); #else RunPerl(argc, command_line, NULL); #endif free(command_line); } #else int main(int argc, char **argv, char **env) { PerlInterpreter *my_perl = perl_alloc(); if (my_perl == NULL) { fprintf(stderr, "Cannot start perl interpreter. Exiting.\n"); return -1; } perl_construct(my_perl); #ifdef FORCE_GUI char* command_line[] = { "slic3r", "slic3r.pl", "--gui" }; #else char* command_line[] = { "slic3r", "slic3r.pl" }; #endif perl_parse(my_perl, NULL, 3, command_line, (char **)NULL); perl_run(my_perl); perl_destruct(my_perl); perl_free(my_perl); } #endif Slic3r-1.3.0/package/common/util.sh000066400000000000000000000045121327442435500170610ustar00rootroot00000000000000#!/bin/bash # must be run from the root function set_version () { SLIC3R_VERSION=$(grep "VERSION" xs/src/libslic3r/libslic3r.h | awk -F\" '{print $2}') } # Cache the SHA1 for this build commit. function get_commit () { if [ ! -z ${TRAVIS_COMMIT+x} ]; then # Travis sets the sha1 in TRAVIS_COMMIT COMMIT_SHA1=$(git rev-parse --short $TRAVIS_COMMIT) else # should be able to get it properly COMMIT_SHA1=$(git rev-parse --short HEAD) fi } function set_build_id () { echo "Setting SLIC3R_BUILD_ID" if [ $(git describe &>/dev/null) ]; then SLIC3R_BUILD_ID=$(git describe) TAGGED=true else SLIC3R_BUILD_ID=${SLIC3R_VERSION}-${COMMIT_SHA1} fi } function set_branch () { echo "Setting current_branch" if [ -z ${TRAVIS_BRANCH} ] && [ -z ${GIT_BRANCH+x} ] && [ -z ${APPVEYOR_REPO_BRANCH+x} ]; then current_branch=$(git symbolic-ref HEAD | sed 's!refs\/heads\/!!') else current_branch="unknown" if [ ! -z ${GIT_BRANCH+x} ]; then echo "Setting to GIT_BRANCH" current_branch=$(echo $GIT_BRANCH | cut -d / -f 2) fi if [ ! -z ${APPVEYOR_REPO_BRANCH+x} ]; then echo "Setting to APPVEYOR_REPO_BRANCH" current_branch=$APPVEYOR_REPO_BRANCH fi if [ ! -z ${TRAVIS_BRANCH} ]; then if [ "${TRAVIS_BRANCH}" != "false" ]; then echo "Setting to TRAVIS_BRANCH" current_branch=$TRAVIS_BRANCH fi fi fi if [ -z ${current_branch+x} ]; then current_branch="unknown" fi } function set_app_name () { set_branch if [ "$current_branch" == "master" ]; then appname=Slic3r else appname=Slic3r-${current_branch} fi } function set_pr_id () { echo "Setting PR_ID if available." if [ ! -z ${GITHUB_PR_NUMBER+x} ]; then PR_ID=$GITHUB_PR_NUMBER fi if [ ! -z ${APPVEYOR_PULL_REQUEST_NUMBER+x} ]; then PR_ID=$APPVEYOR_PULL_REQUEST_NUMBER fi if [ ! -z ${TRAVIS_PULL_REQUEST_BRANCH+x} ] && [ "${TRAVIS_PULL_REQUEST}" != "false" ] ; then PR_ID=$TRAVIS_PULL_REQUEST fi if [ ! -z ${PR_ID+x} ]; then echo "Setting PR_ID to $PR_ID." else echo "PR_ID remains unset." fi } function install_par () { cpanm -q PAR::Packer cpanm -q Wx::Perl::Packager } Slic3r-1.3.0/package/deploy/000077500000000000000000000000001327442435500155525ustar00rootroot00000000000000Slic3r-1.3.0/package/deploy/bintray.sh000077500000000000000000000036651327442435500175730ustar00rootroot00000000000000#!/bin/bash # Prerequistes # Environment variables: # BINTRAY_API_KEY - Working API key # BINTRAY_API_USER - Bintray username. # Run this from the repository root (required to get slic3r version) source $(dirname $0)/common/util.sh SLIC3R_VERSION=$(grep "VERSION" xs/src/libslic3r/libslic3r.h | awk -F\" '{print $2}') get_commit set_build_id set_branch set_pr_id if [ "$current_branch" == "master" ] && [ -z ${PR_ID} ]; then # If building master, goes in slic3r_dev or slic3r, depending on whether or not this is a tagged build if [ -z ${TAGGED+x} ]; then SLIC3R_PKG=slic3r_dev else SLIC3R_PKG=slic3r fi version=$SLIC3R_BUILD_ID else # If building a branch, put the package somewhere else. echo "Delploying pull request $PR_ID" SLIC3R_PKG=Slic3r_Branches version=${SLIC3R_BUILD_ID}-PR${PR_ID} fi file=$1 echo "Deploying $file to $version on Bintray repo $SLIC3R_PKG..." API=${BINTRAY_API_KEY} USER=${BINTRAY_API_USER} echo "Creating version: $version" curl -s -X POST -d "{ \"name\": \"$version\", \"released\": \"ISO8601 $(date +%Y-%m-%d'T'%H:%M:%S)\", \"desc\": \"This version...\", \"github_release_notes_file\": \"RELEASE.txt\", \"github_use_tag_release_notes\": true, \"vcs_tag\": \"$version\" }" -u${USER}:${API} https://api.bintray.com/content/lordofhyphens/Slic3r/${SLIC3R_PKG}/versions echo "Publishing ${file} to ${version}..." curl -s -H "X-Bintray-Package: $SLIC3R_PKG" -H "X-Bintray-Version: $version" -H 'X-Bintray-Publish: 1' -H 'X-Bintray-Override: 1' -T $file -u${USER}:${API} https://api.bintray.com/content/lordofhyphens/Slic3r/$(basename $1) #curl -X POST -u${USER}:${API} https://api.bintray.com/content/lordofhyphens/Slic3r/${SLIC3R_PKG}/$version/publish # Wait 5s for the server to catch up #sleep 5 #curl -H 'Content-Type: application/json' -X PUT -d "{ \"list_in_downloads\":true }" -u${USER}:${API} https://api.bintray.com/file_metadata/lordofhyphens/Slic3r/$(basename $1) exit 0 Slic3r-1.3.0/package/deploy/sftp-symlink.sh000077500000000000000000000017411327442435500205540ustar00rootroot00000000000000#!/bin/bash # Prerequisites # Environment Variables: # UPLOAD_USER - user to upload to sftp server # KEY is assumed to be path to a ssh key for UPLOAD_USER DIR=$1 shift KEY=$1 shift EXT=$1 shift FILES=$* source $(dirname $0)/../common/util.sh set_pr_id set_branch if [ ! -z ${PR_ID+x} ] || [ $current_branch != "master" ]; then DIR=${DIR}/branches fi if [ -s $KEY ]; then for i in $FILES; do filepath=$(readlink -f "$i") filepath=$(basename $filepath) tmpfile=$(mktemp) echo "rm Slic3r-${current_branch}-latest.${EXT}" | sftp -i$KEY "${UPLOAD_USER}@dl.slic3r.org:$DIR/" echo "symlink $filepath Slic3r-${current_branch}-latest.${EXT} " > $tmpfile sftp -b $tmpfile -i$KEY "${UPLOAD_USER}@dl.slic3r.org:$DIR/" result=$? if [ $? -eq 1 ]; then echo "Error with SFTP symlink" exit $result; fi done else echo "$KEY is not available, not symlinking." fi exit $result Slic3r-1.3.0/package/deploy/sftp.sh000077500000000000000000000014061327442435500170660ustar00rootroot00000000000000#!/bin/bash # Prerequisites # Environment Variables: # UPLOAD_USER - user to upload to sftp server # KEY is assumed to be path to a ssh key for UPLOAD_USER DIR=$1 shift KEY=$1 shift FILES=$* source $(dirname $0)/../common/util.sh set_pr_id set_branch if [ ! -z ${PR_ID+x} ] || [ $current_branch != "master" ]; then DIR=${DIR}/branches fi if [ -s $KEY ]; then for i in $FILES; do filepath=$(readlink -f "$i") tmpfile=$(mktemp) echo put $filepath > $tmpfile sftp -b $tmpfile -i$KEY "${UPLOAD_USER}@dl.slic3r.org:$DIR/" result=$? if [ $? -eq 1 ]; then echo "Error with SFTP" exit $result; fi done else echo "$KEY is not available, not deploying." fi exit $result Slic3r-1.3.0/package/deploy/slic3r-upload.ppk.enc000066400000000000000000000027001327442435500215120ustar00rootroot00000000000000(ªÓô9„ôÇrµ×º±bÅZæJ3GØëž;RïÊX³šÀËß$\P…ßš¤ ß5ì :ÉÄCöÛŸ6ýYÕb¡9òçඤµmçŸ2‹uÈž{§É£bYâ °{ ~w@‡œUiúͤ‰j~!}4bàoZšõÆ—œu‡²Oa1ÿ¹Ç]xõEÈŒÎ~—’;ÛZa˜$Œ+z­¡q}ÄoßqÛ߆0Ë @gÁ£] 5.õl‚”4‹éqGõü~È/ûÚ&û³ö-¶¥}”Äg3J ’g‹ÇGbߨ fÖ¿£*Bü8®õ¹….ivT{×I5î˜iôÒÎ%ÙÉX¤Û¥îëûn£Û!Ú©Kï ¶`Зò¿Jˆ”ëfNÔ¨n¤QöO¯5ç°Z(°•µQÊΩ5ÄZkÄ¿—æ/&‚Õ»'ktbEÆ“ìg߻ٯFöwá³ñ#S~£Žº´t§­ÕêÃ(“JåCò_I¨­¶\ܽ–ÔRç @ýÀÜËz¥³w‹©üu>=Ímô-6À'Z™&¼¾Q«TÚо U'Ų‚W¡0äBôH7Í ©øó;h~Ýñ€G¡yŸ´OøÏ!#èv¨5´4µ2½lžb™Õ¼ ˜2D4²eSýãV+„H Çb¦ã–Ž—€;ÞVoþ§D{qãÖyׯ¥¨Ê*„æ`è1†‚íDÇ:>T#Ñ¥EFíÇáØîÑ!«øeõ^Ì}$<€QOæ}VžÝ;aÍ•šëp1‰âÐ >·¥#:RÃ#D¼KJ–4ÜœJLòÝd ò ä «Ì¯ÑÕBpÜ_³†ãí1ýu΄4Äs;ݦ‹Áñ²–8µ°_Cl`©•~ÂÇ‘:æ¿'©~&FôƒFúé±D™ P°ÙâÂig5R¼Qd¿eU$%:? ²ö{Œar.Ówsãidè_ {ŸÀŽò­–¢&ñÖp“‘®Ê9žd‡o„tïìâ“äºÐwù¶ Yç}òH¸´.²Ó».ì,åÈž‚¿Ó»Íx,#J[2yÒ-Æ‘PÔŸ.¡Â¶Ïjhy “˜ Eã…pÌŠANˆJkMîåSî1¶³‘ûTÍ…D”ô[£O÷åàÅ;=àI€çBš‹¬Ô cnär¿øÅórÛq„ƒûc÷¥…Ã{Åü_Ñ¢ºÜQo8àH÷P=2ú•|9ç™k«”6k“X]ðÉXæc^êš¡Žà)ÎtÓÜÛ2‹@W­ÃŽŸÕÿš~8ÌZDæõ²a=C#²é8N²øùVÔŒK6™²ØÂ÷bý¿Ã×AB¦NÇöùF(t² &|ÊeÎ:ÐQ`{9¸YË_³ƒÿßö•Îå§Íªsi˜ˆ½iõQà›"ï6¦nº‡óHó÷øZðn.#ôÊ&ê¦cÓK~ª£< ¤Þþ…DD Ë)ãÛýÙn?‡ÿBjIMðCå÷ŒD³ç¤~2šr]ŒÜ¿ùVȺˆÁ¿‹J¤·ÏÞß:/š*Ôç1˜ýZ<‚Ñ.Ñ1ñëž±ZÜo°šˆsLƒSÀ@ýΛ¤XϪCW®IÖ?n@‘;Rr÷qÄ…_Iغ$°‚9®˜\Þ%e TSlic3r-1.3.0/package/deploy/winscp.ps1000077500000000000000000000013131327442435500175030ustar00rootroot00000000000000# Prerequisites # Environment Variables: # UPLOAD_USER - user to upload to sftp server # KEY is assumed to be path to a ssh key for UPLOAD_USER Param( [string]$DIR, [string]$KEY, [string]$FILE ) Set-Variable -Name "UUSER" -Value "$env:UPLOAD_USER" Set-Variable -Name "UPLOAD" -Value "$($FILE | Resolve-Path)" if (Test-Path $KEY) { if ($env:APPVEYOR_PULL_REQUEST_NUMBER -Or $env:APPVEYOR_REPO_BRANCH -ne "master" ) { winscp.com /privatekey=$KEY /command "open sftp://$UUSER@dl.slic3r.org/$DIR/branches -hostkey=*" "put $UPLOAD ./$FILE" "exit" } else { winscp.com /privatekey=$KEY /command "open sftp://$UUSER@dl.slic3r.org/$DIR -hostkey=*" "put $UPLOAD ./$FILE" "exit" } } Slic3r-1.3.0/package/linux/000077500000000000000000000000001327442435500154155ustar00rootroot00000000000000Slic3r-1.3.0/package/linux/appimage.sh000077500000000000000000000053641327442435500175470ustar00rootroot00000000000000#!/usr/bin/env bash ######################################################################## # Package the binaries built on Travis-CI as an AppImage # By Joseph Lenox 2017 # For more information, see http://appimage.org/ # Assumes that the results from make_archive are present. ######################################################################## source $(dirname $0)/../common/util.sh set_version get_commit set_build_id set_branch set_app_name set_pr_id WD=${PWD}/$(dirname $0) srcfolder="$WD/${appname}" export ARCH=$(arch) APP=Slic3r LOWERAPP=${APP,,} mkdir -p $WD/${APP}.AppDir/usr/ wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh . ./functions.sh cd $WD/${APP}.AppDir mkdir -p $WD/${APP}.AppDir/usr/bin # Copy primary Slic3r script here and perl-local, as well as var for i in {var,slic3r.pl,perl-local}; do cp -R $srcfolder/$i $WD/${APP}.AppDir/usr/bin/ done mkdir -p ${WD}/${APP}.AppDir/usr/lib # copy Slic3r local-lib here for i in $(ls $srcfolder/bin); do install -v $srcfolder/bin/$i ${WD}/${APP}.AppDir/usr/lib done # copy other libraries needed to /usr/lib because this is an AppImage build. for i in $(cat $WD/libpaths.appimage.txt | grep -v "^#" | awk -F# '{print $1}'); do install -v $i ${WD}/${APP}.AppDir/usr/lib done cp -R $srcfolder/local-lib ${WD}/${APP}.AppDir/usr/lib/local-lib cat > $WD/${APP}.AppDir/AppRun << 'EOF' #!/usr/bin/env bash # some magic to find out the real location of this script dealing with symlinks DIR=`readlink "$0"` || DIR="$0"; DIR=`dirname "$DIR"`; cd "$DIR" DIR=`pwd` cd - > /dev/null # disable parameter expansion to forward all arguments unprocessed to the VM set -f # run the VM and pass along all arguments as is LD_LIBRARY_PATH="$DIR/usr/lib" "${DIR}/usr/bin/perl-local" -I"${DIR}/usr/lib/local-lib/lib/perl5" "${DIR}/usr/bin/slic3r.pl" --gui "$@" EOF chmod +x AppRun cp ${WD}/${APP}.AppDir/usr/bin/var/Slic3r_192px_transparent.png $WD/${APP}.AppDir/${APP}.png cat > $WD/${APP}.AppDir/${APP}.desktop < $CACHE/slic3r-perlbrew-5.24.tar.bz2" curl -L "http://www.siusgs.com/slic3r/buildserver/slic3r-perl.524.travis.tar.bz2" -o $CACHE/slic3r-perlbrew-5.24.tar.bz2; fi if [ ! -e $CACHE/boost-compiled.tar.bz2 ]; then echo "Downloading http://www.siusgs.com/slic3r/buildserver/boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2 => $CACHE/boost-compiled.tar.bz2" curl -L "http://www.siusgs.com/slic3r/buildserver/boost_1_63_0.built.gcc-4.9.4-buildserver.tar.bz2" -o $CACHE/boost-compiled.tar.bz2 fi if [ ! -e $CACHE/local-lib-wx${WXVERSION}.tar.bz2 ]; then echo "Downloading http://www.siusgs.com/slic3r/buildserver/slic3r-dependencies.travis-wx${WXVERSION}.tar.bz2 => $CACHE/local-lib-wx${WXVERSION}.tar.bz2" curl -L "http://www.siusgs.com/slic3r/buildserver/slic3r-dependencies.travis-wx${WXVERSION}.tar.bz2" -o $CACHE/local-lib-wx${WXVERSION}.tar.bz2 fi if [ ! -e $CACHE/wx${WXVERSION}.tar.bz2 ]; then echo "Downloading http://www.siusgs.com/slic3r/buildserver/wx${WXVERSION}-libs.tar.bz2 => $CACHE/wx${WXVERSION}.tar.bz2" curl -L "http://www.siusgs.com/slic3r/buildserver/wx${WXVERSION}-libs.tar.bz2" -o $CACHE/wx${WXVERSION}.tar.bz2 fi tar -C$TRAVIS_BUILD_DIR -xjf $CACHE/local-lib-wx${WXVERSION}.tar.bz2 tar -C$HOME/perl5/perlbrew/perls -xjf $CACHE/slic3r-perlbrew-5.24.tar.bz2 tar -C$HOME -xjf $CACHE/boost-compiled.tar.bz2 tar -C$HOME -xjf $CACHE/wx${WXVERSION}.tar.bz2 Slic3r-1.3.0/package/osx/000077500000000000000000000000001327442435500150675ustar00rootroot00000000000000Slic3r-1.3.0/package/osx/make_dmg.sh000077500000000000000000000131671327442435500172020ustar00rootroot00000000000000#!/bin/bash # Assembles an installation bundle from a built copy of Slic3r. # Requires PAR::Packer to be installed for the version of # perl copied. # Adapted from script written by bubnikv for Prusa3D. # Run from slic3r repo root directory. SLIC3R_VERSION=$(grep "VERSION" xs/src/libslic3r/libslic3r.h | awk -F\" '{print $2}') if [ "$#" -ne 1 ]; then echo "Usage: $(basename $0) dmg_name" exit 1; fi WD=$(dirname $0) # Determine if this is a tagged (release) commit. # Change the build id accordingly. if [ $(git describe &>/dev/null) ]; then TAGGED=true SLIC3R_BUILD_ID=$(git describe) else TAGGED=false SLIC3R_BUILD_ID=${SLIC3R_VERSION} fi if [ -z ${GIT_BRANCH+x} ] && [ -z ${APPVEYOR_REPO_BRANCH+x} ]; then current_branch=$(git symbolic-ref HEAD | sed 's!refs\/heads\/!!') else current_branch="unknown" if [ ! -z ${GIT_BRANCH+x} ]; then echo "Setting to GIT_BRANCH" current_branch=$(echo $GIT_BRANCH | cut -d / -f 2) fi if [ ! -z ${APPVEYOR_REPO_BRANCH+x} ]; then echo "Setting to APPVEYOR_REPO_BRANCH" current_branch=$APPVEYOR_REPO_BRANCH fi fi # If we're on a branch, add the branch name to the app name. if [ "$current_branch" == "master" ]; then appname=Slic3r dmgfile=slic3r-${SLIC3R_BUILD_ID}-${1}.dmg else appname=Slic3r-$(git symbolic-ref HEAD | sed 's!refs\/heads\/!!') dmgfile=slic3r-${SLIC3R_BUILD_ID}-${1}-$(git symbolic-ref HEAD | sed 's!refs\/heads\/!!').dmg fi rm -rf $WD/_tmp mkdir -p $WD/_tmp # OSX Application folder shenanigans. appfolder="$WD/${appname}.app" macosfolder=$appfolder/Contents/MacOS resourcefolder=$appfolder/Contents/Resources plistfile=$appfolder/Contents/Info.plist PkgInfoContents="APPL????" source $WD/plist.sh # Our slic3r dir and location of perl PERL_BIN=$(which perl) PP_BIN=$(which pp) SLIC3R_DIR=$(perl -MCwd=realpath -e "print realpath '${WD}/../../'") if [[ -d "${appfolder}" ]]; then echo "Deleting old working folder: ${appfolder}" rm -rf ${appfolder} fi if [[ -e "${dmgfile}" ]]; then echo "Deleting old dmg: ${dmgfile}" rm -rf ${dmgfile} fi echo "Creating new app folder: $appfolder" mkdir -p $appfolder mkdir -p $macosfolder mkdir -p $resourcefolder echo "Copying resources..." cp -rf $SLIC3R_DIR/var $resourcefolder/ mv $resourcefolder/var/Slic3r.icns $resourcefolder mv $resourcefolder/var/stl.icns $resourcefolder mv $resourcefolder/var/gcode.icns $resourcefolder echo "Copying Slic3r..." cp $SLIC3R_DIR/slic3r.pl $macosfolder/slic3r.pl cp -fRP $SLIC3R_DIR/local-lib $macosfolder/local-lib cp -fRP $SLIC3R_DIR/lib/* $macosfolder/local-lib/lib/perl5/ echo "Relocating dylib paths..." for bundle in $(find $macosfolder/local-lib/lib/perl5/darwin-thread-multi-2level/auto/Wx -name '*.bundle') $(find $macosfolder/local-lib/lib/perl5/darwin-thread-multi-2level/Alien/wxWidgets -name '*.dylib' -type f); do chmod +w $bundle for dylib in $(otool -l $bundle | grep .dylib | grep local-lib | awk '{print $2}'); do install_name_tool -change "$dylib" "@executable_path/local-lib/lib/perl5/darwin-thread-multi-2level/Alien/wxWidgets/osx_cocoa_3_0_2_uni/lib/$(basename $dylib)" $bundle done done echo "Copying startup script..." cp -f $WD/startup_script.sh $macosfolder/$appname chmod +x $macosfolder/$appname echo "Copying perl from $PERL_BIN" # Edit package/common/coreperl to add/remove core Perl modules added to this package, one per line. cp -f $PERL_BIN $macosfolder/perl-local ${PP_BIN} \ -M $(grep -v "^#" ${WD}/../common/coreperl | xargs | awk 'BEGIN { OFS=" -M "}; {$1=$1; print $0}') \ -B -p -e "print 123" -o $WD/_tmp/test.par unzip -o $WD/_tmp/test.par -d $WD/_tmp/ cp -rf $WD/_tmp/lib/* $macosfolder/local-lib/lib/perl5/ rm -rf $WD/_tmp echo "Cleaning bundle" rm -rf $macosfolder/local-lib/bin rm -rf $macosfolder/local-lib/man rm -f $macosfolder/local-lib/lib/perl5/Algorithm/*.pl rm -rf $macosfolder/local-lib/lib/perl5/unicore rm -rf $macosfolder/local-lib/lib/perl5/App rm -rf $macosfolder/local-lib/lib/perl5/Devel/CheckLib.pm rm -rf $macosfolder/local-lib/lib/perl5/ExtUtils rm -rf $macosfolder/local-lib/lib/perl5/Module/Build* rm -rf $macosfolder/local-lib/lib/perl5/TAP rm -rf $macosfolder/local-lib/lib/perl5/Test* find -d $macosfolder/local-lib -name '*.pod' -delete find -d $macosfolder/local-lib -name .packlist -delete find -d $macosfolder/local-lib -name .meta -exec rm -rf "{}" \; find -d $macosfolder/local-lib -name '*.h' -delete find -d $macosfolder/local-lib -name wxPerl.app -exec rm -rf "{}" \; find -d $macosfolder/local-lib -type d -path '*/Wx/*' \( -name WebView \ -or -name DocView -or -name STC -or -name IPC \ -or -name Calendar -or -name DataView \ -or -name DateTime -or -name Media -or -name PerlTest \ -or -name Ribbon \) -exec rm -rf "{}" \; find -d $macosfolder/local-lib -name libwx_osx_cocoau_ribbon-3.0.0.2.0.dylib -delete find -d $macosfolder/local-lib -name libwx_osx_cocoau_stc-3.0.0.2.0.dylib -delete find -d $macosfolder/local-lib -name libwx_osx_cocoau_webview-3.0.0.2.0.dylib -delete rm -rf $macosfolder/local-lib/lib/perl5/darwin-thread-multi-2level/Alien/wxWidgets/osx_cocoa_3_0_2_uni/include find -d $macosfolder/local-lib -type d -empty -delete make_plist echo $PkgInfoContents >$appfolder/Contents/PkgInfo if [[ -e "${KEYCHAIN_FILE}" ]]; then echo "Signing app..." chmod -R +w $macosfolder/* security list-keychains -s "${KEYCHAIN_FILE}" security default-keychain -s "${KEYCHAIN_FILE}" security unlock-keychain -p "${KEYCHAIN_PASSWORD}" "${KEYCHAIN_FILE}" codesign --sign "${KEYCHAIN_IDENTITY}" --deep "$appfolder" fi echo "Creating dmg file...." hdiutil create -fs HFS+ -srcfolder "$appfolder" -volname "$appname" "$dmgfile" Slic3r-1.3.0/package/osx/plist.sh000066400000000000000000000065431327442435500165660ustar00rootroot00000000000000#!/bin/bash function make_plist() { # Create information property list file (Info.plist). cat << EOF > $plistfile CFBundleExecutable $appname CFBundleGetInfoString Slic3r Copyright (C) 2011-$(date +%Y) Alessandro Ranellucci CFBundleIconFile Slic3r.icns CFBundleName Slic3r CFBundleShortVersionString EOF if [ $TAGGED ]; then echo " Slic3r $SLIC3R_BUILD_ID" >>$plistfile else echo " Slic3r $SLIC3R_BUILD_ID-$(git rev-parse --short head)" >>$plistfile fi cat << EOF >> $plistfile CFBundleIdentifier org.slic3r.$appname CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion ${SLIC3R_BUILD_ID} CFBundleDocumentTypes CFBundleTypeExtensions stl STL CFBundleTypeIconFile stl.icns CFBundleTypeName STL CFBundleTypeRole Viewer LISsAppleDefaultForType LSHandlerRank Alternate CFBundleTypeExtensions obj OBJ CFBundleTypeIconFile Slic3r.icns CFBundleTypeName STL CFBundleTypeRole Viewer LISsAppleDefaultForType LSHandlerRank Alternate CFBundleTypeExtensions amf AMF CFBundleTypeIconFile Slic3r.icns CFBundleTypeName STL CFBundleTypeRole Viewer LISsAppleDefaultForType LSHandlerRank Alternate CFBundleTypeExtensions gcode GCODE CFBundleTypeIconFile gcode.icns CFBundleTypeName GCODE CFBundleTypeRole Editor LISsAppleDefaultForType LSHandlerRank Alternate LSMinimumSystemVersion 10.7 NSPrincipalClass NSApplication NSHighResolutionCapable EOF } Slic3r-1.3.0/package/osx/startup_script.sh000066400000000000000000000001511327442435500205060ustar00rootroot00000000000000#!/bin/bash DIR=$(dirname "$0") exec "$DIR/perl-local" -I"$DIR/local-lib/lib/perl5" "$DIR/slic3r.pl" $@ Slic3r-1.3.0/package/win/000077500000000000000000000000001327442435500150535ustar00rootroot00000000000000Slic3r-1.3.0/package/win/appveyor_buildscript.ps1000066400000000000000000000017261327442435500217570ustar00rootroot00000000000000if (!(Test-Path "C:\users\appveyor\local-lib-$env:ARCH.7z")) { wget "https://bintray.com/lordofhyphens/Slic3r/download_file?file_path=local-lib-$env:ARCH.7z" -o "C:\users\appveyor\local-lib-$env:ARCH.7z" | Write-Output } if (Test-Path "C:\users\appveyor\local-lib-$env:ARCH.7z") { cmd /c "7z x C:\Users\appveyor\local-lib-$env:ARCH.7z -oC:\projects\slic3r" -y | Write-Output rm -r 'C:\projects\slic3r\local-lib\Slic3r*' } $env:Path = "C:\Strawberry\c\bin;C:\Strawberry\perl\bin;" + $env:Path cd C:\projects\slic3r rm -r 'C:\Program Files (x86)\Microsoft Vis*\bin' -Force Add-AppveyorCompilationMessage -Message "Building Slic3r XS" perl ./Build.pl if ($LastExitCode -ne 0) { Add-AppveyorCompilationMessage -Message "XS Failed to Build" -Category Error $host.SetShouldExit($LastExitCode) exit } Add-AppveyorCompilationMessage -Message "Making ZIP package" cd package/win ./compile_wrapper.ps1 524 | Write-Output ./package_win32.ps1 524| Write-Output Slic3r-1.3.0/package/win/appveyor_deploy.ps1000066400000000000000000000003061327442435500207200ustar00rootroot00000000000000 Add-AppveyorCompilationMessage -Message "Uploading to server." & ./package/deploy/winscp.ps1 -DIR win -KEY $env:APPVEYOR_BUILD_FOLDER/package/deploy/slic3r-upload.ppk -FILE *.zip *>> ./sftplog.txt Slic3r-1.3.0/package/win/appveyor_preinstall.ps1000066400000000000000000000070271327442435500216100ustar00rootroot00000000000000mkdir C:\projects\slic3r\FreeGLUT if (!(Test-Path "C:\users\appveyor\freeglut.$env:ARCH.7z")) { wget "https://bintray.com/lordofhyphens/Slic3r/download_file?file_path=freeglut-mingw-3.0.0.$env:ARCH.7z" -o C:\users\appveyor\freeglut.$env:ARCH.7z } cmd /c "7z x C:\Users\appveyor\freeglut.$env:ARCH.7z -oC:\projects\slic3r\FreeGLUT" if (!(Test-Path "C:\users\appveyor\strawberry.$env:ARCH.msi")) { if ($env:ARCH -eq "64bit") { wget "https://bintray.com/lordofhyphens/Slic3r/download_file?file_path=slic3r-perl-5.24.1.4-64bit.msi" -o "C:\users\appveyor\strawberry.$env:ARCH.msi" | Write-Output } else { wget "http://strawberryperl.com/download/5.24.1.1/strawberry-perl-5.24.1.1-32bit.msi" -o "C:\users\appveyor\strawberry.$env:ARCH.msi" | Write-Output } } if (!($env:ARCH -eq "32bit")) { if (!(Test-Path "C:\users\appveyor\extra_perl.7z")) { wget "https://bintray.com/lordofhyphens/Slic3r/download_file?file_path=Strawberry-6.3.0-seg-archive.7z" -o "C:\users\appveyor\extra_perl.7z" | Write-Output } } msiexec.exe /i "C:\users\appveyor\strawberry.$env:ARCH.msi" /quiet if (!($env:ARCH -eq "32bit")) { cmd /c "7z x -aoa C:\Users\appveyor\extra_perl.7z -oC:\" } if (!(Test-Path "C:\users\appveyor\winscp.zip")) { wget "https://bintray.com/lordofhyphens/Slic3r/download_file?file_path=WinSCP-5.9.4-Portable.zip" -o "C:\users\appveyor\winscp.zip" | Write-Output } cmd /c "7z x C:\Users\appveyor\winscp.zip -oC:\Strawberry\c\bin" rm -r C:\min* -Force rm -r C:\msys64\mingw* -Force rm -r C:\cygwin* -Force rm -r C:\Perl -Force $PERLDIR = 'C:\Strawberry' $env:Path = "C:\Strawberry\c\bin;C:\Strawberry\perl\bin;C:\Strawberry\perl\vendor\bin;" + $env:Path if(Test-Path -Path 'C:\Strawberry' ) { copy C:\Strawberry\c\bin\gcc.exe C:\Strawberry\c\bin\cc.exe cmd /c mklink /D C:\Perl C:\Strawberry\perl mkdir C:\dev if (!(Test-Path "C:\users\appveyor\boost.1.63.0.$env:ARCH.7z") -Or $env:FORCE_BOOST_REINSTALL -eq 1) { if ($env:ARCH -eq "64bit") { wget "http://www.siusgs.com/slic3r/buildserver/win/boost_1_63_0-x64-gcc-6.3.0-seh.7z" -O "C:\users\appveyor\boost.1.63.0.$env:ARCH.7z" | Write-Output } else { wget "https://bintray.com/lordofhyphens/Slic3r/download_file?file_path=boost_1_63_0-x32-gcc-4.9.2-sjlj.7z" -O "C:\users\appveyor\boost.1.63.0.$env:ARCH.7z" | Write-Output } } Add-AppveyorCompilationMessage -Message "Extracting cached archive." cmd /c "7z x C:\Users\appveyor\boost.1.63.0.$env:ARCH.7z -oC:\dev" mkdir C:\dev\CitrusPerl cmd /C mklink /D C:\dev\CitrusPerl\mingw32 C:\Strawberry\c cd C:\projects\slic3r cpanm ExtUtils::Typemaps::Basic cpanm ExtUtils::Typemaps::Default cpanm local::lib Add-AppveyorCompilationMessage -Message "Finished install script." rm -r 'C:\Program Files\Git\usr\bin' -Force } else { Add-AppveyorCompilationMessage -Message "No strawberry perl!" } Add-AppveyorCompilationMessage -Message "Installing wxWidgets (xsgui dependency))" if ($env:FORCE_WX_BUILD -eq 1) { rm "C:\Users\appveyor\wxwidgets-$env:ARCH.7z" -Force } if (!(Test-Path "C:\Users\appveyor\wxwidgets-$env:ARCH.7z")) { Add-AppveyorCompilationMessage -Message "Extracting wxWidgets for $env:ARCH" wget "https://bintray.com/lordofhyphens/Slic3r/download_file?file_path=wxwidgets-$env:ARCH.7z" -o C:\users\appveyor\wxwidgets-$env:ARCH.7z 7z x C:\users\appveyor\wxwidgets-$env:ARCH.7z -oC:\dev } else { Add-AppveyorCompilationMessage -Message "Extracting prebuilt wxWidgets." 7z x "C:\Users\appveyor\wxwidgets-$env:ARCH.7z" -oC:\dev } Slic3r-1.3.0/package/win/compile_wrapper.ps1000066400000000000000000000035621327442435500206760ustar00rootroot00000000000000# Short Powershell script to build a wrapper exec Param ( [string]$perlVersion = "524", [string]$STRAWBERRY_PATH = "C:\Strawberry", # Path to C++ compiler, or just name if it is in path [string]$cxx = "g++" ) function Get-ScriptDirectory { $Invocation = (Get-Variable MyInvocation -Scope 1).Value Split-Path $Invocation.MyCommand.Path } $scriptDir = Get-ScriptDirectory $perllib = "-lperl$perlVersion" $shell_loc = "${scriptDir}\..\common\shell.cpp" # Build the resource file (used to load icon, etc) windres ${scriptDir}\slic3r.rc -O coff -o ${scriptDir}\slic3r.res # Compile an object file that does not have gui forced. Invoke-Expression "$cxx -c -I'${STRAWBERRY_PATH}\perl\lib\CORE\' $shell_loc -o ${scriptDir}/slic3r.o" # Compile an object file with --gui automatically passed as an argument Invoke-Expression "$cxx -c -I'${STRAWBERRY_PATH}\perl\lib\CORE\' -DFORCE_GUI $shell_loc -o ${scriptDir}/slic3r-gui.o" # Build the EXE for the unforced version as slic3r-console Invoke-Expression "$cxx -static-libgcc -static-libstdc++ -L'${STRAWBERRY_PATH}\c\lib' -L'${STRAWBERRY_PATH}\perl\bin' -L'${STRAWBERRY_PATH}\perl\lib\CORE\' $perllib ${scriptDir}/slic3r.o ${scriptDir}/slic3r.res -o ${scriptDir}/slic3r-console.exe | Write-Host" # Build the EXE for the forced GUI Invoke-Expression "$cxx -static-libgcc -static-libstdc++ -L'${STRAWBERRY_PATH}\c\lib' -mwindows -L'${STRAWBERRY_PATH}\perl\bin' -L'${STRAWBERRY_PATH}\perl\lib\CORE\' $perllib ${scriptDir}/slic3r-gui.o ${scriptDir}/slic3r.res -o ${scriptDir}/slic3r.exe | Write-Host" # Build an extra copy of the GUI version that creates a console window Invoke-Expression "$cxx -static-libgcc -static-libstdc++ -L'${STRAWBERRY_PATH}\c\lib' -L'${STRAWBERRY_PATH}\perl\bin' -L'${STRAWBERRY_PATH}\perl\lib\CORE\' $perllib ${scriptDir}/slic3r-gui.o ${scriptDir}/slic3r.res -o ${scriptDir}/slic3r-debug-console.exe | Write-Host" Slic3r-1.3.0/package/win/package_win32.ps1000066400000000000000000000136351327442435500201250ustar00rootroot00000000000000# Written by Joseph Lenox # Licensed under the same license as the rest of Slic3r. # ------------------------ # You need to have Strawberry Perl 5.24.0.1 (or slic3r-perl) installed for this to work, Param ( # Perl version major/minor number. Slic3r perl uses 524 [string]$perlVersion = "524", # Override the output file name. [string]$outputFile = "", [string]$currentDate = "$(Get-Date -UFormat '%Y.%m.%d')", # Override the branch name used in the output. Otherwise autodetect based on git. [string]$branch = "", #This is "32bit" or "64bit". It will detect based on presence of libglut. [string]$arch = $env:ARCH, # Change this to where you have Strawberry Perl installed. [string]$STRAWBERRY_PATH = "C:\Strawberry", [switch]$skipInstallPAR ) function Get-ScriptDirectory { $Invocation = (Get-Variable MyInvocation -Scope 1).Value Split-Path $Invocation.MyCommand.Path } $scriptDir = Get-ScriptDirectory echo "Make this is run from the perl command window." echo "Requires PAR." $perldll = "perl$perlVersion" if ($branch -eq "") { git branch | foreach { if ($env:APPVEYOR) { if ($_ -match "` (.*)") { $branch += $matches[1] } } else { if ($_ -match "\*` (.*)"){ $branch += $matches[1] } } } } if ($outputFile -eq "") { $outputFile = $output_zip } if (!($arch -eq "64bit" -Or $arch -eq "32bit")) { # detect current version through libglut if (Test-Path "${STRAWBERRY_PATH}\c\bin\libglut-0__.dll") { $arch = "64bit" } else { $arch = "32bit" } echo "Arch: $arch" } if ($env:APPVEYOR) { $output_zip = "${scriptDir}\..\..\Slic3r-${branch}.${currentDate}.${env:APPVEYOR_BUILD_NUMBER}.$(git rev-parse --short HEAD).${arch}.zip" } else { $output_zip = "${scriptDir}\..\..\Slic3r-${branch}.${currentDate}.$(git rev-parse --short HEAD).${arch}.zip" } if ($outputFile -eq "") { $outputFile = $output_zip } if (-Not $skipInstallPAR) { cpanm "PAR::Packer" } # Some file names change based on 64bit/32bit. Set them here. if ($arch -eq "32bit") { $perlarch = "sjlj" $glut = "libglut-0_.dll" $pthread= "pthreadGC2-w32.dll" } else { $perlarch = "seh" $glut = "libglut-0__.dll" $pthread= "pthreadGC2-w64.dll" } if (!( (Test-Path -Path "${scriptDir}\slic3r.exe") -And (Test-Path -Path "${scriptDir}\slic3r-console.exe") -And (Test-Path -Path "${scriptDir}\slic3r-debug-console.exe") ) ) { echo "Compiling Slic3r binaries" & ${scriptDir}\compile_wrapper.ps1 -perlVersion=$perlVersion -STRAWBERRY_PATH=$STRAWBERRY_PATH } # remove all static libraries, they just take up space. if ($env:APPVEYOR) { gci ${scriptDir}\..\..\ -recurse | ? {$_.Name -match ".*\.a$"} | ri gci -recurse ${scriptDir}\..\..\local-lib | ? {$_.PSIsContainer -And $_.Name -match "DocView|IPC|DataView|Media|Ribbon|Calendar|STC|PerlTest|WebView"} | ri gci -recurse ${scriptDir}\..\..\local-lib| ? {$_.Name -match ".*(webview|ribbon|stc).*\.dll"} | ri gci -recurse ${scriptDir}\..\..\local-lib| ? {$_.Name -match ".*(webview|ribbon|stc).*\.dll"} | ri gci -recurse ${scriptDir}\..\..\local-lib| ? {$_.Name -match "^ExtUtils$"} | ri gci -recurse ${scriptDir}\..\..\local-lib\lib\perl5\Module ? {$_.Name -match "^Build"} | ri gci -recurse ${scriptDir}\..\..\local-lib ? {$_.Name -match "\.pod$"} | ri gci -recurse ${scriptDir}\..\..\local-lib ? {$_.Name -match "\.h$"} | ri } pp ` -a "${scriptDir}/slic3r.exe;Slic3r.exe" ` -a "${scriptDir}/slic3r-console.exe;Slic3r-console.exe" ` -a "${scriptDir}/slic3r-debug-console.exe;Slic3r-debug-console.exe" ` -a "${scriptDir}/../../lib;lib" ` -a "${scriptDir}/../../local-lib;local-lib" ` -a "${scriptDir}/../../slic3r.pl;slic3r.pl" ` -a "${scriptDir}/../../var;var" ` -a "${scriptDir}/../../FreeGLUT/freeglut.dll;freeglut.dll" ` -a "${STRAWBERRY_PATH}\perl\bin\perl${perlVersion}.dll;perl${perlVersion}.dll" ` -a "${STRAWBERRY_PATH}\perl\bin\libstdc++-6.dll;libstdc++-6.dll" ` -a "${STRAWBERRY_PATH}\perl\bin\libgcc_s_${perlarch}-1.dll;libgcc_s_${perlarch}-1.dll" ` -a "${STRAWBERRY_PATH}\perl\bin\libwinpthread-1.dll;libwinpthread-1.dll" ` -a "${STRAWBERRY_PATH}\c\bin\${pthread};${pthread}" ` -a "${STRAWBERRY_PATH}\c\bin\${glut};${glut}" ` -M AutoLoader ` -M B ` -M Carp ` -M Class::Accessor ` -M Config ` -M Crypt::CBC ` -M Cwd ` -M Devel::GlobalDestruction ` -M Digest ` -M Digest::MD5 ` -M Digest::SHA ` -M Digest::base ` -M DynaLoader ` -M Errno ` -M Exporter ` -M Exporter::Heavy ` -M Fcntl ` -M File::Basename ` -M File::Glob ` -M File::Spec ` -M File::Spec::Unix ` -M File::Spec::Win32 ` -M FindBin ` -M HTTP::Config ` -M HTTP::Date ` -M HTTP::Headers ` -M HTTP::Headers::Util ` -M HTTP::Message ` -M HTTP::Request ` -M HTTP::Request::Common ` -M HTTP::Response ` -M HTTP::Status ` -M IO ` -M IO::Handle ` -M IO::Select ` -M IO::Socket ` -M LWP ` -M LWP::MediaTypes ` -M LWP::MemberMixin ` -M LWP::Protocol ` -M LWP::Protocol::http ` -M LWP::UserAgent ` -M List::Util ` -M Math::Trig ` -M Method::Generate::Accessor ` -M Method::Generate::BuildAll ` -M Method::Generate::Constructor ` -M Module::Runtime ` -M POSIX ` -M Pod::Escapes ` -M Pod::Text ` -M Pod::Usage ` -M SelectSaver ` -M Socket ` -M Socket6 ` -M Storable ` -M Sub::Exporter ` -M Sub::Exporter::Progressive ` -M Symbol ` -M Term::Cap ` -M Text::ParseWords ` -M Thread ` -M Thread::Queue ` -M Thread::Semaphore ` -M Tie::Handle ` -M Tie::Hash ` -M Tie::StdHandle ` -M Time::Local ` -M URI ` -M URI::Escape ` -M URI::http ` -M Unicode::Normalize ` -M Win32 ` -M Win32::API ` -M Win32::TieRegistry ` -M Win32::WinError ` -M Win32API::Registry ` -M XSLoader ` -B ` -M lib ` -p ${scriptDir}\..\..\slic3r.pl -o ${scriptDir}\..\..\slic3r.par # switch renaming based on whether or not using packaged exe or zip # make this more useful for not being on the appveyor server copy ${scriptDir}\..\..\slic3r.par ${outputFile} echo "Package saved as ${outputFile}" del ${scriptDir}\..\..\slic3r.par Slic3r-1.3.0/package/win/slic3r.exe.manifest000066400000000000000000000031701327442435500205630ustar00rootroot00000000000000 Slic3r Slic3r-1.3.0/package/win/slic3r.rc000066400000000000000000000012211327442435500165740ustar00rootroot00000000000000id ICON "../../var/Slic3r.ico" 1 VERSIONINFO FILEVERSION 1,3,0,0 PRODUCTVERSION 1,3,0,0 FILEOS 0x4 FILETYPE 0x1 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "CompanyName", "Slic3r.org" VALUE "FileDescription", "3D Printer Slicer application" VALUE "FileVersion", "1.3.0" VALUE "InternalName", "slic3r.exe" VALUE "LegalCopyright", "Alessandro Ranellucci" VALUE "OriginalFilename", "slic3r.exe" VALUE "ProductName", "Slic3r" VALUE "ProductVersion", "1.3.0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END 1 24 "slic3r.exe.manifest" Slic3r-1.3.0/share/000077500000000000000000000000001327442435500137655ustar00rootroot00000000000000Slic3r-1.3.0/share/locale/000077500000000000000000000000001327442435500152245ustar00rootroot00000000000000Slic3r-1.3.0/share/locale/ja/000077500000000000000000000000001327442435500156165ustar00rootroot00000000000000Slic3r-1.3.0/share/locale/ja/slic3r.mo000066400000000000000000000011661327442435500173560ustar00rootroot00000000000000Þ•4L` amåt Z hQuit Slic3rTravelProject-Id-Version: Slic3r POT-Creation-Date: 2017-03-28 19:09-0600 PO-Revision-Date: 2017-03-28 19:16-0600 Last-Translator: Language-Team: Language: ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 1.6.10 X-Poedit-Basepath: /home/lenox/slic3r Plural-Forms: nplurals=1; plural=0; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: def;test;show_info X-Poedit-SearchPath-0: xs/src/libslic3r X-Poedit-SearchPath-1: lib Travel-SPEEEDTravel-SPEEEDSlic3r-1.3.0/slic3r.pl000077500000000000000000000772211327442435500144330ustar00rootroot00000000000000#!/usr/bin/env perl use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/lib"; use local::lib '--no-create', "$FindBin::Bin/local-lib"; } use File::Basename qw(basename); use Getopt::Long qw(:config no_auto_abbrev); use List::Util qw(first); use POSIX qw(setlocale LC_NUMERIC ceil); use Slic3r; use Slic3r::Geometry qw(epsilon X Y Z deg2rad); use Time::HiRes qw(gettimeofday tv_interval); $|++; binmode STDOUT, ':utf8'; binmode STDERR, ':utf8'; our %opt = (); my %cli_options = (); { my %options = ( 'help' => sub { usage() }, 'version' => sub { print "$Slic3r::VERSION\n"; exit 0 }, 'debug' => \$Slic3r::debug, 'gui' => \$opt{gui}, 'no-gui' => \$opt{no_gui}, 'o|output=s' => \$opt{output}, 'j|threads=i' => \$opt{threads}, 'save=s' => \$opt{save}, 'load=s@' => \$opt{load}, 'autosave=s' => \$opt{autosave}, 'ignore-nonexistent-config' => \$opt{ignore_nonexistent_config}, 'datadir=s' => \$opt{datadir}, 'export-svg' => \$opt{export_svg}, 'merge|m' => \$opt{merge}, 'repair' => \$opt{repair}, 'cut=f' => \$opt{cut}, 'cut-grid=s' => \$opt{cut_grid}, 'split' => \$opt{split}, 'info' => \$opt{info}, 'scale=f' => \$opt{scale}, 'rotate=f' => \$opt{rotate}, 'duplicate=i' => \$opt{duplicate}, 'duplicate-grid=s' => \$opt{duplicate_grid}, 'print-center=s' => \$opt{print_center}, 'dont-arrange' => \$opt{dont_arrange}, # legacy options, ignored 'no-plater' => \$opt{no_plater}, 'gui-mode=s' => \$opt{gui_mode}, ); foreach my $opt_key (keys %{$Slic3r::Config::Options}) { my $cli = $Slic3r::Config::Options->{$opt_key}->{cli} or next; # allow both the dash-separated option name and the full opt_key $options{ "$opt_key|$cli" } = \$cli_options{$opt_key}; } @ARGV = grep !/^-psn_\d/, @ARGV if $^O eq 'darwin'; GetOptions(%options) or usage(1); warn "--no-plater option is deprecated; ignoring\n" if $opt{no_plater}; warn "--gui-mode option is deprecated (Slic3r now has only Expert Mode); ignoring\n" if $opt{gui_mode}; } # load configuration files my @external_configs = (); if ($opt{load}) { foreach my $configfile (@{$opt{load}}) { $configfile = Slic3r::decode_path($configfile); if (-e Slic3r::encode_path($configfile)) { push @external_configs, Slic3r::Config->load($configfile); } elsif (-e Slic3r::encode_path("$FindBin::Bin/$configfile")) { printf STDERR "Loading $FindBin::Bin/$configfile\n"; push @external_configs, Slic3r::Config->load("$FindBin::Bin/$configfile"); } else { $opt{ignore_nonexistent_config} or die "Cannot find specified configuration file ($configfile).\n"; } } # expand shortcuts before applying, otherwise destination values would be already filled with defaults $_->normalize for @external_configs; } # process command line options my $cli_config = Slic3r::Config->new_from_cli(%cli_options); $cli_config->normalize; # expand shortcuts # save configuration if ($opt{save}) { my $config = $cli_config->clone; $config->apply($_) for @external_configs; if (@{$config->get_keys} > 0) { $config->save($opt{save}); } else { Slic3r::Config->new_from_defaults->save(Slic3r::decode_path($opt{save})); } } # launch GUI my $gui; if ((!@ARGV || $opt{gui}) && !$opt{no_gui} && !$opt{save} && eval "require Slic3r::GUI; 1") { { no warnings 'once'; $Slic3r::GUI::datadir = Slic3r::decode_path($opt{datadir} // ''); $Slic3r::GUI::autosave = Slic3r::decode_path($opt{autosave} // ''); $Slic3r::GUI::threads = $opt{threads}; } $gui = Slic3r::GUI->new; setlocale(LC_NUMERIC, 'C'); $gui->CallAfter(sub { $gui->{mainframe}->load_config_file($_) for @{$opt{load}}; $gui->{mainframe}->load_config($cli_config); foreach my $input_file (@ARGV) { $input_file = Slic3r::decode_path($input_file); $gui->{mainframe}{plater}->load_file($input_file); } }); $gui->MainLoop; exit; } die $@ if $@ && $opt{gui} && !$opt{no_gui}; if (@ARGV) { # slicing from command line # apply command line config on top of default config my $config = Slic3r::Config->new_from_defaults; $config->apply($_) for @external_configs; $config->apply($cli_config); $config->validate; if ($opt{repair}) { foreach my $file (@ARGV) { $file = Slic3r::decode_path($file); die "Repair is currently supported only on STL files\n" if $file !~ /\.stl$/i; my $output_file = $file; $output_file =~ s/\.(stl)$/_fixed.obj/i; my $tmesh = Slic3r::TriangleMesh->new; $tmesh->ReadSTLFile($file); $tmesh->repair; $tmesh->WriteOBJFile($output_file); } exit; } if ($opt{cut}) { foreach my $file (@ARGV) { $file = Slic3r::decode_path($file); my $model = Slic3r::Model->read_from_file($file); $model->add_default_instances; my $mesh = $model->mesh; $mesh->translate(0, 0, -$mesh->bounding_box->z_min); my $upper = Slic3r::TriangleMesh->new; my $lower = Slic3r::TriangleMesh->new; $mesh->cut(Z, $opt{cut}, $upper, $lower); $upper->repair; $lower->repair; $upper->write_ascii("${file}_upper.stl") if $upper->facets_count > 0; $lower->write_ascii("${file}_lower.stl") if $lower->facets_count > 0; } exit; } if ($opt{cut_grid}) { my ($grid_x, $grid_y) = split /[,x]/, $opt{cut_grid}, 2; foreach my $file (@ARGV) { $file = Slic3r::decode_path($file); my $model = Slic3r::Model->read_from_file($file); $model->add_default_instances; my $mesh = $model->mesh; my $bb = $mesh->bounding_box; $mesh->translate(0, 0, -$bb->z_min); my $x_parts = ceil(($bb->size->x - epsilon)/$grid_x); my $y_parts = ceil(($bb->size->y - epsilon)/$grid_y); #-- for my $i (1..$x_parts) { my $this = Slic3r::TriangleMesh->new; if ($i == $x_parts) { $this = $mesh; } else { my $next = Slic3r::TriangleMesh->new; $mesh->cut(X, $bb->x_min + ($grid_x * $i), $next, $this); $this->repair; $next->repair; $mesh = $next; } for my $j (1..$y_parts) { my $tile = Slic3r::TriangleMesh->new; if ($j == $y_parts) { $tile = $this; } else { my $next = Slic3r::TriangleMesh->new; $this->cut(Y, $bb->y_min + ($grid_y * $j), $next, $tile); $tile->repair; $next->repair; $this = $next; } $tile->write_ascii("${file}_${i}_${j}.stl"); } } } exit; } if ($opt{split}) { foreach my $file (@ARGV) { $file = Slic3r::decode_path($file); my $model = Slic3r::Model->read_from_file($file); $model->add_default_instances; my $mesh = $model->mesh; $mesh->repair; my $part_count = 0; foreach my $new_mesh (@{$mesh->split}) { my $output_file = sprintf '%s_%02d.stl', $file, ++$part_count; printf "Writing to %s\n", basename($output_file); $new_mesh->write_binary($output_file); } } exit; } while (my $input_file = shift @ARGV) { $input_file = Slic3r::decode_path($input_file); my $model; if ($opt{merge}) { my @models = map Slic3r::Model->read_from_file($_), $input_file, (splice @ARGV, 0); $model = Slic3r::Model->merge(@models); } else { $model = Slic3r::Model->read_from_file($input_file); } $model->repair; if ($opt{info}) { $model->print_info; next; } if (defined $opt{duplicate_grid}) { $opt{duplicate_grid} = [ split /[,x]/, $opt{duplicate_grid}, 2 ]; } if (defined $opt{print_center}) { $opt{print_center} = Slic3r::Pointf->new(split /[,x]/, $opt{print_center}, 2); } my $sprint = Slic3r::Print::Simple->new( scale => $opt{scale} // 1, rotate => deg2rad($opt{rotate} // 0), duplicate => $opt{duplicate} // 1, duplicate_grid => $opt{duplicate_grid} // [1,1], print_center => $opt{print_center}, dont_arrange => $opt{dont_arrange} // 0, status_cb => sub { my ($percent, $message) = @_; printf "=> %s\n", $message; }, output_file => Slic3r::decode_path($opt{output}), ); $sprint->apply_config($config); $sprint->config->set('threads', $opt{threads}) if $opt{threads}; $sprint->set_model($model); if ($opt{export_svg}) { $sprint->export_svg; } else { my $t0 = [gettimeofday]; $sprint->export_gcode; # output some statistics { my $duration = tv_interval($t0); printf "Done. Process took %d minutes and %.3f seconds\n", int($duration/60), ($duration - int($duration/60)*60); # % truncates to integer } printf "Filament required: %.1fmm (%.1fcm3)\n", $sprint->total_used_filament, $sprint->total_extruded_volume/1000; } } } else { usage(1) unless $opt{save}; } sub usage { my ($exit_code) = @_; my $config = Slic3r::Config->new_from_defaults->as_hash; my $j = ''; if ($Slic3r::have_threads) { $j = <<"EOF"; -j, --threads Number of threads to use EOF } print <<"EOF"; Slic3r $Slic3r::VERSION is a STL-to-GCODE translator for RepRap 3D printers written by Alessandro Ranellucci - http://slic3r.org/ Usage: slic3r.pl [ OPTIONS ] [ file.stl ] [ file2.stl ] ... --help Output this usage screen and exit --version Output the version of Slic3r and exit --save Save configuration to the specified file --load Load configuration from the specified file. It can be used more than once to load options from multiple files. --datadir Load and store settings at the given directory. This is useful for maintaining different profiles or including configurations from a network storage. -o, --output File to output gcode to (by default, the file will be saved into the same directory as the input file using the --output-filename-format to generate the filename.) If a directory is specified for this option, the output will be saved under that directory, and the filename will be generated by --output-filename-format. Non-slicing actions (no G-code will be generated): --repair Repair given STL files and save them as _fixed.obj --cut Cut given input files at given Z (relative) and export them as _upper.stl and _lower.stl --split Split the shells contained in given STL file into several STL files --info Output information about the supplied file(s) and exit $j GUI options: --gui Forces the GUI launch instead of command line slicing (if you supply a model file, it will be loaded into the plater) --no-gui Forces the command line slicing instead of gui. This takes precedence over --gui if both are present. --autosave Automatically export current configuration to the specified file Output options: --output-filename-format Output file name format; all config options enclosed in brackets will be replaced by their values, as well as [input_filename_base] and [input_filename] (default: $config->{output_filename_format}) --post-process Generated G-code will be processed with the supplied script; call this more than once to process through multiple scripts. --export-svg Export a SVG file containing slices instead of G-code. -m, --merge If multiple files are supplied, they will be composed into a single print rather than processed individually. Printer options: --nozzle-diameter Diameter of nozzle in mm (default: $config->{nozzle_diameter}->[0]) --print-center Coordinates in mm of the point to center the print around (default: 100,100) --z-offset Additional height in mm to add to vertical coordinates (+/-, default: $config->{z_offset}) --z-steps-per-mm Number of full steps per mm of the Z axis. Experimental feature for preventing rounding issues. --gcode-flavor The type of G-code to generate (reprap/teacup/repetier/makerware/sailfish/mach3/machinekit/smoothie/no-extrusion, default: $config->{gcode_flavor}) --use-relative-e-distances Enable this to get relative E values (default: no) --use-firmware-retraction Enable firmware-controlled retraction using G10/G11 (default: no) --use-volumetric-e Express E in cubic millimeters and prepend M200 (default: no) --gcode-arcs Use G2/G3 commands for native arcs (experimental, not supported by all firmwares) --gcode-comments Make G-code verbose by adding comments (default: no) --vibration-limit Limit the frequency of moves on X and Y axes (Hz, set zero to disable; default: $config->{vibration_limit}) --pressure-advance Adjust pressure using the experimental advance algorithm (K constant, set zero to disable; default: $config->{pressure_advance}) Filament options: --filament-diameter Diameter in mm of your raw filament (default: $config->{filament_diameter}->[0]) --extrusion-multiplier Change this to alter the amount of plastic extruded. There should be very little need to change this value, which is only useful to compensate for filament packing (default: $config->{extrusion_multiplier}->[0]) --temperature Extrusion temperature in degree Celsius, set 0 to disable (default: $config->{temperature}->[0]) --first-layer-temperature Extrusion temperature for the first layer, in degree Celsius, set 0 to disable (default: same as --temperature) --bed-temperature Heated bed temperature in degree Celsius, set 0 to disable (default: $config->{bed_temperature}) --first-layer-bed-temperature Heated bed temperature for the first layer, in degree Celsius, set 0 to disable (default: same as --bed-temperature) Speed options: --travel-speed Speed of non-print moves in mm/s (default: $config->{travel_speed}) --perimeter-speed Speed of print moves for perimeters in mm/s (default: $config->{perimeter_speed}) --small-perimeter-speed Speed of print moves for small perimeters in mm/s or % over perimeter speed (default: $config->{small_perimeter_speed}) --external-perimeter-speed Speed of print moves for the external perimeter in mm/s or % over perimeter speed (default: $config->{external_perimeter_speed}) --infill-speed Speed of print moves in mm/s (default: $config->{infill_speed}) --solid-infill-speed Speed of print moves for solid surfaces in mm/s or % over infill speed (default: $config->{solid_infill_speed}) --top-solid-infill-speed Speed of print moves for top surfaces in mm/s or % over solid infill speed (default: $config->{top_solid_infill_speed}) --support-material-speed Speed of support material print moves in mm/s (default: $config->{support_material_speed}) --support-material-interface-speed Speed of support material interface print moves in mm/s or % over support material speed (default: $config->{support_material_interface_speed}) --bridge-speed Speed of bridge print moves in mm/s (default: $config->{bridge_speed}) --gap-fill-speed Speed of gap fill print moves in mm/s (default: $config->{gap_fill_speed}) --first-layer-speed Speed of print moves for bottom layer, expressed either as an absolute value or as a percentage over normal speeds (default: $config->{first_layer_speed}) Acceleration options: --perimeter-acceleration Overrides firmware's default acceleration for perimeters. (mm/s^2, set zero to disable; default: $config->{perimeter_acceleration}) --infill-acceleration Overrides firmware's default acceleration for infill. (mm/s^2, set zero to disable; default: $config->{infill_acceleration}) --bridge-acceleration Overrides firmware's default acceleration for bridges. (mm/s^2, set zero to disable; default: $config->{bridge_acceleration}) --first-layer-acceleration Overrides firmware's default acceleration for first layer. (mm/s^2, set zero to disable; default: $config->{first_layer_acceleration}) --default-acceleration Acceleration will be reset to this value after the specific settings above have been applied. (mm/s^2, set zero to disable; default: $config->{default_acceleration}) Accuracy options: --layer-height Layer height in mm (default: $config->{layer_height}) --first-layer-height Layer height for first layer (mm or %, default: $config->{first_layer_height}) --infill-every-layers Infill every N layers (default: $config->{infill_every_layers}) --solid-infill-every-layers Force a solid layer every N layers (default: $config->{solid_infill_every_layers}) Print options: --perimeters Number of perimeters/horizontal skins (range: 0+, default: $config->{perimeters}) --top-solid-layers Number of solid layers to do for top surfaces (range: 0+, default: $config->{top_solid_layers}) --bottom-solid-layers Number of solid layers to do for bottom surfaces (range: 0+, default: $config->{bottom_solid_layers}) --solid-layers Shortcut for setting the two options above at once --fill-density Infill density (range: 0%-100%, default: $config->{fill_density}%) --fill-angle Infill angle in degrees (range: 0-90, default: $config->{fill_angle}) --fill-pattern Pattern to use to fill non-solid layers (default: $config->{fill_pattern}) --fill-gaps Fill gaps with single passes (default: yes) --external-infill-pattern Pattern to use to fill solid layers. (Shortcut for --top-infill-pattern and --bottom-infill-pattern) --top-infill-pattern Pattern to use to fill top solid layers (default: $config->{top_infill_pattern}) --bottom-infill-pattern Pattern to use to fill bottom solid layers (default: $config->{bottom_infill_pattern}) --start-gcode Load initial G-code from the supplied file. This will overwrite the default command (home all axes [G28]). --end-gcode Load final G-code from the supplied file. This will overwrite the default commands (turn off temperature [M104 S0], home X axis [G28 X], disable motors [M84]). --before-layer-gcode Load before-layer-change G-code from the supplied file (default: nothing). --layer-gcode Load layer-change G-code from the supplied file (default: nothing). --toolchange-gcode Load tool-change G-code from the supplied file (default: nothing). --seam-position Position of loop starting points (random/nearest/aligned, default: $config->{seam_position}). --external-perimeters-first Reverse perimeter order. (default: no) --spiral-vase Experimental option to raise Z gradually when printing single-walled vases (default: no) --only-retract-when-crossing-perimeters Disable retraction when travelling between infill paths inside the same island. (default: no) --solid-infill-below-area Force solid infill when a region has a smaller area than this threshold (mm^2, default: $config->{solid_infill_below_area}) --infill-only-where-needed Only infill under ceilings (default: no) --infill-first Make infill before perimeters (default: no) Quality options (slower slicing): --extra-perimeters Add more perimeters when needed (default: yes) --avoid-crossing-perimeters Optimize travel moves so that no perimeters are crossed (default: no) --thin-walls Detect single-width walls (default: yes) --detect-bridging-perimeters Detect bridging perimeters and apply bridge flow, speed and fan (default: yes) Support material options: --support-material Generate support material for overhangs --support-material-threshold Overhang threshold angle (range: 0-90, set 0 for automatic detection, default: $config->{support_material_threshold}) --support-material-pattern Pattern to use for support material (default: $config->{support_material_pattern}) --support-material-spacing Spacing between pattern lines (mm, default: $config->{support_material_spacing}) --support-material-angle Support material angle in degrees (range: 0-90, default: $config->{support_material_angle}) --support-material-contact-distance Vertical distance between object and support material (0+, default: $config->{support_material_contact_distance}) --support-material-interface-layers Number of perpendicular layers between support material and object (0+, default: $config->{support_material_interface_layers}) --support-material-interface-spacing Spacing between interface pattern lines (mm, set 0 to get a solid layer, default: $config->{support_material_interface_spacing}) --raft-layers Number of layers to raise the printed objects by (range: 0+, default: $config->{raft_layers}) --support-material-enforce-layers Enforce support material on the specified number of layers from bottom, regardless of --support-material and threshold (0+, default: $config->{support_material_enforce_layers}) --support-material-buildplate-only Only create support if it lies on a build plate. Don't create support on a print. (default: no) --dont-support-bridges Experimental option for preventing support material from being generated under bridged areas (default: yes) Retraction options: --retract-length Length of retraction in mm when pausing extrusion (default: $config->{retract_length}[0]) --retract-speed Speed for retraction in mm/s (default: $config->{retract_speed}[0]) --retract-restart-extra Additional amount of filament in mm to push after compensating retraction (default: $config->{retract_restart_extra}[0]) --retract-before-travel Only retract before travel moves of this length in mm (default: $config->{retract_before_travel}[0]) --retract-lift Lift Z by the given distance in mm when retracting (default: $config->{retract_lift}[0]) --retract-lift-above Only lift Z when above the specified height (default: $config->{retract_lift_above}[0]) --retract-lift-below Only lift Z when below the specified height (default: $config->{retract_lift_below}[0]) --retract-layer-change Enforce a retraction before each Z move (default: no) --wipe Wipe the nozzle while doing a retraction (default: no) Retraction options for multi-extruder setups: --retract-length-toolchange Length of retraction in mm when disabling tool (default: $config->{retract_length_toolchange}[0]) --retract-restart-extra-toolchange Additional amount of filament in mm to push after switching tool (default: $config->{retract_restart_extra_toolchange}[0]) Cooling options: --cooling Enable fan and cooling control --min-fan-speed Minimum fan speed (default: $config->{min_fan_speed}%) --max-fan-speed Maximum fan speed (default: $config->{max_fan_speed}%) --bridge-fan-speed Fan speed to use when bridging (default: $config->{bridge_fan_speed}%) --fan-below-layer-time Enable fan if layer print time is below this approximate number of seconds (default: $config->{fan_below_layer_time}) --slowdown-below-layer-time Slow down if layer print time is below this approximate number of seconds (default: $config->{slowdown_below_layer_time}) --min-print-speed Minimum print speed (mm/s, default: $config->{min_print_speed}) --disable-fan-first-layers Disable fan for the first N layers (default: $config->{disable_fan_first_layers}) --fan-always-on Keep fan always on at min fan speed, even for layers that don't need cooling Skirt options: --skirts Number of skirts to draw (0+, default: $config->{skirts}) --skirt-distance Distance in mm between innermost skirt and object (default: $config->{skirt_distance}) --skirt-height Height of skirts to draw (expressed in layers, 0+, default: $config->{skirt_height}) --min-skirt-length Generate no less than the number of loops required to consume this length of filament on the first layer, for each extruder (mm, 0+, default: $config->{min_skirt_length}) --brim-width Width of the brim that will get added to each object to help adhesion (mm, default: $config->{brim_width}) --interior-brim-width Width of the brim that will get printed inside object holes to help adhesion (mm, default: $config->{interior_brim_width}) Transform options: --scale Factor for scaling input object (default: 1) --rotate Rotation angle in degrees (0-360, default: 0) --duplicate Number of items with auto-arrange (1+, default: 1) --duplicate-grid Number of items with grid arrangement (default: 1,1) --duplicate-distance Distance in mm between copies (default: $config->{duplicate_distance}) --dont-arrange Don't arrange the objects on the build plate. The model coordinates define the absolute positions on the build plate. The option --print-center will be ignored. --xy-size-compensation Grow/shrink objects by the configured absolute distance (mm, default: $config->{xy_size_compensation}) Sequential printing options: --complete-objects When printing multiple objects and/or copies, complete each one before starting the next one; watch out for extruder collisions (default: no) --extruder-clearance-radius Radius in mm above which extruder won't collide with anything (default: $config->{extruder_clearance_radius}) --extruder-clearance-height Maximum vertical extruder depth; i.e. vertical distance from extruder tip and carriage bottom (default: $config->{extruder_clearance_height}) Miscellaneous options: --notes Notes to be added as comments to the output file --resolution Minimum detail resolution (mm, set zero for full resolution, default: $config->{resolution}) Flow options (advanced): --extrusion-width Set extrusion width manually; it accepts either an absolute value in mm (like 0.65) or a percentage over layer height (like 200%) --first-layer-extrusion-width Set a different extrusion width for first layer --perimeter-extrusion-width Set a different extrusion width for perimeters --external-perimeter-extrusion-width Set a different extrusion width for external perimeters --infill-extrusion-width Set a different extrusion width for infill --solid-infill-extrusion-width Set a different extrusion width for solid infill --top-infill-extrusion-width Set a different extrusion width for top infill --support-material-extrusion-width Set a different extrusion width for support material --infill-overlap Overlap between infill and perimeters (default: $config->{infill_overlap}) --bridge-flow-ratio Multiplier for extrusion when bridging (> 0, default: $config->{bridge_flow_ratio}) Multiple extruder options: --extruder-offset Offset of each extruder, if firmware doesn't handle the displacement (can be specified multiple times, default: 0x0) --perimeter-extruder Extruder to use for perimeters and brim (1+, default: $config->{perimeter_extruder}) --infill-extruder Extruder to use for infill (1+, default: $config->{infill_extruder}) --solid-infill-extruder Extruder to use for solid infill (1+, default: $config->{solid_infill_extruder}) --support-material-extruder Extruder to use for support material, raft and skirt (1+, default: $config->{support_material_extruder}) --support-material-interface-extruder Extruder to use for support material interface (1+, default: $config->{support_material_interface_extruder}) --ooze-prevention Drop temperature and park extruders outside a full skirt for automatic wiping (default: no) --standby-temperature-delta Temperature difference to be applied when an extruder is not active and --ooze-prevention is enabled (default: $config->{standby_temperature_delta}) EOF exit ($exit_code || 0); } __END__ Slic3r-1.3.0/src/000077500000000000000000000000001327442435500134525ustar00rootroot00000000000000Slic3r-1.3.0/src/CMakeLists.txt000066400000000000000000000147431327442435500162230ustar00rootroot00000000000000cmake_minimum_required (VERSION 2.8) project (slic3r) # only on newer GCCs: -ftemplate-backtrace-limit=0 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -DM_PI=3.14159265358979323846 -D_GLIBCXX_USE_C99 -DHAS_BOOL -DNOGDI -DBOOST_ASIO_DISABLE_KQUEUE") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -DSLIC3R_DEBUG") if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.7.0) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7.3) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-inline-small-functions") endif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7.3) endif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.7.0) set(CMAKE_INCLUDE_CURRENT_DIR ON) IF(CMAKE_HOST_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE") set(CMAKE_EXE_LINKER_FLAGS "-framework IOKit -framework CoreFoundation -lc++") ELSE(CMAKE_HOST_APPLE) set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") ENDIF(CMAKE_HOST_APPLE) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME ON) set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") find_package(Boost COMPONENTS system thread filesystem) set(LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/../xs/src/) include_directories(${LIBDIR}) include_directories(${LIBDIR}/libslic3r) include_directories(${LIBDIR}/Slic3r/GUI/) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/standalone/) include_directories(${LIBDIR}/admesh/) include_directories(${LIBDIR}/BSpline/) include_directories(${LIBDIR}/expat/) include_directories(${LIBDIR}/poly2tri/) include_directories(${LIBDIR}/poly2tri/sweep) include_directories(${LIBDIR}/poly2tri/common) add_library(libslic3r STATIC ${LIBDIR}/libslic3r/BoundingBox.cpp ${LIBDIR}/libslic3r/BridgeDetector.cpp ${LIBDIR}/libslic3r/ClipperUtils.cpp ${LIBDIR}/libslic3r/Config.cpp ${LIBDIR}/libslic3r/ExPolygon.cpp ${LIBDIR}/libslic3r/ExPolygonCollection.cpp ${LIBDIR}/libslic3r/Extruder.cpp ${LIBDIR}/libslic3r/ExtrusionEntity.cpp ${LIBDIR}/libslic3r/ExtrusionEntityCollection.cpp ${LIBDIR}/libslic3r/Fill/Fill.cpp ${LIBDIR}/libslic3r/Fill/Fill3DHoneycomb.cpp ${LIBDIR}/libslic3r/Fill/FillConcentric.cpp ${LIBDIR}/libslic3r/Fill/FillHoneycomb.cpp ${LIBDIR}/libslic3r/Fill/FillPlanePath.cpp ${LIBDIR}/libslic3r/Fill/FillRectilinear.cpp ${LIBDIR}/libslic3r/Flow.cpp ${LIBDIR}/libslic3r/GCode.cpp ${LIBDIR}/libslic3r/GCode/CoolingBuffer.cpp ${LIBDIR}/libslic3r/GCode/SpiralVase.cpp ${LIBDIR}/libslic3r/GCodeReader.cpp ${LIBDIR}/libslic3r/GCodeSender.cpp ${LIBDIR}/libslic3r/GCodeTimeEstimator.cpp ${LIBDIR}/libslic3r/GCodeWriter.cpp ${LIBDIR}/libslic3r/Geometry.cpp ${LIBDIR}/libslic3r/IO.cpp ${LIBDIR}/libslic3r/IO/AMF.cpp ${LIBDIR}/libslic3r/IO/TMF.cpp ${LIBDIR}/libslic3r/Layer.cpp ${LIBDIR}/libslic3r/LayerRegion.cpp ${LIBDIR}/libslic3r/LayerRegionFill.cpp ${LIBDIR}/libslic3r/LayerHeightSpline.cpp ${LIBDIR}/libslic3r/Line.cpp ${LIBDIR}/libslic3r/Model.cpp ${LIBDIR}/libslic3r/MotionPlanner.cpp ${LIBDIR}/libslic3r/MultiPoint.cpp ${LIBDIR}/libslic3r/PerimeterGenerator.cpp ${LIBDIR}/libslic3r/PlaceholderParser.cpp ${LIBDIR}/libslic3r/Point.cpp ${LIBDIR}/libslic3r/Polygon.cpp ${LIBDIR}/libslic3r/Polyline.cpp ${LIBDIR}/libslic3r/PolylineCollection.cpp ${LIBDIR}/libslic3r/Print.cpp ${LIBDIR}/libslic3r/PrintConfig.cpp ${LIBDIR}/libslic3r/PrintObject.cpp ${LIBDIR}/libslic3r/PrintRegion.cpp ${LIBDIR}/libslic3r/SLAPrint.cpp ${LIBDIR}/libslic3r/SlicingAdaptive.cpp ${LIBDIR}/libslic3r/Surface.cpp ${LIBDIR}/libslic3r/SurfaceCollection.cpp ${LIBDIR}/libslic3r/SVG.cpp ${LIBDIR}/libslic3r/TriangleMesh.cpp ${LIBDIR}/libslic3r/Zip/ZipArchive.cpp ) add_library(BSpline STATIC ${LIBDIR}/BSpline/BSpline.cpp ) add_library(admesh STATIC ${LIBDIR}/admesh/connect.c ${LIBDIR}/admesh/normals.c ${LIBDIR}/admesh/shared.c ${LIBDIR}/admesh/stl_io.c ${LIBDIR}/admesh/stlinit.c ${LIBDIR}/admesh/util.c ) set_property(TARGET admesh PROPERTY C_STANDARD 99) add_library(clipper STATIC ${LIBDIR}/clipper.cpp) add_library(expat STATIC ${LIBDIR}/expat/xmlparse.c ${LIBDIR}/expat/xmlrole.c ${LIBDIR}/expat/xmltok.c ) add_library(polypartition STATIC ${LIBDIR}/polypartition.cpp) add_library(poly2tri STATIC ${LIBDIR}/poly2tri/common/shapes.cc ${LIBDIR}/poly2tri/sweep/advancing_front.cc ${LIBDIR}/poly2tri/sweep/cdt.cc ${LIBDIR}/poly2tri/sweep/sweep_context.cc ${LIBDIR}/poly2tri/sweep/sweep.cc ) add_executable(slic3r slic3r.cpp) set_target_properties(slic3r PROPERTIES LINK_SEARCH_START_STATIC 1) set_target_properties(slic3r PROPERTIES LINK_SEARCH_END_STATIC 1) add_executable(extrude-tin utils/extrude-tin.cpp) set_target_properties(extrude-tin PROPERTIES LINK_SEARCH_START_STATIC 1) set_target_properties(extrude-tin PROPERTIES LINK_SEARCH_END_STATIC 1) set(wxWidgets_USE_STATIC) SET(wxWidgets_USE_LIBS) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME ON) set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") find_library(bsystem_l boost_system) add_library(bsystem STATIC IMPORTED) set_target_properties(bsystem PROPERTIES IMPORTED_LOCATION ${bsystem_l}) find_library(bthread_l boost_thread) add_library(bthread STATIC IMPORTED) set_target_properties(bthread PROPERTIES IMPORTED_LOCATION ${bthread_l}) include_directories(${Boost_INCLUDE_DIRS}) #find_package(wxWidgets) #disable wx for the time being - we're not building any of the gui yet IF(CMAKE_HOST_UNIX) #set(Boost_LIBRARIES bsystem bthread bfilesystem) ENDIF(CMAKE_HOST_UNIX) target_link_libraries (slic3r libslic3r admesh BSpline clipper expat polypartition poly2tri ${Boost_LIBRARIES}) IF(wxWidgets_FOUND) MESSAGE("wx found!") INCLUDE("${wxWidgets_USE_FILE}") add_library(slic3r_gui STATIC ${LIBDIR}/slic3r/GUI/3DScene.cpp ${LIBDIR}/slic3r/GUI/GUI.cpp) #only build GUI lib if building with wx target_link_libraries (slic3r slic3r-gui ${wxWidgets_LIBRARIES}) ELSE(wxWidgets_FOUND) # For convenience. When we cannot continue, inform the user MESSAGE("wx not found!") #skip gui when no wx included ENDIF(wxWidgets_FOUND) # Windows needs a compiled component for Boost.nowide IF (WIN32) add_library(boost-nowide STATIC ${LIBDIR}/boost/nowide/iostream.cpp ) target_link_libraries(slic3r boost-nowide) target_link_libraries(extrude-tin boost-nowide) ENDIF(WIN32) target_link_libraries (extrude-tin libslic3r admesh BSpline clipper expat polypartition poly2tri ${Boost_LIBRARIES}) Slic3r-1.3.0/src/slic3r.cpp000066400000000000000000000167441327442435500153710ustar00rootroot00000000000000#include "Config.hpp" #include "Geometry.hpp" #include "IO.hpp" #include "Model.hpp" #include "SLAPrint.hpp" #include "TriangleMesh.hpp" #include "libslic3r.h" #include #include #include #include #include #include #include #include using namespace Slic3r; void confess_at(const char *file, int line, const char *func, const char *pat, ...){} int main(int argc, char **argv) { // Convert arguments to UTF-8 (needed on Windows). // argv then points to memory owned by a. boost::nowide::args a(argc, argv); // parse all command line options into a DynamicConfig ConfigDef config_def; config_def.merge(cli_config_def); config_def.merge(print_config_def); DynamicConfig config(&config_def); t_config_option_keys input_files; config.read_cli(argc, argv, &input_files); // apply command line options to a more handy CLIConfig CLIConfig cli_config; cli_config.apply(config, true); DynamicPrintConfig print_config; // load config files supplied via --load for (const std::string &file : cli_config.load.values) { if (!boost::filesystem::exists(file)) { boost::nowide::cout << "No such file: " << file << std::endl; exit(1); } DynamicPrintConfig c; try { c.load(file); } catch (std::exception &e) { boost::nowide::cout << "Error while reading config file: " << e.what() << std::endl; exit(1); } c.normalize(); print_config.apply(c); } // apply command line options to a more specific DynamicPrintConfig which provides normalize() // (command line options override --load files) print_config.apply(config, true); print_config.normalize(); // write config if requested if (!cli_config.save.value.empty()) print_config.save(cli_config.save.value); // read input file(s) if any std::vector models; for (const t_config_option_key &file : input_files) { if (!boost::filesystem::exists(file)) { boost::nowide::cerr << "No such file: " << file << std::endl; exit(1); } Model model; try { model = Model::read_from_file(file); } catch (std::exception &e) { boost::nowide::cerr << file << ": " << e.what() << std::endl; exit(1); } if (model.objects.empty()) { boost::nowide::cerr << "Error: file is empty: " << file << std::endl; continue; } model.add_default_instances(); // apply command line transform options for (ModelObject* o : model.objects) { if (cli_config.scale_to_fit.is_positive_volume()) o->scale_to_fit(cli_config.scale_to_fit.value); // TODO: honor option order? o->scale(cli_config.scale.value); o->rotate(Geometry::deg2rad(cli_config.rotate_x.value), X); o->rotate(Geometry::deg2rad(cli_config.rotate_y.value), Y); o->rotate(Geometry::deg2rad(cli_config.rotate.value), Z); } // TODO: handle --merge models.push_back(model); } for (Model &model : models) { if (cli_config.info) { // --info works on unrepaired model model.print_info(); } else if (cli_config.export_obj) { std::string outfile = cli_config.output.value; if (outfile.empty()) outfile = model.objects.front()->input_file + ".obj"; TriangleMesh mesh = model.mesh(); mesh.repair(); IO::OBJ::write(mesh, outfile); boost::nowide::cout << "File exported to " << outfile << std::endl; } else if (cli_config.export_pov) { std::string outfile = cli_config.output.value; if (outfile.empty()) outfile = model.objects.front()->input_file + ".pov"; TriangleMesh mesh = model.mesh(); mesh.repair(); IO::POV::write(mesh, outfile); boost::nowide::cout << "File exported to " << outfile << std::endl; } else if (cli_config.export_svg) { std::string outfile = cli_config.output.value; if (outfile.empty()) outfile = model.objects.front()->input_file + ".svg"; SLAPrint print(&model); print.config.apply(print_config, true); print.slice(); print.write_svg(outfile); boost::nowide::cout << "SVG file exported to " << outfile << std::endl; } else if (cli_config.export_3mf) { std::string outfile = cli_config.output.value; if (outfile.empty()) outfile = model.objects.front()->input_file; // Check if the file is already a 3mf. if(outfile.substr(outfile.find_last_of('.'), outfile.length()) == ".3mf") outfile = outfile.substr(0, outfile.find_last_of('.')) + "_2" + ".3mf"; else // Remove the previous extension and add .3mf extention. outfile = outfile.substr(0, outfile.find_last_of('.')) + ".3mf"; IO::TMF::write(model, outfile); boost::nowide::cout << "File file exported to " << outfile << std::endl; } else if (cli_config.cut_x > 0 || cli_config.cut_y > 0 || cli_config.cut > 0) { model.repair(); model.translate(0, 0, -model.bounding_box().min.z); if (!model.objects.empty()) { // FIXME: cut all objects Model out; if (cli_config.cut_x > 0) { model.objects.front()->cut(X, cli_config.cut_x, &out); } else if (cli_config.cut_y > 0) { model.objects.front()->cut(Y, cli_config.cut_y, &out); } else { model.objects.front()->cut(Z, cli_config.cut, &out); } ModelObject &upper = *out.objects[0]; ModelObject &lower = *out.objects[1]; // Use the input name and trim off the extension. std::string outfile = cli_config.output.value; if (outfile.empty()) outfile = model.objects.front()->input_file; outfile = outfile.substr(0, outfile.find_last_of('.')); std::cerr << outfile << "\n"; if (upper.facets_count() > 0) { TriangleMesh m = upper.mesh(); IO::STL::write(m, outfile + "_upper.stl"); } if (lower.facets_count() > 0) { TriangleMesh m = lower.mesh(); IO::STL::write(m, outfile + "_lower.stl"); } } } else if (cli_config.cut_grid.value.x > 0 && cli_config.cut_grid.value.y > 0) { TriangleMesh mesh = model.mesh(); mesh.repair(); TriangleMeshPtrs meshes = mesh.cut_by_grid(cli_config.cut_grid.value); size_t i = 0; for (TriangleMesh* m : meshes) { std::ostringstream ss; ss << model.objects.front()->input_file << "_" << i++ << ".stl"; IO::STL::write(*m, ss.str()); delete m; } } else { boost::nowide::cerr << "error: command not supported" << std::endl; return 1; } } return 0; } Slic3r-1.3.0/src/standalone/000077500000000000000000000000001327442435500156025ustar00rootroot00000000000000Slic3r-1.3.0/src/standalone/config.h000066400000000000000000000000001327442435500172060ustar00rootroot00000000000000Slic3r-1.3.0/src/utils/000077500000000000000000000000001327442435500146125ustar00rootroot00000000000000Slic3r-1.3.0/src/utils/extrude-tin.cpp000066400000000000000000000033361327442435500175730ustar00rootroot00000000000000#include "Config.hpp" #include "Model.hpp" #include "IO.hpp" #include "TriangleMesh.hpp" #include "libslic3r.h" #include #include using namespace Slic3r; void confess_at(const char *file, int line, const char *func, const char *pat, ...){} int main(int argc, char **argv) { // Convert arguments to UTF-8 (needed on Windows). // argv then points to memory owned by a. boost::nowide::args a(argc, argv); // read config ConfigDef config_def; { ConfigOptionDef* def; def = config_def.add("offset", coFloat); def->label = "Offset from the lowest point (min thickness)"; def->cli = "offset"; def->default_value = new ConfigOptionFloat(1); def = config_def.add("output", coString); def->label = "Output File"; def->tooltip = "The file where the output will be written (if not specified, it will be based on the input file)."; def->cli = "output"; def->default_value = new ConfigOptionString(""); } DynamicConfig config(&config_def); t_config_option_keys input_files; config.read_cli(argc, argv, &input_files); for (t_config_option_keys::const_iterator it = input_files.begin(); it != input_files.end(); ++it) { TriangleMesh mesh; Slic3r::IO::STL::read(*it, &mesh); mesh.extrude_tin(config.option("offset", true)->getFloat()); std::string outfile = config.option("output", true)->getString(); if (outfile.empty()) outfile = *it + "_extruded.stl"; Slic3r::IO::STL::write(mesh, outfile); boost::nowide::cout << "Extruded mesh written to " << outfile << std::endl; } return 0; } Slic3r-1.3.0/src/windows-build.txt000066400000000000000000000023101327442435500167760ustar00rootroot00000000000000Install: mingw boost cmake git Assuming boost is in c:\program files\boost\boost_1_61_0 and mingw is in c:\mingw start cmd.exe > cd c:\program files\boost\boost_1_61_0 > set PATH=c:\mingw\bin > bootstrap gcc > .\b2 --build-dir=c:\boost-mingw toolset=gcc link=static runtime-link=static variant=release --with-system --with-thread leave cmd window open start git bash > cd /c > git clone http://github.com/alexrj/slic3r > cd slic3r > git checkout cppsvg close git bash when done make sure c:\mingw\bin is part of the Path system variable, add it otherwise start cmake gui source code: c:\slic3r\src build directory: c:\slic3r\build click configure, select "mingw makefiles" from list, select "default native compilers", click finish click generate close cmake gui alternatively, do it from command line: cmake ..\src -G "MinGW Makefiles" -DBOOST_ROOT="c:\program files\boost\boost_1_61_0" (in case cmake can't find the libs, -DBoost_DEBUG=1 and -DBoost_COMPILER=-mgw46 are useful) go back to cmd window > cd c:\slic3r\build > mingw32-make.exe might be mingw64 on 64-bit setup, I'm not sure The resulting slic3r.exe is the target executable, it has no dependencies except windows system libraries (kernel32 and msvcrt) Slic3r-1.3.0/t/000077500000000000000000000000001327442435500131265ustar00rootroot00000000000000Slic3r-1.3.0/t/adaptive_slicing.t000066400000000000000000000116201327442435500166200ustar00rootroot00000000000000use Test::More tests => 9; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first sum); use Slic3r; use Slic3r::Test qw(_eq); use Slic3r::Geometry qw(Z PI scale unscale); use Devel::Peek; my $config = Slic3r::Config->new_from_defaults; my $generate_gcode = sub { my ($conf) = @_; $conf ||= $config; my $print = Slic3r::Test::init_print('slopy_cube', config => $conf); my @z = (); my @increments = (); Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{dist_Z}) { push @z, 1*$args->{Z}; push @increments, $info->{dist_Z}; } }); return (@z); }; my $horizontal_feature_test = sub { my (@z) = $generate_gcode->(); ok (_eq($z[0], $config->get_value('first_layer_height') + $config->z_offset), 'first layer height.'); ok (_eq($z[1], $config->get_value('first_layer_height') + $config->get('max_layer_height')->[0] + $config->z_offset), 'second layer height.'); cmp_ok((first { _eq($_, 10.0) } @z[1..$#z]), '>', 0, 'horizontal facet matched'); 1; }; my $height_gradation_test = sub { my (@z) = $generate_gcode->(); my $gradation = 1 / $config->get('z_steps_per_mm'); # +1 is a "dirty fix" to avoid rounding issues with the modulo operator... my @results = map {unscale((scale($_)+1) % scale($gradation))} @z; ok (_eq(sum(@results), 0), 'layer z is multiple of gradation ' . $gradation ); 1; }; my $adaptive_slicing = Slic3r::SlicingAdaptive->new(); my $mesh = Slic3r::Test::mesh('slopy_cube'); $adaptive_slicing->add_mesh($mesh); $adaptive_slicing->prepare(20); subtest 'max layer_height limited by extruder capabilities' => sub { plan tests => 3; ok (_eq($adaptive_slicing->next_layer_height(1, 20, 0.1, 0.15), 0.15), 'low'); ok (_eq($adaptive_slicing->next_layer_height(1, 20, 0.1, 0.4), 0.4), 'higher'); ok (_eq($adaptive_slicing->next_layer_height(1, 20, 0.1, 0.65), 0.65), 'highest'); }; subtest 'min layer_height limited by extruder capabilities' => sub { plan tests => 3; ok (_eq($adaptive_slicing->next_layer_height(4, 99, 0.1, 0.15), 0.1), 'low'); ok (_eq($adaptive_slicing->next_layer_height(4, 98, 0.2, 0.4), 0.2), 'higher'); ok (_eq($adaptive_slicing->next_layer_height(4, 99, 0.3, 0.65), 0.3), 'highest'); }; subtest 'correct layer_height depending on the facet normals' => sub { plan tests => 3; ok (_eq($adaptive_slicing->next_layer_height(1, 10, 0.1, 0.5), 0.5), 'limit'); ok (_eq($adaptive_slicing->next_layer_height(4, 80, 0.1, 0.5), 0.1546), '45deg facet, quality_value: 0.2'); ok (_eq($adaptive_slicing->next_layer_height(4, 50, 0.1, 0.5), 0.3352), '45deg facet, quality_value: 0.5'); }; # 2.92893 ist lower slope edge # distance to slope must be higher than min extruder cap. # slopes layer height must be greater than the distance to the slope ok (_eq($adaptive_slicing->next_layer_height(2.798, 80, 0.1, 0.5), 0.1546), 'reducing layer_height due to higher slopy facet'); # slopes layer height must be smaller than the distance to the slope ok (_eq($adaptive_slicing->next_layer_height(2.6289, 85, 0.1, 0.5), 0.3), 'reducing layer_height to z-diff'); subtest 'horizontal planes' => sub { plan tests => 3; ok (_eq($adaptive_slicing->horizontal_facet_distance(1, 1.2), 1.2), 'max_height limit'); ok (_eq($adaptive_slicing->horizontal_facet_distance(8.5, 4), 1.5), 'normal horizontal facet'); ok (_eq($adaptive_slicing->horizontal_facet_distance(17, 5), 3.0), 'object maximum'); }; # shrink current layer to fit another layer under horizontal facet $config->set('start_gcode', ''); # to avoid dealing with the nozzle lift in start G-code $config->set('z_offset', 0); $config->set('adaptive_slicing', 1); $config->set('first_layer_height', 0.42893); # to catch lower slope edge $config->set('nozzle_diameter', [0.5]); $config->set('min_layer_height', [0.1]); $config->set('max_layer_height', [0.5]); $config->set('adaptive_slicing_quality', [81]); # slope height: 7,07107 (2.92893 to 10) subtest 'shrink to match horizontal facets' => sub { plan skip_all => 'spline smoothing currently prevents exact horizontal facet matching'; plan tests => 3; $horizontal_feature_test->(); }; # widen current layer to match horizontal facet $config->set('adaptive_slicing_quality', [0.1]); subtest 'widen to match horizontal facets' => sub { plan skip_all => 'spline smoothing currently prevents exact horizontal facet matching'; plan tests => 3; $horizontal_feature_test->(); }; subtest 'layer height gradation' => sub { plan tests => 5; foreach my $gradation (1/0.001, 1/0.01, 1/0.02, 1/0.05, 1/0.08) { $config->set('z_steps_per_mm', $gradation); $height_gradation_test->(); } }; __END__ Slic3r-1.3.0/t/adaptive_width.t000066400000000000000000000065411327442435500163150ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 32; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Geometry qw(X Y scale epsilon); use Slic3r::Surface ':types'; sub scale_points (@) { map [scale $_->[X], scale $_->[Y]], @_ } { my $test = sub { my ($expolygon, $fw, $expected, $descr) = @_; my $flow = Slic3r::Flow->new( nozzle_diameter => 0.5, height => 0.4, width => $fw, ); my $slices = Slic3r::Surface::Collection->new; $slices->append(Slic3r::Surface->new( surface_type => S_TYPE_INTERNAL, expolygon => $expolygon, )); my $config = Slic3r::Config::Full->new; my $loops = Slic3r::ExtrusionPath::Collection->new; my $gap_fill = Slic3r::ExtrusionPath::Collection->new; my $fill_surfaces = Slic3r::Surface::Collection->new; my $pg = Slic3r::Layer::PerimeterGenerator->new( $slices, $flow->height, $flow, $config, $config, $config, $loops, $gap_fill, $fill_surfaces, ); $pg->process; $loops = $loops->flatten; my @single = grep $_->isa('Slic3r::ExtrusionPath'), @$loops; my @loops = grep $_->isa('Slic3r::ExtrusionLoop'), @$loops; if (0) { require "Slic3r/SVG.pm"; Slic3r::SVG::output( "output.svg", expolygons => [$expolygon], polylines => [ map $_->isa('Slic3r::ExtrusionPath') ? $_->polyline : $_->polygon->split_at_first_point, @$loops ], red_polylines => [ map $_->polyline, @$gap_fill ], ); } is scalar(@single), $expected->{single} // 0, "expected number of single lines ($descr)"; is scalar(@loops), $expected->{loops} // 0, "expected number of loops ($descr)"; is scalar(@$gap_fill), $expected->{gaps} // 0, "expected number of gap fills ($descr)"; if ($expected->{single}) { ok abs($loops->[0]->width - $expected->{width}) < epsilon, "single line covers the full width ($descr)"; } if ($expected->{loops}) { my $loop_width = $loops[0][0]->width; my $gap_fill_width = @$gap_fill ? $gap_fill->[0]->width : 0; ok $loop_width * $expected->{loops} * 2 + $gap_fill_width > $expected->{width} - epsilon, "loop total width + gap fill covers the full width ($descr)"; } }; my $fw = 0.7; my $test_rect = sub { my ($width, $expected) = @_; my $e = Slic3r::ExPolygon->new([ scale_points [0,0], [100,0], [100,$width], [0,$width] ]); $expected->{width} = $width; $test->($e, $fw, $expected, $width); }; $test_rect->($fw * 1, { single => 1, gaps => 0 }); $test_rect->($fw * 1.3, { single => 1, gaps => 0 }); $test_rect->($fw * 1.5, { single => 1, gaps => 0 }); $test_rect->($fw * 2, { loops => 1, gaps => 0 }); $test_rect->($fw * 2.5, { loops => 1, gaps => 1 }); $test_rect->($fw * 3, { loops => 1, gaps => 1 }); $test_rect->($fw * 3.5, { loops => 2, gaps => 0 }); $test_rect->($fw * 4, { loops => 2, gaps => 1 }); } __END__ Slic3r-1.3.0/t/angles.t000066400000000000000000000061371327442435500145730ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 34; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use lib "$FindBin::Bin/../lib"; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::Geometry qw(rad2deg_dir angle3points PI); #========================================================== { is line_atan([ [0, 0], [10, 0] ]), (0), 'E atan2'; is line_atan([ [10, 0], [0, 0] ]), (PI), 'W atan2'; is line_atan([ [0, 0], [0, 10] ]), (PI/2), 'N atan2'; is line_atan([ [0, 10], [0, 0] ]), -(PI/2), 'S atan2'; is line_atan([ [10, 10], [0, 0] ]), -(PI*3/4), 'SW atan2'; is line_atan([ [0, 0], [10, 10] ]), (PI*1/4), 'NE atan2'; is line_atan([ [0, 10], [10, 0] ]), -(PI*1/4), 'SE atan2'; is line_atan([ [10, 0], [0, 10] ]), (PI*3/4), 'NW atan2'; } #========================================================== { is line_orientation([ [0, 0], [10, 0] ]), (0), 'E orientation'; is line_orientation([ [0, 0], [0, 10] ]), (PI/2), 'N orientation'; is line_orientation([ [10, 0], [0, 0] ]), (PI), 'W orientation'; is line_orientation([ [0, 10], [0, 0] ]), (PI*3/2), 'S orientation'; is line_orientation([ [0, 0], [10, 10] ]), (PI*1/4), 'NE orientation'; is line_orientation([ [10, 0], [0, 10] ]), (PI*3/4), 'NW orientation'; is line_orientation([ [10, 10], [0, 0] ]), (PI*5/4), 'SW orientation'; is line_orientation([ [0, 10], [10, 0] ]), (PI*7/4), 'SE orientation'; } #========================================================== { is line_direction([ [0, 0], [10, 0] ]), (0), 'E direction'; is line_direction([ [10, 0], [0, 0] ]), (0), 'W direction'; is line_direction([ [0, 0], [0, 10] ]), (PI/2), 'N direction'; is line_direction([ [0, 10], [0, 0] ]), (PI/2), 'S direction'; is line_direction([ [10, 10], [0, 0] ]), (PI*1/4), 'SW direction'; is line_direction([ [0, 0], [10, 10] ]), (PI*1/4), 'NE direction'; is line_direction([ [0, 10], [10, 0] ]), (PI*3/4), 'SE direction'; is line_direction([ [10, 0], [0, 10] ]), (PI*3/4), 'NW direction'; } #========================================================== { is rad2deg_dir(0), 90, 'E (degrees)'; is rad2deg_dir(PI), 270, 'W (degrees)'; is rad2deg_dir(PI/2), 0, 'N (degrees)'; is rad2deg_dir(-(PI/2)), 180, 'S (degrees)'; is rad2deg_dir(PI*1/4), 45, 'NE (degrees)'; is rad2deg_dir(PI*3/4), 135, 'NW (degrees)'; is rad2deg_dir(PI/6), 60, '30°'; is rad2deg_dir(PI/6*2), 30, '60°'; } #========================================================== { is angle3points([0,0], [10,0], [0,10]), PI/2, 'CW angle3points'; is angle3points([0,0], [0,10], [10,0]), PI/2*3, 'CCW angle3points'; } #========================================================== sub line_atan { my ($l) = @_; return Slic3r::Line->new(@$l)->atan2_; } sub line_orientation { my ($l) = @_; return Slic3r::Line->new(@$l)->orientation; } sub line_direction { my ($l) = @_; return Slic3r::Line->new(@$l)->direction; }Slic3r-1.3.0/t/arcs.t000066400000000000000000000121011327442435500142360ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 24; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::ExtrusionPath ':roles'; use Slic3r::Geometry qw(scaled_epsilon epsilon scale unscale X Y deg2rad); { my $angle = deg2rad(4); foreach my $ccw (1, 0) { my $polyline = Slic3r::Polyline->new_scale([0,0], [0,10]); { my $p3 = Slic3r::Point->new_scale(0, 20); $p3->rotate($angle * ($ccw ? 1 : -1), $polyline->[-1]); is $ccw, ($p3->[X] < $polyline->[-1][X]) ? 1 : 0, 'third point is rotated correctly'; $polyline->append($p3); } ok abs($polyline->length - scale(20)) < scaled_epsilon, 'curved polyline length'; is $ccw, ($polyline->[2]->ccw(@$polyline[0,1]) > 0) ? 1 : 0, 'curved polyline has wanted orientation'; ok my $arc = Slic3r::GCode::ArcFitting::polyline_to_arc($polyline), 'arc is detected'; is $ccw, $arc->is_ccw, 'arc orientation is correct'; ok abs($arc->angle - $angle) < epsilon, 'arc relative angle is correct'; ok $arc->start->coincides_with($polyline->[0]), 'arc start point is correct'; ok $arc->end->coincides_with($polyline->[-1]), 'arc end point is correct'; # since first polyline segment is vertical we expect arc center to have same Y as its first point is $arc->center->[Y], 0, 'arc center has correct Y'; my $s1 = Slic3r::Line->new(@$polyline[0,1]); my $s2 = Slic3r::Line->new(@$polyline[1,2]); ok abs($arc->center->distance_to($s1->midpoint) - $arc->center->distance_to($s2->midpoint)) < scaled_epsilon, 'arc center is equidistant from both segments\' midpoints'; } } #========================================================== { my $path = Slic3r::Polyline->new_scale( [13.532242,2.665496], [18.702911,9.954623], [22.251514,9.238193], [25.800116,9.954623], [28.697942,11.908391], [30.65171,14.806217], [31.36814,18.35482], [30.65171,21.903423], [28.697942,24.801249], [25.800116,26.755017], [22.251514,27.471447], [18.702911,26.755017], [15.805085,24.801249], [13.851317,21.903423], [13.134887,18.35482], [86948.77,175149.09], [119825.35,100585], ); if (0) { require "Slic3r::SVG"; Slic3r::SVG::output( "arc.svg", polylines => [$path], ); } my $af = Slic3r::GCode::ArcFitting->new(max_relative_angle => deg2rad(30)); my @chunks = $af->detect_arcs($path); is scalar(@chunks), 3, 'path collection now contains three paths'; isa_ok $chunks[0], 'Slic3r::Polyline', 'first one is polyline'; isa_ok $chunks[1], 'Slic3r::GCode::ArcFitting::Arc', 'second one is arc'; isa_ok $chunks[2], 'Slic3r::Polyline', 'third one is polyline'; } exit; #========================================================== { my @points = map [ scale $_->[0], scale $_->[1] ], ( [10,20], [10.7845909572784,19.9691733373313], [11.5643446504023,19.8768834059514], [12.3344536385591,19.7236992039768], [13.0901699437495,19.5105651629515], [13.8268343236509,19.2387953251129], [14.5399049973955,18.9100652418837], [15.2249856471595,18.5264016435409], [15.8778525229247,18.0901699437495], [16.4944804833018,17.6040596560003] ); my $path1 = Slic3r::ExtrusionPath->new( polyline => Slic3r::Polyline->new(@points), role => EXTR_ROLE_FILL, mm3_per_mm => 0.5, ); my $path2 = Slic3r::ExtrusionPath->new( polyline => Slic3r::Polyline->new(reverse @points), role => EXTR_ROLE_FILL, mm3_per_mm => 0.5, ); my @paths1 = $path1->detect_arcs(10, scale 1); my @paths2 = $path2->detect_arcs(10, scale 1); is scalar(@paths1), 1, 'path collection now contains one path'; is scalar(@paths2), 1, 'path collection now contains one path'; isa_ok $paths1[0], 'Slic3r::ExtrusionPath::Arc', 'path'; isa_ok $paths2[0], 'Slic3r::ExtrusionPath::Arc', 'path'; my $expected_length = scale 7.06858347057701; ok abs($paths1[0]->length - $expected_length) < scaled_epsilon, 'cw oriented arc has correct length'; ok abs($paths2[0]->length - $expected_length) < scaled_epsilon, 'ccw oriented arc has correct length'; is $paths1[0]->orientation, 'cw', 'cw orientation was correctly detected'; is $paths2[0]->orientation, 'ccw', 'ccw orientation was correctly detected'; is $paths1[0]->flow_spacing, $path1->flow_spacing, 'flow spacing was correctly preserved'; my $center1 = [ map sprintf('%.0f', $_), @{ $paths1[0]->center } ]; ok abs($center1->[X] - scale 10) < scaled_epsilon && abs($center1->[Y] - scale 10) < scaled_epsilon, 'center was correctly detected'; my $center2 = [ map sprintf('%.0f', $_), @{ $paths2[0]->center } ]; ok abs($center2->[X] - scale 10) < scaled_epsilon && abs($center1->[Y] - scale 10) < scaled_epsilon, 'center was correctly detected'; } #========================================================== Slic3r-1.3.0/t/avoid_crossing_perimeters.t000066400000000000000000000010411327442435500205570ustar00rootroot00000000000000use Test::More tests => 1; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first sum); use Slic3r; use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; $config->set('avoid_crossing_perimeters', 2); my $print = Slic3r::Test::init_print('20mm_cube', config => $config, duplicate => 2); ok my $gcode = Slic3r::Test::gcode($print), "no crash with avoid_crossing_perimeters and multiple objects"; } __END__ Slic3r-1.3.0/t/bridges.t000066400000000000000000000163431327442435500147410ustar00rootroot00000000000000use Test::More tests => 20; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first sum); use Slic3r; use Slic3r::Geometry qw(scale epsilon deg2rad rad2deg PI); use Slic3r::Test; { my $test = sub { my ($bridge_size, $rotate, $expected_angle, $tolerance) = @_; my ($x, $y) = @$bridge_size; my $lower = Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([-2,-2], [$x+2,-2], [$x+2,$y+2], [-2,$y+2]), Slic3r::Polygon->new_scale([0,0], [0,$y], [$x,$y], [$x,0]), ); $lower->translate(scale 20, scale 20); # avoid negative coordinates for easier SVG preview $lower->rotate(deg2rad($rotate), [$x/2,$y/2]); my $bridge = $lower->[1]->clone; $bridge->reverse; $bridge = Slic3r::ExPolygon->new($bridge); ok check_angle([$lower], $bridge, $expected_angle, $tolerance), 'correct bridge angle for O-shaped overhang'; }; $test->([20,10], 0, 90); $test->([10,20], 0, 0); $test->([20,10], 45, 135, 20); $test->([20,10], 135, 45, 20); } { my $bridge = Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([0,0], [20,0], [20,10], [0,10]), ); my $lower = [ Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([-2,0], [0,0], [0,10], [-2,10]), ), ]; $_->translate(scale 20, scale 20) for $bridge, @$lower; # avoid negative coordinates for easier SVG preview $lower->[1] = $lower->[0]->clone; $lower->[1]->translate(scale 22, 0); ok check_angle($lower, $bridge, 0), 'correct bridge angle for two-sided bridge'; } { my $bridge = Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([0,0], [20,0], [10,10], [0,10]), ); my $lower = [ Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([0,0], [0,10], [10,10], [10,12], [-2,12], [-2,-2], [22,-2], [22,0]), ), ]; $_->translate(scale 20, scale 20) for $bridge, @$lower; # avoid negative coordinates for easier SVG preview ok check_angle($lower, $bridge, 135), 'correct bridge angle for C-shaped overhang'; } { my $bridge = Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([10,10],[20,10],[20,20], [10,20]), ); my $lower = [ Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([10,10],[10,20],[20,20],[20,30],[0,30],[0,10]), ), ]; $_->translate(scale 20, scale 20) for $bridge, @$lower; # avoid negative coordinates for easier SVG preview ok check_angle($lower, $bridge, 45, undef, $bridge->area/2), 'correct bridge angle for square overhang with L-shaped anchors'; } { # GH #2477: This test case failed when we computed coverage by summing length of centerlines # instead of summing their covered area. my $bridge = Slic3r::ExPolygon->new( Slic3r::Polygon->new([30299990,14299990],[1500010,14299990],[1500010,1500010],[30299990,1500010]), ); my $lower = [ Slic3r::ExPolygon->new( Slic3r::Polygon->new([31800000,15800000],[0,15800000],[0,0],[31800000,0]), Slic3r::Polygon->new([1499999,1500000],[1499999,14300000],[30300000,14300000],[30300000,1500000]), ), ]; ok check_angle($lower, $bridge, 90, undef, $bridge->area, 500000), 'correct bridge angle for rectangle'; } { # GH #3929: This test case checks that narrow gaps in lower slices don't prevent correct # direction detection. my $bridge = Slic3r::ExPolygon->new( Slic3r::Polygon->new([10099996,45867519],[3762370,45867519],[3762370,2132479],[10099996,2132479]), ); my $lower = [ Slic3r::ExPolygon->new( Slic3r::Polygon->new([13534103,210089],[13629884,235753],[14249999,401901],[14269611,421510],[14272931,424830],[14287518,439411],[14484206,636101],[15348099,1500000],[15360812,1547449],[15365467,1564815],[15388623,1651235],[15391897,1663454],[15393088,1667906],[15399044,1690134],[15457593,1908648],[15750000,2999999],[15750000,45000000],[15742825,45026783],[15741540,45031580],[15735900,45052628],[15663980,45321047],[15348099,46500000],[15151410,46696691],[14287518,47560587],[14267907,47580196],[14264587,47583515],[14249999,47598100],[14211041,47608539],[14204785,47610215],[14176024,47617916],[14105602,47636784],[14097768,47638884],[14048000,47652220],[13871472,47699515],[12750000,48000000],[10446106,48000000],[10446124,47990347],[10446124,9652],[10446106,0],[12750000,0]), Slic3r::Polygon->new([10251886,5013],[10251886,47994988],[10251907,48000000],[10100006,48000000],[10100006,0],[10251907,0]), Slic3r::Polygon->new([3762360,17017],[3762360,47982984],[3762397,48000000],[1249999,48000000],[536029,47808700],[456599,47787419],[73471,47684764],[0,47665076],[0,23124327],[119299,22907322],[159278,22834601],[196290,22690451],[239412,22522516],[303787,22271780],[639274,20965103],[639274,19034896],[616959,18947983],[607651,18911729],[559146,18722807],[494769,18472073],[159278,17165397],[38931,16946491],[0,16875676],[0,334922],[128529,300484],[1250000,0],[3762397,0]), ), ]; ok check_angle($lower, $bridge, 0, undef, $bridge->area, 500000), 'correct bridge angle when lower slices have narrow gap'; } sub check_angle { my ($lower, $bridge, $expected, $tolerance, $expected_coverage, $extrusion_width) = @_; if (ref($lower) eq 'ARRAY') { $lower = Slic3r::ExPolygon::Collection->new(@$lower); } $expected_coverage //= -1; $expected_coverage = $bridge->area if $expected_coverage == -1; $extrusion_width //= scale 0.5; my $bd = Slic3r::BridgeDetector->new($bridge, $lower, $extrusion_width); $tolerance //= rad2deg($bd->resolution) + epsilon; $bd->detect_angle; my $result = $bd->angle; my $coverage = $bd->coverage; is sum(map $_->area, @$coverage), $expected_coverage, 'correct coverage area'; # our epsilon is equal to the steps used by the bridge detection algorithm ###use XXX; YYY [ rad2deg($result), $expected ]; # returned value must be non-negative, check for that too my $delta = rad2deg($result) - $expected; $delta -= 180 if $delta >= 180 - epsilon; return defined $result && $result >= 0 && abs($delta) < $tolerance; } { my $config = Slic3r::Config->new_from_defaults; $config->set('top_solid_layers', 0); # to prevent bridging on sparse infill $config->set('bridge_speed', 99); my $print = Slic3r::Test::init_print('bridge', config => $config); my %extrusions = (); # angle => length Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1' && ($args->{F} // $self->F)/60 == $config->bridge_speed) { my $line = Slic3r::Line->new_scale( [ $self->X, $self->Y ], [ $info->{new_X}, $info->{new_Y} ], ); my $angle = $line->direction; $extrusions{$angle} //= 0; $extrusions{$angle} += $line->length; } }); ok !!%extrusions, "bridge is generated"; my ($main_angle) = sort { $extrusions{$b} <=> $extrusions{$a} } keys %extrusions; is $main_angle, 0, "bridge has the expected direction"; } __END__ Slic3r-1.3.0/t/clean_polylines.t000066400000000000000000000107501327442435500164760ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 6; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; { my $polyline = Slic3r::Polyline->new( [0,0],[1,0],[2,0],[2,1],[2,2],[1,2],[0,2],[0,1],[0,0], ); $polyline->simplify(1); is_deeply $polyline->pp, [ [0, 0], [2, 0], [2, 2], [0, 2], [0, 0] ], 'Douglas-Peucker'; } { my $polyline = Slic3r::Polyline->new( [0,0], [50,50], [100,0], [125,-25], [150,50], ); $polyline->simplify(25); is_deeply $polyline->pp, [ [0, 0], [50, 50], [125, -25], [150, 50] ], 'Douglas-Peucker'; } { my $gear = Slic3r::Polygon->new_scale( [144.9694,317.1543], [145.4181,301.5633], [146.3466,296.921], [131.8436,294.1643], [131.7467,294.1464], [121.7238,291.5082], [117.1631,290.2776], [107.9198,308.2068], [100.1735,304.5101], [104.9896,290.3672], [106.6511,286.2133], [93.453,279.2327], [81.0065,271.4171], [67.7886,286.5055], [60.7927,280.1127], [69.3928,268.2566], [72.7271,264.9224], [61.8152,253.9959], [52.2273,242.8494], [47.5799,245.7224], [34.6577,252.6559], [30.3369,245.2236], [42.1712,236.3251], [46.1122,233.9605], [43.2099,228.4876], [35.0862,211.5672], [33.1441,207.0856], [13.3923,212.1895], [10.6572,203.3273], [6.0707,204.8561], [7.2775,204.4259], [29.6713,196.3631], [25.9815,172.1277], [25.4589,167.2745], [19.8337,167.0129], [5.0625,166.3346], [5.0625,156.9425], [5.3701,156.9282], [21.8636,156.1628], [25.3713,156.4613], [25.4243,155.9976], [29.3432,155.8157], [30.3838,149.3549], [26.3596,147.8137], [27.1085,141.2604], [29.8466,126.8337], [24.5841,124.9201], [10.6664,119.8989], [13.4454,110.9264], [33.1886,116.0691], [38.817,103.1819], [45.8311,89.8133], [30.4286,76.81], [35.7686,70.0812], [48.0879,77.6873], [51.564,81.1635], [61.9006,69.1791], [72.3019,58.7916], [60.5509,42.5416], [68.3369,37.1532], [77.9524,48.1338], [80.405,52.2215], [92.5632,44.5992], [93.0123,44.3223], [106.3561,37.2056], [100.8631,17.4679], [108.759,14.3778], [107.3148,11.1283], [117.0002,32.8627], [140.9109,27.3974], [145.7004,26.4994], [145.1346,6.1011], [154.502,5.4063], [156.9398,25.6501], [171.0557,26.2017], [181.3139,27.323], [186.2377,27.8532], [191.6031,8.5474], [200.6724,11.2756], [197.2362,30.2334], [220.0789,39.1906], [224.3261,41.031], [236.3506,24.4291], [243.6897,28.6723], [234.2956,46.7747], [245.6562,55.1643], [257.2523,65.0901], [261.4374,61.5679], [273.1709,52.8031], [278.555,59.5164], [268.4334,69.8001], [264.1615,72.3633], [268.2763,77.9442], [278.8488,93.5305], [281.4596,97.6332], [286.4487,95.5191], [300.2821,90.5903], [303.4456,98.5849], [286.4523,107.7253], [293.7063,131.1779], [294.9748,135.8787], [314.918,133.8172], [315.6941,143.2589], [300.9234,146.1746], [296.6419,147.0309], [297.1839,161.7052], [296.6136,176.3942], [302.1147,177.4857], [316.603,180.3608], [317.1658,176.7341], [315.215,189.6589], [315.1749,189.6548], [294.9411,187.5222], [291.13,201.7233], [286.2615,215.5916], [291.1944,218.2545], [303.9158,225.1271], [299.2384,233.3694], [285.7165,227.6001], [281.7091,225.1956], [273.8981,237.6457], [268.3486,245.2248], [267.4538,246.4414], [264.8496,250.0221], [268.6392,253.896], [278.5017,265.2131], [272.721,271.4403], [257.2776,258.3579], [234.4345,276.5687], [242.6222,294.8315], [234.9061,298.5798], [227.0321,286.2841], [225.2505,281.8301], [211.5387,287.8187], [202.3025,291.0935], [197.307,292.831], [199.808,313.1906], [191.5298,315.0787], [187.3082,299.8172], [186.4201,295.3766], [180.595,296.0487], [161.7854,297.4248], [156.8058,297.6214], [154.3395,317.8592], ); my $num_points = scalar @$gear; my $simplified = $gear->simplify(1000); ok @$simplified == 1, 'gear simplified to a single polygon'; ###note sprintf "original points: %d\nnew points: %d", $num_points, scalar(@{$simplified->[0]}); ok @{$simplified->[0]} < $num_points, 'gear was further simplified using Douglas-Peucker'; } { my $hole_in_square = Slic3r::Polygon->new( # cw [140, 140], [140, 160], [160, 160], [160, 140], ); my $simplified = $hole_in_square->simplify(2); is scalar(@$simplified), 1, 'hole simplification returns one polygon'; ok $simplified->[0]->is_counter_clockwise, 'hole simplification turns cw polygon into ccw polygon'; } Slic3r-1.3.0/t/clipper.t000066400000000000000000000044611327442435500147560ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 6; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(sum); use Slic3r; use Slic3r::Geometry::Clipper qw(intersection_ex union_ex diff_ex diff_pl); { my $square = [ # ccw [10, 10], [20, 10], [20, 20], [10, 20], ]; my $hole_in_square = [ # cw [14, 14], [14, 16], [16, 16], [16, 14], ]; my $square2 = [ # ccw [5, 12], [25, 12], [25, 18], [5, 18], ]; my $intersection = intersection_ex([ $square, $hole_in_square ], [ $square2 ]); is sum(map $_->area, @$intersection), Slic3r::ExPolygon->new( [ [20, 18], [10, 18], [10, 12], [20, 12], ], [ [14, 16], [16, 16], [16, 14], [14, 14], ], )->area, 'hole is preserved after intersection'; } #========================================================== { my $contour1 = [ [0,0], [40,0], [40,40], [0,40] ]; # ccw my $contour2 = [ [10,10], [30,10], [30,30], [10,30] ]; # ccw my $hole = [ [15,15], [15,25], [25,25], [25,15] ]; # cw my $union = union_ex([ $contour1, $contour2, $hole ]); is_deeply [ map $_->pp, @$union ], [[ [ [40,40], [0,40], [0,0], [40,0] ] ]], 'union of two ccw and one cw is a contour with no holes'; my $diff = diff_ex([ $contour1, $contour2 ], [ $hole ]); is sum(map $_->area, @$diff), Slic3r::ExPolygon->new([ [40,40], [0,40], [0,0], [40,0] ], [ [15,25], [25,25], [25,15], [15,15] ])->area, 'difference of a cw from two ccw is a contour with one hole'; } #========================================================== { my $square = Slic3r::Polygon->new_scale( # ccw [10, 10], [20, 10], [20, 20], [10, 20], ); my $square_pl = $square->split_at_first_point; my $res = diff_pl([$square_pl], []); is scalar(@$res), 1, 'no-op diff_pl returns the right number of polylines'; isa_ok $res->[0], 'Slic3r::Polyline', 'no-op diff_pl result'; is scalar(@{$res->[0]}), scalar(@$square_pl), 'no-op diff_pl returns the unmodified input polyline'; } __END__ Slic3r-1.3.0/t/collinear.t000066400000000000000000000042221327442435500152630ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 11; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::Geometry qw(collinear); #========================================================== { my @lines = ( Slic3r::Line->new([0,4], [4,2]), Slic3r::Line->new([2,3], [8,0]), Slic3r::Line->new([6,1], [8,0]), ); is collinear($lines[0], $lines[1]), 1, 'collinear'; is collinear($lines[1], $lines[2]), 1, 'collinear'; is collinear($lines[0], $lines[2]), 1, 'collinear'; } #========================================================== { # horizontal my @lines = ( Slic3r::Line->new([0,1], [5,1]), Slic3r::Line->new([2,1], [8,1]), ); is collinear($lines[0], $lines[1]), 1, 'collinear'; } #========================================================== { # vertical my @lines = ( Slic3r::Line->new([1,0], [1,5]), Slic3r::Line->new([1,2], [1,8]), ); is collinear($lines[0], $lines[1]), 1, 'collinear'; } #========================================================== { # non overlapping my @lines = ( Slic3r::Line->new([0,1], [5,1]), Slic3r::Line->new([7,1], [10,1]), ); is collinear($lines[0], $lines[1], 1), 0, 'non overlapping'; is collinear($lines[0], $lines[1], 0), 1, 'overlapping'; } #========================================================== { # with one common point my @lines = ( Slic3r::Line->new([0,4], [4,2]), Slic3r::Line->new([4,2], [8,0]), ); is collinear($lines[0], $lines[1], 1), 1, 'one common point'; is collinear($lines[0], $lines[1], 0), 1, 'one common point'; } #========================================================== { # not collinear my @lines = ( Slic3r::Line->new([290000000,690525600], [285163380,684761540]), Slic3r::Line->new([285163380,684761540], [193267599,575244400]), ); is collinear($lines[0], $lines[1], 0), 0, 'not collinear'; is collinear($lines[0], $lines[1], 1), 0, 'not collinear'; } #========================================================== Slic3r-1.3.0/t/combineinfill.t000066400000000000000000000143211327442435500161260ustar00rootroot00000000000000use Test::More; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Surface ':types'; use Slic3r::Test; plan tests => 8; { my $test = sub { my ($config) = @_; my $print = Slic3r::Test::init_print('20mm_cube', config => $config); ok my $gcode = Slic3r::Test::gcode($print), "infill_every_layers does not crash"; my $tool = undef; my %layers = (); # layer_z => 1 my %layer_infill = (); # layer_z => has_infill Slic3r::GCode::Reader->new->parse($gcode, sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0 && $tool != $config->support_material_extruder-1) { $layer_infill{$self->Z} //= 0; if ($tool == $config->infill_extruder-1) { $layer_infill{$self->Z} = 1; } } $layers{$args->{Z}} = 1 if $cmd eq 'G1' && $info->{dist_Z} > 0; }); my $layers_with_perimeters = scalar(keys %layer_infill); my $layers_with_infill = grep $_ > 0, values %layer_infill; is scalar(keys %layers), $layers_with_perimeters+$config->raft_layers, 'expected number of layers'; # first infill layer is never combined, so we don't consider it $layers_with_infill--; $layers_with_perimeters--; # we expect that infill is generated for half the number of combined layers # plus for each single layer that was not combined (remainder) is $layers_with_infill, int($layers_with_perimeters/$config->infill_every_layers) + ($layers_with_perimeters % $config->infill_every_layers), 'infill is only present in correct number of layers'; }; my $config = Slic3r::Config->new_from_defaults; $config->set('layer_height', 0.2); $config->set('first_layer_height', 0.2); $config->set('nozzle_diameter', [0.5]); $config->set('infill_every_layers', 2); $config->set('perimeter_extruder', 1); $config->set('infill_extruder', 2); $config->set('support_material_extruder', 3); $config->set('support_material_interface_extruder', 3); $config->set('top_solid_layers', 0); $config->set('bottom_solid_layers', 0); $test->($config); $config->set('skirts', 0); # prevent usage of perimeter_extruder in raft layers $config->set('raft_layers', 5); $test->($config); } { my $config = Slic3r::Config->new_from_defaults; $config->set('layer_height', 0.2); $config->set('first_layer_height', 0.2); $config->set('nozzle_diameter', [0.5]); $config->set('infill_every_layers', 2); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); $print->process; ok defined(first { @{$_->get_region(0)->fill_surfaces->filter_by_type(S_TYPE_INTERNALVOID)} > 0 } @{$print->print->get_object(0)->layers}), 'infill combination produces internal void surfaces'; # we disable combination after infill has been generated $config->set('infill_every_layers', 1); $print->apply_config($config); $print->process; ok !(defined first { @{$_->get_region(0)->fill_surfaces} == 0 } @{$print->print->get_object(0)->layers}), 'infill combination is idempotent'; } # the following needs to be adapted to the new API if (0) { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('solid_layers', 0); $config->set('bottom_solid_layers', 0); $config->set('top_solid_layers', 0); $config->set('infill_every_layers', 6); $config->set('layer_height', 0.06); $config->set('perimeters', 1); my $test = sub { my ($shift) = @_; my $self = Slic3r::Test::init_print('20mm_cube', config => $config); $shift /= &Slic3r::SCALING_FACTOR; my $scale = 4; # make room for fat infill lines with low layer height # Put a slope on the box's sides by shifting x and y coords by $tilt * (z / boxheight). # The test here is to put such a slight slope on the walls that it should # not trigger any extra fill on fill layers that should be empty when # combine infill is enabled. $_->[0] += $shift * ($_->[2] / (20 / &Slic3r::SCALING_FACTOR)) for @{$self->objects->[0]->meshes->[0]->vertices}; $_->[1] += $shift * ($_->[2] / (20 / &Slic3r::SCALING_FACTOR)) for @{$self->objects->[0]->meshes->[0]->vertices}; $_ = [$_->[0]*$scale, $_->[1]*$scale, $_->[2]] for @{$self->objects->[0]->meshes->[0]->vertices}; # copy of Print::export_gcode() up to the point # after fill surfaces are combined $_->slice for @{$self->objects}; $_->make_perimeters for @{$self->objects}; $_->detect_surfaces_type for @{$self->objects}; $_->prepare_fill_surfaces for map @{$_->regions}, map @{$_->layers}, @{$self->objects}; $_->process_external_surfaces for map @{$_->regions}, map @{$_->layers}, @{$self->objects}; $_->discover_horizontal_shells for @{$self->objects}; $_->combine_infill for @{$self->objects}; # Only layers with id % 6 == 0 should have fill. my $spurious_infill = 0; foreach my $layer (map @{$_->layers}, @{$self->objects}) { ++$spurious_infill if ($layer->id % 6 && grep @{$_->fill_surfaces} > 0, @{$layer->regions}); } $spurious_infill -= scalar(@{$self->objects->[0]->layers} - 1) % 6; fail "spurious fill surfaces found on layers that should have none (walls " . sprintf("%.4f", Slic3r::Geometry::rad2deg(atan2($shift, 20/&Slic3r::SCALING_FACTOR))) . " degrees off vertical)" unless $spurious_infill == 0; 1; }; # Test with mm skew offsets for the top of the 20mm-high box for my $shift (0, 0.0001, 1) { ok $test->($shift), "no spurious fill surfaces with box walls " . sprintf("%.4f",Slic3r::Geometry::rad2deg(atan2($shift, 20))) . " degrees off of vertical"; } } __END__ Slic3r-1.3.0/t/config.t000066400000000000000000000006001327442435500145540ustar00rootroot00000000000000use Test::More tests => 1; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; $config->set('perimeter_extrusion_width', '250%'); ok $config->validate, 'percent extrusion width is validated'; } __END__ Slic3r-1.3.0/t/cooling.t000066400000000000000000000152611327442435500147520ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 13; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(none all); use Slic3r; use Slic3r::Test; my $gcodegen; sub buffer { my $config = shift || Slic3r::Config->new; my $print_config = Slic3r::Config::Print->new; $print_config->apply_dynamic($config); $gcodegen = Slic3r::GCode->new; $gcodegen->apply_print_config($print_config); $gcodegen->set_layer_count(10); return Slic3r::GCode::CoolingBuffer->new($gcodegen); } my $config = Slic3r::Config->new_from_defaults; $config->set('disable_fan_first_layers', 0); { my $buffer = buffer($config); $buffer->gcodegen->set_elapsed_time($buffer->gcodegen->config->slowdown_below_layer_time + 1); my $gcode = $buffer->append('G1 F3000;_EXTRUDE_SET_SPEED\nG1 X100 E1', 0, 0, 0.4) . $buffer->flush; like $gcode, qr/F3000/, 'speed is not altered when elapsed time is greater than slowdown threshold'; } { my $buffer = buffer($config); $buffer->gcodegen->set_elapsed_time($buffer->gcodegen->config->slowdown_below_layer_time - 1); my $gcode = $buffer->append( "G1 X50 F2500\n" . "G1 F3000;_EXTRUDE_SET_SPEED\n" . "G1 X100 E1\n" . "G1 E4 F400", 0, 0, 0.4 ) . $buffer->flush; unlike $gcode, qr/F3000/, 'speed is altered when elapsed time is lower than slowdown threshold'; like $gcode, qr/F2500/, 'speed is not altered for travel moves'; like $gcode, qr/F400/, 'speed is not altered for extruder-only moves'; } { my $buffer = buffer($config); $buffer->gcodegen->set_elapsed_time($buffer->gcodegen->config->fan_below_layer_time + 1); my $gcode = $buffer->append('G1 X100 E1 F3000', 0, 0, 0.4) . $buffer->flush; unlike $gcode, qr/M106/, 'fan is not activated when elapsed time is greater than fan threshold'; } { my $buffer = buffer($config); my $gcode = ""; for my $obj_id (0 .. 1) { # use an elapsed time which is < the slowdown threshold but greater than it when summed twice $buffer->gcodegen->set_elapsed_time($buffer->gcodegen->config->slowdown_below_layer_time - 1); $gcode .= $buffer->append("G1 X100 E1 F3000\n", $obj_id, 0, 0.4); } $gcode .= $buffer->flush; like $gcode, qr/F3000/, 'slowdown is computed on all objects printing at same Z'; } { my $buffer = buffer($config); my $gcode = ""; for my $layer_id (0 .. 1) { for my $obj_id (0 .. 1) { # use an elapsed time which is < the threshold but greater than it when summed twice $buffer->gcodegen->set_elapsed_time($buffer->gcodegen->config->fan_below_layer_time - 1); $gcode .= $buffer->append("G1 X100 E1 F3000\n", $obj_id, $layer_id, 0.4 + 0.4*$layer_id + 0.1*$obj_id); # print same layer at distinct heights } } $gcode .= $buffer->flush; unlike $gcode, qr/M106/, 'fan activation is computed on all objects printing at different Z'; } { my $buffer = buffer($config); my $gcode = ""; for my $layer_id (0 .. 1) { for my $obj_id (0 .. 1) { # use an elapsed time which is < the threshold even when summed twice $buffer->gcodegen->set_elapsed_time($buffer->gcodegen->config->fan_below_layer_time/2 - 1); $gcode .= $buffer->append("G1 X100 E1 F3000\n", $obj_id, $layer_id, 0.4 + 0.4*$layer_id + 0.1*$obj_id); # print same layer at distinct heights } } $gcode .= $buffer->flush; like $gcode, qr/M106/, 'fan activation is computed on all objects printing at different Z'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('cooling', 1); $config->set('bridge_fan_speed', 100); $config->set('fan_below_layer_time', 0); $config->set('slowdown_below_layer_time', 0); $config->set('bridge_speed', 99); $config->set('top_solid_layers', 1); # internal bridges use solid_infil speed $config->set('bottom_solid_layers', 1); # internal bridges use solid_infil speed $config->set('vibration_limit', 30); # test that fan is turned on even when vibration limit (or other G-code post-processor) is enabled my $print = Slic3r::Test::init_print('overhang', config => $config); my $fan = 0; my $fan_with_incorrect_speeds = my $fan_with_incorrect_print_speeds = 0; my $bridge_with_no_fan = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'M106') { $fan = $args->{S}; $fan_with_incorrect_speeds++ if $fan != 255; } elsif ($cmd eq 'M107') { $fan = 0; } elsif ($info->{extruding} && $info->{dist_XY} > 0) { $fan_with_incorrect_print_speeds++ if ($fan > 0) && ($args->{F} // $self->F) != 60*$config->bridge_speed; $bridge_with_no_fan++ if !$fan && ($args->{F} // $self->F) == 60*$config->bridge_speed; } }); ok !$fan_with_incorrect_speeds, 'bridge fan speed is applied correctly'; ok !$fan_with_incorrect_print_speeds, 'bridge fan is only turned on for bridges'; ok !$bridge_with_no_fan, 'bridge fan is turned on for all bridges'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('cooling', 1); $config->set('fan_below_layer_time', 0); $config->set('slowdown_below_layer_time', 10); $config->set('min_print_speed', 0); $config->set('start_gcode', ''); $config->set('first_layer_speed', '100%'); $config->set('external_perimeter_speed', 99); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my @layer_times = (0); # in seconds my %layer_external = (); # z => 1 Slic3r::GCode::Reader->new->parse(my $gcode = Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1') { if ($info->{dist_Z}) { push @layer_times, 0; $layer_external{ $args->{Z} } = 0; } $layer_times[-1] += abs($info->{dist_XY} || $info->{dist_E} || $info->{dist_Z} || 0) / ($args->{F} // $self->F) * 60; if ($args->{F} && $args->{F} == $config->external_perimeter_speed*60) { $layer_external{ $self->Z }++; } } }); @layer_times = grep $_, @layer_times; my $all_below = none { $_ < $config->slowdown_below_layer_time } @layer_times; ok $all_below, 'slowdown_below_layer_time is honored'; # check that all layers have at least one unaltered external perimeter speed my $external = all { $_ > 0 } values %layer_external; ok $external, 'slowdown_below_layer_time does not alter external perimeters'; } __END__ Slic3r-1.3.0/t/custom_gcode.t000066400000000000000000000126551327442435500157770ustar00rootroot00000000000000use Test::More tests => 16; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; my $test = sub { my ($conf) = @_; $conf ||= $config; my $print = Slic3r::Test::init_print('2x20x10', config => $conf); my $last_move_was_z_change = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($last_move_was_z_change && $cmd ne $config->layer_gcode) { fail 'custom layer G-code was not applied after Z change'; } if (!$last_move_was_z_change && $cmd eq $config->layer_gcode) { fail 'custom layer G-code was not applied after Z change'; } $last_move_was_z_change = (defined $info->{dist_Z} && $info->{dist_Z} > 0); }); 1; }; $config->set('start_gcode', '_MY_CUSTOM_START_GCODE_'); # to avoid dealing with the nozzle lift in start G-code $config->set('layer_gcode', '_MY_CUSTOM_LAYER_GCODE_'); ok $test->(), "custom layer G-code is applied after Z move and before other moves"; } #========================================================== { my $parser = Slic3r::GCode::PlaceholderParser->new; $parser->apply_config(my $config = Slic3r::Config->new_from_defaults); $parser->set('foo' => '0'); is $parser->process('[temperature_[foo]]'), $config->temperature->[0], "nested config options"; } { my $config = Slic3r::Config->new_from_defaults; $config->set('output_filename_format', 'ts_[travel_speed]_lh_[layer_height].gcode'); $config->set('start_gcode', "TRAVEL:[travel_speed] HEIGHT:[layer_height]\n"); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $output_file = $print->print->output_filepath; my ($t, $h) = map $config->$_, qw(travel_speed layer_height); ok $output_file =~ /ts_${t}_/, 'print config options are replaced in output filename'; ok $output_file =~ /lh_$h\./, 'region config options are replaced in output filename'; my $gcode = Slic3r::Test::gcode($print); ok $gcode =~ /TRAVEL:$t/, 'print config options are replaced in custom G-code'; ok $gcode =~ /HEIGHT:$h/, 'region config options are replaced in custom G-code'; } { my $config = Slic3r::Config->new; $config->set('extruder', 2); $config->set('first_layer_temperature', [200,205]); { my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $gcode = Slic3r::Test::gcode($print); ok $gcode =~ /M104 S205 T1/, 'temperature set correctly for non-zero yet single extruder'; ok $gcode !~ /M104 S\d+ T0/, 'unused extruder correctly ignored'; } $config->set('infill_extruder', 1); { my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $gcode = Slic3r::Test::gcode($print); ok $gcode =~ /M104 S200 T0/, 'temperature set correctly for first extruder'; ok $gcode =~ /M104 S205 T1/, 'temperature set correctly for second extruder'; } $config->set('start_gcode', qq! ;__temp0:[first_layer_temperature_0]__ ;__temp1:[first_layer_temperature_1]__ ;__temp2:[first_layer_temperature_2]__ !); { my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $gcode = Slic3r::Test::gcode($print); # we use the [infill_extruder] placeholder to make sure this test doesn't # catch a false positive caused by the unparsed start G-code option itself # being embedded in the G-code ok $gcode =~ /temp0:200/, 'temperature placeholder for first extruder correctly populated'; ok $gcode =~ /temp1:205/, 'temperature placeholder for second extruder correctly populated'; ok $gcode =~ /temp2:200/, 'temperature placeholder for unused extruder populated with first value'; } } { my $config = Slic3r::Config->new_from_defaults; $config->set('before_layer_gcode', ';BEFORE [layer_num]'); $config->set('layer_gcode', ';CHANGE [layer_num]'); $config->set('support_material', 1); $config->set('layer_height', 0.2); my $print = Slic3r::Test::init_print('overhang', config => $config); my $gcode = Slic3r::Test::gcode($print); my @before = (); my @change = (); foreach my $line (split /\R+/, $gcode) { if ($line =~ /;BEFORE (\d+)/) { push @before, $1; } elsif ($line =~ /;CHANGE (\d+)/) { push @change, $1; fail 'inconsistent layer_num before and after layer change' if $1 != $before[-1]; } } is_deeply \@before, \@change, 'layer_num is consistent before and after layer changes'; ok !defined(first { $change[$_] != $change[$_-1]+1 } 1..$#change), 'layer_num grows continously'; # i.e. no duplicates or regressions } { my $config = Slic3r::Config->new_from_defaults; $config->set('complete_objects', 1); $config->set('between_objects_gcode', '_MY_CUSTOM_GCODE_'); my $print = Slic3r::Test::init_print('20mm_cube', config => $config, duplicate => 3); my $gcode = Slic3r::Test::gcode($print); is scalar(() = $gcode =~ /^_MY_CUSTOM_GCODE_/gm), 2, 'between_objects_gcode is applied correctly'; } __END__ Slic3r-1.3.0/t/fill.t000066400000000000000000000417001327442435500142430ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 95; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first sum max); use Slic3r; use Slic3r::Geometry qw(PI X Y scaled_epsilon scale unscale convex_hull); use Slic3r::Geometry::Clipper qw(union diff diff_ex offset offset2_ex diff_pl union_ex); use Slic3r::Surface qw(:types); use Slic3r::Test; sub scale_points (@) { map [scale $_->[X], scale $_->[Y]], @_ } { my $print = Slic3r::Print->new; my $surface_width = 250; my $distance = Slic3r::Flow::solid_spacing($surface_width, 47); is $distance, 50, 'adjusted solid distance'; is $surface_width % $distance, 0, 'adjusted solid distance'; } { my $filler = Slic3r::Filler->new_from_type('rectilinear'); $filler->set_angle(-(PI)/2); $filler->set_min_spacing(5); $filler->set_dont_adjust(1); $filler->set_endpoints_overlap(0); my $test = sub { my ($expolygon) = @_; my $surface = Slic3r::Surface->new( surface_type => S_TYPE_TOP, expolygon => $expolygon, ); return $filler->fill_surface($surface); }; # square $filler->set_density($filler->min_spacing / 50); for my $i (0..3) { # check that it works regardless of the points order my @points = ([0,0], [100,0], [100,100], [0,100]); @points = (@points[$i..$#points], @points[0..($i-1)]); my $paths = $test->(my $e = Slic3r::ExPolygon->new([ scale_points @points ])); is(scalar @$paths, 1, 'one continuous path') or done_testing, exit; ok abs($paths->[0]->length - scale(3*100 + 2*50)) - scaled_epsilon, 'path has expected length'; } # diamond with endpoints on grid { my $paths = $test->(my $e = Slic3r::ExPolygon->new([ scale_points [0,0], [100,0], [150,50], [100,100], [0,100], [-50,50] ])); is(scalar @$paths, 1, 'one continuous path') or done_testing, exit; } # square with hole for my $angle (-(PI/2), -(PI/4), -(PI), PI/2, PI) { for my $spacing (25, 5, 7.5, 8.5) { $filler->set_density($filler->min_spacing / $spacing); $filler->set_angle($angle); my $paths = $test->(my $e = Slic3r::ExPolygon->new( [ scale_points [0,0], [100,0], [100,100], [0,100] ], [ scale_points reverse [25,25], [75,25], [75,75], [25,75] ], )); if (0) { require "Slic3r/SVG.pm"; Slic3r::SVG::output( "fill.svg", no_arrows => 1, expolygons => [$e], polylines => $paths, ); } ok(@$paths >= 2 && @$paths <= 3, '2 or 3 continuous paths') or done_testing, exit; ok(!@{diff_pl($paths->arrayref, offset(\@$e, +scaled_epsilon*10))}, 'paths don\'t cross hole') or done_testing, exit; } } # rotated square $filler->set_angle(PI/4); $filler->set_dont_adjust(0); $filler->set_min_spacing(0.654498); $filler->set_endpoints_overlap(unscale(359974)); $filler->set_density(1); $filler->set_layer_id(66); $filler->set_z(20.15); { my $e = Slic3r::ExPolygon->new( Slic3r::Polygon->new([25771516,14142125],[14142138,25771515],[2512749,14142131],[14142125,2512749]), ); my $paths = $test->($e); is(scalar @$paths, 1, 'one continuous path') or done_testing, exit; ok abs($paths->[0]->length - scale(3*100 + 2*50)) - scaled_epsilon, 'path has expected length'; } } { my $expolygon = Slic3r::ExPolygon->new([ scale_points [0,0], [50,0], [50,50], [0,50] ]); my $filler = Slic3r::Filler->new_from_type('rectilinear'); $filler->set_bounding_box($expolygon->bounding_box); $filler->set_angle(0); my $surface = Slic3r::Surface->new( surface_type => S_TYPE_TOP, expolygon => $expolygon, ); my $flow = Slic3r::Flow->new( width => 0.69, height => 0.4, nozzle_diameter => 0.50, ); $filler->set_min_spacing($flow->spacing); $filler->set_density(1); foreach my $angle (0, 45) { $surface->expolygon->rotate(Slic3r::Geometry::deg2rad($angle), [0,0]); my $paths = $filler->fill_surface($surface, layer_height => 0.4, density => 0.4); is scalar @$paths, 1, 'one continuous path'; } } { my $test = sub { my ($expolygon, $flow_spacing, $angle, $density) = @_; my $filler = Slic3r::Filler->new_from_type('rectilinear'); $filler->set_bounding_box($expolygon->bounding_box); $filler->set_angle($angle // 0); $filler->set_dont_adjust(0); my $surface = Slic3r::Surface->new( surface_type => S_TYPE_BOTTOM, expolygon => $expolygon, ); my $flow = Slic3r::Flow->new( width => $flow_spacing, height => 0.4, nozzle_diameter => $flow_spacing, ); $filler->set_min_spacing($flow->spacing); my $paths = $filler->fill_surface( $surface, layer_height => $flow->height, density => $density // 1, ); # check whether any part was left uncovered my @grown_paths = map @{Slic3r::Polyline->new(@$_)->grow(scale $filler->spacing/2)}, @$paths; my $uncovered = diff_ex([ @$expolygon ], [ @grown_paths ], 1); # ignore very small dots @$uncovered = grep $_->area > (scale $flow_spacing)**2, @$uncovered; is scalar(@$uncovered), 0, 'solid surface is fully filled'; if (0 && @$uncovered) { require "Slic3r/SVG.pm"; Slic3r::SVG::output( "uncovered.svg", expolygons => [$expolygon], red_expolygons => $uncovered, polylines => $paths, ); exit; } }; my $expolygon = Slic3r::ExPolygon->new([ [6883102, 9598327.01296997], [6883102, 20327272.01297], [3116896, 20327272.01297], [3116896, 9598327.01296997], ]); $test->($expolygon, 0.55); for (1..20) { $expolygon->scale(1.05); $test->($expolygon, 0.55); } $expolygon = Slic3r::ExPolygon->new( [[59515297,5422499],[59531249,5578697],[59695801,6123186],[59965713,6630228],[60328214,7070685],[60773285,7434379],[61274561,7702115],[61819378,7866770],[62390306,7924789],[62958700,7866744],[63503012,7702244],[64007365,7434357],[64449960,7070398],[64809327,6634999],[65082143,6123325],[65245005,5584454],[65266967,5422499],[66267307,5422499],[66269190,8310081],[66275379,17810072],[66277259,20697500],[65267237,20697500],[65245004,20533538],[65082082,19994444],[64811462,19488579],[64450624,19048208],[64012101,18686514],[63503122,18415781],[62959151,18251378],[62453416,18198442],[62390147,18197355],[62200087,18200576],[61813519,18252990],[61274433,18415918],[60768598,18686517],[60327567,19047892],[59963609,19493297],[59695865,19994587],[59531222,20539379],[59515153,20697500],[58502480,20697500],[58502480,5422499]] ); $test->($expolygon, 0.524341649025257, PI/2); $expolygon = Slic3r::ExPolygon->new([ scale_points [0,0], [98,0], [98,10], [0,10] ]); $test->($expolygon, 0.5, 45, 0.99); # non-solid infill } { my $collection = Slic3r::Polyline::Collection->new( Slic3r::Polyline->new([0,15], [0,18], [0,20]), Slic3r::Polyline->new([0,10], [0,8], [0,5]), ); is_deeply [ map $_->[Y], map @$_, @{$collection->chained_path_from(Slic3r::Point->new(0,30), 0)} ], [20, 18, 15, 10, 8, 5], 'chained path'; } { my $collection = Slic3r::Polyline::Collection->new( Slic3r::Polyline->new([4,0], [10,0], [15,0]), Slic3r::Polyline->new([10,5], [15,5], [20,5]), ); is_deeply [ map $_->[X], map @$_, @{$collection->chained_path_from(Slic3r::Point->new(30,0), 0)} ], [reverse 4, 10, 15, 10, 15, 20], 'chained path'; } { my $collection = Slic3r::ExtrusionPath::Collection->new( map Slic3r::ExtrusionPath->new(polyline => $_, role => 0, mm3_per_mm => 1), Slic3r::Polyline->new([0,15], [0,18], [0,20]), Slic3r::Polyline->new([0,10], [0,8], [0,5]), ); is_deeply [ map $_->[Y], map @{$_->polyline}, @{$collection->chained_path_from(Slic3r::Point->new(0,30), 0)} ], [20, 18, 15, 10, 8, 5], 'chained path'; } { my $collection = Slic3r::ExtrusionPath::Collection->new( map Slic3r::ExtrusionPath->new(polyline => $_, role => 0, mm3_per_mm => 1), Slic3r::Polyline->new([15,0], [10,0], [4,0]), Slic3r::Polyline->new([10,5], [15,5], [20,5]), ); is_deeply [ map $_->[X], map @{$_->polyline}, @{$collection->chained_path_from(Slic3r::Point->new(30,0), 0)} ], [reverse 4, 10, 15, 10, 15, 20], 'chained path'; } for my $pattern (qw(rectilinear honeycomb hilbertcurve concentric)) { my $config = Slic3r::Config->new_from_defaults; $config->set('fill_pattern', $pattern); $config->set('external_fill_pattern', $pattern); $config->set('perimeters', 1); $config->set('skirts', 0); $config->set('fill_density', 20); $config->set('layer_height', 0.05); $config->set('perimeter_extruder', 1); $config->set('infill_extruder', 2); my $print = Slic3r::Test::init_print('20mm_cube', config => $config, scale => 2); ok my $gcode = Slic3r::Test::gcode($print), "successful $pattern infill generation"; my $tool = undef; my @perimeter_points = my @infill_points = (); Slic3r::GCode::Reader->new->parse($gcode, sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) { if ($tool == $config->perimeter_extruder-1) { push @perimeter_points, Slic3r::Point->new_scale($args->{X}, $args->{Y}); } elsif ($tool == $config->infill_extruder-1) { push @infill_points, Slic3r::Point->new_scale($args->{X}, $args->{Y}); } } }); my $convex_hull = convex_hull(\@perimeter_points); ok !(defined first { !$convex_hull->contains_point($_) } @infill_points), "infill does not exceed perimeters ($pattern)"; } { my $config = Slic3r::Config->new_from_defaults; $config->set('infill_only_where_needed', 1); $config->set('bottom_solid_layers', 0); $config->set('infill_extruder', 2); $config->set('infill_extrusion_width', 0.5); $config->set('fill_density', 40); $config->set('cooling', 0); # for preventing speeds from being altered $config->set('first_layer_speed', '100%'); # for preventing speeds from being altered my $test = sub { my $print = Slic3r::Test::init_print('pyramid', config => $config); my $tool = undef; my @infill_extrusions = (); # array of polylines Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) { if ($tool == $config->infill_extruder-1) { push @infill_extrusions, Slic3r::Line->new_scale( [ $self->X, $self->Y ], [ $info->{new_X}, $info->{new_Y} ], ); } } }); return 0 if !@infill_extrusions; # prevent calling convex_hull() with no points my $convex_hull = convex_hull([ map $_->pp, map @$_, @infill_extrusions ]); return unscale unscale sum(map $_->area, @{offset([$convex_hull], scale(+$config->infill_extrusion_width/2))}); }; my $tolerance = 5; # mm^2 $config->set('solid_infill_below_area', 0); ok $test->() < $tolerance, 'no infill is generated when using infill_only_where_needed on a pyramid'; $config->set('solid_infill_below_area', 70); ok abs($test->() - $config->solid_infill_below_area) < $tolerance, 'infill is only generated under the forced solid shells'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('perimeters', 1); $config->set('fill_density', 0); $config->set('top_solid_layers', 0); $config->set('bottom_solid_layers', 0); $config->set('solid_infill_below_area', 20000000); $config->set('solid_infill_every_layers', 2); $config->set('perimeter_speed', 99); $config->set('external_perimeter_speed', 99); $config->set('cooling', 0); $config->set('first_layer_speed', '100%'); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my %layers_with_extrusion = (); Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1' && $info->{dist_XY} > 0 && $info->{extruding}) { if (($args->{F} // $self->F) != $config->perimeter_speed*60) { $layers_with_extrusion{$self->Z} = ($args->{F} // $self->F); } } }); ok !%layers_with_extrusion, "solid_infill_below_area and solid_infill_every_layers are ignored when fill_density is 0"; } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('perimeters', 3); $config->set('fill_density', 0); $config->set('layer_height', 0.2); $config->set('first_layer_height', 0.2); $config->set('nozzle_diameter', [0.35]); $config->set('infill_extruder', 2); $config->set('solid_infill_extruder', 2); $config->set('infill_extrusion_width', 0.52); $config->set('solid_infill_extrusion_width', 0.52); $config->set('first_layer_extrusion_width', 0); my $print = Slic3r::Test::init_print('A', config => $config); my %infill = (); # Z => [ Line, Line ... ] my $tool = undef; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) { if ($tool == $config->infill_extruder-1) { my $z = 1 * $self->Z; $infill{$z} ||= []; push @{$infill{$z}}, Slic3r::Line->new_scale( [ $self->X, $self->Y ], [ $info->{new_X}, $info->{new_Y} ], ); } } }); my $grow_d = scale($config->infill_extrusion_width)/2; my $layer0_infill = union([ map @{$_->grow($grow_d)}, @{ $infill{0.2} } ]); my $layer1_infill = union([ map @{$_->grow($grow_d)}, @{ $infill{0.4} } ]); my $diff = diff($layer0_infill, $layer1_infill); $diff = offset2_ex($diff, -$grow_d, +$grow_d); $diff = [ grep { $_->area > 2*(($grow_d*2)**2) } @$diff ]; is scalar(@$diff), 0, 'no missing parts in solid shell when fill_density is 0'; } { # GH: #2697 my $config = Slic3r::Config->new_from_defaults; $config->set('perimeter_extrusion_width', 0.72); $config->set('top_infill_extrusion_width', 0.1); $config->set('infill_extruder', 2); # in order to distinguish infill $config->set('solid_infill_extruder', 2); # in order to distinguish infill my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my %infill = (); # Z => [ Line, Line ... ] my %other = (); # Z => [ Line, Line ... ] my $tool = undef; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) { my $z = 1 * $self->Z; my $line = Slic3r::Line->new_scale( [ $self->X, $self->Y ], [ $info->{new_X}, $info->{new_Y} ], ); if ($tool == $config->infill_extruder-1) { $infill{$z} //= []; push @{$infill{$z}}, $line; } else { $other{$z} //= []; push @{$other{$z}}, $line; } } }); my $top_z = max(keys %infill); my $top_infill_grow_d = scale($config->top_infill_extrusion_width)/2; my $top_infill = union([ map @{$_->grow($top_infill_grow_d)}, @{ $infill{$top_z} } ]); my $perimeters_grow_d = scale($config->perimeter_extrusion_width)/2; my $perimeters = union([ map @{$_->grow($perimeters_grow_d)}, @{ $other{$top_z} } ]); my $covered = union_ex([ @$top_infill, @$perimeters ]); my @holes = map @{$_->holes}, @$covered; ok sum(map unscale unscale $_->area*-1, @holes) < 1, 'no gaps between top solid infill and perimeters'; } __END__ Slic3r-1.3.0/t/flow.t000066400000000000000000000055751327442435500142760ustar00rootroot00000000000000use Test::More tests => 6; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first sum); use Slic3r; use Slic3r::Geometry qw(scale PI); use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 1); $config->set('brim_width', 2); $config->set('perimeters', 3); $config->set('fill_density', 0.4); $config->set('bottom_solid_layers', 1); $config->set('first_layer_extrusion_width', 2); $config->set('first_layer_height', '100%'); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my @E_per_mm = (); Slic3r::GCode::Reader->new->parse(my $gcode = Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($self->Z == $config->layer_height) { # only consider first layer if ($info->{extruding} && $info->{dist_XY} > 0) { push @E_per_mm, $info->{dist_E} / $info->{dist_XY}; } } }); my $E_per_mm_avg = sum(@E_per_mm) / @E_per_mm; # allow some tolerance because solid rectilinear infill might be adjusted/stretched ok !(defined first { abs($_ - $E_per_mm_avg) > 0.015 } @E_per_mm), 'first_layer_extrusion_width applies to everything on first layer'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('bridge_speed', 99); $config->set('bridge_flow_ratio', 1); $config->set('cooling', 0); # to prevent speeds from being altered $config->set('first_layer_speed', '100%'); # to prevent speeds from being altered my $test = sub { my $print = Slic3r::Test::init_print('overhang', config => $config); my @E_per_mm = (); Slic3r::GCode::Reader->new->parse(my $gcode = Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0) { if (($args->{F} // $self->F) == $config->bridge_speed*60) { push @E_per_mm, $info->{dist_E} / $info->{dist_XY}; } } }); my $expected_mm3_per_mm = ($config->nozzle_diameter->[0]**2) * PI/4 * $config->bridge_flow_ratio; my $expected_E_per_mm = $expected_mm3_per_mm / ((($config->filament_diameter->[0]/2)**2)*PI); ok !(defined first { abs($_ - $expected_E_per_mm) > 0.01 } @E_per_mm), 'expected flow when using bridge_flow_ratio = ' . $config->bridge_flow_ratio; }; $config->set('bridge_flow_ratio', 0.5); $test->(); $config->set('bridge_flow_ratio', 2); $test->(); $config->set('extrusion_width', 0.4); $config->set('bridge_flow_ratio', 1); $test->(); $config->set('bridge_flow_ratio', 0.5); $test->(); $config->set('bridge_flow_ratio', 2); $test->(); } __END__ Slic3r-1.3.0/t/gaps.t000066400000000000000000000041571327442435500142540ustar00rootroot00000000000000use Test::More tests => 1; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Flow ':roles'; use Slic3r::Geometry qw(PI scale unscale convex_hull); use Slic3r::Geometry::Clipper qw(); use Slic3r::Surface ':types'; use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('perimeter_speed', 66); $config->set('external_perimeter_speed', 66); $config->set('small_perimeter_speed', 66); $config->set('gap_fill_speed', 99); $config->set('perimeters', 1); $config->set('cooling', 0); # to prevent speeds from being altered $config->set('first_layer_speed', '100%'); # to prevent speeds from being altered $config->set('perimeter_extrusion_width', 0.35); $config->set('first_layer_extrusion_width', 0.35); my $print = Slic3r::Test::init_print('two_hollow_squares', config => $config); my @perimeter_points = (); my $last = ''; # perimeter | gap my $gap_fills_outside_last_perimeters = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0) { my $F = $args->{F} // $self->F; my $point = Slic3r::Point->new_scale($info->{new_X}, $info->{new_Y}); if ($F == $config->perimeter_speed*60) { if ($last eq 'gap') { @perimeter_points = (); } push @perimeter_points, $point; $last = 'perimeter'; } elsif ($F == $config->gap_fill_speed*60) { my $convex_hull = convex_hull(\@perimeter_points); if (!$convex_hull->contains_point($point)) { $gap_fills_outside_last_perimeters++; } $last = 'gap'; } } }); is $gap_fills_outside_last_perimeters, 0, 'gap fills are printed before leaving islands'; } __END__ Slic3r-1.3.0/t/gcode.t000066400000000000000000000245451327442435500144060ustar00rootroot00000000000000use Test::More tests => 27; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Geometry qw(scale convex_hull); use Slic3r::Test; { my $gcodegen = Slic3r::GCode->new(); $gcodegen->set_layer_count(1); $gcodegen->set_origin(Slic3r::Pointf->new(10, 10)); is_deeply $gcodegen->last_pos->arrayref, [scale -10, scale -10], 'last_pos is shifted correctly'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('wipe', [1]); $config->set('retract_layer_change', [0]); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $have_wipe = 0; my @retract_speeds = (); my $extruded_on_this_layer = 0; my $wiping_on_new_layer = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{travel} && $info->{dist_Z}) { # changing layer $extruded_on_this_layer = 0; } elsif ($info->{extruding} && $info->{dist_XY}) { $extruded_on_this_layer = 1; } elsif ($info->{retracting} && $info->{dist_XY} > 0) { $have_wipe = 1; $wiping_on_new_layer = 1 if !$extruded_on_this_layer; my $move_time = $info->{dist_XY} / ($args->{F} // $self->F); push @retract_speeds, abs($info->{dist_E}) / $move_time; } }); ok $have_wipe, "wipe"; ok !defined (first { abs($_ - $config->retract_speed->[0]*60) < 5 } @retract_speeds), 'wipe moves don\'t retract faster than configured speed'; ok !$wiping_on_new_layer, 'no wiping after layer change'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('z_offset', 5); $config->set('start_gcode', ''); my $test = sub { my ($comment) = @_; my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $moves_below_z_offset = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{travel} && exists $args->{Z}) { $moves_below_z_offset++ if $args->{Z} < $config->z_offset; } }); is $moves_below_z_offset, 0, "no Z moves below Z offset ($comment)"; }; $test->("no lift"); $config->set('retract_lift', [3]); $test->("lift < z_offset"); $config->set('retract_lift', [6]); $test->("lift > z_offset"); } { # This tests the following behavior: # - complete objects does not crash # - no hard-coded "E" are generated # - Z moves are correctly generated for both objects # - no travel moves go outside skirt # - temperatures are set correctly my $config = Slic3r::Config->new_from_defaults; $config->set('gcode_comments', 1); $config->set('complete_objects', 1); $config->set('extrusion_axis', 'A'); $config->set('start_gcode', ''); # prevent any default extra Z move $config->set('layer_height', 0.4); $config->set('first_layer_height', 0.4); $config->set('temperature', [200]); $config->set('first_layer_temperature', [210]); my $print = Slic3r::Test::init_print('20mm_cube', config => $config, duplicate => 2); ok my $gcode = Slic3r::Test::gcode($print), "complete_objects"; my @z_moves = (); my @travel_moves = (); # array of scaled points my @extrusions = (); # array of scaled points my @temps = (); Slic3r::GCode::Reader->new->parse($gcode, sub { my ($self, $cmd, $args, $info) = @_; fail 'unexpected E argument' if defined $args->{E}; if (defined $args->{Z}) { push @z_moves, $args->{Z}; } if ($info->{dist_XY}) { if ($info->{extruding} || $args->{A}) { push @extrusions, Slic3r::Point->new_scale($info->{new_X}, $info->{new_Y}); } else { push @travel_moves, Slic3r::Point->new_scale($info->{new_X}, $info->{new_Y}) if @extrusions; # skip initial travel move to first skirt point } } elsif ($cmd eq 'M104' || $cmd eq 'M109') { push @temps, $args->{S} if !@temps || $args->{S} != $temps[-1]; } }); my $layer_count = 20/0.4; # cube is 20mm tall is scalar(@z_moves), 2*$layer_count, 'complete_objects generates the correct number of Z moves'; is_deeply [ @z_moves[0..($layer_count-1)] ], [ @z_moves[$layer_count..$#z_moves] ], 'complete_objects generates the correct Z moves'; my $convex_hull = convex_hull(\@extrusions); ok !(defined first { !$convex_hull->contains_point($_) } @travel_moves), 'all travel moves happen within skirt'; is_deeply \@temps, [210, 200, 210, 200, 0], 'expected temperature changes'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('retract_length', [1000000]); $config->set('use_relative_e_distances', 1); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); Slic3r::Test::gcode($print); ok $print->print->total_used_filament > 0, 'final retraction is not considered in total used filament'; } { my $test = sub { my ($print, $comment) = @_; my @percent = (); my $got_100 = 0; my $extruding_after_100 = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'M73') { push @percent, $args->{P}; $got_100 = 1 if $args->{P} eq '100'; } if ($info->{extruding} && $got_100) { $extruding_after_100 = 1; } }); # the extruder heater is turned off when M73 P100 is reached ok !(defined first { $_ > 100 } @percent), "M73 is never given more than 100% ($comment)"; ok !$extruding_after_100, "no extrusions after M73 P100 ($comment)"; }; { my $config = Slic3r::Config->new_from_defaults; $config->set('gcode_flavor', 'sailfish'); $config->set('raft_layers', 3); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); $test->($print, 'single object'); } { my $config = Slic3r::Config->new_from_defaults; $config->set('gcode_flavor', 'sailfish'); my $print = Slic3r::Test::init_print('20mm_cube', config => $config, duplicate => 2); $test->($print, 'two copies of single object'); } { my $config = Slic3r::Config->new_from_defaults; $config->set('gcode_flavor', 'sailfish'); my $print = Slic3r::Test::init_print(['20mm_cube','20mm_cube'], config => $config); $test->($print, 'two objects'); } { my $config = Slic3r::Config->new_from_defaults; $config->set('gcode_flavor', 'sailfish'); my $print = Slic3r::Test::init_print('20mm_cube', config => $config, scale_xyz => [1,1, 1/(20/$config->layer_height) ]); $test->($print, 'one layer object'); } } { my $config = Slic3r::Config->new_from_defaults; $config->set('start_gcode', 'START:[input_filename]'); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $gcode = Slic3r::Test::gcode($print); like $gcode, qr/START:20mm_cube/, '[input_filename] is also available in custom G-code'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('spiral_vase', 1); my $print = Slic3r::Test::init_print('cube_with_hole', config => $config); my $spiral = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1' && exists $args->{E} && exists $args->{Z}) { $spiral = 1; } }); ok !$spiral, 'spiral vase is correctly disabled on layers with multiple loops'; } { # Tests that the Repetier flavor produces M201 Xnnn Ynnn for resetting # acceleration, also that M204 Snnn syntax is not generated. my $config = Slic3r::Config->new_from_defaults; $config->set('gcode_flavor', 'repetier'); $config->set('default_acceleration', 1337); my $print = Slic3r::Test::init_print('cube_with_hole', config => $config); my $has_accel = 0; my $has_m204 = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'M201' && exists $args->{X} && exists $args->{Y}) { if ($args->{X} == 1337 && $args->{Y} == 1337) { $has_accel = 1; } } if ($cmd eq 'M204' && exists $args->{S}) { $has_m204 = 1; } }); ok $has_accel, 'M201 is generated for repetier firmware.'; ok !$has_m204, 'M204 is not generated for repetier firmware'; } { # Test verifies that if has_heatbed is false, M190/M140 gcodes are not # generated by default even if a bed temperature is set. my $config = Slic3r::Config->new_from_defaults; $config->set('has_heatbed', 0); $config->set('first_layer_bed_temperature', 100); $config->set('bed_temperature', 60); my $had_gcode = 0; my $print = Slic3r::Test::init_print('cube_with_hole', config => $config); Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if (($cmd eq 'M140' && exists $args->{S}) || ($cmd eq 'M190' && exists $args->{S})) { $had_gcode = 1; } }); ok !$had_gcode, 'M190/M140 codes are not generated if has_heatbed = 0'; } { # Test verifies that if has_heatbed is true, M190/M140 gcodes are # generated by default if a bed temperature is set. my $config = Slic3r::Config->new_from_defaults; $config->set('has_heatbed', 1); $config->set('first_layer_bed_temperature', 100); $config->set('bed_temperature', 60); my $had_gcode = 0; my $print = Slic3r::Test::init_print('cube_with_hole', config => $config); Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if (($cmd eq 'M140' && exists $args->{S}) || ($cmd eq 'M190' && exists $args->{S})) { $had_gcode = 1; } }); ok $had_gcode, 'M190/M140 codes are generated if has_heatbed = 1'; } __END__ Slic3r-1.3.0/t/geometry.t000066400000000000000000000247671327442435500151660ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 44; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::Geometry qw(PI polygon_is_convex chained_path_from epsilon scale); { # this test was failing on Windows (GH #1950) my $polygon = Slic3r::Polygon->new( [207802834,-57084522],[196528149,-37556190],[173626821,-25420928],[171285751,-21366123], [118673592,-21366123],[116332562,-25420928],[93431208,-37556191],[82156517,-57084523], [129714478,-84542120],[160244873,-84542120], ); my $point = Slic3r::Point->new(95706562, -57294774); ok $polygon->contains_point($point), 'contains_point'; } #========================================================== my $line1 = [ [5, 15], [30, 15] ]; my $line2 = [ [10, 20], [10, 10] ]; is_deeply Slic3r::Geometry::line_intersection($line1, $line2, 1)->arrayref, [10, 15], 'line_intersection'; #========================================================== $line1 = [ [73.6310778185108/0.0000001, 371.74239268924/0.0000001], [73.6310778185108/0.0000001, 501.74239268924/0.0000001] ]; $line2 = [ [75/0.0000001, 437.9853/0.0000001], [62.7484/0.0000001, 440.4223/0.0000001] ]; isnt Slic3r::Geometry::line_intersection($line1, $line2, 1), undef, 'line_intersection'; #========================================================== { my $polygon = Slic3r::Polygon->new( [45919000, 515273900], [14726100, 461246400], [14726100, 348753500], [33988700, 315389800], [43749700, 343843000], [45422300, 352251500], [52362100, 362637800], [62748400, 369577600], [75000000, 372014700], [87251500, 369577600], [97637800, 362637800], [104577600, 352251500], [107014700, 340000000], [104577600, 327748400], [97637800, 317362100], [87251500, 310422300], [82789200, 309534700], [69846100, 294726100], [254081000, 294726100], [285273900, 348753500], [285273900, 461246400], [254081000, 515273900], ); # this points belongs to $polyline # note: it's actually a vertex, while we should better check an intermediate point my $point = Slic3r::Point->new(104577600, 327748400); local $Slic3r::Geometry::epsilon = 1E-5; is_deeply Slic3r::Geometry::polygon_segment_having_point($polygon, $point)->pp, [ [107014700, 340000000], [104577600, 327748400] ], 'polygon_segment_having_point'; } #========================================================== { my $point = Slic3r::Point->new(736310778.185108, 5017423926.8924); my $line = Slic3r::Line->new([627484000, 3695776000], [750000000, 3720147000]); is Slic3r::Geometry::point_in_segment($point, $line), 0, 'point_in_segment'; } #========================================================== { my $point = Slic3r::Point->new(736310778.185108, 5017423926.8924); my $line = Slic3r::Line->new([627484000, 3695776000], [750000000, 3720147000]); is Slic3r::Geometry::point_in_segment($point, $line), 0, 'point_in_segment'; } #========================================================== my $polygons = [ Slic3r::Polygon->new( # contour, ccw [45919000, 515273900], [14726100, 461246400], [14726100, 348753500], [33988700, 315389800], [43749700, 343843000], [45422300, 352251500], [52362100, 362637800], [62748400, 369577600], [75000000, 372014700], [87251500, 369577600], [97637800, 362637800], [104577600, 352251500], [107014700, 340000000], [104577600, 327748400], [97637800, 317362100], [87251500, 310422300], [82789200, 309534700], [69846100, 294726100], [254081000, 294726100], [285273900, 348753500], [285273900, 461246400], [254081000, 515273900], ), Slic3r::Polygon->new( # hole, cw [75000000, 502014700], [87251500, 499577600], [97637800, 492637800], [104577600, 482251500], [107014700, 470000000], [104577600, 457748400], [97637800, 447362100], [87251500, 440422300], [75000000, 437985300], [62748400, 440422300], [52362100, 447362100], [45422300, 457748400], [42985300, 470000000], [45422300, 482251500], [52362100, 492637800], [62748400, 499577600], ), ]; #========================================================== { my $p1 = [10, 10]; my $p2 = [10, 20]; my $p3 = [10, 30]; my $p4 = [20, 20]; my $p5 = [0, 20]; is Slic3r::Geometry::angle3points($p2, $p3, $p1), PI(), 'angle3points'; is Slic3r::Geometry::angle3points($p2, $p1, $p3), PI(), 'angle3points'; is Slic3r::Geometry::angle3points($p2, $p3, $p4), PI()/2*3, 'angle3points'; is Slic3r::Geometry::angle3points($p2, $p4, $p3), PI()/2, 'angle3points'; is Slic3r::Geometry::angle3points($p2, $p1, $p4), PI()/2, 'angle3points'; is Slic3r::Geometry::angle3points($p2, $p1, $p5), PI()/2*3, 'angle3points'; } { my $p1 = [30, 30]; my $p2 = [20, 20]; my $p3 = [10, 10]; my $p4 = [30, 10]; is Slic3r::Geometry::angle3points($p2, $p1, $p3), PI(), 'angle3points'; is Slic3r::Geometry::angle3points($p2, $p1, $p4), PI()/2*3, 'angle3points'; is Slic3r::Geometry::angle3points($p2, $p1, $p1), 2*PI(), 'angle3points'; } #========================================================== { my $cw_square = [ [0,0], [0,10], [10,10], [10,0] ]; is polygon_is_convex($cw_square), 0, 'cw square is not convex'; is polygon_is_convex([ reverse @$cw_square ]), 1, 'ccw square is convex'; my $convex1 = [ [0,0], [10,0], [10,10], [0,10], [0,6], [4,6], [4,4], [0,4] ]; is polygon_is_convex($convex1), 0, 'concave polygon'; } #========================================================== { my $polyline = Slic3r::Polyline->new([0, 0], [10, 0], [20, 0]); is_deeply [ map $_->pp, @{$polyline->lines} ], [ [ [0, 0], [10, 0] ], [ [10, 0], [20, 0] ], ], 'polyline_lines'; } #========================================================== { my $polygon = Slic3r::Polygon->new([0, 0], [10, 0], [5, 5]); my $result = $polygon->split_at_index(1); is ref($result), 'Slic3r::Polyline', 'split_at_index returns polyline'; is_deeply $result->pp, [ [10, 0], [5, 5], [0, 0], [10, 0] ], 'split_at_index'; } #========================================================== { my $bb = Slic3r::Geometry::BoundingBox->new_from_points([ map Slic3r::Point->new(@$_), [0, 1], [10, 2], [20, 2] ]); $bb->scale(2); is_deeply [ $bb->min_point->pp, $bb->max_point->pp ], [ [0,2], [40,4] ], 'bounding box is scaled correctly'; } #========================================================== { my $line = Slic3r::Line->new([10,10], [20,10]); is $line->grow(5)->[0]->area, Slic3r::Polygon->new([10,5], [20,5], [20,15], [10,15])->area, 'grow line'; } #========================================================== { # if chained_path() works correctly, these points should be joined with no diagonal paths # (thus 26 units long) my @points = map Slic3r::Point->new_scale(@$_), [26,26],[52,26],[0,26],[26,52],[26,0],[0,52],[52,52],[52,0]; my @ordered = @points[@{chained_path_from(\@points, $points[0])}]; ok !(grep { abs($ordered[$_]->distance_to($ordered[$_+1]) - scale 26) > epsilon } 0..$#ordered-1), 'chained_path'; } #========================================================== { my $line = Slic3r::Line->new([0, 0], [20, 0]); is +Slic3r::Point->new(10, 10)->distance_to_line($line), 10, 'distance_to'; is +Slic3r::Point->new(50, 0)->distance_to_line($line), 30, 'distance_to'; is +Slic3r::Point->new(0, 0)->distance_to_line($line), 0, 'distance_to'; is +Slic3r::Point->new(20, 0)->distance_to_line($line), 0, 'distance_to'; is +Slic3r::Point->new(10, 0)->distance_to_line($line), 0, 'distance_to'; } #========================================================== { my $square = Slic3r::Polygon->new_scale( [100,100], [200,100], [200,200], [100,200], ); is scalar(@{$square->concave_points(PI*4/3)}), 0, 'no concave vertices detected in ccw square'; is scalar(@{$square->convex_points(PI*2/3)}), 4, 'four convex vertices detected in ccw square'; $square->make_clockwise; is scalar(@{$square->concave_points(PI*4/3)}), 4, 'fuor concave vertices detected in cw square'; is scalar(@{$square->convex_points(PI*2/3)}), 0, 'no convex vertices detected in cw square'; } { my $square = Slic3r::Polygon->new_scale( [150,100], [200,100], [200,200], [100,200], [100,100], ); is scalar(@{$square->concave_points(PI*4/3)}), 0, 'no concave vertices detected in convex polygon'; is scalar(@{$square->convex_points(PI*2/3)}), 4, 'four convex vertices detected in square'; } { my $square = Slic3r::Polygon->new_scale( [200,200], [100,200], [100,100], [150,100], [200,100], ); is scalar(@{$square->concave_points(PI*4/3)}), 0, 'no concave vertices detected in convex polygon'; is scalar(@{$square->convex_points(PI*2/3)}), 4, 'four convex vertices detected in square'; } { my $triangle = Slic3r::Polygon->new( [16000170,26257364], [714223,461012], [31286371,461008], ); is scalar(@{$triangle->concave_points(PI*4/3)}), 0, 'no concave vertices detected in triangle'; is scalar(@{$triangle->convex_points(PI*2/3)}), 3, 'three convex vertices detected in triangle'; } { my $triangle = Slic3r::Polygon->new( [16000170,26257364], [714223,461012], [20000000,461012], [31286371,461012], ); is scalar(@{$triangle->concave_points(PI*4/3)}), 0, 'no concave vertices detected in triangle having collinear point'; is scalar(@{$triangle->convex_points(PI*2/3)}), 3, 'three convex vertices detected in triangle having collinear point'; } { my $triangle = Slic3r::Polygon->new( [16000170,26257364], [714223,461012], [31286371,461008], ); my $simplified = $triangle->simplify(250000)->[0]; is scalar(@$simplified), 3, 'triangle is never simplified to less than 3 points'; } { # Two concave vertices of this polygon have angle = PI*4/3, so this test fails # if epsilon is not used. my $polygon = Slic3r::Polygon->new( [60246458,14802768],[64477191,12360001],[63727343,11060995],[64086449,10853608],[66393722,14850069],[66034704,15057334],[65284646,13758387],[61053864,16200839],[69200258,30310849],[62172547,42483120],[61137680,41850279],[67799985,30310848],[51399866,1905506],[38092663,1905506],[38092663,692699],[52100125,692699], ); is scalar(@{$polygon->concave_points(PI*4/3)}), 6, 'expected number of concave points'; is scalar(@{$polygon->convex_points(PI*2/3)}), 10, 'expected number of convex points'; } __END__ Slic3r-1.3.0/t/layers.t000066400000000000000000000043071327442435500146160ustar00rootroot00000000000000use Test::More tests => 5; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Test qw(_eq); { my $config = Slic3r::Config->new_from_defaults; my $test = sub { my ($conf) = @_; $conf ||= $config; my $print = Slic3r::Test::init_print('20mm_cube', config => $conf); my @z = (); my @increments = (); Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{dist_Z}) { push @z, 1*$args->{Z}; push @increments, $info->{dist_Z}; } }); fail 'wrong first layer height' if $z[0] ne $config->get_value('first_layer_height') + $config->z_offset; fail 'wrong second layer height' if $z[1] ne $config->get_value('first_layer_height') + $config->get_value('layer_height') + $config->z_offset; fail 'wrong layer height' if first { !_eq($_, $config->layer_height) } @increments[1..$#increments]; 1; }; $config->set('start_gcode', ''); # to avoid dealing with the nozzle lift in start G-code $config->set('layer_height', 0.3); $config->set('first_layer_height', 0.2); ok $test->(), "absolute first layer height"; $config->set('first_layer_height', '60%'); ok $test->(), "relative first layer height"; $config->set('z_offset', 0.9); ok $test->(), "positive Z offset"; $config->set('z_offset', -0.8); ok $test->(), "negative Z offset"; } { my $config = Slic3r::Config->new; $config->set('fill_density', 0); # just for making the test faster my $print = Slic3r::Test::init_print('20mm_cube', config => $config, scale => 2); my @z = (); Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{dist_Z}) { push @z, 1*$args->{Z}; } }); ok $z[-1] > 20*1.8 && $z[-1] < 20*2.2, 'resulting G-code has reasonable height'; } __END__ Slic3r-1.3.0/t/loops.t000066400000000000000000000026141327442435500144520ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 4; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::Geometry qw(Z epsilon scale); use Slic3r::Test; { # We want to check what happens when three concentric loops happen # to be at the same height, the two external ones being ccw and the other being # a hole, thus cw. So we create three cubes, centered around origin, the internal # one having reversed normals. my $mesh1 = Slic3r::Test::mesh('20mm_cube'); # center around origin my $bb = $mesh1->bounding_box; $mesh1->translate( -($bb->x_min + $bb->size->x/2), -($bb->y_min + $bb->size->y/2), #// -($bb->z_min + $bb->size->z/2), ); my $mesh2 = $mesh1->clone; $mesh2->scale(1.2); my $mesh3 = $mesh2->clone; $mesh3->scale(1.2); $mesh1->reverse_normals; ok $mesh1->volume < 0, 'reverse_normals'; my $all_meshes = Slic3r::TriangleMesh->new; $all_meshes->merge($_) for $mesh1, $mesh2, $mesh3; my $loops = $all_meshes->slice_at(Z, 0); is scalar(@$loops), 1, 'one expolygon returned'; is scalar(@{$loops->[0]->holes}), 1, 'expolygon has one hole'; ok abs(-$loops->[0]->holes->[0]->area - scale($bb->size->x)*scale($bb->size->y)) < epsilon, #)) 'hole has expected size'; } __END__ Slic3r-1.3.0/t/multi.t000066400000000000000000000220021327442435500144410ustar00rootroot00000000000000use Test::More tests => 13; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Geometry qw(scale convex_hull); use Slic3r::Geometry::Clipper qw(offset); use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; $config->set('layer_height', 0.3); $config->set('first_layer_height', 0.35); $config->set('raft_layers', 2); $config->set('infill_extruder', 2); $config->set('solid_infill_extruder', 3); $config->set('support_material_extruder', 4); $config->set('ooze_prevention', 1); $config->set('extruder_offset', [ [0,0], [20,0], [0,20], [20,20] ]); $config->set('temperature', [200, 180, 170, 160]); $config->set('first_layer_temperature', [206, 186, 166, 156]); $config->set('standby_temperature_delta', -5); $config->set('toolchange_gcode', ';toolchange'); # test that it doesn't crash when this is supplied $config->set('skirts', 2); # test correct temperatures are applied to skirt as well my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $tool = undef; my @tool_temp = (0,0,0,0); my @toolchange_points = (); my @extrusion_points = (); Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { # ignore initial toolchange if (defined $tool) { my $expected_temp = $self->Z == ($config->get_value('first_layer_height') + $config->z_offset) ? $config->first_layer_temperature->[$tool] : $config->temperature->[$tool]; die 'standby temperature was not set before toolchange' if $tool_temp[$tool] != $expected_temp + $config->standby_temperature_delta; push @toolchange_points, my $point = Slic3r::Point->new_scale($self->X, $self->Y); } $tool = $1; } elsif ($cmd eq 'M104' || $cmd eq 'M109') { my $t = $args->{T} // $tool; if ($tool_temp[$t] == 0) { fail 'initial temperature is not equal to first layer temperature + standby delta' unless $args->{S} == $config->first_layer_temperature->[$t] + $config->standby_temperature_delta; } $tool_temp[$t] = $args->{S}; } elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) { push @extrusion_points, my $point = Slic3r::Point->new_scale($args->{X}, $args->{Y}); $point->translate(map +scale($_), @{ $config->extruder_offset->[$tool] }); # check temperature (we don't do it at M104/M109 because that may be # issued before layer change) if ($self->Z == $config->first_layer_height) { fail 'unexpected temperature in first layer' unless $tool_temp[$tool] == ($config->first_layer_temperature->[$tool] + $config->standby_temperature_delta) || $tool_temp[$tool] == $config->first_layer_temperature->[$tool]; } else { fail 'unexpected temperature' unless $tool_temp[$tool] == ($config->temperature->[$tool] + $config->standby_temperature_delta) || $tool_temp[$tool] == $config->temperature->[$tool]; } } }); my $convex_hull = convex_hull(\@extrusion_points); my @t = (); foreach my $point (@toolchange_points) { foreach my $offset (@{$config->extruder_offset}) { push @t, my $p = $point->clone; $p->translate(map +scale($_), @$offset); } } ok !(defined first { $convex_hull->contains_point($_) } @t), 'all nozzles are outside skirt at toolchange'; if (0) { require "Slic3r/SVG.pm"; Slic3r::SVG::output( "ooze_prevention_test.svg", no_arrows => 1, polygons => [$convex_hull], red_points => \@t, points => \@toolchange_points, ); } # offset the skirt by the maximum displacement between extruders plus a safety extra margin my $delta = scale(20 * sqrt(2) + 1); my $outer_convex_hull = offset([$convex_hull], +$delta)->[0]; ok !(defined first { !$outer_convex_hull->contains_point($_) } @toolchange_points), 'all toolchanges happen within expected area'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('support_material_extruder', 3); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); ok Slic3r::Test::gcode($print), 'no errors when using non-consecutive extruders'; } { my $config = Slic3r::Config->new; $config->set('extruder', 2); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); like Slic3r::Test::gcode($print), qr/ T1/, 'extruder shortcut'; } { my $config = Slic3r::Config->new; $config->set('perimeter_extruder', 2); $config->set('infill_extruder', 2); $config->set('support_material_extruder', 2); $config->set('support_material_interface_extruder', 2); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); ok Slic3r::Test::gcode($print), 'no errors when using multiple skirts with a single, non-zero, extruder'; } { my $model = stacked_cubes(); my $lower_config = $model->get_material('lower')->config; my $upper_config = $model->get_material('upper')->config; $lower_config->set('extruder', 1); $lower_config->set('bottom_solid_layers', 0); $lower_config->set('top_solid_layers', 1); $upper_config->set('extruder', 2); $upper_config->set('bottom_solid_layers', 1); $upper_config->set('top_solid_layers', 0); my $config = Slic3r::Config->new_from_defaults; $config->set('fill_density', 0); $config->set('solid_infill_speed', 99); $config->set('top_solid_infill_speed', 99); $config->set('cooling', 0); # for preventing speeds from being altered $config->set('first_layer_speed', '100%'); # for preventing speeds from being altered my $test = sub { my $print = Slic3r::Test::init_print($model, config => $config); my $tool = undef; my %T0_shells = my %T1_shells = (); # Z => 1 Slic3r::GCode::Reader->new->parse(my $gcode = Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) { if (($args->{F} // $self->F) == $config->solid_infill_speed*60) { if ($tool == 0) { $T0_shells{$self->Z} = 1; } elsif ($tool == 1) { $T1_shells{$self->Z} = 1; } } } }); return [ sort keys %T0_shells ], [ sort keys %T1_shells ]; }; { my ($t0, $t1) = $test->(); is scalar(@$t0), 0, 'no interface shells'; is scalar(@$t1), 0, 'no interface shells'; } { $config->set('interface_shells', 1); my ($t0, $t1) = $test->(); is scalar(@$t0), $lower_config->top_solid_layers, 'top interface shells'; is scalar(@$t1), $upper_config->bottom_solid_layers, 'bottom interface shells'; } } { my $model = stacked_cubes(); my $object = $model->objects->[0]; my $config = Slic3r::Config->new_from_defaults; $config->set('layer_height', 0.4); $config->set('first_layer_height', '100%'); $config->set('skirts', 0); my $print = Slic3r::Test::init_print($model, config => $config); is $object->volumes->[0]->config->extruder, 1, 'auto_assign_extruders() assigned correct extruder to first volume'; is $object->volumes->[1]->config->extruder, 2, 'auto_assign_extruders() assigned correct extruder to second volume'; my $tool = undef; my %T0 = my %T1 = (); # Z => 1 Slic3r::GCode::Reader->new->parse(my $gcode = Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) { if ($tool == 0) { $T0{$self->Z} = 1; } elsif ($tool == 1) { $T1{$self->Z} = 1; } } }); ok !(defined first { $_ > 20 } keys %T0), 'T0 is never used for upper object'; ok !(defined first { $_ < 20 } keys %T1), 'T1 is never used for lower object'; } sub stacked_cubes { my $model = Slic3r::Model->new; my $object = $model->add_object; $object->add_volume(mesh => Slic3r::Test::mesh('20mm_cube'), material_id => 'lower'); $object->add_volume(mesh => Slic3r::Test::mesh('20mm_cube', translate => [0,0,20]), material_id => 'upper'); $object->add_instance(offset => Slic3r::Pointf->new(0,0)); return $model; } __END__ Slic3r-1.3.0/t/perimeters.t000066400000000000000000000621251327442435500155000ustar00rootroot00000000000000use Test::More tests => 63; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r::ExtrusionLoop ':roles'; use Slic3r::ExtrusionPath ':roles'; use List::Util qw(first); use Slic3r; use Slic3r::Flow ':roles'; use Slic3r::Geometry qw(PI scale unscale); use Slic3r::Geometry::Clipper qw(union_ex diff union offset); use Slic3r::Surface ':types'; use Slic3r::Test; { my $flow = Slic3r::Flow->new( width => 1, height => 1, nozzle_diameter => 1, ); my $config = Slic3r::Config->new; my $test = sub { my ($expolygons, %expected) = @_; my $slices = Slic3r::Surface::Collection->new; $slices->append(Slic3r::Surface->new( surface_type => S_TYPE_INTERNAL, expolygon => $_, )) for @$expolygons; my ($region_config, $object_config, $print_config, $loops, $gap_fill, $fill_surfaces); my $g = Slic3r::Layer::PerimeterGenerator->new( # input: $slices, 1, # layer height $flow, ($region_config = Slic3r::Config::PrintRegion->new), ($object_config = Slic3r::Config::PrintObject->new), ($print_config = Slic3r::Config::Print->new), # output: ($loops = Slic3r::ExtrusionPath::Collection->new), ($gap_fill = Slic3r::ExtrusionPath::Collection->new), ($fill_surfaces = Slic3r::Surface::Collection->new), ); $g->config->apply_dynamic($config); $g->process; is scalar(@$loops), scalar(@$expolygons), 'expected number of collections'; ok !defined(first { !$_->isa('Slic3r::ExtrusionPath::Collection') } @$loops), 'everything is returned as collections'; my $flattened_loops = $loops->flatten; my @loops = @$flattened_loops; is scalar(@loops), $expected{total}, 'expected number of loops'; is scalar(grep $_->role == EXTR_ROLE_EXTERNAL_PERIMETER, map @$_, @loops), $expected{external}, 'expected number of external loops'; is_deeply [ map { ($_->role == EXTR_ROLE_EXTERNAL_PERIMETER) || 0 } map @$_, @loops ], $expected{ext_order}, 'expected external order'; is scalar(grep $_->role == EXTRL_ROLE_CONTOUR_INTERNAL_PERIMETER, @loops), $expected{cinternal}, 'expected number of internal contour loops'; is scalar(grep $_->polygon->is_counter_clockwise, @loops), $expected{ccw}, 'expected number of ccw loops'; is_deeply [ map $_->polygon->is_counter_clockwise, @loops ], $expected{ccw_order}, 'expected ccw/cw order'; if ($expected{nesting}) { foreach my $nesting (@{ $expected{nesting} }) { for my $i (1..$#$nesting) { ok $loops[$nesting->[$i-1]]->polygon->contains_point($loops[$nesting->[$i]]->first_point), 'expected nesting order'; } } } }; $config->set('perimeters', 3); $test->( [ Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([0,0], [100,0], [100,100], [0,100]), ), ], total => 3, external => 1, ext_order => [0,0,1], cinternal => 1, ccw => 3, ccw_order => [1,1,1], nesting => [ [2,1,0] ], ); $test->( [ Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([0,0], [100,0], [100,100], [0,100]), Slic3r::Polygon->new_scale([40,40], [40,60], [60,60], [60,40]), ), ], total => 6, external => 2, ext_order => [0,0,1,0,0,1], cinternal => 1, ccw => 3, ccw_order => [0,0,0,1,1,1], nesting => [ [5,4,3,0,1,2] ], ); $test->( [ Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([0,0], [200,0], [200,200], [0,200]), Slic3r::Polygon->new_scale([20,20], [20,180], [180,180], [180,20]), ), # nested: Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([50,50], [150,50], [150,150], [50,150]), Slic3r::Polygon->new_scale([80,80], [80,120], [120,120], [120,80]), ), ], total => 4*3, external => 4, ext_order => [0,0,1,0,0,1,0,0,1,0,0,1], cinternal => 2, ccw => 2*3, ccw_order => [0,0,0,1,1,1,0,0,0,1,1,1], ); $config->set('perimeters', 2); $test->( [ Slic3r::ExPolygon->new( Slic3r::Polygon->new_scale([0,0], [50,0], [50,50], [0,50]), Slic3r::Polygon->new_scale([7.5,7.5], [7.5,12.5], [12.5,12.5], [12.5,7.5]), Slic3r::Polygon->new_scale([7.5,17.5], [7.5,22.5], [12.5,22.5], [12.5,17.5]), Slic3r::Polygon->new_scale([7.5,27.5], [7.5,32.5], [12.5,32.5], [12.5,27.5]), Slic3r::Polygon->new_scale([7.5,37.5], [7.5,42.5], [12.5,42.5], [12.5,37.5]), Slic3r::Polygon->new_scale([17.5,7.5], [17.5,12.5], [22.5,12.5], [22.5,7.5]), ), ], total => 12, external => 6, ext_order => [0,1,0,1,0,1,0,1,0,1,0,1], cinternal => 1, ccw => 2, ccw_order => [0,0,0,0,0,0,0,0,0,0,1,1], nesting => [ [0,1],[2,3],[4,5],[6,7],[8,9] ], ); } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('fill_density', 0); $config->set('perimeters', 3); $config->set('top_solid_layers', 0); $config->set('bottom_solid_layers', 0); $config->set('cooling', 0); # to prevent speeds from being altered $config->set('first_layer_speed', '100%'); # to prevent speeds from being altered { my $print = Slic3r::Test::init_print('overhang', config => $config); my $has_cw_loops = 0; my $cur_loop; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0) { $cur_loop ||= [ [$self->X, $self->Y] ]; push @$cur_loop, [ @$info{qw(new_X new_Y)} ]; } else { if ($cur_loop) { $has_cw_loops = 1 if Slic3r::Polygon->new(@$cur_loop)->is_clockwise; $cur_loop = undef; } } }); ok !$has_cw_loops, 'all perimeters extruded ccw'; } foreach my $model (qw(cube_with_hole cube_with_concave_hole)) { $config->set('external_perimeter_speed', 68); my $print = Slic3r::Test::init_print( $model, config => $config, duplicate => 2, # we test two copies to make sure ExtrusionLoop objects are not modified in-place (the second object would not detect cw loops and thus would calculate wrong inwards moves) ); my $has_cw_loops = my $has_outwards_move = my $starts_on_convex_point = 0; my $cur_loop; my %external_loops = (); # print_z => count of external loops Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0) { $cur_loop ||= [ [$self->X, $self->Y] ]; push @$cur_loop, [ @$info{qw(new_X new_Y)} ]; } else { if ($cur_loop) { $has_cw_loops = 1 if Slic3r::Polygon->new_scale(@$cur_loop)->is_clockwise; if ($self->F == $config->external_perimeter_speed*60) { my $move_dest = Slic3r::Point->new_scale(@$info{qw(new_X new_Y)}); # reset counter for second object $external_loops{$self->Z} = 0 if defined($external_loops{$self->Z}) && $external_loops{$self->Z} == 2; $external_loops{$self->Z}++; my $is_contour = $external_loops{$self->Z} == 2; my $is_hole = $external_loops{$self->Z} == 1; my $loop = Slic3r::Polygon->new_scale(@$cur_loop); my $loop_contains_point = $loop->contains_point($move_dest); $has_outwards_move = 1 if (!$loop_contains_point && $is_contour) # contour should include destination || ($loop_contains_point && $is_hole); # hole should not if ($model eq 'cube_with_concave_hole') { # check that loop starts at a concave vertex my $ccw_angle = $loop->first_point->ccw_angle(@$loop[-2,1]); my $convex = ($ccw_angle > PI); # whether the angle on the *right* side is convex $starts_on_convex_point = 1 if ($convex && $is_contour) || (!$convex && $is_hole); } } $cur_loop = undef; } } }); ok !$has_cw_loops, 'all perimeters extruded ccw'; ok !$has_outwards_move, 'move inwards after completing external loop'; ok !$starts_on_convex_point, 'loops start on concave point if any'; } { $config->set('perimeters', 1); $config->set('perimeter_speed', 77); $config->set('external_perimeter_speed', 66); $config->set('bridge_speed', 99); $config->set('cooling', 1); $config->set('fan_below_layer_time', 0); $config->set('slowdown_below_layer_time', 0); $config->set('bridge_fan_speed', 100); $config->set('bridge_flow_ratio', 33); # arbitrary value $config->set('overhangs', 1); my $print = Slic3r::Test::init_print('overhang', config => $config); my %layer_speeds = (); # print Z => [ speeds ] my $fan_speed = 0; my $bridge_mm_per_mm = ($config->nozzle_diameter->[0]**2) / ($config->filament_diameter->[0]**2) * $config->bridge_flow_ratio; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; $fan_speed = 0 if $cmd eq 'M107'; $fan_speed = $args->{S} if $cmd eq 'M106'; if ($info->{extruding} && $info->{dist_XY} > 0) { $layer_speeds{$self->Z} ||= {}; $layer_speeds{$self->Z}{my $feedrate = $args->{F} // $self->F} = 1; fail 'wrong speed found' if $feedrate != $config->perimeter_speed*60 && $feedrate != $config->external_perimeter_speed*60 && $feedrate != $config->bridge_speed*60; if ($feedrate == $config->bridge_speed*60) { fail 'printing overhang but fan is not enabled or running at wrong speed' if $fan_speed != 255; my $mm_per_mm = $info->{dist_E} / $info->{dist_XY}; fail 'wrong bridge flow' if abs($mm_per_mm - $bridge_mm_per_mm) > 0.01; } else { fail 'fan is running when not supposed to' if $fan_speed > 0; } } }); is scalar(grep { keys %$_ > 1 } values %layer_speeds), 1, 'only overhang layer has more than one speed'; } } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('perimeters', 3); $config->set('layer_height', 0.4); $config->set('first_layer_height', 0.35); $config->set('extra_perimeters', 1); $config->set('cooling', 0); # to prevent speeds from being altered $config->set('first_layer_speed', '100%'); # to prevent speeds from being altered $config->set('perimeter_speed', 99); $config->set('external_perimeter_speed', 99); $config->set('small_perimeter_speed', 99); $config->set('thin_walls', 0); my $print = Slic3r::Test::init_print('ipadstand', config => $config); my %perimeters = (); # z => number of loops my $in_loop = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0 && ($args->{F} // $self->F) == $config->perimeter_speed*60) { $perimeters{$self->Z}++ if !$in_loop; $in_loop = 1; } else { $in_loop = 0; } }); ok !(grep { $_ % $config->perimeters } values %perimeters), 'no superfluous extra perimeters'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('nozzle_diameter', [0.4]); $config->set('perimeters', 2); $config->set('perimeter_extrusion_width', 0.4); $config->set('external_perimeter_extrusion_width', 0.4); $config->set('infill_extrusion_width', 0.53); $config->set('solid_infill_extrusion_width', 0.53); # we just need a pre-filled Print object my $print = Slic3r::Test::init_print('20mm_cube', config => $config); # override a layer's slices my $expolygon = Slic3r::ExPolygon->new([[-71974463,-139999376],[-71731792,-139987456],[-71706544,-139985616],[-71682119,-139982639],[-71441248,-139946912],[-71417487,-139942895],[-71379384,-139933984],[-71141800,-139874480],[-71105247,-139862895],[-70873544,-139779984],[-70838592,-139765856],[-70614943,-139660064],[-70581783,-139643567],[-70368368,-139515680],[-70323751,-139487872],[-70122160,-139338352],[-70082399,-139306639],[-69894800,-139136624],[-69878679,-139121327],[-69707992,-138933008],[-69668575,-138887343],[-69518775,-138685359],[-69484336,-138631632],[-69356423,-138418207],[-69250040,-138193296],[-69220920,-138128976],[-69137992,-137897168],[-69126095,-137860255],[-69066568,-137622608],[-69057104,-137582511],[-69053079,-137558751],[-69017352,-137317872],[-69014392,-137293456],[-69012543,-137268207],[-68999369,-137000000],[-63999999,-137000000],[-63705947,-136985551],[-63654984,-136977984],[-63414731,-136942351],[-63364756,-136929840],[-63129151,-136870815],[-62851950,-136771631],[-62585807,-136645743],[-62377483,-136520895],[-62333291,-136494415],[-62291908,-136463728],[-62096819,-136319023],[-62058644,-136284432],[-61878676,-136121328],[-61680968,-135903184],[-61650275,-135861807],[-61505591,-135666719],[-61354239,-135414191],[-61332211,-135367615],[-61228359,-135148063],[-61129179,-134870847],[-61057639,-134585262],[-61014451,-134294047],[-61000000,-134000000],[-61000000,-107999999],[-61014451,-107705944],[-61057639,-107414736],[-61129179,-107129152],[-61228359,-106851953],[-61354239,-106585808],[-61505591,-106333288],[-61680967,-106096816],[-61878675,-105878680],[-62096820,-105680967],[-62138204,-105650279],[-62333292,-105505591],[-62585808,-105354239],[-62632384,-105332207],[-62851951,-105228360],[-62900463,-105211008],[-63129152,-105129183],[-63414731,-105057640],[-63705947,-105014448],[-63999999,-105000000],[-68999369,-105000000],[-69012543,-104731792],[-69014392,-104706544],[-69017352,-104682119],[-69053079,-104441248],[-69057104,-104417487],[-69066008,-104379383],[-69125528,-104141799],[-69137111,-104105248],[-69220007,-103873544],[-69234136,-103838591],[-69339920,-103614943],[-69356415,-103581784],[-69484328,-103368367],[-69512143,-103323752],[-69661647,-103122160],[-69693352,-103082399],[-69863383,-102894800],[-69878680,-102878679],[-70066999,-102707992],[-70112656,-102668576],[-70314648,-102518775],[-70368367,-102484336],[-70581783,-102356424],[-70806711,-102250040],[-70871040,-102220919],[-71102823,-102137992],[-71139752,-102126095],[-71377383,-102066568],[-71417487,-102057104],[-71441248,-102053079],[-71682119,-102017352],[-71706535,-102014392],[-71731784,-102012543],[-71974456,-102000624],[-71999999,-102000000],[-104000000,-102000000],[-104025536,-102000624],[-104268207,-102012543],[-104293455,-102014392],[-104317880,-102017352],[-104558751,-102053079],[-104582512,-102057104],[-104620616,-102066008],[-104858200,-102125528],[-104894751,-102137111],[-105126455,-102220007],[-105161408,-102234136],[-105385056,-102339920],[-105418215,-102356415],[-105631632,-102484328],[-105676247,-102512143],[-105877839,-102661647],[-105917600,-102693352],[-106105199,-102863383],[-106121320,-102878680],[-106292007,-103066999],[-106331424,-103112656],[-106481224,-103314648],[-106515663,-103368367],[-106643575,-103581783],[-106749959,-103806711],[-106779080,-103871040],[-106862007,-104102823],[-106873904,-104139752],[-106933431,-104377383],[-106942896,-104417487],[-106946920,-104441248],[-106982648,-104682119],[-106985607,-104706535],[-106987456,-104731784],[-107000630,-105000000],[-112000000,-105000000],[-112294056,-105014448],[-112585264,-105057640],[-112870848,-105129184],[-112919359,-105146535],[-113148048,-105228360],[-113194624,-105250392],[-113414191,-105354239],[-113666711,-105505591],[-113708095,-105536279],[-113903183,-105680967],[-114121320,-105878679],[-114319032,-106096816],[-114349720,-106138200],[-114494408,-106333288],[-114645760,-106585808],[-114667792,-106632384],[-114771640,-106851952],[-114788991,-106900463],[-114870815,-107129151],[-114942359,-107414735],[-114985551,-107705943],[-115000000,-107999999],[-115000000,-134000000],[-114985551,-134294048],[-114942359,-134585263],[-114870816,-134870847],[-114853464,-134919359],[-114771639,-135148064],[-114645759,-135414192],[-114494407,-135666720],[-114319031,-135903184],[-114121320,-136121327],[-114083144,-136155919],[-113903184,-136319023],[-113861799,-136349712],[-113666711,-136494416],[-113458383,-136619264],[-113414192,-136645743],[-113148049,-136771631],[-112870848,-136870815],[-112820872,-136883327],[-112585264,-136942351],[-112534303,-136949920],[-112294056,-136985551],[-112000000,-137000000],[-107000630,-137000000],[-106987456,-137268207],[-106985608,-137293440],[-106982647,-137317872],[-106946920,-137558751],[-106942896,-137582511],[-106933991,-137620624],[-106874471,-137858208],[-106862888,-137894751],[-106779992,-138126463],[-106765863,-138161424],[-106660080,-138385055],[-106643584,-138418223],[-106515671,-138631648],[-106487855,-138676256],[-106338352,-138877839],[-106306647,-138917600],[-106136616,-139105199],[-106121320,-139121328],[-105933000,-139291999],[-105887344,-139331407],[-105685351,-139481232],[-105631632,-139515663],[-105418216,-139643567],[-105193288,-139749951],[-105128959,-139779072],[-104897175,-139862016],[-104860247,-139873904],[-104622616,-139933423],[-104582511,-139942896],[-104558751,-139946912],[-104317880,-139982656],[-104293463,-139985616],[-104268216,-139987456],[-104025544,-139999376],[-104000000,-140000000],[-71999999,-140000000]],[[-105000000,-138000000],[-105000000,-104000000],[-71000000,-104000000],[-71000000,-138000000]],[[-69000000,-132000000],[-69000000,-110000000],[-64991180,-110000000],[-64991180,-132000000]],[[-111008824,-132000000],[-111008824,-110000000],[-107000000,-110000000],[-107000000,-132000000]]); my $object = $print->print->objects->[0]; $object->slice; my $layer = $object->get_layer(1); my $layerm = $layer->regions->[0]; $layerm->slices->clear; $layerm->slices->append(Slic3r::Surface->new(surface_type => S_TYPE_INTERNAL, expolygon => $expolygon)); # make perimeters $layer->make_perimeters; # compute the covered area my $pflow = $layerm->flow(FLOW_ROLE_PERIMETER); my $iflow = $layerm->flow(FLOW_ROLE_INFILL); my $covered_by_perimeters = union_ex([ (map @{$_->polygon->split_at_first_point->grow($pflow->scaled_width/2)}, map @$_, @{$layerm->perimeters}), ]); my $covered_by_infill = union_ex([ (map $_->p, @{$layerm->fill_surfaces}), (map @{$_->polyline->grow($iflow->scaled_width/2)}, @{$layerm->thin_fills}), ]); # compute the non covered area my $non_covered = diff( [ map @{$_->expolygon}, @{$layerm->slices} ], [ map @$_, (@$covered_by_perimeters, @$covered_by_infill) ], ); if (0) { printf "max non covered = %f\n", List::Util::max(map unscale unscale $_->area, @$non_covered); require "Slic3r/SVG.pm"; Slic3r::SVG::output( "gaps.svg", expolygons => [ map $_->expolygon, @{$layerm->slices} ], red_expolygons => union_ex([ map @$_, (@$covered_by_perimeters, @$covered_by_infill) ]), green_expolygons => union_ex($non_covered), no_arrows => 1, polylines => [ map $_->polygon->split_at_first_point, map @$_, @{$layerm->perimeters}, ], ); } ok !(defined first { $_->area > ($iflow->scaled_width**2) } @$non_covered), 'no gap between perimeters and infill'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('perimeters', 3); $config->set('layer_height', 0.4); $config->set('bridge_speed', 99); $config->set('fill_density', 0); # to prevent bridging over sparse infill $config->set('overhangs', 1); $config->set('cooling', 0); # to prevent speeds from being altered $config->set('first_layer_speed', '100%'); # to prevent speeds from being altered my $test = sub { my ($print) = @_; my %z_with_bridges = (); # z => 1 Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0) { $z_with_bridges{$self->Z} = 1 if ($args->{F} // $self->F) == $config->bridge_speed*60; } }); return scalar keys %z_with_bridges; }; is $test->(Slic3r::Test::init_print('V', config => $config)), 1, 'no overhangs printed with bridge speed'; # except for the first internal solid layers above void ok $test->(Slic3r::Test::init_print('V', config => $config, scale_xyz => [3,1,1])) > 1, 'overhangs printed with bridge speed'; $config->set('bottom_solid_layers', 0); $config->set('top_solid_layers', 0); my $test2 = sub { my ($print) = @_; my $num_bridges = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0) { $num_bridges++ if ($args->{F} // $self->F) == $config->bridge_speed*60; } }); return $num_bridges; }; is $test2->(Slic3r::Test::init_print('overhang', config => $config)), $config->perimeters*3, 'expected number of segments use bridge speed (overhang)'; is $test2->(Slic3r::Test::init_print('bridge', config => $config)), $config->perimeters*2, 'expected number of segments use bridge speed (bridge)'; is $test2->(Slic3r::Test::init_print('bridge_with_hole', config => $config)), $config->perimeters*4, 'expected number of segments use bridge speed (bridge with hole)'; # scale the test model so that the hole perimeter length is smaller than small perimeter # threshold (~40mm). check that we still use overhang settings regardless of it being small is $test2->(Slic3r::Test::init_print('bridge_with_hole', config => $config, scale_xyz => [0.3,0.5,1])), $config->perimeters*4, 'expected number of segments use bridge speed (bridge with small hole)'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('seam_position', 'random'); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); ok Slic3r::Test::gcode($print), 'successful generation of G-code with seam_position = random'; } { my $test = sub { my ($model_name) = @_; my $config = Slic3r::Config->new_from_defaults; $config->set('seam_position', 'aligned'); $config->set('skirts', 0); $config->set('perimeters', 1); $config->set('fill_density', 0); $config->set('top_solid_layers', 0); $config->set('bottom_solid_layers', 0); $config->set('retract_layer_change', [0]); my $was_extruding = 0; my @seam_points = (); my $print = Slic3r::Test::init_print($model_name, config => $config); Slic3r::GCode::Reader->new->parse(my $gcode = Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding}) { if (!$was_extruding) { push @seam_points, Slic3r::Point->new_scale($self->X, $self->Y); } $was_extruding = 1; } else { $was_extruding = 0; } }); my @dist = map unscale($_), map $seam_points[$_]->distance_to($seam_points[$_+1]), 0..($#seam_points-1); ok !(defined first { $_ > 3 } @dist), 'seam is aligned'; }; $test->('20mm_cube'); $test->('small_dorito'); } __END__ Slic3r-1.3.0/t/polyclip.t000066400000000000000000000145641327442435500151600ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan tests => 18; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::Geometry::Clipper qw(intersection_pl); #========================================================== is Slic3r::Geometry::point_in_segment(Slic3r::Point->new(10, 10), Slic3r::Line->new([5, 10], [20, 10])), 1, 'point in horizontal segment'; is Slic3r::Geometry::point_in_segment(Slic3r::Point->new(30, 10), Slic3r::Line->new([5, 10], [20, 10])), 0, 'point not in horizontal segment'; is Slic3r::Geometry::point_in_segment(Slic3r::Point->new(10, 10), Slic3r::Line->new([10, 5], [10, 20])), 1, 'point in vertical segment'; is Slic3r::Geometry::point_in_segment(Slic3r::Point->new(10, 30), Slic3r::Line->new([10, 5], [10, 20])), 0, 'point not in vertical segment'; is Slic3r::Geometry::point_in_segment(Slic3r::Point->new(15, 15), Slic3r::Line->new([10, 10], [20, 20])), 1, 'point in diagonal segment'; is Slic3r::Geometry::point_in_segment(Slic3r::Point->new(20, 15), Slic3r::Line->new([10, 10], [20, 20])), 0, 'point not in diagonal segment'; #========================================================== my $square = Slic3r::Polygon->new( # ccw [100, 100], [200, 100], [200, 200], [100, 200], ); #========================================================== { my $hole_in_square = [ # cw [140, 140], [140, 160], [160, 160], [160, 140], ]; my $expolygon = Slic3r::ExPolygon->new($square, $hole_in_square); #is $expolygon->contains_point(Slic3r::Point->new(100, 100)), 1, 'corner point is recognized'; #is $expolygon->contains_point(Slic3r::Point->new(100, 180)), 1, 'point on contour is recognized'; #is $expolygon->contains_point(Slic3r::Point->new(140, 150)), 1, 'point on hole contour is recognized'; #is $expolygon->contains_point(Slic3r::Point->new(140, 140)), 1, 'point on hole corner is recognized'; { my $intersection = intersection_pl([Slic3r::Polyline->new([150,180], [150,150])], \@$expolygon); is $intersection->[0]->length, Slic3r::Line->new([150, 180], [150, 160])->length, 'line is clipped to square with hole'; } { my $intersection = intersection_pl([Slic3r::Polyline->new([150,150], [150,120])], \@$expolygon); is $intersection->[0]->length, Slic3r::Line->new([150, 140], [150, 120])->length, 'line is clipped to square with hole'; } { my $intersection = intersection_pl([Slic3r::Polyline->new([120,180], [180,180])], \@$expolygon); is $intersection->[0]->length, Slic3r::Line->new([120,180], [180,180])->length, 'line is clipped to square with hole'; } { my $intersection = intersection_pl([Slic3r::Polyline->new([50, 150], [300, 150])], \@$expolygon); is $intersection->[0]->length, Slic3r::Line->new([100, 150], [140, 150])->length, 'line is clipped to square with hole'; is $intersection->[1]->length, Slic3r::Line->new([160, 150], [200, 150])->length, 'line is clipped to square with hole'; } { my $intersection = intersection_pl([Slic3r::Polyline->new([300, 150], [50, 150])], \@$expolygon); is $intersection->[0]->length, Slic3r::Line->new([200, 150], [160, 150])->length, 'reverse line is clipped to square with hole'; is $intersection->[1]->length, Slic3r::Line->new([140, 150], [100, 150])->length, 'reverse line is clipped to square with hole'; } { my $intersection = intersection_pl([Slic3r::Polyline->new([100,180], [200,180])], \@$expolygon); is $intersection->[0]->length, Slic3r::Line->new([100,180], [200,180])->length, 'tangent line is clipped to square with hole'; } } #========================================================== { my $large_circle = Slic3r::Polygon->new_scale( # ccw [151.8639,288.1192], [133.2778,284.6011], [115.0091,279.6997], [98.2859,270.8606], [82.2734,260.7933], [68.8974,247.4181], [56.5622,233.0777], [47.7228,216.3558], [40.1617,199.0172], [36.6431,180.4328], [34.932,165.2312], [37.5567,165.1101], [41.0547,142.9903], [36.9056,141.4295], [40.199,124.1277], [47.7776,106.7972], [56.6335,90.084], [68.9831,75.7557], [82.3712,62.3948], [98.395,52.3429], [115.1281,43.5199], [133.4004,38.6374], [151.9884,35.1378], [170.8905,35.8571], [189.6847,37.991], [207.5349,44.2488], [224.8662,51.8273], [240.0786,63.067], [254.407,75.4169], [265.6311,90.6406], [275.6832,106.6636], [281.9225,124.52], [286.8064,142.795], [287.5061,161.696], [286.7874,180.5972], [281.8856,198.8664], [275.6283,216.7169], [265.5604,232.7294], [254.3211,247.942], [239.9802,260.2776], [224.757,271.5022], [207.4179,279.0635], [189.5605,285.3035], [170.7649,287.4188], ); ok $large_circle->is_counter_clockwise, "contour is counter-clockwise"; my $small_circle = Slic3r::Polygon->new_scale( # cw [158.227,215.9007], [164.5136,215.9007], [175.15,214.5007], [184.5576,210.6044], [190.2268,207.8743], [199.1462,201.0306], [209.0146,188.346], [213.5135,177.4829], [214.6979,168.4866], [216.1025,162.3325], [214.6463,151.2703], [213.2471,145.1399], [209.0146,134.9203], [199.1462,122.2357], [189.8944,115.1366], [181.2504,111.5567], [175.5684,108.8205], [164.5136,107.3655], [158.2269,107.3655], [147.5907,108.7656], [138.183,112.6616], [132.5135,115.3919], [123.5943,122.2357], [113.7259,134.92], [109.2269,145.7834], [108.0426,154.7799], [106.638,160.9339], [108.0941,171.9957], [109.4933,178.1264], [113.7259,188.3463], [123.5943,201.0306], [132.8461,208.1296], [141.4901,211.7094], [147.172,214.4458], ); ok $small_circle->is_clockwise, "hole is clockwise"; my $expolygon = Slic3r::ExPolygon->new($large_circle, $small_circle); my $line = Slic3r::Polyline->new_scale([152.742,288.086671142818], [152.742,34.166466971035]); my $intersection = intersection_pl([$line], \@$expolygon); is $intersection->[0]->length, Slic3r::Line->new([152742000, 288086661], [152742000, 215178843])->length, 'line is clipped to square with hole'; is $intersection->[1]->length, Slic3r::Line->new([152742000, 108087507], [152742000, 35166477])->length, 'line is clipped to square with hole'; } #========================================================== Slic3r-1.3.0/t/pressure.t000066400000000000000000000016601327442435500151660ustar00rootroot00000000000000use Test::More tests => 1; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(); use Slic3r; use Slic3r::Geometry qw(epsilon); use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; $config->set('pressure_advance', 10); $config->set('retract_length', [1]); my $print = Slic3r::Test::init_print('20mm_cube', config => $config, duplicate => 2); my $retracted = $config->retract_length->[0]; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && !$info->{dist_XY}) { $retracted += $info->{dist_E}; } elsif ($info->{retracting}) { $retracted += $info->{dist_E}; } }); ok abs($retracted) < 0.01, 'all retractions are compensated'; } __END__ Slic3r-1.3.0/t/print.t000066400000000000000000000045521327442435500144550ustar00rootroot00000000000000use Test::More tests => 6; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Geometry qw(epsilon unscale X Y); use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; my $print_center = [100,100]; my $print = Slic3r::Test::init_print('20mm_cube', config => $config, print_center => $print_center); my @extrusion_points = (); Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) { push @extrusion_points, my $point = Slic3r::Point->new_scale($args->{X}, $args->{Y}); } }); my $bb = Slic3r::Geometry::BoundingBox->new_from_points(\@extrusion_points); my $center = $bb->center; ok abs(unscale($center->[X]) - $print_center->[X]) < epsilon, 'print is centered around print_center (X)'; ok abs(unscale($center->[Y]) - $print_center->[Y]) < epsilon, 'print is centered around print_center (Y)'; } { # this represents the aggregate config from presets my $config = Slic3r::Config->new_from_defaults; # user adds one object to the plater my $print = Slic3r::Test::init_print(my $model = Slic3r::Test::model('20mm_cube'), config => $config); # user sets a per-region option $print->print->objects->[0]->model_object->config->set('fill_density', 100); $print->print->reload_object(0); is $print->print->regions->[0]->config->fill_density, 100, 'region config inherits model object config'; # user exports G-code, thus the default config is reapplied $print->print->apply_config($config); is $print->print->regions->[0]->config->fill_density, 100, 'apply_config() does not override per-object settings'; # user assigns object extruders $print->print->objects->[0]->model_object->config->set('extruder', 3); $print->print->objects->[0]->model_object->config->set('perimeter_extruder', 2); $print->print->reload_object(0); is $print->print->regions->[0]->config->infill_extruder, 3, 'extruder setting is correctly expanded'; is $print->print->regions->[0]->config->perimeter_extruder, 2, 'extruder setting does not override explicitely specified extruders'; } __END__ Slic3r-1.3.0/t/retraction.t000066400000000000000000000306251327442435500154730ustar00rootroot00000000000000use Test::More tests => 27; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(any); use Slic3r; use Slic3r::Geometry qw(epsilon); use Slic3r::Test qw(_eq); { my $config = Slic3r::Config->new_from_defaults; my $duplicate = 1; my $test = sub { my ($conf) = @_; $conf ||= $config; my $print = Slic3r::Test::init_print('20mm_cube', config => $conf, duplicate => $duplicate); my $tool = 0; my @toolchange_count = (); # track first usages so that we don't expect retract_length_toolchange when extruders are used for the first time my @retracted = (1); # ignore the first travel move from home to first point my @retracted_length = (0); my $lifted = 0; my $lift_dist = 0; # track lifted distance for toolchanges and extruders with different retract_lift values my $changed_tool = 0; my $wait_for_toolchange = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; $changed_tool = 1; $wait_for_toolchange = 0; $toolchange_count[$tool] //= 0; $toolchange_count[$tool]++; } elsif ($cmd =~ /^G[01]$/ && !$args->{Z}) { # ignore lift taking place after retraction fail 'toolchange happens right after retraction' if $wait_for_toolchange; } if ($info->{dist_Z}) { # lift move or lift + change layer if (_eq($info->{dist_Z}, $print->print->config->get_at('retract_lift', $tool)) || (_eq($info->{dist_Z}, $conf->layer_height + $print->print->config->get_at('retract_lift', $tool)) && $print->print->config->get_at('retract_lift', $tool) > 0)) { fail 'only lifting while retracted' if !$retracted[$tool]; fail 'double lift' if $lifted; $lifted = 1; $lift_dist = $info->{dist_Z}; } if ($info->{dist_Z} < 0) { fail 'going down only after lifting' if !$lifted; fail 'going down by the same amount of the lift or by the amount needed to get to next layer' if !_eq($info->{dist_Z}, -$lift_dist) && !_eq($info->{dist_Z}, -lift_dist + $conf->layer_height); $lift_dist = 0; $lifted = 0; } fail 'move Z at travel speed' if ($args->{F} // $self->F) != $conf->travel_speed * 60; } if ($info->{retracting}) { $retracted[$tool] = 1; $retracted_length[$tool] += -$info->{dist_E}; if (_eq($retracted_length[$tool], $print->print->config->get_at('retract_length', $tool))) { # okay } elsif (_eq($retracted_length[$tool], $print->print->config->get_at('retract_length_toolchange', $tool))) { $wait_for_toolchange = 1; } else { fail 'retracted by the correct amount'; } } if ($info->{extruding}) { fail 'only extruding while not lifted' if $lifted; if ($retracted[$tool]) { my $expected_amount = $retracted_length[$tool] + $print->print->config->get_at('retract_restart_extra', $tool); if ($changed_tool && $toolchange_count[$tool] > 1) { $expected_amount = $print->print->config->get_at('retract_length_toolchange', $tool) + $print->print->config->get_at('retract_restart_extra_toolchange', $tool); $changed_tool = 0; } fail 'unretracted by the correct amount' && exit if !_eq($info->{dist_E}, $expected_amount); $retracted[$tool] = 0; $retracted_length[$tool] = 0; } } if ($info->{travel} && $info->{dist_XY} >= $print->print->config->get_at('retract_before_travel', $tool)) { fail 'retracted before long travel move' if !$retracted[$tool]; } }); 1; }; $config->set('first_layer_height', $config->layer_height); $config->set('first_layer_speed', '100%'); $config->set('start_gcode', ''); # to avoid dealing with the nozzle lift in start G-code $config->set('retract_length', [1.5]); $config->set('retract_before_travel', [3]); $config->set('only_retract_when_crossing_perimeters', 0); my $retract_tests = sub { my ($descr) = @_; ok $test->(), "retraction$descr"; my $conf = $config->clone; $conf->set('retract_restart_extra', [1]); ok $test->($conf), "restart extra length$descr"; $conf->set('retract_restart_extra', [-1]); ok $test->($conf), "negative restart extra length$descr"; $conf->set('retract_lift', [1, 2]); ok $test->($conf), "lift$descr"; }; $retract_tests->(''); $duplicate = 2; $retract_tests->(' (duplicate)'); $duplicate = 1; $config->set('infill_extruder', 2); $config->set('skirts', 4); $config->set('skirt_height', 3); $retract_tests->(' (dual extruder with multiple skirt layers)'); } { my $config = Slic3r::Config->new_from_defaults; $config->set('start_gcode', ''); # prevent any default priming Z move from affecting our lift detection $config->set('retract_length', [0]); $config->set('retract_layer_change', [0]); $config->set('retract_lift', [0.2]); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $retracted = 0; my $layer_changes_with_retraction = 0; my $retractions = my $z_restores = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{retracting}) { $retracted = 1; $retractions++; } elsif ($info->{extruding} && $retracted) { $retracted = 0; } if ($info->{dist_Z} && $retracted) { $layer_changes_with_retraction++; } if ($info->{dist_Z} && $args->{Z} < $self->Z) { $z_restores++; } }); is $layer_changes_with_retraction, 0, 'no retraction on layer change'; is $retractions, 0, 'no retractions'; is $z_restores, 0, 'no lift'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('use_firmware_retraction', 1); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $retracted = 0; my $double_retractions = my $double_unretractions = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G10') { $double_retractions++ if $retracted; $retracted = 1; } elsif ($cmd eq 'G11') { $double_unretractions++ if !$retracted; $retracted = 0; } }); is $double_retractions, 0, 'no double retractions'; is $double_unretractions, 0, 'no double unretractions'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('use_firmware_retraction', 1); $config->set('retract_length', [0]); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $retracted = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G10') { $retracted = 1; } }); ok $retracted, 'retracting also when --retract-length is 0 but --use-firmware-retraction is enabled'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('start_gcode', ''); $config->set('retract_lift', [3, 4]); $config->set('only_retract_when_crossing_perimeters', 0); my @lifted_at = (); my $test = sub { my $print = Slic3r::Test::init_print('20mm_cube', config => $config, duplicate => 2); @lifted_at = (); my $retracted = 0; my $lifted = 0; my $tool = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1') { if ($info->{dist_Z} < 0) { # going downwards; this is a "restore lift" move $lifted = 0; push @lifted_at, $info->{new_Z}; } elsif (abs($info->{dist_Z} - $config->get_at('retract_lift', $tool)) < &epsilon) { # going upwards by a large amount; this is a lift move fail 'always lift after retraction' if !$retracted; ### It would be useful to prevent the double lift happening at layer change: ###fail 'no double lift' if $lifted; $lifted = 1; } elsif ($info->{retracting}) { $retracted = 1; } elsif ($info->{extruding} && $info->{dist_XY} == 0) { # consider the lift as layer change if they are configured with the same distance $lifted = 0 if $config->get_at('retract_lift', $tool) == $config->layer_height; fail 'always unretract after unlifting' if $lifted; $retracted = 0; } elsif ($info->{travel} && $info->{dist_XY} >= $config->get_at('retract_before_travel', $tool)) { #printf "dist_XY = %f, rbt = %f\n", $info->{dist_XY}, $config->get_at('retract_before_travel', 0); my $below = $config->get_at('retract_lift_below', $tool); fail 'no retraction for long travel move' if !$retracted; fail 'no lift for long travel move' if !$lifted && $self->Z >= $config->get_at('retract_lift_above', $tool) && ($below == 0 || $self->Z <= $below); } } elsif ($cmd =~ /^T(\d+)/) { $tool = $1; } }); }; $config->set('retract_layer_change', [1,1]); $test->(); ok !!@lifted_at, 'lift is compatible with retract_layer_change'; $config->set('retract_lift_above', [0, 0]); $config->set('retract_lift_below', [0, 0]); $test->(); ok !!@lifted_at, 'lift takes place when above/below == 0'; $config->set('retract_lift_above', [5, 6]); $config->set('retract_lift_below', [15, 13]); $test->(); ok !!@lifted_at, 'lift takes place when above/below != 0'; ok !(any { $_ < $config->get_at('retract_lift_above', 0) } @lifted_at), 'Z is not lifted below the configured value'; { my $below = $config->get_at('retract_lift_below', 0); $below += $config->layer_height if $config->get_at('retract_layer_change', 0); ok !(any { $_ > $below } @lifted_at), 'Z is not lifted above the configured value'; } # check lifting with different values for 2. extruder $config->set('perimeter_extruder', 2); $config->set('infill_extruder', 2); $config->set('retract_lift_above', [0, 0]); $config->set('retract_lift_below', [0, 0]); $test->(); ok !!@lifted_at, 'lift takes place when above/below == 0 for 2. extruder'; $config->set('retract_lift_above', [5, 6]); $config->set('retract_lift_below', [15, 13]); $test->(); ok !!@lifted_at, 'lift takes place when above/below != 0 for 2. extruder'; ok !(any { $_ < $config->get_at('retract_lift_above', 1) } @lifted_at), 'Z is not lifted below the configured value for 2. extruder'; { my $below = $config->get_at('retract_lift_below', 1); $below += $config->layer_height if $config->get_at('retract_layer_change', 1); ok !(any { $_ > $below } @lifted_at), 'Z is not lifted above the configured value for 2. extruder'; } $config->set('retract_lift', [$config->layer_height]); $config->set('perimeter_extruder', 1); $config->set('infill_extruder', 1); $config->set('retract_lift_above', [0, 0]); $config->set('retract_lift_below', [0, 0]); $test->(); } __END__ Slic3r-1.3.0/t/shells.t000066400000000000000000000344411327442435500146130ustar00rootroot00000000000000use Test::More tests => 24; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first sum); use Slic3r; use Slic3r::Geometry qw(epsilon); use Slic3r::Surface qw(S_TYPE_TOP); use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('perimeters', 0); $config->set('solid_infill_speed', 99); $config->set('top_solid_infill_speed', 99); $config->set('bridge_speed', 72); $config->set('first_layer_speed', '100%'); $config->set('cooling', 0); my $test = sub { my ($conf) = @_; $conf ||= $config; my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my %z = (); # Z => 1 my %layers_with_solid_infill = (); # Z => $count my %layers_with_bridge_infill = (); # Z => $count Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($self->Z > 0) { $z{ $self->Z } = 1; if ($info->{extruding} && $info->{dist_XY} > 0) { my $F = $args->{F} // $self->F; $layers_with_solid_infill{$self->Z} = 1 if $F == $config->solid_infill_speed*60; $layers_with_bridge_infill{$self->Z} = 1 if $F == $config->bridge_speed*60; } } }); my @z = sort { $a <=> $b } keys %z; my @shells = map $layers_with_solid_infill{$_} || $layers_with_bridge_infill{$_}, @z; fail "insufficient number of bottom solid layers" unless !defined(first { !$_ } @shells[0..$config->bottom_solid_layers-1]); fail "excessive number of bottom solid layers" unless scalar(grep $_, @shells[0 .. $#shells/2]) == $config->bottom_solid_layers; fail "insufficient number of top solid layers" unless !defined(first { !$_ } @shells[-$config->top_solid_layers..-1]); fail "excessive number of top solid layers" unless scalar(grep $_, @shells[($#shells/2)..$#shells]) == $config->top_solid_layers; if ($config->top_solid_layers > 0) { fail "unexpected solid infill speed in first solid layer over sparse infill" if $layers_with_solid_infill{ $z[-$config->top_solid_layers] }; die "bridge speed not used in first solid layer over sparse infill" if !$layers_with_bridge_infill{ $z[-$config->top_solid_layers] }; } 1; }; $config->set('top_solid_layers', 3); $config->set('bottom_solid_layers', 3); ok $test->(), "proper number of shells is applied"; $config->set('top_solid_layers', 0); $config->set('bottom_solid_layers', 0); ok $test->(), "no shells are applied when both top and bottom are set to zero"; $config->set('perimeters', 1); $config->set('top_solid_layers', 3); $config->set('bottom_solid_layers', 3); $config->set('fill_density', 0); ok $test->(), "proper number of shells is applied even when fill density is none"; } # issue #1161 { my $config = Slic3r::Config->new_from_defaults; $config->set('layer_height', 0.3); $config->set('first_layer_height', '100%'); $config->set('bottom_solid_layers', 0); $config->set('top_solid_layers', 3); $config->set('cooling', 0); $config->set('bridge_speed', 99); $config->set('solid_infill_speed', 99); $config->set('top_solid_infill_speed', 99); $config->set('first_layer_speed', '100%'); my $print = Slic3r::Test::init_print('V', config => $config); my %layers_with_solid_infill = (); # Z => 1 Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; $layers_with_solid_infill{$self->Z} = 1 if $info->{extruding} && ($args->{F} // $self->F) == $config->solid_infill_speed*60; }); is scalar(map $layers_with_solid_infill{$_}, grep $_ <= 7.2, keys %layers_with_solid_infill), 3, "correct number of top solid shells is generated in V-shaped object"; } { my $config = Slic3r::Config->new_from_defaults; # we need to check against one perimeter because this test is calibrated # (shape, extrusion_width) so that perimeters cover the bottom surfaces of # their lower layer - the test checks that shells are not generated on the # above layers (thus 'across' the shadow perimeter) # the test is actually calibrated to leave a narrow bottom region for each # layer - we test that in case of fill_density = 0 such narrow shells are # discarded instead of grown $config->set('perimeters', 1); $config->set('fill_density', 0); $config->set('cooling', 0); # prevent speed alteration $config->set('first_layer_speed', '100%'); # prevent speed alteration $config->set('layer_height', 0.4); $config->set('first_layer_height', '100%'); $config->set('extrusion_width', 0.55); $config->set('bottom_solid_layers', 3); $config->set('top_solid_layers', 0); $config->set('solid_infill_speed', 99); my $print = Slic3r::Test::init_print('V', config => $config); my %layers = (); # Z => 1 Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; $layers{$self->Z} = 1 if $info->{extruding} && ($args->{F} // $self->F) == $config->solid_infill_speed*60; }); is scalar(keys %layers), $config->bottom_solid_layers, "shells are not propagated across perimeters of the neighbor layer"; } { my $config = Slic3r::Config->new_from_defaults; $config->set('perimeters', 3); $config->set('cooling', 0); # prevent speed alteration $config->set('first_layer_speed', '100%'); # prevent speed alteration $config->set('layer_height', 0.4); $config->set('first_layer_height', '100%'); $config->set('bottom_solid_layers', 3); $config->set('top_solid_layers', 3); $config->set('solid_infill_speed', 99); $config->set('top_solid_infill_speed', 99); $config->set('bridge_speed', 99); my $print = Slic3r::Test::init_print('sloping_hole', config => $config); my %solid_layers = (); # Z => 1 Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; $solid_layers{$self->Z} = 1 if $info->{extruding} && ($args->{F} // $self->F) == $config->solid_infill_speed*60; }); is scalar(keys %solid_layers), $config->bottom_solid_layers + $config->top_solid_layers, "no superfluous shells are generated"; } { my $config = Slic3r::Config->new_from_defaults; $config->set('perimeters', 1); $config->set('fill_density', 0); $config->set('top_solid_layers', 0); $config->set('spiral_vase', 1); $config->set('bottom_solid_layers', 0); $config->set('skirts', 0); $config->set('first_layer_height', '100%'); $config->set('start_gcode', ''); $config->set('temperature', [200]); $config->set('first_layer_temperature', [205]); # TODO: this needs to be tested with a model with sloping edges, where starting # points of each layer are not aligned - in that case we would test that no # travel moves are left to move to the new starting point - in a cube, end # points coincide with next layer starting points (provided there's no clipping) my $test = sub { my ($model_name, $description) = @_; my $print = Slic3r::Test::init_print($model_name, config => $config); my $travel_moves_after_first_extrusion = 0; my $started_extruding = 0; my $first_layer_temperature_set = 0; my $temperature_set = 0; my @z_steps = (); Slic3r::GCode::Reader->new(Z => $config->z_offset)->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1') { $started_extruding = 1 if $info->{extruding}; push @z_steps, $info->{dist_Z} if $started_extruding && $info->{dist_Z} > 0; $travel_moves_after_first_extrusion++ if $info->{travel} && $info->{dist_XY} > 0 && $started_extruding && !exists $args->{Z}; } elsif ($cmd eq 'M104') { $first_layer_temperature_set = 1 if $args->{S} == 205; $temperature_set = 1 if $args->{S} == 200; } }); ok $first_layer_temperature_set, 'first layer temperature is preserved'; ok $temperature_set, 'temperature is preserved'; # we allow one travel move after first extrusion: i.e. when moving to the first # spiral point after moving to second layer (bottom layer had loop clipping, so # we're slightly distant from the starting point of the loop) ok $travel_moves_after_first_extrusion <= 1, "no gaps in spiral vase ($description)"; ok !(grep { $_ > $config->layer_height + epsilon } @z_steps), "no gaps in Z ($description)"; }; $test->('20mm_cube', 'solid model'); $config->set('z_offset', -10); $test->('20mm_cube', 'solid model with negative z-offset'); ### Disabled because the current unreliable medial axis code doesn't ### always produce valid loops. ###$test->('40x10', 'hollow model with negative z-offset'); } { my $config = Slic3r::Config->new_from_defaults; $config->set('spiral_vase', 1); $config->set('perimeters', 1); $config->set('fill_density', 0); $config->set('top_solid_layers', 0); $config->set('bottom_solid_layers', 0); $config->set('retract_layer_change', [0]); $config->set('skirts', 0); $config->set('first_layer_height', '100%'); $config->set('layer_height', 0.4); $config->set('start_gcode', ''); $config->validate; my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $z_moves = 0; my @this_layer = (); # [ dist_Z, dist_XY ], ... my $bottom_layer_not_flat = 0; my $null_z_moves_not_layer_changes = 0; my $null_z_moves_not_multiples_of_layer_height = 0; my $sum_of_partial_z_equals_to_layer_height = 0; my $all_layer_segments_have_same_slope = 0; my $horizontal_extrusions = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1') { if ($z_moves < 2) { # skip everything up to the second Z move # (i.e. start of second layer) if (exists $args->{Z}) { $z_moves++; $bottom_layer_not_flat = 1 if $info->{dist_Z} > 0 && $info->{dist_Z} != $config->layer_height; } } elsif ($info->{dist_Z} == 0 && $args->{Z}) { $null_z_moves_not_layer_changes = 1 if $info->{dist_XY} != 0; # % doesn't work easily with floats $null_z_moves_not_multiples_of_layer_height = 1 if abs(($args->{Z} / $config->layer_height) * $config->layer_height - $args->{Z}) > epsilon; my $total_dist_XY = sum(map $_->[1], @this_layer); $sum_of_partial_z_equals_to_layer_height = 1 if abs(sum(map $_->[0], @this_layer) - $config->layer_height) > epsilon; foreach my $segment (@this_layer) { # check that segment's dist_Z is proportioned to its dist_XY $all_layer_segments_have_same_slope = 1 if abs($segment->[0]*$total_dist_XY/$config->layer_height - $segment->[1]) > 0.2; } @this_layer = (); } elsif ($info->{extruding} && $info->{dist_XY} > 0) { $horizontal_extrusions = 1 if $info->{dist_Z} == 0; push @this_layer, [ $info->{dist_Z}, $info->{dist_XY} ]; } } }); ok !$bottom_layer_not_flat, 'bottom layer is flat when using spiral vase'; ok !$null_z_moves_not_layer_changes, 'null Z moves are layer changes'; ok !$null_z_moves_not_multiples_of_layer_height, 'null Z moves are multiples of layer height'; ok !$sum_of_partial_z_equals_to_layer_height, 'sum of partial Z increments equals to a full layer height'; ok !$all_layer_segments_have_same_slope, 'all layer segments have the same slope'; ok !$horizontal_extrusions, 'no horizontal extrusions'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('perimeters', 1); $config->set('fill_density', 0); $config->set('top_solid_layers', 0); $config->set('spiral_vase', 1); $config->set('bottom_solid_layers', 0); $config->set('skirts', 0); $config->set('first_layer_height', '100%'); $config->set('start_gcode', ''); my $print = Slic3r::Test::init_print('two_hollow_squares', config => $config); my $diagonal_moves = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1') { if ($info->{extruding} && $info->{dist_XY} > 0) { if ($info->{dist_Z} > 0) { $diagonal_moves++; } } } }); is $diagonal_moves, 0, 'no spiral moves on two-island object'; } { # GH: #3732 my $config = Slic3r::Config->new_from_defaults; $config->set('perimeters', 2); $config->set('extrusion_width', 0.55); $config->set('first_layer_height', 0.25); $config->set('infill_overlap', '50%'); $config->set('layer_height', 0.25); $config->set('perimeters', 2); $config->set('extra_perimeters', 1); my $tprint = Slic3r::Test::init_print('step', config => $config); $tprint->print->process; my $layerm19 = $tprint->print->get_object(0)->get_layer(19)->get_region(0); is scalar(@{$layerm19->slices->filter_by_type(S_TYPE_TOP)}), 1, 'top slice detected'; is scalar(@{$layerm19->fill_surfaces->filter_by_type(S_TYPE_TOP)}), 0, 'no top fill_surface detected'; is $layerm19->perimeters->items_count, 3, 'extra perimeter detected'; } __END__ Slic3r-1.3.0/t/skirt_brim.t000066400000000000000000000150141327442435500154610ustar00rootroot00000000000000use Test::More tests => 8; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Geometry qw(unscale convex_hull); use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 1); $config->set('skirt_height', 2); $config->set('perimeters', 0); $config->set('support_material_speed', 99); $config->set('cooling', 0); # to prevent speeds to be altered $config->set('first_layer_speed', '100%'); # to prevent speeds to be altered my $test = sub { my ($conf) = @_; $conf ||= $config; my $print = Slic3r::Test::init_print(['20mm_cube','20mm_cube'], config => $config); my %layers_with_skirt = (); # Z => $count Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if (defined $self->Z) { $layers_with_skirt{$self->Z} //= 0; $layers_with_skirt{$self->Z} = 1 if $info->{extruding} && ($args->{F} // $self->F) == $config->support_material_speed*60; } }); fail "wrong number of layers with skirt" unless (grep $_, values %layers_with_skirt) == $config->skirt_height; }; ok $test->(), "skirt_height is honored when printing multiple objects too"; } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('perimeters', 0); $config->set('top_solid_layers', 0); # to prevent solid shells and their speeds $config->set('bottom_solid_layers', 0); # to prevent solid shells and their speeds $config->set('brim_width', 5); $config->set('support_material_speed', 99); $config->set('cooling', 0); # to prevent speeds to be altered $config->set('first_layer_speed', '100%'); # to prevent speeds to be altered my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my %layers_with_brim = (); # Z => $count Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if (defined $self->Z) { $layers_with_brim{$self->Z} //= 0; $layers_with_brim{$self->Z} = 1 if $info->{extruding} && $info->{dist_XY} > 0 && ($args->{F} // $self->F) != $config->infill_speed*60; } }); is scalar(grep $_, values %layers_with_brim), 1, "brim is generated"; } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 1); $config->set('brim_width', 10); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); ok Slic3r::Test::gcode($print), 'successful G-code generation when skirt is smaller than brim width'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 1); $config->set('skirt_height', 0); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); ok Slic3r::Test::gcode($print), 'successful G-code generation when skirt_height = 0 and skirts > 0'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('brim_width', 5); $config->set('perimeter_extruder', 2); $config->set('support_material_extruder', 3); my $test = sub { my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $tool = undef; my $brim_tool = undef; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) { if (!defined $brim_tool) { # first extrusion is brim $brim_tool = $tool; } } }); return $brim_tool; }; is $test->(), $config->perimeter_extruder-1, 'brim is printed with the extruder used for the perimeters of first object'; $config->set('raft_layers', 1); is $test->(), $config->support_material_extruder-1, 'if raft is enabled, brim is printed with the extruder used for it'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('layer_height', 0.4); $config->set('first_layer_height', 0.4); $config->set('skirts', 1); $config->set('skirt_distance', 0); $config->set('support_material_speed', 99); $config->set('perimeter_extruder', 1); $config->set('support_material_extruder', 2); $config->set('cooling', 0); # to prevent speeds to be altered $config->set('first_layer_speed', '100%'); # to prevent speeds to be altered my $print = Slic3r::Test::init_print('overhang', config => $config); $print->process; # we enable support material after skirt has been generated $config->set('support_material', 1); $print->apply_config($config); my $skirt_length = 0; my @extrusion_points = (); my $tool = undef; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif (defined $self->Z && $self->Z == $config->first_layer_height) { # we're on first layer if ($info->{extruding} && $info->{dist_XY} > 0) { my $speed = ($args->{F} // $self->F) / 60; if ($speed == $config->support_material_speed && $tool == $config->perimeter_extruder-1) { # skirt uses support material speed but first object's extruder $skirt_length += $info->{dist_XY}; } else { push @extrusion_points, my $point = Slic3r::Point->new_scale($args->{X}, $args->{Y}); } } } }); my $convex_hull = convex_hull(\@extrusion_points); my $hull_perimeter = unscale($convex_hull->split_at_first_point->length); ok $skirt_length > $hull_perimeter, 'skirt length is large enough to contain object with support'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('min_skirt_length', 20); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); ok Slic3r::Test::gcode($print), 'no crash when using min_skirt_length'; } __END__ Slic3r-1.3.0/t/slice.t000066400000000000000000000113001327442435500144050ustar00rootroot00000000000000use Test::More; use strict; use warnings; plan skip_all => 'temporarily disabled'; plan tests => 16; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } # temporarily disable compilation errors due to constant not being exported anymore sub Slic3r::TriangleMesh::I_B {} sub Slic3r::TriangleMesh::I_FACET_EDGE {} sub Slic3r::TriangleMesh::FE_BOTTOM { sub Slic3r::TriangleMesh::FE_TOP {}} use Slic3r; use Slic3r::Geometry qw(X Y Z A B); my @lines; my $z = 20; my @points = ([3, 4], [8, 5], [1, 9]); # XY coordinates of the facet vertices # NOTE: # the first point of the intersection lines is replaced by -1 because TriangleMesh.pm # is saving memory and doesn't store point A anymore since it's not actually needed. # We disable this test because intersect_facet() now assumes we never feed a horizontal # facet to it. # is_deeply lines(20, 20, 20), [ # [ -1, $points[1] ], # $points[0] # [ -1, $points[2] ], # $points[1] # [ -1, $points[0] ], # $points[2] # ], 'horizontal'; is_deeply lines(22, 20, 20), [ [ -1, $points[2] ] ], 'lower edge on layer'; # $points[1] is_deeply lines(20, 20, 22), [ [ -1, $points[1] ] ], 'lower edge on layer'; # $points[0] is_deeply lines(20, 22, 20), [ [ -1, $points[0] ] ], 'lower edge on layer'; # $points[2] is_deeply lines(20, 20, 10), [ [ -1, $points[0] ] ], 'upper edge on layer'; # $points[1] is_deeply lines(10, 20, 20), [ [ -1, $points[1] ] ], 'upper edge on layer'; # $points[2] is_deeply lines(20, 10, 20), [ [ -1, $points[2] ] ], 'upper edge on layer'; # $points[0] is_deeply lines(20, 15, 10), [ ], 'upper vertex on layer'; is_deeply lines(28, 20, 30), [ ], 'lower vertex on layer'; { my @z = (24, 10, 16); is_deeply lines(@z), [ [ -1, # line_plane_intersection([ vertices(@z)->[0], vertices(@z)->[1] ]), line_plane_intersection([ vertices(@z)->[2], vertices(@z)->[0] ]), ] ], 'two edges intersect'; } { my @z = (16, 24, 10); is_deeply lines(@z), [ [ -1, # line_plane_intersection([ vertices(@z)->[1], vertices(@z)->[2] ]), line_plane_intersection([ vertices(@z)->[0], vertices(@z)->[1] ]), ] ], 'two edges intersect'; } { my @z = (10, 16, 24); is_deeply lines(@z), [ [ -1, # line_plane_intersection([ vertices(@z)->[2], vertices(@z)->[0] ]), line_plane_intersection([ vertices(@z)->[1], vertices(@z)->[2] ]), ] ], 'two edges intersect'; } { my @z = (24, 10, 20); is_deeply lines(@z), [ [ -1, # line_plane_intersection([ vertices(@z)->[0], vertices(@z)->[1] ]), $points[2], ] ], 'one vertex on plane and one edge intersects'; } { my @z = (10, 20, 24); is_deeply lines(@z), [ [ -1, # line_plane_intersection([ vertices(@z)->[2], vertices(@z)->[0] ]), $points[1], ] ], 'one vertex on plane and one edge intersects'; } { my @z = (20, 24, 10); is_deeply lines(@z), [ [ -1, # line_plane_intersection([ vertices(@z)->[1], vertices(@z)->[2] ]), $points[0], ] ], 'one vertex on plane and one edge intersects'; } my @lower = intersect(22, 20, 20); my @upper = intersect(20, 20, 10); is $lower[0][Slic3r::TriangleMesh::I_FACET_EDGE], Slic3r::TriangleMesh::FE_BOTTOM, 'bottom edge on layer'; is $upper[0][Slic3r::TriangleMesh::I_FACET_EDGE], Slic3r::TriangleMesh::FE_TOP, 'upper edge on layer'; my $mesh; sub intersect { $mesh = Slic3r::TriangleMesh->new( facets => [], vertices => [], ); push @{$mesh->facets}, [ [0,0,0], @{vertices(@_)} ]; $mesh->analyze; return map Slic3r::TriangleMesh::unpack_line($_), $mesh->intersect_facet($#{$mesh->facets}, $z); } sub vertices { push @{$mesh->vertices}, map [ @{$points[$_]}, $_[$_] ], 0..2; [ ($#{$mesh->vertices}-2) .. $#{$mesh->vertices} ] } sub lines { my @lines = intersect(@_); #$_->a->[X] = sprintf('%.0f', $_->a->[X]) for @lines; #$_->a->[Y] = sprintf('%.0f', $_->a->[Y]) for @lines; $_->[Slic3r::TriangleMesh::I_B][X] = sprintf('%.0f', $_->[Slic3r::TriangleMesh::I_B][X]) for @lines; $_->[Slic3r::TriangleMesh::I_B][Y] = sprintf('%.0f', $_->[Slic3r::TriangleMesh::I_B][Y]) for @lines; return [ map [ -1, $_->[Slic3r::TriangleMesh::I_B] ], @lines ]; } sub line_plane_intersection { my ($line) = @_; @$line = map $mesh->vertices->[$_], @$line; return [ map sprintf('%.0f', $_), map +($line->[B][$_] + ($line->[A][$_] - $line->[B][$_]) * ($z - $line->[B][Z]) / ($line->[A][Z] - $line->[B][Z])), (X,Y) ]; } __END__ Slic3r-1.3.0/t/speed.t000066400000000000000000000032451327442435500144170ustar00rootroot00000000000000use Test::More tests => 2; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(none); use Slic3r; use Slic3r::Geometry qw(epsilon); use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; my $test = sub { my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my %speeds_by_z = (); # z => [] Slic3r::GCode::Reader->new->parse(my $gcode = Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1' && $info->{dist_E} > 0 && $info->{dist_XY} > 0) { $speeds_by_z{$self->Z} //= []; push @{ $speeds_by_z{$self->Z} }, $self->F/60; } }); return %speeds_by_z; }; { $config->set('perimeter_speed', 0); $config->set('external_perimeter_speed', 0); $config->set('infill_speed', 0); $config->set('support_material_speed', 0); $config->set('solid_infill_speed', 0); $config->set('first_layer_speed', '50%'); $config->set('first_layer_height', 0.25); my %speeds_by_z = $test->(); ok !!(none { $_ > $config->max_print_speed/2+&epsilon } @{ $speeds_by_z{$config->first_layer_height} }), 'percent first_layer_speed is applied over autospeed'; } { $config->set('first_layer_speed', 33); my %speeds_by_z = $test->(); ok !!(none { $_ > $config->first_layer_speed } @{ $speeds_by_z{$config->first_layer_height} }), 'absolute first_layer_speed overrides autospeed'; } } __END__ Slic3r-1.3.0/t/support.t000066400000000000000000000331221327442435500150300ustar00rootroot00000000000000use Test::More tests => 29; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Geometry qw(epsilon scale PI); use Slic3r::Geometry::Clipper qw(diff); use Slic3r::Test; { my $config = Slic3r::Config->new_from_defaults; $config->set('support_material', 1); my @contact_z = my @top_z = (); my $test = sub { my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $flow = $print->print->objects->[0]->support_material_flow; my $support = Slic3r::Print::SupportMaterial->new( object_config => $print->print->objects->[0]->config, print_config => $print->print->config, flow => $flow, interface_flow => $flow, first_layer_flow => $flow, ); my $support_z = $support->support_layers_z(\@contact_z, \@top_z, $config->layer_height); my $expected_top_spacing = $support->contact_distance($config->layer_height, $config->nozzle_diameter->[0]); is $support_z->[0], $config->first_layer_height, 'first layer height is honored'; is scalar(grep { $support_z->[$_]-$support_z->[$_-1] <= 0 } 1..$#$support_z), 0, 'no null or negative support layers'; is scalar(grep { $support_z->[$_]-$support_z->[$_-1] > $config->nozzle_diameter->[0] + epsilon } 1..$#$support_z), 0, 'no layers thicker than nozzle diameter'; my $wrong_top_spacing = 0; foreach my $top_z (@top_z) { # find layer index of this top surface my $layer_id = first { abs($support_z->[$_] - $top_z) < epsilon } 0..$#$support_z; # check that first support layer above this top surface (or the next one) is spaced with nozzle diameter $wrong_top_spacing = 1 if ($support_z->[$layer_id+1] - $support_z->[$layer_id]) != $expected_top_spacing && ($support_z->[$layer_id+2] - $support_z->[$layer_id]) != $expected_top_spacing; } ok !$wrong_top_spacing, 'layers above top surfaces are spaced correctly'; }; $config->set('layer_height', 0.2); $config->set('first_layer_height', 0.3); @contact_z = (1.9); @top_z = (1.1); $test->(); $config->set('first_layer_height', 0.4); $test->(); $config->set('layer_height', $config->nozzle_diameter->[0]); $test->(); } { my $config = Slic3r::Config->new_from_defaults; $config->set('raft_layers', 3); $config->set('brim_width', 0); $config->set('skirts', 0); $config->set('support_material_extruder', 2); $config->set('support_material_interface_extruder', 2); $config->set('layer_height', 0.4); $config->set('first_layer_height', 0.4); my $print = Slic3r::Test::init_print('overhang', config => $config); ok my $gcode = Slic3r::Test::gcode($print), 'no conflict between raft/support and brim'; my $tool = 0; Slic3r::GCode::Reader->new->parse($gcode, sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($info->{extruding}) { if ($self->Z <= ($config->raft_layers * $config->layer_height)) { fail 'not extruding raft with support material extruder' if $tool != ($config->support_material_extruder-1); } else { fail 'support material exceeds raft layers' if $tool == $config->support_material_extruder-1; # TODO: we should test that full support is generated when we use raft too } } }); } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('raft_layers', 3); $config->set('support_material_pattern', 'honeycomb'); $config->set('support_material_extrusion_width', 0.6); $config->set('first_layer_extrusion_width', '100%'); $config->set('bridge_speed', 99); $config->set('cooling', 0); # prevent speed alteration $config->set('first_layer_speed', '100%'); # prevent speed alteration $config->set('start_gcode', ''); # prevent any unexpected Z move my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $layer_id = -1; # so that first Z move sets this to 0 my @raft = my @first_object_layer = (); my %first_object_layer_speeds = (); # F => 1 Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0) { if ($layer_id <= $config->raft_layers) { # this is a raft layer or the first object layer my $line = Slic3r::Line->new_scale([ $self->X, $self->Y ], [ $info->{new_X}, $info->{new_Y} ]); my @path = @{$line->grow(scale($config->support_material_extrusion_width/2))}; if ($layer_id < $config->raft_layers) { # this is a raft layer push @raft, @path; } else { push @first_object_layer, @path; $first_object_layer_speeds{ $args->{F} // $self->F } = 1; } } } elsif ($cmd eq 'G1' && $info->{dist_Z} > 0) { $layer_id++; } }); ok !@{diff(\@first_object_layer, \@raft)}, 'first object layer is completely supported by raft'; is scalar(keys %first_object_layer_speeds), 1, 'only one speed used in first object layer'; ok +(keys %first_object_layer_speeds)[0] == $config->bridge_speed*60, 'bridge speed used in first object layer'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('layer_height', 0.2); $config->set('skirts', 0); $config->set('raft_layers', 5); $config->set('support_material_pattern', 'rectilinear'); $config->set('support_material_extrusion_width', 0.4); $config->set('support_material_interface_extrusion_width', 0.6); $config->set('support_material_interface_layers', 2); $config->set('first_layer_extrusion_width', '100%'); $config->set('bridge_speed', 99); $config->set('cooling', 0); # prevent speed alteration $config->set('first_layer_speed', '100%'); # prevent speed alteration $config->set('start_gcode', ''); # prevent any unexpected Z move my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $layer_id = -1; my $success = 1; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding} && $info->{dist_XY} > 0) { # this is a raft layer if (($layer_id < $config->raft_layers) && ($layer_id > 0)) { my $width; my $support_layer_height = $config->nozzle_diameter->[0] * 0.75; # support layer if ($config->raft_layers - $config->support_material_interface_layers > $layer_id) { $width = $config->support_material_extrusion_width; } # interface layer else { $width = $config->support_material_interface_extrusion_width; } my $expected_E_per_mm3 = 4 / (($config->filament_diameter->[0]**2) * PI); my $expected_mm3_per_mm = $width * $support_layer_height + ($support_layer_height**2) / 4.0 * (PI-4.0); my $expected_e_per_mm = $expected_E_per_mm3 * $expected_mm3_per_mm; my $e_per_mm = ($info->{dist_E} / $info->{dist_XY});; my $diff = abs($e_per_mm - $expected_e_per_mm); if ($diff > 0.001) { $success = 0; } } } elsif ($cmd eq 'G1' && $info->{dist_Z} > 0) { $layer_id++; } }); ok $success, 'support material interface extrusion width is used for interfaces'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('layer_height', 0.35); $config->set('first_layer_height', 0.3); $config->set('nozzle_diameter', [0.5]); $config->set('support_material_extruder', 2); $config->set('support_material_interface_extruder', 2); my $test = sub { my ($raft_layers) = @_; $config->set('raft_layers', $raft_layers); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my %raft_z = (); # z => 1 my $tool = undef; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($info->{extruding} && $info->{dist_XY} > 0) { if ($tool == $config->support_material_extruder-1) { $raft_z{$self->Z} = 1; } } }); is scalar(keys %raft_z), $config->raft_layers, 'correct number of raft layers is generated'; }; $test->(2); $test->(70); $config->set('layer_height', 0.4); $config->set('first_layer_height', 0.35); $test->(3); $test->(70); } { my $config = Slic3r::Config->new_from_defaults; $config->set('brim_width', 0); $config->set('skirts', 0); $config->set('support_material', 1); $config->set('top_solid_layers', 0); # so that we don't have the internal bridge over infill $config->set('bridge_speed', 99); $config->set('cooling', 0); $config->set('first_layer_speed', '100%'); my $test = sub { my $print = Slic3r::Test::init_print('overhang', config => $config); my $has_bridge_speed = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($info->{extruding}) { if (($args->{F} // $self->F) == $config->bridge_speed*60) { $has_bridge_speed = 1; } } }); return $has_bridge_speed; }; $config->set('support_material_contact_distance', 0.2); ok $test->(), 'bridge speed is used when support_material_contact_distance > 0'; $config->set('support_material_contact_distance', 0); ok !$test->(), 'bridge speed is not used when support_material_contact_distance == 0'; $config->set('raft_layers', 5); $config->set('support_material_contact_distance', 0.2); ok $test->(), 'bridge speed is used when raft_layers > 0 and support_material_contact_distance > 0'; $config->set('support_material_contact_distance', 0); ok !$test->(), 'bridge speed is not used when raft_layers > 0 and support_material_contact_distance == 0'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('skirts', 0); $config->set('start_gcode', ''); $config->set('raft_layers', 8); $config->set('nozzle_diameter', [0.4, 1]); $config->set('layer_height', 0.1); $config->set('first_layer_height', 0.8); $config->set('support_material_extruder', 2); $config->set('support_material_interface_extruder', 2); $config->set('support_material_contact_distance', 0); my $print = Slic3r::Test::init_print('20mm_cube', config => $config); ok my $gcode = Slic3r::Test::gcode($print), 'first_layer_height is validated with support material extruder nozzle diameter when using raft layers'; my $tool = undef; my @z = (0); my %layer_heights_by_tool = (); # tool => [ lh, lh... ] Slic3r::GCode::Reader->new->parse($gcode, sub { my ($self, $cmd, $args, $info) = @_; if ($cmd =~ /^T(\d+)/) { $tool = $1; } elsif ($cmd eq 'G1' && exists $args->{Z} && $args->{Z} != $self->Z) { push @z, $args->{Z}; } elsif ($info->{extruding} && $info->{dist_XY} > 0) { $layer_heights_by_tool{$tool} ||= []; push @{ $layer_heights_by_tool{$tool} }, $z[-1] - $z[-2]; } }); ok !defined(first { $_ > $config->nozzle_diameter->[0] + epsilon } @{ $layer_heights_by_tool{$config->perimeter_extruder-1} }), 'no object layer is thicker than nozzle diameter'; ok !defined(first { abs($_ - $config->layer_height) < epsilon } @{ $layer_heights_by_tool{$config->support_material_extruder-1} }), 'no support material layer is as thin as object layers'; } { my $config = Slic3r::Config->new_from_defaults; $config->set('support_material_enforce_layers', 100); $config->set('support_material', 0); my @contact_z = my @top_z = (); my $test = sub { my $print = Slic3r::Test::init_print('20mm_cube', config => $config); my $flow = $print->print->objects->[0]->support_material_flow; my $support = Slic3r::Print::SupportMaterial->new( object_config => $print->print->objects->[0]->config, print_config => $print->print->config, flow => $flow, interface_flow => $flow, first_layer_flow => $flow, ); my $support_z = $support->support_layers_z(\@contact_z, \@top_z, $config->layer_height); is scalar(grep { $support_z->[$_]-$support_z->[$_-1] <= 0 } 1..$#$support_z), 0, 'forced support is generated'; }; $config->set('layer_height', 0.2); $config->set('first_layer_height', 0.3); @contact_z = (1.9); @top_z = (1.1); $test->(); } __END__ Slic3r-1.3.0/t/svg.t000066400000000000000000000014021327442435500141070ustar00rootroot00000000000000use Test::More tests => 2; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::Test; { my $print = Slic3r::Test::init_print('20mm_cube'); eval { my $fh = IO::Scalar->new(\my $gcode); $print->print->export_svg(output_fh => $fh, quiet => 1); $fh->close; }; die $@ if $@; ok !$@, 'successful SVG export'; } { my $print = Slic3r::Test::init_print('two_hollow_squares'); eval { my $fh = IO::Scalar->new(\my $gcode); $print->print->export_svg(output_fh => $fh, quiet => 1); $fh->close; }; die $@ if $@; ok !$@, 'successful SVG export of object with two islands'; } __END__ Slic3r-1.3.0/t/thin.t000066400000000000000000000200541327442435500142560ustar00rootroot00000000000000use Test::More tests => 23; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use List::Util qw(first sum none); use Slic3r::Geometry qw(epsilon scale unscale scaled_epsilon Y); use Slic3r::Test; # Disable this until a more robust implementation is provided. It currently # fails on Linux 32bit because some spurious extrudates are generated. if (0) { my $config = Slic3r::Config->new_from_defaults; $config->set('layer_height', 0.2); $config->set('first_layer_height', '100%'); $config->set('extrusion_width', 0.5); $config->set('first_layer_extrusion_width', '200%'); # check this one too $config->set('skirts', 0); $config->set('thin_walls', 1); my $print = Slic3r::Test::init_print('gt2_teeth', config => $config); my %extrusion_paths = (); # Z => count of continuous extrusions my $extruding = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1') { if ($info->{extruding} && $info->{dist_XY}) { if (!$extruding) { $extrusion_paths{$self->Z} //= 0; $extrusion_paths{$self->Z}++; } $extruding = 1; } else { $extruding = 0; } } }); ok !(first { $_ != 3 } values %extrusion_paths), 'no superfluous thin walls are generated for toothed profile'; } { my $square = Slic3r::Polygon->new_scale( # ccw [100, 100], [200, 100], [200, 200], [100, 200], ); my $hole_in_square = Slic3r::Polygon->new_scale( # cw [140, 140], [140, 160], [160, 160], [160, 140], ); my $expolygon = Slic3r::ExPolygon->new($square, $hole_in_square); my $res = $expolygon->medial_axis(scale 40, scale 0.5); is scalar(@$res), 1, 'medial axis of a square shape is a single path'; isa_ok $res->[0], 'Slic3r::Polyline', 'medial axis result is a polyline'; ok $res->[0]->first_point->coincides_with($res->[0]->last_point), 'polyline forms a closed loop'; ok $res->[0]->length > $hole_in_square->length && $res->[0]->length < $square->length, 'medial axis loop has reasonable length'; } { my $expolygon = Slic3r::ExPolygon->new(Slic3r::Polygon->new_scale( [100, 100], [120, 100], [120, 200], [100, 200], )); my $res = $expolygon->medial_axis(scale 20, scale 0.5); is scalar(@$res), 1, 'medial axis of a narrow rectangle is a single line'; ok unscale($res->[0]->length) >= (200-100 - (120-100)) - epsilon, 'medial axis has reasonable length'; $expolygon = Slic3r::ExPolygon->new(Slic3r::Polygon->new_scale( [100, 100], [120, 100], [120, 200], [105, 200], # extra point in the short side [100, 200], )); my $res2 = $expolygon->medial_axis(scale 1, scale 0.5); is scalar(@$res), 1, 'medial axis of a narrow rectangle with an extra vertex is still a single line'; ok unscale($res->[0]->length) >= (200-100 - (120-100)) - epsilon, 'medial axis has still a reasonable length'; ok !(grep { abs($_ - scale 150) < scaled_epsilon } map $_->[Y], map @$_, @$res2), "extra vertices don't influence medial axis"; } { my $expolygon = Slic3r::ExPolygon->new( Slic3r::Polygon->new([1185881,829367],[1421988,1578184],[1722442,2303558],[2084981,2999998],[2506843,3662186],[2984809,4285086],[3515250,4863959],[4094122,5394400],[4717018,5872368],[5379210,6294226],[6075653,6656769],[6801033,6957229],[7549842,7193328],[8316383,7363266],[9094809,7465751],[9879211,7500000],[10663611,7465750],[11442038,7363265],[12208580,7193327],[12957389,6957228],[13682769,6656768],[14379209,6294227],[15041405,5872366],[15664297,5394401],[16243171,4863960],[16758641,4301424],[17251579,3662185],[17673439,3000000],[18035980,2303556],[18336441,1578177],[18572539,829368],[18750748,0],[19758422,0],[19727293,236479],[19538467,1088188],[19276136,1920196],[18942292,2726179],[18539460,3499999],[18070731,4235755],[17539650,4927877],[16950279,5571067],[16307090,6160437],[15614974,6691519],[14879209,7160248],[14105392,7563079],[13299407,7896927],[12467399,8159255],[11615691,8348082],[10750769,8461952],[9879211,8500000],[9007652,8461952],[8142729,8348082],[7291022,8159255],[6459015,7896927],[5653029,7563079],[4879210,7160247],[4143447,6691519],[3451331,6160437],[2808141,5571066],[2218773,4927878],[1687689,4235755],[1218962,3499999],[827499,2748020],[482284,1920196],[219954,1088186],[31126,236479],[0,0],[1005754,0]), ); my $res = $expolygon->medial_axis(scale 1.324888, scale 0.25); is scalar(@$res), 1, 'medial axis of a semicircumference is a single line'; # check whether turns are all CCW or all CW my @lines = @{$res->[0]->lines}; my @angles = map { $lines[$_-1]->ccw($lines[$_]->b) } 1..$#lines; ok !!(none { $_ < 0 } @angles) || (none { $_ > 0 } @angles), 'all medial axis segments of a semicircumference have the same orientation'; } { my $expolygon = Slic3r::ExPolygon->new(Slic3r::Polygon->new_scale( [100, 100], [120, 100], [112, 200], [108, 200], )); my $res = $expolygon->medial_axis(scale 20, scale 0.5); is scalar(@$res), 1, 'medial axis of a narrow trapezoid is a single line'; ok unscale($res->[0]->length) >= (200-100 - (120-100)) - epsilon, 'medial axis has reasonable length'; } { my $expolygon = Slic3r::ExPolygon->new(Slic3r::Polygon->new_scale( [100, 100], [120, 100], [120, 180], [200, 180], [200, 200], [100, 200], )); my $res = $expolygon->medial_axis(scale 20, scale 0.5); is scalar(@$res), 1, 'medial axis of a L shape is a single polyline'; my $len = unscale($res->[0]->length) + 20; # 20 is the thickness of the expolygon, which is subtracted from the ends ok $len > 80*2 && $len < 100*2, 'medial axis has reasonable length'; } { my $expolygon = Slic3r::ExPolygon->new(Slic3r::Polygon->new( [-203064906,-51459966],[-219312231,-51459966],[-219335477,-51459962],[-219376095,-51459962],[-219412047,-51459966], [-219572094,-51459966],[-219624814,-51459962],[-219642183,-51459962],[-219656665,-51459966],[-220815482,-51459966], [-220815482,-37738966],[-221117540,-37738966],[-221117540,-51762024],[-203064906,-51762024], )); my $polylines = $expolygon->medial_axis(819998, 102499.75); my $perimeter = $expolygon->contour->split_at_first_point->length; ok sum(map $_->length, @$polylines) > $perimeter/2/4*3, 'medial axis has a reasonable length'; } { my $expolygon = Slic3r::ExPolygon->new(Slic3r::Polygon->new_scale( [50, 100], [1000, 102], [50, 104], )); my $res = $expolygon->medial_axis(scale 4, scale 0.5); is scalar(@$res), 1, 'medial axis of a narrow triangle is a single line'; ok unscale($res->[0]->length) >= (200-100 - (120-100)) - epsilon, 'medial axis has reasonable length'; } { # GH #2474 my $expolygon = Slic3r::ExPolygon->new(Slic3r::Polygon->new( [91294454,31032190],[11294481,31032190],[11294481,29967810],[44969182,29967810],[89909960,29967808],[91294454,29967808] )); my $polylines = $expolygon->medial_axis(1871238, 500000); is scalar(@$polylines), 1, 'medial axis is a single polyline'; my $polyline = $polylines->[0]; my $expected_y = $expolygon->bounding_box->center->y; #;; ok abs(sum(map $_->y, @$polyline) / @$polyline - $expected_y) < scaled_epsilon, #,, 'medial axis is horizontal and is centered'; # order polyline from left to right $polyline->reverse if $polyline->first_point->x > $polyline->last_point->x; my $polyline_bb = $polyline->bounding_box; is $polyline->first_point->x, $polyline_bb->x_min, 'expected x_min'; is $polyline->last_point->x, $polyline_bb->x_max, 'expected x_max'; is_deeply [ map $_->x, @$polyline ], [ sort map $_->x, @$polyline ], 'medial axis is not self-overlapping'; } __END__ Slic3r-1.3.0/t/threads.t000066400000000000000000000015111327442435500147430ustar00rootroot00000000000000use Test::More; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use List::Util qw(first); use Slic3r; use Slic3r::Test; if (!$Slic3r::have_threads) { plan skip_all => "this perl is not compiled with threads"; } plan tests => 2; { my $print = Slic3r::Test::init_print('20mm_cube'); { my $thread = threads->create(sub { Slic3r::thread_cleanup(); return 1; }); ok $thread->join, "print survives thread spawning"; } } { my $thread = threads->create(sub { { my $print = Slic3r::Test::init_print('20mm_cube'); Slic3r::Test::gcode($print); } Slic3r::thread_cleanup(); return 1; }); ok $thread->join, "process print in a separate thread"; } __END__ Slic3r-1.3.0/t/vibrationlimit.t000066400000000000000000000067531327442435500163620ustar00rootroot00000000000000use Test::More tests => 9; use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::Geometry qw(epsilon); use Slic3r::Test; my $config = Slic3r::Config->new_from_defaults; # tolerance, in minutes # (our time estimation differs from the internal one because of decimals truncation) my $epsilon = 0.002; my $test = sub { my ($conf) = @_; $conf ||= $config; my $print = Slic3r::Test::init_print('2x20x10', config => $conf); my $min_time = 1 / ($conf->vibration_limit * 60); # minimum time between direction changes in minutes my %dir = (X => 0, Y => 0); my %dir_time = (X => 0, Y => 0); my %dir_sleep_time = (X => 0, Y => 0); my $last_cmd_pause = 0; Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; if ($cmd !~ /^G[01]$/) { if ($cmd eq 'G4') { $last_cmd_pause = (($args->{P} // 0) / 1000 + ($args->{S} // 0)) / 60; # in minutes $dir_sleep_time{$_} += $last_cmd_pause for qw(X Y); $last_cmd_pause -= $epsilon; # error builds up } return; } # Z moves are slow enough that we can consider any vibration interrupted if ($info->{dist_Z}) { $dir_time{$_} += 99999 for qw(X Y); $last_cmd_pause = 0; return; } elsif ($info->{dist_E} != 0 && $info->{dist_XY} == 0) { my $time = abs($info->{dist_E}) / ($args->{F} // $self->F); # in minutes $dir_time{$_} += $time for qw(X Y); $last_cmd_pause = 0; return; } # compute move time (this assumes that the speed is XY-bound, which happens very likely) my $time = abs($info->{dist_XY}) / ($args->{F} // $self->F); # in minutes my $one_axis_would_trigger_limit_without_pause = 0; foreach my $axis (qw(X Y)) { # get the direction by comparing the new $axis coordinate with the current one # 1 = positive, 0 = no change, -1 = negative my $dir = $info->{"new_$axis"} <=> $self->$axis; # are we changing direction on this axis? if ($dir != 0 && $dir{$axis} != $dir) { # this move changes direction on this axis if ($dir{$axis} != 0) { if (($dir_time{$axis} + $dir_sleep_time{$axis}) < ($min_time - $epsilon)) { fail 'vibration limit exceeded'; } $one_axis_would_trigger_limit_without_pause = 1 if ($dir_time{$axis} - $last_cmd_pause) < $min_time; } $dir{$axis} = $dir; $dir_time{$axis} = 0; $dir_sleep_time{$axis} = 0; } $dir_time{$axis} += $time; } fail 'no unnecessary pauses are added' if $last_cmd_pause > $epsilon && !$one_axis_would_trigger_limit_without_pause; $last_cmd_pause = 0; }); 1; }; $config->set('gcode_comments', 1); $config->set('perimeters', 1); foreach my $frequency (5, 10, 15) { foreach my $gapfillspeed (20, 50, 100) { $config->set('vibration_limit', $frequency); ok $test->(), "vibrations limited to ${frequency}Hz (gap fill speed = ${gapfillspeed} mm/s)"; } } __END__ Slic3r-1.3.0/utils/000077500000000000000000000000001327442435500140235ustar00rootroot00000000000000Slic3r-1.3.0/utils/amf-to-stl.pl000077500000000000000000000020161327442435500163450ustar00rootroot00000000000000#!/usr/bin/perl # This script converts an AMF file to STL use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use File::Basename qw(basename); use Getopt::Long qw(:config no_auto_abbrev); use Slic3r; $|++; my %opt = (); { my %options = ( 'help' => sub { usage() }, 'ascii' => \$opt{ascii}, ); GetOptions(%options) or usage(1); $ARGV[0] or usage(1); } { my $model = Slic3r::Model->read_from_file($ARGV[0]); my $output_file = $ARGV[0]; $output_file =~ s/\.amf(?:\.xml)?$/\.stl/i; printf "Writing to %s\n", basename($output_file); $model->write_stl($output_file, !$opt{ascii}); } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: amf-to-stl.pl [ OPTIONS ] file.amf --help Output this usage screen and exit --ascii Generate ASCII STL files (default: binary) EOF exit ($exit_code || 0); } __END__ Slic3r-1.3.0/utils/config-bundle-to-config.pl000077500000000000000000000025251327442435500207660ustar00rootroot00000000000000#!/usr/bin/perl # This script extracts a full active config from a config bundle. # (Often users reporting issues don't attach plain configs, but # bundles...) use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Getopt::Long qw(:config no_auto_abbrev); use Slic3r; use Slic3r::Test; $|++; my %opt = (); { my %options = ( 'help' => sub { usage() }, 'output=s' => \$opt{output}, ); GetOptions(%options) or usage(1); $ARGV[0] or usage(1); } ($ARGV[0] && $opt{output}) or usage(1); { my $bundle_ini = Slic3r::Config->read_ini($ARGV[0]) or die "Failed to read $ARGV[0]\n"; my $config_ini = { _ => {} }; foreach my $section (qw(print filament printer)) { my $preset_name = $bundle_ini->{presets}{$section}; $preset_name =~ s/\.ini$//; my $preset = $bundle_ini->{"$section:$preset_name"} or die "Failed to find preset $preset_name in bundle\n"; $config_ini->{_}{$_} = $preset->{$_} for keys %$preset; } Slic3r::Config->write_ini($opt{output}, $config_ini); } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: config-bundle-to-config.pl --output config.ini bundle.ini EOF exit ($exit_code || 0); } __END__ Slic3r-1.3.0/utils/dump-stl.pl000066400000000000000000000022111327442435500161210ustar00rootroot00000000000000#!/usr/bin/perl # This script dumps a STL file into Perl syntax for writing tests # or dumps a test model into a STL file use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; use Slic3r::Test; $|++; $ARGV[0] or usage(1); if (-e $ARGV[0]) { my $model = Slic3r::Model->read_from_file($ARGV[0]); $model->objects->[0]->add_instance(offset => Slic3r::Pointf->new(0,0)); my $mesh = $model->mesh; $mesh->repair; printf "VERTICES = %s\n", join ',', map "[$_->[0],$_->[1],$_->[2]]", @{$mesh->vertices}; printf "FACETS = %s\n", join ',', map "[$_->[0],$_->[1],$_->[2]]", @{$mesh->facets}; exit 0; } elsif ((my $model = Slic3r::Test::model($ARGV[0]))) { $ARGV[1] or die "Missing writeable destination as second argument\n"; $model->write_stl($ARGV[1]); printf "Model $ARGV[0] written to $ARGV[1]\n"; exit 0; } else { die "No such model exists\n"; } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: dump-stl.pl file.stl dump-stl.pl modelname file.stl EOF exit ($exit_code || 0); } __END__ Slic3r-1.3.0/utils/estimate-gcode-time.pl000077500000000000000000000006521327442435500202140ustar00rootroot00000000000000#!/usr/bin/env perl use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; die "Usage: estimate-gcode-time.pl FILE\n" if @ARGV != 1; my $estimator = Slic3r::GCode::TimeEstimator->new; $estimator->parse_file($ARGV[0]); printf "Time: %d minutes and %d seconds\n", int($estimator->time / 60), $estimator->time % 60; __END__ Slic3r-1.3.0/utils/gcode_sectioncut.pl000066400000000000000000000073141327442435500177060ustar00rootroot00000000000000#!/usr/bin/perl # This script generates section cuts from a given G-Code file use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Getopt::Long qw(:config no_auto_abbrev); use IO::All; use List::Util qw(max); use Slic3r; use Slic3r::Geometry qw(X Y A B X1 Y1 X2 Y2); use Slic3r::Geometry::Clipper qw(JT_SQUARE); use Slic3r::Test; use SVG; my %opt = ( layer_height => 0.2, extrusion_width => 0.5, scale => 30, ); { my %options = ( 'help' => sub { usage() }, 'layer-height|h=f' => \$opt{layer_height}, 'extrusion-width|w=f' => \$opt{extrusion_width}, 'scale|s=i' => \$opt{scale}, ); GetOptions(%options) or usage(1); $ARGV[0] or usage(1); } { my $input_file = $ARGV[0]; my $output_file = $input_file; $output_file =~ s/\.(?:gcode|gco|ngc|g)$/.svg/; # read paths my %paths = (); # z => [ path, path ... ] Slic3r::GCode::Reader->new->parse(io($input_file)->all, sub { my ($self, $cmd, $args, $info) = @_; if ($cmd eq 'G1' && $info->{extruding}) { $paths{ $self->Z } ||= []; push @{ $paths{ $self->Z } }, Slic3r::Line->new( [ $self->X, $self->Y ], [ $info->{new_X}, $info->{new_Y} ], ); } }); # calculate print extents my $bounding_box = Slic3r::Geometry::BoundingBox->new_from_points([ map @$_, map @$_, values %paths ]); # calculate section line my $section_y = $bounding_box->center->[Y]; my $section_line = [ [ $bounding_box->x_min, $section_y ], [ $bounding_box->x_max, $section_y ], ]; # initialize output my $max_z = max(keys %paths); my $svg = SVG->new( width => $opt{scale} * $bounding_box->size->[X], height => $opt{scale} * $max_z, ); # put everything into a group my $g = $svg->group(style => { 'stroke-width' => 1, 'stroke' => '#444444', 'fill' => 'grey', }); # draw paths foreach my $z (sort keys %paths) { foreach my $line (@{ $paths{$z} }) { my @intersections = @{intersection_pl( [ $section_line ], [ _grow($line, $opt{extrusion_width}/2) ], )}; $g->rectangle( 'x' => $opt{scale} * ($_->[A][X] - $bounding_box->x_min), 'y' => $opt{scale} * ($max_z - $z), 'width' => $opt{scale} * abs($_->[B][X] - $_->[A][X]), 'height' => $opt{scale} * $opt{layer_height}, 'rx' => $opt{scale} * $opt{layer_height} * 0.35, 'ry' => $opt{scale} * $opt{layer_height} * 0.35, ) for @intersections; } } # write output Slic3r::open(\my $fh, '>', $output_file); print $fh $svg->xmlify; close $fh; printf "Section cut SVG written to %s\n", $output_file; } # replace built-in Line->grow method which relies on int_offset() sub _grow { my ($line, $distance) = @_; my $polygon = [ @$line, CORE::reverse @$line[1..($#$line-1)] ]; return @{Math::Clipper::offset([$polygon], $distance, 100000, JT_SQUARE, 2)}; } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: gcode_sectioncut.pl [ OPTIONS ] file.gcode --help Output this usage screen and exit --layer-height, -h Use the specified layer height --extrusion-width, -w Use the specified extrusion width --scale Factor for converting G-code units to SVG units EOF exit ($exit_code || 0); } __END__ Slic3r-1.3.0/utils/modifier_helpers/000077500000000000000000000000001327442435500173435ustar00rootroot00000000000000Slic3r-1.3.0/utils/modifier_helpers/layer_generator.jscad000066400000000000000000000011371327442435500235350ustar00rootroot00000000000000// title: Layer_generator // written by: Joseph Lenox // Used for generating cubes oriented about the center // for making simple modifier meshes. var width = 100; var layer_height = 0.3; var z = 30; function main() { return cube(size=[width,width,layer_height], center=true).translate([0,0,z]); } function getParameterDefinitions() { return [ { name: 'width', type: 'float', initial: 100, caption: "Width of the cube:" }, { name: 'layer_height', type: 'float', initial: 0.3, caption: "Layer height used:" }, { name: 'z', type: 'float', initial: 0, caption: "Z:" } ]; } Slic3r-1.3.0/utils/modifier_helpers/solid_layers.scad000066400000000000000000000020531327442435500226700ustar00rootroot00000000000000// Used to generate a modifier mesh to do something every few layers. // Load into OpenSCAD, tweak the variables below, export as STL and load as // a modifier mesh. Then change settings for the modifier mesh. // Written by Joseph Lenox; in public domain. layer_height = 0.3; // set to layer height in slic3r for "best" results. number_of_solid_layers = 2; N = 4; // N > number_of_solid_layers or else the whole thing will be solid model_height = 300.0; model_width = 300.0; // these two should be at least as big as the model model_depth = 300.0; // but bigger isn't a problem initial_offset=0; // don't generate below this position_on_bed=[0,0,0]; // in case you need to move it around // don't touch below unless you know what you are doing. simple_layers = round(model_height/layer_height); translate(position_on_bed) for (i = [initial_offset:N:simple_layers]) { translate([0,0,i*layer_height]) translate([0,0,(layer_height*number_of_solid_layers)/2]) cube([model_width,model_depth,layer_height*number_of_solid_layers], center=true); } Slic3r-1.3.0/utils/pdf-slices.pl000077500000000000000000000056621327442435500164250ustar00rootroot00000000000000#!/usr/bin/perl # This script exports model slices to a PDF file as solid fills, one per page use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Getopt::Long qw(:config no_auto_abbrev); use PDF::API2; use Slic3r; use Slic3r::Geometry qw(scale unscale X Y); use constant mm => 25.4 / 72; my %opt = (); { my %options = ( 'help' => sub { usage() }, 'output|o=s' => \$opt{output_file}, 'layer-height|h=f' => \$opt{layer_height}, ); GetOptions(%options) or usage(1); $ARGV[0] or usage(1); } { # prepare config my $config = Slic3r::Config->new; $config->set('layer_height', $opt{layer_height}) if $opt{layer_height}; # read model my $model = Slic3r::Model->read_from_file(my $input_file = $ARGV[0]); # init print object my $sprint = Slic3r::Print::Simple->new( print_center => [0,0], ); $sprint->apply_config($config); $sprint->set_model($model); my $print = $sprint->_print; # compute sizes my $bb = $print->bounding_box; my $size = $bb->size; my $mediabox = [ map unscale($_)/mm, @{$size} ]; # init PDF my $pdf = PDF::API2->new(); my $color = $pdf->colorspace_separation('RDG_GLOSS', 'darkblue'); # slice and build output geometry $_->slice for @{$print->objects}; foreach my $object (@{ $print->objects }) { my $shift = $object->_shifted_copies->[0]; $shift->translate(map $_/2, @$size); foreach my $layer (@{ $object->layers }) { my $page = $pdf->page(); $page->mediabox(@$mediabox); my $content = $page->gfx; $content->fillcolor($color, 1); foreach my $expolygon (@{$layer->slices}) { $expolygon = $expolygon->clone; $expolygon->translate(@$shift); $content->poly(map { unscale($_->x)/mm, unscale($_->y)/mm } @{$expolygon->contour}); #) $content->close; foreach my $hole (@{$expolygon->holes}) { $content->poly(map { unscale($_->x)/mm, unscale($_->y)/mm } @$hole); #) $content->close; } $content->fill; # non-zero by default } } } # write output file my $output_file = $opt{output_file}; if (!defined $output_file) { $output_file = $input_file; $output_file =~ s/\.(?:stl)$/.pdf/i; } $pdf->saveas($output_file); printf "PDF file written to %s\n", $output_file; } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: pdf-slices.pl [ OPTIONS ] file.stl --help Output this usage screen and exit --output, -o Write to the specified file --layer-height, -h Use the specified layer height EOF exit ($exit_code || 0); } __END__ Slic3r-1.3.0/utils/post-processing/000077500000000000000000000000001327442435500171625ustar00rootroot00000000000000Slic3r-1.3.0/utils/post-processing/decimate.pl000077500000000000000000000015441327442435500213010ustar00rootroot00000000000000#!/usr/bin/perl -i~ use strict; use warnings; my %lastpos = (X => 10000, Y => 10000, Z => 10000, E => 10000, F => 10000); my %pos = (X => 0, Y => 0, Z => 0, E => 0, F => 0); my $mindist = 0.33; my $mindistz = 0.005; my $mindistsq = $mindist * $mindist; sub dist { my $sq = 0; for (qw/X Y Z E/) { $sq += ($pos{$_} - $lastpos{$_}) ** 2; } return $sq; } while (<>) { if (m#\bG[01]\b#) { while (m#([XYZEF])(\d+(\.\d+)?)#gi) { $pos{uc $1} = $2; } if ( ( /X/ && /Y/ && (dist() >= $mindistsq) ) || (abs($pos{Z} - $lastpos{Z}) > $mindistz) || (!/X/ || !/Y/) ) { print; %lastpos = %pos; } elsif (($pos{F} - $lastpos{F}) != 0) { printf "G1 F%s\n", $pos{F}; $lastpos{F} = $pos{F}; } } else { if (m#\bG92\b#) { while (m#([XYZEF])(\d+(\.\d+)?)#gi) { $lastpos{uc $1} = $2; } } print; } } Slic3r-1.3.0/utils/post-processing/fan_kickstart.py000066400000000000000000000005061327442435500223600ustar00rootroot00000000000000#!/usr/bin/python import sys import re sea = re.compile("M106 S[1-9]+[0-9]*") rep = re.compile("M106 S255\n\g<0>") out = open(sys.argv[1]+"_fixed", 'w') with open(sys.argv[1]) as f: for r in f: if re.search(sea, r) is not None: out.write(re.sub(sea,"M106 S255\n\g<0>",r)) else: out.write(r) Slic3r-1.3.0/utils/post-processing/filament-weight.pl000077500000000000000000000016231327442435500226100ustar00rootroot00000000000000#!/usr/bin/perl -i # # Post-processing script for adding weight and cost of required # filament to G-code output. use strict; use warnings; # example densities, adjust according to filament specifications use constant PLA_P => 1.25; # g/cm3 use constant ABS_P => 1.05; # g/cm3 # example costs, adjust according to filament prices use constant PLA_PRICE => 0.05; # EUR/g use constant ABS_PRICE => 0.02; # EUR/g use constant CURRENCY => "EUR"; while (<>) { if (/^(;\s+filament\s+used\s+=\s.*\((\d+(?:\.\d+)?)cm3)\)/) { my $pla_weight = $2 * PLA_P; my $abs_weight = $2 * ABS_P; my $pla_costs = $pla_weight * PLA_PRICE; my $abs_costs = $abs_weight * ABS_PRICE; printf "%s or %.2fg PLA/%.2fg ABS)\n", $1, $pla_weight, $abs_weight; printf "; costs = %s %.2f (PLA), %s %.2f (ABS)\n", CURRENCY, $pla_costs, CURRENCY, $abs_costs; } else { print; } } Slic3r-1.3.0/utils/post-processing/flowrate.pl000077500000000000000000000025101327442435500213430ustar00rootroot00000000000000#!/usr/bin/perl -i # # Post-processing script for calculating flow rate for each move use strict; use warnings; use constant PI => 3.141592653589793238; my @filament_diameter = split /,/, $ENV{SLIC3R_FILAMENT_DIAMETER}; my $E = 0; my $T = 0; my ($X, $Y, $F); while (<>) { if (/^G1.*? F([0-9.]+)/) { $F = $1; } if (/^G1 X([0-9.-]+) Y([0-9.-]+).*? E([0-9.-]+)/) { my ($x, $y, $e) = ($1, $2, $3); my $e_length = $e - $E; if ($e_length > 0 && defined $X && defined $Y) { my $dist = sqrt( (($x-$X)**2) + (($y-$Y)**2) ); if ($dist > 0) { my $mm_per_mm = $e_length / $dist; # dE/dXY my $mm3_per_mm = (($filament_diameter[$T] // 0) ** 2) * PI/4 * $mm_per_mm; my $vol_speed = $F/60 * $mm3_per_mm; my $comment = sprintf ' ; dXY = %.3fmm ; dE = %.5fmm ; dE/XY = %.5fmm/mm; volspeed = %.5fmm^3/sec', $dist, $e_length, $mm_per_mm, $vol_speed; s/(\R+)/$comment$1/; } } $E = $e; $X = $x; $Y = $y; } if (/^G1 X([0-9.]+) Y([0-9.]+)/) { $X = $1; $Y = $2; } if (/^G1.*? E([0-9.]+)/) { $E = $1; } if (/^G92 E0/) { $E = 0; } if (/^T(\d+)/) { $T = $1; } print; } __END__ Slic3r-1.3.0/utils/post-processing/prowl-notification.pl000077500000000000000000000011501327442435500233460ustar00rootroot00000000000000#!/usr/bin/perl # # Example post-processing script for sending a Prowl notification upon # completion. See http://www.prowlapp.com/ for more info. use strict; use warnings; use File::Basename qw(basename); use WebService::Prowl; # set your Prowl API key here my $apikey = ''; my $file = basename $ARGV[0]; my $prowl = WebService::Prowl->new(apikey => $apikey); my %options = (application => 'Slic3r', event =>'Slicing Done!', description => "$file was successfully generated"); printf STDERR "Error sending Prowl notification: %s\n", $prowl->error unless $prowl->add(%options); Slic3r-1.3.0/utils/post-processing/strip-toolchange.pl000066400000000000000000000004331327442435500230010ustar00rootroot00000000000000#!/usr/bin/perl -i # # Remove all toolchange commands (and T# arguments) from gcode. use strict; use warnings; # read stdin and any/all files passed as parameters one line at a time while (<>) { if (not /^T[0-9]/) { s/\s*(T[0-9])//; print; } else { } } Slic3r-1.3.0/utils/post-processing/z-every-line.pl000077500000000000000000000011151327442435500220460ustar00rootroot00000000000000#!/usr/bin/perl -i use strict; use warnings; my $z = 0; # read stdin and any/all files passed as parameters one line at a time while (<>) { # if we find a Z word, save it $z = $1 if /Z\s*(\d+(\.\d+)?)/; # if we don't have Z, but we do have X and Y if (!/Z/ && /X/ && /Y/ && $z > 0) { # chop off the end of the line (incl. comments), saving chopped section in $1 s/\s*([\r\n\;\(].*)/" Z$z $1"/es; # print start of line, insert our Z value then re-add the chopped end of line # print "$_ Z$z $1"; } #else { # nothing interesting, print line as-is print or die $!; #} } Slic3r-1.3.0/utils/send-gcode.pl000066400000000000000000000013371327442435500163740ustar00rootroot00000000000000#!/usr/bin/env perl use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Slic3r; die "Usage: send-gcode.pl SERIALPORT BAUDRATE GCODE_FILE\n" if @ARGV != 3; my $serial = Slic3r::GCode::Sender->new; $serial->connect($ARGV[0], $ARGV[1]); 1 until $serial->is_connected; print "Connected to printer\n"; { local $/ = "\n"; Slic3r::open(\my $fh, '<', $ARGV[2]) or die "Unable to open $ARGV[2]: $!\n"; binmode $fh, ':utf8'; while (<$fh>) { $serial->send($_); } close $fh; } while ((my $queue_size = $serial->queue_size) > 0) { printf "Queue size: %d\n", $queue_size; } $serial->disconnect; __END__ Slic3r-1.3.0/utils/split_stl.pl000077500000000000000000000027101327442435500164000ustar00rootroot00000000000000#!/usr/bin/perl # This script splits a STL plate into individual files use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use File::Basename qw(basename); use Getopt::Long qw(:config no_auto_abbrev); use Slic3r; $|++; my %opt = (); { my %options = ( 'help' => sub { usage() }, 'ascii' => \$opt{ascii}, ); GetOptions(%options) or usage(1); $ARGV[0] or usage(1); } { my $model = Slic3r::Model->read_from_file($ARGV[0]); my $basename = $ARGV[0]; $basename =~ s/\.stl$//i; my $part_count = 0; my $mesh = $model->objects->[0]->volumes->[0]->mesh; foreach my $new_mesh (@{$mesh->split}) { $new_mesh->repair; my $new_model = Slic3r::Model->new; $new_model ->add_object() ->add_volume(mesh => $new_mesh); $new_model->add_default_instances; my $output_file = sprintf '%s_%02d.stl', $basename, ++$part_count; printf "Writing to %s\n", basename($output_file); $new_model->write_stl($output_file, !$opt{ascii}); } } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: split_stl.pl [ OPTIONS ] file.stl --help Output this usage screen and exit --ascii Generate ASCII STL files (default: binary) EOF exit ($exit_code || 0); } __END__ Slic3r-1.3.0/utils/stl-to-amf.pl000077500000000000000000000035261327442435500163540ustar00rootroot00000000000000#!/usr/bin/perl # This script converts a STL file to AMF use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use File::Basename qw(basename); use Getopt::Long qw(:config no_auto_abbrev); use Slic3r; $|++; my %opt = (); { my %options = ( 'help' => sub { usage() }, 'distinct-materials' => \$opt{distinct_materials}, ); GetOptions(%options) or usage(1); $ARGV[0] or usage(1); } { my @models = map Slic3r::Model->read_from_file($_), @ARGV; my $output_file = $ARGV[0]; $output_file =~ s/\.stl$/.amf.xml/i; my $new_model = Slic3r::Model->new; if ($opt{distinct_materials} && @models > 1) { my $new_object = $new_model->add_object; for my $m (0 .. $#models) { my $model = $models[$m]; $new_model->set_material($m, { Name => basename($ARGV[$m]) }); $new_object->add_volume( material_id => $m, facets => $model->objects->[0]->volumes->[0]->facets, vertices => $model->objects->[0]->vertices, ); } } else { foreach my $model (@models) { $new_model->add_object( vertices => $model->objects->[0]->vertices, )->add_volume( facets => $model->objects->[0]->volumes->[0]->facets, ); } } printf "Writing to %s\n", basename($output_file); $new_model->write_amf($output_file); } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: amf-to-stl.pl [ OPTIONS ] file.stl [ file2.stl [ file3.stl ] ] --help Output this usage screen and exit --distinct-materials Assign each STL file to a different material EOF exit ($exit_code || 0); } __END__ Slic3r-1.3.0/utils/view-mesh.pl000066400000000000000000000036451327442435500162740ustar00rootroot00000000000000#!/usr/bin/perl # This script displays 3D preview of a mesh use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Getopt::Long qw(:config no_auto_abbrev); use Slic3r; use Slic3r::Geometry qw(Z); use Slic3r::GUI; use Slic3r::GUI::3DScene; $|++; my %opt = (); { my %options = ( 'help' => sub { usage() }, 'cut=f' => \$opt{cut}, 'enable-moving' => \$opt{enable_moving}, ); GetOptions(%options) or usage(1); $ARGV[0] or usage(1); } { my $model = Slic3r::Model->read_from_file($ARGV[0]); # make sure all objects have at least one defined instance $model->add_default_instances; $_->center_around_origin for @{$model->objects}; # and align to Z = 0 my $app = Slic3r::ViewMesh->new; $app->{canvas}->enable_picking(1); $app->{canvas}->enable_moving($opt{enable_moving}); $app->{canvas}->load_object($model, 0); $app->{canvas}->set_auto_bed_shape; $app->{canvas}->zoom_to_volumes; $app->{canvas}->SetCuttingPlane(Z, $opt{cut}) if defined $opt{cut}; $app->MainLoop; } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: view-mesh.pl [ OPTIONS ] file.stl --help Output this usage screen and exit --cut Z Display the cutting plane at the given Z EOF exit ($exit_code || 0); } package Slic3r::ViewMesh; use Wx qw(:sizer); use base qw(Wx::App); sub OnInit { my $self = shift; my $frame = Wx::Frame->new(undef, -1, 'Mesh Viewer', [-1, -1], [500, 400]); my $panel = Wx::Panel->new($frame, -1); $self->{canvas} = Slic3r::GUI::3DScene->new($panel); my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($self->{canvas}, 1, wxEXPAND, 0); $panel->SetSizer($sizer); $sizer->SetSizeHints($panel); $frame->Show(1); } __END__ Slic3r-1.3.0/utils/view-toolpaths.pl000077500000000000000000000047171327442435500173610ustar00rootroot00000000000000#!/usr/bin/perl # This script displays 3D preview of a mesh use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Getopt::Long qw(:config no_auto_abbrev); use Slic3r; use Slic3r::GUI; use Slic3r::GUI::3DScene; $|++; my %opt = (); { my %options = ( 'help' => sub { usage() }, 'load=s' => \$opt{load}, '3D' => \$opt{d3}, 'duplicate=i' => \$opt{duplicate}, ); GetOptions(%options) or usage(1); $ARGV[0] or usage(1); } { # load model my $model = Slic3r::Model->read_from_file($ARGV[0]); # load config my $config = Slic3r::Config->new_from_defaults; if ($opt{load}) { $config->apply(Slic3r::Config->load($opt{load})); } # init print my $sprint = Slic3r::Print::Simple->new; $sprint->duplicate($opt{duplicate} // 1); $sprint->apply_config($config); $sprint->set_model($model); $sprint->process; # visualize toolpaths $Slic3r::ViewToolpaths::print = $sprint->_print; $Slic3r::ViewToolpaths::d3 = $opt{d3}; my $app = Slic3r::ViewToolpaths->new; $app->MainLoop; } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: view-toolpaths.pl [ OPTIONS ] file.stl --help Output this usage screen and exit --load CONFIG Loads the supplied config file EOF exit ($exit_code || 0); } package Slic3r::ViewToolpaths; use Wx qw(:sizer); use base qw(Wx::App Class::Accessor); our $print; our $d3; sub OnInit { my $self = shift; my $frame = Wx::Frame->new(undef, -1, 'Toolpaths', [-1, -1], [500, 500]); my $panel = Wx::Panel->new($frame, -1); my $canvas; if ($d3) { $canvas = Slic3r::GUI::3DScene->new($panel); $canvas->set_bed_shape($print->config->bed_shape); $canvas->load_print_toolpaths($print); foreach my $object (@{$print->objects}) { #$canvas->load_print_object_slices($object); $canvas->load_print_object_toolpaths($object); #$canvas->load_object($object->model_object); } $canvas->zoom_to_volumes; } else { $canvas = Slic3r::GUI::Plater::2DToolpaths->new($panel, $print); } my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($canvas, 1, wxEXPAND, 0); $panel->SetSizer($sizer); $frame->Show(1); } __END__ Slic3r-1.3.0/utils/wireframe.pl000066400000000000000000000141271327442435500163460ustar00rootroot00000000000000#!/usr/bin/perl # This script exports experimental G-code for wireframe printing # (inspired by the brilliant WirePrint concept) use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/../lib"; use local::lib "$FindBin::Bin/../local-lib"; } use Getopt::Long qw(:config no_auto_abbrev); use Slic3r; use Slic3r::ExtrusionPath ':roles'; use Slic3r::Geometry qw(scale unscale X Y PI); my %opt = ( step_height => 5, nozzle_angle => 30, nozzle_width => 10, first_layer_height => 0.3, ); { my %options = ( 'help' => sub { usage() }, 'output|o=s' => \$opt{output_file}, 'step-height|h=f' => \$opt{step_height}, 'nozzle-angle|a=f' => \$opt{nozzle_angle}, 'nozzle-width|w=f' => \$opt{nozzle_width}, 'first-layer-height=f' => \$opt{first_layer_height}, ); GetOptions(%options) or usage(1); $opt{output_file} or usage(1); $ARGV[0] or usage(1); } { # load model my $model = Slic3r::Model->read_from_file($ARGV[0]); $model->add_default_instances; $model->center_instances_around_point(Slic3r::Pointf->new(100,100)); my $mesh = $model->mesh; $mesh->translate(0, 0, -$mesh->bounding_box->z_min); # get slices my @z = (); my $z_max = $mesh->bounding_box->z_max; for (my $z = $opt{first_layer_height}; $z <= $z_max; $z += $opt{step_height}) { push @z, $z; } my @slices = @{$mesh->slice(\@z)}; my $flow = Slic3r::Flow->new( width => 0.35, height => 0.35, nozzle_diameter => 0.35, bridge => 1, ); my $config = Slic3r::Config::Print->new; $config->set('gcode_comments', 1); open my $fh, '>', $opt{output_file}; my $gcodegen = Slic3r::GCode->new( enable_loop_clipping => 0, # better bonding ); $gcodegen->apply_print_config($config); $gcodegen->set_extruders([0]); print $fh $gcodegen->set_extruder(0); print $fh $gcodegen->writer->preamble; my $e = $gcodegen->writer->extruder->e_per_mm3 * $flow->mm3_per_mm; foreach my $layer_id (0..$#z) { my $z = $z[$layer_id]; foreach my $island (@{$slices[$layer_id]}) { foreach my $polygon (@$island) { if ($layer_id > 0) { # find the lower polygon that we want to connect to this one my $lower = $slices[$layer_id-1]->[0]->contour; # 't was easy, wasn't it? my $lower_z = $z[$layer_id-1]; { my @points = (); # keep all points with strong angles { my @pp = @$polygon; foreach my $i (0..$#pp) { push @points, $pp[$i-1] if abs($pp[$i-1]->ccw_angle($pp[$i-2], $pp[$i]) - PI) > PI/3; } } $polygon = Slic3r::Polygon->new(@points); } #$polygon = Slic3r::Polygon->new(@{$polygon->split_at_first_point->equally_spaced_points(scale $opt{nozzle_width})}); # find vertical lines my @vertical = (); foreach my $point (@{$polygon}) { push @vertical, Slic3r::Line->new($point->projection_onto_polygon($lower), $point); } next if !@vertical; my @points = (); foreach my $line (@vertical) { push @points, Slic3r::Pointf3->new( unscale($line->a->x), unscale($line->a->y), #)) $lower_z, ); push @points, Slic3r::Pointf3->new( unscale($line->b->x), unscale($line->b->y), #)) $z, ); } # reappend first point as destination of the last diagonal segment push @points, Slic3r::Pointf3->new( unscale($vertical[0]->a->x), unscale($vertical[0]->a->y), #)) $lower_z, ); # move to the position of the first vertical line print $fh $gcodegen->writer->travel_to_xyz(shift @points); # extrude segments foreach my $point (@points) { print $fh $gcodegen->writer->extrude_to_xyz($point, $e * $gcodegen->writer->get_position->distance_to($point)); } } } print $fh $gcodegen->writer->travel_to_z($z); foreach my $polygon (@$island) { #my $polyline = $polygon->split_at_vertex(Slic3r::Point->new_scale(@{$gcodegen->writer->get_position}[0,1])); my $polyline = $polygon->split_at_first_point; print $fh $gcodegen->writer->travel_to_xy(Slic3r::Pointf->new_unscale(@{ $polyline->first_point }), "move to first contour point"); foreach my $line (@{$polyline->lines}) { my $point = Slic3r::Pointf->new_unscale(@{ $line->b }); print $fh $gcodegen->writer->extrude_to_xy($point, $e * unscale($line->length)); } } } } close $fh; } sub usage { my ($exit_code) = @_; print <<"EOF"; Usage: wireframe.pl [ OPTIONS ] file.stl --help Output this usage screen and exit --output, -o Write to the specified file --step-height, -h Use the specified step height --nozzle-angle, -a Max nozzle angle --nozzle-width, -w External nozzle diameter EOF exit ($exit_code || 0); } __END__ Slic3r-1.3.0/utils/zsh/000077500000000000000000000000001327442435500146275ustar00rootroot00000000000000Slic3r-1.3.0/utils/zsh/README.markdown000066400000000000000000000012541327442435500173320ustar00rootroot00000000000000# ZSH Completions for Slic3r To enable zsh(1) completions for Slic3r, add the following to your ``~/.zshrc`` file, replacing ``/path/to/Slic3r/`` with the actual path to your Slic3r directory: typeset -U fpath if [[ -d /path/to/Slic3r/utils/zsh/functions ]]; then fpath=(/path/to/Slic3r/utils/zsh/functions $fpath) fi autoload -Uz compinit compinit zstyle ':completion:*' verbose true zstyle ':completion:*:descriptions' format '%B%d%b' zstyle ':completion:*:messages' format '%d' zstyle ':completion:*:warnings' format 'No matches for %d' zstyle ':completion:*' group-name '%d' See the zshcompsys(1) man page for further details. Slic3r-1.3.0/utils/zsh/functions/000077500000000000000000000000001327442435500166375ustar00rootroot00000000000000Slic3r-1.3.0/utils/zsh/functions/_slic3r000066400000000000000000000232661327442435500201310ustar00rootroot00000000000000#compdef -P slic3r(|.pl|.exe) # # Slic3r completions configuration for zsh(1). # Currently undocumented options: # --debug, --gui, --ignore-nonexistent-config # --acceleration, --perimeter-acceleration, --infill-acceleration _arguments -S \ '(- *)--help[output usage screen and exit]' \ '(- *)--version[output the version of Slic3r and exit]' \ '--save[save configuration to file]:config output file:_files -g "*.(#i)ini(-.)"' \ '*--load[load configuration from file]:config input file:_files -g "*.(#i)ini(-.)"' \ '(--output -o)'{--output,-o}'[specify output file]:output file:_files -g "*.(#i)(gcode|svg)(-.)"' \ '(--threads -j)'{--threads,-j}'[specify number of threads to use]:number of threads' \ \ '--output-filename-format[specify output filename format]:output filename format' \ '*--post-process[specify post-processing script]:post-processing script file:_files' \ '--export-svg[export SVG containing slices instead of G-code]' \ '(--merge -m)'{--merge,-m}'[merge multiple input files into a single print]' \ \ '*--nozzle-diameter[specify nozzle diameter]:nozzle diameter in mm' \ '--print-center[specify print center coordinates]:print center coordinates in mm,mm' \ '--z-offset[specify Z-axis offset]:Z-axis offset in mm' \ '--gcode-flavor[specify the type of G-code to generate]:G-code flavor:(reprap teacup repetier makerware sailfish mach3 machinekit no-extrusion)' \ '(--use-relative-e-distances --no-use-relative-e-distances)'--{no-,}use-relative-e-distances'[disable/enable relative E values]' \ '--extrusion-axis[specify letter associated with the extrusion axis]:extrusion axis letter' \ '(--gcode-arcs --no-gcode-arcs)'--{no-,}gcode-arcs'[disable/enable G2/G3 commands for native arcs]' \ '(--gcode-comments --no-gcode-comments)'--{no-,}gcode-comments'[disable/enable verbose G-code comments]' \ \ '*--filament-diameter[specify raw filament diameter]:raw filament diameter in mm' \ '*--extrusion-multiplier[specify multiplier for amount of plastic extruded]:extrusion multiplier' \ '*--temperature[specify extrusion temperature]:extrusion temperature in Celsius' \ '*--first-layer-temperature[specify extrusion temperature for the first layer]:first layer extrusion temperature in Celsius' \ '--bed-temperature[specify heated bed temperature]:heated bed temperature in Celsius' \ '--first-layer-bed-temperature[specify heated bed temperature for the first layer]:first layer heated bed temperature in Celsius' \ \ '--perimeter-extruder[specify extruder to use for printing perimeters]:extruder number' \ '--infill-extruder[specify extruder to use for printing infill]:extruder number' \ '--support-material-extruder[specify extruder to use for printing support material]:extruder number' \ \ '--travel-speed[specify speed of non-print moves]:speed of non-print moves in mm/s' \ '--perimeter-speed[specify speed of print moves for perimeters]:speed of print moves for perimeters in mm/s' \ '--external-perimeter-speed[specify speed of print moves for external perimeters]:speed of print moves for external perimeters in mm/s or % of --perimeter-speed' \ '--small-perimeter-speed[specify speed of print moves for small perimeters]:speed of print moves for small perimeters in mm/s or % of --perimeter-speed' \ '--infill-speed[specify speed of infill print moves]:speed of infill print moves in mm/s' \ '--solid-infill-speed[specify speed of solid surface print moves]:speed of solid surface print moves in mm/s or % of --infill-speed' \ '--top-solid-infill-speed[specify speed of top surface print moves]:speed of top surface print moves in mm/s or % of --solid-infill-speed' \ '--bridge-speed[specify speed of bridge print moves]:speed of bridge print moves in mm/s' \ '--first-layer-speed[specify speed of bottom layer print moves]:speed of bottom layer print moves in mm/s or % of normal speeds' \ \ '--layer-height[specify layer height]:layer height in mm' \ '--first-layer-height[specify layer height for bottom layer]:layer height for bottom layer in mm or % of --layer-height' \ '--infill-every-layers[specify infill for every N layers]:N layers' \ \ '--perimeters[specify number of perimeters]:number of perimeters' \ '--solid-layers[specify number of solid layers to do for top/bottom surfaces]:number of layers for top/bottom surfaces' \ '--fill-density[specify infill density]:infill density in percent' \ '--fill-angle[specify infill angle]:infill angle in degrees' \ '--fill-pattern[specify pattern used for infill]:infill pattern:(rectilinear line concentric honeycomb hilbertcurve archimedeanchords octagramspiral)' \ '--solid-fill-pattern[specify pattern used for solid layers]:solid fill pattern:(rectilinear concentric hilbertcurve archimedeanchords octagramspiral)' \ '--start-gcode[load initial G-code from file]:start G-code file:_files -g "*.(#i)(gcode)(-.)"' \ '--end-gcode[load final G-code from file]:end G-code file:_files -g "*.(#i)(gcode)(-.)"' \ '--layer-gcode[load layer-change G-code from file]:layer-change G-code file:_files -g "*.(#i)(gcode)(-.)"' \ '(--support-material --no-support-material)'--{no-,}support-material'[disable/enable generation of support material for overhangs]' \ '--support-material-threshold[specify support material threshold]:maximum slope angle for generating support material' \ '--support-material-pattern[specify pattern used for support material]:support material pattern:(rectilinear honeycomb)' \ '--support-material-spacing[specify spacing between support material lines]:spacing between support material lines in mm' \ '--support-material-angle[specify support material angle]:support material angle in degrees' \ '(--randomize-start --no-randomize-start)'--{no-,}randomize-start'[disable/enable randomization of starting point across layers]' \ '(--extra-perimeters --no-extra-perimeters)'--{no-,}extra-perimeters'[disable/enable generation of extra perimeters when needed]' \ \ '--retract-length[specify filament retraction length when pausing extrusion]:filament retraction length in mm' \ '--retract-speed[specify filament retraction speed]:filament retraction speed in mm/s' \ '--retract-restart-extra[specify filament length to extrude for compensating retraction]: filament lenght in mm' \ '--retract-before-travel[specify minimum travel length for activating retraction]:minimum travel length for activating retraction in mm' \ '--retract-lift[specify Z-axis lift for use when retracting]:Z-axis lift in mm' \ \ '(--cooling --no-cooling)'--{no-,}cooling'[disable/enable fan and cooling control]' \ '--min-fan-speed[specify minimum fan speed]:minimum fan speed in percent' \ '--max-fan-speed[specify maximum fan speed]:maximum fan speed in percent' \ '--bridge-fan-speed[specify fan speed to use for bridging]:bridging fan speed in percent' \ '--fan-below-layer-time[specify maximum layer print time before activating fan]:maximum layer print time in seconds' \ '--slowdown-below-layer-time[specify maximum layer print time before slowing down printing]:maximum layer print time in seconds' \ '--min-print-speed[specify minimum print speed]:minimum print speed in mm/s' \ '--disable-fan-first-layers[specify number of bottom layers to print before activating fan]:number of bottom layers' \ '(--fan-always-on --no-fan-always-on)'--{no-,}fan-always-on'[disable/enable deactivation of fan]' \ \ '--skirts[specify number of skirts]:number of skirts' \ '--skirt-distance[specify distance between innermost skirt and object]:distance between innermost skirt and object in mm' \ '--skirt-height[specify number of skirt layers]:number of skirt layers' \ '--brim-width[specify brim width]:width of brim in mm' \ \ '--scale[specify object scaling factor]:object scaling factor in percent' \ '--rotate[specify object rotation angle]:object rotation angle in degrees' \ '(--duplicate-grid)--duplicate[specify number of duplicates for auto-arrange]:number of duplicates for auto-arrange' \ '(--duplicate-grid)--bed-size[specify bed size for auto-arrange]:bed size for auto-arrange in mm,mm' \ '(--duplicate --bed-size)--duplicate-grid[specify number of duplicates for grid arrangement]:number of duplicates for grid arrangement as x,y' \ '--duplicate-distance[specify distance between duplicates]:distance between duplicates in mm' \ \ '(--complete-objects --no-complete-objects)'--{no-,}complete-objects'[disable/enable completion of each object before starting a new one]' \ '--extruder-clearance-radius[specify radius above which extruder will not collide with anything]:radius in mm' \ '--extruder-clearance-height[specify maximum vertical extruder depth]:maximum vertical extruder depth in mm' \ \ '--notes[specify notes to be added as comments to the output file]:notes' \ \ '--extrusion-width[specify extrusion width]:extrusion width in mm or % of --layer-height' \ '--first-layer-extrusion-width[specify extrusion width for first layer]:first layer extrusion width in mm or % og --layer-height' \ '--perimeters-extrusion-width[specify extrusion width for perimeters]:perimeter extrusion width in mm or % of --layer-height' \ '--infill-extrusion-width[specify extrusion width for infill]:infill extrusion width in mm or % of --layer-height' \ '--support-material-extrusion-width[specify extrusion width for support material]:support material extrusion width in mm or % of --layer-height' \ '--bridge-flow-ratio[specify multiplier for extrusion when bridging]:bridge extrusion multiplier' \ \ '*:input file:_files -g "*.(#i)(stl|obj|amf|xml)(-.)"' # Local Variables: *** # mode:sh *** # End: *** Slic3r-1.3.0/var/000077500000000000000000000000001327442435500134535ustar00rootroot00000000000000Slic3r-1.3.0/var/Slic3r.icns000066400000000000000000007434421327442435500155060ustar00rootroot00000000000000icnsÇ"ic092 jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdef1Ÿjp2cÿOÿQ2ÿR ÿ\@@HHPHHPHHPHHPHHPÿ 1<ÿS ÿ]@@HHPHHPHHPHHPHHPÿS ÿ]@@HHPHHPHHPHHPHHPÿS ÿ]@@HHPHHPHHPHHPHHPÿ“ß}æPäW —9ŽÕ7çŠÀbä‰P1iì•}”eInB9Æ®wE¢¢8¶X´!BfÒcPÕ;td~•E [åí9žÆÿ"o ‘»9IáÕs˜­¤X¥Žª `­Ï˜¼eí9GÛçàZÃé(~ó%Üè¥cÚ²Jµ")ξ73þ…}Tïœ}Yn¿ÞN%,óžÒÔ‹Ö¸Ÿ÷Ùíj¥à Ejvy ýï”LG̦ì_v¥ë(²æ×J=?QØ9ö4EÃi4 (=%œµ"n¬hkM^ýWÞ8pušRi„ÚUmêÙ8.ï]Þ¼¾^”Ëoß}æPäW —9ŽÕ7çŠÀbä‰P1iì•}”eInB9Æ®wE¢¢8¶X´!BfÒcPÕ;td~•E [åí9žÆÿ"o ‘»9IáÕs˜­¤X¥Žª `­Ï˜¼eí9GÛçàZÃé(~ó%Üè¥cÚ²Jµ")ξ73þ…}Tïœ}Yn¿ÞN%,óžÒÔ‹Ö¸Ÿ÷Ùíj¥™F’Ôí'«Ÿ(˜—wó]v¥ë(²æ×J=?SZíLzJŸõ2=æð1ôãæCÕ7¡o ˆ~«ï8@B6æ ÕVÞ éˆO.L{Ym)–ßß}¬PäÈ®‡[P*D÷¬â ·ƒ9o6UÁï;~ã©,é|zÛÖwIHbX¡¬®=¦Úêà/Âr/¤=º‘4Up/sC"†2ÔQ4>–ufVa8ø¹·E6I º´N툻—!Á_êF>×ø=R¬qGžý®IÎÌ ?8,œáo€·²z^öw<Þpv(*J­#dt<2ÇšôoÂ@™½Ñul¶ÓÊ”ÐïÓpªª‡ìÔŽlÖïjðÏ›ÁPÛïÁi;B9JÆ6èÄ¡Ë#Kß}èP‘œß:z¸QÁÂÍM5oëŸOðp+œ­vB6wåÇ«ÃkLÕÜ;À¸¥9•\a©ŸSJ³òzn-`wÇ+A ‰ÆÔÚ%•-×Ç3Ø« .˜0–°)U§×˜D ¤­?å¶S·«Œø2s~f¯Ç·¦•O B®r Lüïãh'ë©V˱Wç=¶àIŠ’uÃÒŠ!!baЦ‡'Ôñ­Àò×8A|LM{‰¦‹u-ßó¡%¯Ð›5Cl ývÃ+7îx1šs—T€I\®÷ø¿ÔL=¹ÐÈ\¶I}`”ïæäÊ?2‰x˜Ͼ­Ÿ}e?*Ô[îÏ-…­`8HÝ¥£rƒúPWÆ5H`µð)E{ñª£ðSϾ®Ÿ}e?*Ü[îÏ-…­`8HÝ¥£rƒúPWÆ5H`µð)EÂ}$øÁœ†¥Ý ªôP+Ð/ЇÅ`[ŸY\ÝØ—Á?GqËœ*MX©ÝÔUõ›¬†xÁÑIA#Ùï^n¯ž2ÉPµ-¬T£Ï)ý¡lNÏMô÷Hwë$[&F7ª„!š?ˆB3É}u’:å«yë:áVIË„"ÆEzï…zÊȧ;T×[¯~ºÀ9„%é|ßêß:˦&ý6«ûwllÖ(©Uï<^îÐKÉŒc0kÄ&ù‹øÚµi¾¨¯ÖÇÀß«C­Ý°;¼üÝLŸùŸWuË(’‘koWW7L8ê–÷‚±ƒƒÞSŸ.6Ô0V¾:r¾¥>)/ ¢ ôVž¦ Ë© Nn‹ÞѦT Xƒý§m›©Å·‚g:˜ÚÛf%¼FiF«èêÿÌòå°ÊàÇ$ þ´œp@ï°‹¬F›Á÷8±šØôLÕÎcgÜk[ë`ˆÆÀ¹—²1ÞËõ!‰y‡ØaÊ6´`ãŸ5xÄQ\ôw±@øéDx™Cv—åž„åRÇÚëc¬}ï ˆeùLŸl‘‘ÊEÙ`šŒú'a‰Õf}y´;VZýtuÛ­´ÿÄ>4Ú\µl!H\¤¤ÔýòÅïχÐbl@Z½…%¤Rœ$gÀ{o×H$D»™,œçÓõ6^5–€*¾~ew# V g[R{ÿ0ñ¿\`ÙÆŽ^à,?~ÙGOårûW ×»16¸®Ù…šÕšÍŠÝÏÉù;èÅØf£ç–X¢õ_@õ¹3,ÌãOÇæ8}¡×†Ši=Ɉ¿Ý©˜¨Ô¶F–@™=mÖo¦z‘´-:j Óèº YñÏ%F+ÕÍÙÝoaâîÐÿYy†Xi³êYõ}ŠªŠé‚ïÊ–’²ÚIð‘k²ÄXlð]×óxÖtØ’-ÑV.To»_™Q T­¬§÷Ë·PÓ³í#JN…Èù¬`Ñ‘èvJ­ #¹«¸ÿ€`ø%tµf„}øª"½=@/”ƒzvÝ<Ͼ˜Ÿ}9}2m<ÊÍ÷+F¾¨¨i&\ŠåqÚK€’©ŠI%+MõJâNO{œó|¤¨bu-ÚÏ^±^FµÊ‡£@× x&ÛHm[d& âz¤EñØ37ƒjÔ*CpvÚÀxŒTõº„p¬ Êyr†•"ìŠ$IúvÊ Žn¶ïÝxÚóRåuéKnˆçŠ_>yÊ{éðÁ1%g¢¶ó;3;#C$å Œqh.áÿ)Rä¥öPÙø–¨ã<WáËOôï­Àew㤵T†—˯‰Gk%OÕ:åÚɯ//u &ûM¹à€ŒËN_a°ˆR©IÛvø®Ì/_Ö 0‰î‰l_Pï‚— 6ÆȤ3iËEd>ŸC]¶C{ˆÁÀ†ôöBÂ#¯1:Ð>äC±u >#ÒveTAì,$A½»2EÊW|L©Aâ2%Å€rã¹7$sZ–ñfå5æÁ;Úäê…Œz_}Ôc¦ø×¬_Í¢¨Ò“×kr/á øåS Tþ^îÌ íôš/íêzí WÊ"`êµ7«¼äŽAE‡ qI!ôU½ïw×\_ôòÆaÄ76ÙÅÆ\t…BIùŒgŸHÏÃq§á¼3óÞ ³^Ú@!Ú™ÇL*LÚh… ~`ÕJ`E%úøðGé?+‹eHú›[DAâíMgÐkå¡pdNCàäQ5—w°ƒd*/VÕ¾i̓¸jÚm fDaZ.ë3oËåz¦uß õÅ4žÞufœÙ‰‹O¯è_4ù%îwØ=²¡äßÚ+OIÓ†W›nò§Ä¾Ü_ªk3Ä({Ñ/óü${Ãqîj- ÔÒAç§ö© Û†4-¤ýdŽÑ ˜¬hã‘–!#±4_/’FݲSNU‚.¤D×܉'6wgxÎ"ö,`iºR»–[{È,Þ¿ÉB«¿3~"É9E“Ys$Œm ~p›Më.æËǷżÙt`ñ{¶·1¢;dúwiS§°¦wÌ ùÖ¢X0„¢­ ‡¬+7z“„3󙽨ÿB|ü»µ¢ 2ƒk'ªdæ–væëÒŽ8Tn ñ•&iÿ*Ó‚ÕÛÐXJÈüöúö¯¬@€,»Ôƒ÷:Í‚éáaé‰$äž7>Q(VC#f)¥Ò©Ò¯yžBo2ãз“ipÛ\“W8Hœö’YùZÙ˜¬›3ruˆ~5²±#[ãîèíVì‡\¼)(b QYJ.œ,5:â[ËÅÒk#Ú„ðáéqò|ŽC‘0PâæH¹A±äƒÔ o]UŒ°‘ØvÂc3§–âA½äÃs-«haG؇½@/³?¶œ)ÚI¡ÐÓ tv¿S!ÙE9‰ZìóÌ&KX¢´µ¡û:!)ºyÁù7éoj£d‹rÑ7•Ç+˜vì1 ò!¾xÐ;ÁÝ‚²þ=¡:ÂAu3©šÏ|D*B—ýÉ®Úw£ýe_-·Õƒòð}1ý>[Úºº›^Ãjw¢´5j Ø3;¬£àßÌïu 841;¼-~ᣔ,:kXñû€|*ƒN™ž&ÕËÎSnÌ>”¤c±Õ.* üŒÕ9íÅ 'p/½Qé5J&ª œY„ã15Sgaº$AB°é@Ót-jhHíRºÃ®ÉǬÅãÝÕi`”üÅ3ü–7›R¨Ê”¤zc3éeHtµ“—[Ç@™¦-L½LÿkîAÛÑ-·«·ˆÆ_áÝþË'd]£Ïpó¢ø’ª"LÆ¡ =4WóZ»mæÌ.NJ± ê¸ï>Ø¢Ž“y2ú7·–å—êëÞÁú´"·^ÎñY/©NÏxˆ^)¢CûîŒ2³W3\°Õð„H¶0zïXtU=Ç¥_…q»ôÕ^Ä ‹âHÅðo}âf²*eCX} ŸÕ«¶^Ó›aú_¥¡žÿ‚$£Ü½?Çi¡¡’|Zç(«U¥DŸýÞUs?Ÿ®W -›:jåÞœ²dœn°DŠ›‡·nOd‚ðs[¨kÜIJ¹p˜âÈ!–‡ó–>m¹mÑU’ÛÎû"gÉ0ð†Í %–IuÈ“~MÌlsÁnÂË«m&ûë\KrݰªÎÔ…u†éxRŽªÁ¯GîÃV×ö% ð'ÆëÃÚ8Mæ·¿=ÕZ‰ëÏJ"ú„²³Ð4îzó%"³Fj˜òËÞmî¸5GÁ±¸-+FÝÚœ‹áö Aί¡^BËÅÞ„/úxA0‹ðär¶·ÃÖ—C=¿ÀFoùƈB1„`¥2q+Üö| ¨P":a8ij@<³ #%žSµaä‚J‚½è™¸§¯\yŸ$¾5:±%Êî¡L-þÃÚWk´g93ƒ—™oÕ™³óV2hX ²±`i`0XááàYBÁ­ñIKºvæM~áü#ò¨@«T@ù¦KîÃHOÿ>Œ#ؾéqì¹ 3L§àLrPŽÏÃqgá¼SóÞ ³^Ú@!Ú™ÇL*LÚh… ~`ÕJ`E%úøðGé?+‹eHú›[DAâíMgÐkå¡pdNCàäQ5—w°ƒd*/VÕ¾i̓¸jÚm fDaZ.ë3FGò÷•mý‰ðV-¼Êц¾àWÅ¥FÁ,—)R‘m27æšÊ¤ÓÒtá–.…k=6Þ0þ[ðÜ­ŠÈÞý¹ìŸ ºN­\Ú¢y#Ççúê’+¦U¸Õe6»²ßÔ^ ®O3[E.áÎf­$r2Ä$m¿ :‰%ˆî +¥éT¦ytRƒ…UN–ªäu“0D]fU¥ÙÕŽS VaÝ.>K›mìÉ„#Q¡rW÷_ ,c9Y‡Z® [.2ißq žŠø72Âç1|‘aõ¦Õye6L…³dÿv»Ï©Ÿ¾•ôí(ü’ȈI†¦{é–Omöï`ïxMìJÙZ™6w }•uß²±ÁøyìY<…jå ÐFä'j¶IÖjÉíY­O㈔ðÔO;‹šTÈ%S!f%mºßhšZý\A/—Ó³ô1BÝMîm« Aø `³mæïÁÙÈp ‰peä#ˆ~5²±#[ãîèíVì‡\¼)(b QYJ.œ,5:â[ËÅÒk#Ú„ðáéqò|ŽC‘0PâæH¹A±äƒÔ o]UŒ°‘ØvÂc3§–âA½äÃs-«haG؇½@/³?¶œ)ÚI¡ÐÓ tv¿S!ÙE9‰ZìóÌ&KX¢´µ¡û:!)ºyÁù7éoj£d‹rÑ7•Ç+˜vìƒ$C|ñ wƒºeü{Bu„‚êgS5žø0ˆP°€ =$d­l´‰ƒBO¤á¬¥ÿS彫«©µì6§z+CWö ”Ô3½ëñÉñ1¹ñ>¶ÂŠçÇ‘ ÞæÒÝÑ?Êa_Õ!S yoÎ=ÎÞšd™uëÖ'-…Gs“µ£h 2Î,¦ –‚^KÎwOl6Û¼a@4´ñöl¿ EäÚ\öáÕ¢žQºh„<à6ÌÛ6ó@€=îâÓʬp‹Égš%"?â1*51sÉ;Û"ú¬©ãŽv¡|±¤À.‚¥áäE`—ªJÝ'Î"ÙhЃ‹[~CY÷žr÷*WyJHZCâƒo0+LÆ"^¥’ÁcV*ÉaÈ Í¹fz=ëÓZlûŽº¶ÛõwlÞÜ[i§™ \qú´!]/gy=?©NÏxˆ^)¢CûîŒ2³W3\°Õð„H¶0zïXtU=Ç¥_…q»ôÕ^Ä ‹âHÅðo}âf`°°n;»¸tºÕÛ/iÍx/h[É…³rœêÆâ/zbÚIîNÚû¡pö p㛨¯€$¯]”ºñ(óè”Å#6 ^ჾe—ãÎòórH{ã§š¿¬r®I5tì§Ã°ÞÆeâg%iûeýjF¶6•Œ¿uÂÕS”ˆPf-°-×LíÂöíÿP—¬"U¡¬qß^‰PŠ?·ÿ~Ú5&©îÅ.ˆd±ó\Š*Ã<¿%ÍrŸá†¶¢ò!ûI!Ï p4Ê¢ñ #óâQ>+ò7ø¨”LSÑ!Õí@0¦é~ùüuî}W µ˜ßs °t'´}æva[4}ÊþûžŽ¡~¼ÍSh"r„—ÇÛ«Qöj\~Ú³`þ¶ÁæHE’›_€E;n&YÝJ®seƒÈ¶{ÿfa/æV{ ÞBÁpfQÂV,CJF´Oó½HŠ@!I­2› È;{²„ë;tyz&Ü—•×âp°†Ó³ÛÈyT€»ÅöÈÇB¶[8ַΠ-lU“3ò¥ ›†ÀÖž÷õPßKÖ` o³§š>´[9w¹ãNÜ:Œ3‰{[)Ã$P,ïUbÈÿrxwÍþ$…v 6^°ê¤©8“î6šõ8]þÉh Wm‰õÒ³¸rÔ¡ç[>{4Òc)D~il+}Ve¹‰I©Ë@‘tJWG-–”;dÛ”óN9°?SâY9»ääËÒeü„k¡Q‹@±Iôúç´½‚à_~>àJ÷2¹ã»Ê6üÀÿg»t…ßCÇ¢b g$rà »ó|¨XüšrpÞë¨Ä­¥ìJbû¦ÑÙ¸;Lžî‚çüJÞ«ÙËǽqžh7Q@T""<šÐKû+`Ù1+TßȶjvÙ&8¥èPd¢¥mB%#=› òkߥ6§ `ÝØAyV Ò\ÉAo/vÚ»è3Â#þ&|PI¶žò¥gºŸ6üR契©ê2]çRãÙ ^Ù¢òiÓhšwŽ™KŸÒgxoQ-ë½Pœ\à ò¥èi)åЯ˜,Ú3Ÿ¨]Xº=Ém†v'×RnC¡ä] `áÈ[h[ÓhòÄ2ã¬Ü*T Y€t믟ÙJ‚áK|+9oàzÍÚð¦L]u­i•„ßAŠS‘«=Áa=Ϧ6‰\¦mÖx¶oywÒ–´_ÿ=:‰¼˜L?:UϦü~s o¬œgg!j$Iá-$P¸ dPs@zEš›ø&ðzœî˜M$²sª‡yVA9îº@~¬Y/nç>M5.›[®;¢Ñ-|ýGQÕM.'v‘d3óVA¡o7¦|…Ú|½&Ü.„þUÒÎÒ3Y¾Þ 3OŒQ¶ó4ioFë#ÿ}”¸9¯d0s“|Ì7Æ¡`ŠÈj\k­%\×ýÞ—͆åà²ÍÎlOmcÍ;Ò¶D\nMqŽ1ѾÒöµ^<Ï$ŽuÉõžè¸ûXuñD)¡p^oB¶P™·/øÕ 7aæý”s<6ÌpÑ¥ÐÂ{2…k&Ñ—`+C=Ñ’tÎQÿv~CÆ×þ`èäƒ £e§…cûÚã™™T¥>ÊuÆ’ä½e´/Îid$„¬fàÒnùoÛù¢á59ê¸Ã„íãJø¹ˆÃÈbþÐØß»¬F»D7uݤÓ[%.Oö5µ0’F9L ¦ÇO"å9,í›êVÔÀÆ©r<ÍÊÂORv¶ td­r4ÄnÌ¢/Ññ탛÷ò×9/lÞïf­è¬š®aãXŸØi_»°·ù3XMßF \{¥(d>×ÍØ´^g¢Ì‰•Ðý™Î!ø“¬Á£¦°=È0(À‹o{2á»57Šìâ3lN܇Pñ-uÃÔ5óy8m¶ ˆ¸~¶ob}”£è}m3Id“Ú‚˜°’É`2 *ÙÏDäïÉ|ÉFo”×5‰Ûá¡,Ôç°öos¥ íÉsïF¹ ¯lA­!AX9)Ð!¸°0¤œë@DÒ˜ÑÙQXÿ¡wÝj›©„B”Œâƒ€B–3r°ä9÷tø$èE¤&ë˜r”0A‰5õõ8Yaî0ºNàIr¢¹öRÎýD„€mÉh!tk<îõ>ƒ!´S¶å•òõd#áïùs0EÏe´˜mâh×^ì#&D‘É)]ŠƒT]DößÍ‹½x†p. áÖ=¢Z±NÓ`»öS ‡-×I›þÿ:±sù©‚UdêÙè\> ¡ @Â4Iµ-¨ã u=VLÆiÊ{ð̬iÿBìí™÷ÏÛ±Ág$§“yùcø:\Û6[»…œqŽ/ãó_ú²©EÎ œ6U­Ü»>ÓØÚï§Ä»e²ÝØëPè€ÜîJxwµ› MV }úTµ6 ÄÄACÝ ã(JoBáýÖÐw¥<|]9cvšÁÅ×EúèSH^Æþ+_4$N'c¨µw€­B°§¯¦<ä *B:ökrH ¼u$²³ðÙƒƒ†C¢€ƾH¹þÙâfßóm5¤››ÙXšæÓĸS¬ZúŸx~|¦³ÌÀK¼ d‘»æt0O¬4è $‰›D[nåû¯»‚  Tö©’‘ÿ|ÎoK…¥r‘[˜_Ðà…‰²¬ ÙnÃàKoV"ÍG`q3ݤú%Ë v¨îy¨¸2"]W<ÆÙúkj/‡ZÙ~ 0úQ{z> ^fª(ZRFN¸siôŒ Cì’2ˆÏÃÒö~3óõ:ãY–Ž›Uß™»¡ÃH_í‹Ô;¦ÝfDSùŠ@¯Ž¶ï "úQËEcç!‹Ù‰tBé" Ù2ûV̽N¤i«=‰Þóº¥ÙˆJ€y¼ŽÄ}¶¤5›°ïŸ_wU'ÄÆ^Ôå/_ž®©RX:M•ÔUI^±á„ÉC}¦œøL ¢ t„|¡ç6€ßÑè%§ß°„)Ëö$AáäÂ0eèôn[b·s M~–a©ÔôçÛ§•˜2ùÌh0¼'¬ü,ý©÷bgRz¡ñ˜L{“5é[Uš÷t<ÜaPÖYº¿Môæ烂á*¸´Ú+òA½PúHÒlåŒòíOÉâ{%•,‰ÖüÞidq²³•µü~êKpl9¶ûë?²mS°/¥®¶W /À-ü¥<ª1³™‚1§-3V–5ÞˆÖ\l4ƒG†JÒ­Á`I¹BÜL-nR÷¯A ÚD&Kn7÷Hã ßÝ`êÚ:)¢«7²gÍQ§™ŽlÕí2¸$—V7•^- ù·#ub¹Â¼"'ERP>éܬŸn€› Nm?¹÷ÓÓqUŸøKYÒóx¦^ê„Ø°Ù/3 ˆ£ÎŽiYѺž}oK&‘%ó KÅv‰8Oß<”ÑHðÅDèX}'­L {˜OÁƒ/Vpg˨PAþvK \ܦ/Æ~¢SÆŒW|LU{ /mјÖ >hT‹y6µ‘á¡é€ê‰•E¸‡NRíâÀ¢„Ýö‚ÞPBÃZb‰Iºïh=SÔñ¶•nõhþ›rsõŠF<+g¶ki(‰ö%›ÉÚ‰ó« /Y;P=}~ý¯F˜ÜÁÑ.%H”±ÒŽì”¦,(ô_0Y-«‡ê×°ÍE+±P‹®™r(¡^½§“%ÏXá:™¯Å•Ûù`6µ+f-·hfÔØ*ø ©Ü±$(R¾®IÛze`×÷È üd‹H˜—ÿN@XãFò¦s¶r«e³Ç“˜„H¿Hmýë§ÍXÇ\åˆÕÄjÎåï*¤tÕÈ«‚ªÊ„ibi ¡Ÿ=R턉|©±Ž©¥ç žKéY¼–c.ê ò)Dõ6 ½¼M¡}9+¢8Gñ$%Q ¹.Qc4öÎM€-P˜ªávŸijüX þ¢iò¾`q| )„A×Úƒ!1¾"PÒCtÞòwG.\ÝóWä¢Ça*£ÊJQ/ïxàSΈo­;è=Ÿ;sdAÄÏ…§3‚3K)T¹0À‡Ã¬ü ‚;¦4h—vi ì+ÌŠ°~$ØÂ›´¶•­äúBz®ð0àÌD•3å é8•g>¿ê W¯l+IN¦TÍÀ¡¯ôŒcNÇÍê£Å­Î7PDÁ55Æ Žôu$넪¼ËHä“ Úi¿8ÕßϾæDÑ0Dex»ÙSa(•Ó\†¸‹dÝÔÍÔß–¶õ™¥'ñ·h(ZÙÞ— .RmØ1ŽIî²èÓÕÊTtßN˜ô5ÕŠ }58ågZ­‘‡®øb¸é&Âö“‘&ÿY"zÀbÛìw·úú¢lƆ½UW%üP“*6®„ê'H¦ïYë³{à6)µ‰;Ú½–iMÎV¯/F¹XÆOVÒ%„ë³Id©¿büî§€ö…`ýŸüšÅËum8yY‚çÑûLh¶©8ün(î]Ä ÀÚïEÓzuJœ7ÐÈ+—‹@™o}ßÜ<‹Ž&@J Ÿ9ë `n}J£&®`"OnÇÞbò¸%ŽÆ`ºóÄùÉØjq“2mOK™žó¿Ê6qã묪OËÊMWÅ€92­[·zèQ)‚üU¼ÙÑ Öo”Ï/<7”í ²j;ÇHÍŽPÛwÌ[¸N"¯ãU0ýaÝùy-ùö"^W±ÙÿhmG ûå'È•‡ “ßu´«\$ H'ÃÖâõdµ.z ¯'Ø` ž¬‰€Ã…'é5Ñ0ï»ðÝ?B:Ý Œ7]€m¶õí«(Ì£|âÏRç Kò‚ó©@2ÐÀPû(1Horšqæ÷Іæ¡>cI&%lªh ª=h¿6Xhß3ÌÐ'ø_tV¢|$U»¥Õx Ô"wFí,šÕP)Û·á§rv óNf6ìž@OY4kw^i> ½Õê‘%‰(ËϳWsD8Ük¥Îå!ÄYîm³9×ÃÂR ŒÖ&èKû«h ®ÚÚÊ.×Osˆ8=#ÜÇ ¯5G‰e*-;’Í×ѬŸ_!çzJ f™9ü¢¡Ž^"z¶yñ¨ct5 ï»Ò 9ëÆe¬Í!ùŠVU›.§Â×+{:çì2‘²¥t9_©xéØ#Âçäe#¿Î^ÚÐÛÝqÚcOBã ‡M'èEéc«Z-7~ÂyÈG9è²o¾ß÷R•xxä¬èÃ$€’àÞ-d¢(þWã[²+zåm°u¡êdDÙe¿{s£yPucŽÑÈ c}À4òi~ôqcÌ;ø…æÂvQ)p63åÁØÖ†–­ —å»9kkÚgòÿF^S'rôѱ®æ¹µìÂýñ¸¾M¾5ýê¡ÕEé,d Í›v°¤÷5eál8ªÌ‰:IJ‘¢lØ/ôsü­N¢>¹ìß(Xt¾ÍM‘"µ·ŠáˆU\kþ M÷·PJ¶¬3YÅô­é…éT(+>€ÃÕ 4CaÜQPšî°øjH_ô~ph¶þµõ7ß ë€m¹¥¢ÿ,Ìfðim(û¯*è^S@fÿuœ.ç/‰;õ[û‘{±.#Q[âWÕÄÎz'Ðʧ sQ­ºªhü.©QF«Ééÿqvê_Þ±~E(ÁD(åÙãÜÈ„<Lôí õFùLãzÞÜá‘Àó aH³™òñ®-æ0û1x"±™*Û"__Á>o¹xØþ54x9LÿLF•Êñ·â|+oTÚ–8íÐÆ§ÿ _ˆæ´EDŽA” ãh5*X×Ý1;¼¸äÞåY!Ñ|QìÎq_ Zê îcï\½!nÞ9[$w®5\-ìôAê…4c1Á­âÛý¸å삗•5?¢*¹øÛƒk\ä=wÝÆaRtûè²Âü°Ã§­ãéPZñOƒ³KjônþP‚cKf¬Îx}a‚Ý@Aûáý™5ê;“ásã_ÒÚ2ýOÿ:æP®þ/þð #û­™ÖÊŒiS‰ÍL¼Ö¶C¥ÿ8…6 jqo¨wÆËU„ªT…‰ý/$þ]zgäñëÌ-Žú¦€®ˆ²/}ÔeóèílòÚÿs Cì™ÔTÂÛb¾ätôÔõjg m„Í}E©Ë9à.€«Ë¤Îç—YšÄhzcGTÃåK“éoÄ^iÎýüÈ ^µ>Õi·7;µ†IVBîœÉ±8tÓY3¿ !ËXÓa"å2E;O¬ ×r²$Gr»y¬L—ÖÉ Ã#°n7~!þyR†dÖ4§¢KøŠ¾¸³$àõ¯.½'ÏÃÒÚ~œóóõ2ãY–Ž›Uß™»¡ÃH_í‹Ô;¦ÝfDSùŠ@¯Ž¶ï "úQËEcç!‹Ù‰tBé" Ù2ûV̽N¤i«=‰Þóº¥ÙˆJ€y¼ŽÄ}¶¤5›°ïŸ_wU'ÄÆ^Ôå/_ž®©RX:M•ÔUI^±á„ÉC}¦œøL ¢ t„|¡ç6€ßÑè%§ß°„)Ëö$AáäÂ0eèôn[b·s M~–a†àD†¼ Z_Ê€_ROƾAy«3Ä',ƒåþ÷‚¡Á,ÝLO³ÅAÓ½€Ì=iá ¾=ƒH/µÑ¸Ÿë¤‘HY,NuÈ8¶ˆ¾…}FªÊÿ7Gç>ùgDVÀq`OÍæ‘6Gµ®Ì ŒŒ´i;®bHT™ň]èŒÅæÏãƒ*YªÛ¥ïêgS´Ë®š`.‚zýíJ‡L»ç:hD]³êKðÛ¨cº çÙ¢*”N•XG¦¹YÃhçüã³êk·7û¥¬z¼¨|Ê…ø7”VŠÈtzÊÇŒY2ƒË–´À3ç¡ùe`¸,­ˆcáÁÛâK†wigNÎòô´¹Ž+vÜ4¿’;²ë!”úð´ƒ°Tð|ùŽ®ôz'+¬„€ƒ&`¦CRóÖ”§.Ý»ï¤Ø®áž¦ý÷_vÔG÷iHþ7 œW›|£÷Oà¥Cá) 9h8³?t©Á%ß—ï…yñ¦h¦¢rÔ•T¹\{I¡p•hr6…xéçp¦*]†!a¼tVxø›<¯6rHª‡šñÎz,V8ÉGÌ b8ÛœäÇm‡a†¸n9Kz*Êug¿,©@«=+ VOÔá†ÖA¥OøïÓ@·­oˆÍ΋´¼·âKÞfÜìã‰‚Æ tV,ú8êbÇ=œ4ºë}&:ÅC`ùCž +ÜGêõ£þ.ðZËu4:ŠU^bìÆÓX>Ædî*×{®êü3ORÈá€íPí=zñÍÏ ŸÊ`tã¼Ò9‚Žd`© ¾„Ñú-š–šy€E_ILÕ^oè`j¡§¦j”$+ÐçÅD&ç‘þÒí*Æ­VÜi»Âó:÷-Û÷ÿ)¡,û‹UVùgì²™èðî1ØüJ¦áà£þ‰±·,ºRÙ5MÐJNßžëFxCjÛj´ž™^œO¾î›ÇáôU"5 š#8j±âþö™vo·×¥$¬êà ’£ÌÃ"(ó£šVI |q¾³¯—‰æG´$)£– øýéÉo6ܶçMj î§¸){üÞ sÊÅTοgû|ó•Ñ䆿»¸ãÎPÄúP•—K$Õå‹ÿg+-ïØµ‹ay>ÓZ»Trï—¹â9×ac- Æ/£8M†¢Ð÷a¡Ÿ[ BWz®XñèËð‹‹ÙÂð@®Ðµ€bçž9âÃÉÚ‰ó« /Y;P=}~ý¯F˜ÜÁÑ.%H”±ÒŽì”¦,(ô_0Y-«‡ê×°ÍE+±P‹®™r(¡^½§“%ÏXá:™¯Å•Ûù`6µ+f-·hfÔØ*ø ©Ü±$(R¾®IÛze`×÷È üd‹H˜—ÿN@XãFò¦s¶r«e³Ç“˜„H¿Hmýë§ÍXÇ\åˆÕÄjÎåï*¤tÕÈ«‚ªÊ„ibi ¡Ÿ=R턉|©±Ž©¥ç žKéY¹4+V|ž"ˆ¨oc¦+u-’ûE„eõæ¦Á飑‰å2äÑCÆDð\Š®;s­ëøm¬\-’°”J°«D{?süæpñ1ëÂT1á"õÅIf€‰djÐïÜ„HæÍŒ!Xƒd¥þðްÅèè±ÎÅb6³ôm¤£3áiÌÆ`€ ÒºÙˆCa9¨AnÆA~Ö*fc„D·ÚëôâTÚüw+âóº&z ô„×Løoú›_åH®XõÚè‡uû{ÝÏeöȤTÆìÞ5 WÏ12™ÕÈ4ûTç†"‹p€´ïÁjšN`k.í'¼'CÈóåý ¶ÆŠ»ßYNfúì×l›º™º›òÖÞ}Ÿ„ÞØ2o¤UôÍæ¾â€¸­H‚ø:áseq ú„J@û_²Ë2šMðõÞÿ[yâ¦óH©P“Wo/K ¡r D½? ±*ænè\r:ÍÕµ„ÓÜ´•Ýåäž<&(F#óX§¹ÒÛ®‹Üîº ê:Ö´‹ÉÅyZ¯dy~N˜ê,‡Í##Ô\³€+c±Ì· ‡ñÁjÈ wú l.ðúxHH.[®'îŽì ꇅë¶É SørASİa¾mP¶ç­Àrç¯\¡–xcÎNÒ6ÁÞk ’bÖhŽ´«r >„´”9ì'°U|$ [ÃÁôÍúÝq”ëÐ^‡Æ]›¸ÀÀ‰4[Çmå2Ö]}qg§‡Šå`Ï»¾«0<{´ȸÉ}µ€ÊþJ…71÷-’ë™ÐS›»1ÙE áW‰ ­˜î[C&$Á>O•Ì€@ÃËèwÁ.Ùì¸ßŽ í½ý]à 7ïq].ù£ŸXÀp)7*ÔéóÓ%‹ƒcE)a`¦¸b*Ф“q*? F¤à Îo㨌ÎÂ’sÆó]Ö}^íY™ß?f«þ&$Ä-UÁJ+ÑÅgâZ?¥ò1Á¸¡ˆOìÑ¿°©emσ÷úx¼RÖœOq5®7N][Il#b[eð¡Å@B\ør?iÕ'Å;”SYí³ÐÏÖŒnVi‰°V­›Œâ%îm.÷Ü<‹Ž&@J Ÿ9ë `n}J£&®`"OnÇÞbò¸%ŽÆ`ºóÄùÉØjq“2mOK™žó¿Ê6qã묪OËÊMWÅ€92­[·zèQ)‚üU¼ÙÑ Öo”Ï/<7”í ²j;ÇHÍŽPÛwÌ[¸N"¯ãU0ýaÝùy-ùö"^W±ÙÿhmG!£3GåBà®ö˜x Hör”ç].®àÈi€,qDŠI.z‡?ˆÄWa1­¾`rÃj·Ø¸`µE±²Hâ½Ö™FùÅž¥Ï@—ä'ÅßR€e¡€¢ ‡4ü7ųaˆoF^v‰ûòçš•°±/>EÌñGNÃ)”Á!‰ÖÈ–ë£\••:þ€}¦ á»r%PoÍrþàÕÈß|U¸×.ä®gVü,€§‡"ÄÆ– •À¤Ì…Þì ,möPs¥Þ£](Öw)"ÏsmšÊ‹Úϯٻ4°ç<ˆÒ•H¹_§¥yVÙ^ `¥b”íAéD¦9CÁfåÛ/ê¬z“¾ ‹´ÝH»aµ± f„6Zn-’ÓCÔÓ¸? ª ¦…ËD|.3áÆ0h>¬˜ì:ÈàòäÏz¬¼éI"ZD`—ï0ÕÑu;gÎî9Pݺvrê°­ƒÀtÐ~„^–:µ¢ØÓwê×[0¨Y=ÐËD-zE©X¢P:‡¾28wÆÊd…;âêCSëÁóJ9w‹LÊT?äÆ{…”{©ÏÆZ.~ÇÕê\&t¡M ÿnyLÂtfîã6I-¤¬±zþ bÆV”!Ól›¬J03µ—’Œu§aVB {¦lò.\#º4¦Õ2Ðx`]qºßp“©ôT2“CÙ­Xmï¢æK‚d+Ý×S3!q°âhyg÷!xùW¶±]Ü*ÛšBÔ‰J]NÚ©óØÈ9îiÏ«gÒ·¦¥P ¬úT#s²ÒÚû tÈ/Ìî†áéuÑÕj^ù(9³I9tO[]‰Ií22©1ɋ܎NË"Âü"Öô:þä^ìKˆÔ@`ÌÅfÏdx8AAöÒ¤p@5Å·jJ–£„Ô¥aÝ8)FwZ½ÒØdˆ¾âGà M ȾV©º¢Tc xôý7˜ÎûBøE o•§»[Ä7‚íGØ›ï›üQ>Ak—Ò‡“XÉýN›Ëïy^:<;I‰Ü½_yÒ^T¥¾‘|CžÀ¯Pn3¤É¦),GDýÎåæ3zÛV}¿ä(°¯§Íº.;8c|˜)ÕÒ{HÜU¨Ð¶ ÷ ×ÁʲÉ['åÐí1šEFYñê@*ÄôüsÅ”/D>˜Ê‡V¨âMÀ¿µ¸á·XGZÚ½tïï ôוªâˬ-’Ъ¹Ø˜i*‰éÌ#Ö‚«‰‡¡ex%§÷f¤ÒÕ2ªèÄ’/=©Ê‡¼Ún¿É³=ˆŽW£×GºÌ)Þ®íö•†µ%äUâu¤ßJ­tt¿äôÿVÈR4s`×<ÀdPaÏ»UÓ,¨èç+Åþ¿§¦D8mêÕx™ë‘>¢µÃ•Ô\8ÿ{›3…6Âf€¾¢Ôåœð@UåÒgrÿ}-J¯ä ¬F´ùèfådÁß×'½ ¯ ªi‘…ž­-}lOÙ¿þÌm“ðx†zÒô"‡ä­0ò’êÓ vŠunŸPqt/ BjOÜàƒ1—a‘ÉûψžT¡ŸÙ'@õ©èE’1‘,Q¾]ˆá5/+dŸÏú©øw3‡`ä?ÛЦ<ø3M“ä“›eá£ßÍÔpbB¶AÃåm>2»tõW_#µÚ¸º<°—ˆuéê–šà—Ã}v¶I±BJ·ÌZ{.ÉQ1 `ÝŸÕ ²"Ýìõ4tÑ­á&‡ä‡×°‰9<«7½ªb?†¥…FR—„wäÖ|YÖ¿ðSõ#¯ÊãÍð<ÿv€@5ÿ~¼÷‡Ø®výI*ÓËRÑ·÷£BÍÓ)vK„\xiɳ1uú˜T&šš©è–Ša£FáÂö¾‰Å9 oHè‘wš¯c©SßTœ…Õ¾òÄ<˜YZþGr8=DŠ'5{r9\±ËIí-†*–©Ü5¢‚™„ÝèÈT=9'ôÏʲ‡©16&ÊqÄ”ƒWV‘YÖ”y磽ÎQm’ÊÁ#äð—s³¯_ná” È™ùn?•jpd¦ýaÊVÚ5^™._¦H©{k÷~ÕÑß2$ä­*BWUHÓ³H^_¿€Ÿ^A‡ô}ìô‘î³…Ýž /|ª;‡ø"eÜÞ¯”@Õ§¥‡îMÿz-µT|Y“QÚÝA0téh(ƒ)€Ìp,°+a R[Í“Üé?#^¾±¾ð\þHÁþ‹ Ç Óà†è?þFe«ÏÉYUxÌ7ü;Õcõ¬K?IƒÆž.ÉùàuÁQ÷~”兀4G¥ÑdÏìÌAíµm›ãŸðt]ƒj; 6µ×ªfÕé©§>e>ËûéC÷íRšl=¿õ¸–†kÙ¿ ÁTÖÜXV>ôoj†çþ50 ‰ Ú@¨ð*ê}æÎ}ò. Èø&zðfò®­ùp_ùÛalS‚]ü¿¾Ö]Ëò†ý•ÏÖYLˆ)ߎw£`òP…Ôð¶ì0ž°LZï³ñ¢®ƒ½ ~70m`ÿxÈ M¯!Omç€3gZO„ˆÚÛ Ëí­ùvæS4±r ÿ½wì«ñï!Á‡#^t¥häaL=£Hô­ôð,®^gܵát+MR™…¹Šú¹nÙÚR Ê—mÝDÜA¯ë‘/ž9Òöiܹëp£¨êJ¸LåwqfO™¤T‚uje¼$.¬{=×;™4þüvš~™½C5QmˆüdÙ¬sf—ЕÃÇŠ–˜OñÛ1¿9:€`åHÐÌ¢­DùMDLo›(š<ƒfÒǬõí ^×Î ˜ l¬Fú÷1üò`}`VŽó}Wwø½ä&¥0[Ë›ð˲©VéЌۢ~ÿ#jflzò¬À!5: :VLèôØ 覽Û=_“%.Óm cÎ"Ϥ†ýÈV"ðE,™,½³óUžî4Wåzû<¸m‡æ0wáGÎÂ:TæQÚjO§¦‚ù~ü/”oõm;´X~Ç#ÙçÉ\8—ƒÔ:¥QœÁÅÜ=Dü»û¬Ó+Ç µi_!µâröá)—è);VxM ¦0Ol 6ƒ°!KŽtž8p~¥$ùínÔ÷Â`S=>kì»oøÐº )¤»Øo} òË;fû3p5¡ßGb¼)òuO³áêûxð=%˜dÍÆ‹Xy|Ó&z\º:übÞˆu€&láö„wÅ£ÚYMýÈùM(€š®ƒQ£|¢æ?<îz&^ºÇ:Ó~)ìܦ¸J'ÊäÎKÀ…€]oß;àéSƒ‘-ˆõXœJ˜4L³`rò·sAøÌ3fÍKÝ&úÄÓ Ý@¾t L²˜ÆŠé›Hz©ƒœË`òÌÑ/ï âôN”×àÁLHôÍt(L\òG/®ÅE´`4…O´ÞÀÈÜ•Îc›QÞõœ;Ôq´î0‹`wQj:q¬•`ô4Ø÷*~­ÏqbÜ‘1`!•v\̸ ùœhõ;á;Gë'tŸH©x%ÆåŸKø²E¡ºùD:¬<‡ó6Ö1Nìï$¥Ÿ|´ÄÊ ¶œX¥?&Ú(#&wBY@á«8Sh¾U¼V*ïèSÎ÷®Ž‡taôÆnº…l^]_nVD²ôUCp£©±<ò6>q1”1ÃòYޘ녩xP3{˜ébï9âˆ3@I/N[¿¾'ÂpàÃä¨¿Ö à©8Eú'Õw±÷힨¿íÚ/Þ+éÌnsë„´¹ð¹¨»{§~y1ç¤+j=x÷{mjª…ÍçýCÃ}Š…°ÆdÌSeÛñ¼ˆ(“5ÏÊxzjfEªø¤{±#Cä2‰Õïé†P,rŒGÁž4TÇk Í}ŒçF‘DY’NÃu¶ªtãÊRÀíæ9Q6›G)¼å1 }˜²†ž‡—‘¿ûQÄŠ¿GÍ·9SM8h©3È«Ü UÃËwtlíχ³ÚsOB͛ڳ.§Lõé·éQ;KQNHuB¹`ö_›¶ažgðKþ 7²¬d”ølR:Bû2)ƒÉ³­ãûæÏº! …lyä'Œ)5úî¢FM;ùË`×0¯uÖÄhm?{–ß·ä åÄ‹óÂÂý|ÄíVOxÔ> ›½à—‹T|Ù&Jˆ'ËEà‚K%%Êè’ªšW«=¡ÞæŸý øø\V‹ÿÉüüÚO|®Ìx0v² §—GˆNÐ.}D¤m/Yü;lÉæëˆB€0¸ 2»³Içü÷S2ö3Šó!»f†J…»'¸Ú ÛÅá¯ØÍ_è½{32Ú ÆŸ‰I’õsõ^]“jsšØÕ1Ú= þ”î}íR!3ÎÀ¢,ïë6OX×ÈRKDòš #¨ïpœýÍ/JÞBµë“É]à@ÜLO¯¢Ô@5¨®2}±&{[Îê“-‰ÿ#îë1‚n~u³‘<ûƧtÉ ¸Ùëµümg]’v\³ÁT«Ù×1Ç6ëýJpà€†YÀ,>îå/Sg¿»,ñ·]lmÇÚ^=Â(šÔ¥ŸêÍ‹…̰:sb Aúo ½Éýóui·½ý*—;¤0Sê#ZOÁL$YÍ*3w•àSRï‰@ÙëQ~ZmZeŠ´WüC)ÒÿJg¯Z±~ù5¼ÃxƒL±ÙÆW}Éš7Ö}›îéÃ¥®°j”=ž®KpÅ:ȺNØrÐä<çC׬§“\K±¿^ Ç)^š1h"?,jtšê °ôã*Ö%P&›ê— SÊq­I :Û”\õÂTqä?ã_¾ª?"¤ÂvVÄ6l´,œ†õâ/ýÀšáYJËÞúPhLÌDäwæà­M;iZ¸Å/y–)0Œ>uˆ±Ç,÷¤íé'¹¯f"¦±™ÚaŸ­:Ä–Jßfâðòï™õ\þOà(‹‚àÑň˜/X¼£Ã\ˆÔKWÕzÉ{Í«Ø ¦¤Á„Ñ·0úcÌÂôß’¶R:ßž4í.ãoˆQ‰©»$“WaœŽ´ÆO“æçÅéŒh_gß®æmbn€©&/">MtÓì$I|Ï£r»×ˆãó%°ZVÊ•m*îéªø:KûÁ£ÓçjtuLLÌܯ‚‚3âZ™‡H³I°JˆtnÌY+}ßVù¤ÌÝ¢}2³á.‡IÿgQAò„û·++¼ˆÐy R„ÆvKFQÔ,ª.çèmB0™[~Hú’^°/ ›Êq^ý [ ;v \¹å‹õNÑÿp#i—0{Ë­­Äm?ϯWTß+7ì«ïÕ(¶7|ÑÄÒ'`x,Í)@$°?óK{r‹Í‚ËrÊÍå€Õg[Ö¾ 3I—¡ÄÏÃ¯Ùøvo‡_€àUC1Q”ÐåÆi©A± žË¼Ç*:°:\„ D'ê¥ãæ¿L¬ 9Ur°eð%ˇÞ]žc 'ç@ïxžÐªðª–5ˆ£J¼¼ò¹u~‡vÆxü*’‰Û(Ú¹gfš!ñŠ=CJ“¬Š½™ S Y³ÿ¨?¸A°e1›W‰V†NÞÉb ;å„'SÖJŸ¥ñ“@CQãë¼&‘Ò÷¼õ{´Ï ¡”|à qÖ>›úY¦"õ,™múGd3~Ôä,xÃ|Ùé#XZŠ%€ÜÄ,T!J>vøœ/úgªoººî"ì-…oëyµí9iìœÞ ©øxl/ F †ÿ+¡ÀA“¼ JŨ;ÿgexÔÉ7Ùc®]3“gl·/1ª*Á ¾Ñú‚£ïìCê¸+oÒGÛ¯„ßäR¤™• .>òt7 G ðöOIp@èÄUËÖChú4—FÞÉ•‰4yÃoÊ®ÿ5ð‚_òÀŠQeY¼½"×XzÌÉ'dyÂ}ºðjZ½Ç3{Hèßà a™>áh=ðôõ"‚Ï¡Ý2e¬Íó„²ÁáAt·ÿZûŸqI뀎Æó åAc‡’æc‹Z<;J\P…Ù=šÇäp4©p§Éòctwè|²w]¿ÕÏý÷ÊCŽ–•Ö§ .´,bx@4ñîO{¿,õ¯ÙX¯£—kP޵èɲòuQ0ÿ/}U6+:‚fÉŠá’`<”øãà>ƒe¢Eóæ[œs „$?„ FT÷0Û¼æYÏ·t®qc’åÕÑË~¡Õ¯w4nÏÀýoY¶òô$´˜™¼js‹q³:Œ¾Ç²Â‚ÇEc®½ƒQP/•ã3#Ú—S[lJ„ N†0bXJ‘€‡¡Jû_©ËBŠ,^整·ª` 0…$dý}Œøtê3c”Øo¼ —7Ú–ÏÇÆ”úA7®+í@¯Foƒ¥Þ5ì;ŒfGûë³°a¯µRSm⌸;‘ðžÂ†Ý_–žÊ™Ã.! á8îš /RÃ÷öqÆ8ÂÂHH“X˜97TˆsÀð66ú÷LU„ «3n‰¥ 'ñ«êwÙsû±ð¾®Éiå9°xÉž7éV?éýEêzäÍu{²æ˜l‡Dƒl\Åj1bŽ˜É¤r<^2@7*«Ev¦EúZˆœ­$›ñûKï¬ï2€ 7þÏÔýØ…X2:^OJt‹ém(D²e̦¼¯*.àëŸÙDØÏuu KÕàöʦV^Ã)<ÍŠ0%YUMÆ­žž˜Ú‰ŽH[Jèñbò‘&5€ öUæŒ3êqÉËsü "%ز´róÇ-.L©G!JEâ9’b" 64uçÔ\yLO^f…]Åù®˜'³'UgT"ÈA™VUö`Ò%5–p†Ïª /^Lðpþ̌Ѽï× ‡jÏòwì3 Q?ísã‘ýfÆz=u%R„½ýÔ圴•ˆ4‚&Óì~ƒ”ñÃí44–·øùêY"×\Ù£ õ¼–`ó'u¡Þ¦ Ý04õ›¶Ëž>y³„+§y]ÂÌ|#< <¡WrÖÅ?²Uí,q |“ùÅ2…Ùñv˜EåÃñ^.8/jàˆ¶„ÎÄ7)ÑõJžJ›ÂoRmµãA)è§±P7ðT#èOŠôÙÐ:‘†pø©OCª¬*àí ,ŸÀ4@/ㆺÄAЭšt`‡ÀµU•^ðÅßëõf'¨ÎÎì½: C/&&C*¸e'ö,Ú²/ÉFˆÌƒtéÊŸ‰kÕ†mµ>)dÒ‰ð=y5Vhè]ﺑýK‚Ã;pùðd(K]í›Øˆ³}ò º´üVÛ áÏe±æÇÆ< |K»Ð˨ ¶Z[«<Ÿ Ì·3¢ñáÂsV“n½¢¢@˜:Û¤i>RÂrìžxÃÔƒ˜ øß?uN<„èé ficJŠ¡sXŒjýYâ¢`A75’³æïX;û /¹‡ô  º-7É0'¥œ @szÙô …3µ§]•méCfÒ ;Qш+š†é¾2Þ¨ìÙì[]–Q•PCGãRXaóy™#;uÄ`@ý6^ ŒË¿Ša”Ý%؉œ1æÇâày§KrtªóB"U³¡L8º4E!çCòäkªÁýþmì1P‚ïÊù‚Ä‹§y²=¶2°òà´žÐ}gÑP'ùµ£!˜{Š\',βö*xCsAaáÆï@ gln¼ÅZO.9›iµE~¿º>¸NØØ»=…㜽$ –wV6Ÿ ž”GÑÏŒðò@ ˆæê9MtÀ}­qˆØ.‡HœÏ ß‚ªåŒªXµ{Îss„5Ç]ÿd:†-öòVxÜýÔŽN½ºï̽̕P¶»„·RBc6%:ÛùeYŠâÂÌ“æŒVRÅ@M /³±\|Ò~HÑdŽuTÊÄ|¨yMWefæmps'扢)쀊W…ßù!ÔÏÄgB釶rt¦¨èF¾+$b‡~·î1äåx)½¾™CÅC¢oœ”´BA9–®4ˆîô»27ÞDŽwÖ¾ñ®+l±#tÒ«¤àýLç÷s2êêæwt‹ Èz‹ô¡µ¨$Ã<>…ŽãªÕ`«Àµtñ,ûH~È÷‹•¦9gaÜímà•ùµmI‹dmCJÓR1çðì·øwãü;ÕŸWMÙü; þ¿ÃÐ6}]-cøw ü=ÿCÑûz§ñFØd®è·jËÄ#,øÒlIØ’{¦ ñc$ xIôL”2VíÀ‚î˜ÊÞ?âK[ÂF¸Ûâ¤À¸ÐýŒø{ÚÓQ¶W‘x­G ¾Å½#ÇQB‹ÒO7 Óóî ©¡•Ö3‘Ñ3]˜1u°?X7¿öl Þ%*àyŽÔçûDdkú žhiá~ªk‚­í ÙO^^ tÌ‘cÖêcÜç°cÞR“.«dáñ§ûMð³Ä {'P÷ô뫊˜³÷…nd=8›M‘’‰4‹E|Q—Bóþ+æ2d·]âÝ„†<Ži÷._ZØúèyúù \/rF¤NÝ:”J [ ³B˜^Dl¦w+Éé)²ª•ØLBg{߈­–…î¦ÕËD™<)W¯2ñÈ»ÕY/ƒUÊ…“‰Qš—­K¥j-%c²ë7÷¥sn-UªÔµˆÂcÝê`õ²«.#V@ñB\rø/ŠwcE}ˆ"š´§ÌŒðqúP)}€JÒÓ3ïƒÓ†Î¯}\eР¦Ä{¨×ãã&̤Ê(,©3çÛp=†‡sÛÌ2¡á6ZV}:]ر@5ìÑjƒtXc6·Wóµ-Áeœøµ#DD?/¢¶ìÏÉ……+‡®ôš)áïÞô=§Š:Ñ#ñ¸³·?1‹ ýÁ€Ô=QÞÓôðèè 0ô^ÎqÛ$±R{üª‡¾v•òµÝ‹÷·AV¸mxIßÛ·”_i¾1*Ú–’¤mZe·K®%1ÓOÈòAÿ ß‚Ýrÿ'ìºl8šÃŠ7¬8œåXÆK“ípÍ3‹‹Ûë6_þÓe¶e€wã}íÅð¥Ü­gŽÌ– ’ ÐûóÒ»o?|‘mLàSY’m\¹s×ÕýÍ’¯®/Ðfê‹ÿ4òä?8Í•=/Ö3Ú¨™~ô`±#rø¯ïÞì—=f‰ÄÍê‹õö›çŸªÈbCV¶‡µ!§dKd“¬‰‰ŸKo·²9ÛÐí²T0+˜à(¼CË–ï;b–°çĪ­×î“@ç” $0f&ø¡è3ʽèT`Ð’wãÒôäÙj}xãbð #*`‘û˜ò~P÷¾hI‡ ÔS,EJEAæÁ`¬¿Åbâ¹ ’¦IGÆü%ÒFœ©bjÄFX„w0_ñQÑŪ´ >òº²‘%Å1i7<}/æ´‰y ƒdhzYÿ¦¼«Y:ÄÓŠÓ³”2·ð­{Ì"LËÃ÷h¦p­ŠM-sSÙ<ÛYq`ûýÅS@çQLTf²°!½üŠoø¿#†‰=ƒ”²kÞú²¬O- žrÓÀFбyZI<qVc-‰®€°¯&ߢŒ$Çñh`rY†+à s‰ˆ¼7/‘pÈàRê¡y¨Í]w ϺÏðhÆ~«´9)M†’˜Vè5׆¢ €Ô D cTuw:¨ÂjU —ˆ®ÿT׎:›•§Y ÀgA~Ôr4ÊœQ^kþûž0…ô˜_!dJpû ïJ¸:²: 5d&gSUö¿”ÙlÀ¦F¡ô×9-¬kgTåB2{çÒ ÇxÁ ¡ÿ÷~”“Ä,ƒ$Àu1Ɖ®M“u'¡± 6r—¹;W4 DAΓí8²”@ëFS­Ê¬[PçÊuo'^^"+z?n[Çzÿv[|[aþP‚â"¦8&¹—Ý4âj ã>¸oÒ(ºöþ_+)íGJG…Î{¼;œz͵¸¶‡o×-<Ëu6)Ý®°±ü5ôt\Dá7 ¥m¡Þeù “ÖeúE[R$è¿ÇÂu'±88ÝüÝ%‹Ê<å2ÖÚJ-À#)`ðpø|ËÖrT–AÑ÷]ÁÊQÓ÷hZÒÇXüUtä3ÐÏP¨ Êß|GU æý³rÓ=ÑÞe&Ü0‡+)G=©Ùcýˆw©¡Bá 5_XŸI!ôÞüg NÃ=Jà$àŽ„õ3kÚ¼'iÈÜ^[ÞƒÀe¦7€Z¼3¹«w˜ÿÍ2o܇ðÝ,­Z€J)VË#SÚv–¬Ë9@AiÙ•ºÞ™ñ…²Z`NYäÅ.KùÍEÈjJ’Þþ £Ó Ç'ÎÙæOïÝx,Q”3žÀ¬f[Ãål.´,TXÏ}zû©¶Û™šo´°Ô0ë2 *îì‚&ÜÁ6€‚4å¨üÙ¡Q}v:,á‹ ¼²Ñ?Ñù†'#tWãj 9þé’ÁƒÃ5$2d›ó¢øf„µ—D°Ý:8¢1Xü gX“¤ùE —=H¿N–Ó^ŒÅ¥+ṟ;Wð)AÃ…Yý"S(Ñ|ô;Ëê$æ’•ƒëŽŠä4ÛÔ‹ˆ‡ø£E¨ù7!ì1€ŸÔ5W^š0+Ê›_ùMædØf‡âlGš ®‹Ì¡Ä€DTïÍ­pUÛ)‘„\ê>/‡ Ûp0¸ÕtáØ¨±Úgf®VÞñDo[iia0ßužß¦´â`€™¨ P 7µ÷žµì'(Л lå9 ‡‚6‰\8 .¥ÓÃgp}nÃøµŸJ~tßIq½áo+6 ­ïèE‚:­þ')Hž¼¬ÄÔ÷éž"|Ÿš-GC¨¬Ì¿+ø}³›çvÜ6ç]zCž"›Ac;+1^úô˜â?ñÜ]·[þ ÅzbãcA ".«4Õþ§¨#Vàï6 ö1¾#øÉ‚¬*xî—Óµñ°F‘<‚òÇAÉ•âø¤ *ˆ?˜®F˜Hò™«J¾ßuª!ÈU£4%— ÀpÃ9°£”‹Øª‘\â•%#ð†=ÀÎËg-iã賫ÚÔĉÐö^ç%%O™\qä`Áhö¿YŒ]ûì™Ý=#-¾N 䃀§B?5Áwt‘á´ õºÅ„g¡ZÂR0øí ¶ÂÊê>Ò‡£VþÜœiýHœŽ{ÏögŒÍ }¥–VþtÏ`¿êÝp?÷¿ºc!¼?”ÃÐbk¶*Þ9ŸóŒÚO‡?pÍžÿDQz7CÁO‰I°ðqç[i~ãŠ@°8Kà€QEˆg%¹$Ú„GŸ/ßæÅž\«<Ѿãð¯Y™ÛÅ9Wê ðxkA’(7X7h+eúDÛ Õ| 3øýg‚”=™½­ñ@Y"ô³Þe5Ü:[\¼G ÆQ%„;¸2€ø-'F»Ÿ•¶›>çÖòÂçˆcTV ¦ŒÔ£–ž‹6 Eæ—£+ ¦Ô²*ò†˜çO L"8b=*䬅چhwP¢ña"*™*êå±G4Z…ýAãI®Ò, –+¾w6)N®ÑïÜŽg*;EãÃóOhx.ÆMožfq¼’›ãœ97²ª×m¬f$º#ïK?lÓémöÂLêÆl³Fù¨L0zU‹pÅ€„6YµmÒ/½]:×XÿÇ*ä‰Ìš‚´nôÕV}(h1üÖLSÛ‹sa ä¶¡—K|þŽ˜V ¥ Í€ªâ¼~²ç­»Qvþ½¥ÚÔGv}ÍŒ†Ím«í&Pu•»Ñ›h;òt¥ì‹dæÐ·{¬µÈ ûnÝm²Ó§³gšÊî°4€š$©cœ£1Σr~DÂÊê\¿v¥uøº²M™Æ1Ó8ž$’ «¶Íd óþIÙ©éöÙ÷ïÊbË1y*ån÷Õ#š5}JE Ç–èNANg½ºúß{ppŠõùXB™ðaVÃtÅõQÞ0¶xÁå^Ãí³¡ënýŒÈž¼‰ÔÅ “d¸çÙqÃ(3ë–Z¿µáÊ}8H^Ÿ Œ{åñ–d­­v}CŸ¹SŽ€{(*,uãöÊQN@Ò`e><86š[ ÌQKIÎá:r6¯™¨†Íø݃NM¾@R¢È‚¾`“R3¹G$L° ’?qbébRDÉ>¸‘„‘6¬àuÁGrWN· ஋¤Üõ‚¦Û¾Ñî:wË Ê›¸YbÙ—o/Fxb—”&UôITò³Û ‘£3±ufj’ÚŽ1H­ßFíê»:†ù'””3©©õ T=M :‘Þb—át2 °KBãÒ:iÑBOiK¥Ù‘N»¾¦Í¼ÒPTlV6m#Š>‘…ÒØ’ÁVU¢gHz ’˜h»€Þ‹±äü½0ò¦† ço€Y½D<î!ÀºãÿÇT·þ+’»Ÿa•“—:\}V­I7£+\ÅUZgx‚´îyŸ G¼}Œ3öÖÖR…­£tl(†‚ÚÒ3-W”@_Ž#û^gúžŸ¤¢O³7zè0®¯zg©P톿üÁ!$ ’Ô±b=,¬ C–SHüåJFA;í4AÅÆ’רúјRFRÒEÖ´²éæ“èüê#2ž¶B˜©š\Þ'‡Ä0È6‹ëcØy£œ¨þšRápó×cž³6¹×Á¬q ³5¢ð‚ò…öR£K%8ñ¹ÜÂ,€ú³ù¸¨5ÊYéqýõbØj^LQœ>ù#\'=n&8|ø=n<¯ÌÝfl§Ô­hƒ‡˜ :ø]²Ä_>|ï6+?u@ϱž³•LAÓlêð+®â:œ§R»°Ã² ‹`æ”k_mû¨`|~:rè?ª×¯_³ÃÈÚѵyðNw¿SNÆ!&;¯Ï¿P_J׫¦}4A‰ˆ×ï1‰J0=»öš ó•üÛôA¦áfaßÙ—Eo·Š™>ü’Ž ÔyÏ›Èâ?Àlñ«ëŸ˜&Óê,0˜sÊO”&^%”¯ý~L9Fè‡ ”öé³ÁYî7b sìž—SÜJM‚#Îuá8°\;Pú™²ò§ƒ ‘ªšHRq VÒQ˜Å¡ŠÉéàG¦#Ê;VW馗È÷ÞO_Ì|E~`I„áDÃ`¾¬I&Œ|s”x4¸{‹šþU–C {૱ÛöÄqS*^ûÿéW %~ú—«õ ©ê0ïO‡Yâî¬amP£¬{(.Ú¡S3 jÛ?#è^ O1–â¶á…°Á!Py g±•Wª€æp½o÷Æ@’›ëŸ²Ú¶&Àˆð Ðè” Ù…;AÙKë ïoYz½2H•¢t¶|Ž!¼`Š/!€-³$æ¹nÅ0Ã̳q²òÑ^0/‡Ùˆ]Œ›·"å®Ñºo¨µ$É·-1Úöëͺ iô À(ºy”bBÄ-ò"*‰4™*å7¶t¹N;YÖÖÛ…ÜýÒS\Ú•#ô_-™sÿ+E°hÞ³i« Ç£I×ͲˆÈA¡Uî j$½ ·¯…G7Ç Aï¹Y \Ù’Ó:¼"qÈA=Zü†8ê;i&ùz|p„¥†Cù°ö–‡*+ÝêµßOÜq.|ÉšÎ\Q?4o£ÀÔO­N.0ÕÌ^õÏÇàG©‡Ä%*Ôø4ö3¹r†Ä+j T¼8q6Òàç9à¬ob*ñöðr²jVŽÑEºüôGg~3t ›'ˆÿ^žoƒöŠõÜ!£á‡ŽHÞ}-'\»Êð“&‰î†kÃ.IaÄú…6Z¤æf™±óÀµVrØïi€î[Òä;T‡M’m`µç¥Öf¨ø%n‰Ã‡›´¸ç<™ @ŠÏ\hÌÁcÜg–#øÑ„êøÖ¸çÙN1ŽuFÏGen‡|ß6 HS”E·ã>ûNfLG*4_ÕÃpqËÀ^>Ôï¡Q !N €û1~¬þèõÁ¾A 25™›i–¸¨ÒaÞ¯NÞpUt$äQ÷³Äޝm¨$Ÿ÷€7ɉþSéÄÿ9¿¨W¥¿HóG(åÃa©x홥àVÑõX_™¼Åö«ìMrÖ¤¿Q’TzÅ_¨z„ˆ¯­k˜’•ÛÈrJ§7¹m…Ö‹4fð/ÍþÕa`ËÑý©*‹LYµ( G¢;Ñ#&É® é~’tÅŠ žÏ}쟽Ê?¥Ø8–7&wˆÂOÙžÄ@ຽ “-3'¤hl¬Ì°ƒãÉÆ’¢±°œÊÏò’½skê«ÙõBŠçÑÖ¢Š.ˆŠ~#Ü6‰Zq_3"+\«Âo‡^Â ì ¨—ç ` Ó»ˆ¥@†rŠâpq7-°¶Ž²Î­í.ÒŠœV|)"!åF§Å:R%§¿…2Îáά¿µ¼Ì¸áõ]ü*<´G7þ‹râÙN$âF ðõY#ê!瞨Æò;×P]WÇÒ¶Àî™…Ð2K»Ž'„{JÆA¨ŸiØ‚ÞöË$Å~ º "®ÿB'tå©W¶rft+@ ÷èàæWéS<'õ´¦ÊDš³÷"ÓÝ~ß uþ±ÚÙðwBâ» Ðdh©F¬x‘ïÕKK1‹ ñÉ/·âG´EÓ3~ȤƒˆòuºaËn‡OåNl„ãO¸g°í»„¿„-»jiõI<—sÚŒÃ! ©È›f·Æ˰ž"ïQ‡bûÍ­FF…UšȪ͹㻜h†£ý*Y\(_ >Q6KË6€¸¼m·oJâçˆH§K䜪›T«.½{Àݾ|NíÁ8”ÈÇ#q¸%Ìmñâ=Cö‰xeRV–øß–z2)D3TnL_ I¡¥>[꿽Þm"ÿBQ^× ?xÛPU1{\€-m’)¨ï¡\Í»ƒØw@a¨Ø`E¦¥Ö¯…J œ¼h’)N1Æï_öPÖ<„˜>¼ ³òóJ3gÏ.̘ ½ƒ6Hƒ6¸K¬ „áÙõŠ(H⸷_· ü”¿D:LXÝdŒ„¥çÚ`Ùÿ-¢8¤‰4@µ€¡ P'2}Îó šŒ ¼'éR¢½¡oõ ÷ˆ»„.uWƒ¿•3 ODŠ\nS¾ÛPú8 ÓͶR¨KY-± G¡i9)둎n¾`õnØÙ+,:™´2d™/®/¡AÆÑ¤Þ¯‚ƒ¢Çååá@½½”0»x¢Û*=ÙU!&¹Ù£“ZäÐS8H‘ $ÏmF>Ð}´? ¨œ†65ñ¨æ4eÆ3kßpÒОUózŒ@OS‘9’ŸQHWoí=ÊŽèN”£]oºŸñ”Õ¿ãÓÈíùu8ù“È_(†4¨Z›x/ ÜP”ˆªÙë ðã(hÃ\Ó-Û¡™–NVK:õþcÛzù%UCEe¥Ô¢?Bç8JD™ÍÉ$fæ5å7d‡ý'}Åžce=¾œ*ÔýBʘu¿^³Åaa€®öÞž»NHUqfžÓíte%@6¦,]y¦†ëh=š‹^ÌÓyš‚"ë\YQ±YÌ7Ï¿ðE0÷ÂFM¦ FÍÜÔÍø.¥¨¦¶“Ï Š æÏ¸Kjˆ@1aÒŒŽN§¦Š±…}Õa‚\·kmðâ{^ú<ƨl©Û{h7œ˜1–èŒcpBØGat÷ËËVh>—„›>Û–Es‹\:uÇî†6Ìoí~.s4­Üëk¹=Ål:ižç'š‡Ì]<k‹ŸªãtÈðR¦ìÖUI>_Xæ9ä·E{ç#§`å–0¯k¾BrÅsJ|¼Ûçì—‹o'l,»8¬¼ißÚ]DÌ?,rGÆ÷: u‘W5t†¢ÎUÑ}§·©WУ0c._ÄÈäâú§èlJòJÖÊG‹°fÉ8qTçÒº¢[G‚°kðï2DcGEU¦ˆF‡¼gG‘Õü&Çm9ìgÑrL‚fz?…6饔˜ccÁÉ…‡†Õ“àG/J…@—ò?R×5“h¨™Rkø¹ìý:¶É]ÝUÂ@d¹ äŽû,/ÇbõKЏŸe³}ì¡È”[+š½AC¦!/©rŠd›Ä¼ßüCåjwÁ›šä÷‚Ò ॲª—¦ý˜ZPÉ€÷yfðØÅ׿j Á±'¤fp)_Ý qêuj‘îƒWe @5ø*LÙP#Ääèë–Nu‹Vø#lP\ç`J2v¨¿wµ~¶Ü½W¸ÎKv—ºSö ­µÌš×JNbµ(¹i&áTkµ ‘?õƒH<äÕ—@PO¹¯óÌáô[”"Ó³µÌµ;âg7:\ä+$<I™Úqê3—¿é·XÓ¸‘æ–ÜWd>ÛIU þ”pdåìŽÕ›Â>ÄCLGN¡\€!ëå‚+8¤Ùòs_®•¥±tq‹3\A*"˜žÛp¥£ 9`<¹!”©uºÞBò8^Ý m„ü³MÖîÿ iã£9¸í) ­eKœ?$Uœ@Ä šÜUæEuÑ:Ù)ƒ%)±Ò굋µ[½»°™8 Éô‰2@r+2ÛÐüÏç5aŒEî]e ß­2‹Íd!ok/ j\øñJ+²'ÿl',éä5„\GüìÆ¢óÊÔ7‘#VÂãböô –”Ú´Œ¹­­ÖÃS5á‹hm8Ý”ÔÅØ²µ(ÞW$‘å»Èó½V¿ Ùï* ü©Áí1صó1°¬ê{{XVçªNÐ[lëö®ŽÈ†XÍõÅ7ÿœc#ˆŠW—W¹ªÚœÄ©¼/@y ¤²û“YDe&öGF(ÔØ#~ô'c<Ôu1ÜÉ`BÞš ¶ÙŠ(‘vbÕl©ø“×+¬eAJ\ÒÈèÕ|WÊ3gÓcÊú´Æ+2å±|ÙVž29ºœbå!§%PRú}m• ‚0ÕpçX6 ŠÐ,Þ2¯Á}áIá7ÙLÇaGÓ¯™Y`5‚B=Xäø'{Ò+’_¹§>RÂ9ZZ³Ÿ®|÷ȲU‘Ñl!"1µ–µ,T–²\šl_”± sf,åÎn.âªæÛžföÜpAj,äcM5ÖRC]·g‡3¯…Þ¥ï&¯Šß‘fœ=ÚŒ‹êþá1‰â¿µ¸ ›gžšhŽA[Éaôݼ|ùI“»ÞøÓÃJ‡‰”(ˆ›ƒgùÅøŒ™HWm<k°N>êÙ´*Ã7¹IÖVƒZ`¥÷›Kæt#>Üm ±)zVhxåð’P¬‹Ÿµsm Y{€¼qFMβ6"/ÞK8øßØdY2¡Y2ëE«Ó›¦ïŒ£¯aëyE\OkKq§[|·=$VÞÑ.xÍÇë¼ôò   þ´|#Yl™\·Fî3N¹íŠfžšhÜæE)»'Ù>®g[ª=`‚úiJÂÎ÷Ô'==µƒÓ9€r4q"‹ä®! <{%$T÷èa]Ö3L™¾ˆJ#h4î4 ˆ ‹u*ÏÈêU«{A×tõðp~«§=ºœ¯7oëùWÜ£f f¬ oîþŠ }‚ͱ{;túLhúlBnºë­°ÄÍÊÉx€ …´?ξQq‡Øc6³„®*2AXœ¸lÍ껽øéÈ`r;ÿ è9}‚Œ"`’e£‘ÙÏB œª2s|©´ô£-‰ÇªÜ¨ Â/¨ÍR@ð­Ì#Þ®œ•†¢è“n ³ÜqÇÏÒí±¨šFoÌL_vÜ2—®²,¤Š4®È‹¨¹…/·"iW*ÃÔ¨Ð-Â[MT>\R]dìвÁ.2P…‘+çÈm:—¾«¬5¹å¨ª]…ŽwŸÅN>å[÷÷yº .ˆ  µúM€.f=ñË—¿MêÉ–"îïà¶'»~úý²“A,e× Ü—~U£^·.$õ™ð´êWôhÊ LÎ-0‚‰½÷iþ—áÏ;™<ê™Va³š‡ªöqç°;蟩€_Ö#™«âð±Ul=S®;_×ìÔ`Îûp&¼¸Le‰C:*4/ú<û'ä¢GTÞ^\&õŽ×Š®¬ìíïÕ”¤ÄŠ)TQ©œ9pij|Ákùióka…\x æ·&çÉôŸÑÐJÖÑPþrIºQšËØOAP²¯.xbf&+#:Fñ ¨…š]PÁR¾NwaalŠpq:&tF“aŠ‹&¦vs™^É8’Mèè͘0\ hÁ>ëfsU³…”’0\äNÿG+]nI+%ûX¨·õ:éÕÈóÎ *`MV —à rþ)²m¼­J1„°›0JùíùšR9Y§ƒç¦“[¬èŽ(¿]´.3&m)UÅ XVdpdˆöf“†…»‰FØJ¾`šŒn/„n úrO"b„b¥úÝG‰@™«aH[ucM_Û‚‘Ž$ä Ñ‘ý$ÎЪçŒ.~År%R›•csj”ÒbJ ;D“OZÓÙúýCÔK|Z%]Ðí7 ¹Tâs«ÖÖ›1ÐMsfÁ8RKå gÜ£ÿzp¡°Jòµs)" Ü.#Naÿ2'ÐÙ61¹†•°ò*cnŒäVXFtÂÅô¤½Ï|……HӃǂ¤Ä1K¡ïæÚ›Î|‘Qòž×€Î]þgº»FÍ9ÉïÆ3œZâ³t€]eù*¿ÖZ[œYÎö„J¨XzŽ-0ŒöÐøgk Ë/%.¨Sêë–ú#³•'©žäWKÚ@$< g÷©ŠÃ…ÚN}ƒÙçðì¯øwáü;ÕŸWMÙü; þ_ÃÐ:}]*cøwü=¿‡¢öõJñFØd®è·jËÄ#,øÒlIØ’{¦ ñc$ xIôL”2VíÀ‚î˜ÊÞ?âK[ÂF¸Ûâ¤À¸ÐýŒø{ÚÓQ¶W‘x­G ¾Å½#ÇQB‹ÒO7 Óóî ©¡•Ö3‘Ñ3]˜1u°?X7¿öl Þ%*àyŽÔçûDdkú žhiá~ªk‚­í ÙO^^ tÌ‘cÖêcÜç°cÞR“.«dáñ§ûMð³Ä {'P÷ô뫊˜³÷…nd=8›M‘’‰4‹E|Q—Bóþ+æ2d·]âÝ„†<Ž!ÿH™|ûžBgÞ²]õ‡´;K]Û§jºae@+_“ZwÛº‡ÚÏšÁ Ã$áDH­‹Îüé>Ó—.‘­ž¼ËÇ"ïUd¾ W*N%Dj^µ.•¨´•ŽË¬ßäBæZ48õ(É=ˆÿ-:l§êÐÊwd,ÌŒ¿ŒQû¿†£ÅÐ¥x)‹3Å÷nßÔG"&€tÑP§ûž­ ÷&¨&ÕJ¨®—|±Þ¶¦ ö8éèí(4Þäã†_Öæ?dX›¤&µµ^7ºgn­ðz‰³^è„z£­|VÇäÄz° ³¯Éj˜¼$@$ Äyá/%P*àWgÃ×Uw»¢ @JÉ8ÀŸàWÑTÑkJLÚWróÁmrþÞ¯7T”<´Ž ¬“ØÚ ô ÅÔ±è3÷­ìUøýÀŽNy¿@½ÀºÖÛJ%H²»rUhÍœ¢Bì*a¡io±éö–,‡u‰BA!¾Y/ëÛUj0·dɽ`Ñ­V}¨*ê*toÏ—$®c·œ»JÂkûA¨ ½Ö’Iר€Â6ÛG†õâ :ÈdBÉfÙ™H§NÂOÌNÌNµ Òœ•4•—0çA€"ð,Œüø3¢ˆ}ªÚ8 ¨™~ô`±#rø¯ïÞì—=f‰ÄÍê‹õö›çŸ¬–š/ópó¤OHß‘²ƒ2Ê-Sx˜-*ñu'œ«•¹÷IžÁ-2sf#Eî%HÔÛeªñ Y©TI&6Ö$™L7n"\#èÍôAó¤éÙq80dãÒôäÙj}xãbð #*`‘û˜ò~P÷¾hI‡ ÔS,EJEAæÁ`¬¿Åbâ¹ ’¦IGÆü%ÒFœ©bjÄFX„w0_ñQÑŪ´ >òº²‘%Å1i7<}/æ´‰y ƒdhzYÿ¦¼«Y:ÄÓŠÓ³”2·ð­{Ì"LËÃ÷h¦p­ŠM)Ú# Q­–ŠžAh®ÙCCŽþNeE€_ÿv~Пb0à HùÚ™¼Œ¤ÎZcØ ô†Â– i$ðiÅQ¡·NaÝ(ûVºâå2—sÞÉÀ«ëU8I¹íõ§k}„1ž¿¡Ò™1çÖî"5¿¤£uÆØ®Á'T=Œ9ãW˜öC)—/«–Êqeá¼ƨêîuXåÎØ”ëgû'm¡‡1‹ä~˜.›/]ð]:¿tÛÊ[KϬø%dSøòà+³½~Epuã—°T΂^ÍVCt×ÕhÑ[Óô¸ê$®ÞKÒØ-óˆ4wpŽqäãá»±ù°b†Ëñ 9:ïaat"ÙKߪð b<+Ä}‘êÚ`³°Á³BŒ~¨ê{GPC$?œy®W–">^—¥Q K˜ØI·î];!¥5¨Fûq0–oY'{WFå¾–¤¾q,FÒJç—·õ”4ª~K¼Zì‚]ª‰ð]ÚÈï&gèL$ª [ €ý;²TkNKI>‰·+‹B!+Ç„WQ[¯T$®FÅn‘Ñ\«´Å…խû-z*Ÿ1&à=ˆŒ‹'¾‚‡›,Ò¥ñ‡1¿ÚÚ’Ó2jM ïÃ"®H2,Œß’î9Òg!DÙ*H¬=¡Æ®ÿyH‹Ò;Òjn_°••º!©Îl!ìª/^g¼A¦‘(Áew±­yúCþ§z‡±¦‰Ç.Ï÷ÑÈ..ƒÝ[)yZ`»¾'qK?©mÌ,´?tà¸W I¦½$b{ME£X¶¥«%ç0¶q¦>Æ]ß~£åÁý2ÂòT–)8] ˜-(ýƒæK¡‡pU˜åðkìÜ,Öw%Á²nKÑH‡›hÂcÊôö„“€‡!T ‡ÊgÍÒ\ëÖI˜©ÀçCß™ã&?ô ÷õ-¨X?3†6¹-Ç!üâ4U–lÉkªe—ê´° 9¶Î'QR7Vö—óNvt{áX»[’/ _ðÔfý"x½l;lÒ•¨Ëh&R+¯‹À )3„ª!±ƒíÇÇ•à‹ïj¾ÅPPÊ?k“›³`iã"RL­”g†µ™²)mšž‹íÒ^-­cv7“çfÊúê—Èí½™@eÑ#HNò±»¥˜IÃÕƒ]5ƒGà©ó—V¤åÊ!‡"7.•9h ±f§±¼ /­Sů^Z$“€ÒÜòUK‚yiÐò{Çàå =®±òûFïåªÒª‡ø÷ÈçxW¦Q¢ùç±Zø$-`\iÊèt13¡ªw ÚAU J•Ä:•ߣíä2Ò¥íÚìËžÑø´:õ·ïª3 …º4Zb¡äÝqøÊع•ï#|¡tZ¢cM^ár'"S†ëjýBöºÄb¤+o *hm^ZõÖY'쿆›Ø,c‡[íÎ !’½XB©›Ç?FMÅGƒƒVÚü%2êáøÏÌ<Ñaú qV'Ü–š·¯mR'=(„æ{³'mTU\Îcµ*þLÑOÜ£â}Μ5ˆT<·J~f8÷O†ý¶µæ^r q3ÿPqèƒÎ‡Ü¨™\ÁÆO!»*{uT1Æ"Oñl²Îya¥÷˜Æ&\ )V}º Cd3¼ÙpÿM 0»ý¦ e;ï  ‡ššmÄJ†{iì;¾´$É®÷P´}3-»d›‘Âdá<ÅEc⥞0UöÙF>ˆf³G’¹s6ïŽäíöQåÆXj/`¾ð©Û_Cu^’tBâÑkƒ“Kù¡ç/“«U|T:ï­{¿}“;¢§¤e·ÉØA¼‹ÝlYn†,Xôsk%ºîw˜§’R·×ƒêº>A=&o0÷åwʺ]m Œfèš6‚0NØêXgN ŸR¹VŸ˜ä;8³VÖhKuÒú¤Sé±”ÃÐbk¶*Þ9ŸóŒÚO‡?pÍžÿDQz7CÁO‰I°ðqç[i~ãŠ@°8Kà€QEˆg%¹$Ú„GŸ/ßæÅž\«<Ѿãð¯Y™ÛÅ9Wê ðxkA’(7X7h+eúDÛ Õ| 3øýg‚”=™½­ñ@Y"ô³Þe5Ü:[\¼G ÆQ%„;¸2€ø-'F»Ÿ•¶›>çÖòÂçˆcTV ¦ŒÔ£–ž‹6 Eæ—£+ ¦Ô²*ò†˜çO L"8b=*䬈.¡bô£I _ß— VÝÀwðw±Þá_–6k!Jg¬G²­žxg Õ/­dÌ>qzç»ÈŽjI‡Lµíñ©ÈÚpjxp!=*ÜÁˆD{û"}ÈO‹qn§ÃÆ8Ä㤄8Ó…ÝÀ¤–Å!HÌ–¦›ñjph¬QȾ´Fƒbóä„Á˜Óg Ój*¸ ŽbAâÓ™öòð'*Â'}FÞÑ“‚ø¯€Ü½gÈ%!¢å{KG­D(v*Ý'6HRoÄãƒñ„±%VÊ"dÞ,Û6Ï9|JŽ1—tðÔçDÕª6†¼"K#œa¿¤,gosˬ‚‹ =×KI{Pôw°;sn†I›r¿Ì+öDöo½¬“æ ¸¢ —~ÕvIXž$’ «¶Íd óþIÙ©éöÙ÷ïÊbË1y*ê­v X¢–wþ©)ÀDw¦¥nê„3U‘â¶Ñï´e­TW^ðC)…ẃRî·“H1Þl†‡|!ËÉËp„¦ŠÀ²ZÃHpI•޲9Ì:„sˆœ6Ï n¾ìlÇñ–d­­v}CŸ¹SŽ€{(*,uãöÊQN@Ò`e><86š[ ÌQKIÎá:r6¯™¨†Íø݃NM¾@R¢È‚¾`“R3¹G$L° ’?qbébRDÉ>¸‘„‘6¬àuÁGrWN· ஋¤Üõ‚¦Û¾Ñî:wË Ê›¸YbÙ—o/Fxb—”&UôITò³ÍÄ£O¬gl‚TãKj¦$ Aª+DI³ ¯—'™ó÷¥Ãá‘™!RçC×w¹„¼Fžyš5 ˆÁ±@¯«MUÅfÙæî0ÞOƒ$9ôÇ7³[n¯?“"ýíÒ’q[$9 £˜p‘žËô5C|¿ÑA“UiÿIC`ØYÙÄs9Tayt4 *)Șð…{2wZ$[xÄ2™ïÇÐHu‘=7P!B#mò¤lÇ}ÑóÉf›Â†)îÆW¦ìá"ܹ¯P€‰ð¡s°M¾9y)ØÏzðˆ?ŽZÜÆM«Þ¨r4– PÎLP6F§Eº57×L†›1l–?dßO›G¢XA.Vx%Ü<£tì] n:*ƒNXлe…çfü#çøÕš jë~öHb¢Ç¡ßXC]8QGÞ‡~ñ¦NåÓ–ó3«oË~h×½T/9d¦!mBDCi^ñ SE†Õ:mx‘—¨+§ˆáÒ¢2Ñõ;*™üùÞ–g O©{øHmŠ8-ú»w™:»X½Fô4§wV®6]/®íº*;>¦Â°ÎĈ”¿05CÁ3ÚÂ$H¥èa.Ÿìï}`Ö ÓÑÇM£êŒ’p gA5V&à_8hÖ$HnuiÓq¶ŸÞnáÉID’JHÉKZÒuDíiPØÇYu>ðt mظ-O^´'H`ã úÈHPÃþyQŸ9‹üÙH]Nâ¦Â^Å™v?}*è”V:† “Vç©–ƒü]ÛÎ_+be°)™™àö}ç_f– «ÀË“¤WsÚ}8²óBâYú?º¥>3úgŒÚ2-ßA7¹×õŠ¡¾¥Ç•vé<Äçí¼z™°n¯;ñ@«–6³)bX„@Ô4ŠHä„} õFoU[´ë ÿ8dKƒŽU ånÃþFŸ`LŠ÷ BK¤š#Ò_]^—ÒNqu–%K×#Áx}M›w¨*°º„쇕[ôgöÄsk YJÀ‹];7ŸÖ'œ'WtÖùTÍØ>pxzÆQk4XÂ6Î{ÙžnZ¦ó³kP\ß\»Â³tÐâv…kº_ÿ`wÃÈ`Ùüzs$Ž-xû6gíÊóuaÒðJ›¬¯(Éè{e£ÕÜ++©ÉhçÒçÚ(Xvô< û#Ð÷¡×æ‡0½Ã¨Táè3 C¨å¶tèÞáÅÖÐ郯5—©†ÙW±Ÿ5 [2ÐlW+úãÆäñ;ºJÞð¿ï0曑UA1·šÅ OóŒdEõ±ì<ÑÎTM)p¸y¹¸Ù³Õƒ„ H%¿„üm;w…w´ÛlÉ“‰ˆvB[™­ñÐN0ôÑðözâ‰ÎÅŸÒ°)Xã_QÜb‹—†×(”WªèÈâC¸áFªöµ·¨l¯ ÷@’†ÔkÜ”äéÛ¾38õv ô*f+i àW„qrÂ\÷Š©c ©•Â;#·¹êà«9Œ.G¯µ³†,`wzLwëæ>Ÿ{á·£’úL K*rØŠÎeðf|–ÚY½AZ[)5ÃãAn›™±™$CŠmJ4ôH½øŒ¿V,ïiñ ‡§PØNšÍ›¶g®¤uÔ¤]'ó’Ãj©©Á˜Ëzy'6.úžV¯W…dO[pú•!@ùÂŽ±åÓ@Æö̰¦ÿEnF¯ZBÆ ©="ä=¶ž¶ÇpX¨U.¼²õãHÖ¡ ”BN‘F¦¿z*s…O\ƒ¾œb¬¸$G$ ±xY¡Ï’ãNFòÈÁ¡äOú)~®Í‘{v9ƒ©¥ÊtÔs“ÓR•ÄÕ5‰‹ãð=ZõkæåŒer"¯ëHégÄS,.‰a@'¯àÚc!TcÂXÍ&q+ÓlŸéW %~ú—«õ ©ê0ïO‡Yâî¬amP£¬{(.Ú¡S3 jÛ?#è^ O1–â¶á…°Á!Py g±•Wª€æp½o÷Æ@’›ëŸ²Ú¶&Àˆð Ðè” Ù…;AÙKë ïoYz½2H•¢t¶|1ÈJs…ÂŒ:Ôã†,f¥ ïƒrÑýG æ~CäÄ"%оGÎ{Fé¾¢Ô“$RÜ´ÇkÛ¯6èRàÖò¹F¼¯Ù]8Ú FàÛxpTËêƒbÅïk: z$êd©{Ë¢{ˆø7Žê9fxi·4µÀ‹ð5¥É×ͲˆÈA¡Uî j%òM¼¶9)|,zîú} ©‹jœ2Ì*Ä@Ÿ¤£„7ïªQ·Wë]hcÛâ}UÃeÜè3ðÙîXá+æˆwЮ[–<^-Bgrƒ3š¤$Æ¥A„|ï£åŒ6x£?žâÆèBÿ!Rr5„CÅÎj«m’Ë•W;k%Vp@§:› ³?ìF=¶è‘°9.ðìómÐ!»&O¯x¡†?€Û¤]ë·ó­ºbµ‘ÁxwRU†0Û}Š&¯ïÄ2Í‹ $WÞÛ–›º˜£CÁ(æÛ»àŠ&ÅÈQ7ôÛŸ}þK# „[ ÏÚ«±íƒÚÞ:ÏK ˆ9ê:Že9øǺÑë„ØHãLS¢Ì`¥¿’ñÜj{°•ÎÛ½fu„ù:ÕuÿŽÊÝù¾l<@ÔW@á:Iû1I«7!¨dDm¬÷H=cÅɼì@}²öB¶iX– §,:]£Ÿ9HùR bÈðóÔè¿JG„na¸Õnûâ5¯µ²—%gàõÈñlÌ€¨Ó5pø­‚JªQ=Pe¿Þ× 'VÕõPNªn N‡§8hŸk7-S€¹jÁãHäÉÙj¡ˆ6¡ÁrbÌø’q¶sß’¸™þg•.©p†sÿLÁ!ý³–®5n£®Hãc= ©gtêm…º7ž}„Í…:3ü¸`KfÍÚeà ÅÚ¨æ÷»8Ò>,ŒŒ6µ™½ý–ãu´‘º7Â/™n£Ô‡¦WË2“¹†ÏõŒ•Q„]Ð~‡¢3 ŽŒ•õêÁ›Â¡‚Lí$/õÔ´9^Oµ°„ÔØëFeZ ²ÇÔCÏ=Q䎱Xú…õò\ÒŠ/§á^C\<³fÔ…/ÝmÝ/kpΙÎzÆ…ÐR+¨Ú`ØÙñb~À*¢V:Ðg®úù9h¢,qÆõ´¦ÊDš³÷"ÓÝ~ß uþ±ÚÙðwBâ» Ðdh©F¬x‘ïÕKK1‹ ñÉ/·âG´EÓ3~ȤƒˆòuºaËn‡OåNl„ãO¸g°í»„¿„-»jiõI<—sÚŒÃ! ©È›f·Æ˰ž"ïQ‡bûÍ­FF…UšȪ͹㻜h†£ý*Y\(_ >Q6KË6€¸¼m·oJâçˆH§K䜪›T«.½{Àݾ|'çK®Ê¨£Èm^,Þ.ªµ÷u~àùÃá«-8†6«qó„Å(¨ƒ£=¯6¦Š»lÓÞZ˜>¡¸ó–12Äs{Õsz|m’¦3Õ <; Ž›'¤sòÞD‰Å ñïˆwÙ‘b«Å0O•OÑè lj—'qÊ7ýY7vÔB—`Ãf®0ž‡&©ï¼hrü¯"0ô]Mƒú ‹Ø;à Óï"×ÚÚãšèõ´KðiÚ8æ|ͤ§ÿ)ÿKš¸ôÝã¥ly¯j$XÊê0ßè'žîz<¼HLü^X³=B{i¬ú‰ªŠÅ‰ÀjDºr;›ØäMœóˆLáñÓ(àÍÙ!¶­~šÐi–ˆU&±D{æJjµô3Û&§ü‰Oÿtͤ'Œ!“Ö’} 6&õ|íÐ&8÷// íì¡…ÛÅÙQîÈC©ËRH5t;h˜@2f³Í‚AJ¨—é° Ø«f¯rYûçfnµW¿úÂ.nËœl¦ÔîgЉ‡ÖØL̰ßUËè¶þÿ‹>;ñ”Õ¿ã Ž që,6¢‡-LEN=ó¸#ä[m"ôŒô7)­›(;2']ü`êG¸™˜Ýi—rÌJdûá‹q3)åÔ¨Ôj’i¸?W/Ù™øt„±kî¥A‹$7³}(¡²ðçJÚÄÁHË(QÆüÁ ™0û£žÁ­Ve_ˆžØñ¹Ê‘õ«ˆ7\žýí>£)–œ‹‚TÈgkB3êé{`Õʼ…û•áp¼ 1mâ]=}WuêÈ¥ÿIÖÄ6ìÍó{Ÿ?܃}ââ±IX#ynâ9¹é²©W|M"ʺç¨dËAQßp»2ÛõÄÍnPê£4NJ³Ühi]‚}¥m Êt.§Æ4ý@ml.ø úÌÁ.ôFÁÊ;Ê­i¦Ùæ‚×ùÚ¢ô_Ë݇9—VZÒbè_o—1'Áß–ˆ·û¶{Ñ«RFŒƒc¢€õ&úø­3_ÛcуÆ'»R&Å —¾§KËwŽ•öb\t þÖØ0^⵸܃³ü/@ÛZˆûvíB1í÷¢ì>Θ ùÖÒ×/eÃ:.úƒ{TdQBð–9`ü`|S>§‹¸ß .*gãËl}é—Çh;5ûÕ- TQ!x¥XL^Ãlš¹–žý†³ë"óÉ'=€©ÔÔ<ùÃÉ¡„Öh“Ù΃ñh·“ò²gгD"?)Ÿã?IÉbPêH8ßO™ºTEG”›|@³»QžÑdqf>Á¡ÿW~s¨uoiyß½‘­Þ¿~‰EW?¢ו½óNÿƒ>U~Ãùâ›k´.d*œzZíâxÛL¦²P. 3Á‡S €i* 8šÃ"€‡v-ÎÙŒÙHN´Ç>ébŽ·ö¢êiÚLEoƒ½È‰‚ëKз­bµž²öДˆªÙë ðâï ©ìi* &¨ÞÒÍ2¹”gÚ «Æ5ƒ¥+_“…Í|ž7 §¢bAùüžZûDþêò ˆ?ŸM¼w^ë£$nld¥ÿ‚r´óšË_}È*ùÀ-=… ÇT©ÛT‡ kp t<«Eõν€Šï¬ŠO¥óGµæÉ-råèèÜÉ—Ô"qöX¨Bµ]_¡¡Çð]KìŽhÀë u€¡8Ÿ¹ˆic²Š}¼IŒƒ'£X¥|Ç—ÖR~YžºRÙ(Ç ïÜ’ûâŸÆ%ü®è²D¼ß`6ÅYbZIÂ:„Æ“l¸«ÁÝ肨ê a‘€ˆÔPiR™º¢>ñ /ÎñL¬=«—:ýžéiºÇ·Ý Ðç;£´}}ȸ b¦àFÙöþ°aÀs]Ý¡ÕÅÈ¿ðœ-ŒöB™Ì>vÕ»<'nƒþÕê&¨ FóÁ0×[^AA`µ/¬®|¶ŽÅÁ¥„.~ö€E ¶ †ÙÕÄ–dLã™ZEððf0sÙË j‡ì˜ôÎ!þIa^3CÇɰä|e¯ €JÎMûª²õ† ó%¹äØ(V¾sùMk€Ú–‹·Ï·d¸Ù4˜4"PH ³Ê§áaRÄ{Ïîp5^×( Ñ/O[&dÀ¶:_ö2­S[s‹Ùóè Ÿ…¸k*Z¥㑬Š?Úƒ)3½r=W0VGçK.J³¹j¿¬`!Tª4ðFÝ-yíMWÍ:«(—#iº±ñÙ(¨i»B/8P^•ÈMn2ž†]ósw¡WÖ¤‰tˆçzEˆGóqIjc- ” lc¹2áD*ŽIf(쪖ξo§öò@ÓïoRœ¯t³ê­ß‰¸œ)½]1ÿcæwŸút%R‚[ ¿ó{WëmËÕ{RJ\ \B>åæ"HŽC´û“àÂXb7“£gºæZR.¥ée¸ßX{¾.ÆV’Š,¡š«´Áëü#’l“ åäg‰1•]« Ûmëh/ð°ü8èú·dyÚçýš©ÃzY®µ™TȤ'œ21Œ7Èÿ4ðM¿ å‚+8¤Ùòs_®•¥±tq‹3\A*"˜žÛp¥£ 9`<¹!”©uºÞBò8^Ý m„ü³MÖîÿ iã£9¸í) ­eKœ?$Uœ@Ä šÜUæEuÑ:Ù)ƒ%)±Ò굋µ[½»°šï<ïÈ>” cu÷]ºÝ.wrI\Jö}ºGjàTu”C<+!ã@©çÙ}—~VÐöõÇŠ‡žÕôvIqÁó²ÒñžV¡¼‰¶i£”î‡*p#èJõdðì9’.w–$+/¹=W+rg?ÐXé[m[KÌ©ÙLhW¹ôD@•¤ï2ù¸7Ú`M”=%KE¦¢ñä Z¯^‹Ò1D7qqŠ­FéÌ;]M£Ÿ)u ä3>EA Æñ¶ê=ÐFu%=[q;Þㆯ@®…6¯uúŸ¹á i…p-Kí k1JO›¨ Ï…,+ï0î:Ý:ü3n«¼‰·ùÀ‡›[o/yþR ƒc†›O'¬šwwñÅÊ _O­²¤F¯7¹ÇP~(á@TÙw>™ú0ûXûùܨd,Á‚Aÿ&ß3Ž-Ø&Ú¸ë›ÿò[«?yy(¼õ;HÚrªòò|=⃑¥ŒŽ5<%3A!Ek(lžX5¾,ºFµ†¼+ cÜ6kç†Âáù(ã€O9au¾¡ën§Kd~¶ù ײDO&ø.É[…p§x@„÷±Èä.—LUc|ÄÏó¹'7i$›y¢šZsÑei€ü”Ú\o«'¼˜Åésî,"î_–Ñí{y?©OVn f‹¦¨ÅpTí­2W;gFºD—zŠ*[U¼^¸”uiWw§;Sø#^a%X*f"~žq§†˜RÂrÿ) 5–j½gõ#¥×ãÕPòÁqom" íä“—H•'¶èÞHÿS»rÒ®{EµHdITçj[_›~pТÇ(?nîàLë^»žï‰î•ˆi™xC˜¢3cªœþý(Wåyée…™¬ïƒ– ¬Eƒ£ ¥Åð¯A»×Gh¥ëdÖÝ3Ï7„jöÏa %ûÇS]ïÕ,·P‹|h|LÉq>ûiÎi߈Ä(ƒöˆ]Ž×çˆiú±ê@¡?«î”w_»ð–5×]†ýÏïÝ6_šEx)ösUŸK¿Y(JýbàA˜É[Ó!­=c›lÞщ §ƒòü.„!B5ÇŸKÛjÄY/iWo#ûЇsOl<&y"ü½¥æÙ?ÚÏž/«:Á}KLp³ '~ƒE®²vhY`—(BzмâÞóýì˜^ßÖÙÞ³ØÃW“TRGžë¿ ~xaS²i²l¶“ÌLÓ÷ê—F!…ûü:ñË—¿MêÉ–"îïà¶'»~úý²“A,e× Ü—~U£^·.$õ™ð´êWôhÊ LÎ-0‚‰½÷iþ—áÏ;™<ê™Va³š‡ªöqç°;蟩€_Ö#™«âð±Ul=S®;_×ìÔ`Îûp&¼¸Le‰C:*4/ú<û'ä¢GTÞ^\&õŽ×Š®®Nc¾Š…qjžÅ}{‘ç1ôU­E„Áòéê~Ú€7Pgì@Ž{˜0 ÷M%÷ìÔ¿øÏ„ᎆ@¸¬-ÒÃVQKQ&&bb²0#¡ÔošˆY¥Õ cl>šÍp%˘‡A¸tܪÀÜm™ÖÓ€•Þ5²ÙØË·!öÐH6C2÷kï3nav”# £Ü—Íß$N¸,ze`§2Ø%çÁÒ($~kå õ·Öq ¸U\¯> ibTº9Ú‘\Δ½ã™ù.ÿxEÿO•dª×¥¼¤I¸IÝ~œØ¸~Z²Êæ¯Ð]Úßÿ7D¼gº·}ÿ!‚&+ȸU=Â¨îÆ©ÚRš^ó´@¾˜½CØɈ‘è¬*±•7™zéÁĽ´äOÄ;æÂñbqhîˆõV`‘Í1¢—¿ÃÂ’3Ç…Ø_ùµ2›@cÅe8™ ‡,B"„ìÿ,ÿ]À’cÊ/”“,t~fÝUʾ ò”¿åµRTº º1}¥áÐîLð  =+?‰zB<í€WÐ FU–þêUu^m=#zAò ‚ØæBÊ YMnˆÿQµ7œù"£å=¯ÿN]þgº»FÍ9ÉïÆ3œZâ³t€]eù*¿ÖZ[ž* ”ømjÁ¶ÆÂG“Årž’@$(°´:Ã.UÙP[™&±O¬ûrž 1z1M!kw7©E¾î_\]¡8¿çðí }]…GÏèV}[í¿Ÿ`1õvsŸÐä'wñü;nŸWmSêéŽ>F`ñFØZ»ýé¯#¦v“s²ž+–”clP´SdC ͸¾ú˜õ•GTФ8û¢LóЛµ‘ÝKž¶Kߨ¸§T;fT ˆ Ù²uÇ?'äOŸT±ÿ߃ñdMl'²{ãbløLETò Ñ“æqä4¼ŽWfSfR6±Ù‡É=aб³MiúSÞ_3êä(}§hþö ðÆæûÅ™ý= î\]µo´\&>A ÆŸ ™‹#›Ó£œ­-‹¯!¼vëC«×ˆJ”N#'Vó”Ɇ¤Y½_…/‘4ÓndxÒ!¾âmyüð9ù0›:tèD ”™*ÓJ† Þ2æl³Ü„9EÄSÚôºž¯ÍÖuÓlßôš¿¬mB /œ`ÛÑTVî©8Ñ{f1“b ÁD"¸ãþ…ø7&ãrKèûÈ2&³¼Â‡’­Á±@eöƒ3©2oU—HŸk$pSí¸=ª.8›u]kÞŠÒy‰“’=˲×Òß“"Y«jt§ù¶=GÖºï Pq{Õu„FîÞË4’»óÀcœà)ض] ðëGÔ:^Þ*Œ£Të”FÓ6Ž” RãM«µsœ–ovI“MV‡HNñŸäX"—,¬ ÚÎåùÖLÌa÷ʺ“&Ÿ±G0#|”#@ö&ƒÅ@wcJšª%?ͳ¬ ÎÙeEÁŸ‘–d¯Žl—É>¼E›0ê º +Úî´é'RaŠ“×OôõdÐEôŽCÃkýSQH”[öMþýÊ<]°ø¤[6æm–üÂ) ªÐp7DBñÍÜ(YŠ${%­2 ×j‹&ñ 2Ï\l(ÍÒñYÈÿ¯R˜ÕL‡Ú ,f$g1µ=K¯ ùsf}Ы¨Ø@à{m¾¨Ã¤èL-‡7s‹’åeb{}_M_êž³æaÃÄdà§9s * ÷jú! m§Å7P#&xÚFà׸(v*ª¯óùÆ”È#«ÔéÅl¤/Ê•åqì¡Ùdµšyƒ L ú”wÞwŽö€¬~yÃø?¾0¦Cn•4Û&°1àU¾~iã"¸YšÒƒ’\'¨¢¯KÝ+¯ Rß9ÚTØÆše™HÚâ¦h¶û~'õXF—ÛÖ¨æ¬áåf¬ÃÖÂôSrn[ÿCQ9Âï&5—ééÇ Ìeú t9Wù_žbèüå¥'¡‰âe“Ø|y,æ¡vmûÀi»õµ~Q/¦©õ6ÞܦmI1k.ÙÕɽ{+á]ŸZC׌d#rÃ(ñ¤FŠ  PZæ]«mç¹y³. 'úQã‘o†ÿ6õ*§{]·Ô.Ãq½Z»á-󡉕 %ÕŒ\}«¿é¬¾§{w›ø>²2§½Ó‚ ý‹[Á˜œw!AÔ…‘'Ú :õÎNh í5|ï;ÓaXë þ0ã•ÚZ®’NÚÖ>³NôXµŠ)qØð`<°_]L{ç6ƒsjÿ1¨‰¹Î×HC“7ô)bŸ>´ ÷´÷í­nÏÍ#Ou›î˜|~ǘI@#P&BÚV%îѽ£Se…¼ãqZÏú+éÿissáú6º4Jܪ¹4Kð‰6‡œšñ–a–E1&쪽ºlª‘å[ºóä{Â>Çî[À9@`šîÄ`a]¡Õ¶š¶›KC®$e#Foâ¡~ ÌÞÝ•nZEs¤2„ô9ÀHҜХH@F•”UkйIˆìË¡Ãà¤#MõÚ‘ŒM°ðŠéÔÀYðš çŽßaÖï(‚m_NÆ)‹/Ljoh»­Akrjsž¼ Œ|;ðùpp‹fj”11Ñ…»ÀÞ,ÎàenŒä<ÔB] $RKqIú÷½h«ØÄPòyŸÅâC O£"Å»ûJ÷;ý‚–Öª3›hæG·{#p™“’EUhI`Ê¢{§¼ÝˆWϰq=Ð[hŒiTZ}fÛ65$2…«ìkÌÖà¦Öþ*Àjåž"GtõÂP` k £˜žœÅ|3¾žÓhã9 ¾ÝØÄÍŠD½¤*¦ñAÞ‘s8löq ›n )n¿%™<þØý?@_)²tßB%äÏüX‘*´;Å©¶¹þ>MˆHëðΖå¾x›p›-`£ö{íH䙹×ÉL ¯•Mæ7€SÓ•%>O¥ö .Øvа·v·•¦¾H®&mçÓ)ƒþGÝ1„6•ð³³zj¢*“gx¤Å£y–ö|Ô©«C8„æ.¤I0,œc÷èBÚúZƒm ²?-éÍù¬ñö ºr&$íøÞ³vKÀ‰ÓbpSÔõt·†PýÅíªpŠð—gâc9¥eX‚ìR‹q3´Gåâ6(å)¹TÞ¼ç­/yÿRÿò2ÀÖèG Að‚Œg0¿”Gu—>‚ÝØ¬Œ¤Z£á/DÚ‡MêecD¬4¶RÇX}ž0®ãµ%°ÆDïsÌWÕ«æ|Àyd>û³·¢~ȪšÁè4è\åÂbÈ3 à{#ÀKØm6¼ÅÏ~æÚ£ZŠ'Þ5¦_Àð?ZÜ•ÁXÒÙävjôð­G²‚Ìš²_@qù2ŽÒ¢RKÙŽXòj7P÷Fˆ5•Ѐ;s⾂<¹~¶k¼´µ^1ÉrcAa#œ …ÕÁ!ùÒ—Ãõsvâ]Ø]™˜é/)}Òµ³4^MsA­“ƒ²Rœ‘jfØË8MjÊ9’üµë¡/öÌ^oZ~RF¡„BA;Ê;¢{“Õ†·F`ŠD6*‘ÕónvØê®s}ÂqÜÊ¢u/Gç[‰ÛÑÝ!Z<ÇöÊ“ ­–SÊ¥7gf›îÖŒÀk7ï øO?‚M¡ö­zžllù¹ez”¨(õ ¾žîXö)5㯦·Ô“ Ìî‚Ö‹«~¬N÷¨•`¯Š'sÅWP÷86æ#ÞJbÅ{Ä!–Î ¨j™Ný@SÈœ¡© R‘Gä̵û^ÏÀ-\ÃOˆ[©Á%Ú0*ÕºúPª|òKÀçlà+4¼mâ¨/ÎÏõ0N´‚/kÃÁ냸%§àÿ>A1±JT…V‡Oñ–of–T—°²NpŽ–T̬³ú…Ü’ªCË«–/FsÎùý°Žál´ïI o.öçŒât$²°Ò,µþ3”Æ&¸OxU«ú°¶ 4m¤Ò1u¥óKV¶Ýæô7MK’¤0r)èd':àÀlk©|€}%C¦lŽÆÑp¹Äæ–ï > –m‰íçݬÃMé·E$ÆÝ±ùPëïrMÄq~ò|ç‚d åÛÇ05ÿv fÙ­ÈkÆ“ù*‰WôÞ÷…3;-#Ùä @œÄQ˜¯ÝÏ¡Cg|ègo40©ÌGú5¿¿‘¯_¹J¬ãˆ°PÛxýüÄGÞEt÷)35sÚY8?¶@ú:Á/ÙRë9Úþ*FEBÁ¬ù3©Úå zЕ|/_Ó×sf3Ȥúùd‹ŸÎþEUôweU”i”<ÆÖçN–v«9[Fw0æ€'Wî¾Éêã €äšðh‡WìÇækKo'zìØ´ºœŠU þRù᥹&€¢¾ãXw™»®û}KÎ$È{ÿB6¥œ4Brtv€GÞV  3Q!´´IÅ5cL7©NŠÀå-iÕïOÛ;˜¾Ÿ™Ç J°L²ÃŸ2ܽ.a—K‡`rÍA“©Ôz›Q0ªAC©ÙWÞ”_œj,ÀáijÓGSŠ%PLYò¿ì¼æ9Þ©ñe½F¿ß´ªl6¹(ým‡/bó’­!Ž(­sÜK•›ÂÁPAŒ7ÖÇ ^s¬Âçž8ް½@]^lÒãõ”5}޾gcâ͸5m©®¾ƒYðe·ÃíMº²#aݳzÞ¿„X t1“Ô)Ébƒ,¯›ÿ|Á  Ý¥B6ƒ•™ŸS¼dÐn}ÊEŒC)¶•‘Í eÿe,^5 ’8“œþ,'Óù”×máFUöQ"-Sîo ÿ^æ^ Bþ<?•{¡Ñ ¢—0Ýv@…È6‚sÞ¸}Ÿ¦/|Çô³±÷ÈÖᜋ *ö¬ä XœÂù&–OÏNÏŸ æû@©ÓÃHW{¤iÃõ‰¯Ù¤A¤H9rci`4Ýóó•µ?Ýö€¬ \$ê&±23XœÊñcˆ¶Hàkßid]^h²MÜÄöÆEha’÷p›³YuYÂ.~±çÒaŵjÎEÊÆÂ7âš×Ü‚OeP~Ä}<×ÙýWèK$WGÄÂjç¥chj» >ú(I¯šö"%2óåÅ¢@ iÕõÚÏH$»­v{ú¸“w¥ÈÛX ©*h¦Õ‚ „Œw[a !MÐAðER1 Õ6"ѹ‚Eº‘d~[¼£—O»÷“k±~6@ Ê3|J€ö–|‚ûÐ3ÁG#M²€„»h÷þg»Es3;±ÌJaQk$Šz'm(Þ2ódYTrÿrŽagrÖ öÈAl™fN&D/øÙöL…W2™zË÷ñÂfÕëûQEâ!´#C¿‹; ÝÄNŠnrdœŒÊ„`ü`‚3*Zþ¾y ±—yX,áò±Çñhï8i´e,º<¼›•>«ÜÊáÑÇ [7~¥#-Ü÷Áne^\öóîÝÛø•œ±éiÜ ‚¡Œº—»wXRkñŽõ£/½iÄ“JÌÍ%5ïôµ†•1|ï>ÃdzÑhÚÕ½³1YF”ö܆:MžìŽ5²à‚ñZ6ó.ޤÆ+œM2my•ñœZ¼Å¼-Ëôô&ó„=ëK7ª_JµTÁ*;¹C}ÁÜö¶*ÇiQYɦqÉõgÍäöNRÍÅÕ-è ½¯R!mT+"†z–5©§‘­o…R–U|þÁBe«c<¢¦o,䇚 $V<|œ‹©›Ka¦®'P_nÚúÎCãj R®·Ä°ƒ_<ûØôZ‚­"Ì¢í'r\žÀ£’$ámYÉáq!€önNc]pU·Ÿ”Ó'‰WdîTZ´òX2‚úÛ΄5ÑUÌvç·GÉy¼Èüèzø3zDÀ¬üK&^ô!lú EÖÒ€Xfa ¦öD°šqo©5êú›ØõÍ(ýAJ¿Vô“ 4’UÈî0”d7!ù²ylîF–н’ƒå ±ÜÈñ½”‰Ì'0 ÷뮕wߨ.<—KoÕ&Ô‰EóçUSˆøÐªèô©ùúȆ³£QÁ¿Ï‹zõb­ e•H÷a,ÆX¾'–´5K³ þã0rà<‡-TùKoA½C?övf£3Ac‘£Å¶2NôÏeSŸ‹²L unjžè_%ný1(h*KØÏ‘,Ìí6 ÓDßÕ6.w+¯±…Ѫ¶XÄÞ÷, Ä6$›÷Q†R‚)NUÓn¹ƒ7Ï0· ›q WÚ5jË¿ÎHŽJ{ÉI*[ÈÜiÉmóá¹°á– T€²P!R­¹™;=\QQ4ó~|î Ã:Û’» ×wcT2ÖŒã ý…… ÒF!K†—SØÓþ(³J,*¼>Õ·©”žÚ&+Ô•%3hÜù% :¿xƒ6ÎUbØ@ô(^Ü …¾us1=|šÌ0ß4;a[:³êVSÍÄ_ëÑFWGëS|ÑÕ/vz‘ìü:ù5ÊwQ’Ë +«}]i€cï—ϹjõÈR^r–3ßE]žÑD¨zRÓn!åß[¿^N†]c³©Ða•¬\<ð*â±Úly´žW/¾¨™$çHñJ,í£ÿk¬¿Û¤Eä ]'óÈÖd°K)%ˆ1þyü'·jªöŒ¤wª|DöÀùòúZ¹æ®ð@æX¾x¾ªÎøWâÑõG€}¹ËÌÞ -ô5ÄyP¸Ë:?6\#+*¥U«Z­Ìÿ)´ œý SÌt¶ù]$PKp…OŸ¬us§)E½B¯0DYž§ÓÁ¡½TÏZ–‡#úÈ„,³DÎ,}îˆ$l.ƒ¬×Úø*ߟpÍâ2kÖÚ{¯EÑ“\By¬´¼ãŠqaM`·¹C¡a‰h•_|.~ilZFþ=©ÒÔgºžöm.JŽu²¬ãuN¤!ÖZìŸÓb’t*xkt2ÄM}6 *GI²P®o,ãŒfÑÃH9d:{Á„xaV^%Ì^"ò¦ÐÚµ­‘L!e<ç7[ä!C¶æÚÁ¶;~ṯéÄÿ;k³V’{m»ßåNêÐ-¤n5ӆ×è味Aªò”_áßìÇ“¿ýŸéÏ’?XHÛÖ†ÅÊ¡tn¯‰¹ M‚ò­wêI³¥(Úö‡gÓíX…FÑx.Cù}û« xozb3ÙÈÀ°‰`Kxo%]ï’56Ø®¾$±€Ožy®aFT˜?ð›_·æ)Þ>º*äà\TòõD|?õ,Yh=ÇaæKÓlÕ‘ƒ,tu*2üæ‰( 'aey1ýy–Gˆ ¦ò•°0íä {š.?µÃÑÌ}ñ”ÕǵÒKaغ˜ìëÅ>>(ÝIÛ¦1ùãTG™Î,ð·§æˆÌŽš(-/¸¯ó{àŽNœœ?+x]ÒoµéÙð—±«ÃÆÖƒö¦Ù§Y¾»ˆ<”?Ó ð§qÈãke´È,Œ×ô¼÷ Õ9;xBÒgMÑ"¦~5ë&Ä«Ðz`Y‘Ø^Óç R+ØWèñ8ö’WÇùñ_ìö¤" >0ð™/ªG ^í Ú¢Úuø{ž¸pïRÌrVü>¿$¦êþ¼x|-©A#%0\¡€Z„оU8a5ÐɸÅt¾ÈòWù…5 Ð‹1)}ܵÜFSL\`lñ¾JÆ'Ó·„9ו¢дW~±çØÕb<})R¬ýÅŸBSTžÚ™ß½Æ3ÿG)Ð0esCfoJ®I²,nysÑ®‡k+q—‰«N¶uäõ²]’/p:I5ñ=¼j5~lÁ ± jØ7¶;VíÎèŽ åØ+¼_¿Œ ÆÔgØh¥ÄÂŽ=*h‘¹oÃ̪¬ÀN£ÄÓÓ ý ðá.÷öd¨±Eì] ¹\nĄܚBJɾCÇÜ3mÊ5Ô D„-ìêû ½JàÁ ‡ªcîF6ÉþµÐÈäL®+¤úT}Ø¥ƒ¶ÓsŸäo ƒJ ¦ÿH:LëAèa'9t»<øð|VD)#ÉI‚ˆX½žšœß^-^ðYà•î;¨Ê>W]ßå´½ãË|r—.jU -ï…^3‚ÂØAû¸d@ÒuPkÿäÐÀÜR/%áª4ot~#¯¾Á0³UþW{Ó_«¸Šx$‹|Ãüļ]¨oÙù£6šz‡‰SÂï¾ wñ’ÝÍÛ @MÏÌk/W!}DÓöoœ¢´©™¦t]L¬‹ô꺫Åý`¡è¾F¦ªóÉÅšŠíc™5Í!Œul=ž–/ ˉKŽ7¸ 5#-|òVÒsë&G¿ó†Cíâ… a­¢Ù ß,JÊ“ ž96£Záq÷?Þ3g< D¾žkß©6™†µ26ÁôÙ¦e0URö£T>P;ø‰b%–›I:¯qEþS¹«-Mð"’ü±øŠšsÃoìgOÜàÈØ>Äú²gú´W;dzÏÔ/Ì·´Óê\Ò…–KƒÍibÁF*!*cð¦H„¹µÃó3€ZÏÏššÑô±m'N{µ™æ*7¡ŸöƒëòýþHòáªU+¸9Ìšï‰æI#çÿ5pŠöŸ)¯>š_jû¤f‹õ IE9ƒÄ£³öZ< ;’ÔNGCj¹vyxm oAj´Z4Ȭ™{7P^·NF÷ÇÁM{Ë*t[ä%£üû*B° '𹫨eÔ=‰Ç]Ö32 `ÿF5ëûZÕ};À”>0г¦ãøý±Yv™ ýÝðþݤD0J g ŠÜU˜vg¹Tçø™"ûª>`2§# Ju#QªlÜ^J,³ÑÑK‡ ®¨oÇݧ‰ª4=]M¿ =ñLÎ~Á0ƒèBá„'$Ľ Áù>tÿ5¨N ÷¥—ƒo ×q[H£ m ]Ÿ—ƒÊa3Z Û–"¥g–¹Þy;FÊŒ9Áã<§]f4Õ;µÎ®Ã&Œ÷Xm½‘Ýøi‡ñæTË)¥+tLkµaÃp­Ú»Î ×1x`ùÆÓM;ÉÖq!9ÎóžÝþ3X »C^; ¹'56Ìj¦}N¸ô9AyØí&n¯á"€ÞyR</7uNö5µVTQfÉijr;í¶¬Ä} ¹$o·[óÈ>‡Mº”Ð lt´Yâ¥ÃÕ”úí(ƪyjÝL…·¹p®NßiJÿ3pŸ¦IC€íW¯Mß©Ð5¸éHò%É&Äà~€ܽݱ˜âI­äW2õÛ›ûã;éûÍ-4ì?芜evE,}ŒÉY1V¹QîÇÓÂn­Ht‡úJÐQÚNyOS‹,è)Q¼£1$qJÄó^tæ+ž¼ºü†»Õ]–vãÃì&k–¿ƒ#˜Ñ~w÷Ðr§hö˜‡ÖGx/ÛÁyfe:ìªîÚØíŠêãÉK3KÅœÜã¬lÆA&¿¡ê-E¿´Ë>x¶¿‹ÿIÛ³tKýf¡{–Òö&BÆ4Ôe=¡VlÏ™X>¥/4ëç%ñ¹´ʵ ©ÕÊ.É6n•ëÉ;¹FÏŽÀT¾ƒ–"É=7‘Åa¡Ñøi6^AÝ?-2¸»:ÁjѪ{7#…4«FcÙ¿íœiê<‘™ ¸¼ãúÿõI Ÿ@I¸f†`Œ²Ð<·%ï¢RÊómj£+q:dÏëaúnÄ´?Óyìðeu¹iÖ%˃*—&‘kU K:îSH .g-UAÛÙSåì$®¡¨¸l©Y¦ ¨ÁŒh‡¤£Œx«ü|Ka,3… vÝC9Hƒ˜”ÈïµDDáuWa@5ò¦K}Þ”WÔ¯ò¤¼ÙÏ¥bÿj8p'd1k )r‰Y‘dûùÏe¾ÕÏüE Ì7ºo˜ba è XøŠ÷“$Ò¬•îËÖšú&ñsÒ•§<.d®ñ0Óÿ5d¬MÐlÀˆÞ€Fw–SE,¾%WРSvxDfLob“7]L„Ù25N°ª}¬À%ôíÀêL,Cd£„óÑÈn¯Q´†É-ßÄu5=—=ÃÚÒãøŽåK—àÀ­ôX9ž\ „ZM[»,7ù†À§›~%2ú>!Õƒ»Þ}¬Ó?§Ÿ@–•ÏpÕqÝ‹z/.[ñô‘ŵ‘чh@c¦øŸ~o€¼õè-ò‚ãê¶®žÑN ¡îžUÒ]]dNß®¹Ñ[†ÇË0¾S5£Û;_ШLÍtKÉ!; ¸¢P}8·:äßy9ñ¥Š½¯ÌÜÓ¼üÛú×GÛqäVëÄúÈ{I*pèVNb›)=<ãæyš®b-Êc‚qUˆe§?/fÕ^ösP•ÔÀÏwõx3˜€;!×Ç»(èj¿L…)b¸ J+F“é R¢äúˆˆ?„„SºŽ4;:é¨FÊ_Pø—TNše÷mpcß¾ Äú¹9k I.$›d.]Ê­Èÿ±dZí4Ö‚—ÖB€ÅG³Å‡÷ pˆhŒ3±"'¿¾nê±[^õpI§uïI¼EJ€ÓOËñ´’Ín+XV>„ÕW艕cK­¸@œ Éëæ+šn‰ËÉÐÎVgot= ¦oa{'kŠ.ªAå1MTÆî¬ýTÏàD¾K*Z‡Å{œ4ùm¹wJ^ó !íµ«Ï&äÿ.Qå žd•É3dmÆö'mtÜÀ·ø³êÏ™bgjkfOµ£Æ«R ôÍõ¾Û/aib´Ò[‹©VIÓ¨–ðŠND†qs”dÐMCÇõê}w3û¥ëI^Bo- /# –†îë]O•²ßéR‹9\Î)µPù"$k´^XÏuôs6Ó†a˜AG¶Ïì’ÿLêç¡v$4ôÓç5yw>¤‡,Ó#›ê¥½á<91¨9cÐvu½mÙÀ»š@`=ÍÐ&(×·yĨx—ÓñnT×i£ kl`Ó»\–‰¢ °Á8®õ–“(ÔÏÑ»ØïV@ŸôLýг›ò„U˜grcǶ¸m?“MŠÁ’îBu¿ÞäØauÊ~øøj:{ÑÌzd4âGqW&ÖšìK£X†õ .йÝãöhwíèöôûtã/²û¾Þ…ÿC©»íÕü_eõ>®‚ÿC§[íÒå£&ŠôKÌ–à]Æ3ŠFtAåC-ë,\µµoÔý¸—¼È"!C]_þ¿ØäoÓÕåýß v²{·‰ŽU—Fjèè°¢hÁ¼õ ‰ö;¸ÿHfN öÏ1 Cœ•{Y BnÑO«^x|`(É*à–0âãðå”Ã>æ ·ÞKÔqc|zfÛ¶ðñ?õðýÑP®ê˜Óc~)T#ùˆZÎ62 Qš™ñ,=Õ…‰Gg½ý = ¦%¹óAƒOZqÊ8NœÍ‹®ÔÙe‘ãaGñÀsé»sïxp]“yNgm)qôzŸÜ ’.Yõ•¹ü£êÅJë²ýz j¬ÊÖ¬÷÷‘ÚÅè^Ÿ1^øz]A?wŽ(AƒS¶Þ‹üU,pè„RP:õ±²«9äî@TÌþìá4^ùüÀ1Ñ]ʘ5ùKò2æ‡Á;ó<_Ï¢¸­9fbúÊá+å7ññSwøüÑú þ^ƒø¹Æ÷³Únä‘3ï²S„D*nËìV,¯‘,¢ñœnª(ì¼ÔVwr¾ªø±I*×Ò¸l%Ÿ. ¤@nQ¨±"‰å*x€æW!cÃ$ #,Ép Ì¢ÿ7ìý£;ÚWiSÛ‰ ½p‹š/«I*‹lk3ó[‘HÃÆí”m¡;``ãÚñ§/„žúî8R4…øjJý¾ªxß`¹Dó’aMEƒ0åÐp 7 ·ñ[Ä…Ü÷aç"MMš„ëEy@ÃÕsÄû:p©rtGv@»YùrÎ9ñ*°FasY¸)å›È;gÂþ§ÐùJ4—·Ü üœL&0 p3ã¸#†œœÆî¸!Æ#ŒCÑnš“,×O™?Ïÿ-AõXÃõ¾×1”ãÓy$œq\‰œn@Eµ1‰»¢Ö蘆£A¡5”&ŸñŸ[áµ–…iÄ}ë°k\§;e<§F¦ç9ϲÞÝ`âL¬ÓBo#®Ù³¶—4 Û£ÁÙÆ6 d&Ÿ—EB² ãb6¶¡½?ccš-­Ó˜å"RÆPùj!¥Nj‡zöðñÌ »¢dÒ´ãqŒ¤ºlÏ~ÐZæAüù¹Z½0ÿ„§÷ªo½úí¢E†T[´deŠŠqîÛR-^ñ~O–+AX}¶@€GÊf~PÜŠR¸Óbë£b:‹ *K‹Ë;U¥À:¦°sãå%{×D‹\ä&ml×ÿ@TCl¢Ÿ”/²{lë¾®˜µF¾Ç:‚î¤çØ–YSùÌGH&XÞ÷ø¼4qãâ^hAÖÑ-æ¦J±-V_vœíØBº¬j¶a&t“U6QO*Ö”<|aãR|UGG'áõgŽqÎÖñqièNþÞªSÁ¨¡w¦~VxŠ,\ìæoi¸úÍ®fq/#eCkáD¤PáQ1ô)u.ÉV_nE"fÒaƵ MøŒðu¡½9çÏ#Vœ¼AÊäÀ2ÙY›ÝŸL4TU·äHï)ƒõ ÷„# ×CÁäcNÊJ†H(ÒþÒªš“!ÿp^?ôZè)Ž Ÿß­Ì÷ÆÉ"_bhÈŽèlmdz˜9å•pÒW¤ã¹‹c#gîøË]ù>µOÚ×b¢óêÏ–å.Ì?Õ蔦ƒ¦¦nÉr_ÔöIì/ù¸³#iã:`€újÍùHñ˜õ“ç‡jœŸº0‘.ô5ÁûñÚ)± êX%”ÓTUó­Ò.O‚^(Õ6¯–Âà½o–o850¯ÿ'rL"0oÊ(|þt8ÀY<)öoU‘.-Ýâù3¼ŒÓ\žW¢sH‹-ÕÖDŠB›“Ý8¿o^1J¬~®ªbHyë ¦À¨ÅæiŒ ç߈o¼ k¨ ö¿ès4QCrZh­ çOó¥ž(j%i®(>%ÿPe+’ ¸c[JÒZÞ>Ð,åA_O†“ã2Cæ´Jϰ ÇGU#í q­äŒy˜‰ ãó#&ÉÔSï#š¥,‹­qºa<¸Ú}!|!x˜µùyÜíB…—W˜š¦x%ÇB#ÓÌwÊåd:wàÿg5rï¸wØó)ðêH@øç¶¥š&= ŽøbcÃnR¸Ç9¥¿sõËgE¦šývÉî8øâYaÓËV` ã×tKº_z–ñ`fêE²Ù–òPÒg)´@íqÜížg¿ã™î—ì ÿO"L-¡Üø,õIîYÈ™¢ZÑÛ.}6°îìÝR¦…c“WVŒÐ|5í¹„õ1eiÕ¾vS/^”{>$`·lü]úMºƒ=ÃßÙ@y Òç²JP Ú#÷{ìµx]Ÿ¶Ú] ^¶CoÄkK‡Ú¹3g'±m²1áÒSK¤qå圹‡þ†Ð€L±×ˆ 7êêïÇîG±*ÐU`DŽZƒn çÕ=ćr0Ü´Û¬½Œ¶R£°÷<;Žz|àú’²ÏÿE€Hê£$ì³×ÙŠÉø3‡G'bLìýÓ€è­2Rz££@ 5LE¿)±ŽnJ’Ýtà7ºÓÄ?¯`¿ºÐÜg§áÊw¨²ñôKýk¼R‡kÄ| ß ¶6R™ÌÆ96±—™lô’ÓmÆ‹ËwqCªî¬y,Öõnêé8òëE÷M¼—¤¸¨°ÚÍ7­5eZiDæÓ*çœqÝ•)?Ìô?Í€ì{®kCœÄbXÏt=º ¨ßÌQ$>ÔI;=>?¸Îþ›û0FôÑO:\M¶z7 ´Õôüb~E3m±Ò¸`´‘¤ñò_†¡»TvD*n —^Qz6Áq@šBdóãg+}LºÍ,S¸9Fó >¶8óC›NR]ëË–|0ûÝ`be_˜|ÇM‰øº<#â ë¡°‰ÇbB ñ*4±Ä>bò(ÖÂàçrP„4ïmƒØÄùj´ñ¹0GA~83ù¡^ØŠC •ÅÆuTÁ¸£hZQS•»9³%Ǫ6ìHS“æ8 ¶·W¹¤£Μ“H¤Ö‹Û¸tÁ |\g¶éÞ” ŒX˜OÕN>úñûùÂZúw¨»ÈìCâ‚÷˜¡¶bSúª5°pMô~n‡l¨îs„„ïB¾(ºÈ¹åÎþdüìD’a+ŸÝšçaÚªšmês¸ÿpá„KöÊB¸–|Â`?0ä÷'ƒ»¿tŶÁvõ0¤t@ÉþDídj'’B¿«*’ýzHåÌ—8PuÑÓöàcË{õË Š ÆéQ++6œùm ¼ÿ|­ PwàXSàÔC~Ýûˆb–à7ÇDl×2\eÓŒtµ‡¾Uv•\“š'«ü¯Mò”+d߬ò½—õÄÙÅáÉuÖÛS`óeFsÕž™33J÷j—ZT Ö’Ç]Íx ŸÜVEó¯/ž8ÐOmï˜$-U„ß M± Ë5Ú˜8ÂÓàZÅDPóØg™HméölÜ$&ôþ¬lPÌn,X,•xèêèd­+ÝVJ³Áº:úT’É„ýíß³cÐ~´; Í(ºØmníàìŠyê‹Ï)¿®å‚ª¯œÛE$ÿO:®êÓR¦0ô ) KS.ðÀ`MУã…ñÀ5rõip×[H·$âü# Öž9KûhÍ&(.5òÐôZMüL]K)—jrá{§%ߨEâç[nwWÕ§öÓX¬±§ÌÎ rÿ kÅ1¡- Î…V¯’"`}cµJP^f»a«DNïÁH¼^Ñ+r{T{"¦ç ˜O³%ž·é –EÊšŸú‘L¡„Ü68™óþ&a¯¤o’Ÿ•¸·x+1¶™"äÚåÅÇjF„ô}S‚73¿O§y~¦“ ©1¯·Æ€bdÓWú›dI‘½êxÖÐàY’½=ÿ*ùÔ<Š6Ã%Ò±ÉDu§Í¯N ©šÝaźä½tv¢°´0øù¥]·}AÖÆdýP+… F¼¶Áð:36ø³%¹–€‘·½ö (jöàÆËlâ "‡øLJÂMwâr³bÅì.^27¼À!³±VJÇŽÖ›êÌ>G´¢gÒX Á•œ‘Vtq(Qu@‹!E@4k:ºu[äæò’{$Ð-×[ÇZ[ñŽâ!ä1g€!ø¬vŸU·pªNr(Áˆ'BX«S„´Õc¥:t{½¼{ÅE ך:xáܱÌbúa|ܹ–?ãx„2ÿ%<ÏÊáBÖ<7ŠXŸCRl8¡ã*GêÝC„ά*»ºî¡±¢P‡™1nzá·)UŠ4¡/ÇhÑè'=ëèJ@+Å*+¤Pot$Ç­å7ÁÐ)¾TåÞËWÌ f÷â%Àû“p,¦¢’0¥›|úK⛈ëiT|g*dt¬‚Wm;øA˜;Þ9 yÈÅ´ÏcñZÂòm‚÷•eÉÕáòÛãB†ðo·Ñ 0õ J‰Eâ1|çÂexËhF½àd[kÅ«o©t -E¥7 ’t¾¸‡Ú†SK [?ÞI«=Is·`’ Ÿñ¥Žò@Yåü%T÷ ©µK³Ü;ÓÈœôëK>ò‚¡Þ€­z(°5Gœõ ¹ÛGs Ö«ÝE".w_]ê“`&R#õ¹²ø7@lkl½{™ÏÕË›m’w-^Ne„UžÌì3Ëm„4 ;º‚_SHEa 6Ô$Ÿýl@R˜ˆ*_èN Ÿh¿t·gY,òžõùtÑž)\øU¨½~Ôô}Z<«å@lt%Ë8P8Ž9>w €a·ý†A X&øö¥H°¿ÖV0EyÎCÅ¿ó}´Dú»`ï·²oáÒ/ðèÞ‡ëÒ}]à 7ÿC['ÕÝ®‡ÃõÑûu«øuO>­Ïý½_JngÕAßohÝöö‰ü:VþÁðýmßopŸÃK¿á¬êîÿðýq~­AþSO« ŸÕчê#ã}´%öößoiä?áÑlÙðï“øiGü5’û{íÐø~È¿n¨ÿSsêÞÏÛÑÿv€÷؈aÁqµËí°~8Ë‘©ir<§ Zl}ÎÁH5‹5*#ÿ[PgEn$~™L–‚?{˜1úÀRü9q 1Çèæé4_;áȺêjd9z.z|Ò©ðÅnxú‹zfvr*¦Áð{Þ0³û{)sï%ÞÊKSØ›B;ôšÙ˜5ιÚäúIñMm¹oI7ª ¢¸  ¥OÍÅ#Uà1€³Ù ²6иý·„ZtXƒÂW(4l)Óu Ó¹ÓŽ‘Ü$±«4\«½úÜJrh矤¼à³wD…óÄ·¾+Þ¡x¶i n§H+’«¯Z¶€x¡´ßÊýàÑj!|…D€àø/{I>8bžûtÈýáö“Ù2Mj矈ÕoY~õ ªyWÖQ t~~Vn[Û˜ŸÅò±âyØ„i   ޏH£#Y¡*Äc^¬ËŘ40z÷ð·M±SÁcô»Îf*¨ É]yê—ŠëBt›õÖÁ(^æéÞw¥Ç…Ž/š·J÷ÔÆ€©ûgØÒáó80 S]bT>ÓïžW íj3lì“'+YSCíò†ÖpBíf±nG&íÁ)R7)±<톒ùøxÈq?-PÎ$߸–õt#’1rCÄ,É*«ºz`®ªh« ͹¢î¹±°#(+î‡eëù¶ö_Ó‡¨áB}œlr¯Îι¬"™¤ïѰjGÉü˜–DÃÀ±¤/Ø; _U’„âÂâ˃KÄÔÎä#£aϱõÓþ(ûêsy~iMð1$õ5ªÉ­¢Ãld¹Ã{ÿKǪ0péoÀõnܘ‚ë&OlÚÁ±šºŠŒûºÐ˜Ûew˜8n75pf«í,V®ÌçYðJZ!ÁöëÐŒhÄÐ~Z¥,I-C5Al‚GþÐ0ðK§- ýZ²ÿscañÒ%nÞqñ–œ)XšgWêÏbÂ;Ô$`RÄ–mGºÞlÄaÑ ‰ƒÊ‡*ÙêûÁ“Bô"$ÀÔëM¬ýÐe¦lɘT~(+ vVØ–rEr„› û»ÌL7 OüqÝ:X=Noéáê¼ÃÄä¢c¢D F·cÖý:2z` °ãÐŒùD"=ëÚÏ:M‡”XmU`Þ 5LHzÌÐI×ú`s  ð­±(}óÓAâ´pcÌœüWª|krVÔoB¸îC`,Z¨•YÒÐ^Š¿s«eqR7„#±pçúñŸ»Êˆ¸™úÿ{©¼?ïc×hämŒÃù²9´¥¬Ô§Vå¡eü“ï;7Ïšqç*en»Q—*ÿ9鈨Y["Ýá·f.È6àÓªm’ÞP åÑ6ƒ ¶¥a’! cÖO¸¼«x1ë~Ý\ã¡ì(9“…4Í”¨: >e˜>£` d¦7,í#bæg½†s!@Ìv{Üé%“jyþáUã„ýhýÕ’V–¹QõaYÛg´ôûßd“´ê8ƒ„ƒJ8Sq‚ã–ʺçûƒÇ˜Ì«ùNf8 YÐɦ1rKÕ Àèšö ß/E°ž-óNûÏâc0œ g eüL·“QêžÂ"IKáy‰¯ø8u'…4 ý”¡Í@™&ÔpH¸PÃ¥`ä¤\ÒáEÅýÂA߸¨Xåÿ •IÚ÷Ï1Ð÷q¾Ã > ¤ªÛ]É CÛ‰ôXã?W6<<Ï© Lçnkòz +ª¢‚ˆ’hÚ<€¸¦JÍÖ:ûõý “õ’¨"dÎ[ÅýßZ)²òÂzxüýyÜÉ’'jC“aÇÁã‡zˆ±âÏ<»µ$‰!-Ô:å ¤z«ðŽŸÉ•ëN€ŠoÛsÅ8J\´™wdðü{Ä¿óvZOÚÎÕZhÜ)QgßåôA "C&ÚTŸG),TÙRseV>åÏ–©dYâÍQxö-›ÅÂ% ù"þÚyv޼å3ZöÔ•L‹ƒîgKõ±ów|h,†·¼Sª©#VûLA‹AU'› Ó^œÚä=²^¿£Ñýá´—faS}¤e¤“SYŠTÚ@õ0r'ˆ²_r?Êæ&GgÑP¨øü ÑÓ³Ý*é“ÚáGÈ–³•]Æ›ý7}¦ËóŽáä[÷Ε½õŒâ 1xëÓëEƒ¢‡c>Z¢AÐúxË»M:òá ¶áºJôõý?Ûùû–ˆæ XÃ{!ÏëàŽO‹ô :GõEE-ïÅCC,!Qö'SbKøÐ8²T¥Ù$ÂPD›ËþûÌ®ŽP@Â!/ Î"‡|ÚØã.^ô! 7ekûæ0ÝÌãv$Öaþ32R}ܳSŽ:Û°çœéå ÛAP»í}Å6 g¿±nÆr[ê¦ÔT1t½ãDK5]n#õŸü´øCôG·?Ÿ|¿„¥¶’ýHÃA’_K.C>ÚDj[Aµ^W_\7F„âå ⑽†T2` z¨K×"IÒø&Ù8¨ÀGá–s"©‡ ø¥·6”¦%ŽœÿE%e-ú`sv›H1ØãÀ›Ï¨Öš1Åkúß\áF&W\W¸Ýs\a»NòZ &VBúFÐÀkZ5a^3˾4ûr<%Jý6E­ngÒ6ä;=BÐ^å9Ô§–6éJ©0©}.äfý³è²¸ŸÍuµ P›µ½fÙ&¶Þ±‘j€o=®Âói©ëz2„+IÌD’|XIig”0É wüÞH×_eäjSÁëäcO ’K%ÓDЯ;;5ÇývQªÖ HØ©’•gl‡÷ 7‚HNE¸Ê “Ô:*¦J-Žö®³;Tå8ÅN’=ÈÄD?ÓÏbÌl·2è„$Œ…OÄšN®¡Çí¶¸0÷Ì!;$› AÉüÓ$…ú²Æ8ô÷ê´ž¨gI5/UÁÖìZƒzÎ@ˆÐS’×˜×Ø 7ë!àïc)8T}Q °›š?l;¹ŽØ"@wŒ?à2{×Ä%0îŸcëTv{éû {Èš83¬\¤œð‡ÚE“ú(u«™ŸšƒZ‰¿1 ôÜ¥‡E¢ì15¡Hín=豟(ù1èÕ«µ—gæ SÌç>ÖZ¢ý˜ÅZ™nÒ(©¦ƒc<+{Ö 7>ÉäÚ^×$b}㢕\ ÞˆrçøLÕSáÄ3Ìy‚ªåyUÚ!#îa{*ʦA^hãL¬}ƒƒÈ„Biî­­Ì¿Ðñ’rD‹9•‚ã¶§ôB*[Ÿµ;k™PÈžcÏîfx6 /ã/Í"åæP.zšÈØ•6@¨FVW­p7ÒÎ9Ö#‡Wª ñc£SsÑê^ŸeÔ9rÚ´6„‰÷Ì5ÄýŸÔ`<ôK¹ÒGéØrû^²&ô˜ðš@冼øQ(„þ®iHgŸúFWˆÍ$õÐW—FoFÚ‘°‡¥ävüË$Ú ÒŠv¾Æ¾~å&íæ¬WóqàGBe/]rÊŽh&¿­6?žÄSwŒJ­Mx±Ëd… ÷…ÈË »K8U_ê5áŞأBJ…óíM=žP¨Y|Su£ö–F’_õmU)uqwd?Qm1àmâ7õ5H_vN;‡ÓòŸ4{˜¤7c]'Ç/pêhà‡ÐTß„¬(³xDÞ' Ï<ÿ*)}¯¼9ü J\óá+y\CY&Á2“ÜF¤üì$c ƒH’ø-<'ä“ü³q1®VÙ*eX{°t8m¥µî@’qgŽèÅFƒ(ÝnZ,RlbæfkœV·¥ÑâF8˜úã—=š( 5Ž!.Ά Uö]ƒìë²¾º•‰ÊpøôÈöÂ]<¡*º)hÆŒs¾$h=˜gÁߘëïQ ¥Â%YTÁt…ˆÿ ‰ ”m.¾Ñ„ñ¨G¦:¿¼ëZØËÀ+TËVïÐÿÙžh¸­ÊÑÁ$Š¥Í4gë91OàI¨3‰Ðô“K(âòžˆî‡ÝFÕ†‰@ta4å³â”/Lîƒ5»éŽ3›`7qæJ^%}Á=Þ¡ä“mdž”¦¤ð¯-ÓF˜hK|Ïòïœ!€>Ù˜2À˜Zƒ[—üE>1ô­ùá솿îsKþ; ÆU¢mš WQ7Ä®kÅ‘ó\I”^™ŠÆ?sÒsµ¿öˆÄ”_ÀB5+Êß[aK]‘a$ÿEuëŽT¿±‡°¬Ù"6í.)²þb÷0–·ù?™Ë,Þ›‘FÊ`kcíéÜ~[-…!S‘"Y›?¸%ÜG98IÑ9Ò†"©Øt9:–¬¡‹°u^Šò7Ö‡œ‚ô÷çúCrã‘zìP‘'Øô¦¼Qí‡ËlBøòþÉy‹‘iéhÈë¤ÙbF4¹‰à—Y§R~¸”§^C(é¦xd«Íu+¯úð+‰t¢Ó•œ€B|rߢÅgÇ}Am⊴ýQôOUÞ=-ô­ç¡ÿrV6)Øß?nÔ÷ý£lç–g{ö™IአÂÑŸvX5+é¬}/0"ËþBFš/'ûÍõrš« <æø‹ÀÜMêmšŠŽT›QŸ”;Mªâêñ$DõbÖJóLl§„ÕÏLÏ…~4Z…>œ`¿‘Ï¥a?éáÑ{Äí&à˜‘èߌZPÉ{+ þW­ñý–q«"åÚ/µ€uˆóûßÉ ùߌ’_‡à£'ü‚f«Àâá È:U‘×zt²Q1¿3öÖæ"UýBªïåã)ÌPÃÿxêŒ-¯aë’ò¤#Ý!¡*\ý†å[÷g”0Ö^àÅ%Ù‡††€Û¢Y ;Ý·dôÄÎ âàüB—Œ´³íq¢‘P¦#œ½üÞ—ÞòÛÞ Ã!ËÊéxÃ[3òWçqç–Ë£˜œ)¿Ô¿öœ…C¹.úOE+6+âwdOÉÀ§À?ÏéÒÎP}NTr«sh{À%kÙI5èFè‘G Ù+Îü%VÙâÖ .q­¶àãiÄÂS׸ÃÅAS6ŽµÒ«êM¼ºtÙ'º5ËÁà1âŽÕ P k’š›¦U†c¢ÉÞKÂPçoÆù/ÎÐëØÂ‡™/v·S–óF ?œ‰ó€çdj(´¤õù åíY((ÎØ=¿çW…瘜¶Gš³ûýåˆKøgL=žbi¡g/¸>H#yBk: cÞ£7™6ÞañŽÎf]ð$NfŠúîü…q¢ë¾H‘¢<&žU‡ÉŒ\‹¿ÞçC­!‚¾!ðg8¼&L u…ý”<Ù8ÐN¦NÄCv#î1À0tÌŽ¿c’ÁÚø6N@(‚/#÷à¶šv¡¥lÛ}t¬,+€½_Ц㡇®©ë¢†q·íÆœ˜yØD[Ï7`/z,\oíë_v@*OHà`¡`~ãÙ<‡4„aáÞ±p© ƒëç ­» )%d±Ž}Ø$¥”»ŒµÌS¦ä¬@j¹Ýl’5!ÆÑkUÙ’_òXÞÇ'yxK`MH­–U÷þ8E’Då@³øÿ[„uNrÅ /#ŒÅêÆÁð>æ\ú8Ö ²–Ò@OG-.Xæ;~>—bXžóˆ¥moCýZ=ýÙ\;ŽüaLÍ8 ã­ïþ=Áo!‚q÷I‚óv<+€ 2ɘýømJUÕ–¶tž^WBÏ òË‚ží2ï¼¥Âô¿äŸrw³ˆSž5sµKŠù þ»½'•u&n{©EÝø ­öêVW?½Iqì|å.ü2š¥z[1½‚‚Ú`:¶£nB²–•s¨¥ôªœ.Ê–" éKU„tÇ|Tb|€ ãYÏKRŠGÏ¥\Ë Ý«–Év¾Æ&Q͸á>SïZ¨ÃóŸyê+e÷QØæ.‚XíFb¡wÞUÏlw;&‡‚O—DÀ³¨ë¸'Ô)qF8®õCjÌÕ7O¢/˜Ô”:¦î|¨|æÒ~îÎý(Zý“­¥‡¼s¦÷U9صµfÙ7pL²N\8a³Nሞ °qàç¢SÝA’i Œ‹kÍñ &eK]¥>ì´} æâ3=ÑÑF§ê‘ãC%ȾA.2EŒ?L¾ó/è"ÀίT$ÔçïÚ¿4zßzèrvEDP09$y\‹Éüõ;@FUAOp‘îÓtgïðhJƇ­ïç%’õ4tâ/ÂU·ÃíÞV<-p]b£¯K@+²Ò3 ]}4£mÙºù?Ò’×~¨?oè“åjêæ¹üùuEåqï}ÂpYÛ_ðIa¸ßFÇêpíÊVm ®’æ=t.&žb¸…£ŠÈ™då{*§³Ýºá;Åzžl”sþÀxÑ?êIÞÌ Ë§|ßÈâNâäQü ã¤Tn^KUú„Û/¨‰'‘üÿQyž5ý r175*³û_–•ØTªËJù왵§B䤀8ºžMxºÎ{ ,:kÄ„ioÃ1ñbút{¿ר¢Àf7ðÊÇ­Þ›æÔ·…öëD2Ÿu'Ó0A ]묢R÷‚™Ã÷&·´„ÁS}AWyˆ}$7ô‚¤Í`‚—®•.~ÄçÝU=äd\•ŠÓ—d±ãyÀ­zÕv|àV;dBG^bÚIoýÑœÝuûµ‹6*X©÷å(Ò†yÝ0 ìóÀ_’ä '.¢7žµ_ÁÞ2;Ç„g5ÈÆ‰€â;à䬮cÔ2Ô ÇûB3jÕ¡Nkabu—Š%Èi’vDL=¾mMf æHÌ{)̯Ÿm_Cõo´ýÖû/¨v|áó`ÆÜ¾’aùÒsª¢2MÍ3._Öõ¹E8¥dÛE,Lg\iÐËG™WUGã"µ= l ïQ+:EÔÑ­y©¹A Þþ¨IZûEÁtÜþ»f:DkkQp ` žBº äF*¥1Â7ñÎC¤MÒîHøÒå£zs²”SN KJÞ,h§/>5kÎKŸ@–'‰$&®yaÔîkÕqA›×UïíÕàžÌq÷y¡ŽsêÙVPö`jñméÂòYD¢jº‚öæ‹R˜Ü”¾;ÿ&ЬrBNvðº:7ßz<˜Ñ zXÅE¬.´|$ýk…§U½‹ÑyâpG® Uåê™Ë'…+]iä¸= Ƭµ?iüQò‚$óWÅÂï0v$ǸþȆn8×Ð ’Cær>¨Ú¥‡ŒêA|¾%ÕÄ>I–ŨÄc ûS¤â ÎExå|ÈߘåF£9ÕüÚ·°{^&ÐôE‡Ýê¢L0!Ýãˆzªµ»ªû!2ä9hZmæüýGtäºäõ[:;s~nZÑ ‡ô‰À ^TAM'ú.,rd;<­Gqœ_M¤{n?!ø$úÖZŠ3ÔŠø¦î1·X±ÿVÙd¶êÚÀœy´Fè†!óF›D1¤´z¼‘z‚bC,MÊ©™¡í{xnN~ëC©Ü\s8Pqn·!ïà¦C. ¡ZÓw'¹þ‹ ‚Èøñù sGýòóàuxéî•¶ANÊ®câdû¡t””¾cs’m`õ¼ˆèYðµ²ãj÷Õ0´¯ø…Ëô}yñqV%Nú…^Ç„ꉧÙMÌü§Õ2:MF«¢›œÝ;îâW¾ì¸ÈÎÔ”Y švw2Z1¯f›Br5G -ì“DßùÔz0„åß»¸˜K¢XWvt3—/ˆ倶Åã ,©tæ!bl°9‘js[ªFQÌç#³©øW05pç€çºšihM®¬ÌÏ PPïãzÁ©Ö ÅDZÚ¡¹Â©r€ø0f¿j2¿C;LuÍÑé U¨°¿jš;KÉb¯[ØZWNLÿKµ>œ–âðó]²Na˜ÃÁ®m†¾™$ÈþÂÏ—|EÜOf4†Ã•ôõ×âHud#CÐsEA{Ä6dÌc–ðÉ*‚Ã/3”aùHöq)œWtÅûì$Sàýª5>š¬¾t­RLk›D`ïÁœ›a¿-ÄG{:•¶úÄ(%Ç» Õ~µÖÜjÑ îýýÄѸðwäDõ€AÉO…*hôw 4 t•¡]‰¸5°yS>R×Ü0ÖIæÇ] Ķ–èÌxO;8ûz-Ê“jg¥‡.‹¢³éyz0Íñɰ¶ ¹ýv•K5ë‘@tR¸cz“•¶Êp+.T®Sl,’‰#Œ‚V‰ÀÖFÅüŽ˜dû"ú=§§/A X,+UINöM3’94£ÛEb`ú­ ñÎèdld³úNˆ™.=¯ø¿9Ópf9ÁHƒÕu¡”‹‚}2ÄæÔ<©‡5r6«3bfDå¾ X_Y/\w#õÏëý`„Í"ºVo ¸X|‚Á —Sô )‹ò–XØ"¥IŠüì®´|†E+$ `)Pá4ë6™àžyªzIƒßÃ'8>´PcÐÆ–÷QøÚWóZùd;ë½yööhÙ€n OP‚.‹Ÿ]šŒN%?ôˆƒ~¢´9Pß)™Ôìê©¡¥}†#_^Œ¡OlblqQ̲.’i ˆÍ%¦ŠŸš!œÍÈE"wû¡}¸L ñEÌB2mƒ[Cx Ü cg ¦fû' X€p¿Í=æb¥—„üeÉN‰U ËAS Y<ê´€hÕ;©wÔWöôzô±¢Ï5!ô£ªñðƒŽÓ|r8'ÄÌðbÀÖàñoîß눚Ã:Ý üù˜zìX61‘IB.«®o! Y: ‹7+ajOnkl„ËP"zŽÃoŸÚ$É,¦@ËL^°êìê ¯ƒ¨fik üUaUAêþó³†a攪°²sê΀FžG3=·æ…0Ìe¦C!qˆƒD`'ðóo°Ø§ÆsNjujA¯¦iï$(’æUülxâ Þ—{—ÔŒÛó¯…þ‹juÆæ‰ŠØn¹Ô?Ëç«Ä‘7‚ûã÷®s›ÈAÁFi3ß(2‰H¹1ey¿ rÎE  óêüÖm‰›ÔÆgu·ÍSGØaôDä˜ì‡ÿÌ9”­Xd·CÒ$̧xüS¬½b³x}%¹õÃ]^ôÞ3å9@d˜Ê¿^<úO@¦F)L©Ë=Ö©Ô]—ªrXSªëœ) 9·f@ú¹Få’Ùl}Ñ%œ‚‚¯oñ@A>¯:M0•n‡Ñ¢³ÙmÌê÷özé- NdS¼™Ç¤uLÜá 7+{˰KNeo¸&)XÅû˜+P˜µHB Ö¾ æ×q½Éâ±çøÇÝež5ä;1T‘¯q,ÖÆ¾1´Ÿ²q¹¾T 5s“äIóT0ë˜qáÀÑ¥¶ðE®—ÎÿgR¥Z® ø•Ę:­u|¿È÷ÏÃ5òÓ2å. 265­Q SóT÷ù4“Ì»Òr;QN1¢fëëVc¥¼ì¥Â9Õ’•§„‰j*¼ë±g-C¸<¹cëcÿCQöCª€R€¤ÄÌêàoú_™=µÓÐÞW¨RLžìÍsãAZÜÞ€FxbHc‚ÛrØÕTjxVAÎ5`|gaâß5å³%qñüp™ Ó@[Íý·Ó·©Ô'ÿó…2ÑÃù?%c(OÜô!Ú9@ÞW96ߊåtîûÚ 3A™4 lS*'ñÍsýq€}3øÌ.ÌÉúP^T|,Re.hêÀiñíÐhÓÂÆxö/4K Ó ïÊtË`¯¦”µ¯–†Ëœº@äWl¬—÷ˆ³j&ÿ‰%ÝЕ¦P>µ¡wÈi(Í÷ §£º Ø8xú7D·ò}(l¿ÓÀ0šêIL.­?Ÿç³ÁF|¨\üOnluÑO£XŽZ²7MX×2ªD•Êí¿é1 ¬Ö¥ ¯ðŸ¬_;½Î6¯›šÂ t±pqÆÀÓO¾Ó†‘ˆÑŒc˜#ŸØßù‚wx9è¾C&W²¼üܽñ-x<ѵRôÌÉÜSºÑëÍ…ÇÚ¿ûT3˜G;¬Ë5†JBIe FWøË §®›Š?j°SÛC¯t”‰¦G²¥X26'¦ªKæ`w\÷êÅ_Š©/—| }¸šÞ—~“î`’{ƒ< ýOêö~)™a•…â«+ >87då˜:wÚÖ•©œÄ¿õObîªtiÞ¬Œ¡[ˆaÌ4ÙÖn*ÓÞé…³“JZ)OŽT]ýJ5SÞs”•˜KÿëVž<ЮZ ã¾”9þ W2»þPØölOD§Æã’‹†à8”–Û|£Ÿ4÷ïÛ!Ð&¿6XüÒËÏÉ&ºX¡˜ëŸp¸¸õ½|hHBÔƒ|¨Q‡f8bØŒå"n††“fTÌ%›­l1†qçÙóeIeº$Ò]¹ä¥†±)væÉ;­‚­’ßô‰0¾Âë0qàáð¶' ÷.qúZ¥Wk²|Ìžn!˜Çž|Èå¢ë(\ŸÌKàUõݨü‡js-·ú{º”¯´i<¨X Q”ªÁ‹¤H¿»&‚Á‰Ê®ý”JB¥M}$1|äUïßY"3Nƒqþ*q`";£U÷·÷eñ¦N㈖T®U+±ÿ„Ø• ËÂVÔAuÇùéñ&cn¯>få-&)Ài´ÔQí§¼`žÛ”Ø'ŠâCÈ8MŸlH›Ò#ù‡7¨nZV{1ê|&I“UàÙü;Ýûd5~:•ç1|{“©˜Û¨6Î)šjíõudÆ S¡?['—<¬‡†Æó CiâÞÌ…fÊ_öv6¶¸ä„ßûý‹m«@cÛb’íÛ¦Í3,=§HÌõùjYyæ˜Yãr’7îšÚ´éƒ»Õ&©{ø¹¦t×ÓÒœŸ•dÝœ`YG%%{‚dfBœÛÅ÷—]kêàÊu÷¾WÍ逇xÜÀ‰ßÝŽ›ŸÃíNAûã¤óÁ—ª¨Ê&;p•øGô°lÒÚ±ˆ6[”JÙÖóéŠë«´û1{U1ël}ýüxmf-¸T]ÊѦÆëòEÏGèg>ˆ~ àh2Ö‘ÎÃB$NÆHIRÊÏͼŸ–°šýþú­°Rçø«ÐŠ[îQRŸ£õ§Ú÷”7<ùñsc`Ój‚Ek^<+@ÿ+BO«låžÆQ—ÀNÖ„‰JŽF¹Ð¨sè$¬2›Ñ&êõ«t(TNбè@)±ÆþTZu‚æÙPÕQ*Jäà°wß ã›I;7…ŠŠÌ‡Bì\mÈð`Óãë¾èUཋw꺉ÓÇ£º‡:¤ÛÍqwÄ㸄"&БF%¢š«ºˆ‰Œæ}aaÖTï›ÂX‰L\›Ê¨ pàX¡ŸÇþ›f›\Üâöû›ª·,¨k·»à™Ë>Ssc'7Zo»›ÌÌP_¯[÷ÓÊ dƒœE˜ú”a³MyL]!W;âŽ4#y¹lÃxy—ì0fM~Ç.;¹²F Ì|„vÑ¡C¯ãŒ(2B|†G/Ç눵qTüøVÿq=Év÷\™°]¡‚-ùý <"¨ûírs&R'YHüK«*²µÓŸÆm2ÑOä©×‚©`ÕÑ!ÚbcåR—¶,Ü2cÕplDén­„.ÓÊ VÀŵF÷%ˆ¶´G*7Q!Ž•­ž^ö‘˶ÙüÉ^±åÊS/†à£?}æ“T­Rí›í©þÞaÀŠX–gܺ37xçÌŒ J·bÏq€¿¼aã×Fùû^e‚­öÌÍÒͰè4:5X f¼á ’“ÑØaEuÜòÚAªðáa±mÆ8ƒ ‰B«^BËÜã•ÀÜç»Å ì<*û ý™ü°¯(öùàAØÉ/šVÁ6ßÅÚŒ.D åýEh8¤½Ÿoíå‡o~ù4 ¥4ÅJ~9Êõ:$‘§²¦; ŠàíRÈÿC14ñò¤Ãñ&…žèQBÛT³ªyì¤P,ë!´¬ïM-½ÆD !>ª !»f(·»Þ£þGÕ_ÿvñ4ZòDí·Ëõ¨{he^¾ÞÃ+ÓGŸ7‚ ‰êE#;Ä4'E™`_T3ë;8gèƒ=~sëi;ÔáPýœez ‘';ÕÁn‚üìOŸˆ—À 0ñxtó;5x÷µèÝz8Ù§²»vö+„GI|³v*¥ôlDÔW×Ú™^,ë~&ÏëaC“ íúif–FBú©Å”üùi%7½ûÝ›#y—Ïm“i†”†ð‘P\^_ѼN7—Œšã0 lg–ÞëÙ€½Üü4Rðë0xÀJò%6úGh"JbèNX-=¤Õ8 C™‚gdÙó–ˆ*Ó˜ákP³Ð sÓžJû5¬*øæÂ5ǵ4ŸjÙ\âÕK¸&ÇDGçÔûÂ[3©Y„±\Zzœ†¢,Àwðõ:ñùJIƉ#ìm¢l§‹)1OíªŸ¡kÊÙ8ÁZÓÕk±i°ü… PŸ†˜!KÒ—¸ …È6;:_hã^PŸ/Õn‚EÚgfF$\>hÍ98ëÍÞ Kòa”1!]Yꦙ­òzFZ’hì4SÐPý1…OÚž'ŒÇrh3­Ðµ_ý’IsºÔ¢1áE›-(ç—{O…ñA6¬=d?7‚º·ú>£¬;5 OqÂ9Ò=ç5᎓}ݤٽU!duØsaTa)œ< s«Pš“ÙGŹۺ>l Íʯæ0ÉʆceéhçKóÂî1jrV®S©ÒjcΩ.¬_£x~qÐ#\aÑvm±vÓAØÂÕž§a3Õm’MÈzôJíD¬è]E ájh1“É#^ÃÓ̾cÀbb:zòõï×*îˆ-X)¾¸UÊnÚa'ÝXô¬æó TGðÔJnwŽä3ˆ±ì×zéXµ+ž:H‰þ¬l˜Ýú¸šOöPºŒ;î[.¾m¾ƒv¢%êÂÀp^ƋҥqPØN߆8Þó%;̬3ÄÖ d†_ÕLC€ÎÈCóM切Ým`رúAÞµ¥­f×k`Ï|Á ¦uwb°ü¤ÕO}Çe*­ÚúãdÛý0D‹øÎ3“Ö;ßuÌÞgF7µo'fϬœÀCÃŽŒþÎ/xjɆÛvú-¦ èŒ;mÞæº ö ¨Í»¸±)Í€6eâ“°%+Öãòí×Ö¥MâP{rh=™9Êãÿ7K€'x‚Dî¢-g˜Vá+1’Z†Cž°PdÍvÍ<+d0£­ŒJU¥óÐWM*Û§T¶è{To!9iÑøš$£Gì;%·2Iº2¸¡6BV, UÓµÉËfïõÖ‹ê­®øªÃGòÓ«mwKŒ% êvo[‘n‰9{Q†{"¨å»Þ¦É®›–ãBÞ:A]šÙÙt‚—ûóè·$9$tYÝE©|MHty4†1\°óZŸõf0œ2»gÐÉ .ÇŠ#Å@¤…¦÷Cè…z±vD1`¸¶ÎutfÞ!–e –ý™˜ýëÙ²cð'×+ò¤‡($¢mTÂcwP¼2]Ê+°Ô*¯_Õst9ãXAöÊ÷êô‡¢véXl¬Òwù.PïùÓÕN‹ì|_b)—{?–HîDœG¹Ú%Ì᱿i¦Òèï*+qœÓHQ$nÅG4Ã0NÍÙÉ<³ë=gã©æ¿û>ÔðM„ݧñV‹¥º¬§Ö𡊙¯Aœà5¤  iDÛE”W¾¾ Mä/ºéogÅ€SÕŒ”É%;ֺߵz¾È–£5yû~èJù(GnÓOÑÑú‘c@ýè΋ÍTê¶h™”m?rˆ ðn ü‰@t_¤¯tð®6Õ$Xw~ Z»ML]”5âµ?Y”1¾êý×=»MA%xØ޶K¾¸Ã„A°ÉÑßY–Z×'½ƒ>'°ÚÔÌò*¡å|R³Gò×ZÌou+IjOO/ZV°m¥•® ¶Ç‹î¸¤î šÌè Ç¢sáÛbÝË„ŒDËw"#Ôê!KIzˈ±í!§ƒef;z©ž£³¡ßÅ>‘AHx„!Ò××̘Þ1«1þë²[‡×÷o›Í¸nU¬á6Y‚dh™üÕäN!¶R¾éi5Ћ^ä¢VoÁz€¬ÈÉCSâåJžÙë7Nmcå›D¨_¥ Z‚ Ð2‰+Ê_\°¢ì±``kj27õa³Ø¬ fð!ƒ55"/OÇ>FfÉÏÁ¯hë%VÁFh¤ùs M{0yàúÓM_À‘‰„-g_ÁkqùX­®;õÓÜý(í£wœ™[ÄÕŒX–#;)©à·ƒ€[ ¶¨·¤g„ß"ùl¨gLÀœèÊ WQfÑÿ$‹gˆkÉ%SãÚßÿùr“@e¡¢È.¢’F+§§3-Æój¾£]ÈþAŒ±"ÈblÐp»ö¥¹$Û­ài[ê]°÷}• ±é6þ6E΄ù}Œš ¸Îð”Ÿ'Š ßMß„}Ÿzb*r–ç'q, ¸ûC$°uËBéR18„ϯ˜×È}_ À|ñFò~–¯ÕT*¡÷Øû"uó’KŸoD5¥À—˜)ú­ÍP• T,ž $¤Âï”óœv)qÂ|Ϥ%Õþ¡‹ö.º…õ9RáÙ¬`·º"{æÜâ$LX&³ìs~ý ýÂ]RALÖ«1ƒq{Z53_@QÇ—ñ5ÄPþÈêØ”?~…ùÆE!=ùfñG`¶EPô:S¼˜—nAEmçXÒ]¶ÝÉŠl—Û@v·öð‰âÝOÿmHPÙT8&q—†Ò"¢ ˜6O¾D¶±£(ŸxÁ¶ M„RåTå0—nÇV¦ž¨TÆø§:A[N¼ã\Æ)[ ,(ÊyÊžŒ6×ßÜzÁ0Wê¸ÌZÁº{[„‡Òˆšªx„É€ñŒOHõÚí^Èçª3Êx^>›Úno‡zúq!»ÇqÁm"þ“ç§í¡ÛÁ@›9q“áßûu€_·Z¥Ì»œ'À>ÙT5Íïë%»R¹yR`±ò¼ì0E]À,€0§}µê@ÉÄn¡ˆlõ RÝÓìdŠ €Î8a³=Dþmié~]X·i·O‡áîé€?’ð{~ùñ…¾£Ñ°âÃâ°C~Žóê]¨fÅ52^|[®ˆêM8¬¦e õ3Èû¦‘ºm|ÎS¦áÓq ¿žTÅiÅ\&üÖîTÍÍÚÊÒN—±CîÃí$eçGvÐÿHW’£~.Øû‘úv݃C̆gèzÔyTÀ<#ÆçM¬¦~:cLš÷§ ÿW_ ÓÀÊ=,áŽ-¥£æ¢ Ú“3 Q[X„aKÿK»ðüiõKá}2‚~vg)©`G k'Vû"²~fâVç!ZD¯Bså€àûiõzûð8cÕ¯F’¾UTZ¬~H¨W{Æs®¯‰y…ÕåcH§c%U÷®¯ÜH‰ ,^3xD…å…£ÏË$5"‡­J¶]gøfè0·' weW²î Á´tù25O5ŒþÅ”¡‡^¥3_é¦>ÿH¦ÇJÅHªèÁJ° Ðð衇áKˆ-P/@LGŠ ©|UvêZ²¨åª!îó|›Þõ1õÜÆ.²êUàü­}š¶I„mëš¶,ùv#FÛnCj]%÷®x´‹—‰ÇcßHûÔÃ÷´–~3zŸ¿±ø¿*³ôGVQ¶u®ú„4[ï†,×*²¥EõË{Ó=ÔnM×ÜìªIX^Ù Æñçîäúg–¨±]Kt°ˆ_*æNd)zÈ^3ô¨~+¸-Û84y±òõ]ŸƒMÚ›qL8ÕýY“óçóeLx/¡­‰Ô“x²A5Ž]íGþ@þ ®Jžø  ôï7‘.·GÚð59#¥Œ#|ý­÷ÿk 0Ȳ˜T–“f÷,Lǯ;ùÖßë?hš xÊ ×‚xÖ ù5W+éä9JñlÉÒöªîT5uﻘÂ8Ê œúž°åÅÞâQ‡?ó8˜RiÊ‹ƒ¢!TvZÀÏuŠ…óWçzFYrrºV ë›ß'픑f³Õlƒðaj6¯=²ZÀÏtç”èÙå:ü°íe¢)Q¼0Ÿ ~ŒÉ¬Ê\…GHJ.£m­ù÷Z9ÖQR'j<Ëüð"c3×h¦ Ù~¦' «µÏµp~¦ ,‹‘ýlÖϪU½-ÍÐïÊœêGuö^µ!2jõPÓåqç ¢Dùp‹°ŒŠ=9ˆU»{XªÝIbˆÄ|;Ú,dªûÙÙïMШÄ=ÌòUY.? çg›‰L$]Ê«ùP.ƒŸó²3d•e3ƒYJ¨<•¹bµˆÇßGd‹ûF}€Åöµ+î ÅcVòG•[çlŵ ‰ÑwŒy‘QØ,WÊtGeï ڤز-‘ü ËóY€RWAØ^¥œb·…$ì¾l#\]m7è¥d>|Ýt EÓç»ø,ŸfàˆK¶ˆàoâY žÄ]dg °@ûŠá©¿vÛ8‘…þÊ£’ï?¼B;“/N ¹fî&u6HÛÆåå.’TÓäþFq†Î_‹§Ô«D;Tw[÷Ï#ÏÝÏ’ò°Ù€‚g9`³³:ܹ.Øm¹Z2 ¦+|íCÔ"5Q‰¢6UʾNt-ЛV·Úrh¥h¼¤(®qS9TÇÌ>à ð[Kè©9õt¿åp‘ÑÆÉpªü„¨âÞ:Ñ–’U®/…Ïr»ú]I(pÆðóöÿGzñ¤4y§E0í¬\ÄÜ,d~\§Ò_vi„wû–›¬›rMë!ê-³’¿ö%¿çÃO4ì81Ô®Œóxü‰˜:gÔç²söð¶ö$Õ·„}”€º[á&nœ'G=AiRÑ£\7áyqì:#ÔKßê2õË÷ÀìßÞ÷1¿=…¾9ü«ëÞᡨÐeâˆÄŸ¯|`ƒü‚ê°Gý¿Q…@±Â>Ï ½ˆp‰ ØT7eÄL[ È–$8$ý‰}3&#€’´­¸?R˜àÇJ÷{û©L­ä²çA}ƾï>hoM})Œs…¡‘וì^hpˆtå¶¢»3€åw:èáµo¾ *»uP>´ÃÍ%éæœ!C9ÃÚ·;?Í‹Êd2}, ß•±XzÒíòL{4èv™W[+AmÀzž™mUlRÓ¨~fÝ£o™ ÂÚT;âg{Z¾qÑ"î¤s—ô˜yœF‘“ÞúÚ¤ö­BYð:ß“&“¾ó#5ƒÎ䯻á3SBT¿!ð›y † [q 5Í,á9pɽ(2¿®#!`˜ÆÅú˜ÛBÌSǤ;0`€ô&Çb9zÞ~WûW½·sï+Ž`^úÝ|e͉ӻšH}Ù1~¸Í7ß3µ£í÷Ê! þŸ`U|…«\ÿ"ÎË/ œÙ\˸9ôç¾—1^Íd­ö¼€qéªD’œ,약h^7‡^ÑÉé'tìÚúÛ?:k®-¬£¤t-ök*ï‹"§¡Îc%‹!þ&ë¨w¶ ú®ôžb(öf((„HÁG­3äx-ê€k|Zfç‡ ÅQQ5²,°Á,åú€/‰+¥ãÇèÕ—¹ÔЛH6ìÓöI îdŠx6£ð êÔÂÀŒÅ=‹/—JÅ#ãaÄs§îB6®à å~rÆ9ëCA“Ê,ÝÏ?–²By^:¿ÊDÏWOõ±ó@\ MsOzIÚI½fsðzpã)’Ð! £&’ÕÉ\KŸ**ðæB0Ë+ïº7ðùßD.rº– Œˆh$ÙÌÚPjˈ÷¿ Ö_ûlR¹_ThRñøý꪿ÙMíý³»GäÄ‹WQJ× ïY@_2£™Í0A²ý&z»'ñCöF;HRo,sgã5ÿ,Ÿbwv“ YZ^½/¢£LüÓ>IDPîÿ9Ö½¬—}„¼¬ßXøùOÒvÐ%Qr…Qò«)ì’wç‡dÇXêÌW\ÚP̪ñÛI©²ž$qÚ¾ÞÛ‡j韕wÓlWư$rW_Wy&¤ãZóvôÍ諎\0ÜŸREÿ^²ß¯úF+Â^Å“8—0Õ Ïµ4°[Y |o Wݖɉô²|㳟g—{Ü7•k˾ö¦¬K)m{Cgí8q”Ä`¹l›Ç—:G¥‰VªËVšÐNηO ”Â1ñMîâ x—Dk­ÒªâY˜aêI9RÕ ýtˆö¢¼<4cb}F æ×°@F™Dö£‰-ŠÙTýÉmÞµî Ü tIiªÙ#;Rå[ÊïëĶëã7‘–*=Ê qqm\ô¸ v,†?`R$AÌ:sÇÊ“*{'©ìɹ‚(0‰ûR Ö^”£Ê£°Åzpʶ]¾^éâp:ýpÉV , vràP¯ÓxÑ„!_ ñpÁvH9 A—½ÇJÛd1ñ.ÿx± —!ú]Z\Ü©X¤èâ½}¬Ùð©)g& Ü=»°5`.ð³Ìïˆúq[5wkêz üí @N]Î Ä´H©n–¥í ÛQ¨ •½gIÝ¢nP'Äì7Q$ ÷æÐ˜|ôõ=؇_øØ´Ž¡õS’ "èóÙ ­IÂ-¢B“SvÓ[\Êš[!Sˆ¦Ë,Z/§÷ÍŸ7Z~©{4êßTH/mÞÔOšÎÕ‘#Ñu?š­ÃF†G: P4LöߘücV–ê¸ßû€¾WsŽíA=K¯((¡ ¹±Ã}z¸¿ž¥y¤ À³ìC»Z3=4}‹f9y•"Š+Á2ìŸåIbFdïLðäÔBeŠ:*z¶êÞ¢wÅnæ€Å£÷2•Ü“n5¥ðü°P¢´y/£¹>Äžk\~ýÖ%Kò¯0àX8HAª¬ ê::›Uá¥8ð®"ݬ<‚T g¼ 2y¤êŸA›AAi¢g“ŠŠú;˜nÇþ[z¿Íéø¥<R|•úÛ“‘±ÆÂâÒE UÁ ‹U~˜ÎÈ1¾IÐAÎðe­!vÉCŠÙ|ÅÄ ž™EŠõ(â5çz]»±ªÎz,ÿCÇg‰Ö’(€VLýŸÊÒuóVÂ'Æ>j=a…†‘ýByiãºüœCâOïv­½¿j²/¤n°SÚç-® ¨õl}’áëP ?¡€J^ˆ7S K½ è!´&`a«+¿‚S\û_cB’­˜†[ÀŽQÎÄ_,Éä¿à,ö3ÉgW£•Í–…®ˆWVšD)r·t¸›¥˜RʱBç—[MŠÑá*¹ sõô#•â´‘.v”¬N+u¿E.Ùçh')á®°ÝAppF7­\h& j9ñÛ˜g–zæ!y81çq[" õ<ï!ذZ¼Åö6wãxï:œdúÖ4[°þš §›0”Gæß0ö™êäȯ'Tûçò¶é¸ƒö Ö[ü çEË ޳¥ÚÉò–Ž"+.ê>puy·í0eËT/¯†ncJ8ñJ2‹øÔ™?+sBØå;‹¦=éÄ|õïÁš†³EÛ¹_ê Æëí¤9'‰¡ óaæd)›OÐpŠ rãK‚‘v˯'A$ºn Ö*L'~q(ጛïÈå/G=^Òš{ÆŸú+o:ÏO¹å]{rvd”‡è艉Ͱæ-èZ¥LÓÂ2þka H9böÓ°Ñ#›Oü>‡òò„@Ÿ1¸½%[ê:)žþªÅ("]ÄÕ{Ÿ·‰m»â9NS+Ëæ®„,ÁÆmíÂ7@ÐWç—sß#øôU`¼žÉ‘i |Ý0¬JÃd¼j°ôµ7Q?©p—ÖŠ.PUTž"©LŸ’ÿhLÞa[üfibñ˜]ã,:~x¢·¯øúÇ“û,m\ 0Ü †Å‚:~ã9f€¾~ÀhÔoWØÏ.YǤ8F?탖à“ûwõ‚ÁM} ѧUˤ.4Ëúæõ~±GáEn ‚r!ÿ®ÁVòÆi XÜV£4\8åËóK/÷k "=tQnñÅ’myE¥L{pÜ;rnŸ[4Ù!°¥+âêj .TŸ?}ˆ(FÞŽ-’ïi7IÈB‘gÏ•¬ˆðÂ9_ómúªü<àµö—™d ; B#¦CxêãñBêyÁ{µ¢ºðM¨´yižôùGWœõóv. „̪i7ãK~IœiØ’ ÌY¥ ¡ø¶ògðCmfÁ0kiý#Èë'ÃáÆñ†ŠÀZÈ­jE?Y¥ßèLRk[Þ|®RÈM¿ËLÇÑÙC=±hë +(c$t±¡¹•> WÁèîlŒô)NHèá¨; {ó¶@¤…~ÿÓ‡OÒ™ÖÕ :ù†bb¹>¼ß$¼z4ÔäfHÈÝ»ëþX½»Ý¿íÁ (µÇª&^Ãr7Ëàiú«Uj0X‡ëFé™2†/ãw[£«Wœ#áVØ»J˜v¢ì&á]û¼í„†Ä/ÆNÝR• GFâlF°Cü¹J¦º€jŽoøX«ršGŽkH1OÙ/s}ÂÌ­áKü%æñ—ÖÏšÁVÓðyÀóŸªÜÎlœÅpGGîXUŽ‚(YOV3F¿”ìÓ­éßH‹‚È Q| <Ú?5qï°ç•B¿Í^â¢ßÕPXâ à¦p:¢–m€‹1Ç‘ÝÓ ,á( ¡: á¬áéÁ«Î&äf™rƒ\fÔyÚh•4gŠ3°hʧŠÿGàÈ _cÉæ` ·Fö‚ KÈîŸLBɇwrYâÙ♿“fjýñùP=!QëHÐ<•êï:£³•ç.«õË ,pϪ¢Ëí?ÈŠ{îŒúYÌf)Ûh‚XqBŽW?“º€—Ýð@þuY(’¼۲щsBãOéþ&×*œ˜o=ñ@M}Ž ¸Œ¬5æ|<ÌKxνó¦[2Ë B™éCðBIQùÿo4èήwÙß04dO@ó£0ÞÅB#mò÷ÙÎ6~,«]ûÈ"šˆ²¿É˜Ç¿}Cü/uG¡»H7xP1F¯4zAzÑjÖÍÄ1ü¹ÝqSä‹Õ;+ú®Ì¹å¸w<@÷µ$³¡wnvonUÊÀÅis ëðÝé“û¼VÂøF­sGÙh’›¤#<åÛRGúýç¼×™šTühMS7 ³¿^Yvˆ wk9MøáÑMÓ»u(ó=ˆF„òÍy&`1pšÉÓòø¡ßoµLm­JtÌ´èö K}"õ)i æ™]¶^bàb+U FÛP´SÔSŠÞvˆincL+E²;cxö^î“âXW‰»tá”.ÄÙ!"!nÜBºCÀ5Á¡C$XÄš.©aS³‚;ÈcÓOÕÚášGƒðœÑ@œ¦3÷lìQ¡¥ÁnC@W™±ý Öòãïf¥Ì¶b¸1uNe;ÆÌšãQî#|НrÌÆa®VexR7ÞS.›0‚p ¬|XˆÅ[Üoß7‰A ­â[ûËí Æj /©¥w!pu®‡èµË2•\ð·Q ð©Mç—%òÐ^'+ÓâDEž>ÄKI[7Hî“/Ö%&+RÒˆÍÀ¬ÚÕˆ¦'fõK7N´#s¥.f½lÕ)¸Y^Y )@Й«#3ÝTb†ú¦B ©\©‰Õ<©p¸Fs Ñ†[ …!€èV×ýâ¸wŒy\¦˜ ª>G/a7ðVä¿z¾'s‰ú®“Aó¡(bn9âß ÌÒš¨©–0utÔ·hß9ßTlÔ†¹åÑîrè›_ð‚¸‹¬ —Ǫ橠r¤Çxá’†8Xͽ#´]1‚¡¸çŸœÝE5A'ÞMØL@Ê4ÄÀi—`RYÀkTõ6Ð&äõðOµ)ü©àù’5W$šŠ8f® lÐ+Ž;ìÛ owy/¢‚jcg+Gåw6Yðƒ»ÿ#]ÞÄF8»/œ£Ïû q¸7¦R¬¥ /U—¥ÌÔäÙ¦²!ã» (ü"cóî;v'{†nÑÈ.®x»Þ‰!Ì^úTnöÚ~¼$;^…tººƒ £Ce‰¨¯©g¶AÒÌo1g%(”šj‹ìÐz'AS$M±ªEÓ´Hô>(Hˆxb¦ßju{µ IU[SÒHàóÑýo¤Ts´Õ¶½†Í„ ÝrÖ(z¨*˜2Ûdt×} àÏÇÆ¼$I)~ôrGûLq 2Ö±'™I{‹J{¡BÉ}|ì—d÷í¬Ì´)ÑU²»w=çXy[õœ¯s-’}o7SÄs|ä¶šÖØÙZ1*²ßc†tįÕÈšKâºêXµ›ÆTõVÜ‚æIØË³›«íŠÇî…®ì#Ñ/Ú·ACYÁnìæÓÍšÁy[©Æ{ô`Ì‘ w…²°ê]]"àI &Œž¡ÿü"+H¢q)Ì;>…8¢m}‡Ð,M4¾¡"¾éžP±øC=m„†‚Á:ít‚Ø“ÙÖEž-ö.2Þ³ëìç&¤I0xìVOZè\(ìø£ Ôñ+ÓÙÏ^ÏËð£»)\±­EÂ1€³¢eR+‡W«õç…‘ï8*ÌzŇgHóC};FÖüŒàÜÿ|xšÃÕäOô?ŽŠ)­°ËF$`y¼žS[¥ÈåÀ8‰º²Ô7| <[ªUOF&¡*¶ +÷°n‚Ò}I.\¹¼R‹AV’êÔ’Ü%b?vØå¾»µñ «‡Ôëʤ~ÐŒìðÈÐ,ŒadÀ*%í“îÓNoîYˆpÛ6;}nOÙ›š—õoClùÎY &öÊ¿ zKmè5ËyÛ*²>h’L=8%¸@ ‚ßšõêåsö:VNöâ£ý›/áqõí¸qÈéäz‡1GÊ0{‹9_'l…4(c…7tüYÙÚr•çÝnG†Ø¢åÁºîìê™ €Í=š×¸ŽoeÜF•ò “? Òçº ÷Sô”›Q Õ3A•“Afé Åg‚>F% £Û¨*ÓÚyvŽ6¤9z\ ìœsÒÒ¦‡â“®*ÔO­KHÄ”4¿È}([+ùöbÚ…Ê{–˜÷Ô^ÀKñÜ{µÜf¬2ñÅ•ŽPìÀ' Í&ƒIá¾LpUt}]_éà¥T™X äá‘¢7 SôZxÔ0f¥Ø`DBÚYX‡G,4K½_wÒÂæš•ù¤”ÿ «î² ãÂøç{åX:£"H5ž®\'~?—M Mk¡RÓ5Ó]Ó …:Ø}ñÊ,fÀÞR ùxJ·Œ‡f/õnaÞùÄ* î`N×&^¨‹|ð¾síüñ¶¯ŠÓ¦Ú+®ø—3[gœý‹c©¿bio` 9FŒv|›òÛdiNYJHÛ… ¯8mÖ‚ S‚»ÈŠp1ÎEl¢šú8÷mâ¼oj]#÷Z(&ƒêù¨bOï:[…Pò3B?}€b4Ðmx4’¨þoézŸÈˆ ³´=Š9P“N ˜Ù [*ZÐNÞJj–>’ûü;гÿç¨ô©jªÑ·+ïbìB‹Œ®‡¤ ät×Û÷L΢4˜ÿZ'jÕU1òªHÍ¡=«CH1È? ì8AJ àþ?`ó^ôþ(šm?©mž…ŸÅ­¯Œ,ЙòÉUiü ‘R.,&©¤w]-:wùÇ¿û$+~ë<°Ù*5°¾eÆ ?õ³;WB•HQ{c ò²Ì|†C\ŒÞ¯Ã¢F¸ÁMTxlÙ©Ûh[„ýá¥õ¦ ±ªFÁ-Ф§‹õãÛÜuñ:'Y¯Q=ú¼Mœß/»1R[Zùnô Ë9úHDzŗ̊Áð]´/~j¹8xݱ¥PÙ!ù†§GÌr[‹´¶áÄ¤Ž˜VűbfAÖÛ£dà½.æQ65˜dé¿®-¨ q:…(Ðg/÷¶ &?­½ž31¤ã[7CC$ð(à•à?hñwc…ÓGë³çM¾ººÝ"ƒ&Úmçú±—ÂxBÉÜs‚ºÖ‹ËÙ.FXâÝ·-¥E•q0Ѝa`8Q+<(Ì2‘¹>veVÔXˆ+ÊC#ö¤E{ñ¼Då;U“ëSrŠS3aE$û’¯"·íj½¢ŠýÍÅ,Júõ‘nW ˆcS/GdÑ~”Ö®“0" Qó xqp‰²y!’k²K/øv®Ïª,¾—L¥~6ï?å1M ð² ±€³|õ<Ñ0‘ø×Ý{^"ç{S‹i‘d“5kˆ”ôÜ|¢lvŒñBøÊÿsïp˜¢™Bº£½ÞT%ìÙ!W™¬À„¥ïÅ劣¶µ¡#Þ6ÛMÀ¡ð*HP>Ð$?’ÌIîŒUÙ~·@Z† Ò4€Çãì-F¼«Âûõ@@8#7Þú¡ƒoð‹Û$Á Û1w€ÓÊ‚s >A}½ðÊÌtg:~j,ͽš×<ΈlÊsöÆÀ>œ;¥ø(žÇ 'D>⊽›”³õÞÃÙÃL‚ãœåæ´ú–ŒæCw o “Ð2¨¿„/`t¹žZýÅ‘¢Ü'-LƒÇÖåFg,²½Ã÷ëâí7$qCrÙMÍœ>ÐÑ­ó4¾ªÇÙ´Ä;úÎt/¶Éd Ô”¡Ú<ƒýîìÞ%èýd °8§ §Ä¥7´K\H ó[î(1ÊâìxvF^Ûók£Âû…~NI%M+¦€ò‘L+×f¨] ˆc õ(&æÅö3ÑÔ†öYÉ~è}oèéñç&Û%í¶W÷VÅó°ÌlV>Þjß“þÖœç:ð³àúé±Ì¨(bý\lÐ],Ðò«:úå}!wdåŸý ÐÔÜš:¼kË;UFô|=*°íáIÏܰ„"-ÏÒÃL#A®€±ía7ÄAÚ™÷+¢‰M©gº¶sN>KP©0øß0·³~ç*NFÓ²R&  ßN4í„Â-ÕqÇ%€üËXby'áã=ïÜM¢(&r´*§Cíʧ´XÉûhƒ¹ŒÁ­yUÐZÖ="—làñ 3Ô"+v”S£dÖ¶º‡ µ%ocwä ó 4–+_M7òƒrþw®ë\üŒtèúœ 6òúyIE¼°HåÅ -²Òj =ÇÜeð§ É;ßfNÂä‹.¥Jýúuþ³Y^Áwë!e³ìý;@l;/ðL=¬âºo=_éAìg¢;@Ô§­aö"Ç‹ô?‘,)óÕI¹O:ypQþM[J‹™FEªŠÎÅ9¤!&ìod·<ö·È*Yáï™ÏÃBûQ~Y0;}¯9?4Ñb8™ô÷ÕŒºù[îïUíÒ.M&&H޾½IxXò.ò ‡'¾ÖÜŸ¸¸„§ù(…½p§éåÿ'<ôf@xüªG5³u2ä¶p AULª÷‹ʺ ¢§Êp^`»Š°¸n‹÷úyªúÁchùŠß½ù¨T!HËGÂÝ÷jÜjÈ}ÓÁüïÓI\ ½v¡’-¦îˆ%hm8çÓ‹=بaK•¦nx¨ƒ•ěØAþ÷š¾Àü÷Üö,Xÿ‚”2^Â×M†©äa…*$…ßâg}Ï^jÊ“¼5ÐBz¥ü¿Þ%ÐOUȉ¹fdPƒ uÿ?ÂÒÇô¡JM50âøâq&¡PCS¨Æßü鉢lI.|(éó¦ÑUô?g¦·Žqþ`0ÈêÈ…Kåëg£ÌÃÒ(ü:Ð`ÿ0 ÑÌÏìU^&È=Ô9Âhî&’p4,Ìs¤ÑaSpD9»®]­²¡õü±ïo„Ìãð|f„¨@¨>=ŽõÔ&¡lž—²aÌPØN^n¢5ýf±& øÜj n!½Ù³Š ’øñ™ØÖçò*ðž¼ê‘ZxϺn¤fˆ>rHI{îe¹V‚ç^g˜E\ y¾k'%Òr,þe+"üýŒ¡ÌÏ(cÍ ŸÑ3Nzm!_½ñ~eT)R"ïpêÌwE%˜¢Å•οñ[ÜBJßë%]-h%ÒEXL~+¿Éjyìïçä;f'æ`âùÁeÄé²¨Ø Ñµ2¢“œPäºáƒ(­<Òe°€ÓÝÿÙR®}éóRæË3dÂ9h7ãBlüêЧ›!¨(ýµËޏy‡NwƒE‡¨þ’ãþ‚*ˆâžÂ]ž+ʬ¿Ð^˜K!ÌÓ ÿ=0³F8£A®Šè¸é‹!y ÒoU¹J`t‹u£ºimŽCJ”„‹$aâ½zG½v‚9‘ ¸ç|ëÏs]Jø<µ¶ç@vÚ¬ÝØgà_%—}#ů·éÙ¹ªÚÌÔT?[|%±“ûÞLèiýbÅÖP1TÏ×E2}pG€à!Mø€§=…6T¨›ÑæÍÑÉbÿQ« ]ΚiZ|µJù ®Îýkw>Û²4÷ëå´¢{bÃ$ÑP{Ô»÷01ÒBS÷@$ªA8¥¥é„i¡c:âƒR¹^šL O1Cˆo×ðuJ%ü‡ ø:NØTׯ“±þV@þ!+@;qæð6ËIr¾yCß Zìf å ’à»%Û„QÃkç4ÇŸ\ŽBL^óqÅØD, `ß²ÖÉ"9! p’ß,áó%ÂÁ¶†pV0ü¯`Û\÷{+«+½ù3Iá%?JÔ“dA /s=H‹µJõ•¹Å]¡AuUT™q žt«G¨^E¿08ÕW,¼½c¼C a¶ƒ¸i½Ë=u·GŽÅ—˜È7!ZŽmÃl¹¥ï;ÙÑRa”9(ÖU¿T¼øa ætš©úÑçôð$¾ç²9gÍY$-”n/|Ðÿ?tt[E\}[¿®)?àÄ&÷`îÆÝFŒ JYRPZ ü£§Õ‡þµ A…ÎüÐåÈRáªZ†~Ã@¬ ÊXO’ãx=ÇÝ5Ô¬†8e"äêG¼=M…+è­€õ-`°_òï©;DæiïÝÆ.1ƒ{e‰öá^>bdˆ`QdÅìVd[óÍb@Œ4zwäº ›;Fs•B&Þ~pêÛô‚1–—™TÓ¸®ó^QK÷7àŽæÃcûÙmZõǹئk™ˆîÙٚΠ’Xh3½7ä‚B2@’ùˆ¸^ãPJL1ŒN¹BÏ­U–Âðù<\}ª8ó\Xoîg®Ð2žïÁdFR¿¼+ød2†’Ó*xùÅï×ߊŸ 'SÓÆJ=ÌàÖà[ŠH»kk¼V?{`<Ègnòž“†QgÙ…™:Ÿ:‚ó*]Y%%Ä 5#r¬d–4ƒ”'Ó!+u$˜­©\h×Û_³¶>îFÝ7•XÜ3m÷ö¦\º}Ô¢”1S8/ ûa"ïÝZ¸WÓa¥'¶öC!œ4åh~‰O÷ÚFP?Ú)ˆ%P9ç¯Ù-0)« ´•jø”€:âïæ‡òðÑ4wÿH½5Ý1à¾Þ‹ Èóî\7qûbj¨Ÿ2 Wã‡Ó-[1éÀ7½ÆŽ=O›¥0þÑySOÝíöìÐE$¥Æ6-ˆb—$,FÓÒi£Ö HÓ àϲè¦çnäŒ6õØ«Ôÿì˜ùl¤ÉÖ=DQ×±FúóÔ!j4èvè—¨Œ>ßlº]…qÒ9ŠZê“d?83¨3 •0q&S<§¢’èbMædcØd ªA•Nòm’45íÚÕå|åîåÙaCQ¾è9µC§¥@­éÙ˜¯^ (J»Uð vŸ×Ô²!€@¦§ £~h¤½Ÿ*ê4… Òûß™#*YðÜ“cáîXíK¿EúÙËl.pOÁþ&ßKÝ’Šìôš;Œ"¾R/Là’1ªKéOy%m³¸ó4rðÙxUÿG¿²Ø&âÙ¿¡ ™™Í =½»^UTŒ ¯–ùš¯J,™ %ÒÓ€k'p¦®Bax9UGº"þ:œu6xÙ~U"©fÚU³#ÉŠ#Ÿ|¡¸±³¢.ࢭùxîÒŠ(ÒÍEÉ~2cš7—éf–‘å¡kéìbå÷¡FÆÑËÔž<ÖKC-ß ÿAø /DÝGÈÒ“ÿó|þVâ.ÿk‚¨zK$Ä]Vu×0oo W`º8L°+\žûR7\R¼Š É_òì"c³:'—Bm)ެÿo[8R4$>R£ ѦmÚê¯ÒB£BX™’;(²DA$êm”gØÎ×÷Ì×&¼m8½•ÁvÀh›ªNä¡ò¸^Áµž'V>±‘gµÆdþ‰ƒ¥Ì¬iöBð¸”ç=‡îŠÓ"­µ«ÅZ¹a©¯½9­›àNte¹íöµÇÀÁ³š€˜*ù`Þæ1‰#vÝ¥Kàê˜Ãßä1Ò™W"ؘ ³• jva¾d×MÃKç|,ÖKZhœªóíÍ=Šï*l ½ÕüOÒH¶qú¨IÀܳöÿ"˜g#Åå·L"–ìý.oK9J®•æM/J®°N(J³‚íøQ"dÌײá÷dý¼²ÀtÞBÿ Í«d;*S—³’W¨>\µ\)脸j°»R¿ßËËA(„ը̭€3µé-Ðãë ³_‘ À̇öYð‚Ô%ÄŸ@=•RîrGž4ÈÇc%Õ|$ ~g~…53j˜-,¶»_¯=ÁU41Ü7/…V(ÿžnòîÖ³j$Ø£èÙèÜAÇá¨o¯%Î*ÄËêòW?ãQ®ŒP([Z”Ò‡ë:Í~¢‡¾hµ8MRÔ”Ï[K÷œ»!b_ÚÞó­?—û=š¸HÉ´J:™žl‹*S*ôI´„»þ_ ‘ :s”*"vø™+‹ƒðë¡…²8cöÿKX¦0Œð‚ô8ž\ÓYñŸ±+üQpBÝo„ ~\b¶Lèfð®(Žu8þAhIpåìéç½÷Ží@r@hÈ6¨OÕ­âq§œbJ ˆFy¹–£ ‡ážñ«kž‡Y¯€áï*˜U‚.¡º‰Ýî«…Y;xD@+|TÎG7±çOàߊŒKÊP¤ÏLZ}ãç{ˆ±„~Û¼íÍDE{ã; DŸ‹GnãñÈ—G³\ZÁUMò°s Ë}70£ Ð‡"oæ¼-ØŠÍ7òö¹Ç;lð³Õ¸L¢ÔbDK¥üÓ™ëe„¢W€yñUóÒ±m.v-؂΋;Ï"ú¶ËŠœ»žÌï­î‚ ±èò'ðhŸ‰Ö!T7tÊ|ðÿ©ˆ;õn±3¼”â"Ü­xˆÅ,ä×ÌÐwP‡¾TתðÆÀrö™´ÕÝoÑ’!VðôuºœÓ;îì_¯éS:¼nJ¶³ƒÛ„}Ôgï2N{Þ—·×ndT³Ä¤™§ó}´Dú»`ï·²_áÒðèÞ‡ë¾}]éÿ›ÿa®êï7CáúæýºÕü:¬ŸVè~ÞŽ/¥73ê ï·´nû{Iþ*ÿ@p|?[wÛܧðÒïøk ú»ÀÈø~¹ÿ+P‡USêè+õtaúˆøßm }½£wÛÚgðéøt[Ãö=ü;ìþQÿ³ßo N‡Ãö9ûuGøuA>­ëý½þÂ÷؈aÁqµËí°~8Ë‘©ir<§ Zl}ÎÁH5‹5*#ÿ[PgEn$~™L–‚?{˜1úÀRü9q 1Çèæé4_;áȺêjd9z.z|Ò©ðÅnxú‹zfvr*¦Áð{Þ0³û{)sï%ÞÊKSØ›B;ôšÙ˜5ιÚäúIñMm¹oI7ª ¢¸  ¥OÍÅ#Uà1€³Ù ²6иý·„ZtXƒÂW(4l)Óu Ó¹ÓŽ‘Ü$±«4\«½úÜJrh矤¼à³wD…óÄ·¾+Þ¡x¶i n§H+’«¯Z¶€x¡´ßÊýàÑj!|…D€àø/{I>8bžûtÈýáö“Ù2Mj矈ÕoY~õ ªyWÖQ t~~Vn[Û˜ŸÅò±âyØ„i   ޏH£#Y¡*Äc^¬ËŘ40z÷ð·M±SÁcô»Îf*¨ É]yê—ŠëBt›õÖÁ(^æéÞw¥Ç…Ž/š·J÷ÔÆ€©ûgØÒáó80 S]bT>ÓïžW íj3lì“'+YSCíò†ÖpBíf±nG&íÁ)R7)±<톒ùøxÈq?-PÎ$߸–õt#’1rCÄ,É*«ºz`®ªh« ͹¢î¹±°#(+î‡eëù¶ö_Ó‡¨áB}œlr¯Îι¬"™¤ïѰjGÉü˜–DÃÀ±¤/Ø; _U’„âÂâ˃KÄÔÎä#£aϱõÓþ(ûêsy~iMð1$õ5ªÉ­¢Ãld¹Ã{ÿKǪ0péoÀõnܘ‚ë&OlÚÁ±šºŠŒûºÐ˜Ûew˜8n75pf«í,V®ÌçYðJZ!ÁöëÐŒhÄÐ~Z¥,I-C5Al‚GþÐ0ðK§- ýZ²ÿscañÒ%nÞqñ–œ)XšgWêÏbÂ;Ô$`RÄ–mGºÞlÄaÑ ‰ƒÊ‡*ÙêûÁ“Bô"$ÀÔëM¬ýÐe¦lɘT~(+ vVØ–rEr„› û»ÌL7 OüqÝ:X=Noéáê¼ÃÄä¢c¢D F·cÖý:2z` °ãÐŒùD"=ëÚÏ:M‡”XmU`Þ 5LHzÌÐI×ú`s  ð­±(}óÓAâ´pcÌœüWª|krVÔoB¸îC`,Z¨•YÒÐ^Š¿s«eqR7„#±pçúñŸ»Êˆ¸™úÿ{©¼?ïc×hämŒÃù²9´¥¬Ô§Vå¡eü“ï;7Ïšqç*en»Q—*ÿ9鈨Y["Ýá·f.È6àÓªm’ÞP åÑ6ƒ µeývn·ÒoÊ+ä?ßu¾×I ¤ ±š-©9ßžl¢¾Ä˹¯¦Öü·•  P«K…ÿu2CEÌi[{w«Üé%“jyþáW샱 À»Ž±½? ¥ "¼hP+¶T©@1ÌÄ_öbsþƒxK~UrùrF8tOÚ!kŸ¿Æ×0ØÙj²Rß’f“0h¡Ü9lÅÏS¾‹\_¯Ä÷P…A„J\±â?-»Û ¾›w“@ï£]ãoXLWö¤™›ÃD=Í¡æa•¥5rW @Í ŧ· 1BÏ|£¥ä‘Û_úÐó9ºýëã ‹£ÔŽ Bo–ø2ÐL*Ù›êÜÖB ªØÖM"öCÛA Þ“#%¸kIªíÄ¡lŒsaŠê3;9ê¼ÝLÒÙ ¼º8èÓ †,tñùúó¹“$NÔ ‡&ÃÇõ%cï C>8nx' <ÜÚ’E=µ² ÈÐòQ•í±€ª‡_È„OVõ’_:!òîÉÆžÜ¡²0ÜÀkŸb–ì—s ©-1O z;1ˆõúP›K‡“º¯Ù±sòŸ"&O[‡Óq³9“;Tº‘>JÑqeÜN”æfã¨Á [ëóW0VìÌ*–;¸3œ€ižIßí·†;GÆã u2þy³iÑûetÿaºÃW)z€ê…‘¶Zêu»•LîRÔÙ/T6†ÿoŠ’’a9C=p&¹÷« ¶L#v—éǹ82ö‡.4Iö»&E=~ ÐO;¶ŽUfqÃòö Xƒìu¾­c…Ð<û™A´ùšb)w¹ôê4¥I’÷—VÞåŽô[ÓùØ(a-o(I,Izäjù×í}Å6 g¿±nÆr[ê¦ÔT1t½ãDK5]n#õŸü´øCôG·?Ÿ|¿„¥¶’ýHÃA’_K.C>ÚDj[Aµ^W_\7F„âå +·Hï\ÜQ’ŽÊ1Ÿ¾Šî¯ë‡FÎÀˆA%›…_GÀ§ŒžªÅyKo:0l (?Q’ÅfÃa‰/£ÅRmîÝ‹&TÌr+¯›,À_ ç€žµð0Ál$VÒ,$¸¯u}Òæ¸Âfå±mä..H¶8Ьë9ýrŒÿþãÔ”½@*ÖÐ%~"§…Ø’ÜÿHÀòžYÄ6¸=¶0Ëh]vçÑp…{ÑP®|º Õ þè²4¸»³³,&õæû ͦ§­èÊ­'"§x.9>‰Á>tµ5äXqn«¦ƒ@ö”B $|N|¨Ç^™R¸K¿a<œÆJMDUjRc;‡¨iÿxóâø¼Uot-Ë×XŽÝ£,ÿU©­X¼g±PÿJm•í¢]ÃBùÑ)WØûÜ)×Pì¶f&2R/ñ|,ËE_ò–4㓺ô ¤dÑ $¬JOÕ jÙ)ÒSƒÔëÞìŸgµ1´»—f‚œ–¼Æ¾ÀI¿YÑZhý´s¼»7p5 }‚†Çƒ*Žðƒèb¦ô`~ü4& šÂ‘ØÀŸºÂdA,YóSÈw3Xv m(\jÍp•ÈMS+&V_% ÁTL\±/"=€ëd 8¨w$zàÒÆ™^ÕøÊ£Û ¢qÎ'°Fª¥Øl¯§ß™nÒ(©¦ƒc<+{Ö 7>ÉäÚ^×$b}㢕\ ÞˆrçøLÕSáÄ3Ìy‚ªåyUÚ!#îa{*ʦA^hãL¬}ƒƒÈ„Biî­­Ì¿Ðñ’rD‹9•‚ã¶§ôB*[Ÿµ;k™PÈžcÏîfx6 /ã/Í"åæP.zšÈØ•6@¨FVW­p7ÒÎ9Ö#‡Wª ñc£SsÑê^ŸeÔ9rÚ´6„‰÷Ì5ÄýŸÔ`<ôK¹ÒGéØrû^²&ô˜ðš@冼øQ(„þ®iHgŸúFWˆÍ$õÐW—FoFÚ‘°‡¥ävüË$Ú ÒŠv¾Æ¾~å&íæ¬WóqàGBe/]rÊŽh&¿­6?žÄSwŒJ­Mx±Ëd… ÷…ÈË »K8U_ê5áŞأBJ…óíM=žP¨Y|Su£ö–F’_õmU)uqwd?Qm1àmâ7õ5H_vN;‡ÓòŸ4{˜¤7c]'Ç/pêhà‡ÐTß„¬(³xDÞ' Ï<ÿ*)}¯¼9ü J\óá+y\CY&Á2“ÜF¤üì$c ƒH’ø-<'ä“ü³q1®VÙ*eX{°t8m¥µî@’qgŽèÅFƒ(ÝnZ,RlbæfkœV·¥ÑâF8˜úã—=š( 5Ž!.Ά Uö]ƒìë²¾º•‰ÊpøôÈöÂ]<¡*º)hÆŒs¾$h=˜gÁߘëïQ ¥Â%YTÁt…ˆÿ ‰ ”m.¾Ñ„ñ‹—)=Õ©Öœ7ìc†dß­5À1·5<¾ßš»f¨>ÞhQ¤…9~pû7¤ßF /ΩózôŠ>kÙ˜Aɼ ?ær<Ó” „°Ü½(RAŒ§T6®Cn$N©/àUÍ–¹–RÁPe‚¿"Ê ‡œ›ô›VÁ¾rF)ÈͨZN¤}i}Wnb7;sݺ\Z/ˆ­¤ûºÆ³é`´¡V"Ò*¶'D^1«]ëHëÛÔèY·flEýÍ|¢PX¯»p½|\—Y:ŒÑÇþÇÔÿîIÓÑšŒw®X]šrrp欳B»y+¡'SHt2Æ~Ëe¢LçxáV«U?2Ff‚>73cB"éab‚žÈ³ÎG¶èªé’ò–€²¡m#•CAØ·ÜsÙì鎿1ܰvt]c¢uh3+ñ™úÆw9"jåå‚ÓB´¢ÐÔÜ0 ä o1N%)×£ÐÊ:iž {D+¬eWO_J '¯ATÜÞÇÔÐZ¼oúÞRˆ2Ÿ¥ÓBCIáE-.‘‡]ßv¯Õ×cuWÌ9¢º½#îJj±^®‰ÚêGC™:cÒÉ9‘ŽH‡¿îã“vòM¬þ„ 6ôŠ9þu Æè,tûÑ%Gš‡ýÓËP¦•öAàÎùC·’Ë¥\Æ÷þýj©‡šùÿªËëÛÖ~AgÁtNþ”é(uBiÛ™¯«ñªŠƒOüž"Øœ’E½ˆáÔ*“0„õdÕÏ'Сî*Ím{½ ñüÄ1háîz + elUÏ36M™F’d;À=õo]Ý·„T·e,ãòµ( ’PŸr¿)«L2CQ^².©Êؼeë•ñõR À55 ÏU‹PYªÎáVÑמ6,ÿ^Y ËŒ «0m”+Ù¾¢o‰.ûëÜ÷_‹‚NÁß^õ¾å/*ï¬ÀÇMq€RÈ!Ý¡çqç–Ë£˜œ)¿Ô¿öœ…C¹.úOE+6+âwdOÉÀ§{ô1H·¸ Ɖ7! -Ù¼æIb€ ïü­Õ>$À?úá»ÍÇ€ÿ=µQõó#Œøþ‚>™«¯»8¨q³¿èÑB a@¿³zÕ2uõˆª›?o©ðJ‚Ã÷Öó5ˆÄ+1`…ÇC‰½º6Tí&†ÜMwš¯Å*Ž*R(P9(8,Òžn·‡ŽÆFî3‚—PFÙüBœÉS’IÁüp/n»u˜j‹‰b¤Yu:¥|qÔþâAÈá÷­.÷ó;æ×‰Ðù·p¼¿ðŸãO†XSmª™d' ³:G2 ¡ £øê_G Š@=š·a*YR¡1ìåÆS;Ìø¿½?Ʊl ½…»¢êƒr¶çÏÐkZ˜.ž£”'VÞ{†‰ypÏ]Ö•ËO¢¬]råÙ¬*”áËžædýUZpæs²'âw„•õo“!aéXžGÉ«¢YKt‰ñaGõãw¦ aFr×êþ¢{xðt¯äcåR¢™EÅgI7Ž?ÆÍèQÙ˜7‹œû¹~_Iš u5…—|ë2J:ôð/QŸÇä.èîl/6÷¼D‹ÄLçÝ×Ú]#w‚ì‚f·Au3%b߈âŒI`±2qcö©cqe°!î°ž Uð㦩M•½N›¿ÎBœe<ô ¨ˆo©‚Kæc3ÖjF-FtH½¶hƒñÛ£»nPÍgá0Ç‹è¸BêF÷¼"‡¨Ñµ0ÀðÖ»(±Òûn@— Â俘Õa;dq?ås{yƒÖ)<Ê.ÆYë†6X¼ˆaq‡Qûæ³:k^ Ó°àQØh§ v‹-Hñèsào©ÀÝ…I&@¤„£#ƒ··õ6ªZ‚®PÝÝ­d8‡ƒ†Ö_¼ýv5ž…'¢d½Íû’€Q »|‰Wíµos%š?±OKPjþ*õ³Gqú¼ßWKX°¸ÔÄÄt•€²VXÅ^’oñ€²ÔD6–.FºB­tü¾Îÿ,øÙÎô›,G*ÇhæùQônú€±±N…³$€xXЫ_)îô¨>×Ô’C¶ëà ø?‰1 Z¸Tz‡ ³ã°íšÁ°)MV5h¿%GAµ…$€-Oâ És5¤VÆßшN ÓöçX´‹>ðgduÀwÓÜkª¨hÈ5‘`!·‹É&5•}±I¿qûüä">]5±…¡ÊÍ Î?…?Wä\‡¼aPSB¾»YZGž›ïZÄÀÖPl«åÉOópÈRr&p‘îÓtgïðhJƇ­ïç%’õ4tâ/ÂU·ÃíÞV<-p]b£¯K@+²Ò3 ]}4£mÙºù?Ò’×~¨?oè“åjêæ¹üùuEåqï}ÂpYÛ_ðIa¸ßFÇêpíÊVm ®’æ=t.&žb¸…£ŠÈ™då{*§³Ýºá;Åzžl”sþÀxÑ?êIÞÌ Ë§|ßÈâNâäQü ã¤Tn^KUú„Û/¨‰'‘üÿQyž5ý r175*³û_–•ØTªËJù왵§B䤀8ºžMxºÎ{ ,:kÄ„ioÃ1ñbút{¿ר¢Àf7ðÊÇ­Þ›æÔ·…öëD2Ÿu'Ó0A ]묢R÷‚™Ã÷&·´„ÁS}AWyˆ}$7ô‚¤Í`‚—®•.~ÄçÝU=äd\•ŠÓ—d±ãyÀ­zÕv|àV;dBG^bÚIoýÑœÝuûµ‹6*X©÷å(Ò†yÝ0 ìóÀ_’ä '.¢7žµ_ÁÞ2;Ç„g5ÈÆ‰€â;à䬮cÔ2Ô ÇûB3jÕ¡Nkabu—Š%Èi’vDL=¾mMf æHÌ{)̯Ÿm_Cõo´ýÖû/¨v|áó`ÆÜ¾’aùÒsª¢2MÍ3._Öõ¹E8¥dÛE,Lg\Yß7.ñÇãîã,…4G!LJRãp›r—9%y9:ãÀþw϶ /§9 @G…~Eýž2Ác÷¿Lì¤o¢/Å!f©Š«Š©_ÌpÆüsét»’>'t¹lO–0.¥ ³_™>pÈɊˤD ž°¸íô’d#DGÑÖ‡ÓÅÝøÏLa]p³57¬¼šçÂ5µµÅ½u¾mî ?òYD¢jº‚öæcs§­¾@Áaô¶¼O‚¼¢þÆ/Dãå!ˆ Øâ¬y2·˜ˆ»ÛÛÞ‘–'@u9ý•7ÅOú(cúp ÝœºX7¯öÀèšwÊŽø_ª€üü½z­G†AÎ<‰÷«wŒx m˜B.uÔœ–Á°ZÄiÚ>K*ºž*0"°Ì󫽇Ø}Jùq6ô[_¤~p#TyxjqFÖ–•뮕ßwìSUšóv£‘™;À¦x:22,g€ÇíÂx EÄ÷#9ÚŸ] ¯G­"Ö&‹(„ËâÁ턤~ÈK¶´šsj[âµ/¼NÜ(Ú¨¬i>-£ôåDb"Æjí'³“Ù3Hv`‡Î3«j~©²{Ž0E/¢J… žŒËÄSEê÷ Þ”rðp€‹éeaõ;ìÀ_Ô¾,4ýÏ×D-rÈä7äõòV¹2œ ×ð¶šZðk_€¼5)!cæLÊŒ'Cg†áhDr˜¡oZÖŠ±ö·/è‚Ï«««‚'`Òîãgð*&‡ÀÂJ/{®d¶ôõTÚ-Éñfˆ;©)­2Aé•Þ§(ì;Rbj̇®VP¯2P›Þ_ÙÿYì Dæ»S{xŒbl7õ°j'2ŒB¤ù;Œ ŧěóN……>hKAüœ‚%›;‘Ò4†+HŽ/J&&ª‡Šü³{I€¡½«Û¾¥)Qv? ž§hØmp‰UÕ}–&J»ÞI¡ìžO„Ã"ȸFª™öQ’!y¾^Š^4HÝ1ƒ¼ðC‹æmþ “—Áè–šõ[“K5à팖 7Ÿ- F4jj {œ×JÏÝ ð"ßAG>.Ƙ‘Èè&0¬éžô¡!ÈË ÜÆ¦Üæ ­íbbìÿæÇH¸±ÛýÚR¥Z~ŒÄvÇøßõzG’V˜%d¡|ŒDC…5Xú‰šM fN!‘ãC”Ù:žŽMA*Òùâ+±)¼…íl6O7é{Æ8!þp‘Šxmµ<|6!ÆÖo.ÒØ[wºî*À‘5LîGÑÈ lœ!È­2‡ OŒÝeN'Lz2Ñ,ô­+!qr(öË™G"¤[øý5´'ˉʴü„F3r ÛÇ‘íÝꙵìm­øL4\þö¯»ÍMRFØ×Ñë·3Ý+³d9ˆºdCpxíc|—1ž±óg5 ®m~ÇZ)…ó™ Úsm v²„«)=ÏEôåæœFчýs”‰ 0O%ëC0³0tÌ -v­qØ(-{˜hÞãüG@}=öyíÛêUÀx]YPeú-w%—×§y¢oœå½?"ÑçL Ê ÿ$Êe\F,¡9^@QíNÐàx4àâA¹ÙƒÓ(ƒª÷á²n…„pÎ n[0ëAN¨MI6Ó…6í`Eäüe„6·fba•¤zîT×#ãCƒSždy YÌvÑÍ·&3ùámèD­4ùŸóqDˉÕǧÇJˆ ÇUö8‹²>=↼;̤fÒ$ðyr@64·&‘I · Idû"ú=§§/A X,+UINöM3’94£ÛEb`ú­ ñÎèdld³úNˆ™.=¯ø¿9Ópf9ÁHƒÕu¡”‹‚}2ÄæÔ<©‡5r6«3bfDå¾ X_Y/\w#õÏëý`„Í"ºVo ¸X|‚Á —Sô )‹ò–XØ"¥IŠüì®´|†E+$ `)Pá4ë6™àžyªzIƒßÃ'8>´PcÐÆ–÷QøÚWóZùd;ë½yööhÙ€n OP‚.‹Ÿ]šŒN%?ôˆƒ~¢´9Pß)™Ôìê©¡¥}†#_^Œ¡OlblqQ̲.’i ˆÍ%¦ŠŸš!œÍÈE"wû¡}¸L ñEÌB2mƒ[Cx Ü cg ¦fû' X€p¿Í=æb¥—„üeÉN‰U ËAS Y<ê´€hÕ;©wÔWöôzô±¢Ï5!ô£ªñðƒŽÓ|r8'ÄÌðbÀÖàñoîß눚Ã:Ý üù˜zìX61‘IB.«®o! Y: ‹7+ajOnkl„ËP"zŽÃoŸÚ$É,¦@ËL^°êìê ¯ƒ¨fik üUaUAêþó³†a攪°²sê΀FžG3=·æ…0Ìe¦C!qˆƒD`'ðóo°Ø§ÆsNjujA¯¦iï$(’æUülxâ Þ—{—ÔŒÛó¯…þ‹juÆæ‰ŠØn¹Ô?Ëç«Ä‘7‚ûã÷®s›ÈAÁFi3ß(2‰H¹1ey¿ rÎ}ÃùƒËëmž6öY§ã$lÚ'÷Ò*íë‡Ï|®£«\ù'|M,c¢Ê}Z{¿ûá[¿¨þðÜØCFñŸ(J$Æh’ñçÒ³ÈH–"†_›Ý/{`»sÔm9Þ ³¤å'µëGIc·×DÅk< iy€Ûš..ê·+m᱓–qAb™ú4š`Eß¼«¾Þ´® 2ú%PGÕ%”»YžÂÖûy¯+¦ú^gËwye B¤NZD‡!I»ä 2q× ûþ!¹à ¥º4)4ò¨+^` VQá5\.1Q|´¶.¥¾hĘ›ËõøI6•ïÀCóßä­v0»š%6>¸Ó®QÉU >AÔQ{ÞéV÷Ê1ûiì‘OËÐñ…îÌPyð¤¸Ï›}¸àÜ'¡¯'’y—zŽWj1à‰Æ'ë,8ÓÑ” òYÌâפ$ÐÀ4䊤&•¯¶çLÁq´T!ÌÕöÃ9in¾œ–côèNó‰_å’ᶇã $}ûnn‰hýLMä’)³út ¯€Â.– 1Sœ –ßë ø.îÙþgDM›RkÖAuÃÿó…2ÑÃù?%c(OÜô!Ú9@ÞW96ߊåtîûÚ 3A™4 lS*'ñÍsýµ°B•#¨»#¨¢½éƒÕ&qÞ=-&t@q£P IŽª¼62¼$ž«¶ê”è–/Eëk†˜pœ Xïoa‹˜/¿=®Å÷Á,Šœ †bqKò^g‰žèpÜ~†V9@ 2{»YKž¼Û‡[Õn¦¾g¼ÄVÄÿb¬ü÷ »$ß‚âáµÈ+ßoãئ>a<ú•€\Q‰ÿ!ÙûFylÖæÃTN,ü–£0/?5Lx['2š²;[å~kÎï”z.0ÅT„TzÐ ó4òô{fdî ©Ý hõæd¹D2J¯²æ–eÕåÙ[º§õâ8 wxf;šñœ)7£ÞÏ®X§ô²R½ê„PqR ç¾j¿×ì –Av[R4Š`š`b(¿×è¡e6‰6Ã,j¿&îð3ä@À…ƒö½6ã­Ýw>`ƒãÍAruuIÆQ›Ý.*€Ë៥flë@Çöé86ì A â„·yFdáÌxˆ†+ó*¨­”0ç'k‹F©ÎÁÂù•ƒ/ùœf VBöý/ëVž<ЮZ ã¾”9þ W2»þPØölOD§Æã’‹†à8”–Û|£Ÿ4÷ïÛ!Ð&¿6XüÒËÏÉ&ºX¡˜ëŸp¸¸õ½|hHBÔƒ|¨Q‡f8bØŒå"n††“fTÌ%›­l1†qçÙóeIeº$Ò]¹ä¥†±)væÉ;­‚­’ßô‰0¾Âë0qàáð¶' ÷.qúZ¥Wk²|Ìžn!˜Çž|Èå¢ë(\ŸÌKàUõݨü‡js-·ú{º”¯´i<¨X Q”ªÁ‹¤H¿»&‚Á‰Ê®ý”JB¥M}$1|äUïßY"3Nƒqþ*q`";£U÷·÷eñ¦N㈖T®U+±ÿ„Ø• ËÂVÔAuÇùéñ&cn¯>få-&)Ài´ÔQí§¼`žÛ”Ø'ŠâCÈ8MŸlH›Ò#ù‡7¨nZV{1ê|&I“UàÙü;Ýûd5~:•ç1|{“©˜Û¨6Î)šjíõudÆ S¡?['—<¬‡†Æó CiâÞÌ…fÊ_öv6¶¸ä„ßûý‹m«@cÛb’íÛ¦Í3,=§HÌõùjYyæ˜Yãr’7îšÚ´éƒ»Õ&©{ø¹¦t×ÓÒœŸ•dÝœ`YG%%{‚dfBœÛÅ÷—]kêàÊu÷¾WÍ逇xÜÀ‰ßÝŽ›ŸÃíNAûã¤óÁ—ª¨Ê&;p•øGô°lÒÚ±ˆ6[”JÙÖóéŠë«´û1{U1ël}ýüxmf-¸T]ÊѦÆëòEÏGèg>ˆ~ àh2Ö‘ÎÃB$NÆHIRÊÏͼŸ–°šýþú­°Rçø«ÐŠ[îQRŸ£õ§Ú÷”7<ùñsc`Ój‚Ek^<+@ÿ+BO«låžÆQ—ÀNÖ„‰JŽF¹Ð¨sè$¬2›Ñ&êõ«t(TNбè@)±ÆþTZu‚æÙPÕQ*Jäà°wß ã›I;7…ŠŠÌ‡Bì\mÈð`Óãë¾èUཋw꺉ÓÇ£º‡:¤ÛÍqwÄ㸄"&БF%¢š«ºˆ‰Œæ}aaÖTï›ÂX‰L\›Ê¨ pàX¡ŸÇþ›f›\Üâöû›ª·,¨k·»à™Ë>Ssc'7Zo»›ÌÌP_¯[÷ÓÊ dƒœE˜ú”a³MyL]!W;âŽ4#y¹lÃxy—ì0fM~Ç.;¹²F Ì|„vÑ¡C¯ãŒ(2B|†G/Ç눵qTüøVÿq=Év÷\™°]¡‚-ùý <"¨ûírs&R'YHüK«*²µÓŸÆm2ÑOä©×‚©`ÕÑ!ÚbcåR—¶,Ü2cÕplDén­„.ÓÊ VÀŵF÷%ˆ¶´G*7Q!Ž•­ž^ö‘˶ÙüÉ^±åÊS/†à£?}æ“T­Rí›í©þÞaÀŠX–gܺ37xçÌŒ J·bÏq€¿¼aã×Fùû^e‚­öÌÍÒͰè4:5X f¼á ’“ÑØaEuÜòÚAªðáa±mÆ8ƒ ‰B«^BËÜã•ÀÜç»Å ì<*û ý™ü°¯(öùàAØÉêŸãJØ&ÛàX»Q…¨”¢¿°®h\ .KÙöþÞXvÿNï¬ÜñÍ÷–ËLu)’·¸›·ÍbœMj›ÜRªËtÓÑ\’‹/VR®&èQBÛT³ªX‡=Ü&ó i„_Ëã}Ì……²‰I1z‰-¬~”Bìq0M“mø­:‚Ð$Ę"kåÞ´VM6Õlq_:ŸYqÿp}¥@‰ºÕïR~ [œ۷zñâK‘‘þìÆwKÎf‘Ú ª¡[Ƶу£WþÆX0˜gú’ªø +Õû›ƒuÕ4êþÞ,úôeièÁxoæëÅÅVIµW0,½¶-Ö~*:Ä "èùŠæ¼ÂuX$ (xˆqŠ»A)8ë0xÀJò%6úGh"JbèNX-=¤Õ8 C™‚gdÙó–ˆÆ`†7‡Á©Qc Š÷}fä=q!5éÄ;¼#§-¾^êÇÏÞ¶¡Ó€ú©$ÜŸ€ªl”‘ANKçÎop0£…=ÿ<Ñ ºlˆýV@«cÆ6C¤®Â$Ò?ÆŠA”U¿y+­¡ù%!Fw·ž"©JkÕÜþ.åánXM@#——<àHí1g–D‚å|Ýã~n. Ö3Sfb &¦Ýþð†hAæä@£ÿr£ÒÚ=+D`YxXâ+n n“Oì½™Oæ³Nï6‹SãfYC³¸¼I§2Ø|i«[‹.ÌÎü¶™‹¹2¸¾ŒM깯~ç*Æ&Õ+$c€Ö9|óÌÜ£0_<;m‹ùެ‚ &E aåçtmf0y¦'9y¾™u‰ç-|êœ}ÿ~2Î,\_éhçKóÂî1jrV®S©ÒjcΩ.¬_£x~qÐ#\aÑvm±vÓAØÂÕž§a3Õm’MÈzôJíD¬è]E ájh1“É#^ÃÓ̾cÀbb:zòõï×*îˆ-X)¾¸UÊnÚa'ÝXô¬æó SþלæÇ¯£«‹j;§·9Vßï$Dÿ+&7~®&“Õi%.b’ÜæIcT ”òô¡zYÛ‹Ø yîZ¸¨l' q5¹>Kzä—3ß û[¦†ÓÖiu†ŠiXök˜˜ø ‹þ `y Y0ÛnßA'á¥Á6Ê^¤ÚA|¬qÂhfÈ<ª/òb6x0i˜äw‘>EÒEäý©Iœ`,!Ïëç :”WX+S¸ÐÕ 7 úŸ¿*Riïž[в±Þ¼á½U7ÁðLù£c·_V‰¯£:˜*7™¶pÞIELZ”®[§ƒÆ„l%l’‡ÙÑ~Éz®ØÍÊŠºv£™9lÝþºÑ}UB‘àMŒ™Ùêó³/L  #Þ׳­3%}4õ2rÉÀw¨ìÍne×àõ™ L§pÇa%õ“fXKåt •b¿àu"מ‹„Û©†#ÌÕB_åRÃA¥8GèOBÚJ¯FJOó왽I;lq¢ê¡Æö¢ä!ô54ü£µAлK=ðWñg<ŒÅ¿™˜ýëÙ²cð'×+ò¤‡($¢mTÂcwP¼2]Ê+°Ô*¯_Õst9ãXAöÊ÷êô‡¢véXl¬Òwù.PïùÓÕN‹ì|_b)—{?–HîDœG¹Ú%Ì᱿i¦Òèï*+qœÓHQ$nÅG4Ã0NÍÙÉ<³ë=gã©æ¿û>ÔðM„ݧñV‹¥º¬§Ö𡊙¯Aœà5¤  iDÛE”W¾¾ Mä/ºéogÅ€SÕŒ”É%;ֺߵz¾È–£5yû~èJù(GnÓOÑÑú‘c@ýè΋ÍTê¶h™”m?rˆ ðn ü‰@t_¤¯tð®6Õ$Xw~ Z»ML]”5âµ?Y”1¾êý×=»MA%xØ޶K¾¸Ã„A°ÉÑßY–Z×'½ƒ>'°ÚÔÌò*¡å|R³Gò×ZÌou+IjOO/ZV°m¥•® ¶Ç‹î¸¤î šÌè Ç¢sáÛbÝË„ŒDËw"#Ôê!KIzˈ±í!§ƒef;z©ž£³¡ßÅ>‘AHx„!Ò××̘Þ1«1þë²[‡×÷o›Í¸nU¬á6Y‚dh™üÕäN!¶R¾éi5Ћ^ä¢VoÁz€¬ÈÉCSâåJžÙ‘Úþ7'–wÓFƒ[†Rµ6OoΈ\¬kz³‚ܒϸ‡CiSHª÷t‡1`^ž*æ_ç_¶1”Q8Ûu éù^4Ïg$–Š¥˜OjÀré{ýœ’ªd¡£ Ç™ñðü­ê^‡P¡ß(0µD\’ z3Ÿù•ÌBš§/“²?'ªÉ£G>V a’‹²aAdÕxht+¼\Öþ³ï üÓPÅÕõ6´ëVÿX­½€ˆKän.ݺì+Æ*Ïëýå:<=ßrˆöÈÇjD뇅=ZÝÇlN¢.‡þ6X¨ÇÙ" ØÏìY/O5ýî¶’2Øœ—$ºð—e~†Ÿ¨ëÑÚuºî¶_1 wkGâDc‹ª×#þFÞtUYµªšnÃY7¿q„Sb¨®™sî œŠYƃ…*AÛá/µ©¤¾¯_éûßm0Eó v™jKRÖØûØþ_ë¸0»Tq/X·Q"ÎõÔ/˜+¬á‡i¤¡`úÇo‹…~*VG]¨l_…¸ò¿‚®$Ÿ¢4Ôx/**sõ Û‹^ÑiFỸ fЮÁD/õôú²JLèÒP¾!8¢šøµe’­äJ†Y‚´&ÿA¿—±ðäv×^uçËm³Í.âô¯Ë.­õƒª?œ/ˆ)I­àª¤’øá 1™oþżˆ’{ÿAz–Õić—•Þ*Å. _Q]ü-TàéÕ`»®"…éÆh$<3¬T¶sÄBBJÓñ0ÄQçWùqŒ¸ÖÔ€+´HHqZ4c*±³»1a'eŽ&ø¢nR³w5¼‹Òã×’Jÿ)ðסÐRÈX[[}ô­þª`çtåMá ÷§_]þÂÚ&Óà>þ$w@ÊŠS*øxŠtdËUlj¥F­”‹U¤I7X,›wÊÝ⣀YŽ…SõÈÛ…ñ­Ü>›d½“›êÜ/QoÍŸ‚I‚¢-ß~ úJÝ€ÁááYõ8—Æ4¿j­e’}½.ú¾Êbn'‹ü›-’ª3FãP}taú ±às\ +Â+—v‡ ùÛìèzuìÔRF¡óR)sHZÝ«qÑAÅŒx\!ð­‡–#¶ðrŒœíߣ ÓχdžŠÊ=ŸD£…ŸP»ñ×jNhEÿYèÝ]HÌVTà•šº£ˆJÒ”†1AÅÄ#ü×g75´’åú¹h˜*Q&é#«óÙFî;‰“ü%…¿c+n“…ŒÚ@c\ÉçÛÔO8púü·¼OÃq¥\ú›§üQü|ü0«ÆUœœâ¡\Ù‘(Ìk%4ï¶!íb*µµìŠŠ2Äcäí:Çóܵ茻=ì5;í§­÷p>ï†,×*²¥EõË{Ó=ÔnM×ÜìªIX^Ù Æñçîäúg–¨±]Kt°ˆ_*æNd)zÈ^3ô¨~+¸-Û84y±òõ]ŸƒMÚ›qL8ÕýY“óçóeLx/¡­‰Ô“x²A5Ž]íGþ@þ ®Jžø  ôï7‘.·GÚð59#¥Œ#|ý­÷ÿk 0Ȳ˜T–“f÷,Lǯ;ùÖßë?hš xÊ ×‚xÖ ù5W+éä9JñlÉÒöªîT5uﻘÂ8Ê œúž°åÅÞâQ‡?ó8˜RiÊ‹ƒ¢!TvZÀÏuŠ…óWçzFYrrºV ë›ß'픑f³Õlƒðaj6¯=²ZÀÏtç”èÙå:ü°íe¢)Q¼0Ÿ ~ŒÉ¬Ê\…GHJ.£m­ù÷Z9ÖQR'j<Ëüð"c3×h¦ Ù~¦' «µÏµp~¦ ,‹‘ýlÖϪU½-ÍÐïÊœêGuö^µ!2jõPÓåqç ¢Dùp‹°ŒŠ=9ˆU»{XªÝIaBLT_ݾÚÎ{ãp òÁïz V“òUY.? çg˜y<õ’2Šô€ÆèñCÉU³h¶ ¬F/“œØÕ­Ï1gårû°ÀþÃ]£o•ì–åfÉùm„ ³PhH¸–»lgÂ÷m¬³àÈy• 4Eû•QĈ ×Nê+ÏßÅxM“mYù¸võTGå—âyïñÒJĸò­ô[=˜ÿ † $£øÆáS –Ó"çdù0 ÿi¤CÕ’œÍBDCIn¦1SVT.Þ© m·nãXã#ˆ;j·MB{™47Vÿ8n‘õ›.åë]ÐÓr`€ð)n \ž†‚r$¯êꨨ§¯Z` 0^Aìó¨DSÕŽ¹bŸ°IlPqcaÚEÌâPÛ¨mŽJv€) ´¹x*s*È‹ü‹Î›)|Gÿ_Æý>X¡>°Óž@7;~ŸâYÄ»AÂ:Ë·¤´VtœOdåÊÕ-ÓéP¶cÁ²oìÇ:VïY«Š‰óKxŽ”¶Ì—™¤ô7†èRq°QÍ6DÍ:nÊíŪ•E|΋íΫµš;•¹ùX3ا„ >.¢.U«‘Ú3)/7)ôÍ=~üZ°ÉáŒiÉ™Q¬€M Rõfæ†0‡„‰«XA•o³bI8uU¨²†÷·áåbëÈ%‚z›/QRŠ·ra~ÅjÖÅ ä w/ú®sÌ_PW’ý„ºh|ÐÅQíØ|º*óekMÖàÆjBŒ~|î7Ó®ÙE* ¥VÖ5¥ÐáÈqNù§Ðs>•«á`üV ­”x<0„Ûu«s¾À l¸Õä#Å›¡ÙÐ@'»Ïœ?·¨nÕcŒo‘úFgKÃ=ƒ![±u+,+)É]ˆ€¹üç‡l| _¤o¢èOÜŽ„þzp]㸂ïÆàøÅ¬ ž{(¶ÝqvT~°³>¤fvAA ƒ£[¿iÉœªU¦ª·éÏðßjη5ªm7Ù]ŒÙçÄ‘µ½ÉÌÜò´kÅS?Pô -\ù]–Ö ˜uÍdµ6ÐÎLû—ºYbzïÊÆÉ@¾¢ÍxX¥º£¼ÍxàÝøaòUÓ7âòëàDxÌê$• f v‚®G5³êRr+‚¢Kn!daj^ħôOÿAEÙa‡-™U0'¨è Öb¿'y‚„뙇½Òit=³nçç7ÜQ,¹1 I?S­“&_µô‰XÒ¼¤*Öþ]ؘÁQî4Æ{ËJÍ¥Á E:Ü”‚³íÌaic—lÜÑç‡ ÅQQ5²,°Á,åú€/‰+¥ãÇèÕ—¹ÔЛH6ìÓöI îdЬ½O¥ßd‹‡1Z‰õ›L;óú»SÒžó·´ÉÞtê>|{Ú=¤Ѻ©&¼I“úƒâ n|Âî@üXUF®Gõ´óÍÍíf£XB|ÿU'U~_Y•þ, 5U®êX®†2 ÈÙo™¶sg0€q­I·=,ÿ|È žpδںÅ?efâ~SÎL„ŸcB::¾;3ûY]ÛŠËŠ WâGN{ÇÅ4ܽÎO×2« tNOøè´F)pþþ­eXp7¥á޼Îúêµ^åS(¶ºÀêoÉ*MÜn6òþAgÜÖ0Òvû [Ö9I]èrÏ|„&TZ¿Cɪ7T¥uÚÇJ«‰f``q‡©$åN¸Ë …nã¹póÓ3•0†@â7C»#ñª€t8¿(ô®5SdSªfZöÕA¶ÑÚ¤B̃=¤Ð¬@Y ç›ÐË aé‡ìûÓˆU$œ•áÕHˆ±`ÿp¡+Èã‡Ô·IAæ¿åôõF¿8®¶Ë ö{/1V«eK¡v]Lnä´ÑñÁ%‰ê4©ÿUø;*Q— ž&¤,gÿ–ÇŒ@]eW¢ˆ Á4x“„r'²Ý 6° IZCº$8±_VÍW©É˜ÑÐK£Rs<”ˆ9+‡þÞÿZã—^³cÛd‘óÕS0xdt(øË(7"¦Q«´(“]“l'í @N]Î Ä´H©n–¥í ÛQ¨ •½gIÝ¢nP'Äì7Q$ ÷æÐ˜|ôõ=؇_øØ´Ž¡õS’ "èóÙ ­IÂ-¢B“SvÓ[\Êš[!Sˆ¦Ë,Z/§÷ÍŸ7Z~©{4êßTH/mÞÔOšÎÕ‘#Ñu?š­ÃF†G: P4LöߘücV–ê¸ßû€¾WsŽíA=K¯((¡ ¹±Ã}z¸¿ž¥y¤ À³ìC»Z3=4}‹f9y•"Š+Á2ìŸåIbFdïLðäÔBeŠ:*z¶êÞ¢wÅÜ̶ãè·F'Òù´€ãS(wKø¾šc°Ñ}7 ‘½‘„É}G15iñsOa¿5l?ÚÃu{XÄÑ0òýì¦EÍÈ[J ExdP  Í><î!DÈB“j«j&½JS·†€J‘ØU 0,2ÕÀâm-Öl¶Ò¶‰ßÑþ _×WX|K n!Âbæ¶ö·Òþ ê$üV9¬0€å=G¡O:êm8Û,Ѽ9s°'||óz2Tʆ’c4ÿ.\O1i"ßuÂSR’“ò6Ýf0 •T®ü}S [qö—÷¹bÐÇT~ñ±ÁЮ½&ŠÄ Ë Ã͹uQÜ0 ó¹‚PT¼uèöº™™l}BzFWÐäœf²ýV6³?Wƒóʇҳ#ÿa&ìJ^åßÅú|Á³û' —€[£æŽ7Šá¿óå“qú÷q33ÿó|ñì¢ÎGA}yä  J¡xÝ²àŒ¤=ñ@3† ¬GüÀIJ¿¶Ù6T_ÿjŠÂ¡ì;¾IbKç ^‘ã„øo2x}èŸâ÷£²0&ä!¾½ð¤Bj)ðS8 ¯íÏÕU†¶K”¤áÊÖÊ—áM^è‹“dÑ×`HZf‚Ðæ‘öàðf€íËÚç C+Z㯩bͲ+Q’ìêœa/Êýh¦!”¸d1Ñ0êÉÕ€yU}Úš·Ó†QMt¬ó—5ˆåV}z|]鮦pÔÑZ㢥…Æ*DÓ´a=Íû¿›æÿ ‹¾õ¬•A[„?Éyþ.•“<çú7o—âL/ä{žÒL…üÓÂXf./ùz[ª¡&Ù7ÕI=Ñý$ãÒÉËÒHôánBÊçüˆZ3ezoOúBphÞ6b¤­%jÝ4–Ç´d!“ۥlj?}Ö¯Âõ†}F>Çb›!E6 Dä™6¯%Ss`]&xŒ¹ÂÑœ[Æ$>‡Fi0¦‘ bá Iæçü;y"p(¤ºUcâ¦Ø¥‹¦ŽFU¶Ð(¿2$f¬÷7Q}EZ=O„ù™5/Oë{öè:öYxIëÅÐe6“VWz,§ÿWÏ`$‰þ>0-$ª€M‡õ«q(©' =o¬˜I!ÔŠ°âr™¨dRç …Î¤ŸÝAppF7­\h& j9ñÛ˜g–zæ!y81çq[" õ<ï!ذZ¼Åö6wãxï:œdúÖ4[°þš §›0”Gæß0ö™êäȯ'Tûçò¶é¸ƒö Ö[ü çEË ޳¥ÚÉò–Ž"+.ê>puy·í0eËT/¯†ncJ8ñJ2‹øÔ™?+sBØå;‹¦=éÄ|õïÁš†³EÛ¹_ê Æëí¤9'‰¡ óaæd)›OÐpŠ rãK‚‘v˯'A$ºn Ö*L'~q(ጛïÈå/G=^Òš{ÆŸú+o:ÏO¹å]{rvd”‡è艉Ͱæ-èZ¥LÓÂ2þka H9böÓ°Ñ#›Oü>‡òò„@Ÿ1¸½%[ê:)žþªÅ("]ÄÕ{Ÿ·‰m»â9NS+Ëæ®„,ÁÆmíÂ7@ÐWç—sß#øôU`¼žÉ‘i |Ý0¬JÃd¼j°ôµ7Q?©p—ÖŠ.PUTž"©LŸ’ÿhLÞa[üfibñ˜]ã,:~x¢·¯øúÇ“û,m\ 0Ü †Å‚:~ã9f€¾~ÀhÔoWØÏ.YǤ8F?탖à“ûwõ‚ÁM} ѧUˤ.4Ëúæõ~±GáEn ‚r!ÿ®ÁVòÆi XÜV£4\8åËóK/÷k "=tQnñÅ’myE¥L{pÜ;rnŸ[4Ù!°¥+âêj .TŸ?}ˆ(FÞŽ-’ïi7IÈB‘gÏ•¬ˆðÂ9_ómúªü<àµö—™d ; B#¦CxêãñBêyÁ{µ¢ºðM¨´yižôùGWœõóv. „̪i7ãK~IœiØ’ ÌY¥ ¡ø¶ògðCmfÁ0kiý#Èë'ÃáÆñ†ŠÀZÈ­jE?Y¥ßèLRk[Þ|®RÈM¿ËLÇÑÙC=±hë +(c$t±¡¹•> WÁèîlŒô)NHèá¨; {ó¶@¤…~ÿÓ‡OÒ™ÖÕ :ù†bb¹>¼ß$¼z4ÔäfHÈÝ»ëþX½»Ý¿íÁ (µÇª&^Ãr7Ëàiú«Uj0X‡ëFé™2†/ãw[£«Wœ#áVØ»J˜v¢ì&á]û¼í„†Ä/ÆNÝR• GFâlF°Cü¹J¦º€jŽoøX«ršGŽkH1OÙ/s}ÂÌ­áKü%æñ—ÖÏšÁVÓðyÀóŸªÜÎlœÅpGGîXUŽ‚(YOV3F¿”ìÓ­éßH‹‚È Q| <Ú?5qï°ç•B¿Í^â¢ßÕPXâ à¦p:¢–m€‹1Ç‘ÝÓ ,á( ¡: á¬áéÁ«Î&äf™rƒ\fÔyÚh•4gŠ3°hʧŠÿGàÈ _cÉæ` ·Fö‚ KÈîŸLBɇwrYâÙ♿“fjýñùP=!QëHÐ<•êï:£³•ç.«õË ,pϪ¢Ëí?ÈŠ{îŒúYÌf)Ûh‚XqBŽW?“º€—Ýð@þuY(’¼۲щsBãOéþ&×*œ˜o=ñ@M}Ž ¸Œ¬5æ|<ÌKxνó¦[2Ë B™éCðBIQùÿo4èήwÙß04dO@ó£0ÞÅB#mò÷ÙÎ6~,«]ûÈ"šˆ²¿É˜Ç¿}Cü/uG¡»H7xP1F¯4zAzÑjÖÍÄ1ü¹ÝqSä‹Õ;+ú®Ì¹å¸w<@÷µ$³¡wnvonUÊÀÅis ëðÝé“û¼VÂøF­sGÙh’›¤#<åÛRGúýç¼×™šTühMS7 ³¿^Yvˆ wk9MøáÑMÓ»u(ó=ˆF„òÍy&`1pšÉÓòø¡ßoµLm­JtÌ´èö K}"õ)i æ™]¶^bàb+U FÛP´SÔSŠÞvˆincL+E²;cxö^î“âXW‰»tá”.ÄÙ!"!nÜBºCÀ5Á¡C$XÄš.©aS³‚;ÈcÓOÕÚášGƒðœÑ@œ¦3÷lìQ¡¥ÁnC@W™±ý Öòãïf¥Ì¶b¸1uNe;ÆÌšãQî#|НrÌÆa®VexR7ÞS.›0‚p ¬|XˆÅ[Üoß7‰A ­â[ûËí Æj /©¥oÖ\]k†!ú-rÌ„¥A×¼-ÔB|*SyåÉ|´€ ÊÅ´ø‘œg}Lˆ–’¶n‘Ý&_¬J'E.A¥{Y´«LNþÍê–nh6çJ\.ÍzÙªRXÓ¼²<RŸ3VF.gº>¨Å wvôé@ÔÀ?q(ðâäWöü$°jR)Ê2|$U |ŽŠ¬*6î΋3*ãŸ!9Š5Û´C±Ø eE”~²þ¸/X›Ôh¾]ƦKM YÞï+3zÁÔ©sJßÅëÕ¸ã×G2¿U7u’3n6}¿€|HÁ¼ã>4z“š‡ûˆQ¯Y³uÖX^ (µ¤m+Mïþß×Rê…€Îmà-s¼°Ñ&^»[þeŽ¼Èš~¬ËØúYº…"žã…M,•|oI0äèÀâ6[Eà1¹JcƒY²Òîœæd£å¶»=™a¹Cæ¬kA*«R$/á1ÕhHT$“³ÇPøÍoâ 3³x_1'Ðgl•-ûøœ=+L3 p©´ðy;Ü3vŽAusÅÞôIb÷Òœ|"Õ"6ûV]ƒh¥$(U/¯xÞÄžtNRÖ$Áåð^¹¬ÓxÚÁßìc¾Ë„ܯ÷ «Pˆ‘]• ]Vk åmˆô+}½¹¿07sàþ¬ùñ°y²²È–mˆëa®Úéþcƒ=_hôRP:îVV1ki»/_‹Úñõ¿¥ÉT„b9R¬ËNLÎe2PË ”Dáþ÷èE‹ðÔæàó,1?(`!†c3´þE;uŽ.=B›M…ÌŸá®Ë¼bòs•{ÁlÖ²ýž34^+ø(Œn[¼Ë§Cqÿqn±¯½””™’‰ºÇ’[ÿÙÓ:£(ÀîG¬?Kî!½s7L#Ûnx«¸¦4ø3.Ã(%°in’üØ0@-´œ4¨ÌgR05‡ÈMóX¸g.ŠDq¤}°Nøoøœ÷¸ ŠrÃb·Ý¶¤-NªéžP±øC=m„†‚Á:ít‚Ø“ÙÖEž-ö.2Þ³ëìç&¤I0xìVOZè\(ìø£ Ôñ+ÓÙÏ^ÏËð£»)\±­EÂ1€³¢eR+‡W«õç…‘ï8*ÌzŇgHóC};FÖüŒýð–媢d¬·3ÃEXþÚfS[a’]k(¡º˜B‡KM£ÂÒ)ó¹Ó5óêÂ¥âçLìTbTÞ1ß˼ÜýèroØ`¼e2b¼“} æ`þ}Þ3Iq!4ƒ_¦âJ±ˆp®6ÙêGî{2ÖÔŒí èx9ýäï° F¥UŠBÝð#ûK³ÓôvBJh¨Ò4ÔÃûÆMÊt¶cœÈÞÈ‹… *ÅØC8‰”]¾ÎD®£Yùaz"9«¤\n½.@)|>0þ©ŠZŽü².q ئы$Àj‚>¡‹æP5mØÕøš0ÔÚg¶Kk™FT6À?Å6ã:`Â@ÿ--+¤ÜݼAcý'…÷-¨`¦¡Zùgñ?ZƒAÔ¥HòI^/œ ìÚFPBJÎW[ÆëÍR ¥‡Qç-¨`RŠ–¦Pr>J8l2˜ i–”Ð)£”SA7õBæGZš±è8ã?á:ÿ©™iµHØBÏ«·6îj…«ú•±•uYñ?c‚«¤_Z_Šdªanœ=dÈaÈ®$¾v¤/ÿz=ÿ!¸¡$]¿/Žæ$h+kZ±³Ö Þ¬GsÓ lÃÄÁ}DUÇ ã­Rܼ=-¥%za—M Mk¡RÓ5Ó]Ó …:Ø}ñÊ,fÀÞR ùxJ·Œ‡f/õÄ4³ç´*9¿úGd&zê 0H)⢥žiy½×lŽ4¹üx/± ˆaâ1?TFÅ25ðÞ€¬qÌ!Œš®F¦ÒQ!R97”+yÊðêŽ|¹lRšRÆ@(.4œ$CÛzvŒ°…õ£´°R©Û¥Ã{c›¯RðóåA!öÁ È[KÁÓè‘ ÐQI´Ã=¿PšÂ¬9'Á·tÕ›uúݶÝÓî’”©‹Ý|ЖµªF] »ªË…ž3q¿kéšv3ƒÞÄ>Ažõ’ˆ»Ž,ûX/ù©T1ìºÖ@Fà¯(aÀՔϘ% 3RäõÃû3KPd\wV¾0¤,WšSÉC$!ò /ÛÉÄLN©9i×5ŒIW>»Û_vbÔ“ã\‘^]–µeÕ„&ýKÓ3”7ßÖjú¨¥òó¢­ŒDÖÛ‚?¹z­Î5Lブ³ÎXý+ÉvÉ´9úŸ˜ÈçuùW>oZ­ºÐÂZ^J÷¨ÈOÊ)@´¹UUà²yÉQÀîÎa½é¬'!Z”Òÿ^žÝ/·¶”WòÜWÂ…ËÐŒ¥,§þ p› ¦r>ß¡¼ZÔXeUÇ @¦©¢ZÝïÇõþRSÀ/È)·ÇB@ÿ66ucÃgžxÍl`‚t»máýÛ 1³GÝáÑKV«ú{u74Åõ¨PvøåB¾¦ó¹d®Š‘!´ò£ˆJ¯"2 UJD¡B+³)l½@9ÛVV‰z (G-îQ°ÉÌ os…míW)s¥ ȵ¯Õ!½¾‰%Ïû>MJâPoVŒÜ9¯Œ`¿Çš'hûmæZ: Z0þ¯Óí'@}Œ>ÚV7.×ýÄ}ÏqLd/‘ÖNôÝíÀ0ÀÌ‹ÎÑ, öÞÈ’Kµt2[o€7éÊÄè˜zÕ”¡3Ô÷±=j}éeÆc«bç<ò ŠÛÄzŽ›”õž—í‹nýžò)vZ÷÷þ€RÈf>9æ#mÀ†ëº-°u|­=ÆÝnWÀ«Œ\Ü!ýäÓί08Õ̽ûç¨ô©jªÑ·+ïbìB‹Œ®‡¤ äI÷¤´§k»èû1TH°Ðü›JhkƒdÍýCð•fŠ?Šh\øq\ìÙÓ­ïnE¦ØÀ¬Àª :õ“¸æƒš )É›ÒTÈ“! Ÿ‘9sEwËAæ2¾£õªt<»÷@pãt¹Rm {ô„œí†á„4ý¦ü•o}€£§‡¶…¶®X¾¥Y #Bîqª=I"ô˜Fr¼Y™öñЉ§…£DHpÎgÍ{!rRéºóí"ŽñbÂû½|û“gqg{)HVbÁD[–Ý×iNü—LñS}#äÉ–*½Y¯ce 4Úû‡ˆHBEõTQ—mfzÍŽ‡ÇÆGݲ0¢¹eÒ)àî„¢2Êoa¹)$Œ8ë[YA¼ú-1F±Ç«Õv'sû©Äo{æ7C^CDÐE…àÜÔ_UøH¶Lu‰îV­¼8K6;­#Çu|Yýû+2äLl¤R$rN±ß9 +%‹-5vãpîôX¤=hkÁ QU-ÿQáÓö]*»N¸äÞPTˆ6—ÂÜþä°š.ŠX׿9X»L±Ÿ®Tƒ½sñ==YÃéÔ¼N ¢óh‰Ceé¤mÙ44rþ3ÉÝÈ.H.ŽºÀ-ÞíO}¨,š2¼äo_–­åÀìC‡DKØÓXÕÿd:ïÝ%<Êq@›):ƒ¶Ó8 äë4G3&)q”f·›ÜtMæUìó[’ʵt§Î¤f(hÐÇg&†‹Jû?V~Î,€m!M‡kÞíçô…Tr'ˆòá‘Xip?=ôº¸”÷ZËcR›‹/Û¦"úB6FL'/ÙSÉsb¸úÙÏÇ•û+ϰ6ÂwY‹Ïm¥'O/ó"!z3pOfíã–P½ŽtŸªZaVÐ9®-ç«öC£¶gKbœÊn‘Ú·¦¬N]*NSÿaÍ5š[Ÿ5›»6õùÚÎ9MHùI“…è¤ßù¶·—Ê;ù"hN ëŠ™òoz—Ä/@x U³µ-wðlP‡ô9-îˆöÍ0³FT+¥Ð¿Ñ¿,øÅmpÃIbï"4/zÖXꆠ’>ÃÐ$?’ÌIîŒUÙ~·@Z† Ò4€Çãì-F¼«Âûõ@@8#7Þú¡ƒoð‹Û$Á Û1w€ÓÊ‚s >A}½ðÊÌtg:~j,ͽš×<ΈlÊsöÆÀ>œ;¥ø(žÇ 'D>⊽›”³õÞÃÙÃL‚ãœåæ´ú–ŒæCw o “Ð2¨¿„/`t¹žZýÅ‘¢Ü'-LƒÇÖåFg,²½Ã÷ëâí7$qCrÙMÍœ>ÐÑ­ó4¾ªÇÙ´Ä;úÎt/¶Éd Ô”¡Ú<ƒýîìÞ%èýd °8§ §Ä¥7´K\H ó[î(1ÊâìxvF^Ûók£Âû…~NI%M+¦€ò‘L+×f¨] ˆc õ(&æÅö3ÑÔ†öYÉ~è}oèéñýÎL œ5[ð?†Äf‚/É#+¡Öµ7ƒÆN!©ñ9Äê«£G½Ùövé@>V¼Â-Z<šBg_·x5’‰HzCÑØ¿£1 e{¨]ÇK~{]ÝKÌieîÔ ù༩\uuòX½tôκ’0u£É@Ûø©ySt¼9Yc•¿\1;áÖE\ÎÀe'šjÐVòüÍ2¸/?‘‚ªr³dWTýåÆàáœN0ʃçŽx·R½ü$Lèc«>‰Þ =銥ŒÜtn\Œ5Àü=$Àéüó¶ñ¤c±Þ-÷«pýïæ%Ýöáz5g /+n¼6ýA`I)›Í‡íù9»K¨Dó¦ÚzËQƒŠÝIoFÍ3Œ‰(jvÆhyª‡¬R(¸"ÏΓϼ}ëÓA§ƒ^¡J‚-§¦"RH1W>·WWn£Çj¤Í½C5B(Pسð€eA±þÂ(q¢¸Ÿ@5s{våã½ÇÃvË©¾KaHÖº0 Ê׺{Bg0ý±û #«g”¯hQ€õ]Òȃôgµý%Ñ÷•èEŽÆ…¬†Gç|ýeÁÏp«gá•“q2@)*Åò;bŸœÜ ÅŒ[Br³!6i´Ò|.;Ü(‡f½¨Á_MX„ÊñH׬àê{Õ †™ˆE•Îd¬²Sïg+ÄŸ~RÒGÆî %äœV&·Üâû¿MÞ·òOúþÆÝ/:Kn©i$ìi¢Fq÷!¼ öâ¯JÔÙÝ ì~µ!º”L­!³3§#©PÅ )Ãpn ôïÈù!OÝ=QK¹Qƒ¯èd &}kÞè6Bž‘Zm Æ!Sb§¶uf…= önIÓ©+ñæ§Æç•~´Þˆl?4†L_Ã{ Šf„Vª÷’u`ÕþO zIò[4k ²(×¥…ÎëzvuÞD^çß<6¸ÐiYõ \Qä4SâK•ˆ#zbë ìö:ÆG›P*Ê({┉¦÷¯iÀ¸ÂãÙ™H˜ô¦&||ÕYÿpâs¥~p¢¨¹E”•G*Ä`r±±QNÌBÊב °ÄðKÎC0³Ktï’ 1›Ö J òåÓtŒdœ¤Ûh5ÔIœÆfc0û²Ó¼q›ÂTÀõÿ~ˆp–䊼úóúY½ º8S´j׈½eÕÀÜCBE3îjÏvä¶ÌoŒN‡¨çk|Ö$°|¸“}y0 [åÓÎ_dã.ya'Vâ²Þ³O»VÃDe¨¨õ²¯PŽ¡P\fÄð£©~uË+:Ø¡ì?‰™ì{Ø_c´Vðùä[ëì<¿Šàš¢Çw>ÎAè™Ñf–bû"à# æì E@ìúªëD<ù`6 æ%á2[Fqi÷Q¾¶ÀD>¦·ÑdÀâ²&9f¡2º¤¯M­°Ô’@ì]Z 1]G𲓾Qp¦Ñ(>s"ÍýÁGÎðaÇ“-Á ìY-rWgDùE×˰c!&ÑÜüW±Rh®Ð`þzSè\ëGûôrMjŸâ¨9ÚgOë°Ê› dò@ãŽÌّ؟£ŸuiªÛòEÞ¥Eé7´ _ŽGªkÓT%r´=¥®îP+SŒ°ÍÏÅ· IƪzÀ ™ÁOÓÚæ~ði`#dák›!ðiË ©â~Ðiê:ÓiDêjb‘ ká7 |Êøeñ x …¥Ž ~‚¤µ¢ðO‰W‘If¢8‚³°%ÏXŠAÎ<Ýö¶çK—g¹ªTD{=sEɱ¹”ÕÞÑT.Mpc@¥À¢÷EÉgŸ¨ÖŽU;åžmRv¯—!²ýÇž‰;)€sªï|F. 'Zˆ9p¢0s°Äou~fv $Sž^22•ú$JA×Ú[óÇOqƒ·FPÛä•þ ÏÇ+8Èk‚kAÏ\Àix]ä{ûG܀Ƶ"°Ò]:L#WŽ×‘ödÖû/³Ü\IмXõB‡ZQ—º7yŸv€!ܼ;y.#]×<70e˜ý¢kÜ.Ge±»ÐõÕ®€‚t‹ÁS*i!i|þ°a7ö}6£_(|å´÷”5õIö cå”k{%ï"Ö±%8zÊ™xMÿ}dµŽš¶öíTŽœãØ¢‘ŽÌ\æflJCR#°; ø¼·¼V@C<®Ø4TñÆžBöJuàJ_½ˆàZQªSEAïOþw vÇ€ødæ®0Ç{oÌl¹¼Ð˜$.ž$ʧ¤rù‡•2㜠@ܤàž/'tl‘j=‘Ÿ„]0¸åVo`nÙc.J\ýeqqصºS‡ÀvF?ãPñ€zÆÆf®áÐp•x®Ý¦HÀT!$®â!-¬Àt¹¢Ü¬ZMG (&I‚›Y1õ5e) ÄÙ^š@©4îº?3øî¶ù‰^N0Ÿ+Tâ3ÇÒ†;}PáOЦh’#¥Hæy¾<¤ùC>ô$a;ÁW*©dÎþªÎ¬!å$ KSé“1Äé'Ä ,mN´bÒöìsR½ª&üÅMcÍàÝÚã ßhnQw·kÑRa”9(ÖU¿T¼øa ætš©úÑçôð$¾ç²9gÍY$-”n/|Ðÿ?tt[E\}[¿®)?àÄ&÷`îÆÝFŒ JYRPZ ü£§Õ‡þµ A…ÎüÐåÈRáªZ†~Ã@¬ ÊXO’ãx=ÇÝ5Ô¬†8e"äêG¼=M…+è­€õ-`°_òï©;DæiïÝÆ.1ƒ{e‰öá^>bdˆ`QdÅìVd[óÍb@Œ4zwäº ›;Fs•B&Þ~pêÛô‚1–—™TÓ¸®ó^QK÷7àŽæÃcûÙmZõǹئk™ˆîÙٚΠ’Xh3½7ä‚B2@’ùˆ¸^ãPJL1ŒN¹BÏ­U–Âðù<\}ª8ó\Xoîg®Ð2žïÁdFR¿¼+ød2†’Ó*xùÅï×ߊŸ 'SÓÆJ=ÌàÖà[ŠH»kk¼V?{`<Ègnòž“†QgÙ…™:Ÿ:‚ó*]Y%%Ä 5#r¬d–4ƒ”'Ó!+u$˜­©\h×Û_³¶>îFÝ7•XÜ3m÷ö¦\º}Ô¢”1S8/ ûa"ïÝZ¸WÓa¥'¶öC!œ4åh~‰O÷ÚFP?Ú)ˆ%P9ç¯Ù-0)« ´•jø”€:âïæ‡òðÑ4wÿH½.-hyŒÌyûð>åÃw¶&ª€ðó ¥~8}12ÕÄL{ûŒ·g»"A†Ê_[2¥¸ÿv^œ|ïÿ Û]ÖåE©-‡éù1Žƒ$¹!bÿ«MKt(5hÕt¤3 óáȯª›V¶ »⚀ñÆ 0EO!S8Zv›w’þ㦋ƒD %M,';ûÆ ÛÛ‹K±!:G1;\˜ @íÆÙm}ï o§º§œg̱ëú²œ@‹”w*ƒ®Ú0ÍjÕ5Œ$¶¨ƒ ~˜b­4a]ûóÚ÷slÐmÄr% Ÿ´XԵС¿´åK!E…T@¶¨i2ÕΟ„‡qX‚CH©Àj¾š,|)•‘¦Ûƒ ìVD”¨›¬ˆbz¿,j~Ý¥^›÷˪tÃÓ‚ê›®WOùÆn‡¦µ X—W¶4¢ö·`®”X`‚Ô »Î§ÉÕѬߖú8“cµ«Ô®w¤°¹SH:W(Þ -lÿm3´²~SPמeVÊ»Ð^>(YPX¼1Šç_kÏøzgˆÐÀÓ±À#†¡Œ¨n ±®Ò$*fÂó6µ¥O˱î3Ƀã.™V šÁ·¿ …-QA»ofMotÑg¢®±—ÿó|þVâ.ÿk‚¨zK$Ä]Vu×0oo W`º8L°+\žûR7\R¼Š É_òì"c³:'—Bm)ެÿo[8R4$>R£ ѦmÚꯗÎa¾™çx„¡-k1„уhƒ2zI©í4'Ä`S‰ÛïáHÆwo¶w³rÇ"d›h,Ñ!¶\pË̦^o­ÞêÉ겵ч}ÉVé,DϬ°Â,•Þ>ù>¾™È¡Ç*åv'??Ša@0Oh(¹8©(cŽ–t•­Ó[eqF­³-¥_¥žHhy3<î ¶•œÞ‹³×’Äè(/RGă·éÛ㊎ëE¥[•x%èâòœÄQ‘ß,‚0 Loq„EÍëê¤uÂØ®ƒÚ[õP\/óV|m£ jì·™YH7[Fƒ4êI¡5°¸A¼N¿ë',ÀÀ(%µ’W¨5o×”šw`!OBÕ«é§ÍCš?úŒÓÈ¡ƒ=NŒ¯Â¸êrù:§6Èb 4Ì’˜zš ¿n»ÙéÙC(øwP‡¾TתðÆÀrö™´ÕÝoÑ’!VðôuºœÓ;îì_¯éS:¼nJ¶³ƒÛ„}Ôgï2N{Þ—·×ndT³Ä¤™§ó=Ê>pù>OjŸªóþßÃõÕ|þÞ/ŸSbù4…òzúÄwêkóô÷óêÉðú?|½¾2ÜÃä³GÏí;?WpWϾ†ØAðýQO“Ú´ù4~'øO‡ë— ߥ¯Éпϯ?L?'m¯1óÚcçö—Ïí¿õ]ŸÃo wëžùýÝ_>’ÄøzóûJÂø~¥¿'D>¾NŽ~Nçß @ô¨Í-µd³_†­²y”Œ žï7K¨ããb¹pÕxqÂmX¿63fâ¶Lý²v0SÑÚ½Cß°o˜” Ë|\@­­Hôa÷)Ħtx΃ ¤)Ïþ§t>·2¤Å©é‡Z8¢ïb\+mý UÎ[°z˜# ½:ïœõ£U¾DKømˆzD#K-ÙÒAl³DÒYqºzû"a÷ˆ§^ø[ ÍxgK„:D…òwU»ä¯]®æG(ˆýA]\}9<׃ªæ”¸ÙàkcmžŒ¶Ûé7‚,· ›x[08 ìIÚ@ó¸ûÂŒ´ù!¾÷ÿAÏ•y0²¦þ¡ •‡¸4ÞT—tßOÔž”³È›äê\x‹|_F„ š‘ƒl@é爸9ö¯Oёћü$œæ’0zŒ¢*5HXÙý­||32VÕ7yN^6§dÖšï‘¶8ðeœ<¤Ž–àîv ê ž(]¤™wlU§áZ*»dƒ$À 1¾tC˜ÄïûrAÌì š­6¯ÄÄ5c£iw_ùËhÊJœg?ì~8u§Þ8ž+½pÕÏ?NYÈ}?\h\6q\Ú™ËF,PëßbE£¶‹‹n ÿy‡ì^±Ô6^w1$W½BÁd¢‘ttšbúµ/¶¨~MQ•†V§9^oßðvbsÙmY_×ΫU°‚†ï†»êS —{›žH¸\¾É%@$²‹á¬9İ»õ—‘FEÎ! ü%Ù@rŸíˆàŒmbCÝ+c2 ÙEÍÖøÙæƒÿ#«ªûÆ!j*®rðôõy”jFú ;A=½Ý‹P$V³ 6¸ö¶_Õ]€ ¦ï²ê|ʠмN%§ñ• Ïnúé0xBYãëÁgž&”±š8’”ÇW”™*²Ï‘m$SobÓÌ®”ù4Ý Vü™}"“Êòf~Äke›ïõ³*ÒŒg·¨"ð†Xˆ~Ò´5J‚–?^:·î€L¸yp'K ²¼ 5ºÊdàû^^s$iï:ÙQ'F%(¹”¦ÀßxÉÒUÈ­aµbwê7Ññ¯”ßøy‰r\Á Dq öó.ôØ•övåß Þ2¸ì~SM$µj37%QSe$cN)7âm¤°˜sÈb¬Õ :æ#[b^5ô%ªšGõy0UŠåÀ_” ûQïFÞ Þ×JÝâ“Z†N_zÈöÉ@¡&Ä'ï3#›YTg…ô^Jk?‹Â^E&ÎFK;Qi¸è‹¿nŠy\Ù ¯uîÔt#®øðQêľSÖÔÑù0Á%CžO“Qî5_ødÏA"¥˜•Î1éè,+éb©Z+ƒ3´n¢éƒv£:s̳ì ÈÖN:ò@9S9eòƒŒ·hÜ)Û¬ëW”kÞ]¼g‹–V! Jp`C8/ÒÕ%›£ë•ŽÁs»õ±1·#tÊ#ý–Öž¨ÇçÁâ]Àå&ühuÛ´QN¨{’%ú¡Ü‘¯ö*&›]Õ×C¢ø Ú žD~}»¦˜ÄQmúl„ò90«rÔ0 ƒõ=";ùYÜÄ`e?2b†hy|Ã%žX9ò C׋=S-/<tË8hƒZ>¶¯f ìA3^w{© Þíú#À I¹Œ•|j¿](­êxöâ÷>™úDÝò­É?ŠfZÀ¸7ó¹~W§¸€`ï°ŸÉoµ” ÒÿY[錮Œý,ø•¼yÓwÁÀü´8ûËQ ÷›ÑÞ‰–Fê¼Ëk¨Ó›o ÞAF@ÔÓîq[ÅhšæYÀЖ£ÜÀXc-jo9P§í•¬c°Áñ§ÍÆ?R.ZKHN`'1Gü°[&âRûH;/E÷@?Ãbúã Ó¾ÄP—’M3­Í/ˆ‹íYXîkìT„á dèûìeím®áº(ÝÍ¿Y/€¾…cˆ"ÍòuÉñ•ušsÀ–›?Ã>|_i8ݸÞwWMÞK -átg‰5Ü…š`ºþÅ|œ=\ÕìQT%W`ºåÎj·b/îZÆÁ¤H ›´­Õ´¤¶ô߀%"[-`˜E~%Cv•Uê` üež¾þŸƶyÒI•|n pd«WtF½ù­(;,µß²¸¡¢pLÓŒGôó1„ˆ* ]«¯e)šÐè òÎß.·¥ðøöÏ\ yàŠ—±ý»ª« Ús>4¶Ü@R¹Õj}¬$î» ‘æ¾ /ä£Ã[Xf³ácöKà;)PMI¦Ê‚¹²ë…;<\„^fŸ™nÒ(©¦ƒc‘Z×:={—*/ì«—¥¢¯òMx.„Q×¼§z¹0”ÅÄ!\¿é×Ú®¾Ënx‰æk„ó¥ãDÖdy~¥o‡y|€…ŸXº Vä*áI€wãr 4 Y†n£ÐBüB†z2„ :j$¾)œÔQ^Tñ°q&ccÐI«@£Š;/!Ó0¶þ¿ólWh—HœŸ)-zvðªfŠ¢ºwÅ­ß0So”¤mWäyöi0©V«|,梘Î)L¬ÁÝÁž»Lˆ`“-€&œOÔ…RHÊóùµ D~#]FIùõàˆæÁ¯€Iè™_mГeà¬Í’4–¥a6¬Èh¿66D¬ÂÖÒ³›ý~À…@B ;î—ÞЫÀ—JŠÙ´×Æ|íÙ™sì(/¸ô°µs{S4xüJ®´Ü–¬\€z‹Âwh€–zà›ñU] Å{Š øè–øT%®–WˆJÅ鄬’:iV—  ¾ShŽÿ¬Æ òv4ÔHÀ0óy†`Ò¯‡ÂµU1 `Ä«+Œ» ­¼¿ðHè¢5UZNOd³Ã6ýN÷NÜñÆ€UÜRZÎ’Ugc"- å¨c o§™ Ò/ç{>pÿ*ƒ{/;Ó›פ×ñá WžÂuÆÍîO»&@Rb üR$3ü…SÀ¬‹ à>-,°õ®£('&ŽJ ïøÞ~‹u+  ·Ð £(¾ÌØž 0å‹Hž½Z²%=ƒÔî<@PÄï§PX´ ÉÆÙx]×CV¬f "(«#y+¿Ú¶ÖF2™¾¶ÔDß:ÌÔB~³dnßÖWj‹“âЧ²y#%ÑíªIìsÅ(Ö—÷ï®XÆëÌXnŽéwýzý%î á05 R‚ÌÏ-³ÊIë²cdDä@&žý‚^Æêð¸R‚‹pFsc¹–‘$Í{É7¸¿€®}ß¿¸¸6Û=’X9¸ òûRVÖX|·I€–MÃ6œ âÑ¸Ì’çºæSPµPñôc=G'" jéÛØ°­ØŽq†Þ€Daø‰KFÎvÆ­¢oó¥üëBï-3íZ ·ã8« Í4&õ½„ƒQW}ÖNëLVíI9÷ÇP‡“(+ÇœÇ8!$p·ÈÕ8”aŒ-sÏd’ád—äÚ?¹H/:Û,D?@ •ô¾uyž¼1óÜÂ(¢é³~ÿü-7‹úÏAO)ï›°_éµ0±ºIõ„‚6±žÑÀÞÚú¾EPÑé|0cLŽG¶p—‘½¼lÉjUÌùŒÉÚ ]Å_ÇY$¥¼ªÍUÂêÜó‚ŠcÜ“&=ÃÍic¸*ø_œ}L5î;S$Íá½>Í‹?aá:ª g6BÿX$Eylî6ÝpÜN( ßÿ"$ŽŽ{€Ò”ýÉ[èëØøÑg–ÝËbˆP§EɵZk`-b"u ™É§céÛWä¥-)?Ûñãïß&¥ xÈV$&k° š£OK­™+<’]è¼]™ëéÇSfÂÙÁÜñð(Î,þ¨Ñ—ºin}H~(ȵÅ"åÎýo˜²rQzï«5É—n û–å›?¯.¹á½CŠÒ58ÊÞ…ZÿìòšzN;¥B¡U›oæôαðöQ§HÛÝD² i7­”‚|½Ì úç…Oñاp÷/ÿVaÄNÖ¹ý‘âéæÓ–ªÚ\—b˜eû¡²h][o!ûq¼zŸ®fØŒ¯üuQÐú²Kûq¥Yd+¤*↸ €¿È†À¸FInÂfîìè"O²F^w4dâ¥Ã¼CŽi²Q¨’° ˆ89 Š$¬¼uÝD˜¢Á‰.zw˘Ën ΘÍ‘]›ð¬bˆñs‹x{ÝÓïç9+'ä/râ1²ü[09þÔ)!Š özàsI)Q®ùëØ¿‹APüRþà€,Þ½6Þí_p$/hÿ±Q¦2å<÷&ç?G`9Ýk­+QÿrÖQÛ×ú¸UX`Sæ™tJ`…Àe˜¦R=|†î&Å÷Á¥¹Bâ“] •0'Ì(wÆ¥QÝ5„Â×'®qßAÜÍÛZž<Ã%·÷°ÜþQV«f¯qIks6´^Â9–¼ÁÜ/Å-Ì;å$}Ô³¶Ìģ¯!Ág£AWÞ^ø;˜Ÿîûµ½`) /$¯*Î%1 ÉÙ8Œ»`îsÎl×$?%û‚PË2‡tƒcÑjÄŽcàFtÌ\t uBƒ4 i­±ZS¯Ìôx…g¦|ýUú¶3¤º£Æ=æøæ»~)ìï3#*8Ûaóë¸Î ž–;ý,&Xëu–®¹QF¶*-L´9ÿD%ÑgûO~°«‚±x6¥¥ÐÍpøòäâzek¼Ñ˜¡ä^16 brÑÄIo…§õ¼ü[ÔÉ_¹4zß™£Æ‘Ö._\üDè³,¡€­€·r¿œ¾bRªËMXþT>¦@ßÀ?˜}§cXñ?Ñ0æ®a×IÙž#phùESÍQ²7ÕRTçôçÑ·“ù>ù²óö”…ð~Å`ÑÞ0Gf7á©y0·ðËáô´o%»s¼¦ò*R(lx‹.`t#*\/#(¹µjÊ*g;DÖæ@\Qvyî÷ \{™ Yx¬@ÿ}= û€Ðê[ë‘<Ú1Œq“‡R;,\¡^qv”³ÝOÛ&>?e{ú49ahÂàÕZ£ê¿+ÍÖq‡BÑE¹²$^Ð?ÖÜ ‹¿«ƒ{ßÎ ù‘ºÉT¬{¬ÇÄáÀïî>ùi|l öIFœŸi‰•]x}H!/ûÕ+W&|µfn -ðöÊŒçžØéòXÑ…‡D ™Ù[•TB|=ŸK¨ˆ‘½ôœ“ÒmG,ôþ1äEf%ÂijœO(ÛF'-°jß¡L¹+ªh8inšSAut–Ùµz!0CêkáA:÷+°ð¼ƒ&fÐ1JvLø÷6`\Xäæý^¥Ê ç^)n:,p> sÆ´˜Œë?W.t³4Ò^¾s>7O/ÆÒ…§»qDg†Ù¥Š$©XŒð6ùAñrº çy,ÍOÁÙ‚ØÌÓeNË)='QJ­•ö†é è¤À±†´¼£{W‡³xoº>P5gä¶½ÃG =aÍŒ¶£²ŠÝ=NxA“ïÙNÛ/cBáz×ÍæÞÔžQ’ØT†›Ißd˜½éôñ—°_– bVW KPS¹×—ÖÍÙrûaŒÕ¸Óò±ï'/ónŠø¿¤ž±Ãb^'¼ÝPÉ7´‰HÇér¬’.Çnüì8Ç Ã­¾>Ç3¶d%7ðE1½š›ÉàWA7™WfÑ[H–R\@Ž›.G ,³‡,k­™Îåã®7ôÌkvhFÏTb¹†`>_8”Óq¢d³¦Úÿ4êò¶¢R£›6%¯‡X×,2¾Çüá<<ÑÕò˜ló%ðæÝB4n“$NÛf¿xà­ÜyŠ‚Àm«¬–€Ð2Î^ âÏ›ƒ¤F¶DÝÏ{GŽÁ 5—R·KÀ¦‘êNõ´k8Q(Å—âTÅp¾…²SÅ1D ’ˆÒÏ V¿ÐÐp EÀÖ7Ø{ÊlÞŽ›+è”\êõ#ÜÓ.‹0é{­GÓ–E )¦9gôR2P×—DŸsI8FŒÚj¦ Üñž:2_Xu“ ä¢b¼1®ƒÛsàþñS4Ÿ~2miŒ)2˜ë—!Hú»hÆ‘ÿh¼ÙÛ…Ÿ§rŸÃë )[Oÿfå·Bf ÷Ì…M »D;Q·½Ø¼Fî³&2Ÿ¥ Ù 'yçx'7} t¢ \ÙÏì š´Êoñ¹P»(ЭÃ+©\z~2»¼D¦ræ:¤H6âõ±PjؤhƒJ d·þ JN~6CqƒZY)IYôѳÃEKªj=¯.źÃûPPû˜»g^‹ý'øØwÑ5£H2«€À»fWãåà¤ìæHÒ1Nßö^èçür&ÎgM.RÓrÁ·d 0MUjÔžÊÅaß©ábZT°Ò!6S¢ñ¢º>|Gý Â!?Ájd&õÙ»ûí–¢³T¢¦kˆÅŠQ‹ÖµzI  –È÷—­}¸dÓI¦È—ÖmEìÖ°ÆäÃ÷ä={ÐN>-WCuĪ–Þºë ãÞœå“ÈÕ7¡bé%Õº»ÿODòºå8ÆÕÀ/e¶L‰Î Ç×5Õ™šŠÒ Ð[b¥ÿP5ÿf²¡P‡-QÑÿ?‘óð %™ípéô‰àD­ÅþW‚™ß¿}®\êV„‡9þ›Ÿîjá$Ÿ—ðïe|qx €Hx^ÿ¾¢Aг­k ,Ò'+àØhº’£¬ÿX•¤õ©ÞOˆ2³q6QàÕÓœçý&6Ï¡X`+î ê SìÉ™fˆ [_0Q˜ÅôO#é6ûâ#/°ECû2ÓsV²á•s#ƒe‹_}ˆõoÑÿJñ£ 2ù:™·»Þü{"ÀÝ#fL¥|ÜÒ¬A)ù®÷£î'ÑÝØ7(”0 Ò½…1Ø2/¨ˆÔƒvŒAB^Eÿkûj€Y]tÁðTÀxyðQqŠ*hýœâÞ¾ lC¤5Å…tÔ<<ñGÀbv¡_›ó ñc„P’®ü`ÝÁmQhý¹îíwëúèEÎ|…Mã‚ÖÞ•4vÜ:X8…£ëkg}†ÎtóÞé{´?8R,ÙšBü Œ¨ÈA€ßø®ÝÞžv0o°¥6±<@Nÿq½b¨íßA‘Ÿwð´;K%زZï’0B_™\É,ÅKçãÖ5ñ¹¡þáɈÇÒÙÓ÷^ ¬&£øÍ:& ùqn³6d70„,L—|àÉž65;Çu»›8¥uJ¯ã8EE5½+À’i ÄÄU><GÏû¹ý*ânádÞ‹èl¸÷{âÙÔš¤°É¶å¬ü˧_zÎ 1Œ¶”l f ó/àÆz˜´y±Í‚f7{W:{ÖA‰Ð¨fiô|qEá²jQÎtnñº2ÇKL[4í´~”P›áQ€ž(P·à†‰³Vü§ì'™ËªO\>ÕáÚ´îøôÏ1AˆÿPpƒzwäùÈ0øóüUùcZï\/ö*(¾0kÀ0ßžÌu³ \xŽ„è‹Yj9ñäæ#ÛÜÎæÈÕsáçÇH‡f75xÁ\<“r;»füHK y:W¬±K(óœ¯'‡APu°E͵}€ZùÖÏýUבËcçŒ;}åJ'µÚ¢y=JK뺵E-IÕJêÆ5B ?þš"ÿ"ÜÒàÂqlŸšß9ò¦³Oš@—@³«_«ÉÌ ·VÙ’2C<2¬Q™Z̲yT\_ ý*»Úb׉tÿžìÛ9 mӈ߫ø¤mnž½â3Š>ΖCô•šæø‰ÑbUþxȲ%´BN¢a©ø<‡ë¶ùƒ“Ë$á4½Ê,A5ìA¨Ãý>žæjTÍv¦œ¬kU35šØÒ€Âåã½èã´ÅÓä-zxì‚»(%‘fÕ„J`H°ÏÀåmMÅí+©‚ØK Œ;½×À-eÈw‹õC“Ü8þ´!Äâ\¥qMrW‘Ãåöž–Ôy€ <}£g€,BÅQü,NÁ‰©6@»‰«šol³¯bª wNK»ú­*°CÑj~”¦X£DN_aÌÌHNWA;Ñe`§8¬îd©÷d›ƒP“ÎË'( ©ýBí´ú]ü̬ž/Ÿ7Zš?ÙÁ326ñ;Ž‘ƒÜ*lÒí+87鯛L*>b]¦õ‘¼U»†z;ò{Y<+ W½ì©÷hŠ A•RS!¥2ÑÑ2­Btþy˜DÓ3öçû—™[N«:ÊeûCâŒ<%ñÁþÏžl>(SìÜ™Ð%jô<5kÜòä¡lB˜£²óèm:êðfÄó&©§ DçëÀV›“F#Á¸WìO®î7ÄtÉ~:ÿHr} É_ö%Ûstà…Æ#£';%ïn9щ]GvN‰-Ã^[¢“@ü:>ðŸÒÖõmÐ<^cbéÝÑûÍ`=eêCoGïüÍÚyÌö. àNpŠDÄÏŽ•¥UzÄ‹í›ïb€sH@8q“V-Dš9âÔçˆÉ„‹—ÕjE=sÞòúߘÇÎLìßXVá±4 ÌI-Ù¤p>êF¥Ò&~01gêÊ}t€QbmB|Ø:‹ï+|<*UŒ‡[h >Ö]àÅZ££—»/B !áÜêœÈÁa]U~/ÃÙ+ç³Îa7!ŽŸÞ’»òJ2e3È¥GÙê^×”GI¡óŸöœVQSºÈ¬,XqfE‡ôbDû„–KaÿXöT}‚Ä·6µp…Ú#æ‘Åu¯v­W›Õ_¼ë©Î¢KíÏW]-|Û¢º5V‚£9N9˜*ÍMc¹“aÕ7 ¹fg”kv ~‡FṤWàµútðð..aâýÏvý-¯Ý ‚k WL Êªû­ËàøŒƒéÞ,eÙ¯Yrä»g>ñÁ··Þ9uæ›Ñ0ÚW)­†+…|Hô“é©ôûØV @_- ·‡- 'v+>ì#Ÿœ2i7Žöy^Øþ°ó,¸ý4ÒÈp¤5];h˜²ÌÆó¨ÔM%.>+Ê;ÀOºSÙà!"ÑæpÚ°|–y"H’ù¼ÞQ=Ét'Ýgôþv­Û´Ž‘ø™jáƒùü5Ø)¶ýWÁ:Ê÷ßõåöxâ)*óOmVóY©–£‚MöäVöL²‚æzÁ„ŸA¢\ñ$ß!IXÝ¿ÐáöM[ðsŸ™ÓK‚­D/BŠ@&%\®ölu«9óU4D¶¨šãÇ÷™˜ýëÙ²cð&Í·6 éÞ·$È’`«+õâòvRlö/Ù.:6Ë ²)Q49pÙ[Ì…Ó8õ¡}Åj"ÙS³×ÒŒ´ (x×Ò ×Ųéq?´€ t>øðM>'•9#‚û«iþhÓ¸ŒÎÎ ¸Sý,…æèAj蹜U¾,’‹¾Ôyu[g#ù[øv8Ï@?¶¶&ï+J6èQd»û mn(1ÊÕ6þ!Á׎åvQÙU8ë¢\ˆ:¥2?@þ})¬šXæ»iXUÿ6¼3?CƒµK-®‘ì|„ÝnMÁ´| ¾æ(Ö=}è¡ ë~ôÔNR±7Œ_ƒ·¹•b×\ÂʸÔt`Òëᄞrµ™§Ax? ï^ú÷vJ ÑÖFðÙ îè‡WR¸ì¾’pI‘äþ‘Ä9-'ƒ“´¹"qvp’ïL{4ù(:76ê÷5 8}öÀâõ¡?˜±‰¼K^`@àªço÷Û¨Kñ\ŒŽ¤týwÏŠ²¡f¥°´þ¥H‰£Ú —GéJ–Ã|\kPŒï:ƽÖd¿¨Í?êÆ^rE“Oºµ-ÁØ2'½üMý²â)üœÁsõDÁÌ uÊëH"5ïÆ2q?ÓoÙ¹@n€¶ájë®a AÚ†ø×xJÀƒ¡Qê—M½ö÷ª³hó½*q2Éãÿ ¸4W–åÓÚšït¼Ñ7@T%Rz5hƒ¾ªÈ[7m–U>…Ëš`i¦OŸ½cGÎËÓ™†HÖšlyÔùIG/—píÅyJ0ýøÄ£2ÞáðûÃ@lR¤n#ÛÇIüÛàÙAÝœ98`(¼Ÿ$(0’Í\Kºr­Õî³ÔŒ¬ob"¹ô÷xÁÛ*%ßvÚI*©ˆÝªsÓ䵯ÍIK)G8{é7Ì6–DâC ¨Âi\U¥·¤ëcg!C-‹Ýr*° Ý0$ÜN¾s"cåB%’-²ZñÎ3â5“-r—*èñ]–Û3²x‰±c%üÙõk5fÒ@á'i‹AãÜò}wଃHÈ1…—Šcx—<“e6½c ~ß4fÐ*Îè2ûg};¸ºtoíø¶¬9׿ö6œÊz**&àŠÅ$b81Vήìœl­ö7ˆÆÍà ~—ª1úÉDi‘Qø§éì>4Ñü½±*Š‹/J].Ž7>d4¹Åä•ù€–4{QÈN㜎Ôy[jP…ÃS„?»Óš¬Ñp•ÅúÈÊ.Ò¼f1_‡è¬ˆB£KÇÍ Ì=–¹Å%O¡<[ÊŠÚ!+õ^Ïý¥™Z7hÞöoôF΄’ÐÉê.dµ l!RŸÀàjfŠÈð¸ÔÉ´Lük`#"¶~¸¼ZãÍ/ÞùÝ…Â0®6Ø—vM#ë%¿¢ôåˆ4{k , õ ­§¬–=°&â,^ÏΰrR׋ÏQ’ê|ícB.õïù‚M*Ñå®úëvו>Œ6éŒdÛ1é9¸?®r›•+<šÍpäŠË¢°íúÈÔÙ‚S±mØg#°·°ñ[%î§96ÓPkWFVÉš²HÉŸjïrÁo¡E€ ˆ+1îkPôñx"#ÉÌX+²\(ùÉòb>€}šƒ‡›¹/>h`îbàÜ÷Ð=oÑ€pîQE À\ÚI@Ýn›¬oˆÑ˜hTÔèÂ&û5™‡ƒ`%n|ÕбMGh®ã¯~É^Ú«Étò+º fjP8è¦è¸Ó?˜]J[ <ü¹©À‰ÔBÖɃé"ˆƒæ^Z¾îÖ¬s‰›S(ÖÔ#ÉDlÁ8=“ûl¸[þ®7È`œh,©ŽÿŠ»s!z-bé·”g‹üÊÖ–Ð³Š£Ï=±²Ð3<Óœ¿[U`õdi‚×Ôb²yh+Ïl’öœÜyõã¿' ð`W„t6îœ@¹r\m´€Z…{ƒÿ/³û ÿKu[¡6·;b–¬|­]‰Àp'›--W+Ž èÝ©™0³WD†'X†é~S¿Þ¨ði¦; 7¦]@Ž1ñêÊèèáð[Òðž¾w§c…Û—‰ÜUÁÐeø?jÏëéc‰,ª`š-B’Û|cÓ=Q—ë(¥z#ÚöÏÐEWìÖ»}h<¿¼åw,͇¢=v†a†>WJ'­À½Ž¦ºÖY˜bý÷Ú•â.gª_"þ2ßéD5§¾–{Ö>´ ­5ÑÀÿUZ‹³aÓ0(UÙÁ•µN…‘1+"xßx(Mc¹˜6ÚÑòJF\f›°ª[&™ƒø1E´ù3,sjkÎ ¤_@£d™‘ðÛswDŠ·œÝò‰‰ÌTŒk&i‚´êŽðnÌ‹«iLt–üÅÚjv’¾Ì£…ëJß·ÊýD ·d¯WÿQDðWô\ª8ÿuZËqhtS¥u'J عA›#Å “ L%—p…¸ñ{Öÿ€M’ŽÚiÿ ³g/f•w‚˜ºZ-“̪€ ËX ‹,[…bkAžBÕ}Z'jñ\$’8 c3õ€Ä—´VYÔµPêHl0üÝ-n9‹N…žµƒcmèø c?ð Šàbm§×È ¶&Pý±h¯qYŸþK¶ç­B‘-ü(bÎ˪hå•´[±<ŽÞAõóÆ%ë-†’(bK¸Ä§C¼ÓIû¿n$J~1elX²s‡ÔIü$×M¸ Êþû7OZ}Ì‚KŒó“|¹Ž(Úê­Ð,]Ðé^VÕϽ6x¢¿nÛ&’ž½áÓŒ¯M)Ô‚H¢Kém’Êöœ_mùѤ†¼´Ó¯ƒDÝ©dò>ZJ±Ì»©¼3ÛÓ bº\ᑯjádI³.]·³ëUJG…yú\*èôºéWôhx,¢ Ìg±aÓlµ¤ëGf…ˆ‹ÌŒö¿¡­Ý›»Á ¢ÞÉ+31ÔS€Ü‹1–ÔmkT–iÏù¯_Ná±1Ëg ®+r…#Ë #Qþ"J·œû‡®&“…Ã0¶2¡hîÀ3#Ì{ðô ¦j²:ÐUúS|Þ±Hqж3Øÿ0:ý½7‰½¾’žžŽ˜Vçåœãî´q0îá­[cäž)u=ŸO‹Üc„ä^ÚFfï—Úunå´>ÝiD‘êõšòb ·ZftZy~ATTãÓ¼Ize·Nªû#œ߱¤‰MY…0¤ù‡OÙ*9HèÄÙ>0£0<]Âé½ùä¢ï×>MUqøBºwæb3èÜLÀrÆ}&ŸÏŠxŠÉQƒ•ÞÝÜËƲŒHË`3v‚…Ç+ðû¬© „°ˆâ£P¹ë랤BÉ JF`MAKÎUË<)%D»]ÇŸ+ºT¯èŠ´ŒŒjŒ-øÂLæUϱÀžÉâB½³ÜZ½|ÅXÔèÇ;Þ.ɵÃþŽ7›ž;øjþœ=Ž`g\l;­<ÏÍ>pèúMŽz"Ò£ÙpÇ1ŠFî KÀ:Zn÷¿¢YÛn®ƒáPÌÀ˜¬íÁÛ’?ïñ$w"8…{¡—áK}t÷Ö"Ðe|u¦M’bÕò›ól7ïá®2îVÏ(Ý[n¤8ESTÿ4š$8µ' Þã¿° tÿ拓 _B瘯íx^WXè ZtêýÆæ<^Hžù ® ­G›Þb2È£/º¯½E,ZKÙEœ§×)y£¥È+¼þèX(y¡¨ÓX×ô‹Džah#ñ)'"µ¿ª`2“WaÚsRNEø5T šûK£S †ÿz{§JyÄ`Ä$“‘ÄåtóÉnðbÓöl$ÂD`ƒ¢£[?ÖîÄPJ/P°Íu.pW¢8Vö»’—q¨HxÇqE›´‚ˆCÏ$7× ÿ–Ó¤Ef ò„ºEJ¸ö™äø=å8½~އB#‡š<¥¾\h)ŒLÿŒX¹I©4÷ 6mÉI¡nþ.OJiˆJý\5zóK.Áùk=›èîëŸÙ ¶Bsñ"¹‚ôZ]JûŸ9ÔÐmÅCe‡T›JEÒà̼´›½ Xbƒh”€Xv¸Þ¸áó4ŒÊƒifÈ Î¢‹õrQ‚j3›êÐࣵF"A@ ˾ Ž÷]é‹FÔE{YÔADz¯ô½aŠ’Q®! Ù¡XÆþ,EŽœ<ÒLložªÔ£÷hõës{N¦e[S5j»Ä÷¾êsÜwµ1T»&œQµ½¾h1ëæõcµÉ¤üÌ^§ÏŒZç&RÇAΫë½'Oî8 ¡·ºVe¬h&¶:ÄÒðôoñ®;~”Ùþd%¹ÕÇž{¯tUæ=¿ðuVÖ.¿õöÌ+@SÏ\œ!È€d+€ *ýl’ÅÇíoÌÆ°«‚‹‘&¦L“ïØFíäù ãÕûºöB‹ÒÖÍŽ×4ßuÆ-¥UF"»Z(2%ÓÕžføœ!K¡nz¿öuñÔ,iž0vOði™ûý6 ,TÆ¥¢÷t¤¿¨ÁÔ>‘8æßVä† ¦ù˜¹,šBêä© 16Ùú7b‡K6±èrYñc¤îù(…–¢;-Ì ×纅[‘ÿ{TOÛ¥Bÿ2Ú(|>ªÑ±&ž$ÑCí¨Å®ŠOZc©‰ƒÀ¯ ¼î´×xe,Ô´ðïD÷QS•À3<ý/öþÂÉ…ùÇ ó¶€¡L´«1îÎn7ÞîAV†µ‹Þ;ÒõÜ-‹OétÖ>l(\F :Z‚ëA\t&âÐî˜*a4­°9à^¢†t!=‘d×_dW0ü’²`ÆbÙ¨ùÃC“8|ø[ï ÞÆ_¥³wŒ%ɦä{¯€(àGz¡öjÜÓ–Úa{oEÿóÒ[aÄvªáÒ Ö(S$W ›¼2`Ñû8€nyÒ’ã'³«Ì—cNtç5iÒH‚L™E=Y„-%qÊërÌ!Cþ‚¢ÖR›™Ûät~!?z+MK·›¥,ß®2]»ýñžA2QówMBYß¡0˜øÚ‰á߇=ï¯õä¼Fխϼþ#ZïÓÕÁ16–V:õú+ñoÄÜÓãR°oÜÏ܇]oµT`óˆ—¶ºêl`/GzmÙu#°ÎNÚŠÂ’Œe ±Jt‡®˜^i2ê¦$˜Þ»mKZe›:æë¨§·ª¶Å bÚx£ÞÊt]BÃF;š/¡’B<¥þc)‰Ö³ÌóDV_S ’‡EÂ'öT‘âôU’14ú\yÈ*°Yy½~.Eu †Eá› ìx„]Ïd´O'æùÊ Šì¸Û‡Ÿ¸‹@ÈK]ÀÓ ÄPXL©_îTOÅv¹~_3–Œï£ô¶ù)5V÷Á—K¹Æ÷ò«™GÄçp{za7²Ì›cH²g„³‰·L¬ÏcÛ«,Ë‚@ò°YQóÑ?&Áà“ðÄ <4o´“ð«ôóxpè”Õ¨iÄJg-ýФþY;­‰h³ä‘B51WŠºgS¢/~,êÝã>†Ÿ8f­Q å„1!~3v¿a×M¸ñø¤¹ `fwd M˳>!Юo-Û;´jÀQD=àµgúÉÉ53.6Þ ¾–qCž>êc²y¼ó_Ü7ÃRÀæd8 ÿPTpµâåsý&ÀW)w©ÌB½º™^Ž%-À.Æê WJƒ­WoAZÛI×pë1kÃ!ä$Á:â[¥¤ w›§}rbJÛ¿¿>†PëYøHWYH˜]ˆ’“qp¨‡1yÛ¸ØyÛ‘eèÑÇW, .¥0Ç#ÝL¡\O.Bõ³ $úßmß•{Lâr¾Âq ,HÅkåèzvñQ- —öÚ÷{TjÊÁ¾LÊ’ãGàûlõÅ_%€*“úg¦ÃùsÄgzÒ}.)Ë&Ì %-w?þD®goŒ+FNÈóЉԤïÒ`ÿu jSÆèA„Æ’Ó¡~G‰Í8[ÌçE³ QOy£UZ¾åòÕ sèø–Âê-È“E7 _xȱê4ÌûœMfßPñéTMˆ“„®·eEBÓï·çßa/&ôàDfîþÞªÿUOó“n%R[Aò)c-ÉLLk™øƒ Ô\ɳØ6 3qK3:iqÀªþu<‰“#ó6Ô@w¬xªºCß´¨¼ðEÐC ~ÅÙàßb±=… `Â×xÎBŠ–Tê­¼_º³§›“T~ìÌíqâÈc¥ ÝÆGjµ+91W×.9ú3Å8›î“NçB·°p –Û¥Ž®ÖóGï©%g©…w.õö£Š:,{f~ý9b49S«^c®*jzšñ9qHÀ9BaôVÝÑöCãÖß0Ý{©gäc´‘Åú¤Ô×)ˆŸ.ƒ_ŠÎÆBi OåöNµ@(XÊúˆ;êeìuÕeÂÕÂ9;kJ.‚§²¥ébæ ây­¾ÜN–1 ‡b‘©±VFO}´ è6œ>Tò–øK­ÊœnÁg] ì$`67ÿŠÞ³7ô˜/æöbûô~ÐØ$Ÿ¯ª¦¡8u®ò½NK¡ÎB·ow|hЦƒr ˆÐUšÃü _‰Ññ†9´÷üt½{Vþ;ºø æ¤Í<Êæø’pXëöyYÿˆÖõZA6r©Ùegï_JWUSi ±yÓ$¼Ÿº“•H —uœ±ã±‹^¯Ï3eCÛL%ñ€®.¹¡âåY54Ìý€cÈô¸Uÿ¶Ða£=gí'Ù6ÉW‚žã‡Ðc kŽ}„“!‚Në{Í0?¾U_á„^ Ä”êOÿN…¢Ðié+]l¿öÀÕÁÂ3‹ríŠÑ*ð Õ°B*"ªø²M¶‹nË¿á:WÆœåÙ$~œ­'S>¿Û:{,×ê§Irœ2Û7ÊC5¨±e ˆmm7iÈʰëÆ5ßiB¬ñÌJBœ›€Âobu"¬7®K¢å­;×%pž\ûÌtU‡žÍ ‹‰÷kºÝç¸Ü’v7… £rÜö5ÁÒ k{Ùgøša? ]}B€¨…rޤPÎQ/hýÎwêÁfa±©Û™Ub£ÈgHXŸÚ$ŽÝNÖ1Ñ‚ æöSo› Y§<ù–Ó„€¤{ô›³4?jú}úVþÑÑnòM*2EW€g¡µ±¡yk–AÙQc[Ö¢C nÂpBã"&‘´õž»_1ó$~êí×ÒâœÏ  ]|E ƒ¥º q59 h3ñIÏÃn;“†‰ÆùQîÖ"Í> uOó,)@Œó´Mƒ¹ùA͈ôЭªõRÂ_<"’0UËxM¡ ëB¤ær‘þæâ'ƒ–H—,fª¼_”5óÍmx;ߣܗ–v éžè†ø@nªU.تS“5É#˜Ç¿)(kÈJ|¹ý³føö3tyäs’ïȬhd@t.ݶš£}×âÔWÑšÜÉ‹XœS¢GuW¥L¿ó0ÚN"¦‘‘LË¿™ë}¨¸žÛè¸=èÂSÙ™n„FGRÌ—P@¦…°Nïÿûs•]à—+âó|gÎü[zŸçââÂö”* ˜†ôd"º¢ŒÌÞ0A9"ýœl¡äÖ<P¶BB1èŒÅTùÎq¼YsÍšc {›D¡á–t\Vxò®<ݰØbìeùâŒWWtâKÿML2UPþ`Ŧ÷ž•-9.Î%HÁCiÂÉÃâÌID-÷óý÷[Þ†ê0ð[òíTôô|ºê6iG°ÝAI37Àu•žá§Z·õªÒMÃ4†ÃöZ¾¤¿R1Y4˜â}þ-º*Þ`ÞB}FhÅ`ö«òoç.¹ÝÛxmQH4æýÀ©¤K«ÞÎÕ&utíÚÙĪ Rd÷)7ˆ_Sá° N})KÎ]üçcÑ:°‰I µöÖ¨òìV (×ð¶ÑiõOWoj{–¶îšh¦´NžÞDSàÄ ó* —U-5`îyí/®±ÙZw UÒ†A`d+Å0ÿZL•º÷m·£½:±#4Céog-0&(|¾ž‘”×H²aðkÛÑÓ\rmYOÿ ë. L#VÏOD´+ÚùRV¬1³óœ’@eK€ßÂjVàÛƒgCë®a;¯Xöï°&Jq¨zÓ¦$ûsµbóh*ó±Ô$ˆï„eql¸ù6@º æ/õX·ó%ÁïxèC ‚3m[î»èéY4tÓ®mQV™IòVÓÝW‡)Ì*21¥žëeãšßtð,ãý4ú3ybÜVñnIœRðQUÞ ©Þ(mHp3zS6º3å%F™ÿ6,àßMzYkÔAcÛKÑCZdÑ–g &î÷À¨Pr÷Êõ¿eŒžop jiÃ0âQ°ŸãK(#Q[éâ š©â÷4ÎT¤È¤ª¤fu¹­•йQåà…ÎP&ðÁbUÖ.f¶Ú”ˆý:Ê÷`M$L¶Îkã°8LH.ö ÈÜóè°Â‚[¸_µ»WÒ }«ôD\Wu+(øqå…­àò2µxÿ~{&ˆè³¨Yc:"jÏPƪÍð"‰ù¦äWý¸ÓQüÚ€3bdfvþv–ì”h‹Çìª.~twÑu}˜<ƒ¾ìÛÌ9s‘Ez¾‡<á9ÃPΗĉ±¥8‡w†…Êj¥¥Ôt„G‚u¬é{õé>Ã>§ÒÍ t¼ X p·IL ÀJb¢ Ç(û×)é„\‹¡næhö!¨6Üà^;Âí‰_ZNoN_(K_Ê”¦Wo^u¨,@¼ 4¢år ¶÷ÔÒ÷)¸.b{„f1ùä FI…IÀ¼ˆË‡j0ø_œAye¶¡}èEÁ2¥Þ5†ì5¤HÀÁÌrÿ#2µÝ?mÐÃiñkõy]µ_9^df+ý€tûyoÕ\Ÿ&ƒÓí;mñ¦jx:A¸Fñ¨°Ødå]ý|1´}WŸnß)9ÙćBÄ»ê;¸³þ™Çaæ^Én÷ÑH.A¼š·a˜šÂƶ™ÞfY7°ËóEoË\~±´q eïEfëJ2iÒ©ŸØÏK]^Kme‰*É”5Wâè%ä*Ýf×SãߘØZV 2Ù„À- ÌÍw²³œSw¼S÷š-jG$-ùO‰SB$Få`•|¤¢]bÜ›¼ 7A s,â1»°6 ŒŠÛ]iÏm³Ù¸«Ë³}&ÓÚøC¦dòÿ-®­Ô_"–è|TgÑÀêi í°ÒEó‘Kø°yŽÞ‡r€S-a„²³;ýC¡|žæQ/IsØ6™ ™Âê uzO¸1!z¦NÌDÈ~ÅöDv.`IL&º(Æ~þV A:$W/Œlxg™û c‘47Ò€I3v˜xÀDŸÚûzÜÅ=ßð(a›¦Sù—EÀÙ´ƒ{>À‹ƒEæn†°$WŠg½òØ$¶éh· XNãþ’å˜õMŸ—áùæz œ6Šº<øF‘Mœx™Ér¨—]ïuw@Ö–r‚xŸ†`n ÿ3Ú/\̳úÔ3ó#ÃNiü<2Šö’®ÿHž½†nkÜù<–÷ùO•n@…²Ð5_žÂI7ŸåX6^ÜHq¹ã"—[é ël¯1 O С˜¹=¸F‰][[›ÎÁ7³ØýúhZà ÀÆÐW-vöã÷‡×Z|¬Gmµ^+ÞW[f«ûÙœYð“ù6(3anÀŠÒ°ïŠG6SHeîËì2)«‚=)œðËaˆ»²ƒŒj…¶•,åøUaûŸÆ)ìVs!Šš(9îlhËœQRPå¶@úËËhû³ TéáNÿ>¡ézWà÷è¿«N³ið+1°PuP6,èTñDÖ}3ÁüS‘xà»Âi1œFñÏf‡f¶"®Òaù»Ñ9ìnøÛìô»ªÊ¾ª6wœ(Š…«É»­õPð‘ã/EVü€ÃÓ¶%"º…ºý—Áa/4Ž¡µ˜¢ üæˆóÌ)Õµuv>œÈ¹И|8‹dqKj!¸¡J÷D>"o׌Sd4%݈m%¦6N0¶F8Úm;ÇåÉ2É?‰Û²w›+y¦§BK>›~/< „œwÈ. ®"#I¯XÊóD±`ˆ¾Ÿâùå¸îgçž$â$«ñD×r; ·É?Có¥ ™¼ù¼¤§¶r­êç§àgVp1ó÷FT™Æ…B)€öuÄ`Ö&Eì^¦Â ¹õºÊy6«‰ÂпªXS€Möm‰PÔùG•½¤™ÿfãò¡´<[¦e2Qˆg”¾Üò0¡?Ô°Ë-T  ï“~„0š­lýYLÏ(ôÒö£žËWÈÁÃXâî˜.uï·}ix°4çU/:­(‘Møêm±’¡ e 5Ã땤 ”Iì½Ç7 éǦ 'X±\ê®ßoßjÿNWÖBY‹N×|™³çÈ""g49ø™iÖ„¿è€ˆbkÆÔ—0í<Îð÷`¤âàxzTâ ZK>½-AD݃ m 0]ñ”lê`Ü9#ùóB|H{é!sµWéöê1æÇÍ T»nš‹*Æ„4ÌnM«µV#¤uùÄ›˜,ø£÷íGáçî/û´úpëôn·ì¹^å­ U® dà=V¤+ Ã¥m9§“µÐ¤ž‚ ×YëæJŸ`½F˜êZfÝ’ƒ³4ýôˆ½øËÁG.JXÞH,%"@È–ÝøeEìÓOF@/+Óø ˆÃ†È»\ÇówuÍ4`þWF¿ô1ƒž ®¯ÙFªÃ´ÕÂ^iw*¡¤õ²œbÛ Þ’5Óxµ—‚áZþùroG¹’X"˜›·\ZSïfØÀ kT§«·µùãÒ#¤J¨8Þ2)§CVÚ„i-ÞÝñW–XÃk´ܰv{¨Õ Ù½ò.,/¤ßjÝGý”˜â—„EàÇ»àwʤ±·¥(Ÿ_Û}¹KB0¢à ù¼u!},IN$ð¢~ª·S!ÅØb®˯/"tqåÍiÞẫzav'i±¾ý¹L²¼w„Cs甆—­Æ‰hòe]‡Ri<=l2g\ÛÞöeO…ï´b€ž¡d$ÿvà ]v?³›iØ(Z¾ =z´´’Wjv*Kå¼mî&äÂbQ€ø³\³Ð“›JǦ!ãŠn’ê3–CÄ’FZò ÖníäŽc—Â-Ö˜{ì’hrÑd9ª ὬªäBùL¢@}3Y3R²Û"r®šoœ¨V»HùendƒÎìu‰©Ö剆|O’½[تYL㥻6±s0ó.²4´þ6&I] éÑ"çïmÛ@P…ïûC‹¤B~[ßð9ùÄXÐi¡V€ÈB5ö>‚Ãå(—¿§™J]ꟃíwáèÆÕ²ñ%g©M“qêúúQÁ8ºuÃêÖ'Š`Ø_Må_>ái~ñbFÀ‚M9aߤ:Ä6MÙßSð5¾Ó T:jäû…¬Y…=ó¦MLë`ÆR •GÙ©X፠¢aŲܽ{àR$ xEëÅÆPn¹îñn]T_ÓŵÕ(Kð³:±Wük¬øD’ ¸´ÌDÜ» Usð% ‡t*fcž,N¶ˆ¥ŸY ÎQÜ× Ptl=ÞêþnÙvt+ød‘2’+Ez?íÿLE©v‹ˆ•ÝVc÷HôºDÕK$í‹ñr¼Á¨³ŽxˆÂõJI÷žÅÙáøõ«…>8 C˜‹ YŽàD4î{MˆóÙ[ºÊ ¡†è@½¿2±s¦PÐZÃ+‘raMÛ¶§\½×MÁ:ñgÊd¯°­ƒµÙ­ŒÕˆVʪ²H6· ä¾í›ë“‰m ðI£" Ó‰x*÷ ©Ñy¾¿°TžŠvB„0RJU z£¸RKÌê¡Ø´û[‡R ªéYZѦÙZîx´×Ì«®ÁYew˜ªüXlr> [Ð_ìYyKâ×üƆLa&G•DÍ.Ë·0Ø3ín{¢i,·†ÜƒnÜ£ýhÂìĶUSŽñA…<ŠÜ?¿ßLp4´VEÙˆÔ2µ½7­+JÏu×»Ñ!~Æãu.÷áVÝz^Wy³·9œ0žÁ·s.ƒŠ»úw×j2<ãÀÂ~š57N`@13l­.Ï´aŽú›ÁmCùs ÷v…|¬¾M/´ H%0_Åvw"‘Ø%¬¾(½ê#ÍÞ^¼«‡ÖKSÛ9!½©5´ñTÞ-k;DÔ öü½*¸û©Ââ‚K÷¢‚Š_ÖÃä°²ít\6:/W°œ?.ÉlÁª@‘+¡ÒC.FC‡sПý©Œ `íϱ4j°R^Z ‘ͤþÞ9nÕr=‡ðhîÝÈ&¥)]m…¦&pÉÆÒø=’/é^3-îúj›TÁ&œÖfHQS,ó,ÂüÓ™–Ø/]å&ÿogƾ£±À~‹bê˜)ˆãv½;ÆGã0Èð}¢ÿ]Fåò—¶Ϲ×Á¸¿V„ŠDÉ®‚8"ÏP곃ÊwÌò,ùšŸNU ¼ôÖí›4=+¿›}xÇP¹)éãÅÖ5Ø-B< /!¾-XµÚ½b¹]4ÂÖ)“»ûÞ?@t+cLb¡…£0ÅŒAvÐÞ"pÀí1"jÎOþ XÌŠÙhæ5gãµò]¢©~†‚P!tWΚÿfü>[Á‡Ì}KÊÔ.¼=£QdªÉÕE0 +¤­6`¹Ô“+lkîKoÞR:´hOP£)^ÔSZ/ÂÁäeላ–czr'ðyŒR6å†U¸ä·.ùºjÕ‚¢VæMGþÆÞ`mgo ?ÃYLŒ‚¾wÙd¸`JkìçöǺlÃ.Lñ¥¢g£à€žûQ¦Kÿi‡:)uõ¡Är¤“œêÚv…:Þ‰Ù¼ÌßoWö¬­Â0¥Â~“õ|æ9øçàN¹=î¦@Ð%q@ë\§0!èÔ¢MÞt ­¡ÛÆ4KY óF¶8y-¤ ÿƒO´‘M¾ÿtÊ`˜l`’ìOÆ(™µT@g­×À¬uò¹‰:1ëû¿Mìâý%þ4_·\ï~ë¢øTÕ”îÏ%{}[ÊšÞ@4ô‚ t¨9¸3P’Á­è/¿•†`T:»°ËŽÉñçsÛ±ÜѦ§ ÑåÂsœÖ¸áÍÔËÌ .jìtÃD²v Ýü‘±2›a¯oÜœ²ÍÐØß%XÕÀfÂöxÆ&'Z5·?zÿ.,: v¢RÓçaO<øÞˆ3Ô•_U¥£„U£ëv£n!þ<8 ňn6¬·ðß5nùµ÷úu×êÙÕdÏŒ×êÚoÕWÿUqþ­¡ãàôéïÕЭóï?Õ«wÏqá¾j‡éÙßéÚŸ«i§Ç¥cáRùûA>Mß>ƾ~Ìqð >;¿êè›õi§êÚò\ø+ã¤þm[¿6¨üý‘üú^|+þ~¾þ}#ß>ÌýZß§À-ò\ÿ+¡ïÕxþ~°ß%¸óxp½}²~ck·˜áº 1H¸¸;F}(¼Oñÿç>ul,‹ÝwÈ<‰ã—·¿’Q°¦U–ä²Ygf‚ÂzšÑQ-ú9s¢ß…¥Î¬ÇÚâ8 oÛ®bñlŽË0O«pߦ/‰2p!4©y_—á„Xù;)„¯$zø, °x³öþ°BŽÛó¶Â”á“ä‡XîáÔªõ9A*éâ¸:MÈœc½2„žã²‚“އœÎ(®¢îAÎ×OøL¾r††{¹ÁñR«W¦B àm×jóëqÿ` ¦â+âºvØ]ƒi7_~Í< Ë#ÙnK‡@Dj>Ã^VÍ-D–Ÿ­x„fÀÙn3'£—ñKþȃZÖ˜Ê4¬ÇIœ4¯9"œ‡®QysLh£0aqîCù¬µ‡ÊƒYU?’—e¡&@N)eó\ý|dŠŽÓym;™™âýxSQÕ*]Ðmû–5rG§D AŽö1¯''Kö©sڈʕ^ë[ñ+…®Ô9lÀÞé^m[$æð¿ùÙsz"éXÔ ÔV‹Î.¶ßî{Þuh‘ —˜Â˜ŽæŠ¤·è25´Õ6…ÇúÑËqÖò=P¸úpº@DéZDš„ªñS$X>V5=Z¸Í;^#ØR õFëD`o/&Nl\#ÝmHLìJÂ(üÈ WïÚo™à’† MæÌ0î(í·Zbn¾LÜå&nC'(N›“`/„ƒŸIÃ\ˆl™ÓCøüªúõÙl7À´X.Ô›®+N–}m·=›U³˜:{ç8•oGOâ9±„z”ç˜áÕ 7#²@ˆZ»ôhØÇ2nEEÜ›·ÊFÓÆûEjJ=Š|-  þøXG<ëÇ;Åÿp?9rBâü«êËöÅÔpkW7mZ;$º"¦:°Y¿ž–_ќã2¼ŽËjX'ÿéÍN“îmPÒ«™g:õoBzš#äh&è*ãý‡Ì°F6Ù@ÃÌÌ‘¦™4Üú¢ÓÓ‹¸þ¸âEê\½þFš­„…Ÿ"Ê”äÎ3 &Ò@ˆ:à¿¿Í„7jÃÁ:úX®.W3Ož~ߪÐ"=¿Sޤ£•cƒ{“ +bº‘…¯KÖÎåØ  Ì«ØÚÊÎ'yZ þĤ¨w=g¹ã,ç“Äè,€sø¢*@Uˆb($ôÔ TšøL³žZ¯áNnúªÌò5C`øžÁÄÁå7âè%,~S+ç·TO§æÙè½Â+Ž ôi>¬øÊèoàÓÂzCí‰ÝçX/³ ?Ëòá_¥_’ò¾·’¹p‡Û(](Üu¢­* 3`HwPFÛñØÃ›ÇÜE ÐØûß^QÞаš5ì^#˰´ÄJYoêÙOÀ_ÜS ˜× Æ$b}ßÜ?ò$lè@n •¤¨Ó”'¢¤Òi‘w‡óqzaY|ôB[ —ùj?ï¸Äê½W/jïëð#*T†&Û]kJS]Vg—b”Pùí‰æ4£¼·½ÊòÞ´{p»zVcòU˜¾Nº¼3–Œýý] Ehò®³ãUÑ×xO’jóôŒe@ö¬uçN@Wná­ôhY•°Æ0Û ç£ " XM‡fúîA#²¶–ƒ‰¬ßóñ­óËo]ÉŽÀy%ZèEöùJÛ‰Ÿb;œñ‚«ÀÜ2¿#M£öé'¹uûP» Z]ÜóQ¬¢<-,Fî55‡“+¿(àÿpÒfÄ6)·r”a‰çÀëÈwÝï~0‚×3kg¡†$¯TY@`]‡PG¦<šV˜àìoC0¿û¾¡»PÛäæulìÊwÆtV€N鬵þ¬ÑuøŒ~ÙTÖÁî%É?yM U !u¾/ÿoÚ¾îÒ0+üÆ„ìmºrów®¼&³[çË[ñ ô¾Ý +HØRo3MmýŽÿ{ûW†ðp2~ö¶·i²°!'BáÜÉa“ÈéR\Jt¼>ëœüEñ;oKMýååÿ¹â•ÍVD‹œ@#Ïø1Ìe! »áº?:ëxbÜL Aa’-àgçä!˜4*l߯Wò“dZE(RPHœ©F¸Ô-x3éÿ0ÆŒ÷>¡ÕûÓy^-ƒZ ]›O„J\Õº–6nuÜb6â^\°Ì ù­í×ßìÿr¾tçæbú”»dÓ$則‹™Õ”mé¿5m œ‚ï%¶%SZ¯a”KÞTËËÓ,þbÆìCä÷:Z¥™ æª|šK.ß {ä˜`–¦Çî…½À&5ïŸ(Yo>- €¤ð+eét†[ü40>#þ»Ý6…(tŒÿÀñtðs}HÐÛ¾,€[Óëuˆ©Oøµ-±zä~¥|ËqJîØ½rñùnô-`F|¢2Ãlà1–\³OLÌ“»X´ÇFJÙÅ{¢!{žÕ"U¥¢½/4 &3Ä–™¹è*L#¹òËÄÔr3¶’5Œjƒ (ˆ×…?ïéJø…Üi™û¨¸Å“p{ Ï"¦¤Ùû{Ãu¯n+½ºôîKFe–r\–y6yÙž{Ö@Qa’O˜Ž ªuz[s#nnåûýß 0§Ò³äÄH"|Pƒ-Ë_ýÙFl÷ß ®J¢a̺Ÿ K|_»_àaXíÕr z(Ã3YªG5!Ør‘NÆvV~/(Q$[åûM8ÃoÉ0”GŠ¢YÞS;ÓØpƒ£ž­AzKÕ¤BHÞ2nPÙ9[œ$ O†íÓ&K´s‚õ³,¯Y0!¿[­ãƸÖë^LŠÍÓ)õ­-‰»…ØÇ=ç`ð•ãм:xmS$ÏŠ¢¥ÒçÑuZ/fè_Ç‹v=GV²}+a>cÄ¢õwçPÑÏ…VñTÊtØwP}GÕá0M™œI ÈEn»æšaiiðð´ÙPÖDAŠƒ(„Å<ý™ÿ*lÖÉûÒ”wj 3ïJ æ°È7j!5”ïdåO»æ~ÏpðJccNíY(ˆ­ßWé¼Ëöñý–† ©ß5W£ØÔ=ŒÑ¶™gƒ +‘*=vø¤ k üÓ¿œÈ ËÊõr„V®Ø¼Ú2tžé·Å·û.¦üRÓm·Ýg™Ài[æ;Võ>Dd:éø$»5R™ENm?ÝV…Þ–Ž{7nŸ;iØ}a2"‘´+Š­fÀ©]ïÍ_Vu ªŽ'Ïej"ÊÉÜ çŠ3Ýæk 7ØÄit7ŵyÉ2ʘ»·>Žâ>f?ùÁé0±”_&ßãTÚª¸ïï­»gŒ–K¹­ ×€’÷9qôhñN èÖ×·|!ÿ:¸ÂV}Øëvhž[êì>ÜÀºòÏØåÉ}®è À7säNÈ<9ùAް­ÅùŽ6’gS/ÖH¡u¡_ß;$:àIVAoHú|â”m•µ •èhnߤá×G~ðZëüN.s&óÅúü·±'žóúÅP6Ûâ‡ê÷ˆ¹Š ¡eQ~R™㼎ˆóÍÛ‡ŸäÁÔÂݶ?«M“4pñ°jYÔÆ‚â,ÚÓ’1z+F%ª‡@>ÅŠyÓPÀ„ynvvökÚ©g¨ëúgŒø ò‚wfÊLc`ÙàÉ*kÍÕZsÍ$”3jæ‚[C¦V(.¿õÄ™OA=•òs’^MÙûlsŒ}ç¾$7o~â´Ž _÷ðÜéÇUIRFvÀuëÆzº´‹~ey®æg«¯g_V\î°Ã² ²™“]¤lâ¨)?­¢Àú^èî'ÔI v_¯À¬² ¡ÃP<«r¤þ¥h@Ÿé éî*³’Íúïk¢ÎUeì’l£×`…›å¸"æ} ”ò–>ø¦­¤ê„ü]ˆÿõôšÃ¯É6ê*õGVòt/—ÒŽ[oáêÜç áÏD3h”8aÊ~)®Û?14³bNÇuÀë󆨳ä¨L²%FˆéRoÜ62V(ä;ç~{x«‡üL³Iiõò5r½aÿzѺÏvù‘.†ßÙ2$ë½CéÐÀÛZå?UZs% ÂÂv›NÇhÁý:Ôñçp”hIHÿ}t¨4êaóôðï®y7ð fú€¹üK° öQV¡"ž!.l™©ƒšÌñ{Êr¾>ÊØY<·\ñ;jh%\ø#øaz‚¹„‚ïÏAð@ }››¿•ûýœÛŽ› —F2¼ò“ MÛ¢ "’£Í¾ÞmO¤kž…X™ä>ØñZ§/${‡k~÷eçj¨«/h.˜ì%}æŵr~5s‘új¸>ÏZå_seÃ<"¹­úFÆ”<Žÿ(mñËqôpìzó€é ä¹t˜8æÒ/¢‡»D—¿†ìqjC·R‹ÚÃcVBG“hxÔ¶û¦ÿGФDŽ9ôÉ͈M!~ÔãÏèþtÃú1™¦Z¼F÷¢Yx¥;q`WëºÕì¾VØ u˜UäÿI@Ü6úu þ8Þ¨Šá 9Æ’>¹âÐåk%êü®çαT»èE×¶,]dikæy·ñÍÃÖq”Îã˜kñ“€×Mú(˜‚@VÆ™Fçëƒ@¼BºaAçK‹âê¿Þ¡eœTß«^»éÜ5 ë‘;‡¨ çìuøl«áMòއ¡vÚš/±̕*d,æ@¿‰ã˜¥ce0óÐùaV˪³QCŒæ¼KÚ9s4uì‚kk*εÅ=iÛô§ôm+)ÇyÍA +®s ÞßmÑXlj(œ©¸µÝʲåpÄ\ÞRxáäc„z¸Kç#ê>^ V¡¾ßÖ5(­ùñB'Î¢Š›W„D÷wR-ÈX«ç[αQ‰ ¦Þ.”#—MDfw`D©e‚‰¤YIÒø˜—LÛìà ·-ÈLôqÉC½‘K›Ü4´‡K‹e¹}CWèÜÑÔpjçƒÐ£¶,äÛ¦,‹3Ûž¥þ·F=-!­¿ÞÎúõï­*Ý­°Æ\$جA¯Ë »]¶ŽñÂnܨëÌé<Æj<éèzZ;F´µÔçãmcªÄõjõS¶íyÿjƒ{nCIåâDb&&W%0–Ù’Å5ô¾‡3gý†ŒA ˜i¬æõ÷;xE už?*属¥~ÅoðO0±„͆ò:( ÿ^d¯õ§ähÈlt «ƒÙ 㨄ƢÞKs&ØO2&+À–Ù ûׄܯL,Tˆ1|{ˆ®Ûq(…—ºY¡«JÍ×z,þú‡K^ÛlÚ5jPV©¾ºHA_^¬FV_¦røÏ÷ZpžiYm6¯m#!Ä–çƒ÷‚p5{iõVr Í4¯ÙéË uêD+:Â)÷wí‚íí+›@`õ#mkÿ&<Ì"]!"û7V‡@­ÉÊ¡*ÊŒe_º%%õLíì”N…ÖYÚ¢¶ÂÞWaà/àJÇTbØ/ÿ×ÖjD´‹ ¾S¬6Æ´> u/D+ozò…$èæK<„¹â4ê‘…¹b‰5ÂTç Ï-óMTŒÒElSÖסSÕ!@X«ÓC GºñêÌ®&[<»uÑIE˜{±b3ßwö£b …[ :ÒM%¶T*õœèê$¤ÌàIì²4–¸ Ðú[•ƒ‘_çL°Øú ÍÏ¥Çq±#¶BÞ® B“‚æ!ÓÚ•o<å½6Cëì ¹­hU£âój¹ÖbQôÃ9¤«£PøzyxË*>Ówx‘øÏÞ™ygäOâ^9‡hrO¢˜_a2mËÜ30ïy¾1Ϲ ²Ôò“¬ŒÐë¯mF¸cî®VùvYƱ8Aî0@k›åÅ(9Œ_6ý¼Ž ·ð«zôl8²ˆ¬!,n6ßÒ€ÆùÍÌ=+—õ%ŒÙwÙº½^ž¦!„Njoï2ÌÙjè/Ä™+ÌP8³® "ŠõËó/7nË”ÂA‡ÿ `kL'g-oU«‡.¨¡ˆ×¯ jëÌ0~¹¶ø@8†…Ù/xvÍwYnÍ•è¦%ÊXŸˆVüⲑâ *ÉÙ×½NVð_f[;%¯u$0Ô³ó~$ä-3=ë°` F¬p“yNB!v[}Åü5™•H§ÊÄN…Ò(aÊUŸUÖMN/üýÚÀÐ)dU©æ"6±Š¦ñ«oMêòVºH²Â#¯¤ñuþ8ê,áçÌ$Kü:lfLjÙí–|¸2aÙÀj{=Š Pê"¢-޾0ñ•–‘Å2~¯{H-~ìê/ÛþŒZ6-Ößȼ€ÙíÕµX:€òIÂÞ€çÉŒ:ÍX…$¯†2I–ñ·(\çöüKkÞ•_Ãd*vÌ—öÖ”J^2¢Ìa IAa½ï°{á¨ج’^5[£Øò¿Ì r'oÿ}Öeœ$°0 CÞX–#W¸f“·òW ©µ)qçØàk™Ø¹”0é+Ý}$‚‚à—#ë¿–GM—¹ o˜ M0ËGœôQŸÑª+%rÆØ¤w¹þÂ^¤#f • ql§agËî°²Â}ÓÕºêï-:·?_1ÿIÉÝy¸Œú®Osª.+É&·BæóC¼P kéÊÈÆÙA°/â¸l°rDCSâßnƒ¬1¨p‘GaÍ!ãzéV2 2<¯òC;å,å×C4jâª6Ε¦ÉZ9 3«¼e6¹¡­8×cŸ-ê¢V›ÊS= ÚæB³6è   (¿Ãb^c¡4ÜQ©Ö˜K‡QÇàY÷iV5Í]á}oœŽO¶‰h«\p0÷ÌÚ6çZÌŠ2c»L¬˜Áˆ­ ‰zT»º"ÅN\W*q?ë$™œU²vÒnéj™y©ôu Ãñ\ŒCP%¿#Åêë‡üX!¥iDW…—{çªég&¡Œ·Sm ö¬Rê/H•[ëw"åU ›2—h° øPU’ඪÃ{¿hQj‘uíœÔy[Љ‡Õ0ús…hÿxú#š°ƒTcCŒ7 ‡<Ô R “íªØHâÉô\ùïFAÓ‰´_JGÚ8~EÐkå‹D]ÆJJ Äð”³u[%·bй¤+$\¹­ºƒšlÖ¿S`X­)jlF’èå‡ÌË.Ù`™$ ^©…Uêôñ&Š€„ˆCkøú,†ÛtƒfúßósØÌZçÄX_è;²j9Ò¼uþ°{P4Šz¹Ýö½òˆCò«^ ¡ë1]Û¶‚ÒLŠI]H¦Úi_›t`¹Ö:M;è™s£dèÂÞÿUH&‡Â½QIÕçr_æULøÊ' Ìl< G6ÞPä5â’ñtÇ%J+okêHc#ÏÀzŒ:iR ^ i×Kuc¼˜{a¡±Eó5B8Ei×oÙ¹5‚Ñ$GœÀÿ: uÃÚ dÅFbBNÎãèQÇÕÕàÍÇgõþtX¤ ûÞí%0ßqF ?‡\;¶½ô[L1üj…“N«˜yiÔF!®_øLÕž¦ œ¡´s“²Œ°á " Â%ágç _Õzf¡+¨Ô7ÄÇ5|€|iF ‹ºdpý£è¢¦šNÅr3§fr–æMi<ë8ÿ?¢£pÌÙu £i}¼#ÿÃýe±ìô\´¸ÆG÷þ@üzòõ°¦,Bšø½P lx@±úþß¡ ¿ßé]]J€Ü JâcУÅIæÚ•úÙA½S]ÌÀ¨ÇF°f î>ùÅònXAσý*ç˜cA”>àí¾ûˆ;|«]¯H€‰%žhXÛBë›ÈAï3p‡TùdAedå- à6´\Éái\¼d­±£[ýqïYLÈï©5^‡”š>»ÝcúúdÂT?;µ“0ß\7”ZfèRªe†¹1è$K(¿Ą̊g-góà¹)@ÁÕ“ÏAi¦ÂÔ8¸¶2¹™à#Š|®À§Q1—òÏnYV ¢wK³X—¾¾·™yÚòÇBÏI‰ÄyP7q[Ï,º¡Åwû+´‡ž¶–CRÎïÿ?¹µñb3gA²%Iʬ4^«ls^Ý€$|Ek–‡®•œŸœÊ;3”¢;b«Œƒ¦ùmÛ³›¼9øK¡"Æ· ÚÝå3›q-)†8ªt?¤>¥ôH¨Ä’—‡»â“ûËÉt)næ’Ìúû„ÕX9°¯ ƒKOâc5¿-Œ«‡ÆÅëÝÂcá|ã çž&µÏêýDÉgÌšÁ“wÕ#[ËÌžÞÃ-®H‹i€Ôhô{”¢•5„6ÝiÄhŽlœeÇÓÓÎDKÛ× ´dM£~øØæä4ä®<¨ YÙòZw¤Þgaÿ®“ÈŒJËø‹4/Û=¼¾¤0Ô6M‹#±†…ñYµ ˆG:ôÌ:BÿUûÍÒSÒh_J– /­Ã¦!ðˆx6¾O:r½¡«@îª15!›!»nû£¼ïÿ:Î@ƒ-¹Cœf¢ªHS÷cõÞ !À¬(žpš`´X1œ*š]žaÂÚzî–°*öaÞiä·‡µí&rƒåÄF„ãUÌæÄ4oÀ+ÌÀê3«¶õ¨Y¸Îv&,«íwºÊåPãkéÆà4[´HŠCå"HÞ¯ Å@î"¢nW‰|¡î_ëíHS+@ƽ?M ü­¼}/wyÓobe‰™£<)k AA±Qû-[‹ “fNZ,´§ ¡çxéão{²\\èQ±ÀBšYV~¿tˆj†xUuU*옪)ÃåÄÍtÅ˃Ô[‘ñà¯\´¶êîz Ùs‚£Úèb‘üNx…¨rBé¿Ûª«u“Òþ~ï3€?ÇêT‘Ô鼆 ~Ї“a•ÿ…~‚ÜÈ#6Ž ôN?ŽEû7dQüÚ}[›³1ßëo9Ìï¤ÃÎiÄØ|; N©¨qÞë…tƒ‰sÐøíçÎÑ+fóz=¿`›ë°0lG‡ ç7¡Üøæ2cÜû™EstøÀ°Êm…›xOÈœ ˆ+6& ÅõH9Q¥ÙÕ€5OäXCá'˜ Št{õ$éDŒÈ¡å[CPÀhu×è4°*ËPÏAÍqnBcsqM[HÀb§çÇ—ÎøQt:v—Æ&õúx Àí*ÃÚÒ–Wµj€XX4‡C†¤á¶e]ngV Y:%‡4× öì'M¾ÔÐÙ¡GìJ,ä½^åK«‚ÐQ…" ˜[7k¨EwjTÎ#&$¾QM_ÿ?+ÔÝûgÇ· r·IfýØ^àÑÊÐ?ŠëZ´Á ­Ü'6Jä#:¡u1‘;™îù®ò‰ Xl7z]•'÷S¶üAí«RN2·•Ó¨t|›ŽGmþâ§:œTÃ[pþ›^°ì€ù/Õï. —ôÕ>ðÒñ¯n:ã,fÎQ.þ­ç•‰µ  *V™%zïZG·M]Þ*‚Í]Åiïzg~C>õ)0.ߪ؟`|AyæÀ‚³}Å…×ZÓÚ𸧜Q†Fm¯k7¬gb]2‡Ñ¹í³íîKëg«û ©ƒårlßmVÛ½B‰€Ë ”1µG&êa«šâ÷¬a¤‚%$v_ýœãó°Æ óÀdÈ]Ö?%àÛÝA’)à €Â~êõmÛÈw5|%J>øÝ8o[áÈ«èóÊšI/míh³³ÝΨÆÓ>š.tÝ…²1”•¯Žâc ]%ºlNçDÂaû*-Ìf…ì9 '¡Ò¸Š­0HåÃx­+aØ”ì+uÙj¶åŸEl¯onáÏàà‡Q`>í dÄ®VV‹i„þ7ç༷ժ¼íÉhm2Ùþ®#&Má¯rzc¦DÆ ºcÕ'ûÐ× r!4…xÏŒ3Sï–)Bļ1ã&¯/1‡P¸«!…} Q¹Mÿ·4óu®nOU_ûà˜«f‘-ÂßÌþgø„_…t?áþ%ƒÎø ²Ë8Í#Vˆÿ`s Øí"V‚ü–ÜVû§p–6^=¨¶ µ'é64ÒStIèè/¬¼÷òw‘U³ÔQ +Þ5Vç pˆ›ü[.]¡´9…Àü\4^ç)RÑû”DK5©ÿ†”tûf‰U)ƒÆÊ‚ŠšÌô1/™™â‹ÿká|2¡Ëð­ø\NÄ’"ùŒ¶æK†~Ÿ&TZ,Sð›€Î¸c\ ]=‰å÷\¡ón5G0¶ü<ÿ#¢njÝßôèQ-,6 ýႃÊ)Ì;†ÉÊcú8Õ?Cÿh§z$§KäêÕ<ÌgLÕÅù©äÕ/+ŒÖ{k@š(T×QT))¬°K”wCà¡+6¸Q ϲµ3­¤.\ÞË^ꌇ9oÒ›ö’žŠå†ˆUùÈ?ûg¥Ù:6·‹{pT«§‹É±Qäù;”½­Ô™ƒŸýf£-e#ùÍL¤zJ»Z°Ü9IZâ¶°u‰aß$¼nÉ]qvÕfÖu•»–`à`«}š"ßÍ…,g^øÇ9¨°=µ:ªØ¥q‡a{ìI œËO-KD['ý¨Œpã- ˆ÷<âz+€m5¿ýšYl€.ÕjM¤ñ‚PcgJ–ÜGÑØVÉèM8á03;=ѸPË’ ]Ú?»IÚ²îvšŸ Ü’H®<ý.…ÜÙ°n5 U¡9AI)>gAuÈSð®¡õQŒª69ÍžüÚ˜Í, TŒ3ò˜øÞ#+b“ŠƒÔ¥r:8ø Ƚí.³3ÇÁ=ìE„ðBB*øõ5¾ÎˆâÓNØ¢4–oùø‡üvtpâ‡.>Ĩ Î±ÞÆ$²ŠLê¹mÀÎß•9ÅT/°`åJ\ßæ+ßÉ@˜•]5Òz](CF½Î={ò«ÏÉ"@•Œêvö64烜D§/­É<’@ÿ8 AË@šøgíb« ó`üÀ^áå¾Ý©\Ñ[øqŒ[£ä÷/ϼö}çÑ÷¡3ß9U‹Ü»VáßDuÉ?úæ¤[GG¨F1æ’ !h¾gˆÝ´g/™ït›Üx¨Ä;¥ðžbzórõ€ì”ÝÆ6ûôÊÓ©Þ[`õÜF‚dÂ*ùJƒbi&Ù¬…RÍ©ýÌ<e© Lúªê0ÿRM7q1ZQ×Y‰?ŒÐøþ{ LCËÍÞIÝ*ŠpiÿZZ À.‘Ç4(]ç|À0â¬Î㞨h›Â,ÕOò~´ñ[úœËr¬9«,Ðrϼò}çÑ÷¡€3ß9U‹Ü»VáßDuÉ?úæ¤[GG¨F1æ’ !h¾gˆÝ´g/™ït›Û /©“ˆžéùì…ƒÖ‰Ó™U36ûôÊÓ©Þ[`õÜF‚dÂ*ùJƒbi&Ù¬…RÍ©ýÌ<e© LúªêJ Úñº7q1Z3RÛÁÿgŽ„Äè8„‡bwòîâ“è©Øú4Ü2³8ô4X©j'rz.¿År&Ôê1=X".¯´ê¹yEAŽÊ¹¿ðüÏiÃé_at>ÃPÌ#!ßñŒùov…Ñœ"ßá1nØbîîÏ«)ƒÿvléò$œ† ëŸÅhk E“'y . ¤W`0?lsÊBš‚’ðÐgaÏè€Þ:GÌ$5PÎèèlRaĆ'"7.œž5{ÔM!¯šdqü¯-Ü1§ÒüìPœásèÿÚú$Ùˆ/A¡ _DΈ›wŽ¢-¦çϼòü§ä„Ì$>e·ášÜÛ¸ü‹8** jqŠó˜QW…² à•å”§žQ èb7ô—ç8ÌY/ò?ŸÕOHÊňžÁÎ2|ÿ½Ø“ ÌÕ™›nÎö1@ÑOõÉÖõJ¿¨¹=q¢P П¸>ËÈ‹ÌÂÍ!Ð<¤5fVät·ø/xæÂàt{Jâ⦡ÅlªÉ1KïÙ¥Ñã@Íûå(z­-í¾øo€×Ì>_ÿc>r^ŒWf_Ͼ¯Ÿ}e?*Ü`¨_1…Ô‡4V©ÁhŸÚ3T©àæˆã‡jØ…³Þ£-§¡ž~Îâséºîd¬t‹öiOìN‰§—-V éc &x…=½§ 8ޏ9Y‹ éá¦Ñ[õ=Fé„Pß–þ©L~ n1”×hÅßî`9j›ê‡ñ¼… Ãý.ÊÃáÔB‡îó?ìÄè2Ö¢?tÜTÒ£ h=6û2xÁd³ˆ„PÔi–¶u«%Äýûs‚ww‰h ?rŸuƒrâhDæ0q³Ï¾°Ÿ}g?*à`¨_1…Ô‡4V©ÁhŸÚ3T©àæˆã‡jØ…³Þ£-§¡k…Lâà› ‚Ú*QòîwÙ¥?Q÷–s⮽~»°u°ßç÷@s»Tðhã°miĶLö …¾ŽQ¿WÝM)u×gãÄLÉO?Çv/=ÚpmÀ$™X#šN&sþ r¢ž€ÚY‡gƒ–Y^}~u"Ÿ$5A•µ¾ ×ùûŠŠCçÎYeE§¦®WY\ÝØ—Á"‘²&ÃZfiQ3IOÖ3»±¸|ygâ›Úßþ¼ ÃÇCk=C#'‹*Ø%3þÙÿU™µ³g WÚ.h¥êè™72º&޵¾ŸÙí[@ÆV™’.vÒl…iS9áF/\iUØ ÐÇnH&é+€ItæøÅÕJR´a§ú‚ÒŠ•æ-ˆÓ-Éö Ê~«_2 òdÄ Q@£™Ççù§Ú„%ÛÓçŒýµªrÙÎÛëWuË(é—{Š•gŸAQµTcê(t͉ §3a|š}h0&îþŠÿ€¼ÊR‰›÷¡$MGLÀä8™Óºäfˆ„²|U¾½Ä(©ÔwÓ)R/Žrëp{!ܨCO[Áb&šT<~é%¤ukÁë_Ç…3ߨÀÖ$'¹]i‹çT=ôÛ'fPè‚Uåno†îÕ†Ö%h€wi¡O޶¥ÄæK¹ùÚûTøÙÈf楮P ,ø¨“ÿPò£äìèù{ –×0­ßSó–ó£ñl5ðÕ5t&I·ErO1 æRßúb½Ä|’mfk¨ÆŠ¼“ÀSeIFåÅÓHD>ÁzœöB¢öýèá¿ö@ ãè™Å…»´HY²Í~…0ñ¿\8'Ìék†‘3“#!I—&v·:Ä|Â@µC‡DþÎ9mÖ‚°Pï©÷}Á§ão¶>ÓªcåˆýpÉ94™Jê= 䔨§iØöÔ­ðwžÁâAbˆÁqça¨¯gEVdÛ“Fm'©“*ì_¶Ä31%g¢¶ó;3;#C$êë£l…fE5oª¦ä¡TçËQ<'lFóg3qD…é“e'=„¬4Ÿ„ÚÎ&„”ýCפúvO¿p=PÊŒ¡JNtyK3§®±¥ÄRvêæ²ìsf½B3œaeØD*+í¤ŒX/oßoèå½UjU`Ëž}p£§†Qtdäù‡š.=wÈ •ªÔ̳"–ÃpàQýÌXY¡*@ä.Qÿß ’…<›ù¯çÍm:]Ñé¯:~¼8/ÛïÉ“`—(©àk¡Áˆg/#ÜÚß9ÿuIG—­h…”ã?F²® ù½‚‰/[=Ò¦šÒ–L–ù¹3ê'"?9ì®å´þÙ4¦€³9Ïwl{BpȹSJæ}·¿ÃDIà8XQçPt&AÿÏÃr/Ïwgç¹ÀÝÒ”|Èc=[žKoîàÍtp XI@uapõnŒVvûHQeJW1øÂŠ ¯©h“¿"°p`'‘õ~„á™+óöé *0ÌŽÊéŒòz0 7§ØÔU±% ô¶à³J;â¿èü×®hn÷ŒÊXÚ[´¡ý1_ª¦ ÞRxß×ä“»Q+q?ru¾ï™uw?¹šú° Z';P¼Œ²ä 1Ѓ=§ht"Y+¼púè/Õ"tÀ€Ã–A°"Ó ]ËqŒ mFä(-Xæë½4>œšæÏõç#yž²"|1e!Ï>J_©BO=5ÄÂHƒÝðêœ Þì…ŸxX,è-H}ð~ÝCóÉŸ²1¯–¯èyãÄÊüð‚¦M_ìEð½×–û4”:gДY¬”E<íÎ’'YÛ’.ëñgõýœV¿£p]9B/¼Y}~üdÙÓÌßH1Ø+\âÀñÓKá¯Ì¥g¶ÒŠò*8Ò‹~~Ç9pw¤eCË…—°¸.á¿YµãÞÝÉ(Ë7Ã}ÿd¾–®y°wÏŽÈꤳ*WÄ:ž†ócÑcåÛoùÑ÷«dœpoôö‹L[ù¼A²ù0¥Þ°™G"  £>|…àh,¸Ñ±›Ñðˆ¤Y?|Þp³ûþJÐQÇö…ª4(BÝw)‚u» '.ŒyrIΠ˞ü1¬¶ÈGRìéÈ<Ý!iQINˆ|2ˆHzE0džÏB±ÔJSW[:¬“˜fÆh´)S5@Â~¸C†ãþžØíõ-ZÓ©â!n†ì‹çöÿf§oŠõ]ï‹°éø(ÒDɱ¢ÀƒœÚ+† -˜0WÌSè9ÂRgÛ@Õæ×ÓãRÙ÷Cß¹¶ 7_üún’D®«ׄ¸ü0ƒJfG¶¯ äóyÈÇ;ç—zYšF–dÖ¤yó‘é罤% IDÞ³°gºrEñ(¾½êðúÎÒQ’,äÙCb1¯ÒP$¯b°œº/yd!ËU¼7çLÉDÂ^NuâI'<óÿÿ-AE7 M!„¶y‹ß`U§‘j tSÝã‚^ˆøZ™‹:Ÿš¦i£cl!N¨…êùz÷Ôo|Õ”8Ñø¾6+@B½ÖÀèÝ;Øt'õó©Q~ÉKáŸþ¨´¥ïGŽÑ*¿-­|søƒ®;ãÃÁè¯vý‹TyxgÖàVlýÕ È$Š¿Þ‹Î“Ú%¿Ièxx`(úò‘G[? ‘‹_[Jb.½ä²†TÁÄ“-šŽ+_KüúfWTÍZàÞ«¢`piF ‚ñžÐ˜œ ФÎÀµ^_}¼5ôô¼M“; ^ßG\ÿHK¦=i°‹¯WŠûÉ(¸)0£2*6†,¹>¯HÓsöñL“×€ßÉB ^ÊCL¾€Š+oi?;éÿ,ŸÜØtuÕvÔŒ”4Òäs#¬#éÚp‰Zˆ «Aá JÀø.)D‚ïR‚pxµÚůµ=È(ÑŽú‚0Ê“¯œÒ¸2…_ç”Æ+pqxJ›w¯¢YþN0³¬Qº^ÚV! †¿€&”Ÿxƒ¼!±ƒÉýÄ„øµòBeâVY.É릩 §áÉf~×>p¢‰±xŠœø»õáñòQm½H‚œ EÀl|›ýD©ßȧqÅ ¨gòáÜã")Í4¸·y_vsD^ó€ö™­O*clî2¡<‹uÙÌRµ\ Éè GÒûÁ¢­±ojà·…:?|A­å ÏÃr¯Ïwgçº@ÝÒ”|Èc=[žKoîàÍtp XI@vþW™•̶Q¬§ ¬ïÒ¾×§B¾–“GåÑ3Ám®hpßÉ cx¹·ôÆþ9ZN Ùó»_8µ@T1Œ·Åz.æ™Q6Ã%Rß—Evå1Õ$8/æzùèVÃÑS/1-¼îeŒ…G]6VŸ.»æEoOxœ¦ÇŸ"•Ìd°b{“$ ¶\éT·Ðe6zL!?¨9ʰÞöÈR¨p*VÑâdÜbD#ÿî[rÆS8=M«‰Ž€é<ˆÉŽ!o7FÎðK!šŠæ•\T^ôv%3gt¾¹ÎŠÐVïÓ·ÌH±úBg(1~ûk4µ¹Ë{µ\ÜÞ9É˧’_Øá÷tªÑ)l{ýº¤Y¡þú îµÊ˜‚-u¼«'pÕüf»«·[ Þ¾”åßüþ”TÌ?A€©×lsüÅ@6;tž¯—ïí jÚ.è!œÑ"È9FOLÏŽ ëÏ0ds†¸"ó¥­±öÌp§Œ \|yŽ£ÐùÒ2¡&­™Ü}D™-Ñ_H1V·iGšòðÁá&þ Y|4“%¿õÈÇMÈß6Aßl¢éf _a¡ìr¬àá¿YµãÞÝÉ(Ë7Ã}ÿd¾–®y°wÏŽÈꤳ*WÄ:ž†ócÑcåÛoùÑ÷«dœpoôö‹L[ù¼A²ù0¥Þ°™G"  £>|…àh,¸Ñ±›Ñðˆ¤Y?|Þp³ûþJÐQÇö…ª4(BÝw)‚u» '.ŒyrIΣ?Êà0ƒ±œ§ñãzò®>E¬®[&rÀ¤Ê)Ù³ÅòMc½…d:? &íýkê™""&¢#‚ œàCÁ `(€eñ²7ŒŽ &`Ï ªñ£ú‹äPKD«ƒÁé?~çP&MˆðõæÑ\0IlÁ‡>¯Ä%.:[ì(L­ûÉ=Ýt)´±E GÓ½H̾˕ŽÈU†­ |£…t-;9r‘kSpˆøNÕÂó°– =ÉÆÎùåÝå¿Æëùß‹õÀÖÕº‰¶¨ŸVêaÈg¢8*sù;„ ë2üSU2n$ì}âsd÷íÚ« X+ôÝî¯åáÛÃðÕzÃñ¢¶"ìµüX®VE½Cƒ½Š'Ýù¢ „úB“U¸žLžÌ–ÛÂþÿL§ÖÅýQàU:âÄêº5tÊÙï×Áwîè$ÆöôšC{Ué¶ÏLc³ÚîQ¥k†•:#Pëf_Á–(©Q~ÉKáŸþ¨´¥ïGŽÑ*¿-­|søƒ®;ãÃÁè¯vý‹TyxgÖàVlýÕ È$Š¿Þ‹Î“Ú%¿Ièxx`(úò‘G[? ‘‹_[IˬõØsù²æ|8;¤Ï`0t­}/óé˜=Wz37içôy>Lä´iöR/ì+K‚óðÊ>vO¹xjB5ˆ.Aò̧앺.ÏŸTo ÙE׫Å}ä”/˜cL:î¶ÐiAíõ¦£S:Žêo2ÍÿO¤¾Zß}¾ç >™ï,0oJg€Å:›ªí©¥õvMš´ˆ(q¹AÞÝÌ~¿áTÒ#) çH æ®kbðýÓåÚ?ê'õ-®¿SV8”svjˆšŸ_aËFl¶FN)ŒÙ”®X+–ÍYW…ŸäâûPŽC2ú ½¾?æÁEEó܉\O$áOQã<‹kønSi<5zp…4l; ý&óEVü© •Ê 1‰±ùyuÅö Z|›0¯>íÅ€M¢Š Píð]~­àö¶çål ÒÏ"D¨¸K^äÍÆ¤VišÔò¦5é ¼M#ßçtW6N%'€×4 ÒòÄe©ZÌØâ¹Ù<#v4¼ÇÛ©1öê\üõ³_G}>…Õþó¨ÂwÔuœxU¡…z“K´ùwLÞØÌnb)­~ƳEÀ«ê•×O#­sJ²ÜÞ_%‰Òf±®Q¥…ŠãùæsIóM‚ÛHuÜ1oAø Î¾ÈæfÊ{Mó»’ɵöñî:´’PÌe®E̘‘ΊÂ×UE¿?Óë ¤nÒ0ÅÈI`'¡ .;5ÎÌ‘^bI”½íÚ åøïOGŰqŠò;ãttä4šBYÝŒµôj‚ÒÛ©ns|`ác ú€ºHuG)ìwEiÙÆÃ,;P ¥Ž ~­ Ûñ €úØïö’sršVBÀH#6ÚÔŠ,Œ¹Þ¡ÉJ½BumžÔ_Fì²X¦Qå?ò³ùq{ºßA¶lÓùû„1 âMÜ8 ’-=Šdz÷›2´ìQÆýj[ÀrO#²pÎbFw®c_'ŸòІ ƒE,ç¨û›½û§ ‡´L½·Å°lÈ5:}EšþS‹-øèÎ+I²².4ÞþÞL dlÈKk{ø!:"‘:¼>h‚#ª;R #_÷wpÊ«@N¸~†<²sÇn+ˆ¢‹T¡›­Wºo_Ù+ÜEBymøK…tòN‡’ãý‹qÝЯrÒƒdøc­Îâ|ƒÜ7îðƒÿ€³i7j‰¨ †œXt¿W°»ŽÍ×ð~:íóƒ¯w4±¿T¶"å+8”½©xI^×xìÝIó+%†bVˆ ÷‚ô½$ ®K‰ÔDƒD¨72Û‡—e†?Ì’:ÇõÒÜ$HFš% œ¹*öÐlÄ=ŸÛ*‘ÛùV7Žˆ¥/¯ýþ룲ƒDÇÚø±ºƒXÒƒ–Ê™Ðï+¥#{`#Ø_ŒJ·V‡G$²sÀôs˜ùdw8NPhÏßÔä2J*|8?ðÉþË·\ÓÒ$@A@*¶Éw¼pgÿ%ó6|ÿ#ôDuA¼÷_s<=·3ºÃ3Rü£ð.¸Ù”<×Q].i¶&êúycV›.'PŽ-Õºº€S¸àhš6Le%ÝçÌÖÆ‘gë1F =·¹OæÉ«…ƒMGóFÿ„QÐ팣iÆ’[x´©›Ò¥7PëËÅÜ…|ù™’ïÀó ;î|ìä¤NwÛêÇ:…bÜÚK“êI=Ô¸[J_t£øw–Î/ ¹ÞÇÁü؇˜ãeíg„©×ØO\Þ-,2nþ”}ŠíÖ(äDAÑ"•n¼SKкÅïµ,],åaæurBˆ3Ýœþµ“k¥3JÎâÅžé=¯rø ¯ ³ËI7ÓãO"›&ݵ¬RZmÉͳ$Ë Fî*u8Y7]™¶=B †-á4ýxt¿¯²u*{ÄO~Ä·Cã«òÅР´ÇøšÆõM«A#>³+pøª‚A¯E©“Í8Ž¢n@F Ò_T„L2xåôõ8[vý— £ „å3))燥BdŠöfC8•CÅåV¿Ä‘ §5.±Ì@+Ge?)œVÙäI·07)Ct„”LSÑe5æœÔR™ƒÖÁ–p±Y)©M¹TN>Q«‹‘‚ã­ĪK&rn¯,É~£‹ Rå߇Z#fEë[.Ü“aü éË!úÌG˜¹g,9/$|6<+>ý+vui6ÙAý?BÇ®>%@˜í¨r. J›>™‡èH8GÜã;q\Ð[ù=ÎØænœ¶³yþ¶~rwï©ò§Š ª«F·G¦ˆÎí$Fâ*ó l+‹U"÷S¶§ˆGëhæÏÃÒN~–±øzs˨t²çñI2À¸X–ò«·IôÍN¯v]ZRÖ ‹Iò3-GÖE­!¶©Í|æ¶·ú¶v»h_N,ºˆXh õÔ¿ &5:f¬»í-¿á¡(®‰bÐ4›`9“NOÚÑym‰ üùõB{ÜðóÐLA'òÒ(kôÍÒµ¨´5Œ%Þf(~×oôß ,5Xk$qrFF"—«/¤ã¤FÂÔ,éÖù*J‘Ó4s,+Q£Ü–lìò7¬Þ{7‡+~¼ÎF\È‹¨âÖ¯ô‡XÒ{\ñG ±«S•õg`êRä¿h>s»¿O(–?uwka÷I‡ç£oö—ëï±a7UMµ†þ¿¶³VOVȘöôw&£È[&/äcÍ•4n#§¿PP ¹ J0µºŸ#Jr•Òrâ"¿t!xkT zG:n#c(îcÈÑ0–Î'ŒüM[OÛÞ‰)•%-…t• ÙóÉuœ¹8[´2ͯ}7Ç Twhb÷ô¡PL*VúagH(pV¢Œ\ŒO¿üv.«hrß|ãÖQ‚™xvž†,ºPâÀÁ¾ Eáûlî]€20H`¥h‰Hò,9˜w3æITÑö®xj¹M%çÓlÛ $o’-*@Ðçº5ÊÛŽÀµg+¦¹Hc&¨ðÉ÷9eþÔ¢¦<%®ºG¤¾/‘‡å†Ë‡ÚW°‘³ì÷óS‘]‘úž$?žÑ’$‘c›iÄ"ßa½-ÛÆ> ™Ã-€%"5ïIÍ’wý…;Óº¬â„ Uy„H@u¡lÃÑfäùóc :&ë'Mg\CRè¾-ÆÄƹ ëã³<•.…1Qdˆ¢Ã«ŸØÌâÿ*b[0±÷…ð¼ÇUŸ/?+îw,Q‡~É÷}™ÚðþYÌ  4!Ñk0j¶/Ùm}yªdÛR°&Ç-‘Ì“_?Ð0ØòŽºê΢ZTº×͏ÀÓ{’›@sΘê·OVÎvÒÖÄ®åÒ÷;ØÕÖN€ß È{š‚Ûå) sú ºÄç_Ǧ6'Z'Æ…»hðA‹?ÿôª¸½JÉ*;/s7¥bušû¤½K‹Éã…6ƒÕbÏ&vI´Ñâ.à!$&é(#T–Ý ›pBXÿwëR54ž@ùúIÈx«|¸^nݶ“X’;ÿyž³>a3¤f(µ(| rݾá È¨uíÙ8,“}t6ÕŠêÎý·f÷ºªÇä7œ'™é‹5xÅ 7Hð©Ã+Ý×™Áo¨ždƒgæ]ŠmY2ƒ8žh`&d¬RÅNPî‘êˆ?ÿxVƒºù¡düô1&û°xs»ðªf ¢Aª×(1=‡Œó-VªKa‰r*˜L|øïÕ£Ít¨¿áOc6ì§2£o¼¯Kûy¡5U1{Èôàß´mçY@)öQ'¬’  ™ž%½½±—Upf;r( Õ‘ÅÊÉšXä½EWåÕùÍÀ×ÐV¼ˆ‘}çÒ{­ëPó¥k©;ÛÿR±¯´Í>èí5ÁQxC„Ä1«‘OÝìIÅŽ?ÉÜâL“yÐAUE‚ä®~_ Í'¹¾¶kÎfÄö°K:He–­Ì ëžyFd1X]¢bj¥¥w¦ÂØÈKèüƒØ6Æ$µ&HÒ§íÁ Ü6…Fro$·76txˆf¾ð`8—~ƒÌ¢RµíIù¦ZÒþáÛ4Òô®”ª+ò ˆ"ºSGö³©LÃzY8âªeßcÙßëNw íp„îjQÄ=êãk5¢76ïy?\:„…¿ ’ûøªqkŒ(tÇÆ:i¿óMO‡KæZÐTvÙFªPJiba1x|ìS–;˜Ee‡kî·ë €«ê0 N#u°¢(ûZ .^;GyW¸ÒÇkã¤%—FÈôÓ„ÃþŠT‹¼ "ñ3îCûݤ¬òè\æYá|‘ôŒµ‹g6×ka³§†%µøÐR·LÉS\¢÷|Ë 2ÛŽ !îõ.žÀDY¾>@-ö85î/^?(g¶‘#GÅ T6É ÛëºïX&ã’Œö Ö]Œ` äWtt^ïM¨ÆÛüN±8+2Û5¬T¤Ê”•no¶šÚЀѻ$Ús‰ÒŽzÇõR2RV¦)µ=ód'1ŸçÅšÃ=å‚J óݬcìË`_õÍ;þÃáp¾C Ç8z3 zœt(¶Ì¨O•_ó$v<‹íúª¦C>%ñ“ûIGãW½ œ µ3¬ŸÿDŒÞܘ¯ªa˜ ƒ‚À'²OR±ç• })Ô‹»j¶bÁ~*c'¨o‡÷Qt™Â튊õŠYö ÀhéCóéûÇÄA­R9‘Aí¨èóïà]²‹‚›±îP¥ùhÜ6‘Î`–ö†Í¥® FË=eÒbz4bEõ›™Þ´Á —Ø NMÜ_iÇ,= A©ñÃ,8ªˆSÍDüt=»ý×OmÆ|•×H"òh—Ë$̯JŸLO)n·ÞŽÒpx{ZÏËoΓK˜§œV(EdÕíE·pÚ…!d ¯äÁ¤ztÑ:Xʾ۷c+ºð‹ÃÑ¥¨ðÐl®‰ÅC A —¦-¦-é ¹ É盳f¼\}ÝI{t‹ýœ7 ·ÍVgYÉ “ˆû¹.u¦´Êzuª;—˜‹¼jº!‘Ä3ÌäïßXì~Ao=:úéü6ÖŒá_§àV|øþQý†©kVžÊ²(eýÀºNÞq0¸ÝTú/íT`GƹAB¹ ŒøÅwþeþ$Ý|õÉóv#9Ëö»Bhåõºu>”ÈY²ž†+IÆ ’ôÛ»•þ‚ÂÔ~ìà-Úa㻲F¹"„éÀgõɺ&cÄY[eÊQîɬæ–ùÄ=í†n­?–…ÚàÞX…Jœ.ê`52[¤ßf…f+Öª<3’Ü-(Ù{çm Ð@àé»y’ÉX@>¦;üI¸|êÀmöÆ«³\âÆò&' ¨vcÛ6âÚ¯ûØzŒO f>X7Údó~ ´²å\Û÷XF¢@Ï›nÞYâ/ô£¦Ž…n^‹®é²¿d€GWË÷ÀüÔÀ=ÁQ9‰˜zo:”*8ÍõÓ=›¼_uë,ŸbQ'~ZIv 7ò…Ë>fÃ.\ï…’¦lß…ª|&uìwlú´¼ñ𒞆c.5¿:'&°¨  äÑü`”jãü‚ÔñÀ©ì®Š¦ ÷T£)RŽ>ö*øáL%E3.'IiyÁ¸IÞÉv¶Ïfž(^.~÷.è-ý CBªFt#é°×2¹Zҿ֢˽ˆÑ³«±RWéG)4*«gÎdíÛðÎç=âÑžtoE+‘û,ϱ¦Ø1C7!ïp¿¡j$»‡–=¶AÉÝ®C·Ëc)ÑþPWêD& Jë.7|mK¹Â¥=²ôÀ:SF°XùÏ@aÅkÕ ô[Ò-ÞVfăã~²ÈÜ]¼=ø‰REÙ¿*OEêôPdÛv.]¢0Ç46â„V¢ïØ‘ÿ]m‰"ËŒ-œè±c·ú4|Ë1ƒQY¥ôªH´ÕÊÀß>Cû#‘é"šÈ/’p@@6Q¹ß™±ŽµÑ¡×=ÃòSè¥Ëk𻾆ZcÐáHÞmfØßÝ 5™µÿcùéÞeßÖ0–„¸«9Ʋ`”ad&<îÆKSKT”dÞ‡EèsÁ&|¶ÎRÇDþÂ=?{6EG’Ú]“;QêòœûŸYÜt€ÒŸQû}ç®3=îç;µÅš|sf·»¨øWä„xñF$g¸£*ÉÏÆˆØù¢Ø•‡iW6bnŸŒ¬Mģ߰W§gœA:–ΉTýÄr,²ªì{T;Ð @uœ­PdZõ%|\¶2.ßFûióª1¦…í¾†Ž¦5‹Òc^Ce—Eþ¯qì´??AåÛÙjGh¬NÌÌ*z2€¹kìy³8  ªðN pæl@qVSkBâC'ŠÀ!sÛ¦.óA³•hDñ>Õ¿à®K¹:Œ‘—ï)A\ ,Ô³ôP=ËXÎVXEïÝ ð DOQŒbëéÞËi}€q7ìQƽ÷‚â‘-5íá†à Aj^RIšÑÑhÔÀj÷¡ß…×?E¬úíÔ,°6ø€L/²q”Éo‰ÿ(§,´r¿“WÎf¿eü•ÉIÚ ¾Ä£Õ¼aŠŽçC“®?1ƒè“¹3ÅV¹|—ª| ŸŠ{v"F4Ô‘ˆƒk&Èù£Äy{RpSÀÓHW¦Ö¸FäA©ÊÌXWÕ·¼‹m|z0\£N¿Õa2ˆÇÌe¦Ât¤´í X0rçér'óœúØe¸Ç@§ŒÜäŒ1(ào~µÍ‘åm'IÒžÿ"»Ë¡ÇªeD)‚8¥C˜ˆé¯Ÿµ‘E*95÷†¹*r]õñP„r)Þƒ¡Ý[6ñÅÅÙÌ0sY§b1ÌñrôƒBFãÒªúÍÚz'»­‡™36§U«(pHÛE>q:dW(û|_ÂuL.2b¢G]áÅ…ëŠH@bô’<÷•>ùTŒ0®8ÞãìÎÁã‡tL3€v'}…`‘Çfß zà^[VäÀ$Ï~DÒ_x][&¬æ8DbWXIdw'Á<ÓÊÐ ‹¡8OHb)ú´hãhd7¤ƒ°‹ïRµÇ$7Àã:&;TþK€¬8ò¤„ë¹,J–t“µî§ûLv#ÚPÔ{»þq‰÷“”2ØÁ.üdÍ??Lg€Ã”«>[öŒƒ±»»„î‰Êþ04œøà8–¾Ë‡Þþܱ9c™ÞœT™þÕñ]×¢?/¶òÝž(Âè­Cò1æÊš7¯Îé‡2¾SÖQ0!*ͼL]B)°v’£2ìåÈ£ô‰¿¬Kv ­}*Á}ükÌiÓû«ƒVJ™ÌÛ1ÃÚ™×QÞwÈU»ÎÿRD^¯ÁÜ âèõ®˜=ô^ܾÙ•}‹Œ·@¢Ï{úßÒëDÛÚÜuƒ«‡Õ_T.õ^yöbq»(¾>é¾øLû~&¡“8d½¡”ŠÂ ënÜ{l"\DîÍDÑ7fš®©{ÛŽñôAÞl ý7èí#rE.p㲨W/lâ"6@mÞbCëÿXj1Q'pòµv! †“¯àÔËÖ›¤#ŸßëböwlöÈ ·g‚Ðû\ÆY¨AfK›o˼‡Ha¡«Œê¸r¢#„í'ê*bOèŠvÌÚE\§ƒûÁ=²ÄFô‹7'Ï›QÐA7Wm»(¼ýÙ8]Ù_ùkâÃLð@Þµ'Õeį— F+{1ÊN 1‰Ó’ ŽWŒ[ê6>æÌLãW¬“ŽS]¸Z Tg!Ù^¡Úz\Õ¾<3¦6ë^ fY‰aKú^÷ñˆÒÛT@étí(òûiIdꈚsT*Ùîûé>è˺¯M©\‘ùÕh‚ãÑ&Ì1Ñö²ÌÃKàU\T›–)šÚ¨*–0ÓKAçˆó¨.öRt WøxL»ÎJ€ Ôm±H¼€Û<YBÔaþh¹æ¶¢ýüî+zùЇÏݨÇÎóeÉ8©©¡6Ê˦í7ê®¶ñq8¥x4Ű4ìP +ÇL‘6²Xï- qÕOô{súpÚß$¢ŸRäŽiþg©/‰(¡œä¯vÜhùÑÃjJ‘A¦šA8¦×››ì³ÌýZ„¤Ämþ\uš¿¸)-t&ujYÛ±}l?€]°ü1»ñJ‡~>eˆGTAÿ´×Í 'ç; $Ëõ앵ÒÞ(JýI`~4fìî+›ù;~Ý¢©[*¬!™gì{¶cÔú¡g¬r!W,b0šØd×Wƒ4¥\Çöý£o8ŠÊO²‰;ÍcgÍ}Ø wà«[ŠëhtlɤÍZ›ÅBa‘C Üz‡½”S^M $ÙÓ¨‚°Ÿ kïúSg›×‡e™ìá¬ágb ¾çŽ«º ;é«5B ô²ÉÜâL“yÐAUE‚ä®~_ Í'¹¾¶kÎfÄö°K:He–­Ì ëžyFd1X]¢bj¥¥w¦ÂØÈKèüƒØ6Æ$µ&HÒ§íÁ Ü6…Fro$·76txˆf¾ð`8—~ƒÌ¢RµíIù¦ZÒþáÛ4Òô®”ª+ò ˆ"ºSGö³©LÃzY8âªeßcÙßëNw íp„îjQÄ=êãk5¢76ïy?\:„…¿ ’ûøªqkŒ(tÇÆ:i¿òè…}Rñá×½ç(u5ð7Â2ÎK–ýé~[)µJs°¤Ã©Ö×{rª¶QåaóâÂI 1ŸÝS„Vƒx,¬ÓióÃZôhíšâÄ^!û»gÆ4ÁðAünñÈôëÏò`MàWÉHËX¶smqÖ¶:xaÑ¢[_E+tÌ•5Ê/wÌ#+ܲÇËT¢—ƒ±#qÈuCòw›ëÉG¶êŬ Ä´! î§ÙàEGž/ž? Ô†ýÔj¤½*6EçY5-Y+tÄÜîÐm@5¿MPÕŽB!²N³[ˆIIqãà^â&!›iîF·ÓF̘ÏóâÍažÿYتîs¾-‰³]xt£Y ÆÃyèã8p Lº%ÒKÔàÓ¡E¶`¸0é~ÍF ŽÕ Ú#jlʶ"<`ê]žÃ»‡›.ÝÆý¶‘ªh_QàÖ5|áψ*aߺӜB\§9dCt„…¼®ŸQ'ìí¦åˆ7x<ø¹2"1;¢5Mï~ÏúdK‹ÓBÙ‰0.­ªÎž‹yÙÓtïºï1™´H­iÚ‰.ôñxR‚|Ž´nHç0K{C¤\œ¤üùÏG‚žˆÉRjª ªoRîʦÝòk£¾ñÖĘ1a²”a3´ø§0,Sþ‹·1Ɉ ï•MaeŒSM@ât˜Dm±àGÔŒŠÈp _ŠÊ/æ°n:rÓ;®=óv"Ry¨£PäÒ²¸T¯›sD_Uê2êO¥£ºVÞý¦˜ûü®&2ÊŒ¶ûíu¨÷ò}LKàÂ-H±j§Œˆ$îÆ{‡% ‰þag^%Ùz ¬Ñá'’?µ5ß¿d TO„¸PèI»¸Úpr.‡uç·¿[Ð%ÅQOY)“æm_fÃ.\ï…’¦lß…ª|&uìwlú´¼ñ𒞆c.5¿:'&°¨  äÑü`”jãü‚ÔñÀ©ì®Š¦ ÷T£)RŽ>ö*øáL%E3.'IiyÁ¸IÞÉv¶Ïfž(^.~÷.è-ý CBªFt#é°×2¹Zҿ֢˽ˆÑ³«±RWéG)4*«gÎdíÛðÎç=âÑžtoE+‘û,ϱ¦Ø1C7!íÿl+œÇ–´{ ¸(¨Š!™g™(Ü?Ê ýH„Á)]eÃFï©w!àÏláöÂQÞ¹„<×í¥Ã†Ü%$.}L\û9Ò5gÓïíDfÌEg)½Ñá*êr;xÈ"#†[ßÑ}M ¯­âë/4Œ@(¦å<ç3#§Ë2Æ/ ¦ËT?ÓIfãOÕQz_F$¨Œ0±ï>ÄÊ„â°@åKç&“øÞzpp†+­¾!´/Ç>–eº›&ÍYîP’+딬Eƒüx÷å#‡$ÿcOZÊÑÏßÍÑ å:Ø¢Q¬Uù]î5´XˆV'‚º­ Ê}âYDgûí¾ßÒ#(Â8là;öêÿ(œ5ÀØ{>qÉå­¦tG-/¤`{“T0§»€í®Ý.|ô½xÛÅÖåõÀѧ¡!ÿf,¶ÇÍÁGKgvøQôÊQ<Ÿ‡-•j“}nîû§Y‰ñ³åšóœ°ÅÞˆÀ[š¹°A5’¿,ËZ“Žó.•€ …­Ò:èhù¥ne<©’ˆìÆÓdT)Û#µÜÛ3³Î0Èœ ?#r WùK'©«¿PÜüÝseÝZ®ŸùNW«•øNê«?ÏÝÕøQéÅ•’@ó!2ß#C_ £G„ĬƒÀòÄë˜ÂÔM.Ü>Š»<׿miÿ8dn‰òF­˵€èÄÖÏ´{s~ÏQiv=>”½¥©8–n@$Tx™ŸëÚ4´B»NaÍæ8ìXêT âYîö³,_^ «ïÊÉÿz³–%G í­¿Kvx±ZL“Ü5¿ HŠ ¾ã7—’|lWn ˆŽ—OÁ£ã´ÌϸÖ¶m¶>÷gæ‹–Sš[¾™ÐÉ›Øk5qÝŒ͉ï+Ö(Ø®™"HwÀ¢aá¸BÚ©1Ng ÅÛ„ÒpÆ~„¶ aS Ð=ˆ;'Y¡C5 *„½9ü®ä”óvŒ33üZæøA¦ˆSRt)‚’­{‡¬¨êSèök×øjú}òÓº„¼á:αÇÞêÀo®ý‚c2n¾³²»cÛTÛüm„LÒYjȱÒÐéh>ò’/U¨¬QŒ×V"ú÷ÞÑÀ7½,äPtäK`"?OíayD&»œz^Sõª±3õ€e°¡ÿX¶ZŠ—±“33柎ö¶½ÇT×îW ÔÀc„6(Ê3;Išáþim#ÖUìz]šÑ~ÔýóÁìç»$ƒaV"ô øöz0)VÕÅ2ò«}ÄLÍŠxœþfm#VÚ’>õâtä,³wœfÖ_o¹2/¾“õÅðWrÂx ¶¹û½ÍòQБÓQþs5?ä[Ò«¾ {j|uä&¥0[ÝAO6ðʸ¢Ð>plö!OÝ Âè@|ÿ|Î%å¦u~™*i5)vRÇ0ùŒ²2é%­}QW[µÒKÑoÝJ*©R% ÐaDï¿íïRT6à5ì2›»Ôôי諡%WˆÇÙ°<¿'›3šœ=!ŽÛÃì÷§Þ¼¼Áé+÷†Ë 7N´Ù’¯MÈ@‘{Z T%íú@‘I9£MFþºÅà P4:ð"J|þX]™ÅE=I±®µÕÕ³âqJÀÁ  xʾ·ÚyG#ïMGçdñá‘)ÞŒ"¿)í¿Òeê<‡`1Ûгñ_;vÒäõÈíéóø•©ÈàV¬§"l³¯¦Ÿ–c¥…'×ɵåeÒG)C¢ß¿RÐg0î8– ê°@ˆ+Bdt }Ò²#"€õ‹LÜ œ<¦Ñ|í¾ ÌÏÎ!¢Hxñ‹‰ä7Ö^WûîÅ~`B½bƦ”¯ O ±4 Cú·$¢¬B/†¡€€Ïr¿”‡S2®|×xµ("œTiBá}H ;Oþ7è¼x„2+Uܧ/´3²„”§Ü…^‚eÇeKPíå0§8^s¸+büŒ³I†Å»oDZkõŠkÒbBÑȼ³ê÷å‡î¹;›ç&§ÂilL^TÝ;ÿyÇ':¾ ´¼˜‡Àß—4fJŽ1£¸-él†jYýJ ‡L´XÙ aŠÁ£·¾ †m·lë•É=³¯>²¤Ø -¶iÏñeø«ÃC'’»A5ËHT»Î6ï£u÷ZrÛ"ðqÌäbÿuEºà×úS²I‡nJ4µÑe6íbÎè-ä/Zº*šÇØ•ŒBb¤ $¤˜Jø©†Á‘“Y²¾ €\úù'ÃC©€êë¶!¤²íLZò‰³ý æ³=Eš ÃÞŒ­¿ ¶~wΗ1ÜCM¤¥rÁŒ=¥YuV!IÏH"V‚NIÛÑÝ@(q|9È|õâÞÐZ8R •¢qíË×vè=/8Õ9žªØ4†›iò;1¡ð‚ÄÀk™¾ÇÃäâ.ƒÄàê,7ú,u²þÔÔs¢h‡pgh†p£wGÔÛ3 ÿeUÃŒIa0võùv—Î4Œ@9}pý ‘ˆŸúZß@ÊÔïýïyÐý1U2’JÀ FL1eF_f·´´5¢â Ê[{e®Ñ9ÎÔhuw8r¶=‰Í°†cƒÇ .éH¡O´Ã,ª9†mh´Au4$oãÆ˳±çKjÙÄ­¶lJ‰D~™Œ.Äã’¸^«íN›¹CÙöõ‡ ÿ/Gt«#ÛRs fàjt–÷t€`/TåœÓ¬^Fqí=Þˆ¡¤àÅÙ®¯ "Òb9Ý׬+Õ…mþÞ8ðvEœkÜkêG¡^µ –Ù˜÷B;†º3–àøQÄ›çmèFX-ðW³S´0e‹ûjsò%|‚xzš)ÐìJuô«j³‘Ù}6ÿpKݨm2Ì|"•*‚XrÕ…‡öÔÚ–ß©±îq+ýÌÚ…›=bm©þ$g+͇±Ð™ï¦}v¼:—ÃCé·{žÐ¶š‡¾Î‡›UdQ˺™™éHâómìQRHæÄbøC•®÷—ÓœcCŠ\J…ý1*ãäuúÏÃ­Éøv#‡Y@ñgDëeQæÑ°Å`x²­·UíôlÁÒzòA®•2oGv[ê¿àC‘VÛæ{^´q™¬üH‡ÇØQÖç|tyø¤ÂçËÊï@€Í™2CDé>(Rç9P7 Âükü©‡3UÖêEÁ:Hû¸Î½PØ_:XçÊ߈o‚õß‚N¥<­¿çMOëáDÕìå껕Â,m5ïk.uŒìÀ‡çëJª„÷‹Ž~‰zHS¹zÉÐgåTÞO<»v^ÚïVÛ rÏô<ŽŠâi&b}Öƒš[¤¦Vö Öß3*h×`LªöJÉ®n‰™ÚªâqçZF‡ÓÐÙv¯B$'³*L?ّܾeèÒórfÍ™â¿öÅH›,ÿñ«®¥2V[å’0M(¼C7D¶K-ßže…jÇšðáÆ’N0MÈlܺRºÃJ§cŠ „¯¹b_0’·Pfû"õeuì*Âs²cCRþVâ¦eŒø|ða´B®nSÖ”Ã\h"SÉ$í>©FÌZøõ—€)Ÿ­\J¿e¿Ã•R·%®Iª ÑˆëJ˜­Ñ¬0úü-ØL=Ÿú¬ŽÕ9x@ nã{½óí 6=“8 œoC}KAÚáÖq«æàÂCVHb$À_˜òÆÚ§›÷C²¾j;DDZХ“*`Ñê&ûuB³Í]Á%Û7±ŒŠ¨ú Ó1R˜¬Mµ:‡‰Ícf†ùSÞÒçâFÊTÀ–‰æ&%%bƒböcfs˜Î-¶¶†æý!mù›rWu¸C®Ø÷§Ñ·¦ÍYð]ª¡Ý-9@1ø¹¬PE‚*§ÛŒÂ`+[!`tñQ "ƒr#…è ðÇž:ªl!èÝÞÀÒô‰yYš¸£ÿnÍ9fŽ^cAIÑŸOý'/cé6@hOýì!ˆSh3iâU@p8 ô䡦‘0ø;sƒZ&>Îú­»÷âîj¦Öë1l0 Á¤º4§¿˜ØL\©2´«,÷ŽŠ>¬ÝÑhz*êtsªp"ÏÖKnººî깬•Ã@þzúò?ÎU5þ¼¢°À $(Ä‘¼Vœ…2/0äëfQûœ l æ1kNé/JƹþÿÔýÔžM”g<>„þAnšå|_s½À£àÁ8‰ÎÈ;Ìöš™‰n3 ‘H¾™níÚÙU‰gÿ_×ü\êCcC¡á·ÀêìlܼVÁé h$·€wꆱŠÚ<Šm/EÕ‹aÈ ÐLsà‚Ò`3ÞÿÃÓÜe;8ΜêøŸÃ{’*@Ó–å)šqT¶×ðr1¡XÁå¹?cDz¡1–I¶;~T1“µÿcÀ$A»ë<À€¯x&k&›XàõÓu©ÿq£šÀ’nP'ß0záËfO¨d,ß°€[§íÚ”šº:Ñv¿X/Û2EîIÇ ¼Öoqô.¡á¡n¢x€»ªÒå†étÇ# |ÄÈ5ùW‚ æv0<Ê)bük$âT ëõ³ææÑ +¬ÅÃ"ÂŽÎuyr¹¥ƒ“\ ñDë%'Íí6ŒäïKÑ †1íSîQÈA9mïп溱C¢ß©r2~¸úsÜÞùæFRë K+ûék ‚ý9acÊ_¦ü)[üHÚ©Q£ mS¢ÔX«õÇi±¤ï+Ño1•c2\³‰›¯FÕ;L¹é\«¬êy%ЮðFœ_ˆTM1 4k¯9±/J\å6Íã¨ûèÉë[‹áØ\Òkïº^Û£¾P¨àvò»9†yS]·§n0 m;8=¥ô]¼“• ôòí;÷ݪ®¨ü:KäÚŠ²óö«.¢ÙŒsÇ%Ñ@JÙ¬7g}”Ÿr¸Ë«hÑ‹²Ä ‰1¯'å-Ô ˆÃóà ؠó ól=l˜ƒý¯€}Ägüx u•Àòg%Ÿ¥‰ |'ãúµTÒ5S‘'Bú«ÊŰ«y{j ’iüëŲ‰é+  õ~c“è?û}wž,F¿•T¹3ß™IwœÆ‚(µgÙPØí'Ëz¶ôo¯4èCO–×ÏÈKê>,NÑpI§˜}ïÏ’£éÕ\Zš/LëñÉ¥‚7?fá^ùß jïîEÜ ›A˜Ì({lžª±bš(Ž ר¶¥^=¯“»Pââ`´ŽÈ|®šÌY0•kç˜,ˆåÈôpNn—FäýÞ¢;Gý*¾ñüå|5g‘x <*•[GGÖ.³‚IÉ€h”‰Ë®oýgº>M7™‚b^Zö4ã”´9CgϤ™DUqä2%PÝv͆’–`Ì'õIÕÒ«Q&(„(ìE3kúU)qëîUU…ïZ³êQg)ÝuXÜþ¼DÓ¦Æ`2FzRÒE¡õºÍꛓ»ôÙ˜s{nÚ¦É4¿·+jƒ'²†óÈ/  }è¤MXMëÂË5S}è@¤¬Тñ%®!NK$GdpU rjë¹Hm1æp¸f ‹Ù€«òÄhç 7ÕÚ M±½Qˆ™•v<2¾à»w7b@Y~ƒ Æ!:¹î T/ø¿ï"ÑžW`Aô`²†º®¯ˆt ¦X\ÕÑ=üߎŒì³þ>Ú¶¡(øF¶2–6ûÆáÇTòdz:A&6?ÜG /Óíú"ì=Sýe*ÉvÞl /QVó‰ç3])Ñ‚õRÕõ"63tà£B³ç,ztc©ÅÕ~xuy™]iÂã¬ùæ)³-ÕÔúï ì‡]ÝE_@#šÙ\QòzœOq©&(¬ G ˜V+ÈW,¿‚B§0±Wö?\Lçðê›øv›ü;¾ÝïÏáÔGðíøv©ü7¿ç¯áØßðì'øoHÈ[3Öñ¿B5‹¼Ýà.&VŸ]H)‹jh›Uæ³Ó#%·Íƒ]·ûE6cµ³ˆŸwÏæöÖ£ë–çQ+S(duÁ36ÜF_;7Ó~mÍ%ÁP0ÀyÃh#CÑÀ·'1Ój tMã‰2м™¼œRž(œÅb_ß"N ’m`ÄGo7 W‘~V-ý°Ã´$¦'IšñC¹ÔLEå™RI­qòa­¾-!u–T½ÁÒ‡³æH÷Ä,:‡Ò¥³NµsÛÍ nTàX i=º {É'd2–²Šœ6òõеoøÀ¬¥ÚØ8ÜyÉ $Ï/nH¦ôq\2KrXærqb-žËê{cÍþ>É&ˆº^º–z»q^üŽŒ”¯ÑÈ/I©|¶P<ŠÖwOCÆŸáÔŠ7ºæL@ ‘ƒÏ*B!&úÀ¼Å¤¬¼ÞCÄ^ˆ)äL²F£ÞøbÈ8Ýæ@|fÎÚ§°Ñ(ú7RT _Ÿ¥0̷˃ÈK¼å]%ƒàN‡kbÿo‘¬öùHR®H«™šóïÒ¤¡QÂ34pøÔò‡{Ó«joÆBx„zµ@²Ä 6JTÇkL˜¢Éñ•¹ÇthOìú!k{7yy‰» p±}rqO¥H‚0P'¬\ú¤Íû[ý"{É9Gš­¸7u£Th 7œ&Wþfååü‚GðèbuÓ™ ±SS Óm6©?H/Ÿ\Yÿ€nžc‹"YßlçÒ^&Q¬ž3å ÍóÛ0}Ë©4(¦]ó±V Ï>©æÜáð|‘pb3+À=‘úo?aü³°!Äï‚ú'$~ôŠû nÜ㲪µTÈ>+>.èñas‡R\A, ãž‚Á’ÐÞbKV¥2U·.W4·-ê<ØkuäÇf§~àgWAJ¡chþ+kàO†HŽ¥ "ÚÆv.­ÿzÑ 9ZíyOšþ«‚é>4ÓecíiS0|˜ÿ‘}`_¹&Ô9¯Ø» cÞ¡›ŒX²âö"àñjèwÀnþMVS-!ÎÒ«Íð,:·¥ºgQ] #¹@Ë>Ùb8>o8#‹Ö>ÌM~¦“ž’BÑÀFƒúµÍhP®¾™¥Ú³&n»]\ò «$=®u–ø‰ã-Pß‘×{¢:’Ú²µØÏ±6‘žâ5“¥ñî‹å1šWlìžá¬¦0ÊRRè àny*µõôM„5¶«64CEŒÖØ)f6þÂ^úáâô΄K·Åo˜ ™ˆ‰Maú⋞øGˆD‡SÉ¢ÛÁ)ò*‘eR‘:  W ‡ŸíbõE-“åiÍÊÂtà´4†ÓrÁCñâ¯<òœ5ÿ 1[~…’óö`‹þÛ­`>’q¼á›ö ÍäóÄÅJCbÙÚ|ú e¸j”qŠᄸkiêu Z~§\yÇâ¦ÎÃÌ\ñ¾ʘ&/ð@Ö’ 9e`U9ÝBOCPÌଥ ƒdW’näj%AÜ„Dü¥¹\R-x뜒‹Õ£Z¾|$]&ÌÞ ‡c3]èŒæ…ÚZ¹ötLûÈÔâ­õþ‰×j›¿:Þ.ÔcÑN#}„«¾„fØ“Ïh›µ·iiÔ!lµqç„<õ¤C°õdÇp²(rgàÒ…f[èquÅ@öÀH¨—»\žÅmn$D«‘tONCXqîв9U´{þÒ¡åÁ%{Õ,P›å_«W U¯ìàýÀYûºéy\o+á±nši!Jÿ:–™O)36Ù0\BµÑ]k‰‰yÃÂÙ&üóz ùÚßIiõI—ýÑÔb3ìû þHžú‚7>?wwÑ»‘sÒU“ýxÖpt%•.8¸ßÞìÒ—á¹]yB~´ž[aÛLÁLyÅîæ•S§"1ÚD÷VªƒÇIÙçë`?Ú¯4ÔZÌv?¶ÊØkjî^âa3ZE(Ì5«…ogšé’ôÈØ¤ëûþ­˜wU"}c+3Q6`úcÖ#IKíšœ×bYéÂܺí+ºb½TоŒ·°—»{i­È˜v§ìlµšÚO/ŒÐû³À-«3t0ǩͻ~L­NdWvK¯~ D(3¶·¡$_Ûc@µäÆÂêðGŽ^/Ð_!ÀIÕ$ñ1èûm„ñà ¨/ëz¢SÄæ¥žã?ñëUZCMa&Ó«Ê3¿æ] ñf÷!î¼´4x+ŠFrPœßc™T3`P{µ!úrF—^¸EAÖo:+œãg Pœ´¨q—DàITùÜ”f^ÌnÄêÎÏQÕo׿xøU’éü«›mrŸ—ˆW—yù<#†²qHƒ÷˔ퟎ†H  QHŽÖi‹™xÚ:ßñ§›mî<û ` +÷A¹rtzܰë°8Ž»ÉN Pÿ.áuÕÄŽ–»¸`ÖÀ8 bmשáî53ä7”Ô£­†Ó“q÷Äz©kߊi~ô[ž ùÚº‘Ø]´ 2õ¿ö%ÁFÝ$¶†\LMlDÎß@R/¿nÖ¹>Y2ÀC[5¤¼‹–7PeÒKˆ |xÍÕLÜï{n`yxÕÔ7u\^cÿO ÇXâ1(êq²°Í²Ó¶ÌxGqÁÀêE‚:’Æ®‰ám #RØ™dRœBòôkÿyÓ¬ZuI¯©JøtätU<ªÑÁ4kB§Èk¦ ÿI­oØÚ _˜#1ŸëMþŠä*CÓô^–ÿA­ÐQìØ›+ÿuXLÄ9b¸¬J.)Úq¿„£PQƒåm6K½J£î»‹¼ïÚ:DÐV\1ËÎY¹Å>ëÉZ¤%ø¢RÿÆJ»`”»Í\·¶0/êÆBwfL{½¢îm'Õï¢ |µLÆŸ\j/.»9Ø6¸ºp½¶Xf¢‘§IÀ6çÕ1ñ‹ÿ|ªD¥!a›¡FøçÙ ã\;; "ùø¯Æ,Ì’rèðwA‡™¯eqê¡>áÿd:ük(”®#™‘j-ÅLù(²AÖN87 9r¼®’Fèΰ[@»¾„(˲‚1t ÔÂ!Ê€tÝo¸änùß\©™OÓcÄ™ÖÁq¤t?KuÌ-æQ ÆlÎ\æÏ‰#´0ÔÔƒë³ljw_v.¬4òkU‰£ªBA½½×¸°.Â_–sn½k:âUsf—Ïœ…ì·Þ£ÎIâ°RÆ)Áo"vD”#NBºEkhg Yd»\AU™D.ôMÚ‘0Pb¦']r'²£ÄÆHþ¥õn/ˆiÆ%Þ9thײý:ÚÙXWÌŠM•Ýw2•;Ì‚bX`™ô·Ñ,S_»†øàïÉ­e¿ÆPÙå¶ý¾ÝïU"›U÷÷²·€[Í¥NCÍð¼ ây„¸âf¸ñÃ*KÍÓŒð.ëˆw׆“†î€wd*®xçÝxvn™v°Ó­HYn $ŸMD,§T¸òY6 ?¹£¥ª’ÁmpÓþÎCÇÒ{tåí›!½ƒJÖ¿ÚhÂìNC^AFF ÒÒµ8ð†$–lÎÀ̺6ï࿺mÎÓÚ{¯Ø?dª#j3Ÿª¯gu™t.]ä³¹ŽXÐòa&Â5ÊÆæó17ð~7áºéKë÷ÉÅ4¡Y»uoš,>áYbx´³´Ç‡h3q4næºdûØ„‰R”9ñT)Ë¢ ˜ÍÄtý¦+‹ºNè¼)ôä¾–`šQ€Åu!å//ļÈm@¿Á%å-è9¿“»Sþ”#s4 œÈcQ9ÓütK±KN¶‰!í§ºE6‚|¨Üam»eCŒžÛMK¹7yEo“[ èy­÷ZÄ¢Z$Û¾k”ݼ‰²îáòæÌšT‰ß¸œébþRzf$~ñažRòºŒœ5¨¿†²ÒIÞ~Ÿ¾ˆ¹\ÐüðÕóúeWV¸±'ê„Í5ú¿ 7B¦_•2YE€y*Øl‘‰GÒ˜ŽæÐµÅK°K MKƒ ¯Ø”Di' è)ÐÌ{Ÿ`!/ÿjÞýS_®Xï"vÕÙžÎO]Ôƒ+°ƒ(ËBè¹ÍäW¶{{ì;)ËÚì—d‘nÅÊÌ‘ö‰œ]‡³ÈøiY¯0Ã÷Èh,Ö«q5ew+­GùöH"ñÕy¾ÒVôÎr.Pµàë,ÅaÓíSÇ–W<¹™ÊÜ˾-§·…¥óµ¦b‡"h2˜Ë£½îÊJTÁ*Âomˆ¬MßaЉ6¾ÏžÖ3tŸ˜'á1›2¥±dÂåû_¿²¿.ñ®¸äî³mû,w”MÔiµì‚ÅÕ»Ú`b[þ¦žƒ–å6í~¨‘ý³Ø½›v8õŸKÙéàÝ×^%µLV8¢ÐEcê#"#|¸2qˆÌl)ÂËOäŠ*P-÷(#s•DÓ&ïL è)ËéÁ­XÁ ±mÐjÑ ŸeÃCIóÔõù6|ë’TùÀédãÅÈ„%ª*¿ÁšN’yžYׂ¶ë­$ã?ý‘øþƒP?”É­5&ýcèquWžÌk‚­¥ÝX4ª *y¼Ù¶k Ërø ÓRä•-^ ð£Êº¾˜ˆˆ%‰å¦ÞÄm|»^È"Z¹ÿÓg`§ã,5èÉR\¤L½0„ E£ëH©"ôóïÔå±Îâiog’]Ý‹)Ýô]Bc†ëIŒ‚äNʳ‚ßóšÉb±mÑ!?âík ÌíMÊA{‹Ë™²eu­Ú0©>˜?G{óˆÆi^ÆÕ€|u$;=Ìqd~•‹Qf) Ôeæ[ÖPCE~þrÚÁôÒè3C‡ÂVõ¨&ï2`ÎDÙ‹3Ê»‚Å–@Ð!´ÇWÜ™ß}ȇ¡Ú.žˆYˆm®>ì÷a•±‹!>U¡*ÑÍ÷è¨a_ÕKFK³Ìw¢JC8®…pT|$Žä1ȵH9Ws.Šßi4‡‹:ú=­I÷c2æ£ jêþ¦Ù¡ìɇ"8 ˆ]=‡Ý¯pvŸÃË/ÜW zñ]ûvAGå â2`¬¯B!²‚RRD/ÄÕÂX^¨“¦µžÖ ½ ~g§e¾ýç˱ðC•í¹²Yx(®ëèž#vwÿK­L%$æÉ0í*Vü{Ù¢i,àfp=ú©í%Fño‡_ü¯–&\ž¦ˆÌ׳Lçõî¾þRóõ¸:ˆ©?m¿…%ÛÛ‰\†mè g…êYEt[ƒxsgÐAnb2llPbƒ6™²S¼´±LYÕÂ-~YŒãÛ´¡¢„Q ;Û‰L‰¾å…ŸY½[4"¥²ÖI§ÃqÇL¶ßªDÖ²«‚·½5Šû÷¾_± MÇ \úNj£BC'& [h±NDÑHºªµ)¦ïÊ›kb€ûî326s×q#açå”? ï•+ô¿² ¦°Lè¼RŒcÿxáÞD`—²àf‚”Ÿ•û…“ê\nfMÃy¨¦O }ÊcßSv²†8üN„OyÃù‘¾¶D5µfä+&”±øk1~‰ŒÇåïO5oØ;±5Ô ö¿ò˜ñ¨øOŸUrqé;ŒtiÛ"Q‰±HŽ#)ÜêÜZYwÊüù|×ûëªh²û%‚}jÇ.m%6ò {,¡8Ð,_Á;³.(¤¡¨Ó¥úc‚z‹R:þ"msž·Ïšë(ȨCÍÞ-®_^‘#èOíüqQ£<‘jJ-F¨=•=ö#†4wĶþ÷þ´’αÛ€s‰ŠIÊ(“W¬v¨ £o´Ÿ+n~&j4ë´Öë±pŽQÞƒƒÊÆ•«<vó?ã2ôž?.æ ty³]4%â sQ üPnÌ«èüÒI2Øy3ã'R¸õn†C®ynku¨/&CÒÐ=§GçIWã0A™Kmõ íz,ÕâY *„8Ä`ØEhĦtqï÷ÃÉ7¢[ÕX ‚fí3y Ðó¥Ñ"WúR ©m $ÌP·lãí“B¥QÅ„Õ77Ø÷IˆjôÒ Dâð_8aé4¨³”;^P⎠ûe…E¼IáÐ>ÞYQ…ë «+eý£>Ï«¯=Z¨´µ©€³£\¤ü€ûJT‘£é&î¯èNÝ× Ý„Z±i °©¿bñœÃ]†X—Þ„Å€ Hñ›é³^—Ïú£œzüÛ;Õô`®{<;i ‰˜J»gäZͰЊîÂKk–[¢“q“ì/ëˆÇÎÎЊ¡i¸r-†Q°ÇÖ¿ŠAÞ¤Ƶô‡O;=F|hXÜðêh³ñÓÜjªCqšì L4QHTçÅ øN²ïÜØ~©ç{_°g7˜$ڛЃƒâçS:–€ìWË›R‹¦I®§7líEIWd_éøËù¶KëEì€$hùÍ~!¥l`¥E)¯2 ª’ñÑuÒTÜBu”&A%çŠSp;MuîÜɃƨt×ö~ ¸ò;½ØÒqt—ì!üGßÙýlXÏ ¦¨¬vˆ¾<¿ØøÃÀ±j2›Øe³Àâ <‚6;Žxy{´ÏJ™;‚Ê“Múd@¡%QÊ­Eg·ûŸ²ÙW}†Lh÷ÈCæñý²ƒ©ЧQ Ïuuu²q†2ÓSòëg2ïæbm¢"Ÿï1]×;`P”y!QTD]2Æ"Ey£Qëd.”JMÍ·Ø"Z×zÁdH"¾®è§·«W¾— ÞÙ©¬àŒ•·t^×{WxM;ÑoSHÜ÷\uí•Éú½|~{&Ú=T–NN&[ÇÏ v[=ºUJµšš¿q’>lØ>ì"Ñ"mh,/QCÁôZ±­K[x.§ßäLúÅÿO{½¡xcnÓ¨~ꦊñMÚóžOßñ¨É=F¯Q]JNì]‚ÞÍ &s‘iTo|¥nï_’àáœöu=ƒ× Ò­ü¤8ŸðL¨3€l(ŸÊ±Hní ¤h–•µBù°mÝbãÁÄÝÁ›ÙoJ˸‡qIè9KánÞyÄ@“l²iÂÇœÞ3ƒ=¢¯L 02Íâò2;MOU«¦áÅ3¬ÙjÖµ÷v¸î#gmû÷;¸gX{áT‘"Á‘óŒ(ÓqP€ÑdbVýðõûãBÞpdVzí0º!'…–™fúgŒ‚”űâ)¬à¢IHÈ€f×·ëÏöž›ñÙаÂ/#ygþ&'5ÑþìkÛÞÀó=lyz¥vçSl†0ü xkGßÕhæJ¹õxŒ…\PõGKó9üHXКj»pCR©pòoþ韋ÎËúsÐáäÄËZ41É^tI-ÀÚ·²è¹PŠMuÉýŠN3®cŽ(ÝÜÈ„#°ÍS¿ñz)év5÷º…Àè½:Z¸õ Ð@Ä%n÷ïbg‰2/²+ut:_ùi©R“ÑÅXÿIÎèFZ˶Õç¼#ô¤qtoÛ¯;f”_.k¡ ‹‡€[%Ò~´e|­Ø/¿ ˆ\ÛÃÖ7n#¤Çh^Ò¢°õðFÿÝ¢—6E¦9vj«È¬‘ÓŠa²ªDÄ´]XD–=Zv‡ûFu¾}°°w.­*ª¤¢!–ÂÅ•ŸÆÜùpáeɰ‰ây·fª*W'E+m:% ˜—,õ3x˜RZRxÕ¨Á`{¢ØÚÖÝL° T/éÚ&Ä€½›ÃØ“„AM£þÄa†{"·œ”A|ózµ(ÁøõΡ¶äó Î’Îëm.ßÉK›]}cýß`×Ãzy˜n x+òÓûy)YÐ}‹ÂqË:*¸c%g˜¾5¸ì¤³­+i¢ˆjjõ‚õÓvÆ£õ¡Ùø'f•ðëÿ%ª|žéÙÑ(uäQ™>ç_Ây{éKL .RØÜ=í6Ѥ.ºË¯t\)„\™Ä\Ü>S¯åc#?öSífÉ«²Òzï>±ePî½k—î¥_8G']Àj šNá*r‚Ïž{„aÊäC¨ ©^ûzVÿx¿Ð4W^ktrÔñ{®Ü/uº¸ÕØÕó±Ï§ÉÊð/‹@:æ e'׿¸i›@„ ךãƒrc‚Kp¸˜q 1ÑcÜë5Šu€m¡4/zÉŽ‘â ñ2ý8,/7EŒf”çàÿ JvÅŸ•ЯºåWyNŒ'âöÃP£×˜Ùü¦ž%†ýRuUY¬Ü§ùõ6®ÔXŒ`e$Qý£,E›Éº‰s8Þ‘ÔÄ ýéèV|®>¯u©eÙ+N7 eÔnÊ ©øQ«¼R¡è€° •eH¼jͬÒ5±5²Cp¨þy÷:OøP³Ãc•ÐbPèD+²4Š º ©(cBùëÄN¼ºã¬ïXE¥´9 &°”ÎÞ^†³ÌñU$ ®Ëî|»­ƒêH«§C8i¸ãäÙŸ´À%ŸCtî”ËŽõT¯Ÿ+©ZÊäš‹gõ>FµÙç̨ñ¤È ü„OqžZ M‰ó¾‹¹üKX’ìÇb‘ÌçÌ‘yB¶øÝiìªe/Çwìs ÕÉ3ŠyÃYðÂ˳»óc£[ömßíåƒñîÊŸkÎ¥#"ȹìÿ<È«µw ÂaBõïS×ú{äsjDñ'½'U4(“S»óê Sfùö€‰¼y½åÍ]²FW •§]ó 3ö:)÷%S€ÄÜwhXLÑ^tE¹á^c­rP÷ÜkÝ€¬?_pÅÓÇßu@Øi•¯¸þOÂôöœôXIÀ¹¿;œÜt±Òöóš„{%!ù·7T@ÙA!µhšÐl>…ž±v‡qp¹†-‚Sƒrš5ì°{€X;à×@°øðyÇ«óm¢cŒÁA0lQÇWñL'laShž<õ‘o¨¼8:”ŽTŸ#^l’ Óî Â2êiauŒ¡ÿlµ2PWaƒ1ejtŒbvF¦4vÖ<ÆõèÍ¥Žµ—A9ijËᙈ¥Óy5ǰU“uÁ]ȾìŠuñÄ=_š/M#Ũ»ÓlÎ"-}6Õ•áOôb«àz­Ý‰#¡?AH¾` &¨>ÑómA]Ǩ1ŠÜ×¶EFºÇ] ¡'Oƒ9·§#yÓmmC«e+k™´$i⣞^_HƒGÃç·ï›Ýþ¹+fíË½¤ \ì'½*ÑÕ˜bF” W§Cš¿üÌø–îA]n3 ÆÉÓÆ&±·D Ðþ0#Í­ÒŠG6'›;‚e,O€ÑëþcYDØs"_£TØ­Ì’W¯ƒ>€mÜáCëÜcˆb~¬ðg×fšìh< ‰œ]d õugj&ÕÖÚ½®¨>íÀÆ,-öÍLˆO"#oÃI(¾ûŽòô¤ˆ¾é©z”Êq—wà;œ¾­½¶ALó¨É}—ÆýRZK¾#$o¹Qò¸•}¯ çTÙ)Xì.¤g n4?°tß9\$™ÉsR ^É"¢ß! ;‰?ô<—ž6-+b½ãçôC½'¢ÛTù&—îâ´0ô¹…v')ðùpÄæ8ìváÅÕ Á%¤Ý >ç`UÝÂ|wŸÝdÑÿ–4Tx>è’ë^«hÂs†àJBQOÿöM?§äÛÚàÅ¢vès7¯shPÚ«ƒ"æo~?88¥‚˜íÓµXâ¦02ÃñÚ÷¾=XSî€Ê"o¼U¾` îS*šà)¡°¹ ]–ÁtRoÅemx)y—ˆEõéÖ¢Ùö+wÉøæ+~$‚Ô}ž[)¬6ÞN˜z8'¥n—‚xš_ŠÀƒ§Ó1îÖgWU鼦^ƒã¡{J±çj·è8z¼qµk(BÌÅ2%• ‡7삽¸‰{}ÆÏ†õ&¥¤¹×šÌÀßz·‡¸}1u±<)n·°¬¸hÈÚ73”ra¡)èÕ{ã©l10ª@iès¥ÅŠY/<³UÒzýÙÒ¾ö‹Ð`z&üjB”k ‘ë°­åµKG´Ë0ùv¼+± Ä1ʪ\tW šÖš’¡Ü.1ý–“¤D=!x˜ÈNc} ð@n«¯[cP S`-rßùàçF³…/e6~pÞÁ ×™­“}~çBÚHÉÖ×@l3xÐÓé£XóûÆ¢7ô¸4¸#d³›iyÉ"àó(ÄK±k¡ÑõÛÐpèö©ÉµŸ†&nÒªu¤™¿ú]±CÎ.+õÙ0´ŒÔ'¢Íy¨ïð(7—üÒG‰Ð·IyRg+°“Ò“" V(*FÛ¬ï¿çðê—øv•ü;¾ÝïÏáÔ'ðíoøv©ü7ÇçÏáÙðì7øo8È[3Öñ¿B5‹¼Ýà.&VŸ]H)‹jh›Uæ³Ó#%·Íƒ]·ûE6cµ³ˆŸwÏæöÖ£ë–çQ+S(duÁ36ÜF_;7Ó~mÍ%ÁP0ÀyÃh#CÑÀ·'1Ój tMã‰2м™¼œRž(œÅb_ß"N ’m`ÄGo7 W‘~V-ý°Ã´$¦'IšñC¹ÔLEå™RI­qòa­¾-!u–T½ÁÒ‡³æH÷Ä,:‡Ò¥³NµsÛÍ nTàX i=º {É'd2–²Šœ6òõеoøÀ¬¥ÚØ8ÜyÉ $Ï/nH¦ôq\2KrXærqb-žËê{cÍþ>É&ˆº^º–z»q^üŽŒ”¯ÑÈ/I©|¶P<ŠÖwM³!NEb·Ñ=¬PiT_G £Ø³Ž¬Ññ²lö·ŸztìR$W‘ßÙ®†ôrã1vU=f‰#­’  p[y )†e¾\~B]ç*é+ü—t;[þùÁ?o”…*䊹™¯>ý*J#3G€mO(w½:¶¦üd'ˆG«T (Bat¥Lv´ÉŠ,Ÿ7¬ð;4 ö}µ½‰¼¼ÄÝ‹‹¸X¾‚98‡Î§Ò¤A(Ö.}Rf‹ý­þ‘>C¡°úæRŠRPÇÂg:7Ä~dÃ䉮¾ŸNèr7¯Òôš{¼U4Å6Ô숧•ùÏr† òÅ]t§¿«ÞÜ%^*DËYBÖ)K݉?7XÅgoÂ/ä8/"x! ^@ɇ3ùúþ_£aÇ•¯’AöU¾4Фõ7p‡^îð•§?WMÍ×Êb²”æ€rãÜ7ÙD$O!Û!ÆjâÂ- EqÏRJUÆtûˆKV¥2U·.W4·-ê<ØkuäÇf§~àgWAJ¡chþ+kàO†HŽ¥ "ÚÆv.­ÿzÑ 9ZíyOšþ«‚é>4ÓecíiS0|˜ÿ‘}`_¹&Ô9¯Ø» cÞ¡›ŒX²âö"àñjèwÀnþMVS-!ÎÒ«Íð,:·¥ºgQ] #¹@Ë>Ùb8>o8#‹Ö>ÌM~¦“ž’BÑÀFƒúµÍhP®¾™¥Ú³&n»]\ò «$=®u–ø‰ã-QFµæÖ”–©çŠ#iX° ‘ðÂ72 {Œlç^p8-œ‹9ðŒýõâ1¨l!­µY±¢,f°†ÁH·§üYqyÓ‘~†`FÁkŽÿ<‰„µ<ª•sûý”@OhÀÒ³À[§Ù«f˜åj Òz%Å1Ohƒî±v¿¶i+.Ã$/ñ; õõsíiN¨-«Ï|§#MÌzþ”èw»(\k³“¤V;´‰% ñ8–XS•åíthæmƒª À'2¨e˜T9—eõA뇲œ/+ q¾‹Ü*÷gì[œú<ù0À²ªe qž[L Kb‡xŸ‹«ìÐ÷Bï87 üÌ¿ð;Fµê:ø„-Ô%ç<d4L+µâ´W™?Ÿ&Ú‘ƒœ-_««?xVk™ÒÖúÌ„VôòÆÚÍ}êª{_€l*h`7ÆÀÎ?XádáàWhðíÙ×§ÙȤe3Ð Oy|s\¿ˆ µ*A¤eªÉ1è”yº†—ÌxþŠ0÷ ƒUO¹t´5ºòiÕ^ú¹ã~å9Õ€GÎ ‡ABJ\„”o¯¼<­ì‡NàLYƒºSô*£}RV+}¦lG\UbE½ѰwØ­$î“7ã™z»^…·ëG1|-üÆ£¾Èß³Û´Âkx›æä¶eÕ9ú{¦S¾€N—µAÁÿl­°Ìß%±Bß1.>gÛØZïä&‚­9]h{:wƒ5—Áx%ÜGz Õ0v È ZŸHmeÊBZ¹¤–ö¢WŪÇb6ÔØõôJ™,7ôéŠLüKòÃ(>]ª=n¹2l«BH¬¿é’ôÈØ¤ëûþ­˜wU"}c+3Q6`úcÖ#IKíšœ×bYéÂܺí+ºb½TоŒ·°—»{i­È˜v§ìlµšÚO/ŒÐû³À-«3t0ǩͻ~L­NdWvK¯~ D(3¶·¡$_Ûc@µäÆÂêðGŽ^/Ð_!ÀIÕ$ñ1èûm:0&1Á°Û`ۼߵ ÜÔ°‰ñìyL¤–ûý M¿æ] ñf7ÆV=ì«~-ïeQ­²x2ùzú§U›³ŒêåˆïwGãÉÉÊqÙ,ÞÒÜ3°¯ÿR5§—i°ƒÂÝ•<8öIØcK:(âÑŠ!aν­á°¤S™@b »© 5µÑרÄiùNGƃ-9‡Ù:Šœ³6±*¾kesnC|ñyµ¬DÂÂ`!: ¿ó7›ÖqÐ]ô…Xã((:®‡ÕéN0“? Î —;€ŒÒñ‰†Ïž@Zx»xÜðfáüY9ÅÁ*×®Á«ì槺¬nV*l ±¦Ô9wúIÜ<Ç|]þ?Ꜭ‘ÒpRV(aZµœa7Ȥ-¯VL»lG]q÷ý4ÕH°F~#'Ž@yi#1ÎÓíâó É{kf·»ÆõºòM®P£ÈkPóYî¡à…žŒí<ÓUîÖ÷ÑUGxA 7ƒ¿º_†ÄÏ’×äGÿaRFÛ4nž¬:88®L/¸âÜæ»Íãs(`’2¯1Ìmj-$%SϬhâ"\->°ÚPecË÷þÐúѨ‰ç²`÷Øë\›ùÏáv×lœðÎÌ…Å•¹ˆÈ1ý­!Zw/EYlݾ€ûòCÛ°× @+æÌîç¶”iÍ-:¦/4õ3Êl»’*É5Ö|'ÀmŠ I[aäÚzœ’yÑ¥sÀ0”¢Íû9×[àÛ=dN%’£f“sƒÁ/ãacÒÌ7\Ì §»Þ|®ë ëÞûa(ö¯6i›¹¤€‹deÞ„8¬±ÐÓgŸ¼ òÎ*_1zf¦óàŒãPŽAɧX9ý]Lô!óž=Üy•"¤D¿Æ,Ì’rèðwA‡™¯eqê¡>áÿd:ük(”®#™‘j-ÅLù(²AÖN87 9r¼®’Fèΰ[@»¾„(˲‚1t ÔÂ!Ê€tÝo¸änùß\©™OÓcÄ™ÖÁq¤t?KuÌ-æQ ÆlÎ\æÏ‰#´0ÔÔƒë³ljw_v.¬4òkU‰£ªBA½½×¸°.ħR3n½k:âUsf—Ïœ…ì·Þ£ÎIâ°RÆ)Áo"vCÉàQ’_Êt£L0q–*‚ÿ Ïˆ×Øµb:S¾ÿ;%ÙÚ·yÝ4Òwª¬ÌUVÈ%k®Í ?×॑É;6£å!ñ­/{LÜ–úTÙ¨ˆÉ•Æ8Ä@<ë“ýÏß’\ˇŒ¡³Ëmû}»ÝSÕ¢k~5?rªnWÑõò…‘ h§‹ |<…¿•OblzXV™ªêª?¬ UÄmoá²¢Œ+ý§Y0‰ÐC;wñÖZ—ÖñݳÄ-Ð)V@Úqaó?;o2P¹O®²½µW@k4¢¦;5º[z¦c%6¦†6LZ‡?®Ó—ë m{ƒú I;PÄõ…83è.&“WÃ9}kx±Ì¯Ñß÷NÐ »‡ìE1ܶF;­ì×”¦ûÁþç÷mEð~7áºéKë÷ÉÅ4¡Y»uoš,>áYbx´³´Ç‡h3q4næºdûØ„‰R”9ñT)Ë¢ ˜ÍÄtý¦+‹ºNè¼)ôä¾–`šQ€Åu!å//ļÈm@¿Á%å-è9¿“»Sþ”#s4 œÈcQ9ÓütK±KN¶‰!í§ºE6‚|¨Üam»eCŒžÛMK¹7yEo“[ èy­÷ZÄ¢Z$Û¾k”ݼ‰²îáòæÌšT‰ß¸œébþRzf$~ñažRòºŒœ5¨¿†²ÒIÞ~Ÿ¾ˆ¹\ÐüðÕóúeWV¸±'ê„Í5ú¿ 7B¦_•2YE€y*Øl‘‰GÒ˜ŽæÐµÅK°K MKƒ ¯Ø”Di' è)ÐÌ{Ÿ`!/ÿjÞÿ©yˆÇdÞ7– ¬EM=ƒ Ž VpâZ£Ð cçÙ9‘1›2¥±dÂåû_¿²¿.ñ®¸äî³mû,w”MÔiµì‚ÅÑa5÷®$­ä©K³ ‰º{®¬›£­ý=t»íuø©Èdêã{VæÄ¯2ü²^Ã÷æ À|2ãVTT-|aFïœÎø­];wˆ§7H-­/òhÜ4ÍÍÐ©Ž¤Ö’NŽŽá ±ânñJî¼%^ì}$:ó™ëÏAó /ܧ#bAÞ/½(›ûå-aÙÆÆi'|Ò÷=ô)–å²øg‘šû&\ b%çñõÆnØ‘eánéR¦ãûV—JÏÿxõ•k1?ÍÓÛ#•g¸ˆ} ²¼nÅÆuHsÖczK8œ~«æä—¦P‡C€¦jøEýÙ_õZy=y㽕ø+¾™îŽ'©ÊXH&ÒœÄÉß—««¨h¿0¬™ÿb±Æ)œ’Y÷·k7xð©épìFÊyGÀ¤Õ»k6Ï‘L •O:œ¿:e&HBu¶²ËA‘¹Ò¬ÒaŠUKq$Õ‰Â[ß»%N¼ƒ÷¥]†aÀÍÜĶó¥q5)´OŒžæ åklÈL+ËCžûv°xC½ eÚÑA¢ n×å”? ï•+ô¿² ¦°Lè¼RŒcÿxáÞD`—²àf‚”Ÿ•û…“ê\nfMÃy¨¦O }ÊcßSv²†8üN„OyÃù‘¾¶D5µfä+&”±øk1~‰ŒÇåïO5oØ;±5Ô ö¿ò˜ñ¨øOŸUrqé;ŒtiÛ"Q‰±HŽ#)ÜêÜZYwÊüù|×ûëªh²û%‚}jÇ.m%6ò {,¡8Ð,_Á;³.(¤¡¨Ó¥úc‚z‹R:þ"msž·ÏÞb¼ãd-[I‚rköXy½ÍR5EË¢>¦|nÔÊŽÁ³ã¤QŸ8òQküœ#O§5Ýÿ©1Ø´¦K ‰ £~h:ûS¶T¬ç£Mj’’㒚ЋLM1DjÏ ¶¥aI]|Y±Â¸U„¹ gù9¤ZÂûÛuÌ¿Ýõ| 8J7ÅAc§%.B§ú‰¸rûdìÀ 6æ’Hü?}¨éŠ©P§ÌÉå  Ò ¾e7UZ‚§¡ã!¨ ³ñÈvÊþ÷ÏU²ÁAƒÝ(ê¹âé5~.ó41ü• -ÝÃíñ•@¿÷½xÙ‡#¾b?r©B“º7çÀôV`λ”DjcµºŒ†ÛvT‰ZbûÛ2ß*Áä*b3“ž,=õ6\@$lÖO…Q6ê´sc%¤¾=„/ì9Ñ áÞª™Zp x˜G oÐxÄù1¾~ ŒÅFO€®ÌüÃ*Ÿ‰Ò4€.«<;³/˜Ûõêƒèó¡m:‡(Ýý+¼" /‰ê(z?ö{ä7ˆ5‹´aúeƒ¸=s±˜CGqý!Á€µS°Œ!Œ©a>º,èyq…H[k@ç=ƒ’dBßKUN4vRE,’ ©ù躲Eç¶·‚ñc‡pg»î³^ŠÔªDUÚB:Ñ|vsÔ–aî¯?=ƪ¤7Ù®ÂÃE‚¡÷¼2±®FÈgr ̱Ã)¶ÕÂ@gä ‹»ƒ£`RÁ×»Ò]œ œmÍ .nãP:Iá˜ç&KE7«þk—-õ•–¯¥¢6\E º{“ðj›‘dOÄÊ/ÒËHs^¾™[Êú#ݶÑÁd¥ZÜ€Õ®ÒñR¯ÿƨt×ö~ ¸ò;½ØÒqt—ì!üGßÙýlXÏ ¦¨¬vˆ¾<¿ØøÃÀ±j2›Øe³Àâ ð2àÊUɸø­SvÅ À0š;Ù~Þ¹<”_ÜKrg‰4Ôõ¬A—ì¦3í‰ (Õï5¦S’¤{¯NO`¼–h˜,üÞÛ}‚%­w¬D‚!KêîŠq;zµ{épÝí–`G Ö9±°Ç »*9,Z«¹€&s)òmÍÞ$áÒ<°ËÉyJŠ¡3‚#) “t2ñí\N ÜØž÷vB9hß³M¯*¤è`\»ÞŠ¡£HY¦Õ%˜¥°¾^3µS»r¤Ô:‚ÏBŠˆœÆÓäk{,qŽi :7·›nàBü³ÿ|¢èÝý¹QÝÚ!8Àh.½A#.µ9ŸäŸáœöu=ƒ× Ò­ü¤8ŸðL¨3€l(ŸÊ±Hní ¤h–•µBù°mÝbãÁÄÝÁ›ÙoJ˸‡qIè9KánÞyÄ@“l²iÂÇœÞ3ƒ=¢¯L 02Íâò2;MOU«¦áÅ3¬ÙjÖµ÷v¸î#gmû÷;¸gX{áT‘"Á‘óŒ(ÓqP€ÑdbVýðõûãBÞpdVzí0º!'…–™fúgŒ‚”ű§æKê@b;û^‘jZëzô¯Ä uÃÑ¿9igþ&'5ÑþìkÛÞÀó=lyz¥Ý¾MR~©ïåqÅFCý &#tƒ7¾=<Û ¸Ÿéî?Ò2“†Õ?){ìéè°M߸íw¸Ú:KzÈ…•éÑ5 Rn¿™¤=X\55o‹$)ú±K{‰‡ƒχ °Š¼BUPUâ•ïQØB~¨'z¹5Z¾™¹ÃQŠMê±C†TLÊ0*JFW³ì[áÞ ©% ™7ûù." ߥeÌòÔÅ4PX³\à©xß²ïMµB¬¤s+Už…N™D1;ܬrÂj Z)u×ï@ s™û1ìGSo-`~KÌOOé:7oyÆV|äN|48&nâÊÛ‰©m\.ì:#B…ž-Ä¡÷¥8‹Q8o¸pN³ù³ž¤Ç“K§*<5‹l,ÊR»B[È• ù)­´£<‰Šñ DW^(þy¢ÎŸ³è~ $éÑÔ­ŸÖCîvqé!;¤\UxÚìŸÞé’–l;4÷îR ³´X™R%Aw'*º‡)¶ïbk%&@|`ö'Z25‡'ÞÐ?pßÐòÄ#n,ÖˆãÑåé0;¤ð0åˆÐΡ2su@–?#osMŽÛñ ±Ro^Ø+}ò\ÔÚG´ ‹iæþC’6÷é"ÃÇû¨#ãšÄéi,2œÅÀÙi=wŸ³±õ8ꣾ­Ðг/6h,3ÍݰŸ—)Õ±œ1Ni”WJ3@Àî#¹j£¿œáЙ(>Ysª@äô³ŽFq}bƒM[žŒJ¬²6ßì´ ÑM =À„ج¢y‚s:θg¤À’ÕÙ+vÎn~}Èïé©K’³N+ªjA‡÷‚^йВÿ1ðÛÝÊs £’Bl(þ+¼õáš¡cyaÖäú0X¦z=ð@û$v¸·w¬b w»Ú°A \ítÝýs—ñ]Üÿhs˜õÖüô/tÒð“ïïìÓ¼¬µœoHêaó˜s÷+/wU¿=‰³¹P‘(íšÝd‰ ßü9‹œg|vjÌ :ª”´;©ù^ŠðÎìmŠãñSn YÄöí®!S<µbÇ`Ìî7½bPô&y~”tF®«þi4x¨LY8o/=ïI’eÀÊiÛš719…%ôaBxEú®ðƒB¸}A y-3öÞžÎÂ.™Ú–Ï´>BmT·¬'§º® 9¢w//Ê­ÙÂÙ­è®ßÑ-t< UøŽ˜¾"çlË@ã.ÚÂ@Š1¨…³“é1¢55–(MUYœ•lJolÛ%Ï ò²˜ÓÜÎ ÷õ…›åƒñîÊŸkÎ¥#"ȹìÿ<È«µw ÂaBõïS×ú{äsjDñ'½'U4(“S»óê Sfùö€‰¼y½åÍ]²FW •§]ó 3ö:)÷%S€ÄÜwhXLÑ^tE¹á^c­rP÷ÜkÝ€¬?_pÅÓÇßu@Øi•¯¸þOÂôöœôXIÀ¹¿;œÜt±Òöóš„{%!ù·7T@ÙA!bÌÜü3_@Ånìh\Ã)óì•ÊÝWþ^ËøˆnD´&a(<¬¼ãÀÎÕù°JÿpPI¨»E寋N¬"/¿‰OiûN¤ömÖ/ð­j ú’õ¡©ëÒ¹D>ÿ*Ñabñûxd³,Ž.ŠËÉÅhš‚‹j&Ä·×…1Q™ÀXS¥DØn°#¿8£ÚJ`Ñw·}0l®^ðà) ó±;ªâU¬ô@Åĸ…Ý~q¥­N¦!2²[‹Ð6ýÉÌy™è=0” õ]Jî`¬, í3µ;Å„çpÀ˘ø&f†œ"ýÉø‹Ål±˜’NÔ°t\$Ù¨·Öˆe¸â›mJ<öâ–ÒˆˆÕxŠ{åKÌ2!f+'ðL5+¼G«ú¨œ‘?w~äà£ýСŸN“.ùˆF-÷¢‹k)²pD<Ú>þèܧ)<ÕHW1Ö’s™ ”C Gx(‹–OU’%ë<‹æÌp::´’ý7¤*}{ö.Ççi…(¦9ˆ»Ä6¸òí¹¸ã壓 "šD+Û9¸Šm!·Z.æ¤+ åé¶[ Ê cuUàZcMÌ´ù. 5àY•‹«è3ô¦×«žõYÙ•¨wél|iäß÷%¦ 6ÂËè½?ãùÈŠ`ÉAÔ¾ÈùÓÒx ¹TþUœYnÅ„$,,Tñ_å-¥‹¢X…¯^uþH’½Y vør ‚ød4 ï]'ºkXø‘­…¾Å©¾×Ê"C.ÌR·¤íô™í¹R1£›û©ª’ªn(TýÜŸºìÌ>fwIž—öM?§äÛÚàÅ¢vès7¯shPÚ«ƒ"æo~?88¥‚˜íÓµXâ¦02ÃñÚ÷¾=XSî€Ê"o¼U¾` îS*šà)¡°¹ ]–ÁtRoÅemx)y—ˆEõéÖ¢Ùö+wÉøæ+~$‚Ô}ž[)¬6ÞN˜z8'¥n—‚xš_ŠÀƒ§Ó1îÖgWU鼎yø9¸nQ6«¦F+ë-Rä´úŸlw±qô R°¤7 Åpï’üG1™“¬u”¶CG¸…¹"¤ ­æ|þ¬~ 7l€ò/óJQx4/ô¹‚¶TÍïõ¨^®Õ²MÏ&¿É2YžÆ½qQ"ÁS)2é«Ðº×G·æòˆï"ÁÎS¹˵á]ˆVáÆ=B¹±ý²r¹–…aüE”¾¾¸âáÞ©‚Bèÿ+,`À6\¬–!í¥*@WB9;±é4×R€AC‹Ð$àA+Ç÷º×ј&HBÝ ~^÷ å0óõû6R½^IJuŪB׈ç³Xá˜rvòp=Å#oQÈÚ.]‚$¥S4Õ[p€ä*®èP±òvÆ|ýœÏáÒÜ|þ ¡òvº'^ñü:?ŸÑ¼|ý‰ƒáõ¸ñ@«BíeȨrت3.Ý]üô 3#Ú3púêÜš²dã`ÕÕõxGÜæy~ƒùǤÖËwÆÚº9ªæø¸4Oþj.FåÞó2„ÊkÔÁ©Z¥Ö†ÎAðÁ^^¼æuúAŽ• ¶OMân: Š<¾n#–áÜë ‹æ³Ð»ºæ‘k~yÓ´†eÖ3­ÀVˆyµXöz›?ÖY["²Õ”weÎÞç9ûÚùœ [Ý©e˜XºÍSÔ%<9ANAWÏ}Ça‹±ñŽGîÆ“Ë¬`±®sZ Yä/õh]á_Ÿ*®ÀM:À†*mc/vD!>½ãM•zdz²ÀæÂˆ ^Â%%OLV‡<Ê}%z¬Ó.(w6ö s6ÿfÅS–“ž8‘b”îPŒS°qð"eå-EBû±ðšŸ®HOuµûc;¨Cf. ,‡’—4­TP9KÖ›QV˜e¸O — Ûéšeš`J‘L½‘êΓ‚6l †VÏ|MO(l:t,x lqØ¡m÷úãEFbòrh½YX´½ü¥ë”ë¬q9[I%‡æaÁ‡"ŽëÁQ"Êz©—ËȯMyL¦mÛù‹æ†Ð¦ã6­½b…RÉ üg¤;"ÜËóA8¶ð¦Ù[JÃ4'i LË"¿Ð _rÙ×ÕskÇ˱{xcÔŠs'¶bP;"Žj(\î¾ ŸÕgí G\£\ìrQ½¥¿(!rÊ,f¸«y†Þü9›€"<99QËHp\{Ô¯üCð#ëwߊ‘î½¢Ù N{¸—upµGákgÄ¥µûPmôß"Ûó>Oþž~@ÙÌ YÅÝù²ŠÛ‚àt9cp8õ’ó10åÑ#:$®Y—žµ_€²¯·æjl²‹/NÏH¾q&wTâH#$FüDóÙZ¹è½V…žqhó1ÄY‡.Ö,á˜{Ҹ8ù:d¤ÆJ ;·“7=æx± ÈÊ.M:ùê1W|žã{½ cuˆš1$(ÁšiSϳ$1mpÿ¼sëÆè@:ÞáÆ^‹”(˘ƒi¼°Ñgžœìb`Ì¡ãH´_tËݔܼû­]¦àŠO/®è!U( •Γï0ƒ¯ò]‡èÅšƒHyjúÍNQ'í…åAXÈ•r>ÜYßÇ—NtùíÜR]®*´›!çfâ Ô•MŠjo`ÎÐyYŒ®Òü=a@|„sµÙ±‡q„µ:™¹'oA™£ø$ºúº¾œn ÍÇ„~'&|´â¬ë1@Q ×¢RWÍ/–ߺ¨c>$Î;¥•€û["¨$PM'ëGmÝmsžFØÖ…/€ã>¡R•þ4ÚNÌyé•“ŒØ,œ¼ã}L ®ý}Ê z†U®QŠç]´¿‚’ˆo…éÐ,£\Pe¤[–ÈÊi¯‹ê¤::)¶ô ~«&£¡æ3X€>÷Ý &:*Jäî(âÀ£i͵ǖº¿j#ܰyM<¨š8-ŠXé"ÿ"ݬB*vÿ'Ei ðE¨ÍÊkàѬÃ÷ÇÁ=«d%Í—}<qxv=àú$Ô‹áRIìˆ;AhÅòí¼‚ºÝ¬ŠûûÕPV÷a-¸#p-‚«=f¹Œ‹ü^ÀóIa3ŸÕF4†¯°H2-(·-l§äb¨ùi`¿5 ºƒ“²‰«ÿ>c«s² ÁÈkœJAžß¼¶¦¡ ñîÑúÇDÂKÙý…=¾ ‘s¸©U•å3Q»4o"£ÓæŽëˆ«ÁÑÑ¿²Á¾6•Ì4(Y0ÅøA©´xªú¯3JX$ÙðÊçe%ÒâÙÑ~>ƒeƒ#ÿcËoƒšz•æ"™ åLë$£p·˜"m Ä#»9ùD9-‡ §r@è§§UÎYU€£ÀþH¨üšÃÞð}Oà¸ýPRöðWË•a›Ç<Ý×:Š’> ’jžÐ’3ˆ›é=&O<"Ût®Ì̘Ÿ÷*÷ƒ`òý{j´jøH±­/HD•E»¬ ëžeÀï'!S¬†HÃü^ÛL³f$™:Á¬ dÁáTÉme4Îcµ^ÑûÑ’Êà.üjø&e™ (´ !²/ÂŽ¹Äû¥²®jè]b{N–®W­‹ßf†Y~w{Áêlÿ,ªô-ôÿ½Ü°¹á,ÜÄêXt–Ôœt_Á˜m_Ê ÿdö9Æ“hUÏz´°«NŸðð«#Ôwèå÷\ʺª˜âã°–­IŠr÷†Œ¾ Ù ïQ%4ÉçôFeÅ#k`Gúé­Üèê‘ò¼•ª#nïqºÛ¶B—»i¨±\ºó®¯wA ¨H'寿éýßš$ŠªCwÊßQ¼ä$ ’ʸÔqnòµáî~ù(î#Ô_8³ç(Šœ½K•‘spž€u±§óBÆ’_{ò¼#=1¸_p·sf©KŒ© kDQñº@½- û)â'·ÀcÓ¾ÆÁ‘ÿ@è’$ˆÁy2Û'ëÊ{Jµ°$HS_WÎéŽÙªÍ»z˜-Ž=Õºp[ðô+3ü ui壟X½iªÑLGT Máþ&ËÆîc›W´x04¸¥&e„R‰ñc’U#úiI’û/>ÈîÐÁÓÕ"wžzÎ&wä®UMpt“>bí¡øŠKW>S(*8Å;!–¦®+W ¼ëƒ®g6ìÙó‰ðëÞ’LäŠg†0ÿG° o¥,tSæ)ïÝæbUµå:®p¢ˆ3×oî³Ç‹v*1ŸãlçyeÚ pä2ë„ÂÇI1抢f±³êÒdzýÙƒ>磞ÝAdËû­Yh¢uÛä²–Ë+Y·h8áD}¿ª+4%(áìJ³rýNë€OЈ CRSÇÛŸ£•“G\‹œœ +×rÝ .U¯¨Îºcª7æÔˆ‰ßl¡C¥Þ¬Õ0ÏEs I3ˆ¼­ú£„ýé ¦Ôç÷‡ QÉí§¤¡Yå µÀéÂúh‚v/¹þ Ô¢e¾ûy¡b†3!í£¡µ ¿’•`ÜoSvüÜbéy‰“ÚÈ®ÞýOÛ†H‰s1ñ¾±Ï £KÕ!óZ-I¡»ãZ›÷-¹b%û(H!6ÛŸÆIˈ±Á8Ú=)¹_n¬ŠjP¿óy6Ëëëjo¥ÒºçUb1‹4æ”>>›”Ä©TÓ» `dY¡ýA$žÍɉîfMeæÙsffSñoÆ"SÊ—zÕC‡å±«‚Í»mªµ]¸ÉÉo/úDVç<ÚÕå¡ ?~é, ¶bKþ¦à¼×‚æO€H ¥þÅŽ<¥ïäO?ˆsùʱZáÃp^8OzØòÈ?º5ÂÓ ×ñ4 :SW Ùßù´çòøhGñ÷1VWßö(KŸù(^`ûµ&¦‘#™*¾b;gA|tÑ$Š¡Ô‘%I™]²áz‰ŠÒÌ‘ø½ÇSâÃ6ÓMì6VÃ<üÚ$²ŒW¸6ÃujÀïúàHÔoì™'ŵ4ï™§¼n6©ïÍiÞ!ʓ׿¸Üó> ­®lb_×6ÐnF>m´âP}ÀëÃÍìͲÃÁ˜UNÌÿ}¨.ïë¬ÒÉ—?%"F@ÜvÉåŒÁËñ>Åþrn{4j€;ò",m&YºÙmÐá^ÏÝK÷Õ¿«îãÐPÁÑ{¼+†¬jJ!+‘ׄo꯻n½Ý¦àx>YßFôö½ÓÿMi˜ÆîÅt-?gì*WºÈë#1ËLYÐ'ù”fþo¯¨®Ù6„!Ýüä-ÒUv¡÷ü¼ ê;ób³óð#2òFª2`|†$Ô®ëd$¶Ê­Ìf »z*¹¯Þã¼µyfoo¨¸Jž·©NêœýäªGï¿öˆ„.ü†‘¾ò¿Â÷€ÂÁŒ¯NCiÙ[¨–<Çá" JÁNÖ+ŽâKùJ„ðÀ8tÿ€tsû.jKw† ¼¸)„ô/Õ $òõYQ<äðvãì²TŠEpÙØXãåîžYؤRíA2:l©Ôÿú®O¬½—AHÙo0¥Ë»KŸ®ÕáI FÏÂŽÔ·ŽaÌ¡ ÷`ÂD–!#j)«ž.,^]Æ}¸Ã¸•–QêKeÌûe!ž:å=©|QèÇ…Tå`àƒ¼z®4š+€ðèˆýÓ†5—¾ÿ6À;¶!Ý&ÂîryYÒ0÷–eU‚æ‰Ø¬E²òex‹WA’)Ë„2ØU¶Áýq>¡ôeæb&<ã'nrWÛu=÷*Ý ‰ý>sŽ ²5š‘C­+ZÝ÷pLV„h©¾†ËH˜¦Hgã`pÞ'äð}DÑ$©}I΃­„rHà ė8XÂ_wiÞT¬7–7Å[3úñ¸Â¼ÆXÀ7ÿ+Ú#¡JöÆÄTŠòØä±Ÿœ†€nú^˜v§$ǃRQy|´,Zœ ýyWJ@Oíew ~Ȧ§aÞ†àÏ2ƒ)sóq‘¿e¨|„ÙBËx¤‰m)È:zÛ6|üãKÿ þÑC$†f(¿«æ8”åçŠ*¡×-%öj¦Ó£µ‘‘b[ ôæþǼ7DXj[ÙNË x+SAžÆ˜ \¥È "~Ø/àéJy°”ÿ1è–²ïµrIzËÆÉ[kÜeæWfÈ~P»ä¥aÅ[¿dh»(%pŠU×Ë%B|ïaI´uG„.°;ÚÁM¬(·HäMˆ¢>›p¶uòÒ¨¥äómI>6"G#ê¬Û>tºP -†nÂ…O?‹¶NùDËrd õŠp)ü±…¥uÀ±šI´ÜæWæ‰G:²É+¨÷ ã7¤„^ó´ØTBüÚ”gÉ2MR/+Ÿi„»È<„+ÃJí«A5œJ]X`HR ¡SfÊ#Ù °°•”þåª"†Ìåp.k ÔÚˆOwûT¢ïá“ùªCò}!SÕ¸ ]?]ðF”„³ž¿Š‚Î| õåϧ+âb¦Í·TÇ]ñ¶Îp¦$Ô½à%d“­4È‚ßáÝe×â®æpbnPâWô÷‚ܨ“D­94~eÜ`íOË®ŸûÓ…AfóÍÔÝ+xX´cðž“! Ùpð¿ƒù«ë£!°¦GÕŠM$4EœJ23R¼#vÉ>4‚›²&‚,×Kï‰Üù»õcÈÑ£Ãã\9‹–"D}Ž©]Ò îäÞh͆¾ÿ'78Ÿ¥`“ÁÞùŒMö4È]—˜Ÿ´~e$½ëiBâ?ÚB¿Ÿ•J}Ìt^³æ#»éÓP0¦š¢YZL2ÚÝŒdåÄêyÀMï’µ1$’®0‚A©“sˆ’ä§QòzKÔ('ùÞÜXû…Ú‹vøºÚÜOêÄÒäúB“MžÊ;ôlÑAêÇ[êqX¨’HK’xpÓ½KèE‹Á~ߵ ¢ðÌÍ9‡Ÿ?ú½¹ôÓAûø=+'öÍÀ¤¦¡,õ`dªûÄ+Ú¼€xvÖºRæj9SOF´¡h f ½@>m+>Î…¢M»ácþ¡Âg3 (¥‹'ÊM¶ígßxáö”pÇ‘;ùK";Èà”¸µ³ÅiE@YšÞIÙËRÒR•Ùe+˜·C§æ· ¤:¼f^öó{űØI¡*rˆ°Î[r"èráÍ߆×ê`šÏ6asqgâí²ŽàˆzÃ,=ô|3ßl n\Þ½$¸Tû)rW%z“O"hÚz o2ŠörÕökv÷…ÐGáú¯OÕ¸ÿUÐWêм_UË}[Ÿûz<¾­/Á|Û õlGêÜÿjº€å£&ƒ†¯ÏbôÑž>QlîVé”;·%ò}ý´#|ŽÕ@ÏÛi jÜÁUo™ºˆ6¯‚(Z»º-0fDFé˜f7šcެfq}A@ójøºŠÇ oþ+èÙÂSü®9øÆ&j9oPš™P™zq x ôQÎ}ˆDîäsŠ3´j%…‚“yFèòŸ7®5+pŽ”2êoàŠ>©rKp5y'n¤|“–ÖÕFgÌÂ;1z]îöƒF~ý­õÂ÷æÆ}J Öò;nÇ7 œ Þï¨ÆÍ{iŠX¬}2'Çqþz€9¾µ_\ ž™ä´ÀÓØÕ,SØmc9/oˆÒ~7B¬På\EZ°b/²r;ž‚–V£rSá”|JXdžLÖgÑ×m ¸?Âm¾y±‡•¢;8õ)(«Dé.ßí4šf[ú²ç³Š´Š|ðºÊx»WÁÈ?[Ïå2g y˜Pw<£È‰kG=AtÁP†š÷¥$™ AO%Ê·{ÆYìPÝcêu³ÄaºXØ5ýKï:¡ÎHH§¨ŒxÍ!2IÉŒëv¶p`ñ¥—-'sr`cŸ«nƒ®žÄ× bŽ|]xbŽ1Smg=uC(qIâ&)ý²yeýËô-ƯgúÒ¡Ó¢F 4= ÚlʰjŽãIq³ÿ¸fr-Jã´…<çš1¡w€GÓð‹ÿLëõÁ@Дj™"#Kц :”·[J«ì„z4ßÔˆ:×kC|PÍ;/•÷\ûÚÉB<ÿ H¾—'«SÙ…»4iéy!Ä‹é‘ è­ÞiÎj~Ás3ÆjÌnÔ‰µ0Z›ÔšÓË ³“ãßkdƒŸu N!˜´U˜lŸoOâa[ìI©¢yþ§×<'ð­¨fŽím ç% b?A JY¦  ÈŽgl/€«ˆ¹B=†~©Iz¦Xu8'hŸ;È& dª›´Kèžb6Kš‚7«a*³zLßG4-÷WñòË[¤à¨åÓ§œÓ {û›t1ƒµ_2¾b¯™ÊŒÖÑ…ÓÚÊÜâN˜çç-l«;x™–þJYÝn˜X"»f4p¹¡Ü7ŽëpàŒ\+`l—›Ï6 ï|¢>ÐÍ‚ÛA§Å—€Ðø@2¾Ã¼û§¯g§ÐáÈÏCmÆýjµ½µKÚåES£Þ3!¾RHáí^¥GÔ¡Öôñœ iHIuHˆÔ%÷ׇßÛÒA9ZwZx „ö ÌÕ‚¥›ÿWé’z?÷iâÀn$Žö0ðãÏckfàK2²­?—ÿàB.‰q ýÏÝL‚§Ä¾H€Åœ«óuƒÏù™dSW¸RíÒüµÂ£a1æòÏLxP¾‰^C“P”§å¡{KƒºzAtóV¤WþŠ-œDZ 1K!`vXK"e[C?øë˜Sk §vÊÀâû<‘@ñ·‹ 5k9UÞïÿÄÕ½Q]Õ‰žèN¹=Ö‚Ï¥@y-Ð ÐÄ·êNð™/¬:ån±½¿Ý3EavàðßÍÌ”gïLºX3ç9,¡òú¬9¨oíô³3ϰ{ dVÍ,ñËîќռ’+OÅ+PñÕÄãxA?ƒAÕ8ù´3JF²…oYcô,lpÉ. yrÿ 4¯î~æ•”t T¦Ô´Ä>yûB"Å •„¥Â”¡ö8––fÚžSDSHi•*3!ͧh¹%Cβ!”“ñ(Ü©AÏÄÚoejoý•9Êeµ_¶bsÔeÚÚf?È_Æ·¦6 %²Ìh„ö ”æG–Ò}ðpÓ8¨¸f¶u½ hù—{ÚÎ'¡/ž`=ÊZìKD-ïÏg_;’ó »-ýW+À±A3ü‹¿LꮹËqì„!à©3ƒA¢”z”ù24‡ªp-Б7M” ô'|0)&õi1ñôœ^ð@7?Äöó÷{ìªßÚ×õ—p?ÂbêDº… â‹6È9NÔ¢ºþ3¹öÂÿEê¹én[iûR*ýdÎÖßµ ápCÓ'YŸ*˜]øÝŠ(ßö\A¾¥š¬€Í^#ÿ¨Ôôq+xècapØRü<š†P´à½'ÙD|rלÎsÓìq›W¬œ]:EY*/º¤…DÐÀÐx\axãñêÕl+y©€§°¾TáU² bƒX¦}0ššÇ;Üèb›ú¶#^^µ†þoT&´fLàÁÆòÇ–·ÞÑ!*ôL㯊X³}etjÈÈÉ^®o¥ÛÇ(‹z×oYìÏq–ˆoFŽ”1Ý0tßlžðh\…@¯7ÜÉQ(d¤ܾìòi’Êû60Ä{zÛ2}>“7ÎkÄ8*SX~°ã®ë㛑q_‚Íüd¥‹&–ylÞ±€L3¡Kì'p2Ìpí!бLQ^1×<«MÉézT@µ[SZ¢/’± ©g?·™ ÂË©{yuì¤:I鶉˜%KQcÏ÷ÃsÐSe…í©1ˆ³' w`i'±µ³Â&ub¬„ì¦®×øaÅc’ºâï¡ÙÂPçØ…,ñ’A¯ä{Ì¡4U `78^Yœ›i/5ßÜ{?ÇAÆ@c;zxùšf“f‘¸a.ñ[µÍBªöâ,¬Ÿ ¾½‹Þ¬y#oÈAK{Èý¢/–•«ÝŸÏ{kKip¸p¾îŸþÞEÈÛŠƪbóòyÄJwÝ5_[ŒÇÐÛ^]HIx„:tÈ |nuû‡Ò阧øC¨åOƒœõ/,­ÕÚøJׯàP|n‘N%Aõòi²“6ÁQ⫎·, ðÈ ¾Ö¢ÖÂQÃ/±šô^HnÌ,`üÌçòÙ­‡[ÈŒ%µ®:À'5W&†6_DémLþ­¼·«»,ãUKjÙ4LÍ-áš;ï…=Tn'f‹¬Œ³72ðºi,a-³È¨éül»ðY膇é`ø¦b-öÙë¾{U˜uÉ=oÕ'ð>ÏírBð;¿œpð×3+µÊ =ŽWã;“#ú/î+E§)¿êÑÂä§ïÂeÌ£¸ÉÞôBÍõƒ™42ge‰CÇ æ)h Ö¾ƒÌ%Ý„Çcî›Å³µuwfµxɯ¿ñF¿»0 ‚t‘aÇ×'wÒy stš¶Ð]êï˜÷%L£W>tÉ™ÀíôKaÍ­ÑcV¼æã_Ôfµó5lã(k*K vì ×hI›6ò Ýr¡‰Z`g SFU‹ §h±ÒW¹…AÝ8×*û,¹ˆâ]”4`ì\Oa"ŠÂKÛ>¿Tà& RIV˜ì†ÄòEuóá`*©(“læ+îIšœÕæ9ãLÅS7R«ñÿlñIÐ :ÛRû’ýÊlfþZƒY1z$ëÆV}þ|ü"²¦Ä¬éd˜‰r•S E{¯ã-«Œy›ñ‰Ô•#¶4^½–j¸É“æû2b\/|÷ º|† ¾{îXKgßô‡rn§JæÕÂ…üy§2>kUq‹Û±1yNÓI¿#>©ž¨jãÅ”¼ºˆˆdKþçÇ/S/5Sv®7ec-ÖÉàDDÀIÙ4¤Fõæ´’x}Ê,8”«‡yœP"¯@ÍAEp5j{Ü÷‹=–ôƒ>M³qä.XCªc^굎¦R™GÏcé,¨c8U@\þ·, R-ʘ*þ¤O–yU˜ùNÕÏRòÑñ“ºí!õ.G…ŽÅº”é1 ÇïŠÆg$¿3èa®üÕl­V.…HN’ÀôÉðMŽƒN”Ãé1ÆÉ²DZÒÎlƒymÖ“MÐüx¾Ý) ïÁ§8,OOg˜êìê@™ïæâ™'©#¤òðŒ}¶p%q9B圡ç.h3*eÈUº-S꼿.É5žŸ?ì<“’å?˜œXØa†‚a$¿ý€éù4~gN„.4!nnZÓy Šç‘ŠÃ.“ôð<µy€ÌjE—$ÑVF eº–zQ;G[ì>êóDM¬-´lÏÒM&Ó­§ áAEH1àsA'·‚òµ,ïCß~*¬çXÔ-×^å’aº*­ >pÛl#:âϵŒaÆlp:×tóåŽö>kEÉŠä®ò^‘¹¹Î¨z<æ‹ÂܤÓ2J<¾º¸*äÄɸøÈ/¶ÑZŠÛËyy¨î_­HQF±ÙPÁ p·˜ø¶bC[4ö-/PHoмÞ}<Ù:OÚ:³J³Ñ€£ðŽ¢]e’`%­Nù/p7ƒE ‘„UÚõgŠ´Àù{–‹›çñ)_÷X•þ<ÑW^ iWöU_`^\Z[irqqpoonm€l€k€jii„hggfgŠfaYXWK-À-M\`_\YX]kpponmlkjjihgfƒed‡c€dc[WXQ:½:S^`]ZXV`lnmlkkjihgg€fee€d‚cbƒa‡`€acc\VXVF%»9W`_\YVV`llkjihgffedd€cbbƒa‚`€_^‡] ^__``a[VWWJ*¹;Y`]ZWUU`jjihgfedc€baa€`_^]^]^€]\€[ZY€ZY€Z€[ ]]^^_ZUVWN-¶>Z_\YVSS^ghosqgbaa`€_^]€\‡[ZZ‚YXXWWVWVWV‚W YZ[[]]XTUWP0 ´>Z^[XURQ[egt€€xc^€]\[ZZYYZZ…Y€XWVVUTTST‚STTUUVWXZ[ZUSSUO1²;Y]ZWTQOXbdl€}g[[ZYX€WXWVVWVUTS€RQPPOPOOPPQRRSUVXYVSPRXW'± 9W\ZVSPMT]bap€~|cXWVV„U€VUUƒTSRQQPPOO€NMLLMMNOOQQSTUUPORXO±9V\YVSPLPZ]_]k}~~}mXUT…STSTSS„R QPONNMMLLKK‚J KLLMNOOPPNPSF±0S\YVSOKLWY\\Z]qyykV€RQR‚Q…R‚QPPOONNMLKKIJIHHGH€G HHIIKKJKNOB±&MZYVROKITWWYXVUVZYSPP„OPPQˆP€O NMLLKJJIHHGFFE€DEDD€EDFIM>±BYYVRNKGNVSUVTTRQP€O NMLMNNMNNOONN‡ONNMMKJJHHGGFEDCC‚A€@>?DH:²9UYVRNJGGSRPSSQPONM€L€KƒLMNM…NMLKJJIHGFFECCBA@€? >=><:;>D7²+LYVRNJFBMROMPONMLLKJI€JIJJ€K€LM€L…MLKJJIHGFDDBBA@?>==<;;977;>3 ²@XWSOKGBDPOKJNMLK€I…HIJJKKL†MLKJIIHFEDCBA@>=<;:987437;0 ³0QXUPMGC?JNLIGKJIH‚GFFGG€HIJJKLLKL…MLLKJHHGEECBA@>=<:98742158, ³BWUQMIC>?LKHFCGHGFF„EFGGHHII€J„KLKKJJI€HFEDCA@?=<;8752/.25+ ´4PURNID?;CJHEBAD€EDBCDDEEFGG€HIIJJKKJKIHGFEDDA@?=<;:741-+/3( ´DTROKEA<9FHEB@>A€C€A@€B CDEEFFGGHIIJJI€J€IHGFEEDB@?>=;9640-*-0& µ,NSPLGA=9;FEB@>;=A@@?@@ABCDEFGHHˆIHHFEEDCA?>=<:740,*,/$ µCSQMHC?:5@EB?><9:?>==€>??@ABC€DEEF€GHHI‚HFFEEDB@?><:740,)+.$ ¶1ORNIEA;64BB?=;977:;;<<€> ?@AABCCDEEFGGHHI‚HFEEDCBA?>=:850,)+-" ·;QPKFB=825B?<;96535€: ;<<=>?@@ABB€DEFGHHGGFEEDDBA@?=;851,(*,!µ+ªÿ!FQMHC>94/7?<:864322689::;<=>??@ABBCDDEEFE…FEEDCBAA?=;851+()+ µ)ÿ-LNJF@;61-9<:864211027889::;<=??@AABBCCˆE€DCA@?>:851+'()µ*çÿ?@AA€B†CBA@??=;840+&&'µ‰ßÿ,JKGB=73.),75410/.-€,-.46889::;<<=>??@@ABA‚B A@@>=;840*€&±™ßÿ€6KIE?:61,&+5410/.-,€+,,-467899:;<<==€>?@AA@@A @@?><:74/)€% .(°ªÿ€>KGB=84.)#+42/.-,…* -267899:;<<€=>>ƒ? @@??>=;962.)€$  -@B*´ DIE@;61+&!*2/-,+*…) *,157889::;<<€=‚>??>=<;:852-($#" *;BII+´$DHC>93.)$ *0.,+*)(('())*+/477889::;;<<…=<;:751,'"!! $7CGHKOSR7®=B=83-($'%%#"!!"!!"##$%€&„'&€'%$"€ $*136;@DFHKPSK!®94/*% €!  !""#‚$*##"!  #'++)-159=ACGKOP9¬8=83-(#!ƒ‚ €!€"-##""!    $'*('*.259>@DHLPI ¬6<72,&"€€ƒ ‚!*    !$'($%(+.27;=AEJMO7¬7;60*&"ƒ‚‚ .   !#&$!"%(,/48<>CGKOE«3:5/*%!‚‚ƒ-  !## "%)-15:;@EIML(«-83.)%  €€€.  !" #&*.279=BGKN; ª*73-($ €€/   !$'+047;@EIMF«&62-'# €€‚‚0  "%)-258>CGKJ+«!31+'" €‚€€0   #'+/47DII.¬P      #',28>DII*­)     €€ €  !&,38>DHJ-­'         %,28>CHI-®7      ƒ  &,27>CHJ.®$     €€ €  %+18>CHI-¯%    €  €  %+18>CHI.¯5    € %+28>CHH*°    €€  €€ %+28>DIE"±    €  &+28?DIF#±  +   &,39?EJ>²   € € €    &,39?EJ7³   € € €  ‚  '-3:@FI1´  € €  ƒ !'.4:@GH+µ   € €  ‚ "(.4· € €  €€ #(/7=CF1¹ € € $)18>DC$º€€€ ƒ $+28?F<½ €  €ƒ  %,39@E2½ €€€ „ !&-4;BB*¼  €€€€ €  €€‚€ "'.5(’ÿ‹  –‚ÿ¨‘ ‘‘˜š›žŸŸœ˜€”ž–𡥩­®¯®­ª§£œ•ŽU™–šŸ¢¨¬¯ ®®­­¬¬©¤Ÿ–Œÿ•ª– £ª¬¬«€ª€©¨§¦¡š‘m“ ‘–žŸ£©©¨¨§§‚¦€¥¤¤££ š”ˆ‚ÿŒ ‘—¡«®¦¤¤‚£¢¢¡¡  Ÿ›šÈþ€ÿ‹™–œ›¤²´¥„ ŸŸžœ›šœ ­Úþþÿÿ‹”›š™ž ¦¥ž€žœ›š™—–••—ž±Øþþÿÿ‹š™–šœ›š››œœœ›™˜–”’‘“œ±Þ€þÿÿŠf•™••€˜—˜˜™™š›€œ ›š˜–”’‘œ³àþÿ‹—•‘•””••––—˜™š›šš™˜—•“‘’·á€þÿÿ‹f’–“‘’“”•–—˜‚™—–”’• ºæ€þÿÿ‹‹•“Œ‘‘’”•–—€˜——–””˜¥Àè€þÿÿ‹¿¿Ž”‰ŒŽŒŠ‹‘’“•‚– •””šªÅêüþþÿ¿™‘’Œ…‹‹‰ˆ‰Œ‘’“‚” “•®ÉìâÇäÿ‘ˆ‚ˆ‰€‡‰‹Ž‘’ “–Ÿ³Ïïå¼£’‡‘…†‡€†‡ˆ‰‹‘“˜¤¸ÓñéÀ£˜”… ŠŠƒ}„…„„…†‡‰“œª¿ØòìÆ£’‘”qކˆ{€ƒ„€…†‰œ­ÃÜôîË¨Ž‡Œ‘”‹Ž„‹‡€z|€‚‚ƒƒ„‡±ÉàõñÓ¯‘‡’m„‰…yx~€€‚…œ²ËãöóÚ¸—„z}ƒ‰’ˆƒˆ„~xuz}~€‚Šš±ÌäöõßÁ¡ˆzwz€†Œ’Œ x„‚}xsuz|}}…•®Êã÷õáȪ}vux}„Š‘fŒ f{wsqvyz|¦Æãöõâʯ”xusw{‚‡Œx~~zvroqvvz…œ¾ßöõâʯ•‚yvsruz€†ŠŠy|zuronqv}“µØóòàÈ­”„zvusruy~‚†‹„mzzuqnmmx­ÓóòÜé“„{wutrrtx|}…‹ƒŽuwuqmlqƒ§ÐòðÖ¼£‚{xvusqrtwuz„‹Žqnpomo}žÊñîѳ›‰zxwvurpqsqqy„Š‚iihht“ÃïìÊ«’ƒ|yxwwvsqppmkpz…Šƒeho‰¹ìëǦzyxwwvtqpojfjpz…‰‹tˆµêêâ‰}yxxwwvtrqngcfjq{‡†f ÿÿãÅèçÀž†{€xwwvsqqldacejr}†ƒŽÿÿþþüû㺚„zxxwwvtsqohbaacekt~…Ž ÿÿþþýÞ²“x€vutsrpkeb€abflu ÿþþüûÙª‹zt€stsrojebaa€`bgnw~z€ÿþúÓ …wrqrrqolhdcbaa`__adipwyŒÿÿþþüË•wl€kjhfdccbbaa`^_`bekrunŠÿþþüÄ‹l`]\]_abccbba`_^^__acgmqoŠ€ÿþþÿù»†la]\\]]^^€_‚^__acejmmU‰€ÿþ½€kc_^]…^€_`behjifŠ€ÿþ¦idc``_^]…^ __`abdgigqŒ„ÿ_`bba__†^_`abd€e–^a``__…^`abccb\™3LVZ]‚^]^__^ZP5ž 1CMRUUTQJ>(’ÿ‹  –‚ÿ¨‘ $HNRUW[YTPHA*žEQX]djp€rpmg`VJ<šKTY^hpssrrqponnmjbXK=–UMX[alpnmlkjihhgg€fe]RC$“$PZZ_jjhfedcbaa``_€^_`]TI3‘ $PYW\nsd_^\\€[ZYXWVX[YSH3MXSUby{`WVUVVUUTSRPONMMORTQO!KVRNWZc`R€PQ POMKIHFEFGHG& ?TRIOQPMLKKLMMN LJGEB@>=;;3LSIFKJI€GHIJKLLMLJGEB>;731APK@ECBCBBCEGHI€J IHEC?;5.+3JMB:A=:=>?ACDFGHIHHFD@<6-(=KF97<637:<>@BDE€FEDA=6-%ŸAH>1461.069;=?A‚C@=6,#¿3CD7+00-++/69;=>?€@?<5* (6C?1%,,)(()-48:;<==<92( 8IA/@9,!((&%&''*/479974.$+>LN<1>5'$$""#%&&'(+-.,& /1“   %57*‘   (3,‘   *,*   "(" € "€‚€ ‘ €„€ ‘ ƒ€ • ‚  —   ›€€¢€€óil32]‰ ‘— £¥¥¡Ÿ›™ÿ™šŸ¤©­¯¯®­ª§ ™‹Œœ ¦««ªª©©¨¨§¦¢›”Uÿˆ“›ž¦«¦¥€¤ £¢¢¡  žšïþÿ†“™›Ÿ«¬ ŸŸ ŸŸžœ›™™š¡ºùþÿ…˜˜™œœ›œœœš˜•““ŸÀóþÿ†“—”–€—˜š€› š˜–’‘ŸÃôþÿÿ…ª”“‘“’“•–˜™š™˜–””¡Èõÿþÿ…“ŽŽ’”–—˜—–”—¨Îøþþÿ†¿’ˆ‹Š‰Œ’””•””™¯ÔÞÙþˆ„ˆˆ‡ˆ‹Ž‘‘’”œ´ÛÞ±™”ˆ‰€„……†‡ˆŠ”¢½àå³–“Žˆ†}€‚‚ƒ„…‡‘¦Äæé»‘‡’‹‡‰„{{€‚„§ÉéíÆ˜€‰‘އ…‚zv|~€Š¥ÉëïÑ¥‚w{„‡xruz|‚œÅêñÔ®Šxtx€ŠŽ‡{}vqpuzºèïÔ¯{urv~†Š‡q{vpnq„¯áíЫ|vtrv{€‰„ˆutpmy¥Ü鯣‰|wurqtu|ˆ„ˆkkjq˜Öä»—‚zxwtqpnp|ˆ‚‰hl‹Ìáµ}yxwuqojgo}ˆˆÿë¯ËݰŠ{xxwurnfcfp†‡ÿþþúÚ¨†ywwusqkcabgr„‡ÿÿþúÒ~uttsplfba`bht~†€ÿúÈwqpolieca`_`ckvy†ÿþþù¼~e`b€c ba`_^_afmss„ÿû°yc]\]^€_€^_adhlm…ÿÿþþïwea_„^__acfhg†‚ÿqca`_ƒ^_abdfcŽPY\\]€^]^\WG‘ 0@HLJB2Š€ÿš‰ ‘— £¥¥¡Ÿ›™ÿ™šŸ¤©­¯¯®­ª§ ™‹Œœ ¦««ªª©©¨¨§¦¢›”Uÿˆ“›ž¦«¦¥€¤ £¢¢¡  žšïþÿ†“™›Ÿ«¬ ŸŸ ŸŸžœ›™™š¡ºùþÿ…˜˜™œœ›œœœš˜•““ŸÀóþÿ†“—”–€—˜š€› š˜–’‘ŸÄ÷þÿÿ…ª”“‘“’“•–˜™š™˜–””¡Èõÿþÿ…“ŽŽ’”–—˜—–”—¨Îøþþÿ†¿’ˆ‹Š‰Œ’””•””™¯ÔßÙþˆ„ˆˆ‡ˆ‹Ž‘‘’”œµÜÞ±™”ˆ‰€„……†‡ˆŠ”¢½áå³–“Žˆ†}€‚‚ƒ„…‡‘¦Äç黑‡’‹‡‰„{{€‚„¨Ééíǘ€‰‘އ…‚zv|~€Š¥ÊëñÒ¥‚w{„‡xruz|‚œÆëñÕ®Šxtx€ŠŽ‡{}vqpuz»èñÕ¯{urv~†Š‡q{vpnq„°âîЫ|vtrv{€‰„ˆutpmy¥ÞéÇ£‰|wurqtu|ˆ„ˆkkjq˜Öå¼—‚zxwtqpnp|ˆ‚‰hl‹Ìá¶}yxwuqojgo}ˆˆÿë¯ÌÞ°Š{xxwurnfcfp†‡ÿþþúÚ¨†ywwusqkcabgr„‡ÿÿþúÓ~uttsplfba`bht~†€ÿúÈwqpolieca`_`ckvy†ÿþþù¼~e`b€c ba`_^_afmss„ÿû±yc]\]^€_€^_adhlm…ÿÿþþïwea_„^__acfhg†‚ÿqca`_ƒ^_abdfcŽPY\\]€^]^\WG‘ 0@HLJB2Š€ÿš‰ HNW\bdc^YQ?3QYckqrrpokf\QELX\emljiggfedd_TH‹NWYfmb`^]]\ZYXXZZSE‰CTSXmmWTTUTSQOMLMPOA‡?PPMSSPLMNOONKHDA?>5 ˆIOFHHGFGIKLLKHC?82'ˆ*JG>@=?@CEGIIHE@8-!ˆDH;8738@AA?8+Š@:(+)((-49;<;4'=I?ˆ*=3!%$#%&(-00+ *@LFˆ89- !"$$! *5CI9‡3(")8FBˆ-%  .?E?‡&"  '9D3‡  "3C<‡    0B?ˆ  /B?ˆ    /A>‰   0A8Š   3??Š  5;Š €  $23‰  &,‰ #ˆƒ ‰  Œ€ Ž  –€¬is32²‚𢍩ª¥¡ƒ›¡€§¦¤ œ©ÿ –™  žž™—¦Ñÿ€ ”“•—™š˜•¥Öþÿ€ ”ŽŒ’•–˜°Óóÿ ††‡Šš»Ê¡’‚ ˆ‚„—Æ×›ˆU „|w}Åá¬|~Œ† {xq|µÜ¯ty…† qp¢Ï¢€vqr€†‚ ƒžÃ•{vqil€ þ÷À‹wsmebm~€ ÿð«wjhea`cnx€ÿþ©l^^€_afmÿ€ ÿÿj][[]\]\Tÿ€6?=* ƒ‚𢍩ª¥¡ƒ›¡€§¦¤ œ©ÿ –™  žž™—¦Ñÿ€ ”“•—™š˜•¥Öþÿ€ ”ŽŒ’•–˜°Óóÿ ††‡Šš»Ë¡’‚ ˆ‚„—ÆØ›ˆU „|w}Åá¬|~Œ† {xq|µÝ¯ty…† qp£Ð¢€vqr€†‚ ƒžÄ•{vqil€ þ÷ÀŒwsmebm~€ ÿð«wjhea`cnx€ÿþ©l^^€_afmÿ€ ÿÿj][[]\]\Tÿ€6?=* ƒ‚[_gkjcZO„ S^feba^[V?‚ NQYXRRPJGD& TICCDHJG>/‚ E<32;AC>+ƒ <-'&,43$@F‚ 4#! 6CU + $=C  8?‚    6?‚   58‚   1‚   (‚ €„ ‰„ich8 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,,,,,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø-WWWWWWW-WW,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,WW-W,W-,W-VW-WWWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,WWW-WW-WW3Q3QW3Q3QWWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWWWW-WWW-WWQWWW3WQWWW3Qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-WW-WW-WWWW3W3WQWXWWXWWWW,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWWWW-W-WWXWQXWRWXXWXWXWXWX-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWXXWWWWWXWW4WXWXWWXWXWXXWX-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWWXWWXWXWXWXXWXWXWXXWXXXXX-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,WWXXWXWXXXWXWXWXWXWXXXWXXXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWWXXXWXXXWXWXWXWXWXWXXWXX.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,XWXXXXWXXXXWXXWXWXXWXXXX4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWXXXXXXXXXWXWXXWXXXWXXXX.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW‚X‚X‚X‚XXXXXXXWXWXXXXX.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,XXXXXXX‚XXXXWXWXXXXXXX.--ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWXX‚‚X‚XX‚X‚XXXXXXWXX...WÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWX‚XXXƒXY‚XXXX‚XWXXX....XXWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWXY‚ƒXX‚X‚Y‚XX‚XXXX/..XXWX,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXX‚‚YXƒXƒXY‚XƒXYXY/./XXXXWWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXY‚ƒXƒXƒX‚YX‚XY.//.YX‚‚X‚X,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿX‚‚ƒXƒX‚Y‚YX‚YY.///RYXƒXX‚XWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXX‚YƒƒXƒXƒ^}XXY//./X^}‚_|X]XÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWXƒY‚ƒXƒXƒX}XY///XY_}^ƒ|^X|,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWX‚ƒYƒƒƒXƒ^YX//.YXY‚ƒƒXƒ|^XWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXƒYƒ‚ƒXƒƒXY////XYXƒƒ}^}‚X^XWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿX‚ƒYƒƒƒXƒY/.//XY}^}^ƒƒ_ƒ‚|XWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW‚Yƒ‚ƒƒY}5.//XYXƒ^}ƒƒ}^}X‚XWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚XƒƒƒƒYY/(/.YY‚Yƒ_}^ƒƒƒ‚}^‚WÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWƒƒƒYƒY./5XY|_}‚ƒ‚ƒƒ}^ƒ^‚XWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿX‚ƒ‚Y/..YXY‚Y‚_}_}_ƒƒƒ}ƒ‚XWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ƒY./YY|ƒƒ^ƒ}_‚ƒƒƒ‚ƒ‚‚XXWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,YX./XY^}^}ƒ^}ƒ}_}ƒƒƒƒƒ‚Xøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-.YXƒ‚ƒ_}ƒXƒƒ_‚ƒƒƒƒ‚^|Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'5Y|_}_|ƒ^ƒƒ}ƒƒƒƒƒƒƒƒ‚‚Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ..Yƒ|_ƒ|ƒ_ƒ}ƒƒ‚ƒƒƒ‚ƒ‚ƒ|^,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿX_Yƒƒ‚_ƒ|_ƒ‚ƒƒƒƒƒƒƒƒƒ‚‚Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-YYƒ}‚ƒYƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚‚X3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXƒƒƒƒƒ‚ƒƒ‚ƒƒ‚ƒƒƒƒƒ‰ƒƒƒƒƒWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-Xƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ§‚ƒ‚‚Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-Xƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ§‰ƒƒƒƒƒ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXƒƒƒƒƒ‰§ƒƒƒƒƒƒ§‰ƒƒ‰ƒ‚ƒƒ‚‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV‚ƒƒƒƒƒƒƒ‰ƒ§‰ƒƒƒ§ƒƒƒƒƒƒ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXƒ‚­ƒƒ‰§ƒƒƒƒƒƒƒƒ‚ƒƒ‚WÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW‚ƒƒƒƒƒ‰ƒƒƒ§‰ƒƒƒ‚‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø‚‚ƒƒ§ƒƒ­ƒƒ‚ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùWú‚X‚‚WVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿicl8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,,ø-,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø-WW-VW-WW,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWW-WW-WW-WW-WWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,WW-WWW-WWWWWWWWWÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,WW-WWWWXWXWXXXWXWÿÿÿÿÿÿÿÿÿÿÿÿÿXWXWWXXWXWXWXWXXX-ÿÿÿÿÿÿÿÿÿÿÿÿÿWXXWXXXWWXWXWXXXX-ÿÿÿÿÿÿÿÿÿÿÿÿÿ,WXXXWXXXWXWXXWXX-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿWXX‚XXXXWXXWXXXXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXX‚XXXWXXXWXR 'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,X‚X‚XX‚XXXXXX.. Q,ÿÿÿÿÿÿÿÿÿÿÿÿÿVXƒX‚YX‚X‚XXX4(4XWÿÿÿÿÿÿÿÿÿÿÿÿÿWX‚XƒX‚YXYXX/(XXXXWÿÿÿÿÿÿÿÿÿÿÿÿ-‚Y‚Y‚Y‚‚YX///Y‚‚XXÿÿÿÿÿÿÿÿÿÿÿÿWXƒƒXƒXƒXY//XY‚XXXøÿÿÿÿÿÿÿÿÿÿÿÿ‚XƒƒY‚YX/..YXƒƒƒ‚XWÿÿÿÿÿÿÿÿÿÿÿÿXƒƒƒXƒY/./.Y_}‚Y^XWÿÿÿÿÿÿÿÿÿÿÿÿWXƒƒƒYX/YX}^ƒƒ‚}‚Wÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ƒƒYY./YXƒƒƒƒ}^}^WÿÿÿÿÿÿÿÿÿÿÿÿÿWƒ‚Y/YXY‚Y‚Yƒƒ‚ƒ‚WÿÿÿÿÿÿÿÿÿÿÿÿÿÿXY.RY‚Yƒƒ_ƒƒƒƒ^|3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ. Y^Yƒ‚Y‚}‚ƒƒƒƒ‚,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.RYƒ}‚_}ƒƒƒƒƒ‚|Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ YXƒ^}ƒƒ‚ƒƒƒƒƒƒ‚Wÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-Yƒƒƒƒƒƒ‚ƒƒƒƒƒƒ‚^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-Xƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‚Wÿÿÿÿÿÿÿÿÿÿÿÿÿ-‚ƒƒƒƒƒƒƒƒƒƒƒƒƒ‚ƒWÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,ƒƒƒƒƒƒƒƒƒƒƒ‰ƒƒƒWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚ƒƒ­ƒƒ­ƒƒ­‚ƒ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚‚ƒƒƒƒƒƒ‚WÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWùWúWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿics8ÿÿÿÿÿÿÿ,,ø,ÿÿÿÿÿÿÿÿÿÿ-WWWWWW,ÿÿÿÿÿÿÿWWWXWXXX-ÿÿÿÿÿÿ,XXXWXWXXÿÿÿÿÿÿÿWXXXWXX.ÿÿÿÿÿÿÿ‚X‚XXX..WÿÿÿÿÿÿÿXƒXYX/.XX,ÿÿÿÿÿÿXƒ‚ƒ.YY‚WÿÿÿÿÿÿXƒY/./ƒ‚‚Xÿÿÿÿÿÿ-‚Y.Y|_}‚XÿÿÿÿÿÿÿW/XYƒ_ƒƒWÿÿÿÿÿÿÿ-Yƒ‚ƒƒƒ‚,ÿÿÿÿÿÿ-ƒƒƒƒƒƒƒWÿÿÿÿÿÿÿ^ƒƒƒƒƒƒ^ÿÿÿÿÿÿÿÿÿXƒƒ‚‚Wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿicl4ïïïïïïïüÌÜïïïïïïïïïïïïËËÑËË¿ïïïïïïïïïýÜËË¿ïïïïïïïüÝÑݽ½ïïïïïïïËÝËÑÝÑÛ¿ïïïïïïÑ»½½½»Ñïïïïïïý»ÛÛÑÝÑ‹ïïïïïïËѸÛÛÛïïïïïïïÛ½½ØÑ±Ïïïïïïïï»»»½Øïïïïïïü»»»Û»±¼ïïïïïïü¸»¸¸»Ñ½ïïïïïïý»»»»»ïïïïïñ‹¸»‹¸±»»Ïïïïïïü»»»»‹»¼ïïïïïﻸ»‹±¸¸½ïïïïï︻»±‹»»±ïïïïïﻋ¸±¸»‹»ïïïïïïûº±‹»«»»ïïïïïïû¸±±»¸»Š¸»ïïïïïïï»»‹»»º»»ïïïïïïïû»¸º‹¸¨¼ïïïïïïïñ¸¸»»º««¯ïïïïïïï»»«Š¸«‹¯ïïïïïïñ»‹º‹«¨«»ïïïïïïïË«¨««ŠºŠ½ïïïïïïü¸ºŠ»›««»¯ïïïïïïûºººººŠ¹½ïïïïïïïïûŠŠŠŠº¸ïïïïïïïïïïûººº‹¯ïïïïïïïïïïïý½½ïïïïïïïïïïïïïïïïïïïïïïïïics4ˆïïïüÍ¿ïïïïüÑÑÛ¿ïïïÛÛÛÛïïü±Ñ½ïïïû»ÛÛïïïû»»ïïïû¸±±»¿ïïû»»‹Ïïïû‹«¯ïïû¸»»¯ïïï»‹Š¯ïïﻺ»¿ïïü¸¨ª‹ïïïûº»«¯ïïïﺊ»ïïïïïïïïïïïich#HÿÿÿÿÿÿÿòéÿÿÿÒŠ¿ÿÿÿT"ÿÿþ¢”§ÿÿþ”¡Rÿÿú"J”ÿÿùU$Uÿÿê•IIÿÿÒ¢%KÿÿÔJª‡ÿÿ•( Oÿÿ©Eÿÿª¨¥?ÿÿRŠ’ÿÿJQ(?ÿÿTÖ _ÿÿ)R@Gÿÿª”‚Ÿÿÿª¦"ËÿÿURSÿÿT™—ÿÿU ÕÿÿSXUÿÿ¬Ð*©ÿÿÕAJ«ÿÿ«ª«ÿÿê *ÕÿÿÕ­Qÿÿö…U[ÿÿôkSÿÿò*ªÙÿÿø*­«ÿÿùUj×ÿÿðÕV³ÿÿæmÛWÿÿæÕUgÿÿÕUm¯ÿÿ­¶Û_ÿÿ5[Uÿÿ×j¶ÿÿÿ5]µÿÿÿíÕ­ÿÿÿæ¶·ÿÿÿým¿ÿÿÿÿUÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿ€?ÿàÿÿøÿÿüÿÿÿÿÿÿÿÿþÿÿþ?ÿÿü?ÿÿøÿÿðÿÿàÿÿÀÿÿÿàÿÿÿàÿÿÿðÿÿÿøÿÿÿøÿÿÿüÿÿÿüÿÿÿüÿÿÿþÿÿÿþÿÿþÿÿþÿÿþ?ÿÿþ?ÿÿþÿÿþÿÿþÿÿþÿÿüÿÿüÿÿüÿÿøÿÿø?ÿÿðÿÿàÿÿÿÀÿÿÿ€ÿÿÿ?ÿþÿøÿàÿ€ICN#ÿþ/ÿÿò¥ÿÿêIÿ•*¿ÿRTŸÿ¤ª¿þ•Pü(ÿþ©ÿý5QÿúªBÿýE"ÿùU ÿú² ÿûT?ýH'ÿPý!Z¿þÑj?þ¢«¿ÿª¿ÿ’­¿ÿÚµÿ Ûþúªÿü–Ûÿûuµÿú­[ÿÿmßÿÿ•_ÿÿõÿÿÿÿÿÿðþÿ€ÿÀÿÿàÿÿÀÿÿ€ÿÿÿþÿþÿÿÿÿÿÿ€ÿÿ€ÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÀÿ€ÿÿ€ÿÿÿÿÿþÿüÿðàics#Hþú×õWå/ìõè'ç/øWè¯òoóWíoë_ú¿ÿÿàøøðððøøøøøøðàÀt8mk@ %,BSTNGA7'  7Qr¢¼ÍÕÚèñóñîçâÖÆ¹ŸyQ9  )j©ÈäðùþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþùïãÅ•`72l¦ÓôþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýóÞ­j3 a¨ÜöþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþôÛO[Àóþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüè¸h ^µìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþñ½cO°ðþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþð³P3˜èþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýâ’3fÑûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÊ_-žïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþç‘(NÆúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¶> fÝþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÍY wçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÞk ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþåx  ~íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿé|  wìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáZ)++'!  oèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú±D673+" aäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúµPAA=5) EÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¸XKKF=1$(Áýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¼^RSND7) ’øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¿fYZUJ=- ]ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÁk_`[PA2# )ÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÅpee_TF6& ŠùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇuijdYJ9) DáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇxnni]M;, ¡üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÉ|rqk_O<, NéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÊuum`Q>- ¨ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÌ‚xwoaP>- QçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüφzwpaO=, ¶ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüЉ}ypaO<* RîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÐŒ€|qaN:)  —ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÒŽƒ~r`L8&&ÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÓ“†s`K6%  ZòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÖ—ŠƒuaK6#   ˜ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýØ›Ž‡xdL6#  ËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÚŸ“‹|fO7#  [ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÜ¥™‘‹yR:% ‘ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÝ©–—ϸS( ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÞ­£Öýõ* 'Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý಩£¤Úýÿÿíz?éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý⶯©ªÞýÿÿÿÿßU^õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý㺳¯¯àþÿÿÿÿÿýÃ1‘ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþä½·³µâþÿÿÿÿÿÿÿù ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþåÁ»¹ºäþÿÿÿÿÿÿÿÿÿìd¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþçÄÀ½¿æþÿÿÿÿÿÿÿÿÿÿþÈ1ÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþèÈÄÂÃèþÿÿÿÿÿÿÿÿÿÿÿÿù’!ÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþêËÈÆÈêþÿÿÿÿÿÿÿÿÿÿÿÿÿÿßE2ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþìÏËÊÍìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¡6æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþíÒÐÎÐíþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèS2ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþîÕÓÑÓïþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¤-ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþðÚÖÕÖðþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâF-ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþñÜÚØÙñþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû˜ 1ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþòÞÜÛÜòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ1&ØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþòàÞÝÞòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôjÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþóáßßàóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ°²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþóâáàáôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá< §þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþóâáâãõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöj‰üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþôãááãõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¤aõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþôãáâäõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔ)<èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþôãââäõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïO(Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþóãââäõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷n³þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþóâââäõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý™ úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþòáâãäõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿KïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþòááâåöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ(&Õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþòààáãöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß2 œýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþñÞÞßâõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìITñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþðÜÝÞáôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ`#ÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþïÙÚÜàôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùvûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþîרÚÞôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùt=äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþíÕÕ×ÝôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúwªþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþíÓÓÖÚóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû€TíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþíÒÑÓØòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü†­ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþíÑÏÑÕñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûƒNëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþìÏÍÏÓïþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøk¤üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþìÍÌÍÒïþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöb<ÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþëÌÊËÐïþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôY‚øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþêÉÈÉÎîþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíJ"ÀþÿÿÿÿÿÿÿÿÿÿÿÿÿþéÈÆÇÌîþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå9JäÿÿÿÿÿÿÿÿÿÿÿÿþèÄÃÅËíþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿɃ÷ÿÿÿÿÿÿÿÿÿÿþæÁÀÂÉìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþª ªûÿÿÿÿÿÿÿÿþå¾½¿ÇìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýŒ-Çþÿÿÿÿÿÿþ㻺½Åëþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷iGÚþÿÿÿÿýá¶¶ºÃëþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëEbåÿÿÿýß³³·ÀêþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ% $íÿýÞ¯¯³¾êþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü   0KìÜ­«¯»éþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïS  1E]y¨¨¨¬¸èþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ& !2F]tŠš¥©µçþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýž  "3F]s‡˜¡¥²æþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôa #4H]s†•Ÿ¢®åþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔ)$5H^r„“›žªãþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü• $4H]qƒ˜™¦âþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß@ #3F[pŽ••£áþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù‡  "2EYn‹‘žàþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ1 !1CWj{‡Œ‹™ÞþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûŒ   /@Thxƒˆ‡•Üþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×2 ->Qct~ƒ‚‘Ûþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ +>>>==<<;::988754310.,*'$   #'+-024578::;<=>>?@@@ABDHOZeaflpeZUPMHDDDDDDDDDDDCCCCCBBBBAA@@??>==<;:986531/,)%! $(+.024679:;<==>??@@AABBBBBCCDDCDDDDDDDEEDDDDDDDDCDCCCBBBBAA@@@??>=<<;:87532/,)&!   $(*-/02457789:;;<==>>>????@@@@@@AAAAAAAAAAAA@@@@@@@???>>>==<<;::98765320.+)&"  !#&'*+-.011344566778889999:::::::::::::::::99998887765443210/-,*)&%"   !#$%')*+,,-/001122222222222222222110/.-,++)(&%$"    h8mk #Kr•¦³«™|T+ [¥Ûöýÿÿÿÿÿþøä¶j"^Â÷ÿÿÿÿÿÿÿÿÿÿÿÿÿúÕz8°õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÆO_ÞþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêzlìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõfíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕL,JæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàwE) Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä„V6…ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæŽb?/àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç•hCýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéšjA!Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë m>V÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíªu?˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð¶³’ÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÁÁôíY ÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÊËöÿÿÓ*.éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÒÔ÷ÿÿÿý˜ 9ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÚÜùÿÿÿÿÿê@8ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùáâúÿÿÿÿÿÿþ2ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùæçûÿÿÿÿÿÿÿÿà)#ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúèêûÿÿÿÿÿÿÿÿÿúdÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿúèëüÿÿÿÿÿÿÿÿÿÿÿ¢ ÿÿÿÿÿÿÿÿÿÿÿÿÿùèëüÿÿÿÿÿÿÿÿÿÿÿÿÊeûÿÿÿÿÿÿÿÿÿÿÿùæëüÿÿÿÿÿÿÿÿÿÿÿÿÿà$*áÿÿÿÿÿÿÿÿÿÿøãéüÿÿÿÿÿÿÿÿÿÿÿÿÿÿì4 þÿÿÿÿÿÿÿÿ÷Þåûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð:CìÿÿÿÿÿÿÿöÚáûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð; þÿÿÿÿÿõÖÝúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë1.ÙÿÿÿÿôÒÚúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß#_ðÿÿòÌÖùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅ ˆ÷ðÅÑùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@²½ËøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøY6k˜Å÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ$7i¾öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ˜5eˆ·õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä40\~¯ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý+Tr§òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐ%)KfžñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëR *DW”ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòr &5:^çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ{  …ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäj WÐüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¼A#…ÞüÿÿÿÿÿÿÿÿÿÿÿÿÿúÎj 2ÊîüÿÿÿÿÿÿÿûéÀ|4 !(-1Ba…§½ÊÎǼ ‚_E<;:98641-)" )/379;=?BGHGDBAAA@@?>=;:740*!  "$&'(((((('&$#  l8mk*c•³Á¼§}E8âûÿÿÿÿÿþòÆjåþÿÿÿÿÿÿÿÿÿÿø»<¤ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝT £ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù˜1|ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú´U#4ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¼e. ™þÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÁk0 )àÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÈo, ^úÿÿÿÿÿÿÿÿÿÿÿÿÿüÔªDÿÿÿÿÿÿÿÿÿÿÿÿÿýÝÍóœ ®ÿÿÿÿÿÿÿÿÿÿÿÿý䨸ÿó[ ºÿÿÿÿÿÿÿÿÿÿÿþëâúÿÿÿŶÿÿÿÿÿÿÿÿÿÿþðêüÿÿÿÿöT¡ÿÿÿÿÿÿÿÿÿþñíüÿÿÿÿÿÿvþÿÿÿÿÿÿÿþñîýÿÿÿÿÿÿÿÌ@ðÿÿÿÿÿÿþïíýÿÿÿÿÿÿÿÿã&Âÿÿÿÿÿýëéüÿÿÿÿÿÿÿÿÿë0d÷ÿÿÿýèäüÿÿÿÿÿÿÿÿÿÿë0·þÿýäàûÿÿÿÿÿÿÿÿÿÿÿâ%8ÜüßÛúÿÿÿÿÿÿÿÿÿÿÿÿÊ tÎÔúÿÿÿÿÿÿÿÿÿÿÿÿÿ˜ 9ÆùÿÿÿÿÿÿÿÿÿÿÿÿÿöQ 7w¼÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ 0j±öÿÿÿÿÿÿÿÿÿÿÿÿÿÿòV *[¦õÿÿÿÿÿÿÿÿÿÿÿÿÿÿü˜ (F•óÿÿÿÿÿÿÿÿÿÿÿÿÿÿý²!!‚ñÿÿÿÿÿÿÿÿÿÿÿÿÿø¨  ZÎûÿÿÿÿÿÿÿÿÿýÜu#xÊïüÿÿÿýôÖ”9  (0Bc‚š¤žŠnO>;974/)"&)+-....-,*'#s8mkn³ÎʦW@Èûÿÿÿÿö©$1ÖÿÿÿÿÿÿÿÞO £þÿÿÿÿÿÿår0çÿÿÿÿÿÿï‘UúÿÿÿÿÿõäÏ(aýÿÿÿÿùðüý‡M÷ÿÿÿúôýÿÿË#Üÿÿøóýÿÿÿã$‡ûõíýÿÿÿÿâ$!¾æüÿÿÿÿÿÊA½úÿÿÿÿÿý…4«øÿÿÿÿÿÿÒ&]éÿÿÿÿÿþØF ]Åïù÷æ¦9 2ThdN4*$Slic3r-1.3.0/var/Slic3r.ico000066400000000000000000012615361327442435500153240ustar00rootroot00000000000000 ( V€€ (~ 00 ¨%¦(  ¨NN hö^( ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"##%&&&'''((((((((((((((((((((((((((((((((((((('&&&%$#"!  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !!"#$%&'((()))*+,,-..///00000000000000000000000000000000000000//..-,,+**))(((''%$#"!  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !"##$%%&'())**+,,--...////0111223333333444444444444444444444444444444433333332211100///...--,+**)))('&&%$##"!  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !"#$%&'()*+,,--../001111233344444555666777777777888888888888888888888888888888888777777777666555444443322110000/.---,+**)('&%$#"!  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !"$%&()*+,-../00122334445667777888899999:::::;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;;;;;;;;;;:::::99999888777666655444322100//.-,+*)('&$"! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !#%&')*+,-./01233455667788999::;;;;;<<<<<====>>>>>>>?????????????@@@@@@@@@@@@@@@@@@@@@@@?????????????>>>>>>>====<<<<;;;;;;::99888776655443210/..,+*)'&$"! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  "%'(*,-./012344567788899:::;<<<====>>>>????@@@@@@AAAAAAAAAABBBBBBBBBBBBBBBBCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAA@@@@@@????>>>>====<<;;;::999887765443210/.-+*(&%"  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  "$&)*,-/0123456678999::;;<<===>>>????@@@@AAAAAABBBBBBBCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCBBBBBBBAAAAAA@@@@????>>>>==<<;;:::998766543210.-,*('$" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ "$&(*+-.01234567789:::;;<<==>>>???@@@@AAAABBBBBBCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDDDDDDDDDDDCCCCCCCBBBBBBAAAA@@@@????>>==<<;;;::98776543210.-+*(&$!  !#&(*+-./12344567899::;;<<===>>???@@@@AAAABBBBBBCCCCCCDFFEEFGGHHHGFEEEDDDEEEEEEEEEEEEEEEEEDDDEEEDDDDDDDDDDDDCCCCCCCBBBBBBAAAA@@@@???>>===<<;;::99876654321/.,+)(&#!  !$&()+,-/012345667899:::;;<<<==>>>????@@@@AAAABBCF JN%%Y++d77s99x//f33l44p::{;;|??…AA…BB‹==}00i&&]!!Z WOQ L JHFDDDDCCCDDDDDDDCCCCCCCCCCCCCCBBBBBBBBBAAAAAAA@@@@????>>====<<;;:::988776443210/-,*)'&#!  !#%'(*+-./0123345667778999:::;;<<<====>?BIS//f99s77r@@ƒII˜PP®RR¼XXÏ[[Ú\\å]]è[[Þ[[á[[ä\\ê\\ê[[ï]]î]]ð]]ê]]ÜZZÓZZÎWWÊSS½UU¼PP²OO¦GG™BB‹66qT JFDBBBBAAAAAAAAAAAAAAAAAAA@@@@@@@??????>>>>>===<<<<;;:::9998777655433210/.-+*(&%#!   "$%'()*+,-./012334455567778889: ?GM--_==xJJ”QQ²WWÊZZß\\ê[[é\\ò]]ø]]ü]]ý^^þ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]þ]]þ]]ý]]ý]]ü\\ú\\ø[[ôZZçRRÅPP®JJš@@†66q**`SHC???????>>>>>>>>>>>======<<<<<<;;;:::::99998777666554332210/.--,*)(&%#"    "#%&'()*+,--./00012236>--T>>rMM˜TT·UUÄXXÚ[[í\\÷^^ü^^þ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]þ]]ü[[øZZóZZéYYÙTTÄPP¬HH‘;;s((YD<;;;:::::::::::9999998888877666655544443221110//.--,+*)('&$#"!   !#$$%&'((+1<66THH{SS¨YYÑ]]ë]]ø]]ý^^þ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ]]þ]]û\\ö[[êWWÓMM¢::i!!L =7655555554444443332222211000//...---,+*)))('&%$#""   $228IIdTT—XX¶ZZ×]]ð]]û^^ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ]]ùZZãUUÂMMšCCr//P:1.....-----,,+****))))(''&%%$$###"!   66!LLIWWƒ[[½\\ç^^ù^^ý^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿ bbÿaaÿ^^þ]]ø\\êYYÎTT£HHt99K1'$$$###""!!  $$CCSS:XXh[[¡]]Ú^^ö^^þ__ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿ bbÿ bbÿ bbÿ bbÿ``ÿ^^ú]]íYYÏWWžLLg==:"  ??\\]]G]]^^Ó^^ñ__û``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿ bbÿ bbÿ bbÿ ccÿ ccÿ ccÿ ccÿ bbÿ__ù^^ç]]¿WW†OOJ77  ??cc]]R^^¢^^ß__ùaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿ bbÿ bbÿ bbÿ ccÿ ccÿ ddÿ eeÿeeÿ ddÿ bbþ__õ^^Ù[[žVVPHHHHbb'^^a^^§]]ä__üaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿ bbÿ bbÿ bbÿ ccÿ ddÿ ddÿ ddÿeeÿffÿeeÿ ddÿ aaù]]ÝZZˆZZ0UU ??\\!]]j\\À^^î``übbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿ``ÿaaÿaaÿaaÿbbÿ bbÿ bbÿ bbÿ ccÿ ddÿ ddÿ eeÿeeÿeeÿffÿffÿddÿ ``ô^^Ã]]x[[2UU UU__\\X]]´__î``þbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿbbÿ aaÿ bbÿ ccÿ ccÿ ddÿ ddÿ ddÿeeÿeeÿffÿffÿffÿccý aað^^Ç]]}[[2ff aa]]O]]£^^å``ýccÿccÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿ bbÿ ccÿ ccÿ ddÿ ddÿ eeÿeeÿeeÿffÿffÿffÿggÿccþ ``ñ]]Ä__s[[*__ff ZZ;\\š^^ã``û ccÿ ccÿ ccÿbbÿbbÿaaÿbbÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿaaÿbbÿ bbÿ ccÿ ccÿ ccÿ ccÿ ddÿddÿeeÿeeÿffÿffÿggÿggÿggÿccý ``í__¹]]eZZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUUZZ"\\v^^Ð``ù ccÿ ddÿ ddÿ ccÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿbbÿbbÿ bbÿ ccÿ ccÿ ccÿ ddÿ ddÿddÿeeÿeeÿffÿffÿggÿggÿhhÿggÿeeü aaç__©__PTTÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbb ZZI\\°^^ï bbþ eeÿ ddÿ ccÿ ccÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿbbÿ bbÿ bbÿ ccÿ ccÿ ccÿ ddÿ eeÿeeÿeeÿffÿffÿggÿhhÿhhÿiiÿggÿddú ``Û__‹__3TT ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^^+\\^^Øaaû ddÿ ddÿ ddÿ ddÿ ccÿ ccÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿbbÿ bbÿ ccÿ ccÿ ccÿ ddÿ ddÿ eeÿeeÿeeÿffÿffÿggÿhhÿhhÿiiÿiiÿggþ ccó ``Á^^d[[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbb \\M\\¶__ò ccþ ddÿ ddÿ ddÿ ddÿ ddÿ ccÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿbbÿbbÿbbÿ bbÿ ccÿ ccÿ ddÿ ddÿ ddÿeeÿeeÿffÿffÿggÿhhÿhhÿhhÿiiÿiiÿffý aaã__–]]9TT ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWW]]x^^× aaú ddÿ eeÿ ddÿ ddÿ ccÿ ccÿ ccÿ bbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿbbÿbbÿ bbÿ ccÿ ccÿ ddÿ ddÿ eeÿeeÿeeÿffÿffÿggÿggÿhhÿiiÿiiÿjjÿiiþddô __Â\\a\\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿþþ þþ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ þþ þþ ÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmmYY6]]Ÿ__ë ccþeeÿ eeÿ ddÿ ddÿ ddÿ ccÿ ccÿ ccÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿbbÿbbÿ ccÿ ccÿ ccÿ ddÿ ddÿ ddÿeeÿeeÿffÿggÿggÿhhÿhhÿiiÿjjÿkkÿjjÿggü bbÞ^^Œ^^.UUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿþþ ÿÿ þþ ÿÿ ÿÿ þþ þþþþþþÿÿÿÿÿÿþþþþþþ þþ ÿÿ ÿÿ ÿÿ þþ ÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿff\\[\\à aaöeeÿeeÿeeÿ eeÿ ddÿ ddÿ ccÿ bbÿ bbÿ bbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿ bbÿ ccÿ ccÿ ccÿ ddÿ eeÿeeÿeeÿffÿffÿggÿggÿhhÿiiÿjjÿjjÿjjÿiiþddñ aa°__H\\ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿþþ þþ ÿÿ þþ þþÿÿÿÿþþþþþþÿÿÿÿþþÿÿþþþþþþÿÿÿÿÿÿþþ ÿÿ þþ þþ ÿÿþþÿÿÿÿÿÿÿÿÿÿ]]]]{^^Ý ddüffÿffÿeeÿ eeÿ eeÿ ddÿ ddÿ ccÿ bbÿ bbÿaaÿaaÿ``ÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿbbÿccÿ bbÿ ccÿ ccÿ ddÿ ddÿeeÿeeÿeeÿeeÿggÿggÿhhÿiiÿiiÿjjÿjjÿkkÿkkÿggø aaÊ\\cYYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿþþ þþ ÿÿ ÿÿÿÿÿÿþþÿÿþþþþÿÿþþþþþþþþþþþþþþÿÿþþþþÿÿþþÿÿÿÿþþ þþ þþ þþÿÿÿÿ¶¶cc.\\›__ìeeýggÿggÿffÿffÿ eeÿ eeÿ ddÿ ddÿ ccÿ bbÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿbbÿbbÿ bbÿ ccÿ ccÿ ddÿ ddÿ ddÿeeÿeeÿggÿggÿggÿhhÿhhÿiiÿjjÿkkÿllÿllÿiiü ccÜ``ZZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿ þþÿÿþþÿÿþþþþþþþþþþÿÿÿÿ þþ!þþ!þþ!þþ!þþ!ÿÿ ÿÿþþþþþþþþþþþþÿÿþþÿÿ ÿÿ ¶¶iiA^^² ``õggþggÿggÿggÿeeÿ ffÿ eeÿ eeÿ ddÿ ccÿ ccÿ bbÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿbbÿbbÿbbÿbbÿbbÿ bbÿ bbÿ ccÿ ddÿ ddÿ eeÿeeÿffÿffÿggÿggÿhhÿiiÿiiÿjjÿkkÿkkÿllÿjjþddê^^—^^.??ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ ÿÿ ÿÿ þþÿÿþþþþÿÿþþþþþþþþ!þþ#þþ%þþ&þþ'ÿÿ(ÿÿ(ÿÿ(ÿÿ(þþ&þþ%þþ$þþ!þþþþþþþþÿÿþþÐÐuuPddÀ eeøiiÿiiÿhhÿggÿffÿ eeÿ eeÿ eeÿ ddÿ ddÿ ddÿ ccÿbbÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ__ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿbbÿbbÿbbÿ ccÿ ccÿ ddÿ ddÿ eeÿeeÿeeÿffÿggÿhhÿhhÿiiÿjjÿjjÿkkÿllÿmmÿkkÿffñ``¬ZZ;ffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿ þþÿÿþþþþÿÿþþÿÿþþ!þþ#þþ&þþ)þþ+þþ,þþ-þþ/þþ/þþ/þþ/þþ.þþ-þþ+ÿÿ(þþ%þþ#ÿÿ þþÒÒ"ƒƒYrrÁss÷rrÿmmÿjjÿiiÿggÿ ffÿ eeÿ eeÿ ddÿ ccÿ ccÿ bbÿ ccÿbbÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿbbÿ bbÿ ccÿ ccÿ ddÿ ddÿ eeÿeeÿffÿffÿffÿggÿhhÿiiÿjjÿkkÿllÿllÿmmÿllÿggö__º[[FHHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ ÿÿ ÿÿ þþÿÿþþþþÿÿþþÿÿþþ!þþ$þþ'þþ+þþ.ÿÿ0þþ1þþ4þþ5þþ6þþ6þþ6þþ6þþ4þþ2þþ.þþ,þþ)øø(›˜\ƒƒ¾)‡‡õ%ÿyxÿrqÿmmÿjjÿ hhÿ ggÿ ffÿ eeÿ ddÿ ccÿ bbÿ bbÿbbÿbbÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ__ÿ__ÿ^^ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿ bbÿ ccÿ ccÿ ddÿ ddÿ eeÿffÿffÿffÿffÿggÿhhÿiiÿjjÿkkÿllÿllÿmmÿmmÿhhù ``Ã\\M__ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþ þþ þþ ÿÿþþÿÿþþþþþþþþ!þþ$þþ&þþ*þþ.þþ2ÿÿ3þþ6þþ9þþ;ÿÿ<þþ=þþ=ÿÿ<þþ;þþ8þþ6ÿÿ3ùù1´´`-––Ù3’’þ,‹‹ÿ"ÿyyÿssÿooÿ kkÿ iiÿ ggÿ ffÿ ddÿ ccÿ bbÿbbÿbbÿbbÿaaÿ``ÿ``ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ__ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿbbÿ bbÿ ccÿ ccÿ ccÿ ddÿeeÿffÿffÿffÿggÿhhÿhhÿiiÿjjÿkkÿllÿllÿmmÿnnÿjjú aaÉZZRTT ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ ÿÿ þþÿÿþþþþÿÿþþþþÿÿ"þþ&þþ*þþ.þþ1þþ4þþ8þþ;þþ>ÿÿ@þþBþþCþþCþþCþþAþþ?ÿÿ<þþ9 òò=2¸¸ƒ0ššæ-‘‘ÿ(‹‹ÿƒƒÿ{{ÿttÿnnÿ kkÿ iiÿ ggÿ eeÿ ddÿccÿccÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿbbÿ ccÿ ccÿ ddÿ eeÿ eeÿeeÿffÿffÿggÿhhÿiiÿiiÿkkÿllÿllÿmmÿnnÿooÿllú bbÊ[[TTT ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ þþÿÿþþþþþþþþþþþþ$ÿÿ(þþ*þþ/þþ4þþ7þþ;þþ=þþBþþEþþGþþIþþJþþIþþGþþEþþCþþ?ððD.»º‰+™™è)’’ÿ&ÿ„„ÿ{{ÿttÿ poÿ llÿ jjÿ ggÿ ffÿddÿccÿbbÿaaÿ``ÿ``ÿ``ÿ``ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿbbÿbbÿ ccÿ ccÿ ddÿ ddÿeeÿffÿffÿggÿggÿhhÿhhÿjjÿkkÿllÿllÿmmÿnnÿooÿllú ddÉ]]RTT ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ þþÿÿþþþþþþþþÿÿ þþ$ÿÿ(þþ,þþ1þþ5þþ9ÿÿ<þþAþþEþþIþþKþþNþþOþþOþþMþþKþþIþþE ññJ,ººŽ)œœé'““ÿ$ŽŽÿ……ÿ||ÿvvÿ qqÿ mmÿjjÿhhÿffÿddÿccÿbbÿa`ÿ__ÿ``ÿ__ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿccÿ ccÿ ddÿ ddÿ ddÿ eeÿeeÿffÿggÿhhÿhhÿiiÿjjÿkkÿllÿmmÿnnÿooÿ ppÿmmùccÅ\\M__ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿ ÿÿ þþ ÿÿþþþþÿÿþþþþþþ#ÿÿ(þþ,þþ1þþ5þþ9þþ>þþCþþGþþKþþOþþRþþTþþSþþRþþQþþNþþJ õõN*¿¿(žžé&–•ÿ"ÿ††ÿ~~ÿ wwÿ qqÿmmÿjjÿhhÿffÿccÿccÿaaÿ``ÿ__ÿ^^ÿ__ÿ__ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿccÿ ccÿ ccÿ ddÿ ddÿ eeÿffÿggÿggÿhhÿiiÿiiÿkkÿllÿmmÿnnÿnnÿppÿ!qqÿnnøccÁ\\HHHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þþ ÿÿ þþÿÿþþþþþþÿÿÿÿ"þþ'þþ,ÿÿ0þþ6þþ;ÿÿ@þþFþþIþþNþþRÿÿUþþWþþXþþXÿÿUþþSþþO õõR(ÃÑ'¢¢è$—–ÿ ÿˆˆÿÿ wwÿqqÿmmÿjjÿggÿeeÿeeÿbbÿaaÿ``ÿ__ÿ^^ÿ__ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ]]ÿ^^ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿbbÿbbÿ ccÿ ccÿ ddÿ ddÿ eeÿffÿggÿggÿhhÿhhÿiiÿjjÿkkÿmmÿmmÿnnÿooÿ qqÿ#rrÿlløeeº[[@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ ÿÿ ÿÿ þþÿÿþþþþÿÿþþþþ!þþ&þþ+þþ/þþ6þþ;þþAþþFþþLþþQÿÿUþþYþþ[þþ\þþ[þþ[þþXþþTööW$ÆÄ‘&£¢è#™˜ÿ ’’ÿ‰‰ÿÿ xxÿqqÿmmÿjjÿhhÿffÿccÿaaÿaaÿ``ÿ__ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿbbÿ ccÿ ddÿ ddÿ ddÿ eeÿffÿggÿggÿhhÿiiÿjjÿkkÿllÿmmÿnnÿnnÿppÿ"qqÿ$rrÿnnôcc®\\7UUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿþþ þþ ÿÿ þþÿÿÿÿþþþþþþþþ%þþ*ÿÿ0þþ6þþ;þþAþþGþþMþþSþþWþþ[þþ^þþ_ÿÿ`þþ_þþ\þþXööZ#ÈÈ‘%££è"š™þ““ÿ‰‰ÿ€€ÿ xxÿrrÿnnÿkkÿhhÿeeÿccÿbbÿaaÿ__ÿ^^ÿ]]ÿ]]ÿ]]ÿ\\ÿ]]ÿ]]ÿ]]ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿ ccÿ ddÿ ccÿ ddÿ eeÿffÿffÿggÿhhÿiiÿiiÿjjÿkkÿllÿmmÿnnÿppÿ!qqÿ$ssÿ&ssÿllñbb ^^+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿþþ ÿÿ þþ ÿÿþþþþþþÿÿþþ#þþ)þþ/þþ5þþ;þþAþþIþþOþþTþþZþþ^ÿÿ`þþbþþbþþbÿÿ`þþ[ùö\!ÊÈ’$¤¤è ››ÿ••ÿ‹‹ÿÿ yyÿrrÿooÿkkÿhhÿeeÿccÿbbÿ``ÿ__ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿccÿ ccÿ ccÿ ccÿ ddÿ eeÿffÿffÿggÿhhÿiiÿjjÿkkÿllÿmmÿnnÿooÿ!qqÿ#rrÿ%ttÿ&ssþmmë bbŒ[[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþ þþ þþÿÿþþÿÿþþÿÿ"ÿÿ(þþ/þþ5þþ;þþBþþIÿÿPþþXþþ\ÿÿ`þþcþþdþþdþþdþþbþþ]ùù_ ËÊ–#§§éœœÿ–•ÿŒŒÿ‚‚ÿ yyÿssÿnnÿkkÿhhÿffÿbbÿaaÿ``ÿ__ÿ^^ÿ^^ÿ]]ÿ]]ÿ\\ÿ[[ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ__ÿ``ÿaaÿbbÿbbÿbbÿbbÿbbÿbbÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿccÿccÿ ccÿ ccÿ ddÿ eeÿ eeÿffÿggÿhhÿhhÿiiÿjjÿkkÿllÿnnÿooÿ qqÿ"rrÿ$ssÿ'ttÿ&ssþkkâ aaxccÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ þþ ÿÿþþþþþþÿÿ"ÿÿ(þþ.þþ5þþ;þþBþþIþþQþþWþþ]þþbþþeÿÿfþþhþþgþþdÿÿ`ù÷cÌ̘!¨¨éœœÿ––ÿÿ ‚‚ÿzzÿssÿnnÿkkÿhhÿddÿccÿaaÿ``ÿ``ÿ__ÿ]]ÿ]]ÿ\\ÿ\\ÿ[[ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ^^ÿ__ÿ``ÿ``ÿaaÿbbÿccÿccÿccÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿccÿccÿ ccÿ ddÿ ddÿ ddÿffÿggÿhhÿhhÿiiÿjjÿkkÿllÿmmÿooÿppÿ!qqÿ#ssÿ&ttÿ(vvÿ&ttýiiÕ__[TT ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ þþþþþþþþþþ!þþ'þþ.þþ5ÿÿ<ÿÿDþþKþþRþþYÿÿ`þþeþþiþþkþþkþþjþþhÿÿf÷÷fÍÍ› ªªëÿ˜˜ÿÿ ƒƒÿ|{ÿutÿooÿkkÿggÿeeÿccÿbbÿ``ÿ__ÿ^^ÿ\\ÿ\\ÿ\\ÿ[[ÿ[[ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ__ÿ``ÿbbÿccÿ ccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿbbÿaaÿ``ÿ``ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿbbÿbbÿbbÿccÿ ccÿ ddÿ ddÿ eeÿffÿggÿhhÿiiÿiiÿjjÿkkÿllÿnnÿooÿ!qqÿ"rrÿ$ttÿ(uuÿ)vvÿ%ttúhh¾[[=??ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿþþ þþÿÿþþþþÿÿ þþ'þþ/þþ5ÿÿ<ÿÿDþþMþþTþþ\þþbþþiþþlþþmþþnþþnþþlþþgúúiÎΞªªìŸŸÿ˜˜ÿŽŽÿ „„ÿ||ÿttÿooÿkkÿihÿffÿccÿaaÿ__ÿ^^ÿ]]ÿ]]ÿ\\ÿ\\ÿ\\ÿ[[ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ^^ÿ__ÿ__ÿaaÿbbÿ bbÿ ccÿ ccÿ ccÿccÿccÿddÿddÿddÿccÿddÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿ ccÿ ddÿ ddÿ eeÿ ffÿggÿggÿhhÿiiÿiiÿkkÿllÿnnÿooÿ qqÿ"rrÿ#ssÿ&ttÿ)vvÿ,xxÿ"rróff¢]]&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ þþ ÿÿþþþþþþ!þþ'þþ/þþ4ÿÿ<þþFþþOþþVþþ\þþdþþjþþmþþpþþqþþoþþmþþjúúkÏÏ ««ì  ÿ™™ÿÿ ……ÿ||ÿuuÿppÿllÿiiÿeeÿccÿaaÿ__ÿ^^ÿ^^ÿ]]ÿ\\ÿ\\ÿ\\ÿ[[ÿ[[ÿ[[ÿ[[ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ__ÿ``ÿ bbÿ ccÿ bbÿ bbÿ bbÿ bbÿ bbÿ ccÿ ccÿ ccÿ ccÿ ccÿ ccÿccÿccÿddÿddÿddÿddÿddÿddÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿaaÿbbÿbbÿccÿ ddÿ ddÿ eeÿ eeÿffÿggÿhhÿhhÿiiÿkkÿllÿnnÿooÿppÿ qqÿ#ssÿ%ttÿ)vvÿ+xxÿ,xxþppécc~ccÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þþ ÿÿþþþþÿÿ ÿÿ(þþ/þþ6þþ>þþGþþOþþWþþ_þþeþþkþþoþþqþþqþþqþþpþþlúúmÑÑ¡¬¬í  ÿ™™ÿÿ ……ÿ||ÿuuÿppÿllÿhhÿeeÿccÿbbÿ__ÿ__ÿ^^ÿ]]ÿ\\ÿ\\ÿ\\ÿ\\ÿ[[ÿ[[ÿ\\ÿ\\ÿ]]ÿ__ÿaaÿ bbÿ ccÿ ccÿ ccÿ ccÿ ccÿ ccÿ ccÿ bbÿ ccÿ ccÿ ccÿ ccÿ ccÿ ccÿ ccÿ ccÿ ddÿ ccÿ ddÿddÿddÿddÿddÿddÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿccÿ ddÿ ddÿ eeÿ ffÿffÿggÿhhÿiiÿjjÿkkÿmmÿnnÿooÿppÿ"rrÿ%ttÿ(vvÿ*xxÿ-yyÿ,xxýnnÔ``Wmmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þþ ÿÿþþþþþþ!ÿÿ(þþ/þþ7þþ?þþHþþQþþYÿÿ`þþgþþmþþpþþrþþtþþsþþrþþnøøpÒÒ¢­¬í¢¢ÿœœÿ’‘ÿ ‡‡ÿÿyyÿuuÿqpÿooÿmmÿjjÿhhÿffÿddÿbbÿbbÿbbÿbbÿccÿbbÿccÿddÿddÿ ccÿ eeÿ ddÿ ddÿ ddÿ ccÿ ddÿ ddÿ ddÿ ddÿ ccÿ bbÿ ccÿ ccÿ ccÿ ccÿ ccÿ ccÿ ccÿ ddÿ ccÿ ddÿ ddÿ ddÿ ccÿddÿddÿddÿddÿddÿddÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ``ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿbbÿ ccÿ ddÿ eeÿ ffÿffÿggÿhhÿiiÿjjÿkkÿllÿnnÿooÿppÿ!rrÿ$ttÿ'vvÿ*xxÿ,yyÿ/zzÿ)wwøgg±__0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þþ ÿÿþþþþþþ!ÿÿ(ÿÿ0þþ8ÿÿ@þþJþþSþþ[þþbþþiþþoþþrþþvþþwþþwþþuþþqøøqÓÓ£²±ì¨¨ÿ¢¢ÿ™˜ÿ ÿ‡‡ÿ‚‚ÿ}}ÿyyÿvvÿttÿqqÿooÿmmÿkkÿkkÿkkÿjjÿkkÿmmÿooÿ ppÿ ppÿ ooÿ nnÿ llÿ llÿ llÿ llÿ kkÿ llÿ jjÿ jjÿ ggÿ eeÿ ddÿ ddÿ ddÿ ccÿ ccÿ ddÿ ccÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿddÿddÿddÿ ddÿ ddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿ ccÿ ccÿ ddÿ eeÿ eeÿffÿggÿiiÿjjÿkkÿllÿmmÿooÿppÿ rrÿ"ssÿ&uuÿ)wwÿ+yyÿ.zzÿ/zzÿ$ssídd‹__ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿþþþþþþ!þþ)þþ1þþ9þþBþþKþþTþþ\þþdþþlþþqþþuÿÿxþþzþþyþþwþþsúútÕÕ¥µµì««ÿ¥¤ÿœ›ÿ ’’ÿŠŠÿ„„ÿ~ÿzzÿxxÿuuÿrrÿppÿnnÿmmÿmmÿnnÿppÿ qqÿ rrÿ rrÿ qqÿ qqÿ ppÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ qqÿ ppÿ ppÿ nnÿ nnÿ mmÿ kkÿ hhÿ ggÿ ggÿ eeÿ ddÿ ddÿ ddÿ ddÿ ddÿ ccÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿaaÿbbÿ ccÿ ddÿ ddÿ eeÿ eeÿffÿggÿiiÿjjÿjjÿkkÿmmÿnnÿooÿqqÿ!rrÿ%ttÿ(wwÿ+yyÿ-zzÿ/{{ÿ/zzþppØ aaY__ÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿþþþþþþ#þþ+þþ2þþ:þþCþþMÿÿUþþ]þþgþþnþþsÿÿxþþzþþ|þþ|þþyþþvøøvÖÖ¤¶¶ì¬¬ÿ¦¥ÿœœÿ ““ÿŒ‹ÿ…„ÿ€€ÿ||ÿxxÿuuÿrrÿqqÿqqÿrrÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿ ppÿ ooÿ mmÿ llÿ iiÿ ggÿ eeÿ ddÿ ddÿ ccÿ ccÿ ddÿ ddÿ ddÿddÿ ddÿ ddÿ ddÿ ddÿ ddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ__ÿ``ÿ``ÿ``ÿaaÿbbÿbbÿccÿ ddÿ ddÿ eeÿ ffÿffÿhhÿiiÿjjÿkkÿllÿnnÿooÿqqÿ!rrÿ$ttÿ'vvÿ*xxÿ,zzÿ.{{ÿ1||ÿ-yyøkk²__3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþ þþ ÿÿþþþþþþ#þþ+ÿÿ3þþ;ÿÿDþþNþþVÿÿ`þþhþþoþþuþþzþþ~þþ~þþ~þþ|ÿÿxúúxØØ¦¹¹ì­­ÿ§§ÿžžÿ ••ÿÿ††ÿÿ||ÿxxÿwwÿwwÿ wwÿ vvÿ ttÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ qqÿ rrÿ rrÿ rrÿ rrÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ ooÿ mmÿ kkÿ iiÿ ggÿ eeÿ eeÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿddÿddÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿbbÿccÿ ccÿ ddÿ eeÿ eeÿffÿggÿhhÿiiÿjjÿllÿmmÿooÿppÿ!rrÿ#ssÿ&ttÿ)wwÿ+yyÿ-zzÿ0||ÿ3}}ÿ*vvìee…]]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ þþ ÿÿþþþþþþ$þþ,þþ4ÿÿ<þþFþþOþþYþþbþþiþþpÿÿxþþ}þþÿÿ€ÿÿ€þüþþ|úø}Üܨººì¯¯ÿ¨¨ÿ  ÿ ––ÿŽŽÿˆˆÿ‚‚ÿ€€ÿ ÿ ||ÿ {{ÿ yyÿ vvÿ uuÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ rrÿ rrÿ ssÿ ssÿ ssÿ rrÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ qqÿ ppÿ nnÿ mmÿ jjÿ iiÿ hhÿ eeÿ ddÿ ddÿ ccÿ ddÿ ddÿddÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿ ccÿ ddÿ ddÿ eeÿffÿggÿhhÿiiÿjjÿkkÿmmÿnnÿppÿ rrÿ#ssÿ%uuÿ(wwÿ*xxÿ-zzÿ0||ÿ3}}ÿ3}}ü qqÌ __Hffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þþ þþÿÿÿÿþþ%þþ-þþ5þþ=þþFþþQþþZþþbþþkþþtþþzþþ~ýýýý‚ýýƒýý‚þþ~üü~ÜÛª¼¼ì°°ÿªªÿ¡¡ÿ ˜˜ÿ‘‘ÿŒŒÿ ‰ˆÿ ……ÿ ‚‚ÿ ~ÿ ||ÿ yyÿ wwÿ uuÿ ttÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ rrÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿ qqÿ qqÿ ooÿ mmÿ kkÿ hhÿ ddÿ ddÿ ddÿ ddÿ ddÿ ddÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿccÿ ccÿ ddÿ eeÿffÿggÿhhÿiiÿjjÿjjÿllÿnnÿppÿqqÿ"ssÿ%ttÿ'wwÿ*xxÿ,yyÿ/{{ÿ2}}ÿ5ÿ.yyõiiŸaa"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ þþþþÿÿÿÿþþ&þþ.þþ5þþ>þþHþþRþþ[þþeþþnþþvþü|ýýýýƒýý„ýý…ýýƒýýûûÜÜ«¼¼í±±ÿ««ÿ¥¤ÿÿ••ÿ Žÿ ŠŠÿ ††ÿ ƒ‚ÿ ÿ ||ÿ zzÿ xxÿ vvÿ uuÿ ttÿ ssÿ rrÿ rrÿ ssÿ rrÿ rrÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ qqÿ rrÿ rrÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿ rrÿ qqÿ mmÿ jjÿ ggÿ eeÿ ddÿ ddÿ ddÿ ddÿddÿddÿccÿccÿccÿccÿccÿccÿccÿbbÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿccÿccÿ ddÿ ddÿ ffÿggÿggÿiiÿiiÿjjÿllÿnnÿooÿqqÿ"rrÿ$ttÿ&vvÿ)xxÿ+yyÿ.{{ÿ1||ÿ5ÿ7ÿ)vvÞdd`__ÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ þþþþþþþþþþ&þþ.þþ6þþ?þþIþþSþþ^þþhþþpþþwüü~ýýƒýý…ýý‡þý‡ýý†ýýƒûûƒÜܬ½¼íµµÿ±°ÿ©¨ÿŸŸÿ ——ÿ ÿ ‹‹ÿ ‡‡ÿ ƒƒÿ ÿ ||ÿ zzÿ xxÿ wwÿ uuÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿ qqÿ rrÿ rrÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿ rrÿ qqÿ qqÿ mmÿ kkÿ hhÿ ffÿ ddÿ ddÿddÿddÿddÿddÿccÿccÿccÿccÿccÿccÿbbÿccÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿbbÿccÿ ccÿ ddÿ ffÿggÿggÿiiÿiiÿjjÿllÿmmÿooÿqqÿ!rrÿ#ttÿ&uuÿ)wwÿ+yyÿ-zzÿ0{{ÿ4~~ÿ7€€ÿ4~~øll«[['ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿþþÿÿ þþ'þþ/þþ8þþBþþLþþVÿÿ`þþiþþqþþyÿÿ€ýý…ýýˆýýŠýýŠþý‰ýý†ûû…ÝÝ®ÀÀí¸·ÿ²²ÿ©©ÿ¡ ÿ ˜˜ÿ ‘‘ÿ ŒŒÿ ˆˆÿ ƒƒÿ €€ÿ }}ÿ zzÿ xxÿ wwÿuuÿ ttÿssÿssÿssÿssÿssÿrrÿrrÿrrÿrrÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿ rrÿ rrÿ rrÿ ssÿ rrÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿ ppÿ nnÿ jjÿ ggÿ ddÿddÿddÿddÿddÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿ``ÿaaÿaaÿbbÿbbÿ ccÿ ddÿ eeÿffÿggÿhhÿiiÿjjÿkkÿmmÿnnÿppÿ!rrÿ#ssÿ%uuÿ(wwÿ+xxÿ-zzÿ/{{ÿ2}}ÿ5ÿ9‚‚þ+wwäeeiff ÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿþþþþÿÿ ÿÿ(þþ1þþ:þþCþþMþþWþþaþþjþþsþþ{þþ‚þý‡ýý‹ýýŒýýýý‹ýý‡ùùˆÞÞ¯ÁÁí¹¹ÿ³³ÿ«ªÿ¢¢ÿššÿ ““ÿ ŽŽÿ ‰‰ÿ ……ÿ ‚‚ÿ ~~ÿ {{ÿ yyÿwwÿvvÿuuÿttÿssÿssÿrrÿssÿssÿrrÿssÿrrÿrrÿssÿssÿssÿssÿ rrÿ ssÿ ssÿ ssÿ ssÿ ssÿ ttÿ ssÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿ mmÿ iiÿ hhÿeeÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿaaÿaaÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ``ÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿ ddÿ eeÿ ffÿggÿggÿiiÿjjÿkkÿllÿnnÿooÿ rrÿ"ssÿ$ttÿ'vvÿ+yyÿ,zzÿ/{{ÿ2}}ÿ5€€ÿ9‚‚ÿ8û$rr¶ aa/ÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿþþþþþþ!þþ*þþ2þþ:ÿÿDþþNþþXþþbþþkþþtþþ}þþƒýý‰ýýŒýýŽýýýýýýŠùùŠÝݱÁÁï¹¹ÿ´´ÿ¬¬ÿ¤¤ÿ œœÿ ””ÿ ÿ ‹‹ÿ ††ÿ ‚‚ÿ ~~ÿ ||ÿ yyÿ xxÿvvÿuuÿttÿttÿssÿssÿssÿssÿssÿssÿssÿssÿssÿssÿssÿrrÿssÿssÿssÿssÿ ssÿ ttÿ ssÿ ttÿ ttÿ ttÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ qqÿ rrÿ qqÿ qqÿ rrÿ nnÿiiÿeeÿddÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿ``ÿ__ÿ__ÿ``ÿ``ÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿ ccÿ ddÿ eeÿffÿggÿiiÿjjÿkkÿllÿnnÿooÿqqÿ!ssÿ$ttÿ'vvÿ+yyÿ,zzÿ.{{ÿ1}}ÿ5ÿ8ÿ;ƒƒÿ0zzçhhnUU ÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿþþþþÿÿ"þþ*þþ2ÿÿ<þþEþþOþþYþþcþþnþþwþþ~ýý…ýý‹ýýŽýý‘ýý’ýýýýŒûûŒáß³ÃÃï»»ÿ¶¶ÿ®®ÿ¥¥ÿÿ ––ÿ ÿ ŒŒÿ ‡‡ÿ ƒƒÿ€€ÿ}}ÿzzÿxxÿwwÿvvÿttÿttÿttÿssÿttÿssÿssÿssÿssÿssÿssÿssÿssÿrrÿrrÿrrÿssÿssÿttÿttÿ ttÿ ttÿ ttÿ ttÿ ttÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿ qqÿllÿggÿddÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿ``ÿ__ÿ``ÿ``ÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿ ccÿ ddÿ eeÿ ffÿggÿhhÿjjÿkkÿllÿmmÿooÿppÿ rrÿ#ttÿ&vvÿ*xxÿ+yyÿ.{{ÿ1}}ÿ5ÿ7ÿ;ƒƒÿ:‚‚ú#ss³bb,ÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿþþþþÿÿ"þþ*ÿÿ3ÿÿ<þþFþþOþþZþþeþþoÿÿxýý€þý‡ýýýý‘ýý”ýý”ýý’ýýûûááµÅÄð½¼ÿ¸·ÿ¯¯ÿ§§ÿŸŸÿ ™™ÿ ““ÿ ŽŽÿ‰‰ÿ…„ÿÿ~~ÿ{{ÿyyÿxxÿvvÿvvÿuuÿssÿssÿssÿrrÿssÿssÿssÿssÿssÿssÿssÿssÿssÿssÿrrÿssÿttÿttÿttÿttÿ ttÿ ttÿ ttÿ ttÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿppÿmmÿiiÿffÿddÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿbbÿbbÿccÿ ddÿ ddÿ eeÿggÿhhÿiiÿjjÿkkÿmmÿnnÿppÿqqÿ"ssÿ%uuÿ)wwÿ+yyÿ.{{ÿ1}}ÿ4ÿ7ÿ:ƒƒÿ=……ÿ0{{áfffTT ÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿþþþþÿÿ"þþ*þþ2ÿÿ<þþFÿÿPþþ[ÿÿfþþpþüyýýÿýˆþýýý’ýý•ýý–ýý”ýý’ûû’ãá¸ÆÆð¾½ÿ¹¹ÿ±±ÿ¨¨ÿ¡¡ÿ ššÿ ””ÿ ÿ ŠŠÿ……ÿ‚‚ÿ~~ÿ||ÿyyÿxxÿwwÿvvÿuuÿttÿttÿssÿssÿssÿttÿttÿttÿssÿssÿssÿttÿttÿssÿssÿssÿttÿttÿttÿttÿttÿttÿ ttÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿqqÿooÿkkÿffÿddÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿaaÿaaÿaaÿaaÿbbÿbbÿbbÿ ccÿ ddÿ eeÿ ffÿggÿiiÿjjÿkkÿmmÿnnÿppÿqqÿ"ssÿ$uuÿ(wwÿ+yyÿ.{{ÿ0}}ÿ3ÿ7ÿ:ƒƒÿ=……ÿ9‚‚÷pp¦dd&ÿÿÿÿÿÿÿÿÿÿÿÿþþþþ þþ ÿÿþþþþþþ#þþ+ÿÿ3þþ=þþGþþQþþ\ÿÿfþþpþþyýý‚ýý‰ýýýý“ýý–ýý—ýý—ýý”ùù•ãâ¹ÈÇðÀ¿ÿº¹ÿ²²ÿªªÿ¢¢ÿ ššÿ ••ÿ ÿ‹‹ÿ††ÿ‚‚ÿÿ||ÿzzÿyyÿwwÿvvÿuuÿuuÿttÿvvÿttÿvvÿuuÿuuÿttÿttÿttÿvvÿttÿttÿttÿuuÿttÿttÿttÿuuÿttÿttÿttÿttÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿppÿmmÿggÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿaaÿaaÿaaÿbbÿbbÿccÿ ccÿ ccÿ eeÿ ffÿggÿiiÿjjÿkkÿmmÿnnÿppÿqqÿ!ssÿ#ttÿ&vvÿ*yyÿ-{{ÿ0||ÿ3~~ÿ6ÿ:ƒƒÿ=……ÿ>……þ0||àiio[[ÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ þþþþþþþþþþ$þþ+þþ4þþ=þþGþþRþþ\ÿÿfþþqþþ{ýýƒýýŠýý‘ýý•ýý˜ýýšýý™ýý–ùù—äã¹ÉÈðÁÀÿ»»ÿ³³ÿ««ÿ££ÿ œœÿ ––ÿ‘‘ÿŒŒÿ‡‡ÿƒƒÿ€€ÿ}}ÿ||ÿyyÿwwÿwwÿwwÿvvÿvvÿvvÿwwÿvvÿuuÿuuÿuuÿttÿvvÿvvÿuuÿuuÿuuÿttÿttÿttÿuuÿttÿttÿttÿuuÿttÿ ttÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿrrÿrrÿppÿllÿiiÿeeÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿaaÿaaÿ``ÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿccÿ ccÿ ccÿ ddÿ ffÿggÿhhÿiiÿkkÿllÿnnÿooÿqqÿ!ssÿ#ttÿ%uuÿ)xxÿ,zzÿ/||ÿ2~~ÿ6€€ÿ9ƒƒÿ<„„ÿ?††ÿ<……û&vvÀ ee???ÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ þþ ÿÿþþþþþþ#þþ*þþ4þþ>þþIþþSþþ]þþhþþrþþ{ýý„ýý‹ýý’ýý–ýýšýýœýý›ýý™ûû˜åã»ÊÉðÂÂÿ½¼ÿµµÿ­­ÿ¥¥ÿ žžÿ ™™ÿ “’ÿŽŽÿ‰‰ÿ……ÿ‚‚ÿ€€ÿ}}ÿ{{ÿxxÿyyÿxxÿvvÿwwÿwwÿwwÿvvÿvvÿvvÿvvÿwwÿwwÿvvÿvvÿuuÿuuÿuuÿuuÿvvÿuuÿuuÿuuÿuuÿvvÿvvÿ uuÿ ttÿ ttÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿrrÿrrÿqqÿqqÿnnÿiiÿeeÿccÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿccÿ ddÿ ccÿ ddÿ eeÿffÿhhÿiiÿjjÿkkÿmmÿooÿqqÿ rrÿ"ttÿ%uuÿ(wwÿ+yyÿ.{{ÿ2~~ÿ5€€ÿ8‚‚ÿ<„„ÿ?††ÿA‡‡ÿ7înnˆ hhÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ þþ ÿÿþþþþþþ#þþ+þþ4þþ?þþHþþSþþ^þþiþþrüü|þý„ýýýý“ýý˜ýýœýýýýýý›ûûšåå¼ÌËñÄÃÿ¿¿ÿ··ÿ¯¯ÿ¨¨ÿ ¡¡ÿ ››ÿ••ÿÿ‹‹ÿ‡‡ÿƒƒÿÿÿ{{ÿzzÿyyÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿvvÿuuÿ uuÿ ttÿ ttÿ ttÿ ssÿ ssÿ ssÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿrrÿrrÿrrÿrrÿppÿnnÿiiÿeeÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿaaÿaaÿaaÿbbÿccÿddÿ ccÿ ccÿ eeÿffÿhhÿiiÿjjÿkkÿmmÿooÿqqÿ rrÿ"ttÿ$uuÿ'wwÿ*yyÿ.{{ÿ2~~ÿ5€€ÿ8‚‚ÿ<„„ÿ?††ÿAˆˆÿAˆˆý-zzÈii?UUÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ þþ ÿÿþþþþþþ#þþ,þþ5þþ>þþHþþTþþ_þþiþþrþþ{þþ…ýýŽýý”ýý™ýýýý ýý ýýûûžæå½ÍÍñÆÆÿÁÀÿ¹¹ÿ²²ÿªªÿ ¢¢ÿ œœÿ——ÿ’’ÿÿ‰‰ÿ††ÿ‚‚ÿÿ}}ÿ{{ÿyyÿyyÿyyÿxxÿwwÿxxÿwwÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿvvÿ uuÿ uuÿ vvÿ uuÿ uuÿ ttÿ ttÿ ssÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿ rrÿrrÿrrÿrrÿqqÿppÿmmÿhhÿddÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿbbÿaaÿaaÿbbÿccÿ ccÿ ddÿ eeÿffÿggÿiiÿjjÿkkÿmmÿooÿppÿrrÿ!ssÿ$uuÿ&vvÿ*xxÿ-zzÿ0}}ÿ4ÿ7ÿ<„„ÿ?††ÿAˆˆÿDŠŠÿ9ƒƒëpptbb ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þþ ÿÿþþþþþþ#þþ+þþ4þþ>þþHþþTþþ^þþhþþrþþ}ýý‡ýýŽýý•ýý›ýý ýý¢ýý¢ýý úú ææ¿ÐÏñÇÆÿÃÂÿ¼»ÿ´³ÿ««ÿ ¤¤ÿ ŸŸÿ™™ÿ””ÿÿ‹‹ÿ††ÿ‚‚ÿ€€ÿ~~ÿ||ÿzzÿzzÿyyÿxxÿxxÿxxÿxxÿxxÿwwÿxxÿxxÿxxÿxxÿxxÿwwÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿvvÿwwÿ vvÿ vvÿ vvÿ uuÿ ttÿ ttÿ uuÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿqqÿrrÿrrÿqqÿqqÿqqÿppÿmmÿffÿccÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿbbÿbbÿaaÿbbÿccÿ ccÿ ddÿ eeÿffÿggÿhhÿiiÿkkÿllÿnnÿppÿrrÿ!ssÿ$uuÿ%vvÿ)xxÿ,zzÿ0||ÿ4ÿ7ÿ;„„ÿ?††ÿAˆˆÿDŠŠÿA‡‡ú(xxª dd&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ þþ ÿÿþþþþÿÿ"þþ+ÿÿ3þþ=þþHþþRþþ]þþiþþtüüýý‡ýýýý—ýýýý¡ýý£ýý£ýý¢ûû¢èçÁÐÏòÉÈÿÅÄÿ½½ÿµµÿ­­ÿ¦¦ÿ   ÿššÿ••ÿÿ‹‹ÿ‡‡ÿ„„ÿÿ~~ÿ||ÿzzÿyyÿxxÿwwÿwwÿxxÿxxÿwwÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ vvÿ uuÿ uuÿ uuÿ uuÿ ttÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ rrÿrrÿrrÿrrÿqqÿqqÿqqÿooÿjjÿccÿbbÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿccÿccÿbbÿbbÿccÿccÿ ddÿ ddÿ ffÿggÿhhÿiiÿjjÿllÿnnÿppÿrrÿ!ssÿ#uuÿ%vvÿ)xxÿ,zzÿ0||ÿ3ÿ6ÿ:ƒƒÿ>††ÿAˆˆÿDŠŠÿEŠŠþ3~~ÕjjOffÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ ÿÿ ÿÿþþþþÿÿ"þþ)ÿÿ3þþ=þþFþþQþþ]þþiþþtüü~þý‡ýýýý˜ýýžýý¢ýý¤ýý¥ýý£ûû¤ éèÂÑÐóËÊÿÆÅÿ¾¾ÿ¶¶ÿ¯¯ÿ¨¨ÿ¡¡ÿ››ÿ––ÿ‘‘ÿŒŒÿˆˆÿ„„ÿÿ~~ÿ||ÿ{{ÿzzÿyyÿxxÿxxÿxxÿwwÿwwÿwwÿxxÿwwÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ vvÿ vvÿ vvÿ uuÿ uuÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ rrÿqqÿrrÿrrÿqqÿqqÿqqÿqqÿqqÿllÿffÿccÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿccÿccÿccÿbbÿbbÿccÿ ddÿ eeÿ ffÿggÿhhÿiiÿjjÿllÿmmÿooÿqqÿ!ssÿ#ttÿ%vvÿ)xxÿ,zzÿ/||ÿ2~~ÿ5€€ÿ9ƒƒÿ=……ÿA‡‡ÿC‰‰ÿGŒŒÿ@††ò$tt†TTÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿþþþþÿÿ"þþ)þþ2þþ;þþEþþQþþ]þþhþþsþþ~ÿÿˆýý’ýý™ýýŸýý£ýý¥ýý¦ýý¦ûû§ êèÅÓÒóÌËÿÆÆÿ¿¿ÿ··ÿ°¯ÿ¨¨ÿ¢¢ÿœœÿ––ÿ‘‘ÿŒŒÿˆˆÿ„„ÿÿÿ}}ÿ{{ÿzzÿyyÿxxÿwwÿxxÿxxÿwwÿwwÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ vvÿ uuÿ ttÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿrrÿrrÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿppÿiiÿddÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿccÿccÿccÿccÿbbÿccÿ ddÿ ddÿ ffÿggÿhhÿiiÿjjÿkkÿmmÿnnÿppÿrrÿ#ttÿ%vvÿ(wwÿ+zzÿ/||ÿ2~~ÿ5€€ÿ9‚‚ÿ<„„ÿ@‡‡ÿC‰‰ÿF‹‹ÿDŠŠü)vv² cc)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿþþþþþþ!ÿÿ(þþ2þþ;þþFþþQþþ]þþhþþtþþýýŠýý“ýýšýý ýý¤ýý§þý©ýý©ûû©êêÆÓÒóÌËÿÇÆÿÀÀÿ¹¸ÿ°°ÿ ©©ÿ¢¢ÿœœÿ——ÿ’’ÿÿ‰‰ÿ……ÿ‚‚ÿÿ}}ÿ||ÿ{{ÿyyÿyyÿxxÿxxÿxxÿwwÿwwÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿxxÿxxÿ wwÿ wwÿ wwÿ vvÿ ttÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿrrÿppÿmmÿggÿddÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿbbÿaaÿaaÿbbÿccÿccÿccÿccÿccÿccÿ eeÿ ffÿggÿggÿiiÿjjÿkkÿmmÿnnÿppÿrrÿ"ttÿ$vvÿ'wwÿ*yyÿ/||ÿ1~~ÿ4ÿ8‚‚ÿ;„„ÿ>††ÿB‰‰ÿF‹‹ÿHŒŒþ4ÖhhNÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþ ÿÿ ÿÿÿÿþþþþ!ÿÿ(þþ1þþ;þþFþþQþþ]þþiþþuÿÿ€ýý‹ýý”ýýœýý¢ýý¦ýý©ýý«ýýªüüª êéÇÕÓóÍÌÿÈÈÿÁÁÿ¹¹ÿ²²ÿ ««ÿ¤¤ÿžžÿ˜˜ÿ““ÿŽŽÿŠŠÿ……ÿ‚‚ÿ€€ÿ~~ÿ||ÿzzÿzzÿyyÿxxÿxxÿxxÿwwÿxxÿwwÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿxxÿwwÿwwÿwwÿ wwÿ vvÿ uuÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿ qqÿ qqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿooÿllÿffÿccÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿaaÿaaÿbbÿccÿccÿccÿddÿccÿccÿ ddÿ ffÿ ffÿggÿiiÿjjÿkkÿllÿnnÿppÿqqÿ!ssÿ$uuÿ&wwÿ*yyÿ.{{ÿ1~~ÿ4ÿ8‚‚ÿ:ƒƒÿ>††ÿAˆˆÿE‹‹ÿIÿ=……îpp}UUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ ÿÿÿÿþþþþþþ'þþ1þþ:þþEþþQþþ^þþjþþuýýùùõóžûûŸýý£ýý¨ýý«ýý¬ýýªúú¬ êéÈÕÔôÏÎÿÊÉÿÂÂÿººÿ³³ÿ¬¬ÿ¥¥ÿŸŸÿ™™ÿ””ÿÿŠŠÿ††ÿƒƒÿ€€ÿ~~ÿ||ÿ{{ÿzzÿzzÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ vvÿ vvÿ vvÿ uuÿ uuÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ qqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿooÿjjÿddÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿaaÿaaÿbbÿbbÿccÿccÿddÿddÿddÿddÿ ddÿ eeÿ ffÿggÿhhÿjjÿkkÿmmÿmmÿooÿqqÿ!ssÿ#ttÿ&vvÿ*yyÿ-{{ÿ0}}ÿ4€€ÿ7‚‚ÿ:ƒƒÿ=††ÿA‡‡ÿDŠŠÿHŒŒÿE‹‹ù'xxª``%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ ÿÿþþÿÿþþþþ'þþ1þþ;þþEþþQþþ^þþjúøzÛÙ¥ ÓÑË êê²ûûŸýý¥ýýªýý¬ýý­ýý¬úú® ëêÉ×ÖôÐÏÿËÉÿÃÂÿ¼»ÿ´´ÿ­­ÿ¦¦ÿ  ÿ››ÿ••ÿÿ‹‹ÿ‡‡ÿ„„ÿÿÿ}}ÿ||ÿ{{ÿzzÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ uuÿ ttÿ ttÿ ssÿ ssÿ rrÿ rrÿ qqÿ qqÿ qqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿmmÿggÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿbbÿccÿccÿddÿddÿ ddÿ ddÿ eeÿ eeÿ ffÿggÿhhÿjjÿkkÿllÿmmÿooÿqqÿ ssÿ#ttÿ&vvÿ(xxÿ-{{ÿ0}}ÿ4ÿ7ÿ:ƒƒÿ=……ÿ@‡‡ÿDŠŠÿGŒŒÿIþ3ÐiiFUUÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ þþþþÿÿþþÿÿ(þþ1þþ:þþFþþRôôdËËš ¸¸ÚÀÀöÎÎç íì²ýý¡ýý§ýý«ýý®ýý¯ýý®üü¯ êêËØ×ôÐÏÿËÊÿÄÃÿ¼¼ÿ´´ÿ­­ÿ§§ÿ¡¡ÿ››ÿ••ÿÿŒŒÿ‡‡ÿ……ÿ‚‚ÿÿ}}ÿ||ÿ{{ÿzzÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ uuÿ uuÿ uuÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ qqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿooÿiiÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿbbÿbbÿccÿccÿddÿ ddÿ ddÿ ddÿ eeÿ eeÿ ffÿggÿhhÿiiÿkkÿllÿmmÿooÿppÿ rrÿ#ttÿ%vvÿ(xxÿ,zzÿ0}}ÿ3ÿ7ÿ:ƒƒÿ=……ÿ?‡‡ÿC‰‰ÿE‹‹ÿJÿ;……çoopjj ÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ þþþþÿÿþþþþ'þþ/þþ:îîM¸¸Ž££Ý¬¬ù»ºÿÂÂþÎÍè ìë´ýý£ýý¨ýý­ýý°ýý±ýý°üü± ììÌÙØôÑÐÿÌËÿÅÄÿ½½ÿµµÿ¯¯ÿ¨¨ÿ¡¡ÿ››ÿ––ÿ‘‘ÿŒŒÿ‰‰ÿ……ÿ‚‚ÿÿ~~ÿ||ÿ{{ÿzzÿzzÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ vvÿ uuÿ ttÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿppÿkkÿeeÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿaaÿbbÿbbÿccÿccÿccÿ ddÿ ddÿ ddÿ eeÿ ffÿ ffÿggÿhhÿhhÿjjÿllÿmmÿooÿppÿrrÿ"ttÿ%vvÿ'wwÿ+zzÿ.||ÿ3ÿ6ÿ:ƒƒÿ=……ÿ?‡‡ÿB‰‰ÿE‹‹ÿIÿDŠŠö%tt› ddÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ þþ þþÿÿþþþþ&ìì6¦¦|Û ––û££ÿ±±ÿ»»ÿÂÁþÎÍè ììµýý¤ýý©ýý¯ýý²ýý³ýý²üü³ íìÍÚÙôÒÑÿÍÌÿÅÅÿ½½ÿ··ÿ¯¯ÿ¨¨ÿ¢¢ÿœœÿ––ÿ‘‘ÿÿ‰‰ÿ††ÿ‚‚ÿ€€ÿ~~ÿ||ÿ{{ÿzzÿzzÿyyÿxxÿxxÿwwÿxxÿxxÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ vvÿ vvÿ uuÿ ttÿ uuÿ ssÿ rrÿ rrÿ rrÿ qqÿ qqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿooÿmmÿhhÿbbÿaaÿaaÿaaÿaaÿbbÿbbÿbbÿbbÿccÿccÿccÿ ddÿ ddÿ eeÿ ffÿ ffÿ ffÿggÿhhÿiiÿjjÿllÿmmÿooÿppÿrrÿ"ttÿ%vvÿ'wwÿ*yyÿ-{{ÿ2~~ÿ6ÿ9ƒƒÿ<……ÿ>††ÿB‰‰ÿE‹‹ÿHÿHý1||Àcc6ÿÿÿÿÿÿÿÿÿÿþþÿÿ þþ þþÿÿéé#——gÔ ††ûÿššÿ¥¥ÿ±±ÿ»»ÿÂÁþÏÎèìì¶ûû§ýý¬ýý±ýý´ýýµýý´üüµ íìÎÙÙõÓÑÿÍÌÿÆÅÿ¾¾ÿ·¶ÿ¯¯ÿ¨¨ÿ¢¢ÿÿ——ÿ’’ÿŽŽÿ‰‰ÿ††ÿƒƒÿ€€ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿxxÿwwÿxxÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ vvÿ uuÿ uuÿ uuÿ ssÿ rrÿ rrÿ rrÿ qqÿ qqÿ qqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿppÿppÿooÿkkÿddÿbbÿaaÿbbÿbbÿbbÿbbÿbbÿccÿccÿccÿ ddÿ ddÿ eeÿ ffÿ ffÿ ffÿ ggÿhhÿiiÿjjÿkkÿmmÿnnÿppÿrrÿ"ttÿ%vvÿ'wwÿ*yyÿ-{{ÿ1~~ÿ5€€ÿ8‚‚ÿ<„„ÿ>‡‡ÿB‰‰ÿE‹‹ÿHŒŒÿJŽŽÿ<……âmmkUU ÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ þþÜ܈ˆTuuÉ {{úƒƒÿŠŠÿ‘‘ÿ››ÿ¦¦ÿ±±ÿ»»ÿÃÂþÏÎéìë¸ýû¨ýý®ýý³ýýµýý·ýý¶üü¶ ííÎÛÚôÔÒÿÎÍÿÇÆÿ¿¾ÿ¸·ÿ°°ÿ©©ÿ¤¤ÿÿ——ÿ““ÿŽŽÿŠŠÿ††ÿƒƒÿ€€ÿÿ~~ÿ}}ÿ{{ÿzzÿzzÿyyÿxxÿyyÿxxÿxxÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ wwÿ vvÿ vvÿ vvÿ vvÿ ttÿ ttÿ ssÿ ssÿ rrÿ rrÿ qqÿqqÿqqÿppÿqqÿqqÿqqÿqqÿqqÿqqÿppÿppÿqqÿppÿmmÿhhÿccÿaaÿbbÿbbÿbbÿbbÿccÿccÿccÿ ddÿ ddÿ eeÿ ffÿ ggÿ ggÿ ggÿhhÿiiÿjjÿkkÿmmÿnnÿooÿqqÿ"ttÿ%vvÿ'wwÿ*yyÿ-{{ÿ0}}ÿ4€€ÿ8‚‚ÿ<……ÿ>‡‡ÿB‰‰ÿDŠŠÿGŒŒÿKŽŽÿF‹‹ø'vv¦ ``%ÿÿÿÿÿÿÿÿÿÿÿÿþþ×× {{Bjj¿ qqøyyÿ~~ÿ„ƒÿŠŠÿ’’ÿ››ÿ¥¥ÿ±±ÿ¼¼ÿÄÃþÏÏé ëëºýüªýý¯ýý´ýý·ýý¸ýý·ýü· ííÏÛÚõÔÓÿÏÎÿÈÇÿÀ¿ÿ¹¸ÿ±±ÿ««ÿ¤¤ÿÿ™™ÿ””ÿÿŠŠÿ‡‡ÿƒƒÿÿÿ~~ÿ||ÿ{{ÿ{{ÿzzÿyyÿyyÿxxÿxxÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ vvÿ vvÿ vvÿ ttÿ uuÿ ttÿ ssÿ rrÿ rrÿ rrÿ qqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿqqÿppÿppÿppÿooÿppÿooÿhhÿccÿbbÿbbÿaaÿbbÿccÿccÿccÿ ddÿ ddÿ eeÿ ffÿ ggÿggÿggÿhhÿiiÿjjÿkkÿmmÿnnÿooÿqqÿ"ttÿ%vvÿ'wwÿ*yyÿ-{{ÿ0}}ÿ4ÿ7‚‚ÿ;„„ÿ>††ÿAˆˆÿCŠŠÿGŒŒÿJŽŽÿKý7€€ÌggEUUÿÿÿÿÿÿÿÿÿÿÔÔmm1cc° jjörrÿvvÿyyÿ~~ÿ„„ÿ ŠŠÿ ’’ÿ››ÿ¦¦ÿ²²ÿ½¼ÿÄÃþÑÐë îí¼ýü¬ýý±ýý¶ýý¹ýýºýýºüü¹ ðîÏÜÛôÕÔÿÐÏÿÉÈÿÂÁÿº¹ÿ³³ÿ¬¬ÿ¥¥ÿŸŸÿššÿ””ÿÿ‹‹ÿˆˆÿ„„ÿÿÿ~~ÿ||ÿ||ÿ{{ÿzzÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿyyÿxxÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ vvÿ uuÿ ttÿ uuÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿqqÿqqÿppÿqqÿqqÿqqÿqqÿqqÿppÿppÿppÿppÿppÿnnÿkkÿeeÿbbÿaaÿbbÿbbÿccÿccÿddÿ ddÿ eeÿ eeÿ ffÿggÿhhÿggÿiiÿjjÿkkÿllÿmmÿooÿqqÿ!ssÿ$uuÿ'wwÿ)yyÿ,{{ÿ0}}ÿ3ÿ6ÿ:„„ÿ>††ÿAˆˆÿDŠŠÿGŒŒÿIÿLÿAˆˆæ!rrdmmÿÿÿÿÿÿll!^^ ffòmmþooÿrrÿuuÿyyÿ~~ÿ „„ÿ ‹‹ÿ ’’ÿ œœÿ§§ÿ³²ÿ¾½ÿÆÅþÓÒì íì¾ýý­ýý³ýý¸ýý»ýý¼ýý»üüº ððÐÝÜôÕÔÿÑÏÿÊÉÿÃÂÿ»»ÿ³³ÿ­­ÿ¦¦ÿ  ÿššÿ••ÿÿŒŒÿˆˆÿ……ÿ‚‚ÿ€€ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ vvÿ uuÿ uuÿ ttÿ uuÿ ttÿ ssÿ rrÿ rrÿqqÿqqÿqqÿppÿppÿqqÿqqÿqqÿppÿppÿppÿppÿppÿooÿooÿmmÿffÿccÿbbÿccÿccÿccÿddÿ ddÿ ddÿ eeÿ ffÿggÿhhÿhhÿiiÿjjÿkkÿmmÿnnÿooÿqqÿ rrÿ$uuÿ'wwÿ*yyÿ-{{ÿ0}}ÿ3ÿ6ÿ:„„ÿ=……ÿ?ˆˆÿDŠŠÿGŒŒÿIÿLÿB‰‰íssy[[ÿÿkk]]ƒ bbìjjþllÿmmÿooÿqqÿttÿyyÿ ~~ÿ „„ÿ ‹‹ÿ ’’ÿ ÿ¨¨ÿ´³ÿ¾½ÿÆÅþÔÒì îí¿ýý°ýýµýýºýý½ýý½ýý¼üü» ðïÑÝÝôÕÔÿÑÐÿÊÉÿÃÂÿ»»ÿ´´ÿ­­ÿ§§ÿ¡¡ÿ››ÿ••ÿ‘‘ÿÿ‰‰ÿ……ÿƒƒÿ€€ÿÿ}}ÿ||ÿ{{ÿzzÿzzÿyyÿyyÿyyÿyyÿyyÿyyÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿxxÿwwÿ wwÿ wwÿ wwÿ vvÿ vvÿ uuÿ uuÿ vvÿ vvÿ ttÿ ssÿ rrÿ rrÿ qqÿqqÿqqÿppÿqqÿqqÿqqÿppÿppÿppÿppÿppÿooÿooÿooÿmmÿggÿccÿbbÿccÿccÿddÿ ddÿ eeÿ eeÿ ffÿ ggÿhhÿhhÿiiÿjjÿllÿmmÿnnÿooÿqqÿ rrÿ#ttÿ'wwÿ*yyÿ-{{ÿ/}}ÿ2ÿ6ÿ9ƒƒÿ<……ÿ?‡‡ÿC‰‰ÿF‹‹ÿIÿLÿG‹‹ö&vv™ ggTT ^^d ``ßggýjjÿjjÿkkÿllÿnnÿppÿttÿ yyÿ ~~ÿ ……ÿ ‹‹ÿ ““ÿ ÿ¨¨ÿ´´ÿ¿¾ÿÇÆþÔÑî ïíÂýý²ýý·ýý¼ýý¾þý¾ýý½üü¼ ñðÑÝÜõ×ÖÿÒÑÿËÊÿÃÂÿ»»ÿ´´ÿ®®ÿ§§ÿ¡¡ÿœœÿ——ÿ’’ÿÿ‰‰ÿ††ÿ„„ÿÿÿ~~ÿ||ÿ||ÿ{{ÿzzÿzzÿyyÿzzÿzzÿyyÿxxÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ uuÿ vvÿ vvÿ vvÿ uuÿ ssÿ rrÿ rrÿ qqÿqqÿqqÿqqÿqqÿqqÿqqÿppÿppÿppÿppÿppÿooÿppÿppÿppÿnnÿiiÿccÿbbÿccÿddÿ ddÿ eeÿ eeÿ ffÿggÿhhÿiiÿjjÿjjÿkkÿmmÿnnÿooÿppÿrrÿ"ttÿ%vvÿ)xxÿ,zzÿ/||ÿ2~~ÿ6ÿ9ƒƒÿ<……ÿ>††ÿB‰‰ÿE‹‹ÿHŒŒÿKÿKŽŽü1}}¹ ee-ffXXK__Îggüjjÿiiÿjjÿjjÿkkÿkkÿmmÿppÿ ttÿ yyÿ ÿ ……ÿ‹‹ÿ ””ÿ žžÿ ©©ÿµ´ÿÀ¿ÿÈÇþÕÓî îîÄýý´ýý¹ýý½þý¿þý¿ýý¾ýü¾ ððÓÞÝõ×ÖÿÒÑÿËÊÿÃÂÿ¼¼ÿµµÿ®®ÿ¨¨ÿ¢¢ÿÿ——ÿ’’ÿŽŽÿŠŠÿ‡‡ÿ„„ÿ‚‚ÿ€€ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿzzÿzzÿyyÿyyÿyyÿxxÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ wwÿ vvÿ vvÿ vvÿ ttÿ ssÿ ssÿ rrÿ qqÿ qqÿqqÿqqÿppÿppÿqqÿqqÿppÿppÿppÿppÿppÿppÿppÿppÿppÿooÿjjÿeeÿccÿddÿ ddÿ eeÿ eeÿ ffÿ ggÿhhÿiiÿjjÿjjÿkkÿmmÿnnÿooÿppÿrrÿ"ttÿ%vvÿ(xxÿ,zzÿ/||ÿ2~~ÿ5ÿ9ƒƒÿ;……ÿ>‡‡ÿAˆˆÿDŠŠÿHŒŒÿKŽŽÿLþ0}}Ëee?UU[[2]]¹eeøjjÿjjÿiiÿiiÿhhÿiiÿiiÿkkÿmmÿ ppÿ ttÿ xxÿ ~~ÿ„„ÿŒŒÿ••ÿ ŸŸÿ ªªÿ·¶ÿÁÀÿÉÈþÕÔïïïÅýü¶ýýºýý¾ÿüÀüüÁýüÀüüÀ ððÓÝÝõØ×ÿÓÑÿÌÊÿÄÃÿ½½ÿ¶¶ÿ¯¯ÿ¨¨ÿ££ÿžžÿ˜˜ÿ““ÿÿ‹‹ÿ‡‡ÿ„„ÿ‚‚ÿ€€ÿ~~ÿ||ÿ||ÿ{{ÿ{{ÿzzÿzzÿzzÿyyÿyyÿxxÿxxÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ vvÿ vvÿ vvÿ vvÿ uuÿ ssÿ ttÿ rrÿ qqÿ qqÿqqÿppÿppÿqqÿqqÿppÿppÿppÿppÿooÿooÿooÿppÿppÿppÿqqÿllÿeeÿccÿ ddÿ eeÿ eeÿ ffÿ ggÿhhÿiiÿjjÿkkÿkkÿllÿmmÿnnÿppÿrrÿ"ttÿ%vvÿ(xxÿ+zzÿ/||ÿ2~~ÿ5€€ÿ8ƒƒÿ;……ÿ>‡‡ÿAˆˆÿDŠŠÿGŒŒÿJŽŽÿLÿ:ƒƒÚjjTff[[\\ccójjþjjÿiiÿhhÿhhÿhhÿggÿhhÿiiÿkkÿ mmÿ ppÿ ssÿ yyÿÿ††ÿÿ••ÿ  ÿ ¬¬ÿ··ÿÂÁÿÊÉþÖÕïïîÇüü¸ýý»ýüÀüüÂýýÂüüÁüüÀ ññÓÞÞõØ×ÿÓÒÿÌËÿÅÅÿ¾¾ÿ¶¶ÿ¯¯ÿ©©ÿ¤¤ÿžžÿ™™ÿ””ÿÿ‹‹ÿˆˆÿ……ÿƒƒÿ€€ÿ~~ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿzzÿyyÿyyÿyyÿyyÿyyÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ vvÿ wwÿ vvÿ vvÿ uuÿ ttÿ ttÿ ssÿ rrÿ qqÿ qqÿqqÿqqÿppÿqqÿppÿppÿppÿppÿppÿppÿppÿppÿppÿppÿqqÿqqÿmmÿffÿ ccÿ eeÿ ffÿ ffÿ ggÿhhÿiiÿjjÿkkÿkkÿllÿmmÿooÿppÿrrÿ!ttÿ%vvÿ'wwÿ*yyÿ.{{ÿ2~~ÿ5€€ÿ8‚‚ÿ;……ÿ>††ÿAˆˆÿDŠŠÿGŒŒÿIŽŽÿLÿAˆˆèppkqq qq ]]p ccéjjþjjÿiiÿhhÿhhÿhhÿggÿffÿggÿggÿiiÿ kkÿ mmÿ ooÿ ttÿyyÿ€€ÿ††ÿŽŽÿ——ÿ¡¡ÿ ­­ÿ¹¸ÿÄÃÿÌÊþÖÕðïîÉýý¹þý½ýýÁüüÄüüÄüüÂüû ñðÔßÞõØ×ÿÔÓÿÍÌÿÆÅÿ¾¾ÿ··ÿ±±ÿ««ÿ¤¤ÿŸŸÿššÿ••ÿÿŒŒÿ‰‰ÿ††ÿƒƒÿÿ€€ÿÿ}}ÿ||ÿ{{ÿzzÿzzÿzzÿyyÿyyÿzzÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿwwÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ wwÿ wwÿ vvÿ vvÿ vvÿ ssÿ ssÿ ssÿ rrÿ qqÿ qqÿ qqÿqqÿppÿppÿqqÿppÿppÿppÿppÿppÿppÿqqÿppÿppÿppÿppÿppÿnnÿ ggÿ eeÿ ffÿ ffÿ ggÿhhÿiiÿjjÿkkÿllÿllÿmmÿnnÿppÿrrÿ"ssÿ%uuÿ'wwÿ*yyÿ.{{ÿ1~~ÿ5€€ÿ8ƒƒÿ;……ÿ>††ÿAˆˆÿDŠŠÿGŒŒÿIŽŽÿLÿAˆˆñppff[[@``Ëiiükkÿjjÿiiÿhhÿggÿggÿggÿffÿffÿggÿggÿ hhÿ jjÿ llÿ ooÿttÿzzÿ€€ÿ‡‡ÿÿ˜˜ÿ¢¢ÿ ®®ÿ»ºÿÆÅÿÌÌÿØ×ðñïËýý»üü¿ýýÂüüÅüüÅüüÄüü ñðÕßßõÙØÿÔÔÿÎÍÿÇÆÿÀ¿ÿ¹¹ÿ²²ÿ««ÿ¦¦ÿ  ÿ››ÿ––ÿ‘‘ÿŽŽÿŠŠÿ‡‡ÿ……ÿ‚‚ÿÿÿ~~ÿ}}ÿ{{ÿ{{ÿzzÿyyÿyyÿzzÿyyÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿ vvÿ wwÿ wwÿ wwÿ wwÿ vvÿ uuÿ uuÿ ssÿ rrÿ qqÿ qqÿ qqÿqqÿqqÿppÿqqÿppÿppÿppÿppÿppÿppÿqqÿppÿppÿppÿppÿppÿqqÿ ooÿ jjÿ ggÿ ffÿ ggÿhhÿiiÿjjÿkkÿllÿmmÿmmÿnnÿppÿrrÿ!ssÿ$uuÿ'wwÿ*yyÿ.||ÿ1~~ÿ5€€ÿ8‚‚ÿ;„„ÿ>††ÿ@ˆˆÿDŠŠÿGŒŒÿIÿLÿE‹‹õ%tt• bb__ ]]£ggõllÿkkÿiiÿiiÿggÿggÿffÿffÿeeÿeeÿffÿ ffÿ ggÿ hhÿ iiÿ llÿppÿuuÿ{{ÿ‚‚ÿ‰‰ÿ‘‘ÿ››ÿ¦¦ÿ ³²ÿ¿¾ÿÉÈÿÐÏÿÛÙññðÌüü¼ýýÀüüÅüüÆüüÆüüÄüüà ññÕßÞöÚÙÿÕÔÿÏÎÿÈÇÿÀÀÿººÿ³³ÿ­­ÿ§§ÿ¡¡ÿœœÿ——ÿ””ÿÿ‹‹ÿˆˆÿ††ÿƒƒÿÿ€€ÿÿ}}ÿ||ÿ{{ÿ{{ÿzzÿyyÿyyÿyyÿyyÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿ vvÿ wwÿ wwÿ wwÿ wwÿ vvÿ vvÿ uuÿ ssÿ rrÿ rrÿ qqÿ qqÿqqÿqqÿppÿppÿppÿppÿppÿppÿppÿppÿppÿppÿppÿppÿppÿqqÿrrÿ ppÿ jjÿ ffÿ ggÿhhÿiiÿjjÿkkÿmmÿmmÿmmÿnnÿppÿrrÿ!ssÿ$uuÿ'wwÿ*yyÿ.||ÿ1~~ÿ4€€ÿ7‚‚ÿ;„„ÿ>††ÿ@ˆˆÿCŠŠÿF‹‹ÿIÿKŽŽÿKŽŽü5À dd8NN ^^weeçllþmmÿkkÿjjÿiiÿggÿffÿffÿeeÿeeÿeeÿddÿ eeÿ ffÿ ffÿ ggÿ jjÿooÿttÿ{{ÿÿˆˆÿÿ™™ÿ¢¢ÿ¬¬ÿ ··ÿÁÁÿËÊÿÒÑÿÛÛòññÍüü¿üüÃüüÆüüÇüüÇýüÄüüÃððÖßÞöÚÚÿÖÕÿÐÎÿÈÇÿÂÁÿ»»ÿ´´ÿ®®ÿ©©ÿ¢¢ÿÿ™™ÿ••ÿÿŒŒÿ‰‰ÿ‡‡ÿƒƒÿ‚‚ÿÿÿ}}ÿ}}ÿ||ÿ{{ÿzzÿzzÿzzÿzzÿyyÿyyÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿ vvÿ vvÿ wwÿ wwÿ wwÿ vvÿ vvÿ vvÿ uuÿ ssÿ ssÿ qqÿ qqÿqqÿqqÿqqÿppÿppÿppÿppÿppÿppÿppÿppÿppÿppÿppÿqqÿqqÿ qqÿ rrÿ ppÿ jjÿ ggÿhhÿiiÿjjÿkkÿmmÿmmÿmmÿmmÿooÿqqÿ!ssÿ%vvÿ'wwÿ)xxÿ.{{ÿ1~~ÿ4€€ÿ7‚‚ÿ:„„ÿ>††ÿ@ˆˆÿC‰‰ÿF‹‹ÿHŒŒÿJŽŽÿMÿ@††ÝllWffUUYYJ bbÐkkümmÿllÿkkÿjjÿiiÿggÿffÿffÿeeÿddÿddÿ ddÿ ffÿ hhÿ iiÿ kkÿ ooÿssÿwwÿ||ÿÿ††ÿÿ””ÿ››ÿ¤¤ÿ®®ÿ ¸¸ÿ ÃÂÿÍËÿÓÒÿÝÜòððÐüüÁüüÄüüÇüüÈüüÇüüÆüüÄðï×ßßöÛÚÿÖÕÿÐÏÿÊÉÿÃÂÿ¼¼ÿ¶¶ÿ°°ÿªªÿ¤¤ÿŸŸÿ››ÿ––ÿ‘‘ÿŽŽÿŠŠÿ‡‡ÿ„„ÿƒƒÿÿ€€ÿÿ}}ÿ||ÿ{{ÿ{{ÿzzÿzzÿzzÿyyÿyyÿzzÿyyÿyyÿxxÿxxÿwwÿwwÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿ vvÿ vvÿ vvÿ wwÿ wwÿ vvÿ vvÿ vvÿ vvÿ ssÿ ssÿ rrÿ qqÿqqÿqqÿqqÿqqÿppÿppÿppÿppÿppÿppÿppÿppÿqqÿppÿqqÿ qqÿ rrÿ rrÿ ssÿ ppÿ jjÿggÿiiÿjjÿkkÿmmÿnnÿnnÿnnÿooÿqqÿ!ssÿ%vvÿ'wwÿ*yyÿ-{{ÿ0}}ÿ4€€ÿ7‚‚ÿ:„„ÿ=††ÿ@ˆˆÿCŠŠÿF‹‹ÿHÿJŽŽÿMÿA‡‡ánnaUUZZ``©hhömmÿmmÿllÿkkÿjjÿhhÿhhÿffÿeeÿffÿggÿ jjÿ llÿ mmÿ nnÿ ooÿ ppÿ qqÿrrÿuuÿxxÿ||ÿÿ‡‡ÿŽŽÿ••ÿÿ¦¦ÿ°°ÿººÿ ÅÄÿÎÍÿÔÓÿÛÛóññÏüüÁüüÅüüÈüüÊüüÉüüÇûûÆððØàßöÛÚÿ×ÖÿÑÐÿËÉÿÄÃÿ¾½ÿ··ÿ±±ÿ¬¬ÿ¦¦ÿ¡¡ÿœœÿ˜˜ÿ““ÿÿŒŒÿ‰‰ÿ‡‡ÿ„„ÿƒƒÿÿÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿyyÿyyÿyyÿyyÿyyÿxxÿwwÿwwÿwwÿxxÿwwÿxxÿxxÿwwÿwwÿwwÿ vvÿ vvÿ vvÿ vvÿ wwÿ vvÿ vvÿ vvÿ vvÿ ttÿ ttÿ rrÿ rrÿ qqÿqqÿqqÿqqÿppÿppÿppÿppÿppÿppÿppÿppÿqqÿqqÿppÿ qqÿ rrÿ rrÿ ssÿ ssÿ qqÿllÿiiÿjjÿkkÿmmÿnnÿnnÿnnÿooÿqqÿ rrÿ#uuÿ'wwÿ)yyÿ-{{ÿ1}}ÿ4€€ÿ6ÿ:„„ÿ=††ÿ?‡‡ÿCŠŠÿE‹‹ÿHÿKŽŽÿMÿBˆˆémmr\\ HH^^dffâmmþmmÿmmÿllÿkkÿjjÿhhÿiiÿjjÿkkÿmmÿmmÿ ooÿ ooÿ ooÿ nnÿ ooÿ ooÿppÿqqÿssÿuuÿxxÿ}}ÿ‚‚ÿˆˆÿÿ——ÿ  ÿ¨¨ÿ²±ÿ¼»ÿ ÆÅÿÎÍÿÔÓÿ ÝÝòññÐüüÂüüÆüüÉüüÊüüÊüüÈüüÇððØààöÜÜÿØ×ÿÒÑÿËÊÿÅÅÿ¿¿ÿ¹¹ÿ³³ÿ®®ÿ¨¨ÿ££ÿžžÿššÿ••ÿ’’ÿŽŽÿ‹‹ÿˆˆÿ††ÿ„„ÿ‚‚ÿÿÿ~~ÿ}}ÿ{{ÿzzÿzzÿzzÿyyÿyyÿyyÿyyÿxxÿwwÿxxÿwwÿwwÿwwÿxxÿwwÿwwÿwwÿwwÿwwÿ vvÿ vvÿ vvÿ vvÿ vvÿ vvÿ vvÿ vvÿ ttÿ ssÿ rrÿ qqÿqqÿqqÿqqÿppÿppÿppÿppÿppÿppÿppÿppÿ qqÿqqÿqqÿ qqÿ rrÿ ssÿ ssÿ ssÿ ssÿqqÿkkÿjjÿkkÿmmÿnnÿooÿnnÿooÿqqÿ!ssÿ"ttÿ&wwÿ*yyÿ-{{ÿ1}}ÿ3ÿ6ÿ:ƒƒÿ<……ÿ>‡‡ÿB‰‰ÿE‹‹ÿHÿJŽŽÿMÿBˆˆïoo~__ZZ0 cc¹kkùnnÿmmÿmmÿllÿllÿnnÿooÿppÿppÿppÿppÿ ooÿ ooÿ nnÿ nnÿ nnÿ nnÿnnÿnnÿppÿqqÿssÿvvÿyyÿ~~ÿƒƒÿŠŠÿ‘‘ÿ™™ÿ¡¡ÿªªÿ³³ÿ½½ÿ ÇÆÿÏÎÿÕÕÿ ÝÜóòñÑüûÄüüÇüüÊüüËüüËüüÉûûÈòðØáàöÝÜÿÙØÿÓÒÿÍÌÿÇÆÿÀÀÿººÿµµÿ¯¯ÿ©©ÿ¤¤ÿŸŸÿ››ÿ——ÿ““ÿÿŒŒÿ‰‰ÿ‡‡ÿ……ÿƒƒÿÿÿ~~ÿ||ÿ{{ÿ{{ÿ{{ÿzzÿyyÿyyÿyyÿyyÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ vvÿ vvÿ vvÿ vvÿ vvÿ vvÿ uuÿ ttÿ rrÿ qqÿ qqÿqqÿqqÿppÿqqÿqqÿppÿppÿppÿppÿqqÿ qqÿ qqÿqqÿ rrÿ rrÿ ssÿ ssÿ ssÿ ttÿttÿrrÿmmÿkkÿmmÿnnÿooÿooÿooÿqqÿ ssÿ#uuÿ'wwÿ*yyÿ.{{ÿ1~~ÿ4€€ÿ7ÿ:ƒƒÿ<……ÿ?‡‡ÿB‰‰ÿE‹‹ÿGŒŒÿJŽŽÿLÿF‹‹õ%ttŽ ]]____†hhínnþnnÿooÿooÿqqÿttÿssÿssÿqqÿppÿppÿooÿ ooÿ ooÿ nnÿ nnÿ nnÿ nnÿmmÿmmÿnnÿooÿqqÿssÿvvÿzzÿ€€ÿ……ÿ‹‹ÿ““ÿ››ÿ¢¢ÿ««ÿµ´ÿ¾½ÿ ÈÇÿÐÏÿÖÕÿ ßÞóñðÓüûÅüüÈýüËüüÍüüÍýüÊûûÉòðÙãáöÝÝÿÙÙÿÔÔÿÎÍÿÈÇÿÂÁÿ¼¼ÿ¶¶ÿ±±ÿ««ÿ¦¦ÿ¡¡ÿÿ˜˜ÿ””ÿ‘‘ÿŽŽÿ‹‹ÿˆˆÿ‡‡ÿ„„ÿ‚‚ÿ€€ÿ~~ÿ}}ÿ||ÿ||ÿ{{ÿzzÿzzÿyyÿyyÿyyÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ vvÿ vvÿ vvÿ vvÿ vvÿ vvÿ vvÿ uuÿ ssÿ qqÿ qqÿ qqÿqqÿ qqÿqqÿqqÿppÿppÿppÿppÿqqÿqqÿ qqÿqqÿ rrÿ rrÿ rrÿ ssÿ ssÿttÿttÿuuÿssÿmmÿmmÿnnÿooÿooÿppÿqqÿ ssÿ$uuÿ'wwÿ)yyÿ-{{ÿ1~~ÿ3€€ÿ7ÿ9ƒƒÿ=……ÿ?‡‡ÿB‰‰ÿDŠŠÿFŒŒÿIŽŽÿLÿJŽŽù+xx˜ ccUU^^I ddÓnnüqqÿssÿvvÿuuÿvvÿuuÿttÿrrÿqqÿqqÿppÿ ppÿ ooÿ nnÿ mmÿ mmÿ mmÿmmÿmmÿmmÿmmÿnnÿooÿqqÿttÿxxÿ||ÿÿ‡‡ÿÿ••ÿœœÿ¤¤ÿ­­ÿµµÿ¿¿ÿ ÉÈÿÑÐÿ×Öÿ àßóòñÓüüÆüüÉüüÍüüÏýüÍýüËüüÊòòÙãáöÞÞÿÛÛÿÕÕÿÏÎÿÉÈÿÄÃÿ¾½ÿ¸¸ÿ³³ÿ­­ÿ©©ÿ¤¤ÿŸŸÿššÿ––ÿ““ÿÿŒŒÿŠŠÿ‡‡ÿ……ÿƒƒÿÿÿ~~ÿ}}ÿ{{ÿ{{ÿ{{ÿzzÿyyÿyyÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿvvÿwwÿwwÿwwÿ wwÿ vvÿ vvÿ uuÿ uuÿ uuÿ vvÿ vvÿ ttÿ ssÿ qqÿ qqÿ qqÿ qqÿqqÿqqÿppÿppÿppÿppÿqqÿqqÿ qqÿqqÿ rrÿ rrÿ ssÿ ssÿ ssÿ ssÿttÿuuÿvvÿssÿnnÿnnÿppÿppÿppÿqqÿ ssÿ#uuÿ'wwÿ)xxÿ,zzÿ0}}ÿ3€€ÿ7‚‚ÿ:„„ÿ=……ÿ?‡‡ÿB‰‰ÿDŠŠÿF‹‹ÿIÿLÿJŽŽù+yyž ^^[[ccnnóvvÿwwÿxxÿwwÿvvÿvvÿuuÿttÿrrÿrrÿqqÿppÿ ppÿ ooÿ nnÿ mmÿ mmÿllÿllÿllÿllÿmmÿmmÿooÿppÿqqÿuuÿyyÿ}}ÿÿˆˆÿÿ––ÿÿ¥¥ÿ­­ÿ·¶ÿÀ¿ÿ ÉÈÿÒÑÿØ×ÿáàóòñÔûûÇýüÊýüÍüüÎüüÎýüÌüûËóòÙ äãöàßÿÜÛÿÖÕÿÐÏÿËÊÿÅÄÿ¿¿ÿººÿµ´ÿ°°ÿ««ÿ¦¦ÿ¡¡ÿœœÿ˜˜ÿ””ÿ‘‘ÿŽŽÿ‹‹ÿˆˆÿ……ÿ„„ÿÿ€€ÿÿ}}ÿ||ÿ||ÿ{{ÿzzÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿwwÿvvÿwwÿwwÿwwÿwwÿwwÿwwÿ vvÿ vvÿ vvÿ uuÿ vvÿ vvÿ uuÿ ttÿ qqÿ qqÿ qqÿ rrÿ qqÿqqÿqqÿqqÿppÿqqÿqqÿ qqÿ qqÿ qqÿ rrÿ rrÿ ssÿ ssÿttÿttÿuuÿuuÿvvÿwwÿttÿppÿppÿppÿppÿqqÿ!ssÿ$uuÿ'wwÿ)yyÿ,{{ÿ0}}ÿ3€€ÿ7‚‚ÿ:„„ÿ=††ÿ?‡‡ÿB‰‰ÿE‹‹ÿG‹‹ÿIÿKÿJŽŽù,yy¡``??gg[ooÞwwþzzÿyyÿxxÿwwÿvvÿvvÿuuÿttÿssÿrrÿqqÿ ppÿ ooÿ ooÿ nnÿ mmÿ mmÿllÿkkÿllÿllÿllÿllÿnnÿnnÿppÿssÿvvÿyyÿ~~ÿ„„ÿŠŠÿÿ——ÿŸŸÿ§§ÿ¯®ÿ··ÿÁÀÿ ÌÊÿÔÓÿÚÙÿâáóòòÔüüÇüüËüüÎüüÏüüÏüüÍüüËóòÚ åäöàßÿÝÜÿ×ÖÿÒÐÿÌËÿÆÅÿÁÀÿ»»ÿ·¶ÿ²²ÿ¬¬ÿ¨¨ÿ££ÿŸŸÿššÿ––ÿ““ÿÿŒŒÿˆˆÿ‡‡ÿ……ÿ‚‚ÿÿ~~ÿ}}ÿ||ÿ||ÿ{{ÿzzÿzzÿyyÿxxÿxxÿxxÿxxÿxxÿwwÿvvÿvvÿwwÿwwÿwwÿwwÿ vvÿ vvÿ vvÿ vvÿ vvÿ vvÿ vvÿ ttÿ rrÿ ppÿ qqÿ rrÿ qqÿ qqÿ qqÿqqÿqqÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ rrÿ ssÿ ssÿttÿuuÿuuÿuuÿvvÿxxÿxxÿuuÿppÿppÿppÿqqÿ!ssÿ$uuÿ'wwÿ*yyÿ-{{ÿ0}}ÿ2ÿ6ÿ:„„ÿ=……ÿ?‡‡ÿB‰‰ÿE‹‹ÿGŒŒÿIÿKÿJŽŽù,zz¦__ bbnn¢vv÷zzÿzzÿyyÿxxÿwwÿvvÿuuÿuuÿttÿssÿrrÿqqÿ ooÿ ooÿ ooÿ nnÿ mmÿ llÿllÿkkÿllÿllÿllÿllÿmmÿnnÿooÿrrÿttÿvvÿ{{ÿÿ……ÿ‹‹ÿ’’ÿ™™ÿ  ÿ§§ÿ°°ÿ»ºÿ ÅÄÿÎÍÿÖÕÿÛÚÿ âáóôóÕüüÉüüÌüüÏüüÐüüÐüüÎüüÌôòÛ æåöàßÿÝÜÿØ×ÿÓÒÿÍÌÿÇÆÿÂÁÿ¾½ÿ¸¸ÿ³³ÿ®®ÿ©©ÿ¥¥ÿ  ÿ››ÿ˜˜ÿ””ÿÿÿ‹‹ÿˆˆÿ……ÿƒƒÿÿÿ~~ÿ}}ÿ||ÿ{{ÿ{{ÿyyÿyyÿxxÿxxÿxxÿxxÿwwÿwwÿvvÿvvÿwwÿwwÿwwÿwwÿ vvÿ vvÿ vvÿ vvÿ uuÿ uuÿ ttÿ ssÿ ppÿ qqÿ rrÿ qqÿ qqÿ qqÿqqÿqqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ ssÿ ssÿttÿuuÿuuÿvvÿwwÿxxÿyyÿyyÿttÿppÿppÿqqÿ!ssÿ$uuÿ'wwÿ*yyÿ-{{ÿ0}}ÿ3ÿ5ÿ9ƒƒÿ=††ÿ?ˆˆÿC‰‰ÿE‹‹ÿGŒŒÿIŽŽÿLÿJú.{{® bb'llWrrÚzzýzzÿyyÿxxÿwwÿwwÿvvÿuuÿttÿssÿssÿrrÿqqÿ ppÿ ooÿ ooÿ mmÿ mmÿllÿllÿkkÿkkÿkkÿkkÿllÿmmÿnnÿooÿppÿrrÿttÿxxÿ||ÿÿ††ÿŒŒÿ““ÿ™™ÿ¡¡ÿ««ÿµµÿ ½½ÿ ÆÅÿÏÍÿ×ÕÿÛÚÿ ãâóôóÖüûÊüüÍüüÐüüÑüüÑüüÏüüÎõôÜ æå÷âáÿÞÞÿÙÙÿÔÓÿ ÎÍÿ ÉÇÿÄÃÿ¿¿ÿº¹ÿ´´ÿ¯¯ÿ««ÿ¦¦ÿ¡¡ÿÿ™™ÿ••ÿ‘‘ÿŽŽÿ‹‹ÿ‰‰ÿ††ÿ„„ÿÿ€€ÿÿ~~ÿ||ÿ{{ÿ{{ÿzzÿyyÿxxÿxxÿxxÿwwÿwwÿvvÿvvÿvvÿvvÿvvÿvvÿ vvÿ vvÿ vvÿ vvÿ uuÿ uuÿ uuÿ ttÿ ssÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ rrÿ qqÿ rrÿ ssÿ ttÿttÿuuÿvvÿvvÿwwÿxxÿxxÿyyÿxxÿttÿqqÿppÿ!ssÿ%vvÿ(xxÿ*yyÿ-{{ÿ0}}ÿ3ÿ5ÿ9ƒƒÿ=††ÿ@ˆˆÿC‰‰ÿE‹‹ÿGŒŒÿIŽŽÿLÿKŽŽý3||Æ ff<ll!oo«xxö||ÿzzÿyyÿxxÿwwÿwwÿvvÿuuÿttÿssÿssÿrrÿ qqÿ ppÿ ppÿ ooÿ nnÿ nnÿmmÿllÿllÿllÿkkÿkkÿllÿmmÿmmÿnnÿooÿppÿrrÿuuÿxxÿ||ÿÿ††ÿÿ••ÿžžÿ ¦¦ÿ®®ÿ¶¶ÿ ¾½ÿ ÇÆÿÏÎÿ×ÖÿÛÛÿ ãâôôôÖüûËüüÎüüÐüüÒüüÒüüÑüûÐôôÞ èçøãâÿßßÿÛÙÿÕÔÿ ÏÎÿ ÊÉÿÅÅÿÀÀÿ»»ÿ·¶ÿ²²ÿ­­ÿ¨¨ÿ££ÿžžÿššÿ––ÿ““ÿÿŒŒÿ‰‰ÿ‡‡ÿ„„ÿƒƒÿÿÿ}}ÿ||ÿ||ÿ{{ÿzzÿyyÿyyÿxxÿxxÿxxÿwwÿvvÿvvÿuuÿvvÿvvÿ vvÿ vvÿ vvÿ uuÿ uuÿ uuÿ uuÿ uuÿ ttÿ ssÿ rrÿ qqÿ ppÿ qqÿ qqÿ qqÿ rrÿ rrÿ rrÿ qqÿ rrÿ rrÿ rrÿ ssÿttÿttÿuuÿuuÿvvÿwwÿxxÿxxÿyyÿyyÿyyÿttÿqqÿ!ssÿ%vvÿ'wwÿ*yyÿ-{{ÿ1~~ÿ3ÿ5ÿ9ƒƒÿ<……ÿ?‡‡ÿB‰‰ÿE‹‹ÿGŒŒÿIÿKÿLŽŽþ5Î eeFUU™™mmbuuâ||þ||ÿ{{ÿyyÿxxÿwwÿvvÿuuÿttÿssÿssÿrrÿqqÿ qqÿ ppÿ ppÿ ooÿ nnÿnnÿmmÿmmÿnnÿmmÿllÿllÿllÿllÿmmÿmmÿnnÿooÿppÿrrÿuuÿyyÿ}}ÿ‚‚ÿŠŠÿ ““ÿ ššÿ   ÿ §§ÿ¯¯ÿ·¶ÿ ¿¾ÿ ÇÆÿÐÏÿ×ÖÿÜÛÿ ääóôôÖüüËüüÎüüÑüüÓüüÓüüÒüüÑõõß éèøäãÿàßÿÛÚÿÖÕÿ ÑÐÿ ÌËÿÇÆÿÂÁÿ½½ÿ¸¸ÿ³³ÿ®®ÿ©©ÿ¤¤ÿŸŸÿœœÿ˜˜ÿ““ÿÿÿŠŠÿ‡‡ÿ††ÿ„„ÿÿÿ~~ÿ}}ÿ||ÿ{{ÿzzÿzzÿyyÿyyÿxxÿwwÿwwÿvvÿvvÿvvÿvvÿvvÿ vvÿ uuÿ uuÿ uuÿ uuÿ uuÿ uuÿ ssÿ ssÿ ssÿ qqÿ ppÿ ppÿ qqÿ qqÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿttÿuuÿuuÿuuÿvvÿxxÿxxÿxxÿyyÿzzÿ||ÿyyÿttÿ ssÿ$uuÿ'wwÿ*yyÿ.||ÿ1~~ÿ3ÿ6ÿ:„„ÿ<……ÿ?ˆˆÿB‰‰ÿE‹‹ÿGŒŒÿIŽŽÿLÿLý4~~Ë aaDUUll!oo¬zz÷}}ÿ||ÿ{{ÿzzÿyyÿwwÿvvÿuuÿttÿssÿssÿrrÿqqÿ qqÿ ppÿ ooÿ nnÿ nnÿnnÿmmÿmmÿmmÿnnÿmmÿllÿllÿmmÿllÿmmÿmmÿnnÿooÿppÿssÿvvÿzzÿ€€ÿ ‰‰ÿ ÿ ””ÿ ššÿ ¡¡ÿ ¨¨ÿ°°ÿ ¸¸ÿ À¿ÿ ÈÇÿÑÏÿØ×ÿÝÜÿ ääóõõÖýüËüüÏüüÒüüÔüüÔûûÔüüÓôôá éèøåäÿáàÿÜÛÿ ××ÿ ÒÑÿ ÍÌÿ ÈÇÿÄÃÿ¿¾ÿ¹¹ÿ´´ÿ¯¯ÿªªÿ¥¥ÿ  ÿœœÿ˜˜ÿ””ÿ‘‘ÿŽŽÿ‹‹ÿ‰‰ÿ††ÿƒƒÿÿ€€ÿ~~ÿ}}ÿ||ÿzzÿ{{ÿzzÿyyÿyyÿxxÿwwÿwwÿvvÿvvÿuuÿuuÿuuÿ uuÿ uuÿ uuÿ uuÿ uuÿ uuÿ ssÿ ssÿ ssÿ qqÿ ppÿ ppÿ qqÿ qqÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿ ssÿttÿuuÿuuÿuuÿvvÿxxÿyyÿyyÿzzÿ{{ÿ{{ÿ||ÿ yyÿ!ttÿ$uuÿ'wwÿ*zzÿ.||ÿ1~~ÿ3ÿ6ÿ:„„ÿ<……ÿ?‡‡ÿB‰‰ÿE‹‹ÿGŒŒÿIŽŽÿLÿLý2~~É bbAUUll\uuà}}þ}}ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿuuÿttÿssÿrrÿrrÿqqÿ qqÿ ppÿ ooÿ nnÿ nnÿnnÿnnÿnnÿnnÿnnÿmmÿmmÿllÿmmÿllÿllÿllÿmmÿnnÿooÿqqÿttÿyyÿ ÿ ††ÿ ŠŠÿ ÿ ••ÿ œœÿ ££ÿ ©©ÿ ±±ÿ ¹¸ÿ ÁÀÿ ÉÇÿÑÏÿÙØÿÝÝÿ äãôõô×üûÍüüÐüüÓüüÕûûÖüüÔüüÓôôâ éèùæåÿâáÿÞÝÿ ÙØÿ ÔÒÿ ÎÍÿ ÊÉÿÅÄÿÀ¿ÿººÿµµÿ°°ÿ««ÿ¦¦ÿ¢¢ÿžžÿššÿ••ÿ’’ÿŽŽÿ‹‹ÿ‰‰ÿ††ÿƒƒÿ‚‚ÿ€€ÿ~~ÿ}}ÿ||ÿ{{ÿ{{ÿzzÿyyÿyyÿwwÿwwÿwwÿvvÿuuÿuuÿuuÿuuÿ uuÿ uuÿ uuÿ uuÿ uuÿ uuÿ uuÿ ssÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ ssÿ ssÿ rrÿ rrÿ ssÿ ssÿttÿuuÿvvÿvvÿvvÿwwÿyyÿzzÿ{{ÿzzÿ{{ÿ||ÿ!||ÿ"xxÿ$uuÿ'wwÿ*zzÿ.||ÿ1~~ÿ4€€ÿ7‚‚ÿ:„„ÿ=††ÿ@ˆˆÿB‰‰ÿE‹‹ÿGŒŒÿJŽŽÿLÿKý0}}Ç dd=qqoo—zzõ ~~ÿ}}ÿ||ÿzzÿzzÿyyÿxxÿwwÿvvÿttÿttÿrrÿrrÿ qqÿ qqÿ ppÿ ooÿ nnÿnnÿooÿnnÿnnÿnnÿnnÿmmÿmmÿmmÿmmÿmmÿllÿllÿllÿmmÿnnÿooÿttÿ {{ÿÿ ‚‚ÿ ††ÿ ‹‹ÿ ‘‘ÿ ——ÿ ÿ ££ÿ ««ÿ ²²ÿ ¹¹ÿ ÁÀÿ ÉÈÿÒÑÿÙØÿÞÝÿ ääôôôØüûÎüüÑüüÔûûÖûûÖüüÕüûÕôôã êéù æåÿãâÿ ßÞÿ ÙÙÿ ÔÓÿ ÐÏÿ ËÊÿÆÅÿÁÀÿ¼¼ÿ¶¶ÿ±±ÿ¬¬ÿ¨¨ÿ££ÿŸŸÿššÿ––ÿ’’ÿÿŒŒÿ‰‰ÿ††ÿ„„ÿ‚‚ÿ€€ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿyyÿxxÿwwÿwwÿwwÿvvÿuuÿuuÿuuÿ uuÿ uuÿ uuÿ uuÿ uuÿ uuÿ uuÿ rrÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ ssÿ ssÿ ssÿ rrÿ ssÿ ssÿttÿuuÿvvÿvvÿwwÿxxÿyyÿzzÿ{{ÿ{{ÿ||ÿ||ÿ!}}ÿ"||ÿ%xxÿ'wwÿ*yyÿ.||ÿ1~~ÿ4€€ÿ7‚‚ÿ:„„ÿ=††ÿ@ˆˆÿC‰‰ÿE‹‹ÿGŒŒÿJŽŽÿLÿLü/||à dd8ii?ttÌ}}ü~~ÿ}}ÿ||ÿzzÿzzÿyyÿxxÿwwÿvvÿuuÿttÿrrÿrrÿ qqÿ ppÿ ppÿ ooÿooÿooÿnnÿooÿooÿnnÿnnÿmmÿmmÿmmÿmmÿmmÿllÿllÿllÿllÿmmÿqqÿ wwÿzzÿ||ÿ ÿ ƒƒÿ ‡‡ÿ ŒŒÿ ‘‘ÿ ——ÿ žžÿ ¥¥ÿ ¬¬ÿ ³³ÿ ººÿ ÂÁÿ ËÊÿÓÒÿÚÙÿßÞÿ åäôõôØüüÏüüÒüüÕûû×ûû×ûû×ûû×öôä ëêù ææÿããÿ ßÞÿ ÚÚÿ ÖÕÿ ÑÐÿ ÌËÿ ÇÆÿÂÁÿ½¼ÿ··ÿ²²ÿ®®ÿ©©ÿ¤¤ÿŸŸÿ››ÿ——ÿ““ÿÿŒŒÿ‰‰ÿ††ÿ„„ÿ‚‚ÿ€€ÿÿ}}ÿ||ÿ{{ÿzzÿyyÿyyÿxxÿxxÿwwÿvvÿuuÿuuÿuuÿuuÿ uuÿ uuÿ uuÿ uuÿ uuÿ ttÿ ssÿ rrÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ ssÿ ssÿ ssÿ ssÿ ssÿttÿuuÿuuÿvvÿwwÿxxÿyyÿzzÿzzÿ{{ÿ}}ÿ }}ÿ"}}ÿ#~~ÿ%}}ÿ(yyÿ+zzÿ.||ÿ1~~ÿ4€€ÿ6‚‚ÿ:„„ÿ=††ÿ@ˆˆÿCŠŠÿE‹‹ÿHÿJŽŽÿLÿKü,zz¿ dd3ÿÿjj mmƒxxï"ÿ ~~ÿ}}ÿ||ÿzzÿzzÿyyÿxxÿwwÿvvÿuuÿttÿssÿrrÿ qqÿ ppÿ ppÿ ppÿppÿppÿppÿooÿnnÿnnÿnnÿmmÿmmÿmmÿmmÿllÿllÿllÿllÿllÿnnÿ ttÿwwÿxxÿzzÿ||ÿÿ ƒƒÿ ˆˆÿ ÿ ““ÿ ™™ÿ ŸŸÿ ¦¦ÿ ­­ÿ ´´ÿ ¼»ÿ ÄÃÿ ÌËÿÔÓÿÛÚÿàßÿ æåóôôÙüüÐûûÔûû×ûûØûûÙûûØûûØ÷öä ëêù çæÿääÿ àßÿ ÜÛÿ ×Öÿ ÒÑÿ ÍÌÿ ÈÇÿÃÂÿ¾½ÿ¹¸ÿ³³ÿ®®ÿ©©ÿ¤¤ÿ  ÿœœÿ˜˜ÿ””ÿÿŒŒÿ‰‰ÿ‡‡ÿ……ÿƒƒÿÿÿ}}ÿ||ÿ{{ÿzzÿyyÿyyÿxxÿwwÿwwÿvvÿuuÿuuÿuuÿuuÿ uuÿ uuÿ uuÿ uuÿ uuÿ ttÿ ssÿ ssÿ qqÿ qqÿ qqÿ qqÿ rrÿ rrÿ rrÿ ssÿ ssÿ ttÿ ssÿttÿuuÿvvÿvvÿwwÿxxÿyyÿzzÿ{{ÿ{{ÿ||ÿ }}ÿ"~~ÿ#~~ÿ%€€ÿ(}}ÿ+zzÿ.||ÿ1~~ÿ4€€ÿ7‚‚ÿ:„„ÿ=††ÿ@ˆˆÿCŠŠÿE‹‹ÿHŒŒÿJŽŽÿLÿLŽŽû,xx¸ ``-ii. qq¿||û"ÿ }}ÿ}}ÿ||ÿzzÿyyÿyyÿxxÿwwÿvvÿuuÿttÿssÿ rrÿ qqÿ ppÿ ppÿ qqÿ ppÿppÿppÿooÿooÿnnÿnnÿmmÿmmÿmmÿllÿllÿllÿllÿllÿnnÿ rrÿttÿuuÿwwÿxxÿzzÿ||ÿ€€ÿ„„ÿˆˆÿ ŽŽÿ ““ÿ ™™ÿ   ÿ §§ÿ ®®ÿ µµÿ½¼ÿ ÅÄÿ ÍËÿÔÓÿÛÛÿààÿ ææóõõÙüüÑûûÕûûØûûÚûûÚûûÙûûØöôå ìëù èçÿ åäÿ áàÿ ÜÜÿ Ø×ÿ ÓÒÿ ÎÍÿ ÉÈÿÃÂÿ¿¾ÿ¹¹ÿ´´ÿ¯¯ÿªªÿ¦¦ÿ¡¡ÿÿ˜˜ÿ””ÿÿÿŠŠÿ‡‡ÿ„„ÿ‚‚ÿÿÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿwwÿwwÿvvÿuuÿuuÿuuÿ ttÿuuÿ uuÿ uuÿ uuÿ ttÿ rrÿ rrÿ qqÿ qqÿ rrÿ qqÿ rrÿ rrÿ rrÿ ssÿ ssÿttÿttÿuuÿuuÿvvÿwwÿxxÿyyÿzzÿzzÿ{{ÿ||ÿ}}ÿ!~~ÿ"~~ÿ$ÿ%€€ÿ(€€ÿ+}}ÿ.||ÿ1~~ÿ4€€ÿ7‚‚ÿ:„„ÿ=††ÿ@ˆˆÿCŠŠÿE‹‹ÿGŒŒÿJŽŽÿLÿKŽŽú.zz¯bb'mmlllwwæ"þ!ÿ ~~ÿ||ÿ||ÿzzÿyyÿyyÿxxÿwwÿvvÿuuÿttÿttÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿppÿooÿnnÿooÿnnÿnnÿmmÿmmÿmmÿmmÿllÿllÿllÿnnÿ rrÿttÿuuÿuuÿvvÿwwÿyyÿ{{ÿ~~ÿÿ„„ÿ‰‰ÿŽŽÿ ””ÿ ššÿ ¡¡ÿ ¨¨ÿ ¯¯ÿ ·¶ÿ ¾¾ÿ ÆÄÿ ÎÍÿÖÕÿÝÜÿáàÿ ççóõõÚûûÓüüÖûûÙûûÛûûÛûûÚûúÚööå íìù éèÿ ååÿ ááÿ ÝÜÿ Ø×ÿ ÓÒÿ ÎÍÿ ÉÈÿÄÃÿÀ¿ÿ»ºÿ¶¶ÿ°°ÿ««ÿ¦¦ÿ¢¢ÿÿ™™ÿ””ÿÿÿ‰‰ÿ††ÿ„„ÿ‚‚ÿ€€ÿ~~ÿ}}ÿ||ÿzzÿyyÿxxÿxxÿwwÿwwÿwwÿvvÿuuÿuuÿuuÿuuÿ uuÿ uuÿ uuÿ uuÿ ssÿ rrÿ ssÿ rrÿ rrÿ qqÿ qqÿ rrÿ rrÿ ssÿ ssÿttÿttÿuuÿuuÿvvÿwwÿxxÿyyÿzzÿzzÿ{{ÿ}}ÿ}}ÿ!~~ÿ#~~ÿ%ÿ&€€ÿ)‚‚ÿ,ÿ/~~ÿ2~~ÿ4€€ÿ7‚‚ÿ:„„ÿ=††ÿAˆˆÿB‰‰ÿE‹‹ÿHŒŒÿJŽŽÿLÿKŽŽü0||¾ ee2ÿÿnn rr¬}}ø#€€ÿ!ÿ ~~ÿ||ÿ{{ÿzzÿzzÿyyÿxxÿwwÿvvÿuuÿttÿttÿ ssÿ rrÿ qqÿ qqÿqqÿqqÿppÿppÿooÿooÿooÿnnÿmmÿmmÿmmÿmmÿllÿllÿllÿ rrÿttÿttÿuuÿvvÿvvÿwwÿxxÿyyÿ||ÿ~~ÿÿ……ÿŠŠÿÿ––ÿ œœÿ ¢¢ÿ ªªÿ ±±ÿ ¸¸ÿ ¿¾ÿ ÇÆÿ ÏÎÿ×ÖÿÝÝÿâáÿ èçóõõÜüüÔûû×ûûÚûûÜûûÜûûÛûûÚ÷öæ îíù ééÿ ææÿ ââÿ ÞÝÿ ÙØÿ ÔÓÿ ÏÎÿ ÊÉÿ ÅÄÿÀÀÿ»»ÿ¶¶ÿ±±ÿ¬¬ÿ§§ÿ¢¢ÿÿ™™ÿ••ÿÿÿ‰‰ÿ††ÿ„„ÿ‚‚ÿ€€ÿÿ}}ÿ{{ÿzzÿyyÿyyÿxxÿwwÿwwÿwwÿvvÿuuÿuuÿuuÿuuÿ uuÿ uuÿ uuÿ ttÿ ssÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿttÿttÿuuÿvvÿvvÿwwÿxxÿyyÿzzÿzzÿ{{ÿ||ÿ }}ÿ!~~ÿ$ÿ%€€ÿ'€€ÿ*‚‚ÿ-„„ÿ/ÿ2ÿ5€€ÿ7‚‚ÿ;„„ÿ=††ÿAˆˆÿB‰‰ÿF‹‹ÿHÿJŽŽÿLÿLý0}}Á ee7ÿÿmmAvvÕ#~~ý#ÿ!ÿ ~~ÿ||ÿ{{ÿzzÿzzÿyyÿxxÿwwÿvvÿuuÿttÿttÿ ssÿ rrÿ qqÿ qqÿ qqÿqqÿppÿppÿooÿooÿooÿnnÿnnÿmmÿmmÿmmÿllÿllÿ ppÿttÿttÿuuÿuuÿvvÿvvÿvvÿwwÿxxÿzzÿ||ÿÿƒƒÿ‡‡ÿŒŒÿ’’ÿ˜˜ÿ žžÿ ¤¤ÿ ¬¬ÿ ³³ÿ º¹ÿ ÁÀÿ ÉÈÿ ÑÏÿØ×ÿßÞÿãâÿ ééôõõÜüüÔûûÙûûÜûûÝûûÝûûÜûûÜ÷÷æ îíøêêÿèçÿ äãÿ ßÞÿ ÚÙÿ ÕÔÿ ÐÏÿ ËÊÿ ÆÅÿÁÀÿ»»ÿ¶¶ÿ±±ÿ¬¬ÿ§§ÿ££ÿžžÿ™™ÿ””ÿÿÿ‰‰ÿ††ÿ„„ÿ‚‚ÿ€€ÿÿ}}ÿ{{ÿzzÿyyÿxxÿwwÿwwÿwwÿvvÿvvÿuuÿuuÿuuÿ ttÿ uuÿ uuÿ ttÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿ rrÿ ssÿ ssÿssÿuuÿuuÿvvÿvvÿwwÿwwÿxxÿzzÿ{{ÿ||ÿ}}ÿ ~~ÿ"ÿ$€€ÿ&€€ÿ'€€ÿ*‚‚ÿ-„„ÿ0……ÿ3ÿ5ÿ8‚‚ÿ;……ÿ=‡‡ÿAˆˆÿC‰‰ÿF‹‹ÿHÿJŽŽÿLÿLû-{{´ bb,mmmmmzzê%€€ÿ#ÿ!ÿ ~~ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿwwÿvvÿuuÿttÿttÿ ssÿ rrÿ rrÿ qqÿ qqÿppÿppÿppÿooÿooÿooÿnnÿnnÿmmÿmmÿmmÿmmÿppÿttÿttÿttÿuuÿuuÿuuÿuuÿvvÿvvÿwwÿyyÿ{{ÿ}}ÿ€€ÿƒƒÿˆˆÿÿ““ÿ™™ÿ   ÿ §§ÿ ®®ÿ µµÿ ¼»ÿ ÃÂÿ ËÊÿ ÒÑÿÙÙÿàßÿääÿ êéôöõÝüüÖûûÚûûÝûûÞûûÞûûÝûûÜ÷÷å îîùìëÿéèÿåäÿààÿÜÛÿ×ÖÿÒÐÿÍÌÿÇÆÿÁÀÿ¼¼ÿ¶¶ÿ±±ÿ««ÿ§§ÿ££ÿžžÿ˜˜ÿ””ÿÿÿŠŠÿ‡‡ÿ„„ÿ‚‚ÿ€€ÿ~~ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿwwÿwwÿwwÿvvÿvvÿuuÿ ttÿ ttÿ uuÿ ttÿ ttÿ rrÿ rrÿ qqÿ rrÿ rrÿ rrÿ rrÿssÿ ssÿssÿttÿuuÿuuÿvvÿwwÿwwÿxxÿzzÿ{{ÿ||ÿ}}ÿ!~~ÿ#ÿ%€€ÿ'€€ÿ'€€ÿ*‚‚ÿ.„„ÿ1††ÿ3……ÿ6‚‚ÿ8ƒƒÿ;……ÿ>‡‡ÿAˆˆÿC‰‰ÿF‹‹ÿHÿKŽŽÿLÿJŽŽù+xx¥__ dd ss¤"~~÷&ÿ#€€ÿ"ÿ ~~ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿwwÿvvÿuuÿttÿttÿ ssÿ ssÿ rrÿ qqÿqqÿppÿppÿppÿooÿooÿooÿnnÿnnÿnnÿmmÿmmÿooÿssÿuuÿuuÿuuÿuuÿuuÿvvÿuuÿvvÿvvÿwwÿxxÿzzÿ||ÿÿƒƒÿ……ÿŠŠÿÿ••ÿ››ÿ ¢¢ÿ ©©ÿ °°ÿ ¶¶ÿ ½½ÿ ÅÄÿ ÌËÿ ÓÒÿÛÚÿáàÿåäÿ ëêõöõßüüØûûÜûûÞûûßûûßûûÞûûÜ÷÷æ ïïùìëÿééÿæåÿáàÿÝÜÿØ×ÿÓÓÿÏÎÿÊÈÿÄÃÿ¾¾ÿ¹¹ÿ²²ÿ­­ÿ¨¨ÿ¢¢ÿÿ™™ÿ••ÿ‘‘ÿÿŠŠÿ‡‡ÿ„„ÿ‚‚ÿ€€ÿ~~ÿ||ÿ{{ÿzzÿyyÿwwÿwwÿwwÿwwÿwwÿvvÿuuÿ ttÿ ttÿuuÿ uuÿ ttÿ rrÿ qqÿ qqÿ qqÿ rrÿ rrÿrrÿrrÿssÿssÿttÿuuÿuuÿvvÿwwÿwwÿyyÿzzÿ{{ÿ||ÿ ~~ÿ!ÿ#ÿ%€€ÿ(ÿ(ÿ*‚‚ÿ.……ÿ1††ÿ3‡‡ÿ6……ÿ8ƒƒÿ<……ÿ?‡‡ÿAˆˆÿCŠŠÿF‹‹ÿHÿKŽŽÿMÿG‹‹ö"tt“ ccmmFuuÕ&‚‚ý&ÿ#€€ÿ"ÿ~~ÿ}}ÿ{{ÿzzÿyyÿxxÿwwÿwwÿuuÿuuÿuuÿttÿ ssÿ ssÿ rrÿ qqÿppÿppÿppÿppÿooÿooÿooÿnnÿnnÿnnÿmmÿnnÿ ttÿuuÿuuÿuuÿuuÿuuÿvvÿvvÿvvÿvvÿvvÿwwÿxxÿyyÿ{{ÿ~~ÿ€€ÿ„„ÿ‡‡ÿ‹‹ÿ‘‘ÿ——ÿÿ¤¤ÿ ««ÿ ±±ÿ ¸¸ÿ ¿¿ÿ ÆÅÿ ÍÌÿ ÕÔÿ ÜÛÿâáÿæåÿ ëêö÷÷àûûÚûûÝûûßûúàûúàûûÞûûÝ÷÷æ ïïùìëÿêéÿæåÿáàÿÝÜÿØ×ÿÔÓÿÐÎÿËÊÿÅÅÿÀÀÿ»»ÿµµÿ®®ÿ§§ÿ¢¢ÿžžÿ™™ÿ••ÿÿÿ‰‰ÿ††ÿ„„ÿ‚‚ÿ€€ÿ~~ÿ||ÿ{{ÿzzÿxxÿwwÿwwÿwwÿwwÿwwÿvvÿuuÿuuÿuuÿ uuÿ ttÿ ssÿ ssÿ qqÿ qqÿrrÿ rrÿrrÿssÿssÿssÿttÿuuÿvvÿuuÿwwÿxxÿyyÿzzÿ{{ÿ||ÿ ~~ÿ"ÿ%€€ÿ&ÿ(‚‚ÿ)‚‚ÿ+ƒƒÿ.……ÿ1††ÿ4ˆˆÿ7ˆˆÿ9††ÿ<††ÿ?‡‡ÿA‰‰ÿCŠŠÿF‹‹ÿHÿKŽŽÿNÿB‰‰îmm~__ff oo|||î(ƒƒÿ&ÿ#€€ÿ"ÿ }}ÿ}}ÿ{{ÿzzÿyyÿxxÿwwÿwwÿvvÿuuÿuuÿttÿ ssÿ ssÿ rrÿ qqÿqqÿppÿppÿppÿooÿooÿooÿnnÿnnÿnnÿnnÿ rrÿvvÿuuÿvvÿvvÿvvÿuuÿvvÿvvÿvvÿuuÿvvÿwwÿxxÿyyÿzzÿ~~ÿ€€ÿƒƒÿ††ÿ‰‰ÿŽŽÿ””ÿ™™ÿ  ÿ¦¦ÿ ­­ÿ ³³ÿ ººÿ ÁÀÿ ÈÇÿ ÏÎÿ ÖÕÿ ÝÜÿãâÿ çæÿ ìëö÷÷áúúÛûúÞûûßûúàûûàûûßúúÞ÷÷ç îîúìëÿêéÿæåÿáàÿÜÜÿØ×ÿÔÓÿÏÎÿËÉÿÅÄÿÁÀÿ»»ÿ¶¶ÿ¯¯ÿ©©ÿ££ÿÿ˜˜ÿ””ÿÿÿ‰‰ÿ††ÿ„„ÿÿÿ}}ÿ{{ÿzzÿyyÿxxÿwwÿxxÿwwÿvvÿvvÿvvÿvvÿuuÿ ttÿ uuÿuuÿrrÿ qqÿ qqÿqqÿqqÿrrÿssÿssÿttÿttÿuuÿvvÿvvÿwwÿxxÿyyÿzzÿ{{ÿ||ÿ!~~ÿ#ÿ%€€ÿ'ÿ)‚‚ÿ)‚‚ÿ+ƒƒÿ/……ÿ1††ÿ4ˆˆÿ7‰‰ÿ:ˆˆÿ=††ÿ@‡‡ÿBˆˆÿD‰‰ÿF‹‹ÿIÿKŽŽÿNÿB‰‰ælllqq jj$tt±%ù(ƒƒÿ&ÿ$€€ÿ"€€ÿ ~~ÿ}}ÿ||ÿzzÿyyÿxxÿxxÿwwÿvvÿvvÿuuÿttÿ ssÿ ssÿ rrÿ qqÿqqÿppÿppÿooÿooÿooÿnnÿnnÿnnÿnnÿ qqÿuuÿvvÿvvÿvvÿvvÿuuÿvvÿvvÿvvÿvvÿvvÿvvÿwwÿyyÿyyÿzzÿ||ÿ~~ÿÿ„„ÿ‡‡ÿŒŒÿÿ––ÿ››ÿ¢¢ÿ¨¨ÿ ¯¯ÿ ¶¶ÿ ¼¼ÿ ÄÂÿ ÊÉÿ ÑÏÿ Ø×ÿ ÞÞÿ äãÿ ççÿ íìöø÷âûûÜûûÞûúàûúáûúáûûàûûÞ÷÷è ïîúìëÿééÿæåÿááÿÝÜÿØ×ÿÔÓÿÏÎÿÊÉÿÆÄÿÁÀÿ»»ÿ¶¶ÿ°°ÿ««ÿ¥¥ÿžžÿ˜˜ÿ““ÿÿŒŒÿ‰‰ÿ††ÿƒƒÿÿ~~ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿwwÿwwÿvvÿvvÿvvÿuuÿuuÿuuÿttÿttÿrrÿqqÿqqÿrrÿrrÿrrÿssÿttÿuuÿuuÿvvÿwwÿwwÿxxÿyyÿzzÿ{{ÿ||ÿ!~~ÿ#€€ÿ&€€ÿ(ÿ*ÿ*ƒƒÿ,ƒƒÿ/……ÿ2††ÿ4ˆˆÿ7‰‰ÿ:‹‹ÿ=‰‰ÿ@ˆˆÿB‰‰ÿEŠŠÿGŒŒÿIÿLŽŽÿMþ;ƒƒ×iiUffllKyyÙ)‚‚þ)ƒƒÿ&ÿ$€€ÿ#€€ÿ!~~ÿ}}ÿ||ÿzzÿyyÿxxÿxxÿwwÿwwÿvvÿuuÿuuÿ ssÿ ssÿ rrÿqqÿqqÿppÿppÿooÿooÿooÿnnÿnnÿnnÿooÿvvÿvvÿvvÿvvÿvvÿvvÿvvÿvvÿvvÿvvÿvvÿwwÿwwÿxxÿyyÿyyÿzzÿ||ÿ~~ÿ€€ÿƒƒÿ……ÿˆˆÿÿ’’ÿ——ÿÿ££ÿªªÿ ±±ÿ ¸·ÿ ¾¾ÿ ÅÄÿ ËÊÿ ÒÑÿ ÙØÿ ßÞÿ ääÿ èçÿ îíö÷÷ãûûÜûûßûúáûúâûúâûûàúúà÷öé ïîúìëÿêéÿæåÿâáÿÝÜÿØ×ÿÔÓÿÏÎÿËÉÿÆÅÿÀÀÿ»»ÿ¶¶ÿ±±ÿ¬¬ÿ¦¦ÿ  ÿššÿ””ÿÿŒŒÿˆˆÿ……ÿƒƒÿ€€ÿ~~ÿ}}ÿ{{ÿ{{ÿyyÿxxÿwwÿwwÿwwÿvvÿvvÿvvÿuuÿttÿssÿttÿrrÿqqÿqqÿrrÿrrÿrrÿssÿttÿuuÿuuÿvvÿwwÿwwÿxxÿyyÿzzÿ{{ÿ}}ÿ!~~ÿ#€€ÿ&ÿ)‚‚ÿ*‚‚ÿ+ƒƒÿ-„„ÿ0……ÿ2‡‡ÿ5ˆˆÿ8ŠŠÿ;ŒŒÿ>‹‹ÿAˆˆÿC‰‰ÿEŠŠÿHŒŒÿJÿLÿLý2}}Ë ``BUUff nnl ~~ê+„„ÿ)ƒƒÿ'‚‚ÿ%€€ÿ#ÿ!~~ÿ}}ÿ||ÿ{{ÿyyÿxxÿyyÿwwÿwwÿvvÿuuÿuuÿ ttÿ ssÿ rrÿ qqÿqqÿppÿppÿooÿooÿooÿnnÿnnÿnnÿ ttÿwwÿvvÿwwÿwwÿwwÿwwÿvvÿvvÿvvÿvvÿvvÿvvÿwwÿyyÿzzÿzzÿ{{ÿ||ÿ}}ÿÿÿƒƒÿ††ÿŠŠÿÿ””ÿ™™ÿŸŸÿ¥¥ÿ¬¬ÿ ³³ÿ ¹¹ÿ À¿ÿ ÆÅÿ ÍÌÿ ÔÓÿ ÚÙÿ àßÿ ååÿ éèÿîíöø÷ãûûÝûûßûúáûúâûúâûúáûûà÷öé ïîúììÿêéÿæåÿááÿÝÜÿÙØÿÔÓÿÐÏÿËÊÿÅÅÿÀÀÿ»»ÿ¶¶ÿ±±ÿ««ÿ§§ÿ¡¡ÿ››ÿ••ÿÿ‹‹ÿˆˆÿ……ÿ‚‚ÿ€€ÿ~~ÿ||ÿ{{ÿzzÿyyÿxxÿxxÿwwÿvvÿvvÿvvÿuuÿuuÿttÿttÿrrÿrrÿrrÿssÿrrÿrrÿssÿttÿuuÿvvÿwwÿwwÿxxÿxxÿzzÿ{{ÿ||ÿ }}ÿ"ÿ$€€ÿ'ÿ)‚‚ÿ+‚‚ÿ,‚‚ÿ.„„ÿ0……ÿ3‡‡ÿ6‰‰ÿ8ŠŠÿ<ŒŒÿ?ÿA‹‹ÿC‰‰ÿF‹‹ÿIÿKŽŽÿMÿNþ4~~ËbbAUUff rrŠ$ó+„„ÿ)ƒƒÿ'‚‚ÿ%ÿ#€€ÿ ~~ÿ}}ÿ||ÿ{{ÿzzÿxxÿxxÿwwÿwwÿvvÿvvÿuuÿ ttÿ ssÿ rrÿ qqÿqqÿppÿppÿppÿooÿooÿnnÿnnÿ rrÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿvvÿvvÿvvÿxxÿyyÿzzÿ{{ÿ{{ÿ{{ÿ{{ÿ||ÿ}}ÿ~~ÿ€€ÿ‚‚ÿ……ÿˆˆÿÿ‘‘ÿ––ÿ››ÿ¡¡ÿ¨¨ÿ®®ÿ ´´ÿ »ºÿ ÂÁÿ ÈÇÿ ÏÍÿ ÕÔÿ ÛÚÿ áàÿ æåÿ éèÿ îíö÷÷ãûûÝûûßûúáûúâûúãûúâûûà÷öé ïîúìëÿêéÿæåÿááÿÝÜÿØØÿÔÓÿÏÎÿËÉÿÅÄÿÀÀÿ»»ÿ¶¶ÿ°°ÿ««ÿ¦¦ÿ  ÿœœÿ——ÿ’’ÿŒŒÿ‡‡ÿ„„ÿ‚‚ÿ€€ÿ~~ÿ||ÿ{{ÿyyÿxxÿxxÿwwÿwwÿvvÿvvÿvvÿuuÿttÿttÿssÿssÿssÿssÿrrÿssÿssÿttÿuuÿvvÿwwÿxxÿxxÿyyÿzzÿ{{ÿ||ÿ }}ÿ#ÿ%€€ÿ'‚‚ÿ)ƒƒÿ+ƒƒÿ,ƒƒÿ.„„ÿ1……ÿ3‡‡ÿ7‰‰ÿ9‹‹ÿ=ÿ@ŽŽÿBŽŽÿD‹‹ÿG‹‹ÿIÿKŽŽÿMÿMü3}}½ dd8hh'vvµ*ƒƒû+……ÿ)ƒƒÿ&‚‚ÿ$ÿ#ÿ ~~ÿ}}ÿ||ÿ{{ÿzzÿxxÿxxÿxxÿxxÿwwÿvvÿuuÿ ttÿ ttÿ ssÿ qqÿppÿppÿppÿppÿooÿooÿnnÿppÿvvÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿxxÿyyÿ{{ÿ{{ÿ{{ÿ{{ÿ{{ÿ||ÿ{{ÿ}}ÿ~~ÿÿÿƒƒÿ‡‡ÿŠŠÿŽŽÿ““ÿ˜˜ÿÿ¤¤ÿªªÿ°°ÿ ·¶ÿ ½¼ÿ ÃÂÿ ÊÈÿ ÐÏÿ ÖÕÿ ÜÛÿ ááÿ ææÿ éèÿ îíöøøãûûÝûûßûúâûúãûúãûúâûûàø÷è ïîú íìÿêéÿæåÿâáÿÝÝÿÙØÿÔÓÿÏÎÿÊÉÿÅÄÿÀÀÿ»»ÿµµÿ¯¯ÿ««ÿ¦¦ÿ  ÿœœÿ˜˜ÿ““ÿÿ‡‡ÿ„„ÿÿÿ}}ÿ{{ÿzzÿyyÿxxÿwwÿwwÿvvÿvvÿvvÿvvÿuuÿssÿssÿrrÿssÿssÿssÿssÿttÿttÿuuÿvvÿwwÿxxÿyyÿyyÿzzÿ{{ÿ||ÿ!}}ÿ#ÿ&€€ÿ(‚‚ÿ*ƒƒÿ,„„ÿ.ƒƒÿ/„„ÿ2††ÿ4‡‡ÿ7ŠŠÿ:‹‹ÿ=ÿAÿBÿEÿHÿIÿKŽŽÿMÿLŽŽú+yyªcc$ooI||×-……þ,……ÿ*„„ÿ'‚‚ÿ%ÿ#€€ÿ ~~ÿ}}ÿ||ÿ{{ÿ{{ÿzzÿxxÿxxÿxxÿwwÿvvÿuuÿ ttÿ ttÿ ssÿ rrÿqqÿppÿppÿooÿooÿooÿnnÿ ssÿxxÿwwÿwwÿwwÿwwÿwwÿxxÿxxÿxxÿyyÿyyÿzzÿzzÿ{{ÿ{{ÿ{{ÿ{{ÿ{{ÿ||ÿ||ÿ||ÿ}}ÿÿ€€ÿ‚‚ÿ……ÿˆˆÿ‹‹ÿÿ””ÿššÿŸŸÿ¥¥ÿ««ÿ²²ÿ ¸¸ÿ ¾½ÿ ÅÃÿ ËÊÿ ÑÐÿ ×Öÿ ÜÜÿ âáÿ çæÿ ééÿ îíö÷÷äúúÞûûàûúãûúãûúãûûáûûàööé ïïù ìëÿêéÿæåÿâáÿÝÝÿÙØÿÔÓÿÏÎÿÊÉÿÅÄÿ¿¿ÿººÿ´´ÿ¯¯ÿªªÿ¥¥ÿ  ÿœœÿ˜˜ÿ””ÿŽŽÿˆˆÿ„„ÿÿÿ}}ÿ{{ÿyyÿyyÿxxÿwwÿvvÿvvÿvvÿvvÿuuÿttÿssÿssÿssÿssÿssÿttÿssÿttÿuuÿvvÿwwÿxxÿyyÿzzÿzzÿ{{ÿ }}ÿ!~~ÿ#ÿ&ÿ(‚‚ÿ*ƒƒÿ,„„ÿ.„„ÿ0„„ÿ3††ÿ6ˆˆÿ8ŠŠÿ;ŒŒÿ>ÿAÿCÿE‘‘ÿHÿJŽŽÿLŽŽÿNÿG‹‹ò pp \\qq rrr&ê/‡‡ÿ-……ÿ*„„ÿ(‚‚ÿ%ÿ#€€ÿ ~~ÿ}}ÿ||ÿ||ÿ{{ÿ{{ÿyyÿxxÿxxÿwwÿuuÿuuÿ uuÿ ttÿ ssÿ rrÿqqÿppÿppÿooÿooÿooÿppÿvvÿxxÿxxÿxxÿxxÿwwÿxxÿxxÿxxÿyyÿ{{ÿzzÿzzÿ{{ÿ{{ÿ{{ÿ{{ÿ||ÿ||ÿ||ÿ}}ÿ}}ÿ}}ÿ~~ÿÿÿƒƒÿ††ÿ‰‰ÿÿ‘‘ÿ––ÿ››ÿ¡¡ÿ§§ÿ­­ÿ³³ÿ ¹¸ÿ ¿¾ÿ ÅÄÿ ÌËÿ ÑÑÿ ×Öÿ ÝÜÿ ãâÿ çæÿ êéÿ îí÷øøäûúßûúáûúãûúãûúâûúáúùá÷÷è ïîù ììÿêéÿæåÿâáÿÞÝÿÙØÿÔÓÿÏÎÿÊÉÿÄÄÿ¿¿ÿ¹¹ÿ´´ÿ¯¯ÿªªÿ¤¤ÿ  ÿœœÿ——ÿ““ÿŽŽÿŠŠÿƒƒÿ€€ÿ}}ÿ||ÿzzÿyyÿxxÿwwÿwwÿwwÿvvÿvvÿuuÿttÿrrÿssÿssÿssÿssÿttÿttÿuuÿuuÿvvÿwwÿxxÿyyÿzzÿ{{ÿ||ÿ }}ÿ"ÿ%€€ÿ'ÿ)‚‚ÿ*ƒƒÿ-……ÿ/……ÿ0„„ÿ3††ÿ6ˆˆÿ9ŠŠÿ<ŒŒÿ?ŽŽÿAÿC‘‘ÿF’’ÿH’’ÿJÿLÿO‘‘ÿBˆˆåkkmff mmtt›+„„÷.‡‡ÿ,……ÿ*„„ÿ(ƒƒÿ&‚‚ÿ"€€ÿ!ÿ}}ÿ}}ÿ||ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿvvÿuuÿ uuÿ ttÿ ssÿrrÿqqÿppÿppÿooÿooÿooÿttÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿyyÿzzÿzzÿ||ÿ||ÿ{{ÿ||ÿ||ÿ||ÿ{{ÿ||ÿ||ÿ||ÿ||ÿ}}ÿ~~ÿ~~ÿÿÿ‚‚ÿ……ÿ‡‡ÿ‹‹ÿÿ““ÿ˜˜ÿÿ££ÿ©©ÿ¯¯ÿµµÿ »»ÿ ÁÀÿ ÇÆÿ ÍÌÿ ÒÑÿ Ø×ÿ ÞÝÿ ãâÿ ççÿ êéÿ îí÷÷÷åûúßûúáûúãûúãûúâûúáúúà÷÷è ïïù ìëÿêéÿæåÿâáÿÝÝÿÙØÿÔÓÿÏÍÿÊÉÿÄÄÿ¿¾ÿ¹¹ÿ´´ÿ®®ÿ©©ÿ££ÿŸŸÿ››ÿ——ÿ’’ÿŽŽÿ‰‰ÿƒƒÿÿ}}ÿ||ÿzzÿyyÿxxÿwwÿwwÿvvÿvvÿuuÿttÿssÿttÿssÿssÿttÿttÿuuÿuuÿvvÿwwÿxxÿyyÿyyÿzzÿ{{ÿ||ÿ!}}ÿ#ÿ&€€ÿ(ÿ*ƒƒÿ,ƒƒÿ.……ÿ0……ÿ1……ÿ4‡‡ÿ7‰‰ÿ:ŠŠÿ=ŒŒÿ?ŽŽÿAÿD‘‘ÿG““ÿH““ÿJ‘‘ÿMÿOþ9ƒƒÑggOll/zz¾/††ü/‡‡ÿ,……ÿ+„„ÿ(ƒƒÿ'‚‚ÿ$€€ÿ!ÿ~~ÿ}}ÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿvvÿuuÿ uuÿ ttÿ ssÿ rrÿrrÿqqÿppÿppÿooÿ qqÿwwÿxxÿxxÿxxÿxxÿxxÿxxÿyyÿzzÿ||ÿ||ÿ||ÿ||ÿ||ÿ||ÿ||ÿ||ÿ||ÿ||ÿ||ÿ}}ÿ}}ÿ}}ÿ~~ÿÿÿÿÿƒƒÿ††ÿ‰‰ÿŒŒÿÿ••ÿššÿ  ÿ¥¥ÿªªÿ°°ÿ¶¶ÿ ¼¼ÿ ÂÁÿ ÈÇÿ ÎÌÿ ÓÒÿ ØØÿ ÞÝÿ ãâÿ ççÿ êéÿ ïî÷øøåûûßûúâûúãûúãûúâûúáúúà÷÷è ïîù ìëÿêéÿæåÿâáÿÝÜÿØ×ÿÔÒÿÎÍÿÉÈÿÄÃÿ¾¾ÿ¹¹ÿ´´ÿ®®ÿ¨¨ÿ££ÿžžÿššÿ••ÿ’’ÿÿ‰‰ÿ‚‚ÿ~~ÿ||ÿ{{ÿyyÿxxÿwwÿwwÿwwÿvvÿvvÿttÿttÿttÿssÿssÿttÿuuÿuuÿvvÿvvÿwwÿxxÿxxÿyyÿzzÿ{{ÿ||ÿ!}}ÿ#ÿ&€€ÿ)‚‚ÿ+ƒƒÿ-„„ÿ0„„ÿ1……ÿ2††ÿ5‡‡ÿ7‰‰ÿ:‹‹ÿ=ÿ@ŽŽÿBÿD‘‘ÿG““ÿI””ÿJ““ÿM‘‘ÿMû/zz· __3ÿÿqqH!~~Ø1‡‡þ0‡‡ÿ-††ÿ+„„ÿ(ƒƒÿ'‚‚ÿ%ÿ"ÿ~~ÿ~~ÿ}}ÿ||ÿ{{ÿ{{ÿzzÿyyÿwwÿvvÿuuÿ uuÿ ttÿ ssÿ rrÿrrÿqqÿqqÿppÿooÿuuÿyyÿxxÿyyÿxxÿxxÿxxÿyyÿzzÿ{{ÿ||ÿ||ÿ||ÿ||ÿ||ÿ}}ÿ||ÿ||ÿ||ÿ||ÿ||ÿ}}ÿ}}ÿ~~ÿ~~ÿÿÿ€€ÿÿ‚‚ÿ……ÿ‡‡ÿŠŠÿŽŽÿ““ÿ——ÿœœÿ¡¡ÿ§§ÿ««ÿ±±ÿ··ÿ ¾½ÿ ÃÂÿ ÉÇÿ ÎÍÿ ÓÒÿ ÙØÿ ÞÝÿ ããÿ èçÿ êéÿîî÷øøåûûßûúáûúãûúãûúâûúáúúà÷÷è ïîù ìëÿêéÿæåÿááÿÜÜÿØ×ÿÓÒÿÎÍÿÉÇÿÃÃÿ¾¾ÿ¹¸ÿ³³ÿ­­ÿ¨¨ÿ¢¢ÿÿ™™ÿ””ÿÿŒŒÿˆˆÿƒƒÿ}}ÿ{{ÿzzÿyyÿxxÿwwÿwwÿwwÿwwÿuuÿttÿttÿrrÿssÿttÿttÿuuÿvvÿvvÿwwÿxxÿyyÿyyÿzzÿ||ÿ ||ÿ"}}ÿ$ÿ'ÿ*‚‚ÿ+ƒƒÿ.„„ÿ1……ÿ1††ÿ3††ÿ6ˆˆÿ8‰‰ÿ;‹‹ÿ>ÿAŽŽÿCÿE‘‘ÿG““ÿI””ÿL••ÿN““ÿJø%ttžZZ ooR$Þ2ˆˆÿ0‡‡ÿ-††ÿ+„„ÿ(ƒƒÿ'‚‚ÿ&ÿ#€€ÿ ÿ~~ÿ}}ÿ||ÿ{{ÿ{{ÿzzÿyyÿxxÿvvÿuuÿ uuÿ ttÿ ttÿ ssÿrrÿqqÿqqÿppÿ ssÿyyÿyyÿyyÿyyÿxxÿyyÿzzÿ{{ÿzzÿ||ÿ}}ÿ}}ÿ}}ÿ}}ÿ}}ÿ}}ÿ}}ÿ||ÿ}}ÿ}}ÿ}}ÿ}}ÿ~~ÿ~~ÿ~~ÿÿÿÿÿ‚‚ÿ„„ÿ††ÿ‰‰ÿŒŒÿÿ””ÿ˜˜ÿÿ¢¢ÿ§§ÿ¬¬ÿ³³ÿ¹¹ÿ¾¾ÿ ÄÃÿ ÉÈÿ ÎÍÿ ÔÓÿ ØØÿ ÞÞÿ äãÿ èçÿ êêÿïî÷øøåûûßûûáûúãûúãûúâûúáûúàööé ïîù ìëÿêéÿæåÿáàÿÜÜÿ××ÿÓÒÿÎÌÿÈÇÿÃÂÿ½½ÿ¸·ÿ²²ÿ¬¬ÿ§§ÿ¡¡ÿœœÿ˜˜ÿ““ÿÿ‹‹ÿˆˆÿ‚‚ÿ||ÿzzÿyyÿxxÿwwÿwwÿwwÿwwÿvvÿvvÿttÿrrÿssÿttÿttÿuuÿuuÿwwÿwwÿxxÿyyÿyyÿ{{ÿ ||ÿ!}}ÿ$~~ÿ&€€ÿ(ÿ*‚‚ÿ,„„ÿ/……ÿ2††ÿ2††ÿ4‡‡ÿ7‰‰ÿ9ŠŠÿ<‹‹ÿ>ÿAŽŽÿCÿF’’ÿH““ÿJ””ÿL••ÿO••ÿIô#ss XX ppm(è3‰‰ÿ1ˆˆÿ.††ÿ,……ÿ)ƒƒÿ'‚‚ÿ%ÿ#€€ÿ €€ÿÿ~~ÿ||ÿ{{ÿ{{ÿzzÿyyÿxxÿvvÿuuÿ uuÿ ttÿ ttÿ ssÿrrÿqqÿqqÿqqÿvvÿzzÿzzÿyyÿyyÿyyÿyyÿzzÿ{{ÿ{{ÿ}}ÿ}}ÿ}}ÿ}}ÿ~~ÿ~~ÿ}}ÿ}}ÿ}}ÿ~~ÿ~~ÿ}}ÿ}}ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿÿ€€ÿ‚‚ÿƒƒÿ……ÿ‡‡ÿŠŠÿÿ‘‘ÿ••ÿ™™ÿžžÿ££ÿ©©ÿ®®ÿ´´ÿ¹¹ÿ¿¾ÿ ÄÃÿ ÉÈÿ ÏÍÿ ÔÒÿ ÙØÿ ßÞÿ äãÿ èçÿ ëêÿïî÷ø÷æûûßûúáûúâûúâûúâûúáúùá÷÷è ïîù ìëÿééÿåäÿáàÿÜÛÿØ×ÿÒÑÿÍÌÿÈÇÿÃÂÿ½¼ÿ··ÿ±±ÿ««ÿ¥¥ÿ  ÿ››ÿ––ÿ‘‘ÿÿŠŠÿ††ÿÿ{{ÿzzÿyyÿxxÿxxÿwwÿwwÿvvÿvvÿttÿssÿssÿttÿuuÿuuÿvvÿwwÿxxÿxxÿyyÿzzÿ {{ÿ"||ÿ#~~ÿ$ÿ&€€ÿ)ÿ*‚‚ÿ-„„ÿ1††ÿ3‡‡ÿ2††ÿ4‡‡ÿ7‰‰ÿ:ŠŠÿ=ŒŒÿ?ŽŽÿAÿDÿG’’ÿI““ÿJ””ÿM––ÿN––ÿB‹‹çoorjj qqtt‘-„„ô4‰‰ÿ1ˆˆÿ.††ÿ,……ÿ)„„ÿ'ƒƒÿ%ÿ#€€ÿ €€ÿÿ~~ÿ||ÿ{{ÿzzÿyyÿyyÿxxÿwwÿvvÿ uuÿ ttÿ ssÿ ssÿrrÿqqÿqqÿ ssÿyyÿ{{ÿzzÿzzÿyyÿyyÿyyÿzzÿ{{ÿ||ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ}}ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ}}ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿÿ€€ÿÿƒƒÿ„„ÿ††ÿˆˆÿ‹‹ÿŽŽÿ’’ÿ––ÿ››ÿ  ÿ¥¥ÿªªÿ¯¯ÿµµÿººÿÀ¿ÿ ÅÄÿ ÊÉÿ ÏÍÿ ÔÓÿ ÙØÿ ÞÝÿ äãÿ èçÿ ëêÿîîøøøæûúàûúáûúâûúâûúâûúáûûß÷öè ïîù ëëÿéèÿåäÿáàÿÜÛÿ×ÖÿÑÐÿÌËÿÇÅÿÁÀÿ»»ÿµµÿ¯¯ÿ©©ÿ££ÿžžÿ™™ÿ””ÿÿŒŒÿˆˆÿ„„ÿ€€ÿ{{ÿyyÿxxÿxxÿwwÿwwÿvvÿvvÿuuÿuuÿssÿttÿuuÿuuÿvvÿwwÿxxÿyyÿyyÿzzÿ {{ÿ"}}ÿ$~~ÿ&ÿ'€€ÿ*ÿ,ƒƒÿ.„„ÿ1††ÿ3‡‡ÿ3††ÿ6ˆˆÿ8‰‰ÿ:‹‹ÿ>ŒŒÿ@ŽŽÿBÿE‘‘ÿH““ÿI””ÿK••ÿM––ÿO––þ9††ÐiiMmm#yy®1‡‡ú4‰‰ÿ2ˆˆÿ/‡‡ÿ,……ÿ)„„ÿ(ƒƒÿ%ÿ#ÿ!€€ÿÿ}}ÿ||ÿ{{ÿ{{ÿzzÿyyÿxxÿwwÿvvÿ uuÿ ttÿ ttÿ ssÿrrÿqqÿqqÿvvÿ{{ÿ{{ÿzzÿzzÿzzÿzzÿ{{ÿ{{ÿ{{ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ}}ÿ}}ÿ~~ÿ~~ÿ~~ÿÿÿ€€ÿ€€ÿÿ‚‚ÿ„„ÿ……ÿ‡‡ÿŠŠÿŒŒÿÿ””ÿ˜˜ÿœœÿ¡¡ÿ¦¦ÿ««ÿ°°ÿµµÿ»ºÿÀÀÿ ÆÄÿ ÊÉÿ ÏÎÿ ÔÓÿ ÙØÿ ÞÞÿ äãÿ èçÿ ëêÿ ïîøø÷æûúßûúáûúâûúâûúâûûàûúß÷÷ç îíùëêÿéèÿåäÿààÿÛÚÿÖÕÿÑÐÿËÊÿÆÅÿÀÀÿººÿ³³ÿ­­ÿ§§ÿ¡¡ÿœœÿ——ÿ’’ÿŽŽÿŠŠÿ‡‡ÿ„„ÿÿzzÿxxÿxxÿwwÿwwÿvvÿuuÿttÿttÿttÿttÿuuÿvvÿvvÿwwÿxxÿyyÿzzÿ{{ÿ!||ÿ#}}ÿ%~~ÿ'ÿ)ÿ*‚‚ÿ-„„ÿ/……ÿ2††ÿ4‡‡ÿ4‡‡ÿ7ˆˆÿ9ŠŠÿ<ŒŒÿ?ÿAŽŽÿCÿF‘‘ÿH’’ÿJ””ÿM––ÿO——ÿM••ù+€€® bb, qq8 ||É5ŠŠý5ŠŠÿ3ˆˆÿ0‡‡ÿ,……ÿ*ƒƒÿ(ƒƒÿ%‚‚ÿ#ÿ!€€ÿ €€ÿ~~ÿ}}ÿ{{ÿ{{ÿzzÿyyÿxxÿwwÿvvÿ uuÿ ttÿ ttÿ ssÿrrÿqqÿ ssÿzzÿ{{ÿ{{ÿ{{ÿzzÿzzÿ{{ÿ}}ÿ}}ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿÿÿÿ~~ÿ~~ÿ}}ÿ~~ÿ~~ÿÿÿÿ€€ÿ€€ÿ€€ÿÿ‚‚ÿƒƒÿ„„ÿ††ÿ‰‰ÿ‹‹ÿŽŽÿ‘‘ÿ••ÿ™™ÿÿ¢¢ÿ§§ÿ¬¬ÿ°°ÿ¶µÿ»»ÿÁÀÿ ÆÄÿ ËÉÿ ÐÎÿ ÕÔÿ ÚÙÿ ßÞÿ äãÿ éèÿ ëêÿ ïï÷ø÷æûúßûúáûúâûúâûúâûúáûúßööè îîù ëêÿéèÿääÿßÞÿÚÙÿÕÔÿÐÎÿÊÉÿÄÄÿ¿¾ÿ¹¸ÿ²²ÿ¬¬ÿ¦¦ÿŸŸÿššÿ••ÿÿŒŒÿ‰‰ÿ††ÿƒƒÿ~~ÿyyÿxxÿwwÿwwÿvvÿvvÿttÿttÿttÿuuÿvvÿvvÿwwÿxxÿxxÿyyÿ{{ÿ!||ÿ"||ÿ$~~ÿ&ÿ(€€ÿ*ÿ+‚‚ÿ.„„ÿ0††ÿ3‡‡ÿ4ˆˆÿ5ˆˆÿ7‰‰ÿ9ŠŠÿ=ŒŒÿ@ŽŽÿBÿD‘‘ÿG’’ÿI““ÿK••ÿM––ÿP——ÿEìxx…hhªª rrP'€€Ú7‹‹ÿ5ŠŠÿ3‰‰ÿ0‡‡ÿ-……ÿ*„„ÿ(ƒƒÿ&ƒƒÿ$‚‚ÿ!ÿ €€ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿvvÿuuÿ ttÿ ttÿ ssÿrrÿqqÿvvÿ{{ÿ{{ÿ{{ÿ{{ÿzzÿ{{ÿ||ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿÿÿÿÿÿ~~ÿÿÿÿÿÿÿ€€ÿÿÿ‚‚ÿƒƒÿ……ÿ††ÿ‡‡ÿ‰‰ÿŒŒÿÿ““ÿ––ÿššÿŸŸÿ££ÿ¨¨ÿ¬¬ÿ±±ÿ¶¶ÿ¼»ÿÁÀÿ ÆÅÿ ËÊÿ ÐÏÿ ÕÔÿ ÚÙÿ ßßÿ ääÿ èèÿ ëêÿ îîø÷÷æûûÞûûàûúâûúãûúâûúàûúßööè îîù ëêÿèçÿäãÿßÞÿÚÙÿÔÓÿÎÍÿÉÈÿÃÃÿ½½ÿ··ÿ±±ÿ««ÿ¤¤ÿžžÿ˜˜ÿ““ÿŽŽÿŠŠÿˆˆÿ……ÿ‚‚ÿ}}ÿyyÿxxÿwwÿwwÿvvÿvvÿuuÿuuÿuuÿvvÿwwÿxxÿxxÿyyÿzzÿ!{{ÿ"}}ÿ#}}ÿ%~~ÿ'ÿ*ÿ+‚‚ÿ,ƒƒÿ/……ÿ2††ÿ4‡‡ÿ5ˆˆÿ6ˆˆÿ8‰‰ÿ;‹‹ÿ>ŒŒÿAŽŽÿCÿE‘‘ÿH““ÿI““ÿL••ÿN––ÿO——þ;‹‹×rr[__ qqj+„„ç8‹‹ÿ5ŠŠÿ3‰‰ÿ1‡‡ÿ.††ÿ+„„ÿ(„„ÿ&ƒƒÿ$‚‚ÿ!ÿ €€ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿvvÿuuÿ uuÿ ttÿ ssÿ rrÿ ssÿyyÿ||ÿ||ÿ{{ÿ{{ÿ{{ÿ}}ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿ€€ÿ€€ÿ€€ÿÿÿ‚‚ÿƒƒÿ„„ÿ……ÿ††ÿˆˆÿ‹‹ÿÿ‘‘ÿ““ÿ——ÿ››ÿŸŸÿ¤¤ÿ¨¨ÿ­­ÿ²²ÿ··ÿ¼»ÿÁÀÿ ÆÅÿ ËÊÿ ÐÏÿ ÖÔÿ ÛÚÿ àßÿ ääÿ éèÿ ëêÿ ïîøøøåûûÞûûàûúâûúâûúâûúáûûßööè îíùëêÿèçÿãâÿÞÝÿÙØÿÓÒÿÍÌÿÈÇÿÂÁÿ»»ÿµµÿ¯¯ÿ¨¨ÿ¢¢ÿœœÿ––ÿ‘‘ÿŒŒÿ‰‰ÿ††ÿ„„ÿÿ}}ÿyyÿwwÿvvÿuuÿvvÿuuÿuuÿvvÿvvÿwwÿxxÿxxÿyyÿzzÿ!{{ÿ#}}ÿ$~~ÿ&ÿ(€€ÿ*ÿ,‚‚ÿ-ƒƒÿ0……ÿ3‡‡ÿ5ˆˆÿ6ˆˆÿ7‰‰ÿ9ŠŠÿ<‹‹ÿ?ÿAŽŽÿDÿF’’ÿH““ÿJ””ÿL••ÿN––ÿL••ú.ƒƒµ nn5ss uuz1‡‡ï8ŒŒÿ5ŠŠÿ4‰‰ÿ1ˆˆÿ.††ÿ+……ÿ)„„ÿ&ƒƒÿ$‚‚ÿ"ÿ €€ÿÿ~~ÿ||ÿ{{ÿzzÿzzÿxxÿxxÿvvÿuuÿ uuÿ ttÿ ssÿ ssÿ uuÿ||ÿ||ÿ||ÿ||ÿ||ÿ}}ÿ}}ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿÿÿÿÿÿÿÿÿÿ€€ÿ€€ÿ€€ÿÿÿÿÿ€€ÿ€€ÿ€€ÿÿÿ‚‚ÿƒƒÿ„„ÿ††ÿˆˆÿŠŠÿŒŒÿÿ‘‘ÿ••ÿ˜˜ÿœœÿŸŸÿ££ÿ©©ÿ®®ÿ²²ÿ··ÿ¼¼ÿÁÀÿ ÆÅÿ ËÊÿ ÑÏÿ ÖÕÿ ÛÚÿ àßÿ åäÿ éèÿ ëêÿ ïîøøøåûûÞûúáûúâûúâûúâûûàûûÞ÷öç íìúêéÿçæÿãâÿÞÝÿØ×ÿÒÑÿÌËÿÆÅÿÀ¿ÿ¹¹ÿ³³ÿ­­ÿ¦¦ÿŸŸÿ™™ÿ””ÿÿ‹‹ÿˆˆÿ……ÿ ƒƒÿ€€ÿ||ÿxxÿvvÿwwÿwwÿwwÿvvÿvvÿvvÿwwÿyyÿyyÿyyÿ!zzÿ"||ÿ$}}ÿ%~~ÿ&ÿ)€€ÿ+ÿ-ƒƒÿ/„„ÿ1††ÿ3‡‡ÿ5ˆˆÿ6‰‰ÿ7‰‰ÿ:ŠŠÿ=ŒŒÿ@ÿBÿE‘‘ÿG’’ÿH““ÿK””ÿM––ÿO——ÿI’’ô&||“ kk\\ wwz2ˆˆñ9ŒŒÿ6‹‹ÿ4‰‰ÿ1ˆˆÿ/‡‡ÿ,††ÿ)„„ÿ'„„ÿ$‚‚ÿ"ÿ €€ÿÿ~~ÿ||ÿ{{ÿ{{ÿzzÿxxÿxxÿwwÿvvÿ uuÿ ttÿ ssÿ ssÿxxÿ||ÿ||ÿ||ÿ}}ÿ}}ÿ~~ÿ~~ÿ~~ÿ~~ÿÿÿ~~ÿÿÿÿÿÿÿÿÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿÿ‚‚ÿ‚‚ÿƒƒÿ……ÿ‡‡ÿ‰‰ÿ‹‹ÿÿÿ““ÿ––ÿ˜˜ÿœœÿ  ÿ¤¤ÿ©©ÿ®®ÿ³³ÿ¸¸ÿ½¼ÿÂÁÿÆÅÿ ÌËÿ ÑÐÿ ÖÕÿ ÛÚÿ àßÿ åäÿ éèÿ ëêÿ îî÷øøäûûÞûûàûûáûúâûúáûûßûûÝööç íìùêéÿçæÿâáÿÜÜÿ×ÖÿÑÐÿËÊÿÅÄÿ¾¾ÿ¸¸ÿ±±ÿªªÿ££ÿžžÿ˜˜ÿ““ÿŽŽÿŠŠÿ‡‡ÿ „„ÿ!ƒƒÿ€€ÿ{{ÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿxxÿyyÿyyÿzzÿ!{{ÿ#||ÿ$}}ÿ&~~ÿ'ÿ*ÿ,‚‚ÿ.„„ÿ0……ÿ2‡‡ÿ4ˆˆÿ6‰‰ÿ7‰‰ÿ9‰‰ÿ<‹‹ÿ?ŒŒÿAŽŽÿCÿF‘‘ÿH’’ÿI““ÿL••ÿN––ÿP——ÿCæwwxffffxx‡2‰‰ó9ÿ7‹‹ÿ4‰‰ÿ2‰‰ÿ0ˆˆÿ,††ÿ)……ÿ'„„ÿ%ƒƒÿ#ÿ!€€ÿÿ~~ÿ||ÿ{{ÿ{{ÿzzÿyyÿxxÿwwÿvvÿ uuÿ ttÿ ssÿ ttÿ{{ÿ}}ÿ}}ÿ}}ÿ}}ÿ}}ÿ~~ÿÿÿÿÿÿÿÿÿÿÿ€€ÿ€€ÿ€€ÿ€€ÿÿÿÿÿÿÿÿÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿÿ‚‚ÿ‚‚ÿƒƒÿ„„ÿ††ÿ‡‡ÿ‰‰ÿ‹‹ÿŽŽÿÿ““ÿ––ÿ™™ÿÿ¡¡ÿ¥¥ÿªªÿ®®ÿ³³ÿ¸¸ÿ½¼ÿÂÁÿÇÆÿ ÌËÿ ÐÏÿ ÕÕÿ ÚÚÿ àßÿ åäÿ éèÿ ëêÿ îî÷÷÷äûûÝûûßûúáûúáûúàûûÞûûÜööæ îíøééÿæåÿáàÿÜÛÿÕÕÿÏÎÿÊÉÿÃÃÿ½½ÿ¶¶ÿ¯¯ÿ¨¨ÿ¢¢ÿœœÿ—–ÿ‘‘ÿŒŒÿˆˆÿ ††ÿ!„„ÿ!‚‚ÿ€€ÿzzÿxxÿxxÿwwÿwwÿwwÿxxÿyyÿyyÿzzÿ!{{ÿ"||ÿ#||ÿ%}}ÿ'ÿ)€€ÿ+ÿ-ƒƒÿ/„„ÿ1††ÿ4‡‡ÿ5ˆˆÿ8ŠŠÿ8‰‰ÿ:ŠŠÿ=‹‹ÿ?ÿBŽŽÿDÿF‘‘ÿI““ÿJ””ÿN––ÿO——ÿO––ý5††Ç llIff ss{{›4ŠŠö:ÿ7‹‹ÿ4‰‰ÿ2‰‰ÿ0‡‡ÿ,††ÿ*††ÿ(„„ÿ%ƒƒÿ#‚‚ÿ!ÿÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿvvÿ uuÿ uuÿ ttÿvvÿ}}ÿ}}ÿ}}ÿ}}ÿ~~ÿ~~ÿÿÿÿÿÿ€€ÿÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€ÿ€€ÿÿÿÿ‚‚ÿƒƒÿ……ÿ††ÿ‡‡ÿ‰‰ÿ‹‹ÿŽŽÿÿ““ÿ––ÿ™™ÿÿ¡¡ÿ¥¥ÿ©©ÿ®®ÿ³³ÿ¸¸ÿ½½ÿÂÁÿÇÆÿ ÌËÿ ÑÐÿ ÕÕÿ ÚÚÿ àßÿ äãÿèçÿ êéÿ îîöøøãûûÝûúßûúàûúàûûßûûÞûûÜ÷÷å ííøéèÿåäÿàßÿÚÚÿÔÓÿÎÍÿÈÇÿÂÁÿ»»ÿ´´ÿ¬¬ÿ¦¦ÿ  ÿš™ÿ””ÿÿ‹‹ÿ ˆˆÿ!††ÿ"„„ÿ"‚‚ÿ ÿ{{ÿyyÿxxÿwwÿxxÿyyÿyyÿzzÿ!{{ÿ"||ÿ#||ÿ$}}ÿ&~~ÿ)€€ÿ+ÿ,‚‚ÿ.ƒƒÿ1……ÿ3††ÿ5ˆˆÿ7‰‰ÿ9ŠŠÿ9‰‰ÿ<ŠŠÿ>ŒŒÿ@ÿCÿE‘‘ÿG’’ÿJ““ÿK••ÿN––ÿP——ÿM““õ'}}¡kk&pp"{{±8ŠŠú:ÿ8ŒŒÿ5ŠŠÿ2‰‰ÿ0‡‡ÿ-††ÿ+††ÿ(„„ÿ&ƒƒÿ$‚‚ÿ"ÿÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿvvÿ uuÿ uuÿ ttÿyyÿ~~ÿ}}ÿ}}ÿ}}ÿ~~ÿÿÿÿÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿÿÿÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ€€ÿ€€ÿÿ‚‚ÿÿ‚‚ÿ‚‚ÿƒƒÿ……ÿ††ÿ‡‡ÿ‰‰ÿŒŒÿŽŽÿÿ““ÿ––ÿššÿÿ¡¡ÿ¥¥ÿªªÿ¯¯ÿ³³ÿ¸¸ÿ½½ÿÂÂÿÇÆÿ ÌËÿ ÐÏÿ ÕÔÿ ÚÙÿ ßÞÿ ããÿèçÿ êéÿ îîö÷÷ãûûÜûûÞûûßûúàûûßûûÝúúÛ÷÷ä ììøèçÿäãÿßßÿÚÙÿÓÒÿÍÌÿÆÆÿ¿¿ÿ¹¸ÿ±±ÿ««ÿ¤¤ÿÿ——ÿ““ÿŽŽÿ!ŠŠÿ"ˆˆÿ"……ÿ#ƒƒÿ#‚‚ÿ}}ÿzzÿxxÿxxÿxxÿyyÿyyÿ zzÿ"{{ÿ#||ÿ$}}ÿ&~~ÿ(ÿ*ÿ,‚‚ÿ.ƒƒÿ/„„ÿ2††ÿ4‡‡ÿ6ˆˆÿ9ŠŠÿ:ŠŠÿ:ŠŠÿ=ŒŒÿ@ÿBŽŽÿDÿF‘‘ÿH’’ÿJ””ÿL••ÿO——ÿQ——þAÝssj[[ oo0'‚‚Ä:ü;ÿ9ŒŒÿ6ŠŠÿ3‰‰ÿ0ˆˆÿ.‡‡ÿ+††ÿ(„„ÿ&ƒƒÿ$‚‚ÿ"ÿ €€ÿÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿvvÿvvÿ uuÿ uuÿ||ÿ~~ÿ~~ÿ~~ÿ~~ÿÿÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿÿÿÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿÿÿÿÿÿ‚‚ÿƒƒÿƒƒÿ„„ÿ……ÿ††ÿˆˆÿŠŠÿŒŒÿŽŽÿ‘‘ÿ““ÿ––ÿ™™ÿÿ¡¡ÿ¥¥ÿªªÿ®®ÿ³³ÿ¸¸ÿ½½ÿÂÁÿÆÅÿ ËÊÿ ÐÏÿ ÕÔÿ ÙÙÿ ÞÞÿ ããÿççÿ êéÿ îîöøøãúúÜûûÞûûßûûßûûÞûûÛûúÚ÷÷ã ìëøççÿäãÿßÞÿØØÿÒÑÿËÊÿÄÄÿ½½ÿ¶¶ÿ¯¯ÿ©©ÿ¢¢ÿ››ÿ––ÿ ‘‘ÿ!ÿ"ŠŠÿ"‡‡ÿ#……ÿ$ƒƒÿ#€€ÿ{{ÿxxÿyyÿyyÿyyÿyyÿ!{{ÿ#||ÿ$||ÿ&~~ÿ(ÿ*€€ÿ+ÿ-ƒƒÿ/ƒƒÿ1……ÿ4††ÿ6ˆˆÿ7‰‰ÿ:ŠŠÿ;ŠŠÿ;‹‹ÿ>ŒŒÿAŽŽÿCÿEÿG’’ÿI““ÿK””ÿN––ÿP——ÿO••ú/‚‚ºmm:UUpp;-……Ð<þ;ÿ9ŒŒÿ7‹‹ÿ4ŠŠÿ1‰‰ÿ.‡‡ÿ,††ÿ)……ÿ'ƒƒÿ%ƒƒÿ#ÿ €€ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿzzÿxxÿwwÿvvÿvvÿ uuÿwwÿ~~ÿÿ~~ÿÿÿÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿÿÿ ‚‚ÿ ‚‚ÿ ƒƒÿ„„ÿ„„ÿ……ÿ††ÿˆˆÿ‰‰ÿ‹‹ÿÿÿ‘‘ÿ““ÿ––ÿššÿÿ¡¡ÿ¥¥ÿ©©ÿ®®ÿ³³ÿ¸¸ÿ¼¼ÿÁÀÿÆÅÿ ËÊÿ ÐÏÿ ÔÓÿ ÙØÿ ÞÝÿ ãâÿçæÿ êéÿ íí÷÷÷ãúúÜûûÝûûÞûûÞûûÜûûÛûûÙ÷õâ ëêøçæÿãâÿÞÝÿ×ÖÿÐÐÿÊÉÿÂÂÿ¼¼ÿ´´ÿ®®ÿ§§ÿ  ÿššÿ ••ÿ!ÿ"ŒŒÿ#‰‰ÿ#‡‡ÿ$„„ÿ%ƒƒÿ"~~ÿzzÿyyÿzzÿ zzÿ!zzÿ"{{ÿ#||ÿ%}}ÿ'ÿ)€€ÿ+ÿ,‚‚ÿ.ƒƒÿ0„„ÿ3††ÿ5‡‡ÿ7ˆˆÿ9ŠŠÿ<‹‹ÿ;‹‹ÿ=‹‹ÿ@ÿBÿDÿG‘‘ÿH’’ÿJ““ÿL••ÿN––ÿQ˜˜ÿH’’íxx‰kkUUttH/††Ú>ŽŽþ<ŽŽÿ9ŒŒÿ7‹‹ÿ5ŠŠÿ1‰‰ÿ.ˆˆÿ,††ÿ)……ÿ'ƒƒÿ%ƒƒÿ#ÿ €€ÿ~~ÿ}}ÿ||ÿ{{ÿ{{ÿzzÿyyÿxxÿwwÿvvÿ uuÿzzÿÿÿÿ€€ÿÿ€€ÿ€€ÿÿÿ€€ÿ€€ÿ€€ÿ€€ÿÿÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ „„ÿ „„ÿ„„ÿ……ÿ††ÿ‡‡ÿˆˆÿŠŠÿŒŒÿŽŽÿÿ‘‘ÿ””ÿ––ÿ™™ÿÿ¡¡ÿ¤¤ÿ©©ÿ®®ÿ³³ÿ··ÿ¼¼ÿÁÀÿÆÅÿ ËÊÿ ÏÎÿ ÔÓÿ ÙØÿ ÞÝÿââÿçæÿ êéÿ íì÷øøâûûÛûûÜûûÝûûÝûûÜûûÚûû×õõâ ëë÷æåÿâáÿÜÛÿÖÕÿÏÎÿÈÇÿÀÀÿº¹ÿ³³ÿ««ÿ¥¥ÿžžÿ™™ÿ ““ÿ"ÿ#‹‹ÿ$‰‰ÿ%……ÿ&„„ÿ%€€ÿ ||ÿzzÿ {{ÿ"||ÿ#{{ÿ#||ÿ%}}ÿ'~~ÿ)€€ÿ*€€ÿ,ÿ-‚‚ÿ/„„ÿ2††ÿ4‡‡ÿ6ˆˆÿ9ŠŠÿ;‹‹ÿ<ŒŒÿ<‹‹ÿ>ŒŒÿAŽŽÿDÿF‘‘ÿH’’ÿI““ÿL””ÿN––ÿO——ÿQ˜˜ÿAŽŽÛtt\__ªªuuP1††á>þ<ŽŽÿ:ÿ7ŒŒÿ5ŠŠÿ2ŠŠÿ/ˆˆÿ,††ÿ*……ÿ'ƒƒÿ%‚‚ÿ#ÿ!€€ÿ~~ÿ}}ÿ||ÿ{{ÿ{{ÿzzÿyyÿxxÿwwÿvvÿvvÿ||ÿÿÿ€€ÿ€€ÿ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ ƒƒÿ „„ÿ „„ÿ ……ÿ……ÿ††ÿ ‡‡ÿ‰‰ÿŠŠÿŒŒÿŽŽÿÿ’’ÿ””ÿ——ÿššÿžžÿ¡¡ÿ¥¥ÿªªÿ®®ÿ³³ÿ··ÿ¼¼ÿÁÀÿÅÅÿÊÉÿ ÎÍÿ ÓÒÿ Ø×ÿ ÝÜÿâáÿçæÿ éèÿ îíöøøáûûÙûûÛûûÜûûÜûûÛûûÙûûÖõõá ëê÷äãÿààÿÛÚÿÔÓÿÍËÿÆÅÿ¿¾ÿ¸¸ÿ°°ÿªªÿ££ÿÿ!——ÿ"’’ÿ#ŽŽÿ$‹‹ÿ&‡‡ÿ'„„ÿ'‚‚ÿ#~~ÿ!{{ÿ!{{ÿ#||ÿ#||ÿ%}}ÿ'~~ÿ(ÿ*€€ÿ,ÿ-‚‚ÿ/ƒƒÿ1„„ÿ4††ÿ6ˆˆÿ8‰‰ÿ:‹‹ÿ<ŒŒÿ<ŒŒÿ=ŒŒÿ@ŽŽÿCÿEÿG‘‘ÿI““ÿK””ÿM••ÿO——ÿQ˜˜ÿP––ú3„„·kk9ttH0‡‡Û>þ=ÿ:ÿ8ÿ6‹‹ÿ3ŠŠÿ0ˆˆÿ-‡‡ÿ+……ÿ(„„ÿ%‚‚ÿ#ÿ!€€ÿ~~ÿ}}ÿ}}ÿ||ÿ{{ÿzzÿyyÿwwÿwwÿvvÿwwÿ~~ÿ €€ÿ€€ÿ€€ÿ‚‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ ƒƒÿ ƒƒÿ ‚‚ÿ ‚‚ÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ!„„ÿ!„„ÿ!„„ÿ!……ÿ ……ÿ!††ÿ!‡‡ÿ!ˆˆÿ ‰‰ÿ ŠŠÿŒŒÿŽŽÿÿ’’ÿ””ÿ——ÿššÿÿ¡¡ÿ¦¦ÿªªÿ®®ÿ²²ÿ··ÿ¼¼ÿÀÀÿÅÄÿÉÈÿ ÍÌÿ ÓÑÿ ×Öÿ ÝÜÿâáÿæåÿéèÿ ííö÷÷àûûØûûÚûûÛûûÛûûÚûû×üüÔöõß éé÷äãÿàßÿÙØÿÒÑÿËÊÿÄÃÿ½½ÿ¶¶ÿ¯¯ÿ¨¨ÿ¡¡ÿ!››ÿ"––ÿ#‘‘ÿ$ÿ&ŠŠÿ'††ÿ(„„ÿ'ÿ"}}ÿ#}}ÿ$}}ÿ%}}ÿ&~~ÿ(~~ÿ*ÿ,ÿ-‚‚ÿ.‚‚ÿ0„„ÿ3……ÿ5‡‡ÿ7ˆˆÿ:ŠŠÿ<ŒŒÿ=ŒŒÿ=ŒŒÿ?ÿAŽŽÿDÿFÿH’’ÿJ““ÿL••ÿN––ÿP——ÿR˜˜ÿGçww|mmÿÿ ss>-ƒƒÑ>ý=ÿ;ŽŽÿ9ÿ6ŒŒÿ3ŠŠÿ0ˆˆÿ.‡‡ÿ+††ÿ(„„ÿ&‚‚ÿ$‚‚ÿ!ÿÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿvvÿyyÿ €€ÿ ÿÿÿ‚‚ÿÿÿÿÿÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ‚‚ÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ"„„ÿ"„„ÿ"„„ÿ"„„ÿ"……ÿ!††ÿ!††ÿ!‡‡ÿ!ˆˆÿ ‰‰ÿ ‹‹ÿ ÿŽŽÿÿ’’ÿ””ÿ——ÿššÿžžÿ¡¡ÿ¦¦ÿªªÿ®®ÿ²²ÿ··ÿ¼»ÿÀ¿ÿÅÄÿÉÈÿ ÍÌÿ ÒÑÿ ×Öÿ ÜÛÿáàÿæåÿèçÿ íìõöößûû×ûûÙûûÚûûÙûûØüüÕüûÓõõÞ éè÷ãâÿÞÞÿØ×ÿÐÏÿÊÉÿÂÂÿ»»ÿ´´ÿ­­ÿ¦¦ÿ   ÿ!ššÿ#••ÿ%‘‘ÿ&ŒŒÿ(‰‰ÿ*††ÿ)ƒƒÿ%€€ÿ$~~ÿ%~~ÿ'~~ÿ(ÿ)ÿ+€€ÿ-ÿ.‚‚ÿ0ƒƒÿ2……ÿ4††ÿ6ˆˆÿ8‰‰ÿ<‹‹ÿ>ŒŒÿ>ÿ>ÿAŽŽÿCŽŽÿEÿG‘‘ÿI““ÿK““ÿM••ÿO––ÿQ——ÿP––ü6……à mmHffÿÿ ppB.„„Ô?þ>ÿ;ŽŽÿ9ÿ6ŒŒÿ4ŠŠÿ1‰‰ÿ.ˆˆÿ,††ÿ)……ÿ&ƒƒÿ$‚‚ÿ!ÿÿ~~ÿ||ÿ||ÿ{{ÿzzÿyyÿxxÿwwÿvvÿ{{ÿ"ÿ!ÿÿ€€ÿÿ‚‚ÿ‚‚ÿ‚‚ÿÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ"ƒƒÿ"ƒƒÿ"„„ÿ"„„ÿ"„„ÿ"„„ÿ"……ÿ#……ÿ"……ÿ!††ÿ!††ÿ"‡‡ÿ!ˆˆÿ!ŠŠÿ!‹‹ÿ!ŒŒÿ ŽŽÿÿ’’ÿ••ÿ——ÿ››ÿžžÿ¡¡ÿ¥¥ÿ©©ÿ­­ÿ²²ÿ·¶ÿ»ºÿÀ¿ÿÄÃÿÈÇÿÌËÿ ÑÐÿ ÖÕÿÛÛÿàßÿåäÿçæÿ ìëõööÞûûÖûûØûûØûûØüüÖüüÓüûÑõôÝèæ÷ááÿÝÜÿÖÕÿÐÎÿÈÇÿÀÀÿ¹¹ÿ²²ÿ««ÿ¥¥ÿ!žžÿ#™™ÿ%••ÿ'ÿ(‹‹ÿ*‰‰ÿ+††ÿ)ƒƒÿ%ÿ'ÿ(ÿ)€€ÿ*€€ÿ,ÿ.‚‚ÿ0ƒƒÿ2„„ÿ4††ÿ6‡‡ÿ8ˆˆÿ:ŠŠÿ=ŒŒÿ?ÿ?ÿ@ŽŽÿBÿDÿG‘‘ÿI‘‘ÿK““ÿL””ÿN••ÿP––ÿS˜˜ÿI‘‘ë!xx‰iiÿÿ ppF/††×@þ?ÿ<ŽŽÿ:ŽŽÿ7ÿ4‹‹ÿ1‰‰ÿ/ˆˆÿ-††ÿ*……ÿ'„„ÿ%‚‚ÿ"ÿÿ~~ÿ}}ÿ||ÿ||ÿzzÿyyÿxxÿwwÿvvÿ~~ÿ#‚‚ÿ!ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿƒƒÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿƒƒÿ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!„„ÿ!„„ÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ"ƒƒÿ#„„ÿ#„„ÿ#„„ÿ#„„ÿ#„„ÿ#……ÿ$……ÿ#……ÿ#††ÿ#††ÿ#††ÿ#‡‡ÿ"‰‰ÿ#ŠŠÿ"‹‹ÿ"ÿ!ÿ ‘‘ÿ““ÿ••ÿ˜˜ÿššÿžžÿ¡¡ÿ¥¥ÿ©©ÿ­­ÿ²²ÿ¶¶ÿººÿ¿¿ÿÃÂÿÇÆÿÌÊÿ ÑÏÿ ÕÕÿÛÚÿàßÿäãÿçæÿ ìëôöõÜûûÔüüÕüüÖûûÖûûÕüüÒüüÏôòÜåä÷àßÿÛÚÿÕÔÿÍÌÿÆÅÿ¾¾ÿ··ÿ±±ÿ©©ÿ!££ÿ#ÿ%˜˜ÿ'““ÿ)ÿ*ŠŠÿ+ˆˆÿ+……ÿ&ÿ(€€ÿ)€€ÿ*€€ÿ,€€ÿ-‚‚ÿ0ƒƒÿ2„„ÿ4……ÿ6‡‡ÿ7ˆˆÿ9‰‰ÿ<‹‹ÿ>ŒŒÿ@ŽŽÿ@ŽŽÿAŽŽÿDÿF‘‘ÿH‘‘ÿJ’’ÿL””ÿN••ÿO––ÿR——ÿQ––ü9‡‡Ä iiMUU ssK0‡‡Û@þ@‘‘ÿ=ÿ:ŽŽÿ8ÿ5‹‹ÿ2‰‰ÿ0ˆˆÿ-††ÿ+……ÿ(„„ÿ&‚‚ÿ#ÿ €€ÿ~~ÿ}}ÿ||ÿ||ÿzzÿyyÿyyÿwwÿxxÿ €€ÿ#‚‚ÿ"‚‚ÿ!ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿƒƒÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ ƒƒÿ ‚‚ÿ ‚‚ÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!„„ÿ!„„ÿ"„„ÿ"„„ÿ"„„ÿ"„„ÿ#„„ÿ#„„ÿ$……ÿ$„„ÿ$„„ÿ$„„ÿ$……ÿ$……ÿ$……ÿ$††ÿ#††ÿ#‡‡ÿ#ˆˆÿ#‰‰ÿ#ŠŠÿ"ŒŒÿ"ÿ!ÿ!‘‘ÿ ““ÿ••ÿ——ÿššÿÿ¡¡ÿ¥¥ÿ¨¨ÿ­­ÿ°°ÿµµÿ¹¹ÿ¾½ÿÂÁÿÆÅÿËÊÿÐÏÿÔÓÿÚÙÿßÞÿããÿååÿ êéôõõÛûûÒüüÓüüÔûûÕüüÓüüÐüûÎóòÛåäößÞÿÚÙÿÓÒÿÌÊÿÄÄÿ½½ÿ¶¶ÿ¯¯ÿ ©©ÿ"¢¢ÿ%œœÿ'——ÿ)‘‘ÿ*ÿ,ŠŠÿ-‡‡ÿ)ƒƒÿ(ÿ)ÿ+ÿ-ÿ/‚‚ÿ2„„ÿ4††ÿ6††ÿ7ˆˆÿ9ˆˆÿ;ŠŠÿ>ŒŒÿ@ÿBŽŽÿAŽŽÿBŽŽÿE‘‘ÿGÿI’’ÿL““ÿM••ÿO––ÿQ——ÿS˜˜ÿJ’’î#{{gg UUrrN3‡‡ÞAþ@‘‘ÿ>ÿ;ŽŽÿ8ÿ5‹‹ÿ3ŠŠÿ0ˆˆÿ-††ÿ+††ÿ)„„ÿ&ƒƒÿ$ÿ!€€ÿ~~ÿ}}ÿ||ÿ{{ÿ{{ÿzzÿyyÿxxÿyyÿ"‚‚ÿ#ƒƒÿ"ƒƒÿ"„„ÿ!„„ÿ!ƒƒÿ!ƒƒÿ ƒƒÿ‚‚ÿ‚‚ÿ‚‚ÿƒƒÿ ƒƒÿ ‚‚ÿ ƒƒÿ‚‚ÿ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!„„ÿ!„„ÿ!„„ÿ"„„ÿ#„„ÿ#„„ÿ#„„ÿ#„„ÿ$……ÿ$……ÿ$……ÿ$……ÿ$„„ÿ%……ÿ%……ÿ$……ÿ$††ÿ%††ÿ$††ÿ$‡‡ÿ$‡‡ÿ$ˆˆÿ$‰‰ÿ#ŠŠÿ#‹‹ÿ"ÿ"ÿ!‘‘ÿ!““ÿ ””ÿ——ÿššÿÿ  ÿ¤¤ÿ¨¨ÿ««ÿ¯¯ÿ³³ÿ¸·ÿ¼¼ÿÁÀÿÅÅÿÊÉÿÎÍÿÓÒÿÙØÿÞÝÿââÿåäÿ êèóöõÙüüÏûûÒüüÓüüÓüüÑýüÎüûÌóòÙääöÞÞÿÙØÿÒÑÿÊÊÿÃÃÿ¼¼ÿµµÿ®®ÿ!§§ÿ$¡¡ÿ'ššÿ(••ÿ+‘‘ÿ-ŽŽÿ.ŠŠÿ,……ÿ*ƒƒÿ*‚‚ÿ,‚‚ÿ.ƒƒÿ1ƒƒÿ4……ÿ6††ÿ7‡‡ÿ9ˆˆÿ;‰‰ÿ=‹‹ÿ?ÿBŽŽÿCÿBŽŽÿDÿF‘‘ÿI‘‘ÿK““ÿM””ÿO––ÿQ––ÿR˜˜ÿR——þ=‰‰ÏooW__UUssR5‰‰áB‘‘þA‘‘ÿ>ÿ<ÿ9ÿ6ŒŒÿ3ŠŠÿ0ˆˆÿ.‡‡ÿ,††ÿ)„„ÿ&ƒƒÿ%ÿ"€€ÿÿ~~ÿ||ÿ{{ÿ{{ÿzzÿyyÿxxÿzzÿ#ƒƒÿ$„„ÿ#„„ÿ#„„ÿ"„„ÿ!ƒƒÿ!ƒƒÿ ƒƒÿ ƒƒÿƒƒÿ ƒƒÿ ƒƒÿ ‚‚ÿ ‚‚ÿ ƒƒÿ‚‚ÿ ƒƒÿ ƒƒÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ"„„ÿ"……ÿ#„„ÿ#……ÿ#……ÿ#……ÿ#……ÿ$……ÿ$……ÿ$……ÿ$……ÿ%……ÿ%……ÿ%……ÿ&……ÿ%……ÿ%……ÿ%……ÿ%……ÿ%††ÿ%‡‡ÿ%‡‡ÿ%‰‰ÿ%ŠŠÿ$‹‹ÿ#ŒŒÿ#ŽŽÿ"ÿ"‘‘ÿ"““ÿ!••ÿ ——ÿššÿÿ  ÿ££ÿ§§ÿ««ÿ¯¯ÿ²²ÿ··ÿ»»ÿ¿¿ÿÄÄÿÉÇÿÍÌÿÒÑÿØ×ÿÝÜÿâáÿäãþ ééòöö×üüÎüüÐüüÑüüÑüüÏýüÌüüÉòòØããöÝÜÿØ×ÿÑÐÿÊÉÿÂÂÿººÿ³³ÿ ¬¬ÿ#¦¦ÿ'  ÿ(ššÿ+••ÿ.‘‘ÿ/ÿ.ˆˆÿ+……ÿ,„„ÿ-ƒƒÿ0„„ÿ3„„ÿ6††ÿ8‡‡ÿ9ˆˆÿ:‰‰ÿ=‹‹ÿ?ŒŒÿAŽŽÿDÿCÿDÿFÿH‘‘ÿJ““ÿL””ÿN••ÿP––ÿR——ÿS™™ÿN••ó(}}Ÿdd+ÿÿssT7‰‰ãB‘‘ÿA‘‘ÿ>ÿ;ŽŽÿ:ŽŽÿ7ŒŒÿ4ŠŠÿ1ˆˆÿ.‡‡ÿ,††ÿ*„„ÿ'ƒƒÿ%‚‚ÿ$ÿ €€ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿ{{ÿ$„„ÿ$„„ÿ$„„ÿ#……ÿ#„„ÿ"„„ÿ!ƒƒÿ!„„ÿ!ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ!ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!„„ÿ"„„ÿ#„„ÿ"„„ÿ"„„ÿ#……ÿ#……ÿ#……ÿ#……ÿ#……ÿ$……ÿ$……ÿ%……ÿ%……ÿ%……ÿ%……ÿ%……ÿ&……ÿ&……ÿ&……ÿ&……ÿ&……ÿ&……ÿ&……ÿ&††ÿ&‡‡ÿ%‡‡ÿ%ˆˆÿ%‰‰ÿ%ŠŠÿ$‹‹ÿ#ŒŒÿ#ÿ#ÿ#ÿ"’’ÿ!””ÿ!——ÿššÿœœÿŸŸÿ££ÿ¦¦ÿªªÿ­­ÿ±±ÿ¶¶ÿººÿ¾¾ÿÃÂÿÇÆÿÌËÿÑÐÿÖÖÿÜÛÿààÿãâþ èçòööÕüüÌüüÎüüÏüüÏüüÎýüÊûûÇ ññÖââõÛÛÿ×ÕÿÐÏÿÈÇÿÀÀÿ¹¹ÿ ²²ÿ#««ÿ&¤¤ÿ(žžÿ+™™ÿ.””ÿ0ÿ/ŒŒÿ-‡‡ÿ.††ÿ0……ÿ2††ÿ5††ÿ8‡‡ÿ:ˆˆÿ;‰‰ÿ<ŠŠÿ?ŒŒÿBÿDÿDÿDÿEÿG‘‘ÿI’’ÿK““ÿM””ÿP––ÿR——ÿS˜˜ÿS˜˜ý?‹‹Òoo`jj ssT7ŠŠãC’’ÿB‘‘ÿ?ÿ<ÿ:ŽŽÿ8ÿ5‹‹ÿ2‰‰ÿ/ˆˆÿ,††ÿ+……ÿ(ƒƒÿ%‚‚ÿ$ÿ"€€ÿÿ}}ÿ||ÿ{{ÿzzÿyyÿxxÿ~~ÿ&„„ÿ%„„ÿ$……ÿ$……ÿ#……ÿ"„„ÿ"„„ÿ!„„ÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ ƒƒÿ!ƒƒÿ ƒƒÿ!„„ÿ!„„ÿ ƒƒÿ ƒƒÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ"„„ÿ"„„ÿ#„„ÿ#„„ÿ#„„ÿ#……ÿ#……ÿ#……ÿ#……ÿ$††ÿ$††ÿ$††ÿ%††ÿ%††ÿ%††ÿ%……ÿ&……ÿ%……ÿ&……ÿ&……ÿ&……ÿ&……ÿ&††ÿ&††ÿ&††ÿ&††ÿ&††ÿ&‡‡ÿ&‡‡ÿ%‡‡ÿ%ˆˆÿ%‰‰ÿ%ŠŠÿ$‹‹ÿ$ŒŒÿ$ÿ#ŽŽÿ#ÿ"’’ÿ"””ÿ!––ÿ ™™ÿ››ÿžžÿ¡¡ÿ¥¥ÿ¨¨ÿ¬¬ÿ°°ÿ´´ÿ¸¸ÿ¼¼ÿÁÁÿÆÅÿÊÊÿÐÏÿÕÔÿÛÚÿßßÿâáþèçñööÔüüÊüüÌüüÍüüÎýüÌüüÉûûÆ óñÕáàõÛÚÿÖÕÿÎÍÿÇÆÿÀ¿ÿ¸¸ÿ!°°ÿ%ªªÿ'££ÿ*ÿ-˜˜ÿ0””ÿ1ÿ/ŠŠÿ/ˆˆÿ1‡‡ÿ4ˆˆÿ7ˆˆÿ9ˆˆÿ<‰‰ÿ<ŠŠÿ>‹‹ÿAÿCŽŽÿFÿDÿEÿG‘‘ÿI’’ÿJ’’ÿM””ÿO••ÿQ––ÿS——ÿT˜˜ÿN““î&||“hh'ÿÿUUrrG5ˆˆÚD’’þB‘‘ÿ@‘‘ÿ=ÿ;ŽŽÿ9ÿ6ŒŒÿ3ŠŠÿ0ˆˆÿ-‡‡ÿ+……ÿ)„„ÿ&‚‚ÿ$ÿ"ÿÿ}}ÿ||ÿ{{ÿzzÿzzÿyyÿÿ'„„ÿ%……ÿ$……ÿ$……ÿ$……ÿ#„„ÿ"„„ÿ!„„ÿ!„„ÿ!ƒƒÿ!ƒƒÿ!„„ÿ!„„ÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!„„ÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ"„„ÿ"„„ÿ"„„ÿ#„„ÿ#„„ÿ#……ÿ#„„ÿ#„„ÿ$……ÿ$††ÿ$††ÿ$††ÿ$††ÿ%††ÿ%††ÿ%††ÿ%††ÿ%††ÿ&……ÿ&††ÿ&††ÿ&††ÿ&††ÿ&††ÿ&††ÿ'††ÿ&††ÿ&††ÿ&††ÿ&††ÿ'‡‡ÿ'‡‡ÿ&‡‡ÿ&‡‡ÿ&ˆˆÿ&‰‰ÿ%‰‰ÿ%‹‹ÿ$ŒŒÿ$ÿ$ŽŽÿ#ÿ#’’ÿ"””ÿ"––ÿ!˜˜ÿ ššÿÿ  ÿ££ÿ¦¦ÿªªÿ­­ÿ²²ÿ¶¶ÿ»ºÿ¿¿ÿÃÃÿÉÈÿÎÍÿÔÒÿÚÙÿÞÝÿààþççñõõÓûûÈüüÊýüËýüÌüüÊüüÇûûÄ ññÓáàôÚÙÿÕÓÿÍÌÿÆÅÿ¾¾ÿ ··ÿ#°°ÿ'¨¨ÿ)¢¢ÿ,ÿ0˜˜ÿ2””ÿ1ÿ0‹‹ÿ3ŠŠÿ6ŠŠÿ8‰‰ÿ;ŠŠÿ>‹‹ÿ>‹‹ÿ@ŒŒÿCŽŽÿEÿGÿEÿFÿI’’ÿJ’’ÿL““ÿN••ÿQ––ÿS——ÿT˜˜ÿR——ü;‰‰ÅkkS__tt.4‡‡ÄC’’ýC’’ÿA‘‘ÿ>ÿ;ŽŽÿ9ÿ6ŒŒÿ4ŠŠÿ1‰‰ÿ/‡‡ÿ,††ÿ)„„ÿ'ƒƒÿ%‚‚ÿ"ÿ ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿzzÿ"‚‚ÿ(……ÿ&……ÿ%……ÿ%……ÿ%……ÿ$……ÿ#……ÿ"„„ÿ"„„ÿ"„„ÿ"„„ÿ!„„ÿ!„„ÿ!„„ÿ!„„ÿ!„„ÿ!ƒƒÿ!„„ÿ!„„ÿ!„„ÿ"„„ÿ"„„ÿ"„„ÿ#„„ÿ#„„ÿ#„„ÿ#„„ÿ$……ÿ$……ÿ%††ÿ%††ÿ%††ÿ$††ÿ%††ÿ%††ÿ%††ÿ%††ÿ%††ÿ&††ÿ&††ÿ&‡‡ÿ&††ÿ&††ÿ'††ÿ'††ÿ'††ÿ'††ÿ'††ÿ'††ÿ'††ÿ'††ÿ'††ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ&ˆˆÿ&ˆˆÿ&ˆˆÿ&‰‰ÿ%ŠŠÿ%‹‹ÿ%ŒŒÿ$ŽŽÿ$ÿ#‘‘ÿ#““ÿ"••ÿ#——ÿ#ššÿ"ÿ!  ÿ!££ÿ §§ÿ ««ÿ¯¯ÿ³³ÿ¸¸ÿ¼¼ÿ¿¿ÿÄÄÿÉÈÿÏÍÿÔÓÿÙØÿÞÝÿáàþèçðööÐûûÆüüÈüüÉýüÉüüÈüüÅýüÁ ñðÑßÞóÙ×ÿÓÒÿÌËÿÄÄÿ ½½ÿ"µµÿ%­­ÿ(§§ÿ,¢¢ÿ0ÿ4™™ÿ3““ÿ2ŽŽÿ4ŒŒÿ6ŒŒÿ9‹‹ÿ<‹‹ÿ?ŒŒÿ@ÿCŽŽÿEÿGÿGÿFÿH‘‘ÿJ’’ÿL““ÿN••ÿP••ÿR––ÿT˜˜ÿU˜˜ÿK‘‘é ww†bbxx&3ˆˆ½D’’ýD““ÿA‘‘ÿ?ÿ<ÿ:ÿ7ŒŒÿ5ŠŠÿ2‰‰ÿ/ˆˆÿ-††ÿ*……ÿ'ƒƒÿ%‚‚ÿ#ÿ ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿ{{ÿ%„„ÿ(††ÿ'††ÿ&††ÿ&……ÿ%……ÿ$……ÿ$……ÿ#„„ÿ"„„ÿ"„„ÿ"„„ÿ!ƒƒÿ!„„ÿ"„„ÿ"„„ÿ"„„ÿ!„„ÿ"„„ÿ"„„ÿ"„„ÿ"„„ÿ#„„ÿ#……ÿ#„„ÿ#„„ÿ#„„ÿ$……ÿ%††ÿ%††ÿ%††ÿ%††ÿ%††ÿ%††ÿ%††ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ'††ÿ'††ÿ'††ÿ'††ÿ'††ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'††ÿ'‡‡ÿ'‡‡ÿ'ˆˆÿ'ˆˆÿ&ˆˆÿ&‰‰ÿ'‰‰ÿ&ŠŠÿ&ŒŒÿ'ÿ)ÿ)’’ÿ+””ÿ+––ÿ,™™ÿ,››ÿ+ÿ+  ÿ*¢¢ÿ)¥¥ÿ(©©ÿ&¬¬ÿ$°°ÿ#´´ÿ!¸¸ÿ¼¼ÿÀÀÿÅÄÿÊÉÿÏÎÿÔÓÿÙØÿÞÝÿáàþèçïõõÏüüÄüüÆüüÈüüÈüüÆýýÂüü¾ ññÍÞÝòØ×ÿÒÑÿ ËÊÿ ÃÃÿ!»»ÿ$³³ÿ'­­ÿ+§§ÿ/¡¡ÿ4ÿ3——ÿ3‘‘ÿ5ÿ8ŽŽÿ;ÿ=ÿ@ÿBŽŽÿDÿGÿH‘‘ÿFÿHÿJ’’ÿK““ÿN••ÿO••ÿR––ÿT˜˜ÿT™™ÿT˜˜û:††¿kkGffww *ƒƒ­C‘‘úE““ÿB’’ÿ@‘‘ÿ=ÿ:ŽŽÿ8ŒŒÿ6‹‹ÿ3‰‰ÿ0ˆˆÿ.††ÿ+……ÿ(ƒƒÿ%‚‚ÿ#ÿ!€€ÿ~~ÿ}}ÿ||ÿ{{ÿzzÿ||ÿ'……ÿ)††ÿ(‡‡ÿ&††ÿ&††ÿ%††ÿ$……ÿ%……ÿ$……ÿ#„„ÿ"„„ÿ"„„ÿ!„„ÿ"„„ÿ#……ÿ#„„ÿ"„„ÿ"„„ÿ"„„ÿ#……ÿ#„„ÿ#„„ÿ#„„ÿ$……ÿ$……ÿ$……ÿ$……ÿ%††ÿ%††ÿ%††ÿ%††ÿ%††ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'††ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ(‡‡ÿ(‡‡ÿ'ˆˆÿ'ˆˆÿ'ˆˆÿ(ˆˆÿ)‰‰ÿ+‹‹ÿ.ÿ0ŽŽÿ1ÿ1‘‘ÿ2““ÿ2••ÿ2••ÿ1––ÿ1˜˜ÿ0™™ÿ/››ÿ/ÿ.ŸŸÿ,¢¢ÿ+¤¤ÿ)§§ÿ(««ÿ&®®ÿ$²²ÿ"¶¶ÿ ººÿ¾¾ÿÃÃÿÈÇÿÍÌÿÓÑÿØ×ÿÝÜÿàßþçæîöõÍüûÃüüÅüüÆüüÆüüÄýüÀüü¼ ññÌÞÞñ×Öÿ!ÑÐÿ!ÊÉÿ"ÂÂÿ$ººÿ'³³ÿ*­­ÿ/§§ÿ4¢¢ÿ5œœÿ3••ÿ5‘‘ÿ9ÿ<ÿ?ÿAÿCÿFÿH‘‘ÿH‘‘ÿGÿI’’ÿK““ÿM””ÿP••ÿQ––ÿT——ÿU˜˜ÿU˜˜ÿJ‘‘åvvgg pp!}} A‘‘÷F””ÿC““ÿ@‘‘ÿ>ÿ;ŽŽÿ9ÿ6‹‹ÿ4ŠŠÿ1‰‰ÿ/‡‡ÿ,††ÿ(„„ÿ&‚‚ÿ$€€ÿ"€€ÿ ÿ~~ÿ}}ÿ||ÿ{{ÿ}}ÿ(††ÿ*ˆˆÿ)ˆˆÿ'‡‡ÿ&††ÿ&……ÿ%††ÿ&††ÿ%††ÿ#„„ÿ"„„ÿ#„„ÿ#„„ÿ#……ÿ#……ÿ#„„ÿ"„„ÿ#……ÿ#……ÿ#……ÿ#……ÿ#……ÿ$……ÿ%††ÿ%……ÿ$……ÿ$††ÿ%††ÿ%††ÿ&††ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ(‡‡ÿ(‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ)‡‡ÿ)ˆˆÿ*‰‰ÿ-ŠŠÿ0ŒŒÿ2ŽŽÿ4ÿ5ÿ5‘‘ÿ5‘‘ÿ5’’ÿ4““ÿ4””ÿ3””ÿ3••ÿ3––ÿ2——ÿ1˜˜ÿ1ššÿ/œœÿ/žžÿ-  ÿ,££ÿ+¦¦ÿ)©©ÿ'¬¬ÿ%°°ÿ$´´ÿ!¸¸ÿ½½ÿÁÁÿÆÆÿËÊÿÑÐÿ×ÕÿÜÛÿßÞþæåîöõÌýýÀüüÂüüÃüüÄýýÁýý½üüº ññÊÝÝñ ÕÔÿ"ÐÏÿ#ÉÉÿ$ÁÁÿ&¹¹ÿ)²²ÿ.¬¬ÿ3§§ÿ3ŸŸÿ2˜˜ÿ6••ÿ9““ÿ>’’ÿ@‘‘ÿC‘‘ÿF’’ÿG’’ÿI‘‘ÿGÿI‘‘ÿK““ÿM””ÿO••ÿQ––ÿS——ÿT˜˜ÿV˜˜ÿR––÷1ƒƒ¯gg@ nn"~~›A÷G””ÿD““ÿA‘‘ÿ?ÿ<ÿ9ÿ7ŒŒÿ4ŠŠÿ2‰‰ÿ/‡‡ÿ-††ÿ*……ÿ'ƒƒÿ$ÿ#€€ÿ!ÿ~~ÿ}}ÿ||ÿ||ÿ}}ÿ)‡‡ÿ+‰‰ÿ)ˆˆÿ'‡‡ÿ'††ÿ'††ÿ'††ÿ&††ÿ%††ÿ$……ÿ$……ÿ#……ÿ#……ÿ#……ÿ#……ÿ#……ÿ#……ÿ$……ÿ$††ÿ#……ÿ#……ÿ#……ÿ%††ÿ%††ÿ%††ÿ%……ÿ%††ÿ%††ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ*ˆˆÿ,‰‰ÿ/‹‹ÿ2ŒŒÿ4ŽŽÿ6ÿ7ÿ7ÿ6ÿ5ÿ5ÿ5ÿ5‘‘ÿ5’’ÿ5’’ÿ5““ÿ4““ÿ3””ÿ4••ÿ3––ÿ3˜˜ÿ1™™ÿ1ššÿ0ÿ.ŸŸÿ-¡¡ÿ,¤¤ÿ*§§ÿ(ªªÿ'®®ÿ%²²ÿ#··ÿ »»ÿÀÀÿÄÄÿÊÉÿÐÏÿÕÕÿÛÚÿÞÝþæåîööÊýü¿üüÁüüÂýüÁýý¿ýý»ýý¶ ðïÈÛÚð!ÔÓÿ$ÐÏÿ%ÈÈÿ'ÀÀÿ)¹¸ÿ-±±ÿ1¬¬ÿ2¤¤ÿ3ÿ7ššÿ;——ÿ?••ÿA““ÿE””ÿG““ÿI““ÿH’’ÿH‘‘ÿJ’’ÿL““ÿO••ÿQ––ÿR——ÿT——ÿU˜˜ÿT˜˜ýBÓoogiiqq#~~AõH••ÿE””ÿB’’ÿ@ÿ<ÿ:ÿ8ŒŒÿ5‹‹ÿ3‰‰ÿ0ˆˆÿ.‡‡ÿ+……ÿ(„„ÿ%‚‚ÿ#€€ÿ!ÿ~~ÿ}}ÿ||ÿ{{ÿ~~ÿ+ˆˆÿ+‰‰ÿ*ˆˆÿ)ˆˆÿ(‡‡ÿ(‡‡ÿ'‡‡ÿ'††ÿ&††ÿ&††ÿ%……ÿ$……ÿ$……ÿ#„„ÿ$……ÿ$……ÿ$……ÿ$††ÿ$††ÿ$……ÿ$……ÿ$……ÿ%……ÿ%††ÿ%††ÿ&††ÿ&††ÿ&‡‡ÿ&‡‡ÿ'ˆˆÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'ˆˆÿ'ˆˆÿ'‡‡ÿ'‡‡ÿ'ˆˆÿ'ˆˆÿ'‡‡ÿ'‡‡ÿ(‡‡ÿ(ˆˆÿ)ˆˆÿ)‡‡ÿ)ˆˆÿ)ˆˆÿ)‡‡ÿ*ˆˆÿ+‰‰ÿ.ŠŠÿ2ŒŒÿ4ŽŽÿ6ŽŽÿ6ÿ6ÿ7ÿ7ÿ7ÿ7ÿ6ÿ6ÿ6ÿ6ÿ7‘‘ÿ6’’ÿ6’’ÿ6’’ÿ5““ÿ5””ÿ5••ÿ5––ÿ4——ÿ3˜˜ÿ2ššÿ1œœÿ0žžÿ.  ÿ-££ÿ+¦¦ÿ*©©ÿ(­­ÿ&±±ÿ$µµÿ!ººÿ¾¾ÿÃÃÿÉÈÿÏÎÿÕÓÿÚÙÿÝÜþååíööÉýü½ýý¾þý¿ýý¿ýý½ýý¹üü´ ïîÆÛÙï$ÔÓÿ'ÏÎÿ(ÈÇÿ*¿¿ÿ-··ÿ/°°ÿ1©©ÿ2¢¢ÿ7žžÿ<››ÿ?™™ÿB––ÿE––ÿH••ÿI””ÿI““ÿJ““ÿL““ÿN••ÿQ––ÿR——ÿT——ÿU˜˜ÿV™™ÿL““è$zzŒbb'ÿÿuu "||@ðH––ÿF””ÿC““ÿA‘‘ÿ=ÿ;ŽŽÿ9ÿ6‹‹ÿ3‰‰ÿ1ˆˆÿ.‡‡ÿ,……ÿ)„„ÿ'‚‚ÿ#ÿ!€€ÿ ÿ}}ÿ||ÿ{{ÿÿ,ˆˆÿ,‰‰ÿ*ˆˆÿ*ˆˆÿ)ˆˆÿ(‡‡ÿ'‡‡ÿ'‡‡ÿ'††ÿ&††ÿ&††ÿ%††ÿ%……ÿ$……ÿ%……ÿ$††ÿ%††ÿ%††ÿ%††ÿ%……ÿ%††ÿ%††ÿ%††ÿ%††ÿ&††ÿ'††ÿ'‡‡ÿ&‡‡ÿ'‡‡ÿ'ˆˆÿ'ˆˆÿ&‡‡ÿ'‡‡ÿ'ˆˆÿ'ˆˆÿ'ˆˆÿ'ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ*ˆˆÿ-ŠŠÿ0ŒŒÿ3ÿ5ŽŽÿ6ÿ6ÿ6ÿ7ÿ7ÿ7ÿ7ÿ8ÿ8ÿ8ÿ8ÿ8ÿ7ÿ7‘‘ÿ7‘‘ÿ7’’ÿ7’’ÿ6““ÿ6““ÿ6““ÿ6””ÿ6••ÿ5––ÿ5˜˜ÿ4™™ÿ3››ÿ1œœÿ0ŸŸÿ.¡¡ÿ,¤¤ÿ+§§ÿ)««ÿ'¯¯ÿ$´´ÿ"¸¸ÿ ½½ÿÂÂÿÈÇÿÎÍÿÔÒÿÙØÿÝÜþäãíöôÇüü»ýý¼ýý½ýý½ýý»ýý¶üü± ðíÃÚÙï%ÓÒþ)ÎÍÿ+ÆÆÿ-¾¾ÿ/¶¶ÿ0®®ÿ2§§ÿ7££ÿ<ŸŸÿ?œœÿB™™ÿF˜˜ÿI——ÿI••ÿJ””ÿK””ÿO••ÿP––ÿR——ÿT˜˜ÿU˜˜ÿW™™ÿT——ø5ƒƒ´ kkEqq wwk<çH––ÿG””ÿD““ÿB’’ÿ?ÿ<ÿ9ÿ7‹‹ÿ4ŠŠÿ2‰‰ÿ/‡‡ÿ,††ÿ*„„ÿ(ƒƒÿ%‚‚ÿ"€€ÿ ÿ}}ÿ||ÿ}}ÿÿ-‰‰ÿ,‰‰ÿ,‰‰ÿ+ˆˆÿ*ˆˆÿ)ˆˆÿ(‡‡ÿ)‡‡ÿ(‡‡ÿ'††ÿ&††ÿ&‡‡ÿ&††ÿ&††ÿ%††ÿ%††ÿ%††ÿ%††ÿ%††ÿ&††ÿ&††ÿ%††ÿ&‡‡ÿ&††ÿ'††ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'ˆˆÿ'ˆˆÿ'ˆˆÿ'ˆˆÿ'ˆˆÿ'ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ)ˆˆÿ)‰‰ÿ)ˆˆÿ)ˆˆÿ*‰‰ÿ.‹‹ÿ2ŒŒÿ4ŽŽÿ6ÿ7ÿ7ÿ7ÿ7ÿ8ÿ8ÿ8ÿ8ÿ8ÿ9ÿ9ÿ9ÿ9ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ8‘‘ÿ8‘‘ÿ8’’ÿ7’’ÿ7’’ÿ7’’ÿ7““ÿ7““ÿ7””ÿ6••ÿ6——ÿ5˜˜ÿ4™™ÿ2››ÿ1žžÿ/  ÿ-££ÿ,¦¦ÿ*ªªÿ(®®ÿ%²²ÿ#¶¶ÿ!»»ÿÁÁÿÆÆÿÌÌÿÓÒÿÙØÿÛÚþãâìôôÆüü¹ýýºýý»ýý»ýý¸ýý³üü¯ïïÁÚÚî'ÒÒþ+ÍÌÿ.ÆÅÿ/½½ÿ/´´ÿ1­­ÿ6§§ÿ;££ÿ?ŸŸÿCÿG››ÿI™™ÿI––ÿK••ÿM––ÿP——ÿR——ÿT˜˜ÿU™™ÿV™™ÿW˜˜þHÛppqffmmzz`=ŽŽåI––ÿH••ÿE““ÿB’’ÿ@‘‘ÿ=ÿ:ÿ8‹‹ÿ5ŠŠÿ3‰‰ÿ0ˆˆÿ-††ÿ+……ÿ)„„ÿ'ƒƒÿ#ÿ!ÿ~~ÿ}}ÿ||ÿ!ÿ.‰‰ÿ-‰‰ÿ,‰‰ÿ+‰‰ÿ+ˆˆÿ*ˆˆÿ)ˆˆÿ)ˆˆÿ(‡‡ÿ'††ÿ(‡‡ÿ(‡‡ÿ'‡‡ÿ&††ÿ&††ÿ&††ÿ%††ÿ&††ÿ&††ÿ'‡‡ÿ&‡‡ÿ&‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'ˆˆÿ'ˆˆÿ(ˆˆÿ(ˆˆÿ'ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ)ˆˆÿ)‰‰ÿ+‰‰ÿ.‹‹ÿ3ŽŽÿ6ÿ6ÿ6ÿ7ÿ7ÿ7ÿ8ÿ8ÿ8ÿ8ÿ8ÿ9ÿ9ÿ9ÿ9ÿ9ÿ:ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ8‘‘ÿ9‘‘ÿ9’’ÿ8’’ÿ8““ÿ8““ÿ7““ÿ7••ÿ7––ÿ6––ÿ4˜˜ÿ3ššÿ2œœÿ0ŸŸÿ/¡¡ÿ-¥¥ÿ+©©ÿ)¬¬ÿ'°°ÿ$µµÿ"ººÿ ¿¿ÿÅÅÿÌËÿ ÒÑÿ ×ÖÿÛÙþãáëôóÄýý¶ýý¸ýý¹ýý¸ýýµýý°üü¬ííÀ ÙØî*ÑÐþ/ÌÌÿ0ÄÄÿ/ººÿ1³³ÿ5­­ÿ9§§ÿ?¤¤ÿC  ÿGžžÿI››ÿI˜˜ÿK——ÿN˜˜ÿQ˜˜ÿT˜˜ÿU™™ÿV™™ÿWššÿO““í+}}šhh1UUttD3‰‰ÎH••þI––ÿF””ÿC’’ÿ@‘‘ÿ>ÿ;ŽŽÿ8ŒŒÿ6‹‹ÿ3ŠŠÿ1ˆˆÿ/‡‡ÿ,††ÿ*„„ÿ'ƒƒÿ$ÿ"€€ÿ ~~ÿ~~ÿ~~ÿ#‚‚ÿ/‰‰ÿ.‰‰ÿ,‰‰ÿ+‰‰ÿ,‰‰ÿ+‰‰ÿ*ˆˆÿ)ˆˆÿ)‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ'‡‡ÿ&††ÿ&††ÿ'††ÿ'‡‡ÿ&‡‡ÿ'‡‡ÿ'‡‡ÿ&††ÿ'††ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ)ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ)‰‰ÿ)‰‰ÿ+ŠŠÿ.‹‹ÿ2ÿ6ÿ6ÿ7ÿ7ÿ7ÿ8ÿ8ÿ8ÿ8ÿ8ÿ8ÿ9ÿ9‘‘ÿ:‘‘ÿ:ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ;‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ;‘‘ÿ;‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ9’’ÿ9’’ÿ9’’ÿ9““ÿ8””ÿ8––ÿ7——ÿ5˜˜ÿ4™™ÿ3››ÿ2žžÿ0¡¡ÿ.¤¤ÿ,§§ÿ*««ÿ'¯¯ÿ%´´ÿ"¹¹ÿ ¾¾ÿÄÄÿËÊÿ ÑÐÿ ×ÕÿÚÙþâáëõôÂýý´ýý¶ýý·ýý¶ýý³ýý®ûû© ìì½!ÙØì-ÐÐþ1ËÊÿ0ÂÂÿ1ººÿ4²²ÿ9­­ÿ>¨¨ÿC¤¤ÿG¡¡ÿGœœÿIššÿM™™ÿPššÿR™™ÿTššÿVššÿXššÿS——ö4„„³ iiKqq oo (¥E““ùI––ÿG••ÿD““ÿA‘‘ÿ?ÿ<ÿ:ÿ7ŒŒÿ4ŠŠÿ3‰‰ÿ/‡‡ÿ,††ÿ*„„ÿ(ƒƒÿ&‚‚ÿ#€€ÿ ÿÿ~~ÿ$ƒƒÿ0‹‹ÿ.ŠŠÿ-‰‰ÿ,‰‰ÿ,‰‰ÿ+‰‰ÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ)ˆˆÿ(‡‡ÿ(‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ)ˆˆÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ*‰‰ÿ,ŠŠÿ1ÿ5ÿ7ÿ7ÿ6ÿ7ÿ8ÿ8ÿ8ÿ9ÿ9ÿ9‘‘ÿ9ÿ9ÿ:ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ<‘‘ÿ<’’ÿ<‘‘ÿ<’’ÿ<‘‘ÿ;‘‘ÿ;’’ÿ:‘‘ÿ:‘‘ÿ;’’ÿ:’’ÿ:““ÿ9““ÿ9••ÿ9––ÿ8——ÿ7——ÿ6™™ÿ5››ÿ3žžÿ2¡¡ÿ/££ÿ-¦¦ÿ+ªªÿ(®®ÿ%³³ÿ"¸¸ÿ ¾¾ÿ ÃÃÿ ÊÉÿ!ÐÏÿ!ÖÕÿÙØþâáêôóÁüü³ýýµýýµýý´ýý±ýý«ýý¥íí¹#×Öë.ÏÎþ1ÈÈÿ2ÁÁÿ5¹¹ÿ9³³ÿ=­­ÿB¨¨ÿE££ÿFŸŸÿIÿNœœÿQ››ÿR››ÿU››ÿX››ÿW˜˜ü@‹‹Íoogffoo#~~‡E’’õJ––ÿH••ÿE””ÿC’’ÿ@ÿ=ÿ;ŽŽÿ9ÿ6‹‹ÿ3‰‰ÿ1ˆˆÿ-††ÿ+……ÿ)„„ÿ'ƒƒÿ$ÿ"ÿ~~ÿ~~ÿ%„„ÿ0ŒŒÿ.‹‹ÿ.ŠŠÿ-ŠŠÿ,‰‰ÿ+‰‰ÿ+ˆˆÿ+ˆˆÿ+ˆˆÿ*ˆˆÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ'‡‡ÿ'††ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ)‰‰ÿ*‰‰ÿ+ŠŠÿ0ŒŒÿ4ŽŽÿ5ÿ7ÿ7ÿ7ÿ7ÿ8ÿ8ÿ8ÿ8ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ:ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ<‘‘ÿ<’’ÿ<’’ÿ<’’ÿ<’’ÿ<’’ÿ<’’ÿ=’’ÿ=’’ÿ<’’ÿ<‘‘ÿ<’’ÿ<’’ÿ<““ÿ;““ÿ;““ÿ;””ÿ:””ÿ9••ÿ9––ÿ8——ÿ7™™ÿ6››ÿ5ÿ2  ÿ0¢¢ÿ.¥¥ÿ,©©ÿ)­­ÿ&²²ÿ#··ÿ!¼¼ÿ ÂÂÿ ÉÈÿ"ÐÎÿ"ÕÔÿÙØþàßëóñÁýý±ýý²ýý³ýý²ýý®ýý¨ûû¢ëê¸$ÖÕë.ÍÌþ3ÇÇÿ6ÀÀÿ9¹¹ÿ=³³ÿ?¬¬ÿA¦¦ÿF££ÿJ¡¡ÿNžžÿQÿTœœÿVœœÿWššþIàuu„cc$qq !~~qD’’ïK——ÿH••ÿF””ÿC““ÿA‘‘ÿ?ÿ<ŽŽÿ:ÿ7ŒŒÿ4ŠŠÿ1ˆˆÿ.‡‡ÿ,††ÿ+„„ÿ(ƒƒÿ%‚‚ÿ"€€ÿ €€ÿ€€ÿ%……ÿ1‹‹ÿ0‹‹ÿ/‹‹ÿ.ŠŠÿ-‰‰ÿ,‰‰ÿ,‰‰ÿ+‰‰ÿ+ˆˆÿ)ˆˆÿ(‡‡ÿ)‡‡ÿ)‡‡ÿ)ˆˆÿ(ˆˆÿ(‡‡ÿ(‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ-‹‹ÿ2ŽŽÿ5ÿ6ÿ7‘‘ÿ8‘‘ÿ7ÿ8‘‘ÿ8‘‘ÿ8ÿ8‘‘ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ9ÿ:‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ<‘‘ÿ<‘‘ÿ<’’ÿ=’’ÿ=““ÿ=““ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=““ÿ=““ÿ<““ÿ<““ÿ;““ÿ:““ÿ;””ÿ9––ÿ9——ÿ7˜˜ÿ6ššÿ5œœÿ3ŸŸÿ1¢¢ÿ/¥¥ÿ-©©ÿ*­­ÿ'±±ÿ$¶¶ÿ"¼¼ÿ ÂÂÿ!ÉÈÿ"ÏÎÿ#ÕÔÿ Ø×þßÞë ññÀüü¯ýý°ýý±ýý°þý«ýý¤ûûŸëé¶&ÕÔê2ÌÌþ8ÇÆÿ:ÀÀÿ=¹¹ÿ=°°ÿ@««ÿE§§ÿJ¤¤ÿN¡¡ÿQŸŸÿUžžÿXÿP––ð+}} ii:ÿÿUUvvX=ßK——ÿI••ÿG””ÿD““ÿB’’ÿ@‘‘ÿ>ÿ;ŽŽÿ9ÿ6‹‹ÿ3‰‰ÿ/ˆˆÿ-††ÿ+……ÿ)ƒƒÿ%‚‚ÿ#ÿ!ÿÿ$„„ÿ1‹‹ÿ1ŒŒÿ0‹‹ÿ.‹‹ÿ-ŠŠÿ-ŠŠÿ-‰‰ÿ,‰‰ÿ+‰‰ÿ+ˆˆÿ)ˆˆÿ)‡‡ÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(‡‡ÿ(ˆˆÿ)ˆˆÿ(‡‡ÿ(‡‡ÿ)ˆˆÿ)ˆˆÿ(ˆˆÿ(ˆˆÿ)‰‰ÿ*‰‰ÿ)‰‰ÿ)‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ,ŠŠÿ0ÿ4ÿ5ÿ6ÿ7ÿ8‘‘ÿ7‘‘ÿ8‘‘ÿ8‘‘ÿ8‘‘ÿ8ÿ9‘‘ÿ9’’ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ;’’ÿ;’’ÿ;’’ÿ<’’ÿ<’’ÿ<’’ÿ<’’ÿ<’’ÿ=’’ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=““ÿ<““ÿ;““ÿ;““ÿ;””ÿ:••ÿ9——ÿ8˜˜ÿ7™™ÿ5œœÿ3žžÿ1  ÿ/¤¤ÿ-¨¨ÿ*¬¬ÿ'°°ÿ$¶¶ÿ"»»ÿ!ÁÁÿ"ÈÇÿ#ÎÍÿ#ÔÓÿ ×ÖþÞÝë ñð¾ýü¬ýý®ýý¯ýý­ýý§ýý¡ýûœéé³(ÔÔé5ËËþ;ÇÇÿ<¾¾ÿ<¶¶ÿA°°ÿD««ÿI§§ÿM¥¥ÿQ¢¢ÿU  ÿRšš÷:ŠŠ¼rrUÿÿÿÿÿÿss@;ŒŒÑL——ÿJ––ÿG••ÿE““ÿC’’ÿA‘‘ÿ>ÿ<ÿ:ŽŽÿ7ŒŒÿ4ŠŠÿ1‰‰ÿ.‡‡ÿ,††ÿ*„„ÿ'‚‚ÿ$ÿ"ÿ€€ÿ#‚‚ÿ2ŒŒÿ2ÿ1ŒŒÿ/‹‹ÿ-ŠŠÿ-ŠŠÿ-‰‰ÿ-‰‰ÿ,‰‰ÿ,‰‰ÿ+‰‰ÿ*ˆˆÿ*ˆˆÿ)ˆˆÿ)‡‡ÿ)‡‡ÿ)‡‡ÿ)‡‡ÿ)‡‡ÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ*ŠŠÿ-‹‹ÿ2ŽŽÿ5ÿ5ÿ6ÿ7‘‘ÿ8‘‘ÿ8‘‘ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ:’’ÿ:’’ÿ:’’ÿ;’’ÿ;’’ÿ;’’ÿ<’’ÿ<’’ÿ<’’ÿ=’’ÿ=’’ÿ=’’ÿ=““ÿ=““ÿ=““ÿ=““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>’’ÿ=’’ÿ=’’ÿ<’’ÿ;““ÿ;””ÿ;””ÿ:••ÿ9––ÿ8——ÿ7™™ÿ6››ÿ4ÿ2ŸŸÿ0££ÿ-§§ÿ+««ÿ(°°ÿ%µµÿ#ººÿ"ÀÀÿ"ÆÆÿ#ÍÌÿ$ÓÒÿ!ÖÕþÞÝé ñð¼ýýªýý¬ýý¬ýý©ýý¥ýýŸûû˜êé¯,ÒÒç8ÊÊþ;ÄÄÿ=½½ÿ@¶¶ÿC±±ÿH««ÿL¨¨ÿP¥¥ÿP  û<‘‘Ëyyk„„ÌÌÿÿÿÿÿÿÿÿww/:ŒŒÄM––ÿL——ÿI••ÿG””ÿD’’ÿA‘‘ÿ?ÿ=ÿ;ŽŽÿ8ŒŒÿ6‹‹ÿ4‰‰ÿ0ˆˆÿ-††ÿ+……ÿ)ƒƒÿ%‚‚ÿ#ÿ €€ÿ#ƒƒÿ2ÿ3ŽŽÿ2ŒŒÿ0‹‹ÿ/‹‹ÿ.ŠŠÿ-ŠŠÿ-ŠŠÿ,ŠŠÿ,‰‰ÿ,‰‰ÿ+ˆˆÿ*ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ*ˆˆÿ*‰‰ÿ*‰‰ÿ)‰‰ÿ)‰‰ÿ*ŠŠÿ+ŠŠÿ*ŠŠÿ-‹‹ÿ3ŽŽÿ5ÿ5ÿ6ÿ7ÿ7‘‘ÿ7‘‘ÿ8‘‘ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ9’’ÿ:’’ÿ:’’ÿ;’’ÿ;’’ÿ;’’ÿ<’’ÿ<’’ÿ<’’ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ?““ÿ?““ÿ?””ÿ?””ÿ?””ÿ?””ÿ?““ÿ?““ÿ?““ÿ>““ÿ>’’ÿ>““ÿ=’’ÿ<““ÿ;““ÿ;””ÿ:””ÿ9••ÿ8——ÿ7™™ÿ6ššÿ4œœÿ2ŸŸÿ1¢¢ÿ.¦¦ÿ+ªªÿ(¯¯ÿ%³³ÿ$¹¹ÿ#¿¿ÿ#ÅÅÿ$ÌËÿ%ÑÑÿ"ÕÔþÝÛé ññ¹ýý¨ýý©þý¨ýý§ýý¢ýý›ýû•èè­,ÑÐæ9ÉÈþ>ÄÄÿA¾¾ÿC··ÿF±±ÿJ­­ÿM¨¨ý@œœÜ††””+åå ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrr-„„¢I””ùL——ÿJ––ÿH••ÿE““ÿB’’ÿ@‘‘ÿ>ÿ<ŽŽÿ9ÿ7‹‹ÿ5ŠŠÿ2‰‰ÿ.‡‡ÿ,……ÿ*„„ÿ'ƒƒÿ$‚‚ÿ!ÿ#„„ÿ2ÿ4ŽŽÿ3ÿ2ŒŒÿ0‹‹ÿ/‹‹ÿ.‹‹ÿ.ŠŠÿ.ŠŠÿ-‰‰ÿ-‰‰ÿ,‰‰ÿ+ˆˆÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ)ˆˆÿ)ˆˆÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ*‰‰ÿ*ˆˆÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ)‰‰ÿ*‰‰ÿ+ŠŠÿ+‹‹ÿ/ŒŒÿ3ŽŽÿ5ÿ6ÿ6ÿ7ÿ8‘‘ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ:’’ÿ:’’ÿ;’’ÿ<““ÿ<““ÿ<““ÿ<““ÿ<““ÿ=““ÿ=““ÿ=““ÿ=““ÿ=““ÿ>““ÿ>““ÿ>““ÿ>““ÿ?““ÿ>““ÿ?““ÿ?””ÿ?””ÿ?””ÿ?””ÿ?””ÿ?””ÿ?””ÿ?””ÿ?””ÿ@””ÿ@””ÿ@””ÿ@””ÿ?““ÿ?““ÿ?““ÿ?““ÿ>““ÿ<““ÿ<““ÿ<””ÿ;””ÿ:••ÿ9——ÿ8˜˜ÿ6ššÿ5œœÿ3ŸŸÿ1¢¢ÿ/¥¥ÿ,©©ÿ)®®ÿ&²²ÿ$··ÿ#½½ÿ$ÄÃÿ%ËÊÿ&ÑÐÿ#ÔÓþÛÚè ñï¸ýû¥ýý¥ýý¦ýý¤þýŸýý™ûû’èè¨.ÐÏå;ÉÉýAÄÄÿC½½ÿF··ÿG°°þ?§§å••–?ååÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÿÿÿÿÿÿÿÿmm||{D‘‘îM——ÿJ––ÿI••ÿF””ÿD““ÿA‘‘ÿ?ÿ<ÿ:ÿ8‹‹ÿ6‹‹ÿ4‰‰ÿ0ˆˆÿ.††ÿ+……ÿ(„„ÿ&‚‚ÿ"‚‚ÿ$ƒƒÿ2ÿ5ÿ4ŽŽÿ3ÿ2ŒŒÿ1ŒŒÿ/‹‹ÿ/ŠŠÿ/ŠŠÿ.ŠŠÿ-ŠŠÿ-‰‰ÿ+‰‰ÿ+‰‰ÿ+‰‰ÿ+‰‰ÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ+ˆˆÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ+ŠŠÿ,ŠŠÿ0ÿ4ÿ5ÿ6ÿ6ÿ7ÿ8ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ:’’ÿ;’’ÿ;’’ÿ<““ÿ<““ÿ<““ÿ<““ÿ=““ÿ=““ÿ=””ÿ=““ÿ=““ÿ>””ÿ>””ÿ>““ÿ>““ÿ?““ÿ>““ÿ?““ÿ?““ÿ?““ÿ?””ÿ@””ÿ@””ÿ@””ÿ?””ÿ?””ÿ@””ÿ@””ÿ@””ÿA””ÿA””ÿA””ÿA””ÿ@””ÿ?““ÿ?““ÿ?““ÿ?““ÿ>““ÿ>““ÿ<““ÿ<””ÿ<””ÿ:••ÿ9––ÿ8˜˜ÿ7ššÿ5œœÿ3ŸŸÿ1¢¢ÿ/¥¥ÿ,©©ÿ)­­ÿ&±±ÿ$¶¶ÿ#¼¼ÿ$ÄÃÿ%ÊÉÿ&ÐÏÿ#ÒÑþÛÚç ðî¶ýý¢ýý£ýý£ýý¡ýýœýý”ûûŽéç¥/ÐÏã>ÉÉýCÄÄÿF½½ÿ=²²í¥¥ª¬¬Wéé$ÿÿÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿUU3™™ÆÆÆ þþþ ÿÿÿmmww^>ãN˜˜ÿL––ÿI••ÿH••ÿF””ÿB’’ÿ@ÿ>ÿ;ŽŽÿ8ŒŒÿ6‹‹ÿ5ŠŠÿ2‰‰ÿ/‡‡ÿ,††ÿ*……ÿ'……ÿ$ƒƒÿ$ƒƒÿ3ÿ6ÿ5ŽŽÿ4ŽŽÿ3ÿ2ÿ0‹‹ÿ/‹‹ÿ/‹‹ÿ/ŠŠÿ.ŠŠÿ-ŠŠÿ-‰‰ÿ-‰‰ÿ,‰‰ÿ,‰‰ÿ+‰‰ÿ+ˆˆÿ+ˆˆÿ+ˆˆÿ+‰‰ÿ+‰‰ÿ+‰‰ÿ+‰‰ÿ+‰‰ÿ+‰‰ÿ+ŠŠÿ+ŠŠÿ,ŠŠÿ1ÿ5ÿ6ÿ6ÿ6ÿ6ÿ7‘‘ÿ8‘‘ÿ9‘‘ÿ9’’ÿ9’’ÿ9‘‘ÿ9’’ÿ:’’ÿ;’’ÿ;’’ÿ;’’ÿ<““ÿ<““ÿ<““ÿ<““ÿ=““ÿ=““ÿ=””ÿ=””ÿ>””ÿ>””ÿ>””ÿ>””ÿ>””ÿ>““ÿ>““ÿ?““ÿ?””ÿ@””ÿ@””ÿ@””ÿ@””ÿ@””ÿ@””ÿ@””ÿ@””ÿ@””ÿA””ÿA””ÿA””ÿA””ÿA””ÿA””ÿ@””ÿ@““ÿ@““ÿ@““ÿ@““ÿ?““ÿ>““ÿ>””ÿ=””ÿ<””ÿ;••ÿ:——ÿ9˜˜ÿ7™™ÿ5››ÿ4žžÿ2¡¡ÿ/¤¤ÿ,¨¨ÿ)¬¬ÿ&°°ÿ%¶¶ÿ$¼¼ÿ$ÂÂÿ&ÉÈÿ'ÏÎÿ$ÒÑþÚØç ïîµýû ýý ýý ýýýý˜ýý’ûû‹èè¢1ÐÐá@ÇÇý?ÀÀñ!µµ¸ººoèè9ÿÿ(þþþþÿÿþþ þþÿÿÿÿÿÿÿÿÿÿUUH‘‘Ôéé þþþ ÿÿÿUUuuC=ŒŒÑN——ÿM——ÿJ––ÿI••ÿG””ÿD““ÿA‘‘ÿ?ÿ<ÿ9ÿ7‹‹ÿ5ŠŠÿ3‰‰ÿ0ˆˆÿ-††ÿ+††ÿ)††ÿ&ƒƒÿ$„„ÿ2ŒŒÿ6ÿ5ŽŽÿ4ŽŽÿ3ÿ3ÿ1ŒŒÿ0‹‹ÿ0‹‹ÿ/‹‹ÿ/ŠŠÿ/ŠŠÿ.ŠŠÿ-‰‰ÿ,‰‰ÿ-‰‰ÿ+‰‰ÿ+ˆˆÿ+ˆˆÿ+‰‰ÿ+‰‰ÿ+‰‰ÿ+‰‰ÿ,‰‰ÿ-‰‰ÿ-ŠŠÿ,ŠŠÿ,ŠŠÿ1ÿ5ÿ6ÿ7ÿ7ÿ7ÿ7‘‘ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ:’’ÿ:’’ÿ:‘‘ÿ:’’ÿ:’’ÿ;’’ÿ;’’ÿ<““ÿ<““ÿ<““ÿ<““ÿ=““ÿ=““ÿ>””ÿ>””ÿ>””ÿ>””ÿ?””ÿ?””ÿ?””ÿ?””ÿ?””ÿ?””ÿ@””ÿA••ÿA••ÿB••ÿA••ÿA••ÿA””ÿA””ÿA””ÿA””ÿA””ÿA””ÿA””ÿA””ÿA••ÿA••ÿA••ÿA••ÿA””ÿA””ÿA””ÿA””ÿ@““ÿ@““ÿ?““ÿ>””ÿ=””ÿ=••ÿ<––ÿ;––ÿ9˜˜ÿ7™™ÿ6ššÿ4ÿ2  ÿ/££ÿ-§§ÿ*««ÿ'°°ÿ%µµÿ$ººÿ%ÁÁÿ&ÈÇÿ'ÎÍÿ%ÑÐþØØç ïí³ýýýýýýýýšýý–ýýýýˆèèž0ÏÏØ#ÇÇÂËËììQÿÿ<ÿÿ0þþ&þþþþÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿ??U åòòþþþÿÿÿ oo'0ƒƒ®L––úN˜˜ÿL––ÿI••ÿH••ÿF““ÿB’’ÿ@ÿ=ÿ;ŽŽÿ8ŒŒÿ6ŠŠÿ4ŠŠÿ2‰‰ÿ/‡‡ÿ-††ÿ*……ÿ(……ÿ%„„ÿ2ŒŒÿ7ÿ6ÿ5ÿ4ŽŽÿ4ŽŽÿ3ÿ1ŒŒÿ1‹‹ÿ0‹‹ÿ/‹‹ÿ/ŠŠÿ/ŠŠÿ.ŠŠÿ-‰‰ÿ-ŠŠÿ,‰‰ÿ,‰‰ÿ+‰‰ÿ,‰‰ÿ,‰‰ÿ,‰‰ÿ,‰‰ÿ-‰‰ÿ-ŠŠÿ-ŠŠÿ-‹‹ÿ1ÿ5ÿ6ÿ6ÿ7ÿ8‘‘ÿ8‘‘ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ9‘‘ÿ:’’ÿ:’’ÿ;’’ÿ;’’ÿ;’’ÿ;’’ÿ<““ÿ<““ÿ=““ÿ=““ÿ=””ÿ>””ÿ>””ÿ>””ÿ>””ÿ?””ÿ?””ÿ?••ÿ@••ÿ@••ÿ@••ÿA••ÿA••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿA••ÿA••ÿA••ÿA••ÿA””ÿA””ÿA••ÿA••ÿA••ÿB••ÿB••ÿB••ÿB••ÿB••ÿA””ÿA””ÿ@””ÿ@““ÿ@““ÿ?““ÿ?““ÿ=””ÿ=••ÿ<––ÿ;——ÿ:˜˜ÿ8˜˜ÿ6››ÿ4ÿ2ŸŸÿ0¢¢ÿ-¦¦ÿ*ªªÿ'¯¯ÿ%³³ÿ%¹¹ÿ%ÀÀÿ'ÇÆÿ(ÍÌÿ&ÐÏþØ×ç íí±ýû›ýýœýý›ýý˜ýý“ýýŒûû… ëë‘ÞÞŽòòiþþSþþFþþ:ÿÿ0þþ%þþþþÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿHHTÙââþþþÿÿÿff zzwE’’èO˜˜ÿM——ÿJ––ÿH••ÿG””ÿD’’ÿA‘‘ÿ>ÿ<ŽŽÿ9ÿ7‹‹ÿ5ŠŠÿ3‰‰ÿ0‡‡ÿ-††ÿ,††ÿ)……ÿ%„„ÿ1‹‹ÿ9ÿ8ÿ7ÿ5ŽŽÿ4ŽŽÿ4ŽŽÿ2ÿ1ŒŒÿ1ŒŒÿ1‹‹ÿ/‹‹ÿ/‹‹ÿ/‹‹ÿ.ŠŠÿ-ŠŠÿ-ŠŠÿ-ŠŠÿ,‰‰ÿ,‰‰ÿ,‰‰ÿ-‰‰ÿ-‰‰ÿ-‰‰ÿ-ŠŠÿ-‹‹ÿ1ŒŒÿ5ÿ6ÿ6ÿ7ÿ8‘‘ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ9’’ÿ9‘‘ÿ:’’ÿ;’’ÿ;’’ÿ;’’ÿ<““ÿ<’’ÿ<““ÿ<““ÿ=““ÿ=““ÿ=””ÿ>””ÿ>””ÿ>””ÿ?””ÿ?••ÿ?••ÿ@••ÿ@••ÿA––ÿA––ÿA••ÿB––ÿB––ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿB••ÿA””ÿA””ÿ@““ÿ@““ÿ@““ÿ?““ÿ>““ÿ>””ÿ=••ÿ=••ÿ;––ÿ:——ÿ8™™ÿ6ššÿ5œœÿ3žžÿ0¢¢ÿ-¥¥ÿ*©©ÿ'®®ÿ&³³ÿ%¸¸ÿ%¿¾ÿ'ÆÅÿ)ÌÌÿ&ÐÏý×Õæ îí¯ûû™ýý™ýý˜ýý–ýýýýˆýýúúyþþkþþ]ÿÿPÿÿDþþ9þþ.þþ$þþþþÿÿþþ þþÿÿÿÿÿÿÿÿÿÿff H……ßçç þþþÿÿÿ qq85ˆˆÀO˜˜ýO˜˜ÿL––ÿI••ÿH””ÿF““ÿB‘‘ÿ@ÿ=ÿ;ÿ8ŒŒÿ6ŠŠÿ4‰‰ÿ1ˆˆÿ.††ÿ-††ÿ+††ÿ'……ÿ0ŠŠÿ;ÿ9ÿ8ÿ6ÿ6ÿ5ŽŽÿ4ŽŽÿ2ÿ2ŒŒÿ1ŒŒÿ0ŒŒÿ0‹‹ÿ0‹‹ÿ/‹‹ÿ.ŠŠÿ-ŠŠÿ-ŠŠÿ-ŠŠÿ-ŠŠÿ-ŠŠÿ-‰‰ÿ-‰‰ÿ-ŠŠÿ-ŠŠÿ0ŒŒÿ5ÿ6ÿ6ÿ6ÿ7ÿ8‘‘ÿ8‘‘ÿ8‘‘ÿ9’’ÿ:’’ÿ:’’ÿ:’’ÿ;’’ÿ;’’ÿ<““ÿ<““ÿ<““ÿ<““ÿ<““ÿ<““ÿ=““ÿ>””ÿ>””ÿ>””ÿ?””ÿ@••ÿ@••ÿ@••ÿA––ÿA––ÿA––ÿB––ÿA––ÿB––ÿB––ÿB••ÿB••ÿB••ÿC––ÿC––ÿB••ÿB••ÿC––ÿC––ÿC––ÿC––ÿC––ÿC––ÿC––ÿC••ÿC••ÿC••ÿC••ÿC••ÿB••ÿB••ÿA••ÿA””ÿ@““ÿ@““ÿ@““ÿ?’’ÿ?““ÿ?““ÿ>””ÿ>””ÿ=••ÿ<––ÿ9——ÿ8˜˜ÿ7ššÿ5œœÿ2žžÿ0¡¡ÿ-¥¥ÿ+©©ÿ(­­ÿ&±±ÿ$··ÿ&½½ÿ(ÅÅÿ)ËËÿ&ÏÏý×Õæ íí­ýý–ýý–ýý–ýý“ýýýý†üü~þþtþþhþþ[þþNþþCþþ7þþ,þþ#þþþþÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿ\\ E‹‹åîîþþþÿÿÿ kk0„„šN——øP™™ÿM——ÿJ––ÿI••ÿF””ÿD’’ÿAÿ?ÿ<ŽŽÿ9ÿ7‹‹ÿ5ŠŠÿ3‰‰ÿ0ˆˆÿ.‡‡ÿ,‡‡ÿ)‡‡ÿ.‰‰ÿ;ÿ:ÿ9ÿ8ÿ7ÿ6ÿ5ŽŽÿ4ŽŽÿ3ÿ2ÿ1ŒŒÿ1ŒŒÿ0‹‹ÿ0‹‹ÿ/‹‹ÿ.ŠŠÿ-ŠŠÿ.ŠŠÿ.ŠŠÿ-ŠŠÿ-ŠŠÿ-ŠŠÿ-ŠŠÿ/‹‹ÿ5ÿ6ÿ6ÿ6ÿ7ÿ8‘‘ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ:’’ÿ:’’ÿ:’’ÿ;’’ÿ;’’ÿ;““ÿ<““ÿ<““ÿ<““ÿ<““ÿ<““ÿ<““ÿ=””ÿ>””ÿ?””ÿ?••ÿ@••ÿ@••ÿ@––ÿA––ÿB––ÿB––ÿB––ÿC––ÿB––ÿB––ÿB––ÿC––ÿC––ÿC––ÿC––ÿC––ÿB••ÿC––ÿD––ÿD––ÿD––ÿD––ÿD––ÿD––ÿC––ÿC••ÿC––ÿC––ÿC••ÿD––ÿC––ÿC––ÿC––ÿB••ÿA””ÿA””ÿ@““ÿ?““ÿ?’’ÿ?““ÿ?““ÿ?““ÿ>””ÿ=••ÿ;••ÿ:––ÿ8˜˜ÿ7™™ÿ5››ÿ3ÿ0¡¡ÿ.¤¤ÿ+§§ÿ(««ÿ&°°ÿ%¶¶ÿ'½½ÿ(ÄÄÿ*ÊÊÿ(ÎÎýÔÔå ëë«ýý“ýý”ýý“ýýýý‹ýýƒþþ{þþqÿÿfþþZþþOþþBþþ6þþ+þþ#þþÿÿÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿ\\ Láëëÿÿÿÿÿÿjj &~~qG““êQ™™ÿN˜˜ÿK––ÿI••ÿH””ÿF““ÿB‘‘ÿ@ÿ=ÿ;ÿ8ŒŒÿ6‹‹ÿ4ŠŠÿ2‰‰ÿ/‡‡ÿ-‡‡ÿ+‡‡ÿ+‡‡ÿ9ÿ;ÿ:ÿ9ÿ8ÿ7ÿ6ÿ5ŽŽÿ4ŽŽÿ3ÿ2ÿ1ŒŒÿ1ŒŒÿ0‹‹ÿ0‹‹ÿ/ŠŠÿ.ŠŠÿ/ŠŠÿ.ŠŠÿ.ŠŠÿ.ŠŠÿ.ŠŠÿ/‹‹ÿ4ÿ7ÿ6ÿ6ÿ7ÿ7ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ:‘‘ÿ:’’ÿ:’’ÿ;’’ÿ;’’ÿ;’’ÿ<““ÿ<““ÿ<““ÿ=““ÿ=““ÿ=””ÿ>””ÿ?••ÿ?••ÿ@••ÿ@––ÿA••ÿ@––ÿA––ÿB––ÿB——ÿB——ÿB——ÿC––ÿC––ÿC——ÿC——ÿD––ÿD––ÿD––ÿD––ÿD––ÿD––ÿD——ÿD––ÿD––ÿE——ÿE——ÿD––ÿE––ÿD––ÿC––ÿD––ÿD––ÿD––ÿD––ÿD––ÿD––ÿD––ÿD––ÿC••ÿB••ÿA””ÿ@““ÿ?““ÿ?““ÿ?““ÿ?““ÿ>””ÿ=””ÿ<””ÿ;••ÿ9––ÿ8——ÿ7™™ÿ5››ÿ3ÿ0ŸŸÿ.££ÿ+¦¦ÿ)««ÿ'°°ÿ%µµÿ'¼¼ÿ)ÃÃÿ+ÉÉÿ)ÍÌý ÔÓä ìì¨ûû‘ýý’ýýýýýý‰þþ‚üüzþþpþþdþþZþþNþþAþþ5þþ,þþ#þþþþÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTT Oåååÿÿÿ ÿÿÿvvG>ŒŒÑQ™™þP˜˜ÿM——ÿJ••ÿI••ÿG””ÿE’’ÿA‘‘ÿ?ÿ<ŽŽÿ:ÿ8ŒŒÿ5ŠŠÿ3‰‰ÿ0‡‡ÿ.ˆˆÿ,‡‡ÿ*‡‡ÿ7ŽŽÿ=‘‘ÿ;ÿ:ÿ9ÿ8ÿ7ÿ7ÿ5ŽŽÿ4ŽŽÿ3ÿ2ÿ2ŒŒÿ1ŒŒÿ0‹‹ÿ/‹‹ÿ/‹‹ÿ0‹‹ÿ/‹‹ÿ/ŠŠÿ/ŠŠÿ/‹‹ÿ3ÿ6ÿ7ÿ7ÿ7ÿ8ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ:‘‘ÿ:‘‘ÿ:’’ÿ:’’ÿ;’’ÿ;’’ÿ;’’ÿ;’’ÿ<““ÿ=””ÿ>””ÿ>””ÿ>••ÿ?••ÿ@••ÿ?••ÿ@••ÿ@––ÿ@••ÿ@––ÿB––ÿB——ÿB——ÿB——ÿC——ÿC––ÿC––ÿD——ÿD——ÿD——ÿD——ÿD——ÿD——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE––ÿD––ÿD––ÿE––ÿD––ÿD––ÿD––ÿD––ÿD––ÿD––ÿD––ÿC––ÿB••ÿB””ÿA””ÿ@““ÿ?’’ÿ?’’ÿ?““ÿ>““ÿ=””ÿ=””ÿ:””ÿ9••ÿ8——ÿ6˜˜ÿ4ššÿ3œœÿ1ŸŸÿ.¢¢ÿ+¦¦ÿ(ªªÿ&¯¯ÿ&µµÿ'»»ÿ)ÂÂÿ+ÉÉÿ)ÌÌýÓÓã ëë§ûûýýýýŽýýŒýý‡ýý€þþwþþmþþcþþXþþLÿÿ@þþ6þþ,þþ#þþþþÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ__N‰‰ þþþÿÿÿÿÿÿjj$.„„¦M——ùR™™ÿO˜˜ÿL——ÿJ••ÿH””ÿF““ÿD’’ÿAÿ=ŽŽÿ<ŽŽÿ9ŒŒÿ6‹‹ÿ4‰‰ÿ1ˆˆÿ/‰‰ÿ-ˆˆÿ+‡‡ÿ5ÿ>’’ÿ<‘‘ÿ;ÿ:ÿ9ÿ8ÿ8ÿ7ÿ5ŽŽÿ4ÿ4ŽŽÿ2ÿ2ŒŒÿ1ŒŒÿ0ŒŒÿ1‹‹ÿ1‹‹ÿ0‹‹ÿ/ŠŠÿ/‹‹ÿ2ŒŒÿ7ÿ7ÿ8ÿ8ÿ8ÿ8‘‘ÿ9‘‘ÿ9‘‘ÿ:‘‘ÿ:’’ÿ:’’ÿ:’’ÿ;’’ÿ<’’ÿ<’’ÿ<’’ÿ<““ÿ=““ÿ?••ÿ?••ÿ?••ÿ?••ÿ@••ÿ@••ÿ@••ÿ@••ÿ@––ÿA––ÿA––ÿB––ÿB——ÿB——ÿC——ÿC——ÿC——ÿC——ÿD——ÿD˜˜ÿD˜˜ÿD˜˜ÿE˜˜ÿE˜˜ÿE——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE——ÿF——ÿE——ÿE——ÿD––ÿE––ÿE––ÿE––ÿE––ÿE––ÿE––ÿD––ÿD––ÿD––ÿD––ÿC––ÿC––ÿB••ÿA””ÿ@““ÿ@““ÿ@““ÿ?““ÿ?““ÿ>””ÿ<””ÿ:””ÿ9••ÿ8––ÿ6——ÿ4™™ÿ3œœÿ1ŸŸÿ.¢¢ÿ+¥¥ÿ(©©ÿ'®®ÿ&´´ÿ(ººÿ*ÁÁÿ+ÇÇÿ)ËËý ÒÑâ êé¥ýýŒýýýýýýŠýý…üü~þþvþþmþþbþþVþþJÿÿ@þþ5þþ+þþ#þþþþÿÿÿÿ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿUU_ŸŸÿÿÿÿÿÿÿÿÿuu {{xH““íSššÿQ™™ÿN——ÿK––ÿJ••ÿH””ÿE““ÿC‘‘ÿ>ÿ<ŽŽÿ;ÿ8ŒŒÿ5ŠŠÿ2‰‰ÿ1‰‰ÿ/‰‰ÿ,‡‡ÿ3ŒŒÿ?’’ÿ>’’ÿ<‘‘ÿ;ÿ:ÿ9ÿ9ÿ7ÿ6ŽŽÿ5ŽŽÿ5ŽŽÿ3ŽŽÿ3ÿ2ÿ1ŒŒÿ1ŒŒÿ1ŒŒÿ1‹‹ÿ0‹‹ÿ0‹‹ÿ5ŽŽÿ8ÿ8ÿ8ÿ8ÿ8ÿ9‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ;’’ÿ;’’ÿ;’’ÿ<““ÿ<’’ÿ=““ÿ>””ÿ>””ÿ?••ÿ?••ÿ?••ÿ@••ÿ@••ÿ@••ÿA••ÿA––ÿA––ÿA––ÿB——ÿB——ÿB——ÿB——ÿC——ÿC——ÿD——ÿD——ÿE——ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE——ÿE——ÿE——ÿF——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE––ÿE––ÿE––ÿE––ÿE––ÿE––ÿE––ÿD––ÿD––ÿC––ÿC••ÿB••ÿA””ÿA““ÿA““ÿ@““ÿ?““ÿ?““ÿ>““ÿ<””ÿ:””ÿ9••ÿ8––ÿ6——ÿ5™™ÿ4››ÿ1žžÿ.¡¡ÿ+¤¤ÿ)¨¨ÿ'­­ÿ&³³ÿ(¸¸ÿ*ÀÀÿ-ÆÆÿ*ÊÊý!ÑÐáëê¡ýýŠýý‹ýý‹ýýˆýýƒþþ}þþuþþlþþaþþVþþKÿÿ@þþ6þþ,þþ#þþþþÿÿÿÿ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿf™™ÌÌÌÿÿÿuuJ=ŒŒÒS™™þR™™ÿP˜˜ÿM——ÿJ••ÿI””ÿF““ÿD‘‘ÿBÿ=ŽŽÿ;ÿ:ÿ7‹‹ÿ4‹‹ÿ2ŠŠÿ0‰‰ÿ-ˆˆÿ1ŠŠÿ@’’ÿ?’’ÿ>’’ÿ<ÿ;ÿ:ÿ9ÿ8ÿ7ÿ6ŽŽÿ5ŽŽÿ4ŽŽÿ4ŽŽÿ3ÿ2ÿ2ŒŒÿ1ŒŒÿ1ŒŒÿ1ŒŒÿ4ÿ8ÿ8ÿ8ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ9‘‘ÿ:‘‘ÿ:‘‘ÿ;’’ÿ;’’ÿ;’’ÿ;’’ÿ<““ÿ=““ÿ=““ÿ>””ÿ?””ÿ?””ÿ?””ÿ?••ÿ@••ÿ@••ÿA––ÿA––ÿB––ÿB––ÿB––ÿB——ÿC——ÿC——ÿC——ÿC——ÿD——ÿD˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF˜˜ÿF˜˜ÿF˜˜ÿF——ÿF——ÿE——ÿF——ÿE——ÿF——ÿF——ÿF——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE––ÿE––ÿD––ÿD––ÿD––ÿC••ÿC••ÿB••ÿA””ÿA””ÿA““ÿ@““ÿ?““ÿ?““ÿ=””ÿ<““ÿ;””ÿ:••ÿ8••ÿ7——ÿ6˜˜ÿ4ššÿ1ÿ/  ÿ+££ÿ)§§ÿ'¬«ÿ'°°ÿ(··ÿ,¿¿ÿ-ÅÅÿ+ÈÈý!ÏÏàêê ýýˆýý‰ýýˆýý†ýýƒüü}þþuþþjÿÿ`þþVþþLÿÿ@þþ6þþ,þþ$þþþþþþþþ ÿÿ þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUªªÿÿÿjj$.„„¦O––ùSššÿR™™ÿO˜˜ÿL––ÿJ••ÿG““ÿE’’ÿC’’ÿAÿ=ŽŽÿ;ÿ9ŒŒÿ6‹‹ÿ3ŠŠÿ1‰‰ÿ.‰‰ÿ/ŠŠÿ?’’ÿB““ÿ@““ÿ=‘‘ÿ<‘‘ÿ;ÿ:ÿ9ÿ9ÿ8ÿ6ŽŽÿ5ŽŽÿ5ŽŽÿ4ŽŽÿ3ÿ3ÿ2ÿ1ŒŒÿ3ŒŒÿ8ÿ9ÿ9ÿ9ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ:’’ÿ;’’ÿ;’’ÿ;’’ÿ<’’ÿ<’’ÿ<““ÿ=““ÿ=””ÿ>””ÿ>””ÿ>””ÿ?””ÿ@••ÿ@••ÿ@••ÿA––ÿA––ÿB––ÿB––ÿB––ÿB––ÿC——ÿD——ÿD——ÿD——ÿD˜˜ÿD˜˜ÿD˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF˜˜ÿF™™ÿF™™ÿF™™ÿF˜˜ÿF™™ÿG™™ÿG˜˜ÿG˜˜ÿG˜˜ÿG˜˜ÿF˜˜ÿF——ÿF——ÿG˜˜ÿG˜˜ÿG˜˜ÿF˜˜ÿG——ÿG——ÿF——ÿF——ÿF——ÿE——ÿE––ÿE––ÿD––ÿE––ÿD––ÿC••ÿC••ÿB””ÿA””ÿA““ÿA““ÿ?’’ÿ?““ÿ?““ÿ=““ÿ<““ÿ;””ÿ:””ÿ8••ÿ7––ÿ5˜˜ÿ3ššÿ1œœÿ.ŸŸÿ+¢¢ÿ)¦¦ÿ(ªªÿ&¯¯ÿ)·¶ÿ,¾¾ÿ-ÄÄÿ+ÇÇý!ÐÐßëëžýý†ýý†ýý†ýý…ýý‚þþ|þþsþþjÿÿ`þþWþþKÿÿ@þþ6þþ-þþ%ÿÿÿÿþþþþÿÿ þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿmm||uH’’éTššÿS™™ÿP˜˜ÿN——ÿL––ÿJ••ÿF““ÿD’’ÿC‘‘ÿ@ÿ=ŽŽÿ;ŒŒÿ8‹‹ÿ5‹‹ÿ2ŠŠÿ0‰‰ÿ.‰‰ÿ<‘‘ÿD••ÿB””ÿ?’’ÿ>’’ÿ<ÿ;ÿ;ÿ:ÿ9ÿ8ÿ6ŽŽÿ6ŽŽÿ6ŽŽÿ5ŽŽÿ4ŽŽÿ3ÿ2ŒŒÿ5ŽŽÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ;’’ÿ;’’ÿ;’’ÿ;’’ÿ<’’ÿ<““ÿ=““ÿ=””ÿ>””ÿ>””ÿ?””ÿ?””ÿ?””ÿ@••ÿ@••ÿ@••ÿA––ÿA––ÿA––ÿB––ÿB––ÿC——ÿC——ÿD——ÿD——ÿD——ÿD——ÿD˜˜ÿD˜˜ÿE˜˜ÿE˜˜ÿF˜˜ÿF™™ÿG™™ÿG™™ÿF™™ÿF™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG˜˜ÿG˜˜ÿG˜˜ÿG˜˜ÿH™™ÿG˜˜ÿH˜˜ÿH˜˜ÿG˜˜ÿG——ÿG˜˜ÿG——ÿF——ÿE——ÿE––ÿE––ÿE––ÿE––ÿD––ÿD––ÿC––ÿB••ÿA••ÿA””ÿA””ÿ@““ÿ?’’ÿ?““ÿ>““ÿ>““ÿ<““ÿ<””ÿ:””ÿ9••ÿ7––ÿ6——ÿ4™™ÿ1œœÿ.žžÿ,¡¡ÿ*¥¥ÿ(©©ÿ(¯¯ÿ*¶¶ÿ,½¼ÿ.ÃÃÿ+ÆÆý"ÎÍÞëëœýýƒýýƒýý„ýý„ýýþü{þþsþþjþþaþþVþþKþþBþþ7þþ.þþ%ÿÿÿÿþþþþþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªªrrC>ÌT™™þTššÿR™™ÿP˜˜ÿM——ÿK••ÿH””ÿF““ÿD’’ÿB‘‘ÿ@ÿ=ÿ9ŒŒÿ7ŒŒÿ4‹‹ÿ1‹‹ÿ/‰‰ÿ9ÿE••ÿC””ÿB““ÿ?’’ÿ=‘‘ÿ=‘‘ÿ<‘‘ÿ<‘‘ÿ:ÿ9ÿ8ÿ6ŽŽÿ6ŽŽÿ6ÿ5ŽŽÿ3ÿ3ÿ9ÿ:‘‘ÿ:‘‘ÿ;‘‘ÿ;’’ÿ;’’ÿ:‘‘ÿ;’’ÿ<’’ÿ<““ÿ<’’ÿ=““ÿ=““ÿ>””ÿ>””ÿ>””ÿ?””ÿ?””ÿ?••ÿ@••ÿA••ÿ@••ÿA––ÿA––ÿA––ÿB––ÿC––ÿC––ÿC——ÿD——ÿD——ÿD——ÿD˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF™™ÿF™™ÿG™™ÿG™™ÿG™™ÿF™™ÿF™™ÿF™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH˜˜ÿH˜˜ÿG˜˜ÿG˜˜ÿG˜˜ÿF——ÿF——ÿE——ÿE——ÿE——ÿE––ÿE––ÿD––ÿD––ÿC••ÿB••ÿB••ÿA””ÿ@““ÿ?’’ÿ?’’ÿ?’’ÿ?““ÿ=““ÿ<““ÿ;““ÿ9””ÿ9••ÿ7••ÿ5——ÿ3™™ÿ1››ÿ.ÿ,  ÿ)¤¤ÿ'¨¨ÿ(­­ÿ*´´ÿ-»»ÿ/ÁÁÿ,ÄÄý"ÌÌÞëëšýýýýƒýý„ýý‚þüþþyþþsþþjÿÿ`þþWþþMþþBþþ8þþ/þþ'þþþþÿÿÿÿþþ ÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿjj1…… P——÷U››ÿTššÿQ˜˜ÿO——ÿL––ÿJ””ÿG””ÿF““ÿD‘‘ÿAÿ?ŽŽÿ;ŽŽÿ:ÿ7ÿ4ŒŒÿ0ŠŠÿ5ÿC••ÿD••ÿC””ÿA““ÿ?’’ÿ>’’ÿ>’’ÿ=‘‘ÿ<ÿ:ÿ9ÿ8ÿ7ŽŽÿ7ÿ7ÿ6ŽŽÿ7ÿ;‘‘ÿ;‘‘ÿ:‘‘ÿ:‘‘ÿ<’’ÿ<’’ÿ;’’ÿ<’’ÿ<’’ÿ=““ÿ=““ÿ>””ÿ>””ÿ>””ÿ?””ÿ?””ÿ?””ÿ@••ÿ@••ÿ@••ÿA••ÿA••ÿA––ÿA––ÿB––ÿC––ÿC——ÿC——ÿC——ÿD——ÿD——ÿE——ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF™™ÿF™™ÿG™™ÿG™™ÿF™™ÿF™™ÿF™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG™™ÿH™™ÿH™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH˜˜ÿG˜˜ÿG——ÿF——ÿF——ÿE––ÿE––ÿE––ÿE––ÿD––ÿD––ÿC––ÿB••ÿA••ÿA””ÿ@““ÿ?’’ÿ?’’ÿ?’’ÿ>““ÿ=““ÿ;““ÿ:““ÿ:““ÿ8””ÿ7””ÿ5——ÿ3˜˜ÿ1ššÿ.œœÿ+ŸŸÿ)¢¢ÿ(§§ÿ)¬¬ÿ*³²ÿ-ººÿ0ÁÁÿ-ÃÃý#ÌÌÝéé™þüýýýý‚ýý€þþ}þþyþþsþþjþþaþþXþþNÿÿDþþ:ÿÿ0ÿÿ(ÿÿ þþþþÿÿÿÿ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqq %~~gJ’’æU››ÿTššÿR™™ÿP˜˜ÿN——ÿL••ÿI””ÿG““ÿE’’ÿB‘‘ÿ@ÿ>ÿ<ÿ9ŒŒÿ7ŒŒÿ3ŠŠÿ3‹‹ÿB””ÿE––ÿC••ÿB””ÿA““ÿ@’’ÿ?’’ÿ>’’ÿ=‘‘ÿ<‘‘ÿ;ÿ:ÿ8ÿ8ÿ8ÿ7ÿ:‘‘ÿ=’’ÿ<’’ÿ<’’ÿ;‘‘ÿ<’’ÿ<’’ÿ<’’ÿ=’’ÿ=““ÿ>””ÿ>””ÿ>””ÿ>””ÿ?””ÿ?””ÿ?””ÿ@••ÿ@••ÿ@••ÿA••ÿA••ÿA••ÿB––ÿB––ÿB––ÿC——ÿC——ÿC——ÿC——ÿD˜˜ÿD——ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF™™ÿF™™ÿF™™ÿG™™ÿF™™ÿF™™ÿF™™ÿG™™ÿG™™ÿH™™ÿHššÿH™™ÿH™™ÿHššÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH˜˜ÿH˜˜ÿG˜˜ÿF——ÿE——ÿE——ÿE——ÿE––ÿD––ÿD––ÿD––ÿC––ÿC••ÿB••ÿA””ÿ@““ÿ?’’ÿ?’’ÿ>’’ÿ>““ÿ=’’ÿ<’’ÿ:’’ÿ9““ÿ8““ÿ7••ÿ5••ÿ3——ÿ1˜˜ÿ.››ÿ+ÿ*¢¢ÿ)¦¦ÿ(««ÿ+²²ÿ.¹¹ÿ1¿¿ÿ.ÂÂý#ÌÌÝéé—üü~ýý€þþþþþþ|ÿÿxþþrþþjþþbþþXþþOÿÿDþþ:þþ2þþ)ÿÿ"þþþþÿÿþþ ÿÿ þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtt07‡‡³R™™ùU››ÿTššÿR™™ÿO——ÿM––ÿK••ÿI””ÿF““ÿD‘‘ÿAÿ@ÿ=ŽŽÿ;ŽŽÿ9ÿ5ŒŒÿ2ŠŠÿ?’’ÿF——ÿD••ÿC””ÿB””ÿ@““ÿ?’’ÿ>’’ÿ=’’ÿ=‘‘ÿ<‘‘ÿ;ÿ9ÿ8ÿ9ÿ:ÿ>““ÿ>””ÿ>““ÿ=’’ÿ<’’ÿ<’’ÿ<’’ÿ=““ÿ>““ÿ>““ÿ>””ÿ>””ÿ>””ÿ?””ÿ?””ÿ?””ÿ?””ÿ@••ÿ@••ÿA••ÿA••ÿA••ÿA––ÿB––ÿC——ÿC––ÿC——ÿD——ÿC——ÿD——ÿD˜˜ÿD——ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF™™ÿF™™ÿF™™ÿG™™ÿG™™ÿG™™ÿG™™ÿHššÿHššÿHššÿHššÿHššÿIššÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH˜˜ÿG——ÿF——ÿF——ÿF——ÿE——ÿE––ÿE––ÿE––ÿD––ÿC––ÿC••ÿB••ÿ@””ÿ?““ÿ?““ÿ?’’ÿ>’’ÿ>’’ÿ=’’ÿ;’’ÿ:’’ÿ9““ÿ8““ÿ6““ÿ4””ÿ3––ÿ1˜˜ÿ.ššÿ,ÿ+¡¡ÿ)¥¥ÿ)ªªÿ+±±ÿ.¸¸ÿ0¾¾ÿ.ÃÃý%ËËÞéé—üü}þþ~þþþþþþ{þþvþþqþþjþþaþþXþþNþþEÿÿ<þþ2þþ)ÿÿ"þþþþÿÿþþÿÿ þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[[xxnF‘‘àUššþU››ÿSššÿQ˜˜ÿO——ÿM––ÿJ••ÿH””ÿF’’ÿC‘‘ÿ@ÿ>ÿ<ÿ:ŽŽÿ7ÿ4‹‹ÿ:ÿF––ÿF––ÿE••ÿC••ÿB””ÿ@““ÿ?““ÿ?’’ÿ>’’ÿ=‘‘ÿ<‘‘ÿ:ÿ9ÿ:ÿ<‘‘ÿ@””ÿ@””ÿ?““ÿ>““ÿ=““ÿ=’’ÿ=““ÿ>””ÿ>””ÿ?““ÿ>””ÿ>””ÿ>””ÿ?””ÿ?””ÿ?””ÿ@••ÿ?””ÿ@••ÿA••ÿA••ÿA••ÿB––ÿC––ÿC——ÿC——ÿD——ÿE——ÿD——ÿE˜˜ÿE˜˜ÿD——ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG™™ÿG™™ÿHššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿI™™ÿI™™ÿI™™ÿH™™ÿI™™ÿI™™ÿH™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH˜˜ÿG˜˜ÿG——ÿG——ÿF——ÿE——ÿE——ÿE——ÿE––ÿE––ÿD––ÿC••ÿB••ÿA””ÿ?““ÿ?““ÿ?’’ÿ>’’ÿ>’’ÿ=’’ÿ<’’ÿ;’’ÿ:’’ÿ9’’ÿ8’’ÿ6““ÿ4””ÿ3••ÿ1——ÿ.ššÿ-ÿ+  ÿ)¤¤ÿ)©©ÿ+°¯ÿ.··ÿ1¾¾ÿ0ÁÁý'ÉÉÝçç–üü|þþ}þþ}þþ|þþyþþvþþqþþjþþaþþXþþOþþFÿÿ<þþ2þþ*þþ#þþþþþþþþÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ mm*/ƒƒ¡P——ôV››ÿT››ÿR™™ÿP˜˜ÿN——ÿL––ÿJ””ÿG““ÿE’’ÿBÿ?ÿ=ÿ<ŽŽÿ9ŽŽÿ6ŒŒÿ5ÿC””ÿG——ÿF––ÿE––ÿC••ÿB””ÿA““ÿ@’’ÿ?’’ÿ=‘‘ÿ=‘‘ÿ<‘‘ÿ;ÿ;ÿ?““ÿA””ÿA””ÿ@””ÿ?””ÿ?””ÿ?““ÿ>““ÿ?””ÿ?””ÿ?””ÿ>””ÿ?””ÿ?””ÿ?””ÿ?””ÿ@••ÿ@••ÿ@••ÿA••ÿB––ÿB––ÿB––ÿB––ÿC––ÿC——ÿD——ÿE——ÿE——ÿE——ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF™™ÿG™™ÿH™™ÿH™™ÿHššÿG™™ÿG™™ÿHššÿIššÿIššÿJššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿI™™ÿIššÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH˜˜ÿH˜˜ÿG˜˜ÿG——ÿF——ÿE——ÿE——ÿE——ÿE––ÿE––ÿD––ÿC••ÿC••ÿB••ÿ@””ÿ?““ÿ?““ÿ>’’ÿ>’’ÿ=‘‘ÿ=’’ÿ<’’ÿ;‘‘ÿ9‘‘ÿ9‘‘ÿ8““ÿ5’’ÿ4““ÿ2••ÿ0––ÿ/˜˜ÿ-››ÿ+ŸŸÿ*££ÿ)¨¨ÿ+¯®ÿ/¶¶ÿ2½½ÿ0ÀÀý'ÉÉÝèè”þþyþþzþþ|þþ{þþyþþuþþqþþjþþbþþYþþOþþFÿÿ<ÿÿ3þþ,þþ%þþÿÿþþþþþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmmttQAÎTššýU››ÿTššÿR™™ÿO˜˜ÿN——ÿL••ÿI””ÿF““ÿD’’ÿA‘‘ÿ?ÿ=ÿ;ŽŽÿ8ÿ5ÿ<ÿH——ÿH——ÿF––ÿE••ÿD••ÿB””ÿA““ÿ@’’ÿ?’’ÿ=‘‘ÿ=‘‘ÿ<‘‘ÿ<‘‘ÿ@““ÿB””ÿB””ÿA””ÿA””ÿA””ÿA””ÿ?””ÿ?””ÿ@””ÿ@””ÿ?””ÿ@””ÿ?””ÿ?””ÿ@••ÿA••ÿA••ÿA••ÿB––ÿB––ÿB––ÿC––ÿD——ÿD——ÿD——ÿE——ÿE——ÿE——ÿE˜˜ÿE˜˜ÿE˜˜ÿE˜˜ÿF™™ÿF™™ÿF™™ÿG™™ÿG™™ÿH™™ÿHššÿHššÿHššÿHššÿIššÿJ››ÿJ››ÿJ››ÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿI™™ÿJššÿJššÿJššÿJššÿI™™ÿI™™ÿJ™™ÿI™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿG˜˜ÿF——ÿF——ÿE——ÿE––ÿE––ÿE––ÿD––ÿC––ÿC••ÿB••ÿA••ÿ@””ÿ?““ÿ?““ÿ>’’ÿ=‘‘ÿ=‘‘ÿ=‘‘ÿ<‘‘ÿ:‘‘ÿ:‘‘ÿ9‘‘ÿ6‘‘ÿ5‘‘ÿ4““ÿ2””ÿ0––ÿ.˜˜ÿ-››ÿ+žžÿ*¢¢ÿ*§§ÿ,®®ÿ0µµÿ2¼¼ÿ0ÀÀý&ÉÈÜææ’þþwþþzþþzþþzÿÿxþþvþþpþþiþþbþþYÿÿPþþGþþ=þþ5þþ,þþ%þþþþþþþþþþ þþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿii0††˜Q——öVœœÿTššÿSššÿQ™™ÿP˜˜ÿM––ÿK••ÿH””ÿE’’ÿC‘‘ÿ@‘‘ÿ?‘‘ÿ=ÿ:ŽŽÿ7ÿ9ŽŽÿF––ÿJ˜˜ÿH——ÿF––ÿE––ÿD••ÿB””ÿA““ÿ@““ÿ?’’ÿ>’’ÿ=‘‘ÿ>’’ÿA””ÿB••ÿC••ÿB””ÿB••ÿC••ÿC••ÿA••ÿA””ÿA””ÿA””ÿA••ÿ@••ÿ@••ÿ@••ÿA••ÿA••ÿA••ÿB––ÿB––ÿC––ÿC––ÿC––ÿD——ÿE——ÿD——ÿE——ÿE——ÿE——ÿE˜˜ÿF˜˜ÿE˜˜ÿE˜˜ÿG™™ÿG™™ÿG™™ÿG™™ÿH™™ÿH™™ÿIššÿIššÿIššÿIššÿJššÿK››ÿJ››ÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿJššÿJššÿJššÿJššÿI™™ÿI™™ÿJ™™ÿJ™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH˜˜ÿG˜˜ÿF——ÿE——ÿE——ÿE——ÿE––ÿD––ÿD––ÿC––ÿB••ÿA••ÿ@””ÿ?””ÿ?““ÿ?““ÿ>’’ÿ=‘‘ÿ=‘‘ÿ=‘‘ÿ;ÿ;ÿ:ÿ8ÿ6ÿ5‘‘ÿ3’’ÿ2””ÿ0–•ÿ/˜˜ÿ-››ÿ,ÿ*¢¢ÿ*§§ÿ,®®ÿ0µµÿ3¼»ÿ1¿¿ý'ÈÈÛææþþuþþwþþzþþzþþyþþuþþpþþjþþaþþYþþQþþGþþ>þþ4þþ-þþ&þþÿÿþþÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmm#{{WH’’ÙV››þU››ÿTššÿR™™ÿQ™™ÿO——ÿM––ÿJ••ÿG““ÿE’’ÿC’’ÿ@’’ÿ>ÿ<ÿ9ŽŽÿ8ÿC””ÿK˜˜ÿH——ÿG——ÿF––ÿE––ÿD••ÿB””ÿA““ÿ@““ÿ?““ÿ>’’ÿA””ÿC••ÿC••ÿD••ÿC••ÿD––ÿD••ÿD––ÿC••ÿB••ÿA••ÿA••ÿA••ÿA••ÿA••ÿA••ÿB––ÿC––ÿC––ÿB––ÿC––ÿC––ÿC––ÿC––ÿD——ÿD——ÿD——ÿE˜˜ÿE——ÿE˜˜ÿF˜˜ÿF˜˜ÿF˜˜ÿF˜˜ÿG™™ÿG™™ÿG™™ÿH™™ÿHššÿHššÿIššÿIššÿIššÿIššÿIššÿJššÿJ››ÿJ››ÿIššÿIššÿIššÿIššÿIššÿIššÿIššÿJššÿJššÿJššÿJššÿJššÿJššÿJ™™ÿJ™™ÿJ™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH˜˜ÿH˜˜ÿG˜˜ÿF——ÿE——ÿE——ÿE——ÿE——ÿE––ÿE––ÿD––ÿC––ÿB••ÿA””ÿ?””ÿ?””ÿ?““ÿ?’’ÿ>’’ÿ>’’ÿ=‘‘ÿ<ÿ;ÿ;ÿ9ÿ8ÿ6ÿ5‘‘ÿ4’’ÿ2““ÿ1••ÿ0——ÿ.™™ÿ+ÿ*¡¡ÿ+¦¦ÿ,¬¬ÿ1´´ÿ4ººÿ2¾¾ý*ÆÅÚçåŽüüsþþwþþyþþzÿÿxþþtþþpþþjþþbþþYÿÿPþþGþþ>þþ5þþ,þþ&þþÿÿþþÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿss!7ˆˆS™™öWœœÿU››ÿSššÿR™™ÿP˜˜ÿN——ÿL––ÿJ””ÿG““ÿE““ÿB’’ÿ@ÿ=ÿ<ÿ9ÿ?‘‘ÿK˜˜ÿK˜˜ÿI——ÿG——ÿG––ÿE••ÿC••ÿB””ÿA““ÿA““ÿ@““ÿB””ÿD––ÿD––ÿD••ÿE––ÿD––ÿD––ÿD––ÿD––ÿC––ÿB••ÿB••ÿB••ÿB••ÿB••ÿB––ÿC––ÿC––ÿC––ÿC––ÿD——ÿD——ÿC––ÿD——ÿE——ÿE——ÿE——ÿF˜˜ÿF˜˜ÿF˜˜ÿG˜˜ÿG™™ÿG˜˜ÿG™™ÿH™™ÿH™™ÿH™™ÿHššÿHššÿHššÿIššÿIššÿIššÿIššÿJššÿJ››ÿJ››ÿJ››ÿJ››ÿJ››ÿJ››ÿJ››ÿJ››ÿJ››ÿJššÿK››ÿK››ÿK››ÿKššÿKššÿKššÿKššÿJššÿJššÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿI™™ÿH™™ÿH™™ÿF——ÿE——ÿE——ÿF——ÿE——ÿE——ÿE––ÿD––ÿD––ÿC––ÿB••ÿA””ÿ@””ÿ@””ÿ?““ÿ?““ÿ>’’ÿ=‘‘ÿ=‘‘ÿ<ÿ;ÿ:ÿ:ÿ8ÿ7ÿ5‘‘ÿ4’’ÿ3““ÿ1••ÿ0——ÿ,˜˜ÿ+œ›ÿ+  ÿ+¥¥ÿ.««ÿ2³³ÿ4ººÿ3½½ý*ÇÇØçå‹üüqþþuþþwÿÿxþþwþþsþþoþþiþþaþþYþþQþþHþþ>þþ5þþ-þþ%ÿÿþþÿÿþþþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmm!{{UG‘‘×W››þW››ÿU››ÿS™™ÿR™™ÿP˜˜ÿN––ÿL––ÿJ””ÿG““ÿC’’ÿA‘‘ÿ?‘‘ÿ=ÿ:ŽŽÿ;ÿI——ÿM™™ÿK˜˜ÿI——ÿH——ÿF––ÿE••ÿD••ÿB””ÿB””ÿA““ÿD••ÿF——ÿF––ÿF––ÿF––ÿE––ÿE––ÿE––ÿE––ÿD––ÿC––ÿC••ÿC––ÿC––ÿC––ÿD––ÿD––ÿC––ÿD––ÿD——ÿD——ÿE——ÿD——ÿD——ÿE——ÿE——ÿE——ÿF˜˜ÿF˜˜ÿF˜˜ÿG˜˜ÿG™™ÿG™™ÿH™™ÿI™™ÿI™™ÿH™™ÿHššÿIššÿIššÿIššÿIššÿIššÿIššÿJššÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿJ››ÿJ››ÿJ››ÿK››ÿK››ÿK››ÿKššÿK››ÿKššÿKššÿJššÿIššÿJššÿJ™™ÿJ™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿG˜˜ÿG˜˜ÿF——ÿF——ÿE——ÿE——ÿE––ÿD––ÿD––ÿD––ÿC––ÿB••ÿA””ÿ@””ÿ@““ÿ?““ÿ>’’ÿ=‘‘ÿ<‘‘ÿ<ÿ<ÿ;ÿ;ÿ:ÿ8ÿ7ÿ6‘‘ÿ5’’ÿ3““ÿ1””ÿ/––ÿ-˜˜ÿ,››ÿ+  ÿ,¥¥ÿ/¬¬ÿ3³³ÿ6º¹ÿ4¾¾ü*ÆÆØååŠþþoþþrþþvþþwþþuþþqþþmþþhþþaþþZþþQþþGþþ>þþ5þþ-þþ%ÿÿþþþþþþþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ mm/ƒƒ‘R——ðXœœÿWœœÿUššÿS™™ÿQ™™ÿP˜˜ÿM––ÿK••ÿJ••ÿG””ÿC““ÿA’’ÿ?‘‘ÿ<ÿ:ŽŽÿD””ÿNššÿM™™ÿK˜˜ÿJ˜˜ÿH——ÿG––ÿF––ÿD••ÿC””ÿB””ÿF——ÿH˜˜ÿH——ÿH——ÿG——ÿF——ÿE––ÿE––ÿE––ÿF——ÿE——ÿD––ÿE––ÿD––ÿD––ÿD——ÿE——ÿD——ÿD——ÿD——ÿD——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE——ÿF˜˜ÿF˜˜ÿG˜˜ÿH™™ÿH™™ÿG™™ÿH™™ÿIššÿI™™ÿIššÿI™™ÿI™™ÿIššÿJššÿJššÿJššÿJ››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿJ››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿKššÿKššÿKššÿIššÿIššÿJ™™ÿJ™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH™™ÿH˜˜ÿG˜˜ÿG˜˜ÿF——ÿE––ÿE––ÿE––ÿD––ÿD––ÿC––ÿA••ÿA••ÿA••ÿA””ÿ?““ÿ?’’ÿ>’’ÿ=‘‘ÿ<ÿ<ÿ<ÿ;ÿ:ÿ9ÿ7ÿ7ÿ6‘‘ÿ4‘‘ÿ3’’ÿ2””ÿ0––ÿ.˜˜ÿ,››ÿ-  ÿ/¦¥ÿ1¬¬ÿ4³³ÿ8¹¹ÿ5½½ü*ÆÆ×ææ‰þþnþþqþþtþþuþþsþþpþþmþþhþþaþþYþþOþþFþþ=þþ4þþ,þþ%þþÿÿþþþþÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿffuuLDÍWœœýXœœÿW››ÿUššÿS™™ÿQ™™ÿO——ÿM––ÿK––ÿI””ÿF””ÿB’’ÿ@’’ÿ>ÿ<ÿ?‘‘ÿM™™ÿOššÿM™™ÿK˜˜ÿI——ÿI——ÿH——ÿF––ÿD••ÿC””ÿH˜˜ÿJ˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿG——ÿG——ÿF——ÿF——ÿG——ÿG——ÿF——ÿF——ÿE——ÿE——ÿE––ÿF˜˜ÿE——ÿE——ÿE——ÿE——ÿE——ÿF˜˜ÿF˜˜ÿF˜˜ÿG˜˜ÿG˜˜ÿG™™ÿG™™ÿG™™ÿH™™ÿH™™ÿH™™ÿIššÿJššÿJššÿIššÿIššÿJššÿJššÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿLœœÿLœœÿK››ÿLœœÿL››ÿLœœÿK››ÿK››ÿK››ÿL››ÿLœœÿL››ÿL››ÿL››ÿL››ÿKššÿKššÿKššÿKššÿJššÿJ™™ÿI™™ÿI™™ÿI™™ÿI™™ÿH˜˜ÿH˜˜ÿH˜˜ÿG˜˜ÿF——ÿE——ÿE——ÿD––ÿD––ÿD––ÿB••ÿA••ÿA••ÿA””ÿ@””ÿ@““ÿ?’’ÿ>‘‘ÿ=ÿ=ÿ<ÿ<ÿ;ÿ9ŽŽÿ8ŽŽÿ7ÿ7ÿ6ÿ5‘‘ÿ4’’ÿ3””ÿ1••ÿ0˜˜ÿ/œ›ÿ/  ÿ0¦¥ÿ2¬¬ÿ6³³ÿ9¹¹ÿ6½½ü,ÅÅÖääˆþþmþþpþþrþþsþþrþþpþþlÿÿfþþ_þþWþþNþþEÿÿ<þþ4þþ,þþ%ÿÿÿÿþþþþ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ mm1„„ŒR™™ïZÿYœœÿW››ÿU››ÿS™™ÿP˜˜ÿO——ÿL––ÿK••ÿH••ÿE””ÿB““ÿ@‘‘ÿ=ÿ<ÿH––ÿP››ÿNššÿMššÿL™™ÿJ˜˜ÿI˜˜ÿH——ÿF––ÿE••ÿJ˜˜ÿK™™ÿJ™™ÿJ™™ÿI˜˜ÿH˜˜ÿH——ÿG——ÿG——ÿG——ÿG——ÿG——ÿG——ÿG˜˜ÿG˜˜ÿG˜˜ÿF˜˜ÿE——ÿF˜˜ÿF——ÿF——ÿF˜˜ÿG˜˜ÿG˜˜ÿG˜˜ÿG˜˜ÿG˜˜ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿI™™ÿJššÿJššÿJššÿJššÿJššÿKššÿK››ÿL››ÿL››ÿLœœÿK››ÿK››ÿK››ÿL››ÿL››ÿLœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿM››ÿM››ÿM››ÿL››ÿL››ÿL››ÿK››ÿKššÿJššÿI™™ÿI™™ÿI™™ÿH™™ÿH™™ÿH™™ÿG˜˜ÿG˜˜ÿF——ÿE——ÿD––ÿE––ÿD––ÿC––ÿB••ÿA••ÿA””ÿA””ÿA““ÿ@““ÿ>’’ÿ=‘‘ÿ=ÿ<ÿ<ÿ;ÿ:ÿ9ŽŽÿ9ÿ8ŽŽÿ7ÿ7ÿ6’’ÿ5““ÿ4””ÿ3––ÿ2˜˜ÿ0œ›ÿ/ Ÿÿ1¤¤ÿ4««ÿ8²²ÿ;¸¸ÿ8¼¼ü-ÃÂÖää†üükþþlþþpþþqþþpþþnþþjþþeþþ_þþWþþMþþEÿÿ<þþ2þþ,þþ$ÿÿÿÿþþþþ ÿÿ þþÿÿÿÿÿÿÿÿÿÿÿÿffuuACÂYœœüZÿXœœÿV››ÿTššÿR™™ÿP˜˜ÿO——ÿM––ÿJ••ÿH••ÿE””ÿC’’ÿ@‘‘ÿ>ÿC““ÿOššÿP››ÿNššÿM™™ÿK˜˜ÿK˜˜ÿI——ÿH——ÿH——ÿL™™ÿL™™ÿLššÿKššÿJ™™ÿI˜˜ÿI˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿG——ÿG——ÿH˜˜ÿH˜˜ÿH˜˜ÿG˜˜ÿG˜˜ÿF——ÿG˜˜ÿF˜˜ÿG——ÿG˜˜ÿG˜˜ÿG˜˜ÿH˜˜ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿI™™ÿJššÿJššÿJššÿJššÿKššÿKššÿK››ÿLœœÿLœœÿLœœÿLœœÿL››ÿL››ÿL››ÿLœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿL››ÿL››ÿL››ÿL››ÿKššÿKššÿJššÿJššÿI™™ÿH™™ÿH™™ÿH™™ÿH˜˜ÿG˜˜ÿF——ÿE——ÿE––ÿE––ÿD––ÿC––ÿC––ÿB––ÿB••ÿA””ÿA““ÿ@““ÿ?’’ÿ>’’ÿ=‘‘ÿ<‘‘ÿ<‘‘ÿ<ÿ;ÿ;ÿ:ÿ9ÿ9ÿ9ÿ8‘‘ÿ7’’ÿ6’’ÿ5””ÿ4––ÿ3˜˜ÿ1››ÿ1ŸŸÿ3¤¤ÿ5««ÿ9²²ÿ<¸·ÿ9¼¼ü.ÂÂÖââ…üühþþkþþnþþnþþnþþlþþiþþdþþ\ÿÿUþþMþþCþþ;ÿÿ3þþ+þþ$þþþþÿÿþþ ÿÿ þþÿÿÿÿÿÿÿÿÿÿÿÿoo(rO••ã[ÿZÿWœœÿV››ÿTššÿQ™™ÿP˜˜ÿN––ÿL––ÿI••ÿG••ÿE””ÿB““ÿ@‘‘ÿ?‘‘ÿK——ÿRœœÿP››ÿOššÿM™™ÿL˜˜ÿK˜˜ÿI——ÿI——ÿNššÿNššÿMššÿLššÿL™™ÿK™™ÿK™™ÿI˜˜ÿH˜˜ÿI˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿG˜˜ÿH™™ÿG˜˜ÿH˜˜ÿH˜˜ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿI™™ÿIššÿJššÿJššÿJššÿJššÿJššÿKššÿKššÿK››ÿLœœÿLœœÿLœœÿLœœÿLœœÿLœœÿLœœÿLœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿM››ÿL››ÿL››ÿK››ÿKššÿKššÿKššÿJššÿI™™ÿH™™ÿH™™ÿI™™ÿI™™ÿH˜˜ÿG——ÿF——ÿE——ÿE––ÿD––ÿC––ÿC––ÿC––ÿB••ÿA””ÿA””ÿ@““ÿ@’’ÿ?’’ÿ>‘‘ÿ=‘‘ÿ=‘‘ÿ<ÿ<ÿ<ÿ;ÿ:ŽŽÿ:ÿ:ÿ9ÿ8‘‘ÿ8’’ÿ7““ÿ6””ÿ5––ÿ4™™ÿ3››ÿ2ŸŸÿ3¤¤ÿ6ªªÿ:±±ÿ<··ÿ:»»ü0ÂÂÖàà…üügþþiþþlþþmþþlþþkþþgþþaþþ[þþTþþJþþBþþ:þþ2þþ*ÿÿ"þþþþÿÿÿÿ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿnn.=‹‹ªX››ø[žžÿXÿWœœÿUššÿS™™ÿQ˜˜ÿO——ÿM——ÿK––ÿI••ÿG••ÿD””ÿA’’ÿ?‘‘ÿD””ÿQ››ÿQ››ÿP››ÿOššÿM™™ÿK™™ÿJ˜˜ÿK˜˜ÿO››ÿO››ÿN››ÿMššÿMššÿMššÿLššÿK™™ÿI˜˜ÿJ™™ÿJ™™ÿI˜˜ÿI˜˜ÿI˜˜ÿI™™ÿH™™ÿH˜˜ÿG˜˜ÿH™™ÿH™™ÿH™™ÿI™™ÿI™™ÿH™™ÿI™™ÿI™™ÿH™™ÿI™™ÿI™™ÿH™™ÿJššÿJššÿJššÿJššÿJššÿKššÿKššÿKššÿK››ÿL››ÿLœœÿLœœÿMœœÿLœœÿLœœÿLœœÿLœœÿLœœÿL››ÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿL››ÿL››ÿL››ÿL››ÿKššÿJ™™ÿI™™ÿH™™ÿI™™ÿI™™ÿI™™ÿH˜˜ÿG——ÿG——ÿF——ÿE——ÿD––ÿC––ÿC––ÿC––ÿC••ÿB””ÿB””ÿA““ÿA““ÿ@’’ÿ?’’ÿ>’’ÿ>‘‘ÿ=ÿ=ÿ=ÿ=ÿ<ÿ;ÿ;ÿ:ÿ:ÿ:‘‘ÿ9’’ÿ8““ÿ7••ÿ6——ÿ5™˜ÿ4œ›ÿ4ŸŸÿ5¤¤ÿ8ªªÿ;±±ÿ>·¶ÿ=»ºü2ÁÁÖÞÞ„üüdþþeþþhþþjþþjþþhþþdþþ_þþYþþQþþIþþAþþ9ÿÿ0ÿÿ(þþ!þþþþÿÿÿÿ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿff "{{YJ’’ÒZœœýZÿXÿW››ÿUššÿS™™ÿQ˜˜ÿO——ÿM——ÿK——ÿI––ÿF••ÿC““ÿA’’ÿ@‘‘ÿL˜˜ÿTœœÿR››ÿP››ÿOššÿMššÿL™™ÿL™™ÿP››ÿP››ÿO››ÿN››ÿNššÿMššÿN››ÿMššÿK™™ÿK™™ÿKššÿK™™ÿK™™ÿK™™ÿI™™ÿI™™ÿI™™ÿH˜˜ÿI™™ÿJššÿI™™ÿI™™ÿJ™™ÿI™™ÿI™™ÿI™™ÿH™™ÿI™™ÿJššÿIššÿKššÿKššÿJššÿJššÿKššÿKššÿL››ÿL››ÿL››ÿL››ÿL››ÿMœœÿMœœÿMœœÿL››ÿL››ÿL››ÿL››ÿLœœÿLœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿM››ÿM››ÿL››ÿL››ÿL››ÿK››ÿKššÿJššÿJ™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH˜˜ÿG˜˜ÿG——ÿG——ÿF——ÿE——ÿD––ÿD––ÿC––ÿC••ÿB””ÿB””ÿB””ÿA““ÿA““ÿ@’’ÿ?’’ÿ?’’ÿ>‘‘ÿ>‘‘ÿ=ÿ=ÿ=ÿ<ÿ<ÿ<ÿ;ÿ;‘‘ÿ;’’ÿ;““ÿ:““ÿ9••ÿ8––ÿ7™™ÿ6œ›ÿ6  ÿ7¤¤ÿ:ªªÿ=°°ÿA¶µÿ?º¹ü3ÀÀÕÝÝüüaþþcÿÿfþþiþþgþþeþþaþþ]þþVþþOþþHþþ?þþ7þþ/þþ'ÿÿ þþÿÿÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ kk,€€…S™™ì[žžÿYÿXÿW››ÿTššÿR™™ÿP˜˜ÿN——ÿM——ÿK——ÿH––ÿF••ÿD““ÿA‘‘ÿF””ÿSœœÿTœœÿR››ÿQ››ÿO››ÿNššÿL™™ÿP››ÿRœœÿPœœÿP››ÿO››ÿNššÿN››ÿNššÿMššÿMššÿM››ÿLššÿMššÿLššÿK™™ÿJ™™ÿJ™™ÿI™™ÿI™™ÿJššÿJ™™ÿJššÿKššÿJ™™ÿJ™™ÿJššÿJššÿJššÿJššÿJššÿK››ÿL››ÿKššÿKššÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿMœœÿMœœÿMœœÿMœœÿL››ÿLœœÿMœœÿLœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿNÿMœœÿNœœÿNœœÿNÿNœœÿNœœÿNœœÿMœœÿM››ÿM››ÿL››ÿJššÿKššÿJ™™ÿJ™™ÿJ™™ÿJ™™ÿI™™ÿI™™ÿH˜˜ÿG˜˜ÿG——ÿG——ÿF——ÿF——ÿE––ÿE——ÿD––ÿC••ÿC••ÿC••ÿB””ÿB””ÿB””ÿA““ÿ?’’ÿ?’’ÿ?’’ÿ?’’ÿ>‘‘ÿ>‘‘ÿ>‘‘ÿ>ÿ=ÿ=ÿ=ÿ<‘‘ÿ<’’ÿ<’’ÿ;“’ÿ;””ÿ:••ÿ9——ÿ9™™ÿ8œ›ÿ7ŸŸÿ9££ÿ<©©ÿ?¯¯ÿCµµÿ@¹¹ü5ÀÀÓÜÜüü^þþaþþeþþeþþeþþbþþ_þþZþþTþþNþþFþþ=þþ5þþ-þþ%þþÿÿþþþþÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ??vv:D»Yú\žžÿZÿXœœÿV››ÿTššÿR™™ÿP˜˜ÿN˜˜ÿL——ÿJ——ÿI––ÿG••ÿE””ÿB’’ÿM˜˜ÿVÿTÿRœœÿQ››ÿP››ÿNššÿP››ÿTÿSÿRœœÿP››ÿO››ÿO››ÿNššÿN››ÿN››ÿN››ÿMššÿMššÿMššÿLššÿLššÿKššÿKššÿK™™ÿKššÿKššÿKššÿKššÿKššÿKššÿKššÿKššÿK››ÿL››ÿK››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿNœœÿNÿNÿNÿNÿNÿNÿNÿNÿNÿNÿNÿNÿNœœÿNœœÿNœœÿM››ÿMœœÿL››ÿL››ÿKššÿJššÿJššÿJššÿJ™™ÿI™™ÿI™™ÿI™™ÿH™™ÿH˜˜ÿH˜˜ÿG——ÿE——ÿF——ÿF——ÿE––ÿD––ÿD••ÿC••ÿC••ÿC””ÿC””ÿB””ÿA““ÿA““ÿ@““ÿ@’’ÿ?’’ÿ?‘‘ÿ?‘‘ÿ?‘‘ÿ?‘‘ÿ>‘‘ÿ>ÿ>‘‘ÿ=‘‘ÿ=’’ÿ=’’ÿ=““ÿ=••ÿ<––ÿ:——ÿ9š™ÿ9››ÿ9žžÿ:¢¢ÿ=¨¨ÿA¯¯ÿE¶¶ÿDººü6¿¿ÑÝÝzüü[þþ_þþbþþcþþbÿÿ`þþ\þþXþþRþþKþþCþþ;ÿÿ3þþ,þþ$þþþþþþþþÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿjj #zz^J““Õ\žžþ[žžÿYÿXœœÿV››ÿTššÿRššÿP™™ÿN˜˜ÿL——ÿK——ÿI––ÿG••ÿD““ÿF””ÿSœœÿVžžÿTÿSœœÿQœœÿP››ÿQœœÿUžžÿUžžÿTÿSÿRœœÿQœœÿPœœÿPœœÿO››ÿO››ÿO››ÿN››ÿN››ÿMššÿMššÿM››ÿM››ÿM››ÿM››ÿL››ÿLššÿLššÿLššÿL››ÿM››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿL››ÿMœœÿNœœÿNœœÿMœœÿMœœÿMœœÿMœœÿMœœÿNœœÿNÿNÿNÿNœœÿNÿOÿOÿOÿNÿNÿNÿNÿNÿNÿOÿNÿNÿNÿNœœÿNœœÿMœœÿMœœÿM››ÿM››ÿKššÿLššÿKššÿKššÿJššÿJššÿJššÿJ™™ÿH™™ÿH™™ÿH˜˜ÿG˜˜ÿF——ÿF——ÿF——ÿE––ÿE––ÿE––ÿD––ÿC••ÿC••ÿC••ÿC””ÿC””ÿC””ÿB””ÿA““ÿA““ÿ@’’ÿ@‘‘ÿ?‘‘ÿ?‘‘ÿ@‘‘ÿ?‘‘ÿ?‘‘ÿ>‘‘ÿ>’’ÿ>’’ÿ?““ÿ?””ÿ>••ÿ<––ÿ<˜˜ÿ;™™ÿ;››ÿ;ŸŸÿ=¢¢ÿ?©©ÿD°¯ÿG¶¶ÿE¹¹ü8¾¾ÏßßxüüZþþ\þþ^ÿÿ`þþaþþ^þþZþþVþþOþþHÿÿ@þþ9þþ1þþ)ÿÿ"þþþþÿÿþþ ÿÿ þþÿÿÿÿÿÿÿÿÿÿÿÿii0ƒƒŠS˜˜ì]ŸŸÿ[žžÿZÿXœœÿV››ÿT™™ÿQ™™ÿP™™ÿN˜˜ÿL˜˜ÿK——ÿI––ÿG••ÿE””ÿL˜˜ÿWžžÿVžžÿUÿSœœÿQ››ÿRœœÿWžžÿVŸŸÿUžžÿTžžÿTžžÿSÿSÿRÿPœœÿPœœÿPœœÿPœœÿOœœÿN››ÿN››ÿN››ÿOœœÿN››ÿOœœÿNœœÿM››ÿM››ÿL››ÿL››ÿM››ÿM››ÿL››ÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿNœœÿNœœÿNœœÿOÿOÿNœœÿNÿNÿNÿNÿNÿOÿOÿOÿNÿNÿOÿOÿOÿOÿOÿOÿOÿOÿNÿOÿOÿNÿNÿNÿNœœÿNœœÿNœœÿMœœÿM››ÿL››ÿM››ÿM››ÿL››ÿKššÿKššÿJššÿI™™ÿIššÿJ™™ÿH˜˜ÿG˜˜ÿG˜˜ÿG——ÿG˜˜ÿF——ÿF——ÿG——ÿF——ÿE––ÿE––ÿD••ÿD••ÿD••ÿD••ÿC””ÿB””ÿC””ÿA““ÿ@’’ÿA’’ÿ@’’ÿ@‘‘ÿ@‘‘ÿ@‘‘ÿ@’’ÿ@’’ÿ@’’ÿ@““ÿ@““ÿ?””ÿ>••ÿ?——ÿ>˜˜ÿ=™™ÿ=››ÿ>ŸŸÿ?££ÿA©¨ÿF¯¯ÿI¶¶ÿH¹¹û:¾¾ÎÜÜvüüWþþYþþ[þþ]þþ]þþZþþWþþSþþLþþEþþ>þþ6þþ/þþ'þþ!þþþþÿÿÿÿ þþ ÿÿÿÿÿÿÿÿÿÿÿÿnn59ˆˆªYœœö\ŸŸÿZÿYÿXœœÿV››ÿSššÿQ™™ÿP™™ÿN˜˜ÿL˜˜ÿK˜˜ÿI––ÿF••ÿF””ÿQ››ÿXŸŸÿWžžÿUÿSœœÿTÿXŸŸÿX  ÿVŸŸÿVžžÿUžžÿTžžÿTžžÿTžžÿRÿQÿQÿQÿQÿPœœÿOœœÿPœœÿPœœÿPœœÿOœœÿOœœÿN››ÿNœœÿN››ÿM››ÿM››ÿM››ÿM››ÿNœœÿNœœÿNœœÿNœœÿNœœÿNÿOÿOÿOÿOÿOÿPÿOÿOÿOÿOÿOÿOÿOÿPžžÿPžžÿPÿOÿPÿPÿPÿPÿPÿPÿPÿPÿOÿPÿOÿOÿOÿOÿOÿOÿOœœÿNœœÿNœœÿMœœÿM››ÿN››ÿM››ÿL››ÿLššÿKššÿJššÿKššÿJššÿI™™ÿH™™ÿH™™ÿH˜˜ÿH˜˜ÿH˜˜ÿG˜˜ÿG˜˜ÿG——ÿG——ÿG——ÿE––ÿE––ÿE––ÿD••ÿC••ÿC••ÿC””ÿC””ÿA““ÿB““ÿA““ÿA’’ÿB““ÿC““ÿC““ÿB““ÿA““ÿA““ÿA““ÿ@““ÿB••ÿB——ÿA––ÿA——ÿ@™™ÿ@››ÿ@ŸŸÿB££ÿD©©ÿI°°ÿL¶¶ÿJ¹¸û<¿¾ÌÛÛtûûTÿÿUþþXþþZþþZþþXþþTÿÿPþþJþþCþþ;þþ4þþ,þþ&ÿÿþþÿÿÿÿþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\\ vvVJ““Ð\ŸŸý\ŸŸÿ[žžÿYÿXœœÿV››ÿT››ÿRššÿP™™ÿO™™ÿM˜˜ÿL˜˜ÿH––ÿG••ÿI––ÿUÿYŸŸÿWžžÿVÿUÿXŸŸÿZ  ÿXŸŸÿXŸŸÿVŸŸÿUžžÿVžžÿUžžÿTžžÿSžžÿRÿRÿRÿPœœÿPœœÿQœœÿQÿPÿOœœÿPœœÿOœœÿOœœÿOœœÿNœœÿNœœÿNœœÿNœœÿNœœÿNœœÿNœœÿOœœÿOÿOÿOÿPÿPÿPÿPÿPÿQžžÿPžžÿPÿPÿPÿPÿPÿPžžÿPžžÿPÿPÿPÿPÿPÿPÿPÿPžžÿPžžÿPÿPÿPÿPÿPÿPÿPÿOÿPÿOÿOœœÿOœœÿNœœÿNœœÿNœœÿM››ÿL››ÿL››ÿKššÿLššÿKššÿKššÿJ™™ÿI™™ÿJ™™ÿI™™ÿH˜˜ÿI˜˜ÿH˜˜ÿH˜˜ÿG˜˜ÿG——ÿG——ÿF——ÿF——ÿF––ÿE––ÿE––ÿE••ÿD••ÿC••ÿC””ÿC””ÿC””ÿD””ÿD””ÿD””ÿD””ÿD””ÿC““ÿC““ÿC””ÿB””ÿD••ÿE––ÿD—–ÿD——ÿD™˜ÿCššÿBœÿD  ÿE¥¥ÿHªªÿL°°ÿO¶¶ÿL¸¸û=¾¾ÌÜÚpþþOþþQÿÿUþþVþþVþþSÿÿPþþKþþGÿÿ@þþ9þþ1þþ*þþ#þþþþþþþþþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ cc-‚‚{P˜˜ä]ŸŸþ\ŸŸÿZÿYÿXœœÿVœœÿTššÿRššÿPššÿO™™ÿM˜˜ÿK——ÿI——ÿF••ÿL˜˜ÿXŸŸÿY  ÿWžžÿVÿXžžÿ[  ÿZ  ÿZ¡¡ÿY  ÿXŸŸÿWŸŸÿWŸŸÿVžžÿUžžÿX  ÿ^¤¤ÿb¥¥ÿa¥¥ÿ[¢¢ÿTžžÿRÿQÿQœœÿQœœÿPœœÿOœœÿPÿPÿPÿOÿOÿNœœÿOÿPÿPÿPÿPÿOÿPÿPÿPÿPÿPÿQžžÿQžžÿQžžÿQžžÿQžžÿQžžÿPÿPÿPžžÿQžžÿQžžÿQžžÿQžžÿQžžÿQžžÿPžžÿPžžÿPžžÿPžžÿPÿPÿPÿPÿPÿPÿPÿPÿPÿPÿPÿOœœÿNœœÿNœœÿM››ÿM››ÿL››ÿL››ÿM››ÿL››ÿL››ÿKššÿKššÿKššÿI™™ÿI™™ÿI˜˜ÿH˜˜ÿI˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿG——ÿG——ÿF——ÿG——ÿF––ÿF––ÿF––ÿE••ÿE••ÿE••ÿF••ÿF••ÿE””ÿE””ÿE””ÿE””ÿF••ÿF••ÿE””ÿE••ÿG––ÿG––ÿF——ÿF——ÿG˜˜ÿFššÿF››ÿGžžÿG¡¡ÿG¥¥ÿJªªÿN°°ÿRµµÿM¶¶û=¼ºÊÛÙlûûLþþOÿÿPþþRþþRÿÿPþþMþþHÿÿDþþ=þþ5þþ/ÿÿ(ÿÿ þþþþÿÿþþ ÿÿ þþÿÿÿÿÿÿÿÿÿÿÿÿ rr&1„„Tššì^  ÿ\žžÿZžžÿYÿXœœÿV››ÿT››ÿR››ÿQššÿO™™ÿM™™ÿL˜˜ÿJ——ÿH••ÿOššÿYŸŸÿYŸŸÿXžžÿXžžÿ[  ÿ\¡¡ÿ\¢¢ÿ\¢¢ÿZ¡¡ÿY  ÿXŸŸÿX  ÿb¥¥ÿr®®ÿy²²ÿ{´´ÿ{´´ÿw²²ÿiªªÿX¡¡ÿRÿRÿRÿQœœÿQÿQÿRÿRÿQÿQÿQÿQžžÿQžžÿPÿQÿQÿQÿPÿPÿPÿPÿQžžÿQžžÿQžžÿQžžÿQžžÿRžžÿRžžÿQžžÿQžžÿQžžÿRžžÿRžžÿRžžÿRžžÿRžžÿQžžÿQžžÿQžžÿPžžÿPžžÿQžžÿQžžÿQžžÿQžžÿQžžÿPžžÿPÿPÿPÿPÿPÿOÿOœœÿNœœÿNœœÿNœœÿNœœÿNœœÿM››ÿM››ÿM››ÿL››ÿKššÿKššÿJššÿJ™™ÿI™™ÿI˜˜ÿI˜˜ÿI™™ÿI™™ÿI˜˜ÿH˜˜ÿH˜˜ÿG˜˜ÿG——ÿG——ÿG——ÿG——ÿG——ÿG––ÿG––ÿG––ÿG••ÿF••ÿF••ÿG••ÿG••ÿG––ÿH––ÿG••ÿH––ÿI——ÿI––ÿH––ÿI——ÿJ˜˜ÿJ™™ÿJ››ÿIÿIŸŸÿI¢¡ÿJ¥¥ÿMªªÿQ°°ÿR´´ÿMµµû?ººÈ!ÚØiûûIþþKþþMþþOþþNþþLþþHþþEþþ?þþ9ÿÿ3þþ,þþ%þþþþÿÿÿÿÿÿ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿqq6?ŒŒ°Y÷_¡¡ÿ\ŸŸÿZžžÿYÿXœœÿWœœÿT››ÿS››ÿQššÿO™™ÿN˜˜ÿL˜˜ÿJ——ÿI––ÿSœœÿZ  ÿZŸŸÿYŸŸÿ[  ÿ^¢¢ÿ^¢¢ÿ]¢¢ÿ\¢¢ÿ[¡¡ÿY  ÿe§§ÿy²²ÿ~´´ÿ}´´ÿ}´´ÿ}µµÿ}µµÿ|´´ÿq®®ÿ[¢¢ÿSžžÿSžžÿSžžÿSžžÿSžžÿSžžÿSžžÿRžžÿRžžÿSžžÿSžžÿRžžÿRžžÿRÿRžžÿRžžÿQžžÿQÿQžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿSŸŸÿSŸŸÿRŸŸÿSŸŸÿSŸŸÿRŸŸÿRŸŸÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRŸŸÿRŸŸÿRžžÿQžžÿQžžÿQžžÿQžžÿPÿPÿPÿPÿPÿOÿOœœÿOœœÿOœœÿNœœÿNœœÿM››ÿM››ÿM››ÿL››ÿKššÿLššÿLššÿKššÿJ™™ÿJ™™ÿJ™™ÿJ™™ÿJ™™ÿJ™™ÿI˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿG——ÿI˜˜ÿH——ÿH——ÿH––ÿG––ÿG––ÿH––ÿH––ÿH––ÿH––ÿI——ÿI——ÿJ––ÿK——ÿJ––ÿJ––ÿL˜˜ÿM™™ÿM™™ÿLššÿLœœÿLÿK ŸÿL¢¢ÿM¥¥ÿOªªÿP¯®ÿT´´ÿR¶¶ûB¹¹Ç%ÙÙfûûEþþGþþIþþJþþIþþGÿÿDÿÿ@ÿÿ<þþ6þþ/þþ)þþ#þþþþþþþþþþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqq vvKCŽŽ¾\ù^  ÿ]ŸŸÿ[ÿYÿXÿVœœÿT››ÿS››ÿQššÿP™™ÿN™™ÿL˜˜ÿJ——ÿK˜˜ÿWžžÿ[  ÿZ  ÿ[  ÿ^¢¢ÿ^¢¢ÿ^¢¢ÿ^¢¢ÿ\¢¢ÿ^££ÿt°°ÿ}µµÿ}´´ÿ}´´ÿ~µµÿ~µµÿ~µµÿ~µµÿ}µµÿr¯¯ÿ[¢¢ÿTžžÿUŸŸÿUŸŸÿSžžÿTžžÿSžžÿSžžÿSžžÿSžžÿSžžÿSŸŸÿSžžÿSžžÿSžžÿSžžÿSžžÿSžžÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿTŸŸÿTŸŸÿSŸŸÿTŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿRžžÿRžžÿRžžÿRžžÿRžžÿRŸŸÿRŸŸÿRžžÿRžžÿRžžÿRžžÿRžžÿQžžÿQžžÿQžžÿQžžÿQÿQžžÿQÿPÿOœœÿNœœÿNœœÿM››ÿM››ÿNœœÿNœœÿM››ÿM››ÿM››ÿLššÿLššÿKššÿKššÿKššÿK™™ÿKššÿJ™™ÿI™™ÿJ™™ÿJ˜˜ÿI˜˜ÿI˜˜ÿI˜˜ÿI˜˜ÿJ˜˜ÿI——ÿH——ÿI——ÿJ——ÿJ——ÿJ——ÿK˜˜ÿL˜˜ÿK˜˜ÿL——ÿL——ÿM——ÿM——ÿN˜˜ÿO™™ÿN™™ÿNššÿN››ÿNœœÿNžžÿN  ÿN¢¢ÿM¥¤ÿN©¨ÿS®®ÿW´³ÿS´´ûD¸¸Æ&ØÕcûûAþþBÿÿDÿÿDÿÿDþþBÿÿ@ÿÿ<þþ8þþ1þþ+þþ&ÿÿ þþþþÿÿþþ ÿÿ þþÿÿÿÿÿÿÿÿÿÿÿÿffxxYEÅ[žžú_  ÿ]ŸŸÿ[žžÿZÿXÿVœœÿU››ÿS››ÿR››ÿPššÿN™™ÿL˜˜ÿJ——ÿO™™ÿZ  ÿ\¡¡ÿ[  ÿ_¢¢ÿ`££ÿ_££ÿ_££ÿ]¢¢ÿc¦¦ÿy³³ÿ}µµÿ}µµÿ}´´ÿµµÿµµÿ~µµÿ}µµÿ}µµÿ~¶¶ÿo­­ÿY¡¡ÿW  ÿW  ÿVŸŸÿUŸŸÿTŸŸÿTŸŸÿSžžÿSŸŸÿSžžÿSŸŸÿSŸŸÿSŸŸÿSžžÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿSŸŸÿT  ÿT  ÿTŸŸÿTŸŸÿU  ÿU  ÿU  ÿU  ÿU  ÿU  ÿU  ÿTŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿQžžÿQÿPÿPÿPœœÿOœœÿOœœÿNœœÿNœœÿNœœÿN››ÿMššÿM››ÿM››ÿLššÿMššÿLššÿLššÿLššÿLššÿLššÿK™™ÿJ˜˜ÿJ˜˜ÿJ™™ÿJ™™ÿK™™ÿK™™ÿJ˜˜ÿJ˜˜ÿK˜˜ÿL˜˜ÿM™™ÿM™™ÿM™™ÿM˜˜ÿM˜˜ÿN˜˜ÿO˜˜ÿO˜˜ÿP™™ÿP™™ÿPššÿQ››ÿP››ÿQœœÿQžžÿRŸŸÿP  ÿM¡ ÿN¤¤ÿR©©ÿT­­ÿV±±ÿT´´úG¶¶Å'ÔÔ`úú<þþ=þþ?ÿÿ@þþ?þþ=þþ;þþ8ÿÿ3þþ-ÿÿ(ÿÿ"þþþþþþÿÿÿÿ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿkk!zzdH’’Ì[ŸŸú^  ÿ]ŸŸÿ[žžÿYžžÿXÿWÿUœœÿS››ÿR››ÿPššÿN™™ÿM˜˜ÿK˜˜ÿSœœÿ\¡¡ÿ\¡¡ÿ_££ÿb¤¤ÿa¤¤ÿa¤¤ÿ_££ÿf§§ÿ{³³ÿ~µµÿ~µµÿ~µµÿµµÿµµÿ~¶¶ÿ~¶¶ÿ~µµÿ¶¶ÿ|´´ÿe¨¨ÿX  ÿX  ÿX  ÿW  ÿW  ÿUŸŸÿUŸŸÿU  ÿUŸŸÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿUŸŸÿU  ÿU  ÿU  ÿU  ÿTŸŸÿTŸŸÿTŸŸÿU  ÿU  ÿU  ÿU  ÿV  ÿV  ÿV  ÿU  ÿU  ÿU  ÿU  ÿU  ÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿSŸŸÿS  ÿT  ÿTŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRÿQžžÿQžžÿPÿOœœÿOœœÿOœœÿOœœÿNœœÿN››ÿNœœÿN››ÿN››ÿN››ÿN››ÿM››ÿN››ÿN››ÿM››ÿLššÿK™™ÿL™™ÿLššÿLššÿLššÿLššÿL™™ÿL™™ÿM™™ÿN™™ÿN™™ÿNššÿN™™ÿN˜˜ÿP™™ÿQššÿQ™™ÿQ™™ÿR™™ÿR™™ÿSššÿS››ÿTœœÿTÿUžžÿTŸžÿPžžÿNžžÿO¡¡ÿO££ÿP¦¦ÿT¬¬ÿY²±ÿX´´úK··Ã,ÒÒ\úú7þþ7þþ9þþ:þþ:þþ9þþ6þþ2þþ.þþ)þþ$þþþþþþÿÿþþ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ jj!yykK““Ï]žžû^  ÿ]ŸŸÿ[žžÿZÿXÿWÿUœœÿTœœÿR››ÿPššÿO™™ÿM˜˜ÿM˜˜ÿUžžÿ]¢¢ÿ^££ÿb¤¤ÿc¥¥ÿc¥¥ÿa¤¤ÿf§§ÿ{³³ÿ€¶¶ÿ€¶¶ÿ€¶¶ÿ€¶¶ÿ¶¶ÿ¶¶ÿ¶¶ÿ¶¶ÿ~µµÿ~¶¶ÿp®®ÿZ¡¡ÿY¡¡ÿY¡¡ÿX  ÿX  ÿW  ÿX  ÿW  ÿW  ÿV  ÿU  ÿV  ÿV  ÿU  ÿV  ÿV  ÿU  ÿU  ÿU  ÿU  ÿU  ÿUŸŸÿU  ÿV  ÿV  ÿV  ÿV  ÿV  ÿV  ÿV  ÿV  ÿU  ÿU  ÿU  ÿU  ÿU  ÿU  ÿU  ÿU  ÿU  ÿU  ÿT  ÿT  ÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿSŸŸÿSŸŸÿSŸŸÿSžžÿSžžÿSŸŸÿSŸŸÿSžžÿRžžÿRžžÿRžžÿQÿQÿPÿPÿPÿOœœÿPœœÿOœœÿOœœÿNœœÿOœœÿOœœÿNœœÿNœœÿNœœÿN››ÿMššÿMššÿMššÿMššÿMššÿM››ÿN››ÿNššÿNššÿNššÿNššÿOššÿPššÿPššÿQššÿQššÿRššÿR™™ÿSššÿSššÿT››ÿU››ÿVœœÿVÿWÿWŸŸÿUžžÿQœœÿQžžÿPžžÿNŸŸÿO¢¢ÿS§§ÿX¬¬ÿ]²±ÿ\´´úQµµÀ-ÑÑTùù1þþ2þþ4þþ5þþ4ÿÿ3ÿÿ0þþ-þþ)þþ%þþ!þþþþþþÿÿþþ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿ gg$yyqK’’Ô^žžü_  ÿ]ŸŸÿ\žžÿZžžÿXÿWÿUÿTœœÿR››ÿQššÿO™™ÿM˜˜ÿN™™ÿXŸŸÿ^££ÿa¤¤ÿd¦¦ÿd¥¥ÿb¤¤ÿd¥¥ÿw±±ÿ¶¶ÿ¶¶ÿ··ÿ··ÿ€¶¶ÿ€¶¶ÿ¶¶ÿ¶¶ÿ~µµÿ~µµÿr®®ÿ\¢¢ÿ[¡¡ÿ[¢¢ÿZ¢¢ÿY¡¡ÿY¡¡ÿY¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿW  ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿV  ÿV  ÿV¡¡ÿV¡¡ÿW  ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿV  ÿV  ÿV  ÿV  ÿU  ÿU  ÿV  ÿV  ÿV¡¡ÿV  ÿV  ÿU  ÿU  ÿU  ÿU  ÿU  ÿUŸŸÿU  ÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿSŸŸÿSŸŸÿSŸŸÿSžžÿRžžÿSžžÿRžžÿQžžÿQÿQÿQÿQÿPÿPœœÿOœœÿOœœÿOœœÿOœœÿNœœÿOœœÿOœœÿO››ÿN››ÿN››ÿN››ÿOœœÿPœœÿO››ÿO››ÿO››ÿPššÿQ››ÿQ››ÿR››ÿR››ÿRššÿSššÿTššÿU››ÿU››ÿVœœÿWœœÿWœœÿXÿYŸŸÿXžžÿTœœÿSœœÿRœœÿPœœÿNÿPŸŸÿR¢¢ÿW§§ÿ\¬¬ÿa±±ÿ^²²ô:®®ÕÕ7þþ+þþ-þþ/þþ.þþ.þþ-þþ+ÿÿ(þþ$þþ!þþÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnn%zzuO––Ù^ŸŸý_  ÿ^  ÿ\ŸŸÿZžžÿYžžÿWÿVÿTœœÿS››ÿRššÿPššÿM™™ÿPššÿZ  ÿ`¤¤ÿd¦¦ÿe¦¦ÿd¥¥ÿc¥¥ÿn¬¬ÿµµÿ··ÿ¶¶ÿ··ÿ··ÿ··ÿ€¶¶ÿ¶¶ÿ¶¶ÿ~µµÿn¬¬ÿ]££ÿ]££ÿ\££ÿ\¢¢ÿ[¢¢ÿ[¢¢ÿZ¢¢ÿZ¡¡ÿY¡¡ÿY¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿY¡¡ÿY¡¡ÿX¡¡ÿX¡¡ÿW¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿX¡¡ÿW¡¡ÿV  ÿV¡¡ÿV  ÿV  ÿV¡¡ÿV¡¡ÿV  ÿV  ÿV  ÿV  ÿU  ÿU  ÿU  ÿU  ÿU  ÿU  ÿUŸŸÿTŸŸÿTŸŸÿTŸŸÿSŸŸÿRžžÿRžžÿRžžÿRžžÿRÿQžžÿRÿQÿPÿQÿPÿPÿPÿQÿPÿPœœÿQœœÿQœœÿQœœÿRÿQœœÿQœœÿQœœÿRœœÿSœœÿSœœÿSœœÿS››ÿS››ÿT››ÿVœœÿWÿWœœÿWÿXÿYÿZžžÿ[žžÿWÿT››ÿTœœÿR››ÿP››ÿQœœÿRÿS  ÿU££ÿY§§ÿ[ªªúL¥¥ÈžžoÄÄ4÷÷$þþ%þþ'ÿÿ(ÿÿ(ÿÿ(þþ'þþ%ÿÿ"þþþþÿÿÿÿÿÿþþ ÿÿ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿjj+€€{Q––Ü^  ý`¡¡ÿ^  ÿ]ŸŸÿ[žžÿYžžÿXžžÿVÿTœœÿSœœÿR››ÿQššÿOššÿQ››ÿ[¡¡ÿc¥¥ÿf¦¦ÿe¦¦ÿe¦¦ÿg§§ÿu¯¯ÿ¶¶ÿ‚··ÿ‚··ÿ‚··ÿ··ÿ€¶¶ÿ¶¶ÿ€¶¶ÿ{³³ÿf¨¨ÿ^££ÿ^££ÿ]££ÿ]££ÿ\££ÿ\££ÿ\££ÿ\¢¢ÿ\¢¢ÿ[¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿY¢¢ÿY¡¡ÿY¡¡ÿY¡¡ÿY¡¡ÿY¡¡ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿX¡¡ÿY¢¢ÿY¢¢ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿY¡¡ÿY¢¢ÿY¢¢ÿY¡¡ÿX¢¢ÿY¢¢ÿY¡¡ÿX¢¢ÿX¡¡ÿW¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿV  ÿV  ÿV  ÿV  ÿV  ÿV  ÿV  ÿU  ÿTŸŸÿTŸŸÿSŸŸÿTŸŸÿTŸŸÿSŸŸÿSžžÿSžžÿSžžÿRžžÿRžžÿRžžÿRžžÿRÿRžžÿSžžÿRžžÿRÿRÿRÿSÿSžžÿSÿSÿTžžÿUÿUÿUœœÿUÿUœœÿVÿVÿXÿYžžÿXÿYžžÿZžžÿ[ŸŸÿ\ŸŸÿ[žžÿV››ÿU››ÿT››ÿRššÿS››ÿSœœÿTÿUŸžÿU  ÿU¡¡ûFššÎ‹‹u­­/õõþþþþþþþþ!ÿÿ"þþ#ÿÿ"þþ!þþþþþþþþÿÿÿÿþþ ÿÿ ÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿll!*~Q——Ü`  ýa¡¡ÿ_  ÿ^ŸŸÿ\ŸŸÿZŸŸÿXžžÿVÿUÿTœœÿS››ÿR››ÿOššÿR››ÿ\¡¡ÿd¦¦ÿg§§ÿg§§ÿe¦¦ÿh¨¨ÿu¯¯ÿµµÿ‚··ÿ‚··ÿ‚··ÿ··ÿ€¶¶ÿµµÿn¬¬ÿa¤¤ÿ`¤¤ÿ`¤¤ÿ^££ÿ_¤¤ÿ]££ÿ]££ÿ]££ÿ^¤¤ÿ]¤¤ÿ]¤¤ÿ\££ÿ]££ÿ\££ÿ\££ÿ[££ÿZ££ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ££ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿY¢¢ÿZ¢¢ÿZ¢¢ÿY¢¢ÿZ¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿV  ÿU  ÿTŸŸÿU  ÿUŸŸÿTŸŸÿTŸŸÿUŸŸÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿSžžÿTŸŸÿUŸŸÿUŸŸÿTžžÿTžžÿTžžÿTžžÿUŸŸÿUŸŸÿUŸŸÿUŸŸÿVŸŸÿVžžÿVÿWÿWžžÿXžžÿYžžÿYžžÿYžžÿYžžÿZžžÿ[ŸŸÿ\ŸŸÿ\  ÿ]  ÿXÿV››ÿTššÿS™™ÿSššÿT››ÿUœœÿVÿWžžÿUžžúB““Ðz-ááÿÿþþþþÿÿþþþþþþþþþþþþþþþþÿÿþþÿÿþþ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿii"*~Q––Ü`  ýa¡¡ÿ_¡¡ÿ^  ÿ\ŸŸÿ[ŸŸÿYžžÿWÿVÿTœœÿSœœÿR››ÿQššÿTœœÿ^¢¢ÿf§§ÿh¨¨ÿg§§ÿf§§ÿg§§ÿo¬¬ÿw°°ÿ{³³ÿ~µµÿ|´´ÿx²²ÿn¬¬ÿb¦¦ÿa¥¥ÿa¥¥ÿa¥¥ÿ`¤¤ÿ`¤¤ÿ`¤¤ÿ`¤¤ÿ_¤¤ÿ_¤¤ÿ_¤¤ÿ_¤¤ÿ^¤¤ÿ_¤¤ÿ^¤¤ÿ]¤¤ÿ]¤¤ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ[££ÿ[¢¢ÿ[¢¢ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[¢¢ÿ[¢¢ÿZ¢¢ÿZ¢¢ÿY¢¢ÿZ¢¢ÿZ¢¢ÿY¡¡ÿY¢¢ÿY¢¢ÿY¢¢ÿX¡¡ÿY¡¡ÿX¡¡ÿX¡¡ÿY¢¢ÿX¢¢ÿW¡¡ÿW¡¡ÿW  ÿW¡¡ÿW  ÿV  ÿV  ÿV  ÿV  ÿV  ÿV  ÿV  ÿV  ÿVŸŸÿV  ÿV  ÿUŸŸÿUŸŸÿVŸŸÿVŸŸÿVŸŸÿW  ÿVŸŸÿVŸŸÿVŸŸÿVŸŸÿWžžÿWžžÿYžžÿYŸŸÿYŸŸÿ[ŸŸÿ[ŸŸÿ[ŸŸÿ[ŸŸÿ\ŸŸÿ\  ÿ^  ÿ^  ÿ[ŸŸÿWœœÿTššÿR™™ÿT™™ÿU››ÿV››ÿWœœÿXžžÿVœœúC‘‘Ízzyyy*ÐÐ ÿÿ þþ þþ ÿÿÿÿþþÿÿþþþþþþþþþþÿÿþþÿÿþþÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUUee#&||}N””Ù`ŸŸüa¡¡ÿ`  ÿ^  ÿ]  ÿ[ŸŸÿYžžÿXžžÿWÿVÿTœœÿS››ÿQ››ÿUÿ_££ÿg¨¨ÿj©©ÿi¨¨ÿh¨¨ÿh¨¨ÿh¨¨ÿj¨¨ÿk©©ÿi©©ÿg¨¨ÿd¦¦ÿc¦¦ÿc¦¦ÿb¥¥ÿc¦¦ÿb¥¥ÿa¥¥ÿa¥¥ÿb¥¥ÿa¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ_¥¥ÿ`¥¥ÿ`¥¥ÿ_¥¥ÿ_¥¥ÿ_¤¤ÿ^¤¤ÿ^¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]££ÿ\££ÿ\££ÿ[££ÿ[££ÿ\££ÿ[££ÿ[££ÿ[££ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ[££ÿ\££ÿ\££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[¢¢ÿ[££ÿ[££ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿ[££ÿ[¢¢ÿZ¢¢ÿY¢¢ÿY¢¢ÿZ¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿW¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿW¡¡ÿW  ÿW  ÿW¡¡ÿW  ÿW  ÿX¡¡ÿX¡¡ÿX  ÿY¡¡ÿX  ÿX  ÿX  ÿXŸŸÿYŸŸÿYŸŸÿZŸŸÿ[  ÿ[  ÿ]  ÿ]¡¡ÿ\  ÿ]  ÿ]  ÿ^¡¡ÿ_¡¡ÿ]  ÿYÿU››ÿSššÿTššÿU››ÿVœœÿWœœÿYÿU››÷@ŽŽÆxxrrr&ÔÔÿÿÿÿþþþþ ÿÿ ÿÿ þþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ ÿÿ þþ þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUUll!$||wK’’Ô`  ûb¡¡ÿ`  ÿ^  ÿ^¡¡ÿ\  ÿZŸŸÿXžžÿWžžÿVÿUÿTœœÿR››ÿVÿa¤¤ÿi¨¨ÿk©©ÿkªªÿj©©ÿi¨¨ÿh¨¨ÿh¨¨ÿg§§ÿg§§ÿf§§ÿe§§ÿe§§ÿe§§ÿe§§ÿc¦¦ÿc¦¦ÿc¦¦ÿc¦¦ÿb¦¦ÿb¦¦ÿa¥¥ÿa¥¥ÿa¥¥ÿa¦¦ÿa¦¦ÿa¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ_¥¥ÿ_¥¥ÿ_¤¤ÿ^¤¤ÿ_¥¥ÿ_¤¤ÿ^¤¤ÿ^¤¤ÿ]¤¤ÿ]¤¤ÿ]££ÿ\££ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ\¤¤ÿ]¤¤ÿ^¤¤ÿ]££ÿ]££ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ\¤¤ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[¢¢ÿ[¢¢ÿZ££ÿZ££ÿZ¢¢ÿ[¢¢ÿZ¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿZ¢¢ÿZ¢¢ÿY¢¢ÿY¢¢ÿY¡¡ÿX¡¡ÿX¡¡ÿY¡¡ÿY¢¢ÿZ¢¢ÿY¢¢ÿY¡¡ÿZ¢¢ÿZ¡¡ÿZ¡¡ÿ[¡¡ÿZ  ÿ[  ÿ[  ÿ\  ÿ\  ÿ^¡¡ÿ^¡¡ÿ^¡¡ÿ]  ÿ^¡¡ÿ_¡¡ÿ`¢¢ÿ^¡¡ÿYžžÿVœœÿTššÿT››ÿU››ÿVœœÿXœœÿXÿUššõ<‹‹¾uuhjjÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿ ÿÿ þþ ÿÿ ÿÿ ÿÿ þþ þþ ÿÿ þþ ÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿff"zznJ’’Í^  úb¡¡ÿa¡¡ÿ`¡¡ÿ_¡¡ÿ]  ÿ[  ÿYŸŸÿXžžÿWžžÿVÿTœœÿS››ÿVÿa££ÿk©©ÿlªªÿkªªÿkªªÿk©©ÿj©©ÿj¨¨ÿi¨¨ÿh¨¨ÿh¨¨ÿh¨¨ÿg§§ÿf¨¨ÿe§§ÿe§§ÿd¦¦ÿd§§ÿd§§ÿd§§ÿc¦¦ÿb¥¥ÿb¦¦ÿb¦¦ÿb¦¦ÿb¦¦ÿb¦¦ÿa¦¦ÿa¦¦ÿa¥¥ÿa¥¥ÿa¥¥ÿ`¥¥ÿ`¥¥ÿa¥¥ÿ`¥¥ÿ`¥¥ÿ_¥¥ÿ_¥¥ÿ_¤¤ÿ^¤¤ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ^¤¤ÿ^¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ^¥¥ÿ^¤¤ÿ^¤¤ÿ^¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]££ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]££ÿ\££ÿ\££ÿ\££ÿ\££ÿ[££ÿ\££ÿ[££ÿ[££ÿZ££ÿZ¢¢ÿZ¢¢ÿ[¢¢ÿ[¢¢ÿ[¢¢ÿ[££ÿ[¢¢ÿ[££ÿ[¢¢ÿZ¢¢ÿ[¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿ[¢¢ÿ\££ÿ\££ÿ\¢¢ÿ]¢¢ÿ]¡¡ÿ]¡¡ÿ]¡¡ÿ]¡¡ÿ^¡¡ÿ_¢¢ÿ^¢¢ÿ^¢¢ÿ_¢¢ÿ`¢¢ÿ`¢¢ÿ`¡¡ÿ[ŸŸÿVœœÿT››ÿU››ÿVœœÿWœœÿXÿYÿSššñ:‰‰¶rr`kkUUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ee!yycFÃ]öb¡¡ÿa¢¢ÿ`¢¢ÿ_¡¡ÿ^¡¡ÿ\  ÿZŸŸÿYŸŸÿXžžÿVÿUÿTœœÿVÿ`££ÿkªªÿm««ÿlªªÿlªªÿkªªÿkªªÿj©©ÿj¨¨ÿi¨¨ÿi©©ÿh¨¨ÿh¨¨ÿg¨¨ÿg¨¨ÿf§§ÿf§§ÿe§§ÿe§§ÿe§§ÿd¦¦ÿd§§ÿc§§ÿc§§ÿc¦¦ÿc§§ÿc§§ÿc§§ÿb¦¦ÿb¦¦ÿb¦¦ÿb¦¦ÿa¦¦ÿb¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ`¦¦ÿ`¦¦ÿ`¦¦ÿ`¦¦ÿ`¦¦ÿ`¦¦ÿ`¥¥ÿ`¥¥ÿ_¥¥ÿ_¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ^¥¥ÿ^¤¤ÿ^¥¥ÿ^¥¥ÿ_¥¥ÿ^¤¤ÿ^¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ\¤¤ÿ\££ÿ[££ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ\££ÿ[££ÿ[££ÿ\££ÿ]££ÿ]££ÿ]££ÿ]¢¢ÿ^¢¢ÿ^¢¢ÿ_¢¢ÿ_¢¢ÿ^¢¢ÿ`££ÿ`££ÿ_££ÿ`££ÿa££ÿb££ÿa¢¢ÿ[ŸŸÿV››ÿU››ÿU››ÿVœœÿXÿYÿXœœþQ——ë4‡‡©ssThhÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿkkvvRBŽŽµ[ób¢¢ÿa¢¢ÿ`¡¡ÿ_¡¡ÿ^¡¡ÿ\  ÿ[  ÿYŸŸÿXŸŸÿWžžÿVÿTœœÿUÿ`¤¤ÿlªªÿn««ÿn««ÿl««ÿlªªÿlªªÿkªªÿj©©ÿj©©ÿi©©ÿi©©ÿi©©ÿi©©ÿi©©ÿh¨¨ÿg¨¨ÿf§§ÿf¨¨ÿf¨¨ÿe¨¨ÿd§§ÿe§§ÿe§§ÿd§§ÿd§§ÿd§§ÿc§§ÿc§§ÿd§§ÿc§§ÿc¦¦ÿc¦¦ÿc¦¦ÿc¦¦ÿb¦¦ÿc§§ÿc§§ÿb¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿb¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿ`¦¦ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ^¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ^¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ^¥¥ÿ^¤¤ÿ^¥¥ÿ^¤¤ÿ^¤¤ÿ^¤¤ÿ^¤¤ÿ^¤¤ÿ]¤¤ÿ\££ÿ]¤¤ÿ^¤¤ÿ^¤¤ÿ^¤¤ÿ^¤¤ÿ^¤¤ÿ_¤¤ÿ^¤¤ÿ^££ÿ^££ÿ_££ÿ_££ÿ`££ÿ`££ÿ`££ÿ`££ÿa££ÿa££ÿa££ÿb¤¤ÿc¤¤ÿb¤¤ÿ\  ÿVœœÿU››ÿVœœÿWœœÿXÿYžžÿXœœüK••Ü+‚‚“ppDffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿjj yyA@ŒŒ¥X››ê`¡¡þb¢¢ÿa¡¡ÿ`¡¡ÿ_¡¡ÿ]  ÿ[  ÿZŸŸÿXŸŸÿXžžÿVÿUœœÿVÿ_££ÿkªªÿo¬¬ÿn¬¬ÿm««ÿm««ÿm««ÿlªªÿlªªÿkªªÿk©©ÿk©©ÿj©©ÿjªªÿj©©ÿi©©ÿh¨¨ÿh¨¨ÿh¨¨ÿg¨¨ÿf¨¨ÿg¨¨ÿf¨¨ÿf¨¨ÿf¨¨ÿf¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe§§ÿe¨¨ÿe§§ÿe§§ÿd§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc§§ÿb§§ÿb§§ÿb§§ÿb§§ÿc§§ÿc§§ÿb§§ÿb§§ÿb§§ÿb§§ÿb¦¦ÿb§§ÿb§§ÿb§§ÿb§§ÿa¦¦ÿ`¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿ`¦¦ÿa¦¦ÿa¦¦ÿ`¦¦ÿ`¦¦ÿ`¦¦ÿa¦¦ÿ`¦¦ÿ`¦¦ÿ`¦¦ÿ`¦¦ÿ`¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ_¤¤ÿ_¤¤ÿ`££ÿ`¤¤ÿa¤¤ÿ`££ÿ`££ÿa££ÿa¤¤ÿb¤¤ÿb¤¤ÿc¤¤ÿd¥¥ÿc¤¤ÿ\  ÿVœœÿUœœÿVœœÿXÿYÿYžžÿWœœúE‘‘Ð"||}mm1__ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmmtt.4„„ƒN••Ó_  úb¢¢ÿa¢¢ÿ`¢¢ÿ_¡¡ÿ]¡¡ÿ\¡¡ÿZŸŸÿYŸŸÿXŸŸÿWžžÿVÿVžžÿ]¢¢ÿj©©ÿo¬¬ÿo¬¬ÿn««ÿn¬¬ÿn¬¬ÿn««ÿm««ÿmªªÿlªªÿkªªÿkªªÿkªªÿjªªÿjªªÿj©©ÿi©©ÿi©©ÿi©©ÿh©©ÿh©©ÿh©©ÿg¨¨ÿg¨¨ÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿf©©ÿf©©ÿf¨¨ÿe¨¨ÿe¨¨ÿd¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿd¨¨ÿc§§ÿc§§ÿd¨¨ÿc§§ÿd¨¨ÿd§§ÿc¨¨ÿc§§ÿc§§ÿb§§ÿb§§ÿb§§ÿc§§ÿc§§ÿc§§ÿb§§ÿb§§ÿb§§ÿb§§ÿb§§ÿb¦¦ÿb¦¦ÿb¦¦ÿa¦¦ÿb¦¦ÿb¦¦ÿb¦¦ÿb¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿ`¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿ`¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¥¥ÿa¥¥ÿa¥¥ÿa¤¤ÿb¥¥ÿb¥¥ÿa¤¤ÿa¤¤ÿb¤¤ÿc¥¥ÿc¥¥ÿd¥¥ÿe¦¦ÿc¤¤ÿ[  ÿVœœÿVœœÿWÿXÿYžžÿYžžÿTššôAÃxxlmm#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUU mm%||^G‘‘º\žžõb¡¡ÿb¢¢ÿa¢¢ÿ`¢¢ÿ^¢¢ÿ]¡¡ÿ[  ÿZ  ÿYŸŸÿXžžÿWžžÿVÿ[¡¡ÿg¨¨ÿp¬¬ÿo­­ÿo­­ÿo¬¬ÿp¬¬ÿo¬¬ÿn««ÿn««ÿm««ÿlªªÿlªªÿl««ÿk««ÿk««ÿkªªÿkªªÿjªªÿjªªÿiªªÿiªªÿiªªÿiªªÿhªªÿiªªÿhªªÿhªªÿhªªÿhªªÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿf©©ÿf©©ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿd¨¨ÿd¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿd¨¨ÿd§§ÿd§§ÿd¨¨ÿd¨¨ÿd¨¨ÿc¨¨ÿc§§ÿc§§ÿc§§ÿc§§ÿd§§ÿc§§ÿc§§ÿc§§ÿc§§ÿb§§ÿc§§ÿb§§ÿc§§ÿc§§ÿc§§ÿb§§ÿc§§ÿc§§ÿb§§ÿb§§ÿb§§ÿb§§ÿc§§ÿc§§ÿc¦¦ÿb¥¥ÿc¥¥ÿc¥¥ÿc¥¥ÿc¥¥ÿc¥¥ÿd¥¥ÿd¥¥ÿe¦¦ÿe¦¦ÿe¦¦ÿb¤¤ÿZŸŸÿUœœÿVœœÿXÿYžžÿZžžÿYüM——å4‡‡¦ssVnnÿÿÿÿÿÿÿÿÿÿffyyC?ŒŒ Tššá`¡¡ûb££ÿa¢¢ÿ`¢¢ÿ_¡¡ÿ^¡¡ÿ]¡¡ÿ[  ÿZ  ÿYžžÿXžžÿVÿYžžÿd¥¥ÿo¬¬ÿr­­ÿp¬¬ÿp­­ÿp­­ÿp¬¬ÿo¬¬ÿo¬¬ÿn««ÿn««ÿn««ÿm««ÿl««ÿl««ÿl««ÿkªªÿkªªÿkªªÿjªªÿjªªÿjªªÿjªªÿjªªÿjªªÿjªªÿjªªÿiªªÿiªªÿiªªÿhªªÿh©©ÿh©©ÿh©©ÿg©©ÿh©©ÿh©©ÿh©©ÿg©©ÿgªªÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿf©©ÿg©©ÿf©©ÿf©©ÿf©©ÿf¨¨ÿe¨¨ÿf¨¨ÿf©©ÿf¨¨ÿe¨¨ÿf¨¨ÿf©©ÿe¨¨ÿf¨¨ÿf¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿd¨¨ÿd¨¨ÿd¨¨ÿd¨¨ÿd¨¨ÿd¨¨ÿd¨¨ÿd¨¨ÿe¨¨ÿd¨¨ÿc§§ÿd§§ÿd§§ÿc§§ÿd§§ÿe¨¨ÿe§§ÿd¦¦ÿd¥¥ÿd¦¦ÿd¦¦ÿe¦¦ÿe¦¦ÿe¦¦ÿe¦¦ÿf¦¦ÿe¦¦ÿ_¢¢ÿXžžÿVÿWÿXžžÿZžžÿZžžÿV››öD‘‘Ì&}}† oo>mmmmrr&,€€mI““Ã[ŸŸòb¡¡ÿb¢¢ÿa¢¢ÿ`££ÿ^¢¢ÿ]¡¡ÿ\¡¡ÿ[  ÿZ  ÿYŸŸÿWžžÿWžžÿ`££ÿn««ÿr­­ÿq­­ÿq­­ÿq­­ÿq­­ÿp­­ÿp­­ÿp¬¬ÿo¬¬ÿn««ÿo¬¬ÿo¬¬ÿn¬¬ÿn¬¬ÿm¬¬ÿl««ÿl««ÿl««ÿk««ÿk««ÿk««ÿk««ÿk««ÿk««ÿk««ÿk««ÿjªªÿjªªÿiªªÿiªªÿjªªÿiªªÿiªªÿiªªÿiªªÿiªªÿiªªÿhªªÿhªªÿhªªÿhªªÿhªªÿhªªÿhªªÿhªªÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿf©©ÿg©©ÿf©©ÿg©©ÿf©©ÿf©©ÿf©©ÿf¨¨ÿf©©ÿf©©ÿf©©ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿf©©ÿf¨¨ÿf©©ÿf©©ÿe¨¨ÿe¨¨ÿe§§ÿe¨¨ÿe§§ÿf§§ÿf§§ÿe¦¦ÿe¦¦ÿe¦¦ÿf§§ÿg§§ÿg§§ÿg§§ÿf¦¦ÿe¥¥ÿ]¡¡ÿWÿVÿXžžÿXžžÿYžžÿZþQ˜˜ê9ŠŠ±vvcee#qqvvG;ŠŠ›S™™ß`  ûb££ÿa££ÿ`££ÿ_££ÿ^¢¢ÿ]¡¡ÿ]¡¡ÿ[  ÿZŸŸÿXŸŸÿWžžÿ^¡¡ÿk©©ÿr®®ÿs®®ÿr®®ÿq­­ÿr®®ÿq­­ÿq­­ÿq­­ÿp¬¬ÿp¬¬ÿp­­ÿp­­ÿp­­ÿo­­ÿo¬¬ÿn¬¬ÿn¬¬ÿm¬¬ÿm««ÿl««ÿl««ÿl««ÿl««ÿl««ÿl¬¬ÿl««ÿl««ÿl««ÿl¬¬ÿl¬¬ÿk««ÿk««ÿk««ÿj««ÿk««ÿj««ÿi««ÿj««ÿi««ÿiªªÿiªªÿiªªÿiªªÿiªªÿiªªÿiªªÿiªªÿiªªÿhªªÿh©©ÿhªªÿhªªÿhªªÿhªªÿg©©ÿg©©ÿf©©ÿh©©ÿh©©ÿgªªÿg©©ÿgªªÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿg©©ÿf©©ÿf©©ÿg©©ÿg©©ÿg©©ÿf§§ÿg¨¨ÿg¨¨ÿg§§ÿg§§ÿf§§ÿf§§ÿg§§ÿg§§ÿg¨¨ÿh¨¨ÿh¨¨ÿg§§ÿb¤¤ÿ[  ÿWÿWžžÿXžžÿYžžÿYžžÿWœœùJ””×*‚‚ppDkkmmoo',lH‘‘¿Zœœïa¢¢ýb££ÿa££ÿ`££ÿ_¢¢ÿ^¢¢ÿ]¡¡ÿ\¡¡ÿ\  ÿZ  ÿXŸŸÿ\  ÿg§§ÿr­­ÿt¯¯ÿs®®ÿr®®ÿr®®ÿr®®ÿr®®ÿr®®ÿr­­ÿq­­ÿq­­ÿq­­ÿp­­ÿp­­ÿp­­ÿp­­ÿp­­ÿo¬¬ÿn¬¬ÿn¬¬ÿm««ÿm¬¬ÿm««ÿm¬¬ÿm¬¬ÿm¬¬ÿm¬¬ÿm¬¬ÿm¬¬ÿm¬¬ÿm¬¬ÿl¬¬ÿk¬¬ÿk¬¬ÿl¬¬ÿk¬¬ÿk¬¬ÿk¬¬ÿk««ÿk««ÿk««ÿj««ÿj««ÿj««ÿj««ÿj««ÿi««ÿiªªÿiªªÿiªªÿi««ÿi««ÿiªªÿiªªÿiªªÿhªªÿiªªÿi««ÿi««ÿhªªÿi««ÿiªªÿiªªÿh©©ÿh©©ÿh©©ÿh©©ÿg©©ÿg©©ÿh©©ÿh©©ÿh©©ÿh¨¨ÿh©©ÿh¨¨ÿh¨¨ÿg§§ÿg¨¨ÿh¨¨ÿh¨¨ÿi¨¨ÿi¨¨ÿh¨¨ÿf§§ÿ`££ÿYŸŸÿWÿXžžÿYžžÿYŸŸÿXûN––ä7ŠŠ²{{kii)mmiiss>4††‡O––Ñ^ŸŸöc¢¢þc££ÿa££ÿ`££ÿ`££ÿ^¢¢ÿ]¡¡ÿ\¡¡ÿ\¡¡ÿ[  ÿ[  ÿb¤¤ÿm««ÿs®®ÿu¯¯ÿt¯¯ÿt¯¯ÿt¯¯ÿt¯¯ÿs®®ÿs®®ÿr®®ÿr®®ÿr®®ÿq®®ÿq®®ÿq­­ÿq­­ÿp­­ÿp­­ÿp­­ÿp­­ÿo­­ÿo­­ÿo­­ÿo­­ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿm­­ÿm­­ÿm­­ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿk¬¬ÿk««ÿk¬¬ÿk««ÿk¬¬ÿk¬¬ÿk««ÿk««ÿk««ÿj««ÿk««ÿj««ÿj««ÿj««ÿj««ÿj««ÿj««ÿj««ÿiªªÿiªªÿiªªÿiªªÿiªªÿiªªÿiªªÿjªªÿi©©ÿi©©ÿi©©ÿi©©ÿi¨¨ÿh¨¨ÿi©©ÿj©©ÿj©©ÿi¨¨ÿc¥¥ÿ[¡¡ÿWžžÿXžžÿXžžÿYŸŸÿYžžþS››ð?Â"}}~ qq?kk kk$zzS@ŸS˜˜Û^ŸŸùb££ÿb¤¤ÿa¤¤ÿ`££ÿ^¢¢ÿ^¢¢ÿ]¡¡ÿ]¡¡ÿ\¡¡ÿ[  ÿ]¢¢ÿf§§ÿp¬¬ÿt¯¯ÿu°°ÿt¯¯ÿu¯¯ÿt¯¯ÿt¯¯ÿs¯¯ÿs®®ÿs®®ÿs¯¯ÿs¯¯ÿr®®ÿr®®ÿr®®ÿr®®ÿr®®ÿr®®ÿr®®ÿq®®ÿq®®ÿq®®ÿp­­ÿp­­ÿp®®ÿp®®ÿo­­ÿo®®ÿo®®ÿp®®ÿo®®ÿn®®ÿo®®ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿm­­ÿm­­ÿm­­ÿm­­ÿm¬¬ÿm­­ÿm¬¬ÿm¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿk¬¬ÿk¬¬ÿk¬¬ÿk¬¬ÿk¬¬ÿk««ÿl¬¬ÿk¬¬ÿk««ÿk««ÿk««ÿkªªÿk««ÿk««ÿkªªÿj©©ÿj©©ÿj©©ÿj©©ÿk©©ÿj©©ÿkªªÿkªªÿf§§ÿ^¢¢ÿYŸŸÿXžžÿXžžÿYŸŸÿZžžÿXøK––Ù0††šttSii__nn%(||^D‘‘¬Xœœç`¡¡ûb££ÿa££ÿ`££ÿ_££ÿ_¢¢ÿ^¢¢ÿ]¡¡ÿ]¡¡ÿ[  ÿ[  ÿ`¢¢ÿh¨¨ÿq­­ÿt¯¯ÿv¯¯ÿu°°ÿu°°ÿt°°ÿt¯¯ÿt¯¯ÿu¯¯ÿu¯¯ÿt¯¯ÿt¯¯ÿt¯¯ÿs¯¯ÿs¯¯ÿs®®ÿs¯¯ÿr®®ÿs®®ÿr®®ÿq®®ÿr®®ÿr®®ÿr®®ÿq®®ÿq®®ÿp®®ÿp®®ÿp®®ÿp®®ÿp®®ÿo®®ÿo®®ÿo®®ÿo­­ÿo­­ÿo®®ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿm­­ÿm­­ÿm­­ÿm¬¬ÿm¬¬ÿm­­ÿm¬¬ÿm­­ÿm¬¬ÿm¬¬ÿm¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿm¬¬ÿl¬¬ÿm¬¬ÿm¬¬ÿm¬¬ÿl««ÿlªªÿl««ÿkªªÿkªªÿkªªÿkªªÿkªªÿlªªÿlªªÿlªªÿh¨¨ÿa¤¤ÿZ  ÿXžžÿXŸŸÿZŸŸÿZŸŸÿVœœùO˜˜æ=³{{i nn.ss \\ tt.2……oH‘‘¶Xœœç^¡¡úa££ÿa££ÿa££ÿ_££ÿ_¢¢ÿ^¢¢ÿ^¢¢ÿ\¡¡ÿ\  ÿ\¡¡ÿ`££ÿh¨¨ÿp¬¬ÿu°°ÿw±±ÿw±±ÿv°°ÿv°°ÿu°°ÿu°°ÿu°°ÿu°°ÿu°°ÿt¯¯ÿt¯¯ÿt¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿr®®ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿq¯¯ÿq®®ÿp®®ÿp®®ÿp®®ÿp®®ÿp®®ÿp®®ÿp®®ÿp®®ÿo®®ÿo­­ÿn­­ÿo­­ÿo­­ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿn­­ÿm­­ÿm­­ÿm¬¬ÿn¬¬ÿm¬¬ÿm¬¬ÿm««ÿm««ÿm««ÿlªªÿl««ÿl««ÿl««ÿn««ÿlªªÿh¨¨ÿb¤¤ÿ[  ÿXŸŸÿXŸŸÿZ  ÿZ  ÿYžžûP™™ä:ŒŒ²#~~yss>qqmmzz01††lB©R™™Û^  øb¤¤ÿa¤¤ÿ`££ÿ`££ÿ_££ÿ_££ÿ^¢¢ÿ]¡¡ÿ\¡¡ÿ\¡¡ÿ`¤¤ÿf§§ÿn¬¬ÿt¯¯ÿw±±ÿx±±ÿw±±ÿv°°ÿv°°ÿu°°ÿu°°ÿu°°ÿu°°ÿu°°ÿt°°ÿt¯¯ÿt°°ÿt°°ÿt¯¯ÿt¯¯ÿt¯¯ÿt¯¯ÿt°°ÿt°°ÿs°°ÿs°°ÿs¯¯ÿs¯¯ÿs¯¯ÿs°°ÿs°°ÿs¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿq¯¯ÿq®®ÿq®®ÿp®®ÿp®®ÿp®®ÿp®®ÿp®®ÿp®®ÿo­­ÿo®®ÿp®®ÿp­­ÿo­­ÿo­­ÿo­­ÿn­­ÿn­­ÿn­­ÿo­­ÿo¬¬ÿn¬¬ÿo¬¬ÿn¬¬ÿn¬¬ÿn««ÿo¬¬ÿo¬¬ÿm««ÿh¨¨ÿa££ÿ[  ÿXŸŸÿYŸŸÿYŸŸÿZ  ÿWžžúO™™ç@½'z rr<hhbb oo)$~~aD‘‘³Xœœça¢¢üb££ÿa££ÿa££ÿ`££ÿ`££ÿ_¢¢ÿ^¢¢ÿ]¡¡ÿ\¡¡ÿ\¡¡ÿ_¢¢ÿc¥¥ÿk©©ÿq®®ÿv°°ÿx±±ÿx±±ÿw±±ÿw°°ÿw°°ÿw°°ÿv°°ÿv°°ÿu°°ÿu°°ÿu°°ÿu°°ÿu°°ÿu°°ÿu°°ÿu°°ÿu°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt°°ÿs°°ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿq®®ÿq®®ÿq®®ÿq®®ÿq®®ÿq®®ÿq®®ÿp­­ÿo­­ÿo­­ÿo­­ÿo­­ÿp­­ÿp­­ÿp­­ÿo¬¬ÿo¬¬ÿp­­ÿo¬¬ÿo¬¬ÿm««ÿh¨¨ÿa¤¤ÿ[  ÿYŸŸÿYŸŸÿZ  ÿYŸŸþVžžøO˜˜è<º$}}~ssBnnÿÿjj ss5,‚‚yL””Ç[ï`¢¢ûb££ÿa¤¤ÿa££ÿa££ÿ`££ÿ_££ÿ_¢¢ÿ^¢¢ÿ]¢¢ÿ\¡¡ÿ]¡¡ÿ`££ÿe¦¦ÿl««ÿt¯¯ÿx²²ÿy²²ÿw±±ÿw°°ÿw±±ÿw±±ÿv±±ÿv±±ÿv°°ÿv±±ÿv±±ÿv±±ÿv±±ÿv°°ÿv°°ÿu°°ÿu°°ÿu°°ÿt°°ÿu°°ÿt°°ÿu°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt°°ÿs¯¯ÿs¯¯ÿs¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿs¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿq®®ÿq®®ÿq®®ÿq®®ÿq®®ÿp­­ÿq®®ÿq®®ÿq®®ÿq®®ÿq­­ÿq®®ÿq­­ÿq­­ÿn¬¬ÿj¨¨ÿd¦¦ÿ_££ÿ[  ÿYŸŸÿZ  ÿZ  ÿYŸŸýS››òF””Ó5ŠŠ§%€€yssBppffUU mm%{{D7ˆˆ}F““´RššÜ[žžó`¡¡üb¤¤ÿb¤¤ÿa££ÿ`££ÿ`££ÿ`££ÿ_££ÿ_¢¢ÿ]¢¢ÿ]¡¡ÿ]¢¢ÿb¥¥ÿlªªÿt¯¯ÿw±±ÿx±±ÿy²²ÿy²²ÿx²²ÿx²²ÿx²²ÿw±±ÿw±±ÿw±±ÿw±±ÿw±±ÿw±±ÿw±±ÿw±±ÿu°°ÿu°°ÿu°°ÿt°°ÿt°°ÿt°°ÿu°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt°°ÿs°°ÿr¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr®®ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿs®®ÿr®®ÿq­­ÿlªªÿf§§ÿ_££ÿ[  ÿZ  ÿZ  ÿ[  ÿZ  ÿXžžûP™™êD’’Ê/……—xx] nn.qqffcctt.%€€Y5††ŽG’’¾S››à[ŸŸó`¡¡ýb££ÿa££ÿ`££ÿ`££ÿ`££ÿ_££ÿ_¢¢ÿ^¢¢ÿ]¢¢ÿ]¢¢ÿ`££ÿe§§ÿk©©ÿp¬¬ÿt¯¯ÿw±±ÿy²²ÿz²²ÿz³³ÿy²²ÿy²²ÿy²²ÿy²²ÿy²²ÿy²²ÿx²²ÿw±±ÿw±±ÿw±±ÿv±±ÿv±±ÿv±±ÿv±±ÿv±±ÿu±±ÿv±±ÿu°°ÿu°°ÿu°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt°°ÿu°°ÿt°°ÿt°°ÿt°°ÿt°°ÿt¯¯ÿt¯¯ÿt¯¯ÿs®®ÿq­­ÿmªªÿi¨¨ÿf§§ÿ`££ÿ\¡¡ÿZ  ÿZ  ÿ[  ÿ[  ÿYžžûS››ïL˜˜ß>ŽŽ¼(„uuNqq$ss __ ppvv8$~~a5ˆˆŽJ••ÃSššáWî^¢¢ú`¢¢þa¤¤ÿa££ÿ`££ÿ`££ÿ_¢¢ÿ^¢¢ÿ]¡¡ÿ]¡¡ÿ]¡¡ÿ^££ÿ`££ÿd¦¦ÿi¨¨ÿmªªÿq­­ÿt¯¯ÿv°°ÿz²²ÿz³³ÿz³³ÿz³³ÿz³³ÿz³³ÿz³³ÿx²²ÿx²²ÿw±±ÿw±±ÿw±±ÿw±±ÿw±±ÿw±±ÿw²²ÿw²²ÿw±±ÿw±±ÿv±±ÿv±±ÿv±±ÿv±±ÿv±±ÿv±±ÿv±±ÿu°°ÿu°°ÿt¯¯ÿr®®ÿm««ÿj©©ÿe¦¦ÿ`¤¤ÿ\¡¡ÿ[  ÿ[  ÿZ  ÿ[  ÿ[¡¡ÿZŸŸüVòN˜˜ß=»*„„‰`ww>qqmmqq ppxx9&\1……‚?ŽŽ®M––ÐXžžì`¡¡ýb¤¤ÿa¤¤ÿa££ÿa££ÿ_££ÿ_££ÿ^¢¢ÿ^¢¢ÿ]¢¢ÿ]¢¢ÿ]¢¢ÿ^¢¢ÿ_££ÿ`££ÿc¥¥ÿi©©ÿo¬¬ÿq®®ÿs¯¯ÿt°°ÿv±±ÿw±±ÿw±±ÿw±±ÿw±±ÿx²²ÿy²²ÿz³³ÿy³³ÿy²²ÿy³³ÿy²²ÿx²²ÿw±±ÿu±±ÿv±±ÿu°°ÿt¯¯ÿq®®ÿn¬¬ÿkªªÿg§§ÿe¦¦ÿc¦¦ÿ`¤¤ÿ]¡¡ÿ\¡¡ÿ[  ÿ[  ÿ[  ÿ\  ÿ[ŸŸþXžžùS››ïOššáB‘‘Á0ˆˆ” ~~grr< qqqq UUmm ff ss*xxJ0††ƒL——ÅXœœê\ŸŸñ\žž÷_¡¡üa££þa££ÿ`££ÿ`££ÿ`££ÿ_££ÿ^££ÿ^¢¢ÿ^¢¢ÿ]¡¡ÿ^¢¢ÿ^¢¢ÿ]¢¢ÿ_££ÿ_¤¤ÿ`¤¤ÿa¥¥ÿc¥¥ÿd¦¦ÿe§§ÿe¦¦ÿh©©ÿkªªÿl««ÿkªªÿkªªÿi©©ÿh©©ÿf¨¨ÿd§§ÿd¦¦ÿf§§ÿd¥¥ÿa¤¤ÿ^¢¢ÿ\¡¡ÿ\¡¡ÿ[  ÿ[  ÿ[¡¡ÿ[  ÿ[¡¡ÿ\¡¡ÿ[  þXžžûUõO˜˜äH””Ì9¨.……„!jwwBss!jj UUff nn{{<5‡‡i7‰‰€8ŠŠ™E’’ºL••ÓV››æYîZžžó\  ú_¢¢ý_££ÿ`££ÿ`££ÿ_££ÿ_££ÿ_££ÿ_¢¢ÿ^¢¢ÿ]¢¢ÿ]¢¢ÿ]¢¢ÿ\¢¢ÿ\¢¢ÿ\¡¡ÿ\¡¡ÿ\  ÿ\¡¡ÿ\¡¡ÿ\¡¡ÿ[¡¡ÿ\¡¡ÿ\¡¡ÿ\¢¢ÿ\¡¡ÿ\¡¡ÿ\¡¡ÿ\  ÿ\¡¡ÿ\¡¡ÿ\¡¡ÿ\¡¡ÿ[  ÿ[  ýYùUœœôQ™™èM˜˜âI––Ô<´/‡‡–#€€mvvG rr(mmjj UU__ff mmrr1xxH0„„d3ˆˆx1‡‡‹@§I••¿Q››ÞWðXó[ŸŸø^¡¡ü^¡¡ü^¡¡ý^¡¡ý^¡¡þ]¡¡þ^¡¡ÿ_¢¢ÿ_££ÿ_¢¢ÿ_¢¢ÿ_¢¢ÿ_¢¢ÿ^¢¢ÿ^¢¢ÿ^¢¢ÿ^¡¡ÿ^¡¡ÿ]¡¡ÿ\  þ\¡¡ý\¡¡ý\ŸŸüWœœ÷VœœôV››óQ˜˜êH””ÙCÉ8ŠŠ«.„„&r!d||Rss3iiuu __uu hhxx"ss3*ƒƒY.„„}.ƒƒŠ:ŠŠF°F““´D‘‘¿BÅE‘‘ÊE’’ËN˜˜ÚVœœìTššïXôYžžõYžžôXœœôXžžòWðUœœëT™™ãR™™ßSššàJ••ÔBÇ@¿C‘‘¯7‹‹˜/……‘-„„‹'€€uyyVssB pp+ttmm__mmffmmrruu%pp+uu2vv6ww>wwB ||V/……|1……‚=@Ž>ŽŽŠ>ŒŒ†@ŽŽ?x<ŽŽq'h{{a$\zzOss>uu2 xx& kkjjhhmmUUÿÿUUªªooxx*"ˆˆ"ˆˆ* .ss 8qq  jj jj __ffUUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿÿÿÿÿþp?ÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿð?ÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(€ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !#$%')*+,,-/001122222222222222222110/.-,++)(&%$"  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !#&'*+-.011344566778889999:::::::::::::::::99998887765443210/-,*)&%"  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  $(*-/02457789:;;<==>>>????@@@@@@AAAAAAAAAAAA@@@@@@@???>>>==<<;::98765320.+)&" ÿÿÿÿÿÿÿÿÿÿÿÿ $(+.024679:;<==>??@@AABBBBBCCDDCDDDDDDDEEDDDDDDDDCDCCCBBBBAA@@@??>=<<;:87532/,)&!  #'+-024578::;<=>>?@@@ABD HO!!Z--e''a--f//l22p--e!!ZUP MHDDDDDDDDDDDCCCCCBBBBAA@@??>==<;:986531/,)%! "%(+-/12456789:; AL++^<>>>==<<;::988754310.,*'$    "$&()+/<44XHH†TT¶XXÕ[[è]]ö]]ý^^þ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^þ]]ú\\óZZçWWÒQQµCC‡''U @97777766554433210/.-,*('%#!   %%"GGNTTYYÈ\\è]]ú__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿ__ù[[ßTT·IIƒ44R4*(('&%$$#"! $$TT'[[o]]¶^^é__ü__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿ bbÿ bbÿ aaù__ä[[³QQn==2  mm\\/]]~__Ò``øaaÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿ bbÿ ccÿ ddÿ ddþ bbö ``Ð[[uOO33??[[*^^‰``Þaaûbbÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿbbÿ bbÿ ccÿ ddÿeeÿeeÿ ccö ``À]]e XXÿÿWW__x``Ôaaûbbÿbbÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿaaÿ bbÿ ccÿ ddÿddÿffÿffÿddô aa¾``ZTTÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿff \\P__Âbbø ccÿbbÿbbÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿ bbÿ ccÿ ddÿeeÿffÿggÿggþffð bb«]]?HHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^^#^^‘bbê ddþ ddÿ ccÿbbÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿbbÿbbÿ ccÿ ccÿ ddÿeeÿffÿggÿhhÿggýddá aa~ [[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿUU]]Gaa ccú ddÿ ccÿ ccÿbbÿaaÿaaÿaaÿ``ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ^^ÿ__ÿ``ÿ``ÿ``ÿ``ÿaaÿbbÿbbÿ bbÿ ccÿ ddÿeeÿffÿggÿhhÿiiÿgg÷ddµ]]?ffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ þþÿÿÿÿþþÿÿÿÿþþÿÿ þþ þþÿÿÿÿÿÿii__s bbâeeþ eeÿ ddÿ ccÿbbÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿaaÿbbÿ bbÿ ccÿ ddÿeeÿeeÿggÿhhÿjjÿiiýffÚ bbeUU ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þþÿÿþþÿÿþþþþÿÿþþþþÿÿþþÿÿþþ þþ {{!``— ddòffÿffÿ eeÿ ddÿ bbÿaaÿ``ÿ``ÿ``ÿ``ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ^^ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿbbÿbbÿ bbÿ ccÿ ddÿeeÿffÿggÿhhÿjjÿkkÿhhí bb† XXÿÿÿÿÿÿÿÿÿÿÿÿþþ ÿÿÿÿþþÿÿþþ#þþ'þþ*þþ+þþ+þþ)þþ%ÿÿ þþžž2qq«kkùiiÿffÿ eeÿ ddÿ ccÿbbÿaaÿ``ÿ``ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿaaÿbbÿ ccÿ ccÿ ddÿeeÿffÿggÿiiÿjjÿllÿiiöccŸ__ ÿÿÿÿÿÿÿÿþþÿÿ ÿÿþþþþþþþþ%þþ,þþ1þþ6þþ9þþ9þþ7þþ2ôô0˜˜Œ)ˆˆ÷zzÿooÿ iiÿ ffÿ ddÿ bbÿbbÿaaÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿbbÿ ccÿ ccÿ ddÿeeÿffÿhhÿiiÿkkÿllÿkkùdd¬\\$ÿÿÿÿÿÿÿÿþþþþ ÿÿþþþþþþ#þþ*þþ2þþ9þþ?ÿÿDþþFÿÿDþþ?ÔÔZ,œÍ%‹‹ý||ÿ ppÿ iiÿ ffÿccÿaaÿ``ÿ``ÿ__ÿ^^ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿbbÿbbÿ ccÿ ddÿeeÿggÿhhÿiiÿkkÿmmÿmmúgg¯\\$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿþþþþþþ#þþ,þþ5þþ=þþFþþLÿÿPþþOþþK××f'  Ð!ŽŽý~}ÿ qqÿjjÿeeÿccÿa`ÿ__ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿbbÿ ccÿ ccÿ ddÿffÿggÿhhÿjjÿllÿnnÿnnúff«\\!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þþþþþþþþ!þþ+þþ5ÿÿ@þþJþþSþþXþþYÿÿUÛÛm$¦¥Ðý€€ÿ rrÿjjÿffÿbbÿ``ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿaaÿbbÿ ccÿ ddÿ eeÿffÿhhÿiiÿkkÿmmÿooÿooùhh¡ bbÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ ÿÿ ÿÿþþþþþþ)þþ5þþAþþMþþXþþ^ÿÿ`þþ]ßßr"¨¨Ñ’’þ‚ÿssÿkkÿeeÿbbÿ__ÿ]]ÿ]]ÿ]]ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ^^ÿ__ÿ``ÿ``ÿaaÿaaÿbbÿ ccÿ ddÿeeÿggÿiiÿjjÿmmÿooÿ"qqÿ"ppöhh__ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ þþ ÿÿþþÿÿ(þþ5þþBÿÿPþþ\þþcþþeþþcààw««Ó””þƒƒÿttÿkkÿeeÿaaÿ__ÿ^^ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ]]ÿ__ÿ__ÿ``ÿbbÿbbÿbbÿbbÿccÿccÿccÿccÿbbÿbbÿbbÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ^^ÿ__ÿ``ÿ``ÿaaÿbbÿccÿ ccÿ ddÿffÿhhÿiiÿkkÿnnÿ qqÿ%ssÿ#rrïhhpmmÿÿÿÿÿÿÿÿÿÿÿÿþþþþ þþþþþþ'þþ5þþCþþSÿÿ`þþiþþkþþiââ}­­Ö––þ „„ÿuuÿkkÿffÿbbÿ^^ÿ\\ÿ\\ÿ[[ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ]]ÿ^^ÿ``ÿaaÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿ``ÿ``ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿbbÿccÿ ddÿ eeÿggÿhhÿjjÿmmÿppÿ#ssÿ(uuÿ#qqàeeKÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿþþþþ'þþ6þþFÿÿUþþdþþmþþpþþn å尰ט—þ ……ÿvuÿllÿffÿaaÿ__ÿ]]ÿ\\ÿ\\ÿ\\ÿ]]ÿ]]ÿ__ÿaaÿ ccÿ bbÿ ccÿ ccÿ ccÿ ccÿccÿccÿddÿddÿccÿccÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿ``ÿ``ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿbbÿ ccÿ eeÿffÿggÿjjÿllÿooÿ!rrÿ'uuÿ*wwþ ooÄ bb'ÿÿÿÿÿÿÿÿÿÿ ÿÿþþÿÿ(þþ7þþHþþYþþgþþpþþtþþs ææ…³³Øþ Œ‹ÿ~}ÿuuÿppÿkkÿggÿffÿffÿhhÿjjÿ iiÿ iiÿ hhÿ hhÿ ggÿ eeÿ ddÿ ddÿ ccÿ ccÿ ccÿ ddÿ ccÿddÿddÿddÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿ``ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿbbÿ ddÿ ffÿggÿiiÿkkÿnnÿqqÿ%ttÿ+xxÿ,wwùmm“[[ÿÿÿÿÿÿÿÿÿÿ ÿÿþþþþ*þþ:þþLþþ\þþlþþuþþzÿÿx è艺ºØ££þ ““ÿ……ÿ{{ÿuuÿppÿooÿppÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ qqÿ ppÿ ooÿ mmÿ llÿ jjÿ hhÿ eeÿ ddÿ ddÿ ddÿ ddÿddÿddÿccÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿ``ÿ``ÿbbÿ ccÿ eeÿffÿhhÿjjÿmmÿppÿ#ssÿ)wwÿ-zzÿ*wwêkkXUUÿÿÿÿÿÿÿÿÿÿ ÿÿþþþþ+ÿÿ<þþNÿÿ`þþoþþ{þþ~üü} ëë½½Ú¦¦þ ––ÿ‡‡ÿ~~ÿzzÿ wwÿ uuÿ rrÿ rrÿ rrÿ qqÿ qqÿ qqÿ qqÿ qqÿ rrÿ ssÿ rrÿ rrÿ qqÿ ooÿ mmÿ kkÿ iiÿ ffÿ eeÿ ddÿ ddÿddÿccÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿ``ÿ__ÿ^^ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿccÿ ddÿ ffÿhhÿjjÿllÿooÿ"ssÿ'vvÿ,yyÿ1||þ'uuÄee#ÿÿÿÿÿÿÿÿÿÿ þþÿÿþþ-þþ>þþQþþcþþtþþ~ýýƒýý‚ íí‘ÀÀÛ©©þ ššÿ ŽŽÿ ††ÿ ÿ yyÿ vvÿ ttÿ rrÿ rrÿ qqÿ qqÿ qqÿ qqÿ rrÿ rrÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ ppÿ nnÿ jjÿ ggÿ eeÿ ddÿddÿccÿccÿccÿccÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ__ÿ__ÿ__ÿ__ÿ``ÿ``ÿaaÿbbÿ ccÿ eeÿggÿiiÿkkÿooÿ!rrÿ%uuÿ*xxÿ0||ÿ2||÷ ppHHÿÿÿÿÿÿþþ þþÿÿ þþ/ÿÿ@þþTþþhüüxýýƒýýˆýý‡ íí•ÃÂܯ¯þ  ÿ ’’ÿ ‡‡ÿ €€ÿ zzÿ wwÿ ttÿ ssÿ ssÿrrÿ rrÿ rrÿ qqÿ rrÿ rrÿ rrÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ qqÿ ooÿ kkÿ ggÿddÿddÿccÿccÿccÿccÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ``ÿ``ÿ``ÿaaÿccÿ eeÿggÿiiÿkkÿnnÿqqÿ$ttÿ)xxÿ.{{ÿ4ÿ.zz×ee2ÿÿÿÿÿÿþþÿÿ þþþþ!þþ1þþCþþWþþjþþ{ýý‡ýýŒýý‹îî™ÅÅÞ²²þ££ÿ ””ÿ ŠŠÿ ‚‚ÿ {{ÿ wwÿuuÿssÿssÿrrÿssÿrrÿssÿrrÿssÿ ssÿ ssÿ ttÿ ttÿ ssÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ ppÿ nnÿkkÿffÿccÿccÿccÿccÿccÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿ``ÿ``ÿ``ÿ__ÿ__ÿ``ÿaaÿaaÿbbÿ ddÿ ffÿhhÿjjÿmmÿppÿ#ssÿ)wwÿ-{{ÿ3~~ÿ7û&ttŒTT ÿÿÿÿÿÿþþþþ þþÿÿ"þþ2þþEþþYþþnüüýý‹ýý‘ýýîížÈÈ൵þ¦¦ÿ ˜˜ÿ ÿ „„ÿ~~ÿyyÿvvÿttÿssÿssÿssÿssÿssÿssÿssÿssÿttÿ ttÿ ttÿ ttÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ ppÿjjÿffÿddÿccÿccÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿ``ÿ``ÿaaÿaaÿ``ÿ``ÿaaÿaaÿbbÿ ccÿ eeÿggÿjjÿllÿooÿ!rrÿ'vvÿ,zzÿ2~~ÿ9‚‚ÿ2}}Ùmm1ÿÿÿÿÿÿþþþþ þþþþ#ÿÿ3þþFþþ[þþpýýýýŽýý•ýý•ïï£ËÊḸþ©©ÿ ››ÿ ÿ††ÿÿzzÿwwÿuuÿttÿttÿttÿttÿttÿttÿssÿttÿttÿttÿ ttÿ ttÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿppÿllÿggÿccÿccÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿ``ÿaaÿaaÿaaÿ``ÿaaÿaaÿbbÿ ccÿ ddÿffÿiiÿllÿooÿ rrÿ&uuÿ,yyÿ1}}ÿ8‚‚ÿ:ƒƒù%uu‡ff ÿÿÿÿÿÿþþþþþþþþ$þþ4þþHþþ]þþqýýƒýýýý˜ýý™ññ¦ÍÍ⻺þ¬¬ÿ žÿ ’’ÿˆˆÿÿ||ÿxxÿwwÿvvÿvvÿuuÿvvÿvvÿvvÿuuÿuuÿuuÿuuÿuuÿ uuÿ ttÿ ssÿ ssÿ ssÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿqqÿmmÿhhÿddÿbbÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿccÿ ddÿffÿiiÿkkÿnnÿrrÿ$uuÿ*xxÿ0}}ÿ7ÿ=……ÿ8ßoo@ÿÿÿÿÿÿþþþþþþþþ$þþ5þþHþþ^þþrþý„ýý“ýý›ýýžññªÐÏã¾¾þ±°ÿ ¢¢ÿ––ÿÿ……ÿÿ{{ÿyyÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿwwÿvvÿ uuÿ uuÿ ttÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿrrÿqqÿnnÿggÿccÿbbÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿccÿ ccÿ eeÿhhÿjjÿnnÿqqÿ#ttÿ(xxÿ/||ÿ6€€ÿ=……ÿ@‡‡ü/{{•ff ÿÿÿÿÿÿÿÿþþ þþþþ#þþ4þþHþþ]þþsþþ†ýý•ýýŸýû¢ññ®ÓÒåÂÁþ´´ÿ ¦¦ÿššÿÿ‡‡ÿ€€ÿ||ÿzzÿxxÿxxÿwwÿwwÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿ vvÿ vvÿ uuÿ ttÿ ssÿ rrÿ rrÿ rrÿ rrÿ rrÿrrÿrrÿppÿllÿeeÿbbÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿbbÿbbÿ ccÿ eeÿggÿjjÿmmÿqqÿ"ttÿ'wwÿ.{{ÿ5€€ÿ<……ÿC‰‰ÿ:ƒƒÔoo)ÿÿÿÿÿÿþþþþ þþÿÿ"ÿÿ3þþFþþ]þþsþþ‡ýý˜ýý¡ýý¥óò²×ÕæÅÄþ··ÿ¨¨ÿ››ÿ‘‘ÿˆˆÿ‚‚ÿ}}ÿzzÿxxÿxxÿwwÿwwÿxxÿxxÿwwÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿ vvÿ vvÿ ttÿ ssÿ rrÿ rrÿ rrÿqqÿrrÿqqÿqqÿooÿiiÿccÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿccÿbbÿccÿ eeÿggÿjjÿllÿppÿ!ssÿ&wwÿ-{{ÿ4ÿ;ƒƒÿBˆˆÿBˆˆô*xxaÿÿÿÿÿÿþþÿÿ þþþþ!þþ2þþFþþ]þþtýýŠýýšýý¥ýý©õóµ××çÆÆþ¹¸ÿªªÿÿ’’ÿ‰‰ÿ‚‚ÿ~~ÿzzÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿwwÿ wwÿ vvÿ ttÿ ssÿ rrÿ rrÿ rrÿ qqÿqqÿqqÿqqÿqqÿllÿffÿbbÿaaÿaaÿaaÿaaÿaaÿaaÿbbÿccÿccÿccÿ eeÿggÿiiÿllÿooÿ rrÿ%vvÿ,zzÿ3~~ÿ9ƒƒÿ@‡‡ÿE‹‹ý2}}ž\\ ÿÿÿÿÿÿÿÿþþ ÿÿÿÿ þþ1þþEþþ]øøyåã¨õô¨ýý¨ýü¬óò¸ÙØèÉÈþ»ºÿ¬¬ÿŸŸÿ••ÿ‹‹ÿ„„ÿÿ||ÿzzÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿwwÿ wwÿ vvÿ uuÿ ssÿ rrÿ rrÿ qqÿqqÿqqÿqqÿqqÿppÿkkÿccÿaaÿaaÿaaÿaaÿaaÿbbÿccÿddÿ ddÿ eeÿffÿiiÿllÿnnÿrrÿ$uuÿ+zzÿ2~~ÿ8‚‚ÿ?††ÿF‹‹ÿ<……Òkk&ÿÿÿÿÿÿþþ þþÿÿ ÿÿ0ôôK¾¾¸¸ìÒÑÜôó­ýý«ýý¯ôô»ÛÚéÊÉþ¼¼ÿ®®ÿ¡¡ÿ––ÿŒŒÿ……ÿÿ||ÿzzÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿ wwÿ wwÿ vvÿ uuÿ ttÿ rrÿ rrÿ qqÿqqÿqqÿqqÿqqÿqqÿmmÿffÿaaÿaaÿaaÿbbÿbbÿccÿddÿ ddÿ eeÿ ffÿhhÿkkÿnnÿqqÿ$uuÿ)yyÿ1}}ÿ8‚‚ÿ>††ÿDŠŠÿC‰‰ï$ttSÿÿÿÿÿÿÿÿÿÿ þþââ$šš ‘‘í¤¤ÿº¹ýÒÑÞöô¯ýý¯ýý³õõ¾ÝÜêÌËþ¾¾ÿ¯¯ÿ¢¢ÿ——ÿÿ††ÿ€€ÿ||ÿ{{ÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿ wwÿ wwÿ vvÿ uuÿ ttÿ ssÿ rrÿ qqÿqqÿqqÿqqÿqqÿqqÿooÿiiÿccÿaaÿbbÿbbÿccÿccÿ eeÿ ffÿ ggÿhhÿkkÿnnÿqqÿ#uuÿ(xxÿ/}}ÿ7‚‚ÿ=……ÿCŠŠÿF‹‹ü1~~TT ÿÿÿÿÿÿÈÈzzb xx僃ÿ’’ÿ¦¦ÿººýÓÒßõõ³ýý³üü·÷÷ÀÞÝêÍÌþÀ¿ÿ±°ÿ¤¤ÿ˜˜ÿŽŽÿ‡‡ÿÿ~~ÿ{{ÿzzÿyyÿxxÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿ wwÿ wwÿ vvÿ vvÿ ttÿ ssÿ rrÿ qqÿqqÿqqÿqqÿqqÿppÿppÿllÿeeÿbbÿbbÿccÿddÿ eeÿ ffÿ ggÿhhÿkkÿmmÿppÿ#ttÿ(xxÿ.||ÿ5ÿ=……ÿC‰‰ÿIÿ>††Ïnn%ÿÿ¿¿ddG iiÚrrþyyÿ„„ÿ ““ÿ¦¦ÿ¼»ýÖÓáöõ¶ýý¶ýýº÷÷ÃßÞëÏÎþÂÁÿ³³ÿ¦¦ÿššÿÿˆˆÿ‚‚ÿ~~ÿ{{ÿzzÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿ wwÿ vvÿ uuÿ ttÿ ssÿ rrÿ qqÿppÿppÿqqÿppÿppÿooÿmmÿffÿbbÿbbÿccÿ ddÿ ffÿggÿhhÿkkÿmmÿppÿ"ssÿ(xxÿ.||ÿ4€€ÿ<……ÿB‰‰ÿHŒŒÿEŠŠë$vvEZZ- ccÇiiþmmÿqqÿyyÿ ……ÿ ””ÿ¨¨ÿ½¼þÖÕãõõ»ýýºýý½÷÷ÅàßëÐÏþÃÂÿ´´ÿ§§ÿ››ÿ‘‘ÿ‰‰ÿƒƒÿÿ||ÿ{{ÿzzÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿ wwÿ wwÿ vvÿ uuÿ uuÿ ttÿ rrÿ qqÿqqÿqqÿppÿppÿppÿooÿooÿhhÿccÿccÿ eeÿ ffÿggÿiiÿkkÿmmÿooÿ!ssÿ'wwÿ.{{ÿ4€€ÿ:„„ÿ@ˆˆÿGŒŒÿHŒŒ÷+{{i[[ aaªhhûiiÿiiÿkkÿ ppÿ yyÿ ……ÿ••ÿ ª©ÿ¿¾þØÖåöö¾ýü½þý¿÷÷ÇáàìÑÐþÄÃÿ¶¶ÿ¨¨ÿÿ““ÿ‹‹ÿ„„ÿ€€ÿ}}ÿ{{ÿzzÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿwwÿ wwÿ vvÿ vvÿ uuÿ ssÿ qqÿqqÿppÿppÿppÿppÿooÿppÿooÿkkÿddÿ ddÿ ffÿggÿiiÿkkÿmmÿooÿ ssÿ'wwÿ-{{ÿ3ÿ:„„ÿ@‡‡ÿF‹‹ÿIý1}}ŒUU__ aaƒgg÷iiÿhhÿggÿhhÿ kkÿ ppÿ yyÿ††ÿ——ÿ ¬¬ÿÁÀþÚÙæ÷÷ÁüüÀýýÂ÷÷ÉâáìÒÑþÅÄÿ··ÿªªÿŸŸÿ””ÿŒŒÿ……ÿÿ~~ÿ||ÿ{{ÿzzÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿ wwÿ vvÿ vvÿ ssÿ rrÿ qqÿqqÿppÿppÿppÿppÿppÿppÿppÿllÿ ffÿ ffÿggÿiiÿkkÿmmÿooÿ rrÿ&vvÿ,zzÿ3ÿ9ƒƒÿ?‡‡ÿE‹‹ÿJŽŽþ7ªbb ``Jhhäjjÿhhÿggÿffÿeeÿ ggÿ jjÿppÿ{{ÿ‰‰ÿššÿ ±°ÿÆÅþÜÛè÷÷ÄüüÃüüÅ÷÷ËãáíÓÒþÇÆÿ¹¹ÿ¬¬ÿ¡¡ÿ——ÿŽŽÿˆˆÿƒƒÿÿ}}ÿ{{ÿzzÿyyÿyyÿyyÿxxÿxxÿxxÿxxÿwwÿwwÿwwÿ vvÿ wwÿ vvÿ uuÿ ssÿ qqÿ qqÿqqÿppÿppÿppÿppÿppÿppÿppÿ nnÿ hhÿggÿiiÿllÿmmÿooÿ rrÿ&vvÿ,zzÿ3ÿ9ƒƒÿ?‡‡ÿE‹‹ÿJŽŽÿ>……ÉjjZZ"ffÀllþjjÿhhÿffÿeeÿeeÿ ffÿ iiÿooÿxxÿƒƒÿ’’ÿ££ÿ ¸·ÿÊÉþ ßÞé÷÷ÈüüÆüüÇ÷öÌ ãâîÕÔþÉÈÿ¼»ÿ¯¯ÿ¤¤ÿššÿ‘‘ÿŠŠÿ„„ÿÿ~~ÿ||ÿzzÿzzÿyyÿyyÿyyÿxxÿxxÿxxÿwwÿwwÿ vvÿ vvÿ wwÿ vvÿ vvÿ ssÿ qqÿqqÿqqÿppÿppÿppÿppÿppÿqqÿ rrÿ ooÿhhÿiiÿllÿmmÿnnÿrrÿ&vvÿ+zzÿ2ÿ8ƒƒÿ?‡‡ÿDŠŠÿIÿF‹‹å#tt9mm dd‚kkøllÿjjÿiiÿhhÿjjÿ llÿ mmÿ ooÿqqÿuuÿ}}ÿ‡‡ÿ––ÿ§§ÿ»ºÿÍËþ àßê÷÷ÉüüÈûûÉ÷÷Î äãî×ÖþËÊÿ¾¾ÿ²²ÿ§§ÿÿ””ÿÿ‡‡ÿƒƒÿ€€ÿ}}ÿ{{ÿzzÿyyÿyyÿxxÿwwÿwwÿwwÿwwÿwwÿ vvÿ vvÿ vvÿ vvÿ ttÿ rrÿqqÿqqÿppÿppÿppÿppÿqqÿ qqÿ rrÿ ssÿppÿjjÿllÿnnÿooÿrrÿ%uuÿ+zzÿ2~~ÿ8‚‚ÿ>††ÿDŠŠÿIÿE‹‹í"uuJaa<hhÝnnÿooÿppÿppÿppÿ ooÿ nnÿ nnÿ mmÿnnÿqqÿvvÿÿ‹‹ÿššÿ«ªÿ½½ÿÎÍþ áàë÷÷ÌüüÊüüË÷öÐ åäïØ×þÍÌÿÁÀÿµµÿªªÿ  ÿ˜˜ÿÿŠŠÿ……ÿÿ~~ÿ||ÿ{{ÿzzÿyyÿyyÿxxÿwwÿwwÿwwÿwwÿ vvÿ vvÿ vvÿ uuÿ ssÿ qqÿqqÿqqÿqqÿppÿppÿqqÿ qqÿ rrÿ ssÿttÿqqÿmmÿnnÿooÿrrÿ%vvÿ+zzÿ2~~ÿ8‚‚ÿ>††ÿCŠŠÿHÿHô*xxY__ ii¤rrüuuÿvvÿttÿrrÿqqÿ ooÿ nnÿ mmÿmmÿmmÿnnÿrrÿxxÿ‚‚ÿŽŽÿÿ­­ÿ¿¿ÿ ÐÏþ âáìøøÍüüÌüüÍ÷öÒ æåïÚÚþÐÏÿÄÃÿ¹¹ÿ®®ÿ¥¥ÿ››ÿ““ÿÿˆˆÿƒƒÿ€€ÿ}}ÿ{{ÿzzÿyyÿxxÿxxÿwwÿvvÿwwÿwwÿ vvÿ uuÿ vvÿ uuÿ rrÿ qqÿ qqÿqqÿppÿqqÿqqÿ qqÿ rrÿ ssÿttÿvvÿssÿppÿppÿrrÿ%vvÿ+zzÿ1~~ÿ8ƒƒÿ>††ÿCŠŠÿHŒŒÿIŒŒö.zzb ooNvvëyyÿwwÿvvÿttÿrrÿ ppÿ ooÿ nnÿ llÿllÿllÿmmÿooÿssÿzzÿ„„ÿ‘‘ÿŸŸÿ¯¯ÿ ÃÂÿÔÓþ åãìø÷ÏýüÍüüÏ÷öÓ èçïÜÛþÒÑÿÇÆÿ¼»ÿ²²ÿ¨¨ÿŸŸÿ——ÿÿ‰‰ÿ……ÿÿ}}ÿ||ÿzzÿyyÿxxÿxxÿwwÿvvÿwwÿwwÿ vvÿ vvÿ uuÿ ssÿ qqÿ qqÿ qqÿqqÿqqÿ qqÿ qqÿ rrÿ ttÿuuÿvvÿxxÿttÿppÿrrÿ%vvÿ+zzÿ1~~ÿ8‚‚ÿ>††ÿCŠŠÿHŒŒÿIŒŒø-{{kqqtt­yyýyyÿwwÿuuÿttÿrrÿ ppÿ ooÿ nnÿllÿkkÿkkÿllÿmmÿppÿttÿ||ÿ††ÿ””ÿ¤¤ÿµµÿ ÆÅÿÕÔþ ååíø÷ÑüüÏûûÑùùÕ éèñÞÝÿÔÓÿ ÉÈÿÀ¿ÿµµÿ¬¬ÿ¢¢ÿ™™ÿ’’ÿŒŒÿ††ÿ‚‚ÿÿ}}ÿ{{ÿyyÿxxÿwwÿvvÿvvÿvvÿ vvÿ vvÿ uuÿ ttÿ ssÿ qqÿ qqÿ qqÿ rrÿ qqÿ qqÿ ssÿttÿuuÿwwÿxxÿxxÿttÿrrÿ&vvÿ,zzÿ2~~ÿ7‚‚ÿ>††ÿCŠŠÿHÿJŽŽû.||ƒff ppTyyí||ÿyyÿwwÿuuÿssÿqqÿ ppÿ ooÿnnÿmmÿmmÿllÿllÿllÿnnÿqqÿvvÿÿÿ ššÿ ¨¨ÿ ··ÿ ÈÇÿÖÕþ ææíø÷ÒüüÑüüÓùùØ êêòàßÿ ÖÕÿ ÍËÿÂÂÿ¸¸ÿ®®ÿ¥¥ÿœœÿ””ÿÿˆˆÿ„„ÿ€€ÿ}}ÿ{{ÿzzÿxxÿwwÿvvÿuuÿuuÿ uuÿ uuÿ uuÿ ssÿ rrÿ ppÿ qqÿ rrÿ rrÿ rrÿ ssÿttÿuuÿwwÿxxÿzzÿzzÿ uuÿ%vvÿ,zzÿ2ÿ8‚‚ÿ>††ÿCŠŠÿHÿIü-{{†ffmmvvª||þ{{ÿyyÿwwÿuuÿssÿqqÿ ppÿ ooÿnnÿnnÿnnÿmmÿllÿllÿllÿnnÿrrÿ }}ÿ ††ÿ ÿ œœÿ ªªÿ ¹¸ÿ ÉÈÿØÖþ èçíøøÓüüÓûûÖùùÚ ìëóâáÿ ÙØÿ ÏÎÿÅÄÿ»»ÿ±±ÿ§§ÿžžÿ––ÿÿ‰‰ÿ„„ÿ€€ÿ}}ÿ{{ÿyyÿxxÿwwÿvvÿuuÿuuÿ uuÿ uuÿ uuÿ rrÿ qqÿ qqÿ rrÿ ssÿ rrÿ ssÿttÿvvÿwwÿyyÿ{{ÿ||ÿ!{{ÿ&wwÿ,zzÿ3ÿ8ƒƒÿ>‡‡ÿDŠŠÿHÿJû-yy€pp=yyä}}ÿ{{ÿyyÿxxÿvvÿttÿ qqÿ ppÿ ppÿooÿnnÿnnÿmmÿmmÿllÿllÿnnÿ ttÿzzÿ ÿ ˆˆÿ ’’ÿ žžÿ ¬¬ÿ »ºÿ ÌÊÿÙØþ éèíùùÕûûÕüü×øøÝ ììô ãâÿ ÛÚÿ ÑÐÿ ÇÇÿ½¼ÿ³³ÿ©©ÿŸŸÿ——ÿÿ‰‰ÿ„„ÿ€€ÿ}}ÿ{{ÿyyÿxxÿwwÿvvÿuuÿ uuÿ uuÿ uuÿ ssÿ rrÿ qqÿ qqÿ rrÿ ssÿ ssÿttÿvvÿxxÿzzÿ{{ÿ}}ÿ#~~ÿ'||ÿ,{{ÿ2ÿ8ƒƒÿ>‡‡ÿDŠŠÿIÿIŒŒú*zzwUUmmuu}}û}}ÿ{{ÿyyÿwwÿvvÿttÿ rrÿ ppÿ qqÿppÿooÿnnÿmmÿmmÿllÿmmÿ qqÿuuÿwwÿ{{ÿÿ‰‰ÿ ””ÿ   ÿ ¯®ÿ ¾½ÿ ÍÌÿÛÚþ ééîùù×ûûØûûÚùùÞ îíô åäÿ ÜÜÿ ÓÒÿ ÉÈÿ¿¾ÿµµÿªªÿ¡¡ÿ™™ÿÿŠŠÿ„„ÿ€€ÿ}}ÿzzÿxxÿwwÿvvÿuuÿuuÿ uuÿ uuÿ ttÿ rrÿ rrÿ qqÿ rrÿ ssÿttÿuuÿvvÿxxÿzzÿ||ÿ }}ÿ$~~ÿ'€€ÿ-~~ÿ3ÿ8ƒƒÿ>‡‡ÿDŠŠÿIÿIù.{{tUUmm#yyÒ"ÿ}}ÿ{{ÿyyÿwwÿuuÿttÿ ssÿ qqÿqqÿppÿooÿnnÿmmÿmmÿllÿ qqÿttÿuuÿvvÿxxÿ||ÿ‚‚ÿ‹‹ÿ——ÿ ¤¤ÿ ²²ÿ À¿ÿ ÐÏÿÝÜþ êéïùùÙûûÚûûÜùùà ïîô æåÿ ÞÝÿ ÕÔÿ ÊÉÿÀÀÿ¶¶ÿ¬¬ÿ¢¢ÿ™™ÿÿ‰‰ÿ„„ÿ€€ÿ}}ÿzzÿxxÿwwÿvvÿuuÿuuÿ uuÿ ttÿ ssÿ rrÿ rrÿ rrÿ ssÿttÿuuÿvvÿxxÿzzÿ||ÿ!~~ÿ%ÿ(ÿ.ƒƒÿ4ÿ9ƒƒÿ?‡‡ÿDŠŠÿIÿJŽŽù-{{vUUssT }}ñ"ÿ}}ÿ{{ÿyyÿwwÿuuÿttÿ ssÿ qqÿppÿppÿooÿooÿnnÿmmÿppÿttÿuuÿuuÿvvÿvvÿyyÿ~~ÿ„„ÿŽŽÿššÿ ¨¨ÿ ¶µÿ ÄÃÿ ÒÑÿßÞþ ëêðùùÜûûÝûûÞùùá ððôèçÿáàÿ×ÖÿÍÌÿÃÂÿ¸¸ÿ­­ÿ¢¢ÿ™™ÿÿŠŠÿ„„ÿ€€ÿ||ÿyyÿwwÿwwÿwwÿuuÿ ttÿ uuÿ ssÿ rrÿ rrÿ rrÿssÿttÿuuÿvvÿxxÿzzÿ||ÿ"ÿ&€€ÿ)‚‚ÿ/……ÿ4……ÿ:„„ÿ?‡‡ÿDŠŠÿIÿHõ*zz`qq wwœ%ý#ÿ}}ÿ{{ÿyyÿwwÿuuÿttÿ ssÿ rrÿppÿppÿooÿnnÿnnÿooÿttÿuuÿuuÿvvÿvvÿvvÿxxÿ||ÿ‚‚ÿˆˆÿ““ÿžžÿ ««ÿ ¹¸ÿ ÇÆÿ ÕÔÿ áàþ îíñùùÞûûÞûûßùùâ ððõéèÿáàÿØ×ÿÏÎÿÅÄÿººÿ®®ÿ££ÿ™™ÿÿ‰‰ÿ„„ÿÿ{{ÿyyÿxxÿwwÿvvÿuuÿ uuÿ ttÿ rrÿ qqÿ rrÿssÿttÿuuÿvvÿxxÿzzÿ}}ÿ#ÿ(ÿ*‚‚ÿ0……ÿ5ˆˆÿ;‡‡ÿ@ˆˆÿEŠŠÿJŽŽÿG‹‹ì"ssI rr& ||Õ'‚‚ÿ#€€ÿ}}ÿ{{ÿyyÿwwÿvvÿuuÿ ssÿ qqÿppÿppÿooÿnnÿooÿttÿvvÿvvÿvvÿvvÿvvÿwwÿyyÿ{{ÿÿ……ÿŒŒÿ——ÿ¢¢ÿ ¯¯ÿ ½½ÿ ËÊÿ Ø×ÿ ãâþîîòùùàûúàûúáùùã ðïöéèÿáàÿØ×ÿÏÎÿÅÅÿ»»ÿ°°ÿ¥¥ÿ™™ÿÿ‰‰ÿƒƒÿ~~ÿ{{ÿyyÿwwÿwwÿvvÿuuÿttÿrrÿqqÿrrÿrrÿttÿvvÿwwÿxxÿ{{ÿ }}ÿ$€€ÿ)ÿ,ƒƒÿ1††ÿ6‰‰ÿ<ŠŠÿAˆˆÿF‹‹ÿKŽŽÿBˆˆßkk2ssK%ï(‚‚ÿ#€€ÿ}}ÿ{{ÿyyÿwwÿvvÿuuÿ ssÿ qqÿppÿppÿooÿnnÿ ssÿvvÿwwÿwwÿwwÿvvÿwwÿyyÿzzÿ{{ÿ}}ÿÿ‡‡ÿÿššÿ¦¦ÿ ³³ÿ ÁÀÿ ÎÌÿ ÚÚÿ ääþïïòùùáûúáûúâøøå ðïöéèÿáàÿØØÿÏÎÿÅÄÿ»»ÿ°°ÿ¦¦ÿ››ÿ‘‘ÿˆˆÿ‚‚ÿ~~ÿ{{ÿxxÿwwÿvvÿvvÿuuÿssÿrrÿrrÿssÿuuÿwwÿxxÿyyÿ{{ÿ!~~ÿ&ÿ*‚‚ÿ-ƒƒÿ2††ÿ8ŠŠÿ=ŒŒÿBŒŒÿHŒŒÿLÿA‡‡Öll(xx)ƒƒú(‚‚ÿ#€€ÿ~~ÿ{{ÿzzÿxxÿwwÿuuÿ ttÿ rrÿppÿppÿooÿppÿwwÿwwÿwwÿxxÿxxÿxxÿzzÿ{{ÿ{{ÿ||ÿ}}ÿÿ„„ÿ‹‹ÿ““ÿžžÿ««ÿ ··ÿ ÄÃÿ ÐÏÿ ÜÛÿ æåþðïòúùáûúâûúãùùä ñðõéèÿááÿÙØÿÏÎÿÅÄÿººÿ¯¯ÿ¥¥ÿœœÿ““ÿ‰‰ÿÿ}}ÿzzÿxxÿvvÿvvÿuuÿssÿssÿssÿssÿuuÿwwÿxxÿzzÿ||ÿ"~~ÿ'ÿ+ƒƒÿ/„„ÿ3‡‡ÿ9ŠŠÿ?ŽŽÿDÿIŽŽÿLÿ=„„¿jjoo ~~³-……þ)ƒƒÿ$ÿ~~ÿ||ÿ{{ÿyyÿwwÿvvÿ ttÿ rrÿqqÿppÿooÿttÿxxÿxxÿxxÿyyÿzzÿ{{ÿ{{ÿ{{ÿ||ÿ||ÿ}}ÿ~~ÿ‚‚ÿ††ÿŽŽÿ——ÿ¢¢ÿ®®ÿ º¹ÿ ÆÅÿ ÒÑÿ ÝÜÿ æåþðïóúùâûúâûúâùøä ððõéèÿâáÿÙØÿÏÍÿÄÃÿ¹¹ÿ®®ÿ¤¤ÿ››ÿ’’ÿ‰‰ÿ€€ÿ{{ÿyyÿwwÿwwÿuuÿssÿssÿssÿttÿuuÿwwÿyyÿ{{ÿ||ÿ$ÿ(‚‚ÿ,„„ÿ0……ÿ5‡‡ÿ;‹‹ÿ@ŽŽÿE‘‘ÿI‘‘ÿLý5~~™ff rr('‚‚Ù.††ÿ)ƒƒÿ%ÿ ÿ}}ÿ{{ÿzzÿxxÿvvÿ ttÿ ssÿqqÿppÿ rrÿxxÿxxÿxxÿyyÿ{{ÿ||ÿ||ÿ||ÿ||ÿ||ÿ}}ÿ~~ÿÿ€€ÿ„„ÿ‰‰ÿ‘‘ÿ››ÿ¦¦ÿ±°ÿ ½¼ÿ ÈÇÿ ÓÒÿ ÞÝÿ ææþððóùùãûúâûúâùøä ððõéèÿááÿØ×ÿÎÍÿÄÃÿ¸¸ÿ­­ÿ££ÿ™™ÿ‘‘ÿˆˆÿÿzzÿxxÿwwÿvvÿttÿssÿssÿuuÿvvÿwwÿyyÿ{{ÿ!}}ÿ%€€ÿ*‚‚ÿ.„„ÿ2††ÿ6ˆˆÿ<ŒŒÿAÿF’’ÿJ””ÿJ÷,xxnUUww<+„„è/‡‡ÿ*„„ÿ&ÿ!€€ÿ~~ÿ{{ÿzzÿxxÿvvÿ ttÿ ssÿqqÿqqÿvvÿyyÿyyÿyyÿ{{ÿ}}ÿ}}ÿ}}ÿ}}ÿ}}ÿ}}ÿ}}ÿ~~ÿ~~ÿ€€ÿƒƒÿ††ÿÿ””ÿžžÿ§§ÿ³³ÿ¿¾ÿ ÉÈÿ ÔÒÿ ÞÝÿ çæþðïôùùãûúâûúâùùä ððõéèÿáàÿ×ÖÿÍÌÿÂÂÿ·¶ÿ¬¬ÿ¡¡ÿ——ÿŽŽÿ††ÿ}}ÿyyÿwwÿwwÿuuÿssÿssÿuuÿvvÿxxÿyyÿ {{ÿ#~~ÿ'€€ÿ,ƒƒÿ1……ÿ3‡‡ÿ8‰‰ÿ=ŒŒÿBÿG’’ÿK••ÿGï&ttOxxa/‡‡õ0‡‡ÿ+„„ÿ&‚‚ÿ"€€ÿ~~ÿ||ÿzzÿxxÿvvÿ uuÿ ssÿqqÿ ssÿzzÿzzÿzzÿzzÿ||ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ~~ÿ}}ÿ~~ÿ~~ÿ€€ÿ‚‚ÿ„„ÿ‰‰ÿÿ——ÿ  ÿ««ÿµµÿÀ¿ÿ ÊÉÿ ÔÓÿ ÞÝÿ çæþðïôùùãûúáûúâøøä ðïõèçÿàßÿÖÕÿÌËÿÀÀÿ´´ÿ¨¨ÿÿ““ÿ‹‹ÿƒƒÿ{{ÿxxÿwwÿvvÿttÿttÿuuÿvvÿxxÿzzÿ"||ÿ%ÿ)ÿ-„„ÿ2††ÿ5ˆˆÿ:ŠŠÿ?ÿDÿI““ÿM••ÿBÔoo)ff!||‰3ˆˆü1ˆˆÿ+„„ÿ'ƒƒÿ"ÿÿ||ÿzzÿyyÿvvÿ uuÿ ssÿrrÿwwÿ{{ÿzzÿ{{ÿ}}ÿ~~ÿ~~ÿ~~ÿ~~ÿÿÿ~~ÿ~~ÿÿÿ€€ÿÿ„„ÿ‡‡ÿ‹‹ÿ’’ÿ™™ÿ££ÿ¬¬ÿ¶¶ÿÁÀÿ ËÉÿ ÕÔÿ ßÞÿ ççþðïôùøãûûáûúáùùã ïïõççÿßÞÿÔÔÿÉÈÿ¾½ÿ±±ÿ¥¥ÿ™™ÿÿˆˆÿ‚‚ÿzzÿwwÿvvÿttÿuuÿvvÿwwÿyyÿ {{ÿ#}}ÿ'€€ÿ+‚‚ÿ/……ÿ4‡‡ÿ7‰‰ÿ<‹‹ÿAÿF‘‘ÿJ””ÿM––ý6‡‡¤mmss &§6ŠŠþ2ˆˆÿ-……ÿ'ƒƒÿ#ÿÿ||ÿzzÿyyÿvvÿ uuÿ ttÿ ttÿzzÿ||ÿ||ÿ}}ÿ~~ÿ~~ÿ~~ÿÿÿÿÿÿÿÿ€€ÿ€€ÿÿƒƒÿ……ÿ‰‰ÿŽŽÿ””ÿœœÿ¤¤ÿ­­ÿ··ÿÁÀÿ ËÊÿ ÖÕÿ ßßÿ èçþñðóùùâûúáûúâùùã ïîõæåÿÝÝÿÒÑÿÇÆÿººÿ®®ÿ¡¡ÿ••ÿŒŒÿ††ÿ€€ÿyyÿvvÿvvÿvvÿwwÿyyÿzzÿ"||ÿ%~~ÿ)ÿ-ƒƒÿ2††ÿ5ˆˆÿ8‰‰ÿ>ŒŒÿCÿG’’ÿK••ÿJ””ö+jUUff*ƒƒ²7‹‹ÿ3‰‰ÿ-††ÿ(„„ÿ$‚‚ÿÿ}}ÿ{{ÿyyÿwwÿ uuÿ ttÿvvÿ||ÿ||ÿ~~ÿ~~ÿÿÿÿÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿ€€ÿÿ‚‚ÿ„„ÿ‡‡ÿ‹‹ÿÿ••ÿœœÿ¥¥ÿ®®ÿ¸¸ÿÂÁÿ ÌËÿ ÖÔÿ àßÿ ççþððóùøâûúáûúàùùá ïîôåäÿÛÛÿÐÏÿÄÃÿ··ÿ©©ÿÿ’’ÿ‰‰ÿ „„ÿÿxxÿwwÿwwÿxxÿzzÿ!{{ÿ$}}ÿ'ÿ+‚‚ÿ0……ÿ4‡‡ÿ7‰‰ÿ;ŠŠÿ@ÿEÿI““ÿM––ÿF‘‘á{{<tt-……Å8ŒŒÿ3‰‰ÿ.‡‡ÿ)……ÿ%‚‚ÿ €€ÿ}}ÿ{{ÿzzÿwwÿvvÿ uuÿzzÿ}}ÿ~~ÿÿÿÿ€€ÿ€€ÿ€€ÿ€€ÿÿÿÿÿÿÿÿÿÿ‚‚ÿ„„ÿ‡‡ÿ‹‹ÿÿ––ÿÿ¥¥ÿ®®ÿ¸¸ÿÂÁÿ ÌËÿ ÕÔÿ ßÞÿ çæþïïóùùáûúßûúßùùà îîóããÿÚÙÿÍÌÿÀÀÿ²²ÿ¥¥ÿ˜˜ÿÿ!ˆˆÿ"ƒƒÿ~~ÿyyÿwwÿyyÿ zzÿ#||ÿ&~~ÿ*€€ÿ.ƒƒÿ2††ÿ7ˆˆÿ9ŠŠÿ=ŒŒÿBÿG‘‘ÿK””ÿN••þ;‰‰° mmxx&3ˆˆØ:ÿ5ŠŠÿ/ˆˆÿ*……ÿ%ƒƒÿ!€€ÿ~~ÿ{{ÿzzÿxxÿvvÿvvÿ}}ÿ~~ÿÿÿ€€ÿ€€ÿ€€ÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿÿÿÿƒƒÿ„„ÿ††ÿ‰‰ÿÿ‘‘ÿ––ÿÿ¥¥ÿ®®ÿ··ÿÁÁÿ ËÊÿ ÔÓÿ ÞÝÿ æåþðïòùùàûûÞûûÝùùÞ îíòâáÿØÖÿÊÉÿ½¼ÿ¯¯ÿ¡¡ÿ••ÿ!ŒŒÿ#‡‡ÿ#‚‚ÿ{{ÿyyÿ zzÿ"{{ÿ%}}ÿ)€€ÿ-‚‚ÿ1……ÿ5ˆˆÿ:ŠŠÿ;‹‹ÿ@ŽŽÿEÿI““ÿM••ÿL””ô(jUUww17ŠŠã;ÿ6‹‹ÿ0ˆˆÿ*……ÿ&ƒƒÿ"€€ÿ~~ÿ||ÿzzÿxxÿvvÿxxÿÿ€€ÿ€€ÿ€€ÿÿ€€ÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ „„ÿ……ÿ‡‡ÿŠŠÿÿ’’ÿ——ÿÿ¥¥ÿ®®ÿ··ÿÁÀÿ ÊÉÿ ÓÒÿ ÝÜÿååþ ïïòùùÞûûÜûûÛùùÜ ììòàßÿÕÔÿÆÅÿ¸¸ÿ««ÿžžÿ!’’ÿ#‹‹ÿ&……ÿ$ÿ!{{ÿ"||ÿ%}}ÿ(ÿ,ÿ/ƒƒÿ4‡‡ÿ8‰‰ÿ<‹‹ÿ>ŒŒÿCÿG’’ÿK””ÿO––ÿE‘‘Øww1||-6ŠŠß<ŽŽÿ7ŒŒÿ2‰‰ÿ,††ÿ&ƒƒÿ"ÿ~~ÿ||ÿzzÿxxÿvvÿ{{ÿ€€ÿÿÿÿÿÿÿÿÿÿ‚‚ÿ‚‚ÿ‚‚ÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ƒƒÿ ‚‚ÿ!ƒƒÿ!„„ÿ!……ÿ!††ÿ!ˆˆÿ ‹‹ÿŽŽÿ’’ÿ——ÿÿ¥¥ÿ®®ÿ··ÿÀÀÿÉÈÿ ÒÑÿ ÜÛÿåäþ îîñùùÜûûÚûûØùùÙ êéñÞÝþÑÐÿÃÂÿµµÿ§§ÿ!››ÿ$‘‘ÿ'ŠŠÿ(„ƒÿ$~~ÿ%}}ÿ(~~ÿ+€€ÿ.‚‚ÿ2……ÿ7ˆˆÿ;‹‹ÿ=ÿAŽŽÿEÿJ““ÿM••ÿO––û7††˜uu ||-8ŠŠß=ÿ8ÿ3ŠŠÿ-‡‡ÿ(„„ÿ#ÿ~~ÿ||ÿ{{ÿyyÿwwÿ~~ÿ!ÿ‚‚ÿ‚‚ÿ‚‚ÿÿ‚‚ÿÿÿ‚‚ÿ‚‚ÿ ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ"ƒƒÿ"„„ÿ"„„ÿ#„„ÿ#……ÿ"††ÿ"ˆˆÿ!‹‹ÿ ŽŽÿ““ÿ——ÿÿ¥¥ÿ­­ÿ¶¶ÿ¿¾ÿÈÆÿ ÑÐÿÛÚÿãâþ îìðùùÚûûÖûûÕùùÖ éçðÛÚþÎÍÿ¿¿ÿ±±ÿ¤¤ÿ$˜˜ÿ'ÿ*ˆˆÿ(‚‚ÿ'ÿ*€€ÿ.‚‚ÿ2„„ÿ5‡‡ÿ9‰‰ÿ>ŒŒÿ@ŽŽÿDÿH’’ÿL””ÿP––ÿI‘‘â xxFzz29ŒŒã>ÿ9ÿ4ŠŠÿ/‡‡ÿ*……ÿ%‚‚ÿ ÿ}}ÿ{{ÿyyÿxxÿ!ÿ!ƒƒÿ!ƒƒÿ ƒƒÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ‚‚ÿ ‚‚ÿ ‚‚ÿ ƒƒÿ ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ"„„ÿ"„„ÿ#„„ÿ$„„ÿ$„„ÿ$„„ÿ$……ÿ$††ÿ#‡‡ÿ#‰‰ÿ"‹‹ÿ!ÿ ““ÿ——ÿÿ¤¤ÿ¬¬ÿ´´ÿ½¼ÿÆÅÿÏÎÿÙØÿááþ ìëîúúÕüüÓüüÑø÷ÓææïØØþËÊÿ½¼ÿ®®ÿ#¡¡ÿ'––ÿ+ÿ+‡‡ÿ)ÿ-ÿ1ƒƒÿ5††ÿ9ˆˆÿ=‹‹ÿAŽŽÿCÿG‘‘ÿK““ÿO••ÿP––ý9‡‡¤cczz6:ŒŒæ?ÿ:ŽŽÿ5‹‹ÿ0ˆˆÿ+……ÿ&‚‚ÿ!€€ÿ}}ÿ{{ÿyyÿzzÿ#ƒƒÿ#„„ÿ"„„ÿ ƒƒÿ ƒƒÿ ƒƒÿ ‚‚ÿ ƒƒÿ ƒƒÿ ‚‚ÿ ƒƒÿ!ƒƒÿ!ƒƒÿ"„„ÿ"„„ÿ"„„ÿ#……ÿ#……ÿ#……ÿ$……ÿ%……ÿ%……ÿ&……ÿ&……ÿ%……ÿ%††ÿ%ˆˆÿ%ŠŠÿ#ŒŒÿ#ÿ!’’ÿ ——ÿÿ££ÿªªÿ²²ÿººÿÃÃÿÍÌÿÖÖÿàßþ ëêíúúÒüüÐüüÎ÷÷ÐææíÖÕþÉÈÿººÿ!¬¬ÿ'ŸŸÿ,””ÿ/ÿ,††ÿ0„„ÿ5††ÿ9ˆˆÿ=ŠŠÿAÿCÿEÿI’’ÿN””ÿQ——ÿK““è$zzSzz2<ãA‘‘ÿ<ÿ7ŒŒÿ1ˆˆÿ,††ÿ'ƒƒÿ"ÿ~~ÿ||ÿzzÿ||ÿ%„„ÿ$……ÿ#„„ÿ!„„ÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ!ƒƒÿ"„„ÿ#„„ÿ#„„ÿ#……ÿ$††ÿ$††ÿ%††ÿ%……ÿ%……ÿ&††ÿ&††ÿ&††ÿ&††ÿ&††ÿ&‡‡ÿ&ˆˆÿ%ŠŠÿ$ŒŒÿ$ŽŽÿ"’’ÿ!––ÿ››ÿ  ÿ§§ÿ¯¯ÿ··ÿÀÀÿÊÉÿÔÓÿÝÜþééìøøÏýüËýüÊ÷öÍããìÔÓþÆÅÿ··ÿ%©©ÿ+ÿ0””ÿ0ŒŒÿ3‰‰ÿ9‰‰ÿ=ŠŠÿAŒŒÿDÿEÿI’’ÿL““ÿQ––ÿR——û:ˆˆ¡ ff{{!=ÔB’’ÿ=ÿ8ŒŒÿ3‰‰ÿ-††ÿ(„„ÿ$ÿÿ||ÿzzÿÿ'††ÿ%……ÿ%……ÿ#„„ÿ"„„ÿ!„„ÿ!„„ÿ"„„ÿ!ƒƒÿ!„„ÿ"„„ÿ#„„ÿ#„„ÿ$……ÿ%……ÿ%††ÿ%††ÿ%††ÿ&††ÿ&††ÿ&††ÿ'††ÿ'††ÿ'††ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ&ˆˆÿ&‰‰ÿ&ŒŒÿ&ÿ'““ÿ'——ÿ'œœÿ%¡¡ÿ$¨¨ÿ"°°ÿ··ÿÀÀÿÉÈÿÔÓÿÝÜþééêøøËüüÈüüÆø÷ÈááêÒÐþ ÄÃÿ$´´ÿ*§§ÿ1ÿ3““ÿ6ÿ;ŒŒÿ@ÿDÿFÿH‘‘ÿK““ÿP••ÿS——ÿK’’ß!vvEtt8ŒŒÆD’’ÿ?ÿ9ÿ4ŠŠÿ/‡‡ÿ*„„ÿ%ÿ ÿ}}ÿ{{ÿ!ÿ)‡‡ÿ'††ÿ%……ÿ%……ÿ"„„ÿ"„„ÿ#„„ÿ#„„ÿ"„„ÿ#……ÿ#……ÿ$……ÿ$……ÿ%††ÿ%††ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ(‡‡ÿ)‡‡ÿ*‰‰ÿ-‹‹ÿ0ÿ2ÿ2’’ÿ2””ÿ1––ÿ1™™ÿ/œœÿ,¡¡ÿ*§§ÿ'­­ÿ#µµÿ½½ÿÇÆÿÑÐÿÛÚþéçèøøÈüüÄüüÂøøÃáàè ÏÎþ$ÁÁÿ(³³ÿ0§§ÿ3››ÿ7““ÿ>ÿC‘‘ÿG‘‘ÿH‘‘ÿK““ÿO••ÿS——ÿR––ù7††’ffxx7ŠŠ¼E““ÿ@‘‘ÿ;ŽŽÿ6‹‹ÿ1ˆˆÿ,……ÿ&‚‚ÿ"ÿ}}ÿ{{ÿ#ƒƒÿ*ˆˆÿ(‡‡ÿ'††ÿ&††ÿ$……ÿ$……ÿ#……ÿ$……ÿ$……ÿ$……ÿ$……ÿ%††ÿ%††ÿ&††ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ&‡‡ÿ'‡‡ÿ'‡‡ÿ(‡‡ÿ(ˆˆÿ)ˆˆÿ+‰‰ÿ/‹‹ÿ3ŒŒÿ5ŽŽÿ6ÿ6ÿ6ÿ6‘‘ÿ5’’ÿ5““ÿ4••ÿ3——ÿ2ššÿ/ŸŸÿ,££ÿ)ªªÿ%²²ÿ!ººÿÄÄÿÏÎÿÙØþçæçùùÄüüÀýý½öö¿ÞÝæ$ÍÍþ)À¿ÿ.±±ÿ2££ÿ9ššÿ@––ÿF””ÿI““ÿJ’’ÿN””ÿR——ÿT——þFŽŽÈrr1uu 6ŠŠªF””ÿB’’ÿ=ÿ7ŒŒÿ2‰‰ÿ-††ÿ(ƒƒÿ#€€ÿ~~ÿ||ÿ%„„ÿ,ˆˆÿ*ˆˆÿ(‡‡ÿ'‡‡ÿ&††ÿ&††ÿ%……ÿ%……ÿ%††ÿ%††ÿ%††ÿ&††ÿ'‡‡ÿ'‡‡ÿ'ˆˆÿ'ˆˆÿ'ˆˆÿ'ˆˆÿ(ˆˆÿ(ˆˆÿ)ˆˆÿ*‰‰ÿ-ŠŠÿ2ŒŒÿ5ŽŽÿ7ÿ7ÿ8ÿ8ÿ8ÿ8ÿ8‘‘ÿ8‘‘ÿ7’’ÿ6’’ÿ6””ÿ5––ÿ4™™ÿ1œœÿ.¡¡ÿ+§§ÿ'¯¯ÿ"··ÿÁÁÿÍÌÿ×ÖþææåøøÁýý»ýý¹ööºÝÝä)ÌËþ.¾¾ÿ1®®ÿ8££ÿAœœÿH˜˜ÿJ••ÿM••ÿR——ÿU˜˜ÿQ••ì+||dffmm1‡‡‘F””ýD““ÿ?ÿ9ÿ4ŠŠÿ/‡‡ÿ*……ÿ%‚‚ÿ ÿ}}ÿ'……ÿ-‰‰ÿ+‰‰ÿ*ˆˆÿ(‡‡ÿ'‡‡ÿ'‡‡ÿ&††ÿ&††ÿ&††ÿ'††ÿ&‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'ˆˆÿ(ˆˆÿ(ˆˆÿ(ˆˆÿ)ˆˆÿ*‰‰ÿ.‹‹ÿ3ŽŽÿ6ÿ7ÿ7ÿ8ÿ8ÿ9ÿ9ÿ:ÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ9‘‘ÿ9‘‘ÿ9’’ÿ8““ÿ7””ÿ6——ÿ3ššÿ1žžÿ-¤¤ÿ)¬¬ÿ$µµÿ ¿¿ÿËÊÿÕÔþåääøø½ýý·ýý³ööµÜÚâ.ÉÉþ1ººÿ7­­ÿA¤¤ÿGÿJ˜˜ÿP˜˜ÿT™™ÿT——ù:††nn(‚‚^E““õF””ÿA‘‘ÿ<ŽŽÿ6‹‹ÿ1ˆˆÿ,……ÿ'ƒƒÿ"€€ÿ~~ÿ)‡‡ÿ.ŠŠÿ,‰‰ÿ+‰‰ÿ*ˆˆÿ)‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ'‡‡ÿ(ˆˆÿ(ˆˆÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ)‰‰ÿ,ŠŠÿ1ÿ6ÿ7ÿ8ÿ8ÿ9‘‘ÿ9ÿ:‘‘ÿ:‘‘ÿ;‘‘ÿ;‘‘ÿ;‘‘ÿ<‘‘ÿ<’’ÿ<’’ÿ<’’ÿ;‘‘ÿ;’’ÿ:““ÿ9””ÿ8––ÿ6™™ÿ3ÿ0££ÿ+ªªÿ%³³ÿ!½½ÿ ÉÉÿ ÕÔýäâãøøºýý³üü¯öô¯"ÙÙà0ÆÆþ7¹¹ÿ?­­ÿE££ÿLžžÿRœœÿU››ýEŽŽÃrr1$?D’’éH••ÿC’’ÿ>ÿ9ÿ3ŠŠÿ.††ÿ)„„ÿ$ÿ €€ÿ*ˆˆÿ0‹‹ÿ.ŠŠÿ,‰‰ÿ+‰‰ÿ*ˆˆÿ)‡‡ÿ(ˆˆÿ(‡‡ÿ'‡‡ÿ(‡‡ÿ(‡‡ÿ(ˆˆÿ(ˆˆÿ)‰‰ÿ)‰‰ÿ*‰‰ÿ+‰‰ÿ/ŒŒÿ4ŽŽÿ7ÿ7ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ:‘‘ÿ:‘‘ÿ;‘‘ÿ;‘‘ÿ<‘‘ÿ<’’ÿ=““ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ=’’ÿ<““ÿ;““ÿ:––ÿ7˜˜ÿ5œœÿ1¡¡ÿ,¨¨ÿ'±±ÿ"¼¼ÿ!ÈÇÿ!ÓÒýááâ÷÷¶ýý¯ýû© ôôª$ÖÖÞ7ÆÆý<¸¸ÿC««ÿK¤¤ÿRŸŸÿL––ß$~~Uff ||'D‘‘ÙI––ÿE““ÿ@‘‘ÿ;ŽŽÿ6‹‹ÿ1ˆˆÿ+……ÿ&‚‚ÿ!ÿ*ˆˆÿ2ŒŒÿ/‹‹ÿ-ŠŠÿ,‰‰ÿ+‰‰ÿ*ˆˆÿ)ˆˆÿ)ˆˆÿ)‡‡ÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)ˆˆÿ)‰‰ÿ*‰‰ÿ,ŠŠÿ1ÿ5ÿ7ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ:‘‘ÿ:’’ÿ;’’ÿ<’’ÿ<’’ÿ=’’ÿ=’’ÿ=““ÿ>““ÿ>““ÿ>““ÿ>““ÿ>““ÿ?““ÿ?““ÿ>““ÿ=’’ÿ<’’ÿ;““ÿ:••ÿ8——ÿ5››ÿ2ŸŸÿ-§§ÿ(¯¯ÿ$¹¹ÿ#ÆÅÿ"ÑÐýàßà÷ö²ýý©ýý£ ôô¤*ÖÔÚ;ÃÃýB··ÿI¬¬ÿI¢¢í+ŽŽzÿÿÿÿªªªÿÿÿxx>¹K––ÿG””ÿB‘‘ÿ=ÿ8ŒŒÿ4ŠŠÿ.‡‡ÿ)„„ÿ#‚‚ÿ+ˆˆÿ4ÿ2ŒŒÿ/‹‹ÿ.ŠŠÿ-ŠŠÿ,‰‰ÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ*ˆˆÿ*‰‰ÿ*‰‰ÿ*‰‰ÿ-‹‹ÿ2ŽŽÿ6ÿ7ÿ8‘‘ÿ9‘‘ÿ9‘‘ÿ:‘‘ÿ;’’ÿ<““ÿ<““ÿ=““ÿ=““ÿ=““ÿ>““ÿ>““ÿ?““ÿ?””ÿ?””ÿ?””ÿ?””ÿ?””ÿ@””ÿ@””ÿ?““ÿ?““ÿ>““ÿ=““ÿ;””ÿ9––ÿ6ššÿ2žžÿ.¥¥ÿ)­­ÿ$··ÿ$ÃÃÿ$ÏÎýÞÝÞ÷ö­ýý£ýý óó-ÕÔÖ@ÃÃýB¶¶õ*§§ÂÂ*ÿÿ ÿÿÿÿÿÿ™ÌÌßÿÿÿÿÿmm6ŠŠ‘K––ýI••ÿE““ÿ?ÿ:ÿ6ŠŠÿ1ˆˆÿ,††ÿ&„„ÿ+ˆˆÿ5ŽŽÿ4ÿ1ŒŒÿ0‹‹ÿ/ŠŠÿ.ŠŠÿ-‰‰ÿ,‰‰ÿ+ˆˆÿ+‰‰ÿ+‰‰ÿ,‰‰ÿ,‰‰ÿ-‹‹ÿ4ŽŽÿ6ÿ7ÿ8‘‘ÿ9‘‘ÿ9’’ÿ:’’ÿ;’’ÿ<““ÿ<““ÿ=““ÿ=““ÿ>””ÿ>””ÿ>””ÿ?““ÿ@””ÿA••ÿA””ÿ@””ÿ@””ÿA””ÿA””ÿA””ÿA””ÿ@””ÿ@””ÿ?““ÿ>””ÿ<””ÿ:––ÿ7™™ÿ4ÿ/¤¤ÿ)««ÿ%µµÿ%ÁÁÿ%ÍÌýÜÛÝõõ©ýýýý– óó—.ÒÒÏ(Ãø××Søø(þþþþ ÿÿÿÿÿÿ‰°° ßïïÿÿÿÿÿ,ƒƒ[J••ñK––ÿG””ÿB‘‘ÿ=ŽŽÿ7ŒŒÿ3‰‰ÿ.‡‡ÿ)……ÿ,ˆˆÿ7ÿ5ŽŽÿ4ÿ1ŒŒÿ0‹‹ÿ/‹‹ÿ.ŠŠÿ-‰‰ÿ,‰‰ÿ,‰‰ÿ,‰‰ÿ-‰‰ÿ.‹‹ÿ4ŽŽÿ6ÿ8‘‘ÿ8‘‘ÿ9‘‘ÿ:’’ÿ:’’ÿ;’’ÿ<““ÿ<““ÿ=””ÿ>””ÿ?””ÿ?””ÿ@••ÿ@••ÿA••ÿB••ÿB••ÿB••ÿB••ÿA••ÿB••ÿB••ÿB••ÿB••ÿB••ÿA””ÿ@““ÿ@““ÿ>““ÿ=••ÿ;––ÿ8™™ÿ4œœÿ0¢¢ÿ*ªªÿ&³³ÿ&¿¿ÿ&ËÊýÙÙÜõô¥ýý™ýý‘õõ‹îîyþþRþþ:þþ%þþþþ ÿÿÿÿÿÿ²²áððÿÿÿww CËM——ÿI••ÿD’’ÿ?ÿ:ÿ6ŠŠÿ1ˆˆÿ,††ÿ-ˆˆÿ9ÿ8ÿ6ÿ4ÿ2ŒŒÿ1ŒŒÿ/‹‹ÿ.ŠŠÿ-ŠŠÿ-ŠŠÿ-‰‰ÿ.ŠŠÿ3ŽŽÿ6ÿ7ÿ8‘‘ÿ9‘‘ÿ:’’ÿ;’’ÿ;’’ÿ<““ÿ<““ÿ=““ÿ>””ÿ?••ÿ@••ÿA••ÿA––ÿB––ÿB––ÿB••ÿC––ÿC••ÿC––ÿC––ÿC––ÿC––ÿC••ÿC••ÿC••ÿB••ÿA””ÿ@““ÿ?’’ÿ?““ÿ=””ÿ;––ÿ8˜˜ÿ4››ÿ0¡¡ÿ+¨¨ÿ&±±ÿ&½½ÿ'ÉÉýØØÚõõŸýý“ýý‹üü|ÿÿfþþOþþ7þþ#þþþþ ÿÿÿÿÿÿ¯¯çþþ ÿÿÿqq <ŒŒ˜N——ýK––ÿG””ÿB‘‘ÿ=ŽŽÿ8ŒŒÿ3‰‰ÿ.‡‡ÿ,ˆˆÿ9ÿ:ÿ8ÿ6ÿ4ÿ2ŒŒÿ1ŒŒÿ0‹‹ÿ/‹‹ÿ.ŠŠÿ.ŠŠÿ3ÿ6ÿ7ÿ8ÿ9‘‘ÿ:’’ÿ:’’ÿ;’’ÿ<““ÿ=““ÿ=””ÿ?••ÿ?••ÿ@––ÿA––ÿB––ÿB——ÿC––ÿD——ÿD——ÿD——ÿD––ÿD——ÿE——ÿE——ÿD––ÿD––ÿD––ÿD––ÿD––ÿD––ÿB••ÿA““ÿ?““ÿ?““ÿ=””ÿ;••ÿ8——ÿ4ššÿ0  ÿ+§§ÿ'°¯ÿ'»»ÿ)ÇÇýÖÕØõõ›ýýŽýý‡üüxþþdþþLþþ6þþ#þþÿÿ ÿÿÿÿÿÿÿÿUU²² ÿÿÿÿÿ-‚‚ZL••òN——ÿJ••ÿF’’ÿ@ÿ;ÿ6ŠŠÿ1‰‰ÿ-ˆˆÿ9ÿ<‘‘ÿ:ÿ8ÿ6ÿ4ÿ2ÿ1ŒŒÿ1ŒŒÿ0‹‹ÿ2ŒŒÿ7ÿ8ÿ8‘‘ÿ9‘‘ÿ:‘‘ÿ:‘‘ÿ;’’ÿ<““ÿ=””ÿ?••ÿ?••ÿ@••ÿA••ÿA––ÿB––ÿB——ÿC——ÿC——ÿE——ÿE˜˜ÿE˜˜ÿE——ÿE——ÿE——ÿE——ÿE——ÿE——ÿE––ÿE––ÿD––ÿD––ÿD––ÿC••ÿA””ÿ@““ÿ?““ÿ>””ÿ:””ÿ8––ÿ5™™ÿ1ŸŸÿ+¥¥ÿ'­­ÿ(¹¹ÿ)ÅÅýÕÕÖóó—þýŠýýƒþþuþþaþþKþþ6þþ#þþÿÿ þþÿÿÿÿÿÿªªªÿÿÿ!&F‘‘ÒQ™™ÿM––ÿH””ÿC‘‘ÿ>ÿ9ŒŒÿ4ŠŠÿ/‰‰ÿ7ŽŽÿ?’’ÿ<ÿ:ÿ8ÿ6ŽŽÿ4ŽŽÿ3ÿ2ŒŒÿ2ŒŒÿ6ÿ8ÿ9‘‘ÿ:‘‘ÿ:‘‘ÿ;’’ÿ<’’ÿ=““ÿ>””ÿ?””ÿ?••ÿ@••ÿA––ÿB––ÿB––ÿC——ÿD——ÿD˜˜ÿE˜˜ÿE˜˜ÿF˜˜ÿE˜˜ÿF˜˜ÿF˜˜ÿF——ÿF——ÿF——ÿF——ÿF——ÿF——ÿE——ÿE––ÿD––ÿC––ÿB••ÿA””ÿA““ÿ?““ÿ=““ÿ;””ÿ8••ÿ5˜˜ÿ1ÿ+££ÿ(««ÿ)··ÿ+ÃÃý ÓÓÓòò“ýý†ýýþþsÿÿ`þþKþþ6þþ%þþþþ þþÿÿÿÿÿÿÿÿ ;ŠŠ—Q˜˜ýP˜˜ÿK••ÿF““ÿB‘‘ÿ=ŽŽÿ8‹‹ÿ2ŠŠÿ5ÿB””ÿ?’’ÿ<‘‘ÿ;ÿ9ÿ6ÿ5ŽŽÿ3ÿ5ŽŽÿ:‘‘ÿ:‘‘ÿ:‘‘ÿ;’’ÿ<’’ÿ<““ÿ=““ÿ>””ÿ?””ÿ@••ÿ@••ÿA––ÿB––ÿB——ÿD——ÿD——ÿD˜˜ÿE˜˜ÿF™™ÿF™™ÿF™™ÿF™™ÿG™™ÿG™™ÿG˜˜ÿG˜˜ÿH™™ÿH˜˜ÿG˜˜ÿG˜˜ÿF——ÿE——ÿE––ÿD––ÿD––ÿB••ÿA””ÿ@““ÿ?’’ÿ=““ÿ;““ÿ8••ÿ5——ÿ1››ÿ,¡¡ÿ(©©ÿ*µµÿ,ÀÀý!ÐÐÒôòŽýýƒþþ~þþrÿÿ`þþLþþ8þþ&þþÿÿÿÿÿÿÿÿÿÿ1……RO——îR™™ÿN——ÿI””ÿE’’ÿAÿ;ÿ6ŒŒÿ4‹‹ÿB””ÿB””ÿ?’’ÿ=‘‘ÿ;‘‘ÿ9ÿ7ÿ7ÿ:‘‘ÿ;‘‘ÿ;‘‘ÿ<’’ÿ<’’ÿ>””ÿ>””ÿ>””ÿ?””ÿ@••ÿA••ÿA••ÿB––ÿC––ÿC——ÿD——ÿE˜˜ÿE˜˜ÿF™™ÿF™™ÿF™™ÿF™™ÿG™™ÿG™™ÿH™™ÿH™™ÿI™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH˜˜ÿF˜˜ÿE——ÿE––ÿD––ÿC––ÿB••ÿA””ÿ?’’ÿ>’’ÿ=’’ÿ:““ÿ8““ÿ5––ÿ0™™ÿ,žžÿ)¦¦ÿ+²²ÿ-¾¾ý"ÐÏÐ òòŒýý€þþ|þþqþþaþþNþþ:þþ)þþÿÿÿÿ ÿÿÿÿÿÿÿÿzzCŽŽ¶SššýQ˜˜ÿM––ÿH””ÿC‘‘ÿ?ÿ:ŽŽÿ5ŒŒÿ@““ÿE••ÿB””ÿ?’’ÿ>‘‘ÿ<‘‘ÿ9ÿ:ÿ?““ÿ>““ÿ=’’ÿ=““ÿ>““ÿ>””ÿ>””ÿ?””ÿ?””ÿ@••ÿA••ÿB––ÿC——ÿD——ÿD——ÿD——ÿE˜˜ÿE˜˜ÿF™™ÿG™™ÿG™™ÿG™™ÿHššÿHššÿIššÿI™™ÿI™™ÿI™™ÿH™™ÿH™™ÿH™™ÿH™™ÿH˜˜ÿF——ÿF——ÿE——ÿE––ÿD––ÿB••ÿ@““ÿ?’’ÿ>’’ÿ<’’ÿ:’’ÿ7““ÿ4””ÿ0˜˜ÿ,ÿ)¥¥ÿ+°°ÿ.¾½ü$ÍÍÐ óó‰þþ}þþyþþpþþaþþOÿÿ<þþ*þþþþÿÿ ÿÿÿÿÿÿÿÿ,QN——çSššÿP˜˜ÿL••ÿG’’ÿA‘‘ÿ=ÿ9ÿ;ÿF––ÿE••ÿB””ÿ@’’ÿ>‘‘ÿ;‘‘ÿ=’’ÿA””ÿ@””ÿ@””ÿ?””ÿ?””ÿ?””ÿ?””ÿ@••ÿ@••ÿA••ÿB––ÿC––ÿD——ÿE——ÿE——ÿE˜˜ÿE˜˜ÿF˜˜ÿG™™ÿHššÿH™™ÿIššÿIššÿIššÿIššÿIššÿIššÿI™™ÿIššÿI™™ÿI™™ÿI™™ÿH™™ÿH˜˜ÿF——ÿE——ÿE––ÿD––ÿC••ÿA””ÿ?““ÿ>’’ÿ=‘‘ÿ<‘‘ÿ:‘‘ÿ7’’ÿ4““ÿ0––ÿ,››ÿ*££ÿ,®®ÿ/»»ü$ÌÌÏ ññ†þþzþþwþþpþþaþþOþþ=þþ,þþþþþþ ÿÿÿÿÿÿÿÿxxD¨TššýR™™ÿO——ÿK••ÿE’’ÿA‘‘ÿ<ÿ9ŽŽÿF––ÿH——ÿE––ÿB””ÿ@““ÿ>’’ÿA””ÿC••ÿC••ÿC••ÿA••ÿA••ÿA••ÿ@••ÿB••ÿB––ÿB––ÿC––ÿD——ÿE——ÿE——ÿF˜˜ÿF˜˜ÿG™™ÿG™™ÿH™™ÿIššÿIššÿJššÿJššÿIššÿIššÿIššÿIššÿJššÿJššÿJ™™ÿI™™ÿI™™ÿI™™ÿH™™ÿG˜˜ÿF——ÿE——ÿE––ÿD––ÿB••ÿ@””ÿ?““ÿ>’’ÿ=‘‘ÿ;ÿ9ÿ6ÿ4’’ÿ0••ÿ-ššÿ*¡¡ÿ-­­ÿ0ººü&ËËÌ ññ‚ÿÿxþþwþþoþþaÿÿPþþ>þþ-þþþþþþ ÿÿÿÿÿÿÿÿ4††NP˜˜éUššÿR™™ÿN——ÿI””ÿD““ÿ?‘‘ÿ;ÿC““ÿJ˜˜ÿH——ÿE••ÿB””ÿA““ÿD••ÿE––ÿE––ÿE––ÿD––ÿB••ÿC••ÿC––ÿC––ÿC––ÿD——ÿD––ÿE——ÿE˜˜ÿF˜˜ÿG˜˜ÿG™™ÿH™™ÿH™™ÿHššÿIššÿIššÿJ››ÿJ››ÿK››ÿK››ÿJ››ÿK››ÿK››ÿKššÿKššÿIššÿI™™ÿI™™ÿI™™ÿH™™ÿG˜˜ÿF——ÿE——ÿD––ÿD––ÿA••ÿ@””ÿ?““ÿ=‘‘ÿ<ÿ;ÿ:ÿ7ÿ4’’ÿ1••ÿ-™™ÿ+  ÿ/¬¬ÿ3¹¹ü(ÉÉÊ ððþþuþþuþþmÿÿ`þþQþþ>þþ-þþÿÿþþ ÿÿÿÿÿÿÿÿBŽŽ¡W››üUššÿQ˜˜ÿM––ÿI””ÿC““ÿ>‘‘ÿ?‘‘ÿL™™ÿK˜˜ÿH——ÿF––ÿC••ÿG——ÿH——ÿG——ÿF––ÿF——ÿE––ÿE––ÿE––ÿE——ÿE——ÿE——ÿE——ÿF˜˜ÿG˜˜ÿG™™ÿH™™ÿH™™ÿIššÿI™™ÿJššÿJššÿJ››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿK››ÿL››ÿK››ÿKššÿJššÿJ™™ÿI™™ÿH™™ÿH˜˜ÿH˜˜ÿF——ÿE——ÿD––ÿC––ÿA••ÿ@””ÿ?’’ÿ=‘‘ÿ<ÿ;ÿ8ÿ7ÿ5‘‘ÿ2””ÿ/˜˜ÿ.  ÿ2¬¬ÿ5¸¸ü+ÉÈÉ ðð|þþrþþqþþkþþ_þþOÿÿ<þþ,ÿÿþþÿÿ ÿÿÿÿÿÿ0ƒƒDQ——áXœœÿUššÿP˜˜ÿM––ÿG””ÿC““ÿ?ÿJ——ÿNššÿL™™ÿI——ÿG––ÿK˜˜ÿJ™™ÿI˜˜ÿH——ÿG˜˜ÿG——ÿG˜˜ÿG˜˜ÿG——ÿF——ÿF˜˜ÿG˜˜ÿG˜˜ÿH™™ÿH™™ÿH™™ÿIššÿJššÿJššÿKššÿL››ÿL››ÿK››ÿL››ÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿM››ÿL››ÿL››ÿKššÿJ™™ÿH™™ÿH™™ÿG˜˜ÿE——ÿE––ÿC––ÿB••ÿA””ÿ@““ÿ>‘‘ÿ=ÿ<ÿ:ÿ9ÿ8ÿ7‘‘ÿ4””ÿ2˜˜ÿ1  ÿ5««ÿ8··ü,ÇÆÇ ððxþþnþþnþþiþþ]þþMþþ;þþ,þþÿÿÿÿ ÿÿÿÿÿÿ @ŽŽŠX››ùWœœÿS™™ÿO——ÿK––ÿG””ÿB’’ÿD””ÿPššÿOššÿK™™ÿJ˜˜ÿNššÿMššÿL™™ÿK™™ÿI˜˜ÿI˜˜ÿI˜˜ÿH˜˜ÿH˜˜ÿH˜˜ÿH™™ÿH™™ÿH™™ÿH™™ÿH™™ÿIššÿJššÿJššÿKššÿK››ÿLœœÿLœœÿLœœÿLœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿM››ÿL››ÿKššÿJššÿI™™ÿI™™ÿH™™ÿF——ÿE——ÿD––ÿC––ÿB••ÿA““ÿ@’’ÿ>‘‘ÿ=ÿ<ÿ;ÿ:ÿ9ÿ8’’ÿ7””ÿ4™™ÿ3ŸŸÿ7ªªÿ;¶¶ü0ÅÅÇ ïïuþþiþþjþþdþþYþþJþþ9þþ)þþÿÿþþ ÿÿÿÿÿÿ+‚‚)L””ÇYœœþV››ÿR™™ÿN——ÿJ——ÿF””ÿB““ÿM˜˜ÿR››ÿOššÿM™™ÿP››ÿO››ÿN››ÿMššÿL™™ÿLššÿK™™ÿJ™™ÿI™™ÿJ™™ÿJššÿJ™™ÿI™™ÿJ™™ÿJššÿKššÿKššÿK››ÿL››ÿL››ÿLœœÿMœœÿL››ÿLœœÿLœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿMœœÿL››ÿK››ÿJššÿJ™™ÿI™™ÿH˜˜ÿG——ÿF——ÿD––ÿD––ÿB••ÿB””ÿA““ÿ@’’ÿ?’’ÿ>‘‘ÿ=ÿ=ÿ<ÿ;‘‘ÿ;’’ÿ9••ÿ7™™ÿ7  ÿ;©©ÿ>´´ü3ÃÃÅ ììpþþeþþeþþ_þþTþþFþþ6þþ&þþÿÿÿÿÿÿÿÿÿÿ9‰‰]UššëYÿV››ÿR™™ÿN˜˜ÿJ——ÿG••ÿG••ÿSœœÿRœœÿPššÿSœœÿSÿQœœÿP››ÿO››ÿN››ÿM››ÿLššÿLššÿLššÿKššÿKššÿKššÿLššÿL››ÿL››ÿL››ÿL››ÿL››ÿMœœÿMœœÿMœœÿMœœÿNÿMœœÿNœœÿNÿNÿNÿNÿNÿNÿNœœÿMœœÿL››ÿKššÿJššÿJ™™ÿI™™ÿH™™ÿG˜˜ÿF——ÿF——ÿE––ÿC••ÿC””ÿB””ÿA““ÿ@’’ÿ?‘‘ÿ?‘‘ÿ?‘‘ÿ>‘‘ÿ=’’ÿ>””ÿ<––ÿ:™™ÿ;ŸŸÿ>©©ÿD´´û7ÃÃÁëëkþþ_ÿÿ`þþ[ÿÿPþþAþþ2þþ#þþþþ þþÿÿÿÿÿÿooB’YøYÿV››ÿR™™ÿN˜˜ÿK——ÿG••ÿN™™ÿVÿSœœÿUžžÿVŸŸÿTžžÿTÿRœœÿQœœÿPœœÿO››ÿOœœÿOœœÿN››ÿM››ÿL››ÿM››ÿNœœÿNœœÿMœœÿNœœÿNœœÿOÿOÿNÿNÿOÿOÿOÿOÿOÿOÿOÿOÿOÿOÿNœœÿNœœÿM››ÿM››ÿKššÿJššÿJššÿH™™ÿH˜˜ÿG˜˜ÿG——ÿF——ÿE––ÿD••ÿC””ÿC””ÿA““ÿA’’ÿA’’ÿA’’ÿA““ÿ@““ÿ@””ÿ@——ÿ>™™ÿ?ŸŸÿD©©ÿH´´û:¿ëëfþþYþþZÿÿUþþJþþ=þþ-þþÿÿÿÿ ÿÿÿÿÿÿÿÿ&(M••ÁZžžýYÿV››ÿR™™ÿO™™ÿK——ÿI––ÿTœœÿWžžÿWžžÿY  ÿX  ÿVŸŸÿUžžÿVŸŸÿZ¢¢ÿY¡¡ÿSžžÿPœœÿPœœÿOœœÿOœœÿOœœÿOœœÿOÿOÿOÿPÿPÿQžžÿPžžÿPžžÿPÿPžžÿPžžÿPžžÿPžžÿPÿPÿPÿPÿOÿOÿOœœÿNœœÿM››ÿL››ÿLššÿKššÿJššÿJ™™ÿI˜˜ÿH˜˜ÿH˜˜ÿG——ÿF——ÿF––ÿE••ÿD••ÿD””ÿD””ÿE””ÿD””ÿD””ÿE••ÿE––ÿE——ÿD››ÿF¡¡ÿIªªÿM´´û>ÀÀ¼ìì^þþRþþSþþNÿÿDþþ7þþ)þþþþÿÿ ÿÿÿÿÿÿÿÿUU0……ES™™Ù\žžÿYÿV››ÿSššÿO™™ÿK——ÿL˜˜ÿWžžÿYŸŸÿ\¡¡ÿ\¢¢ÿZ¡¡ÿ]¢¢ÿq­­ÿy²²ÿy³³ÿk««ÿV  ÿRÿRÿRÿQÿRÿQÿQžžÿQÿQÿQžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿQžžÿQžžÿQžžÿQžžÿQÿPÿPÿOÿOœœÿNœœÿNœœÿM››ÿL››ÿKššÿK™™ÿI™™ÿJ™™ÿI˜˜ÿH˜˜ÿH——ÿG——ÿH——ÿG––ÿG––ÿG––ÿH––ÿH––ÿI––ÿI––ÿK˜˜ÿKššÿJÿK¢¢ÿNªªÿO²²ûB½½¸ççXþþKþþKþþFþþ=þþ1þþ$ÿÿÿÿÿÿÿÿÿÿÿÿ9ˆˆaV››ä\žžÿYÿVœœÿS››ÿPššÿL˜˜ÿPššÿZ  ÿ]¡¡ÿ_¢¢ÿ]¢¢ÿkªªÿ}´´ÿ~´´ÿ~µµÿ}´´ÿm¬¬ÿX  ÿUŸŸÿTŸŸÿSžžÿSžžÿSžžÿSžžÿSŸŸÿSŸŸÿSŸŸÿSŸŸÿTŸŸÿSŸŸÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿSŸŸÿSŸŸÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿRžžÿQÿPÿOœœÿNœœÿNœœÿM››ÿMššÿLššÿLššÿKššÿKššÿJ™™ÿJ˜˜ÿJ˜˜ÿJ˜˜ÿJ——ÿK˜˜ÿL˜˜ÿL˜˜ÿM——ÿN——ÿO˜˜ÿOššÿPœœÿPŸŸÿN¢¢ÿP©©ÿS±±úF¼¼µèèPþþAþþAþþ=þþ5þþ)ÿÿÿÿÿÿ þþÿÿÿÿÿÿss 9‰‰oWœœè\ŸŸÿZžžÿVÿS››ÿPššÿM˜˜ÿTÿ]¢¢ÿb¤¤ÿa¤¤ÿp­­ÿµµÿµµÿ¶¶ÿ~¶¶ÿ|´´ÿc¦¦ÿX  ÿW  ÿV  ÿV  ÿUŸŸÿUŸŸÿU  ÿU  ÿUŸŸÿUŸŸÿU  ÿV  ÿV  ÿV  ÿU  ÿU  ÿT  ÿT  ÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿSŸŸÿSŸŸÿSžžÿSžžÿRžžÿQžžÿQÿPœœÿPÿOœœÿOœœÿNœœÿN››ÿNœœÿMššÿLššÿLššÿMššÿMššÿN™™ÿOššÿO™™ÿQ™™ÿQ™™ÿSššÿT››ÿUÿUžžÿPÿO  ÿR§§ÿX°°úO¹¹±ääDþþ6þþ7ÿÿ3þþ+ÿÿ"ÿÿÿÿþþ ÿÿÿÿÿÿmm;‰‰wY››ì]ŸŸÿZžžÿWÿTœœÿQššÿOššÿXŸŸÿb¤¤ÿd¥¥ÿlªªÿµµÿ··ÿ€¶¶ÿ¶¶ÿ}µµÿg¨¨ÿ[¢¢ÿ[¡¡ÿZ¢¢ÿY¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿX¡¡ÿW  ÿW¡¡ÿW¡¡ÿX¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿW¡¡ÿV¡¡ÿV¡¡ÿW  ÿV  ÿV  ÿV  ÿV  ÿU  ÿTŸŸÿTŸŸÿTŸŸÿTŸŸÿSžžÿRžžÿRžžÿRÿQÿPÿPœœÿOœœÿPœœÿOœœÿO››ÿPœœÿPœœÿQ››ÿR››ÿR››ÿSššÿU››ÿVœœÿXÿYžžÿVœœÿS››ÿPœœÿR  ÿX§§ÿW¬¬á'¸¸Zøø)þþ+þþ+þþ'þþ!þþþþþþ þþÿÿÿÿÿÿoo>‹‹~Zí^ŸŸÿ[žžÿXÿUœœÿR››ÿQ››ÿ[  ÿe¦¦ÿg§§ÿt¯¯ÿ€¶¶ÿ··ÿ€¶¶ÿx²²ÿc¥¥ÿ^££ÿ]££ÿ]££ÿ]££ÿ\££ÿ[¢¢ÿZ¢¢ÿZ¢¢ÿY¢¢ÿY¡¡ÿZ¢¢ÿZ¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿX¡¡ÿX¡¡ÿX¡¡ÿW¡¡ÿW¡¡ÿW  ÿW  ÿV  ÿV  ÿUŸŸÿTŸŸÿTŸŸÿSŸŸÿTžžÿSžžÿSžžÿSžžÿSžžÿSžžÿTžžÿTžžÿUÿUÿVÿWÿXÿZžžÿ[ŸŸÿZžžÿU››ÿSššÿS››ÿUžžÿOœœé1””|ÇÇ ÿÿþþþþþþþþþþÿÿÿÿ þþÿÿÿÿÿÿÿÿxx>ŠŠZœœì_  ÿ\ŸŸÿYžžÿVÿSœœÿSœœÿ^¢¢ÿg¨¨ÿh¨¨ÿo¬¬ÿs®®ÿq­­ÿg¨¨ÿb¥¥ÿa¥¥ÿa¤¤ÿ`¥¥ÿ_¤¤ÿ_¤¤ÿ_¤¤ÿ^¤¤ÿ]¤¤ÿ\££ÿ\££ÿ\££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[££ÿ[¢¢ÿZ¢¢ÿZ¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¢¢ÿY¡¡ÿX¡¡ÿX¡¡ÿW¡¡ÿW  ÿV  ÿW  ÿV  ÿW  ÿV  ÿW  ÿW  ÿW  ÿW  ÿWŸŸÿYŸŸÿZŸŸÿ[  ÿ[ŸŸÿ]  ÿ]  ÿXÿTššÿUššÿW››þP˜˜å0ˆˆx þþ ÿÿ ÿÿþþþþþþÿÿþþ ÿÿ þþÿÿÿÿÿÿxx;‰‰wY››ç`  ÿ]¡¡ÿZŸŸÿWžžÿUÿUœœÿ`££ÿj©©ÿj©©ÿi¨¨ÿh¨¨ÿg§§ÿf§§ÿe§§ÿd¦¦ÿc¦¦ÿb¦¦ÿb¥¥ÿb¦¦ÿa¥¥ÿa¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ_¤¤ÿ^¤¤ÿ]¤¤ÿ^¤¤ÿ^¤¤ÿ^¤¤ÿ^¤¤ÿ]¤¤ÿ^¤¤ÿ]¤¤ÿ]¤¤ÿ]¤¤ÿ\¤¤ÿ\££ÿ\££ÿ\££ÿ[££ÿ[££ÿ[¢¢ÿZ¢¢ÿY¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿY¢¢ÿZ¢¢ÿZ¢¢ÿZ¢¢ÿ[¢¢ÿ[¢¢ÿ[¡¡ÿ]¡¡ÿ]¡¡ÿ^¡¡ÿ^¡¡ÿ_¡¡ÿZžžÿU››ÿV››ÿW››þN––Þ-ƒƒkooÿÿÿÿÿÿÿÿÿÿþþ ÿÿ ÿÿ ÿÿþþÿÿÿÿÿÿÿÿuu 9‰‰fWššÝ`¡¡þ_¡¡ÿ\  ÿYŸŸÿVÿVÿ`££ÿlªªÿl««ÿkªªÿj©©ÿi¨¨ÿh¨¨ÿg¨¨ÿf¨¨ÿf§§ÿe§§ÿd§§ÿd§§ÿc§§ÿc¦¦ÿc¦¦ÿb¦¦ÿb¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿ`¦¦ÿ`¦¦ÿ`¦¦ÿ`¦¦ÿ`¥¥ÿ_¥¥ÿ_¥¥ÿ_¥¥ÿ^¥¥ÿ^¥¥ÿ^¤¤ÿ^¤¤ÿ]¤¤ÿ]¤¤ÿ]££ÿ]££ÿ]££ÿ]¤¤ÿ]¤¤ÿ]££ÿ]££ÿ]££ÿ^££ÿ_¢¢ÿ_¢¢ÿ`££ÿ`££ÿa££ÿ[ŸŸÿV››ÿWœœÿW››üJ””Í*€€Yss ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ:‰‰NS——Æ^  ú`¡¡ÿ]  ÿZŸŸÿXžžÿVžžÿ`££ÿlªªÿn««ÿm««ÿlªªÿkªªÿkªªÿj©©ÿi©©ÿh©©ÿg¨¨ÿg¨¨ÿf¨¨ÿf¨¨ÿf¨¨ÿe¨¨ÿe¨¨ÿd§§ÿd§§ÿd§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc§§ÿb§§ÿb§§ÿb§§ÿb¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿa¦¦ÿ`¦¦ÿ`¦¦ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ`¥¥ÿ`¤¤ÿa¤¤ÿa££ÿa¤¤ÿc¥¥ÿc¤¤ÿ\  ÿVœœÿXœœÿV››÷F‘‘¶%{{>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUU-||-M””ž\žžï`¢¢ÿ_¢¢ÿ\  ÿYŸŸÿXžžÿ]¢¢ÿk©©ÿp¬¬ÿp¬¬ÿo¬¬ÿn««ÿm««ÿl««ÿkªªÿjªªÿjªªÿiªªÿiªªÿiªªÿiªªÿh©©ÿg©©ÿg©©ÿg©©ÿg©©ÿf©©ÿf©©ÿf©©ÿf¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿe¨¨ÿd¨¨ÿd§§ÿd§§ÿd§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc§§ÿc¦¦ÿc¥¥ÿd¥¥ÿd¥¥ÿd¥¥ÿc¤¤ÿ[  ÿWÿXþQ™™ç:ŠŠ‘yy(&>ŒŒfU™™Ñ_  û`¢¢ÿ^¡¡ÿ\  ÿZŸŸÿ[  ÿi¨¨ÿr­­ÿq­­ÿq­­ÿp¬¬ÿo¬¬ÿo¬¬ÿn¬¬ÿm««ÿl««ÿl««ÿl««ÿk««ÿk««ÿk««ÿj««ÿj««ÿjªªÿiªªÿiªªÿhªªÿhªªÿhªªÿh©©ÿhªªÿh©©ÿh©©ÿg©©ÿg©©ÿf©©ÿg©©ÿf©©ÿf©©ÿf©©ÿf¨¨ÿf©©ÿf©©ÿf¨¨ÿf¨¨ÿf§§ÿf§§ÿf¦¦ÿf§§ÿf§§ÿa££ÿYŸŸÿXžžÿWœœùK””Ê-ƒƒ_qqff2‚‚3I““˜[è`¡¡þ`¢¢ÿ]¡¡ÿ[  ÿ\  ÿe¦¦ÿp­­ÿs®®ÿs®®ÿr®®ÿr­­ÿq­­ÿp­­ÿp­­ÿo­­ÿo¬¬ÿn¬¬ÿn¬¬ÿm¬¬ÿn­­ÿm¬¬ÿm¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿk¬¬ÿk««ÿk««ÿj««ÿj««ÿj««ÿj««ÿj««ÿi««ÿi««ÿi««ÿiªªÿiªªÿh©©ÿh©©ÿh©©ÿi©©ÿi¨¨ÿh¨¨ÿh¨¨ÿi¨¨ÿf§§ÿ^¢¢ÿYžžÿXžžýP™™â;’}}3UU"ww:‡‡OO––°]  ð`¢¢þ_¢¢ÿ^¡¡ÿ]¡¡ÿ`££ÿj©©ÿr®®ÿu¯¯ÿt¯¯ÿs®®ÿt¯¯ÿs¯¯ÿr®®ÿr®®ÿr®®ÿq®®ÿp®®ÿp®®ÿp­­ÿp®®ÿo®®ÿo­­ÿn­­ÿn­­ÿn­­ÿn­­ÿm¬¬ÿm¬¬ÿm¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿk¬¬ÿl¬¬ÿl¬¬ÿl¬¬ÿk««ÿkªªÿkªªÿkªªÿkªªÿi©©ÿb¥¥ÿ[  ÿXžžþSœœðG””³)‚‚Pww!yyA^Q™™µ[ŸŸì`¢¢þ_¢¢ÿ^¢¢ÿ]¡¡ÿa¤¤ÿk©©ÿr®®ÿu°°ÿv°°ÿu°°ÿu¯¯ÿt¯¯ÿs¯¯ÿt¯¯ÿs¯¯ÿs¯¯ÿs¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿq¯¯ÿq®®ÿp®®ÿp®®ÿp®®ÿo­­ÿo­­ÿo­­ÿo­­ÿo­­ÿn­­ÿn­­ÿn¬¬ÿn¬¬ÿn¬¬ÿm««ÿm««ÿk©©ÿd¥¥ÿ]¡¡ÿXŸŸþTœœñH””½3ˆˆc{{UU!yy:ŒŒ[R˜˜À]  ó`¢¢þ`££ÿ^¢¢ÿ^¢¢ÿ`££ÿg§§ÿo¬¬ÿu°°ÿw°°ÿw°°ÿv°°ÿv°°ÿu°°ÿu°°ÿu°°ÿu°°ÿt°°ÿt°°ÿt°°ÿt°°ÿs¯¯ÿs¯¯ÿr¯¯ÿr¯¯ÿr¯¯ÿq¯¯ÿq®®ÿq®®ÿp®®ÿp­­ÿp­­ÿp­­ÿp­­ÿn««ÿj©©ÿd¥¥ÿ]¡¡ÿYžžüRššèF””¸3‰‰hww UU' ?aK””¨VœœÜ]¡¡ö`¢¢þ`££ÿ_¢¢ÿ_¢¢ÿc¥¥ÿlªªÿr­­ÿu°°ÿx±±ÿx±±ÿx±±ÿx±±ÿx±±ÿv±±ÿu°°ÿu±±ÿu±±ÿu°°ÿt°°ÿt°°ÿs¯¯ÿs°°ÿt°°ÿt¯¯ÿs¯¯ÿs¯¯ÿr®®ÿo¬¬ÿlªªÿf§§ÿ_££ÿ[  þVôO˜˜Û@ŽŽ-„„Ozzww-„„2?lK••¦T››Ó]  ô`¢¢þ_££ÿ_¢¢ÿ_££ÿa¤¤ÿe¦¦ÿi¨¨ÿo¬¬ÿt¯¯ÿu°°ÿv±±ÿv°°ÿv±±ÿw±±ÿw±±ÿw±±ÿu°°ÿt°°ÿt¯¯ÿq®®ÿn¬¬ÿkªªÿg§§ÿb¥¥ÿ^¢¢ÿZ  ýWžžóP™™ÞE““­4‹‹j(‚‚3wwUUuu %‚‚)@jO˜˜©QššÈXä[  ð\  ù^¡¡þ^¢¢ÿ_¢¢ÿ`££ÿ`¤¤ÿa¤¤ÿb¤¤ÿc¥¥ÿe¦¦ÿd¦¦ÿc¦¦ÿb¥¥ÿb¥¥ÿ`££ÿ^¢¢ÿ[ŸŸþYžžùUœœïS››ãK——ÅB‘‘•5ŠŠ`%7 xxUUUUuu #{{2††78ŠŠQ@rI••¢M——¼S››ÍRššÕS››ÚVèXžžñZŸŸóYžžñXžžîWœœçTœœâO™™ÖN——ÆI””¹CŸ8‹‹y/‡‡Q(9{{ff UUjj yy*"||%",2‡‡B=SB‘‘TDNDG/……A.7 ||' xxss ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿøÿÿÿÿÿÿÿðÿÿÿÿÿÿø?ÿÿÿÿÿÿüÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿàÿÿÿÿÿÿÿðÿÿÿÿÿÿÿøÿÿÿÿÿÿðÿÿÿÿÿÿð?ÿÿÿÿÿÿøÿÿÿÿÿÿüÿÿÿÿÿÿüÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿàÿÿÿÿÿÿÿðÿÿÿÿÿÿÿàÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿüÿÿÿÿÿÿüÿÿÿÿÿÿøÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿàÿÿÿÿÿÿàÿÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿ€ÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿüÿÿÿÿÿüÿÿÿÿÿüÿÿÿÿÿüÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿø?ÿÿÿÿÿø?ÿÿÿÿÿøÿÿÿÿÿøÿÿÿÿÿÿøÿÿÿÿÿÿüÿÿÿÿÿÿüÿÿÿÿÿÿüÿÿÿÿÿÿüÿÿÿÿÿÿüÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀÿÿÿÿÿÿàÿÿÿÿÿÿà?ÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿøÿÿÿÿÿÿüÿÿÿÿÿÿüÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÀÿÿÿÿÿÿàÿÿÿÿÿÿð?ÿÿÿÿÿÿøÿÿÿÿÿÿüÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿð?ÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿð?ÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(0` $ÿÿÿÿÿÿÿÿÿÿ  "$&'(((((('&$#  ÿÿÿÿÿÿÿÿ )/379;=?B GH GDBAAA@@?>=;:740*!!(-1B11aCC…MM§RR½UUÊUUÎTTÇQQ¼JJ >>‚((_E<;:98641-)"33 LL2VVZZÊ]]î^^ü^^ÿ^^ÿ^^ÿ^^ÿ]]ÿ^^ÿ__ÿ__û^^éZZÀPP|554 ^^#aa…``Þ``ü__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ``ÿaaÿ bbÿ ccú ccÎbbj \\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ__``W bbÐbbüaaÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ``ÿaaÿ bbÿ ddÿeeøee¼eeAÿÿÿÿÿÿ þþþþþþþþ ¦¦ ii… ddï ccÿ``ÿ``ÿ__ÿ^^ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ``ÿaaÿ bbÿ ddÿggÿiiäggjqq ÿÿÿÿÿÿ þþþþ&þþ5þþ:½½^€€ç kkÿccÿ__ÿ^^ÿ]]ÿ]]ÿ]]ÿ]]ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ``ÿbbÿ eeÿhhÿjjñii{ff ÿÿÿÿÿÿ þþþþ*ÿÿDùùW»»”††ðllÿaaÿ]]ÿ\\ÿ\\ÿ]]ÿ]]ÿ^^ÿ^^ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿaaÿ ccÿeeÿjjÿmmòmmrUUÿÿÿÿÿÿÿÿþþ)þþKüüfÄÄž‹‹ñllÿ``ÿ]]ÿ\\ÿ]]ÿ__ÿaaÿbbÿccÿccÿbbÿbbÿaaÿ``ÿ__ÿ^^ÿ^^ÿ__ÿ__ÿaaÿ ccÿggÿmmÿ"qqëooRÿÿÿÿþþ+þþTüürË˧ ••òwwÿllÿkkÿ kkÿ kkÿ jjÿ hhÿ ffÿ ddÿccÿccÿbbÿbbÿaaÿaaÿ``ÿ^^ÿ__ÿ``ÿbbÿ eeÿkkÿ"rrÿ(uuÐ"nn%ÿÿÿÿÿÿ0þþ\úú~ ÓÓ¯  ô ……ÿ wwÿ rrÿ qqÿ rrÿ rrÿ qqÿ ooÿ llÿ hhÿddÿccÿbbÿaaÿaaÿ``ÿ__ÿ__ÿaaÿ ddÿiiÿppÿ*wwý,yy*ÿÿþþþþ5üüeûûˆ ÙÙ·ªªõ ‹‹ÿzzÿttÿssÿssÿ ssÿ ttÿ ssÿ rrÿ ooÿjjÿeeÿbbÿaaÿaaÿ``ÿ``ÿ``ÿbbÿggÿnnÿ(wwÿ3~~ä,zz4ÿÿÿÿþþ7þþiýû ÞÞ¾²²ö““ÿÿxxÿvvÿvvÿvvÿ uuÿ ttÿ ssÿ rrÿ ppÿkkÿeeÿbbÿaaÿaaÿaaÿbbÿ ffÿllÿ%uuÿ5þ7˜*ÿÿÿÿþþþþ6üükûû˜ ããźº÷ššÿ„„ÿzzÿxxÿxxÿwwÿwwÿ vvÿ ttÿ ssÿ qqÿooÿhhÿbbÿaaÿaaÿccÿ eeÿkkÿ"ttÿ3~~ÿ>……Ý1$ÿÿÿÿãã@ ÅŲèè½ ççËÀ¿øžžÿ††ÿ{{ÿxxÿxxÿxxÿwwÿwwÿ vvÿ ssÿ qqÿqqÿllÿddÿaaÿccÿ eeÿjjÿ rrÿ0}}ÿ?††ø9ƒƒY‹‹ ttˆˆˆ÷µ´ðêèÅ êéÑÃÃù¢¢ÿ‰‰ÿ}}ÿyyÿxxÿxxÿwwÿwwÿ vvÿ ttÿ rrÿqqÿnnÿggÿccÿ ffÿjjÿqqÿ-{{ÿ?‡‡ÿ@††3ffee_hhðooÿ ‰‰ÿ ¹¹òììÌëêÖÇÆù¦¥ÿÿÿzzÿyyÿxxÿwwÿwwÿ vvÿ ttÿqqÿppÿooÿjjÿ ffÿjjÿppÿ,zzÿ=……ÿC‰‰Å/ii.iiÙhhÿ hhÿttÿ““ÿ ÃÃôïíÒììÚÊÉú««ÿ’’ÿƒƒÿ||ÿyyÿxxÿwwÿ wwÿ vvÿ ssÿqqÿppÿppÿ mmÿkkÿppÿ+zzÿ<……ÿDŠŠß2ƒƒ#qq nnppþooÿ mmÿooÿ}}ÿžžÿÊÉõñðÖîíÝÑÐú³³ÿ›šÿ‰‰ÿÿzzÿxxÿwwÿ vvÿ uuÿ rrÿppÿqqÿ ssÿqqÿqqÿ*yyÿ;„„ÿEŠŠë9‚‚1uuCwwìuuÿ qqÿmmÿllÿqqÿƒƒÿ§¦ÿ ÐÏöòòÚðïá ÖÕû¼¼ÿ££ÿÿ‚‚ÿ{{ÿxxÿvvÿ uuÿ ssÿ qqÿ rrÿ ttÿwwÿuuÿ+zzÿ;„„ÿE‹‹ð8;mmzz zzþuuÿ qqÿnnÿmmÿmmÿ xxÿ ÿ ­­ÿ ÓÓ÷óòÞòñå ÜÛûÃÂÿ©©ÿ““ÿ„„ÿ{{ÿwwÿuuÿ ttÿ rrÿ rrÿttÿxxÿ||ÿ,}}ÿ;……ÿF‹‹ð9ƒƒ:yy*||ázzÿuuÿ rrÿooÿnnÿ qqÿvvÿ}}ÿ““ÿ µ´ÿ ØØøóóãòòé àßüÈÇÿ­­ÿ””ÿ„„ÿzzÿvvÿ uuÿ ssÿ rrÿuuÿyyÿ"~~ÿ.‚‚ÿ<††ÿF‹‹ì:„„4~~e"~~ûzzÿvvÿ rrÿooÿ qqÿvvÿvvÿzzÿ……ÿœœÿ ¾¾ÿ ßÞùööæõôë âáüÊÊÿ¯¯ÿ••ÿ‚‚ÿyyÿvvÿssÿrrÿuuÿzzÿ%€€ÿ0††ÿ?ŠŠÿFŠŠà1$ff& %ÿ{{ÿwwÿ ssÿqqÿvvÿyyÿzzÿ||ÿÿÿ¦¦ÿ ÆÅÿ ãâùööèõôë âáüÊÊÿ¯®ÿ””ÿÿxxÿuuÿssÿwwÿ{{ÿ)‚‚ÿ4‡‡ÿBÿEŒŒÊ(xxxx,„„È'‚‚ÿ}}ÿxxÿ ssÿuuÿzzÿ||ÿ}}ÿ}}ÿÿ……ÿ••ÿ®®ÿ ÊÉÿ ãâú÷öèõôë áàüÈÇÿªªÿÿ}}ÿvvÿuuÿxxÿ#}}ÿ-„„ÿ8ŠŠÿE‘‘ÿC¢3ff$ƒƒ#1ˆˆß(„„ÿ~~ÿxxÿ uuÿzzÿ}}ÿ~~ÿÿÿ€€ÿ‚‚ÿŠŠÿššÿ±±ÿ ÌËÿ äãúöõèõôêßÞûÁÁÿ¡¡ÿˆˆÿzzÿwwÿzzÿ(€€ÿ2††ÿ=ŒŒÿH’’ú?ŒŒd-„„25‰‰ë+……ÿÿyyÿxxÿ~~ÿÿ€€ÿÿÿÿ‚‚ÿ……ÿÿœœÿ²²ÿËÊÿ ããùöõæóòçÚÙû¸¸ÿ——ÿ!„„ÿzzÿ%}}ÿ.ƒƒÿ9‰‰ÿCÿH’’à7ˆˆ)-„„88‹‹ï-‡‡ÿ €€ÿzzÿ||ÿÿÿÿ‚‚ÿ ‚‚ÿ ƒƒÿ!ƒƒÿ"„„ÿ!‡‡ÿÿÿ±±ÿÉÈÿ ààùõôáññâÓÒú¯¯ÿ%‘‘ÿ'ÿ,ÿ6‡‡ÿ@ÿI’’þE$mm5††9;ð1ˆˆÿ#ÿ{{ÿ€€ÿ!ƒƒÿ ƒƒÿ ƒƒÿ!ƒƒÿ"„„ÿ#……ÿ$……ÿ%……ÿ%††ÿ$‰‰ÿ"ÿœœÿ­­ÿÃÃÿÜÛ÷ôôÚ îîÜËËù$¨¨ÿ-ŽŽÿ4‡‡ÿ?ŒŒÿG‘‘ÿL””ê;‹‹@1ŠŠ.>é5ŠŠÿ'ƒƒÿ}}ÿ$„„ÿ$……ÿ"„„ÿ"„„ÿ#……ÿ%††ÿ&‡‡ÿ&‡‡ÿ'‡‡ÿ(‡‡ÿ+‰‰ÿ-ÿ.““ÿ,œœÿ&ªªÿ¿¾ÿØ×õòòÒ ìëÔ ÆÆ÷/££ÿ<’’ÿG‘‘ÿN””ýH˜qq /‡‡ @‘‘Ý9ÿ,……ÿ!ÿ(††ÿ(‡‡ÿ&††ÿ%††ÿ&††ÿ'‡‡ÿ'ˆˆÿ*‰‰ÿ/‹‹ÿ4ÿ7ÿ9ÿ9‘‘ÿ7““ÿ4˜˜ÿ.¤¤ÿ$¸·ÿÓÓóññÊééË+ÀÀö>££ÿL˜˜ÿN””Ó<……*6C‘‘Á?ÿ1ˆˆÿ%‚‚ÿ,ˆˆÿ,‰‰ÿ)‡‡ÿ(‡‡ÿ(‡‡ÿ)‰‰ÿ-‹‹ÿ4ŽŽÿ8ÿ:‘‘ÿ;’’ÿ<’’ÿ=’’ÿ=’’ÿ<““ÿ9––ÿ2ŸŸÿ(³²ÿÏÎò ïïÁååÁ8¼¼ôI££íA’’Y¿¿¿3™™C‘‘˜D’’ÿ7ŒŒÿ+……ÿ0‹‹ÿ0‹‹ÿ-‰‰ÿ+ˆˆÿ+‰‰ÿ/ŒŒÿ6ÿ9‘‘ÿ;’’ÿ=““ÿ>””ÿ?””ÿ@””ÿ@””ÿ@””ÿ?““ÿ<••ÿ5ÿ*®®ÿ ÉÉð ìì¶ââ³(ÇÇ’ääÿÿ¿¿Ÿ¿¿AŽŽVH””÷>ÿ1‰‰ÿ4ŒŒÿ6ŽŽÿ1ŒŒÿ.ŠŠÿ0‹‹ÿ6ÿ9‘‘ÿ;’’ÿ=““ÿ?••ÿA––ÿC––ÿC––ÿC––ÿC––ÿC••ÿ@””ÿ=””ÿ6ššÿ,ªªÿ#ÅÅíêêªüüuþþ?þþÿÿ=‹‹!K••ØF““ÿ9ŒŒÿ7ÿ<‘‘ÿ6ÿ3ÿ7ÿ:‘‘ÿ<’’ÿ>””ÿ@••ÿB––ÿD——ÿE˜˜ÿF˜˜ÿF˜˜ÿF——ÿE——ÿD––ÿA””ÿ=””ÿ6˜˜ÿ-¥¥ÿ%ÀÀëèç þümþþ>þþÿÿÿÿ3ffJ’’M––ýBÿ:ÿA““ÿ=‘‘ÿ:ÿ=’’ÿ>““ÿ?””ÿA••ÿC––ÿD——ÿF˜˜ÿG™™ÿH™™ÿI™™ÿH™™ÿH™™ÿF——ÿD––ÿ@””ÿ<’’ÿ6••ÿ-  ÿ(ººéæäšþþjþþAþþÿÿÿÿA/P——àK••ÿ@‘‘ÿE••ÿC””ÿB””ÿC••ÿB••ÿB––ÿC––ÿE——ÿG˜˜ÿH™™ÿIššÿJ››ÿJššÿJššÿI™™ÿH˜˜ÿE——ÿC••ÿ?““ÿ;‘‘ÿ5’’ÿ.œÿ+·¶çáá•þþhþþCþþÿÿÿÿ3ffL••…S™™ûI••ÿF••ÿK˜˜ÿJ˜˜ÿI˜˜ÿG——ÿG˜˜ÿG˜˜ÿH™™ÿI™™ÿJššÿK››ÿLœœÿLœœÿMœœÿL››ÿJššÿG˜˜ÿE––ÿB””ÿ>’’ÿ;ÿ7‘‘ÿ3œ›ÿ1³³æààŽþþbþþ?þþþþÿÿ? TššÈR™™ÿI––ÿOššÿQœœÿP››ÿMššÿLššÿKššÿKššÿL››ÿM››ÿMœœÿNœœÿNÿNÿNœœÿL››ÿJ™™ÿG˜˜ÿE––ÿB””ÿ@’’ÿ>‘‘ÿ=““ÿ;œœÿ;±±äÞÞ„þþVþþ6þþÿÿÿÿK””JV››æRššÿN™™ÿWžžÿZ  ÿc¦¦ÿ`¥¥ÿRžžÿPÿPÿPÿQžžÿQžžÿQžžÿQžžÿPÿOœœÿM››ÿKššÿI™™ÿH——ÿF––ÿE••ÿF••ÿG——ÿHžžÿG±±à&ØØwþþEþþ)ÿÿÿÿ3™™M––fXœœíS››ÿUÿb¤¤ÿy²²ÿ{´´ÿ`¥¥ÿW  ÿV  ÿU  ÿV  ÿV  ÿU  ÿU  ÿTŸŸÿSŸŸÿRžžÿPÿOœœÿN››ÿMššÿMššÿOššÿRššÿTœœÿQ ŸÿO­­Õ!ÚÚLþþ,þþÿÿÿÿ$‘‘P——lYìWÿ\¡¡ÿn««ÿs®®ÿd¦¦ÿ_¤¤ÿ^¤¤ÿ\££ÿ\££ÿ[££ÿ[££ÿ[££ÿZ¢¢ÿY¢¢ÿX¡¡ÿW¡¡ÿV  ÿV  ÿVŸŸÿVŸŸÿXŸŸÿ[ŸŸÿYÿS››õHššÈÈþþÿÿÿÿÿÿ$‘‘P––_ZžžÞZŸŸþ_££ÿj©©ÿj©©ÿh¨¨ÿf¨¨ÿe§§ÿd§§ÿc¦¦ÿb¦¦ÿa¦¦ÿa¦¦ÿ`¦¦ÿ`¥¥ÿ_¥¥ÿ^¥¥ÿ^¤¤ÿ^¤¤ÿ_££ÿ`££ÿ]  ÿTššêI””z3ˆˆÿÿÿÿÿÿÿÿÿÿUªªM––8X°[  õa££ÿlªªÿp¬¬ÿn¬¬ÿm««ÿl««ÿk««ÿj««ÿiªªÿhªªÿhªªÿg©©ÿg©©ÿf©©ÿf¨¨ÿf§§ÿe¦¦ÿ]¡¡úRššÆC‘‘O$mmK––Tšš^YŸŸÂ^¢¢÷h¨¨ÿp¬¬ÿs¯¯ÿs¯¯ÿr¯¯ÿr¯¯ÿq®®ÿp®®ÿo­­ÿn­­ÿn¬¬ÿm¬¬ÿj©©ÿb¤¤úXŸŸÕK––z=ŒŒÿÿE––Qšš[X¥]¡¡Ûd¥¥öj©©ýp­­ÿr®®ÿr¯¯ÿr®®ÿp­­ÿmªªþg§§ø`££äVœœ¶J••j<ŽŽ"UU$‘‘H‘‘#N˜˜KRššrU››•Wžž¦[ŸŸ³YŸŸ«Tœœ™P˜˜|H””TA””+*”” ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿàÿÿÿÀÿÿÿÿÿÿÿÿ?ÿÿ€ÿÿÀÿÿàÿÿàÿÿðÿÿøÿÿøÿÿðÿÿðÿÿàÿÿÀÿÿÀÿÿ€ÿÿ€ÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿ€ÿÿ€ÿÿÀÿÿÀÿÿàÿÿðÿÿøÿÿüÿÿþÿÿÿÿÿÿÀÿÿÿðÿÿÿÿÿÿ( @ ÿÿÿÿÿÿ"&)+-....-,*'# (0B00c@@‚HHšLL¤JJžBBŠ22nO>;974/)PP#YYx\\Ê\\ï]]ü^^ÿ^^ÿ^^ÿ]]ý^^ô\\Ö WW”GG9 ÿÿÿÿÿÿÿÿÿÿqq ccZaaÎ``û__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿaaÿ bbýddÜffuccÿÿÿÿþþþþ!ïï!ww‚ eeñaaÿ__ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ__ÿ__ÿaaÿ ccÿfføhh¨gg ÿÿÿÿÿÿÿÿ(ûûF±°•yyóccÿ]]ÿ\\ÿ]]ÿ^^ÿ__ÿ__ÿ__ÿ^^ÿ^^ÿ^^ÿ__ÿaaÿ ddÿhhýll²mmÿÿþþ þþ*ùù[¼¼¦~~õeeÿ``ÿbbÿccÿccÿccÿbbÿaaÿ``ÿ__ÿ^^ÿ__ÿaaÿffÿmmü#ss˜ss ÿÿÿÿ ÿÿ0úúj Èȱ ö wwÿ qqÿ ppÿ ooÿ llÿ iiÿeeÿccÿaaÿ``ÿ__ÿ``ÿ ccÿkkÿ&vvò,yyVÿÿÿÿ þþ7úúw ÓÒ¼÷~~ÿuuÿttÿ ttÿ ssÿ ppÿ llÿffÿbbÿaaÿ``ÿbbÿhhÿ$ttÿ2~~À3ÿÿþþ þþ9úú ÚÚÆ¨¨ù††ÿyyÿwwÿwwÿ uuÿ ssÿ qqÿkkÿccÿaaÿbbÿggÿrrÿ5ö;„„Qÿÿëë ¯¯t ÌËÎ ÞÝÔ°°úŠŠÿ{{ÿxxÿxxÿwwÿ uuÿ rrÿnnÿffÿccÿ ffÿppÿ3ÿ?††˜?hh8llÜ ‹‹ü ÌÌß ááÛ¶µúÿ}}ÿyyÿxxÿwwÿ uuÿqqÿooÿjjÿ ggÿooÿ0}}ÿAˆˆÊ8 kkkk·jjþ qqÿ˜˜ýÖÖä åä༻û——ÿ‚‚ÿzzÿxxÿ wwÿ ttÿqqÿppÿnnÿppÿ/||ÿAˆˆâ>‚‚%uudtt÷ ppÿmmÿyyÿ¥¥ýÞÜèééäÇÆü££ÿ‰‰ÿ||ÿwwÿ uuÿ rrÿ qqÿttÿuuÿ/||ÿBˆˆë?„„0qq{{Âvvÿ ppÿnnÿqqÿ „„ÿ °¯ýâáëîíé ÐÐü««ÿÿ||ÿvvÿ ttÿ rrÿvvÿ{{ÿ0€€ÿB‰‰ë?„„0{{@}}ðvvÿ qqÿppÿuuÿzzÿÿ »ºþèèïñïíÕÔý¯¯ÿÿ{{ÿuuÿrrÿvvÿ"~~ÿ3††ÿCŠŠã<&&v"þxxÿ rrÿuuÿzzÿ||ÿ‚‚ÿœœÿ ÆÅþëêñññîÕÔý®®ÿŠŠÿxxÿttÿxxÿ'€€ÿ9ŠŠÿDŽŽÌ3-……¡%‚‚ÿzzÿvvÿ||ÿ~~ÿÿ€€ÿŠŠÿ¥¥ÿ ÊÉþëëññïíÒÑü¥¥ÿ‚‚ÿwwÿ {{ÿ.„„ÿ?ÿE?3‰‰¶(„„ÿ{{ÿ{{ÿ€€ÿÿÿ‚‚ÿ„„ÿÿ¨§ÿÉÉþééðííêÇÆü˜˜ÿ"ÿ)€€ÿ8‰‰ÿF‘‘öBŽŽT8 9º-††ÿ}}ÿ€€ÿ ‚‚ÿ ‚‚ÿ!ƒƒÿ"„„ÿ$……ÿ$‡‡ÿ!‘‘ÿ¦¦ÿÄÄþ çæë ééâ»»ú*‘‘ÿ5‡‡ÿCÿI’’Å9‹‹*=®3‰‰ÿ!€€ÿ%„„ÿ$……ÿ#……ÿ%††ÿ&‡‡ÿ(ˆˆÿ-ŠŠÿ0ÿ0””ÿ+¢¢ÿ ½½ýáàäååØ*³³ø@––ÿL““óFŽŽ[@:ÿ(„„ÿ+ˆˆÿ)ˆˆÿ(‡‡ÿ(ˆˆÿ-‹‹ÿ4ŽŽÿ9‘‘ÿ;‘‘ÿ<’’ÿ;””ÿ4œœÿ'µ´ýÜÛÝÞÞÍ=±±óI™™œ?”” ¿¿¿C’’^Aú1ˆˆÿ1‹‹ÿ/ŠŠÿ,‰‰ÿ0ŒŒÿ7ÿ;’’ÿ>””ÿ@””ÿA••ÿA””ÿ?””ÿ8™™ÿ+¯¯üÔÔÔßÞªÙÙDþþD)H““à;ÿ8ŽŽÿ7ŽŽÿ3ÿ8ÿ<’’ÿ?””ÿB––ÿD——ÿE˜˜ÿF——ÿD––ÿA””ÿ9——ÿ,¨¨ûÎÎÈøøoþþ,þþ ÿÿ*ªªJ””™G““þ>‘‘ÿ@““ÿ=’’ÿ?““ÿ@••ÿC––ÿE˜˜ÿG™™ÿIššÿI™™ÿH˜˜ÿE––ÿ@””ÿ8””ÿ-¡¡û!ÈÈÁõõkÿÿ0þþ ÿÿI““4O——ãF””ÿH––ÿH——ÿG——ÿF——ÿG˜˜ÿIššÿK››ÿL››ÿL››ÿKššÿH˜˜ÿC––ÿ?’’ÿ8‘‘ÿ2ŸŸú'Äü÷ôeþþ.ÿÿ ÿÿ?P˜˜|P˜˜ùM™™ÿSœœÿSÿPœœÿL››ÿMœœÿNœœÿOÿOÿNœœÿKššÿH˜˜ÿD••ÿA““ÿ?““ÿ>ŸŸú5ÀÀ´ óóUþþ#ÿÿC““T™™£S››ûXŸŸÿm««ÿm¬¬ÿW  ÿTŸŸÿTŸŸÿU  ÿTŸŸÿSŸŸÿQžžÿOœœÿM››ÿL™™ÿM™™ÿPššÿO¡¡ùAºº˜ùù1þþÿÿN““W››¤Yžžùf¦¦ÿm««ÿb¦¦ÿ`¥¥ÿ^¤¤ÿ]¤¤ÿ]¤¤ÿ\££ÿZ¢¢ÿY¢¢ÿX¡¡ÿX  ÿZ  ÿZžžÿSššÝETïïþþ ÿÿLŒŒXœœ\  åe¦¦þm««ÿl««ÿjªªÿiªªÿg©©ÿg©©ÿf¨¨ÿe¨¨ÿd§§ÿd¦¦ÿ_¢¢øT››»H””<UUÿÿ3™™Qšš8YŸŸc¤¤âk©©ûq­­ÿr¯¯ÿr¯¯ÿp®®ÿo­­ÿkªªþf§§ò\  ÆQ™™jE‹‹H‘‘N——*Wc\  •b££³d¥¥Ác¥¥¼^¡¡§YŸŸ}Q››E?™™ÿÿÿÿÿÿÿàÿÿÿ€ÿþÿøÿøÿüÿþÿÿÿ€ÿ€?ÿ?þ?þ?ü?ü?ü?ø?øøøÿøÿüÿüÿüÿþÿ?ÿÿ€?ÿàÿðÿÿþÿ(  ÿÿ266T??h==d**N 4*$ÿÿÿÿjj ]]][[Å[[ï]]ù\\÷]]æ \\¦ TT9 ÿÿþþ ©©] llé^^ÿ^^ÿ__ÿ__ÿ__ÿaaþffØmmFÿÿÿÿðð4«««wwø jjÿ hhÿeeÿaaÿ``ÿ ccÿnnÒ(xx&þþ÷÷A ÀÀ½Œ‹úwwÿ ssÿ mmÿeeÿbbÿmmý1~~…ƒƒ! žž¾ ÄÃæ••ü{{ÿvvÿ qqÿiiÿllÿ5€€Ê8qq‡ ppû£¢õ ÐÏí¢¢ý€€ÿ vvÿ qqÿrrÿ6€€â?††${{#xxÜ qqÿ ||ÿ µµø ÝÜó¯¯ýÿttÿyyÿ8……ã?††$+„„M||÷wwÿ}}ÿÿÅÅú ááô¬¬ý||ÿ$~~ÿ=ŒŒËC††4ˆˆa#ýÿ‚‚ÿ!„„ÿ——ÿÆÆùØ×ð ››ü6ˆˆýC‡UUU˜˜ÿ+°°ïÓÓ‘óóÿÿT I””£C““þC••ÿD——ÿH™™ÿJššÿG˜˜ÿ>••ÿ/¥¥åÖÖrþþÿÿN––1Q™™ÖY  ÿX  ÿRžžÿRžžÿPÿJ™™ÿG——ÿD¦¦Þ&ÑÑOÿÿS››@^¡¡Èf§§ûe§§ÿb§§ÿa¦¦ÿ^¤¤ÿ[  öVœœ©?©©$ÿÿ[šš_¢¢ng¨¨³k©©ÎjªªÊc¥¥¦Z¡¡WOÿÿð?ààððàààààààðøþSlic3r-1.3.0/var/Slic3r.png000066400000000000000000000503721327442435500153270ustar00rootroot00000000000000‰PNG  IHDRššQÿQgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs  šœP^IDATxÚí½y¼%W}ø=çÔrë.oíM»„µ0"¶;±ñ‚œÎtÏDÀ$1aqbLˆ;v·ž'ƒÉx‰?Ç XÄtljã;8x°±x‚A!¡½[½¾÷îZÛ9ç7œ:U§êÖ}Ýõë–’óùÔ{u«êÖ­[õ½¿åû[#"üÏQŒßrË!vÿýéÈ‘#zÑqŒ1Àà½ù͸rïÞ=«QtZg¹ç…élv*øáÓr2AòÛ¿Å;îî‘# à¹õ`ØÿšÌ]w-c¬ÿº×aåùÏ¿ùú(ÚûrÎý+£¨`}"ÕeŒAй`«œs€ ‰T¢Mˆ´”29ð³yŸÈó÷©íí/ÿÙûÞ7ûÒ™34v/÷رÃüþûѳtÿÃ1Æ:Ä­ƒëÕ¯fûo»íy·//_û­ËËûÿV§Ó¹^ ðA¤¡µ†”Ji €cÂçŒq0Æ™˜>1ÆJ)i´–Å¢8@Œs€1!Ë2¤i~.Ïãû²lú—çÎ=ù‡ŸýìÃ÷~øÃtÒ^g¥^Ÿ]€û h‡GUöõë_Ï®¾ùæÛ¿iyùÊÞ7û¾]¯× †<—ÐZ‘ÒHó< 2Î=áAˆÌŠ.·ó÷ÓÜb*!2’ Ф”&¥2R*‡RgŒçæ<³Y"Ó4y`:Ýþ¯ÃáÉ?þøÇúÄÇ?Ngб Æîº DÏ‚‡øœZ%ÁpD3ÆÄOýÔÁïX_¿úÕAÐÿÎ^¯{SE ¤TRi" @3!B†}x^Î=pÎ0°˜Å ]¬ï2»¯R«f+Áªµ‚ÖŠ¤ÌIÊZçÜóˆ4f³DÏfã?N~è‹_üܾçzØ~ÆÆã—;àžÓ@ÛØ`ÜU1o}+»ýE/úž[ZZ;Üïw=" ψ´RJ2@3ÆóýAÁ÷;`L€ÈhÙE`j߈´`;`%€p¬þÿüê¯ÒgÌwßàwÝu×e'ÝžS@cŒ±£GñC‡Œöæ7³ƒ~ÏÛƒÕ;——½pò䃿ð/þŃ ¢™y·‘Ç—úù<ëÖ”bGŽÜþ·öï¿ñ'ÖÖÖ_ÌGžgÊP `D Z+„áQ´ Æ8ˆŒÚô í¨ÀG…ºk^ÁÎ*²¹¯ý±WRoÞds€3œ@ÈóY6ÓD„N'äq<£ÑèÜG}ô“ÿú—~)þàò°ÝžÕ@+n  Ã‡ÙµßøßqdmíŠèõzHÓT7tB" ×[CöÉJÒÚ\ÀΫì¶êxgoý5UgóX†ºsGísŒ=ç‚–Ãðu Y6ƒ”™Â玭­áö™3üü‘#Ÿû%"]jÛíY 4÷WzäÈ‹_{Å/ø¹ÕÕµ›¤ÔPJ*@ &¥$„ðÑë­Áó‚âêZ¤Ò<8Ûj¬å,8Oco©BQjþ}–±@³^ªÙ.e‚,›c\û~(ò<ùs'û‹_ü£÷¼Ç: —Fº=+vìØaqèÐQÅëý«õ-ÿtïÞ«t0èûiš*"ʼn4³ ÓZ"zèvWa¤—½ÇMºâé€ì··ØÑ  ¶×uu]²ò£N…µÝ@DZ‡íí­'üóÿäï|ôàBÁ6o$4®íiçY4 ²W½Š]÷ÊW~Ïÿ}àÀÕß+%A©\Z˜Xb²NgQ´\ó&ë^ep‹<ÎêØâÆÍQMPÌ;õ[íî¯(s Xp^WuÖ·ÙuδVØ4qîéN'£Ñ8>qâñ3?sÿ/Ñll¬~¢‡s… gÐ68pDßy'»íå/ÿïÙ·ïŠ;²,W† Ó¼ˆ)Bk "…(ZF`™{"Ô$šyøÕ½nYeŸµÙ^óg'é´X6m4;šÒÌÚ‘F]ÖU¬k×qO;†Öœsåy¾Èó§N=þÞßøOýÄç?O§ŽcâÐ!h笱Î0o¸Kyeç{rÏ" ½å-ì›o¿ýµïÙ»wÿóã8QDJ˜,ŠJ’)t:Ëèt6¬S“Zƶ± s鋦gØäĪ{íz€î0``µ×õQ'msrÅ3&€j×ml8kËUÒ­òD‰PH6ÚBNuÕ¹Ó˜w¬td-Àmž¿nÛ¹ç¬Àf.Șs~«F%ò<µ?ÂCzìôéãxß}{Û»ßM_®ê'8:Øì PÅž@³ ûÁdßtÛmóCkkëW%I,µÖàÚcªdKC_p.Ðïï…ç…å=QJb4:)Ó–mvÛì¯æûÙÜùI­:iNòÕ÷³:Å‹VÏõDÍ:‡R9´– "Áˆ1AŽàgΜ¸w{ûÿþ‘#øÊtÚë÷zSl@M§P½r@ŽV Õ¯¸m\Ö@³ {ãÙËï¸ãûÿýúúúu³Y\PuI¦µB§3@ôН­±´t¾’ŽJð%É£ÑIpΡizÌGæÇùÿöã‰jìYãóç3>æ%a›mf‰]ã}(=Q@C©B0BÐ`Ðã“ɹ?Þ¿ÿwþñ+_Ù9•eºdP9€ÌYíü ò.H¾ÖaAö¦7±;¾îë^ýþµµµëâ8.m²ÊðWÐZ" {ð¼ Èz01L!h-Y—1M­mVœcv"`ÛìcàÂ炦ø$¢¹c*¡¥kŸ¥u=ºà˽6c¿Ùçfsk?jpÖér0xöÞp8,1Ö |?³êтʽ1_•#\¦@³ {íkÙßþí¯zïž={nr #Áìÿ¾D,sCkµa) « Œ ¤é&ç¬JrÁ`\“°¯ÛÂPí$®}íj±ZÓómJSdw%^ÓA´Çshm¥™†Ö œ[ð)xCpµ²øy~î¡Ûnû³w\}5)˾?Ö0àJ³ yÀ¾¶R¬á\¸:¼ì€Vð;êU¯b^ùÊï}ßÞ½W¼x6³†¿‘t첌 x~Z+pÎlæ*¤LJ£˜Hƒ1€sq<Ädrª $K£zè©î…Î3÷ç3Aêa+ Êqkž°Ï²þ™Õzõ°€«œ T»ÝÅ9ƒaè©•Õ®PróË/}é'~tÿþ­¡”½}ž7–0v˜ ƒ ´É$æÁö´@\v6Zá´3æ½ë]ßö¾k¯}Þ³Yª”’Â<å¨LYx˜+¥'ƹWœÁ€°Û]G¯·^ºýq¼ÑèD+åÐôæ\[­.Á\’µ~ŽÆwÙÁkuÓ”XT“šóê•5Žg·Xém h!Bžt»¾\Z =­ÇßqÇ't}}{+ËVVƒ`;“@êy˜˜Ë @ cŸ• ´Wötžìe%Ñ66îbGŽ€~ög¿ñÇ÷ï¿êÎé4ÓD’£,𨀦TŽNgœ¯Šs•ƒ`èdrI¼ á…Ð:G–M‡¥k©ÕCsÕÐ<¨\·:¶-Ä´ÈÓtÕ\/ÒfÔ6³CæÃbö½º Í†‘‚h¦²JC ^7T++‘Ƽä%ŸÚX_Ÿn*Õ[bjÕe `šç˜ø>Æ0Ò,F6h_`øEGÐŒ Æ:ª®¹†­ÝtÓ·½siiÐϲLš[iÕ¦ƒïGÐ*/¥\*ã(%mÅsg… £QÙwó!Õö£”ŽÚY*¢¼þ~×ãwATëžËÝV­»×ÖŒvØmälW… ¡À˜cF(1–AˆA Ð¸ZYñ°ýÄ×}ݽ?»¾>äyw¯SKÊJ)ó}Ì$“IIg4¤ÙW/•.‰ÆÐ;ßùWßyÕU7üX–)­uÎ- ë.Rfˆ¢¥’º07™ª³CÝÆ©gfÔm𯅰vŒ±ÅÇ—”…ã<˜Ï\»¬^9UçÏæ¥•ëeÒÜû«…ÙÇ9ŠEÃó4|Ÿ¡ÛóÕêJWp>=që­_øÙ}û¶6ó¼»ìû³@®!0000‘f ê@ûš@\íØ±Ãýø_÷í++ûÿR­sæ²ýf‘2-ê)ý"‘±ŠcV1Mó㳯Q“ ÊyÀznqæ¢`sÿùÒ¯»ïÿZ_ŸŒµŽÖ9ŸAk¥ … ‘šz&0 ³¦µÉžVÐü|ã’íØ±C~ú§_òwVVV_‘$)͇—ta›e"(X} ªÙOª´¹ê6[ÝŽ²Bul›áÞ–Ø”VÀ"Õ[?—}oý<Õ~àlî=óÒ±ú1)f&áy9ÂP£×óÕòŠ/¸Ÿ¼ýö/ýÂÊÊh,e´Îy ­Aœ«L̤TÏ›3ü›a&< .!ЬðŠW°++W¼Ý÷}(%µÖšÕUf­sh­Šàx¥RÊv³7š†¾ÝîV”Wª²­Ê¼®ê*» Î9Ï¿Ô%lݾrm1÷œ.ÅÑ´Ó¬ºt&„„ïKt:„þ@¨ÕU_þøÄ׽䋿¸º:k­z^¬µ†æ\Ä0vØÈó0*Ö­DKQçʾf»Ì—G» ðßñõ?Ðï/ß’$™ÖZŠºçeí0 Æ8÷ ” ¬Ê;+è£R"¹ »õ‚ûðv–LVU•H¶¾r˜®D²C·<*×vkªæzXªù0a$¯ÔBÁ÷%ÂC¿¨•_xÞøÔí·ù—ƒx¢ugˆ3’s$€šJ‰1ÆÑ´Ë. È€K4›Fü¦7±çÝ~û÷½EŽ×ž$M šƒ`0À¹žPð}…N‡Ðëùje%A0;yðÅü»¥þd¢u°Ìy’kŒs1UJ…À6àoù8I0ítæŒÿ¯‰ù?ߨuÍÚf¯}-»¾ß_ÿÛ¦g˜b•‡)Þf^Ä0¹CÈV6™•nmÑ7Ù€ˆ€šæ‚£ „ƃ‡+‰h¡Ç9*÷8ÿÛTeµˆœÔm]x¸VŠiøžBHt: ý¾§VW†³³_üÈ» È:γ @J„©Rj$¶lùÀdÈ.ŠÊ´c×%ZQð‹—½ì¯¼ceeåÆ4ÍuUXRI±Š®Pðý^éÖ»œ— c§ñòµy@¬&©¬ r³(š ©ˆWG :·¾ÙS£ùX·¯š'[ç½K÷šª çFšyÈŒwéiCaÄç|ü×ýÉDÊ`àyI ãcC)1°…ŠQ÷.®ìâ±÷»*ÑL—ÐÛßÎn]^Þ÷:­6¾¬²Õrs‘\Ô€ºú4€´ž©k»ÙÄÆöÑ$M›n÷Ö»RÇ~îbP5ß_?¶žª“¶n8ËüBX€åˆ"Á@èÕÕûÁôô‹_üð»ƒñPÊ çyY‘+Æ€˜çù›Åº¥2ÜlŒ]°ëí.Àž=w|_¯×]ÏsYÍëÜ—QŸZçeWE¥¬Äs%™*¤ ¬Rf·™b¨*•LÛÚpÖëÇÌ'žÿ™T¹põàyµßF0*IWI2]ÈM8Éó OÖéz}O¯,‡\xÓs·|ä}½^:–2èsž%cô«m T—CÔÃJ…=ߨ5‰f<Í#š1Öítzß͹p¨ŠzZ¶žQ‡^!dl®@f~ýÖSµ°Éü×y¬J"7¹eqÁâJ¼vã¬É•U5¤m kc¶Z¯ÒÄ-© .|?GJt»„¥%¡×V=Ósoyâ×{½t’eÁ€ó,‡¡*†6œ+þo£âÉ,йWpqÇ®H´»ï¾Û?tè(½ý탗FÑàë¥T$sIV7ȪPÆDIÊÖIÍfl߯çÝæAÖy³ùbªï…ñòÜ £¶f|mf=¬TÙ`û›ë.uÁ˜‚žg@æû9:m) îyñټ౒¬çyY`Ê9¶•¶8—çØòý’Âp¶kª²9.:Ð>ðÝ{ó›T)¬¯ßôm½^eY®µÖ¼’²¤+”²÷ea¸³yUIŽ µcFÝÚ°ÎbUJ%(+Þœ.Œ¨ql6ìdUk”ÆY[>§¹n»uW±Sóã²6™É¾È9:‘F¿Çõò²Ï…7Û~þÍÇöºéTJ¿Ëy6ø”s½ `KlØò} 'Ìú}ÄØe£Ѹhª“1Æ~åW~bõ5¯yK@Z4*ît»+ßnrû%Y°XJ£™[V‘™•f%X=^YyçJÉB²óAtû°ë¹aó*®®îê©;uÒóŽC] »¹dÐT)Ŭº ‚NŽnWaÐgzeÅç~0Û~þMÇÿC¿;+@–§œó)çz`[J2õ9)@¶ëFÿ¢qQ$cŒ½ç=ÿrÏ«_ý–p0<Å#"Â[ߊ›Â°s»” ¶ãO²ùEˆ ¸5M ¦ ×TZ%e¤Ìàûa)­lÍ@qu pXUݱ›ª´®êêíæóÔêÑ >·´ÏH1—º R]Däˆ"…~ŸéÁ’Ç}¶uã Çÿc·›Œó<ì AEZÁ€ëœça(ã— ªTÇ»tã¢íçþ«¯yÍ[£ÕÕÕÔÑ£GuàÀÁïèt‚å<ÏÉpg󯽕T–›€Û0Mõß›O¥6±ÉgÔXaë¥-á¢z–ë|*Q=&Ywµ‡ê!¤¦±_kâ&(nòÈ*Ï2Gfèv––˜^^öxÎF×_wâý^2U*èù~:ÓÒËydÏãq:¢w&Ï1ô}¸†Ãö_ ža Ý}÷[üw¼ã³~ÿÀ9± ˽å-¸Î÷ƒ›¤”0±õÓ_oqPÒÖsíëëuÂÓ>R@¥rÈlM04Ó[3¬¢PÚl»êð…¸ýø6à¡ñ§?}‡Þظ´žåNã¢òh̸›Ú¬óçÁÉvm>z2£)|­ÔY½¶±ÊÏjç²JnŒP†”4²,.'®¨81—sÏQïfŸ›»æ ¶ù戮Ño*Æ]I&K £×gºßçÜ÷§ã«®>õ‡Q(¥‚cj¢5’¯|åùßÏÖ_4ÆcbI"Dž“îtÖÖWV^ù/ßüæßìî»ÿâÏ~˜‰ËÉ.sÇE AU^ |?xžÙf%†ëeº’Äfo˜‡eç·¬Oì¥J³šAß›”2†™[©J–lY »R·™®í‚³ú¬Êà§2½ÇXYu)ÑëƒÎÃp6½úê÷F¡Ì¥ôúœ«Œs?òèó^1-¿h8R4›% C–qä9ãq¬ÔÚÚÞç_wÝ7ÿclùÐ!REâÂe7.êEmlQñ?€«c×)¥#àP5Ý!a+BÖ%[Û<Äfû€j_Ó¦³Ç*•}ùS Ftõxhó¼@Ý+­"Úü1“Ó_qcÖ3êR¢?--1t¦“«®ü‚ï“VÊë2&sÎ!O<µvÛt˜L4M'(Ô%/€FÈ2‚RdŒ)ØV\暊ü=žeKKkßõ¶·­€ÿX8—hM´:ZWkº¦Ê·àš’7“ê]©TÂ"OÔ–¨ÍG¼ëçhî¯ÈÜÂàçÏC±Pi‡A† H)Â0FN†3„™¡1ºŠz=*@¶õEß—Z*ÞcLjòä©Õƒ³Yt`:Õ4™h6›1Ìf¼”fFe*˜Yûl¾Í@®·¿×Z3)¥îõºÑ•Wüák®ak—‹c°Àêåcóëyig¼*3k&-XêÀq_»ŽFPuš¢yŽ:ðLÏ1£+¯RêQ# 5:nW£ÛUæO£Ûú}Nƒ>gŸ§{öŒ¿ìûš¤ä=ÁIgÏ®¼ Ž;{§SMÓ©fñ ˆc$á…ÊÒT!ÏU `6¹Ó$ ‘œ X–I,/¯}ËwÞpØ|¿»vWsc7j¤¶U#s9eu 7÷àµut-c¶ò$Ý*#Û»exª™?Vå¥UÚÄ¥?ªvTn{**T£õ* ¾oì±04€ …0Ô;taHèvEcžÈÓµµÙƒ¾'IJÞBgš Î[¾9NÂõÉÔ¨Ëx& u $ ¦@žS2;­„E^mm5Q\¿•lŒREQ(ÖÖ®ycìƒD4ªWPìþ¸ˆ©Üåª&Ry=„4ã—$.˜ ‘ªAºžgoÑ$o›Ò­=gQºPý¼6FYy–º0ö °:³D‘D·«uUA_hôû†Âðý<][?\€,bL+ ¨ÍÍ¥›’$\ŸN5Mu9›qöÈsêR:¿P‘ÆÑõ^½DŠg™D¯7øÆ·¿ýÀwÀáÇ.©ú܉FDq»ªr$Ù ÁŠ¢àBš9„mšúÕ¶TÆ}{0¼4·Ÿk }Ë‹‰Bm A…Ê$#½ •„Úx–¡•dÜH2OæKKÓÇ= ï0¦s! ·¶û×§i°:›išÍˆ%‰‘d†Â`HS Ë¥)m¡NÙnŒVëúÜOe‚‚fÖVóöî½áÿ`Œý"J.¥º(÷c½ùdÂ:p¨&Qìº*ØzÀ5üç”çš?Æ«³.íæí5퀬ȸ( #É,¨*‰fAE„^Q·Ë˜ïË|i0}\p­•b!cZƒCom÷¯ãp-މf3bqÌ‘ÄFŠ»Ì€LJ×åy^ÎS•$Ú̺CUÕÂj‰¹2)––V^ñC?´ô àÒ†¦.º× ósmªÊÚEõðNýg&Ë¢Øê Y”½á\ æé7œ¤JUiÕ¦U—Fj9 ‹Œº4Ž£(âdOø¾VD,`ŒçPãaÿš$ V’„h6Ó,‰’˜ÒŒ—v™”f1!¦¼¼_nóA7µÊ’݈ɤ”ºßïöxÁk€Kp¿è6¥Dê\]“NóÙª.àX1`³}úN’¬üÜ0›ço‹&IæÎ6B…±¯•Ù‰Šÿª@æIÙïÅÇ=´”¬Ãw©F£ÞUiæ/§)êÒ2þd„,c&X®Ì5Iéö‡kO>p{ûZî±zm „aïùë]\:©v%Ze¥éìxÕZª-¸½ØlÐ:+Jòì oõ€wõþE)ÖóÙ®T´Ç¸IЦç…B¨R’u:QT¬²N‡3Ï“ù`?éyZ)Å!H1‚žL{W¦™¿œ&M±R’™8¦Q™Z”²&•ªÓšõ9ãëóT¯Ë–çNïÖ[n¹þ;Ì·¾ë⣪e\TgàðáCüèQ(­óGŠ›ÀìÃ^,ÅÜ×Fæy† è8L¿ .`¾ s(Çñ†t«ºk[®Ì±†¾0’Œ Q¡. €…ˆÐ8…Èú½ø8DJ³@p’ŒAŽ'ÑYæ Ò4‹Áb ®‚õ7 ãÈs0WŠAkB–e¸L.;`~l¶Š_ëTó«•Ê G3"¥z½H,-x5cì׉H] §à¢:‡¡¸94i6U™—LÔ"© h”ª§ï𤯍Î9Ÿ ÛÖòÝMﱞeÝø­WÙ©x²NDˆ"Fa‡1Ï“²×Kž7|ÃxÈò`¦ 86’,MÒ„—)?V’eY†<Ï÷¤žÚ,Ω·ïª7„6ͧ QÔ{Ùwâ:àҨϋìudY<Ìs3µ´g¯6Ge§inþ|)\y4Í«Î9/Ó‰NØTk“‰ÑÂú‡TJ0«:KuYu©d¿—œð<­”æcZq@O¦Ñþ,³ K,¸JïÒ€ÌÌ Èò<-{ùZµ9?wB'®‚ên±Ž}OQÍͤ”ð}ÿŠýû×_ T•i»9.*ÐŽœ!MÏ<”eY˜‰ŒW‘&°êëö­•3: C· ,8ïq⣮„lx¨õ×–'«¼KÃö+„‘*Af$g¾¯ò~?9Á„ÖÈädíÍs¿ŸeDIL,MºLí’²Ò.3Þ¥Y†,3ßÑ4¶i–º9z6îë: -ßÙügJiÝëEÞòòÕßGÝõ–‹ ´ƒÍ£ÝÚÂcyžŸ,¦[®,¥F¼sdÖ–2)c{UÐPªÝøwÓ…Ü`ÎWeX©fUePMeZ›, Q‡QIÖë¦'…Њˆ{Œïr:öæyÐOS IÀ’”#M²ÔH4ãifø2“-›e9²,nTv¹ [¹_÷Àëa½ù™c¬§pt»Ë/gŒ­š“ï.ÍqQv×])÷܃R¦÷1Dhó´D²ò ë#ÏS@Õ©ÛcmÔFu.×V³Árß·^¦%e •YÚe0ÞeÄYૼ×KžbB’Œ4@:žvöæÒ¤)!MP°ü¸RËü[ÓPJ±Â&‹Íwà†ÕÚ²]êRk§”xW*&¥„Ñ ÿÎßÁ­@U8´[ã"—Û!n"M$Ÿª²Ôm«úpçJrè!Ïã2'¬nô»çj»áÅ™k Vê’, ­$+Øþ‚ˆ Ã÷UÞëÇOyžVDÌcŒ©xíÉ¥‘di $)G\ðdi‘ąúLyéXeY\ýàn±­þ¡Q©ÛfnÕXó>0f`ÆÄ ×»öz`÷í´‹‚²¿œ,‹¿”çT&îÏ¡º‘vÔ“­Ts‡áרƊ›ínÈjp–Î0æ$Y'T¥MæþO1N¤4÷-Èf³hOžû%ÈÒÔH0c“¹¤,«HYÉ$ Ò4ÛÙ»™cg¯}>Ú1/éš…< °1¥H{ž‡~ù&`÷í´‹´ûî3h™NO"MÓ˜sk©Õ“KÈ6 {÷æŠ"‡ßØ‚°¹Þgõ@ª§Zm²7ˆ66ÿoÿ†yžüƒ«Óö-a¡ Ds1RN ”œÛgm6Sß´ot™ÀhKâL9ܼ4ëFœ¢N2!´VÄ}FФc“õJ¥ÜQ‘¢´ÇÒ”!Nqœc:‘¦YIÌZ)ÜtˆlýD3GÏõH]òºn.uOÕüð¤$0¦™RBˆ}{÷âJ Ò6»1v¥+÷-·X;mú—¹\L¥ ·Sšj¤¾Ÿ#Ëb„aÏÝŠ*/«zˆ¦æÒ¦cW9ÿ&¼DU€<¢ÂðçÔ‰ó|™÷ûñq!H+“…¡9#5Fûré÷²Œ(IÀÒ´0»Ä1a6“ˆcYäýJqÏ,c¶ÍïÝtlÜûa¿£©ë4€4ëÖ󮺉W¶š¥oÜçánÄOx)©XÀ@ŠsÊg³hŸ”A/Í% ciÊ‘fÐb`:U˜L2L'9’D騖Ê0‹¹Î¦=Z­›ˆ€ûºn«Õ×ÏgÇÁ¶L°¯|?¼¨z×íÆØ¥Ju¢cǘ€$þVšf@!¢êÒËŽùɼæ÷›nÛY6-'¿(>Ëy¯®U1¹ê2²ê² ôz‚z=Á|_¦Ë˳G|OK¥LçÓYo–ƒ$5I‹qL˜ÎÓ‰Æd,1ç˜L$âØµÌáËì¢ IæzŒÍÄ‚jÛ"‰UáÓöøz¸Í8®' iB ŠúWU÷nŒ]+X¸ÿ~s—&“äI’ž+Ô'Õ'`­Z°»Ž·Û»>̼œY–Ô~Ñ)‹2#à ’w:„°Cˆ" ×· SéÚêìaß7 ãœrÆ §Óh’ˆAkšN›N5¦SÙTc6%Ä1ŠLQ²ÿ¶TÎä˜UñÌf9¡ ©™ïhTcU}e÷PmÝ¥>Ú¼PÀxßy^½Ïõ½c`L\eO¸[Ç®͆£~í×è4}¤°Et›CP5m±yVÍIYÝ!@”öZÅ)Ù@¹aþ©,1$¬ÍñÔïZ%_1]}XÈI"¨ñ8º"I¼A’èB’¡(‰ãOÖLÅnJ2c‹YÇĵËÜïáv•¬ú4Chm*³Ú^Ùz¦GG]VÇ€¬³Þ»0v hDD‡õ9ný¿ÓišsÎÙªÇø¯ß`Ö¢^ÝuÀ¡TŠ<ÏS— ‹ ~¬ÛÕèõ4º=Â`É£ÁÀc~ Ò={â}_J©xÈIj2‰®Œ' ÙŒØlSA^,Ó)ƒ)“ce°ÜJ² dnî\)‹Æ6{¯š¤ýì*Zì² u'Áf™´íTï¯öç9!ËP»?óïcàœ/íæsvhDDÌ#"$[Ǥ”àœWH ¤ Ln— ª³œmö83›)š†·§Ñë1ô ú •íÝ?à2W’‡BhÉ9ÔpÔ½:I‚Á,M’l6­çÖbÖí1`Õ´Anfqõh#¤›Þs;ÈܤƒJÂ¥©Ù×4»æ½{æ3¶»ý8.Eõ²€­-ýÁÉtz¿ŒL¹ÒÊ:v¸E²æÆYʼ6ž% ›ŒóBdˆ"B·k–^Ÿa°äÑÒÀcŽJ÷ï‹¿y&sq¡%¹½Ý»v6 –g3Ðd¢Ù´–Y%Ѭ4³6™-‘sy²zºR´ªyL5êÐ4öë£zmÕ2c@š6 æ ìKÎE@ìæCßu 9Búða&~ý×i”¥›¿˜eŒçãªB†ú².Õ\¹&¦mÐé°¢ËO†n—ЃGKŸuBØßy¦ï¡s0d›[dTÙtÊ10L[%+Õ•eü-…ÑÌ‘sÃHÕ¤cu.Í|×Z–쎒.M­—Ywœš÷Ï‚Wë2“rׯ%éÇ`3oxœÍâÏyãŒ1el²JzÕos&|u{—U ó}†0d†¶èqD‘é;x4ø,ì¨ìÀø>?È3)y‡ !;{¶ýt¬NKu9›šeZÿ®]f‹J¬‡Y_6ÃG•½åJ)Ó4‰M§ »µ”Œv.ð,#GRZý¼˜Àä£TÌS¹[ÕP—hVª}ä#4ÝÞÞú…Ñ(‡Öf*;›¬fÊêÐH!,È€Nh]BÀ±´äS¿/X§£Ò+ÄŸ‚,•9„йÖÈÏœíßÇÁúlF4+6™0®I!ͦÈL®¿aüm*¶YEc´…jpi ¤Wëu–¿mT’ÏJÓ9›ÌÞ¡ÆÌ}NâB Ï¥ìöa=Ð÷¼‡Þ7N>"%±,c:ÏT³ *nYùßJ3Ó²ÉÔ6z+Tf²CÀ°¼ÒòrÈ¢ˆÒÈ”â‘çéŒÙÙ3ƒã8\ŸN‰ÆcÍ&°ÉD`2áY2«.y©.‹Ô›š-ÖdnQcM¶-*ÐFsØsÕ^•³¦½•mî2?Ø‚ó0,Ã.K4—WËóÉ‘Ù,µæ"MYÊ@ÊJ•`µ En™ÐïKK!--…, ‘]qEò—Q˜%Rñ:Uùé3ƒ›fq°>™h›L€é„a2á˜Ò̪É*׿ íØÀ¸+ÅÜ9Pn¸ÛÊÉÔô"ɶXš1f$i[¯v¾¸§òÔÝó˜‚b¥Ò4íöó¾¤=³Ž5Sʼÿýô§q<}i®bÚ…Œ'âŸö¼àÛƒÞ •bŠ1‚Òš %+æ0rSL+ú’ƒÇòJHËË‹"J¯¹&þL§“ey.ºœ«€ÕÞOd@f%Y}Î5^×5yGš&'Ïœyð¸ÿþcϽìÆÑ£¤fâC¢ßNG¿hâBUÆe£Y®,ŠŒªìõ€¥%ŽÕÕVV:¬ÛÅìúëâOu:iœKÑcLeœ³ìÔSK/šL‚½“±¦Ñ¶bãjö˜•h&œT©Iå½Ì×\mé;îp“ë!){<°“údÌ8Ó©1š*Û"Õg;¤7 Á‘¦ÉCø¾T‰»1.  ·ö•¯äÿlkkö§žÇbŒñ$É$ñ}—âÙ^V@€} êî»™Ï=ô»J Èœ‘µËú}Žõu²þÓ<ü±n'™™™{eˆüɃÛ$Ó4I6.$™›æS5'®˜}ÛØíã,V—;ƒÌl©ŠD€º]V"+ìy3×€;ï;Ø‚×d®ÁŠÙù!8´–ãÙì¡/›½wíês½Ì€fnë›ß ýÐC,|ï{ñoýrHt»Œº]MÆ&ëèµõˆ÷ûzróóGEq"¥·$„L5„|âÉå—Œ†ÁþÑPÓpèþU¢¢™0¥-Öô(ë4E[¦*Ц]Õsé ž UÿÚƒàÆœMmXÉÚUM©EsÒ¬®«Mf$„@šfO~ùËxìR<ÙËhåâøò2|+¿ôKêgûýñot:’/- ìÙª½{;|0Ã[nÙþÈ ϤôBÈê‰Ç—ï¼£‘¢á0gã‘.) W’™0R]’µÅ)ík÷ÿb¢µ®&›Ùµkµ«L.Ùd‚Âè/b½å9]n­Îö›;W—r þ œ )L&[ÿåc£“üÈzîgoÌÚÏÑìÝ‹ I0•ŸüIõoöïtyÙc{ööDo Fo~¤¥‰2ùØã+/ýý£‘¢ÑP²É˜€¡T•n+O7§ßŒ6pµ±ümÒÌz¨Ö‘@MÂ1Ô?ð€Éqí7÷3XC}»YÅh‘d•Ê´gãœñé4ζ·¿øa¸ï¾»ž[/lÔî”8s>€@·ÓAOÊt/ Öî¼ÿþŠ+’OEQº}ðàø÷¢(q@æÉG[ù†áÈ;0J %— ãE£wªèùª¤ÊØ'´©Ìfa5Ìk7ݼ¢CÜ” ú7fÌ€~21©F;U}5§ënf"»¶œ±Éxù~Ƹö}4Mú³?“_**i7Ç% AÕ|pzï^tDRbÕó°šçj¿ïóå—ÓäOd6ùr7‚–R, !S"A_ytù¯Î&Þ£‘¤ñ(gÓ 01gÎKWUÚ:„E=t©æîÌÔÓ‚šÝÚÔ«™—Ôd^,2ø+ïÓݦkÙ<…šº¬î2/2p'ò™ÏÐl·Õ&pI$ZíÖZ›Ltt,Xõ<±¦ö ÁW¥Ö{Î{Ý.´R¢Ç¹Ê‰„zøáåo½+†ÛІÛ9ã i†‚ˆ%G]Rƒ«/Í&võ107MT´ÓŨ݆³ß8I€ñ¸ÙüÝif»×ÙF]˜Ûhç~wU)cŒ8b:1žú8|øð%Ñb—2¨n%™à£Y–aX°¦”Ú#VµÖ+èk舔è0¦2@à+¯|Ëxä_5K=å|21†[þÖ$aë9_óÍŒw?à’¸ÆcçÂÚê&µÇHU»­mÔÓ‰ªmH‹<ËöQFžÇY§?õÔÉ?€ƒw/¾éŽ]Fwͳ( UÙ°X°À!øºÖX0 _•üòƒkß2úWo¥ÞÚÊøh¤1™ Î‘Õ*ÅÛKÙìk{umR̶°ži]*:G–ä®ómAˆcÂxl@¶h¦½ê³…™\õhöW<«9ÖNBùüÉÿ÷›¿I»ßtÇ.J´ÚÏŽŸm%YÀ€e@¬)¥Ö…À²Öz@@‡`@¦µ¯¾ôÀÊwŽÇâêñ(×£QÆ'*HNV©J (isÛ«£-Ѱzøm¹þÍøc½dÎñuæ:ÒÔØ¢Ñþì­ÉyeÜÛÿ.È\iVQ €‰Ù,¦áð©ß€Ã‡™(jv}ìÐê {òIxW_]©K})±âyb kŒaÀÀ{€‰„/˜J4|õ¥/­~×öлn4Ìôh”ñéLc6cH¶ò,çcF•¦có¼Ü+­§g£EjÙsVÛªbß*—?Ïçç‹4®¡Ne8{ÇÖÓ¦ɧ}Ÿ‹étúÙ{ï=õG@•>)ÆnÚh¥$»új0F¿X–=+V!Ô24–´F¿™Ç }þók¯ÅõÃa®‡ÃŒO§ºÌ!«›˜%ÐLÇ©Ó nx©>y›‹¹6ÃêW]žWûƒ¬ÚfØûf öNõ®áo÷ñ"ÕÝ8qãôéÇ~ù³Ÿ¥íÇ_2i˜r«‹yz{'8Ú½Ë S)¬ ­Q©K`*Õçþr寷½†ÃLF)ŸL´“Ó_¬*)¥óPMižu æÕÙâê£vÍôÎÍsc*¹ˆkk—dóR«*4±\˜µ· 88÷ „W¬ûB€sž@žçÁóBÕéâôé3¿ó®wÝ÷j"3Oçnfk4ÇE”hs†W,! u ²+…º¼ è€ÈBäS­Cýß?»úšÑPܰ=Ìôh˜’ Ì ´$6-H,Ö.dÖž³’Ë:.pÛ3-êŸWmsÃKdói>Í쌪ȚóÊ! bÄÓiŒííÇ•Ȥ_]Ji\T‰Æ,ÀlXÉ¥0–‚kV´Æ çXÖ=h„¾çyyªuG}úÓk‡F#~ãp˜éá0á“©BW•IV’Uìîh÷öÊè¼*­¾½òµ6•áYÇþjk»[wHªÆ6•$«Jsp. 0‰VI6BØÿFºy^ ¢(gÏn~ô]ïú«ˆ(»ÔÒ ¸h­•ÆQÐA€> –µ¤5–P¨Jp­=æyùèÊOzåðpÈoÜÞÎôöv̧S]fº¼õtžæµÔAU1þ£Ùn'¥Ìgåy•éQñ\í6Ý…€Ì¼ÖhRdn‘t³¦µNmXibLˆÉ4¦Íͧþ-e—ƒ4. ÐêY¨ƒÌz˜ÏS­±Ä9zB­ÁµàyÙDë¾þ³?[úß¶·Ù F£\oo'%Èl•¸oÒ‹À¶³JsiŽ*¥»ó<‘ºÈ¦[²æú<ãß¼“uÊ¢R£m.cBÛ§Ïýλß}ö·€KëiºãÚœMfAæ²Kž‡%ÎÑE2æyÙè«O}jå ››ò››±Rž$¼˜®êÜcÔe½gEÛCoVMIgæ'0 Ê²ù"’¶Ïxº s³3ªØeyupí1V“föú­%RÎÀ‘çyb4'§N=ø¯KË›5Ç3´Af=Ì€RX]­yȹ¶ uォûܹü››±g|2É‘¦ZûÐÚs<Ë*ø½ÈúhJŸr,°X °fºPUQÞöþóÙtíïi¦w·‘ToÿTRÌ\WÅ›¹RsO AÞhtî½÷ÜC;zôòð̆ š¬¿Y/Ïч‘f!ÐÓ=€‡œkV¨Ë1°’~üã«o8sFÞræL¬·¶f|<–Å,$º˜Þ&…”ª–Ç_¯«¬/†˜Õ¥ 4óh¦S*ÂUÆ{5w÷çsÏÚǼgÙY5æ$å¶v®Œ•RÍítÉӞǽ­­í‡žzêø;ÝŸ&ñ|ãk”huIöÐC7ÝTz˜Ö&ëù>ú–”B_t9‡h®uγ1°¤>úÑ¥Õ Ï›éíí)7“Að"½‡)>€cÆÓ2“Ú×›[[ÌNk¥—ÝߌE6ãͧhÃÙ÷t·»Æ~Ók2üöÿ\FMr¹û Ðç‚O§3:{öáö›¿I>ÌÄå$Í€¯™Þ¨ ÿÈlü²0ü±` }­U—s­Có4Öõïÿ~ÿOŸQ·nž›©Í͉˜Nó¢ß….[õVÏx`L€sQQµžbT~9ƒ Xh£Õ~jö“í/sÊâ(*¥YWJô<=‡ À•ê!’°¦þóoïùÑÍsòe››µµ5³YVÄ,uiÄ»ù÷bCÍ?Ж71”=(æc‡(Êᜳ £SìwÖT®ª¬œ€zò"Šžou2Ö‚M8a(³x^ …?{öÌ/½ûÝ[ÿ0í¦/u˜i§Ñb£Í)7óÂC=8ÞÐ"cK×óÐQ Añ>•ç-D²ìKÿãÚ÷cgÏÐËΞ©sç¦Âðd@.m?2›¨X=ÄöŠíú/2ôkVe¹ÏÒ ZËr!ÇÆ2v–zF@¶h½öºÔr¥qUÙÄÀ¹'…ßÜÜüÍ_ûµíŒ]v9ƒ ˜Sl‘c°ùýCxX®©ËN±„Å(O@)H b¾o)uûOÿiåÈÖVþÒÍÍ©c1›Iä¹¥.ê“>Ø-W:ÍûS¬Õ¾Ú¿k1ÈÚTeµ¯)Q]»¬Zr³3€s.=ÞæææÇ>ó™so$2í¾.g•iG›ÆZ–Jš™ r?M†aée†0Àó”B1é+R KBÌÆR^é=ºö¯FcyÇÖæL ‡S‘$yÑìŽærÈ,#_í|´>—ÎÉoËv­ö5%Wu\“ u37ˆ„2¸·µµý‰F»>yØW; µÚfÂYÊ×i †¾ @I xòâ¿$âÀæ‡>$ÿnšâ67S¹½=Y&‹œ~^T¡¸±ÆrsùÝŒ óðÚHV{ÙOˆ_õ¸“·ñ:¿[Ön›¹s“o&02•æð¶¶¶>yòäèû÷wé̳ d@é ´¤A^‹`ÏõõûÆî’€©¶ît €µÖFº…!LP±úÖo½ãðé7¾÷½v»Ko2ê@+€ ÃÞ»™±+݈8'§T®n¯]¨cðÌŒ¸±z¢¢ÙWwvŠ_¶ àŠs.´Î1í}ïK~ˆòÇ™x6‚ ÑœkTÉð:µá®»¶œ•nÚYT±èG®¿)@tçìGQÿç¢Èƒ”ZjMžÍh°ÁçzfP'FÛ&ßj>øglí´²º$ž·ÍxCb7ƒäu ƒs!}_x³Y¢ãxøïþs€É-{¶þmÃuê\B½µŽFÀ¦;E˜›]§ë¯;~ÿýŒ>øAz×ë_Ͼ eçWúýà:"¦ Û‹W¡7ËÊÍ|ó¹Ý°ÉæG3fÒhái×ÐdÿÛø2—õgŒkCÆ2o2™>™$ÛoýÀèð±Áø³d@]¢•ÛÐÚâÔXÐX@Äc‡=Jêû¿Ÿí ü_ît‚ÃŒ h­¥ÖZÄÊ©ØÉ𒬽¥§{9ÏØí©¿jæjá¡ú¶yúÂúÍ&#!<%÷¤”˜Íâc³ÙôG¥Ç76¿ë.ÐåNÆ^Ðt²=w ž£ñº= ¾®¶tÙ׽޽=¢(Ëy“9F$ªÁzFj{oÿö¯ñ¶ÌoiØdó s%[»ºl®sÎçBx0™$çò|ô“ï?ÝݼOÏ…q¾XçÓþ«sí7¼ÝˆŸ‹¢àµBpHIŠH3"âó`k—j»´Å’l>@Þ.ÉÊì Řà¾ÏX’HdYüë³Y²qô(=Ô¼?Ï•q‘+Õwø`G•ÀÞÀþ–þFzÏ”ÒÒ€¸Íšp%Ù<ðܳMÉœçÝß #µ­×S®KI¦cÌó8Ïs…,Ëÿ8M§?óÁÒ ÀŽƒ~.¨Ê¹»v©¿“ûë=|˜-w:ø{œû?Eb_‘É¡ŠÀ¶X¬F‹µgllÇ}m kOû©M3ÆÉ÷¹PJa6Ë>'eüó'NàƒF=2vø0žõÿŽwõR 0Òí[¿%Gôú׳«9Ç?ä\¼.ÄPŠ´a?ˆ¦Æî™—j²âšÑô.Ké0Nœ3ÍgB0n& Ë>«Tü˧OãèG>BS๩&[ïÞå4;66¿ï>0GÂí"¼ðÞâû¸Yif›3Ý.ˆ Ê¥ÍVûêÖl5e÷ÍK³¹Ü2ÍÀˆqÎ8ç\@J¿­Û¥¿æy¸Íó°ÇL[U£qÔæ /l<¸/í0,™4Ƙ‰‰—Óšølᬌ³Œþb8TÿõøqÜ÷…/àI1¿ÛEEy=Íõ¤XpšQ˜¶E5þëæûv thÌIU›ß&œÿn*’=ÞÍðåÝ.X· áyà'O"‡ÉQ:/y ®Ú¿ŸìtpmÐõ¾ÏnæW A=ÆÌ\Ÿö6ËìÜu^Ëg©nš‚´f'¥¤³DìDšâ‘éT=rö,ýÜçð8€@8ÀC)Ai Çç aÐÛÎÂ6)¸hU Z6^k\dÐ]T 1ãß—É’Îâ­)Í\pÙu . Eà¸ài =—À#^¯‡¥›oƾõu~çÃûƒ€]éy|¯çñý@D@]Ætq]B‰“Z#VJO‰Tªf™ŽFúÁÇ>þ¸šÁ¨C«¦ü~A@¤)tš‚¤¼àøØN¯Ï6wÛù@çJ:KÞXÔÅÛEZ!ÉlK€y µ©Ë6 5ã­s-ª=¬Ó C³OJÐp]Ü<Æ)¢òž†è@šB®®REðÂ~žC=ù$¢úµk ìjÛ¢òåe!Ìç§)è<ಟ}¡ûžŽ„[8Ýò¿ l.ÈRÙÅê>Ô´…™øO ‘  Ùš‚6iæªË6iÖtÜõ¶`?ó<°04ÿ- Šc(MAÓi)Ü4'*Þ+ÂÜó÷½R‚”ó$Ï…üjÁå¾^¤^¿UÚT£.Ø2»]œøj[öÆŒ ]¡:]If%›k§µm'Õé®Ïo[÷<@÷:@Õ@´Ló¹JpÃ.`;-8v'•鮟ÏQP¨Ûh9ê@ËÈ‹¨:‹·†#z³.üb °µÕ…Ú©yÚì´VgÀží@»`°5ÖqÛ¿ÖñµØfvýéH0¼ÇiÍWš¹NÂÅvælžnTãBžàÑMz£ p;Ùphy}!Òn7À¶ë¿ÅÑ&ÁšG›¶ÈãT-ÛÊ÷îÅÁˆ Ü×;Þ˜ GÚnÞWe¿ÙÑfø·¥“·mk{½h|Æù;¿Ö±ˆÕíÀaËgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs  šœ?IDATxÚݽy¸%Gu'ø;¹Ýý-õjÑŠ(,!0cŒ1 ûsÓx阮7n7c<ã™ákO{ÃÍŒ=¦©z46¸gì¦{üaã­±1®jÛÐ^hšñH 0…dÀHB F»jyÛ]óffDœù#2n.÷>-¨^•ä¬/ëÞ—7ï’ñ;ë$fÆßßh}ý˜8yòzŽ›ùW©ñ#?‚æÑ£7“I¤©Z-ÿÒfSò¼€¥D¬§»»Y2š1m©áîîߨ_ÿuÄÌ<­æ©SëòÔ)àäÉSxö.ý}€ ×]wŒàر“5ê§ÖÖ¾ýᇛ¡¸ªÙl|«òR)ý%fÕ0†!ä €@@&cÆ”Ù$̦OÄ›Z«a–egâ8¹7ËÔÝ?¾¹yûc¿ú«ñc̬K¿Fœ:u';ö솿7°±±!àøñBÓ‰HþäOâê«®zý?hµº¯óþáóYÀëë§ _$ žSpêÔºtÀï÷Rïû¿ÿ{ÿQ§³üþÝÔjEátšAk¥!|- ‚FîË Ì¦:Ï€Ì@~œPŠêøTßçÎ/>“JïˆÀÆh“e‰2 ŽN’égwvÎ}è¶Û>ÿ±?þcÞ€õõuyêÔ…„ç„llP@Y?ÿîw¿êºì­Fó Íf$§Ó JeÚ%„ð)Š:‚FIÛu ì@ WA&€˜Á Ì¿{þÌ ”³c…K™—&˦`N„ïqœš8ŽÿË™3÷ÿÚÆÆ]n¯sC?~‚/dÆð¬€²Ö¿ýí×¾èŠ+^ôSKKKÿ¤ÙŒ–’¤…aaØÎ5žaÌ, Ì·²—ý<Í7?.‹À¶Â@0Ê.ÄeyŒ"‚ZgœeScŒ’A 1wƒß¿÷Þ›ßÿ¿ÁwNŽ_ØàY+e_ODá¿ù77ý³••ÿÐëu¯VJC©Ti­¥1Šˆ$šÍ%A37ó&×Â"u+›þòVÌ ‹; —U5¥ÏÄì·˜¥–Y–°RS#%I)úýáÝgÏ>üK'NÜñf6Ê%§l ìÕ‰ü˜F’ĆY#ŠB1™L&;;Û¿uÇÿ߯üÁðÃÂ%<ë`cƒÄñãvDßõ®Wï%—\ö˽ÞÒK³,C–¥0¦[aØF#²¤1e³î@©‚S7óö±¬­‹„döì ÇjQÊX ó!/ŸlpšeÎ²Ôø¾/}_`ssë3÷;¯zU‹âØFìÀ×°Üs ÇA? ðp·øô‹¿øº·>|ÉqÏó(Ib 8Í×0F! [ðý&´V‚&¢¨ W™Ï àyâxBˆZÚWÏõ ‚fï¸`q`¸?ØWãÂÒP-F 0ÓÌØŠ£€.•T2M3µ²²Ôèõÿj{;~¸ãV).±Óô4{)~b ¿ˆ@tüø À/þâwý‹#G.Ùð<ßK’©´4Æ€YAë ¾ß€ç…³2¬”>Êà»âŒ1˜Œ‘sn Êâ¹÷,²õ@¯ü-Š r×Bv¬«n…aLk œ4* É@@"†BŽ¢@4„0T·\{íàkA9ðI’ C,ôÿOnÞ/Š1Ÿ à¸y×»^ûÏ®¸âòwAÆñ4×|kòµN!¤ÏÁÆ€‰r€³ Dãñ6¦Ó]XÚUa^›iµï°Í]Â:iTŒšÃá©ÒÏ„j\ r¦Ð´B¤TE/-"Î}âå/ÿ‹_n·‘*Õ[ö¼~@¥)LÂÖ¢ ÿŸ ÃSóíENž<&€ãúï¼ñ»®ºê;O4³‘€Ê5Ý–Ï}¯6†‘xq¼)Ac4ÚÎý¿žEü.úçšI®–E‹Ü@Õ8-/»—z–…¤|®³0ÆXÁ+~§Í\ÜßVû™›Í€—–¤‚íOÝxã'ß×j!ÐziÉóvc¥@žHQø~'O+¨»àA ãößúVºâe/{ÓÉ^oéÛÇãX1+ÏštUòûHéÙ@®Vo¶ rܾ8zôõÿ[¯×ýöé4ÑÌJÚß‚¯u ß‹ „„Ö)\EÏ5KÉLw‘$ýYu®¨˜P¥¿s÷hÿ.ÊEÀ|ðX~ÝÔ´ß¾ß ¬™}—_ì£ã.ìuÂÍl­6³Q !x^ÊÍ&ñò²hó–o}É_þF§©ugUÊÖÀ4=‘ÀZU\ÌÓÓè l6pÜüÒ/½zýÈ‘+>(¥×H’©q¼>`Á'ˆ¢.\þ/¥‘È%`7l8­_T½«ZT‚3LÖ·²¯Ÿo$© O•‚Æ‚ãE¡"Ï3ð|æv+àÕÕ¦ˆ¢áçn¸á³èv¡³¬Óòýá$}VóöÇUxú`^0 `{÷Ž›·½­qõÊÊÚ;Â0h$I2ß}´Vð¼€É£z«]V{ \€ÈÆ€gVCåQ¡ÝNóª€9pl(—ÞË öBèêà»÷;ËS3³…õpœQÏËŠ;mÁ++¾h4·?ÿâöw»]cÚK¾?Ì´–©RÞÀ(ß'°–Àùþoºt|A‚@õÛa¼üò×þx§Ó½!ŽØ¢NáûSáAof.mPU l•x)ƒº—öššÏ·uù:ÏÿT¶½ FåŒšà˜šEà<×gÁR# ·Û¯¬ø¢ÙÜýë¿ø‹j6!Œit€Q ÈTJŒ•RC£Jøà›Ñ~àYõƒßñŽ¿¦Óéü÷Æ0ŒQlŒ&§±Zg0F—´_×´Ùi¿x§meÿl5­^ö]ÜPÕî½%¡êrêT2P&ܪ¦ÞÔ¬’ˆ ˆ4ÏrÍ/üh‘rÙ÷˜Ò`,öáÕcõ¨¿ ÏÊ>zþ3«ÀÌ2ŠyA©Ç œo ¥†ïgÔ;Á«+èt†wÜpÃWþ0 !Œ‰ZžOµ–@÷¥Ô;°ßÀ¸þÓN÷.Š”Ò¾æêêÒ›[­¨“e©b6‚šæé‘õõRŠª¹7¦”6¹ Î¹7ÈzÏÔmñ^ݪ„M=`œâòù»W¸6UÁ"ÒBÁó4‚ C£¡¸ÛóøÀ@t»ƒ;n¸áoÿ0 !”ŠZBL'ZË woV󰦊o’ìy¢m_ƒ@Çõ¿ó7ÞäûïKc´pL_aæ³ÜÌ 0«šßwý}…¶V¢¼Sfù °Üù››÷<^´é-¹Þ%TÌíÜŠð öl{º†”&×|ÅŽÇ««¡èt†_yáu_û£ Œ‰"Ï›Ž´–CÛRb PÛ¨jþy úêÛ¾YÛÊ}ܼñ´tàÀŸh6í,KµKû €-àžäæßeE0U¶.嫘ó'!ræújåZ=|f]ÆÕl j l”o5_J ÏS3Íïu%D·7úÛë®»÷£lL 1Áæö[Rês¶Päú.Ý;ïàûjN^úҗ݆­ï¶¾_S9¸sÑ¿ÕD1³ðöšm¼®áuN½¥^Í+(b*½·<”„¢¢:ŸÔéܽÙÃ"Ò—Ò@JßÏEVó——CÑ鎾ò£÷þI@[ðÓ ø›@¸$eŠ·föÏoÔ¾/çýZ­Þ? CߟNfÖ¢ªÉ¶²ç&fºTphåó'mÍyØ\äö¶”J3Ó_h­˜1oŽ'pϫ畅§\»/ “© ½ÞwœPq¾Ó|•›}åe_´;Ã»Ž¾à¾? °RA(Dº `ÐçÐÛ@2ÈÁFïSÝöÅœú‚•ò}ÏK6¹­56¥g¥ÔÛ°Ÿßu÷ì;øÀyrü?_;zôF¬¬¬Œà-o¡K}?x9€JI´ÈãM^×·Ý0…`äP.ã–Ø6×0¹7=;O /®áWÍý|Á†|–žïÚ¶¬¿×ˆ"…F#C³™bi‰Ìêª'º½áýW_õwéû‚•ñáy¼mŒ¿ è³Æˆ³@æ¢}çósÍç}5ûç]n¾ùO:ÏþK²#GŽl­¯[ݸ暗½. ý£I’Á-ʼ~1ØE[•ä±cPTÚ¸”X!(wâÖ™·EÏËuúàj9Ù BqÞ<9äÒ<çï=¯Ðúf3ÁÒxeÅíöøW^ñàg|_„1*MÒá0M…)åmú~¶ÌÌ~îïù‚¯%ôŒàŸø¿Ã×½îåÉ¥—^º€Ož<ÁEíWlj­³¡`.m[¸™~]—«€@‘kd*©…õÀ¬Ð¡z€gòò²©ýžª5)¿êk|)>·Ê…ü ¿=S 7¼á'pY 5ÿ7½‰V}_¾À¢«ø™E¸lŽuM@ækì3¡0 J%µÐE„¸òGþìÏ^ú¢[Òk¯}©ÚبIèÞÎkxýõç¤ì¬t §uɰ)iµºüùNš²).ƒ5ßàÉÌP*³”A),È"´}qÜ¥…åɚŹö±Ô£ß73Í"ðu{„^¨Õ=räÈã·KáyDÙ4M}zð¡+¿g4j_µ½m0y"M`„l{½Þ•oÿÙŸÞœüØu×­Ë‹>pž‰ ë®[cB>ÀªÖš™ U=§å`‹gÚ?oŠ÷.¹Î²ƒü}vNÝJ¥oq¯žcñLN2•N—‚;s_;Aà‚½ív‚Þso Ôî =røñ/K!}"eÒ4ÂÃ\õšá°yÕövÆã±@š ¤D§ºÕj­^~ùUïxãéšcÇNêõuºhBpÞ€ˆ(/ýÊ ð^†Rh­ 3S%çr·[Æ¥š¾¹4xqO^l¹Æ(dÙY6­Ä‹{þʾ¿Ü§gJ¾^CÊ ¾Ÿ" m”ßn'3ð—–ˆºÑ£GùŠ”ž4§i@>zéwÍçmoiôAÓ©D’HdCk#â83½ÞÒ¯|åMï$¢ÖÉ“¬mñìÂoçÍœ8aY•ïüN4ÃÐ;L„R1§(ê82Å¥]àµ(Þ¶Ü”ˆ›Š¸¡`ú¸ælš¨u! ¥)1{ahóüFC¡Ówz‚ºíñ㜽KXÍWiÐã~ÅpÔ¸t{Ç`89ø€RZ€!"ÅB,-­üÐÏÿü·Ýà?¸âÙsVÜvÅî|zUëŠ(òÿE=÷…/׿ (³e`  m—q!$„ð@$óçeest.òÎÎë÷^~T¿Ýw:‚Úíñéƒkç¾f Viê‰ÇO¼±?ŒŽlo) &8²Ì¹=AJˆ4…n4¢ààÁµ·½õ­ôù|€¿¶¾¾.Ož¦©Z6†×”20Æ ü ÍÊd‹k-Ú¶ŠÒk¡ù¶ÑÊýWôY®êQ)^(fç²2{PnêmŠWÖ|3¿ÑЈíŽàvKR³™m®,÷¿ÁD³6F{ØÜ\::+ý¾æÁ@Òx,1™Xð“Ää,6°d¦Y!ËÆG$’$5­VsíСk~œˆ¾ÈÌqy­¤çŒ¸M)á1¯Þ][Õš½.•„« 5?kôÞAaõïúd‘YGrnîßg9ðA¤Ñ ¢†B£a,ømÁ­– F” ‚A(k¥%mowŸ?û+ƒæá@Ðd,1 L§„éÔ Mm|c5¿^»€…žMwÓZ¢ÝîþàÏÿü·¼ÀÇ.d@xÞ@J¤g&n¦­åÜ>òŒó‘åÊäLY»µs]Ae ‹ã(™xä1<ÏîA`†ÎÜç{àÑ4h·ˆ›M¢F”îözÇ@“ežÜÙí\=ûKý¾æa®ùã1a:’HS ¥\G“‚”€1Q6ËJ˜ Ì$²,Ó­VÔêõÿS"úsfΪKMîßvÞrÏS§Ü ')³IëÔêül»Õ;}Êtí¢û¢y³^¼y¢âŽÉ‹8®WÏääŽ òšM»·Z ­¶F«¥Ñí€;¢F#ôzÃÇàcH¢þ ý¼ñØ[5† ñX`<ˆcB’²Œ¡”ªÐÉnö³{^¤ÁF+ÒÊ ÕjÝôÓ?}åwÀúú±  ìCO '˜!êE–ù¿Ë|~„¢ùÃm…–ÛÇÂߣ#ï+(_{~¡ýNó«¾Þä¾ÞZfÓ Õ"nµˆÂ0¶ZãÓù¬ 1¶/ŸL¼îhdx4"šÄ“‰Àt L§@š2²L#ËTþýùgf¿Å‚€Ú¦†‚Dše¦ÙŒÖ¼rˆ>ÃÌêBdçMÊ\È,|ÀøõôÏVhojÙÙ¾•ú|¹-b^pæBê© ›‡Wh½Õ|“k¾¾ÙTh4un4ÚmâVKPf£vk|F û½žÚ—àƒ&c‰ÉXäù>!M¥€,Sù†Žæ.Ïp*cŠYÍfÖÝí¶¾çmo;x}>¦ûnÎßä> &cf3$ÊáZ@îT™8Êóôò4¯útn jæ{óËßQ4o ï&¶Àû¾Aà7š¦A³i5ß‚O…Ù¨Õšœ1{—LcÙ™L˜ÇcP<‘ˆcñ¯-à¶Qž¢^‚¢¶ ³¡4ÍXïšn÷òï°pl¿ñ?p×õ…Ó§i®®WP×ÚêfL–w c¶ªV¯·2÷r#ŽP*,†›†í4¿_çš_Þ-øÍ¦ 066†h<ŽŽLÙO˜G# þd"rð Id`4#ËÜ\Ç¢°T^)¤>ã¹ÔKZ+EµÛïãi騱“û^#8ï>#f6›e­,ÏœoËv%Ý;XK™)4•z~^O¨Yköm´oµžmªh„¡A£a5¾,í6¸Õ$ ÃlÜjÇçXCN‡¦‰lO&Ì£1‘cøøiJÈ2@k Ë4Ò4©¤½àf¶àeµA¦(ŒÙ‰3Œ(j¼âÚk¯; îxÏz8~Ü"~Ï=PJ™é¢ ÜœP”Ò:ÛìYpÅÊõŒÀñ ¹µ0E1Éù|W¿Ÿ÷ù¹éokþVó AA¨Æ­v|$¤]r˜h?ŸÔ­I5¾(7pHÉð}]‰ö­ß·à·Zü0Tãf+>g»I  ‰'“ÆZšÊf3O&Vó§±Dœ|Vû­ J$Ét¶pe½¹^ )îkà®eÖAJC­VëUDØ;‡<ݵL.‚03»µ’$»+IR&bQJäæ‚·rÔ_tö¸Ú¾Õ¬rsè" œóӳܒkÖì[Ó¯g{T?Ô¤Ù˜nö&¬IHR¿O€É„h:•°Ú_€oK¼¥8?C‘’V5»ÎQ”I²òúÖåY7Ío{Ë[.¿Üé׳^ìv*3¾ŸÙœ‚ìý—PÖ^'0„ªïÐ:A–e3XD U5¿x¿Û…(|~á÷m´?3û-ð5"5j5ãs, láQ Ž›ÒÔkÅÆ$ΫzQòû@’”È2ƒ$‰¡µÊ•ÔT~oüªK¨[…bž¡R˜åU½^óE°±qb¿ð?¿p×]á$ÙÚ1Fo×o¨P¥4rm-i­ÀtF »A©—Œ‹¦’jºW=ŽÞå\ëUÅçÛh_£F¼A¹˜Çqt M½fñÔ•t]Ð'f¾?Ëiª1æàƒòBf½«i¾Í­ìû-à\ÀÖD2lµšWÀñãÇ÷-Ø—ã®»Ò‡Ó4ùzÞqÃÕ=в\P”k”šæ±€sBPÍ" ó)„ úaÈ¥€Ñˆ Úma}~ ÆÍF¼ A‚ ƒµÀd­ÍÀÏ52±D¥y-øiJ˜Nâ8ΣzªY¦òªêmçf¶p„=®QvayD™bãyšÍÖuN[ˆö'8¯ßÒD|êSÜŸNÓ/(¥ØÛðY³H%Sçþ¦ÙsçC]—¯Ø}Q«¸‹ü­é/Š;†A³eò<_p³)( õ¨ÕŠÏ’$"؉¢ñ$ßúüx ›ï[+0 ıÁxœ`:æK¨ü|+û| È%᯻€âýZ1k@Ì`C˜L¢IêÙToðyˆ'¶´; ‡)F£qœ"Ëläo³“j­¢Z賕e³_Ÿ°Z¸géf,Rsy¹×²Ÿº?´ð~€ˆ~ó7ùÞ8Ž¿Ptð,*ØÔ[¹Š5ý˜Ò4F±JHù}ÅàdOÑÅã|»-¹Ýò(ŠÌ°Õ‰ÏØ‚#34x7d™ßˆcâÉDX†o"1™£‘Æ`˜a8LÇ*/òhMКa Í,Ù"³_æ$ê©ê"ap­ÔL0ˆ™^»Ù\=²/Èï—03¯¯ÛÏMÓÑNÓ4 7P|¯ÏŒIJÔ*Jf³hß¶iŸ%zšMƒf‹ÑhÝ®äv[PÔPýN{ü¸ û)’ãik-I½æ$f™Æ`4b ý~†áPa26H’‚êU y B(ß’vQp;/ eÁ­Z  +ÅPj–=Ö¾/ƒf³{®¿~Á}É®Ï C››ýÏ'Iú”"˜ê õÕ=kB0ãâYVP.ò8¿o£ýÂô7›ÝžävÛ£fSïv;ãGíBlÈL&áÁx*[ã±æÁ@Óph0Œ†£‘ÁdBy7¯˜u÷Xð1ËHŠ˜ÄTÀ,wÙ@~Yʤ֌,«ãËLD¡”ÁÁýÀh_àÄ {¥ú?”$É'óÎ]QvùEÛÁ.ÙR_¶Õ=Ȳ6£(̾­îD ƒf“ÑjÙˆ¿Ó•ÜiKj6Õn¯;y„’ÐZ`8lžÄ²5iyÖÉcS=üQÞÙdåfßÅU+ä®Ã]K!u—Unˆ­çóæËål«éyü ìG*¸/`Ý€ïÇ£Äqºíû­Å×ßWm sÇ‹@;À”GÇSØõ9Ÿmz×4h·5ÚmƒÞ’ÇK=ŸÚ-µ³²:zì™™0EG&¯5Û’îh$0Î÷ÑH`4¢<¶­+-̾õû@9--š]òkG• Xñ±€5ýeí§}dþ/…¸å–øoŒIþÒó,)dA-8—ÿ½Õ«·þ^‚HÁ˜)„ÐCÌL~«mÐn3ºK÷º>µÚjgeeò€0B0‚GãÖ‘xâµFcÃh4’†9øã1å¦ßxÒÈrð‹h¿ê¿ Í.€¯w+@—g. 5#IÜ{Š« ëB$%5Ÿ“pü8› ò¾úUNG£ñG&q–I!e^ô*™ÎújÞN0 ­²³v¤TbŠ P3³ßî0––sÍo«+ãoÁ‚ØhAƒAë²ÑØk†ÌƒAÞÀ9´»_ä=}øJqaò+ *U«U¿ x1í¼ÞSô:03Ò”sŸw-6h&0Søœw½ðÕ¯Nþß4KÿÌóBv@ÛÝ©Î8ð‹Y;B øQ¤† šMN—±¼ìñR/ nWo¯­M¾.„CÁ;ýÖe£‘× Í†CáHb<3Í·?r"Æ–y ›Š¿vAhQç(Ҽʽ k…+‡ªÓð$a(U_«¸8·$Å,xÎ €³7ßÌ£Ñ`üÁÉ$›J)=€L±¼[õ&ŠvœÜJž”k?àû„("´Zí6£ÙJÐëIîõ|êtÕöÚÉ×€µfg»}Åpèuû̓Óh(0Zð#Z`öÙ¶u™"Ú¯VËÀ»"Ta)J([ËGœ ÉkYf÷ÙgÍq$f£ŒÉΟ³Èþ<‹Nœ°Qì¯ÿúä?÷ûÉ[²ƒLÕ‚à–}µlo¢èû@Í&ÐjÝ.ce%ä¥%º]½upmrŸZ1+%xs»sÕhì- †wwAÃÄ` 0 ‡…æÛfNBšr)ÍC¥€Sí5¨šj®D󘿘ô²„˜´r@?‹J·¶Éƒa»Xô¾mû.ÌÌ7ÝD3§ÛÛ;ïÒÇ•ÞtJÚ¥Yea°S§ÜÝ3 žG Ñ ´Ú@·c°¼ñòrD½.o:8¾—¤&"6™’¼¹Ù¹z4ô–vw5÷ûLÃ@¿/1È…`<¦RG!ËÌ,ÏŸïFžß &Ãè‚”šÏ*£"Û8š$ÎÅfÃ)A5M`f£µzn Ü|3«õu’ý(ßÇÓZŸ)(Iˆ“Ħ]i"ra°B ¥Ó|F³IhµÝŽÁÊjƒWVrðÇ÷Hi`“dÎí\;{Ký¾æÝ¦AüpHÕü½e÷ÌÌ×Ï÷T[Ñê¬^½e­þv´ü8.Ž—­Hõ|€H°­M6Nvb®ó½]°[Ǻ´ðܹá¿ó}ÿ¦f3z¥Ö¤µ†4&Ïÿ37_ßÕô 4ŒNXYiòÊjHÝ%½yÉ%“»…ÐÒ6Z{bë\ûÚáØ[ôújÇÊÑúü·b¹y”3ð§ÓúœÅœ9,­c\wÆpÆœîÅÄ›ó½]°uiŽg³¾Nòãç3;;ýwÅq:ö¸ñÁƒ Z[Ó]suÿ R¦ªP<ühïÅ;ÛÞ­-ÅÛÛ&÷ù„ñˆÇ®~Ï¥®™´¨._fØ¢H•ǨSÁÖh͘LY T)îú’´õÀ¯\±eq)%ŒÉþîñǹ8±Hìóú‹¾Ò]¹ ‡ht:à~ÿK¿ßúWGŽ´škkÖ¥ß8úüÍ/xž xY<Ú¹q0vv2ÞÝÑ4йЩZåº}jnùy•¼)^/fsaöÁ Ò¹6Ê·4r’ _ôÁ‚é¢|·:˜uRÚ›c{ž)xžÏ ¤ôáû Ól†bsóܯœ8ñ…·33ïçBØØQ¹ývH€Ð÷ÑüËôGñÙoœþ?ÝžL2=ºõ9ß3’dY(~´û²þ®8°½•ñζ¦áÀ‚_ÌÒ­víT˶óû^”mY㠲Ǻ‹™î’kã²¾¾öŠÏ©rÕÕLëu' Œ”BL&‰î÷‡·Úévër¿À.4»|@Üx#| í(BO©ì0‘<øêWë{;½û±å³/µm(IBï‘Gºß6èÓÚÎvÊý]CÃåeÜ"Ò×Ú{‹n-_l{eUã÷ç×ÓÔú{S›ºé|¾+wÛØÂݾ®¨}íceW 8<ÄñäîÁàÜpêÔ©}# û || Ðаà 2ë#ʈK.9o…áÔ $ üGê¼bwG¬mm¦¼½­©?†CÊWä²5u¥ê3Š«^Uã«¿Îçî"RL>€ªŸ·¬c<¶š_ŸˆÊz_c«, JÇìq!$Ædñw~çÜÀãNöo»PT°È¿k¦ùY†eßÇ­å!)ù 1f…Ùtµö;RfY‡­‡î¾²¿+mo§Üïk >š*C©E{Q1fÈòß®‡Ï OåŒZ±Æ[Ãw¾¾"Ú³÷ØÏ(“>nQ¨zð—Gü( K)Ätš™é4¹•™“ÜüïëÚÁûhf¢-aÁ`5¿ `Å÷qPk¶à〮lJ™Åñ´<ð@ïUÛÛâð¹s omeÔïF#Â8/ãfi‘æ•§[Uý𢿘¥ë&b˜šŽ¹…+ÝgY­çY1GÐ"*¥”³ï­ö6Ú]ÀÝ)­œ !çy”eÉ×úýû?Xó¿ßÛ>Y€J¤ï¾@À2àø ¯c–è€e×z<6š÷ßßý®Ý]:²³5åÝ"›â¹©Ù ¥|-†ŠÖÏû÷2Q3ßÖµ˜ 13òF)û}¶k×Eø•O]xå3K æS>€ f¡lþˆ &£É­ïÿà´ßæØ?P¿ëó—”Âx ’W³ ~$¥O&ÍÖ}÷woÚÙ¦K·¶¦¼»«h<É‹99¹ã˜½¼êÕרvçΟ‡ZZÇl¿§è²Ñ¥Ýë 6§ùõÂV¡ý4£ mŠH Úó¤&§·vý}X__ûmþó.Õh%Ÿ` À*@êÕüï–Ö2ò}=šN›Í{îë}ÏÎ.ÛÚœòn?£‚Öµe\­0·(Tuðçýr1‘´zž{¿ÓXc8_ãù­âõ*¸Å÷`W_'7ïê‚P¡|]lÀBaŒF¿¿ûá÷¿ÿ±[76H\íΫÌEûuðW¬‰UÀôŒ-&ø~ÖÚí¯ÝÓ}ýÎ6.ßÜŒ¹ßOÉFùTš™S¯ÄU ]‡/z^íïìçºLÂu)\õóËŸW¦€«ç´/Èþ£z뛢™5Ï“r2™>röììL`žç¦÷e;ß.@¢ˆøÏïX°j V„0cÐÐZú~˜íŽÇíÖwö¾ogWlnNxw7¥É…¿W‹ç T;qж¬2ï^wî<§í|ä·rA%ˆ¬.@µø;‹ï™uòÀu6 QüÊÁ ,e`";U}<Ÿüà9Ïý/ŒöçMJ9Õü@ Öï÷¹lŒ^¡1ôÃtg<ò•öîìàÊÍÍ ïì$TnÑ.À/hÛjß×4uÞä;ðC¨Ty¢gÙmÌó{ƒ¿¨t,f¯4ðÌÌÃ-_¶ 2AÈñ8~ðÌ ëë´ï©ßy€9ŸïÁ=-ØtoIk,K©—„@@˜¦éîx¼Ü¹ãŽÆ›67³«67c5Y“O³`ϦxUJõ ª%Z·Ò˜~UTô j–÷ îö^»`QÏÕ@¯výZ!¹öSÞðIð¥$fá°ÿÛþ­áÝÀ…Õ~à @¥‹¡ ¾cùº–¤Ä’1h @©À ‚t{2YéÜ~{ë¿=w.¹êìÙïìLi:•ÐÚ‡1²~ÞLÁóß<Ÿï[kábû¼\(έ/^Ußö¿X“ÈýŽEZ1óý.Ò/×ûñ#„Paèy£Ñø¶‡þú ¯ýÀ3we¢g¾Rèy–t-ø"0Æ“ž—n zwÜÑø¡³gÓkÏžò`0¥8–H;°·y³)ª$MÞÃéÜ‚‹ œy///_^ ¢ è¢m¯óÊ·º­Nà¬Mn!P•æ-ÇEàçyãq<ÝÙÙü•?ú#~d}äÉ“|à›.[Ÿ×]×]7Çòõ¬ä~¿+J‘祃~µ÷ùÿÚú6Ïeמ>½kúýXØe×x–~9šUˆDr6¸eò¦˜ª]þEÕ¨|QÀV׿ú¶Hó«KÒU;x‹[Ð@ á‚<‚Þìe¶ ìÛ’o™À—b{{ûý¿ökÿ‹ý.ù>Ñö4,@ÅÞQß=¥Ð#B@KJJ…Òó’Í~ÿàòç>×|ËéÓéµ?>0;»±˜Æ¢6%« tš´)í-ÞŽD©‚]ÜD‚Ë}™ ·½Æ¸¾ÆOµ}Ì]v9í£Úñ²ÿ/2ç ¡* „7¿øÀÿ’›J¡MÿS€…N®í;ÍoÃj×óÐ±ÇØÏ²Pø~²µ½}pù¯þªõcgΤ/8}z`vvÆ"žŠÙü¢×®øÖâ~€*¿³˜˜5W7ar`Uí®úùEç”^)DÙÕ ªÞÜhÔf4ܾÝýÖ:ÿ/´ïKo<žìœ9óø;þôOùÑ òNždu1ÀßC /]}ÙÑ9’Çi~;Ëбèj& ¥1|?9»³sxéÖ[[?völú‚Óg¦¿‹i"sðMÅ”/®Èë]Çqì…Ÿ-ß ´^¥›ŽZoi}¾Eß»hTæ;yëAž#yê„/Ó4C¿¿½ñá>™ß‡Ì.¹\±(§y€`:E#ŠÐü¶ïgm@¶I ‘e>ùþôÌææ‘ÕÏÜÚýççÎN¯;sf`úý©°«mriµ­zÎ>?µÊ¾VOõLp´)ϰ)ø÷jôO% ÷r‹{/ç×1(À/\«ôÍ´ÌÄBxDd0™ å7sëß¶ÓïøÅDsAà\jgÏÀƒ‰•Y´Ášþ&lÎß‚µ~–EžïO·Ï»|íÓŸnÿËs›ÉõgNï˜~$Ò”fK¢DLzжg?<í×75 {¿Rʺ•‰Êó|9 íM"{žoÂЗÃáø÷ßÿþÇÿ'fž^¬¨¿¾-²eÍ—$ÁàÇ1ÂF!,Ø XAµ†”Zë†ñýøÑÇ{Þ%ŸþtûmÛÛÓëÏœé›á0ijoŸ^õ÷‹îŠZž]'P†}k–®ûûzë¶¿:dîXqsHÁž'M9 ?ö¥/ùIfž^l¿_ÞJ@e­wWåL¾ÌÀ² !|σ„-Ð%J…ìyñðžû¯»ü¶ÿýÜöö䆳gf8œ ›â‰|}Ýrïnÿ^½è΂á'yýio‹}}ñZÙÜ»Gzèh^@ä­]’¥ìûB‡“?¿ûî3ÿó_ýoolw±ý~yÛ+p=·{Ó)<"È0ù>8Ë •BêyH=&Ëd ÿ¹ÏèõñX¿äÌ™¡ãxן_Ke+`Ò C~t&U+pñÀ¯¦{e®ß¡v—R‚Hj!¤ð}ˆÁ`ôŸî½wë­7ßÌ›Ï6ð™ÌMUY‚ Ú¢&I`ï#Míz΀Òz¢|c¢GëÁƒËŒÁ?ÑZB)£–ÅêvÙt”´¯Rî~nT}¶øåà³È6ªé]‘‘ åyÒ#2è÷§úÚ×¶æÖ[yçÙ>ó\ªç´¿ìÜswœpÃ4V¨ím˜•üøÓòdþb£ýs{›t­˜Ù+V׬wï–˯å¥×J?”Χ`,Êíbm¢*ðÖ¬—;ê‘>Á.êàé ð¼4ÍÌt:yïïþîè3gÏVðÅPNûê{yTLm×Ì'>ù†7pBDÞ›ßþLù¿†²—¦ÆäwɨÍÊ-æÜ-š­SÞž©ìÛ×Í|yH™}GúXß/´žCAqœ™LFïøÐ‡â߀›n"ïæ›ŸàU(®ØnuGXl{O¹¥6]ŠóÃ?L¯m6ï ï;l…Î(cŒ˜ê‹3T›0öWê±@BTÎ-"ý½4&ïæõ˜I’ý—ápçðüÀV÷ž ©ÞŽHiÆê" ÷ ¹”̪¼»ãe¾2Èáf3<òGÄ«@)£´fXÖYºù˜fßùÍ^êžÇëm[6¨[DøÈH)…ï Ê2“eYöÓéðÿü½ßãÏVëŸ+àßt9øém–ó¶îáMo¢ƒŽ÷?zžüÑ Gm›fÃÌÓ"ÊvïEžÒeîy|¾g¯ÐzWsˆ‰ÈH)É÷…È2ƒ,ÓŸNÓäó7é}õ«œ–-Þ¾èyÜ.Øôðº5ø¡¢oiµ¼·âÍž‡KÙ½ÚÆ ' À3µ´ðX5èsÕ±Äyž/|_ä4¶þl–%ÿáܹìOÿâ/øðÜÓúÊ(\èßì–‘w‚°¾N×µZâ¿!’?"%Í×ǃ10Æ0ÂPFñéüæ:ÏÍÁ®MÕf»D ± !¥gÓ?­Ù(eîISõþGI>zóͼ o}+ù;;0{õñ=â",a·õu’×_v&s}®h4Ä?"â,%}«t ˜¸ 6¦@Ý6Ð<•J•ê Õã€%„ Î3_‚„ç ²+tAgo)Å·§©þó³g³¿¼å|€ÿ¢1B?ðÊ~=#Ý)bþï‹*(D¨ªf³>¯C‡ ¿» <ð¦T»å׿/ó}ñRÒ+|ß\F„K¤t½³–î‚LfpY ÊëòT‡•Û¨"²ÏÝ>cÈdL}o–™¿ÞÞ6}Ë-¸À@°²‚loÃݾ˜ÛÔŽUïiùÆ–z=h4Ä•­žçûèIÉ!è r•m€2fí‘xccLpb ³Ìl‡t_ãq­ÍÖÖ6ï¾} ¯ÝF†ðò¹f:…Qó\Þ¢öág"eP¥=+í)u>ûÏ·ø(F‚’”/×ê3Æó ¢BJHÏ' Ôh4Óã>ëÀø««^£Õ=ßç–ÖPR“R‡BÀÏ29JSo ”ΔÒÙtJÙ7¾¡’|0á~[«Ïž$0I2×uðT¨É'³uXdöËÖ ,î7O¤çkîà^AåkzÊ’ @T€ºö;ðëÚ_É¿òç•cíB† x €R`­ÁÓ)X©™P”Úƒgƒ\þ.@­dÚX$×lN»—A÷<°ZÌâóS|¾(N(¿¶üº;([€V’ó(O§¯æÉ™?T͈Â%”]€ Y€z-‹=äyÅs)Að`õÅ‚7».¢{Ô¬Ô¸OÖcÄOð÷^îà‰2€EÁá"7¢êÒóìòA?±ڄ·§ÀùÏ}`ñ׃¿²”ƒÀEǺ@Ô…c¯zÅ^KÞ,è-{Ê‚¿—é/[›§júë&¿z=T¨‚ûB>Á Ø¾`nµê§öC¨ ×Äì²ô¸È:S„—§ë¥ì§RÐz:Û"@÷2ç¦ôšy’]ïñü‚¥‚Nêƒäþ®¯·V“gô£¨^tß»½h¯x’ã{müÎ)Ÿ·(Š/Ÿcö8§.,‹¢‹Býÿä åÅR ýIEND®B`‚Slic3r-1.3.0/var/Slic3r_192px.png000066400000000000000000001026161327442435500162710ustar00rootroot00000000000000‰PNG  IHDRÀÀRÜlgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs  šœ€IDATxÚí½i¸lIU&ü®ØcfžáÎ÷EME5óP3B¶`«ˆ`Å h+¶¶Ã×íˆÝ¶ %( SƒÈ'ÐÒÒ¨(~*ƒ´ÌRXP5Ýùž“™{ŒX߈;ϹU·Æs ‰ç9'wîÜó^ñƻ޵‚ðr‡•W¼h[€رcíØq&Î<ó~|ÑEïÝä¾gœÑãûöíL²,禙iæ¤Sªè®½ö þïÿ…¹ürÔº›:Î{ßû |ñ‹¤é´B]ç$VW×¼f«ŸÎö(tÛñ——¼øÃ?¼ùíþp,?ô¡Å½²¬Ü½s粬X2¦[xDDéh´ãœ$ÉÏIÓ|¢Tª˜M¨F)®Ú¶™5MU%‰ªêúÄA­ÛÃDêÚõõƒ‡û¾Ò³Ùúu_ý*®ý›¿Á€þæ®å§~ xík·úÉmMùN¸Ê³Ÿ ¼÷½›ÿö”§`ÏùçÏÙ±ãŒ3½yyϽF£÷ɲü>@2NÓb¢”J(f€P*‘³AxM»eû›1=c¸íû¶ »®9Úuók›fvùlvèó]7¿¦®çǯ¼rþµ?û3ܸÙ5þüϧøò—{|èC[ý$ïÜò p+ËK_:†1sL&Kôº×­s i² £ŸýÙ³·gÏÙO1ÆìÏóÉùy>>7MG;””J ”˜oø´ÅþN¤ `Œ­ ò;30†A·¯ÝÏæZëÎ3¯ëcÿR×'¾\UÓ€cˆz‰ÿôŸFT×80Æ/ÿò|«ó^¾SnAyÕ«€ßû½Í{Ô£°ãÁ¦s÷í»Ï£'“]Y]Ýÿä²\^Èá}v­¹5pf30Ö$I8IrR*H>­¥P*ÝÅÇÛ%ÌlȘZkÓCëÞU é5챌Ñкç¦YûF×Õ×ÌçÇþùàÁËÿük_«¿ðÑnì^õª ÷¸G‡Ÿú©­~úwLùN8…òÒ—««§áþÏëëñ¬^xa~ÿîóÄ;NR’¤gÅäîiZ…/Úˆ¡2lKN¤$%IÆJeH’”’$ç$I€bûj q\KÀn=l0!4ü¶`{>f†Ö=÷} ­[ô}ËÌD¤äգѶóCu}âËÇŽ]ó±cÇ®ù»¯½û—~‡â{}å+íçïÿþV¿Û·|§ÜLyÉKRd™¦7¾ÑšXž£xÕ«v?p×®³ž:™ì|ÒÒÒÎ¥éx9I2MB oØMJ%œ¦²¬ $)8I2(•1W9ˆM³5bx£‡[FÏLl{‚x=ˆHEƒüzf°mý;bî¹ëÒºôB¶’Ô'ÖÖ}æÄ‰k?rõÕWÿ¯w¼ÿ*ÏâÕ¯ÞMÓé~Ó›¶ú­Ü~å;`“ò›¿ ÌfÁ¯ÿúß ÖÿôOïzòÝïþ /-í|lQLØ*yƒw0ǵÀLI’"MK”å2Ò´€Â`€õ~¸ÄƒsË#Ÿl›ø7TÛß vLØ1BÇ}ß ëjÒº‹ŽMèûš§ÓCŸ[[»îÇ]ùWïÿÙoDÿÇœðÆ7nõÛºmå; */x0çxãÛÁúg>÷|ðƒú²½{ÏzaY®î"R [cgŠ +¥$9åù„³¬@’d®Eg\‘–QË=„:`g´ÒD¶·'b0#êIxpLÈÎàÁ¾r:²…™ÆhÒºá¶C뎉”²•¤EÓÌ=zÍÿ{Ýu_zïßÈŸàÐ+_™@kK.Ùê·wëÊw*@T^úR…7¿Ùøï¯~õž øw/\ZÚõÔÑhÇ9Y–ƒYÃãa†1š™ ’$£<sž‘$¹ƒ¶'ÆÍ‘QÚΘ­±*%Ë‚õÅ  Ì,¶ øÊ#i³JC ø¼íäà“A×ÕhÛ ÆôvÀáèØº^?~üøõ¹êªÏýá;ÞÁŸžÏQÀ‹_ üÑmõÛ»uåß|xùËS<á ¯À³žõz¿îE/Â}Î?ÿÑ/]]=ðÃe¹²?I”ÇôÒ¢£Ál¦ŠbY6†epà¶•£˜²YâßÂ÷xÝÄþ—ìr Ÿ6–á0Âö(Ýà×pŒ“‚@w躊û¾&€ T fÆlvô[kk7üÅ•Wþó½ùÍøG9ËG>ò øÈG^ƒ?øƒ­~«§^þÍV€¼8qøàúïùìÄ#pÑÞ½ç¼t2ÙyÏ4MÁ¬1ÚoÜa"…¢X¦¢˜°¥'ÙÁ•ÍZâÐâÆƒZÛroÈ¡Ž]&vc…(eÐÕ ™¢× sÜ{ÐBO¥Ä·A}ß mg TJÆÌfG¯¸îº/\òéO_Ù_þ%®“çxñÅÀú:ðþ÷oõ[¾ùòo®üâ/¿ñÀþ(ðŽw°hrò_ø…{ëùe¹ä,@Ã< »Ó÷=”Rw¢(&,‡c`n*g‰YöÌL`vâ«ä Ëñq‡ÐŠ<„quÄ,1ådÌ„!Ü‘eÚpÌá½g¬ß`†¾o™ˆÈ*8u½6=|øÊK¿ô¥/¾þ½ïÅ—å¼?ú£Àh¼ùÍ[ýö7/ÿf*À‹^ìÛw~ó7¯ò÷þK¿tî‹O;í>ÿy2Ù}^’¤`îs>‘kùÙêm:J’œ'“=HÓœ˜µgQ¤¥.ß¿ke9ÔÚõaømÁlÒº‡Þ#Ô Ô!b†‡IˆZ}a~† R¼o€U'cŠà{3åz»¾ïêº –ùJ TJZk;vݧ¯¾ú³¯{ýëgﻉŸø‰ ªjv«{‚˜Ê¬D©[w¬Åòo¦üØ%xÓ›l‹ý¼çá^zÐwýÚΧ?+Ï'°b2íXùcgèy>¡Éd'%pãöĬN ;‡Æ'pdp‹Q¥BTyb£ŒÙ!ÁýÑ ›a} âßngœ½D‰` û1ƒ½6ÙF‘1=7Í ÆôŽHÈö'Ö®¿þ«oùÊW®xã>`iÏ>ðö·ŸüýÓÐØãßå·Åßã”n¡E[W€—¿PªÄÞPûu¯~õ8óÌýÒŽ§=D©DÔ”ëkÍŽÀ›ñxŠbÉ1&‹Žªö áŠ,Ûõµb1"ˆS̱M^€Eþˆ×,@•j-B›“3D´éï¾ßbZØ^9’‚1Öwв“yR)ú¾ÁÑ£×üÕ•W~ê7.¹„ÿ*¼“M£ñÖ·Úïbø‹-¼TÙ&Æc™x}ÜØÞøÔ{ˆÛ©#Ùž…hú«¿úà_¼×½óŽ;ïþlLǶõ·¢2gø¬uÏD„Éd7Å2;ÊÓÓÃqÿ5˜ˆÙÃ8Ÿ—loØv˚ŇàþÀÜ»ãȘC;ÈÅþør^'€ãHëã)'{]ÆõJb¯´ÛJ®£õÆÍhÍá¼m££eÃÌšET€‹b‚,+œDCëÎ$Iн{ÏýîóÏÿî7¾üåêò.¹Dc4J‚ª`ì̃žÀ1o¾v’­ÖŒ û[)ù-°‘­6Ò;ª<ýéÀ‡?l—¿ïûpúÃvá¯8pÞ‹Êr­{1P0kŠŒŒÑœ¦Æã]”¦…g„éco«PŸ`° KpBŒÎZoqhŠc(øã¸ÞÂäzhá8CçW€I›Q¨]soX8G ëá!“RŠâ®«Ñu ;E+)•`6;zè[ßúüï}õ«×¾9ŽGXTrˆ³#çØ“tÃâ¶ó]]´ßÒ±Á·]xéKÑh'~÷wžòœó„'<ê÷öï?ï{“$sç1/sïeÉ{Ò4Çd²J¥Ë#7yÐf°^XI ÝöI`q‘ýh°ßÆíá÷Ö±EçY|VYˆ´ärM®®Ëõ¨è¼¢#Š·ß…%êû}_»ßHÔuóþÚk¿ô¶¿ýÛËåŸÀµpÅDgŸÍ¸½;4ytG›=Çßÿy>ÝTIï0KÜ¢2ïÁë^wð?€û<âyÝþýçý{¥ŒiÙDÀccL4-h4ÚÉÖÚS,làõõP³:2X\¼Úe!¶7p†ÌÍõ0a  ¶j‹˜ø¤鄉Zki9:ïf½Ðp{x9G½(w‰¡÷@4˜&·žœLø^H!IRrîûΩ´6&ËFéÝïþ€—<þñI9™|õWþ×ÿÂçžË|ô(ÔÎCXç+†5Bãâ?L·¨|[õßõ]Àßü]~á ñðûÞ÷ ¿·wï9ÁáU#FMÌÚ¿x { ŒF«”$©ÃüLJ%¬TK5Z]ý¢tÞ«ÊŒ ˆ×/BŽ“(E¯¡¤9l?Ü×Vò˯m3¯p ì1J áEǧ|Eµ½„œ— TBÌìb:Wá)N’”ŒÑ8xðëÿûŠ+>÷Ëoy >Åœ¥mÛ%yÅ E4øtW`á Mà CÀ¸õf¡78e6èÛ¢¸øb`ii¯ý:àÙÏÆð€'^²k×Y ´Ö~°ë*1¦CšT–ËPJ9½<£,—QË”$™;‹¦ºžb:=lß»w"1E/Š"¸CvŒa·‰©¸¥Š0.QÄE¯O(o€ö3Ù†Ð~´> #ì:-<_þ˜a\â5BA#Š4C$Lè!ˆõÈ b‰,Ãf¤'Ó³RЏ×S“„Ê—½üŸþ3Ð}.ÏUaŒÉˆÖøiíuD“nΑ±{H'ù}³’œê†Û¹<úÑ+ø½ß³ÆÿÃ?Œû>ìaO|ÓîÝg> `:hE„ã7öäT–+l…^v<™ìÂx¼“ˆ”k5 à,+Á¬©ëfî‡,üàh{q ObúA‰,†gü Ö¶š‹~9Ž5渵†çû7ƒa1¼a¿¯{tn}P­Æôp=Ò{ÄËøõ¶· Ëð=CØÞÁ3 +Z^ÞuöÒd|÷OüÍu—?æ1<%¢Œ3rl㜸Já@îž —ÄØ£Ÿˆ€_ù•S³o+ôìgãþ^øø7íÙsÎ#­ñwÎø™- lÖ§i޲´° hÝQQLxyùÀta3ú¾¥'®ectäa Ûø÷D9Y”+ z©<1ÎިwÙ&-Â^0úx9†Fr͆]#ì ™l£¢Ê,c" qL¹qQ"CZ·nûžf¥%©â¢((Ë2Ì¦ßøó»>ùߟþ4\`¼ÀühؼG=3z"´ò^¬5`™ Sõße!ÐË^$É?õSŸÀ=ïy!žô$œý‡<öõ»wŸõH@ǃ\¡:!Úç¹$ëö­4FžOœeIKëYÄ̰c=†Šö…3 ïÄŠ`“°CÞx_ØWZÚyVÉùbIX,À1P~9r¹ë—e@/»¬ýöaCLêáœxÑõh cU«=µ•@“ÍPáGÖ’•Rd¸@¤)I€Oða<å)Øû¸Ç=ìuû÷ßóû-D騾ÃÒòËØy;‘çKÞO”€¹àÙZâð\íö=Ö×op©H$iUàÿ-.Wh¥QËï}^îãïöð­5®áæŠÈ*¤†ðàXá6Æ"¥Ãó†Ö=æÿCªî3é5¤’„¡ƒ"OQ9§)SšÞø©Ç×_þ\923ch§­üÐÌâ”ÖöÓã·Yð·ÜâÖ¸ V€¼Àb»W¾Òºy÷¸ ~åÀóž¥T ­Û“ÀmŸ¦é)ËFHÓZk²Æ@XDc4šfÍA#×лJbèøñkÑ4ëH’ÔS¼µâü BÖ\àGÌé´°@v½ÝÞ‹ã¢õÞ8PG–Ý`Öm.Ћ\O±Èm„IáÒ˜,Óã{Ø#N2ËYŸ…¡$!Ø}4ÙJÂP ”¦„4%.Ë„²”¨#ŸzØÃÿþ—ˑ陱W)Û›¸Kí`[viá5à+Bï–ÔQ>±œâ–xƒïRàyÏvìXÁë^·øÏÿùn/Ú»÷œ—¥iоoY^¸ÕÝÄ2+iV*å,ÃíyV)N¦Ùì ãñNR*a€ÐusZ_¿«ê”JHkËØøˆr["$iKâe»M¬Ü´»›Á¾Õæ$ÇßE‡W`‡ì‰„) þ_Ä×aCødïl¨xu …»í!P€‘ €!¥œSL*!βe™Q’0ÒäàgþðüµÕÕº3{•‚rЦsçc×Z"tÌv xþ@¨·¦å—r—ažóàÐ!àã·ßê§öü‡óÎ{Ô;'“]»lÂ'ã^‚vN®!î˜Æã] X®Ÿˆ8IRgÆ¿lYN’ŒÒ4gfF×UdLÏÒ’-=;’‚3‹£1@ðòÆûF­ü¦ÇôhÍÍÙ!¡bŽ-:Ž´òN±dÂØ&h†tçÐqÆŽùÙxÌÌV̦¢1 H)p–Ò”)ÏOJNTšùÜcýÉÿZ–¨Áªœß  fFE„9€¹ûÞ8ö§w1<ºEN¯ÍÊ]¦¸ì²°üÔ§âôÓO¿ß/L&;wI>8–Ù`rQ]0¦'c4ÊrDŠ´î¥Ñø€` £ïô}MÌF¤¿Ñ6B,ÐvŽ ñTå&¯!̈=aqÃ,; 3#,MЫÁ10žæ\`Ÿ|K9¶üÑÛáP|ã`…¦è&$X¢ÄT €í­ ÈVD¥ò<åÑ(£,eʲ#ÿ|ÁŸúe‰ŒÝJA¹“ŠQkØJÐ2££'B/0a.øVB)w9ô3Ÿ–õ¨ü쎧=:È”!éI\wn—E²›e%'I†¾oYèQÇüH+ÇœDY³èràÎÐXŸX6,¿¸Ê![úmEí64Þ=&ú&=³8Ƀ$'ºiÜñý‘ý1I˜ èù˜Á½Ø}?f=‹lÛøçž³Ü‹f ¡gE+Õ#Ë çsY*Ê2ƒ¦%;ÙDæ˜!‘@³Ky"½ "a:¬ia@Žøs…ãx£ ÐZ·`O1Šæ&:&“À&‡‹Hä‚“(ÂL®‡„ÙqÇ €ºxáš=ŸŽä%Úñ1å:å™ý6ÊÑ€¨'¥ %I$é)Ë %ñhœQžCÊc_»à‚/½¾,u {R ÐÞTîO¨ÎÚ¿ ~E Ï …Û ÷ÇeÛV€W¼øß¹ð²—ùÃ++ûž`Šxwm€¹Åþš%X›YsšÆ&°"ưÇä0n öèuŽö•Ž84­Â›8#ZÂ,9ñšg/Øÿgw.TŽz“˜äqû’óxJ‚ˆ¯“#æ'>&G× ì9ÖÈx)Þ>~n–™2PʰRš“D#Ï™Ge“qNY”åñ¯=ô¡_~ãdÒvÌØ u•ÔÀÊZfÏñÏá*BdüÂø`@yŠÑŸ²:ä˶ôý™Ø³ç\<õ©8m÷îs^ž¦%´î]^Õ%ÓÿXv¦÷ŸJ%HÓ¾þàq6ìZ~JÃIÒ#I åsYÆ£Œ²˜LÖ¿þà_þæ²ì{fìt †sgø®õŸ!ÀqxIËøfvj±ãëö.Û²H9ë¬ûþèx¼ó¾’0J¨:qrYG—ôšvKàÍpFÆà¨²~кØ§<‘V5já Ú/H›£$Ú_¼ý!3œOJ 6–ØNíwcâßâë–ãÉ÷ᵄ{·ûYg€?a;í\ŽâD’h¤™Fž ìI9ωÊrýЇ>ôkoÊ2Ó8¶Gœ[=ìàv wÖ`Áž–­ÎGèNãƒ7Écº# _ʶª]”%èÍo?å)8°´´ëI’˜žcØ#x0¤up~1k$ÉcìK×?Y#2ÆÀ¬•" ~–Èóÿˆ~CÙÆñ£Ä›Â¤ÀÐ TsÑ ï_Ê9ÐE‹‚Ð}NØÞ##‡S¨4±¾ÈXù7 HJƒ$ÕÈRCy”¥âÉ$£¢T4¯}ãøÆ[³ÌôÌX‰àKãøü)æÌ˜:ÊsÎì¹~Áü./å Í ˜CX#pû²>‹e[U€É$Á%—h€?øŒçO&»à`…¬’>Ðø,ÍÖÃÛ3‘Bšæé}¢¬oì$Ððp(`]f+’”@ï° Ñp9Ž®rÚ÷úR¸|^ȸ&|Ý^ygð¢ÿ!¬Ð'u±2R`7vwh“1±ß@ªVàþ•ë˜&¥ ;ieóh¤0™ä”e ãñú•|à7Þ^}'Æï`O‡aË?°¾ î¬ôÑNö<àùÛOæp*e[U€K.±¬ÌÅãáûö÷ª,+Ð÷½3vfë+->Ü@Ï zdÙljÉókl‚öNëc[}DÐQ]1¼9ù5Kts…†è«p,CC†Æ ô –½²;±Í‡k ˜xa†.^Ã,ϸA¯q°ÇA§ëÉrƨTX^Î9MGëW>è!_K–rÍŒ ,|ÙÂŒÈ>3֬ůOd•žÎ#¬™7WwÞ™eÛøþË —röÙzîd²ãt'Îò^Z™pZÂÝàW"¾(M3ñPèæ9r–Á;wìñ<<ж—}8GR4€õù ‚#‰Îe"'9íùm¾œ7œK¶§è|9 dGXäÅõç¯'ÞFê¨ rb;²òeƒ$Ñ”¦š²¬Gžk* Cã±âÉRNYJjirâÊû?ðïÌRnÙ±³Ãðkõ…æ\w3§WÍ‘¸ „>:º5TâÆÝ¡eÛôÿý¿Û;~ñ‹qååON’ÌӘ⼒™Ó­1Kà‹†1=)¥¼®&vûöà ØfÃZJ¥d¥È úDÖHÌÌÄRòò -DŸã‡¾²ÕÔâl2‰†8‰†9£æ¨BùãÀðXÛYìµùLÒDdضú†”2œ$²LSž“ƒ=¥)0ž¬]y¿û_ù®¢Ð­ÖXR !^wŽ`øk°ðgVâàÙ×ê÷î‰Dƒ“Ð3Ý\ÿM•-ëžüäÍ×ïÝ{æó|r¾ÀŠñºÈy5ìàW$Ê=ìT= ŒáHæ»(=É4GhÁ’X Ô¢£(†‹)&Žšuë”DC¸„…c²?Ôù]$Ê‘oC6ˆ¶7þ81²Ž-¶Ž­T#M{äy¢ÔKKÀòJÆEA˜,­]õÀ]ñ΢ЕÖ¹³ij¶FÀqÇgÆ Ó…A¯¶ nTZ}q~ÛC g>ø‰Ÿ¸>ö1ûýÁ½ìeÏôÝýh´úïÓ´€h~œ÷–ƒ£#­ŽöN1×’;¤½æÇeióz˜°dŒ0JäãZõBxù/Ic,ëeàoƒaE¶e—­À-kôäu8v?ç™?¾;¶Èš½VM‘ŸC˜BÏe—!wÍ2Hw,1Y1›F’0%iï`OOeÁ4ž(^ZʨȡƓµ«ïw¿«Þ›¥è´ÆÄYMï<¹Sr€'àZÌ/N®.¯§`~¢¡“+ž!æÎ,wz(Ëxýë¿xêS‘¼ï}ŸN_õªç<ÿù8o2Ùõ—­¤–&Çý;Іh{€(aé1¤MÅ@ d iœœaÙá¯0/hi"bÜGöµÇ Œ?¦oË£e‡×9Æo¾}|œá²\[ˆÌdT£»!Ö?¸ša¹,,…=†“„‘¦š³Ls–kóxL¼4É(Ë£ÑúÕ÷¹ÏUï/ Ý‹ñ“BG„ Œ)ì`w À3ÖÝàwSÌ^Ü6Èè˘ïÆg³r§Ž~臀w¾ó8àéOGñ;¿ó™äž÷|hûô§“€}ûö>¾,—ÏØb5<1Ñn€"¿¬ãFA)rαÐ˲×áÀ'†*öáÛ¨1¥2¿}¬½‰xz_‚C ˆT°è³ñÁ/.á;E÷ÖÅE Z$‘ˆ˜'Ž&:vˆÚ’(8¥DYfÛÓ!Ï5ŠÂ ,&“ Y”£é·î}ï+ß—g\kY?'`5b¬p¬êŒ=¼þ™Ý‘Úž[Zî” ð?ìØ±„·½m xìc1~Ík>>¾ç=:#¢^®euõôLJÁ¯LNrûØïÚùÉô¬TDQNã'Xp õ3Æôäæ·8¡‚~îøp4«8T´ œe.Ù$±‘ñ‹„Ùíë©V‘Bûí«8#¢½b'šlï!“Ý‘„12Pʸè- {²Ì–i* ƒÑˆxºçxâ­ÅÛíÞ½ÿY6:€L6çiµÃ²°öÓæðgH*÷¨=t gȲÄðÆfh‘$¹ÛÖÀö Ãi€)»˜ r•e¡uc× @T– ÐÇ~ R`‡†Ž3Dç‰ï/f¥0€D$έ„¡È:·ÒTt==ÊÒ , “¥Ôžrý†óλæÏòÌÔZ£„KS¢ÖÙ¶öÇ™qÀq"/r«‰¼¢SËeÅz¹‡íbøRî° ðä'gœQâ-o±óE=úÑXúÿãOw>ðOÑaû@¼÷4[ZÚý”4Mòàé• BVgi½j|š¾ˆ•À$ô6@£Í&•°´Ö=ˆÙI³½œQË 8<“IÞHI¼µÆe†häÎã·ŒDŸïà“g„ÜÙ6§ˆ‰’Ê)í«°=ŽZd{I¢)Ë4²¬G–õT–e©xà]ï²ÆÿèG#}ÍkÞž^xá÷ψhf_ Æ÷ÿÈo¿{÷™ÉóÑ݃ãÇQ7Ãë¬ÒZ#I\¤¶ßˆaO8^줒An GD»c³Â%  TA7èuǰŸ1$Š]ùòò%³œÀûpafÅø:ãcÇÇ—Iµãßb§–KKˆ éÑHSv°§Gžkäy‡¢` {& ÒŒQkÏ=÷ºÿYØSÀ2=5€µo|ãÜGÝpÃÎGhýÕK/¸`öµñÇ´ÆK’4†n`ì^CÇdÐC¤Õ±bºà =EánÐqBõ}ãêc‡”g[Áéî¸n™"ÍOZÇ;‘ŸD¬…k“ivåÒ¢¹g]ñ!Â.)”Òä4=HSMyÞSQôÈóŽÊÒÐdOl–æÑxýƳϹþãYf:m0vu²S '®¼êî;tønßcÌÞ'NÜ÷™þ0 `=IÔºÖžíñ°Ñ`—ùöÍÜpG–;ä?úQûùÅ/2?îqÏ퉨à¬Vƒ_×¾óIËråI’KËÎq Aqî¬‘Ô…ØØ™äΡïg–ìqœÜ,:¾ŸgË;Åú¾acZÁ4g™Ý‡üu"ºÊa@=Eë!Á§^ô[Q|¿ˆœhCYìØ"ŸvŽ- ËðÎ2ƒ,ë9Ëz.òeix<&ÊsÆx´~ð¬3oøDœ\*Qh”ÂÚ7¯¼ûÃ<ã{û.C]wL´g_]_pñë_f=IŠyßZ~#r†ÛšªðÎ.wØe¾÷½¿åX’¤–ƒßÓÔV€½ûG£Õû9¾ZŸYÞBj>IáœdÆÃ8%b7Ød¯A~óü9äÚ6Â&»_×5кö°kq›¡³jx¬À\â0³ãÑç ÷±Ë¢Å×  vã'Eni¹eœŒ¹Gžw(Ë£Q‡ñÄ`i ˜,Š‚1™¬:ëìëþº,LÇÆNKD–ñ™~ã›g<êàÁÓŸÚ¶9æsæùœQ׌¢8ãÞÀ?û ¿€5u–¥’®ÜÞÝ6Åø7Wî° ðÌgþŒ_–YD†¡€=@žc/EÆî¡……>þ×çÿ )üØêkéjÁŽ Bœ',GQUnÙ³@Ô÷º®öšÇÞH"?=ª_`L€Ocâ}‡×C'|@#9¾Û$3[’ô”¦òtT=ʲ£ÑHÓhÌ<+Ês¦ÑhýðgüdžÁ°Õó ì™^}õ‡=rÚwa>×\UŒ¦Qh[Å}¯°¼|öÃÇãûýô3ž»õæ¯þ tôh¼ÜU`O\î°ËUÑ“P›<•ñx`ii÷™IRìŠ21DpÅË ½f)¥üzÏ "ÞÆÈÔ›Çøèöž]¶9‚ŒÑܶkÝŽ)§v_X–4pȱ,_'âë—Ý1€j²/ØЙmÔ–A’X=èj. ÍEÑ¡,5Æàr¤,ì¯9㌃_ä†Á3H)ÔJavõ5ûzäÈïêúu ®kPÓ]§¨ïõ=ȱ{÷y?xÆ{.<ñ‰0»w¯xÜW3~` åÐE± H’ü,7Û"bçN,÷]t| Ì:Æ$ÇÏÐ1´èDg”ü&0&@& dIý@¾¯,ê\`9¢k¦Áù΄uá~Df˜«}dÛp]yŸRVÏ“¦Âï[£oQ–-Æcñ„1žÊÒ`2Y?ræÿ¿<3½1(a+y  ºæ[.8|xߣš&A5×<Ÿ´mÂm«Ðu@×µiÝ¡(Ft晼òÅ/N\Âú5<ýéÀK^²U–tÛÊ–L”ý“? üÖo€äIO:íå“É® .œìÙPh7£=sbç¥ÊÈ 5…|:<`‡\¼+ࣴpÒe gÂúH±:†¬~ÈÊ$\ ß>¸"݃×ýÀ';tÛRÄÿ s€IJÙù¶làŠF’Ê2 {²¬§¢ÐT=ŠBSYjÉÞñxvøô»ùtšrï1?¡%ÂôºëwßïÈ‘ïÚ ³™áùœÐ4)u]J]—Q׌Qd½ÙMÅd©(ÆgîØñ­úêWqÃå—ŸûÜVXÒm/[R>õ)ûùìgãîgŸ}ÞÏäùd_ÈùãÜMÎ Î/í¼À>H†˜5'I†4Í}À;|ÐzœÙbmhi¼T“CÄ–°,pú'vH¹xÇ}'GrÉ1ÝÐ'rZ ç#ñžct‚“K‚ܬ‚“Ž­,Ól1¿¦,3\3~ã10+Ê3`<™¾Ûi‡?›¥l¤åW -æ7ܰ뾇컰ë T3æyÅT×)Ú6¡®KYë}O¤5ØUqêÑh´zzQ˜ñW¾røãó9Úç>xÆ3€O|b+,êÖ—-Em£Vˆh²¨k ¬H˜Ð˜Xê̸bK ¡âïñ„‰B€ü"‹c E×!Ç‚_–Oc4º®BÛÎÐ÷µgªÂïÃ{ Ë1+µYpº…=ŽÚô Åù6z«,5Š¢ÃhÔb4ê=ì™LeÁXZš=ýn‡þ)2~åÒ—Ô×_¿ç~‡ï¹ kÌgšgsƒª"nBÓÚ–Ñ÷™Rë²iV*Áþýç=ï™Ï\úax÷»/y+­éÖ•-­««ãÝDÙjdøÞÑÏä #¹bVDœb"Ç™8³Sï C†0#ì‹>Ñ`a’‰ÁuDÆhô}Cm;£¾¯ uK6µøbкqlW®.,Ç[ÂðØ@õ,‹ƒÖ{²Î­Àö”cæÑˆì™;°ÿÈÿM`cXã×D¨®¿qǽÙñÀ®W¨*æùÜ ®‰Ú–¨mu¡ïAZ²¹ø- zd&czäù˜Î8ãþ/ú¾ïÃ}àýï^ô¢­´¨[^¶´(¥VSØoNFÂÂ̈ÓJ# «w<Ù±3 ¬ñL‘ûÝÏot6ù¡h>/xz&D“ £‘ÇlÀØX¶ \îûm[qÛιëj7¯–ŸQ‘ܱY—Ýœ]¤,Ô1l±~ÏiÚKŽ.Šžm˯¹,{¶t§árÄ<ölÏôØþýGþY%LZcÌ ¥\ãWïuôÈŽô=¡ž®*CMCèZ…¦!n[æ¾´fÖšÙMFÁZç¹úÎw{ø}ï{îˉPÀ™g>x+Mê—-Hyä#ˬ¬ìÿ¡$ÉÓxN®a",&æ^â)°>Vñ©T‚,Ë)‚39¨¢ìlq67¦ðU$šÊm³qû8x&¬·c†X²Ä_>Å ŒÑdLûד8Ôd$,“I±Q]$¡èºü<™¡<ïQEÑ Ïbd¨,ã±Bž3MÆócû÷ýB’€Õö3þúƃ«÷:rdÇ}».A=gžÏù\¡®34mJumÐu Z+2F!JÚåïQî]dâišQQLοÇ=®»ê3Ÿé¾ð‰Oܰ•&u‹ËÞüò/‡å¥¥Ý»’$-\’+QR0d‘AcÁ ¶æö ŒýD˜–á$ö8Pô º¯ºôëƒÑ’w`¹AëÀé&ç…7Ëhõ}‹®›QÛΨmgèºi]s¥zr:¤©¦45”çynÈæèÑ(KMeiaÏhÔS9241'Dynh<žß³çè—Ýc;Q„æÐ¡ås]ùw}OhjÃóŠQU ¦èô=Qß3iÍÐÆ1’zRîQû{± †Æôf4Z]=pàÞÏèC±°)._úÒ;Û²n]ÙÒ  T¾bóô{Y3ì° v T@^±12)F€"ì'}MQ´›n=;ý‘@¯ØŸE~™C@ 9¾£5Y‚ßí5HÔ–=—u‘»¶Ì-S±Ö´ž²1SfžyÆD3VjŽ$©8ËÎóyÞ¸åYÞrQj.K¦,1æ'vï:þ•D´¥:•RVÖ|øðÒ¹G-ÿ»¾'T•áºfªkB]+´-qÛ‚-ßϬ5¸ï5Œfv“ˆÀíÞ ¦I ”ôާ=ö¡ýxÇ;‚ r»—-…@OxÂÞ‹F£Õ‡Úoþ ¸$Ë›°%V+Ñ£iZ…0‹ùîm²Úhb9)vñ!¸%Ž­ A,²« Žü䡎]ïgQwY—‰’NÃÃä24¸ìl½ VïÈÆí6Ȳ–ò¼EæéNÆxdgc/GÍÚÞ='þ%µq<%Z)´‡.ŸsìØò¹}Ÿ`>g®+F5W¨ªu­¨i´m‚¶eê:­ Áb›]4œ@‚ÓÊýeY‘äy±o4ºö—_ŽcÿüÏ[iY§^¶rœ0cYh'£0©CÌœØ.Øy^ÒbÛM÷~wlŸ{Gœb¢íšˆˆ)-°4²½ÝÆM(ç¡sÐ ÅÇ·;4B!PαeÈN/j\Њ!Ks*Kã`OO£‘¡ÑÈ ( FL£± `OsP9j×÷ìY»%3»`uËó³›vÔ ( R·œEÎ( BY’Ȳ¶Z]_m“¸Ã¦Ã#t¤ ×ÖŠÓ××&´&4æª&45qS“‡=nÐ [ }o5>}ß¹û!— )D§ÅIkí¤"ò,uþH.Ê n,0ʸ×sŸô¤ÏýùÅ¿u[{ƶ)•îv9}©7#GXÐÞÀå|Ša’8§˜ÙioØiWbø4œ =–LÃy9…½‰¡‘0BÂ&ù¾À/û¼Eƒ|9ŽèyÜܺ$Tg– ÛÃÈ2& } òÂPž[æ'Ï 9SQ…¢4%Êó®ZYžKŒß©LM¢Ð¯O‹ëëãZêÆpUMCÔ4Šš&!ÕEŽñA×´¶¬šÖ=i­Ý}…lÛAC¥}ð~ÌÎ  „$®ayyï…÷¾÷Òãä]ÿøo…yß|ÙjžÊE±øÁ'Í;(â~Ú$û±°.`eÉ‹F ü²s„íàØ$Éê,sµ,²=öl=j{L4£z`{”b¶t'aOn8/´ƒ@Ú1?Ìe .KEYJȲ®^Y®®M0€ÜkŒ"tÓY±:КжÌMÃÔ‰¶§%{ÖÙ%:°vÓ«õ}ÏZ§¡Ó-Eˆ½–I»Ö±ÖßaczÅhyÏž³ž ‡2®¹¦ØbSÛ¼lqЇB ;ä% f[â?ŽðËÀ§KpZÃÌÈ1œ ð)–# dñÎ/Ï™f!’KÎ;d–Â1ìlðA×Ãâè‚£:=Ôqøe)ß Š‚QŒQ ”e‚,ò¼­WWæßJffä°=š!B?û×§£ýbüumÐ6àFp£Ð¶„¦±ð§ï }$ä}ߣï{Ý’Ü“Fœ’Ò»[oçc“ç0Ôpy…®Óh-=â¹ÏÅyð¡5[kj')[Iƒ¢®×ö}‡\6Î¥3\1õçÕ­;2¦óÛã3)Ÿ4ø]m`n÷]”@ûÖ£Àö1láÀPb-,öd™!;Û¢ql!gð”v9Ï™ŠÂžgÈ2I:DL'j68ÔÄÈ˾ŸB6f {ÄÉåèNÊ2CY®‘g†²Œ)Ï­¶Ç p^(JRP–öÍòr}½ÅÝÈàb“•B?Ÿ»«ªØm ¡í˜ÛÖ²=]§È±<¨®¶%tÈ1>0†ÈËüt]MZ÷ š+ÏäL;Ø3㟃8ãô•·áôRÏ^c4šX]ÝûصëœmçÛÒ  5Ú¾o«¨•÷hƈóË­‹œ\ˆ a;¨ ²jc‚×ÿb— άØ¿M ‚þ.ÂËßFrv© áÒ²Óôo€=yngö…¢$!DÆÏÎøAc1±«ªóÝvÀ îX¯n§œ“K±5zÅm î{›Î¤ï™]`c˜Û¶FßkïÎsé$ýóŒa¡Ë4x!,¼ ÁýD1d²½…R)F£Õ@½æ5—óŽ[iqË–T€§?Ý~?ŽkÛ¶½6¤\LQ8,‚w‚Åhœ™`C{H¥²\w [†0*vÀÉ”V!/P|²Ý¿…@!¿0>ìv&@žR˜ (E®¦@ž÷Íòr}l$gæÄ&IÐWU¾c6/vk­ÐuÌmËhZ²y{œs«kºÎ«ï±Îøa £mkh‹û}&éúÈXÌ–ÅÉH6ꢆh¨çÿ‰R––v=æ9ÏÁ¹ð‡¸wò²%à‚ ìçŸþ)ŽuÝüjÁ‘¬ ó"ì±ËöáºL%QÎ¥@Ì=´î")²qÃI|C*ÂiØsè܉ç):W€Rò0‰®ßåâ:¹r˹VŸòŒ)ÏÁyî`OÖ×ËKõ µüÌ0JY㯪r3Ðw†¶§®SÔuD­c{ÚÖfrk[Ëö8¾Ÿ¬w–Ѷ5u]ãsÉó‰ï1@ ynfð £)¨œ4=~>qî&]y¾|îîÝ£ûËûßN0hK*À/ÿ2ðs?· mg_µz~8 OpZ-:ªì61«Ø¡à8#´m5`i°í ¤‹‡ Ó˜²—.‡œAÂD…©Z7ð2 Ÿ,î7œçÌY8i³‡@yn8Ë Šœ9Ï…ê´lÏÒ¤90ëö$ úºÎvTU±Û°¥:ÛÎRšmkaOÛ*î:…®%¶‘]„¾'î{⮳°Gkâ¶m`'þ ]Âýno„á‘AíâsXdçœn˳Cáäy¹4™œöyÿe¹V·yÙ²1Àúú@ÛN?×÷­GiàÛ¼l–…xQócL¾o¢‰)‚ÃÊvãUºeË„¸0EDÎ.Îq&ãŒPµÜTJ2‹ mҔɶøVÛ“¦ÿLîEn¨(€<¼YW/-Õ7Àöx{8I ë&ßQÕÅ.cmoÙž®µ\óî¶"_ZP×ºŽ 5“Ö­MSQ×õ°í\4mŸ–£è~E[åÇ9$³Òç! ܳÒPŠÈM-埿í] 1'"bdfEI’í_]Å*€·Êæ6µÃ-<7@]ã ÖõQY ñ=m쬕Àa0¦%Öºç¾oáàLíE’r‘%"Löõ‡q]·\CXk™¢XÞœ$ì&¤`ä9³‹æ²Î¯Âpžk9sQ`3ã‡?ì¼\}Ýä«Uï²-¿e{ÚŽÐtö´B×*n[qx)î:r:Å}o¸ªæèûž•Bi<¹6X¶ ˜YÐG‰ÆÉóE,rè2ÅLQ̶I‚!!’$[]^Îöo¡½mZ¶¬”¥ ýñãš¶­>/ávò{èNû#S€†–;”!sdkÛ a‚íØ!F>;óPÏ3¸ÏjˆÏøXØÃN¦Ì :ëø* ƒ2ŠR¡(d!Ï­‡×UÞÔžÇËùµBׂۖѶÄu“ qm“ ®lVÛê[øXŠT£®çÐZÃÂA‚Ÿ£c iZ¼ï˜e³ÛƬW`Š­j´b6O¶³8FYNö­®îÝvY³¶¬üöo‡å¾o>e1»ò ¥Ü$‘\™Èºñ‡¹zS4ÔíÓ¡ïÛ(ˆž=S!z ŸBYpô؃Úãk¸‰¹}T—8¼2ïØb乡4cÊ òœ(/iùÉÉ®wÃëÌãZ~{ºŽ¹im«¨éu-QgÅmQ0»"›Ç‡ µ¢®5M‹¦©]ôœ0-Χ„…h8ö÷.,Px<·°l¼.hæ'Ê¿ž³1ÆØZãûÈ;Îs¶Êò†e«åЀº^ûǶÏ {àƒë— Ë¢¦Ƚ5"ô}ÍQæhï¸P£µ —ž] À#Â’ÄʛӔÙÊš…íq°ÇA "g{ˆ‹‚(I¹Óö©¿"ôM“ï¨öX¯Ã÷ m£¸m¶©KÈ1? ÚܶÄ]GhšŽëºâ¦iaõ>äœ\‹Ð.0l5Ó!çÒPØ6@C÷áFí–¼/ËD%è©(–ïuÖY˜@ºe£ÏaÙààA|¹ï›/»¹ƒi3¦'¼/ÛÙ±, D!÷ ¿­1=ºn¾aŸØæz–#‘«°Œ¢ˆ®!Û#‘]ÊÂêzŠB!Ë€"ï«••êZ"fmr˜k¸¯ê|×¼*vi8alÖ'iú ylˆ#Üoóy…ù¼F×wì} 0û\†Ð%ünp F(†–!™€<›’ÒøãÆA2€¢(ïþÀâ40f[˜ÞÖVy¶Ÿÿ<ŽkÝ}Sp«úú@uŸ¼ˆ$ÓêÁrè¾@Q×5ä<  )=ât2ÁY&ÇܨóaÇüp$ofçðbÊsP^çEBYJ”e}µ¼\]gC7ƒ¶@W×ùŽº)v£œñ‹–'qYš“ö(t]BMÃT×=ªª¦ªª©ëz3Èi~dÞ4DÏʲ=‹pE2?ÇÎ,yn±CPœ’ÁáO ‘òlaêûE§`Œ)°ÅÉØË–Vi©/¿]]¯ÿ£KJBºvßA 䂆!2éó µmc˜¬y¨òLÃx?äÿ»à{â¨.†ÕøÎ FžƒËƈ4ë«•åFôü)Û9¹´Rèš&ßQ7Å.cºÖ8ØCh»Ä²=µâ¦V2U×5c>oy6«¸®[tack­Ð÷ä¤ÎÁƇé%ƒ×¹øâ øø9ÇpÈ:þüØD/ —‡RišKKX€,K¶…2tËû¡W¾Ò†ÊÍfíÇš¦ºRx̨uú[¼ÀŽÖS4·–ìc¡PÛVƒõÃý‡¹ˆãŸ óqÆï£¹l ‹ãú `TÊQ‚,S(òn¾ºR]£c,ÛC„^)tÖÉUìÒZ¡m˜këÐâ¶Shjå¹þ¦!T•ÆlÖ`6kPUÚ–½³«ë}È${” Aa–ù!s#Ï*ž²UîP/9›â}T’gÚu%ÖÆÅh÷x¼|,/o|A[^˜m¨Ü[Þ‚¯Ôõú?¸q\+u¯qîIEN ,P<…@&r¹€Z7Ôu­g–b‘›up™±Ý†8ÚÀvÌ u¬ØòTÄE™Rš(*òn¾ºZ}+±ñþ)àØ“`ü{Úè:¢®w’æ†ÐÖLUeh6k0Ÿ·dÓ›HöfEÎãKƸáº1>`_˜Éå À³1¢} ìPxž Qyn}öÇI ÔP¯êû8ù@äm#€ˆÒ,+öÀÒÒÞ­6=Û ¼á À+_iÛ¡®›ýy×5~0Í­µÒoæ}A Û K×uÛ˜BctÏ^êì lD—e{l®ÃEÉ( pY(.˔ҔçíluµºJY%BîfMï­ñ»æU¹Çh1~¦¦ê˜W†ç³žçó³yÇóyçüʱ=€sv±ãÖÙ8©³°·'Ë¡w_,Ç©ã]ù‡Ë’éZžy€OÆ;%µfvÀ½ß3#IRŒF+à OxéÉõ.wbÙò Àas`6ãO´íî³pQ\c…ñ8E–+”e7Ûµ«ú¦R0Žçg4úy•ï^Ÿå{ú.WgùÜð¬Ò˜Ï4ª¹A]1BþÎ…œCL¦,…ÖÖÁ¥µ°Wäõ;Ò.Iw ùdŸ¹ÚÞ}T7ÄÙI"¿/NY3B’Ý £ß¤AK¦ùÝ$O~òOoµÙØ&@Êÿ1¾Õ¶³OÓÇ¢À³@Âð„iLc$*»ìÍv9äü±pF‘›ØÎwñÁIË›­ÎÇ2;Vç“çLeÁ°9{@e™ð¸L)ËˆŠ¢›íÚ5ÿ¦R»––V±1¼³b·îØ%­2°Q5µ¢¶QŽíQ.‡´BäÍNú ÔN6¬ž¹’{§^x>‹i‡ŽB1!íyœ:†IFqt^»}×Åa±|=Öh1”R+ØB ÚbÙào Ëm[½³mgL¤Tƒ:ûG³°ÌØ.†<4’í ˆ´î¸ëjLÀ Û-×ÏQÆf¶Q]¥A1bRÊ2…¢è¦»wUW$ÖÚRzí¼Ê÷Ífùž¾ `o%[›ÍÛãffä¦P¡^ÞܶöH0»ìBÄV…è6×@ø Ûìýìk2'Š ã2Éq0€”™ YHÖu±|}#µ‹Æèël›)Û¢!sØ 7à/Ûvþ×Z÷N!L !MpXÇX`uBc'̈8Á¢É-Ð÷ ú¾v°'N[ ÎhÄ F#24O&ãyA(GÝtßÞù×ÓÔ§çãïgó|ÿt½ØÝ¶ MÍ\×@Uƒ«Š 3´Ô•B5W˜Ïª*h|¬È\tÃfv°‡¦I:Ê8ç‘|·e¨‘ò}ÇZY'ŸC¶'ÞNØ&9¶Â“ã›z1ý± Z÷DÐv«Ë¶©RþôO1«ëÙ{¬aF¼gœ}3È 7¬·xxAæ§f·ÁôžÍ i]C높D‘¶ ´=yÎT–Œ²Ù¿„Ç£ŒòLѨèf{÷Ì¿ž$>u Õ9›çû¦Óbw¯ ]klÞžnr EÍÝIv ‚Íß#°‡¨ëÈÁvšqÒ-NÆ!/è—ÞˆËȱ?:¥] ³p“‡C@px9VÌç¶µsŠ…LÚÀF6)L®—$Éð Ø-/Û¦¼á ¡¨kþ«¶­®«3^o"ãGX}Zx*J¦û„c,OgÛ©™¹á,£ˆíq Oi¸( Êx4Ny<Î(ËÊQ?Û»w~yšã’V‘›“«›ÎòýÓi¹W÷ mk¸’9¹BS)®+b×Ú;{l«vé ]0;\öæA?Ç»I+¢‡I:âŒÖ®‡ôÅB£üuSèâëÑÄ’ãËäò^kg¯'¾N@ȉ¤<í´ïŒ6-Ư|åˆÞúV\QUë—uïxsqÃ"ý€°?.Í9lØÇW#‚ËÜLN˜Uƒ¨FžE”%;Èà ãI‚¥¥eIûÙþ}³¯f™é±é ‡·_[+N[[+÷u­n6ªŠ¸ªU¥ü_]SyD÷C> Ý:»à ¤¤¤“Ú.) )n °½>H‚‚ãŠ<;4t|Ù㘄è<Ö¡¦5£m‡p+\S\·¢#2 T’.-}§lZ.¹`®McÞÒ4S4 Ù<”wý6ù®?ŒÄ¤Ô ¹¬ÍPÊ÷eH©IÒRY2F@Y2%ÑhœðdœQžÊ~¶ïì_ÒÄcì<¼Dv6ÆõõâÀúz¹¯ïê†y^3êT7DMMd½¼öÔö„ü> gød {m•‚ÙvpBqtïÁ©OüaïÙ€(Ná(¬ÚÐë>dІËÌìá-Ý4ð Òp{ÞA£ã€(ÉËrûè¶U€7¼Á¾Å·¼W¶mõæ¶­ag%”Ö;Dxt»ðÞòpÈøI]„’”à$!NS=ÄE¤iÇiÚrQŒídt<gTä £RÏöíŸÿK’­ f"tJ¡9~¢8íø‰ò@×êÚÎÀ^W@S)4•âÐ [è£óCn®.Àîfma­…ù!/oæPäâC'—<?_&~)ᆎ3‰äæ\r‡-ÅË\×Öá„ç.¢õ ]fÝN§Ø6“¨n» ?÷s#À‰úÍM3û:³–,ÇÝmì³/s±ƒïæeåúÉ1>pQZä a<J;;#Æ“ËËÊRa4îgL¿œeºeøì =Í‘£åÝŽÝ­ëæólΘωçs…yE˜Ïþc{(rv¦§ëŒìÒ:f°BŠÆP‚ÃÊÍ6¿ÀüŽó{]”øõ:²_Ìð õQD’rq3íP8÷‘Š~aƒ¾o¾þÍobºq¿­)Û²¬¯[ôÎwâÚõõù;æóq/*LN,{”©èyˆ·'_I í ¢ÙL ÑØÂžÑˆ(ˈʲŸíß?ûrš™Îh”n¨Ñ“B}ôxyúÚZyºÑÒòkÔ¨©‰ÚF‘ _TT׊ªÊB «ü´UHqr‰$Û2Z¢óñóGÒåáåXïÌbŽáÍPCµ9«#Ûß>À¡°}Û2ú”$›Á¤Ì„g& `F W\ñÉ­63Û´¼ñÀ+_i—4¸¶¶þùªbt‘0;vZ= uAäaO˜ä‚Ø|‰³ŒØ z¹,Á£0O–2ž,”ç)Fe?;p`öå,Õ½Ñ9ƒéI¡=zttúÚñò Ý+T•áye¨ªu¥PWŠçsŵôrU‘ vaÏöØ>à®chmaÀ<+‘iIáf‘ÀK¸)‚7þ¹ýó ybÇÖP;4BâXdÿ »Îël”šfÉî«à j|LDlž€¯}íã[mf¶i€cÇ€‹.RêÃÆUUÿFU͹m U®k;X ÁÞR(‚E2wUX¶ÐúÛŒFÀhD˜L&Ë9-/• ––Ìôn§Ï¿gºa wíX >|x|Ʊcå™]§0« Oçóñ|¦0›)Lg ³a6#Ì-ä´=ÊézBÖf+m ÇòÄy‹˵˜«gèo:´‚X½ý}ˆ8†“„,–EXdç¶×c³Cjå×r,û?\“žÀW¾òémá Û¶àÝïÚÖšøe—áým;û€Íð  µñÐNû©¨ëŒ0@Žá Œ™Ýæ´ISP–õö‚ÆcEãIÆK“y‘Ш4ÓÓN›}!ÏtkìlŒ£S„æÈÑÑ™k'Š»kM˜×†ç3ƒjªæDUEä0~ÄöXÇV€=Dn‚:rÎ-1‘MÒrohëâ ™dÜi!!—~Q“³‡pÒeF}TUÐVa«ØçL@¦pÍ–ÄкCÓÌOÀtzýV›€m$JÚ¬¼ç=a¹®Ûצéì{Ëre¤±‹e­ItéL‡ím·¯”»/Ù +€<'* pž;Ì?R<™¤XZ*¨(ŒK3;ýî³Ï¹îû#P„–ýá#ã³Oœ(Ïì{ËóWS]­¶G±Ü’ ZW‚ó]Î"ëÔò^]fVbð"7&"ŸÀ¯wÆÏnöË8¡‘ ±ô/¿°>Ž.æP¹äD!Û,Vœ«ï¦±ë“DŽ<)r& ³¸kö7ÌFw]}ÖÖnµyØÆ=€”ýQûyÙeøûù|ý7»®F¤¨%l^˺X“•km™›…Yœ\ÀdBXZJ°´œai¹D9J±´d¦gž5ý\Yè&’7tDhšœsìhyfÛ*Ìf†g3ƒù Œß®ªõ£A¤¢nXˆÈµø®E²Î#c,ÓbÓ÷Y’€ŠBÑhœñÒRAe™ÐÒX¯ŸyÆìŸòL×®åWDè“ÍáÃã³/Ïè´BUiž9Ø3w°ÇV:Dy{¬c«ïÉMNANÆ:6´ˆ¡ EPg™‚ñÔ±!Óµl#Œ™ë-"Q7‹ÓÈj{ª*Žª‹§”öÉ~Ã#ɽ6Ǽ…ša¸íz]Ï@ßkl‡²í+À¥—ïxãG~ôj6kÿK]Ϧ€¸2ƒcKR88»A/g8Ï,§)Øqÿ<e<”¦Æc^;óÌégó¼o=ìQè¬ñOÎ9v|tvת¹æùÜP5gÌçÀ|N\UŠÝÉuMn¢ ›¥ÙBÃ}/yu¬¶ÇÞ÷k9† ŒŠÈÁ‰>'ÖíÈ zýñ+æöeÏ’Åqq,Êñµ×µu Â;Úb©s4%NÐÙ›$"p¤„»fƒµµ#ÿô®wá+P×õ¶plû åÒKíÃý“?Á?ÍçÓ_oš D „ù‰bÂö8¼ï]Àx L&Œåe…;r¬î(1¥XYÑ'îqŸÊs]÷%lËÙ)…æà¡¥sݶ„ÙTótÝ`ºÎ ÁyxsK "ȳq.±:Cx³Ê ƒøC'™œ#¬²<1ä‰Ï-uI)«=šÍlšE™€$@zhƒbyy8fxq!"£Ñ÷í7àbôöèî:žÿ|+!¹öZüÎ|¾þÁ®ëH)EÊŽ#lRðòf;ý¨ÕöŒÇ -/g¼²ZP9ÊheEŸ¸ç¹kŸÊRÓjƒ&Ûò·‡/sähyV×sÛòc>U•¢ª"²"6Eu- û©Hm–f‘+‡ÈÛÚ–¢“3LW(00&H—~„\@q°¿,}Î0˜]X²¾gÌfpˆ ŒnÀA²aÄ™çÛ$Ö‹òlcôuò.ßjk²å.UÞþvþaàoÿÝ|®_U×k_´i÷”`v1½êX'WQˆ“+á•åŒWVK*G9V–ûãçž»öy®;c0A% ºD¡=txéGŽ–÷èZ`6Ó<›ªÜàÖêy„ñ¡cËAÄ!¹äÄùy¼ ™]0É‚+¤”hD©F®%vËä&þð#8Å\õ9D†ëšy6³)µ±à–Ä X€:’ÅãdI ˆRêûZÏçǯ–wùþÏV[“-w™ ]ùÎÀ³Ÿ úàqmUµ/˜Ï×23”"¶­>y¶§(ÄÁEXZRرšaÇΓI†;úãçŸüo‹\ׯXØ£€Ž€öÆWÎ;t¨¼GÓ5þ©Ál ¶N­E=OVwÓEÝ{<©†…ZÄÑ[´YT ŒMX˜y6‹q¶½Î¢TYXËôÌçv;¥â}‡ Q¬ }ÀP–볬ôÙ²@V’mŽw]såVÛÑb¹ËTÁ«—\´­m]Þÿ~|®ëêŸišlDqš‚óœ¬tyÓx¬he%ç•Õ’FãŒVWû£÷:ïøßd©é™1†ÃüDhZ¾×á#Ù9m缨栺&};C#9箳ÌIÈ8Í0Ƹ,ÛvZ)òÞˆ¾O´7¢™±X™…F1 G„É6‡÷‡=±M®¡ª¬ ["æä˜r eœ×Ë}à诜6 Êv)hÛêÊC‡¦Wnµ-–»L5#3ð¾÷'NØué¥x›1ó_mÛ¹èúá\\ŒñXñÊJÆ«+%FVVú#÷º×±¿)ìq‘\-š.ßëðáâÜ®SÖøgšª90w°Ç­Ûè­®³ÙmÀºe`ؤ;)CÄðë"Œ—øèªˆúŸa°yð7Éyí²ƒDQԘȤE/´fžÏÁmk4T‹LÎ ŸÈß‹DØÉúø»ëµnüÆ7pl«íh±lë ]º1¶{–ïi šL€o~)óH½ímøÕ$™¾Á˜eITÌ£ÓÒR‚;rìØ1Âx)ÅŽÝ¡{ßûðÇ‹\7Æ` Çóh¯»aõ>•÷¬kÂtjx}Mc}y:…×ôX=¹™ØÅ±eœ†'Df T±åàè2A1Ó"÷»ö´ýüñƒvhÑA„9¼lÙt×Ìf윃ò[€1U’ÄìŽ3çp xðûÆ,À ¾ï°¶vôs_ü"f@}Ýe[W‘ÑU ;‘$HÎ<É|^ox~m2™þ`+ÁdâZþÕ‚FcE++íÁ{ßûè_åkfLÌB„ö†Vî}øp~¶æóžg³³9Ó|N4Ÿ=“2£ëˆ´f&k„Æž;hãØã´4A'#F` û™ë½´cÀØÔaj‡ÜcÈ›cd£áìXµª˜ÇïY£Àâëß)qìC5å%X1\œÛv@Uõ<›jTÈfk¢…núQ¸ u؃]<æ–È* ˆR~{»Þkl …ÏÉ)Úœh?Ÿ—'HzB›±¤N"½@&̦=G¬G$-T Äê-"‰è‚£[\Oà¬ÚV«ëa¢—ã‹ÊÄIEÌÄV 2Æê¡œÈN`ޝ5"Žp;˸C)ÅÛÓÂ6Ý‹\[´=DUµþµý×î Ð÷Óm¡ÿ‰Ë¶¨‹Xß’÷²¸–?AhùGîo`•«DX°“U£±2Ù…ZcBEvªÇþÊ«V/<|8?¿ï›Ž\ÛpÆypl…LÌvŠÙ^禎R{' Ì pÇÞ+yØÙ¢s ¼ LQ¼h‚ä™ÅŽ4Àæé±Ž¹!4’ÞU&ÿËãäIÓ¡ªÁ±KÉÉåXƒßH©„û¾Á|¾ö‰¿û;¬£p»•-­Òò Â¥eìÓO$l3.gÌ(á`3–¬HÀŒ0–ŒÞÏ€ýÕ×ì¸àð¡üü®#TUdziyÅ$ ª¢ü<’‡“‚ñS?Bw EëÃ@A —y)4˜%Å @{òë×K—¡”Í]× ËëgÆÒD>‚=ÎüC/74¤ˆÒôÛ³$Yò’lvk´™H©¶¶Ó鱿•}/½t+­mó²å=@¤r´úZ畇å耄)ÛÕK"Œ,¹¿e"ì€í–™±ÄŒ’)*IÐÐW]½ú°C‡òûXoÏóyy۰‡¸i¶QÔuv2 Gsr”Ê7óW }¿×Õc"¼-Z·ÆÅ,ŠPÍDóqGL’pAˆ“瘙PULMcá™GpTéüñÃrGl±»/åŽãƒÚ‰(À!¥T{bf¡‘ÕeITÿëñã'>¿Õ6vSeËX EçàáBhõSfä®ÕÃ_aX¸Â.;˜±ÊŒfŒ ‘9L  ý×oîzøõ×îWׄézÇkkÖ×­Cȳ=µ0=ì³1;šsƒT98‹†0$ê "&K •-cgíAØ—Øié1ûž1Ìç:-:Õµl¦ëÁ(àPì2?â¶'îü`M)&J¨ëZÌfÇ?ú¾÷áJxñ‹·ÊÒnºlI°8èjT Ü³Ì_¸¿%XÌ¿`Œ"ßêO³e‰ÈÅð6W|c×#ÞXÜ·ëuÝót½Ç|n(öèJž;õ\$™"jå(2&м¦´“~1Ô­8¼|šó¼Y Ø…v$fFÓ0šÆ¦NŒÙ˜ òXžB% L~ñ×ExÉø$†4ì¡‘è}Ü%xßÚ¶Z?qâÆÉ¶ÓéVXÚÍ—-©Bu.¨c¦G!°=€w‰-Æ_a‰áŒŸ­ñƒ‚ÁI‚9€öŠoîzô 7êÆlÖq5ï0¯ ª 2Ó:Ú6­Û¹m}Fd Ìl¸ëuì&‚6\Œ<Òã8æÄOTç¶—e©A¼†ˆúÜ4Œ¾gG3zL.Ž5|a‡äšå8Àð˜,Ê;ò²}H}’{”c†ë‘m„’íÉy­ ªjís_úÒôSð?¼þõ[ai7_îô Ð òîÁø3R‡ùsØÁnÉŒ%7Ð]|Ë¿lXØ“ƒX¦ €æk—ïþ®n(Ôu³i˳Yº6¨j œ[’“G8~ë¼±Œ‡u>m>ÙÄ0'ÑÀV"VËx'Wè1(‚7a Ã'»^z rì{'¡ì·Y‘Áv¬ ,’AT_Ìöu>òi¯[8¿õ`O¬”¢ºžáС«Þúÿˆ¯~õ¹tÝuWl;úSÊVbÆ'zð @ ögP%€±û[‚ký‰°×êƒQ,Þ‡•7ÔDh¿þõݽþúâAm誎××;ïªSå]­Ë£ö&0'’¢$Il%ƒ%²>ÂÓÑö"…¶›È8aè, ðÃùDÈFZÛkµ>ˆ˜YŠ—iá˜~9éâk‹!9¯—6»c*~ì:åÝ~|àΫ$ÿRÄü´Ö8~üú¾ýíÓ÷Àu×]Á—]vgYÙ-/wZˆaO„­í†g{27ð-ˆ0rƒ_}ˆ° `É0ÆŽíI$öLèùÚž'Üp}vAÛ2f³–çóŽæsãæÞ²N.—­£ôã V.鎋”|>¢å‰žÀÒxSÇ7@Ž@oŠsJœbŒ¾'瀳4,‰ŒnC>Ÿ•9ºæ@JÅÛ؃Øa½ÉŒ?vœÑ ‹SJA)E€g‡àÆ4?zðà5ÿ³ëlìïv6~àNbäõ˜á4R±ñ§ÌÈ×?Š9~¶ƒÝUÀrý†1f;&È`™"£jõ¿´÷ñߺ&¿ ®µµ–×ÖZ¬¯['×|´îf\ôY“-×/˜cO83ÛàöP‚n'ÖØÄŒJ¬¥2-C§–1âL§Àtj§D• -"ÿÁซš¢ÀJ!º®¡>gèL“ID¤‰·•Ö>°>‹Ž1ÿü9ˆú^c:=ö‘w¿Ûü5üØMî óºMåïâ@`ÀúHH`[¡;ǰØì¼ËÌþ{ÁvRж•5J¡!¢ú‹_Þó¤ë®Íªµmù§ÓÖ±=@Û­›fÔM2 fEâ M±_£"ª1Òù,:È‚ÆfÈÌD1iž¨iìÜÀ2yE¤–@p–EW°p®ØY&½É"²ïÁc7D—»~#‚6a[ëC !#äï—‰êz:=vìzßæ¯­m#ÝóIÊZè·Èø…ëOˆ<ÛS0ÛÀ’ë Äë[2[¦Ç+M’`P÷¥/í}òõ×eìz`:mx>k1›iÇë·6-Ù ÌäB=pˆG%ƒe‘÷:ìí!DÐülæx¼VŸ­¸Î²:6‰°Lá\Bck òçÀäk´¨ó û²K±Žo –)뉈ԂæѲ'K‹ïöõôÑtzüÿ¼ãÝ_6»÷ïÿþ`Á·±Üa`3ãG{„m¥3ü±£5—„éqÆ?2l[~g‰F%¨ª>ÿùýO»þúô‘]ÇX_¯y:mQU:ŠÚŠçÚ"Ϥ,²0CFÄË" ü6t ÅÅMX‡À…ßûžýµØÙUÂùÅÙ´Åe"ª)v\m„ïØ‡ -JŸe_ËxMOì ú Ñû„ßœ'Z^§«Q M§Çg7Þxåk´Ïþ„®ºj¶m™Ÿ¸Üîà$lOœ‡FÁ)‘Õô»í°•ã 3P2PÀÁ0:IЪþÂö}ÏUWÓ#u¯QÍ{^[ïPUšºÎÎdÒ÷6zËâ|›¢0¢$cºò0°õ‚µ#,fT"=ÿ‚ÈÝs°LNP“gYäAõµ ù?huü¬îºßþ>„aá"¨F!=ETÙ(? ®gÁ¸Ë¬§7°ID`¥RÖº§õõüì2|Žñ‡?|ÇííYn÷ °ÀöØçDÞ9$ÐGŒ¿€Õ÷ˆÑËàw γ ¶°GµŸÿü§]}5?®©{L§5Ïf-5â¾W‘[DZ³d’^€=µ1ð:ÑϬÕ3?AŸC¤TÌ®‡Z×IÀ:ûsçš\/h~àÏåœ?opxùgꙟ˜Õ‰¢ÄüõÛk 2æ·”’gb})D€¤™TN $׿aˆ‘šN>~üðˆ ÜUŒ¸+€è{"¶GœŠþRGwD~Ð;‚¥:—Lü€È H”B¥0TýOÿt·¸æóئ鱾^ñt½Æ¼ê¹mcr0§ÐZùè­Í'œàL:³à—·}Ž  ]8?§—œ+H Ø.LK,…0jÈm„1Áa¶ùöC ƒãÇúžˆó–c§—Ü`” IŒ‚R µmcÇ®ýÝK/Õÿ<ç9.»¬¹ý-õ*·Kˆa}8¾õ¯g|ت:s"/q(ÙµˆáD(’³^¨N5ÿìgïöW_Í­ë³YÃëë5ªº§¶ØÓ‚¹' Qꔜr]Á93$ˆ„»’gol 9 }*S˜:™´7l¿½R·†Çq=¡TÂôÚc쑬øâ6QŒÉdè8dÏevð¬Î)ŠhÐvË®7Æ`}ýðg®¹fúVxéKÏÃ|þõ;ߊoC¹Í@Z}û`ýj1zD°'¼¦_Œ_0ÿ6º«t#s¢8f # HúOú´g\{-¾»®{¬OkžM+ªªžëÐαesrfn@Ô‘R9+•ƒQ£¤Jz¡gûžV¤µac”˜×‰HX¥B$×"¤±†³@´© 7 {Ø;æd{ÉD! \<÷!³C è«C.‚Ld ‘oB$RL©”f³æÈ‘kícÃu/|á„Þüæ¯ß%¾q¹U &?™žMx~ïè‚¥9Åøc™Ã¶2Œ`{ Eà C„H«¿ýäç]{-×µ=Nœ¨x:­Ð4ö8Ã÷SŒbÔH’IâœÆæâöÅ^¿À™ Í ú ÖøÄö+Z÷‹ë ‡Ñ\±Ÿ òȶñïá¹Ø´¹,ÞN®m#ì Ø=ü.¬N€?Ò3ö' €­LB©u=ljßp饸0`¾wžÙÞ~å”*À+—cióài#dp`Fáþ±ãô…öÁ †d®òhg5Õ÷w§=çÊošÇ5ÆÚZÅ'ÖjTUO}4-ÁXŠ“æ'²žT¸[ƒH»nÝV»ìñýÀ±%ɬ(dY@ cLä݇ wDβ(ßÏÀ±3H‹ëv‰µI†¢ù‚Ž­¨’QpðÇz¡…ÁßÚ:¿„ù‘Ê ‘l•À†b6˜ÍŽ|öª«Ö^ñ¿‰§<åçï,›½] ÝÜ‹|þ½é·üÎð·9/o0à-aU„1@ÉV J®åŸIÿÉOÞý9W^Éÿ~^uX_¯x}½ÂlÚ¢m­#ÉFoÙ ÉEl` ×lÌj’¤’»’##ŒaŽ ë#*•?c‰g^V=df´ìMìÀ :Ÿ k ZtÀ¹ŠÆ¶Ähò°G¶ž_Y¶ÚÑù¥¬T›~>a¥RJ’Œ-ô96=räºg½ûÝú£ð„'ûöï}ïV›ó-/›ö¡û?»Ð=ƒãOBpr Ý)-–Û·"·‘ûþ?w-¾´üÔý×g¼àÊ+Íw7Mµ5 {æóMƒHËCµd”J¡Û:‚äw­{Ó»Ö.{ñnÿ$;›âg#ç“íb‡ÚÆçfŽÜÍZqþŸá»‘V9(Jåü1¬ #|ÑùÄßåÏ^«Šà޼Fmgý–v| ¨if8qâÆ_ãÿÑMðÎwn“Ù.nEÙP6ñàÆ|>G]éàÓµþÌ’¹eñò–Ô²,Ò‡Ä>ت#ñŸõ¼o~Ó|wÓjL×k^_¯PU=µ-£ë }'ÒccIÝIC{x®Õ³CÖz²ƒyË~„Š@UˆS,2z tgÈ$ÛG­:ž›ë5Lo¼ÑorÍÆÄ°Mõ¡¾‹Û¶'@ÝcÏ ¹9’$¥¶mpâÄ¡÷¿ýííoÀ³Ÿ Ôõ]×øM*ÀB‹ïY’ð‚áË÷šS`OìèÁR›J²úåºu ÀaHº¿ú볟Õ•æ{kçäZ_¯0Ÿ[mO¯‰–ÐE ¤¿‘—9‚Cèo Ønc¥ÎšÑ€s ¹T N' E€‹N% àÍÕ1ƒm‚CmãuÆ× S¸U¸ÀyaPÃøÅÏ™æäÍÊo˜¢;;¿ˆ¬ÔYRœ§¤uµµÃŸ?~|íçà×ýø¥_úüVÛïm.ƒ ­¿8²0€ 5ÎIo378#²4‹Uv–nà+Áì…kýGD(#¤œAjg/Îÿâ/ÎyÉÕW›§µÆÚ ‹ùëºG”ªvn`an6§Çc•˜±‰¡”M2ÑÅOÄK í zx̘q‘™ÀúPtÜÍáÌbq½—ßxÝãpÛEgWxr*‚e1¼ ìP€Bò)=€‚ºûæÑ£Ç.þÀðMøÊW¾´Õ¶{»_bãwÅi#ïÇ=çEŠS$Í{$wOîXŸ¶õ/ágDN×ÃИˆç@VìÿÜãEW]¥ŸÖ4=¦ÓŠ×Ö*ÔuOV^@BuFi …Kôt!ã°b<÷Ææá°9LB€Ü‡š°.±¦(<£!#s³å0.¡èøØø{Œ}dæçT{¨¨Ýqè¼)¢F#ØCâ ãP¡ˆf³µéñã‡~òÀç˜]”ÂvÚwý’Áè#J“¢ÖNžDAå˜å0¼§:)H›s„–?'BâÇ€/H`ÏPšþï{¼âš«ûÿXU³YÍÓYMu­…åa§æŒàD`?˜c½ HRå¾(5„1Ä6‡O²Í"dZÜþæ–ã}‡Ç!Ï8‰ïK®Ñ™åzy;°g¨¢Ï(ÚW‘Èž…’|žÎ)FV”€ˆ¨ªÖy:=ò3ïyåûÿã$|èC[m¶·_IYè»?Ðu­xæŒ_ô=’³³pcédpÌ:l ±R<&Ý?xöÏ\½þÞ¶í±¶>çù¬B]÷òóˆƒj˜™98¦„2*rO›Q¹‹ß¥,~?ÙºÅõ§²|Ó%fu†lÖpÿ k ò.û] }…±Ók¸³ IˆªªiwâÄ?}é¥x\tÑïxGu{Úß–—Š–=³Ón€ëÿ\«/°§ˆz‚4ÞÎío´Ìv¶8kü£îzΫ¯¿Î|oÛiL§5O×k´mOÖø'h Î el `ü›eZŽQ‚—"ˆ`Œ6¹ßÁz,À•!º½–}åÝ¢–Ágæ+‰¨—ûŠ8ÿèú½¡S0ôÁ&ö(×[(¥T×S?~è.» ¿_Êl"ç‘P…±ÊÊ€ecÑä ÜyH³9D ì'ƒ1·nY®^Ï#× ×˜ït º ¹¯P†ÁìÁà7ÓÿX'—Œ ¬/$¡º^ÇtzôW/»Ìü6<ó™À[ßúígü€5X¸"%6øÆá‹ƒ¼pŠÏˆ"æ¨‡Åø·ÃèÉÎÉuâmoËž·¶fžÕ÷ 'N̸ª*´mïŒ?qzƒ¬O<ÄÐ À€ðgc ÉÍÁ%)§cnI±çY+w6ÿ[ ul¯'÷:¼—Î,BaubÖGZz‹ó…–Ÿh>_3kkGþ=ïÁoÀóŸ_âío¯oï›ß6%†B6ûà,æw/F„"ñÓ•ÖݳBî¥hØ7hÜ Ù†ý ·ƒ­MÝÜðéöÿ¨hòˆ¦i©iz¶ i•—Gõ)b0bff(Žî+r…É&†°g1Ú+ úï¨/û ‹=.¢–’“'vr-Bšp»–"'МAç(ÏöÄÆ?›­a:=þïyÞÏ~ަùö5~N?èBËïÙ`þø#ìNꎥ"CcŒûÔÌè‰Ð˜¾æ58ïÊ+Ó7)5~D’$°SŒgS=e×›H¸ßbºB†´ãöe‡óŸÂýFcHÃsG@YÞÈöDϱŒS6¶àP ëIæìr ÜOŽæòì±æÇV ¥–H/¥2Æ ®×góùúO^vÞXØóþ÷oµyÞñEE­Ó€B#ŽZ(FhÍÎtΘfTÛ£0gÆÀ:€)€)¦nݬëPÀ/þ"¾°woÿ´étíCuÝ ÂªÑ`Ï^š´jŽÿ_èÎã)?}+ ‰Â ߃¶#<Œ;ê„{ó†œý±Ù± ^Eì´Þ3¢õ²,P'ñߦ?:V¬íIHëóù‰™Nן.ÆÿÜç&ÿ&Œ°-ø¢¸M¾û‰š‰ éB^ï@köãHkçö1Ñ>vÌij{GŸùoÿ Ϻüòùoc^çeä›õɦ ‰D`E­¨×Þ,ø1óG Ž&¡à;öÅÚ¡p# H¬7€7Ã{!̈ú@ ¨‘ðllïÆäzvð‡Ú¶F]O?Q×õKßû^|.º(C×u[k•wb‰_|ìô’‡'>E‚ëUôÝAݱ‚+4µøÞC(QW±øÒKAÏ}. üÈà¢4Í~7Ï‹D‰ÝÌB!‘O*ÁBİ'Ž¢â 0‰‚ÊCR,¾¡Î"ìÇÖfŒ“8æBd/nHœz‹XÄðɋ٢tŽÃÀvqn@Û6hšÙ%ëëíÿóÁâÈ+^1ÆßøíÉôÜTñÆm_ì{ƒ•­etzXZ³‡жÌv²if4DÃ?­ƒH½ÃþÚío\Áßó=0ï{Ÿ=ÿ¥—âUÕ=ª®gÙ÷-…YQâ.?À…d>t dˆ_‹òè!z–¸¡‘Þ@`ÙâücCXÏij9þ.0dz¬:E)rò›·õ½Æ|>ýÖlvüyïxGûŠ~GàĉoïÁîÉ _L°,Ð¡Ñ 1örFŒŒ‡?_+ð ‹ëää±íÏ |àì–QŽFøE¥ò_Êó¶õ4ÅA\æÙaÈŽ0 \Šî1íx<Þ°´@±ÆéÏÃX€ü¶CŠ“± r‘×í26@(•3Ðu5š¦þ³ºnþŸ÷¿_€ßýÝóðÙÏ~Çë»T:“Û«ø7$IÈÄ)0µ[M÷[7 Z·á»Ü¢ú’Ùʲ̮{Þó@ïz—ÝÿG~OSJýZ–å²aŒnZsEQÁC a„†9|x³drË™¹}\r^auà\"Ø“†!8ò¼ÁØC~Ž0ÚàäÚÓNQ²ù{"RкC×ÕGÚ¶ù¯ëëú?ô!t]´‡úþ0oljëîÌâù~¥ì_ðBºæ–-»Ø:£A$X˜dB`eÕ´þø1Ü ²ëÄøà]ï?ïyö.½¹ñFó𺮥mëÊέe‡² a!=~ÌðËpâÄÛ³øÁû&LO`£„ÍŠ¡@9Gã œÝ~˜ª0†>2n RƶúM3o«jýí³Ùüï~·~ã‡>„úþ=z'XØ6/ƒ neÝÉhÁEÁ°qÿŲÙ96+]d·}׻ºç=ð_“${J’$°:uáùí¸Q<Ç‘†éÄ Œˆ`n/<»¶Ò…çä%ÙÕi¡Mvô=¾W)ú"z dwÛzÓŽX£¥ùöíÂÌéBÛÞ€½Ôží 0)nõå„áàR;Š7—¼ácö}÷ÞéÔüþŸý.€ûß?Mo¸¡7‡Ýl-Þì÷;ŠÞ¶å.Y`ÿ~ ÏA×\^Ø…";ï<<%Ip1M¤öù%Ò®7 Ø+¼¹Aß2J4¨HiÃ6Nf1˜lÏ_YŠsú(҄ݸ€‰È@^ë~MküsÛš?¿òJý§Ÿù þÕÝâX)(c¼ô$.¼ÉòÉÖÝÔï§úý.SîJ`Ñý9îqH¯ÂèiOÃ}—–ð”4ÅÓ”ÂcÉj+¢âõöq®#ÿÛ)]Åj8)^ð> ü’éGƒ·1»EÆ/3¯’PKkSwùR]›O;†ÿÍßð?1c 6ü4E” ›ñ¢1‹6k³õòÛâþæ$Ç瓜û–=Ì-*Û±ЧŠ>ãØdùë•TQ é{Ö¨t»wÓÞ?˜/رOÎszR¸R¼,ž×(‘"þoªÕ†òiA6"QŽ·Æ ˆÙ¹‡xL*Ž1 ­ùDÛš/Íf泇ãÓßøýë¡C|Ö ÆiŠDkïsn¾ÛÌÈ¡pØXYÌ&Ç0Ѿ–.¥°æIDATf“õŒ“WÌ-/Û¡П:É_r’u‹û z8ÍlKYÞë^8㬳páê*=²(p?¥ø4"Af -6Ì&×iüC¾?ô çÏa?«Xóã&ñè´æ#}¦SþÇ/¾újÜ 5˜8ÉÀftªÐåæ YX¿™Ñ›|ü§O²~q¿Í®óN+[YÄHŰ“›ù[4þ“}lüñrü[Éi§án÷¸‡:¿(°k2ásÊ’ÏÍ2:+MqšRàÞÍ‚nêæo0@úh¡ïqBkl[s¤ïé[u­®›ÍøÚn0W^q®0ƒ5ötáNVøÖñM,Ç‚(-Ç¿ßÜßÉ ]/|önY/ü¶|ºÃËVU†Aõ ßOfüqkïÝ Ñw`sã,' ”UaÚðLØ—æ9–P;÷ì1ûwì » ²ä}£‘:3I°·(’Óˆ°D„‚™+€`r€@‰\'- Žƒ¶ï¹b6µ1¨µÆ±¦éÏç¸æškè Ó©Z;vLÏê3X£ ¸V^)›22F妌„Oaý© ˆOe€|Sa±BĆÞGŸ‹› àïÐB1ºî“ïË#n¥—WZ}ÀI×¾ ì✬¥ß òlfô'û/Ç/ÈD¿ûÞiuU-íÚÅ«ã1–ŽDZrÍ‹÷½x­7WâsÅßoj»Sí5n 5*Ÿ'[·Yp²JC ¸õo*ÁVÒØÀýsxèqkï*†Ì¡u[z‚Ň³ø¥EV­‹ZX—Xò¸ÈëN¥)Ÿqo@¥ 7wóG?UÃÆI~¿©Špª½Ã©ðü| ¿Œå¹¹Ê±Y%¹ÓÇ>-Ê¢î‘шo>zÁ¯[ ú¸‰— akû">¼)üSc€ÅåSC›}..oº.¾ÿS0öÛcœu*†qkZþøûMnjÝ"üYüŒÙ “µþ[6Hã¨.Wü·£æ¸µ“˜^¿ÓBŹésÜÈYÄÿR6£@¡Ðf°'ùŽ…ß°ÉoÀ-¬·à·ÛZn)þ¿-­þÉœ\'kÑoŠ Š _c#ûî´"¹A/l“ ÁÀ†¬¾õç >UÍ¿ÛW2JhlôÄ=@‚Í}‹½ÁM6«›ý©TŠÍ`ÔV0j›]ÃÍùnj@»¸þæðýÉXŸE?€ÞdÝâþ[RˆÙˈbyíS°fðp7‰YKô×-lf¨ê$Ÿ›9Ínnû–ÇMWŒ›‚G7WQdßÄï·¶Üœìæ¨ÍEææ¦ÖßœÁdž2L¿x`ókÜ’’F­zìé¤ÍÇ€‡>2dÀËn »q²²Ù ëdx~3£>Ù8aÑàOÖ[$ØXiÏ­N² €“ö·gYdª6£"ãVõd°eÑHe_Í wq³°ßÉzŽø¶]O#ÇÑò†.ÒFô¾m” ܦrªñT1ü­Yfœ¼'Ø.ådÏéæzŒ[zŒSe¤îåÿ¦7àþËIEND®B`‚Slic3r-1.3.0/var/Slic3r_192px_transparent.png000066400000000000000000000633321327442435500207130ustar00rootroot00000000000000‰PNG  IHDRÀÀRÜlgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs  šœf>IDATxÚí½[¬¥ÙUúÍù_×ZûRµëÚÝîn·ÝmÛØÆ—6Æv #;DI:ÌCò‡€Â9B‘"åÁR^’%yˆD$Øæb!œ„‹Îá`‡ƒ‰ã6®ÚuÙ{]þëœó<Ì9þ9æü×®®ê®ª½·ÝSZZ·ÿ¶þ5Ƙßãc ¼>ŽäxôQÈoÿv¤gÏžY–£i–ƘÄHY˜—^ºŠÿþßažy€9ìk=ÎCö|£Žoù$ï1Ͳ2=yòÑ<ËŠDë.ŒBˆÉäD™$y™¦y"e c´¤‘Ò¨¶mtÓT*I¤®ë½N©¶B6óùÕ®ï+,—óæË_Fóû¿…×ä¶ãuxããGöÖ·NË'-•mnžžN&'¦Y–O$IÓ"‘R 02…Æhø¿‰|ûÖ= ­éûV@×5]×­š¦YVËåµE×­šº^õ.¬ªßø ´‡}?ŽÒx]îÃÈ2ÈŸú©ÇOœ>ýÆ“Zë<Ïg“<ŸNÒt’J H™@J BÀÀŒží°ß !!% µUúÞ!­ „€Û×î§µ†1”RFk­êú檮÷VUµØßÛ»8á…¶ùÜçÐãx–x]îÑøÐ‡¾ç=bröìÛ·f³ííís'Ër3„°‚­AnŒ„5I$I)! =["…” ì.ö8ZÛ@ˆÄÍ”Rк‡R½S š5ì±´VPªGÓìW]W7«ÕÍÅÕ«ÏÜøÊWêåoýÖ7Þì𺼆ñÁ"}úé|vþüÛOœ8ñÈÉ$IË¢˜iZ8øb!¸µÄV…B"I2$I)3$IŠ$É‘$‰;²p®$ r8h&ðï­rÙ}•êÑ÷-”jÑ÷-ŒQN!íq´VhÛUW×{Ë›7_¸yóæ {_ýj·ú­ßBwØ÷÷AŒ×à.GžCþý¿j¶³óøÎlvò䯯É4&I’ ÐÄ[x ­¤L¦²¬@’Nð'ˆ`8Ÿ„™f `=:10Æ*H<„l?ÿ÷gý;Ó£ë(Õ³U’ºßß¿6ßÛ{éúÅ‹oüÂ/ :ì{~?Çë pã'~bçäÞðÍmlœÜ.ŠYnUÁ6´¾I’"MK”å&Ò´a`}ß .…‚ït%pŠÚ†GNµýÞZ~û•€Öú¾A×ÕN1èØ}_c±¸6ßß¿týÚµ ·~åWúùË/¯Ñ¸c>^W€;ß÷}˜¼ç=ïøÌ™ÇÏ—åvj­¬t.ôRJ$IŽ<Ÿ9‹Ÿ¹m¸c;¶ê ³„˜obcún½BøÏ ¯ȱƒÛÙ¡AÛ® Tçf­[4ͪ»qã…ÝK—¾tí_ÿks _GNóë p›ñ“?yzóüùÿåüÆÆÎÎdr¢Ì²Æ(çXß+£‘$ò|Š<Ÿ"Irp ïÓC€[uû,%½ö3"x?8þe’C ~^|Ï!)v×ÕhÛÊ…X1„cëzÞߺuùúóÏÿéå_ø3_­ŽÿŒðº¬Ÿü$¦o}ë‡ÞÞ>¦,·ò$‘•炟¦ŠbY6u¸n;:š̱…^÷ž&n³(Ì>‡ ŽG³†UN€Ï6â$Ý¡ë*ô} @À&ä –ËÍþþ•›.ü—ÿÍ¿Áþaÿ_¯e¼®lüµ¿†üƒ|×¹3gžxh6;9IÓÔY|ÜB¢(6Q3žä1|>¸õÀ+Q²üöµˆbýë;v~×£‚T|Æ +hÕ÷ Úv9@#)Sh­±\Þ¨.]ú³Kò'—¯þÞïÏêë `‡øéŸ~ÓÙsçÞòÈÖÖÙMë°*j€0^øò|†Éä¤Láãû@ˆµCk”ؒ4BˆûÏaD)†Zë•BÛÐo± j;ö}å ‘uð…èº 7o¾póÊ•¯\ùOÿiïú3Ï@î_ywã^~ìÇ0{ë[¿õÑS§?W–N8T`탾ï!¥ÄtzE1€afˆ#7>Jg ýrjcÁ¤ïã×ü¸¡‚‰@9¼§‡ŽdýîÐk1:fø[ÄA²yƒ%ú¾…ºÞW»»®~éKþÒ/ý–‡ý¿Þéø†V€ôÞüÐC½ýÑÙìÔ$IRcy5±Õ׺C’ä˜ÍN#M­#LQ( !ò\€¶yÁ)Í ¡cL¯é½`ÐÇ—+ËXqü±V)òûÈ@Élø´r‘¯R¦PJáæÍKó‹¿ðâÏüÌòêaÿ¿w2¾!à‡“oþæo{âäÉGÎäù –L¦àC›¤ÖÑÍóf³“"aþ€ÇîÞZÆ‚³“^¯`JŒý?ëø0èø·rË¿nùdœuŒùÌ$ µŸ xA ­{4ÍZ÷.ÀÎ{êòå/_þÿãk—>÷¹£HK^û!Ž×øÉŸ<úíoÿÈS§N=v2M hÝ‚n© ”Áµ±éô&“í!Vnt¢8h r‚íkJz ŸºEŠ4B«Lßq(sð#Î1ÐõÐqù5¬?†ŽÎ;žY¸¿#eâòþ~@žOåææÙ­­ÙSO½Ô|á ¨û?h|#)€ø'ÿä==þø7¿ysóliÿ`ÎÕ±¯=}Ab6;…¢Øp‚oÿ\þ 3¸BÐ1HXb§8H/´\XÛƒMœý ŒgŽõÑ'¾ˆr\йҘµç ¡P¨xB¤iÀ¸l2\<ÁlvªÜÜ<³õÄÏw_ø‚Y¶¬ŠÃ¾€1þú_Gñ<ýÆóçŸ:_–3(Õ»?]3ëï…?M3L§;HÓbÀûëÜîx>ÏúP(ÇÝžºLÐ"L˜ÙÁ¡È8âžß+‰Xsë`ÕúÜÀºs„޲߆ “¥v t]®k‹5” –ËÝ‹/~ñ¥/ù¥ËwS utItEòÞd£¿îàãGùßñ¡'Ï{ê”®-ÉÑ }¿FøsÌf§\¬;„<ž’ ƒÏ}ˆÒ ;†q{ û…Nïˇüº¬n¸¿œ`„ÐF¾KèOpg™®G"|R.ÚÞ¿'ÿ ï[—8ƒ£tÛ¼A×­ÌK/}éÊüÁ3Ïÿ×ÿŠæ ÿKk{ðuN|Èuº7Jðu­óobúÁ~äÉsçž:)¥„ÖƒzÈäÒŸ­u4-0™œD’¤°Ž1Ïþº&¼•瑟qrŠ03L–“‡9ùl@ŸÅ±ý0lžg]$(ãíŽHÉ5!R®t\轓oî–UÚ¹ßj•(I2ô}ƒK—þâåÏþËÏÿçÿìccüIèPþ~Û›)@ð^ˆW¯_· ð£?Š­w¼ã;žKLBO KYq[ƒà•ÀÖ@Ø{{õêWo|íkúüÏþ,öÉDÛv"Ï­"¸ó‹¸ƽ6üç¾–™ }Õv„Ç÷?fïz×w>µ³óø ¡”îX[êÔºCš(ËMH)#gP–›(ŠM$I措P× ,»°êzM(dš rLQðû¸WÃvëcë(cjô:Nк­±_Â9Bë ]‹dQ"Ï.µ%›Vì Úç·áR‰óçß²“$BþÝ¿÷ßž¢›#¥ÖZ8kOVtHèÅ=4Û_w3ÀüfO?ýo9}ú±-0ÒšÍî†f {r”å¤Ì@ÛÏf§†Ð'# !±\îbµº1@! ħaH¸-–I†¥Ù#r€íç÷'È3Îêb8·ÿ|ì›ðíâ}ãëñ ûö!¥¯3 ‹¯T7Ü!h&’ÄÖ7ß¼ùܪþü…ÿýCí~±XŒ»N@;eÔ¤ |›W3¾®àû¿³§Ÿþö·œ>ý„~*ò §~¥:'üÛó (Õ¡(fØÜŸÎ×Çäýë0c‹È’Žý€oa8”8Džrmðü,ÆüÙÙŒBsâ0j^Afíã³ÂVh•»>:žqPHB›B($ g Š"Až%(‹ñÎwBÃæ¤üaäûØß|îÜ'0á×à“ð !PCÇžáäÕ^4Hˆ¤LÐ4•³j$„c°×à鱯pCy®Wz…PÅ Hßyê´¿Ÿèâx8ù“ûß$à©1ÓÔÿžÐ ˆ3dý+§°FCJƒ$Ò(Ëij åÕý§Ÿþž?}Ƙ@×…ÔâÈÏk‚>4޽|üãÈ>úÑô¶Ùl'¥•§0‡ÔfÏìÜ ]iŸpÑÀCÿ:I2Çý7èºjð⌫œ“#¸ã…r|»×[y̰t‘þ2sÀqÈ'û$ô™/è?(tË}úÜ÷â¿Ñ¼à` ¤²L M ò<ÁtV"•@š__|äÃx¡,¡µFBY^&ðÚ(!`ãÖö½qïgë^àà˜ÎŸøŠGù¦Çf³“)õ³!ˆC^ªêÒº‡Ö e¹=Ħ !RæÜè>÷}ƒ¾¯AÄð1,ò–<Žó‡Û¤”ȳ÷t<›XØhn¶’Â8è#‘ç)&“ Yje×ï{ßÿ{±,a`J9Š÷!Nçfº¢{eùiKøÐ‡Þõè‰m{(ƒQØ“_¥zäùÄqQ¸Æùí1(rBŽ‘9émwZðáBÂÓÀÇð"Äù q§š ªÝ>Nœqçx}6Ø;¼z8>‡Ulˆ”™Š{ì=¤ÐƒõÏ ²”È2<¿¾xÿû¿ðÂæfgŒA*„…=îX$à$ôšC &üæ^ ?p à§~êá3gμùá4Íܯ‡=÷[Øbq?§@Û¥!~?/¬©,àÃ’a]-Ov1NöÖÔcýðÿ‹}ˆPñÈzsÿÁCœ0ÊÄ„;LͰ½fÊÃß_¯6£ó„×N á?Mí£(R̦)òÈóëËoýÖ?~¡,¡y¨“ýt +ôš^»€àÏí3}¯q+øøÇQ<òÈÛ+Ë a9ýÞò‡t嬇ÉdMãTÕåüv±|/ø¡2aâˆ[ä6À…Ü ïãNn´ W.Ì>µÞ9GáŒågŠð¸±¢Úg¯  Ãz~^JtiH©­ƒ› ”EŠÒ QÜX½÷½_|±,akùZv‚9Ú˜AL î‡å§q¬à#y×#“É©8ÂÓ¨ ,u]­¿bøœ×oñ,÷ÙϹpH)Á“Ocû€¼xž¯¨º}¿Ï˜—+*‡Y\©¼à‡…ïf8κ뱯éØáöt=öµvXß ž[ÈSNRd©@QÜ\½÷½öâÖV«9ì!6'<æ„?š îìáãØ(ÀOüÄ©'β}ß!ŒñsEPƒ3œç[X—ð‰(þ§“ïRìàÛxaw[¬` ˜HQ¸å'zÅú˜6%ßD$°cѺˆÏèhŒF–8Ô‰a_³ÏÂRfW»HP)&³YLÊ›Õ>ðÅËR©(à ‚5æ(ÀF}ø ŠrßDZP€“'!zèm”åFBÖÜÓ8cÓr€´Vn±‰ ~{Þî$ÄË¡ ™RÈ‘¯³Ðv[K·‚*LâÛs–¬3Yñ‡¾7‘U÷ÇôЋ‡ûa2ÎÏRÖùcšh ÛAIA‹÷“D!I4²\ (L&™S„›«÷½ïË/•¥Ò²ˆË?X}þ Ì0Ôyß­?pLàïþÝÇÎnmݱ…-a-¯…- ÿ·>BšnÀc|_|n÷á°Ï„¡ã^9qB+ì¯ „‚[x1=ãú¸ì/>.Ûû /VY—Í #Eëf1(¸-ÿö59¼ó$‰Bž“2Åtš;ŽÏ­Õûß÷åKÓioŒ„Ÿ‡Ú4·üà òó „8 ð‰O ?uꉇӴ„R}пÇ;²öÓÓ7°¢ž?)Š’½Æ $crWXÂÆøC8„Š`w½‚uxlŸÎ[õãǰeØr4Ëļ ð;3ò#è¸aˆ×¸Ezïkd™…=“I‚Ù,A–L§7«§?ð—²tˆö.ʘAð ö(†ûØôG^>ð§ÎnlœÚô'fxöðÅíVسlQ÷l´gÑXd ©ÆÃ§(H88¿'dVÒ{)—Ï4ÇÞ‡cý~ãˆYöx&â3D܈Žç}æÔH’i¦‘ç“i‚é$C–ÓÙ^õÞ÷<3?›Í Ãödí)ëØçœïÏ“]·GZ~ìÇPž<ùØù,+œ0ÇU]{<Ô±GË “Uó `g›Ù|+ôD`eÇÝ×(š„áaL_À'°âœAȽ‡#¹£‡UéØaîÁæ1øw¡BÙãÐûðZxÐÀæAxž€o§˜³kCœI¢f yF°'uaÏyõþ÷åR–icÌÐd-Àû°pÇv$pŠ@˜ß˜ ëûÀ…8 ðñ#ߨØ9c; ðHŽfÖ]»,°fƒ$™‚'¸xc+=t\¢ê.íjZ=5š;ɪ¬kÅ!mÃ!Î&ÅíFÆq~Œ¶;ˆ+çÃ’žÂ@üv…Ãcþ¤kã!\ áð~’*d©¶žRb6ËP”Óé~ýîw={…„ŸUl‘S;à|zí‰Þ {ø8² ðž÷õH–èûžõÝTL¸‰õIŠÐ#Ël™#Í>JDp”Ïjèdòt†q7¼¬Ò×ÃÒ1ý±…š°#³å&Ñ‘×ÉÄôꄎÆá¢ãWHÃ'¸”þÜ`RJlnæHS‰éd^ó{¿z%K6Æó¤(!ìƒ0?9½€ç÷°dØ¡ ?pDàoü泳ى >…:yôÇ Íišû Ü2rJƒ 嬾/l÷Â"ì ¡[Yì1ý3EwìàŽ³A™ð8<û;¾'¾µJ8CŒ) c÷3 §e{$â1¿rÙÝÞ±85ÊI‚é4G– Ìf{õ;Þyáå,5Ú¸"VÁEV>~ N/›%ÝòÓ8r ðã?ŽrsóäÉ$Ɇ0¦·æ|ÕEŠéSìŸBŠa–˜'ÃBÈ ¡ÜÂoÚ YiŽÉÇŽ¦Òq"ÌÛ˜îNõ´îh†C•x1Šx;*EôçŽéÜ!ÔŠ•Þ ?Y{ÞÖh Öéíe y.ìɦÀt¶_Ó;/¼\Ê(…DJD‘þ dƒ<ÔÓÇ8ªÈ¡ ?pàÌ™ÇNæùlêXÏôôJ \·7¯6öŸ¸èA$€Ãù±}}l(Óãq‚r°ÚÜò¯/ŒË ÝYY<>î÷é‹ÊCzÃ8k<žq¼ƒË:ä6qå°!bï§ï#†Â4ÑI4µÑž"7˜L¦³ Y*PNöëw¿ûÙ—³Z)$‚¢6€6€^ð{`­Ó{èÎîAãÈ)Àd²Í®à4Ý9÷Ÿ¬YrŠyXãg ÌŽÚhPïÖ¹òNo )bGx}Ô†Ó• ;†ë VÆ´çÏ64bìî?çü°ý©+…†wÒu$üÊZÿ´w°G!Ï &S‰ÙÔ&¹ÊÉ~óö·?-Ka”ra3 C8Ÿ9ºq¬~²úGMøíO9Äñ‰O@|õ«2HÅü&³ÙΖïÖvh¦Ø?)ïßc;7xE‰áýù±•ääº:ØûÜ·‘¯1ŽÈk_Ïø5][ØÓÔî„ÊMçâÂï^Îá'gW¡( ¦SY†,˜LæÍÛßþüµÒÁÒÕè(0¡'eˆé ÆñzŽ ä‰Ç¡Íßó=ÿìŸ}O>ùþáÆœ={æDYnœÖÀÁZ=~,¬‘R õ¿ób‘±C ӻŽlØž;¯÷íäÅá@ˆ÷é|¼F·±ê‚ýNÿàðrH^ºH3‡v¼;„wpíL`ñ¾ Y¦]´§Cž+…âüÖò/š·½íÂÕ<3Z)$ÐÂF{”z(a• ‡ŸFĶ£hõù8ø+òSŸúÝäÉ'߯„ ‹ííGNxç×/FçÞ€¯÷<üÉÜw&š!)XH.8VhzPCWž„Gmà¬fðü6q1<]‹€4q ÷ xÈ’ûa?dƒÆµÊuì=¢‡B’d™þ,³Â?™L§‰ {NÍ“O½¸›gÆh+üF oí!Ðã…¬¨8š'\>ò$ÿò_þnúMßô½°Õ€O~åtzr“bèœÄ¶®Ã³‹¬ÁÇÒcÚs)ø,3*­ÕlaÈöÂéO‚iÇ: „oÂg†°. ùcŽgšxÖñqýñùIÁu´=‡<ÄéÑ.Ôi-^hL'Àt’"Í$&“yûä“/\Ÿš`MZÙÊwbpZ¬ÑšqÌ„xÀ ðíߎä_ü‹ßÊÞõ®ïTÂ’x†qêÔ¹,›”†Ä—Ö&Hfëxí³íáO¡Ñ0;Ê1sŒ»¹ÐÙ2ÊI’»m)B.Ä dx¤‡Îég°ëð}sÆJdŸÃ%ÂÎ á¹øqã¨H$(¹•Ha“[éɳe©Q–³ [ÉU–óö©§^ØÍ3­•‚írh)lV×Xkß (b?2!Î;L>üa$ÿôŸþZöîwB !ºèk±±qêdš&‚ÓȰÄ]áB$tqø/|Ö-*aá‹R ÙÖ‡¦Œk|ÃÁ8á%ßÈÓ$Âd‹zŸ$Þv|â¼ý°& ™Ík¥²»–ÖÐ#Ëz”¥BYJL§)Š(Êyû¦7]º‘gÚh+üFHééË=\˜“=bnϱ~à)À‡>ùÏÿù¯Ë§Ÿþjðãïý=9›ÍNï$I†®«±.‚ãcù|¹QÍ´·î!«“ ?à¡OY¬Þ÷­žqlßÃ~þØ!%Â~öð¡óŽ–ãßñsj3È´oüÐ.Ì©¦–דçò¼GžkL§“I‚,('ûíO\¾á¢=’Ä&·®¼Œt{ õdâ0Do€‡>ÇöðqßàÆøÔ§~^<ýôßÐ1ì¡qêÔcy>)øz¼ëëx}8ÐZl…$@X8®i ¹ú¼~—>%îŽí —$V ¼Û^¢¡†…ñ"*†'f]æØ+@˜ àÇæÇ'‚ÿŽç:|„ßvaVHÓÞâý¼CQX>ÿl– Í Êb¿{ó›/ÝÌ<ì¡V„ý³Ï¾yëÊ•“[J}ùêûÞ·¬¦SôJA%‰øåÿŒûžøÔ§þ>úÑÿÕ$ü „œX£˜°{ëïûYê¡ø…bcl<®°£\ûüBÿ ï—#;ΡSá¸$ä¡_Îþ3~]a”Ê ³=žo·²[}nƒ~·rQ÷ó¼GQôÈóe©1›Ó™íÒ<™ÎÛ7>qÙ ¿F‡ß¥Dáù7l^Û}xGë3éÞÞ;Îüæob€J©” Z—;ØÃÇ}W€oû¶6<Ú³fˆ²ÜÚH’|°ì‘ÙÂVçz úr'9œ5B‡Q$d\°ãö!V ìbaƒ+Ú'.Y £Bô:O†” NŽkÆ ²0«K >å[DfÓÈ2=àý"·ït*0™&ÈsƒédÞ=þØ•½‚%¹i…ÿ¹ oؼvõÑS}—¡®;q:«ë÷ÿ™ŸÁ Ð*I Ý÷ÇÛòÓ8ÔL0|ò“È'“í™_¿7îòægZ¾Ô'É|7Þ%b ;?kmÃhÏt]¥j¦œá6aÞ#+íg/ïøÚÄ”/D køl² Ú™hÌžÅI}z¬£k-~‡É¤Ãt¦±±Ì6ŠÂ`6Ûïã¥[e¡µÑŽÕéÂhÏ>÷èÖÕ«ì´mŽÕÊ`µ2¨kƒ¢xt ¼ïÑŸþiÌ„htžÝìîÝŒCW€qy¦ƒƒõ'³Íìj—ÙUÈ2‹ù'S (%òÌ`:w<²»ŸgÚhm“\RZçáâ ç6¯_?¿Õõ ê¨k i€®“PJB)ÈqêÔSg}ôÊؽÈ.üØŽCŸ’$/øj‹ÜÁ‹Ëi6 ˜&Æ8ý9LNñ$ïÔÀ…ŠS&(‡à×ø"+¯Ð÷µƒE+3<ûój-\?]»÷YBèã\º.‚<þ!¥åóÐg™µüeÙ¢,[L§ Ó™Át&œó;ï{ô* ?/fÑ/¼x~sw÷ìVÓ$¨V «•FÛ&h[‰®ºP nÙ {ì}ÿø'g[vî‰üòùÅÇ>öÐóÙ΀` ^ó;ÆÀ>m-rßÍðÑn鹕ůãzÜué¾õ:5Ò [¬P4(Ì ðs„½EãøèÔ1®%¡¯Üʲ~ÀüE¡Pö¹,&S1ÀžétÙ=òðõyšã0¿–ߣ.]>5»~ýüV×fX.5V+¦IÑu)º.C× h-a³Ù6"U³¤(¦å‰/οüe´‡,C¯iê ðýß|6ÛÙð+.úˆ X1G\ÓæbÜó~üù<_æ ™›gnc'u¥éûm»–M G\…Å£Gz¸¶û¤\dÇžÃ27{Ö²‡”^èm|¿wlNÂý “)0™ {–ÝÃíγÔÂ@Jÿregvýú™­¾OQWumÐ4m ´­€RöÑ÷JiGM±uÙ;;m¾ímo{ÃéÓ‡nD_Ó8T˜L !’˜×âáÿ‡TgbrÆ¥ŽfÍû1ߟò 1d≪8£<ŽçÛkêº m»Dß×C¤Êo"…åþJXš§+‡ñ#°)—в‚_–Vð'““I?ÀžÙL , 66ý#_›g©ƒ=`._>=½¶{z³k¬– Ë•FU 4pJ`Ð÷Öâkmœxf®” Î{êÜ÷}߯ÙÔ¡×:U{¿íÛ¦Ó'Þp>M3Éo.ïßÃaƒ’ƒœ$ ²¬„ïĵ˜úÀŸý×ëâ\ÿÐ]縊áú´î˜PÇÜ<ï‡?‡Q 0]\š„ßR´«Ü¢ˆ…>“‰F1&¥DQÓé²?îÆú!¡FEö´˜´íÁIŽ®ñý÷3bqêÀâSœ¿˜h”¥ÁÔ9¼³éª?wîÆ"I­ìäÂýú‰Y×%¨W«°ZIÔu†¦MQ×z{ZëÏ›v™à·S¨7M3Ålò¦7]j>ÿùny˜òôjÆ¡*Àw}×ÃÛ³ÙÉÓ!™?T ì~fðŸÙEðÊh†ˆÉj¤÷„ü{>ø4Â".Á{¾PHâJ1ò´nYmsëø*'üÆÕéjWµe¥A!Ïõ(ÒS”“6Ú“L§«þô©›ËDŽØ&„ }íÚæäúíißKÔ•ÁrE°'AÛ¦h[‰¶úÞF}´€!(‡{ßÀ Ë&Rˆ$™Ï/߸t ·£½¹q¨‰0)ó”EaúŸg‚×e[í°C ´ˆ8‰´Ž6ìçЇ8=Î<86¦k÷¥‘<ùF–Þ³:©¾Ùçø9i{®y®ÍA#Ë5ŠR ,$ÒDc2©ûS;{«DÊ&¹ %´”л»“77'}/PUu-P×u-Ѷ6êcãýJQËjC$»Ä]¯í¨fËNœxèÄûß?Ùùª—S¦îvê ðßqæüd²½iß…ëx……ï!,ò‰*+ôiZ8+÷»ç´ƒõ#dp®çÜ[K®øÂ(Ûòóúv‰>‹ké Â9¸fx¤)19{W²Ø¹ºÝYÖ"Ï[dEçfƒéÄ®Æ^NuæôÞ*MH[ f ÒwolNnÞÜœô}by=•Aµ’¨ªuM3@‚¶5è: ¥D}¨¦!lÉW†·ÛfY!ò¼È&“—n=ó úÔ«»‡é¸cÀrÊó˜²LN-dïè*Õ#Æî1eÙÏ(ü{.RÅί_6”÷ÜÁP€Æ-}µAzØèŽFYêÁÑL´ò”“‰Ádj ØÓ('­:}z•$ÆÀökƒÅý7nn”{7geßKÔµv±~º!‡×>ºh[åâýj`Ú’Ã;n4æ?çí+·¶Îo½õ­«°èa*€Bq‹Ï^ Ã·\9¨„Öþ é¡C „¥„˜Ð{k¶Žz±®ó‚gc†)ëøJ¶í ØÃ°0'á|í`ŽAQh‡ù½"ä…uvËR`R [Ã[´êÔ©y•&6ÎOÑ) oÞœ{{Ó²ïêZ9èÔ5Åú%ºN ï-ü¡d—RÊ)_^ŠÖ^ó-W¨9Yز&ÏKqúôÏþí¿Ù!ÊÕ]CõŒ1z\¯ Ý…?8ÆðçpÖ§F°f ‚÷0ʉà<ž‡?|Âðop5™°‚î•Ëž‹œ]¢5d™Aš’7 øG–k…õÊR (%R)ç:ujQ%ÉàðZn€¹qcZîíM‹®XÕ u4î4ˆnM—éUè{åZÍØÅ¯­`àpfó±Öv[ëØm77OÍ{ìáSÀ¥c:ÔØ­1½ [˜a Ìëh_÷çÙWN,ãP†Çøy_N;x83ŽäøV&q± ïòÀ“EvØëå…éÞêSbË °ÇZå"=Ei­~QX˜8‡7K¼hÔÉ“‹ÚRµ!©þ^H˜›·ÊbZ(ÁžZÖ¿m-»³ï¾7CŒßõ`õcâžÿ/øjc{dY‰íí‡O}ìcǃ2}¨  µB(@‚ö÷·#†$€€RÝð¹§8x¾Íú$–?çéûýžijµ¡°c°ð$KMP‡°>=(¬Y8'Ü_Yny©QºöÉD"Íò¼ÓÛÛ«ZŠá !™ÀìÏ‹b¾?ËÉòWÐÔu%Q׉³þ‰‹÷ ‡ÿ…› ºÁðÈVøÛ<“•ßûYØ!/Ms!e’&Éå›Ï>‹kÁÂ8d*DšQOŸ˜i9öEfÂŽjJµnàXŸïïaKLñ¼ ü?cøÙÁ× ð9ÔGz4~Šö„ñý|p|]Ò+7( ¢HS+ü[›«FÚ{ ¨U"aæ‹"ŸÏ§¹Ru£QÕ]Âý^ð=¿ßZÿÞ­³FÎ-·úcëÎggN[áe¨BlnžÙ|ÛÛ6¶S¾îHùü†?yœm?S™Ç„\ë¸/и¿&sîyQ‹Ÿi|ü>Žö¸£ÀûqÁJˆû¥¤p§ aO®‘ŽÜVP“Zƒ²´‹Òe©@–uzk³jלœ 0‹e‘-“\)ËãiƒŽ¸=­`áN›è²<Ëõ1èûJ…Œ[N5?³¯íoû^~â˜$§O?¾ƒuÉ’#4YTçoî˜ÌÆ-ëØg[¡vFŽ<ì¨Æñ»O~y&*§6è`Ÿ4Ç#?"âõ˜Àò“µpþæôήux²L¬Ã›·z{kÕ$‰q1~7˘ŲÈçLøëZ£m€†ð~c­~ÓX~ßÛ°'Yï¾ïÑ÷=Äé à×…j‰Þ` XHð%¹ òÜ8á·¯³\ïK'üe!‘¤YÖë­Íº•ÂåYzÅ„Ÿ`OÛtDÛI´…>ïSU½Ù*lßwЪ r!|Ôàü¸I/”áí`zäùLlmßI’ÃFC½°®«[c” £,1…9žÂbsž”êû>C‰Æ¬¯ÊòEì>Ëoë=±r’²xŒAø}s*ëì0§t˜¿`Ð'w˜¿6Ô™wzk«nêœÞåªÈ–Ë2SJ i¬ð×çÇVŸ`ÍôZÁ·ø_¡m›¨Zmìy:÷¸GÓ˜²Î÷¥è0›ílýèbã0åìvãg£aøÍ¹;œÁ‡wVãíÖ±ïÈ!]9NdqÁç ªøg<¬÷õ «¸ôä¢Ìn–id¹B>ÌV, òB"I,íõæ¦~­­åw}{ÌjU¤UUXËß´-œ¥÷QûXñCÜ¿ëj·ÉÆx®OœX_Í»sxÂû“É,ßÞ>³y˜rv»q¨  Lß·:´òÀ8$G€ÆïTS`::ásRˆ-¿ÝŸ”(^¬:„c¡À{¿„V`¡Ö„4ä æpØ“çyæCI"n'ü¨ª"­ê<³/Ð5Vø['üMCB/ÌO–ß+€AÛÖè{>KrèÂg¿õÔ”¸÷¨ãŸ ¤L1™lOSÎn7UnÝBÓ¶mÃ׆- ÃÁSO>ã¡NáJ=;ÔÆº9l aW4ZìÄÓ­ù¹yDŠfß—3Œø˜ØF¸?gÈF~`…?—HS ÏCáâü LUåérUdJIt±¸ßYúŽ­D×I×ÌŠ">b$üÊá~"Žg_ÏÊåÖßϦc!örã"e†­¿ówŽf4èPà×~ }×­Uà#ÎÚÆt¿ }g Nz(µY0$ÌùsyJôº?>ìç•&ÎòR/þ É•ûª®<3ö‘yî`OÖëͺÌòcaOUåiU•©1@ßéÛwes¶ YŒ">JÁYy+ü]× \•fŒÝÇÖ~ü=uégÍA×<ßœœ:59’ ÑC÷ÎÛv¹´|~ Æß±sEß…¾BñhÛ ±BÙ™À;º|Ñh±|9¤·Š|fŠK"mÈ“gxÁf€ˆÙ™ä9…:m´gcÖt€b°'I`ê:³˜ßØPgÛ‘s+‡G×ùYÀÇú-þ×ÚF€Ú¶q „Aš×Á›óëÑ}ˆ£sã嫼bäy™Ìfm¶¬­G@ ëqlÝXש-æühݣËÃyD!ñ‹þ,_°îøÄGâ¸Øc~3Âýv! ¼0È ŠñÖ1N$rÇíÙÜhZaã쑨ë<«jço\”‡¿iÚÆ=Fc¤³üú¾îÏZ{ˆÈƒ cê)ÅŠCôˆ14R2EQœÜú«õè1D]”2Ö½cöoLåëfÁ¾ ±?Ï @ÛVÑBÑ žº­¿ ’øÙ€ŠZ|U—%ºYjƒÕ!/ôðl™@‘3‡7ëôƆÅü<Ã+%P7yZÕEªµ@Û[Ìß9!'g·m˜"8r›ùÃut3hš ]×¹¿Ùß¿¦Ð=s±õçEF`¡QD3®dc`ŒD’dùööÑë"wè P×h•ª]è&ÄñM#Bñlà•B@©}ß‚ 0áü¸ù-í^Ï‚ò?YôfÂý”è¢j®,ÓÈ ÇñÏõ ?áìiò¤ªóÔZ~íi;¦óÖ¿m$º–hÞ°¸_¢ï5ªj…¾ï!¥ÿMüÞ…÷‘Ï †)?‡9>äZþ0+Ìé#€B$I–lnf¯ÏñøwÿMÛV _l‡·Þ÷{ ψ,šý®m+ø¶¹ ‹¡È#Ì ãÄÇþ">öؤwx=§ÇÒ›Ëܶ'/ » ]žÛ /ÕÊÛó8Ë_çó+é,¾AÛ ÔMâX Ú&Š[êÚZ} àð¾B]¯ ”-¥ø¿»«£p'oÎÀ\°ïŒ£.Ce·³ 8ƒ²œåÛÛgŽ\BìÐú¾™[ÌN«ªÇ ËÔ£2lIÎ-wÈÛ±K•vn°Ÿá‡Oã,¨ÛË~UP3ªìŠiif¬å/œ³[$Ìò;á·Ç¨õÎò°§ë šÖ³8'·k(âã“]>ÔiÛ˜7M‹¦©•ñ=Wb=g¾9ò÷Í¿«ÂâÈOØK•¢oÚ5К¹HБP€ºÞßoÛ•b\ði˜ ÿú¶å\!l´¦ïëàOñ¢ýƒl!¸_…¯Á&¾<Ó¬¿öP”Ç ÔÏçH|~Í„_ ˜¦ÉÓš`ËðZ|oáN;´.q±ÿ.aáP¦éPך¦u|¾„öpÆ ë#ø}ŠÃœc¼û üÿ²‘(8ƒ– (6'?~´ü€#¡W¯bÙ÷ÍÊöø·wŽ}ÓZ¾J‹¯Vâ|}­{tÝj´·~4³„“Ÿ7¬ìŠ£=VÌÊÂòzŠB"Ë€"ïõÖVÕaŒÒ–Õé®ÓTuž®ª"U*qÄ6WÌâ(Ížßc!ÍúRÁ‹ÂjUaµªÑu: ;pVkH?Ö%ÃiŒ×^C¤6ùŽÏ EQï~÷ÑŠ øâÑ+ÕÕ„[à ·TqÊu¸4œéVtiÁèzᬢ H–Ñ1Ç<Ã"?:Š÷»Wa¡OæX››Uc»Ø…-Êë:Oë¦Hµ–Nø Þ$ÞÒ7¾¦·ëK~«{TUªªÑu½»n1Tyqª¶»sBí£bÜñǰ-qráæ4ïý½µ ‚Ç ¤µÃQG` x昺žï‡ MŒ“]ñô½ÿóúU>lX”„ìµxa(ÔÑpècK}“a(¬ð—¬Œ1Íz½µÙ4œÏ/íR¤ºi¼ðw­Ïð¶«Û­%šZÊP׫U‹å²B]·ÎâKõúèÀ§ ŠtOúÞu!ÑК‡4ŸD¤ãùB똳€Ašæbcãu´v,—í¦©êu™] ¬ˆóaî@˜–Bë>ÈóÞã?Ð=Üx«45¬[ƒ„¿(`[—Ld™D‘wz{«j¤³:m’«H•’h‰ÎìˆmMí‰mM#PU Ëeƒå²AUu®…!\ÒË–8R€€„ßC9Þæ1ì¸1vŠCg9ì­ :ß'4ÆØÒ˘b­µFQL²ét³žíñ%Ž~±pZ2¶÷‰œTLðî}.ôÁïŸvÛi7}ØÓó¦À`•ý^Êišçˆ£‡8ŽÔ `³ÂË=»éúÖãÜ/BG˜·6'ëãá=ä°°Ýsz³åùÌ¡dWY˜ÚP– ¦eŠ,(ŠNíì¬jKɶÂÀ8á_™ê šF¡ªµëÏ)¬£ÛÈÖÒ½óƒ7öJÃä<û7ýåŽ.}Öu¼"ŒŸ›+ qËbHБRhÛêå¶]‚fq C<ßµÍã÷qVØ‚OǰǔPªC×ÕÃ1Éé¥Âvâ÷øŽÍÎò—ÅÄ`2M0™¤Öá-:uj§ªa£=î" áϳ¾*`w¤6ß©™Ú–{Š3ÈÆúúf2Ävõ¿ß &õòûÇûç8¹È~¨L´ï­õçÆdýÐÐZµ׸Ú8R®\Á­²\Ýʲé ß5n u<ï$\Ð"„?!á-\üB ”é´ªT ¥$‰dÄ6$·|§6{&òLbRtêÌéU•$&hQ.¥þþº1hj¸Å)¬à7ŽÐV7¾y=½¹ï khe"ÈãaHXßÌ+Û0üîõÑ?£†]¸×G…<Æ·¶µlÏØð¬‡øI’$xÝ~Ôµ¹Õ¶UE\˜öä8?Æ>¿ûÐ!l+% u cd™`ÑÂù®ŽwL¦)¦Ó Y&QNzuæÌªJSmx’+I Ë<_,ÊLõm«QÕÆ z%QWUÅ!Øj-bèä@¼yb´ŒV1ÌtÏû0dH‹ðŽ0;Òè2.(ò '„œr:G˜§‰›Š‘¢%⡇^W€ÛŽûoQUÕüj×ñY€ã|^¶È\-Š`Î!¢}¤R M †5òNð-ì™N ¦Sé,ÁÆFв˜N{uîìr•eÚ½ÁexÍþ~Qìï—Y×ÚéìjŒÂ=äð¨k¯v­.ùñ•]`^ŠöˆÀò~ù¦¸f™ )u®ö¾9¸a탼ì<6’¤”µþþ¼q(ˆgk$±±ñº¼âh}¥i®hDV‹ ;j®|?š H ,¯G 4‡4µKIÙ"IZ'üV ŠR`2M0›fÈsIÙ«sg–«4Ñ·'I çó"ŸÏˬï%êÆ`U»,Q#äñ¤6kýÉòS ‚O5Ì”á%h&¡Ö7ˆ3æÔÀË·p¤ç0ë~»¼‹­ ÷ÿ”«‰£@á"‘eùº¼âøÙŸEݶÕå¶­]¼^–|ó“·þ^p¸ÒÐ 'ü–»_@švHÓE¡­åwÂ_ä“R©³çV«$Õ V§´˜_ßÚ+Š[{eÞuÂõç×vi¢J¢©$›HøÇVŸZú^>Ö ¿ûµX‡ÓíoäaÍÐàpÆß7ÀSÅÙ_¶Õƒº¶ /{Ž8;,Øçc97FéÅâhä€#âcoO]NÓåÙ$I'cs˜#Ki‡¶ý[Ï+œå‡«Ò"È#lÔ§P(K`:+±¹™¡($&“^?¿X¥ ö¸5¹ôõe±¿_æZ[á·/«ØjDù!Zá}JjYÁ÷xÞÏ`¾„3Tx_ÜÎ×íå„ÿX¡÷‘£DH÷I²}é;?³ØYËFÌ€u¾C‘bß¾oªçž;:‹fÙþý¿G3Ÿ¯^^­¨¶—F }0̱À·ç«¼S¢ËµÀÕìÚhÏd*\œ_ ËʲWçÎ-Wi¦µVVø…„¾q«,ö÷ËB+²ü´(­à¢©ëZº•Ù©‹ƒ‡;qçfŠãS5yƤ=žám^ÂRÇ1 ‚^œŒÉsã¼€ü¾Ç üáX]²ÇóÇ1æèä€#>ÀÕ«ú²1óÓ@¾a—ö Pû§OßóÒâ0ôi†ýl7 ¤6ëôÂÅùffò<Á¤ìÕùó«U–*£j]bWcœû{…[N¡j4êÊulhªZºŠ-ŠñÓ"ÂunÎꇖچ,yuÖXU¿.AX³ÛãyÅà‰­8"ä£n$´RÚå¨RMÊÖÄ!X QÃÙ÷È0 †q¤gøÍßD[UõŪZ¡mª ¨k Ð!žÑIQîúxáç‚?™Ìf³Í››&e‚ ­~dµÌ3¥ à¸=ôîî´¸y³,ºNbYi,V«¥Àj)±\J,–Ë¥Àr)°r‘ p©"ßµ™Z™X…æ}‹¼¿÷ꉩ 1í¢FÊšŽœåqM5û6R4»Ö°½{\cþ±_Á9JêÈÀà(|æ3¸Ö¶Ëk¶Ãƒ-¡hŠ]ðYºVèÔ¿'t’ù"Õ$üÄó) ã,¿Ät–ac–#/LJ­zh¹Ì3¥µ[Z èë7&¥µü«ZcµÔ¨V@µ ]í!b.¿_ž4ì^ͳ¹±Ó»®\”;·û·íKâDV<+Ü~4ê{ ªBfg¨P!ãŠè¯ÙÎ JuhšUGð€Æ‘‡@4êº}1M—§ÊrKJéÛ}X§ÑOïdá1,WD¡OáŠZ0D|r×—2‘˜ÍRll(ŠÓR«GÞ°\¹2}o+˜¤€f÷ú´ÜÛ+‹¾·qþª2óxß;º¶Œ‘÷êŒK/c$Ãôž”ÇË29)Íö6õ‚Ì™œ1‘Úx%u}•ø¹úžÂ6\R p,føÌg°¿ZÍ/ @d©¦ÀjEÖ¨kû¹Æq|0Äùg3›66K”“Z=öøbQÊ8zƒVøõÕk³òæ²h[‰åRc¹ÔX-¥ƒ=Ë¥Äj%ÈãWd÷´¥ÈòSžÂËìà1ùЂNJ2îgÄ;?„-QBÇY0¥A0ƒØï-4«*ZžHG3Ž­$þ'ô:.FkŸ;> ãØÌ°»‹Òt¾$éIKk&¡‘ v…ôgP€RöBˆ!zAQ ¢˜L3llä(ËS¥{t9Ï3où©QíµkÓòÖ­²è•@]),—Mî u½­/^!lO¡N^î…9LH…Ÿyhä‡wúC¶,ïðà·áŠÖSð,®Ý^J«¤U%\ævlõ½S¢-¼~Ã;!¡T«êzu¤àØÌðÛ¿ ½\¶ÏÕõR¡ãE”s|Èé¥hÅþû˜L2L§Ò4ÃtjÔc-æyÞÇê*¹vwgåÍ[“²ëª•Âj¥Q­ V+`µ"Jƒ‡@|!j«}O…æ¼S[زº4ðø;Ÿ b¸ÛjØÇw†ÀpOBÿ€'ýþ\¡”²AëCйýµòp²WÔõI/¾­1ûû×çÿá?`uØrÄDZRøÕ_Å|µZ<ß4„°ÄBn‘È ö‚o…½,-•y63ØÜ”8q"Çö‰“IŠ­-Õ¿éM{ûy®t²:õÕkåîõIÙ¶Ë…Âb®±˜yâ ¯§5xÈ3vn¹PáÍÊ„áK?¨ 3Ÿ]ìça”g[“+ˆ”ó/—Â͘±oAtšÃa–ž† Y+ô}[ãÕÇPॗðâj5ßíºRJ—¢A´GJ ôfjM^–Ói‚ÍÍ [ÛÊI†­-Õ?ùæýy–j­(ÃëX×v7&×o”e×+gù-¾—NàåPØÂ¢&¸C TðUæ}©bHE gÝ[j_sâuLßËßÏ W*:n ­ÂYNø –Kr²E¤lqÙi8;ŒKPÃ|ÍZZ«æ°e'ÇRþà`V+õ—u½¿´" Ã6ÃKI®[›¶¶K”“[›}ÿæ7ïïç¹ÒZ#€HèD ÂßË¥ÅücvúˆOyÖ—*®ããpKE×é=ÇÚ¼Ýb}R4¿??Îð)ÖA!4êÚ ?`aãúPé:œOÇð¹—uCˆ}_›ÕêÖë p¯Æ¯ÿ:šªjÿçj5ïm­©pV_ Ñ+øÂE{$Nlg8q²Äl–áĉ¾ë[oíVø¥»Zæå—·&×®•eÓ+ü å.©%°ZIyB'ÕëÚÁ[ˆ{¡a#bd©}Ä&Î ø{1. µ#,JçTe­*`µ²ÛIÉ÷ #D~?îC„´ŸU&š²ÂZë¾ëšGl[€_ù,º®þZÓ,]E ?9¹–ß3JlmåØÚ.1™fØÞîû·ZÖ‡mP0Âñt¬¾æsÁò=BÃ$ܘÿ²=ýuë³Ã)ójµ·ÿ»¿kޤ©VÕw2Ü*ê<ü …@b ²àmoGuõå®(ŠiqâÄÛÛuûÎwîÞÌm%W«8€yñ¥ík»å¤m„µú 5dw½Õ—Œº,àW`‰—Vò5žxG’ yLmöîØŸ/ å÷ç‘™1Í–/Ú(ÑBÂs‘ †–›Gv„Hœp'c+Dâž%¤L‘$ ¤LÙgö½Ö®]»på÷~oq$àXqÖ ?€D$­‘ž<|÷÷˜kú§{r:ù;Þqëf–Âo-?`^¼´½±»[LÚ¨*+ü¶Ö@¸èˆ Z•øv„¼dÑ[ÏБwZ×àòÂŽù½Bq%âç£ã† _‡E?–Ìf‹X(7¹<öšb+Î[JÆ ©¾!†cX¾®Ã¾·ŠRU•šÏ¯Ï[vÇBŒAlžˆf( •©1HgSÈ÷¾¯Ý¸š9ŒRH5ZÀÅOlܸžOÛ¨VV+…ª²˜ß/?W»Kݘ-ä€pEËÐù´×~¶Ž&Ì1?íÃgr¦=iN°Ù…ïçÏCÄ7Ë‚µ""³yXÂï+—Òí5LøÇx>N¦ù °ŸDp¨ªæÕ_þe·8l:hy0Æv_`–_²G uJH j…d6±ÿ¦R¶Q-Éæ…ç·7wwóißõ#W¨*ÀߎܰŽl¼#³8í#h2æàÇÂOBhX€ñ}8V÷ŠågZf©ë °©šÀêÇ'²åBÎ["˜=|wmšÅüwR&èû«Õþ­?ú££þ¤q¤€VV Œí¸,Œ±Âïp Ÿƒf€C¤$ Þ‹/œØÜ½–O»N ª:,=V•Tñþ<ï›öø1†"¡ðskÍT›7Áv¶Å ÷!D èþ¼ž!¥%¯Õµqq}žPâÞ©ñˆ3¾ä¸oG0É+QÈÿç$Úva‹›GûÓ8² àð>àARˆÁò'ÒÁò«NQ$ „]•€yþâöæµkùÔfx{ñ`°k™ÃKaNÞ“‡/D ãå‡Üâ’ÀÒvFùþa)doRüÝâõª²‹lø¸¾‰  /|ÏF~øÎÙã,´‡CääÆñ~Ÿ+lFª«[·öŽ,üލ8ØCˉxNð  …ðh~ ÂOÑý—Ïílí^Íg}o°ZvX.{Û¸ÊUŒù5wášÑú6äÜ¥Áë_CFjb&溰#%Ðx3¯ð|ëÎÁÉõ‹RÄI©Xøù±Å Å….þ>¬I 0RP®(´/Eˆº®ÅryëÆ/ÿ2Žý#§lA9`ð»G çüÂo•Bë+ I®¯=»³uõåbÖuvyÑżÇj¥£¦´äðòü± dz&œø,à1wì/x?‚¯V)Øì FûÄÑ™¦±¥ÂhL|}|q M`×(áçÐj qÂð(ýŠöÄJÕ¶•ÚÛ{ùÆaËÓ+#£Q¤‡ž¹Ók­¿ÃøVè™å0¶O'ýµçv¶¯¼\ltÁrÙÙˆO¥QUÊ}sª8üÜ»+%š¨i,ÿÌ'®bÁöûxÁäáÓ0?@·ÂãŠÔ©-¡ZÆEéœCDÇ o­?&·ü~'óÆTè¸‰Ž £QUûó/}iqdß4Ž„h=Dz@ÿ‡SˆDˆ0Ôé>KA¢ ìC‹r À|å™SÛW®]§±\´X.{Û¹­ökrµ-†Œ.Åøí"žO]ì0üšÙcû´½Öz”Ñå‚xa1ºw†…‹î˜ÀO8˜{ï­ø¸kƒfx~¼Â#mËy><ûëcüÃÖ£×RJÔõ×®=åÿøèFh ¼ðãËgí…°Bo ¤~A²E¬Î¯~õÔöåËÅFÛTU‡ù¼’Bê¤ÕW|­wú€0iE™Ø$á<ߺ$Ž”ðµ²¼ƒ[jN…ö¡Qrpmm®V„ô‘%þZŒ¬?3$£°'Íúë¡Ïé˜Ü ÃûÙl¯fk<nݺ|ãç~qí°eêNÆ¡+svËO‘ y‚ ?¬å§°(0ÀÀüϯœ>qår¶Ù¶Ëe‹Õª0ÿ8ÌéPN7fWÇe¾ŸOS_—ôâVÝŽXø9MÚg€û^ Ís),'Ó¸óæøHc€o¿n)#Ÿ‘æ4 ÿž†-C¥¿Æ#V)%‹[ýÕ«/¼ÐuG«ö÷ q¨ ÀqætÂOI.ã·Â/ »ó öè?ÿÒ™“/_É6ûÞ`±h±\¶Ži^.y¼¥ô‚ ¬‹ãS¨2 chÛv¬¼Ð¯ÐÚ°úoáí‚bíqý= g!î@Ç¥Ša2Í/"»l‡”f‰±óg‚=9®ï‹›×ñõ­Ã”«»‡¦<É—{-Ù÷!7ˆ®m±¸uó~¡»y2õjÇW‚=1·‡ zÂa}¦£5À ¿L ¡¿øÅs§._N·ºÎ`>¯±X´¨*Ū¶øZ["€=î:˜³:\¥»VYWº ßóA Öqa§A 6š…Bø4ŽÜøã¹³ÊÀî»–˜v1Îüú}mÄ #«ïÛ)'·…~Ít ‹[êå—/¼ˆÐšùqh3ܽ‡çùµy˜ ,Þ7ÖÑ%‘2–Þ õŸýÙÙç/Š-Õ+T«ûóU¥Ü:»`‘JnWQñÑŸçÒàžÇÂÏ…Ž,«=®äxØÅÛÞ‰ÅðÙí±=¯%It*ùkÔ¼ á›Ïì†P‡;¾!æç "e¸­”)”ê1Ÿïî~æ38Ò¼Ÿuã)‡=ðÂOÄ6†°§ðŸ €ÕÂi¾øÅó;/ší¦î±XÔX.[4DßKV¹%"ËÏaϘc¯Ó}{’'·(.NÇ&÷ëŒC˜z­Ë2W¸ÆçÖ;Ûq–š¯©r}økÞT°Ùz˜DÅ2‹Å­îÖ­ÝËJ–îåx ey)ÜɉmC¨û ‚ÆR¸µ„¤þoÿíáÓ/¼ ·›¦Ç|^a1¯±ªz´- ucR(%¡m݂㠯¿D ¯ãíH¸H¡Â.pžBá)€-l«ÆB!T®1ŒñaÓõÛóÉ8LºŽÞì“S »W\…¨HÆV}µm›7_zéÓŸVÇÎú@¢h‡?ÕbÀýì`0`scCR}á Ÿ¾xÑl×uå²Á|^£ª{éi¾oaL ƒi€ïyV6~¶äøÝC Zp‚7¿ò9.ØŽÁ'9‹4 ™údÕÁÂoG,м‡P¸_OÀû a{¨tqg‡14²Ϙ‡i­1ŸïÎ_xaq,­?ðà ý §ó'`Ž0|t0B@‰ù“?yèÌK/áD]÷˜/j,ªªGݪ§²E۪ĘBt2‡”qé³Ç󈎾PÒ˶<‘ƒ€ÅHQ|[öx¦-yc?àF{xlßêDòwâèAÖ~ÜTØC:¢5Œ#>D|“2År¹‡ë×_zþw~í’£{>î›ì!‹O‰.âø€A„¾€àQh Õð‡çϽô¶»¶ÇÞ^…Å¢BÓôŒÏcX?~Þs³F’$H’@¿ètˆÇ=œñ™SÏŸ¸²pÁ Ë©ëBXÍgƒé|q\?†4îþÃ&uÖ‘ßB'6srKFu<ü‘l…Ì“2A]¯°·wõ¥O×ï— =ˆq_€ ?ÑØsB1}yÜ#¥[áÏôýÑCg/<§·›Fa¿ÂÞ~ªêÑw@Ó hE Â…tfË–ŒQB¹?Õ*ƒ}½Îà-Lè³rXÓLâd·ðcáõ÷éàìnØvƒB{‹¶/€À‡‘l_Îò.ìqhwŒd¸Æh,—×çÏ?¿ñ~Èσ÷\(ÚÃBœƒÓ Œ~Hr‘ãK‡±ÂŸ˜?üÇÏ^¸`NVµÂ|^a>¯±ZvÚµ6Á%X+r61$™üÐRCëRZE Þ•¡Ói·öqsûy8–áë ÷%nG“ð÷Ž¥¬[0ŸcÌå ÓÇ\ °ž—³>9¾§ã{§7.ˆ_,nª½½ë~÷w/ô¡qÏ€•0ò$9»{†dY{žDÿ—ÿòèù ô‰¦é±¿oaÏjÕ;^oSBlɘË ‡ Jõкõ¼ñ¯ØqŒÃ¤Ãј¥÷QïHúí×·?;Èô™_uLY³Í¼ ‡5a듸`sÿ}˜“ç8“ޤ”hš%öö^~þQùb—;¯Y˜ÕƱ¶8ËË­þàà‡ÂÿøÙçžÓ'šVa1¯1Ÿ[‡·m º^ ïˆ Æ-,ñb|ÊÝàÂj©ZˆØð^˜ý £EÃ/…&½ßÀïÏÁ×a·Óƒ’$ôþØ~¿Ø “c<Þ'ò8Ô © áû0Q–$)Ú¶ÁÞÞµk?ÿóí ¯UnŽÊxÕ @áMögä0P•ƒDW嵯ùŸ=D{þ¯ÿòÆsÏ_Чj—äšÏ+¬V–ÛÓ+Âü8ÖÀGˆ—ÃmxHÒþ&!´¦®‚qÞÉR®²õP†oG–ov…¯“_¿‡L< Ì)Õü3žëìš¹2‡ÂÎ*qËo³½ûû»‹[·öŸ½gÒwÆ])ËæÒLˆØcÖÜ`Þ"4®&V©úíß~â¡‹õ©¶SØß«0ŸW¨ë>ÈìÚµ)r¶ñSû88΢†‹BŒ-¯mUb÷Q£còˆ ÈpaôÇ=ز‡73ððw„T ¾íºV%Ü™õE-ôzõ î3¿ô¹%ºÝ¬oܸù•Ï}îh¹ßí¸c`Î-î 'ì<ÛËaÏ€Œ±æÏ ¦çÿ|ÓùçŸW§š¦ÇbQaß ¿¥x¥ÇÇÂÆ#.$žùûîÖŽ>ðøè,©t-w2üŒÄ! 2o‡NÛs˜ÇgÊ •<ü›Â¿,VŸ óÛ,—ûêÖ­kù¹ÏáH·8y5㎀[ì!A>Ñfõ ã“ÿg8,ØSšßú?Þôð ûÓU¥°\ÖX,kÔµbQ3×<=!tDZ [ÓBŽÛä¤FÛÄénGH©àÇá=}Dpýq2ËÏ0ÖÄ\ ïäò}x‘K8 P­/ÏKiy>U5ÇbqýkŸýìñŽ÷4^QrrÝý–\øÉ±X¹"FBFk)fæ×ýo¸|YjÛûóVK²üfqÚ0'ïÉ;w!Kr¸`±^ðÖ âz?Hèèƒý¶wVñhV¸¿ç5ÅáÔ¸z‹/È énÇq?TÕÂìí½üµOÇ–êðJã¶ Áž€Í ã‚Ö…"þ˜Pi8៘ÏýÚo¸|ÉbþÅ¢Æb^£mIø“¡=¡»Ø}yÇ> pþ  zo/?ä÷‡–þNf„0ÊóZ_såõ#¶üò„¿#æç¯[·+tÌ>a·7 !RÔõ·n]{î3ŸÁK¯B®ŽÍ8Pxƒ*f5áÇXÈi&àÑŠí!ê<…Ï}î‰7\¾Üž±Ä¶ K{ˆ?ï“[`VoœA cÞa*¬{µŸ…ô„Pè_if¸[«û×<ºxAõJË®lxæÿØá¡UˆõC%Ž'eßÛ\H‚ºžc±¸ñüg>£¿nÂ;@`V^Œoò°]l;IØûž0¿ÐÿÜÏeçö÷õ™¾—ØÛ[¢ªªÁòk8>--$ „]f4V{ì±P¯»F÷i: ·¿ôÚ†ÏU¬£cÄP‡³K¹€{ʼn\}âŠ/.ü¡åX­ö±¿ãÙÏ~_÷ }˜ðóÁãý±B Ÿ\`è„?êæÊüå«ý¾³­¦iÑ4½ƒ;’õÊŒ¾à\LÖ sI[t‹ ÿý:üµ8PÙBË/£ÐèpûÛÝâø~…É… é[¤œn%IâZ‘‡«)’%´õ±„©4 —ª $é­§_mÅ^~œ(‹ûí»ë½P‡^£=1g?qòðçð§ Îâ ã ¼`ÅÏ!ô!ËO³€Öu=W«Õü/?ó\9 A<¬1Z#Œ‡<Ýs0·òY9$ØA×Nе°‹PkclÛ¾‡Ià£Eû‰Oèë×®5S@N-eÙ·ç^tœàŠ© ÜOàN°ÝÞ+…þ†ß9²È÷ö5‡<ÜrÓ}ä¿·ÇEë!¡×î&Ã{Îé'ª}Ÿ$6Ã[Uû«årñ??ûYì>0É;"ãng€Åðˆ)N`š™P6VQ Ì?þÇÏ<ƒ'Š¢|Cž— ì&_[7äÀód·¦a«A> ø™C#û³BNÿýºÍ¡uw÷ !ƒS` òð&ÌB‡…*¡Ã+‡ÙƒÖï¢g«)„èºu½¸U×õ3¿ôK¨îç8ªã@׎³; ?bÖ·yè·½aw$r?øƒ8—¦Ù“y^¤B$ð Ìà»#Êyl¬!LŠ‹ÊãŽÌ÷ö„Ô~<¬óBèü¬/`†3¹³ë;½yš%· m4ÍòÒ|Þ^øõ_G÷`ÄíèÛÆ6H b Dì,àÐn­Ñ+ó¾ïû0- ñd–•'Ó4 ¿WÀÏ ö4ÞÑ¥á•g/|a(ò~)@hùÉ!­!NVqÇÙCþYødÇൽú(Õ£m«¦i–Ï~úÓæXuq»㎂{|6¸Xgåïd|ï÷BN&xLÊüñ<Ïa…”œ`^$6€ r¨> ¯ÄpŸŸ·7V0ÞþÌú†|ÿ7…Qû™cq­èûJuK­Õ•«WÕ¥ßùã±BËac©4~è‡ ‡¥Äi!’ ÉëY‹óPè;‰W‡Æ ¯b»Â­ý8$f†}ã*clw‹®kë¾ï/v¹ö«¿zô¦;JãX+ù¤})Å£Bˆ _Ýä­?½ö³@¨÷fð!V! húxqj1\W¢,­_kÝõ}wu±Ð/ýÆoX÷ïLÅŸÿyÿz”çÇ×…Ðxúiˆ§žÂN’à¼ØBfÃÂcD\<¿^ ï."ÄáO¼ å(8n½t‰°ô‘ö£¬­0–zbHð•RX´­¾~á‚Úýüç‡ÈN"å°ÔÒÝ*À+mÿu«PÇY¼(­¡a|÷wc¶±“iŠSRb[Œšóx.Иtgÿw,ü1/¤:H¦a½nÈ褴äØJiÝuzY×z~ó&nþþ1P i#üïF˜ÍlóZ÷;Òã8(€¸‹×¢(€¾‡PÊ®yê”Èßó³qâvò\̤ÄLJ“Pü=^4Ã'ȶú@ü>¤Xðm8 "$°ÙýBB›ÝÇ®.cú¶ÕËåR/vw±ÿì³¢ºvÍg'ISßÈ×;¾W#Äæ^¿Ò÷ws}|%X+ÐìYÜæ»Ûƒ8€|Ë[P<þ86··ÅVQ`&¥É…€ô4ïx¡‘2ÄD7ÿׯÌÂa‘x@kc”2]ߣ],Ìþ_ü®_¼ˆ”Ôð6^ oãÕ@;p³æÙÜæ»;½žû>Ž‚ÄÂýJïãë>èuü¿Ù€xè!äoz“œÒÙÌLÊÒ”Y&Ê4E.%øp':|~Åázû™@ߣW ]Ûê®ïESײ].Ms劮¿ö5´ÀðænÆÝ×+¢^Éš¿’°›5¯×}÷ÀÇa*€¸Í8Xø×]÷íôy’X!ÖÚìÐçyŽäüy™ž>­ó'Dei²ÉD–I‚¬(’\ZÂÉh{ -üë\'½ÖÐ}o´1Zk ­ú¦éûÕ Í /ˆÅb!ÕÍ›JÕµ]ážÿ^§|æNíÆÝ*ÃÝ|w7Êp"Äß=°qX À…[â•…wøún~[üýAi¸Žím™ìì˜t:Erëú<‡˜LL’¦ynóRU%ú+WD[×0UeLßóãSÊ:xw/Æk¢W º[hÄï±Æ!*Áa*@,øÍñuÞ)乿÷NÿœW«”÷k¼¡z-3ÁÝ(h<`8”u‚ï`pLÊŸq›×¸ÍgwòÝ —AÁI×µ»g­0(þüNðþ¡ÜµäµâPÇ]aÿ×p̯§q/üÛ)Á«µþßP>@|þ»q‚_­S|·¿÷°ïÍýw*`÷#t;'øn®ížŽWü“opõ ®ã Øÿ«ÍÜî·Þ­'¥¸ÛÄØ|§‰°ƒòG.`“õNÈ(‚¿ï¥·»¶;|-îà»;9öí>»›ïs¼¡~¥÷w£¯´ÿ‘ÃÉ{¹÷Xçì=`%¸í5¯yÿj”ævŸ¿å9¬ñJ‚öJ‚zÐçwûúvŸ¹‘dõ`tc¸ŒWx¿n|=CW3î5[ôØŽÿÓm¸ÙIEND®B`‚Slic3r-1.3.0/var/add.png000077500000000000000000000015511327442435500147160ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<°PLTEÿÿÿ‹»tˆ¹q„¶n€³j|±gw®cs«`n¨\‹»s‡¸qi¥Xe¡T‡¸p_žP[›LŠºs‡¸pV˜HQ”D‡¸pL‘@ƒµmGŽ<~²iB‹8z¯e=ˆ4u¬a9…0p©]4‚,k¦Yf£V4‚,0)aŸQ]œM4,0)X™IS–E4,N’AI=DŒ:@‰6<‡27„/3,0(¤Î”ËæÃÔëÏÎéɸݯ¹m»Ü¯àòܽ䶥ۛ Ù–¯ß¥ÅèÀŠÂy·ÚªÜñØØ’“͈ŽÌ„–Ô‹•ÔŠŽÒƒ·à¯}¹k—Ç…×îÒ Ù•”ÓŠ‰Èÿÿÿ…Íy|Ãk~Çoµß¬WžE¶Ý¬¯ß¦ŒË†É|y½nj¬[w¼`sº\™Ñ‹’Å€¾â¶—Õ‹†Ézp¸Y~ÁiªÔ³Ý©ŠÏ}Ìu}¾g«Ôœ˜ÌŠ–Ó‰zÆkpÁce«Ur¹[—Ì…¾{h«S´ÝªyÁdq¾_nµXt·\´Ú¦C8}¹j²Û¨oµYoµXt·[³Ù¥lªZx´dµÛ¨˜Ì‡}¼f|ºd˜Ë†´Ù¥kªXP™AÂ}¦Ð–¦Ï–‰¾xB6nAsK3tRNS#}ÛóóÛ}#SææSôôS"åå"~~ÛÛööööÛÛ~~"åå"SôôSSææ#}ÛóóÛ}#w¤öcbKGDˆHÇIDATÓc`À™˜YXÙØ9`|N.cS3s n(Ÿ×ÒÊÚÆÖÎÞÄttrvqus÷ðô ˆxûøúù‡„ŠÄÂÂ#"£¢cbãâÅ ‰I`œ’* JKÏ€ dfId²sróòÜä‚Â"Y €\qIiY P ¼¢²J(  X]›\[WßШ¤ rˆŠjSsKk[{G§š:Ä©š]Ý=½}ýZê0Ïhëèêéaõ9#Æ1]{hotEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/application_view_tile.png000077500000000000000000000007211327442435500205360ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<cIDAT8Ë¥“ÝKÂ`Æý%)‰èƒÂ‚¤•CaS )ˆBDZÚ‡QRÌ4ZaQvÑI’•÷A7]x§óôžóæfí"š<¼0öüÎÃÙ^8:±Ã9¥Ž/hÕZpç ämæô H›ÏØ(ƒý ĵø’E˜L<€°tÞø ÈÉ«æÉVõXþþk!z©'Û±gþ §_ÁކgÏ8@ڪЃpÁ4JÐ<†QËEÓ¨ÁÈÉ7€-¬H•~Å(Íf“‚¹Š èsnû¯º®[ôMq~ªß‰-c¸ÝFƒÞé p€¸úh™ˆAP\†1øY5ŒrËû (÷ URŒÊΈtâT ~¬—?Ëñ[KªÙÖ ^¯[t‰ðÆ®mýNŸ ­» Ž-èÏ™;‡¡È) ÌäÙ–iQî =Òtr¬ö.›¬Ë Ut|;| .’ûc^IEND®B`‚Slic3r-1.3.0/var/arrow_down.png000066400000000000000000000005731327442435500163470ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< IDAT8Ë¥“?KQÄçÄi‰œµ¢‚ ÁH*Ñ.â÷ˆEºøAÅï!XØXØ vc!v¦¿{;»û,®Ó»„\¶}ÙÝ7IŒóÌbÕÃà¥cŒ0u˜®Žï“2ÝBÀÝÑ^êàh¥ gw`4¨+Ü@jˆÉ¥ s‡ä5"H h†PÇðhõ"H.E„ºBFЛâ ôœÝœ¶›&è 5E˜°Ä€îõɃäòÔZn¦ +ÒÕ;ýÍl«·þ8r9¿~Æc¨§$ ý¦h÷¯>©*ÓÁåîkš®í›>†£·áíh¯L—LjãöÅÆ³RïwŸ‡UšdÞ:ÿ<$·ÇhݸIEND®B`‚Slic3r-1.3.0/var/arrow_in.png000077500000000000000000000011301327442435500157770ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<êIDAT8ËÝ‘ÛNQ†y‹y-¨ˆÀá4 @«"‚¡´ÑØØb*`¬µÅ¦kK= Žà$:H•(‰ñÐÞô)¸á þÎÞ&´e.¼è]/V²÷^ûûVò/U¸âCÞêØù Cî÷¿gœ»f‰œ ,Åo^`þ6†`y 8ó0#'n4Bƒû}ãó!Z "R€ËE•j1¹ET ×a* °<¹‘‚x.…;š¢kjtË“#b¾M7ì«V´½Q TàØ1U üº4‘¼ï¯ÿYï[¡KiÁgÏÑŸfñ0Ù,¨¸-£ýÎ{aÊôP«a¥K!èXÔ }¡…iWל«¬Ë&¨Mmš×z%Ó—;ø¾ÒÌ=`Z’ÍUu¼I$÷_¸/´•.¾p%IEND®B`‚Slic3r-1.3.0/var/arrow_left.png000066400000000000000000000005311327442435500163240ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ëIDAT8Ëcüÿÿ?%€‰B0È (=‘ÉÄ»I1€õ2¤À‹ ÍÅÙ$ôþüùÃððýC†_?3üú¿~1˜þŽ`ƒä.ô_edj>)Æ*®§À­Äðçßn90ýûï_ þÍðûÿýÑ¿V¯\‹ðÐÙ¿ÿ0þaøõ÷XÑ ¢ß`Å¿4ÔÜŸÿ@±_P½¹3î¼0›ˆ3'Ã×^¿ƒÕÙ ¯4ÿùý‡áþÂGŒŒÈ)1vUÈM B9 Ç i;N@ͺ@͉Ռ⅜㡻¼zZÓÉIEND®B`‚Slic3r-1.3.0/var/arrow_out.png000077500000000000000000000013131327442435500162030ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<JPLTEÿÿÿd´[nÀcd³Zb±Yk¼`a±YoÁdm¿ci¹__®WY§Rl½aj»`h¹^[©S_®W]¬UPœJN™HL—GY§RO›JJ•EH“DW¤PM™HW¤PU¢NI”ET¡NtÇhsÆgrÅfqÃef¶\d´[b²Y`¯X^­V©Ø¡§Öžg´_”ȕɎ\ªT¥Ö›Ñ’‡Ê~~½v†À~ÅŠZ¨RrÄfuÅkŒÌƒ¤Ó›„Ç{}½u“ÇŒs¶mY§RW¥PpÃe‰É€‚Äyu¸nsµlU¢Nc³Zs¶lq´jd§_g¨bG‘Ca°X_®WŠÀ„tµna¥]y³uc¤_L”GEA_­VŠÀƒz·ss´l^ Zd¦^p­lD@\«T‰¿ƒƒ»}[¦TFBq­ms®nBŒ?Z¨SX¦QV£OT¡NRŸLEŽAC@B‹?AŠ>ÿÿÿJ¡{YtRNS®ñ®ìñ¸³®쳸®¸³ì³¸ñì®ñ®`XçôbKGDˆH£IDATÓc—WPTbeU5uy M(ŸQK[G—AAO߀ Ìgf1426a053·°d °YYÛØÚ1سs88r‚¸œœ¹\€ ^>ˆüÜ Ô‚ZHXHº2¸¹‹‚øbžâ^ Þ>n¾~’ )ÿ€À `†Ð°pi°وȨh†˜Ø¸x9¨a ‰IÉ )©iéP~fVvÅ•@;~DtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/arrow_redo.png000066400000000000000000000011611327442435500163230ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDAT8Ë¥’OH”QÅÏ7ކZ¤cf9„‚ÔÚUÔ¢ÜØª fd»PlQ ÙRÈ•nÚEÐ"à„6…e-r#…apœÁd 6Y‘c|÷œûµÐlDe{yïÀ¹çDQ„ÿ©Ø¿<>3’é;uçDÙ–ê47KgA©…îg)§g$uˆjUO 2k’p s…ܱ {Ö t?í<(©7YÕ”®­L º¼ñXйÃ]`$˜ˆ7Ùid?Î <¹ô¢?]ãçR.ïÝŸ8n¨Þƒe Ê@´z<ÒZoFÐXq•InoJ×WíId?¿CþSkŒhÜ•„$ÌÍç†'®¼¼\*бs[ жÉ1þv|AÔèÈÙ±‹¥ k<<-ãÔDÿd׺HµU–W!@ …/иáóJ ¼kÆó¥³8Њ‚&‚!7ñùÕÉMAb¨©Å‹X¶";ê`ÆÌ±ëG‡þ† Š"œ¼}¼§±69Ô²·ŠKËK˜ŸE~!ÚD­ôf†?kÌ8š+äŽT”U¤ë ¢µ¹ÍûZà‘àî  ‡ÜñðÞØz ÷;-XÈÁWï_?˜ÉÎàÛ×ï(þ,®ìC‚¹ Hà*P¢6G¹ýÚ¡M’2µ‘ª“)& ’ã÷íränͶR¿‰ÇhëYÿ»IEND®B`‚Slic3r-1.3.0/var/arrow_refresh.png000077500000000000000000000012551327442435500170370ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<?IDAT8Ë“ÛKÓaÆû3bvÐ’Bº°BÖ9Ëd-Od­6_×tä¡eÎÅšþÜÜ¡ÜIͱaIF%üÀh„eµ ×aù#èÚ;¼ ïž¾]8ýa»xoÞÃó<ïóá+ ùߺñ¼q°eZ!;“”"Ð4U/(Æ/Dvèû¬•Ý]ÔtoUqÍ|ÛúÍ͸U¢!\ýËvt®¸êP¡ÝØñõëÖ¸#i)8:S.¹Î¬žåjÜ[/Uv– åloL´Äë3 kÔò&µü§Ö~jã´å·ýÒ~M™©LµGJfŒ2BÊ”‹ŒÌ˜„Zf—=çEf™QdÖŸî’wLÛ…ÈŒ#³f›d¶&ÊÆ©°uºÉlÕ“¶;îåû‰ïxLHÖŒ ɇ È È Èè~£…+É:Ò#h›hÎ#5=&¤N.eÄÜïhiL˜(B:’* ÕÎÞÆ‘îC„8i¹^fµ[‡È|¡Ó–ªØ §Öž™ÎxºpŒÊ‚«Ø¡¢Ô™¦Õœ¤Ô››Ð’žÑ–y¸q…Ç{©×  Ñ—Àw~¼u—ÌŽ›Ï“˜Îi«aÑ” Ò–dž”ËŒ„À}f¶\¤Ôœ¢Ó™~¾vJ’BF?B‰;>„8c±X¡Ó˜{ºrI‘B’ɉ“Ë‹’Ê‹EŒ>A‡:rµi–̎ʈe§]D‹=^ XZT9}3q²iɇ„Ä}‰Æ‚‡Ä„Ã~‚Â{S–M1s,c¥[{»u…Ã~‚Â|€Áy~¿wO’J-n);57{1Q”LN‘I-n(/q+,m(,l'ÿÿÿSï1tRNSkØØkËËËËkkØý‚‚ýØ‚w‚Øý¦kËËkÓÔ"„|bKGDˆHžIDATÓc` 02É+0³À¹¬lŠJÊ*ªjìPNu M-m]=.Ÿ[ß@ÅÐÈØÄÔÌœ,Àka©ËÇ/ hem#°µ³wf`qtrv ¸ºéº‹20xÀ-óôò—`ðñ… Húù{‡„ÂD¤ÂÂ#"£¢cbã Ò2ñ ‰IÉ)©ipcdåÒ32³²Qý““‹æÁ<¢Oò“ttEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/arrow_rotate_clockwise.png000077500000000000000000000013021327442435500207330ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<GPLTEÿÿÿnÀcl¼`c±X_­UpÂdn¿bX£OTŸKm¿bP™Gm¾bG@jº_]ªSY¦PV¡MRœJC‰6y02t-1s,-n)3v.0r+i¹^fµ[‡È|¡Ó–ªØ §Öž™ÎxºpŒÊ‚«Ø¡¢Ô™¦Õœ¤Ô››Ð’žÑ–y¸q…Ç{©×  Ñ—Àw~¼u—ÌŽ›Ï“˜Îi«aÑ”¦ÕɉŒÈ…„À}f¶\c²Y`®V\©So¯gɈ>„8U Lj«cŠÇƒˆÅ‚:~4TŸKPšH„Á|~Áww·qSžKl®chª`H@a£Z‡Å…Ä~‚Â|T–NSJj­cɇ‹Ç…‰Æ‚‡Ä|¿u‚Â{[UN˜Ff©_‹Æƒ…Ã~tµmR•MF?^¡WZžU;57{1>ƒ76y0ÿÿÿù6¼tRNSkØØkËËËËkkØý‚‚ýØw‚‚¦ýØkËÓk’Æ/bKGDˆHžIDATÓc` 02ÉÉ3³À¹¬l ŠJÊ*ªìPN5u M-m].Ÿ[O_ÙÀÐÈØÄÔŒ,ÀknaÂÇ/ hie-°±µ³f`qp´r‚›ëÌÀ êâêæã{x2ˆ‰{yûH@ù¾~þAÁ!¡’~XxDdTtLlœTA|BbPRHrŠ”4̈ԴôŒLY$¿d¹3 l8 ]U+Ý:ÝtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/arrow_undo.png000066400000000000000000000011671327442435500163450ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< IDAT8Ë¥S=h“Q=ùÄR¡BŠÍÁÐÒIq”ªÕ‚(Ò‚àÐE*(Hqpp—RZÁB'A$CPÐà"¢Ä,N¶ùÄÚ`i‘ðÙJ æÞsŸCI4V°Ò —÷¸pÎãÜs^È9‡Í”‡MV¸q¹ôzÄ™ŒÒ@eã4 +ª,RXPÕÜ£á'å.Ô0úò¬;?çs„9:‚FÔ¤† `)X†ÿ¥”WáøãóÏgZ$¶2AMA#èÏkCûÖvô%ú°kçî´ˆ^¼ÑŸl‘@% þS„ A%T ßž@ª;„CèŽD‘Ü‘L—æK/L†6âBúα ÍÜs(Éâ[°‚7ïfž½ºúöø†\ÈŸ+ŒŠh®¼TF¶ut@D÷®³ñÌÃLÛéû§®üDë %¡¦#Tt}TtZD³‚ÆLH]3]‘.T¥ŠJP ‹-KÌ޺댫'o:•µW(D<š@*™BxKžyX\œE M‚ìÝ¡ëÑÎØ…ÞX/ =‰ž¦…4ñýÇ*6£ ç\³ÆöO÷_Û÷þ÷Ù¿ºÅ©ëˆŠ>øŸßøù…’êåíIEND®B`‚Slic3r-1.3.0/var/arrow_up.png000077500000000000000000000007671327442435500160340ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<ÃPLTEÿÿÿsÆgpÂerÅfh¸]tÇhrÄf^¬UY¦PqÃen¿bX¤OSžJRœIˆÊ~…È{‡Ê|§Öž¥Ôœ}ÀsƒÆy£Ôš¡Ó˜†Ã}e´[ŸÒ–œÐ”e¬]_­VšÏ“˜ÎPšHY¦P•ÌŽ“Ë‹J’BSžJ‘ÊŠŽÉ‡CŠÐz<Ît8Ìq7Ën4Û›v{Oå·ƒßUÎv:Ír7Ën5Êk3Éh2Ú˜uzN㲀ܔQÌp6Êm4Éi2Èg1Èe0Ú˜tyMà­~ä¯â«ߦ|Þ¢zÝ yÜžwÚ™uxMˆX†V…UƒT€S}PyNÿÿÿ)<™tRNS ¤ñóóóóóóóóç|îƒÛ¯ððððððððð·ÀÂ#7bKGDˆHÞIDATÓc` ™˜YXÙØ98¹¸yx|>~9yE%eU5u MA-m]=}C#cS3s!a K+k[;{G'gW7wO/o_?ÿ€À àPѰðˆÈ¨è˜Ø¸ø„Ĥä±Ô´ôŒÌ¬ìœÜ¼ü‚¢bñ’Ò²òŠÊªêšÚºú†Æ&‰æˆêÖ¶öŽÎ®nÉž^ˆê¾þ 'MžÂ 5uDõô3gÍž3—AzÞüÉ -^Òµt,cY¾bå*·Õ)Åkº§¬»Lï[Im` ŽtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/brick.png000077500000000000000000000010151327442435500152530ustar00rootroot00000000000000‰PNG  IHDRµú7êgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿ‡Ì¿eIDAT(Ïm‘1H[Q†¿ûòbhÒPˆÔª[¡…ºfJÇN.ŽR©«d¯àâÞBQ,¡ÉÔ½ƒâT–RR%†T(ãC£é{¹÷w0Q¿³}œs8‡ßˆ>ÛËÁ|k ÒÇ©|ñF«W•L)TR¸9Ö÷Fl/s­I¼YrˆŸ€K7RŸóED©s=WWYUUõEõþ¦Žˆ½X‹ÍˆGˆ_t©ó—$–Ç8~ø;9SŽžûm 1j¼îÝU!KDËA×Sû ã¤!C ‡£Æ(´I£¶/`8gÄ Ø"Nèï}è Ž\àøÇ%#ø,áÛ„‡ˆ°D]bpØAO[» Ã!À!Ä’x ]Ͻj¾ùö{C°„ 1Lý£“wzi¬g´¨ÂÔçXšŽiœë£Vþ€é‡õ陊š›6§49¯èýÛï×Þܦ fµ¤­¾Þº; ÷qÓ¹%4£vÆtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/brick_add.png000077500000000000000000000015031327442435500160650ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<kPLTEÿÿÿ³³³¢¢¢­­­©©©¦¦¦³³³¢¢¢©©©®®®¬¬¬›››«««šššªªª™™™©©©˜˜˜¦¦¦•••¥¥¥[{H£££¢¢¢¡¡¡7kŸŸŸžžžœœœ›››ššš˜˜˜———–––Lt47k7k7kÿÿÿ¢¢¢±±±ÖÖÖýýýüüüÓÓÓààବ¬ÑÑÑ«««®®®ÕÕÕÇÇǵµµ£££ûûûÒÒÒØØØÍÍÍÎÎÎÌÌÌÁÁÁ¾¾¾óóóéééÝÝÝÞÞÞÂÂÂÚÚÚÃÃÃ×××»»»ÏÏÏñññîîîáááËËËÀÀÀðððìììêêêäääÄÄÄõõõòòòçççßßßÛÛÛš¬r–]fŽO^‡F‹¢~ãã㔨‰«a´Ô•Ðæº»jW-èèèëëë`‰H±Ó±Ö’Œ¼e¼gÅÅÅL{1¶Ôœ²Ò•7k½½½~;{G'gCW7]w €€‡§—­“·¯Ÿ¿.HE@`PpˆKhXx„®¤ 0CTtLl\|‚ŽUbRrJªCZzFfVvNn^~AaQq‰(ƒXiYyEeUuMmqqQ]}ƒ¸DcSspKk[{GgW}wƒ¤”to_Cÿ„‰“&×Oén»TFVnê´é3fvO™%u¼‚âì9sçÍ_ ¤ 󰤊êÂEjê aE> ]ïîÒtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/building.png000077500000000000000000000013301327442435500157560ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<\PLTEÿÿÿtÇhrÅfL˜GqÄfH’DEAnÀck¼aDŽ@B‹?ç99šššÖÖÖÓÓÓÏÏÏÌÌÌÈÈÈÄÄ᝝tttŽŽŽ±±±ÑÑÑóóóòòòñññððð©©©ÍÍͲÌõ¯Ëõ¬ÉõªÈó§Åóïï¢ÇÇÇäääãããâââáááàààßßß›››ÁÁÁ¬ÈõªÇó¦Åó£ÃóŸÀó¾òîîî“““»»»ÞÞÞÝÝÝÜÜÜíí파Œ´´´¢ÁóŸÀò›¾ò™»ò–ºò•¸ñììì„„„¥±¤ÛÛÛÚÚÚÙÙÙëëëxƒwzÁpƒƒƒ†††×××ÜäÛZœT|ÆsÅßÁ………µµµ···ŠŠŠÕÕÕËÛÊ`§ZrÂgˇ€Ãx‰‰‰¹¹¹‹‹‹ÌÑËTžN»yj¶`u°n’§‡Ž‡¼¼¼½½½ƒš‚X–Tm­ekkkjljZyY`s_gmgÿÿÿ±+p tRNS ARÞ-wþø±hD…7bKGDˆH²IDATÓc`€n4Àgñòñ  ‹ˆŠAÄ%$$%%¥¤¤e ²rrò ŠJÊ*PUI5u M-me¨€®”ž¾¡‘±‰)TÀL (mnaie °‘¶µ³wptrv ¸*¥ÝÜ=<½ |FoK_?ÿ€@ˆSP°[HhXxDd3ˆÏ럘”ÌÊ`çHIMKÏÈÌÊÎÉåä äÁA~Aa;â!†é tEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/bullet_black.png000077500000000000000000000004371327442435500166130ustar00rootroot00000000000000‰PNG  IHDRµú7êgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿ‡Ì¿wIDAT(ÏcüÏ€01 ¼SIŠ!í_è_†ß«Íz÷ ‹†4Ïz†? wë—304`±âo¨Ã]†ë r ?C±ºá7Ã?†ß ?þ2üÅîÈŸ«o0(0h0Üd`X¤â?rK±50\e¸ÊÐÀ …e A ð÷*’|ˆÝtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/bullet_blue.png000077500000000000000000000004411327442435500164610ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<³IDAT8ËíÒ= AqÅñó:îd’R2 _ %Ãe±H2-¢ \ƒ§õORÊÓHêún:Þ€ÁM6ÃY?uê ’øføïTi JAÅQ(j…üIÛn‘Å“­ÃúæÁÈðB˜Kù(ßUsë0Ú¿ÑgifæšHÔç@á¢jëý–¦§sebb±¶ w”ðàLs¦Û uD°äâBve =${ ÒPäÞ¸ñ/ñGÀ ¼_퀢B…IEND®B`‚Slic3r-1.3.0/var/bullet_green.png000077500000000000000000000004471327442435500166400ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¹IDAT8Ëcøÿÿ?%˜aÔì8ì²’âûí–Wí7[\µ]kÖ`³ÌDŠf_›þÿУƒÿwßßõê™Iÿ-æ6m€ý6Ë«ø?õÒÔÿg:þ/¹²è¿ù½«D`·ÁüêÖ;[þwŸéúßzªùÿÜ ³þ›tio€õr“†©§'þ_|eáÿÙfþŸp¨ç¿~™*ñ^°œg(e1]¿Á´OçªQ«æUÝ"å­D9©Ñ”H#"⫚¦üIEND®B`‚Slic3r-1.3.0/var/bullet_red.png000077500000000000000000000004371327442435500163110ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<±IDAT8ËíÒ- ÂP…áãÝGY°ïZD ‚ ›\ÃÆ¢¢Ñb,EaÍf°]ĬFe0/L‡0Û©xA¿ %ð°àÒ‚ÌM(m@]ä p¿ä«/™Ç>— &¾Ï*²0ð0¡òxÍ,ìQ·Ôã!w0Ta PÙ|FÝnò^¯1Bư‹yó<êÑ€iðÜér §ø…#„»‡[Xj[MàÈU·,ñOÀñ|Þ‹ëds)IEND®B`‚Slic3r-1.3.0/var/bullet_white.png000077500000000000000000000004241327442435500166530ustar00rootroot00000000000000‰PNG  IHDRµú7êgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿ‡Ì¿lIDAT(ÏÕ± €0DŸ¢!8VVpçÈ ™ÊBkµ AÌÙˆ±¶âýæxÜñ ñ®’ïU²sKr²Ý|cÝ7 ›¼¼VC¢Ï S³¨‘ÉnÑårhh.;2Úq¸h-þðêz>2µénpÇtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/cog.png000077500000000000000000000011171327442435500147340ustar00rootroot00000000000000‰PNG  IHDRµú7êgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿ‡Ì¿§IDAT(ÏM‘?hQÆïqi4i/˜ÜÕ€±ƒC&¡8(vPpvîd+8‰“І:ÚIzèÁ.. ‘ÚAK ¡ÿBB jî’»÷ÞCƒíoüø†ï'RŽù4§g ª1óì8G…fÕ˜¾nŸ/¦lvsžÎ«òí€húfWï)W™ˆˆ1£Üx/Þmø£ÂNÍž¯HÇÓûÚ2 qÕ~Å›‘gç×À‚X¶SD„kKP‘ñ÷éPŽ6l,/1üæ;¦°P„4WÖ@l~Ö%m{N@Á£,NýòÕ›õž tG|0å!ÉÐâëÍÚ;ðoÞz„äqy’HE„Æ’g…&ÁbýÜÞ.9ö%g@™Ãú* UŸ$FÒèõÕ)°¶<¹¨±üÀpÀ€õ•§5ðj)^˜ÀbŒ.`“åSdî-Qâ‰Óìð%¹ë"áE*Â+v‘‚h&£êþ¯;A§0}fë–§ñÛÃéd+,©çoîþ—õ ª&úÙöµbÀËnêÉüŸòëÖ ›GÜŸëÎFˆÆÚ Ýÿ”óºªià ¤tEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/cog_go.png000077500000000000000000000020321327442435500154160ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<PLTEÿÿÿËËËÇÇÇÄÄÄ¿¿¿ÑÑÑÎÎÎËËËÇÇǬ¬¬¶¶¶²²²­­­ÑÑÑÎÎÎÊÊÊÆÆÆÂ²²²±±±¬¬¬§§§£££ÐÐо¾¾°°°¬¬¬‹‹‹ÊÊÊÄÄÄyyyqqqÅÅʼn‰‰ÈÈÈÄÄÄÀÀÀ‚‚‚www~~~ŒŒŒ‡‡‡ƒƒƒÄÄÄ„„„ššškkk¿¿¿“““•••aaa£££   m£7g¡3b0XXXSSS¬¬¬5‡-ƒ«««¦¦¦%¤¤¤ƒƒƒ%yyooodddvvv$w yooojjjzzz[[[+ƒ!yymmmXXXQQQRRR!}yåååäääÞÞÞÝÝÝÜÜÜíííÛÛÛÖÖÖÔÔÔËËËççç···ÙÙÙÒÒÒÈÈÈÌÌÌÉÉɺººœœœ¡¡¡ÂÂÂÆÆÆÁÁÁØØØÍÍͼ¼¼ÃÃÃéééÎÎÎ¥¥¥p¤@eŸ1âââ±±±h :³ZW˜(ÀÀÀÏÏÏo¥=|¯UªË‘t«OEŽÅÅÅk£7°Î–­Í”¨Ë¼t¡ÇŠh¥FÕÕÕcŸ1Žºo‰¸k…¶f€³a‚µg˜Âƒ\ <¦¦¦[›)©Ê¥È¡ÆŠžÅˆ…¶j—‚f¥HQ—"J‘D;‹^Ÿ:–Á€b£F½½½²²²_¡C{ÿÿÿ“RsÆ[tRNSc¿¿c)êê)›ýççççý›{ôþþô{}þþ}……ÍãîÆDDÆîãÍýDDýýDDýÍãîüüþãÍ…û}þù{ôê ›ýçí)êêëÔc¿¿cë²×GbKGDˆHùIDATÓc`F&f8`ec爎áäâæðyùøcã„„EDÅ@|ñø„D ɤd)é”Ô4 €¬\|rzbRrzFJ¦¼H‰brVvNn^~Aa𫬢ZT\¢¦®¡Yš_¬¥­Ã [–”]^¡ÇÀ _Y•SgÀ`XQP\cÄÀ`\[WßaÂ`jfÞXÕdaiÕÜÒÚfm4Ŷ½°½£³«¥»§·ÏΞÁÁ±¿=eB×ÄI“§L6݉Á¹$v†ËÌY³çÌ7«P‹»‡§×ÂE‹—,]¶ÜÛì_?ÿ€+ƒV‡À=¹: È;wF'Šœ„ÄtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/control_pause.png000066400000000000000000000011261327442435500170360ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<èIDAT8Ë¥S=kAƒ(Š(r‚6‚…ÕXha©½mêt^¥þ Mig¡!¥…`k'¢Ý¨• j!‚wøýµ™Y½Í™&YöfoæÍ{] c þ³¬_F£QAÓIŒ ¸^¯*î-ÜÑh´g®·˜`³‚yN’$Ùét‚ÝnççûýÖë5Ìf³>‚”b±XY4Åp8Tƒ†ÅŒíº®3MÓØn·ãg›Í†u:­Ýn+Fgp§ý …dšºZ­°yˆÏçƒív Ýn—˜¼¤R©Þ`’&ÚFs¡P€J¥*š‹ÅW¨VßI ƒ2²I É0úAZ nƒÙý›ño ÁëõRm’Î š~8(„aœ€Ëå‚óùf­Ôtû~4Ù\s<át:™JæØl¶;>ó[3I].—  €ËåÒ"ƒ/’$߃rß`A5Óé”$´„‰¨½1ŸQ›ì÷ûAQ2âžÐÊdn¹Ûí†ù|ªªö1m‰D¢‡®–ð’èDÏãñ€Õjå¦ÒNAÍx¡ÙlêèA A{ß®r½^WP[.Ë@€¡˜/;'yóå¼ÏyÏw™€‰qsI“E“UÓÔHÖÑšéÏúqãMæ»/%[àã1ÙO3‰C!Î&…ݽób'GOûë6¬ÁÚß#óY_¨lf9¾&¬ô@=5Z](UêÞc¹…ͬkuˆ0£™M}•ÛðSº}¨Ë=45;}²&+]ØÆdÏúBÌ€sal쬛«R*?ºÀ‹C•Ŕ겹æn¯ð8Ž –óÆØºùâƒÜr' óäì\w%HüR¹ï@ù#4z` 9bpfŒŠ¦ ÷ ]‹B[l@­Ñ©¥Â‰¨Àâêk½˜Š$Ü,,@v¼¡Žkm¢Iû6\›gI:ü盛°â]ÐKûq–°»ê‘±¸PmÃù{A¸Jø/µz°¸ôÜX?|N2¢Ü†¢;’È,äOÈU ðžpcñdÒE(×Áâ fèB©ƒ•å"4_¦X2^¯?€­OI°»ß›hºã«Ú‚¡('Hmã$t¥Ë-ã8ќѺ;Ÿ,sWÜéá1ê‰z·¯½ É|½I’ˆM•¤Á1ðøÐœ.ÖÁáñÉ3Ôú¯‹4~•ç¼Qû²‹Ä2Pà%²'8s2/ÀF(sÔ7í|ó÷UL7Ÿåm³O7èG®%†šw ´ðÐáafúú÷cúŸçü? sq"õ–IEND®B`‚Slic3r-1.3.0/var/control_play.png000066400000000000000000000011201327442435500166600ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<âIDAT8Ë¥“˪â@†ÏCåò8«<ˆ‚"èÆ¢ ®‘ ¢*ÞÚËÂ…÷kÔxAQ±¦ÿæ$"s8Ã0 EBº¿¿ªþê|ÑÇÿÄúý¾Ôëõ´n·«w:ƒ1f´Z-½Ùljõz]úV€Ã2‡Ùz½¦óùLÇCÄét¢ÅbAµZU*ùKOؼ^¯„…çáp Ó4ér¹ˆo-—Ëf©T’ß>Ëf¼Ûíh»ÝR>Ÿ'Ã0h³Ùª²Dt]gÙlV²x¿šuÀ‚:?)—Ë x¹\ŠÀ ”J¥4[€›¥C¥´²:N<£€áü@‚D"¡ÛívÛ€Yûý^ÀȸZ­8ìárý¢jµJ³ÙLÝn7ŠF£†-ÀÇ$P¾ã `Uu‘¢ü{ÓéÔ®"‰¼†ÇцÕ+ªªúO&1™ápHápøÕŸ¯†Íçó)Àù|.ÊUEÀØÇ4è~¿S±X¤`0ø2‘ÏU* `!°"+àÃŒ‡ôv‘2™ŒœN§M¸ƒÇãÑ®— ™!ÂAÓçóÉ_^åd2)ÇãqÆ[-ÀôŒ¹c”dGþögŠÅbR(Ò€î÷û ¯×kpHw»Ý—þú7þküFF?ÔE·E IEND®B`‚Slic3r-1.3.0/var/control_play_blue.png000066400000000000000000000013151327442435500176750ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<_IDAT8Ë¥“MoQ†ûüüXºtîš.º3qcÂÆÄESW%5ÕEc a,QL›Ö*kª¶©‘ZéŠi,¥ èP˜Áa``ÊqÎ…©ºó&ïfæ<ïù¸çŽÀبn,‚A•I•YÕäPæá7ßñ£à5UÆo‹ïàŒ §éØÉ)'¸ý£$ýj/GMyy Æ`ìƒ!|Ý([£§Y†­ J]P.ûD– ¥ Á£8³´“µb¬f¢Ž'¿‹íŽx$¹¼ØNU³Ó#ßDI†ýpDtm¥ÐÄH °/,3kpU¡òS†·á °uÊõ”øŽn²³d؎ L>ú…eÂÞz€Ã Ïjm"<ÉÜ98¼! Y40¿¥hìKEPËzsvèuˆ%p¡Ú¡¥ÀE]‚åõw4²h0‰p8¬Z£K`ÌXäÚ*ü™hâQü1r‰ÉÊ%¬¹×9d‰Áq4N °| Æ@ÏÀøŒŸü˲ҰŠ.,¯¼Ô Ì_¾&èºØ†¤è½bàÄ}Μ·Èͤ‹up¸Üz &·?CJ5è÷€ù ‰”;>ó‰À¦Ë-H•ZÐíõa÷0Vç}ˆ†ûžªÅ3œ0˜2fC!¬ÉR“$ȨÙíÏV™;ÎôàµErlD­›"ËëME¯— 3§‹<Ø\qÚ±õ{‘FWyÞ¶®z7™P$V 3Ážy¶Q˜w,1Sö÷¯òècºû"o™}¾M=Y\¡OÜ‚âÛ\ô´ÍGݦ’ÿ~LÿóœxWÌž%IEND®B`‚Slic3r-1.3.0/var/control_stop.png000066400000000000000000000006231327442435500167070ustar00rootroot00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<%IDAT(Ï}‘MKAÆýPóæ”}…Iï! ÅB]ºuèÐ)ˆ˜C(AHeãËÁÚ–µŽ:Ö’”ôô쬔lÏeØßïÿ²39äþÏ÷¡#Úª¥›Ö؆¾U×"#tdÛDˆ±`^1DÝ\ÉØÍÌ1ƒÃO1.]M.67 ž` ËŒyE›sá…–Š2ø‰º8Q^hê˜m¸ÎäQ$r“1Ž´îìSâˆ0ï…G>Y‘4xx>PE.YfÊ­`È‚ˆåEÉS7âÇßDZ:Dà*råªå¡©sDÌÙ]hTLIfë@ì¨m½e˶¤7UYüzÍ¿ò(Þyv-|úHIEND®B`‚Slic3r-1.3.0/var/control_stop_blue.png000066400000000000000000000012671327442435500177230ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IIDAT8Ë¥“MoQ†ûüüXºtC¢û&FMܘ°1qÑ´º!n\4¦KÓ¦µJ‚&Ô¶©I¥#ˆi,SJ>,С03ÃÇPŽsî0#jãÆ›¼››ó¼çãž;S“º¶6]]N]Óc9Çw¶?ã'Á+ºìsodWøÓ)?Ì1GÇ'›J ûæõ‡"=]ƒ±¿Œá«ÁhÍÍž8¾)ƒ¢@»µ:}¨ÖEˆ¤¸¥‚cMÓÀŽp*óMéö4À£ö‡ *tµ{Cr§¨}ØO$ÿVMìÄû²1³ 7ä>Ôô— Õ¤TÅže²³ãî¯ñØŽ aæ;eÿ >mv‰ðdŠg@…â4²hàŒ}Í2Ø3–j‚7mz¸·½,Ë.È Î%–×7dÑ`:yt,à°š­1#‚¦Ð t®B±®£¾vkuYbpȦˆ–pEèZðõ¹Üò°PàU"£Š,¯¼² œ¿¤IéAKÕ¬^1+‚¨› †Aþ¬C^&W‘€ò¬Ý<]®6a4’Á,×ÌŠ`®Ölµƒáö>§ÁíÛ´†h{l¸v£ N)_fªm’ ¯g÷>_åîúrÆ3š‹D½eÝ‘÷Q…@©­YÕà2aæ\E?¨ÌR[¿ir•ç ÷j(ÂÅ“y(ó2™ öœ. °eažZâf¼ïþ^åÉÏtïeÉõøÅ6ýtq…¡žù„/-<ñø™YO˜¾Cg.ÿLÿóë8öÇu‚éIEND®B`‚Slic3r-1.3.0/var/cross.png000077500000000000000000000015161327442435500153200ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<•PLTEÿÿÿø`cÿtwÿtwø_b÷[]õVYýorø^aóQTòMOûil÷]`ðGJîBEÿsvþqtùac÷\_ðFIîADýnqüknïEHîACûgiùcfïDGî@Bø^aöZ]ïCFí?AöY\ë9<öX[è02õWZîACì<>å'*õVYî@Bì;>ë79é25ã "óQTí?Aì:=ç-0æ*,âðGJí>@ë9<å%'ä"$í=?ë8;ã!âÿwzþvyøadùhjÿ~þ~ýqtø_bûmoÿ|~þz}ÿ‡Šýy|ûilø^aúlnÿz}÷_aýtwÿ‚†üsvøbd÷]`újmÿy{ûmpÿ~€ÿ{~ÿy|ÿwy÷\^ÿy}ÿ[^ÿX[ÿtv÷[]ÿvyÿVYÿTWÿprðFHöZ\údgÿrtÿpsÿnpÿln÷UWî=?öY[úcfÿqtöXZôMPÿghõNPë46öX[úbeÿpqöVYòEGÿbcôHJé-/õVXúacöUXñ?AöJLê/1òLOÿÿÿÞ5¥>tRNS ++o>++¨)++oý++üüüüüýý+++++üý++üü+AüüAAýüAAh,1|bKGDˆH¼IDATÓc`@ŒPš‰B³°²Aøvöì šÃÁ‘“ Ìwrváf`àquswååc`àððôòòñõó)   —€&)#-³NV.6.>A^n¿bbRrJjšŒ¯œž‘™•“›§á«æ©©—”–i€øšå•UZÚ:ºÕ5µuz@ýú†FC#ã¦æÓV3sma á30XYCh[,%—$cŸÌøÑtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/delete.png000077500000000000000000000015141327442435500154270ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<›PLTEÿÿÿâmmájkÝjhÜdcÚdaÙc]Öc[ÔbXãlmßjjÑ^SÎ]PàijÌ[LÊXHállàijÇWEÅVAàijÂT>ÞjgÀS:Ûid¾O6Úc_¼P2×b\ºK.Ô`X¸J*Ò_TÏaS¸J*µK)ÍZMËYI·J+µK)ÈXFÆUB·J+ÃT?ÂP:¾S8½Q5¼K0¸N.·L+µH'퓎øÃ¾ùÓÌùËÄô´ªâpfò­ªýÜØúº®ú£‘ú‹û©œüǺé{pó§£ýÛÔúš‡ð‘ñŽzø”ù’~øŒvø¶¨ãncêƒ}üÔÍ÷“~îŠuö„lóycø¯¤ÐO>õ¯¥ú«ðŒwì_TòwcôŽéxù¹¯ú“ð…pÿÿÿéYMîj^ñ–÷«¡ø†pö‚hêf\ñœ–îŒ÷‘~ós]é[Oðƒ{â{uÛVKö«¢ðdVîfRæXLæZRõ£ŸÄP4ãkaõ¬¡ê\PæYNæVLæVPô¢žÖ`Tàe\õ¦¡ï†~éc[ç]Yî„}ô ž×]QÌR<èzuî’äxqÁM3&¯‘3tRNS#}ÛóóÛ}#SææSôôS"åå"~~ÛÛööööÛÛ~~"åå"SôôSSææ#}ÛóóÛ}#w¤öcbKGDˆH¿IDATÓc`À™˜YXÙØ9`|N.cS3s n(Ÿ×ÒÊÚÆÖÎÞÄttrvqus÷ðô ˆxûØúúùA@`(P@,8$4 Â#"ÅQÑ1±`Ÿ JLJ† ¤¤JdÒÒ3âÀ 3+[( —“›—âËKJÃÊâÊ+*«ª•”AQQ­©­«ohljVS‡8UC³¥µ­­½CKæm]=}C#¬>ìÏ0°§—ÃtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/disk.png000077500000000000000000000017161327442435500151230ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<ûPLTEÿÿÿ6k¼6k¼6k¼6k¼6k¼6k»8k»>p»5i¶6k¼ßéø½Ðì^‰É5iµ6k¼>p»6k¼5i·7kº1`§5jº1`§6jº5i¹5i¸1`¦1a¨6k»6j»9l¼;n½:m»ÑàöÑà÷øûþ÷ûþöùýðõüêðúíòû÷úýëñûÑßö€ªéöúþöúýdŒÈîóûêñûòöüñöüâìùÛçøºÐî½ÐìÐßö~¨èéñúîôûèðúÝèøÛæ÷z£áÃÕïÌÝõ~¨çfÉéðúóøýøúþïôüßéùÛç÷Ùå÷x¢à©Âç5h¶ÉÜô}§çáìùãíùîôüó÷ýåíúØåöw Þ¤¾ä4g´ÇÙô}¦æeÉgŽÉl’Ëm’ËiÊeŒÈtœÚŸºá4f³ÅØò{¤ãz£ãz¤ã{¤â{£â{£áy¢áw ßvŸÞtžÝrœÛtÜšµÝ4e±ÂÕòx¡àužÞs›Ús›Ù•°Ú3d¯¾Òðz£âwŸÞvŸÝr›Ùq™Øp™ÖŽ«Õ3c­6jº»Ðïz¢âm–ÓŠ§Ò2b«8k»¸Îï÷úþˆÀbj“Ï„£Î2aª8l»¶Ìîz¢áÂÜ¿hÍžÌ2a¨³Êíz¢àeÊ|›É­Æë­Åê|šÈy˜Ç5h·5hµ4f²3e°3d®2c¬2bª2a©1`¨ÿÿÿ€\WtRNSqÌîúþïËT›þûìcØøðþþþÞíµîñÄéÑî3bKGDˆHøIDATÓc`dbfae“‘••“W`çàd`àRTRVQUS×PÕÔâæáåcà×ÖÑÕÓ704R66153`´°46Ö·²ÖTµ±µ³wb`ut²±qvqus÷ðôòöñe`óó Ò ñô `‰ŒÒމ‹OÐ××OLJfMIMKÏÈÌÊÎÉÍË/(,b-NKËÌÌÈ. +-(+¯¨d­ª®¶ÏÌ*©©-¨«ohlbhniU†ƒ¶ö†Î®ìî(Pííëg˜0qR÷d(P2uƒðô3g‰0ˆÎžƒ0cî<1q Éù ".Z¼dé²å"RÒ[QÌ‹´ tEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/error.png000077500000000000000000000014501327442435500153150ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<ŒPLTEÿÿÿì¿=ë¼<êº:è¸9ë¼<çµ7ë¼<éº:æ²5ä¯3é¹:ã¬1é¹:è·8á©/à¦-è·8Þ£+è¶8Ûœ&è¶8æ´6Ù™$Ø–"æ³6ÔŽæ³6å±4ЇÍ€å°4Éyå°4Ãmã­1Áhâª/¿dñÔ…ðÑ‚ýúñúïÕòØ”þüóþúçðÓÿýùùé”úëžþúìôß©ýùíÖ£>üõÔñ×¢íÈqÿþùôÜ^Õ¢>ôÙ\þûíå»h÷êÈýúæôÚ]Õ¡=ò×WüóÇôãÀðÒŒþûêøæ”ôÚ\ݱGò×VõÛ\ýøÞçÀ}þûóûòÃöÜ\ößdëËWòÖUõÙTøç”ûôãñ×ýùçøå‹öÛZôÚ[òÖTõØRôÖPüöØå¿ˆè¿bþüôúïµõÚXóØWò×XòÖXôÙWõØQô×NöÚbÒ“Dõã¾þûïþûîþüïþûìþüòëΫà§-ߤ+Ý¡)Üž'Ú›%Ù˜#Ö“ ӌυÌ~Éw Æq ÃlÁhÿÿÿ àq'tRNSÔÕiòí´–0ýü0ÔÃZZ ìä ª‡$ûù$Ê´KKãØ¢¢ì½sabKGDˆH¶IDATÓc`À™˜YPXÕ5ØùìšZœ\HÜÚ:ºz<>/Ÿ¾¡¿\@ÐØÄÔÔÌ\ƶ°´²¶¶±µðEÅ윜]\Å%À’nîž^NÞ>¾~R ¾´Œ@ gPpHhX¸¬P@>"2*:ÆÉ)6.>!QA1)9%55-=#3+;Ç=W‰A9/9¿  °0¿ÀÖ¶¨¸D…Aµ´¬¼¢²ªº¦¶®¾¡±I Ãß7+&Nµ8M„tEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/film.png000066400000000000000000000012151327442435500151070ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDAT8Ë¥“OhAÅßn»›Ì›ƒ‰ ÒRK‚%Jðè©zQAP4ƒ ÕKO¼yôdÿ€^Ч*DêQŠT4"RKmN‚ZIcgöo tד ?v˜ï½7ßðíaâžÁþ¢Z­¾‚`”|«Õj¹8q¹\þ ”Êyž·R¯× И÷}ÿ>9[©TbÛ¢Y3CG: 1AN0]e§f¼¤™€ôBÈ8—½†‘púü‹Aš'Éö¾Ïì/h|G®“¥WÖMÑa:ŠŒh¢(Òâ‹R.“{¤逯!2I¼´õÏ{ Ø=p¦?ŽùÖq4ÚòŒÇÓO’t\€"M'ܰgS m9ï?Šhub©›Õ÷ˆÖ¸‘nÊõ€‡ÜlÇ1ôÒ«À– …ÛRb=`g\À9æºniþâ瘘¼‚ܦ5Z°FæšÍ¦7~yn—à”Ht*sÃ)ûö¿^d—©+G¦Àt›Œ‘—?¯`Í_Aàë`àSw3†¼7úSkø¶#°`± ‹Æ¿¦ Ô#SkØ…逅™%–žÂQ~9NfÞÆ X ŸàY·­5ͳ¤×A‰‚SdëÌhhJ £—âÜ» ÐPj„æ½übKqôª[¶mßyzékd@ŽãlhµZpäwIÿΚb±¸X(d>Ÿ_èïýM2™ühYVhšærï©ñãЂ¬IEND®B`‚Slic3r-1.3.0/var/funnel.png000066400000000000000000000012011327442435500154420ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<ÞPLTEÿÿÿŸŸŸ›››ÝÝÝÌÌÌ———ÖÖÖ“““ÐÐÐŽŽŽŠŠŠîî†‚‚‚äää|||yyywwwªªªªªªªªªªªªªªªªªªªªª¢¢¢ŸŸŸ———“““ŠŠŠyyywwwwww¨¨¨¸¸¸ÇÇÇÔÔÔßßßçççìì쥥¥ÜÜÜÁÁÁ¤¤¤‰‰‰www¢¢¢êêê°°°ää䪪ª´´´ÂÂÂÌÌÌ›››ÝÝÝÀÀÀ———ÖÖÖÐÐПŸŸŽŽŽ¼¼¼ŠŠŠ†††îîî‚‚‚|||yyy···£££ÿÿÿ}¬ôµ"tRNS#W†¯Ðêú@€@€@€¿€*‰$bKGDˆHÂIDATÓ=È×ÁPEÑÁè½÷è-Hp!DtÿÿEÎõà¼ÌìET,•+ÕZ½^«VÊ¥"õÃÑx2Nƣ᠘™æ|±´¬åbnš3@Ã^ýg7æzƒ©íNT3†öâ8à°ç i]×[Dc±¶}:©í¹ÍęٻˆRž8 A”4|Q¾@P ¼ÞäŠf¥™ûFî”D®<4 (à§ÈS‚ò^ïOG‚ zV·÷»ú‹ð6ƒbž_tEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/gcode.icns000077500000000000000000003432551327442435500154310ustar00rootroot00000000000000icnsÆ­ic08¸ jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefAjp2cÿOÿQ2ÿR ÿ\@@HHPHHPHHPHHPHHPÿ ÞÿS ÿ]@@HHPHHPHHPHHPHHPÿS ÿ]@@HHPHHPHHPHHPHHPÿS ÿ]@@HHPHHPHHPHHPHHPÿ“ßz¡¶o‘ë½L_Ï×ïŒl‚£ F®7Oôy}´­·¢Xñ¾kªn ¬UªÍ ýÎÙC’›·D¢3¬ ³–Aˆßz¡¶o‘ë½L_Ï×ïŒl‚£ F®7Oôy}´­·¢Xñ¾kªn ¬UªÍ ýÎÙC’›·D¢3¬ ³–Aˆßz¡¶o‘ë½L_Ï×ïŒl‚£ F®7Oôy}´­·¢Xñ¾kªn ¬UªÍ ýÎÙC’›·D¢3¬ ³–Aˆßz_¥Wt8¾yL°×X)83êäEM bdÑZp3Ž£—¢å^l `óÙ¥h”R!bncËj¾vþͽ%“ϼâ}æ÷™€ËèÐo²”‰½ÎƒrÐwz§üiþi¤>ùšÊvX;E.’à Ý%™åºãÚ’‚%c¥ûšO†<šú„±Õb ´a­A[%Ônɨ·`¬c9ýB'Í”k¨¥ÃÙ:ŸQK¶“&=Å+ÜS2Ð`kwoÝaX9 vÂŽlÍž¿¹ã1SSGjy]Ÿ B”/d„¥ó r½jϼâ}æ÷™€ËèÐo²”‰½ÎƒrÐwz§üiþi¤>ùšÊvX;E.’à Ý%™åºãÚ’‚%c¥ûšO†<šú„±Õb ´a­A[%Ônɨ·`¬c9ýB'Í”k¨¥ÃÙ:ŸQK¶“&=Å+ÜS2Ð`kwoÝaX9 vÂŽlÍž¿¹ã1SSGjy]Ÿ B”/d„¥ó r½jϼâ}æ÷™€ËèÐo²”‰½ÎƒrÐwz§üiþi¤>ùšÊvX;E.’à Ý%™åºãÚ’‚%c¥ûšO†<šú„±Õb ´a­A[%Ônɨ·`¬c9ýB'Í”k¨¥ÃÙ:ŸQK¶“&=Å+ÜS2Ð`kwoÝaX9 vÂŽlÍž¿¹ã1SSGjy]Ÿ B”/d„¥ó r½jϼ’}äò€ËîÌö?Œ¬TèÌkì"~ã}È6ùÍ*©”ÛnÔ9CÆ Nç<䢩¿¡DöÂcüVóÆ z[(¼Y¥ˆu\‰,¦tÌ_N¶¦YXÅ8ë@=zÎ6®Æ¡Ï¾¶Ÿ}q}h¤rC5«M*ÚE{sºÊèHBNC´ NŸ9n¾Œ6â:M/TÀNaTÖtS<ò€n¬xÏ" sÆ5²‰ÕܬÌä±MµU:—ºOr×/˜yÔés€‚aÓŸºÕh`±®”2:^#>WþADÙiÌwÖ¿qVxPõ73˜ Sž)ö¨ i©µÏçÿ8;/µÜP!=Vù港ơÔþv²†I_æ·zÍó¯Å¹¿"c DgeÓuçÅë³RΤ"’e{*93ðž JËEÈ4¡nlíÒÎU§¯iá5Ã2íp÷úgó ŽÜÖ“R4µí¢ ôäUÑ6Bõ˜š4ÿáïàÄvî 2FÃÝWo2R;¸¡P8‚ÏÌ$WÎôC=`l ±ŽâG©0-ª˜B9eýžl¿øî‘“eaª=¹M@;áSÆzª$ù«Ø•ÝÕiW°œ4Ø–Ã[z"BÿA”Š)üÑÐþJÑØÉNÉ3ƒø×E{ŸoÔ@dŒdmòôeôýµ°ÆÃ4IWþADÙiÌwÖ¿qVxPõ73˜ Sž)ö¨ i©µÏçÿ8;/µÜP!=Vù港ơÔþv²†I_æ·zÍó¯Å¹¿"c DgeÓuçÅë³RΤ"’e{*93ðž JËEÈ4¡nlíÒÎU§¯iá5Ã2íp÷úgó ŽÜÖ“R4µí¢ ôäUÑ6Bõ˜š4ÿáïàÄvî 2FÃÝWo2R;¸¡P8‚ÏÌ$WÎôC=`l ±ŽâG©0-ª˜B9eýžl¿øî‘“eaª=¹M@;áSÆzª$ù«Ø•ÝÕiW°œ4Ø–Ã[z"BÿA”Š)üÑÐþJÑØÉNÉ3ƒø×E{ŸoÔ@dŒdmòôeôýµ°ÆÃ4IWþADÙiÌwÖ¿qVxPõ73˜ Sž)ö¨ i©µÏçÿ8;/µÜP!=Vù港ơÔþv²†I_æ·zÍó¯Å¹¿"c DgeÓuçÅë³RΤ"’e{*93ðž JËEÈ4¡nlíÒÎU§¯iá5Ã2íp÷úgó ŽÜÖ“R4µí¢ ôäUÑ6Bõ˜š4ÿáïàÄvî 2FÃÝWo2R;¸¡P8‚ÏÌ$WÎôC=`l ±ŽâG©0-ª˜B9eýžl¿øî‘“eaª=¹M@;áSÆzª$ù«Ø•ÝÕiW°œ4Ø–Ã[z"BÿA”Š)üÑÐþJÑØÉNÉ3ƒø×E{ŸoÔ@dŒdmòôeôýµ°ÆÃ4I~y xïüE.+¡åì¥9•}í Ï˜³~PÅŠOâ·ûUÕ9B\Ç—´SÕ’šS™G’¶þ&ó?{ñA=m©*x‡G5_J-ýmA²WG.‘ao±)¹1£ ŠòrìX…k˜yd–ƒôúã iýá&àÜÖßp]þ½ƒm[_áÂÇÊÔAæ½µ¼(Õ[Øa½oj¤Â]Ȉ¨×ÿþûcÃQ«¸?ïñ*t`èˆeùóž „®Î*•#P>Þx˜1²}@…Æ‚ïa}d­Qå²ß&?3YÄvi´OÌ£ÉøÂ%N;¦ íòP³¤Ö{hµ$°È•© ɼ ¯]ÊÄz¸îméþΗšªSÄX$¹¤pLÅ ˜îãšö§›—2¹qP>qÛƒ™Ð× u'pª ³+4ÇÉÈ[ÊŒ¼à Áe ²Ÿ´'-…ôi”:"Ò1¡Ïyë:%±Å<— n²õ(‡y;b¶ÊL}x}޼ͰýŠÄJo´K,­ ¨•|–ÌbØ£¹_Z4Má»ÆÑIÿ8çÓžÓ4:qŽ®!¹vXÏtñ»Y¹ã Ö£D¼ÑÛnpš>ÎÎrr4D)bÝä$l‚N•nMöj([A;mp… ¦ñµaÈZ ˆÛ¨ˆ³ØIa÷?(í8aD-©G]ã-’ ù*Uà'UÙJ½°± ©üàSï• 4¤£Q´D¬<¸‰Ma´È§H\š€6îuÞ@3ê)fjX6áçoΡmÒ&/"4èÂ-–q¬üoãºúYÖÞµ=y¯äP)""-y1›„ê‚ðf4-Xwkesê{h¡è¿).ÚÓ €ð¨Ô:¼OÍ‚×êàã^¹–R8!Pô]ªxš¯3s“/"‘ hx ŸÏóÔuPƒ±'öv8¬OŽ}Ç]2|¶ º†)žVÈ$`-ùf"EJÜ Íߟc*‚D¥Ær'½|R=p0žçSâìÕn4¨\WåvdgA ¾ØMfð¯ÜÎNî¤ÀÛkrÿPeˆ:ô f»G•Åuz­W$[¯§ß>j¦&3tNXøKF•G$ŽÊÓ¡f䞇 }P*-Ë‘2+êNiÁê½Gý›}ŒW3}q‚,R/ä,‰ŒMû¹j è¿^~¸´YOd p™É2ŒÌwC?zçR±ÇãÿLƒ[²¿z*ûZõåD§¶f¸M„›M¾eò̳TSã,›µI·tto†ÿ±Õ¦o›Bko²>¤5¸?œåä†sžãpwš$`¦ÅÑGÞ\ªÝ_¨Aø[Û>`ã…D©àEI±=´OÄÛ¬'©¨Æ‹hi=Ð(Š/pç_ô8R2ÒËF·O!ÛAÀµËÄcŸÈ"åL51Íóσhá°Ó(†M8jÇT¶À•UyÁ0Ú´÷Sx,äõIõ‚ì·ëÀ:U5ÃoëYßL°Ö­’B+õ=¥rîŽ÷ßü£D©[@ù¼å´] ¬`9ªræžH ýaÁûòÚD“¼4ÊÂÀýĨZ¹ž¾SÁ«fç;ɦT\É’SËî‚MY˜u½ÃlŒyy'¡HÎ’Ç䦜^ù¥ysó—+áÏb½G‚¬!ÜR¨ÏŸbé>¿q´Þ ^·i"¬fΫ*Ðç…fk4;Ïõ $=£38¶Øñ å–ð7—D¥Zq*G¸IûŽF— ÜGЛ™TcÝ/ë{Ö:Ïæ¹øt_‡DÀ%;Ó ¨ ¹óëÒdxŸ QÂãÊ.¬8aî?b„O‰¿¾!M:â6ëœ}-”$Œ‹—ñL¡5˜E²ÄO5tŒۯÄÞA6Zûz~y xïüE.+¡åì¥9•}í Ï˜³~PÅŠOâ·ûUÕ9B\Ç—´SÕ’šS™G’¶þ&ó?{ñA=m©*x‡G5_J-ýmA²WG.‘ao±)¹1£ ŠòrìX…k˜yd–ƒôúã iýá&àÜÖßp]þ½ƒm[_áÂÇÊÔAæ½µ¼(Õ[Øa½oj¤Â]Ȉ¨×ÿþûcÃQ«¸?ïñ*t`èˆeùóž „®Î*•#P>Þx˜1²}@…Æ‚ïa}d­Qå²ß&?3YÄvi´OÌ£ÉøÂ%N;¦ íòP³¤Ö{hµ$°È•© ɼ ¯]ÊÄz¸îméþΗšªSÄX$¹¤pLÅ ˜îãšö§›—2¹qP>qÛƒ™Ð× u'pª ³+4ÇÉÈ[ÊŒ¼à Áe ²Ÿ´'-…ôi”:"Ò1¡Ïyë:%±Å<— n²õ(‡y;b¶ÊL}x}޼ͰýŠÄJo´K,­ ¨•|–ÌbØ£¹_Z4Má»ÆÑIÿ8çÓžÓ4:qŽ®!¹vXÏtñ»Y¹ã Ö£D¼ÑÛnpš>ÎÎrr4D)bÝä$l‚N•nMöj([A;mp… ¦ñµaÈZ ˆÛ¨ˆ³ØIa÷?(í8aD-©G]ã-’ ù*Uà'UÙJ½°± ©üàSï• 4¤£Q´D¬<¸‰Ma´È§H\š€6îuÞ@3ê)fjX6áçoΡmÒ&/"4èÂ-–q¬üoãºúYÖÞµ=y¯äP)""-y1›„ê‚ðf4-Xwkesê{h¡è¿).ÚÓ €ð¨Ô:¼OÍ‚×êàã^¹–R8!Pô]ªxš¯3s“/"‘ hx ŸÏóÔuPƒ±'öv8¬OŽ}Ç]2|¶ º†)žVÈ$`-ùf"EJÜ Íߟc*‚D¥Ær'½|R=p0žçSâìÕn4¨\WåvdgA ¾ØMfð¯ÜÎNî¤ÀÛkrÿPeˆ:ô f»G•Åuz­W$[¯§ß>j¦&3tNXøKF•G$ŽÊÓ¡f䞇 }P*-Ë‘2+êNiÁê½Gý›}ŒW3}q‚,R/ä,‰ŒMû¹j è¿^~¸´YOd p™É2ŒÌwC?zçR±ÇãÿLƒ[²¿z*ûZõåD§¶f¸M„›M¾eò̳TSã,›µI·tto†ÿ±Õ¦o›Bko²>¤5¸?œåä†sžãpwš$`¦ÅÑGÞ\ªÝ_¨Aø[Û>`ã…D©àEI±=´OÄÛ¬'©¨Æ‹hi=Ð(Š/pç_ô8R2ÒËF·O!ÛAÀµËÄcŸÈ"åL51Íóσhá°Ó(†M8jÇT¶À•UyÁ0Ú´÷Sx,äõIõ‚ì·ëÀ:U5ÃoëYßL°Ö­’B+õ=¥rîŽ÷ßü£D©[@ù¼å´] ¬`9ªræžH ýaÁûòÚD“¼4ÊÂÀýĨZ¹ž¾SÁ«fç;ɦT\É’SËî‚MY˜u½ÃlŒyy'¡HÎ’Ç䦜^ù¥ysó—+áÏb½G‚¬!ÜR¨ÏŸbé>¿q´Þ ^·i"¬fΫ*Ðç…fk4;Ïõ $=£38¶Øñ å–ð7—D¥Zq*G¸IûŽF— ÜGЛ™TcÝ/ë{Ö:Ïæ¹øt_‡DÀ%;Ó ¨ ¹óëÒdxŸ QÂãÊ.¬8aî?b„O‰¿¾!M:â6ëœ}-”$Œ‹—ñL¡5˜E²ÄO5tŒۯÄÞA6Zûz~y xïüE.+¡åì¥9•}í Ï˜³~PÅŠOâ·ûUÕ9B\Ç—´SÕ’šS™G’¶þ&ó?{ñA=m©*x‡G5_J-ýmA²WG.‘ao±)¹1£ ŠòrìX…k˜yd–ƒôúã iýá&àÜÖßp]þ½ƒm[_áÂÇÊÔAæ½µ¼(Õ[Øa½oj¤Â]Ȉ¨×ÿþûcÃQ«¸?ïñ*t`èˆeùóž „®Î*•#P>Þx˜1²}@…Æ‚ïa}d­Qå²ß&?3YÄvi´OÌ£ÉøÂ%N;¦ íòP³¤Ö{hµ$°È•© ɼ ¯]ÊÄz¸îméþΗšªSÄX$¹¤pLÅ ˜îãšö§›—2¹qP>qÛƒ™Ð× u'pª ³+4ÇÉÈ[ÊŒ¼à Áe ²Ÿ´'-…ôi”:"Ò1¡Ïyë:%±Å<— n²õ(‡y;b¶ÊL}x}޼ͰýŠÄJo´K,­ ¨•|–ÌbØ£¹_Z4Má»ÆÑIÿ8çÓžÓ4:qŽ®!¹vXÏtñ»Y¹ã Ö£D¼ÑÛnpš>ÎÎrr4D)bÝä$l‚N•nMöj([A;mp… ¦ñµaÈZ ˆÛ¨ˆ³ØIa÷?(í8aD-©G]ã-’ ù*Uà'UÙJ½°± ©üàSï• 4¤£Q´D¬<¸‰Ma´È§H\š€6îuÞ@3ê)fjX6áçoΡmÒ&/"4èÂ-–q¬üoãºúYÖÞµ=y¯äP)""-y1›„ê‚ðf4-Xwkesê{h¡è¿).ÚÓ €ð¨Ô:¼OÍ‚×êàã^¹–R8!Pô]ªxš¯3s“/"‘ hx ŸÏóÔuPƒ±'öv8¬OŽ}Ç]2|¶ º†)žVÈ$`-ùf"EJÜ Íߟc*‚D¥Ær'½|R=p0žçSâìÕn4¨\WåvdgA ¾ØMfð¯ÜÎNî¤ÀÛkrÿPeˆ:ô f»G•Åuz­W$[¯§ß>j¦&3tNXøKF•G$ŽÊÓ¡f䞇 }P*-Ë‘2+êNiÁê½Gý›}ŒW3}q‚,R/ä,‰ŒMû¹j è¿^~¸´YOd p™É2ŒÌwC?zçR±ÇãÿLƒ[²¿z*ûZõåD§¶f¸M„›M¾eò̳TSã,›µI·tto†ÿ±Õ¦o›Bko²>¤5¸?œåä†sžãpwš$`¦ÅÑGÞ\ªÝ_¨Aø[Û>`ã…D©àEI±=´OÄÛ¬'©¨Æ‹hi=Ð(Š/pç_ô8R2ÒËF·O!ÛAÀµËÄcŸÈ"åL51Íóσhá°Ó(†M8jÇT¶À•UyÁ0Ú´÷Sx,äõIõ‚ì·ëÀ:U5ÃoëYßL°Ö­’B+õ=¥rîŽ÷ßü£D©[@ù¼å´] ¬`9ªræžH ýaÁûòÚD“¼4ÊÂÀýĨZ¹ž¾SÁ«fç;ɦT\É’SËî‚MY˜u½ÃlŒyy'¡HÎ’Ç䦜^ù¥ysó—+áÏb½G‚¬!ÜR¨ÏŸbé>¿q´Þ ^·i"¬fΫ*Ðç…fk4;Ïõ $=£38¶Øñ å–ð7—D¥Zq*G¸IûŽF— ÜGЛ™TcÝ/ë{Ö:Ͼ‹±ê>ô0%hÒ“‹=ºgX7CÖEðÓ¥3±À-}×ô:Ýeû§^R$>–Õù§Å\ ²e!`FK¿JJiÁKn¼K¨~LŒÀ¿§³dÀÉÀ˜Åhôã·©\†¬-<àeÂÞîëø)fùËsï%)}uPºËri.ç$A¦ê\p@f §_,¥“i|ñäå@©c+â;š‹Yâ^XŠšñ3‡½'–D†äµOË«©r]Û î‰Æø/™+3Ÿ§+JWXžzà?tÿNaKH>÷PJÍ].&â!œ\wР6ä’I$ÄìxïºY ´QÄ4YoäI‰—$’I$“¹w`´oèe×Ze)6 ûÿmZþ¯iTEtd]"Ãл{)DÏ÷…Yà·š¾IÉŘà\Ù¿!ùz9äeÆQ==GÏÃÞ~Û‘ø{t€¾–éÔx6Y*¢o°âÈŒI‡¼ÕÆ únu7]3Çeþa/fTì[èó¸©[㦃ïJEçU,ÃÉ’ow”p†í¤›^!,Òº%!Á,ï þú¬Ã½…妳òîÑŸs}\NxEbFïÊ“ e"úJ•ÆEü(˜ÓyØns÷»ä¯cÛ\¹T¶±swPßäÇíé‰k„ZÉ OlŒ—Ú AàSôbȬT¢Z¹_« §Oß&ù¸¢ò7[üôÌV£[wû½1âÄë';B‡©>ýª‰ç¾ŠË_®Ã‘Ò÷}«õVð,4¶. dØTGæ<´A\@+Yéñ½ƒ@„¶2`_ƒì‰ `Á)¾sêZí×Å“Wä„VøŠDˆurD48±ŒA(°`¶¡“ȧð“8Ìà¶±òÈX«#3d¤©×´¸à墙IèPÚ(b¦ÆœS¿ÃO_ ‘>ÑöP}°=°I,Ô™Gøu`Åles±Ç©8ÐD ëJ²áe«®nñä‹sGÆ•¶y³eVÄ\®`õ¨v[Q*®t‘2â Æ_Ûùw¸=ðé9‰CT‰NA£~ɲ¬œn®eô¤6$|òsG €v˘«M¦ùÊ1•¯ü?µZ_ÚÅÅL `å©6Ð^+¬[d¬(C4ùawÓs"ýüJzWhÜx ‚ïôä rbS™’øq²È”5&Å'ÑõL!èÍ-ãwèZ¬Tœë&ÿe|ŠŒÍž2÷YÉ·6³Âÿ?Ñý‡ð Ëìx_gzNªJq)ä}@eP¯°ßÌïè\î0<|LÅ *{Xi}$•p«æK÷{1XF1Q…# …û¹¢ƒ†l‹cʯX)ñË3Ü ªø…}x„înK§gŒ/’»‡âN§–BU…fm×Ò½¯OJÎ{n8M¬€=è«’@u{>4éßJSûòU@m+®Š÷/Óu‘C—¢&ð—¢üŠ˜D>]: ŠÐÛÈë»JBíuÉÂWe-·1.¯rÔÎYIô3‹K­Øu€5Jä$I¹uÆ,ïÊ¡nw)0˜tXÌ&AÏÓz^…¦Ã–Ä„«t©‹c]eÚ({3­;ZŽB²“lS?7;Î,˜Iç’RPtö¤ûõ5‘!¿ÚãÇ‘‡¸ƒ’k`¨OÊX]­UÊ„µà¤¥!ä7}qzºçîñ$In!e›‰¼„ªQ…SÐø´Þ›ÁScðh”í¡2`7‘QíÕaèÙC­\½+š§i•I ´`¢Zö½~NÇ‚~´`Óxøa8¬;VÁLBT¹]KBöÁ2"í½ vPª&øU ð-¨nÖHREŸÜ¯\Z)Ó@ÚPbÉ$äuˆ#Jæ 7KP4$±\…Dª’óTÖbõ¸v¬ ßôü¥hõ/(n‰@/OÌ7n\õ‚NÀð ²xt~Ÿ-ã~ìœôv:Øxú«Oµèýi({ ómãR*ñý#Q©aј?¹j)Ñ9božè2Ü“>eQ׬B;›ú¢\9Mdq]øƒCàwÿq0Ò7߈ñ'ñó±Õ<éÁ¢%Âh P'Aý5ªDXéçd,»ÔEÓæåòØL)ÿ2íÚ§ƒÍöÜ<ùÝ“¾áÕVÈwÝ1¡0Õ…móscÑÕ”#K Y³‘í?AÕÕÅq}¨8zâ5™M½÷œ\I¶¦Éé:W·%Jy¾ðÚ<×Ìö‚=™«Í7 ͤ=ÖcJ5®á$‚ü¹¾Rpõ !4Ì}ør6¦Iñ_µhk¡TýÅâN|#ܤ·«\þPÿ8çv7röÈ2]{ö‚ànž_â`æ7`ÍÈzƒüJ%á_kƒí"ŸI?GQ„±Àblr¨uÕn¤Æ$•Å6œ³x©®Yh#}[û¹7Ýx4„+ A1›ß \Hd-ÂÊ.EµLä$œ×Ñ,ĬE€Ìm #4ûBþý¢¨Ôà¡·Þ¾oõï Õ½LÝø0Xª÷’·ê;h×Ù`OAH«3xÓˆºÄÐáXéôçâ/Tã5Ï¿3lL“|¹ŒGA!³‡èú»pùs¸œ†ed´t~}oŽjßÁ ]¼7 HÉ´kcë_OÊS©®ÚXÄ ý/…$c÷>2´œªltÒ¨Lçe”7R?°Ôâü0oAX½<·Æ060slÕ0Gþ æ]~Ö‚â.ZŒÂë@í†J¬€Žó[aºôG²‘E÷Ø4Žå,­“3ÍYÞ4² Z!ŸïHÊ#¨ XÔ3é£ôt:8aíDǼ0”šðAY;”¯ˆÆz Ú5ížñÌ™’ó2ÄÒ»½+œ9g'ÃárWX•0ùRˆ\ÁS 0ª ƒ^'4™þü`d51Ô™›«9ÏÑÁh¡Ö…Ûêd }š~#¶µ„þU 'Ev¨Æe~ãÉ85t ÈÂá>Ùì+Íw;½Y“HYº§j{²Ê¿Eýæ%Ÿ„i’Ÿˆ«wŠÈ«ÚhH÷ùH“H‚åÌ»¢®íæûÙC[kÉ…!õE+ϳ §-†—´¥| ’f2ö/©u´çïMùãmâ÷V³B²‚ÒÁM;ÿ_rŸ+÷NPh1=ЧfFQªTô\ Éôëèù ¶up÷$csà^¨’У⠫‚B¼W Ô–û†ís˜öætõÕ`YmI÷`"Yž%:©XºÛb© ¤žAÀ»îClýzU'm<ÒåŸÍJ rwf´=<¹Rߢ| ¢1za­Å"$:Íî‹qž*â~½‘±T¡¢f±yìHDª®²}´SÄ*¦ÜŠîlŒª¢WhV…ãÕý÷o`}GC¾=  ôaïµ z|údŽŠ¾Ûªõ§ózÖ‹¨×âÜ!\U¸/ž’L93y²ô›^JaˆO«.h×Id£§êVÑgdE—eô³"¼MÚs;•ôh…ö$pérBèIíP½"*Uv¹§×…æÒgÄÌP6;üN¶ÓV–A@1ª¹³Š˜rØm®hï^pÜÛ†ÓYì?1¾íÝ>—M­nÁÓÏà˜¥ 2ǨLI¬JúÝßN'š@’¼Íð¶'#ÛCUUK‘²Ú°¦¤ cÔéS^Q(Ì)¥¯´ß-¶í¯šÛ!’Z_Ù_ø¾F×Ä’BüÚØ¯¢(Û ÍÎãÒY¹hŒ¶Õ=%Ь{œ×5ÝšJ¬~§D.Mèż‡½Þï ¥cr'Ò+3$_;ÀŽ«ò“G°ÁŠCd$x 77TÃÕýc’b «toèK^ÍÐŽÊ[³— +“’&*ãªH¡ßdªàô lÙºÿ+ux‡ç|ÂxHœÿŸ$<åŽϪŸ´ 0µžµYønšGŸ% *uù†Äq›T9õx²r*1<@ÚýÝbÖù’¿ gÒb8Çgô_¸Æ°/qVöwñwHü‘”JKRÌóe}|ò,:ã³6 I»7’=ÄjaØøË—h'Õ–(:¢ºè´²×¹?)húÒSôz\wR#„Î(R½!Gº_TVN%jX C\–85ýH9ºœ,©¿€¤òÂÈ·ÒAÔr3葨¬mÖbÓüËÝ9”ÔŸAƒÒ¡Qº¥*Vü·‚•Kø4C¶DüT¹]œÉZ“eªoýS©éùˆ·Ÿ¶E^XnöÞ¿õóްÐÿ'ëRaW½]¸´JÉŠáSÒ âÅ\Cr»Ò#—qË}sŸß@^ª˜ƒPy¼2¶¾ÌS¯ÒP‰ñ’Cto¬™Ìú„.k¦öT²¦Ìäƒ&x"ÃÈj·¿‘¦>Š|ØÃJîˆ XÞTêÛÞ í^ÒnÙæ¦4ßó$ã?©Þ‹wÈÃ%@%ÏY$§Ü#q‰v=Ó¿8» µž¡k@¤)‡uÛ‘XÍDîXáaդд >â²üØF®/Êà£0<Ë!’äa€!K_ñE+ÄÐc‚ROÔ’…ÇRÚzóHG¶Âì‘k/õC m娣ÙU› <Ùu¾ÅD0Ùù-‘³ÜÊ=¯‹_¯½œ³àÔŠ·<ÒÎH<ˆÐÑ¶ï²øùîêGLÜ̶µÞ†î{˜Í¸(Ø­Ãï,³@l¥wÚðZ[v¸î W€æbm¶X¾ô1PR[­,ï'’ fŽÙºnÎ/s áÝÁ<†Ò>Ðð…–=¡f.L˜3X§¡¼ù*4Ý®\ØUÿ†áß²;zÌ”Uë—iåç¢Ï¡4\ÜÁAÜê¸of‡ç§˜Õ±0+q å7]œ¸•MAçž·ƒ‡:Ì»·?ˆ;뵤B.å0NðM£\¨m{_O(Yi+’Œ¾Ú ñqˆ+òù}וPšæÓåLÓñ…ê‡å3ü!¢µœ3~ÐO¸3£:f¹ØÉàáSþ'ë%T): Ùï*©Î¸ítÛ ñäø‘_ ÉSYŽ·PùJ9*Ógªpûœfb€ Ï/*@ãÂ¥ÛnÞ‚4&µ•·ŽîFÞüýqcø·ûÕ?”AZñ·€‰ïÜFlQY±]aAÉ#fšÜÿ!z[BV©ë3’1#º3³Ã[Ä"ñCñr QìÈŸô‰ÔÓIó»i˜4 Œ) íúJÅg%Ï`MÕýæ3°íþÂ,‚RŸ:Ò••_À9ŒÔ›ÀÍ2Õü4úzLz9*ÌÝPx Ÿg—)‰({²{Çz]’ñ¤¿S9¼` Æã5¶Øâ`8÷çú :%U¿Œécã8æ£Ýzwϼbû¾þA…n1’÷t!,-ißü7#¡¯ϨÚòYÕÄYØ5šð‚žQcù4.‚ztÃÎ Ñ—C §Øn)ƒÝúš“87ïឃ›œHhN?sNŠ¡¯M8[“Þ£Ã?Âèø ÂÎH­—üÊ(‰‹Zžo‡ˆBñ`éªÐÚXéÐê:UL/ö*rŠêî¬Â8H:¦°Xx Jè u]Vãüþ”Žz]X*!X¢~5Ô&üõ;yž:>Â:•>”¢ššO&ðL[ä2$+pzùü¶g4M,uºI :|X¾ô[E© ìĶ‘kÜ…θ¹>É8¥Œ{Ò‚>Ƥº!%÷Üq†KðŬö—ð°èxL0 ©G’Úð†•™ß;;3²°¶ËŠ`µ€úµ­g¼hæ;’^¼\û`j–JB#•çÐ"õíßL¨è£.0 îØ´y²™A=;j[ô{^ñž›Ó»¹ošêø#úõÎŽbVbây\÷ó:ï̾¬ ƒ< ñÚ„ì•j @b­÷Q°XÝ­!Œ ú°ìÆõHÔÆ ±-,“·Ú"aÁ 6ææ.Þðòˆq\[šÀ= 8ã œ· MHÝ–ÙVxÏ·ÇÓ¸j÷éÑ« ¸Rzy=JGöß;qå8eúèÖÂñhµÑiªg•Ωv vUbY™Ä6Úæ>ÇmtöºõêbŠnã]LÄèžÇgدG“F ×g2®Û¶QdʾìA²·ÿ{(ÇTY58¤c¦úO¥êíij®Diˆ¤>xûO„(}Ñ3×_ÿ5%È"y þöØ‘4Žõj!+±O­PÄUhÿs²• åh[ŸÓnLàðär¿ád ‚–FT~• ü·a¢ âÀ&RäD]¦ïÅ]zì‰cUψàaœ.®wþ ;.àÒÒ—_íiheïîã–˜]"±³2ªoº+‘Öˆ$ÌûœPÚ}V­£øI«îù" h´xxȼº¾µyKÐU¿Nk'rb:diXåyÕoMíc«ª–x€gm‘K¦[Bt·£ÔˉrFª3ÙYF[ „wv¤°I…•nÃ@‡k¼`˜P²@âÖéë¥ÊŽh ×P«ÿkØ è.ó³¶u§µ=Å?U£J×$a,B™l#âD[YxÊœíô'wöXIš}äÿ al¬óm’iBŸ ½sè=‰yaT7â>í6ãÙEæ&Î|0L´³˜®»Y·C´=ÈÚtí™7ç·\`ƒŒîë—²éðšÈ#™ßÕœÔD¤:äèÌzø6|øºÇT¿ðJUd.HRí+Rca<ÒÈ#–û¼îó˜èT^ŽŠ™\ªU12dk»7 c Ûº…â(‘vÜBæî«WnQ‚ÍP)³ß§oÖ*“Lq÷ÆKRž_Œ?©@v̤Ç[ãîöÈ_¦McK:ÍÀ~%êÞ!µÌg:™Ã«ï^.ö-}ZtrKšÒÕ+dÅr;¿…Ô9VyÏÃÞ~Û‘ø{t€¾–éÔx6Y*¢o°âÈŒI‡¼ÕÆ únu7]3Çeþa/fTì[èó¸©[㦃ïJEçU,ÃÉ’ow”p†í¤›^!,Òº%!Á,ï þú¬Ã½…妳òîÑŸs}\NxEbFïÊ“ e"úJ•ÆEü(˜ÓyØns÷»ä¯cÛ\¹T¶±swPßäÇíé‰k„ZÉ OlŒ—Ú AàSôbȬT¢Z¹_« §Oß&ù¸¢ò7[üôÌV£[wû½1âÄë';B‡©>ýª‰ç¾ŠË_®Ã‘Ò÷}«õVð,4¶. dØTGæ<´A\@+Yéñ½ƒ@„¶2`_ƒì‰ `Á)¾sêZí×Å“Wä„VøŠDˆurD48±ŒA(°`¶¡“ȧð“8Ìà¶±òÈX«#3d¤©×´¸à墙IèPÚ(b¦ÆœS¿ÃO_ ‘>ÑöP}°=°I,Ô™Gøu`Åles±Ç©8ÐD ëJ²áe«®nñä‹sGÆ•¶y³eVÄ\®`õ¨v[Q*®t‘2â Æ_Ûùw¸=ðé9‰CT‰NA£~ɲ¬œn®eô¤6$|òsG €v˘«M¦ùÊ1•¯ü?µZ_ÚÅÅL `å©6Ð^+¬[d¬(C4ùawÓs"ýüJzWhÜx ‚ïôä rbS™’øq²È”5&Å'ÑõL!èÍ-ãwèZ¬Tœë&ÿe|ŠŒÍž2÷YÉ·6³Âÿ?Ñý‡ð Ëìx_gzNªJq)ä}@eP¯°ßÌïè\î0<|LÅ *{Xi}$•p«æK÷{1XF1Q…# …û¹¢ƒ†l‹cʯX)ñË3Ü ªø…}x„înK§gŒ/’»‡âN§–BU…fm×Ò½¯OJÎ{n8M¬€=è«’@u{>4éßJSûòU@m+®Š÷/Óu‘C—¢&ð—¢üŠ˜D>]: ŠÐÛÈë»JBíuÉÂWe-·1.¯rÔÎYIô3‹K­Øu€5Jä$I¹uÆ,ïÊ¡nw)0˜tXÌ&AÏÓz^…¦Ã–Ä„«t©‹c]eÚ({3­;ZŽB²“lS?7;Î,˜Iç’RPtö¤ûõ5‘!¿ÚãÇ‘‡¸ƒ’k`¨OÊX]­UÊ„µà¤¥!ä7}qzºçîñ$In!e›‰¼„ªQ…SÐø´Þ›ÁScðh”í¡2`7‘QíÕaèÙC­\½+š§i•I ´`¢Zö½~NÇ‚~´`Óxøa8¬;VÁLBT¹]KBöÁ2"í½ vPª&øU ð-¨nÖHREŸÜ¯\Z)Ó@ÚPbÉ$äuˆ#Jæ 7KP4$±\…Dª’óTÖbõ¸v¬ ßôü¥hõ/(n‰@/OÌ7n\õ‚NÀð ²xt~Ÿ-ã~ìœôv:Øxú«Oµèýi({ ómãR*ñý#Q©aј?¹j)Ñ9božè2Ü“>eQ׬B;›ú¢\9Mdq]øƒCàwÿq0Ò7߈ñ'ñó±Õ<éÁ¢%Âh P'Aý5ªDXéçd,»ÔEÓæåòØL)ÿ2íÚ§ƒÍöÜ<ùÝ“¾áÕVÈwÝ1¡0Õ…móscÑÕ”#K Y³‘í?AÕÕÅq}¨8zâ5™M½÷œ\I¶¦Éé:W·%Jy¾ðÚ<×Ìö‚=™«Í7 ͤ=ÖcJ5®á$‚ü¹¾Rpõ !4Ì}ør6¦Iñ_µhk¡TýÅâN|#ܤ·«\þPÿ8çv7röÈ2]{ö‚ànž_â`æ7`ÍÈzƒüJ%á_kƒí"ŸI?GQ„±Àblr¨uÕn¤Æ$•Å6œ³x©®Yh#}[û¹7Ýx4„+ A1›ß \Hd-ÂÊ.EµLä$œ×Ñ,ĬE€Ìm #4ûBþý¢¨Ôà¡·Þ¾oõï Õ½LÝø0Xª÷’·ê;h×Ù`OAH«3xÓˆºÄÐáXéôçâ/Tã5Ï¿3lL“|¹ŒGA!³‡èú»pùs¸œ†ed´t~}oŽjßÁ ]¼7 HÉ´kcë_OÊS©®ÚXÄ ý/…$c÷>2´œªltÒ¨Lçe”7R?°Ôâü0oAX½<·Æ060slÕ0Gþ æ]~Ö‚â.ZŒÂë@í†J¬€Žó[aºôG²‘E÷Ø4Žå,­“3ÍYÞ4² Z!ŸïHÊ#¨ XÔ3é£ôt:8aíDǼ0”šðAY;”¯ˆÆz Ú5ížñÌ™’ó2ÄÒ»½+œ9g'ÃárWX•0ùRˆ\ÁS 0ª ƒ^'4™þü`d51Ô™›«9ÏÑÁh¡Ö…Ûêd }š~#¶µ„þU 'Ev¨Æe~ãÉ85t ÈÂá>Ùì+Íw;½Y“HYº§j{²Ê¿Eýæ%Ÿ„i’Ÿˆ«wŠÈ«ÚhH÷ùH“H‚åÌ»¢®íæûÙC[kÉ…!õE+ϳ §-†—´¥| ’f2ö/©u´çïMùãmâ÷V³B²‚ÒÁM;ÿ_rŸ+÷NPh1=ЧfFQªTô\ Éôëèù ¶up÷$csà^¨’У⠫‚B¼W Ô–û†ís˜öætõÕ`YmI÷`"Yž%:©XºÛb© ¤žAÀ»îClýzU'm<ÒåŸÍJ rwf´=<¹Rߢ| ¢1za­Å"$:Íî‹qž*â~½‘±T¡¢f±yìHDª®²}´SÄ*¦ÜŠîlŒª¢WhV…ãÕý÷o`}GC¾=  ôaïµ z|údŽŠ¾Ûªõ§ózÖ‹¨×âÜ!\U¸/ž’L93y²ô›^JaˆO«.h×Id£§êVÑgdE—eô³"¼MÚs;•ôh…ö$pérBèIíP½"*Uv¹§×…æÒgÄÌP6;üN¶ÓV–A@1ª¹³Š˜rØm®hï^pÜÛ†ÓYì?1¾íÝ>—M­nÁÓÏà˜¥ 2ǨLI¬JúÝßN'š@’¼Íð¶'#ÛCUUK‘²Ú°¦¤ cÔéS^Q(Ì)¥¯´ß-¶í¯šÛ!’Z_Ù_ø¾F×Ä’BüÚØ¯¢(Û ÍÎãÒY¹hŒ¶Õ=%Ь{œ×5ÝšJ¬~§D.Mèż‡½Þï ¥cr'Ò+3$_;ÀŽ«ò“G°ÁŠCd$x 77TÃÕýc’b «toèK^ÍÐŽÊ[³— +“’&*ãªH¡ßdªàô lÙºÿ+ux‡ç|ÂxHœÿŸ$<åŽϪŸ´ 0µžµYønšGŸ% *uù†Äq›T9õx²r*1<@ÚýÝbÖù’¿ gÒb8Çgô_¸Æ°/qVöwñwHü‘”JKRÌóe}|ò,:ã³6 I»7’=ÄjaØøË—h'Õ–(:¢ºè´²×¹?)húÒSôz\wR#„Î(R½!Gº_TVN%jX C\–85ýH9ºœ,©¿€¤òÂÈ·ÒAÔr3葨¬mÖbÓüËÝ9”ÔŸAƒÒ¡Qº¥*Vü·‚•Kø4C¶DüT¹]œÉZ“eªoýS©éùˆ·Ÿ¶E^XnöÞ¿õóްÐÿ'ëRaW½]¸´JÉŠáSÒ âÅ\Cr»Ò#—qË}sŸß@^ª˜ƒPy¼2¶¾ÌS¯ÒP‰ñ’Cto¬™Ìú„.k¦öT²¦Ìäƒ&x"ÃÈj·¿‘¦>Š|ØÃJîˆ XÞTêÛÞ í^ÒnÙæ¦4ßó$ã?©Þ‹wÈÃ%@%ÏY$§Ü#q‰v=Ó¿8» µž¡k@¤)‡uÛ‘XÍDîXáaդд >â²üØF®/Êà£0<Ë!’äa€!K_ñE+ÄÐc‚ROÔ’…ÇRÚzóHG¶Âì‘k/õC m娣ÙU› <Ùu¾ÅD0Ùù-‘³ÜÊ=¯‹_¯½œ³àÔŠ·<ÒÎH<ˆÐÑ¶ï²øùîêGLÜ̶µÞ†î{˜Í¸(Ø­Ãï,³@l¥wÚðZ[v¸î W€æbm¶X¾ô1PR[­,ï'’ fŽÙºnÎ/s áÝÁ<†Ò>Ðð…–=¡f.L˜3X§¡¼ù*4Ý®\ØUÿ†áß²;zÌ”Uë—iåç¢Ï¡4\ÜÁAÜê¸of‡ç§˜Õ±0+q å7]œ¸•MAçž·ƒ‡:Ì»·?ˆ;뵤B.å0NðM£\¨m{_O(Yi+’Œ¾Ú ñqˆ+òù}וPšæÓåLÓñ…ê‡å3ü!¢µœ3~ÐO¸3£:f¹ØÉàáSþ'ë%T): Ùï*©Î¸ítÛ ñäø‘_ ÉSYŽ·PùJ9*Ógªpûœfb€ Ï/*@ãÂ¥ÛnÞ‚4&µ•·ŽîFÞüýqcø·ûÕ?”AZñ·€‰ïÜFlQY±]aAÉ#fšÜÿ!z[BV©ë3’1#º3³Ã[Ä"ñCñr QìÈŸô‰ÔÓIó»i˜4 Œ) íúJÅg%Ï`MÕýæ3°íþÂ,‚RŸ:Ò••_À9ŒÔ›ÀÍ2Õü4úzLz9*ÌÝPx Ÿg—)‰({²{Çz]’ñ¤¿S9¼` Æã5¶Øâ`8÷çú :%U¿Œécã8æ£Ýzwϼbû¾þA…n1’÷t!,-ißü7#¡¯ϨÚòYÕÄYØ5šð‚žQcù4.‚ztÃÎ Ñ—C §Øn)ƒÝúš“87ïឃ›œHhN?sNŠ¡¯M8[“Þ£Ã?Âèø ÂÎH­—üÊ(‰‹Zžo‡ˆBñ`éªÐÚXéÐê:UL/ö*rŠêî¬Â8H:¦°Xx Jè u]Vãüþ”Žz]X*!X¢~5Ô&üõ;yž:>Â:•>”¢ššO&ðL[ä2$+pzùü¶g4M,uºI :|X¾ô[E© ìĶ‘kÜ…θ¹>É8¥Œ{Ò‚>Ƥº!%÷Üq†KðŬö—ð°èxL0 ©G’Úð†•™ß;;3²°¶ËŠ`µ€úµ­g¼hæ;’^¼\û`j–JB#•çÐ"õíßL¨è£.0 îØ´y²™A=;j[ô{^ñž›Ó»¹ošêø#úõÎŽbVbây\÷ó:ï̾¬ ƒ< ñÚ„ì•j @b­÷Q°XÝ­!Œ ú°ìÆõHÔÆ ±-,“·Ú"aÁ 6ææ.Þðòˆq\[šÀ= 8ã œ· MHÝ–ÙVxÏ·ÇÓ¸j÷éÑ« ¸Rzy=JGöß;qå8eúèÖÂñhµÑiªg•Ωv vUbY™Ä6Úæ>ÇmtöºõêbŠnã]LÄèžÇgدG“F ×g2®Û¶QdʾìA²·ÿ{(ÇTY58¤c¦úO¥êíij®Diˆ¤>xûO„(}Ñ3×_ÿ5%È"y þöØ‘4Žõj!+±O­PÄUhÿs²• åh[ŸÓnLàðär¿ád ‚–FT~• ü·a¢ âÀ&RäD]¦ïÅ]zì‰cUψàaœ.®wþ ;.àÒÒ—_íiheïîã–˜]"±³2ªoº+‘Öˆ$ÌûœPÚ}V­£øI«îù" h´xxȼº¾µyKÐU¿Nk'rb:diXåyÕoMíc«ª–x€gm‘K¦[Bt·£ÔˉrFª3ÙYF[ „wv¤°I…•nÃ@‡k¼`˜P²@âÖéë¥ÊŽh ×P«ÿkØ è.ó³¶u§µ=Å?U£J×$a,B™l#âD[YxÊœíô'wöXIš}äÿ al¬óm’iBŸ ½sè=‰yaT7â>í6ãÙEæ&Î|0L´³˜®»Y·C´=ÈÚtí™7ç·\`ƒŒîë—²éðšÈ#™ßÕœÔD¤:äèÌzø6|øºÇT¿ðJUd.HRí+Rca<ÒÈ#–û¼îó˜èT^ŽŠ™\ªU12dk»7 c Ûº…â(‘vÜBæî«WnQ‚ÍP)³ß§oÖ*“Lq÷ÆKRž_Œ?©@v̤Ç[ãîöÈ_¦McK:ÍÀ~%êÞ!µÌg:™Ã«ï^.ö-}ZtrKšÒÕ+dÅr;¿…Ô9VyÏÃÞ~Û‘ø{t€¾–éÔx6Y*¢o°âÈŒI‡¼ÕÆ únu7]3Çeþa/fTì[èó¸©[㦃ïJEçU,ÃÉ’ow”p†í¤›^!,Òº%!Á,ï þú¬Ã½…妳òîÑŸs}\NxEbFïÊ“ e"úJ•ÆEü(˜ÓyØns÷»ä¯cÛ\¹T¶±swPßäÇíé‰k„ZÉ OlŒ—Ú AàSôbȬT¢Z¹_« §Oß&ù¸¢ò7[üôÌV£[wû½1âÄë';B‡©>ýª‰ç¾ŠË_®Ã‘Ò÷}«õVð,4¶. dØTGæ<´A\@+Yéñ½ƒ@„¶2`_ƒì‰ `Á)¾sêZí×Å“Wä„VøŠDˆurD48±ŒA(°`¶¡“ȧð“8Ìà¶±òÈX«#3d¤©×´¸à墙IèPÚ(b¦ÆœS¿ÃO_ ‘>ÑöP}°=°I,Ô™Gøu`Åles±Ç©8ÐD ëJ²áe«®nñä‹sGÆ•¶y³eVÄ\®`õ¨v[Q*®t‘2â Æ_Ûùw¸=ðé9‰CT‰NA£~ɲ¬œn®eô¤6$|òsG €v˘«M¦ùÊ1•¯ü?µZ_ÚÅÅL `å©6Ð^+¬[d¬(C4ùawÓs"ýüJzWhÜx ‚ïôä rbS™’øq²È”5&Å'ÑõL!èÍ-ãwèZ¬Tœë&ÿe|ŠŒÍž2÷YÉ·6³Âÿ?Ñý‡ð Ëìx_gzNªJq)ä}@eP¯°ßÌïè\î0<|LÅ *{Xi}$•p«æK÷{1XF1Q…# …û¹¢ƒ†l‹cʯX)ñË3Ü ªø…}x„înK§gŒ/’»‡âN§–BU…fm×Ò½¯OJÎ{n8M¬€=è«’@u{>4éßJSûòU@m+®Š÷/Óu‘C—¢&ð—¢üŠ˜D>]: ŠÐÛÈë»JBíuÉÂWe-·1.¯rÔÎYIô3‹K­Øu€5Jä$I¹uÆ,ïÊ¡nw)0˜tXÌ&AÏÓz^…¦Ã–Ä„«t©‹c]eÚ({3­;ZŽB²“lS?7;Î,˜Iç’RPtö¤ûõ5‘!¿ÚãÇ‘‡¸ƒ’k`¨OÊX]­UÊ„µà¤¥!ä7}qzºçîñ$In!e›‰¼„ªQ…SÐø´Þ›ÁScðh”í¡2`7‘QíÕaèÙC­\½+š§i•I ´`¢Zö½~NÇ‚~´`Óxøa8¬;VÁLBT¹]KBöÁ2"í½ vPª&øU ð-¨nÖHREŸÜ¯\Z)Ó@ÚPbÉ$äuˆ#Jæ 7KP4$±\…Dª’óTÖbõ¸v¬ ßôü¥hõ/(n‰@/OÌ7n\õ‚NÀð ²xt~Ÿ-ã~ìœôv:Øxú«Oµèýi({ ómãR*ñý#Q©aј?¹j)Ñ9božè2Ü“>eQ׬B;›ú¢\9Mdq]øƒCàwÿq0Ò7߈ñ'ñó±Õ<éÁ¢%Âh P'Aý5ªDXéçd,»ÔEÓæåòØL)ÿ2íÚ§ƒÍöÜ<ùÝ“¾áÕVÈwÝ1¡0Õ…móscÑÕ”#K Y³‘í?AÕÕÅq}¨8zâ5™M½÷œ\I¶¦Éé:W·%Jy¾ðÚ<×Ìö‚=™«Í7 ͤ=ÖcJ5®á$‚ü¹¾Rpõ !4Ì}ør6¦Iñ_µhk¡TýÅâN|#ܤ·«\þPÿ8çv7röÈ2]{ö‚ànž_â`æ7`ÍÈzƒüJ%á_kƒí"ŸI?GQ„±Àblr¨uÕn¤Æ$•Å6œ³x©®Yh#}[û¹7Ýx4„+ A1›ß \Hd-ÂÊ.EµLä$œ×Ñ,ĬE€Ìm #4ûBþý¢¨Ôà¡·Þ¾oõï Õ½LÝø0Xª÷’·ê;h×Ù`OAH«3xÓˆºÄÐáXéôçâ/Tã5Ï¿3lL“|¹ŒGA!³‡èú»pùs¸œ†ed´t~}oŽjßÁ ]¼7 HÉ´kcë_OÊS©®ÚXÄ ý/…$c÷>2´œªltÒ¨Lçe”7R?°Ôâü0oAX½<·Æ060slÕ0Gþ æ]~Ö‚â.ZŒÂë@í†J¬€Žó[aºôG²‘E÷Ø4Žå,­“3ÍYÞ4² Z!ŸïHÊ#¨ XÔ3é£ôt:8aíDǼ0”šðAY;”¯ˆÆz Ú5ížñÌ™’ó2ÄÒ»½+œ9g'ÃárWX•0ùRˆ\ÁS 0ª ƒ^'4™þü`d51Ô™›«9ÏÑÁh¡Ö…Ûêd }š~#¶µ„þU 'Ev¨Æe~ãÉ85t ÈÂá>Ùì+Íw;½Y“HYº§j{²Ê¿Eýæ%Ÿ„i’Ÿˆ«wŠÈ«ÚhH÷ùH“H‚åÌ»¢®íæûÙC[kÉ…!õE+ϳ §-†—´¥| ’f2ö/©u´çïMùãmâ÷V³B²‚ÒÁM;ÿ_rŸ+÷NPh1=ЧfFQªTô\ Éôëèù ¶up÷$csà^¨’У⠫‚B¼W Ô–û†ís˜öætõÕ`YmI÷`"Yž%:©XºÛb© ¤žAÀ»îClýzU'm<ÒåŸÍJ rwf´=<¹Rߢ| ¢1za­Å"$:Íî‹qž*â~½‘±T¡¢f±yìHDª®²}´SÄ*¦ÜŠîlŒª¢WhV…ãÕý÷o`}GC¾=  ôaïµ z|údŽŠ¾Ûªõ§ózÖ‹¨×âÜ!\U¸/ž’L93y²ô›^JaˆO«.h×Id£§êVÑgdE—eô³"¼MÚs;•ôh…ö$pérBèIíP½"*Uv¹§×…æÒgÄÌP6;üN¶ÓV–A@1ª¹³Š˜rØm®hï^pÜÛ†ÓYì?1¾íÝ>—M­nÁÓÏà˜¥ 2ǨLI¬JúÝßN'š@’¼Íð¶'#ÛCUUK‘²Ú°¦¤ cÔéS^Q(Ì)¥¯´ß-¶í¯šÛ!’Z_Ù_ø¾F×Ä’BüÚØ¯¢(Û ÍÎãÒY¹hŒ¶Õ=%Ь{œ×5ÝšJ¬~§D.Mèż‡½Þï ¥cr'Ò+3$_;ÀŽ«ò“G°ÁŠCd$x 77TÃÕýc’b «toèK^ÍÐŽÊ[³— +“’&*ãªH¡ßdªàô lÙºÿ+ux‡ç|ÂxHœÿŸ$<åŽϪŸ´ 0µžµYønšGŸ% *uù†Äq›T9õx²r*1<@ÚýÝbÖù’¿ gÒb8Çgô_¸Æ°/qVöwñwHü‘”JKRÌóe}|ò,:ã³6 I»7’=ÄjaØøË—h'Õ–(:¢ºè´²×¹?)húÒSôz\wR#„Î(R½!Gº_TVN%jX C\–85ýH9ºœ,©¿€¤òÂÈ·ÒAÔr3葨¬mÖbÓüËÝ9”ÔŸAƒÒ¡Qº¥*Vü·‚•Kø4C¶DüT¹]œÉZ“eªoýS©éùˆ·Ÿ¶E^XnöÞ¿õóްÐÿ'ëRaW½]¸´JÉŠáSÒ âÅ\Cr»Ò#—qË}sŸß@^ª˜ƒPy¼2¶¾ÌS¯ÒP‰ñ’Cto¬™Ìú„.k¦öT²¦Ìäƒ&x"ÃÈj·¿‘¦>Š|ØÃJîˆ XÞTêÛÞ í^ÒnÙæ¦4ßó$ã?©Þ‹wÈÃ%@%ÏY$§Ü#q‰v=Ó¿8» µž¡k@¤)‡uÛ‘XÍDîXáaդд >â²üØF®/Êà£0<Ë!’äa€!K_ñE+ÄÐc‚ROÔ’…ÇRÚzóHG¶Âì‘k/õC m娣ÙU› <Ùu¾ÅD0Ùù-‘³ÜÊ=¯‹_¯½œ³àÔŠ·<ÒÎH<ˆÐÑ¶ï²øùîêGLÜ̶µÞ†î{˜Í¸(Ø­Ãï,³@l¥wÚðZ[v¸î W€æbm¶X¾ô1PR[­,ï'’ fŽÙºnÎ/s áÝÁ<†Ò>Ðð…–=¡f.L˜3X§¡¼ù*4Ý®\ØUÿ†áß²;zÌ”Uë—iåç¢Ï¡4\ÜÁAÜê¸of‡ç§˜Õ±0+q å7]œ¸•MAçž·ƒ‡:Ì»·?ˆ;뵤B.å0NðM£\¨m{_O(Yi+’Œ¾Ú ñqˆ+òù}וPšæÓåLÓñ…ê‡å3ü!¢µœ3~ÐO¸3£:f¹ØÉàáSþ'ë%T): Ùï*©Î¸ítÛ ñäø‘_ ÉSYŽ·PùJ9*Ógªpûœfb€ Ï/*@ãÂ¥ÛnÞ‚4&µ•·ŽîFÞüýqcø·ûÕ?”AZñ·€‰ïÜFlQY±]aAÉ#fšÜÿ!z[BV©ë3’1#º3³Ã[Ä"ñCñr QìÈŸô‰ÔÓIó»i˜4 Œ) íúJÅg%Ï`MÕýæ3°íþÂ,‚RŸ:Ò••_À9ŒÔ›ÀÍ2Õü4úzLz9*ÌÝPx Ÿg—)‰({²{Çz]’ñ¤¿S9¼` Æã5¶Øâ`8÷çú :%U¿Œécã8æ£Ýzwϼbû¾þA…n1’÷t!,-ißü7#¡¯ϨÚòYÕÄYØ5šð‚žQcù4.‚ztÃÎ Ñ—C §Øn)ƒÝúš“87ïឃ›œHhN?sNŠ¡¯M8[“Þ£Ã?Âèø ÂÎH­—üÊ(‰‹Zžo‡ˆBñ`éªÐÚXéÐê:UL/ö*rŠêî¬Â8H:¦°Xx Jè u]Vãüþ”Žz]X*!X¢~5Ô&üõ;yž:>Â:•>”¢ššO&ðL[ä2$+pzùü¶g4M,uºI :|X¾ô[E© ìĶ‘kÜ…θ¹>É8¥Œ{Ò‚>Ƥº!%÷Üq†KðŬö—ð°èxL0 ©G’Úð†•™ß;;3²°¶ËŠ`µ€úµ­g¼hæ;’^¼\û`j–JB#•çÐ"õíßL¨è£.0 îØ´y²™A=;j[ô{^ñž›Ó»¹ošêø#úõÎŽbVbây\÷ó:ï̾¬ ƒ< ñÚ„ì•j @b­÷Q°XÝ­!Œ ú°ìÆõHÔÆ ±-,“·Ú"aÁ 6ææ.Þðòˆq\[šÀ= 8ã œ· MHÝ–ÙVxÏ·ÇÓ¸j÷éÑ« ¸Rzy=JGöß;qå8eúèÖÂñhµÑiªg•Ωv vUbY™Ä6Úæ>ÇmtöºõêbŠnã]LÄèžÇgدG“F ×g2®Û¶QdʾìA²·ÿ{(ÇTY58¤c¦úO¥êíij®Diˆ¤>xûO„(}Ñ3×_ÿ5%È"y þöØ‘4Žõj!+±O­PÄUhÿs²• åh[ŸÓnLàðär¿ád ‚–FT~• ü·a¢ âÀ&RäD]¦ïÅ]zì‰cUψàaœ.®wþ ;.àÒÒ—_íiheïîã–˜]"±³2ªoº+‘Öˆ$ÌûœPÚ}V­£øI«îù" h´xxȼº¾µyKÐU¿Nk'rb:diXåyÕoMíc«ª–x€gm‘K¦[Bt·£ÔˉrFª3ÙYF[ „wv¤°I…•nÃ@‡k¼`˜P²@âÖéë¥ÊŽh ×P«ÿkØ è.ó³¶u§µ=Å?U£J×$a,B™l#âD[YxÊœíô'wöXIš}äÿ al¬óm’iBŸ ½sè=‰yaT7â>í6ãÙEæ&Î|0L´³˜®»Y·C´=ÈÚtí™7ç·\`ƒŒîë—²éðšÈ#™ßÕœÔD¤:äèÌzø6|øºÇT¿ðJUd.HRí+Rca<ÒÈ#–û¼îó˜èT^ŽŠ™\ªU12dk»7 c Ûº…â(‘vÜBæî«WnQ‚ÍP)³ß§oÖ*“Lq÷ÆKRž_Œ?©@v̤Ç[ãîöÈ_¦McK:ÍÀ~%êÞ!µÌg:™Ã«ï^.ö-}ZtrKšÒÕ+dÅr;¿…Ô9VyÇÛ 3ð´cðz>¿¾é9C`[|=ÿ|ã5ål…<ù÷ÐÇ&¢9˜|–Â6ó­«dq3 H@õW «ÏwÏ,V›ö—ï_׻ɤŸþÝÖÓñê®÷Cí)„`òòR>m#¤nýk†½»,Û" D½àŸûÍ›”3ƒ»çØÅMˆ7~+AR´ö 4·î{„_‡Õ€TŠÓ¯x-czI”Ã)yKÊ^Rò—”¼žŒõÀùð®o_ÿzLàÒëIÏyJñLZäžÓyGÔŒ?ûV.ƒk)Dp*ìj•õ“Êä°ÎNŠi˜(=—ÒèbõÆÇC±ß–hûãGÞ~¼ÓõÒ¯Õ÷†mæ+Eƒ‡LϦÂ#8Àœq²Îæ‹¡ö)7Tÿb}~ûŠ;ñ™ sÃݲýCk‹ÁÂqÓmc¸ç¤/4Ê…Ý1(<ºË.še+Ÿ(Ê”®€ %  ¯î¥nüUùþÁ÷ád*‹«ž„EÙõaTˆYYd)É¡ Z9-ÿvËâ!^|Œ2T©ŒYY '1ñþyƒCO4’Í×(Ý#À&+¾Ê !¨XÉý¯„ƒï¼PQd]ö½CUø“À$Æ·^wVq^‰'7”A}ŽõžPIñQÌ4¹¤b¨óýç+qYméÏEÈ}p×H¡çH}1( xMOåì¡çG$¼|¬n1¤a%¤Þý!b‹(ƒXÒ<òzû Žœ¸{ÁË?ö?_ Z.PhaBI— dû|ˆá_•hr,?çðöeþ¿?¿ÑgøwןÃÕvû}Z¿‡ywÛÛÆ·Õ/öúžþÞÚÿ7°óH’¡¬£DwcPøÍ©†|¦ I­håXwÒMŒv{ËÈG¹+S— ÓßOÍUþL#eMQ: öz-T0(ìsï`“,)NÈf–ùò-‘zÒy÷æØŒ1x_+Î-[-9û»[çW(3|$Þ¤D ˆ£‡¡­7voÂÇ$hNU­mCNXpY\ˋѫŸJ÷¨««!@+„Î'Ù+¸¼¦œ“× ªšõ÷8þ"ŽT@‚ ä0ËEå:ËRøÆ/ZóòE“é¦ÛzðÅÞzÑeÒàË]Ñk™p¸•<¤ŒGVÅç~B#åfâ–ñ3âè‰ù$HJLÆÑ9üƒÆ¬Wÿ¤ÙÏm_±©¯=Õ ‘È©O= ¥)DH¶oéãùRã­ó—n "ÝþÐÃQWWéRÿBqgm#õàù9Ñ ó8$ð»WËò H‚ЀÞÏRÁÔ†OA T®Ë,ø°ý•ÜÅ^ç:uœnqž˜Âuá,Kw›µ)Çx èÿH¾óPß°uá.K‘¯Ëäìì¥\í’,¶â#0q‡â ]„áÒ‰ïVG½×ªê ¬ãÓ˜L3S´ø±ø˜žØ‘ 6×÷J>ˆ843Òœ”æ/®qË~àùë)áÅ~U$‰&HfÚ”F`‚s3¡'k,ñb?‚ûíô¬˜O,ýÁPsÆKŒ—(š ³ÀäÁ?n¥Ñÿ‰yl \‘ ×î1$„ÒKÚtÞ~Tÿ2L 9øR(‚œD½Ú¾¡ÃѽjBqŠÜ +¡Ô‹BÜÎýC"#7AªìTP­ôwN]·E+óÝÎBÞNFVŸÄª/àÊÑU» áên[-…YnàéÍ1.aËX Ûëì‚´aw°<×]š /îHÍÒ$eÿmƒƒL˜×Ö¶\€×£Ä2Y]³h0º?Á~ã)GÅ”%k°©oü{ú°Ò6ɉ½hÐÞ!ìàqËæï.{#‰ä!6j ‚676hq³€ý4èÄð^é/9Q›¤e_9&¬îŒÿ §bd‚ÆoÕSÒBM£'#êN¨èW¬ï,V»¾' ‰š“¹ëtæ÷ÎðsJò ŒÓIDL~£U=8É|щ„Ü@å![féÕ)l•†Ü©ÕÀ$þëÿP:ÃZéßûcu‘^:ûŒ23×§Ò´èSáQ$¿‹pk2æýŒœYXÚF§7ž³í9£©™BšVç{TÆŒXÀ œ€WÃâü§¯ÊNQÀíÓ€ý¯®âåDf"yïáÕ¨´”»ÛÈÞí~߇™î”¬˜±Ö×Z4¢éãk0¥Ö®}‘!èl‹Ë?@Æv*$gtB“\!WÇ5•I€6.C„ÈgCáØ+É…Ù^ õPŒi1ãjs+Xp½á”¡Rî:s†™t~ÿ/‡Úýñ0ÔaÃEBQZ";È =¦i ³Ù¦vê„)³”D/øË‘eÌ‹úª¯º5Ѭç•èt—©!WuÉy ~@?íK!6Êûa 猫‰ k<ß8B`Œöt3F„ÿ3Í9è†4ø¼LÛ“@U€Xœ[ t›~t³ËJt9Kb8ôènÚGòãf·œ@ºEÌÌš¹<Çkžñi[Ø 6×QL»8¯éVj•®ªèëÞj± -À:óWL‚ë diÁm$Ä:Ç âo˜š:¢è´±?wY¡‚çÍ%¸§Tñôíž„OÇ]&G»ý‰¢‹ÜʈñˆH†b^Új—íifxý¡W^ïnpUÑésc,ª2Sþ[1á² È7í¯£‘’FºŠ ò%¬fÄÑ2Œ€õº~—tfQ·÷%ä,ҚРÿ{+ûÉ®0/þ¬øC!@æ2$í¶-û¾­†±·ƒ†§X|¤@#[!ÎØM7¦_vÂû!óJLdìÓK(Ýó—½d³§„EÑ`Ô¨øÆ®‘¥Æ‹"æe—¢'y¼R‰Jžþ‹µq-†Ý¨ƒgÛýf´ÿL:'¦cØ¥6õân¿Ïœà–òÓÒ’ÂÊÙÀaóüç3ßoÁmÓÕlíµ‡ÆƒVVìÞœÄ*(:“ö_´\qT8€.–¦;¡rÎ0³ÚTrâ·ûCP²CŸ÷]7ÂóO¶ÚÀ9Õgn8Õüê´é Ÿådûí»TÏ ˜šAu'¥cQªêc¶o$ãQ#P"ÞÅþ¸F„‹ Lªòž†Sí³óÐLºT‰>{⪘Ñü!P´Çi…GnÞ'„ÙÖfÑÛV{€0× J5ŠßùÁ¯DC/5¯ðV—éDE: 0a±Ž/¹àøUÔÆà­z@&p7Ðt^Û+Ç+:Pq½îGj·š‘B*4w4;ü¾EŒÒŸ)ó̃´«Å>Nô]çô‰,{¼ v¢‡³I¿fÈH¦ûä\ßâ)𥠠ÉPAääÙ¦žQ`VøáÆ&ÒHÞ·™q¦šèî¦R¯rN»Ù}P2 {á®s= !ú>îûž‚[}#ežÅÆgÂøVw쾌u 5?"˜7|¤E"¸GózÉ$á·´(Ÿ^³cøSÆ©@y> ò‘¢ƒBkX‚%i#)šÛäýmþ0ýˆ„2åò=,#{[âW1ª±jÝ»ª«û±fG•gHA‡kÒ ¸QzĽÓ,÷'´ ÞOVk) ZǧÿVöÄ+Ž LFm‡ÞØœÁG ZÝÜlÍ"’êuûºtm•³B…Ï}ŒËA*ü0[iK ylR}ø±û6΃¡Í}/H¸"Ï $g>ÍÃé˜vQrÓd\¦éÃön©‘²Xs$M]ZÞóCqvøŽ$‡m=m˜e¿¯2{QZUªv2šüƒSä„!f7²ë쉗 R—Ë™Ên]‚JzZéE0ÐŒ*ÑQ›-O·Îø÷‚Ñ2ðÁ$Œ©¶r½Nð玟ݶ³ÿqÜÂKu”Exa¸6ô Òýæú¯ùÏEêôÐ)cšìþhêáŸúN)çP’¼ú ¬»$ê"¨øl~Ðó‡ÁéUqLêòÄ=]Ðv¦ Ä ê»ÎAN¶üÔº!ÜÆÒ­8µDú`:?ÜÌ ŽÐ—ÏÑ«¸’ 3âúâ§Êëgb‡ø,>3⣻ Ü*ía$°¼ÁB­$ÕìÝIP%Æä ;è̦ú¾œÝz?eF_¼EÕø¯8hø0A[ª7d*8R0ø’L|T€¾ƒ¾õúK€ÒN”{0Y(˦| éŠf*ž°s©þìôtÿ|Q;ëjœtu›ØWbà~NfOb5Ó˜"HJÄŠ>­§¨vûK)&?/ygò¡5Ìöð‰£º5."ucãý@¦±UhÐ@ˆ{ÎSg=] …]ÓøÂ® d%f›yüreda3ô̦î͸˜«#Aà›é²Þ[ÇŒ²ÖqÞ¸P°‚ºýYÞ(—ì?Ó€¹¸_Wãóÿ+.7µ]„YlßÒ WŠR³³[7ÏO¿FyT¸ÐPÃ^yn6=¯"ŸMô÷ëS",\WRñk9¶f¤ÂF\› V½-’<öUˆ–¬ÿ!&_ß1MÚ¿§@ÝïåÉóÎj;¶0“À×ÁÐep|ľ˜¾Ñ«zxµ7.ɶ¦"_V¤Kv’*‡w³Ý€YÝ£`Þ4P3AÓ~ò貃öá ÷§’?°‘Ë5Á“T8áéXÉMF8àú^;óYå¢êé—kº¡!k_Ÿ1Å‘ì&ÏLþ—9ý`ÓÐ䔌$HÓg|TYWÖ @æñ#†WæÕ³+Ê_Ëc¾?÷?Í~„ ”wç0Jç‘Ò›¶_#þîG1ÚÛjC…m×VŸ¯RÞ@6žØúu$æ’£ nà”¸PøŸncf-cå²ùº^6½–“‡ü¨1õjÞàü†n©% MíØ\Fá’¹ ½îmCc„Zµ{@ÝÒõHÃï0ï³¹£bŠ‹:eZŸ'ÀÓhÚˆ¶D¸)í«Ù¬ÝYØøz7ŠN.Lü›hhÂÁ‰ÖÉÈjO––@š°yðÈ2 Ñí³k[8ЈÔJùôý¹§ëãªöul“Z’;žî³w,½”÷%£Øº«µ”`ÉüzÅýa¥#´Zì̦NÂHéÍèD[?]=]Ä¿:ÓûH”d¥³c51±{.—º—”-®xALM"‹=ÃrØNl 0ælRÚ\ûødõ­Ç Š&jôP°œ¤&`E”sÑ,g‹ k \¢BïåPDL¨Ij=ôϺºA´ úd‹ Û½À*1Tã˜U/2P l’ .ƒmÇÓèb€®ÄæÜƒöó‘AÇGmt(¾C üV®Â 9’„ÝOs4ßÁ‚ž> ¸1+âY£ø‘ö]~3& éßÚ6Ž"kä Ÿ'ö‰å—[Ç®b /ù™ƒ¾˜a«ItÝÕ$»F[„“Þâ*L¨óž2Ïé€D}ÉA(–a!õCÎY2èè<› ¢eX0ü˜Ó‰L…_U7‚oh*ÐËÏui^E¬ÿHˆËó|VF¶XÊ~^–[Æ´Ìq¡ H#<¨;º»ç©$xùiDŒù„"ïŸYY¡ÞÑaL*Le çVêÎúk%«€w¬1 ñF‹±d?‘’7äeÞ /K rß}-âphˆÛFUdÈÛOE!8Ÿ9%8¬'ׯ…Bó½3\ë4vfX«»w§äÍûß<“¯ö¡HæØq„Ñ<5ÑgºÜ3™ãrhµcu¢9‘‰.#\Q]-ŸãðñSô.9Tˆ´‹®^K—þ;\L'ñÃðòmÙ_Ÿ”™Q•@ mëúÌY6™!{ù̈â_RŽV’ÖßóI¯mÄVî§³žođב'Óuö+®O‘gº0&ˆÑ±ø¨Ú–±ækí$±¹c¼¹Ôܺ¾‰ [\è)T:ý”-Ä`Õjl›çY2×T>ÕѤ¤Õ&ºŽcy᛫GÉߥ¨Ø ŠRD/k ”ÃQ!õ“¼š3 c0ÄÃÇZILqͳ¦^+#si-EŠÕëysV7À#äߢ¿zêÝlNùM.§‡“¨È/z¬‡ö8“K 1ܯô(­|¡˜‹è}"œ± ˜O{Óí~Ù úBåvElDƒ_œÃkÖ>žÂ=„¤©‡ÌdÆ4ÇKæG‚'Zät$³`-_R›‡øœç’ Æ-yt‰("g“œŽ>mò"?Duœë¾¥Ã|7Ðׯ°1à…:y-bÿ0¿Ì5ÝÇÍ^:Œ1ÇwÚ¹då¹#Q¿ù§â|Ož i"¸I™•• wŸGïHóÉËwO°çàmnw±€2\ݦ'+4@6žBV¿óÀÜy?P9@Ö­8“‹rÄø62Ä<Íñ®¾™U„ÎÑT‚¨3ì=¡–€Ô‹«7¶FÆÃ‡´{ƒX¬Iœ½3OTèÖwìE8"½î¶oÛ}§Ö–|ì¸ù?y‚@ ?áÙž1‡:“m@¼·»©EÕI Î;|òæøc^6Æ)Õ«%’<Ç6•f„Ã$øŽ§ÉÇ\Vp?ŽaÖœ¬”}¢cÒIê?#2ôˆqà”u{ÜN¬¨];ÅØ<ÔnWªòŸ€Ùo[¥ݧê¥_îÒr)꯵¾«þ S+ÊC:ôôQˆêÑ/óÓµ]‹Ð\Ö¦¶ Ù—Q"´‹=0·¬ &‡õœÛÅo­ý1Q™È’èͰ EŒ”ÉU÷)mw`€êñE (’:»*izNíÃÍéâÑÍ7¸Mö¶KG¶š_ׯ(g¡ÓïB™™ë0gzÚ2­êÖÏvhÛtn“¼ç>(°ëþ^ ‹†CRµ›^ |™žúá{$%WWÄÕHÅo³ˆrñ&÷ҵµzЬ5¤ÞŽª*n-Tn޼×é¦N.L…FQ§ÚûL*ž,lØc¤š>)«ú¼?"ÄÌX I‡¦8´C¾³·Ëý¸ ïe.¦Ë¿('a‘ç‘Êßþ¡KÑrÝk`ëKצ¹7“¬ë”ïcèD>RRU3hqs¤°Ç Ñ a™/"äQ틱~79¿‰¼t#á›Ag® ˆžÄ fûÊ™+žšNý§jMJ\+q—ú¨O0÷¼–úcãlkÚÞöâí¥Bƒpj&BHx8}ú]t¡Œã0W@ÖîŸ8’²ñóD¤Zïxÿ†'i­Ho[ÒF5í äóì—a¸¬~´‹&Ož]êŒKÎ6`½Ò>./%?ÍkÌAôM&’7ÔÁ×ö^]÷&Qíy¿[£öB“T”@ñy¶Ú¤º´ÿ(TiD«âdh§.±\v…ÀN½N™nVR„>åŽú±(: Ì8¸³CAAÒŸ­*5»wS÷-œQŸxQëù“|ô3$}êSäÔð£+Apá\*ðMzé‰åôj£‰ÃŸÈ6ö»¾ïDÛ"¹æ#ˆí£i\+~î¤ëç¦ =?Äz¥¶È‡Œ/B¯Ä £ó”}X?´Ú 1ügGõ2ž†ë©ë¶æÿLø{ ²ÕÝ9ïK޽¸'Á$!"ÒC ™ýïˆwx‘ÃYëÿU–?}µ¤©¸iŸ¨ ¬Ž¢Ý2öNæ„G‰X3" z·Þ®™aCoiª=] ˜JJû/çÆŠé˜Æ.A¾\È3e6'Ãô¡LÏërƒa¤‰ác™XƒX±ÆÑ¿-û)~ˆF–Èøö2½Eíõwv7ìñ(|¹óØñ«‚F?oþk£S‹´ûŒ}©eï8ùqû Ðzû¶äKB³<›}T±XBê$8 Ô•Ý%5Œéçm“AáøŒ@6<žÆ XvÑ5›k§ íÝŽRï<Ü:„‘æËW/Ü)•ÍÛµ÷…Ή1l£,Y°ç‡Ù¶»M;§ióYî6™çx¶c¼µ—é˜Ù¢Á¨é8ñlõÜ,m“£[ìœ/íˆb•828ˆöNçÄ6­žôið³<·†rÐç'%»ú)ß¼=h3¯‘Ù=D‚Åfc¯DÎÙ„X'è……{•«-C¶ÃSümڤŴÜ_âÀ¼­\ž‹¢ñ{qÎÀüinþ‘mì‡3ÅA~ƒTp÷³ºzˆ&°Œ:ì¡Ó‰«7KqAÃÕÛl,çâ™M…Ÿx‘Êbõ6Üá³ÌÀ{!M‡º¶£¤&W å{>ã¶ê‡SÍÕ Á^‡æ7ê6]$…DŒòþdHï›ó áRVHA'6 ÐYë–“=òËVõš“y2vÒÒlG{1^/<4"òu òÎýfüT.é˜ñø©+¾)%ì:mЙÏA)`êªA½äŒ—ÚYFí^^±00ÕxêVš¿éSXzýýï’¡öÿ5Ê;nú4Mˆ®æJ¹Ñ©R2s~Æ«?Áº)¸¼! gg áÎ)þ Üe¶ÖI·¤6¹ €Çq¬—€$ô,õÚp¤Ï6<ϱ9wé»k+ã ̈§EzñFɆ~5ÎÕ4L,êÒœ!uJîföÍy¢mΡ-qȹU6gf±Ä6JÙéH?<%z¿Ñ7žDÑ *÷ 0Úr€¹¹i°qý²—M× ‹2(-é^"vA\’bõP»@ÂË95ùi¢¾fí?¹ä¾I™ǹ¤¹tm%<ŽBn³2"À'˜ã‰üà’§HVöé¸ÜR»b.zAaßIçÄ$‚q¢ˆn¹+ÆÁü¡9‘‰Ìãl$LÒÇM\ß)…3I’ûžšÞ¹—TV§Ȫ/N-‹{^þ”ü‰R‚ùZKͯëPBd¡™än4C².]N|íð¢UËwå]}:8ÊMÈà´ÇàKt)Hh;lí@³ˆ&oœ‚RfMèf‡¶UÜÜOö›‹Kˆòü›ðjÔá\Nr ^Ø}2˜C*¯Œ¾hç"ò'|vô ´jóV)æç0E•K:œ9ÚxªL‹ýŒÙÕ"nòM9‚k)ñÑ©IýÉùA–ÙR8õ<&ßA¡æAËyúñ»lüžŠ(À1ÔÞ‹É_GÕµÌpIiœh†NË@_*"~ã*øåM÷Nx §ïOê"2°èÆz‡jl÷½ø|/±ûƒÕ_„\Åð‹PƒÏE-¹ÿe^·2ÙËÓÝOåá§¾ëâÏM±(Ä9j[^óÄû\%Qè6Ó9þp†ŒÅ_ì¤Tâ'Ñ4aj+¯žªâóƤG™yÖè­ÎÎò3ãF‰6¯éŽ€§ c1rËé):$›6˜ÖâDt‰HKr½¢ ®*×™)z\Šõ„ÁêÏõÜt¤@ü‰õð%ÚkÂÉ`¾O—Y xLQlŒ§ -×x€†ÍꆕÐ8¹¦œ$hè­yã‘Ì?; w@*ÛCÅ24=#Žê¥)OÖ…ÿxH dýÈØ2×Ü|Ãaôò¤šxmÆÒ ÁÈÁt†˜ã#iž˜8ñt§Ë·sî €vÔ‚ü ù“°â êß„PÜïùSŽñ´%ÊGO^=8# bæ8V¢ßeãÜs:Ð(ÛT^ÿyDÔ`—øD©ÆÆwÚ%„""lúZ?T‡›ÙÄ£(¢=õ)Nm³Ý%Ò*ÜF%_†|T:Aï4Ï“—.Šäz»Ÿ;A…õkŽÞÃê„@H·¥’Õ—LöËé¬þшœELÙTŸwÃ2½øš*ãH·ß@©*¿HS{ÞF?$Ñ,°>9Ü]gŒ>aÛûñ¬õâN¯`4ª{ ‰…?ÂUÀ˜ã #Ì¡Ov?‘]Rõ4V¥ [5›æ ˜ÈSÃ^ìP`jäeg«¬3a¿âo©ÕçÝÙÊo˜€ô®<ÝX)¢‹¾-!]úSnOþª™ƒì>åeUµñáö¬ì»äC‹.íŒv93cö‰þýž5™£Ý98{ÏÏ7¢~Ù—°‘óÈ)7b̓ä:ÊÀõÊ·âôNEÊÿ4»êõtÁü/Òœ1ð³=oÔ,yè!n_²žƒŠü~,Bm¬ä$±®YaQŽî#­ø|ˆ<¶—ëÏøÆ…Æ8Þ&ÐX1k4(ì–„\Ûöµôl6Œ¹vŠ•q’ÄõÖÞ>£Dïy¶¾Î½Uùü+•’/õ¥Ä#oÝR2N2U4©ÙÊ ËUÁ!øá[ìêÕ¼ûAj+L{ÄaÐ6€aîcµß‡o×ÒFç<½Ž2Ò¬ùHÒedkâÉ|WñL¹,ôð‡òÙ– úΡ?!ßmâ„ç¨ëÙ=—ÛóqË 6‘¡^—0^ïÂ)½Ò+ž²óPUëë´Z¹A·C¥Ç0¸–C§K`oa„F<ã“k½# ÚYÆ*1O1П–WÖ‰ÓNÿ4³%i¡µßÄö”°1;Ly:uº±‡ú\»)Éõ€5£Üëÿ[Ž”ý £ÍpOŽ"ÔÒÞô/A ” ¦R ­óì#Ýò(Åóöf$…º³T¡  Q‚¹7l”°S+e‰•Á:ÂÌ _ôÛ˜¶•X«Æí×GØ .·ä¶†× B¸Ûä û9l7A±g·kZœöfèZi RäügÚðÅl|íÑFƒ Éè }V^å³pŠk0ä{d^ì>³Õ±~ö@¢œk2ÈQÿ=ÖzӧǺ¼ŽI­ŸïÄ<¥wOî>¢ÑïGùaƒuÈ=`Ü0žÃ9OÏ·‹¶6ù±Úêð#ŒÕ*‡¯kT×Q?×MÅÔUw‚pùS‰AuQÒ h-§9‡ßT ›‹æß²x˜%hÓ›×Dð4æß–ðl§.à »úš¿«|tÀ)Éúj¯ ¥£Ã· ô—Æ”‘¿YÈ$cØÍK±Ò7bä6Hí¤Ð¢BPrÓ_zø¡ s8ë(Ýœ¢9 ¸üŽçO¶‹^ò‰?±ë© DB*jŒœO^­KyÁ/b®©QûÁ¡À¹:iCýbÙ›/²Tðï«Úµ*»l¿™w3Dý¡áMºQñü­kË)ÔäÞš&¬2$JÍÒŠÑú7|¦k!ÒÆå”+Y¿›Ç“ÔÊMººhÈÅ(¶ðîxÒÉ,Œ_먓Mè´ª É„‰rw|™Kçb¯L«?È‹6NÑ Â¶§r;Ì:Í[ý;ö–s¬OÇ CL½?€»Ç:~‘J^ÂÏMNí,8—î ùˆx¿÷CUl?ÿtEò\K<’áä”ç…¥–x*ü¼ ¼t§°š ‚ƒˆÀÇ×I7@wÙ úú²sìa•xœùÅ!¾ûí•“~ù£¬'!+úô¥ylG”YN-à $:ðƒ xaTk8•ÇÔús&Y‰É’„¶¦“x-›éÕk!bâ  G –:>hÃsߦöõÖùGý"ÿˆ9J¦žohžˆgg/ ±$²r•8¶eŽ –ùwïä9ýÓ;àû'œ&ö*GX Ï!TÚ:^Q–£ã)Á™ïF×4d\›}Ë«XÝË!¹.Ppü(ƒÓöž[dqĸE£ Šœuß¶SšG¨;¯:‚–=w½}ˆÔGIQtËzäxTݲó $!Åÿ8¾ÑZ™ÐJûø¹Í-­s…Yx.tP»üx$õcÃsÿyžcyßÑ"Þq/Ñ>ðcñÚÕxãÕÛd¡ó•¹÷åºñ+Þ”¬Èn JV5¼'ô·¶* QWÙŠ!,Ú+\Ðá™B‰‘DÊËù»[„xôÛèúà „ö!*E,¹p£V“ÒnˆYà› {šœM„›',¨'ÿveɬt¡º Xß×uu§ºèå>±„η_K¶In=4£­ÉHA=¸Ôn¾~'Îϱ¢x&zCq)unõ4ÅóÞ/ÏñÓæG’[Yú6O*µ$@„cŠÏŒ«ò;OžçèwÈæÂ¼dŠ–‘â8/ÿ`âä`@~ʽ¼§;%iŽ´_óMj am”®“K–8vUÏ CKMí4{Õ¤XÍEÇ "1î’uõÅot¢+œ¬¡™¹’çŠy{´kˆld÷Ûm[éëæ"›5È]U‰½D4Íó•vPxöô)ÅEwáHSY~ëLýâBn….ðX«[¹ÇÙl¸˜ïªËÒÒÒÒªº$5gŸZÃ!ÖËQTh,æÂ3[„}Øåjn÷úø$ ½K[ëâ2Ѭ¿oåÅ‹‡îŽÿa¾‡bíêkjU™õ®”)Fö hOꀢk³‚AÞN€ƒäˆ2¶Ï@ °-Ü0¥/ÑDz<¹ E_I‹îMú¼Í(ó÷ï9(ZJÛª€’Äá0J:Pw'€„àêÌvaÇà‹JÑi`ŒÁaG93I`âñλaI¯~>Ï œ“oéÚj¤nfŽ\Â3áò~h¿ÿF¹ìa×)],ºð ;H:š~Ë e6Ùòü•ÁSÄŠ êu£²à8t‡+Ï'áô[äXKW•Žœ›#¿žã 4Õl{ ë¹Á"ýïUª“‘í®!¶n#Þ®ÃFäG4.([IRÍ{® ä—¬îãšø„‚ºƒ Y[!p¤£#.@Ü4=qpANÝKŸ,Óa&a4íU„]–-<×ÛU¢ˆfÊ…Bd'W:µmÑvõöÓ‚IS;€—$ŠN‹áGö©0ï·Öògouöâ#‘ù)§½?J°d8¥ˆ <¬þ¬ëÕë?” Ux˜ˆóVªdú—w‚$%t`YÅñ‰—Â…E[͈{*Tüõ±$®G¨Àë¶iQ5*õ¼»-ܯxNvÄ“]²ù¥wü€¿fNO› N¯i‹ùšêí *!çÅf0ÎîÝ«ÿ[×£Ô…ÒïÄë꥘}IÁ?öû†¡jß§»¼ò¾ƒ‘Þ,ÍïU¯}›»²;~~ƒ$U?q`P $^· r!2m¢5Ý›,Ôµ¶»ún©M7…%æ ¤M‰¬ œÏ™µäÉQñŽmÇ÷FW%ÛÖ+ [,ÕŠU]P×Ì¿5˜5\fÛ>¶>WÖ f¥s–åúmÐ;püvá2†îŸÊ6Nw°öæ£ÄêCÈ'ª(4»½ë“sôGg9P®Þ¶=j`(‡§³T¡¨¦‘¤×5Òv˜a€õõú­B¤ß#^öÖ`Oú¹ò‚vÔ V–OQȶ¸ìkþ&|1¶GbW¸%6þ¬ðRuæÀÅ2üQÏúÚqýgdï,˜}![n =˜|_6à šeqú„ºÙϼW.Ÿyƒ²¬NÞ[l¿„4Õç×ê¼b•ˆy:‹1J Ó#èW dÆòuaàûÏÃ.«©úÁáQ2V¤þ„° òü«´ùíxáL«1ðÕý —°ŠÙ—M²p¾6þºMØdßk‹Ô4Xq³šKGwG̾Æ¢‚榙[OW{ëü9zDÛ{LäEAE¯ rïÌ ßþT¼CÈ-¸J×4™Ò³>VGeŠE-‹xFÇáEãÅó¿!¥*§ü+ŸàÝÌcNœlÏýÌ0ßë–3œõ³iª\ÌroI~èÿ7¼ž‚Óªìð .‚á8zË/t‘¾¿ìuÔ¼îUåÕn¹Ì³ÁƒþðAAGf LqÇ[þ%_T2dͲ@Yq6œópÁ4w˜J†€½=¿ïÒô–‹Œ™¦cT{¨JËq0Bö„¿YJrå«„>bc²Û…Ç]®-ê&º¼$ÇÔéÌsq tM[ˆ±ÿ¿5¿p„1–(1&ã'FEŠ€)¦Lߪ_uG9(«>}AaXrúâ!rLê§•÷»§­ªŸ| (º–+e½YÂj÷jH#ŸÓHN«ËsBÞùª²Ü&¨¸¥Í­ZfîÔï8xš¡µc¢+nŸøVkˆJúCujfy<ã+LAë{ IµøÚ.¶}“T²?`ê¾s ®©gâ=KŽo2X‰ ‰3¶Ö²¦Z1RÞ™†šÎjoyo§ŠÐ;#Aj8aØH«c!¶6eãTŽÕd‚™’ù2UÚÔ¿W©¦cDžœ‡r-Ù?ѽBP¨xðJKµIoüv3vmˆW¿à¯­ŸÇ®ž_Eé &¿ü#yY"Ù'g¦°Ö¼_pø×"“\‹þ×´•`Wæ{– ­¨A.û¹€aÊÐî%¦IáDÑDQl/40Oer !ˆËæ>>FM[—æÆn/¸ÔHe¦š¯ÑnqúY¨ŠÃÊù`:|øÖèÄZÜ5‘óŽÏm•=@39HZ’JŠBÇ7ËnvØ£w­ú¯F&ݨÁÆ»Â[ÛÒÆ<±ykªöv³¾C͕đÅ>ÚÚ›“¥2€¬üf~ùpPŽËm #ý&_¶;~ ¿¿ rÕB½ªÝç5ÍÜšbû·Æâ6Ãß<ï ­5ÞºÖ ²vk¿(ÂT§íJK$j0ˆ–=;º‘ºA¨CõDNb ÷Kw…>þþ^ûoBîHÌаèàœ-àуÁŽyÒwº9ô»¸^æsBá0½òK{;Täè=©ì ðè8¦ÓiS1ÝV•Ô5¯x.ž¿)Õæ´ã XiSÿMTÂì6éF@$€J,ÚÐ¥›à¼‰Ôö4xU.£­kº cçP·Õ˜"<ý‹VÔ”C˜2…ÌûžB2Á¿_°¬G—Suø¸êÏ£W—ÎÿgÝT,ñØ–%0É©;ÛªÑ «µm#s¹Ì#ObÚCcB¢ÚÀ‘)Ó- Þ¨[Cz5erpŸƒœCåì7FÇ}\ÀàÍÞÑk¡io%i¨Ž:cÚZ° …Íþ€Ïvº ß×̹ü€™jùØúüT¢ºpn§‡T{ò§u׿Q´1U9jЂãeQê©)‹G¬D<~ µA·È »EôUéM¢š{Åo÷3æG;¬ÿÆó«5Žñä ­- ap©Û<Ú÷D$@ëM yàéÍ+«Œî€õm=´Çh@·o'nŠ<ô||_¼‚Û¯Ø[áúIZ^÷ªù”_ñ ÎÝ/PªÌÃ`’W³ä–X´‹…·Â³låÆIõ?Êb¡F¾Àú´g»nóÐn.ÝñÕJ'rÛú™Í€ÛÞ®«–ZA´Ñ™&ž \|4ÿn±Ãÿ|3bbB'ØB×3ÄíWu˜\¶)ìtÓ©»†€xìË—g÷Åà¶eÞñF'8ò ŠTÁ[ç?D¿™-‚=Äž}·&ÈÐXr&qëüéêÂxÅ»bX#R‘à>Ï_~²mŸôÕMƒèó·Š¡ëAŠŒÏ/€'´ã½(;‚ê¾ ÷öTØHÍ™¼Áн•oœ €-î_«R¥j{rü’‚̳1p’Ûþu¬ èÙ¸Ã-º§Y™éú!¢iÜ+ O+T-kÚ2¬e›åï7›Ï’1NÇá!VG(;/¦màÈ"SgW•ïi¸Bèì—VâÁ z/­Ç…Š˜¼4qcC…îµ:Èï­5í±U›áÕˆƒ°¯sl—øFù2‹È!:@·I]OžáøŠ­úu×cYj¡sªÚŠƒÑS'âº>ocþKYç> !hÓ ¾pÁL•ÐwH¥äDÕÿ8'¸`Åšt"»Oâd³œ+ÛçsÑ¡Ës´íjâ¿Ä‹fHùCÕ²uEìžãëІt~]ž°ØB–íÀ¥ŽQ;zgQдŸŽ4À-lj8:ÊF)§²ÊçåE™Ñó ´iãïSâñƒÉm7òæ ××)ÓqZ†/¼ ÂÊyGLäÛ0ÇhºP\5Sm} v,¡CP=,ÖÎ܃o˜ïIÊ9Æ´ã´r|Š«è*ŒüQa ‚ŒJhy| Íõ©ë£ªl9–<»Չ ª;? ÿB‡?Ið×…ô~Éž"?–Wq•aÏw0ЬÓ©”x°V}ã„ÁõÆø”7¿åà9’SªjÖtí›ËœNVîøêô‰k¾!ù"Ó× rDSc–vðåû¦BÎC†ˆáì>ÏèO Ã+æ]Z‚í«jrS“sµy§Ž¤¨æÌ$ÿe¥?¸†\Bó.©ß¼œo6Ûå;AFZyøkl¼QeïÈ äH«:·A18Ó )!õUäV¾µ›îPikQÞL_mİÕÈÂ^IÙ’OdÀ~ž a°ä Ò…V ÉŸÈüç[RC͹Nù\º«0o½ô×r¸ÀW›0B-ÙÄ£=©D(ÍŠ9‡“Ó5nwР>|—:z¬ïŽ1¶›ÁÒÛG<3^¦¢k‹Fv?2Es‘KÄ,¿axÉB)Û"—âp™\‚à{w:WZpWAÆ"1Àå‰qN÷Gïìt¨1+”¡y LS# èöE»ÿÍ€5Bk¸{Èñ‹žß€Wÿ*øg§ýHΫ’bD$\ãÙ-¶½\иQukjÕ6zA×ÛùTΆ¾“Q„ÕtP@<{~ºÓ§>+XesæEgÌc“MI“Ï'úÆa¤j€Ñêéñc½< wCî]ÕŒEÿX¬KßÒëGtÄÓÕkY3†2óíK½-4Ú&;á䔆NÊ©3}A4nϪ}Û;Ð98õYºÂ÷ Õ»¨§¤>«‡c(¡SŠ#}¡é¹ y¬á1ãßj—íC&E,‰h†½¹Ýf—öIeoçâ­ƒïð9/ü³óê•?ĺ·áF`“Ï·HzSLnQ“ãñüCŒ¥RÕH~/¯°|˜¨¿Ç,±¾¬ ì1í¦¦òÑ¿þ‰_*HSÚhá\³åtqµ›·ñÇðáAè$€-dWÿ!óÚÇ ³/§%‹Ÿ† ePÕ½Öe«‹¥€Ùf†!‹Ã1Ãh|F¢ZaåþAtpòoØ£ æÖ‘|í]¿ˆ^Û ùsBÚ§n%åb_âZ + K¶6ö(@Oí¤_: rÎÑ1Ùíúùñ¯ÅGzÿré´‹õn"t=B„OüdÖ"µabå”å¬Jƒ”ë@Æ©|zšmÄIf˜Cš¨©ö)²îÿÊL¯txа²Ðö Ø¥ ã ¯/4ãèK¥;ÏÌÊçùÒo‘l-é3“U,û˜7ÜûÃâU"ÒöxapïòŠu? ~¼¸íô¦,éO7 >,»]ßFâØöh ûЮŒsiK½üÓé_^ƒÕ“-ú²ºE3Ý—:Œbú^…Ò§8nê óÆîÿ3á!. u€30_· Q¿ÃgYו{Ȩû1Â幆b¹P%ÕŒNhçŸåXn†E(öÌŽŠ?”¶\‘ª¹RUæŒÈÕÎÆ55ü›ŠøoÙ„Nê¾9{î—’vx„ì|³ûlh`éi…‹gg(0y™*$à6ç×FÙ…ˆ0[ ]0b•ò­…Ò-¹N›Nƒè(£7 «LÒT@mNµ½Ù@ÓlÀù”MT3-ß „?e(T4¸Þä(:tî?ÞFÈõ¯'r‹W«^`&Ý/{×l¯Ùy«Kï ~ÞÂ\ÂÈ‚œëá¡B‰²C]Í Ò'êãÁØõ {êbƒÜy`ê÷/Á«MDk²Yºp…Ί½=‘ðûŠc2åL1W ÝK—øÚ¢¯t¶bguÙ²G~À7SòRÑP—¥âòwÓ…;&[j]O*V|Lî\’Ï¥ÙüÎ5,À–vN¸Ч&Ö}—¥þ ÆB7#Äl‰#åv KZ5Ÿ%±?:»C'ÕÁÙ¥¶Þž…/‹¤ÙãݘZc°(¨MÝ:Z)†ò˜¸è˯’ÍÅZ¡A °.ÅUçWjÛ]Ñû9€?­]³ø6'ƒ¼¬ Õ…Óƒ´‘ËV!«Y¹ª8m ÿ_Ç͸ ’PÖs+ÖßÖ"Ìx+/ K_ôßnŽ-›ÿ[%š¬oF<ÜSòú`vâ½—á¦<›,@ˆ8ሠØT†I>cÎ[pp[ˆtùŒrn‘õKvYon}}*··¡gÛ†ó†«ßs" ÷mu—<¾­Q>Ô¦Ûeë ÏÑ¡V(™>`§²ð¶úÛ Òß‚5¨ë5Ï„ã³CUqÌB%ÑVš„ð…rÞÝyØxÚœ—ÐLå??ÞÓœŸÚgšOÏáÇëÅ#ç©kÔ)¶ D<óWd4Ãø›cŸo…­ÃT„‡ g·`ćûØÝýr¶w45 –±Ô?½¢æÓºÏHÓQ‘ËÊ"Q(&oI”OØ×–û¢ý°3;6rkݽl ¥”=#ÏÌgJrï§ç®Àù¦ï™©  ÈH­k8 o6õèTâYQ­¼—^Ã$ýÒ€Úˆ¹ æà|è;i] ÂèVìùÒ«Ìúÿym3wÐiº*E;ùKF« «LÁËŸÌž´ï¹v¦³Ö0 üη¿—E}Ê$|’  Ìf*Îîç6Bx‘ýñvõµ°ÐPÔ þrªG-“‹ ã63ß·ªé68ZöL¶–,+½S×,=À¤»°$FK¶BUD¡H\:*–&Ðj´Ù5T‹§Xì^É:ø€M+ËOðKµ ]òÙÿ&¿9)ºVâîɇˆ…+ïBÂD2úÚÅ‘ùkODæ2ºS”¶©:…–¦›Q´“Q`Öè\ž—µM­O‡úl&ªd{†±ˆ]Ö‹Ž,Ø•­XkËöôÇÓò6|æÕ€–A§ü ·5ùa°¹--UˆŒ×&ã8´&ƒäcÂñÖn±‰eÉXàTP䇒®Mýª³ÎÁ)’̼@®J™’½¾"áÕ=r'n#.Xün¶_'r%>2–b•Sb",ez¡ù%zîÝe¸è„A€}J… ÆöØÙK4ä…0CšÁ4?ªpÙŠŒMlx÷óz!ø¤X¬lµ¥é˜épÛM1ðôeÃî Ô~ íPƒ´æMÝO€ðË@§ˆ843Òœ”æ/®qË~àùë)áÅ~U$‰&HfÚ”F`‚s3¡'k,ñb?‚ûíô¬˜O,ýÁPsÆKŒ—(š ³ÀäÁ?n¥Ñÿ‰yl \‘ ×î1$„ÒKÚtÞ~Tÿ2L 9øR(‚œD½Ú¾¡ÃѽjBqŠÜ +¡Ô‹BÜÎýC"#7AªìTP­ôwN]·E+óÝÎBÞNFVŸÄª/àÊÑU» áên[-…YnàéÍ1.aËX Ûëì‚´aw°<×]š /îHÍÒ$eÿmƒƒL˜×Ö¶\€×£Ä2Y]³h0º?Á~ã)GÅ”%k°©oü{ú°Ò6ɉ½hÐÞ!ìàqËæï.{#‰ä!6j ‚676hq³€ý4èÄð^é/9Q›¤e_9&¬îŒÿ §bd‚ÆoÕSÒBM£'#êN¨èW¬ï,V»¾' ‰š“¹ëtæ÷ÎðsJò ŒÓIDL~£U=8É|щ„Ü@å![féÕ)l•†Ü©ÕÀ$þëÿP:ÃZéßûcu‘^:ûŒ23×§Ò´èSáQ$¿‹pk2æýŒœYXÚF§7ž³í9£©™BšVç{TÆŒXÀ œ€WÃâü§¯ÊNQÀíÓ€ý¯®âåDf"yïáÕ¨´”»ÛÈÞí~߇™î”¬˜±Ö×Z4¢éãk0¥Ö®}‘!èl‹Ë?@Æv*$gtB“\!WÇ5•I€6.C„ÈgCáØ+É…Ù^ õPŒi1ãjs+Xp½á”¡Rî:s†™t~ÿ/‡Úýñ0ÔaÃEBQZ";È =¦i ³Ù¦vê„)³”D/øË‘eÌ‹úª¯º5Ѭç•èt—©!WuÉy ~@?íK!6Êûa 猫‰ k<ß8B`Œöt3F„ÿ3Í9è†4ø¼LÛ“@U€Xœ[ t›~t³ËJt9Kb8ôènÚGòãf·œ@ºEÌÌš¹<Çkžñi[Ø 6×QL»8¯éVj•®ªèëÞj± -À:óWL‚ë diÁm$Ä:Ç âo˜š:¢è´±?wY¡‚çÍ%¸§Tñôíž„OÇ]&G»ý‰¢‹ÜʈñˆH†b^Új—íifxý¡W^ïnpUÑésc,ª2Sþ[1á² È7í¯£‘’FºŠ ò%¬fÄÑ2Œ€õº~—tfQ·÷%ä,ҚРÿ{+ûÉ®0/þ¬øC!@æ2$í¶-û¾­†±·ƒ†§X|¤@#[!ÎØM7¦_vÂû!óJLdìÓK(Ýó—½d³§„EÑ`Ô¨øÆ®‘¥Æ‹"æe—¢'y¼R‰Jžþ‹µq-†Ý¨ƒgÛýf´ÿL:'¦cØ¥6õân¿Ïœà–òÓÒ’ÂÊÙÀaóüç3ßoÁmÓÕlíµ‡ÆƒVVìÞœÄ*(:“ö_´\qT8€.–¦;¡rÎ0³ÚTrâ·ûCP²CŸ÷]7ÂóO¶ÚÀ9Õgn8Õüê´é Ÿådûí»TÏ ˜šAu'¥cQªêc¶o$ãQ#P"ÞÅþ¸F„‹ Lªòž†Sí³óÐLºT‰>{⪘Ñü!P´Çi…GnÞ'„ÙÖfÑÛV{€0× J5ŠßùÁ¯DC/5¯ðV—éDE: 0a±Ž/¹àøUÔÆà­z@&p7Ðt^Û+Ç+:Pq½îGj·š‘B*4w4;ü¾EŒÒŸ)ó̃´«Å>Nô]çô‰,{¼ v¢‡³I¿fÈH¦ûä\ßâ)𥠠ÉPAääÙ¦žQ`VøáÆ&ÒHÞ·™q¦šèî¦R¯rN»Ù}P2 {á®s= !ú>îûž‚[}#ežÅÆgÂøVw쾌u 5?"˜7|¤E"¸GózÉ$á·´(Ÿ^³cøSÆ©@y> ò‘¢ƒBkX‚%i#)šÛäýmþ0ýˆ„2åò=,#{[âW1ª±jÝ»ª«û±fG•gHA‡kÒ ¸QzĽÓ,÷'´ ÞOVk) ZǧÿVöÄ+Ž LFm‡ÞØœÁG ZÝÜlÍ"’êuûºtm•³B…Ï}ŒËA*ü0[iK ylR}ø±û6΃¡Í}/H¸"Ï $g>ÍÃé˜vQrÓd\¦éÃön©‘²Xs$M]ZÞóCqvøŽ$‡m=m˜e¿¯2{QZUªv2šüƒSä„!f7²ë쉗 R—Ë™Ên]‚JzZéE0ÐŒ*ÑQ›-O·Îø÷‚Ñ2ðÁ$Œ©¶r½Nð玟ݶ³ÿqÜÂKu”Exa¸6ô Òýæú¯ùÏEêôÐ)cšìþhêáŸúN)çP’¼ú ¬»$ê"¨øl~Ðó‡ÁéUqLêòÄ=]Ðv¦ Ä ê»ÎAN¶üÔº!ÜÆÒ­8µDú`:?ÜÌ ŽÐ—ÏÑ«¸’ 3âúâ§Êëgb‡ø,>3⣻ Ü*ía$°¼ÁB­$ÕìÝIP%Æä ;è̦ú¾œÝz?eF_¼EÕø¯8hø0A[ª7d*8R0ø’L|T€¾ƒ¾õúK€ÒN”{0Y(˦| éŠf*ž°s©þìôtÿ|Q;ëjœtu›ØWbà~NfOb5Ó˜"HJÄŠ>­§¨vûK)&?/ygò¡5Ìöð‰£º5."ucãý@¦±UhÐ@ˆ{ÎSg=] …]ÓøÂ® d%f›yüreda3ô̦î͸˜«#Aà›é²Þ[ÇŒ²ÖqÞ¸P°‚ºýYÞ(—ì?Ó€¹¸_Wãóÿ+.7µ]„YlßÒ WŠR³³[7ÏO¿FyT¸ÐPÃ^yn6=¯"ŸMô÷ëS",\WRñk9¶f¤ÂF\› V½-’<öUˆ–¬ÿ!&_ß1MÚ¿§@ÝïåÉóÎj;¶0“À×ÁÐep|ľ˜¾Ñ«zxµ7.ɶ¦"_V¤Kv’*‡w³Ý€YÝ£`Þ4P3AÓ~ò貃öá ÷§’?°‘Ë5Á“T8áéXÉMF8àú^;óYå¢êé—kº¡!k_Ÿ1Å‘ì&ÏLþ—9ý`ÓÐ䔌$HÓg|TYWÖ @æñ#†WæÕ³+Ê_Ëc¾?÷?Í~„ ”wç0Jç‘Ò›¶_#þîG1ÚÛjC…m×VŸ¯RÞ@6žØúu$æ’£ nà”¸PøŸncf-cå²ùº^6½–“‡ü¨1õjÞàü†n©% MíØ\Fá’¹ ½îmCc„Zµ{@ÝÒõHÃï0ï³¹£bŠ‹:eZŸ'ÀÓhÚˆ¶D¸)í«Ù¬ÝYØøz7ŠN.Lü›hhÂÁ‰ÖÉÈjO––@š°yðÈ2 Ñí³k[8ЈÔJùôý¹§ëãªöul“Z’;žî³w,½”÷%£Øº«µ”`ÉüzÅýa¥#´Zì̦NÂHéÍèD[?]=]Ä¿:ÓûH”d¥³c51±{.—º—”-®xALM"‹=ÃrØNl 0ælRÚ\ûødõ­Ç Š&jôP°œ¤&`E”sÑ,g‹ k \¢BïåPDL¨Ij=ôϺºA´ úd‹ Û½À*1Tã˜U/2P l’ .ƒmÇÓèb€®ÄæÜƒöó‘AÇGmt(¾C üV®Â 9’„ÝOs4ßÁ‚ž> ¸1+âY£ø‘ö]~3& éßÚ6Ž"kä Ÿ'ö‰å—[Ç®b /ù™ƒ¾˜a«ItÝÕ$»F[„“Þâ*L¨óž2Ïé€D}ÉA(–a!õCÎY2èè<› ¢eX0ü˜Ó‰L…_U7‚oh*ÐËÏui^E¬ÿHˆËó|VF¶XÊ~^–[Æ´Ìq¡ H#<¨;º»ç©$xùiDŒù„"ïŸYY¡ÞÑaL*Le çVêÎúk%«€w¬1 ñF‹±d?‘’7äeÞ /K rß}-âphˆÛFUdÈÛOE!8Ÿ9%8¬'ׯ…Bó½3\ë4vfX«»w§äÍûß<“¯ö¡HæØq„Ñ<5ÑgºÜ3™ãrhµcu¢9‘‰.#\Q]-ŸãðñSô.9Tˆ´‹®^K—þ;\L'ñÃðòmÙ_Ÿ”™Q•@ mëúÌY6™!{ù̈â_RŽV’ÖßóI¯mÄVî§³žođב'Óuö+®O‘gº0&ˆÑ±ø¨Ú–±ækí$±¹c¼¹Ôܺ¾‰ [\è)T:ý”-Ä`Õjl›çY2×T>ÕѤ¤Õ&ºŽcy᛫GÉߥ¨Ø ŠRD/k ”ÃQ!õ“¼š3 c0ÄÃÇZILqͳ¦^+#si-EŠÕëysV7À#äߢ¿zêÝlNùM.§‡“¨È/z¬‡ö8“K 1ܯô(­|¡˜‹è}"œ± ˜O{Óí~Ù úBåvElDƒ_œÃkÖ>žÂ=„¤©‡ÌdÆ4ÇKæG‚'Zät$³`-_R›‡øœç’ Æ-yt‰("g“œŽ>mò"?Duœë¾¥Ã|7Ðׯ°1à…:y-bÿ0¿Ì5ÝÇÍ^:Œ1ÇwÚ¹då¹#Q¿ù§â|Ož i"¸I™•• wŸGïHóÉËwO°çàmnw±€2\ݦ'+4@6žBV¿óÀÜy?P9@Ö­8“‹rÄø62Ä<Íñ®¾™U„ÎÑT‚¨3ì=¡–€Ô‹«7¶FÆÃ‡´{ƒX¬Iœ½3OTèÖwìE8"½î¶oÛ}§Ö–|ì¸ù?y‚@ ?áÙž1‡:“m@¼·»©EÕI Î;|òæøc^6Æ)Õ«%’<Ç6•f„Ã$øŽ§ÉÇ\Vp?ŽaÖœ¬”}¢cÒIê?#2ôˆqà”u{ÜN¬¨];ÅØ<ÔnWªòŸ€Ùo[¥ݧê¥_îÒr)꯵¾«þ S+ÊC:ôôQˆêÑ/óÓµ]‹Ð\Ö¦¶ Ù—Q"´‹=0·¬ &‡õœÛÅo­ý1Q™È’èͰ EŒ”ÉU÷)mw`€êñE (’:»*izNíÃÍéâÑÍ7¸Mö¶KG¶š_ׯ(g¡ÓïB™™ë0gzÚ2­êÖÏvhÛtn“¼ç>(°ëþ^ ‹†CRµ›^ |™žúá{$%WWÄÕHÅo³ˆrñ&÷ҵµzЬ5¤ÞŽª*n-Tn޼×é¦N.L…FQ§ÚûL*ž,lØc¤š>)«ú¼?"ÄÌX I‡¦8´C¾³·Ëý¸ ïe.¦Ë¿('a‘ç‘Êßþ¡KÑrÝk`ëKצ¹7“¬ë”ïcèD>RRU3hqs¤°Ç Ñ a™/"äQ틱~79¿‰¼t#á›Ag® ˆžÄ fûÊ™+žšNý§jMJ\+q—ú¨O0÷¼–úcãlkÚÞöâí¥Bƒpj&BHx8}ú]t¡Œã0W@ÖîŸ8’²ñóD¤Zïxÿ†'i­Ho[ÒF5í äóì—a¸¬~´‹&Ož]êŒKÎ6`½Ò>./%?ÍkÌAôM&’7ÔÁ×ö^]÷&Qíy¿[£öB“T”@ñy¶Ú¤º´ÿ(TiD«âdh§.±\v…ÀN½N™nVR„>åŽú±(: Ì8¸³CAAÒŸ­*5»wS÷-œQŸxQëù“|ô3$}êSäÔð£+Apá\*ðMzé‰åôj£‰ÃŸÈ6ö»¾ïDÛ"¹æ#ˆí£i\+~î¤ëç¦ =?Äz¥¶È‡Œ/B¯Ä £ó”}X?´Ú 1ügGõ2ž†ë©ë¶æÿLø{ ²ÕÝ9ïK޽¸'Á$!"ÒC ™ýïˆwx‘ÃYëÿU–?}µ¤©¸iŸ¨ ¬Ž¢Ý2öNæ„G‰X3" z·Þ®™aCoiª=] ˜JJû/çÆŠé˜Æ.A¾\È3e6'Ãô¡LÏërƒa¤‰ác™XƒX±ÆÑ¿-û)~ˆF–Èøö2½Eíõwv7ìñ(|¹óØñ«‚F?oþk£S‹´ûŒ}©eï8ùqû Ðzû¶äKB³<›}T±XBê$8 Ô•Ý%5Œéçm“AáøŒ@6<žÆ XvÑ5›k§ íÝŽRï<Ü:„‘æËW/Ü)•ÍÛµ÷…Ή1l£,Y°ç‡Ù¶»M;§ióYî6™çx¶c¼µ—é˜Ù¢Á¨é8ñlõÜ,m“£[ìœ/íˆb•828ˆöNçÄ6­žôið³<·†rÐç'%»ú)ß¼=h3¯‘Ù=D‚Åfc¯DÎÙ„X'è……{•«-C¶ÃSümڤŴÜ_âÀ¼­\ž‹¢ñ{qÎÀüinþ‘mì‡3ÅA~ƒTp÷³ºzˆ&°Œ:ì¡Ó‰«7KqAÃÕÛl,çâ™M…Ÿx‘Êbõ6Üá³ÌÀ{!M‡º¶£¤&W å{>ã¶ê‡SÍÕ Á^‡æ7ê6]$…DŒòþdHï›ó áRVHA'6 ÐYë–“=òËVõš“y2vÒÒlG{1^/<4"òu òÎýfüT.é˜ñø©+¾)%ì:mЙÏA)`êªA½äŒ—ÚYFí^^±00ÕxêVš¿éSXzýýï’¡öÿ5Ê;nú4Mˆ®æJ¹Ñ©R2s~Æ«?Áº)¸¼! gg áÎ)þ Üe¶ÖI·¤6¹ €Çq¬—€$ô,õÚp¤Ï6<ϱ9wé»k+ã ̈§EzñFɆ~5ÎÕ4L,êÒœ!uJîföÍy¢mΡ-qȹU6gf±Ä6JÙéH?<%z¿Ñ7žDÑ *÷ 0Úr€¹¹i°qý²—M× ‹2(-é^"vA\’bõP»@ÂË95ùi¢¾fí?¹ä¾I™ǹ¤¹tm%<ŽBn³2"À'˜ã‰üà’§HVöé¸ÜR»b.zAaßIçÄ$‚q¢ˆn¹+ÆÁü¡9‘‰Ìãl$LÒÇM\ß)…3I’ûžšÞ¹—TV§Ȫ/N-‹{^þ”ü‰R‚ùZKͯëPBd¡™än4C².]N|íð¢UËwå]}:8ÊMÈà´ÇàKt)Hh;lí@³ˆ&oœ‚RfMèf‡¶UÜÜOö›‹Kˆòü›ðjÔá\Nr ^Ø}2˜C*¯Œ¾hç"ò'|vô ´jóV)æç0E•K:œ9ÚxªL‹ýŒÙÕ"nòM9‚k)ñÑ©IýÉùA–ÙR8õ<&ßA¡æAËyúñ»lüžŠ(À1ÔÞ‹É_GÕµÌpIiœh†NË@_*"~ã*øåM÷Nx §ïOê"2°èÆz‡jl÷½ø|/±ûƒÕ_„\Åð‹PƒÏE-¹ÿe^·2ÙËÓÝOåá§¾ëâÏM±(Ä9j[^óÄû\%Qè6Ó9þp†ŒÅ_ì¤Tâ'Ñ4aj+¯žªâóƤG™yÖè­ÎÎò3ãF‰6¯éŽ€§ c1rËé):$›6˜ÖâDt‰HKr½¢ ®*×™)z\Šõ„ÁêÏõÜt¤@ü‰õð%ÚkÂÉ`¾O—Y xLQlŒ§ -×x€†ÍꆕÐ8¹¦œ$hè­yã‘Ì?; w@*ÛCÅ24=#Žê¥)OÖ…ÿxH dýÈØ2×Ü|Ãaôò¤šxmÆÒ ÁÈÁt†˜ã#iž˜8ñt§Ë·sî €vÔ‚ü ù“°â êß„PÜïùSŽñ´%ÊGO^=8# bæ8V¢ßeãÜs:Ð(ÛT^ÿyDÔ`—øD©ÆÆwÚ%„""lúZ?T‡›ÙÄ£(¢=õ)Nm³Ý%Ò*ÜF%_†|T:Aï4Ï“—.Šäz»Ÿ;A…õkŽÞÃê„@H·¥’Õ—LöËé¬þшœELÙTŸwÃ2½øš*ãH·ß@©*¿HS{ÞF?$Ñ,°>9Ü]gŒ>aÛûñ¬õâN¯`4ª{ ‰…?ÂUÀ˜ã #Ì¡Ov?‘]Rõ4V¥ [5›æ ˜ÈSÃ^ìP`jäeg«¬3a¿âo©ÕçÝÙÊo˜€ô®<ÝX)¢‹¾-!]úSnOþª™ƒì>åeUµñáö¬ì»äC‹.íŒv93cö‰þýž5™£Ý98{ÏÏ7¢~Ù—°‘óÈ)7b̓ä:ÊÀõÊ·âôNEÊÿ4»êõtÁü/Òœ1ð³=oÔ,yè!n_²žƒŠü~,Bm¬ä$±®YaQŽî#­ø|ˆ<¶—ëÏøÆ…Æ8Þ&ÐX1k4(ì–„\Ûöµôl6Œ¹vŠ•q’ÄõÖÞ>£Dïy¶¾Î½Uùü+•’/õ¥Ä#oÝR2N2U4©ÙÊ ËUÁ!øá[ìêÕ¼ûAj+L{ÄaÐ6€aîcµß‡o×ÒFç<½Ž2Ò¬ùHÒedkâÉ|WñL¹,ôð‡òÙ– úΡ?!ßmâ„ç¨ëÙ=—ÛóqË 6‘¡^—0^ïÂ)½Ò+ž²óPUëë´Z¹A·C¥Ç0¸–C§K`oa„F<ã“k½# ÚYÆ*1O1П–WÖ‰ÓNÿ4³%i¡µßÄö”°1;Ly:uº±‡ú\»)Éõ€5£Üëÿ[Ž”ý £ÍpOŽ"ÔÒÞô/A ” ¦R ­óì#Ýò(Åóöf$…º³T¡  Q‚¹7l”°S+e‰•Á:ÂÌ _ôÛ˜¶•X«Æí×GØ .·ä¶†× B¸Ûä û9l7A±g·kZœöfèZi RäügÚðÅl|íÑFƒ Éè }V^å³pŠk0ä{d^ì>³Õ±~ö@¢œk2ÈQÿ=ÖzӧǺ¼ŽI­ŸïÄ<¥wOî>¢ÑïGùaƒuÈ=`Ü0žÃ9OÏ·‹¶6ù±Úêð#ŒÕ*‡¯kT×Q?×MÅÔUw‚pùS‰AuQÒ h-§9‡ßT ›‹æß²x˜%hÓ›×Dð4æß–ðl§.à »úš¿«|tÀ)Éúj¯ ¥£Ã· ô—Æ”‘¿YÈ$cØÍK±Ò7bä6Hí¤Ð¢BPrÓ_zø¡ s8ë(Ýœ¢9 ¸üŽçO¶‹^ò‰?±ë© DB*jŒœO^­KyÁ/b®©QûÁ¡À¹:iCýbÙ›/²Tðï«Úµ*»l¿™w3Dý¡áMºQñü­kË)ÔäÞš&¬2$JÍÒŠÑú7|¦k!ÒÆå”+Y¿›Ç“ÔÊMººhÈÅ(¶ðîxÒÉ,Œ_먓Mè´ª É„‰rw|™Kçb¯L«?È‹6NÑ Â¶§r;Ì:Í[ý;ö–s¬OÇ CL½?€»Ç:~‘J^ÂÏMNí,8—î ùˆx¿÷CUl?ÿtEò\K<’áä”ç…¥–x*ü¼ ¼t§°š ‚ƒˆÀÇ×I7@wÙ úú²sìa•xœùÅ!¾ûí•“~ù£¬'!+úô¥ylG”YN-à $:ðƒ xaTk8•ÇÔús&Y‰É’„¶¦“x-›éÕk!bâ  G –:>hÃsߦöõÖùGý"ÿˆ9J¦žohžˆgg/ ±$²r•8¶eŽ –ùwïä9ýÓ;àû'œ&ö*GX Ï!TÚ:^Q–£ã)Á™ïF×4d\›}Ë«XÝË!¹.Ppü(ƒÓöž[dqĸE£ Šœuß¶SšG¨;¯:‚–=w½}ˆÔGIQtËzäxTݲó $!Åÿ8¾ÑZ™ÐJûø¹Í-­s…Yx.tP»üx$õcÃsÿyžcyßÑ"Þq/Ñ>ðcñÚÕxãÕÛd¡ó•¹÷åºñ+Þ”¬Èn JV5¼'ô·¶* QWÙŠ!,Ú+\Ðá™B‰‘DÊËù»[„xôÛèúà „ö!*E,¹p£V“ÒnˆYà› {šœM„›',¨'ÿveɬt¡º Xß×uu§ºèå>±„η_K¶In=4£­ÉHA=¸Ôn¾~'Îϱ¢x&zCq)unõ4ÅóÞ/ÏñÓæG’[Yú6O*µ$@„cŠÏŒ«ò;OžçèwÈæÂ¼dŠ–‘â8/ÿ`âä`@~ʽ¼§;%iŽ´_óMj am”®“K–8vUÏ CKMí4{Õ¤XÍEÇ "1î’uõÅot¢+œ¬¡™¹’çŠy{´kˆld÷Ûm[éëæ"›5È]U‰½D4Íó•vPxöô)ÅEwáHSY~ëLýâBn….ðX«[¹ÇÙl¸˜ïªËÒÒÒÒªº$5gŸZÃ!ÖËQTh,æÂ3[„}Øåjn÷úø$ ½K[ëâ2Ѭ¿oåÅ‹‡îŽÿa¾‡bíêkjU™õ®”)Fö hOꀢk³‚AÞN€ƒäˆ2¶Ï@ °-Ü0¥/ÑDz<¹ E_I‹îMú¼Í(ó÷ï9(ZJÛª€’Äá0J:Pw'€„àêÌvaÇà‹JÑi`ŒÁaG93I`âñλaI¯~>Ï œ“oéÚj¤nfŽ\Â3áò~h¿ÿF¹ìa×)],ºð ;H:š~Ë e6Ùòü•ÁSÄŠ êu£²à8t‡+Ï'áô[äXKW•Žœ›#¿žã 4Õl{ ë¹Á"ýïUª“‘í®!¶n#Þ®ÃFäG4.([IRÍ{® ä—¬îãšø„‚ºƒ Y[!p¤£#.@Ü4=qpANÝKŸ,Óa&a4íU„]–-<×ÛU¢ˆfÊ…Bd'W:µmÑvõöÓ‚IS;€—$ŠN‹áGö©0ï·Öògouöâ#‘ù)§½?J°d8¥ˆ <¬þ¬ëÕë?” Ux˜ˆóVªdú—w‚$%t`YÅñ‰—Â…E[͈{*Tüõ±$®G¨Àë¶iQ5*õ¼»-ܯxNvÄ“]²ù¥wü€¿fNO› N¯i‹ùšêí *!çÅf0ÎîÝ«ÿ[×£Ô…ÒïÄë꥘}IÁ?öû†¡jß§»¼ò¾ƒ‘Þ,ÍïU¯}›»²;~~ƒ$U?q`P $^· r!2m¢5Ý›,Ôµ¶»ún©M7…%æ ¤M‰¬ œÏ™µäÉQñŽmÇ÷FW%ÛÖ+ [,ÕŠU]P×Ì¿5˜5\fÛ>¶>WÖ f¥s–åúmÐ;püvá2†îŸÊ6Nw°öæ£ÄêCÈ'ª(4»½ë“sôGg9P®Þ¶=j`(‡§³T¡¨¦‘¤×5Òv˜a€õõú­B¤ß#^öÖ`Oú¹ò‚vÔ V–OQȶ¸ìkþ&|1¶GbW¸%6þ¬ðRuæÀÅ2üQÏúÚqýgdï,˜}![n =˜|_6à šeqú„ºÙϼW.Ÿyƒ²¬NÞ[l¿„4Õç×ê¼b•ˆy:‹1J Ó#èW dÆòuaàûÏÃ.«©úÁáQ2V¤þ„° òü«´ùíxáL«1ðÕý —°ŠÙ—M²p¾6þºMØdßk‹Ô4Xq³šKGwG̾Æ¢‚榙[OW{ëü9zDÛ{LäEAE¯ rïÌ ßþT¼CÈ-¸J×4™Ò³>VGeŠE-‹xFÇáEãÅó¿!¥*§ü+ŸàÝÌcNœlÏýÌ0ßë–3œõ³iª\ÌroI~èÿ7¼ž‚Óªìð .‚á8zË/t‘¾¿ìuÔ¼îUåÕn¹Ì³ÁƒþðAAGf LqÇ[þ%_T2dͲ@Yq6œópÁ4w˜J†€½=¿ïÒô–‹Œ™¦cT{¨JËq0Bö„¿YJrå«„>bc²Û…Ç]®-ê&º¼$ÇÔéÌsq tM[ˆ±ÿ¿5¿p„1–(1&ã'FEŠ€)¦Lߪ_uG9(«>}AaXrúâ!rLê§•÷»§­ªŸ| (º–+e½YÂj÷jH#ŸÓHN«ËsBÞùª²Ü&¨¸¥Í­ZfîÔï8xš¡µc¢+nŸøVkˆJúCujfy<ã+LAë{ IµøÚ.¶}“T²?`ê¾s ®©gâ=KŽo2X‰ ‰3¶Ö²¦Z1RÞ™†šÎjoyo§ŠÐ;#Aj8aØH«c!¶6eãTŽÕd‚™’ù2UÚÔ¿W©¦cDžœ‡r-Ù?ѽBP¨xðJKµIoüv3vmˆW¿à¯­ŸÇ®ž_Eé &¿ü#yY"Ù'g¦°Ö¼_pø×"“\‹þ×´•`Wæ{– ­¨A.û¹€aÊÐî%¦IáDÑDQl/40Oer !ˆËæ>>FM[—æÆn/¸ÔHe¦š¯ÑnqúY¨ŠÃÊù`:|øÖèÄZÜ5‘óŽÏm•=@39HZ’JŠBÇ7ËnvØ£w­ú¯F&ݨÁÆ»Â[ÛÒÆ<±ykªöv³¾C͕đÅ>ÚÚ›“¥2€¬üf~ùpPŽËm #ý&_¶;~ ¿¿ rÕB½ªÝç5ÍÜšbû·Æâ6Ãß<ï ­5ÞºÖ ²vk¿(ÂT§íJK$j0ˆ–=;º‘ºA¨CõDNb ÷Kw…>þþ^ûoBîHÌаèàœ-àуÁŽyÒwº9ô»¸^æsBá0½òK{;Täè=©ì ðè8¦ÓiS1ÝV•Ô5¯x.ž¿)Õæ´ã XiSÿMTÂì6éF@$€J,ÚÐ¥›à¼‰Ôö4xU.£­kº cçP·Õ˜"<ý‹VÔ”C˜2…ÌûžB2Á¿_°¬G—Suø¸êÏ£W—ÎÿgÝT,ñØ–%0É©;ÛªÑ «µm#s¹Ì#ObÚCcB¢ÚÀ‘)Ó- Þ¨[Cz5erpŸƒœCåì7FÇ}\ÀàÍÞÑk¡io%i¨Ž:cÚZ° …Íþ€Ïvº ß×̹ü€™jùØúüT¢ºpn§‡T{ò§u׿Q´1U9jЂãeQê©)‹G¬D<~ µA·È »EôUéM¢š{Åo÷3æG;¬ÿÆó«5Žñä ­- ap©Û<Ú÷D$@ëM yàéÍ+«Œî€õm=´Çh@·o'nŠ<ô||_¼‚Û¯Ø[áúIZ^÷ªù”_ñ ÎÝ/PªÌÃ`’W³ä–X´‹…·Â³låÆIõ?Êb¡F¾Àú´g»nóÐn.ÝñÕJ'rÛú™Í€ÛÞ®«–ZA´Ñ™&ž \|4ÿn±Ãÿ|3bbB'ØB×3ÄíWu˜\¶)ìtÓ©»†€xìË—g÷Åà¶eÞñF'8ò ŠTÁ[ç?D¿™-‚=Äž}·&ÈÐXr&qëüéêÂxÅ»bX#R‘à>Ï_~²mŸôÕMƒèó·Š¡ëAŠŒÏ/€'´ã½(;‚ê¾ ÷öTØHÍ™¼Áн•oœ €-î_«R¥j{rü’‚̳1p’Ûþu¬ èÙ¸Ã-º§Y™éú!¢iÜ+ O+T-kÚ2¬e›åï7›Ï’1NÇá!VG(;/¦màÈ"SgW•ïi¸Bèì—VâÁ z/­Ç…Š˜¼4qcC…îµ:Èï­5í±U›áÕˆƒ°¯sl—øFù2‹È!:@·I]OžáøŠ­úu×cYj¡sªÚŠƒÑS'âº>ocþKYç> !hÓ ¾pÁL•ÐwH¥äDÕÿ8'¸`Åšt"»Oâd³œ+ÛçsÑ¡Ës´íjâ¿Ä‹fHùCÕ²uEìžãëІt~]ž°ØB–íÀ¥ŽQ;zgQдŸŽ4À-lj8:ÊF)§²ÊçåE™Ñó ´iãïSâñƒÉm7òæ ××)ÓqZ†/¼ ÂÊyGLäÛ0ÇhºP\5Sm} v,¡CP=,ÖÎ܃o˜ïIÊ9Æ´ã´r|Š«è*ŒüQa ‚ŒJhy| Íõ©ë£ªl9–<»Չ ª;? ÿB‡?Ið×…ô~Éž"?–Wq•aÏw0ЬÓ©”x°V}ã„ÁõÆø”7¿åà9’SªjÖtí›ËœNVîøêô‰k¾!ù"Ó× rDSc–vðåû¦BÎC†ˆáì>ÏèO Ã+æ]Z‚í«jrS“sµy§Ž¤¨æÌ$ÿe¥?¸†\Bó.©ß¼œo6Ûå;AFZyøkl¼QeïÈ äH«:·A18Ó )!õUäV¾µ›îPikQÞL_mİÕÈÂ^IÙ’OdÀ~ž a°ä Ò…V ÉŸÈüç[RC͹Nù\º«0o½ô×r¸ÀW›0B-ÙÄ£=©D(ÍŠ9‡“Ó5nwР>|—:z¬ïŽ1¶›ÁÒÛG<3^¦¢k‹Fv?2Es‘KÄ,¿axÉB)Û"—âp™\‚à{w:WZpWAÆ"1Àå‰qN÷Gïìt¨1+”¡y LS# èöE»ÿÍ€5Bk¸{Èñ‹žß€Wÿ*øg§ýHΫ’bD$\ãÙ-¶½\иQukjÕ6zA×ÛùTΆ¾“Q„ÕtP@<{~ºÓ§>+XesæEgÌc“MI“Ï'úÆa¤j€Ñêéñc½< wCî]ÕŒEÿX¬KßÒëGtÄÓÕkY3†2óíK½-4Ú&;á䔆NÊ©3}A4nϪ}Û;Ð98õYºÂ÷ Õ»¨§¤>«‡c(¡SŠ#}¡é¹ y¬á1ãßj—íC&E,‰h†½¹Ýf—öIeoçâ­ƒïð9/ü³óê•?ĺ·áF`“Ï·HzSLnQ“ãñüCŒ¥RÕH~/¯°|˜¨¿Ç,±¾¬ ì1í¦¦òÑ¿þ‰_*HSÚhá\³åtqµ›·ñÇðáAè$€-dWÿ!óÚÇ ³/§%‹Ÿ† ePÕ½Öe«‹¥€Ùf†!‹Ã1Ãh|F¢ZaåþAtpòoØ£ æÖ‘|í]¿ˆ^Û ùsBÚ§n%åb_âZ + K¶6ö(@Oí¤_: rÎÑ1Ùíúùñ¯ÅGzÿré´‹õn"t=B„OüdÖ"µabå”å¬Jƒ”ë@Æ©|zšmÄIf˜Cš¨©ö)²îÿÊL¯txа²Ðö Ø¥ ã ¯/4ãèK¥;ÏÌÊçùÒo‘l-é3“U,û˜7ÜûÃâU"ÒöxapïòŠu? ~¼¸íô¦,éO7 >,»]ßFâØöh ûЮŒsiK½üÓé_^ƒÕ“-ú²ºE3Ý—:Œbú^…Ò§8nê óÆîÿ3á!. u€30_· Q¿ÃgYו{Ȩû1Â幆b¹P%ÕŒNhçŸåXn†E(öÌŽŠ?”¶\‘ª¹RUæŒÈÕÎÆ55ü›ŠøoÙ„Nê¾9{î—’vx„ì|³ûlh`éi…‹gg(0y™*$à6ç×FÙ…ˆ0[ ]0b•ò­…Ò-¹N›Nƒè(£7 «LÒT@mNµ½Ù@ÓlÀù”MT3-ß „?e(T4¸Þä(:tî?ÞFÈõ¯'r‹W«^`&Ý/{×l¯Ùy«Kï ~ÞÂ\ÂÈ‚œëá¡B‰²C]Í Ò'êãÁØõ {êbƒÜy`ê÷/Á«MDk²Yºp…Ί½=‘ðûŠc2åL1W ÝK—øÚ¢¯t¶bguÙ²G~À7SòRÑP—¥âòwÓ…;&[j]O*V|Lî\’Ï¥ÙüÎ5,À–vN¸Ч&Ö}—¥þ ÆB7#Äl‰#åv KZ5Ÿ%±?:»C'ÕÁÙ¥¶Þž…/‹¤ÙãݘZc°(¨MÝ:Z)†ò˜¸è˯’ÍÅZ¡A °.ÅUçWjÛ]Ñû9€?­]³ø6'ƒ¼¬ Õ…Óƒ´‘ËV!«Y¹ª8m ÿ_Ç͸ ’PÖs+ÖßÖ"Ìx+/ K_ôßnŽ-›ÿ[%š¬oF<ÜSòú`vâ½—á¦<›,@ˆ8ሠØT†I>cÎ[pp[ˆtùŒrn‘õKvYon}}*··¡gÛ†ó†«ßs" ÷mu—<¾­Q>Ô¦Ûeë ÏÑ¡V(™>`§²ð¶úÛ Òß‚5¨ë5Ï„ã³CUqÌB%ÑVš„ð…rÞÝyØxÚœ—ÐLå??ÞÓœŸÚgšOÏáÇëÅ#ç©kÔ)¶ D<óWd4Ãø›cŸo…­ÃT„‡ g·`ćûØÝýr¶w45 –±Ô?½¢æÓºÏHÓQ‘ËÊ"Q(&oI”OØ×–û¢ý°3;6rkݽl ¥”=#ÏÌgJrï§ç®Àù¦ï™©  ÈH­k8 o6õèTâYQ­¼—^Ã$ýÒ€Úˆ¹ æà|è;i] ÂèVìùÒ«Ìúÿym3wÐiº*E;ùKF« «LÁËŸÌž´ï¹v¦³Ö0 üη¿—E}Ê$|’  Ìf*Îîç6Bx‘ýñvõµ°ÐPÔ þrªG-“‹ ã63ß·ªé68ZöL¶–,+½S×,=À¤»°$FK¶BUD¡H\:*–&Ðj´Ù5T‹§Xì^É:ø€M+ËOðKµ ]òÙÿ&¿9)ºVâîɇˆ…+ïBÂD2úÚÅ‘ùkODæ2ºS”¶©:…–¦›Q´“Q`Öè\ž—µM­O‡úl&ªd{†±ˆ]Ö‹Ž,Ø•­XkËöôÇÓò6|æÕ€–A§ü ·5ùa°¹--UˆŒ×&ã8´&ƒäcÂñÖn±‰eÉXàTP䇒®Mýª³ÎÁ)’̼@®J™’½¾"áÕ=r'n#.Xün¶_'r%>2–b•Sb",ez¡ù%zîÝe¸è„A€}J… ÆöØÙK4ä…0CšÁ4?ªpÙŠŒMlx÷óz!ø¤X¬lµ¥é˜épÛM1ðôeÃî Ô~ íPƒ´æMÝO€ðË@§ˆ843Òœ”æ/®qË~àùë)áÅ~U$‰&HfÚ”F`‚s3¡'k,ñb?‚ûíô¬˜O,ýÁPsÆKŒ—(š ³ÀäÁ?n¥Ñÿ‰yl \‘ ×î1$„ÒKÚtÞ~Tÿ2L 9øR(‚œD½Ú¾¡ÃѽjBqŠÜ +¡Ô‹BÜÎýC"#7AªìTP­ôwN]·E+óÝÎBÞNFVŸÄª/àÊÑU» áên[-…YnàéÍ1.aËX Ûëì‚´aw°<×]š /îHÍÒ$eÿmƒƒL˜×Ö¶\€×£Ä2Y]³h0º?Á~ã)GÅ”%k°©oü{ú°Ò6ɉ½hÐÞ!ìàqËæï.{#‰ä!6j ‚676hq³€ý4èÄð^é/9Q›¤e_9&¬îŒÿ §bd‚ÆoÕSÒBM£'#êN¨èW¬ï,V»¾' ‰š“¹ëtæ÷ÎðsJò ŒÓIDL~£U=8É|щ„Ü@å![féÕ)l•†Ü©ÕÀ$þëÿP:ÃZéßûcu‘^:ûŒ23×§Ò´èSáQ$¿‹pk2æýŒœYXÚF§7ž³í9£©™BšVç{TÆŒXÀ œ€WÃâü§¯ÊNQÀíÓ€ý¯®âåDf"yïáÕ¨´”»ÛÈÞí~߇™î”¬˜±Ö×Z4¢éãk0¥Ö®}‘!èl‹Ë?@Æv*$gtB“\!WÇ5•I€6.C„ÈgCáØ+É…Ù^ õPŒi1ãjs+Xp½á”¡Rî:s†™t~ÿ/‡Úýñ0ÔaÃEBQZ";È =¦i ³Ù¦vê„)³”D/øË‘eÌ‹úª¯º5Ѭç•èt—©!WuÉy ~@?íK!6Êûa 猫‰ k<ß8B`Œöt3F„ÿ3Í9è†4ø¼LÛ“@U€Xœ[ t›~t³ËJt9Kb8ôènÚGòãf·œ@ºEÌÌš¹<Çkžñi[Ø 6×QL»8¯éVj•®ªèëÞj± -À:óWL‚ë diÁm$Ä:Ç âo˜š:¢è´±?wY¡‚çÍ%¸§Tñôíž„OÇ]&G»ý‰¢‹ÜʈñˆH†b^Új—íifxý¡W^ïnpUÑésc,ª2Sþ[1á² È7í¯£‘’FºŠ ò%¬fÄÑ2Œ€õº~—tfQ·÷%ä,ҚРÿ{+ûÉ®0/þ¬øC!@æ2$í¶-û¾­†±·ƒ†§X|¤@#[!ÎØM7¦_vÂû!óJLdìÓK(Ýó—½d³§„EÑ`Ô¨øÆ®‘¥Æ‹"æe—¢'y¼R‰Jžþ‹µq-†Ý¨ƒgÛýf´ÿL:'¦cØ¥6õân¿Ïœà–òÓÒ’ÂÊÙÀaóüç3ßoÁmÓÕlíµ‡ÆƒVVìÞœÄ*(:“ö_´\qT8€.–¦;¡rÎ0³ÚTrâ·ûCP²CŸ÷]7ÂóO¶ÚÀ9Õgn8Õüê´é Ÿådûí»TÏ ˜šAu'¥cQªêc¶o$ãQ#P"ÞÅþ¸F„‹ Lªòž†Sí³óÐLºT‰>{⪘Ñü!P´Çi…GnÞ'„ÙÖfÑÛV{€0× J5ŠßùÁ¯DC/5¯ðV—éDE: 0a±Ž/¹àøUÔÆà­z@&p7Ðt^Û+Ç+:Pq½îGj·š‘B*4w4;ü¾EŒÒŸ)ó̃´«Å>Nô]çô‰,{¼ v¢‡³I¿fÈH¦ûä\ßâ)𥠠ÉPAääÙ¦žQ`VøáÆ&ÒHÞ·™q¦šèî¦R¯rN»Ù}P2 {á®s= !ú>îûž‚[}#ežÅÆgÂøVw쾌u 5?"˜7|¤E"¸GózÉ$á·´(Ÿ^³cøSÆ©@y> ò‘¢ƒBkX‚%i#)šÛäýmþ0ýˆ„2åò=,#{[âW1ª±jÝ»ª«û±fG•gHA‡kÒ ¸QzĽÓ,÷'´ ÞOVk) ZǧÿVöÄ+Ž LFm‡ÞØœÁG ZÝÜlÍ"’êuûºtm•³B…Ï}ŒËA*ü0[iK ylR}ø±û6΃¡Í}/H¸"Ï $g>ÍÃé˜vQrÓd\¦éÃön©‘²Xs$M]ZÞóCqvøŽ$‡m=m˜e¿¯2{QZUªv2šüƒSä„!f7²ë쉗 R—Ë™Ên]‚JzZéE0ÐŒ*ÑQ›-O·Îø÷‚Ñ2ðÁ$Œ©¶r½Nð玟ݶ³ÿqÜÂKu”Exa¸6ô Òýæú¯ùÏEêôÐ)cšìþhêáŸúN)çP’¼ú ¬»$ê"¨øl~Ðó‡ÁéUqLêòÄ=]Ðv¦ Ä ê»ÎAN¶üÔº!ÜÆÒ­8µDú`:?ÜÌ ŽÐ—ÏÑ«¸’ 3âúâ§Êëgb‡ø,>3⣻ Ü*ía$°¼ÁB­$ÕìÝIP%Æä ;è̦ú¾œÝz?eF_¼EÕø¯8hø0A[ª7d*8R0ø’L|T€¾ƒ¾õúK€ÒN”{0Y(˦| éŠf*ž°s©þìôtÿ|Q;ëjœtu›ØWbà~NfOb5Ó˜"HJÄŠ>­§¨vûK)&?/ygò¡5Ìöð‰£º5."ucãý@¦±UhÐ@ˆ{ÎSg=] …]ÓøÂ® d%f›yüreda3ô̦î͸˜«#Aà›é²Þ[ÇŒ²ÖqÞ¸P°‚ºýYÞ(—ì?Ó€¹¸_Wãóÿ+.7µ]„YlßÒ WŠR³³[7ÏO¿FyT¸ÐPÃ^yn6=¯"ŸMô÷ëS",\WRñk9¶f¤ÂF\› V½-’<öUˆ–¬ÿ!&_ß1MÚ¿§@ÝïåÉóÎj;¶0“À×ÁÐep|ľ˜¾Ñ«zxµ7.ɶ¦"_V¤Kv’*‡w³Ý€YÝ£`Þ4P3AÓ~ò貃öá ÷§’?°‘Ë5Á“T8áéXÉMF8àú^;óYå¢êé—kº¡!k_Ÿ1Å‘ì&ÏLþ—9ý`ÓÐ䔌$HÓg|TYWÖ @æñ#†WæÕ³+Ê_Ëc¾?÷?Í~„ ”wç0Jç‘Ò›¶_#þîG1ÚÛjC…m×VŸ¯RÞ@6žØúu$æ’£ nà”¸PøŸncf-cå²ùº^6½–“‡ü¨1õjÞàü†n©% MíØ\Fá’¹ ½îmCc„Zµ{@ÝÒõHÃï0ï³¹£bŠ‹:eZŸ'ÀÓhÚˆ¶D¸)í«Ù¬ÝYØøz7ŠN.Lü›hhÂÁ‰ÖÉÈjO––@š°yðÈ2 Ñí³k[8ЈÔJùôý¹§ëãªöul“Z’;žî³w,½”÷%£Øº«µ”`ÉüzÅýa¥#´Zì̦NÂHéÍèD[?]=]Ä¿:ÓûH”d¥³c51±{.—º—”-®xALM"‹=ÃrØNl 0ælRÚ\ûødõ­Ç Š&jôP°œ¤&`E”sÑ,g‹ k \¢BïåPDL¨Ij=ôϺºA´ úd‹ Û½À*1Tã˜U/2P l’ .ƒmÇÓèb€®ÄæÜƒöó‘AÇGmt(¾C üV®Â 9’„ÝOs4ßÁ‚ž> ¸1+âY£ø‘ö]~3& éßÚ6Ž"kä Ÿ'ö‰å—[Ç®b /ù™ƒ¾˜a«ItÝÕ$»F[„“Þâ*L¨óž2Ïé€D}ÉA(–a!õCÎY2èè<› ¢eX0ü˜Ó‰L…_U7‚oh*ÐËÏui^E¬ÿHˆËó|VF¶XÊ~^–[Æ´Ìq¡ H#<¨;º»ç©$xùiDŒù„"ïŸYY¡ÞÑaL*Le çVêÎúk%«€w¬1 ñF‹±d?‘’7äeÞ /K rß}-âphˆÛFUdÈÛOE!8Ÿ9%8¬'ׯ…Bó½3\ë4vfX«»w§äÍûß<“¯ö¡HæØq„Ñ<5ÑgºÜ3™ãrhµcu¢9‘‰.#\Q]-ŸãðñSô.9Tˆ´‹®^K—þ;\L'ñÃðòmÙ_Ÿ”™Q•@ mëúÌY6™!{ù̈â_RŽV’ÖßóI¯mÄVî§³žođב'Óuö+®O‘gº0&ˆÑ±ø¨Ú–±ækí$±¹c¼¹Ôܺ¾‰ [\è)T:ý”-Ä`Õjl›çY2×T>ÕѤ¤Õ&ºŽcy᛫GÉߥ¨Ø ŠRD/k ”ÃQ!õ“¼š3 c0ÄÃÇZILqͳ¦^+#si-EŠÕëysV7À#äߢ¿zêÝlNùM.§‡“¨È/z¬‡ö8“K 1ܯô(­|¡˜‹è}"œ± ˜O{Óí~Ù úBåvElDƒ_œÃkÖ>žÂ=„¤©‡ÌdÆ4ÇKæG‚'Zät$³`-_R›‡øœç’ Æ-yt‰("g“œŽ>mò"?Duœë¾¥Ã|7Ðׯ°1à…:y-bÿ0¿Ì5ÝÇÍ^:Œ1ÇwÚ¹då¹#Q¿ù§â|Ož i"¸I™•• wŸGïHóÉËwO°çàmnw±€2\ݦ'+4@6žBV¿óÀÜy?P9@Ö­8“‹rÄø62Ä<Íñ®¾™U„ÎÑT‚¨3ì=¡–€Ô‹«7¶FÆÃ‡´{ƒX¬Iœ½3OTèÖwìE8"½î¶oÛ}§Ö–|ì¸ù?y‚@ ?áÙž1‡:“m@¼·»©EÕI Î;|òæøc^6Æ)Õ«%’<Ç6•f„Ã$øŽ§ÉÇ\Vp?ŽaÖœ¬”}¢cÒIê?#2ôˆqà”u{ÜN¬¨];ÅØ<ÔnWªòŸ€Ùo[¥ݧê¥_îÒr)꯵¾«þ S+ÊC:ôôQˆêÑ/óÓµ]‹Ð\Ö¦¶ Ù—Q"´‹=0·¬ &‡õœÛÅo­ý1Q™È’èͰ EŒ”ÉU÷)mw`€êñE (’:»*izNíÃÍéâÑÍ7¸Mö¶KG¶š_ׯ(g¡ÓïB™™ë0gzÚ2­êÖÏvhÛtn“¼ç>(°ëþ^ ‹†CRµ›^ |™žúá{$%WWÄÕHÅo³ˆrñ&÷ҵµzЬ5¤ÞŽª*n-Tn޼×é¦N.L…FQ§ÚûL*ž,lØc¤š>)«ú¼?"ÄÌX I‡¦8´C¾³·Ëý¸ ïe.¦Ë¿('a‘ç‘Êßþ¡KÑrÝk`ëKצ¹7“¬ë”ïcèD>RRU3hqs¤°Ç Ñ a™/"äQ틱~79¿‰¼t#á›Ag® ˆžÄ fûÊ™+žšNý§jMJ\+q—ú¨O0÷¼–úcãlkÚÞöâí¥Bƒpj&BHx8}ú]t¡Œã0W@ÖîŸ8’²ñóD¤Zïxÿ†'i­Ho[ÒF5í äóì—a¸¬~´‹&Ož]êŒKÎ6`½Ò>./%?ÍkÌAôM&’7ÔÁ×ö^]÷&Qíy¿[£öB“T”@ñy¶Ú¤º´ÿ(TiD«âdh§.±\v…ÀN½N™nVR„>åŽú±(: Ì8¸³CAAÒŸ­*5»wS÷-œQŸxQëù“|ô3$}êSäÔð£+Apá\*ðMzé‰åôj£‰ÃŸÈ6ö»¾ïDÛ"¹æ#ˆí£i\+~î¤ëç¦ =?Äz¥¶È‡Œ/B¯Ä £ó”}X?´Ú 1ügGõ2ž†ë©ë¶æÿLø{ ²ÕÝ9ïK޽¸'Á$!"ÒC ™ýïˆwx‘ÃYëÿU–?}µ¤©¸iŸ¨ ¬Ž¢Ý2öNæ„G‰X3" z·Þ®™aCoiª=] ˜JJû/çÆŠé˜Æ.A¾\È3e6'Ãô¡LÏërƒa¤‰ác™XƒX±ÆÑ¿-û)~ˆF–Èøö2½Eíõwv7ìñ(|¹óØñ«‚F?oþk£S‹´ûŒ}©eï8ùqû Ðzû¶äKB³<›}T±XBê$8 Ô•Ý%5Œéçm“AáøŒ@6<žÆ XvÑ5›k§ íÝŽRï<Ü:„‘æËW/Ü)•ÍÛµ÷…Ή1l£,Y°ç‡Ù¶»M;§ióYî6™çx¶c¼µ—é˜Ù¢Á¨é8ñlõÜ,m“£[ìœ/íˆb•828ˆöNçÄ6­žôið³<·†rÐç'%»ú)ß¼=h3¯‘Ù=D‚Åfc¯DÎÙ„X'è……{•«-C¶ÃSümڤŴÜ_âÀ¼­\ž‹¢ñ{qÎÀüinþ‘mì‡3ÅA~ƒTp÷³ºzˆ&°Œ:ì¡Ó‰«7KqAÃÕÛl,çâ™M…Ÿx‘Êbõ6Üá³ÌÀ{!M‡º¶£¤&W å{>ã¶ê‡SÍÕ Á^‡æ7ê6]$…DŒòþdHï›ó áRVHA'6 ÐYë–“=òËVõš“y2vÒÒlG{1^/<4"òu òÎýfüT.é˜ñø©+¾)%ì:mЙÏA)`êªA½äŒ—ÚYFí^^±00ÕxêVš¿éSXzýýï’¡öÿ5Ê;nú4Mˆ®æJ¹Ñ©R2s~Æ«?Áº)¸¼! gg áÎ)þ Üe¶ÖI·¤6¹ €Çq¬—€$ô,õÚp¤Ï6<ϱ9wé»k+ã ̈§EzñFɆ~5ÎÕ4L,êÒœ!uJîföÍy¢mΡ-qȹU6gf±Ä6JÙéH?<%z¿Ñ7žDÑ *÷ 0Úr€¹¹i°qý²—M× ‹2(-é^"vA\’bõP»@ÂË95ùi¢¾fí?¹ä¾I™ǹ¤¹tm%<ŽBn³2"À'˜ã‰üà’§HVöé¸ÜR»b.zAaßIçÄ$‚q¢ˆn¹+ÆÁü¡9‘‰Ìãl$LÒÇM\ß)…3I’ûžšÞ¹—TV§Ȫ/N-‹{^þ”ü‰R‚ùZKͯëPBd¡™än4C².]N|íð¢UËwå]}:8ÊMÈà´ÇàKt)Hh;lí@³ˆ&oœ‚RfMèf‡¶UÜÜOö›‹Kˆòü›ðjÔá\Nr ^Ø}2˜C*¯Œ¾hç"ò'|vô ´jóV)æç0E•K:œ9ÚxªL‹ýŒÙÕ"nòM9‚k)ñÑ©IýÉùA–ÙR8õ<&ßA¡æAËyúñ»lüžŠ(À1ÔÞ‹É_GÕµÌpIiœh†NË@_*"~ã*øåM÷Nx §ïOê"2°èÆz‡jl÷½ø|/±ûƒÕ_„\Åð‹PƒÏE-¹ÿe^·2ÙËÓÝOåá§¾ëâÏM±(Ä9j[^óÄû\%Qè6Ó9þp†ŒÅ_ì¤Tâ'Ñ4aj+¯žªâóƤG™yÖè­ÎÎò3ãF‰6¯éŽ€§ c1rËé):$›6˜ÖâDt‰HKr½¢ ®*×™)z\Šõ„ÁêÏõÜt¤@ü‰õð%ÚkÂÉ`¾O—Y xLQlŒ§ -×x€†ÍꆕÐ8¹¦œ$hè­yã‘Ì?; w@*ÛCÅ24=#Žê¥)OÖ…ÿxH dýÈØ2×Ü|Ãaôò¤šxmÆÒ ÁÈÁt†˜ã#iž˜8ñt§Ë·sî €vÔ‚ü ù“°â êß„PÜïùSŽñ´%ÊGO^=8# bæ8V¢ßeãÜs:Ð(ÛT^ÿyDÔ`—øD©ÆÆwÚ%„""lúZ?T‡›ÙÄ£(¢=õ)Nm³Ý%Ò*ÜF%_†|T:Aï4Ï“—.Šäz»Ÿ;A…õkŽÞÃê„@H·¥’Õ—LöËé¬þшœELÙTŸwÃ2½øš*ãH·ß@©*¿HS{ÞF?$Ñ,°>9Ü]gŒ>aÛûñ¬õâN¯`4ª{ ‰…?ÂUÀ˜ã #Ì¡Ov?‘]Rõ4V¥ [5›æ ˜ÈSÃ^ìP`jäeg«¬3a¿âo©ÕçÝÙÊo˜€ô®<ÝX)¢‹¾-!]úSnOþª™ƒì>åeUµñáö¬ì»äC‹.íŒv93cö‰þýž5™£Ý98{ÏÏ7¢~Ù—°‘óÈ)7b̓ä:ÊÀõÊ·âôNEÊÿ4»êõtÁü/Òœ1ð³=oÔ,yè!n_²žƒŠü~,Bm¬ä$±®YaQŽî#­ø|ˆ<¶—ëÏøÆ…Æ8Þ&ÐX1k4(ì–„\Ûöµôl6Œ¹vŠ•q’ÄõÖÞ>£Dïy¶¾Î½Uùü+•’/õ¥Ä#oÝR2N2U4©ÙÊ ËUÁ!øá[ìêÕ¼ûAj+L{ÄaÐ6€aîcµß‡o×ÒFç<½Ž2Ò¬ùHÒedkâÉ|WñL¹,ôð‡òÙ– úΡ?!ßmâ„ç¨ëÙ=—ÛóqË 6‘¡^—0^ïÂ)½Ò+ž²óPUëë´Z¹A·C¥Ç0¸–C§K`oa„F<ã“k½# ÚYÆ*1O1П–WÖ‰ÓNÿ4³%i¡µßÄö”°1;Ly:uº±‡ú\»)Éõ€5£Üëÿ[Ž”ý £ÍpOŽ"ÔÒÞô/A ” ¦R ­óì#Ýò(Åóöf$…º³T¡  Q‚¹7l”°S+e‰•Á:ÂÌ _ôÛ˜¶•X«Æí×GØ .·ä¶†× B¸Ûä û9l7A±g·kZœöfèZi RäügÚðÅl|íÑFƒ Éè }V^å³pŠk0ä{d^ì>³Õ±~ö@¢œk2ÈQÿ=ÖzӧǺ¼ŽI­ŸïÄ<¥wOî>¢ÑïGùaƒuÈ=`Ü0žÃ9OÏ·‹¶6ù±Úêð#ŒÕ*‡¯kT×Q?×MÅÔUw‚pùS‰AuQÒ h-§9‡ßT ›‹æß²x˜%hÓ›×Dð4æß–ðl§.à »úš¿«|tÀ)Éúj¯ ¥£Ã· ô—Æ”‘¿YÈ$cØÍK±Ò7bä6Hí¤Ð¢BPrÓ_zø¡ s8ë(Ýœ¢9 ¸üŽçO¶‹^ò‰?±ë© DB*jŒœO^­KyÁ/b®©QûÁ¡À¹:iCýbÙ›/²Tðï«Úµ*»l¿™w3Dý¡áMºQñü­kË)ÔäÞš&¬2$JÍÒŠÑú7|¦k!ÒÆå”+Y¿›Ç“ÔÊMººhÈÅ(¶ðîxÒÉ,Œ_먓Mè´ª É„‰rw|™Kçb¯L«?È‹6NÑ Â¶§r;Ì:Í[ý;ö–s¬OÇ CL½?€»Ç:~‘J^ÂÏMNí,8—î ùˆx¿÷CUl?ÿtEò\K<’áä”ç…¥–x*ü¼ ¼t§°š ‚ƒˆÀÇ×I7@wÙ úú²sìa•xœùÅ!¾ûí•“~ù£¬'!+úô¥ylG”YN-à $:ðƒ xaTk8•ÇÔús&Y‰É’„¶¦“x-›éÕk!bâ  G –:>hÃsߦöõÖùGý"ÿˆ9J¦žohžˆgg/ ±$²r•8¶eŽ –ùwïä9ýÓ;àû'œ&ö*GX Ï!TÚ:^Q–£ã)Á™ïF×4d\›}Ë«XÝË!¹.Ppü(ƒÓöž[dqĸE£ Šœuß¶SšG¨;¯:‚–=w½}ˆÔGIQtËzäxTݲó $!Åÿ8¾ÑZ™ÐJûø¹Í-­s…Yx.tP»üx$õcÃsÿyžcyßÑ"Þq/Ñ>ðcñÚÕxãÕÛd¡ó•¹÷åºñ+Þ”¬Èn JV5¼'ô·¶* QWÙŠ!,Ú+\Ðá™B‰‘DÊËù»[„xôÛèúà „ö!*E,¹p£V“ÒnˆYà› {šœM„›',¨'ÿveɬt¡º Xß×uu§ºèå>±„η_K¶In=4£­ÉHA=¸Ôn¾~'Îϱ¢x&zCq)unõ4ÅóÞ/ÏñÓæG’[Yú6O*µ$@„cŠÏŒ«ò;OžçèwÈæÂ¼dŠ–‘â8/ÿ`âä`@~ʽ¼§;%iŽ´_óMj am”®“K–8vUÏ CKMí4{Õ¤XÍEÇ "1î’uõÅot¢+œ¬¡™¹’çŠy{´kˆld÷Ûm[éëæ"›5È]U‰½D4Íó•vPxöô)ÅEwáHSY~ëLýâBn….ðX«[¹ÇÙl¸˜ïªËÒÒÒÒªº$5gŸZÃ!ÖËQTh,æÂ3[„}Øåjn÷úø$ ½K[ëâ2Ѭ¿oåÅ‹‡îŽÿa¾‡bíêkjU™õ®”)Fö hOꀢk³‚AÞN€ƒäˆ2¶Ï@ °-Ü0¥/ÑDz<¹ E_I‹îMú¼Í(ó÷ï9(ZJÛª€’Äá0J:Pw'€„àêÌvaÇà‹JÑi`ŒÁaG93I`âñλaI¯~>Ï œ“oéÚj¤nfŽ\Â3áò~h¿ÿF¹ìa×)],ºð ;H:š~Ë e6Ùòü•ÁSÄŠ êu£²à8t‡+Ï'áô[äXKW•Žœ›#¿žã 4Õl{ ë¹Á"ýïUª“‘í®!¶n#Þ®ÃFäG4.([IRÍ{® ä—¬îãšø„‚ºƒ Y[!p¤£#.@Ü4=qpANÝKŸ,Óa&a4íU„]–-<×ÛU¢ˆfÊ…Bd'W:µmÑvõöÓ‚IS;€—$ŠN‹áGö©0ï·Öògouöâ#‘ù)§½?J°d8¥ˆ <¬þ¬ëÕë?” Ux˜ˆóVªdú—w‚$%t`YÅñ‰—Â…E[͈{*Tüõ±$®G¨Àë¶iQ5*õ¼»-ܯxNvÄ“]²ù¥wü€¿fNO› N¯i‹ùšêí *!çÅf0ÎîÝ«ÿ[×£Ô…ÒïÄë꥘}IÁ?öû†¡jß§»¼ò¾ƒ‘Þ,ÍïU¯}›»²;~~ƒ$U?q`P $^· r!2m¢5Ý›,Ôµ¶»ún©M7…%æ ¤M‰¬ œÏ™µäÉQñŽmÇ÷FW%ÛÖ+ [,ÕŠU]P×Ì¿5˜5\fÛ>¶>WÖ f¥s–åúmÐ;püvá2†îŸÊ6Nw°öæ£ÄêCÈ'ª(4»½ë“sôGg9P®Þ¶=j`(‡§³T¡¨¦‘¤×5Òv˜a€õõú­B¤ß#^öÖ`Oú¹ò‚vÔ V–OQȶ¸ìkþ&|1¶GbW¸%6þ¬ðRuæÀÅ2üQÏúÚqýgdï,˜}![n =˜|_6à šeqú„ºÙϼW.Ÿyƒ²¬NÞ[l¿„4Õç×ê¼b•ˆy:‹1J Ó#èW dÆòuaàûÏÃ.«©úÁáQ2V¤þ„° òü«´ùíxáL«1ðÕý —°ŠÙ—M²p¾6þºMØdßk‹Ô4Xq³šKGwG̾Æ¢‚榙[OW{ëü9zDÛ{LäEAE¯ rïÌ ßþT¼CÈ-¸J×4™Ò³>VGeŠE-‹xFÇáEãÅó¿!¥*§ü+ŸàÝÌcNœlÏýÌ0ßë–3œõ³iª\ÌroI~èÿ7¼ž‚Óªìð .‚á8zË/t‘¾¿ìuÔ¼îUåÕn¹Ì³ÁƒþðAAGf LqÇ[þ%_T2dͲ@Yq6œópÁ4w˜J†€½=¿ïÒô–‹Œ™¦cT{¨JËq0Bö„¿YJrå«„>bc²Û…Ç]®-ê&º¼$ÇÔéÌsq tM[ˆ±ÿ¿5¿p„1–(1&ã'FEŠ€)¦Lߪ_uG9(«>}AaXrúâ!rLê§•÷»§­ªŸ| (º–+e½YÂj÷jH#ŸÓHN«ËsBÞùª²Ü&¨¸¥Í­ZfîÔï8xš¡µc¢+nŸøVkˆJúCujfy<ã+LAë{ IµøÚ.¶}“T²?`ê¾s ®©gâ=KŽo2X‰ ‰3¶Ö²¦Z1RÞ™†šÎjoyo§ŠÐ;#Aj8aØH«c!¶6eãTŽÕd‚™’ù2UÚÔ¿W©¦cDžœ‡r-Ù?ѽBP¨xðJKµIoüv3vmˆW¿à¯­ŸÇ®ž_Eé &¿ü#yY"Ù'g¦°Ö¼_pø×"“\‹þ×´•`Wæ{– ­¨A.û¹€aÊÐî%¦IáDÑDQl/40Oer !ˆËæ>>FM[—æÆn/¸ÔHe¦š¯ÑnqúY¨ŠÃÊù`:|øÖèÄZÜ5‘óŽÏm•=@39HZ’JŠBÇ7ËnvØ£w­ú¯F&ݨÁÆ»Â[ÛÒÆ<±ykªöv³¾C͕đÅ>ÚÚ›“¥2€¬üf~ùpPŽËm #ý&_¶;~ ¿¿ rÕB½ªÝç5ÍÜšbû·Æâ6Ãß<ï ­5ÞºÖ ²vk¿(ÂT§íJK$j0ˆ–=;º‘ºA¨CõDNb ÷Kw…>þþ^ûoBîHÌаèàœ-àуÁŽyÒwº9ô»¸^æsBá0½òK{;Täè=©ì ðè8¦ÓiS1ÝV•Ô5¯x.ž¿)Õæ´ã XiSÿMTÂì6éF@$€J,ÚÐ¥›à¼‰Ôö4xU.£­kº cçP·Õ˜"<ý‹VÔ”C˜2…ÌûžB2Á¿_°¬G—Suø¸êÏ£W—ÎÿgÝT,ñØ–%0É©;ÛªÑ «µm#s¹Ì#ObÚCcB¢ÚÀ‘)Ó- Þ¨[Cz5erpŸƒœCåì7FÇ}\ÀàÍÞÑk¡io%i¨Ž:cÚZ° …Íþ€Ïvº ß×̹ü€™jùØúüT¢ºpn§‡T{ò§u׿Q´1U9jЂãeQê©)‹G¬D<~ µA·È »EôUéM¢š{Åo÷3æG;¬ÿÆó«5Žñä ­- ap©Û<Ú÷D$@ëM yàéÍ+«Œî€õm=´Çh@·o'nŠ<ô||_¼‚Û¯Ø[áúIZ^÷ªù”_ñ ÎÝ/PªÌÃ`’W³ä–X´‹…·Â³låÆIõ?Êb¡F¾Àú´g»nóÐn.ÝñÕJ'rÛú™Í€ÛÞ®«–ZA´Ñ™&ž \|4ÿn±Ãÿ|3bbB'ØB×3ÄíWu˜\¶)ìtÓ©»†€xìË—g÷Åà¶eÞñF'8ò ŠTÁ[ç?D¿™-‚=Äž}·&ÈÐXr&qëüéêÂxÅ»bX#R‘à>Ï_~²mŸôÕMƒèó·Š¡ëAŠŒÏ/€'´ã½(;‚ê¾ ÷öTØHÍ™¼Áн•oœ €-î_«R¥j{rü’‚̳1p’Ûþu¬ èÙ¸Ã-º§Y™éú!¢iÜ+ O+T-kÚ2¬e›åï7›Ï’1NÇá!VG(;/¦màÈ"SgW•ïi¸Bèì—VâÁ z/­Ç…Š˜¼4qcC…îµ:Èï­5í±U›áÕˆƒ°¯sl—øFù2‹È!:@·I]OžáøŠ­úu×cYj¡sªÚŠƒÑS'âº>ocþKYç> !hÓ ¾pÁL•ÐwH¥äDÕÿ8'¸`Åšt"»Oâd³œ+ÛçsÑ¡Ës´íjâ¿Ä‹fHùCÕ²uEìžãëІt~]ž°ØB–íÀ¥ŽQ;zgQдŸŽ4À-lj8:ÊF)§²ÊçåE™Ñó ´iãïSâñƒÉm7òæ ××)ÓqZ†/¼ ÂÊyGLäÛ0ÇhºP\5Sm} v,¡CP=,ÖÎ܃o˜ïIÊ9Æ´ã´r|Š«è*ŒüQa ‚ŒJhy| Íõ©ë£ªl9–<»Չ ª;? ÿB‡?Ið×…ô~Éž"?–Wq•aÏw0ЬÓ©”x°V}ã„ÁõÆø”7¿åà9’SªjÖtí›ËœNVîøêô‰k¾!ù"Ó× rDSc–vðåû¦BÎC†ˆáì>ÏèO Ã+æ]Z‚í«jrS“sµy§Ž¤¨æÌ$ÿe¥?¸†\Bó.©ß¼œo6Ûå;AFZyøkl¼QeïÈ äH«:·A18Ó )!õUäV¾µ›îPikQÞL_mİÕÈÂ^IÙ’OdÀ~ž a°ä Ò…V ÉŸÈüç[RC͹Nù\º«0o½ô×r¸ÀW›0B-ÙÄ£=©D(ÍŠ9‡“Ó5nwР>|—:z¬ïŽ1¶›ÁÒÛG<3^¦¢k‹Fv?2Es‘KÄ,¿axÉB)Û"—âp™\‚à{w:WZpWAÆ"1Àå‰qN÷Gïìt¨1+”¡y LS# èöE»ÿÍ€5Bk¸{Èñ‹žß€Wÿ*øg§ýHΫ’bD$\ãÙ-¶½\иQukjÕ6zA×ÛùTΆ¾“Q„ÕtP@<{~ºÓ§>+XesæEgÌc“MI“Ï'úÆa¤j€Ñêéñc½< wCî]ÕŒEÿX¬KßÒëGtÄÓÕkY3†2óíK½-4Ú&;á䔆NÊ©3}A4nϪ}Û;Ð98õYºÂ÷ Õ»¨§¤>«‡c(¡SŠ#}¡é¹ y¬á1ãßj—íC&E,‰h†½¹Ýf—öIeoçâ­ƒïð9/ü³óê•?ĺ·áF`“Ï·HzSLnQ“ãñüCŒ¥RÕH~/¯°|˜¨¿Ç,±¾¬ ì1í¦¦òÑ¿þ‰_*HSÚhá\³åtqµ›·ñÇðáAè$€-dWÿ!óÚÇ ³/§%‹Ÿ† ePÕ½Öe«‹¥€Ùf†!‹Ã1Ãh|F¢ZaåþAtpòoØ£ æÖ‘|í]¿ˆ^Û ùsBÚ§n%åb_âZ + K¶6ö(@Oí¤_: rÎÑ1Ùíúùñ¯ÅGzÿré´‹õn"t=B„OüdÖ"µabå”å¬Jƒ”ë@Æ©|zšmÄIf˜Cš¨©ö)²îÿÊL¯txа²Ðö Ø¥ ã ¯/4ãèK¥;ÏÌÊçùÒo‘l-é3“U,û˜7ÜûÃâU"ÒöxapïòŠu? ~¼¸íô¦,éO7 >,»]ßFâØöh ûЮŒsiK½üÓé_^ƒÕ“-ú²ºE3Ý—:Œbú^…Ò§8nê óÆîÿ3á!. u€30_· Q¿ÃgYו{Ȩû1Â幆b¹P%ÕŒNhçŸåXn†E(öÌŽŠ?”¶\‘ª¹RUæŒÈÕÎÆ55ü›ŠøoÙ„Nê¾9{î—’vx„ì|³ûlh`éi…‹gg(0y™*$à6ç×FÙ…ˆ0[ ]0b•ò­…Ò-¹N›Nƒè(£7 «LÒT@mNµ½Ù@ÓlÀù”MT3-ß „?e(T4¸Þä(:tî?ÞFÈõ¯'r‹W«^`&Ý/{×l¯Ùy«Kï ~ÞÂ\ÂÈ‚œëá¡B‰²C]Í Ò'êãÁØõ {êbƒÜy`ê÷/Á«MDk²Yºp…Ί½=‘ðûŠc2åL1W ÝK—øÚ¢¯t¶bguÙ²G~À7SòRÑP—¥âòwÓ…;&[j]O*V|Lî\’Ï¥ÙüÎ5,À–vN¸Ч&Ö}—¥þ ÆB7#Äl‰#åv KZ5Ÿ%±?:»C'ÕÁÙ¥¶Þž…/‹¤ÙãݘZc°(¨MÝ:Z)†ò˜¸è˯’ÍÅZ¡A °.ÅUçWjÛ]Ñû9€?­]³ø6'ƒ¼¬ Õ…Óƒ´‘ËV!«Y¹ª8m ÿ_Ç͸ ’PÖs+ÖßÖ"Ìx+/ K_ôßnŽ-›ÿ[%š¬oF<ÜSòú`vâ½—á¦<›,@ˆ8ሠØT†I>cÎ[pp[ˆtùŒrn‘õKvYon}}*··¡gÛ†ó†«ßs" ÷mu—<¾­Q>Ô¦Ûeë ÏÑ¡V(™>`§²ð¶úÛ Òß‚5¨ë5Ï„ã³CUqÌB%ÑVš„ð…rÞÝyØxÚœ—ÐLå??ÞÓœŸÚgšOÏáÇëÅ#ç©kÔ)¶ D<óWd4Ãø›cŸo…­ÃT„‡ g·`ćûØÝýr¶w45 –±Ô?½¢æÓºÏHÓQ‘ËÊ"Q(&oI”OØ×–û¢ý°3;6rkݽl ¥”=#ÏÌgJrï§ç®Àù¦ï™©  ÈH­k8 o6õèTâYQ­¼—^Ã$ýÒ€Úˆ¹ æà|è;i] ÂèVìùÒ«Ìúÿym3wÐiº*E;ùKF« «LÁËŸÌž´ï¹v¦³Ö0 üη¿—E}Ê$|’  Ìf*Îîç6Bx‘ýñvõµ°ÐPÔ þrªG-“‹ ã63ß·ªé68ZöL¶–,+½S×,=À¤»°$FK¶BUD¡H\:*–&Ðj´Ù5T‹§Xì^É:ø€M+ËOðKµ ]òÙÿ&¿9)ºVâîɇˆ…+ïBÂD2úÚÅ‘ùkODæ2ºS”¶©:…–¦›Q´“Q`Öè\ž—µM­O‡úl&ªd{†±ˆ]Ö‹Ž,Ø•­XkËöôÇÓò6|æÕ€–A§ü ·5ùa°¹--UˆŒ×&ã8´&ƒäcÂñÖn±‰eÉXàTP䇒®Mýª³ÎÁ)’̼@®J™’½¾"áÕ=r'n#.Xün¶_'r%>2–b•Sb",ez¡ù%zîÝe¸è„A€}J… ÆöØÙK4ä…0CšÁ4?ªpÙŠŒMlx÷óz!ø¤X¬lµ¥é˜épÛM1ðôeÃî Ô~ íPƒ´æMÝO€ðË@§ð¡ÄàEÐ×Ò iÑöø2ø7ìùvFάxW*&¢"å°š«}ßñGä/Ck”^€Áò‹¦Õ|ÔgÖ$ÈëZµ@¸v†:"§vä cXêí ÂÿXt¬ÉïNñÀÚ—‰ÌXÂ^­ÕYër;`m+7t[K™‚JƒË›/"MÐ.ü÷CUl?ÿy9Ή|¹mìO@ $9àÁŒƒ*u„ƒf€­@ê=Ö‚±²Û¡'ÿyÌÇAÞ,F •¹qbăt%¶^¬Š¼lz÷°ÔwHŽB£å;À ‚£° Z" •bHOYˆ2é›´Å P]Ó;*¸Nß®Š6¦VÏõûHÖ9JRæÎöRõî””dÉÿy­hÚ¦š¯rW‘üé燑U^ÆŒPËK"É´9*Z²»Á–|Z¢›¯WvGügvŠ#PŒbwݲï)l•O\Ga?ü–£}sî"³c[­ù2-yU5˜dU•x“M|LÖk½&¼œïRŒ´©¦ φ)Mýµ˜•ð¼]kw(UÈø%æMÖPÌXcÞ‡ˆ‡u8¢V‘ù´~ø tï§Lý>uÄ3[úI÷¡zÑæèJÅÊÔͯI“ynm›¡lõåP4±×÷>Æ'<ÌéÖÚèšÏ3%S»:¨½ßñ6rž7ªY÷°› »ç½¸yïà9ÌD0£çíê,ûöqÿÙit32NBý ¬ Æoã¢Ø€×ØØ××€ÖÕÕÔÏËÆ®u/Ãwù©é èççææåâáààáÏŒÁvö©æääããâàÞÝÚØÕÑÙ¶'Àuö©æåäããâàÞÛÚ×ÓÏÈÏÂ+¿vö¨æååäããáàÜÚÙÖÒÎÉ¿ÎÁ'¾vö¨æååäããàßÜÛÙÕÑÍÇÀ¶Õ¿#½x÷¨çææääãáàÞÛÚÖÒÍÇÁ¸µá²'¼x÷©çæåääãáßÜÚØÓÏʹ¬ÈÞ±#»x÷„ç9×ÁÀ¾çÍ×ç纳߱ÝÜËçׯßçäÍçç帰ØçÇ©æÇ¾àÈæÛÆÓâ´¬ÐÚØÔ»ÆÃµ¯´ÛÖ±%ºx÷ƒç6ΚÏݹ施çç̹̆编ç«É°çÄ•ççÚ©ÃÞçׂàºÌËæªÎ«Ð§¿×ÜÙÑƒÃÆ½wª€Õ®!¹x÷ƒçŸ‘çææçµ¼€ç1©‘çç٣Уç˜Þ¯žççÕ´¾Þçç²—Âçâœå”ä ·µºØÝÛ¹ŠÅÉÀ}¦ÉáÒÔ¨¸x÷ƒçš•çÐæ·¼€ç2ÇÚç٥ͥ眸¹›äçäã¾¥ççåÒçâœçÀ¹”É㺢ßȯ”½ÌÄ~©»çÚÑÓ¦·x÷ƒç¾ŒØÙ’篶ççÔ¼½’çÕ—à¦Ö¨Ò¶‡ÙÒʺƩ€çÔçÞ”æÊӪŸçÒÊ»‚³ÎÇ|¤°ëäÚÐÓ£¶xø„è>Ô½ÇÄç´·æè¼ÆÞ£ÕÍ©ÝÓÁÜèÖ³á»ÞÁÃàèèà¨ÎèѨØÇ¼Ùà¿Áß¹ÔÛ©ÇГ«éíãÙÐÒ£µxø­èçæååãâÞÜ×ÒÌÁµ©âõëãÚÐÒ¡´xø®èçæåäâàÝÙÔÎ÷¨ÛüòêãÙÐÓ¡³yù„éAßÈÅÈéÙÞééÿâ»ßãÖéÞÎæà¼ÃçéèÒÔééŽéÈËæÕéàÎáãÀÀÒåÙ·½ÚÖ·£¨©Öÿ÷òêâÙÏÓ²yùƒéCЛÑ߻藾éé·κ龗é­Ë·Ë²Ëçé¿À»Ëé͆é´ÖÆ‘é¨Ô°É·²Àæ½°ÄÛ×±‡º“Ñÿû÷òêâÙÐÓ±yùƒé ‘éèèé¶¾€é9ª‘ééڤҤ齼Ãéé¦ÉÁªé馠Èéß à•é–Öé¼ä潸¿Üظ‰ Îÿýû÷òêâÙÐÓ °yùƒé›•éҞ踾€é:ÈÜéۦΦéšÚè¡ÆéÖ³§±ééÝ‚Þéß é¼¼“áË»èçÝâ™Âظ‹¥ŸÌÿþýû÷òêâÙÐÔ ¯yùƒéFÀÚÚ“é°·ééÖ½¾“éטâ§×­¸Õ©ÅÕ×Ó²Ïééä‹ßéÛ•éÉÔªé¢ÎÞ×±Ô ÅÙ´Š½šÌÿÿþýû÷òêâÚÐÔ ®yú„êÖ¿ÈÆé¶¹èê¾Çà¤×ΪßÔÃà×ÂÊã½Ø·Ñ€êÛ§ØêÏ©ÜÂÀÝêÀãÒÇÔ¿ÅÞÚ·ž¬Ì€ÿ þýû÷òêãÙÑÕ ­yú°ê éèçåãßÚÔÍÁ°Íÿ þýû÷ñêãÚÑÕ ¬yú°ê ééçåãàÛÔÍòЂÿ þýû÷ñëãÚÒÖ «yû„ëáÉÆÉëÛàëëÄÁä¼áåØëàÐæëÜÉä€ëØêëǾëÊÌè×ëáÐåëÖÖêééÒÐàÛÇ¥²™Ô†ÿüõìãÚÒ×¢ªyûƒëKÑœÒá¼ê˜¿ëëЇл뿘ë®Ì¶×½ÃÓëëÔŽëëÏ‡ëµØÈ’ë®ÍµÑ»»Íé̸¶ÆÛËÃ¥©ÑÉþ¿ÂÆÍÕàìññîâÕ×¢©yûƒë¡’ëêêë·¿€ë«’ëëܥԥ롦µÃæë꺘€ë,§¡Éëá¢ØŸë¢ ÍÌ©é©ÈƤÜÑ…©¢¯˜Žuqpoprtw…˜¯ÅÚÝࢨyûƒë›–ëԟ꺿€ëBÊ‚ÞëݧЧ롗ɷ±ëÉ»šâëëß‚àëá¤Õ¢ë¡›ÐΧê¦ËÉ¢ÝÒ†®¦´Œs~zgxkjkdjkamz—¹Ý¨§yüƒìNÂŽÜݔ첹ììØ¿À”ìÚšå©Ú¯ºÍÁ¸ÚÔÀ‡ØììçŒâìÞ—æ§Ü­ÅÁÀÂÚ¿¿¼½ÞςɳŸ|p€{pyousdqriwupn‚¹›¦yü„ìNØÀÊÇë·ºêì¿Éâ¥ØÐ«àÖÄàèÉÉæ¼êâ²åììÝ©ÚìѪÞÙÄÞìÈËè»äÆÆâßÉž·Ÿ®±’…‡|‡|€†ƒt~|x|tm• ¥yü°ìëëêéæåàÜÖÐÉÁ¸­£š—••”’€ ŽŽ‹‰‡€sŠ[¥yý±íìëêèæãÞÚÔÍÆ¿·¯©¥£¢¡ € œ››š™—”‰†1¤yý„íPãËÈËíÝáííÆÂæ½ãçÙíáÑêä¿ÆëíìÖØííÈÀíËÎêÙíãÑçëÖÖíìëëÖæäÑ®À®Âʝµ±®¡ž«¤š¥¨œ§¦¤¡žš•“w£yýƒíQÓÔã½ì™ÁííшѽíÀ™í¯Î¹Î´ÎëíÁýÎíчí¶ÚÉ“í¯Ï¹·É¥ÌììÔŽçæ×„Õ»¶Ê––¾º—Ž–Œ¤‡‘¢…¢²°®«¨¥ ¡5£yýƒí¢“íììí¹À€íF­“ííÞ¦Õ¦íŸÀ¿Æíí¨ÌĬíí©¢Ëíã£Ú íÎä›Ñì뺘çæÞŒº¶ÕÇ‘ ÆÃ´ºŠ¤³§Š´¸ƒ¯½»¹·µ²¯µ^£{þƒî˜îÖ¡í¼Á€îFÌ‚áîߨӨîœÞí¤ÊîÚ¶ª´îîâƒãî䦨£î›äÆÉîîʼšáèß¾ڬ¤œÎÌË­«ÊÁŸÅʧ°ÉÈÅÅÂÀ¾»Äh£{þƒîQÃÞߕîîÚÀ•îÛšæªÜ¯»Ù¬ÉÚÛ×µÓîîéãîà˜è¨Þ­Ê¼ÊØØÖÀ‡×é݉âμĜÌŦ¶¼¢¹µ±¬³ÅÑÐÎÌÊÈÇÔi£{ÿ„ïÚÂÌÉî¹¼íïÁËä§ÛÒ­ãÙÆåÛÆÎèÁܻՀï1àªÜïÓ¬àܯ䯫­ã¿îã³åëת̳ÏῷϹ¼Ÿ Æ£¹µŸ¢ÕÙØÖÕÔÓÒßl£{ÿ³ïîîííìêéèçæäâáàà‚ß„ÞÝÜÛÙÙçp£{ÿ´ï îîííìêêéèèæåå‚ä‚ã€âááàÞÞís£{ÿ„ïPäÌÉÌïßãïïÇÃè¿äéÛïãÓêïíÜïïîÉÀãïÒ»îÓÉëÚïçÒçïïÜíïïϾÚîè½ËÇÑêèÕèèçÑÌåáÌÛãÀÀÑææååääãôv£|ÿƒðHÕž×å¿ïšÃððÔ‰Ô¿ðšð±Ð¶ðË™ððâ®Êçðß…èÀÔÒ‘ð²Ò²ðßíðì±Æßïî•Êã¿íÏ’ëëϱ¶´³Ò±È¶¶¼€éè÷x£|ÿƒð¤”ðïïð»Â€ð=®”ððá¨Ø§ðæµ¢ððݺÄçðð¸›Éðë¢ážðžáŘìðè¸ÄÞð𞻽íì·îîìà²Í›ë¢ÌíÁå€ìëëêêúy£|ÿƒñž™ñÙ¢ð¾Ã€ñ<΃ãñâªÕªñ¡¾ÀŸîñíìŪññïƒÛñì¤ßŸñ¤ÀÜâñïéØœññŸ¿ÄïȾéïïçÁÂÌ¿˜Ú×»îííîíý{£|ÿƒñÅáâ–ñµ½ññÝÃÄ–ñÞœé«ß®Ú½ŠâÛÒÁί€ñ*Üñç™ëªá¬ÛȈ×Ûܵޡññ™ÎîÅÕ¿‡ßÛÎÂÓ£ØÜ¬ð¬Êððïðïÿ{£|ÿ„ñHÜÄÎËðº½ïñÃÍæ¨ÝÔ®åÚÈäñÞ¹êÁæÈÊéññè­ÖñÙ¬ßàÇàñé¶éÃäËÈáñí´ÈÇÇñâ·êÁáÄÊçÎÂàñÈâññƒðÿ|£|ÿÑñðñÿ|£|ÿÓñÿ|£|ÿ„òçÏÌÏòáæòòÉÆëÁçìÞòæÕîðÙÜ€ò,ñÞòòÉÆòÌÕëßòäÖðèÃÉðòñÚÜòòá½ÖÅåòêâòòêÄÉèÉÈÛñÜð…òÿ|£|ÿƒóGØ ÙèÁò›ÅóóÖŠÖÁóÄ›ó²Ò¾·Ò¤×óóÔ•óóÏŽó·ã¿¡ó³ÑÁÔ¸ÒñóÆÇÁÓóå‹îÒÑó¯´óóÒ´ÕÔ»¼ÅÝð…óÿ|£|ÿƒó¥•óòòó½Ä€ó°•óóã©Ú©óŸ×éšÜóñº €ó'¦¨Òó߬ծó¡ÈÃËóó«Ñȯóë’ËÊ󿣻óóÏÀÉïòÅìó¡í…óÿ|£|ÿƒóŸšóÚ£ò¿Ä€ó<Єåóä«×«óžíÅÑóóËÀŸìóóà„íó߮үóèò¦ÎóÞº¬·óë’ÏÏó¾·¯óóìñ¬Ëݾóò¡î…óÿ|£|ÿƒóGÇ‘ãã—ó¶¾óóÞÄÅ—óàë¬à±ÌÂÌÞÛÛÁˆãóóéîóÚ¡é¯ÞµÀݯËßáÛ¸×óçŽñÝËØªèáÁصѲÌóï™é…óÿ|£|ÿ„óFÞÅÏÌò»¾ñóÄÎè©ÞÕ¯çÜÉéÅ®²çÁóä¸îóóà¬ãóϱéÚÊëÞÉÒéÄá½Øóó߯ռÝóÏÈãÉãÈÏóÉãóÞ®Ú…óÿ|£~ÿÓôÿ~£~ÿÓôÿ~£~ÿ„õêÑÎÑõäéõõËÈîÃêïàõéØðõÝà€õÝàõõËÈõÎØðàõéØïõäÐî€õáôõã¿ÙÇèõíåõõÚÈÎñìæõèÐé…õÿ~£~ÿƒõGÙ¡ÛêÃôœÇõõØ‹ØÂõÆœõ´Ô¾ÕƾÛõОÛõÐŽõ¸åÈœõ´Ô½àÄÊÛõõÜ’õõçŒðÔÓõ°µõõ¹Ì¬ò«¿ë¾ÐÒ…õÿ~£ÿƒö§—öõõö¿Ç€ö<²—ööæ«Ýªö¥¥Þ͵ö«Ý͵öö§©Õöæ«Ýªö¦¬¼ËðöõÁööî“ÍÌö襽öõõßÕê¢ÊŰÌì…öÿ~£ÿƒö ›öÝ¥õÁÇ€ö0Ò…èöç­Ù­ö¦ âϳö¨àϳööã…ðöç­Ù­ö¦›Ò¾¸öÑŸíöî“ÒÑöÀ¹°€öµè·½³ÁÍ«…öÿ~£ÿƒöGÉ’åæ˜ö¸ÀööáÆÇ˜öâžî®ãµÈÎÂÏäÄÎÂÑööìðöâžî®ãµÁÕȾâÜÇŠàöêôßÍÚ¬žëàç öÕ¨©ÊÉÕ³…öÿ£ÿ„öFàÇÒÏõ½ÀôöÆÐëªáذêßÌéôÏÕðÃðÏÔõööâ®æöÕ°êßÌêòÑÑïÂôë¸îöâ±Ø¾ßöÑÊæÊìÊööÎËöÔÏí…öÿ£ÿÓ÷ÿ£ÿÓ÷ÿ£ÿ„øEíÓÐÓøçìøøÎÊñÅíòãøìÚñîÊÌåøèÅÒøõÁÚöÇèêêøâàøâÄ×øøòÛèøøØÅÛÊõøéîøøíÚíøâÝøòâ†øÿ£ÿƒøFÜ¢ÝíÅ÷žÉøøÚŒÚÄøÈžø°àºÓÃ¹ÑøÇ¿Úøø³©ö·ô¦ÄæÀÇ×ÅÄÝøø·Û·ìøÍ›øÉåøšÖøö°á»ÅÇ·ÉÕ—†øÿ£ÿƒø¨—ø÷÷øÀÈ€ø;³—øøèªëžøšèöÇöøÇÆÓøøö–¹ãøÈÈ¿ÏÞ­ÉÉØøøœò«ÐøÖžÌÞøÝšÙøìœøžÔïªÎ󦆸ÿ£ÿƒø¡œøÞ¦÷ÂÈ€ø;Ô…êøè©øÂƘõÐÊøøîõ¡ÞøøÅ—øøÈɼÑâªõñšìøÒÃž×øÖŸÒâñÁ­ÊøøÅÆ™îÕÉøí§†øÿ£ÿƒøGÊ’çè™ø¹ÁøøãÇÉ™øäžøÔÞ´ø¤ãêè¹ê§áøøÒøøÂ½ÙÄÏÆºì£ÞçÜã±ðøÏžøÓÖØ—»çèÖà¶Ü¼Ôßí›÷…øÿ£ÿ„ùãÉÔÑø¿Â÷ùÈÓî¬äÚ³ëËÍîùÉôÛØáÍÙ€ù'Ó¶õøÃ¿õÕÓøØÎááÕÚÆæùùÓ¸Û½ñùÄߨÜÏËðÖ°¯ìÞ±æ…ùÿ£ÿÓùÿ£ÿÓúÿ£ÿ„úïÕÒÕúèíúúÏËòÆïôåúîÜñ÷ÍÊñ€úæ÷úÖÆùÙÕöäúïÜóúùå€úÔÇêúñÃÚÎåðÇÒùúøÞèúêÝöðÈÏ÷„úÿ£ÿƒúHÞ£ßïÆùžÊúúÜŒÜÆúÉžú±âºâ·Ôôúúè’÷úâˆöÃàÓ˜ú·ÙºúÚ˜úúï´ÐíúúååÒоÚùúÊн۶ßÁØ¼Øø„úÿ‚£ÿƒú©˜úùùúÁÉ€ú<´˜úúê«íŸú ÐÄÌõúúÉœöúú¶¤Òúïªå§ú¡íÀ£úúë¾Ëíúú˜ËÇúÌÇÒúú¤ðħ²÷ ÍÇÐ…úÿ‚£ÿƒú¢úà§ùÄÉ€ú=Õ†ëúêªúÄÇšëù¾»úÙÆ êúúô†èúï¬â©ú¥ÃÇ¢óú÷óÔ©úú˜ÏÍúñø¥Úú¢òÃÂÆÅòùªÓ„úÿ‚£ÿƒûÍ“êêšû»ÃûûåÉËšûçŸû×à»ÓÔÈ¿çâϋހû'’éûìô¯é²âÇ‹êãÜÄÝ®ûû’çðнé¯Õê¿Ý»ÝÛÙÃÆã³×„ûÿ‚£ÿ„ûFåËÖÒúÁÄùûÉÔð­åÜ´íÌÏòîÏÓõÆøó¼ðûûî±âûݳëæÏêûë½÷ÈìÑÐðûñµÖÈÙåÏÛíËöÐÞûÅÓ÷åÏÖ…ûÿ‚£ÿÓûÿ‚£‚ÿÓüÿ‚£‚ÿ„üFðÖÓÖüêïüüÑÍôÈðöæüðÝòüäãûüüêÝøüàÂøáÑùåùüçôüìíüüùßàûüðÃÝÏëëÈØüüûæ÷üçßüéÛò…üÿ‚£‚ÿƒüGߤáðÈûŸËüüÝÝÇüËŸü²ä½ÓÊÌÕüݸͳüïŠïÎØè‘öô”âü¦ÂüüÒÆ³ÍüùŽëâ×ÉÃßüüï‘ðÓù¶Ø¤…üÿ‚£‚ÿƒüª™üûûüÂË€ü0µ™üüë¬ï ü¤ªÒÖ®üðëÁ¸üüÈÏüü§ñü²ßüËÂüüú鵿üü–ÍÊüÇÊØ€ü¬éïî²ÇùÈÆ…üÿ‚£‚ÿƒü£üâ¨ûÅË€ü׆íüì«üÅÉâ¿¶¶üüäÂû€ü ‹Ûüü©ñü²ßüËÀüòÂÑüü–ÒÐüò÷Ÿéüü­çüÚÈüøÙ¹…üÿ‚£‚ÿƒýΔìì›ý¼ÄýýçËÌ›ýè ýØâ¹ïâÄ׿ì¹ÜÖ€ý'šÝýüîýªÙýżýåÏØÌ²ýü‘îîѹð§áåý¤æç¼Üѽô™ú„ýÿ‚£‚ÿ„ýFæÌ×ÔüÂÅûýËÖñ®çݵïÍÐôîÂßøÊã´°àýýö¶Ûýê´àö¹ÓüÆÂñËêÍÓóýïµÚÇßáÐáìÏõ·Ûݳ°çÑÒã…ýÿ‚£‚ÿÓýÿ‚£‚ÿÓýÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚Õÿ‚£‚Õÿ‚£‚Õÿ‚£‚ŒÿÞ¨ˆyyƒ–³ôÿÞ¦‡yyƒ—¶÷€ÿë°‰x{’Âøÿߨ‚¬¹Ùûÿߨ‚¬¨ÁŠÿ‚£‚Šÿúœ€Y\^€YÚÿÿú›ZYY\^YY[âÿÿ¾aYY][YYtà€ÿ¿…YxÙ€ÿ¿„Y„Šÿ‚£‚Šÿ=•YY|ÏðóæÈ™âÿÿ•YY}Ñðó寛éÿÁYYrÐôï´^YjçÿÿÀYY¦Ñʺ‡YY`ÙÿÿÀYY¦ÐÊÊÈØŠÿ‚£‚‰ÿÌYYzö…ÿÌYY|÷„ÿïiYeæÿ ½YYÿÿÀYYÌÿ ¥YY€ÿÿÀYYÌÿ‚£‚‰ÿ’YYʆÿ’YYÌ…ÿ½YY¥‚ÿ ýxY_èÿÀYYÊÿ ÷pYZàÿÀYYËÿ‚£‚ˆÿûrYdð…ÿûsYeñ…ÿ—YYуÿ YYÉÿÀYYÊ‚ÿ YYÄÿÀYY½óëëñ‹ÿ‚£‚ˆÿóeYsû…ÿóeYtü…ÿ…Y[âƒÿ´YY·ÿÀYYÊ‚ÿ´YYµÿÀƒY„‹ÿ‚£‚ˆÿóeYsûÿÛ±µó÷eYrû…ÿ…Y[âƒÿ´YY·ÿÀYYÊ‚ÿ ³YYºÿÀYYtƒ|¢‹ÿ‚£‚ˆÿütYcïÿ¬YYÜÿtYcî…ÿ—YYуÿ YYÉÿÀYYÊ‚ÿžYYÎÿÀYYËÿ‚£‚‰ÿ’YYÄÿ¬YYÜÿ’YYÂ…ÿ½YY¥‚ÿ ýxY`èÿÀYYÊÿ úsYeîÿÀYYÊÿ‚£‚‰ÿÌYYrï€ÿ ¬YYÜÿÎYYnê‚ÿþÿñjYeæÿ ¿YYÿÿÀYYÌÿ ªYYœÿÿÀYYÌÿ‚£‚Šÿ9•YYrÅíü¡YYÜÿÿ–YYm¼åíâʼn×ÿÂYYrÑõîµ_YhæÿÿÀYY¦Ð˺ƒYYvòÿÿÀYY¦ÐÊô‰ÿ‚£‚ŠÿúZYY[^€YÜÿÿúœYZ€Y Õÿÿ¿aYY][YYtÞ€ÿ¿„Y\‘ï€ÿ¿…YÙ‰ÿ‚£‚Œÿß©‰zz‰£ÆøÿÜ¥…zz‰¥Ðü€ÿ뮇x|”Âøÿߨ€¬«­Áæ‚ÿߨ‚¬««í‰ÿ‚£‚Õÿ‚£‚Õÿ‚£‚Õÿ‚£ƒÕÿƒ£ƒÕÿƒ£|Õí|£ Ï ýýýýýýýý ¬ Æoã¢Ø€×ØØ××€ÖÕÕÔÏËÆ®u/Ãwù©é èççææåâáààáÏŒÁvö©æääããâàÞÝÚØÕÑÙ¶'Àuö©æåäããâàÞÛÚ×ÓÏÈÏÂ+¿vö¨æååäããáàÜÚÙÖÒÎÉ¿ÎÁ'¾vö¨æååäããàßÜÛÙÕÑÍÇÀ¶Õ¿#½x÷¨çææääãáàÞÛÚÖÒÍÇÁ¸µá²'¼x÷©çæåääãáßÜÚØÓÏʹ¬ÈÞ±#»x÷„ç9×ÁÀ¾çÍ×ç纳߱ÝÜËçׯßçäÍçç帰ØçÇ©æÇ¾àÈæÛÆÓâ´¬ÐÚØÔ»ÆÃµ¯´ÛÖ±%ºx÷ƒç6ΚÏݹ施çç̹̆编ç«É°çÄ•ççÚ©ÃÞçׂàºÌËæªÎ«Ð§¿×ÜÙÑƒÃÆ½wª€Õ®!¹x÷ƒçŸ‘çææçµ¼€ç1©‘çç٣Уç˜Þ¯žççÕ´¾Þçç²—Âçâœå”ä ·µºØÝÛ¹ŠÅÉÀ}¦ÉáÒÔ¨¸x÷ƒçš•çÐæ·¼€ç2ÇÚç٥ͥ眸¹›äçäã¾¥ççåÒçâœçÀ¹”É㺢ßȯ”½ÌÄ~©»çÚÑÓ¦·x÷ƒç¾ŒØÙ’篶ççÔ¼½’çÕ—à¦Ö¨Ò¶‡ÙÒʺƩ€çÔçÞ”æÊӪŸçÒÊ»‚³ÎÇ|¤°ëäÚÐÓ£¶xø„è>Ô½ÇÄç´·æè¼ÆÞ£ÕÍ©ÝÓÁÜèÖ³á»ÞÁÃàèèà¨ÎèѨØÇ¼Ùà¿Áß¹ÔÛ©ÇГ«éíãÙÐÒ£µxø­èçæååãâÞÜ×ÒÌÁµ©âõëãÚÐÒ¡´xø®èçæåäâàÝÙÔÎ÷¨ÛüòêãÙÐÓ¡³yù„éAßÈÅÈéÙÞééÿâ»ßãÖéÞÎæà¼ÃçéèÒÔééŽéÈËæÕéàÎáãÀÀÒåÙ·½ÚÖ·£¨©Öÿ÷òêâÙÏÓ²yùƒéCЛÑ߻藾éé·κ龗é­Ë·Ë²Ëçé¿À»Ëé͆é´ÖÆ‘é¨Ô°É·²Àæ½°ÄÛ×±‡º“Ñÿû÷òêâÙÐÓ±yùƒé ‘éèèé¶¾€é9ª‘ééڤҤ齼Ãéé¦ÉÁªé馠Èéß à•é–Öé¼ä潸¿Üظ‰ Îÿýû÷òêâÙÐÓ °yùƒé›•éҞ踾€é:ÈÜéۦΦéšÚè¡ÆéÖ³§±ééÝ‚Þéß é¼¼“áË»èçÝâ™Âظ‹¥ŸÌÿþýû÷òêâÙÐÔ ¯yùƒéFÀÚÚ“é°·ééÖ½¾“éטâ§×­¸Õ©ÅÕ×Ó²Ïééä‹ßéÛ•éÉÔªé¢ÎÞ×±Ô ÅÙ´Š½šÌÿÿþýû÷òêâÚÐÔ ®yú„êÖ¿ÈÆé¶¹èê¾Çà¤×ΪßÔÃà×ÂÊã½Ø·Ñ€êÛ§ØêÏ©ÜÂÀÝêÀãÒÇÔ¿ÅÞÚ·ž¬Ì€ÿ þýû÷òêãÙÑÕ ­yú°ê éèçåãßÚÔÍÁ°Íÿ þýû÷ñêãÚÑÕ ¬yú°ê ééçåãàÛÔÍòЂÿ þýû÷ñëãÚÒÖ «yû„ëáÉÆÉëÛàëëÄÁä¼áåØëàÐæëÜÉä€ëØêëǾëÊÌè×ëáÐåëÖÖêééÒÐàÛÇ¥²™Ô†ÿüõìãÚÒ×¢ªyûƒëKÑœÒá¼ê˜¿ëëЇл뿘ë®Ì¶×½ÃÓëëÔŽëëÏ‡ëµØÈ’ë®ÍµÑ»»Íé̸¶ÆÛËÃ¥©ÑÉþ¿ÂÆÍÕàìññîâÕ×¢©yûƒë¡’ëêêë·¿€ë«’ëëܥԥ롦µÃæë꺘€ë,§¡Éëá¢ØŸë¢ ÍÌ©é©ÈƤÜÑ…©¢¯˜Žuqpoprtw…˜¯ÅÚÝࢨyûƒë›–ëԟ꺿€ëBÊ‚ÞëݧЧ롗ɷ±ëÉ»šâëëß‚àëá¤Õ¢ë¡›ÐΧê¦ËÉ¢ÝÒ†®¦´Œs~zgxkjkdjkamz—¹Ý¨§yüƒìNÂŽÜݔ첹ììØ¿À”ìÚšå©Ú¯ºÍÁ¸ÚÔÀ‡ØììçŒâìÞ—æ§Ü­ÅÁÀÂÚ¿¿¼½ÞςɳŸ|p€{pyousdqriwupn‚¹›¦yü„ìNØÀÊÇë·ºêì¿Éâ¥ØÐ«àÖÄàèÉÉæ¼êâ²åììÝ©ÚìѪÞÙÄÞìÈËè»äÆÆâßÉž·Ÿ®±’…‡|‡|€†ƒt~|x|tm• ¥yü°ìëëêéæåàÜÖÐÉÁ¸­£š—••”’€ ŽŽ‹‰‡€sŠ[¥yý±íìëêèæãÞÚÔÍÆ¿·¯©¥£¢¡ € œ››š™—”‰†1¤yý„íPãËÈËíÝáííÆÂæ½ãçÙíáÑêä¿ÆëíìÖØííÈÀíËÎêÙíãÑçëÖÖíìëëÖæäÑ®À®Âʝµ±®¡ž«¤š¥¨œ§¦¤¡žš•“w£yýƒíQÓÔã½ì™ÁííшѽíÀ™í¯Î¹Î´ÎëíÁýÎíчí¶ÚÉ“í¯Ï¹·É¥ÌììÔŽçæ×„Õ»¶Ê––¾º—Ž–Œ¤‡‘¢…¢²°®«¨¥ ¡5£yýƒí¢“íììí¹À€íF­“ííÞ¦Õ¦íŸÀ¿Æíí¨ÌĬíí©¢Ëíã£Ú íÎä›Ñì뺘çæÞŒº¶ÕÇ‘ ÆÃ´ºŠ¤³§Š´¸ƒ¯½»¹·µ²¯µ^£{þƒî˜îÖ¡í¼Á€îFÌ‚áîߨӨîœÞí¤ÊîÚ¶ª´îîâƒãî䦨£î›äÆÉîîʼšáèß¾ڬ¤œÎÌË­«ÊÁŸÅʧ°ÉÈÅÅÂÀ¾»Äh£{þƒîQÃÞߕîîÚÀ•îÛšæªÜ¯»Ù¬ÉÚÛ×µÓîîéãîà˜è¨Þ­Ê¼ÊØØÖÀ‡×é݉âμĜÌŦ¶¼¢¹µ±¬³ÅÑÐÎÌÊÈÇÔi£{ÿ„ïÚÂÌÉî¹¼íïÁËä§ÛÒ­ãÙÆåÛÆÎèÁܻՀï1àªÜïÓ¬àܯ䯫­ã¿îã³åëת̳ÏῷϹ¼Ÿ Æ£¹µŸ¢ÕÙØÖÕÔÓÒßl£{ÿ³ïîîííìêéèçæäâáàà‚ß„ÞÝÜÛÙÙçp£{ÿ´ï îîííìêêéèèæåå‚ä‚ã€âááàÞÞís£{ÿ„ïPäÌÉÌïßãïïÇÃè¿äéÛïãÓêïíÜïïîÉÀãïÒ»îÓÉëÚïçÒçïïÜíïïϾÚîè½ËÇÑêèÕèèçÑÌåáÌÛãÀÀÑææååääãôv£|ÿƒðHÕž×å¿ïšÃððÔ‰Ô¿ðšð±Ð¶ðË™ððâ®Êçðß…èÀÔÒ‘ð²Ò²ðßíðì±Æßïî•Êã¿íÏ’ëëϱ¶´³Ò±È¶¶¼€éè÷x£|ÿƒð¤”ðïïð»Â€ð=®”ððá¨Ø§ðæµ¢ððݺÄçðð¸›Éðë¢ážðžáŘìðè¸ÄÞð𞻽íì·îîìà²Í›ë¢ÌíÁå€ìëëêêúy£|ÿƒñž™ñÙ¢ð¾Ã€ñ<΃ãñâªÕªñ¡¾ÀŸîñíìŪññïƒÛñì¤ßŸñ¤ÀÜâñïéØœññŸ¿ÄïȾéïïçÁÂÌ¿˜Ú×»îííîíý{£|ÿƒñÅáâ–ñµ½ññÝÃÄ–ñÞœé«ß®Ú½ŠâÛÒÁί€ñ*Üñç™ëªá¬ÛȈ×Ûܵޡññ™ÎîÅÕ¿‡ßÛÎÂÓ£ØÜ¬ð¬Êððïðïÿ{£|ÿ„ñHÜÄÎËðº½ïñÃÍæ¨ÝÔ®åÚÈäñÞ¹êÁæÈÊéññè­ÖñÙ¬ßàÇàñé¶éÃäËÈáñí´ÈÇÇñâ·êÁáÄÊçÎÂàñÈâññƒðÿ|£|ÿÑñðñÿ|£|ÿÓñÿ|£|ÿ„òçÏÌÏòáæòòÉÆëÁçìÞòæÕîðÙÜ€ò,ñÞòòÉÆòÌÕëßòäÖðèÃÉðòñÚÜòòá½ÖÅåòêâòòêÄÉèÉÈÛñÜð…òÿ|£|ÿƒóGØ ÙèÁò›ÅóóÖŠÖÁóÄ›ó²Ò¾·Ò¤×óóÔ•óóÏŽó·ã¿¡ó³ÑÁÔ¸ÒñóÆÇÁÓóå‹îÒÑó¯´óóÒ´ÕÔ»¼ÅÝð…óÿ|£|ÿƒó¥•óòòó½Ä€ó°•óóã©Ú©óŸ×éšÜóñº €ó'¦¨Òó߬ծó¡ÈÃËóó«Ñȯóë’ËÊ󿣻óóÏÀÉïòÅìó¡í…óÿ|£|ÿƒóŸšóÚ£ò¿Ä€ó<Єåóä«×«óžíÅÑóóËÀŸìóóà„íó߮үóèò¦ÎóÞº¬·óë’ÏÏó¾·¯óóìñ¬Ëݾóò¡î…óÿ|£|ÿƒóGÇ‘ãã—ó¶¾óóÞÄÅ—óàë¬à±ÌÂÌÞÛÛÁˆãóóéîóÚ¡é¯ÞµÀݯËßáÛ¸×óçŽñÝËØªèáÁصѲÌóï™é…óÿ|£|ÿ„óFÞÅÏÌò»¾ñóÄÎè©ÞÕ¯çÜÉéÅ®²çÁóä¸îóóà¬ãóϱéÚÊëÞÉÒéÄá½Øóó߯ռÝóÏÈãÉãÈÏóÉãóÞ®Ú…óÿ|£~ÿÓôÿ~£~ÿÓôÿ~£~ÿ„õêÑÎÑõäéõõËÈîÃêïàõéØðõÝà€õÝàõõËÈõÎØðàõéØïõäÐî€õáôõã¿ÙÇèõíåõõÚÈÎñìæõèÐé…õÿ~£~ÿƒõGÙ¡ÛêÃôœÇõõØ‹ØÂõÆœõ´Ô¾ÕƾÛõОÛõÐŽõ¸åÈœõ´Ô½àÄÊÛõõÜ’õõçŒðÔÓõ°µõõ¹Ì¬ò«¿ë¾ÐÒ…õÿ~£ÿƒö§—öõõö¿Ç€ö<²—ööæ«Ýªö¥¥Þ͵ö«Ý͵öö§©Õöæ«Ýªö¦¬¼ËðöõÁööî“ÍÌö襽öõõßÕê¢ÊŰÌì…öÿ~£ÿƒö ›öÝ¥õÁÇ€ö0Ò…èöç­Ù­ö¦ âϳö¨àϳööã…ðöç­Ù­ö¦›Ò¾¸öÑŸíöî“ÒÑöÀ¹°€öµè·½³ÁÍ«…öÿ~£ÿƒöGÉ’åæ˜ö¸ÀööáÆÇ˜öâžî®ãµÈÎÂÏäÄÎÂÑööìðöâžî®ãµÁÕȾâÜÇŠàöêôßÍÚ¬žëàç öÕ¨©ÊÉÕ³…öÿ£ÿ„öFàÇÒÏõ½ÀôöÆÐëªáذêßÌéôÏÕðÃðÏÔõööâ®æöÕ°êßÌêòÑÑïÂôë¸îöâ±Ø¾ßöÑÊæÊìÊööÎËöÔÏí…öÿ£ÿÓ÷ÿ£ÿÓ÷ÿ£ÿ„øEíÓÐÓøçìøøÎÊñÅíòãøìÚñîÊÌåøèÅÒøõÁÚöÇèêêøâàøâÄ×øøòÛèøøØÅÛÊõøéîøøíÚíøâÝøòâ†øÿ£ÿƒøFÜ¢ÝíÅ÷žÉøøÚŒÚÄøÈžø°àºÓÃ¹ÑøÇ¿Úøø³©ö·ô¦ÄæÀÇ×ÅÄÝøø·Û·ìøÍ›øÉåøšÖøö°á»ÅÇ·ÉÕ—†øÿ£ÿƒø¨—ø÷÷øÀÈ€ø;³—øøèªëžøšèöÇöøÇÆÓøøö–¹ãøÈÈ¿ÏÞ­ÉÉØøøœò«ÐøÖžÌÞøÝšÙøìœøžÔïªÎ󦆸ÿ£ÿƒø¡œøÞ¦÷ÂÈ€ø;Ô…êøè©øÂƘõÐÊøøîõ¡ÞøøÅ—øøÈɼÑâªõñšìøÒÃž×øÖŸÒâñÁ­ÊøøÅÆ™îÕÉøí§†øÿ£ÿƒøGÊ’çè™ø¹ÁøøãÇÉ™øäžøÔÞ´ø¤ãêè¹ê§áøøÒøøÂ½ÙÄÏÆºì£ÞçÜã±ðøÏžøÓÖØ—»çèÖà¶Ü¼Ôßí›÷…øÿ£ÿ„ùãÉÔÑø¿Â÷ùÈÓî¬äÚ³ëËÍîùÉôÛØáÍÙ€ù'Ó¶õøÃ¿õÕÓøØÎááÕÚÆæùùÓ¸Û½ñùÄߨÜÏËðÖ°¯ìÞ±æ…ùÿ£ÿÓùÿ£ÿÓúÿ£ÿ„úïÕÒÕúèíúúÏËòÆïôåúîÜñ÷ÍÊñ€úæ÷úÖÆùÙÕöäúïÜóúùå€úÔÇêúñÃÚÎåðÇÒùúøÞèúêÝöðÈÏ÷„úÿ£ÿƒúHÞ£ßïÆùžÊúúÜŒÜÆúÉžú±âºâ·Ôôúúè’÷úâˆöÃàÓ˜ú·ÙºúÚ˜úúï´ÐíúúååÒоÚùúÊн۶ßÁØ¼Øø„úÿ‚£ÿƒú©˜úùùúÁÉ€ú<´˜úúê«íŸú ÐÄÌõúúÉœöúú¶¤Òúïªå§ú¡íÀ£úúë¾Ëíúú˜ËÇúÌÇÒúú¤ðħ²÷ ÍÇÐ…úÿ‚£ÿƒú¢úà§ùÄÉ€ú=Õ†ëúêªúÄÇšëù¾»úÙÆ êúúô†èúï¬â©ú¥ÃÇ¢óú÷óÔ©úú˜ÏÍúñø¥Úú¢òÃÂÆÅòùªÓ„úÿ‚£ÿƒûÍ“êêšû»ÃûûåÉËšûçŸû×à»ÓÔÈ¿çâϋހû'’éûìô¯é²âÇ‹êãÜÄÝ®ûû’çðнé¯Õê¿Ý»ÝÛÙÃÆã³×„ûÿ‚£ÿ„ûFåËÖÒúÁÄùûÉÔð­åÜ´íÌÏòîÏÓõÆøó¼ðûûî±âûݳëæÏêûë½÷ÈìÑÐðûñµÖÈÙåÏÛíËöÐÞûÅÓ÷åÏÖ…ûÿ‚£ÿÓûÿ‚£‚ÿÓüÿ‚£‚ÿ„üFðÖÓÖüêïüüÑÍôÈðöæüðÝòüäãûüüêÝøüàÂøáÑùåùüçôüìíüüùßàûüðÃÝÏëëÈØüüûæ÷üçßüéÛò…üÿ‚£‚ÿƒüGߤáðÈûŸËüüÝÝÇüËŸü²ä½ÓÊÌÕüݸͳüïŠïÎØè‘öô”âü¦ÂüüÒÆ³ÍüùŽëâ×ÉÃßüüï‘ðÓù¶Ø¤…üÿ‚£‚ÿƒüª™üûûüÂË€ü0µ™üüë¬ï ü¤ªÒÖ®üðëÁ¸üüÈÏüü§ñü²ßüËÂüüú鵿üü–ÍÊüÇÊØ€ü¬éïî²ÇùÈÆ…üÿ‚£‚ÿƒü£üâ¨ûÅË€ü׆íüì«üÅÉâ¿¶¶üüäÂû€ü ‹Ûüü©ñü²ßüËÀüòÂÑüü–ÒÐüò÷Ÿéüü­çüÚÈüøÙ¹…üÿ‚£‚ÿƒýΔìì›ý¼ÄýýçËÌ›ýè ýØâ¹ïâÄ׿ì¹ÜÖ€ý'šÝýüîýªÙýżýåÏØÌ²ýü‘îîѹð§áåý¤æç¼Üѽô™ú„ýÿ‚£‚ÿ„ýFæÌ×ÔüÂÅûýËÖñ®çݵïÍÐôîÂßøÊã´°àýýö¶Ûýê´àö¹ÓüÆÂñËêÍÓóýïµÚÇßáÐáìÏõ·Ûݳ°çÑÒã…ýÿ‚£‚ÿÓýÿ‚£‚ÿÓýÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚Õÿ‚£‚Õÿ‚£‚Õÿ‚£‚ŒÿÞ¨ˆyyƒ–³ôÿÞ¦‡yyƒ—¶÷€ÿë°‰x{’Âøÿߨ‚¬¹Ùûÿߨ‚¬¨ÁŠÿ‚£‚Šÿúœ€Y\^€YÚÿÿú›ZYY\^YY[âÿÿ¾aYY][YYtà€ÿ¿…YxÙ€ÿ¿„Y„Šÿ‚£‚Šÿ=•YY|ÏðóæÈ™âÿÿ•YY}Ñðó寛éÿÁYYrÐôï´^YjçÿÿÀYY¦Ñʺ‡YY`ÙÿÿÀYY¦ÐÊÊÈØŠÿ‚£‚‰ÿÌYYzö…ÿÌYY|÷„ÿïiYeæÿ ½YYÿÿÀYYÌÿ ¥YY€ÿÿÀYYÌÿ‚£‚‰ÿ’YYʆÿ’YYÌ…ÿ½YY¥‚ÿ ýxY_èÿÀYYÊÿ ÷pYZàÿÀYYËÿ‚£‚ˆÿûrYdð…ÿûsYeñ…ÿ—YYуÿ YYÉÿÀYYÊ‚ÿ YYÄÿÀYY½óëëñ‹ÿ‚£‚ˆÿóeYsû…ÿóeYtü…ÿ…Y[âƒÿ´YY·ÿÀYYÊ‚ÿ´YYµÿÀƒY„‹ÿ‚£‚ˆÿóeYsûÿÛ±µó÷eYrû…ÿ…Y[âƒÿ´YY·ÿÀYYÊ‚ÿ ³YYºÿÀYYtƒ|¢‹ÿ‚£‚ˆÿütYcïÿ¬YYÜÿtYcî…ÿ—YYуÿ YYÉÿÀYYÊ‚ÿžYYÎÿÀYYËÿ‚£‚‰ÿ’YYÄÿ¬YYÜÿ’YYÂ…ÿ½YY¥‚ÿ ýxY`èÿÀYYÊÿ úsYeîÿÀYYÊÿ‚£‚‰ÿÌYYrï€ÿ ¬YYÜÿÎYYnê‚ÿþÿñjYeæÿ ¿YYÿÿÀYYÌÿ ªYYœÿÿÀYYÌÿ‚£‚Šÿ9•YYrÅíü¡YYÜÿÿ–YYm¼åíâʼn×ÿÂYYrÑõîµ_YhæÿÿÀYY¦Ð˺ƒYYvòÿÿÀYY¦ÐÊô‰ÿ‚£‚ŠÿúZYY[^€YÜÿÿúœYZ€Y Õÿÿ¿aYY][YYtÞ€ÿ¿„Y\‘ï€ÿ¿…YÙ‰ÿ‚£‚Œÿß©‰zz‰£ÆøÿÜ¥…zz‰¥Ðü€ÿ뮇x|”Âøÿߨ€¬«­Áæ‚ÿߨ‚¬««í‰ÿ‚£‚Õÿ‚£‚Õÿ‚£‚Õÿ‚£ƒÕÿƒ£ƒÕÿƒ£|Õí|£ Ï ýýýýýýýý ¬ Æoã¢Ø€×ØØ××€ÖÕÕÔÏËÆ®u/Ãwù©é èççææåâáààáÏŒÁvö©æääããâàÞÝÚØÕÑÙ¶'Àuö©æåäããâàÞÛÚ×ÓÏÈÏÂ+¿vö¨æååäããáàÜÚÙÖÒÎÉ¿ÎÁ'¾vö¨æååäããàßÜÛÙÕÑÍÇÀ¶Õ¿#½x÷¨çææääãáàÞÛÚÖÒÍÇÁ¸µá²'¼x÷©çæåääãáßÜÚØÓÏʹ¬ÈÞ±#»x÷„ç9×ÁÀ¾çÍ×ç纳߱ÝÜËçׯßçäÍçç帰ØçÇ©æÇ¾àÈæÛÆÓâ´¬ÐÚØÔ»ÆÃµ¯´ÛÖ±%ºx÷ƒç6ΚÏݹ施çç̹̆编ç«É°çÄ•ççÚ©ÃÞçׂàºÌËæªÎ«Ð§¿×ÜÙÑƒÃÆ½wª€Õ®!¹x÷ƒçŸ‘çææçµ¼€ç1©‘çç٣Уç˜Þ¯žççÕ´¾Þçç²—Âçâœå”ä ·µºØÝÛ¹ŠÅÉÀ}¦ÉáÒÔ¨¸x÷ƒçš•çÐæ·¼€ç2ÇÚç٥ͥ眸¹›äçäã¾¥ççåÒçâœçÀ¹”É㺢ßȯ”½ÌÄ~©»çÚÑÓ¦·x÷ƒç¾ŒØÙ’篶ççÔ¼½’çÕ—à¦Ö¨Ò¶‡ÙÒʺƩ€çÔçÞ”æÊӪŸçÒÊ»‚³ÎÇ|¤°ëäÚÐÓ£¶xø„è>Ô½ÇÄç´·æè¼ÆÞ£ÕÍ©ÝÓÁÜèÖ³á»ÞÁÃàèèà¨ÎèѨØÇ¼Ùà¿Áß¹ÔÛ©ÇГ«éíãÙÐÒ£µxø­èçæååãâÞÜ×ÒÌÁµ©âõëãÚÐÒ¡´xø®èçæåäâàÝÙÔÎ÷¨ÛüòêãÙÐÓ¡³yù„éAßÈÅÈéÙÞééÿâ»ßãÖéÞÎæà¼ÃçéèÒÔééŽéÈËæÕéàÎáãÀÀÒåÙ·½ÚÖ·£¨©Öÿ÷òêâÙÏÓ²yùƒéCЛÑ߻藾éé·κ龗é­Ë·Ë²Ëçé¿À»Ëé͆é´ÖÆ‘é¨Ô°É·²Àæ½°ÄÛ×±‡º“Ñÿû÷òêâÙÐÓ±yùƒé ‘éèèé¶¾€é9ª‘ééڤҤ齼Ãéé¦ÉÁªé馠Èéß à•é–Öé¼ä潸¿Üظ‰ Îÿýû÷òêâÙÐÓ °yùƒé›•éҞ踾€é:ÈÜéۦΦéšÚè¡ÆéÖ³§±ééÝ‚Þéß é¼¼“áË»èçÝâ™Âظ‹¥ŸÌÿþýû÷òêâÙÐÔ ¯yùƒéFÀÚÚ“é°·ééÖ½¾“éטâ§×­¸Õ©ÅÕ×Ó²Ïééä‹ßéÛ•éÉÔªé¢ÎÞ×±Ô ÅÙ´Š½šÌÿÿþýû÷òêâÚÐÔ ®yú„êÖ¿ÈÆé¶¹èê¾Çà¤×ΪßÔÃà×ÂÊã½Ø·Ñ€êÛ§ØêÏ©ÜÂÀÝêÀãÒÇÔ¿ÅÞÚ·ž¬Ì€ÿ þýû÷òêãÙÑÕ ­yú°ê éèçåãßÚÔÍÁ°Íÿ þýû÷ñêãÚÑÕ ¬yú°ê ééçåãàÛÔÍòЂÿ þýû÷ñëãÚÒÖ «yû„ëáÉÆÉëÛàëëÄÁä¼áåØëàÐæëÜÉä€ëØêëǾëÊÌè×ëáÐåëÖÖêééÒÐàÛÇ¥²™Ô†ÿüõìãÚÒ×¢ªyûƒëKÑœÒá¼ê˜¿ëëЇл뿘ë®Ì¶×½ÃÓëëÔŽëëÏ‡ëµØÈ’ë®ÍµÑ»»Íé̸¶ÆÛËÃ¥©ÑÉþ¿ÂÆÍÕàìññîâÕ×¢©yûƒë¡’ëêêë·¿€ë«’ëëܥԥ롦µÃæë꺘€ë,§¡Éëá¢ØŸë¢ ÍÌ©é©ÈƤÜÑ…©¢¯˜Žuqpoprtw…˜¯ÅÚÝࢨyûƒë›–ëԟ꺿€ëBÊ‚ÞëݧЧ롗ɷ±ëÉ»šâëëß‚àëá¤Õ¢ë¡›ÐΧê¦ËÉ¢ÝÒ†®¦´Œs~zgxkjkdjkamz—¹Ý¨§yüƒìNÂŽÜݔ첹ììØ¿À”ìÚšå©Ú¯ºÍÁ¸ÚÔÀ‡ØììçŒâìÞ—æ§Ü­ÅÁÀÂÚ¿¿¼½ÞςɳŸ|p€{pyousdqriwupn‚¹›¦yü„ìNØÀÊÇë·ºêì¿Éâ¥ØÐ«àÖÄàèÉÉæ¼êâ²åììÝ©ÚìѪÞÙÄÞìÈËè»äÆÆâßÉž·Ÿ®±’…‡|‡|€†ƒt~|x|tm• ¥yü°ìëëêéæåàÜÖÐÉÁ¸­£š—••”’€ ŽŽ‹‰‡€sŠ[¥yý±íìëêèæãÞÚÔÍÆ¿·¯©¥£¢¡ € œ››š™—”‰†1¤yý„íPãËÈËíÝáííÆÂæ½ãçÙíáÑêä¿ÆëíìÖØííÈÀíËÎêÙíãÑçëÖÖíìëëÖæäÑ®À®Âʝµ±®¡ž«¤š¥¨œ§¦¤¡žš•“w£yýƒíQÓÔã½ì™ÁííшѽíÀ™í¯Î¹Î´ÎëíÁýÎíчí¶ÚÉ“í¯Ï¹·É¥ÌììÔŽçæ×„Õ»¶Ê––¾º—Ž–Œ¤‡‘¢…¢²°®«¨¥ ¡5£yýƒí¢“íììí¹À€íF­“ííÞ¦Õ¦íŸÀ¿Æíí¨ÌĬíí©¢Ëíã£Ú íÎä›Ñì뺘çæÞŒº¶ÕÇ‘ ÆÃ´ºŠ¤³§Š´¸ƒ¯½»¹·µ²¯µ^£{þƒî˜îÖ¡í¼Á€îFÌ‚áîߨӨîœÞí¤ÊîÚ¶ª´îîâƒãî䦨£î›äÆÉîîʼšáèß¾ڬ¤œÎÌË­«ÊÁŸÅʧ°ÉÈÅÅÂÀ¾»Äh£{þƒîQÃÞߕîîÚÀ•îÛšæªÜ¯»Ù¬ÉÚÛ×µÓîîéãîà˜è¨Þ­Ê¼ÊØØÖÀ‡×é݉âμĜÌŦ¶¼¢¹µ±¬³ÅÑÐÎÌÊÈÇÔi£{ÿ„ïÚÂÌÉî¹¼íïÁËä§ÛÒ­ãÙÆåÛÆÎèÁܻՀï1àªÜïÓ¬àܯ䯫­ã¿îã³åëת̳ÏῷϹ¼Ÿ Æ£¹µŸ¢ÕÙØÖÕÔÓÒßl£{ÿ³ïîîííìêéèçæäâáàà‚ß„ÞÝÜÛÙÙçp£{ÿ´ï îîííìêêéèèæåå‚ä‚ã€âááàÞÞís£{ÿ„ïPäÌÉÌïßãïïÇÃè¿äéÛïãÓêïíÜïïîÉÀãïÒ»îÓÉëÚïçÒçïïÜíïïϾÚîè½ËÇÑêèÕèèçÑÌåáÌÛãÀÀÑææååääãôv£|ÿƒðHÕž×å¿ïšÃððÔ‰Ô¿ðšð±Ð¶ðË™ððâ®Êçðß…èÀÔÒ‘ð²Ò²ðßíðì±Æßïî•Êã¿íÏ’ëëϱ¶´³Ò±È¶¶¼€éè÷x£|ÿƒð¤”ðïïð»Â€ð=®”ððá¨Ø§ðæµ¢ððݺÄçðð¸›Éðë¢ážðžáŘìðè¸ÄÞð𞻽íì·îîìà²Í›ë¢ÌíÁå€ìëëêêúy£|ÿƒñž™ñÙ¢ð¾Ã€ñ<΃ãñâªÕªñ¡¾ÀŸîñíìŪññïƒÛñì¤ßŸñ¤ÀÜâñïéØœññŸ¿ÄïȾéïïçÁÂÌ¿˜Ú×»îííîíý{£|ÿƒñÅáâ–ñµ½ññÝÃÄ–ñÞœé«ß®Ú½ŠâÛÒÁί€ñ*Üñç™ëªá¬ÛȈ×Ûܵޡññ™ÎîÅÕ¿‡ßÛÎÂÓ£ØÜ¬ð¬Êððïðïÿ{£|ÿ„ñHÜÄÎËðº½ïñÃÍæ¨ÝÔ®åÚÈäñÞ¹êÁæÈÊéññè­ÖñÙ¬ßàÇàñé¶éÃäËÈáñí´ÈÇÇñâ·êÁáÄÊçÎÂàñÈâññƒðÿ|£|ÿÑñðñÿ|£|ÿÓñÿ|£|ÿ„òçÏÌÏòáæòòÉÆëÁçìÞòæÕîðÙÜ€ò,ñÞòòÉÆòÌÕëßòäÖðèÃÉðòñÚÜòòá½ÖÅåòêâòòêÄÉèÉÈÛñÜð…òÿ|£|ÿƒóGØ ÙèÁò›ÅóóÖŠÖÁóÄ›ó²Ò¾·Ò¤×óóÔ•óóÏŽó·ã¿¡ó³ÑÁÔ¸ÒñóÆÇÁÓóå‹îÒÑó¯´óóÒ´ÕÔ»¼ÅÝð…óÿ|£|ÿƒó¥•óòòó½Ä€ó°•óóã©Ú©óŸ×éšÜóñº €ó'¦¨Òó߬ծó¡ÈÃËóó«Ñȯóë’ËÊ󿣻óóÏÀÉïòÅìó¡í…óÿ|£|ÿƒóŸšóÚ£ò¿Ä€ó<Єåóä«×«óžíÅÑóóËÀŸìóóà„íó߮үóèò¦ÎóÞº¬·óë’ÏÏó¾·¯óóìñ¬Ëݾóò¡î…óÿ|£|ÿƒóGÇ‘ãã—ó¶¾óóÞÄÅ—óàë¬à±ÌÂÌÞÛÛÁˆãóóéîóÚ¡é¯ÞµÀݯËßáÛ¸×óçŽñÝËØªèáÁصѲÌóï™é…óÿ|£|ÿ„óFÞÅÏÌò»¾ñóÄÎè©ÞÕ¯çÜÉéÅ®²çÁóä¸îóóà¬ãóϱéÚÊëÞÉÒéÄá½Øóó߯ռÝóÏÈãÉãÈÏóÉãóÞ®Ú…óÿ|£~ÿÓôÿ~£~ÿÓôÿ~£~ÿ„õêÑÎÑõäéõõËÈîÃêïàõéØðõÝà€õÝàõõËÈõÎØðàõéØïõäÐî€õáôõã¿ÙÇèõíåõõÚÈÎñìæõèÐé…õÿ~£~ÿƒõGÙ¡ÛêÃôœÇõõØ‹ØÂõÆœõ´Ô¾ÕƾÛõОÛõÐŽõ¸åÈœõ´Ô½àÄÊÛõõÜ’õõçŒðÔÓõ°µõõ¹Ì¬ò«¿ë¾ÐÒ…õÿ~£ÿƒö§—öõõö¿Ç€ö<²—ööæ«Ýªö¥¥Þ͵ö«Ý͵öö§©Õöæ«Ýªö¦¬¼ËðöõÁööî“ÍÌö襽öõõßÕê¢ÊŰÌì…öÿ~£ÿƒö ›öÝ¥õÁÇ€ö0Ò…èöç­Ù­ö¦ âϳö¨àϳööã…ðöç­Ù­ö¦›Ò¾¸öÑŸíöî“ÒÑöÀ¹°€öµè·½³ÁÍ«…öÿ~£ÿƒöGÉ’åæ˜ö¸ÀööáÆÇ˜öâžî®ãµÈÎÂÏäÄÎÂÑööìðöâžî®ãµÁÕȾâÜÇŠàöêôßÍÚ¬žëàç öÕ¨©ÊÉÕ³…öÿ£ÿ„öFàÇÒÏõ½ÀôöÆÐëªáذêßÌéôÏÕðÃðÏÔõööâ®æöÕ°êßÌêòÑÑïÂôë¸îöâ±Ø¾ßöÑÊæÊìÊööÎËöÔÏí…öÿ£ÿÓ÷ÿ£ÿÓ÷ÿ£ÿ„øEíÓÐÓøçìøøÎÊñÅíòãøìÚñîÊÌåøèÅÒøõÁÚöÇèêêøâàøâÄ×øøòÛèøøØÅÛÊõøéîøøíÚíøâÝøòâ†øÿ£ÿƒøFÜ¢ÝíÅ÷žÉøøÚŒÚÄøÈžø°àºÓÃ¹ÑøÇ¿Úøø³©ö·ô¦ÄæÀÇ×ÅÄÝøø·Û·ìøÍ›øÉåøšÖøö°á»ÅÇ·ÉÕ—†øÿ£ÿƒø¨—ø÷÷øÀÈ€ø;³—øøèªëžøšèöÇöøÇÆÓøøö–¹ãøÈÈ¿ÏÞ­ÉÉØøøœò«ÐøÖžÌÞøÝšÙøìœøžÔïªÎ󦆸ÿ£ÿƒø¡œøÞ¦÷ÂÈ€ø;Ô…êøè©øÂƘõÐÊøøîõ¡ÞøøÅ—øøÈɼÑâªõñšìøÒÃž×øÖŸÒâñÁ­ÊøøÅÆ™îÕÉøí§†øÿ£ÿƒøGÊ’çè™ø¹ÁøøãÇÉ™øäžøÔÞ´ø¤ãêè¹ê§áøøÒøøÂ½ÙÄÏÆºì£ÞçÜã±ðøÏžøÓÖØ—»çèÖà¶Ü¼Ôßí›÷…øÿ£ÿ„ùãÉÔÑø¿Â÷ùÈÓî¬äÚ³ëËÍîùÉôÛØáÍÙ€ù'Ó¶õøÃ¿õÕÓøØÎááÕÚÆæùùÓ¸Û½ñùÄߨÜÏËðÖ°¯ìÞ±æ…ùÿ£ÿÓùÿ£ÿÓúÿ£ÿ„úïÕÒÕúèíúúÏËòÆïôåúîÜñ÷ÍÊñ€úæ÷úÖÆùÙÕöäúïÜóúùå€úÔÇêúñÃÚÎåðÇÒùúøÞèúêÝöðÈÏ÷„úÿ£ÿƒúHÞ£ßïÆùžÊúúÜŒÜÆúÉžú±âºâ·Ôôúúè’÷úâˆöÃàÓ˜ú·ÙºúÚ˜úúï´ÐíúúååÒоÚùúÊн۶ßÁØ¼Øø„úÿ‚£ÿƒú©˜úùùúÁÉ€ú<´˜úúê«íŸú ÐÄÌõúúÉœöúú¶¤Òúïªå§ú¡íÀ£úúë¾Ëíúú˜ËÇúÌÇÒúú¤ðħ²÷ ÍÇÐ…úÿ‚£ÿƒú¢úà§ùÄÉ€ú=Õ†ëúêªúÄÇšëù¾»úÙÆ êúúô†èúï¬â©ú¥ÃÇ¢óú÷óÔ©úú˜ÏÍúñø¥Úú¢òÃÂÆÅòùªÓ„úÿ‚£ÿƒûÍ“êêšû»ÃûûåÉËšûçŸû×à»ÓÔÈ¿çâϋހû'’éûìô¯é²âÇ‹êãÜÄÝ®ûû’çðнé¯Õê¿Ý»ÝÛÙÃÆã³×„ûÿ‚£ÿ„ûFåËÖÒúÁÄùûÉÔð­åÜ´íÌÏòîÏÓõÆøó¼ðûûî±âûݳëæÏêûë½÷ÈìÑÐðûñµÖÈÙåÏÛíËöÐÞûÅÓ÷åÏÖ…ûÿ‚£ÿÓûÿ‚£‚ÿÓüÿ‚£‚ÿ„üFðÖÓÖüêïüüÑÍôÈðöæüðÝòüäãûüüêÝøüàÂøáÑùåùüçôüìíüüùßàûüðÃÝÏëëÈØüüûæ÷üçßüéÛò…üÿ‚£‚ÿƒüGߤáðÈûŸËüüÝÝÇüËŸü²ä½ÓÊÌÕüݸͳüïŠïÎØè‘öô”âü¦ÂüüÒÆ³ÍüùŽëâ×ÉÃßüüï‘ðÓù¶Ø¤…üÿ‚£‚ÿƒüª™üûûüÂË€ü0µ™üüë¬ï ü¤ªÒÖ®üðëÁ¸üüÈÏüü§ñü²ßüËÂüüú鵿üü–ÍÊüÇÊØ€ü¬éïî²ÇùÈÆ…üÿ‚£‚ÿƒü£üâ¨ûÅË€ü׆íüì«üÅÉâ¿¶¶üüäÂû€ü ‹Ûüü©ñü²ßüËÀüòÂÑüü–ÒÐüò÷Ÿéüü­çüÚÈüøÙ¹…üÿ‚£‚ÿƒýΔìì›ý¼ÄýýçËÌ›ýè ýØâ¹ïâÄ׿ì¹ÜÖ€ý'šÝýüîýªÙýżýåÏØÌ²ýü‘îîѹð§áåý¤æç¼Üѽô™ú„ýÿ‚£‚ÿ„ýFæÌ×ÔüÂÅûýËÖñ®çݵïÍÐôîÂßøÊã´°àýýö¶Ûýê´àö¹ÓüÆÂñËêÍÓóýïµÚÇßáÐáìÏõ·Ûݳ°çÑÒã…ýÿ‚£‚ÿÓýÿ‚£‚ÿÓýÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚Õÿ‚£‚Õÿ‚£‚Õÿ‚£‚ŒÿÞ¨ˆyyƒ–³ôÿÞ¦‡yyƒ—¶÷€ÿë°‰x{’Âøÿߨ‚¬¹Ùûÿߨ‚¬¨ÁŠÿ‚£‚Šÿúœ€Y\^€YÚÿÿú›ZYY\^YY[âÿÿ¾aYY][YYtà€ÿ¿…YxÙ€ÿ¿„Y„Šÿ‚£‚Šÿ=•YY|ÏðóæÈ™âÿÿ•YY}Ñðó寛éÿÁYYrÐôï´^YjçÿÿÀYY¦Ñʺ‡YY`ÙÿÿÀYY¦ÐÊÊÈØŠÿ‚£‚‰ÿÌYYzö…ÿÌYY|÷„ÿïiYeæÿ ½YYÿÿÀYYÌÿ ¥YY€ÿÿÀYYÌÿ‚£‚‰ÿ’YYʆÿ’YYÌ…ÿ½YY¥‚ÿ ýxY_èÿÀYYÊÿ ÷pYZàÿÀYYËÿ‚£‚ˆÿûrYdð…ÿûsYeñ…ÿ—YYуÿ YYÉÿÀYYÊ‚ÿ YYÄÿÀYY½óëëñ‹ÿ‚£‚ˆÿóeYsû…ÿóeYtü…ÿ…Y[âƒÿ´YY·ÿÀYYÊ‚ÿ´YYµÿÀƒY„‹ÿ‚£‚ˆÿóeYsûÿÛ±µó÷eYrû…ÿ…Y[âƒÿ´YY·ÿÀYYÊ‚ÿ ³YYºÿÀYYtƒ|¢‹ÿ‚£‚ˆÿütYcïÿ¬YYÜÿtYcî…ÿ—YYуÿ YYÉÿÀYYÊ‚ÿžYYÎÿÀYYËÿ‚£‚‰ÿ’YYÄÿ¬YYÜÿ’YYÂ…ÿ½YY¥‚ÿ ýxY`èÿÀYYÊÿ úsYeîÿÀYYÊÿ‚£‚‰ÿÌYYrï€ÿ ¬YYÜÿÎYYnê‚ÿþÿñjYeæÿ ¿YYÿÿÀYYÌÿ ªYYœÿÿÀYYÌÿ‚£‚Šÿ9•YYrÅíü¡YYÜÿÿ–YYm¼åíâʼn×ÿÂYYrÑõîµ_YhæÿÿÀYY¦Ð˺ƒYYvòÿÿÀYY¦ÐÊô‰ÿ‚£‚ŠÿúZYY[^€YÜÿÿúœYZ€Y Õÿÿ¿aYY][YYtÞ€ÿ¿„Y\‘ï€ÿ¿…YÙ‰ÿ‚£‚Œÿß©‰zz‰£ÆøÿÜ¥…zz‰¥Ðü€ÿ뮇x|”Âøÿߨ€¬«­Áæ‚ÿߨ‚¬««í‰ÿ‚£‚Õÿ‚£‚Õÿ‚£‚Õÿ‚£ƒÕÿƒ£ƒÕÿƒ£|Õí|£ Ï ýýýýýýýih32=äŠü÷ó€ðéåàW–ü€å‹æÞØÏÁ`•üæ×ÓÔßÄ×ÕÓÔßÏÛÅÐÓÐÇ×Å»À]”üæÇÓÇß·ÔÆÆ½ÚÈÙ¹ÎÄ»¼×¹½¶ÐZ“üçÊËÁÜÂÊÂǺÍÊÙÃÑÄ¿ÆË·À´àÎT’üèåÝäåÝàäâæåäåááååàáÛйãçÍT‘üèÈØÉâº×ÈÆÀÝÄÔ½ÒÅ»ÇØÅǽâ÷æÌUüéÌÎÅàÇÏÈÇÄÐÅßÅÖÆÁÌÔÇÇÀáý÷çÍTüêçáåçàãåäççèèääåæçåà×Äãþý÷çÏUŽ üêËØÈ伨ɯ½àÍݾÓĽÀ×ÄËǽ­¥ª³ÀÈW ýëÎÎÆâÈÑÊÈÁÕÆâÈÙÃÁÅÒÆÏ®³‚wsu|’AŒ ýìéãèéâåçææ€éææèçèèæß̾« œ™˜˜‘ƒ‹! ýíÌÚÉå¾ÚÊÊÃàÇØÂÔÅÂÆâÊÙ³¾°¸¢¡¡©³¬k‹! ýîÐÓÉåÉÓÌËÈ×ÌãÊÜÅÅÆÞÆÛ¾Å·Ä¶¶´ÃÎÊ ‹! ýïëæíìåéìéîíéìééíêëìèêããäßÝÞØÛàÝ ‹! ýïÍÜÍç¾ÛÌÌÅâÈßÁÕÈÆÌäÃâÀÙÆå¾½ÂÑêé ‹! ýðÑÖÌçÌÖÎϼ×ÔáÌÝÈÉÃÙÏÝÌ×½ãÉÈÎâïî ‹ ýñíèííæéìêïîïîëê€ì îìïéìðìééíðññ ‹! ýòÐáÍêÁÞÍÌÆâÐäÃÖÇÄÉçÈàÂÛÔãÑØÐêòò ‹! þóÔÙÏêÏØÑÑËäÆéÎßÉËÏÜÐâÊÕÉãÍßÖçòò ‹! þôðêððèìïííððñííðïðñóòëðóííóíñôô ‹! þõÒãÏíÂáÏÌÇßÑßÇÛÊÄÃîÑèÆÞÖæÏÊËèõõ ‹! þõÖÚÐëÐÙÒÐÍÛÒëÐâËÈÈâÍæËØÎäÛÇÍäõõ ‹ þöòìôóìïôñîòîòððóòïóôôíóõò€ôõöö ‹! þ÷ÔäÒîÂâÔÍÌãÒéÆ×ÊÎÊéÍáÂáÞÞÍÔ×ñ÷÷ ‹! þøØÚÏíÐÙÖÓÝèÕñÑßÉÔÓÞÖäÉØÎàÏØØïøø ‹! þùõìõôëïôóóõ÷öððôô÷õòöìòòõôòïôùù ‹! þùÖäÖðÄäÖÐÎïØéÇÝÐÎÏìÔíÊÝÜåËÅÊçùù ‹! þúÙÚÎíÏØÕÒ×ÞÌíÑâÊÏÅàÕæÎßÓÜÒÌÒâúú ‹ ÿû÷ð÷÷ïò÷ øøóóö÷úøõùðó÷õùûû ‹! ÿûØç×óÆçÙÐËçÜãËÞâäÖóÖíÍÛàëÝ×Ðåûû ‹! ÿüÚÝÒòÓÝÙÒÒßÓòÕäßâÕæØëÒÝÒâØÕÙåüü ‹ ÿýûøúú€ø€úöûûúøùúøúüøøúùø÷ùüýý ‹ ý ‹ ý ‹ þ ‹ ‚þ×·¿òþзÅûñ¾¾òþÝÈÆéþéÊÃàþ ‹ þ°xÁ²ë Ã·äw¬«{ø€—¯mܰy¾×þ ‹ €þùiÒþþîgæþþ³‡þþ¼ƒÊþ£”°‡âöþ ‹ €þõgÞþ«Ëkîþþ§þþ‰³„Êþ°²w·íþ ‹!þ‹ôwÍžðâÒkÞÜk〶átÇ®ñìþ!‹!þô¥•˜ë¡õÌ”•ÎþµÂþЙž¾þ!‹þ‹"þ"ääŠü÷ó€ðéåàW–ü€å‹æÞØÏÁ`•üæ×ÓÔßÄ×ÕÓÔßÏÛÅÐÓÐÇ×Å»À]”üæÇÓÇß·ÔÆÆ½ÚÈÙ¹ÎÄ»¼×¹½¶ÐZ“üçÊËÁÜÂÊÂǺÍÊÙÃÑÄ¿ÆË·À´àÎT’üèåÝäåÝàäâæåäåááååàáÛйãçÍT‘üèÈØÉâº×ÈÆÀÝÄÔ½ÒÅ»ÇØÅǽâ÷æÌUüéÌÎÅàÇÏÈÇÄÐÅßÅÖÆÁÌÔÇÇÀáý÷çÍTüêçáåçàãåäççèèääåæçåà×Äãþý÷çÏUŽ üêËØÈ伨ɯ½àÍݾÓĽÀ×ÄËǽ­¥ª³ÀÈW ýëÎÎÆâÈÑÊÈÁÕÆâÈÙÃÁÅÒÆÏ®³‚wsu|’AŒ ýìéãèéâåçææ€éææèçèèæß̾« œ™˜˜‘ƒ‹! ýíÌÚÉå¾ÚÊÊÃàÇØÂÔÅÂÆâÊÙ³¾°¸¢¡¡©³¬k‹! ýîÐÓÉåÉÓÌËÈ×ÌãÊÜÅÅÆÞÆÛ¾Å·Ä¶¶´ÃÎÊ ‹! ýïëæíìåéìéîíéìééíêëìèêããäßÝÞØÛàÝ ‹! ýïÍÜÍç¾ÛÌÌÅâÈßÁÕÈÆÌäÃâÀÙÆå¾½ÂÑêé ‹! ýðÑÖÌçÌÖÎϼ×ÔáÌÝÈÉÃÙÏÝÌ×½ãÉÈÎâïî ‹ ýñíèííæéìêïîïîëê€ì îìïéìðìééíðññ ‹! ýòÐáÍêÁÞÍÌÆâÐäÃÖÇÄÉçÈàÂÛÔãÑØÐêòò ‹! þóÔÙÏêÏØÑÑËäÆéÎßÉËÏÜÐâÊÕÉãÍßÖçòò ‹! þôðêððèìïííððñííðïðñóòëðóííóíñôô ‹! þõÒãÏíÂáÏÌÇßÑßÇÛÊÄÃîÑèÆÞÖæÏÊËèõõ ‹! þõÖÚÐëÐÙÒÐÍÛÒëÐâËÈÈâÍæËØÎäÛÇÍäõõ ‹ þöòìôóìïôñîòîòððóòïóôôíóõò€ôõöö ‹! þ÷ÔäÒîÂâÔÍÌãÒéÆ×ÊÎÊéÍáÂáÞÞÍÔ×ñ÷÷ ‹! þøØÚÏíÐÙÖÓÝèÕñÑßÉÔÓÞÖäÉØÎàÏØØïøø ‹! þùõìõôëïôóóõ÷öððôô÷õòöìòòõôòïôùù ‹! þùÖäÖðÄäÖÐÎïØéÇÝÐÎÏìÔíÊÝÜåËÅÊçùù ‹! þúÙÚÎíÏØÕÒ×ÞÌíÑâÊÏÅàÕæÎßÓÜÒÌÒâúú ‹ ÿû÷ð÷÷ïò÷ øøóóö÷úøõùðó÷õùûû ‹! ÿûØç×óÆçÙÐËçÜãËÞâäÖóÖíÍÛàëÝ×Ðåûû ‹! ÿüÚÝÒòÓÝÙÒÒßÓòÕäßâÕæØëÒÝÒâØÕÙåüü ‹ ÿýûøúú€ø€úöûûúøùúøúüøøúùø÷ùüýý ‹ ý ‹ ý ‹ þ ‹ ‚þ×·¿òþзÅûñ¾¾òþÝÈÆéþéÊÃàþ ‹ þ°xÁ²ë Ã·äw¬«{ø€—¯mܰy¾×þ ‹ €þùiÒþþîgæþþ³‡þþ¼ƒÊþ£”°‡âöþ ‹ €þõgÞþ«Ëkîþþ§þþ‰³„Êþ°²w·íþ ‹!þ‹ôwÍžðâÒkÞÜk〶átÇ®ñìþ!‹!þô¥•˜ë¡õÌ”•ÎþµÂþЙž¾þ!‹þ‹"þ"ääŠü÷ó€ðéåàW–ü€å‹æÞØÏÁ`•üæ×ÓÔßÄ×ÕÓÔßÏÛÅÐÓÐÇ×Å»À]”üæÇÓÇß·ÔÆÆ½ÚÈÙ¹ÎÄ»¼×¹½¶ÐZ“üçÊËÁÜÂÊÂǺÍÊÙÃÑÄ¿ÆË·À´àÎT’üèåÝäåÝàäâæåäåááååàáÛйãçÍT‘üèÈØÉâº×ÈÆÀÝÄÔ½ÒÅ»ÇØÅǽâ÷æÌUüéÌÎÅàÇÏÈÇÄÐÅßÅÖÆÁÌÔÇÇÀáý÷çÍTüêçáåçàãåäççèèääåæçåà×Äãþý÷çÏUŽ üêËØÈ伨ɯ½àÍݾÓĽÀ×ÄËǽ­¥ª³ÀÈW ýëÎÎÆâÈÑÊÈÁÕÆâÈÙÃÁÅÒÆÏ®³‚wsu|’AŒ ýìéãèéâåçææ€éææèçèèæß̾« œ™˜˜‘ƒ‹! ýíÌÚÉå¾ÚÊÊÃàÇØÂÔÅÂÆâÊÙ³¾°¸¢¡¡©³¬k‹! ýîÐÓÉåÉÓÌËÈ×ÌãÊÜÅÅÆÞÆÛ¾Å·Ä¶¶´ÃÎÊ ‹! ýïëæíìåéìéîíéìééíêëìèêããäßÝÞØÛàÝ ‹! ýïÍÜÍç¾ÛÌÌÅâÈßÁÕÈÆÌäÃâÀÙÆå¾½ÂÑêé ‹! ýðÑÖÌçÌÖÎϼ×ÔáÌÝÈÉÃÙÏÝÌ×½ãÉÈÎâïî ‹ ýñíèííæéìêïîïîëê€ì îìïéìðìééíðññ ‹! ýòÐáÍêÁÞÍÌÆâÐäÃÖÇÄÉçÈàÂÛÔãÑØÐêòò ‹! þóÔÙÏêÏØÑÑËäÆéÎßÉËÏÜÐâÊÕÉãÍßÖçòò ‹! þôðêððèìïííððñííðïðñóòëðóííóíñôô ‹! þõÒãÏíÂáÏÌÇßÑßÇÛÊÄÃîÑèÆÞÖæÏÊËèõõ ‹! þõÖÚÐëÐÙÒÐÍÛÒëÐâËÈÈâÍæËØÎäÛÇÍäõõ ‹ þöòìôóìïôñîòîòððóòïóôôíóõò€ôõöö ‹! þ÷ÔäÒîÂâÔÍÌãÒéÆ×ÊÎÊéÍáÂáÞÞÍÔ×ñ÷÷ ‹! þøØÚÏíÐÙÖÓÝèÕñÑßÉÔÓÞÖäÉØÎàÏØØïøø ‹! þùõìõôëïôóóõ÷öððôô÷õòöìòòõôòïôùù ‹! þùÖäÖðÄäÖÐÎïØéÇÝÐÎÏìÔíÊÝÜåËÅÊçùù ‹! þúÙÚÎíÏØÕÒ×ÞÌíÑâÊÏÅàÕæÎßÓÜÒÌÒâúú ‹ ÿû÷ð÷÷ïò÷ øøóóö÷úøõùðó÷õùûû ‹! ÿûØç×óÆçÙÐËçÜãËÞâäÖóÖíÍÛàëÝ×Ðåûû ‹! ÿüÚÝÒòÓÝÙÒÒßÓòÕäßâÕæØëÒÝÒâØÕÙåüü ‹ ÿýûøúú€ø€úöûûúøùúøúüøøúùø÷ùüýý ‹ ý ‹ ý ‹ þ ‹ ‚þ×·¿òþзÅûñ¾¾òþÝÈÆéþéÊÃàþ ‹ þ°xÁ²ë Ã·äw¬«{ø€—¯mܰy¾×þ ‹ €þùiÒþþîgæþþ³‡þþ¼ƒÊþ£”°‡âöþ ‹ €þõgÞþ«Ëkîþþ§þþ‰³„Êþ°²w·íþ ‹!þ‹ôwÍžðâÒkÞÜk〶átÇ®ñìþ!‹!þô¥•˜ë¡õÌ”•ÎþµÂþЙž¾þ!‹þ‹"þ"äil32!?2ìë†ìBŒìÊÆÏÈÉÇÊËÈÄÇÂзŸ9‹íþÈÇÀ¾½ÆË¾¼Æ¯¼Á?ŠîÖÑÖÑÑÒÒÕÒÏÑÐÓŶ÷À?‰îÅÀÊË¿ÃÅÌÅÀÄ̼´ÿ÷ÀCˆï×ÓØÓÓÔÕÚÔÑÓÓ×É·ÿÿøÀ?‡ðÈÃÍÍÅÀÁÈÎÆÀ½Ç½¤ˆux›B†ñÛ×ÜØØÙ×ÜØÖØØÝÓ»£›––”k…òËÅÐÏÇÄÉÊÒÊÄÄÐǼ°²¨­À©… óÞÙÞÚÙÛÝÝÜ×ÚÜÞÛÓ×ÑËÍÜᆠôÎÈÔÔËÈÆÓ×ÎÈÇÔÏÌÊÓ¿Ïçò† õâÜâÜÜÞÞäÞÚÜÜáßÛâÝØáìö† öÒÌ××ÎÊÍÓØÎÈÌÔÏÎËÔÑÙî÷† ÷çãè€ãâçãáãâéçáçãâæðø† øÔÍÚÙÑÌÍÓÜÒËÇ×ÔÒÎÛÇÓñø† ùèãé€ãäååááãèæáçåâéóù† úØÒÞÞÕÐÚÛàÕÊÒØÙÔÐÕÎÞõú† ûíéíèèééðëæèìííæéìäé÷û† ûÚÔàß×ÒØÚâØÓÑàÚÖÛÙÌÖøü† üðëñììëëñëêìïòîèìïëìúý† ýÚÓààØÑÐÞåÛØØçÛÖàÛÖÛûý† þûùúùøúû÷üûúúùü€úøûýþ† ’þÿ† ÿó÷ÿ÷óÿ÷÷ÿþøþÿúú€ÿ† €ÿ·©ÌÏ¡Àͤ¢Ù¡¬¬ÒÕ€ÿ† ÿÿöÿúèÿ–âà–Ÿÿ™ª›ë€ÿ† ÿÿþÙ˜›Âò¡ÄÁ§šÞ“¸£é€ÿ† €ÿÝ®¿ð±½ë··ôÁ¶Ûé´Î€ÿ†"“ÿÂ?2ìë†ìBŒìÊÆÏÈÉÇÊËÈÄÇÂзŸ9‹íþÈÇÀ¾½ÆË¾¼Æ¯¼Á?ŠîÖÑÖÑÑÒÒÕÒÏÑÐÓŶ÷À?‰îÅÀÊË¿ÃÅÌÅÀÄ̼´ÿ÷ÀCˆï×ÓØÓÓÔÕÚÔÑÓÓ×É·ÿÿøÀ?‡ðÈÃÍÍÅÀÁÈÎÆÀ½Ç½¤ˆux›B†ñÛ×ÜØØÙ×ÜØÖØØÝÓ»£›––”k…òËÅÐÏÇÄÉÊÒÊÄÄÐǼ°²¨­À©… óÞÙÞÚÙÛÝÝÜ×ÚÜÞÛÓ×ÑËÍÜᆠôÎÈÔÔËÈÆÓ×ÎÈÇÔÏÌÊÓ¿Ïçò† õâÜâÜÜÞÞäÞÚÜÜáßÛâÝØáìö† öÒÌ××ÎÊÍÓØÎÈÌÔÏÎËÔÑÙî÷† ÷çãè€ãâçãáãâéçáçãâæðø† øÔÍÚÙÑÌÍÓÜÒËÇ×ÔÒÎÛÇÓñø† ùèãé€ãäååááãèæáçåâéóù† úØÒÞÞÕÐÚÛàÕÊÒØÙÔÐÕÎÞõú† ûíéíèèééðëæèìííæéìäé÷û† ûÚÔàß×ÒØÚâØÓÑàÚÖÛÙÌÖøü† üðëñììëëñëêìïòîèìïëìúý† ýÚÓààØÑÐÞåÛØØçÛÖàÛÖÛûý† þûùúùøúû÷üûúúùü€úøûýþ† ’þÿ† ÿó÷ÿ÷óÿ÷÷ÿþøþÿúú€ÿ† €ÿ·©ÌÏ¡Àͤ¢Ù¡¬¬ÒÕ€ÿ† ÿÿöÿúèÿ–âà–Ÿÿ™ª›ë€ÿ† ÿÿþÙ˜›Âò¡ÄÁ§šÞ“¸£é€ÿ† €ÿÝ®¿ð±½ë··ôÁ¶Ûé´Î€ÿ†"“ÿÂ?2ìë†ìBŒìÊÆÏÈÉÇÊËÈÄÇÂзŸ9‹íþÈÇÀ¾½ÆË¾¼Æ¯¼Á?ŠîÖÑÖÑÑÒÒÕÒÏÑÐÓŶ÷À?‰îÅÀÊË¿ÃÅÌÅÀÄ̼´ÿ÷ÀCˆï×ÓØÓÓÔÕÚÔÑÓÓ×É·ÿÿøÀ?‡ðÈÃÍÍÅÀÁÈÎÆÀ½Ç½¤ˆux›B†ñÛ×ÜØØÙ×ÜØÖØØÝÓ»£›––”k…òËÅÐÏÇÄÉÊÒÊÄÄÐǼ°²¨­À©… óÞÙÞÚÙÛÝÝÜ×ÚÜÞÛÓ×ÑËÍÜᆠôÎÈÔÔËÈÆÓ×ÎÈÇÔÏÌÊÓ¿Ïçò† õâÜâÜÜÞÞäÞÚÜÜáßÛâÝØáìö† öÒÌ××ÎÊÍÓØÎÈÌÔÏÎËÔÑÙî÷† ÷çãè€ãâçãáãâéçáçãâæðø† øÔÍÚÙÑÌÍÓÜÒËÇ×ÔÒÎÛÇÓñø† ùèãé€ãäååááãèæáçåâéóù† úØÒÞÞÕÐÚÛàÕÊÒØÙÔÐÕÎÞõú† ûíéíèèééðëæèìííæéìäé÷û† ûÚÔàß×ÒØÚâØÓÑàÚÖÛÙÌÖøü† üðëñììëëñëêìïòîèìïëìúý† ýÚÓààØÑÐÞåÛØØçÛÖàÛÖÛûý† þûùúùøúû÷üûúúùü€úøûýþ† ’þÿ† ÿó÷ÿ÷óÿ÷÷ÿþøþÿúú€ÿ† €ÿ·©ÌÏ¡Àͤ¢Ù¡¬¬ÒÕ€ÿ† ÿÿöÿúèÿ–âà–Ÿÿ™ª›ë€ÿ† ÿÿþÙ˜›Âò¡ÄÁ§šÞ“¸£é€ÿ† €ÿÝ®¿ð±½ë··ôÁ¶Ûé´Î€ÿ†"“ÿÂis32-…†åàÜâáØÕq…äÌÈÌÍÉÏÿ…„ åÏÉÏÏÊÄÿÿ—ƒ äÑÌÑÒÍÃüÿÿ+‚ åÖÑÖ×ÑÇ‘¸‚ åÙÓÚÚÕÓÅÄ݃ åÜÖÚÝÖßÚÙムæßÚááÚßÞÚçƒ çãÞåãÞåáÝçƒ æãÝâåäåàãéƒ÷…üûƒ ÷ÚåÚÜÜÓÞÚþƒ 躳׻²¸¥¿ÿƒ úÎË×ÓÒÌÔÑý…†åàÜâáØÕq…äÌÈÌÍÉÏÿ…„ åÏÉÏÏÊÄÿÿ—ƒ äÑÌÑÒÍÃüÿÿ+‚ åÖÑÖ×ÑÇ‘¸‚ åÙÓÚÚÕÓÅÄ݃ åÜÖÚÝÖßÚÙムæßÚááÚßÞÚçƒ çãÞåãÞåáÝçƒ æãÝâåäåàãéƒ÷…üûƒ ÷ÚåÚÜÜÓÞÚþƒ 躳׻²¸¥¿ÿƒ úÎË×ÓÒÌÔÑý…†åàÜâáØÕq…äÌÈÌÍÉÏÿ…„ åÏÉÏÏÊÄÿÿ—ƒ äÑÌÑÒÍÃüÿÿ+‚ åÖÑÖ×ÑÇ‘¸‚ åÙÓÚÚÕÓÅÄ݃ åÜÖÚÝÖßÚÙムæßÚááÚßÞÚçƒ çãÞåãÞåáÝçƒ æãÝâåäåàãéƒ÷…üûƒ ÷ÚåÚÜÜÓÞÚþƒ 躳׻²¸¥¿ÿƒ úÎË×ÓÒÌÔÑýt8mk@!"$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$#"ŒóóôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôóóðË@ œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú©$ŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ4£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ:¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä:#¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä:%©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿã:&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿã9&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ7&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá6&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà4&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ2&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ2&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ1&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ0&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ/&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ/&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ.&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ.&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ-&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ-&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ,&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ,&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ*&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×*&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×*&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×*&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍ &ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ &ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú] &ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍ" &ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©!&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª#&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª%&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&%©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©%"©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©"¢üüüüýüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüýüüüü¢!Hjt|€ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ€|tjH!$.:BGIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIGB:.$h8mk (_accccccccccc_`bcccccoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿu tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ‚ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþƒ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ~ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý~ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý} tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý| tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý} tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý} tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýq tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøDtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿo3y‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚~yy3l8mk(_cccccccccccc`oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞItÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóXtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýYtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýXtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýWtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýXtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöUtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá$tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúitÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿotÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿj3y‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚y4s8mk€€€€€€‚€ÿÿÿÿÿúÿ¤€ÿÿÿÿÿÿÿÿ®€ÿÿÿÿÿÿÿÿÿ¶€ÿÿÿÿÿÿÿÿÿÿŒ€ÿÿÿÿÿÿÿÿÿú‡€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€Slic3r-1.3.0/var/gcode.ico000077500000000000000000003541221327442435500152420ustar00rootroot00000000000000 äRf€€ (JS@@ (Br[00 ¨%š  ¨Bà hêÓ‰PNG  IHDR\r¨fR«IDATxÚí}˜œÕuöÙ^´«²ªH«J`èK „Z Ät‰î`ǰcþ?ñodž„?q‰q!Ïçwâ'!®±1ÅÆtFB½÷UY­´E»«íý¿ï¹sfï~úfvÊýfgv盙¹_»ç½§Ÿ,räÈш¥¬¡>GŽ 9päh“GŽF09päh“GŽF09päh“GŽF09päh“GŽF09päh“GŽF09pähS:@–±eçšÎçì(:õÒÉϯGm}¡×}ÆkG) tf¦\µå„öÙÆ>ÏÙÑàÔçÙzB[¯gs`Jgf*T[¾Ú Œ-;´¹‰‘¹„g‡y×MýÐz/ûn îyDé £ÕV¤¶RꟄœ¡>1GI‘0=[˜¾=ôÏ6;ô=|§ƒJŽ,SºÄýµS[ÁŠ+î~òÉ'W´µµõ¤ñ9; Qvvv´?Ð÷ÛÛÛéðáÃ=;vìh|á…^W¯ßRŸo!Íð ’Ë”®Ì”§¶Q¤ ç¯ÿú¯¿öÌ3Ï|z¨OÊQpÔ××G´oß¾¦wÞyçÀÓO?ýÅšššwI«~¡M@À©–(#à¯þꯞúö·¿½²³³SŸt–Ó¶5NºËÖ±Á”ØäµPOOÏ€ÏÍ ÔÛÛÞã3Ù{·îîn Ǿ¸¸˜ÆO………tìØ1zê©§þëG?úÑSj¨zÒŒ FC(#àsŸûÜSßùÎwVb˜Ñ÷‚RÄhCÅЩ>®ÉØÞ÷‘@Àa~¿ï óc¸·¶¶RKK ¿>õÔSiêÔ©ôæ›oî¿ë®»>[YYùi•@ÔhØ_Ô0_Ù‡@²Ê{AV|ïûH €¿á¹bßÕÕE uuu4yòdš7o?~œ.\øÀ¶mÛþ“´¡Ðô8J‚†% ¸@'X¡h+¿ßg^ˆ Q°aõÇs9r„¯ïºë®£††Z´hÑC›7oþwÒÞ ± 8H‚2 °B`â$2é$Oñ‚€ßf‚€ióã9·µµñvèÐ!¶ ,_¾œêëëiÙ²e¹fÍšQC“öˆ:à(1¾àa¬¤ÌÏ„±Íïxmò½H’€±‡{ÐÜÜL{öì¡ùóç³:aÉ’%ùÞ{ïýtŒˆ¸ w q0àâ‡1yL?àùy$æ—}$/‚Øðw0:†AØ @ ˜6m~Í5×<òþûïÆR ‘S⤠n„Sâ¢H’€× àg$E1ÂF‡-àĉTQQÁ.›nº‰ÓÔÔD7ß|ó#¯¿þ:@` õ«â ~7e˜‚Aª@ÀÏè' ø©b 4=ª­­¥ššºãŽ;8N //6ÞeË–=¸fÍšÿGz¾À0èÔ8(#@†¤úXA3QðÆ ˜Ÿ‹!P\0žwÞyt饗²‰*µ×^ûà{ï½÷cÒ d]¡ÍÅ Ä@ á“Oó WiÀæ1#Ù"ùÿå½×# ¯Å(f‡ðèÑ£üÙ}÷ÝÇ`0fÌ*++cƒá•W^yßêÕ«_ G".BƒPF@ø" ùq# 2éµH`nTH0B á„ hܸql3¸üòËW®]»ög¤ƒ…Dp.Â(4, |1ÃR},Ç,lx00c$(H ÕÕÕ UUU0þQII ²y€$€ß^rÉ%÷*ø)é$"焆ð Õ:“Œ…^,> ’j @lXý+++iéÒ¥ì„gÁœœØ`ô.Y²ä>øà'¤ƒ…Nˆ@Ã\œ3É1#YýA`nŒ+«¼ù I@ €Uÿì³Ï¦ ÐøwÔ `ÃgW\qŽ þƒ´‹°œwÀ—2 0!Ò=Ђ¦h 0Xœ€H|H’„ *Œ·ß~;jðw`0Äyåææ²$»€’º–/_þÀÛo¿ ïæ@À©qÀ=Œl™¦J ï#©fH°i£¯ZµŠ%¾ƒï ­­­]×]wÝo½õˆ @€qÐ ш€ðÅ;i ðcF ò~æÓˆ|ñH† < Ht!@†Á‰'â·íŸøÄ'îï½÷à@™9D Ì:ƒ# F4„o‚“=æ`ž€hy¦ €Ïï¾ûîpê0¾#ê‚H° Ài@ý­óšk®yðwÞù9iïìR]hD— w`ÞŒa©>Ö`ÇŒ¦ø€Hxæ¬þ€Ùï¼óN^éÅPˆÏL¤HJh]¼xñƒ«W¯~™tœ€H#:8# |òNðá¸b§ƒ;1’!Ðû™6q £àý÷ßOEEE$$ßÃü"¼‰‹pÒ¤I³ëÒK/]µvíÚß‘^ñ;B›Ôqä ÒqÈñlÀ½÷ÞK¥¥¥ô¯J €q!  Ä˜ú[›6nÜø iIÞGdØpFÀ€ Ép0Ž€é˜~*@$# ¨Ðÿý@@B6Œ ¯~'_@ ±±±éšk®yô£>ú5éòb­ÔŸN<¢hØ_Ì0`Ôá,È1£ÅÈ{31ÿðÀ/\@² ¥ˆHÂüø®|dž=  >o»øâ‹ïÙºu다##.XhXÀI7 ˜u8B´ä!oF V€)Œ=:ü;3xHÒ‰ðwØÆŽË%ǨԯX±â/ß}÷]ä`°,”Q€ÉŽEA‡ x=&@@.>»ë®»8"ÐÇ´ˆ4 R„ƒxà"œ2e ÒŒ—-[vÏêÕ«_"'€=`D€Àˆ€ð; H«ã€üR‰…‘aä@· ˜‘€ðxÇ0m¦›P*,tÊ)§ Ï vùòå÷øá‡0 BÜ–†±J0â |áÒê8~ùfU /¬\¹’Ë…{)’: [G{u÷t©‰¯ÀBiût!RÇ8¾dÉ€\„¨,dV¶ÁB#øâ ­Žã –Àñ@ÿUüä5 2ów«­€µ S‡ «ï Æ”Ž¡™3g"ÈèðÒ¥K?³uëÖ?’®,$¹Pðõa×xD€ï ÉбSyŒ cŠò`^Äü›>DãdI@m° (è€Q° .ÃNêíËbi`ÌØ1tÊ”iønÃE]´jÓ¦Mïñ Kï ÉбSyŒ  <ôÐClÑ<þã(èé†a’@gø}oˆÔ¾'‹F—–ÒÔòi4Ž(Iàs[¶l$€ •8aC á“ÏМ€L?Ç# ØÀüq@ˆÂêŒÝ=,þC`àϺùoò½Ò’šV^Щ[¶lÙ#~øá[¤#›©† e4„/ÂÁ#ˆã˜F@„‹€Š@`ÜX@Æòödû^‡]‡Pz© 0j•OŸŽcV_~ùå÷íÙ³çmÒ†A€€¤ U`XÀI•¡b¼„~Š(zðÁñP_oŸ–˜áµøßÝÓÍ’ :•tÐËjQIi1MŸ>“ŽTVVÝy×]_xóÍ7IzN«`¡a á‹ËPfé@à­€Œ?Q `LHqŽ’(¤ÿw‡bôêß² tsÝIm?(UB3•$P___·dÉ’{ׯ_ÿ*é`¡aSh4£.¡DŒ€NEÚcÄ{œhpðàA® `ÐqÔ?¶ñcõïU¼Ú§€Ý]ZìïE"–”zÐÛ¥ŽÙ£Õ€î/ Õ…òhΜ9tôØÑ†®¿áÁ>úèWÔ1) £Õá‹u@0¤ÇˆõX‘qð÷‡~8ª У¹¹µ‰:Ú:”hßÅŒßÞÒBˆ`ñ¿‡rÕï{Q=HíaOÈÍÍ¡lõ>;[ís²Õyf³„Ÿ—OsNƒx„ÖeË–=ðþû…2ºш€ž`0R€À0“„>$!ÔW€ã!lŸ$5ã©åpYÌäÙœ„&£…4ªxå(É_)Èϣ¢b*))¥Â‚"†ÂQE4£¼œk .^¼xUH@*±YP$ã@`ÄÀ€›`ŠñSu ïqü"¥ ˜qØ`”ù †–±°ªË{Ùä{fwbq9ÊX……ìÀ( )-EåÓÊiÊ)§Ðø²2ü¼gÞ¼y·nܸåÅÛ†Ì9êcxãĤ48…Jí?i ".A¼Æ&Ì{Ô ÀwLס_AoŽu`zùtÎ œ=g6uæY>zà 7<¸víÚ7pXØš†0¦ú4+ú˪.*@¤ó1ëzÇ•RŽãíOè•ä<àm€M݉o¼ñFúÊW¾òß_ûÚ×þ‚tŒ@ eˆG £7O:ÆÉ–i«ëp›Çñv 2? ãËûH¯AÞž„¦Ø/ß÷ÚLiÀTIDÀ‚8í´ÓPc°íãÿøŸoß¾ýCÒÁŒP†5„/2Í™5ÚX~«Wºœw*ŽãµÔûÃtíùU6™ß¯‘0ºyósSI@ê  ‰×‹/&5GÿØc}ŠtPe€ApD@øbÓP„ŠÒÜ©<¶MiÀÜ{EühßõkAò–!÷ûž & ˜U‡0þ|Ú³gÏ–óÏ?…ú9º–€œ´v Ž(8é⇆’é“=÷tß$¯ `¾÷kF"€à'uøy @R¸H¥ ÔÝ~ûíý×ý×›¤W€€€hØ@:3}*Ïs(Àü,’ ¯½á0U1NÏ;—žzê©xæ™gþŽ´ÐDi^@$]geJ |’/ÒïSÍôàpYì+**Âå´ÑU'¡¸&Šb¢köçœsïc¥D347nÜH¯½ö5Š–.]ÊÆ4ÛÍ ï#õ)Œ^• ÷ä™gž ;À/{ì±ÛH77 ÓúEY$æÍ@tÀèÛ¶m£>úˆ_Oœ8ûßÍœYNååÓ¨°°€Æ«¶1¡ÉÝKý‹¢0m–š¼íTYy”£íª¤;ö(Шã Qo_|1ƒƒIÉôhTº23þöíÛèöÛo¥––&Ú¹³‚yä‘ðïƒp+Ê~0@$©$¢¿7r¶€Ù³gÓ /¼@Ÿþô§Ñ±D$€vÛÏÝ&e$ø^H€–þtò"€ÙeÃÏ{&Í›w>M›6™ÝbX‰::Ú8z›~¯;èêÕª7´bcBg…Bh³)??Ÿ3ì°U–õƒ(fÝOëÖmRRÂ(Z´h]tÑEÜj;‘kX½ýöÛÌø7ß|#-Xp‘:¯VjlnÒ >lñ”üŒ¢ ER@²ò›ß3m¸¿3fÌ8—ôÊ_GÚ#¶AAà •:}¬þûhcnÚ´‰E僨Õ÷ãjż„JJFq<ú‰HŽiPû¦pz,@3~{ØE¥'®^íEìÆ×‡–yÉžÓ…1Ps¿¸¸ˆA`ìØ1TVUb¼Ú—©ã´ÒÖ­»lfU+6èò ÄíC%Ù¾}»’PÎb†?ÿü©¿«soâ”Þêêc }}]jÌbª¨8FP›U›Ž/qý6)VIÀÏ%è•Ì÷¸ßååå—‘füºÐ–¶ž€ŒL,>é81®Ã÷£Yùc Ú‰vœ>ø€þð‡?°˜¾lÙ5tÎ9g3c76ꌸãÇë˜ùëëuN|ss+¯úmmšñû™žx -RS(aFdø¯¤€BçN¡÷Ùü™ƒ<*,Ìg0@3NôÓ?¾ŒaôèqêïùŠ™ë¨ªê(¿Çw§O/§ÓN;•Ëpãs0>@ª®î8öPMòó³”JM¯¼²–üqÎØ˜¹ý©P¢Å ˜L©Ù´iÓîºë®%ÝÝÝÕÔikö¾Ð{°¿ÇÊø±ßd|èÈXU[ZN(†¯g¦Á[CC#¯üššZ¨½½-ËÞbxbFÇ–——Ã{èùx­Á k€Ž­'2ñï±áµ¶hPÐñö¹ ZM¥À ”Á €Ê9ø «vNŽfÚ®.. à…ó„„ÒØx‚_ãÜQŒ³  ›&L(¥Ù³O¡ßþöOJ XÅ™vH´Aœ½W °~ꀟžÐh4$ Wø¸Úà~ %铈F œtáqèøAGbeüÅ/~A7n ¼OéÕ3“œà•¾¦¦6Äü !æiåÄ7³Ž¯cä{yÅckFÇ–«V×µiÆíëC}»>ÞÀTMMíü›Ñ£u=ü+=RǽC¯Õ[w·¥ÒN®ú^>‹êÚhX̆C0,$Œ ÑY|]¡âZhoG£Võ¥»:Ô89 å啪S«@o.]}õÕlwÀØP‚x6B±å½7“Ðü>žŒ£!¸†´zM}èuZÚF< ‡ŸÈ¸ñøÅ_|ñEúõ¯MË—_K×]·œ¿®®V‰ÕµáU¿Ÿñ›C9ñ-!«¾õQäFVû‚‚\fd0=4¶¶l¸ƒh ¦Å¹‰[ÇI .l99YŠ)G«•½P}?OT\]X³³³‡Á¼UÞƒüüfþüü<ŸŸc$ÑôðfVÙdõç;n\‰Z=Ç©1ŠéСÜúPRRÂãÛ~F&yÕ?ß¿÷oæûAj€@ZÚF$ ÆüAMBQ‰W^y…Ž9L÷Ý·’Eëúú::v¬Z1 ¯øóõjßÒõ¥F73¿ÖÓ³˜ñ±ÒæñÊÜÚÚ£VYˆ¤SiÊ”)<1Á RK6³˜¦à‚c!ß™n8§©SËx•†q±¥«x'Äüîî>0¼VrYúЙzZÍ0kïI™/¹œ;¤I“ÆÐŒSè76Ñ—¾ô%Žg€ˆE Hæ™Å*øý]Þ{*˜^T¼NËz# bYIR‘å÷ú믳®¿hÑtÕU‹”N_¯DýjÅü5j_7`Å×®½fÖ£¥Ë-\yÙÙ}¼ÊƒŠŠò8è§« yí9ìŽBPŠ^•óÃÄiÖÄí'þv7²M˜FGXówïÞ¥T“)4~| ‹ðp ¶µu2tvö²š¾Bœf©.·Þ6 Ò$ H3fL¢;*`]xá…,±@ ˆÖ,Z€x(ZÄ _@ŸÐ2$€4Ж!Á ']D’–ûDÆKäx Lèú<°Š­é("ƒR×GÖ„Œ{Í¡òW-áúw—¥D~ð,t}ˆÏÅÅŠáòÕﺕþ<‹£÷°Ëò) 4ö (~!ŒŠÕ@°aÃÅ ;è´Ó¦Ñ˜1…ê|O¨ã¶ªóÕ*@@ŒˆR¢ËqOêÊ=Ä×PV5 ,ôèKèÖ[oe£xlÜûÁþæ]í#©~Æ@v)._LŒ „q°ïaÒÿÇü¯ö«VÝÍú/š]9REµµÇÃî<ÑñÍúw²òCóCƸ?jT¾š€ùj_Æ«>ÜPÚ_ÌŒ#‘}`$så÷ŠÖÞ8w‘¤ø€èÈ‘#(¥€ëqÆ4>ÇúzUø::´¾/ñÞ:|~u¸–1cŠ•º2Ž&N¯$Ž£ôè£r̨©PËÌsôÛ{Å™ˆªÁìPB¾¨(â¼í¸€Xcß!òÒ-·ÜÌ¥­Áøðce…8-«¾¿Ä^V`èÊZì'¶ìƒa0Vww.Mž<>ö±1“ƒña8óc/Ì/"¹Y5×Ü@~¾m³ – PGþøÇ?* XGgŸ=KS¶¸'›Y€å_܈2Å"^ÃkQZZ¬˜ «k×ï^I§Ÿ~zDw`¢KW"ïûh6Ùã>ÁpéÀ% A¯ú±Ž'‰/çœs&GÄÕÖÖÐáÕJä?¦˜ÿDˆÙ[C[KxëäëÕ¿§°¾?jT¡ú{.MŸ>‹Î=÷\f’P# ì± dÕ÷–ËŽ…¢IR¥wïÞ½æ‹pÞ3&°i†BØ ô |&æøð`À0~|©’b&(€lWÒÅytÕUW1SáZsÆKƒ©Þ×fýÀH’TvÈÀ,|Ò1êx‰öl€ö\yå4þùJä?bþjµZ61Á—U_Z[Ùºº´ÁÁ=XeáÞ+))RŸç*†›Íi»Xí±J‚ù±ÉŠ)Ì©~4Š´ z›fˆ´òÛßþ–*+ÒyçÍa÷åñãl Ž@w²Ä! 1ãÆRj@_DZcí´råJ6 ÙÎ ˆå9F òû®çíÀ%É÷$ah2âø¿ûÝïÒc}V­ÔÓØíwèÐaf~1ô逘¶ðŠ*–~]~Z¯þ"rQQ>¯’½½T^®W~0?&VlÂü²êÇÊø±†/{“_8g<—W_}UI;;iîÜêý ˆ_€§×Óóž ãà-ܘpNž<ŽÝï½·ƒ¾øÅ/²a ÛÆ`„ñv°z&áþ;°Cq@¬ÌoË.àì#“bÿo~óZ´èr¥Çž¦˜ÿóv¯ù…§²ªq4༆æÀÅäHÆÝ—0 Æ8ÿöoÿÆ:+VÜÈbEÅAf~ˆý^æ—Í»ò{EèÅ}}4gÎlô湬ŒÑ˜ß&ÃûéU o½õG<.Z4_1ÿqVŽobà lpzÇ’°`¸‘wà]wÝ˵cqvý¶3 ½îA`²J2€8iPˆ$ÊÛ²àGñ#Ñÿ÷s\ÿ#<@GVÑþýTYYÅÖ~“ùEg6™_,ë:Æ¿—]~¢÷#Ë®¨h<-X°`ó‹X,±ò~×ãGWVC)“g€:´dÉÅœãpäHµÃfNNBb‘VÌN?Ùá°`d?ÞF§Ÿ~]yå•á¨ÀXÝñÔgˆ'+Ze! €Î@GÉ@BW.@*R{£Vº×_ÿ}éKs6˜ñó# ¶¿>_ÿfv•Õ_Gúåp”ßèÑ£3åÐE]Â9òºÇø°Þ¯“orâ–T¥XÆI ã&¼6¬Sv­ªª @Ç HB±À(v¬úÕÕtÏ=÷0èÅZ$Ä<Ï ž·ß} @ÍÓ?>öØcÿ‡t«p RÌê/Á½÷·û·ôå/?©˜²X1ÿ~Öûkkëî>Yù±‰ÝËüx Ÿ?²ûDô/(@–Ü î:#Ì Œ!¹òñJ*‰P¼ãšêîÁÿüÏÿ(}~]zé\G”„TË.Â~ï@o¸£oA‚µ`æÌÉôþû»è‰'žˆêŒeµ²´˜\³{Ñh>üX,úAŠ ÷ŸrÊ$ºì²‹ãWо}ØâL>ñó ÓKh¯$à \ý{8ÃO¯þJÄGÖ]-]z-§™ ó{E¡ õüxÉ”¿úÕ¯”HLéóSHT pœAÙ„ýÞ}ý¥¥Eawàþýµì¼à‚ v %êõªòÚk t`"JÑ‚[R-þ‹ÞÿÐC÷ÑáÇiÏž½a£Ÿ0¿èú'[ú€wõ/,E'NçÊ»Xý±Š5\VÁ WµdI2ÿ~ˆ ÀýêînQ€9–A ºº!œV u@‚ê\VVJS§ÂX ®³”>õ©O pÚómªNN°K ‘q‘ÄädH"ýþ韞Q“¸‘vïÞË:.Šuj£_{XôïîëÀüýÆ¿žP¸ïÀÕÙ²Oœ´úK°OPE2miJh<#ÙøñEê9v+8D55 \eX§ë"'°@ @vàäÉÕ½­á¦!°D«ï=±5œ`Ÿ¢@2)º¶ú7¿ùMŽô›={¦û÷ª­BMæúPiî~‹¿0¾¹ò› WÿžP<|‹¿:¾2]qÅÌøXýeòÇ/­>ˆ$€{²uëV®£ £8Buua@¥#íÅj²7o>ÄÙÑŠ…F£ …ìSľɨñÔê‹FH~Ù°a==öØ£\³«¿Nð91ÀèçûÍ[õ‡I Âtwç)Ñÿ2n’æÇ7˜dÅÙn¹m›"UÝ•ˆAxM~÷»WéÚkPe%¤«8¨¥¥cp}¸eepNPàÐMsçÎgw`¬ÅB½dÃMÍØèÀ.ù&O<Ìï}P6ŠJ hæßüÍßЗ¿ü'ììÞ½›­þ˜Àâï7»ñ˜b¿7Ç¾ßø±7—ußqãJ€äÑõ×_Ϻ?ŠwŠå?ÙÕ( …EùK/½ÄîÁK/=›**(õéX(•¸]ƒˆ‚ÔÞ€2nLÒܜјÈyÚ,&*ï!¡9°C €ß„´™%Ñ~K–\É¢?V4Æ@¨¯ìc2¸¬þf½=Sü×qðù\'/¯X­z§²Õ+?@ŒîŸ. @ûå/©Ô€*š1c¼ºû”4PË1ð €5 ¼|2íÚUÍî@¯!ÔÆyšVþHI^ƒ¹Ø¥„ æ7rXðù?ûì7ÔŠ_«&ånök‹è/«¿á'LïWp{¯ñ¯µ5‹®¹æZš:u*3?6Ñ{ãu¥K\€÷·¸â æät²Qp÷î ¦°@ йºHHCC§R®ã˜¨Cr?Rþ<Øu9°G1€ãåû×>ÿ‰J?¿€öìÙ¥&ì~.…e®þ&ó‹¸/)¯~ú?V:ˆÿ0þ¡ÛNww!-_¾<¼ú‹ÈO]¼td|“LÏÀ¾}ûè'?ù {îlΜ¬¨€:u‚¥ k"r*}ò“Ÿ<);P(Ö~ŒÉ\{4UÓ€=byØ6i¾Ï=÷]z景ÒÁƒiÇŽ]j WöñýeÅ÷«±§¥ƒV'DüGäßäɳ”^|)3¿×ø7¥;ã›dfÂ(øÊ+/«ë>‡½)UUÕ\ žÔ>œ8iÏc©¦¦3¢;Ж7™ëv`âV\TÀøCš;÷ µN;w{+xõG~¿)ú‹_ß\ùMñßÿ@ü/))ÿ²háÂÅ4kÖ,öÿKsŒhú®mæL%ˆ˜µ~þóŸs¸ð¬Y¸x ò(𛢢 ‚t´kW ÝsÏJöŽÄbM&. ‘ß᜾óïüñóŸÿüÿ!IQB”è_SSCßøÆ×yõ¯¨¨Pu'UV •öj=Éçï]ùM @Ä)÷k7ÄLòÆÆ>Z±bEX÷ÅâÉ`áøÏÿüOuj fsË2Ü+t:ÊÊÊQŸw¨ûÝN>ø·á6íÑÈ”ã­+I„*;°CqÅ$Ãø±¨aE˜.¶oß¡Vÿý¾«¿iøóö™÷êÿx-¡¿ÿ±zäæŽ¡¥K—†WÿH⦈ú±Œ'÷÷‰U?þñðª{ÔÂõêêZ””TÄA@hz‚Vg¸7‰Æ€lÚ Ì†!x^ìPL@²m bù=@GŸž}öëܾ Ë¿Äû›±þ¦¿ßÛNZ _ýî¿^.ú!Á?¹¹E4}úétñÅÓäÉ“Ãâ¿õ–.î<ÛãšÙƒï½÷÷@¿´ÛFÃqûá~À% É«­îF?x“y’u­:°O1ã¥D8 T¨v‹†ÐýwíÚrUµ Èôæ6W9¦Ÿþ/UPùï9tÉ%—ÓYgňõ?ž{`›’׌D—$\a{‹±fd¬þR!çhÖ0”÷湃Ø£¨Ê¤/ùËôÀ÷°¾¾mÛv:pà0wî•xÿÁVÿH€ñŠŠr¹Î?:ï;ÖJ2aý+Ÿ«+Jg{Ü'0¼•2é ¡´:“û" O‚ÆŽ-溅…ãiÉ’%õÿx)ìÑ<²É*‹Ílli!HÓ{çÀ.ùV„ho÷Áè ø‡¯q‘ÏmÛvÐáúÈ'DÓH–ó<¼1&Høï¸q%jb²e¿ ïBÇM•/{(ÆWïmÊémfÄ9&ët`€XV<_ͱÑôòwÞ¦{ï½]‰þÛhçNÿއ3þÌ*?fMóÜ"y@9! ‚n.1JÙ¯XÏ×&e‚ôì˜6š¢xÇ‚ÝÆ€J l¤z>ÿüótÖY§Ñ©§Î¤-[¶r­?³Þêóïe~yɈ Ñ£‹hüøÑT_ßIË—_ŽŒ·#®€ÔýÖÛ+Ð|íÀE€ _èÁdñÝ}¶nÝ®Äÿ£œõë¿©ûGÿM€|›®þ“Ë@h‚qøp3Ý}÷ÝqÓ¡2eL›Œïý›{”T:p²zóè_þåyzòÉ¿bñÇŽÝtìXWúfü3ÇŠä4=(x1nÜh%UdÓÍ7ßÖÿ%È%UñÿAŒ™nç˜hý‚X~ïÀ>š 0Ød@¡ ¢nZ°àb%þo¡]»ö³ï⤤ï¸Ñ@2ÇÅI.ííùì4=¦p¸3gcÚøm<ÕŽ@ìQ ¡À±>Ðo|ãtãËy•Þ¼y+UT ËOcØ÷o–úòÿåµ7@R€uý?Ý ·°°˜JJ&ÑÕW_Íqîfª«mJ7& b¼T2¾÷wì‘ÕH@P<õÎ;ï¤çŸÿgÚ¹sGÿUVVsæ_,¾óx~A@ø,?_×¾? @Ø—sÁËD<A\ÿPŒ—ì˜ÉÖô·qÞì‘HdRlß¾]©?§G¹O‰ÿ›Yÿ¯®®g÷Ÿ×÷Iü—÷b7 vö…jè&˜}}yT^~]~ùå ¶C€ÓQƒ+Yÿ½­ã;°GDÆBÐÿûú ÿ_H7nâ²_âþ‹Åúož‡7 P’€t ]ð²¥¥—.¹ä ný  M$ËÍÖ=È„1‡rÅt.ìQ\`sr~ë[ߢ+®¸X‰âchÓ¦ÍܽÕi ÿ›`ýð;¿(@¸‘€€ææºì²…tî¹ç² Pò܇ºèpbx?-ˆkq`† Ôã'žø,ÕÕÕ(`:t4œüãííIÿ—sò † P¡óïjhèVðq:ï¼óm€é úïøSF@“Àüà›ìþCüUU-½}£éÿò™ HÇÆÒÜð"Ö¿ãؤt/Hÿ½íóq`¢@P /Û¶m£_ýêôðë”ø¿Q½ßEµµºô—iüLÿ—Ï"@qq÷¾›2]rhåÊ• Òh0H·Õ9ˆñ’aü¡º?ìQRUc%ïC}÷Ýwiûö-t㟠 6ÐÎûÂ-¿üÄÿD@Gê2`“'¥}ûêiÕªU`¶‹ÔÑ8¨kê1‡Âoû|Ø£@ ÒÕÀ /ü{öìÑ @ˆÿGÿ—cx3¥ˆÔœ4iœ€ãtß}÷…@êß”(ÀáÀøBìQ 0ØÃÕ@N¥©S') `Gê.5í'õúóËY÷ËP µîŒŽ7{öÔÑý÷ß?2! p(#ö‚rã%Kì‘Uˆ'ø†–©UºWI[¸w=2;:Fÿ f”ϽíÀ%HÑoÑì…G˜@PlÀpZñÓ•ñ…Ø#+ï\ýR5ѺhÓ¦-ܲ€Xãÿ½Çö¤óPUÕF·ß~;—À¶™0œ?U~üdÉ€=J’}¨wÝu—R¾I[·nQ°M1g —‹×(ŸûJ#¥ÀÆŒ)á¾÷HN6(ÝÄF™ðtºžXÆÆós`‡† ¾÷½TÌ¿6oÞNGê`~µÿbÓ €îMMMÄíÀ¤@¼4`¨ü÷¶Æv`â[ðÜsÏÒ† ëjjÐú»ÅWüO°!€Z€cÇŽæ~€hy-6€x Ý%Ùʺ¶)HÆ÷À=Š l?\Àw¿û,­_¿NÀ6ª­md€)þÇâ”s‹$À(pâDÝrË-áL@i:¥³dB¨nPäÀ>Emj“̉‚º|ßýî?кuëhËH @˜99È ÙJiÚ´ñê8G¸ç½Y À Ã…Ù½¿·u]©döhÇw`¿Ic$€í@v¸ÀÔ©ãiëÖª0øIé¶2§ÀÛçàÀÑ&Œzˆ ú»Ù­&Ð6q–Ò)§”ѶmGéá‡`¤zÕ?xð 7ÝúñýÎÅ€= ›4 _°ýA5lß~”zè¡0 E9°Õ«WÓË/¿¤Ž]dõ¸CAÞkÅœY¶l9·]·­>zéÀY€xVŸ~øˆãjkØ Ì/j@¼`†çäd‡#O9e<zx[‚Û X¯ýïÿþï铟¼N;m&ut ð)Bž{Oú½¾÷Y¤¹÷>Óêä+ýûÝ—ûúzçÒËÑ–ùù¹ê¼úhÇŽ½ô‡?ü‰¾ð…/„{ &Úoq°ûìÀ% Ɉ›þžmÔ€0q<à­ Øùl\€d#½vÀÍ7/ç…•••ÔØØDííáñ„ñ‘Êœ••nÐÙߤ3›ÿ&``+aK˜½·W3ö@Píaêéɬ¿ï"ø[¯Ö×7«çYA>ú(ßWZÁfÓ–$÷ ¹ìÐ@¿`ý\€±€×Ð/”(¦/S+ÔQδ œ ÜtÓ2ÊËëU€¤‹  bw7Ô=®¬œØP¯P·èÖmºsss(™®Ær¦ ¥÷Ý|NÝÝ—Íî‘¶+ü=T\BÁ• Æò½Üµ«Žó-Pi ™–°±Ø’C @²Æ&ÀsÏ Jt:pA¨À8:r¤‰®¹f×L’5Ði¸VÝÛN®ƒXYyLIÈèf¦Ã ŒMV{0¾€@nn^øu¿TÍêöqžç¾é•^j)ô‡dw (³®ƒ²´”€ãbõG×%T\*,,¢ŠŠFŽñ@Ë5éºoɵh÷Û€}ŠlZ˜‘ ôgv5577„rj­€®ñ´„+ÕÔ´Ñ‚‹hþüùaÀŒlºó×_µZ»¹ÚáÃÕÜ ¶€®®^uµ¸Ý­hÆÇŠz2ħ˜«¾¨N"5I96l"þ‡~Åz¾–N(´GßÅ|®¹ˆ¾‹99y ÐZé¶Ûn \I¦êr¤â/ öÈZZZµä>ýôÓŠ®Q¿EéÕÄ©a}b¦l2´P`/`Ä5ëÔÖ¶qU`PÌo<×èG€Å‹/SÌ‘¥˜ÿ=ZÊ‚ì ®¿— ««7$†÷† …Y!ÆÏ ©ý:v¼àWCÁËøØké‚XšÒ[{WÀüµ@²U{{/UWwp¾…T]¶ÝyÙ€}J x®. ~A_»v#“kFY´C‡1Hdg÷Ò©§žÂ¯«kd0hmídЫtl`ÞCóþz™Ÿáv`…‡…F¾‚‚|u|ŒŸGÓ¦M ¯î¢‚ˆM÷ €û # YÅhSµr`¬@,zëÖ­ô›ßüÝqÇÍôÑGÑŽûx‚‘@ÞI×ÒPT4JMôBnÀ$§/@<׉pNÒ÷†Va~S±L‰þ‰7n +¯¼€AãÈNiáØ AñèÿrOýr'´Á¯/´òç² 5/¯@ý-ŸΜ9ÌÐ0Db/¯Å0 Àý„Ø/AVâ´ŒäÀù@sssLŒ‘èƒÅdþâ¿H_ýê´zõ;9¢n¼ ótiˆ¯Ð±cÇŽ¡êêv. À*† ;˜›Êfm=?Ý[‚Ÿü ›Ö¯_OkÖ¬VÀµX©JÙsÐØ¨AÆAaþXªûL| úK7%0AA!·SG|?V}08˜÷ ÞƒÉE Æ·dÞOÚù{AFT HK¨Ÿ› îW^^M™2“Î:ë,6–B¯ÇÀ=“•ßdts¾åA’×ìQÜ`˘óóŸÿ\­=tÚiåŠ1×Óþý•jRkW D;¶Ÿ+PJƒkª P©$€{Y¬7•¢ AÞëƒÂ0øÿøJ}¹II1Bù j•î…Ÿ ‘V¯"]Dµ€½&êñÓÕW/a‹>îöÉ ¤iHE*²û‚|¨ˆ„ûíoM·Ýv=}øáG´k 'xRGŠŒt4 ® 0ujUU5)©ãJöUÇSl°k ²ð®Œú /pZsYÙ(˜›8Œ^¨LýaºíÞ{Iÿ×1¹ –cÆ”*),Ÿ/^Ì÷7ì%rÒ¶^íÚ#ýÝ€=òél¦rú=X¬<ÈÎû¿ÿ÷o¬¦Í›wpmÀ––6žÔò»xÀ;Á%^]g–©•´Oé´³Ôêvu8%8–pàHדªR[¸–ßýîwje®§óÏ?“Ö¬Y§$¦ÃÔÐÐÌ*“×–àw~‘’¦ ÿKE¬þˆéG¼Ä¥—^ÊŒ€ÇDZ©ÛNñç>:°O@¤‡‹IˆÐØë®[¬tÿ:Z¿~3‡˪ò³¢G;†×(±:hœZíú[B7ÜpCÄhÀÁ®Å¶T«½•_}õ%ºå–|D»wWp/…Xc'"¡ÿKõ$$Nåç)pœÆc©Ü'ˆþAå÷Çû}ö(0ìáb"¾üòËŠùkèÜsç()`=8 í}•Éë˜æ (n­ÒÒQlA/+«@¦™î¼ó胆ºà•W^¢»îú¤€µ´}ûžPðTÛI5ýJ©ûKI–"þ$uº£#›æÏ¿˜Î<óLSU ²Nd<¿s`¬@<âÜÞ½{éßÿýÿÑ}÷ÝBúÓj5©÷…&uGˆc×Ï€÷ðèX€Ñ4mÚ$.Zñ™Ï|f@0P¤XÛLÏýñ‚‚^~ù·tÏ=·qõ¶m{BÁSm'õQ L@@R¼%(WxÁ—ÐܹsJê±}Ý~c8°GI@2+‚}ô%Ò…ºµ±u;žcø…c3=pÂpË-·Ñ©§žÖmer•ˆ 8p@åÕ½ZÉáÓˆ€Ñ±fµhàg€Ç\P€é"¾GÍÍ=tá…—Ñ9çœÃ)Iôÿ¡ºvïxìÑ&âO~ò%žV“¯X‰¶83á®+y 2Ñ¥0ˆöŒWcwÐìÙsiÑ¢Eáâ æê–®€ëAQÓú§¯ÑG­e@-E€·™J< Ѻ²:(õÐÅ/‰„Ly/Ø£„Àæ¤FÒËsÏý³ËïPjÀÚ¹s?{à4C]#¿B’ÓC . 6NMøBõ÷bÎ B¿µy¼c¢¨é·¿ýt¸œº¢uTŽ’6 ;ÉáÃMtóÍ+8þ?Ѥ© ®$Ï\ìPÜ`ÛçĘgŸ}––-[¨VçjÚ°AWjjjäoºk¿U¼—E\Lp¤OšÔ_ ®@Ûî &?´žzê)z晿å*tT2`°–êÑ@\€¸?û÷7ÐwÜÁL Öût0<_öhPú¡b""=xïÞtÉ%s•°ž**Ž„B];Ce±B71†B¥^wöfRÐÌ™SèÃwÓªU÷QyyyR"nP÷ÇvìØÁFÀ¸›Ö­[Ë T”ÐUÙÛO!@ö_QQ^¸vâÞ½ÇÙK‚Ód³ØXÇu`Ÿ"@Ñ^~VRdüqúüçW*Ñv³Òo÷rv |Ü"x³Þ¢ïõ‹#"P¬Üå娮®fÍ:‹.\8hN@<×$ ¬Zugnß¾[]GC(ª+!⩺´·®œ´gOö”þ ~jÆ7ÿîÀ.ù U¤J$Æß1úÓŸ*]¼‡¦N§&¸.˜‰H78P  ¼j¾®]8N­øÅ¤.‘>õ©OÅmH5ã Ü{ï§vîÜË*ÊŠ' fñÔÝ»ë8cRÀ,ž:TŒo~Ï€] â™,˜Èxû»¿û=ôЧ¹`È®]ØÏ­kôûã?o|ÝùùýåÁfΜJï¼³•Ôõò$‡0X û¡b|¡~ø Ô{5Z‘¼pÏ=÷„›¨&Ó?!%štåÀ.ñ>\LJö³Ÿ©ãv©Uz ÇTVêrá:Þ½_ ˆ^o€Lz¬kÌœ9™¬ç"¡y;€Ÿ¯{¨_Hàž{þ",;{gÆ)¨e@%¨GA@²©ÖìQÒ ƒ˜1똔ǎ£§ŸþÝÿ­´mÛvŽw¯­E†`;×Á ßÌ( `Ži‚€ô (+Í™ÅJÅè¥[o½•‚lD»I¿þõ¯ˆeÑEϲ'ëëu(°m€ MTm€í4iö(-$Æ@Ô èèh¢9s&³«ëðaô hàðÖÂ÷oq òÚ_&ü´Ó¦Ók¯­£GùKn†‰n;À&€O󿣤£M´g$õ@¼n@/ cr×®PzΪ$Àfl·¼Æ„„Å/®½v’ªÔ„ÜO55ZÔ…G ¿uVdð“$/5ùðR^>YÛD'ΠO|âaw2­¬‚¤çž{Ž.¼ŒlãÆÍTQq˜%ÃÒ‚ˆt`—[«¾—D xýõ×iݺ5tÕU°pèÐ1ö´µu† ‚Ñ@À¯Ì–¸µË«„Âg̘Jo¼±‘ÔDô’ŽRÀW¿úUv¶µ5Ó¦M[Õ=©b*ÃÉ@A8RÒ ¥;4(Å쑾/%°#0ztžZ±s¹÷ü±cÇ9:P ‚^ˆæ‰£ _"(H{fÏžF[·¤ùó/¥ Ää HùÝ7„ÿûߢíÛ·ÒæÍHšª uSê{€l–’€T¹ÈØ£¨JæÀ¾}û”Øû]Z±b©Zírt‚[Pjâƒké--&ÆÀéÓQð¢Œ6l8Èm­%=x(~÷ B øøãr ”Ž<Î}¥§ŸÙÜ#U¤‡ÄolöÉеf(BcÍD¬l/½ô’bÎu´dÉEJ Øjoï åû÷«fêhFAüI§¿Žâ  ÓOG{²}4gΙ´|ùòpPP*¥€ÁîÙþðÅìõtõÕ •ø¿)T?±Ã€ýÀ/­Ù&¤šñÍ¿9°KÖ YÆ÷¾ÇäD÷Ãìéi¥òò2Ú½{?× €*€ÆúwY¾ê€×(hÚ` ,.Ö5f̘¤¶rzñÅ÷é _øOzD¾¥B ˆõž}ÿûß§E‹(©eŒ’¶(i蒆¯ à7¶ #`ºD:°GI@²A‘““ç˜8q”:§nžüÈhnn×ÅI u„ïÁ 3ÇqiòªªŠJèÏÿüÏS"Äsß ÿ?ÿü?+ÜM[¶låŠÀ'N4¦àw¯ÍŠ@RÉ@ƒÅ$S9ÙÖ=0¯Ã€=J’Ñïc%1B@: _vÙ9jå«¡ƒ(XÄDûl}>ƒK2®î~›²~#Ah¢Rf²pÅ •ʱ$8ÔuðÞÿ}Ú·o7}ò“7rˆ4’€jkë•ÔÌÆRÜ30Z90¿’`CH’ d3 Ù{à½ö(%àW¥6U¾î7ß|“^{í÷tÕU*¨£#GªÙ( ¼+¼*t_´¼†Gí¸gϞʓþ¥—>`˜5kVZÔ @LÄŠ7(©¤ˆWÿ}ûPCà Öÿ"ô÷D<¹*p<À¾}õ Œ€ DýÁHV+Ä@ÝÄ.œ§˜à8·ƒQ  + Gä5¤€ÂB™üãéŒ3f*Æêâ"Ÿþô§ÃiÂCU+`Íš5ôÇ?¾KŸýìÃjeÞEÛ¶íTÀwŒÝ°Èjî{0Ï!špÔ(H:S²¢¢Ñ:ØŽt`¢@²n@[Ñ‚²Z!JðwÞ¡7Þx>þñó©¾þ¸bÖ¸L›€L €ˆ/A¨Ó¦M ¹sO¥M›ö«1 ¸2N"Ýpl\7˜ýW¬¸‘»õ 7bïÞýJõÑî?i-ŽÍ¯£²ßêïíœdzD8|¸Ù èÀ uCŸúÖ·¾µ²¡¡!©UÏvÙ0Ó5I ðæ›oÐå—Ÿ§VC–°: £õ-7›WúÙÀù"L;w¤+¯¼’.¹ä’@“…píèøêWÿ·:÷.Ú±c'íÚµG\Mhõ×â¿_%`3 °ßã2PÐv’^–’ðà­­íŠRäÀ>%A0¬ãyA`ÿþýôÁÐñãÇhÆŒ jײw=,»&;† ð“ÀØ- ÆÐ´iiΜ9êï¹ô³Ÿ½Lóæ]ÀÒ€í>yâò|ñÅÕj¿}ôaB5ã={v+ØÅ†¿ãÇëÙ÷/+¿×õ'•ôxÄòøÌ½¶‘ô…¿Hb"ÊÔ±bS‚.”â 5 u<ó< C'þýﯘe›Zµ§©Õ¿•Ce1(vÍ,Z™`nZ(`uù§œ2‘f͚ΓnÍš­´~ýV.& ‰CÉÄ Èõ£Ì7Tš9sfÒòå×*`kRzÿ>^ù>º–‰?‹È}Ô8¥þëéG«Cúº>^Ã@¹´qãFÓM`(˜ÞûÜØ¥¨j?2\ ¬[·Ž6lØ@˜¯cÇP}}£›µ›ùZµ q²* =¹!Ã`‹Æ&”±]`æÌéŠYFÓ»ï®ænÆçw>7Ñœ7oƒA<׎4üãOš4‘nºéÏhêÔSèèÑ*Ú·o?Œ~°Ç ð'Ta~´ôîÏpì ­öYÌüXÑqíå=¶~»‡YW‘ØÍ‰颢B¾æ}û®+]j:°OÀvN|`"†,0ôâææffx ¶mÛªVîIŠ zC3­ :Cžpq9-´JPÀÁBˆÃŸ4©LM¾)Ü5gôè±\”cïÞ x6qÌêè@x?}út>/t?á5˜þ¬³Î «¯¾’™.ÍÊÊJ¥ÒT¨¿WRuu-‹üè¤}ºy3W|½ÒӦNJ޿¡¶AŽºFHY¡²jú¹Š‘ÔK³gÏféE7P#!HFòs`—2@¦[ i@°gÏN­­=¦tÛÑjõo㣨,i寥 ¹©H @À+ h‰ TIãƒLPû‰ÌôcÆŒUcêjF{÷Vðï!uÚ‚a÷¶s¤ùÀñãLJ<6Þc˜v‘°mÙ²…cèÛÛ›Õ¤.QÌÞ©µ…[›FB‘úWŬÐ=È 1X÷ÐÃj † 3vì®#0zt ¯–`ø‚‚¢Pì@.ƒÆìîÐÝ¢…ƒyPwÆ=÷444†‚™:ø{ø>^o}aCN çƒ,>€Svv®?Gý¦O}žÏ«6šz‚%ˆÉÜ¢ÅEàïø ®ׄ½­ÌHóÀ€}²CUF[<b‡µ@€U€`ûöíŠéƒŒæÌBdÓ‰‘P3]¿{LÛ;1¦0HvHŸÎåèA0¸6æ³çVx­Kðß5ƒæ„¤ŒîtñqqnïµnßÉÓ±übÑ(êƒáõñ!Òç¨s%õÛ^fT0;$0?˜UK.yüZö²‰Š ôuékæO‡ÎÀ öɤKý|3Ü«-€j¨п¨24zt‘qóÔ÷»B‘uz´…½/ä>4À 9!æÊí½+mVHªÐc™)»ƒwzC«|_Ø…§_ôwb±¾KMo¬ð`v꤂60®0°¹0½‘¦´-!7œHFdÐ5Ø£¤ ]ß{N>,)Åb'€ø½wï^.=ÖÔÔÈ 2 ±zö²þ²c:¨7\ˆTb „Nö"ˆQ3­ÜCal™}ôø^_,ÄR‘¾££Gk‹öXáÑÅL/ /Ì FÇ&’G¿’– ‰î¿&ÿlÊt˜ ’í8uêT–(!HG¦tžfâ‹TÐˆŠ€ × ü‘#G؇䂻ûØ@Ðâ¹Ø¤ai¿ß]3½|Öïrëßg…@ â11~[[Û&ÀüpÁa•Gâ yјÞd~É[ïKäb´*ÊÉ|S1Ì0gö(nÈæ÷Ë#0³à¤ŽžHRXC`€.Ep)"3:zAA.‡ ƒŸ`è×Ë%òN’Nf4ù žÜWØ j Ìy[[—/Ÿ™ /º|¿¢%f÷®ø^¦÷Ë‚LÅ}b|¿Â&ìÑ ‰ í{&À¿.5„ù½{1(ÖÕÕ1 às¨R³‹•ÀØ ¸×`dƒ+F(0¿/ê¸%ªP@ATùLªîxãï½I8‘ÎÅ·Í€#Ù{_öòÚO´šá“½Ï‰ŒKU`ö("¤cw/Ù*1%`€½Ya׬œã÷ÚŒÇ÷âð’×Ò.«½—ùM7žüÍôá{Å{÷!èû˸±Ã€}òdÔ¥ke E=úh5Nöáû×áó’W ðf#FrÓ}†büDŽåÀ>¥= UÝH¿õ«µoÕc¯+.–þ†ARªÆ·¥²9°Gi 霆œÊ±3ñƒ¨áÀ.¥dóg"¨=¶mæ—óv`—Ò2A3•9S¸ÔøìÑ€[åƒ;ã±ÊG»ÙPÅ€r0Dã=v*Î=•Ab‚¡”€cþá1vª˜ß/À€=J dƒfúª䨩^ñ#ƒ{dcf@¥r|9FªŽë¹8°GÖ “˜?ÓÆMÕøæ1ÒéZØ'+iŒ”‰ÒDÐc ¥Ê²ŸL(°{ä 5551U‚Í$ÍTÆNb~²×äÀ>%ŽAƒ?çTŒJÅŠoë:ا˜ Ó(Á$è±…ÒYÄeLvÉÀ{(ü÷6Çt`—¢@&1h¦3fÐãg2ã›c;°K ˆHÀL” Ç zl? {‰\“{d"ó £^:úïm‘T`*//w`‰'âÝø™~-ÑŽ)€{d 2qUÎÔ±Íc Ý>Öc:°OV Ó˜8¬’©ÎÅO5EKr`| ººzÐHÀL\=ã§×µÄ{\öÉÐ/Õ‘€AŽ›Êñ‡›å}(ç%1NŸ>Ý€%r†ãÇ:ŽÉRL*@¦1|¦0z´±$áÿ;§Ø¥ˆi5ƒ7•ç=’¬úñ’“ìSà‰ÆÂ Çö#S+ÕÇu`Ÿ€LePŸŸžÇs`Ÿ'âG¦‘ìÆK–Ø'k0Vä h$íAìSBn@“ãG&ÇøvÉ€}rq–Çwî»àÈ€}r`ylÁ‘û8Æ<îpµèÕ1ýÎA6öhPÈT߉û™yÌhçàÀ>E€L* ôØ~ÇH—vY™|¼xÏÀ}J dªˆï=Æpdú¡:f"çàÀ> ™ÎøÎ—^çà_%Íô$(úÙê†þ/«ªªªN2fªø>œËf ÷ãy©»»›²³³iÆŒ€wB@ €î!=É”ÎPLzž|òɯ=ûì³+;::XÈô|82~OOOÊŽí:³²âŸÒÉÞ'ù}ii)ýð‡?üã#<ò$i†¯V[iuÀ@(R[)ÞÜ{ï½=ýôÓ(è svŸû ”È$u”ÖèÍËËËùÁ~ðÚ׿þõgÔûµÕ©­‰´4à ‚¢_HZ KZÀVzpÈOãów4rÌßIšÉC{lÕ¡÷ÿÛÕ6t"RJW CšùG“ cK pä(xÂê#Dýj;N™‘:Ëm”®€óƒƒÑXñG…öø¬ ô¡7;é$ó"?@«Khßú¬›Òt®¦+€rB€ ߨrCŸ§ó¹;Y憈Fï4¶îÐçi)þƒÒ™‰ÄØ'@`¾¦Ð{GŽÒD¼fïõ¼NËÕ”ÎàÈ‘£€É€#G#˜8r4‚É€#G#˜8r4‚É€#G#˜8r4‚É€#G#˜8r4‚É€#G#˜8r4‚É€#G#˜8r4‚éÿd]8Ž[@.IEND®B`‚(€    ,/................................................................................/'  ( M d l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l ll l l l l l l llllllll j [; 999]ÞÞÞîàààñÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÞÞÞòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòâââñGGGz CCCiùùùÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿèèèÿúúúÿSSS‰# BBBhóóóÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿãããÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿíííÿíííÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhôôôÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿäääÿôôôÿPPPˆ# BBBhôôôÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿôôôÿPPPˆ# BBBhôôôÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿéééÿçççÿæææÿãããÿáááÿáááÿáááÿáááÿáááÿâââÿäääÿåååÿéééÿêêêÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿéééÿæææÿàààÿÛÛÛÿØØØÿÓÓÓÿÎÎÎÿËËËÿÈÈÈÿÇÇÇÿÆÆÆÿÆÆÆÿÆÆÆÿÇÇÇÿÉÉÉÿÍÍÍÿÓÓÓÿÙÙÙÿÞÞÞÿåååÿèèèÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhõõõÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿëëëÿçççÿâââÿÛÛÛÿÎÎÎÿº¹¹ÿ©©©ÿ”””ÿƒƒƒÿwxxÿmnnÿlmmÿkmmÿkmmÿkllÿqqqÿ{||ÿ‹‹‹ÿ›ššÿ¨¨¨ÿ¸¸¸ÿÂÂÂÿÉÉÉÿÑÑÑÿÙÙÙÿâââÿæææÿèèèÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhõõõÿðððÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿëëëÿæææÿáááÿÑÑÑÿ°°°ÿÿpqqÿgkkÿZbbÿ[ddÿ]hhÿ_jjÿ`mmÿannÿcooÿdqqÿfssÿerrÿeppÿallÿ]ffÿdiiÿjkkÿ~~~ÿ–––ÿªªªÿ¼¼¼ÿÄÄÄÿÎÎÎÿ×××ÿÞÞÞÿäääÿèèèÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhõõõÿðððÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿêêêÿãããÿÉÉÉÿ˜——ÿqssÿ_ggÿ\ffÿXccÿPZZÿLUUÿJQQÿJPPÿKPPÿNSSÿSYYÿZaaÿ^eeÿ_ggÿ]ffÿ[ddÿYccÿZddÿ[ggÿ^iiÿ[ffÿY__ÿcffÿsssÿÿ¥¤¤ÿ···ÿÂÂÂÿÊÊÊÿÑÑÑÿ×××ÿÚÚÚÿÜÜÜÿÞÞÞÿàààÿãããÿçççÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿõõõÿPPPˆ# BBBhõõõÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿìììÿéééÿÒÒÒÿ•••ÿlppÿakkÿ[ffÿMVVÿDKKÿADDÿACCÿCDDÿHIIÿRVVÿellÿŠŠÿ”ŸŸÿ ««ÿ§±±ÿ«µµÿ¨²²ÿ¡««ÿ––ÿouuÿX\\ÿOSSÿKRRÿLTTÿOXXÿS]]ÿSZZÿ^bbÿkllÿ‚‚‚ÿ™™™ÿ§¦¦ÿ³³³ÿ¹¹¹ÿÀÀÀÿÃÃÃÿÆÆÆÿÍÍÍÿÜÜÜÿéééÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhõõõÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿìììÿæææÿ¬¬¬ÿruuÿhrrÿ[ggÿKRRÿBFFÿ?AAÿ@AAÿCCCÿHIIÿSVVÿpyyÿ˜¤¤ÿªµµÿž¥¥ÿšžžÿ  ÿŸ¡¡ÿŸ  ÿž  ÿŸ¡¡ÿ­²²ÿÂÊÊÿª±±ÿrwwÿQSSÿGHHÿBDDÿ?CCÿAGGÿFOOÿNXXÿRZZÿSYYÿ_bbÿgiiÿillÿjkkÿjjjÿkllÿ™™™ÿ×××ÿèèèÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhöööÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿÜÜÜÿˆˆˆÿnvvÿeqqÿNVVÿCFFÿAAAÿBBBÿEEEÿIIIÿPPPÿ`eeÿ‹˜˜ÿ¦³³ÿ•™™ÿ¥¥¥ÿÔÔÔÿéééÿíííÿíííÿíííÿìììÿçççÿÍÍÍÿ£££ÿ¬°°ÿÊÒÒÿ’’ÿ\^^ÿKKKÿBBBÿ=>>ÿ:<<ÿ;==ÿ=BBÿBIIÿFOOÿIRRÿIRRÿJSSÿQ\\ÿfuuÿtttÿÛÛÛÿèèèÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhöööÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿÊÊÊÿƒƒÿsÿ]hhÿHMMÿCDDÿDDDÿGGGÿKJJÿMMMÿSTTÿfkkÿ•¤¤ÿœ¥¥ÿœœœÿéééÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿÑÑÑÿ—ššÿÐ××ÿ••ÿcddÿPPPÿHGGÿBAAÿ>==ÿ<<<ÿ;<<ÿ:<<ÿ9<<ÿ7::ÿ366ÿ8==ÿVccÿsuuÿÜÜÜÿéééÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhöööÿòòòÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿÃÂÂÿuyyÿv„„ÿW``ÿGIIÿEEEÿGGGÿKKKÿNNNÿOOOÿSSSÿbhhÿ“££ÿ——ÿÀ¿¿ÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿÔÔÔÿ¡¤¤ÿÊÑÑÿƒ††ÿdddÿTTTÿMMMÿIHHÿEEEÿCDDÿBBBÿ???ÿ;;;ÿ544ÿ8;;ÿVaaÿsuuÿÜÜÜÿéééÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhöööÿòòòÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿÅÅÅÿw{{ÿz‡‡ÿV]]ÿGIIÿGHHÿJJJÿMNNÿPPPÿPPPÿQRRÿ\__ÿ†••ÿŽ˜˜ÿ¿¿¿ÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿ¾¾¾ÿ½ÁÁÿª°°ÿtttÿaaaÿVVVÿPPPÿNNNÿMMMÿLLLÿIIIÿEEEÿ===ÿ@CCÿ]iiÿtuuÿÜÜÜÿéééÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿöööÿPPPˆ# BBBh÷÷÷ÿóóóÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿÚÚÚÿ‚‚ÿÿX__ÿIKKÿJJJÿMMMÿPPPÿQQQÿQQQÿQPPÿTVVÿq||ÿŽœœÿ£¢¢ÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿŸ  ÿÅÍÍÿ€ƒƒÿiiiÿ]]]ÿUUUÿRRRÿRRRÿPPPÿOOOÿJJJÿBBBÿDHHÿannÿtuuÿÜÜÜÿéééÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿ÷÷÷ÿPPPˆ# BBBh÷÷÷ÿóóóÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿìììÿŽŽÿˆ––ÿ^ffÿKLLÿKKKÿNNNÿQQQÿRRRÿRRRÿPPPÿPPPÿ^ddÿŠ››ÿ…ˆˆÿìììÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿ­®®ÿÄÊÊÿ‘––ÿlllÿ```ÿXXXÿTTTÿSSSÿSSSÿQQQÿLLLÿDDDÿFJJÿcppÿtvvÿÜÜÜÿéééÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿ÷÷÷ÿPPPˆ# BBBh÷÷÷ÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿÿŒ˜˜ÿissÿNOOÿLKKÿNNNÿQQQÿRRRÿRRRÿQQQÿNNNÿQSSÿq~~ÿ~‰‰ÿ¿¿¿ÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿÏÏÏÿ®²²ÿ£ªªÿnnnÿaaaÿYYYÿTTTÿSSSÿSSSÿQQQÿLLLÿDDDÿGJJÿdppÿtvvÿÝÝÝÿêêêÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿ÷÷÷ÿPPPˆ# BBBh÷÷÷ÿôôôÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿÎÎÎÿ‹’’ÿ~ŒŒÿSVVÿMMMÿNNNÿQQQÿSSSÿSSSÿRRRÿOOOÿMNNÿX^^ÿ€ÿ„††ÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿåååÿŸ¢¢ÿ°¸¸ÿqrrÿbbbÿZZZÿUUUÿSSSÿSSSÿQQQÿLLLÿDDDÿGJJÿdppÿtvvÿÝÝÝÿêêêÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿ÷÷÷ÿPPPˆ# BBBh÷÷÷ÿôôôÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿ’’ÿ•££ÿ^eeÿOOOÿOOOÿQQQÿRRRÿSSSÿSSSÿQQQÿNNNÿMOOÿfqqÿwƒƒÿµµµÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿžŸŸÿµ¾¾ÿtvvÿbbbÿZZZÿUUUÿSSSÿSSSÿQQQÿLLLÿDDDÿFJJÿcppÿtvvÿÝÝÝÿêêêÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿ÷÷÷ÿPPPˆ# BBBh÷÷÷ÿôôôÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿÂÂÂÿ“žžÿx„„ÿRTTÿOOOÿQQQÿRRRÿSSSÿSSSÿRRRÿPPPÿKLLÿPSSÿrÿ|ÿÞÞÞÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ ¡¡ÿ·ÀÀÿvzzÿbbbÿZZZÿUUUÿSSSÿSSSÿQQQÿLLLÿDDDÿFJJÿcooÿtvvÿÝÝÝÿêêêÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿ÷÷÷ÿPPPˆ# BBBh÷÷÷ÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿ‘““ÿš¨¨ÿ^ccÿPQQÿQQQÿRRRÿSSSÿSSSÿSSSÿRRRÿNNNÿKKKÿV\\ÿyˆˆÿŽŽÿîîîÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ¡¢¢ÿ·ÀÀÿw{{ÿaaaÿZZZÿUUUÿSSSÿSSSÿQQQÿLLLÿDDDÿGJJÿbooÿtuuÿÝÝÝÿéééÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿ÷÷÷ÿPPPˆ# BBBh÷÷÷ÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿÏÏÏÿ–ŸŸÿÿUVVÿQQQÿRRRÿSSSÿSSSÿSSSÿSSSÿQQQÿMLLÿJKKÿ`jjÿp{{ÿ³³³ÿîîîÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ£££ÿºÂÂÿw{{ÿaaaÿZZZÿUUUÿSSSÿSSSÿQQQÿLLLÿDDDÿFJJÿbnnÿtuuÿÛÛÛÿêêêÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿ÷÷÷ÿPPPˆ# BBBhøøøÿõõõÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿžžžÿ§´´ÿfnnÿRRRÿRRRÿSSSÿSSSÿSSSÿSSSÿRRRÿPPPÿKKKÿKMMÿgttÿryyÿÏÏÏÿîîîÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ™ššÿ»ÄÄÿw{{ÿ```ÿZZZÿUUUÿSSSÿSSSÿQQQÿMMMÿDDDÿEIIÿ_kkÿrttÿ×××ÿéééÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿ÷÷÷ÿPPPˆ# BBBhøøøÿõõõÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿìììÿ–››ÿ—¥¥ÿZ]]ÿSRRÿSSSÿSSSÿSSSÿSSSÿSSSÿRRRÿOOOÿIIIÿMQQÿm{{ÿ|~~ÿàààÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ———ÿ¶ÁÁÿtxxÿ___ÿYYYÿUUUÿSSSÿSSSÿQQQÿMMMÿDDDÿDGGÿ\ggÿrttÿÏÏÏÿèèèÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿ÷÷÷ÿPPPˆ# BBBhøøøÿõõõÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿÉÉÉÿ¢««ÿŒŒÿWXXÿTTTÿTTTÿTTTÿSSSÿSSSÿSSSÿRRRÿNNNÿHIIÿQVVÿqÿ‡ˆˆÿìììÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ   ÿ±¼¼ÿossÿ\\\ÿXXXÿUUUÿSSSÿSSSÿRRRÿMMMÿEDDÿCFFÿWbbÿprrÿÈÈÈÿæææÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿøøøÿPPPˆ# BBBhøøøÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿÿ°¼¼ÿnuuÿWWWÿUUUÿTTTÿSSSÿSSSÿSSSÿSSSÿQQQÿLLLÿGGGÿT[[ÿnzzÿœœœÿíííÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ™››ÿ§³³ÿhkkÿZZZÿWWWÿTTTÿSSSÿSSSÿRRRÿNNNÿEEEÿACCÿQ[[ÿgkkÿ···ÿÝÝÝÿìììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿøøøÿPPPˆ# BBBhøøøÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿåååÿšœœÿ§´´ÿeiiÿWWWÿUUUÿTTTÿSSSÿSSSÿSSSÿSSSÿPPPÿKKKÿGGGÿZbbÿhrrÿ´´´ÿìììÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿåååÿ‘••ÿ–¢¢ÿ]__ÿWWWÿUUUÿTTTÿSSSÿSSSÿRRRÿNNNÿFFFÿ@AAÿJRRÿY``ÿ   ÿËËËÿâââÿëëëÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿøøøÿPPPˆ# BBBhøøøÿöööÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿÈÈÈÿ—››ÿœ¨¨ÿ`ccÿXWWÿUUUÿTTTÿSSSÿSSSÿSSSÿSSSÿPPPÿJJJÿGHHÿ]hhÿgnnÿÃÃÃÿíííÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿìììÿêêêÿèèèÿæææÿéééÿ¯¯¯ÿ˜˜ÿwÿVWWÿUTTÿTTTÿTTTÿSSSÿSSSÿSSSÿPPPÿIIIÿAAAÿBGGÿS\\ÿtuuÿµµµÿÆÆÆÿØØØÿáááÿçççÿèèèÿëëëÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿøøøÿPPPˆ# BBBhøøøÿ÷÷÷ÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿ½½½ÿž¤¤ÿ‘››ÿ^__ÿXXXÿUUUÿTTTÿSSSÿSSSÿSSSÿSSSÿOOOÿIIIÿGIIÿ_kkÿnttÿÊÊÊÿîîîÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿíííÿàààÿÖÖÖÿÓÓÓÿÌÌÌÿ¦¦¦ÿuyyÿŽŽÿ[``ÿSSSÿTTTÿUUUÿUUUÿUUUÿUUUÿTTTÿQQQÿLLLÿDDDÿ@BBÿHPPÿZaaÿuuuÿ   ÿ¹¹¹ÿÄÄÄÿËËËÿÓÓÓÿàààÿêêêÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿøøøÿPPPˆ# BBBhùùùÿ÷÷÷ÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿ¯¯¯ÿ¦¯¯ÿ‡ÿ^^^ÿXXXÿUUUÿTTTÿSSSÿSSSÿSSSÿRRRÿOOOÿHHHÿHJJÿammÿtxxÿÓÓÓÿðððÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿÇÇÇÿ¥¥¥ÿ‹‹‹ÿz{{ÿoqqÿnvvÿs€€ÿ^ddÿTUUÿVVVÿZZZÿ[[[ÿ\\\ÿ\\\ÿ\\\ÿ[[[ÿXXXÿSSSÿKKKÿEEEÿCFFÿKSSÿV``ÿ_ccÿkllÿ{||ÿŒŒŒÿ¨¨¨ÿÏÏÏÿçççÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿùùùÿPPPˆ# BBBhùùùÿ÷÷÷ÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿ¤¤¤ÿ¯¹¹ÿ~……ÿ_^^ÿYYYÿUUUÿTTTÿSSSÿSSSÿSSSÿRRRÿNNNÿGGGÿHKKÿbooÿx{{ÿÚÚÚÿñññÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿÃÃÃÿŒ””ÿzˆˆÿo||ÿn{{ÿjwwÿcmmÿX^^ÿWXXÿ\\\ÿcbbÿgffÿgggÿgggÿgggÿgggÿgggÿfffÿbbbÿZZZÿPPPÿJJJÿGIIÿKQQÿS]]ÿZeeÿ^jjÿgttÿlppÿÃÃÃÿçççÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿùùùÿPPPˆ# BBBhùùùÿ÷÷÷ÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿœžžÿ³¾¾ÿyÿ___ÿYYYÿUUUÿSSSÿSSSÿSSSÿSSSÿRRRÿNNNÿFFFÿIKKÿdppÿz{{ÿßßßÿñññÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿµµµÿ¸ÆÆÿ†——ÿdnnÿ]ddÿZ__ÿ[^^ÿaaaÿjjjÿrssÿwwwÿyzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿxxxÿsssÿkllÿ`aaÿXXXÿQSSÿNQQÿLQQÿPXXÿmÿrzzÿÇÇÇÿéééÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿùùùÿPPPˆ# BBBhùùùÿøøøÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿ™››ÿ¹ÃÃÿw||ÿ___ÿZZZÿUUUÿSSSÿSSSÿSSSÿSSSÿRRRÿNNNÿEEEÿILLÿfrrÿwxxÿäääÿñññÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿ³³³ÿÅÐÐÿ¬¹¹ÿ•žžÿ•ÿ—ŸŸÿ›££ÿ¢ªªÿ§®®ÿ«²²ÿ­´´ÿ®µµÿ®µµÿ®µµÿ®µµÿ®µµÿ®µµÿ®µµÿ®´´ÿ¬³³ÿ©°°ÿ¥¬¬ÿŸ§§ÿ—ŸŸÿ˜˜ÿ†ÿƒŽŽÿ™¬¬ÿ€‰‰ÿÙÙÙÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿùùùÿPPPˆ# BBBhùùùÿøøøÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿ™ššÿ¹ÃÃÿx}}ÿ```ÿZZZÿUUUÿSSSÿSSSÿSSSÿSSSÿQQQÿMMMÿFEEÿHLLÿfssÿxyyÿåååÿñññÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿÅÅÅÿ¢§§ÿ¬³³ÿ¨®®ÿ¨®®ÿ¨®®ÿ©¯¯ÿª¯¯ÿª°°ÿª°°ÿ«°°ÿ«°°ÿ«°°ÿ«°°ÿ«°°ÿ«°°ÿ«°°ÿ«°°ÿ«°°ÿª°°ÿª°°ÿª¯¯ÿª¯¯ÿ©¯¯ÿ§­­ÿ¥««ÿ¤««ÿ§±±ÿ‘””ÿìììÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿùùùÿPPPˆ# BBBhùùùÿøøøÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿ™ššÿ¹ÃÃÿy}}ÿa``ÿ[[[ÿVVVÿSSSÿSSSÿSSSÿSSSÿQQQÿLLLÿEEEÿHLLÿgttÿy{{ÿèèèÿñññÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿñññÿÚÚÚÿÕÕÕÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÒÑÑÿâââÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿùùùÿPPPˆ# BBBhùùùÿøøøÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿ™ššÿºÃÃÿzÿaaaÿ[[[ÿVVVÿSSSÿSSSÿSSSÿSSSÿQQQÿLLLÿEEEÿIMMÿfrrÿ€€ÿçççÿòòòÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿùùùÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿš››ÿ½ÇÇÿ}‚‚ÿdddÿ\\\ÿWWWÿTTTÿSSSÿSSSÿSSSÿQQQÿLLLÿEEEÿINNÿdooÿ†‡‡ÿãããÿòòòÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿùùùÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿŸŸÿ¼ÅÅÿ…ŠŠÿfffÿ]]]ÿWWWÿTTTÿSSSÿSSSÿSSSÿQQQÿKKKÿDDDÿIMMÿcooÿÿãããÿòòòÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿùùùÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿ¦§§ÿ·¿¿ÿŽ””ÿhhhÿ_^^ÿWWWÿTTTÿSSSÿSSSÿSSSÿQQQÿLKKÿCCCÿFJJÿcppÿwxxÿäääÿòòòÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿïïïÿúúúÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿ±±±ÿ±··ÿš  ÿkkkÿ```ÿYYYÿUUUÿSSSÿSSSÿSSSÿQQQÿMMMÿDDDÿEIIÿammÿvwwÿãããÿòòòÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿïïïÿúúúÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿÄÄÄÿ¦ªªÿ©±±ÿpppÿcccÿZZZÿUUUÿSSSÿSSSÿSSSÿQQQÿMMMÿDDDÿEHHÿ`kkÿuvvÿßßßÿðððÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿïïïÿúúúÿPPPˆ# BBBhúúúÿúúúÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿÖÖÖÿ ¢¢ÿ·ÀÀÿvxxÿeeeÿ\\\ÿVVVÿTTTÿSSSÿSSSÿQQQÿMLLÿEDDÿDGGÿ[ggÿuwwÿÕÕÕÿïïïÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿïïïÿúúúÿPPPˆ# BBBhúúúÿúúúÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿíííÿ¤¥¥ÿÂÊÊÿ€ƒƒÿiiiÿ^^^ÿWWWÿTTTÿSSSÿSSSÿRRRÿMMMÿEDDÿCFFÿYddÿqttÿÏÏÏÿîîîÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿïïïÿúúúÿPPPˆ# BBBhúúúÿúúúÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ²²²ÿÅÌÌÿ••ÿmmmÿbbbÿYYYÿTTTÿSSSÿSSSÿRRRÿNNNÿEEEÿBCCÿU``ÿkppÿÄÄÄÿìììÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿúúúÿPPPˆ# BBBhúúúÿùùùÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿÔÔÔÿ±¶¶ÿ¨¯¯ÿsttÿeeeÿ[[[ÿVVVÿTTTÿSSSÿRRRÿNNNÿFFFÿABBÿQZZÿbhhÿ¼¼¼ÿéééÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿúúúÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿñññÿ¡¤¤ÿ¿ÇÇÿ}ÿjiiÿ^^^ÿWWWÿTTTÿSSSÿSSSÿOOOÿGGGÿAAAÿMUUÿZbbÿ®®®ÿæææÿõõõÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿúúúÿPPPˆ# BBBhûûûÿúúúÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ§¨¨ÿÊÑÑÿŽ’’ÿpppÿbbbÿYYYÿUUUÿSSSÿSSSÿOOOÿHHHÿ@@@ÿHNNÿ\eeÿšššÿâââÿôôôÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿúúúÿPPPˆ# BBBhûûûÿúúúÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿÎÎÎÿ¶¼¼ÿ¬³³ÿxxxÿhhhÿ]]]ÿVVVÿSSSÿSSSÿPPPÿIIIÿAAAÿDHHÿ[ffÿƒƒƒÿÜÜÜÿñññÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿñññÿéééÿâââÿçççÿîîîÿòòòÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿúúúÿPPPˆ# BBBhúúúÿúúúÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ¡¢¢ÿÊÑÑÿ†‰‰ÿnnnÿbbbÿYYYÿTTTÿSSSÿQQQÿKKKÿBAAÿADDÿVaaÿprrÿÑÑÑÿìììÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿÞÞÞÿÃÃÃÿÂÂÂÿËËËÿÞÞÞÿîîîÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿúúúÿPPPˆ# BBBhúúúÿùùùÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿ¹¹¹ÿÆÌÌÿ¢¨¨ÿwxxÿhhhÿ]]]ÿVVVÿSSSÿRRRÿMMMÿDDDÿ?AAÿOXXÿgkkÿ¾¾¾ÿçççÿõõõÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿäääÿ€ƒƒÿhnnÿqrrÿ˜——ÿÏÏÏÿëëëÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿûûûÿPPPˆ# BBBhúúúÿùùùÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿîîîÿ¦¨¨ÿÈÏÏÿ†ˆˆÿpppÿcccÿYYYÿTTTÿRRRÿNNNÿFFFÿ>??ÿHOOÿX``ÿ¥¥¥ÿßßßÿôôôÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿñññÿŒŒŒÿsÿZhhÿdssÿdjjÿÁÁÁÿñññÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿûûûÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ²³³ÿËÑÑÿ¥««ÿ{{{ÿjjjÿ^^^ÿWWWÿSSSÿOOOÿHHHÿ???ÿAGGÿXbbÿ„„„ÿÕÕÕÿîîîÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿ¤¤¤ÿy‚‚ÿT]]ÿ>CCÿWddÿpwwÿÔÔÔÿôôôÿóóóÿóóóÿóóóÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿüüüÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿîîîÿ¢¤¤ÿÏÕÕÿŒÿtttÿfffÿ[[[ÿUUUÿQQQÿKKKÿAAAÿ>AAÿPZZÿkmmÿÂÂÂÿäääÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿÂÂÂÿˆˆÿkvvÿADDÿADDÿbnnÿ€‚‚ÿíííÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿôôôÿõõõÿüüüÿNNNˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿøøøÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿ½½½ÿÃÇÇÿµ»»ÿ‚‚ÿoooÿbbbÿYYYÿRRRÿMMMÿDDDÿ=>>ÿFNNÿX``ÿ¡¡¡ÿ×××ÿñññÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿÍÍÍÿ}ÿ{ˆˆÿMRRÿAAAÿOVVÿmyyÿ¢¢¢ÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿõõõÿüüüÿNNNˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿœÿ×ÝÝÿž¢¢ÿ|||ÿlllÿ```ÿVVVÿOOOÿHHHÿ?>>ÿ>CCÿT^^ÿyyyÿÊÊÊÿåååÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿêêêÿ‡ŠŠÿƒ’’ÿW^^ÿEFFÿEFFÿ`kkÿoxxÿÊÊÊÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöööÿõõõÿõõõÿöööÿýýýÿNNNˆ# BBBhùùùÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿÜÜÜÿª¬¬ÿÐÖÖÿ‘““ÿyyyÿjjjÿ]]]ÿSSSÿLLLÿBBBÿ<>>ÿHQQÿ^ccÿ©©©ÿÔÔÔÿîîîÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿïïïÿŒŒŒÿ„‘‘ÿ_iiÿIKKÿEDDÿKNNÿn{{ÿ}‚‚ÿåååÿõõõÿõõõÿõõõÿõõõÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿýýýÿNNNˆ# BBBhùùùÿ÷÷÷ÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ¸¸¸ÿ¿ÃÃÿÄÊÊÿ‹ÿwwwÿhhhÿZZZÿPPPÿFFFÿ>>>ÿ?DDÿS]]ÿwxxÿÃÃÃÿàààÿôôôÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿòòòÿŽŽŽÿ‚ŽŽÿfooÿLNNÿHHHÿGFFÿSYYÿw……ÿÿõõõÿöööÿõõõÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿ÷÷÷ÿöööÿ÷÷÷ÿýýýÿNNNˆ# BBBhùùùÿöööÿõõõÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿªªªÿÎÔÔÿºÀÀÿ‰‹‹ÿwvvÿgggÿWWWÿLLLÿBBBÿ<>>ÿENNÿZ``ÿ•””ÿÊÊÊÿæææÿöööÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿðððÿÿ‰‰ÿittÿNPPÿJIIÿIHHÿIIIÿ_iiÿr~~ÿ¹¸¸ÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿ÷÷÷ÿýýýÿOOOŠ# BBBhùùùÿöööÿõõõÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿøøøÿøøøÿøøøÿ÷÷÷ÿ¥¦¦ÿÔÙÙÿ¶»»ÿ‰ŠŠÿwwwÿfffÿUUUÿIIIÿ@??ÿ=AAÿMWWÿeggÿ®®®ÿÍÍÍÿèèèÿöööÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿõõõÿíííÿŽŽÿ|††ÿiuuÿNRRÿKKKÿKKKÿIIIÿLNNÿjwwÿv}}ÿÙÙÙÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿ÷÷÷ÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿÿÿÿÿYYY  BBBhøøøÿõõõÿôôôÿõõõÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿøøøÿùùùÿùùùÿøøøÿñññÿš››ÿØÝÝÿ¸½½ÿ‹ŒŒÿxxxÿfffÿSSSÿGFFÿ>??ÿ@FFÿQ[[ÿnooÿ²²²ÿÍÍÍÿæææÿôôôÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿõõõÿåååÿ‰‰‰ÿwƒƒÿgssÿNRRÿKKKÿLLLÿLLLÿIIIÿQUUÿu„„ÿƒ……ÿðððÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿøøøÿøøøÿøøøÿøøøÿùùùÿøøøÿ÷÷÷ÿöööÿöööÿÿÿÿÿYYY¢ BBBhøøøÿõõõÿôôôÿôôôÿôôôÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿøøøÿçççÿ¡¢¢ÿÓÚÚÿÀÆÆÿ‘““ÿ{{{ÿfffÿRRRÿFFFÿ?AAÿCJJÿT]]ÿnooÿ¯¯¯ÿÈÈÈÿÞÞÞÿîîîÿõõõÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿõõõÿñññÿîîîÿÊÊÊÿ€‚‚ÿwƒƒÿcnnÿNQQÿKLLÿMMMÿNNNÿLLLÿJJJÿYaaÿuƒƒÿ¥¥¥ÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿùùùÿøøøÿöööÿöööÿõõõÿÿÿÿÿYYY¢ BBBhùùùÿöööÿôôôÿôôôÿôôôÿõõõÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿóóóÿ¨¨¨ÿÉÎÎÿÍÓÓÿœŸŸÿ€ÿjjjÿUTTÿGGGÿACCÿEMMÿU^^ÿkllÿÿÁÁÁÿÏÏÏÿÞÞÞÿèèèÿîîîÿñññÿòòòÿòòòÿðððÿìììÿèèèÿÙÙÙÿ¢¢¢ÿqvvÿvƒƒÿ_hhÿOQQÿNNNÿPQQÿRRRÿQQQÿLLLÿLMMÿfrrÿr{{ÿÌÌÌÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿùùùÿøøøÿ÷÷÷ÿöööÿõõõÿôôôÿþþþÿYYY¢ BBBhùùùÿöööÿôôôÿôôôÿõõõÿõõõÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿ®¯¯ÿ±µµÿÙßßÿ±¶¶ÿŠÿqrrÿZZZÿJKKÿEGGÿHOOÿVaaÿ^ccÿ{||ÿ¢¡¡ÿ¼¼¼ÿÊÊÊÿÒÒÒÿ×××ÿÛÛÛÿÛÛÛÿ×××ÿÅÅÅÿ   ÿuxxÿp{{ÿn||ÿZaaÿRTTÿUUUÿ\\\ÿ```ÿ___ÿWWWÿOOOÿRVVÿrÿƒƒÿçççÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿøøøÿöööÿõõõÿóóóÿñññÿýýýÿYYY¢ BBBhùùùÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿÕÕÕÿ›››ÿÏÔÔÿÍÔÔÿ¢¦¦ÿÿeeeÿRRRÿIJJÿJOOÿT^^ÿ]ggÿ_ffÿmnnÿ{||ÿŠŠŠÿ–––ÿÿ„……ÿuwwÿmrrÿlwwÿp~~ÿcmmÿZ__ÿ_aaÿkmmÿuxxÿz{{ÿxyyÿrrrÿfeeÿVWWÿ^ddÿŽŽÿ’’’ÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿúúúÿùùùÿøøøÿ÷÷÷ÿõõõÿóóóÿñññÿïïïÿüüüÿYYY¢ BBBhùùùÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿòòòÿ®®®ÿ¨««ÿÒØØÿÉÐÐÿ£¨¨ÿ~‚‚ÿceeÿSTTÿNPPÿQWWÿXbbÿ`llÿcooÿcnnÿbllÿfqqÿiuuÿkxxÿgssÿbllÿaiiÿmttÿ‰’’ÿ£­­ÿ²ººÿ»ÂÂÿ¾ÄÄÿ¯´´ÿ–ššÿ|~~ÿghhÿuÿ~ŒŒÿ¼»»ÿùùùÿúúúÿùùùÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿíííÿûûûÿYYY¢ BBBhùùùÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿæææÿ®®®ÿ¥©©ÿÇÌÌÿÍÔÔÿµ½½ÿ”ššÿw||ÿeiiÿ\``ÿY^^ÿYaaÿ\ddÿ]ggÿ_hhÿ`iiÿdmmÿpyyÿ‡’’ÿŸ««ÿ¯ººÿ£««ÿ  ÿ¡££ÿ¡££ÿ¢¤¤ÿ¸»»ÿÍÓÓÿÀÆÆÿ—ŸŸÿ–©©ÿ‡ŽŽÿãããÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿöööÿõõõÿôôôÿòòòÿðððÿîîîÿìììÿúúúÿYYY¢BBBhùùùÿ÷÷÷ÿõõõÿõõõÿõõõÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿîîîÿ¿¿¿ÿ¢££ÿ¨¬¬ÿ½ÃÃÿÆÏÏÿ»ÄÄÿ®¸¸ÿ£­­ÿ›¥¥ÿ˜¡¡ÿ—¢¢ÿš¤¤ÿžªªÿª¶¶ÿ­¹¹ÿ¡©©ÿœŸŸÿ¯°°ÿÖÖÖÿôôôÿùùùÿùùùÿóóóÿÒÒÒÿ¬¬¬ÿ¥§§ÿÌÕÕÿÍßßÿ•––ÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿ÷÷÷ÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿéééÿøøøÿ[[[ŸBBBhùùùÿ÷÷÷ÿõõõÿõõõÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿéééÿÅÄÄÿª««ÿ£¤¤ÿ¡¥¥ÿ¡¥¥ÿŸ¥¥ÿŸ££ÿŸ££ÿŸ££ÿŸ¢¢ÿ£¤¤ÿ···ÿÛÛÛÿ÷÷÷ÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿîîîÿ¯¯¯ÿ ¢¢ÿÉÊÊÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿùùùÿøøøÿ÷÷÷ÿöööÿôôôÿòòòÿðððÿîîîÿìììÿêêêÿæææÿ÷÷÷ÿ\\\•BBBhùùùÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿùùùÿøøøÿ÷÷÷ÿöööÿóóóÿñññÿðððÿíííÿìììÿêêêÿæææÿàààÿòòòÿWWWtBBBhùùùÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿ÷÷÷ÿöööÿôôôÿòòòÿðððÿîîîÿíííÿëëëÿçççÿãããÿÛÛÛÿéééù???DBBBhùùùÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿùùùÿùùùÿúúúÿûûûÿûûûÿûûûÿúúúÿøøøÿ÷÷÷ÿöööÿôôôÿòòòÿðððÿîîîÿìììÿéééÿåååÿáááÿ×××ÿÒÒÒÿÈÈÈÛ BBBhúúúÿ÷÷÷ÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿöööÿðððÿìììÿíííÿðððÿñññÿñññÿñññÿñññÿðððÿïïïÿîîîÿìììÿêêêÿæææÿãããÿÞÞÞÿÙÙÙÿÒÒÒÿ···ÿÚÚÚÿrrr{BBBhúúúÿøøøÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿøøøÿîîîÿÜÜÜÿËËËÿÆÆÆÿÊÊÊÿÏÏÏÿÓÓÓÿÖÖÖÿØØØÿÛÛÛÿÛÛÛÿÛÛÛÿ×××ÿÔÔÔÿÐÐÐÿÍÍÍÿÆÆÆÿ···ÿ¢¢¢ÿÑÑÑÿ®®®± BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿ÷÷÷ÿèèèÿÈÈÈÿ¦¦¦ÿ“““ÿ•••ÿšššÿŸŸŸÿ£££ÿ©©©ÿ­­­ÿ°°°ÿ®®®ÿªªªÿ¦¦¦ÿ¢¢¢ÿœœœÿ———ÿŸŸŸÿ×××ÿÀÀÀÃBBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿ÷÷÷ÿæææÿÁÁÁÿ———ÿÿÿ‘‘‘ÿÿŒÿŠŠ‰ÿŠŠŠÿŠŠŠÿŽŽŽÿ•••ÿ™™™ÿžžžÿ¯¯¯ÿ¿½½ÿ÷÷÷ÿÆÆÆËBBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿøøøÿèèèÿ»»»ÿ›››ÿóóóÿûûûÿûûûÿùùùÿõõôÿììëÿãääÿÚÚÚÿ×Ö×ÿØ×ØÿÙÙÙÿØØØÿÙÙÙÿø÷÷ÿ½½½ÇBBBhûûûÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿùùùÿèèèÿ»»»ÿÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿóóóÿëëëÿßßßÿÖÖ×ÿõõõÿ¼¼¼ÄBBBhûûûÿùùùÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿøøøÿèèèÿ¼¼¼ÿÿ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿùøøÿðïïÿæææÿßßßÿ×××ÿöööÿ»»»Å"BBBhúúúÿúúúÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿ÷÷÷ÿèèèÿ½½½ÿœœœÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿþýþÿøøøÿïïïÿåääÿÚÚÚÿÔÖÖÿ÷÷øÿ½½½Ã %BBBhúúúÿúúúÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿûûûÿöööÿæææÿ½½½ÿ›››ÿóóóÿÿÿÿÿÿÿÿÿýýýÿøøøÿðððÿååäÿØÙØÿÒÒÒÿôôôÿ¾¾¾ÂBBBhúúúÿúúúÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿúúúÿùùùÿõõõÿæææÿ½½½ÿ›››ÿòòòÿÿÿÿÿþþþÿ÷÷÷ÿðððÿäääÿØØØÿÒÒÒÿ÷÷÷ÿÀÀÀÄBBBhûûûÿúúúÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿüüüÿûûûÿùùùÿøøøÿóóóÿåååÿ¾¾¾ÿ›››ÿñññÿÿÿÿÿøøøÿïïïÿäääÿØØØÿÑÑÑÿøøøÿ¾¾¾ÉBBBhûûûÿúúúÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿûûûÿùùùÿøøøÿ÷÷÷ÿòòòÿäääÿ½½½ÿœœœÿòòòÿúúúÿïïïÿäääÿ×××ÿÒÒÒÿøøøÿÀÀÀÌ&BBBhûûûÿûûûÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿøøøÿ÷÷÷ÿõõõÿñññÿãããÿ½½½ÿÿðððÿñññÿäääÿ×××ÿÓÓÓÿùùùÿÄÄÄÌ'BBBhûûûÿûûûÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿûûûÿùùùÿøøøÿöööÿõõõÿôôôÿïïïÿáááÿºººÿŸŸŸÿêêêÿåååÿØØØÿÔÔÔÿùùùÿÄÄÄÌ"BBBhûûûÿûûûÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿ÷÷÷ÿöööÿôôôÿòòòÿìììÿÝÝÝÿ¶¶¶ÿ£££ÿèèèÿ×××ÿÔÔÔÿûûûÿÉÉÉÍ BBBhüüüÿûûûÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿøøøÿöööÿóóóÿòòòÿïïïÿêêêÿØØØÿ¯¯¯ÿ°°°ÿâââÿÔÔÔÿúúúÿÅÅÅÐ!BBBhüüüÿûûûÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿøøøÿ÷÷÷ÿõõõÿóóóÿñññÿïïïÿîîîÿæææÿÔÔÔÿ¨¨¨ÿ¼¼¼ÿäääÿúúúÿÄÄÄÑ#BBBhüüüÿüüüÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿ÷÷÷ÿöööÿôôôÿòòòÿðððÿîîîÿëëëÿáááÿÌÌÌÿ¢¢¢ÿÏÏÏÿÿÿÿÿÂÂÂÒ#???hûûûÿüüüÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿûûûÿùùùÿ÷÷÷ÿõõõÿôôôÿóóóÿðððÿîîîÿìììÿèèèÿÝÝÝÿÂÂÂÿ§§§ÿÿÿÿÿÊÊÊÑ!???hûûûÿüüüÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿøøøÿöööÿôôôÿòòòÿðððÿíííÿìììÿéééÿãããÿÖÖÖÿ±±±ÿáááÿÃÃÃÓ%%%"???hüüüÿüüüÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿ÷÷÷ÿõõõÿôôôÿóóóÿðððÿîîîÿìììÿêêêÿåååÿÛÛÛÿÂÂÂÿÚÚÚÿ½½½Ò$???hýýýÿýýýÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿýýýÿüüüÿûûûÿùùùÿøøøÿöööÿôôôÿòòòÿïïïÿíííÿìììÿéééÿäääÿÝÝÝÿ×××ÿäääÿ©©©Â$CCCmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿýýýÿüüüÿöööÿæææÿÆÆÆæ___€Aeee€cccƒbbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚ddd‚ddd‚ddd‚ddd‚ddd‚ddd‚ddd‚dddeee}___x111]%  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿàÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀ?ÿÿÿÿÀÿÿÿÿÀ¿ÿÿÿÿÀÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀ/ÿÿÿÿÿÀ_ÿÿÿÿÿÀ?ÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÿÀÿÿÿÿÿÿÀ ÿÿÿÿÿÿÀÿÿÿÿÿÿÀ/ÿÿÿÿÿÿÀ_ÿÿÿÿÿÿÀ¿ÿÿÿÿÿÿÀÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀOÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(@€ B!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!) f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f fìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿ f fìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿ f fìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿ f fìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿ f fíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿ f fíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿ f fîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿ f fîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿ f fîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿ f fîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿ f fïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿëëëÿÑÐÐÿ´´´ÿÿ‘‘‘ÿÿ‘‘ÿžžžÿ´´´ÿÎÎÎÿáááÿêêêÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿ f fïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿáááÿ¥¥¥ÿtxxÿ\aaÿPVVÿQXXÿ\eeÿgrrÿjuuÿajjÿX__ÿ_ddÿuxxÿ™™™ÿ¾¾¾ÿÙÙÙÿæææÿéééÿêêêÿéééÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿ f fïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ«««ÿkppÿSZZÿINNÿDEEÿ[``ÿ‡‡ÿ••ÿšŸŸÿ¢¢ÿ™ŸŸÿ––ÿbhhÿIOOÿGMMÿSXXÿhjjÿ~ÿŠŠŠÿÿÃÃÃÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿ f fñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿæææÿ‰‹‹ÿ^ffÿKOOÿCDDÿHGGÿqxxÿ——ÿ¶¶¶ÿàààÿìììÿëëëÿÞÞÞÿº»»ÿ©®®ÿkmmÿCCCÿ?AAÿCFFÿDJJÿAFFÿQZZÿ›››ÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿ f fòòòÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿäääÿƒƒÿajjÿGHHÿKJJÿMMMÿmttÿŒ““ÿÞÞÞÿîîîÿîîîÿîîîÿíííÿíííÿíííÿÁÁÁÿ«°°ÿdddÿMMMÿHHHÿDDDÿ:99ÿJPPÿœÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿ f fòòòÿòòòÿòòòÿñññÿñññÿðððÿïïïÿïïïÿ‹ŽŽÿhppÿIIIÿONNÿPPPÿY\\ÿ}‡‡ÿÕÕÕÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿª­­ÿƒ††ÿXXXÿSSSÿRRRÿGFFÿSZZÿžžÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿ f fóóóÿòòòÿòòòÿòòòÿñññÿñññÿñññÿª««ÿuÿLMMÿPPPÿRRRÿNMMÿkttÿšœœÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ²³³ÿ’––ÿZZZÿTTTÿRRRÿHGGÿU\\ÿžžÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿ f fóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿáááÿ…ŒŒÿY\\ÿOOOÿSSSÿQQQÿQSSÿnxxÿ×××ÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ¾¿¿ÿ•ššÿ[[[ÿTTTÿRRRÿHGGÿT[[ÿžžÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿ f fóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿ¤¦¦ÿ{ƒƒÿNMMÿSSSÿSSSÿNMMÿZ__ÿ}‚‚ÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿÄÄÄÿ•ššÿ\\\ÿTTTÿRRRÿHGGÿSZZÿžžÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿ f fôôôÿôôôÿôôôÿóóóÿóóóÿïïïÿ––ÿbffÿQPPÿSSSÿSSSÿKKKÿ_ggÿ™ššÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿÀÀÀÿ“™™ÿ[[[ÿTTTÿRRRÿGGGÿRYYÿ˜™™ÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿ f fôôôÿôôôÿôôôÿôôôÿôôôÿÌÌÌÿŒ••ÿVVVÿSSSÿSSSÿRRRÿJJJÿ_ggÿµ¶¶ÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿ¸¹¹ÿŽ””ÿWVVÿTTTÿRRRÿHHHÿOUUÿ‹ŒŒÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿ f fõõõÿõõõÿôôôÿôôôÿôôôÿ­®®ÿ‡ÿTSSÿSSSÿSSSÿQQQÿKLLÿ_ggÿËËËÿòòòÿòòòÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿ•˜˜ÿw~~ÿRQQÿSSSÿSSSÿJJJÿGKKÿfiiÿÒÒÒÿìììÿîîîÿîîîÿíííÿíííÿíííÿíííÿìììÿ f fõõõÿõõõÿõõõÿõõõÿôôôÿ«®®ÿ|ÿTSSÿSSSÿSSSÿPPPÿKNNÿellÿÚÚÚÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿïïïÿÆÆÆÿ¥¥¥ÿ†‡‡ÿmvvÿWYYÿVVVÿWWWÿWWWÿQQQÿCDDÿIOOÿhkkÿ‘‘ÿ¯¯¯ÿàààÿîîîÿíííÿíííÿíííÿíííÿ f föööÿõõõÿõõõÿõõõÿõõõÿ¨««ÿvzzÿUUUÿSSSÿSSSÿOOOÿLOOÿhnnÿãããÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿÕÕÕÿ˜˜ÿittÿhppÿdggÿmmmÿuuuÿuuuÿuuuÿrssÿfggÿWXXÿW\\ÿ[eeÿgppÿÑÑÑÿîîîÿîîîÿîîîÿîîîÿíííÿ f föööÿöööÿöööÿõõõÿõõõÿ¥¨¨ÿvyyÿUUUÿSSSÿSSSÿNNNÿMPPÿgkkÿêêêÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿÖÖÖÿ¨±±ÿš  ÿš  ÿ¢¦¦ÿ¦««ÿ§¬¬ÿ§¬¬ÿ§¬¬ÿ§¬¬ÿ¥««ÿ ¥¥ÿ—ÿ”œœÿ••ÿáááÿîîîÿîîîÿîîîÿîîîÿîîîÿ f föööÿöööÿöööÿöööÿöööÿ¥¨¨ÿx{{ÿVVVÿSSSÿSSSÿNMMÿMPPÿiooÿëëëÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿáááÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿàààÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ f f÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿ¨¬¬ÿ}€€ÿWWWÿSSSÿSSSÿMMMÿLPPÿkppÿëëëÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿ f f÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿ®±±ÿ‡ŠŠÿYXXÿSSSÿSSSÿNMMÿJNNÿdjjÿéééÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿ f føøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ¹ººÿ•ššÿ\\\ÿTTTÿSSSÿNNNÿILLÿchhÿãããÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿ f føøøÿøøøÿøøøÿøøøÿ÷÷÷ÿÍÍÍÿ¡§§ÿdddÿUUUÿSSSÿOOOÿGIIÿ^eeÿØØØÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿ f f÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿêêêÿ©®®ÿuvvÿXXXÿSSSÿPPPÿEFFÿU[[ÿÇÇÇÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿðððÿïïïÿ f føøøÿøøøÿ÷÷÷ÿøøøÿøøøÿøøøÿ°²²ÿ’••ÿ]]]ÿTTTÿQQQÿDEEÿOVVÿ®®®ÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿðððÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿ f føøøÿøøøÿøøøÿøøøÿøøøÿøøøÿÌÌÌÿ¬±±ÿkkkÿWWWÿRRRÿFFFÿLRRÿŽÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿÀÀÀÿ‹ÿ¿¿¿ÿòòòÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿ f f÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿõõõÿ¯²²ÿ‘‘ÿ_^^ÿSSSÿIIIÿGKKÿmppÿëëëÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿÙÙÙÿmssÿ_kkÿŒŽŽÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿ f f÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿÊÊÊÿ³¸¸ÿsssÿYYYÿNMMÿBCCÿSXXÿÄÄÄÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿìììÿ‡‡ÿTZZÿT\\ÿ³³³ÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿ f föööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿ±³³ÿ¨««ÿhhhÿUUUÿDCCÿIOOÿ†‡‡ÿòòòÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿ‘‘ÿgooÿHJJÿjssÿáááÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ f fõõõÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿèèèÿ´··ÿœžžÿeddÿMLLÿ@CCÿU[[ÿ¿¿¿ÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿ“••ÿlttÿGGGÿW\\ÿ„„ÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ f fôôôÿõõõÿöööÿöööÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿÜÜÜÿ·»»ÿ›žžÿbbbÿEEEÿEJJÿillÿÓÓÓÿ÷÷÷ÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿõõõÿ’’ÿirrÿLMMÿHGGÿckkÿ¡¢¢ÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿøøøÿöööÿ f fôôôÿôôôÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿ×××ÿ·»»ÿ¨««ÿhiiÿDDDÿHNNÿmooÿÂÂÂÿíííÿøøøÿøøøÿøøøÿøøøÿÑÑÑÿ€ƒƒÿckkÿLNNÿMMMÿMMMÿgqqÿÎÎÎÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿùùùÿ÷÷÷ÿôôôÿ f fõõõÿõõõÿõõõÿõõõÿöööÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿùùùÿãããÿ³µµÿ·»»ÿ…††ÿPRRÿKQQÿ[``ÿ€‚‚ÿ¢££ÿ®¯¯ÿ¢¢¢ÿ‚„„ÿhppÿjssÿjllÿqqqÿa``ÿZ]]ÿv}}ÿóóóÿùùùÿúúúÿúúúÿûûûÿûûûÿûûûÿúúúÿ÷÷÷ÿõõõÿñññÿ f fõõõÿõõõÿõõõÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿøøøÿÄÄÄÿ³··ÿ©®®ÿ†ŠŠÿlrrÿemmÿakkÿbllÿlwwÿ}‰‰ÿˆ““ÿ•œœÿ¦©©ÿ¬±±ÿ¥©©ÿ‘ÿ•˜˜ÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿõõõÿñññÿîîîÿ f föööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿõõõÿÏÏÏÿµ··ÿ©­­ÿŸ¥¥ÿ˜žžÿ—žžÿ££ÿ«®®ÿÈÈÈÿêêêÿõõõÿéééÿÅÅÅÿ°¶¶ÿËÌÌÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿõõõÿòòòÿîîîÿêêêÿ f föööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿúúúÿùùùÿúúúÿùùùÿ÷÷÷ÿõõõÿñññÿíííÿèèèÿÞÞÞÿ f876- föööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿëëëÿÙÙÙÿÚÚÚÿÞÞÞÿàààÿàààÿÜÜÜÿÕÕÕÿËËËÿ f876- f÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿøøøÿÕÕÕÿ§§§ÿ¦¦¦ÿ©©©ÿªªªÿ«««ÿ¬¬¬ÿ®®®ÿ f876- f÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿøøøÿÐÐÐÿ§§§ÿòòòÿðððÿéééÿÞÞÞÿÖ××ÿ f876- føøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿøøøÿÑÑÑÿ§§§ÿÿÿÿÿþþþÿöööÿæåæÿ f876- føøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿöööÿÐÐÐÿ¿½½ÿþþþÿöööÿåååÿ f876- føøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿùùùÿóóóÿ¿½½ÿÌÌÌÿöööÿåååÿ f876- fùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿðððÿ§§§ÿÉÉÉÿåååÿ f876- fùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿóóóÿìììÿ§§§ÿÈÈÈÿ f876- fúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿôôôÿðððÿæææÿ§§§ÿ f876- fúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿôôôÿðððÿëëëÿ¿½½ÿ f876- fúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿôôôÿðððÿìììÿäääÿ f876- f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f876-///999999999999999999999999999999999999999999999999999999999999999999999999999999999999???::: ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€?ÿÿ€ÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€?ÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(0` €% / ] f d d d d d d d d d d d d d d d d d d d d d d d d d d ffU$ËËËÿòòóÿííïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿííîÿþþþÿYYY­)ÚÚÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿüýþÿüýþÿüýþÿüýþÿüýþÿûýþÿÿÿÿÿ__`¯'ÒÒÓÿýþÿÿöøùÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõõöÿôõöÿôõöÿôõöÿôõöÿóóôÿÿÿÿÿ[[\¬'ÒÒÓÿýþÿÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõõöÿôõöÿôõöÿóôõÿÿÿÿÿ[[\¬'ÒÒÓÿýþÿÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷÷ÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõõöÿôõöÿóôõÿÿÿÿÿ[[\¬'ÓÒÓÿýþÿÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõõöÿóôõÿÿÿÿÿ[[\¬'ÓÒÓÿþþÿÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿîïðÿêëìÿêëìÿïðñÿöö÷ÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿôõöÿÿÿÿÿ[[\¬'ÒÒÓÿþþÿÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿÜÜÝÿ½¾¿ÿ©ª«ÿ¢££ÿ£¤¥ÿ°±²ÿÌÍÎÿëìíÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿôõöÿÿÿÿÿ[[\¬'ÒÓÓÿþÿÿÿøøùÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ¿ÀÁÿvyyÿTZZÿMTTÿdllÿrzzÿw€€ÿpzzÿW^^ÿbffÿ‘ÿ¸¸¹ÿרÙÿäåæÿìíîÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿôõöÿÿÿÿÿ[[\¬'ÒÓÓÿþÿÿÿøùúÿøøùÿøøùÿøøùÿ÷øùÿ÷øùÿèéêÿ……ÿT[[ÿGHHÿTVVÿ|„„ÿ¤¦§ÿÅÆÆÿÆÇÈÿ²´´ÿ—œœÿZ\\ÿBFFÿCIIÿOTTÿV[[ÿ‹ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿôõöÿÿÿÿÿ[[\¬'ÒÓÓÿþÿÿÿøùúÿøùúÿøøùÿøøùÿøøùÿßßàÿv||ÿTXXÿIHHÿWXXÿ…ÿÔÔÕÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿÒÓÓÿž¡¡ÿUTTÿGGGÿBCCÿCFFÿ|€ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿôõöÿÿÿÿÿ[[\¬'ÒÓÓÿþÿÿÿøùúÿøùúÿøùúÿøøùÿññòÿ……ÿY\\ÿNMMÿPPPÿlttÿÂÃÄÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿ°²³ÿtvvÿTTTÿQPPÿNQQÿ„…ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿôõöÿÿÿÿÿ[[\¬'ÓÓÓÿÿÿÿÿøùúÿøùúÿøùúÿøùúÿ¨©ªÿinnÿMMMÿRRRÿWZZÿ}„„ÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿö÷øÿ¼¿¿ÿÿTSSÿQPPÿOQQÿ……ÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿôõöÿÿÿÿÿ[[\¬'ÓÓÓÿÿÿÿÿùùúÿùùúÿøùúÿæçèÿ‚‰‰ÿRSSÿSSSÿOOOÿ\aaÿ¦§¨ÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿ¾¿¿ÿ€ƒƒÿSSSÿQPPÿNQQÿƒ„ÿö÷øÿö÷øÿöö÷ÿöö÷ÿôõöÿÿÿÿÿ[[\¬'ÓÓÓÿÿÿÿÿùùúÿùùúÿõö÷ÿ¹»¼ÿv||ÿPOOÿSSSÿNNNÿ[aaÿØØÙÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ¶··ÿ‚‚ÿSSSÿQQQÿLOOÿ{ÿö÷øÿö÷øÿö÷øÿöö÷ÿôõ÷ÿÿÿÿÿ[[\¬'ÓÓÓÿÿÿÿÿùùúÿùùúÿÍÍÎÿ•˜˜ÿfhhÿSRRÿSSSÿNNNÿellÿììíÿøøùÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ¥§¨ÿquuÿRQQÿQQQÿJKKÿdhhÿìíîÿö÷øÿö÷øÿö÷øÿõöøÿÿÿÿÿ[[\¬'ÓÓÓÿÿÿÿÿùúûÿùùúÿ¶·¸ÿ“˜™ÿ]^^ÿSSSÿRRRÿMNNÿkrrÿõö÷ÿøøùÿøøùÿøøùÿøøùÿñòóÿ¿ÀÁÿ—™™ÿmssÿWWWÿVUUÿVUUÿJJJÿFIIÿprsÿ¥¦¦ÿÛÜÝÿö÷øÿõöøÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿùúûÿùúûÿ¯²³ÿ•ššÿZZZÿSSSÿRRRÿMOOÿnrsÿøùúÿøùúÿøøùÿøøùÿøøùÿÑÒÒÿœœÿx€€ÿ{ÿ…ˆˆÿ‰‹‹ÿ‰‹‹ÿ…‡‡ÿtwwÿkqqÿsÿ®°°ÿö÷øÿõöøÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿùúûÿùúûÿ­°°ÿ•ššÿ[[[ÿSSSÿRRRÿMOOÿmqrÿøùúÿøùúÿøùúÿøøùÿøøùÿèèéÿÂÃÃÿÀÂÂÿÁÃÃÿÂÃÄÿÂÃÄÿÂÃÄÿÂÃÄÿÁÃÃÿÀÁÂÿÀÂÂÿáâãÿö÷øÿõöøÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúúûÿúúûÿ¯²²ÿ™ŸŸÿ]]]ÿSSSÿRRRÿMOOÿquuÿùùúÿùùúÿøùúÿøùúÿøùúÿøùúÿøøùÿøøùÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿõöøÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúúûÿúúûÿº¼¼ÿŸ¤¤ÿfffÿSSSÿRRRÿKMMÿjnnÿùùúÿùùúÿøùúÿøùúÿøùúÿøùúÿøùúÿøøùÿøøùÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿööøÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúúûÿúúûÿÒÓÓÿ§©©ÿtuuÿTTTÿRRRÿJKKÿgllÿöö÷ÿùùúÿùùúÿùùúÿøùúÿøùúÿøùúÿøùúÿøøùÿøøùÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿöö÷ÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúúûÿúúûÿôôõÿÆÇÈÿ‹ÿVVVÿRRRÿJJJÿ]cdÿêêëÿùùúÿùùúÿùùúÿùùúÿøùúÿøùúÿøùúÿøùúÿøùúÿøøùÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿö÷øÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúûüÿúûüÿúúûÿââãÿ¥ªªÿ```ÿSSSÿJJJÿQUVÿרÙÿùúûÿùùúÿùùúÿùùúÿùùúÿùùúÿùùúÿøùúÿøùúÿøùúÿøøùÿììíÿééêÿ÷÷øÿøøùÿ÷øùÿ÷øùÿöøùÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿûûüÿúûüÿúúûÿúúûÿ°±±ÿƒ……ÿVVVÿLKKÿHMMÿ­­®ÿùúûÿùúûÿùùúÿùùúÿùùúÿùùúÿùùúÿùùúÿøùúÿøùúÿèéêÿqwwÿ~€ÿ÷÷øÿøøùÿøøùÿ÷øùÿöøùÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿûûüÿûûüÿúûüÿúúûÿßßàÿ§ªªÿgggÿPOOÿGJJÿsvvÿùùúÿùúûÿùúûÿùùúÿùùúÿùùúÿùùúÿùùúÿùùúÿøùúÿ„ˆˆÿY__ÿ‡‹‹ÿøøùÿøøùÿøøùÿøøùÿöøùÿÿÿÿÿ[[[­(ÓÓÓÿÿÿÿÿûûüÿûûüÿúûüÿúûüÿúûüÿº»»ÿž¡¡ÿ\\\ÿFFFÿLRRÿÌÌÍÿùúûÿùúûÿùúûÿùúûÿùùúÿùùúÿùùúÿùùúÿ—ššÿ]bbÿW\\ÿ¶·¸ÿøùúÿøøùÿøøùÿøøùÿ÷øùÿÿÿÿÿ[[[®)ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿúûüÿ÷øùÿ²´´ÿ—™™ÿUUUÿCGGÿnqqÿííîÿúúûÿùúûÿùúûÿùúûÿùùúÿùùúÿ•—˜ÿbhhÿJJJÿfmmÿêëìÿøùúÿøùúÿøøùÿøøùÿøøùÿÿÿÿÿ[[[°)ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿñòóÿµ·¸ÿŸ¢¢ÿWWWÿDHHÿuxxÿØØÙÿúúûÿùúûÿùúûÿÜÝÝÿ„‡‡ÿ\aaÿKJJÿSVVÿz€ÿøùúÿøùúÿøùúÿøùúÿøùúÿ÷÷÷ÿÿÿÿÿ[[\­&ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿ½¾¿ÿ¨¬¬ÿ|~~ÿX]]ÿX]]ÿ{~~ÿ‡‰‰ÿ|€€ÿfnnÿˆˆÿ‰ŒŒÿ~ÿiooÿž  ÿøøùÿ÷øùÿ÷øùÿ÷øúÿ÷øøÿôôóÿÿÿÿÿ]]]©"ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿßàáÿ½¿¿ÿœžžÿ••ÿ——ÿŽ™™ÿŠ““ÿ¡¡ÿÀÁÂÿÇÉÉÿ¸¹ºÿš¡¡ÿâââÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóòÿÿÿÿÿ```²#ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿ÷øùÿÕÖÖÿ»¼¼ÿ®°°ÿ­°°ÿ¿ÀÁÿèèèÿúúûÿùúûÿòóôÿÄÄÅÿéèèÿÖרÿ×××ÿ×רÿ××ÕÿÖÖÖÿßßßÿååæÿ666„ÓÓÓÿÿÿÿÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúúûÿúúûÿúúûÿúúûÿúúûÿúúûÿúúûÿÿÿÿÿ¹¸¹ÿ¾¾¿ÿÌÌÌÿÈÈÈÿÆÆÆÿÀÀÀÿÜÜÝÿuuuÌ!ÓÓÓÿÿÿÿÿüüýÿüüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúúûÿúúûÿúúûÿúúûÿúúûÿúúûÿÿÿÿÿ³³³ÿñññÿøøøÿùùùÿïïïÿëëìÿ’’’Ù 4ÓÓÓÿÿÿÿÿüüýÿüüýÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúúûÿúúûÿúúûÿúúûÿúúûÿÿÿÿÿ¶¶¶ÿñññÿþþþÿëëëÿêêêÿ˜˜šÙ0ÓÓÓÿÿÿÿÿüüýÿüüýÿüüýÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúûüÿúúûÿúúûÿúúúÿÿÿÿÿµµµÿãããÿìììÿããäÿ˜˜˜Ô -ÓÓÓÿÿÿÿÿüüýÿüüýÿüüýÿüüýÿüüýÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúùúÿöööÿÿÿÿÿ¶¶¶ÿÚÚÚÿååçÿ‰‰‰Ì +ÓÓÓÿÿÿÿÿüüýÿüüýÿüüýÿüüýÿüüýÿüüýÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúúûÿöööÿóóóÿö÷öÿ¼¼¼ÿÙÙÙÿ———Ò&ÓÓÓÿÿÿÿÿþþÿÿþþÿÿþþÿÿþþÿÿþþÿÿþþÿÿÿþÿÿýÿÿÿýýþÿýýþÿýýþÿýýþÿýýþÿýýþÿýýþÿýýþÿýýþÿþþÿÿùùùÿ÷÷÷ÿîëìÿÙÙÚÿË$ÓÓÓÿñññÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿôòñÿÓÛÝþnrs¬ÖÖÖüØØØüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüäáàü­ÅǶ !+ÿÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ €-+++++++++++++++++,/+}}}¬–––ÀœÏœœœÎœœœÎœ››ÎœœœÎ›œœÎ›œœÎ›œœÎ›œœÎ›››Îš››Îš››Îš››Îš››Îš››Îš››ÎšššÎšššÎÏ”””ÍLÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJÕÕÕÿôôôÿúúúÿùùùÿ÷ùùÿøùùÿøùùÿøùùÿöøøÿöøøÿöøøÿöøøÿöøøÿöööÿõööÿõööÿõööÿõööÿõööÿõööÿûúúÿìííýHÖÖÖÿõööÿûüüÿùùùÿùùùÿøùùÿøùùÿøùùÿøøøÿøøøÿ÷øøÿ÷øøÿ÷øøÿ÷øøÿ÷øøÿ÷÷÷ÿö÷÷ÿö÷÷ÿö÷÷ÿö÷÷ÿûüüÿîïïýIÖÖÖÿõööÿûüüÿùúúÿùùùÿùùùÿøùùÿøùùÿøùùÿøøøÿøøøÿ÷øøÿ÷øøÿ÷øøÿ÷øøÿ÷øøÿ÷÷÷ÿö÷÷ÿö÷÷ÿö÷÷ÿûüüÿîïïýIÖÖÖÿöööÿúüüÿùúúÿùúúÿùùùÿùùùÿùùùÿêëëÿÈÉÉÿ´´´ÿ·¸¸ÿÔÕÕÿóôôÿ÷øøÿ÷øøÿ÷øøÿö÷÷ÿö÷÷ÿö÷÷ÿûüüÿîïïýIÖÖÖÿöööÿüüüÿúúúÿùúúÿùúúÿàááÿ‡ŠŠÿVYYÿciiÿ††ÿ‡ŽŽÿmrrÿ]aaÿƒ……ÿ©ªªÿÁÂÂÿ÷÷÷ÿ÷÷÷ÿö÷÷ÿûüüÿîïïýIÖÖÖÿöööÿüüüÿúúúÿúúúÿÂÄÄÿ`ffÿQRRÿkppÿÂÃÃÿõööÿö÷÷ÿËÌÌÿ~ÿKLLÿGIIÿ`ccÿ÷øøÿ÷øøÿ÷÷÷ÿûüüÿîïïýIÖÖÖÿöööÿüýýÿúûûÿèèèÿlqqÿQQQÿ]__ÿ§©©ÿùùùÿùùùÿùùùÿøùùÿ¦¨¨ÿ___ÿOOOÿgjjÿ÷øøÿ÷øøÿ÷øøÿüýýÿïïïýIÖÖÖÿöööÿýýýÿøùùÿ—ššÿ]__ÿRQQÿaeeÿíîîÿùúúÿùúúÿùùùÿùùùÿ°±±ÿcddÿOOOÿgjjÿ÷øøÿ÷øøÿ÷øøÿüýýÿïððýIÖÖÖÿöööÿýýýÿÔÔÔÿx}}ÿSSSÿSSSÿruuÿúúúÿùúúÿùúúÿùúúÿùùùÿ¥¦¦ÿbccÿNNNÿaccÿøøøÿøøøÿ÷øøÿüýýÿïððýIÖÖÖÿö÷÷ÿýýýÿ¶··ÿpssÿQQQÿSTTÿ‚……ÿúúúÿúúúÿùúúÿåææÿµ¶¶ÿossÿZZZÿSSSÿGJJÿ”••ÿÚÚÚÿøøøÿüýýÿïððýIÖÖÖÿö÷÷ÿýþþÿ¨ªªÿoqqÿQPPÿRSSÿŒŽŽÿúúúÿúúúÿúúúÿ¹¼¼ÿ‹““ÿŠŽŽÿ”••ÿ”––ÿ‹ÿ„ŠŠÿ ££ÿøøøÿýýýÿïððýIÖÖÖÿ÷÷÷ÿþþþÿ¦©©ÿruuÿQPPÿQRRÿÿúûûÿúûûÿúúúÿøøøÿöööÿõööÿõööÿõööÿõõõÿôõõÿö÷÷ÿøùùÿýþþÿðððýIÖÖÖÿ÷÷÷ÿþþþÿ¿ÀÀÿ{}}ÿQQQÿPQQÿŠŒŒÿûûûÿúûûÿúûûÿúúúÿúúúÿúúúÿùúúÿùúúÿùúúÿùùùÿøùùÿøùùÿýþþÿðññýIÖÖÖÿ÷÷÷ÿþþþÿßßßÿ’””ÿVVVÿOPPÿz||ÿûûûÿûûûÿúûûÿúûûÿúúúÿúúúÿúúúÿùúúÿùúúÿùùùÿùùùÿøùùÿýþþÿðññýIÖÖÖÿ÷øøÿþþþÿùùùÿ¯°°ÿhhhÿMNNÿdffÿûûûÿûûûÿûûûÿúûûÿúûûÿúúúÿúúúÿêêêÿ¼¾¾ÿ÷øøÿùùùÿùùùÿþþþÿðññýIÖÖÖÿøøøÿÿÿÿÿüýýÿÞÞÞÿŒŽŽÿQPPÿKNNÿÜÝÝÿûüüÿûûûÿûûûÿûûûÿûûûÿùúúÿvzzÿdiiÿùùùÿùúúÿùúúÿþÿÿÿñññýIÖÖÖÿøøøÿÿÿÿÿýýýÿüýýÿº»»ÿ‚‚ÿHJJÿ†ˆˆÿûüüÿûüüÿûûûÿûûûÿûûûÿ‘““ÿ^ccÿ”––ÿúúúÿúúúÿøúúÿþÿÿÿöööýIÖÖÖÿøøøÿÿÿÿÿýýýÿýýýÿ÷øøÿ³¶¶ÿ€‚‚ÿGJJÿ©ªªÿøøøÿûüüÿèééÿŒÿWYYÿX\\ÿÃÄÄÿúúúÿþþþÿÿÿÿÿÿÿÿÿÙÙÙýJÖÖÖÿøøøÿÿÿÿÿýýýÿýýýÿýýýÿýýýÿÇÈÈÿ—™™ÿlrrÿhmmÿtyyÿv~~ÿŠÿ’’ÿyÿûûûÿÿÿÿÿéééÿ×××ÿÍÍÍÿ²²²þBÖÖÖÿøøøÿÿÿÿÿýýýÿýýýÿýýýÿýýýÿýýýÿíííÿÉÊÊÿ¦¨¨ÿ§ªªÿÐÑÑÿîïïÿãääÿËÌÌÿ×××ÿ¤¦¦ÿ¦¦¦ÿ¥¥¥ÿ±±±ÿµµµÿ! ÖÖÖÿùùùÿÿÿÿÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿüüüÿüüüÿüüüÿüüüÿüüüÿûüüÿÿÿÿÿÚÚÚÿÞÞÞÿÿÿÿÿïïïÿÄÄÄÿUUUvÖÖÖÿùùùÿÿÿÿÿýþþÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿüýýÿüüüÿüüüÿüüüÿüüüÿÿÿÿÿßààÿæææÿüüüÿÑÑÑÿ\\\pÖÖÖÿùùùÿÿÿÿÿþþþÿýþþÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿüüüÿüüüÿüüüÿÿÿÿÿÜÜÜÿÚÚÚÿÕÕÕýRRRqÖÖÖÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿÖÖÖÿÆÆÆÿTTTtÕÕÕÿçççÿêêêÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçèèÿêêêÿåååÿÆÆÆÿRRRpøðððððððððððððððððððððððð?ððÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(  @zzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿ†††ÿððòÿññóÿñòóÿòòôÿóóôÿóôõÿôõöÿõõ÷ÿöö÷ÿ÷÷øÿ÷øùÿ†††ÿÿññóÿñòóÿòòôÿóóõÿóôõÿôõöÿõõ÷ÿöö÷ÿ÷÷øÿ÷øùÿøùúÿÿÿòòóÿòòôÿóóõÿÏÐÐÿ ¡¢ÿ¥¦¨ÿÙÙÚÿ÷÷øÿøøùÿøùúÿùúúÿÿ¬¬¬ÿòòôÿóóõÿ¯¯°ÿ`ddÿž ¡ÿª¬­ÿfhhÿ€‚ÿö÷øÿùúúÿúûûÿ¬¬¬ÿ­­­ÿóóõÿÏÏÐÿ]__ÿ~€ÿö÷øÿ÷÷øÿ…††ÿPRRÿùúûÿúûûÿûûüÿ­­­ÿ±±±ÿôôöÿŸŸÿZZZÿ¯°±ÿ÷øøÿÕÕÖÿlmnÿLMMÿÇÈÈÿûüüÿûüüÿ±±±ÿ³³³ÿõõöÿ¨««ÿOPPÿ¼½½ÿøùùÿÄÆÆÿ¶··ÿº»»ÿ»¼¼ÿûüýÿüýýÿ³³³ÿµµµÿöö÷ÿ®°°ÿUVVÿ¶··ÿùùúÿúúûÿúûûÿûüüÿüüýÿüýýÿýþþÿµµµÿ¸¸¸ÿö÷øÿØÙÚÿjkkÿ‘’’ÿúúûÿúûüÿûüüÿžŸ ÿóôôÿýþþÿýþþÿ¸¸¸ÿºººÿ÷øùÿøùúÿ®¯¯ÿZ]]ÿÕÖ×ÿëììÿ„„ÿmppÿüýýÿýþþÿýþþÿ¸¸¸ÿ¼¼¼ÿøùúÿùúúÿúúûÿÇÈÉÿŸ££ÿ§««ÿ²µµÿÄÅÅÿýþþÿååæÿßßàÿºººÿ½½½ÿùúúÿúûûÿûûüÿûüüÿüýýÿüýýÿýþþÿýþþÿºººÿ¸¸¸ÿ¸¸¸ÿºººÿ¿¿¿ÿúûûÿûûüÿûüüÿüýýÿüýýÿýþþÿýþþÿýþþÿÅÅÅÿöööÿºººùÝÝÝ_ÀÀÀÿûûüÿûüüÿüýýÿüýýÿýþþÿýþþÿûüüÿýþþÿÊÊÊÿºººýãåâiÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿ¿¿¿üõõõyÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀSlic3r-1.3.0/var/hourglass.png000077500000000000000000000016131327442435500161740ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<ÅPLTEÿÿÿןqןqןqןqןqןq¾†N³{?¨p/žf!•]W ןqW Ö£z]ÅÒᔥ·¾Ûú”¶ß¹Öö¹Öõ—¹â“µß°Ïñ±Ïð–¹á’µÞ¦Æê•¸á¨Æé’´Þ¦Åé°Ëꈬ؂§Ô£Ãè¬Èé~¢ÑyŸÏ Âçq˜Ê§»Óq‰§Ñ™iÈ\žf!•]W W W Ñ™iÈ\à·‡æÆ•êÏìÓ¡ëÑ èÊ›å–âºÝ±‡Ô£yÄa®x>éÍ›éÍœçÇ™äÁ•ฎݰ‰×§Ï›sÂŒ]ÍÅÀÜ·šÕ¦}Ê•c¾‡O³{?¨p/Ÿg#˜cšk,§ƒSš”ˆÍãùìóû÷úþøûþíõüÕæ÷ÌáößìùÝëù´Îëàìùôøýæðû×çøÞëùÅÚòÉÝóâîú¶ÐíÎáôÌßóÐãôÍßóÒâóíôüçñûµÌéÞê÷ùüþò÷ýâíú·Ðë»ÓíåðúõùýúüþüýþôùýÏãöÓå÷Ñãöš¹Ý¥ÃæÀÖïêòûýþÿðöüÙèøÎâö­Èæ{ ÎÔ¹˜ÄÇÅÇØìãëöñõúÞçó¦¿ß€¤ÐtšËq—ÈŒ“£œbÿÿÿÛÖú¿4tRNSn³ÝôýýôݳnÄÄÑÑ**¸¸¯þþ®8ÝÛ8ÃÂÇÃ:áÜ8°þþ®¹¸**ÝôýôݳnK–RbKGDˆHÓIDATÓc``dbfae31eçàäâæa``à53·°´²¶±µ³wpä ð›™;9»¸º¹{xz9 ½}|ýüƒ‚CBÄ€ Âá‘QÑ1±qñ " ` *–˜”œ’š&.Á’Ré©™Ò2  ›•-Ç€ äsr¸ŠJyù…Ê*0¾ªZQdqIi™º„¯Y^QYU]S[Wß âk765WµT·¶Õ·wtê€üÒÕÝÓÛ×?aâ¤ÉS¦òA<‡ð Hè}]=ö€@}C#c‰z2œâ{ËtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/house.png000066400000000000000000000014461327442435500153110ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¸IDAT8Ë“ëORaÇÏ«óGø®­Ëfá%Ë0ÍF¶…3`¬fe®QMBàaÌ€)ËËlކ#Š"Í ÓÀr^›Õ4Ñ6S»P¼2•3™ö"ýv8•­Òæ‹ï›g¿Ïç9Ï÷y€Ø*ÝEûI:q+ΣH$·›ÛÂEÂZŸ:iÍ[~0ìÕ"w$è)>@Ò`dØÄÅ„ó:^»Šá¿ ŸîHħg“ÿxä dŸ*)2bÉÁäC9&ÝJ;Ë1Ú"FŸ.-â©N#·x”‰dY25ÚÀCð‘þF¼µéxjÈÀp“ãî* XEp—±©ûŠTòA¿:™ô–§P~+ÁÇ*ø›„¨ã`zj’Io->‹{jtëù°IS¨æKÉŒ„  "é‚(ÿm‚eô§Šà5žÀËcX\\Äòò2æfgàTC‡–‡gwn ýæ)˜„,J:ž$|Õ©ÓÙŸçÌ£á,LŒ¿ÂÒÒÿÊìÛ´²qWv]æ h,Ì@9go€ ›åzõiëÃÍyèÑfn|x7·¹óßùôñ=jrXh¸xe™{ÖépXÆ}¢aXë-«««Ì°R©„J¥‚Z­Fii)³Fa1Ý‚š?ƒÿ¹F“É´BQ3[[[ÑÖÖ†ÊÊÊMAL*‘Hömù ÃJ$a†+**`³Ù`·ÛQSS³)Ëå …¿EÏ/'t;/¶óÄþ7ÇP;bF‡Ã§Ó Z̬=xcGA§bo:ÛÊѦkó þ,뽊ªÁõ Àšp8 N—Ë·Ûºº:„B!hT¨ÓC;¤D¾C„DY|” w¤m!Ú8.K§x×r¤Ré¼Ñhd@º˜Íf‚ùÜ’3 ÙµY_Ó5©c4üe÷•]ƒÄv¿éNó}¬‡îvýTIEND®B`‚Slic3r-1.3.0/var/infill.png000066400000000000000000000003621327442435500154370ustar00rootroot00000000000000‰PNG  IHDRóÿatEXtSoftwareAdobe ImageReadyqÉe<”IDATxÚbyþÄê?€DHÊcD¼˜¤æq"TÌÖZ?u²:åLØL…*L„jĪ˜(X @óØ%P1ì K"k9Ù;XÔ10‚â}®!¡Ã°‚“Ïý@0À°,U‘`€a XxBBv6P!Ô$±tïÁÔq„§DFJ³3@€*o‰êAØIEND®B`‚Slic3r-1.3.0/var/joystick.png000077500000000000000000000010571327442435500160260ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÁIDAT8Ë•S=hÂPþž4At±¸”¢âà ´d)tµ n ¥àصÐEpº•ή"B77±[D§`‡HÑ‚à¿ñ/}÷ Al=8Ž—ûî{w—ï1Ó4qhÅb1´ÝnÕÕj^¯×X,?Óé4™Ëå´CìÌ0Œ@ öx< ]׃Nç§î±.'‚ÉdrÑh4Ðl6ÛíÆh4 9a 8Ùl–õz=A°\.…M ˲ˆŒ1A`‘MÀw€t:mú|>ðE §oNæ¸D¾q(ŠI’Ðjµà÷ûO뀃MºQÓ4(ó~ûPoo®ñúòÅýÙ±ƒr¹æAÛív2w10ĹÁÅ㘱d+½›ü.&ßR©ËR©”· ¨˜ J‹F£rµZÅ`0@¡PsŸ+WPj50¯R¯"‘H.CUÕ<#%r6#‹ÉœãñXrõÙ>ŸÏíèõzár¹ÉdÐn·™è€'e.]T*‘X˜UD>›ÍÄ™¾Ó9‘Hˆh@ ºu8Ú «p¿ Gº _kP’|6‘°ûq³Ùüs› Ûí¢^¯Û¢9tKTD£î¿`æôœO±?Òc¶ ™¶IEND®B`‚Slic3r-1.3.0/var/layers.png000077500000000000000000000021441327442435500154640ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<(PLTEÿÿÿtÇhsÆhqÃen¿bj»_f¶\b°X]ªSX¤OSžJN—FI‘AsÆgpÂem¾bi¹^e´[a¯W\©RW¢NRœIL•EG@Bˆ;oÁdl½atÇhsÆhqÂen¾bjº_eµ\a¯X\©SW£OM—FN—FI‘Ak¼`g·]sÆgm¿cjº`fµ\c±Y_«UZ¦PU LPšGB‰=G@Bˆ;f¶\b°XnÀci¹^sÆgrÅgpÁdl½ah¹]d´Z`®VY¦PV¢MPšGN—FI‘Aa¯W\©Rj»_d³Zfµ\d²Y`®W]«TZ§QV¢MP™GN—FGŽ@G@[§QV¡Meµ[_¬Ve´Za¯W^«TZ¦QV¡LQ›IJ“CG@A‡;A‡:TŸLO™G`®VX¥Pb°X^«TY¦QU LPšHK”CE‹=A‡:;5:4N—FI‘AX£NM•E[¨RW£NRJM—EHACŠ<>ƒ7;55x/4w/TŸLO™GY¥OTžKN˜FH‘BCŠ=>„89}34w//p).o)N—FI‘AQ›IK”DFŽ?<67z12u-.o))i%)i%O™GJ’BEŒ=?…9:45x00r+,m'(h$$c sÆgBˆ;oÁd;€5k¼`5x0f¶\/q*a¯W*j%[§Q%d!TŸL!_N—FI‘ACŠ<>ƒ89}34w/+k&'f##b ^[ÿÿÿâá‡ëžtRNS777777777777EEE ‚‚‚‚‚‚‚‚‚ ~~E ¢5:?BFJLPzJžE £=ØÙÚÛÜÝÝåÜëËËE £DzŠ–¦²¼ÑÆß±E£Jœ©¶ÀÇÌÛÐâ³E¤R¸ÂÊÐÓÖàÕâ±EE¸}ÖÚÝààáá×ᯞRÏÓÕÖØØÖÕ૞žãäâáààßÞ¦³²±¯®«¨¥¢¡¹çãßbKGDˆHßIDATÓc`@ŒLÌ,¬lìœ\Ü<`^>~A!aQ1q °€¤”´Œ¬œ¼‚¢’²ŠªP@]CSK[GWOßÀÐÈØ(`jfnaiemckgïàèäìÂàêæî1ÏÓËÛÇ×Ï? 0h>CpHhØ‚ðˆÈ¨è˜Ø¸ø„… ‰IÉ)‹RÓÒ32³²sró3ä-).)-+¯¨¬ª®Y 4¶¶nY}CcSsKk[{Çr @g׊îžÞø¾þ 'M^ vܪ)S§MŸ1sÖì9sWƒÖ¬]·~ÃÆ¥›6oÙº ’eBüÄÜGtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/lorry_add.png000077500000000000000000000012611327442435500161430ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<CIDAT8Ë¥“KHÔQÆÔR‡4J|…„fEeEb»ÊBªmЦˆˆ ÜD7AHÑ¢2z¬ŠB%m&PÙpÑ[\ØC!z‰(Þ{ν-æŸ  žÍw¿Åù8çûî ¼÷,¤²X`E†ïžSÕrçUAÕ"b1³h­AÄÄö_èÝû—€ª–¯ØÑ„÷ŠW‡w‚sŠWÁ«Å©àUxÕu{Ï?'±8'ÌL¤ð*8±8µƒCn´”›…mÜ8ßãUU±r2~i_GDÄPR{à¿»jo7çÕ¡Î3öu*ûjçË‹@Fàì“ §&Q㣨QdFgyMY>b#žu•El^]Ä•ûýÅkg8±<ÎϬÑpd‹†£ÿæK–Ur|lÑÅ£ŸÇ©®(Âˬ€³5é°ÑÎ6:1#ÅbÅŠ#96EÚèc¦Q1ä–d—Ðy'aŠKÙÒA:{1•§ï…!Z°8Bpp÷&ï½Ã9‡÷¢ó>ý'Z[BõÞ¶¬ÝJEñz†Ò?ØÇ§‘o—³<} ¦ìÇ¢ªzÊÖïdøk®¬k"ºj;#?rº»ïƒìªüéM5Ñ,eci#Xê74œŠ„)N$m@¸‹ÅšÃ÷I€ñ©ïy‹‚šÖàÌ®ºÚÇy€d2æÄ~oîø>ñez(õ<ïm*NKãZcGÉËΘž×19ï.÷¿{NºÚÉ "Äß<¸Ì÷œë›ËZÕ I ½ÿZªå<0€y=XöIEND®B`‚Slic3r-1.3.0/var/lorry_go.png000077500000000000000000000012731327442435500160230ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<MIDAT8Ë¥“KHÕaŵËèš©i))QjP‰QQ-ÒDE‹ U»‚hSë1° …‹P´‹­¢K“k¡µ 3{ˆ¦·H ­ìþï÷ÍÌ×⪛Š†Ã™ÅáÌ& !0—ÊbŽ•Óëôˆª–š)ª‚ªGÄ#âfÑ{‡ˆk;ÐÔ¹÷7U--ܶ” F0ÁL *õ˜ A…÷nîù£™žLT0ñ˜ú ŠÃı`ñr®åµpåü“ ¢¨¨Š—“]—ö_ÏqUüç®ÚÙAãÑZÔ#c?²[ïö^2çî ?ùu†8E"iåkK"^p¨)O°qU‚Ë·ŸçäxŸæÄ².~f M[öè´õž»´œÖüvîôLqlÞjÊŠñÎgÎè}óu)dºÕ¥P£.Æ|Œ‰'ÇŠ‚*Z;wÒóntV ǹÇü¼¢Lâ’Iþê·6B¶Ç™à&ú)Í_MUñf¾ÇS\ìØ„êY¢#»6„ 3##Lcéñ»kŽ¡ÁPSŒÀçÉ yöá1½CO‰5½$ëΣ—Ñ«¤LTn¡d]=ýcQª¼v±84CãoàýX©q†¾¾gÃʬ)©#–0…¨®®Þ´)àpªö [­?˜"¦h0>M“¿¨˜—»yôúáW§4D{¦ÃW+,vgŽX•5Ñ–Š=ô wÓ>ÐöÙ ÉæÐýï7®kÊšª+«ÏíhuFC²9¼øoŠÆhJ-;7eZñ¥9 ÎÌn¡½þÈèIEND®B`‚Slic3r-1.3.0/var/lorry_import.png000066400000000000000000000014361327442435500167260ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7Šé pHYsÃÃÇo¨dtEXtSoftwarepaint.net 4.0.21ñ i•›IDAT8O¥’YHÔAÀÿÕKôÔCAСÑMe¤¥¥nbtXYÐíµZ[h™(ºj™YÙ[ZfºÙ†niéªmµ«›¦m­W^[¢’tÑ=ôýWˆŒ¥ˆ~ÌÌ7ß÷c>f$à¿pü$[ÁþW—¢i¿¸Ö9Mê ,ª<8¹sfÆ#k¸â‹>ÑóŽSÁ`ñ{[5ïºõ¼í(çÍ“R^·êxÕt—4 4æó¼þe‡ÜD¾A[no»*Db®HTÓ_{š^c=†£<­L¡ûV}5gY~_e «’îáyØðÍ=¶Rî4©ƒÅü÷á“l¢Îö‰Ú.;Eæ,‰¾ùQ„%i°ß¤Ê>6_l#@ÝÂÚl+þ™d© x'ÖãyÐLøi+^ w0vØyó>……áºA¯$ÕŸtôú¬: [E]eñ´ëÐv-’–+a4]Þƒ©$†)‰£˜©ƒ¥ÇÎ'!˜¤Ôd¬càAž£×ޱ<)Ž¡õjÍ…!X/í¤LíÏBåxvk¼Y1–<ãµpÙ^8$0(eô›ÏÑkRÑs÷¤¸É1lútºËS¨ÒÊ™—:Žà"çï+ÙU° ÷ðΞˆŸj29S¿K[|æè=—M+g³Ñk+\ذ|>«§0-~$r­9ui­ÞÇå†L4Yh-§(y¬b{žëÐ[ºººö‡††…X£P(˜ž<‚…äÖ¥“VŽR$$rŽ"ɾ« ´YMHÁ‚ŸA£À.P ¾L‹3F¡•¡y˜…ÊG±U…ÎzÆQ|«å<‘EnÕ3dªIÄ]_ï(LºHpþ|"4‹ˆ)ZŠB»ÜyÑïlÍu!U¿ ü%b;ülØæO„‰~÷j<Äò×8Ò.PÅtø•XIEND®B`‚Slic3r-1.3.0/var/map_add.png000077500000000000000000000015041327442435500155510ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÖIDATÁË‹Uuàïwî¹sçÞ;;ŽùhÊR!u„$ÑHmrY„»6µÈð_Èu‹( -Ú´(PL‹JÄ R45IÓÇÇ<ª3÷œû>÷ô}áÀ¡ýç3¹R©€ ùÐòâò÷qc¦1÷ùÇ'„( û‚B!€V?EP‘bX(ä>>CÑ71^—¼»Ãä§+/oP™îší­(WŸ´¶RR)k¶zX%@§Ó•¥-Éj¢9–û÷Y:_ü¥È;¢Þivª×Ít²Ô°— ˆ`ttBµž¯×Aù­-F?8/Ο²±qMg´mSõŠÊÈ’^û®Rô¶€8šI&M»ÈüºðȽ~dý3¹çNÜ´p0óxþ3WïÍKÛm½vÓ ;*b!¨Ojm¨ZcÑÆ…¶;{vJš+®=¸àØÙÃàØw‡Ý^¼"‰ƒ\žç6Mí¶©AAØŠW˜Áþlj‹WNÙ³ó%'¯~b$ÄÎ_þÑ”YáõC¿]73ýZ©#€x8üÃòðoC‘XìhqòÌÿM š÷šWIEND®B`‚Slic3r-1.3.0/var/note.png000077500000000000000000000013441327442435500151330ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<tPLTEÿÿÿþß¶úÒ¢ùÑœøÍ—÷Ê’öÆŒõÂ…ô¿~ôºvñ¶nð²eð­]ýܲÿþúþýúÿýúî¨SöÌ—ÿýùþûðþüðýûîýûïýûðþý÷í£JõÈ“ý÷áùêªùè£øçøå–÷ã÷áˆö߀õÝwûñÈëž@ôÅŒý÷Ýøè¢øå•÷ã÷á‡ößôÛmûðÄê˜7ð¹yüöÛøçœ÷á†õß~õÝvôÙdûðÀé”,î¶qôÑžðÊxðÇrðÆní¾`ôÛlóÖ[ûï¾è#ë­^ðÃüóÓüóÑúí²í¼[ôÚlôÙbóÖZóÔQûîºåŠì¬]ë­Uë¯Gùé¬úê­ë»VóÔPóÒIùí·ä…ë«]øã´æŸ2é«;øé¨ëºNòÒHòÑBùí´ãë§Uùæ¶ñÑ•è§Kë¯ZîÂ}ûî»ùîºùí³ùí²â}ê£MèžFçš>æ•5âŒ⌠ä!ã‰ãƒá à}ßyÿÿÿ’í¡›tRNS@æØfbKGDˆH°IDATÓc` 021³°²±sprqó€xù@€_€O@, $,""*&..!!)–‘•“WPTRVQU ¨khÊkiëèªèé€ Œµ´MLÍôÌ-,ÁVÖ6¶vöfæŽNÎ`W7wO/o_?°@@`PpH¨·OXxD$X *:&6.Þ',!1),’š–ž‘™•‘“›È/(,*.)-+¯¨¬"Æ«ì »ÕnMátEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/package.png000077500000000000000000000021321327442435500155550ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<gPLTEÿÿÿØ´MزK×°JÖ®HÙ¶NØ´MײKÕ¬EÔªDÓ§BÚ·OÙ¶NØ´LѤ?Т=Ï ;Ù·OÙµNÎ9Íš6Ù·OÙµMË•2Ø´MÉ’/ײKÈ-Ö°IÇ+Õ­GÆŠ(ÔªDŇ&Ó¨BÄ…$Ò¥@Ã"Т=Ï ;Î9Ä#‚"€ Íš6̘4Ë•2Ć%Ä#‚!Ê“0É.ÈŽ,Ä…$Ã#Æ‹*ʼn(Ň&Ä…$êÕœç̈åÏ’üøæþöãòݯ÷ä²áÀràÆ~÷îÑÿÿöÿþðûíËÚ­P÷׋ùáªòÖ•Û²bíÙ¥õëÒíÞ¾ÞÉ•ÛÉָpݹiõ×õÏøÛúãªìʄզQþøáùëÍíÒ’ëÌ„å¿oÛ±VÈ”;úìÎÿõÙÿê¹þß•ÿÕwÿä¥ûÜ„ýøâÿóÔúä°ñφõÐõÐxä±Lÿé¶ÿá›þÖxõ½@éµ=ñÕýöâÿôÚÿóÕÿë½÷Õ‰õÉié´LûÚÿÜŒùÄHì¶8è¿Hè»OðÐŒüöâÿô×ÿòÎÿïÈÿëºûÛ’ñÁVùÂHð½;ìÅGé½EæµBæ±GîʈÿðÉÿí¾ÿê³ÿç­þÙ|ïÇHêÄCè¾Cæµ?ã«:á§@ìŃþûçÿöÝÿïÁÿë·ÿè«ÿä¤þá–ëÆHé½@æ´=â©8ÞŸ2æ¶kîăܽwöå¿ÿöÛÿîÁÿå¥ÿãŸþá”êÁFæµ:âª7å¯VíÆ‡ä³tÊJàÀ}üîÇÿòÌÿè¨þà”çºAä±EïÊŠëÁ‚ЗSåÄ‚ÿôÌÿïÄñÒ‹ðΊפ_ëÍâ·oÈŽ@ÿÿÿŸ™pÜ;tRNS+¯¼1„ïóŒeÛàl FÂÈMŸþ¦ûûððððððððùø»ÁeÛàm …ïó+¥þ¬1F¾ÄMñ*NbKGDˆHùIDATÓc`F&f`ec·¶áàä‚r¹yxmíìøø@|A!gW7wO/oaQ1_?ÿ€À àаðˆHq‰¨è˜Ø¸ø„Ĥä”Ô´tI©ŒÌ¬ìœÜ¼¬ü‚¢âi™Ò²òŠÊªêšÚºú†Æ&Y¹æ–Ö¶öŽÎ®îžÞ¾þ ò Í™'Mž2uÚô3gÍž£È 4wÞü -^²tÙò+W)3¨¬^³vÝú 7mÞ²uÛöª jê;wíÞ³wßþijiª£«wøÈÑcÇOèB}cdlròÔiS3$ÿš[XZAXç2R95uºÒtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/package_green.png000077500000000000000000000021351327442435500167400ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<jPLTEÿÿÿØ´MزK×°JÖ®HÙ¶NØ´MײKÕ¬EÔªDÓ§BÚ·OÙ¶NØ´LѤ?Т=Ï ;Ù·OÙµNÎ9Íš6Ù·OÙµMË•2Ø´MÉ’/ײKÈ-Ö°IÇ+Õ­GÔªDŇ&Ó¨BÄ…$Ò¥@Ã"Т=Ï ;Î9Ä#‚"€ Íš6̘4Ë•2Ć%Ä#‚!Ê“0É.ÈŽ,Ä…$Ã#Æ‹*ʼn(Ň&Ä…$êÕœç̈åÏ’üøæþöãòݯ÷ä²áÀràÆ~÷îÑÿÿöÿþðûíËÚ­P÷׋ùáªòÖ•Û²bíÙ¥õëÒíÞ¾ÞÉ•ÛÉָpÞºjõ×õÏøÛúãªìʄզQþøáùëÍíÒ’ëÌ„å¿oÛ±VÈ”;úìÎÿõÙÿê¹þß•ÿÕwÿä¥ûÜ„ýøâÿóÔúä°ñφõÐõÐxä±Lÿé¶ÿá›þÖxõ½@éµ=ñÕøöÛÿóÙÿóÕÿë½÷Õ‰õÉié´LûÚÿÜŒùÄHì¶8è¿Hç¸HñÓÔç’Øå€ýñÈÿïÈÿëºûÛ’ñÁVùÂHð½;ìÅGé½EæµCÔ­9Ì҈Ɗ(âí¨³ÖAºØIääŒÿê³ÿç­þÙ|ïÇHêÄCè¾Cܳ=©®-ˆ±)»Ó…þûçùóи×F®Ô9ÃÙPòâŽþá–ëÆHã¼?±¯0„¬$­$¿gìăܽwöå¿ÿöÛë螬Ó7¬Ò7ÑØU¼¸7…ª$|ª"©·MëÆ†ä³tÊJàÀ}üîÇþòËÐÝe¨Ñ3‘°5èˉëÁ‚ЗSåÄ‚ÿôÌúî¼äшðΊפ_ëÍâ·oÈŽ@ÿÿÿPñÜŒ:tRNS+¯¼1„ïóŒeÛàl FÂÈMŸþ¦ûûððøúû÷þùø»ÁeÛàm …ïó+¥þ¬1F¾ÄM?€7bKGDˆHúIDATÓc`F&f`ec·²æàä‚r¹yxmlíìùø@|A!'gW7wO/oaQ1_?ÿ€À àаðq‰È¨è˜Ø¸ø„Ĥä”Ô4I©ôŒÌ¬ìœÜ̼ü‚¢bi™’Ò²òŠÊªêšÚºú†FY¹¦æ–Ö¶öŽÎ®îžÞ¾þ ò'Mž2uÚô3gÍž3wžƒâü -^²tÙò+W­^£Ä ¼vÝú 7mÞ²uÛö;w©0¨ª©ïÞ³wßþm:¬¡©tª¶Žî‘£ÇŽŸ8©§oõ¡‘ñ©ÓgLL‘ükfna aRÎÂ/ VtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/page_white_go.png000077500000000000000000000012761327442435500167730ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<)PLTEÿÿÿøøøûûû”””•••™™™ 5‡*{% {wüüü :ùùùüüüÕäÑ!| 2üüüøøøôôôõõõñññïïïéééççç÷÷÷ùùùóóóðððêêêöööòòòëëëûûûìììæææíííp¦>eŸ1íïëúúúi£9³ZW˜(öøôo¥=n¤9h¢5bž1|¯UªË‘t«OFk£7°Î–­Í”¨Ë¼t¡ÇŠh¥FcŸ1Žºo‰¸k…¶f€³a‚µg˜Âƒ\ <[›)©Ê¥È¡ÆŠžÅˆ…¶j—‚f¥HR—"J‘D<‹^Ÿ:–Á€b£F4‰3ˆ _¡C6‰{ÿÿÿÆ"÷–tRNS36 ðý‘‘‘?ýüî1þW4õýõ÷PZ¤€bKGDˆH»IDATÓMÏÕÂ@EÑÒâî6Ð-ÐâîîîîüÿO0a?®äææ„ˆ¤pb "¥2ðÎ%ÿ%sÓ4Íx¼À§@¢¤Ë±¬?¼[%~Çq,/„Ð¥D 좙H0ŠEðÄþJ<‘üJg²¹ä ÅR¹R­©¿Po4+­v§«Ñbè5ûƒáh<™ê0Ìæ‹åj½Ùê ŒvûÃñt¾\Mp‹Ùbý¼¹Ý6‚ÝŒ×;žNÒN¼ ‹Û@;=Œ9:Š6€Íu‚Íx§Ùœ¢Ø˜¢Ø——ÒƒÐyÎv~Ët{Éq¡×—Õ“€Îv¦Ù›¤Ø™¢×˜¡×–žÕ•œÔ“˜Ñ•ÐŒ”ÏŠ^­W}Ës£Ø™‡ËywÃisÂeqÁdsÂgqÀf”Ï‹Z©SzÇpwÄm…É|rÁeoÀbl¾_i½]f»ZψmµfR¡LNHJ™Eo½f™Òm¿`j½^h¼[d»YaºVo¿e‹Ìƒ‰Ê‚ˆÊ€F–Ak¹c–Ñi¼]cºX`¹U]·Rk½bˆÊ…È~„È~B’>n¼ej¸bzÀr“Ï‹d»X_¸S[¶QYµO‡Ê€b¬\B‘=?Ž:•Ï‹’ÏŠrÁiŽÍ†ŒÌ„ŠËƒf»]E”@e´^‘ψa¹VÍ…lµeOžIc­]ƒÇ|Æ{A)0oBDQn¿Å—2½QϾ+Qn.‡š,T‚ Á…B˜§©¡ŠÂ2é=ˆÊÒˆ(ꊨRùù-f n‚а±¾…¶ {ùQÌsoðZ¶íÀɾã.¢Ô­ªC͈-áPúØoÃÉξggÓ>æ’C“èèŠkË/§ÛPœ‰ïã´×wðòÃ(êÆ»é×ÄAßç°{ó~æÂOMôO—åYn˜ »ÿ4AQŠˆ 5[3§f'©_³á÷ ¼éÿ’‡KAÍH¯ë@ÔÈ~Â¥è7/“X%akCšLóaž¼ë§oìî§DèÌvû«áÉØSDAD‹·NŒW¼z@+P†?<Œ£¸Šûc}£3Ûí£¿sð/Õ|!Ê«•­.˜6çº}bqþ ÒF•äóKQøIEND®B`‚Slic3r-1.3.0/var/printer_empty.png000077500000000000000000000006501327442435500170660ustar00rootroot00000000000000‰PNG  IHDRµú7êgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿ‡Ì¿IDAT(ϥѽ+…qÆñÏÃ“Ž’”Éf9 %2˜°Éÿ`,þve‘ '³:«ÅnĤœ¤“³Îñòœ—ŸÁKOƒ{ºëú^÷}Õ¿OÛºøsÉ‚ %XRÀf§ÉA3ÊpÖ‰•Ùätÿ™(Ø\¶ÝßÕžrܹ¬&ë…|´17p<®÷‡ï%GÎçc[Súìü¬Yr³Ë`Qî›|!+«07;š¸–ýŠøóÊ*QÜPDÙ«j èr¯ˆ¢¸®„' I h¨)á^\— ã/jUT£ÔÅIë¡­[Y=ž,¸Õ-ï%Óõ±á”ûQÍ "áÌAôï6ßT(]¥rý:tEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/script.png000077500000000000000000000013541327442435500154730ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<~IDATÁ1lTeàïÿß»»^ w¥@J àä`4: ÄMŒ†ÄÁÙ¸0:bœ4qb6ÑÁÉQÙtp’ÈŠ‰‘èড–¶\Û»öýïýï÷ûB)\ýîÑE|þìêÒ¥EÛ[´½¶ïvý ûx‚Œ]lãküXô]÷Ê‹gŽ]úèõÓ`žúé"õÓÝ£|6µì7Ùƒ'~ø{þ®Õ}×­O†‹¹m'+5]Ï~ f-OfGÌŽØ>促 >¾ñÐ¥ +ž?58]ä¶];>Œæ ó£,Æ FU+*AèòžŸÿÙõÛÃÙF SZŸŽ+³Ã΢)b,ªHÌA©U…RÙÜk|që¯=\­º”ίOfGE…*± S)êõ…<ȺÔ]øþÃ×v"@NÍù3Ó‘y*B¤ ADD„B)tM#§&C W®ß×UŽQÊYTPdÄH›³ƒù¢ÃDèštzˆ Q ãÛ®I›7?½R BNÍr­WGª‘ôèû@a¹Ž¶våÔlÄË×nœêRº~ñ¹sï6³ýlžÈ¥¡/1Yf{o¡Ki Î)½‰w~½{ßîaí )Ú\4mº^—{})Ö¦S¼}Æãí…œÒ@ÛöåwßxaüÉû¯€\hs‘:¾¼¹ayÀþÁBnÛm€:·íýÇOf¾¹u×ê±±ÕÉ’Õ•‘éÊÈñå¡Ñ0ÕÑ{—×j¶vöå¶ý î»îÛÛwî½}çÞyœÄIœÀ L—†ƒÁÒÒÀdelu²ì÷?ý‰Ÿþ{Š;,¦EõIEND®B`‚Slic3r-1.3.0/var/shape_flip_horizontal.png000077500000000000000000000006231327442435500205500ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<%IDAT8ËÝÓ=JQà3ù1>4-ÙM .ÀÖÎz nÀf@D› ‚.ÂBA±ÁÂ4)Li)™Iî9×Â‰Š‘`ãYÀ÷Þ;÷¾ÈÝ1OJ˜3œÝÃémÞ€½‹a÷ü9ü =1!ÉcÊ“™ÞMÞ2y×ø^®$ê&½Ak&ÀèéúJ)L“cc­ŒJN®³v#DF- …PV—Ê£§ö·ÀñUŒžÖkrLÓ ¯±XÌ”n<†/£'Íz)®–£ƒ*ž`Âh,˜ÍF56*ù^ŽZFï./D˜§SÓ‰Ù˜åä ÕÝÚ¿ÿ(´R•Rà 耨Xq£0xÉ ”CîAòÀ&Dÿô/ü&o~ß°ŒÖÙ ÜIEND®B`‚Slic3r-1.3.0/var/shape_handles.png000077500000000000000000000010321327442435500167560ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¬IDAT8Ë¥’1‹Q…¿‘QÐB\AØvI M~Â"ÿ"Xæ„ü„€d‹”I¿e‚v6ÊÚhé$M$³èÂÖ&˜÷îÙ"o& F ½ðàñÞ=‡sν‘$þ§b€Á`JªHJz½^ýo€n·û!Ïó—ιd2™Ôãð^i·ÛÌf³Ú›w72 Þ™ao°Ýnét:ŒF£Z©À{ÿu:6ãGOy~v è€äöÉ9ÃáçÜ'€¨È`ðö§ÎÏì’À¤’ÈL˜‰åMÆ ó"*äz$̰¸Û1Iîí8DyÛ5 Ì `%° tî30/,4íš‹»í•Ìéws†7•>uàYÁR¡Ä"p¼·Òÿ1É^‘ÎNYðïãz*Œò @IxRÁk`Áûá8²**’D«ÕJó<¯<|üŒW‹£Ä¥Kâòâ5ß“Ïxï“,Ëê÷²,«ôû}n,Y\¯Y\o˜§k«_ÌÓ5óÕ†dµ&I7,¿]1qÎÕvó—h6›_†U«Õ+…úÓ‰ãø}E>JÚ¯ò¿Öù5¼oqIRriYyE%D ªº¦¶.§¨¾¡± "À/ ¦…š…1=Ç|&‰P V¾tEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/slt.ico000077500000000000000000003442711327442435500147670ustar00rootroot00000000000000 KCf€€ (±C@@ (BÙK00 ¨%Ž  ¨©³ hQĉPNG  IHDR\r¨fCIDATxÚí}iÇuæëkº{fz. Ι@<ÀÅ[EDË’%®-.IQ&%‘²Ö»²¹ÚupxWëba[\o„þ¡Xy+y}Û²e‹â…“qß @`îûž¾7¿¬ÎžšBUwuwVwWw~d¡©ÎÊ:Þ—ï½|磊êžJw@AA¡rP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PǨfðè6¯®¯ÕÜg…ÜHÑÍ÷/ɶtæ}Z÷^¡ ¨faò³Í—yõê^«¹Ï ù‘6lÉÌ–2lŠ Ê€j¦ÛØÔmÞ̦ ÷÷Ï]‚– žù,^´œÔývÕL-l ³-BKÁWéŽ)”!ôl!ô‹™÷¸·ÞÌ~Ø'J˵ɨV€ºß̶v¶Ÿ~úé¯|ûÛß~zaa!YÅ}VÈÀëõæúó2{qq‘nܸ‘<þüÔO~ò“7ÙûwØ÷§Ix4š"ɨVa °­‰4ðýÎïüÎw¾÷½ï=[éN)8‡t:MSSStùòå™Ý»w÷~÷»ßýO###{H3ýb™M€2 $Áð[¿õ[¯}ÿûß)‹iöÈ鶬vªíX²Ž ¡Ä&Þ $“Éeßë7 •Je_ñx5n‰D‚·…¿ãµ±±‘V¬XA¡Pˆ†††èµ×^ûñøÃ×XS¤ >á4T$ ® €o}ë[¯½þúë/áÑ?ˆ¦'T&A«”@—û¸zÁ6~¶"=á7ÛO?6ûüü<ÍÍÍñ÷·Þz+­[·ŽÞ~ûí+/¼ðÂèëë{‡4“@˜Š$ æ€ŸTì•&@ŒòFB#¾ñ³ ào¸¯xÇãF9 ŒÑêÕ«iûöí4>>NÿøÇ_>{öìÿ%ÍQ¨Ÿ-P(5IËNPiRkä7ûÎHVÄFÜg@??¿Ï~ö³499IŸøÄ'¾qêÔ©?#m6Hø ”WF<8Å<ôŠJG¡$`¶éI@ï$áÇ}^XXàÛõë×¹oà©§ž¢‰‰ Úµk×o¾ÿþûÊšh$m†@˜ E n {Â5l”›ôß ÁÖïcô ˆý¬4áÄ+¦A³³³téÒ%Ú±c7`"ìܹó7÷íÛ÷ÒbDÄ4¡š(uGËN¾†ÉÀÉcš9õß[ ¿xµšEþü‚€cþ˜Ðºººø÷O<ñÄ7÷ïßh£¥@"eˆº&€eB™ÁJ0Θ9 +Aø èðLOOÓÕ«Wùá¯üʯðßÌÌÌпøÅo¾ùæ› VZ2 Ef¥FÉ \$`æ4ÓÌÌá ÔÏ @htt”FFFèùçŸçq@>Ô®]»^yÿý÷ÿ7iÏ ƒÊ(® TkPîc9qÌbIÀ+ ÿ^8@ÀT ‚[·n¥‡zˆkÐ`"|úÓŸ~eß¾}?"-,žÙTœ€ ¸’²/ƒðÔª6 ó˜V>«ùñÙ8# Þ G  ;¦ùw_ûÚ×8´¶¶RGGw>öØc_;tèÐOHË#S„ŠòÀÕ= E?®U°P¾a«÷B€pƒ`@ €Cf€pvvvR{{;÷<úè£/9rä/I 怚"Ìš €ìÉÔ”ûX2Ž™/l8 ècDPps€óš››‘EÈ_AÐðÛ|ðEFÿ´$"5;5Eü„jp¤v“³ÐHùâ¬LAЄ£__=ùä“|:3pú|>Nð 0ÂHíܹóåü9iÁB ¥ X æ`ÙÉ)gaEŽiåõ ÜhWŒòúß²IB ˜ D‚0êßu×]ôÈ#Poo/ÿ5@ØðÝG?úÑ üÒ¦H͘ÂU€¢Ú#)hÈEùℇ ’ƒ°Á€óï¹çžCí¾†è—ßïçšüLˆ?õÔS/¿ûÀsPæ€uGü¤kÈWà6Лⳕ   Öû è_ýêW¹`ì/H"˜ŸŸö³Ÿ}ùwÞA4˜pª‚£Ô%dO^iŽÓ*Èø‘ôSȳ"C3@ÐDt!HŽÁ•+Wâ·‹ŸùÌg¾¾oß>Ì Ì"Aú:ƒuKuMÙ‹ 4G™o& W^€ ½ €ï¿ò•¯dS‡±0„&¿üÐØßbO<ñÄ+»wïþ+ÒfàՅ꺹"ýŨ!"(÷±ò3—9`FBÀ=`ôG(0Âþå/™ôÂQˆïô$ “‚  0s`þñÇåСCÿLZœ€Ðê:Ø•í¼ƒx-ŽØÕ0hå4~'›˜ NÁ¯ýë‡yØχ Âg@L®Zµ mÆz衯9rä_Iñ£™MÔ¬;(°º0Š9ž,xñÅ)‰,³ÿ& ´ M%ÆØß ¼|âĉŸ‘¦ `vÎÁº v5,;—“A-ŽÕ1ÍL+' 0`ÿ›€ ±¡MÌàwB#Ç$0555óÄOüûÇÿ=iåÅæi)¸®P3ÀO¦µ–5qÌ\qâ³>1ÿ˜ÀT f à‚D6¡($"´!üØWìƒcÃ`ß/<ðÀ¿~æÌ™$-b$PwÁB5E7\ k-B®ä!cF F€^hiiÉþN<$Ò‰ RÀßáhkkã%Ç©L<ýôÓ¿¹gÏä ±º ràa¨Æ¢ µD•"ãL€ž @.¾{á…xD ¾½ß@hB‹Ä f0E¸fͤOíÚµë×:ôO¤Å €à¨ ¨Èž°"‚ª:`–J,N>AX-aF$ fŒíÐûôÓ„¢âHÁBk×®EžÁèSO=õõƒÂ1s@äðf©†M‚º#€ì‰+"¨ªã˜åè« ॗ^âå°2Ä]ŒR"g># fíƒD° ;ÆøÎ;A˜"De!}µáš ª[à'¯|Uuc¸°ì³°ÿ… €ª@fƒ\øl‹P`Ä´°a¶/È 5ÒJ6l@Ñ'Ÿ|òß9sf/i•…DîÌì^s«×5˜^—¶]Îc8}½*áEÌ¿^À÷ €`0hÙÆÍšÛà`…S0Ž)Ã¥Ò® ´¶µÒÚ5]ØwòþûïÿêÉ“'w“Fbv &g/ˆKÛ.ç1œ>ŽøÆ7¾Á=úÖà];Œ’ 8¡ IJŸSi$±×¤‡Z"Z×ÝM£Ÿiß:}ú44œ¨ˆ$P3p%d;ïÒœ··_Žc ' ð@ø "€ ²æœ‰$Wÿa pàß%øßÄ~‘æfêêîéŒíÚµë›|‡´ˆÁYZ"š« {Š*z 'Ž£w"Xh¨ÁµK¢-ãÚƒÜ?€÷Ù©C˜)Jƒšš¨»§Ç~ôÑG¿véÒ¥wIs ‚D*qM˜5A7”KÕxEK°"”^yå•lÆŸ¤SiM ௩ÿ‰d‚oœ˜VcÚAŠ›DÍ‘FêéÙ@ý}}_~á…ÿøöÛoÿ iÏdM Õ$dOÎ¥ÂZïD`¬€Œ?a@@›Ð l5£ PÆþOdb´Ñ?šñ $xÝIÍnj¦ L˜˜˜Û¹sç‹ÇŽûÒ‚…j¦Ð¨«SBÅ8•‰PÙczœ\píÚ5^@ÞvØÜÇÑ?Åd5­9qMíOa"®0ó gÇLjf@"ãçó ºP€6mÚDƒCƒ“ŸûåϽrøðá¿¥¥ˆAh®6ꂲ'«ˆ ¢Ç°{,+@4üý7~ã7ršI&ȳó3]ˆ2Õ>ÎqnŽ¢ˆàê’üì÷)Tb¯ð'øý>ò²Ï^/{õyY?½\Ch4Ц[7!a~×®]/ïß¿__YÈÕ+Õ,;q’A½1 OBP"ø „P_AhaÃø©ÁhB-çáBîåIAXd4 RScù˜f]‚  …©¹9B¡`˜C¨)Lë»»yÁÇü«M©Äú‚"®#º%€eÁ…dPŽöËu ãqÌ"EA?â°Á9(žAhÑFuñYlb?ýêÄbÊQ´ …øt &Ȉ&ÒÜDÝ]Ý´fíZZÑÑŸ'·oßþ¥'N ¼HÀµË) E•>†ñ8F@@”ÇB¡¢öŸXDL â=6!ìðˆØG?uhVĘD„ãÀèéîá„·lº…î¼ãN„ ~îsŸ{åÈ‘#oá°´|ir×@€þb¸X}w{ûFˆ‘‚€Ðcu ˜ØÄŒB-ÖÐ ¿ =)ÏC¿.X‘H¼D„cAã€&s+íüÔNü|ê¾ûîûµcÇŽí'-Xƒ®št%d;¯ˆ lm—û8zÕ\, ĪrÍ‘ç_Fâ½Ñô¯ACÉlÜ@"@„ã£21f°Héüü|ïí·ßþK}}}P€ð/”å&H‚« ওQ„P¶¶>†1rO¨ãBøÅº‚BèõÚ€(ÿ%„]€hWÀ¨ú‹¿µ}™1Ñ$¡$Ù3Ïö±/œ;wî iAW˜5MÙ“¬raÍÕ–ÙèU-ý.ÇqŒžz³cè§ö̪ë…ßl5"!èúãè¿×›BõáÄûÇœØ3úóW_}õWI š$8낲'[…*|%Js—óØ2µý«QÅϵ¯Ù䀱 ¹Ù~z"Ђ¾ê0âvìØA—.]:½mÛ¶§Ùϱj)|ȨêiÁº"€›N¾B„PI¡/µïÕÞ¾F@ÿÙl1AfZ‡Ù, —ÂÉL±çž{î?þñß&mô ((5GU'ôé8ù¢?¥£‡öÒ¦­¿E‘¶õeég% @ÿ• Þ Â/ 7 „szË–-ôÚk¯ýï}ï{ÿ43`†ª¼€H•=•Y”…²¡Äö¬~_uB¤&ȳ¸—|±w(:ßKÿOƒ¬Ÿ­ÔÞó9ÚñЗ¨µ­£à~WS†¦Yßô¯Fg ^30®ShEF“$€éÉ;î¸~€¿~õÕWŸ!m¡ÌÄÊr¢E¢ ŸP޲@öb8 ºW xâ™à¿EžØûìIŸ&_ÀK½½sô¯oŽÏë¡`ÐK-­ë¨yÍçiûƒ_à‰0¹ú.cÆJhzÁÖÿÍHÆ}õ+‰ÏúYøn¹åúÉO~BÏ>û,V,ÀbÙN²TÇÓy3r€é‰8èé¯öYK¤™ÀËþiÒ窀ög¦©¡!“MǶ#‚PóZµéK´íþ§Øß‚Å»Èstêºä²ÿãèoñõß‹ýÅ÷">¥Å3°>ÓìUy`PÍ?‡¦æªqö 'Rc\Í÷.¾ÃžÎ>Óã&“i¦þÐÄdœ|>c ˆÀG¡ÈÔ}ÇótÏöÇl×ß“užN?ç#½¦ F~ý~zŸ`ýúõ‚î!mä#mF jƒ‚jв'U6½Ýù{©¤•Uó±§tÆr?ŸßCƒQúçâO€U¼Ì44¶„Á3tÏÖGJë_æ@…äs8I¹HÀlJШ è?cJ°»»[Àä þXf«Ú™WBx§´3íìŸËËo7hGÚƒŽ2?Âÿí›Ô|+ø˜ÊôÈ:2™Uÿsî僧㣴yëstëm÷Èé{×B&X‘@®¸½Ð[-cÖÕÕÅ à…^Ø™H$†i‰ªÖXó=Q Y)‚/]ÝϪùo3™ï/à:h¯?e£ÿàP”ü~ûý¾¡P#5­üÝuß³ÔÕ}‹Üs²qd\G3sÀÌÎ/„@Xh4£ Wxœm£¤ùæ¤_(I¨¸éÄ °ñ+yxsÔ[š©ùdFû÷sªùVÀh>6£üÙ÷ÓÅ@ÀKáÆ6j[÷iÚ²ýê\¹ú¦ó-×*β®1`埙„úý´jÕ*AO6Àl,Nx_•~€º'€|qøÅ´+«hI–Þü£äYx“ÀY*Ť„úúÔ4í=0fKýÏü>^IíÝ_ í|"-­Ò¯ÓÑ0›û7þMÿ9À P•~€º$€|Âï”Ñ.²ej„©ø{ÈÝMžä@ImjýÒ{?{c˜®]_`#¹ Õf ‚MÝÔ¹áWiÛýŸå)²2¯ÇÍÇ”iiW 0û»øl ˜zaà}UÖ ¬+°3Ú—+Ëψ¥‡,£æGß&o”©ùiIÓÈiMýŸ™Kðè¿ÅÅ$'yçªAcëm´zÓ3´õ¾'L§&ƒbÛÏ1hd¦tvvê5€iZî¨Ê`WÀM'Q¢ç¾˜öŠ9žËœQéî͇SÏ?GR }ó¬;þ&?95Eo½5BM(£%ú¡m2RfÑÔ¶ƒ6Üõ,m¹ç‘²‡JkÖG{+Ą̀@. "€ìÉØ|М˜F,n´g¿KŽ0Á‡7ÿ]&ó%ªùzÇèîg¶x“t6:£víá Ÿ¿1B~ö}cØGáÙòÚâX G@Ûhø©±ãaÚ¼õyÚ|ûVé×±sÌ´ãwú¬@T V E@ö¤r¨ó²ãŠWó/0¡GÐÎaö±ˆY"½¢ L~Ó~¥˜0x.øÞ¥(ŒÌƒg§hºwžŽœ™¦s—æ(ÐàáKgaz¹á—B >þ™kì©É@LFV=F·o{Žº{6-»²°ù`gU"ãç\>ñ "ÀB#Šä dpzÔ/JðÓóܛϟ{ó .ƒÀ§}ÚÈ.Fø´ß«¦öèöͼ¢®ýìh”®'Æ43—¤_ì£X,ʼnA?êÃloÀ4Ó ‚Œ‚/'Ñl±ÚA$ŽP{×Stû½¿J«×¬³u=+¡Íñ*f6¬4ÖÖVE’`J(ÉÌ;msÔ(Ö±'‹²£\rXóäsoþ½N¤3SË BÊ„8ÍFlºxÕF÷ôòߘô3•LÑÕ÷Æiq*ÎȪ¹‡Ž™¡Sf¸°¡™ºÚÃ{>ØàÓ´ƒ ´Qa7M©"&¶0uØê –5Ÿ£ûþ7ÔÒÚnûº–[#° 2ûH+ )ƒ¢ ÔàžR# —«PóÏgÔü#¹Õ|ýˆæØ(œ‚€ëGx$ìx,~—°Å‡ÎÏÐȳäÍLû!ýw~1Aoìa¤Í=N‹Uv53bdú8‘ø|š­Pˆï—,ÈÚ 7wS{÷iÛ¿Láp£Ô{Q,ò•3K%€2áŠä `°+ü²üf.ü!áÞüÃ5Þ|©0ªóÞ%»=ÅGwÍaG^ÝþE¨ÞíçÇcÔ{pœ §¾»ùO2b8qvšGöÙ…xþapûéÃÌ\5xùg¾w†ò_GâÚEcë­|êðÞ;ùrÜ¥ÜY¿5B@yQ4:òˈ)àdo~ô]¶íaï—ï¼Là!àpرWöðóñøÆQ¸D纇gÂ??#¯!æ£9|oì£Ùù× EvÔgfŠŸiÐ@0~o&͘ H*÷é /Ð"wQ÷íÏÓÖsİÝí¶Ÿ«ª"¹ÈKvGr§’€€t:©Só.©ùúçÊ›v>Âg6qê|!Àè?|q–†ÏÍÏ"âZÀY¶Ï‘SSiVráñjN¿PPs&âdàɰ’ÕÌ‚–uè§Pëý´ñîçéŽ-;Šº/2a–ìeåhjjR ¶fJ™î+†–¼ùsKj~ì-“^Ÿ'3ºkž‚°c$,Q/þ…©8õ£TRHÓýØÈO¤èÍ}c45¸©0H)Ú.!f0Âó"#!Íw üš-ÿ­ßçá‹p6w>F›ïým¸åN[ÇÌ7rËÎ$4N«HRP ò€•*/˃oæÜƒß³¸;£ækÞ|1ºìw¼â³O®:_D·1å7;eªî‘ZÀWæèàñ)>j;1³À#ýðhÅFÈ88ŽDøÃìx’î}àYZ³¶»€ë`¿>C!ÉK¹* é¹X¶ "€"PP.€³©½ìÁˆË8õŽ0á^ЩóÎØï¥£ÿèÓÓ¼òO>_´€±É8}†^;€¿3 <î (´Z„äY‡íîü Ý÷È3ÔÖÖ‘é{î?×>¥õÿæ,4öœî}õÕWÿ+iK…+(¶ À±ÿŒšïI¼Ë~xApã¼ý^, ü‹3PýÇ)O1ÕßÞùb®ÿʵÚt², ·ˆ2¾˜ šï@„({9Aˆë ø(^C¾@wïøe^¹°3Ú;]cP€\X:õë»Ûñè|ãÓäIý‚ÒžìÈ£š:_Fû½Xà4!ð×ÓtÔÒñgõ[àíc4</¨Jl,ŸYðp­ Ì A YFÜŸ1hÜH«6ýÝ»ãÓŒ(lžg‘ùÁl Ba(K Àj€ŸŒõ?¶xžâ±ïSSgf)ò*x#àÀï§þ“S7MùÙìòë ´çзӫa9 ´ "…#3 Ía?5D¿D;îÿä²ÁÁìN ÚÒäÂ’Œ7¹X‡žÕoÏŸ=FáèëtËCDI—€‡ G|.AW™êŸˆ&m«þ˯\zçà8õEu }ˆ²BBZs$Ò@­¡[î~–n»óÛíÉò( @>r@))ºùnúÙÓG)0þ´é¦n6û)¬rÈTù¹qt‚&o,¤ú¡ŽÒ;ïg4­JŸœ5–|i®ýÀgÐÚ¦•ݧ-÷=G7mYºD; ȇ庥˜v¦zΞ9J¾‘? î»ÔܦT•þ‰¾ê;>ÉGðRî¨'ÓÞž÷'èZÿbUjV¾Ô6èèˆÐ÷ÿgzô㻲÷<ß``ëúäp6* SXXX(Hø7ÊËŸ=}„ücHkæ©ýž–ª6 ê'“\õÏ'¸)P*àxˆÑ[ûoÎpÐç¶–umy™>ýKÏsÛNB# È,&*>777+„¢ ÀŒ ¹Ù €ÀÄRKã4ulk£³1Ó¥VÅppŒõ˜¤‰Þy¾ÖŸ,`äßwd’._›7M®vtv„(Òõ<íxà jlläyúÁ`×(´š)Ò{öÍœƒù¦ÈEQPªðgN¦†©ïS“‚Zok¦æu<Ÿ¾Ú€é°©ºqdBsúI¼“ܬ˜ŠÓ›ûǯ$Öu¸ýp F"ašñ|’6ßñ_¬ªõ€ )°lE2a›Ì¿õNOÁÎ ­¸»¥êød,ÅTÿ1ŠÎ&¸& ˜<Ä´‹.ÏII*ð´·²GǠˣwQWÏ]´iÓ&Ú¼y3'h±+Ÿ@üM€<ä%;‹oC‚š&yÐêûÚøb²ªæÊJ| œšä!¿2U=x ñY £x"M œÒ€ûÓ¥£½fæ›ôÐáVÓšµhË–-´uëVºå–[¨££#'$~‡z¯¿þúÞßþíßþ¯¤ $E2â½õ‹¦(Ò¦ŽÛ#UAHëM%ˆ«þ‹ÓqGT=´ÒaIú9Ó¢Q¹ ‰Èä³m-~f®øh`ÔC'/¯a@Ýu×]œ6nÜèˆ!¨ ¨@ Š(µl”þÆ5€UVïh×ò*Ìpü ž›¦Ñ‹KõýœÂoOœ›¡“çf¥,%æpûš}ûxÑÒC^:Ý»†º»7p¸÷Þ{9`6@Ì”ö»üØK † }Er`K(u(³ßë ‘Hó+´r{[ub´ŸѵƒåŸÇ¨Ñ¥Ãæ’E•séÌ’gýhðÒ¥ëlëï¢f÷ÃþǶaÃ>Bà hLæ)æ92ȃ-'`¡°s×ø#¶[›¨ecSÅ [ßï½q^䳘dŸR-vzŠÏTp]°Ârð™‚g¯øéÚhzAp"R¯ØYAfÏ"ùÈI… !1ßF€ÐÛhå¶ÖŠ™>]}¿r©þzˆÒao쥙٤ÔÒa¥·‘è“ࣽ4<³‘zzz¸ý3 »»›{é‹}vŒ©Àú÷Šä£d(66à&Hkê7¦ýþ²Gòú~“1¾°’_*š‹‹WçéÐñ©ŠÖ Ð÷ˆ››üÙiZ$:í§éøF>ê X·n×ì>…ø„f€iFEr`IùT¸R«Â €°â®j^.kT WýI«ï77R~Õ_˜þ8u,)69¯-£?ION6Ð|j7¶mÛFwÞy'uuuñ°à\(eP€\˜@4Íù£Bë¼›Á”ØkÓêPÙ£y}¿Ë³Z}¿*˜‡¯dé0#²a¿ÍþeAZðì;¢„w#÷ü @$`8ÎÓfiÓ€Šä!/ؽY…T|Ì€{šÙöú¾vžo_ލ@­¾_‚Ïù§ ¨ïç$„Fòöþq‹UÜhøy˜²¸èœ”{N0AläÁ?Û·oçÑ€«W¯^F¥LW ïÛÛÛHBI +0¡íaû¯¼§•Âeˆ äÝgÿ\?’±âêû9 ÌôgJ‡yË\:L$ý´¶nú›ˆ—Øs¢šZ7d ¯¶«/Ë| «ýȃ£¹¹n¦ˆ¥» ”XßÏIx2ýDé°ëý e I?po#È÷lÏÉië¡Ûo¿LB ×hŸkEòàH(°jI¤™m››¨eƒ3QˆõŸ¸1O}Ç&µDŸj½;¤-ÛG J‡åи3–·Ýdô´œê¤öë¹í€3pÅŠò´_˜à§@¤Fvoj.€Ð‡:håÖVé3Põã‹IêÝ?Fñ…¤”ú~NS˜¼r}¡,DyÒO“¶jÙõ,FÓ´÷ÔJZ±r}6À*иÜwáýR R ‡ONQi'Xn­@^ßïø$M\“[ßÏI€Æ§â<8Èé(EcÒÙ•çEL˜¨8»šV­îÉ[  TÁ_ê›"Ùp$Ðr°’6Èëû fêû•Xڻ܀)pèÄ/ædÑÜV$ü ñÇêsBš&zÿÂZ³v}¶"!œ‚d þRßÈFA +·ÈK<*µ[¥ø´ú~IºÂli¬îãÕ_ŒºS3 zs¯³¥Ã0ÒªKú1ÈhxÌCG.®¡®îõt÷Ýws@R¨ fÏœ"y¨Z€ªëy¹àñ{Jž„ê?pjŠÆ®ÌW­×?w”ƒS¥ÃÌ’~Lûá÷R߈‡N^YKÝÝë—¥‹Zòú¤ÀIØ"™‚/øqxo+…;K‹ ä6ëp”zsMÀm‹pdσõ}v!A¿Ø;îXé0cÒ@>½:smz­´h² ×3§@r€‚ˆHÀÐôë9 •HQd}uÜÖ\4@àãõà8-N9_ßÏiˆÒa'ÎÍò÷²`•ôcÞ/]îóÒ…¾¥b Ô”ºþ_>(‡’ªÛ…ÙMµC°ý?OâW°Àè?pvšÆ.¡¾Ÿ;¼þ9χÚ¢V: …De–3&ýX™€\óÑå¡nN¨@*p¡Å@Šdȃ£/0ˆ¨ÀU;Ú¨¡¥ð¨@^ßo,Æóüݸþž0òŸù`–Žžž‘R@Ô*éÇ €3ú¨orý²b »Å@JÑ.ȃ#`70/6Ð~k3µlh,È àñê)bªÿ-L¸_õ׃Gâ1³æL À¢"¥ ±Jú±àø~™]Ï5c5 ëãÈ1)ȃT(äÛ%€b£+]ßÏiÀ?ÿá½r²¤žôîOk$`û7 €Cg4[^ `V H¶/I€ }—Œý+Ç"£Õ¨÷‡ONѹKK¥ÃŠIú±jûÆV¬§G+ŠY€r”S ¶ @v0P±€i(oÈK×ÇcÜë0V<äx¸½™Œ‚|?¯æ´Ò?“f§‘ßóQF{Ÿ¶8g7‰(öÆž1ŠÅRÜs_LÒx5 :ß×ÅK€‰z€¢˜“ÓÇŠäÃ”æææ¤ ˆ›ÍüqAAö3»öï~>D{M’ׯ=ì>¯&øAöpÃF ²‡ÔÇö 2Rð³÷ Lm…í õ€6BøÌþ j„ßááÆ{ØÑø R5bóê>k糜ÒâKñ"È$óEšÊC"(rìÌ ¾0ÃÏWKú)}Š×ñB¯—>캩P$)ú¹±3À(²€ÙÍ-”Ð<|?{gŒ€ð&R)Jòì@-2hiä[zÙšöÆöÄWzA-xÅwLh@ BâÀ÷á æ xx8ɰà ógÚmƒ¬ Œ¢/Ù×l§ÄõZˆvBú󲺦7­ßÇWïIr-`n!Ém«•~ Aˆ÷ÉK^êŸèáj?@T*´˜Õ³‘o_Eòà(亹…º‚‘ûíýôÓ·F¸ µ>žHQª„§:ý'C™ÏËN|OËGõ%ÍÀÃo0ïÕ>û¹°{¸Ö¡‰—k* ?' ,à ´ H#Ø FƒOÛí  h!ø;7w2Q€ËÌœÌ?ÐN]˜¥Ã'§©³#PPÒ@ÇÎ{idn'Q @”+õ¹°ó;EòàØ ²K[}ïØýÕφùÃîÓ=ì~@¥aº|}‘{œ‹A½ú0Úß¶¡‘ÚÖÊ;Ó‚ ÊöŸ˜Nðëo‡Ä>»·R8²!K( ¡,µH¾çM€|˜ÀÌÌŒãK< Þ}¼þùßöÓ™‹sÜXôñ¨þü°óW¯h ÇjçÓ†)JH×|œ‘@4–¦|·^Ý}¼"m¹ê/j”RÌî@£@>'€\%Áˆi¬¿ø§!:rzšÂEŽüzÔ“?BiòÓ§lçe¾ É­àBÍ.Ì…<Ó„Ú’d(¶‚ÚVhåÀ ÀPL5 B5LEòáØ) hkœæ3Ù÷ó^Ú:’°Ôƒ?ª>s?ØA«˜M PˆBŸH#žc&˜•9ÀËœê¤+—WÂj=~¿ßÖñJT Ò  @ ¦¹?¦Î–ú‡_ Ó/öMp‡Ÿì¤8#€Tú¸ÇŸÛ#ÌæßÌl£Ç¿ˆEFø4á|ré;@43³DûϬ¢•«»y0 W1™‘€Šä¡d(öÆž;s”Úbÿ‹Ž¿ÊFÿaîýw"Ý‹'kÓ/ÿ½wD¸×?2Î1×4!`b:Mï]CkÖv/«dFNM *‡ŠÀÙÓÇèìïÒžùR×’áÀ¼x¢Æüí7õ„éÑm¼B²L%ÇjšŽÚÑ)¢ƒçÖðj@È )¨µµU@®kZéX (qcéì™ô¯ÿø§4týWeTÕáKÚq»°óW¶èñ‡:x¶ ×O2Òœ˜Jf§ ‘t40JZ9°n­’P  ž'#Ñ6– S €ÌÄŽD"A—/Hÿ7?¢kÞ`s‚ÔN©ë¥¦W ŒXÎkçÃÔR Ç¿Px2Ó„ˆ@Ì|4ׇ㥣Põ½YÁ‡`Cð±è£=l~l ˜PÿÍòœˆT E€ÌQß zmNBáÀ¦i}m`2›×^JŸªÉ¿ks3}äîÇ<þbÍ@þQfã_ñ3Á÷qÇ,î½ñ1½ÁGø-„‡W8¡ @õIègœŽDù1Er—Ê!ìV¿5jããã7ùÆ™6ÐÀ´¦P<“SÜ1«ÅÏÚ }ü#í\¨d‡ùBðA˜WúSt#þP€¯f"F|¤ôŠá½BðÅ2)`¾SËf%ÁÈEN¨”ð)Ý\´Ö+€o€Ð` ÐâÌej Žó%¹ŠMü©´?ÖÞàN?̻ˌUв-=tm EïŸõPï _ñ…àC•ª>*üˆ$€ïð7ìíÀIÁ¬ÌCEraJP¹®`†TŽ n¡ z5 …6À+ˆ`d˜i©^jÇ)™He×#T¸âÁª?(éµ¢5PTa3`ÍBdñ]íK0Á÷Ñ56â³±>«êc× >lz>„ $€ï êcìk·èG±Èõü(ià”à!´1Sm@Ìm`aŠi¡1öàSÁeÁ*QJ,•©‰öñûÚiýº”0_>–P»1”¢#ç½ÌÖ¿Yða¿C‡=¯ññßéG|'¿ÐH@EòP2”ÔQìoApµHaxˆiIh1®J¢ ”Ó€^A[¹ïîº{sé¤ìB;ïNÒa6â_î÷³óñeçñõ‚/T}¨øbÄνj|ýþŠä¢((Vp éí¶'f à·áÄ"n`hhæ§>¤HÃ(á9.Ä7P.Fû;oi¤¶¶–äñ‡àcé´ÁÑ:ã¡K7–¶?„Y>œ{ƪ?F|á܃àËN+Õ/¤@>ÊBúˆ?ÙHñÄmÊ3"œ$­€kƒWÉŸºF‘PÔvá‘r”‡¿nU}âþžæ[ ?¢ ÖSIÑÑ úàj,|,Ø¡|1•‡‘_ŒøüjñÍ~¯@.l@%Tý|íê"@v!j  ÿ 3˜.„607y™"ÁjðÛó 8é@ÜBK³Ÿö@¸o¡¬Ñ‡%Á‡'’tè´—.]g‚ŸòóëÁ׫ú|ŒðV‚‚€W߉p³{UJ;Šä"'ȘǗ ;†B¾@´¤ ô’'ÞK­‹¶´'ü|ñ΀——òîl/Ìã/t!»ÚˆK– ¾ñõ^}½ªoñ«]ðõí)‹eÀ.èkôGô¼ë¥LʼñÅ´¥×à3"n`xxˆ¦Ç?¤æÀ0ZÁÐ\G‘éÀéàœµX¼Ó ¨È Òa‚켇Î]…àû³ª¾|¤åêG|!øØ„à _æêO¥Ü/»‘€X‰X€H!³\K… {Qh 2j(K¨¶(0ÙU‰õ¾N BLŽ^¦F¦ „ %Êíú°?ö}x[m^߸Ìé'n>ÉF{»à£™…%Á7ñE61¿‹‚²TýJôVP uKú™£o@Ë)è£äÂåŒ6ÎjvJ‹cñέwFhÛñ4Ÿjôf nÎ/&éÔE¿è£©9m.^/ø¢ü–Põ…g_8÷ôª¾l_€|¸Š0eæ5RôÚ€¾(©^˜¹Laß@¶()|x‰þxüo]¦G¶·q‡¤û.ÆÒlÄgvþy?MÎÝ<â Á׫úx@ðàãFÁ—Ѷ"ùNnx3߀(„-ª½ÈÎÓyø‚/l|7¨úNå}( iàfÁ7îc,Q.ˆ„60>r…iýÔL0ÁN.[£þ¦F=ñ0SÝ;h~!E§/!QÇGÁ6>²ð„à ¯¾àÑ ~¾Ø Ù×¢ÚÚV %€¿˜~êµäFˆå¢(éÐ`Å¡ „&¹Š'y6Š<ùQf³3á?ùA’ þÈD€×ø6 >„#¼1C„ ³²¿ZmûBî ŽŠÄŠä (p‹Ð—ÚW«å ‘\46r•Btƒ©ùQJ²ý?r7¢üÂôÞ) Oú—•ØÖ ¾_V†žÛ£¿"¹(˜Ü ü²û¨À”¡Ð–¢haú­jÑL´•FüÜão\TCÔÝ3ðˆJ»Jðonߘg¢@.ò@= ¼Y»ú¢¤¢Dù²ä¢á!šœ§¹ù(ß71²Ãƒ/Jk ¯>´h ‚ïvò†U Š lW_¢\”!Ó™€Pc²âÑ×Õ‡ð‹é*;Ùv¹G|«>(GÀm‚é&‚*gûâå:ŽÝ¾(éà&áw[»åj_Œj:Eò!…Ü&HnÔ&œn[ \žýRBȃ) Åá«ùà&u«`Ö’š_ê9)¢@ ¨ó}.Gû@9F|™+F+ [à6r#™8ݶ@5«øvÚT Šê¬íJÌßËlS€\ä$7 ¨ÛÓéöÝ,øú¶È…%¸iMy·µëtÛ¢}78öŠ9'Eòà¸QxjÁ©Wó÷² ÖèîîV Ž€Rñ+×¾ÛÏ%×1… @¤€Ge·¶­?F-Øöv©@>¤€Û„¿FÉrçâ—¹’ȃ)`‹|‘€n=•àW×¹z\EòaJXä¢Ü‘€N¶[ÎökÍó^Éã!œ€===Š$A@¶o·EŠJ…-ÀmïAÏÕ¶Ò$̧L¹°$·Õt²Ýrö»ž¼ú…Biòá8¸ÑYètÛÆc¸•¸Ê}\Eòá(¸U@U|~uO€|8BJÅ·F=Oã• Eò!jaDv õ´ãÈGQÓ€z(Á·†|¹P *@rûjúÎ9(E’ÛVàÈGA ߺÝZõèWê˜f}›"yÈKnµñ•ºïÎcæêƒ"ù°$7•sºm³cTËrYn>^¡ýP e!·ªøÆcÔ¢ÐWê˜ÅôA€|8Jn|5W]}0!€ÿFšÐ+(0ôxÙý/Œ¾:00p“Эê{-—ͪõã‘H$ÈëõÒúõëA»3À-'€DE;ij&€FÒ ùíoû;¿ÿû¿ÿR4å€ÛGðZüd2Y¶cå:O§ðGºÔë$~‰Dè?øÁÞo~ó›ß&Mà‡Ù6Iš9  €Âl‹àË/¾øêw¿ûÝ—¤2}öVqß󢘇T¡ªHߟüÉŸ¼ñ{¿÷{ßcŸ£lcÛ iÚ€"€C?DšÐFš6€­#óäÐPÅýW¨@øc¤ ùTæÛpæ3ÔÿE¶UNEÊj ŒðpA­¤  iD'¡½¤çÑN>¨úÓl§å‚(Ÿç¶T+ _p:H#~Sæß3ûTÞ]¬PïÏ!T~Fÿ¹Ìëbæ»Ué³Z­ø2ˆ A·ù3ßWsßê n¨øô˜nKd¾¯Jõ¨f!Î>Aú÷”ù¬ P ê½ö”á}UŽþ@5€‚‚‚ÃP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇP  PÇøÿ§µÎv\us—IEND®B`‚(€    ,/................................................................................/'  ( M d l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l ll l l l l l l llllllll j [; 999]ÞÞÞîàààñÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÞÞÞòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÞÞÞòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÝÝÝòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòÛÛÛòâââñGGGz CCCiùùùÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿèèèÿúúúÿSSS‰# BBBhóóóÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿãããÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿãããÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿìììÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhóóóÿíííÿìììÿíííÿíííÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìììÿìììÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëëÿëëëÿëëëÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿêêêÿêêêÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿçççÿçççÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿæææÿæææÿæææÿåååÿåååÿåååÿäääÿôôôÿPPPˆ# BBBhôôôÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿäääÿôôôÿPPPˆ# BBBhôôôÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿôôôÿPPPˆ# BBBhôôôÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿåååÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿâââÿÔÔÔÿÖÖÖÿäääÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿêêêÿØØØÿ±±±ÿŠŠŠÿÿ±±±ÿÒÒÒÿåååÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhôôôÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿãããÿÇÇÇÿšššÿeggÿLLLÿLLLÿdddÿŠŠŠÿ³³³ÿÓÓÓÿåååÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhõõõÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿéééÿ×××ÿ±±±ÿÿEPSÿ'PZÿ3Zdÿ:BDÿAAAÿLLLÿdddÿ‹‹‹ÿµµµÿÕÕÕÿæææÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhõõõÿðððÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿãããÿÅÅÅÿ™™™ÿadeÿ0LSÿ!R^ÿMWÿ&guÿ5‹ ÿ6`jÿ:@AÿAAAÿLLLÿfffÿÿ¶¶¶ÿÕÕÕÿæææÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿõõõÿPPPˆ# BBBhõõõÿðððÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿêêêÿ×××ÿ°°°ÿ}}}ÿDQTÿ$NYÿ"VbÿNXÿMWÿHQÿ(kzÿ: ¸ÿ5Šžÿ6^gÿ;@AÿBBBÿMMMÿgggÿÿ···ÿ×××ÿçççÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿõõõÿPPPˆ# BBBhõõõÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿâââÿÄÄÄÿ———ÿ^bcÿ/LSÿ#Ubÿ"T`ÿNXÿMWÿMWÿMWÿIRÿ*sƒÿ8œ´ÿ8œ´ÿ6‡œÿ6\eÿ:?@ÿBBBÿNNNÿiiiÿ‘‘‘ÿ¹¹¹ÿ×××ÿæææÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhõõõÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿêêêÿÖÖÖÿ¯¯¯ÿ{{{ÿCPTÿ#P[ÿ#Wdÿ!R_ÿOYÿMWÿMWÿMWÿMWÿLVÿKTÿ.~ÿ6—¯ÿ6—®ÿ8œ´ÿ6†™ÿ7[cÿ;?@ÿCCCÿOOOÿjjjÿ“““ÿºººÿØØØÿçççÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhöööÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿâââÿÃÃÃÿ•••ÿ\`bÿ.LSÿ#Vbÿ"Taÿ!R^ÿ P[ÿMWÿMWÿMWÿMWÿMWÿMWÿKUÿOZÿ1‡œÿ6—®ÿ5“ªÿ7—¯ÿ8œ´ÿ6…˜ÿ6Xaÿ;>?ÿCCCÿPPPÿlllÿ“““ÿ¼¼¼ÿÙÙÙÿçççÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhöööÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿêêêÿÕÕÕÿ¬¬¬ÿxxxÿ@PSÿ"PZÿ#Wdÿ!R^ÿ!R^ÿ Q]ÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿJSÿ!Vbÿ4¥ÿ6•­ÿ5“ªÿ5“ªÿ7˜¯ÿ8›´ÿ5ƒ–ÿ7W_ÿ;=>ÿCCCÿPPPÿmmmÿ•••ÿ¾¾¾ÿÙÙÙÿèèèÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhöööÿòòòÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿáááÿÁÁÁÿ“““ÿZ_`ÿ,LTÿ#Vcÿ"T`ÿ!R^ÿ!R^ÿ!R^ÿNXÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿIRÿ$_lÿ5”«ÿ5”«ÿ5“ªÿ5“ªÿ5“ªÿ7˜°ÿ8›³ÿ5‚•ÿ7U^ÿ<=>ÿCCCÿQQQÿoooÿ———ÿ¿¿¿ÿÚÚÚÿèèèÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿèèèÿöööÿPPPˆ# BBBhöööÿòòòÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿéééÿÓÓÓÿ«««ÿvvvÿ=NSÿ"P\ÿ#Wcÿ!R^ÿ!R^ÿ!R^ÿ!R^ÿOZÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿHQÿ(jyÿ6—¯ÿ5“«ÿ5“ªÿ5“ªÿ5“ªÿ5“ªÿ7˜°ÿ8š³ÿ5’ÿ7U\ÿ;==ÿDDDÿQQQÿpppÿ™™™ÿÀÀÀÿÛÛÛÿéééÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿöööÿPPPˆ# BBBh÷÷÷ÿóóóÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿàààÿ¿¿¿ÿ‘‘‘ÿX]^ÿ+LTÿ#Wcÿ"T`ÿ!R^ÿ!R^ÿ!R^ÿ!R^ÿ P[ÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿIRÿ+u†ÿ6˜°ÿ5“ªÿ5“ªÿ5“ªÿ5“ªÿ5“ªÿ5“ªÿ7™±ÿ7š³ÿ6~ÿ7S[ÿ<==ÿDDDÿRRRÿrrrÿ›››ÿÂÂÂÿÜÜÜÿéééÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿ÷÷÷ÿPPPˆ# BBBh÷÷÷ÿóóóÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿêêêÿÒÒÒÿ©©©ÿsssÿ¯Éÿ?²Ìÿ@¶Ïÿ@·ÑÿA¹ÓÿAºÕÿB»ÖÿB¼×ÿB¼×ÿB½ØÿB¼×ÿB¼×ÿB¼×ÿB»ÖÿB¾Øÿ>¯Èÿ)o€ÿ,x‰ÿ/€’ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ1ƒ—ÿ/m|ÿ\]]ÿ±±±ÿéééÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿùùùÿPPPˆ# BBBhùùùÿ÷÷÷ÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿ®´ÿGÌêÿCÀÜÿCÀÜÿCÀÜÿCÀÜÿCÀÝÿGÌãÿCÀÍÿ<§Âÿ>°Éÿ?²Ëÿ@µÏÿ@·ÑÿA¹ÓÿAºÕÿB»ÖÿB¼×ÿB¼×ÿB½ØÿB½ØÿB¼×ÿB¼×ÿB»ÖÿB»ÖÿAºÕÿAºÔÿA¹ÓÿA¸ÓÿA¸Òÿ@·Òÿ@·Ñÿ@·Ñÿ@¶Ñÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÔÿ1‡›ÿ'ixÿ*r‚ÿ/’ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ0ƒ–ÿ/r€ÿXZZÿ­­­ÿçççÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿùùùÿPPPˆ# BBBhùùùÿ÷÷÷ÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿ®´ÿGÌêÿCÀÜÿCÀÜÿCÀÜÿCÀÜÿB¼ÚÿLÚéÿWüùÿC¾Öÿ@¶Ñÿ@¸Òÿ@·Ñÿ@·Ñÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¹Ôÿ<¨Àÿ)m}ÿ)m}ÿ)n~ÿ-{Œÿ/€’ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ0‚”ÿ/t„ÿUWXÿ¨¨¨ÿæææÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿùùùÿPPPˆ# BBBhùùùÿøøøÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿ‘®µÿGÌêÿCÀÜÿCÀÜÿCÀÜÿCÀÜÿB½ÛÿQéïÿZÿûÿOäêÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÔÿ0„—ÿ(jyÿ)n~ÿ)m}ÿ+s„ÿ/€’ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ0”ÿ.w‡ÿQUVÿ£££ÿäääÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿùùùÿPPPˆ# BBBhùùùÿøøøÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿ‘®µÿGÌêÿCÀÜÿCÀÜÿCÀÜÿC¿ÜÿDÄÞÿVøõÿXþ÷ÿXÿùÿGÌÝÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÔÿ:¤¼ÿ(l{ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ.|ÿ/€’ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ0“ÿ.z‹ÿMSUÿŸŸŸÿâââÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿùùùÿPPPˆ# BBBhùùùÿøøøÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿ‘®µÿGÌêÿCÀÜÿCÀÜÿCÀÜÿB½ÛÿIÒäÿXÿøÿWü÷ÿXþøÿUõóÿAºÒÿ?´Ïÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¸Óÿ/€“ÿ(jzÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ+t…ÿ/€’ÿ/‘ÿ/‘ÿ/‘ÿ/‘ÿ0€“ÿ.}ŽÿJSUÿšššÿàààÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿùùùÿPPPˆ# BBBhùùùÿøøøÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿ‘®µÿGÌêÿCÀÜÿCÀÜÿCÀÜÿB¼ÚÿOäìÿXÿùÿWü÷ÿWü÷ÿXÿùÿNáèÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÕÿ9¡¸ÿ(kzÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ.}Žÿ/€’ÿ/‘ÿ/‘ÿ/‘ÿ/€’ÿ/€’ÿFSUÿ•••ÿÝÝÝÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿùùùÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ‘¯µÿGÌêÿCÀÜÿCÀÜÿCÀÜÿCÁÜÿTôóÿXþøÿWü÷ÿWü÷ÿWü÷ÿXþøÿFÉÛÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@·Ñÿ@·Ñÿ.}ÿ(kzÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ,v†ÿ/€’ÿ/‘ÿ/‘ÿ/‘ÿ/€’ÿ0‚”ÿCRUÿ‘‘‘ÿÚÚÚÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿùùùÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ‘¯µÿGÌêÿCÀÜÿCÀÜÿB½ÛÿGÍâÿWýøÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXþøÿTóòÿA¹Ñÿ@´Ïÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA»Õÿ8ž´ÿ(jyÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)oÿ/}ÿ/’ÿ/‘ÿ/‘ÿ/’ÿ1ƒ–ÿ@RWÿŽŽŽÿÙÙÙÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿùùùÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿ‘¯µÿGÌêÿCÀÜÿCÀÜÿB¼ÚÿMÞéÿXÿùÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿúÿMÝæÿ>±Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@·Ñÿ@¶Ðÿ-zŒÿ(k{ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ,wˆÿ/€’ÿ/‘ÿ/‘ÿ/‘ÿ1…˜ÿ>UZÿ‰‰‰ÿ×××ÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿïïïÿúúúÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿ‘¯µÿGÌêÿCÀÜÿCÀÜÿB¿ÜÿRïñÿXþøÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWý÷ÿWýøÿEÆÙÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA»Õÿ7š°ÿ(jyÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ*p€ÿ/~ÿ/‘ÿ/‘ÿ/‘ÿ1†™ÿ°Êÿ*rƒÿ(l|ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ-{Œÿ/€’ÿ1†™ÿ3blÿoooÿÂÂÂÿïïïÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿúúúÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ’¯¶ÿGÌêÿB¼ÚÿOãìÿXÿùÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWýøÿVúöÿCÁÖÿ?³Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA»Õÿ4¤ÿ(ixÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ+s„ÿ/€’ÿ1…˜ÿ1epÿjjjÿ¾¾¾ÿîîîÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿúúúÿPPPˆ# BBBhûûûÿúúúÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ’°·ÿGÌêÿCÁÜÿTôóÿXþøÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿùÿQêíÿ@´Ïÿ@µÐÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¸Óÿ=®Æÿ*qÿ)m|ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ.|ÿ1…˜ÿ0huÿeeeÿ¹¹¹ÿîîîÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿïïïÿïïïÿúúúÿPPPˆ# BBBhûûûÿúúúÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ’°·ÿFÊéÿGÌáÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿùÿJÔàÿ?±Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA»Õÿ2ŒŸÿ'iyÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ+t…ÿ1…˜ÿ/mzÿ___ÿ³³³ÿìììÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿúúúÿPPPˆ# BBBhúúúÿúúúÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿ’°·ÿFÉèÿLÝéÿXÿùÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXýøÿVùõÿC¿Õÿ?³Ïÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¹Óÿ<«Äÿ)oÿ)m}ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ/€“ÿ/q€ÿYZ[ÿ­­­ÿêêêÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿúúúÿPPPˆ# BBBhúúúÿùùùÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿ’°·ÿGËéÿRîñÿXþøÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿùÿPèìÿ?³Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÔÿ1ˆœÿ(iyÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ-xŠÿ0v†ÿTXYÿ§§§ÿéééÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿûûûÿPPPˆ# BBBhúúúÿùùùÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿøøøÿøøøÿøøøÿ’¯¶ÿJÔîÿVúöÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿùÿHÐÞÿ?±Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¹Óÿ<¨Àÿ)n}ÿ)m}ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ*q‚ÿ/x‰ÿcijÿµµµÿêêêÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿûûûÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ’®¶ÿOãôÿXÿùÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXþøÿU÷ôÿB¼Óÿ?´Ïÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÔÿ0…—ÿ(jyÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ-v‡ÿ•œžÿÞÞÞÿñññÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿüüüÿPPPˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ’®µÿUõýÿXÿùÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿùÿOåêÿ?³Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÔÿ;¥½ÿ(l|ÿ)n}ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ)l|ÿ*q‚ÿ/zŒÿÃÆÇÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿôôôÿõõõÿüüüÿNNNˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿøøøÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ‘³¹ÿZÿÿÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿùÿHÍÝÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¹Óÿ/”ÿ(jzÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ(l|ÿ)m}ÿ,v‡ÿ/€’ÿb”ŸÿÀÇÉÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿõõõÿüüüÿNNNˆ# BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ¹ðóÿ^ùøÿWü÷ÿWý÷ÿWý÷ÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXþøÿUõóÿAºÓÿ?´Ïÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÔÿ9¢¹ÿ(k{ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ)l|ÿ)l|ÿ)oÿ+t…ÿ.€’ÿ4¡ÿ[˜¦ÿ³¾ÁÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöööÿõõõÿõõõÿöööÿýýýÿNNNˆ# BBBhùùùÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿâöøÿ¤ïúÿgîúÿTóùÿUøøÿWû÷ÿWý÷ÿWþ÷ÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿùÿNáèÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ñÿ@¸Òÿ.~ÿ(kzÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ(l|ÿ)m}ÿ*q‚ÿ,x‰ÿ/€’ÿ2‰œÿ5“¨ÿR–¥ÿ§·ºÿòòòÿõõõÿõõõÿöööÿöööÿöööÿöööÿöööÿõõõÿõõõÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿýýýÿNNNˆ# BBBhùùùÿ÷÷÷ÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿï÷øÿºðùÿxéûÿPçûÿRìúÿSñùÿU÷øÿVû÷ÿWý÷ÿWþ÷ÿWý÷ÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXþøÿFÊÛÿ?²Îÿ@¶Ðÿ@¶ÐÿAºÕÿ8žµÿ(jzÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ)l|ÿ)l|ÿ)oÿ+t…ÿ-|ÿ0„–ÿ2‰œÿ3 ÿ6”¨ÿJ–¦ÿ™¯´ÿíííÿöööÿõõõÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿ÷÷÷ÿöööÿ÷÷÷ÿýýýÿNNNˆ# BBBhùùùÿöööÿõõõÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿÎóùÿëûÿXãüÿOäüÿPæûÿQêúÿSðúÿTõøÿVúøÿWü÷ÿWý÷ÿWý÷ÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXþøÿTóòÿA¹Ñÿ@´Ïÿ@·Ñÿ@¶Ðÿ-{Œÿ(k{ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ(l|ÿ)m}ÿ*qÿ,x‰ÿ/€’ÿ1‡™ÿ2‹žÿ3ŒŸÿ3ŒŸÿ5’¦ÿB”¥ÿŒ§­ÿåææÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿ÷÷÷ÿýýýÿOOOŠ# BBBhùùùÿöööÿõõõÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿøøøÿøøøÿøøøÿøøøÿâõùÿ¤ïúÿfæüÿOãüÿOâüÿOãüÿPåüÿQéûÿRîúÿTôùÿVùøÿWü÷ÿWý÷ÿWý÷ÿWý÷ÿWü÷ÿWü÷ÿXÿúÿMÞæÿ?±ÍÿA»Õÿ8›±ÿ(jyÿ)n~ÿ)m}ÿ(l|ÿ)l|ÿ)nÿ+t„ÿ-{ÿ0ƒ•ÿ1‰œÿ2ŒŸÿ2ŒŸÿ2‹žÿ2Šžÿ4¤ÿ<“¦ÿ¤¬ÿÜßßÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿ÷÷÷ÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿÿÿÿÿYYY  BBBhøøøÿõõõÿôôôÿõõõÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿøøøÿùùùÿùùùÿøøøÿøøøÿøøøÿðøùÿ»ñúÿyéûÿOäüÿOäüÿOãüÿOãüÿOãüÿOäüÿPèûÿRíúÿTòùÿUøøÿWû÷ÿWý÷ÿXþ÷ÿXþøÿFÉÚÿ>°Ìÿ,wˆÿ(iyÿ)m}ÿ*qÿ,wˆÿ.‘ÿ1†™ÿ2Šÿ3ŒŸÿ2‹žÿ2Šÿ2Šÿ2Šÿ4£ÿ7“¦ÿtŸ§ÿÑÔÕÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿøøøÿøøøÿøøøÿøøøÿùùùÿøøøÿ÷÷÷ÿöööÿöööÿÿÿÿÿYYY¢ BBBhøøøÿõõõÿôôôÿôôôÿôôôÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿøøøÿøøøÿøøøÿøøøÿøøøÿÐôúÿŽìûÿYåüÿOäüÿOäüÿOäüÿOãüÿOãüÿOãüÿOäüÿPçûÿRìúÿSñùÿVùúÿTóõÿ7˜­ÿ(n~ÿ-{Œÿ/ƒ•ÿ1‰›ÿ2‹Ÿÿ3ŒŸÿ2‹žÿ2Šÿ2Šÿ2Šÿ2Šÿ4Ž¢ÿ5’¦ÿh›¦ÿÅÌÍÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿùùùÿøøøÿöööÿöööÿõõõÿÿÿÿÿYYY¢ BBBhùùùÿöööÿôôôÿôôôÿôôôÿõõõÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿøøøÿøøøÿøøøÿùùùÿäöùÿ¦ïúÿfçüÿOäüÿOäüÿOäüÿOäüÿOäüÿOãüÿOãüÿOâüÿOãüÿRíÿÿ=«¾ÿ0„—ÿ3ŒŸÿ2‹Ÿÿ2Šžÿ2Šÿ2Šÿ2Šÿ2Šÿ2Šÿ3¡ÿ5“§ÿ^™¦ÿ¹ÃÅÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿùùùÿøøøÿ÷÷÷ÿöööÿõõõÿôôôÿþþþÿYYY¢ BBBhùùùÿöööÿôôôÿôôôÿõõõÿõõõÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿøøøÿùùùÿùùùÿùùùÿñøùÿ¼òúÿzéûÿOäüÿOäüÿOäüÿOäüÿOäüÿOäüÿOäüÿPèÿÿFÉàÿ1†™ÿ2Šÿ2Šÿ2Šÿ2Šÿ2Šÿ2Šÿ3Œ ÿ5“§ÿU–¤ÿ¬º½ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿøøøÿöööÿõõõÿóóóÿñññÿýýýÿYYY¢ BBBhùùùÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿøøøÿøøøÿùùùÿùùùÿùùùÿÑôúÿìûÿZåüÿOäüÿOäüÿOäüÿOäüÿOæþÿMÞöÿ4‘¥ÿ1ˆ›ÿ2Šÿ2Šÿ2Šÿ3‹Ÿÿ5“§ÿK–¥ÿž³¸ÿðññÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿúúúÿùùùÿøøøÿ÷÷÷ÿõõõÿóóóÿñññÿïïïÿüüüÿYYY¢ BBBhùùùÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿøøøÿøøøÿùùùÿùùùÿùùùÿäöùÿ§ïúÿhçüÿOäüÿOäüÿOäüÿQéÿÿ;§¼ÿ0…˜ÿ2Šÿ2‹žÿ5’¦ÿD”¦ÿ‘ª°ÿéêêÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿùùùÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿíííÿûûûÿYYY¢ BBBhùùùÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿòøùÿ¾òúÿ{éûÿOäüÿQéÿÿDÂÙÿ0…—ÿ4¤ÿ>”¦ÿ…¦­ÿàââÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿöööÿõõõÿôôôÿòòòÿðððÿîîîÿìììÿúúúÿYYY¢BBBhùùùÿ÷÷÷ÿõõõÿõõõÿõõõÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿÒôúÿ’íüÿUÜòÿ6’¥ÿz£¬ÿÖÙÚÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿùùùÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿ÷÷÷ÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿéééÿøøøÿ[[[ŸBBBhùùùÿ÷÷÷ÿõõõÿõõõÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿÊôúÿµÙàÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿùùùÿøøøÿ÷÷÷ÿöööÿôôôÿòòòÿðððÿîîîÿìììÿêêêÿæææÿ÷÷÷ÿ\\\•BBBhùùùÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿùùùÿøøøÿ÷÷÷ÿöööÿóóóÿñññÿðððÿíííÿìììÿêêêÿæææÿàààÿòòòÿWWWtBBBhùùùÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿ÷÷÷ÿöööÿôôôÿòòòÿðððÿîîîÿíííÿëëëÿçççÿãããÿÛÛÛÿéééù???DBBBhùùùÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿùùùÿùùùÿúúúÿûûûÿûûûÿûûûÿúúúÿøøøÿ÷÷÷ÿöööÿôôôÿòòòÿðððÿîîîÿìììÿéééÿåååÿáááÿ×××ÿÒÒÒÿÈÈÈÛ BBBhúúúÿ÷÷÷ÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿöööÿðððÿìììÿíííÿðððÿñññÿñññÿñññÿñññÿðððÿïïïÿîîîÿìììÿêêêÿæææÿãããÿÞÞÞÿÙÙÙÿÒÒÒÿ···ÿÚÚÚÿrrr{BBBhúúúÿøøøÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿøøøÿîîîÿÜÜÜÿËËËÿÆÆÆÿÊÊÊÿÏÏÏÿÓÓÓÿÖÖÖÿØØØÿÛÛÛÿÛÛÛÿÛÛÛÿ×××ÿÔÔÔÿÐÐÐÿÍÍÍÿÆÆÆÿ···ÿ¢¢¢ÿÑÑÑÿ®®®± BBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿ÷÷÷ÿèèèÿÈÈÈÿ¦¦¦ÿ“““ÿ•••ÿšššÿŸŸŸÿ£££ÿ©©©ÿ­­­ÿ°°°ÿ®®®ÿªªªÿ¦¦¦ÿ¢¢¢ÿœœœÿ———ÿŸŸŸÿ×××ÿÀÀÀÃBBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿ÷÷÷ÿæææÿÁÁÁÿ———ÿÿÿ‘‘‘ÿÿŒÿŠŠ‰ÿŠŠŠÿŠŠŠÿŽŽŽÿ•••ÿ™™™ÿžžžÿ¯¯¯ÿ¿½½ÿ÷÷÷ÿÆÆÆËBBBhúúúÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿøøøÿèèèÿ»»»ÿ›››ÿóóóÿûûûÿûûûÿùùùÿõõôÿììëÿãääÿÚÚÚÿ×Ö×ÿØ×ØÿÙÙÙÿØØØÿÙÙÙÿø÷÷ÿ½½½ÇBBBhûûûÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿùùùÿèèèÿ»»»ÿÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿóóóÿëëëÿßßßÿÖÖ×ÿõõõÿ¼¼¼ÄBBBhûûûÿùùùÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿøøøÿèèèÿ¼¼¼ÿÿ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿùøøÿðïïÿæææÿßßßÿ×××ÿöööÿ»»»Å"BBBhúúúÿúúúÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿ÷÷÷ÿèèèÿ½½½ÿœœœÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿþýþÿøøøÿïïïÿåääÿÚÚÚÿÔÖÖÿ÷÷øÿ½½½Ã %BBBhúúúÿúúúÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿûûûÿöööÿæææÿ½½½ÿ›››ÿóóóÿÿÿÿÿÿÿÿÿýýýÿøøøÿðððÿååäÿØÙØÿÒÒÒÿôôôÿ¾¾¾ÂBBBhúúúÿúúúÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿúúúÿùùùÿõõõÿæææÿ½½½ÿ›››ÿòòòÿÿÿÿÿþþþÿ÷÷÷ÿðððÿäääÿØØØÿÒÒÒÿ÷÷÷ÿÀÀÀÄBBBhûûûÿúúúÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿüüüÿûûûÿùùùÿøøøÿóóóÿåååÿ¾¾¾ÿ›››ÿñññÿÿÿÿÿøøøÿïïïÿäääÿØØØÿÑÑÑÿøøøÿ¾¾¾ÉBBBhûûûÿúúúÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿûûûÿùùùÿøøøÿ÷÷÷ÿòòòÿäääÿ½½½ÿœœœÿòòòÿúúúÿïïïÿäääÿ×××ÿÒÒÒÿøøøÿÀÀÀÌ&BBBhûûûÿûûûÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿøøøÿ÷÷÷ÿõõõÿñññÿãããÿ½½½ÿÿðððÿñññÿäääÿ×××ÿÓÓÓÿùùùÿÄÄÄÌ'BBBhûûûÿûûûÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿûûûÿùùùÿøøøÿöööÿõõõÿôôôÿïïïÿáááÿºººÿŸŸŸÿêêêÿåååÿØØØÿÔÔÔÿùùùÿÄÄÄÌ"BBBhûûûÿûûûÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿ÷÷÷ÿöööÿôôôÿòòòÿìììÿÝÝÝÿ¶¶¶ÿ£££ÿèèèÿ×××ÿÔÔÔÿûûûÿÉÉÉÍ BBBhüüüÿûûûÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿøøøÿöööÿóóóÿòòòÿïïïÿêêêÿØØØÿ¯¯¯ÿ°°°ÿâââÿÔÔÔÿúúúÿÅÅÅÐ!BBBhüüüÿûûûÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿøøøÿ÷÷÷ÿõõõÿóóóÿñññÿïïïÿîîîÿæææÿÔÔÔÿ¨¨¨ÿ¼¼¼ÿäääÿúúúÿÄÄÄÑ#BBBhüüüÿüüüÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿ÷÷÷ÿöööÿôôôÿòòòÿðððÿîîîÿëëëÿáááÿÌÌÌÿ¢¢¢ÿÏÏÏÿÿÿÿÿÂÂÂÒ#???hûûûÿüüüÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿûûûÿùùùÿ÷÷÷ÿõõõÿôôôÿóóóÿðððÿîîîÿìììÿèèèÿÝÝÝÿÂÂÂÿ§§§ÿÿÿÿÿÊÊÊÑ!???hûûûÿüüüÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿøøøÿöööÿôôôÿòòòÿðððÿíííÿìììÿéééÿãããÿÖÖÖÿ±±±ÿáááÿÃÃÃÓ%%%"???hüüüÿüüüÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿúúúÿùùùÿ÷÷÷ÿõõõÿôôôÿóóóÿðððÿîîîÿìììÿêêêÿåååÿÛÛÛÿÂÂÂÿÚÚÚÿ½½½Ò$???hýýýÿýýýÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿýýýÿüüüÿûûûÿùùùÿøøøÿöööÿôôôÿòòòÿïïïÿíííÿìììÿéééÿäääÿÝÝÝÿ×××ÿäääÿ©©©Â$CCCmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿýýýÿüüüÿöööÿæææÿÆÆÆæ___€Aeee€cccƒbbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚bbb‚ddd‚ddd‚ddd‚ddd‚ddd‚ddd‚ddd‚dddeee}___x111]%  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿàÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀÿÿÿÿÀ?ÿÿÿÿÀÿÿÿÿÀ¿ÿÿÿÿÀÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀ/ÿÿÿÿÿÀ_ÿÿÿÿÿÀ?ÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÿÀÿÿÿÿÿÿÀ ÿÿÿÿÿÿÀÿÿÿÿÿÿÀ/ÿÿÿÿÿÿÀ_ÿÿÿÿÿÿÀ¿ÿÿÿÿÿÿÀÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀOÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(@€ B!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!) f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f fìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿ f fìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿ f fìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿ f fìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿåååÿ f fíííÿíííÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿåååÿ f fíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿ f fîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿ f fîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿ f fîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿçççÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿçççÿçççÿ f fîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿ×××ÿ­­­ÿÎÎÎÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿçççÿçççÿçççÿçççÿ f fïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿíííÿêêêÿ´´´ÿQ^`ÿ5HLÿWXXÿ———ÿÎÎÎÿêêêÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿèèèÿèèèÿçççÿ f fïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿÖÖÖÿƒ„ÿ.LSÿ Q[ÿ&dsÿ1sƒÿ6GLÿUUUÿ’’’ÿÎÎÎÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿ f fïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿëëëÿ¯¯¯ÿIWZÿ"OZÿ!T_ÿMWÿIRÿ+s„ÿ8œ´ÿ0t…ÿ5EIÿZZZÿ•••ÿÑÑÑÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿéééÿéééÿ f fñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿÛÛÛÿ†ˆ‰ÿ0MTÿ#Wdÿ!S^ÿMWÿMWÿMWÿJTÿ.}ÿ9Ÿ¹ÿ5”ªÿ1fsÿ8DGÿ```ÿ¡¡¡ÿÙÙÙÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿ f fòòòÿñññÿñññÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿêêêÿ­­­ÿN[^ÿ!OZÿ#Wdÿ!R^ÿMXÿMWÿMWÿMWÿLUÿNXÿ0•ÿ7˜°ÿ8›´ÿ5”«ÿ0iwÿ9EHÿbbbÿÿØØØÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿ f fòòòÿòòòÿòòòÿñññÿñññÿðððÿïïïÿïïïÿïïïÿÕÕÕÿw{|ÿ)KTÿ#Wdÿ"Taÿ!R^ÿNXÿMWÿMWÿMWÿMWÿMWÿKUÿP[ÿ2ŠŸÿ6–­ÿ5”«ÿ8œ´ÿ5“ªÿ0huÿ7FIÿ___ÿ   ÿÖÖÖÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿ f fóóóÿòòòÿòòòÿòòòÿñññÿñññÿñññÿêêêÿ§§§ÿFW[ÿ!Q]ÿ#Vcÿ!R^ÿ!R^ÿOZÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿJSÿ"Xdÿ5’©ÿ5”¬ÿ5“ªÿ5•¬ÿ8œ´ÿ6•¬ÿ0jyÿ9CFÿ]]]ÿ¦¦¦ÿéééÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿ f fóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿßßßÿ{~ÿ+LTÿ#Wdÿ"T`ÿ!R^ÿ!R^ÿ P\ÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿIRÿ'hwÿ6—¯ÿ5”«ÿ5“ªÿ5“ªÿ5”«ÿ8œµÿ5¥ÿ.^jÿ^abÿàààÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿ f fóóóÿóóóÿóóóÿóóóÿóóóÿßßßÿmx{ÿ O[ÿ#Wcÿ!R^ÿ!R^ÿ!R^ÿ!Q]ÿMXÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿJSÿ*pÿ6—¯ÿ5“ªÿ5“ªÿ5“ªÿ5“ªÿ6–­ÿ7–¬ÿSdgÿÜÜÜÿìììÿìììÿìììÿìììÿëëëÿëëëÿ f fôôôÿôôôÿôôôÿóóóÿóóóÿ£³·ÿ3†™ÿ MYÿ!R^ÿ!R^ÿ!R^ÿ!R^ÿNYÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿIRÿ,xŠÿ6˜°ÿ5“ªÿ5”«ÿ5“ªÿ1…˜ÿ1…—ÿN`eÿÙÙÙÿíííÿìììÿìììÿìììÿìììÿìììÿ f fôôôÿôôôÿôôôÿôôôÿôôôÿ£µ¹ÿEÆãÿ-xŠÿKVÿ!R^ÿ!R^ÿPZÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿMWÿLUÿLVÿ0ƒ–ÿ6—¯ÿ5‘¨ÿ0ƒ–ÿ/~ÿ2†™ÿG_dÿÕÕÕÿíííÿíííÿíííÿìììÿìììÿìììÿ f fõõõÿõõõÿôôôÿôôôÿôôôÿ¤µ¹ÿDÄàÿC¿Ûÿ(gvÿKVÿ OZÿJTÿJSÿISÿIRÿHQÿGQÿGPÿGPÿGPÿGPÿGPÿGPÿHRÿJTÿLUÿJTÿ#Zfÿ3ޤÿ0ƒ–ÿ/~ÿ/‘ÿ2†™ÿC^eÿÐÐÐÿîîîÿíííÿíííÿíííÿíííÿìììÿ f fõõõÿõõõÿõõõÿõõõÿôôôÿ¤µ¹ÿCÁÝÿEÄáÿA»Öÿ)k{ÿ!T`ÿ#\hÿ$_lÿ%cqÿ'hvÿ)m|ÿ*r‚ÿ,wˆÿ.~ÿ/ƒ•ÿ1ˆ›ÿ3Ž¢ÿ4“§ÿ6˜­ÿ8³ÿ9¡¸ÿ;§¾ÿ;¥½ÿ.{Œÿ/ÿ/‘ÿ/‘ÿ2†™ÿ>^eÿËËËÿîîîÿîîîÿíííÿíííÿíííÿíííÿ f föööÿõõõÿõõõÿõõõÿõõõÿ¥¶ºÿCÁÝÿCÁÝÿCÁÞÿKØæÿA¹Îÿ?³Íÿ@·ÑÿA¹ÓÿAºÕÿB»ÖÿB¼×ÿB½ØÿB½ØÿB¼×ÿB¼×ÿB¼×ÿB»ÖÿB»ÖÿAºÕÿA¹ÔÿB¾Ùÿ7™®ÿ(jzÿ.|Žÿ/€’ÿ/‘ÿ2†šÿ:_gÿÄÄÄÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿ f föööÿöööÿöööÿõõõÿõõõÿ¥¶ºÿCÁÝÿCÁÝÿC¿ÜÿUööÿPåëÿ?³Ïÿ@·Ñÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@·Ñÿ?³Íÿ+t…ÿ(k{ÿ,u…ÿ/€’ÿ/‘ÿ2†™ÿ6`iÿ½½½ÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ f föööÿöööÿöööÿöööÿöööÿ¥¶ºÿCÁÝÿC¿ÜÿGÌâÿXþøÿXþøÿEÆÙÿ?³Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA»Õÿ6—­ÿ(iyÿ)n~ÿ)oÿ/~ÿ/‘ÿ1…˜ÿ4bmÿ¶¶¶ÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿ f f÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿ¥·»ÿCÁÝÿB½ÛÿNßêÿXÿùÿXÿùÿSïðÿ@¶Ðÿ@µÐÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@·Ñÿ?´Îÿ,v†ÿ(l|ÿ)n~ÿ)m}ÿ,w‰ÿ/€’ÿ1…˜ÿ1dpÿ®®®ÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿ f f÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿ¥·»ÿCÁÝÿCÀÝÿSðòÿXþøÿWü÷ÿYÿúÿNßçÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÕÿ4¤ÿ(jyÿ)n~ÿ)n~ÿ)n~ÿ*pÿ/‘ÿ1„—ÿ/guÿ§§§ÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿ f føøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ¦·»ÿCÀÝÿFÊáÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXþùÿFÈÚÿ?³Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¸Òÿ=¬Åÿ)n~ÿ)m}ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ-yŠÿ1„—ÿ.kxÿŸŸŸÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿ f føøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ¦·»ÿB¾ÜÿKØèÿXÿùÿWü÷ÿWü÷ÿWü÷ÿXÿùÿSïðÿ@µÐÿ@µÐÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA»Öÿ3Œ ÿ(jyÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ*r‚ÿ0„–ÿ-n|ÿ———ÿñññÿðððÿðððÿïïïÿïïïÿïïïÿ f f÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿ§·»ÿC¾ÜÿQéðÿXÿøÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿúÿK×âÿ?±Íÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¸Òÿ=­Æÿ*o€ÿ)m}ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ.}ÿ,qÿÿñññÿñññÿñññÿñññÿðððÿïïïÿ f føøøÿøøøÿ÷÷÷ÿøøøÿøøøÿ¦·»ÿDÄßÿVøöÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWýøÿWû÷ÿDÀÖÿ?³Ïÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA»Õÿ2Šžÿ(jyÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ+t„ÿ,t„ÿƒ……ÿîîîÿòòòÿòòòÿñññÿñññÿñññÿ f føøøÿøøøÿøøøÿøøøÿøøøÿ¦¶»ÿIÑåÿXÿùÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXÿùÿSïðÿ@·Ñÿ@µÐÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¸Óÿ<«Ãÿ)n~ÿ)m}ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)oÿ+t„ÿw{|ÿëëëÿóóóÿóóóÿòòòÿòòòÿòòòÿ f f÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿ§·»ÿOâìÿYÿúÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿYÿúÿK×ãÿ>±Íÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÕÿ2ˆ›ÿ(jyÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ,u†ÿ™žŸÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿ f f÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿ¨¾ÁÿTóóÿXÿùÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWýøÿWúöÿDÀÕÿ?´Ïÿ@¶ÐÿA¹Ôÿ;¥½ÿ(l|ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m|ÿ(l|ÿ+t…ÿ-{Œÿ^‡‘ÿæææÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿ f föööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿãö÷ÿŸóùÿbôùÿVùøÿWü÷ÿWý÷ÿWý÷ÿWý÷ÿWü÷ÿWü÷ÿWü÷ÿXÿùÿQéìÿ?´Ïÿ@¶ÐÿA¹Óÿ/€’ÿ(kzÿ)n~ÿ)n~ÿ)m}ÿ(l|ÿ)m}ÿ*p€ÿ-{ÿ1‡™ÿ[Ž™ÿºÁÃÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ f fõõõÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿî÷øÿµðúÿuìúÿRíúÿTóùÿU÷øÿWû÷ÿWý÷ÿWý÷ÿWý÷ÿXÿùÿIÑßÿ@µÒÿ:¢¸ÿ(kzÿ)m}ÿ)l|ÿ)oÿ+t„ÿ-{Œÿ1†˜ÿ5‘¥ÿQÿ³½¿ÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ f fôôôÿõõõÿöööÿöööÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿùùùÿÑóùÿyèûÿPäüÿPæüÿQêûÿTòùÿVøøÿWýøÿWúöÿCÁÖÿ-{Žÿ(l|ÿ+t…ÿ/ÿ1‡šÿ3ŒŸÿ6•©ÿC¡ÿ§µ¸ÿõõõÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿøøøÿöööÿ f fôôôÿôôôÿõõõÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿÚôùÿ—íûÿZäüÿOãüÿOäüÿPçûÿTñÿÿIÑàÿ.|ÿ1‡šÿ2‹žÿ3 ÿ5“§ÿ> ÿˆ¢¨ÿéééÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿùùùÿ÷÷÷ÿôôôÿ f fõõõÿõõõÿõõõÿõõõÿöööÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿëöøÿ²ðúÿpèûÿOãüÿOäýÿNßøÿ5“¦ÿ2Šÿ5’¦ÿ;¢ÿ…¡§ÿäååÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿûûûÿûûûÿûûûÿúúúÿ÷÷÷ÿõõõÿñññÿ f fõõõÿõõõÿõõõÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿøùùÿÎôúÿ†ëûÿXêÿÿ=ª¿ÿ9Šœÿwš£ÿÜÞÞÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿõõõÿñññÿîîîÿ f föööÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿæ÷úÿ¡ßéÿÓרÿùùùÿùùùÿúúúÿùùùÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿøøøÿõõõÿòòòÿîîîÿêêêÿ f föööÿöööÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿúúúÿùùùÿúúúÿùùùÿ÷÷÷ÿõõõÿñññÿíííÿèèèÿÞÞÞÿ f876- föööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿëëëÿÙÙÙÿÚÚÚÿÞÞÞÿàààÿàààÿÜÜÜÿÕÕÕÿËËËÿ f876- f÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿøøøÿÕÕÕÿ§§§ÿ¦¦¦ÿ©©©ÿªªªÿ«««ÿ¬¬¬ÿ®®®ÿ f876- f÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿøøøÿÐÐÐÿ§§§ÿòòòÿðððÿéééÿÞÞÞÿÖ××ÿ f876- føøøÿøøøÿøøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿøøøÿÑÑÑÿ§§§ÿÿÿÿÿþþþÿöööÿæåæÿ f876- føøøÿøøøÿøøøÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿöööÿÐÐÐÿ¿½½ÿþþþÿöööÿåååÿ f876- føøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿùùùÿóóóÿ¿½½ÿÌÌÌÿöööÿåååÿ f876- fùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿðððÿ§§§ÿÉÉÉÿåååÿ f876- fùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿóóóÿìììÿ§§§ÿÈÈÈÿ f876- fúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿôôôÿðððÿæææÿ§§§ÿ f876- fúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿôôôÿðððÿëëëÿ¿½½ÿ f876- fúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿúúúÿ÷÷÷ÿôôôÿðððÿìììÿäääÿ f876- f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f876-///999999999999999999999999999999999999999999999999999999999999999999999999999999999999???::: ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€?ÿÿ€ÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿ€?ÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(0` €% / ] f d d d d d d d d d d d d d d d d d d d d d d d d d d ffU$ËËËÿòòóÿííïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿîîïÿííîÿþþþÿYYY­)ÚÚÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿýþÿÿüýþÿüýþÿüýþÿüýþÿüýþÿûýþÿÿÿÿÿ__`¯'ÒÒÓÿýþÿÿöøùÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõõöÿôõöÿôõöÿôõöÿôõöÿóóôÿÿÿÿÿ[[\¬'ÒÒÓÿýþÿÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõõöÿôõöÿôõöÿóôõÿÿÿÿÿ[[\¬'ÒÒÓÿýþÿÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷÷ÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõõöÿôõöÿóôõÿÿÿÿÿ[[\¬'ÓÒÓÿýþÿÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿö÷øÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõõöÿóôõÿÿÿÿÿ[[\¬'ÓÒÓÿþþÿÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿ÷÷øÿö÷øÿö÷øÿñòóÿÈÉÉÿáâãÿö÷øÿöö÷ÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿôõöÿÿÿÿÿ[[\¬'ÒÒÓÿþþÿÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷÷øÿ÷÷øÿ÷÷øÿÝÞßÿoxzÿ2NTÿX_aÿ§¨¨ÿçèèÿö÷øÿöö÷ÿöö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿõö÷ÿôõöÿÿÿÿÿ[[\¬'ÒÓÓÿþÿÿÿøøùÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿ÷øùÿôôõÿ©ª«ÿ°Éÿ*r‚ÿ(l{ÿ,wˆÿ/“ÿ0‚•ÿpz}ÿö÷øÿö÷øÿõöøÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúúûÿúúûÿùúûÿz¸ÆÿDÃáÿPæíÿYÿùÿU÷ôÿB¼Óÿ?´Ïÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÕÿ3Œ¡ÿ(jyÿ)n~ÿ*pÿ/‘ÿ1ƒ–ÿgtxÿöö÷ÿ÷÷øÿõöøÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúúûÿúúûÿúúûÿz¸ÆÿFÉäÿUöôÿWýøÿXÿùÿOãéÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¸Òÿ=­Åÿ*pÿ)m}ÿ)n~ÿ)m}ÿ-yŠÿ1…˜ÿ_ptÿóóôÿ÷÷øÿööøÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúúûÿúúûÿúúûÿz¶ÆÿJÕêÿXþøÿWü÷ÿWü÷ÿXÿùÿGÍÝÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÕÿ2‰ÿ(jyÿ)n~ÿ)n~ÿ)m}ÿ*q‚ÿ1†™ÿWjpÿïðñÿ÷øùÿöö÷ÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúúûÿúúûÿúúûÿz¶ÆÿOäñÿXÿùÿWü÷ÿWü÷ÿXþøÿTôòÿA¹Òÿ?´Ïÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¹Óÿ<ªÂÿ)n~ÿ)m}ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ0‚”ÿPhmÿëìíÿ÷øùÿö÷øÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿúûüÿúûüÿúúûÿ{¸ÆÿV÷ùÿXþøÿWü÷ÿWü÷ÿWü÷ÿXÿùÿNáèÿ?²Îÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÔÿ1†™ÿ(jzÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ.z‹ÿEbiÿâãäÿ÷øùÿöøùÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿûûüÿúûüÿúúûÿ|¾ÉÿYÿþÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿWü÷ÿXþøÿFÈÛÿ?²Îÿ@¶ÐÿA¹Ôÿ;¦¾ÿ)l|ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)n~ÿ)m}ÿ-w‰ÿPs{ÿììíÿ÷øùÿöøùÿÿÿÿÿ[[[¬'ÓÓÓÿÿÿÿÿûûüÿûûüÿúûüÿ‡×ÛÿYÿýÿWý÷ÿWý÷ÿWý÷ÿWü÷ÿWü÷ÿXþøÿTòòÿA¸Ñÿ@µÐÿA¹Ôÿ0ƒ–ÿ(jzÿ)n~ÿ)n~ÿ)m|ÿ(l|ÿ*q‚ÿ.|ÿI€Œÿ¹¿Áÿøøùÿøøùÿöøùÿÿÿÿÿ[[[­(ÓÓÓÿÿÿÿÿûûüÿûûüÿúûüÿìúüÿ³óüÿoñúÿTôùÿVùøÿWü÷ÿWý÷ÿWý÷ÿYÿùÿMÝæÿ@¶Òÿ:¢¹ÿ(jzÿ(l|ÿ)m}ÿ)oÿ,x‰ÿ1†™ÿE‰—ÿŸ¯³ÿñòóÿøøùÿøøùÿøøùÿ÷øùÿÿÿÿÿ[[[®)ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿúûüÿ÷ûüÿÌôûÿëüÿRèûÿRíúÿTóùÿVøøÿXþùÿFÈÙÿ-{ÿ)o~ÿ,yŠÿ0ƒ–ÿ4¤ÿ? ÿ“¨­ÿíîïÿøùúÿøùúÿøùúÿøøùÿøøùÿøøùÿÿÿÿÿ[[[°)ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúúûÿÚöûÿ™íüÿZåüÿOäüÿRìÿÿJÖçÿ/“ÿ2Šÿ5”¨ÿ:¢ÿž¥ÿáâäÿùùúÿùùúÿøùúÿøùúÿøùúÿøùúÿøùúÿ÷÷÷ÿÿÿÿÿ[[\­&ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúûüÿúúûÿíøûÿ²ñûÿmèýÿOãüÿ8±ÿ7 ÿs˜¡ÿÚÝÞÿùúûÿùùúÿùùúÿøøùÿøøùÿ÷øùÿ÷øùÿ÷øúÿ÷øøÿôôóÿÿÿÿÿ]]]©"ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúúûÿúúûÿùúûÿÇöüÿ‡ÉÕÿËÏÐÿúúûÿùúûÿùúûÿùúûÿøøùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóòÿÿÿÿÿ```²#ÓÓÓÿÿÿÿÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúúûÿúúûÿúúûÿúúûÿúúûÿúúûÿúúûÿùúûÿùúûÿýýþÿíììÿÖרÿ×××ÿ×רÿ××ÕÿÖÖÖÿßßßÿååæÿ666„ÓÓÓÿÿÿÿÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúúûÿúúûÿúúûÿúúûÿúúûÿúúûÿúúûÿÿÿÿÿ¹¸¹ÿ¾¾¿ÿÌÌÌÿÈÈÈÿÆÆÆÿÀÀÀÿÜÜÝÿuuuÌ!ÓÓÓÿÿÿÿÿüüýÿüüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúúûÿúúûÿúúûÿúúûÿúúûÿúúûÿÿÿÿÿ³³³ÿñññÿøøøÿùùùÿïïïÿëëìÿ’’’Ù 4ÓÓÓÿÿÿÿÿüüýÿüüýÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúúûÿúúûÿúúûÿúúûÿúúûÿÿÿÿÿ¶¶¶ÿñññÿþþþÿëëëÿêêêÿ˜˜šÙ0ÓÓÓÿÿÿÿÿüüýÿüüýÿüüýÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúûüÿúúûÿúúûÿúúúÿÿÿÿÿµµµÿãããÿìììÿããäÿ˜˜˜Ô -ÓÓÓÿÿÿÿÿüüýÿüüýÿüüýÿüüýÿüüýÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúûüÿúûüÿúùúÿöööÿÿÿÿÿ¶¶¶ÿÚÚÚÿååçÿ‰‰‰Ì +ÓÓÓÿÿÿÿÿüüýÿüüýÿüüýÿüüýÿüüýÿüüýÿûüýÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿûûüÿúúûÿöööÿóóóÿö÷öÿ¼¼¼ÿÙÙÙÿ———Ò&ÓÓÓÿÿÿÿÿþþÿÿþþÿÿþþÿÿþþÿÿþþÿÿþþÿÿÿþÿÿýÿÿÿýýþÿýýþÿýýþÿýýþÿýýþÿýýþÿýýþÿýýþÿýýþÿþþÿÿùùùÿ÷÷÷ÿîëìÿÙÙÚÿË$ÓÓÓÿñññÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿôòñÿÓÛÝþnrs¬ÖÖÖüØØØüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüÖÖÖüäáàü­ÅǶ !+ÿÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ €-+++++++++++++++++,/+}}}¬–––ÀœÏœœœÎœœœÎœ››ÎœœœÎ›œœÎ›œœÎ›œœÎ›œœÎ›››Îš››Îš››Îš››Îš››Îš››Îš››ÎšššÎšššÎÏ”””ÍLÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJÕÕÕÿôôôÿúúúÿùùùÿ÷ùùÿøùùÿøùùÿøùùÿöøøÿöøøÿöøøÿöøøÿöøøÿöööÿõööÿõööÿõööÿõööÿõööÿõööÿûúúÿìííýHÖÖÖÿõööÿûüüÿùùùÿùùùÿøùùÿøùùÿøùùÿøøøÿøøøÿ÷øøÿ÷øøÿ÷øøÿ÷øøÿ÷øøÿ÷÷÷ÿö÷÷ÿö÷÷ÿö÷÷ÿö÷÷ÿûüüÿîïïýIÖÖÖÿõööÿûüüÿùúúÿùùùÿùùùÿøùùÿøùùÿøùùÿøøøÿâââÿíîîÿ÷øøÿ÷øøÿ÷øøÿ÷øøÿ÷÷÷ÿö÷÷ÿö÷÷ÿö÷÷ÿûüüÿîïïýIÖÖÖÿöööÿúüüÿùúúÿùúúÿùùùÿùùùÿùùùÿôõõÿ”™šÿ2S[ÿVhlÿ±²²ÿñòòÿ÷øøÿ÷øøÿ÷øøÿö÷÷ÿö÷÷ÿö÷÷ÿûüüÿîïïýIÖÖÖÿöööÿüüüÿúúúÿùúúÿùúúÿùúúÿÕÕÕÿSejÿ Q\ÿPZÿ,wˆÿ0u†ÿYfhÿ¹ººÿôõõÿ÷øøÿ÷÷÷ÿ÷÷÷ÿö÷÷ÿûüüÿîïïýIÖÖÖÿöööÿüüüÿúúúÿúúúÿôõõÿ•—ÿ+QZÿ"VbÿNXÿLVÿKTÿ0ƒ—ÿ7š²ÿ1n}ÿ^knÿ¹ººÿóôôÿ÷øøÿ÷÷÷ÿûüüÿîïïýIÖÖÖÿöööÿüýýÿúûûÿÔÔÔÿPcgÿ"Taÿ"UaÿNXÿMWÿMWÿLVÿMWÿ2ˆÿ9ž·ÿ6—®ÿ/l{ÿowyÿõööÿ÷øøÿüýýÿïïïýIÖÖÖÿöööÿýýýÿ£µ¹ÿ8ajÿ"T`ÿ!S_ÿNYÿMWÿMWÿMWÿMWÿJTÿ T_ÿ3£ÿ6–®ÿ9œµÿBozÿìííÿ÷øøÿüýýÿïððýIÖÖÖÿöööÿýýýÿ’ËØÿ=«Ãÿ"UbÿGQÿFOÿGPÿHRÿISÿJTÿLVÿKTÿ%drÿ4¥ÿ1…˜ÿ­Ãÿ0…–ÿ2‹žÿ4¤ÿ6•ªÿ7š°ÿ9Ÿ¶ÿ:¤»ÿ<©Áÿ9 ·ÿ,x‰ÿ1„—ÿ7lwÿáááÿøøøÿüýýÿïððýIÖÖÖÿö÷÷ÿýþþÿ‘ÆÑÿA¸ÔÿPæñÿNßêÿA¸ÕÿB¼×ÿB»ÖÿAºÕÿAºÔÿA¹ÔÿB½Øÿ2‹ ÿ)l|ÿ0ƒ–ÿ2mzÿÙÚÚÿøøøÿýýýÿïððýIÖÖÖÿ÷÷÷ÿþþþÿ‘ÆÒÿBºÖÿTòóÿWý÷ÿC¿Õÿ?´Ïÿ@¶Ðÿ@¶Ðÿ@¶ÐÿA¸Òÿ=¬Äÿ)n}ÿ)m|ÿ.|Žÿ.p~ÿÐÑÑÿøùùÿýþþÿðððýIÖÖÖÿ÷÷÷ÿþþþÿ‘ÅÑÿEÂÙÿWüøÿXÿùÿRëîÿ?³Ïÿ@¶Ðÿ@¶Ðÿ@¶ÐÿAºÕÿ1…˜ÿ(jzÿ)m}ÿ+t…ÿ,r‚ÿÇÇÈÿøùùÿýþþÿðññýIÖÖÖÿ÷÷÷ÿþþþÿ’ÆÒÿKÔâÿXÿúÿWü÷ÿXÿùÿJÓàÿ?²Îÿ@¶ÐÿA¸Óÿ<©Áÿ(m|ÿ)n~ÿ)n~ÿ)oÿ)q€ÿ»¼¼ÿøùùÿýþþÿðññýIÖÖÖÿ÷øøÿþþþÿ“ËÔÿQçêÿXÿùÿWü÷ÿWýøÿVúöÿC¾Ôÿ?´ÏÿAºÕÿ0‚•ÿ(kzÿ)n~ÿ)m}ÿ)oÿ,u†ÿ»½½ÿùùùÿþþþÿðññýIÖÖÖÿøøøÿÿÿÿÿ¶ëïÿoóõÿWûøÿWý÷ÿWý÷ÿXÿùÿQçëÿ@¶Ñÿ;¦½ÿ(kzÿ(l|ÿ)oÿ-z‹ÿ8{ŠÿŸ¤ÿö÷÷ÿùúúÿþÿÿÿñññýIÖÖÖÿøøøÿÿÿÿÿýýýÿùýýÿÉöüÿïûÿSïúÿUõøÿXÿúÿIÑßÿ-{ÿ*rƒÿ0„—ÿ7ˆ›ÿ£ÿæèèÿúúúÿúúúÿøúúÿþÿÿÿöööýIÖÖÖÿøøøÿÿÿÿÿýýýÿýýýÿüýýÿüýýÿÙ÷üÿ”íüÿZéþÿMÝðÿ3‹žÿ5¢ÿo—ŸÿØÚÛÿûûûÿúûûÿúúúÿþþþÿÿÿÿÿÿÿÿÿÙÙÙýJÖÖÖÿøøøÿÿÿÿÿýýýÿýýýÿýýýÿýýýÿüýýÿüüüÿîúüÿ­ôýÿs¯»ÿÍÑÒÿûüüÿûûûÿûûûÿÿÿÿÿÿÿÿÿéééÿ×××ÿÍÍÍÿ²²²þBÖÖÖÿøøøÿÿÿÿÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿüüüÿüüüÿüüüÿüüüÿûüüÿûüüÿÿÿÿÿ×××ÿ¤¦¦ÿ¦¦¦ÿ¥¥¥ÿ±±±ÿµµµÿ! ÖÖÖÿùùùÿÿÿÿÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿüüüÿüüüÿüüüÿüüüÿüüüÿûüüÿÿÿÿÿÚÚÚÿÞÞÞÿÿÿÿÿïïïÿÄÄÄÿUUUvÖÖÖÿùùùÿÿÿÿÿýþþÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿüýýÿüüüÿüüüÿüüüÿüüüÿÿÿÿÿßààÿæææÿüüüÿÑÑÑÿ\\\pÖÖÖÿùùùÿÿÿÿÿþþþÿýþþÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿüüüÿüüüÿüüüÿÿÿÿÿÜÜÜÿÚÚÚÿÕÕÕýRRRqÖÖÖÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿÖÖÖÿÆÆÆÿTTTtÕÕÕÿçççÿêêêÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçèèÿêêêÿåååÿÆÆÆÿRRRpøðððððððððððððððððððððððð?ððÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(  @zzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿzzzÿ†††ÿððòÿññóÿñòóÿòòôÿóóôÿóôõÿôõöÿõõ÷ÿöö÷ÿ÷÷øÿ÷øùÿ†††ÿÿññóÿñòóÿòòôÿóóõÿóôõÿôõöÿõõ÷ÿöö÷ÿ÷÷øÿ÷øùÿøùúÿÿÿòòóÿòòôÿóóõÿôôõÿÈÊËÿÖÖØÿöö÷ÿ÷÷øÿøøùÿøùúÿùúúÿÿ¬¬¬ÿòòôÿóóõÿôôõÿ¾ÀÁÿ@]dÿRqyÿ½¾¿ÿøøùÿøùúÿùúúÿúûûÿ¬¬¬ÿ­­­ÿóóõÿéééÿx„ˆÿ P\ÿNXÿ%boÿ1‡ÿ]|„ÿÔÖ×ÿúûûÿûûüÿ­­­ÿ±±±ÿôôöÿ‡°ºÿ!SaÿJTÿKTÿHQÿ(kzÿ9œ´ÿ‹™›ÿûüüÿûüüÿ±±±ÿ³³³ÿõõöÿ‰ÐàÿB»Ëÿ8žµÿ;¦¾ÿ=¬Åÿ8žµÿ/‘ÿ…•˜ÿûüýÿüýýÿ³³³ÿµµµÿöö÷ÿŠÏÝÿXýûÿFÉÝÿ@µÑÿB¼Öÿ0…—ÿ,v‡ÿx‹ÿüýýÿýþþÿµµµÿ¸¸¸ÿö÷øÿ‡×ßÿZÿûÿTòñÿA¹Óÿ;¦½ÿ(jzÿ-y‹ÿk„‰ÿýþþÿýþþÿ¸¸¸ÿºººÿ÷øùÿÍôøÿ{ôúÿWûûÿLÚæÿ0ƒ˜ÿ-x‰ÿlŽ–ÿÜÞßÿýþþÿýþþÿ¸¸¸ÿ¼¼¼ÿøùúÿùúúÿúúûÿÖöüÿíúÿc—£ÿÊÏÐÿýþþÿýþþÿååæÿßßàÿºººÿ½½½ÿùúúÿúûûÿûûüÿûüüÿüýýÿüýýÿýþþÿýþþÿºººÿ¸¸¸ÿ¸¸¸ÿºººÿ¿¿¿ÿúûûÿûûüÿûüüÿüýýÿüýýÿýþþÿýþþÿýþþÿÅÅÅÿöööÿºººùÝÝÝ_ÀÀÀÿûûüÿûüüÿüýýÿüýýÿýþþÿýþþÿûüüÿýþþÿÊÊÊÿºººýãåâiÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿ¿¿¿üõõõyÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀSlic3r-1.3.0/var/spool.png000066400000000000000000000010411327442435500153110ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<ÏPLTE‘““€­­­ÂÂÂbccåääs}z=J'þþþ~‹‡¦Vv§Hnc7U.;ˆŽŒ¨ ¢Ú©Þc“®Swh*@G$…‹¢šœóËÙø¥Éù•»õ“´«Mr[,ššš¨y…ô´Èÿ²Õÿ§ÒÿÉßõ°Æ×\n3G«‹ävž÷y°ÿºÕÿÜêñ®Éð„¯A #r'Fé…§ÿÀÝŠ•‘µ´µqqq¦„ЍŸ¢‘™ÛÛÛ^_^¥ž Ÿ¤¢|||¬Š˜ ž£££nnnÿÿÿ±»‰tRNS@æØfbKGDDù´˜Á pHYs  šœ¢IDATÓUP‰‚P {9ñVåðoT¼þÿŸŒï¡Â’-i³¦Ý¡\ãs ‚˜% Hr±„ VÊj¥ZÃ×ÍV»£!ÕKÝžÞæí`$-{2ufæ\£î€ëùÁb¹2Ì5ÏÌFA0ÙXêv·¡K‡È·õã)># Ðs.W%a:ÜÛ]y¤¾Ÿ~‚‹“4“A|ý²³Ó¿xg N7ûêrIEND®B`‚Slic3r-1.3.0/var/stl.icns000077500000000000000000002056061327442435500151470ustar00rootroot00000000000000icns †ic08rb jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefqëjp2cÿOÿQ2ÿR ÿ\@@HHPHHPHHPHHPHHPÿ qˆÿS ÿ]@@HHPHHPHHPHHPHHPÿS ÿ]@@HHPHHPHHPHHPHHPÿS ÿ]@@HHPHHPHHPHHPHHPÿ“ßz8^‡&átÑo„ƒäÕ€æ›15Çj(„tl2Ð —þ <)3„þßÚNÒ1·ôúpPWÓÁðQÍè«b¦ßz@^‡&átÑvpÓ|ÊeÜŸmÄÖͦ¢Ò’˜š]ªÄJ‘ÑZÌУ‡_ôAò9â±aÿ"QCÞkå‚~Æ“Þ <ŽGßzH¹j0‰þy²ä„7×BO ò½ï¶ç^ï X¾‘½‰ð+ݼ·9Ù³P¼^ùVkêUþÂHŠ">AL¬Y×ÖßBXö5¢<Ì`Šïä{+Ü:¢R+ú¡¯ƒ€4™ŸT™ÄM¼ŠK—´ÜŠ º?ø#âè¦èÉÓãÌM,z¨ÍÛ³¶\ϼ’}äò€ËîÌö?Œ¬TèÌkì"~ã}È6ùÍ*©”ÛnÔ9CÆ Nç<䢩¿¡DöÂcüVóÆ z[(¼Y¥ˆu\‰,¦tÌ_N¶¦YXÅ8ë@=zÎ6®Æ¡Ï¾ªŸ…9…¥ #Ö}ŸEöÆŠßòÐU¿AY¾ý_r²HˆÖòèU¢p©L°Úþ¸‘Ò®lß"qÛ3UHd®ùô Bl†js—ÈfÓd=Oê²½²쪹фЙŠ­Ò©óy ÚÑMê½+Ϋû?–t#±ð²© œ¨ŸïèŒ.Ãã¶D2#¥ì̃¯²&g›Àã0Ôô€U³…ïÕ-TÁ›Úîaš{%É_2"c1i+ôÓµ"©¯Þ‹Ç¸ÃúÕ=€Ç½)‹`\—"nüúPoD³=x».z%Ø×éx¬6ÇhÇkúÎA6ö¢ü\,j…}!ôâQÝt…&½å®‹='ÇÛÞ½6ªS©yóºþjÈ»sm¯-÷¾+€uÐ%¬”ûÒsª™Ü’“ªNQºÎ›ˆ÷AZZù¬_àf'A”bÆež8Á‰V³ÄNÓ¢EÁgB ?<Ü.…ÓÎÞ'*¹¤ð¾ƒby¼IG+ÉB øu«o×vƒ)s´ö{RøýìÆ” R¶žñžK¶iB\dõ €š6ú"×±ƒ†ðõ]ö•X7†YTÂ=ÐÏûŠ-KÈ2´šX1MÔԿϾ®Ÿ…7…¥ #Ö}ŸEö¼Ø¹%™ ­Ši£Ê_œOu¿ygz:-7jVÀRÙêŸxc\âèÀá×ËZµ ÇÅç§02¢AŒ®ßš…×އ´ › jOšc.äoc‡’a?ýJOoz³KÎNó¨ }ø•Ïö†ÊL_áï@£|(®ímsºï÷âÒìléþÐ|zGŸç-ßÚ’‡^ÔM7Š:3ʲ­‚eë "íZ~8"c1i+ôÓµ"©¯Þ‹Ú€œ£Èˆ„6ChãªÇ%'зÒ:¤‡B¬ðˆx6fćDjZD$WÓ^Ñ$«2êf+>sÃxMÍe¦¼ÙF!Ï}E#ŽoúMÙÉzÅ`)ª ¶fý-®0ž›}Å'¼R¡MÈÑ‚‚Àb&„2%NÏ*GLäðk¨' ×˧ÞîFÕoý;bA”bÆdÌ’ï€!”«õfhëX r͉¦œÚ”±Ð¨¶fÙ¶P*üÉFO?ü¯>è:'UãVÅÑ´côŸiFV/àÃo0’§Ç?èšuÿ¯ vŒˆiã?Ö0ó5¹FK²«uùYãÙßlµ‹|ÿ4tx7ÞøðÖnœµ]nYJ"Rþõö}"XËϾ±Ÿ…;…¥ #Ö}ŸEö¼þBmMøº×« )¾LkíܘâÒ,÷D$†É¡ÓáÐ|AYŸ˜ýÏÉ,¶c ‰CóìÛÞ¶Ì”n¨Æ¸Wõ9a´4°F54÷+±Áh•ìíÿ0<â3ÓpÖ¡–ã{M¬uðEt5AÛä½äÏ“l)€NùºyÞÿšÓ5}ã)–r ý@‰3Ë‘àL%þ¤?rg.èŠdK¹¹½ßϽ2~‘÷”€ÒfÞüy¢u‚éð! œŸ+3äj§ò—•ø6cçÇ@A_''ò£’Z϶$±ø÷–zäP;4%ž¿ÿjcÐÇ2iÚÎ /rVÙ&Ù‹"c€­´@ŠæÍ§¥~¾…µý¶%S]§.x¤¥¢Sƒ‡,È­q€’$é¯Ðþì=KتÔr7jµÈA”d€6¼&383Œò…¬õE:C‰â+MàŸ<Ž ñJÆç'Q„.ÆòÏÃ_çá®Ñøi°%;ôK/sÁôŠi>’Ë[yY?Þ@*ž`®µ\ñì^½Ÿ‡ Œeù­’yVòI®’±úá¢ãj7¤†_¥rsQ»Bâb'eèKˆôÍ ¢œX©}n€#ÚwZÕò\¼œ=χâ󶃖'."ˆ3Ho¼_*ël9†ê~´º`ÆÒ“¬QÙ&Pu 84>âg6”Ð?çÞØ.Ùî—cÀ©µQúŽwˆ,x‡¯M”l9€z/Ö™Ìl¹ŽÏû1@xàm¾Òúšþp¬v)|ÉÁbé)éû/5*¿zCôÞÕþP±˜€Wl¡ßŠqh•:“®…´Üv»ÞF–]À¬]"74_ Bh¢”³cÆ(¢o\>B¬i,œùk| ÌÆEÛR×ÎǤÈùب²!˜:R¯}þ-¤Lö^mx¢{M§ì¨R—çÔÿpF¿ºJkt5k¨µ@›1¬2‰bÑáZ§Ö€ÚŒPV:Ÿäã ;»R¾2àGÔp–'eÐÕ Œ|º½R¼þ{•ÇìØÊ”ËðÔ®œ"”!žÖ˜+í!ÆÖj¬ûø¤4ù0ÿ:m@X­ÂÒPu+â+ܸ=;Û¹wˆsŒa$¸Š,û²óžt@±i“[Mo!Žà0Û>ý.-3S,ùûáázÃ\P(´J<‘ß¹¬Åà’ZãÌ ½ö tUÂgpq¡ˆa°$±n²–¥éÖš wÄ‘ ÷R£g+¤M—EgJÛ¤}/žÞ‰ÔþNŸËCÌÖå9p¾a¬Í;IZœ»FïéDé#b©ùý«Ö6#ùê¸ÎT¾—]ʯþ>&²Yv?ñ?!éÌ1“§Çú]h½W7äób3í%4Â燢p…&ùVw9͢ȃŸO?ÊÚ4¹Ò¾ôdz¹%%ÖÊR^X|2þ†*Z9£áÄBãj×¶Ò’+éò)éA”ãß/3{Ëuû†;EàhøVÊ}Cܬù$_w`´oèeÝp­–uIjáþæ¡y{ìÀ0  æ¢yë@rõ( HüÐòÀ'/ /—·) @èìY6ÇjöOœõ)^ê¾Ê¬MRø‹$$`YÝQã€Ý¢ì «2IÞ†*6™¢ÔÀ~Ûj§U‘ó `s>ƒ1^Œ#±n¢Ûæ3ö{‹Y× 4S›—‚.[Eæ'»]ài!( ryÊœîJ9©˜w”'žÐdÉfb¶[Ÿ]x¨’~ņ¨Œ_>i'GTj Þ`Ù·ÌP¯×Xâ‘Q㎂Uš%]÷µñMéðÕ³jþFúèÍÎëϵ¦\-sœpÌe4ÀÙ$pF+ÏyŒ$5Ð¥58‰¬WÆäHåøK­°,QþSG°ŸïX‚í¡îEä8y]IÁ„¦Úª½ÏÃagᯑøi°%;ôK/sÁôŠi>’Ë[yY?Þ@*ž`®µ\ñì^½Ÿ‡ Œeù­’yG¦DûC"û.W»Åþ‘oùèìJT!ˆ™Ä6}ͳÙ—XÖK¤+‚³ïuχ@Ty>ÔJÆx=χëPO {ÂÙ„+nßý ÝBäê™±S)>ŽØ-¬Ä6IiR àP,ÞÄ·¼ ô©vyß2Íf(^L¸o²ª©ëS鄜Ž+ðÉí(y0%Ýcê,PŽÑ€i@3³C/ßÀ †ú´Oó£gbÍM ×A˜'žw8Í·”AË£ãŒZqüY¬S ^»é-+V ƒë/áóÙ= :–ÏѲg‹Ôkϰ}ÊM{œ?šyïë"nìî‹ï7!U•”t)ؘ„nnÌ0v寽ÒÒº¶·T¤ÄoÀLÔÀC _ñ²ÄpÌA«!B×-Я‘*DÑö?ÄXêxñž`A€0Û=¯~Fú»@6Û‡_4ÎÔ¶..A‰è®™v3‚úâ!9¡øÊ©í;‡§{‡ð;w»Ü 3Õ½áy=«ž,C×½FxVÁ˜Ïo@ŠXMºqOµÐó¨CØ3ÓÒœG›Ÿõô+ׂÞ'•Oðrô­.ž1¦T›áËœ“s¾¸Pýã<-ÍþI=¾Æ.Ÿ¥Ž(–TÃ+ô9Àü{Ë•\a.'ÿ&¨OÂ8N\Årù•&Ùv:#`Ø0ºE¦ç ¤©-œÞþµ’ùñÎO¼b¹BþÏR™G×7#Yœ`! Üó-Ž—¯Í`¯MÑl¸ù˜í+ _,+AFj¡¥à‹¥”}n“Qšˆ°á ž%›S¡žÐèêü¾œGIqë½%d÷±þ'±¦GMâîÿ{ëÀr¢ÍgŽô„¶`)î[éò‰ãfàIsì¢ÏA×lœ­ :c o؃BpPV©¦llÿy©õŪ%Úõ§~¼qïºn=ªÊ„IzÆ£G90Q``ä jV(…Ã/XüqØŒ.ô=1¿uÃpU ï*'`oôÍÇ¥gÀÄ#mK`…c%<äÈ=Å#ß¾’†'dK¼|6ãæ¼ÕȤ×eúÖ±–çÚrIn~Ú2?b]qF+ (o1«~y±Ž¬â[ âB1ñödSÂ|„ÇàGÔp–'eÐÕ Œ|º½R¼êéÔƒòîÍ¢­•ȯoÄÈvá}‰Ïæ5MY¤`Ãâö/Ñ—ÿ oL‰€Š½³ý’,¤¡*è)Jœ8€[JbSw¥tÖб·å¢£ÿfÕŒƒÞx:KŠ4Åœ_d ÊGÅ«ü›uq¨`F+RÄÅŒ&Ì­ÞáE[htáË+Nd’Äcq+Ý„ð,“ZËžÉ#¹L¸C0o•YŒ#¾î”eâ/ñj‚è®\÷ÔT<™§i+SÓæ‚¨U×ÑpŽu+d¸BËÉlæÝœU KÁ ›n&xB•ñ» ѱÉ&¹))Ù²¢îB¸Ïho¿÷º×¼—üÀùL…7Ô:»1Ô9_q„D*N{k‡JD2_5Ê4ÜÜ¥)+x3ƒ>_&´ÊNšêH¥* [uÞd7¤Lõ0×9‚ô¾·Â±>sý÷Í…û†;#X}ÒP ˜ìödüBw`´oèeÝlVÚÙ`¡=ƒwÍ•f’Ð<Ñ‚èâmE[X퉀ªÉ»\ý–¿žèX3'4 î¼{b*Œ?4lû66^¢/þ{ÓªšpšGNØàhÞ0*1©µ¤â¹«­²%ŽL@ºÞy¦ÞÉÍWFj+Šýh÷£aVÿ®ÍŸÇnò¦B-Å¢€C¯1”NRŸ SƒiàšÔ¥x{2ó9´Fòׯ#º±˜ýÒ¾^X#Xò),ð3 Úÿeѯ©Í"¿é_“š‡°w×åù ¯0µü‡T{6)ägÁ˜Óc)>!Tj#ªâÙµ¬¶•R¢" ØqcÔ˟Ͼ‹±ê>ô0%hÒ“‹=ºgX7CÖEðÓ¥3±À-}×ô:Ýeû§^R$>–Õù§Å\ ²e!`FK¿JJiÁKn¼K¨~LŒÀ¿§³dÀÉÀ˜Åhôã·©\†¬-<àeÂÞîëø)fùËsï%)}uPºËri.ç$A¦ê\p@f §_,¥“i|ñäå@©c+â;š‹Yâ^XŠšñ3‡½'–D†äµOË«©r]Û î‰Æø/™+3Ÿ§+JWXžzà?tÿNaKH>÷PJÍ].&â!œ\wР6ä’I$ÄìxïºY ´QÄ4YoäI‰—$’I$“¹w`´oèe×Ze)6 ûÿmZþ¯iTEtd]"Ãл{)DÏ÷…Yà·š¾IÉŘà\Ù¿!ùz9äeÆQ==GÏõùøvO‡P ëL“¹ï“›}àÊà– 5··tÍÞrǰ¶õcÒå¬t=;gCz¿k—}¼<àçŸa'ø´¥&¾P LÖgH¡“uÛ£¡o`¿çí2tÓÀø!Gº²Ó~À౨&mùŸ:}wž¹*ßç0‡t–ý†7™7°»Kj8©w7rè±ÖìDù6  GK‘D>³|ÇŒ;Í$Ð?gÉîs¼%×ÄAäG1½Ãé¾vrkêxZ'¹{_o¦?¹À¬!¦sŠ&Û)u×'¯TÅ HQÎ_ý$º€ï7Ÿ8½LN§‡åiB2þ{Q1â­Œ ߨˆSû8ªe%£2éå%*õÅÔ0Xz/e.žh J%`)÷æ×ö­eãS\ÞËÖ˜ƒïâꛊˮÉ-v¤Šˆ4¨­iÆÃ¢’C>`”?€Ö¢SÀ;7#£çGëUçäïÙ:}Ø©5Lk´¸tÆØ´‚ ©­­¥ùÔc™ Ká½ëãÿs”\ó½9ÅÒŒ‘oD܃îH”ô%Ñ­0³’ äÿ!íŽÞÑrg&W2ß …›…CÉ$ V¿….’eœ„öÞð1èlªTЬíMWDÕa‘†QŠOËe†¹D°~¯LÆÃÞgbc;9§©¡^¾:ÐökÙŠ/ÆûÁûâY‚u ¢"ÄàÚgEv¨Æe~ãæ2П€Þ¾°åÙGÑmnU2wôy­™ä®s1¤`"%¦5wö‚žD©SãöÆÎëæ@¨8¨×™¶€øÕEø n¢U –`Äò¼’Ö®ØÆ-bq¹5yŒr’È'…wCHºÃû»¯šq­ÂùRdU#2škh„²Wü4sV@]Çq›^Óž°dß…|‹o|‚¼si´nðóÇØÓE0®üòÍí2Ìô¨¢ôñ§4©Æ¶*RM¼é</5ÇïsÆ_Bø#µÔÑú¼ÿFö=þx$F_-¬4cI?@Ve| DG«Â»‚,HÈ×duÒ‘Îû¢ló$–÷ÒÒ%Íæ+ùLä  _ÇÔ=ࣩ6aZ}–hÅ?袞¬™®p–ÉàÇÃS­…ú§£Ì«mRµ'ƒm/úLLt•šó~^ÞRÆÎ%¿œz@Ù"è¾2œ”.™/n€s5GbSq.J–h‹Ÿ’Ï‚wbÍP*,8±ÜUc zs JIÐДAŽ%ŠiiŠñfׂt·WanÌ4ä ½ªNz!Ê,¶MæúM—á¦ýp'Ù´;»r[j‰/M#›{ï…oÖ=‡¹¦#JRuvjÈÞ×da’ Kž´ MfÅe¾W}íÑoupY…ëËÞÜ󡳿ícRÃñ"½pe¿î¿0ÐÀÛb¦c]›ömÍP\C½§Uãl¦ HðšÞòŒé8ê 7,óMT‘5­ØÔpY€&ïŽo¾ Üç!GÑIêF`ÿ= Œkâ´Èå% º‡W‡Uв¬C²¾k»MÖÜ!¯G~K4«¸ß]¡0g½ºPóÜOTÜýoÙÏ5„x‡ó¹j)¦ÐË7s¶Ê`r(¤HÜG¿ùuÑ«’ÞjÉid ôm þ`óä¨Óvª³SË9†&È«á-IugÊ¡ ¿àô¤kVÈ2bÞßÑÜMá?ûÉs»x”¤v5ó 5°+ûÐ#ÆŠÃu©Cñ¶…SŒÒÄ7qm-Š*õ¤Å¾Åÿuâh±sIuÍ^äV,˜÷UªGôÅžäçq”A}Žõ–ÌÜ í%/T?®¹ó¦[¤pO„ààsAÏ-¦Mµ´ÛªÉÁÕ'÷˜ú^ªñl.0Ð îöªhÁ†Wq htšÞÞÈ|½ä}an«#¿à»Ìp6`ë—?‘çh ¹ç7û§’ø‚GPŸZv:¨a|N³«äÌa£¨ï )R7"Öã?k7*ý¥ÝõÄ÷ó7öÿHȵêËJáÍëÅÙ,»ŠmÇx’ý1gÊ|ÿXï MA¡ÏÁ<ÜaŽPî2]ˆ<*„Rü–ªòaÝB{‡.A7›‰§±w¤ÏŸ#J÷OX¢„—‘˱¬JyÞä-¼ÉbnW,`{î¶œð|ÆËÒjîþ¯$Ve¿x8â©ÜúLCž0Дò €¦Mî“»‘‘Áê=\?¦4˜ôŸŸ ü-cÆ r”ÖaFVE¢°ÖÌ)aÐE´†)ãJ"© m«0‡ QA ÒgΫöZf¼!7‹ªõ§ä ßl£hÄóÄ­Z݇oᥧ€*R@rLÄYþyXèøcBŸ¸5¬'ÍîáÃá~<²-‰µ €ËaÞ”Ì1Ö³G(×5þ•®‚8_X¡ÿ`×APtMÆè¢cl"Þqãü¦*ç>ûîL¨Éé¹…°º$­~ñ—å‘"ŒM˜ü' 'èNýqCߥ!„Jm?nØœ0Gm4tý œñsn è;ÄakªúX‚£+àÐH*¼@Éùç›è)ªžÎõl]rçͧÊAñ0qï>ÍßÀ1ŧp€[ȽöUãÅš€¨P©\GüåPkÞœGò#ÿ@íýÐh«1¹zè÷^^øÐ…þd-ÈtÏõ¾¼FÏöYøv[‡RëL“¹ï“›}àÊà– 5··tÍÞrǰ¶õcÒå¬t=;gCz¿k—}¼<àçŸa'ùª‚žV®j À¦ïÔ‰ì]º:ÿZç"›†ár^éõõû¿¨•˜w1:s4,Œaxjl!P(ðö¡Ó¥¡æŒD7ÿLãÍhn–gÒúFv¦yìWQò4ê"8è™bnåæŠ&G½.Q¨eFÏ'•—P÷àW~·GÛu—mãš©-ªx4n ñXÇÕ+ ÅùmÝM›–STC¾TÈIzåŸöE탅qðo˜@¦Ëz°H?/χè1éýßeÌZôb B¥æ¿ÏtÇm ª½þývêhà•KéǾÛuúì4@!ʼϻ@=u['¢°ãhÏî>ê0¢,Kµ\H½KZJCâ2X„Y¯€‚bvW™ ðnvˆ@ö\qšÝ‹ï®ÒÖ(kÉÙ^ù„[!4k°›ã²¶°67ÓÜ uß»¢½Üðµ‘=;¦Øw¬JózÍ “Ü)ßý^žó~b°„@Yƒ!³Tað ²NÀ\ïU±%ùIÇÉAÔ/SxÑV)=þ˼.E¤¶ßÛh¼aÍ08 S¨9tBî§®}#fø!ƒ«.„u½‘Ñ2ùøÉO§ Dp*Hé8¶Äïö¿jh™ø§ˆúäx*ç¡‚,‹ÄzÐÔ UÒžeµ€î Ž!PT:ýø4%˜í¾„Æ~ LbSøå{‚ìë"˜ œ„O[©rzŒwúè%zEv¨Æe~ãæ2П€Þ¾°åÙGÒ•·­vì»n%ª¨Šõ’R`±Öœø KLcë?ýÿ\y*Ͱ+`¨8Ž[°L—ò#·I…“ž‰å Ðߨ³º Ý8¿KŽ"‰¶ÍËoRããõ>C¨µ÷Zµ¨W0‡e0ìŠ{ëÜíÄ΃½’";:§˜Î/þ,‡K 2nk„Ì  ÏʉÞ'ïÇoQ(£Ö:cQ#œ):¸XáTº‡có½pVÿ'c¢ÓA눱ªIEéΔkc¥<ëó\¥Ô²a"^––J(£’ýô«²Gqât/ÇéÐE‰y{»x’vÜ(às¬Ñi³Ò}"\Þb¿†!MúÏ:-xGDòkK°Ö±gÿ|СÍeôh†Ã¸^e]—ù0ÌFyÆUñ*b²Ð)gÓ·éäÁÁK-£'ô"==¥M5‰I$wv{²nRz)vDÍÊg P½9Û(€@ ƒ§%$ ¦KéÃUzÓ¶ÏþW§wÞ.æ Ñ7*έ‰¶-næT§|« ÐFaªá9.Ü´äXX\|FÁx…OoY›˜²SÔ'ÎESfœEåìüvÅW¯ ¤GØø"3ßu5hn!PßB€]sæû‚䯫Q°;6Uµ0ÆŠdŒ2T t÷Y·¬å³ÍÓÎîJüŽþ Ò½MÕ•>ñ›“®.Ûu¸ÙdªŸõ4L¤Îqœs\ôGFòÊ‹/¥øÆ:Ùöõ < šu¯ºCÝ·L#¾¾oébêÍîejÙ 7»¼iÉPÍíbÉÿ=î™å’椮ÇÒc†q©(~j @ ¨›o_즡¤×§#wáìEå‹Ô@Šô2Þj ³ ÁÃ^¨Á·(,Ü>8—n–Û1l ”yÑ…î7¢K¤ºÛ›c4^'ЛÈhÛá’ M7uq;âX³…µÆ”T[4 NDr…çàç<2Fcg·ÜÍD©:=©2ã¬C¹æSÝÏãˆ;+ÐßdG4…%èÍ -Tã4± Ü[Kb£J½i+»’ÿd$vÁb[Ê’Bìö GÏ0N$Y9y/”A}Žõ–ÌÜ í%/Té/·à[Ò±Ï-¦MµµmÍì'.jÞU´Q‰†Ø ½TË÷>¥Èt|Åø`(ï3n‡Ì`êöÁõ:ZPwzs„iÊ88п…}ǚƒ=°ñ«ÅÃ:ÁŽRÝ8Ã!A'Yi¢.óјú¨:}h"wë+¨ôI(ZÇB‹Ut€`[•dþ#³Å•2drÐlÖøïq6AŸ)b༓ÛWŽ{m‹†$Lè(vÿCåŸËÒ1-ÇOALeñð#ØîÀ…ÇÃÆ/# ôù·kÌJZЄwMf¾?šÜ^ć6# ë&”PÐ>1xºÏ¥D Ýl ‰sä7\|JœÙ`OÕ §Ç „ô²ÌT.$Í=~„–ñóïMŽ’O™´0_¥/_hî)y`é3‡¬NEll­6©5rfpv`ÎYwAϸ ‰g¿"=h`‚_¾ÿ"Òý“²SýðõÐ⤫™R àû°,ý*[Inœ÷p™Ež_—L„û RµÖ‚"˰ñÞ’¹µŠ±ºû4g6¸ÃŽß€wÇS:ÞŠÆ®X¨tyu8¸=#ï–!@†ß'C£Ÿ%áòZMlvv÷8µ2Ô\Y÷Ò+”Ý+þ¿}˜‹ùÐE4vÿ]&}E­úx›`ÌWvÛD¯¨ç{¾1c+yB}ôîÊîßüzc¢šdÔpÍŽç!•Åí ›D;¾ÏDàœ8°ƒ‚á]‰´}pP¢Ò‘áð¬ Zcƒywû{I³(^ ÄÆz§¢ñ’;Ý‹ŽvÉ0ûÉ:{DI¬)öаôj¾ßGQð¼Pî<ïz.c¥m¤RgÒ„þãZ¬JVœn –M!5“ÿÏóiøuõ‡L ëL“¹ï“›}àË;„ hÂ]ZLe/ƒ©ïUŸ±*-%̾åÍŠÖ¤ásiÍf¥ïŸë£çm±}ŽË½ Õ¾eð† eà:µf@“¥È±¾ª®ª[÷¤QñG¼RC0ã Q쉥‡‘¼êÌR‡ù"LŽ»H`àyÎÁš™2ˆøß5Zoš-ÜxŽ‚™6cJÁXT–¾j'çÓ½êáù*ýöñ‰ÐîÚáªq®vfþšIþ>ÝÒ1ùôìH¿­`vÔÁá&„°‚~„„òÐ#':÷’Qó.†ê×W–…Øú'LÌ@‚¤cx¾ê.‰«äxÁHX'¨'âU#Ôa¨4Ú¸œ`Àœä@?>j¿èêþ¸öà¤h8à <‹DÔrBbC*ŽM÷:¡úx×fãé$Òs–IŸÑ†:¦Éˆò±]Õ„nýC)­ðÍœRÚÙ´†j*ï¸M×#CôÏU;¡KÈ˾ôš¸3-Ã>–\MVX«f>(P¡ŒÍÛ,NØ"FCÃ|¢>Éë>pÇAÅ™!—¼ýz`쫺}/g'HÌKƒ’Ò›?¶ ¯-):/å< Q³ì_{ÐQô{GG16Åšœ…— ÜéwRšOûP5×W"–sÂЗW/ aØÇg·X–‹m äöI åçô¶Uöy•8pÇ[ÈûoâøcÖÁA]×ó 8¨uN ÉAÉßfÉñ^ojÞë(K4Ž0AMUQC‹ðJ#Zèáý?®(ÿ-Q´¼­kB¨yëòœËÀôô!"ãÖ-Î)Ý §”0LhÑ0ôÄP¸.Ω•o›$FuT<ó p-[Ev¨Æe~ãæ2П€Þ¾žÝÙ@|OÎ"º’ýá¯|» |êUDYÄ·–7©õ^ÝÛ™][̧߬Í)};Tò}ôerv~½6JˆΨ þÎÔ öæÒÄ~zÒrɉ4ó‘!Ë«Xê¾k ,iS×(AÇ÷–p}J_äD¾îÂfvL”¿]Ÿ·«¨Ž!–®D‘ïþ Œ¸N/"Ú7?ú߬‚&òº^$IHÃ5š—^§>C˜×¬\~n¤¯œŸB)xg´€PÁ¶e–‡{$-R+‹]¼ûª¶ PåD\a÷X“sý ŽÜ¼˜£¢#69ý¨aª‚‚)_ýjﺫýŽ^xÌâ¼À¤¾wé‡È²mÿa/´{¡é@¦Ø{ôbxiUO*<$¦f¨aª"9x«@ AÓ’’Ó%õh&‰7B›Ø<’•¸ýí̆O)zTÚl ¢ Dfí"Ä6 ÉÈë,rª쉷¡©œ¢™ÂãÆÇ.~!èÿ^ëÏŠÕDc’,E58õÍØÊ>=ÑœßKþµöh:‚.¡Q–ôûo uS-gª:FâEø€Lõe|ƒÈP _•ñ‡uÆÝ ǹ¢™# •^EB$Ö“Òy#Œ•Æ×êD§^Ç,*CÆ(Ç4ºâ àj'RÆÑy!oð¯T¼qÀ2Å=€œâù#ÎOØïoM oÀþ…z›dI{#B“i†ÃÌ_1ªÑ-hGr"x8 9ËܸuêÅ78:]ÍŽû”k’*zXÕEj›¨ zíé…ž,LC°'ÄÞiz4¶ûòKVb8·6XÐ]oÔ3O¤ˆ÷ /š7„yŽM±açoŽæ°½ $>ùòTi»¨3õh^®šÚBñ8EÉÉXZ¦KÕ}ÇY&¥Ïê/„§´ø!i‘Rηh N«¿ú;Œ"¯éÆà —Ü _ÝÜÈ Ú[™ðC–È`wÿ3T§þ«†ÀMÕKRˆ±ú[@€u—’Å.Ú¿CJáñò'ü÷·”A}Žõ–ÌÜ í%aÜèBl݉[Cz7Ï-¦M¹F¬ ùdu«I…Ä;«|9£‘Ä;Þô¨Z¢‹gº¬K~CS~²ÐQ×÷%M ¡)…"ã ¯²Šh§‹«ž>&>Û¸V1×^Y27£“(¦¾fãF« ˜¾«ä{ xÌÛ¡¶< ðCé!Må–×i#>¼”*y¸U1ò;ϘË#°PÉH5:͸ÈÏæÕ8âž…m®nƒ<‚tÜ' ’ß Ãu’ꡃ9¹æ…„f2?)_8Þ›XêÑ“ØvžHXá/Åû·H¾ úùj´Œº€k¢ìr”Ù+þ¸#H)<>ÇMaœ› ûïsç A^4´võÉhSÖ`ôDŠä£tÃG'Q°6z™TƒÒêê-æœcL¦¨ÈA?3‰@=ÄåëБHÚr¢­Ž¤_Öô#}–.‚­’¢»±¶óâˆóÅš YÃ8›\q2=ݶ!1Áå¨ÍšÇŒŒ6¼±RŸÍÃA%““ñú#»ü0p¯å¡—|ð®2ù8ÕõP“'ÜÙç ‰ñF*{èŠf ‹Ïñ¨ò{솿 êmü±Éã•kqs½€×"ÈüƤ‚¥#ÍÅ)Üc‡’$Î_zÕ!HÂÊ;Žn'>Úgû„[°&¹½MZSm¯ò¼B …ÐÔÚÃD}8LJØžö¨ð æ =#ÚG‡‰ÌþÓ°hÎúä»¶Š(Cu`¢•L{JÍØ.1ãÿÇÛ 3ð´cðz>¿¾é9C`[|=ÿ|ã5ål…<ù÷ÐÇ&¢9˜|–Â6ó­«dq3 H@õW «ÏwÏ,V›ö—ï_׻ɤŸþÝÖÓñê®÷Cí)„`òòR>m#¤nýk†½»,Û" D½àŸûÍ›”3ƒ»çØÅMˆ7~+AR´ö 4·î{„_‡Õ€TŠÓ¯x-czI”Ã)yKÊ^Rò—”¼žŒõÀùð®o_ÿzLàÒëIÏyJñLZäžÓyGÔŒ?ûV.ƒk)Dp*ìj•õ“Êä°ÎNŠi˜(=—ÒèbõÆÇC±ß–hûãGÞ~¼ÓõÒ¯Õ÷†mæ+Eƒ‡LϦÂ#8Àœq²Îæ‹¡ö)7Tÿb}~ûŠ;ñ™ sÃݲýCk‹ÁÂqÓmc¸ç¤/4Ê…Ý1(<ºË.še+Ÿ(Ê”®€ %  ¯î¥nüUùþÁ÷ád*‹«ž„EÙõaTˆYYd)É¡ Z9-ÿvËâ!^|Œ2T©ŒYY '1ñþyƒCO4’Í×(Ý#À&+¾Ê !¨XÉý¯„ƒï¼PQd]ö½CUø“À$Æ·^wVq^‰'7”A}ŽõžPIñQÌ4¹¤b¨óýç+qYméÏEÈ}p×H¡çH}1( xMOåì¡çG$¼|¬n1¤a%¤Þý!b‹(ƒXÒ<òzû Žœ¸{ÁË?ö?_ Z.PhaBI— dû|ˆá_•hr,?åöê•öõ)ü6øj– (¾ÞšÿCfo·]p¾«Çöôqûtúú¯ uqÒÿ%ȯ|‡ \‰ÐPð‹¹1´'ª–Xm‚ÝüO3cP&ÊÉ9‹Ñ´iÎ…¤½ ‡qƒð­‚NÌ‹¥vŽ0o̲*oÒ²àD W¡:”½¡úôÛ]Í;㤌Äé¾nü£Ôlx·M|eïìäL >|O§¤g#zr‘ÁSÏK¹"BkfXBW”èdÞ)Ii@“RŒá«?dÙ ‚‚µ›«™@f «JÈq‹Ñýû*–ïÕ,)ˆQì‘U‡8'÷U†ÐB©)·Ó¯Yz;c½:=/-~‹qŸ–ÒÍÿ"Æ‚WY©ŸÅE­«Ã3]¢ÆÁ{¬ç??ƒóF=2ÃUÿ~¹ ¤Ùɲq$õS»iB¥.¨´ª'¯U 4ÁÄ©z¶óL9"Ð!õ+»<ˆÈ§átBzdÎÞÀ‘Çj=ËE±¥ºáû+%Ð_Œzrå9¯© ŒôþŽN,è(¼«¢daEÀ¦æQÖîÆ”²äçŽÅh‹<è‚.¼Á}(ïîzB û¯þ“gd¤uCµ@Ÿcäý ¼R²÷@ ÏS0²S]nI°£lØú©¨àgwÔÆM±=/‡½Ü¦ny­UîI¸Ø~'Ë?/A`#Ý& ö޶Òš '{Ò'Êãš‚aUÛ#º2­®F(ƸŠBîqcŶc§ h’pbî¶þæ^¿¤Ss…J…œ¹Uäeüé ÿ<¨PB9èÞP4K±’*ÿw5jÃØk‡œG„¬†ð^å£&šùºªóêËŠ˜¼ÓÓ ½ô.ÇÌè˼8´ ¶†M ᛴרÓ$ÍKp”89¾êãõód>üÖºp6•×h ðMúiCô+4 êNÏ Dû—J |™ë¼Œóñ¶mL3}Oh¿l>]›±â¿a¥œ|exqÏꓦÿ œiÌÿb—Té3`óϯ:7Á9r³ÉJK·ò\ʳ “–ÂÁûun1¸÷>Å%s^íù¸ÚÄÌÕÔ¿—[T#Ϊì vmÊ]yÉ óèÔŸy,z@/°t1JkÔ¢ÈõyæE\ü;P/`ÐEeцÎÃáŽú\jÄMÎ{mš³»ºøKáüÞp×)ŒKðæ]¹º`Öo€}áfuù`Aã³NÜú5Wáþ¨uùõ›Å¢Ää¬l‡¹Üü’ú„ÚªbŠ-§O™¢š‡Ó߸Û×+¿8‘µCÅ•-}ÂóߣOwZÖÎÊ­`Û7º4Y­T*gñmPˆXõUµa¶˜m›<^+îªÐfÿRIÖWfÌÍäÀõ¿‹¼QpäfW9<ߢoqó÷>ŽÕ Êþu¿£¥UN7À@H89Y?Êò>(€d‚iØ­ öëÜàX0<"WàX=²8P£Œ¤÷ÎyƒáŠ:+Ÿ[s,zÈ’c¿ „Ô9ô3ZÔrHè>#Ée Á¾÷á-™ª ±ÈlX»x畃~gš•7à5æˆWHúï t’r£~¶(¾m\¹ %š,Ïp#AÔv÷°~ñO.íùQeÉ–þâ\‚!ŸO v½ElKÒµµ¡€C‘<Æd¸&ÿH©P€fH_I’§ÔZ‘~JKV3jdRâ ÌÉ­ãyÖ5·ó­êU7#¨?CÉ„&ÛÆ&Z£PþΛ•ù]™UU|Œ"¹ÃUÿzöiTÄ´» Ê;øÑqxãvfíÏAæš®\y®î©É[&ƒ”RŠ+Âܖߣï¹"O¤Ø{¢WÅ0ÛÕ®.Hb 'g¨ªrˆ<ž7&³ú‘ä(q1ÅHovóó)±×¬ªÍ‹«ðx¹o¯%XL ¦qF¢ ªè“O£Š‘öƒò-´ˆ»½ù^nÖÈHBb{-#ªÆ~}ŽñŽñž4]‡¿Î¡·ß‡÷<ÊG?m˜”+Q¢øŸLœšŠÂbc°+ÿ À#(ÊÖ=s÷CUl?ÿC£ÊÖø¡p°âÐÁ ín6Þ²b“ÿ8„ À=˾ͅâ!¡rð¥iâSÏjàSB)@®f–xk2€nŠ ´¸¤Óð;K©Þ„„ƒ_~®í!fï‘»ŠãU*1ªÔó”2¢mOG¼+´ÓœÇÆ©”@ÝaÝE²äZ ŠV ÁYîqÔH‚χ·´8 —J»Á@@ÌÆ)£Y/R¯¤¼ÌOD|æäjeàÏüiÂ?‹ï *8 Ve«–îT€É¿‚íWØeþ“ð¶½Â»U–rÓÁóµ%ب”žÐÆÙ]B|C‚ ‡G5³•´]\­vçchÅ?£¿´$,vúS_p{>…âu9£bô!fÁ¨ÿ ?Þé¥Í+å2fÿU6¸·lJ­î,)šý%±b—b/¸yƒšÆMyÂ׳tãÒ¸ÁCQgGK&r¾”yð‹×Â;x™óhÏiôÞ<ÙWÂM£q½oô^t{¹˜ä"«ÚPŽ:Ø—p Á‘Úæ…ž ‰¶cUObØIkõ°=è’Æäð‚ñJãv²}'ÆÈ1GfÃkçðCÌý0d%KŠ×Ëó¯0Ùâ»Õ±7VþÙt 'ˆ(Ûqa€_ÞéÇËÿfVÐÎ;šÑ]½?½D“ç×Hè7XžÄ~çZ‡6ûHò<×¼Óûι’ö,ð~ÜuöÞæ<Á^Çy¿ æ¢ÏÆÑn)"ͨ ”é¸|ÌâLŸpY‚ú¶³æà;Å’Kƒ³"¦æñÛ¦_îÜl´atSNü|ç…߸’pqŸxH-â/ž´©’BNq <„³º+€Õž#Q\Ǹ;kN|ë6;.zFëS¡@ð EhÞ\`—·q0§¹~ ùôïgs1l‰Î›ù…¤ëѰkçXààÚoÔý#iê*¿Nû—G&2ïžN®Þ„:tnø ŽÇׂóv)ö>L>ãí˜ý}‡$Ãâ.+SkzZ9?H‘ÁZ¿úK«J™XhÉM}s÷ß’®»e<{žw& \EWü¶_rWfÓ|½Éžþ›ÈSàøÆˆEpÇ‹çËôî‹Áu#?[$0Z®úö¹Æu9¨DÄOÙ)=¦U&’ŸÚl›¯JÏkÚ(Xd×X÷žw£@ÉmŠ"I<aVÖbÜàØ8W¬K™½¡tݘ1Ôx,nß.[X¬Äm!Å ü,#Ï:B&iÞSvZûYƒñø·)ëH#öÕø†°J©žÊ"jÃRŧ·+÷ôM°¥¦Y®Ž9}âù©µ½Ypsõ¡/8¬èNš7)e«•dµN.V†ÕÉÿ1©$§Oä• ^]¥ÁʬŒÁ²WÛqÿWu˜\¶)ìtÓ©»†€|}¢Žï1¾{B£ÝJÏBUrIf©RtÅJ¾&L) ^C8fÞå”С-]î‰ËZ=DAªMA•UåèÀ:X*’× ZûñÄVx¥ü©ì* á%wnà®×ðÑHueÝÓf~œ©,_a3 :$¨Ô¾'Cpo³07VñR«ÅñE¡3·@üì™%ÿ%ñ×<¥1f¬›N͢浬aB»®Ù|~)óµZ?ùO(Qùš™ÿ[7Š-ûªôË ÝÜêjp@mÙQ<Ø0Ð?g4;I$Þr_òÎqê†>:1að°Þ".䦣ÃÀŸ~‚Ä`ÌG‘Å.!žrœ‘1_";;}>uWzÆmä?)x²¹÷Á¨ÌW+›È¦q™ÒX.F%º@ï§ð„{ç‚îw¤gŽ>þ8gr Í„n­Òvå&ŽøÀëz™F‘˜«j]o“fé <7¡óVÇEìÔ…VÍ™VƬ‡­©OªDµóàí]a‹7¯Á­È¥QR 3r'éÙi=‘*¾ˆ(÷-s&„ÇojUEøCš£¤Z lÄËT­&†Š-a‚RZÉ}±+j ¶Î³,s›°-z“'úᛄ,2¹3ÿ[:¥ñ[þ6·kÛ¢-œC~jm2Ö=>g¯S _¸h Ýîîè%ÄǡϢã‘YîØf¤$tHZIqgn:Z(ÄãÂ@L’õ»„[Wî]Òc¡ÖÂy#7£ ^<“ÃÎ÷ÿbèÂhÏøÖ——Á¼9ñ"QÔkŠÃ,ˆ˜žˆ²ïI_øáxnK»·b*_hŽ“¾®Á™_º£õÁœ@r‡;q8áŽÉ‘ž* Ñš”!mH麕c›˜¤ÛÅR-½¨­3*Ÿy…}öBÉR¾Ä?ˆŽ µšr?€{þj¦–УjˆÔÄ ÀØw·£“]l{hw BéWˆdœ@<ÂGƒZ«•x”5×Ó'©ßÕöHs®Ô¯×ùå‹Ï”#}l雉øKÊè´ìeŸœÒ ÊLÆêïÚ¬IƒøÕì[ë‚åöëeöõü6‡øjF H¾Þ˜?†Í_nµá}Zûz6ýºo}W`uqÒÿ%ȯ|‡ \†È-:ß'ö« ¥ŒeO†¹ÁE‘ÊŸ´cý~›>jkK…Ës¨GC¼ˆÖpœ’©eȯõzŽ”TÊ¥ hK˜Ò£qcá[¥*&¹`U%o0Fý4©8m>ÂJ:û¯È`ö(Ë! Cœ{*%OÏ“×c¦53s£èß-3ø©©ÄÓ¼ ‰\×cg¤:Ü”;º'žÕ ¶§~6‰Ä&u:Z•+™·íVÿt\pŸÑ[$g¸z`1]s/£ ù^»Øqlîü:5ñ yƒ¤U£En:­‹$乩EçÂiÄ4mÔ‚>ô2sÄ¡l¦ Á—ßWä¯Î§²@ˆ¼8u®¯³fa䪘Ͼ]~2B÷Ÿ>K”JQͨ!8Ò†r‰dú+Èõýç djDv…¨i°Â»5!ÀŽžÔ"TKÙkû¡üÖK3$ÄvŒ¡±l!NÆžoSg4j»éµ#¸{X ̹öݓƨKó")±x¬<ô޼zU±¡ŒÇ&…\³wþxi[ËÒŸÉJtj¿ù-ë%.•fÓJ¸A·¢%æ7Ðár® Ï}.³x‡„ûh9kšþÄ÷e‚¼Ÿ[ Hú¸¯ 7[4$Ëï,ýÜïª{œ Ï;±‰"Ç+¹Ïå €ÎŒh“S:$)b} øm›‡[DOË8©ç•½§«—”½ ]åþ¡ê–5ËmïðËý@Ò·sËfB>t¨iޙ̑H8Ï(Š6"Œ²Ú ¾ð2ZkbM&H$¨@$û„æŽÛ«”Û$3ÌI8°`ow—hk¡ ù[šO5±ÊÎñS“bE©çfYÎ}€®Ex`Ÿºû|Zz8å4‘xO‰R`²~½ëú*þÂ?LsI_ö«p ïIYx¥eî€8ÁÄ×Ä3Ö´ê¬`äùÿvúSƸf‘IB^G} SÖëCh´òB!Q†É!EýÃFYŒÈ—Ð{Ò·MÝ0ß›§},ȇãÓŽ!Þ’;>ÈÄ­,häȈå¢^ªLáz”騂ea . ^&m Ã…ãÙ«…ˆ*†È|H"éPÀ´XkâÙ­Ù&Ç"\0»V‘¥¢™Ç`&ÐæðŠ›Ð¬ ]A'Ýìéã* Çy >šQ`#iÈêAF !„2œi…”j.L•6àbì¡>bÒ\æ­ˆ»²ë üÀ̼µFKìe"*˜¸^ZƒÕwßROO>{·Ëè‹¿v°Åƒmõ-=àhšfÿw-ìZÙ!­'žeÏjCÝG)®z:Ü;Tª‚532£]ßÎE¿Í­)ùÝ…1kæ;÷>Å%s^íù¸ÚÄÌÕÔ¿—[T#Ϊì vmÊ]yÉ óèÐZ·ü®w1oÐê,~Êlù!{= b¤’?µÖ.XnJ[&yÆÉ; OTÅ–±=×¶ÌÎ%EeXò$…VµÃoHÙäI ЉÓ3¯Ë9é A™Ì"<ó RÞ-:Ìö‚ÿM±ˆêÛ¤™%¢¸HÐY æÄrƒ¾ZÙÿ 0Ë`»ôd¦R%œ©kîžý{ºÖ¶vUhà(ZRb}Ë6GY2‘ŸŸ.Ò ñÏû°0ÅI²¯ƒSþ†lé!ûç\[+®¨lM„îƒ ¹ß4¡—`í%”╯5é' à»ôSºæQð ²SÝòE' oë!çù^H迤ªšž§›ãŠ>L¯'i-E_Ϩ«¥E¨ºè¬¥”e½° FsK)GÙ»Ž’=&Ð^€‚UÊ&—18ävO¾ș N?R¯÷°~ñO.íùQeÉ–þâ\‚!ŸO v½ElKÒµµ¡€C‘<ÆdÐü‹÷¾ºÅ^àÞgßôD§ƒh¾¾Š>‹kì+¿öž‹nŒâNµe“àn¿»ž'P¤Äm3j%¡ðŽóQBÛÓ‰š²±2;y9H;€ZÉ™e³L­æÈ¬*Ÿøï+­á¢¼G¤q?ȧ™@2™sÜ1*¨±ùå}kÚšÙe&Ïê{²–È0@¾¨l1ÂÇ&㆕ZôSÕì¼AHŸ7–U]¥Òl³g2iÎWtø8Ò€ÌÌ8ØÆ‚ôCk 0DS´ó„Ÿ"Ø4Qö8Nª ðòË%J¡éP?ÑZü4âÒæ˜‰AO*æ™ø+\É3áö§áí(ýXÜQˆ °¤×ßçïYsŒ€¾Pí‹ôGf¿û•A§DÀ³Ì”Ï RÆ‚0Î^†èæ±wx‘ÃYëÿnx(Ÿ¯ÚfBßK¬‚û¶˜ïÞ‰‡ÂÕ©Ì© ÓÐ6ÈÙû_”Ã;§Ø(ÂŽ‰¬ã˜Ôï6P¤o-´1É\ é $²&a|›'Óy÷Céüø’•e°ùÆÖ‚5íûdDàqço]PfÈìP_ïq» #µ—6ñ.Iú‰CÛ,Ú©t…‚õçê±_R“LI*_¶’«.7ýhy¹D¶S 5ðÓÀ‹qìÇq`­V´"¿HB‰jo7„øÿ þñv¸4*Ð$PŸQÉä/IÃû>(iÃ!kk¶ÑîãAçeÃìWóž°³‚!ô¼M¸Uѹêm¹À¬äB›Ëë4+9\DÁà8×DØô#¶œ»G:܃Œ .£°fK|Þ‚‘ìÙ£F·¦Žl‹VXqïþþñ¬}¢úLúW ͨªþÅfÎöA‰Áì0ãâQZ¬ƒ„ªUÿ5¥‚ò¨²ù÷CUl?ÿC£ÊÖø¡p°âÐÁ ín6Þ²b“ÿ8„ À=ÎG÷¢¸&Q¥yRîN°T¸ö5i¹ãµáü²ì¢Î¥ÔïBBA±áÜci×{-§eR}•øæÆ eáosXØ.}&:„^Ðò寓ÿQǘ+nÁ¤ë.ýU5d“ŠK*$›ñÑÑU•ÁdIFëÞFL=®µ|·øXª[£·P€6CÛÎ!R:f£üYþ÷L}.i_)“7üØç —.å„^‡ ÀßÉÿV_ ÌÐéµCÜ¥ää $I>SËSŽáš«I·v?4³åN)G¢ Üa\* )ç0ó»jë%³¬…5\GãÖo5«Êýóß}1dv¹¡XHa)Wß”òç.ŽàK ³Ü'ŒFAÿ7ñJãv²}'ÆÈ1GfÃkçð@Ц=+Ibž=0¿h&çÜ$œöVº®yžÔ=<Ð#äÃ_0„ƒO-~]J®A_Ë(‰vPý õÁ´¼DóAÖKgy•Õb6#à4ëÉLrRm+u7?˜ë }ý –ƒìl¢v“ª½­…árŒ¶Ù»ÁÕ£¡v󇹩á¡-~iê|øežÙægp˜A–,Ç•JçR.šÏTpKêÓ-àÏÁEo%‡/¶Õe"4Îñ&Æ‚ÚDóKïøªH™“’ñã,E‹—ZRñHwèΩ7©ŸO›C³ìi—¶ä§AÐz6 |ëÄ%^eÍs¼žRE_…ãkÅ»<>ß^»jƒôÁ#©@vüãxܤgK“=9µ8¹‡ WA”:<Ê>”á[“$iŸU$q®fŸ{Î|$@–²S_\ý÷×dì—wô³þ,ÔOÝઓ–ërWfÈÒ@ÛØWžÜÂPò¬кyç"ê:¿©U8RÃH‰J`9À™l×µ×KªV ÉM¶¼¥^þ°ibº.ä;nðmjBë#¿÷ÕLáž¾/·™L9jMÆS“·ˆqÿ#Ù4¥¼¦dõ¤ßMÛ†ÉÑÖÖQÆÄD![‘áO:®©¥)š’Ü£]T¹în+(MþìFŠþ¿LoÔé&à¦ãCGþšîŸ±Çň VDl¦°²*…ñL{Îßœ-Áœ]DÖá‚rü•èÔÙY™Ž\­Ÿê9*ãÔì2FV—@©\?iÿ;ù—P“ˆLÛvÊ>"›ØtêFˆ«¾r“y¾b°/ÌàV©ù¶FµoWu˜\¶)ìtÓ©»†€|}¢Žï1¾{B£ÝJÏBUrIf©RtÅJ¾&L) ^C8fÞæLzte-j|ÃûÿH.­]ÝÍÓömºç½“µ!8 ™÷©f~‚qÕɡыÉs&…dÂ5"[µ¾H”5ºCÚ'™ÈT¡á yäà"9 ÐBÌΑRòج /pY“aýq´gè)‹5dØo~ßc½NYÚ÷×Y‚”ß«ïž\·zUª4¸L|Z9g}‡úÛ¦j=ÌgQI›ë[ÖðÈ ­v*S¾ÏS·ú*ÚÂ]Óùr­iGÁ;䨬ìžg­‡‰‚TýñBôOtŸys(MpôÞÉ‹KÜH9÷°T½Òõ¾ºzËzâøÕ?ö6Ö#hd˜öÒnÑõ–šž%\XUž0½‘>È,í-¬¶;ÅóØŸ¸W ”/¨Ž.ÅjK¯©-TüXÝþ‡Ÿ– <ƒ˜tt—·ƒÊWØù1Eܤº•®ëòýo%q¯xf£V|2ñÇ×ÕnÀ¨ðÚ‹Nš¸åKÜFÏë†U"^„Ýsìg /·,Ð04öSa ȇ(97Ÿí/åöéõöôßü6KøiN ¾ÞŒ¿†Êßn¦á}Vïíè+öé…õZ€uqÒÿ%ÈÃBäåõ÷’¼ ~kPlüm‹Œ#û\¬=VºDžAhŰ½ c·zÄ|²‹žU$8‡ŠdŽQ¬AÍRÖDŠA™š‰*L¨0­ƒ#ý#¸Ò~DHŽÕ!jÒ\J7T#Ü-†¨÷Ê«ª†ææð >xyw`}ÍëX¹»é¶‹² Å2:s $žaä¨_‡BÜß–_6Y§ymô ³Ñ¾ŸWS8;ʺpÔ!©ÂösôIeqݲ7 ÑÅxß&Æýúm)Á] ‰ :`8=ˆSç‘r2'~gú@W °ô ópÛ1ºá`Vâ r§ºäŸQ`“j”[è¿ ; ¼aŠóš,¤’TÜŸ£ÓpDêìÎ<Àªš{p$xêɤ™—™U `ó")±x¬<ô޼zU±¡¾YÂAáS,Ýø†¸ó6ôëÞÜÑ·â\º ô@îIa«9ýH8)ùuEÎÌ«Š-ìâkö³YHüwíh~éÈR¯¯,ˆ>iõ‹‰Ñ죉*µ-Z½e>„$ƒ ‹Qܤ^Ì @Ä1<ùº&FiLžÜË×îæOÂ%DòÝ¢ê¨5ô8ë<µÂZµ¸µдó>¬úuM¸O>âf¹’sÕþa×¶p ¥ï1ú~i&Ê’Ð" Å+/t¡À {÷‰»÷PŽ¿ë»LaÓ—@7OQ /Ÿ™ITžïÓi¨ySÑ´0ˆ,ªÌòº¶j…Ö©|Øx6!M»«JEsv}·;¶_Ópñ>õà ú&Gá¤DZo»¯DìTþ±?÷ÒƒCõ½Î‚=Ó­c];>L‰È#|8QÖM@¡SzµìÞo˳¸=@¦‡Ú¶È´¸ú2=ž:))û³wب {ƒ Z…§Osx@ÛÝyÚ‰âÎÿ2ƒÅH÷— Woð‘°Eõ¨µ‰>"v4ÕAÝ6ðÈ22ˆ3:È}ù¸=‰ÓÄnØ&è/Ø«ómþŸ¦“Ù¯hVxþ„_xˆ³ÆÀuGÖº‹DÇyMGyh+d7J6,–EǺI,s²×¨  ÈXôŸ®Å ^TGzë{ïðL›©È‰‹ÆkèsË%šÌßÛunÇŸ÷>Å%s^íù¸ÚÄÌÕÔ¿—[T#Ϊì vmÊ]yÉ ãD{ùnŠ^ìBƒž[¼‘`‘` ^à¹5eL-qäy¨"‘Eõm#FPÃ8§{õ@q¥¬ÌÆwë{¬~RÄ:Òc~h–¥€ˆú9Ý“ÌÎkÃ>Øõ:R‚hoj‹úvéðÒ×3As‹ÓÕ]Ÿì"äàf ¯¯ˆYlô7h[\û`= EÉW‡½$`êšÆ€Ëè³ÝÖµ³²«¦Yf×…4êò¥Ò D÷”¢ÎÑÙ÷˜ ÷náz ×QúüpðGŽlJ9x¿ÂÁñ€³Ø\‘œ?Zý’£#u­æCYÁÈúÈyþW‘ñ9€K=¼Y¶œÍ-’«Ä ¿¸5K甓’’ÕP ,wÉ4ü Ð<éS–‘Õ÷X² ìZ ?ÀÈ-/çÈÆ©*ÝFÃm©ô è2ol?ÕƒûÍft\J€#…® ƒ $œ¨ÃŸ­Š/›W.CHaê¾<ªÿ¡“Õ> 1÷°~ñO.íùQeÉ–þâ\‚!¢è÷*N"yÅfPµÔ; NEÐ’ïX6š++N»I‹Ic&¹ª´R:¼è¥aü@”Y±t+Át•ƒB h¦®Fez>*ˆ°)[‘ƒRáf¤ ’°rÅ*ø„_ì«gÔR„òÙqZy”à4B1 ³³jˆ7¬5‰¨(€[””ÆCPÔ•<¤"kÔÆ¡tí bØìÆHD©¦©í¼%£ÒhŒH !=Þh g/¢¢+{*,?¨ØÐFWPBMá·Øã@çÖíwx‘ÃYëÿnx(›î5Epåfÿ[^3Ô ÆùÓe¥@‡ê€¡¼“)͹8{õ•6[Bl¤±Ž € x&Ž“+‰ìÁ–ÞkšA¥:ž¯#gyÜq2N ¿ã¤3òMO…¬ìfpe× >µ¡û‘6ÑÿèÞ‚‰lg§wÌÀòW¢2.ŒØwz2N#Ì… ‰p#¦ ~jãØØ­ýã'•xÀtÐaÃg-¢£LNSMƒ_ˆ wþ68–ìë~t¥>bÆûž£6 F ¨k^𺚄~ÐE ™>µ©Žõg=b5˜auŸØ& éj õZ˜ì.¥»íDëÛádý­)<¥ oÿ.p}ß&Š7i‡Ê‘ÓÁ5„ÕèK_ xLQlŒ§Ðà²ÆL<µˆ{æñ»g‹0ªtæ œŽ3ØA×Ö…Ù?ö9g+°‰®‡¤tJ¬j4–’LÇW_ÈÊÿy ‹˜tâó‘y‹êí¸®½…uéäÍ_X@{8WV™W Ý»"8h/^§+ß q:–ŠãÍÊö4D‡6!¡JÊajÞJS«> TýÏkÍÌ]ñpË㈈™ÆÌðRÅíÒÔ¬I<)ò打)ºi$!¦1&ÃVr¬ºR‹/JJVͪ™}oÅ’­L1%‰‚M$þ—Ò©J‘‹Žb”Ü)V× L÷ÑÇú†j½«¶¶C‚K£Ì¦çK±ëãËÁè^÷Êx-Q7ÖúÑZŸú¬?È’¯$x>°/¢'8 ±c: “t”ßĈñw¶/ä`ö ´°öq\ž*¿¦>týPAú¶}{ã‹£¹=¤Áj¯žŸv‚ }>7:žÛ”e:Õ)™G!3/¯a£iÿ+º"ËÄ¡”!P³!oÃ$oÖ®¤Žô7'nÑwÉâ•‹ÈM1òû(‡È&'"Ž+’%4\·®vn‡ÍÁÞ»0.mªB¾dö5 fõTzhî¯'±LhGû?—hOÁ˜v²kßV¯làLÕDÿT0äU9ÍŽO4tüÅY¸Ð\f"i·Ôîp#…­æ>zûùKq·+ùK£1ýIz!èÁn¥¶Â—Je§{~ºº÷CUl?ÿC£ÊÖø¡p°âÐÁ ín6Þ²b“ÿ8„ À=€¶ûI‰Akt†SîÿZÏPŠeTEðN·êñ„ w zý+ˆ´²ŽØä¶+Ù© Íbàz0ÙC…NŒ6å’aDçÉ úñª‡¤ýSS‘õ|¸ÈaãºFëàzV×f¹ ûtÎ2a›XvŠíe¢”F£–<ÂçBHì4-©ï£˜oñÛªp'ê°4y0zBw=G@O,=‘ÄÎŒ7 Ç8xáÌWöüq!ÍOù,ã{ÅK.Wæíµï´ÑTE|ÃZÄÜ4ÜÁô®6{Ípgå쀔µ©’̈¸DÿbɃì#¯*Y|M§®%½+å2fÿI«ÂÖO‡ETЏß©oY_¼k'@ˆ.? ± ûΜ߉O.¼„|YZü˜×“÷¤ ]Ócl¸_D||½ˆþMc•(³óU $yÞlX¥F m¶P0ç-ðwÕ½­þDËuh£JMþÉaõíTêáĻЫqc þ/­Þ"ê7göa-‹Q˜ÅäAŸ €.ðCÁ¬hC‚O £Q|:ðilj».` ¥Måñ'•-¥Ëƪsj^1$&éK± UWa¯‘H$*¡…@¯×lvc#Û¸³Ðjúò™¶Æ–P/sÿQ{-a"ð¯Ðµ#/,–¦ ¼ë¹yýY"Û¯¡ e:DV„m·Kõ¥ï¦ØÑ–N}»†¡:B©b6*¨‡=wÞ`fו˜3³×_Rz…J¦¦ÿ\1-cg1‚™ágUðí% 6j‘¾¼ñu€2qV5Ücé£Gê]9í½ežnÂrW‘m„7Ttzñ„Ã] p˜-CÌq£u ÉMXü¯üANá.3{ö¬í—¬)6¸ îAšÝ·Dxá½}µZݰ:ž䊦¸U§Û"‰Œ–Í'&!æãÇ$‚DÕ™Xí°¥å¦/9Ý qfž¨¡9ÓëŠü–%{á^õ7„ p™m8˜ºÕ5wùûåû)Êâ9žs(µÒ|Þâ[˜®æ‹à ýÞ4ÿ 1„3/Ç:g¹90IîRnåAˆðøOÅîÔMÃ9ÌœWÀ2 AøIq¬³²zy\WÄÁ‚”‘dúWu˜\¶)ìtÓ©»†€|}¢Žï1¾{B£ÝJÏBUrIf©RtÅJ¾&L) ^C8f×H:¢*ò–ËKO]„Üþù ¹›é |еŽÂ:Ä&XJüL‘y.qÊòrHUcð¬dê6)¡ô²yŒ¾X5™Û%9oqšGªÑÓrx]û”“Yõ®¡¾‡Û ;® ¿œÕ®Ì¹‘}¢gçÀÓ¨}ÀuMËzÅz©ØØó˜;UT%ûgXS§wž‰ùy1õæÛÓR¸†o«T2¿ÇÚÃ\¢Å{¨y¾´-¼×ùâ'-T;‚ïÊxp s—ÕV¡»’xc½"mÎÀ+qmOXNû²ôn,éÄm‚¿qv zK½ËšëÉÅòfØHн)/5XKt›h : ÍŸ=ú`á¢C…}ì°¯g d¬ËÔ²ë¸õ£š»Ù"QäJm+Æ}÷ Jìù÷‰Ú•ˆÄ¦ ãâªceÙÛéÐV˾ý•[î%aé²|€ŽÒ±{+P­š¯C"©À0¤!§0y¸=‹''¡‚ói!YæÜ€|÷žãÈ}F¼ #Íä¶bxèºåÀ, ݼ.`H]Då.e²mGBëîÛü`-}p8=†¤H³.á6Øõ›¸ 2 ·Ð'†Äë³’1²[\æ1Ç÷)’·(ßø±€k`ýôw¨ì“ÿk¶±Ÿc›ßÆAÞ ™y¼Žô°7~ €8Ô‹U6õƒ:%*ÃJ«Út§ÿM¥”F˜óäë^º¯K·ÚÚa#9Ÿù…¼%z5šñ1p…èÓ-w¯E´eN…NàÚ Áí–‚‘ÖüT„.B-ae}&ƒi€±ùùÁ*ÃênæqŒ£„êZÛ æãå ïÃyÎ9[ƒSnèÆ!?_ºÐ¸éÙ•Œeg¯PO½)ü8ü A’Ûð±¬UÛcá4NµîlI³E㸜—Œ·†¿ë°&î˜T?,Š2KVÁ+Àµ´pÂwׯ\ÓrR6 $Ñç‹n/õ‰Ý3×,_Õœ ®}qÌåµröZæéGµÄ a%Ä•§†”Üᮊj¬²FUԬˎ3Áa8øRé—AÔŸ(Œ÷°vÞ9¤Š{Ì¿:ÔÈЕ)åà}]¥W"¿Š<Îk ŒÒ@¡uÔÕ±ðèýp„v´Záøñ|q¢±[q‡L$Dåó¼gP·$Kþ¦–Jw)ô«4@uÊa~(ðûF&vÙƒÀ°“´WdñÁ.h!Å­Ë7w”æ×BDWf°…ðÿ…£1u(T¼`£yO2¶È!ýÈßd>»Êç+'L–0É"œ¢4¾ƒ³˜b3³ì~S™Юį+!ãö©þÚóö«þÔL~ÓoÛS~Õ?Ú­…õþÚvúˆ'ÎxuqÒÿ%° àË߀Â:ÖZ[h |öñØcûÒâßTQ)"…m×Íó|ß7Íó|ß7Íó°bÉK ¢—‚¢] !¡¡L‘Q\ÓêÞroñøAº\Êr·ðÀGç¸,¼¿r&$Df©J˜Í[ÑtQD0®qxAbmö:{éJꣀ/×ÿ,:«º«É9x—WhX‘‚ „)˜ádS`Í\ ;š3Ñ­í2ZæXöõJ¿Ø8F¨iÄ-3q¸=œœlOýÌ?R¨4ÜèöU¥”VÁ’€Äªw‹-jÇø1T?ìd m4ý„vx[¸ÿŸøNÙ™YøíDŠ hÉbPíÃ_·T?t*µ·ü¯Z(«U|«Þ»™9ˆ¹K{†u9œ¥a‹[¯›æù¾o›æù¾nFÓÄòšÕŽËAä«Ä‰1†/ÙÀü®„Aœ¨²ôh(ý3¨ÜêÝ™ ±Oùº¬¿y`ò˜ž±£ $®@s†-YØDgV¾&P8¼ ¿vɰÿ-·ÿ@+ƒÐLÄg4Ms^ûwc¿þ´ì£9ªrrÝGÊ”•B(JDJ­+7}K\Ê8SŠ‘b’wo0ØÁÙ*´B˜ xLQk7œ_ÿÔ»ØÛÓ‘²ÔwG«xÅiö¨„f>ð¡ÄàEÐ×Ò iÑöø2ø7ìùvFάxW*&¢"å°š«}ßñGä/Ck”^€Áò‹¦Õ|ÔgÖ$ÈëZµ@¸v†:"§vä cXêí ÂÿXt¬ÉïNñÀÚ—‰ÌXÂ^­ÕYër;`m+7t[K™‚JƒË›/"MÐ.ü÷CUl?ÿy9Ή|¹mìO@ $9àÁŒƒ*u„ƒf€­@ê=Ö‚±²Û¡'ÿyÌÇAÞ,F •¹qbăt%¶^¬Š¼lz÷°ÔwHŽB£å;À ‚£° Z" •bHOYˆ2é›´Å P]Ó;*¸Nß®Š6¦VÏõûHÖ9JRæÎöRõî””dÉÿy­hÚ¦š¯rW‘üé燑U^ÆŒPËK"É´9*Z²»Á–|Z¢›¯WvGügvŠ#PŒbwݲï)l•O\Ga?ü–£}sî"³c[­ù2-yU5˜dU•x“M|LÖk½&¼œïRŒ´©¦ φ)Mýµ˜•ð¼]kw(UÈø%æMÖPÌXcÞ‡ˆ‡u8¢V‘ù´~ø tï§Lý>uÄ3[úI÷¡zÑæèJÅÊÔͯI“ynm›¡lõåP4±×÷>Æ'<ÌéÖÚèšÏ3%S»:¨½ßñ6rž7ªY÷°› »ç½¸yïà9ÌD0£çíê,ûöqÿÙit325,ý ¬ Æoã¢Ø€×ØØ××€ÖÕÕÔÏËÆ®u/Ãwù©é èççææåâáààáÏŒÁvö©æääããâàÞÝÚØÕÑÙ¶'Àuö©æåäããâàÞÛÚ×ÓÏÈÏÂ+¿vö¨æååäããáàÜÚÙÖÒÎÉ¿ÎÁ'¾vö¨æååäããàßÜÛÙÕÑÍÇÀ¶Õ¿#½x÷¨çææääãáàÞÛÚÖÒÍÇÁ¸µá²'¼x÷©çæåääãáßÜÚØÓÏʹ¬ÈÞ±#»x÷©çææåäãáàÞÚØÔÐËû¯´ÛÖ±%ºx÷©çææåääâáßÜÙ×ÒÍÆ½³ª€Õ®!¹x÷ªçææääãáàÝÛÙÔÏÉÀ¶¦ÉáÒÔ¨¸x÷ªçææåääâáßÜÚÖÑÌĸ©»çÚÑÓ¦·x÷«çææåäãâáÞÛØÓÎǼ®°ëäÚÐÓ£¶xø¬èçæååäâàÝÚÕÐÉ¿²«éíãÙÐÒ£µxø­èçæååãâÞÜ×ÒÌÁµ©âõëãÚÐÒ¡´xø®èçæåäâàÝÙÔÎ÷¨ÛüòêãÙÐÓ¡³yù®éèçæåäâßÛÖÏÆ¹©Öÿ÷òêâÙÏÓ²yù¯éèèæåãßÜ×ÑǺ©Ñÿû÷òêâÙÐÓ±yù¯éèèæåäáÜØÒÈ»ªÎÿýû÷òêâÙÐÓ °yù¯éèèçåäáÝØÒʽ«Ìÿþýû÷òêâÙÐÔ ¯yù°éèçæäâÝÙÓʽ¬Ìÿÿþýû÷òêâÚÐÔ ®yú°ê éèçåãÞÚÔÌ¿®Ì€ÿ þýû÷òêãÙÑÕ ­yú°ê éèçåãßÚÔÍÁ°Íÿ þýû÷ñêãÚÑÕ ¬yú§êèæ„ê ééçåãàÛÔÍòЂÿ þýû÷ñëãÚÒÖ «yû¦ëÐÓ­Äëëé€ë êééæäàÛÕÎÅ´Ô†ÿüõìãÚÒ×¢ªyû£ëæÆ×þꢢ™Â€êëêééæäáÛÖÏÆ¹ÀÑÉþ¿ÂÆÍÕàìññîâÕ×¢©yû¡ëÜÄç€ÿÊ—ž¦ŸšÊëê€éçäáÜ×ÐÆ½¯žŽuqpoprtw…˜¯ÅÚÝࢨyûŸë1ÏËöÿÿüýý¯™Ÿ§žÒêéèçåáÝØÑȾ´§—ˆ~zyxwvsqnkhmz—¹Ý¨§yüœìçÆØÿÿþ€üÿ유§œ¢ÙêçåãÞÙÒ˸¬œƒ€~|{€yxwupn‚¹›¦yüšìÜÅçÿÿý‚üÿÑ™žƒ¡§™¨ÜæâßÚÔÍÆ¼±¤–Œ€‰ˆ†„ƒƒ‚€|tm• ¥yü˜ìÏÌ÷ÿÿƒüûûý®ŒšžŸž‚£¥—¬ÞàÛÖÐÉÁ¸­£š—••”’€ ŽŽ‹‰‡€sŠ[¥yý•íçÇØÿÿþüûúùø÷ùè¼|†—ŸŸž€¤¤–²ÛÚÓÍÆ¿·¯©¥£¢¡ € œ››š™—”‰†1¤yý“í ÜÅèÿÿýüüûúùø÷#ùñÑÔœx}|}‚‹“šžŸžž¥¢“³ÖÑÊž¹µ±¯®¬«ªª€© ¨§¦¤¡žš•“w£yý‘íÏÌøÿÿüûúù†÷#øÛÎÓÄ}~~}||€†—ŸžŸ¦ ’µÐÉÅÁ¾º¹··¶µ¶€µ ´³²°®«¨¥ ¡5£yýŽíçÇÚÿÿýùø‰÷úçÍÐÐÕ yƒ~||~ƒ‹”šž¡¨’¹ÍÈÅÃÁÁÀ€¿ À¿¿¾¾½»¹·µ²¯µ^£{þŒîÜÆéÿþùŒ÷ øóÒÏÐÐÓÇ|…~ }||€‡— ©š”ÀÎË†Ê ÉÉÈÅÅÂÀ¾»Äh£{þŠîÔÎõÿü÷ùÜÎÐÕ¤yˆ~ }||~„‹˜¥˜šÈÒÏÑ…ÒÑÐÎÌÊÈÇÔi£{ÿŠï¶ÿú÷úé΂ÐÒÊ„|‹~ }|}Œš£ÑÖÖ…ÙØÖÕÔÓÒßl£{ÿŠï®ÿø÷øôÓσÐÖ©yŽ~}||…‹ˆ»ÖÜ…ÞÝÜÛÙÙçp£{ÿŠï¬øù÷ùÞÍ„ÐÒ̆|‘~}Š˜ËÙáã€âááàÞÞís£{ÿŠï«ñøŽ÷ùëΆÐÕ­y‘~Š„´Òã‚çææååääãôv£|ÿŠð«ëôøŒ÷øõÔφÐÑΉ{~}…Šs¥Îäêéè÷x£|ÿŠð¬èíùŒ÷úà͈ÐÕ±y~}ކn£Ïçíìëëêêúy£|ÿŠñ¬éåø‹÷ùíωÐÑÐŒ{~}–€p¦Òêïîííîíý{£|ÿŠñ¬éÞöŠ÷øöÕΊÐÕµz~}‰˜{uªÖìƒðïðïÿ{£|ÿŠñ¬êÛðø‰÷ùáÍ‹ÐÑÒz‹~}€˜wz®Øîƒñƒðÿ|£|ÿŠñ¬êÚèùˆ÷ùîÏÐÕ¹{‹~}ˆ’˜u~±Úï‡ñðñÿ|£|ÿŠñ¬êÛàˆ÷ø÷×ÎŽÐÓ“zŠ~‘™rµÜï‰ñÿ|£|ÿŠò­êÜÜòø†÷úãÍÐÔ¼{}ˆ~ }†’‘™o†¸ßð‰òÿ|£|ÿŠó­êÜÚëù…÷ùïÐÏÐÔ—y‰~Ž’‘šm‰¼âò‰óÿ|£|ÿŠó­êÜÛãø†÷ØÎ‘ÐÔÀ}}†~ }…’‘‘™kŒ¾ãŠóÿ|£|ÿŠó­êÜÜÝôøƒ÷úåÍ“ÐÕ›y‡~’‘‘™iÀäŠóÿ|£|ÿŠó­êÜÜÚíù‚÷ùñÑÏ“ÐÓÃ}„~}„’€‘˜i’ÂæŠóÿ|£|ÿŠó­êÜÜÛåø‚÷øÚΕÐÕŸy„~}Œ’€‘—i•ÅçŠóÿ|£~ÿŠô®êÜÜÛßö÷úçÍ–ÐÓÆ}‚~}‚’€‘’•g—ÈéŠôÿ~£~ÿŠô®ê€ÜÛðø÷÷øòÒÏ—ÐÕ£x‚~}‹’€‘’“gšËêŠôÿ~£~ÿŠõ®ê€ÜÚèù÷÷ùÜΘÐÒɃ|€~}‚‘’‘ižÎìŠõÿ~£~ÿŠõ®ê€ÜÛá÷÷úéΚÐÖ§x€~}‰’‘“jŸÐìŠõÿ~£ÿŠö¯ê‚ÜòùóÓÏšÐÒÌ…|~}€‚‘“‹l£ÓîŠöÿ~£ÿŠö¯êÜÚëûÝÍœÐÖ¬y~}ˆ’‚‘”‡m¦ÕïŠöÿ~£ÿŠö¯êÜÚèòÖØ€×ÖÕÕÔÓÓÒ€ÑÐÑΈ{ƒ‘•„p©×ñŠöÿ£ÿŠö¯êÜâɋޖœ¢©¯´¹¿ÂÆÊÍÐÒÔÕր؀×ÖÕÕÔÓÒÒ€ÑÕ°x†’ƒ‘–s¬ÙñŠöÿ£ÿŠ÷¯ê€Ü*âÐmQPOPPQSTVY\`chmrw}ƒŠ–£©®´¹¾ÂÇÊÍÐÓÖÕ‹’ƒ‘–~w¯ÜóŠ÷ÿ£ÿŠ÷ ¯êÜÜáÕsW_[‚W€VUUTSSRQQP€OPPQSTVY\`dimrx{’”ƒ‘—{{²ÞôŠ÷ÿ£ÿŠø°êÜàÚ{V€^Z”W€V UUTSSRLe¨§”‚‘˜wµáöŠøÿ£ÿŠø°êßÝ‚V^]X›WSb¥­«¨–‘™uƒ¸ãöŠøÿ£ÿŠø°ìá‹Uƒ^\šW UYœ®ªª«ª™€‘™r†»äöŠøÿ£ÿŠø°ñ”U…^[˜WVT¯ª «ª›‘‘™oоå÷Šøÿ£ÿŠø³®V]†^Y—WRƒ°„ª «ž‘šlÁæ÷Šøÿ£ÿŠù±eb‡^]X•WQv®«…ª«¡‘™l‘Ãè‹ùÿ£ÿ‰ùõé­dba†^\”WRjª¬‡ª¬¤œk“Æê‹ùÿ£ÿ‰úøëÔ«m]d†^[’WS`£­ˆª«´®i˜Êí‹úÿ£ÿ‰úùóä˰ƒ^ba…^YWUXš¯‡ª«²°‡`p¡Òï‹úÿ£ÿŠú øóçÔ»l]d_ƒ^]XŽWVTް†ª «²±Š\Wn·Þó‹úÿ‚£ÿ‹ú ù÷îàȯ…_aaƒ^\ŽWQ°…ª «±±‹]Xj}˜·Õë÷‹úÿ‚£ÿú ùóèÕ½Ÿn^d_‚^[ŒWQt®«„ª ±²_Vi|•¯ÈÝìõù‹úÿ‚£ÿûøðàʲˆ`aa‚^YŠWRh©¬ƒª ±²aVh{•¯ÈÜêôøûÿ‚£ÿû úõé×¾¡p]d_€^]XˆWT^¡­‚ª °³‘aVh{”®ÇÜêôùûÿ‚£ÿ’ûøñá˳‹a`b€^\‡WUW—¯ª °´“cUgz“­ÆÛêôù‘ûÿ‚£‚ÿ“ü ûöëØÁ¤s]d_^^Z…WVS‹°€ª °´–dVgz’­ÆÚêôú“üÿ‚£‚ÿ•ü ùòãεŽa`b^^Y„WQ¯ªª¯´—gUgy‘¬ÅÚéóù•üÿ‚£‚ÿ–ü ûöìÙ¦u]d_]X‚WQq­«¯´™iUfx«ÄÙéóù—üÿ‚£‚ÿ˜ü ùòäζb_c\WSf¨±´œiUewªÃØéóù™üÿ‚£‚ÿ™üû÷íÚèv]e[VWT]¤¹kUew©Â×èóù›üÿ‚£‚ÿ›ýûôæÐ¸’d_]UZ £lUdv©ÂØèôúýÿ‚£‚ÿœýüøîÜĪz\^uUdu¨Á×èóúŸýÿ‚£‚ÿžýûôçѺ“njjv‹§ÀÖçóúü ýÿ‚£‚ÿŸýüøïÝŝ𗧾Õçòùü¢ýÿ‚£‚ÿ¡þ üõèÙÍÍØçóúý¤þÿ‚£‚ÿ¢þýúôïïôúý¦þÿ‚£‚ÿ¤þý¨þÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚Õÿ‚£‚›ÿü÷ü´ÿ‚£‚™ÿ Ý’oem}¡þ𘕀–——–Ñÿ¸™îžÿ‚£‚˜ÿ Î\WXd_WcùåYˆW³ÿ‹WZãžÿ‚£‚—ÿþxW`Íûô×°öúÔÓÔÙ³WWŽÛÔÔÑíÿŒWZãžÿ‚£‚—ÿí`W~ˆÿÔWW¢ƒÿŒWZãžÿ‚£‚—ÿôgW[ɇÿÔWW¡ƒÿŒWZãžÿ‚£‚˜ÿœWWX˜í…ÿÔWW¡ƒÿŒWZãžÿ‚£‚˜ÿøŠ€Wa¶þƒÿÔWW¡ƒÿŒWZãžÿ‚£‚™ÿý²`€Wû‚ÿÔWW¡ƒÿŒWZãžÿ‚£‚›ÿ딀W©‚ÿÔWW¡ƒÿŒWZãžÿ‚£‚ÿ°WWsüÿÔWW¡ƒÿŒWZãžÿ‚£‚ÿé]WkøÿÔWW¡ƒÿŒWZäžÿ‚£‚—ÿòÉó€ÿ¾WW‡‚ÿÔWW¡ƒÿŒWZÝýøþ˜ÿ‚£‚—ÿ ë]a„˜„ZW[Õ‚ÿÔWW¡ƒÿ ŒWWdgffeeߘÿ‚£‚—ÿñyY€W[׃ÿÙeb¬ƒÿšdkg€feeߘÿ‚£‚—ÿýÕ¶ ”š³â„ÿñÇÆáƒÿÚÆ‚ÉÈÈô˜ÿ‚£‚Õÿ‚£‚Õÿ‚£‚Õÿ‚£ƒÕÿƒ£ƒÕÿƒ£|Õí|£ Ï ýýýýýýýý ¬ Æoã¢Ø€×ØØ××€ÖÕÕÔÏËÆ®u/Ãwù©é èççææåâáààáÏŒÁvö©æääããâàÞÝÚØÕÑÙ¶'Àuö©æåäããâàÞÛÚ×ÓÏÈÏÂ+¿vö¨æååäããáàÜÚÙÖÒÎÉ¿ÎÁ'¾vö¨æååäããàßÜÛÙÕÑÍÇÀ¶Õ¿#½x÷¨çææääãáàÞÛÚÖÒÍÇÁ¸µá²'¼x÷©çæåääãáßÜÚØÓÏʹ¬ÈÞ±#»x÷©çææåäãáàÞÚØÔÐËû¯´ÛÖ±%ºx÷©çææåääâáßÜÙ×ÒÍÆ½³ª€Õ®!¹x÷ªçææääãáàÝÛÙÔÏÉÀ¶¦ÉáÒÔ¨¸x÷ªçææåääâáßÜÚÖÑÌĸ©»çÚÑÓ¦·x÷«çææåäãâáÞÛØÓÎǼ®°ëäÚÐÓ£¶xø¬èçæååäâàÝÚÕÐÉ¿²«éíãÙÐÒ£µxø­èçæååãâÞÜ×ÒÌÁµ©âõëãÚÐÒ¡´xø®èçæåäâàÝÙÔÎ÷¨ÛüòêãÙÐÓ¡³yù®éèçæåäâßÛÖÏÆ¹©Öÿ÷òêâÙÏÓ²yù¯éèèæåãßÜ×ÑǺ©Ñÿû÷òêâÙÐÓ±yù¯éèèæåäáÜØÒÈ»ªÎÿýû÷òêâÙÐÓ °yù¯éèèçåäáÝØÒʽ«Ìÿþýû÷òêâÙÐÔ ¯yù°éèçæäâÝÙÓʽ¬Ìÿÿþýû÷òêâÚÐÔ ®yú°ê éèçåãÞÚÔÌ¿®Ì€ÿ þýû÷òêãÙÑÕ ­yú°ê éèçåãßÚÔÍÁ°Íÿ þýû÷ñêãÚÑÕ ¬yú§êèæ„ê ééçåãàÛÔÍòЂÿ þýû÷ñëãÚÒÖ «yû¦ëÏÈ¡Ãëëé€ë êééæäàÛÕÎÅ´Ô†ÿüõìãÚÒ×¢ªyû£ëæÃÉòْ€êëêééæäáÛÖÏÆ¹ÀÑÉþ¿ÂÆÍÕàìññîâÕ×¢©yû¡ëÛ¿Õóí뵄‹’“Êëê€éçäáÜ×ÐÆ½¯žŽuqpoprtw…˜¯ÅÚÝࢨyûŸë1ÎÁãòéäåå›‡ŠŠŒ“™ÒêéèçåáÝØÑȾ´§—ˆ~zyxwvsqnkhmz—¹Ý¨§yüœìçÃÉîðæ€äçÕŠ‰Š“ŒŸÙêçåãÞÙÒ˸¬œƒ€~|{€yxwupn‚¹›¦yüšìÜ¿Öóíåäã鼆‹ƒŠŽ“‹¥ÜæâßÚÔÍÆ¼±¤–Œ€‰ˆ†„ƒƒ‚€|tm• ¥yü˜ìÍÂäòéääãæìôœz‡‹Œ‹‚Š‘ŠªÞàÛÖÐÉÁ¸­£š—••”’€ ŽŽ‹‰‡€sŠ[¥yý•íçÄÊïðæ€ãäçìò÷ûÿá£lou}…‰ŒŒ‹€Š‹±ÛÚÓÍÆ¿·¯©¥£¢¡ € œ››š™—”‰†1¤yý“í Ü¿Öóëããåèîóøû€ý#ÿò¸¹ˆimlmry‡‹Œ‹Š‹‘‹²ÖÑÊž¹µ±¯®¬«ªª€© ¨§¦¤¡žš•“w£yý‘í ÎÂãñèåéïõùü€ý€ü$ýþȲ¹«omnnmlmov}…ŠŒ‹‹’Ž‹µÐÉÅÁ¾º¹··¶µ¶€µ ´³²°®«¨¥ ¡5£yýŽí çÃÊîòíðöúýþýý„üÿß²¶¶»Œiƒnmlnrzˆ‹“‹¹ÍÈÅÃÁÁÀ€¿ À¿¿¾¾½»¹·µ²¯µ^£{þŒîÜÀÛûúøûý‡ü þôº´¶¶¸®qm…n mlmpv~…Œ•‹ÀÎË†Ê ÉÉÈÅÅÂÀ¾»Äh£{þŠîÔËòÿÿ€ýŒüÿ˲¶»i‰n mlnsz…‘‰—ÈÒÏÑ…ÒÑÐÎÌÊÈÇÔi£{ÿŠï³ÿÿýüÿ㲂¶¸±sl‹n mlmp{†„¡ÑÖÖ…ÙØÖÕÔÓÒßl£{ÿŠï§ýþüþö»´ƒ¶»“iŽnmlltz~»ÖÜ…ÞÝÜÛÙÙçp£{ÿŠï¤ìÿüÿϱ„¶·³ul‘nmy—ËÙáã€âááàÞÞís£{ÿŠï£ÛþŽüÿ泆¶»—i‘nozƒ´Òã‚çææååääãôv£|ÿŠð¤ÎõþŒüþø½´†¶·µxknmtzr¥Îäêéè÷x£|ÿŠð¤ÉæÿŒüÿÒ±ˆ¶»šjnm|wm£Ïçíìëëêêúy£|ÿŠñ¥ÉÔÿ‹üÿé´µˆ¶·¶{knmqƒrp¦Òêïîííîíý{£|ÿŠñ¥ËÆùý‰üýúÀ³Š¶ºžjnmx…ouªÖìƒðïðïÿ{£|ÿŠñ¥Ì¾ìÿ‰üÿÕ±‹¶··~kŒnp~…kz®Øîƒñƒðÿ|£|ÿŠñ¥Ì¼ÚÿˆüÿìµµŒ¶º¡k‹nmw€…i~±Úï‡ñðñÿ|£|ÿŠñ¥Ì¾Êüý†üýûÂ³Ž¶¹jŠno}†hµÜï‰ñÿ|£|ÿŠò¥ÌÀÀñþ†üÿر¶º¥l‰n mu€†f†¸ßð‰òÿ|£|ÿŠó¦ÌÀ¼àÿ…üÿï¶µ¶¹„jˆn o}€†f‰¼âò‰óÿ|£|ÿŠó¦ÌÀ½Ïþ„üýýŲ‘¶¹¨mm†n mt€†dŒ¾ãŠóÿ|£|ÿŠó¦ÌÀ¿Âõþƒüÿܱ“¶ºˆj‡n|€†cÀäŠóÿ|£|ÿŠó¦ÌÀÀ½æÿ‚üÿñ¸µ“¶¹«om„nms€€…d’ÂæŠóÿ|£|ÿŠó¦ÌÀÀ½ÕÿüýþȲ•¶»‹i„nm{€€„d•ÅçŠóÿ|£~ÿŠô¦ÌÀÀ¿Æùý€üÿß±–¶¸­pm‚nmr€ƒe—ÈéŠôÿ~£~ÿŠô¦Ì€À¾ìÿüüÿó¹´—¶»i‚nmy€€€dšËêŠôÿ~£~ÿŠõ§Ì€À¼Ûÿüüÿ˲˜¶¸°rl€nmq‚€gžÎìŠõÿ~£~ÿŠõ§Ì€À¾ÊüüÿⲚ¶»’i€nmx€€|hŸÐìŠõÿ~£ÿŠö§Ì‚Àñÿö»´š¶·²ulnnp~‚zk£ÓîŠöÿ~£ÿŠö§ÌÀ¼áÿαœ¶»–inmw€‚‚xm¦ÕïŠöÿ~£ÿŠö§ÌÀ½Õ캼»»º¹¹¸·¶·´xko~ƒ‚up©×ñŠöÿ£ÿŠö§ÌÀű}|„‰Ž”™¢§ª®±´¶¸ºº¼€½€¼»»º¹¹¸¸··¶»šiu€ƒƒss¬ÙñŠöÿ£ÿŠ÷¨Ì€À*ŵ^FGFGGHIKLNQTX\`dinsy~„‰”™ž¢§ª®±³¶¹ºº}z€ƒ„pw¯ÜóŠ÷ÿ£ÿŠ÷ ¨ÌÀÀĺdLSPƒM€L KKJIIHHGFF€GHIJLORUX\`dil~ƒ„n{²ÞôŠ÷ÿ£ÿŠø¨ÌÀþkK€RO•M LLKKJJIIDY‘‘~‚…lµáöŠøÿ£ÿŠø¨ÌÂÁrK‚RN›MJV•”‘ƒ~†kƒ¸ãöŠøÿ£ÿŠø¨ÎÄzJƒRQšM KO‡—““”“…~€†i†»äöŠøÿ£ÿŠø©Ò‚J…RP˜MLK}˜ƒ“ ‡~†gоå÷Šøÿ£ÿŠø«˜KQ†RO—MHr˜„“ ”‰~‡eÁæ÷Šøÿ£ÿŠù¯ZUˆRN•MHg–”…“”Œ†e‘Ãè‹ùÿ£ÿ‰ùõé­^VT†RQ”MI]“•‡“”Žˆe“Æê‹ùÿ£ÿ‰úøëÔ«jSW†RP’MJT–ˆ“”œ—f˜Êí‹úÿ£ÿ‰úùóä˰‚WVT…RNMKN…—‡“”š™w\p¡Òï‹úÿ£ÿŠúøóçÔ»iTW„RQNŽMLJ{˜†“ ”š™zXWn·Þó‹úÿ‚£ÿ‹ú ù÷îàȯ…YUUƒRQŽMIp—†“ š™{XWj}˜·Õë÷‹úÿ‚£ÿú ùóèÕ½ŸlSWS‚RPŒMHe–”„“ ™š}YVi|•¯ÈÝìõù‹úÿ‚£ÿûøðàʲˆZUU‚RNŠMI[’•ƒ“ ™šZVh{•¯ÈÜêôøûÿ‚£ÿû úõé×¾¡nTWS€RQNˆMJSŒ–‚“ ™›ZVh{”®ÇÜêôùûÿ‚£ÿ’ûøñá˳Š\TU€RQ‡MKM„—“ ˜œ\Ugz“­ÆÛêôù‘ûÿ‚£‚ÿ“ü ûöëØÁ¤qTWSRRO…MLJy˜€“ ˜œ‚^Ugz’­ÆÚêôú“üÿ‚£‚ÿ•ü ùòãε\TVRRN„MHn˜““˜œ„_Tgy‘¬ÅÚéóù•üÿ‚£‚ÿ–ü ûöìÙ¦tTXSQƒMHc•”—œ†`Tfx«ÄÙéóù—üÿ‚£‚ÿ˜ü ùòäζ^TVPMIY‘™œ‡aUewªÃØéóù™üÿ‚£‚ÿ™üû÷íÚèuTXQMMKRŽ ‰bSew©Â×èóù›üÿ‚£‚ÿ›ýûôæÐ¸’`SRKO‹cTdv©ÂØèôúýÿ‚£‚ÿœýüøîÜĪxTSpjTdu¨Á×èóúŸýÿ‚£‚ÿžýûôçѺ“jhjv‹§ÀÖçóúü ýÿ‚£‚ÿŸýüøïÝŝ𗧾Õçòùü¢ýÿ‚£‚ÿ¡þ üõèÙÍÍØçóúý¤þÿ‚£‚ÿ¢þýúôïïôúý¦þÿ‚£‚ÿ¤þý¨þÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚Õÿ‚£‚›ÿü÷ü´ÿ‚£‚™ÿ Ý’oem}¡þ𘕀–——–Ñÿ¸™îžÿ‚£‚˜ÿ Î\WXd_WcùåYˆW³ÿ‹WZãžÿ‚£‚—ÿþxW`Íûô×°öúÔÓÔÙ³WWŽÛÔÔÑíÿŒWZãžÿ‚£‚—ÿí`W~ˆÿÔWW¢ƒÿŒWZãžÿ‚£‚—ÿôgW[ɇÿÔWW¡ƒÿŒWZãžÿ‚£‚˜ÿœWWX˜í…ÿÔWW¡ƒÿŒWZãžÿ‚£‚˜ÿøŠ€Wa¶þƒÿÔWW¡ƒÿŒWZãžÿ‚£‚™ÿý²`€Wû‚ÿÔWW¡ƒÿŒWZãžÿ‚£‚›ÿ딀W©‚ÿÔWW¡ƒÿŒWZãžÿ‚£‚ÿ°WWsüÿÔWW¡ƒÿŒWZãžÿ‚£‚ÿé]WkøÿÔWW¡ƒÿŒWZäžÿ‚£‚—ÿòÉó€ÿ¾WW‡‚ÿÔWW¡ƒÿŒWZÝýøþ˜ÿ‚£‚—ÿ ë]a„˜„ZW[Õ‚ÿÔWW¡ƒÿ ŒWWdgffeeߘÿ‚£‚—ÿñyY€W[׃ÿÙeb¬ƒÿšdkg€feeߘÿ‚£‚—ÿýÕ¶ ”š³â„ÿñÇÆáƒÿÚÆ‚ÉÈÈô˜ÿ‚£‚Õÿ‚£‚Õÿ‚£‚Õÿ‚£ƒÕÿƒ£ƒÕÿƒ£|Õí|£ Ï ýýýýýýýý ¬ Æoã¢Ø€×ØØ××€ÖÕÕÔÏËÆ®u/Ãwù©é èççææåâáààáÏŒÁvö©æääããâàÞÝÚØÕÑÙ¶'Àuö©æåäããâàÞÛÚ×ÓÏÈÏÂ+¿vö¨æååäããáàÜÚÙÖÒÎÉ¿ÎÁ'¾vö¨æååäããàßÜÛÙÕÑÍÇÀ¶Õ¿#½x÷¨çææääãáàÞÛÚÖÒÍÇÁ¸µá²'¼x÷©çæåääãáßÜÚØÓÏʹ¬ÈÞ±#»x÷©çææåäãáàÞÚØÔÐËû¯´ÛÖ±%ºx÷©çææåääâáßÜÙ×ÒÍÆ½³ª€Õ®!¹x÷ªçææääãáàÝÛÙÔÏÉÀ¶¦ÉáÒÔ¨¸x÷ªçææåääâáßÜÚÖÑÌĸ©»çÚÑÓ¦·x÷«çææåäãâáÞÛØÓÎǼ®°ëäÚÐÓ£¶xø¬èçæååäâàÝÚÕÐÉ¿²«éíãÙÐÒ£µxø­èçæååãâÞÜ×ÒÌÁµ©âõëãÚÐÒ¡´xø®èçæåäâàÝÙÔÎ÷¨ÛüòêãÙÐÓ¡³yù®éèçæåäâßÛÖÏÆ¹©Öÿ÷òêâÙÏÓ²yù¯éèèæåãßÜ×ÑǺ©Ñÿû÷òêâÙÐÓ±yù¯éèèæåäáÜØÒÈ»ªÎÿýû÷òêâÙÐÓ °yù¯éèèçåäáÝØÒʽ«Ìÿþýû÷òêâÙÐÔ ¯yù°éèçæäâÝÙÓʽ¬Ìÿÿþýû÷òêâÚÐÔ ®yú°ê éèçåãÞÚÔÌ¿®Ì€ÿ þýû÷òêãÙÑÕ ­yú°ê éèçåãßÚÔÍÁ°Íÿ þýû÷ñêãÚÑÕ ¬yú§êèæ„ê ééçåãàÛÔÍòЂÿ þýû÷ñëãÚÒÖ «yû¦ëÉ€f¿ëëé€ë êééæäàÛÕÎÅ´Ô†ÿüõìãÚÒ×¢ªyû£ëæ±tXL39m¾€êëêééæäáÛÖÏÆ¹ÀÑÉþ¿ÂÆÍÕàìññîâÕ×¢©yû¡ëÚ›eTRQ@025:vÈëê€éçäáÜ×ÐÆ½¯žŽuqpoprtw…˜¯ÅÚÝࢨyûŸëdž\TQ€O)812235@ÑêéèçåáÝØÑȾ´§—ˆ~zyxwvsqnkhmz—¹Ý¨§yüœìç°sWSP€OPJƒ235FÙêçåãÞÙÒ˸¬œƒ€~|{€yxwupn‚¹›¦yüšìÚšdTRƒOQB1„235L™ÜæâßÚÔÍÆ¼±¤–Œ€‰ˆ†„ƒƒ‚€|tm• ¥yü˜ìƆ\TQƒOPRT8-123ƒ245T¢ÞàÛÖÐÉÁ¸­£š—••”’€ ŽŽ‹‰‡€sŠ[¥yý•íç°rVSPOPRTUVYN:()+.0233245]«ÛÚÓÍÆ¿·¯©¥£¢¡ € œ››š™—”‰†1¤yý“íÚšdTQ€OQRTVWXS@A1'€)*-/123€256d¯ÖÑÊž¹µ±¯®¬«ªª€© ¨§¦¤¡žš•“w£yý‘í Æ…ZSPPQSTV…WXF?A=‚)()*+.0232259k³ÐÉÅÁ¾º¹··¶µ¶€µ ´³²°®«¨¥ ¡5£yýŽíç¯rUTRSUVˆWYN?@@B2'„)()*-/1235=t¸ÍÈÅÃÁÁÀ€¿ À¿¿¾¾½»¹·µ²¯µ^£{þŒîÚ™eWVUŒWXTA?@@A=*‰) *,.036B}¿ÎË†Ê ÉÉÈÅÅÂÀ¾»Äh£{þŠîφ_[XWXG?@A4'Š) ()*-14G‰ÈÒÏÑ…ÒÑÐÎÌÊÈÇÔi£{ÿŠïŽ`XWXO?‚@A>+) ()*-1M—ÑÖÖ…ÙØÖÕÔÓÒßl£{ÿŠïˆXXWXUB?ƒ@A5()(+-U¹ÖÜ…ÞÝÜÛÙÙçp£{ÿŠï…RXWXH?…@?+(’)-ËÙáã€âááàÞÞís£{ÿŠï„LXŽWXP?†@A6(’)0|´Òã‚çææååääãôv£|ÿŠð„HUXŒWXVB?‡@?,()+2n¥Îäêéè÷x£|ÿŠð„FPXŒWXI?ˆ@A7().3k£Ïçíìëëêêúy£|ÿŠñ…FJX‹WXQ?‹@-(Ž)*04o¦Òêïîííîíý{£|ÿŠñ…GEVŠWXVC?Š@B8(Ž),15uªÖìƒðïðïÿ{£|ÿŠñ…GBRX‰WXJ>@.(Œ)*/17z®Øîƒñƒðÿ|£|ÿŠñ…GBLXˆWXRŽ@A9(Œ),/1:~±Úï‡ñðñÿ|£|ÿŠñ…GBFŠWD?Ž@A/(‹)./2=µÜï‰ñÿ|£|ÿŠò…GCCSX†WXK>@A:(Š),//2?†¸ßð‰òÿ|£|ÿŠó…GCBNX…WXS’@A0(‰).//2C‰¼âò‰óÿ|£|ÿŠó…GCBHX†WE?‘@A<(ˆ)+€/2GŒ¾ãŠóÿ|£|ÿŠó…GCCDUXƒWYM?“@A1(‡).€/2IÀäŠóÿ|£|ÿŠó…GCCBPX‚WXS•@A<‡)+/1M’ÂæŠóÿ|£|ÿŠó…GCCBJX‚WXF?•@A2(…)-/1Q•ÅçŠóÿ|£~ÿŠô†G€CEVWYM?–@A=*„)*‚/0U—ÈéŠôÿ~£~ÿŠô†G€CBRXWWXTA?—@A4'ƒ)-‚/0XšËêŠôÿ~£~ÿŠõ†G€CBLXWWXG?˜@A>+‚)*„/]žÎìŠõÿ~£~ÿŠõ†G€CBFWWXO?š@A5(),‚/0/aŸÐìŠõÿ~£ÿŠö‡G‚CTXUB?›@?+())*ƒ/0/f£ÓîŠöÿ~£ÿŠö‡GCBNYH?œ@A6()),ƒ/01j¦ÕïŠöÿ~£ÿŠö‡GCBJRA‚BƒA“@?,().ƒ/02n©×ñŠöÿ£ÿŠö‡GCE>.-0135789;<>??@€A†B‚A€@A7',„/04r¬ÙñŠöÿ£ÿŠ÷‡G€CE@%‚!"#$%')*,.023579:;<>>?@€A.-„/16w¯ÜóŠ÷ÿ£ÿŠ÷ ‡GCCDA'! †‚†  !#$%'(.0„/18{²ÞôŠ÷ÿ£ÿŠøˆGCDC)€!—ƒ"440ƒ/1:µáöŠøÿ£ÿŠøˆGDC+‚!›!36540‚/1=ƒ¸ãöŠøÿ£ÿŠøˆHD-ƒ! š1651/2>†»äöŠøÿ£ÿŠøˆI0…! ™.6ƒ51€/2Bоå÷Šøÿ£ÿŠø‡7‡!—*6…52//2FÁæ÷Šøÿ£ÿŠù¦,"ˆ!–'6‡53/2I‘Ãè‹ùÿ£ÿ‰ùõé«B#"†! ”#Š542L“Æê‹ùÿ£ÿ‰úøëÔ«^(#†! ’!36‰586S˜Êí‹úÿ£ÿ‰úùóä˰€<#"…!’06ˆ5876Hp¡Òï‹úÿ£ÿŠúøóçÔ»^)#…!-6‡5€7CWn·Þó‹úÿ‚£ÿ‹ú ù÷îàȯƒ?""ƒ! Ž*6†5 776BWj}˜·Õë÷‹úÿ‚£ÿúùóèÕ½Ÿb*#ƒ! Œ&6…5 786AUi|•¯ÈÝìõù‹úÿ‚£ÿûøðàʲ†B""‚!Š#…5 786AUh{•¯ÈÜêôøûÿ‚£ÿûúõé×¾¡e,#‚!‰ 36‚5 786@Th{”®ÇÜêôùûÿ‚£ÿ’ûøñá˳‰E""€! ‰065 786@Sgz“­ÆÛêôù‘ûÿ‚£‚ÿ“üûöëØÁ¤i-#€! †,6€5 786@Sgz’­ÆÚêôú“üÿ‚£‚ÿ•ü ùòãεŒG#"!!„)655785?Rgy‘¬ÅÚéóù•üÿ‚£‚ÿ–ü ûöìÙ¦l.#! ƒ%65685?Qfx«ÄÙéóù—üÿ‚£‚ÿ˜ü ùòäζJ## "4786>QewªÃØéóù™üÿ‚£‚ÿ™üû÷íÚèo1#  395=Pew©Â×èóù›üÿ‚£‚ÿ›ýûôæÐ¸‘M$ 37=Odv©ÂØèôúýÿ‚£‚ÿœýüøîÜĪs2 -?Ndu¨Á×èóúŸýÿ‚£‚ÿžýûôçѺ’[`jv‹§ÀÖçóúü ýÿ‚£‚ÿŸýüøïÝŝ𗧾Õçòùü¢ýÿ‚£‚ÿ¡þ üõèÙÍÍØçóúý¤þÿ‚£‚ÿ¢þýúôïïôúý¦þÿ‚£‚ÿ¤þý¨þÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚ÿÓþÿ‚£‚Õÿ‚£‚›ÿü÷ü´ÿ‚£‚™ÿ Ý’oem}¡þ𘕀–——–Ñÿ¸™îžÿ‚£‚˜ÿ Î\WXd_WcùåYˆW³ÿ‹WZãžÿ‚£‚—ÿþxW`Íûô×°öúÔÓÔÙ³WWŽÛÔÔÑíÿŒWZãžÿ‚£‚—ÿí`W~ˆÿÔWW¢ƒÿŒWZãžÿ‚£‚—ÿôgW[ɇÿÔWW¡ƒÿŒWZãžÿ‚£‚˜ÿœWWX˜í…ÿÔWW¡ƒÿŒWZãžÿ‚£‚˜ÿøŠ€Wa¶þƒÿÔWW¡ƒÿŒWZãžÿ‚£‚™ÿý²`€Wû‚ÿÔWW¡ƒÿŒWZãžÿ‚£‚›ÿ딀W©‚ÿÔWW¡ƒÿŒWZãžÿ‚£‚ÿ°WWsüÿÔWW¡ƒÿŒWZãžÿ‚£‚ÿé]WkøÿÔWW¡ƒÿŒWZäžÿ‚£‚—ÿòÉó€ÿ¾WW‡‚ÿÔWW¡ƒÿŒWZÝýøþ˜ÿ‚£‚—ÿ ë]a„˜„ZW[Õ‚ÿÔWW¡ƒÿ ŒWWdgffeeߘÿ‚£‚—ÿñyY€W[׃ÿÙeb¬ƒÿšdkg€feeߘÿ‚£‚—ÿýÕ¶ ”š³â„ÿñÇÆáƒÿÚÆ‚ÉÈÈô˜ÿ‚£‚Õÿ‚£‚Õÿ‚£‚Õÿ‚£ƒÕÿƒ£ƒÕÿƒ£|Õí|£ Ï ýýýýýýýih32 ¾äŠü÷ó€ðéåàW–ü€å‹æÞØÏÁ`•üŽæàÚÐÁÀ]”üæçæ‹çáÝÔÆ¶ÐZ“üŽçäàÙÌ´àÎT’üŽèæäÞÒ¹ãçÍT‘ü€è‹é èæáÕ½â÷æÌUüé çâ×Àáý÷çÍTü‹êæÈèêèäÙÄãþý÷çÏUŽ ü€ê‡ëä½­µêéåÚǽ­¥ª³ÀÈW ýˆëÕ¼çÿ±¡’¾æÝ̳‚€|{|’AŒ ý†ìÅÄøÿÿ圧¢“¿ÓÁ¬¢ž›š˜‘ƒ‹ ýƒíâ½Öÿÿûø÷Ø}ˆ’¡Ÿ‘¹Å¾»»º¸³¬k‹ ýîÚ¼éÿþ€÷ úãÑÀ{||~†–”‘ÆÒÎÊ ‹ ý€ïâ¸ÿû÷øñÐÐÕ™z~~}|€Œ„¢ââáàÝ ‹ ý€ïß°ÿ‚÷øØÎÐÓÃ}‚~}ˆyÙ€êé ‹ ý€ðà®ýø€÷ùæÍ€ÐÕy~}ŒqÔîïïî ‹ ý€ñá®õù÷÷øòÑÐÒÆ}€~}•sÜñ ‹ ý€òâ¯íø÷÷ùÚ΂Рՠy~~}‚štâò ‹ þ€óã¯çô÷ùè΃РÒÉ€}~}‹™wåò ‹ þ€ôä°åíùôÒÏ„ÐÕ¥y~‘—{éô ‹ þ€õ屿åûÝÎ…ÐÑ˃|‰’•€íõ ‹ þ€õ屿ãìÓÕÖ× ÖÖÕÔÙ«{’’…ðõ ‹ þ€öå±íÈww}‚ˆ˜¡¨­±¶¼¹‹‘’Œóö ‹ þ€÷æµÛiVSQQ‚P RSURj¦”‘“ö÷ ‹ þ€øç®~X^]†WT]¢®¨—‰›‚ø ‹ þ€ù÷¯Xd_^[„WVV—®ª«±”¡‚ù ‹ þùø¶caa^ZƒWS‹°ª°³i¼‚ù ‹ þƒú߇\d_XW Q}¯°´‘f„Åï‚ú ‹ ÿ„ûö¹fa`€WRp²µ‘gƒÃí„û ‹ ÿ†û áˆ\aWSh²˜i}¾ë†û ‹ ÿ‡ü ø¼gZgl|¾ëˆü ‹ ÿ‰ýåŒg}¼êŠý ‹ ‹ý÷Üèü‹ý ‹ ý ‹ þ ‹ ‡þ è«»ëÀÇȽáÕòˆþ ‹ †þ üo±Àá·‡oµÜsÕˆþ ‹ ‡þ r•ùþþ®ƒþþoÕˆþ ‹ ‡þ ð‰gèþ®‚þþoÕˆþ ‹!†þ ûòþlÂþ®‚þþoÊô÷†þ!‹!†þ ø–“óþäþþ˜Ì†þ!‹þ‹"þ"ääŠü÷ó€ðéåàW–ü€å‹æÞØÏÁ`•üŽæàÚÐÁÀ]”üæçæ‹çáÝÔÆ¶ÐZ“üŽçäàÙÌ´àÎT’üŽèæäÞÒ¹ãçÍT‘ü€è‹é èæáÕ½â÷æÌUüé çâ×Àáý÷çÍTü‹êæÈèêèäÙÄãþý÷çÏUŽ ü€ê‡ëä¹¢³êéåÚǽ­¥ª³ÀÈW ýˆëÔ´Óñžˆ½æÝ̳‚€|{|’AŒ ý†ìøâóòÕ~‰“‹¿ÓÁ¬¢ž›š˜‘ƒ‹ ýƒíâ¹Èôú÷úýÄ|nwŽŒ‹¹Å¾»»º¸³¬k‹ ýîÚ¹ãÿÿ€ýÿÙ´¨€lnu„ƒŒÆÒÎÊ ‹ ý€ïáµÿÿý€üþ𶵺…jnnmlozw ââáàÝ ‹ ý€ïߨÿ‚üþų¶¸«m‚nmwrÙ€êé ‹ ý€ðà¢úþ€üÿݲ€¶»‰jnmzjÔîïïî ‹ ý€ñ á¡èÿüüþó·µ€¶¸®om€nmƒmÜñ ‹ ý€òâ£Öþüüÿȳ‚¶ ºŒjnnmq‡oâò ‹ þ€óã¤Êõýÿᲃ¶ ·°pmnmy†såò ‹ þ€ô䥯åÿö¹µ„¶»inp„xéô ‹ þ€õä¥ÇÒÿ̲…¶·²rlx€ƒ~íõ ‹ þ€õä¥ÉÉä·»‚¼ »»ºº¾–k~€€ƒðõ ‹ þ€öå¥Ï¯hhnrw~†“˜› ¥¢z€~‹óö ‹ þ€÷æ©¿\KJHH‚G IJKI\{“ö÷ ‹ þ€øç£nMRQ†MKRŒ–’„x›‚ø ‹ þ€ù÷­NXSRP„MLLƒ—“”š¡‚ù ‹ þùø¶^UUROƒMJy˜“˜›~c¼‚ù ‹ þƒúß…RXSNM Hm—˜œ`„Åï‚ú ‹ ÿ„ûö¹aUT€MIbšœ€a‚Ãí„û ‹ ÿ†û á†RUMJ[š…b}¾ë†û ‹ ÿ‡ü ø»bPZ~d|¾ëˆü ‹ ÿ‰ýå‹b|¼êŠý ‹ ‹ý÷Üèü‹ý ‹ ý ‹ þ ‹ ‡þ è«»ëÀÇȽáÕòˆþ ‹ †þ üo±Àá·‡oµÜsÕˆþ ‹ ‡þ r•ùþþ®ƒþþoÕˆþ ‹ ‡þ ð‰gèþ®‚þþoÕˆþ ‹!†þ ûòþlÂþ®‚þþoÊô÷†þ!‹!†þ ø–“óþäþþ˜Ì†þ!‹þ‹"þ"ääŠü÷ó€ðéåàW–ü€å‹æÞØÏÁ`•üŽæàÚÐÁÀ]”üæçæ‹çáÝÔÆ¶ÐZ“üŽçäàÙÌ´àÎT’üŽèæäÞÒ¹ãçÍT‘ü€è‹é èæáÕ½â÷æÌUüé çâ×Àáý÷çÍTü‹êåÂèêèäÙÄãþý÷çÏUŽ ü€ê‡ëä¡f­êéåÚǽ­¥ª³ÀÈW ýˆëÒ‰\S93[¹æÝ̳‚€|{|’AŒ ý†ìºx€TJ.256g¼ÓÁ¬¢ž›š˜‘ƒ‹ ýƒíá¥gTVUVWD.),/38m·Å¾»»º¸³¬k‹ ýîÙŽ^ZZ€W YK?<()()+08vÆÒÎÊ ‹ ý€ïáyaYWXS@@A1(€) ()-;˜ââáàÝ ‹ ý€ïÞqZ‚WXE?@A<„),OÙ€êé ‹ ý€ðßpVX€WYM?€@A1(‚).KÔîïïî ‹ ý€ñàpPXWWXT‚@A=ƒ)0TÜñ ‹ ý€òáqKXWWXF?‚@A3(€)*2[âò ‹ þ€óârFUWXN?„@>*€)-2dåò ‹ þ€ôãrEPYUA…@B4()*/1méô ‹ þ€õärEIYG?†@?*(-/0uíõ ‹ þ€õärFFO@…BAAC6(€/}ðõ ‹ þ€öåsH>'')*,.035679::-€/†óö ‹ þ€÷ætC$…€#40/.ö÷ ‹ þ€øær*!!† 3641,™‚ø ‹ þ€ù÷¨'#!! †065572 ‚ù ‹ þùøµG""!ƒ,75783N¼‚ù ‹ þƒúß*#! )6783IƒÅï‚ú ‹ ÿ„ûö¹L""€%782HÃí„û ‹ ÿ†û á€+"#84E|¾ë†û ‹ ÿ‡ü ø»N#1Dz¾ëˆü ‹ ÿ‰ýå…Ny¼êŠý ‹ ‹ý÷Üèü‹ý ‹ ý ‹ þ ‹ ‡þ è«»ëÀÇȽáÕòˆþ ‹ †þ üo±Àá·‡oµÜsÕˆþ ‹ ‡þ r•ùþþ®ƒþþoÕˆþ ‹ ‡þ ð‰gèþ®‚þþoÕˆþ ‹!†þ ûòþlÂþ®‚þþoÊô÷†þ!‹!†þ ø–“óþäþþ˜Ì†þ!‹þ‹"þ"äil32ñ?2ìë†ìBŒì€ÛÚ†Ûß9‹íŠÜ¼Á?ŠîŠÞͶ÷À?‰îŠßдÿ÷ÀCˆï€áà‚á ϸàáÓ·ÿÿøÀ?‡ð„â Ø³Ù­’ÎÖ¸ˆux›B†ñ‚äÉ·éÿî‘¡™•º¨›––”k…òææä¾Ãûÿû÷Úžy…•Ž¿ÄÄÀ©… óèèÂøÿø÷úâÏË€}|€Š~ÄÝÜᆠôêêÀìù÷øïÏÐÕ¦y€~ƒ¨âçò† õììÂãù÷ø×ÏÐÑ̃}~€…µéìö† öîîÄÜöúå΀Рժy}‡…¾îî÷† ÷ððÅÚòó‚Ð ÑÎ…|‘€Èððø† øññÆÛëÛÑÕ×ܵ–|Òññø† ùóóÈã›eqy€‡”šž’–zÛóóù† úõõɤXYSRQ€PJ|¬žxãõõú† û÷÷êw_c[W Ru®±¸uê÷÷û† û€øôž^dZWWSh°´Œs²öøøü† ü‚ú Ùr^\Tb­’q­îúý† ýƒûù©[a‚s¬îƒûý† þ€ýüýÛ†§í…ýþ† ’þÿ† „ÿûòùøùø†ÿ† ƒÿý•ÄÖŸ–Ó¡…ÿ† „ÿºÿƳÿŠ…ÿ† ƒÿ þõÜʳÿ‡îúƒÿ† ƒÿ üº³ùáÕÿ³³éƒÿ†"“ÿÂ?2ìë†ìBŒì€ÛÚ†Ûß9‹íŠÜ¼Á?ŠîŠÞͶ÷À?‰îŠßдÿ÷ÀCˆï€áà‚á ϶àáÓ·ÿÿøÀ?‡ð„â Ø¯ÈšŒÎÖ¸ˆux›B†ñ‚äȯØÿã~‰‘º¨›––”k…òææä¾¿öÿÿýʼnitƒ€¿ÄÄÀ©… óèèÁõÿþýÿ׳±pmlpxrÄÝÜᆠôêê¾äÿüþî´¶º‘i€nr¨âçò† õììÀÑÿüýó¶·²rmnptµéìö† öîîÂÂùÿÛ±€¶ »”jmvv¾îî÷† ÷ððļîô¶µ€¶ ·µtlrÈððø† øññŽÛʶº¼Ào„nÒññø† ùóóÇÆ‡Ycjqv|‡‹€ƒmÛóóù† úõõÈLNIHH€GBl•Šnãõõú† û÷÷êsSVPM Hf—™Ÿlê÷÷û† û€øôUWPMMJ[˜œ{n²öøøü† ü‚ú ÙnRQKW–€l­îúý† ýƒûù¨TVrn¬îƒûý† þ€ýüýÛ„¦í…ýþ† ’þÿ† „ÿûòùøùø†ÿ† ƒÿý•ÄÖŸ–Ó¡…ÿ† „ÿºÿƳÿŠ…ÿ† ƒÿ þõÜʳÿ‡îúƒÿ† ƒÿ üº³ùáÕÿ³³éƒÿ†"“ÿÂ?2ìë†ìBŒì€ÛÚ†Ûß9‹íŠÜ¼Á?ŠîŠÞͶ÷À?‰îŠßдÿ÷ÀCˆï€áà‚á ΰàáÓ·ÿÿøÀ?‡ð„â Ø“_;nÍÖ¸ˆux›B†ñ‚äÅ‚YXO.3;{º¨›––”k…òææä´qWZXXE2(+0;€¿ÄÄÀ©… óèè»X\XWYK?>*)(*-@ÃÝÜᆠôêê¹OXWXS@@A4(€)+¦âçò† õìì»IXWWD?@@?*))*-´éìö† öîî½CVYM?€@ B6(),0¾îî÷† ÷ðð¾BRT„@+)/2Èððø† øññ¿BLF@ABC8)16Òññø† ùóóÁE1"%'*+-/12/1;Ûóóù† úõõÂ4 (63Aãõõú† û÷÷êe!#  &679Hê÷÷û† û€øô™2##783Z²öøøü† ü‚ú Ù^! !63V­îúý† ýƒûù¥3!.W¬îƒûý† þ€ýüýÚ{¥í…ýþ† ’þÿ† „ÿûòùøùø†ÿ† ƒÿý•ÄÖŸ–Ó¡…ÿ† „ÿºÿƳÿŠ…ÿ† ƒÿ þõÜʳÿ‡îúƒÿ† ƒÿ üº³ùáÕÿ³³éƒÿ†"“ÿÂis32!…†óòîÕq…ô‚ÞÏÿ…„ ôááÞµ¤Àÿÿ—ƒ ôÙ³áú™»¶ÿÿ+‚ õ±ÿû×®Ç|Ÿ‚ õ®ÿàÎÒˆ†~Áƒ ö°ôÏÓ׺ŒÕƒ ö©|dko‚ª˜àƒ ÷Ób^TY¤ºòƒ øûöŒVz”çûûƒù€ý×çýƒùÿüÔÝÓê€ÿƒúÿþ§ÓÍÄ€ÿƒ€ÿÈáæÈúÿÿ…†óòîÕq…ô‚ÞÏÿ…„ ôááÞ² Àÿÿ—ƒ ôÙ±Ûð„º´ÿÿ+‚ õ®ÿýÁ˜ÇzŸ‚ õ§ÿÒ²¸wuxÁƒ ö¦éµ¸¼£{ŒÕƒ ö¢kX_ar”•àƒ ÷Ò[SJOŽ~ºòƒ øûö‰Ll‘çûûƒù€ý×çýƒùÿüÔÝÓê€ÿƒúÿþ§ÓÍÄ€ÿƒ€ÿÈáæÈúÿÿ…†óòîÕq…ô‚ÞÏÿ…„ ôááÝ¡Àÿÿ—ƒ ôØ^S0²«ÿÿ+‚ õƒaYC6ÇrŸ‚ õ\I?A,,cÀƒ öQ?AB:.{Õƒ ö)!$$*6ˆàƒ ÷Ò>!38·òƒ øûö€2ƒçûûƒù€ýÖæýƒùÿüÔÝÓê€ÿƒúÿþ§ÓÍÄ€ÿƒ€ÿÈáæÈúÿÿt8mk@!"$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$#"ŒóóôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôóóðË@ œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú©$ŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ4£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ:¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä:#¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä:%©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿã:&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿã9&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ7&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá6&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà4&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ2&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ2&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ1&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ0&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ/&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ/&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ.&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ.&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ-&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ-&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ,&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ,&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ*&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×*&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×*&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×*&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍ &ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ &ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú] &ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍ" &ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©!&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª#&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª%&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&&ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª&%©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©%"©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©"¢üüüüýüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüýüüüü¢!Hjt|€ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ€|tjH!$.:BGIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIGB:.$h8mk (_accccccccccc_`bcccccoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿu tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ‚ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþƒ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ~ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý~ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý} tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý| tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý} tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý} tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýq tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøDtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿttÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿo3y‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚~yy3l8mk(_cccccccccccc`oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞItÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóXtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýYtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýXtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýWtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýXtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöUtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá$tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúitÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿotÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿj3y‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚y4s8mk€€€€€€‚€ÿÿÿÿÿùÿ¤€ÿÿÿÿÿÿÿÿ®€ÿÿÿÿÿÿÿÿÿ¶€ÿÿÿÿÿÿÿÿÿÿŒ€ÿÿÿÿÿÿÿÿÿû‡€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€ÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€Slic3r-1.3.0/var/tag_blue.png000077500000000000000000000013451327442435500157510ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<;PLTEÿÿÿËËËÈÈÈÄÄÄÊÊÊÀÀÀÊÊÊÈÈȽ½½¹¹¹ËË˵µµÉÉÉÇÇDZ±±ÅÅÅÃÃî®®ÁÁÁÀÀÀ¬¬¬½½½¼¼¼¬¬¬ººº¸¸¸«««¶¶¶´´´²²²±±±¯¯¯­­­ªªª«««ªªªÕÕÕÔÔÔÒÒÒÑÑÑÐÐÐÎÎÎÍÍÍÓÓÓýýýäääâââàààËËËóóóûûûÇÇÇ÷÷÷èóû½ãýÞÞÞÃÃÃüüüêõýŠÏþƒÌÿ¼âýÜÜÜÀÀÀëëëúúúçóû‰Îþ–ÔÿšÕÿ‹ÏÿÚÚÚ½½½éééÓëû˜Ôÿž×ÿ›ÖÿÙÙÙ¹¹¹èèèÖìûˆÍý˜Õÿ‰Îÿºáý×××µµµçççœÖÿŽÐÿÌ÷ûüý···ååå†ÍýŒÏÿ—Ñúó÷ùÕìû—Òý÷ûý¶¶¶ØØØÿÿÿ]´$tRNSÍùâö=ö;ö;ö;ö!;ö!;ö8ö8ö!8µ4Í‹bKGDˆHÇIDATÓcPQUS×ÐÔbd€mÐÕb‚ ¨éèiêëèè0C4t´X tôY!š:úlì&¦f:æ`-K+k[;{N—ƒŽ£“³‹«›­Ž»7P€‡×SÇËÆÛÇ(âçÏáÐ öñ Õ Š G€D"£¢cübE@ƈŠÅéÆ'$&ùÅŠC¬–ÔÕINIõ‹•‚9WZFOGÇ/ Îg`•ÓOGæ30È+¤)2 %e 'ˆ!oA¿TXtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/textfield.png000077500000000000000000000002311327442435500161500ustar00rootroot00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<+IDAT(ÏcøÏ€2ÐAÁÉÿø!PÁ<ðDÁÉA ¯#_üÇA\+Šv*³Îæ“IEND®B`‚Slic3r-1.3.0/var/tick.png000077500000000000000000000010311327442435500151110ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<«IDAT8˽“Ù.Ca…{ç8ïbnÕSBª†T'êè)E)ª§­V«CJ Ç¥jŽÄ” —ZÕ†g/¡ºü•hÂ…ÿÝ¿ÖÞûÛk þòÿn ^kâ[–ê¿2P­6ò¦c=úXHø*îGÊ`?xÔ…Ù{7¼7Vè¶Ô¨ðÙ¾%V¬Hyã¡Óq¦âNtn·¢Ò[Œ‡J2^²5†3¦ç³X¾,åS-OÆœÄo•ËÝâDñX•ÁxÁ–õž2Oܵ ì®rè]L`ñ}ûZîÆà¿³ƒÝT¡ÌU˜(²çSiˆýçÚÚÞPû£/Ìa:6Í–,A` É%S†=¾¨Þ[ ”Ž‹b[õa='šLýaÌW˜{ðÀ¶Âx¤ƒéD‰°î[ ˜u9JœÂ—BëGqzfGN“Ê0…ôosú£6¸"f¸ÂfhÖZR°’".—ú2H-[ {·îÈ(7Ãh Ê@`%E–ê[I”ÌWÓu3•¤eÔ+Í °’ÂÑlêGQ&û¥Ë'Ä °ž ÌÙ¿º‹ÎÉÊø—k|¾¢©CQ ä噳fÏ™;oþ‚…‹T NUU[¼dé²å+Ô5`žÑÔÒÖÑÑÖÕÃês«ù8‚¼Ç˜tEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/variable_layer_height.png000066400000000000000000000003211327442435500204660ustar00rootroot00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<cIDAT(ÏcüÏ€01Pª€D”ÿÿÇð ƒá/0þŰ—‘ñ?1&ü‡é…è„Á3D›úÙf¼E´ ‘ÿ¡é…˜÷œh¼ÿ£ë‡ÀÏD›`ûÿ'’Í  ×?Ę@0²ù]Uvx¿iIEND®B`‚Slic3r-1.3.0/var/wand.png000077500000000000000000000010721327442435500151150ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÌIDAT8Ë•’ÁK"aÆ¿SÔ!bteY¥ÃË!!º°¨)ê‚:ÖMìžE—]ö´†èÑ[Hç žZ©eˆÝA¦è TÆÊ¶,¸þ 5}Œ3‡ðÙo&Ú‹Žåá/óñ{Þ—‡!ÈS(gÎ1åln¥ßÛiÞÎX˜g£ÊéÛ†1KÓÓTzµòdÀƒ8÷“‰‚"Í©—‹P$Ç'ZµÝR‘K=/àôMV½JAû½­õ‹(¨8Ù¡ß'ÆMع/ØVQ‘^C½ä¡ýÍãdG£²ŒVuúä£ÉÎà$G¶ÓXÂÉ~š¦¡Ûíââk êõdüb8L¨ô’£U«‹ÅP¯×¡ª*šÍ&ª»Qh>BþF(ÃÓ7€•d§âT%‘H N£X,¢\.ãhgÉŸuùžq.’-Ó xž7dǃ@ €x<å<Š;ц;ar…ØMK|”Ýn7ü~?,‹¾u›m¼g¼crC> ™¾Éd…BÁ}>8Žƒþ‰ï™(èóÍa|è ˆD"Èçó=ò#L ™þÊÁ`¹\.— ^¯·GÉd2h·Ûp:…BCÉÿjµJ¥’QØ0²‡7õ³­VëвÎ?P ³µ¯vIEND®B`‚Slic3r-1.3.0/var/wrench.png000077500000000000000000000013461327442435500154560ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA¯È7Šé cHRMz&€„ú€èu0ê`:˜pœºQ<YPLTEÿÿÿžžžœœœ›››™™™››››››˜˜˜’’’ŠŠŠ–––‡‡‡•••“““………‹­ãˆ§Ú’’’„„„‚‚‚‰©á‰‰‰………ƒƒƒ‡©áˆˆˆ†††…§á]‰Òƒ¥ßQƒÕ¥ßOÓMÓI}Ñe‘ÙG{ÑW‡ÕEyÑäääîîî–––âââççç¹¹¹“““ÏÏÏŽŽŽŒŒŒÝÝÝÅÅŬ¬¬×××ÔÔÔÈÈȼ¼¼ºººÂÂÂÄÄÄÇÇÇÌÌÌÆÆÆÃÃÃÀÀÀœ¹ç˜¶æŒ©ØÒÒÒµµµœ·æ¼ÏïºÎâ{›Ò™·æ»Îî§À飽è³Èì¤ß˜´æºÍ閴å¹ç®ÆëyŸÞ”³æ¸Ì锳囷æ­ÄêxžÞyŸÝ·Ì풱䚶æ¬ÃêtœÞo—Û³È훸ç«ÃêsœÞ«Âê¨Àêq™ÜQƒÕK}Ñÿÿÿ ”(+tRNSpÖûûpõÖûÂûüÁÃûHþÖ’Ïûõp’þûÖp’÷#’É’ª’¬¬¯Ì¯Õ¯ÅXtYbKGDˆH£IDATÓc`€F&f$Àʦ­£‹,À®§o`ˆ,À¡mÄÉ`lÂà65ãá5·àƒñù,­¬mlí!\!a{{G'gQ10_ÜÅÕÍÝC‚ORJÌ—ñôòöñ••ƒi—÷ó V€ñCBÃÂ#"£” |åè˜Ø¸ø„D˜‚¤äÀ”Ô´tU¸ƒ22³B²sÔNVÎÍË×@ö„fA¡ETšoÇ”“tEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚Slic3r-1.3.0/var/zoom.png000077500000000000000000000012641327442435500151530ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<FIDAT8ËÒKHÔAÀñï̪-–ŠK¾C=Ø ¡CmÒfuîP–‰)D—êB§"ÂK»$A„ e¤¦t¶¨¤ð ô‚JŒÍZÿyuÙmüÁ0ø}f~3#œsLÞ²|!!|g-V©9­¼Që鎺³ýc¬`²ïT«™C8*¬—èô£5Þb¬F'âÎR!DÆÐ‹› ­kbâ^sPÈÌ!«½»²¾«¨ÊLocÂgÀע≣‡.=^uéíÖ˜ˆ¬ïê[ €¨ê65ôÞ¶FG´§• !§Ô P ä%wN5•\«Òq=(¡t@ȀѶ(t2)Õ§ "«L?Bþ2¬uXcY‘äV$¦ÆÚƒÔ&ý´çÍa]còÂt²¥€Ô<â *¡æÒã©QçÄ1àð}E )h˜’Y—­§§Ò„ê°Ž’…æ6` øDXr<:=UR½Íï÷ÌžáóûO®úÎ9žÝ8Ò*}òªV&b==h”é·ÖqÙÜ+;¶ËœâJT<ÆÔÓçüúò­øø­—³ËÀÈõÃA !CÎ:”§£¾Ì¼Êú}änAHÉ~0bM”ž¸36» ü+†/ç——ö”ƒøsóIĢ̾™àÉÀ«ÏEkÿ ž …óJ {ÊvíÄ!ùùé=_ßMÏyKªb]Àö½aµ¤{6W°03ñ>}¿1¢: ¡/8Žïçõy>ßoý??ø°‰ä#TœXÄ|´MâÃ-RvÆ,nŒãé1ùO1Óù¨Eàßirf&ŒÄFÐ@lôN.`ä9ŸQXõÖÒ» pg\œ{ÜÌä?~+E4 ìˆË â@Ê[ˤ¼:!9 –%)Ê…©x.Dñè ¸„èF8]ˆND3¢deHË'Ôñ]\³ÓNt¨q£P|½PŒSt jŒÊ™Ј2A>Ò"eƸ»í—®?F°>3eÞ¦h=,ßRÉA­$!d‘8¿ ¬…«Yû…9„7'@7©‚ç7D‚QË™©f‘ó5à”…ÂŽÖ§@ÅÀ±x&_‚m¶j°n-̶/–=e¶ÿ,‰ˆ³ŒZÄËbûTŽ\ÞyÙ—ÍGðu+ï–{!ÖV%E[Žÿ&øóתÍ+Cçáýú0o¦á÷2A ÜQÛ{`æ:N˜Ù¾:ØZpÁÛ…Hy ³’;{`žÐdSÈTùy©W‰F ·CTÅ>üÿ;/í²Öí좓IEND®B`‚Slic3r-1.3.0/var/zoom_out.png000077500000000000000000000013041327442435500160350ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<VIDAT8Ë¥’ïkRQÇý‚`A£ nozѨK?!˜eMÓmêm9%MÙ²Øâî™Ã±&5œ‹Ídå^´lxusnSA¯/¢ ** ºÕ­(6ZD·§sàŵôâ‡Ãóý>ßç9G²ÿá× 5’lØcÃf¾± lÈ"†|nˆŠÍ^­'ÿiÀ†¶RÄ̱![>Dç¯QDί'rƒ::;H±ÙŠ›òjle pg,.Ž\¥ Z„q¡B¬Íx5®Œ·žK¹•’$²bÈ+M,*$Gmˆ³ˆÄi„Q™îW³I·2V&Áa¾h QQ¢UŸÅ8…QtÕÐ)·Š—”Â!?DáîÇ~ëúsœ¨ §Ht+ˆT¯ZŽ4 YŸŽ ±ð¤hÖ,ÞYÔý9‘t)¥ùë>; Å#(D¡ý{k |sœ€¯G,°¤Õâ\Ÿ6oƒë7‚Ä`Ö§Gï¬ÃK¬Dè6,þ’›€¥É8|¾w£#°ðûU뤙Kµäô—ö¨ñ3®Aì.׋߮X £Ž ’4ÙwÀ6åÑp©^Ë8÷Ñã{ˆx»œˆŸ«¦Ó}uÂÜÝ6xYðÁÓé‹ÀœWíæ­’¯Ì\ØO"bŒKÉãe1Î!Þ±÷c¢[ 'zàõÃðf>]µî"–-üÑS»ŒéþƒðlÆ܃<Ï^†¼ß = âɲ 0·íÛŒ³æÇÚan¬2^=D›È÷Ë6ÀÜ´‘Æ`cŒw)Ðä« iÓJ|ÿ‘r¿£RØÉãIEND®B`‚Slic3r-1.3.0/xs/000077500000000000000000000000001327442435500133155ustar00rootroot00000000000000Slic3r-1.3.0/xs/Build.PL000066400000000000000000000231521327442435500146140ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use warnings; use Config; use Devel::CheckLib; use ExtUtils::CppGuess; use Module::Build::WithXSpp; my $cpp_guess = ExtUtils::CppGuess->new; my $mswin = $^O eq 'MSWin32'; my $linux = $^O eq 'linux'; # prevent an annoying concatenation warning by Devel::CheckLib $ENV{LD_RUN_PATH} //= ""; # _GLIBCXX_USE_C99 : to get the long long type for g++ # HAS_BOOL : stops Perl/lib/CORE/handy.h from doing "# define bool char" for MSVC # NOGDI : prevents inclusion of wingdi.h which defines functions Polygon() and Polyline() in global namespace # BOOST_ASIO_DISABLE_KQUEUE : prevents a Boost ASIO bug on OS X: https://svn.boost.org/trac/boost/ticket/5339 my @cflags = qw(-D_GLIBCXX_USE_C99 -DHAS_BOOL -DNOGDI -DSLIC3RXS -DBOOST_ASIO_DISABLE_KQUEUE -Dexprtk_disable_rtl_io_file -Dexprtk_disable_return_statement -Dexprtk_disable_rtl_vecops -Dexprtk_disable_string_capabilities -Dexprtk_disable_enhanced_features); if ($cpp_guess->is_gcc) { # GCC is pedantic with c++11 std, so undefine strict ansi to get M_PI back push @cflags, qw(-U__STRICT_ANSI__); } # std=c++11 Enforce usage of C++11 (required now). Minimum compiler supported: gcc 4.9, clang 3.3, MSVC 14.0 push @cflags, qw(-std=c++11); my @ldflags = (); if ($linux && (defined $ENV{SLIC3R_STATIC} && $ENV{SLIC3R_STATIC})) { push @ldflags, qw(-static-libgcc -static-libstdc++); if ($ENV{TRAVIS}) { # On the build server, link to the actual static libraries to make sure we get them in the list. push @ldflags, qw(/usr/lib/gcc/x86_64-linux-gnu/4.9/libstdc++.a /usr/lib/gcc/x86_64-linux-gnu/4.9/libgcc.a); } # ExtUtils::CppGuess has a hard-coded -lstdc++, so we filter it out { no strict 'refs'; no warnings 'redefine'; my $func = "ExtUtils::CppGuess::_get_lflags"; my $orig = *$func{CODE}; *{$func} = sub { my $lflags = $orig->(@_); $lflags =~ s/\s*-lstdc\+\+//; return $lflags; }; } } if ($^O eq 'darwin') { push @cflags, qw(-stdlib=libc++); push @ldflags, qw(-framework IOKit -framework CoreFoundation -lc++); # Due to a bug/misconfiguration/stupidity, boost 1.52 and libc++ don't like each # other much: a compilation error "Constexpr function never produces a constant # expression" pops up when trying to compile anything that uses # boost/chrono/duration.hpp (namely boost/thread for us). This is a workaround # that prevents this from happening, not needed with newer Boost versions. # See here for more details: https://svn.boost.org/trac/boost/ticket/7671 push @cflags, qw(-DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE); # ExtUtils::CppGuess has a hard-coded -lstdc++, so we filter it out { no strict 'refs'; no warnings 'redefine'; my $func = "ExtUtils::CppGuess::_get_lflags"; my $orig = *$func{CODE}; *{$func} = sub { my $lflags = $orig->(@_); $lflags =~ s/\s*-lstdc\+\+//; return $lflags; }; } } if ($mswin) { # In case windows.h is included, we don't want the min / max macros to be active. # If is included, we want the #defines to be active (M_PI etc.) push @cflags, qw(-DNOMINMAX -D_USE_MATH_DEFINES); } my @INC = qw(-Isrc/libslic3r); my @LIBS = $cpp_guess->is_msvc ? qw(-LIBPATH:src/libslic3r) : qw(-Lsrc/libslic3r); # search for Boost in a number of places my @boost_include = (); if (defined $ENV{BOOST_INCLUDEDIR}) { push @boost_include, $ENV{BOOST_INCLUDEDIR} } elsif (defined $ENV{BOOST_DIR}) { # User might have provided a path relative to the Build.PL in the main directory foreach my $subdir ($ENV{BOOST_DIR}, "../$ENV{BOOST_DIR}", "$ENV{BOOST_DIR}/include", "../$ENV{BOOST_DIR}/include") { if (-d $subdir) { push @boost_include, $subdir; } } die "Invalid BOOST_DIR: no such directory\n" if !@boost_include; } else { # Boost library was not defined by the environment. # Try to guess at some default paths. if ($mswin) { for my $path (glob('C:\dev\boost*\include'), glob ('C:\boost*\include')) { push @boost_include, $path; } if (! @boost_include) { # No boost\include. Try to include the boost root. for my $path (glob('C:\dev\boost*'), glob ('C:\boost*')) { push @boost_include, $path; } } } else { push @boost_include, grep { -d $_ } qw(/opt/local/include /usr/local/include /opt/include /usr/include); } } my @boost_libs = (); if (defined $ENV{BOOST_LIBRARYPATH}) { push @boost_libs, $ENV{BOOST_LIBRARYPATH} } elsif (defined $ENV{BOOST_DIR}) { # User might have provided a path relative to the Build.PL in the main directory foreach my $subdir ("$ENV{BOOST_DIR}/stage/lib", "../$ENV{BOOST_DIR}/stage/lib") { if (-d $subdir) { push @boost_libs, $subdir; } } die "Invalid BOOST_DIR: no such directory\n" if !@boost_libs; } else { # Boost library was not defined by the environment. # Try to guess at some default paths. if ($mswin) { for my $path ( glob('C:\dev\boost*\lib'), glob ('C:\boost*\lib'), glob('C:\dev\boost*\stage\lib'), glob ('C:\boost*\stage\lib')) { push @boost_libs, $path; } } else { push @boost_libs, grep { -d $_ } qw(/opt/local/lib /usr/local/lib /opt/lib /usr/lib /lib); } } # In order to generate the -l switches we need to know how Boost libraries are named my $have_boost = 0; my @boost_libraries = qw(system thread filesystem); # we need these # check without explicit lib path (works on Linux) if (! $mswin) { $have_boost = 1 if check_lib( lib => [ map "boost_${_}", @boost_libraries ], ); } if (!$ENV{SLIC3R_STATIC} && $have_boost) { # The boost library was detected by check_lib on Linux. push @LIBS, map "-lboost_${_}", @boost_libraries; } else { # Either static linking, or check_lib could not be used to find the boost libraries. my $lib_prefix = 'libboost_'; my $lib_ext = $Config{lib_ext}; PATH: foreach my $path (@boost_libs) { # Try to find the boost system library. my @files = glob "$path/${lib_prefix}system*$lib_ext"; next if !@files; if ($files[0] =~ /${lib_prefix}system([^.]*)$lib_ext$/) { # Suffix contains the version number, the build type etc. my $suffix = $1; # Verify existence of all required boost libraries at $path. for my $lib (map "${lib_prefix}${_}${suffix}${lib_ext}", @boost_libraries) { # If the library file does not exist, try next library path. -f "$path/$lib" or next PATH; } if (! $cpp_guess->is_msvc) { # Test the correctness of boost libraries by linking them to a minimal C program. check_lib( lib => [ map "boost_${_}${suffix}", @boost_libraries ], INC => join(' ', map "-I$_", @INC, @boost_include), LIBS => "-L$path", ) or next; } push @INC, (map " -I$_", @boost_include); # TODO: only use the one related to the chosen lib path if ($ENV{SLIC3R_STATIC} || $cpp_guess->is_msvc) { push @LIBS, map "${path}/${lib_prefix}$_${suffix}${lib_ext}", @boost_libraries; } else { push @LIBS, " -L$path", (map " -lboost_$_$suffix", @boost_libraries); } $have_boost = 1; last; } } } push @cflags, '-DBOOST_LIBS' if $have_boost; die <<'EOF' if !$have_boost; Slic3r requires the Boost libraries. Please make sure they are installed. If they are installed, this script should be able to locate them in several standard locations. If this is not the case, you might want to supply their path through the BOOST_INCLUDEPATH and BOOST_LIBRARYPATH environment variables: BOOST_INCLUDEPATH=/usr/local/include BOOST_LIBRARYPATH=/usr/lib perl Build.PL If you just compiled Boost in its source directory without installing it in the system you can just provide the BOOST_DIR variable pointing to that directory. EOF if ($ENV{SLIC3R_DEBUG}) { # only on newer GCCs: -ftemplate-backtrace-limit=0 push @cflags, '-DSLIC3R_DEBUG'; push @cflags, $cpp_guess->is_msvc ? '-Gd' : '-g'; } else { # Disable asserts in the release builds. push @cflags, '-DNDEBUG', '-O'; } if ($cpp_guess->is_gcc) { # our templated XS bindings cause undefined-var-template warnings push @cflags, qw(-Wno-undefined-var-template); } my $build = Module::Build::WithXSpp->new( module_name => 'Slic3r::XS', dist_abstract => 'XS code for Slic3r', build_requires => {qw( ExtUtils::ParseXS 3.35 ExtUtils::Typemaps 1.00 ExtUtils::Typemaps::Default 1.05 ExtUtils::XSpp 0.18 Module::Build 0.3601 Test::More 0 )}, configure_requires => {qw( ExtUtils::CppGuess 0.07 Module::Build 0.38 Module::Build::WithXSpp 0.13 )}, extra_compiler_flags => [ @INC, @cflags ], extra_linker_flags => [ @LIBS, @ldflags ], # Provides extra C typemaps that are auto-merged extra_typemap_modules => { 'ExtUtils::Typemaps::Basic' => '1.05', }, # for MSVC builds early_includes => [qw( cstring cstdlib ostream sstream libslic3r/GCodeSender.hpp )] ); $build->create_build_script; __END__ Slic3r-1.3.0/xs/MANIFEST000066400000000000000000000136661327442435500144620ustar00rootroot00000000000000Build.PL lib/Slic3r/XS.pm libslic3r.doxygen MANIFEST This list of files src/admesh/connect.c src/admesh/normals.c src/admesh/shared.c src/admesh/stl.h src/admesh/stl_io.c src/admesh/stlinit.c src/admesh/util.c src/boost/nowide/args.hpp src/boost/nowide/cenv.hpp src/boost/nowide/config.hpp src/boost/nowide/convert.hpp src/boost/nowide/cstdio.hpp src/boost/nowide/cstdlib.hpp src/boost/nowide/filebuf.hpp src/boost/nowide/fstream.hpp src/boost/nowide/integration/filesystem.hpp src/boost/nowide/iostream.cpp src/boost/nowide/iostream.hpp src/boost/nowide/stackstring.hpp src/boost/nowide/system.hpp src/boost/nowide/utf8_codecvt.hpp src/boost/nowide/windows.hpp src/clipper.cpp src/clipper.hpp src/expat/ascii.h src/expat/asciitab.h src/expat/COPYING src/expat/expat.h src/expat/expat_config.h src/expat/expat_external.h src/expat/iasciitab.h src/expat/internal.h src/expat/latin1tab.h src/expat/nametab.h src/expat/README src/expat/utf8tab.h src/expat/xmlparse.c src/expat/xmlrole.c src/expat/xmlrole.h src/expat/xmltok.c src/expat/xmltok.h src/expat/xmltok_impl.h src/expat/xmltok_impl.inc src/expat/xmltok_ns.inc src/libslic3r/BoundingBox.cpp src/libslic3r/BoundingBox.hpp src/libslic3r/BridgeDetector.cpp src/libslic3r/BridgeDetector.hpp src/libslic3r/ClipperUtils.cpp src/libslic3r/ClipperUtils.hpp src/libslic3r/Config.cpp src/libslic3r/Config.hpp src/libslic3r/ExPolygon.cpp src/libslic3r/ExPolygon.hpp src/libslic3r/ExPolygonCollection.cpp src/libslic3r/ExPolygonCollection.hpp src/libslic3r/Extruder.cpp src/libslic3r/Extruder.hpp src/libslic3r/ExtrusionEntity.cpp src/libslic3r/ExtrusionEntity.hpp src/libslic3r/ExtrusionEntityCollection.cpp src/libslic3r/ExtrusionEntityCollection.hpp src/libslic3r/Fill/Fill.cpp src/libslic3r/Fill/Fill.hpp src/libslic3r/Fill/Fill3DHoneycomb.cpp src/libslic3r/Fill/Fill3DHoneycomb.hpp src/libslic3r/Fill/FillConcentric.cpp src/libslic3r/Fill/FillConcentric.hpp src/libslic3r/Fill/FillHoneycomb.cpp src/libslic3r/Fill/FillHoneycomb.hpp src/libslic3r/Fill/FillPlanePath.cpp src/libslic3r/Fill/FillPlanePath.hpp src/libslic3r/Fill/FillRectilinear.cpp src/libslic3r/Fill/FillRectilinear.hpp src/libslic3r/Flow.cpp src/libslic3r/Flow.hpp src/libslic3r/GCode.cpp src/libslic3r/GCode.hpp src/libslic3r/GCode/CoolingBuffer.cpp src/libslic3r/GCode/CoolingBuffer.hpp src/libslic3r/GCode/SpiralVase.cpp src/libslic3r/GCode/SpiralVase.hpp src/libslic3r/GCodeReader.cpp src/libslic3r/GCodeReader.hpp src/libslic3r/GCodeSender.cpp src/libslic3r/GCodeSender.hpp src/libslic3r/GCodeTimeEstimator.cpp src/libslic3r/GCodeTimeEstimator.hpp src/libslic3r/GCodeWriter.cpp src/libslic3r/GCodeWriter.hpp src/libslic3r/Geometry.cpp src/libslic3r/Geometry.hpp src/libslic3r/IO.cpp src/libslic3r/IO.hpp src/libslic3r/IO/AMF.cpp src/libslic3r/IO/TMF.hpp src/libslic3r/IO/TMF.cpp src/libslic3r/Layer.cpp src/libslic3r/Layer.hpp src/libslic3r/LayerRegion.cpp src/libslic3r/LayerRegionFill.cpp src/libslic3r/LayerHeightSpline.hpp src/libslic3r/LayerHeightSpline.cpp src/libslic3r/libslic3r.h src/libslic3r/Line.cpp src/libslic3r/Line.hpp src/libslic3r/Model.cpp src/libslic3r/Model.hpp src/libslic3r/MotionPlanner.cpp src/libslic3r/MotionPlanner.hpp src/libslic3r/MultiPoint.cpp src/libslic3r/MultiPoint.hpp src/libslic3r/PerimeterGenerator.cpp src/libslic3r/PerimeterGenerator.hpp src/libslic3r/PlaceholderParser.cpp src/libslic3r/PlaceholderParser.hpp src/libslic3r/Point.cpp src/libslic3r/Point.hpp src/libslic3r/Polygon.cpp src/libslic3r/Polygon.hpp src/libslic3r/Polyline.cpp src/libslic3r/Polyline.hpp src/libslic3r/PolylineCollection.cpp src/libslic3r/PolylineCollection.hpp src/libslic3r/Print.cpp src/libslic3r/Print.hpp src/libslic3r/PrintConfig.cpp src/libslic3r/PrintConfig.hpp src/libslic3r/PrintObject.cpp src/libslic3r/PrintRegion.cpp src/libslic3r/SLAPrint.cpp src/libslic3r/SLAPrint.hpp src/libslic3r/SupportMaterial.hpp src/libslic3r/Surface.cpp src/libslic3r/Surface.hpp src/libslic3r/SurfaceCollection.cpp src/libslic3r/SurfaceCollection.hpp src/libslic3r/SVG.cpp src/libslic3r/SVG.hpp src/libslic3r/TriangleMesh.cpp src/libslic3r/TriangleMesh.hpp src/libslic3r/utils.cpp src/libslic3r/Zip/ZipArchive.cpp src/libslic3r/Zip/ZipArchive.hpp src/miniz/miniz.h src/perlglue.cpp src/poly2tri/common/shapes.cc src/poly2tri/common/shapes.h src/poly2tri/common/utils.h src/poly2tri/poly2tri.h src/poly2tri/sweep/advancing_front.cc src/poly2tri/sweep/advancing_front.h src/poly2tri/sweep/cdt.cc src/poly2tri/sweep/cdt.h src/poly2tri/sweep/sweep.cc src/poly2tri/sweep/sweep.h src/poly2tri/sweep/sweep_context.cc src/poly2tri/sweep/sweep_context.h src/polypartition.cpp src/polypartition.h src/ppport.h src/slic3r/GUI/3DScene.cpp src/slic3r/GUI/3DScene.hpp src/slic3r/GUI/GUI.cpp src/slic3r/GUI/GUI.hpp src/tiny_obj_loader.h src/xsinit.h t/01_trianglemesh.t t/03_point.t t/04_expolygon.t t/05_surface.t t/06_polygon.t t/07_extrusionpath.t t/08_extrusionloop.t t/09_polyline.t t/10_line.t t/11_clipper.t t/12_extrusionpathcollection.t t/13_polylinecollection.t t/14_geometry.t t/15_config.t t/16_flow.t t/17_boundingbox.t t/18_motionplanner.t t/19_model.t t/20_print.t t/21_gcode.t t/22_exception.t t/23_3mf.t t/models/3mf/box.3mf t/models/3mf/chess.3mf t/models/3mf/gimblekeychain.3mf t/models/amf/FaceColors.amf.xml t/models/stl/spikey_top.stl t/inc/22_config_bad_config_options.ini xsp/BoundingBox.xsp xsp/BridgeDetector.xsp xsp/Clipper.xsp xsp/Config.xsp xsp/ExPolygon.xsp xsp/ExPolygonCollection.xsp xsp/Extruder.xsp xsp/ExtrusionEntityCollection.xsp xsp/ExtrusionLoop.xsp xsp/ExtrusionPath.xsp xsp/Filler.xsp xsp/Flow.xsp xsp/GCode.xsp xsp/GCodeSender.xsp xsp/GCodeTimeEstimator.xsp xsp/GCodeWriter.xsp xsp/Geometry.xsp xsp/GUI.xsp xsp/GUI_3DScene.xsp xsp/Layer.xsp xsp/LayerHeightSpline.xsp xsp/Line.xsp xsp/Model.xsp xsp/MotionPlanner.xsp xsp/my.map xsp/mytype.map xsp/PerimeterGenerator.xsp xsp/PlaceholderParser.xsp xsp/Point.xsp xsp/Polygon.xsp xsp/Polyline.xsp xsp/PolylineCollection.xsp xsp/Print.xsp xsp/SLAPrint.xsp xsp/SupportMaterial.xsp xsp/Surface.xsp xsp/SurfaceCollection.xsp xsp/TriangleMesh.xsp xsp/typemap.xspt xsp/XS.xsp Slic3r-1.3.0/xs/MANIFEST.SKIP000066400000000000000000000023031327442435500152110ustar00rootroot00000000000000 #!start included /Library/Perl/Updates/5.12.4/ExtUtils/MANIFEST.SKIP # Avoid version control files. \bRCS\b \bCVS\b \bSCCS\b ,v$ \B\.svn\b \B\.git\b \B\.gitignore\b \b_darcs\b \B\.cvsignore$ # Avoid VMS specific MakeMaker generated files \bDescrip.MMS$ \bDESCRIP.MMS$ \bdescrip.mms$ # Avoid Makemaker generated and utility files. \bMANIFEST\.bak \bMakefile$ \bblib/ \bMakeMaker-\d \bpm_to_blib\.ts$ \bpm_to_blib$ \bblibdirs\.ts$ # 6.18 through 6.25 generated this # Avoid Module::Build generated and utility files. \bBuild$ \b_build/ \bBuild.bat$ \bBuild.COM$ \bBUILD.COM$ \bbuild.com$ # Avoid temp and backup files. ~$ \.old$ \#$ \b\.# \.bak$ \.tmp$ \.# \.rej$ # Avoid OS-specific files/dirs # Mac OSX metadata \B\.DS_Store # Mac OSX SMB mount metadata files \B\._ # Avoid Devel::Cover and Devel::CoverX::Covered files. \bcover_db\b \bcovered\b # Avoid MYMETA files ^MYMETA\. #!end included /Library/Perl/Updates/5.12.4/ExtUtils/MANIFEST.SKIP # Avoid configuration metadata file ^MYMETA\. # Avoid Module::Build generated and utility files. \bBuild$ \bBuild.bat$ \b_build \bBuild.COM$ \bBUILD.COM$ \bbuild.com$ ^MANIFEST\.SKIP # Avoid archives of this distribution \bSlic3r-XS-[\d\.\_]+ ^assertlib Slic3r-1.3.0/xs/lib/000077500000000000000000000000001327442435500140635ustar00rootroot00000000000000Slic3r-1.3.0/xs/lib/Slic3r/000077500000000000000000000000001327442435500152225ustar00rootroot00000000000000Slic3r-1.3.0/xs/lib/Slic3r/XS.pm000066400000000000000000000147261327442435500161240ustar00rootroot00000000000000package Slic3r::XS; use warnings; use strict; our $VERSION = '0.01'; use Carp qw(); use XSLoader; XSLoader::load(__PACKAGE__, $VERSION); package Slic3r::Line; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; package Slic3r::Point; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; package Slic3r::Point3; use overload '@{}' => sub { [ $_[0]->x, $_[0]->y, $_[0]->z ] }, #, 'fallback' => 1; sub pp { my ($self) = @_; return [ @$self ]; } package Slic3r::Pointf; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; package Slic3r::Pointf3; use overload '@{}' => sub { [ $_[0]->x, $_[0]->y, $_[0]->z ] }, #, 'fallback' => 1; sub pp { my ($self) = @_; return [ @$self ]; } package Slic3r::ExPolygon; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; package Slic3r::Polyline; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; package Slic3r::Polyline::Collection; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; package Slic3r::Polygon; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; package Slic3r::ExPolygon::Collection; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; package Slic3r::ExtrusionPath::Collection; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; sub new { my ($class, @paths) = @_; my $self = $class->_new; $self->append(@paths); return $self; } package Slic3r::ExtrusionLoop; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; sub new_from_paths { my ($class, @paths) = @_; my $loop = $class->new; $loop->append($_) for @paths; return $loop; } package Slic3r::ExtrusionPath; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; sub new { my ($class, %args) = @_; return $class->_new( $args{polyline}, # required $args{role}, # required $args{mm3_per_mm} // die("Missing required mm3_per_mm in ExtrusionPath constructor"), $args{width} // -1, $args{height} // -1, ); } sub clone { my ($self, %args) = @_; return __PACKAGE__->_new( $args{polyline} // $self->polyline, $args{role} // $self->role, $args{mm3_per_mm} // $self->mm3_per_mm, $args{width} // $self->width, $args{height} // $self->height, ); } package Slic3r::Filler; sub fill_surface { my ($self, $surface, %args) = @_; $self->set_density($args{density}) if defined($args{density}); $self->set_dont_connect($args{dont_connect}) if defined($args{dont_connect}); $self->set_dont_adjust($args{dont_adjust}) if defined($args{dont_adjust}); $self->set_complete($args{complete}) if defined($args{complete}); return $self->_fill_surface($surface); } package Slic3r::Flow; sub new { my ($class, %args) = @_; my $self = $class->_new( @args{qw(width height nozzle_diameter)}, ); $self->set_bridge($args{bridge} // 0); return $self; } sub new_from_width { my ($class, %args) = @_; return $class->_new_from_width( @args{qw(role width nozzle_diameter layer_height bridge_flow_ratio)}, ); } sub new_from_spacing { my ($class, %args) = @_; return $class->_new_from_spacing( @args{qw(spacing nozzle_diameter layer_height bridge)}, ); } package Slic3r::Surface; sub new { my ($class, %args) = @_; # defensive programming: make sure no negative bridge_angle is supplied die "Error: invalid negative bridge_angle\n" if defined $args{bridge_angle} && $args{bridge_angle} < 0; return $class->_new( $args{expolygon} // (die "Missing required expolygon\n"), $args{surface_type} // (die "Missing required surface_type\n"), $args{thickness} // -1, $args{thickness_layers} // 1, $args{bridge_angle} // -1, $args{extra_perimeters} // 0, ); } sub clone { my ($self, %args) = @_; return (ref $self)->_new( delete $args{expolygon} // $self->expolygon, delete $args{surface_type} // $self->surface_type, delete $args{thickness} // $self->thickness, delete $args{thickness_layers} // $self->thickness_layers, delete $args{bridge_angle} // $self->bridge_angle, delete $args{extra_perimeters} // $self->extra_perimeters, ); } package Slic3r::Surface::Collection; use overload '@{}' => sub { $_[0]->arrayref }, 'fallback' => 1; sub new { my ($class, @surfaces) = @_; my $self = $class->_new; $self->append($_) for @surfaces; return $self; } package Slic3r::GUI::_3DScene::GLVertexArray; sub CLONE_SKIP { 1 } package main; for my $class (qw( Slic3r::BridgeDetector Slic3r::Config Slic3r::Config::Full Slic3r::Config::GCode Slic3r::Config::Print Slic3r::Config::PrintObject Slic3r::Config::PrintRegion Slic3r::Config::Static Slic3r::ExPolygon Slic3r::ExPolygon::Collection Slic3r::Extruder Slic3r::ExtrusionLoop Slic3r::ExtrusionPath Slic3r::ExtrusionPath::Collection Slic3r::Filler Slic3r::Flow Slic3r::GCode Slic3r::GCode::AvoidCrossingPerimeters Slic3r::GCode::OozePrevention Slic3r::GCode::PlaceholderParser Slic3r::GCode::Wipe Slic3r::GCode::Writer Slic3r::Geometry::BoundingBox Slic3r::Geometry::BoundingBoxf Slic3r::Geometry::BoundingBoxf3 Slic3r::Layer Slic3r::Layer::Region Slic3r::Layer::Support Slic3r::LayerHeightSpline Slic3r::Line Slic3r::Linef3 Slic3r::Model Slic3r::Model::Instance Slic3r::Model::Material Slic3r::Model::Object Slic3r::Model::Volume Slic3r::Point Slic3r::Point3 Slic3r::Pointf Slic3r::Pointf3 Slic3r::Polygon Slic3r::Polyline Slic3r::Polyline::Collection Slic3r::Print Slic3r::Print::Object Slic3r::Print::Region Slic3r::Print::State Slic3r::SlicingAdaptive Slic3r::Surface Slic3r::Surface::Collection Slic3r::TriangleMesh )) { no strict 'refs'; my $ref_class = $class . "::Ref"; eval "package $ref_class; our \@ISA = '$class'; sub DESTROY {};"; } 1; Slic3r-1.3.0/xs/libslic3r.doxygen000066400000000000000000003226111327442435500166070ustar00rootroot00000000000000# Doxyfile 1.8.14 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = "libslic3r" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "Library for generating gcode from 3d models" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = "../var/Slic3r_192px_transparent.png" # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = "./doc.libslic3r" # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: # Fortran. In the later case the parser tries to guess whether the code is fixed # or free formatted code, this is the default for Fortran type files), VHDL. For # instance to make doxygen treat .inc files as Fortran files (default is PHP), # and .f files as C (default is Fortran), use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. # Minimum value: 0, maximum value: 99, default value: 0. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO, these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete # parameter documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. # The default value is: NO. WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = src/libslic3r # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: http://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, # *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, # *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.idl \ *.ddl \ *.odl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.cs \ *.d \ *.inc \ *.m \ *.markdown \ *.md \ *.mm \ *.dox \ *.py \ *.pyw \ *.f90 \ *.f95 \ *.f03 \ *.f08 \ *.f \ *.for \ *.tcl \ *.ucf \ *.qsf # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to YES can help to show when doxygen was last run and thus if the # documentation is up to date. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via Javascript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have Javascript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: http://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the master .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from http://www.mathjax.org before deployment. # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /