pax_global_header00006660000000000000000000000064126605167110014517gustar00rootroot0000000000000052 comment=eaa2a20e23fee8697a47336f1502127854748086 Plinth-0.8.1/000077500000000000000000000000001266051671100127635ustar00rootroot00000000000000Plinth-0.8.1/.coveragerc000066400000000000000000000001521266051671100151020ustar00rootroot00000000000000# .coveragerc -- specifies execution options for coverage.py [run] branch = True [report] precision = 2 Plinth-0.8.1/.gitignore000066400000000000000000000004271266051671100147560ustar00rootroot00000000000000*.pyc *.py.bak *.swp *.tiny.css data/var/log/plinth/*.log data/var/lib/plinth/*.sqlite3 data/var/lib/plinth/sessions/* data/var/run/*.pid doc/*.pdf doc/*.html doc/plinth.1 \#* .#* *~ predepend build/ .emacs.desktop* *.egg-info/ dist/ .coverage plinth/tests/coverage/report/ *.mo Plinth-0.8.1/.travis.yml000066400000000000000000000013271266051671100150770ustar00rootroot00000000000000# Travis-CI configuration file for Plinth language: python python: - "3.4" env: - DJANGO_VERSION=">=1.7.0,<1.8.0" - DJANGO_VERSION=">=1.8.0,<1.9.0" - DJANGO_VERSION=">=1.9.0" # Debian packages required before_install: - sudo apt-get update -qq - sudo apt-get install augeas-tools gir1.2-packagekitglib-1.0 # Command to install dependencies install: - pip install Django$DJANGO_VERSION - pip install coverage==3.7 - pip install "pgi>=0.0.10.1" - pip install -r requirements.txt # Command to run tests script: python3 setup.py test notifications: email: on_success: change on_failure: always irc: channels: - "irc.oftc.net#freedombox" on_success: always on_failure: always Plinth-0.8.1/COPYING000066400000000000000000002304171266051671100140250ustar00rootroot00000000000000# License to Copy Plinth Plinth is Copyright 2011, 2012, 2013, 2014, 2015 Plinth Authors. See Git log in the source repository for a full list of authors. It is distributed under the GNU Affero General Public License, Version 3 or later. A copy of AGPLv3 is available [from the Free Software Foundation](http://www.gnu.org/licenses/agpl.html). In addition, the documentation to this software is distributed under a Creative Commons Attribution-ShareAlike 3.0 Unported, Version 3 license. This CC-By-SA license is available in both [full](http://creativecommons.org/licenses/by-sa/3.0/legalcode) and [summarized](http://creativecommons.org/licenses/by-sa/3.0/) versions from Creative Commons. The documentation to this software is also distributed under the [GNU Free Documentation License](http://www.gnu.org/licenses/fdl.html), version 1.3 or later. ## GNU Affero General Public License, Version 3 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 . ## Creative Commons Attribution-ShareAlike 3.0 Unported License THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. 1. Definitions 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. 3. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. 4. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. 5. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. 6. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. 7. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. 8. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. 9. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. 10. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. 11. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, 4. to Distribute and Publicly Perform Adaptations. 5. For the avoidance of doubt: 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. 2. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. 3. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. 4. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. 5. Representations, Warranties and Disclaimer UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. Termination 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 8. Miscellaneous 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. ## GNU Free Documentation License, Version 1.3 GNU Free Documentation License Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements". 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. 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, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. Plinth-0.8.1/HACKING000066400000000000000000000122161266051671100137540ustar00rootroot00000000000000# Hacking ## Installing for Development 1. Instead of running "setup.py install" after every source modification, run the following command: $ sudo python3 setup.py develop This will install the python package in a special development mode. Run it normally. Any updates to the code (and core package data files) do not require re-installation after every modification. CherryPy web server also monitors changes to the source files and reloads the server as soon as a file is modified. Hence it is usually sufficient to modify the source and refresh the browser page to see the changes. 2. Plinth also support running without installing (as much as possible). Simply run it as: $ sudo ./run --no-daemon --debug In this mode, Plinth runs in working directory without need for installation. It uses the plinth.conf config file in the working directory if no regular config file (/etc/plinth/plinth.conf) is found. It creates all that data and runtime files in data/var/*. *Note:* This mode is supported only in a limited manner. The following are the unknown issues with it: 1. Help pages are also not built. Run 'make -C doc' manually. 2. Actions do not work when running as normal user without 'sudo' prefix. You need to add 'actions' directory to be allowed for 'sudo' commands. See data/etc/sudoers.d/plinth for a hint. ## Running Tests 1. Run tests: $ python3 setup.py test ## Running the Test Coverage Analysis 1. Run the coverage tool: $ python3 setup.py test_coverage Invoking this command generates a binary-format '.coverage' data file in the top-level project directory which is recreated with each run, and writes a set of HTML and other supporting files which comprise the browsable coverage report to the 'plinth/tests/coverage/report' directory. Index.html presents the coverage summary, broken down by module. Data columns can be sorted by clicking on the column header or by using mnemonic hot-keys specified in the keyboard widget in the upper-right corner of the page. Clicking on the name of a particular source file opens a page that displays the contents of that file, with color-coding in the left margin to indicate which statements or branches were executed via the tests (green) and which statements or branches were not executed (red). ## Testing Inside a Virtual Machine 1. Checkout source on the host. 2. Share the source folder and mount it on virtual machine. This could be done over NFS, SSH-fs or 'Shared Folders' feature on VirtualBox. 3. Run 'setup.py develop' or 'setup.py install' as described above on guest machine. 4. Access the guest machine's Plinth web UI from host after setting bridging or NATing for guest virtual machine. ## Building the Documentation Separately Plinth man page is built from DocBook source in the doc/ directory. FreedomBox manual is downloaded from the wiki is also available there. Both these are build during the installation process. 1. To build the documentation separately, run: $ make -C doc ## Repository Plinth is available from [GitHub](https://github.com/freedombox/plinth). ## Bugs & TODO You can report bugs on Plinth's [issue tracker](https://github.com/freedombox/Plinth/issues). For new developers looking to start contributing to the project, this is a good place to pick up a task to work on. Tasks that are labeled as 'beginner' are easy to work on and have a known solution. Also, other developers are ready to guide you on the implementation for such tasks. Feel free to pickup a task from the issue by announcing it on the issue or by creating a new issue for whatever task you are going to work on. ## Submitting Your Changes Once you have completed implementing the solution, request a merge into the upstream. Pacthes can be submitted in either of the two ways: - Post your patches to the FreedomBox discuss mailing list. Look at Git documention on how to create submittable patches out of your commits and post them to the list. - Create a pull request on Github. For information on placing a merge request, consult GitHub documentation. ## Coding Practices Plinth confirms to [PEP 8](http://www.python.org/dev/peps/pep-0008/) Python coding standard. You should check your code with *pep8* and *pylint* tools before placing a merge request. ## Internationalization Every module should `from gettext import gettext as _` and wrap displayed strings with _(). We don't have the language stuff in place yet (we have no translation files), but we need to put the infrastructure in place for it from the start. Use it like this: log.error(_("Couldn't import %s: %s"), path, e) ## Translations Introduce yourself on #freedombox IRC (irc.debian.org) and start translating the PO file from your language directory from: Plinth/plinth/locale/ Introducing yourself is important since some work may have been done already on Debian translators discussion lists and Transifex localization platform. https://www.transifex.com/freedombox/ https://www.debian.org/MailingLists/subscribe For more information on translations: https://wiki.debian.org/FreedomBox/Translate Plinth-0.8.1/INSTALL000066400000000000000000000016451266051671100140220ustar00rootroot00000000000000# Installing Plinth 1. Install the dependencies: On a Debian based system, run: $ sudo apt-get install \ augeas-tools \ dblatex \ gettext \ gir1.2-glib-2.0 \ gir1.2-networkmanager-1.0 \ gir1.2-packagekitglib-1.0 \ ldapscripts \ libjs-bootstrap \ libjs-jquery \ libjs-modernizr \ make \ network-manager \ packagekit \ ppp \ pppoe \ python3 \ python3-augeas \ python3-bootstrapform \ python3-cherrypy3 \ python3-coverage \ python3-django \ python3-django-stronghold \ python3-gi \ python3-psutil \ python3-setuptools \ python3-yaml \ xmlto 2. Install Plinth: Unzip the source into a directory. Change to the directory containing the program and run: $ sudo python3 setup.py install 3. Run Plinth: $ sudo plinth 4. Access Plinth UI: Plinth UI should be accessible at http://localhost:8000 Plinth-0.8.1/LICENSES000066400000000000000000000057441266051671100141250ustar00rootroot00000000000000# -*- mode: org; mode: org-indent; mode: visual-line; -*- Files containing license headers are not listed here. For each of the files listed, the copyright specified for the file is listed. "-" means "no license specified in the file," licenses are specified and linked otherwise. - COPYING :: N/A - HACKING :: - - INSTALL :: - - plinth.config :: - - README :: - - data/etc/apache2/plinth.conf :: - - data/etc/apache2/plinth-ssl.conf :: - - data/etc/sudoers.d/plinth :: - - static/themes/default/FreedomBox-Identity-Manual.pdf :: - - static/themes/default/FreedomBox-Logo.7z :: [[http://thread.gmane.org/gmane.linux.debian.freedombox.user/4124/focus=4439][GPL3+/CC-BY-SA]] - static/themes/default/readme.md :: [[file:themes/default/readme.md::This%20theme%20is%20free%20software%20offered%20to%20you%20under%20the%20terms%20of%20the%20GNU%20Affero%20General%20Public%20License,%20Version%203%20or%20later:][GNU Affero General Public License Version 3]] - static/themes/default/screenshot.png :: - - static/themes/default/img/apple-touch-icon-114px-precomposed.png :: - - static/themes/default/img/apple-touch-icon-57px-precomposed.png :: - - static/themes/default/img/apple-touch-icon-72px-precomposed.png :: - - static/themes/default/img/apple-touch-icon.xcf :: - - static/themes/default/img/favicon-32px.ico :: - - static/themes/default/img/favicon.ico :: - - static/themes/default/img/freedombox-logo-200px.png :: - - static/themes/default/img/freedombox-logo-250px.png :: - - static/themes/default/img/freedombox-logo-32px.png :: - - static/themes/default/img/FreedomBox-logo-grayscale-negative.png :: - - static/themes/default/img/FreedomBox-logo-grayscale-negative.svg :: - - static/themes/default/img/FreedomBox-logo-grayscale.png :: - - static/themes/default/img/FreedomBox-logo-grayscale.svg :: - - static/themes/default/img/FreedomBox-logo-lineart-negative.png :: - - static/themes/default/img/FreedomBox-logo-lineart-negative.svg :: - - static/themes/default/img/FreedomBox-logo-lineart.png :: - - static/themes/default/img/FreedomBox-logo-lineart.svg :: - - static/themes/default/img/FreedomBox-logo-standard.png :: - - static/themes/default/img/FreedomBox-logo-standard.svg :: - - static/themes/default/img/freedombox-logotype.png :: - - static/themes/default/img/network-computer.svg :: [[https://commons.wikimedia.org/wiki/File:Gnome-computer.svg][LGPLv3+]] - static/themes/default/img/network-connection.svg :: [[http://tango.freedesktop.org/][Public Domain]] - static/themes/default/img/network-connection-vertical.svg :: [[http://tango.freedesktop.org/][Public Domain]] - static/themes/default/img/network-ethernet.svg :: [[http://tango.freedesktop.org/][Public Domain]] - static/themes/default/img/network-freedombox.svg :: [[http://thread.gmane.org/gmane.linux.debian.freedombox.user/4124/focus=4439][GPL3+/CC-BY-SA]] - static/themes/default/img/network-internet.svg :: [[http://tango.freedesktop.org/][Public Domain]] - static/themes/default/img/network-wireless.svg :: [[http://tango.freedesktop.org/][Public Domain]] Plinth-0.8.1/README.md000066400000000000000000000040031266051671100142370ustar00rootroot00000000000000[![Build Status](https://travis-ci.org/freedombox/Plinth.svg?branch=master)](https://travis-ci.org/freedombox/Plinth) [![Translation status](https://hosted.weblate.org/widgets/freedombox/-/shields-badge.svg)](https://hosted.weblate.org/engage/freedombox/?utm_source=widget) # Plinth [Plinth](https://wiki.debian.org/FreedomBox/Plinth) - a web front end for administering [FreedomBox](https://freedomboxfoundation.org/) # Description FreedomBox is a community project to develop, design and promote personal servers running free software for private, personal communications. It is a networking appliance designed to allow interfacing with the rest of the Internet under conditions of protected privacy and data security. It hosts applications such as blog, wiki, website, social network, email, web proxy and a Tor relay, on a device that can replace your Wi-Fi router, so that your data stays with you. Plinth is a web interface to administer the functions of the FreedomBox. It is extensible and provides various applications of FreedomBox as modules. Each module or application provides simplified user interface to control the underlying functionality. As FreedomBox can act as a wireless router, it is possible to configure networking from Plinth. Plinth also allows configuration of basic system parameters such as time zone, hostname and automatic upgrades. You can find more information about Plinth on the [Plinth Wiki](https://wiki.debian.org/FreedomBox/Plinth) page, the [FreedomBox Wiki](https://wiki.debian.org/FreedomBox/) and the [FreedomBox Manual](https://wiki.debian.org/FreedomBox/Manual). # Getting Started See the INSTALL file for additional details and dependencies. To install run: $ sudo python3 setup.py install Run Plinth on the local system with: $ sudo plinth # Contributing See the HACKING file for contributing to Plinth. # Localization [![Translation status](https://hosted.weblate.org/widgets/freedombox/-/287x66-white.png)](https://hosted.weblate.org/engage/freedombox/?utm_source=widget) Plinth-0.8.1/actions/000077500000000000000000000000001266051671100144235ustar00rootroot00000000000000Plinth-0.8.1/actions/avahi000077500000000000000000000032301266051671100154370ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Configuration helper for service discovery. """ import argparse from plinth import action_utils def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('enable', help='Enable avahi-daemon service') subparsers.add_parser('disable', help='Disable avahi-daemon service') return parser.parse_args() def subcommand_enable(_): """Start service.""" action_utils.service_enable('avahi-daemon') def subcommand_disable(_): """Stop service.""" action_utils.service_disable('avahi-daemon') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/datetime000077500000000000000000000032101266051671100161410ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for date and time """ import argparse from plinth import action_utils def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('enable', help='Enable NTP service') subparsers.add_parser('disable', help='Disable NTP service') return parser.parse_args() def subcommand_enable(_): """Start service.""" action_utils.service_enable('ntp') def subcommand_disable(_): """Stop service.""" action_utils.service_disable('ntp') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/deluge000077500000000000000000000051641266051671100156240ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for BitTorrent web client. """ import argparse import os import subprocess from plinth import action_utils SYSTEMD_SERVICE_PATH = '/etc/systemd/system/deluge-web.service' SYSTEMD_SERVICE = ''' # # This file is managed and overwritten by Plinth. If you wish to edit # it, disable Deluge in Plinth, remove this file and manage it manually. # [Unit] Description=Deluge Web Interface Documentation=man:deluge-web(1) After=network.target [Service] ExecStart=/usr/bin/deluge-web --base=deluge Restart=on-failure User=debian-deluged Group=debian-deluged [Install] WantedBy=multi-user.target ''' def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('enable', help='Enable deluge-web site') subparsers.add_parser('disable', help='Disable deluge-web site') return parser.parse_args() def subcommand_enable(_): """Enable deluge-web site and start deluge-web.""" setup() action_utils.service_enable('deluge-web') action_utils.webserver_enable('deluge-plinth') def subcommand_disable(_): """Disable deluge-web site and stop deluge-web.""" action_utils.webserver_disable('deluge-plinth') action_utils.service_disable('deluge-web') def setup(): """Perform initial setup for deluge-web.""" if not os.path.isfile(SYSTEMD_SERVICE_PATH): with open(SYSTEMD_SERVICE_PATH, 'w') as file_handle: file_handle.write(SYSTEMD_SERVICE) subprocess.check_call(['systemctl', 'daemon-reload']) def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/domainname-change000077500000000000000000000017041266051671100177060ustar00rootroot00000000000000#!/bin/sh # # This file is part of Plinth. # # 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 . # domainname="$1" hostname=$(hostname) if grep -q 127.0.1.1 /etc/hosts ; then sed -i "s/127.0.1.1.*/127.0.1.1 $hostname.$domainname $hostname/" /etc/hosts else sed -i "/127.0.0.1.*/a \ 127.0.1.1 $hostname.$domainname $hostname" /etc/hosts fi Plinth-0.8.1/actions/dynamicdns000077500000000000000000000362751266051671100165170ustar00rootroot00000000000000#!/bin/bash ############################################################################ # # # This file is part of Plinth. # # # # 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 . # # # # # # This script is a wrapper around ez-ipupdate and/or wget # # to update a Dynamic DNS account. The script is used as an # # interface between plinth and ez-ipupdate # # the script will store configuration, return configuration # # to plinth UI and do a dynamic DNS update. The script will # # also determe if we are behind a NAT device, if we can use # # ez-ipupdate tool or if we need to do some wget magic # # # # Todo: IPv6 # # Todo: GET WAN IP from Router via UPnP if supported # # Todo: licence string? # # author: Daniel Steglich # # # ############################################################################ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # static values WGET=$(which wget) WGETOPTIONS="-4 -o /dev/null -t 3 -T 3" EMPTYSTRING="none" NOIP="0.0.0.0" # how often do we poll for IP changes if we are behind a NAT? UPDATEMINUTES=5 # if we do not have a IP check URL, how often should we do a "blind" update UPDATEMINUTESUNKNOWN=3600 TOOLNAME=ez-ipupdate UPDATE_TOOL=$(which ${TOOLNAME}) DISABLED_STRING='disabled' ENABLED_STRING='enabled' # Dirs and filenames CFGDIR="/etc/${TOOLNAME}/" CFG="${CFGDIR}${TOOLNAME}.conf" CFG_disabled="${CFGDIR}${TOOLNAME}.inactive" IPFILE="${CFGDIR}${TOOLNAME}.currentIP" STATUSFILE="${CFGDIR}${TOOLNAME}.status" LASTUPDATE="${CFGDIR}/last-update" HELPERCFG="${CFGDIR}${TOOLNAME}-plinth.cfg" CRONJOB="/etc/cron.d/${TOOLNAME}" PIDFILE="/var/run/ez-ipupdate.pid" # this function will parse commandline options doGetOpt() { basicauth=0 ignoreCertError=0 while getopts ":s:d:u:P:I:U:c:b:p" opt; do case ${opt} in s) if [ "${OPTARG}" != "${EMPTYSTRING}" ];then server=${OPTARG} else server="" fi ;; d) host=${OPTARG} ;; u) user=${OPTARG} ;; P) pass=${OPTARG} ;; p) if read -t 0; then IFS= read -r pass fi ;; I) if [ "${OPTARG}" != "${EMPTYSTRING}" ];then ipurl=${OPTARG} else ipurl="" fi ;; U) if [ "${OPTARG}" != "${EMPTYSTRING}" ];then updateurl=${OPTARG} else updateurl="" fi ;; b) basicauth=${OPTARG} ;; c) ignoreCertError=${OPTARG} ;; \?) echo "Invalid option: -${OPTARG}" >&2 exit 1 ;; esac done } # this function will write a persistent config file to disk doWriteCFG() { mkdir ${CFGDIR} 2> /dev/null # always write to the inactive config - needs to be enabled via "start" command later local out_file=${CFG_disabled} # reset the last update time echo 0 > ${LASTUPDATE} # reset the last updated IP echo "0.0.0.0" > ${IPFILE} # reset last update (if there is one) rm ${STATUSFILE} 2> /dev/null # find the interface (always the default gateway interface) default_interface=$(ip route |grep default |awk '{print $5}') # store the given options in ez-ipupdate compatible config file { echo "host=${host}" echo "server=${server}" echo "user=${user}:${pass}" echo "service-type=gnudip" echo "retrys=3" echo "wildcard" } > ${out_file} # store UPDATE URL params { echo "POSTURL ${updateurl}" echo "POSTAUTH ${basicauth}" echo "POSTSSLIGNORE ${ignoreCertError}" } > ${HELPERCFG} # check if we are behind a NAT Router echo "IPURL ${ipurl}" >> ${HELPERCFG} if [ -z ${ipurl} ];then echo "NAT unknown" >> ${HELPERCFG} else doGetWANIP ISGLOBAL=$(ip addr ls "${default_interface}" | grep "${wanip}") if [ -z "${ISGLOBAL}" ];then # we are behind NAT echo "NAT yes" >> ${HELPERCFG} else # we are directly connected echo "NAT no" >> ${HELPERCFG} # if this file is added ez-ipupdate will take ip form this interface { echo "interface=${default_interface}" # if this line is added to config file, ez-ipupdate will be launched on startup via init.d echo "daemon" echo "execute=${0} success" } >> ${out_file} fi fi } # this function will read the config file from disk # special treatment for empty strings is done here: # plinth will give empty strings like: '' # but we don't want this single quotes to be used doReadCFG() { host="" server="" user="" pass="" ipurl="" if [ ! -z "${cfgfile}" ];then host=$(grep ^host= "${cfgfile}" 2> /dev/null | cut -d = -f 2-) server=$(grep ^server= "${cfgfile}" 2> /dev/null | cut -d = -f 2- | grep -v ^\'\') user=$(grep ^user= "${cfgfile}" 2> /dev/null | cut -d = -f 2- | cut -d : -f 1 ) pass=$(grep ^user= "${cfgfile}" 2> /dev/null | cut -d = -f 2- | cut -d : -f 2-) fi if [ ! -z ${HELPERCFG} ];then ipurl=$(grep ^IPURL "${HELPERCFG}" 2> /dev/null |awk '{print $2}' |grep -v ^\'\') updateurl=$(grep POSTURL "${HELPERCFG}" 2> /dev/null |awk '{print $2}' |grep -v ^\'\') basicauth=$(grep POSTAUTH "${HELPERCFG}" 2> /dev/null |awk '{print $2}' |grep -v ^\'\') ignoreCertError=$(grep POSTSSLIGNORE "${HELPERCFG}" 2> /dev/null |awk '{print $2}' |grep -v ^\'\') fi } # replace vars from url: i.e.: # https://example.com/update.php?domain=&User=&Pass= # also this function will remove the surounding single quotes from the URL string # as plinth will add them doReplaceVars() { local url=$(echo "${updateurl}" | sed "s//${wanip}/g") url=$(echo "${url}" | sed "s//${host}/g") url=$(echo "${url}" | sed "s//${user}/g") url=$(echo "${url}" | sed "s//${pass}/g") url=$(echo "${url}" | sed "s/'//g") updateurl=${url} logger "expanded update URL as ${url}" } # doReadCFG() needs to be run before this # this function will return all configured parameters in a way that # plinth will understand (plinth know the order of # parameters this function will return) doStatus() { PROC=$(pgrep ${TOOLNAME}) if [ -f "${CRONJOB}" ];then echo "${ENABLED_STRING}" elif [ ! -z "${PROC}" ];then echo "${ENABLED_STRING}" else echo "${DISABLED_STRING}" fi if [ ! -z "${server}" ];then echo "${server}" else echo "${DISABLED_STRING}" fi if [ ! -z "${host}" ];then echo "${host}" else echo "${DISABLED_STRING}" fi if [ ! -z "${user}" ];then echo "${user}" else echo "${DISABLED_STRING}" fi if [ ! -z "${pass}" ];then echo "${pass}" else echo "${DISABLED_STRING}" fi if [ ! -z "${ipurl}" ];then echo "${ipurl}" else echo "${DISABLED_STRING}" fi if [ ! -z "${updateurl}" ];then echo "${updateurl}" else echo "${DISABLED_STRING}" fi if [ ! -z "${ignoreCertError}" ];then echo "${ignoreCertError}" else echo "${DISABLED_STRING}" fi if [ ! -z "${basicauth}" ];then echo "${basicauth}" else echo "${DISABLED_STRING}" fi } # ask a public WEB Server for the WAN IP we are comming from # and store this ip within $wanip doGetWANIP() { if [ ! -z "${ipurl}" ];then outfile=$(mktemp) local cmd="${WGET} ${WGETOPTIONS} -O ${outfile} ${ipurl}" $cmd wanip=$(sed s/[^0-9.]//g "${outfile}") rm "${outfile}" [ -z "${wanip}" ] && wanip=${NOIP} else # no WAN IP found because of missing check URL wanip=${NOIP} fi } # actualy do the update (using wget or ez-ipupdate or even both) # this function is called via cronjob doUpdate() { local dnsentry=$(nslookup "${host}"|tail -n2|grep A|sed s/[^0-9.]//g) if [ "${dnsentry}" = "${wanip}" ];then return fi if [ ! -z "${server}" ];then start-stop-daemon -S -x "${UPDATE_TOOL}" -m -p "${PIDFILE}" -- -c "${cfgfile}" fi if [ ! -z "${updateurl}" ];then doReplaceVars if [ "${basicauth}" = "enabled" ];then WGETOPTIONS="${WGETOPTIONS} --user ${user} --password ${pass} " fi if [ "${ignoreCertError}" = "enabled" ];then WGETOPTIONS="${WGETOPTIONS} --no-check-certificate " fi local cmd="${WGET} ${WGETOPTIONS} ${updateurl}" $cmd # ToDo: check the returning text from WEB Server. User need to give expected string. if [ ${?} -eq 0 ];then ${0} success ${wanip} else ${0} failed fi fi } cmd=${1} shift # decide which config to use cfgfile="/tmp/none" [ -f ${CFG_disabled} ] && cfgfile=${CFG_disabled} [ -f ${CFG} ] && cfgfile=${CFG} # check what action is requested case ${cmd} in configure) doGetOpt "${@}" doWriteCFG ;; start) doGetWANIP if [ "$(grep ^NAT ${HELPERCFG} | awk '{print $2}')" = "no" ];then #if we are not behind a NAT device and we use gnudip, start the daemon tool gnudipServer=$(grep ^server= ${cfgfile} 2> /dev/null | cut -d = -f 2- |grep -v ^\'\') if [ ! -f ${CFG} -a ! -z "${gnudipServer}" ];then mv ${CFG_disabled} ${CFG} /etc/init.d/${TOOLNAME} start fi # if we are not behind a NAT device and we use update-URL, add a cronjob # (daemon tool does not support update-URL feature) if [ ! -z "$(grep ^POSTURL $HELPERCFG | awk '{print $2}')" ];then echo "*/${UPDATEMINUTES} * * * * root ${0} update" > ${CRONJOB} $0 update fi else # if we are behind a NAT device, add a cronjob (daemon tool cannot monitor WAN IP changes) echo "*/${UPDATEMINUTES} * * * * root ${0} update" > $CRONJOB $0 update fi ;; get-nat) NAT=$(grep ^NAT $HELPERCFG 2> /dev/null | awk '{print $2}') [ -z "${NAT}" ] && NAT="unknown" echo ${NAT} ;; update) doReadCFG dnsentry=$(nslookup "${host}"|tail -n2|grep A|sed s/[^0-9.]//g) doGetWANIP echo ${wanip} > ${IPFILE} grep -v execute ${cfgfile} > ${cfgfile}.tmp mv ${cfgfile}.tmp ${cfgfile} echo "execute=${0} success ${wanip}" >> ${cfgfile} # if we know our WAN IP, only update if IP changes if [ "${dnsentry}" != "${wanip}" -a "${wanip}" != ${NOIP} ];then doUpdate fi # if we don't know our WAN IP do a blind update once a hour if [ "${wanip}" = ${NOIP} ];then currenttime=$(date +%s) LAST=0 [ -f ${LASTUPDATE} ] && LAST=$(cat ${LASTUPDATE}) diff=$((currenttime - LAST)) if [ ${diff} -gt ${UPDATEMINUTESUNKNOWN} ];then doUpdate fi fi ;; stop) rm ${CRONJOB} 2> /dev/null /etc/init.d/${TOOLNAME} stop kill "$(cat ${PIDFILE})" 2> /dev/null mv ${CFG} ${CFG_disabled} ;; success) date=$(date) echo "last update done (${date})" > ${STATUSFILE} date +%s > ${LASTUPDATE} # if called from cronjob, the current IP is given as parameter if [ $# -eq 1 ];then echo "${1}" > ${IPFILE} else # if called from ez-ipupdate daemon, no WAN IP is given as parameter doGetWANIP echo ${wanip} > ${IPFILE} fi ;; failed) date=$(date) echo "last update failed (${date})" > ${STATUSFILE} ;; get-last-success) if [ -f ${STATUSFILE} ];then cat ${STATUSFILE} else echo "no successful update recorded since last config change" fi ;; status) doReadCFG doStatus ;; get-timer) echo ${UPDATEMINUTES} ;; clean) rm ${CFGDIR}/* rm ${CRONJOB} ;; *) echo "usage: status|configure |start|stop|update|get-nat|clean|success [updated IP]|failed|get-last-success" echo "" echo "options are:" echo "-s Gnudip Server address" echo "-d Domain to be updated" echo "-u Account username" echo "-P Account password" echo "-p Read Account Password from stdin" echo "-I A URL which returns the IP of the client who is requesting" echo "-U The update URL (a HTTP GET on this URL will be done)" echo "-c <1|0> disable SSL check on Update URL" echo "-b <1|0> use HTTP basic auth on Update URL" echo "" echo "update do a one time update" echo "clean delete configuration" echo "success store update success and optional the updated IP" echo "failed store update failure" echo "get-nat return the detected nat type" echo "get-last-success return date of last successful update" ;; esac exit 0 Plinth-0.8.1/actions/firewall000077500000000000000000000066551266051671100161720ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for Plinth firewall inteface """ import argparse import subprocess def parse_arguments(): """Return parsed command line arguments as dictionary""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') # Get status subparsers.add_parser('get-status', help='Get whether firewalld is running') # Get service status get_enabled_services = subparsers.add_parser( 'get-enabled-services', help='Get list of enabled services') get_enabled_services.add_argument( '--zone', help='Zone from which the list is to be retrieved', required=True) # Add a service add_service = subparsers.add_parser('add-service', help='Add a service') add_service.add_argument('service', help='Name of the service to add') add_service.add_argument('--zone', help='Zone to which service is to be added', required=True) # Remove a service status remove_service = subparsers.add_parser('remove-service', help='Remove a service') remove_service.add_argument('service', help='Name of the service to remove') remove_service.add_argument( '--zone', help='Zone from which service is to be removed', required=True) return parser.parse_args() def subcommand_get_status(_): """Print status of the firewalld service""" subprocess.call(['firewall-cmd', '--state']) def subcommand_get_enabled_services(arguments): """Print the status of variours services""" subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--list-services']) def subcommand_add_service(arguments): """Permit a service in the firewall""" subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--add-service', arguments.service]) subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--permanent', '--add-service', arguments.service]) def subcommand_remove_service(arguments): """Block a service in the firewall""" subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--remove-service', arguments.service]) subprocess.call(['firewall-cmd', '--zone', arguments.zone, '--permanent', '--remove-service', arguments.service]) def main(): """Parse arguments and perform all duties""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == "__main__": main() Plinth-0.8.1/actions/hostname-change000077500000000000000000000017601266051671100174160ustar00rootroot00000000000000#!/bin/sh # # This file is part of Plinth. # # 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 . # hostname="$1" if [ -d /run/systemd/system ] ; then hostnamectl set-hostname --transient --static "$hostname" else echo "$hostname" > /etc/hostname if [ -x /etc/init.d/hostname.sh ] ; then invoke-rc.d hostname.sh start else service hostname start fi fi service avahi-daemon restart Plinth-0.8.1/actions/ikiwiki000077500000000000000000000113011266051671100160050ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Configuration helper for ikiwiki """ import argparse import os import shutil import subprocess import sys from plinth import action_utils SETUP_WIKI = '/etc/ikiwiki/plinth-wiki.setup' SETUP_BLOG = '/etc/ikiwiki/plinth-blog.setup' SITE_PATH = '/var/www/ikiwiki' WIKI_PATH = '/var/lib/ikiwiki' def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') # Setup ikiwiki site subparsers.add_parser('setup', help='Perform first time setup operations') # Enable ikiwiki site subparsers.add_parser('enable', help='Enable ikiwiki site') # Disable ikiwiki site subparsers.add_parser('disable', help='Disable ikiwiki site') # Get wikis and blogs subparsers.add_parser('get-sites', help='Get wikis and blogs') # Create a wiki create_wiki = subparsers.add_parser('create-wiki', help='Create a wiki') create_wiki.add_argument('--wiki_name', help='Name of new wiki') create_wiki.add_argument('--admin_name', help='Administrator account name') # Create a blog create_blog = subparsers.add_parser('create-blog', help='Create a blog') create_blog.add_argument('--blog_name', help='Name of new blog') create_blog.add_argument('--admin_name', help='Administrator account name') # Delete a wiki or blog delete = subparsers.add_parser('delete', help='Delete a wiki or blog.') delete.add_argument('--name', help='Name of wiki or blog to delete.') return parser.parse_args() def subcommand_setup(_): """Perform first time setup operations.""" setup() def subcommand_enable(_): """Enable ikiwiki site.""" action_utils.webserver_enable('ikiwiki-plinth') def subcommand_disable(_): """Disable ikiwiki site.""" action_utils.webserver_disable('ikiwiki-plinth') def subcommand_get_sites(_): """Get wikis and blogs.""" try: sites = os.listdir(SITE_PATH) print('\n'.join(sites)) except FileNotFoundError: pass def subcommand_create_wiki(arguments): """Create a wiki.""" pw_bytes = sys.stdin.read().encode() proc = subprocess.Popen( ['ikiwiki', '-setup', SETUP_WIKI, arguments.wiki_name, arguments.admin_name], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) outs, errs = proc.communicate(input=pw_bytes + b'\n' + pw_bytes) print(outs) print(errs) def subcommand_create_blog(arguments): """Create a blog.""" pw_bytes = sys.stdin.read().encode() proc = subprocess.Popen( ['ikiwiki', '-setup', SETUP_BLOG, arguments.blog_name, arguments.admin_name], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) outs, errs = proc.communicate(input=pw_bytes + b'\n' + pw_bytes) print(outs) print(errs) def subcommand_delete(arguments): """Delete a wiki or blog.""" html_folder = os.path.join(SITE_PATH, arguments.name) wiki_folder = os.path.join(WIKI_PATH, arguments.name) try: shutil.rmtree(html_folder) shutil.rmtree(wiki_folder) shutil.rmtree(wiki_folder + '.git') os.remove(wiki_folder + '.setup') print('Deleted {0}'.format(arguments.name)) except FileNotFoundError: print('Error: {0} not found.'.format(arguments.name)) exit(1) def setup(): """Write Apache configuration and wiki/blog setup scripts.""" if not os.path.exists(SITE_PATH): os.makedirs(SITE_PATH) with action_utils.WebserverChange() as webserver_change: webserver_change.enable('cgi', kind='module') webserver_change.enable('authnz_ldap', kind='module') webserver_change.enable('ikiwiki-plinth') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/ldap000077500000000000000000000100301266051671100152630ustar00rootroot00000000000000#!/bin/bash # # This file is part of Plinth. # # 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 . # # Store anything available from stdin. # This is used to receive passwords from Plinth. if read -t 0; then IFS= read -r input fi set -e # Exit on failure # XXX: ldapscripts has an issue that it can't properly extract # built-in templates under certain locales due to grep command # recognizing the source file as binary. Remove using this once the # bug is fixed. Passing '-a' as argument to grep seems to be a # solution. export LC_ALL=C create_user() { username="$1" password="$2" # All users shall have 'users' (a group in /etc/group) as primary group. ldapadduser $username users > /dev/null set_user_password $username $password } delete_user() { username="$1" groups=$(get_user_groups $username) ldapdeleteuser $username while read -r group; do ldapdeleteuserfromgroup $username $group > /dev/null || true done <<< "$groups" } rename_user() { old_username="$1" new_username="$2" groups=$(get_user_groups $old_username) ldaprenameuser $old_username $new_username while read -r group; do ldapdeleteuserfromgroup $old_username $group > /dev/null || true ldapaddusertogroup $new_username $group > /dev/null || true done <<< "$groups" } set_user_password() { username="$1" password=$(slappasswd -s "$2") # XXX: Use ldapsetpasswd as soon as ldapscripts can handle # changing passwords with SASL auth EXTERNAL. cat < /dev/null dn: uid=$username,ou=Users,dc=thisbox changetype: modify replace: userPassword userPassword: $password EOF } get_user_groups() { # Return only supplimentary groups and don't include the 'users' # primary group. username="$1" ldapid $username | cut -f 3 -d ' ' | cut -d = -f 2 | sed 's+,+\n+g' | sed "s+.*(\(.*\))+\1+" | grep -v users || true } add_user_to_group() { username="$1" groupname="$2" # Try to create group and ignore failure if group already exists ldapaddgroup $groupname > /dev/null 2>&1 || true ldapaddusertogroup $username $groupname > /dev/null } remove_user_from_group() { username="$1" groupname="$2" ldapdeleteuserfromgroup $username $groupname > /dev/null } setup() { # XXX: Password setting on users is disabled as changing passwords # using SASL Auth is not supported. cat < /dev/null set /files/etc/ldapscripts/ldapscripts.conf/SERVER '"ldapi://"' set /files/etc/ldapscripts/ldapscripts.conf/SASLAUTH '"EXTERNAL"' set /files/etc/ldapscripts/ldapscripts.conf/SUFFIX '"dc=thisbox"' set /files/etc/ldapscripts/ldapscripts.conf/USUFFIX '"ou=Users"' set /files/etc/ldapscripts/ldapscripts.conf/GSUFFIX '"ou=Groups"' set /files/etc/ldapscripts/ldapscripts.conf/PASSWORDGEN '"true"' save EOF } setup command=$1 shift case $command in create-user) create_user "$1" "$input" ;; delete-user) delete_user "$@" ;; rename-user) rename_user "$@" ;; set-user-password) set_user_password "$1" "$input" ;; get-user-groups) get_user_groups "$@" ;; add-user-to-group) add_user_to_group "$@" ;; remove-user-from-group) remove_user_from_group "$@" ;; *) echo "Invalid sub-command" exit -1 ;; esac Plinth-0.8.1/actions/letsencrypt000077500000000000000000000135601266051671100167320ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Configuration helper for Let's Encrypt. """ import argparse import json import os import subprocess import sys from plinth import action_utils TEST_MODE = False LIVE_DIRECTORY = '/etc/letsencrypt/live/' APACHE_PREFIX = '/etc/apache2/sites-available/' APACHE_CONFIGURATION = ''' ServerAdmin webmaster@localhost ServerName {domain} DocumentRoot /var/www/html Options FollowSymLinks AllowOverride None Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all ErrorLog ${{APACHE_LOG_DIR}}/error.log # Possible values include: debug, info, notice, warn, error, crit, alert, emerg. LogLevel warn CustomLog ${{APACHE_LOG_DIR}}/ssl_access.log combined # GnuTLS Switch: Enable/Disable SSL/TLS for this virtual host. GnuTLSEnable On # Automatically obtained certficates from Let's Encrypt GnuTLSCertificateFile /etc/letsencrypt/live/{domain}/fullchain.pem GnuTLSKeyFile /etc/letsencrypt/live/{domain}/privkey.pem # See http://www.outoforder.cc/projects/apache/mod_gnutls/docs/#GnuTLSPriorities GnuTLSPriorities NORMAL ''' def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser( 'get-status', help='Return the status of configured domains.') revoke_parser = subparsers.add_parser( 'revoke', help='Disable and domain and revoke its certificate.') revoke_parser.add_argument( '--domain', help='Domain name to revoke certificate for') obtain_parser = subparsers.add_parser( 'obtain', help='Obtain certficate for a domain and setup website.') obtain_parser.add_argument( '--domain', help='Domain name to obtain certificate for') return parser.parse_args() def get_certficate_expiry(domain): """Return the expiry date of a certificate.""" certificate_file = os.path.join(LIVE_DIRECTORY, domain, 'cert.pem') output = subprocess.check_output(['openssl', 'x509', '-enddate', '-noout', '-in', certificate_file]) return output.decode().strip().split('=')[1] def subcommand_get_status(_): """Return a JSON dictionary of currently configured domains.""" try: domains = os.listdir(LIVE_DIRECTORY) except OSError: domains = [] domains = [domain for domain in domains if os.path.isdir(os.path.join(LIVE_DIRECTORY, domain))] domain_status = {} for domain in domains: domain_status[domain] = { 'certificate_available': True, 'expiry_date': get_certficate_expiry(domain), 'web_enabled': action_utils.webserver_is_enabled(domain, kind='site') } print(json.dumps({'domains': domain_status})) def subcommand_revoke(arguments): """Disable a domain and revoke the certificate.""" domain = arguments.domain command = ['letsencrypt', 'revoke', '--domain', domain, '--cert-path', os.path.join(LIVE_DIRECTORY, domain, 'cert.pem')] if TEST_MODE: command.append('--staging') process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = process.communicate() if process.returncode: print(stderr.decode(), file=sys.stderr) sys.exit(1) action_utils.webserver_disable(domain, kind='site') def subcommand_obtain(arguments): """Obtain a certificate for a domain and setup website.""" domain = arguments.domain command = [ 'letsencrypt', 'certonly', '--agree-tos', '--register-unsafely-without-email', '--domain', arguments.domain, '--authenticator', 'webroot', '--webroot-path', '/var/www/html/', '--renew-by-default'] if TEST_MODE: command.append('--staging') process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdin, stderr = process.communicate() if process.returncode: print(stderr.decode(), file=sys.stderr) sys.exit(1) setup_webserver_config(domain) action_utils.webserver_enable(domain, kind='site') def setup_webserver_config(domain): """Create SSL web server configuration for a domain. Do so only if there is no configuration existing. """ file_name = os.path.join(APACHE_PREFIX, domain + '.conf') if os.path.isfile(file_name): return with open(file_name, 'w') as file_handle: file_handle.write(APACHE_CONFIGURATION.format(domain=domain)) def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/monkeysphere000077500000000000000000000077101266051671100170670ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Configuration helper for monkeysphere. """ import argparse import json import os import subprocess def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') host_show_keys = subparsers.add_parser( 'host-show-keys', help='Show host key fingerprints') host_show_keys.add_argument( 'key_ids', nargs='*', help='Optional list of KEYIDs') host_import_ssh_key = subparsers.add_parser( 'host-import-ssh-key', help='Import host SSH key') host_import_ssh_key.add_argument( 'hostname', help='Fully-qualified hostname') host_publish_key = subparsers.add_parser( 'host-publish-key', help='Push host key to keyserver') host_publish_key.add_argument( 'key_ids', nargs='*', help='Optional list of KEYIDs') return parser.parse_args() def subcommand_host_show_keys(arguments): """Show host key fingerprints.""" try: output = subprocess.check_output( ['monkeysphere-host', 'show-keys'] + arguments.key_ids, stderr=subprocess.DEVNULL) except subprocess.CalledProcessError: # no keys available print(json.dumps({'keys': []})) return # parse output keys = [dict()] lines = output.decode().strip().split('\n') for line in lines: if line.startswith('pub'): data = line.lstrip('pub').split() keys[-1]['pub'] = data[0] keys[-1]['date'] = data[1] elif line.startswith('uid'): keys[-1]['uid'] = line.lstrip('uid').strip() elif line.startswith('OpenPGP fingerprint:'): keys[-1]['pgp_fingerprint'] = line.lstrip('Open PGP fingerprint:') elif line.startswith('ssh fingerprint:'): data = line.lstrip('ssh fingerprint:').split() keys[-1]['ssh_key_size'] = data[0] keys[-1]['ssh_fingerprint'] = data[1] keys[-1]['ssh_key_type'] = data[2].strip('()') elif line == '': keys.append(dict()) print(json.dumps({'keys': keys})) def subcommand_host_import_ssh_key(arguments): """Import host SSH key.""" output = subprocess.check_output( ['monkeysphere-host', 'import-key', '/etc/ssh/ssh_host_rsa_key', arguments.hostname]) print(output.decode()) def subcommand_host_publish_key(arguments): """Push host key to keyserver.""" # setting TMPDIR as workaround for Debian bug #656750 proc = subprocess.Popen( ['monkeysphere-host', 'publish-keys'] + arguments.key_ids, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=dict( os.environ, TMPDIR='/var/lib/monkeysphere/authentication/tmp/', MONKEYSPHERE_PROMPT='false')) output, error = proc.communicate() output, error = output.decode(), error.decode() if proc.returncode != 0: raise Exception(output, error) print(output) def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/mumble000077500000000000000000000033221266051671100156320ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for Mumble server """ import argparse from plinth import action_utils SERVICE_CONFIG = '/etc/default/mumble-server' def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('enable', help='Enable Mumble service') subparsers.add_parser('disable', help='Disable Mumble service') return parser.parse_args() def subcommand_enable(_): """Start service.""" action_utils.service_enable('mumble-server') def subcommand_disable(_): """Stop service.""" action_utils.service_disable('mumble-server') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/openvpn000077500000000000000000000140071266051671100160400ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for OpenVPN server. """ import argparse import os import subprocess from plinth import action_utils KEYS_DIRECTORY = '/etc/openvpn/freedombox-keys' DH_KEY = '/etc/openvpn/freedombox-keys/dh4096.pem' SERVER_CONFIGURATION_PATH = '/etc/openvpn/freedombox.conf' CA_CERTIFICATE_PATH = KEYS_DIRECTORY + '/ca.crt' USER_CERTIFICATE_PATH = KEYS_DIRECTORY + '/{username}.crt' USER_KEY_PATH = KEYS_DIRECTORY + '/{username}.key' SERVER_CONFIGURATION = ''' port 1194 proto udp dev tun ca /etc/openvpn/freedombox-keys/ca.crt cert /etc/openvpn/freedombox-keys/server.crt key /etc/openvpn/freedombox-keys/server.key dh /etc/openvpn/freedombox-keys/dh4096.pem server 10.91.0.0 255.255.255.0 keepalive 10 120 cipher AES-256-CBC comp-lzo verb 3 ''' CLIENT_CONFIGURATION = ''' client remote {remote} 1194 proto udp dev tun nobind remote-cert-tls server cipher AES-256-CBC comp-lzo redirect-gateway verb 3 {ca} {cert} {key}''' CERTIFICATE_CONFIGURATION = { 'KEY_CONFIG': '/usr/share/easy-rsa/openssl-1.0.0.cnf', 'KEY_DIR': KEYS_DIRECTORY, 'OPENSSL': 'openssl', 'KEY_SIZE': '4096', 'CA_EXPIRE': '3650', 'KEY_EXPIRE': '3650', 'KEY_COUNTRY': 'US', 'KEY_PROVINCE': 'NY', 'KEY_CITY': 'New York', 'KEY_ORG': 'FreedomBox', 'KEY_EMAIL': 'me@freedombox', 'KEY_OU': 'Home', 'KEY_NAME': 'FreedomBox' } COMMON_ARGS = {'env': CERTIFICATE_CONFIGURATION, 'cwd': KEYS_DIRECTORY} def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('is-setup', help='Return whether setup is completed') subparsers.add_parser('setup', help='Setup OpenVPN server configuration') subparsers.add_parser('enable', help='Enable OpenVPN server') subparsers.add_parser('disable', help='Disable OpenVPN server') get_profile = subparsers.add_parser( 'get-profile', help='Return the OpenVPN profile of a user') get_profile.add_argument('username', help='User to get profile for') get_profile.add_argument('remote_server', help='The server name for the user to connect') return parser.parse_args() def subcommand_is_setup(_): """Return whether setup is complete.""" print('true' if os.path.isfile(DH_KEY) else 'false') def subcommand_setup(_): """Setup configuration, CA and certificates.""" _create_server_config() _create_certificates() _setup_firewall() action_utils.service_enable('openvpn@freedombox') action_utils.service_restart('openvpn@freedombox') def _create_server_config(): """Write server configuration.""" if os.path.exists(SERVER_CONFIGURATION_PATH): return with open(SERVER_CONFIGURATION_PATH, 'w') as file_handle: file_handle.write(SERVER_CONFIGURATION) def _setup_firewall(): """Add TUN device to internal zone in firewalld.""" subprocess.call(['firewall-cmd', '--zone', 'internal', '--add-interface', 'tun+']) subprocess.call(['firewall-cmd', '--permanent', '--zone', 'internal', '--add-interface', 'tun+']) def _create_certificates(): """Generate CA and server certificates.""" try: os.mkdir(KEYS_DIRECTORY, 0o700) except FileExistsError: pass subprocess.check_call(['/usr/share/easy-rsa/clean-all'], **COMMON_ARGS) subprocess.check_call(['/usr/share/easy-rsa/pkitool', '--initca'], **COMMON_ARGS) subprocess.check_call(['/usr/share/easy-rsa/pkitool', '--server', 'server'], **COMMON_ARGS) subprocess.check_call(['/usr/share/easy-rsa/build-dh'], **COMMON_ARGS) def subcommand_enable(_): """Start OpenVPN service.""" action_utils.service_enable('openvpn@freedombox') def subcommand_disable(_): """Stop OpenVPN service.""" action_utils.service_disable('openvpn@freedombox') def subcommand_get_profile(arguments): """Return the profile for a user.""" username = arguments.username remote_server = arguments.remote_server if username == 'ca' or username == 'server': raise Exception('Invalid username') user_certificate = USER_CERTIFICATE_PATH.format(username=username) user_key = USER_KEY_PATH.format(username=username) if not os.path.isfile(user_certificate) or not os.path.isfile(user_key): subprocess.check_call(['/usr/share/easy-rsa/pkitool', username], **COMMON_ARGS) user_certificate_string = _read_file(user_certificate) user_key_string = _read_file(user_key) ca_string = _read_file(CA_CERTIFICATE_PATH) profile = CLIENT_CONFIGURATION.format( ca=ca_string, cert=user_certificate_string, key=user_key_string, remote=remote_server) print(profile) def _read_file(filename): """Return the entire contens of a file as string.""" with open(filename, 'r') as file_handle: return ''.join(file_handle.readlines()) def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/owncloud-setup000077500000000000000000000053221266051671100173430ustar00rootroot00000000000000#!/bin/sh # # This file is part of Plinth. # # 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 . # # See also # http://doc.owncloud.org/server/6.0/admin_manual/configuration/configuration_automation.html grep -q "^\s*['\"]dbtype['\"]" /etc/owncloud/config.php 2> /dev/null db_in_config=$(( ! $? )) grep -q "^\s*['\"]dbtype['\"]" /etc/owncloud/autoconfig.php 2> /dev/null db_in_autoconfig=$(( ! $? )) if [ -e /etc/apache2/conf-enabled/owncloud.conf ] && \ [ $db_in_config -ne 0 -o $db_in_autoconfig -ne 0 ] ; then owncloud_enable_cur=true else owncloud_enable_cur=false fi while [ "$1" ] ; do arg="$1" shift case "$arg" in enable|noenable) # Not using disable for consistency with other options if [ 'enable' = "$arg" ] ; then owncloud_enable=true else owncloud_enable=false fi ;; status) printstatus() { if "$2" ; then echo "$1" else echo no"$1" fi } printstatus enable $owncloud_enable_cur exit 0 ;; *) ;; esac done if [ "$owncloud_enable" != "$owncloud_enable_cur" ] ; then if $owncloud_enable ; then # Keep existing configuration if it exist if [ $db_in_config -eq 0 -a $db_in_autoconfig -eq 0 ] ; then # Set up postgresql database and user dbpwd=$(pwgen -1 30) su - postgres -c "psql -c \"CREATE USER owncloud WITH NOCREATEDB NOCREATEUSER\"" \ 2>&1 | logger -t owncloud-setup su - postgres -c "psql -c \"ALTER USER owncloud ENCRYPTED PASSWORD '$dbpwd'\"" \ 2>&1 | logger -t owncloud-setup su - postgres -c "createdb --owner owncloud owncloud" \ 2>&1 | logger -t owncloud-setup cat > /etc/owncloud/autoconfig.php < '/usr/share/owncloud/data', 'dbtype' => 'pgsql', 'dbname' => 'owncloud', 'dbuser' => 'owncloud', 'dbpass' => '$dbpwd', 'dbhost' => 'localhost', 'dbtableprefix' => 'oc_', 'installed' => false, ); EOF fi a2enconf owncloud 2>&1 | logger -t owncloud-setup else a2disconf owncloud 2>&1 | logger -t owncloud-setup fi service apache2 reload 2>&1 | logger -t owncloud-setup fi Plinth-0.8.1/actions/pagekite000077500000000000000000000216501266051671100161460ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for Plinth PageKite interface. """ import argparse import augeas import json import os import sys from plinth import action_utils from plinth.modules.pagekite import utils aug = None PATHS = { 'service_on': os.path.join(utils.CONF_PATH, '*', 'service_on', '*'), 'kitename': os.path.join(utils.CONF_PATH, '10_account.rc', 'kitename'), 'kitesecret': os.path.join(utils.CONF_PATH, '10_account.rc', 'kitesecret'), 'abort_not_configured': os.path.join(utils.CONF_PATH, '10_account.rc', 'abort_not_configured'), 'defaults': os.path.join(utils.CONF_PATH, '20_frontends.rc', 'defaults'), 'frontend': os.path.join(utils.CONF_PATH, '20_frontends.rc', 'frontend'), } def parse_arguments(): """Return parsed command line arguments as dictionary""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') # Enable/disable the pagekite service subparsers.add_parser('start-and-enable', help='Enable PageKite service') subparsers.add_parser('stop-and-disable', help='Disable PageKite service') subparsers.add_parser('restart', help='Restart PageKite service') subparsers.add_parser('is-disabled', help=('Whether PageKite is disabled in the file ' '/etc/pagekite.d/10_accounts.rc')) # Frontend subparsers.add_parser('get-frontend', help='Get pagekite frontend') set_frontend = subparsers.add_parser('set-frontend', help='Set pagekite frontend') set_frontend.add_argument('url', help='frontend url') # Kite details (name + secret) subparsers.add_parser('get-kite', help='Get configured kite name and secret') set_kite = subparsers.add_parser( 'set-kite', help='Configure kite name and its secret. Secret is read from stdin.') set_kite.add_argument('--kite-name', help='Name of the kite (eg: mybox.pagekite.me)') # Add/remove pagekite services (service_on entries) subparsers.add_parser('get-services', help='Get list of enabled services') add_service = subparsers.add_parser('add-service', help='Add a pagekite service') add_service.add_argument('--service', help='json service dictionary') remove_service = subparsers.add_parser('remove-service', help='Remove a pagekite service') remove_service.add_argument('--service', help='json service dictionary') return parser.parse_args() def subcommand_restart(_): """Restart the pagekite service""" action_utils.service_restart('pagekite') print('restarted') def subcommand_is_disabled(_): if aug.match(PATHS['abort_not_configured']): print('true') else: print('false') def subcommand_start_and_enable(_): aug.remove(PATHS['abort_not_configured']) aug.save() # 'start' alone sometimes fails, even if the service is not running action_utils.service_restart('pagekite') print('enabled') def subcommand_stop_and_disable(_): action_utils.service_stop('pagekite') aug.set(PATHS['abort_not_configured'], '') aug.save() print('disabled') def subcommand_get_frontend(_): """Get pagekite frontend url""" if aug.match(PATHS['defaults']): print("pagekite.net") else: url = aug.get(PATHS['frontend']) print(url or '') def subcommand_set_frontend(arguments): """Set pagekite frontend url, taking care of defaults and pagekite.net""" frontend_domain = arguments.url.split(':')[0] if frontend_domain in ('pagekite.net', 'defaults', 'default'): enable_pagekitenet_frontend() else: aug.remove(PATHS['defaults']) aug.set(PATHS['frontend'], arguments.url) aug.save() def enable_pagekitenet_frontend(): """Enable using default pageket.net frontend This disables any other frontends. """ aug.set(PATHS['defaults'], '') aug.remove(PATHS['frontend']) aug.save() print("enabled") def subcommand_get_services(arguments): """ lists all available (enabled) services """ for match in aug.match(PATHS['service_on']): service = dict([(param, aug.get(os.path.join(match, param))) for param in utils.SERVICE_PARAMS]) print(json.dumps(service)) def subcommand_remove_service(arguments): """Searches and removes the service(s) that match all given parameters""" service = utils.load_service(arguments.service) paths = get_existing_service_paths(service) # TODO: theoretically, everything to do here is: # [aug.remove(path) for path in paths] # but augeas won't let you save the changed files and doesn't say why for path in paths: filepath = convert_augeas_path_to_filepath(path) service_found = False with open(filepath, 'r') as file: lines = file.readlines() for i, line in enumerate(lines): if line.startswith('service_on') and \ all(param in line for param in service.values()): lines[i] = "" service_found = True break if service_found: with open(filepath, 'w') as file: file.writelines(lines) # abort to only allow deleting one service break action_utils.service_restart('pagekite') def get_existing_service_paths(service): """Return paths of existing services that match the given service params""" # construct an augeas query path with patterns like: # */service_on/*[protocol='http'] path = PATHS['service_on'] for param, value in service.items(): path += "[%s='%s']" % (param, value) return aug.match(path) def subcommand_add_service(arguments): """Add one service""" service = utils.load_service(arguments.service) if get_existing_service_paths(service): msg = "Service with the parameters %s already exists" raise RuntimeError(msg % service) root = get_new_service_path(service['protocol']) # TODO: after adding a service, augeas fails writing the config; # so add the service_on entry manually instead path = convert_augeas_path_to_filepath(root) with open(path, 'a') as servicefile: line = "\nservice_on = %s\n" % utils.convert_service_to_string(service) servicefile.write(line) action_utils.service_restart('pagekite') def convert_augeas_path_to_filepath(augpath, prefix='/files', suffix='service_on'): """Convert an augeas service_on path to the actual file path""" if augpath.startswith(prefix): augpath = augpath.replace(prefix, "", 1) index = augpath.rfind(suffix) if index: augpath = augpath[:index] return augpath.rstrip('/') def get_new_service_path(protocol): """Get the augeas path of a new service for a protocol This takes care of existing services using a /service_on/*/ query""" root = utils.get_augeas_servicefile_path(protocol) new_index = len(aug.match(root + '/*')) + 1 return os.path.join(root, str(new_index)) def subcommand_get_kite(_): """Print details of the currently configured kite""" kitename = aug.get(PATHS['kitename']) kitesecret = aug.get(PATHS['kitesecret']) print(kitename or '') print(kitesecret or '') def subcommand_set_kite(arguments): """Set details of the kite""" aug.set(PATHS['kitename'], arguments.kite_name) aug.set(PATHS['kitesecret'], sys.stdin.read()) aug.save() def augeas_load(): """Initialize Augeas.""" global aug aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + augeas.Augeas.NO_MODL_AUTOLOAD) aug.set('/augeas/load/Pagekite/lens', 'Pagekite.lns') aug.set('/augeas/load/Pagekite/incl[last() + 1]', '/etc/pagekite.d/*.rc') aug.load() def main(): """Parse arguments and perform all duties""" augeas_load() arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == "__main__": main() Plinth-0.8.1/actions/power000077500000000000000000000031541266051671100155100ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Configuration helper for power controls. """ import argparse import subprocess def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('restart', help='Restart the system') subparsers.add_parser('shutdown', help='Shut down the system') return parser.parse_args() def subcommand_restart(_): """Restart the system.""" subprocess.call('reboot') def subcommand_shutdown(_): """Shut down the system.""" subprocess.call(['shutdown', 'now']) def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/privoxy000077500000000000000000000046071266051671100161000ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for Privoxy server. """ import argparse import re from plinth import action_utils CONFIG_FILE = '/etc/privoxy/config' def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('setup', help='Perform Privoxy configuration setup') subparsers.add_parser('enable', help='Enable Privoxy service') subparsers.add_parser('disable', help='Disable Privoxy service') return parser.parse_args() def subcommand_setup(_): """Setup configuration for the first time.""" with open(CONFIG_FILE, 'r') as conffile: lines = conffile.readlines() with open(CONFIG_FILE, 'w') as conffile: written = False for line in lines: if re.match(r'#?listen-address', line) and not written: conffile.write('listen-address [::]:8118\n') written = True else: conffile.write(line) if not written: conffile.write('listen-address [::]:8118') action_utils.service_restart('privoxy') def subcommand_enable(_): """Start service.""" action_utils.service_enable('privoxy') def subcommand_disable(_): """Stop service.""" action_utils.service_disable('privoxy') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/quassel000077500000000000000000000032231266051671100160260ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Configuration helper for Quassel core. """ import argparse from plinth import action_utils def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('enable', help='Enable Quassel core service') subparsers.add_parser('disable', help='Disable Quassel core service') return parser.parse_args() def subcommand_enable(_): """Start service.""" action_utils.service_enable('quasselcore') def subcommand_disable(_): """Stop service.""" action_utils.service_disable('quasselcore') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/repro000077500000000000000000000047051266051671100155060ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Configuration helper for repro SIP proxy. """ import argparse from plinth import action_utils CONFIG = '/etc/repro/repro.config' def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('setup', help='Configure repro') subparsers.add_parser('enable', help='Enable repro service') subparsers.add_parser('disable', help='Disable repro service') return parser.parse_args() def subcommand_setup(_): """Configure repro.""" with open(CONFIG, 'r') as conf: lines = conf.readlines() with open(CONFIG, 'w') as conf: for line in lines: if line.startswith('Database1Path'): # workaround for Debian bug #803113 conf.write('Database1Path = /var/lib/repro\n') elif line.startswith('TLSPort'): conf.write('TLSPort = 5061\n') elif line.startswith('DisableHttpAuth'): # let apache handle authentication conf.write('DisableHttpAuth = true\n') else: conf.write(line) action_utils.service_restart('repro') action_utils.webserver_enable('repro-plinth') def subcommand_enable(_): """Start service.""" action_utils.service_enable('repro') def subcommand_disable(_): """Stop service.""" action_utils.service_disable('repro') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/restore000077500000000000000000000032211266051671100160320ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for reStore. """ import argparse from plinth import action_utils def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('enable', help='Enable reStore') subparsers.add_parser('disable', help='Disable reStore') return parser.parse_args() def subcommand_enable(_): """Enable reStore.""" action_utils.service_enable('node-restore') def subcommand_disable(_): """Disable reStore.""" action_utils.service_disable('node-restore') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/roundcube000077500000000000000000000055121266051671100163420ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for Roundcube server. """ import argparse import re import subprocess from plinth import action_utils APACHE_CONF = '/etc/apache2/conf-available/roundcube.conf' def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('pre-install', help='Perform Roundcube pre-install configuration') subparsers.add_parser('setup', help='Perform Roundcube configuration setup') subparsers.add_parser('enable', help='Enable Roundcube') subparsers.add_parser('disable', help='Disable Roundcube') return parser.parse_args() def subcommand_pre_install(_): """Preseed debconf values before packages are installed.""" subprocess.check_output( ['debconf-set-selections'], input=b'roundcube-core roundcube/dbconfig-install boolean true') subprocess.check_output( ['debconf-set-selections'], input=b'roundcube-core roundcube/database-type string sqlite3') def subcommand_setup(_): """Setup Roundcube Apache configuration.""" with open(APACHE_CONF, 'r') as conffile: lines = conffile.readlines() with open(APACHE_CONF, 'w') as conffile: for line in lines: match = re.match(r'#\s*(Alias /roundcube.*)', line) if match: conffile.write(match.group(1) + '\n') else: conffile.write(line) action_utils.service_reload('apache2') def subcommand_enable(_): """Enable web configuration and reload.""" action_utils.webserver_enable('roundcube') def subcommand_disable(_): """Disable web configuration and reload.""" action_utils.webserver_disable('roundcube') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/shaarli000077500000000000000000000032771266051671100160050ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for Shaarli. """ import argparse from plinth import action_utils def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('enable', help='Enable Shaarli site') subparsers.add_parser('disable', help='Disable Shaarli site') return parser.parse_args() def subcommand_enable(_): """Enable web configuration and reload.""" action_utils.webserver_enable('shaarli') def subcommand_disable(_): """Disable web configuration and reload.""" action_utils.webserver_disable('shaarli') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/ssh000077500000000000000000000054631266051671100151560ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Configuration helper for SSH server. """ import argparse import os import re import shutil import stat import subprocess import sys def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') get_keys = subparsers.add_parser('get-keys', help='Get SSH authorized keys') get_keys.add_argument('--username') set_keys = subparsers.add_parser('set-keys', help='Set SSH authorized keys') set_keys.add_argument('--username') set_keys.add_argument('--keys') return parser.parse_args() def _assert_valid_username(username): """Verify that username is a valid one.""" if not re.match(r'^[a-z][-a-z0-9_]*$', username): print('Bad username') sys.exit(1) def subcommand_get_keys(arguments): """Get SSH authorized keys.""" user = arguments.username _assert_valid_username(user) path = os.path.join(os.path.expanduser('~' + user), '.ssh', 'authorized_keys') try: with open(path, 'r') as file_handle: print(file_handle.read()) except FileNotFoundError: pass def subcommand_set_keys(arguments): """Set SSH authorized keys.""" user = arguments.username _assert_valid_username(user) subprocess.check_call(['mkhomedir_helper', user]) ssh_folder = os.path.join(os.path.expanduser('~' + user), '.ssh') key_file_path = os.path.join(ssh_folder, 'authorized_keys') if not os.path.exists(ssh_folder): os.makedirs(ssh_folder) shutil.chown(ssh_folder, user, 'users') with open(key_file_path, 'w') as file_handle: file_handle.write(arguments.keys) shutil.chown(key_file_path, user, 'users') os.chmod(key_file_path, stat.S_IRUSR | stat.S_IWUSR) def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/timezone-change000077500000000000000000000016301266051671100174260ustar00rootroot00000000000000#!/bin/sh # # This file is part of Plinth. # # 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 . # zonename="$1" tzpath="/usr/share/zoneinfo/$zonename" if [ -e "$tzpath" ] ; then cp "$tzpath" /etc/localtime echo "$zonename" > /etc/timezone exit 0 else echo "Time zone not valid" 1>&2 exit 1 fi Plinth-0.8.1/actions/tor000077500000000000000000000245611266051671100151650ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for the Tor service """ import argparse import codecs import os import re import socket import time from plinth import action_utils from plinth.modules.tor import is_enabled, is_running, get_augeas, \ get_real_apt_uri_path, iter_apt_uris, APT_TOR_PREFIX SERVICE_FILE = '/etc/firewalld/services/tor-{0}.xml' TOR_CONFIG = '/etc/tor/torrc' TOR_STATE_FILE = '/var/lib/tor/state' TOR_AUTH_COOKIE = '/var/run/tor/control.authcookie' def parse_arguments(): """Return parsed command line arguments as dictionary""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('setup', help='Setup Tor configuration') subparsers.add_parser('get-ports', help='Get list of Tor ports') subparsers.add_parser('get-hs', help='Get hidden service') configure = subparsers.add_parser('configure', help='Configure Tor') configure.add_argument('--service', choices=['enable', 'disable'], help='Configure Tor service') configure.add_argument('--hidden-service', choices=['enable', 'disable'], help='Configure hidden service') configure.add_argument('--apt-transport-tor', choices=['enable', 'disable'], help='Configure package download over Tor') return parser.parse_args() def subcommand_setup(_): """Setup Tor configuration after installing it.""" # XXX: Performing this as a post-install step instead of # pre-install setup for now. Creating a configuration before hand # leads dpkg to ask question about configuration overwrite which # makes aptcc backend of packagekit to wait forever even with # interactive=False. lines = """ # Run as non-exit bridge relay SocksPort [::]:9050 SocksPort 0.0.0.0:9050 ORPort auto ControlPort 9051 BridgeRelay 1 Exitpolicy reject *:* Exitpolicy reject6 *:* # Enable obfsproxy ServerTransportPlugin obfs3,obfs4 exec /usr/bin/obfs4proxy ExtORPort auto # Enable transparent proxy VirtualAddrNetworkIPv4 10.192.0.0/10 AutomapHostsOnResolve 1 TransPort 127.0.0.1:9040 TransPort [::1]:9040 DNSPort 127.0.0.1:9053 DNSPort [::1]:9053 """ with open(TOR_CONFIG, 'w') as conffile: conffile.writelines(lines) action_utils.service_restart('tor') _update_ports() def subcommand_get_ports(_): """Get list of Tor ports.""" ports = get_ports() for name, number in ports.items(): print(name, number) def subcommand_get_hs(_): """Print currently configured Tor hidden service information""" print(get_hidden_service()) def subcommand_configure(arguments): """Configure Tor.""" if arguments.service == 'disable': _disable() restart = arguments.service == None if arguments.hidden_service == 'enable': _enable_hs(restart=restart) elif arguments.hidden_service == 'disable': _disable_hs(restart=restart) if arguments.service == 'enable': _enable() if arguments.apt_transport_tor == 'enable': _enable_apt_transport_tor() elif arguments.apt_transport_tor == 'disable': _disable_apt_transport_tor() def get_ports(): """Return dict mapping port names to numbers.""" ports = {} try: ports['orport'] = _get_orport() except Exception: pass try: with open(TOR_STATE_FILE, 'r') as state_file: for line in state_file: matches = re.match( r'^\s*TransportProxy\s+(\S*)\s+\S+:(\d+)\s*$', line) if matches: ports[matches.group(1)] = matches.group(2) except FileNotFoundError: pass return ports def _get_orport(): """Return the ORPort by querying running instance.""" cookie = open(TOR_AUTH_COOKIE, 'rb').read() cookie = codecs.encode(cookie, 'hex').decode() commands = '''AUTHENTICATE {cookie} GETINFO net/listeners/or QUIT '''.format(cookie=cookie) tor_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tor_socket.connect(('localhost', 9051)) tor_socket.send(commands.encode()) response = tor_socket.recv(1024) tor_socket.close() line = response.split(b'\r\n')[1].decode() matches = re.match(r'.*="[^:]+:(\d+)"', line) return matches.group(1) def get_hidden_service(): """Return a string with configured Tor hidden service information""" hs_dir = None hs_ports = [] try: with open(TOR_CONFIG, 'r') as conf_file: for line in conf_file: if line.startswith('HiddenServiceDir'): hs_dir = line.split()[1] elif line.startswith('HiddenServicePort'): hs_ports.append(line.split()[1]) except FileNotFoundError: return 'error' if not hs_dir: return '' try: with open(os.path.join(hs_dir, 'hostname'), 'r') as conf_file: hs_hostname = conf_file.read().strip() except Exception: return 'error' return hs_hostname + ' ' + ','.join(hs_ports) def _enable(): """Enable and start the service.""" action_utils.service_enable('tor') _update_ports() def _disable(): """Disable and stop the service.""" _disable_apt_transport_tor() action_utils.service_disable('tor') def _enable_hs(restart=True): """Enable Tor hidden service""" if get_hidden_service(): return with open(TOR_CONFIG, 'r') as conffile: lines = conffile.readlines() lines.append('# Hidden Service configured by Plinth\n') lines.append('HiddenServiceDir /var/lib/tor/hidden_service/\n') lines.append('HiddenServicePort 80 127.0.0.1:80\n') lines.append('HiddenServicePort 443 127.0.0.1:443\n') lines.append('# end of Plinth Hidden Service config\n') with open(TOR_CONFIG, 'w') as conffile: conffile.writelines(lines) if restart: if is_enabled() and is_running(): action_utils.service_restart('tor') # wait until hidden service information is available tries = 0 while get_hidden_service() in ('', 'error'): tries += 1 if tries >= 12: return time.sleep(10) def _disable_hs(restart=True): """Disable Tor hidden service""" if not get_hidden_service(): return with open(TOR_CONFIG, 'r') as conffile: lines = conffile.readlines() filtered_lines = [] removing = False for line in lines: if removing: if line.startswith('# end of Plinth Hidden Service config'): # last line of Plinth hidden service block # stop removing after this line removing = False elif not line.startswith('HiddenService'): # end of Plinth hidden service block # stop removing lines removing = False filtered_lines.append(line) else: if line.startswith('# Hidden Service configured by Plinth'): # start of Plinth hidden service block # remove following HiddenService lines removing = True else: filtered_lines.append(line) with open(TOR_CONFIG, 'w') as conffile: conffile.writelines(filtered_lines) if restart: if is_enabled() and is_running(): action_utils.service_restart('tor') def _enable_apt_transport_tor(): """Enable package download over Tor.""" try: aug = get_augeas() except Exception: # If there was an error, don't proceed print('Error: Unable to understand sources format.') exit(1) for uri_path in iter_apt_uris(aug): uri_path = get_real_apt_uri_path(aug, uri_path) uri = aug.get(uri_path) if uri.startswith('http://') or uri.startswith('https://'): aug.set(uri_path, APT_TOR_PREFIX + uri) aug.save() def _disable_apt_transport_tor(): """Disable package download over Tor.""" try: aug = get_augeas() except Exception: # Disable what we can, so APT is not unusable. pass for uri_path in iter_apt_uris(aug): uri_path = get_real_apt_uri_path(aug, uri_path) uri = aug.get(uri_path) if uri.startswith(APT_TOR_PREFIX): aug.set(uri_path, uri[len(APT_TOR_PREFIX):]) aug.save() def _update_ports(): """Update firewall service information.""" ready = False tries = 0 # port information may not be available immediately after Tor started while not ready: ports = get_ports() ready = 'orport' in ports and 'obfs3' in ports and 'obfs4' in ports if ready: break tries += 1 if tries >= 12: return time.sleep(10) lines = """ Tor - {0} """ for name, number in ports.items(): try: with open(SERVICE_FILE.format(name), 'w') as service_file: service_file.writelines(lines.format(name, number)) except FileNotFoundError: return # XXX: We should ideally do firewalld reload instead. However, # firewalld seems to fail to successfully reload sometimes. action_utils.service_restart('firewalld') def main(): """Parse arguments and perform all duties""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/transmission000077500000000000000000000054611266051671100171100ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for Transmission daemon. """ import argparse import json import subprocess import sys from plinth import action_utils SERVICE_CONFIG = '/etc/default/transmission-daemon' TRANSMISSION_CONFIG = '/etc/transmission-daemon/settings.json' def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') # Enable service subparsers.add_parser('enable', help='Enable Transmission service') # Disable service subparsers.add_parser('disable', help='Disable Transmission service') # Merge given JSON configration with existing subparsers.add_parser( 'merge-configuration', help='Merge JSON configuration from stdin with existing') return parser.parse_args() def subcommand_enable(_): """Start Transmission service.""" action_utils.service_enable('transmission-daemon') action_utils.webserver_enable('transmission-plinth') def subcommand_disable(_): """Stop Transmission service.""" action_utils.webserver_disable('transmission-plinth') action_utils.service_disable('transmission-daemon') def subcommand_merge_configuration(arguments): """Merge given JSON configuration with existing configuration.""" configuration = sys.stdin.read() configuration = json.loads(configuration) current_configuration = open(TRANSMISSION_CONFIG, 'r').read() current_configuration = json.loads(current_configuration) new_configuration = current_configuration new_configuration.update(configuration) new_configuration = json.dumps(new_configuration, indent=4, sort_keys=True) open(TRANSMISSION_CONFIG, 'w').write(new_configuration) action_utils.service_reload('transmission-daemon') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/upgrades000077500000000000000000000104421266051671100161640ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Configures or runs unattended-upgrades """ import argparse import os import re import subprocess import sys CONF_FILE = '/etc/apt/apt.conf.d/50unattended-upgrades' AUTO_CONF_FILE = '/etc/apt/apt.conf.d/20auto-upgrades' def parse_arguments(): """Return parsed command line arguments as dictionary""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') # Run unattended-upgrades subparsers.add_parser('run', help='Upgrade packages on the system') # Check if automatic upgrades are enabled subparsers.add_parser('check-auto', help='Check if automatic upgrades are enabled') # Enable automatic upgrades subparsers.add_parser('enable-auto', help='Enable automatic upgrades') # Disable automatic upgrades subparsers.add_parser('disable-auto', help='Disable automatic upgrades.') return parser.parse_args() def subcommand_run(_): """Run unattended-upgrades""" try: setup() except FileNotFoundError: print('Error: Could not configure unattended-upgrades.', file=sys.stderr) sys.exit(1) try: subprocess.Popen( ['unattended-upgrades', '-v'], stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, close_fds=True, start_new_session=True) except FileNotFoundError: print('Error: unattended-upgrades is not available.', file=sys.stderr) sys.exit(2) except Exception as error: print('Error: {0}'.format(error), file=sys.stderr) sys.exit(3) def subcommand_check_auto(_): """Check if automatic upgrades are enabled""" arguments = ['apt-config', 'shell', 'UpdateInterval', 'APT::Periodic::Update-Package-Lists'] try: output = subprocess.check_output(arguments).decode() except subprocess.CalledProcessError as error: print('Error: {0}'.format(error), file=sys.stderr) sys.exit(1) update_interval = 0 match = re.match(r"UpdateInterval='(.*)'", output) if match: update_interval = int(match.group(1)) print(bool(update_interval)) def subcommand_enable_auto(_): """Enable automatic upgrades""" try: setup() except FileNotFoundError: print('Error: Could not configure unattended-upgrades.', file=sys.stderr) sys.exit(1) with open(AUTO_CONF_FILE, 'w') as conffile: conffile.write('APT::Periodic::Update-Package-Lists "1";\n') conffile.write('APT::Periodic::Unattended-Upgrade "1";\n') def subcommand_disable_auto(_): """Disable automatic upgrades""" try: os.rename(AUTO_CONF_FILE, AUTO_CONF_FILE + '.disabled') except FileNotFoundError: print('Already disabled.') def setup(): """Sets unattended-upgrades config to upgrade any package from Debian.""" with open(CONF_FILE, 'r') as conffile: lines = conffile.readlines() for line in lines: if re.match(r'\s*"o(rigin)?=Debian";', line): return # already configured with open(CONF_FILE, 'w') as conffile: for line in lines: conffile.write(line) if re.match(r'\s*Unattended-Upgrade::Origins-Pattern\s+{', line): conffile.write(' "origin=Debian";\n') def main(): """Parse arguments and perform all duties""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/actions/xmpp000077500000000000000000000213001266051671100153310ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python -*- # # This file is part of Plinth. # # 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 . # """ Configuration helper for the ejabberd service """ import argparse import os import shutil import socket import subprocess import re from plinth import action_utils JWCHAT_CONFIG = '/etc/jwchat/config.js' EJABBERD_CONFIG = '/etc/ejabberd/ejabberd.yml' EJABBERD_BACKUP = '/var/log/ejabberd/ejabberd.dump' EJABBERD_BACKUP_NEW = '/var/log/ejabberd/ejabberd_new.dump' def parse_arguments(): """Return parsed command line arguments as dictionary""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') # Preseed debconf values before packages are installed. pre_install = subparsers.add_parser( 'pre-install', help='Preseed debconf values before packages are installed.') pre_install.add_argument( '--domainname', help='The domain name that will be used by the XMPP service.') # Setup jwchat apache conf subparsers.add_parser('setup', help='Setup jwchat apache conf') subparsers.add_parser('enable', help='Enable XMPP service') subparsers.add_parser('disable', help='Disable XMPP service') # Prepare ejabberd for hostname change pre_hostname_change = subparsers.add_parser( 'pre-change-hostname', help='Prepare ejabberd for nodename change') pre_hostname_change.add_argument('--old-hostname', help='Previous hostname') pre_hostname_change.add_argument('--new-hostname', help='New hostname') # Update ejabberd nodename hostname_change = subparsers.add_parser('change-hostname', help='Update ejabberd nodename') hostname_change.add_argument('--old-hostname', help='Previous hostname') hostname_change.add_argument('--new-hostname', help='New hostname') # Update ejabberd and jwchat with new domainname domainname_change = subparsers.add_parser( 'change-domainname', help='Update ejabberd and jwchat with new domainname') domainname_change.add_argument('--domainname', help='New domainname') return parser.parse_args() def subcommand_pre_install(arguments): """Preseed debconf values before packages are installed.""" domainname = arguments.domainname if not domainname: # If new domainname is blank, use hostname instead. domainname = socket.gethostname() subprocess.check_output( ['debconf-set-selections'], input=b'ejabberd ejabberd/hostname string ' + domainname.encode()) subprocess.check_output( ['debconf-set-selections'], input=b'jwchat jwchat/ApacheServerName string ' + domainname.encode()) def subcommand_setup(_): """Enabled LDAP authentication and setup jwchat apache conf""" with open(EJABBERD_CONFIG, 'r') as conffile: lines = conffile.readlines() with open(EJABBERD_CONFIG, 'w') as conffile: for line in lines: if re.match(r'^\s*tls:\s+true', line): conffile.write(' tls: false\n') elif 'auth_method: internal' in line: conffile.write('## ' + line) elif '## auth_method: ldap' in line: conffile.write('auth_method: ldap\n') elif '## ldap_servers:' in line: conffile.write('ldap_servers:\n') conffile.write(' - "localhost"\n') elif '## ldap_base:' in line: conffile.write('ldap_base: "ou=users,dc=thisbox"\n') else: conffile.write(line) try: subprocess.check_output(['ejabberdctl', 'restart']) except subprocess.CalledProcessError as err: print('Failed to restart ejabberd with new configuration: %s', err) with action_utils.WebserverChange() as webserver_change: webserver_change.disable('jwchat', kind='site') webserver_change.enable('jwchat-plinth') def subcommand_enable(_): """Enable XMPP service""" action_utils.service_enable('ejabberd') action_utils.webserver_enable('jwchat-plinth') def subcommand_disable(_): """Disable XMPP service""" action_utils.webserver_disable('jwchat-plinth') action_utils.service_disable('ejabberd') def subcommand_pre_change_hostname(arguments): """Prepare ejabberd for hostname change""" if not shutil.which('ejabberdctl'): print('ejabberdctl not found. Is ejabberd installed?') return old_hostname = arguments.old_hostname new_hostname = arguments.new_hostname subprocess.call(['ejabberdctl', 'backup', EJABBERD_BACKUP]) try: subprocess.check_output(['ejabberdctl', 'mnesia-change-nodename', 'ejabberd@' + old_hostname, 'ejabberd@' + new_hostname, EJABBERD_BACKUP, EJABBERD_BACKUP_NEW]) os.remove(EJABBERD_BACKUP) except subprocess.CalledProcessError as err: print('Failed to change hostname in ejabberd backup database: %s', err) def subcommand_change_hostname(arguments): """Update ejabberd and jwchat with new hostname""" if not shutil.which('ejabberdctl'): print('ejabberdctl not found. Is ejabberd installed?') return action_utils.service_stop('ejabberd') subprocess.call(['pkill', '-u', 'ejabberd']) # Make sure there aren't files in the Mnesia spool dir os.makedirs('/var/lib/ejabberd/oldfiles', exist_ok=True) subprocess.call('mv /var/lib/ejabberd/*.* /var/lib/ejabberd/oldfiles/', shell=True) action_utils.service_start('ejabberd') # restore backup database if os.path.exists(EJABBERD_BACKUP_NEW): try: subprocess.check_output(['ejabberdctl', 'restore', EJABBERD_BACKUP_NEW]) os.remove(EJABBERD_BACKUP_NEW) except subprocess.CalledProcessError as err: print('Failed to restore ejabberd backup database: %s', err) else: print('Could not load ejabberd backup database: %s not found' % EJABBERD_BACKUP_NEW) def subcommand_change_domainname(arguments): """Update ejabberd and jwchat with new domainname""" if not shutil.which('ejabberdctl'): print('ejabberdctl not found. Is ejabberd installed?') return domainname = arguments.domainname if not domainname: # If new domainname is blank, use hostname instead. domainname = socket.gethostname() # update jwchat's sitename, if it's installed if os.path.exists(JWCHAT_CONFIG): with open(JWCHAT_CONFIG, 'r') as conffile: lines = conffile.readlines() with open(JWCHAT_CONFIG, 'w') as conffile: for line in lines: if re.match(r'\s*var\s+SITENAME', line): conffile.write('var SITENAME = "' + domainname + '";\n') else: conffile.write(line) else: print('Skipping configuring jwchat sitename: %s not found', JWCHAT_CONFIG) action_utils.service_stop('ejabberd') subprocess.call(['pkill', '-u', 'ejabberd']) # Add updated domainname to ejabberd hosts list. with open(EJABBERD_CONFIG, 'r') as conffile: lines = conffile.readlines() with open(EJABBERD_CONFIG, 'w') as conffile: in_hosts = False for line in lines: if in_hosts: if re.match(r'\s*-\s*', line): continue in_hosts = False conffile.write(line) if re.match(r'\s*hosts:', line): in_hosts = True conffile.write(' - "' + domainname + '"\n') action_utils.service_start('ejabberd') def main(): """Parse arguments and perform all duties""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() Plinth-0.8.1/bin/000077500000000000000000000000001266051671100135335ustar00rootroot00000000000000Plinth-0.8.1/bin/plinth000077500000000000000000000013671266051671100147660ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # import plinth.__main__ plinth.__main__.main() Plinth-0.8.1/data/000077500000000000000000000000001266051671100136745ustar00rootroot00000000000000Plinth-0.8.1/data/etc/000077500000000000000000000000001266051671100144475ustar00rootroot00000000000000Plinth-0.8.1/data/etc/apache2/000077500000000000000000000000001266051671100157525ustar00rootroot00000000000000Plinth-0.8.1/data/etc/apache2/conf-available/000077500000000000000000000000001266051671100206155ustar00rootroot00000000000000Plinth-0.8.1/data/etc/apache2/conf-available/deluge-plinth.conf000066400000000000000000000002101266051671100242160ustar00rootroot00000000000000## ## On all sites, provide Deluge on a default path: /deluge ## ProxyPass http://localhost:8112 Plinth-0.8.1/data/etc/apache2/conf-available/ikiwiki-plinth.conf000066400000000000000000000010031266051671100244120ustar00rootroot00000000000000Alias /ikiwiki /var/www/ikiwiki Alias /ikiwiki-auth /var/www/ikiwiki AddHandler cgi-script .cgi Options +ExecCGI Options +ExecCGI AuthType basic AuthName "FreedomBox Login" AuthBasicProvider ldap AuthLDAPUrl "ldap:///ou=users,dc=thisbox?uid" AuthLDAPGroupAttribute memberUid AuthLDAPGroupAttributeIsDN off Require ldap-group cn=admin,ou=groups,dc=thisbox Require ldap-group cn=wiki,ou=groups,dc=thisbox Plinth-0.8.1/data/etc/apache2/conf-available/jwchat-plinth.conf000066400000000000000000000005361266051671100242440ustar00rootroot00000000000000Alias /jwchat /usr/share/jwchat/www Options +Indexes +Multiviews +FollowSymLinks # proxy for BOSH server ProxyPass /http-bind/ http://localhost:5280/http-bind/ ProxyPassReverse /http-bind/ http://localhost:5280/http-bind/ Require all granted Plinth-0.8.1/data/etc/apache2/conf-available/repro-plinth.conf000066400000000000000000000006601266051671100241110ustar00rootroot00000000000000## ## On all sites, provide repro admin interface on a path: /repro ## Only allow users of admin LDAP group. ## ProxyPass http://localhost:5080 AuthType basic AuthName "FreedomBox Login" AuthBasicProvider ldap AuthLDAPUrl "ldap:///ou=users,dc=thisbox?uid" AuthLDAPGroupAttribute memberUid AuthLDAPGroupAttributeIsDN off Require ldap-group cn=admin,ou=groups,dc=thisbox Plinth-0.8.1/data/etc/apache2/conf-available/transmission-plinth.conf000066400000000000000000000007521266051671100255150ustar00rootroot00000000000000## ## On all sites, provide Transmission on a default path: /transmission ## ## Requires the following Apache modules to be enabled: ## mod_headers ## mod_proxy ## mod_proxy_http ## ProxyPass http://localhost:9091/transmission ## Send the scheme from user's request to enable Transmission to ## redirect URLs, set cookies, set absolute URLs (if any) ## properly. RequestHeader set X-Forwarded-Proto 'https' env=HTTPS Plinth-0.8.1/data/etc/apache2/sites-available/000077500000000000000000000000001266051671100210175ustar00rootroot00000000000000Plinth-0.8.1/data/etc/apache2/sites-available/plinth-ssl.conf000066400000000000000000000010231266051671100237570ustar00rootroot00000000000000## ## When enabled allows only SSL traffic onto Plinth. This is done by ## redirecting non-secure traffic to secure traffic. The redirect is ## permanent as recommended in: ## http://tools.ietf.org/html/rfc6797#section-7 ## ## Requires the following Apache modules to be enabled: ## mod_rewrite ## mod_gnutls ## RewriteEngine on # FIXME: Workaround for mod_gnutls (Debian Bug #514005) RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] Plinth-0.8.1/data/etc/apache2/sites-available/plinth.conf000066400000000000000000000020721266051671100231650ustar00rootroot00000000000000## ## On all sites, provide Plinth on a default path: /plinth ## ## Requires the following Apache modules to be enabled: ## mod_headers ## mod_proxy ## mod_proxy_http ## ProxyPass http://127.0.0.1:8000/plinth ## Send the scheme from user's request to enable Plinth to redirect ## URLs, set cookies, set absolute URLs (if any) properly. RequestHeader set X-Forwarded-Proto 'https' env=HTTPS ## Allow traffic only from private networks ## IPv4 local addresses Require ip 127.0.0.0/8 ## IPv4 link local addresses Require ip 169.254.0.0/16 ## IPv4 class A private addresses Require ip 10.0.0.0/8 ## IPv4 class B private addresses Require ip 172.16.0.0/12 ## IPv4 class C private addresses Require ip 192.168.0.0/16 ## IPv6 local address Require ip ::1 ## IPv6 link local addresses Require ip fe80::/10 ## IPv6 private addresses Require ip fc00::/7 Plinth-0.8.1/data/etc/ikiwiki/000077500000000000000000000000001266051671100161075ustar00rootroot00000000000000Plinth-0.8.1/data/etc/ikiwiki/plinth-blog.setup000066400000000000000000000023541266051671100214140ustar00rootroot00000000000000#!/usr/bin/perl # Ikiwiki setup automator for Plinth (blog version). require IkiWiki::Setup::Automator; our $wikiname=$ARGV[0]; our $admin=$ARGV[1]; if (($wikiname eq "") || ($admin eq "")) { print "Usage: ikiwiki -setup /etc/ikiwiki/plinth-blog.setup blog_name admin_name"; exit; } our $wikiname_short=IkiWiki::Setup::Automator::sanitize_wikiname($wikiname); IkiWiki::Setup::Automator->import( wikiname => $wikiname, adminuser => [$admin], rcs => "git", srcdir => "/var/lib/ikiwiki/$wikiname_short", destdir => "/var/www/ikiwiki/$wikiname_short", repository => "/var/lib/ikiwiki/$wikiname_short.git", dumpsetup => "/var/lib/ikiwiki/$wikiname_short.setup", url => "/ikiwiki/$wikiname_short", cgiurl => "/ikiwiki/$wikiname_short/ikiwiki.cgi", cgiauthurl => "/ikiwiki-auth/$wikiname_short/ikiwiki.cgi", cgi_wrapper => "/var/www/ikiwiki/$wikiname_short/ikiwiki.cgi", add_plugins => [qw{goodstuff websetup comments calendar sidebar trail httpauth}], rss => 1, atom => 1, syslog => 1, example => "blog", comments_pagespec => "posts/* and !*/Discussion", archive_pagespec => "page(posts/*) and !*/Discussion", global_sidebars => 0, discussion => 0, tagbase => "tags", ) Plinth-0.8.1/data/etc/ikiwiki/plinth-wiki.setup000066400000000000000000000017571266051671100214420ustar00rootroot00000000000000#!/usr/bin/perl # Ikiwiki setup automator for Plinth. require IkiWiki::Setup::Automator; our $wikiname=$ARGV[0]; our $admin=$ARGV[1]; if (($wikiname eq "") || ($admin eq "")) { print "Usage: ikiwiki -setup /etc/ikiwiki/plinth-wiki.setup wiki_name admin_name"; exit; } our $wikiname_short=IkiWiki::Setup::Automator::sanitize_wikiname($wikiname); IkiWiki::Setup::Automator->import( wikiname => $wikiname, adminuser => [$admin], rcs => "git", srcdir => "/var/lib/ikiwiki/$wikiname_short", destdir => "/var/www/ikiwiki/$wikiname_short", repository => "/var/lib/ikiwiki/$wikiname_short.git", dumpsetup => "/var/lib/ikiwiki/$wikiname_short.setup", url => "/ikiwiki/$wikiname_short", cgiurl => "/ikiwiki/$wikiname_short/ikiwiki.cgi", cgiauthurl => "/ikiwiki-auth/$wikiname_short/ikiwiki.cgi", cgi_wrapper => "/var/www/ikiwiki/$wikiname_short/ikiwiki.cgi", add_plugins => [qw{goodstuff websetup httpauth}], rss => 1, atom => 1, syslog => 1, ) Plinth-0.8.1/data/etc/init.d/000077500000000000000000000000001266051671100156345ustar00rootroot00000000000000Plinth-0.8.1/data/etc/init.d/plinth000077500000000000000000000036441266051671100170670ustar00rootroot00000000000000#!/bin/sh # # This file is part of Plinth. # # 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 . # ### BEGIN INIT INFO # Provides: plinth # Required-Start: $network $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: plinth web frontend # Description: # Control the plinth web frontend. ### END INIT INFO # This file is /etc/init.d/plinth DESC="embedded web frontend" NAME=plinth DAEMON=/usr/bin/plinth PID_FILE=/var/run/plinth.pid SERVER_DIR=/plinth PLINTH_USER=plinth PLINTH_GROUP=plinth test -x $DAEMON || exit 0 . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" start_daemon -p $PID_FILE $DAEMON --pidfile=$PID_FILE \ --server_dir=$SERVER_DIR log_end_msg $? ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" killproc -p $PID_FILE $DAEMON RETVAL=$? [ $RETVAL -eq 0 ] && [ -e "$PID_FILE" ] && rm -f $PID_FILE log_end_msg $RETVAL ;; restart|force-reload) $0 stop $0 start ;; status) status_of_proc -p $PID_FILE "$DAEMON" plinth && exit 0 || exit $? ;; *) echo "Usage: $NAME {start|stop|restart|force-reload|status}" >&2 exit 1 ;; esac Plinth-0.8.1/data/etc/plinth/000077500000000000000000000000001266051671100157455ustar00rootroot00000000000000Plinth-0.8.1/data/etc/plinth/modules-enabled/000077500000000000000000000000001266051671100210055ustar00rootroot00000000000000Plinth-0.8.1/data/etc/plinth/modules-enabled/apps000066400000000000000000000000241266051671100216670ustar00rootroot00000000000000plinth.modules.apps Plinth-0.8.1/data/etc/plinth/modules-enabled/avahi000066400000000000000000000000251266051671100220150ustar00rootroot00000000000000plinth.modules.avahi Plinth-0.8.1/data/etc/plinth/modules-enabled/config000066400000000000000000000000261266051671100221730ustar00rootroot00000000000000plinth.modules.config Plinth-0.8.1/data/etc/plinth/modules-enabled/datetime000066400000000000000000000000301266051671100225150ustar00rootroot00000000000000plinth.modules.datetime Plinth-0.8.1/data/etc/plinth/modules-enabled/deluge000066400000000000000000000000261266051671100221730ustar00rootroot00000000000000plinth.modules.deluge Plinth-0.8.1/data/etc/plinth/modules-enabled/diagnostics000066400000000000000000000000331266051671100232330ustar00rootroot00000000000000plinth.modules.diagnostics Plinth-0.8.1/data/etc/plinth/modules-enabled/dynamicdns000066400000000000000000000000321266051671100230540ustar00rootroot00000000000000plinth.modules.dynamicdns Plinth-0.8.1/data/etc/plinth/modules-enabled/firewall000066400000000000000000000000301266051671100225260ustar00rootroot00000000000000plinth.modules.firewall Plinth-0.8.1/data/etc/plinth/modules-enabled/first_boot000066400000000000000000000000321266051671100230750ustar00rootroot00000000000000plinth.modules.first_boot Plinth-0.8.1/data/etc/plinth/modules-enabled/help000066400000000000000000000000241266051671100216540ustar00rootroot00000000000000plinth.modules.help Plinth-0.8.1/data/etc/plinth/modules-enabled/ikiwiki000066400000000000000000000000271266051671100223670ustar00rootroot00000000000000plinth.modules.ikiwiki Plinth-0.8.1/data/etc/plinth/modules-enabled/letsencrypt000066400000000000000000000000331266051671100233000ustar00rootroot00000000000000plinth.modules.letsencrypt Plinth-0.8.1/data/etc/plinth/modules-enabled/monkeysphere000066400000000000000000000000341266051671100234360ustar00rootroot00000000000000plinth.modules.monkeysphere Plinth-0.8.1/data/etc/plinth/modules-enabled/mumble000066400000000000000000000000261266051671100222070ustar00rootroot00000000000000plinth.modules.mumble Plinth-0.8.1/data/etc/plinth/modules-enabled/names000066400000000000000000000000251266051671100220300ustar00rootroot00000000000000plinth.modules.names Plinth-0.8.1/data/etc/plinth/modules-enabled/networks000066400000000000000000000000271266051671100226030ustar00rootroot00000000000000plinth.modules.networksPlinth-0.8.1/data/etc/plinth/modules-enabled/openvpn000066400000000000000000000000271266051671100224140ustar00rootroot00000000000000plinth.modules.openvpn Plinth-0.8.1/data/etc/plinth/modules-enabled/owncloud000066400000000000000000000000301266051671100225530ustar00rootroot00000000000000plinth.modules.owncloud Plinth-0.8.1/data/etc/plinth/modules-enabled/pagekite000066400000000000000000000000301266051671100225120ustar00rootroot00000000000000plinth.modules.pagekite Plinth-0.8.1/data/etc/plinth/modules-enabled/power000066400000000000000000000000251266051671100220610ustar00rootroot00000000000000plinth.modules.power Plinth-0.8.1/data/etc/plinth/modules-enabled/privoxy000066400000000000000000000000271266051671100224470ustar00rootroot00000000000000plinth.modules.privoxy Plinth-0.8.1/data/etc/plinth/modules-enabled/quassel000066400000000000000000000000271266051671100224040ustar00rootroot00000000000000plinth.modules.quassel Plinth-0.8.1/data/etc/plinth/modules-enabled/repro000066400000000000000000000000251266051671100220540ustar00rootroot00000000000000plinth.modules.repro Plinth-0.8.1/data/etc/plinth/modules-enabled/restore000066400000000000000000000000271266051671100224120ustar00rootroot00000000000000plinth.modules.restore Plinth-0.8.1/data/etc/plinth/modules-enabled/roundcube000066400000000000000000000000311266051671100227100ustar00rootroot00000000000000plinth.modules.roundcube Plinth-0.8.1/data/etc/plinth/modules-enabled/shaarli000066400000000000000000000000271266051671100223520ustar00rootroot00000000000000plinth.modules.shaarli Plinth-0.8.1/data/etc/plinth/modules-enabled/system000066400000000000000000000000261266051671100222520ustar00rootroot00000000000000plinth.modules.system Plinth-0.8.1/data/etc/plinth/modules-enabled/tor000066400000000000000000000000231266051671100215270ustar00rootroot00000000000000plinth.modules.tor Plinth-0.8.1/data/etc/plinth/modules-enabled/transmission000066400000000000000000000000341266051671100234560ustar00rootroot00000000000000plinth.modules.transmission Plinth-0.8.1/data/etc/plinth/modules-enabled/upgrades000066400000000000000000000000301266051671100225330ustar00rootroot00000000000000plinth.modules.upgrades Plinth-0.8.1/data/etc/plinth/modules-enabled/users000066400000000000000000000000251266051671100220660ustar00rootroot00000000000000plinth.modules.users Plinth-0.8.1/data/etc/plinth/modules-enabled/xmpp000066400000000000000000000000241266051671100217100ustar00rootroot00000000000000plinth.modules.xmpp Plinth-0.8.1/data/etc/plinth/plinth.config000066400000000000000000000026771266051671100204460ustar00rootroot00000000000000[Path] # directory locations file_root = /usr/share/plinth config_dir = /etc/plinth data_dir = /var/lib/plinth log_dir = /var/log/plinth pid_dir = /var/run server_dir = /plinth actions_dir = /usr/share/plinth/actions doc_dir = /usr/share/doc/plinth # file locations store_file = %(data_dir)s/plinth.sqlite3 status_log_file = %(log_dir)s/status.log access_log_file = %(log_dir)s/access.log pidfile = %(pid_dir)s/plinth.pid [Network] host = 127.0.0.1 port = 8000 # Enable the following only if Plinth is behind a proxy server. The # proxy server should properly clean and the following HTTP headers: # X-Forwarded-Host # X-Forwarded-Proto # If you enable these unnecessarily, this will lead to serious security # problems. For more information, see # https://docs.djangoproject.com/en/1.7/ref/settings/ # # These are enabled by default in Plinth because the default # configuration allows only connections from localhost # # Leave the values blank to disable use_x_forwarded_host = True secure_proxy_ssl_header = HTTP_X_FORWARDED_PROTO [Misc] box_name = FreedomBox # The danube_edition changes the firstboot process and offers entering a # voucher for a freedombox.me sub-domain. This functionality requires # additional debian packages to be installed: # # pagekite, python3-requests # # They are not added as dependencies to keep the normal installation images # lean, but make sure to add them if you want to build danube-edition images. danube_edition = False Plinth-0.8.1/data/etc/sudoers.d/000077500000000000000000000000001266051671100163555ustar00rootroot00000000000000Plinth-0.8.1/data/etc/sudoers.d/plinth000066400000000000000000000000751266051671100176000ustar00rootroot00000000000000plinth ALL=(ALL:ALL) NOPASSWD:/usr/share/plinth/actions/* Plinth-0.8.1/data/lib/000077500000000000000000000000001266051671100144425ustar00rootroot00000000000000Plinth-0.8.1/data/lib/systemd/000077500000000000000000000000001266051671100161325ustar00rootroot00000000000000Plinth-0.8.1/data/lib/systemd/system/000077500000000000000000000000001266051671100174565ustar00rootroot00000000000000Plinth-0.8.1/data/lib/systemd/system/plinth.service000066400000000000000000000016331266051671100223410ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # [Unit] Description=Plinth Web Interface Documentation=man:plinth(1) After=network.target [Service] ExecStart=/usr/bin/plinth --no-daemon Restart=on-failure ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target Plinth-0.8.1/data/usr/000077500000000000000000000000001266051671100145055ustar00rootroot00000000000000Plinth-0.8.1/data/usr/lib/000077500000000000000000000000001266051671100152535ustar00rootroot00000000000000Plinth-0.8.1/data/usr/lib/firewalld/000077500000000000000000000000001266051671100172245ustar00rootroot00000000000000Plinth-0.8.1/data/usr/lib/firewalld/services/000077500000000000000000000000001266051671100210475ustar00rootroot00000000000000Plinth-0.8.1/data/usr/lib/firewalld/services/mumble-plinth.xml000066400000000000000000000011341266051671100243450ustar00rootroot00000000000000 Mumble Voice Chat Server Mumble is an open source, low-latency, encrypted, high quality voice chat software primarily intended for use while gaming. Mumble uses a client-server architecture which allows users to talk to each other via the same server. Enable this if you are running a Mumble server and if you wish to connect external clients such as Mumble desktop client and Plumble Android app to your Mumble server. Plinth-0.8.1/data/usr/lib/firewalld/services/quassel-plinth.xml000066400000000000000000000004211266051671100245370ustar00rootroot00000000000000 Quassel IRC Quassel is a distributed IRC client, meaning that one or more clients can attach to and detach from the central core. Plinth-0.8.1/data/usr/lib/firewalld/services/sip-plinth.xml000066400000000000000000000006431266051671100236630ustar00rootroot00000000000000 SIP The Session Initiaion Protocol (SIP) is commonly used in Internet telephony for audio/video calls and instant messaging. Enable this if you are running a SIP proxy, registrar, redirector or gateway server over an unencrypted channel. Plinth-0.8.1/data/usr/lib/firewalld/services/sip-tls-plinth.xml000066400000000000000000000007001266051671100244550ustar00rootroot00000000000000 SIP over TLS/DTLS The Session Initiaion Protocol (SIP) is commonly used in Internet telephony for audio/video calls and instant messaging. Enable this if you are running a SIP proxy, registrar, redirector or gateway server over a channel encrypted using TLS or DTLS. Plinth-0.8.1/data/usr/lib/freedombox/000077500000000000000000000000001266051671100174055ustar00rootroot00000000000000Plinth-0.8.1/data/usr/lib/freedombox/first-run.d/000077500000000000000000000000001266051671100215605ustar00rootroot00000000000000Plinth-0.8.1/data/usr/lib/freedombox/first-run.d/90_firewall000077500000000000000000000075321266051671100236320ustar00rootroot00000000000000#!/bin/sh # # This file is part of Plinth. # # 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 . # # Enable tracing to see the commands in # /var/log/freedombox-first-run.log set -x # Set the default firewall zone. When network connections are # configured outside of FreedomBox/Plinth, they will not be able to # serve the Plinth web interface. This is because all such interfaces # will fall in the default firewall zone and that is, by default, # 'public'. On 'public' zone we don't allow Plinth web interface as # this zone is not managed. # # Configuration of network connections happen outside for # FreedomBox/Plinth for various reasons: # # - Existing network connections before installation of # freedombox-setup # # - Connections configured in /etc/network/interfaces # # - Connections manually configured using nmtui # # - Connections created using GUI environments such as GNOME # # Rather then clearing out /etc/network/interfaces during setup and # expecting the connections not to be created outside of Plinth, # setting the default firewall zone is a better approach. This # default zone selection fits with the main purpose of FreedomBox to # be a router which is also reflected by the fact that only 'external' # and 'internal' zones are managed. firewall-cmd --set-default-zone=external # Setup firewall rules for all the services enabled by default. # Ideally all non-essential services are enabled from Plinth which # automatically takes care of enabling appropirate firewall ports. The # following is then for essential services and services that are not # yet configurable from Plinth. # HTTP (JWChat, ownCloud) firewall-cmd --zone=external --permanent --add-service=http firewall-cmd --zone=internal --permanent --add-service=http # HTTPS (Plinth, JWChat, ownCloud) firewall-cmd --zone=external --permanent --add-service=https firewall-cmd --zone=internal --permanent --add-service=https # Tor firewall-cmd --zone=internal --permanent --add-service=tor-socks # NTP firewall-cmd --zone=internal --permanent --add-service=ntp # DNS firewall-cmd --zone=internal --permanent --add-service=dns # mDNS firewall-cmd --zone=internal --permanent --add-service=mdns # DHCP firewall-cmd --zone=internal --permanent --add-service=dhcp # Bootp Server and Client (not enabled) #firewall-cmd --zone=internal --permanent --add-port=67/tcp #firewall-cmd --zone=internal --permanent --add-port=67/udp #firewall-cmd --zone=internal --permanent --add-port=68/tcp #firewall-cmd --zone=internal --permanent --add-port=68/udp # LDAP (not enabled) #firewall-cmd --zone=internal --permanent --add-service=ldap #firewall-cmd --zone=internal --permanent --add-service=ldaps # OpenVPN (not enabled) #firewall-cmd --zone=external --permanent --add-service=openvpn #firewall-cmd --zone=internal --permanent --add-service=openvpn # Privoxy firewall-cmd --zone=internal --permanent --add-service=privoxy # XMPP firewall-cmd --zone=external --permanent --add-service=xmpp-server firewall-cmd --zone=internal --permanent --add-service=xmpp-server firewall-cmd --zone=external --permanent --add-service=xmpp-client firewall-cmd --zone=internal --permanent --add-service=xmpp-client firewall-cmd --zone=external --permanent --add-service=xmpp-bosh firewall-cmd --zone=internal --permanent --add-service=xmpp-bosh Plinth-0.8.1/data/usr/lib/freedombox/setup.d/000077500000000000000000000000001266051671100207675ustar00rootroot00000000000000Plinth-0.8.1/data/usr/lib/freedombox/setup.d/86_plinth000077500000000000000000000020001266051671100225200ustar00rootroot00000000000000#!/bin/sh # # This file is part of Plinth. # # 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 . # # Enable Apache modules required for Plinth. echo "Configuring Apache for Plinth..." make-ssl-cert generate-default-snakeoil a2enmod headers a2enmod proxy a2enmod proxy_http a2enmod rewrite a2enmod ssl a2enconf javascript-common a2ensite plinth.conf a2ensite plinth-ssl.conf echo "Done configuring Apache for Plinth." Plinth-0.8.1/data/usr/share/000077500000000000000000000000001266051671100156075ustar00rootroot00000000000000Plinth-0.8.1/data/usr/share/augeas/000077500000000000000000000000001266051671100170545ustar00rootroot00000000000000Plinth-0.8.1/data/usr/share/augeas/lenses/000077500000000000000000000000001266051671100203455ustar00rootroot00000000000000Plinth-0.8.1/data/usr/share/augeas/lenses/pagekite.aug000066400000000000000000000051471266051671100226430ustar00rootroot00000000000000(* Module: Pagekite Parses /etc/pagekite.d/ Author: Michael Pimmer About: License This file is licenced under the LGPL v2+, like the rest of Augeas. *) module Pagekite = autoload xfm (* View: lns *) (* Variables *) let equals = del /[ \t]*=[ \t]*/ "=" let neg2 = /[^# \n\t]+/ let neg3 = /[^# \:\n\t]+/ let eol = del /\n/ "\n" (* Match everything from here to eol, cropping whitespace at both ends *) let to_eol = /[^ \t\n](.*[^ \t\n])?/ (* A key followed by comma-separated values k: name of the key key_sep: separator between key and values value_sep: separator between values sto: store for values *) let key_csv_line (k:string) (key_sep:lens) (value_sep:lens) (sto:lens) = [ key k . key_sep . [ seq k . sto ] . [ seq k . value_sep . sto ]* . Util.eol ] (* entries for pagekite.d/10_account.rc *) let domain = [ key "domain" . equals . store neg2 . Util.comment_or_eol ] let frontend = Build.key_value_line ("frontend" | "frontends") equals (store Rx.neg1) let host = Build.key_value_line "host" equals (store Rx.ip) let ports = key_csv_line "ports" equals Sep.comma (store Rx.integer) let protos = key_csv_line "protos" equals Sep.comma (store Rx.word) (* entries for pagekite.d/20_frontends.rc *) let kitesecret = Build.key_value_line "kitesecret" equals (store Rx.space_in) let kv_frontend = Build.key_value_line ( "kitename" | "fe_certname" | "ca_certs" | "tls_endpoint" ) equals (store Rx.neg1) (* entries for services like 80_httpd.rc *) let service_colon = del /[ \t]*:[ \t]*/ " : " let service_on = [ key "service_on" . [ seq "service_on" . equals . [ label "protocol" . store neg3 ] . service_colon . [ label "kitename" . (store neg3) ] . service_colon . [ label "backend_host" . (store neg3) ] . service_colon . [ label "backend_port" . (store neg3) ] . service_colon . ( [ label "secret" . (store Rx.no_spaces) . Util.eol ] | eol ) ] ] let service_cfg = [ key "service_cfg" . equals . store to_eol . eol ] let flags = ( "defaults" | "isfrontend" | "abort_not_configured" | "insecure" ) let entries = Build.flag_line flags | domain | frontend | host | ports | protos | kv_frontend | kitesecret | service_on | service_cfg let lns = ( entries | Util.empty | Util.comment )* (* View: filter *) let filter = incl "/etc/pagekite.d/*.rc" . Util.stdexcl let xfm = transform lns filter Plinth-0.8.1/data/usr/share/augeas/lenses/tests/000077500000000000000000000000001266051671100215075ustar00rootroot00000000000000Plinth-0.8.1/data/usr/share/augeas/lenses/tests/test_pagekite.aug000066400000000000000000000053761266051671100250500ustar00rootroot00000000000000module Test_Pagekite = let conf1 = "# Use the pagekite.net service defaults. defaults " test Pagekite.lns get conf1 = { "#comment" = "Use the pagekite.net service defaults." } { "defaults" } let conf2 =" frontends = pagekite.freedombox.me ports=80,81 " test Pagekite.lns get conf2 = { } { "frontends" = "pagekite.freedombox.me" } { "ports" { "1" = "80" } { "2" = "81" } } let conf3 = "frontend=pagekite.freedombox.me host=192.168.0.3 " test Pagekite.lns get conf3 = { "frontend" = "pagekite.freedombox.me" } { "host" = "192.168.0.3" } let conf4 = "isfrontend ports=80,443 protos=http,https domain=http,https:*.your.domain:MakeUpAPasswordHere " test Pagekite.lns get conf4 = { "isfrontend" } { "ports" { "1" = "80" } { "2" = "443" } } { "protos" { "1" = "http" } { "2" = "https" } } { "domain" = "http,https:*.your.domain:MakeUpAPasswordHere" } let conf_account = "kitename = my.freedombox.me kitesecret = 0420 # Delete this line! abort_not_configured " test Pagekite.lns get conf_account = { "kitename" = "my.freedombox.me" } { "kitesecret" = "0420" } { "#comment" = "Delete this line!" } { "abort_not_configured" } let conf_service = " service_on = raw/22:@kitename : localhost:22 : @kitesecret service_on=http:192.168.0.1:127.0.0.1:80: service_on=https:yourhostname,fqdn:127.0.0.1:443: " test Pagekite.lns get conf_service = { } { "service_on" { "1" { "protocol" = "raw/22" } { "kitename" = "@kitename" } { "backend_host" = "localhost" } { "backend_port" = "22" } { "secret" = "@kitesecret" } } } { "service_on" { "2" { "protocol" = "http" } { "kitename" = "192.168.0.1" } { "backend_host" = "127.0.0.1" } { "backend_port" = "80" } } } { "service_on" { "3" { "protocol" = "https" } { "kitename" = "yourhostname,fqdn" } { "backend_host" = "127.0.0.1" } { "backend_port" = "443" } } } let conf_encryption = " frontend=frontend.your.domain:443 fe_certname=frontend.your/domain ca_certs=/etc/pagekite.d/site-cert.pem tls_endpoint=frontend.your.domain:/path/to/frontend.pem " test Pagekite.lns get conf_encryption = { } { "frontend" = "frontend.your.domain:443" } { "fe_certname" = "frontend.your/domain" } { "ca_certs" = "/etc/pagekite.d/site-cert.pem" } { "tls_endpoint" = "frontend.your.domain:/path/to/frontend.pem" } let conf_service_cfg = "insecure service_cfg = KITENAME.pagekite.me/80 : insecure : True " test Pagekite.lns get conf_service_cfg = { "insecure" } { "service_cfg" = "KITENAME.pagekite.me/80 : insecure : True" } Plinth-0.8.1/data/var/000077500000000000000000000000001266051671100144645ustar00rootroot00000000000000Plinth-0.8.1/data/var/lib/000077500000000000000000000000001266051671100152325ustar00rootroot00000000000000Plinth-0.8.1/data/var/lib/plinth/000077500000000000000000000000001266051671100165305ustar00rootroot00000000000000Plinth-0.8.1/data/var/lib/plinth/.gitkeep000066400000000000000000000000001266051671100201470ustar00rootroot00000000000000Plinth-0.8.1/data/var/lib/plinth/sessions/000077500000000000000000000000001266051671100203765ustar00rootroot00000000000000Plinth-0.8.1/data/var/lib/plinth/sessions/.gitkeep000066400000000000000000000000001266051671100220150ustar00rootroot00000000000000Plinth-0.8.1/data/var/log/000077500000000000000000000000001266051671100152455ustar00rootroot00000000000000Plinth-0.8.1/data/var/log/plinth/000077500000000000000000000000001266051671100165435ustar00rootroot00000000000000Plinth-0.8.1/data/var/log/plinth/.gitkeep000066400000000000000000000000001266051671100201620ustar00rootroot00000000000000Plinth-0.8.1/data/var/run/000077500000000000000000000000001266051671100152705ustar00rootroot00000000000000Plinth-0.8.1/data/var/run/.gitkeep000066400000000000000000000000001266051671100167070ustar00rootroot00000000000000Plinth-0.8.1/doc/000077500000000000000000000000001266051671100135305ustar00rootroot00000000000000Plinth-0.8.1/doc/Makefile000066400000000000000000000041531266051671100151730ustar00rootroot00000000000000#!/usr/bin/make -f # # This file is part of Plinth. # # 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 . # MANUAL_URL="https://wiki.debian.org/FreedomBox/Manual?action=show&mimetype=text%2Fdocbook" OUTPUTS=freedombox-manual.pdf freedombox-manual.html freedombox-manual.part.html plinth.1 all: $(OUTPUTS) # Do not edit the manual page in this directory. The manual is # maintained as separate pages on the FreedomBox wiki and aggregated # into a single page using the MoinMoin include feature. Then it is # exported as Docbook format and kept here. # # It is important to keep a copy of the manual in this source tree # because Debian packages promise an entire source tree including the # documentation. # # Use 'make fetch' to retrieve the latest manual from the wiki and # commit it to the repository. The wiki page is already reviewed, so # commits that update the manual just using the 'fetch' target do not # require further reviews. .PHONY: fetch fetch: wget --quiet -O - $(MANUAL_URL) | \ xmllint --format --output freedombox-manual.raw.xml - xsltproc --output freedombox-manual.xml fixes.xslt freedombox-manual.raw.xml xsltproc fetch-images.xslt freedombox-manual.raw.xml | sort -u | \ awk '{print "wget --quiet -O images/" $$1 " " $$2}' | sh rm -f freedombox-manual.raw.xml %.pdf: %.xml xmlto --with-dblatex pdf $< %.part.html: %.html perl -pe 'BEGIN {undef $/} s/.*]*>(.*)<\/body>.*/$1/s' $< > $@ %.html: %.xml docbook2html --nochunks $< %.1: %.xml xmlto man $< .PHONY: clean clean: rm -f $(OUTPUTS) Plinth-0.8.1/doc/fetch-images.xslt000066400000000000000000000043031266051671100170000ustar00rootroot00000000000000 " " Plinth-0.8.1/doc/fixes.xslt000066400000000000000000000074061266051671100155710ustar00rootroot00000000000000 pt images/ Plinth-0.8.1/doc/freedombox-manual.xml000066400000000000000000010453161266051671100176710ustar00rootroot00000000000000
FreedomBox Manual
FreedomBox Introduction FreedomBox is a personal server that protects your privacy. It is a free software stack, a subset of the Debian universal operating system, that can be installed in many flavors of inexpensive and power-efficient hardware. The simplicity of setting up and operating a FreedomBox is similar to that of a smart phone.
Smart Router FreedomBox runs in a physical computer and can route your traffic. It can sit between various devices at home such as mobiles, laptops and TVs and the Internet replacing a home wireless router. By routing traffic, FreedomBox can remove tracking advertisements and malicious web bugs before they ever reach your devices. FreedomBox can cloak your location and protect your anonymity by "onion routing" your traffic over Tor. FreedomBox provides a VPN server that you can use while you are away from home to keep your traffic secret on untrusted public wireless networks and to securely access various devices at home. It can also be carried along with your laptop and used to connect to public networks at work, school, or office to avail its services. It could be used in a village to provide communications throughout the village. In future, FreedomBox intends to provide support for alternative ways of connecting to the Internet such as Mesh networks.
Private Cloud FreedomBox provides services: to your computers and mobile devices in your home and to computers and mobile devices of other people who are your friends. FreedomBox provides file sharing like Dropbox, shared calendering like Google or Yahoo and photo sharing. FreedomBox provides instant messaging and truly secure voice conference calling that works on low bandwidth providing high quality. FreedomBox has a blog and wiki to let you publish your content and collaborate with the rest of the world. Coming soon, a personal email server and federated social networking using GNU Social and Diaspora, providing privacy-respecting alternatives to Gmail and Facebook.
Quick Start If you have not already done so, download and install a FreedomBox image by following the instructions on the Download page. Plug one end of your ethernet cord into your FreedomBox's ethernet port, and plug the other end into your router. On the Dreamplug, the eth0 port (the one toward the middle of the box) should be connected to your router. If your device has a 2nd ethernet port, you can connect your computer to it directly, using an ethernet cable. Power on your your FreedomBox. On first boot, the FreedomBox will perform initial setup and then reboot. This may take several minutes. After the FreedomBox has rebooted, you can access its web interface (called Plinth) through your web browser. If your computer is connected directly to the FreedomBox through a second (LAN) ethernet port, you can browse to: or . If your computer supports mDNS (GNU/Linux, Mac OSX and Windows with mDNS software installed), you can browse to: (or ) If neither of these methods are available, then you will need to figure out the IP address of your FreedomBox. You can use the "nmap" program to find its IP address: nmap -p 80 --open -sV 192.168.0.0/24 Your FreedomBox will show up as an IP address with an open tcp port 80 using Apache httpd service on Debian, such as the example below which would make it accessible at : Nmap scan report for 192.168.0.165 Host is up (0.00088s latency). PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.17 ((Debian)) On accessing Plinth your browser will warn you that it communicates securely but that it regards the security certificate for doing so as invalid. This is a fact you need to accept because the certificate is auto generated on the box and therefore "self-signed" (the browser might also use words such as "untrusted", "not private", "privacy error" or "unknown issuer/authority"). Telling your browser that you are aware of this might involve pressing buttons such as "I understand the Risks", "proceed to ... (unsafe)" or "Add exception". On the intial access you will see a welcome page that asks you to provide some basic information for setting up your FreedomBox. After completing the form, you will be logged in to Plinth and able to access apps and configuration through the interface. If your computer is connected directly to the FreedomBox, your FreedomBox can act as a router, allowing you to access the Internet. Now, you can try any of the Apps that are available on FreedomBox.
Getting Help This document is intended to give you all the information you need to get started with your FreedomBox. However, if you have any questions after reading this document, you can get help by: Emailing freedombox-discuss@lists.alioth.debian.org. You can also sign up to receive copies of every discussion that happens on the mailing list and read the archives. Chatting at #freedombox@irc.oftc.net. Reading the wiki. Reading the FreedomBox Foundation's website. Reading the FreedomBox Project Page.
Release Notes The following are the release notes for each FreedomBox version.
Version 0.8 (2016-02) Added Quassel, an IRC client that stays connected to IRC networks and can synchronize multiple frontends. Improved first boot user interface. Fixed Transmission RPC whitelist issue. Added translations for Turkish, Chinese, and Russian. Fixed and updated translations in other languages. Added Monkeysphere, which uses PGP web of trust for SSH host key verification. Added Let's Encrypt, to obtain certificates for domains, so that browser certificate warnings can be avoided. Added repro, a SIP server for audio and video calls. Allow users to set their SSH public keys, so they can login over SSH without a password.
Version 0.7 (2015-12-13) Translations! Full translations of the interface in Danish, Dutch, French, German and Norwegian Bokmål, and partial Telugu. Support for OLinuXino A20 MICRO and LIME2 New Plinth applications: OpenVPN, reStore Improved first-boot experience Many bugfixes and cleanups
Version 0.6 (2015-10-31) New supported hardware target: Raspberry Pi 2 New modules in Plinth: Shaarli: Web application to manage and share bookmarks Date & Time: Configure time zone and NTP service Service Discovery: Configure Avahi service Documentation revamp including new user manual and developer guide Improved diagnostic tests, available in Plinth Avoid unnecessary changes when installing on existing Debian system Network configuration supports PPPoE connections Debian packages can be download over Tor
Version 0.5 (2015-08-07) New targets: CubieTruck, i386, amd64 New apps in Plinth: Transmission, Dynamic DNS, Mumble, ikiwiki, Deluge, Roundcube, Privoxy NetworkManager handles network configuration and can be manipulated through Plinth. Software Upgrades (unattended-upgrades) module can upgrade the system, and enable automatic upgrades. Plinth is now capable of installing ejabberd, jwchat, and privoxy, so they are not included in image but can be installed when needed. User authentication through LDAP for SSH, XMPP (ejabberd), and ikiwiki. Unit test suite is automatically run on Plinth upstream. This helps us catch at least some code errors before they are discovered by users! New, simpler look for Plinth. Performance improvements for Plinth.
Version 0.3 (2015-01-20) Tor Bridges: All boxes now act as non-exit Tor bridges, routing traffic for the Tor network. Firewall: firewall is on by default and is automatically managed. Add BeagleBone support. We now have images for BeagleBone, RaspberryPi, VirtualBox i386/amd64, and DreamPlug. Ability to enable and use Tor Hidden Services. Works with Ejabberd/JWChat and ownCloud services. Enable Tor obfsproxy with scramblesuit. Drop well-known root password (an account with sudo capabilities still exists for now but will be removed soon). Switch to unstable as suite of choice for easier development. Newer images are built with systemd by default (due to Debian change). Install and operate firewall automatically (uses firewalld). Major restructuring of Plinth UI using Python3, Django web development framework and Bootstrap3. Code quality is much better and UI is more polished. Introduced packaging framework in Plinth UI for on-demand application installation.
Version 0.2 (2014-03-16) Support for Raspberry Pi and VirtualBox (x86) in addition to the DreamPlug. New Services: Configuration Management UI. Instant Messaging. OwnCloud. dnsmasq. Low-Level Configuration Management. Service Announcement. LDAP Server. LXC Support. Source Packages. The privoxy setup is now the default from Debian.
Version 0.1 (2013-02-26) First FreedomBox software release (0.1 image, developer release). Full hardware support in Debian Support for DreamPlug. Basic software tools selected as common working environment: User interface system "plinth" Cryptography tools: gpg or "monkeysphere" Box-to-box communication design: Freedom-buddy (uses TOR network) Web cleaning: "privoxy-freedombox".
Download and Install Wellcome to the FreedomBox download page. You may either install FreedomBox on one of the supported inexpensive hardware, on a Linux Debian operating system, or deploy on a virtual machine. Installing on Debian is easy because FreedomBox is available as packages. On hardware, you may need a little bit of technical expertise to setup. What we are requiring is to buy a device and plug in an SD card. In case of trouble, please read and interact with the Questions and Answers page based on Freedombox-discuss mailing list archives.
Downloading on Debian If you are installing on Debian, you don't need to download these images. Instead read instructions on setting up FreedomBox on Debian.
Downloading on Hardware or Virtual Machine
Prepare your device See hardware specific instructions on how to prepare your device at the Hardware section. Gather and read a lot of documentation on the web about first boot and flashing USB or SD Card on your hardware.
Downloading Images Recent images for supported targets are available here: Official Images:
Verifying the Downloaded Images It is important to verify the images you have downloaded to ensure that the file has not be corrupted during the transmission and that it is indeed the image built by FreedomBox developers. First open a terminal and import the public key of the FreedomBox developer who built the images: $ gpg --keyserver x-hkp://pool.sks-keyservers.net --recv-keys 0x36C361440C9BC971 Next, verify the fingerprint of the public key: $ gpg --fingerprint 0x36C361440C9BC971 pub 4096R/0C9BC971 2011-11-12 Key fingerprint = BCBE BD57 A11F 70B2 3782 BC57 36C3 6144 0C9B C971 uid Sunil Mohan Adapa <sunil@medhas.org> sub 4096R/4C1D4B57 2011-11-12 Finally, verify your downloaded image with its signature file .sig. For example: $ gpg --verify freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz.sig freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz gpg: Signature made Thursday 15 January 2015 09:27:50 AM IST using RSA key ID 0C9BC971 gpg: Good signature from "Sunil Mohan Adapa <sunil@medhas.org>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: BCBE BD57 A11F 70B2 3782 BC57 36C3 6144 0C9B C971
Installation After the download you can use the image to boot supported hardware (including virtual machines). You'll need to copy the image to the memory card or USB stick as follows: Figure out which device your card actually is. Unplug your card. Run dmesg -w to show and follow the kernel messages. Plug your card in. You will see messages such as following: [33299.023096] usb 4-6: new high-speed USB device number 12 using ehci-pci [33299.157160] usb 4-6: New USB device found, idVendor=058f, idProduct=6361 [33299.157162] usb 4-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [33299.157164] usb 4-6: Product: Mass Storage Device [33299.157165] usb 4-6: Manufacturer: Generic [33299.157167] usb 4-6: SerialNumber: XXXXXXXXXXXX [33299.157452] usb-storage 4-6:1.0: USB Mass Storage device detected [33299.157683] scsi host13: usb-storage 4-6:1.0 [33300.155626] scsi 13:0:0:0: Direct-Access Generic- Compact Flash 1.01 PQ: 0 ANSI: 0 [33300.156223] scsi 13:0:0:1: Direct-Access Multiple Flash Reader 1.05 PQ: 0 ANSI: 0 [33300.157059] sd 13:0:0:0: Attached scsi generic sg4 type 0 [33300.157462] sd 13:0:0:1: Attached scsi generic sg5 type 0 [33300.462115] sd 13:0:0:1: [sdg] 30367744 512-byte logical blocks: (15.5 GB/14.4 GiB) [33300.464144] sd 13:0:0:1: [sdg] Write Protect is off [33300.464159] sd 13:0:0:1: [sdg] Mode Sense: 03 00 00 00 [33300.465896] sd 13:0:0:1: [sdg] No Caching mode page found [33300.465912] sd 13:0:0:1: [sdg] Assuming drive cache: write through [33300.470489] sd 13:0:0:0: [sdf] Attached SCSI removable disk [33300.479493] sdg: sdg1 [33300.483566] sd 13:0:0:1: [sdg] Attached SCSI removable disk In the above case, the disk that is newly inserted is available as /dev/sdg. Very carefully note this and use it in the copying step below. Decompress the downloaded image using tar: $ xz -d freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz The above command is an example for the cubietruck image built on 2015-12-13. Your downloaded file name will be different. Copy the image to your card. Double check and make sure you don't write to your computer's main storage (such as /dev/sda). Also make sure that you don't run this step as root to avoid potentially overriding data on your hard drive due to a mistake in identifying the device or errors while typing the command. USB disks and SD cards inserted into the system should typically be write accessible to normal users. If you don't have permission to write to your SD card as a user, you may need to run this command as root. In this case triple check everything before you run the command. Another safety precaution is to unplug all external disks except the SD card before running the command. For example, if your SD card is /dev/sdf as noted in the first step above, then to copy the image, run: $ dd bs=1M if=freedombox-unstable-free_2015-12-13_cubietruck-armhf.img of=/dev/sdf conv=fdatasync The above command is an example for the cubietruck image built on 2015-12-13. Your image file name will be different. When picking a device, use the drive-letter destination, like /dev/sdf, not a numbered destination, like /dev/sdf1. The device without a number refers to the entire device, while the device with a number refers to a specific partition. We want to use the whole device. Downloaded images contain complete information about how many partitions there should be, their sizes and types. You don't have to format your SD card or create partitions. All the data on the SD card will be wiped off during the write process. Use the image by inserting the SD card or USB disk into the target device and booting from it. Your device should also be prepared (see the Hardware section). Read (the rest of) the Manual for instructions on how to use applications in FreedomBox.
Apps
Anonymity Network (Tor)
What is Tor? Tor is a network of server operated by volunteers. It allows users of these servers to improve their privacy and security while surfing on the Internet. You and your friends are able to access to your FreedomBox via Tor network without revealing its IP address. Activating Tor application on your FreedomBox, you will be able to offer remote services (chat, wiki, file sharing, etc...) without showing your location. This application will give you a better protection than a public web server because you will be less exposed to intrusive people on the web.
Using Tor to browse anonymously Tor Browser is the recommended way to browse the web using Tor. You can download the Tor Browser from and follow the instructions on that site to install and run it.
Using Tor Hidden Service to access your FreedomBox Tor Hidden Service provides a way to access your FreedomBox, even if it's behind a router or firewall. To enable Tor Hidden Service, first navigate to the Anonymity Network (Tor) page. (If you don't see it, click on the FreedomBox logo at the top-left of the page, to go to the main Apps page.) On the Anonymity Network (Tor) page, under Configuration, check "Enable Tor Hidden Service", then press the Update setup button. Tor will be reconfigured and restarted. After a while, the page will refresh and under Status, you will see a table listing the Hidden Service .onion address. Copy the entire address (ending in .onion) and paste it into the Tor Browser's address field, and you should be able to access your FreedomBox. (You may see a certificate warning because FreedomBox has a self-signed certificate.) Currently only HTTP (port 80) and HTTPS (port 443) are accessible through the Tor Hidden Service configured on the FreedomBox.
Using Tor SOCKS port (advanced) FreedomBox provides a Tor SOCKS port that other applications can connect to, in order to route their traffic over the Tor network. This port is accessible on any interfaces configured in the internal firewall zone. To configure the application, set SOCKS Host to the internal network connection's IP address, and set the SOCKS Port to 9050.
Deluge
What is Deluge? Your FreedomBox provides a Deluge application to enable. Deluge is a lightweight Bit Torrent client. Bit Torrent is a communications protocol using peer-to-peer (P2P) file sharing. P2P is a system that aims to interconnect end-user machines. Highly configurable, Deluge offers functionalities in the form of plugins.
Transmission
What is Transmission ? In addition to Deluge Bit Torrent, your FreedomBox provides a Transmission application to enable. Transmission is a lightweight Bit Torrent client allowing end-user machine to share files (documents, pictures, sounds, videos and programs). Transmission is well known for its simplicity and a default configuration that "Just Works".
Shaarli
What is Shaarli? Shaarli is personal (single-user) bookmarking application to install on your FreedomBox. It can also be used for micro-blogging, pastebin, online notepad and snippet archive. Shaarli is designed as a no-database delicious clone. As such, it provides very fast services, easy backup and import/export links as desktop or mobile browser bookmarks. Links stored can be public or private. Shaarli delivers ATOM and RSS feeds from its minimalist interface.
Chat Server (XMPP)
What is XMPP? XMPP is a federated protocol for Instant Messaging. This means that users who have accounts on one server, can talk to users that are on another server.
Setting the Domain Name For XMPP to work, your FreedomBox needs to have a Domain Name that can be accessed over the public Internet. You can read more about obtaining a Domain Name in the Dynamic DNS section of this manual. Once you have a Domain Name, you can tell your FreedomBox to use it by setting the Domain Name in the System Config. Please note that Pagekite does not support the XMPP protocol at this time.
Registering XMPP users through SSO Currently, all users created through Plinth will be able to login to the XMPP server. You can add new users through the System Users and Groups module. It does not matter which Groups are selected for the new user.
Dynamic DNS
What is Dynamic DNS? In order to reach a server on the Internet, the server needs to have permanent address also know as the static IP address. Many Internet service providers don't provide home users with a static IP address or they charge more providing a static IP address. Instead they provide the home user with an IP address that changes every time the user connects to the Internet. Clients wishing to contact the server will have difficulty reaching the server. Dynamic DNS service providers assist in working around a problem. First they provide you with a domain name, such as 'myhost.example.org'. Then they associate your IP address, whenever it changes, with this domain name. Then anyone intending to reach the server will be to contact the server using the domain name 'myhost.example.org' which always points to the latest IP address of the server. For this to work, every time you connect to the Internet, you will have to tell your Dynamic DNS provider what your current IP address is. Hence you need special software on your server to perform this operation. The Dynamic DNS function in FreedomBox will allow users without a static public IP address to push the current public IP address to a Dynamic DNS Server. This allows you to expose services on FreedomBox, such as ownCloud, to the Internet.
GnuDIP vs. Update URL There are two main mechanism to notify the Dynamic DNS server of your new IP address; using the GnuDIP protocol and using the Update URL mechanism. If a service provided using update URL is not properly secured using HTTPS, your credentials may be visible to an adversary. Once an adversary gains your credentials, they will be able to replay your request your server and hijack your domain. On the other hand, the GnuDIP protocol will only transport a salted MD5 value of your password, in a way that is secure against replay attacks.
Using the GnuDIP protocol Register an account with any Dynamic DNS service provider. A free service provided by the FreedomBox community is available at . In FreedomBox UI, enable the Dynamic DNS Service. Select GnuDIP as Service type, enter your Dynamic DNS service provider address (for example, gnudip.datasystems24.net) into GnuDIP Server Address field. Fill Domain Name, Username, Password information given by your provider into the corresponding fields.
Using an Update URL This feature is implemented because the most popular Dynamic DNS providers are using Update URLs mechanism. Register an account with a Dynamic DNS service provider providing their service using Update URL mechanism. Some example providers are listed in the configuration page itself. In FreedomBox UI, enable the Dynamic DNS service. Select other Update URL as Service type, enter the update URL given by your provider into Update URL field. If you browse the update URL with your Internet browser and a warning message about untrusted certificate appears, then enable accept all SSL certificates. WARNING: your credentials may be readable here because man-in-the-middle attacks are possible! Consider choosing a better service provider instead. If you browse the update URL with your Internet browser and the username/password box appears, enable use HTTP basic authentication checkbox and provide the Username and Password. If the update URL contains your current IP address, replace the IP address with the string <Ip>.
Checking If It Works Make sure that external services you have enabled such as /jwchat, /roundcube and /ikiwiki are available on your domain address. Go to the Status page, make sure that the NAT type is detected correctly. If your FreedomBox is behind a NAT device, this should be detected over there (Text: Behind NAT). If your FreedomBox has a public IP address assigned, the text should be "Direct connection to the Internet". Check that the last update status is not failed.
Roundcube
What is Roundcube? RoundCube is a browser-based multilingual email client with an application-like user interface. RoundCube is using the Internet Message Access Protocol (IMAP) to access e-mail on a remote mail server. It supports MIME to send files, and provides particularly address book, folder management, message searching and spell checking.
ownCloud
What is ownCloud? ownCloud is a self-hosted file sync and share server. It provides access to your data through a platform to view, sync and share across devices. Calendars and Contacts feature will help you keeping google at a nice distance. ownCloud's functionalities are native or available via plugins (Collaborative Editing, Play Music, Watch Movies, Store Passwords, Dashboard, Mozilla Sync...) via
Installation Clicking on the ownCloud application in Plinth will show an installation prompt. Proceed to install. After the installation, visit the /owncloud link provided in the ownCloud page. First time installation wizard will show up asking for administrator username and password to setup (no additional details such as database configuration are requested). After providing the details, you will be logged. You will be able to start using the ownCloud and create more users.
External Storage ownCloud's external storage plugin allows you to expose the contents of a hard drive or those of an online storage account as a folder. Following are the steps required to setup such storage. Mount your hard drive or external storage to any fixed directory on the system. Install two packages needed via the 'apt-get' on the SSH command line shell (this step will not be needed in future): $ sudo apt-get install php-google-api-php-client php-dropbox Goto ownCloud Apps section and enable 'External Storage Support' plugin. Goto 'Admin' section and add your hard drive mount path in the external storage section. This folder will now show up in your folders list to access and sync across devices.
PageKite
What is PageKite? PageKite makes local websites and services publicly accessible immediately without creating yourself a public IP address. PageKite provides "Kites" and "Services". Kites aims to make accessible in a second a web page (for instance foo.pagekite.me). Services can expose a file or a folder. Technically speaking, PageKite is free Software solution for tunneling HTTP, HTTPS and SSH servers through firewalls and NAT.
Use PageKite See PageKite website.
Secure Shell
What is Secure Shell? FreedomBox runs openssh-server server by default allowing remote logins from all interfaces. If your hardware device is connected to a monitor and a keyboard, you may login directly as well. Regular operation of FreedomBox does not require you to use the shell. However, some tasks or identifying a problem may require you to login to a shell.
Default User Account The pre-built FreedomBox images have a default user account called "fbx". However the password is not set for this account, so it will not be possible to log in with this account by default. There is a script included in the freedom-maker program, that will allow you to set the password for this account, if it is needed. To set a password for the "fbx" user: 1. Decompress the image file. 2. Get a copy of freedom-maker from . 3. Run sudo ./bin/passwd-in-image <image-file> fbx. 4. Copy the image file to SD card and boot device as normal. The "fbx" user also has superuser privileges via sudo.
Logging In To login via SSH, to your FreedomBox: $ ssh fbx@freedombox Replace fbx with the name of the user you wish to login as. freedombox should be replaced with the hostname or IP address of you FreedomBox device as found in the Quick Start process. fbx is the default user present on FreedomBox with superuser privileges. Any other user created using Plinth and belonging to the group admin will be able to login. The root account has no password set and will not be able to login. Access will be denied to all other users. fbx and users in admin group will also be able to login on the terminal directly. Other users will be denied access. If you repeatedly try to login as a user and fail, you will be blocked from logging in for some time. This is due to libpam-abl package that FreedomBox installs by default. To control this behavior consult libpam-abl documentation.
Becoming Superuser After logging in, if you want to become the superuser for performing administrative activities: $ sudo su Make a habit of logging in as root only when you need to. If you aren't logged in as root, you can't accidentally break everything.
Changing Password To change the password of a user managed by Plinth, use the change password page. However, the fbx default user is not managed by Plinth and its password cannot be changed in the web interface. To change password on the terminal, log in to your FreedomBox as the user whose password you want to change. Then, run the following command: $ passwd This will ask you for your current password before giving you the opportunity to set a new one.
Mumble
What is Mumble? Mumble is a voice chat software. Primarily intended for use while gaming, it is suitable for simple talking with high audio quality, noise suppression, encrypted communication, public/private-key authentication by default, and "wizards" to configure your microphone for instance. A user can be marked as a "priority speaker" within a channel.
Privoxy
What is Privoxy? Privoxy is a software for security, privacy, and accurate control over the web. It provides a much more powerful web proxy (anonymity on the web) than what your browser can offer. Privoxy "is a proxy that is primarily focused on privacy enhancement, ad and junk elimination and freeing the user from restrictions placed on his activities" (source: Privoxy FAQ). Learning about networking protocols like HTTP, about HTML, and "Regular Expressions" can help a lot using Privoxy.
Wiki & Blog (Ikiwiki)
What is Ikiwiki? Ikiwiki converts wiki pages into HTML pages suitable for publishing on a website. It provides particularly blogging, podcasting, calendars and a large selection of plugins.
Creating a wiki or blog You can create a wiki or blog to be hosted on your FreedomBox through the Wiki & Blog (Ikiwiki) page in Plinth. The first time you visit this page, it will ask to install packages required by Ikiwiki. After the package install has completed, select the Create tab. You can select the type to be Wiki or Blog. Also type in a name for the wiki or blog, and the username and password for the wiki's/blog's admin account. Then click Update setup and you will see the wiki/blog added to your list. Note that each wiki/blog has its own admin account.
Accessing your wiki or blog From the Wiki & Blog (Ikiwiki) page, select the Manage tab and you will see a list of your wikis and blogs. Click a name to navigate to that wiki or blog. From here, if you click Edit or Preferences, you will be taken to a login page. To log in with the admin account that you created before, select the Other tab, enter the username and password, and click Login.
User login through SSO Besides the wiki/blog admin, other FreedomBox users can be given access to login and edit wikis and blogs. However, they will not have all the same permissions as the wiki admin. They can add or edit pages, but cannot change the wiki's configuration. To add a wiki user, go to the Users and Groups page in Plinth (under System configuration, the gear icon at the top right corner of the page). Create or modify a user, and add them to the wiki group. (Users in the admin group will also have wiki access.) To login as a FreedomBox user, go to the wiki/blog's login page and select the Other tab. Then click the "Login with HTTP auth" button. The browser will show a popup dialog where you can enter the username and password of the FreedomBox user.
Unhosted Storage
What is Unhosted? Unhosted is a way to uncouple web applications from data. No matter where a web application is served from, the data can be stored on an Unhosted storage server of user's choice. Unhosted web apps do not send your user data to their server and are hence known as "serverless", "client-side", or "static" web apps. Either you connect your own server at runtime, or your data stays within the browser. Your FreedomBox can become your Unhosted storage server using a remoteStorage server know as reStore. This module is currently disabled in FreedomBox as the package required for reStore server is not available in Debian yet. The package is available for testing via
Setup Your FreedomBox contains a remoteStorage server called reStore, that can serve as your personal storage server for Unhosted web apps. To setup reStore, simply install and enable in FreedomBox web UI. After the setup, create an account by visiting the link provided on the Unhosted app page https://<yourdomain>/restore/. User accounts are currently not integrated with Plinth user management, and public sign-up is enabled!
Try Unhosted apps Once Unhosted is setup on FreedomBox and when FreedomBox is accessible by a domain name (such by using PageKite, Dynamic DNS or Tor Hidden Service), try one of the following Unhosted web apps (more are listed at ): (a note taking application) (list your favorite drinks) (a simple todo list) To connect the Unhosted app to your FreedomBox's Unhosted storage, click on the remoteStorage icon and type your address <user>@<yourdomain>, e.g.: remotestorage.png If this doesn't work, make sure that FreedomBox has a domain name using PageKite, Dynamic DNS or Tor Hidden Service. The reStore server is running. You have created the account specified in the reStore server. Your FreedomBox SSL certificate is trusted in your current browser session (important when using private browsing). Finish the OAuth flow by authenticating with your password and authorizing access, then you should get redirected back to the Unhosted app, and be able to use it. All data of the Unhosted web app is now stored on your FreedomBox.
OpenVPN
What is OpenVPN? OpenVPN provides to your FreedomBox a virtual private network service. You can use this software for remote access, site-to-site VPNs and Wi-Fi security. OpenVPN includes support for dynamic IP addresses and NAT.
GnuSocial
What is GNU social? GNU social is a continuation of the StatusNet project. It is social communication software for both public and private communications. It is widely supported and has a large userbase. It is already used by the Free Software Foundation, and Richard Stallman himself. Think of GNU Social as twitter and beyond.
Status of package GNU Social is still getting packaged for debian and will be available soon for everyone to use. check the progress by tracking the bug #782812.
System
Networks This section describes how networking is setup by default in FreedomBox and how you can customize it. See also the Firewall section for more information on how firewall works.
Default setup In a fresh image of FreedomBox, network is not configured at all. When the image is written to an SD card and the device boots, configuration is done. During first boot, FreedomBox setup package detects the networks interfaces and tries to automatically configure them so that FreedomBox is available for further configuration via the web interface from another machine without the need to connect a monitor. Automatic configuration also tries to make FreedomBox useful, out of the box, for the most important scenarios FreedomBox is used for. There are two scenarios it handles: when is a single ethernet interface and when there are multiple ethernet interfaces.
Single ethernet interface When there is only single ethernet interface available on the hardware device, there is not much scope for it to play the role of a router. In this case, the device is assumed to be just another machine in the network. Accordingly, the only available interface is configured to be an internal interface in automatic configuration mode. This means that it connects to the Internet using the configuration provided by a router in the network and also makes all (internal and external) of its services available to all the clients on this network.
Multiple ethernet interface When there are multiple ethernet interfaces available on the hardware device, the device can act as a router. The interfaces are then configured to perform this function. The first network interface is configured to be an WAN or external interface in automatic configuration mode. This means that it connects to the Internet using network configuration provided by the Internet Service Provider (ISP). Only services that are meant to be provided across the entire Internet (external services) will be exposed on this interface. You must plug your Internet connection into the port of this ethernet interface. If you wish to continue to have your existing router manage the Internet connection for you, then plug a connection from your router to the port on this interface. The remaining network interfaces are configured for the clients of a router. They are configured as LAN or internal interfaces in shared configuration mode. This means that all the services (both external and internal) services are provided to who ever connects on this interface. Further, the shared mode means that clients will be able to receive details of automatic network connection on this interface. Specifically, DHCP configuration and DNS servers are provided on this interface. The Internet connection available to the device using the first network interface will be shared with clients using this interface. This all means that you can connect your computers to this network interface and they will get automatically configured and will be able to access the Internet via the FreedomBox. Currently, it is not very clear which interface will be come the WAN interface (and the remaining being LAN interfaces) although the assignment process is deterministic. So, it take a bit of trail and error to figure out which one is which. In future, for each device, this will be well documented.
Wi-Fi configuration All Wi-Fi interfaces are configured to be LAN or internal interfaces in shared configuration mode. They are also configured to become Wi-Fi access points with following details. Name of the access point will be FreedomBox plus the name of the interface (to handle the case where there are multiple of them). Password for connecting to the interface will be freedombox123.
Internet Connection Sharing Although the primary duty of FreedomBox is to provide decentralized services, it can't also act like a home router. Hence, in most cases, FreedomBox connects to the Internet and provides other machines in the network the ability to use that Internet connection. FreedomBox can do this in two ways: using a shared mode connection or using an internal connection. When an interface is set in shared mode, you may connect your machine directly to it. This is either by plugging in an ethernet cable from this interface to your machine or by connecting to a Wi-Fi access point. This case is the simplest to use, as FreedomBox automatically provides your machine with the necessary network configuration. Your machine will automatically connect to FreedomBox provided network and will be able to connect to the Internet given that FreedomBox can itself connect to the Internet. Sometimes the above setup may not be possible because the hardware device may have only one network interface or for other reasons. Even in this case, your machine can still connect to the Internet via FreedomBox. For this to work, make sure that the network interface that your machine is connecting to is in internal mode. Then, connect your machine to network in which FreedomBox is present. After this, in your machine's network configuration, set FreedomBox's IP address as the gateway. FreedomBox will then accept your network traffic from your machine and send it over to the Internet. This works because network interfaces in internal mode are configured to masquerade packets from local machines to the Internet and receive packets from Internet and forward them back to local machines.
Customization The above default configuration may not be fit for your setup. You can customize the configuration to suit your needs from the Networks area in the 'setup' section of the FreedomBox web interface.
PPPoE connections If your ISP does not provide automatic network configuration via DHCP and requires you to connection via PPPoE. To configure PPPoE, remove any network connection existing on an interface and add a PPPoE connection. Here, optionally, provide the account username and password given by your ISP and activate the connection.
Connect to Internet via Wi-Fi By default Wi-Fi devices attached during first boot will be configured as access points. They can be configured as regular Wi-Fi devices instead to connection to a local network or an existing Wi-Fi router. To do this, click on the Wi-Fi connection to edit it. Change the mode to Infrastructure instead of Access Point mode and IPv4 Addressing Method to Automatic (DHCP) instead of Shared mode. Then the SSID provided will mean the Wi-Fi network name you wish to connect to and passphrase will be the used to while making the connection.
Adding a new network device When a new network device is added, network manager will automatically configure it. In most cases this will not work to your liking. Delete the automatic configuration created on the interface and create a new network connection. Select your newly added network interface in the add connection page. Then set firewall zone to internal and external appropriately. You can configure the interface to connect to a network or provide network configuration to whatever machine connects to it. Similarly, if it is a Wi-Fi interface, you can configure it to become a Wi-FI access point or to connect to an existing access points in the network.
Manual Network Operation FreedomBox automatically configures networks by default and provides a simplified interface to customize the configuration to specific needs. In most cases, manual operation is not necessary. The following steps describe how to manually operate network configuration in the event that a user finds FreedomBox interface to insufficient for task at hand or to diagnose a problem that FreedomBox does not identify. On the command line interface: To see the list of available network devices: nmcli device To see the list of configured connections: nmcli connection To see the current status of a connection: nmcli connection show '<conneciton_name>' To see the current firewall zone assigned to a network interface: nmcli connection show '<conneciton_name>' | grep zone or firewall-cmd --zone=internal --list=all firewall-cmd --zone=external --list=all To create a new network connection: nmcli con add con-name "<connection_name>" ifname "<interface>" type ethernet nmcli con modify "<connection_name>" connection.autoconnect TRUE nmcli con modify "<connection_name>" connection.zone internal To change the firewall zone for a connection: nmcli con modify "<connection_name>" connection.zone "<internal|external>" For more information on how to use nmcli command, see its man page. Also for a full list of configuration settings and type of connections accepted by Network Manager see: To see the current status of the firewall and manually operate it, see the Firewall section.
Upgrades FreedomBox can automatically install security upgrades. On the Upgrades page of the Settings section in Plinth you can turn on automatic upgrades. For FreedomBox versions above 0.5, this feature is enabled by default and there is no manual action necessary. It is strongly recommended that you have this option enabled to keep your FreedomBox secure. Upgrades are performed every day at night. If you wish to shutdown FreedomBox every day after use, keep it running at night once a week or so to let the automatic upgrades happen. Alternatively, you can perform manual upgrades as described below.
Manual Upgrades In the Plinth web interface, you can initiate a manual upgrade process from Upgrades page of the Settings section. Note that once the upgrades start, it may take a long time to complete and Plinth may seem to wait for the page to load. Under some circumstances, automatic upgrades may fail and require you perform a manual upgrade action. Even upgrades initiated from Plinth may not finish properly. This may be because the upgrade process requires you to make a decision. In these cases, manual upgrade on the terminal may be the only option. In addition, while the upgrade task is running any application installations will wait until the upgrade task is finished. Depending on the hardware, the upgrade task may take a little time, therefore, giving the impression that the application installation stalled. To perform manual upgrades on the terminal, login into FreedomBox on a terminal or using a remote secure shell (see Secure Shell section). Then run the following commands: $ sudo su - Password: # apt-get update # apt-get dist-upgrade This will ask you if it is alright to install/upgrade (or remove) some packages and use (or release) some disk space. Say yes after review. In some cases, during the upgrades process you will be asked questions about modified configuration files, answering with a default Keep current configuration is usually safe.
Firewall Firewall is a network security system that controls the incoming and outgoing network traffic. Keeping a firewall enabled and properly configured reduces risk of security threat from the Internet. The operation of the firewall in Plinth web interface of FreedomBox is automatic. When you enable a service it is automatically permitted in the firewall and when you disable a service it is automatically disabled in the firewall. For services which are enabled by default on FreedomBox, firewall ports are also enabled by default during the first run process. Firewall management in FreedomBox is done using FirewallD.
Interfaces Each interface is needs to be assigned to one (and only one) zone. Whatever rules are in effect for a zone, those rules start to apply for that interface. For example, if HTTP traffic is allowed in a particular zone, then web requests will be accepted on all the addresses configured for all the interfaces assigned to that zone. There are primarily two firewall zones used. The internal zone is meant for services that are provided to all machines on the local network. This may include services such as streaming media and simple file sharing. The external zone is meant for services that are provided publicly on the Internet. This may include services such as blog, website, email web client etc. For details on how network interfaces are configured by default, see the Networks section.
Ports/Services The following table attempts to document the ports, services and their default statuses in FreedomBox. If you find this page outdated, see the Plinth source for lib/freedombox/first-run.d/90_firewall and Firewall status page in Plinth UI. Service Port External Enabled by default Status shown in Plinth Managed by Plinth SSH 22/tcp {*} (./) (./) {X} JWChat 80/tcp {*} (./) (./) {X} JWChat 443/tcp {*} (./) (./) {X} OwnCloud 80/tcp {*} (./) (./) (./) OwnCloud 443/tcp {*} (./) (./) (./) Plinth 443/tcp {*} (./) (./) {X} Tor (Socks) 9050/tcp {o} (./) {X} {X} NTP 123/udp {o} (./) {X} {X} DNS 53/tcp {o} (./) {X} {X} DNS 53/tdp {o} (./) {X} {X} mDNS 5353/udp {o} (./) {X} {X} DHCP 67/udp {o} (./) {X} {X} Bootp 67/tcp {o} {X} {X} {X} Bootp 67/udp {o} {X} {X} {X} Bootp 68/tcp {o} {X} {X} {X} Bootp 68/udp {o} {X} {X} {X} LDAP 389/tcp {o} {X} {X} {X} LDAPS 636/tcp {o} {X} {X} {X} OpenVPN 1194/udp {*} {X} {X} {X} Privoxy 8118/tcp {o} (./) {X} {X} XMPP Server 5269/tcp {*} (./) (./) {X} XMPP Client 5222/tcp {*} (./) (./) {X} XMPP Bosh 5280/tcp {*} (./) (./) {X} Obfsproxy <random>/tcp {*} {X} {X} {X}
Manual operation See FirewallD documentation for more information on the basic concepts and comprehensive documentation.
Enable/disable firewall To disable firewall service firewalld stop or with systemd systemctl stop firewalld To re-enable firewall service firewalld start or with systemd systemctl start firewalld
Modifying services/ports You can manually add or remove a service from a zone. To see list of services enabled: firewall-cmd --zone=<zone> --list-services Example: firewall-cmd --zone=internal --list-services To see list of ports enabled: firewall-cmd --zone=<zone> --list-ports Example: firewall-cmd --zone=internal --list-ports To remove a service from a zone: firewall-cmd --zone=<zone> --remove-service=<service> firewall-cmd --permanent --zone=<zone> --remove-service=<interface> Example: firewall-cmd --zone=internal --remove-service=xmpp-bosh firewall-cmd --permanent --zone=internal --remove-service=xmpp-bosh To remove a port from a zone: firewall-cmd --zone=internal --remove-port=<port>/<protocol> firewall-cmd --permanent --zone=internal --remove-port=<port>/<protocol> Example: firewall-cmd --zone=internal --remove-port=5353/udp firewall-cmd --permanent --zone=internal --remove-port=5353/udp To add a service to a zone: firewall-cmd --zone=<zone> --add-service=<service> firewall-cmd --permanent --zone=<zone> --add-service=<interface> Example: firewall-cmd --zone=internal --add-service=xmpp-bosh firewall-cmd --permanent --zone=internal --add-service=xmpp-bosh To add a port to a zone: firewall-cmd --zone=internal --add-port=<port>/<protocol> firewall-cmd --permanent --zone=internal --add-port=<port>/<protocol> Example: firewall-cmd --zone=internal --add-port=5353/udp firewall-cmd --permanent --zone=internal --add-port=5353/udp
Modifying the zone of interfaces You can manually change the assignment of zones of each interfaces after they have been autuomatically assigned by the first boot process. To see current assignment of interfaces to zones: firewall-cmd --list-all-zones To remove an interface from a zone: firewall-cmd --zone=<zone> --remove-interface=<interface> firewall-cmd --permanent --zone=<zone> --remove-interface=<interface> Example: firewall-cmd --zone=external --remove-interface=eth0 firewall-cmd --permanent --zone=external --remove-interface=eth0 To add an interface to a zone: firewall-cmd --zone=<zone> --add-interface=<interface> firewall-cmd --permanent --zone=<zone> --add-interface=<interface> Example: firewall-cmd --zone=internal --add-interface=eth0 firewall-cmd --permanent --zone=internal --add-interface=eth0
Hardware FreedomBox is aimed as a consumer electronics device that is easy to setup, maintain and use. The project does not aim to create a custom hardware device. Instead we plan to support/customize exiting hardware. In addition to supporting various single board computers and other devices, FreedomBox also supports being installed in a virtual machine. Also, any Debian machine can be turned into a FreedomBox by installing the freedombox-setup package. See the manual for more details.
Supported Hardware
Recommended Hardware FreedomBox Danube Edition FreedomBox - Danube Edition (based on Cubietruck) Cubieboard 2 Cubieboard2 BeagleBone Black BeagleBone Black A20 OLinuXino Lime2 A20 OLinuXino Lime2 A20 OLinuXino MICRO A20 OLinuXino MICRO PC Engines APU PC Engines APU Debian Debian VirtualBox VirtualBox . . .
Also Working Hardware This hardware works but is not recommended due to freedom, performance-per-cost, or other concerns: DreamPlug DreamPlug Raspberry Pi Raspberry Pi Raspberry Pi 2 Raspberry Pi 2 Note: As FreedomBox is in development state, Supported Hardware means that FreedomBox images are built for the said hardware and at least one developers has reported the basic functions to be working.
Targeted Hardware
List of Hardware Targeted Although the project may focus on supporting specific devices, we are looking to support as wider a variety of hardware as possible that is suitable for FreedomBox needs. Take a look at the list of hardware targeted for support.
Adding Hardware Support If you are a developer, consider adding hardware support for your device by modifying Freedom Maker and FreedomBox Setup.
Cubietruck
FreedomBox Danube Edition FreedomBox Danube Edition FreedomBox Danube Edition is a custom casing around Cubietruck coupled with an SSD.
Cubietruck / Cubieboard3 Cubietruck (Cubieboard3) is a single board computer with better performance than many other such boards. FreedomBox images are being built for it. For using this board as FreedomBox, a separate USB WiFi device that does not require non-free firmware is recommended.
Download FreedomBox SD card images for this hardware are being built. These SD card images are meant for use with the on-board SD card slot and won't work when used with a separate SD card reader connected via USB. An alternative to downloading these images is to install Debian on Cubietruck and then install FreedomBox on it.
Build Image FreedomBox images for this hardware can be built using Freedom Maker.
Availability FreedomBox Danue Edition A limited number of units are planned to be shipped along with the release of FreedomBox 1.0. If you wish to get one, express your interest. Cubietruck / Cubieboard3 Price: 89 USD List of suppliers
Hardware Open Hardware: No CPU: Allwinner A20, ARM Cortex-A7 @ 1GHz dual-core RAM: 2 GiB DDR3 @ 480 MHz Storage: 8 GB NAND flash built-in, 1x microSD slot Architecture: armhf Ethernet: 10/100/1000, RJ45 WiFi: Broadcom BCM4329/BCM40181 (no free WiFi drivers + firmware available) SATA: 1x 2.0 port
Non-Free Status Non-free blobs required: ? WiFi: no free WiFi drivers + firmware available Works with stock Debian kernel: yes
Known Issues WiFi does not work with free software. A separate USB WiFi device is recommended.
Beagle Bone Black Beagle Bone Black Beagle Bone Black (Revision C.1) is an open hardware single board computer. FreedomBox images are built and tested for it. For using this board as FreedomBox, a USB WiFi device that does not require non-free firmware is recommended.
Download FreedomBox SD card images for this hardware are available. Follow the instructions on the download page to create a FreedomBox SD card and boot into FreedomBox. Note: This image is for BeagleBone Black. It won't work on BeagleBone Green. An alternative to downloading these images is to install Debian on BeagleBone and then install FreedomBox on it.
Build Image FreedomBox images for this hardware can be built using Freedom Maker.
Availability Price: ~ 59 USD (50 EUR) Mouser Electronics Full list of suppliers
Hardware Open Hardware: Yes CPU: AM335x 1GHz ARM Cortex-A8 RAM: 512MB DDR3L 800 Mhz Storage: Onboard 4GB, 8bit Embedded MMC and microSD Architecture: armhf Ethernet: 10/100, RJ45 WiFi: None, use a USB WiFi device SATA: None
Non-Free Status Non-free blobs required: No WiFi: Not available Works with stock Debian kernel: Yes
Known Issues None
A20 OLinuXino Lime2 A20 OLinuXino Lime2 Olimex's A20 OLinuXino Lime2 is fully open source hardware single board computer using the Allwinner A20 Dual Core ARM processor. FreedomBox images are being built for it starting with version 0.7. For using this board as FreedomBox, a separate USB WiFi device that does not require non-free firmware is recommended.
Similar Hardware The following similar hardware will also work well with FreedomBox. Olimex's A20 OLinuXino Lime2 4GB. This hardware merely has extra 4GB NAND storage that is not used by FreedomBox.
Download FreedomBox SD card images for this hardware are being built. These SD card images are meant for use with the on-board SD card slot and won't work when used with a separate SD card reader connected via USB. An alternative to downloading these images is to install Debian on the device and then install FreedomBox on it.
Build Image FreedomBox images for this hardware can be built using Freedom Maker once the support for it is added.
Availability Price: 45 EUR (A20 OLinuXino Lime2) Price: 55 EUR (A20 OLinuXino Lime2 4GB) Olimex Store
Hardware Open Source Hardware (OSHW): Yes CPU: Allwinner A20, ARM Cortex-A7 @ 1GHz dual-core RAM: 1 GiB DDR3 Storage: 4 GB NAND flash built-in (only on 4GB model), 1x microSD slot Architecture: armhf Ethernet: 10/100/1000, RJ45 WiFi: None, use a USB WiFi device SATA: 1x port
Non-Free Status Non-free blobs required: No WiFi: Not available Works with stock Debian kernel: Yes Boot Firmware: BROM (GPLV2+)
Known Issues WiFi is not available. A separate USB WiFi device is recommended.
A20 OLinuXino MICRO A20 OLinuXino MICRO Olimex's A20 OLinuXino MICRO is fully open source hardware single board computer using the Allwinner A20 Dual Core ARM processor. FreedomBox images are being built for it starting with version 0.7. For using this board as FreedomBox, a separate USB WiFi device that does not require non-free firmware is recommended.
Similar Hardware The following similar hardware will also work well with FreedomBox. Olimex's A20 OLinuXino MICRO 4GB. This hardware merely has extra 4GB NAND storage that is not used by FreedomBox.
Download FreedomBox SD card images for this hardware are being built. These SD card images are meant for use with the on-board SD card slot and won't work when used with a separate SD card reader connected via USB. An alternative to downloading these images is to install Debian on the device and then install FreedomBox on it.
Build Image FreedomBox images for this hardware can be built using Freedom Maker once the support for it is added.
Availability Price: 55 EUR (A20 OLinuXino MICRO) Price: 65 EUR (A20 OLinuXino MICRO 4GB) Olimex Store
Hardware Open Source Hardware (OSHW): Yes CPU: Allwinner A20, ARM Cortex-A7 @ 1GHz dual-core RAM: 1 GiB DDR3 Storage: 4 GB NAND flash built-in (only on 4GB model), 1x microSD slot Architecture: armhf Ethernet: 10/100, RJ45 WiFi: None, use a USB WiFi device SATA: 1x port
Non-Free Status Non-free blobs required: No WiFi: Not available Works with stock Debian kernel: Yes Boot Firmware: BROM (GPLV2+)
Known Issues WiFi is not available. A separate USB WiFi device is recommended.
APU PC Engines APU 1D PC Engines APU 1D is a single board computer with 3 Gigabit ethernet ports, a powerful AMD APU and Coreboot firmware. FreedomBox images built for AMD64 machines are tested to work well for it. For using this board as FreedomBox, a USB WiFi device that does not require non-free firmware is recommended.
Similar Hardware Although untested, the following similar hardware is also likely to work well with FreedomBox. Using amd64 image: apu1c apu1c4 apu1d4 Using i386 image: alix1d alix1e alix2d2 alix2d3 alix2d13 alix3d2 alix3d3 alix6f2
Download FreedomBox disk images for this hardware are available. Follow the instructions on the download page to create a FreedomBox SD card, USB disk, SSD or hard drive and boot into FreedomBox. Pick the image meant for all amd64 machines. An alternative to downloading these images is to install Debian on the APU and then install FreedomBox on it.
Networking The first network port, the left most one in the above picture, is configured by FreedomBox to be an upstream Internet link and the remaining 2 ports are configured for local computers to connect to.
Build Image FreedomBox images for this hardware, which is for all amd64 machines, can be built using Freedom Maker.
Availability Price: 110 - 170 USD (depending on the board and supplier) PC Engines Full list of suppliers
Hardware Open Hardware: No CPU: AMD G series T40E RAM: 2 GB DDR3-1066 DRAM Storage: SD card, External USB Architecture: amd64 Ethernet: 3 Gigabit Ethernet ports WiFi: None, use a USB WiFi device SATA: 1 m-SATA and 1 SATA
Non-Free Status Non-free blobs required: No WiFi: Not available Works with stock Debian kernel: Yes Boot firmware: Coreboot
Known Issues None
VirtualBox VirtualBox This page will help you get started with using FreedomBox on a virtual machine using VirtualBox. While VirtualBox images are primarily used for testing and development, they can also be used for regular use if you have spare resources on one of your machines. This setup is useful if: You don't own one of the supported hardware devices. You don't use Debian GNU/Linux as your operating system. You don't want to disturb your Debian installation to try out FreedomBox.
Download FreedomBox SD card images for this VirtualBox are available. Follow the instructions on the download page to download and verify VirtualBox images. An alternative to downloading these images is to install Debian on VirtualBox and then install FreedomBox on it.
Creating a Virtual Machine Decompress the downloaded VDI image. Create a new VirtualBox VM. When asked for a "Virtual Hard Disk" select the .vdi file you just extracted in step 1. After a virtual machine is created, go to settings -> [Network] -> [Interface] and set on the following options.
Network Configuration VirtualBox provides many types of networking options. Each has its advantages and disadvantages. For more information about how various networking types work in VirtualBox, see VirtualBox's networking documentation. For a simple setup, it is recommended that you use a single network interface in your guest machine. This will make the first boot script automatically configure that interface as an internal network with automatic network configuration. Inside the guest machine, the networking is configured automatically and all the services are made available on this network interface. For more information on how networks are configured by default in FreedomBox, see Networks section. What remains is to make those services available to the host machine or to other machines in the network. You must then choose one of the following types of networking for the network interface on your guest machine. To set a particular type of network for the guest's network adapter, go to the guest VM's settings then the network options and then select the adapter you wish to configure. There, set the network type from the available list of networks. First and the recommended option is to use the Bridge type of network. This option exposes the guest machine to the same network that host network is connected to. The guest obtains network configuration information from a router or DHCP server on the network. The guest will appear as just another machine in the network. A major advantage of this of setup is that the host and all other machines in the network will be able to access the services provided by guest without requiring any further setup. The only drawback of this approach is that if the host is not connected to any network, the guest's network will remain unconfigured making it inaccessible even from the host. Second method is Host only type of networking. With a guest's network interface configured in this manner, it will only be accessible from the host machine. The guest will not able access any other machine but the host, so you do not have internet access on the guest. All services on the guest are available to the host machine without any configuration such as port forwarding. The third option is to use the NAT type of network. This the networking type that VirtualBox assigns to a freshly created virtual machine. This option works even when host is not connected to any network. The guest is automatically configured and is able to access the Internet and local networks that host is able to connect to. However, the services provided by the guest require port forwarding configuration setup to be available outside. To configure this go to VM settings -> [Network] -> [Adapter] -> [Port Forwarding]. Map a port such as 2222 from host to guest port 22 and you will be able to ssh into FreedomBox from host machine as follows: ssh -p 2222 fbx@localhost Map 4443 on host to 443 on the guest. This make FreedomBox HTTPS service available on host using the URL You will need to add a mapping for each such services from host to guest. The final option is to create two network interfaces, one host only and one NAT type. This way you can access the guest without any additional configuration, and you have internet access on the guest. The guest will be invisible to any other machines on the network. Summary of various network types: - Guest accessible from other machines Guest accessible from host Works without port forwarding Works without host connected to network Guest has internet access Bridged (./) (./) (./) {X} (./) Host only {X} (./) (./) (./) {X} NAT (./) (./) {X} (./) (./) NAT and Host {X} (./) (./) (./) (./)
Using You can log in as the user created during Plinth setup. After logging in, you can become root with the command sudo su. See the FreedomBox usage page for more details.
Build Image If you wish to build your own images instead of downloading available images, it can be done using Freedom Maker.
Tips & Troubleshooting
Finding out the IP address of the virtual machine This depends on the network configuration you chose. With a bridged adapter, your virtual machine gets its IP address from the DHCP server of your network, most likely of your Router. You can try the first couple of IP addresses or check your router web interface for a list of connected devices. If you chose host-only adapter, the IP address is assigned by the DHCP server of your VirtualBox network. In the VirtualBox Manager, go to File -> Preferences -> Network -> Host-only Networks. You can see and edit the DHCP address range there, typically you get assigned addresses close to the Lower Address Bound. Another possibility of finding the IP address is to login via the Virtualbox Manager (or similar software). The FreedomBox images do not have any default user accounts, so you need to set an initial user and password using the passwd-in-image script.
Networking Problems with macchanger The package macchanger can cause network problems with VirtualBox. If you have a valid IP address on your guest's host network adapter (like 192.168.56.101) but are not able to ping or access the host (like 192.168.56.1), try uninstalling macchanger: $ dpkg --ignore-depends=freedombox-setup --remove macchanger You might have to manually remove the script /etc/network/if-prep-up/macchanger. If Debian complains about unmet dependencies when you use a package manager (apt-get, aptitude, dpkg), try to remove 'macchanger' from the dependencies of 'freedombox-setup' in the file /var/lib/dpkg/status.
Mounting Images Locally If you want to mount images locally, use the following to copy built images off the VirtualBox: $ mkdir /tmp/vbox-img1 /tmp/vbox-root1 $ vdfuse -f freedombox-unstable_2013.0519_virtualbox-i386-hdd.vdi /tmp/vbox-img1/ $ sudo mount -o loop /tmp/vbox-img1/Partition1 /tmp/vbox-root1 $ cp /tmp/vbox-root1/home/fbx/freedom-maker/build/freedom*vdi ~/ $ sudo umount /tmp/vbox-root1 # $ sudo umount /tmp/vbox-img1 # corruption here.
Fixing the time after suspend and resume The virtual machine loses the correct time/date after suspending and resuming. One way to fix this is to create a cron-job that restarts the time service ntp. You can add a crontab entry as root to restart ntp every 15 minutes by typing 'crontab -e' and adding this line: */15 * * * * /etc/init.d/ntp restart Do not restart this service too often as this increases the load of publicly and freely available NTP servers.
Debian FreedomBox is a pure blend of Debian. This means that all the work on FreedomBox is available in Debian as packages. It also means that any machine running Debian can be turned into a FreedomBox. This page describes the process of installing FreedomBox on a Debian system. Currently, FreedomBox works in Debian Testing (Stretch) and Unstable (Sid). Use a fresh Debian installation Installing FreedomBox changes your Debian system in many important ways. This includes installing a firewall and regenerating server certificates. It is hence recommended that you install FreedomBox on a fresh Debian installation instead of an existing setup. use "fbx" as the login name If you choose to create an initial user account, use "fbx" as the login name. (Once the FreedomBox setup program completes, all user accounts except for the "fbx" account will be locked out via pam_access. This also affects sudo access.)
Installing on Debian Check the Troubleshooting section below, for any tips or work-arounds that might help during the install. Install Debian Testing (Stretch) or Unstable (Sid) on your hardware. Update your package list. $ sudo apt-get update Install freedombox-setup package. $ sudo apt-get install freedombox-setup When asked to specify whether Macchanger should be set up to run automatically, please choose "No". Run FreedomBox setup program. This installs further packages and sets up basic configuration. $ sudo /usr/lib/freedombox/setup | tee freedombox-setup.log You may have to clear your existing network configuration. See Troubleshooting note #2 below. Reboot the system. This is necessary to trigger the first-run script. $ sudo reboot After the system boots up, wait for it to reboot again. The first-run scripts sets up a few things and initiates a reboot. After the second reboot you can start using FreedomBox.
Troubleshooting There is a bug in policykit-1 package that causes errors and hangs during installation of freedombox-setup package. A workaround is to first install policykit-1 package and then reboot. After that, follow the above procedure setup procedure. $ sudo apt-get update $ sudo apt-get install policykit-1 $ sudo reboot Freedombox does not support network device configuration via /etc/network/interfaces, and it will not manage any non-loopback interfaces mentioned there. (See bug #797614.) Future versions of freedombox-setup will clear this file automatically; for now, edit it manually and ensure that it contains only the following: auto lo iface lo inet loopback If you have already completed the setup process without doing this step, you will need to clear out the /etc/network/interfaces file keeping only the above lines. Then perform a reboot. After this network connections configured by the setup step above will configure your network. Network interfaces will then be in the internal or external firwall zone. This is essential for the FreedomBox's web interface to be reachable from other machines in the network. You can tweak network manager connections with the nmtui command if you wish.
DreamPlug DreamPlug DreamPlug is the hardware for which FreedomBox has been originally targeted. FreedomBox images are built and tested for it. For using this device as FreedomBox, a USB WiFi device that does not require non-free firmware is recommended. You can find more support and discussion for DreamPlug on the official forum.
Download FreedomBox SD card images for this hardware are available. Follow the instructions on the download page to create a FreedomBox SD card and boot into FreedomBox. See also instructions for using an internal micro-SD with DreamPlug. An alternative to downloading these images is to install Debian on DreamPlug and then install FreedomBox on it.
Firmware Note that the factory firmware configurations may vary between revisions of the hardware, and render some images incompatible. See the DreamPlug firmware page for information on what images are compatible and how to update your DreamPlug firmware.
Build Image FreedomBox images for this hardware can be built using Freedom Maker.
Testing Instructions on how to test this hardware are available.
Availability Price: 159 USD DreamPlug manufacturer Reseller Spinifex in Australia
Hardware Open Hardware: No CPU: Marvell Kirkwood 88F6281 @ 1.2GHz RAM: 512MB 16bit DDR2-800 MHz Storage: 4 GB on board micro-SD Architecture: armel Ethernet: 2x 10/100/1000, RJ45 WiFi: SD8787, 802.11 b/g/n SATA: eSATA 2.0 port
Non-Free Status Non-free blobs required: built-in WiFi WiFi: no free WiFi drivers + firmware available Works with stock Debian kernel: yes
Known Issues WiFi does not work with free software. A separate USB WiFi device is recommended.
Raspberry Pi Model B+ Raspberry Pi (Model B+) Raspberry Pi (Model B+) is a popular single board computer developed with the intention of promoting teaching of basic computer science in schools. FreedomBox images are built and tested for it. For using this board as FreedomBox, a USB WiFi device that does not require non-free firmware is recommended. Note: The Debian architecture used for this device is armel. This means floating point computations are done in software and most operations are slower than what Raspberry Pi is capable of.
Download FreedomBox SD card images for this hardware are available. Follow the instructions on the download page to create a FreedomBox SD card and boot into FreedomBox.
Build Image FreedomBox images for this hardware can be built using Freedom Maker.
Availability Price: 35 USD List of official distributors
Hardware Open Hardware: No CPU: ARM1176JZF-S (ARMv6k) 700 MHz RAM: 512 MB Storage: MicroSD card slot Architecture: armel Ethernet: 10/100, RJ45 WiFi: None, use a USB WiFi device SATA: None
Non-Free Status Non-free blobs required: boot firmware WiFi: Not available Works with stock Debian kernel: No
Known Issues The Debian architecture used for this device is armel. This means floating point computations are done in software and generally most operations are slower than what Raspberry Pi is capable of.
Raspberry Pi 2 Model B Raspberry Pi 2 Raspberry Pi 2 (Model B ) is a popular single board computer developed with the intention of promoting teaching of basic computer science in schools. It is a successor to Raspberry Pi Model B+ with much faster processor and more RAM. FreedomBox images are built and tested for it. For using this board as FreedomBox, a USB WiFi device that does not require non-free firmware is recommended. Note: For FreedomBox release 0.5, the Debian architecture used for this device is armel. This means floating point computations are done in software and most operations are slower than what Raspberry Pi 2 is capable of. Starting with FreedomBox release 0.6 separate armhf images with full hardware floating point support will be available.
Download FreedomBox SD card images for this hardware are available. Follow the instructions on the download page to create a FreedomBox SD card and boot into FreedomBox.
Build Image FreedomBox images for this hardware can be built using Freedom Maker.
Availability Price: 35 USD List of official distributors
Hardware Open Hardware: No CPU: 900 MHz quad-core ARM Cortex-A7 RAM: 1 GB Storage: MicroSD card slot Architecture: armhf Ethernet: 10/100, RJ45 WiFi: None, use a USB WiFi device SATA: None
Non-Free Status Non-free blobs required: boot firmware WiFi: Not available Works with stock Debian kernel: No
Known Issues The Debian architecture used for this device is armel. This means floating point computations are done in software and generally most operations are slower than what Raspberry Pi 2 is capable of. However, starting with FreedomBox 0.6 separate images for Raspberry Pi 2 with armhf architecture will be built.
USB Wi-Fi FreedomBox works on many single board computers. However, many of these boards do not have built-in Wi-Fi capabilities. Even when Wi-Fi capability is available, non-free proprietary firmware is required to make them work. A solution to the problem is to plug-in a USB Wi-Fi device into one of the available USB ports. There are many such devices available which do not require non-free firmware to work. The following is a list of such devices that work with FreedomBox devices. Some devices based on these chips have tested to work well with FreedomBox including functions such as access point mode. Devices with Atheros AR7010 chip Devices with Atheros AR9271 chip
Firmware Installation The free firmware for these devices is not packaged in Debian yet. You can manually download and install the firmware as follows: sudo su [enter password] cd /lib/firmware wget https://www.thinkpenguin.com/files/ath9k-htc/version-1.4-beta/htc_9271.fw wget https://www.thinkpenguin.com/files/ath9k_firmware_free-version/htc_7010.fw
Resources Debian Wiki on WiFi drivers Wikipedia: Comparison of open-source Linux wireless network drivers WikiDevi: database of computer hardware
Advanced Topics
Adding Additional Features There are a number of incomplete projects that you might find useful, for setting up a wiki, an IM server, and so forth. To check these out, download the repository: $ hg clone https://bitbucket.org/nickdaly/plugserver ~/plugserver Then, read the README. It's pretty detailed. Also, if you can, it may be best to wait until these tools are fully integrated into the FreedomBox image. Otherwise, migrating from these custom tools to the officially supported FreedomBox tools may be difficult. Ultimately, that decision is up to you.
Contributing From code, design and translation to spreading the world and donation, here is a list of possible contributions to develop FreedomBox.
Quick Links Progess calls TODO page Donation page
Welcome to newcomers As a newcomer, you are more than welcome to introduce yourself to all users and doers on the "FreedomBox-discuss" mailing list or on the #freedombox IRC channel. In addition to make useful contacts, you can start reporting bugs and translate (see below) the wiki website and the FreedomBox web interface.
Development priorities Upcoming priorities have been discussed end of October 2015 by several core developers and the Freedombox Foundation. You'll find on the mailing list archives a Medium Term Roadmap for 2015 and 2016. We want to enjoy soon a version 1.0. We are targeting mid January for a 0.8 release. The main focus of the 0.8 release is going to be integrated in the PGP based SSL Client authentication work. We are planning on a 0.9 polish release for late February with general usability improvements. Please check next progess calls to keep yourself on track and meet members of the release team. A TODO page aggregates the complete list of the items to work on for FreedomBox.
Contributions needed
Add an Application If you are a developer and wish to see an application available in FreedomBox, you can contribute by adding the application to FreedomBox. See the FreedomBox Developer Manual.
Bugs List of bugs listed on Debian universal system.
Code If you are a developer, you can contribute code to one of the sub-projects of FreedomBox. Step-by-step process of contributing code to FreedomBox is available. FreedomBox Setup: a Debian package for setting up the FreedomBox. Plinth: a web interface to administer the functions of FreedomBox. Freedom Maker: a script to build FreedomBox disk images for use on various hardware devices or virtual machines. You can pickup a task from one of the TODO lists. The individual page project pages contain information availabily of the code, how to build and TODO lists.
Design
User Experience Design If you are a user experience designer, you can help FreedomBox with the following items: UI experience for the Plinth web interface Web design for freedomboxfoundation.org and FreedomBox wiki pages Logo and branding (we currently have an identity manual and logos) Possible designs for custom FreedomBox cases on single board computers User experience design
Technical Design FreedomBox is still under development any many components are yet to be worked on. You can contribute to the discussion on various technical design and implementation aspects of FreedomBox. See: Design portal
Donate The FreedomBox Foundation is a Delaware non-profit corporation in the process of applying for 501(c)(3) federal nonprofit recognition from the IRS. FreedomBox project is run by volunteers. You can help the project financially by donating via PayPal, Bitcoin or by mailing a check. Please see the donation page for details on how to donate.
Document: User Manual, Website and Wiki FreedomBox needs better documentation for users and contributors. FreedomBox manual is prepared by aggregating various pages on the wiki and exporting to various formats. The manual is then used in Plinth and elsewhere. If you wish to contribute to the FreedomBox wiki (and consequently the FreedomBox manual), you can create a wiki account and start editing. For contributing to the website please start a discussion on the FreedomBox mailing list.
Quality Assurance FreedomBox already runs on many platforms and it is not possible for developers to test all possible platforms. If you have one of the supported hardware you can help with testing FreedomBox on the platform. When an application is made available on FreedomBox, not all of its functionality is tested in the real world by developer doing the work. Deploying the application and testing it will help ensure high quality applications in FreedomBox. See the quality assurance page for a basic list of test cases to check for and information on reporting bugs.
Localization All text visible to users of FreedomBox needs to be localized to various languages. This translation work includes: Plinth web interface for FreedomBox FreedomBox documentation FreedomBox website and wiki Individual applications that FreedomBox exposes to users such as ownCloud, JWChat etc. Some of the translation work are implemented in user interface (Plinth) since the 0.7 release. Documents for user interface translation are currently available on Transifex localization platform and GitHub. If you wish to see FreedomBox available for one of your languages, please start a discussion on the FreedomBox discuss mailing list or on the #freedombox IRC channel to avoid double translations. For more information, please visit the FreedomBox translation landing page.
Spread the Word Speak to your family, friends, local community or at global conferences about the importance of FreedomBox. To be a successful project we need many more participants, be it users or contributors. Write about your efforts at the talks page and on the wiki.
Developer Guide This manual is meant for developers intending to develop applications for FreedomBox. It provides a step by step tutorial and an API reference.
Writing Applications - Tutorial This tutorial covers writing an application for FreedomBox. FreedomBox is a pure blend of Debian with a web interface, known as Plinth, that configures its applications. We shall discuss various aspects of building an application for FreedomBox, by creating an example application. There are two parts to writing a FreedomBox application. First is to make sure that the application is available as a Debian package uploaded to the repositories. This is the majority of the work involved. However, if an application is already available in Debian repositories, it is trivial to build a FreedomBox UI for it. The second part of writing an application for FreedomBox is to provide a thin web interface layer for configuring the application. This is done by extending Plinth's user interface to provide visibility to the application and to let the user control its operations in a highly simplified way. This layer is referred to as 'Plinth application'. Plinth applications can either be distributed as part of Plinth source code by submitting the applications to the Plinth project or they can distributed independently. This tutorial covers writing an application that is meant to be distributed as part of Plinth. However, writing independent Plinth applications is also very similar and most of this tutorial is applicable. Note The term application, in this tutorial, is used to mean multiple concepts. FreedomBox application is a combination of Debian package and a web interface layer. The web interface layer is also called a Plinth application which is very similar to and built upon a Django application.
Before we begin Plinth is a web interface built using Python3 and Django. FreedomBox applications are simply Django applications within the Plinth project. Hence, for the most part, writing a FreedomBox application is all about writing a Django application. You should start by reading the Django tutorial. All the concepts described there are applicable for how plinth and its applications are be built.
Picking an application We must first, of course, pick an application to add to FreedomBox. For the purpose of this tutorial, let us pick Tiny Tiny RSS. The project description reads as, Tiny Tiny RSS is an open source web-based news feed (RSS/Atom) reader and aggregator, designed to allow you to read news from any location, while feeling as close to a real desktop application as possible. Choosing an application When choosing an application we must make sure that the application respects users' freedom and privacy. By choosing to use FreedomBox, users have explicitly made a choice to keep the data with themselves, to not provide privacy compromising data to centralized entities and to use Free Software that respects their Software Freedom. These are not properties of some of the applications in FreedomBox but all applications must adhere to these principles. Applications should not even ask the users questions to this effect, because users have already made a choice.
Packaging the application Majority of the effort in creating an application for FreedomBox is to package it for Debian and get it uploaded to Debian repositories. Going through the process of packaging itself is outside the scope of this tutorial. It is, however, well documented elsewhere. You should start here. Debian packaging might seem like an unnecessary process that takes time with its adherence to standards, review process, legal checks, etc. However, upon close examination, one will find that without these steps the goals of the FreedomBox project cannot be met. Some of the advantages of Debian packaging are listed below: Legal check ensures that proprietary licensed code or code with bad licenses does not inadvertently creep in. Libraries have to be packaged separately easing security handling. When a security vulnerability is identified in a library, just the library will have to be updated and not all the applications that depend on it. Upgrades become smoother. The dependency handling of the packaging system, configuration handling tools, tools to deal with various types of well known files help with ensuring a proper upgrade. Collaborative maintenance teams ensure that the package is well cared for even if you get busy with other work and can't spend time on your package. Following standards and using common infrastructure is critical to enable this development methodology.
Creating the project structure Create a directory structure as follows with empty files. We will fill them up in a step-by-step manner. +- <plinth_root>/ | +- plinth/ | | | +- modules/ | | | +- ttrss/ | | | +- __init__.py | | | +- forms.py | | | +- urls.py | | | +- views.py | | | +- templates/ | | | | | +- ttrss.html | | | +- tests | | | +- __init__.py | +- actions/ | | | +- ttrss | +- data/ | +- etc/ | +- plinth/ | +- modules-enabled/ | +- ttrss The __init__.py indicates that the directory in which it is present is a Python module. For now, it is an empty file. Plinth's setup script setup.py will automatically install the plinth/modules/ttrss directory (along with other files described later) to an appropriate location. If you are creating an application that stays independent and outside of Plinth source tree, then your setup.py script will need to install it a proper location on the system. The plinth/modules/ directory is a Python3 namespace package. So, you can install it with the plinth/modules/ directory structure into any Python path and still be discovered as plinth.modules.*.
Tell Plinth that we exist The first thing to do is tell Plinth that our application exists. This is done by writing a small file with the Python import path to our application and placing it in data/etc/plinth/modules-enabled/. Let us create this file ttrss: plinth.modules.ttrss This file is automatically installed to /etc/plinth/modules-enabled/ by Plinth's installation script setup.py. If we are writing a module that resides independently outside the Plinth's source code, the setup script will need to copy it to the target location. Further, it is not necessary for the application to be part of the plinth.modules namespace. It can, for example, be plinth_ttrss.
Writing the URLs For a user to visit our application in Plinth, we need to provide a URL. When the user visits this URL, a view is executed and a page is displayed. In urls.py write the following: from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/ttrss/$', views.index, name='index'), ] This routes the /apps/ttrss/ URL to a view called index defined in plinth/modules/ttrss/views.py. This is no different than how routing URLs are written in Django. See Django URL dispatcher for more information.
Adding a menu item We have added a URL to be handled by our application but this does not yet show up to be a link in Plinth web interface. Let us add a link in the applications list. In __init__.py add the following: from plinth import cfg def init(): """Intialize the module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname('News Feed Reader (Tiny Tiny RSS)', 'glyphicon-bullhorn', 'ttrss:index', 850) As soon as Plinth starts, it will load all the enabled modules into memory. After this, it gives a chance to each of the modules to initialize itself by calling the init() method if there is such a method available as <app>.init(). Here we have implemented this method and added our menu item to the applications menu as part of the initialization process. We wish to add our menu item to the list of applications which is why we have retrieved the applications menu which is available under the main menu. After this we add our own menu item to this menu. There are several parameters during this process that are important: In the first parameter we are providing the display name to use for our application when showing the menu item. In the second parameter we are providing the icon to show for this menu item. This is an icon from the Twitter Bootstrap library. See the Twitter Bootstrap library documentation for a list of available icons. We can pick an icon from the available list of icons and just mention its glyphicon class as name here. The third parameter is the name of the URL we have created for our application. Note that when including this application's URLs, Plinth will automatically set the name of the module as the Django URL namespace. Hence it is ttrss:index and not just index. The final parameter specifies where in the menu this application shows up. This is weightage number with which Plinth sorts the menu items. Higher the weightage, the lower the menu item appears (as it sinks). Since Plinth menu items are alphabetically sorted, for our application we wish for it to appear between Public Visibility and Voice Chat. Their weights are 800 and 900 respectively. So we selected 850. We have used the application menu item to insert our own menu item as a child. To be able to use the application menu item, we need to make sure that the module providing the application menu is loaded before our application is loaded. We will do that in the next step.
Specifying module dependencies Specifying a simple list of applications to be loaded before our application provided to Plinth is sufficient. Add this in __init__.py. depends = ['plinth.modules.apps'] Plinth will now make sure that the apps module is loaded before our module is loaded. Application initialization is also ensured to happen in this order. We can safely use any features of this module knowing that they have been initialized. Circular dependencies Circular dependencies are not possible among Plinth applications. Attempting to add them will result in error during startup.
Writing the enable/disable form We wish to provide a user interface to the user to enable and disable the application. Complex modules may require more options but this is sufficient for our application. Add the following forms.py. from django import forms class TtrssForm(forms.Form): """Tiny Tiny RSS configuration form.""" enabled = forms.BooleanField( label='Enable Tiny Tiny RSS', required=False) This creates a Django form that shows a single option to enable/disable the application. It also shows its current state. This is how a regular Django form is built. See Django Forms documentation for more information. Too many options Resist the temptation to create a lot of configuration options. Although this will put more control in the hands of the users, it will make FreedomBox less usable. FreedomBox is a consumer product. Our target users are not technically savvy and we have make most of the decisions on behalf of the user to make the interface as simple and easy to use as possible.
Writing a view In views.py, let us add a view that can handle the URL we have provided above. from .forms import TtrssForm def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = TtrssForm(request.POST, prefix='ttrss') if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = TtrssForm(initial=status, prefix='ttrss') else: form = TtrssForm(initial=status, prefix='ttrss') return TemplateResponse(request, 'ttrss.html', {'title': 'News Feed Reader (Tiny Tiny RSS)', 'status': status, 'form': form}) This view works with the form we created in the previous step. It shows the current status of the service in form. This status is retrieved with the help of get_status() helper method. When the form is posted, again this view is called and it verifies whether the form's input values are correct. If so, it will apply the actions necessary for changed form values using the _apply_changes() method.
Getting the current status of the application The view in the previous setup requires the status of the application to be retrieved using the get_status() method. Let us implement that method in views.py. from plinth.modules import ttrss def get_status(): """Get the current status.""" return {'enabled': ttrss.is_enabled()} This method retrieves the various statuses of the application for display in the view. Currently, we only need to show whether the application is enabled or disabled. So, we retrieve that using a helper method defined in __init__.py. from plinth import action_utils def is_enabled(): """Return whether the module is enabled.""" return action_utils.webserver_is_enabled('50-tt-rss') This method uses one of the several action utilities provided by Plinth. This method checks whether a webserver configuration named 50-tt-rss is enabled.
Displaying the application page The view that we have written above requires a template file known as ttrss.html to work. This template file controls how the web page for our application is displayed. Let us create this template file in templates/ttrss.html. {% extends "base.html" %} {% load bootstrap %} {% block content %} <h2>News Feed Reader (Tiny Tiny RSS)</h2> <p>Tiny Tiny RSS is a news feed (RSS/Atom) reader and aggregator, designed to allow you to read news from any location, while feeling as close to a real desktop application as possible.</p> <h3>Configuration</h3> <form class="form" method="post"> {% csrf_token %} {{ form|bootstrap }} <input type="submit" class="btn btn-primary" value="Update setup"/> </form> {% endblock %} This template extends an existing template known as base.html. This template is available in Plinth core to provide all the basic layout, styling, menus, JavaScript and CSS libraries. We will override the content area of the base template and keep the rest. Yet again, there is nothing special about the way this template is written. This is a regular Django template. See Django Template documentation. For styling and UI components, Plinth uses the Twitter Bootstrap project. See Bootstrap documentation for reference.
Applying the changes from the form The view we have created displays the form and processes the form after the user submits it. It used a helper method called _apply_changes() to actually get the work done. Let us implement that method in views.py. from django.contrib import messages from plinth import actions def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('ttrss', [sub_command]) modified = True if modified: messages.success(request, 'Configuration updated') else: messages.info(request, 'Setting unchanged') We check to make sure that we don't try to disable the application when it is already disabled or try to enable the application when it is already enabled. Although Plinth's operations are idempotent, meaning that running them twice will not be problematic, we still wish avoid unnecessary operations for the sake of speed. We are actually perform the operation using Plinth actions. We will implement the action to be performed a bit later. After we perform the operation, we will show a message on the response page showing that the action was successful or that nothing happened. We use the Django messaging framework to accomplish this. See Django messaging framework for more information.
Installing packages required for the application Plinth takes care of installing all the Debian packages required for our application to work. All we need to do is specify the list of the Debian packages required using a decorator on our view as follows: from plinth import package @package.required(['tt-rss']) def index(request): """Serve configuration page.""" ... The first time this application's view is accessed, Plinth shows a package installation page and allows the user to install the required packages. After the package installation is completed, the user is shown the application's configuration page. If there are configuration tasks to be performed immediately before or after the package installation, Plinth provides hooks for it. The before_install= and on_install= parameters to the @package.required decorator take a callback methods that are called before installation of packages and after installation of packages respectively. See the reference section of this manual or the plinth.package module for details. Other modules in Plinth that use this feature provided example usage.
Writing actions The actual work of performing the configuration change is carried out by a Plinth action. Actions are independent scripts that run with higher privileges required to perform a task. They are placed in a separate directory and invoked as scripts via sudo. For our application we need to write an action that can enable and disable the web configuration. We will do this by creating a file actions/ttrss. import argparse from plinth import action_utils def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('enable', help='Enable Tiny Tiny RSS') subparsers.add_parser('disable', help='Disable Tiny Tiny RSS') return parser.parse_args() def subcommand_enable(_): """Enable web configuration and reload.""" action_utils.webserver_enable('50-tt-rss') def subcommand_disable(_): """Disable web configuration and reload.""" action_utils.webserver_disable('50-tt-rss') def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() subcommand = arguments.subcommand.replace('-', '_') subcommand_method = globals()['subcommand_' + subcommand] subcommand_method(arguments) if __name__ == '__main__': main() This is a simple Python3 program that parses command line arguments. While Python3 is preferred, it can be written in other languages also. It uses a helper utility provided by Plinth to actually enable and disable Apache2 web server configuration. This script is automatically installed to /usr/share/plinth/actions by Plinth's installation script setup.py. Only from here will there is a possibility of running the script under sudo. If you are writing an application that resides indenpendently of Plinth's source code, your setup.py script will need to take care of copying the file to the target location.
Creating diagnostics Plinth provides a simple API for showing diagnostics results. The application has to implement a method for actually running the diagnostics and return the results as a list. Plinth then takes care of calling the diagnostics method and displaying the list in a formatted manner. To implement the diagnostics method, method called diagnose() has to be available as <app>.diagnose(). It must return a list in which each item is the result of a test performed. The item itself is a two-tuple containing the display name of the test followed by the result as passed, failed or error. def diagnose(): """Run diagnostics and return the results.""" results = [] results.extend(action_utils.diagnose_url_on_all( 'https://{host}/ttrss', extra_options=['--no-check-certificate'])) return results There are several helpers available to implement some of the common diagnostic tests. For our application we wish to implement a test to check whether the /ttrss URL is accessible. Since this is a commonly performed test, there is a helper method available and we have used it in the above code. The {host} tag replaced with various IP addresses, hostnames and domain names by the helper to produce different kinds of URLs and they are all tested. Results for all tests are returned which we then pass on to Plinth. The user can trigger the diagnostics test by going to System -> Diagnostics page. This runs diagnostics for all the applications. If we want users to be able to run diagnostics specifically for this application, we can include a button for it in our template immediately after the application description. {% include "diagnostics_button.html" with module="ttrss" %}
Logging Sometimes we may feel the need to write some debug messages to the console and Plinth log file. Doing this in Plinth is just like doing this any other Python application. import logging logger = logging.getLogger(__name__) def example_method(): logger.debug('A debug level message') logger.info('Showing application page - %s', request.method) try: something() except Exception as exception: # Print stack trace logger.exception('Encountered an exception - %s', exception) For more information see Python logging framework documentation.
Adding a License Plinth is licensed under the GNU Affero General Public License Version 3 or later. FreedomBox UI applications, which run as modules under Plinth, also need to be under the same license or under a compatible license. The license of our application needs to clear for our application to be accepted by users and other developers. Let us add license headers to our application. # # This file is part of Plinth. # # 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 <http://www.gnu.org/licenses/>. # The above header needs to be present in every file of the application. It is suitable for Python files. However, in template files, we need to modify it slightly. {% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 <http://www.gnu.org/licenses/>. # {% endcomment %} ...
Internationalization Every string message that is visible to the user must be localized to user's native language. For this to happen, our application needs to be internationalized. This requires marking the user visible messages for translation. Plinth applications use the Django's localization methods to make that happen. from django.utils.translation import ugettext as _ def index(request): ... return TemplateResponse(request, 'ttrss.html', {'title': _('News Feed Reader (Tiny Tiny RSS)'), 'status': status, 'form': form}) Notice that the page's title is wrapped in the _() method call. Let us do that for the menu item of the application too. from django.utils.translation import ugettext_lazy as _ def init(): """Intialize the module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('News Feed Reader (Tiny Tiny RSS)'), 'glyphicon-envelope', 'ttrss:index', 600) Notice that in this case, we have used the ugettext_lazy and in the first case we have used the regular ugettext. This is because in the second case the gettext lookup is made once and reused for every user looking at the interface. These users may each have a different language set for their interface. Lookup made for one language should not be used for other users. The _lazy method provided by Django makes sure that the return value is an object that will actually be converted to string at the final moment when the string is being displayed. In the first case, the looked is made and string is returned immediately. All of this is the usual way internationalization is done in Django. See Django internationalization and localization documentation for more information.
Coding standards For readability and easy collaboration it is important to follow common coding standards. Plinth uses the Python coding standards and uses the pylint and flake8 tools to check if the there are any violations. Run these tools on our application and fix any errors and warnings. Better yet, integrate these tools into your favorite IDE for on-the-fly checking. For the most part, the code we have written so far, is already compliant with the coding standards. This includes variable/method naming, indentation, document strings, comments, etc. One thing we have to add are the module documentation strings. Let us add those. In __init__.py add the top: """ Plinth module to configure Tiny Tiny RSS. """
Reference Guide This section describes Plinth API that is most frequently used by application. Note that since Plinth is under development and has not yet reached 1.0, this API is subject to change. This is not usually a problem because all the Plinth applications currently reside in Plinth source repository itself and are updated when the API is updated.
Applications These methods are optionally provided by the application and Plinth calls/uses them if they are present.
<application>.init() Optional. This method is called by Plinth soon after all the applications are loaded. The init() call order guarantees that other applications that this application depends on will be initialized before this application is initialized.
<application>.diagnose() Optional. Called when the user invokes system-wide diagnostics by visiting System -> Diagnositcs. This method must return an array of diagnostic results. Each diagnostic result must be a two-tuple with first element as a string that is shown to the user as name of the test and second element is the result of the test. It must be one of passed, failed, error. Example return value: [('Check http://localhost/app is reachable', 'passed'), ('Check configuration is sane', 'passed')]
<appliation>.depends Optional. This module property must contain a list of all applications that this application depends on. The application is specified as string containing the full module load path. For example, plinth.modules.apps.
plinth.package.required(package_list, before_install=None, on_install=on_install) Make sure that a set of Debian packages are installed before a view can be accessed. If the packages are not currently installed on the system, a special installation view is displayed showing the list of packages to be installed. If the user chooses to proceed, package installation will start and an installation progress screen will be shown. After completion of the installation process, the original view is shown. The package_list must be an iterable containing the Debian package names as strings. If provided, the before_install callable is called just before the installation process starts. Similarly, on_install callable is called just after the package installation completes.
Actions Plinth's web front does not directly change any aspect of the underlying operating system. Instead, it calls upon Actions, as shell commands. Actions live in /usr/share/plinth/actions directory. They require no interaction beyond passing command line arguments or taking sensitive arguments via stdin. They change the operation of the services and applications of the FreedomBox and nothing else. These actions are also directly usable by a skilled administrator. The following methods are provided by Plinth to run actions and to implement them easily by reusing code for common tasks.
plinth.actions.run(action, options=None, input=None, async=False) Run an action command present under the actions/ directory. This runs subprocess.Popen() after some checks. The action must be present in the actions/ directory. options are a list of additional arguments to pass to the command. If input is given it must be bytearray containing the input to pass on to the executed action. If async is set to True, the method will return without waiting for the command to finish.
plinth.actions.superuser_run(action, options=None, input=None, async=False) This is same as plinth.actions.run() except the command is run with superuser privelages.
plinth.action_utils Several utlities to help with the implementation of actions and diagnotic tests are implemented in this module. Refer to the module source code for a list of these methods and their documentation.
Menus
plinth.cfg.main_menu This is a reference to the global main menu. All menu entries in Plinth are decendents of this menu item. See Menu.add_item() and Menu.add_urlname() for adding items to this menu or its children.
plinth.menu.Menu.get(self, urlname, url_args=None, url_kwargs=None) Return a child of this menu item. urlname must be the name of a URL as configured in Django. django.core.urlresolvers.reverse() is called before the lookup for child menu item is performed. url_args and url_kwargs are passed on to reverse().
plinth.menu.Menu.add_item(self, label, icon, url, order=50) Add a menu item as a child to the current menu item. label is the user visible string shown for the menu item. icon must be a glyphicon class from the Twitter Bootstrap library. url is the relative URL to which this menu item will take the user to.
plinth.menu.Menu.add_urlname(self, label, icon, urlname, order=50, url_args=None, url_kwargs=None) Same as plinth.menu.Menu.add_item() but instead of URL as input it is the name of a URL as configured in Django. django.core.urlresolvers.reverse() is called before it is added to the parent menu item. url_args and url_kwargs are passed on to reverse().
Services
plinth.service.Service.__init__(self, service_id, name, ports=None, is_external=False, enabled=True) Create a new Service object to notify all applications about the existence and status of a given application. service_id is a unique identifier for this application. name is a display name of this application that is shown by other applications such as on the firewall status page. ports is a list of names recognized by firewalld when enabling or disabling firewalld services. If is_external is true, the ports for this service are accessible from external interfaces, that is, from the Internet. Otherwise, the service is only available for client connected via LAN. enabled is the current state of the application.
plinth.service.Service.is_enabled(self) Return whether the service is currently enabled.
plinth.service.Service.notify_enabled(self, sender, enabled) Notify other applications about the change of status of this application. sender object should identify which application made the change. enabled is a boolean that signifies whether the application is enabled (= True) or disabled (= False). This is typically caught by the firewall application to enable or disable the ports corresponding to an application.
Hacking FreedomBox consists of three main projects: Plinth, the web interface FreedomBox Setup, the Debian package to perform initial setup and Freedom Maker, a script to build disk images for various hardware
Plinth Plinth is a web interface to administer the functions of the FreedomBox. Plinth is Free Software under GNU Affero General Public License version 3 or (at your option) a later version.
Using Plinth comes installed with all FreedomBox images. You can download FreedomBox images and run on any of the supported hardware. Then, you can access Plinth by visiting the URL . If you are on a Debian box, you may install Plinth from Debian package archive. Currently, only Stretch (testing) and Sid (unstable) are supported. To install Plinth run: $ sudo apt-get install plinth You can also get Plinth from its Git repository and install from source.
Screenshots About Page Enabling Tor Hidden Services Setting up ownCloud Automatic Firewall Operation
Support You may ask for support on The mailing list #freedombox IRC channel
Contributing We are looking for help to improve Plinth. You can contribute to Plinth by not just by coding but also by translating, documenting, designing, packaging and providing support. Instructions on how to contribute code are available. The primary Git repository is hosted at FreedomBox GitHub Page. Instructions for installing from source and hacking the source are available. List of bugs, TODO items and feature requests are available on the issue tracker. Before contributing to Plinth code, you need understand Python and Django on top which it is built. You can request for development assistance on the mailing list or the #freedombox IRC channel.
Debian Package Plinth is packaged for Debian. Packaging project is on Alioth along with sources. Issues related to packaging are listed on Debian BTS.
FreedomBox Setup FreedomBox Setup is a Debian package for setting up the FreedomBox. If you download and use pre-built images you don't have to worry about this package. FreedomBox Setup is responsible for setting up basic networking, web server, user accounts, installing essential packages etc. It performs first part of the setup during the image build process. Later, when the image is booted for the first time on actual hardware (or on a virtual machine), it does the remaining setup and then reboots the machine. It also comes with a diagnostic script to check if the FreedomBox Setup is running as expected. FreedomBox Setup is Free Software licensed under GNU General Public License version 3 or (at your option) a later version.
Using FreedomBox Setup comes installed with all FreedomBox images. You can download FreedomBox images and run on any of the supported hardware. If you are on a Debian box, you may install FreedomBox Setup from Debian package archive. This essentially turns your Debian installation into a FreedomBox! Currently, only Sid (unstable) is supported. To install FreedomBox Setup, see instructions on setting up FreedomBox on a Debian machine. You can also get FreedomBox Setup from its Git repository and build Debian package from source.
Support You may ask for support on The mailing list #freedombox IRC channel
Contributing We are looking for help to improve FreedomBox Setup. Instructions on how to contribute code are available. FreedomBox Setup is part of the FreedomBox Alioth Project. List of bugs, TODO items, packages issues and feature requests are available on the issue tracker. You can request for development assistance on the mailing list or the #freedombox IRC channel. See Debian tracker for information on Debian package. FreedomBox Setup is a Debian native package meaning it is primarily built for Debian and comes with Debian packaging scripts in its repository.
Freedom Maker Freedom Maker is a script to build FreedomBox disk images for use on various hardware devices or virtual machines. Freedom Maker can currently build FreedomBox disk images for the following: DreamPlug Raspberry Pi BeagleBone Cubietruck (work in progress) VirtualBox Other virtual machines (using raw disk images) It relies on the vmdebootstrap project actually create images. If a hardware platform is capable of running Debian, it should not be too much effort adopt Freedom Maker to create FreedomBox images for the platform. Freedom Maker is Free Software licensed under GNU General Public License version 3 or (at your option) a later version.
Building FreedomBox Images You can get Freedom Maker from its Git repository and follow the instructions in the README to build a FreedomBox image.
Support You may ask for support on The mailing list #freedombox IRC channel
Contributing We are looking for help to improve Freedom Maker. Instructions on how to contribute code are available. Freedom Maker is hosted on FreedomBox Alioth Portal. The primary Git repository is hosted there. Freedom Maker is also hosted on FreedomBox GitHub Page. Pull requests are accepted there. You can contribute to FreedomBox by adding support for more hardware platforms. Freedom Maker can be easily adopted to newer platforms if they already support running Debian. You can create and test images with Freedom Maker regularly to test for new features and check for regressions. List of bugs, TODO items and feature requests are available on the issue tracker. You can request for development assistance on the mailing list or the #freedombox IRC channel.
Other Resources: Manual Older Versions 0.3 Manual 0.2 Manual Jessie Manual
Tell people around you FreedomBox in the Press Conferences Talks and presentations Available Material Slides and other raw material Facebook Twitter Debconf11 Videos
Plinth-0.8.1/doc/images/000077500000000000000000000000001266051671100147755ustar00rootroot00000000000000Plinth-0.8.1/doc/images/a20-olinuxino-lime2.jpg000066400000000000000000007226161266051671100211270ustar00rootroot00000000000000JFIFHHVExifII*  (1 2i0SAMSUNGSM-G900HHHGIMP 2.8.142015:11:19 21:46:55"'@0220* >F N V^  f|bn(-0100 /d 2015:11:19 21:14:192015:11:19 21:14:19ddd dd0100  Z@PASCIIF& w _ &@< G~k@d ' '$F@@ @@@@!u#w#y#{#####X X R ####8n\*bLub+bJw b%F} 80-~!B~_H=q&LuMs >e~n+wO}sDI.+q [E5/W}^5N%~W3MrQe?,[n9J?ctC=abpw|^CHns{8LG5DXhy8:> LpUe1e~b@y_A zU,S|M>ecQ!R^\W'7EUrk%7M`ooLfx|3^v|B~w72>]@E {H"H2G@JKJKZ! bg<k"JR!4o?RI-Q"""""""""" """ """" """" """ """""q """"""""""""""""""""fS2,1U'RU'RU'RU'QFJRJRNRfS2,10 #P3   s  *fe!= ! v!60g" # @# B keW e!$')+/25E78b:;<=@B keW e!$')+/25E78b:;<=@B keW e!$')+/25E78b:;<=@n@P"J8 ! h F%@2q-l(\`dhlptx|:PQ ?? SUSU)a  5274 2014/03/12 09:35:57 XHBd@ F16LLGB00SM F16LLHC04SM  00(0%HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(zc4G˵/{P+x/&Ϡh56)x^ б, %T^+CڌSPV.GϏH|zʫtQ\LbXH`̄gl+WWl4̲[[HarW;bQVL4(̋P3eRG[/t*z?'^5Oc[ԾP؟>[TK~ iچ-3hBH;H' KNIrnNf^ӎO>_.5o n {"}W pFzZJW2E)J_*x=%/M$~o4v}W|a= ăUKu1d CcKǹ:Ǐ.6:3dκ?5/\ji[-6[wrzPһ'^ǢE%HU,H k:MsIR?[?y|㈶)дq24>  ץTUțasY闖Zj#m^@?ӎy4`~M9䍲YiC ztXy1O2M'I{ >RЅO2Uf`;;Vs]cWnt2 d& .)ӕܿ)r:k OʸWX8TWiH~˦X,c3;'߽%S}H#dcx~?N=gJ8i+E=9/_ZL6<>9V5|MV%+1]X :XWé[\iZwj6k4<럺}E[֮"Yv.m[rJ$U;/,{mop\ 07z{cSj*QZWhˤr|?i 'N6Pl 1XԡJXbs(&#&A ޸R>TEeܠ%@%Ԃ?O `7q*2F=1o2܇A 扠F%s Ʋ=I5;I\ApFm8Sݷ 17̅KF Tn|>5 n5{ecX:VpqnLq8YFcF[wsO-;4^69*GP}sVm|Ci"O̫ ʷ'$sziTU^W I?=#GCN;..D*q8#!zqWėL.nV@#t8qSjRiVwdpv۴/e`FNøA˧6+{{3 nc?z錤TN7 L@8Nydl.r{5|Gqu$[8zxA$TO⺓]5N]烼IiM}uM 3.נ~WW֐31 A-Pp%YتsySMS澧QE^A? o|5#_)ϘXԝsWM^#ULG?8}z4m(yZP۝VA95i m7ȅf&=k_w6Uk}:I `m.QQ#5omCm߱|Au؍ԂhW66Lqj׊m3Ultc ;YTm'r'ۙ;KDHt]kX}F6YQӕ<}J.'F+mU.GykquӼCk?؁`n,3xjW6v&L f$Ow-tQ~mH4uv^$63ʢ[^T ~'vVdMJƝƌFsƸ׷]@@=djK)E"_φ5u)^)d 1mھyEg]QOQEH82][Ϯxbi$,NcTqa E,Kd}oBY^YU@ְħɡr{Y[xk>Lap%O# :Jڣn ܩE./H#jz3z[i18fwp~)QlTyMۡupP_~jR{%ṃR%)*/I8=1ӚcIi 0ڤBmIm.2HL~8)F1&2Y-5صaU[Lmm~68>t'FQa21ުt XLá EXUZ#L~oКqM=|+n#v;jGo˶l.8L)4![7H{l~`ÌӞ ;$ѽX i򵭭]_-e6`c?ҺxOr]lls #Tz8o.^L֯㐂&{X|{y )`۲qN䞹ESKX- |'F^cp:0)s1r{,N2Xc<MUH 94LNycY/.9՚v<{[[_=&w\m5gso.Oic4˲_1"/%o$5xY̲EfĆ>3Ӯ P㷃4kFN#&,\b4;Mb!Qu%Ϛ!@[ cnjwK2u'85w(>aVc88& `F<2E+rf^ e4zX m>#A41QqƃgYe]̣q|=mI<7Nj$ Prx=pOj+2K+oT pz׽DF^O.I{NNaٮ jP}:Dw.#$*(;{nCg۞U5K=ͬ+q2 Co0ç͖=A]+57hpjđ(U8-׺ЫM- D{B$YFSPY64pԮH*H_Ntw\߫[Ǥ\Hh4TE2 A 1e?ue!u0x;(xsSKs|Ōz`fH-HiG tNygK+T#&g.ƩcV~j]bաA,aR@I F'' N떖"UM#SJk2¡OOzuRFIltbʞqӠ"fI"/c+\j"yU Z0Eix87}NaJ"Kw @0,.IgP>y[L~g;v֫iP.^h7n#rI:t=Ϟc6u/D^1"0 !%sHsW# 9DB1mFPmYF>Q;ןLqҖ-*ৗ5ahVmTMl)q5>(-W$\t!6J9F\UwB F$z<==jhh*3\z* 4(&.nסaޗ-;_RŸ6_Ki{8o84敁 CbG?wkOA[b;"ɽJ`VLpǡ^ e.?2?vlld{;{AIKS*9o,`>ŊJmTg(7i"#Ӡ'w1'8_\|7i wړ5v~5No[\]M<9A!U ;Vp;ք?$4{z|'PO8n>R']ەIP}+٢7-vBpzzQC|>mؿ qvַ_yvߙp3)7vg~?@i_e3! ?ғvC \ݑvߗv:z|YIԯv](Z~gͿ|ho,'wďZ>.I^fkX>2I?ҽh#0c۞sR[Pyʍ;`~S?yY# QӪ9ig߳GWXY^2Ff&0NyF8a([GjMl #<80[X0gwbLPy|PHJDJc9#ڵ=]k8wQt±84dDiJ$Z^~WۤY$hU0ORn$kYkEqc@uxŝ>ҧMьRg}G^-obnjZ݄&S++1j@9='Ӱ3 \6-QH((((((((((((( phttp://ns.adobe.com/xap/1.0/ 5312 2988 SAMSUNG SM-G900H Top-left 72 72 Inch G900HXXU1ANG3 2015:11:19 21:14:19 Centered 512 288 JPEG compression Top-left 72 72 Inch 1/100 sec. f/2.2 Normal program 64 Exif Version 2.2 2015:11:19 21:14:19 2015:11:19 21:14:19 6.64 EV (1/99 sec.) 2.27 EV (f/2.2) 4.10 EV (58.75 cd/m^2) 0.00 EV 2.27 EV (f/2.2) Center-weighted average 4.8 mm 98 bytes undefined data FlashPix Version 1.0 sRGB 5312 2988 Auto exposure Auto white balance 31 Standard F16LLGB00SM F16LLHC04SM CC!   k\*`JԲ,qiYį>rV;Wj^tel8p Qi|eM% u&{ɶd|ΖgosLSBV RH]bo^}7R+؇0篹і8Z3ԁ벋F0^Qn4KYO5|՗[Ziyy]c6ą84l쥫P>ESsrDe;\=bق/ju9Ğq +~$6@r2߄*ƘҧjX;6 ~.G\y.rLމae6u/x$|5FRx0ɾ3i,S?jyVK9mFv$+I_1'i*}1錺 vk2-|75B]}K'56 6U}H0Q43[E>gyYZF-M]ӝ含\Yun:3|>EN'WX[;66uQRHFɄs[WeO/jo}kC o9Kmvݰ^;P}Z̚2뷭n`_ OtuCw<ã΄5OOW-/0}>!qMZh$tvJҟ̗%w&)R\a_Q;Q!rG6h#g+P<Ѿ <p^ȜռO3?o)C]9ӳpݿ9]s\>=g>sO"js1*wUX{YK8g^>x^w9_OLIx 6y f*z̅m3b=jjmcCܖ?gsa"!mWZpvtZbcb>ܺ,#^'H<gjp˽#wsaSG3_:g9?gsSsP_Si_˯NF x_\ɾާ*-4Hw^%FBSo8P18 lMm+茕8-Sgkz Fͷnƿ8erv7CTC-\ۧ/Q*˾v#òi:;į]w9ČeE#fH1Y>VZoxYn:h;n)jj"F};`԰#h0jӮ) YalqjE %6O?z ^}{?i~l>H2BI*ZnDJk&y}D6"V )Z2t y+M0o>Vw5t?IcPi;-zV4ִםڍMNw*r~g;lw+_5uʧz/M&-;L3:^k_|,|Iz?Zڊ# &赟͔5P}(36n=:"-sb  펏f3^T}~H|UP5眬li iUs= }4z}uv mWmLG>Oz^oFU֩z6Rr oIT}6dfGt guMT8ls00AM%t?PIj}Ii>:r +{^xJ[rL xX$;lݸ[]]o\0'PeK7bFKȻلR&]b.$%k(ϥZyZ V`\(^\l|ef%eضo985vMپhYpՃ Dgȋ`۔t6nƲnA\POyhX{ .w:-_Y^#w Umķ*JܫWRo@RJi椤D\Ӆ.>>VM^ƄQw=FJtR,0bX%5 Zu:p6VTR3 WrF$E+կ+B~caɨIu&B& u˅ [?y+]N>Oan\CMTBNv$FNU<8q9NqӘP>x[Yow]5e$.bDTe,5ˑ%}pqGw6hWv-UOŢ%@Y0 - OWyhA]'wɾvY9[R13:K;?o[Qka>2d4GյC s=Qwe^R}uRёBnV 8p5Y{UɝJ]hٿu Y)'h'k$Tt@]-[{IY7{WQ#]&4ۭUe]Žܚ+9M_ih1L]XN'IW#mOX6ƶCdUk_*Hp_g@P:+kۈƂTE?<Ĕwߵ,ا\F7_/ꟃ^}c@ݰdUs<ˈ> ǝ=2dŗs ~J>^Ob=J=݌[VzQ9bW :fi% 7s%b͕&l=jٟS,:RXtièrqkbj5D:7=In#*f90N= iu֎dʮ|댙(tu/wjH޷̘ƸKv:g8.;كk>1O" ~Ӻ.Saj_>g:J7`EN:SWFAN@%SVDOl1 EmAH4F\<eeçtJC'jYoQRSMD;FZ6ڨbEV&]C+$^: ]4\ښZWNp"Bx ʺGܺ~[w^^ķ!_PjZHgteEB!erE G&}q{Tu*L":l)ro"Z@˓m8RN[ w OuUو&@U@ٔvЂ{_O"~AU"|e\:^ǞRX܎CO_GiY&8ڟrĵT2vھRV%r,a%kdzS,suok̻HϑANMtMf5Mmtl_0<::(dZ-8]ay!+ _\o8h2m&8u%@V 'X=gbؼB|m_#|6HXȊ[RFwjs6pIhI&&:Z}υӹ+uCE<5W1V} ׮UIIShH%Gnu7\&maݱ|>lr) F _c]כ9mjCx P-?뭤Ijʬ8[b ]=2T+zxSxnʾ7=egb.KՔq[J 3 寺1ylOfAk!mAҳ-K =|ݸEHq/C 3\}h-wZ3ӈ$uSeCEf:+Zv8Y2dRϲG$mFtXB ;#,V=P7۱|׼Ìn^db}"%W.d-ҌncG$(z!eKgY΍fkVx>؎UG:G+E4JYE͓t8mfx7(gvly}b]lV髍mv/F }D R똶[I[85[wO}e<UKm3R5>2/ToI˽zǁ^\2⋵W_bZW-͊ ՋTKM5o3 7 OMOԂ*F`1}24՘k9KC4uKמ0w~ߟo}cMXVwG`J{Ϟ}?zu`wyo]^mq_qe׌krnݤ1<º괱.j܃q- W+k.^ĞfyVMdu hΔ/gu@pËUd9l>>Ҕ~j1ǡP=MYq4?:[ZroP|{CDYgTwrzZTfԩ iڷsO>@DesbUb۞~ppBeGKhfMjҳZK=U a4 .0o-yUKkqu&>iQȾ3S ҼKsf52IG ˝oc>vsHwZv6c;fKLLΊ5Ǫ5hPT cJKiFEtą`ecnYA3(" ~=+c;INt!`7=9\]bn59:θ$vFs=:Ȍ1V;ǥtUR1ǫtԗpPwMA\sԫ`Ÿn՗]7ʹ2StOpvsHxs*)x{.FNo4q{Dz=e){ͪ: H'=_莼0;b% ]mtqNb@$/%>- 6i6hq|ʎ%cZEtVb?Hp:ITZg5v\;6:3QǒM|m48^R-}1KMn>#^cnͧq'p6S~nߠzWܪ֊;u/ xl$jT qcy9~zD0sE]KieNH+_/PmB:??1/Y Ro5{BTE&D.u{9$lz#sl(zgiۮӜ>;?5B=Oy;o/=W}yhB=?ΗA Y] N^{d# NMr35Vh$wͯao&tO.Wj ݗ&hN?YUA?ɍqfAZkN"LμYrg߼o֨vs6Ir厦q^*wϡ}}:rp6Gu m,3XG|;ϥCx%,(1SVT\n_vo8Nv;dV2j_qFttaj63A+P [m?)Lt$|6'V-5ڝu=ݙZMim)~ʲ*݋ ;eu\`˓k\Q]ރ-2 )'V' !^ ;^N {;|ѹ/`SYp'gDT<ȎsTĿkQ S:qKHǍa?Oz[ΆD"{g+:CH[J\ڛ~tT?"%gX\y DǬַR㴥n^fXjPvp|{T}*b[Ɨhq 9L<7C{yLeYުɶ;D]Eٮ]:B6J1y%236* 5n_狞deCjð搼ڨzT.=*h>>ycUAåtp谋qBvUgsuBzt蜼Z@͑3dduGu-m-*H%[0ܝp ̵`a~;n]SКB$ڗ+Dn`n)uZv(HY I f -"} 3.cց쿢vQWroKT I ŝd̨ݟ6 ' Aז }-%p8c]zs1+/TJu*ɲL>1hf']h!))D;/ƹa_΢qjSmi!ui}u2dX,nrkuG[QGoЌs%Wu][]~6(؜& .cEyj/WJM'޾K\|zU-4㺄OkW&pco69Ū?.=#&(*CJxDٱ8KMx{Ub~EV}˳?ڰk.:'PzK[kA8r2SCӹxf2| E[F:X8|#LZhOqliSm=Ɲq.Xwd[m"t 3unųqXʱl.[x4Dt{!rs&I"WoϋY<QciZUqnzsaixPWM]􌛙5QG|(T[|$;Kgv봪ѽ [ȾW/ҷV>ʏ QP4m$gMNնͧylYa  Ti9tkXbI2Oc]~tQK}D9u`Tot%RTQZA?@<4'jo;IdP4g7f\6 !"10#$23A%&4p56BS0ek CpU-=q6EKɽduJ o}BVΫv^xDjx &޴["VBM q(ضlCQBKtJΨ+qq/!;kJb@8NTcV"2?TXVz}=WP:"@5Uu1$D^IZ:KsbmNoJB BwDu^^d?f;zlu"¢ԤIGQϼbO.?8+h*; 72aga틷b n$dv@K ]GN)*''QuDyߦSӚv`v6Av1-Ca*R^w܀O%Mr"K}?*2-#`tگϔ"+CBfg}CˑH~2`D:4mZ\l5y='vNcT^kUp裖08h! fKD-VŋZu8njlj]R6QǞj;WwJl)u$v{LbTqe$-l^Hnr ElxlD!NH'jw 'kV[CJ:-u&?R@Gc0Dx27$Bqp=c!٣,J^t>I8N.#6$s,Pcj;hRHhQa+AIύy$:KpU+nC)W˭[]r1jZEƋ&02 /@a`,A !(=e[5t:vԴI&4I3= [h7:U.k9z|Ksyl9>ZRS&L:!K1& !; Eťۄw:F^vrWO֬Vqm#\~~[V*Bw|]$z$B]͒ _#g"(KЃʱ[V٧9j "`p)1]n!c֗Z 65>A`ddǭJM`ş,֍2,Hf :{U_bP}>N)#c%myg\n+W5~< sgsVy|~ke7߷?q}/g10?fTQW2pP&!=J`23lv6_V:x$%Ibi;e !/W6Tu  >`LE A#4@_iJhS',d8̙L.uXQ-L{[}\h}KzY|l}R鲔vو@/v@bi{Zscv0ݼjQI%~ձvp2zZ e9I *%IȩONdTtրzC 9uU,/\]) ze\9j%qI+\*в&en?JMkuF` cvUo-3Ù7X#Z*^.jXί 1PkSQF[xcnȃ$;DD㡊SJ uQ3)yĔ<^s~W D"'p3I&>S3-3[rjfC+C)IYrr'WzzF2f~| -FjE8f1z_}CZO!eXmFmu'w:.dok+ܓzq͟f^lGx㐳 Q16%N\jhukNpmjؚE>/m6p[,R,P7`<[Ȑl9 ]YM1]騸NEL"ő2 ?VZGĞeBe#egKJͨN]<\S˖f`5dݞ,~ >=j6iYU=i\?$BϏG1?Y}ByOr'} $[_ػq$F)dC`48kɄHMWeStK`9m[ݰe d~H^*V'L/`_^k}eej6-E F`԰%˚Da}kJR ( KūbL)_+kS4H 8iFmŽEt8)had rX.NmŶ%)3_(rG ӝkbEn;`* }9bvhek_؊Vȧa Zn5Zt3>fNŌZQk>:pO ?u)UɖeHRڢ6ڪ,\zXڤ*ʹޝu2!;0N,un΍{2K_ J%!G(Vk5zgڷ`6+gK,MQ}`Jʷ,^i*݀3@X"< q镛$+c@4-2Gc|Y怰5)|}1pA{;S"Q.&IfI3[Qҹ.Z "'g=,gr:̔ԺWzA=)qrP &16TV$LDEЩxpfnbݵp&G12rU<1,a L(m86B+hP8Q6$\ $;6K?bnJ[tL"Z!|kz <} m":\Ȯ)Ey?:S#f2)G*}#ŗJ@~(D\Q/ᶘCl[jh~MN-KLqj^F3,SKm%V4c T-%ٓ,}=:Px.sTlҬ׶ eVJˋ6VR;3:Cl4myFffdu+[IOKb;袷r(FjdߌƎLz dHn̳}{-,&mtjޠ~ݸv"78"n}Ck!-\xk)1E8\;:V_mbX$mN%SkuZMpƼT61:)E6a%n/ښBjs/~NbJ哄&(SYt²;p-pg~CQolVP⾷ N\]-h6)ZĊ\ `k()b^a[;!bcr?F dqxmUS([zo12D SfwQ׺Tn2݇W_Z%1D*RلaHHz]OAHFʓ5,fu`}tjB&1(p{U|ՆC}m.\okk'uY=[U6]i_jA^ ȣ5fYnzv.m~$fGvC5 ܌6Z^g1'[Ş-)>2S2Ɂ>{Ǡ ZWidrM0F1L{]x}K21;8=}xaw v,V76)\1!aJ0T垆Oۚq?n NB~X:DsX[xRl=BЃ]LDИ4eŝp5;$! ƳdӸN帆UR׈s.8?eK( Gt%ۈ q,~Ls$+ぺW^ԹI?:ekf5OA"`÷[)y62#D<,ѤIXFEʆJ4q&k3A(-'xr#ΧD}sda֔ uSðjv8Õb~*jt1^-+~EiظZcwS!K>K wZcJ;>XI,f1f~RvZDע57&d|DՉ Cs_:)ۢURnhڳ |~ е7U:֬hLXzvr/pQIk*mįq>\y :gRͲ6EfT>|bEd]:I!9h,c:|qHΞ;=*N=RoS#zӬcAc:<}MoN[Ը)H:S c]ڕ9Q62!l #{7Yǎs¿?29Wn3 6[^ ^P!?5i,7!%m% 1%O8 Rq z\:qHkuRӍc#Zk~+Vjs:U!_zN~lS9պ)cQw Ƣ -)e%.)zOWgC(wTM. tM].L$Bg<vKyDI"6|+ [qEMIX8Lzfb]%6jFYX.-r \8uq!W-׀|[p69{Ҕ:GIK,8r(}F Bu M"v٥]IX}~eu.~ 68;a徼B۸ZKry6Yq#(ķ˜-|~sm ;wAe#%""axJ5l*9^sϪ\.S^dMY}5Ր"s/*a!:+nŗ?dE<3?QuČҷ`WU^vs0KghID6}?b35C`%E3q^9[!ޞk$;}CwЌq~9s #Bʡq-%=,E>"]3o)GC:rȁ)9F ,JK\LB^1?fJ=[2oTW85$pvV1g +]?mי72O,-:yێg:"(Z8(њBڵBmIarňF WI?{%Q&F&X LC@+gJ N =}iȮ%r$72ViZJ+6pN%m-vR`Mͮ*bA8NKc.^ձ̂ۮ{ɐ%qdu3s9њ%1c3F:IE%N%ĖY2H$GX\ēZ ,l8(¢>lhr`#V,̃L͵Lm r@V=OVPR=qHVJ};7֕E[XJCrs~cl}(tWl؟\ Tx1]bg$g04CaݦK4,zGՑ+fuYiJu)rpeljtyJm)[xrw TE$칡'_8խyOE)Tcqb`|F9e[N {㗦~TxU&qf+" [dsYeIqfD7dRsF|COT}sDZibN\TC]X ȋev>ZuGy JHKqw{9:@|YJG=VRMOI`1 8n*چo5DS_tnzz]B k.j,v\Hڬ:l*KP!m9F3%= &3n"Tbh{e\1_|J..AK2rx\d@++R"[ lI8R/R0zau/=r;%X6@ 7e6ql%mˏbPR Hj 2.AŐxШ&fT,Rrw(mPzTk1mm:.at~ũ!X\nNl[2۰M25Kj*Xx7+BWHτؓ1&UbUv"J<8O㷗;gByTKzgᷭ%"U"5 uE 6/X^sۘBIg,."-=rngIJsl}_cU9'Ev{{ rKAUT|G=<2]ulR 捯9b dlises~qgPm*;,{YX#ddwyƳuUҬtm7U=fעvփڍ| B;vbL:]q;F=Z]fV%=^T:C"zZkUjwesM-]o;|θޯ鎵Sftxhe?t & kuYN5k&)_g`[_nU#dP`Cu)4+)wy3 V21$%"v`t]:q~֬OS-&]UOZ@PJc[2BՆ6ĥ ˾HQ Q V]"4;Ư6!k0 džT Vq:ADzmVf3Y @;`X {$4[G1\j:+|єc(oGZPrBH4\~W6G2OiT䍹[6PBOEc%ٟ\Z܋#̗jUP#ZSԇ֎31n }B̩2@wg0œF& hiL-'Z jv+bupJ;RŹ״SXGOIᄢ~ ?oZ; L 7ۗuLQ{T*]dF2upjm0KLP ŢA,4V#Jw |6‰GV 5Q.q'm 5̠ $r\ƯYĐq5sO Eim䇤')Rӹ9N(-[o]FS\Ҏ(:0v>LQa='2uv|J"YF?cjT8U)fVT=.MRݿgmÑx5@qrR(:>V%IX4aZ.ط)r&]$lkLB05Sc3Z}-GVIlUNdLjI29ͳiz.Pv8'/~7/5Jg9SJպ|I5Keװ{g_Ot緧BN>Jj{7D5nY5hڷQeøI/{֡u}nh7}xK*4fڇDغ0 ΜS"i;[0v}ͷSnh~C{Wy>L/H\)>6칉fm!~30Ej*!sin> ‰6YNkaAߏSE-E\ˉ qh5裝tX.@=CJaoו98l)%օvR3y8i*7x^Yo)FYYշl8vPs"~$^"(xuЂU6 x pu>*=ےJT nhHn8+K =^%8⼛祗x{s8_Vq<<n:zKʀ9ŬuGi7hl9cZ6m'sO~9~-I* nfvbqԬa(QCA3R`%- Fn LH DdԈ;$tHg bɣXvLVZ7:+xM48Xr`Xii YdAn ٛ܏vF:~ʭl `xPRi2&HA_*HUB.jL%Uħ{n^s9ۿ/eNaLjy @…8g,JU\}2D`ڃ`ݧ4@-݃`i+k70ǒ#%fsD$JWvp S+G.ut+]9L[܈Fj  VH GGUc(&A+N9nT`G6-9)ˬbqgvۍ1t8Bc)GY2jck]>1tHԆ=nshy'Vzi'\E0 9b\ nHEp ՙ懒0u@h#d<>Mbyi*J} lפ~3[>B?AE\6%k$vɯ߭ۑvhau} Z4 *fi)T׮"?kGd-;sa`f/IU&E줪~Ln %H23;:hˁ<'}ʑWeB+`&@pb/Γ57d}5x`N Q\7ˡXɍjsϏ4r?sTbl،f$hCI†ݡ{814dxP#"\,c^&h$؂c(⻥zŴ!;״CV$zi3_ȭ9RDAJ ˧ʰMp֥ Nq+2!QvB+rk3eHV.eeˮTO8D,@ʯJ*3'Q [B.-#9'<2Qħ9?u^QmhA/:n^4a镬 qPaoz5b~]DS vd咀H&ehX>ճ3 ¤27<FWv^tapبʬΣI\K@Su;9Pivkk% &x3%C~PiX>~^Y KX-.d2ߪJXWxFU]Eͯu>Myҕ`|s}RPsBv'R;@iFAHˌyz|c!#_<"䁭#շq%*kzaH&ȵx؉̯FC#o]# T𬓠/bW yN{B0 tv]U~hkՃSg8 Tl&fbUfB5 Ķh5%`R묒=PD#"-kq'C*̹DR#bs^Ah)qхɔ LƠ6c 02g@~܏J(+.l"F\4@ۆcolZTLƷXVqwd auL d+pnP-?Q!1A"Qa2q#BR 3br$CS%4D`'5cst? M$9F,X6}&4Izpjg1!8my Ux8zIqSʫm}"/>c][m3OI8qtmdiqպJ2A>TSY9Q& 2w(XF8V0>,!9EVz}lM÷nyC3[Fooh)n7yx3$gQN Owt)} (xF]u4Stwh%}?WT4+M:Z񄙞iZlE:NLy9'Mzyd!B'd^w*o) f56S8iy7US .VBr ).~щxPoB-Tp9 K߳up]~[*J \e)j$6t˻ĩSq삁mԯs*'[t}%;A|~V7iM[@{mjz?50%OgeJ(v`v$}UYRjKV}JX^<<<<ΟL36,4чЋ~BX ms2f"..!ʂR/6ЄKX]+YyR$Xx|9:p-2X<Ł@tKDW;cuoQ%Ĺ%eV)EQd_9Yv?H?nTqVdZhɳc-\p3(QMt1.vK9ZPR~299gϬgpϳAvEob=Cf2T:XbT#xnZCW¦;B(,&M ̠RhwՌn-RRO|zGx#xs\MZir,k[Z\Q,jVV=RRYlbiS>zZoA$W>]OӇeT)ҧ2ʶF鮑8GqSP̰*ݭB?<_9Jc`9J˖S3o8^r>ukJUG"I4ǜ`G$G"9ɀcb8}gj˷A4]l`.nAai7Dk▶J}$y ~eQ Fc1xl-)nwRT)q.*ӧ] yEU_e!_m *r}Zk뛦% v㡊m' M:U$V~N'23\>Ża?v߬MbJ^# ZQ$e7@m}{㏔yAAfa,-W˭}\yDM>$}73՚-&.zu B˯}TYLBhRGnP{/?r' rQ`:l˅'} CU/5Ng T@Qr\'k5e+?WVfJ( blBa2$:fo D^DCa|^XZ8MQ1[0p>% n<~ݠ$+}en{{IQّPB[)YɡԤhlth[Ĺ}K.$6m$FYjY\Y KY I_[e6l{t!u\t8f*ַ(+ ^+z%{)d"lcs<],Tor}B)y]+.=9U"'1Og}SRټ8=!'wB}*5.p"D'騢 /&}P}1'j\%\vnBs$PEэp(}/L=v)WZO-V>1+jhGx] QU/[xNk L>d0Ը$L[+BFUmtYB"zܫ%I|'%%Gf8"D?'?m;?x^هu 4s0?×NڴpFgi-:PT:^*ii `y1 pbdԔH*jkkZTGE{f9EcsFKo D(1F-4UB*S]ʥ N22;$'@sS蓮ڏdQi\4J2/n{QyH""Ǧ~1 4Z-n4y|foUrC}qJ-1RK^ڟv&p$z#flr&PSI?MzmI`PbSϰ ҭxK\V0R>rorcz +Jʠ%ӚǧfUάKJ3 Uq탚0$]~i Ia=h#Oa1*r3m #kI6Oyu"0&H 6$G.P ?y\a^ہ&kWp0WWhiyg5eX Q_^%W{-G!*G\ot# KfaǒG36Zyc\eG^T E: =8[EN&f*Jmr=Ic6r"t鍥qKԴ-[&݄ԧ+±)W6$L*6Z&_moS VB5{CҏC GԮ)w"F*eVȨk. ĂIQ{yd%g(wѺ}X48w~ XkE5WvҠ4muV|T`V#6 >!&?͑'#KՊSRW/^giZۥ7LyF^ЎpUXnUm dRPH6XR~X5 ؤMM#XXxK\٭ B@ I*11<%Acl4 d(<,[$@:w䀥[b?'v ݢf=>1R7QSmQ[Ә#.-jÌV)ni.U mt߹]mX]aʼ*nmq2hq–\,ױoۉ ttG upU0RZ*jqP7]#6-ɿ;7r1Źq[}n44A:óh*>a#-DʘLK7R%t{/Z[~cf{ɞ)@Km\m^1?L&'𤁷4)zw6^cLS3Q})sLd9B6:Y]aID$U|LVm%WIJqk^wUkTJ7UX2oxLa "Xu6Xa71L_#ٿ8s7!L,'*&*Ml8MOp"b܎w@?M1nRFMTOHS *EC=ҭrm>{oڕ-Y["Q*eYVnh:X-~+2MmׂVluSK^Mצbᮨ/JRQ-Ԫkvgᴐ G._~aάo0*0yx'=mS % FN}h+50.u. ?bICBɊҌT ENEJ.zɮHg?4*ZZ|#m70('hz&fVMT&!6A%+KZk170BMl-Op&Ve$z!*rJ{tqwa):J[m"F 5),SEf]?Q\ڂҔ|\C\d}*|Y7B؈q"PqꊟJ#|\`N bq0,-]m݈Uz5^aGw~[HăaZ:秚J[F-Sg$f%& 9] {`U/Ws5ZWҽRA*{#0*qm8oQòӳmU()*|/~A S([%esadn7=,R567_o #ND1V+XC mKS,v8o.GJ'6[A{[ ,4LZP{/;)ܦ#N`vMY|/^j hE vM%M-|GhULGLq(Z b+ XQW}1V&y%RPByn` . )Mt%1h4d}eznΞz`I,_873uJBEE<)f1TiE]$E$ Bm{1|򼄉e4W7?w]n-pƣ$%PHi) ZX6HkD+5*mu/yS;m0V(÷嘢+RUTϭȚ;7f^8#4܍$YcwGA@( O~XS`)%-'*Bv+ZҒ)gAdabi~>HI5wm9Erm&y'u/|%%ڽ9YjIPLߦ/:t4M0m^I!C]ʾ1!*iQJ@a>#9):[n$Bq0&,Xi#֐+Zp~n_0&R%+N6HQd8PuiSnl߲[^Mp'wp6ޭ 1752}~#V'D%Ii ɾ uKa-ZMH߱k~~m"N~{.mPAI+bzZaNQ9N"$aunbc J[ryy2M *% 3q<`bd>·@}c>D#&f,?1v;zǟ=1n[3/YgrmR\3Q>H!]U)wePROGhXG}]:΄:bTN2a#M467 Z׿t^28na ߡPcء`z*ٴcV!ق$ON)GBga3Efo*y{RoHB-Y1#%T'щeFxI Wg*4*jin#/zb1znJA-!奔͉)NUgU1r 33*.1O0sM PotyAM&kYr4{W'Xm's)̣0JRk8U ZaЇ U!/9hB28.fe[ *ULYm&eY2t#S@h1 8k5{G#Υ=!cPpn–[p VMf4n]Yꎟ??_Itil؟zookT".@@ ;'ohnNzqWf kF!W=pѰ6'hawk銃i cd5X|Dy4{"HSQRyTdM1QWkLIfJXb4TDUÕ7KBȹ=/! ѺbitԒJ6H$ιma*@ K8QEylfQz^(h l~.ŷ< PmsrmkRQ?8nQ ̝#41$~@ bLѿw#mL)Ls7Gay"C7 ʫk}=QĜ3Y)&*JWm'+nί4'OWHT8V)`$)Pͳ8OaijV&[(ڕ='(QuBٸ,_,}G5/˸lx{GgŬH If'g c hCkO)|@DzH7jvJ{$mξ6aӠ #h hG# pRzKY]JΖOtt+JH9BhI;\E~F8񅧘 !ԛ )_\a$aTꬶVomXTȤI:Dbdn_i_V뵉&ݍW{Ttq$qmʖ[gO%[qK b-~Y@ϛiM?&+pOOЬլ` _HRlQaI}[ͧSNCK\X_5HJ+O9H| #B5Si,?CSsGd:uZ+-I{µLaxHU!M7nLpY"?zf=col;jrJi>nk{-/)s?38Vx A"$xnd%0`aц])08ძUi-RNuXғ\J Wf0M9IQ6Yʺl=!߿* Ϻ[A/0®@Yj/:Ammd :2tn"b0VXKiu.u#[zq5w~.QqA-@A55 iiqPZajokxG- 8&m@_${\<& _լyJ+7KM/B]1h|'_"%js-UU6JOm⤵ ׎dg[h%I =zh}cHqI)bUdO>۴xf7H r([HNz]rU,JlOّӭ+?jV42f oC^$48'nI7o-aj1RNq=? rePtEK;592zLJQܘRGoӜ=`=0 j#i0&)K צa{CXXiox[Mq`6ŋbYINL:M쑠*#]׊XoNI!GOĔA  PC%νlyXA ]ٿEXު#Mㆪoq}ŇюWBVT,3eJ"3+2e\4܃Dϑ6=c/M;u"[ssϙ_H>D;gkbcωt)Ƴ$z}cS?jCJ!&ق֟Fuo| äJ'X 0è4 Nf-,6_dYf5TOCNujmOr)Z׻ea JRI$nN&mJMƃNR:%#A>YjEou ;ZriLY:}xhN8+S*$Sgˎ qr~bWAn\~ǤUww9k˝sn$m\ۀm}k*j[i]²(['}M:{+-u(qѩ&Mqb^cnPhvU`Y6cĤ5 ,w$k|NcNb:53Wr;x7'ב=k|; ̶S %~k`2)`>&RTEUf؋# :Q꫓)дr$7))MDb%sQ1.km'ܯpғrfMp7 q,\%7^tT0 ߞOK,:5w^:F%O~a<<˗[FۦFi5UTeQEr)I螦׃Vq9.Ī[Z)PH;׆T-,7"q=<)VbOO2l4k137U4Cj)Wd7R|"4UE(+^=Fm7:Ud!VPknʴO="U,\w5wWK+#Ûb.|G)ʌL:)U1Q4Ty~Ձ.0QBJO{| b%dI!əJblҏ/@[ҊEA]?c &N}NrJ${{#g]ZJ2erԠ21T7;LeJ{J6H\{ uh嵎:XJZ#A(Z>U2TZ s(u(bbVTr&&bz2N8i,>6{o>QXm)D/'E}m5?zjT#NTAH,((ؕ#!$[c*T\J\T7ڋ*ڋ];\o;>*͹& ^ ʱz=}[0dwm,톆)*qIvhMsUKZO!"eL}mkc~zS--mH*Dr5QtJ0)C,鐂 #aʾK!T ;;fźZ88=Tc4h JԵRt;;k|qBZDܪ=5ht6CwyHOEwG-!鎲J5^?9eM! eK4͒bj<4[SKX;r>e^0q=[K@e{9THRv.ʟjRc2-־6)|ay%wIFf_n'|EK[J+x{²5Nt-8=G!bR HX#k (nYŭLrA(CoRF{kkZl3-T/IQ=:e(CjPmJ6s'A`kfkMo&<$oDH5L`cLSC6!RRd#WT8Y:T km=I[uRs 8JzùK/(VP/p%$$u$NPv*)ӯObIjUin%Jt70>biI-2.Ӳ|ۦjcruuQpjm*3-&^h:$,|w!=(UAHE [B|4r)wB˒i^X5I3LLj^"mDǓ=ĨO2a҅ ӽ}+\8$ICH MAMmw2.77Lzd7m)Jn✮]>eKY,#f&Ktf=kmR uiH;xG8!lsEAY1H%DS~" UɊpHiV҃`ZƲUIII^]o-C(ʡ&xoTrE2ZEoCa.6To]TjBU~-mM֘B9` /߄vwV a鹥<"x: $~#{˟dF#ΗygVzǞCx+G+]w癔uD&RYJRH׻Ϭ<yn @L TGt+iU (p6a!4R"aDr\al&1**v=#q%߅Sdd@reʠkBs( ˑ6CژRI!)'6o{FkBlPU{_M JZqK0)D) HC3zͽM[iQMzQwoۿbL/ORK)C~D;U6SA䫗n\h*ǰR xeAjW5s-M:loCtZfם9ARacs+,WWciɜʣz(%`J:B\]f E!]a 9u%Oa.z0rP8V]cM&N^Wa!1#^%7FlHUzU96 6I[FRMtB)t̰u:P~MP5##bA7ϰʐJ}2E )K׸mmn zP`ER/[ͣ6v/bþ' Wb na [:I?s- 6c1N" \m6jo~lK7G\,٬L5r&o{Acڊ}Y!?yaPeuYmG_Kw&JMPZ t!̿(r6_ʛNFN߷}OduRPk;䭛lR)7i/%Q(W<&%$b9K/0QA@G%^ӳg]!e郐JI@\NL0Ó'eSS VJ}qYm{*0G%1S],涩'QnHQ1U^yɡu=8kЪw'c.gIFU]/{9 lOf|v:cWpc&U:RT HGW $Gj);^T{XSR$n)e#KdC^ 1`UeBPA(?}8M&9M58Z߉:~[{v%H+ӺRuBȧ~(ᴃLFUt-Mvv)VXUoDc5ZA;ϖ'zHTXZG[)hSy2$t#0(v~>25ktj,9^u8g0:Eym^ivmQYk~؊Q@%#!1J›Dï^[{s bFVP @82 #ok}P1p6$yRTw*_D̰lڽ{9PQd(iLb*D 63F9&Sɰ- GN Ҋ6GHsH WZF#&AoX_!b𖝘S V֐Y#X8yQ-$ .R v6S8ró|PTbn-8!);MK|%ZTnr+Ǩ>Řyv"jm#Vξ)>>sUJSzt"fCj*Xp܌K# 隤/⊉&¸A?N}. lZT;GEYfr3-8IUl(IxqF.oMqn^nq6O1-K {1;e'<4CL߉ي]93IR@#~QJ Oͻ1.0Wٱ#c3u\7S{C 1Jf}a@`Qӵi%k8q^xwoQv>dOO%b(PJ_83Tf꺘 ,(H-=?]bfÝ~P\%Y$j32J:)AoG_NU )&m]2 $NM;-pWe6%= b#UKQBQ:㙊luI>;'5 *&g5ͽxŽ;GN.*a,!KJFLm/kWф@bQKʗ dp:mja]OeA܉p[csc~.Kb1UۓIfnI)Ȕo1JIy׎=SQNin(Z$ǟ,8-&H9Sy*V*O#-"yāIP*NiqQV}rtbO.}yc]?{o:یj;+.qgpj~]}՝76ӆݶ 4Ծ@/tGߩ*2n<ˡFDzjbuY)W$m]#KL7.y[m(JEïL'˜So>R\Qr/Mv'"ʑ2Ⱥh^{6^}>xVJee,hVmw*c~!UP~xP[Jy9R\J OSLn@)HUҐD,lT\EIBsg) mͭZ" HYspmqwt׼3;z]d[N],{;߬Hy1 ӥ+\ i'-CR%K*8Vv$>%W-ۊRt>JdZ@סĝn.%s!G(.ąn'晛*-EZ@𵏾$o6PiJQ۴ w'(bnSw]V_)Vl_lmJӔĺ_y**F_\P\hI>Sx9ˋh{ńT|S' !ePA%XPm5ѴXmG}CVU~3@YYJ {hUSw[AR =|v-vyx^(+f7Es:;AD:_~#X6{3 {_xqɘ鸁盇ghZZd[YV^)Nm3]&`qw\,%G7 !=P̘n'QָSWX*&mm\1X~+LacMݔ{?]EMGة_RՈ4kn&ksG/X\jnkc1*YR;N-$|;CVH EhMcYhdVL75-օ:E;@7kM>n-PhHZ8-I_c*8 )6N .4꺗a>ڄaknRd#z4魑eߗCLeC'[_:J4^ f9Ðuh]qɵn!u#] u_xMW4.lL 3 椗yX[( p'ѡ +;Q'<U"1*B Ye<+44N;ik)li&Y@6ﶩF[mA1S4R ?_8uT>pE!ӒðVhAϊCwn 4_5e msMhu{QwKwc16~,7Ƅir5E#VE]S_=A`=wFG+UGJ*k.z4P^ર&*\ !FxA)lZ|6 uȽx\,^R)а"yAG_.Jm$7NwGѥu'_ԅv̮/Ϲ㦾UFꞕ<QbuÅi݁wh5]U턲-\l-LR vTFY$aakGSF5~UPeB~$gtbGMegnҶd[M.uD]`tk i[kInH{y0RJ֎и ũ#Kn{`oԹ% Dͪ~c$Rß$jU]mבX,huZd1LMmn5_94&sMA7\MannV{4 =zS(!˨Sg3i5+J87c85%1TylSS;[V⥷? *WwvsU{y'l`O).'ܰ*b36?%WL.SmEF5Y)|MesY8,Gy5RwfU &+l2}% VktXG>"z{v 9 &9#nc@[KH$WP1Tח42V+s~):xqh[bI׽6z:;-X}LŜn }{bEpS:9T3VG!l.\j#u=c-يh[9Tl4h:4aO#uޙO+fL,mc)􁺅&1شl$? %UKTHÛT{w8U>#M[8qa媡 "k-q6i.Z/- oyx-k{jv#,sl}|hsRmZhz-[mT14tk2,F1ʂgUn!@@X^ tmȱ-N^èc5˒uO+)ҝg \OR0Ǔ r)%bwUTz8USJˎXf+S+$>zp)KWr9䣫P&nvoKG˽EO9yö;;>V=kY!CWH9VDytQY&K˻R\TT,ӺCr Qhil*8SY,,ýa'qN`N68Z/4Dt"sS%V{0>Ym|25e#&eK4m}@ֵ{GNJ?ZwJ7RUVEU Ja +CEpNp8* (6~ඊRP&n[UM*VUL#aԪ|56X!(զaxq2C ġ{j%׸wqxEw,.@c]ZYf4!&{]SG<**G8_uC2 .JeARK` L16ox^Iډ1SvM8+xqIӽGt0opAKW -[[#l=aTnm6~н|V?wLNk 1x_;A @;UP4ELѪ3woqrMl ld -χ5"Oa,c9PO-DtLN;]^(Y*^ÿśzr tXWfG Tڒ>7cu&)K{#mkŁ`pC>C |iX+rGS{C+] ; . ǿKG[QC^X@8)L3蠭]7-K@UCiJm^8 .Sݙa:6DV)w6*z쟼[`@&lq 0{&+"o ܺxh,Ɗzޱ,ItLPVعYmFٮu| wMA,w+dxS0\6[I ? 88ImOzk1t+9-WFVg'G[wN$ħB-eբ5$uTmu_~JT#/Rfۂ&àjIQZS@."4@S{6 "LcKil5d[I AX;'Nœt:Ў)d8t/vn3qO(OBmU5LQ0S;[_f0m9&",q eP_rx&p(歠n|% 6[|ǻ-V#@,k[~N wH(`EXN %;RQupSN.gܝŀ@="6wKuKnX#e21۾?F#|V:"璃H}%%oe 3 [e v^)V`Frqep[52j{=oez§]ލ^oij/$I޷RjuoU~PMuI5>ц_k@?U)AJ ٳ/=>!lD7ʛ8N(dEGANT8r`)k5FX[Jdn%8%! ob y S_֩ja]fH{VO)l*:j4z@\xd\}rT>"؃ts5YW,Ro$*bR@`{ئ]}~ssK*CYP'ǧt s\Ak+h꧌5j Ƣat4[EOW[HhNZ}#h<,mu uʷe\tx*UѾwZO MhҴGz` GJ| e#u;S: !. mwjefjn[8}z(`T;!a|ϹB @8v_^)a-:1+oe6@x]BZN{hŽ{oo5712'Tn[98V%!-͜5-\h`X!R Xw6y"<+d6Pއ!P<9UfAGq;"l$8S^/zm_]BGVBa-<3MK4UӱacޠlO$8F.2>'0qM9I3֩P1 :P0Ӱ۹Rb0v-{z%J[U%h<.Q]4cw-oO{ oz$2^FAN|o pd,? I!R'(Y깆:hۨRܵGtgS?,#,kiqZ3Hmm]t6uojHҏd+WNX\=c9m`^aMVl&[w(6(WT]X.cδ,u~*y?r#k'M+8龇N>(?.fq6!왲ؤek;V~?H}K PgOG`6MlwaP dNg%7leʭOLZyQfm=`KŊwLMB*f2tw4K8f=v5_HZa jH&h.dn r&&ew^kO"7ˎ7Ђtk_:D$U7v-UrYʽpiۏw5z"PBc.w表]n15n\-ޘ=`'NieLD$٦su{KPnCŪa\'uQ؄uַKroms}0LdˆFrO_jʾ?;v[Yae]V!֟.B<@N q5ۿIagyM3j:wga=|av GaNnmMϐ7)RX#.O)C\/ϣT28NQĦ xއVM+K 4ڇu~- e# m] `PTƩLjɂIU,ϫHhV 4tXkc{I"6 SUSXÕf8 Nk_1ur+ BG޷Y޷[5gzs]L$#(`st3Iu&a8KH. ,xU86F ' zׅx 24GdCm*!fwE:γaAQD뭫(q"H"7a^ k%3 EtXR+ѩy}ث+bXx*a[uU̫h~VjFe~/V̑eC5M2UMHq=s}IVz`zw>*"@$⭎3MN^rkR4L2)[XU6sN :z=H5uBjb]NW]N4)!uf.4Mh8nX۳__x[ʳ-~<5]e9yUMk[7 {ɹ}{Qa0e'NT퉺r*ٞߢĶRW0X02}a29\!:`[d'z-ޤ]Mg I{*4=O=v/%KU boiq:D]g }D؞[ҳ_OlOz)7lϿ!6eTct?%/}|O&7>_DKn9J }%a4JÍL{l+jO.9cVnzg:7<OQSVܜN,3Ǵ [6Arx}]#>ŧfS~iܿC s6!Reu8 tpFfk^ UUlwwwk.!o)cdX-$S?pX=K4$Xfc)UI6@בXmd["1pbxoB,>`-`£^%W9t*nkq .cdl]jQå+XEUSOuӨKnJŊRnScN\>,J=V⡡LXk_Kߗ~<%+Ot{,wcė\>=\EV dl[6 /x0z$a)zߺŰP6b^7Rm&lc9u)\1GK~^:{4R79 S F0'{a- r9-SvQb4{'u،W {\rQ㏭o"~vM}S߽m5̐Rw2 5GQQ`l26kx35mkoQꪫEFɟ>Ц u.f:~jLGx#Rڨ!k_Fڢcѻ噰ǨwXlyx/ xF086 c}L"o*z.ʣfsdZ)hi)M[5g=4 ^02j::&knl-.Znyjı wV`P;ZR$u7uVTgrl[܅0 {rB܄NXoS_zKڑjd8lfNZfU~:20hk /Oz،\ux(ft$kxb }b ,r66vH~RÞ6#Qk&~_HscK ]܎vW 6&+9@;nxyrJGa/l a ;[SBL"NW[5=|M 4N"ǧ*&hbg}k8!;([#N7X=5%$9̾ 0hM7d 7 AD$D-ݻzd{!kqH(qWW x[%;&- ;ְbt%hu{ f߳+ aдf=4#?tTsa$$Eu r0l;fsOLktO>kq3z_u58Ƽ_p/j tWռxx'R5™Su1=:va-ı6jbN';I_X4[*Ǐ֝;USb؝% g[Cowxn$o.'N>HC['Ov3yo?±gA=<<^hx\_Kzaą/t|W{@k秖aq=k~]{/1ܴf<ZxLl}xt-i9SqN܍n9N)[B y\I)N%Q|2OSB){?_  !"1AQ#2aqB$3Rb %Cr04Scs&DT'56EdptFV?uCH_7MI|Mb_ ; ay}\u-.Ė2ӏOikeis_|SrBn}NO dIr+e/GmjbPLu%Ú{.m8ʵ*T S^oPM6eZdAԕ3۷Ét:Ov:V u9s-QeDą^,(mp~%4ڭnps-~u ;n梇@b +6^q Glkj Q;8aߛeVigZN'Л xjkW8p^mh ֋ yj +d̪|â6_SSZnUFK41WAJ4 j[/k:)6kۑ$pK)_SS;Iߎ*.P<7T&JZ4N6۔5|'jVJS%b{.}8fdD?%M jZ@Sa+sʭq ;+eyX}F]t)V/s0)5&J}F5J47G%)gd pdJKq`MyhTArٛ*{ CʮK1*wƤG\ * ut ",&hejRR+>jrˉrC`ɎԦmY(W\SjO\xrJH%m ݅0}VFMf$^38Fpq[]ƯR _gF"B$ܒBҷu8 bߨS*ReAɵ_~̴ǗCjTt6S}O\?F`)1$&7Xtljk],RܕN9:IK/u|G_$pUp>piת^K5E2J~+iU,*c,aДkNj"QMӒaλ#ɶMVm]<ϡ0 ̓, kgHUa{Ws8yr47RP R_RHpq8TY|2lӆ[M4M[k(|P)=>MbJN4꓈H~=1}\6W &élS* Dy~)B>[}Ȱ}eO5r>mWLr-lM[ɂX kk^]=p2:W![Z}en_hmTO%,Rbs5F[fl.5Wtk HjbDT`) } W2b/:KT)\'7Fjs(LZ47|T79m&-pOű~}q=0.UbZv*V Fp@ ⤪lXzN\Wqۑb)P)(7H bT~y%9ʰ@? Aķ?!:ۑ/2,{[~ $p[KKd[+c݆Q2b!r@REV--͊4/0SpR[+/iqJOoot*Szu!V'K*l>e 3@L17)`-ZwR2K]9s_5&"%J[_f;\6ܡr KA }]m{ O %ƔG,)J#7Mͽ77g)}I9"8mzvPNCqQq$i썿K^s%l42g=Wu(%E7A#x89aN/&* D&+HHWr m tq߹hiJJt_v\C4__\EDh͂ֈa2kX'HWRxqNg<1? -o_2R^i&ٔ_cRXYWvT1";Tt㘐;?&UdFM-'[yrU]q;_JH:N/s)o> ܫKZBժm|U^ѣTJ|#+aSR~T, qZq32;<6ԛo|IFRVW3.yvWWt?Lx(Lzj\˴\8R6Rnzn IaJ4|fڥIkQ+ *m{N"4;NBW ̛߈{lL\J=.Zg5)ғuG(nzbUBsLٯ%HR@.,V4 S7&aNgeN1QЯra)$iԎÚ *cDY4ԇ9\y~VW{j1C[=K Bih[C^V:iRW_+v: J+:BF(Lv %HCRPa+_.[7/6|(y{<U5s$@Y>苉%cIk?I׆m}=.ܖ_iӲϔTٔ!ӺzwAzdB5.;nBIu Š/kw]H9$ѣt㽵&E^G 7^h } ҬR +;lNPiK[.#VPRʿ\T\u3:kI&Cq`t..Sk1TR%E>[ ڐaRuPV$/\>$,NPd߈,Gc+r*bW}e U:SN+ 5τDIt(X*g~bWBqIKWq!I oADʈrr‘BN&TuS膆ه)KңgTRSICmv\ihQڌuj.<90L35_e<~c{⹻Dd%yX0ܹnW_357.bNOLy G˺md Uz:e)j<]m^#(zaF\UI.3diQND%(jQ-nz5n8!!?6?劇kYq̽2Kݞ!@h)(*>]Tq]6!jMqR8(ʒ>mgiZ|W'l8kG|}Y)_WSlUC>l`ީ W'c.SsBhd! ivVj(V#Uzꋋ :3B`ZƭK'ks'V*ZU.=-KR[;-:[WKip 8y$&U9.\J¶V,iNC֜Amb & 5DZsoifELJZD6|)[q=N\˰҄9%Jq:#* M$r(BbC-m !>H !I/ҨNvL .7.RM.:oq"'ӫMV,!:z5nw;[ eN\m?T.[o溵% \Vp\ex^ʳ+9JY4y Yi9uiyoВ7UH̚c+iN)瑥{-:v?Q}cT+Z-?)SdBbYatOrDI!!a-k^íر(O'ϙQˑyN:u߮2=U\ڂC*wKMu{PLT\`KN jNHZC"eZJC<{{VzRU7a4zk츒hz[ `p!.Pꟊs#6pǹV|‘kX,QbOMQR!\ :ya\_JKX$4ޥ_J.I: qO?V1-1|rP%Jo31U!d5Pf%z5^#<Ӯ앺D{l`y#W#|ƐT34ܡX[;/q .q$ƐPPSYr䈬ޔ./H%;տ]Pʐ,̗M&KV:L&S^C $(tӲob4Ɏ!Jm65_>dK5mH-B={`omfG{ۧLmx[am2Rse?2O ߨ8]P?f4яF/Lx4_HW NޢO[pgp!-N] q u:](YF^_J>vG+Uh^<פEST2 :X̅Kh]D 1BO_?8aLdUĦ#T-Өi岵IؠG"bu3@DIgPt$bEJ J#I֓žV8rTziH\FN$)%*֢]~ʐ-{v{2&S)u'󢸗Y}Re>3VPbR׳eJ,U)13%"HH̉t9f։7mw6VBOj;!UU-0 ,*K&@wL;ʐٲWm~ NɓTǑV+#{:c`Ƨe'z:o 8|:l;bVQKVm`%NhS?e*<醼=J-+>YEi6R\mAқ"\[|B^ch^nUxnB|~:WQ=?up[F6?ٌV~|G#?,US~DiJV/z4!"OԣkM-ն%i VNJHZ z׭;ݽ+6II;ae|O^1R!N CcA:d\(Vif 7Y76")Eɹ ~+p+TSvj^)o}>\j+5:Z%aRuI=RA.$|Z$ Zފ 'P}1-p4Ɋ˦QrCW6 /a4*Ot2пB;>}=Z4rXvH N*FqAܟZˊ;uĨכU&K~5 XzSR wR~%RK[G ϐ-qYQRHVTw&? ԚriKͼjurn05!wq oki$䃗sG0Կ,С)r d B:JŬyҸsܴwHyTuLrmB,V9q*ֱGDn Ǻ-*tׇ)xY52@&qhؐqC0e>Wr4ʜХ:%6 i7U[Gb=QҙڣmR`@JIt5.שlCԳŬ>TRqIQ6$- Al֔ezz%7FD:$Ɛ]PN [ݏ͞ !{zbijTXt 8Nk^ N!;j;b.mf 9FB݊ig$ J5tML**Ԥ"4:suN/tj6pKvӸJCqfn^ARb4qywAmYi[팲ܜᖔu'?]).Fu1x>=mG핸LTO-@)JC>4]^2 P)!A[ǒobUmVa>Ĕ@NkaTi2%R+Kk[ Ԧ pQF[}/U1JTzjSivn6Xj^rinT0 H$MX]LNvT2! (7.e/O(t$m*]mEST~`uĪ 7Ě&ca=3T5'QMG˨Ejd0MJ1WxcPSE65Yea+R}+W2U؎[JO+wO;4e^ R]B,F i*:}!_\9E4ꊪF56%3Q$~P݇7qO7ʒ37,ř_119-jX7 lfT вV&Q0%8[m/86oCJI-ײ\K7v47WnBr6)ت )iiRnlXmnlT\CYfeDE;'C[lH# rt6@u-W e( ml55puZڱIU'Rtv:T!U5wqb,lv#)U:&_ҫJF9= JJ|Q#TČt?/ʊ&h7U9U5q~">|>%ΐ?G۷Kb]}5jyQ7grM <΋ !A@Tpr0%yvhԹ\4G!6JQ}V[ ʢ]%cf{$8\e4=ROäX߮؛"->=;D2ȵFz:=6 4M6+[) A)vm_Ucz[if>}MSܫ69r_e 6Pj')*iɷ߅%uJi7WN НC[JOQS*^B]4S|P5jR=arrS Zoߋ8-Cu*|*7mbГ$9K`pUQMl,ɘR)RMƔ'~Č0zi|*rKJqHߛr|BPYբ:w"B̮mQb7Cc凚i rg6n Ap_\1k#)*\IU7j\Ry ev+T>U_e=5 fuQ Jk+t߱χ'!R]Mlt!+.RW)i̔Y7m[Rj#Q HϹ"ꆱ8('mJR;1.dZdP#JZߎ=?V-KeoܾY16X|3%$$+Q:;#W- eJ>_ؓ2)"!ӥ ք)`pOsKWijT:V-eĥ*:.oq@z0Qj̇-fJe[*6I"[ד,TaUi*o5$ Q Ϗtdjo` P_ي VmQ#ΕXF%z`>4ڥ\}ð*Q +BT>xBPP\$DpS~rf&F0ҒҚ< M$hnπ$y)(k#N:6P~}ëQ Gq]C]B6$_Z̴8b"?::WnEp\R]eZZp]R/!>[V!b*l5xjI=SD}MXdYVlBj]0M9W"E-sPVb| t %A6ѤY%J?`;=TKS)r!ƴ6!g?N 5C\;e"D@w\p\R4$6 @ R.8b;t?GxϏrv lG֩zU#.Q-n}NM˙+2".D㿚W%ipqQZjᨠ\̠#?EQL+5ǨƊY&6ą8F.Bəa4*ly+ihqBV7 oj~ֈ9G_dsm%V~Y͹ ]1qã@+ iV,*RƜhڔYiuCuF3NMRiSd9 ))m)Y `*9:W*T~#0t C9?Y#Ɨ YԔ#l(]JUG6qtxg.%IK`lkTzC*\~XSi.M *Vv t+m0y°} e9H,8~`wD~b2X:DOqاe " Khck^~j]y%ʎ:1"6bbshz!Y: "Q6鉐ɐTܤC$c:T[* m-5*Iִ*zNhZ)IEƋ ӚC.1ĸ8Z:罭S]g8Ust3)ݎ(4nia$;AiF)WRU"3i{q&W6d T}%OIT91K f4PB]5*C~B->h \[FPRꐻ [)|_I.ۃ-"^22{`J>sUW5*R[ ?*%|j4<|Ii-ȰjQ~/ҥ5-#KIpEL{)s}"GnW [h{=Q H΀yn/)oi)\)2GEraϢRT)-lQk~{+S4j؝ /vʅ@ _>v,d%\7]1Jn"B[2RPѥGRUӭ툑鳛3B)BKJ@l(T#CTPpW2R<pw|CEV ZMI6X kO*\BlgPPv.J\V3y*7i. ThĠ"bB}W7n"}n%Jxe-#_rB2>bYSXmo޺j 4-{"'kbDJS5Jfm!HW CSJoUu3v\hSjmz_SGE=h\߆]vYY~G_P#R-]㧈H9N)3yTC`>XLKD~ak%'J00=Q˒?MLU -pSrE%#U[yI=zLN+9UTs}/A{'[wUGcamTa%MBTb3*$bmJ|bVZ{jMj4\Ԕ <4ל%*5 ӪPm_JUi[o\R _%<|xDJ9-iǟQT %Vvy`/ljYvO+R* <ʷ M0Hlkr2N]Qout;s S!zZ0HPȯ&HWZ]i/T"bQj N}q6GR ]G{zf 5!56u-*P ,oɦ+|TM̺]J댥F)R[ja b2,.;+V%?3s^c)Asz6fS)\Ys&t!.קn퉙c-$ qZOu#qGu=%Hf tQ<3M[x[ym8l(ZΣ|wpj<S.5Zn,桿e]BZgPaRZ>a%.\,%ҧ?Is#fj)*qL&ueh|wO1XD(&yա %n'Y:GO;l"Sy8CYSBUܩ%w+;a9McIX*y KI^Qȉ%:iuK:Cӎd R,+Zb8L%pĸXR=↞a0j5||4qU—I y`6̋|y5Nd%2]wX &UJhy4[I|וm*:e6Umcɷ*R`9g[wm4[(6PK4Rs&mRRsEJ,cGGcVm#870fROa*pvMzmBqMf[QR; :>WqZz\D,it&գrDjujlub-."mr!zO;c%hi-?QɭžX[K\}ӳ)_#(w8TW’PInaM\YzqŜ}*&ڴu?wL'+IKݯ8y&#hoRO=o;)pW4]6QNMpRVߓs? 6اy#)M$$ܨtiXCKҧ)m>$U'x{A'ka(M3_m8Ğ2SVqAiGuFFV IN8wpŶ7H*E:ZP$oǮ "u)9zuTlE.tCB0ih+SS@Uݭl̺iTn^ i(?1MC찞=Tb=lҒ.4߿+eV<%Vg*M F:Zyt TgJâOAulFqaPEooMXV _yvVlg̹N]Jg90MmDb:7yöʓx1%|י<= 8\mV$)*Man{"in+HW~ 8T5e7LrBu_mRGPPeOb\O{.eΠH2 FO{{-f}^".*1/Pe!^z8>ϙ.0 2F x7uL~.!]>qblo;Vũ'c[llsM?\Pt#1-&3Ĕ-Ļ!C8mߥ,6\iQpP .88CRNNTfcQb e;i[}|nb\Yr#ʎ^o? ߐ H씥 $|څ=[Z)(V(QMHFEzs/1NR_Tq 5:KӨjNugy*lf yTʓ%m\鰸lUkjSKuQ ԭgI)},~pM=RP-!A Or-lTPPڊz۪U$V_~2Tb槓"ȆLTYt$|ffK,if#::ESaAzm&BQնɪ0#082\`]DIa>Sp.4_tÎ#mt6T}lY'd -jwӯ_(u80s h5FO%_qriRVyN N rQi~zFBHD*ґ*t v!Gk3kzb=q0Kmw dl)>:] H}}0KHܷ܅O GvBIq||ca??JPSq *8@L9;+JUǺUk8Sf-v:#68ɣQf>(*x SԆI1MJk.1ЈiEg~o{]a)lRm`; V! OJ[cႉnΑ!&kz2:LS'үۦ#(&}CΦ.m* 2RggyNi;&I574&4}f_HrpbԦiLJE2%-E)&:vAڀC#W \}}qU^-|*]D2W[A(T>pnp,YJGa+ұdSӪDGKd(2nb@VȕJP_sS #/;qx\U.p D͹W-ӪP'QSX0--|ZK7)V!;,EʹV^<6|$җ5d|[R<4T26un8AP6ALJPsTr$՗C i MM_BULߘk^UMK 8RRZ6m#~3r9FQ"ϸ@<>}p,Rv\s-SMHt8t0Lj Q^!Ez.ğA_Z8qox򴤥FHbLw6YdsA\xd9)!'fza4U TjrQM!s-]M.`7T"&T9(nR\6 @VܝM?)S" AI:y\Mpc4HLe.] x 'aܚm0}\u(7QrT(:KoxB˱;{on62uLz 'I|*Nw#/O4dWu%*wN~ߧkq)SRߟݴt(}~&HZt-+'5_[͹SIHw:c$EKr /pACЌ\0B\rW480QSϢU4m̠S5'r/nljirƀIk72,в 3ͭiu!Syk n{W{lMFe_nR1ʂeI~.6N)iuG%GaE]BBR8kO{,'cjۙIYe(<6t)T9A"ˏIȌ Oql)Z {\oMD+.H~#H@ ePBu'X^SS>!v^7qwpbM]HzZ q.BtiW [fmT)ɍˎ|N2eKZ(kdY\dGGVM??'3G?CO`O'0A&]ƖԸx ^|qS0꼨pB9ZViU\f4ej0aSQ LF%=mo)T=oN3xceQ)[VG) :}>ù*z&;43Rmr)-XSGmmqkc/ԓMZ$(⛿uv?vL\6>N\خ\/vZŋzbHfS6"V[|:3 )|$d]V evdQWez ^͔Q$:Tn%+ m|N*~*˯I.5i)7 ۙmk1>I1Ǡ0J#ˎIiJB62g<93%4$=$0̧1{(sWN3ijЩ-Pۡ1IH'rz=jP1N Fہ^mi@,f˚]nIUy c[^}II_ Bd'Pm[ kA֭Vs|aҸe Ce \e:Uu$h }):_]6=JXvX:ĂuJmGe(Xmm'}SmE=Mv0r5)BR$+ǘ¡pd#Rԯ;Zݱ6NTbCsÒQWMv77atdSKab@ ÑSBR#q ҵS2"lq5#ۦdŲZd!}ŗGr5)z[ ZQ:Ԅ^¹Fs@p?UuodF IB5l6%e 45Fr\ȄjݙyI;;֥%OO|g(|(Tѩh\d!,G%XS+Z$sYFHHOBѣa(1|)zCi- %-dUOjU+hW[WJB!Wy`XԀ߶݅!uzΝ[Txx^~fLdLjZB#-+R9IoG(QZ?K̑mZ4Ï8 ||:UþU4:"^5 kةWy: NGrO}":!*$ QUÓb+qmǏ%jLW6 :>!QoG^Q4`mL=G-LPj/ 5R":1 LF_/ K!m9T #-[rd/r5+{b'º:]V;jyvҗwxV:VAbNxa%UóXOu$,򨞣N3u"^q.גioyNjk! j^džYs3.S&PVe-ZZ:R)*<4̇52XҋcȒ T! ^syQkٍvbAiUSlc~uuX~')hqP~NJQsquQܑJZ+ LJ z[+RopI(SJGn  =n[/~- )2Oo6I!:7 }1YE̱T(YNJb@VΥvƢ5e}.dq8U5;Ѕ(NeuTl8T( v HnJԅUblq"<UfʇJUMKJmy9F/l5 %D/;Nj@G.3̸7OYyl3ZUu"\*"RZ:ӭW2ɥI@urQ(ZMɷy#Dž'J_ qCtP6m *WЪHy+m 533R)r .$A*AԠdzbWhDܗ{rjNBγT;:YGn$=ԗ.N]E0c5^@"|K~qZ6 i]>кyu5˟huCZnUAv\ 3hz=VC-%jBOUG1V)bU9uf9mjRe-${b<(ǝ#m!UC.GũJ4Ǯ+՗| 7s .k A\\ T[Inؐ9֐QA XLQsJ] ʱVÎASd͏dI)y[SPf1) (G##83C){ ZMXM!;ƍDHȥ!`55j@еɬRr۪\C)JAP_®b/YZslUZ&*Xp$J\vw64UJ`9##-3.%vF2*hT} ranRWm jOWP߸W"sK-{m$qOPI #@cG~w˹bM=#G5HC]e[FIK7l͗ߔAxķe4[r4ʢ"S'/I# ,8u]FĤǒcCǽttB,˜~Ңȡ.Tp,/U} .\J\ܦf7TcKal(j.-) "n6aԡQ)ɒlV.3a}NeLT<ײ_y*P*R!Ms+KtQG"l{.3M؆!"%2YQyZ;r:ZpX:g_*ؓQ5 MAU;lFYH+h;P5I~qa V `ܧb>)QR@֕:T_0ɘԅp7rzu^FLeTҐTѼ!JUqV>T[f to(PJ v; !ri2&DBP8juAehԋ\w1x+qMQ.[[ ;NYn*+BIJKi[]*7MWGOFk T+|Dz)Ԓ3Ds6\^]15AN) #6R-{骉, l9W81I'R]N):Sc:gMTbk׽ 7u B>a X?!YOhMB Ym-lgR\Nnn[buiF`NjLXڎmmeP~lIqiw!&dm栦,_24K\ǜ+m3^ %Va**IuM(%Cn5jqYZMo8Ъ,Tx2:t~Q*(u(9L&Z_ ԟeBƭ~r̢HCR,BTJ;bLXtUU*=w=E2#yjRiBRmUjEV۰4C Is\U}`QUJl{d9L)ePTrzwCkuiCNq_mR3j4QDήm[:)$QoL Ƨ51(fEaU+녘_z_M?=V#|dN̏Qk=vա[_zqEiP5zNY**5ӠŕgU=)6Cǹ&~r^O^HD HQ>$#jmeQ<>"Cz~({q|=6G>?Q+uk_r](]vQ9,%~x58EKk0=gJhcӶ8Q}V(U|PLٴ9iEVC9r-r$."#ԈJBBN])9MRTyJ?$٥<t/q>\%E}.hXUccL+SgJFڅ.Dmƈn_Plmñ^sB$?d1?%K(oP6RneDɄnМ%:Ii7_KzS4HCmc+N%~8h@[y^=}/JCQt[P<4qٖKt9V`.d{ iuW- ʤUh Ƣlù^Uc0]0C ֛(VkaD:(sÁ_V>]Vt bsN*h}Èq@Rv ;bzYQ(鴚L7EiPH_\KW N]BqM6HNyHJ{SB4Z*I>C5J粥FVdyJ.K/.Sڛ)tkouHRb'ȤU%^N48XD hRHiZt%@_nbIHE}*&"۾h]#d`je? "A_7CoDEp7TcW\Lf<eƇ8ڞP5;k}ˌzR(O.Mu Fpًʅ?/ڬ9ɕAa kJ+OB>1eڒ2%ydȋ<f:eMrDb3Yݦ3RaN?&̰}8, q-nZ̰+BJ_HǧiUĩ%h$Alr%D^ޛAȾy 65uk.:zKTz_y*ufU(Ӿ+ȩKR| ]%]v-ozcTԸ̨E(m\%%htmn-dY1i%^:6hamc-Rc kҚ\BGp VK)qQYZVEt8 d+͡'zl;iG1a?+ru)4[} zCe)Es]VPA.Ԛ6Tޤ6Ebu=0\)e|4EjGCn{bʌ+Mq%  ~TX!q4p]Ta$R礥Jq'rB;C*<0tHaj\yW[%u?GB-ZNṵ#u#7J\t)-SPbu:.**M--@RF!{j@[_ N\6́^w$%Eü(7rZJyfUSD9.lP;Q[\SOk∖ḤœPm-Z 6HR8DA^ Āuf O֥AӨBMJJh&, *VߢģsY0nQx)҅Y] n7m+NB=F(7_l)-7KqmqyPka|M,{-joF_}mǻ#6ǨƎ".(JI>f3TB+ªP5hm0$n<|.CnxPJjMmJp|¥05w'xe%#{p/d>WXF/G]l+IPRnE}0#'Juȣa*%%@λZt*IhAɕjBe"3=&}ԆUˆ6=.:sm3)SAtL ߮O[0'궑bGV^Xj+ӮUX* n@˝5kule: -Nw r-edy+cބ߷soĩg:"04kXm]iuiHGt닺yx#*'E+,vT<=d8IQHR7zͳ^[Ry%Jho޸̒ۮ|WLz$6TM+JNv匈:Yq}O gU'8*-KuaWLu'~A(ԛ\w6db|wELX7Mba$$oIugO}; [h]xLhi;vC yoiWϰW16'̥0p"Prvojc+JsREA*qz{ٱo[;R9m~ mn:lr l,4jVPU#wIRB_IP<$N"=&yK*֢vR4>kSdۧLjڻuʻiK䅨#Ua_ggf́51P\%=zgT;X>5ZM예Iz)m,LW.ImaѨ:騮\bϰnEۮU!dh"%k-N-2-m`G2>* 9^e=`%)Z)=ʵwėVFv8 y(BЂlBPڣ>ӅNDU %Jl7{`JO\|I!=1OAfyLRd}ۯ JEMRYmN;,>J"޽wHenaC1 j;ԝ]|_̙y :t-#(>Ŀ"ɒK$'O;nS5 X DY@[s Ґ; QS)W,)Qq 3J}~NO8+94 ߶;"JZvAZE nZ#I(i4ҏ.Ǜl1*Ss ,7’[r\o >䗃i*CvmsHf7 V:}WӶb@yONđc}ply~qM`<۞h`u_KbBQ^W&ĥd8k$p{ޢLE5[(!:g^a2Ӭ6^IڵN(h #RU6 ǓWM*rBJE'{aSTW,8? %:'Fz$,871DP*ꕪZ!p$\hV_Z&WAZ1-0!%~8vUiDoZnjpS-injʷJw|6?(7u5]4ҡ+TWu.:NyMx GEt@{؍ⓓ:r)U*('׮xjU}Ak~G+s_ G$Poo xMʫ] ^r~ |C#)k3ⸯ!Ga{o؛36xCFWѥ4UVcWn)&?3浤Wrz|䆒W.bYscKeX &@m|5$'1t@KPۋV}qOan eJ>ΖT5Z?ӹN8N=8d7O g8= &TeIտ,ots[jyNa{튷9$9hV\lY@+nR+~((j|߭xDˣ(ǬBFvj{'ͮd+L%D!GrU78-3 JvdG 궼PM?DI*2@idkjn])BE$Ba:Ƃ^!];mEu>R%;im)[@#V?jo%F6:.p\" *q[M`nppZCc @ߠ>UEMaVS@-<Đ$c9沉}[0Lj+5*-9[:8DiC$.!|n`PLo$Їt#VF&/ f(c֧î2$>mLlۥ.iJ$pm b&E9,>mL;Z 4Dy,;|e9'+jك4T%v" \_H[Df_ !0g[T:Ҁatlv:\)r))5[N*HIMŷu1)P8w"иb;󤴰]y S8)GZU[J2cfUgEU5-5vI@PQj6K1 lk޴Os{a(~m1r%\"R%ŕ Rs|A]s0;L?MLCE%쬐v^HHWaOÛ[vPT8*  {b\xsIa#ݗ]:q äpr9 h_ JtXn:}h.I7/"Bi̼D5 [6רk8Ԅ e!g 7DESGSG0 =ZlelpFG*~b1\}vIC?q!ME/ªdWWb(u˴!Ick_2=*pq?߈qcݩ8JZ,Smpm؊LM]*!Q۫h%JIq'pko:H Iԥ_d '8 B֗PUb?&ro2ʋjb/* ߙO1%ͽʝE㚇1%"-RIH6ć Y{B!,U$uvXQC$[!qϐU1q4kUҤ]}oNsWDy3'FYy8?Ht{~تOi?WܫISச68!hڂm>NS5GU*\$!d4lKXcH=pox2]P?ZR- $qDJ M GoBoqpS#ƿ PVJ*9xb4bx:7Wm۶$GO^)\mN\a`IcƏ 2OHMk|{* ?w1NxߒrIP 8cIUִt c+T\I6YyajJ)SKzWac#ŋ9* , ao4{h @nph{/?5Ɣ(ކ~]IsJvy D(9;?#U'$EC R &;/QdO+1ȟVGB.:o'r;oz|I5)6DKc!ލm%;Oytg' M6VYTUYp_g[ߨ߶)wkJ>k2]F%I$z)'UTiuWo=(q,,{j3dW+֘nZ[V튄r_2Ԋ8w(GQ(ИyۋP#A\Ȳgu_̃!}PoV9`Ù]Z%Juҏk7=qYxݖtho~GkXSYžXސ6[_ٵ ׯ\wB.B \XS}[2ώ^ktK ^3Zd`:[ωU[)d;5|\ઓ ,"Jw? |"2%)==6 t,=Qp3%M[[^ץu JTO}(9ke uY(᮵k3U~^%QhQߢv?v29\JNԄ!)tj%#_IJف4KF^b ,{MOY+tЊC 38i2vQ7MWLxP xKND\$_ob"_g;nlUӷ\-AJp:uuG(=/YT r8d,x<5@c[u.+5$ީLӌVN~|ޥ6Я_Jtw0l@MER[q 1p|@]11:?f (XV8JtV92˔~Ӻ\ӆ]+-;v2.-ډBKUGmfzC5R\ Q/%pQu>D]hlXn9)>HtcN_gH2"$M! . Dn#x%!Zl*|!Fc'%ImaoGum: ,8:qCuN( Kk ٩? 4+ v彿غBd}[j^9PSE 2%qS(BEH;NQ2rUf`+{}Gn}){b7ᶛ>gC:A>[Pjق&SN`aFKX>LJۑ۬96vהmFÎ3= |U9*ƹ:1d7${N&dhҾۚTBr+֝F5qB\J`WFji42Efvi_NYe TygcJ;a̹J*o×/k^kH܅)d^uꫲex3!Iw䵶Uk/ZG4莰帷~3ú4ˊlzeAqSM6Da,:`:À:rw}z Uzp.BgƖRķ!J%Z_A뀟Ɵս^=Z"U[m ?d;zSy&5FB2N2^_oL*\焔0Ԉ]Zm\Mu6|ϏJP3*HJ66œQ U+_ybDi'[ԒH+SBbO}M>t WBiJT}_\k?S"?NѫpT煳cRIڬ'e5'P,\AH$\5V=ǎ+Nʈ+=T1U,vka̷@5%1on^<]J:JZԓpӌAu8#HsԠTdUcԵ֐oȮ t#WGH ׿ !AWQ@kb?RZRٴ({sOjI[i) wEs}-Q)Cgdj[oeR6uD8 X$R7Ŗ%EQ' )Rto{EZqTܺwJZt&tDefePP߆9OAmg2~b&-n[X%L;}-ǟ /YPW $k), RPE&W-AQܭx *8ʵ]}C&@w)lMێi6"*n!(rvR [W1Ů \&9[k}~cmwӷzbLv*"ZZPuDdb?(K-*ӧ#s`cǕSV#Ki*'U]mlVJ/)28+U Kmg49}[tXk$J? T99hR?J~/0'Jlot?S[wl*66?/ 4\yc8Rz뵜n[nƒOi?0zcs7t턶fȧ̟ JY{^ Lܟvތi.)>%KR'Nt_q5r%K t+Z/SM2qTwO}orMc6g4V9k1vӿk\Ov5U\fCkLgOzm wOXmJMSf= 06uHw 4k(Ab_=k\OCJ'5!LԬ%-u$w%%MVR ?]$^đlEFb4%-jt@s>MG[Ķf\[=J6ߡ>1Mn-ANKPKf#nG^= !gwBw:O\c|Qa[6<%;'deNmuӗ)S]2wA[ ֗-|xm҇bY]2\.oBƅrw;_圚ˌ!;'Җ^%&?< 9m;a0:mÅ5G>/ BIQO6?quZaAi䛋u!͛t i [@ y>{a8.RHc ZUR'VcO[JpcxTO\%[_Y_izb~m(ϹJ @iyvԽ7L%ў3o YMDl[O,p2VMO*7n1!΍:ks#=B֮Wna$T/~WtF$]& MTSv`$op6 'A "w߸ b4ǖ2Z6`v7WT4)ob z>m({^S{.#)P]@ZZɹQH]J/|Iߩ7:r*^УIlNrlUD[aӪљZ[#IFo5XEr,HHqlG]HV|en5"L^ ǩ\mJJvX#IW­8K9sèPժ)^bBb8ޅ+о~3Y_Ze'Y {[;BS{Q"=KqG6TD'Dw a㬥q @Kmߍ;1bu2v;Ѳ؜6Ҡbw)]΅'N&V#tYZXvb8\mEëN[o?פӚq({ }x)JE{\BVE%kY崬_@j*1$)`y8%dKLg5cP[uCu~@eh€``֡b-;Յ-5 l}򙒟  M>%9ďY)'ױmT:z2vg0]w$a7[H*)۶8'#eWOv^M%GUp RFyʂP@Ve{wFI_(ITT%%wV>pښMN9"8R~J-\ZN}vCcoU cU̔]jpI μ0\K~©Ԝh |ŔTUПNSIuGq Ŭ5{%?+uV5kTtEC-;p57Y84#-HOx vH|[N*1is_ҡR \>MĪ99+Z~"ƻm&b+.:8T!AMֿSڦet$M/ۣF8;lqASejfr!@|7ީn9@%D'lkeNvs~K{r*]6:u;!6$-iuCk6$]6BIAMxejKRYKHT/q`qϙ]d{N:H C@[@ * ׄevU‚ ?SKg[3} ][v[ yƈ(>SZ. Z](U?q\\iZݓ6ƒH:'3? fTzg9¬7)JrSaέSgB.m={|d/^-[.+q޵~S(:%cmD.Fu(M}M!Ü^m|?B:|ynN ޥZrS4˴#t~ㄮ4S%L-*݁LlzG$aoU1ݕ$L"2)%J?~^gTrʦCq!ZELBIemʵR74.z!+q+-.hԝ&X+aM9+ZqDq [ev)Y(]Zu amX~=!Jp¤kAtV~?وTd ;LN6JDN!GA$+0!ba{r2&p<GBA`Eijt yUaI7I e7bLXaff(`Hdvn:2+(jzG*~ 8P'Zq+ @A"aE'5;5]gCjԒ 92= -J-M1%/OC~*1wSgRIsX^v/^2uFT/5C&R}֛6-a2*y,TrZXJ}_YsJ8e&Rw7q]DFir>Mv*VV%e .$/WM]7c|.rUl*{ ,~8:aũO.($$QO^یay R졫O[X7|Iv;RDj&BOPM\GlIpE]īJ~G .Vd v#m-uHA!.Hԭ1*2#ӨQz㙣HO8*"N}ҭ]Wԙ,KA5x֤LkkiJ6UN1OI9|”H~CkX r,)(l#5>Y*{s;?\(y!n ZA@=1ᢟ5LВo1 ''|jG*:`$ma̴l%zJ@V*=B`j":㮤dM{MnU -uo3% HT<>:M4?(:J(ҍ[Cn p{ʨYM:cf\BCtX~E[>R,Y#[Sj J=-2 R#S\K@WϮ8-R!@ϻ]EŕW|jIJ>H%"OmSp;~GeImeN(cMԠ}|yeJ󍫈gPҤ )˾ϙ-h؍V$гeA{r\_Ot0]*Ꙇ@td-_wZCgB*f ;"5O>2B:'~k<@"UIuUa1/7l[}ﱶ.~Lvx7Pp1W!!MKHWQQPz}DRvJKHN'+t)MAl㓝1##*@M)!uA6Y+8M.0@V-~Ӷ&fҿ2Uܸu3TNeK-M_.Ki9-hp9it ޘS:僯gF۾S9/ ٚw~]G SIL4rl$E3T>Z~ԜB`^3&Za O-(6S!sʳfH%-VT?¾[͚J{7>Η,NpG#.H aAVnN׶mLPyHOorj5j,Y{ڊ.6+G"k ۃȤ q&3n:R6E\RU|ʓfPR^"͢k*Q8^Xٌ)凜 mJ2-ʝ"{+6vma+-rESæT-J .LD:|seFPi#/jHNd3-5&V7`v"Z*r[Hsr N@>b"™. "0[5_Z̬lj n{maa)E~9Q$uY: s\PT=)ol₪S&(䡰(Q%6*A)HfSԊC3~YLy3+*Rغ my42'3>99#O|Ny OLU#HRVQž~ 5k J@q&qGmC[=½ ݂-6]_4jҗE>[ugG:wVKuLjt~1TsFHTF?9Џ{lEIWcA?ۄ?#Zo*ŸtvT|?vë|I~J X}`j #lsz[yo\҇om{`KU*zV֋ZB2li튥qxnP:cqxf )> 6kSi Yҩe\)ԫ% ׈<}&D;ꊶ-*TuiJvT$О\3TMF:$A]>MբvU]E*Jl_wIklS\KPlEoWIqN.Jb%jBI:B~]U@Nv8a+ R2X(iSTcݴkQ ӷkaS>f)J:JӊBV< ok{ӥƎYZiNlSk+";kf*YN-NX6n bEq5HbJ2BW8*zJ:*vɸ(]l^TD{Hݘ#;untciHLrPv2UH*۱%097Kĵ} ZsC,QpcI)B} \nC%`(eZG/(W)eO2 LgmR2.iD}yT?zj,9WCj([m)Y4DfbB'Epڇ}?&Kʙ%Jc͗O] i%|GSUNf:жE劎R3L)iJhBm()NSZo˯f νq JO:-ɓ2O1Ò pRƄYuY6(YO <шZC+NIq3eUeMqصfb-˭w T1Jj3ix쯯P$OONYkvD; EEWSz (op#9T*%'0ӝA ,Tg+‹+Rei78JjPTX>c|n.8AN\$<$mCJR1n'S%`N$i u',$nozaߍbb P.Tz"0i-(jP#ӈ{z}N3z eǮJVdZ5N$FiԷHիJڃ#y \-JY -V$&ؖ)N2B tI&;r1!'Z.NNS* Qj%t'I"ޘjʧOLIyn*N#>XR锪EZ4Wm{_oO}3om 8Nhb8NFk;7 J{\W0Q4\ <{FU>j)>JWm[z2FU&[_6mKf]=өGZBSPonSAgos7s+ɡ 4=r~``4250ݷֺb"s JrYUj$RpܸNRmC䡷 uxJiF$)-N[(r|'~$Jf e)2WN~ȔZ"$)ǔa 0%{`(qVNw=t⧕e:eB*.q6X m E;r}1AMrQ!QtϭkvLH.9`;$ )a8QJ`>nLI/YEp<2'z]1+{*V]DmemVFR55;Ŵ>xdjTvT6}IK(t+ ڮV$7RXh: ҭ7)K[]VO3==k5$f*"jaHC_CqZ8skiuDw[ Xk{te8d>*Ŧ xE xў[= 7jG[ 'zar)۹/,R\[ZH_ChZUm=N**s%AqFC齎D)e,Q SRcSeHJV-Nn}m#2\cvohGVHzS2 8UULz> Dv8Uh(eRR8"S!6[,g|-rYk25R> zn}=J:6$-+ZӡG{P1~qq&'6TÉ,-Luv/MnB5oӷ,e냥wWĕE7j7=*)|H䤢^Ry L5R~Uc%PN1hJdѣ̌iM6ty0VBMJ5$1VQ$*3g; 5]V( &.vO9jnnDVZ1I;ŌoQy PR4X/k[eg>M4KIP-ڊq[5G>UC蹳47!Z89ֽ☚Ux4)R0uH~X8ب-ܳ@J_Z =]R_k&BvGD?2Q|j %=.qʜZ]_ d82'SU^ [{mr|H)SqF,13Xҭ9RWaϡFdP`:BܪF$@A͞:%"kboq46${,ZJaHOCؗ6E3"jzOu! .\\əe~K;V%$[/1sskBR죘nח/eLڭIKYRJ`iύp$F)Mf,BUTCgnktVֿNyN5{!8fIm=- sCK0e9_t_NT_zwԐ@ԟZGCLL;,k)r2$E>Z$vWv?d-J]ye7CR=beBh)i_gj5#,T?\!2jӞLA<2 uWOin}/6%!1ΣPtۉ.%'qq]hʮSZQRiWnY ]YOR \[h@|X[yYPb3e"84RJp׵Ww" ofQOX+ر;b5U*xmSKPȲX]7IPΝGiPjn#e_D+2 ʨEU = J }6Džxߢc+OIS:xeJH>FQΙ3ĠcuhR>$Ǩ)G9(m o'R&xS2euWb8u!ϛETYVc+E''7տNl4rYW}J>h ogN$ZZ6x>&*y,RIm:O2ˍ]Ϟ=URU.N,RuTt u$'3Ze2cu8\[m$YJ|*y)b;?̴pmE$iRJAqk`i+Q˳n)-߮{Aέ1r봷mu1} *BP huЙY!GLU%3:BI#S6r7tzFd*:K(.JT$-0= m-4>7J\U|jt [^L=sRs ՚|Ae/liz:swRjYFe@U&Xj5 О}6'3iիtlUT1\vidTWJVCәel3(;ͣG-,<؎dHs*nS&&t\! -IIm#`gz1ϰ:d" ERbEE# \ƬFik)^VBNqhF̗8tZQn&CKh~q.+v;1k5:!Ť%&Hd"Բm~MG*[Aԝޞe$X#UPa)CmN(q 3zSl1VҳZbZŎHiJ׷ O+3(VujftfF ㍥^Bͮ.-]>F5b&$TGАOV\뽺O jʄux*Qԍf);9dHauDx٨ sͨW[Uϻ}aASaZ! s-×>+cesA7Vykո{1]F~'LQ#aMzo~ U䟺)W ~B}]Wqcv򴟗7 :!"ܜ,UԪ%vԞoҟqd̿N >xC.m\A=->YЋZ5HVol)?\E nNG(F]Ю#uw!:jr#jUr$K /h$hvLy'TIi2оT]Xabʯ&BsQ!so;ȫs򅚂د6Q(IPwķY)Pm$7çl%0ޝ:Sl5W "ۤ'}5lIʵ5!MR;wuUp<7\ ] $lv6/lw"D9q ,XV߮dhy6Rq53٤S4!w0 Ym,%<4~䃆Yc(#|?O`lÍ| ãVj I-+0wPM(;p%+ZGel0"e XeGB)2t2"\K,>+e4Iõ5Y]q\6|J⾒?J ?Z3\وQ[i! *BFq귦?,=eVUZ|'=X}@4Mby6LJL[FyQTdYi\-}F]]GҢɟ*"& HwQ^ځnp|_J9=X3䜥h m]{W) UF(g/|D 4V|}ZyN̒XVaC u%#̣쫔60m(\9 J[`jO]vi ~G C(q+- :ө:nqT蝕V2᫑q]΋*7Q!RmVz:ux$Es}_,R%3EcG2Q&VHHCl8˖PdiZ6zuxKdFQ77lj!r[ڬqĒSk#B '{R 2aUb3!ėT1:Cy\m)^QkIJĩV!k)iEaϪ{FMqÉҶ):H۵ts9HdJpx$(_Bq!R2qڌ֤e!.!+Z,.N-Lx3QHL[4q!%zLb)Ռʚ)8Е_Ml^ֽahԪLP`KeSn-8HYlo}H4/3P˹2*RĶ=TMᖫy0TY&]YTL-WB^IIKM=Qq߈< ?^=I=XMҤ#"רUo\d#N;ZRR}$hYl@ɥ@.8-K]'¹UJl?h@$0UzyRl]Ĵxڵ uN-ݭ؜{)ը c0SrHuyHNPORcԃcvX:CB@kz~!4ڥ.Wbt_KY7^g?B0>юuPqbo˽m S?G֦܏DOPR҈8vR+/')Ws z=RkE|էfvUuzY5Nᛷa@C7fVj!#V #'*ң&I&N}L0ARPU^ؗIDƓ%JEyඖ!Wq"GJ|IufC@%d-YmdnRaWht*1~7oS v7ms|ڔ\Ǚ 2>%@p*r=3)%qpht=NuaNJ2 yCo.&]Պ(f(4ɑ\0JB[-Mz.*h>K$!ЭzuP?i k0qֲM-T% («$fG|Ađ+09Vysmrv^W2R a-!CJI_ZO+nk*4G{5ե3)NpC1€ucD-s)D%IWa:]}jO+gUS"KFVfF鹕hA$*G!Ww&Mfg; 8m(*~8P"j^uZB%8Q!6Uwjtt;)eȁ"Umv:.\s]:iU6َV DwۡLFr 0&!0^uf "8ҕ{vatl)B>`KSK%==u9 %91`oܷ|j8z-It@Zfs{LrĈ EB M` 36K3_$8 RWBi*R9G9Qs%axw?귚zs (ԃK-GG'{9 4ɑKG jsBRN>'R"c,vVO$5V,RMV!sIiUl ᾔ"A3F+Tt0% w=[tg4rY1e *Pa!V: ҕu8He]Emf{DM69z=Y񒺋EnJd<´z B|qp(c0yڏ/5r] $[Y:B;osa$o~ 8Jx [GMW|Ob";a!v}=zcMo4|[A#G-ŒַZ'WBkwxX>E%2v aF$*t朓%@ŀ31NL9n=qܨ}a7Cm1ZqO (ac {yC+w0H@6b ,٦ڿ&Zȫ5PGO(Vǿ|%/Nۉ00H28>ͧpA)T)iNK.Ӵsf #a˫|l4Ta ~ש,^UA3<Ϧ+0+1h*AU9k~T5C.QJnKz,YE{%GoARst)7"P˦'rUJm`aIh"hRYu*68J< ٱe ,RR*ؒ8ߗ[qWR7G߆}Z|Y`l?RKc)"Zmg$Kt N91ϕ}. h_XYǩ>?%nX!?kUdb]o5VymРK qqbyUԎMղ`zW$ҧRKq:4g(*lu/*M5tܮ/ӝZJ!V7)M={ena#ZuqէUHǃkb}2:54ٵ^t4dTXNKtrÇ )0k@XgIMyf]<|$ Jl!AE XȔ}5j*\k%_q+$RZz s _'Ko"E\>#(SZofka\ϵze+1:·Ht6R9jgۓWW q٦&"lQ!!Ia5yYm}-1[]o[z!$^Z5*D8NyyxaH ݰG=S.-I+Q&R$!ZzKr/ZJ>$ 'Uiyk!?M2(q1g4 /;'猜v Zfg5mʢCT1K- A<HbqOQ]>>BV6K~{ )n܌I\NTv:6_\HJ$A[{Y`um0BMq&g2Mg9kfdХ6УJ>/+{l<5M5`;Ry3ER_+ݵi9d7N8E%T\//;Eyi.9X[)H͞$ )TWiV˯B,k(O[aV%֞յV2Jj];[lxsHu(QmtWT|T#,Y}rub(+ QqOek ؽ;zcmtZۇLv?Հt,<-b> #Fɱo/@Oksy1ПmbJ +Rlb+3K1Cc l"0'8xsSt)\O;Rگ`B< ir?[txs7ZօSsUATU:FGL[pTB.)م.$f@s5HХMQTdq6PJXX|Il :v]cCB$2bZ`R~VT**UzŦS⩤#;aCUO+Yl3*Kx$ ENl2Q&,6~~(FØGffptPB..BHۨOLeZmz:Qur^T[&;4!BrprXS"KJUƐXWnU%ZlM*Sa cm .).O@J“jS O+!Ĥ&UJ6Q xr~\_\A[ҮW9+;4.%̍J\/Cl*IWIhVm)REhm9̇RSSbTXz$qC|c{s(|%eؐz|~uQ#XV(ReӒ"bBPs qSlq2 .=FZ.ɊmG}8Uj Z wMF$!xluaʼZ8rIsRO%iԸ<^ĩ"wAv<6TmvD9n1%IQ]ܴT|78\*.|2̐W)n?[߾3$qw }T8nLycN{ǣP <ۏ]bd8*Mӫu˔ǙmH_Ru6HXqu!%[?Q P2if)S` # HSrEZRp}/[\nAoܭ}k_*n@fle$6ӇJ~ LT\)ڴ)@p}@?v#[69TefZZ+@T r^ާ"=C1NɃ-i:Tr-c'-KQ·٢*:v[GHʕxn%Dq#өJUN.Jɳթ2Ě&&<Eڊ5 /Sn:*=a)ba[!n> (/Ú Z&Z)p,xJG W en4?Sv:= B>@.&k{CUԾ]\;fi%+_$~*)Ŧ/~bCcϑ|昵vkO!$) nTwthȸXMZئgz*ge\73G5)YE&BrmtC.yrŮKOA RlT5{-"]ӞQWKLNIm{20)c:-\Hl­=P2TmPa1*M*:caW~.GA”5ޘRW2Oۦ4M{rk~ raW$i퍷#v,t}] E_ +G{JS@nqDЋ!6G|(Ԑmxl)'4/ 4K{Y +ka[)EvNai݂p㊤xn$)HW̤m Z!'Bz #rl`0 'j_͇C j }]бWue+.49EŁ}=W2Ԫ$M-o3yygZZ]m͂~m od0ֳcgdEInJ,WRBw SW[tVSCKt'NdzZei#_qԉl*Ji\Z~$#3U*Dk2׈jˋT-7M!թ%e .n_&ddVeEm.:]mkkRUתA}=YM9ORGz0OB/$dUA̐s"Q+)IaI)/j(%Jo]CbqV/2OL:%l(_ hҙ48tJ $_-tLEu/8ZDm r6ⵗjA]oF7ϗYٯxgNvl$%RV?*%C):l(7ÀD'B6I7ucVGNQ7*Jӣ[.Wl]#WeisH F >. ajJZPo;̝HUjT12eHRxbڂ-bLqO7̭_,x&|E A^\䡿wtJJ[ˉ5E漎ǟztb)r{8W MCe,[YC;bwZR =>z_Cq(-lpnCJ:JuFT=M TzsPLIj4kIRn,P?. yFz$Op$ AbR-*=a3}Vii:5p$ e*#Lrȕ ) Al$:UiTuZb*PkB :YZ62;1J}-z8Wi2"ύv9Cu]Պ>dMny4ңTihZ\oyVo( Ijdp-pI#"|eÒc<ИI-jRu[J Jߥx} 51)) =IMŶRs>n]ᠡOmwNj])MB+6y뗮qO!S?(SaJ*X>.,RTh.ǐic2 Rwq ?{8gF6UYyMmd2`&]IDYa Q # NyOGTBʂSl᩵ӲHQt0US}2zH pHJ:SWH#IVbg+CgLbyWDw$%MܨYoQiJзP@pL6ač>:␦Isq^ʂfyKbH#\eRS#X[i-\Z Yw3 f$6$ y̔E~|:4ج~H3d\0kwX۝'cngNQFPe#3eȒZyv^eScYv)u&48}l<'uORe  \&Trܚi_Ocq>7P؍Rq':ˉLVBUdkply4iO2 )vdWwT0ͨΧJ`5B ޿}c^3Y *E^*#Gӈ3oovOQcGm:ڿ\=u  rq/l!;c Zs~Vead+WA{ߠXN^ñ T !p]JKI +I[w?~??LU^YytQMڐ}F?8VKԆ8q>YVu-%,ImJNq.lmJ|=~ \!E-˿6_TxTZ=A"kT9iϱ7h6u{qa+?wnDHi Jޘsjtc&˴,Yc02eAǘo^`-PyoKesw`jOml%ZfrzVs-4ηےT]Oۧ < X ,$N\漿M+5_R;_z}Z\SQB2TVQqW=FKP?Ni+W~Jgwڔ[r=fG*e]}X 5 AF%V)7|Gp!LQL$~b<)TW: KLʊP%mV kwM1p:H[mmtP_9:fBd1SFԦuM~FNyLÒPK-i֍#2W0ʇLaE8͊&`!Tjn•CSR> [A~?Ch+R?Fš$[jH&c!?Wq+&scL^ۏIo1lhC6´_ t?ׅ =G6;i'.m|i'{ s&lza/NNuڝU?MkSygaD*lZLczcxB4ސV5 !*d&$j'P[Y~Q}t޽Ve>*jRnCcrbQoŌȩ͹xwMTW#[w J3by gޖ;*P'_/jʹ'oMa9l%I6fI6 "hCc9Fz*H@\*B\KR VcKT8Y;(Wvm"&<%O.6ܾ(cDdE"ih*-ILĸ&8F \gBy,v#})Rۑ[ƪ=)ARIuZZVmċz(yY^(pd'__!.4ӀS]5hSҗ#8-ʫ,sBI)$Q9b<G[FcӤmUm2%P@JP)) E)e'Mܸ{DS ĈݓJ͐XBj6/8?G$I,C,j1%$-bPP gZE^456]%w?"#Ү5 w6Trn "#N)Q5ӯ))զ+:Xx0\LhHB6x͐Tبj2tH`6c6d[lOau!%~PmҀ7?YvhtC HOQG♪B(RM~@of(ZQgyBS2ĎRV]9Q6?Ͱ,,G=N% r'LPCϮP֍SoLigh*$"Bzz BŘGės/n|!&f cHJ 惛Ԑz~<IPAP"f\m+tnj4'V?5!r"㍩J* |_ I"Dd%Wz~AZ}FBoEnı1Uiy'FR 7oqH!3"5pRwM۽PG Ѥy-HR?Y5.G=GahJjMZuA"n@;rNZP9XoSmO>k+S]Ua TB4׸]h{)Tie8-AOH?ڿf{-.?\v;QަhɅm"Лp),.6(jf;.5IEӥm*Ä.op[t{R6VVV4Y|n4[6hU6r$.zBG\{ 5BrMEEYin y-y|$n;bZsKkB>.2cRi8FEDt5ۏH.b/ 1p?cuerZnyO;`p%>0/€i_ߌ(ym)|;“ҍ\Nl%!@#H!wBًjK\q-w$t%/Qj,w9$kqƤ8m1J̮LP-ƼȨ%\uԓ}U u<*SD،6x)_~؜*mW;>k-cVRlz-J45l2JJ‚ "q"RԌBiZKv"*>fTiKakuQ};bYɬ̦ ͩ_2]¿/-T$2îjSj!ckH 1(!nyhmiiFP;$_a~%zby$t؍ϗoupZ'V=6#[c1=%⟘q\(ħ6iVKPPХKz *c24F?fG#ɵƔ) ֮MJ~K*.g+XB)+wJj#r:~d(Yof$U ? H7s B\HK즎Zr4TCkRV/ bȍi\Y2qR@YGm c,ƨ֡O^DKjClo{i;b IJ,e#ٓ u 8V>¹(M)2.:h: }(yƏtt8V.S)չ[LgKoCvl[f`U:U1O,<霗Pv<5nwܐ)uo.)UZ]YҖߍBRrhP5s ȵ9IVe68үXHB=Қ1Ƅmu(@ť=b=eCVM%-ɹC%|%$B|*q!{JX~3 HZq=BUf fʭa۶qVރ}A+^%Č@׵ా#K[!ڐekKaȭ&.S*^KwoL*QInenKK JiIWIH }a+ޏ3=/{līΨ)VG Ǖ|a!#RߺNs,Sr(љjr[HB-6I&p%Qb|K)C`؏$UN)lm]-Q Bzዸ?! w6)Q#EbɉHЋlXkɷdHѩI4Bݾ4X\Xr>ħƅICDtyiZG6B7U.(!@Q^<ى!`iX5BwU؆%TI0B f5-( 'RlqOiY~O1 aEm"깰(M?E%qk2в[pi7cf-%pnaHq 4p(5.-͎bZRw6N(Lsu%N -Sa)[Ns/%H%O?-O_LePpVJZb@{o+lHyOXQev_ۮ$JlMBĥ{s#%@m'SnmupaĈdjq ׁ݂p>5L0wppp kvM/SQQ2 hmv2㐗m4R,8אIbS . ~\6]Jhjf\+BIc]DQFȟ"<!aKĭ2QnTbPy?L3&@.[4p uT/8T=]U JIq"yDӊO)D>TTE5  eRK/M:\M2">qajJ&ġtJ9'c4/!;"!:Q;vedIdr1m=n5WmjuB<`l )oT!ϦorT`-N-|–<Q }dΧ'eʀ) 8b6/hE8ăD.xoy"gM5}_iol긟#Pa_Fp/+P 5X¢׊@ZpV+!A-n`YSbVZLad I dD}FB$?B+B ‘t7-ԽP b-Oư"}s)ў'it|o([γǹ5EҤH!1$s *4&0YH$VUe1R&1,Z1@b!88员q:h˘;W=}MUB&~N=EO,3C,Sh摖R b2qLAU} #X_JyQSl(ڝ-5& t7 ̫8ڍ!gHlXLk%bi2r@ϟnNɨ4yDk{L8&EJ;҅Bgp<ϻ{GQBF+vcyr`Aa3cxJ:BF*[Mm6Go ܧMA!*oq P۝E_)f{_G< ')J0ആ߱EpAo8Bߴw {U E^[>zPd Eօa)X}l(#a~&;.?ax|zN4H<\bo_+0djYPʳw~.OsgGoXtC='nDr*RmACS SjP5/)^pɱe*+\-th6|Mx×"D>" v 8§5Fw aܟ3RC'AE]# BLJ@_ãS Cy=kմ!?5f9}Uyk1e$x*цW`6^ ~T% ![o|hN=JybZg-|ž-_Kbʯbr'*Vtͱ|Rg"A|Gn[@SŔ| F5f=# oI<0 ѧ<ð` (\l|ӢR}8r3V>(bW.Y< j71r!/[TbAs $XI e7xitR] W)v ΐdD ; ɠһk(t 3 /β:%Uo&6_ %/Cٷ <Oq(_1$QD|y%yŏ Rp*[4%|ctrwj12T?n01MzF1t`OP9"L0p즾jh: MJ*]]9eI7<'A !/m;o*ŬibaMpYQk<A@_FozńPtPo&_Sp~& -5tQm 1+QX'ˁD۵owܙFT.ګosd\̸pKmokb243Vn1 vP 86ξ_Pm-Kcx< PI>))ȮS?}P|ս9N\2-Y@ߖKd$1ؖÑ Iv>QB?_tNﮭfK.t?)'A$Qpw鋄,GUXPcz9*DEGBm'>\o7 պ> ,_`+HS/L?x>rFf^F߼,/X uBS])Hqab{#f~GOZ)GHu5<,<QoM V fCQ`ﴶof7d| dVhy1Oz"*^ b!LҁƔ-0i:_QdQlB |M2|۠3Xhɴíńl.. Kl^ VZhFWt-WU5դB=!qNR\BdwO/gcnAዪa,wPt؝Qx#Fd7l8؉H /ChqA> c8Hw$ćdoV۹sPp pua' @dL F>SNkPם6pQFvdw>aץ8N9VCO"")nml!P09`Ghm~)|RIPʷ0:d1FHP^F (`Atz. AhIO!oe#EȆ&Þ!၄rwzNPv2Ň4yybTtlB(VA N*=,]ʽB?#]I:~,cl >;H-sOOӓa |4GP,~L-F0:dEt ;&PJiL5" 5;>0:h՞q4$7CP0H ⛢Q>Ǜ(0h YR巚˚)!NO[:H!M@4]aU`ͰC8# d( $ sy3x0u$e8qmwF-i ROml>j4E T54up# ZzH@H`W(>;N)xCUJP|1f"'ʉ0F'Dx\k:E1o`$# ž|e@ M(lU,oW.KW:BYΦHvm&׃d+z'&-zo! .[?%3Mɽ O*qPol[\M#/!ԗ Qf[H^%r%ՎL~n3jz PI |𘝬wZwQ]rv|t}n¡ r EjYƞ ⯫`)g(rks?ݴx Qgp:loпY[m5nA(^ [x:]WQH8P~sD]V}'# sm FBAxS7o,#cOX>5а#Qcaa ařʲ%ٍ((zj b6hA]l }_'oByٲeP2{*i/w";k &(.b9e\뼴п_MywS:YK%7G d$u$^ True+ѰsdMcqQPwwRIu|ۢDGm?vO p4w2 {=6&%V9\ }3;0K< s涴,M2+]x#d`&{@Vԫiho>MbHZ zE&N^kwJ ˥ǯfs 'ވ!3f@2SlZ|=ɛyq"{8!:P"F:H pJ[G@x/v o\.uUMn@_4PSf?k.;S!wk,JZoϏXH p{8pi =@Tԏeo~?ke%wdY$σsb@ffAz7 .JX|1hS´b:`s탫}Z Y+$Kcs{5§aȌ)ՔİQ (s]d05ń~(RSFWt Vp۪/l o(~2$Z:@d=探z:- )CdI5haqKvZbl[G9-d@"Z$= R#d5Ø=jpD81\5.ps( wQSUE9>A$eF' t=[ ^6hV8gM(t7Lhj׫85;Fga?x^qP8+dv]t̄عܸ!3 \#I 8 jkaC7?ˇcA|"WX^qoƢC{hhg:~]h+y@!7c6j^BsrH'o\ i=e @6Tdž*ETB;{J'݄ 1p |sRHz<!{ VUEd^3o\7eDFKc_}%6J5Ap5kV/.کBfn ~y [M+aHD 2_ŅKDs7E.rhu wpExr%Eb? bAԖ:EȬfVA:.*hH-4v$|em)t>8?mhٿq\GU3T߬z_#ӗ_(߳b֍ tP'S˗)9X?mDÞ2MTJEI8@)IqD}-[N"2 mUI `!^2H@aHDN .V݌hXy>QK2/c}Dk),tRSlkުF%ŠttEd܌C6冔(%Z^ :͛S@"7 ܳΰy\@5|aZB6TcT 21d@$A5}¹`"sԶ6vr hŞ?`t_yބmtN +JLUѯźp Rj qzvOG>_815B(Pb[3zR*8 2E>/W@0inw 2hCluº `Ay  &O2"0eЇ!]$2ίi"7!< 1  |TmGgpg4?ix'iJXM'H |Bh;x R G0$pA.-+щt3(-{ogq&Q5uSgJuNL4E)'|Gbݜ=:)i(}a\^²7Ҳ#o ?2 _?89QF =r V9LK\SI  BӇ9m˻ Lgh!6˞L\LBWM~ǥ7Yȁ|cB&'/E \Nu*a $dl޴!3[Ic;.^$!P« t4}S&EJ/0[ֳ^'csU!(u g @@th{Vf`㍔4KciիȮߌ in'ST?%z ~ mtVl Qv St 04cdvX5\EJ{`aQ868P.q3`֜{p;]P2ZMNfT[FlJZt#i9vqQ`'X0:5yCuI҅F^Cw CW@ Fe7A@ѧcǑp]dlT>[udWO>r%&<,4. [6hQpE,4i8!pD'24oֲJ<:|?H:^+肢0V%u1S(9$ jץVD-zkȒ߸^%軾 B|Cj% H䛋e= aP=:@v f{Pqd&|1e5vaєcD4DqEl t 4xhn "\ۂv=4] ),T[&<Dw째O@T>t]^YP%d)N`aUuK'Kܒ\g9ګM l6S\GFpQ{J -1߇[2a` @g5nSq`)big Yץ4Kzn-"2@=ʸbwB7e'SBjy68 X@ʍ2#Y. qo+W_IxsT0p $==6.-V J8y` cE.QTYruLGxر¸}M@¦W]^ō6F .Ggw9VƷn0 Ib9g: U\4i]!/Iqt`i t#{J4B5`-#7HD)؅)պ!OB[XR>[d9=7,Ձx(޺@l͹&GD6gfɬsYA8xvKBwĈo:5 0V m .̞ ۄ1TM' UjJ0IZ8~WaZLuEsLΡ"1nwU ϭ5J$¹E>,H+;r'Xai@A,F6ue )j۱id3=.PDؘMώ)Q/#H;UQjEC**)QWCcApu  LTxV܁fB|EDF~ Q?"\Ss|}Exzq)EّU%BMӘEB+ҺNes~'w@kcWqVyI:>hhz$5@OE}zzh L2=I<9*]8ZoAO]72J΁ ԈI/w#y S 8P-3pC^Su1Շu}4[2"Fclf}P5޼p6Zw#Wd[ZbM%$FŒvL"޻m!OARXӓTIafOp:ZY|e[ASu0[+IC$Zr$fZu1jJI&Ў#{E\\Myј`9gxe s ggl#?𢥰!\$U.5hx@t(6-%:BpvO;@j؂i p"36a%aVPHɌ >ee;|xU'2EoH@/`J5v)Et?jfxnEbJt=EU{(`٬C&u\& lu_>z0{1 S]n 96bnlQO~h/(Ў`R)0uYVRaFOڒ m P<6YJo H_qv$Z y Or'5ݺg=ͽaZ /jBO j6/6-Z&HJ`w6?&(0kXR?8 G|} ަ-ryF鏞1q3U)~t;zd&EPU %)7G Ź}/f.T凩NFRC?X.\Wy#nK/H:j*:1mxԴ VCqD!1B,huvlߝ8b{m!kx"/>7XMڐp'+W.&D^Wc`dS0xQZ^dÔH\g` LR5At`=(u 6Sk-nU"J $L`饀f&|2L{@]՘5ԨxHU&_C)V m``4-Oa6BE?~1iTם53#ߵotnRU+ѱ؃ȧsj`I+T?|I %cxuWg_'hIO[p!C54 `sԠ 8'}6F_J1="R0HC>pZQc1t~qK]U:jxŅ  " mlaAP4d~?d4͍{qŰx W<>*|e6(4bH_1Qt,<&M@G^<lp߹-1Y<8p5f}]ӊh||b B~7xC֌)(_sSy.9Qݠ{?`ATaAoN5=kfx x^ϡ]"MFaq~y]BrUl!F0THʱ$;"wtF]Zr*֝X$ U@%` 0{=}&[K.CjRiS]G 8jZS@Ut/d^ ,>&^-!wJi)s*ser |sqƓ#NbCXGI=".WmѤ\,S5L}B|<4tb׊6l2&%?<z3(5Q?9c{?R:V,?Г Y fyf:&Fxy zxYtăG+@L:}>aSu[<̥]<(oyCw_"fŌHň!a۰·!PV9H}!X@|IRSbg;N*y[E<\J(M-X0[=!KXIk_=5@p $J5c$\wucYy/1(tݦCMk D)22>ˠ5''wX4)~w{[?8&W`]tld \Mvy8fhn|v,".PjjsuhܟƒG|6%4B%M~2nIf`oW񆥡uUEo׏%50pGX1-@wG)63c|?ʧ̸fk-g(i[|q 2YhwDaI%1GS9aӈcS0 )(t.GrM9~Uq%`߱ΐ.$Z^8LGKoL7 o>?&"=O`&-NlBF(9Y;c ( l[l81T4Vy'?.l#@7mLK؍(|9z 0k_Mfw`=)/Òxx^-0*^=#p&n ܥ[Kx]cB`b[;hpnzdS~=ѽUf׬,Lj=h|S׃-XP:t{.gN"c]m9[*>3\.i_2@"Đ?I TzGhi[KZ-.Qmƣ5K6c&h 2B+Qf:դ(GYP3uYA:? NCS\{+C!K/|Ȑ9~V \F<'!г?cxF'l7c,nMj7ɜ`sb-:{k,jCU Y.){vH1Ga`.ف2D[K~wD7RHTM} 7QH׷[*C.Vα̤5?O>n QH:!/hH#A;(*Di![0}<ȠX1ϐg6E}6huq[nl %ԗ4پ&ԸWa;Ų aOS)P4 <7zk9!Z!HeQm`} $T|.8>i?Y"8?вlX58 D߷4BRTu[onʥ_Yq*i` SґB=P?Rhx]"7YSW/$ZVGwⷺ}jlҝq4贂'u撅 6˟, D'4 *JyǮ s2UkwO~ITC=s~Y3$,d`wF5ڛ$NϬ "vVPY/Ώ˞Gg|eҸB|OPmF7])<2V^|IG| EÓ$T;kh/)6-CdIԟ?8 u%xf {2j ~GvQy?Ms%ҁၷ$S6@FFdgORϗ dnJ2ӓ8)y4T[O|d=k$Hx'I~ۂG::QAE Շpm$>ҍ-])#k*(0ū >2Ec"4H3}fD%#q"'Dy(8e~DY$zy1K̓Gd:JM|3q,=2 E@͠~_w}5[K6xs{mrAD,'苯4+u<TtWY^0ߤ VXzgdHV=3D)1sG`S]NorU2R) rtxp͐ -ÔL@r "֓@jp92+P(|\C}8.y Eg#ǜFYH\Sh5wTv˵zj.x~ #9$ҡ@n4j <`6cRUnנ˓G[SJ*%9B>\gFm={$9UM~rRoP(Q-0}Zlxl^c`h4s@\I$ELJ)F1mhpt  0E-"-4!dh5x7ҚmwuvxGw9D<5*Y7 Qbat]YM5;?ɇHh@T yR޸MC*) k6[$ Bs7FaѺ'w qV1s))&ɳν|ԙ/Q:|# b@ljVT0MAZƃe]|AO"";1"e]#e&_ءBNQ!f Г^u.j*l33Z(_$ω/,qUt ۛI<&-l'NR%fL0Di-`X9D^D.JkmJ܁K 851J.SG) |񃗲wlJId!ʿFNFic` C .+me&F |oȄدwµAY WtqRRB*Lޡ@W3HBOll(iJ~3du%e1OF'q/NBTG)); Tei'٭> #[[0OWKQylp$C ;٫5rz@yqgjMhg>NԤ<,n̴ ]i_b F>5OiJM:=dM;h5bFZI# jH@!iaw_dg_Q @ bDaL5Fi,ռٲ (|`74hna ʊ}xkFK3_q>W=^*-]A50zTx94o.-oR G% bTO􆖲t6C-)5_hw瘰(%Bl$#aM^Ocwa:Jy´ZF޲a{"`1ҞGx!&ۑMC6)=0%ۆ>4)3@4\$ET>E(EbLI lB\pq0jr7kP[cRevcfyH6m.)a ]hlcN)Zb Aӓ4-@ѤԃQ)2+u_xB=B"&BƺpОq3CKcq|`.q@68\|"%KDF>E@b~WժT7$i'6iܳA} $BBE>4NVqW#]{i05XC6AƏ? U =g0ޕDdžB: cglq)}a,0ٓ|71/8THWA ÃHj>gˇzTza^[ywzs)x-4`ic72~mT&:'`[PܒscM{ʸ]B(| [zhJ\ "s'' 4|c5Lͤe6u{B.z0olĠ(oBEֳmV)-FQ 44Gc G/t <&sQJۻ1 zBYq82) 0 "5%c.w'#]Gqt[:!d×BԘ /]7nZBET[=$v||˦P'\&(#5\.k89aH<"_p)][Vo( e<(W ZRaUDmQ-5S');[Q,9; b@ё`V#^#^k6b5Hxվ(?d7+ òBt%>zp]o$iMm:קWrC S[Zzą#+7Z2!V|eTr۩BrN\!5B *j'.\.Cw3f:3q3Dfʚ0PcAZ $^Jh9`vE;M%B#Dhv-9`"N{3_\ zhyɮy$ɫ6 oRXWYoπ(hny {m%(j: tVQ=0Z- CS_@F˻qw+pm%4X6M bXI;,ѯGc 9ZoLH u BoTkn~df֣ߚd< RgܢxSDѼ%n m縊Iubl4W50 КʣIV,ev$0.-wu!$ܫRDzx7"[C @ʵu{\RC .ªI DU*5̼P1jk.p%ܾƍ{ŧF~V(z1އ ͠њt0`XV7To 4pD3CFcO_A)MzyoHW~^̝Vu2Lj_p!`i]6H.ryNJQ.Ǐh-jj%dnl)l3^ZT;`ȏL? @)PO,IƀrkuvA){pb `DdZqKE Pvu७>`8P^ \X[o̍<ʭ%{wY)PF٣YG-j_}"IprzaYj>kÛA0ez3ZGea>hD77A9Z9]ۥC*6tP:iGi7cLxLGBi鈆m\^KxWGb̈́ 8URXQKW>s# 7όxd8"Wo/cO/ V~P$^vS8:ɕ<jqʣҝsNY j5,LGII V,aeiC79z @>i㿬;lD00p~mQ7;7 .󓐔R>Gߙ$B#I0K&hkrY'c(_BJ6c)9v Q"G{+bV<_%ѽk?S@n^dž<ƹi"@KnI_̈́^ D60+==SGw|2v'.A.8yA߀y?v% Kk@VmME=B[Q4+WYMVkH`L} %!Ǘ<)2!ev!zS"P7zAQjQS C>50,Mb,9̍:zRށX;.9,X\mcQqGY@`X=Ο&|s{HAugpM;kIEzIߐ^ȥO_=㸭i?8 DF",FSdn#mPk"Sn?]SQ揦$A˳A.t͠cxOf[(XʎѿY.m`˦ O/mP9,JΩ6#tBR1RVx}( ( ‚8,ZYd#Ʊ*H .u !M'@ѓO;7$쀧OUZ8I*;y769z|dBdO<B=a1]x@Ku '"SQ1mNJGjuCl!h^SA7؊ 9nZLh:3&00DW/胈x Ę*D_|zPfrı8tXzӛs ϵcQE0x%܄eҩq WKd!q>GQ[~w"R>\ R-U -R9K2uG]o j˥l5>i[0Jٶ)u42se\ PnQU!HLf cZ)%2 `w-pw`QU R貦@{8} .輁LI6p@֍cf($Z5Bodj Mu٣3N=ݗE4^f 䟄أӠnn5NC|-(yU6Pڛy:&"KV1}$y MH4;>: Q'hO3a_˙!\Ux ~(,@a\%&ppD$aӾ>+;|]DBǍ p0<$OEmx)J ޑ*1O![`vR:O| jȥ&Ed6vv)Phxo~/choTnE[ oq|ٹǤ;wup!N9a:2 To:24>2N! Inᙫd>kb>21'xE9Wp9u?w(4krFsL1XQ*Yq  tJ0k\Uu͖msxmL,}wJr&iZ4M$HhG، ^Q] Ovy,bÍw fC1oЕTmJyIm]dJ?= 1'rz, %Hv5"jX,#f6p"cxNu^Fxn^Ws8 >Io7ETӡN jKqb2 qg $\ˑ_X eu87b>@wM>F)5+.wA1NfNf%CT-:i-kBPuʧ6}KAD@D!]Ԡ_ s<ޫ@~nBn(;|2uiz{GPB[+‡z]PƎO7*'4V> zAI-!W;Lf M4)5-b!!3M,j%P !`"RIaCG_7Jðui =^|D@;O8 6:`ލL7b)oCy!r/Qc-0lo0 4@,@!9 "v&#!nӌdD[N02Ӓ'4} |^/.[\W@I4v iHJCIx=K Tpe5@!t0iiPHĶ =;a.r.Z 5-D¶ 0 \c¤Ym](* ⅈH | =ºA*7%h'F&IH=7p֌hݢb kO Ci?kA~+P8-y9G&6zk}\+@Z.=\+ um'ˎQ7A縄LOBMfc7Aͪm Ҙj+ts8)=៧I~0Ӊ,ɿ Ї`H&0CzRT0>Dͬ|t\Qaǖ5q 59( e}/C /L$+GKhP<ӑʴJ) ƚ3YA@J.'@LF|cKhS@GWZP:u=)-yCNxӸR更j8 ej& )JGf#0K(m `&ucPˀ6ѝ!˲]o4P.JtiN 3JUhD]eͩ7% GVTM{ش" uNA ^Gw@Иo"o 0*g{AW T ]HI$I-UO]גHІYo2AIdK@t(9c)5H``A%\44oBJ*I1! ޡ~oZϩ`RV $hljvA.ge>~qim?0|ۿ@_P+2wͫOei̿fn~ݘ`'z~q CAk'ӛ$ek$XrXzeO\7v9ZEzq>G)=.ϯRt0 C5L8SOVj }/ww`Q$Q:7NH6Q]6{HA2Eߟo<0ߕ]&y6]]!HPŖ$&0q@NZ<(>|]f#?df;5^x4?o4Z-}s[*+yP6EOM٪ D{0uMRSq(OWKz6)+K;2NW7g/L5H"P0B7Lv[*CXn } 54XX_ F/es" 4x!5=rţ71\ /ՈdJ5-47/RtXsh+γ5 VW Z85{% ߘjh ץ""?Z:z@ xt)+TS-O5I'h$ޮo,:?w WR [)]BemIχ JL'rDk` ,OXFCmErK(%~T ~$QSv!lxź M2nO|hpx@q:z?A_ߣ-!| @A /*2$|͗C b =O07fI ) rLѺEK:m|<|GnjuBf&0?% }[d ѻQ xhhr bJo`G+R 0j'C0c^):0`ʽ )/s[Ob$\:ELS-YAݝ%{/ 5iQPXWZr:TIl92ec~ߡ(n=#Xi@3Cpb}RKhQLoáti]71` LX!@:L~D:?hZDZ?^]Cٯ2ąo"J2Q@[P. !;ڃ hPL%pMw!tɻLZ&NWfu5ddUB=VT%)|8UV>7Z]B.`fUpҬq  .G 45w>woE |ZH0lP۝XntL?v9&=fue@(K4!Z 7 ۑk6,2eP<unq>Aa%Q_Z"EG!/xhUe IdPD'~6Px<<@\1cDڑW5k Taw?R ~G~w%EQ*-7{tqˤA}KPsLLpn$U8^Ȁ lk^qUoԓ!Q:cO X5Y.fae4>ĊF""Hf*k<7!E\ '7(:N1?2h"}qo}Ʉ? %*0ꎴ0nPh0*&k#FK-eY_vk5)CdU FhK.O5m"54FR ?L=B᧘T'O׼^GH4ɺ?#]:t>_^_^V$5,߹) |Os^3xLsV[\-X y[0txJmS m?LJF~On[z|>h |rC.`ȃG^S6AH93 6>bZ=´6jq\T#f2b]%z448 niZs>d/dgeiS%in%6,~~0X>mjMg7aa<<@WxVj,N'\Z})bAGzquCNwk=ۊ{&@Gc4/ kmRZl!qG)zvY @?7ΥPנA6xjl\12M;1ةw 1m]`xX)p؈K>㆕BZ/TJ‘S.E!S7+o@A|t1|#Z7* Ђ `#m@G7]R׋B6a퇃p:$).g ):. !Q#%NCLt@ $+9.anmaag$S+zθN,DEJdT0  ~O^^w4Ji{t+v,.lS$eP*7<6@: K=c>숫4|@+ߟ OXxf̅A?=̰ ߛ!avQ: h7|2* =cSgoϜki?BjLxw*|'L7kJ>%5MV??e)KC`T~ Ir+@rR+(zB%ur8y)AS|1B'a2)Ma,*V:MmmpKˣΰF*//(6DiF}BO25kBɵAric܁>=4,1z@yY K5G8`ir.';kE≃3<l$`_xgja 4[ޛ7>g[%"2c&^3opi̥T/mx:0M٤ ݎPam1#jEˢOPtBϝ) Ҡ݉=b Z ^Z.{|;AIiZ\aAk0dZPH-M!\h8Wg'L"$.D%?=f-X<5 E~BLm&wU.V۝kj|crY.B|D?IHy }5ֶ& RxJ;(QL-N&sdG%q9%w.9*;ǜ7>W^aQK5 E(Vk}כ }s)̆]>T  .0BYq!HGS~ Y˸7î) E"q@H` ؿ`26@dWwGlHMTD23(,v*#^L\mDAx ArݔM8VTuhP; AjOR{qVp;B3J6'*J,*( (^0$_dfӽPG X lQ֞%mj)- Z! ѳ$1s >z@2wjrI tI 'qf\ P8OmƘ4)VVPEc/f@ac*!2 !XHC A#agzB}8a+xWPIkHiy=%kBlo@W"=:t7T·x;}߀5 0@ğBРUu~'|/lNy^, *ǥ4']=!IMTۃEE8[ȌN*hn׏gr?!,]"w/" Y0눌4#0 Uİ,ť%Svy&ú뼈>wZ$/Zd?:nS# @e4Fo ;*]ex|9<8P m2% rȅR !^Jj)ixi#"7h!m0dRw ҝGҟI(AwpQ.4H'HST-k!Q`f,C`T~ F#^@75lzǻyi\Qg>1xwO Xer_D`ToF?3LgӮM߿&CVBF༾~qY,5qEQѧ~@|J5Fn =rr_Cvpz6ΘB @5F/>->dtPx0{2,HLU3b; $E0)6{4c u#;v kf@׼uW,ƺr8NtP'xOxn1fqwDw(~Fӻo0fn?1 4`.6Yl#f4v۪'?'XI !Q聑1# F#3^2EBB"B4hX"sؑ|*4JFGca r, l#Gjrex)wrEZ ;Y5]xfû8olb70M@ZU,j^I8H,@6t(!݌z, /M ƿIܼUlm-N|JzEH}kz꠰xy.X]#1Tz[L NL媞~C1chԀ!XTpGN{rÃυO_iVR|SNF)>Q RH1VHH iN*W7=s,xc?b{n>$W VyRAT;OoW4!U%dS2 &òu7o2W( hhQʋ̍TT:ƪ4cp?=%uR')BJ`vW>ULvݢigD&gյD `>xCRA߂jc #?Ѐ 2zEVH`:y q@uǐaC@+'ް[ =|^@0bP7q(@ A<a`b!e/{c>\R) .J{4 %?&~1<#J>tp9ִ;>O`U&XBmۊXD}٤;tӈy uJ5Na BZNpSziV+U&gAb6{Ȝ&:8TltMKEfe=; "Ze()ʰxǒs1_^w/@\ $9`z0u^*?hNO"(@\u+L[cnH)7e/\9Q .0ai?@oe0ūrYxu?ttvEX;9[>20ǿ.a3HtZ_*-49 z-ՑZ]gЋ~C).[ MsȒR4ɲg-R t `oږjđ0 & wҌf]w% FyC j7)A(lǰ }r| L&H4y (!1AQaq `?Fyf 斯~Mv@xjEhcZq!HQCf!jSɾup!i:y(.١>X@Р*J(q{XQV#K0Rl3lVϟl|>}"<_lv|sm<* ]ď* % rM*QxZ )O\h =p Elwx%aS~2àhoY36]zkanЌl&'Lp F7OG(!`i;:I7__2:p97stB/-őy97,]뜿9>X d<1* 1) GeJ ج{6?MaC:qIM?n0!ubң1@PgfWcJd5E `mCAA,+'XskM0tK9EԀ)d (,%hgJ.7>0w'gx8gid)r9P|L6 <0!MPz:\niyh ޴}5fM[&Yʃ%N_f%fq2:(PFv_8'm+K.x.#M仳` v0/pDpat{ 1ktlaġD&;Aq|O]kpfrsr^kc=iwF.EGKL@"עv#\2b?5M)(P! = lVR$'ܿ9_C^p15ʝPF{x0@E7PG"4UD|8K/Wˣ49k ,_~ d_ja""P95n0i2=1Ђk`Su2Ga]E!5}Z[5BW~#4KĜ Tb\dM쀴T`*FD'ګɿΰuer} b)%~ &yV]㼳 {ח"6uM̬i@NAKpʢWjMLZ,EB[T;"EkDWr5f6!+. 0c]I$g>0tN*CE$\㹌-h {wWARk$rBPS:WC .lBl&r@iE]Ht 0eVy&;lz wpDA8+={/@sMm|!a<7cw!~ܶ1{!C62IL.`"`:U ۈ%TCt޲F/_1"Dq)%YLrj<%|{~0>$Ʈ6&.3P20bQQѳ:bVЋ#tBw9:B - LsciAa@26rl0- 0<~@yUl/"k z}U 1+8D$^e.ETקV,w5:1m"?>W}R˧'.)wo/pU\6E"'Zw'|}J/*8&2(; ZΝ;g(훖`彮s 2pQjx=sC50|=OmܲO\^\),IbBO| 9(V P[Da!A@5Q<feUHt: ʨ}a eҞɿ|$o 57i^ջg9(Bs|v+pRudL n5}Оϴ~LiSh~uL94pCE'0JN%]:C{y@A,& A9! 1ޜu( BIbRnD4U"h8 F@DLNVMzQrEt R*FK8Ɣ6'ftFنFSe1BHX 0\LmlBĒH@:VvD0gA>-T}Κne<`AcT- ZLs97pw$zK.XE.BʁeӉFҢv5]B:tLBR浙zMMؕt领6(&HcmB΄ExL6H pTQQ(Z@-ShK`jqfLG0>&pqnUT7'(DOc<:(@|\*@,]c]WjfQn8;eO4&A|U^oϮ]w4)&u7eEk<2nX) ~sH])v d[o0!/x$ł*uXVv%k| *bzvLS@!I:ĄUHCZ}2x6H`R0l*Y_9>s S:c`:ȯ܉故@*Y+Vih:f35`VYG%2q_oaV1#JMjDm*,N].i|l Qc9 3 8T|t5Zw13za1|;xSFү0J x#D=UW6"H"m`kL@4zS^ 'EkP LV,4v tLq@4H<ppI; kzߌy?) (R")Jb<-T)Z(*B]Bl&XC'auZs@i"W7C闭of Yl +lُ#cBLAA13et87'`5_Qi.!,*tH- -GSb*KjK^@wuQځ"PfBnb6Bah 7 MbG4,5 !]`@0=6 iI#E4lv^=qKm8< }8݋c6`8L"k.g+Ou06²œBHz>1R`j䚣lH]?o!|T@ʘ(N2Y*@9W*}FB $wqlQKH ^FV6kcz6%":`ہRS@&ڷS6J<7b6Exϰ%y#`|2m7[I] W܎&r>`Õ.C,Ev4pxΗnC`; 6B j{TO%e!D!M sxT*+ Ûah 8x4Zќ"v5KĴEۣ0dZ !tnt H 86fNqxUZB6q;qr}GJCxxCAvS'z3" y;"۾q{DZ#7`5o9YJ9 9/EtR:_ًN2 xR7aJN}JP)KGYafjAX>9l))_%_Y'tsZrO`zƥS{mxh'>S&љq[iS(,Zr.$"0rC!+{)۵|6 %}B\,4.h]^B EL p'񒝧uqr^ Oe{P4r&g=5\&ۅc_|TgH\8% Wd/sĘeYL0)2M%h̫]U*ˀ4 {ɍ01ql1"`B-"` ՟l1:0, J4mΞ]WE*0qHh@BogUqӊ8ǝo*H,O8pnrE&gE*AmE<1YkK>=sq-lp]%iɆ85za:'nf@ź&|NrTWA牎vZ7G&_4׳9;{?# qZ?3z1=1͙x߶k>(eNp6_?L!z!v~& `+aMqߵ=>HRVӵڏt9FS0ghwz Xlǡҿ[DMO9O/qK>_^>*|a&~p ,.݅׏5I[`<)۲a,vm ͊:w׶oM !!\%aWu?W]e ܠxި}l D<^UAk4jQjM"ZdTExgMh1\'E%9 U/9^1sRJ cn=LlX}Btd r"9.nYq@LYzyYjޑDݤW-BTc1Y6o0,v-uPX}>58C<2i0G4"g/q4s'1B>~s`sçɴO}*\MN@`ǝDzzgf2_W+Sb 77twfGŎpqWOa=TmcSZ*HCdМ*$VͶ>'>ǧG;pt!Ѿ8\1ILk C ?[܄ Y3"1 dcrNS?If_L('<<)t;SZ^)=86̭`O8у^W! ^thy uPoUǟq5*՟zy7߉xb4Ep\&9}ZfFal;=O޲0> f‰\Fb\"4ixA/PYS퐛ٷWcb>FP0A).ii"nvߟwcP?_c=q5p?;XyDslv8!$ņ78yĊIMl7 N&P'8$&SN:9=>DG q 84~QHqR؏@ =@]5uq "&F/o8UNH}G^bUqjkg%s(??M,5k4MԳZK(?j-TY+;q_/H 3ͥb,p<"Nʖ"a uiӺo[Ͳvg5Ag:M:w/"1J/s5f -00ZE`J Ƞ&{ 3@똽m) hzz`8 AD٢wIwwe@/%/1$ 9ן7!e ^˒E3(Q^HBDx8О{YP:=HmD:ToâIɴTEQ2@c4 !|Oh4B x=j4'`!wEF)&P8*TN <Y1B#h +(":H ഋsGvтd%,I.1l#:&xXƈ=Q"T{Ɖ4W~Nx{zWcmѡ |Y2}_.ڏ ~s@ EqC7A Wݠ9rjbb va$pPSap_㧭̥<0Ep?(}:"<-A´,/ ^f€VCudl"D\4Svʕ ȁg"r 1٭І)A `alr0eT Dp`i4Ѥb8s`mJ9'Dh\ZӴ)TM{` 4E?_6̴)V!Ɓ'$Et E.*1Wɐc(,LcҪYLۄ  Ğiaef!Y6$b#0z {yڱ] =H;{x~}cWտyӆϏL&vSn I} ~( DC6 x_\wiцxă'iܺ]SH8fB^t.Wd:]&#F@pB6J,DmDf7녺M]UzatEI[D8hFN #rƚh mQnJV;𘒛^mi,rق_RĐe ٵ$ RbBV$ 4A ^].a9 1Q] @l &H?j+@ g!.ced:4Xa4>y}|+ZC\ Al#|l>#Y+ގ>3`1j??abM47z5꨺a;*^E G؄(jub ЂE[-Cqq5gĵ]-u(Dv0KAkfBeg` PfZ&:w2" Td! h{zs-c+'qZk8}kmݩ``؄ߖdD 2-yѨ@1'!AP KJ)T,ÄGVeX&3eBp*r|ǝģ C-nŽB_Wu`q~ Cxw+(( f$4R C2496yqKUF{HcB7k+k9Pg=C#z0c|b ƨ^vDΓwBg{X#Xn",_~\]"}?pUd4#b5*E'WSX+Xե?@2DI[WZ*pX7!' -$@ o#ۉ8*䛂Xb[Rz޴)z#燾;2]jtՈXRMbPLXW8g8 J+e+8& !"0(Uмdi@`p a9,=CkU'نaݿ߶Gb0:gSf?_oY*jMm|NOy5oq ؏M"GphJÐ9z%q*kz'*yʿ )_ݬSI4i㈎Vɛc&*]vEn6m../(-+B} K s{po>r-=돦P7.?e)뛊(o8 ~1jUdQQ~V'!oX|ڻeϙ:lI+|`Z^>Kjv;52\ktr3Y|^ $9jH;#Qv ƙ8EASK"JM [ ٨+cM3fդug O [i#1wS@01!}͹s?4UίU:KQsu6Co,k[o=C rC7O's.<'h^OB߼Iב~ xx^q0%&Z<'ٮ&'Nۋ%ۥsLD+kݑ]Yi1@dB^ 4ALc"b*Vi> hs D4*e| ]!oOl%ՏXZLy@/dJ^;Pv^ b|4BЮ*Bv7⧼u@{}?\"ϩ}>P sٷߜ7kϹLb7VQyxFiC6Ϧ CdOv _%ym@  0>sxx??M>^'?{1P>WyW0Zިxxp< 8_% A 84فMC P(9~A\+y[5ܭL,pۛ8dhgi,ƃA֨a^ADUް.2+}6`7G}Ⱦs}p3kٞ~\osIBv4޽<"jQ4h߈\۶~N}4iÝ w҅pHg>pt )؜pD?Ԩr/W}xPf@; 1èniXxQ: jVnb>2ǂ ΑdF-2EA0KS`Xwi@$xS)C F#Fd tLxxuSe&~$. UB $b4ם1Q yqh\~5drw=W|b00z-!|m'&X4L i8[0J*.VI1>1zhݍk"Gt ʬ32$^S b7yN`5N)xQvPi$ ZB.‘\ٵoZK7(!1AQaq `?RZm} gckǖ#.A{0,>ӿ+ 5>Жm ) /XC"ڰnU`#ke`_?_R^WZ_.{Sr֦u֠mk~:1lωG2&;QQ~!wzc fX %8=)4}?%pݫc揞k)E >̨-b v7V$.E R]7%ӌwPOP8%@} #iwټAH[* 3̤o1(!ȯ=nb93ԫy@(uifcoWO^"-xaTZU۹ZjJŘԬĨD۵ם@#7-$Cʔn4E[vnm)v/?o!>#{Nc}PicOxX` G3WqC_+> >UJ"- U0=l񧄓 +E.X2/폞1Sl3Rr+7{,c;!o䧷1+2Q^Z/t\{c`bk?8 5^({i~,>0dV%`U!ʎssC,GhM ![qo)(bnj͍|##Ej$kW)?pqA_M:2nMfórOĶ`zB2* m)Ta]Dm"^; !Uvz ؾ.[.CG_u_N'a@3&hwL|}J^c ѝ\ x[3߸<ǴU`.=M>ZY`1KO6"Yq'n}饚s[L{,Aq}$ ~QXYK>My1W'6drEA_dS r,eZ@*\nJ]WjVz1,],z_GXжЧ{?`o3<î@%QSTÚ.2 C;@"^K^F͵8,29Oc(c *nrYw,a( @8 hܯ: $Й5 F| f0BWOXd@U^lj1pZng2ݭN5"el,.G֯J2U` yWaH;9.gh/ c/8μ('g~qNW|Qu+lIB_Y0b];Q%d*u0"bWm횣w #ռE-` 3\G5&,%g9A(&]? T5_)`eD*;KK] txR~q]Rf°}?"R_AzMaG.*X8JX"% CBT<?h;L̸9vɷ28-ǐ+çRCYrxaROxe׋ݿZ[_iFK`zAȹ-7}6(u7M:Jn8̫WُܧBi=VZA0ٛDWCMŠwN]<2%U/ll@F׸xzA-8tP9r(axP8,弚lwX Z 8Nw@Y{Bz꿾6ʛ+y*؅ #v9/qF u׉>'J|7qaXe3b.@s,!uv:NXXx.ZLhvb]Vt,UFl%%^5ъ ߴ!{ŖZX,fjiXWH5rЮ%ˎ"=N=ڹ=zVAkvcѷ%c0E<< GC1=bRP{m3|ŅkJ#Y;)FC-fwêHmW&-.(Qa^ՓE>H,͖qڻu++`w K e7Uzn7'VktICY.E)WuSkzӏ*ی(fیԣo; o]WF%tJCoߤ( U끨&/ȿGuy_VcH4к3~? 79ZrηEuY1I9Ԭלm'Y9]S2pLr4n5`u)W[|Ԩjh~.ح2^\%'{ /daw!apq =k{;_TgH] .YyU63^Dcz8%5Eo:igrGж7(ڂ#ZFn 5f^* Wvշ/6LxkY4,p/$%4' V\㢃(v8ز1pOM1jVdzQ+G~(RN:mE3yA Y2 ~j% fR`0j?^k]V4Җsb9'Qr%# _Ru }~+]ȳ'd@4O>e5b;0ye1n\J|׌s1..5RWලآ@ DXFqk珙H o??*n= OkW-O~?ըB浙ȋƚ1F$^h [EQwbA/̧%Xs/\w!z9T/T %PAP}!e_xxab Ku2zu"jP:E4P|>q'BtK[\ 2کT^1y%2A `k}%\FmlsC={|*F c^ezMJ}?Ȅ;MoEpŮ zoyn3/=iiT#1xRe-Cؖ8^_JU Vдs >%ibhOp6͎x蘻)!L.8Yk瘴 Js .̱RY,̶9T?>`Vݬ< F"0iugJ(c\S";*ۧ./-/`dOt}DQK:énU_69fR"@zgR^hM_H'lG9WJ;Wk!ch@G4tW(yFO0iۼ!^i[*&%/h; BNy ^FPWblcF[ޫG&h R%F; qvAUQKѤKGX^K90=^VN!*WNvTzGS2Lgco^!5 +=A 5/o;T%AXнEa<u]Bo!ہ,FJ LcלfS";qR^Bc~PUgOǘ+f5%>_$f_M-y>߿R_?ژF[р[kn~!W5^fl*`N⣐km@Qni,%2"ʾ~R~e"?#O}R*5 }ȹLG`Qk['K^el2wp#^i d9wDh8 5k +VAFH84M1v}T/t&?vYUX(q h=b3 :t:DP8O2u_ĨnmT%Շ?fzimxo.^\VumRnˉڢsVPm()uMџ)C 5j4Rްvy,͆*bG0?KfR-kC~Xqp;-̆1"vKiJl V-Q_IXc8 R`A(a)d\D9X*brˌ4/dXL=ETmd{2MQ.%xQ$hHh~.}D {0 rUo}@⭣-z[U&T^ktPB:MS%z>߈7:[--זx]5 jɈ'XVk[ψAtx2.EQUxl!8[QKwZ=iPhcjX) F\Y7ΡпU)<'DE8Yz?B<`kdaB& Ȏi `-h;LYIF gXݸWd*uZOT|PN9LA8{"d@M= =<=Nȡ^ŕM&GRC^"++7S90fG#jM~1A ](CNCT_b xcށ)Lx־C [Б~jdʭ~yU^|FPH[ EO.3hƆB@Р7$jT|s)_@u'W}gfئq XyEFjùo:0 5VXĿe<+}j'%80[wa~Mx1񺗒Ugn'V33< ?5&LW"?W&r' (Yo|c*4|JYueШE9s9ǎa[Cw !+6SC|&[ $+fyՏI`4Q1uR7@ێn=_}<٢:Cq6+r?LP0c z!n+@F-Kb]z>7^ b}HDf6F5*芠Tpw|ۚaH`HL )][5t$, $mg#:;.DZ8-@:[@SjzۨmLHRjG/-yƷT3&LL@kR#7y_b^ǵڼ,y!2aX:֞pR(?^ )$ZO ʹlhInJIZ8虖!"MKf.q^ejN~>s* >4fkՆ٢|n[ qaT8}kn+V*x ,'LeGj6T+&ҽ}b[_U+z㊯RXQjLt7(l 5W|ƽ}!*m0M惘k2cKŐ=Tfu8  {)mΖ_'r-_\bZI2Y㠰 Ǵ_؀+C pȩM8#DZ UbZlfECڞ7~ҟ)3FN`ꜿhFՂ> +r۪ dC^ptvhӛ)\CAT7PFjk`ԗYӮãR|oSU>b6K=ݿHKh0bۘHT==eT-FZ @a擶qh.qSҬ}"Ps/f'wO)8Ow}k؜3԰uš@rPЈ0HB4j0mP8zc'削rvQ/Ӄ9*7rJ,R*?<!R Rq׿h3}u.P"Z[H;= hXJ4 tcrgg5ACPUnK\B '?=@_%4 }U78C0J"u\@.fX1f*UP,4 FX]T8mk+gKWxXpvś92u5<[ OqUA5FjƪQtt4!/48&iѯ;bJ]Ş: 31_~Hq8ه^֡g] |-g f.5VӄT!I{=PE )TW9 X \[M*Ud'#*䌅YCJ)x'kPDŠQ/=+z@czGTV)T)|2)DW,%eYd-ށ}ٶڨOS/?f[z==F[jt.j˷*̆QjJ i$ej%)uty;pFJ3(U3 \O>I,-B Hni`^;V.Dmi9]_5[wBz6ũ/;+ >A ^kG*Uެ l,=4W4xĿppcMnvS-=Y߃uqJ*8m'Ž W|uǮ:Bl~ 9%{4<2NQ>`!IJcD Ϩ858aie觑o`(Av `]q:)FB)U*6pT7VBX,\ g Z8f;V̷]qgV{z8}f|[Z&2Jj9ԾܲH`[TWwxNΜTZ EƫNw qIs~p/܎qսyCUuɝG۵8uwd4PYukxfƩxouV[uߒ?DN{lcMb%P0FGڡM mDT2aGP0CKA:jTGv$6srYsV6Zĩ¯!ls,D!.R?dx!/ɚG*Q`Uw8ЯX:S g(Pgw= b9?R }W9z?Nf,x]#Tm, b#?"VVݻUp(q@u(" t̓N Fpcppٻb+;Y2$K=@iVh(-":&B~U_:JVYW2b>amLc-?^~Ո(dž`"|,}n^*lgVbaBȶrf#R[um%؎F|p JcG}|̙uht)Ī҇e X3F1Ԭ=>.w.^0?Vlķd*$@DɦklUtO0ޝA0L[Mc=khrP׎J}f>8SJwgטO*aUR4_(8/t8:#Y{(\W$O~r3BY\`U6={ykxtt`Gx]e3m Bnk5Cd-TfVN3};07,8^s5u $+ETsvFyr5Bژ[WHn(ҒRܶUW"U`бh4.̈́)!3utb .ʺ#JtU. ޚdh6TCSw|)=X Ӄz3ey82/}_:LV "\e916Xu_{)!1AQaq 0p? 1!M2l/xc-nG:NYD-bͫSx` J&13<z`R\⏲osh/X@ӇaZtV st@lJ+O/LsNk'*&D(I@ σ 3)E4^iHZ77r$?(b=?P],r2X4m' p *JrRdò!{GNőmz-zP1/4=H AQ$ꍔ!@rb$T?Ҧ1w,kEkD&Mlc`9ɦ7V %pO J [IDSyT3>EM]g m!B+Wte yAA? @NWE`D7OD'ǔDg9 Ej% K"{A}XB뚄xA^ڠDEٝz?=hmYVB|eW uW]tAPe.ibK9BȠ hYѱjL ð#b۾R$zJHS($=kB;ZPl#" L c^FENn\xz_꜍,)j5.0xpTE!S-!!| Er$( a<ƌ5-r59i81V^1M$(l1F 991]559w8̺ vI4:/{az9W(k$y5Rs@^6FT-DJ(\E }LGմʿ3bVD {F~eD$No:qP yumG&^ DNEG7qA3y VmLbkM}Y!bwAM @ןK%F|nY;k(1_`$~ ҋD1KOǕ,슒1_2_<[F_ 瀀.u$VMv'LH l#Ջ,i!je|* hheP3I˫бʚBJNݵκ| FuA-!;x;Rb"8SzrǒbIɮR)$ N#EE{ VIWGs҉9~յbxM0V*/)xK8V8$~#߫ #]J\JFֵBǃY".s}aBP[ QTgxXQeS,+F AeW؃Y̲CB"ZDɪ:R. ,S/=!%@R2}>D]%"p(rϵ!,.īЈA R϶6 ,DڰFk!s(H" A#XdAЫ #FB?Cp^q\gY`40/-; C !֎@XA`?]b|U*xJF?7mJ_6r,5&Q W={_{׌fʠU|HQzgZW(}:%G#ddDЂWAqn'zMe &iKJ%6ȸ=1Z5:K@ZP;c$@C ?B*B#ŝ<ii٢"MA>ѣQUU]"W;STB FѼESֶwqU˙-<&K.<@W|?@v8FTdZ'w!eW&}sAh) N)P"sd5rb]k;%n saJ4qT 0-+?0;+DFI(D,^%%lڂЩ(/aLv q.Dӌ`̗tzo#ԁ^+CH`""@ 1LJ&.$1F/Ql G.U`Q -)Km ¹g gN 6CX4ܝş?EeygQ7-IBca}+l mE֊coBs 2m*mȟ{j"Eײ ,@<:ș@战:IIFޮ,C{ѴD5KJ ;$!IQr'[eO=T)=`+GONڐZѺT'k. 3!#72TiP5f!E!2+sx`,TvhtYݟ7K@hx|@'' o Q8>…\Ãa(V_:K's$V7HmAt0pH(R>LXk*~3 5]'9Ʉ}8(~jP>AtSAݝ$ U7,;k Isr# T^s޿I6J`.%6} Sр!2 D|qJ|a8 >0 bcܑJ).FAq:!iEN[@-)!%QOVF d8 f((RFh4DRw{,<X @M 0%I\c qNC@, <&tDT<(P-D$!=7y~uB7RCl܀)5D rؕy(D BB 5I:1h= Gui+P*THs.Fj-i)i!iT23K_4kjo <ֆ.(MC?ҡ('6)x:M1d`xAN#Kǁpd*"1Cn.9*l~fML?c{ O/ؗ#R!1HJ MBP(Nq `cCWF;oHqTD$|\:}Z˟xv0k$&U'dI(j?b(>C*~~S b+p4` P}:eX_ t~$4@wb]_/??[(D1aDcDT>Tlyˤ@%||nn<ݷo/i!0B"A bef}']Jr&D@A1҈r֫'Z̮icKuuKt Or<EIa@tJ3qAFXdگ4ũP.U`_p1qhHI5,P(Lu5[3!7HI8.1E"bA]1}*swܦawE%gC 5i [qOVI3dxZx*41yZp $Q!5  LHB䴱xi\)'WC TI,r A E.feO2n&y@~ڵG*W TۂC0V)J_~ߨ..لaB(=\E;`헄,x ofze^+WCƢVtg?F@{@Nʌ֦'ׁޖ$ Rc' e0aC,dCyExgEU>|Hx@nSw]F:;ؑ8]iM>Dv%Qi+/F,B'o(tŊpJ*)(q?1Q0hCZ<(vD J@!)X@Bx`{ uyu1sEW ΰH51, 209()՝r✍'Di1CGІOwp@GY0[- 9!A>2Cq&hT[ ekovñ%O Lp^SلafJ-Kn)zC,Te~@p\jQ-tfpX=BN&h*O p{1_[zu.1.Wlix&l1[3&?r' Tz% }xv\=nP@P–/Yb@@iޑE-Y Dܕ\,(XX-E%jG="؊8,#~}yUW|06 <>)R'4:94äz. = +♊,Bѷw{_@e2At?m(%,[oܘ@[}#F VcW> |i 1jҊ4rP~0ݔ04~2Ѩ>J'hHuM^IמU &%,K=@,/`B3-D#b*R8P@p\`x&‡r1Y1J y3P.XXKV2.~+A8I =|QZ~'FP?aY&\pl &?BL^ ձrV`EteqBד|r8 V[ 쇧7 $ofJYhMk5)%AH+HPAjf4bJAo}M( $"* ` g(SAPFpbo1[;#%ӶVgxW+׍K #M?'PRl-C.c-$,Ti ‡Ս/I7 eho ^=;DҎLvXˎyP.X|AORRÙRmZqys\h`U$j³|sBUk(롪nֺra؂|q)NG2r&j+MxdqӋ Ή_?% P tzJCaǿel,g7HXA?hYAK+G +h3 X l7FdZ=qAt!ծDJPʴjE{{nү_<L<* B)BD+.yf.~wO-x@`ouh9zTfj ~~ JA!L"~4^FazT,e+g(:>9n(w)YZx F"3 vUE]|i~7Xe [i_ /"Y᪵$Ox,::@2 ^ɤ&=hOo ?ea=@RMZk^EC9h| ip혙OP!"(_2 . 4P,XYZY׷ǭE5veSt8&fIJ"nK#3`qf1}O:>yHjWe^1O-JgNZ/Gݫ YXN1]A㒩!ʆC,l0E$<| "Kb0%{aFanAB r@qa MVGzaE*J;cZm(0+*H@h-l,B K`;EEqvS G\!7Md z Sz?.,ps4OKd0 YlhV?Nq|/ޓXBiJGZHC07)p{_skihQFwP6U XJSVii!# A6QB';_.s 1z 9L #Ģ ^:maL#8(%脦xy-w vlVHKF7ȿR_'y (>8bZC G JG ux x\<"?@ 1:Khu)~ ÁK,hv51Z 2Klt.>>==_G_j1!,8KSXUW倶qTj\"/ïYP u+, I:"w&n[ǔTd>֥ Hm :"_ A(\9-KqB;{uة %O0=@>2Jt ”у5>p:_u #C1`4.X%-{[WDw^mt,EmHEJt 5*ij FIx! :3J*Ryz#"#QC)8 jϻ~PC֢|cmKRTZ9bIS;jT ǫG*߯3GĔ?8MV`X`"20Z7_#Ծb ʜCՀ,A0ΦD-=O}sZh`ɛВ?XuqP FV4\|[, DQ F`qX DIo 5RPט, 7P?Ӛ k"|N|=D" q聎p2<_l;;Dޮqd)t` UFm'e 'StLir\?-D6JSuڔ `0V 0DQ&I+ʲkJmu}L4h%?iu"i'\~):='yֲ(("8UcjkO9;l0- _EQ \/gK;?̡D!uɸёX+#:eJiaE gEz&8d%(&cHv":=9m0!| cpiIF"(z gG*c\C(QɱBEy^`OMg Q:$hJ@Pڄ @P}<%> tL}/5jS_B0r.CgN#"(H3gZ>؃DnT#1ߦ0 (>%5~ꦌ2,E? K1m?yDP+@vL8EU}gy2 }6j  @k}b?xrc>YNE[4Y(Ap{@By)5k@Bk ]lI M2rtE/ 8ߠQ<0R;V]/ hS;iiG' 8 E3g{ָ nC Fڿ^xdPKkk޾SrvNYB`1 eCD Y͏e uV"TDb|&Ptã0ٿcxh]ßx._4jm@$RѠ B@ OA !gË!H5#`Ss(MxC#y|CQߢI9aj UtwP@6D=4iVA}%Hb& 1J "xP > U4JX +5SJV?FȅE&l1~֖GRv1g, L#p_ft@y,ZaRG߁y\F mmDR@&QiB>+zZ#iH|Z%,<!8`l`(QmBpG=yFՕVX9CQ'ED҈B9&2b t@G6H\!нR#iϊI ?t2aO08j?0ų0)_35/F<=; F54JRko@c Ou_Zѧٚ9V>+"jj8+[GwϯJHڶi ~TVLl ˞f{:FcLϙ(Jް&xLT_=>⡦=7C?9ExT ,CXx|/I +Â'd\螩=H#7lRT[`qvH|s(YcnEP"%`E-hF9,fz гd/ (jtr<>tym ѥ ߒ{?!&FֶF;An9ZLas}=&ϽcI@Y@uDJ&rOB^Q"p ᅨ;{Fڃg؀" O^Vc+b`^jKٔJFӅVHfݴ j =HGOT$tQ+P9* N]y~$+.VGGĜ) l=<=8/p~61B?Huk`DŽUDib^  `G "PTkjǭx`Ch1h*JIPRiҋe21rL"H@ 4&Y0r5tRTPߏ‡⟬gJ r<*B1Z 0Džd5WϏK*/H$ixfOa;'uy V9d P!:7qH R6UG#ځZv5'PAuY mXC/8y b@}s*GcՂ^7DTj咎 ~ڴdE&`ڃU&Z_JJLwwz`Vڇç$eGZGdjQ)G0]/?@@"dW 1ɋ2%&,}]UFt>w0*VQ d Za_J e ǥ/$'n+(mD< i3nᢔ8PbhS}?NRn3ФEDN o}l$!H7hRQ+އU T!MPB@08A4R"fD40)F{sTE G>LbR.-6 ZVE_bFOID>3K5w%Z>?<pVG.b_$\~}wjpa PHC @!6h aޘzR h#I*K-N9Tg/  / $8 2ĸeH!HEԐTQA} %ʖ/`!/xBXc!=J'X$Iޚ 4w y b1 u'JFX5r4]2axYU؃oDdBպhi{AJ=a>[x( C'V0A X % #)#dRxP쯽LG]) ({!Gg6¨D4m\!vBͫ\}T9{ \P૚ +G0LPEMzݕk XrM= MGmJEJ@/@`3ǀ?篁(p5&s aS&J?EB-+ (Ry+hve\NXgW .1&.^{RK%XBfTC:I2˰ê }xQ 2) F1pF \*i@ de[Zm,ZFX1¤WQ J<2b-Te PX)@!>B$C4HqU5ޫ{\FHJ=절@hP0!U|:yzs'z ~%:_N"A%I^bi"у)<LMJahM܄) " 9|TD\;2|rL@p.8꿸 y c\(VW[[8Z3g4M3sPpkPK!#Y zR[ I@ 9# mPb[`FBw‚V5_/,aJZOzW$ճ5GLxXBRXXU 7 wNj\$#%*W1^iDIxP!V0^?O4 =/E%=g|IBwFdypE_,9A]O7*@htd^S E.^bc1k$hb'}EC.k?1}3 яD+J+O@FS\-gaO+=Y1O!qY eE}~d_Wf (@ZӖ|ۂ݌(e ÌJK,|ģ gIjr5fat|Kʒ"{*#ޕ$}i[2 P&|砸r7ZqCrىfBRc*q4BS+d>^kK-s (8Tq7rI` 1 (Dbf4yk22 -2Nb i|`>VFR7{c,A#"dgh c߇!9zQ2Ze# 七2Q2nMBS$C3Y|̡x69B vyLTrTG0y@wBrTUT` fJs )D 7z%ܦ\_a?z7AUԡU3e0 04_.s *)[(UnG,0a FTvX@[*/^<*P0S dmj\@ႫZX(M5dzYF*Un'Q*1ȧk6`p,>,2(=d\مrnmu5F` "c<(,N_TY`LJ3$%hz?Ȉx_"L!.Z3΁z˩PEyF*|ЇZYU1|7&oo @S23F> WF8E3J`ٞH*Opֻzp$KJi$7cx UPT'A|’|>/uF%KD Zih9n' W7.5*рjR$tDP42F! "AF -&5Ud'PM YiQ eOaפTs,& \D`\渭F ́88(QG4葅Ref-ݍ#pL ,of 2n=I=d!B1WSHg,ګq+ti]O2H^&1q$ (5(G, 0<-H߽H=ppJFZb01k<+'/߉_@} MH{xB/rNd[i-#(8-PX`lHWNfC *E>3 TF!D顼=6h)/ӪPU $ŀvzC) |̣ z a c9|B`ea0D^D(rYu,|AT'd:2X*aW"+ҩ,JƼc0XhhHs$WCytp j,`hwi2n(|:: *z›+5h~"eWF1,TAn?ɺ% n%BzȋN:pml1<rt 'Z U`tYTvFը>$Kpip5Ԑ]o@'8,r |rB0m5'(M1AP["v5wHd?_NV)}pXe|YC=>A! R["+ ~jǬyJisxs4xǣht>=?鴳8T<(+=D+.G"1Xfe\ m #PrpX $tF2|671Ԓ\f> H؁횅N8gp6>:?RKH_W(ߨ[JNM1ٷ-$BHCf %3P\{YYC;6µx4;'I3:vbF#M iKbBĮ{͢1 ThGٳ 41PҐ[:]&zE%ECCHyF.jEi'P1BuE_jWAE:c[O A7C%UMJ77)A8 ݡY$/71@ZF O7* m ?" ">G%b)t'O9voQO6E{0`BFW nOʙD )PCx'N|Ej`|Df]`cY8ei%Ē6S o8vf`U>l(D"¬OY#VSض2#@=R-%Elz ua;-MQ<ɐy:a OOҐ(/;FjbM2$:* . aj)x,hx :$CD :&ߍz9YpKe#h:X2$Yĵ ~vD\ 㱩=ԉz&SD{&#Q 1/UR8a ppw.@a52]ޡ=@p=Ȃ }0UF5ZA4 XQsy2+ |A 2h:2[ $"1-8[8+KcU\$'h@@S6ha(yZ>)_>0zM>"Fx uyF+}A$M)X2#} 4ÈH)okh{zB`)/g:/w!krTe>I#_Eyw8 ŠfaQwƊY% 0܀b6^:1H)dzqZQɣ`*)e'?jԩvN8mՂNkteyX|%x^d2Y[A2Lʇ@d@!ް&p%a.^#S{pYki~a& ݋sp]9IA+98 Q)>I0+T[f4t)cA5Ib֋q hP*N|TJڅ:sj.":j0`gƿG!\δMjM@YE,AEorB*Yvd.;JFMZ1M}D9HF V)n2 uuTW:Gl%Nc0M%=%wE |Pz=n7ڔ,Y"vv9t^\(QX9k҂n,NŦIj _h.hbsW0m:,sRCf'2׮2"a"!GLH](g jG>` 6!X0yD S3;ߖOGv4DD 4STek>||TRCjZ(VssirH!!$|9YFIX ^gޙ|5.PNؤ# ?(wDR *LM`Pz+rJ!~6gu -}zI@U"y+Tt`4R2  FH0iCe 2@:=|.qapm2yi02k9C))Nm!]aSNi`$0 !Ie_U Ux46~}c"~(!'~t(8FEԀ6/fO ]=@ؠ(ȉ՜Yzk/d)!2~:?Op*)A{`TsP< u#?D@*珌_o0l#@r{ h U JrI"X ή,% C0;<eO(-B,e;@81#P G$ 6_l©UNg h{zk#3@^+Y(UՂToj;`0% НU"uWHPC KdrP? ɪl{DmCq)Rs !RHßjULi ƱLD*s~;O3 iDװ|ZS)% 1 A}㡬BlT'=$i/rT??Bm.'rq@(& )!/MTϒNB=6)|P\ H h>NJ ث9Q M$YVA{fwbw9,hHqq~s&Z.x΢ˠ;&<;ME_oXb3;Y+t)ep 03HPoΨE5XB!&핈9!X!T|'Zi[qt؈/WR$KT)ɒ(0}{]CHI (B rSX{\ȫ7 0'H'yHR%lʖMo,J[s@%PxCt} hmP"4 .t4r(cI2(9"~ ] …B;EcDu:={qQea> A)H0hsƎ*O=d%"^ix(E  Um_G)sc"(rʸ-Ȯ3 QVG(t\㗦ay:}kC ^޻)9U@Ջs ^A 7 Eu]B!2nC?;)bQ[zy&j7nexկ!ώ%]'ue吹vgrttG/NW4D+f3e%!Ws{?2y^$]y*Bpe)V ndjQΘ|h<;fߒUPz} GH |s'z!; e"*b[>"a;P-V~@tR|0~Ś#PPvG΃-2"W| @0J/x9 qriQu <b?Vt0ְ: "V"R5TP*S鉂Z!z^n(baE/* F fn =5ulRSfSrLmN #~s@c *!H fA3H-b>?_ďcH3~&~97Ty2'Yx8ێx`!UREHR#НHu`5s׫C[H{{{H2N9I:}DH!"'yqƏQ;, ^0'\aoc22U@A<ЮD%!D\k~m?uYbp0TzVux8N,jpG` ᡄ+)J/zߞ#rPx6sw2$5穫>Od !đ,+=L[h+c }ȃtz00ET7Mye5È+@cE}GZԶjhV冈xh(S!:ͫAΨ`#Sh&}rUBy^Z( H}U ?wHP(m,yg9uɷ G '~mk|1`NM'r,S E  *O꾪yehی p,pQt򟾒Lx?G 3uHtx_(q6 ⚓*VqĐ-w?ϧ\8AO8l`JTG]g8I+%eÖiWѪ- |->);SIP+0w)]'-P8jʓٕ(8KNs&٩:!g3*ٗJx3e+ Pt1J- &vpnt-6@DW|Nq"ق"pIט& 7q1"3ʸ '/%- 5 m(o9b@6:/(dªq tޖhQYfp*q6o>rwߛD^F? kZ[Xrb$NSɸγ qhnG5ըb DQb!@2p(ڶ_7"б6LOIFb8I$|,6 ,Kh\$^o'i+9\ɁBCyX{5@)ӯ8{,̣ؒ Dm( + EU=3~j M4|64Iob,+bjoSE!,v4GX\`ىB ZMK푎mTd~ NY}%eT BPC N!˪s"~8TNcL :OF?jNRbBu}J)O _#+UuT WBتV]bz6HMj%&9ə$8uil(^v R+Ĭ,SHg9~g@$ȐK'.פRrCK.e1@ Ȫ?TPfْDÒ3kj; ({HuW3%" \c; G,AĎQZ6pc@2B,BBOqEmSϧN6Ѡ@OjIP]Gx(@=1ѳ/Z?VV M'e$"dsʯ7G}d PvaiLrzℴT2bUUH#pif\PлXu[@UņE ƒhK=Q?&Pzs 986ZKEz@챵D:@ۣ u0irFLbȫh ̍e~%Ll&0c0D%{q"7>ӝz VA?!-B@E0I AF]cl(O.(Ș1U`G'ify#G"Isti[*faFFBjv>(Zi⺬Mv@iwG4Ȫ*F`q l%E \erE+تŀ ZNe6&QTVz`KWJu+JT5@Deqx:e>ZN3`p^nŚb/ 5bɑbH"$"+a4rWKl*CNԏ.gVI =si(?,H@`X+h/OFSy0أ!'y[H!|*Uud<)ߚy3RH(̣FB;R:B]!!ߥ~u,A %amRI@0m'([3^ʤ@=vD00p (@ #|!W}m"$ Q\7ro 1.9l78L7<#4DBB` 0*J;rN~rsr&qx#1Irf;ʉ埊lNY) }O@PFsyԸ60D3hu6mE(<` @U}6EJ)XC/‚TE{QKZN5(`5 !WB4Q٠^qA !5c X׉vm`xFb*vpxc*b,  pE;O Q-8g }eprrMĵ @vz&B![{Y&+(@`,'910 ME#> +] p1ZV8j1+Ӻ ^h&/Pk.ue{i~¸h<8Ug|%??zQc5t,$;@POVQ+2Ԗf =RZ`TuH?=LLIOR_> 4q1@Ci$ Qf-.>g咑ޘaFhTT? HqP"69$3E:8AǍ~U z@ IQ9h rjduIh^Z;pLY*SDZ@7[Qfك6vg3Jkљb#k 6T<TzT8mK$$AT A^q꽇9t`uiTaL+-\@*pw%Ox=8K8m%_;t /AWiFt'zm) Vۙkm!*M8d{c]E:kRiGhfPZFh*  !!/'TtX}(8.J{l %6Oiэb c/7^2!-aDH3bo=F[ Bq4Ml7o?9qG)ĆųE < L@DD'UwWVxl/.r8L+5[B:?V&1ysKKk`"%)aR,PAŨ e {>H-E`5{@FӉk1\P|îc \ 9`jD}@ #I<-+XT_oXypI) QGJ&N S..R+ÂsUQ JFh}U޾5WN.tf'FHyotbpݟֶh9}TAD~S6L8u¾0`K"I䛆|P/Ӟ $I. iVU4RFq`LaNJ\.Z 0^s)֖wx"%G3=XO2;r"33DNfqsUxt[@"Y= 0'Փ9lUV"!T&Q (/n/.SPJg\a)#JZ0YUQrQ i`O#8‡RI,D= 媦q$W9A[cS=N4)u乡PlǛ- CozlHw6K<k0~ԡQBYBQ.t6Lȕ{NAQ]7|aK5i!ڛϭԀNJN RqTx!1-Ԙ#!G!%H1{w W@R$O4ranX*gC`9~6X o FIsR}dM^UJ.պ\hU` SI-c|iD?" }XbG0F>A *z1 TT;. 'tQb E0fqPa]Xx,[b$8H5Rb{XvVtsZ i7 pp@kmyɌ2U3vM,,d~eb1 aCeAȑ?p$a8Hmwgηklj8|xq6yF`׌d(<1Z鐃-7p=Jv1TK8:h"$9 WYyc U!eU_D1OlJ%ln>25FrTiގ%fr򋪈cT5,R9xY+&+l*Q;]iPvW3Pu@]Qan(L *O[3b'yC&KN   TW}4E4DB"``!Qe[٨I!ZovAQeq KKx˂Plinth-0.8.1/doc/images/a20-olinuxino-lime2_thumb.jpg000066400000000000000000001527601266051671100223230ustar00rootroot00000000000000JFIFHHI3ExifII*  (1 2i0SAMSUNGSM-G900HHHGIMP 2.8.142015:11:19 21:48:00"'@0220* >F N V^  f|bn(-0100 /d 2015:11:19 21:14:192015:11:19 21:14:19ddd dd0100  Z@PASCIIF& w _ &@< G~k@d ' '$F@@ @@@@!u#w#y#{#####X X R ####8n\*bLub+bJw b%F} 80-~!B~_H=q&LuMs >e~n+wO}sDI.+q [E5/W}^5N%~W3MrQe?,[n9J?ctC=abpw|^CHns{8LG5DXhy8:> LpUe1e~b@y_A zU,S|M>ecQ!R^\W'7EUrk%7M`ooLfx|3^v|B~w72>]@E {H"H2G@JKJKZ! bg<k"JR!4o?RI-Q"""""""""" """ """" """" """ """""q """"""""""""""""""""fS2,1U'RU'RU'RU'QFJRJRNRfS2,10 #P3   s  *fe!= ! v!60g" # @# B keW e!$')+/25E78b:;<=@B keW e!$')+/25E78b:;<=@B keW e!$')+/25E78b:;<=@n@P"J8 ! h F%@2q-l(\`dhlptx|:PQ ?? SUSU)a  5274 2014/03/12 09:35:57 XHBd@ F16LLGB00SM F16LLHC04SM  00(0HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222k" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{t0< ]w$Mm DJԄkIJ/}cK.P> W]+)vO'Ry5\8u6ߴdqpk5ݬz)U=hL[E`l啸TI&+il/ *\qv:\_8~@'УDy5kEWPԊk_3#G1LWiq;xx 1 q$gcDzq_^&W|<3jcʃՏ_?|tQF:qI%<ȁT{VǕ#K|;N8cK gu?|u "4[9G^F#64z;u'uZHz[+y;HX׃S^e sJ6:Snϩ[De =ּZD1pӽ^' Ϩ]6k·f^Z% }۳)NQKFzx@œpJ̧]u;mfA@̣ԁ_$F)b<]u8u[V{5< i9b_'|Qʭ.w +f;g'f'$QkRj2iQG-aINz5Zoi:)"[ν?4^ԤVe*rx ȸ`gdup̪Jұt9-ִtUK9*Y[ÏXtǒNSmr$'8d1h5Gҧis8u5]A4k/zQ3ѕ΢mH8+uk,!9]?mU ʓIz:t!oG>(W}GLQ@GʮWPrBWq(RRI~z0cm{.d $ f iL&3ji,G AD, vkU}f/Rըj[9ѥܞ'.Bx<8f5( ]dR7+cz9!̘89 wѵ0YeiOR~NZX]2G^5xkfO<*e!HpG>듞bxy#?ZLh'hBF}PzD륗b0k;+?Ď}X⻚԰T|w{oւI;鸯zEKhnܠ #Vde Ӟ0X8j[3o_R/eea<8lHdpq\3MϨyV%Bgsֹyqҧdx77E"|C#fd6 `2%T,yk]xQyKN{b<LzF!jP?y̗ZH<P յך󼶌-\yЪyҢޅMr-?R- C(ɖ2Nt5*H0+ B3OYm툣mNW.9!j_ k8r1w餷n%_،zu+cNT́.sL zqtR+{_36"V$g\/ F"2 SUm挭5-;H(ݛ,Fz灞}qWʼn*!p@CO${zW1ynW2naSQ&md;{WGsxI͍@GDUqmb nڮE9S' V6,J p~\b|/+Z̐K2sT2GҸˣ.[vc N{~hxpnlIQ\ n=C~5KR]RϵT**Ojيu2ULJ͚#ASMyke$h!XPA+jWR'+_$/z@8E@c+mċ2NT:497{'1,L`}/5%,#VXDi>\ 3wMZCӠn̋#4s8{|inQ oXWT*Q#C|~_һ3a);7OV1JӢI]>Oeܾ"n7)3}(i>k/XyA3Eܲ@1gLEX+rFO;2Z$Ix|F:q`u@ @$̥n"Tgk iLRJȫUm K!o j{i7/9ʖpӥzOWnWJׂkS"I=k97b7hSKtxKj/1",H#ʾ' k> $+tjgzpq[A-ܿjmi8r;sWznt`ʜݶj4 ;,>5,{>oOڦ|VgP[ns[>wLpd+*pFGrC `9?vH9PH.15=xX3>GB XGmd[Og[6]~\)c.],eL'>JY]*ngTC109(?Z% +(Q%h(f`x POVd2~~k#p=lz=G/ko _PVj/؜iGjWyB.?Y Gn0=U 68$,3|v;qֺygǙ شkOrt| + Fqۜ`z.uI&7ԍv}~_+>X÷է@nU8~?K{^:0ij{(Z^gAum(FI;Cr'Ҵ$p.⺶2F'wSlaZW1;j vcGٮSY7{7E}8sUsE%ϠNYTv34P wN܂H:Seԅ@D'>? G}tCnC4-.H?5^E HD>2Ŕ.FG8#ں}U.]`EVruO_-B{{kEh#ǴW k+*|G&ZV-h1eS `>nzN,qj4!0 2TrF1bWqnR[gCӥ-uwr:S +[l*rڊs M,eKS춱" W s5v.O b-PHvMXJKFTlk 5Ԅ(?3bK^!Xm.rC#;pHNGzLNDF)"C[u ۉ+ T%PsۓڽKtp:Ջ܈4{Bg987|1b]Cm57zp=+oчU%v}^EJ~:(iaO?jV^3JL{8ڝEC*tEXn{uvK;h텲A.ѷ4{fpPN}6Ia4z3DrĨ$t1dYFifdM]$Lu%hpfZP*tvJK\Z3SS[`mwQSh۸wisFHtMIw۳+^>Y YBxׇZd6TߙO#$ƽ<`cTZ+]*H2A&%,e5EI=.5wT@1kƥuW䩕bTJ:jї5;'|; t+d7 0QE8EYUϞ1tO:ύY~`~Us#s@obFv S9%}hA-o>ZA6ONR°\Hʽ3.X<}kXZ`fhsEÖ=ž]p*X]Prn*=~ o|Es~ {$AU7`zK x n|_$ c3wֻ)mna5XJ!aׯ?KHפݶ}sEJ^R#Jދ\Y[aTȋj0v*Kc phttp://ns.adobe.com/xap/1.0/ 5312 2988 SAMSUNG SM-G900H Top-left 72 72 Inch G900HXXU1ANG3 2015:11:19 21:14:19 Centered 512 288 JPEG compression Top-left 72 72 Inch 1/100 sec. f/2.2 Normal program 64 Exif Version 2.2 2015:11:19 21:14:19 2015:11:19 21:14:19 6.64 EV (1/99 sec.) 2.27 EV (f/2.2) 4.10 EV (58.75 cd/m^2) 0.00 EV 2.27 EV (f/2.2) Center-weighted average 4.8 mm 98 bytes undefined data FlashPix Version 1.0 sRGB 5312 2988 Auto exposure Auto white balance 31 Standard F16LLGB00SM F16LLHC04SM CC!    V4 wS~wyUP brAF^Nj Y{'ض!第6ڵ(`~7X]1y^[c3K :9U=,x}S褄fƑ0xIuMhyW9-d ث:Z%g(i:Ȑڙ-Kqq?w"䬄Hcg}$^G(.Ѝ,"Nj\xi0쓪]דvhD)ZfJb/GoSUpP}LYW!#N@cL|ʕ NMʦ[0(SXC>9{ Ǒt/Lؕ|MԷyc&2~FRF`VcI Le٪j<ϝs$^h@bM_ٱGǙ&''e 6G;N) l\˖0ނ;`>RX-p0 ȡpuqE]IYTe/'mqˋ"ۋt/yz͟KGlܩko/!l37!R]7Pm+W5Rb]srwֽ%C-@,Vtjk!@vRTst>KLl`MC"șƣY8MqlX܋:vK2//$S-woe!cLO*㶛/Hٛ| mկ+|*"8n(3%Ai(. cU#vE7⣬lEgkJөh^>`!c 9Fci|˦y̯l Na'SL˳Q6[bR`i!S7?͋Ľ(s_Erc)+Ҵ8%F>Ke!kT>-7c.XfכSvNvÚLv?}2f`HuZ8o8컕ؙ}=% s!1mdX[{4 /IiFt47:SR~(g9(_>FҖr{,?}#d׶kkmy%#]µhBO?}L6Od}2U% 6]6슆7nz@$@$@$@$@$@$@%)!#@$o0Z1vJwKb+%Llcʿo1,)z5GWg]s3\OkOu?N+L{?R {%~T=:=aSȕğ+RUf䊾YٸITy$I|3RVwjr r/5Oiabeˆ.Sc_]WO ݣ[P_cgg~߈,|NWq2n03/W b"3F)ithoڗ6~{gk Z}y(:T@Oٴhb' ~sA7@?}\{ӣߔ8Ѡ _1|ohW3VWOC#}4pc|?EX3XBΆbԅW_WN)&C7[~6&Q=%z퇽7AFsWχ:wv) ,ct ~d3iZHPow;[GX"x"|5z fc]!8ڪk%ql$?^4';Y/P_.& XU(:QBAYA_Bnv U_K xFN X8.1ִf0p5,?)TK-VjDFlv8|Zk,5jͽG]UӃ?x]Fbc4Z__;a}E>ǼޗY8W*jDʞsj5g }/5ْEgE,Y~fO 3hm,ÛRky}'.\E~b h^X$rN=؈6JO@:EJՔOMQ[T<+I݃F5zi*4Xͮ:Ѩ#xdnI2BS )yIUۛC7Jb"mQX֊0-wwh:ylD=1'1O E(3ts,$bTr# D>Ҳxls? 26"h,q, Cy\]PڦCq$<׫y5L[Z9Mj_:"]@jrE ~o${e mg¢$!t.l# ŮG_NI'gQxž )MK: -"Nk>+=e&JP M F9igC`5!kd?9<<V1#}I":hGL:Ν]qθ|+~~0Rtp:`s/ݦRhˢڋКta+2I\WCS٬:`gJ, W &K͗xJԵN{O(C͢ G0Z!卓VG]HἿ>Kùѯ9\CG VsW L)&FvG ^*ƄYX-ıTz}Qิ@R1L1ƄJ=2!)҇( )#7#*L$\g;i L-.٨|9R“Zұzv׭/ޏXUڸ9znnUcBߠV 5.o7mkv?Zb<Ӕ4|q2cV'Mj J&܇Ŝ_NsBI!Q٪#sLN?ˣ)1Y _۞P:PIyI$93WqM4:G9?7([Xgn3镾/G"jI# 嶕O3Ƭ &ZƵ1y0oix7;9%HϦ=~3#KQLЖpy#8uH!1A"2Qaq#B4R%3Cb$0@sr?c<>l %yʴJH7RUT (qpEcd*q5,\MJHRc(i)a[Si* Y{o^3߬g1Oٔhq͘3S[ d(S+O:ۗrma.tb׬L:c$prM֩ɠc`m}cVjR*[@4SNG7M-D%Mc,U%8*h3+ݰZBt_}4ԤWJ}J˓M/~T>ardVӛ6`^J~9dq)eCM=:A'#b4Kl,%. 퐒qk81_Iδ h<4 Љ:(raYXl%9H3-*eTjBUI~9kZZn90*jfy:+n]+=aڷU)ēj ɓ[ԎCxzg ͯP4'4iR1 Ub,$kx?)rԕ+3.$hl&Oj)Wa~`6LE:fe* }-6Σ}On#Xq8ÇJVRMmVTt}{F=ȧ*@BAX'_9EȲTϿV]]z?K!Ʌ͓r 6%*m:pbvC;x􊣎;>8eqd,BP]v#sJH=ζ<DYo[0,nmmhcGxgSTgvÀż]:DQ,)ebZiq:(C؉omm#\CZbXqsP ϑK@ 1"mNYSIzl)aIk4ԓNʰ F}^j [:F\Ch(7 d#'"JfQ…9tj`?:s4Vet._4p .SXs뗽hnQ2T/ZRn&6Vd~ G کq IR(FvLb#ybzo(`~S*vEgHaUap};+:ms ߤ'ڔFa Ƣ(µL%߬GNȰY2ӥ%;y S.cnbhWz(Q'(6)JW 3nw>f:ֈ**ZiiYH9ظFlM6>PbmĆ VH q9!9 ԳhPPS#)%DF /nj>䊛H%J)^8'* [u+xF gXJ… 8? S>í6P7NUӯS0ەG2ɳCRZHl;*'6Hrf9KKC(*Juk[k)X2ZyDme̮ՅׯUg*uۗ} RTr'S}"QM m(f*Ap.tB!Qx~?9j!f)VV~Xy?70 RH.&㽔u{6B~@Z,ՙI19Qֳ%98 $- I9p^N։ 5B:n,N)惈'2Za+KXG 8fmRɖHM @4N&]>ӆ$kʢ|L:fړGIKWPoS{F&؎¹&q9kE"e$Zv߉,;U݉?Sx\f)n B'AѰ )s[CHJUԛ\^'f(C Sؗ{9Ծb;SmA=W]aPC-\)YA%W %F"*81V cU?l9+)^R^y!h$fhkhlrYxX֠y v4/g$/0Ro8h+Of$UGaWb &8~_ᬓTZ%QXG1| (qeKAa*Î1Ad=b\_lCskIIBP7h.-s/"lk?Gy8L%^Л4mt5VbcESt#ok37>2N@X$;7_ƺ/HJ_d-tVh #Q.BQ9J~A5 ZrVKb ckKqpGq1R唙 WM/*mzt> M$I9.:ZۆGlJ [S$B~"/Rv.[T˭/PRL:j@_0G' }Њx|zrroTn|8Q?aug 3Zd?X7GYm. R,0ﴅ&}-q~u٠f*K|͟ N/|Ae4)!% ?>QCbuMCs8PʺҽJ>?i BOy]{[u@aįB|6JDJsJQ'sdHQJҥ3$ ZLJYYqe̗{,Hkm]v?!1A"2Qq#a3@BRrSb?BU4f.G♴> ']N^W--I"yU&d M 6ÈmoT4]B<^QWCM gBRz6]kvtRږ!e~$I\'مQS,YZ9[=qʚXԺ]Q(M;ek]HQp~if6o( Sߧ:t겵9C-j9-7 qКlfHO\rE15%z=p<"5%CJ1HH_ Ea4 f yߜb*JG8TaUly\r;6M/y2/q><2\KN_z͓:v#k7(P#RR)W =p $ 1hZE^T}ZZK]'$VX<+vvM/MyDO83Ӫ%(+Jc0b~i(D9o1`PHC0aeS s SvRjg6k{['!S2V0Ty-‚CTnSs&zVRbq+Om2FǪJOA!j'!0ܺ(p1-\a$RC2jRu"NWMBQ#&Ma1=l)s?!,xYno8E.]ni6t%-o bN&fi%*F@UUOXafD61 z؜P* 8h'ry&U={C)/όUW++Z% -ciNbORU*4:ڊQrR+2^TCjob>éMG<‹XBEf!qng F3-i}q,iU_Ջ[\AJፐ68J2S`WƬm:BF)1$ Vا̳_ٕenqBf|I&]ȍy3npiaE( !kL&fY'@Q8Aax$f^0HAJXH.*L-ڬ8}T/l(.wBJ'/q)SqZ5f$gϴ֬Ē- a}8۽wbaH , XjOVz?+I#M m|aǦ*[$Cinmof$*3j#=dGezWGe>NKH?8m7>VU5t| i&5̊d="{0d(5cZr=yEO jt[FIy7۰q5P)(X4)85n %_ $>|b\J*hl}^J5C^%O1 G6>ILh,W -X'DRwX8)\їE^i+2U7.z(]%2jmBA I(eKlOP@Pq nrv(_Hp F[%@#? 8fi͐HӦ*- 7k>Rg30w1W)D( v9BsSo/p!{e*Vqԫ}kӫ#N  !"1A2Q#BaqR$3Cb%r &4@ScdsPT? BmܘOJj19ۛIUT+RGQVUi (ܵ⠇UdLdҦ[ھ-ꐞr7EYirn1M_[κ"S@^m(ZB&̋yHJme څ2ZLJԄCe+Fԫ)URƄJ^nJOrا)TW3#KIDt&y[680Dl_>,$i^G(/WT,#_~HaSdk; }пaELPmIRe7u[jDc<Ne o.CT؜,iȰ䦂- R3TarGdDO9Μs&O֨'[2 }[&E4G{y~x^E:1jp*]|Cyk_|D2axw?ICJVs$v҅~8MU&VOC*1_ PA_iVSHZ_什~lS8*# Mp ۘ_qWX[t*C,#V\.n#mO:\+NPA z6)N!A=sloXjkl: Hp tQW(?jK>F1[5{_|pd0 @iR, JIK| fRe7IUzdy|*ϔ] SHu!v)*?6hmtH'a:!0THVذMRriLm?EiSY*'|fCڿ λJ!*<979Cjs--dn{_e2V3>[n@El-krR%QΫ{s{REr=F,zbn崤f*1V^a+|9\-z`p\3:+8R:U֜N;fPAZh*]҅\m6*F~sRfUzaԉ)ITmĕϿ/Z)JZRmKya;bYTӕRo?^IC߻K8d+s~_GNUn]*J+b9?~iFzvOw>Jm^%P)ե)~U;KOSTgj9Uz-EqU*Pyiw~P]3~Id%)j6U'K4j_[iVEQEe^qjsݍ-YIÒLɅ%rdMhulT/OIU$8),rCۋ7vR[4DV; J‘gz?ON "L h!m 1I4̩OPWsc6}:B' sϣ&W-ַ0&OO8\8SI1C̥h*(WtU1kOVF ^P-b<8i%2qH+oӘv6i"g$36\n1R}̡&bEm)ř)JZPs~ǾlDRL z9 oQt6MJO2947q*q6Zzŧc3#Z 3Ҁ@|BB\JuMJ*,_ޣ3) eq]l]*aǑ2uj1a:!" psX2~-J6@Իuue'sS!Lc+~k"r{ө)ګR+Qqiu7Ӫe $ Ic|P|UBy3%եme**~S)Q) KKis>T8i;me|H{ڏ5ԡ*Ri"{vG硂PSvRUQ-)U*%ډ)\uԠمEN,R5,u ؅-=vs8$BSFUzKGk-6*Tw;%N6¡eb63mœ)ԨΕGTjj( -?ݽEN6< mj?H!dlͬw뉂+MkSN@KihZ˗mtS_ҋmQ9 ,ބ5AP B7JzWZfG[E |燲8$e>^8]68ғAb/)\902 6K(Y?1b; )E$&ė<D6BJ.SI.^6%o'"zxjGjCt~"&3+]c2z5۸ʮO|GV(_),$+m%n-Ndqke>Z 8)׮^1RS!M>r)IOѵTU))p|c!5@uBh7r)(.k A(2Zܧ 9@_T^N _, dG9zo5MGewa.j1K o/M&IsiΫjGNju:B@mq{u}7MӊJ̰˄锭I6R%wa%db; it3bS\TOjWRAiN=d$sZub-]K^B)Ÿ˾!(qO2.6{XS!NڥB,E)xz T(ή$\FːLJ/h%cI.Xrs}Ok[2 J߰KyK@Kel~j[\/'_V3}"QF ;- 9%!)%0֣yrd1S'(W|3"&E& &B.PҨ11KFc% R;:U q?B.#79RӾ$PzgR 6H2uk"%i܇ayz~~ &j GiwWBUPyԭR2N'%08ztK)09;\ ćGqoG) n~"qqki \L2-wX/}%ndSe~8Zeo(*q,[.N2!يSs{me]> v|?9~^V@po~u h )L4I4_zPG]px8T am>x`RY|BT4ɶFJz yv:sNe¹u9bM:OIae.. OuT[rEI;$+H0Xɵh(6iBG^þ)*+7eVW&|Ҥ&oKeoD@E2;#CLuj4fJzH녶(pOEl*')R:w_AqgW\SlQ<+4i@s# ^Ks'}n`0ZUǯ^؎pmyO*PU):B oO8򊍨?p卻bEnC*Fp7-V&Im48R`aJzDG DhͿ,$jk^옞oL<1:5~)1 {EA $fE{^9{2I]ɤRXmlx$7_BI{qlVw)e?G_ tBxkw|煮SFJ%.YܨDlG*& m/U]i7% o8^%6O4<*P[ʛ%EcN">Ì߯Mv++AFtV)>;jT1dG~Z9凞Y|P"ϏŜ\ÔbYHAQQQV/1էVu[kʻt*e Skm u*,iUSkq%EvlШ̢M$_qc\>-z59s<ka՚rܥ-*cGCĴnezb)0iFRLñz&-5"?UM{7^{1zK&YoQkH0\]At-(BȉĔlT *C9fթdk.}X(Qk/&8z7Lzٵ'ޜdwRurOP u""ÎԎq7.YI[@Gpp)\=23jiR_DO#=H (#tI;um/fi?/3Ac$y9se*|'LEUTʔO;&@J:, )+rtf4Yk9Fo[mKO)+:nۨO9VXoo=S*ntRE'lShqՓK۰!E!W)Rʩ8rY} 1rSdaI )aֲ֣9>*7JV?0%9ՁfZ䔥7R oiBa܍CFO=o2P&}n8$#r/sP ؅m)oބvJ鹾<>'h1cQzHR-9z-&Qm^JײaP$9-̔6,~G'CPO/nxGn^J'}8t#u(4m9vtY0K#*7Q|:3TZ*ҟvtH8uyݛss^v."#"p_ܟG0PPuY]s0 = 1F j-ih6Ue ;P&"5ACE6.1y>GM}0@36vjji}^]ByR9N 0BbQd2CBaFȰŝ2R.,N\kˏ&êU tTd\<BQur^#=k'ݏQ{:&z ʍU [j0'ߨmgDIyW* QR `.SkoKJiQQM!na+M)Ѥy\H hқiĥE DR1$5S!9{l))NQD%M[Ji ̟t:ìcWe-pz~BW`vV)TZ2vNvj:4[&Zh)إեل o._d[z UF1xE 9F4КbBBsuP{CxHRGyH}'פ7澰 &_ q]KMX"RփV3e?"pypJs'T)%K s%N~}T$R2VΦAu\WQ/?uh&zWO犑hu)LBbMוΣKQIaaqK.956K9 fL.qCe)*} i"b]܈(I>>TTsn큧]J4/ISsGJyw**Mhu)>R]͜J:6su+:b7ETi̅6e{lI_\>GXi\i-s)z%)^ؙGO!pqhUJtRm}n%3әw1[8 j6lw0֜Nz-Vlst'L=Am{%~Tkc̈́QBm)unʆD␮]wCDhNhPiMq! hyQ9McPxSv߫Mj1F_"BRQ@%'#?]=nlXL*Kmz`Y-oT4ԗP͇"ojEIOޅ+*8,rn7S~fہT~$k-,:WMbD*ꏌKCn5.AƚQ= k#ҥkUT\@Cﶿ2v :qd_phH+Ry8|I1jOh ڋ%HA;\ =k.IWTBїs}OUۼ*e݈YMJ>Kwx*C:K$*Ti=nV|Si˔/L, Qب7JH TZ9#D}NT|t!\zN7*eMiTdU㾸SkNr͓r$E=/ӐZ;V`68my;Z#RQ[K.Jkƍ+[{,/| pfRRb+RkqД)J-Kb2{_;Pa\G)JAua{`v7܌GMv?2pU渙E2bQfҞ>MO p2 Z~/BM+BBr>k+!)Tw\E!s$m-rwRAD3|@8TNm-OʥxueӸ g)SK YVa_oMIGu& ?!ski #Y,,d_YmeJZ*;MzUf*SzFBK(gQ~k%( b9jܦJ`IP 7>Z>"--BP>iuH9EqK&BTurOHPA /V*9!7r$&{AGS^u+q[;`mpW $$mjJ!)r|R~ R >Di`e{ÔriGe, x 2ywب}a1)⤹ݮ:wH`H@ee$*c>i{I$'x|RO*7;ARUP8_˜5k==zb\=jO=lx5Z=Zr8qu*1'=Ć7 l} ǵ)qDblJRX#4k&0S 8*I> &^tU 09jKRN@mN[oKj|4˲ceq]:keoÚl,+UR/W(؃-m_yhmNΏ^3(RېdJXNRMvt+':H('SYH mHHQ -dl":V錥,qG8zY)=* BfEeAu#un7\}DE=InqD^qj C$iG[8sSc*dלuvi+&k;L;o(6"EL:i%&hrCbTz4F DV꒔;tõ:-mU)[IȔ.Pu;[7(u \)ٷD,Em$Qr5*J];v8& m)XtŒc~FҶKd"5KG 5eYw ̃"T}iJS0Cl3c)YPͺz|HW%u:g|ZF$RW8}AMzޘm:HKVP  Y/Rq(KV:d*Ppb7^J7lͪw+Y-qJ٤gt!9!(yo0 Ǟ9vw*[n,|#FݳjBu9G{ JERx8Pr>XۥGv+jEb֢;IM.̕~xZ{B&dyrYBolY $fGT? kU ^dֲp_Z0%HBm*a5RR眦"B4!Y[Y~lcZ:Ev&UקSkܒ )wC0-~ω!=u1O="p3'ò특m{Q$e.Z7R[. pf<(B.jtWے5ɕoNtJ2;6 n7 p'cxO+RhH"`5D x[Pa#W,٢S;mB'[UT \GNo]pՖ9RA@9z(í3#K'qnC,Bg442d,,H&aBBwsg3`ry_Jg/ùO]Zq{ɒTۏ_-)7_Ò=AV Tfe( Ogᗦq26KS~'a#$_[Hc#Mf'+i7?)!1AQaq @P?!禈lxfw!FD,y&Y֎SE|⨻˖CTd%gUN}uZ~ 1 e;uޖq8"OB8~\.vBn и!NRoy_A%-p)CU%[#'(F_ѰmND֮|AY8#Ɏ|fߤe&SP{¹p5l| KB~a7PkIu.8\ P 0yHEeziYej5$@MP.G!Z@GDT1"hZ3ۓY WI .Ʋt-q N +*SC#(lV/^&"ܵBJwѵ4 c5 R#T )So~KVڄ-K;!yko4zwە09xN-Dxȫ>&ʱ\c稷9RCkHRZ*eT`bj`캪 ["`@ &G6isʈ?J/f=mchR8'ovO[%/yԥ+xj@̀9X"~k+rW./I+)%1oY;T?Wո*Bl& AD\"$žFж2\scu 6 '4Mc8xz$_LQP>b.Fq4kTn5p.Uў][<hD]O"xʞٝ"8Q=270KG1!H+f4L(omL>܃ K2K\TrA6Q+˜^)HhFSUAv֕J)=%=kq02+`ᇗK.~;*iR|i~})6KX& T1oB+ya䲒i?o[:ja8iaaL?֢Jl^v x6ߋH®,E8wRB[`H2u8VOKOT ȝKa%mQ? *e:TunaёU\ȀS1K rDx! yrBѦR zPP*ôs֩3pB&te<7R*՟Ś x^d\oOfO ?J8,Th !u7]6ayj~c^!66;_\l|  88;ڷi͍-ؘ8E6. nWV.6ØQ>P#hwǤ.B?,w94 @LX. FN2y;A\t~XagvS P<QT|ǵsI Z" ܂~3HvJjNSqxwht8J|gNT˂Hcnѝ+rl)ЩP2kb;@b4₟C^ul4s |Me7M(>sk4`BqmݜۙѴt IU +!q@H4ha5aJm \!az ?3VʨK aj! Q9A c^*Ax$=K _SOf8+} S)Эx. lxSeF@&5D'Kt! !ȁGYݐ[ RoŵTk 9> Ù˿TĂ&X\)IQDc6GIJ^#+pvh}$* C])viz.gBF&-%h0&P;/U1);wiWh`q[A},KۆP<ӥK ~L;!f}0}?fy6܋$<;x#6i鋐[nLЛ?IFP.|.2Nqs>dsFV!p*-)~3x,X>??a8],5dtϤ-A3!|_D\Fۦ%4:Yo/GP"6E7K> ugE{Q$?L JgW,C &}[2@ ~AHF,ϩjƫ8"S[9Rc<,0q 9H{xs# Fҝ A/bzX6L(81E@h߬}$_QRtZOq. ˠ^:ϋР%H9zPl5nY60&^:"4QDhh yPe<ѽ+D,BVu(UR=D pFD~) $"\+SW}7 :S#5xV.9lk>0Ay=)r ڄY-ߖ1-S*ր&n}%1:d _γ%/ JSrlC7u7|8Hr>Nj@iK@ P&i&Y+GUs@NLf$<"p̴6[R]8)4#ea+0/P!xjU^2+@(!1AQaq0@?!'@ ghE8)V=ԏe1Ul}!PJn󓇽?1o3w 7UbX[U.KR$۹9THDY9kNU9ŚlF lW`%Up;5Ť iyOVA%BY?ӜI?X'ch?;z:fw 8s_n$~`=a?yՐdXLvtz̙ BNȑVSm9>\_or];Ǯ qY1^6/ICDXuw%.֠}dH,)?~5 㻞e<.Fl4{#ׄ92j. x*x?$H@-p҃CS&n+# tV§&Ђ%b N @ *ֲ<A a>(9te$n)'P҂AE5(H!KjZ4%3F@WR(s#4=!:PĘPBBtW)X@|tapzh@cG y-'< 9 *n F*`Ld{ѲQ^vU6Tj"k4=(k^0H6lDtZ?Y<-a:J%_lz^?mQIhx }\焖Hey *JU*aK?&sw^8蜫ap\(_չBfb982J >?,X M!9M$\ t^y6@  4bӕ,bP~QA?!pӖ@A.b%T]N'{3<)]>4p!l`{zfKN4{\L$/h ` $gX$?<7Kmy1VQ(50"S2˄R`?3bI/Eyg>*.eS !{^Wo<ܴ7mO'hv2x H +Kae`;1 qې;0Nsg;Aăi%@ʑ VrB $)m+ċ TU 36p0ZZQil6ް u5pe~>k fPT&6p^py($I$+g qL,\'X8i/@@貎8e.D ߜ:) ).#A4+4$G%O?ZPxUb/{Ma0i!IԊ5v.](ӳ cx( w471 ҉׮ 9͢^7HH$X#jBvjg]'$8QD&q3V?88mk1R 2B,Ƨ#y$ _W. EmOx0 M{߼󔕞g B]7[\SLW)FN X.x"~ hCFc XD`x^QXlZa_0 |FA +xiEZ{εi"X~2+X˷ /$D[;\H@FrDxhN)Q5Xs a3UkǰKB^8c Y$Y ^ǁbq< [w80QBY BL ^ vYNZN&#?.$W Wo# =o \$rfBD 6v`O6!.ӽA5\pl>pE=@k]dbsRbHjnpeWc A' _B*aD~JH IdbVh&~(Q%,Z/Fo_jRw,>( @M("dp@DHڳ'X0bK]TaRCjiaE "+tY t.J8*f>oH !ӎ 5δcdXFvk U2ZDt_v0YZ# r^R"$ )%u %*,8QFaE"R.j1ȑ8q ơ,nV`a g]e |!b27ϼqkḃq铸s!E{%1dLu p YIX3aT ;ŒH15pdHlU>b9¸^x{8,?1 ~1qȀ2q'0ĉF& , 4i < =<*d=4v#aJUI.CՉK:³:otwx"fcQAI*8!'!1AQaq @P?Ϩ|L/ \inYx$ %5pN"]#j:x0 & jB6e(? jzDowG(Vd!@R 8I!T}!TjXq_$ti P:B(Jlx ÝmhD\E6,͠@X} ~&= &VY ؁1Γ1QX]V?vHXU- SUpտP+:J!G1)"I,WA:|f1QUXW(@*Œ$!ͺhBmS%|C,0>f<]Ә4#@+];RcEa *p5O: *0:֨@ZP/X}4c @ s5댓@WG^!'0+KI ٨(JBrS=&O4%oAo8fC7!tro1) F]fS{/PUL2פ!M6Uң].9K4js(tX&]9V @i4j jBOvxek-q8 T QVC",k&vj9'TaC"2,|i4IQ`69՜/)D mGmFE$2YtCPq#> o» t TXI!(NtxP7 v!87?l cp@{^@\å57?%Xס Al$CۤSwD&Ina# ak Gq^㝎^Bx(PZ}Gi Ftq[^y"CpA"|DQ3+2ېvV$z}eb7XZ$n`i1@S|CMrs~u`FN.lO026/_g*iGo#6?ǔ n&iMN֮]]zJ/dy: i8xHUWFhi@`&QnjpiesM^XK4bc3gQpDaHe(dU O`Q +[U|K0 [;` Yخ@h=_[E(ՑiP Չ􍚞}3pBKV 2hxm@,:l= Z|E?Aш3;$J@C-A!e^]5c`l ,UAN( SI+X]mʵOS Q剉0H:uf2(Ӆꣳ8#yp[5#2 *CghSY$-uPF3eHYV;F=jUU# 4ȡ-lzf*,Zk }D@ZW"Zq0Z$Jpg =J4!J8I#^#q99™*e8EY՟#[j֖(o!?ϜSbOB pph N@ O,f)z"ɾv+M22\$xL9wg~֊ \D4A]A=d$XH-%dC<\v Fu XCäT[ teіZxX^s=FD |A=,࿁[NDt ŵ0г z ( 7࿛"ܜ8q_)bJO:RaQW^H47ۉ ^pɞb !}*p3`{ObJyV )D»kOS's& q )Z)"-;w8R{B ^)Lϵ$9ŸWg@^cXVOyBM#ȡ6z t)> _OH@"}3K_Kd`=,'bBF )9X,TAJhQA;ց :)JH<ͦ[.g41J?asFA}{ X_#ĵ*[69"On8첪n[LAdoNj5J':A& M".6q<Ʒ(ܓ nTa GZ@/E)hqWHdTC  p57"@U+qh/4VJ76e3am$ƈz U3}C"4Pćfz pkl#3 >(=\թVvݖn'UHtI1 L)_` +b FED>Fԋ1D;` ^E2HlQD K m%[ ph$[/A5hEKD\be2Hq__ P!.z$5,^*Z$X|v ay*eVi 1:c{T'O02*&DgZ>:g,R"Ɨ$H4QTd[U`$Zk8"L/J/1TFIiHX4,QEᔤ+jp(g Q5̉$@'/vz}C` BšBa rP!(DAXћ@X|m_I$` - Z+7=Da),͸H?P`PD5 dt?Q1mOj%[;y(+EEi8 a0WH{9FWS npX&vYUcCٕN+W&׮ PA<>`3 S"oئ\nW7ua\:r!I+߭u;fC6lSm+$(h;܌䂏w KG 8p2"z(*0-9`6!88UF13Dn҂j˵$_<GVaspk/ڷ)|5,Kdފɥ">qƠذѣ"!Ի-ByřTSG 0+v¨$G3#N?n>⢥Mxt`~p_ x"ZTNAIqE UOh_,``Thyoz#15}#tS+hbE4l-op a&?4|qeB-&|*EhO?Ig}7jE#xv z| T8Xк7RRD ǭ&RH/ws q a2DM:iz!fUg WϪih6#D1UQݑs@e/3<0sFIDjy -_$`i. ًTxUI =J LD_'2tYՍlQTBO#*+aF)iy'u \`Rp⟒`QjvHD}A֦!@YjW @+LQ&I314 Qk,\U)iYg }].Kw&6XbVx3" 44Rd< Wɂ25p[MB 8ElJ|_F*|Rl|(.?`=?{ @P-&)jzs)1a|PQ7=?_)}"AD.3q_ww(\gȾ ^$>ߨfڗoZ '҃@Qtݠ.7S4[1.`)tg-7HV *^/6T+m5;}4m:zXLj$߂R6g aCb+)^I J,P ^BՐ2KcЖU7ʃ 2#j <iC -W@Plinth-0.8.1/doc/images/a20-olinuxino-micro.jpg000066400000000000000000006277341266051671100212350ustar00rootroot00000000000000JFIFHHNEExifII*  (1 2i0SAMSUNGSM-G900HHHGIMP 2.8.142015:11:19 23:21:01"'(0220* >F N V^  f|bn(-0100g /2 2015:11:19 21:11:022015:11:19 21:11:024ddd dd0100  Z@PASCIIF _ &;>27 p(2[auC|%_NN$F@@ @@@@!u#w#y#{####$X X K $ $$$oodKUE \;Cfwp!\HN~@L?d[4+Er@vG 0  $l\w54x&~E$I\wN)IOW\(.\HdKmp7_HL6)v~M,?^f+pAig=k!>B!V0H0Bc=u"8u`'\t5^]OB4wA%P;&By]AbBrI.[;>y;hBsC5Hm1Z<4PpK U6Ao\ VBDqeV#0BqZnJ(U8+ d!@JKJKZ! bg<kzKʠmE:y[ܟ!"""""""w""!"""""""!"""""" """!""  """"w"  ""1""w"  """1"!""  """" ""1"!""" """""""""!"!"""""""""!""w"""""""""w""""""""!""""""":`@ɉh~cAKX%k}OOOOpLFbZbZzKzKmL! :`@ɉh~cAKX%0P3a! ">!> %!!@# 7 [O6Ov!$x')+/v24R7 9[:;<=@7 [O6Ov!$x')+/v24R7 9[:;<=@7 [O6Ov!$x')+/v24R7 9[:;<=@m;[.8 ! h F%@2q-l(\`dhlptx|:Pvw??콪콪H 5274 2014/03/12 09:35:57 ~X`VG2( F16LLGB00SM F16LLHC04SM  00(0HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222m" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?tyK6,p=ԕ +nqYAǡ` H\"%Fօt`j@p1?/㋈L3I?!9Vb$Fx^@,ɸP3sҟk,JL\nكz@"NA:$s{}NTm"(t1` sY4dž\M=z 7-ms%S^7k)4Ǿn 5(,Gŋ'po&IT1ք`:3H%cGL_N|-A)Ǿu+$@~|ǧʫ1L^ˌcQ`g<%Cl?|궰lq@Fv2U%[$gS$gT)*9CJ 6~" ٿ˜%[ǮD9B!=Z1<OG?QMӒԠu ?pt>$MJ7*@Uݫ|3Xh^l[$z]&{a<0CFl~c⸕w'ec٩MHJˮO_h|-#9ފYj̚% X>_j|> ~1UN1۷^H8n1m5{3~vc 5v+ xKU-搒hES$* g`AV?ҧȥ߾q?ctTKRʹ`5NMbGey"bN;s]֙ ǘ?b~VW=0xcָOn:P$'+01Pܺ+Q{uۏ\Gma\u^"OJɊ ƪnA\v4ϊ-{ٳ(+c+ 90N~̣}Jp@Lm16wsמvOV\IKv|5yg/c͕Nʡ\Klu'/E ,F *t~q [Kcmgm$ŹKL98={JcDm0-P%C#G^~Ͻjg\\)qZiӡS!|ؙc~97\`cޤN ?bG$9$ӜK5pA?(^x(fRy$ZҤ# GefuO+Q.UP3/[`;eqCֱHړWI뻑S\Bw$ zgvB"+ӕ)M={$άh'=º\׏xsPHY3(,g#]aEG$tծe(MmN`8?TμspxdWV@rNUqϱbG4̒n(lQ *#8W|E á;8##==+᥺"T,Xl:?Oz~)G{m`{4"%PnGNry +OUtQ'_ o^zsMܥĠcRvuܖ`r6Yj)+SWSW^XNS4"i<5zzD#$99cL}f6?i7V?#'9GڹWqa3 |M6BVWK4JZUvOnJ;G*I>Iڡ;U59'dK AYscߡ {؊N^FХ``x5I2hϲ,PXYݱ{Vޕų.>,i_gR6/K:׺F_N ޫմsݮɈ|)?g,J v uN*L^b!fr&HJ̻In6$k?ݚ*"O+@a8Hˎ~=2.h܋Hn[ssZd+@$#3{FlLbw9@\UVљ)CTt>*U-Ƈ.du_=kk< G.Em,y's^Q}eQE" GyEOBF=DHU]wTdQ;ȒGGgʟ ;ĭ"lr9_JiHמ|k̶!L2 sHu∢`c[Զ1Xi]}2RGiBJ,OGxrM^n/ر?J䯚;{hKؙ< XaONJ۲k+˃o֮:6xOO4HJ24[25Nosur}̩N@8>ϙ;GL>0 ál+eisԓׯ\&g5ϡa׏Eqm-9E:ώr '߷E$0Z\_ˌq'~*;x.5+ uƤ먥ԋ4 u8V v F}z{TWBo66 iN/,/}ōߟA^yCЬpY_hixr,a0҉(p? w7p,q k1)& b{vVpO~*#NSåc%Yw Ȥg?_8G>fA=ksv8zf@\|tߵSI8Jk#P$quWQ$w#O-KxUV6u"FSҳmuicY&,;"31[ԊgRNSico3,0D3i$S^A=:o~ԑ30W*I{˨yNfZliR c*1 ~>^akRv07!N>U{W,J꼶pH{qG]%Lnt{8ԩUEq4YDbUk>u*^GK/Q?mFL̹YO1;tz@NG?ҏ/ܬѡ8Q=O 3!]9צs8嵌Daf2F|sc񟋵?hiuH`'8n ֥Lwf4m)m~0~n+/I[R"@ ׯ^}?X(~nqZΌ>c< Sb5 "?{/ q=9V_*k6Y B?:[]E+$ѱtbu'$5<΅^fZ76p"oLi亳2Ou u<1?rź9P۲øv*_jNe\Yu/-iS;#Fbd}ʥeAr9\~5}qB 0:ËVd[u\)uDm@Վ"9$TgUT?kEs, E_&^YoqK Djb(_vOY]ܘVO2N>AfzB nym63>?ew͒i0/Xǧ&!i{@N{v|a{(0j۽l:vJa5y٥^k_=;2e|]RG\SJX$NQ u*Z$UXRS?(㚷h:Kk!J9GA# wZƵ֧%L 7V5MKMl,Q"ħF^ך߰/5.V㸸,g[9*zmXCXL?֣.|?۽ˈ;3zQ9vI 9xf 6HU89[-7w'~"a 6l0cmJw*8&[xLC)oks##>ŐDM$0AW*9a`7J cڀHgCUƙwgt jc4z[՚;y<շ2`HaAOA^ioe ;:񮢊͡ZP<gŇY0$Hi=~ ^鬭a}Vq_+i6@=9}E>fG*>o᷍ /6'q57+rN9:5Us0G|c(/>RpOPq.Qw`~?}'E.`>k῍c "n;ncl}j΃w互<>}KE>ax$To -md>C7ò$d# _NG0Xu}3P@I{ DO+<%c5x@N&KF(%{ noJg 5312 2988 SAMSUNG SM-G900H Bottom-right 72 72 Inch G900HXXU1ANG3 2015:11:19 21:11:02 Centered 512 288 JPEG compression Bottom-right 72 72 Inch 1/50 sec. f/2.2 Normal program 40 Exif Version 2.2 2015:11:19 21:11:02 2015:11:19 21:11:02 5.64 EV (1/49 sec.) 2.27 EV (f/2.2) 3.90 EV (51.15 cd/m^2) 0.00 EV 2.27 EV (f/2.2) Center-weighted average 4.8 mm 98 bytes undefined data FlashPix Version 1.0 sRGB 5312 2988 Auto exposure Auto white balance 31 Standard F16LLGB00SM F16LLHC04SM CCg!   hGuMȼSvÁtKR*i8PP!9<hebSH* ï,<>Θ+Qnۛo)Q'>-5ƲRbQ׻/x9n-J}OYtgVV@r $$?#5ßt1dR/&}m^dBIzTqauM}b΢m]O}и|m<>yKSvi͔yIK c 5 !'Jʬhu >)ʉ^gLl>EcHm!?c[vz{\*G "SAc.K'U 2LNEvO{)L8M!SWwǴ;dtݽۨ#JBurq!ٶ\D^oGIcy*Z)JX:t\aDF(h$YZb,qWk2 el藭m_7C>:u5M4}{%4qbHt(:G톓?g%* l_RZ3Tƛg sY' aw P(IJ+>b)nҞѷ̳flirag^oRpJ+FLCr@~k-we쓭8: fdf6RV﹬fWfvO|ګѽc&|%4U>R|5e֚涋Y"LzLrܝiG:{w؞Kdw;AgKR|vw5CߘWK- gltm\5q:%N<Ucf'}k3oJϗ 5]v-}/{2 :їx)U߇ͼHJ/{0nzꉛ N:&->{74/b*ntcRsvv SeV6MJuGԊ!̶Gk ܵIҥuS BPSHb5HvijwZpD] 7]BgEgGvX-b))DX%dv6漭c6{ ̶^}e?zH<1MG/`IN/Qy[#7?Տ\UMCђ:Sg-VĤk}UhmiG WPr2c,6Y%rX2P|MB1;WryY6(4ao'݋=WfaEKyEX}`G/8ͤXjịX%uNn}imXG4Z|cqMh&?k/k ]kڐj)lQR,k.yiaʦ dh-&Ŷ|N|;c ,pQ]W9SuFu*2~oyɸ1rQ7^loKk{F<جxmS3EpmWzG>c5$Ff~[ ZSޙ]7WCz߄M&yF ]Cw&cZkt䊾 7u !frde:&>؀PV>Cweҿ(hvhsgxg*YX u[νE>]7\6=oeF0o|B}_taͯ {i-oqlok~ul#KqG5D{ کx7)Sށ_A?򛼦w^mtƯ7ߋŤk*;؏Pz{Nw>P"ޛ-Un\o01mٗMc/{ ˸Dw5ԪQ0gBX9Κھ?Hcj ԯw5ǐ\ǀ|3} 9Gfet,@M 3zkqp$_V=gm+NZr4ὙrmA޾H73w*(QQ1or-4qZ0ȥU7,&e\ z& k>뻉lm7.k{${h=eƀr܀6,iGϔeBvcơDMNm ~WvFDh5{^2NO7,4Txlm^nh_دlm'6½;zV D qRDQ:\>Xkb&9wRe2 |ܒg&wkxẆ]=NCrfG+SUoS&%@h8Zɹr4#ݼKWg.W<$iðdzK-jKм*fh_eu=y_X"ŧ5zCw1̬08@/cyEΤ^Ok!9fykƟGԾ<eݏDD A[wH+&{Nܑ0puJ R(ލ巣㭘FoIgmS;͛A0q15墝:퇍_̷at4 |u<'"KPzӹ 9]XQ77ۏ؍Mgl%3D,lurY&A#F*ۏs74o5eF_[TE*aIzZr&7xz}$W7ʾRҊTV}egb2c[./FW,lv-V9[}ͯ?;i>]UHX+ nQuL# 8eMoW*͛4u9gek"I:FN]x%5^m_Ra{# _O~?_VI,Gn)tQiL"?O<>3'E}..Uz}'ڮV,8UVL3\KI Zƍ|h]%4ѡxo .'cuw3t%|sdM'RzWOͫIg?KD"E1%۩kZʒ#w :9EԔr^ ' eNh|Q5Ӄ6~PXG¸5So@K/ ѩ_2g-t}qM9ю̰\:jÇܺS|^ DͷɎ6&Ĭh7] ҉*qGRNZ55K>Bin .#qʍjzxӸ X2+M zRbtoq{ҒʏDR2vai]oG;ݰtwN&f3XHw8+,bE`X=scfIhI?daDIvd+R s< ϝ&X!΅4TrN38 !0"#$%&56'1A234B`p);gAܝUlUYP;؞ݚk)6qDK@`9{g-S9>r :cUl?V/>V}}ށ58~Nh{u˴jipgי]K}6wCbϛP8oڸjϤQF|N%Ey IꋱzmӖb`.}2`E7A%4+GI^ S[4ਆ;7{r([6UT[Rȱ$ּg X]7IPQESKUY%S[kί9d(]vCj(y PD jf]qW\l4 WBE۠5y8ׄxɉ5 *Nkg FQVQ$G.Y< aǫYvY(DXϩw!v okr%reA#k%aU7NNa}|k$p+ƌm)4 eAB :/YX"XD3yQ<ǐCqY |rMG*њ]LnblpXޖa_r=#Чbq8g}{$yLb-䆵kc\xݛ7Y+W$hKkHk5Y̊3)Bmsf K.t+JN\*rJH`䤫=fo20<8{Gˎy1ν){.*K ~A6=ycˉ * Gx<"7e\CZIN|'q`w-!,U & *ƶ4l%LX{bm+c9j K Q;FyLxP\0\|~oK_JŋNW)٘SN Nfq &Q&a!,1Wv6 -t` ۲3) `ݧEvFPPr5m7R Krug7dtKŋp,—wUfiMB<ÿ2 )SʫA{~ \әxsNk_[i-__bb4:. ׻#]57 ol}8 7eE֑;ƻO,u-@fU.)kȵgm,b^dFFƁbMv@Uz:xM5 c~A+/>FvyVa Sh#etZCm >)dogD-@9 rU}ZM!l:̤aU"}d>dv+^ P[Sc\GIgϝ<9 8>ξ<pDa1]M]X2 2`L=E+` /jK#h0Q+0?V&%/FXex6uBlf?db`m` yqw4"(I+-v] vȷDט%4ޫ*0m2ȫrpN(Bu.Q諟 [}RFʣ 9X@Nw#SkkPxSN)xhPkKzRXߟ5&92xx!Jm=0 /JIY8-> Je@ӼΓW:z k#Ϙ`,ʙ$ NFF;x:{^Ff~JEUcԢlTI4wu՗ӣX`S,t{խe%c;lL"mnKv:oT.kK-i* =9'usp$V7_jZI]rq*Oq5?`j[=@Tv:E۳+Udt E=uY$R@FG.`P` !ɒ__!'+$Eolcq zy.Jetn,6}uME+#X d$50ik_/ J-/^TP)]J 3"vu]Qu?k=}Y; `m ҠifN1Koև@~2Ckecm|id]) 袇 n ItĂɡ2LhNm;lyukm,!>Lqd+<8HvLI3ڃd(smqbɧϿ1ڭوK{n3k-xvqSV O\uƊlg1]{a"x6 l==}7„L>țo|9cnNƄtCFoBi"fdʹY}q0jܭio\5[F;#^jWq-Q*.AN3l! 6v5Y6hMm70sG(KxcɃQ53E| J^/!r:N%CN=%j{ɯǮmsQ/ٽ(hɑAZۍ\V cve13Ce2! 1~~Z ya,tunγ2r"7 iHnW+1km o}&a!c'>}¡91۫𯽯,DkuWbR ]!dv]Ӛ)7ţM;]@`.vhR|=%EzOsqy$zk`/b&B/ >YE}ٍFo6iVeY ]BóuL+9$v|@v}s0i=W/ES2 E" .SdWRmR:rNܭ1~7TYRՀUfkf~]c\kypmBߐxp"2VG^:w5}׳#Z;u)Ѱm;RP۫h(sqLS9W:Z1tLrJ@ϒ%-,J)hqkɧ!>5$5)7*l"&1ihI\=H)a3>Dki* aOYb Eޕ͏ ̚5]z^ ']Y:lV_H!" jY\1!LDmcFq؝@=!5'vx;lv8^c[anL5v Ē-9l(v% }i+WȀHS #RvgFj g%ߏ~y"vpwEJ)n3[MZm1UVydT(u?hTI2 %$\>%7qWj\sru}5bh! #e5q=궩N[BFlqHGl0{]0G=K]~c,>_+ :"wU n?zFCzsW&f+-4`1x6"(vȇXEQ"+͝wbL^9ՕdLH<}4o3)}r}B}kSo?oDԞmՑq %^>ߧ(feMonY|0B XEп8L(Hj#3P'dӖ@eӔӂ:&ju^ebX)2龜3 ii3BuƿADLݏ|'C,*]hD "y;zI; Iw.ۖw)aLʆ*v Ë?lp[k lPlKRIwEE[_7aV):{;h Md<D@d]5Z\;-Lh{pޟ }?R%³%ݖvy[+kn,c6Zhɼ7ק8M6{-]29'(]uKLI4ËJ%j)ш٘+6~A^jWco"c<|-vuI[S ܽ[Yr3XvfTߴ_2]^֝FO>8L͞oǏ3ծnzL<{7DUI `;±ob䏙k>&oW|kfI7ϝ~M֬4!B,,!cLسc/~nmu4l&v9%k6I+(w+RN0A<>/ya@؏|NI>QNx^w94!`SI7N4|x}JlD 9&I6nHmt<˱U8 Iچdaے'ׇP'go0咰$=8; X 0jFV%h 9heկ@y4b6&ʩ٬MTnҠeKga^9g/6 \ɡF_y?KINUm2boA%J2͔^}G*9\ +Bֽq5fV80q5'D04ЄF8I"cQ!\i뵸mV95KƢhX([Y@rDEiNL#A$R |E5A1_U|ҧzXT*ߘl"ӟO\6 쳆g"HK?zo2(nhS@dO ]S9 (L`H\M&r#޿Baݛxjtrv]Da$av6ROu#s2YmsTZen_yd-c`I) K8=t,9` *tdw4Ա4l!Ţ;Gaŧ˨͍.df}vVX8aRMʼnn0VNFO1#zI?X3Ϥ:p$NƵZͭVe6ؤX`,=Kӛo lmxmCGX2En+|o~RO6K. 퓆A-]Nsk,RYؒj\K$$p-B ?lǬ4zF[lV%|M[a(볭TiܥFBl0zwʝǬ}2<L8h&PUEkan4@U[t"lWcUϛou;co|}L11laR@K$&2_r؛A`\E|CdϏ\gY`~aT˕%nQ"SQD5m9M!M~ȮfHvgikǮâ]DHqԵ-Άku-K.x.jWF#hMC<ѲalGjZ[t"5d\ȪY)B[(Fp>7p*rdng]u|l,x7v.yTern㲬xBy|B>P(|0M, 6Iu6mZm&MWZ">XAAe9ͫu:W*m bNU:S6BLSP'XSx XX㚓=IsA:dČ oGwdv(挑#`){xK`^,[zG4Jm5vˬkkHvb_uԖ+RפnÛ3Wq.ߋIo;!/R[;}@7$֕ Kޗ;|{1r50ÑmLdig6\rD2w0o;Uz^HMFvd$}os`OKy}+d;:࿂vDm/J7&YLKv @a ǰ)nfS8gqs7h@vM XJj.0gXҜZq]}mFjkW)#yηĚ?<6IvlkɅ|ISG1<\-V ђ3%Po);b]1쥊Q䯺ǘ\4_ XU/t FB,:ysdOXe>ܭ<|XAX¬vVr^; |OHbdE#0~zc\<I|yq.s1-OBlE׽kGդy6mUM}w7.wgl:͋ 4B I Ɛo.uu9o"ɐ@{"ϡ̦ z F*Vu0P~}|}f0z˝zXQw?/#IEuiJ1}iF:q6jSZ|b=sˆlC8!z7BLVZia(Y4<Ɛ7Tщ~Fpt}4t;U5uVP=jC2ʵ6i lXQkR~;mI rr_|%b +vMMݔRުo]^aՁ7ؐ wWʤ/a SіB:>V X,#@ׯ ?[}eg3`%J 'iP NMɢX;3i;'.5t@LDI-BX 1* 8Dkf$ T !51=C = doh$،_׮rzyҴirsTUHd8u͈m5 K$Z 5Xa@K4%>xj] }f=J,c\*5`OM|xK{6J*fI(sy[8'5wwn? * dp#H?K* yS9ziWl ml5 wi%fXʥ@@zbzsQ0ƛeƁfX+|(3Hx.}7_o pq/3̀NީVae$ߧL 4x䲚Em\~:@ސW&Bxq뷳U17l݋تmG-OjcmNkn[c_eT_cCQqP ,<+,ip51xʥ9[0?0F(PNQHX f=~蓘PEdٷm;Z'p@?"HnګP7_[hɗegoD $qE^~Ngq]\ꇐTZ6n٬l1>/g?^BZ-;}yINiU ڧoL!Yq.X19|Geb7Ei{mM =/I=!HgVEmؓ6еwhu=kS#Om$L[uK?'ޭێZZ{rvXz]"[(#[LU-4LǞ@bN[?F$3 &nÊ5Bc9緗^{yy`,B4_@Kej'K|SGi,Éz+Vm-6ƯR SA5jZ-&QҋQES{cۿ}Ƽ}&"-j=!L6cG 8G]U_;E67UAS@i@)ݎvWKiVP_vGoOC:O1=u'Uzá  |MʪLb_ze($s IJ~qnMj8F>(`"淸I: o{e<> zZ"916t'SsOUWS8%w:>ͻЬm2 [>aѓ FkG'ִ +qm:{yUc:c2`&22&gW1xI^,Z t$[}v;;T('5vR9NtFeb.GubЉibR);kzkhȆrL`OPzkTb =qJt&˳'U{Ovc\K9JoeۗmwTuU3)d _c}G0[;;aSY#_"LHWJI̹aky@%)m븶ȑ5F\ QC`i9 7Ϋ_P7(b Q40 ԫSܑϖ+?(rm;سlIH2B/%"zBh- $IaN-~^Bg{?!RMlх{)VIT]u d*j‚S \sJ5JYD'C)Ru렼c:"/NM$%՝@`I/') 4TShZMAO'Hµ%G&nfUcT R{Il7]#/@-}M`3"ëlܰ.yI]#|2庉D`LI䬸@A:{z}!22tةΟjHk'Pa{@Dԫ%4IP~<6Vak=/:ZhjmGwqRhMnl(uWͨiLNne06z:ĆM(s6n!y;ws)HA?MaM~2&摐{T~$MTϑCv=-vaƊMFn%)5 It*C/|<Qy6e9ƈ6KYU*I;4cR]lStL->|=Co2RvvmhSt.M3_طhNΩߔR[ <>rYNlA:]N$0jF U Oj\f_ cRexUFvА-}{ IOqrd*-8MMwNR $F~kB4wtTL€׬.ƘK?5KdC2T)l|VU9Fm/ |,[*:#Q[V8!YP`z\^HÏ.)1ZbG'U:I$kАvΦ93 (J0 \[3@<̜n[yol: BNʶ)._y-'(侶*qz{{JSӒ׆$ִe9F?%TA@tΟ\ a? J"aT# QiO̲Lv=)x*$q #X]2^wv~]L7071]?ߞl7}bU̯nìMժ5iIL!C٥㴺|2JLt!Vlr3N^hv+?!K3-*Ua5rb;V4FX洛7Rrlw 8*]Qhn/iJaS1g v-͌MJ_HrehH68]U)qEhr V@M6)Nw\ czy+n6VUgFz§'l>ʝiޝ<"r^[fi(uJ)M/X GN.MmTqd#y/{kaR^IGh%6ewgi hRn*,?iЛx$S *̾%{*+HSNfhB̞7Eq&suU/L8󎹙N,-8MDV%L˚^bU> c)oCF{xxJPm8RJe@(|?ٰ1&a/bJIR h5ʆp/l%Vz23,X[-č%;EJ`.Ԫ۟$Mb4(E$UhSi 27?O'Q%$i KKUPu=-׬pCeܙ fDBUa4pݯa[5ָ0EmXv_.;:Zu_>8ciCE)NZ%~eb/n'񱆻S&zx6nZXN8'gi.%*Vi?e!c0B{YJxNMIQ*Nvqʒ݈:#.` /4E^u<#|UMQy$7<TҚg|bµBR5UV$_(ZK9-/ 12IpT.>Oie#*B v6D?oa XVfOYr_>%*WCr}$Q_1a-}-tJmZP0A;NÒ.X[ UCsƗP6)(0̌ijž|0֣Յe+H zJj\^b@*vPҔ}xPbPS{t&oDUYq t /RGerMQ`$_I/??RKJ߿^cTRn9yn9ma>&eISZ:~(6jXf mRQꨴ[qvq.oCR[_bԕ&[o#ox'N#:13:E_&K%5a<5j~j_R{0Z|ʑ>N(+럩0Z}JCh>f:3Y|5MN]IO*Y%S*HqEA喿i?2l3*H 0}as:}Ta2>I%}%'iM嵶KumogwUe-*gMgX yجN$īa%Iq@^)Y7>%Hm4~M$Wd6AL`*BmOKr6P5\Kh6:F.:Qe!hK%(bƦE1J.ٚ[_.au{b~UV]9[D776/i :|"N[)6~QI%9TS[uF5!"k(yy,[on⿅mʒS`0!&W-AG.uzo1~zk*?T3rl5"Dsm4 pۨZ욥~HyN ٲe+)[ˬvɂf\H˯L ?Yi6Ҙ0s HL,F%~ķ ԏ1`=JnJRVn=?vo# b9a#uZ[ys4rma D$AgO= (x.u 9V~n^ncצV!<3u+1O&}ssdW,ڸ_^_gULnJ&׺s#ke 8'*Uy{Þ*DS}*U)ZLs)gCATG{T: NQr}vPqWiyR9.R\Õ@܄hs˫?ٿj]U+rKfe7P][V\ib:jFT6Fl~sb%A&H~Tč J7Ga=Jq]m̏ҫׯqm-YwDvԌ|C9(&ֵt_'HfOUeg Oനڔm(K7PPݏo:,/$Hw%/}-=O'1;QbR^WP,mk)AQC=:Meg]GEtߔoE1W6A;*Ra#rmT&1gI *kH7Y{O%2̵gW x#UORH'B.RMɵ* R@3Fڨՙ>×sixF=1NRЙto0pD 2Qe䧐҃ FqJ##.A>֥f9SQ^P:\41ESn3hJ"e t} S( m|I:&Ǻ ;(@R{UVX"Kc.T졦^QghuJݢ6,[$6MSnqe򔍢fnMP=n|bWfU9ympb_~MV2 f ([n|CԆi"Nx,m׿\D~?>İX63y[M} eɖTsٷm*HBsra@J6 >"0>]uBʤ奅)؝ii)JJtIWCc# vLO(KK+ҕWCoڶ]-:;DʹDW =7*KU2iU.Z5Qi%K[%20!'GN+TD+Iq,Y 5Ldm,ȻOI6CyE_ vF/dj*f1%V m44vÎ:IC0aatŮ! *m~蕝b]ri:E[NyM:#R5$#Xg䗞2#%*'-aK'q-? 1~PsYJzV!7)BGU)cezfr.6͖؃Ob7u$ y4"uP/ҍ4g9{fۄN` eU&ÅgC)UkműbF4ra#HQ岏?{64siS~WgX]ʫ-|vu5;K- U:QS̖$>kmҘDK)QyA{CZM Zi󊺍(x}G} zO(O Z愲EOELaK% ) ДbE7uj ;YžLBˀ(X ZheFm YqT[l,Kj}=j}VÅi&$L\2nd ̩tGph|-}m,P V@IGa3s<5R="1%a3 I2uO:DNRSvb/_U\&abMCbw7ZJ{4 yEþ,[9BM1z*'i_Uc҅&)B}_(5}В/{.QKj(S2UN(:EXeFy&E6жRJIE纹=/$%x휥;MDag'M,TFbčk%칩<xe@sRt:^|~aI'̢NPIɆJ!7$?W/.]:JE̦}j]Ba( X9Z v{Wa&ҋ)iu͙*Qqxc0Pu'$oNDTME~"VIL*C*N)qm2L@awZh΃Uu(^k4Nۮl|NQ+ӳe埗uI :D$XӢ?j1.HRԻ|WoTNnHvYSNr6]}QM0|F`2/Tjߨ?kM]qhxfzr+Uson0o08IB N78`.:񚗷;T?7W/W_:McEeR9E86@2aH"[bU)Y-eouJ!@̧i?[X,K+*i2~1f4$SB%I^EGtw?e\miL%u4ͷGz$ѻ<{RBPWN} [JY|'lA ohSB!},y~q/xm)TmynR|`Z)\Gw`EQ-5Cz3Uij/*jI719qjJ0򃭺T2\JRRF[X5&ۛD^:JA6:N98F-l/T#k߯)=Pg<<'boo5ygdoamHJEˤD^0H"`tnaْ[ዃN魼#i R%˥mf[ h@J-M=g J?r6tBHpgJ.R^"= bQR<B~@tW/$*ў*JWbbewxqҢ8B*!}d[BzwTHﱿgQS⭮Ovb]M=Ͳtmuĸ]smbWtM<~>{8A% |^pFR v @(qįɺ\ItEL]V]3I`io~C ҷ@@N6ƻk~C/0G?­q0\̕mp^?iZQjaoc\ֶEgR 3p/qN)<`DU9aMhFW]GhrT%ưw{{] -2+^fdV=s 8uПѲm9הa_5]) __BMpXݐc"g$Uc6P~rܻo)-22X'3 ^qBB%yfyqKה >?"Q0Ө4x3C[Y^U0iN).')ؕ!YRuo|oԻAylvk*ݚNR(iQ`RTt͟ O(Ssʛe.QI7e3IRg?I 6bGx?bSN.vZ:ivWNVCyJ ,nhY56Np'A{_B,\"]Cqٕ+ Vޙe}Dj{ԝuE̳mtؕe:l^:C8~?M[hX%Y+HO+n>XƕgU2Ufe넩zd ELH{M,]śc@L`[@~x4]GAq\lwEIՠ\FJ\pg4qrA ;$PӃ"Ҙʜ _=6įHK {"^u5%)ZakG=S};%!,[WeIUR]ʠϓRN(pt߮=bk*ɇ[mJuO)iN(쳚ےH$&ɡgYBiR7Y,yrsLƒ&M2%HjKZ-I9|  ;L}TèBјEmnTFE/Д , 6)R('66^`gIwlU];GkIaI >B0|jiGdAV:t;n,uWaW)VpE S`\@[- llMSlYNd+\͚*]4&1ޓf8Q7U#֊D!pu;&ex$LTC{ afos1cN>9^RO}#_"G01y̽CYo}kzv~a!mO0n$}60-X-aJoCbh/$-T2뫁!@Z1g=2ay3imnlKLjqk]WUKRelr6M|38)yrۑ:d?vEJQ̫ m^:Lvf[Lj`FnmU1+8wͰr"S$"_6cjҒmKsYd$ǬM.æ(+Ґ,L˚{xjm`#vMUWe*(O(J_8:߸Ey \J!k:~h: Ɋ9'5&lQc<@mN*zÔqx֎)yDA`[^~IL)x^9}<%<4A=t5KJ]ԜVw4VWB,ySpk^tIST4¹P˧o-1hoR)Aw:{Fؽ4AfQmk9/#Jn܉sa$YcPosF/u'+ulon02I GfK%?Fru:ø龾Q~{0e2`Ytڰ 'K{]EWR Cm$)ߘssX-*7fQQQO͢L(Ho< e^%Im ~P'v2(+*Sjz ,0Dm}{5GQ21F\Fj[ R#V!cFMs+w w@[(xYzʕ>lVmʼ:QmƦ*-aN3<S!G TwQFOf!ו(ք"Li(p6E {&4ާϭ#Ku;oؕs3_L2h'oX{<nN#!:wim5Z)sl$p] QRR92rcTbsSliHK͒Moe[M}G TMFU8F HפX×EC6SW Eϸ퀫XjQo"aHS|%}.AF\w.m~RAu^P:vqYx>ù:{ʥ nWpǤ),+}|o al|dPN8NY5V$iuHĽaTiiq9~½]# si*.ԝo}LIv}ڋ)y͉P͡?0_i)VyJӡ@$_hv1Nq..H fB]bKJ*e3;c,nGvCMs[e=MBu])ݵa+ 42eWOx"[b.rU˹Y*qL*ÿlB) c%25,CN*E{QGb CI}PTYknVbǔ_^$g݌Ηs69n WJm6"m؝ |(D˲KKU`m7f4Z-']AQ̔`tЈ sr J:lU=a&97`+Kֹ;d0]9Ԣ[b7P]|wo}.)6sh@!?-Ey^QEj۪?JǙm6А"k[#_V4 ư0ARay!K)hb%-;m&DvpXAJUb:J_Jdt,lhMʫB q@U?ŔZ3>'}0-#ᚭ/V/Vb])bYfW<9Kqs/ߌuk_o}iRgq_[j.w2Q[`JMXo˨*wqj>"u'׾"@+9rN:JVq5`t;#IeOo"@BE,ma UjJvJm,J/BN[L3Yq6R@h#:*U*`2h(e￶1mq)%ǬI̯RRpMP~hEfc0u% % ebu(*fup i'B,s%D펩Cr2%ĭa,7c RR{tLJ)onM2Uk!dPqIn}CU:P/e_CaSJMo&%vclLqI ֌ 31/ ^U^yJ..uCx#1Z BCn5k}v{=9Ժ{U!D "k7?xLvc :\ZۄN08(qǂ#LY{qeiK r2v80-0$]zxaj˩5)PI[e*ؤJq,e:0o 1X$hjPtP巾;4mA F)OqaNANQ R,BToڎsE^֋:6w Riƴpz}kGgC:([LL(fP:5Io#`.x5oI 2脂3'1 Zi=38$O'x<=,'Sc W,JW[isx)*ʥDߣRHl=0q˝a,3PMy8(ݘǨ;5w\Cm RvY)/)'HHH"@@- P./ٸqEF%1}WH7"y#}#| q-iIՒk/ tc^lRob&l˨+{4Z Xl{Dy3En"W[qЅjA[i:tXZR}3;* ͭIu ΠY>6-:ya4eD}ֆH3>߼_J>7MR?/ #HL`6ݍAB6r j-(0 ]QwfW;;쾷SAiH@"LU]s 'jVMuvx_'ٙJgnҒ/hȤ{i(")zo[eq4di ';k(n 6!%;>~&ņ_4:C@O?beLaءHNzѤ\ p޸oYoB_G)BkGj̛Lұl1᯿MҬqE`⨺A-@0⅝PVFu\3r:54 Ozt@Jmc!k\TG=Ͳ& ,FHo-wY)"=E>SbD2ݏ: q@y'W9lm:̻. eҏnlߧrv!UkV )Yڧ\qvbM=oHtAUev*p\T(X11%9(E߱#uBAdfbFWƉE3 ll3Ľ*N\ᑹIjbzm;upv\F0ꄱ]tHW"5Զ&`F6C=uMkK֛!ݏ~ގ4P?#2e0_kjxe|u}CU-l{ Fˌ 䡩o TF3k5m~I`a?/h<פ͕}`s*9}ʞ8/&,SdCU&1IR[?};%7ѪJ'660߫]e%<ζdJ2`LHY,GkV?پS~UCoguUEH$)elrh&5.dWV6,IFq25jI|JyecM$M6-Iݪ8Y,wq+|eˢqa,6UH|4oTa6l{?E"ð9fzM (v[{KTU.<*S7U٣(n\8yY8BU 4 U;f[bc<EcMhܰC kfg)bs'Wq>G,}Ŗ,>XClrkCFX;sƵ5(wʲtQQua1ָch^ .<6h~󸌻N,asoKp]ߪވ|U3b{bȸʧa1lb߸~\n#~˟J 4 ua2hUBL =0,8L]^_cc^k-{0#WeiDhGKъTN\dozr)෪` =TCehvk`.X;HГީrlJ `Iڹi"`j^! Z}&BeӒn5/gb= ҋַ͊Nsښ.@=Qef`=,;`+g7l:obl[`#=CWJ _]Vnkw(d:oQEEqJ?SVSN.;ʎGx'ݽk⠬Q l/SM،:=HKJ(%2wdS9ڃkxYu .6&,S#rCƞ;Uukx؋\];Pe\Єs.pww@v*"E,xUAK-Us '[p~t 2[E$kvr<7?QuOg.nDÕ/7Pbvs%е.!l 4@|#͕[ WJ.0Up0nrtgW|Дu4n{mseGF(NjD=oEI,ݷx.i 'W*YIRW16,/9ˏ2=eL;zQaR4U1P6n{g.a:XRuF*C=[*Cx][)W[>'6yy+x%%+/hf_ Lp4SOQS6,;mn.I~>-xL1vUHc 짃Ѥ].c  = xobSZ]yoԸ5 1EŶTS*:;k|U5n;6ߩM ;cn[?ϱaOg0*6RU߸ɢ_I5[,39بetXf8|Pčul-Y: 0Z>(Cogdl9͗ۢƋi&1`:ٮ#,(DJp&3ꦓ#/W5ll7pO}6y1B7c2#?*Qp*FuU#3JclV yu:¥2rp,ASEors9 op!:Fa3.֗{|RoC&>%]7m,}w? ،K^KlfDܱjwax1Q-G䥚^.f0j<>JXK$p٠iߧR^r'8[QiņZ?M|?Teʞ&l=GYCڹa/kBEJay{T1*ʆ6\PɇBӲe2T1_~y#G%q'^7T8dkۮU]\ўsIuQ=bMùtrldnYs=Z+)XH vMc}ETp9||>lCU}r*IɢR'*h`.nB;V #6 }Tճ;̍b=%;F>@|Zw^hWH;n<{ rw>VG=1fǽtzvCV9Z,Fv>3>LXrgӮ[{$kIr*bM3 }546NJ׈}~ޜ&&iKh Ie7oPUY* G.,B_﷕K=6TEN,kW\Q*8w\eU ћvZͯRӆuk.Reѡce+9<#deP%Wf}XdQG$<Hp$*"'v._GYSQJٕIgA`Co BUz[x>JB *#&Oq]*᲎'t&ӝV6TOuC;5U0(+[HߙnoUX3+"ꜮpemR{18C[+柆QCs"h7Skk/AZjl{Kg_m*c ]mU7> wXȸLG鲋c6ߥ@ѵ=ʛd{iOz^lͅm'Y%7VNG6 lַ!^ʀ1pZ٪:#RS~( ApTOpOY{=7.ʯs](OhKBFj 2spD[D%&Sq4~aw+ژJ*GkaXTIw**H)i/h)]oO=L;skhO`pTÏM+paST?Hݐ,|nU)2oX3&H@7l}Ii25bT%9-Tf:L!Y!u5%a{m_{*L"wU)sp \' lKkQ8=cF_KT<mtE`oblIwV쉽 #n,pXn?S B2ۀ*jHf؄K:*7 YJ:|!N5e: F䊧S+}d;\yWQ8ܪDSN'QcrSݴ,|z8Uqn7=uXs4sr Go8S}[:=PW cv>`u*.uΎ7GkIe4R⩡ un;2l$3 {)JnWe)7\"ZGA.c5`>Cæm.]W*Hm ijikn}qHΠ#>%]C^l9.E=C_36מꂝbFtRW966PNfh=|BQGP46eCiMK3[{}voUSS6FQN2@e\몵UYeV:\ s1k15G\XbX(͸š L@}Z,*:ז(O0X͓65s˕uX#?4A ABu*56n8\(=~ٿWu~_!&K۴xU{v/OٴYuYZXÚGjֺs@mb,QIHV=UYX|vDՈ@pvF@9&߻ >w߱`xU!lOkb *5p7lz20tM+| 9-}ծc k9muܺ)!|\7GdZ:ɺUnWDR,^V٧Vcp.[ƻ7oZK ZG(f~ee]U#nULwX긳`/cnVԋhoځdMkJ J2 ݧObmOqN< VGWR[t+xnf^7Woj`TNN{ aئ0WX)I,7QcUV'62=]Gh7]XIClTr*xm.v ,ἡ !`W73%{zL^y˟ϴoY:s$Y!,b&_[UBtm#&a8dcGTmRH"}UDP Uގ/9_x*[,mٿk  !"1AQ#2aBq$3R 0Cbr%4&6Ss5TU'DEV`cdv7@efptu?K!Iש,o⽼(ReSr|Pe\ڼEqѩ $|%L欟Ԟ\4|X1ҞTbDw4i֒6h} XTLlQ3}mE{M [ӚiN)Z)iY&zkrH.'LU;1JFcI Ƈzum^ `T=SHH$HB]o4W@^` ~d^:bI4L1wJ{|DzL6 ǟXSG .X Tʈ})HW*FWTa@N5N'.jizb}7!GxL˹˜ڗ.Tӕe_C%h!Yl\UU֩:#i7REJOr6Z^-oOq@T 2rSaƩSҜ+YZ R MRU8y*9F䪵FYr"e,&M-))w]UppqJu[~hY>r)UW]R(A*t^ݱꮡFr}u:ˉ҅6\t-QUiz}^uU8xЦHSz5d!f) YzݪGuO 㧅i4c9u1Uey[m<50T5F%_U@3@Z6Icةmq'G<)}~ ?c})7N!q$!Z=HRϝb$ߤܞpC}Ƿo )S`Q<$o.6VNh@%l8RT|qdC/KG.8@]bTxoA@iĈw]79:[dycF.`Qb-Rnntضe_n?H۩VR'O{?HBJHO>VH}KQNJt<^RXʼn}*R\Eu!xi*hi>v>^Hsn1No>Wmc BKuM.BJZ5\7QR鲛^_n9DM8G}* Y)oeȇ!>1ZRac>)\x{ q>ęiE Bb(qy>XSqA"B\YjRz_qK+bEYQo5RֈHsԯseCiRƘ|b mI(RK.& o0!f|q [tJu~DҫGnR{ޠ:<6 hieT@I_T T*GXcÅ9j RaűXTg. y2Xj i*E<|a=1ߧ)u6BRҠe{K=[>:A7*Ԛuja ԶTSiOP@6_٤:]K~+Vɺn/>^z:',V[)eEMr#IR>xUfwWqCŽIR J.RG+W%ź5ߜʂ*Oa>1Yid$%6KIJ{O,Qim+@\f@!,+  JԤM V(qg$LV%I40`HuN q1 %H)UJO >^xmKX!QRŻ_ef4ԥOSj0%E( $t=/TxjeC pjHԫ d5YL=*1ikyAψ[`mbx Qy5zeEp؅!_rΝubo UI9-C RlzdydO R\V,3>hH*~xM%IR)ҩ%!:[PBxvęIͨJ>#4S*RTYĨ[G#1kj σ!C}-t/J؂1TV䊅B{3T]UQJlv{ҕ>1sZ`O:OR΢O~Jt8WkENRV*^.:$$]GT&?H*mkwHԮN*TSāXK^نӖnVʵ3+'R6sVkuIuR9E΁vĹ FqnV4΂"[_ v%BuaSk$sR#{6G}8:ȥ!m)(iԱu%W'\JRLKuWOdBA mCHytբ6u$\86a'GRN R$X#Bۭ~b=66̎E:[ԭ (W:mtɬ9ʛd状万\UN.VMGpmZOӫwH6ґ ÌΎԨG.8u 4cHrkW KvV5[nHf IJL9CSGG ~e#*Mw<^ VZ? AO}"5Na~3s9G*'b%]\bQ]Qʔ'lJqu=#Yyc~|tE~;+RㄶUtbf(q؁MjBSBT 5]iISR]JԎRmfKTj +[n.":A }L@-w.Xm)iIJXC mqrn4w튢ԉOBoDRl6/nEQDniTwP4[QTq Bqjy6Uӫ@Th^;5r ̔v:cՕgXlӽ=Ɨ\)DV z =\"@HAl?LO\v%4\CM8%_[H y;hMCʎȋER-9@iOҥ,4TWpl@oiҞ qÞjmMqҘeEl9ߩԥ<8mUǞ#@n(LQ\4Ҡ=nR5o\9\%9zEqb&_M߅ԥ!-Eդu\eݙAnmmaJ%xm:[4;}u )sO)Q.4{pY=VkGUG.˪dR.FlwȲU}6¡ɧK%SV?q912r9щL-He!Wy`u+hmƑ TnP.,)Mft}WBjToZMĹ%W)KzMV2aQ\.n _y\zֿ2Llh4FFWUO-{&T83W$O'@ [~#ujr&dGBhUȾ~XʨP[ LuqUru'W=@qA`c.CSMrRB@yΥ_I<劃 6i|S*ғɶRQ=Ҡ68u)T+r" Q-J<@F!%5XqJf/+ lbNUJMm!u(<{y}TۦP.S+3<\'w(;Mq|^ۉk<1R5e7 t I<'c2C*F/Qr\=I 8˫izx[kpu8y.zo/1ncnP%H ^+ȦVѫN*qT+HM <‚+JGXlڒ rJˉ+.=]LqZP[J58_N*re.&4KI(% ױ{]XpNN}̟^̡5ۑRӫt;^=!sKمgUTw6{RxKdYJ|6 ;i~|9c倔$tn7՟a?Vz]codVRue2yqOl~gtmm倀@wVN\Kdv<ϗNceH#;dpkɲ~~ bJI \k)z xhv >mr* 81 4hqJCV;&niKtj4ƯlROo[]V>$DϖUF?ϋ"Wn}V^*F ;Q6 7qt,y}RQ.Kh Mdjb ? yO7:P[OIn;)4JG>@;azKle**1T I jJB 5lp^bxF/ZP i2S|U9Kr:%O B*nasþX!JB߅1IRx>cmXN4〛cǧ6O`.Sz: |9}]J<JRj{LYk'T7[;_#wdqTl9~n^;BSe|,7FAm :S%QO^ql}!*i ax@P6,n_y\<*ܛ1tRڹFfߏL#*$!*Ћj_kWOO?CM⥪ g7ve7U7V(I026*#8.~5*BH*\ڌ>BAZZFċ\#ߧ!HlOh=5/IoK_ I+_bױ31;\mI*]4Ԅ%<=J#I tT%&4(sTV('7*..2|v˱I9R@t%)%*Kn6F>}6uUuz uBs}<(DIih:-㡦f7.8lS\7L.G5}hi-S¹ǷslF'/fI%jop n1h¤OTuI7vt$T$(պB<-TIiT PviJ'PJRlCBy^5T6Dyt݀W)}\yLfRˡ֞-;Q#Mfhг[/L]#-RA&:ռfIE3cnpikMv9Rp䓡Z4X[BUQ̑feޗaN߼KOP JJD:5҆#F۫eeĝA@(X⊼"zg%J4䶗k[&ǡZoͪĊ2}?+Rf#j\΂6[H~U_@ɕ 1 Xʔ#igqZK#bp)ytjPim;"ݾ! SLi5IPhUҽtZ;e\kIqNihJ?zHj-1G3&91&hMKk"svϠ&%:LI˭ȏ,N)NjiHVod)WN>ؙi_1؀fס7zAH+>22]X1Ї$!AԔZ O|G VZjty),%ӶucJADŽ~c&&&"T%֕H8[-.X!\L:K}zÛs.KYF)rgM@lEu&]`sM%+JYRԊx Rn+m*PR};\Tr<Al{Λ7љD58)U!}joz,L 6 Z{5]ni 8)rYbᇢ [N! 7?`Q3‰Vsq/MNe{[m$)JF{R87ӡf8hi,l5c%ez=[rM&З-z+G`2=V]v=:uǷ΂l,t3  3RT uD&tek|q3-geix7)zˊOƍa4/ Wz.+q:΄/BqGcql=FE5Ċ9JRv?P ?W*q,Դ4K KiM’FjRBP J\>g]IkZzVdlKP 1"J:YT$ã%*l4꓍%n^ى4\,Bj{![!$XW\!]pPw2lӘpER4,$M# ,pR;'oZwś1y$}iQ!l<ҝ@5 } DU6@$?Uॼf/[c#Ti~0X R3u~LR(46< =sm@灊$E)vw9RY n4V>ѳF^:NZ1%* jZm -sʅ8rPQ la)lVR5u/{]VdzbKlGa<8Zҧuk"GԪ#AUIaMt w!GiHJb%&JLP x68yuʘIB%HKz$#|NvMbQsvv^ @|Oy_B=엕vߤKw WO:ðYN)l)mc= ĪƏ*i_Jm`[)S.'zNb˵Zkݥ˜KQKjk7hu">zoaTl^f\jJG_/ZxɠMNfCNS֭CTQ*P(~e$-u^@ X݈Q¥v1A-'s%$yq&vË )Vϲ<++Z4o,/j+![m`ONM68Y-ON46l Ie<%#IϓHBsĨ)O# B^O􁈮:RBu$hP )߿0:'G}m%G„ AnH!(I (VGFWœJi-y4mltlҬ+pqIN̔lËe(u"<,[hR!n9t;_8R7Z EHVn[YL݈G2Kk:u[®SXVĺ9c6j\Df\Qs7NzF[N:ۓ؎-%"CRWKn@knEf"VB$'q%i=Oab֫-U?'Dp*0 hjP7YY -j7Q%ߥ]+>xɏTVL|gBu'%E%-}o Qҵ 7nGlR=qytj6Tp0.>P5)m2BԾ<_hC[ ?:Oy1KPKwwȾ(~WQjFYDhi Rl=Τ9BO|?LLFaƉ VҮ{fꙐytX-dJ'MvԾX'zcOmCwHc/ѓbVO)qYlH촩gI\).P'x}!C(ZФXlelɛfSji$"k8]9B xB͵G"Ejbi8Ze`W?q֤L̺~EvPPK $~6KꫨjSSU*oi:Ju'+GFde~UŧbƾlY]Xs5EhXkh23!^ԭ-7r gF0B\#SMu T{+OnuɵS2QiCPJ.!_/(+LGLˍ,u*+2/<:{sTȇ!辞tn{mN6羌}"EeN䳫MO@Sw*;%x61jj+xn8)<ѿ7hW3l'Lȗ 6QB{%_,TgQZz*|bmbm@r elV?`mV[->+L&{'Cĉm] Dvolsk "D2+mJӫHoE֑{ + aC鵑OSa|-Ł͔>ŧп*KYQsˢґGsrGrqe,`z`>SӅJ?f;+S;_n{_9rEBQG~ KI i,@TAaTTNVW*M6U>X=laU$=i4V~xP%?\x)m@|H5ʤ&̖ja c+n=5bw,{9}Dq߾*χ/:$^)iZB7`JSZu5nxp5I^k ːjHDQWR.Ikb2KlջbAJI1:|YT]yftĶ!Kd(A7쭻vV%fCHPVYy~{r[!<]2`t|LԖ( *V5 ˓dmT@Fm:qjY*߷s㐗RU2H7kxqی=R9LfKO?\yQd@*'ac:@ko-g{J1m^O(I6l$ѧo%O:/O%F^%}JLlT_ea)zM P2tqfFT}Ҧ@Ju* |?7OB@:MЪ:-7+P2mʴ Wc/V\L`ҥ77"&pr} |N@U"Α0K.] 4pE_| |yBMKL }LrN͍'RyyďzN>8K(LSIEySڒAT(*ZHGYm֘nƩ6 Z5hP|%}"7!7L ZJrKݯq̥SbR#=:P =M |elYKQBI!,}M ?rM)3g0NI MJԗ#N=zU~Ce-"C5F5SyԤq Mի S9HNsqMI  @YVN-5= –(uM&[C™pҢI_Y^ȿAВmSQ檃-НV܅uniX^nɭk4*lHolx!T#q.4w罾x:S*(Hd.ĥK =Wp8ؘ Ul!G76#v#a0D)ԮÐ#SfA,V8 KNe[ۉr.Hvex VQ{f$JMՃzep~l0jRgVe⤸TSeFOKR+v#pJGcۗ29,-aΖ^DvxŀNYh)6m J ? ;F3dtÙ庵:m&RMiKA[QZBI#ۑ' 1L m ׷|dfE*ۇB*/q*bqRRfͣ:{P^cw*307Rcw =wm^df&DiQ/\~j:M}Rq3#4V!Aue:s4W{95׊ חkdESfU92N Wkbԯ Ɍ*ۭP%){x%&vnڔ %=P9\ 8k ~n\岵e iu|t<_V*Mb5oRxc}7[1[5 #!3ehz BRHP$"5]1Mc-W` T2먏2*Sl\n?v N.))S~1cmN_aCǶ Rv:o`ColmЫ ->ǰ& cBUNӢ7WO:҆Fx6]RJаe-!20F;xAsJnx$Us'HJY) b@!IK2/8T9A] RZ?RM#Z8ԫ#c?08c=T~W˱\6R[eЦVV53} אJBjIdô*-4X(ï֨S6ϵ53Gy, ?n]?gQ2n1FАLe$݅W} T|d"^ HfJ`!{ޖKv&sL~Ѯzq1F`RH6<}7eЫuT֕'Ý|7{7u=U MfZ/LІ`,ih7 sYѺ~{BD//+YJ1zХ:IN aufc4ۍW6ow@i& ulJ<8Pa&{b'KeVoŰȎ%…4I}|P"?N6O`JE< f?4aPW/{{Juυ9*SYKәS'BbڕzFyI)n$Z"ݺtn9- 쵤h4S{YZķGJxHI)sQ֒{zUe% CZ\e.G-ھ"2˅WT#F'M$-lZ`GU2-GYX5bh%Ř"8ߓ\Ov%>ܾ)+`Jl9+ FeխGˁ בD̨deeEiH7ChA\ t'=ESٍo2}]ɩkVϋmYܠ<Ҝ.[Ն,s׌:I#5եE4}p.<0{H[hXr-X)>Ž0C@SUL_$cC4JgJG{ˈLm)e8u%A=Ŭ9hf]m1Ve!jgO,%X¬>Uj_f*(oM p?F+]-_Ix]ith$e%fi)f4PV޵!jq*񺵥H|B0AIR~E1iIi-Ϻݵ]b8q4fYKq})_GzuapkLFF))҄ Kt'U  *e 6U6J79/4$)k$ڕl9G/B)C JR$-^ln(_L1Q/R ۜP[Ay,!*3yMx]^Vd&|g:7^hh^g])YNr,"CPH~Lǔ. Da鳟PLRڎxFɷs-rwj)БH!:lPH+3eiMl8]Ah=k} շIq`%vAa6[[0v*CwR>OXWN(olhy/k%&޸<MCO؋mZ6 ?BśQ[̲ (-F)@['+BuXuCtXe\c'*?ٌ[Oe@AisV#%sk|=:#~ىGLj[&9RI$.3)Hv`۪\b,6ZnR5^SF#2.*F(jiȴfжa4r5rqHFv]*mĂ9V+c2 f̬_-ZCՓeƪJ[!Ch}<" l&|PĜBDJ{G)"vSj mA|!G8\L8J( rJXWn!*-*LTy*OukiŮ+&T˪A] y bNִuniӣG ҭ ؀Jw4G(q Kɛg;Qr=ql,+B  52:l>qVuc|JXMrHN_$Y'ēHL5j|C4VؚȀ;'e3#fAg ,åITuY-;e |^hռTQe >zi+|nq}Cc~d F 9 -%tOOJTOUxQ!M2Yʁ%>Tq,<4$kx> 峓%w1>jUg*OargP !J@H.ZM53ԩ5j=:im %|NFf}J]#*-֚f+Ѫ$RVn,k R7`Ci Knm4\/XfcTE!͠6M4v^}^^Wʕ snKV2(ﶧZH6Z:yHUt=5򂲺 s5Tv#gAiĵ*>u[JbBBW{֞i4aPdҚfyQߑO-p{:ׅRl#тڋER ӌyLwJ ˒RWRK)PQ9>NTZ كŪp.P^T8ln0ʌ%)1B@]%HC敛|1tL!HmM/ s` r. e=n?|)uva%GӏTo{h[AĎ?ڑLdQ\Hͨ%--GR>|eW(z+*e",yl鐄!gp(jR{dU-p$Wj#d$ٹ!*Iy8fȖIioltA|7JI^9{MҊ> ʴakv,׻wEJ}:?[q:$2C."=p?+9]ȴHpHb&!E&7:.`W ;CGoכn|(Tj-o⢗kz܍)%\xFWkT(ʕR4Nӎ:NJA\hɨ|-HS:HA%6+KR1DS):3)$/ka┖b.TeWii7h+x6 FJb%eI}B wPn*V[?[D%k|CjקƍGV\ntY]8N7u.˦WirPˡ֝BI%:- ؔ~phEePҾ$) Ia*T*raaHh9MV:׃cMK#UX#]ZJ´eɳ"i dTWm&2.7r|7iɄ*ԙ wSwN!_ѝ_&J5Hnu)m:P4ݲ\ޟ"THԗYqn9 K틫oAnrUȹbhr(&Bb9gUΝ"6ϴZ\~&h)ՠyֆ\kU+G!%No_JHTUԂ{(uK$VcC ECly S; eQPr6OncS`LFU۔#NM/g[luCjL4d~m4ZJu!Ѐ\JtjG2U,fj/ҧ!ʊzқI' R:nTe2}/%K+Im'7^ԍVuE"tD$4B[Q%7JmR`GG F#Q2MMi֥!:"U`8R_1 iq,I$- ǥFaE2lh.8[ ^u|W=>Ilfĭq[ulU WHl&|E)+NK$C*;Raӻ~qۡIQ T_Hԥ2)MAuCƢ[MH>~G, ѩ2b/7h*|xĒ ۉat`oO+ʇ @f7CE[I nRl?q/f1= 6U7t)!?O%5Upʚ! RlwzBaU*BD8vJ 6ӭ4;"j#ݔLȎ"44ru+IOTsqK8M~k$K; =$Cdw)LǁMqP<:}EūNۚT Yԙ3ۤǩɐ/͛}zH<"HBU&5%#_<{_9vJϑp Do(1[CyU_FβvĞ*H#Z Q -&GŴ%HNغ$a92D-Njбe󽱗1TuVJE PV'J;b' .~>(FT(0KJ<@w7P]70ҩIjCn8ʘ:EUWR8]֯:uKǀHw˩ZAD6}zl:_e˅ бCDy_?wb$_Z>fLzL'+$. % }*[{EZsnc zE:A㷶Tޥ/`Ty*RUM4),յŴօ@p!#ئ&&ܩGqI2@ '[KOfJjzN؏YN'랏%Hv"0̴+@t%ZTw[P֘:Bw& ,(($n$!(tjT$5ToD6"zIӶul;te Aǖ7H![U{w? jx}dFäsҿ_烅Q7%g͹ EI2mkJ]W-=I})Slxɹ4/Z@HR }qU+ ﮞmBn4,-Ҭ;i%HBym9ĤjU5*]SSUAͳ(0 `AZ{!:U6lے[&$.JCiRo,4-}==Bc-&۞/S -X*T,循mC!3\7oq~4 YMB~0RT[_2EDez1S'ex;bv:*KKl-O >i'!ˋ6vޭXbI/ΩJ}Zv@EրAǵLS 4ajӧOai$~~e߅"ӲPˈ),S!]̏?Tk)[Vpq MEIteVnIGOs?oV%fzu#4tO :ΐYC.;jdn\!KiRY@[W=(j6dB[i}kK n%)]k(WF}#2BM_%='Ku[8I@]ѫM+|WLexd*KS3u|jIV3IM|vyd2[2CLdRVG#gGƫ=&Ds!'d*juuVT& Htx [R)F>$Wj594Y0hb:l[Jz/e1@R>Qb6c*>UP ֲS#z6#iԲx#Oƛ]B%]-J}gI#IP)F+rޛ.N~Q3RTv i֕&wPI*n Wbj*e"CqZZt oZUmTH┕.g} :wCnQ͔%yIK~e.-L֙il'y Fq$LZl̕l82߄ƫSgSRM,$,<Ƿ+7Hq`JsIG6k(EuI[i0› @!%N8R(#Nd.l bBuȵiI0tz|GyRsNKa!VKlZ*nLi*fs;JPJ­ÿr6IDYBslWrz-Q1ef";<eXhԃb.yYYbRk1S^ج\p<Ңʅ5T7X._7/Uv_߆!pzpW.Hqќ.+FJ)%6$EuxU%kukUˎp'e<\ð*}Klzy{aCRl-Ĥ)n[՛$MT6SWimTTYZnnHeq82U‡>lPWVʝ(q܉)/!&<^tBiYkSJnSn"~RB%ʁ!r줨u 6ԲkAIz+iDum)ǷkSV/JˮJ{ؔ]:c/8wm2gp>C˄utt-~?ԑL~{R è5QLJP~ 8";?PO YIKHl.])?~9n2FORYK HkRH~*Xy؋1.%N“x8HJ M?;_))^< 2IC2M5S_+ImzZ ZSVBayrhHbt}OGx -1ߑ(5޳ȀY6G'8ϥJ/Bw­< 1Y69:l>\|$+u-|{@\^#_eѤTV7Éīoqm@3ڥ7ĿK(rRPsFyu GeYkϬ,:6m<bWIzK$Lzin} e}Â$dxgV,Q_ <050bU)JTUH *,KE:Z"T[.?CE)nYw˷JEŏmqlE\YaHYZ/Go8I\ w( Ri*cEml 'Ĕն>\)ֻQ|%(Rԟ!fUR} 5Z Cw7UQ(m-kXN8B}ݒU{#O 2|AU*sJ_JI/~T%<5>AgeKd¨ŸYr!:uoqƕ$8.̧`Qb>-Ǭ\RQ`ih Q4SFXHd3F!.ǿ RF%QR W鿒Q4)en#~Â">N @4ބc[ukN Zʬp[]~V}/-O MR ű0&j^DLɐPCnjwlj~;SA“E\*lU24FVt6&#HWM)U)[ ejT\N's P"MwR_]4N2^e`"sĺ RЧFГ:8*B4梕ʣ[Zcj'm,:3>쌷U*ď$nr>֩_O7˖aM2Ty@x:6VeѪnB?шp שK!tԿC* ^ =}@ۺO?~',3iiR4{YR_eEq^X_pn9MI’mlIJ~<4#PTd{tő|S"*MV?\6Ô* BsWql*%Ҥ+ʯdjJ#+O>> e%o(J*KDӸ5iP(7I?W/&*0*-zKy)_ mB*׋=kcBx_,9Dfјft)qKe@z\b!%eky^*vғ:a.6!@s_H IhH8BCҙJh^P'-~OS-{%DXUwS) ˵l^vy- X| nuu2vLm|>F;RWeá۞ʱb&Kvyj6"z*R~*))ď OD ,O:wzo#R*7ZiSe=qIErSIB8)òK58 f҅85y9[*Vr}/)0aQ4%R_ xӊTc+/+YT?FяDh'- +Z eť7 6p 2`h:&AoERTEӇrnSmMnҔ eqY2eRM{"S\u6RÜU+P&)%TmEjR%W)&$ ۄ1eA^\1x]Fk_nHxӞ2>-Z % y1l88CMfKLC4&m=ZeIJ{Dn9T'U,DVZV)D>+s'U%AΙmI)2RwCjs;|'7u+N΁4Z|?eGC&KI?\?[U<~՚R*`0=ݸuXIV= r㎯ !V>ISZu@R}Oӟ ޘBB ɔaGRZUPT3%ilћ릷IvKcY[&<[3$Qf4d},q Ưdl(p([S!KYDls/^4 I[> I&d0}#Vٚr[jCT-8@qEJu#:6&Рk3deE4*Wu>GxfV!0)$—%[%@:c鏤o-\L:+^Ϣ8bܡ+mu9؟LR, nG-R6VV5W`MZjO2 =znzBRh)ȐQOMz"wԍF㤀M|U+?IѨ>ϊN zJq=WҮZq&ѡizX($ЧsmN8!IR[q:u':Ba֚v#2U$-Zq >./>av%tЖ۷W a&BC-&1[<+UfM)iR/<~RRSnҚ[zp~V|h PyF.RъRe? '7٪ TMBX{ҖRzsߏUhUniU2B eA_#^~-/3ir)q'ITiR2JLF6`R<1I;_eڍE4)n24۪!'~o3IvzcSkUz-Eաh\~НZ8IN@1%%; Z 2=r,M/ .-F9ɴQNY.@R.zy(e=]B~(qFAMOą&O#:{S*12,'QoiW[SIVv8FrQb?BYَc]s5TTi!k}:2D~JK'$ ԕ,C%$1EïR"zS)ak|jl![̏(A= \vl%KF;O8M4"fs3r_eKc…6e^YAȪv~Mx=o7:ԴX6ie5fL[}&T:HOZR }^_nVmUYsXң<*TTYT4 NȲR*B7*neڵNp"%![qqzujMܥ[+ѧ5*KƢÊUŜM)<_}+I T/z7LMda'YZ8nt2VV.mԓǧϞ>bHݴtrn,>0Xi_ yVhV]o<ykaO;`'vŔI{~i!\fO6ԗC}n>.$- mE4toΗِ9%={oc4'{öDmrI H4A W!pGK!=%t.V3ߥtHv'K~[[İ˥Jn::oԅ<Cu8 Q. :RVt]6׬ۛ_^烀F/eȗJ4kM-•!j]uWGsfa-+Z~ g 25w-e2d'\aC}ʴ%\/ْ٦A{4͋2Jd4m6 [nZ1yÌ5F-%;Ads|gQk0ΫdWL*y_iŸu (^Ie6MpoV+ɓe%=M/TFWuo,7%;eʍ"SttpRlE4T X-WpE)XmH7);3P4ӥh[|VR9&֦G4+ӛER`c $,Uvf$w+ljΡ CU3MuVԫHzv<\ER׃h_l+-ʏNi?Q-$)]( zHjQ<*J`QooHNVج'qM,Jiamk!VR5 [=%>)-J0iIHyIJyb$i_m|NQe,Bkhl9!:m:|dXq\RQܫX)A?oqX7 a^[up=ɷو1ޚIXkoRum,T|,/2RuQce* +Mt$ !>}Z-%"Ŵy ':E>ARrʓWi֭G4hhK&c87 :eKZיּ!JyKy3\:d(xhYJZө2S 8/I#eΠUdZ2j)U1S;HiZ@NGFjl#%nM"gn+2K =o-N˨Jkoju6RaRҴ:\UɷI W#2L)Tic"Cۚ5WU)*AXI<H%s-Rխ#I@$/G y=oJuX6أ&Es-ԍ[7C{R ǧYo3MnOuO ejG#I:ўvmH46*:,)ռVlیAq!/Wӎ' X du.qJ=1U>CWwrFjJ@rmTHC!-#m1nHNHK*C5#yYr"SJQYsqۚ7*Ybɥ}MMVpV$>{Dľf)5TTQ1=d{XZ~.I[SU ; ֫r n@I082>m; Vg.Jۉ뇒VQ7x^a{lNZٕQlUj~1G')_5Uc7Bd).>? ͱ2̶tC*FKNJ(}֋vpGz܏cFAD4oNyXMBTw[JOo1 .OݘRT:ō׼"fK[B/ˡ.Euhkkdt퉺|d*YJCt|F~ In<.k6^b%ҙp(>OO*/5 TSXDՖ)I^c8-*)SZP)fĿLRѶ"<=dYuP@oJ)yhΩRB˔'*F .E7vt *1UYz=H Cv)Z  B \ Cd/3UrjeRKX o{#.Չĕ"6ZyTĶ~ą+-)X.ޙD70#>iRSTtC%/ z;]8ߔG7S5*3p4j#mR4;z gX-BN@\mȎn J\nZPk/g9s*E?31$)4QrȘ7AoPsVdM.OFMn\bzT?sV/6@=nd7OOkHWajBqYJX:{#ÒTn"`{JR}X"kJowikRmnȰN6Vt o}k%ޘh[]<|>LRklCuM%z:.Qܞx>Q]n0T󬥦ړZTH!|s߇gZ[LE2 RE%A_èYMet;4Z"ҡt] k4 p-[s{eJ_90U4C]LqbJToR}p17T:c Si.*]iHAi)#˩OEu&a7;Fdj(AԭDoiVW= 0JbϭI椵d N┒0j[x.,vCz`ā :VUFJQoA|i$ Z@voHn;6_{_O6ˋZyaؓPJI2%=ơ>zQ;¨GVrui lo!(dqΞ2h@Nj(VwT6҄u%d\ B+qfKɋ2Ӊi!jJCkڊn=J`-NELTrdIVۧ]3P)_-Ltlh`e(HOeT]<%ٛ)nϭ]eՒզH%!n-WF wdJF($\ #e;HaLrn򳵐*K+eIaHA:J-% E%+!#pu~~MȟP5k-#Hg ᳽2LWmV$* iz<[JIہRRSkr8^yqPi# S*,^YjڐJҐi5&&U4)S51?- uxqRyGb7Lo]͒\o~ܘo&U"”BZ@1Z GI{ĥM=L,!IﯵWr6k}ܿJUץT3DhbRt*$y\c<*)2^>T* 74ǒQ:}eIF^n0-֧)qj"Kҿ-҄2Jcb#LXeRBJ, лk/,qʮi+8lǍI`$nm2vR~=&ɺI ]N :ͪHQo}"T+rԽI*0J_sMpslBϼGCED&[TOm5+ %BN3YHҏʊ/ux5qwک5BU:][6܅%OόWrٮ*j\J2) h;ƷRiddƄ34s =SOb3HQE:U\3\ɟ5~&d׊zږ;aLBG-1_uWy;)|z.nV-+I=" :JU&[2[<{NaE&-)?j;uG{Bz>>jDi!N0\dRTnht&PP܆NJr>^xd5!C!X[dQ`s)Arh8Ƥ\n0A ;0g8֧(!#ý8 N_>S*5BtQuVlr-ƣ_Jq@3i!:Vۇ;15l#Mz9[q'h |XV*Ly-!AJȰ: ^j{E|?:sx'@Nlt s_sijSaB{b^G3|y IBʊBa'fq8Ҕtm NdRWJJ(u?ITjr/-ǧQ SOuì%#S#6fǏfw㮑Z\" MgoVÒ,ݴ~K {_技i(-֡#majO@q-v(~T~h1b#Bo߄>[ 7PAKK$Щ 7ZmqķJ!Ok/+u.*Ui֢C^ӫqHFYCHep:zx'<_Uv4Vi4Gbe%֦wB֟JG|)5Ol$f[v#yr3beԥh.߉p+mfe@1۝"2E&xBRuARIW2 U9̓9P*Lt:OMIDirS2ZRTI;z}IG¢:o\5mCRU M5%d6%hKk%c9uH1%$F Ӻz )7w&jNQ;+&SmRJ h)ICXR-NA;/^ҕͧX98JX`SqVK"1h UΐOClN76Žy!ŞRQan-8%-Ɠbm=,-q?H*L $ti [Vߞ/^kBz $ǑURZ")Тp/- *7lBeU)H*ȂҘM,BZ'sq!(U2C.Zns@7q{n*VµPTnTRɌËiL:}܈XoM$K۾ϧxLRcN^hܸJ>KoS#CORébDki^*;e1&OebKf}!;*.pr5.*3bB@K;M-a|'ZBT)mRԃuZi%^y*Q-۠ɹSPr+}Rƶu~VIx8S{%EJ'qo[*3"=JϺkBT;~cԀT qP%H+ԅ$ç7?YYbD95Ϥ3!maIە#V?.vJ@ĔПcvx&FNJ6R7Hۏ uv pM.e^?׶%9?1~J.aLJkJUJ[ >Ru:7#EP W? G'ӒMh|le(0MmM#I:OB6eIEb<=Q_KJ!QKH ռ>'^&]=3㩷\ZtK= <4۹8EE^E)}~:a*xQJ֢,utl-~ZVRop[n>X[mdֵ-UGW`YHq^PH)?ZXR[S`iޝRUߏ7Fu)m5#;gmjP)7צBOy(NdR{ qT~=v [ +X{p$%mJ$m( |T+mP(go sm\|q ٚz5G3%ۓ!㾇Fp2/$ٮG~tc\pmW||:{woZ6#溎ta<ya EoknZ޲? Ѩ8 q=>4B]61Sk:٫ P}Ȏ7`ޔŜ%* d: 6՘Cɦd%.EЂkq8čQ %IRRְ\nmǍCʒUH'T)[ţҴ~.ÞHgF!^a5!UyySZ W=k=펍*g-j6VÌҬRʎ|Ӊ5^2eoZZˁ*''U/,\r 15)]ZGb VR!䵉Ǣ4|d.q[u)fPVS7NmIe[BVBlǯ}D H6ա,4x0TYom6Yb-o,1Tcڼ|c-@Oe sQskEeðۇN5*O0I XbTipn<Ԇ[hX6TM%*RIn< m]vY U3y)u>Y3*56gPL卶rjurqTkHuedSW;WW6/-gd.Q|oL?AMj6NWy7'݇z[aו_H&#&ÌSD&uAq/.Opwfe25'M u}6bdQ5#Z[3A*JCPܧRjw/dORou+ڿT1U42\E$9©. mi SPPA&yXi5ykH*|phQJM e Aad]h@aMt}ڭrq_U@w{eEW7O$ffh`ؓԯ.`;uj k_7 uvO7 PSj\!oo(#WV3s7}f&62 }R|t2DmZ3"Cu JEcۓm!gS/(7 K'E-uEJEFw7lTm?XO-x&R֧AmEu+7ZnN^"Y֗)>7?11駩ً)GH>gYf|^r)Em:t/i}AHLqT5G&Q@x>,,儓rI~,TEh˲U8WmSZQWE6cɣI:1Gvu2YS.IO[hoi;@)դyHAawQvHk/sv7q@K1Sn8(=Tw>c VyvP[ֿ?ڬQb;︈97%3AB JٟPםi qNZk[ ʌ˩Iqm[iUuϰ8B=/ԷV"˛at]B:(J#JڦLRH<{}*1Y𷭸tQܪ}V1ٳdJHimWw;zNoJI::zv}S3>ӯmW#>ĆT5.RSҴ7ԅ|"qN:d=Wkd)CP<8"~2A)ޓ})ynE[a a Nq(V<1Kj5i7P%  JusH͈S 6wb;|xl,HӺ ,@7NS4*6s#GJTii:SN(/R Xc;RPΣP+v2JgEΟ,V˴VDʤv%.4cfhJ[Kh)HB 3Lyvu.Q+}[W^ECL䱶XRB$]Ŷ :z6V2ME2K5 SXj9)Pӷ(Ë.穫W콗vF݂xתNΧ6FKaqZ}ʒYYBl3'YuW+(S$1N#SRR”ߢCU$"anM$iGJjKK3mRq+V% q,J\]LGso|1N,YSM=R[|i[:KV/XGi7=\_N3%?S{%*߇RʉO)X@JL)B~+J[kY-M9mz;pmy^$rZK.):J,Go|A0֛vdt (WA+IM튵aRbODx-*mO&RV<)H[n Z˱"A"7+z9y"%P1UaשriL;(u%Ki 7spWk6Ya M\71ޅy]y^ԥA;-vyQU#q=#l:ӌٽm %ic9p.bi4]q2#)i[bYR#1\r3S4rh-\ _ɰ$̈tK8Y{:*n7J%DL+r3cdf}Jq: ,ĕ}U cD[IDT#n֔\,|_ne/O2la6P F}x<4VʜN}Si:cLG_n Poqr,߃VPrEMT|Oț1QԴU{ғrR J*H`#omjKVO`$O/&S'ebKCn?:[B__#N3]]ijI2>Jl pxӊN#85r>LsԖfZۿPP]sYC5J^ӎއLqd7WRf!="+s)ɥK~2cHmCB%!AOU<ϒTTʞ#TX~! !,W+MȬfHffzeɩHZq[hJ ^徒T%6Y|0_Fumz^Xԓ{ra*FatpɷbThw(\k^v톖E=j\2' a6@AԻ>XiEnDbI(x7rr6cl MVOO~x|ݓ.&@Z5mdгHQ%nwG1"N^YD-,7\p M|W LzB9o)*ZJMm:f>]*7WKhl:ZmHYZSClc0)=әOvR\w !WAW{kuT'Ȩ6`q RwU/a<lxDBYmx.ѧ &Mw K! U莶48:ΡǺ|Ÿ[Uun_&ڼ|[Hq{D)euu~Sy(xKi:=/ҕRxO7Q_8#e;vk? sN P))i }G ^6nu҂Ӊ Gizy yyyc0tm̦Zhmq]>:ψV_NɿbZCa'.-ҥ=n[*Q'Xĥ)Tۗ*U(T>@85Գ%f=[m=ny[*4܉I7"jJ)@mnM<8WiŸ!(:"ԕ6Ө';t&Cc1U. KѮ~WaĩQk ^m2ۖ[ii!wY 49Gf2dWܩM)RBSݰt\#8jž(-RY]+aNYj7HO JP$+CVHzMK:~_f ⦋:W x֨>ȭЪoϫŚS*:ز_:8nq_Rt0X$>n/J MS~qNgj*YEʂi1h:!J i[W \\!ABjN#'7R]:F]ZZA xAǫpp^FI-Q=QKXa'vޠڈ':>(2dW9Z:U18YSSV7>cLJWԕLwOߋ2-&, 编ZUK$rqJnLL솶&4:kKsܔRC嶬H?9Z w§YT:k.ڋaؿIOcߔf6ǴSVp?{j6IW*.U!n~/U~Xc?ǝ9nwn{pj7i!$Gّ݂yZvrd&6$Wi d>!7{_,/B|:qKZ]KßnZuiJ]kK& > gPW^Ǯ%!wգA e*;;"VYoe, qmT[o}IPq*a͜<ӽWTwڵ9JEKlFt8meI=GP7:‰8T't7cqn}qa30U(Ƒ*i1h2\կ<6Lx"<8rU ^v" 5Ϟmn)C@ $$P nn2|\p!Lj;mҬX[@(i8͕)Y{*c.t;mCz nRC>%D뿥a&I)R#wpXjҥgywGR J,5A F-.$m۾ϟ<$D{ԍw Ru}`x)m7TIG.z3:JLJ}T)Wd8P(9X;[R #̳ %΄j֡ct1Bao5=zn4bʀTVҒ/Z+xAUT]; ).ǴbEʲ_Vu eICi) JQ:;wP@dzij1[0^mMIGГtGEN@Uz9L$)쨞.J>Hy8O+#plR_C:n\PC=y#bÒ1r㌡ànǡ?*6:kr%uO!¥4vA-YkJZ7PV)~`1r&㮫@-IOFbYd܊zzVz-)O,J_Jty7r ~ylkJաN;|ԯ5ǧb<֑kN.fU%*㡦ϋ Kz/LHvN, j@RuK qJE }F t|ˊoF8O0U9B6 U=܊1ZёUnZmѰ./eBlyE]S[}/ rڬ#6Zkn1m+.+_;0]%Vݿ%W3\9tP[n{Y7B'Co,;R(sM֖JDi@i*!W=!)KۏY-6S!UYq##k2~aHi1-ťZݹ WWWqMj{jXQF{u}n|ϗl;* + --:!6t=>PS(2䣙:Y-ǃѪIk*RxCIn\G4K2L%8! Cn@ݳ DO)B#N%6@q<9Qʜ'mzZJs)y ~=ivBe9HH& R[A;|`OeP!4JҝK:pzqsouWRaH$(n8Ef\ LTyͶlVJ6M$:ߊVu7C)K%+mդS[LTII)!ZFR~< !D,$^ Z7G<#ತnYZBql;*fRW|үP׈C[v>x:&G\tg} KiZ:~ˌ}&FQlJ ea@]>OHFGwa_O6,Q%W}m3}4,M8*QHQ4Wao]V;@5{YC3b/.ּ5p`r–)#vt&9% )j*By'n~c)9I"\؋n4N+ ?:+a- B :~qFءk?˷lTJOQҠ T?aQZ*; ՝(TK2)\v:dTdgLSNuh .)W'T[-{6 vlJmjeu3e=UTu}dEDߌd NMԳ=r.fTXuYR-#Ua1TdSqGBV=>~8g0R )_GَtzC^؝Mu-I*&&®F&<[}KܕtZoyi/fjOc-i+ 4 Siԯ>{wO-T3xeT*U~!HGWd['Ȭ1DJ7궤mV>7]oęTCd-:'d0}^)//)CbRZ^屦Ƴ5RGs&j91o pjm 0UeWRӍCJ<Ƚ;5(s"FfLVLzlmC\7U`RujHԃAShh2ԯ6TʑMr )yD[C\ݵڲJSdǩKҽ2=Z3AqBlV!VF\pREUNը_]7344[xm 5Zy_=T8u 9F < [>ZݺzZIZ+9n2!m.!*-2MaH6k9t_܈u/uq*0)!Ei:8SEf^a d(_d#2I2.v+k}:'sHHք~>|ZIgnlKj%B#)lJiy?>~} :^mciONSimhR~+%\r$bK9Z;Q!PBJF.R;rMa=-he¶V$u%JM$S*&)ʯUOqL9lFEvY"J.T5!9* "urN1Nhi;G?+ͧM&|I\MTTTKGvO>XyvҐ}Eۨ}wuJ̿S J.& PK'Ү8ci+S +<=Ge5'4m Ukό4 ./HJ>it&>- |4P,~1KqS\B-ݶ_+4*#VPj:A3D_Jen1$ey}(odoV.f7Lʖ8,mfLzCj<&-+1N6beҺAEM<2Ӕ<\s TWݍE͎[AM8S!c׏(-W Hi?ۄ챛 P#k'L xPᴌ.v#;%-Ɯ嫸;{$B txʤ IrSqĽrrKe!N6K1Ӛ.ujJf[+*J >,d2ZLӀҞ yJ[@<؏nAe̿Or+QR;:5)m}#]I9!F}>3Lvr!!6 ̧$bNIu!a[Q?qR}JO.\.GU9QYKQֶnhs=tjU;/a0^)EZNAc]:0*taSPІ5( $fCf);i8'P`Gr4lM,*S 8ѤIwvӡ.ZÛOLT),L]Y5;q5KebyEFd(40ML~6֖Ҟ}ǂoCyl)S夃;ҕM$o fY͏W+2'!R-R=8*f׳L*ULmdž[!JJHUSEf*Ay5(uu74w+IZ~Z[M_j.edHqUn;m 'IX(A*+l@HUX*Urk*DqFӉ"4OH灈~3 +!wĹ)@Z@U vFcmj{UQ_Í0͌gJ;^v z5(8}zU$|ғ LC>@a- ;Gu:-^R`8J 9ݔ(:w쥄@vD쿶2yþDV6cr;B֐6*.~" 7IkxrM@_Z[B?qLq9/=Ƽ*%"#[oc,5yP)T)!5$ RNmYO_>d¥D{s*ʜf+'2TH̷5m BU[r\UL<(E\fWl^ ܍TyZm?6WZk]cĪ!L$jjKFjڹNo8SV)SP`*s9 jjRPT-oB2017Ee5)ZI+X@>M",q4w4 X] '$mlҥw)@; cII AJyW༕F*=* /r~~8Û?> Ӡz8Ja?O[ha% f}'Y4J]vTe JZS):mH*KɪYӏU5n3llDKIdb; t$pJ,){F7ZK^ i2󱋌oχ_ |M'ZФ#ⶵ r(eJV! %<ԔÔu&ekP]?>1h,p_e|GMW(p'U:_Q lHqKz)uEExUrth O!fu}/$Nȿ(YGۉbPT727Nk-_=]ZWM(tVM1W9 bJIsiTm^wZ诖*1?K;o̽)R GZ:{+>Iz,+^i!Qujpp1KASX-"[LU<%; 6%!b!i:[b"LfhjtgR,(ۋjMTtomB65:4u#\y{-zΫVJbu%E !L2υF_H;-W==Lj4%n6;d 0>XTa8RRW1I #^H"u{ }#rU#~k!2|#wrcxƼBA*;r[}?ьOqD̨ފ %s3 Y|Z:8P)J(g*TOڋ(nk9ǻlhd#W[U>FʉD|%略2R@/aQgXܬ?%jO݇O"辂 U)1e<2hR7uM<>畱l%gmqvDQԞxlXܔ]K.sԤ%V#p*[yR -}7>@!p l4Cl 'V2Ҕm~x ]>*4m*.K8p:z}~&3*WziOeIK.ku')ҕsJX[&*.Tw[ J{H7KY^._RT[S2JӺZ:J~PJ&mɸ62zzA?SNyʛV߼C>en߰dr_ %um%.;[hMʊJxLY*TI&XJŁ="HRe/=9{aiuqiV~ㆊ|8kjL J{V@ @Y6kV2S"`}%QYiufl Rt ~DOd!O&+ځDl .SZ8|iptߛ_+FCB+AuccKOwWWx"kJKbkx v?~_2>z?Tulvl~0%GBYr ~>GH^L$V-a>R]?eɒqhc-A7*ժL,?UIIq:WӆSf%qXpe:5JeAnX(:5G+0fd)Jy@\0TtX7P52URĥVBS|Jv"y_4I2*JOS^C2 [H%IN)Uvi%f}EIIUgtz'p58U7Uf>[j;phHwg-VX겣yKOa 2AHSK% ߎF'U$K'f"e{s"㲖Rܡ@* bR]2CP R[ pۣqniRnՊ*D֥T* 5&H6HdzE?R+:/N(!VY$G*]nHa^M-na*OR1D}.2ζĴmiN=FU+?v&^LVM ҆Ŗz#G )xwmԈ {Y%i}TRyNqiF4)(qܛ'0rZzZ&zKEX'x)aVJz`mCATY$C vuXp;}Fo0Az)ǓZ}ӊw³)$eSUmyjOn8@o6c'0uH1umO(B]Yd6o%-25ԕ!ZAQg؜T2ODkZRXէHoc|& z31[mLTp-%]9\Vy 2e!áJi6PCo!ZV+>.5F! kCzÞ E!|__()(S룡qP{o>~W* mĒp!ԅ4CgJG1@%?:gW MŖ>SY~*:KJR5"ǟ.{9Ƣ"͢MFA.8Yq )q$\ )_8NtE qA)M2$*{7=&3Mkv?jl6[لR*’NHKIH6yw0N"%&(y)E@M2c;u:kP7:H .EAK N\T Sk+VU+mmñH-x,[) QRJ~Uд];x@"el2/ *biþ\ $*'QK2A7.vԑiUFBU5LvvRt}JInxPZ KFM's($fX~4utv]b[C{) J7='ëӫƲҥlegdhIf@1C@$IqVڜ>&nUKdXd;s^?3q)g- fN!J47l56uU"5@rYyOmFA9C8rjwRg6"GI )/Fu"3% x䓉ʼ95%9N:PۮezhW.r M&)( .ErӗBB""٭( &伫)nҫ0ؑ+۹ZUObFGeبE[Xi Inz-)Z~ŜḚ4՗&43Tmc8!4̙OL\6+imG˷72ܣCiIbB)HBo~4uTԊbl'dq<)+uK,U vCMMMu.ǹ7u.^ю%:˄WO-;=-:ZPq+$6Nvq7GST֢^bx#!Bh5ui ںWG|NĊȴVמi9~D;!tPqLZv8N4::WT!JeDTu\EfdIrJX-Q^ʂa`)DjnɴWKa&0TKpCm%ށƤ_eС·]5JI.&>HJKM[hZu|K>xLn-Y!H58ی)[&PP@Eg1KRVV{:t$zbQ2}RSuН!I$t=#2O=Ko%Cb#R錈;(m H;J~b.Jˍ3AaVq{Ťת8cj2xsJOTTIԹ7)Rwr,,~X_?Giǜԥ+ Cw_˹;3J#W*{JZRRK**hnnMŅ14Z$#S%#yGAVV$KP:$H>,fftSZ:RИxtZ`iLċ[QL1ia`e"*I'Vjd@ Wrv:mpg!i'7֏/qnq9Uùr_I)Li4>PRJGvH84SJUuRH[mK@?Ud#e$yiuk_\siDo}bmV=j "S91\N&!DBp}1 1cT)eMKm(qu-<)GP)y!VWqnJǓ$F4㓐AqWЛrѵhVmsBWmrO<&0Srglbg7=5Ƒ?SrjJR5 *r;`PA5M-ɖHBX?L6hM-M% QJ-F]Cy*FS F޴7_8:_*\2oV$cӉuʶYiB|R !)t4RJ 'eRQҧT;ñXBy~SaPQAiRtiTӧ zZT 7NGbtt|M-Ω{lFb텢3 M!Bq&5Iy4bF[qXxG Nj#.GK K¾¼)>X/.}\vPY{RI|'DpӋvB7eVO{oH ^B{bCuu J~CڃL7ƕ€4x]X}( SC2}\<{psl\su~Δ;C̸ۃm UFPO IiR8焐 ;C{`2oQ P^{ :cis̪CЄ&R[kK-ܺ5IӬHQFcFF]> (t<ѲV pd+:G3۴>{r۬Cv@\ )AãDR,Hrm::NovNNBOx_8 MQj.M 9qK)m3 Y6HC`,/(4IH"Uem}{لidqҔ{\aڬ1ijKr[- sH($R"9NӰߩQ'J[WUC\mșVYzu:@<~Ua=jKN;g0SKn Zl֥bMaJ#60cKvkQ٨iv<~Y/Ћ'FM 1۝?G;0H!MߛVTЍ?gUBUmcv \i*G!+mG=qfZ*1܆4NJUGGʣCL۝Ө% ۽f.1i>֕M 1,.&AiR7fRee_ڥ͐It%Ջ~~?.˟oǖ=L6n"CHdJE)/TKaKmbŗHKqh4VԻuh>!"Pb<hkT]Cy/DMHz^YE+U8PBJz;N=$E[J/N2|J~s[i2rO=Lol7RqI^:DU"K#eusiӨw:TJR)}&ֱWP6 ͏1DeM$ toxy5zW5i$N2$k@BBQ ؉>R_ON- Դ^ֽ1OXMnAZQ<[jdL2Kj}dXi\6vC\Vc~oɐBzP; NxJnjr%!PF+ԋr~V{>\N0Xm˴%BIQ?ی55j4Ss8U*DꜢRTxN)"(<tGGd9O} O 7@'RÊާ?bҙˎRtJGZtaqB^l-'H<(\vUʘεTd<$ a)}RۉS¤vvB{=7[ Uܕ[[.Q,/*̵O L9 t2Vnz^I^X!%1#R G"4({iDÿaܛNS0mOL}#Ƶ|EG>i/)EVl>@as1 *K7Y\.Tm%IZǞH|Q`TIŀ*Hu_;z~'Ta 6[sg1ȍߣ_epn=1T[Ziu .9K~y@òZJuC6an7skpEMIW.8H|@Lvyw[GZ[e_Is8S_Yސ$[ ?t%[Bz4`S,O~2@e<-_Sզ)GOkj_'IiPTts{vm}an}q}+ zmm$J/ΒAG߆i\/+v߬~xWKJbSQa! `H*Hʧ]%D5)s>IuzR{ m߾%:񞧺h鞸O*ZlzO)1d)%@; s$P.r*;du@{NPĹ>JnbGŬت7 0h+=#P:<3uk{&b[Ir鶭7 \YJaS\*IT}hBU5Uܩ(THaCH YEJ6<Sle iknJS{ӉLȌ)R TqG Tif1ړwzcRlY\ (+ӅJSxtc5f1iXMU}akBEP4:% zkI* a!V̝)VV6Ԅ>^QL< Y TF5wBMtblegL'%T864^: #4$yW1Ĭf7(D-%jZ95Np ¬k)Z_@rԟp߶(TJjܹtc<6CKIaݐ K4%72fԪIr~aNN!§^s,M^|Cb6ğI"c! gGI6: ug\PU~/nysPԿY.'du(iP=7ƅLmaJB$ϗ;[$%n*VUq˓p9pu2I^V2ZnJ}:}?q:~ 8[L+?JB61s1,㟌%|TuuGJyWg' KJ6ԫ$z߇PF4IZΛsw>Xe d @ڎnpyz[yj-M.JRY1!P+{8^_̒Pe;a+gP+2SѿGGj]J5 \?Vâo߷?WkZtoV .lv5\BuOܽ˖|q+R^5k)iH͆*Gn?SvuJgMRo\xG[)AaI2nް}}yI%?O"_Ӎ <+Jl珐’\tb-ۯʤH:ʕ@*:"1n㌺O q,gFDZg1ڐ<CJ)R-p-ڭ}r?]uĽ ŁJ4,ߛ5g̸~RejR-ێw's {Pa.>kv9vT!@Yv/NZ3*w* qwA} %!+*):"F:nO|,k7q) jD\qVF<1Tfu5RPheY_c'[ne*ĴڍpHr )x#SK^Ո鴧ZC{)D%Oxn|F v r3)晏knKU.CmBG='|+.| '_${1a0Zsle"QΞMmpv, 0STi?Dd8Xa$Jn@ jȌ?XJ°I.:bêe_l&}i륣|Տ/tS҇_7?埖ÐʚiKOmomHێ}GCm[mQ |oŒ%6. HP‰g7-:#Ɔm4{:cq6խq\zJi mm6 ?SvHQ)9^ yw%|:lx?p.ǨTԔ-rAO°1.MISKyo:ZO5!F7,}A.o=ћp#rW!R̜rGlc9I,2ͫF_Mtx,2>BӥZEbEF ;Pu kqm |rgL~$̌X;DwA vYp(13=Ny[HS#>:R˿}pP nQ2& g$6_eaM<]a*Jbō>*U6گo?=+X"=> _f*S`" 7Wђ~yEdlE(Kl(kl# _\t5iT֫j[P^H'CHeۻϫ58(ߥm;"繶ӑJEh^4o-uU.\`*7G9_KjHTd,A6rŜޑFc,Κ8HamV%Ȃ9a Ыԅc/_RuiAq*VdR9n)Dh<@boRk8wM>kasvYtZ_ˑ|.qpn?o+!1AQaq0 `@p?!g6)T~£me-:A~Y,(ҋM T1Χsnva־Ot_4\l9zz鈢vfb ]I]gg2=3`E7dSL5Q4d||4[J.?Fnx;㪤-ͷ+6Y_&!p5pΛ(M;1u#~00ge0&V{$m5CKbmRP0ݭmvȎl5_&"߂ W R}4&GӠ+f|&N:܇&nhizI W1*&\0]7HAce0#~"mem8%|`=B +3(m8 2(^$G,ctX4%!r,U n'l::'.`8P&bfJmM9'L+At1g0*ͧi9 T>_( Op 7ϟ}<_g PϨvo!sd(Q[Rj,`{@ L7sBey>nC O'/h#/+@v&ZhP=s|hrZha0詫/-'ɬBM8 9*x8ky];?9wnlUg 6Zc{kԚȍof+ȍ6D9TEnA*A%)kvӅ9 N.9hO!67$G;_-aĈ5«S+;h%@[ FFN6P XNK8WIbGƒᅙ/ @$Rh R%\W'kԣr{ Oҿ?KU:U@68V:: />k R^`NwG /һOody !}C_-o%k<[} |tnd"wbDд9;c8JSs4GnX$(iCfp ڨ+&'3+ ]x$op)aُ:tz7_P_.з[_y MrOoʑK/ ӥ=w)+ 17Ltbʇ1B T4x `Jxcv)0IOl+O–v.V.wM} VVG_|MoPN"z: E<1Oiİ5^)Da7( Ep+oBeDd*Di]Q`%EkœI; ;-gk ,02$D4XBxB? a~rCq)u??i\Wψ>\d}o;kz cxцa f!Z(g UhDVb>"G]pЧ%$MaQ eo6x:B,$ ښtж40%G;)6!OBN< ǥYZR^g,@)Saz- #KAП#HkI딼e;37W[rS:M]\JΦ#;idX^AC `Qy)'1m^l1$(jQ@iR%Q51አ:NT֩mP+;j JݴsM8{Ǵ:#iQjuT:QRIzIN#Q $V.k0"T V'nR L)> BEL{!dyF}4Q<ҬDs)d!;EHc)qY'Rԅ,pCF2R]$ iPYu~3 Vţ$9 %!eGe$4TmΊ/ !䕾 4qRm]O!/B>p}r+g|*A K{!6)&3Sӌ9&Jc@ :pԠPgx`4 aok& R70\G^ 1 x6PW?=]${xx#B@7ț0_: 90DSF:#i ?@/Z#A׷B)4U^ȁDucb :ZTBG PGȂ͸5n |p5cMbfc( 7n 6VkWxF;q$ cY2Bƻ%=,Ξe <5֪ ˃rMoƀTJZ/jI>hP4$ &oLDM&ifyUS{` P2FJJ nZ|5УSiyu=x429.`\˗w2N%t {XQF\_F~eR'if'oq`>zQH{( I;+ h!Gb[/R4n6|_~6ӓIffAl9Iq pwѳ2t%\.mi(K(Xc u Ifydij bW`dnSSXkқ0fH|b|.\O@ͮj 01p@ϓaXیg [fcE#pΤ{a^51:D 6Ju{/`hL70SL*% ރ((w4bn9߂%aS4R&qu9܊i( RN KSmtfY`b)z z鮙 RJ1X+kO<zߜ٤ .a;?h4w`,=6e ^߁`)(-آIkFX B3c&s5jnt H嶸P/-tN9b.U# *e9 ~?_(18"7 *^<)|jQb!k;*&Hy^R+w_U5vzIujx)bF%1|4]ii䥆Œ] bB㥤AZ$Kꢏci{irXS*ri ݵA ]y10t6y e2ca혬7} @>l⤓lJEc TZ`i4+<&ЎY`!+*D8ńV3 z!;[@vA'=^--l셖| OIGVS~І](4<FL&ㅐ`(C)ӐZ sP]'z*C-' CV¸t0 ab'Mzt!5o}T_~>OU b{RCp orY /fAjŸ8Ăn'{&Mφ?lzʒ&x-v_}_nTRѳǛЗ F+^v^UƋІ -$:i@&F(T\%Z r:& =S>k6(f&vBXTXL>ӭN bi[f 0* xOe?arV*RІC# z-b6i@jo ĄD22jfzc/) ׹y5.=0lΩHU "9;#$fN4OeoRE^0!0s&JC9H*Cyˉ|B3jLp6amhC nfm %ZQAwHY5-/X'ȡJ1;@ b i m@Aps0dS^TqxFJβ'0fdJveJ '\1[e_՚˅_o^r0 {bz춞hduA*/}7ĥJ45 Q$ɺ"k4٪xy$|WoN^M:u|?xLgu=ǀ0Ay ֎όtZ4ծt!dǻnvȷp *xQ}ze9֡{jZ!P=إZκZ;(W/.vBno|pe*==,̴BmЦM쭣WXz^h2_C k& 1Y;fTRCM{DZ c߇@[Nu6w_O?qUsK}~B]7 EΠ*z!!Ҙl 89S$0 eY6 \`2(]YWWb1 :VMBweͦB%5'ŃԠ̍ 'oė~}4Mt<f6K՝ g΀AADTYND0͹m&WS8u?~ƅ"q:A&i@x(sca'Z]ebMhӀd*Dx( ڎ`٧X:J'pEk/'[qT]|Uj!P&-đY4 P&w ߜ oGp^# Zch"׳A4s0S'{cL?\H :s^0j k?^QЛ2o%]vK&;eJ*LV`BĨwG;Uay%eҭw 2D! x# vׇUeQחU +]bU_0qvy3@y|>ӫ2iպ !bMM:9$;G˕ TܫrʹjHU1#R@hS͑C8"a4~klްh`wb4FVDBHy@~I}oK" '^rX̒ Sz D!]$piH\[*«t/{Ӵq Ԗz/.vztP]FJGf[{?zzAo&!&J}B[upL4 wtaL+n-k VsHrL<9) +PM)yqX8 4ƝohL |9UsDU='V˳B&9!@7vElF}Q ͊bd]]1yf[xbb5DnZFӚy9gO>9nzĤr b:8=#M&P᯦(4j1Pa^P.#HV$P8817a_7\:GXֽ@tMQ8Haڃk~i# nm%sh#&qA[',*z91ѡbP kU即@;d[|\6&&pȐjCs"T7N$U #Uog q7hg)PVmpufo/iA4ՀuV-L:7槿/畼5eP.%J(cq0@ c YDʢ[?`P%wN~0wAdx(MGsN: idupUbsABy4kmp((UKZcȸe6փ&2ԝ@z7 C[Sm+E˦N_e|anMaP DK1(SE m/ƍy.H 8Cʑ)(")aAr!Ld DG2x 8; Lٵ:[[KBPq;:u݃#*dCyul`3;TͼسD"d-z11y<V|Ȃ%R? v<8{] @yLfB_r)R1w5~,dݨCbUՠjWH+P6e&2px =A#F?O𡹈lv=M:Aj^a]@QI2J;E:2!;'^ᥒp@xrc<,@+ZpC\aWZ.̽c'+ypSmbFޔyR144,!-l&& Ƭ/[ (' [ڳ+ΗHEBw,hnq3>WS6[.D8dZ'jU+J@C%*(D~P45,%Ǖ a/" .1EEDl2E˲pSA%H-H, P$ɔ}v$*Q1n$<$ɧlFbB_C0w "MhJBGB2aLY~C`ӱbፋhk$ L蠗EϾ2<8eqmF $qy8(q$y( xa= ͹̍7i" +)C.^.)/mhlcER؉]fR޹M }hO5L{UHj$xSk֣^V`9n-:Ψvf:Qkju]*_8xG")$R?>+u or@!F:Cē棇JH.qX=/{w*~Ini6Qm=A^Ijz;؋ׄ#aUxb>]KhaByYG|U}W0XRU 29<\B喰]u@)VҷO]WDڲ9U*imT##Ho?!  B/kLѨ1]R)ElE  "ҩh=:kM X7b2ංդn`-\}co "zE|Y8=kA# 7Jz"]Ҡ\#઻ ͺ=@/M>~, yѲ('J &:csyF 9nĸ42Hԝ#DJp `cv5Pƣ8UcMes &o^D֕%:fht%zb~QAŰ,Ƹ68RC22̲ NhDAc;za>NB&| bȭ HyL %Af.[\SXHa˜U N^ˆ,2)f[,>#߿.]>/E'ڎjV٧v!(B4=m3UL5@<bHS mm=Y*8P$ ĤUTy,?)'{,XN~/<p&utFm#C] B#LN7jG| wCrУ%5/XyJo&q(zaִGMbY̠q?넗ݿ2B MO3 C󖄼: O>"A 7vVjA*?l7 .ܕ4 !NI^@1#R(ŬmRFyj _ƈ^sϩ3Ά~_ .Jvvϔ8 7?J+x].-7w ށKz/b d Xcv٥]<^৛"癠$Ɠҁ&(G Ad##{`i @Duݟ}_FĢ `'VVG^{oMf>/46?ko=Xxu1{JZW5[<睘* te_yʁtmQ0S^O "敝6%hWߛp+[t;Kʘsˡk-`x,B] xofM1`glF8 ۣE4u߬ $hg~CL! FO Nl[]AN!Ru+C_L77gصZPEu0Z!j@]>q2`nA"[RB5b뿌"\ تG̚7dsRZL5[&d֠Weh(+ùl{@aPnZ0M?!yg+lQRz {_ҍߴ J@T71 6v#EmϞre׍6+W][C ,:vp}x "Aj,uAVZcO0%xh%KMϋ|2 ȷ5wnBGpﵔ۪3Z: <ۉcV89)xrQF]ۀ޵s4h!+[".N7(?p6jIB`SߣI&T˞s C@=ӥ<+@orEi9>7ZteW s̻F M2u3MH98vQXny@V%h0`L4teˬEcdtN$.EHcn>)p0w=HF(F=aD4Ms ([+6us$f5+ۤN T -}btEjVٯqRUvu6l`č]-6tD}*`mN5};6uק%2 N`; (@J%jb9D\$bv=#_'(R83m܀#NK#6/Fy/?z:SAY-X7.H7Ș*UmהĮSmD8"%KJ*#0Q.BȀ5 x#N'vD44*%̨zSvn]4*k馊Ձq Q ,h|fv`(6s, G3 TltEӴØr b`{4."4Hv&#/Puwe̹c!0Wd2'{WkRS]ZI5#siݲߧ,3D 2'r.vyXWn$)d+WL1 >@x <`8M2OkbﮦM)CٚqP\ hP B!s~ͳEaE=G P}5Tkt*~o9Ipn*J,IDJuQ Q0 :7Os&/A-+Kop3JDUUU67~<` 5#*( O6-37Y|qdoQ]@M,SSg{Ht]H?msPc0|L=!R h ף5Acd-@]͋jij:2BW3Rة_z[Hʁ`v q%̚-' 60 ӗ -mD{1Ec&4yШq3#!??#,ܯl|3Ll$F҃e B0΃OAxCj!``}o0㧦Ǖ ~92%D;|TPnTlߓγnXlˣuGƘg}"!6M~ 04mbQ:Mw' A7ځ GT+ i&n%1*K %ylRiF|L-'&7e36@t`tOY?G[Ў`7u5OF)~JO! o&jG* 8T @@ 6!,;I.vPAH>Ӻ=&[j0sm𴭴T FKbd{gfDnP6fm@"&_EBeEm:S8īÒ=@xa.HhI= <3lit5>|?Gbc2iC1Sb О S֙ "k|{[֧Ϛ"wpcxc{r0MOr G&iwG4cT%#>IN8KWP(ɺnu;7,Qcx dx*v#n1Lq,zTxźQ6Q_rih+ Vb&^gp0@]=es#lM(Ulݺ|r59QDq\)g*\,2b`p+U8m>3O/ щ_]QɬdkYlSof #zaT2`2Wk9go 9$,QΊ[AxijxUxl>Ï<:z2zS;s,>NZ.yx,m-TQ{@(VJގQ i(p+WK [HeN1!y">l瀉V_r(ƆGj9IGPP̥ģApTEi|T0_ǘ?sK/`(꟦!:Ǹ[NTCcX`7Ҩpjfh2]8@r. $)P,p"% oAV glMlDU!(P6m?و $g` cJ] < BEAP|q֯5$ymk.R[H"R+0j.| Gߒagw-/k'QLy-6m}+%J6]*O1$ҹ^Y'II29fH дp)S93b{0^QШd&6z]9<5b¼^CCF - 7u!Ѵ?戃7iSaK4ݩbi'G' T2YHa # Y;W6ȿb SѐSV{nޢ @\R3YyVV%Yv,s>n;M*U'@18=P@@> '( OIf5JAϔzSO4(0 m6Vmtу3Iy#A80Td&1Shixxmbԅhas5u Vq@rT\" 3&N ҕYinuo`B#ָR%:rjU|AZt1v^JbXf3>tW5i074lZ*iPåȇ/'q7Gj9g|YqG8}}QsI@AqЂo`=/٧Qb%Hwޭ A3mVX$ļLD%.X(zׁcޭ5d)b s E6$hp`=4*6x)(B'ȩBk/)4 (l4[;1.u(,zJ |;A\=.*Wۺv(1HW'R>ݺ ;N:@ ,YE7f#ׇf,6t A4ңhzKl̷BV,TBu>L9US$=5뽀8Z'ejWA,P+e|N0 3_?sM()k[dұtTLS.l.򆐕 5Opp㯓bzM1?F R`9UEfbuձuXM}E5c>FCGeb6LfEưS0l ʌد D]$p8Mj0AMF[.B]^193lm o6.sxŸsB5N;G@CSale}wTҨN'W$[LŻ\^''bwY}IyGsjxR9Ve+^ x7!-+DUBko>M]k+E3uLU ܖvTZ `DGb TexMȄCF7GS-x-z+4TC૵‹51nqAXk"=`(ŲA1hl9R͘0rPYx%JXvg8'apWGݸ18/N[m4mAGS.~Yn< y NqbLAffr0,z" 񖅅 h5Y-0wM&YkX.Ad $h28}~ :6(¨ԩ)aRXy- fa #@BK5A u %JHfJ@Ұ!Pռ5@|^ YQotAVXbM14t=A,j8wɍ~9"k-FIi軇iR9gk[1T*DHj~J=k)@ -umŦfi.a!BET0)vx &bǡSBћ]U+}N!8zP"\#Mjrk(Sɞ%D SF`zNp~]xI|1{iP]ߍIeYҗ\kPlo.3oD-lWwTA [,wFio?*q/yeU)KO0Jk$|H׋Gz1t0/hfp{h*HBӀ6ڤbn^J>%ʄtU΁W^ fZP*b̽p +62cg $hN= :ūyf[vEhޤuzMmCT5Oi {sB.? 6fXh3NHIJQ0jF.J! ).{6VTdt#7DBE,X`8,K!J7@g 4/AA.(p~ѿjn }!7|@ѓIޞRCJ dk)yR;hX5;^[H´th{"uOTǽh Cto~nt\EMXwU@ :#>7({ Dxo2&C $Ua GO Cdx>:ux6XZ;)˸M&3 FQ4h@T`42:]HMkR 'XkvvI">rmOc9ztN֛z=yaM(0}y2!/o RTh|7+'Nǁ, QG ˔}Y3KTڕN[nj_%uk) APپ˚7$Uo ڥZDvOR5ߛT|ptwG|tfe "FcSL7`b[Y%W, FcPCCSHFrhub/a[e8g2T!!g/:R35ZD}β4ñXXFI=AWӐ˘ 1I\^#ն^wraOKPpߏt0>["(,5?wGe7--Seܵվv~QV0DȝqXBmu4 ZR]WeeI~{"k`pn/k膿o= b#җCVeLaaCE&UAFv#7z‚ Ee i~k1` $/H#g#xOoDuowwe8INη@ceugH+<gޔ: SEY>%:V`m0m4m@|в:.y眎R'GOu^pGг[Dn:[M^ШgKu\+VtBHAv5dW7pC{Aj||.]~՜GѲhͪW_y_XXI5P>,hg湬g 'Δ|L,`ЊEga["L}bOI27+2F GC'لKAUi %ሓCuHT?ziʴDui J&r2q VN!!` (CD͑{O9(isT0uSnLOVTYhjF `LQ*]@N $4|>p.GͭNttWĦ || mWptDGě<<{O' \ nzrEM8-aCZ]]5+,C+,2;@8@.5P 騄qܗs/q츓O}~urxݺ`GX&Мj\]$1jJ0pK \РvHqO4Ю{;gSVq?(bC]{LzwvAVg}q8L6؞0GIH[[&2-(ч8S(mOw%Awp׍J;1A6eA{4xW~42 E%5IA7KÑgP]ǹ +84%RXdVBZiM13xݒMʨ{9bfQ#," Rj ~QQ (>s_M2<h}0* ,68=?SQmVdqpj[g [0!8;Q,։Z0ZRtK>x(5sJ8| "򘁬K!0H$3Z%yHV)jfhn~[U͂qKtoZ(b ဌa?i臃ȉhq;NS|/V=/$+Z Ö +=7|Bz_U{U]$ \n\_-e@m 9:͂X훙`VGͅ/Q h@bw(mMFhmu1:ɱ"P/$+7ӡ3pABxM7?3Q% Dov.6'XOyO8Z!ĥ鍵YnH;_꣖N#qE05`Ae=mRPS N >Lٸ;Z#wDZ-maZOMiX q@BpsO0"=!5ѠQ*J:0ӄ[/3D=_Lhb_"$RI;.m4L[-VwyG) Z`C ,tK@zq EjDJ];}|]h-5Ukժ+ I 9ΰWȓq| y:^I`]I3vZ1z^Zy`֥GؙoAZσ- G>8?{FhBؕcoye 2PS^8%/6D jQLn01dx)|&yyn$]ndKT6>xeAjF`HGYd7koTbU%hpxQRk8I#R!MY^j 0R뚮 =T-|5n QL~D˹ OC;68rv,8RgYV$0DΗr9vRӪ;GKb_[1%&iVJ1 Dq́W9 >#qjSR{;U$K2Edp,/J bm7S%WKM!OPHWݭI6.ka4ٌ[QJtlsiQAȬV5?)0](T؇͛qS=ϡ`xA 4E,x" T#9h(OqEppڦ`0ɹs6|ɒ}6˕x_SEFQ&3?NjA 20ȑ]:sYOIMGqpz!:+ZgKznmත s1YLZsB!) z(ƒ O)uXWxPat#( "@SDK uHR?`6~'TH 3 |K,E (=g٥"h'X4 4F)l'%p-8VAepT(u],"A*؄U ש K } FLxyⰌ B!3XwdHnE針Ap#GrϰZ?҅C*|k4Pl䡪UD*A]Hf3BLs& NR7xn6W  )z-hWSoqğ peF SoyBDY?khMȇf@rT^DnD>Ҷω, Z4ݘ7WߏYC~.Ohu 1NhN |H:y~;8l |iȗEx O:zHtMxq}85'3ʾc}1}7>rR}'Mx$\)XQOLBnscE?XڅkU_3 M*]\ yby^sRբ?}fWї/ ?E'2  E,b.|:n~9H8,8&6Q?<]oQ*ApH54DDvvoɊ M2^'%Q9/Ɍ b٭1 MCflJ(Kcv4jkI(|d-۽PZΓkr[ҝŮqհ9M|s:T4,$ځ~R8b Dp #Ҭ5*4Bi 0alARű#Q`"tUAI+1~Z*-JJ@Z~EG1\' AU@Rj 17K㡓YxCOHß[}JF4.xĶтTXD(]  )u& Z7 膵^8,4/ HP6B(Yj$6[Qs>;!_pn#M {&nۓ*J)5P((VtaA _ jjsHbfn7cLAQ6p #\0^+_9MMH@pES-y}XҘ݇e>{wƾ/¹la*HڋS !䀡rTj旱N}ǔ*}`eJgud=!ӷ5"@%Zć3dx s) 5YP[3/.ɨJ3k8+ tC5LJ3I@$Ts&@^_~3q휾-FyP-I 7x ׫m^_x^S9.9. d2_ij--HM`"\t@HE'TRW{ OdS\Kld|f4@i @Aox:S:Fh!sPHRD&7sML(o}74I`lq(#n`63=PB+pJtg"U4Ih|fS8+ڪConA;v.pwϾX,Po݂b+W\<kJSh1*w)< [♲9 nA 5 -RB^g LYBm{qKSQ`kI+ ne5 M$Wa5^{*r$X^#gJ|ÀEM_5y@7_ÏMu@v+x(O WJ?TE_fղ@# `!:M 9fpvi,dVZ\Sw$Z%[~÷Ƅm-yAm5^smK§A f!7_xr=MErMȢh54v36R % cTN @.. ,lΊ37${aBe" 0=Mg Hޱ \efSe4`"eGg"v &>gI퇞42/CKw _`|F޲!XnNo2XS=zvM侇>_=!4 ~8nzhf%>LѤE` Ovƿ-įUQܮZ:a%f$V&Ğ,"LW F5Tҙֳ>r"$ƃeoLK.%j6@ʥeo,9 R) aA=lfm֬*yǸM׌)彐Fǒ _ ۆ|%Iq-Pe?I& Gsp}Ŀ>-Lj&`LcZv*`_D?J L\T;OL5,6諷cAQ&<@0(u#(Ϣ(K~_Y'RDA6 @l`7t 辂-.$Ǹ+7C(r qELmC=n< TAtۚcHZc<6~9p9&1 hб5s@Mڄg>?R> i'pPjj~_G.5@PL$^iO4-rۄM/ ԢXAj\  QS_xZ$|OI #e!yP~-u3l`n 8+NpX#KhtGA1L`5̮SaM$ MGa](I) *!1AQaq 0P`?$pHRe;&bOO5#FN)-I v4O85BDT rW=|:J@@ٶYK׮?_S9c1O[R:3È?GDg6+)RLJ^n,7èB E?=dqp(& N EMm7qQ% O*`7"UnaljcJuֶNBRR"+m3-$د(pWz#"7 t*kD#Ng:~1;^>Lui0 blm1s˃AĚxizǚx7v%F:<9b6h`7ӻHiPPѪ0O4ТSzro=8zb%o[05XW /e:]< "vqY$$MZ(P@ +Vi9]=&=)98b ZB"O%-øqke=7M83lXћDLMOGO79 2ު]\ p:q 4m-'g8bf9>~86?pykxx>Ƽ2tFj"9B@J$0]DjMqZ`}ذHРMdؑlD;RN@}/,/D2dSXn#XrN=gbwoCMzcO?\&@N&gwEpJf"x}pj r' k^R meMN) 7;w9~@H7ĩ5kXZt/faFm5IK EޥEm^[Va;lf* EpC.kZӿS{Omsv9Ǝ P]yDs㯝c;{TP3Haڊ}jdB_Iht)E=o#b"HӐK&#M-p G"xrE2u ۬-rX(@5͘Sk[hW|%F;=2*y>"`_Ta[1TI85~dUXJo RR#`tEVwDq {3{ᨎ1T/;ސo6b| {"GޏϮ/08T WQ<4uNx֑5 ڏ#fGQ;d|:xx|l}sCoz=w]0='կ, FNao'or c͆D&F ]‚BRs ;dJjA5*04  BPP#$l%Tnqhĉi31l [>7WуVU0)$tLB@"T@Ԛ=~) "#m!g$ _B@o@;o{-a7Ӟb$pG+ rTNIovJrZCDdxlo^q!- {ۆc "O]DG6@QWy`]QKJrϤ/tM5h%T *aÐ a";71͕i:"B۵8|P6naxW5, !T&-0'@t"MC:ѽA3Z,^o~[HDؐlK}#@~u#*s+i Mu8Ԭ댖bθ4\V"&RQG5ij E;)hsD qs_$׫A4IJI4A=*f Ǩ AD,bqYPCpC(頖䑴EtnӤi~dahr"] t)V[5\SHdX9 "(b HUpmSj\H:5SIx;G:nMH/@r>Ӱ,@;"b*MU'RAqt%Va4GlF"YvÎ]%jC]]a Lַ|7r5G# b@It+ZmUtfEhެT 3GƒK>`,M ບT(_#cH𡜳r*A#PkgvUVA2 Uxio$b3ZL(pH|@ pM#p9 A7!i90T)ՠaG"yXbtxC <@ˎ_ I.~qsLĐխC88#_JLj _Zzm7x[J)hq^*JFCAňbLUE* ؿ%IxU ɠ]%&ӸӮRJ 221$J٢q,J^l_z !hOrc>Bl6uVѬB.I -[-m Bdwd*$Ji9`W"ݒ'S7 +邽UADTqm20؍8Tb/ZdT'O0v&S|0 ڦ: `b L")6HT%0 P" 4 jhTLC> oMB@Ć֭G@A~ tv#yԐA]-N.i8W"KZY5&Ϫ_P>h/~ twzQbz_M OL]~gɍD#h $:7$9cg(UnZ@HS\o/NoV  NX4-В %JIv ,ɍX."@D,|5/Qc&I]R*TmA~II1瑚ީB S bU5Y }Ξ:f}_>tcCJkqJBa֣鈬 Jt p`7#?&9o0P ,JJڒ)1ք`q. lBeXѯVG~5x1B)E1(JJ;(@M8N blfj*h@p󪤥(0HT{X [Pemk8 d߃=Feb _@Z!AYey&?n}}dp7 6*h&mQBBJi,yoe=߷c(sH'¥n<.STo5KNubMQ`~y%Џbπ x ܤg#4C:]9n5ANEM"^F`U!>UTĺl"}e@yB儎*4a]ʥ7yDǚ#5A(pР 4VB0lXDI!R3\^_G ](pNPcr!:9 Cl UvGJC 1À:e4Ҏdc6J'h@av~2ϩ8G߹ ,Js~3T!*5>ÀWUB1l TH:,W9$̥߃HYx7$.KڂFq31BK;& ;NC֔v'&Px|eꗎ^'ILT*p!"˥u R68f(E6`%EV@R`nj AuTC{kdDn X=p[6W2 W YVUgop}aˁgQ_T(߃~ce`UQ)Z+AghM6)y`0lktZzJ@nL`gcc)6"'G5 *'hNְY_80\&9LU<Z;"tЈDŽHl%i,/8tZhBEOj%-c/ C."XTeFnS _L_ΛH#eh{ѳs<^Pu6݂+,Q_: J^[s $ӑ*WF&]m 70-D(P-l Qf껞p[7l#lM\*iֱ%^ٺF"K0UBf PP ad.; xayDC%7T۾ = -PoIswwpx"(Eoz% RK>t50P Ȩ7GFyBX v7nH-a%PGVX{!]]O] V7L?X$>rG4GL |QM#xH6=$}fk=to+X$z"IQ /gUdMqQRT$$q`X膰WUNq#ɚn1 Ux/I]iU}Q:&U,@Dڮ%oZކ*S, ȢNUԑmr6&PcZ^q!ʢZ^!E5#%B·cP$^XF9GƺZ*;P]{D IiT/X~Ak{4hca~g>?ܷO&I_j,".Z3 8Cm _*%ލKLnغu&T )n8D pǙ3 2O.(=ȕe_ˁ*(&ȕD.Z XLҴY D4ĩALl@Od׫D8:1SW7a}fyoV`icjJ*tV҃(Re:ٞ<~.}}Y0:8ch?%+qe{-mDʔq1B9 99FU15NVR@)f VE!X18 !c[) =H! lo%F)D"__?*`m/'CG\BB a_ r[?w)Z$‰;DI3/?\@˃ˀgy_X yp}SoPWzޒK6B<4BU]iVS]fDx0/:Ŀ'7wL`olT徴{+Ȑ 6s)o*i~3Ȧe))!J펭˲]%C ]5+wZSQQ;oQ*An]SuQ z=e=7U~O`<yKYCo"տ kG}d2`Yf8ōqd3oY4}c㶘8b /&iS%dHV ew[layK+/*!1AQaq P0`?@Hvi]YX<:6c_]@81ש6*qݬe ' LdX=k 's=߁ǡ':Ö>_<Ac!YuNIznƫ g1 Xq;+y*c:b h* E|Ղ>iBeK,rfHԉz'D&-͡޾`BDfW.Jc\I=\^$MdĬ&Y?X93l*xR|5udR #[')LǠA&#?VryC$;8|)Ө`~@֪$n@$H,;N;v>뀇d?}0 -|f!T4GwfzFFiI&= ߼jB|i86Fc4`9.ڻMTBfPg&mnP q]IRPɸ#At#q=$Ȇ C4z|)0Wfe t-Yj,bO.l&02DlUlN@YSok7G}asIWhĚe7޳@mkX:Qn}KN(ܕӦ)yy b1űt)>$PЊ yU$U4` b5=G|QcOLB7ል6Uaei3~=ڼf/1ӏӮ9'I3`LP-ƪ W|BG&!0GQR?L.S0 X^ut\cLby. 'A \xv"5cWu..ъTHF}t0Լtz`q6?X*B ٵ6l:IaMC>=ܼu$RDw{kk:G L.8jJƃ @ZX7F2_g]q(+c!Qcx9T_g;M`)5,z&JI^̹ Be:_M7^Y`bt.Bx'89 d#0K{I=5N#d'Q!=0R%cA/cKb>*,_w#'Y ~sO ٖ&8:-}<#\cY6s?h00CeʫaaYD@|D:D8wgJ%l$ƒ7 BG`)VgE猏 ͍l0|8:];kR lW\KDye 2q$;:yoؽ(|! d8f"CβurtCQĐ|ӷY'1|o |';`~2TP,qĬŏn(\d -3, #W5Y,+O<=Fj Ih.Ж s$Wꐖe"266)sB&|$Y 4nX!yLԪL{-×U!O2%^D#BHcee fA4XbY4';&ߟ ?Îx.!LVswr1eR!c\3%)wwT7ZsȏVWoIUF=8w²E# HPFj]'f(%I5ή瓋;0 O|GạRH~Xo Xdy̏&Sx1$0TLZ:NAF&2 h $RSڍ"h,!U[Ig#sƨ1 Q{t@O]A,ćN>< < T%8;܈;&bL~C~Tdu`!W[G4%D` 1m@L;&D*1 &8 rDD ƻé8s/裗*&=/4@κs$Xf@W9CWN )OQ§\2iA::Mۂ"ΤJ!ի t*Xfyԩ"\@,15L!ru+ [1U$(Nfh ?3 ">2„8)=$rzB CHL+crb?-:Ţ.ѯDuk(_킘JYl'G5  H iYsAx(K驱rC%E3}@n^.s+B.v9,A4@Ŷ,8"|糐&B`ࡎ` lMiZj{֫,#$trMfGbQp!cZg\# uf:.Jz9}&rg(k'5pEqu= Sc#y-"'qv? 9X[z%>e(("ulkvO#]?%P=̺4Q >RbdOL1~g|W];r` h$~xcG"6T %Aw.- +w[RBJHȷ!~=$F6;'\3Tyͳ20TFIu6X"'o UndhCyPy!$gY$ j9 ^#i3 @t^@j$_Gb}?4~eȡ'''㦜̥r<&^C|A#󎡓 a¸IC[?!zOSBJnYu$lai'.Tr 2 Dm$﷎8%e<"NtbJDCҡJ"LpQ#=STe1f"1etTRM)r"{qqT'Wl(9 P{TW||駣 ?N<) x.Xo7(/*u8[?(c5 l0_km,0 . %'@("!EBRg)gTì >@k0QA`qRtkypւ:ް^u!;9Kq"8HQ8fx:?p 僎0Ġ1_G{BAD/aJKy1Yjo'NTB=[Mj"mGGæEJ={.N0z~$ H!%w.8g)e6pK0R2D~Z\@6JL]AQP[Z,2!TЏ*%}2!CCHē t^ -e:'Ԡ:$w,l=b\^!}j"欎L3ϞN¢:836)GL}Ԅi[Y#dɓ̀C@+oW gPi~?"|d&SkDȒY]Gh!X2 :RSkVX|.,<J挒)Y(\n8/D'`o`DX6ux{cf_+4{}rh!I[1R5>NV *&H#$$7=drNuS_ HF/}cf^MXlۚ9ɛƳS3lx;c6cIg 3S yXC@=` gM:L,="o !L+kl?,8d>B,M?I6T%#) t:v42)0ߎ?ZfG.zHdRǃ|`6K+ X c2 |GVH1!T] =ѐ WP X&"wx;~&6FHpg_8u\3lo> 2\0#[L% I#6N](N) 𮗴K[1`ؑ]Ww,|:8<1Kʰɔ $wHу4M&::xp\BF S2~%v2 ueZ`ԿtIAP`χ7)= ){E΢/ MnNkcg}[3U-bfxH~|`&cÏр;;e=˯/Rk [ ZIP Kw39w~=vMr#`k|5IuJVCƂdU< dud= O?<~2G /qQa|&ƲB <7LtX))ۆ8i;@/p?)0'%\UB"Sae>Jk) DJ`l6r zȇ^0dS҂'&:hN7䂒S9}> wŽBx@F|GH[ ٚH5!DR\8a(rdr2& XV~*{}1@ɭ9&\ CQ;HɑH>2"j#f8pc p,De?! EVc!)|6Eq'mԄi rB2H#nU(T 1@RDD!hGSD:>s`~*Rw:0Va (SɄz\Q^Ř/g@F61~.oIx:s$K1>C}<1PBU!uxT]i T}O =lq,\ZRIַx z_J:M$}dcIdi4, B!EU*ߵxG,DmH4ݻ9;v+RR_ DˀKڐXTF F 3z4%?A̟3o W2qz XO?9E{|8U^:[n$2y<ID /8r4ȶNzu0")%[ACS8%ԉ*T56 ٛ2h7ݟe!w|呂{qA &/h_̈́6=N@n;2-">-Ǎ[c 92Tj1!蜅%dRO&# -2#2zy`C,춞?Sa3QNo(k.jF3 >NwXB@^^I~KSZd/6t.e5 '$ C>q'B &]MՔDh\==X%'Y 1VvqC0tW\chJVR΀F:mH$nr:/{@9R{{/e|#柜N L%oɖògr\3H}0xcυA+90aI [^Cs$kw!,EF t$csXZhHE1ITUΩ'u"0cE*6uν}1b5> )AӑԀ%TXqSn C4,06w>K8CD$e>%H AZ/ >qa'<+A*y,K"»ɓD+yɬf@%`6! hZB78F9%'-ÂP`(ңu$,x^9BzT'_x :KcUS"k)FQO_ B4Ma: GZH §[0s)8*Dm?KpWi(vKu|;;8)(`O* z$X[r$"SpTa!ͮO.˸iI#8def@v$N5bXݺ`>~FsqdM/~ Uo)*B]1VL@HMxnL%Hb`ōx v"!xqʫ6Saן:f#4AcAˡWlG$h#5UOȤ'g{{c.=d)10=x]H*~OaRc'/(i&)4zi4>&Lt!H+Ӂ:ď Sh)eO3JTp<&0̑-`)$4@.OfƤW'g ,qqѡpdD'd 2`;3nbp;a /D02J@ K5Sv18"WT~8/E)t!+㜙?@t϶5TZ' !,|񐃗~>(5 ѐC (6o88$2}⹧'\8TrbV494BOpӸ]b >-bBfAX5ᖫs.Ț0'9}&0@Dr-S&7O|Јw.=f"܇ |߬^} р0tĄYC(;?'o.E+N| -:g\w\A^'Q. tB6>֘,\(k;dd ^[^GqEDT*dSA䁻ӦJ)o5y A#>Cޣˮ e:Gda^96bbkXOr׶%b󁦣&0o ⤦~)Y'"}Pg06ILT[/B ^1&Og$i|waĎI""NR-)&2<IN:bn'F3_ loO^zj_L&$Ʒ`H0+i]$/a?y??%d2SQIyXg?bv '~]r#,oHVÂh\Rr@cD}3"@D3fdai?8I"&44&-7SHcR xI_g >6 }@> td=y57s_}4p`p571S fсJ]=I*w#W =hzNC=G\-,_mYK)!1AQaq 0`p?B6eL(('1Nkҏr:*·8ZBM3iMoǏ+!X/M 1A?zvXሺ +Y#*3Ik]S+0$+}i DaWBDu4ˉfRR hL 0(b3]SևdDg9'.ȄL(0X$]^6*gI9BF MH\z>%Siޭk;g Ei&T(~.FP# Nj`b GV^ 1faT޶^s?ۭ!`Bt PljĄLU(SSr)X;-Bwi ]@@D4GG$J .8W` UODGJF0TC'(NP#>k؎Ц9|j$:  8νQSLJDQ?ǽ2qT4r'%-2M#l0\(OHUFoρ*ħE2@=" t(4>mIa .vYxpmo_Ud0en""!# !ed=jy@/l*QB-ܜrU3bL@ z)h2uHR4<)} Ds\ >ɱ9!PSH%T% (]bea <:e ;uSb*q"R8Y%kQՄtS 6A+b*XG8xA|ЀG5$G˦ZQD RPT<@4@~!zBh|e($k@b-]|'lד}zz*aё{'ҷ<$N|UTxuTU5Qs,3SLp5#)xYۼ#lJ"M!(TUcoYO^0Ը[xQ}#y:+KKԧ쬶X OodiaGw}"# u01C-iC3}2 'rIV$n0PQۀ$ x?-Y&ZM# Ƌ! Qd#[g`^@|\  %횚xS12]bX-vuVZd@&Txu~̤RbJse PEKۇ)ۢaX9i`60z]AAh1sD#Pۼ<,2DH/B~ (67i#*@Y}~ hՈm'弲i,KpϳZQɽE;kjM2ĨA"p z+q]0j!%uUsew Yc1RF<#6oԉ&u_Ò1=TO.0: lhO @@USb:*Gˤ ͍Dˁ)eY^&wVךƂa.e;Ζy_T19`x":R%9㟾r8#8&-a F&F(b EVI^ M.W:%ʃQ]9,i*.;qyikT ک4F,%6/ a8 E#7)&ؑb@z xD\`J Cdե 8{1x1 - "@%[~ZDyT.*:ÐŒ\8-B٠px uuuqb% J(- $<k@Sʁi.hU_)Ro%@*.TH 㰞!DYcz . 2aU2P %a}^^'DyuH})Tܾi+|OPr"b ]Ea ƙcP?N;B4G2'xi> I 9=}4dq7J`%7!^ >Z)ěVc_oiq m % ZPdi'5Ix$ q-/~N>Yvg2w>nۀht>4шCpgV!Gw һ)lX] ME7 HI W]ת"5-&;I&M'("LDȶĨ6Z+APqP"iB%Y^ I@D_lB0BJvbEC0>j\àM `0"le |-*~LёT(S"L4{?Qx j_Im|)Ņ!p,I:+?@-_qjyG#EAm"/ ľ, C"Z}DȈC1Qq"aAw׬l' ٢ R')^*saC6Q}Hm:g07((q{iW!y;b B@0荟gB-a=>A%ұA,A?C_._i6\ayD:VqlTN1bf\?=I) ??&I%I 8>>_ۜ =2E/H/Oj#Zm|T{v?@ ' `WZ\W} g.A#a@/(Y D8B !UxB&ԀlF#4SYERpTX*nP٧PFFhh=3ZF@#%vfFJ\`;ǯ$[ GFD 2o}TBD_\4`qsɲX BU\5)gNdqOzڄ|M\:l1@`(5!^ LP [3;& n7DT2Z8aТUrcUw~ !З2l\Sp.OD <:\TXZdD@,cA?\k"F'R-h&t4>+FDBzDk60`PL7>x%0'V L/M/H`+ˆ|(qJA#0+B""D`f!W.aG`/NUJ4`Cy>:3yqH ]B`B)SEK &E@k?]/U)(A-r6 (Pl}/K[jԂڹFU_kn=]j]tCc+/EX:ӗq !mHDStK\*&rip@ ='@P&6 gʓZn7n|28m:KP(J[|Q@ ccgE#x-H؜6LFL{6_  EBbJ'/EёZA<}ab!f"O<_Vt`GT68ATH,Fc5*Ru  cpi@yB| >nzԷo;g@IQ"X+r2@Dޛ(YWvaPTHM[]=,U#? d3±HLeҶL`}?oÆr\YnV!7P'˱+H+ (UPR,8ۏ6덇J )񉑍3xz! SqBn2LG Xȼ k d}┸DEi`7Umyj g@5 sC( NJ9F)4CZ`-= +*Θns],͒*p [I.fڅq4[1п3Jp` *j0"$Q{BV͙*Lp9 JFlzwAWFS RH n2BCRږF꣑xM :Ql"(o^\iVT^"g$ I/H"@|Ś3"4-p{uR vJB_U_ O39IIJ߆Q/% :UAj&`q)jjϙ<8--o+ ࡣzUU\YJJ8)S+ᮢE֤z6/wCػI-';b=^λN~t0C<yI[á2M a48rې@E2G(cBP#8n"G&] yLf4) L>me$1= Z'linS ]LߒuRnd32BD riՊ$Ir]Oў~u#S#V eX<C?_vP.I "$,Kq0ԍ2BKi}b0@dpL!l`8w]e1d$0,iT@.DL !5Njӣ1*^ф,R&@R2值|?'1hp gm^۟A+(BN`q8̲pH2Gj@4rUSqָ) '+ԡ! YyJ>`]%b.D|^{`ȨD@69 PHI?!֍V)A[~c,l=POs|A A\. rV]Ug!Lx\Ɠc . wHƧRshʼn %18D IwRH6!' ʘ6$+op#nۦTac4x9\E0`1Jm/D-UBV^i, ]qG(vlsRmF4gl tj3"yQ$h6<`srn ڡqkګ\2&=n$pH 3_YPH^F zEJ dO\WM- :TqtA4O䜛&$ 364cEkw붥z!M=L̺uȒA1յwBzHJe3UHUio̢`+W|P q7Ab=\ 5ܩ 3q>)@ʱ 0,DWCIx=ӓ_:Jnر`N<#@*cX|O["_ ͠)`^CۿϿΐN$A72@e<0 } Og  Ky}YBV|@0uw: R$OCG*BX#p 4LX/?(@ob٤o-3i T~ AI j+ %٥e_&vd!NR*{#K+kn"&Zt%&W?\`IQn_:A:0{_e$ثAv.-$N3CGn=J.u?&o!T-"BS,<;Td Q\]ESo뒄:3G>{$lϏr.TT=-"qȻ8i`C=peOjX`@.rV .(MJEBDDK62'х~il,FˮHUM%dơ$72DV %|pHN4PߏcD4 tУeNDw  i|P# +/Bh<K*FMARbQPxIO`qOpÚd nhTKQ9^*aXm63K-_}Û25D-/N X F"Nh&q2#,4x6"5zH,ď>KRpi0F~wL{<p] 9a1RDwXA/*z1Gj|^Q'*Fi[ٚ,&xKV${Zu:넪=j70qiZxAH^vb4ĝOӮ;N~˳U g!L ʈz%bCI ݯ  ߮JHyKQ}Y!&ko ]k1D*\Oj٨Z]}DdW\aZf'ny9.`O1l.?_F🄋'NN;KbU95O^@JHQOnjEd( FƠiͧ 40M`rq6|Ud@Q V]ReA Hed> [!.[s.QU'lMH.re83q&FX,"NJT4[L X]G%|R[TpaɄWKzM_ t 7 `kMpo `Y[p*z0F-ֻ.4b:(;YQbJiN&"SrKB)eM(C@ gD*"h.+n.XF+6nqn=E B* .\OE}'iag$JԒCJXp^ )1r5srAe?ŐN\!YR6hl.4>3'zYU3&VW>#oT.pDŽ;b"[[ <ƌeqQ:8 kp' Vt׼@X48%{*d`!IG?op=(Q@D-/ࣩchNVp3_ x7.pF\>499! Rw4x!m@Q^D"g 5./ E:QAn8|BH8F0\$L #V9¸uB6r@bQ&o*_6Vp5K nnW M UKq}ol4sbzeEbD+&pz#)Lt'E J•v) bq`zVx< UYH-Ub.rh0ʢg>TP@N>s2& ͏h0?`GF4RF%x>%倩e_h ) i]4ZE ,8h` tUf6FR 8\жTZ*q6״ @Ml?/'˂M* i`5_SJyx$.SbKw F9y5Hohsm C3r<绝QrWJ{u_ ,_ YBpc@DEY$.Iˁx̭*`S+٢Na}@!| spiT~72?}9}RSa4,bDIVb9AE=X]z)Paj"iHX ِ*R81k2:#tjB1'@Y\(Ic1)%2E=$*Z6?>KjWti?f> @@@%V"y1`QKQcu"|)Yv R'ʘPw+זtLu&s yQ1I}.nwD].+ } fAdf@*< Qlpx@u\~lej,((  BN$\_@,R24ùJts oM4KJmq0I?(eZn f9!ƑqFdI<#QTg)Xj 2|?E6^GoՁ!H0*/ cϸGK0% ?&q}hA:B9i?%My7UL%N.xʫZ]]M2E# [={A Ddu^yN  ShL)RK$dnPL<)P1RAߑC, CvFPF˜}M2>ʻU/.iES V$!QJr(`BsVEʖҶ\'| G8Ɗ`\cOhЀc:)L1ZȢo 'ܗ;<]IhuDK|ttuZ'N1>#Gq!t? V ӡȷuua(¦@vBh KY{O0U m1:"RxaGR6 AOB"=A{fXPثQ'"!<1N/YO$W.j!Ʈc g'# H2ulvKqD*|Cauܪ`k| Jr3S9lJî*oV$MN *fY R!ѓW@笄nwKW>- ŀLgQXCh}I/)( ZqTV#@R#e2SF.){"L-j{Tvsnt>2Pp_- j0'3&]&HD[s"pt9$'!QQQpT4Bi,0$sALY`ʨQGN0r26b*YWe8YG )±Qb|ejLJcEޢ2f!Ce1T |ze  Y5rȝ# d$a& ~`:}T+=?#tl E-\d^(`C;ĜxHD<9Y ̇|h34<!Kpj`a5Q /Ι:/tay~vDTTy'|bbZA G"H>%G e U th mHBm|5`<ޏS WW&Svn(<'cF1N>%#7N (PTy Ao4-%Hމ _ܬn >f?4-*a MU\10jc~'G"@J0joDA3An/V2!ƆU7qtRj d%nyxGsRʌ\mJK1iT.ŭZ)]0oVOab):7n6Dd^eCDwz]_`g0".?4c`sG&*w F.81)$ /ܣ6#fʴO6u TiWC6?t):8-7]+b @~=ZHz m}% i*y{7M1V(!:HE됒ȿ8M=PE.Χ65P'/;^ )G~#N" 0lP8BtZ`ęB60P8X)WVu!g8ө*iPWE$/!ZA<|O7Z2q(| %Ch6 wԬ^ Fn\P"-+,yɂ{xrf6X38ݣ5a]1j2ƘdD8iQ4SQsK2DT{X/ԐB_%ͯ(eD6[\SvF:2:̵QWh ANJU& @ 0hb[IZ1-b!~j7uq5VX6s+)ڡ̾qpOjM2:;* xO>Kv)[- @N*18Fm Bt=LkЪ$!4AwDpt=!1X+C`[l $lbS{kZX~B*V]^?e/{bQ@_Ac{H"=]:,.e `\]%U)9^Ľ[/FN%nHu)KO(`]H (EJ9ӰP6Qi| @S|Y%4 ?-ӕfs __){Q ܩ* AWRЄPB<t9̜ .l^eHICϺ*=Xx]EEЪa'YK+ПCɪI5&xT.\p ! #B>. .a?)/T;f*I*BpcPfsC7cCR Εy"/}ZHlJoQU CG*X$@BE.G< %Txx Kɹ<&I>-UDž?xyAr{Q8Q:DdP R{ةT 2 =p+UC|U\*Iu/uC(~?}O㑧N B33ķc uKG#]XFуR:D|mӂdq2Ԣ1b\ mv5嫩x tQ#@\?XW GV>PNAa__/¤J;AG! /Ve @F8*@(V4,!e,u+x@+_WIv8 |9Gu{c5y 0ݧp*'3 W>ߞ;'& Kmq\(q*Hm?<<q1٪ JQ.;70uTR}:pBqYشw|@.8qK"Z#R% c@15G+,%V8 *` NbAFqM@bfxLdCʦJYZr"5*17HuӬ@f>IbȀ4uKUh5e}4F)B :(:h89:SG DM{??OL?)ϱ5~U%Xk$ FQQ1p匌  T/P519, @atJE(t("z!0uLf7'"HQG >bZ`!3"CGz4 рJ0ޓFJS_T$' ;(I"DZB(*%xGB4K`9=@{R[R" c GBUUDCy)2*x~DI} :A(Ki^M1\ p=@1F*aAGDͽW!OR5/c)pV i,,6įRzShڃ¤vFs1T+kpԄ~TCep%OjR"u#gpy>&j`ћX贊 cZ((%R8 >Fq.,F7wi(:P~.TZ,Ug+#a\#sTO>㒎 Rp199iA--.f L$?|,#ml@N {N*2(5BDx\!J&cZgSVLWR9\*t-Vs@ _(PH1bYЛEDBI܄J@2blzXQ,u-@wJ; tTh!g1)abTJNbh ^ btt ,#7TfDUd95D~jܼ% [U\̒q"TBƊZtgUJvJfM`f,&9%ȸq^0Qy9{(ʍdPo>qZE+"iТU N~/ȚPxAR'REDa1/ݚVeZ85k:> r'[3XW JM V3f'*%X&zh^q Dtp)皋W!S@gnBV;xgz/D^(ð,Xt!|nibbCզo>HN="%ZJ*zdw`F ؀]Ԍ :}RH7r[-~ñIS݀RmnpIO".AmN`}JP#׮G1c$)4xb>ٱW=[ Y`v;IW(!Hˆ EB,8>eχ$v%Td|Ry?+OPaLIQ(ʚf6RP* M F1E@#!h%^My\tX XI<87F!,|dt EDl> A\J6 IZ & m{62^ 5 h*z SdC4YaHjY,F!B*,e@}h=_46<6ϧhw&Pq'ǾMx%T']հ˵$̰'؆Q"A@| |L'2ܴݦ/ 䣛GԍG :Ķ|lY8S^ĊME%qx' ڼ{ _$0u'&ACΌOvQV,WR40+`6M$ /MOq <օ""%(vq׈pmZxFOJLh"ql]rCI i1:Y @41!YhAa55aG_ɬ^)\Gɲ$L`S4-?BMJ@,ˉGf"mrfHȠd@ D&->q1d a?X''9̡Y_ S@Z L1ICr f`h5،/UrO2,_z°$=AEEԱQC,cVwbY0 ܔG8ru##g'Srʡ^-7ƉdqKU;3`Pv&TzBv=2o@ $JU]j/"L@K5 0VWJ0HkmjH?5ii%Њ%ZvX]5.W$1&wxVd . IFP<Ҫ^@U]@c_w f"dx*j;Ƴ O>4ՁhǡiO×.InLv$=JlrPKH (q &+YL= =B?+SzÁ`jQK ؈\\u > ,(! (.;Fӭf)8OH"S7TPjjS=pr/.q + ˪j2wY8vb FyAAm8/~@V&gp݄+u% 2kV#wTL'̇G~;[ ]"z`EGL;beIe)s i:KvY *ZeF@Fawki,W2)ڰ87 ..UێqM/oI CRB!` +aK?3CM67~?b;a(CZ2ЏH(JM8x耹Lōby:652ٴ 5?FED >PhC*Yn*z^Rx_B* esqn`1$ha;L6D[mHpP/RliZu@qzL j L4dlIJZ[vנi~}daJ9S jE԰iIQ#ǖod詠 C\`R"8<]«dű{`!\: C 9 }a@K52$HK Lx7Y@zqIq@ZeR_8'wv *,zVА;<* qn΅W1Bw@8Qxŭs<̍m[,kQTJNW ~EdሢYʊP$y_V&Ȟo3^e N4=*q\- G`T%LK-n}.Ao'kՔ*ZֿRcUYTBej="8p7<a0h>32QLPgfыS(mI,T@?#]sl\֒>s!`i0lI`S\6a?Py,` ?q$\G jM](E [L<uH "}?ZdqK෴ V_q 33FMмCAFx/Fj.ʏq%2X D4]|hnJ1h2GO(^vlhC@D\@%=y|1)#*((,oi̓0sŖkNI{Ok-5A xvJ 䨔AR>P͡qKK`qu &dSG0S_Ԅ8KFv`9c&K aTbYlCda͟`+DL :i'ØpJ!0~S1"= (! ;8 F=dw5(ע:dSQUQօO*OS,)s Jϒ Apa Ҕ%,dX'E}0Mi[·jȽܫ@8?/4#0>Q)]ٵ$Ģ 'O >KǚLDq(8R5Ztf o "(d֦~s nS&@{e ^>K!MA@ !.W'0!%HQ@֎c^gaz3@QAEyt`{QTpzɄ" fp ѧ'/\#@u҄Avo3F\ RI:CU Ra&oN*PvDx3j݀:ޯg0/ 4L(P|N k.2N*uU3 p}1R(0,7FԒŊfQd PU ("hĆK hl+,owԅw:2<'\P=@ae $R/@/ꔛNyzm`DA,4 iPDs'mvU1L=  l`Z_R/m8XA%IAцՀ!_М)ع X^rU~8&KEvI\tG&] b8j<ET&e{f(%Y_S飈m*I 7SV7xݵ1):b* a X ֈ :&pg}miZlă逰lQ)^ KX_/g ?YoepT/ux?Tja^>+VE`\l!@!Rɛ'ƒCD Ҽl}y&Azt ?Km[ ` sz¾E`x<;ln ^"HpP*?,3#M,wX6\m&%7HŚZ =tyϜ UM(!D) 쐆FSi A <'3ǺDgå/!c~GXu}:mTRz,Q*(l}'$ɡ5 G7*1p84Ao /A8`& Du=_QH,O02l rlIXD7y<qv_(uG*`-p~$E,7{VSZf9*@Plinth-0.8.1/doc/images/a20-olinuxino-micro_thumb.jpg000066400000000000000000001342611266051671100224200ustar00rootroot00000000000000JFIFHH?XExifII*  (1 2i0SAMSUNGSM-G900HHHGIMP 2.8.142015:11:19 23:22:27"'(0220* >F N V^  f|bn(-0100 /2 2015:11:19 21:11:022015:11:19 21:11:024ddd dd0100  Z@PASCIIF _ &;>27 p(2[auC|%_NN$F@@ @@@@!u#w#y#{####$X X K $ $$$oodKUE \;Cfwp!\HN~@L?d[4+Er@vG 0  $l\w54x&~E$I\wN)IOW\(.\HdKmp7_HL6)v~M,?^f+pAig=k!>B!V0H0Bc=u"8u`'\t5^]OB4wA%P;&By]AbBrI.[;>y;hBsC5Hm1Z<4PpK U6Ao\ VBDqeV#0BqZnJ(U8+ d!@JKJKZ! bg<kzKʠmE:y[ܟ!"""""""w""!"""""""!"""""" """!""  """"w"  ""1""w"  """1"!""  """" ""1"!""" """""""""!"!"""""""""!""w"""""""""w""""""""!""""""":`@ɉh~cAKX%k}OOOOpLFbZbZzKzKmL! :`@ɉh~cAKX%0P3a! ">!> %!!@# 7 [O6Ov!$x')+/v24R7 9[:;<=@7 [O6Ov!$x')+/v24R7 9[:;<=@7 [O6Ov!$x')+/v24R7 9[:;<=@m;[.8 ! h F%@2q-l(\`dhlptx|:Pvw??콪콪H 5274 2014/03/12 09:35:57 ~X`VG2( F16LLGB00SM F16LLHC04SM  00(0HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222J" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ԵgӭhUGUݻH +Rxw,Mx9=idQ).^vt$b ᳎}~SWdI'wL+C((`> H~ǩ%ow=!P* P>_{OݟZ֣.vc!+rFF~j'D&O+N!52wT`F9QGfXq ~ㅯ/|h_Ԩ ¼?IS`)v;S=; Kjyw)ϲ x,Bca^=/^>b.b0]"@Qgڸ£mAqAb7YV1GVzrzi1R~м~>@ ˂IrWCᷖY)d9p;w5'#$1=[߿|WT'ZG8+*=Ez֥/p(RFr?x4h.'I8)85*Ddp-,pO?At&t#:an%i$dQG3K.Kہ^f zy4 ^YGw,F?x0;V.=>Nq?:\7:~B:] ]]A<#=)gke˒$)'>kOĪ 9?:}a{+)9'~uW9˩Go;j6i13.X:֕3ٔҨGPr7k kBr%'S:Xm=w1 Ne~SbrE}Eoo܏C]\p#T3Xo ۲01XRýHQBJ: ?Z:7,l,yQ9yҜ) _ߝ9n6MNX|ӿV)qwjsJ, җ\]ZB.]BwNEhţ&ie Is'Һg,=xb%Ro{U謧TDQ0 ½:0$8%B[i/D~]=;שxamP*Pgz~Sb-{~gIEGoq =,N2G8qOqĪ`T/=p9h2c y;T`N:) xٖ$.d Ngxk7Fm$rONWyE&.v*`@M]1VdSSb8np<)yfO*<?**^qp)3#Ͽݯ:_NQ#ps i\OaxiQpJ?hrivفE 5312 2988 SAMSUNG SM-G900H Bottom-right 72 72 Inch G900HXXU1ANG3 2015:11:19 21:11:02 Centered 512 288 JPEG compression Bottom-right 72 72 Inch 1/50 sec. f/2.2 Normal program 40 Exif Version 2.2 2015:11:19 21:11:02 2015:11:19 21:11:02 5.64 EV (1/49 sec.) 2.27 EV (f/2.2) 3.90 EV (51.15 cd/m^2) 0.00 EV 2.27 EV (f/2.2) Center-weighted average 4.8 mm 98 bytes undefined data FlashPix Version 1.0 sRGB 5312 2988 Auto exposure Auto white balance 31 Standard F16LLGB00SM F16LLHC04SM CC!   9ddHe9  xH_9=. TnBuwg'qM"?@t~h3 9b.=6 ܙa샖TvI$ʑ e(&bº#l$dl q:w: ԽvL\kupMF#AxGrx dJT9a/]'qI,sOi X2hNlQf"֊'vJ pDGpĝC ojR.ג8Q׏Db r >bs+j?l ~Ӌ5v:iS]*]ӄ*"@7D>v:9$rJo/3G6+O%k0Xb(% 7oMxTE)^ÒC#gLoR%GaN;yJst/ƥ[rQy{+C?t6h^pN*E'pM\9ylϖ\F=;p@_ZFPgrx;<κd>$Q82td)Vձ cqk/#3im&𔧾5" K"G%Ndjܗ > 9y\^]:;;=G|ȞI(.[m{ Q^A_zd3Q V m`PZaןqYY Fc.Ok ͆Ip0u⍼}ncCN,էk ݠ X1o%QLeUeb) !@bw+qv!]nk;gPպY4vʨa簼M3+Wew^ɮ -#OיkUـ-lEX)3>\Jz`&Kf rf knhi\mW, UF))X5Ծ?+A x(v]>M?^;NXTۼ_gg:xLZW5y_ٟyO C60bT%96o_.\[nhKAEVU __7f9A?tmRqky/ްcy3qqfc|IY\`D/y[n +iI$nPG݃5mx2ז1}Vl:?8%S۶J?6Mqֹ|uW]aٞk fъ fxP0ɥs-+0~t XH3n]sE[[1p9 76cJ5^S /sٚ|+SŽ;/ҵ+' ʃlҸSq-1Vv$itf tyFzRG$zfvC-Ë- aml-% ( Ǔٯ'S1t"`li_Wr/fS:PPl:]VokFwXIGJl5= Ju֩S:RZ.l]f^O/yi[v}~kؖFvZ3el*{g,yٮԨZ:G EoЍY_ͳ؂Ai '[m@nz)"#e(i|uֆ;UEB]`(^|RYB`c3V.14fj@> YXtֲ>s.W4.SQu,J ,1.kt3:ձt]g(=-u>5>uXG#>5$E> 1 )(?] -63Xӻ.*Ygkޟcfƪg_K !1"AQ2aq#BR3r $4Cb5@s?l"-#-"mmQ? m.썎ck%Ҏd4` %3>>ʚU)_=B+ l d`ZjTHSA 5eMԜL*`l唤N c׉R#AtGv]]URD'A|7ʨ>×}[PDG[%7lx a>bDip=JyfY8&<5Tٜ|dڀuϷK7Û]XJlOd'spb\mP'OkxK%(#^OonZzf3:ߵ}`~muJZ?&)9$>&؅N*pyץ?zG/juƷW|MG9 T:;ֿMVe9t-Zhj.*HU@9#p-vNW;rF]u΃ؚ]ql䔄réXQ1T/+5%I2څvwm׆n ӕ 69 H1HlwL)BN\)$F:Hy5 V%D)$WpZVT^@Ƞ sFX=q. FE ))@(IhBvP>nRN FֺI`A,u+S2E]um}p×H=I9j6~`ԇGɱ˘Bu6Y.&=]E(Zb O(: ;:-I|pʽPN!* A'H^ķtPm JÒ:Z/l/)ʕS|Luf4s@HOey?j+nuQ)';tIBVHt+C3nkJJ37}PYTqhl'[ ̗;49A$\ iy J,z3x"4 S wPӅai ]5$-u]y4Oq_QR곷%n6j=HJ\ND9Ve*vtNTr#][P4EhTU+c$?}`~lk3lqge`Zʧ^{QRTd$VQnj:ƔQZZߴ~6Ĩ(.%dBg^YY]DgyVۿV yH-%?XXP4l`zU]W$_UC@#(I@F6B ZJ[˨NRw| 6 #8P-kcSl3Ert2m*JF}d{ؿ a|)9sHNy`LwP{RS9"bcI駿\׽u8بd.7A<,x{B?5_l3Cm'DfFԄ"?}Ul:\3: -+j_ZYI+1y(IZYTl.Un5)i'a{]p ^#e^I3A'CeR)Я DjN`n-]Wx?॰7H1NapxD+.Ee{-GEUx#d2g]w@d'E*$@H0a!nG )A02F${9fIZHdx)Y]u'Y}m+M3x:P,ln&s!$4zۋ:kehs <6OeTLA,3[2Y-rEv~al'QzRCT _*RBqĸΤS)L{g쳲]6aζ YXCS:f3eӰyh|Q|Y#xf'[P;4ꥦ*J&rmxyIS1bӤYԉ; !1AQq"a2#34 $B@R? 3lc FxĞk{ik"rR[/E'TS+.rD*90VeKHp8mL2#XIUrWF rX- H%>EK#>%>mrɥ-Y}ctXA }g>T4ኚ*)q`|~WI;GC@0{!Y|yɥ% ;8'N+"VbeEN$]8y`3 5"+JTh9g7 =YZĨ)**,6Z{Io$dDr]]+V7Im'KIѴGfe[/=DcI_]+ :VmC#p&g?+x>Q߾zMz8 $&Zk5_,k%)R NI-73Ww)T'%)N7sj:Ry8! V[+% 6k&S":. 3$aSlȶ蘭VU:#w~Ն_ sϙ-џb$uENwݵtMdbDWějn2u%ڌ HDܟ;8)j=U* Y{96&K멼N,X*Ue3)VO*$M^e%\/ОXuK E v3v\DB¿^&We 8H{ iiXaiMifeK4ݬJ8Wl$)a/bGFI Pbwae`d9d872:]u@ &0Mfˊ%̎&(ѩ.&jZ&]CK!"12AQa#3BRbq$ %rCDc45@u?.cG>z /wc\C~·lx_xUH/OǍ?4,}b>?Gx[c<3M:* 41!< f&-VKSe'IT|9nifEV#O'b.L»CS^4Bn`J;K߽.voc9:~|E7ÿ_[bq~ &O\I9ΩXi!?WWQM%]A-⥐u7h3F0GOQ\ASMSttSüwXd襬 ~=ՒOF^Ic=C,)f$..vİ4(5ٌ|ӝVӹd3OJ]5 \:hJ}Ifaɨ/)ߦ3bYVާN[-r=ʅ2,;΍.mx+QIks0 MC5A!Hk᧠(8LQɗ*q ȿ&jƍX(nv2zuY)*w`66_׾+h3 Lʦa^CE ҘNwX ^yr8"[K-O+2֯ɘeU t^*ݔ|vaę`?kW)ѲI?,HRjh]M} FgOSȯċxiA]QS0Ԯ{cNI#Jtg$/E;c'9T](&ju{oϭfTus3M|Fm5'{z*ßE4U|~ůIi6= Q&oFŢhVaJ7N<`hO .*Kt|w)JGh$փ7pdaA#)Yܮ˿OVA#CT͖;[LoaYa-#F#&i$vfIYGk)% ==[`j` 4{r2$ $Z qƕt҇!H/p/sr!ϹRUU==pkV!)f 9Fiob5#/+_-ƮtU+"F$EODa3- Wo킾ؒi#PX{dn[l)$jT@X r9Nwڕb)'Cps 'iuGmNcZ60sxnhZl*xV2D@%Jke8YiC $xv, ylΙѻq$ So錃94-G4"gW)&;*F6pr6pɷOz &؂*SC;:Pq63rjLzy+D:im}1$2oq{s f3jG^-J4m|zl^?h$`>z-AK-,lDBxS"Q OS/F2:撿"NMr]D4hxO(42Vf_%䓂T\F |6}3ꫧX䃇uPO-kyTI$T=-EF$+X \}%&{޳mż1^eQeTA(fqz z^`yU!n|A9ҪҚuHǯ7ZI*^Cl Sk}q+SOu $M%VYMl,a5H"ײB01jgpi},wupG XcM:XGCI⩪^(2ci)5l'ѿ]ٔc*r8jFrUpdw oS+}^coO]l3n!;_:Rj P`ᇾ>ԨUԫ)":j`cKi5jPmޚ|*(ju.<ŵjh(Y:-Ic%qV?|>$6zdaO,Wfft2i{H̍>Y&y$ rp%h[ܫ]Wc|,˕1Z4y}{l%\sD3&0k1Koo_&{;`4NvU-V];Y3(^X;nIbB,D|K0_8Rē &S xu~{}qV]S-bGUeu\S6bB"8ean U-#'ohc 8]DbTͳ'56*Lj&/5՗\bM8r#C[<M3ݤf6aaٮlmqBZҾ?fk2N>^Q'PAO6,xc3sz߮ fIdt 5*W*40,dX6q~Ow.z~HZ&HӚ߅zbEWSX&DAOϢ JX܃s|RcvX @Ul*Wk6Px9tD]LfC|Ə1UHG\xᦡGT&\{XnPad _p,<%^ JxZI:O+ig0C H0^oگTwZ^( /S{M%,ds IxmI wz2̦(=$9 C&Dm1N]^+??b룮RE?G,nvP|>tO?m`F7}9Cz4)}'%zw匍:#i~91~?ZY_VIU:~aꑹ _{}oL %r g s8]s&=݈_ w > LO_CYں({7']okuZ&ЎwyXry "sI2|*1BUļ~"طSyMiGWyV'RvGN W%D% Yv C#[c- &)N_=ӈID-:qy43DMH凯C JFjyuU"SuV{v(1ح*̣ R(:7eE~OIŦHx3If%F__,%^U×RVq"B{|e3159G&ӷ)c );1]D}1٪@t{kjE7va' x._nV.ywycKxY|H !XQnkNQUpZ1CU=PW3K1,];bY]/T^g[G7 1=y@nYgԵMQ~qFRk9UC=z*$tkc9i[a Wb좪'sH*:)3RV̩gIZ+2^RIΪx/I!`%p<|IW= 'LjOYFAʺN=.̖}* >sJ3!v2֫˦fg!V[&}oĵR0,pW>/n\"静")_ E{="xa0[ %bu4rˮS4TwyPHAkNaF4*uY Jߨ̈́J5c.?9ߨӬ:_a U9YSO |Gm}w=αrɳZHL"1a={wTp鑩 p #AtmOڜ ( eYyߙggl1U櫘Ke2ŕT^],rÚ2E2f1~M{_}4FLB50thyG猶%P}/[[4Yo/4չ}==ݜ]rBQRDT2Z0O_S#".Ʈ[rlv1[{r(%ç"@m+?mc"2RUMJ W0:4OO.oT^"M;,9~QM;0[V)L00lknl)YduQ Q$λ`YcDt%57CWKMU-UҶCNj:/[ t|_2DiA8+|VZWXn,*q3)UgI-_lR$ƲM*77Š(^ /Qyjna|UAk_p%)ם﫪6Z1#]<5&=4\-k$wнz~R"lFc/WJ$UO|o.uSK4l F/7LZ'K?$5$pOPqV5I㦆xҲLĈ8/+2jD;CUSm#|kC a* +3*j;IsfP\H*EJ"YGs;ݓHu_fHc@$2Hߊ3e&u|9*E4:LoXz Lu4bc6'o} Q٪^zjLcY+㰫KSXԽwTĚ_A㚧TSm9g\b|Spm$uH뫎,A4z{/Mm==/-m3%BdȪ[S|K[o+⡢{ jr F_N=%K C  C:/Oq8rlUO~J> 6K a$BoZUlT啔!3 %y2d1Tlf͙53-ᅱkK֐T]eeJT A\)rͪzmV+[5s̒:)`WE16<#~[CG2}lw\vKNiQ$2ZG1Xzt?hѴ40V"$`h˞,Q|q)?=|M鏢sg eB̻l-qTƼi5/ܶ (HLA6y&eXѕTX3uU5bN>kI!_k J% ZJWŰ¿_mVp.|htO Uږ@<2D[i8?[% kF-N= u2ďć9蔩>z˶93jNFG}ePҵP//yJWe16sO4/,b eMvXdQ1^KyY®@<= _f;KIKR%-ؽYmgsm;IQ)-LYk h1"Sf|'lH^AbГ+i&j2,yd]+&kUEY%['!1AQaq @?!È &ZP lR0sK~q j.6gg%hE c3]wٿ6 a(m~N㲀OQB:;@#% 1a<ӭ]-(hqq{Y >G xR5@tZrlJ< Jw8T k6= wb -6q>fS/)(R1HѥV_Fw`Ms7TAATq9`RWVv3#J|&ւR(T[qdnAѓ2yGS銒eA%@*a*BدNuzN`ɠ>SJ@D )` Q>JȫMm7Exi0Q4'NFfUkCl JOv9u2 ~fЋ/湞xQP l6%{Д9P`0+j^{Pm OÁ:Ԡhm\P"3;Z9MK ܜu4gC)0Dv4Lœ>/hjXI҉ʁ t)# kxg!,XͻOc9 ,o0IRN51׵AU0`pXkB-|tÉF;(?:[(Z` 6P'O>&<O"H;iB [c[ݯz~YVo]Abjh燐@δّix*/c@C!?S#wV,HTB-ƒh7:t-EuB4%s$p >豷u6VMXupVπ́ 5|{{o{?րQ<(-׸!~;^ĉ}102U!rPXH;%fAX )F)rtp$O N&{4$:AZ\nqHb"EJ.QˁEwt T &neH(kr DB†/;ֶ v*mfH?]mNAY@{[}(oxe9J {'qwb"wL{+h^p/GfLrTvA m\~vZBv$$@ ZJc vD% 9h!ێ@4ת;Ə(`c=\RDŽ!p.LmE#dP*t8clL2)YX T..*4OMi 7``ȉqnHxWzGxlB$1SlhAx#pB)&)Djh pQ P_ -;]n*r]!Ml+@Cu.E,zx gywte\ MI6۰ 9ls 3HY9[XOYf0Ԝa+Vnj`@DįFD[َ1о7eYe  ݿez&To_F\" <.Nu^8Jt<*!G:xt'A\l q! ;~9w(Sƣvc̊\0 )Y"уM䀷ѓ)q.uʝ?o$ZzM:**k!!vjLV]"} k;BXe"B`yw|+l".en͚֜v |s Y @] o`XRjGIɒ/9֘EtQ?CC䲿#F׋U,BK^A8^ ;|n@J6R0nj.W<8q(*ꪨTh?]w"Wx{<Ǹol#rF$``՜;UM [z|.0'e\2m1RWٛ˪b-,lp@]꙰㊖W P#Z91D `Bo)5^dUӁoXBqE^\rt'LHUJ$3F,> ` tŻ zቐDDOV$ eHq&\w{o.Ƌ@4N"~2) $JB #v'የQ/_Z.BvA /?';a 7=n 5[2U ;qS4z!^MgX ưBNgoӠ8Mm۬HVOt$)dU*}KROS\M=8tB !gc$kJ>H{}Tf7"Jxͯ%b~k)F3uh-<"vw\#+)l->j *gqJpl::Ih?lw_).XD.<5QiJ'p5Ƌ9l.$~Tˋ \X4\׿ !׿ӌ4x#SF*ŷg ^$L6Z¥8/Ӹ)jYp5  ٩5Ofwq-hBȣ^E}@ {Y 1;YF`hE\9+h>R6p987q _.LcY$-aϱ+v;P74ǽibV q3DQ">>2X`"W^0jGΊ^cav4M*7mWWaj ?ـ)`o`"!O0p3zYQ[Ic_|#ff|*0ps [qٛSRvQBFp;XPQJMI'?hmzS#X-Dް&z`.ʟ,gqs+\R~y5:[tEiO i(/8FT5 y@4 Úw*`X=cPc3O0@s(mY)Lъn>iVo/z)藃%n1wMF9n:YLp}U&vWrf k^7G?wT`_TBGK  @l,qy-KƯ=3/^]?f-f45c-+w,  .pQs10 %'Yw4o`iȆg  4vtMp&*6i˱N0K9-YOpJ vL RZî#L\rȔ+bL;`{,^[W6ȼ7ʱxlLq (!1AQaq 0?O?,0*k|BL i@P%SE>6 | չ|x/jbE0?ɄMcz`*fkX=h% fh9-gR^'X2P+b䐀qb֦aTHzްhGFx\V}pVrabV F a!" BjW ҁ z C(nnFWvWG?d3ѐ"tǧ a"Q aАU0ԤRS?/9;0h!{ z 524+A#l W&lt;8ltr&DrtPP!Ipb7ac`q;CN]VB,ЮIoѦc/W8HbB[+u5e閒#T- h;w(Tjjف'h[tUh&[ yZ"5 :N#l"v} ]g8kmnYÓ>#rfQeD:B*7dWIC:35G0DT47-@ @mRdh! DƢ,.d#4F&M3㑾$Aau"U L!,^56osx**Qnr(  l(gE¦PoX0U>5(U╠4`0kPp.nq ~n_Nd0:AH[V6n"4G{O^ei ݤÜ[u{<8I>_5O/yL$5T0nTe]|~Ϡo(!1AQaq 0?3۞!Ĝb| &I#T:QasjkڝbY|`X)d$ؼT0:cVp @'DF-f}U `ƅYJ$svc|s!]0~ἍAϥc+ MoȈX @$,a!~~4xɁ10񍉊 !йSQὦޢ6&vUH_dX3IRvï0`H&ֽg$@B `a1N@dQ49A&OMJs_Kp9b^z# 0n8n#k!epi.y0lLH*e.`'xZ !ɱy\ɃB70_N%m~><g4hnigƤVK0l0t6D85' Dk&Eٿ\`I2շ'|z%위n,2{; 1o/(wjΏ9TK'|y8h,1z0H;Ru!Rr*{>p,# % T" ^,NT|S4<{!0=\l'R@@E pbO.á$Nu4Cm luE<-yH+GM\uA$3OM~8ؔ4G ( F f-(݋;1RzJT($c0v!I7lDIقXJ \5*MD]? rHèW,nCxQ,X%l;5AɄ&4.6n26.y,Ri_&M Yóx!' קdH@Fa O1䘧U܎|>uWkZYetSI!,SVRKj[@KiDD F*)ރKsBE+1z!@fUEc|_5XuaF%#/@F?g$>qAR'8 KF> 'o4F!D7E*,ޜr|n CIXh2A' ݍ#nP8Y$N#Y ^CK13y 8 3hISw:Ջ^B(0 'FEW]Äagצu#ȼ&>}Q??,[~~8<(S H( hA=a(3oo'!1AQ aqс@? zؓ #z11D,PgxZ9iW#TҵIJdw{|=蕛{P+翳3Q` y72.( 2+1m(@h? RgK2!ylŬiEΑfˠ 4#k Z`8]@<'SADB ziJ *rEt#i Oz‹fu%C`&>#2q s% \'EYTTMI~qB~F><#J+n%9<$-)kbQX5 Dy}rE@U]uֽO.ۇXuPS݉B]LM0{5:ONUńµjV\I4V) j)`X !~Y?̈LKEӞ٢cM5|o`.?IBl`֒Ɂ5x4>l +jL*J#Su:\̓Z,%pI75#A7@2@Ƣo۽gmS:$Rϐ8HW'>N?mo1}` /* E4=MoG rRp#c@Qim/4ɴW6Pf/Pav1*ã/m]E@,yU=<= [` 'E'HJqlS3{*3 9EA*g0, t=?MVXuSt;AX.aU)*:?C5ofa%iUZR?!$a?iUOA~$(iUC J,+h'E .&:T|R.@"*)vLm?Z%!kFM{Y]L >/ę8ҍ퀕: hĔC*=UO(ǣ HY$F'_tX =(x}q0,ueƘȒ+A7he!JLn, L\,@=Ig+`'1$ix/5W}A^Y5o:c:0F'uv)A@\ȕNl mTHxǏR^KuD}p8Z= c/`%B2+[4ubtTJh ^-z'W B@"<Yk׀Ch;0kurG[:V5={"Q ]VRhyGyՇ O!Zq{}7h 1/(PycȟqE {x \S2ͣ(wJ"ڒ, 3XsҀuoXb"CWHH|C" =9S3B SA83@01_`?󩾘zEQ(t'"V TϠ:*v*DL@c/H$< L;I÷^x4?q"iW@ ا 01|N!zp\:|`C\4" ת dɷ/hpW ~&~"K uX(tH Hi f>*5u2nY0+ҫDYjpzLgϩ40Q8C ;O?Lƒ+$p|pץhyy"x*ߘt_JrL¦X* GN&u",Dn,}k8F@Z`Ӗʹ2+$~6|4X]*ؑ_E6@9P\s6wfc[3@疒x-AW?+{|IxyZOCt=h)! xɞ av905@p3$,|-EgYg|\z6eZ%LqEꢅ\S-$2,R+хU5X[Cj~<OhWIy>"[qN5||ȗULۇ(-HBІvSk+hJ80QڄX!b. ,E@&0SX%ʊ䬋Hi >Q[(X7^H84 S}~~ R絔Q08$ij+,$H0@"pia_j`X QPe2qvyoObMJ"̽u2#It`р6(رJ2cGz$w5Ў '<"`*q8p3.",.& @”@ U7s!{7;0)%\0/A/-87}_`=A,g(8Smڥ@vgBBMs|0JFP?9 )~ί#~}T3h"zR"i}!J8e 0DA( *ƒZTpqelpӨTغY( F @B u竪 p٠OIUI4D* 35"BT.aN^ ؟I@%Ӑ U;ǎk$ JWb@4*YQ%CRaCD"V^] jj  vQM᛼%Ml̺b=tpfLhZN1j(2=_ W,S}sqpR|i '(qwMԚJASf ‘<r ^$f\wV:0+̼Wx.?MFfRjV֧u ~ZC5e˜LqcuJ6GdEpH blhPG #\>< A.|& \ 4b"4G4UŠ |p*dVeR7`#" 1C\vbN忞֑1B LHR󰘡˙Wk _j2*W,5Bp&ݒNAZ2(pᘔ2ӆqbdƈ'IE%@?QXu|u #W%P#B2h0bF#r`M_G#?G_Ŭl{[ !"C LzΨ pzܩT؎FpBQ1?~0c#&am,w*<=1a'F@]+}gOx.E`A>-Bw_jKDt:b뙈x߼RDx Q*V_A|5D'wo_-# k5 R BK/'nu裙3M= s;2%"$!>V: RuK~0i{ۑҨCb ZVUBD eJi%"[lhfLDDDSwOCϺC|IZ$7h1 w 4;9cޮ@ܠżz-괈1 ~o-}4z&""!5d>BJZ%酮yRV됾t"<\Ǟ+gCƁNkG^RuHZĻǮ%"[lhfLDDDSwos@Ю+W"0'V:-tߨCv,ߎC O_ZXu:p;c8>sv_'AшES> C,h-_Cx *TWAbuHm: #1rDnjĂF#A N5bՈT!\59 #r: ˎ9cBb'_#/1kkda [_Dd_H] Bl\`Q?;QYFtq5j$ A>Az%|釸'FJIvq5DWYFX >9 㨠fA2} 㝗Fb'luNlr'1ir#3?3Nr8{!9-~.`; mhoZ l|?z&";,ܴMd<Ļ'EhJDUSA|uZ{8yMi;@bx{*"*-SbvHP+1Qvʦ!^z^Ґ CIHOmu^9`'o1Wߒ7?Cw~AW[ ZZqy$g:[_Dd?ܣ֠br9{]#T2qH}q¶"%X= ?s 5* _m:>L \yl-}O9 O{-vC%m)mo5Z&הbvRw;γ x} tWE|j5*ՈP!T6̷~=1XP@sByk.x6x[Er "ۊUaus/RWa@CЇ P~b勹aX;pdq!~x ~!HބO:7R6dC+3x"_0N_^?NihSu'9^ n4-O!^&!pUs㍷ 67إ}d2Bz<$שT Fj +U.|iK&ds"}ñ(g v VbÖP(Y k!tV>3)KaPbSCH r!kmP@c+rj.8dیbEœyP(v`$q꼸]|y[O. Esb؞/ n_$EX[MXmʌHO *ry-ފx܁Ց3w* ~aHki3|sGf% }!.Xmf^+ryݶ!wҍo6mv@?un!~LDiPx{6]t;g@p%/W!Rȇ|!^U+'D3̎^ pIA>¼zZ1k[-,gJ*o$n@b/|}y۲k3S1HP b;/YԔ4d,% 䓈bײ g1OG|MG,d!-s5  (yHbvl lߴ Il֥!Aib_ϋBcҰ@Ej$KI9yP(6ca d2'&?bf, p/q+]ba6'%≘b\ Ç0R-۰}{6<g\merb&CuzaXm2~=G@#ݹjE$]`V&́S\]Ցp7,߁uqu\Bb h=PoX\6 -u rrQT5шY cg֦J>vg?բf~x h8qa= s7.V_d!_g3|}^ ^ϟYv'ɯ4_< =.7oY j>@YЃ5?O[_|,̲|,/ Dt_!~}5 .^"EgnH\P!2 :6'z\6q'O@P(PiQ Xopzpl_,[06\<39܃Ӱzvq<,KG{9'8E*׈-mB7i@i.<w-QF'nD!-FSV9B"dG##fN>Kd#tݎ OL }55k_B3M}C] WW}7#o[ "vm=Kc7$㒷1'pdn>2KʔT!x{+̞0kp C䣟?7NEoGb}Bv. V+kCX Oo7c~@ȉ-^r̎[bv,9/5W7k'wCJ!o{(NnjZSnN;WG].=4mgV(Pl1x?L㞗"ψGa$$A\[!8 ؘWefMqZ0v͆agrx䠸81`+" a9yqdlʤP!(a9 mjkVG!^&%T0k,ļ xՈt3:]>2!D(Zs=' bKfR\pE1N1~_w`o![?Y~ p/x@A4WD;SHތOֆM U;+?Ox?bil]_77 t_Y؟G@'R#nQ~)|=yb_>{FcuEmo C .܂ D(,-–s"+! V"5|.||07<+섢8=.3|Ssp ң㋀Xu!Xq\lK*P$A~_BɼsIBMZs#1 Qk*L ׬}Ip{B1BlBl$?{a˝D@X] nO6:ė4!j:!]P]5f„!C x5x9*A8ɜh\"\}WǾ3ۤ7A;2 rw^$&VBP}YEL藘^)y T wrB˔6>'ۤK"CQ1sL~AبP@-.V>=K k67U.!Y;Y.At׍cw0y;+07)(([ki,xVp2|xBFࡈw`b33Fq6]Ñc ?{'tIxa,#~X7w7w0$Jo5l8}"No Xd,úb(i%Y۱* 2 oE q1Εٛ w2v"KrM{C,I_hwQrG3$ϮC/b!hԇTY}fT<~9w-vnXob|3pk]0?8_=qe?".nOl|~?f(.;X/ DtGY2D!% `s[6[ K҈dp B{L] kP62!GAxn oW9))+R "ʅn~h%J>MrNC煤uP\07+70x/(3 aXc ,$BBa^|B{XO#wC"(;&cz p9kÙ3,ʷm5! 2d1X_(YLdق]hU; [ɡqsBW(1 +Wa[~&: W5KmÒ`qΕٛ %(8bb{4wB?աf0cО5 2G?6|g1H ؈N8Y 3y? Dt/]t먿[;aXSh=Zx3; x_==:q+^?X: /+cc^6v &^Ny:yhCuBaXЧZ?݉떅]G0dyBخ-lc K^A {ZT҆O#LG^R?lG8d>U!m.Q"V研הCb+زPi\Xdw>)\sI'~8]{e!ūi>-b*(\pw/hg]BɅ3d(cbUء؀D/Ș+Yc 0 !q;|*AⅠe((9's C[`ɻ|v<6[K@& DLrdw~ cbn=r!Нw,~1vam3*y΃= ( <)AqKŸK_S U@aĸprW)GbJ,<Vkg x"5gxcm8Ez+[ۉtubsb +{ ANw%;N3|,ͺGν{9$<EY.cž2v>fމA{^s=u5a'>Ok2\{D>,<<jډw }rN8s5 I0ďpK/-϶!f!?BK2%Bv^DhYʅ{h!!6>ۊ{Zt+<>;j975 EMI[`XAPP!^zo(x>C&Y ۰uYqdc\ {NH݉+oP$.݂eоԉ]\0PI_1<[塳1;t9& DTdz7f5*N L¬_&Cnw6 YJuj!~A; ugPgkCilq9Yy8y 8l9lGd͉01oثқ۲l-5dąyC삀-(]9#Ή_$NހH /o%c٦"qD&;.LQQE@x*Vna|jƲ@fAET@˹!w07*~)^bK r+2"fAIL_"7~/CDs[Ч^OP\%|Ņ<=(WP(\cDH"%'n7}v=dGoby9p}fܞb>*||![q|} ೻ϴa>P>r6'!6=L+iSk!^ a9 5% FӤ䝀5fcAj:Vmb X v :s>KV_0ju; X`>7HCl,[g`aȪV (Z)."W|v*ce WS79ws8+BQz+>q1üd cb(!wI<.3l!r v@P`G~|d"&-a^ΐ;y"48 ?3Nr8{!95 ޓYi6VbVxwnšJ@ qΕ/VoB bWivVaNŅظl\% XTߊo=>9}$t࿴h:s j# UpPzrp|g͚9-S]A۸p֮3u< fG{+c;+ A :!l%K뾏pɨKL6{"o.~[0 v(Qٱ7rm;(.,a6qZD&;.N/؁ѫۏ:)wo l٩p#%G aev w{97.GĞ&zAgLjyps g׋(E5|rw3Om1BKߥ,Lbaks$#%_")xCخtٞIO#l aXc<|ؒct6 u Z{Z1} m_ ]wC}ΞV?-lxj_we2nsp3=$)=3)Kc6>yk2=}㑝c}-+.Gs5]0>1;v5v IDAT۱B^ E*jp[ǝ36=qӱYBy$$;rx%(7^q?iNwg"&~/ ;$x'$K`6,.\lJeӈ來xb<} aV<݌{li\1 wṾO{w w7cf,cI4e'k m)BN4p:b뙈hb. 7WL'q[?}p_>w< 8z%d+lxWN 'oanafxjn6[T3nS;YﻄMx~ nbg퉛pY\ݼx.>\GA>2'DDC,hl≈hrlhfLDDDSODdlhfLDDDSODdlhfLDDDSODdlhfLDDDSODdlhfLDDDSODdlhfLDDDSODdlhfLDDDSODdlhfLDDDSODdlhfLDDDSODdlhfLDDDSODdlhfLDDDSODdlhfLDDDSw~#ADDDDDDD;X,bX,ŲbgX,bX,N!bX,bX,;)xbX,bY,bX,ŲbgX,bX,N!bX,bX,;)xbX,bY,bX,ŲbgX,bX,N!bX,bX,;)xbX,bY,bX,ŲbgX,bX,N!bX,bX,;)xbX,bY,bX,ŲbgX,bX,N!bX,bX,;;_FZMDwFAWW?ߍygw=/jDww7zzz.Fgg'Z-/=߉B|WWۋ ]600ޑ7[߉nhۋ!z ]144^h4;;w7QWz{Lc``j~NDDDDdw=A "G088hw""""C<}c'r DDDDD!ȁ07x"ODDDDdC<}c'r DDDDD!ȁ07x"ODDDDdC<}c'r DDDDD!ȁ07x"ODDDDdC<}c'r DDDDD!ȁ07x"ODDDDdC<}c'r DDDDD!ȁ07x"ODDDDdC<}c'r DDDDD!ȁ07x"ODDDDdC<}c'r DDDDD!ȁ07x"ODDDDd-ljnaǡ3WڄSXt Jrp17xӉO"ɢeI4 DDDDD!^B߃p@7~І6h~/d17zo⛞NA~> X!x4b~b^Il;7ṃx@R^DW_ />[;oY6!r xk2rwK≈CcKOᷗ 헮" p񝗮 v>oFliRD<}eMrf&> WO!2jO}KN^Ѡ37uVNMh_ODDDDd ;Q\фҋx{黵+mBl|cN 6De8zPu7𣸝בVzG}Cy2P|R_@x07xɆʫ8nx˟az1mêKxGCAYԴ axX_GlC3 a2]V uQvd6xjBl佯5>aOn! Mh@y+/aqUbbZ\< Q|Ȇn|}= g}11oy/w7 WA\≈C`/Mf8!nY! psHH~N~v$V~Ӌ;rougxXeMH}*yyعN!-7[x4~moqcVܨ`.hŕ<}$|=Nw kpH~v6|ӍϺPY‹^|s7t뭼#7|zC.T}օ/ܷ=x\/lDDDd⧠Wœ{Aɋu=7# M&op']D!~xy,hBliSt85ʫgWz鏽wYM<֮Ż_Wz\o?lmxuca_LLbuzϛ:ܺ-?ಝvᇇGzY4V#\r%"ʕP!Byjd`uzƗW?@?M?ߋg?BXuXF5jԈP!Br%˕+W"Fe^@DDD?End܊&wFgwT %J6q뉈: Dca}HoT# J!LrQaJ/*bԈ:qը_ABuZ$kTC:ԋ>=dM >F<$iPA|5¹3 *DUYi N|hiBʄMp;^ס1%x"(A%Jߐ6V*&Cc5&!>Qk1^z-v o`О~=ε `]Hn!A8z-Hx5b4R!RVY)R_Bh8KTNY ""19xpS7/h4 "vB|0R'~^@ҠCJq\bp|ON6(cJż C%jif6/>t DDD4u D!1\P`~ cѝ(K!vCJ)Zێ:zG~Ekϴ ,<Ў!A7~6΋/ćx%JnF|BDDDC<aw HS݉7J˝vBOdCo"QBOۧCvх/z<]/r^@>IB|p!>pB|]\DQx"""C<aw 7X8 +KB|x!N: 굖C^n|v,߁%ϵ㙏zHSvٍE:`;#mD^q[ +ԛ I'~_1Ccw0īpj!i$!~_X{oL߮Ob,Cv !^ck!>n_9^v烈?x"8=fT"Nc;BO7 X#`'^_Xt@WW8FK!^:aCXԉ/W͎ ""!ȁ0;S-ܧuw:#`'2ub=p+ABN,:`Kӏķ!DG@wz@DDDO@;.vpzU!>`~vjms z|~_x͉/içJODDDVb'r 坳_Kӏ]v#酀q;yY:PFN s10[gd@d0?Wo?j """C<aw,)'>~Roqzc|NdDs.p!=^nòÝz;!JoB=Ozl~`'r nDUFrm!ԏn.-_x@%Cu d?׉_/A{p /j'b(ćC|~ζQ DDDdCi=:_n-jcO4BM+ċxC7>`;F|Nd?׉p]oCw!9;@瘋ڙxIZ$֛jTIC ;jėwm~}a'r w:Zچ2ʕm椝xH4K;Iuo\.uo yd0Rog?ׅWqWfZ??/|Cf4^E5:aQ!^jC*.1+ZDRm냈 C<awL_^Cxae:f+Vf.V$n8/>A:/^27~hWR/,p'vCwy/Ї|Ndw ߫3vKX\$[\DJ۰9 T]} ""a'r +ZPI7\t$xüx1ȧSWgJqn8a\?v^ߛ732Z /{8=d(} T=8>Zmr{9Pp|Gu """O@Wk:HCxo>NIuԧ6 7tMƋ!0>`'VЁ]\^G[>ԉ]}U/ 7‹ Pza:BL8,ć)ZBL/DDD4y D!q{V !J*! !k//n.|zѫ+'S oXnT^Y`PZ-k5=>F*}tQ;'(>_DDDdCfMB2̋cH}| 5C x1/.pwyv3E&fic7^Τ o|pq>|X mHS϶灈C<aw\Zfy^| Q OZR/̍Oԍ̍_r~m .|jH:-4fՈ1̇R!PzC)mòCj"""O D!ޱEWJ3RU{H}[͍C}A7n,\wz~҉{u-uġ1UN88؉>19xǶJ_ae!JDU󸣥A0Z34ƹdn|v7084=ûC8r.|BcOt #bC飫U- o/6?f"""O D!ޱ忪EhqH}X0#ʕWS7tŕ x*ag෷;`\[ y y:$ih _'Zbvҹц Cͺºm8t+09x1xn|d]Tѕfj5#'T/ΏBW;p]73~EJruZ$nX>V:؅PCM‡)Z*Lixm#'x"ت?BHҸ]JVsƋ-u5W',Wy͏Nz>яxaEZ /y!]oօ/7vCZچ/rDDD45 D!ޱ!Jc70\rո8qPkVRŞ!Ë}8v?UCz|yۅq}0zÂv[I>T΅/— > [m~DDDd0׋Ϗ@_քزSX|s'Cc{m!ċxnxHUjĊxiO O`^O}%\gCzщG:tMf^Vb:Voatm]xa.Hr.|HamhnM C(zh`SUbKPu 0h}%xݍ~fDp9xq^- WB|g^Dr):|qezvunn'נ^:޴ oay>r.|8'~r?x37bn !>L ?҅;J=ۆ/:m~-b7ٽ܎.ctc㇉f,?ЌxKx g1/B.S/8_Z}/yW5!,6U^n w̯:w5"9NkןNBn)_f~{Jp ՗-h@Aee^f&~iFɹCw; ێ>'~E޺c/]SHNoɿY}ixNai70[ڍh{Ǐ l=*/"c48rBuP) Zu !Tуswtz|uS ½Mn#7d|D\q/RN UBvC}wPCz=gFʑV_B8?~ F|Ԏa;ۋFpz-hjt Zo~{) Z~4|x.dЉ0]g"vcx5+GK y A%mPwߛQDDD N?Qæ!~@š xE2{Pnt0x46!,R_AAsm3mkƛ8exn9WկnŪV}v7]CY, *B|~LODDDw!~>{4om{o\GyW5iՉn5}KǸ6\W ;}wsF+\qh! Mp.c!%n C鷞¹QiP%=xG. bmvnF=+ S4Oڞ!l~E+vFĆ[Ι o$WGn=eqx{'i?',v'S-<iA45[wcg{sJ;}_k& ]xq}胞mC`I5@DDD!^Bۅg&n18 }&YخOٌ%$< BaRܼk d5DahD57vښNBxYTu ',A\lE~C}n)|qΝG8tM5^ߍҽg\/:bsdCe|")[x&i!=|aB7^X.xsK:ժ{o|Y|%~N u_ !3za;/!^#c^k̕hQpC B` :$00] !jF bsMjVr#^%.h'LM.Fߊg[ODDDw!L[XnPyCOQ-jN`/?p\݇N=vY:iV7JN"V|~[X͚ך͉?9{S6i& $!iҌ&i&iII/ f/ƀ6ޒ,Y[5,6mo?hIG |6{޳d{8?jȨkL&,1/WP'7XV{iKu:jDƌ!S4B"ypP^+ka!ވ@5T]b%8Uc kz&1"o)a'Ӊ$>Pcaƨo|gLeҼy{gʫe+g\0TWaY 9\U&\]-mrW+v{9 >ԡ[ :,ޮ22t80XȹlʝZAKۼ;+ݓv-!>ZBŖsMdVx?g>t X1szX'̲zDDDb‪_s ئ^_O(4`@.݂v|^D_ ttZ3N_SۃwrZӁoj|ϻg5 [u_Vzw=}2نXI VEaPHZ"41p{d.ȱ;XY>^[>/_ [+i{pxXȴ˟Cɣ8e(0=k? AKϹ—0YH5\qӉ㮙 \]؛_dQhB愷wwOxwkĆwun.ǽ{',!}> 1=3?F>W 0(z1ć:1 7 lAlf-CR}懼%eQ{ a8J>4[/{Zŗ{!ӽ~ _T~\[W=ÁF04 9a[*4u+o7>vOh{{o̻wܻ;=_sUSxO7zH8>+QX쎇w= !OBru]vg*C!{|畮W!ۤ[O,_ ]!~G/@w˵hwijX^+|}@3/cEQ@`w 5A+{xgPϞ"gxfwg2ȽhODDD3!1?)Рچk{|3!gҶ 템1|VEǨ =%ba9o| ,p:.բ=Vc:o8Z1q_X/tu:[%wxwz,%޳C%-\fC7 =L;>"V03N'O o}^/uP\Ώܡ? {/wax> s= .t_ XODDD3!(0S(IT6l90ȻƇjRՏӽZ\rwcX\ŁwԾ.*uZ(οK#VƿBw;k~->*AxW{4vW f.\B.GDZJ<>g+ Pr턝c`'"  C\2xX @gSTT fGuЛX^0YޱyoKm8j`X; Ɏ+ym?{./طgyu9z$(p *DDD`1Ex6f,?Ux?ڣFwk{ޯL7ݳ GZ&01rU5bňv+wj=Z i&1{a]$j~i4Ge>Gy[3ݳHx&5j9q=8 DQ!cjG{TxZ:kPB%gƒ/g&Ȭ1./ֈV(?Ѣ_=N ܭ ˋw>&* ™' %LLOׂ_@V艈a'" 4EW X$Q`{9WW g*N,R'B>M#VTޜKyV5RPsnjW Ϙ/w]% <}Ox7?,%:YnDDDc'"  a_U6RA=!׽խ>6WwƂ{u +>s_[ӰWx125Z y;ZA`xwMԧ_][X: xcRGT׍Nrl<_ DQ!"qόI#&mR]a~az;'> 77^~DH5f}/bĆ:tV${%9JYB܊q,X|ް.X*np`Ee"uOba=Mx*c}(+n]ꉈb'" F>e%U47?2 %eg(a\%{"F|Uvg! ~Sd8.?qa> Q<"ǀ7_ DQ!5Q-tRWwէF|A~ zZpbw.S+5n꾥/N;'l_/Up\^ۥ R\v{C=TxW»==>fWuP'Sx2egÍ!(0T6Uēr "vJ*./̻guCJ5\Ro@l=ݧsThkT85z f fvApLV1uiAwo Oȱ外k}OEi* +dD7ȧZcR=A*idƬ{{f~Zg݁Y[xLWh6t.(/{sE8]=ypQxwx2H㓽*≈>b'" 4f'xSx2Y,/H EٻCX$; o"%6/Lq%|uL\ /$|~c ǓeX`'""!(0Tn [x/?) 1~¼wI:{}yE%-Sy0`'՝W*QtՈkDzphMV'! /:sܮ.wHd9{!{!+x(OS5bc2.I%xO$Z=]]&KBo+Qwi $xG4ӕxZ/Qb1-^)pi1_Dy>ޣvw)E^+ p8OrupWh{w9x"%Iry] g1OEi*-RW,Q%a^juNQw˼g9:woܼ"hQn_Tbg}v~JwKUޟ -.2R}cD&{2emdBKrD9KaUOEi*J+^ȖǓc=v @.OV/*Q-^۩t A]Ł= O[ޅw;__V8;=W DQ!2ݒ16A I2<*;OwnGaI0/iA{`QZͷ(bsZey/BuvAp4Op |:Do$Wxm M"鬎!+x(OS1p\&)~itPcq?ħƳ/ i w٣AK [})ru2<= A=$- 1u%xc&<,ã#xtLj+˂|H|Pp/ԋP"ee".Xc Gwb%ԶY^DDD1t+xV|yӬי(r 4]8#;FA^^/ Vyxqotld`"dIl7rwݳOVw. ]u>!8<>׉CM3/A`sbo I ߅]Je[XˀϚ,yu@֋$-XuLXYV\6co"?41tXU#;|/ fg ‰ۻôwbDY@2,Hc_[hD< IDAT?څ_C{,=1pyϤu]Ȏ<75v'""!ˎֳw?l%>' 0NUE5=80cX#dB݂#Z <_:}mX^:zZJZJ.lCnt\Hp|Tu>L,T ònŽWD=' R<O(a4GE. b4TJށmGQrqF5J>Ux&-ᷳiEw}vuO &s`(?Մ6|(l' Ow܊'GAxW07:/ "^$i 3qpo+0nC<݋Q++w}d?f 2<*~/_oRl T6< %! ukAwy?/s5yߣ'u11XlBODDD!:IapպccA܌%^d|[8Fv0^lxD>\8_ #۽~k{Z^^ru rʆWF[0= ~u#|B{u""""_=6dVڧ(;x˘;Ƶ>ߵYaw:u&;LZp C<َ4x&M"{z'{T,'\9iIi?k" = ?Î,g8 = ^O1t®W/"!&Ч vtwIPsr:.Vj{er;=O3bٯ0?Ђq"-–zW~:]qsru:lŸv+vײpS_I]dz}/wZAODDDsCjDi!\BuYE-$`b:]O?VJzpXiG.v@aOPwLliԠ ԛ`.xiIL;Qo bR̗c[&` 3=RJ$X"wp]g~?ȹCP """Gd$Htuu!427%]tL1_t{وݭXY1qj/VKZ+1=iRx t-=J+j;Mȼ×*#IPX 9ryt8}DŽn֙];a Ƕ-+L{̻č`ab!5Jqߌa [މhnbvHrnZ#_-lv[k!vV3.\%X&i.dOVPa) xz,64&;:6ls nC13NbDkCӘCFO#Hh61ć`q0݁W3[نwz]GޤQ zh_≈7x(ODDDD41Ex""""!(0o DQ!h~c'" DDDDDClGss3ZZZ܌VXYۃT*#ݹs===ds9"""!.U*mCc~}"cXpUTUUa޽(//Gii鴔ҥKs2N]vbz^igBسgQ__^?EDDDC9{JZ CٮQd]PVV"ޓcǎh41ujZ]~}c׮]| ֏ih4ȬScꀢsQ?E!މ^ ??F9ra֯\VEߵkfnJ__f###~|DDD`0GȢQcs* XPqYk=ָ[}dAE5ylOect@ ÎۧK.AOCVHZNm'ͨ(kc\4=l6޽PPP|͋ϰ٦VEիWgn $PXX C޻Q7Qb0{yceXXۃ# 35B(,~ѡdVQbxrfg+n{Ρͧ+iq{f vǤok129Źn7!EEE R^^:466)"mmmwg,j%l^FNf Y_NF}d-{:hV111qOwbb¯fNFGvy0IcX^l0 ޲=5wᮥ A37E ǎ=\X, jk:njNlQd cpv:-sU~xF )nP㯒Vls?6}X]8fL#CxM҅*#>̢=766"//YYY~ wOewttgϞjnnL&CSSN:@PYVz*?*޽wFUU?+WgZ[ף8rۇrTTT`70<<}:踺Ν;R"JJJD)64A*b޽wum0<<-KѠ@tǏl6cVVVm'""Ehw:#omӌ8(V/KhN82vu }v:](PZC kmV_L:}n/ [x\"i0TZڧ و6W֎wNv>oX݇ &hGW̰:n+{TkDw!> Y]xIr2<HKKSUUuOm{B|`xR\mrssQUU*n BT7O7vaa^\\,ڪ|…:@!ېH$fee [>d\l{', [ww7233-((L&EL&T*:u*>pj {m8=ݢeddݻݵkDCOOϬg Ah9sFw>\4~61A;[r|ۇCSV{,;6<^__4m6TPaa!Ν;&\~.]7=ޓWbn{'kllGEE_ JJJA{{LٌǏWL&Ν;EBwB:τlb{h41-- ΝfvBjjj~-2,u0p8hooD" {-8V LrkwQՅ 2#r Tjkk744 999h۝;wzp8SRRPWWjZq9rss111TsrܹY$""Vj0OZqTxsZcX21GtiR? T[M*@KI*;– FUNw'ucpMtbҨŖ;ާĀ-y[w+;܋?ѳo8 X^,GM=Mrڰ>C}7瑜D?1ՕSB[[_MLLDJJ .]v0233{ YVm^xcc#RSSE#VłrvVTTz&,174fđ]>8؎a# ipeGE./B+y6JZ){~w`Pgt0ߧ?IIIHHH'~cm6˃KNNƵkצ˗޴/ z{{ .x9zh6999a_744g3"ZnJJ n߾\R)Z'[V={VAn#D}!2 iZ޽[ ;;;L(((@ww(HOO=Pp֭[۶CP222 f3a }6ll6Semw:a5Pz of 6(nIgvCt[C)߆O):2$>ً%244e( Э!&i-V?uc?tOz# N8m/E^??~9$$$`ǎ$>>o/͆Ҡ튊"AMKKåKׇn?r RRR޷o>8***^D{{;zzzƹsD3v zjjjcU*zWF۷/DoWn16 G-۳L&}̙3ef9"l{vv߬HJJ-{8+ҧCtP0Nb3">>>gGDD`PډA3 Y}! '۷o g]AAw-p***Dtbll v YmW*z=--MCT[WW Nbrϝ;'Zg\T*Ŏ;^Atu++A[VTWWmL[GGqFX8< E뗒߭[Diii {>u:>dݻEϭБ#GfaaNhgϞE\\n'>>əRnn.N::lٰk׮r" eeeA[YYYp:]] fܚ8NrdggvܿB-«jzFFƔ DJؾ}{c dE˫ +++E. w;H$Z'~hhuohh}= XUU%sDϭ ;x(!۷oO?g׮]VFR`'Q///z*//j/**rt |=)))lKB-3Q^Ν;^OHH>sh–x~I2vhy!C}OOO qqqAeddlNb yϜ:u N%^[n-[b˖-AkgÄ!(D{?s n݊͛7)..ll6]=Peee{quh4E3f[ף8T @RE\F^7Z;wcǎ_X(l޼;.h4bAoݺUtzṯ->T*zO8!Zn-o߾}!C޽{Eϵp2vl۶-hix,zl޼uCuPry$<把 lڴIt@瞈aOE=ğ>}[lƍڵC|AAAPYYYzO~ݲe ._<{kSbb"z{{Uf*w֭(lܸ;.jAo޼!5HHHM'HHҠqF?~\L.Z={d2m ۧ6zL+ď####7nrzAAArv;.]$Znww߶ϟeoo"""7 DQ$CSi&_OQQݰl*W"Dcǎa||\=㨫CVVҐ2q/_ܸ͛qc؉p!#-- AAu]~= Zv;L&]&OoӉVm[p8hll}p:T-[ms1rvh!CݻOJJ cHLL&&&`228sh֯_8_駟B~c47zgw:]Km۶-h͛7&T:k?Â!(D{ ?),,Tnzzz-Aq!@@C`hh^إ]#+++h-[P*jЦg` IDATtPTEvvvqqq~uAJJJv֭޽{100\a\~]LrA۬_BWT֭ ~ƍh4rR)6oѣGEnݻCBkkk+6n݆ 233e˖299ٯ^W\ ]gg'j5t:j5PPP 1{DYY+..&??Fq? 3x(!ɓX~=~?3˝XQ$&&vZl޼999(,,DNN6oތkm}ri&r␟BH$m<*++=s ~G׮][1Prؼy?PPP_pGT*=z$vrÆB <'wcӦMVxҐ(==YnFFz>߻wyOII` e9r$<DDDC 3x(!fvގGe|*|2ʐ8lݺ@YYjkk׍9Ʉ!֢)))ضmoߎdggc޽|2d2rjbΟ?|#..ػw/nܸNՊasѰLLL@&… co8s zzz0>>ewbb/_ō7p!ǎիAuttm3]N¥K=:8|0rrrm۶!!!7Rʝĉ'ri mQZǽ;x \]!(D{w:]v*7Tn$&''aټaML۳ϵ睈(V=;l9Ns遟K;Qa'VwEu |uev#at# |-/ _\BgCh]_f=̥^XGTh~dC4:׮\ sCN1 !^T+h}]b:=/^)CAgat߿pJZc 6u?p:h&{n CCn.=oĻɿԊ ցb3:/[;8Vih7g7vOjI b~8>C|bJ*Y,Ԁqo]PQ =sPu ,_gb?֣;4 KTL zml߇ mmBQ u[OAiwiWاOm71t1އcbs1YC߸CP?h"|wi8J\/115(8]O~)O^s ? e# 6gWӽ^ uyO]S1ּW>C 9S6,xY]hM 5=៉֯=v ?ƒAӸA{CoūU)-W`{zVF^}O`<>Y1O/a49~9|sϱ cճQ/o3La:gAStEpL"}=[o )?ΧQ/~);*pX4"bLQ`b?hF+ō|e<'^#=\so3ס)C,Y'!z ;MXvF2V-y>žz ubT tXI`r:1ќ勿E&b78};0c ~NU{,Hiߔp#3W@n4(ѿYcp _-hof<-v:X#hQ+>-tḁ^ݏWbɢPVX6 ET߈/Xʄ] B2ڎq;N;;Kп,xu8`pX/[&nmòKzؾuH5+w~.9fįX7E\/|#Y|>?S{zOzErn(܅'~fje+hlN8zXx^Xa~X61/#5s=EQ;|bɧ8)o=?US|{޷ر/Zv51`I,wtp8Ѵe,]{HrsNy?39SS^? sL&"?{|S&> ])A Ba?T8[W<? H_(oJ𷶟PՍ\cm}:=M'QͿ_!_dMsB> ?w $>&.ᇥ<Gs\]q15mw7-ťq}N6`jF%=3LGSg`ɢ0&Zb)~4_N~R!mApi .ӋS~}swshOC-zٯ1s/_΍q낮1'pNB}_瞉?TuۤU՝}_ }2|,XH0.9N/iŇgp0L?,C=/'svyg.=syw:pچPXgxq鏸7Fܲ7LtgVtfbpRؽҦǨ\K4;ajڊeKD텭xe}މ$Z5O:М§v:ti2>.V MG;Sj/P-l[:$KG&bnɫWbG ӭ$ 5܋+ssVǏ+>'B1Ags v'&)cŊ8ܞ3hg`'86\-7G2zN|<y~&"xVMy3;E+6۾9W%z[#'Z58~" ͢CNy?39CS^? sC|1GpL|M0g+0u?%x˦ 虭݉ϥł*`Wg|9b`b,}(~}_=#꼊M WrKԌWW.<3;ވ +#P фGTC.g#Ygm>g>oM][5H hTRՖڭVD VߦZ즂>BwE]Jl8юQ A[默ʼnP6=6 5V"+K1 We1P%>s-H s~RJl _[ZRԠEo,_[j4HMMB CXc2LP͡I-ވ ^~rZW,<%Bm![$ "xz{7C_x WF/}$͗Fgo`Ycue=,9N@`Wc}c#gL ې+gHP?pfk& E:O =:~|<R2됕5Xbl; 7au%CSךg ]"k4^B&0Zud`L]h?s(+(   DSGSAADA" bh hw  79v/₋ I*)  "Xt"]N7FUGSAADDq}qE ^ ڣ*)  "Xt"85"[MV|ۋa ws;JJn|2jbNv26 %6`qj*KʾiBB(d+p/yeA|cm/Ů"gl(EQ[^ N5V},Q x`v/eOͺ fro;I| =Xc dWsp3.JIa`lTgDex:fϽG` O0q,7CJᕓ|s%X,R}ATxϟ7S>ۊѱ.3,6HiBvWy_g-E%.z9ōį]Jp.i0dvw2O '`jGH6acf1c ~M?>G$}G(EƟ Y~;23 k>Ӷ//oHa1 )/;_:~˗8>eJA1m<8k\qpyjvx'~s`(~3].SPy G6ʏ~kw~ f9^lT8W|Pj &PN\-௱x#O+şcO%onTs22\4S1$Aͦ\$-Ea1/33Y;PS^UxCrA_/y,>w7n5 A_Avn{nYZ߇g.t DW-@82qoD:]mؐ8>)[.pYs_WYwΕ!ݨ֨Pq ZJaS*<֋{V"2F] f1coېBcYD. eJAqm WyPnoY|GCہ}&̸QQIGU[x夐l&EI1R祘cNN tgvBw̷o?m8=45ҊTAa+$'A7=ٺkI+ kARZnL=gV} T:xka?d5˳q@>k!dygݨE~v&0kiՃGR].}6 t;pzp[6@J {(mv |Aп|AȿBqc*`ېX<"ʗ E`0mjB`ԝoްWC3kPgj; j;.EX|*D yq9FR=KjXEy)m^!ۄbb |؉5!OqD܋xe1pqʡ=ӾhؽYܗ+OUx+˷׷[Tsyzckq|,w|vPYxMgWTjQفQg?[j4HMMB)OƐ-ztg/?|}E]Jl8юQ A[OѯoȗnƷm]0>FϟuF>iǓPj⇎^xW=*+PB -R`3v2dyߠXR }Qj oH!bLlJ^bYj. ƠT y~ ,ұcuy[n]hߟxu۰:Cƒ)ډk3gKII`2VV㼮 , J=~qYмX4c STΠڣs?ޏsaTA wf}b|mC A*o[s<{s6܁$3ĥX]Yd.VL0s^x [<$6Q9FZosc U W0Kh gH)r\G(#e[x#'I<)kNd.+7ۡ-wB>>rF['-DdYl1Hp_P' G'  ؆D`-äK*YoYw7󫔶cpMIb_$iۢBG3&fO/_; )⣝?"|cO">Z,_c_$i.(M-FO8WTe5aJŪ4|z2MoQ2T;a*o€ɗ!#QRƐV_ yuٟᢶJ +3YʄK:K5~9yNUMtH,ۻ<'CQ&A%K0Xg2({64m#ζ^IK;ǁsV1+q9lH]U@(:Ÿ_1 7*P!c h q J Ty.ה>;B dHӦQQưD6ʼnQZ "m#eXn&Ll=Xouu(OCcgm}B9aOK€ g Vr8++IIJ}w`3kX^iDeo'q"׾g8>pNWO_wNBs9ET)E 9 ص|ΕvTc(݀g񱧟ph! AHFm ͋O`H҈VG8_'!s;Je ;pս(x\\j:=b|-~gӣJ͐,tiqv<* %X&] 4Lu?]VܘꟐ?dSg3̮&G&`85 0{9%`rt8plQ"܆Yk)>$Ƙ^bb߻pxzlp%R㌷s HT1~%&y_Eص|Ε> tg?_͡:w}!5x*9ZB"6h[m^D|r8쏾;= s;J8itM.SPy G6ʏ~k'i^<8qNX~@rj؍P{S G-8դ[{bR?Yۗն+0 ?:gpabZ 3X5WA2PN0D??g(Zq6E{ax?zBC]YmvU#S`ab<|5mk}`n݁~M*M665 fP'M 7B"a~E!1mH-î(KWѪcsa6.m{*J:lBdLڵ괭jr q~-ŇKTσmDboT`N᳹voNWbN(">\֘Ϲ܎Rޙv{q*3Bh>&&$Ƙ^b_H'v2 \"Dž;\d;gNWbNxDW1-v1s_Y_H/ Wc|>r6l/@krYe 0iYXZ"Kswn`iEDi>M>: i7*<ro@.ȘE ܴJ,܎RhvJ|r%&9/}Ä/Faw /|9^(YCL|i/?8u_G,r7ރ8>uYSmc)?/Og"^'GЧ7`iNh4_ந3%>W#kw(S^lbRQ: 6xiR|H1Dž ʟf{kԹD"0𞉗kKsd &/UL|]k\9fڪjP9< %Wam"|>R6l{~ntg/_击߻7AQ%GF<$r ^{7O`l ~1YSRHq T;;ܗq8[j4HMMBמr^%cnyOoL+[p2XIh}g7Pg9]GȪtP{);,R?t8hăQ'[ EQ-.a콀"Vh{u[tؕĆP_%j?*-;\ y{3cK|c'Uͻ}ĴI E?Ʈxh4@X/ 'He2AY=V%04 9ŵLJZBck/]o(oag81>x'0J~ Rs ߜ*կY]U?]k\inG!eM ZS~w{?uBj|h>Wb|>B6l(V'%Qy#zwZ [f'5C6Tٚoo>'wN-+X/H-q?J+ɼϯB(v1si%8A)kPR kMAsK_%G1?q+DS.d} ul3ba1F"c9P| $iGĻ4߅6Ws#a{ 5ˡ\5.<èe /zoerD."܁xKuL3jba;F"c8P| $iE[D< ;a{&hYHa KQ}?pxsqQ2 ? ڬϜxCy~> 1Ӊq l r&^Ơ,֢oCh?>ʁsF[y%R8Aܚ)3U |v}UDik}au/bʛ>+ծbm0kHza\\j:-GB N׶ML2M eP@ N#iM'9Fl &[*=@ۧ2Z(weгx26= {B7`*_Aa+<}3h XROr¤ɰ>kڊV1½xوw{C^Ry#Oc;˯gRs&[(vK:RjQ=r`2^9BJ__='-KJI t-?\.8-pS5l,ԟӥ{#  xg\.GjϻO~ KgiƓ(3m|V-U=j v5Lj4l%.s;J8it̔SޜYb&_l~-@o2u`k 7qjswvٶMLw>cL!>rhS!2O`Gf&wYauV\5jeZo n̝&)6bĘs.X6-@"(sM^\6:sh6J@}~毮@^}'sȱOLRbDwN@%zl=>|~6GHk8ܹOOBs s2lj`l-e6-64?raCxIX^;q)cA'8"^D|D#X.߀a^=pk°En srpZ;kQ7m.^x?8}\kZ"Ksw.mm{ޅCq>W#kw(S^lbRQ:^h =Pe dzl+Ksr&9FZQ*r fy6qvB|څ}||unlA]U 9S?AH5AmLR<`NPu7srQ}04pIW*\$9= I\x߲Ğ]EJmAZ^grX?2KhGA" E)h|nĈn@]qs<+Uy & 4ҕpCkD=sMljFtXE寭|\(jqc)B3sU,92GAmmf/>s׷# vgXJ4gwEuHJ-G+1Bz%מ;h>.[_x5/݌oۺ0`|?m=+.n+@cr0x[Zɹ&ZG0eƉPNOob(5[CG/F< ~9"ݞ`r<>^kķ,)N]EJ̵ K Dkؗ/n g>t-#HDD ~8 8/˿p˒,+= P[n$]hU$^_EF[d_/.CV2K`YOu c=d6϶Ϸ?AG~ؚ_20σD]̢nPma1ar UYlDrNf&^f6ΐdhvZ'{k`obIf`Kz+"|OH5A:)cNy8I`2VV㼮 ,+_.w9Bw$y}65׈|'釻0UD-?\'OG:,QB~9]GK?G,:ONp'['" v&f}nSZz "NK?bG'܁xp;?XYqF-cxӌ}+s'k"Y,w#F Oqx >\px\'h&ܗc/G.h1b1x#HAADlC" AAې'8Dyΰ_XdX]YnϓyS[n )] Z?T_;  x#'  DHAADlEϰ10^QC:#? 3m;?lFiq0&#V1x  mwi8g/tM:=/?̘' 䝣 Ӯ[o7al>.\ۅJ HD|@"   bE*m3RcT6aseÓb 㳃pDtP*Xv7b<@'tϬLI NěQ~-=b{6:M8ƜƝ|rm MBnHkQx/T10 ?a<Ǝ'Jj"$9.3K@я ?Ȝ'3'm xS5}OjG_Eb$TO$c/Yؖ2})OJ3Hxf4h4x 8s9\ѷFzp"N<[=&GC|16Bޟlx(\P\x۱Jgn0.g %Ywf~~ J ʵh}^zzkl[jJMP)WH6AF]$s\"UBI9.q_p"mkh'F۸Dk7'1_#$ ݂vjH"?ur=oEg1S!c-;ui͒%^٨zopyzfʽI†S>W774m#ζ^IK99.JIa`lTas;J>@Cs5Ui+ܬ@a)),3(jG%f`fp;ڥFF<0;ۖBvtV1+q9l 891ye+H` i'>oO^{{#* ףocsS0s&v(X9rrp$݁%#IWcz(3*dim$s׉:!1ȳ6@>ws;JSQ(U#U}M bηO"I]u0 E6}ۊGʰL{~:vrQ\Zl_w#0B_ '025~Qf0OpQ[\%K\Օ Z?JjwLN0e?1Xo$ςEWćN *ѣR`^0xec8P1GOhqk )Lp >+WwBy>XnG&<Ź01M{r[Rgylqσhb ؀JB27ˎKځN2W5Z3x "u'|Oy;pB7X/@%L h+O\5{G7[sVeP; /<<ҝ|94wЎ<ryA#z;~\9,@QfsV3c"^1$($1(hP?ڏϡc%oy0GҚ Nr=0e9:L8S(UGTT]Cj\yez ѵPfB`9U#bηOY'aq9a@dXC5Qm ]>wlk܅|U9GDc|*wRa'#3v:m++z}"R㊛f*XVcqȧU=j v5Lj4l:܎<|70G'&|$>'e Z._Nsl|x .B}˦Gu.ݾ ]:϶R)[7.C.XTgQ1/\lMU7^m c]3gϷjIѢ ^P'?z5|侔Fc`ejE|ri >^F\|oտx68;og N`\9y D|L">3+جZrTq+9_6qFΎh6x.T^-STT[˷N>;pO>`}؄zo{ōӬMC[Gp/˳uZB'h)]MmFtX/[ԲYd]]ĶCj\M1$֧ F :Wm s5r7@ws$'v0ǶG`܅@xA_Avn{nu$yϾxތP1՚tT\5%~>f[HyB#)9Z<(=^81_D0Dc`KnX$(XnRߙIhނ,dy+-ء?|+0ĭ9NKz:¥~~,c#"j.^gJ>tTs5˳q@gu{3/o@^u/N5ޛ-ǪjgXnTF?{ag> M3n`iEIϸW8]GB?}X|Y\ߡL]ӃxݲUZhKEip`Jsq5.hvJ|r֣5n^MOo:ݙh]+nfrY;;vI=F0cwA_@]hqC-L؂rC>Bڎ{9;RFl|4q$"GO">z~[|taD>i\ @ Ա?yN?WB!O<iu_A0 WY>)Й%ld Lˠc(/m/R幞wQUHbE6Z\5{E 'ȗnƷm]0>Fϟu~pur?G:v@V5%bEmpD255h0;})x织[gBf;,R?t8hăQ|O*+oAwbwOBE]Jl8юQ A[i{ [>Bc,AgLY7sp<ǪT_ZkԸc:$EA 7ozGUv6v5CJde}[~cnO\;qz`C pƶw!_P]h8yʊH]wzx|GSᾜ>Q%GFx#9Z3g)" Rć}N{DhO0y/ Wcϕh~&~#Lo"^$ r-n &!ߘG|ل% c7"^3ě˻1R4y^DVDaNnA^xB-ړ>2{SQyLn_`&}ֹ6qafщxbqYaŝNrVhq_up'\6D2Nb13?"ei<{" gQxX[.)DAjQy{=s6TZ 7-+CC2̌8zO}<zHOZ0tz^s8_(Kt2^~'\橋D|B" 5ˡ\5.>( IDAT<èe /zoer}A,6(;g m O*PznHI0 ""8SEIȯ8kr>|,य़5لO98I-H'CLkNވaI+q^IK[/(9u?ڇ~?~_f10͍FO]4eSmDD|@".sRe1#aI{#A..89'ŒAPW# xE<ǁxvmD:6~"r&*6d*,υ*}Sa'k` !W#=BM`vIT,:>-3s )SW\,{~x3<&-ǧ%3'  fqxǹ`}v Gࣂ,z)"`|+n?e(Aз^b%j-MAc`,ʬyq&`CwuF&1z Bd&{jqiRN Z`j  fp',LN5HAADl" )HAADlC" AAې'8DO~Q jJ $GQ! {BPrkҐ{\df7l ÁW΅Xg+OBi_ Sgxd0`0vيli6&>Tfm6?_CUiS=?>_g;}o!2P[xxOSz<׶S`9?w귿!޿_OODBЅxc=rcEeu11 ?6\Wض!o&, H$Ɋr L K\u}]fBaTK$^dۮm9O8V r3 'cl^,lhs/g}ugl<<<rmGnLNV BD2wVhz؎w DcjEq<\(V~Z3կ%3KK֡a̫mY1pV*&@wzgk6ʿ)qV$":yn9 IКADki*kԨk5Zuit@=mi`݉NlV iJ±x Y?N嬯'sadPӤ=9IA$A>C]^ 9pYgAw+R4,:ۥz] U(|#qd7Nl5:0׉BhD/e֢0N@®stql>bNd_?}|cUO=8\~J1 tDD︄~$/! U|PbGɻquӗO9d/u M28}PKVo9cɱ-o慗sy-ЗgBjpϠ1l e{^o>Ǽ\p랛1>cö<.On^{O^kCs췧}4+y1^Qm~E* {aZ Fͧ^o>Ǽ\p랛1>ca[n> zqcӶ<|>vkb' !❽[z0RAd:z [%X^hlJ)~ZڈU}^4:ͮ~]]_d<-b4'>]![ƆO1FqSj7y߽9<[<|_}кdz>}=>=r0G{ނIثTظ9loċ-@w9su|1`-Ot7;/ZBHHx;bX}먃:'B(LJŽ;2衩Gb?'NȳJqIgAw Yr[&/Ww}1#W3\.`h֜CAREE,zgQnÎ[ܙNNRe3~S-ʲBӶL ?n%7{]T w, /"Êɗ16^C;'xk+pBEأ  D|ތc}ណI 0g=s JTDNtz{؇ϹKen;2G5-{5p-?1X +^:nr-t7GGÉ{!"YTKt|:>wNO@&@K3qqAK'&/x: 9oI@-%7P~|uvۇ|Yan}}l)ne(fԵ<|ޞ˾p:u|1n[^|rm_?Ywb. xt!6"zs*KלFbUxb'b' ! ≂ Vc)r^p?i:ŜOOB)$1 )dloB{b'a' ! DDDDD-B懐9W @"?Ch؟ yx*:^(C<Q` o5?#3VdL =xnGx$Pa[Ax""""t!~_nD?hkODDDDB8o_cKf" ĭCsvTd!"VC?|pyYh8M+d ;=3t6\Wض!o&, O{tFc 73 ry26~^6U V6espd"␹je?8PR< 97 ȏEx:tW^ DDDDD!>\"[> uP,Qd}s W" I*Xĸ2Z Hun=GBV43Jl$l=?m^މx嶉e KD'L6+4%P X{cwJ܌&@5MzӜÞtT'30TרQj,9&'≈'tC|T w}:t&;f8 Y&NLkQRl\^{\Ʊm!o Iq m8/*|mMiǙ!'9o^V8QZ72>3H؍,bpmz#mHK EC<Q` +CΟ+jvAp|yj by` dςBp_6\O.x]qsoo% (õ9}۸8 [ >Cl wU@\&XA􃈈 eKGV֣<|y8܌d؍q ZD bތ.4[:#%j!^<>Q[h6m?"6@[˰RUFW_b bZq.`h֜CAREąfѬN<ttP%Ge{_/Cbş~+1˓8X_a]f+?FL@r5W39:}z*xxlX< GRTR3crplIAS\ Èͻzԍ=k%@Rajtl>#Xgp|Ow|Ⅶy1C]߇qI0\7FPwf&-1. }p;9xs 7wpWy-smw8pX{ヨ8vTa`Ld`hf-I&h 84OwY𴼳;9xu 7wpWoC7wp׆ۛmr _!ImXt%_sr|s7fuP`_8bc1\]M;rUlV"g#$i:u2gV~CǰUUvTiXss T1yf bUuuJO=e΂11w}9=b!~s}ݦ!ޛcn*(dގrY3SPؼ*WĻi\ "jv#N?Fj/tGW\Gߘ0CSߙoA*ёH;9lRdnj1wY𴼳05;d8~gU_C˶ nٍJ컃!+ #1u;f<8 j3_k@ 'U;zQDH?d7/4kpYgZe/rUz]mm숈(1 Áxv*A,o(f$B@Q<#/N. wp ӽ]y#}ܦ!1dP|IAl>Qohu7l9~j VEBWben1לǻ7ᆓx:v*j|c}ӛwTQex+!cñDDDsOB.q53mca]M7ĻHNUNxlN#B/Em (-0hjD+$"""OBTY 2⷇B5ڈS͗`0jxODDDDBQC<Q`cBݒ_Cvx̸v݊!(1ĿNZ]8ئODDDD؂/o>AvJ.8pwQY]le >n$Mޓ0yr /@Vc; ABu{'k<\(V~Zğ%F qIⅦy1C]gwOIc|$H& \Sr".L^šC{l[pp+lې7d\X$ wam GRv>N޺ Bvgɾt$ɊشR0A@XLO_폱Tl5Ջm:?~5߉BLp0Vhtg>CDH2#7\@ҶJ4='TרQj,9엙 Py!\`]J4A,:ۥz] U(|#qId֢PNDwlABR!f~B,k*;.aDK (puH4t*`/ٮ~L} D@Y{y' \DPS+ )2~C۝-gr$:Mw#!v+D'm͊ &=*7 jzMGޯ;Q /-SY}7VLcc=r8a^FlUL=6VL1 d2qg*ZfHCzl0ݫZJC8vTa`Ld`~Y:ʐ"Emo2w QX͸>d/|dj (֊3fj?Nkg[l,FΖwc YpE&+$ Sqd(v~(L"s4O!q?~5߉BLp\>_{f̮ /s )8kzQ YU "6նpwϠdc F.C#ٲ8l IDATfrjrccWXyD#+ mef+|S[KV1'mONޏ݀K/f6X^xOmw}_IA:^YPȼ 6H؁}ئ#m W󝈈(g֙35#)U4h +Utal=jˏ AXL(PPz 5(1'@Va ͙P>EOo%4!qӽxVjߌFnmD/3Lj{T2ڻdcϚQiFPyI{Z^l$s3b7%jM[''̰I>lӱݞޯ;Q &`Igm֣[s2-xp" f׀ONxxjvHL ?n%7{]T 7A׊!M)VE`yqXm^lӱݞޯ;Q 'NAv\8d}R._Qg-Q*[pEe,Onh^G cV~uPE " h&Nt@Z)rU2YPvӿl㋟LrfByNL L^n.}qE2#zCކx sb|9wo gmwKwGF)2a^#lN@TH.B'٧ rbb<'_IQ+vAYҀ%D|z QWs(g_|Mv=4}3"9UWN;;wۈ߈R-h[EFȊn#zmt<1-qGDDDX=%2;M2A[uC# +#< oC6%w=4܁bm,*>x}x'R7gaf~mDZt`08^` g +!6vsh/K╟5 fD1a |1` K>WbKXEDDDDOB-ćﹱG>!(0S(c'""`OB)1Q0`' ! ≈(0x e DDD /[а?TuX}_[ȍEm˫ZBgSbPODDD B&>Tfm6/>8uuxhYۯkcc+0S(c'""`|!א珡p.mz08.?˷ 3^ACugw+^hʑ0A,q=}]ݡoUxG%̝h7Zg7ci<&PaPODDD B$^r. i[%$Hgˋ<. 0z%RJ :mTרQj,9`vՆ)3!}Gj5gC{6 œɬE*C7قBh.7Ǿ eCM4']վƉ~:n͋~ 4 ≈(0 0M|pL d줍bpmd걑R%u홵(T%a#lS`|H'}5Ž6 Il bswLnbgXwE zO?@!BC< CW| Nehf"6Y=e.Ono뿈{*kx?vgohg}G3(٘ːj;au3V}£]n=~0 C_~i%+Wc qeN8>V V3ۡR}&W{$]<]m V$Oqع7 h` DDD ?ě4cD_G9q킥"U=fټ|cеQ)CGu;nrg*ob-D4S *%%fɑnq)?eFtr|"sFIIQu]=4UHL}zKהFG җ/`X7/(0;2≈(F[[!r$e@/5vTS#,,G:-"`[Ѽ , 4[]fFH Dno5M6}p0?[2BTYQqqϮ"W% % eןM\α^}= 9ŵ08S?`x'CC< DC>;Wk/ou=ö/[f>P6Bg9cmwG~~݂ӏVy4_x՗1.? ;q߭\8Cf;ׅ̯Q>M'h$c/WT  t(Du"ȻjގsgnhƲ(i' ≈(0ddş/n׵#nVa" VhƲ#Xߡ/Ǹ/~B{}_>aryZ\MeC֩W֎?w!aܒ&\ۇq!d?ubݑv~*ODDDOBi_쯼r1HFq@q= ~`~;S۵'v_iQ;\7I8}o6qϴ'щoB<,ODDD!(011w>x~Q=c7Xx2(Wڮ{g;>#V^v5O\q%tn[Z'v`W Ռ- DDDDSBCC|Y;5`tw}t~3@RY3}3+4U?~_Q'_?o">>b] '_?]nG?4/̼C<:x?6 \:f*[f =~}8Ќe?DSd e7[߉_7<śe\gCf,;؁"sl^؎C!CDC ?noe# >//;ЌOpٿ12y\'ޱގC<1x e DDD Xܘ\-ş1S(c'""`?C%>@=Ct1S(c'""`Oo1B|bPODDD C/4KA @>OjlGU;HV"no5mbYc=rcEeu11rgL/?#X7,vfyԹHQ" [v.McT nc\sO$S\ȉ0ylqh8M+d ;=/n.c=rƱO<?ed e+D?cKA `$fBaTK$^䢭zdU!Q D!sg%ڍVivc6\Wض!o&, H$ hO$A|ux e DDD /ě(T㣓7aƝ3[TYd}s W" $MpI*XĸdMP(w4~KaƷvAЂcP]KP7"D]wmv{(Ft"W$HCWB &mp6qv[g Cp; ͊!M TB8$+7g>FTרQj,9Dp\>L,sj9=25د/ a75l^މx64c.Ѫ< Cq B8CbwxC< TQ݆1 ͂!Xl '!ĩ?@VjDgal綡DFHtd(~Ϭt|֌i(m\ӽ< ufOt!E~ d"!%$`Oq1q} ~MVHP؅Yb'?"W1ċMأJÁ0Vol8[^Z7|3H؍:U/\uZ 53)6#A!|ODDD B4gP1K#!sv *I5&Oݶ MT2d>#~Ώr- Zbl_{Jvݴc(V).:)GV"z ڼi#Į(U^Mq3gw49p:D$kl:iON~ޏ݀K/fn6X = DDD /ďCǰUUvT< zOW]“ǃzf7[Cn$OQJǡN2C +ői>$ۿ,ųVCf4rkahz(JNƮ`ENk b# Ti8n7eX*@S_~jgH.>qog(NNA4h?_O`'""`|!ެEaRvTAAMU>9qZEL>{=xq ;SCnB$jQ(C|:'.v&?_DKi*ז΀M(^ xabnVh[[-#<:-U`u!2&C68 VB}Eu*|k8C`C"U=f$Hfu Y3,9R-ο?kJPգ[sK]j>!hP6U ߨ@~߉O`'""`|!^dzkU dICgSWGEZoyS#,,G:_^{"1JºpugN LZFlu =/_mHJ-xw&pUl!~ɧ7[]pH/T%\9HDDD4_A NŠaa]MŻHNU(Bo\H/f#5,$"""/x7҉ 󃶄$%+Xw?< i[Q2[Ώ[qdE= s}C߳ŭձ_>uex.NcMq(݆΢D_;wQW_""""  D!$B$IxbBېFF~Gwc7BVtniA;"""OB1KgK>=7(-&b?ks <x!(T0x""""OB≈C uP,Qd}s W" KD'L6+4%P X{cwJ܌E1kQ' a9h{6 [ :iOċh-M|uZΒ#fi ="ZZa5@w8>NA\7^qME{wOz~w"^mz|gZ W󝈈(ĄFJNs.O}"=f8 Y&NLaQRl\>:'?Qi!o Iq &Q@sFJ:RQ 2( ØwX\*|m|wci 5j129f"6 by` dςB!x )\$/"G=c7ҋ a}=q>Na7c8ӂMxDDDDD!&dB0g +dQo<3-؄NDDDDb3+QcƘhEL>{=xq ;SC M ?n%7{]T X%hV@UK: K(͒#UQl(Tq^oT ?]>xo*վk4δ`ޯ;Q oyS#,,G:-^A˓8X_a~:#E& L+~ę /Iԍ=k%@Rajt:sb|9wo ~|Bq≈[xda]MŻHNU6d16dd⇖G4 qK5 VF"y ≈C|_A [~l[a'"""" l D!!(1x""""OB≈CDDDDDfd2h4r 6#EBoWe:s sZ*@'!@aGn 6d"eaws= ʝ 0ިcݰHvTd!"VC/zO9K[b!<;,Xl SHDvytɊشR0A@XLvIDAT: uPoyz% hO$A|uhCպADDDD(V+DQy]G!ނcP]KP7"dZ 5Z 0A%GD4#7\@fA坈WnChMP(w4=KaƷ㐬Py!\`]J4An!.ຜa?}|`֢0N@®stql>bN h ENvc.Ѫ< Cq BB-v?0ω 0?xs3Vmd1Ljp/$ {Ti80s #mHK y2Wkwv ĶDFHtd(~Ϭ '!ĩ龌?@VjX}^u Qi{Sz˽/Ɗ‰q~MVHPL+@ɞQn#:RQV 2/BbX,b'=e.8m|Ow*s~,oaXԢX-ׇ`$]P ۋ؄&/m\85 vGI^V@,(d/i+|S[KVޱ?wc7ҋ a}!1ijX,bX, b# T8i 7i8n2Ti݈Snڋ/O( z}wlObbv^u 2:cb$%NEuClș X\;bQ%O0.yX)(њfUlqY,bX,xIDKi*ז΀M(^ zK")gJHULCD- eOT PE$ EL>{=xq ;SCX"U=f9 ߉_j֜CA +7Oǭf?U5016 kڧVl(Tq^oT ?]>xO㲐 R ,bX,ˏB*J oW@;dunTY(B VO_ݛ/@VAV][Ѽ , 4;j?uY KǑNWW_ ;.BD>BUG)2a^#lN@TxcǶY*3ʭWou^i9~j VEBWben1לǻ7iB ,bX,kFU'/cص0ܮotB$OC-Q %F}]fK-Q@QuIEH^uD["7-^!cQj2T;͛پںqiz? uQE1Q@Q@yPGSzt5:ZwN0xŘI' ^uE {Mn{n wQ@j`MB.Mh@Q@嘆 KS Te P"Mտ{ 0Ny0d s{7y:χV _7VXy+'˜Š(^C役?* *v^D&F 3,%a__V>25]RWf|!;(R3u4 $/ML&hMd3H[ހ$-I.=i7Z}-ր%HM3p=E8&)4nGR&ijaaH\zS S Z:x#>D~kz- ᯈ!"gyf~>z`v4QEq?ٻ) q3UM.W֚ xԎ?\W"/&3.Q(?d']Yd4W;A2{WI%5IQ0\p=q6Oh.OB%o67}\o"Ud;s9RܚmC촃JC-}MrP͒Gj(BzvIjzjH7E#%ʂ{`TIF0Ln#˗*\B%О3!Y1y7qrw:Ι 48|<`i4˹LY䟬PDlMaS_TA/[99Vu+,+!B8FvbA;@9֭N-yL=x}`t-ҬOSOCG'Tݟ'ZnoM FߚydܻnǹtDӏTwZoS\wh6O%)'Z m6=IeROy] MT |6:h:`T |'8𯺪ԤPg_wZoQ?* !v NIKON COOLPIX L21 Top-left 300 300 Inch COOLPIX L21 V1.0 2015:11:06 03:28:59 Co-sited JPEG compression 300 300 Inch 1/200 sec. f/3.1 Normal program 80 Exif Version 2.2 2015:11:06 03:28:59 2015:11:06 03:28:59 Y Cb Cr - 2 0.00 EV 3.30 EV (f/3.1) Pattern Unknown 6.7 mm 828 bytes undefined data FlashPix Version 1.0 sRGB 2048 1536 DSC Directly photographed Normal process Auto exposure Auto white balance 0.00 41 Standard Normal Normal High saturation Normal Unknown R98 0100 CC?x!  :311iQbD-hW Z+XjdVRZ&85~ tpDV:Uk 2HEm Јb,<EJPir@Ec9AHDZVJbJUmdVXiQi\fWU)CYRqˏjJ&B,!fe`KhTU%jWEw' l~HդɎ@*VVV)BS2MmVHJ+T-S׭_9uƥQ2LF:fمҡVx҈AY5R RLxY5|'O]J|O.tlEja-RaWH&ZP)I4$ĕ_f}Ye5dd+J m[%V&b"HZB)JIW7y9Ƣ$a qe'V`Ms" U+,BRZ(ke+o zǎ)XUJBEJEJ̩+ZY)["#5\ҵ(_}װ`!SMbREUL ZVEbS0(MlMJD8 .K@<C4sNeblV ։"bתT Lt4،t,MlۭjlnŦcĆUZJ֢yŪAdBUe")ZQ)uJ%"Oދ}|C:ƵhF8UY"*"ަHTRVhĒ1 Hjs Ro^W۹@#GeHjVd-1\rcRELR81JcJQg>~WJ2QJErDLU EMHF:Y{jdLjTĵS-q폸,tDSb)U-RBٱXDj؉q+J”,c"%q$EEc+({WZ ]X*JYXV VUQ+ 02,ҫ KuE4uَEeklX PRBlU"$RE",(F;)qcf 6޿L>:laĸcn&:B&T,BTD*l#RH1AUcJbW1M:ˠ '@`q%kj5BڪȈ)UÊ+6E2T%B&TV1*cZ(+RVӔ˜V+}uZ-+1PqKK&ZLojSxij%o fxӿB|';O[a*ˮLwܽv?˗&aOysg{^_Ιͣ_+&6}TΣΘj361n;YblVr.B{{wa<7v.z/_cx6GK=sTA/z{Ǐ~xv}/>^-Ӿ~^>>MNñpϥ/nsU7ͷG\[T~;#PP#<@u:_]v\ӟzbG+?xO9/_/1zӗg>wdxާ|_Im_7+7ߛQϽϏ􇛼ޮYƾ;.^7\#q̷=U}~[~Fv[ג97nMO~wWKo규݃|ĭ_ukbhPd9W/{u~{^x7}?ϧ [=#VjˍyO>#߭8W?l2;g4n6gPtM~F+[R٨͍JsۇL93m:{nεO7}n%cie|;Lq1|LukXbeNzGnl*'gZi\혓S7e Zƛu\Y[̷i%RRasf{",Kjnu3iI&K7_s?5 !01@#$%"2346ABp6!2f,g<0FRy**8㜇Gwq9l888G`SϗS#ZKm͟5qeQC8㏳888㜇9>ϳ>>81q]"ɾ^moW듏888>8!U>Dz S`+K̊(?88!q888㜇9t&K݃E>sCs88>8>˻8/sLU#d V5lU9888"8?89qTł-+ɒx[l">8&8rq}qg4([C I?™2 2+5 ,B?qrWq99gt6)q~OG V3n8>>88Î8㏳88㏳8riW+3N-j[P(⏻??>8>8G((=Id5VMuXGu]qqq}UG9/Opjs}qgwrqqGUqqXG32Lzoq_˫y[⏒q}qWArgqC88888qL_ɞeppqwqvq9㏷!}9888㏲㜅UQ#.Kgr㏻rQGq}g}GUqG-wr/~/HSVsż֬B*a?}g.89ITٮXvEOcVl&,J㜎CC?q_MRl<2f"6)K=SvU>~n8798.qTqTqTRxr vMY=nʧqqAt4:Q4C9Br$9!'8NpRGCX9qXG3G1b9,BLl=uT>fMZh h jXwaܕbGrUTw-P=@$';yܓw,ùf;h$gqgp.EJ.Dw mq2wGp.A'Mnw pL;4;3>z3禟;0N>nqS79%pN>vyT?R|IGpUV|[|j}>rW녽V7ptW)Mv5۫\=5E]5@;㿕'|2ԇz JL˚RJw!4. X}0mQֳgw[)Ql\.Aj;wKIܶӹ;%;\J%;\jSd H;Yܲ㖧qJ;" ??N\ArXP$HN\$;ϞߑCQO>j$V-EEMz2NC$%=: AeͱL ͈aSOUF>:nz5$]:E•H$D-5<)|KK1Kl):<'RHY&#tIb,)jEHUXû:`" q&"|˭=\BC8kJrhz~]PўI"IDB?qaRM4S ;dhVqMKȣFʍ3/i43khb­9e-],JMJ.}-ט‡3 >}yYZ+fTcjȧ^`Wm8Jǭ9 +I*0)j (:0T"kqx){c vMKMMu %2tqڲr5vdyds2e-0jl׮řpx ZT{z3ȧTH>#oIT1"eZ!c~J`~hKuyսD4W&uIXaV%Pҕ뾺وA.Ev9͚̂P.OG")Ap/d/"]u]l1T-Sٮ6M*(ZY>=̲[9܊WdgN/m93̜M=DǗX.2۟R2Hx_+bN:.9ϗ19,ۚȠe.rN/Srvj2<_Y=M2|SNpBt+M`M'9ѬR*TE#pC2 ^-+EV?HIDC)+nUmYG/}}mvs[VETU=lX>iWo]j. ۨKMeN'yƯ`SYD dS:i1 b͕?WWNcEԙI 0OK2,)VjL|O 95ǡMSQ2oVxN _ȣRGԛrL#% 8ۗ'X1')6]2MSk/mכ) LYs,*}N.[K 8dF +uN2=SVDŨ)SRdG5Sl!_5?&2mOqd-68Su հu+ {/إdz4Bgt.5fC{R i2sg2tS DoG~-rꂞWM[NON&IR~qBfEp"kkjka{'A:~^M*.bjUlQOԛ0A]D3"JuS&]l_?]KIḲz1*l1Ur뒑e%^]ts_^.t;w[tk7w>rdrLw/qN}'o3mlB|K й ș؟S:>G3㟸61qEُhܥ6C>Nw\;f;z]P[=\AV} JIP},!Nӡ1htS§Hb8Dq8DppeE 1`tJa3gNb#:q }4iK8i>hQz}%Aϥ>ZIMkTȧNXZ*5nQm>ʢ,Jv<.1xaxBZ24n ӳvxNi;*WZc^u[ꆈr|UQ򌨿w2WVDʵ[T*ʒUWAhחy誫6ۜ J?+i|yE|C+iV^dϺEo"T K+j3"^ӟy\* m-&%-gCkYQt5˼Zi!4Z$yDrk ѷ%eeiYYY[uiYYYZv:rRfڋ2P *J*Nfuar0h:uEMQKJثvVT6V:eJ+' V'_9Ɲ0%M#Mv6-h"0Р*0F es\lp;0"+Eq~ac^ٓ#8- ɋqf'eHXs POU8Ć&$GËHkۍ\O 0!?TE SOi֗h 9P1UÆPn[|l;~q 0!(,À qWQ`O1f O0\;r,%!DpX8(h/;eJm,bwEW(qB8"~%CmȎ5K(r  oBЏb9^,!h0a! nh\[Ǿ .SUDf/[N'^M?ݢ{cۮfZ!$M3UG?fUf\#h.ucYQKYB;Q k!S Dtwjl3xlC+-*z?rvNɍcz<ҡ}Hwa"}9dא,\1Gp^/#PSK3P_Edfz tSBwT OȕV#謸Q#mg&)=^(<# M#JECrƆ~e/_Op p>)TkLx3pPa'`X5EceDB >fRTf2giЪԬ^F4I N X8s n,hTH"5,Dx]EKZ+?;㝫̊K#Js){+EuU @J貕*-QҼr*@doe+VFPz{/q{{v^e{^{v^ݗ={/X^xY5YBP,ew;!1 Aa0Qq2"#$@BR3S`p?%hgY׈gYugYm%fYyYugY]?Ͷ{w"xADcr\m~@X&kh EQh]օl=w~+Do; q+K|S!m6dFu~-}P[X z=,#vZ!ɷE0[ADԟ*m2XeeUsvCvpT7Gr|d[zo:7e BSkn(76 %ݽ.{ Gd7]5[R[ ѕJa E'KNn  mmAB죥Eڹ[uSr[9': C],Z,[n$z[ixnڣtRUi iq9Ü(BӔE(@TZP77ߐ{s8Cu-,9OGߛs;RZ^9}M] jzrWm`kC}ߐrʈEBʡAB (APeTBQhZ- -0:ׇ'ubңmnxn-6*G^ChQ|jm%x&{샌̢РgaS;'_L Y=S~U2ZMqjB;`in9xpj>8@q8`soL't\!r9 n/pYAeS kW`8.Rn}k`P}\\"/ĂO|Uؾ?} E2̧u+ BTU}QƿÜ=M.8~.ii3Mu:2*/SR)]Uty>lUGOPb t_s+U1 iwd<\t~8t+pQ1yp=z]7 mP5L(1?X\7 $>CCuUH7D68XC 0/jO}yhT# J UB݀*_/V*~ U:Y#RĴcդ@~q%u^tԬ1,Vz)\e%płmE^pp?\M#UGI\U+?K;+54$6'gJ;nI *BQF kFS-}JSvvp4J þ30=n>:gNoڳx{.%˄Ú6h:=Ӯ#vUg,#'2N<2fsQ)d2@o0noRLe4|7u]MU5]Pߚ(T,!d`ls6f6M:_;unl+۩:#+IOUK*7zUgfM\el@ e4"j0XFڍ갏uLNbZZ܍MM-*-N~gPkRyzeٔ.uh^S P*tLEa+n> !@b ;sC C ʩУH'Ku_)y?/ #W"* (Z,LSJDT,ѯ)$i+3g,YgqU^fWu出yf,u}±yv./ xk" T%JIYw_   !1"2456AQaq3 #0@BPR$br%DSsC`&'Tcdept?sh&fCP O8->$pZbPIDwٙyekQ.6lՉ$sĜ—yTؾx&*3ib<:]KY B%(BNFɯGvᩆIK[P}D,6%S}NV qr9Y7לݏͻJ>#==Q(yɕ}µ)G?m2K(bIړJXH;N8b]suG@an%?%xs"obZZy>HD\ UڿI ̒ԉ|_J䲁LVrQ*ӝ}4L-'p*Q9I<* w%9L <|n(Q(&'.@ң|j5*7|Xڣ|̞LTo%AblmM[Vkc|{0s0o cs1wcNLzbL[M;0s[;1g=lpǮ _?13w _'m7oc}Mw o31&;7c~?Fc}-7gbxz˪FOdovFo#7h_kTt᳒;"N,fYXI}$):ÇEŏD5 aZ4d DpL#$| #IFt)GHB-GS8 CoA"8GЎb3ȟ$ODq~Cd[B8!{-ڑ$|!^DpDpR#:_+܎GIeB*$ ڑ+o GB2K{Z#|8y^p<)_ GKxb82X~dpkps=SYGKxb3w#J%A V82Y_qK6#G#:\0?28:[ڈ_7r7Rrތxb7#y1c#yq7״#cJyEJ@'*!T$S0I'=Yysk9ŀYFiZ *}0qk8\~#\N,A{k}=WoF7Gj6F<ۨ΁Z>9E?iHd!PB^,bh􈷠W%ދ /8 ީ>պYO8#i|',8Jl>>~T %K+V3UEDRQAN,}U;d RZp2ԭ)Ž R${gMl:ΉVgn\,4/R{P2 q'Ο|>Ri)~-&,m <tU\XظR?NR%m(գp Ɂ`JLmU,/j覵Qѻ6S|ͺr{ՍӜg%H aN])P5/ڨ5Aue Gc:IRcH%N{+k&MVv*?gnRj.$M15m$qLfp. /h(#D47R1Kp g4.bfV˨M#b*^]ti*Kjn]FpJufyy i&e.Sm31"oaSs2Z3f"IHq:fմL39LfY {pE*l,SE8e%n-Ȑ y\ky7Ut-s<'~PZvi52JHVǚ?i$4QomnKPZRtwQiW/O+P?ń$&W j];hLևbؔ1h?{ na4Da StJ5'-hq>hat]'8i.l{b+EG$6 [2r[c&D9ks1~fG$8$)z"4R6%q-FPQ5M}?y֥%m'krcД]g͐6X4OlJcdTI0D9wI- .)B>RBZti&W愥a%8.yYUvSdK(M`%Y0SyyY_FN2)a)AFrNf)Q=)&N%MnGSctSG=6(H»E ~C%>dPm`~ q0 XIeCKU׺Nc@-FJu/70Ĥ%YO>"VSOIҢkSizvi]-J '=+IS*Q;O&Y¡k UjR.ܵ h.NSbWxei;)Lmظ674iLiћaY$)I,6ܩb♲yGӴiXڼmCC -RufM-;5ViB]BJ H%ԡ%J b:r-Ii%ieGPnےʩ*C'^ U3l[YF_ K.J8CiP䇩ө&}{ 9NiM߬ yk 8؉iV(2NM6U7Fܨ 17jM ߔE;(/BjQ8lm!4BBq[q@#R士_!٧ZPP׵mtd%,C̖i'CEVI96Ĭ$B_\u4`8 @ 45]8y[IS32=,=kaDfV';\M̐΍4]-*t#jPW%tNZZѮR撕)BRjGg_!9+u tCg0-uIeռRT j^'f_acO¦ҡ"nofT}4tmcrbA&eK5i\6.B1t'!pHzH3U?c୵Ĕ(tD:'U[Z(\A, /V&>Wj܍ 6M4M m}lTZ/W]>Uɦ%4N[w ]\:̛2T%J{}'M=NONdiyaJ6%r46Ih=.nv1@z{f!M6$j ksĄe$DDu.׵ZǟEU.ʶO39!NUA.hk#_3I\73d6\QKN%x hQ| $澸ŢBt Zi3HRFU̽;A'îЄX.C,*ޒYQߪդ€o&M RaC3 qäZ0(FPLie6g3U0~F8lo --:жlci6[ǤDn 6ڛRΰF r1FeRZCvIT햽϶P{# S MR-7ؑB6ZzfNG}מ js#圬;7'JRܛC%$D +B*i]*+R7Kkj$4SmrAVa'6Mگ9%dTҐB8AW'4"$yL4cmF* %u,ea=xH.~xզeCuiE/*jt.%]bRR[6ˁZKbkXu^{[DbEn#+4[]Aj[2\R,3 ®ؗT-ru yRm:'FִMSO*Qz5-\m]cQT'+50hE9iiM:'ܛKӦOS ӬH FkS+Nc+Ԝ;k0>(ZS:7h'nN1dH[>mMdm6\阦f&XnN- ֞XJgFfAPkFՐ+=# OYCϱRB lKE)tPMM%NQ.NuM(<4=DRi*I =#\/yI9E֏fUJ=6%vY `L"ʕ^i:L$g=QOcj \QH) jA)'>T)$"V/Z Qa Q>Rjp0nh. POL2nZNߟ킢IQ6쯟|M^C`Ka+,]ž_Cfy~^ 7( d$]-a6Бɬa$>5/ ${oUDHwvԣ%v q@Ndܟ&SVTiߘxGaE*x*`όZ錪3oQP" Bf-8&DEM*PTˢ$;c3:p](0$ &0rnߺ7~c7ߺ ߺ u_=/C,&[j}`T|x8Ðs3Ga,ቚiUQ#2¥ܕja!8nafلLf FV]mM _tmL+6<ۯK~x~O¯Ŀ23 Nq88m,Z9)-SԤ5cL;lD1} IF3M }1KJwM-t-_Kmu2k%#W¸6#;KU^_|gW_3Tz~JTT YB~ax&'VRZN$X"QG Tyң*?GRgd xڜy 05=2/aAc*tp#Fpl#HuI Z-7meX|'XX^lb)!*ʗu! TUՔ|mJ#:l絃xQz=܍r7wc9܏Rr3ic1ݏVzcի7 ʻ#r{WFk$FF]WdnUvFFF]=WdnUvF]Wv7 Cg2J}kǫ_v=ZݏVnݍʻ_r2izc/zb5c/v=Sw#Թ܏Rr=C.#Ի܍)*Bu|57NDhHpv; g),zLgK${:E3=ѝzhߪF{S^K^K^l_c׺3ئ%tgoPGQJ;c,S8O;c,S8N?cT-S8܇r8!1ŹqnC\G$<8]㋲>qzGÎ/Hq8!G$<(lb#kjz.Hxq8!<8䇇\㋲>qrCÎ.HxqŪzX qf܎,S|87Î,S|87Î,S<(7Ž,|(7Ž-S|(7Ž,|3,T'e\ҳ.¬6q+!1AQaq @0p?!v@CD;< ()G#a]\z(z^8 #ܬ= ǡƟFSOǣsQH>vM1.CX#ph{eFm6̱0w%cWFBtCwbe~kC [~'*CvpcK^Khl4,GzY0:|vnS3>C[-|IY/a;^B!k$٣R͚ Ԧi>\Rsg(7J; :&R~iп"C9R wM=I䑾yG*(;[9%Ck7i&>VI.IYkG8I_T}|_#$7!.Iu]M6DH$`vI2N$Q0[,儭M}lD`7 _kol?yd'q#jX@6rެm6q]O RTMջWgQL|{I*ֈG*K%?~~>XƤ$_#c=< ~6O{;Ceܛrys$:ԓ۠CR3uS'kil3byf=4ԑ=d`\ y$_վSczJcqX6IkBypELB7#I=c]̴M=-Q3g6/ܗ'c)QDj}45}zo$ؙ+ QFgзRW >2Y7FQwaEm=mjȧ -R^o]m 6';{_ǰ"q>b{>HSw:xp6;d%PT}Zk[ЙcNG.2%Vq$w!4<4a=>cyuv?G Ek penpf>^kuNT?-a-GGZk8ИM[henVFL^:|:IN| dǡ'ԗ ݌䝰='$Mcrst!Ch\E,u-vx%K# ^G.oSfze<`4L$a\^fXz,oծdlg>"\"z[ܖ{YԶPCHw$IǙ:xA ihcX9c#bb2rf4\ l'1ܗ:2?NG.Cc8Ȼ-Bi8S׳'R{W/#mFuGlVF186vB7[!l<6U>ݍ讇Onq(om84ȔA{cKӹ4Њ$h.RIK̦7ԛyi'w%eG(D/ɢW.D6'쉼rphkQ/(ozwRV9c|Dvƣ)>!$1,qߑƃ+odί# x(|rG,I~FJmw&\&6hXf†{H;+ۓ;ρ=DY3O<|ɖI;9yr~|.>0K\(hd};I.Lv[J^bAdUx䧷Y۝< -R7}VBN7W]Ԩ'gAm1'y'7Oi'$3#c_Ƹ'O"kGǡ?YPamz`sԇp562 5ЋԬٗk#C/X>:=IkT1;y#H:\ z2uVܧ+{Ļ Nv+[NydV9!iK]\mWat 5jzW>='2yp<|CVEܛBK]'kfuv'quM⧓j;!q=>Y dC _!.z5O*U5 2rt":=<6PˮnNI)nIz0& &B6a77;yi6QD V]eKnUɈܵKr ȸ4j'S DXԩ&0PH0 dԆdz閗"زĕ0UHPضTs`YFĹIF)8rzi=)AJ%$DDWU)m*FB𘚦j"lخDb2m,{= d %7Ins3_%S)m/B(B|?aV\(1pM70 پ;"q guNT"BKTj4iX4A)X![l$.eʙ  r|1; I.Ĝ y:JƣPk=NFȊ!9jM6192x)uL &J2{ƞ }iM7mǣ!K; QG{@ u3 qf%:|T D\Z7kM)|g8jJߺR^q`Ƒind D\"^ }[[CmA$iSRwC:lV{ $~>&Wxk@@y%hTΜ"p}şϥJ jTˠִH6hiš98$Jf4LeOR90CE ?).>|im{ rP#OɌA" Է]V`u'ZBTKVɞ$PVkNLY2pmDTAHivHlO%U_h*mz; B;ip4 ѡ{!T`Dә,'0QΣ;OIHhb5k6IT'DfAO9<%W8H*2r$e%[iǤ[8{66ӧBЧnZ)*MW'GGf:P"T4vx53}L1Hmoy3Z,u{At|qhVZP:[1/ Lx>,&h}r҈^2Yvn7jٝ-98-6q#I4Q5PNd^9"Wz/TM9;7~kGV0vwl=J*\Kv$6*BBdd-!Ѥ\v$5P4dA{\5w0Շs5);pjׄWt48""ӣSBZVܼvbƤBK?P=AGj+Aa#pLora3 -L`-<_16<.MFtjZb*r'zN47\,VE4.L&KgdE 34Hnx(l g86_uD:Qh2x5pLhtcXy A"K*h*!۝pqZIe-1'vE@Kn%14%3+R N,NTN28bpJJ(+G^&dLjd4Z'C?@, ^!Zp2w䖙WR95/BF~AO2-isvjjܶZpG!傪–AFia{<@݆Tji iyyqք1e@CW<@yWoG~sǹ^s>gFS s %ҽE^ϠoL}n_p| nFŸ,)faT<` LkJ4(׈xƚxQ<ߐ^nN@7%* b8yS9'ܻ"˗z h`*bUX:^%(Qq?U9ix)E Uvw/ɀ36{H^G@'+R<ZO+4+E>`R\~JF#AJX2֪)7)̿j%ӥQ7vux3]}'ԂS.H˫a++o/:0 uFS,U#K& =l,u[Wy 5eII)x-͢d 3 `ZM7Q Jk[/ L7x /D4tf,#PF+!1AQa q0@`p?򖘇0p7pC9Žw:rYGε+'88ܧ=TGL׻h HyfKZw8{+u\Es,Ecp[M !#KjN0+.["y{9ccVhM JCT*W ܁q_p\dw$[\tXW : øy;5upeY3dY0N˞ֻ*h|O123sX)f|$GkC;X.&"[ Qh]p;w}( ׳v3t{pwy0s. mFMs[;ӶcHnxc_n\u'q{w3ĝ:oˁv 5ty-:ӚM[0~اqXwz82JQsQS7Nap.[GKA@Cw1kN= O2q ǘS S1rNpNđbֽ5:+&t/]dcoIg)Ȯ)ܣNP٥UT5=0wsz'ݹy{z'WX u0c;.#cLO iNed]VngK&PL ck8uqG ɹGKba) }<9y~׍Z( R1n!'rvwt+Joy|yTuk &Z \'YrW˻htK1ǚqJw87W42o5t8JKy #97HC!q7B 1Q0 ܂qb=s7 de4-3hni@&u0a>iK9)IeW)zdu_o皘OL f" Vl{̉w3dӺ|iMM;Aw`\p@p&fJ\u~KD7Ngj0,0d91LwFx~C?c$y?>}W2>Kciet _l2bgi0-WE?^ !oTp//G>f";fPOiS6teoXmrҲcO~>32{jOscT]ϷB#:⠨ZSִ _xew? @h i }%w}เ& zG= , q\ "s`{~m. Dxn<7ߏ~ FIɂ o|w~'^]ew79`e8_fi! e;'0d>S+!1AQaq 0@`p?ax5aS N Kr%:KK 'K"?r6 dKo!Aη2#͓ ]D*عQFhKQ"A UI [f [5V\Ia KڼZ$qS 5vWXbSPk"17QQNEB w0/cK Z%yy4@ 9+ıP#f㊘nPĪc, ]'Y-Bܪ4 5(fV)j\9 a*]E\EQdԿl-3,VR ɝ#]M9; iPv0e`,/ aT\aPhiheBlASN$_U1!!kSCE\kQcYX*!yFI^ICypP4F;(!`EV!e0B!C5(2oX(0I@oSdUEaTEag]k-Ih׈C)E/%^DR+gPM1UFR9uW[!4F74ArӰJ`e lQW y-[4 F  ڢR5 ٕR SSnW:: L#ܗT15H ksRP\ F̢x2׳ݕ"tJ]diCx 9! h/X"RJAU d3a?ǪKx@lin5tC ]gu4;K)22] e\A\mM Gki~&Vd="7S懄1N)Ȟ"*p yV5SȪv_TV_Ÿ/ őHB1P|2NDs(`\W \V'DThB)`I=NB͓КvPnUO$9IcH6+l^ʦE+!hmf)sbٮHmz|2(rP]A.YhN0i7~ frseg' `n 6fF%.ΠrƑR * ro'ςҥ0}e8)icWL.!+ni\ʀqV r;64a6 Qܔip" mOxyN"M26!ψdaƘ*'шBF,<~1&pԥ)l"3 .wbK6Xd^D-sC~Sܞ<<RQ([;S= nXݿYlY[m!W7pw/ІG*!1AQaq @0p?*w&Z XijՀ)mLaڽ9Z-;̓9-Q kv@O9 z1a[PBt h|gDKx>>2d楄㋮c ٟ:?Q;z1uφed_>^WĥQ~q<قPA$\\ZJV鐩)D:RvS;?B_ ?(Tc}oX#}f;WZנxH#HyI5aIU4#MU;O8Fǜ^ ,M^@js,CZ9 eލ56شHITMۈj *(;4e(!Wy4+v24AZyV4l ܁`}8`("au ӿCe Iq^;=òb@hXi/\:2wNp&>HGWp*Lђ0\Zh ރ!UaM:;t#nuQD|ewϜ&Mm14<M X]=J9Kwi3\Gt¦0*ׂd843N-81@Y5P T=ʠ&Ϭ9(@fXۂV˵|dT[:@_N;sz6P!"4к[Djq*ZxrUJ΋ @LMpꮰШiBfRSk\,% o.h!SS/ٗ m_ۆ'=!4)_@@KE@az^}Dk Yz[rψwLX,IX 9Ci`ugm j@ӒPPnU~2n$u͎X ; 5r;fXրXmq͈)3Qą(k~1TM$=1 *DQ<K"< QORo4J<7jdW\.> 3w4! юɊu9:INF[K3daHiM-+`M*cw^TZEf h<ď0 4Dwny#C_LX楦?1ƚ5z*k\DRjn p  &DkiK.v `5mޱU4-"?ltŢo;:cr(/Q\uJLZm]:#&$+JoT4\7XzyIB{z:)LKP666 el GɱCC {b. {5ލy!۸.yZ' E+cJ9ׄ((=薌ET=I̚@r)uLcݾ^E|t0 TR9ޕ)Eʅ11kS;OXO[~>p%o*_[ѓ^D zFaNZWJ(R43[Ƕ R~Jbv`l&FPq+J8u?<))=b2{t~\U eŮvU pF)huD#ЬvvzG5ζ sT5&TRg2ڴnRwF6"}=0Bha|;Ex]0@׌~ceuf%P]ffjd!k]L15sF("c\4WmʢJh;`NA ^8MEMR&*@v b|`Sj8RL}|$R o0Qpˍ<~ w6!3tk%| 2DUn!aه&-";')\PSmC덀l]o=) q|d X~Oa(>gb7~)kUH)(Tq聁2(As&yʴ؇U76lRѷPd͢7r2?^u1-esChoyNN%1$o/`BHJ7^p|igHfKw_(6r#pBM+[Ln0S:R!1)J&%O8];L8@65fwcPv.EJCΠdTqTP>qK{LM!biľT2C`–#fo,P6'($&4J'ZVg&_?Y=F24?E o5(p oQW2qAP޾phlXjSas le^bj\ue$в!vka)ϕC;1Hj73m&՛PW+Z]@Vop]PU#:E,ѴKQx7kym%hWx]bd%"14 5JؙHJz9X λ&{GpBPcd]iX:GxH1#P`hM7R0AdLa]ό[@x)(Tkˆ\+\ '2}2QX:$ 贏42VʎsXT} ઍZ#ҝBիa~خ La\JS"|r"kll^l:T DD ai/oKC$"".\RLl_9(zA^͘}jHφ(UVaM(LF=#AFo% k1C^[U_,jb[Dqf8uXp^NY騜-Da MV2u^Cf~rQAh<͠uRp>lV=`;V4,rS\R&{uq}Qn}pQ6t/B1JCڻýC`7 ѻ^w0斆U_2;Tl1D ЊoMٔ}0 . ElhhT"TpoSb L4B5 ſG]"ZnPj^,,UmG]1M"/NGy@Sa^Hnڳ23Ӹ4I^ZzZ{Beor n ѦYGahVBb@Fb6MEW^pDB^ KR(;kxEb-Tc EyZѽnVM!w6\t2-:HlXZ(8E5k7E*y6Wb U4 Z S隠U/4%URkf-կl/qB1y1]bu#iXjl=`#mR/XD(lqiaϫ6a&*o .;QqQD nQd5gu:N(aT\ݣ"RI'7=3gn0,c7:v&::q6/"**\IMwjj}:԰Lm6X=SYIrNkMùtɑF`:'P}RYz+?w5I̬0Z H*5KWx6QV lBmxQߜe OaN %յc#e} lsXOF \VV6)'0PaT4gEu Ǡ,!59ކ u0ovp*1eq4Hf"7hg}b;6HǢ)١#h` Qy;֎RDSK+ Zl,8csfx{ W tCY&j ,WM-P"Նð~crDaEXa=61ʷ( DbTUn{+.iGA0H-f;*)>D cSHU0SehNb9r% u{0i WXD|tYW<b9jWtT nB|_&Ip*"vyQ=ѯI>AmW!Lo8lrP.mxB-U4.}] d}qQm~7!ذq0Ee!iJ #@t"|f ξ_7 ؟!TGOO&OQG3~;|wo'&R 2iՊR{"AV_yoD<$ SႁT'!+=XH9E`"wN ;!d|彪ќYglI'v><0گ5ʋodo{(!cP9 /bN[IϜb宑_  DLiuj7qő$Ÿ LdWNpPl4xL zJ~4I<c~o 5)^־NwR6SťˈB @lđ:$(?r-C>: >=bBx>pCnÀ SaI*3v"?I=h<[a T{| I?eOv6 Nu>RŊ^} XQX2N€/I 1A{FO/Ĩ *Z2h3 #E}ɂFz%u˹@RLHQv:fI3~10HD8y &M=0=PlE $ V -U/[y%Y?|i{D|rBjUDx5/PQe[O~1QT_#:@:S2:ˊ3$41mBuY0(IcyvU2dJU ~dN3ޖ`H?nk+VV7=OQ bOsT$|zV'{PuYGzI53[ ƻuqbku: IQ#̖q{v^:̱ M1nG`IAM/LM¨A
 / Q=2bCDk!2Duk-3D) t^+9ua}=&($%Pe*h{`Nc*M dXubQCzPа |`10cY|QuXqFӪM4?UHQhǘr'*Nj|.ʹ+t- }4) uȝhҗBT i[ig:e 4dkj־9Pe _EA֟N12lN¥i|`":\ fs diP=眄S=G^* AiSMºZ[NcA%O v)hI%ƹJ)cpqA=5TQdtmA×[`,|7#GM ob4h7pJ5]?k66yLlDR 1DF#KvI@`,?OɌ-;&+~)M`8E}$/ [&%Ў ªT0V,]?Dz #bF_XB[WJ~1#&5_$vzou;!F,yq6>^ pj:T|, #Ǒ0 "tSغxOT 7q˺Y9E"J=H.\Q' 0rฅcp]jfe>F!rIy}`(q`LkD :qa¬Ai2"`sCCa8DL"(lw ]).|~pBEA\)%F7l࣠Bgeu[*]5#DoH؎-4Z@lC22[onޠ^Xt`D,\ySN bb^ *LxA>X}i^9,@5!*B0%c D JO;EҊ)҂v:Cv/Xr$L:*Ӎ*T[ p@ 'mXТ$ uP7K:`\d=fZ-6B,t?76ACFo/4{:Ag&6kD2)ߦzm* aH?lm5|d"nBjkhļQ@U} \Awm|;R@nvb+>'zE0 )lAǫF#&fP?NJHz̈́\ȮԬ ueMvKxB%*0cٱ@kqWxI#|\B2j{FI‘\'Rn-g@\a& R!/ .S4dRz?](7GCxGNC@|Dn毐ƠX_OgJl%Lt?Ku55<)KypFփE^e,k,:҂ E ft 3Nձ?ReBnI E({7#bM| bk.PHw{64?8ҹ Vø6׼+QPOL># 6T%jG3b&QW)he"-PXP@<.lT"#< -Y̮|C 0RE([ˠo0 ~+; WuvOF~G%y[ ȧY0U;}'vAJ g@RK,ȋPq=6;?Gk@m<ec )MoS tjoj+5E(DOB"1Y1N$@h j)3MƱBZ!LDe(H↠!LeZ6ޡI:j05Caj3R3_LIaB ;D¬* tl1%Μ /a A]8pD}pK|~r}׌ӧQ¥lسX5KaIVeM9( Qghm4M /L4]ٌ6HMws02)1c0Dp\ y"7 QH 7tj @ ט;t5-p/av8M8kP&;)ۥ5b#|ǟIHF ^*5G`wd84L4rHfH#g 8|YߣP J!H%@]‚ڷ0x? E0Y 7mpzB1Ob2Iɼw* 0b`h\ mhh0bU&Y޵_vla00-+m; lͪvv<Ų%Gi+&Kxc@$nj< [ :кg0ـ_'PGԉg{yڟCiAio1s*:@ ] =]+6;q6^8jcy,npFᄒЗcVPPWɈ}wt3k,D&#< K0HGX :"&ďqSVO>3a$'?|.K`%74(QtxC0CO۬uG79܏u #}z(2:u0@e„0#A:|P:]j:2T-Qr.*=T+9HCE")h" Q?v\ A62]/u,k?|҈YsmYqm/*bxVB3VoL]G |2dҢ&0m@F,p0x/kF;f<7F(L鶗l .pvk۾M-oqgB 9 [h-Y4>~xdݯ9f|`Ȏxkǡ$TŊcZo(ٌjRq[a5\łui MU cTJ_bţ#=#n-!(9 ;% IXw }0/T.v~E 6G7۔זveU +ܕ/bf_CcX$英*m:i|ᴢ_-ぴ@!̕Zjd&~2К;TLTv|D_ScDXE2]efP{3_+A8v3T0I!*bIii2vDe6 FXTVh2 f8P*&ʹ`ZTO1D\i4j`"7IG7LypwkD_rf<ʳ@En̬Qa5}9wgMQ 3DhFⰹEE߯2&8m)BVnj=q;M_E*&Z~jKȠ)+:H?MbV0B^ߌ3xxO9#ѴLpd7Yua bϢdz? ]߆n hc~6j&++_?&'X(?9$8~*h -L>>$y[bPAK_l2B0(D249gHαDI#N-uR;z`*4?@MmsB̤@ 2|'7uO}F{B>r^Y\>&3~'ʽNQ@Q@ XF1<^3BEYXSs[D?޼ ԛ>MM}c}!j}!z4CJ^/M/@Vr]Eq & v"u8""1*dF?:wz7ʼFYyOF z(¹Ot;ȷa;VַZ\L ®p]^kRj׷S)Cn{PM#;bI<{KsqOSLDc&BC=Scu&n?MT?@7_=S}Р %ڠ} i{G} _MUcuߵA=d!zBC=S`>m>v4.-uOTmqԺ66slz9z߉Wκ3s}?{0<㕴6:$eHq}}BtuxW+i_>vʾOyD,9m.甀 'W+rGktk>˻gzVw4F2Fl}{~Xj{1(¨NMKcF7wNaꕅp:<|9B o>DzV#ry˭>K/W'c$V&["4,֩ܟ qNd,X,mm69a͐9jXisE*Buri=u.09gpq sVl6[PNN?5:U #'[[zڅ2`)jQЭs:[߫*$fm_T2R2 G„ $片WQ@h~XQ7umM< whM1pG ?*(ʏo}'K ÿԿk(aP}'I ÿkhvyO(OGQ^#B:MzX.y09A-KO&g GRY&Ρ4PKO&^POO& 54P_=~ ^]vTzPEPEPEPEPEPEPEPEPEPEP http://ns.adobe.com/xap/1.0/ NIKON COOLPIX L21 Top-left 300 300 Inch COOLPIX L21 V1.0 2015:11:06 03:28:59 Co-sited JPEG compression 300 300 Inch 1/200 sec. f/3.1 Normal program 80 Exif Version 2.2 2015:11:06 03:28:59 2015:11:06 03:28:59 Y Cb Cr - 2 0.00 EV 3.30 EV (f/3.1) Pattern Unknown 6.7 mm 828 bytes undefined data FlashPix Version 1.0 sRGB 2048 1536 DSC Directly photographed Normal process Auto exposure Auto white balance 0.00 41 Standard Normal Normal High saturation Normal Unknown R98 0100 CC!   8F1HĎ#:u>׎+5U c21)+>5tT:bqTFTD W3Ӟ7~'c=q_4":֕*ƥzg<acEB5hS )Ǧw2P|#'ؼdaThDMI]VAr,tkZTi*쪊I:t؏kJ%:WGW^iZy|5ZҴEl+qd+1AŰņ-82칅+kǬʮq)ڲ.c~DzFoNy{o9=D}A~][|S硫>n9{W_ܸ7~[]G_y5ݝk wn!j_sGx=׮/XemywbɌͫm]Zrq1j|kYo#Lq/A@) !0`5@Oy=Sa~= (xM(ϔGʱxi}e!K[6XCqjCȦ򩸯7lV{QĢ+ֹnn+yi{^D$vQdCsssssccccca\l-A678+*^ꨉ9w676666667鷘;'M}i1zhC?1鋘=/ cb׉a9s/ 1A!0Q"P#@abq?RB|O@8ur')iy {谕,+ PTm9B΁΂P)Ҭ9u)pҩkZU;g#e\vGV5@itU3hVAHiMtiU7\]DŽCi# -̪D?`l#3WZW%ͩ5!5d+gQ(aOyQq*T1 1!0Q"a#APRb?!HR!HƐTq&q7n/:#PpvQLn1)R WRK m26"-=ŌRe?g^; [zjoÃ^asaduݝs79|"#C-S)cvTG 7cRLĻǰs8`ʍ·9椚f]1Ӥr^nAn(R  !12"#56AQaq%3@BR 04b$C`r&STUe? @(T;c}Nyg7WivJ;c~:Dr"loH(I}"loI'&i$M> I!i4cgZj|fZ|*42(A)R <*UPUUSDL<~Clp0 KRT9y̺S٢xÏ<9;[ ڹ$̞D)>uȨؾ/c| -P@Quxaə7,'1.`ZϢn2͂~Y3x`{6̥6 'U 7QƢ9zCBxcҢo1c<@n5<z[;`{m&ldpL4fn@$x|i۶IlߚY<_L8\8T#,ee2\g\g\g3Fy}'X\K%M$c;@,ĺvUȤ-LBwY={)(BUo(AJHOt׮J˒٦@xPDhrd芨TeJrx1,6lCQg. 6&BIpK vvQd[Zݶ] rFKJkyw38*sql_6DvKFy u2D.%2ܱ;*[SR@/8tͱ :#dʌ)f4n<ӾGQ,wͻ* A<=h9Wm-=zBƧ``gz}f9Qҕ\41P)1gVZblW;,I6 =V\M`vxe4܂"M KvJuKs"m!K9h۝n/AyZf[&' St\Wbf Aʕso /ʝnT໬$y-z*^!`&##7DG8,PF37D.ب(N֍e[GiѼ,4}h7Xf''5Qös )!1AQaq 0`?!=Te_ \u:JQ@eSMF$Ml%©BF>󱙜fS̳4*yjFy1\g]fpvn>vjVSͰ~coy=Ȭ{{>bޭ3x?$vͷ)x?GwǺhWul;1-\K;H'dW}fhpa_ a@Kv -"5]^)}co!E-\Ich<;Cj=[>@'1{.yg'3;'k?P(bu7,nZ7410<$y恠ʈ}ў6B{e[xGo+hy[O5Ӆ#}uq臃;8#G,rq +V T-K+#vՙ4m,xsX.PH]+׮*Mc ND~%KoB)V!%0VR YPm0m brꍽ v^ufS?ۅ213r6fWH lM0(vܰw[ eiCvi)4(tT^.\ƑϩoY2[Gx)C{J"8v( M# /x,_ 2gKD Ӂ3 M{ DVqax(΋4@vi{+@!L,w3n2t ^2Kz3hy.{nSA?Qmvc:B&7dWn1J0X Ei;5AV+HΊCB`D%՗ɬ(w2b,Aٹ2Wc[Tx:a'œJm9AFg4LFaL:_F69δkpܷtB֋HA)j vc+P1 2ًKJݹoxōf\l0 ?dH0X#bؠp?D/:WH3LR0w"pҢ_ uDDۉ}wζ)THU΍xЈ5-| ?:gt ?װSv# N/>ݚ> -[~ݐ t.h^tߊL^ҡ(4J*36j8`%!1AQa Pq?RM ûC;D N350-xe%^H[bn1J8%Is?vĮ!enxQ}V*bNŌQrDwԳw(0)rlaL1 00@y eͳ tiO3f 6;T:b9T"YH_XG{/xUa[l㷦#&&* t@w)s*q)qC~[]!kYP:n;!KqSZ^!a`c@Yg ǜ:$1wK9Ysf9Dm(4_#1\p.g4Re>cX 1Kk-qΗFz6yц؆ J]苒xub'f& J6{(GrvT~2Q7YowcgXZ%SA(O01;$+O*=l Huԍ#F I׷ {nc0{+_1Wjvi ){]nd y{DEXL8^*Ҵ(~OsCaw]X~40P,M0X:$|dHuJ"@:uw9Bhosd@<wi>)r&G#tSy|hUxO9+A(V.ѷB`)1"VXj) +Z|q~v`Rr+f4_!oA8 Bk6Ya6:ixx!hE<4'8?/7g/5k}ǚ٦8"j̰i1hA]Ro4Vzg^q eш-yX /ilX3c bkRQ+ۇ 'G4SW[uzz縗(x@ќ(<@T@GQ#,pD5fpKn. 6La".lsRRT9M<1@>1wkbҸWF1w};\$mLud?x@44~@}m1ƫ|4|Ծ0z˩ ]5WtH0JEE1%2#Vе)%(zηy&`Q1פtCY1]¯ POBȖjKLzΉf݅p|0^:h7RW+yWOs~|` zF3 =;Gv~{'>iY.6eg *,*Jg˱G sٹTAߒoa t=R1 0(,-FN-H #>B%v?\ ͽE= \]E٫`h((:xܞFwCb\ɠ U[c-)ɉbDO)Ȅ5e\h][L:i(i+6[dD\pn5,ᭆ \'(@)ݜNdpE m 2u:cGPn J#Cfkӕ”8C% 2zNdbnyz U>@oWh¥ Lu'8jrXDjm A֋ph95fbA ,.4-O6)rAeXSRwi"TgQD||qkX W<9Ud@Ȱ!WŶгTG FNV  ^0000fn2013:04:02 08:18:522013:04:02 08:18:52tB@ +dCO4S(BHHC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222j! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( (w";C%P h3CFh5~^@Q@Q@TW7Vp4S+¨@Ö "}:[!|Ǿk߽P,O4Ͻؽ2} i?"漏Kdh@ =7 gw>"l$pdd8's֡ሟ_CVhq;-snti.;n%8=;ҋ,lVD-57}LAEPLXE5fs>9xn8&4u˟_`hlOls٨>(Wl"BN?O/~5^xi.^kd]\2֐۩}vl$ۇkDy2< ~nǎT "d\Iq15loAU@9'l˛MS7:Csz-f$;|>zdjM?-` $@R3U pHRVBlm2IVoƪ;<BbthN'N)F2ï ,K,j2rhPׇ41_QIcSAԊOr,n{ڹ~k?u‹-LeXEny{l}H"S2]+wqu*h'q=(fuΧpuPƗ*pF2 3dp/3\Me>[UFՎ9zEFUm+qhB$Dm۝rA9mh3[Y\2%&d;OJv VSi֭ Θ$hdf^b 郜vWŭ4V1}q 䜓 u(H|!le%U2>n9~kM>\L3_0)s=x)T'a U\K}T_tPգB U:qSm$ \m^gT80>T)\n6 |e5A(S2?=ιrTltZWzlm]gBY/evH)YqzµW [H֜%ï%VpVbC~8rOeKLgkgݫrI&tW.s=~`%A$L܎If{EY/'E  r:c֯xrY}'C8V ;yCj$K_Ŀf /2J*i'jQzCMM-{nJizGk& 2P8 =p9Bl|2q:i -Ŭ;z+^ޙ kW7aA@܂{y9iZIK1$d5,2}~4A3vIKvجhǰnπ94Є[V_[2yolxRROe  SoƽW@g\Đ@ KWem60%iaA.E6\F< 8\`"6E,oPd,aYJv@ ͷ''pbZysɧfdP'=J݇s[gI7ep&JlrK7]t.ǩ]{lnݘ`B6շX'=}y}KyxUUlݸl'F'aOPsꔷC2+ސ 7%ɹ@R400zt5Z,0i0[#lN];dd3|%rMG6hêrm bI^x#Ծƙ]&in?r<嶯?/OJ'u5md>!#}A4%@Ì%ۙ\kc:j+R}Bqߊ(gkxe3 0cr ֑%e.5\Ym ;Kܓz\M}q!(c8!X :sv&,!kҷDs0TGga-nA;Xw܎i-OC;Xn}v-ș!1SyhT2Ù7J]VU'{Էr P{DzM|O-HR8jn;#We.{zd | {7Bc,F:TG:$.6On3FF6xBRmY,_ 4V'Q#;۠GJ-m`` wdWG]E<)o/+)$;QChu.->KaH!`U,WqU `fGɤvy bYIقx zّ7i3w5{IFqS #?6?Q$G0(^8\{JXvTo4W9~~V3ܓq @¢X-"Y$m˷ UyUZKFuURnq+F`1!F'ɖᘯC`Õ$u;=:}۾lЁЫ+i?'uV/1 siHLq5Ѯ>en'`G-}s XVxc%QQ@gkpt;-̭$gk Arq@)jIquƓ}dyEߵ{1bFykM|麄2eʑ(&8#mdhjPLXO;X8 vzwħO1w1%`ұLo<;?T뎵q@#F쩍 OjӶu崎䐸RJI] i7aFlK]I(qzG.ۯ眲*2@%`Hnb;]3ºTvv]ٛ$~uM$QL(x?Um1ؤ, H’sp@9<eu1"f#O;Xq:ML(E<\A&.݌nE硴Yp<-ԁҪZ=B/CѼ6Ox1"8;|q^|mG4{8Ա9Iaӌ>wφn~Fy>]kp@p0Kkgmcim YȐ"V QLAEPEPE'R$X䜒Bܩi4efij}֖I*Zenr˽3dΗ*j*PEPEPEPEPEPEPEPE2Photoshop 3.08BIM,,8BIM3P Ray Detwilertwww.radiantsquares.com8BIM 2,2Adobed            s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWb]v*UثWb]v*4 ]T X=uU]v*UN*UثWb]v*UثWb]v*UثWb]Y$=i^{J/2rRZ\Fh$A oY0,"y4ߥ. H!Q_'!!Քw$rG,k$l7#.]v*N*UثWb]v*UثWb]@j:[VIX Myy.Ԯme$=)8vi?dm&T$4* ?lhf~f]]V^!AESB<0[}4y@Sܪ)׈A (Ac$keԩrszt/6*]z֓K*1ފ Az好Y=y *X'0ǀ4By2Fll/uXxKJ׏|{O{xv|6+Ǒ=yt&YSiFyW(M#͛MLv*N*UثWb]v*UثT&iZl-6y KyT`% ~uLVKٮH xFXS֘f9~*NnM^+2CsAzE>*q?͏bЮ,lxB }B#Jw!uosk2sZK$=ุV(Zi߆ T ^\@^kE`KƟ2VLUKhZFV%E^[oE?1-w]2(UT/Ҹ!24 dsa֟YiE72w-Ԏ%=@y/dkFEP`z m<м`4uc^c Xz> W/X}'ız jX\9"+N 1$NҴkHl-0XB)hDP$liэ8uy4q  APwv*UN*UثWb]CjQo.bEK-4uΟ i\3ŅG/['66u{ͱ4/us.cZv/ مk?tԂ\>xZCjFs 9bᤁ/. 5RIh4my$[ "i,uHE9$(0Z[wjwn^{f=H4sFp¸aʘ΍{{$dJ̱)*JM6*ɀ2QyK/ȷMzQv9DVƓlw~VfO$}5~ȕGP/<}7Ok/&]Hh(>&brA6.gECDr┩_UUF #}^¿dtSI-r/wJg-=; l(+~9+(jS/Tm\imfWew#j(uC;v*N*UثU+D.i N6b/RfR)ۖ_X-i7we^vUvEva~dVWN0F1u* Եգ;igĜv ImPXfHR~ӳlx*WEӶX&`$+'쿵ˇRԋi_4sNzJFWkZ X:j\c+y$ʒpE?x:&K˷܏+P/6Ƒ䗣aUUaxgy "чN8j(y(n(}VMTeZ?wzjWL K lIpNJO+]3QX+;htyH$d͎28\{=Ͳ\ەAxn5v5\LIy;rz_-]A'XZ̐B5b:ӦrX&\Li G`)yڸ6Nc$r~Uzy=1H2EiQaU˓NDn* ULҭvZ/Mq.DFYAF f쓏J]^x"y;W~M8蕩$E1@~dlu{+Xl!)͐aNZA8ݩrtx#Jxy-0\gq=z]SUkdH$o^.OgK[F(H#cE2U- ͬq| Q(Ԥ DE*H'ߦ(SnR9NNJi&Z/6HE`hvch~8ƃ᠂JSMos$6@wlY~yIVc?+/&OÒc"k\NPen хE9~8)6ʍHGޣx+lG>TZuX'Tw ii=/WOf|-?Rx+mt eHH)cso1 '#O6X5q,l6;xy{X >A(%q@!bG.YP;y':|sC{g*YdD"p XVGŒ3%N&'pAMt'jkť4F "Uek˒5$"iI)^5wC  KAw,NEgnU$IAaؔo|Qt\qHsC}*lnq VVErH>LO $SYFdxM9+ua%ɏ6c鼳i0_5ƣ 0QYw_Ĩb ٨"{J^Cfm A, idTV*ꅛA_Yi FUT6je9Y1,ODtuP]v8c;c8R#V{y-8K&5<@m_H[WՄ[%[]#)"A`W2CΤЇ)#vvm&h%hOOp N OY$FUvRUh%; EU[z5cfi43GU 0oskQNWi͘OUb l>@kOtѯъҞ@?^9y-F=sRnU^|YT#*$mQr{ɧo}+]$[p'ՄBقʥVKƊē ?BMoO]>_A1vƟHmPh%V(u9MՑ^LŸ U5/_#}L3Vkrk%y;Fb'i/ ߎD6 'NAЕ=@'AK$`+4dfӤ%dTOC4J˷[I=GX߽2 `뚣[dӔ,#]DŔupX5S dE=NTJ$O!ߦW9P+]hrc8լ5MA5nTE-(^sF,~?g$"+g~F˾h."ag0][۴ğ#Ԉ2G4F}:>[xekwP2PSЊmAU‡Z&w'bk.wYĄ-Ypq1$72D$ mdnOSLj;v(Kq!kEZ{-c!%dP@1bo\ %%[&NW9 lK!'d}Z_QV81$kNT/,8V,^GyciHP9"X"Xym s^YV=u"STOLGO 5&,ZisȺf*BEYUrAByʖ彼-.dP D>2k~ _^- *T+O#eQ#t* H@vM2vC(a;#uEx֠hݪ25kh[)EKjsF>(dB{2yeZE\ztnO}>hFo߸@bJYo˷BւL, Bʹq)U̶d]+ Y@d{$LҞ%;$BR0U];3Ҁ!ˉZKHltٞh7ܼ$F٪M8\HFkmeh}a-5XʸB*QCRӜQWoG'jv~lt ci~%פY-|SoMe1Qm7Wi#J'J86l8W֭"屢Nh_YPr TDpHC7JݥMQUլmyuqG C/VVn ?XyFYcɣE[Vp$|R{ުA:ƪ8mjo,$3K,-n$  *;19qXoEAxUT:\ /!MhRUͰ5M!%"?Z[=U/&b =Rb?Zَ{+9`Tq'QYO>s{570 Ildt8V T'i.-fI ='SU;ī j_- +{$>ۙRn6XM'1znU&$:2oCj!m-ӈc32zS1h`!Ay{CH9i3QOuG?h*M P|{`[\A]Jc+!eeQPË1BOQ,ȾlKR^nJ/O;uF0>DDf7ӓwςK6 _OkmZ}26&y nfO2Kzm_<7TqV2~bhWaݖ9CpHOP ^=q~?e['ЫbN36XʇcؿBi@BKA[iupfK˩BP8H࿞JsfcMrb!NV9nY7i%N O, [ms\X޸py$7f(p .KݴXoJ;`Ҍܖ[TabR9P|MS\BI45drōp*إ=7W8;ΟBY5Oi]ʧ7Β3pl7oF]$gBA Hs,0_1u/>_Z0dxBXuȕUe4;e=D_FDյ"c/U qh>%40 ?>Sr{}&@s;f6N*HC#OB22*y˺qo듺G4"q)"v)[9?,@?XS{a"[Sky&oRN@MTTr^1G I_):ō9UvC;86JR7IеX/hLN=;\)? X)rzu}cNylky p# *>:{;+&Q5:n-1Šh239`ݮF'fbK+$OBRZghZ4*3,7*1۱iVbsYNMBLX}*-Ú,|iꬦ1ga\yBZ&"ȊG !$RPR/q%ih$x+0n-4ydēKXqU$jXDzRB0J?xۚ!jӮ)a>*L1Դ^9ID)7Տ).:@{nDMMnGҌ|g}zG4-(XڜӓLpثWb]N*U*N5o/XF&Ha#reͺ&Xj3H6.79F,ţ"?ftImy v+Q[\EgBkʜG)0;w0kϖ~]ڵqvo'A0ZF'?/8Lrp7yBŴHW[>aN~*_fQrx4+<~xDP"%k🵓JLeRN`4 K}ˈ+HX5-f!a$W$\BCmk%F%ϨMEi$(V6Q Zҁ4.[VWaFCj(qnanOh2/-̪ә]=8ym2g^Wf%X>/R dxM7ʧ)[[UȰXQzA )M[VKv}cQ)3`pƱF* M]v*UثWb]N*Uث4PDzO,S"F"a)b/|ov2"ņԵ6m'V g.7ՎT(_>y{#M+khyO":3+Xʿ12˒͚ݮh׺rx/[yG:*ssW?~HD)IWb]v*UثWb]N*UثyES7fGT`UĪXX`@ 5ySVS2OR2ʍMטo̼Y\<sO%y7>[ӤѵTI$0S21_j%dcQ CgZJn5{e8 '2$H>dѨ=fZ2 "DS9C/χR>i,r ]@:RFzIpDCF?W -~ZiIq"M6y)&&@u[/A޻Mǣm[fș{&#oXA} ?ppH+`rdvIeԸtP"> q2ɭ[ĐĽ5 J(v*UثWb]v*UثWb]N*UثT[擬b1Aɲ2, fM"p, 6 @0$|GuЯ IV*wX53YG[~Vy_HoF"XbS㳂OerIP?It/Ǐ)Y.q>6܀"'d?3 VFyOZ2LmOg~);v*UثWb]v*UثWb]v*UثN*UثWb]v*UثWb]v*UثWb]v*UثWb]N*UثWb]v*UثWb]v*UثWb]v*UثWb]8BIM%=z Ӏ+X [@ICC_PROFILE0ADBEmntrRGB XYZ acspAPPLnone-ADBE cprt2desc0kwtptbkptrTRCgTRCbTRCrXYZgXYZbXYZtextCopyright 1999 Adobe Systems IncorporateddescAdobe RGB (1998)XYZ QXYZ curv3curv3curv3XYZ OXYZ 4,XYZ &1/$http://ns.adobe.com/xap/1.0/ 200 Ray Detwiler www.radiantsquares.com 0, 0 32, 22 64, 56 128, 128 192, 196 255, 255 C      C  x" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?E`uQIГɥҌ(AQހ (QA (G4g4w2:Qފ(94EQ@@Q@-4Q@Q@9QAPފ3f8 K@@9sE EP hICg4 Fy 3@sEGNh0=h"EdQހ HFOZZA/z*խNlͿ0y 뷮=|`h NQ@sAc(4tњAp(QE94 bsE裭P:RPh9 4PFr~Q@Qʀ ( (u1):=ih=EtEvGJw@j1H3@ @A:PFhQ@Iiq@w (R?Mml.kh[^B1ǭx+>tycV[h.At9kkO_vO[+99`~ I-O6|YI N( CqT'gߧ^KIū|WÚ I"DPdoҽ澱k}?O 4״H(X%QG~E$=;ڽg#of\pazc Ag^Vկ[4?wo/MW;Ěi[?4MёfSºCJI]NE9KEjQE!GJZ((Ҋ(ҊL֖P{@Q@Gz(((QA;FhPA8@jZ(f(4PI_Z@wE-#t-(ϙ{יN_Ꜳ(YQGRSm,1ƞ8O"Xu 0:q_?M/vQ 08VJ2VPt hf KEQJN(p(jc&qtKtQqg+ߊ[i5+ivva;|͞d[k.zqFQ)I(_CKtmK~Lwˁ,iq5~/hDp"VS{#E%eq5TiWcq 7Ğ14-^S,-:[b9p@W]6u6U-> Fz^τ|5o(Vk{ӣpDD[&aI5lc)Q$_aW%/b Kl2=U"k }Z(2Vr0ݱm-S{+H_)rfO _ ` gø稯XfP6u# :+?[ x"x09= G?Eߊ/آ}~MJM,m|r>6-ƥKΩ(suGtu&aGQGz;@:Fy ~4P) 9c1 ҊsEQEQEQEQEQEbj(EP@9(QhJ(#4Q@9 (?Z(4QGPFk35Ѽbnu[L-Yon܁IocO*?zd5Lw@ WWpտˢ>,5t :7O=Zv~V'$ݙ]& 7f"${r B_X_uiӂi I#8՟{1xm5|DI=v錓~ɧyG̭h=?|u.s1խ,m>G=l^.:qpב1q&g ,۳/×~ڕ>nc ;R9Qğ#T[r&HvETM+q97 uGDZuX[i}V>,|f,ңh F2zOJ)xC 6ecudY&H¡^?-BPx.o,0}@)( &ՙfuUGlb|c9q^ukV4u&eGH qY|%öFر. ? ~/jj`@vUD5IZ?4tW sj &&ѷ)?J_7\mk ɣֺ%d~O ڢ.+;!;Z(TH,[Fv(VubRs H>#ڿ/! {?`v$#WƍFǀYDH& .eQfQZ}?d / xuuG2.F~Sk:[V_'FC3ӥ+uO12LRd {rֶTOSE`I3**3sBw:L@yQEPh ( (c(<(OҊ QEPQ(֊(Ps(h (EIzvM-1;EwAԵK]ѧ多@RxZ'[P߃&֏@L(^Bh8 +/þ u]B5 ʶz6q#mu+~֚76 H#D+F|]|9yNNdr͑t?k/4 X[Kk}Ln 'c'ֲ?hkx*"vK7&)j & OOZN]CM{=##:kYa]PZh:OkxhƬ9VH44^ ^UK+GV W7i3ӵ{G9.^%'~x~/Wzזa\yHg|mּ|94(W*Gu@Qs9Q;u[ 8m 93d:R}_Uѵ:Ts& Mïw|p񶅠KK=aFᵄ*OE\q^AxĒ/.nܜBߕ@1ҧI0QHg٥/QڼXmՏ" cqp' qRvcK] bT=ӳsG-8ʯ\ת&N9TQ؜Sar|Jҥ)*uY1^r!G1CQuKmۍ ~W_ Q Y/öΩEh;ZIl#`c\X> g Vkҏ4ϥ>%htKY<% }m$~"bPŏD6fbG5dbszvz;F*Gz׼B^ILJ#R2w rtދcRu|RiH{cDqs gAY|hǃE5ʣvE\^5 = {)|5¢0_A rq_<Ee;O>5{]V[n eC6zhBT,_O8ͤ?sWk}y.Lf{4 Ӿ?ZgOFiVwzl8㏕A${OD|q\[|? P/I*iBH|D=䔕:3Pꠜjڏ \{ 1+@|GsIa.A|??]?א>!#CJ4ďi~ x>_q/_b|1XtPϫY` mZ5?!f+_:^g4m0Xio٪B@|*l}hozG? [H[|My-acj c }'K E)bۛA4x9g]I$7+$nRHrGC^C3a.T{7ѹsU>]4WW4WTkswmmq)}àәv #Qoƺ>`]ğ v!4}'R{F8&9`9s*078> NNxh7WR1k:HH?6;8x~2ZFlsv5íN}/rz;}>MjkEl"9 z_a"Y`QJ5~_׾ )uh$CA}e5.vs.pz/⏄?lM3]/*?wEs "Yfyv1Rp;z_3t[AeEe={t>q6g19?u\&//+4x;L'žeP0#9W~>$|WxT#ZO" ׃> MFQ#^c^WEydul8 O~sbP]*Z/I5]ĺ5ޖIy ݹ0y ڶ>0xCNbNA".1}Fz׊|~Kwc$z8<((>4)tY"PR:2r4!wgxFDZwr>lHxO#})'( `[MG+r@i S\if8MN:Ts]rFF3I&]Yrzj7x?dE{2z=QҕڿG?i>tKrHӒ7،REFl j<.m GHh>~Z (a+Y%KlpWJ 7NOo 2爟q'^F?%RQi>Ws m@K-~[/OS|6 xNj4l o)P2K ZWg+Kg^٦S#e8(&r;ASy+%t6+|vv%3*9yk3z/ UHҵH+f-k2#/^!ZN}-~shᎻ9R-.`OYbZ?lB_zl#oZn_DB㈄wg;U'UtF8zV~ua< 3~x{QԤ|]?~:$`p@UQy=/kOx=_ZeEeh3VxII1qҚA0.x_Y5f̟9»s|' $4mBzuP}&./d|;1rINּ/|Yhvݶwxv Z >`R[i jԤVGJ $g ~& ip9e+,vR ʡ08;⫟_5xmg_?A 3w&݅!vBX־Ѽ)ustݖ oo,glM.kK<hZZ,E ^$O, "J{ĉbE 0c==kZχ5E\jyϗjٌAs,vQT(ث <瞛$-ƣ,!ߋx`E``8%l_&=9+O*!h1ǘVBF!G=O{\&Q.<oӑ&Npru9 j$t>)`LJ$[2 dlzW^<׼=a]Y dg3Նv2FMK7YɋB YvNz^k^xBņ6ZzmTl+3'h7-.;ok>]<,tkKl=rOS|wy uXԻ~| :_1Z dbizQE J(Gz(Q@9>(lQfUE$(mτ"sgM0Śo+z^kS5dy\` =H_9Z4oycEp_߶_šsG'⩻(ȻAOzMf5oyr,IhnCm>ZztD+%o_?q>.!?7$ByǹWϾ!|5nZ^u(Jlgb?"h:|Ysxwd#̤dOF\#޵k >.%ɜFH;vf'9Q\bxUmZνH/[s 1ӥxǯ ~IX>h F8#b=+aI2ϵp?:pIGw'h/MydeXy 2xWG&-XB Ugs_nO6eH"hQ9G׉| ÿ(ӴXo.6޵vKN"z?x+zֵ^_]I[lBmx@<5|!7OdGoaۀ. : ڹ?ß+euqq\[J&ld# |wѾ Slf h}Rd+]SPw]/mOtm.XnlZJʣ;xgSGtKTqE`0E]uPɴ 9O4$J4k 3ґ%'oleHTsWmdPH΍ zZ|)^2 SBV =wW=in{ɽ*;k\^?"o4m!_M][o~ּ-]{Śf;FAgh싖oq*Jȕ+pHԴ[q<6ìDAX+뿆׉!|9o;h'4LVzhg'8"_O^2n"#-LbX!-HK)aJT>dZ' +ßդ?+mo}!=<~^?f<o u=wEo.{f(kxvzï| ^(}gI;^ ,3.NOcygBO#6,7j& d!#=qΎ*T=}zuBuNu7Àhk[Hf6Rxn <'WeY.ߠB# f1|g$>4O=:-lY!H!!]x%ZD\(8` 5bHܼda*_#SP_נy!k^Ǩ o ;C*<h:k"i."e7dE?_5 e۱5@sFH᭚=r*'9'=mu~CNs.*.`,biwY3$(e`hǵqJxsm}0~hmݑ5c+]έ~+(u["!#SI>xWKZ}쑍pI< P|բ&~0xJGռwmXWW;EU1$'pq)lu;|/.\$cX,5 'A'$bDU[  Z>'Ӽ%I{j6]_~-O9t\i|EƕxJ#y` /af% Bgom'ZxkOX`'/??hץuvgGkX-ǩ(>յKo xzmoS/<1X*Y0e4f<96qxZpeT ;=77modo爬|/ݵoAp,ǁ;ߴ+>&k? g\F21i; Np sZW|/VMM4r}NH`n͚;uY$~~rq9n+? <)3[GYv[dYQg  y>՟VR9Z6I(˳U8W)= -bU@SygP>*|oi2&WP2l2f5lsT+g5cS>?<91ebdvM;>)ndK[\x1lk|s_0s)*5_~j>) <UYe' p=*Fn~?Ik.ſ \CGދi4 %;]\BOzgoZ_RWSx_)`v 3;V֗GKi/1R2ˆz|͏=zLΙ;<&i;}z Ɣ&-{uTtb["e)bc̉z8?yιUvkȂQJCT6H9aKۈ.53I$(ؑ-|!v}skh!UMGo/q+_KVloź }V幊8*m*ʠp+WEBik?h7ڪ};q>ߵ<KMR[{h[m4<`87'RK 恥hM6Pr@'ch?rk}|:Fh.&;Rm89#5mǂW7idwS_ݬ|:r1\߉?j_6mBYF"3tzu/]m-Ԅt?g*ן5̸Ӵlgڿc7Znx\FEĊsr?|w+']<9rL|p2$u)e*WLXk7RMRZڷ(me ku~0ҭӨꚭ[[] 2Oc\j9$-2ַAFԫc_Mc*\Чk[n!,:~Wd__OǺm޵H|>ȣ>W*$s] Qzڭr*Ub9.SB#dh1 gI-*VNhh|{ݏ~*j\M${(' ʅ=qc~u%zlɵ;`Y4IS}?⥆[H6rΈE8NM>dRmT*,A2^=Mz |}]B#]r$R4쯊.D@كQ7u>692U}2vz5@ڳjʠ Flcb'l$hR+;uoCZgk7O_[9dǨA>Fr5 `= L׎Mڅ2x׮~ͺ|gu[3KF9Yn_J~N,c} 7<~"l5[\ bB쁳F~ٛo#޻ w5"Qրn3jqq?l?<>1קE%ѬcYqS[*ofq U9zgUUæ];p<O>prTbQR3p3]?j+#&orc X T1$ I=4p Tә~U8d2ql֥{OouNk[7>_Q^_'||- ,f:I#q^ ;J0]ea޴pWRzFo-?D.k)tYE$I5G24=B(i^;ѮYۖnNqhW{|/S{9X`ӣm=080|-%H/lWWNn ;4n9S>)ݟ 1}V‘K7 q5恪DC"$.ĉ0ASO]*9rj/z~,x wXH456*Ccƒ@:װ ?ۋ!5-?SMԬٶ}LoPb+!uƖ6""e#,r3}*O$+0O&X#[[xޟ5 <-tt5vʠ)˴;sONnuՆOMbMbKą܍eS>\a[ NA=k;o/%k9Z0a< f']—bOA5Ƀ0jBR^FUS6Vi_֟gZIۆ[]J|0e]`|Yh^ԾxGUd{X|ıı[ '$mX.sz?:t+R_5?Xso,o,H+}k,@IL6y;CsƤϞ*MT+о qMu~$E GJ}2Z,?c]?J#Ѿ7|7mfm']bwIi*=0푂8eo|-Q:F9u}Ia.eJѹQWԇ+=EE ڡx +/*'gìjivOpD2d`O _i~CY lImy JE؜)$/ X~.> oCծ_k,pjV;6)-Iʱ];?7<)5ZinW2۳[F|.Iۀqkmw 7X|>6~k+mgCEH#1*ĘwFŁ<M34>/L}~3ËygR r0hՅ,ң)<\ |xH[ K4[[?( eKKvgHaeTQOt6Vxi;ŚdžGiot;{h$*NZX0c*T|- S=rKTRԮΙ,]1vI|~9SֺQLx}]Wx] l$ĺDgw^kb"[kRCɬLuuKOҭ /.?Bf# ~N`mt,!Ϧb &>~5_+u>ww\}yqn\vd 5^Dprѿ?V?ڋ'KWX 4&*~Jc~"M]{ 5q0E9ߋj{㳕9h6.񾟣i<: *HUB{Ob|#h\L=JF%IŽBu=~`ut<O!mE޾1RJR/J ^(͜ih(sEQhg8\ۭۖxN0p~뿳 1XHIΏ%G s_+;{ .Ik!܌ <_T_wm|(M"ln1܇iSt损 _a'}3w-tۄctaq#)~?(Oa5)H8k~7hKXK,N;5k^-4erZVv'דXլՖpϦO(tg,;yEp?x↠g}Σ5g}F&1*eTI9R q^%B03__L?"*צi/.?<}Y8<=U+te.&3MH:t<G>tf2qO+Ͱ˙~?R*Y*ƕ槳_lUK1=xrN:q$zvNn{[>IFqߌMqbz462̼O'qCK< 񞽩\ P$EEn zct#ڦa&Nݐ÷Rk=EVGXUq=BIцNG|YJ SF}.wq,|Kƥp n8=GB6K7h5u)#s^O[G]g1^Fp:+Կhg<=|`fPGxpO̮d$gҮ5Mr_/ [%sJ\䐺`r+n^%vq<⵼|^(UЩO8cy+H3R2͓I]Dtg2P=x~'sWY9ԩRRۈ`:Q]-q\rڬـ>!ISc 7oBqU'~'?M5H~Ϭi褝9RrrѪ46aΫ崗`TepDlO@wǩ?ÞI4i95,Q`*_ a_5M x{Q$բ7KyӠ P=2:Z&殺i;'f~~|I|_swvM-t+{DڬRHNza~>=?:}BYD̎81'hgHڮ -@@bǃOSPIjb8c53QUܻ[wX3©Tg?w՛M=eDFwb\݀} /4ߍgď^ tt70.08'_zs> kh>5O1v*L9Ft5ktT03q-kϲ[{K^K;;95;hm%duiT0vQB _o%isLD3aO 5_'oUΟxů{rAG;UYVL&Kmk̾.U/c}-sC,OFYOQsyD8d3KU.eKh]"DX/3~fWQmY+{dQG}ῌQh/4 R*7?fHZWJ qϭ.t^@ D`E"8 {M mL9I˭sx<)e(!p3?ި_o_ ypN)uMn{l+Ptҗtc}Y:#gҳ3[ YۭIm3 k=~1]>4k%. @cHՋ j?AuajwlĥVqK})e#kHN–?G>WV/5 \[-=C4A c3QqP. X\Ikp5D;\pi1p1_˨ɡEwNm&!brְĥɠP~x~m9u^Ff˃L{utk-FȿsЃZΫ{pA,"oī.SZЕ=Xc8|P~|Rqڞn203axj4$VgO&0F R/cZtmgE>3!sg(ʺE>3W獼,3U񞳧xYVHB>ְn~7L!'nNA環%_ק[Wyc jz4:vgal[ʷv,v@ $q]ɑxk+ 8HБFwwGS^ C`gVn4} ;pїY`W𶘿ݵセp 8qk4:PQ^E@PNZ(P:P'{f>o$9?8i>u4ז]+se,d!R|w< ߀J͠x!޿hk,I~7܎+Ǻ~/]܈FKzU{"lg8O-)vӥg;֖ Z#qN)-#vI@4cM)@r?OZc \,6AR3JBQWch8:~k/;2)+)8*7掻{-}my{?=#ΞD{ Ϯ+Zqb|P}3W/n|k>E@[ol3n K_|Z&Qsv 1m+{ %<;~kߩRNiikx+ğhZm櫨0 e'W?8a:zJ3C P>/O'KŸR5xc{|S:1 b*O]9e M}Y-rE x;gr4he?^^=&WљF-b yjgeA5+cwZo%ܖ:.ߔlʤҭe/-N5@wX'2A F_iZBhZV-}M 9(T-I93mZ>.'Lj>@>}ks츴,gb8=YAr'|o ui7޾$챳e[[t{/\feӭyK;MotO˫B,; 94+zKu+_Yu m ]';W/4)j>(mmt]^=.[x"yciTf >EuBde)I׹ b$ Kn=y? eacoYMq;*!2Bp+yWpS^ՍsGTƉM2Ѥ1Ǹ*0Ok5JXZʨROקG$z7@?k33ڌƎZ8Ys9b=;P j|lc[Sx*ZJ) 17ċ=k{urIlmkWI7!w:o7Wnx- +]ծտykCDityqȋGf )xIOk:$}ocYnhZZݍZe(/i5|ʀ| {SE˕|]{BuY.g)"H  A g-z}kOƺY-R٠g51f'W,^ F]`oe)3\v:9:o&#W+^ּzv}ܓ8ңO*'Tj |CaKh{ 7\\K,Mw$ WWϩjci=;`[hʾ_T|.F*x@`[YF7G{,|ˇfܲn9dUZp/g/ӜSG|u<[_,,l4Vў;X,C QdVeً?szrVHV_$Nz6]l"EqXAtk+neW{ lԫ_j Le$ka4W`d1;:d{ƿþ1^A֓N丵T?|U)dg#@S|y|]K,Q[ZEeo-1"*A8$P1]jψubQ.gltֽ!utOŚmE,,3c 8򋢒 @9ackε=ZRv 'ǒO\t+Z_X;;t5Q+78O6^)<-wz$5 ݸ#V*.U,x8?Zk/0ZO!,,q  -?G.kۧx)S-\pZ蒓&j@ֆ#C;M[O\*Op#qsI4%Su-#Ō"2X[,ḟRZc/bn((]h: VϴY&KT>%u֧xNvi' 2J֫ww4'{zVR.1G~zt!ּUw;Kx'ƸUS? Y m.c b5b19>CK=A8r.0Aֹ67W&6C{͸U\.$Wb&rv,mpysѪͪCKco>2ʺ EqH0EMD9ue뭛jFGL ]zյ `hzD9UG&= <tW?Kerst~'g u+iz/?Qh+<(')8ZZJ(Egυ?g5_Z23m6|˓:/y=7aǠg{Gk5y=IUJQsL{GLF]mKKc܈7āK TF xG: úzf%ݺ6o& ^eӚi[UrHj|K4`""w>Ww7' I/su,ZPl{5?W?|?PVS!?S]jv3g}?%?_ UI]bN+? ||Memsqn[46w|㎵pIiMFuVWZ9LƴWKUv5=~ڮH-Z3e@qqZ|c|_}׈dDo]r Ҹ>|!¯ kFӠK7̖zCHx?,NnyԍϙQ Iig}e="ӠH6}]Fk|UP2 .ńް[(4R+CrO |-m@II.y|oŝG:q4r!Q8O^1faO CPC̗S q`A_-xO/aq:ypRrrNq`^E'k\QR|α˧A8T=Cg bO@=Z']U"oнnC|X#).!sq_D]Tc,|HOVk1;;RA޽O[Hkz"lF}Nok9'?qO6nkH_< vC򬱠w 1^FԌ>$vF]ќ"{6&?xRmJbI&ƌM>d k3?h ~ž42QVYU01rsr^/oVNMQɍ9g8RN֯"3\Ȃ)g^(V   $Vß[L!Q?m {2UЮo-xvGUN 3jx' GKඣ Ь*Xfj(.5AI%O9WSjm;w˪z}K l!OU\:&O 7:?L-maeR;r@<"76f N"v ?` z2mGc3O?ͩZi6IWYyua|}aK<ۋ-ux4'N8?? ό mQPǒT\-ͮn:mqjर p@+&Zuxl Ie忂V2ϸ#po» |T<_c&e2Ag!Win$ڳO$2KN@qR޶U%#!ˬ|ǰ?C-40v :ˠVі(ȭO֝yxdapr2;$5pr3MKwUVVu\ݼ2 ?ySI$̐6$'S&e' `DRq_h9!?~{.Ko4eme27s_ybyR3<+{'mӿ!?≮ bXJdtaX⹏9xO׳iZ=Ŏq2a`h3$M .Z#78 >OOĞ.״M;I2]Mq,v J!+%W5'>gvmڶyECKXq\ua9”*I Ʒz Cqsf{W :HQ:wk>jIxRܬvV7e(wJΡ߀yLU}%g1}1I ##ElGsx}2 M찢$j# =A8#x_XH&q? jV){qpڬ.X$Z0< N{V%xJ7 8E*I,*9$">,-ygkk/iז."/";}Grp:W?Q#Vg5D 56+؋QkxP'bּK]oF +0h?{8#ױ|uy:/|?$>!48,$TyZpۼиVMbC avJ\ۯ+ܯCd6ߴ{/1 i&W>~2;V InRR$&HHW>_EHhӭ5XR).~ݥހOdDЀIPC*AEy҃Ou&S䐋 є%'y/'Y#p~WQQL.Щ*$tn^M?ÍLe栌=k8h Jˎ>jirOpT1OQꭋmS6Cw/M#^ᬎq1_o ̲O5|I]]gaWO"Q1r='56I/"}%Z=@\X_ wwd`Onێը a aYS[ :k(a^Ws},ǘ&WDxO%tGMUfb|~_zԺޞ6< r`d6"zc]]/xwJI{8à`'諒k?iKMJhW+&'♳Ta܅1)kv8R=bˏFyq:>K>9̷i~?LU5dЭL mg ǭmA:x>g\W=͏VrI*cRy/p'+qg+Ğ;O h=8znRfn|R$XNu |9Et"Jg[}܌U׼OK{pSlG(H2~SgHGϿQp<_rPͦj2ټ3!$m<8k/?֞,ռMimfxb)ݞIH¶PC MDNH5!r=y\휛mB@a8Yϕ(J^,z~Z_}߃%%gu_~;XxZu+. ۫UabiUd.s]G[*kCž~ aAv0=>!W7TW:vU‚HaHi~OCkIv,6ukk%!EiF} aiԮM+|N^&5+Kk9o_>{W>j2qoL7Z|`5ŭ@NGcZ%Ne؎Ŀů~;i+=~C, xavT.bO2k>6M#x?C^k+szsv$ _y乖xI"˟@:W ^jH؍dԕaxY| k*'z&I.#ұU5r{3~"hW < yliX_HGӿ^IR Z7m+YFȤ28'8W-w5 KQԥҶ= ßNsζ-yIK3;@PI$J/Wm#Z]? -ᯇ? ?=kff.e16~Q! cj?~$CmON6y-Yrt_{|8 #OӤrww'}#||uaXkϦOF;eMv6:8ad %ZSTGy4m]by&#rQ>m՝s~%5ݍSA5_.N,ϲypA?{ⷆ߉~8u .ijV2KS EFhRrYg?𵾋3'-)5$MbtYfKX^@.΅A8~.|U._ƶơt~ $G") 'SYUKWwqAէޛiW<{ -,,t.-,uY4eT(N#=_4fOxǛ⿇\x„-͆j6:V<kW4O0~ mLGi$IWI8>|1V>jDHthf+-F72y5 ~?5ksmFuy\yz6i"uIJpHzWj̳ƭЮ}kg W{9~w[ oM}CUyᶊs<`9 *|>֭.K$t@y e$)n5Jn1WКPRe8un vvk>e0r~^#|YO, 138\c'#OkÚo:dhY9Li02,6WŶ^/n#EI,H#x#ڴ*`1s'º~xT𞝥vԬgbcy$gtP<"|~=6 LP[m6EӟKYALFʖ#p|;a˨f6pCs! rA Y¿=g#ѵxYtgZ0exK V/G2K*7ٻ }GE\ԼE k nǐ9Į!FRnNq^  5+O^<vŬB\j `ydykQknMgiAЋ XTBʣw%9#8W2B2[;O\c5I+"oq./>̙eb@׿l4[F(2w9fH]BğaHa*6A ~IEsc:Te%nLN:N䭍Tt<>QqZ5ƵI/b% 01;VmxwlAnZܫ%HU?y]:%deksɋu'8>b;`u'yjvHUȑr U c8~ژ[hd瘣 zlvϧ mx7׏=7Gү=KRɵyJq^C_4slUg#M 0Z&s]= HKWZgGhzR!s<Wz6./; Wz\[A>d*N 5w^=t=jpԓNK!g`VE'ޤ8_S|okZfk>7zw[ǥIc,NS,˖l~ gsT[ u5=)%iC,dOBHs©82Tp8Dic&qs~Q*ဠd^q^/$vV * Oaɯ]|5_oohٷm;鶮Q]aTU|Jo>%д-+Zox[kY6 2H Ăy$#pHum}o֛Qڧ5 ]&5Z@ "C3 db8U8W_ī>4֭m4 "/m#ݪm IVu ŸJF\F_5؜s6c5j_`S;cN}3ϧjJt"^dJu$'_]:gdž,5H̜3)b8ҾgX_Yhl,z}ͲBɱ>Tyv95x3OW,ǚEΗrQ{8/T# lFNNjUAmEվ[g{Y?Y[9Si*;kKXf/qcmT"x'OP𴷖f92n g>2>pN_>h6.M{c0V1vxWO|7?|A񞟭I46DrKu:0@|l6_jG5$Zm76l: yggrJn./ ?'Ut8Q&K$F3mS⾘cGzZ[5sr[iW!|rY+^sxm ,dEˁA$=ΨNV-Xr9lVFb #O_s\u5B3?R]bO*0=shW1z-=v+I'Szx|U?REQ*MArw=WYݑ?T?Oǘ?lw$zc#Gċqo)Ft@<߳3:t<ֿĿ3_xvf%ɞLs\0\.ܱ9y|UD :B|]hƒMt³Gh"I\4OSdZLCYzs `-3]|Y\\F$ku>WTW-XBPMZ+d<'>ZZ#uu4i~]#aן&eOã_C4+QKMV{kX+8)afv3LU]4._ՎyM4Ozgnt{5ƎGYD̾P y ?'w-~t\xN{޵>Y #THׅF?g<}j)lVA(d(%\9{!A<Ҙ9PIT.$?f_x_4=E,5ZMm1β,Gh]GzO>&M7 $^Qe`r +$m>񷊯%q0Q%8Wfʡy2x:ǟ[>;9HXUA'$^o'trS~%(~xF{{RG!n]X}klMc\Ҽw'_7\@j*X BT1s1~}iZ\qK2Apy=E0 uhR6WX^/O7.*^~Ϸ1V^]ީyVIcBz85ߏ~=|IZ(SA Ac[WkrG&uil@dq~IO?+ p|O}?ZZ[qNd/'Jߡ+NU3-O畏@\>xg_ Z &Pgn8uw0Q Q#r |'. C]L 0$ѓ#5eזZ4x PTr21 ?Xa+ ߁J%N-Osw;3LJ>6QmB[3q2j~s__oOkG_H-} Gd,I=Rɵ@@{ Ud ]?3/bfa]u Ӽ^߮57j|!?+#K~37t%ơ&#F#o)]0eTdA+n!`qaởj6Nۤ6lL0 9 z-֏R3$tޡWSu{%lHO>n!sڰ(;~#h;5^3>xsMkM$j0- 3q^|}S~;tzEq5ҥql;ybHv.+kGX ˻A5H# L }+đ6E،ʅq9?.Qmӈt{8jd/4#6dZ[$]j),vUA 8$W;]'UB+{o[c."ǽ-hY o,Ͻz絴+EsԢM|=ֺ?l(-UpnnXFx xo|W;A6_4gbTl1fh"#2;FԤ/t-B}Eo\iZ$1Cd?uA*?Ɠv + iw/k%O Kn#q^%щڞK7hٺ9< >5AoI-(gI$\SA2眞HZ7tMKز mKc{'dgV<˸=󞧎?Zmۻ̷"\y _ r<(9zV+ k]{5F-JE޾[oOsAV4k4KXU@@R( >nϵ\_BZ>w^?PXYGxJ~Sj}%F ?_%|B|04Ik.Ln#Hdc[+E $#ʑT__1kKMKBtY|J|6$iVѼSjx/rknhQ#U'd.$2Iv塞g>}%! x~4c65*fG׵dF벜y@sc;Q?I|(<3SPFN˄H$5 '{jfi3ZNx<صH$pk˰H 98`.m] ncaǢMb*Us;v`n_<?>4&}?"iey&+";" Hs{·U&O]1\iz),jTJIM(r(ϑ6_J5 |?&42tDJ67;"Rد=CݭOjV5%Z&u?0* 7ҡ5_~: %_2KKrH?mh>+ikUh^Xi(H t&yU 0 A\eEwq_R 0In~Uݖ 5M&Ը[; 68fݒ@Úc>ƣ>#ڸaTE'8{?_c&"kb?i1dmr~=Ћw:i> |-m5a*1BdfVRTdg5CSNԼ1G sWy Vk;~+{.FNG:۵͋^}R=F˓;/+FWeZ!4˨ҦI"#uY.p9Et^dI[u;L>8<2ZL3ԩT3Ѽ ~/ag Ku7ǜf!A <~Q5&]61[77Mkmu`F?+Ep@ J>Z/%A$#sSc&?ۃwխZet(R;>A?ʼV;~ƑꚜxlR&?t`IQ^VUyw57WB Fg$PМj2é N|X NxeX]/^c]+Cɱ(L q8yJ^ZlkJ)ry:7~"B5]_U}ʖV^\f'+'wcRVV>|iik7A q$~8k 픒I-`?OٛE_"ĺv"zW?K|Mew]i:PAl#K+v1GMݭY萰Zݖv dy xRu] Xe48nW%Cgq=0k/2+ju;=B-wH%uk)1JGm<0=Έ[\ʲmok )"qԑ0j[ܿhע15_ˉ.bc8# BLz^k( ƫxR2A(E} I$exok5 {AxchՑ|3!e(K]?)<3xM"Ѭ4ɾH7$f љԅ#p[ A?fϋxsឥI-\]ϑa7O$D$iiX;6]|Ir$^8u?&[wv#2AVWR2Pޚif)EiP8ldQE('{@3j2\k]:aNVb(>{IFk%6L8e$ yO7t>ݴ+}R;N%HxeIuqs?u;-oZ6+/FnnTL,߁NNY:[joת(AO8ZF_o29oJ{ąX篵gxZgݨZY$)oLrO\.}7=(^=βoi #L<ׯWaf'c[\<=nKinoRW+3n^o<2A#ۜ ~\G"ޭE0XT0'@9mv_i^_&iN- &vqӕ#8vPV?KFf+>mOTa,P?o$OgmWY_,4/fX"s=o*hʽF0B֚K߉>,mtois{~P2LqG^ۦ^|FMPc]OF-ΰ1P3muqTwg%V2o:ς? fO Z1{E󿙻(D*ȥO( i|j{v]w-a֛_%ݞTr.gF*pJN-u_ֶ&4GĊwDafU!^"~ߑ*rK!W(E74VLu7&P#ws'޸+ 0{yϔPdeJsvZKc'M*W4 es{fHO'i> R"[է4 G.UX C.vWJ1mѯ)"}*yrڹe̊F1Oy,egq3[cGҔl"m&×DFvuxZ-. oU6hi\$hD]_l,Obå%i[ߴ?WH$cl.lg8-UaXW|.|;㟇^KA!il}MEӮ$@ X5_gH2xa|1JOo_YHI;?hr\0`́|)A|7D-ũ[\E5):J˔o7dڳ]?v3*z>֏ǯzTn_šW  `ӏK)k09j+hsKRK+EJ";~RJd9~b=>z $3xP6fxfH;ׂt#޺T].cBM(;y)RFqQRTlљ{+U68pҦ| >3GM Ό6. emsF:{cdR4u]r9#z鬼=&i:e4, wEI " OZO|(#[7zp;CÉ&lddɚݠ%[GqOkWܘmku=AJB5[4C)(^}ss]7OpY'XbF ą;9r.U+,.Quޖc$rstI!Ol( ByF>$VbEyYxe$[,46S[_[t)dK`[7r쁳ԞY#{A21WCϮ?ƒvckCCWY'H>-z7sQiUARr##cT~|D=[xޟq[[3ZOkK&pXpbU騏 H&L(}0Z [߆9ImxkP[/[b#5ԩE$q,:u㩼I7LJǾ ot~^!\UeA]O 2m2RWr(%2O'#~ 9H<9.<t.D&Ue2ʀ.G&Z?N_hS'*H7ΓB&s:!\[\s7a@aT˚('|㉬tmmO E}zlʻqCcBnEqHE RRZ pCKM~"/՟?xLU忈c>[=mp:Uec) r/ %WA zZMi1o,6q^z=3ڮ=)2Ԡz.eaw;n?ԷOqoZ^~&[\[4LȊJbi W>/0e8'B(b- Hqq4ͬzĿ𞫣Nk_[Ho,t(vY%yk'y~0\~%xl%h77ZR8h>$4`EoLS-YX#<JGfS.Mnc|Igω7toMkuѴӵF`UHmlOp+ct_&^&o?^"0,0lwL:20'&5ڏ:,p׼!c|3F>@𽯊ΩE{#CwݴH(=k_i|*rZ;^|;潛RnRČ99'֨o=i^Ge0]2Ib:_ &ҵk8x+tp '־t E ,lZ7I%HrLrxq&Xz2W;7˘_߱ 엫;u&QC$v^![owo f_&EPa^UYx0xOB"T}xr_2LIѰYq_K|!tKRchڥ00xH÷C B5R\c Sd6>Эoq|Ek  ]kףQZKukx#]Xa)ٯ>$M.{_ܺPXxUŌ#IGˆ mw'ى^_i/ 1|;hs-^Fڅѕ 9ݐD\}'W>&w ׬mdeƧsio5Lz 3ܴ8o^HM Wk~:S}gB%iCm<-@,0ˆ7 K4??,?f-{R 隂xOPgmt{;!l;92, ѩ=dTY?)NvtJwJ>zѮm)W?M5|F<5|1X-uj)ู1i{w$m H:ͪI[?˩[AohZr,<͘ !ھb?w ǦX6:gu;N f&RG!S%rz_ kc@>HQm+5ņKՒ4Wr~%p}X_e/mJѵWeϳ{]E*wwk}:\ύ<-iz<O cOxsCo}dl[JgZg|WY^dgĮڵBO"eGʹ>b&e,ȑǩs~Op5L;k7f.Bnz8w^wqo? e?ICgixzYbvb41c o A$&hncsOTȭyp=|f~z~ǢxMe=[60_ٳ6vp s)qt˖TMo7{pR7ɞeBx^7FGOmB2&r yĝ:\c鱽 <%$֗w~AԢ4j{#F~Ph?n'LIi!zvi"Ivd_1 !>g?uOgQG'a7YbAU/)Fk A9$S}TIoh ! 2e`I|Xv&ѝčnº˩h8LWVD/k|'5@i[G\kzlrO5Jy&xB(OT+6k;*FIs_:~ X]*Yt V-SH]NcoFqG\WSE]WLyjrҮ$Uz7,rsqq⬭[Jw_憛[6lZ]Z|ءfX &~@>$>hi֫1-MciA'.Լ|o4JJk6w6$jXS?0'OZ *QAkseo}er1Ju̒)ܥwc## ibD~i#<5fii1MM:yKYJ#(dXc9l:ş4O/GuG)Pc]I!y?g_ kQӵWn-Hf05(m:!pdbƹ7vAgoZPi MX2*]%S;Hj Τyu}/~c|ϋdoL/x;\ Qh2Hʱ:cc+ _x ź۽\gs)c\`=L׸|L #e^3D"ȴltMc'{OipFnF)TdX8WǨ֪3t28[}xOGt8{NRK"ȁ@`dw2rnmwe+K7Wh΢+&ӥ,"d A(l#h5:že橠.}Nm+Ii6sqwheD?,H'r; Jʥv4$9>2|E|Ml.Zp2J|ry$I$ w%LcB=t[nQ81V42][#Fv(,}#4Rj-D) 2qT짎Hm+15ҫ4q#BA$p9oxgᅂ_Q9mVr#G&˸X>Sk9THiNtg֫>;Gn̲3HA >w8ƾoW6WP*[P: `Gj:szQC#v7)%s̫E)KM_[\[Csckhne`f1c0ےpK?3gG5%fd8 #dg{ߵVYt*N$Kmr?w)8>޹UǏ:MBms]m@o2ήI#>npG\i\ӡZz_/5XCnrGuh4}?6PL irO (k7Z>UK6a&9 x^/xQ:8c;j-Z2v,% B0rOL9n>V %6ɧ\j Q".['.Pv )t,"Vm_V[G,(`@N~a Fx.%4J #ڸ'▋2Kis[ZOp-%*q"V}j?>z^'dQn >+_ EOjWVŖ;pшc)ʂXpx[k]њ}Z54Ϧ` p.!q擳xۜh^#oÞou;<є i0qNT1St?daᏋWI})m?O[xuddʚ&XXVQf~~_8te|W|])\xoPlu/ M[ݮc3Gqm,P6"~|q>(j 7Kv4sCrYYkw~4ZxSH?]xoCkڂ%XiAFcew_k6𮙬hO% x-Vѳ=./PMH-{}~Gvn/шV+5-zWFK Au/|UE ndl X0*bºN[קEvg?J1QZ}_~~^ |6<;>$%Qx]5tN3CtUL,6T{ȚTЬt_ WψlhI/bd‚%O6s^X n1uLDU8NM}Ts⿅Z{nzG6us-˴B 2s+|Y4&]nvwWYJ u?&I^k)oN;+ 4٢XA@v RЕ'*k~"jg𷋼{xKE,ۍFH,B;+6US׼_ihnåXitcH#sԓ׹|1͕Yh3Gm\Cs&.Bu1=+_zջz-v~__i~ %imc 1[ Gho&#;֩N:^x #Pܒkc,q:V2g_M:Ԯ0D?r%.zwVկ6mM$?}FG\QE@x-PfgQpkloxO {JGs%2(SP=+m5&qexY6pɌi8_ 3l=OgQKך?i {wMHsq~5w:3y!@eXj^!w{}ظ<-+]Kǚ~ 5hO4OWINK&~_z8It]]xœ\G0ȇv8u_J\Gwhj2!i5Y=v>kAPTJ߉_O3ZK-8T+o%:x7΁,^ZLQӍ%n#>cgt*mγ'=cOavQI"Œ@ *+Xi+:;H^5$PpqI\Mim=__5dNi* {Ջ_τ |+/䶺y[T֤7s9fUO f Oi$qw<Ѹ`T1's{7k+CZHRWYIe,xj #g,rN*UFVR*9֑[Yf"%v<E$IgW>xZ[ijO^-ȍ7ٝ+קroO?gτ&¿-kUm#kgNJ2H-mhfm? `ה~ݟnZ_@CqOeq;T!c ,o-.MαHƖ̲m>t*>"|׼y;_M6r]Nc[623HA(h„H]v& ɭ_=ks_7}~xJ]H˨Z7MBT1][Oj~+/o{{K2dΧxؒ;W[Z]8V ZďZRl>u+5mLDt Yz~_ܜ]߯|B4ᾱkoe0LYt7OleV%Q D|l26@V-ZAmf1[%@#WV+cTԴ!xד!ٜn=~qsHn4F+Edܢ:}%[ 9M;3{\Vr1r<4űoaVR7d`1Vef{*i0X9=EsqʸbJKs,V'W }M'YV?Jn#qpq\f@Cy726\dp?Z.|^_O׵g:qQ[,Pv>07M =i$}Xօ欭Vic l)t^Oh+~`#ԞgOz|7"`ʚ{Y7 i=zz‹3m,i^Ǎt]{ោ-!ӿg.%Dnl.̹[f>Y1Š#v'{}?{Z"4&H]P r<ηƾ%:η\:F]{B/ rF\^KOPxoźuc{..E5<.&x7#茤q Tϊ|;]Y(o "1_Q?zgs@$a@ƒGJ ޜdii5+JK9'?PjH'T %|a,ưB_*9j_P}IyqJ$H+p;c_~ɦL4|\@pV?k IE.t_jt.%knM( d#k S |9B|19< B|6ekop6f&P&Fy{/Yx[u7VIF""kc:M5/"s_Eχ/YOL(Lr wW~þ4M;vB΂i66@Wp, zVυ>׭da'AhU?!H'$y+~"d״-fXa'&75~8e `u5.CWju+o!K" yH qߜs5tۻ ѥY.L33Hw댨5_zez@RʒfrF#toƿ/7Ux Ӽ,+jI;l @P:Sv~@3<;b,M$wVͫ! c.r>ndsjƙƞ#g3P9yl<úi+:=NE S>Fqv^##oXnYeQO9^:F&еo#eXoTw9~6Ztw\ڶHODjG瞙ΗaRI~9 8k>.z-Ksw'ӭrs݀B̸ gҲj*,=bK2 $#nC r.>nh2#`$6yA8ӧxk a[W>Gv{(5&)%J!LG8/s&'}+'4xEZjgXڝ& PW]ʵxQRJS|W4to  8%ω=rX}N{%Gh.P3xωWMjZƩqOϭe,|7%)$`%T>oúa5yW-f̱F7=ߝz? ׀,qPkο!rx~Up<ܱ~izO^v<>1?w$p ɯU?ewmJJtI[p?kSxbVi$е m>ݪ IB *ʝĝdWPouYXԮc X>H,K}e~Si|v|S A|KJm !_ Wguqx[ѻ^%]#Azy'ӣN ɾܒ{)vթOT/ֿV6< mFl+u[m6!988$~5| [hZ|3W=Cʓ˃dJ`+5_Y.ZmtbС]6ə ŏp$9B>3|x0[V ﱴ_iH`y wQ 6H++գpi]{vkCNi$x^u3ŋU7$#Xt[5>][ɮjfg[:>xhP5xY!)%vLpI'\5yC>ib[FfߓG]/tŬr#c8pg8/gyxD|=o'{8\!wf%[i,x .8¶qH HIxuɒ]>MlO"~;\0 wG4lAdF:dSX]'uo }g).]tfӦ6k7oCHu; $ bO~J;<䀼c4{<:D7722\mYFOR}Ey?$^-t/zhzx9趶Yrnњ:Ԧ0Cjڌү'î-ľd6v+KSuL.qo|)%k<'X})=2wHǥŎRKR)#7g?[g:~\nkyt-򰉥H׵&Ə^ME?.#u -9/l4\I&)KLϹYJy]5Os>#Լ{ \k( cXJS&ey a#s]J/Gsw+^dF>>[^ox[9*}NaonIow?~"]\[McxO=qC hɮJ 6ֶx?x?~ 4;CF:EY 1a|۝oN^'%1.R y3 <͓Yy*rXNq |IX{;q i!rsVh ֺg-Xϳ_[2x\ْcjM49[0ʣv= >~ѶY]\g89 @8MQ|B~-IEd^s*$f|OsX5մm:2%SV4XNYեLyDdDY-ԇ)n~Ś&ߍ,c (CFRS=D\JF?j-gR-k>45-)}+V]p2ca*F:54uͧ=X[yp kXb3pT`#S|@|./Xt^Ӽ;}KI:ψ_ihR2Iyj}+Nftܰ(g^kӿ~9?մo޾>$:s{p r (Izh3G>"oEO\išDSh70и>2㗆~(|;ǺuzJYbXfYgyYF&Gt_qW5;]Ӿa54{dqLn2.kh.wbMnlI2K$2H6-28䭴 t @9IM~>8ԵGе6 " WCIJ71j%Zښ$16Z,cAixZý̝o6wnZKmONOBJ .fIZjGl(,tfdif{lUqcƧj^.@ڪYx%{]g쟫kOgFIմg,rN1hEnn,9y$sӓ\1 hOoqCqj.=HgKм`tm^#oE ģ+(5;[ۿ wiDkc|gidCs^|HYePA< >YΫ֣ie-ap" _vd5[%_qOB:yǯ;SSI"`۟h>"6ssc1cz1[qVlp8Ǧ>m)<֤w. 'ґkcvܱBSR{w|/RX ЃIeۍApeQs֑ adޟ6PBG_H;~)|jr@s_BW==nv}>|H^v-B7M6[Ir mCYl](V?Sj8Bjoo)'sd#z6& ]z]_O]4\B5'l0Fb0FDG8ޤ+xn*D-[]=GԩJY6_ѿi"דU_}#c_ [ Q!c1I~!izPҥ9Qk/? U:mk6R='Uld@>|'dUg*_? <-,c2I!'*($Wܟ+MKv?  ;||& __fO> ~k[E?ڔF~^Wzo|Uch#=xSh, 4w^H >f?tB0,Uà*RJZ)©$\`h^~6x^$>%$wD=%$wMWG_,{<|CЦ5cU5XRWI]!>L$GxEv-~xB_>R>y$V'$i!F|GO ZS_ncg՞xG%Ѫ$lMĵN6lh(On1~Xi#^ڥ a^G;Nc85e Ul1S^#u(<,o|-[O⛻k@%Ŭb(&V jr6/~Vi,lO&fǰ8S$ 0SO|:%^C" .cchug*m<6GL}ZV]Jt>1xSݟջr۳g{ {wX,H"g%bV%Q2y \е( {2>bԙI%BԭE#l>vRTr:V]>nY˦XBt#$+~|'K+}*Foc嬠pQY esA&-bmGYoumB6vWLHL r:VJM4к< j:%ڴ2,qg8C2 rC]I] M3)q 3!$:>E  ;j8D(9~Ϥ]|C=3I,vSwG$%`@7oj #ρlN+|U/hSx{ms VJ5ÙLIngN_zNR.<_9r@8PRG|X>7O2kQ` d&!dq+ď |n-'e{n{EE#Gً39^g$a˝*X->-2 ŏ[ xWg}N/tmkLt ظ3Inv@q{ӕ׽3ۼ=᫭c\,%LG[ Ƿ<G$/,~"Ԯo"zJx!p>دqh/L[:]Zp|B6H?'_׵[Z]y!L12yq;{?kFվvK9غr\ $Ju;Hl`x_0S_&){KH̲O1ͷ!FNO$⹝_noe˻> d$N:suV-Azυ>>|.&-GSҕ]BE-%FAf \?h/klv\-"mp29S^Wg\^*}dRݗu9%w'?rINiV'~MqU!@93Q;F0xe,2Lr21V| m;Tuݞ8 FpSJ䞃ޜxOӜTlCH0G{h`~I"2G׵uZ/DئIc?J5+xY$kk[ bs-HT?c_7<w0.sdixʻ˕}ߐN:\I! Xlm:})VIBw墽}E*k=?CzK+8nV5щtFAF kU)SKޫױ*36"/߁_7&o,z,]&{wW#mqr| 0$?ˮ74cZ'OeaN v,>zv$% 1c'oMYkpӴ.Amup%]0ud%~"x;M6cftX텼0Ƒ}{{$c^ySV]#_2VzIlӜޭ;]~z%_'"]߆|e6{%,M|Sh<+S]Km{執^d$-pl6\W?(xc\# ,.˾6+FA쥺[OK8ۥBM*g}O9 HutwU $y¼E)OY[f~~0R(绐Z+K^^],E,K|?*llBHCm2A,5|-/i:5RKO[͜locC>Ӛ/ Cmqxg Zi>w-GW{tlt8zTr秣]5㒥Hdofohx@#@~kB%^RhRpXw?>h9/|C'|┹[RK F `2hCr+4z',u-cH4cIm緑$#FBC uT*ťOTI7m_# hfDS \r@ݒ}3]NB$fu;_\An V2ኒv, 2~ڭK5-1 }_=$YVg[3y"vnq)x/֑b\ǖ(C.z9לCqPkUqk%F*܏Qھjvk;=ܔchCpmƓi ?WVW lAʥ0G$Ξ\>*֮4]ݙm :2GE}G7źv6zN vpHDDz)khOS.gQa軆 aǩxĖnagupn dgr~P: pvzЧp[+W,ɞK3~bq8^o'~|:$ՠRGdVC!8\_lWa3xEwe䝲pFFӜ;yc Hi/lE' .Ǻ>u跚15S ѝkuڵ*eF Ir=_KkM=7V6Y8C\秩|[_w^,Y$.Cij=8!ϧj];l})xÖk 5`PldNFz_+mPRtU~''zhM`ŦBEҴH@ fsڧ.o.f-BT:sr8&>oMt HuK&c3:Y8BtVҼǿ|'>#A8_Ƽ1p73!gOJR~F;O>v \.n8CIAsW]\4$H]޹UrsSM,9qP-qc(PYISXzT 9W]Qר81)[(ݖڀ%ib2; v.NӃNM^p}z`ls6cM3y!`9UWUsm=Omus2 |!=^\寇%m:&H{)W#n-+g 4 _^}Dn+e5"U (ZQ{H"CzxB 21B{dk/Fς oޠnw@b }YҐu[N;V%՗C/~i :Fr6o>P:֩Mt3mXESPh4 phh4OJ(#4R1^Q})9sIP(=(AZJ(4P_:O'O_zo:M%f_dXۊ+.>R)={S߇zg YnBcuC{<%6hP_-U0u޵G'}y3C/_~"Ҭưg٧Lq3J0;L ;Jg )'҆u[ZOxےJd gjKn$Hko&8%cj.~MUμm'@5++;i S˲XK 醓7|5>$IKcmk/q$}?MdC}|닟2\% 7γiiܘnmbmWCiLgM|\BSqῥ#؅6Gvq>Iwmi%(I%P۰Xʤz}g]CO<0Y\ ۛ]4{̾iiUC F׎' ޳NkXJC/ $N}wRC<z$u;8^C $2\4sLUKF iw{=)Z?:xk6~jQQbAE%*۱uF'7#~h:itv:ˍ!#&mđEo4rH'Hd`c< Tx)FmF0X%шHf䪂[3oֳ.VfHBdg0 zdq3ͭua* N޽|F[L|m[V;% yW!Saqe+-ÒB;NynKN76ѻ8aٓ7tI΁ϥpqrQmIR"'_Qb)skx$ a'(yByGkOqi5/kKZS\8T29g` ׮|[𝟊<={TU1[ߟ,g|: 5}ne5XU" {&m~M>#Bwrg~(F;d|צxOXNߛ9m `8#zl-"Hez0 (G\忴>|9xf`P9#sG#Ko~1KR]BYa2ɜ :{TSf*Jkǿ jZޕ,\yko?W4MhgT_x6"KSϷ'>Pk"6">L:c!Pž@.[YߍմIwK; y9N{c篂_k㎋7{'G%Yn;CcF{/?kKT6vn ~esA$vq^q|fԦ4tz}9@S\Ф-}3'Yе=VKh/hn<NsWׄ<).ajw6ҭŬ:l@4. +8OZg2Os#,'5Q\`Ij颔Gk_-,ULI4䑃=Oj5Z.(<qH'QA$M4bIoj5e(lNF3FTdu"(~ ~e=GeriǧP23u!#P+ aұ$K`}xn*<xC$Ccw暨2ϵuϽ5fx`,gp$cF|ÍTfNqP~nzyEА9dq~*nP6|W'nKwXk`zqKѰs9>xi7C<)>a.vK|˃udϵj[dQ⿉<M7C9hm3ɜ}i.Z)I-5}IpN=s9;j5NtCXa6q0PWiwtE™5":GRz2Z-+qx.⹴ -bt{ke)ȎVrNW_/ : xR|(^u[gC<֖DAeOkf='sc?J~Ϻd7)M/n%'B+ꟁHcK]suM)U#C\N7~'goX@ҼV.K^\%瀸K| 61ּS~,&Pjׯ<A}ж_?hxW2Yh6{yƾ=Ub{i8"ZjdtlI(jwTVS~Vޯ? 6 jѶ#/5egkC1 jPz8 nvG478Biw÷ffg? / xwFХ,-x~$Ih#"B53u$l(4V擠▀ GzLwQF2hȢLc8 sEъE2(:QERt @ A8#Z(<Ҋ(U5m4 "W=?Y^~ߵ|/%Xq f (H7])9 TW)_Wz |e4,tFB0y1CᚣU.W}ԵE]J u/}Z>;:!$vο>)35ĂGG CXR ; ROͶ]“6+G."aKtDo|T{m, k Rx,xtgFX# UI|-o|#񵾯jZDž#i,`q`xaTBNT[]O$ٵfR~w2x{ooDÚߋo}>[B'otȁv7IU$FEz7Լso<]cxc,[AGG_~ ~׿/u]j:,FkI 7mI-lٴkj巠RB2%|LŪi~';TQi-^ zW,,yVO߅K?w35$wJ} zZ۶j%fymi1QOs9Y3I%Gޜ S\'bui..žiIg(}Xh-[U=i4qup%,͜( {CM4K.m#d;c9 ț+V;I_]{iZu!>vu5eշ?OgF?޶x-e%KO$ ۸PId9{ _k/ |qĿvpoŢ""$jv7 NuZ-^7هR7mݻz`5{/xsx#m/ "B0Qf?`|1VBR4ʖO28 xW<u-] O=V?ky$n'󧊣|GkJaԬ턛 nv;W>Ji7tC&ӊiۯ~י?/ono43 (e C}H|Zq$pR"[f@F3נ-C_^K-k`f!Xӧnyk֢~ Ekm4xvΔm>`3kE%e܉>0j.to"KwX€GO_ΤϝH\[p-@M⡵pF!W3g{i d.YnW!X~cRMV:kVzxr_2o=FHr~'j&Kw> A'\g6ĆFf9#ֹF2q)(8u^#n4[V-FG85o+x_GF28و>fIGcrs ~uc7`csH55ψZY/&vAY3Le$( #q#=:orHV(9F=YB YUA?:| 9AxSXHP jwH,4p+`{]^cíC%q'?^:(6I|Az͊s)/Z /~][7.+|AxS+?F~ҪQq'tĴ'PX_jݮn%=jg<$xBQn~ϭmz@)ZYψ>*g.]'+1ͤxR-c1 ~3T% H-)nn\Eibhǫ~~/7y[8Khc8-oz& 3(yaW$cMrnӗT/&@|²X-/aCX(^dXxi.u-6G vɨ]CǕslȘ-?)ܿ/ xmV;figXn&VPyXJM;麾-[KM۲M$V<9R6׭Z_+t<힜7[Yյ=L[ZSޛpLF]<x Ñzv7'_k ZΛqTYJ-c'my5}94qww WEAw7RÒ薎ZĶ&9oQP23ew⼺Y֯K4ת~G-c#.cIGk \V8jΥ(NOtKN[`.8.;=k>n2x|pvֵfc"y䞜{Ր׊gX܀8oZWW F:0 ݸ$ gӮf ۉ$ݬMp2@bPA=?Zcނ@} t?U/l9ƨɦilv'oU{Vݧg|-L/뺄8eY 'S"%xOa9E;3vsgAznj$[]:Kߌߥ{7 ǿ? g&LlΫ,K_FON$yS]]7S&/ ^RoLS%.g~y- xB~9mះZ;QdhR-ߘ#db]I9X>F e'>%0K~"Vo  件WSԣv$mM|1-C!$y:on*G7Oxnl;n?ʘ>Q'?3 6?j0_ؑL)⦬/7B> eirN@:ƾ- ?ƅW9#P[˥W.+E,|5%eiG!b>VJP:>#]4okٜk/ïV#϶O027 wv_PVd{Ҟh{RP(ihuc(=(Ҁ :QEGz( PARZ(Ҋ0EuPz(4QA8Ӛ(w(4QQ@2~ (wPSLj[xH˶@w K`Ǎ,c7˽KAQ׎7\. I⿢/o|&կ.R٥$M;/͵{8s_4_EfuW%Qئ]€y̱63imdqmiy"P)E 1C>;!tf; @q7çEkg1_ξJuA/_g/iJvz4};kWi|Ii-m{;oC- 啣9}.d_ 3?=<ڦ׷ caVlFmy-ץ~{e/bֶ> %أ%GVđ}ӌ~O KT9(7/i75B}ݗh1UpUܚݧi7M+_Og_ kM̖W7"GQGr85?7ěOYJѼ1|(Y'_V]v;Fh/,_qEk$ЬPYቤS (eXv+|1aW:5N~4u&ٯ D,N K *u1t==ꑋu}U_Kk>QF41roHvgR4i -F gAq2DOCk)Wu=ԟR{֭7U֕}_h:Ȳp3K~k98^lyi(o{8sK~Z#p}UVApX`d09TjG98'u^qgq,:ҧW+:+H$Wl1hRUNGŸ$|/3 WAkxLMBH@e#nMe/r4k3Z-{+{xzk^z?g2m|Uc=͝ 4Ӫ53ƲE " Jt[]j4ed{[rvR}ORIrm/_'=-g 'TuR}Npd`1z |74ok suUn'@m$A:׬'ǿu^$B4$?cFO}Q$: 'w0LY \ 'kM I}j&յ}wVŐgwKx6m8'oJtmS8'F~24?x-uMCy]pof꾇]w cw<=2\09jhcZ*nMPNB P9Q@w@ p-f{h (EҊ;@KEh4@TQEwPx|<@!(OҎȠh9fh:-!9Җ EEB)h'Ph(2:Q@|u/ ]Ǭ<Ѫ,*'8ޜW=訕8)5KU$z3s /a4Jd̚sl;H8>NJּ ,~kcؑ_FRFFꮎe# C_9|x{4]Kh:e-a#B1=+yE4NuZNe5y>z__ooDݯصAzܫv<Au|ghOT*76y18NkSe"?:ݗ?<* +~z&\xoUf+)98`:X."~֪pSiuaQ\qGG,J.&BZ\57b__]-gl3Jգֺt|e[8!+oǞ3HB Iz޸mc)M@4ɽDqJw\ Y'R=60_hj>h~.uYO^lu K{.m=Y.|ee(啉ׁ <x{=-ޭ fMBh-gEH4mfK믴 o .ч,>[n4X~vwv}_G 4s6~ E$u#aXldu?+&RV ){r}qMvin 5' Eӷ;kGoԿ?eirx{YVdQ+R q_3] r:~'nM;z{,hl"z/ è[A'4݁3xPa[|M|U-x\kvu[=gpՅt-.$:W |GS.i>Y&G \L}00I}UO #*A-/t[7c0T#ްohFoO򖑪E/0m#Úpѯ2^7N^=7]_\;'$~z"$?8i`Ϙ1 , XdӼeBn$%*Q[e/rӎO?w>,ζn26m.m jⷌO'옩awroo k <={hӖJm Ja䴅SںJ+a b(4PN+RzQE4wEP3ޔ Q:h(9 @5o!n1].X)'HBA-{-kheˬ釶]zSm^ғ|24C5!gxIPā@ffB*q_B]WCY?u| f?nKʡ&(F*V3rmݰ=8sEB :Gz(PI-Ph4QE (=E(QPQE'C4QA@9ԴQ@Q@(h( Z(Q@PEPEPAQ@Z3) Q@ FyPEPEPԴQ@pih (3EPEPGz((('QE-Q@((#s((Q@x斊(#4QEQEQEQEPlinth-0.8.1/doc/images/beagleboard_thumb.jpg000066400000000000000000000745001266051671100211330ustar00rootroot00000000000000JFIF,,ExifMM* z (2; iCanonCanon EOS 7D,,2015:01:10 22:47:30Ray Detwilerwww.radiantsquares.com"'0221&: NV ^fn  v00000100~2013:04:02 08:18:522013:04:02 08:18:52tB@ +dCO4S( HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222h" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( (w?A@(6fj@%5‚;q\nAKX-mcW.Qp- Y@v5Jc q@cY-_fYFv\,[-#TVW~(hڎ{aikyt'BwѠY떺.0vkN/v~|iZE%R2Oc$( (׷zm+x\(ϧ4f5^`ПRqrڟۅVO?-+%pzUlu0hfվ%Yu*|{M34{%+;X2]G$з.w;ϰ> *L6'4׉mhv?M ͕y6~谮t Bݮ)SS]uCTVMV2s'SV=tiX /dW鞔Kqf$@ӫߊ[dK#^Yx twi 5W35V74qW"滂ܑ##J15m*p) ʀ>T.'2ln3XZm;PQ .?/νN'tHiG|g~6S^TjLZpgo|2U6]9G[;oւ{kw#;$cx5*I <ֽ6Rzdr}[`ʼ8ҸXekn6*{v+)3 Ďxn!#c&$}+:ŢŜ LSn'M 0R2X.e_鯦 'p 6zbioqh"u|+@Q}*c U).{`:+ K A+hHYԞ<zϹkU4K;V[i9! p:Z-.V2[$3Tn rö=$ŭ%/$=\p*}^oBͷk.0bldzMI' V`A ø\ڰG^I㌳lK߈_u=yJM߳LTsPȺeQw;e&Ig[[ ksg mGp#f2$}ଌCʊh@>^ҫ4*dX'Vp\[5^ϲ89P,^CI~-Ѵ=㍪UCxHDwp 1;r ZW\_Gy2>3ǽZX4h^H˂z; ɶ/>S0#8уJq V6 mxjdeSZ[)DJ%jAnS׭fc_cRV'YZNDP88#9˱cNkkKv%ү?3]֑WQk~)\(T=hZi7׮ A$UúyW$sÅW_gY"~8ڄnw\sG]66vWgp<=hW2l<3itQ䏡=+Z* zj:eţ%B>\<# ZN'|!!_Q⠲C亄O5cyhи >_yo%xN@t1n5e/XC qJ=<$~ qqް>+.P1`tͷ7#?{V|jO"W4UL?huy?§^\Hpۏ@$+Gu(|Z&O٭a=J ՚vbO[Hv}nǏ?v_;mؙ7׊hWUQBQKE(((()CB3EV- ` QEQEQEQEQEQEQEQE!6http://ns.adobe.com/xap/1.0/ Canon Canon EOS 7D 4487 2992 300/1 300/1 2 Canon Canon EOS 7D 300 300 Inch 2013:04:02 09:39:46 Ray Detwiler www.radiantsquares.com (Photographer) - [None] (Editor) JPEG compression 72 72 Inch 0221 1/200 7643856/1000000 18/1 833985/100000 1 2013-04-02T08:18:52.00-05:00 2013-04-02T08:18:52.00-05:00 0/1 3/1 43/100 5 67/1 0 1 0 0 5184000/907 3456000/595 2 4487 2992 200 2013-04-02T09:39:46-05:00 2013-04-02T08:18:52.00-05:00 5 2013-04-02T08:40:03-05:00 Ray Detwiler x-default 270204096 24/1 70/1 0/0 0/0 EF24-70mm f/2.8L II USM 495 0 0/1 1.1.0 193D037A0BDBEAD38002062B5820D55B IMG_5055.CR2 6.0 5.7 As Shot 5050 +14 0.00 5 +55 +25 0 25 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 50 75 +1.0 25 0 0 0 50 False Medium Contrast Adobe Standard 41F68367DA3B31B07AB631D81D0E942D True 0.111548 0.097382 0.841914 0.827749 0 2 3 3 True True 0, 0 32, 22 64, 56 128, 128 192, 196 255, 255 C      C    $2*kD4Z( +^Ě@J&ʵ7$; Hprf_1G9rVjrNz4"m[:9 )l] _9G !ZJLMԴj̊-D.{1Z.^ciLY>g.RfS3VL@VPRD|zZ11(,Lzؔ"7 %%- n^Hi~&3EgĤ2ZMv4":ޖlcR[hg/|]76ҧdlھV:|yxwC>vUD 5Ho!>Q1t}9XGfz^`$vl"XkkV[e:LXc-yk?ו/QrvlHɩ|]<˝}ګ*/g>#֒=Ԇm4'ҶM#gx:8 ZO=Y :ͼqzMyQVhmB>_O4"4Z3KūuY=m!KeS)O-Y&azjs//O8SڐM3zwK,̊,H.ٞSAZk}UGԹscX.ڐ{BɋOlq͕:'DQ|)mM4՝%=lYE[x3edQ6M}zUu9W nnֹ9ўtͻ=Y,['oUUUjsvR ur峦EjHj&ܶmK},')^i7c? uW,Z RV_b;5l-jI%mKtcy-]{lA̲2,[aU"kXupZFxYvs"-޵3M.|3|ŎKj,g7Zwŝï)-el6V2/a;KP5bܾcK9 sS+ ^zҙ2`:,k@N38Qwe׺?c[s o5\z/ܘ_\ذۮA:tF•} Hkbi^UKGDnrz1WYNuqlh~2\FX_~-`+ qUUbګ5ݧU W˛N5 ZgJ6(3|X8duNû5Rv_3)s\xV޶SKخN+90l⾚\~_F}XDj%9\a@ ƒj3{fg#^mgK<EsF27iN6jF[r)پ/ѪvM9r–u]«ͣO1Ld&Svox}Xʹo^yQxEWNe]W/dwٕF$ _3`gcSȨΠ*?NɁ6fx͉XUg윯e ?5=!<8;2kD'nNJ&D2E>bXJ߳#{YlT(m/y֛o4v^hvZo(u8P8WcbHE|*ڇ^' {&&%It5œ2A\|s]-"c+3<\y瞮inCҵH0@5$[B>*3U*/jZRWE$4.>tDBI^\5R1w{ɅYoϙ1Ǵ3G7,#)x0_嶼[_njc'ELS֗`u{YB@$'s/c,!/Xc_em 3=^\EHW~Tj Fx*LvuXNsYtt)OmAՌg^lrQWaۨmڣوKHe!.zJ/`I:~ū&c{Jg֯^؊_3k$5'-k3tm~tX\lR]%C/O-!1"AQ 2@a0PqBR?)eK?F:2ƷCG%L}=2,Qؗ,!Dd$JKlOl8ɩ8m+<׷"L['#]֟:'yEƖHNw--2>Z_LU8Z\T rHetk⦿Ѧzt )iȇ)GJ h~X]uBٓ佑rN"$HǾ 7/Ce6ؑE}d+NK֒'-GdS~L{آK;#\Z=DI|9 rg&r2!1A "Qa2B0@R3Pq#? T<ŻEIGoԌ4Rk~R|FN_v'&(\ZKٚcrGP42'NI=kŹ46߱CKjKaܒ+ ^hHB1m}UU[vKOj(_7$]"\O*}.Z]S7GiJxJqbúBXƒdp+)$FsnU&,:dj^\$qTԠpSrr{ PFMkr&T%I;,;[nmDܪ+zt{"jy_J1{!=cOSh-٬&4>Y5b>4.s]ƩY_ G4v%bKb-l8<eX;6p΋Rm` E^6Fn:yW"8|3H HċnvWF/[,wUiƒ)-0Q$G2JϖRitEĒܕoܹqԨfpLk 4䕙RPnu-uQFN ^E*56n_&W8j~JN9[MF)asģԇI#|aZ/2:kf ԿҋM $&:'o. ZSN5SLBnLfaԉyodi~zdi!8j'">Tr˿ in΢UT~¢)m*tq!u$SܥplW< |D{dDJ(JBxq#S?cE-pGT_G!"1AQaq#2BR 03@b$CSr%4cPs?]h\Yap?쪣6)T<@$qv׈NeF")uemdAVnQ6sӉOjٛbsԓ<')vCsDԴ%ȹM_\IIVMQFYoaF,vGo@b,[)*[VTEo0OtIe=p9fN7?3I~x}|4?A 1%!S\vni~#?x~5մmN ,"p\q9)6^+$  Z#bOhS ɔ7bZp*9?َH]J" v+ҡIMc9UJ[bukzoIѳZ𾯲lO^fcf̶ke\=7,xGFOf<Q,@*-YekHM\\ābk7{ :YBE urDyɡr!6Ig[b<5dW\p.34mkf: `2f{HsZ{x8H5Ŭg&ytv(޾ujso횥R<n0BD썘O w3]`~P,{C%,y$,|5,OE| bhm%X>587PyD7|z]x(GI@G/2@cE2u `oA^^x9M8:%tئ8ZsOO\A~CE:X09rsc3kpq䖦AN|@C%<nZs4˛fC8avz`@q<0G1ÎOg6 Cy %<{Ϣa|G8Ⲃdl!aqߠ4%GK&@jY>6SV. ѫKNE9٘3jct3^xbn*CF F_{s8k2Eco{|0A nR}^R}kp` ZŚ׏n*VfT扭!bHR3g=mlG#UPu8ZzE/yNz\NJ}POܾql &ufnC\MELLpTRZE]T#돥e"3r?l3ǻkcތѲqvelNfSupZ$L3oX{1)OF O`2[`8ksll6qOZlGKtUe1gwn]}s!F6ısA#F sU,9 xs8Zb30?+RINmR'bZ"c u>B=):p:e`gޞ) lr'ҽ_%c^'W[GDٙ6ҏbcTi ko׀ =BRoHQ,-u<ᅑ4W^ρXabqvG.Ѕݕ0_G78c L=\?!߂͔qCS*9_1#Ze_5;DLl44#ȩi.W-4H#N)%5v0Qg]l"@d#ueSoi @Ptiesn!4xc`ZXx{鎏rf~: Z(:hXѹݏIbX*[mozby(7cnmh—Z\,;2msDp1 6CXZ.UM=-i|_U zm{7}ؒ4wLoj[:Cr8CZwn_y"ɳQrIBUcTk}8˛s'5JwtawTq%?liwRF%.NcjO׀ {;뿧YgDs\F~}|5}d>c(|UuagoUBa"Hp™+ٰ˛ Yčr.0Cm o\\2YUmUCsRs3mS`t *`53R2`iH|5MIo >-FTnk<.xacY|6tVV#㍶F}r:ahaI;͝qk9;*#֟"I{t.Di. N f[|8hů᭿,*j?Msh(!2$FNW+,{"nmo.JF^a\H0H#8"7)kA7A#1AΝfHC4rfw܁0 ai.jvEZ?X01IM؟9 Gk֢̓'^T)WOcXmg Yĸȋ"]O$."l3a-J+&vp48( aXS&i.@BJq?A =V!Pp U@6#pF4e^5q סI &\i%, k`saRx4s4.,<ҙRdR<#nF#o!@4$ZMs%›y7q)E.)R]5U3pzq#,t`3EAFfk A:.ug9uKjjsBd̥g.0]<;[MtB^q A*'Iy<IGʯX$|㜓žh@/9[sx?8,<& =.hb!,RiXX`+xȀ#TrDsybC\~W),d>+PIj[KxE@&[ !eӀ-ky1re,E[y;at%C%rKBѡ8bu xpzr֛0Wmvpo7VD2<sL2U5 J2DN=F\2 Y -vç'?yK2<GDa1#u(> Ocf$LH{d$4=>ubj& _PhU'݅xٸAJ0`(?dR5ƤKI8sEƈn^J܏0D$I< ʆ|b'\'8~Sh%~_9D c8wE_lh/ZC[Ej^)$ͧ>)а`, #њ;)FDe8L%$.$aEFΰ v,Wkt>qSLKk%]e`5#u[ɴh'o#`]$&'!na%(XLL ^&ygwU@Bo p4gN c6!IΟ R}rlѫc q/P cg!^#><3l>Xaif>ƺxQ%aox;Yi:8@Y_FOu^LbYRTl\,`^┖f%g0bU&S|H碤O,c˦h ) e~4! M>`:(qxy.?x*g #N_UAZ 2SHp+{VΡ-O, cg2W7@n̙mȹi~^ 9 XI,wخd\r&YV}@qπd76B@ /}^*!1AQaq 0@P?bWu7 10zQt WHeDLڛ?*/̷?$PQ^KAA#n.5e@0 @Z˥n :Ë4j2,@3pM:Zn<'#JP͘J­\ {K%2(a5op\q)+4s61LQKTn[P@J:?O%~j½k^e,=RhKUfIbe"FԼ` y%d*\`/A+"g, N}?8*N"Tmfqn0 h!]YUM-2CەCA Pq*,jvO,νFW̵TQ7sYsDˎKLY%($) iK&B,@\2z-/(%^<j^ 95cm@E:̆nrΣqyWYe/So*!1AQaq@ 0P?=+A\RK:3珬^Pgg\\.XgeTE7-yb1%+{"Yx lMA*5s.ٚ* dH ?coX= 6yb.!VDf05S|֒e iQykiY &8ԷCIvZn.CKb>͗}ƪwX?P V&3ѨMR6J!ړ0ͭisK>(% ٨WiUJןaI`c95*ؾNYmibGά* 0VAEL!6"ဠ˾dOklE^&'~P)Wd8]zxeʋ[`|\)T2 |XC1:q,Y"i[, 83.\;e)o1*~!ؾ 0Y,RU^q>%Ejjb&cx1{ !(|/ קrZq{DB_/OyH(Xo0V~Y'w8󔵘AjPl3-U) q:-+8Zʦ5]u loE|S/xm9=刺9C*(RG Exoh1rIxD]qJ n.=WI|jpf޿]52rd^&a5])7#\}%ۺ] BZ#%_0Mc mpNDrķ-ͣJyg#Aĭ+C( l£4ÍA>%kcXQh.b?YE!u gY # W4b#ӱD;x.ʀm_'hHƵٓ4gt3+t>;@D(N#moR>țRzÎNUOWQ#R-lF$8<ˏ!9hqht:~w;1XƠ<O&eX.|8s Z\ %B5cJ'Q]D7=pxiq35Nj'L~r~"_%Jf!j a,3,dM:Po6[K@KE@(; D%FZd!9:[˂,84VUN->g?/?CT66P5x.-!F96 c}ij#֝՛`ԗv"hi[齎)ڕd"rY[%6@H8[ZѮQų GK 5HH]ȇ2i(} lj$RAt :@*ݏ[  DM"5C)P8fXRHtQ۝iqJT, EѤ*aɂ:Ro~pISN(?:[2:m<;#1( (L Q*{vW_X'ef.i5!ݿf(SO>;BBl Od!\"s` &Pj*ֈ|␠3<(f(ֈc9D@ȚO$cj&C\uuURh$@uzsV0{TRtcݑS_n*1pCD|g~φ 3FY DDv/5BL|uڨ.Be%4Mؘr%"!p8U *Ն Io]F߫ '' zT3 xك jpW P+Y_%51g\OT@qA-ZB`Co+=v!J[+d!(.Sו@:$?TfC(w0:6SdE Pcf L0QϪRg4D.DJQli GSD'Y<""A5AB]Y,Kڪ&]`lIDT`Ml`pM裀EAPVQߜ)y K4, Id<$*'WҠ6ywXDbʌJ+u ,>n`O* Qg7pɣ6Dd0'.Œ46@|@Hx ǁP^{>ojc Pт)6ogY]S $ం@h(dt44(ۑi7 :0)ܦƅEv \WUn8\]T=\^*B+1$' ,!5X*,Nxw2hߕ|x|aPݿqTB]#> UZK&C" a#/ ">yZ h4W, ![[-'\Qun,ip\텩btGF՘IJݣ $Ԅb4> t D a&T ,]Qk}YbT`&WhU9:3Sxr@^ɹ?@ZIXlR R_"AuSs^AHac >qd5n O:1C VV:Fq(bJ< cS|KZ~xt 2b4)vغI2 қvEBh ULF*!\h`jxɒLMa: IҘs^rB5RwԶe*12⁙Ǒ>b/?R<<`Xp1Bz*@ چpPh*(oqRa`ҍ'ZЊ =hΔ_A` rf^A3+y#D(DJnAȀ(TiP@[>" D{7Vބ ;<hn%ӘFސC`%$NMD|pĩ5qߛ b*OP,X4By IVXZvc$||W(sQީ`}f?]`.#41蘿Su%;.6 ~K0XX^T;&r"7?7p!ɋ@M3vC,YC`#hD-Uw/>=6fp0E[Q.m-ߔ6د2 hJKqLoCBbqg?X~ Gmy Q,$hnHMҒ3 s>Cइz k  $'a(PUe!Y@C@ Q!UEzsNa eP5FmAWڟk #̼NQ jP98bϹ}ؚU8^r~O\~ctڧ_ҍhբ:"dhAd^XAQ F}V0ReRHm>$P֋#P"XSys]ŕNYD *}a}ƶqlvQQp?v}:?G>\jJj< $(.i>mmf Uf->UFͶYvS\RptL' w_9&. }(.7ÈM4Lz ` XSY%r|134swR {0ŠC "$͑v32.OqVŽpT=>NvSq%߰C 6\7dpTOP;3O+*︂k"8Gp COaoPlinth-0.8.1/doc/images/checkmark.png000066400000000000000000000011151266051671100174310ustar00rootroot00000000000000PNG  IHDRabKGDtIME:,nIDAT8kQƿ;3fiJ%M "-"]{AD\ؕKE Jq_`JAtvIMkkLf2ͽׅDwsi_j Ŭ ,[D{殌Es8<fIgL3~k v G2 `$KԲW\yxj0cCjٮOmOzyn/>_@>(!u~.Tє4_9;*oh @|ş\5IENDB`Plinth-0.8.1/doc/images/cubieboard2_thumb.jpg000066400000000000000000000151551266051671100210660ustar00rootroot00000000000000JFIFHHC  *3$&*<5?>;5:9CK`QCGZH9:SqTZcfklk@Pv~th}`ikgC11gE:Egggggggggggggggggggggggggggggggggggggggggggggggggg Ȓ4)G@KS͋>`xl6K@ƌVXHʗԑ=yS3OfΟ;5RHKkYΞ\gXq9ő6k`: A+RgYy Qf Gy KA"KQRG8H:^DgĖ5ԥD DttM"&{VH=n)+3:tt#R8p4F1'U5&15A2DM}Z5zH3et.)sjLya| VT%'R(ƭ6E%RedqԍIt@pȕf4r\g+ĹOJ**rIThi``HcέQHހ$XJH"dj[ @21duvFg}($ %=v7-^ ё,(!1 "@A#023PM5p.jj?+^>SaI:}B2k-i}.ŋK>&Ms\TY~'"rF6#7ĩrV bL]]m+~p o䳶#Wvܹ.h7O.Nc ܩbQԨQ\8LnS1 "bE8,p Zj_CY&z:TW6*]^w$ q%;\cadx.0f!@|/k-d)뭷ea[b)jᏴR C`!pxm!~ٱE`tjj2CX٦9}tܝWv%#wn`V+YL@ GNg9ӚfQsmKT(!>(MӸ$MCnhAfވ.d$l X) " /C}!O{[;IUbYpF56ƳrР'xiRְh'eM;bb6.X/ gfm_Jr1:GQ` <I>pZCKY1e#؎'p̊LZb\`ي7j> Q[K4yuL g)y3.i&\3FR{fd.EX^Ng{w,?do9/ UG%HțGm~U> س汑m?8uYnDJ29XI9pd93a,m9Kb/A%%9Zs:LF3SKo"3ogQ.[ݑ 'Ouz~O-920ٜ~"}KR+վBGRLn|t|j$gOх1u6tZTOCTR^bJxvg-|xօ^։Ngc| t&YIMDIՎܵϰVȗ2JrC2/2YY)̗]Inš Wtey3Ɯj{o,?ǫ5zeZk%,^)!1AQaq @0P?!u.$99$]bb>,,[`]zb) ޅ3{)ɨlFڭ,`Vl)MRa;Ӻ3 z!`JGiCrTXv\`s ^pܥթR26jUPk)HvYַ i `%gb7)luf *2 Ѫ[l PI Zߙn+TGg2ֺר  Ϊ/* rEP-\{͗Aoc6w9/usG-֬#$җKeT\4 yL& {Hi|%紇SvUQ07N +y^e_&Wx 6^nkdsPUԽ3WwE0Vf9C~&|1ob]*SZː BF`M{@$WDwet8HT [Gd.PEͶGjf_b?֕0͇<E5 K!! {٬Dݛy"׫80м;q*38uJ5n4#[Q|^.,RkAUR#ї!}Ild%Np2˶UL]b\~,gтx(P?6.dFiyf[BvAT6UbDlЦf)Q[zgp P&GHYFJRWrmW/r3.D |!f?&Ga4_p`znc&`Zʓ h{ qc|3V87%QRNp8an)4;O\yh/fB#2}w)FWV.'@x`p}6te5FFwYYiˆM`!lAdR#{1L6l]Fפ 2VL* w= 8QhFm|Nwݘ;>7S*ғtc-7; z0lSNd͠-orW/LΏ%^rĻ0!0lԱaNP~Pk onψ- 0efkebPO#[ (aZ H:kԴz:F KvbJB'jpǖ28 g$Q{YSҰT?3{a@Pg 2OKf"&Vۮq$Wc(li=cOL nG@6aZNupcHh?2>ް"qG0jx:cFC&N}d`8uQ *꜉W zʴ@XXDɧSehĮc>b |1t#_edo (H9dadkXQBB?U0}I"ՠ;>r!2!?q|^DsXS|?1BuB>_. -4iF xdmlzʠ`1bB` n_5ɛp,{`}22jxY*(PDNae= $#xaJ&Uiq(37 q I& 5"VDT F U9 11\y0I Nzߦ.Шį D6C( DD*@`%}zB Uq6rv@kd]`LNoJ}kdtJ)&Ub Ʊ 2OC.E_# #̸(6ı ]dYΫ0['xa08#0Hڧ "'a"q@ROx0ʄt& qӭŇ@K1j"c*o9Ą1 =^=/$Y$l90I3n49-l?;ء&*^Z\f2c z8 xA|d+"Qј:$M~͓s Ѯ}c%lᑧPaqHQN<` q{**{0g+/=eKsy'XH6񚦃YV 18W9pb63l,]uBK%=fo%l)(rT ~ W-l@VcD䯶wx4^=۩QBTO\Qi_R>qo˖Z?LW$(rzj[cE8:d)m'tֶvD^5&@%9H~u@1W0ް3-=#/ӠO ~5+B(P)MMLHRAiw? ~l=Y_y>k8QEy Alf"){ፁE# 15bL32=}܏^5;lF"FhC:|,02@it E%#F0ba&a"]&%>iB(ldʇr/gz+gP0j菂6KDZ, 62kc@tIxF/#H <62Š,=@u`SPW/ HK̇b_y \e %$h`%~@V[(t7-O}2!|0RW!DG鎩}S9hMj=Ɔl ˀO&:ɩc(-JJxdu1w]dߎ`.42YKpIu_L 6#$G~5@Y+'j06L0! T!0Op]+a_d4`?,. ?(" qq9!N%bzAq"~3c Փ6ŒWɌXdž2I!B`U';3;Aկ%݇&c?V'$O@rc'N8:01a͕toLXbW8!\(\ hXFh#l iOYH_yeřun2GOPlinth-0.8.1/doc/images/danube_thumb.png000066400000000000000000000640231266051671100201450ustar00rootroot00000000000000PNG  IHDRP b pHYs  tIME ݡutEXtCommentCreated with GIMPW IDATxidWu&>CMR4 ,h 7BtcƆ ϰ,ck6c#-ljL!K% Pk0րfTTSVfF9{7n U %efEDF}"k=hk^;֎5k׎5kku0snqqz^v9 6󈸆r<Ѓ7,..,˘ZYQ\vSO>g|5>)~8纽x_#@\=C?g{"Raմx O#M~0 =pRDcxD+70yUW]u֙g!x1nkTJ=|+W둸r"r-l޼y kǓs⢵ڜaylAkpkč\3m۶iv<98p__wva>ZH돩@/"Ƙz!bp#_ Í8˲}s/zыv̇KnQ0GFD}6\aʉGAÇsZkrsww̬!x8Z{~ _򗿌ATk=bKUG<l9Ϲ_In}csO$RImůQ=BpW@ .-oy׎cwoΝ~+϶G 7Rj7e>qE\J<}P 7l=U*V?R np)QubI\|ox~޽_W_gϞ(;:3LA(18lQ\cu]g=k ?qw޽]t^W Zwy4mlPޮ:=;Q׌13337tܞem:'wnѬ`Ss6vGS3UsϽKk>L첻\yn fUd ]g٘*rZ߱ h<ʚ5"*<Wzξ5\DWƘ׾GZC;˲k.;xtl=]]eIK&N:m۶EQ _veW_}0^jݕQlx5c10TU:{B`!` O#+?w*|qZ: a~b,\* Ep킭5몉↡֦i?c\COp쾼˗]vپ}7 sC(,d@JH9z>'95ˉAQ X!|E50{ޕαp7ܵklC/m@S]*&RP 78<ȶk,>#~ʮ. n $6mڴ,vԧ>uݶm;{Z;F+g[Fg5L)k֥Dd(cpq7~e{EZ|=|tK#Hu({яsW^lYC,-/]_/׾6)1mpun# ,(պ4gW+0 H^<ٰ5dē"w#^w=yΝ;?Ooݺuyyٓ o닺`am5 >jWK/|.WiLwW@f?"w==C|׾/\C;.һСClT\sdeQM_@@)f<@hLAphFNs 7<7swߟo~ޞP#oJZIG0RED.x Ī\d)"I_nAqPx⤜.ÍN99q"LkK^+)?]ͳ,|[Ƙ0 }610@,{c_9A7" "H}_"9vCU2L*A6"~_+7uke۽g UBuj^uF)ꗳx1AU٫Cj.^ !*D/RJM#[W}S4K4"IJvZu=yk>#Inҿ7jĴqӼu(p}CE, # y*!{ d|;00**>\h& ;#u2&=jW5Ǩ77k7|SA W} [n}MIzaekQHHC- , +M(B@4")A"@* "2> q EH؂š8@)o'Uf6ƵxPʍ&JwuX~/Ԇ|Ua|?ҫ^~Oz/'iUJ_~߾}333a~cOqU lK&횼L,#e1NО:a+De}Sr131})>؜$''PH^Mo3"6F6rz7Hq\ xiim}Os=333W,y>7x_9sn^g7Xn.Ȁy`E#Z1lxFwfhf.RRΉIYo1-ulN섍8#ŮR Fml٨=Z;#&3yYZg3%bhREf_FR&4wGҹ:F+iPSwuuO{|'Dl⋿#dhc,Mz: T :ՖQANꄭ[f`]tEI{ z; l-q@ TADqGE3*na*qNAfARHfu.s Y63Ȏ=@ B^M9x׹ޱ*Zku*5z}c}kwr"|kFkzs斖nĤ>jzu¿V73@U:q̈́qXsel-cLt僜,SEv F9CMlzAk&-X )T:C!-:$RZkʛS PH^H]B6*J36Li U8 zYwT ~衇믿~ NZmcǎ7޽gZ C=r?s,kiUs2oj+# bDP( CQ 6::lQ@H ]sC_4A2ĎsB"B TD:D 1R@:*RVbqָoe`RaKllb`r{FosF{RKҨONؽ{tB(%UAH"HYPQq+ "RZ)œbf0s}1=I&`rd#Am!EMvkI7&J* DTZ4uv* Ud9;e/{23UW]|,3(sX8>0L9 Cc̤yu>=DX,8%xv[msYf۬OYL.GkIrpF [dR:2Fr($@GUk&Z:9g$O,I.QY'WHq2:-t҄Ʈ1kZjnc9i߹;<P7N;m׮]i1SG5" 1&˳%]{`0\9 lX!;a$7(Ty; P*A[Z-Y sY6僘,P6g Sh< ,حDj\F_ƨgac\"˲?}uE=)_^xDV_Qӟ{zm45H$q2WNC}LU(ጊTkNg( 5Y&.Ytf=2298+ HEBes- \j_)( T(:Tau?g@S}~µؔ!EWZrw}֭;3 p,.- 7߄?s]^Op?UO.SHzr,"e﨨I+$G;TLm;:u,qYӮd]r@qX[< V{ƼJITZa@ 24A2hb jihfRKĤV9?e":X>~RSE^:+eO3xK_FwyyyzZW9~͓Uۣ6%c5n#) X!@{F j)fgԥ=,KO.6iR( HDiɌAy(@ߎQ$l"E9gX'(*AZ͢&Y85d@^Vw b0 tM?#KvR~hX6vly9[]^JJD41:Ԟ 3ACAJ[<\I"yL6g@ )0;W8M4{V+!k o#,e# t(hu:")]p"1M6_EcU;FA^xaՁB_}/x=ACWa&W9lQEgDe*(abآxFmut ű8krq,.V]JX 8(l(ECe={83Bm!"QC`3B H)Q!@.FdO:k8]7=ܧ*qu(k PJi0.^{+]`!(RdFgѤ`$I$M5"R* uѱV: ~ :qQ)]zWI#+_JYo\^u1l^x n:] |w\:'&sij$][r2g}o/QOg'So T;&hsb.C1[oD"*10ƾC=(WdTT?CG8Dz*ڡAV7:ou+d1gh) V8izʻ]W|F_[$ ΂30ywetSq(*G˷"|h_m۶m۶VS R4_ڭM&'ϭfſbE ) f|43ft+Lki֕<:U[*O&@daqUu.-Qַc߿DVYNCa%]9KL?0u7)U8bTX4OZ̉QD\AA.x0h-aDݞg3AXt ңgሾr[ue>WI.4 qc]#;~K.>\\G8F0Ez2|d24A h;2VfOq98ڢ- bs Uev4h?!ߦQڛ"B1(@à;r) ,`_СB$QfTg6t¸P@I|/5۞A g_ qC  !3j12#[EWe"t'I@-[6o /hu|5^^$$۔Iy[쀭8G;"(Tآ(( Dijf}7I&MK =Kzp2tHQ[ B1;aftWXy;*}jXu7"T8PEEpE:;vw{aaGE0" g@9$x5rɦ zŰsb-[#8Z(VQ밽NZƢC&v[O(fzizuFŃhBFdVK@pUa?]˫Pge`sg,0 Rųhn݈y8Ei,Rܐ#jڈ 1l@!jDBӝXN]3Y7MP͑ڮ#I`6CV ZO$`4 A8A +ɚ _)2 ۿGE ^:kzKa%ݣtpz7Y\y'Yq9"κpvY9 ZB"#׉wl`sbs*>`@&(DŽiCɢ=09r=h^B񠗲H7=q@ Yq;>ݙgaʣ <UDQt饗~;jП'뮻*gpI׸n(Tpua)!6(-b@s9Ll*6G D7$+𩠪\X BTBPR &1YϗYl*l- ~SXXSpl^-/]'I7K%鳌J8 뉈̠aQ8+hx;nٙ# ^K֭|TWS+Qä$ȆGwxP5/u(+ق-90vܙ Z*ǰ:Št"aUf5V}bA< _*&;߹D/3 0r.8lq0[4)},K=1r%> G>CLjN 0 0AX''?/R->{s^Iqz{#@T 8ı8&@)!bm\$EbiD/*lvw}E^=y┞љ;l~+'},cyd6gdl3csr%BQ1-ĜH8bJB.R+7F+X 7QEdP*AKE 0@hscɺ.aYMzoVDN2_-uL'o'W{;x*6/l/v>Нt]""b/"TTI7AJw(oƏw;?iXHG:  Y,LҾIh 0@Ǩ#4eFyIP3V֓`nQܡHkbf`c~=c4K s`Sz&뤛F-P Y:BJc9+pdb7S)-&V~V֣lۣbm_c!XW.gB) MQK B5:y؄o9jwXiMs|7Yf@c#}4_o:6lYÌEQN[3^$vD'R0DdB?UL{,,֝|? 8q|ZW`a M-`o S8)EeKNjthI,[4UA@ܲlI3,a+;QpE~`U[*&$B({ Dcftq+ BEZcl'i_L 6EvR؜q]X!/2Pi =zϡڝgIqڥ܆OA+Kn|'T!UY[o}MN]vyݯx+j.< WL0դѻ6G*[IJ0Zb?^9hjυQ;b(5Ine,G~d~l~:,~|ZJH rtA :j Fcr2``(#7U79ŕF =WEP#.}EDv@6uqڻVΝ;+ %/Ĉ V*(,"NׁKg"" R12lh] K+nP$EB @v0DŤ(uTj"BYk}HzdƏ&z+T/; [97ޏu?X㮯Vpgxe{-gy~Zkoff:ww@g`CoKo~,./w$IqGo@)vZQylI(:B9s's=~~qrpىƌ> 4|rFFc#;Fq sNB "RAD6*S.8~28@`q"7W0 ň{o= @!U E #"@ w۬d}sPV"c\wF4<+TbI# ,u֙o9vqiqÆ vC=eT"WWVlv2c4͛NK~y:7[ A\Ert T{NY,O<{G"GG۷ojI~bG1&GEƊ"sdE"GA':Ԏ!j@̦=u9O lz+OֈHAg6gfu+5cp`3){ BMȎOm6sr@|3*zyrcON{mݶgϞ*Tň&$B(̂H&ϗ%I'BD,k{Ƴi^*qjJ*~˳ZwaE~^E/;SW 7~S=]E7(qbՁd&XľC[aCι @@iPGF#ԁi&&qu  !H ҄VAXGa!F6R$ߕKiWLCa%s΄veG-z$XV_o{}bH+DP=/7f`Akm?Y-wSKҗe=pͲ*6w}׉'+)\+]1rզem_"z%6͛yú "NcpҞ'RmبJ$;'A#DݺPt,a Os_;vTqU8+eF{Y; bF6rqPL"6E2 ߧ IDATgK![-(η.Xaa 0:+&<,AɄ-z2/zF!fiğsTٟ};gc~nԓOZ;w'ओOzY~ݧrRjlkDD!m,BuB 3N9埿}'7}?}#"4b~$=$VĀ˝sb:L$[J6cYd2{Zdűg0#9 Zֈ$d,Ol u z_UW-T:E4H4.wN9M54}b[=>[,_8xhn~~i7nmڸ>K2;OD\6qqv1Λtޯz5:/~w]w---"s}X^ll۳qk^[妇܂}+HBc΂Mf a.:Ţ4j]ea*&bX.b ?!s`Wk !e1qkӽ ]TU\8RHyv{nom|)f @| >߷{c6m&޸aÏNټy&g=?k;1~'(طgg>DnmY@e].5va @Juo}kG"1W;"c*O1iR"l쨷@snj)˚Ee" ARޓ A%D ''%UbEa("sX/Xd)9ր&Q4UkyXHWD~iqGǭsc%7lr&uKKJ($Sh(_7鿰q}7Yʍiξ염?㏄=bڵ18˲) 5˭WKlԿutAEgdo6\mۡmdTD@"?//TF[?{ ZUT%ʏL0?q`bCm`p1t$"O8v(4 Qpq;MǼppaٙvEʳyvmqm){iI ( $$WRP~Pa)AP W]\NlgSuv153WַP^q Az WO0) V7Rwgȳd$<#bv.T8WJ| /U5pۜ|55DLBbbdh--],sqqܹ>FDʲ--~@F4 {MI={81|VL1hSUCe +p<@^T̸sfWiW<};'9s?N5's_210=B>7#۶sbG=]MӚA&Kstq1Gce MN;[c(x\7 $!m]wÏ8wСgw\D ) ՃtҊ*#tvDPZZf*B-6K9 ʤ}m- ̐2%%ĥ(q0z{{ө-Cbh<w$AB=?tʊ?)?3<Fk 5(.K˘n@떄'ܶ$Mps^;$W-UOh+ݮf% ѽ8#BP(-nN'{[4Mh9_.@ FH!} mCz.!*b=eBe#:ߗN87e5l* 4|t%SD"D\p--;w}}twwõ]xG5>|8ϫD Հo*_U/#&YɞvgXsn *1/*毓Y;sϾLuȱR'ӹ͗L[Vy;9Zʀ{nBpfIeY8pvѣCCWj'9omڴi/'BoMfOrz78Mx tO׈seތ-8E崴ڍ^slȆ;6qB+_H&ϕ5 LO?}{$뺮07x<.[t};q=ʬfeGQPvO*ąSIy@tVβ&b:j* P7Ysf\Rdbh<+b5`u`$4ޛ=@slX*֮#;V/B gϞݽ{?Ϛ5{pжCޑ.ȕ |491>V9Xnc]n݉R#Չ'޾z@KmY.9  OD Dj̲~ cwdO״\윒82LRǎpffٵ+_uJo qtq DͯWIq˗VadxݻҴ ϕ ܛokVWg[<C0Z# a bwpcpC`O2q]k炧:խռܕ]QVi坨 U27"rBي7 =k)PrCN}QKkk&!tMKRLLh-w]=E΍`877'?AUu_jc @űO;˭k٢?+e@joɬb&AJad*I z'MNƮhc~_4;='yenm*V~X,. \8.ȡg56Yeat:JƢٶ u}'޳(rn=^l6xܪʂ銧z= ث"x5ƊO6܀)HBBT(9͙LJ 72<<% ~MMMHA Ӵzzػo_kk+l"X'?ADP{H5[ԍ1U*/DZexMz5d_]PP.Y"J&kF:[Z{ƴ*dM{ _CXȱstvt͹.<2U"xEZt*7(5@pڸRDң1u JRX* M]D@q OO'gV,uut ʉKaE*[*{p4i ctR; y_޼& /EDTmՓOU k;c,Y-'V: 7[rO#Ae B>Fz;;ۓ(t2DX.8ick?pZrgΜ @ ~gW>^B~k5;@=`yT9OlsZ^ΚI)~_W*6qf7p'vl*OݺFrN5lU ORk ~ū|Ho#STF7]eJl>ѵLfP&µ% @k}8$AE͵m$;δ|؉ٹk8Ei?K/bM$y{߁ j² 7F0Rձ^n ٶ/jjJ3pFyGmW@MB}|Ow|׵C0f6\_[%kR xۤJU>c|{`( |H%ⷭM&H}#5'Ք#$5a-vp"XϾ k/&!P>.Bk=/)UOy^8- m7g}=]m-LcBT52Hmp*W#$mUN&mڴqӧ& gΜ T\kPJ )5%|^8G=XwԌ|X*ZR&jˤ5@Gsq1˶ϟ?kkiD#eCoĹ m;01͸97ں֤35 }%ihQ|.Uf ػ`H&+Kcm-ckD ݑ@:[v%pC~S$̲#X$F2Mi9"=?sBWӧOaGrH$bhT*N6غk[& Mp+^^9ჲ;K0tyd 3!P(K%nLjdh9mhLP u)d.;wP(p!RD:ǣ K7n_صsW<z#"y\p޷IN\Ss*u]G{lCDmAٴe!d,12<#cvgo::i KK?ҐɤqA><=VVy>w]e(]ѠѰ)ED!d<".q^|PL23khq 91ɊJM˷k%`{Gٹí-!:o=>gϪQHP=r ޚ1 LӽjY2 |\F#ݝmxg=DlS'Kp"νi M졙޾7_|ꩧ K[|=Ck`D P۶s\l:tvdLwʚ/Imy Ug;~]޺VۧTxp qx͑tӤ\!c !ʦY,#28D\:yB 0-;Jo4~C&F0>}ԩS UM)!QUU0'uH4!iqm˲z;SQ1ܡJUXs! >;55;?=C4MӜӟi=ePSlȯ@PpMsn&"K֯O%bB@$H๿qEj6UIhLkoz OOLL4٧kݻW2M*Fl *'3cdesUÊ?Ve)W`U) e Ysx{4٧B{G?Q,,꫷Ϛ("R'B8҄X;KbWx$WtN.^(!z;~}S`xw8GDsSkT*zH&Ԕ0&H^[XI\S~log"ѥ'L?pc==!֭{GzDa.t aXuIaiIDATXsN%CC] s![7B"H7Bp'BR519pڱu!n=lr%O?ճޖGBmA>v$ تbQf<VfeY΅7nxY ?{9)}d%d8:4׍ НBINΔ@G"cO>֭wj[kJ ^Jql7S֍eR)AWҢ/"\LrN1O\6ܾ±& /< ${zcnȲ,3ck!`V 'T BtH(G}W >J3p @m6cldx [z& h}5;?DU\=E! I92ɤ0-˶,]nmCkKsf#Vs2PMneT?3޾PM"88Nz饗t]7MW6H˳c%9Pt-Jx<>T" s n7t{[/v/, .C7Xߧs(>kĞMI;N/m̆ Ʉ;C1 3D)s2ɶxSkmw]8ixH^y}[B1f$P"ΙDW.9dM(ylB=d.@ ds[״&=% u]veBc|o,BDhbRT(vKuh7f]}>ԶXH_j<sٍ3gTH% "MD\p{j/!qftw߽;B̵<11fo(_ji󉉻2DE^g/q> D 9U<;vjt׿e!d`9qABu]]۞*֨ Л,DXRĉP lA]֎j 9+^ȳa ɻ{&v:6!zW=Z.,2es䶻"Ayi' I{md!✟|@ܶ5TH{[.]ھ}{gm"jmk< ;;I@ DD²ӻg?gЛ,DuX/x 9 .'CAF-+ 9fgC?0C_e?3e xňٺyc4*IK4!{ iy Km[HRN@ 4lٺunn~ƍ7Ye}k_i#!r}CƹĢuρCwo i7ֺxmm9 Dxrrbm]n݉'n+BߠWC=m;w4];wR"]󅅅Nl߶o])VTz^~山G{]]5DʹPh"8\Vȏ+Dp"8\  Wp+Dp"8\!j9DiIENDB`Plinth-0.8.1/doc/images/debian.png000066400000000000000000000610131266051671100167260ustar00rootroot00000000000000PNG  IHDR"r7sBIT|d pHYs2b2b4UtEXtSoftwarewww.inkscape.org< IDATxyEOm}C8pOE -><("r((7 PD&p"BHI?,3=35vv3ߩ*GDDn@R""RY ),TBJDD*K!%""RHHe)DDR"Uc) "U1f0|te9e8ݽB0j fΚ"WY[y?ƊTBJ'ӵ|O;O춉fE]Xm8p~ӗJmHSOJ:3vPħ {˾p*pfiHROJ:3v=}np``2H? Z9l,X0{6 )^<9Ox$%R֜Á=EeV fv{#Z ]aZtfc֥g\ ҪRҖK_ ,T < JQorvBl>`0 3asZoή!woR(8c7"*7'>}l;9c"2hh`aeB= ܞt3v;>e&ħADʦ|0pkv6XX;BmfwG r'Bħ--O!%- pp$|ͩ+uKӺE@!%-2!! 6V$aHowd^.M|pٍBJ*;0 kk${ <.N|:ƈG!% q8ptiw3L|zOٍM!%qWAHsA[n("W,Xrsn#UDJ!%9}d͑pe-]e׬-L|:ISHI)؇J%7Gp2ħؑZm`~’P +o\ \8z(霱;ӄu  R-&I!%MpF.mbS[v#(pص CE)ݞMI=RRgh 68;L `!p~x8+w9c-[Q#ԓ għ8cO%lIrj饶L*Ep%lC(dh 9c錝?qvܥ|@=)-[-,"zrӫ?!,&wħϔ4)BJrq.XH˻:p` 0 ;BJj]O{3ίK.i+oM~O_*IR&8cWn6}p# (k>P[;)zR2$g*w'V)?FI'$>Uvc9R2(gj2ٗF""p p3s PR)zR/gZxY=36=^Xmtq~t pB-{]IkRHGd @gO OsOg9c LEo4&n ԾmF8$̲")C.\4 zV}sƮNIH|n[9gM{Bk)CnG!%p4NMg<^=U dm嶨p;%>o xR3v‹$'>o;9cG%>Ѥ6*X[ўoF'e7DPH أ >u9 7PvC䌝 8  |&-e7DSHu0g!\yLmiׁisƮHX`>|A+{|SWvC$Tr~O5~CX୲Seaծ)80n4N!ՁそnKn%l0솴lӁϖݖf6WHcRaزR\ bpn ފ}`ħוB8c ,Vm)kYO/1E8_u24`ħBCdWv["zp&D;?mι<`.;jQHuzΉOp.V.I|vkwl3hUo[%>}HmRm;7`˲X H>[b:30^e`ħOB9cG%L+n7ӁG_ksn@XJkR瀍RvCdp 6]u)aUVax#`zF砪!1z!SmӭsTRm(G`Ҁ =G9KHkħGB 9c |vnFZ3vOV/kURHgOS[SmTv[j4 V&&TqBXU8]9U/ƕݖ=lG!&#l@m4ħ)N`ιjZZ ;i}.PO(_لU+) 8Fȇ)Ñe7M"Sv[jt3v!sh9c Sv[Onn4_9?e/k%>\vCD=vPaiy 0O}#~TRn wp UٓknG qn[v#D!ҜkP n#~1 g'm-nG v[v#:I ghZiܜZ]4)Rس-CвI%SO5}؆˄q@5\n[ъTq.0O/!*lnH'ROMn`ħ)*ݖAEX]JT q.LXuےsG aeSv[0X3e7Ө'Zp`ӍPC+ݎA l%#MTVxX!m&[bOyu=J%鳄ӫH&SH#J:/\C%>v @ge7S /BROs+|[#[rM|zz+ۑ"e7ae7'Upޛ<~`fm>JʖecWo9R[0` ]h`o.n1EI@wtS&SHkLɝ{عC㷩_c>Ԥ,}bbve7) dgKsNOJ|b%Ҩ3 T>e7bނ\blcW{ϬؑŴ['>}]poL|:솴+ blVo@e΢zF%"D=Ѕ5-G!Uf{ XgEzT >Hl'o6x{3w=&( iw}3v ㄀zDt*agI܉OvƖ;A۪nGr sx' eE7j%>5ayU{}mtDTs؀] } il]E.n a+Gn*3v,yO|z{)̈OzmRK?RiF/ħ58"M9%rr}qj7 8cW&Ls-O^1Dva ZzSzS0m] *_ [`}JH|$qw; Aw6`W"[j2gA>ħZQ:ŏ# 7gg)]-PH5Wy ħTVg#s&G4?g$8DQ֋0 }yӗG-}I6xPB쯄bۘp}4.~]1 8jjKN0fm 0"GɄ\ \MmUWPLHAX#!mg쥄Tw'DG5 (}A +98c?F88Xp(oWtFdWE :83؂RM (Mt!=Cm(6.p 2K8~)RܤpNvP{14qy-L 9csƞ\Dަpؿ 4C ]Q`<)UT}g|^lR)3v^g ӄ#>ጽ[2\e[nX@!x3fn>5/2 8%rM3v3}`M؅ N 灩ulG]WP{R zVD4/n>b&sƮC[;Rɩ]swuħ.,B5!bԱǁa}nvw~8 /{m O' vĉ.1c0?v'W3vMȇ&!/du |T DہOgosOhLIu3_;m]xt^wħE>nSH̘tkSN| 쐣̈́U .O|^f,[ µz֫>Oolf{䌽ب[&>uo:c6G\:' 涁 y a#*aߣnf@ӧ~va뜱 OyC] u=` :vRH5onP g9Jqn ,^C'ft.jݥK|ڝħU\ጝ`Z' !u%aUH!ՠQ̞ E`!UĵQ=^!oGUߩof拄a O&>=0g,=JC=-(6?>I^]ة&aN=p^k.p"aXV&>t`7BlBٓ.K9cL̷"[PHW QwT8cw!Lp X5 ^C8rsF$>}xnN}{SfT$T0"}Sc+3vu¤Zolħ/۲H|:+鷁e[~/ iYsa`IX^"QH]wugvpfA;3v¾D p 7^NjZd~?쎉O4 B*/:);ŭqng ᚙ= $飄s1 E̐:(oFBl0t jbhuglni Ȳh//mx|ٵA?no['>MT)4S!pxw̖K!.:8 wIvzА_$ ;#XcL೉OiR$ħoG.ZfPHEms_E3˦ 4v>.j"i-&RHŵ=0_uON|Zw2gV1u}Mh.mzW+ ħ?oN Cħԓ$ۖcJ5q.Fj& Mj'vHM\Ojgk`5_CS/4-R!oWB*"f,g~ }ѺmV^)"pvV=MylM5pMi4CjqY)B*́,;kv,gNm(aRzRTE _@N6T/OoJKYb*B*!XDٱ[r49j4Mp_ R99cduqMzC|e5y[uVITR8cW.nRsbNԔAhʼnrrӁ["Ւ{Og71TEԉ7 C]OfRq<֝OgDױK.55R"BjGP_p_/F l ,57m2<&n T1CJKij ߛ Y Rѓħ1RqļV!3v._ħ)Ŭk_Z`mE!U=-mb`Ae"WPmC!U=Iű nVC4El@ a+W -}(G!3ve`Arw׶up' oE'wOjx2TVO*TIf]Ojz'i1SH12RT> `K M3:BI+B*"p_>Ih 'UMjL~}PzR'TIUP!5%MiI]FӁ?R2TBJ/ REug2@k'>\^/K'=X}Dө 7 ȿNĉ |)B*=Ocnщ X06N%u s6!xoF 8bVUO!%=O|`m{vR(KC})g d+h|蒅r5L#FOJ!3 q7ݷ.i !P>aП4B*T5 S2ؑ]{}= -FO8};O|sJC!U!fo%ӱ9T/1v͆/(∱B*:hdOx쿳TlY&f }!)*zn򜫐֑'>0JbjYK"PO*4=BzR1cN2!إU|,y~fpTjP?#ԓʯ֐RO*l܉wݎl㱓NskZ7]UZH)PHUC!`<!pWozXu)B*]+9:vGl8f%{=ެ=r6]1kϻN>K'h[&QHő'﷢3vB[fѽ>zc6Us #k&RHő74G=Q[X+fOf[O ؟ >RT j'0V5}{v!zqnßt%>HH]l6\h&JRq='zVȤ:T 1=_//MC8(c3-ٛ`8I!Gޞ"CI|JՓ¥ pߜ[7=QYg܄e.pw3sop_)ۓz/J+tX=AqYwa? vƛAaØyFmgiB hD)~VR]E6 c>uSλytz58b;9PRq}Փ֐سV>;1{v3Q`}הܮp.=Ư{Ӈ&<6x iC!U)0茝o 6;>ǁ)U9c̛iܩ.MTyǪħg)v.9-Iw IDAT+3vy0gnWgP%>rxװn4aIőzRqN \Z`[Z8l2g,tm]8 \Mn_o޻)N 84W-;wMħ- }Fz յüމpL<j_}b^`"9cF*Z4ެ=MLIRq[8J+WtwOr< Z͈fD!GQ!/}%H<.MRd 8REmgVF A͆ °J.)Rq(̡.!M#ۃlu'5-;Y+?1%Ty߁k$>|{軴s_l%f17x̱O!lGִ04dzR⌝+iϋ˙5>t#g^O+wx*<~3#lgw 3`e0vn+q} \:g&<Y:''GޓGi۳,_z^h~Vŭ1iy̚`[y̎0p0 la)xod]=긯#*s5^G7aõ-GRq9c!sL=ճhGE+}'S4t6o'~y+Smd*{$a&fO|z_/$> |w7k7QoB)B*#4B cglB%\[Ü6NLdź+?L=~\v[cqƚlwF-f5;v"`3/.FnngD`k%>Y/ibv-It}["gH~u>ħ yl=|aOkzRd/dyԓ({lf~8kyJhZ w:/ ?Y}'uj ~;ac2;cw,3viBo6z{x xH`Ltgl eN8%w7p0P빆aUbSj]'غ9,۩7R8/w%leӀ=ħORE u6rIBo7"fiJPHcfIm6utp2c/E}{N\ W` \,]R.T<1Bj~+t?O/n`_ugw{ Qp 6؊0p_{"'p5#=?l{OLI|pRgˀ%>=w:cOh`{ p-9cnN|zoڢEڄB*lC)-M?؍z}愙_9C{iApn ,׳3v^g#x(}K6+@!HuR H|0B]CE3<'̯8ngju7 9c,Vs `/:B*ICߥ& ¤O/#+u3=8oh_uw-^gor{pƎrƞ,*gk,j/f#ARq'U7s-zW]zwħ>鑄>gɃMhG E$Eأ'C:っֳT\PT(rH| 9`qB0|}6a}0Lgf9"0cDc?Akq.lAY$R&HRHEt s.,ͣ¶ħwGȮg]]1t g9pΩޙnw*e%g-5];1)OT|1K&ħ~E8듀 78cM|03#+'> /WeeJ=a6`ħWE+-H/5U$ħ_un- `;gԹ%K 4c)`3gV }6b]iaPG6ΣHN}KsƮD8taiO҄kuh^FetU_| goD>qKA8i|~Z;2ח%|݄O3v$aМMpe VA{zpOħVl6*3-߸g{ڗd3IrږS8Pg /y?82{lăxL="՗6*3J& Ի40p y+҂OgS>fspahH5" S3Wp@D*3gy< +;?p'"75`lj{,Cز|yPmR^3vqn.u(ԟ$>G)-L!Ug$=H|@]GvMaiII}+ĂL'?L͞ǩ in؈V/iIEARp.Dxȳ3/o&IfG8 [жc w. NjSH{FK}.͓KӄpY dpw8*CԙX95&w] M*N!U0g죄7zq_OUOZd|!L&l609Ʉ ,.fPHS1H yH|z6zGCRs\{OTO A}vB`y7wNa @k!M X׷#\Sw pCzik &p^'lpOߋX_ v"n+z"x !pt:T8c"(LBXO G"!LF'S絅t Td8Lz>axkq.Ew`Aa N!\8<4uWóۈ^?ՌEPH537M:)Ooұ \zeOPOP &NѤ>YǓ&\c5R=IA9}B|p#C]L,R5 &r>֤= EijF+?iDDSH5bbjħ:h5x""(&oCg짚|L(Rwf:B!d<5P;>G""*G3noD(q3a["FX_ٿ9cHDR%;l@Xm'" Ty. l]E=l | XJ!Ul|fǚ%."v_  xO.Haԓ*Q)o > /"RT~JPX_D0 %>}0(3""3-H!4q"{xN+""Q'U?,2| ԓg2CD$崂wdgTBB^CX|H+?/""Q(hp3vς!"Bb4gup \Rt<Y7K /"BU(~TPaٞV""3 ;pduEDuR=cg%>}""Ѩ'UmPwp3vTEDQHUXv;"")*.me H=**Tk8x[KT_Da iଂNv.W1DD}-;/RҳHnIħU HIgρ#"} X1{늈䢞TLKޔTzR-%p`"}x#E=W_@M\RXߑkM"iZ3v+F5EDT K|z3茍|"" QH"\SDnkح;7<=kE=6&N1.v.HR8µS1:rMi8c&F.}p"B8c7nFF,.0&k I}m& \⌍|""CRHħ΋\?\SDdP e9rMTsƮ,kzO_ʖez>^D$:Xg}e.p~ ȇ(\k#BJD '\s늈|@:3v>¶E. uEDԓO/"uY""zR'wTIJSzR&#vIJ }EIu(g5H%=e"QHu2gף~X?Hp_K|+K |+b=pI F*70wgz"R3WEicxkHp8,Re\""$>\oQD:Co/D(/n'>}2B}is )3tltfAEMhOʯEIɠGg&r."QHɐE.UG"68c?\+z,r]i )3v[ ^"R"!8!5K|z=09r饀F+"-N!%u&:l <2_\WDZ!?PAO_/4k_&>}.rmi )Y|6yħOP_D*L$ħc (oYSOJq. \ 싀T"I=)&[#$ (Υv'>70-g[&"H}Rgz9K BeoZmSHIS8c7&LS_#Bn ;OߏPOD*J礤)XLB(.3V"-N=)i:g'# w;zgO'F8@4 Vf[>ΓP TVAQš'>]#!"M9c~JD_HE RRuXzRc o_HRR9Ӂ (6&SMI|z >p8auƮ@=)4g|ׁ#~\*TBJZ3vYPo;'>}$R=L!%-;V;F*9lӛ"RҒkG}ħnD] `NtvH )i ؑ@|m&GfK7HRv[j7ħ/DkM!%m2pa+ x8qbMDj+'Y`:Kp:g%< )(XCXoOs,B`]-Rќ1'V3[;ΈBΦd[llJ_R`BħoFlHGQH#Ҿ %!>A <cnx`&BJE P=:4cP!JZB*'cjƘ1t cc^ƘnOP=3t̘ oHR 2lk x {nS3Ƭ`9xpr[\uTҊRu0Ƭc9(O`۲efwi8`^wy5_#CA%#ke  :]Rcv$ XxOnJJ'zxcӉ1'RT/ƘUM3 X؞LQ{/{R1EnVQ!C_X!}4XZ!Ul&R7=Ձa m됊P,VQ!|p=W 1IF#ZD ֱ!y+BZ;G#z/bTtavP@I8is,ై:o0tav'Ŋ4B*z7H:3tavT@IRHq"U TSK=(ii :|N+ؐ!j tjzD"RH姐_~^%@!_GoP󑠚~o?%CTˎ7߀X!>Ttmvi/p^vM("1uzO*z7_? HMR酲~tzH e4'"5p_9ԓ(ӻ'%"5QHwSOJDjO+fG#"!5'"!r'U"c(c!ƘaeEffRYq3XX XX 8/k^h3, qamޟ{hbScT1fsL ɹ4Ƙ倯_(a IDATIsa]FM{>J0KKf </e?eW61+ks5X] z64Z'eY$ `3BkާُY4ܓ2ƌ`38{~oc̒g]S)e7nc A 1_m~} 6"{3-7xz~(3s'r}7W L HQ#Zm?G ,Tϰ@6.YqNpWӀ3҄7.CmОFQxBȿپw2e~x6 03sPu~I^ ش_RipۊMzF?^n`?ڶxܑn& V$;pB/:}rA8g)6l_Fzz2.%3T!џ҄". 35N= ~ [%kEԦEj8Mx~vߞ |x?R{7)|ƲOv{\gy3rSnXdA̹Q߻ {gF8YzS~ƞT`?<3P$SM|~ #7#oyt`ςC8w r]e=:XTA Ceƺ2M2^orlsGjC>]s+T3bqmZzuefGwi=hcNTs9X粈eqƼEy1<_k= |"a xy15'@4r kkCvjAwDnAcW3"9޼<vX̘.ݲZo6s@O; xήخlw*u;׽3I{n&Dz޷~1kkKqKGزUd9H:Ӏu"k+H~+ >,‹b;1fcJ p11 Ƙm}Ey5| hl6Ƭ^c )cLl*9uA8CCz&4lGÀsic&rV|1jXc$`R|%1#Λ7 *?E83m^1 `}MKDe/WB1fe-`#yc'{]mX0oozOU,[JqlՎG-`Z_RHRl@= I*j푄V'\ua3Ƭ\Dzcْzsy$Zuy |VΨ~$ (C2"\GJj Mc/ c~òiygc"=PMGd[a=)c̑yUdDdQE@ ̠0qTwчqDufgeE De@EwC0 qMvWUW;>O=GUs LrݗB# 00̉YˀE >ccmM,#[IW0_3{|Gڬ=ʲ'; 5Ǧ Y  .s<@)aQx2ffb9Nwwdd@n }O8_%TQF\5m;ȩmїXpM!ٞ Zec{c~4Oԏo #p#!c0`ۓ o*su7KC9!4M{})O#KUBL*~" c7pA!ƏixTضVdv6,x0-$,*O aў~|Cp`-$,U<ǽߓ2!cWѯA}>k eתX^\T_D~C^cW_Gqz쓳v9,Blӏ sj҅^w|_+l!BʪgaG':.wsb zTJW,ЮwU7vo طnN\U+&y9ۊmgYfg-KϐGO^\'{(VԇEo}?Uٟ:`Q?8E$l#^ {e0+$<1մp24& "U[bNJ!P0)< EU`jżf6x.K(bPSRTc2E6$C"bNJRd-*<(F)D*vqah$Sг5s^}(A<)ōVgc Y>'#?%hˢ'52>3J؞-\FyR)BT¸Ti!H#W*}z1GYUU1M1sR2SyRH#=eшThDEv'xsj#!iIŤ S bESҊC+H29fv:p%!Pn{R&xR>'ՊTu1A%REƉP$znhZ:IżUT-ܻI1'.YT)C3]A˞Tcb}*OjNZOZ棠>OJ"yٙO֓jMLKm'jJSq/**:'2=",縏"_=)4ʞT/R%H"UWab%'ef[?D?8 o.k^IH5v_IDӓsӨEY lݦvNDS"|wW=/FI55q7q)acUlW0A xNqDiH)$3 "jc~8)buzR36ZH)v9pWӬ"aI)RQhE0Qr-{U~ָPH)<[KS0`WAq*_I5&t'Nbo<"TA[<)3Bz SIO*FTԸʓjEuOjdD ؇A KW{RhE) 'U&xRuZOjY=)Fvj'I$FĦfV׎4'Պ_Syf6x<#ۼf"4-qJ#Rw`MhAE9p[lੑm~S,4O*Iir-TUʳ.RG-q2sjuc5Yi"UWvKzQ_D?&*OJ1z7FٓY"UG-J8a}'U%gEs݂vff)I]Q"-#=`MZ*ISDJ@fz噗F`q.V`c$D ȱMIE*KlQxm zhJolĖWG~.jy";B]e jRvB|')%i'5xV^T5բZz% $~eو7m'ׇuY'Cڛ \df1)F| q?(w* ~S#!Rf4#*Q" ڄ0@<[gfo0xߨƶA;'ԩޟۃf,Rl`vlSx2p5bdfߍlQo__cD~~0M2 9}I%M^e)7i{*qհ1ofcfe0Yfv* `ŀ?ktℙ=/&4^Mng._/hf6/H3yO1u_>BD*'5!6*̯.‘3Ewu:`⋴M 9|}Allud/c[XO*xz]FQIE8W/^'jӇs%f"Kl 6g%{Nq])jfElpwAHx !#Cl#}#Υ*'P'n!@?ϖZWYtn/*O;cc%J߽}9VNT\_">gG^~çMf>pVpw?Yfi3{=]f6^lf'%22BCL6nxRf%'`=4J,_@a1YT<U=՜2::WWW7Ua_g]t,!<bma<@xAΎ9]?,67@H 05QdF>Z*P3w5 w.&To*_pwEV_QMSτyx*~%]/ϲ"mtj2̓R\3;Tϼ Be{CT"ձU M,ŵxئz*I%RJO"KGUSNjʎf6KC3;:qL*`7טznل0dCvkEENoĽi'e'֓-1 UQ߱ jiPZ~}Jo,* -~nEQ|AH8{ (w'UK~c*&R/M =KFUPa2u =T1Dץ\AX>lDm)"$JJI)wQꐅGE( -T_9&͢zMHoݿ_S^.7XRL^N'Sq;쏲ς;"GJ3 F*fY7\} g?nsw4S{&~ ]Jv&xÛ̝bOu]+ˁ|ỤG(tA;ǽ5K'ܟS{~nڝNqwe;laKCbш͍ Tqk"q!rXEjul*ZdR»~{g}2wQˑ&=aMtEױ>M1dIDAT콷:?g< ܜ_UOMn̚tKw9k%OyO[+\0 2j%-PqSSyPjMP{ ; wńp꯼B`|kc ?XJQ^SEx#p7zMsٞ-;H^`e ஞ>{4y̞iE`yS]UNn|6,.bs0;"ՒL6"VzwB0L͎GUhKKK"XjkiiiiiC+R-----ҊTKKKKKciE"XZjiiiii,H4VZZZZZڷUdIENDB`Plinth-0.8.1/doc/images/debian_thumb.png000066400000000000000000000177231266051671100201360ustar00rootroot00000000000000PNG  IHDR[ sBIT|d pHYs?htEXtSoftwarewww.inkscape.org<PIDATxy}?"F%JcL%jSјhmMj U[ib &VF'}QP5Y=w.;9w}}Y~wZSQ}6b\ETȕENt:B)5w_Xr ZOǪT(o8pX|ux?ZԄE޷'꧞.vBUT!PׁS[> P]NȏEf.@y 888P D,F{E},7 ܅a_{fyY .Pޖm9٬(oplfj_/lKnl33ﰱ+?+ -pkojj6Tߎ𶢍Ȋ^+@y7!vf᪂Rp@G;mK܎ouD4K\_v͕ElO 4kEЉ<Ɇ|!h{w9@p?"5`n.`hX`dNuxo鶌\a'=z32Პ$(o`20 a|_(Ҷ w8p708d7z+P~NF00|Җ wkArxd]A 7G_ 31ELqS^ Tv~ԃd:.(oAI5D<Þ[s}i?k2 ʎ>Bu03Z@_;6bΪlh'8u8?CZJ='ή*[;40Us@U?egQ6^p>\d~ f,PcJ]QWQ F]܊I_-OMne`_+9ʾkk2&`?Bu8#P޶HQS%ܳ 4|-4P]ZnNWdlR߆S*qYӖVl {|Ni"PdP.~5C}r\£U,`|;/Jl!%V!Pt-[ϋ6Sp;p÷Za^u6&cjB)Tp1vg:PІ9LA6l<M%6^`윍ls0v\b-W@zBi(6l&A(d{{8y_Lako˾$ 4D<"0.wބxK ԾcZoؓ5eY# ؊5[#1/cU mC.TY^(N%8a߅-c]ͬ m8L)Rpp6 7qݐ#cNjIن 6\iJ&Y4r0\iJ8!:>!0zK$d:[fTgJ%8!:>58,MjýY]=8Y[B|@Q'=G)\v"yK ]+Elm%XXfv]T6-<#gƮ胶sl%\QE[-&vw]t6ø8-]uj@Rx*E14Q>GQuA? Ns6?PޑtߕU|zf3"XUN|;Xw )_ӷP n#|gџӯ4_duKw?ܬ}YS Id[b~{8*^2`jJ,FVm35 wE3g#;v5zB Qy~' 3+}"u|44)[%  6 s'wC 6Lup8[?f} ݾ}DJjJ\$ (-=Ùy=qPx/65?WS2ڌ(oW+}vk^T&Qd gQlFLWݢ& CN3@ (IbgѢؠaK)sw0:?їLֳԏ>{dƮ5C!;9Lݠ&)vbV%/8CGJ h|F<(|9(@6+=E nYnF뙫4E _GS{ IH*S 6〿d3_B/nÇܓg&PP`Ehqt? xL9dnPLJj"{Ðv~E(۳U Yv:Rʾz=| p pMV+\Lu}5U: Vq!t7s 消iO@68~V"sL觤e!p|; >!P޵%<ƚvTa"P[)Җ wƳ+ݾȑEǘ4O{˾o37 f J#gʻNm☇:ہ3NJ\8_6 Eт}(o$r5)VUA9ԩKG{1#+ G@^t(~菸f= {mw`:|g֖2dcsg(o̯:<p ` O!YHoVw ;IE)gsאВv,Ul~g`k)( ?Jv\V!%P`#uDN&UdHJ88a~qEQF]uES: gqt>j6t0ܯwDFE(]Fm.)fJY6FjU ϧ)z%Ԃ3Uװ M(sW\ ( !$:[Nua;a,h$(3}ּ$~2hfƕ f+_E i+:r3!Np\6 wWQRpf| !n*JF[u}O~:"ZpvC-x>Q 齶eQIwlLӮdھ(ork%ɾoɤz`+[~\R9)^% !$_gU6\k,A"ۊ镂ux;rNj GmQJb'dSиH{?Ez0)g%WԹh67 N Xygr5l3a9lR۱K:7Y F}M:'WS|6wz1jO@zN3Ec]\ ts0 fVkJp4ّAl〱ʓ9!g1zp;S k1r\jJpk*I%\W+*r\ETȕJpR "W*UJ%\W+*r\ETȕJpR "W*UJ%\W+*r\ETȕJp-f(j!Z 5WnT+@pJJRC;f0YJK[~Dl+wJt9WJ} 9c,08 uMR+_gϦbf>pdY.DpJ/'Y; 'F GGUk}JVyŶVt-R+a+M=l*6ǃ_SX6NmA+p8K"h/tYe~sa?sgo2i!~ԒMpjd*8_`ݏ};mU{6ajUtؠr?ow8|~Cv)Y4HzE.6y訛wbJ\gk/djto'#apg#r|>No%N@~<=y+/y!-M3 ЯǂHl8ӑ=HAO/PYl q|~ oN0x/}U֒-yp?rϐ-o3H峸'%?!CiU:|ìBjXp+HciHB֜ygX{*bU% ~9Eı}O#b_lb{ wG+ ܁|]x=Bۦ: x]9\&+}\ m_k _*cU 79!QGկy#I]\ 8~p#Gqv[d0"!mGo[uϑzb3i%i /.$ءN-y g2v]f3АN#'=jpR]a\DOXGf^zۗzWyƱIq+#H3=u 8.=x م:|co7\,g[ڌ%\R/doE=.eYZ5i{ vا9}DXd5NDg]z Y ;h{fԉ&܊lGOg^ov#Mv!;yϏ"5mx}i~/VX| ]H0[ۙ3iQz00{ ǑΑNZh sž1tJciضNaS!Cdh5矵l%tH6ZlI;odvHG0-[1ɪ\Ҟڒۜ8}`3Ȯ|'fզJϟFɑGlqt-΋qװĕZIRuMӉt-B=۰&q:6)e<W3]Da e9uZ륑80\:qZkےx! EC m%Z2Mg(pIHp0DثNcHu)Z>.t#.Z'w7L&;RvBU+=Dkb,9Ȉ}EZkSȻ\h.FÌmQUTފ\W+*rl'3RIENDB`Plinth-0.8.1/doc/images/dreamplug.jpg000066400000000000000000001134511266051671100174640ustar00rootroot00000000000000JFIF,,SFile source: http://commons.wikimedia.org/wiki/File:Globalscale_DreamPlug_n01.jpgC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((J!1A"Qaq#2BRCb3Sr$%4DTc5s< !1Q"Aaq2#3R$Bbr4 ?md%PA(%  @@@@@@@@ A% A@@@@@D0 "(!Q(% P: a RPJ @@%" A"( "@EQ@@A!  PJQDA TH DB@@@@@@A!(% P @@@@@@@@@ET ݑ%PJ " *  *!!(%8A% A `D( TD % HDHAUp8>@ `SKsvZYY('3sPJA(!    a h%c\vgT\%ҸPyo|t[4wIFE;]~9% `Ȧ#o̴:bs$?qN)]]AiWq͡545=#|c+=bY;Jv|;o@&CS<;VJ@@@@@@TB) *   @@@A(%nP 1c2\&K,ts]lc̸#ep tGRK- Vrѝ_22U=QPfթd.zCZI7̴i?0KUckg~|ijfH7)b&> jN"<61+v)U`G0k~چ;ga)0,D)ݪ'7y&$lǵLmRi*. a!QSj:s$$coh՛\jط)0.k)6R揺™^!QfF⚪* Z,\Qxe|аΦ6 AJ20z-,UL$&EB @@A% A "*PJ P u3KX`vr=PͥDlOu\&^=kWn:[)iv$7+>gw&G~eTcQQ3-G64X@XLS\ijqH ;de״9!QSMbqoQWgS?7djUj_e%;pޓb~Tf3L=DSPLQ5 54 =ezo#p t>7jpT)3^M67GL1kj૊*as 0W/[Mz݇h߽0AXB@@@@TEPJ P<2Ps|Iv |zGCeK,m66fWp58^Ү; V\Vf̆*)[#t;uU(&vn.|j*' `1U%ҲvuLRߩ N yr6F^'6MؠUXI{_ب-U 5~t#bR^KiI#;,XYv%4*;"su1E s@nh+n> O _$l>[EfPao=NRZnked5,OfǨ=,!T@A(@@@A* /E#zSRdFfC~J''^~<.e$zG'?5q2xvjg8io岱igK?yPL2C['=j* ~8?>H=U,L-8V!ic8ce: 5 LmnGlC; r*jZߌFͿ.HMEVDW-3K^`OGFp!S~&S(jGvL;F\a@0v?rmgItnox vɼ2$.kN I[r|JNO}aY*Z;\QO.vm:K$G̔%V Cn vAw[xoEޗpne\[*jGs>O|e9lHbp_G *P[URJ a3IgDo{@(9kYCO(~ߚLÀK>8xƘ8F/0+䒜gF$Zg{I}1c$:'Xa>>H6T 2af w {K^~ VM]=js57phcI\ \N!4Q37%r6CPPJ׏"Ffv6A˼7 gLsP5;`s XcIi%}Zv?%HS:3ҝ-;b-imn}\#(1.TQPB jQ =Ӊ-VDM|E?LH0p'EП%ghb{ULx_|3^k\y:YK9e7KaA˜^ nUpX:8PlnMɉǣ|a ,qL6V4A.mIޝGg~HkCHIc\:8z0&V3 %Қ߅+rӺ=,G3b}G"_G$ɩ_-sI##)+!cPp|z1 h3#Z̕>Z]v4?X݇lk{hh(.rĔSݣnD!Ab,P w`ѧPmSI4A`]P^r3@;s <$o DKc)o^[*,LԸoE6;vX,L,TUւL'W ñ9u3JA(!T@A( ºhm4RXђ0\ђǓqG*z7+ j;g}Wu2ž)%F?5NmΪsO$JWjdjQWow}VI  ԵtIۄ7Pyr3Yc$io*U]{@PyeDs4",>#u2Y' "s"X0=V ^p*2큆=ejRQJ)'y eII ?pdu f8=I,k v~7Psë 'guj d+)٧WWnJ y^ͼHw.vTj$y9 X1H)A%3a?PLQD(#wf>/'&[YT6' bװ= Y?ED?"UPӴ0Ѹo ߢ;!@݉Cce.W ۪]eY?쟘EKc5!pp9zAA(!TCc1ho2PP76I\1 JXtL%~Qy14PI!pTF#|cjly KcrPUiP5ܠjө.? uuDEё%EL8}el$A&Hr޺ӗ= )gy$G˰qgψ\s_ŗ{؂f5sq:te喔D6haO_i:bS zxl3<Ǻ5}MM$N-{H> .XkKAoM²!K6TH%_5bQk,qL>N54_TjgL+ұVE=ƪ 7.o@D0=MUCJƖ4{v3!9kKZ|D¬1uo0 D ǐUҹa= Cwg*lqԢ+k#Ꙡ~)?ou)ڹ{J ADs[:WP ~ OQSޓ x|bPF@}\6ь6yP}LFWH(s\~ t > \~La,ǩAmU9z@͆doJ.P5OfaۡO0 =ZdҌQj;o3"js[+O=*#$7K@9Oꀂr2P@( PcVRj!k9H;.XG,«^]eq8̣1ac1#!9ЅQW]*EgZnQkqn}G#sM֐6;$79bO)z|Ck) w^흏)KQDQË8`xh$1owuƢS1VeRK$[B‚ppÀ#L TӵmO*QLs o63IcѸ8y*AX$˸~ʍQ@OSߴVd1zGHbaGBƌg*=CGXQC%Q-y<eEBt2D繭$h8O.j k?X̎M~/0:IA{| )kHn QSF|pЈi:C`U@|iaƖeyݥX;[ȥ܂mUiˉ,j{lmhua-M=+"C~ha\TF.$NP#"9cd# 0y 6%4 '͇~H@Su~:~'ءGsydRs@Y iS S\*1U]/ pۮ3v/7؄\=K>6[[L󱞗S /֫OVѹVEl "(DK~B|yκsK}sq*\mU$SUj$E8wN< <þ!ky+3$eB@zLk.%4x?(dSH靂"㢦lOj}[4ӱ7J "WzJ 訡dreE_enmlCTmW?gTHw3S06G?^|thLT[tT3%q@8o5\ªl -wd 3dY+NJק_w 5tV06h孹-<Dz,KQUS PѾCTTnRM+~# 3:Đ=y=>%<*eA$$n-p#p=.qLUEuvix ar>Wm1K%}Y>R xS C,s`񖽎k!EV (DFUqU?_dg{3As=BgG7®̦7%އa 8zMZ͎|U#wA3t{uaga Kp(TRF DEXxn^F$H68<ǁI!W}(AݹUPȷ(Z .(}< gK|];F4$ܸb1? {(+6cCG@ ܒ1eGCt8P\m+"<5s(#mm,#oPYlU'/.~zN T{FGI#<'9yˆMO/QC樝8AvyC }!$dLy iNC[ߴ$H5Ҿ}.G2h'ϚA@ p;q`z~tTv{7vmS1Oy9'kq浡lE˽Ͱc˘Zt*p? .=ƢkwtWpc;{*65BXpp]}\Ie( J@51X91og]OK&& ycdn#[F>AWˤ!ˡ"ar s(w4Q8  =Dm|ncöA6R䖀OP9~JrS;9ߪFF۪.Hv$;&L#T=m_)"5^otAxg()A uc@kCGe2,Gq+,ݫ y J@FXo46Ǿ@KR)vru7p;S-z4/M=ii3]]ٙ;Ӣ>(P1P芡kr. 8s쇖 aG66(9vYE2dzTqM|ݻ42tۯX8uSUGGK>\\1-43Վ u=HvsPV ;| +ᯉ|Ia *WL}EfeC̽W4٫t{127b{Y.4WJaQmxx(U8Yׁh.`;@# Bc@w1A+*$hCGP;`~w2aڜ Îs۞*e#v>n(2al{w{ KML9>ߚ6?\}^A544#k3ܻԝ"09*PFN T4UW  <3#nqv4\Gnwgv̺q´7]"))i3^W;Jۚg=ojkDŽsD<]nձ=ц;z8{R{QN57sڳVl[ll5XuhytwUo<ޏ ?ox|nuP~8m!6ezع\wG v|?s->N|-T=V}rgj 73?%l=M.pOgM4Nh<+ʲ}rcZ6jŻ1qy7oWwr;_W@A8@@P[2Qkrmh=zuU=ߝO1XwwD09Q98Sni3##êeSծޯ6{^Ԉ湈)mvkifll| cZ|?!L]ު)^qO|03vcw5\u796.gilqsyBq..[q >;&rIe iLjQ|,"*'%sԕAұ#AzWlک*!in*ҡhl.o'{`ެz *E\Ut}#;g`d@@@@@AaQA+c'3C⑥i摂>H>8 )#wj18pUqu+_;gc .'>(*Ϛ Rc1ͮ-FڪA6* smǒ .pPI1q_G\) |9AKOy<0|x׵#3>>eW+ff.nI`#vDÜMt;Q0Ȇ729AXFÉȵ$mcp i$sQh#`Ђn܇TARDlh{0=J Qru@"NꁟtE`P*7J?Ɉvqs̊6EccɬTUDtBDU,|6xˢ{C#uq5S1Lzbf3z>&\m"EU' y:(cw~?=.5nz7htOwWp%:&\1(pwGckkfU;,<76u1~~7fQtԁPNs~KFGUgK:~:=#즫傜pzOtw>;{.^<״&)ܱN|<*SqfT='8ow/rśQ13o-3zǽiQ^㮯OlWDէJ*H 6z Jf\)bp7\F]ULrtt]=tr3+߆3T:ckc'|}dLq>i\iOn3.w޷VcfS\bXOMo"2Ƽ;v|T dt[zbV#5g\eŃɣmp}l>}ϲ>H3@| #A9e=AKqHk*)aB֟eŻ]13aqjU-jfԹS[Mʖv_8JG=ɧoհz^}^W˖~xG(ax)m5 dy->m}>S9l_]ؚ)Gg 7 %O<v^ܰdt'a4vMIc uT`/TVLV#.>2Nl4O>Yn㚺T_*L@YT G&緲Xk#gTsSIQw+M!. jw=0xG -O {t.q G GmUK{Ora0 ]L-#L{$n%Qt tу4TdG۪"P@JvE8 eE[N.⇵8\%D!o{/ ͡n3{1xye췢ϓkR Eh[1~Zڋ{SQڼ;{آ\"j|#1j+VٟMdM9fjz; oc[ZKib)Lҗu6m8c_j*`8h&H˟/#SuLTrDpi19j4 -  P;7H?y|?ch!::ݸ%I ᳼V)ruɉ ųh(%O\/ٙO_t[ִ5lzO栲̢ c|y"Vb@A_ÌM=|/]'TjgwEJ+QI ܢ1eFDd*4wu-=!-4Az8G˟~l0d4Սn1N]-ֺŦS3wׯS/7IA_K_iK3^:zbrlpC*\TQ53PDZWI{A8ؖAsͪu9`tYã~rZHΆo㟓xh\53tҹfDHYS$Es|uz%ۢ]/=Whh7 +dj#x3A;8-~+t{gFcrZh&t#{|Kލ{^K*|mg[ \7 B`ivUƚ:9NθZ}ykɅ䌆ԷP*gS?$t/5A"삗X PSjEY@J ",GR! <,&ze[iӽs<">NDUGC3j5|ss4?K}[ScJ(o^=،O?w/iZ6wn'T\RW-cF$wPOyliM1O(8nfgutF-+;(̒տήsYsUrnсHPbYp¶?R7~v1X3Tʫѳhafoy$ԱKL/FC~H㥟S+W Pj~Aɿ"!r@Ca"1W_tq0I8E8C gJ 3>˜Xvޮ6TH )<zP9P4 e."䂧 ߆FӼJY팟r?nS8;*q~o%?`z/huu. i*(X"%󦸢MSlLwቯ\ v"di,s=svBtD{'MsE\18SJ+tqU&A؏l.GYj7G(ll5SW68d=W8}\}JV}>i6"ާǟݮl7xٟ͸](58ftM]')F;8D4]Gt@#P[,8v)/ӴG1A_D!{Z b?<״NQ kUrn:O[]knz[YP]>-0+egOn^s>ln߹wLϊ gnh$̠@O>J k\у'61?WCE@:0Ge̹S}Y )#SxFvI> CN=O2"Rs+|]Xс U&He;zCK[^g12!pͲ-[(ܙ6`!&]* %p0ג$S2C{W:*g}wY4Įb ZLȨfo\D$Έv lЦV) -}K5#7LL\rtVtIFGy|̷~}9wɞXAe`vy;g䂝;rEV(H)'%@PTO$Nf6#uPݭ%a( Y" J "ۚ +X˃?S8Wia~XByr<"˅ᨄZ ARp3 L.Xq(K4)gH?74ңMr{6}[涧1U&{ _4_H|-l'y/t1s[BX$p;@2[Σc^^wv&mź;$|=iu ->F7V@e+.sc\[b0 @xalR!=\D7 sslÀK; K8y#s*ksH-=F#P  A!J{HጽFe?q}-914K#fLr_CO{LLfo ؚU#wm}BMS(m%+;&Kv fqQ_%?Fwuye13sPX-6xij%hɒoFX~1#д0&E&V)k#_8+iI't{7Lu3۬DbiZdnio%xBL̰ne N1P7 MS+ka^/ rzsC3UG'En:(DJ2} .Lfe3$'ĝ02vQ\ G.xT@=0:aC ϟ4M8AHIPA_Zu Z0_eLZs`C@g|Mș=qs(q]7:_4`}q.=Iפ | jٗ>KEeS(ãiǖދ4aTN*u>'/y '(uc)'~e;}RJ)aH䊨3`΀ NZpfԹe8v.=`ǙǢwIL,1H E$ B; ]S0|L8^ :&L<’}^G:$:v,pا%˔p&^֍Ϣ9=\fy)n nL9;|syHHfYvMZ*zgh'r#yK:wnӘz,j؜/Iube:xju r<6Dhi38gh55F&YHi$1^wKdOڦ*"rsgmC^_LXFz/6]teq=&>5ԐH5Kt7Ӱ zLO>_U_>Q;5{~Pl\c]]$Q%;Ckr֞Er*݌iK(ld}79kܪEijd ٮ*q1f&3SCD4¨2y-,Zy6H'.ӽD<UnwkK h辙|0X쀴V Ƽ<>*Iߢ1!^jb]x<7LPiq-|׶MSW15i%-knyfeMvֺyNʙek7kE'co&:햋 }̃ҐOǛKt=ώq8p?YE=XXnwy7c#[(-`}V9dWIRf!b2̲Yn-RT`MqkEիNsioqKN3qSВȇN5j5P; f;9 ӤսbxwOE7#v<,7>e-CYg%`u.u8U0CÝDo<-$%óL# sQrՁ-4K\F7mE\{as\疀#LJY84>R4j6Y|-˯wQcN[fB~Jd;OK,'SOQN%i-)WD8|"ii} \זJ }HC;DGutg *%k}M5d|d7e?۪?vɟWUw\6 hxS6ZeqA?Ԙ|k5WQٹ%ik{{2N67KcXE3#urrwQ~33oTψ-m=x} sd9giuz-UO}=>E<'Ӯq %Ż^F}̾mG1ড়>-.lQai8]V}G-^!\{dݮDT|PF9 4QO&I `h(etԑ .˴g,6w #C'{a1}19Xv&T:?FLu]NgLkip\}3W l)[~C)ç]R6k΂׹ǓSMNi%sw3LAweqyHy g(W9EgBþnމQQZ$Awyߧx'.IRg b~F:c݉;|Zvhq|>8=W>P韈%#-﷒uޑj534S6Ɔ՞3jv1( f0ַx&j;$bXK+ZkQ<qxղHd-Lþ1rEw-c}~ 11/\"jY djy&Qvy3\آ('}s]fg?.ʮO'kK]g<weGz+t3DiGx\>q=>*EU[#ϳQHLrս}EV/&q><}N®'Y8O{5Wfan e712؊à_,V@*h]͒48evuoQ85QMq0o )g%cJdˣ<]rގ-ME\mN>O7}.toz8l-6Ϊ?V|;{[|}7SIeziq92>)29 Q_6@ע AYBSC} Wky{wV#y&pnj_$1[!sv'&rw?nrvyMNQ;w~ʦrIi9Յf[>ۿIEp;7ǟV]t.*3{ >λwp{udٍʠo[ O7{wZOfb~}Ɔ՞8OO ,,&C45@-ՙ{29K[,WI-3,tڃ{W㍇ǚV,4bxg387<=Q MZopRQMT]+s 9 oͬ}[d1d:y{EUibNqtªiv{gZ~XWSMQtM>Ƨ|cem;%w K55Cq˴gzU*kvl"b{ݮ%ҥjO_K8? ,'}"採cq;G;(8͡N>3zC';Cᕥi5xaAkP82Q5sӐGWWKR͒A"M<5M"xüv)pt\de-3 >yYۦiL.Mʦ^_V =MLw`1ƞ.SǯrS{#Y}3LMWdnNdx/TW1gws 5:IadѺ9X5 ঩sK:A9KFOOeָ]Gvq?' -έ<={->q<%gQì99\GLuq+r'...-̚J#m9yh˹[j]b)s/s<]m%LuT#B etMM5>s/&@; &sNq volmc[7j8uzڦ&!ݳ\#P6yvt7_:gOI\]~8}%Ե9jf 96A|kYQ5{qv#^4bS`y}QyDz~ܛJnE"^~$4\mhm]=;3eP :k_w"3D|fd 4Na\ڦ%c]k|WHll/ns((Ij-1˖9o5QMk`93Olpd8L ȣQfoЩNҷ~c3QTV7pP0fwc3Q _[\ TV 1BTA)*S A P e5;^#)Þp5m'HTθExfts;-]=oƢsr٪䭷CQ3H243>CtLŧxt[O?Iio붸f<>9m2aK*'f\2ᬊFA 숶B ."$xזR9ͥY6qmVEWmv^MuAOnAO05U593чtTS6 hZq {8 5wbzs*i+aGچ6V'jd;4,Lrf1ɞXFVxû@8reLreL*젺Ҡ EH¢ * !$ a (A@‚0 *-Rtv+غ7j#z7}}"q=%޵TA!Hm;Vw{bfs*Ydn`x9<_]6g4Na鳪M9{ZCA#Ǩ賑.AGffZMV#KVtin.`edPkI-;i /SUvs&ʷ]+LO{-smBPY(f7RmIQGMMtU끤tx{' 9ϑ`؂7]f.wgY Z5mdކp@ s9k;6٘hk' jUֺd‹.Vawؗ5i+{kkiSs{F*\̲" d'#{-tKijfݜ  \žRTdF ^A C|lWͪGwep B62ڪbOC}xGtpyoh#zcXy;Pk6N7c޾ˡ;3_wm QCG7Kx8-#019Y4q,~HHoC+8\p 4 ꨭ2ylI<"ӾѮ9frZ_tf>Mɪ"O<1-:Y{da$^hh+SmY]X'K:v͚39eܩnMA#]rɵv1T,119[rL<8Suy0>~{"ͅVrQkutnտ7}G\,lLVr[G=LO1qȽD\8ߚL1ɓeuOڧ >_{6ybZ}z\Qf<gW0 E*Ia+y ˘xDwC"hW;n1}NVlcTQ 9s PZ[,{L~-] y9\.puswcoW8YI}lpa=lk0?HRQ[HNdJ jZ AAUB<A@EF (AAEAI KP[seҶ@CYe01OVaL<爸[ #i8h{50S6(,%`5c94 p;Y4Qͱ+xOzO|Ms!DeK8=k6&Mڦ7ot7DzKh7 #ȭvi{4NiƠ[jcZj4!8#F)svncz88|PݎG,/q>Ŏo= %W[*#|!$m+fh*>-/ K_8r{a|V^=?U鿷V#w{MjvWQf>Evݻ^Iuۍ|c; P8jft8>'ߺ5_A=XNmp}ki'Us{t7Uؙ<DGK0 >"ٝv:Jvꪤ&V߼ߖiW O~߬|:}A#KU[H>(i9Z ٳ=c\>rapH9G9qyO O_+eSjE6T?5G_[%;So?#u3p[ K8ct>ܚ53nyuz-pF'zAk.8򟴮IKZHyWWö>mE}e3i=TnS؏co,K EX4:W 2nE{e3ƮOl JڑS>Q\rGYO('7sW\!'do>ORib*Z'}Cawû!{]%7N?pezMoQEcГ&;"tÁϊ4FKЂA* DPaJBAEB aaS !:5EG1gl4rs~ky+x\Ndy!^,$-Z`|yinv-#XK&wV#]M'~ak5'OTb't/eA8'ar݉7o4BCm){m9*y)+ᨡψ% jM15cO հ]'z-3Un|ÙvW6 9f3G'@";6~_dzUϫ\Pl5M{l?o tW+w-f5wcX=>E1(UlI#w]CBQZoyJ#$7*u oY-LvQ[g,Eo(@ 6(|d1auA[Z ҂B¢ FEa"@‚000 PRZۘӣW(Ş 0n3MXwqY1y#̏#c]v arMLdr ~,JrɪZf&A-nei|kumh޳9[I/l8g\+=NGn<9}>гq>/E& 24+OنKOx,qq,+7>j`hס[E2msjܾ㟄QToUGiDrsr-SDWUMIR dtz١$48pќ,keiݞkK]0 M yf5x.gƛRf%qEŲCO8<ݼO:O|63t2-pص\E?MW|x<;<:8䂒OTas0t_nEtb\%\%qgV [HvC1G' C)z&ߪ"c nUM[%ʒi ^ſ'c5פhcgiLp}j[jD0ϫҴQCe1S+^$vz+r);tڢc slHܚ>Qcs=<]*hh"o&efzխD>\A-C Ht4V7tvѰ Eo({7\6RgEȬ0QZW\ J 0  0 "!0P0(A@!aRZۣAicMN׌8L9 SV4X=pX< SfG wvڊWH50CG-;ٖ\9)0%]_c]9u;aku+M]88g1^YmlqW6m^iVtsy7}f zO:MW Zl!6j4flhw2W[sy]NݖQ"֞s.kpek] fr?]EM7)3h;F%MϋU@tW@ K=%G 4qD&:H)i8ΕsɿpnEW>pl골{#zuN5LxK]TaQ9ަq/"Op4KPؙ$6x$QDc1Gܹg7'3Z0/o34~tw_}=iO8|ZMwgIQ,r4`ЭMbyO!rpĊMmoVoѽcNcBP~$ne8}k=zc~~_o&O,ݩ؛u-Xme-~il͚w=܍tMxoh}%\j#WkO95%O]rSEYWY<=iF;ӿEɢs>pilWgSLW7 g?p?D0YSQ_hyM$V%G@{#\r$%sDKFs/+ K<6Zi_pT_? Mi|Ƣ@0ds$,OHm?6dڡehr۞ 6M kqlYw-+We<韄kvWGAܕ:[ƩPz* ;34~G\|nLݏsVV\v7X-< qU !}Ǹ~Ev{z3[:qz6iVܫa/kΈCnOmbf_êW~SE7lm kW94|GֻtsK<;o7?یGYkV?t" =RQ\FG;.KUګG-hݽž||m.6r|ͯ:dZ9e::V1  ad [q+k oD0Ί:"Y +@  TJ4iC0i@Ҫ7A8@ҁ0NF0a@BFFFT PZ|@ƚ8Jap5cNXYe0$=y߆) !O$D" \uK5[9t' Xvk/OSǬs{B9K(lIL(vC2͞5j&i~?&OlݩPTO+=Q?-6+CE7mLM\;[zJ&?%G]EkףGՇ)eiZ)0Sui{6IW+j7g.;_bw^xVP7lkaDUYcۀ{XCNec 8|fQ'3 <;E5E*X$sN8C{9|uqx;g/?;|4 sI_Q 8#+bfǏѷY:V$G M0MPӟ' '[݃vi.-nԣzI V#9f4cM+9K~Yn=&'l~#O t΋STGzUTDf\G c\ytnML;#uvLbkލuf;[jݮ0>/C|-+yrKpAMۚTb^lMs7b{H#fx6%Ȟ'AV~e NBZC sg emӃ[;!۹ ^Fi;)=޽E߹/37|6 cs+&|AQڿ;ӻiRZG^8jG$enrjjfs<0QI1>mwvA[uQYa6Enmܨa2fd20PV @ % *#QD0dTaA RZ1i19rhn;MXw'\u| F2< 8fh 惚XyuEʛ]mmh\fL;^kë}\buEqOs`Z{@;Ј^1%M[~|{ã|N-0 U.iS9lcU|lNtmݍj ;:>5;(=Zpi_8t k4Os5,nj[S'FþO%lMLGY͈ʣgp}]IƖFoZJ4._SQ^lj ٍ{Vʢ8Fn =- wPtvFqm[+l; eU pCNDʲYZEa*@ pp @@@@@@@@@@@DDB HA b .,̑9]f E<ű=$.=ò#10,g12|Sf =7q4EQSaF 4l{Nion*h25m\Gm ub=ElaDVTq7P_kV"T A8A8@A8A8@@A('( FFA 53(->$=9 CR cFUL8 9Ƿ#pH8- hXm]L[J$9AjT0 gtk`0^=LP54=#,ʆ+yN/ŀ7zF.y/# Y_/ZYɕb@>6,Qb%XEd^IəFk~-PțS\,ʗQx ?W&Gbro#A^m1:݋wU7F.]`?s:- LIo|bNu{&;O^oz޿CS*/^yLu޷Y9Ǒi,V;nd>F@viz }ζNY9Οeoo-0e ndOsqop˞iNv'p@pWIdm`p1;u:?mx9QH-!"03@ $1#AP`û%pI ?$[}fXz*Tq+`٧Ͼ^6><%:y]:T|yf8򰪲OobUhCPB.c/A$caIiC9%49uWzb _lѵ.PQwc:3LǕp8SFo/8@LGrqJPHȳس}Xx9P s8#pCߧC_r5ldܫ,>w^Pzѱ.S"q >Ȉ񸍙,RWR?F=48_u\zCQHl:raW e};TkcY\{W P2.\&Ύq23ã~GZT=5.8ށbS6|LQڴYT۔&9nӽf5l-&ͫP|K8Qcrx!:ϵsm^K:~Sٶѫ/FHVf@2Aw }I'PͮQy=ypI'~LUl f1ᰢ\8 F$H]F_r%[Asje|]*xqfs]hbr'UIyt1O/Ҫfk{u5vkdIqk"ؤI k5 1\.#Q1>8xi{}\j)>mVm"_RK)Qu܁q6W)|~Q(aHZŋVQ+N QlfViSǎ}{.ئBu{6ZF_~^4(v)2JŰfUԒm@,7ùҫl;ySP#0n[7!"l2,Fa3:UuʇyҲzWp^4`b/2! 012@AQa"#$3`q?ǩ_~ usu+ߛusnB>R OvDB;eOt[WNKO$=r.:'2gq90;$:g#𐧣 L1缟P``o>ۨ*$MeU [ѿ CQSPK :&~N2/כe)r;n¢k_TU29K$.>Gd6Sl#rP$𡧎]u_Lt<éDAaSU9Ky+"HST?x‚Znp& #U;}>|,-z|_s SU6: iP' $fT?d=  !"1AQ 0@q2a#`$34BPRr?GT\b,&ޟl>Қ-O~!)u6xZU4ZAqWBX.mn^4LSn:gv"ɨ/X/dqAu 5/ڽ[#~zCu2܊^Ro}Aaou 씔eXxxu4g+j6kmht^qwoFoNUm`t/’fITE`icFo^T!oCƿÒNͿ#_gnVcR{U$,ePx N1S:OiҡNTWo>QY5Ze~u&R%'P2%q>"sIÑ9:@aƸXd/4l~$,eP2oVE{b2aӘ![hGV+B[ByVj@OT<:+ ID9`J 1Pז?ހןuP T.*F "+C1Xh[=:-||aOin5 1缐,jNç3;'Ppc몽?C !1"AQRa#2BSq @C$03Tbc4P`r?CU"kij Nm&< E'b4*rgXSl9:U(RydIR`ˊsR(8QaZԻbaaI 0)6ׂ*5alo0S'*f:A7ZFMZi^EcU cm16mnTĩF/DaőUILc`˅񫏔Qr9@]y}V(o욟8. QMc;8EQeGF#9H]4 EÉG£}ɋ#94ޛd2l;"j^Leu#Z ~֔jx]T&(kv;5f#\a_<S1}77yU_cqrk2ͧ_UP[{/]%PcP=/gYY;b8zO(o%cLT'tg#@ZQQ6Gː]o"]r)5*urG)S.HSc@rةqYZL8bኴ'=Gm{ʂPn^smo8]i6o IߠgN T-$AfzEyŽ 5BUɨǣ(Iq,6xi!bS,VVeE7L ؼFwEɣerln,_cO%Y1fk^3@Ib(jePԚaڼґynҊP"QJ9&(J6{(gŦe)=M+o76pnJJ(cRd(FeRA7 0:yÝ0M.\ =7| FOZioxxG7K|7.[ Ji°&A")A.Wl񅫶p?KmB2LGU>&i\0JEeRi3޳w0yioB%[Y6N5MU]fKR.raC( .h?icOhsY>ON BCYg)J6HbM/TdKIݧ2ʔ,+奚 آP*!1AQaq 0@`?!ê?|ǺU/)[样OQڎ=@9M=̨PzsFn*!jC$-lZ2گ9dP[A|޻X ChNG({=,J}_JVsޥ :?C]==s|S^5n]D94 (ŭ|gQK|KMBm'j{Re56+17gL}oj*DEtiqj1e5/[kK-41gL9;495ȩ;i{%JL \[@ƤfV6OӻFCz R |6]˫Ocf2g}ʦ(zel;}bZ~uJZ*:buH5̮zJ$ W?ւ͝J)5}*@2NJ^ǘ{!|U{XS)R内m>z3et,:Q%c?HU^͌+iyeGJMK4~Be:Zx\#N?o Dڑ^|԰5jZfd&(הBj{—qs s=euӽXhJ0q0lhbutuΓT&h{H}±JOtk I@cj8{`}j&Ϲ'5{^) ZMl[ veθ qkFk#?j|ɢV"ŝN*+yiaKUJ " f>%ZּE?js$sQ*Z>FG[,}h P9ç5Gt?AFŜ6i.;Lb:1eN0L*<[ 4x҆ԗbuJpM TS.yQS6T bs@.b=P3JhmS7ivδAcTs:ۈQi sQ(#h^y↦ 9]3{ĸ-7]Wp0}) Fzq=&շ'hϯ>zIe~9oN>vʧM`+Ь: ;zĔ^sDr J r)˥Fd7rd{HChR~ I$I$I$I$I$I$I$I$I#I$I$I$ВI$I$H9DI$I$}99I$IeeI$ EjAzI$ops_yI$|kNZ]ZI d9jGH(H<.Q$@qVz&I$@`s7*I$A}RI$I$A$I$I$HI$I$I$HĒI$I$I$O$I$+!1AQaq 0@P`?~ x bI*+ 3?슾JpLAhJ )/-+I+Bi3ŏx3̤8V_𧓞X PGPi(D FvV ,F!efH租S$ȥ+N("l`wW)@C7yLߊ)]ָ-X /)k;sGJSqs_WiKy,}VX3yqN0%8 4JJҥ5 ʍ){ƥ440Lizs7X-ର 6JScƆ&@wfjcz VzlWTP99|7zՙ|"$FVP_9 N$*ư+&"luۿ{w,:^*[ȿȖG?zAuw,l?ICtyB;BBUAF9{tL^@'ـOppfG1srsypsE} GK{w>URΚ Ao@=3)*z7~DԴ#+ǩsR?jw ԡ_7jBhxS>-FT_1b`,T6{jJ9=ay,ss]^ !iMjL|K_ M?oԴ/NV+!1AQaq 0@P`?a84@9):RHۥL.(@R6f1SU= sNQR**M)^zQЩvF~*6kj"F:OC54ޒ}SV%/m~Eú('ydĉ&vͱ}@&:sNDϦPzDhՋvgO:=Sv5͍nZC!)ȞY.T}8KXT=M5"lM;UY)đ>Q3?hgT.)V3i;Vkjǡ'-hM*bqלۚsQ>e!)#ftxLiB>ۯURZ:b{"i+>>4$$ͬT'dM+ Ȼ'.֣ pkF7YbpQB #+`?!x$V3V6`QeJQI}}&dL#A3g׊a!9ƓRfJO`M0Fg1K%qB6nOyh&H\ ̤>l5r<|m9UM%r?>N(W{N‹ -S"Pӱܰ9TifNtUhδ*!1AQaq@ 0`?oJm$Rm@L"9(+Fϲ)/2JyZ#ҥ&f*DTIv̝Bpג(WBel}jZYJKA ĭ@t74rRC)V[H]$)-'q, aD> Gg42nVzإ"OyR:_*@xw] 3!Z"J1Dh*ؐƥjb`OVE%̱[$DAGR>a d{L* 0QQCG Z*@Yc*ps BzxxoI,wATVDFQ)ȑ>-|yoЫ(E 2b9plp.9jٛQ#CrĻhKJ-[*̜$,xrKva~Ңr\ȇyRR4֖Q=|W֌W 'y Ez#NJend6mQףj5BU<s1X}@ZHE{h9aP`I%igc,_O1t۱xe99F]h\(FGa%qڍ ȟ[IR`Y$[I:>NLQX7EH` Y=sM }:mT#Yhl9(}1o⧱[YyJ/-:d@gb\fB0_c0)Pu]r`3ptKS[!BFe,JV ,96E3f/ΔY;iG %Xt|^-('ag L"%#vf7:\Mdd1HHDDfO\9ރb[2Hv`ʝxQ 9^}K՚3`aWq7((*hN!7YClo I2r MDB_Ȁapz(?0y9bPCൻcV0#uz"O@b$>.kG$˵R˷_)Kl $?ػIȊEj QBJ] jU(BV>J$Q-A  !8y I!J%jc<$%2+Ej|zF0Q4\%;@b2d"3嘁JLqRY hE;|RRK4J>_y[1y:ƭ/T[{] IǐM8U*  N+"?2y,ЧtvTvll /ؔ`񨌠 c@2pC"apϙ(ə@Cʒ&NN*5 C$Ϛs Ӽ)H>u><:/h IXaf^Gx1e'.  4L/Hf$nL|ӂ} bdpy7nQ2#rfĂn;CT \f9KF@.3yPcYQ)We3UQ lELȑ|42urP!ۇYw+])1Rm@J;{Z0,R'zH[NCHDT 2,bIa.⠲怤&N2&€ʊAu6V7A9_4{owۡLYL]$: ewD$gJ]_ W4]t-N f;iLظJNVU hEF)T# v5,]uCmbb2hfVFAY&p"$mF46ƉРfPg'P))s;~t0݁%[aX d0h"$ n ГtKn "E1" ʥȱ@O:%VmgØjx|C"@`H0H}gQ-< #GImjþ4Hk <ѓG€`/!Fzk-BИZJ(v,,+SʠX AP$7)#i ؊tKЁeF{1#S-%x40e+Ёȅ)9f[JN }d4nP=*{1uP;Bb 4gmf%Z. 5-vHA6)„{)0^Z57NZQ75F\;Q0J`nnj\M{{˺1 I( X LŊ `qG !*കO yKs7R^B2ݕ*UUU~Plinth-0.8.1/doc/images/firewall.png000066400000000000000000001400361266051671100173140ustar00rootroot00000000000000PNG  IHDR' IDATxyXSw?mgng;w̽{Mؑ5}M@wEAEPIwj.ukǶS;V[nU@"ȾI~3wz# $!+!yף|䝳t4iMhb'Kw&.KWb'""""M D+1&x"≈HC<eJ DDDD!tp%x""""ODzY:C<ib'",\!41^ODDDDH/KWb'""""M D+1&x"≈HC<eJ DDDD遆x^Yo"`c%ߕomj&|mp ߬7ҏt޹#Kd,\!4=.7"xgv5!rO3 z{ B O} &Kn!z_ " lWw6!_Z|p+1}^*GF)ZSڂmH<!7]\L;؎m)m}ӌ]MلRo%vODDDDh<8:ėbkߊămH>܁+7娼=b7~;0`"VL)mE^Y:C<iz!1 N8j>V6$j; wvC«0N$jǴm?І<Kd,\!4=9o hD}-ZڊmH<ІH>܎?wb{ppVNnGv$*OZ #m~W p!tp%x""""b;w4!tW"4#jo bJ[Z(ħn _=|B<MH:ԎbJ[{ ; ~,=!@2,_xnlŃ5)tOjlӆNDD ]0%H$X1?.BV=?y ф]݌͘O!FxL1w{W/Dm0UyS-݌НqTPӡx1,fvMq)CvFb\ag1^ ;?HU5ퟆzqi:ٔ ӏY<(Od. D왁p1vFc02 lo{'""HY&@lS p{#w4"lW" z_ bJ[E9ݐS:r1y50/9:ą΂+ʢ!^}\!)y&f/VǼPW-5.m I)# om 'ٖ&'9d͂+C<)8-F;Xl٢P҈Sw7#JUsA'=~SLoѯV fo(S7yj}D@6ECy HsCd?聎xx!\B"pa,|&kB\]2 ]mr=퉅箿_H۪pjL~=?۲'u K%4KCcHj+)GkFN2qgָ<*N-:=}mٰրW5_X|`r\g2؎dE6Ė"z=ՌM(iIM#C)tR8Qm`B SxM!$l; 1 UI_JwOt]?31?L{?ҩ58rC7oGG-ڭ&,<<<)_p4Wx|>A7p۹#,gwB|7 5^C}}g@%χx?AC@ 烈PҠ6~>19r."7W@  0ШLF\i*ndQ{ỚF—4w[y3% M9(*TW{w&/H$_%iwl\?7+WARB8zG!uI6VI )ZTDy;ޮp(eB~B5S|&CŐH|bD&tJ$d]hz)ȑH2<4;YMIiH5^Vcd$M ]n*^hd-Bza̡Ɵ)X} (sg=N T>TZBq*V;<_$ B~C<U3mH5(atPB;Mq  JʆD )bv[b*-P{y6~ qpEDF1. fB,Y<,/䗀+ebF߯`̡_?ϗ'FMp%Oߟ#_t$jg5ss~=Mxbc:|z{ m/M_.(`9o_F?:PR݄i~*6tW5C&kׯ.ҝ_`~/grV)'L[B $X Ok)@R+B(?9#`9%AFV. s8))XyXaѳ"PIj;8# 񘗹 +6? #=`}J${C W){l̛⩘鵗иDdp^5cibCA1s,I!rCl`$2Um{\`do犀Z]yY 1-l r:hM/gP ^%e|bRoȒw ¨,n~ީ;(ᯜApϝEĖLP>U=:Bি#~"6 wC]ZW>GВ%pT/ss;Ȓ- %4Ԟ~Me1 D%</thS5)n<_tA/|ɱ(5S{|B9Rŝm>8^q ڮWj!4FܮB8L9ZdDNVnBLDԟ`JR^ 'S:!x"'ՓF脀՚!^肰k!H|#N08 ՗m5|G¶5 $H$97jKvLǥKgDOu&} BBcy+yO#vvpu$~%f8-y"q3!\#2P\W"`Q4<:xaʢ5X"RH[S)󑗛vw{O'/ջ;va4i ?TA?=IO*JSWD{{JǑ' >O%4`ۅ~4T!~Asb/=?L=SH4 ÑFu|RrP5a> BA`i_>a>FZv1yh*.8o8ppOp<䬅83! k#)^&"}3tG6za{9o(Cҥp Knm WGG8GĦ7=5NޡpR eܦķ^BЌHv~a%4SFnگlO0:o+C؊LE:aNm S^0]<3DH?#9S`'ô~?b |tadjOOF}haGbM5ms0ofN;+',.p!"DGB"dM|LsA1S{TjlĹxlҿ 2xl&==l{Y_O¤Ǟ<ϢU(r|Rk:/aTGg%,?j?-[:;bV^RD# Q rr v#5W1Fft$~)U `)"\V;"YꦶrEVNs0joL bP\RB}]gCbJ_,$"[9"Ӕ; _DTQ[`#;;4?ͣ~iXo>9 ';vG+ʠ0C bEv6gf`14.L" B/D]=jznHׇ|= 2lqG#|am¬rBřY.#\bR/pܬ'י9AشNxtE&+M=Ӟ[ r~ 7'8w4sa ~*Oݩ MR}(iFރϖŏ_c.X*$'ކPit<}$^\H|GLN/NG}Ro&r$ϗ@?ΖiA')k5A< =4vN!P$Y7yvT͆j]z\ o'7eǘo| _1tրžv9?z-a钓m9??1 Oѫ?@kD87~; XFN՟NYuU×{D !.HqI<&NFNBw r2FɓG; bbNpk)M9k\toh̉Ɲ=܂$kƚ%H vS|}P5Su]<yEv5򸣑}3sGW?opyG{0罜Tםol\ hȑx ڄ-6]=j\.}e*N'PH]G ps=B^eT W|6@j"K}[luш ڡ8X ߭_[֯x<!!M:i!\g!+'KSp0y:ՑikK<+tAXcןn@C=)nO{$@٫%(L{42$ȟ:r7Ky@!oHVh|! p Ƣ" b Tλ8k&ŞUk;CqMHh?x{/zX8? :eJd:ӻ Sfyjx"8>%vxrBpomoTT8hn{B< ѫND= ݃W~$Lz/U$ WiXsmǓ_e%yjjW+Gb.ڵAat.R^8] sP,"x#eY!+~_ivuw/]3r!^`牄X0^npD ^byWaF\} $ 1#ʨOuMq1/_#MJ-g^,|u~PrwsQCA;x-GaBAqP`q} 8zVH ?Cd7"y. ;#g5p σU_6ԞDm:ٳ{)j=Y<XX9|Wy$tE|H * , ߗr:#CBT73̎tYX5Țuwz p JAF^$ r3d+=727?NO4I<8~4lXߘnt({m|/U;b>)oPu_?gvLW^KmlUܝIlbqBxWOpv rl~ovYːW$(K"G_՝$+N?uvp Oò5ŐH l.b#|:@ L[5kg<15}5$H@`ϘY+$Ņ`<e').%О~ԑ|OD?WK@PoB/5k!)ǪTDE!s(c w_IF~tz#fsckRȍolx<瞅@qwהwa= 3{rսvc<0g!ճZvwzo"勈-B7=8A8o=w_ !G>ycx:N{$~a)6cs=^Qyt{y>wk>wQwՑwі{~Eцzmҿ_N>N@v(zQ*dΎCئsGܥXF=ًg"B{⣑aď=VE)r8pBIv3BRhn7q~nE-v8$?8sQ䕅pՃm˿0~A~8= x䛐|Ӑ3"{cO%tc,i^B! z/S|a>>$5;L+uAS_/iG. IDATW೥li2++\MpT0khl$?xlV2IqmS=&owr\߅HG+12߅ZE__ u/߅:>[d_mT<<[pXyHtp%x""""d_;#3L݅ȼZ8,<NNn+ wa\%y9> KWb'""""M Dd,\!41^ODDDDH/KWb'""""M D+1&x"≈HC<eJ DDDD!tp%x""""ODzY:C<ib'",\!41^ODDDDH/KWb'""""M D+1S"""""""2?bX,bX,UC!Ⱥ1klk»7qMf`tᯧnb2D#p5]Fl/E77\RS]@ޞJC<uc"3Ua*$?tv}}1]w>3Hk=NVw^6斔c>G:xY~|q CW≈C0ښ:quLQeNʀ_7A o~+s {n8Z#dC<ucW@SoѧK;[~Z[ 7w z}/U?雘 aVjy{qf#^zV}ױJnH><^6+?Ɗ,oݚV.VbYdS%;"t+jxÿ !Ⱥ1ī txf?5N!~ϔħ!ŵsHxN}U_O.WeHE~3 > uguwQY݈#r!~{flFyCr9A|q ܽ>kǁW0nXz}N DDDDD֍!~ mM/دu: /Nyߙr:@'3=Ʀƫ*a}_CE*_Z>\oj}GU?w`J츫y&@ݻHiF]w=ڄ;X]\ !Ⱥ1kCkv؉;}RFubJq:}OJz I!@^Ͱ/iêΌSGچCi@P/n{6tݹ-|?!1Y7x-+椸5L Z7W~1%7pC8_H|C쿃r]妅nl?Xu"a.͐~N-7c.!svi3 Ch:& x"""""A+A:|b_vcrL?V]Ѕ/eXr)D[^j)wrC| /@]݃;}~ _&~U BScs5C}xr ?4?Dǝ$]≈C@> ߵK!_\DӐ}8}jk[ۍ^ZȒr$M<9?]eu ٧[qKc rȥ,)-G+X׻9P_YwN:;qD,C+WwC<uc7 JYRMiReb:TaY/x"""""oRh.ʯ#Ȇ )PnM*m8glѸa~>[{Bmûx!!qf'"""x"b!>=qi{MCm0gx""""K`'! Bo8~DDDDC< a7@ڋ滵EfJ-&x""""c'! ƙ뀈`'! clCcxt -ćZ_A)ŝ`s|ć@$'d fgpCkdtrq잎 y~ařvȴ6>ifZDSr̛`1D"AM%pt:!lCzL7؜~{/[ц/phxqd}0E/{r|`4)qK(dp َ֤m1C<уOdC؆c[ Hb˾#x%4uyH c8{=rgp >TU@V;捙a{n\\ŕIj9[qc [> ~jXƈ!Aa'! clc'` {˄*zZGt X$㷣R=K[IX7~ûtcQXwGmCqH_ QG;K02F DDDD C< o#wF!>ztt ;Mـd+mRRV߇1ߧ9 Xo3ݯc{i#>HW?d-W ZѠbX:C<COdC#kV_]dt38R?|bTm8T,E"Dbd~<|j;D"DixRmċѣjkR>`hAҺODDD4a1Kpa(ñw4x} TmNو^E;/@\ rRԽ3G1mV\\uI{qSy}oFbdlq.2 4Yw`3R|>`'"""hlmpw]m P\㞇o{_ |_E\;٫n?T]?GtPM|~l*¢ 07x"""!Ȇ0ď GծıxrnSc󕏥{.a 1p2i#N:j'A;EH!Is26y/f1MX D6!~m6KƼ<5o`r~ k@߭ r9佗rbȗ~BwWç'Rj99r)?A2cx˨i<~ODDDP01ab]+rrΩ5\UؕAiwr) !hb'! cleV.?i@{:)*##P^*}}y BQ;:SkcAy_}x>\5M,^ԣ,): ]Fw81cDDDDD!Ȇ0ď 3ڗ6 ,NZ ;;QR<j{r>wYYhDלOeZF 矋.x>^<Ν /|S￁WW%oMpq|Sq=#"""";x"?6j_['P.ty;^ڌ >M^ޅo B\t~upfcӧU~crxC< acch_?݊%)T:/(*9M^?sGgB˨#R4>^zZN`+܉3PˇϠK@-lFr"QW#""""2C< ydC<`'! DDDDD֍!Ȇ0Y7x"ODDDDdlC<uc'! DDDDD֍!t᭏TRȒ+XQ#~Y_DcODDDDd t2DhyW,?`'""""n zUU#F;!UCM>!Ⱥ1$ío*uxya;&71kg²wP5$aJd}܀oZ`'""""n :Iqk!~׽7=xݏ*YZ}pZPUDxODDDDdu <-J5Za]ڏޭ@2&f.C䎫>݊vޯ(%5ڞ2ݹF}g5NlK*:6_S04 ? DT 8\ٌU[ڏo_Auw#ӿl>:}v!r5<݊ ;޺pY"qUd}ڂ[j7-4}C<ucCՆuݷpӼM v*؉}tjw× Hx^;_tG2:ٌ"ljOVZOZpe巑C2~Ԣ@1sm\cj­>T\o2DY. |iXZ6U":|^߇;mV٣_R-=@X{sΊ0Y7x*o 9c3! /^ÆIe€\&,yGBP[#]wZBFC6=PL؈Żl/c\;7뮭ŌhM|;򻁦{XC}eƫ*A::?Pi!~W%79|*ޜ" DDDDD֍!^@>?VSM<+aVehmƎcyLRwn#I;nềy|٧޾t;OĒ7u:vjx}Ef{6bUbgTg_dݭX[we@ޛ8ӣ7=mXoX+f`'""""n HQ_}k> 8XoJX{0@-Kp]29|6Ҕ7aή8:!4v( n}!iռPװVH|ݻHw$^.EFحo jfhg<P(OϩzݥksOY7gC<ucWnH]G}_Fr}"ƮKt7pXy?+ ]nH}71&܏NwS.tǁ./ĞօOT!:S}_euơnj՛xP" rH{:Pb޸7tҽ^\݆UHm ˥r o{}&~޹*}þ |ׁChjlwGyM#u8S߇[wZs{M;+ODDDDdUai]۸dJ E2Dn#?^tT\],)C쁛(58|GN>Q; 2>nCGʍI/`2Dº8UĽq7A\8_ ߺ?"[XzQ% <{׺{۷ x%@2D:P_Y,o;mNO*-G䎫Xvc;ODDDDdUGfNt1Y7xM qwEHG`P5MX&vYxaOcc=?8QDף_k4N\ܹa"DoEϹN(xM CԨA庾SmKkSCD9(k<ˉ ?[r".ֳ zoNip:瓁BQ|?r.^8Q3zǥ;)/]`G 3IYw5>ؐ DqHejZGc"҅R5:И]&;lk&CDEaVwJokƶ- ZUَb}]Ŷ@,>c=*,2CsȜx, >ܾf TGc[5?w(=A"|bu` mz4iл,+a|Lhd_G=/~ B #n~1d}0em`~`fO Hyw( 6mh-}IIk{laQR@Q`&>e4 DԆ IDAT6 >_罉ۃjӨ`E+z{oM88}5W`גp$nKS?ċ}! ù9n{/cC1Ͼ 7qbD|~{/cC~TďG {u뚏X7L~= )h/$AŶi*jPSq [#͍uWG;.욇8 Neҙ Vǰa_ݣm:2bWLL&go ,v 򘲾žXFeRt\،X W*~q3;CۛQ'!TepvbD= =&l?3.M>7,ƺ7ecy;֫ xۓD/*PsWF~bDb=ۋ)ۚq>8YܨӥX-Giƶo ?n1GuƔ}0sm ۗu՞תqؖG;T D6 7jy3fڑ~ 9^FYۑOZQو+EQL ^=?5Cʯvrݕ13Ĕhgc!9qreh@k>3X;G>76.`8\KI(7nmH[?.֑w_JX4/_2$l 7N.ճΌl[yelUC&ƅ q 3/:u踌 &Sח W{.C1óu$:La -=z\{et[8cp2{qyc,BsϢ<Ƴ?;v`׷24j^֥i۠ib<~9F׫ KP?>cldFVDdvNaIӴmNLcg_ k{lSc{6M1-k!Ȇ0ďr;ĩWߦ<֍ EcڽX=o@%NۊEf /ُocHY'H5PZQyR9=wqZƮ%)c;2MblJ9쿶ɱ/']*'[ {O30f'jG4kN08үjo6v!1:5{6#6,,@D&\w*@o;N.8xeI{^=FXA#!^czsaq43оyu b=e[Cͱlk5csB_P?/GO0UL5&,9bQ}1yhvo=۟qһӱz_cs[5dC< a1}5@#F-nW~w m!BEbv_;G#?o>@qt2~Sq/5}|{/cC\$~j\8V1㢮glKYdDZ^ 3NmMDmJ j|ms1mkk u5G?44~\ߘ\oqJ n]!|9) ҳjhCC)lMԔ5^rlCh?vT鸩 dCSx/SO9ȺmДe1g<Gof/7c<^!?1!kpܭau" ҢEUVVY⮭hqVZ"[4,";! L ks>5Lܹ3w2Of 6Eۿo{0n{~l!V!Si#!stQ, HxQ2]] !xU#-3C<a==싏Bҡ~r-ܒm~ItmPـ? U_8>RQw•xuw .Bw<]'WODŽ H!PO2$}2[IbR8n@ҧ2d'"hp-W$ &atjvT]݁%>2oƙG ~m,"oW;֝mq>qzv=OmѺ6dY5AA۠VhX!wፘ q;q9"=[ fmk~xphL+p4|'}l_PHxQv`=8kھ|V k[fx"/2Bq=i1yqbpPZ9[:ƶG;YN5eıf1hxLZd]Ice\Cq ש='J[`4I6x,'pepq4g$GFPa :%73>^Wl≼ȸ onSmN[{1\6S rb7ݸvg] }{2c\FOW-x^ܡ\!ȋxee!n2؉X{WYa=Åmcf8Kg@mzxph#AGcߵjWҎXO3zMScXz`G ʃ0H a p6O6#d\,Khޅ)+pZRkuPa. qSbpVD`J@b]Du +{a|"Bfh`eȦfڂ%3 ?fl‰/amńƇfn& SӾv{xܯF,C?"jM2dS-.ND';k Bu#'.~C<әlnkZΖmSԩhgO#K[!̜e5ƴd &ct䵘zl9ql ھ3GzNp69#b [Y5T٧mo|݆H$ټl29}95`Tv7+s5bct& Bb[t`?i >q(A xx"/2.C.>i|f|y9󇻩?67 4偈ؕӿ> ir55roǚ1C߀=p7kɿ݋1'!BXzzm. ,9Rd]/H)lyq[8 ì TmV?OYXLbN"T?է8 xn`җDZ@U7/ЁsqCҠls0ޚ![~GvO~ۄi_A;0]xU2 ~L q[+CP=JCuae]E5Jw~io=k\mSթpUP5dí?"`|FB=%/`LJc.8R0A!r>m>NG nDmUlmsTWϗ޻36#[lCw'a_erU> ݸVTbd[6imAgs4~r'!ȋLizC_4NV"fU7bG l3 ki!߅ABa[ `Ό9Sbq[B\@,221 Mv&&|U )ːsd̈ DW7QoD? \ |X}' `Xg;0>@GiO`g Ow"^y^&Ȳ # L n{3%"?WFh~|`x !SVrN!^Ѻ׿:B_8vnO- ok]nSԩlg3,kj$둽m:7܁V~5{z)A_slR#{HV3<-Wt0dcKH86gC,mhLmQ]n>|t5 0cgv8^N!l_JǜϗI[lEF߫R3C 8hOmn!ȋxm [h_i+phOPUVN bWᎣW0:q_` YDEb&X,E#j#dل{ DcCmϥS<]!5d3j-Tf %+>?BE!lor ; dc5 nbnJSbʚhSaW.Na;aKΠpYEu*]}iZ3S>BsC|-6m`;~vdo)öo͡álk1GUx}8.N4<9]+#07SpsMnC|{t2&{P!l]8޶}9*s>_kP9,rG8hO<C<o=(#R-^U7(9{kv͚gSdASl gVgҞ%bn6>{=Č0}lΙؕɠy ?̜-Wʠ!5^Eݐd a{e= 4 YSU\{]m0;kh]8: ~؝߻. 0k3Ŗ=.-[7=Jev!|j<.gnĴkUSl Dՙ-&c9g`ưeV⽈4q8mm4hjEg#rh10}+{;Zwe!.cd6Qq˯lߺ5mȚv8m{ۗ1EἜn CO#}4~r9yif+Ǚ3-u8 vP?sQlQo,.֘SaW.4*i䅻۽.'ôXt z~n{ާ`?Yܚ]1e/$[X؟y{fcʒD(yU$LFW͗v?lgc,ߟ&]̏6p\Nև5;f QQ#&~cEɲ"A]}k&} |j Ys/}߶bpQј!xۂd+ JL?)4 }P A EvTXY\ Uux>TXG%Ua6ӄ<C|/{`_3 6Ce_oŃC`E_!~FK2d|aĤp,ݞaIJ=2hQe!nR;bB&BL Pbg>;F ܸ}˂_g6 O`B||ήŤTbc!^AHͷO pKJb$ESiW.@%ũ~ǡ~~y6pڠ֥eZQ^2dy ć8SҫqiRO`S:rJ9 h9K},Oߌ327G|pDݝ= ~3>A:Ow 9{j/nsX x'01aB$Rz+s;t[p~Ps 'Þ!ޚԎ+UM<[Mê{:4LȽ^гM?A]C2JHhd!A̜Jo! RbѮsNT䅧P9ax̑Gb#.Y9Uajz ~+Gjz[%G#n5~[\eF-TX3jJO-=w`^Sx O&mB F,葻k&ϼ 4[Pms}1<ۿN4T%t9ᏸK8iq1G!ޢ `F|^kFOGUѬ ħbM*͊r:30ܳUJ,~bI*%I[C< .R ds/ ?isLhy`7mnЇ6p x c<C5AqWFZ,ߧh;bl=9F{$ԨJ1 ,Iqz!x"""""omCI[CWH>TN-6eRYXBPRV\/̺~ɄJ1W 4+K(xZqNӈϭ+[qzSTJ*n4Bcjd`<%`*\lgr(Ƈ*%ZmoY9N(w>ӏ1ďh>ʿLDDDDn⭍Vw[&Tk6Ce%Dqi^!Cc1{5o=ìȪ6݄Ft$YZX}! ;<CڍFL}N*l=yquYgƗ+b0/AmF?8U@"#dYI }bt,ݞuO?7udDLTw<Ki DDDDDJ1y>_\4fɈ_czxh1?67 4偈ؕU}3{PZ'C< C<' ;ƢD[SZnQRP׆T'B D^!> q1PيIlTPB֥J3_Fئ1+Oq5{UXa'"^/prtLb፯a_|}4,ؔUIY}v^sXg6< C<w!0yx"""""OE≈<C<a'""""l D^!ȳ1yx"""""OE≈<C<a'""""l D^!ȳ1yx"""""OE≈<C<a'""""l D^!ȳ1yx"""""OE≈<C<a'""""l D^!ȳ1yx"""""OE≈<C<a'""""l δ3Dv7h09i26<0@e!njt#ԏ&- H,2:z#ݖ63Ruf C3F-TJ(=h[7֡BF,bbpoM%[<0 [))~C\Ch쟆Zw?e{C&s+ A"i"dF: '`yKbg'""QoGsE5VU!( *%a|,`/9+8k2kD/.{jx(6Fa d)v^4&3\1fӱt{i< ir}H$Y.j\bw\{l;vס_mP_ K5ɐM;۞@?=0\y~ Zo3402dS3rOm3b6ߗ^^!>r*&؝U}6NG#dCDґb e81Sk䨯mӟ6kB}X37QtNVK~!@DDm Z|%7Qch`+0r@ZiF-SJq mh0 ~+D~ Y ;ӄNn#׊jTS}?67 4偈ؕg6Ƶ| 4װ{?$C}P3V f|Z6>~q6%#n|_⡡0%<nCSA# ķbGt;qE2<>3v UA:0d(yx;>oCoo;G3Q8hޞADDD#!~ yeu/:KF~>P&HJwZ+XpSo><6Ob=g;4HǢ?@$r]$LVsflȬE#4ǣ_⻧nCj:z='?>5YӝS h!KFh0z.P9RUf~/ĉh6QYלQ_+uQIy(כ &苎 *AhwYDDDvuᾗY?%A *hK}ҎIhx#8AblmC[{N<-JǂS8iVMU#ߝ+_ ̗26\Q)*<Úxau[v eloeO,Ư>:ȺƢ J- Nt"^-tkpW`>;X+ ~K W w>}* ƻ/4)O)knVzs呚a%wYZɾAޘE-0)Y#l@{s@jkN䨯=AxCE슏|`0뒈C|7xЄ~ӵg 6 rۧv,e^dFk<%Z7QytoBuI9-uvfxPQ݄c0QЮǞm`Jog3AO1本ƭ6+h>3_~NW/!YIcQ"f-GfZnRv YYfD ߆/s6d= 4 YSU\{]m-k ;gF`WT \əFba2T!W9J/u`xmH:odP]t{*"b>zi{ ;ӫ̙r NRUNq`%$T=) ?1ъ_`sBԉj*-P[e)m0 HL}2TUa^UO)F5c՗?,¾:j^"`%e:vd2i~Ȗ#PҬ47\ZI4&mfTPB֥J3_Fئ| P펀=^:,yN۹'d9(6H 7kl<X h4xv/"?c6_x6!,<1y_@ .TCI:0 olLY<ϹĘrz}66O Y(iBM5 ]F!ix>G{)d.v߯D}dXӚ/rL͛=x:2TtB%4h0x5Jsm^N/P׀2,?VUgK0*O[ΚHMiQieiu.6M/篬G҅"H.@jܬ5x:rP' xۯ_þ( iX)H2d|aĤp,ݞ2EOw>Y| kdf,FRJ gׇbRT*wͧ=xLȿSཥWP *%lA5r{{<]Npv$C24b!evVĂ C|?{&XKT ]lD6$v#rs1`oBN@UM8DkY,u|{q1̓,d״ydfDDDD:k~Ôsȱ\> nv'd}R_Ф՛J(o&HR:)m(y^G(&.¬ո /m0ЮǞϰ#Oucr1 {rV)B闸 UM*s2%⽙f!`i̫@y63_ """b '~XuXI-?jNg_h(Yb|/bƱW(!:!(KWze>l-PW,ż*}h@-^B2aܲӈ "8? nbާ)CwZ_ 畘3|uP$V' M$""""`wf$B3\\]oCe%DqG!ȳ1{$o=ìȪ6݄Ft$Yߒ'!ȳ1{(݈YjĤ/W/4 DDDDD!ȋ0y6x"/ODDDD≼C<gc'" DDDDD!ȋ0y6x"/ODDDD≼C<gc'" DDDDD!ȋ0y6x"/ODDDD≼C<gc'" DDDDDm\ږv|{YY)JPyY)F6މɸ -혛VF4ݭ;w"""""o3B5.^D#i4މ͸ 3y =3n5iyq]F; xwDDDDDކ!ӀwNDDDDm<; xwDDDDDކ!ӀwNDDDDm<; xwDDDDDކ!ӀwI|d6'@)a0n(W8! Dt#Uo'*O,؄'`>vZӘ~lKD<; xwIz_Kc *zwB h[wkoAF&"cE0D4)e} D;w)@@H3@[;^^ۄ ! }' HL@o||r{ ܕ${ ,C6#s`) DWL ]dzA!5^Jw~`iZR1Wxw>;[b#+ 0qqe;D䄒ؿqb [њ\+7BZ_$[@WD⪹# B0~ܯp} C<pN!C| DV6se&_ּ*lC!!Z$POEb͏q,|⮢$C`w0ىWVc>S|o93u S62Z_ev4<܅B@kW D1sc'Bۍl~}C|@D#"x%ga; xwA}r5B_H$?_EM;9>BDՠC!=C,?jre6' I񸣕К!B'.|d?b IVYB@DCAd=BDC!,l:Vl=BL@L -F8 B@D@Elsx* v:;i2AIZ+T`vj9l?N@쎋(x?!«3X$Ĥu ^6x"gB[l_LZu6E0>o,z#WaPyuy>x Y G˝;wL(~EhV 1Mr2aaaV>ևz;VB0Iﺉb2dt_z'_!rq%)aؕ6~[A[A 9ODhj_LMMy'݈DbyM׀:UH܀S{P1}AD4~jGJ17; xwb{S.C6oɘ-Ĕ8- B,:kyHm MjO@.@Y /Yp &Y)|>?3 ?;jC;4G "[o~[A闘=?vupLD䈢f<1<BdY.{<}V ć8,Ls&^{vৣhԢ4[ 1q ǠOFC nIVŭ JPaޟ(ĂAԕV";_w1ByӉmi.p6[ ᔱވ kz<14 1b$D/@sHo ;6.6g6~Ʌ9yO*,D! &B\* 0_^w c64W p-6뷵&4dm6?Z" ``-^]OYiXzżR_sW1_,jm:4H_d' KǷ_!&aش2L4OD!ޮ<,{o^UcQ a'ш<(E`q%b,L\\Vai#C[rN)ұӏ6eo4DlDhM2d OұiQ7 ֧V\, Ys/nt(m;-'rs`D~Xgc6)ucdz1m8 sb =<{pO )d;`bD!ndb!&$ va|rx۟˯O"# dnEOy&x`7#^ő:xX}ݒ; ᔱG]

wxqN)fmC;p?ODDDD4< ֒q@ۅ-ח(`|^ :odgڹ'K ̿O ?T؄gJL%5EssD$aEkm$fѢ{?#٧Bо <-],@Ps\֟(źVm× ̝p C<0[K-čfd5 Ԉ< mzC?3z/=VWﺟo~m:TO5Nk#PՀp|>fףMS!(Ϊ4U"""rW"r-x"Nޝ{WWqu "b'4i \ ȵ<; xw>"""rW"rqg "b'" DD4&= ,cЛ.SG\} "b'" DD4< 3SG\} "b'" DD4\ț0y 7a`L~sxPӉ7]]jOn(g,ED^Ձ! C<aO'J@;p= D4:p37a'"e47"+ 1'v+Ng5vX7g[i|9/8X7]zӎ D4&fѨoH:ЬL1/wBi !z=®WV;x"P. pyGyv444 knAnF}.t>aTkpnap~rY߅-kn0}Mw9Nj:]Ѩ.ك·xNGpYL< ӱr/Е-Fu+#ї8fI rz"h.:z$33I5S'$4==-4Q@L œeTN3dڲytxՁ/ז.1jpugX!;-K4mv4oСGDOqzLJꏂ񁘀)3?wGR!FѠ/G3.?^f;[CnW-ӿ#O[p ,'\3mWcӝX$xoB<OD! 0 0L.d2`0߰p؇x"" 8>uDZ.[t:444FXCCt:K<OD4^:p37q!h|ruf'"o2f!h|ruf'"o2f!h|ZqgCHZqgW"r-x1+ DDSR~˃HJ.Hvy:AD2f!h|қH.H3qw\ I>u\!e C<:@k1ijYa'"">W"r-x1+ DDDAD2f!h\ ȵYXXƬ0 C< ˘/_$"":DZ ,,,cVF:yx1+ DDDDD2f!hxYXXƬ0 C< ˘x""""agaaODDDD4< ,,,cV≈!e C<0ijYa'""""x1+ DDDDD2f!h|j66#1/+n[KƵW )/ vC< ˘x")!/z%%߉;1ijYa'" 3w"N ,,,cV≈'WjWquwbgaaOD4>:L37agaa/5Dhgd$790ODބ!e̊KB|k.v MX:OTֿ)WixoߢQoLP4JV:e)Vnnj̶feXZGK9xDZ j 8 00 "qz\273z /c #ƈoiӵ&~9v<*͠L(A,Zrl&F<9_񊢧,g?DkќNT4%L42Ȍ5~rsiR|?Zs,Zf,*pnި~ޡU^6}72X͗6kEF|(`bc9?}*X7CL db ]ozlR *7t5T#kWX-N|A_0\ f 'ޢ_!%סP5m3Y"UnײlZcEm-UV(UK'}\'O).g~\m:h~['Uʈ00ȱ='JS wkoLmPW'R)n rO4kLu^g淚7mb#>!cV_<+_ALKRϯƲ*Bm=:sڤL:Yl^SRY37Y6ݧ-[Ĉ00ȱޣZ>eRNt{d۫rPAEmn+~9/T̬p:.ggZp1+¢Hoأ.%B咮]X,Z# ]Femvɕno04_WڱD]JoדU _J>w_UΚ8EJUοf*naUEgKcRNn%:L7{Euk?RAvt*eDXΎxnKԤ>=DrHm~W3!F<9bnqt~EÍPwc#kxxN {Tg{L3%x"r3⫕t_W:_ 4#Xˆ'"9#04#Xˆ'"bp[Nsg&F<9#Fr߳>j~061ȱ0:UW*57uLOLRjn*+&F<9# #DODň"È'"bac10ȱ/..`̱= ň'"z#>0bc1.F<9#bc1.F<9#bc1.F<9#bc1.F<9#bc1.F<9#F'߫ԼT3rF5w[|~`#Sj^q4Om{@ODňi,錼`#Am`#ʈoRo$/9R(e@liF<ODee7ic|珇niIz6DM=]fKDX6F|=(N+Ze@YufRsKGuGE-Ed9w}o]x"r,#ޛDѱJK{S83Y.yCa5]Rs'cdwR} FO@k_z^EkҌELBTyZW4#ȌӂsUljpRcy>yTyx#>c6_ڬ= |F. iiuUfӓKt[K6d:֗MwBW^~>ˣR}WZZQQk~(UE־ ԢzPd;)%ޏ>Mүz*[F<9#>tC_C ZOQnCXOW=7Ϫ>k3;?օ_LӒt:p|^9`OXtP3ҹ|TkJP[m6&SΥhAGEm-*)ۡWԨ{o7h}V,L|oMG{iK$1 ?x"r,G| ;MN:WwUMn /iS|RsfU/?`}3nR뒟S܄qD,#3+¢Hoأ.%B咮]X,Z# ]Femvɕno04_WڱD]J]xG3cy8=13%J1E)'Wja]rZ5kqv |];:G2 Cx"r,gG|HӤ?}{XPϼάҴʾY'sJmd~R|M]}rZ0ȱ0:3=}@oDXxl߃zÈ'"bd{p3%x"r,GG|p1Æs  cdfԵ_[sU#3 sՇdIҡ~-J|^u=G&OSI`j@$lnF<ODxJ;}RPA|δo+ʬ *peQ_UvLqg<.͚10Ya?2d{p3%x"r,Nx3=kLJ *X}X&M+cf_u n@Rn* ~ ^SM|a5t\o爟Mg$T#cPjnW񁕚5=|}m^|?bA7;JL7m?>*>qGEݿ!i]uGE-Et?aDX?'PM&J?1Fw_⌌qRe4Ș뫵c4cqU]14{lM5FL_3*tW5j11z /k5*TU]:N4Fk?4E%MPKm{;Rmz[QwS1`(DXοOfȘ(%/W鞹2&^;3$Slcdf} 2h' *XwNﮋڞIDAT=ndeNԋߔt z9gO ?Qhb\\Vwj ZA*3tyx2+Y8cnv)<<*jЉ2VjazԥP$N+uUڦP>9>czYK Uڦ;+J/HVbKt:,ZN`dbcxuӫ5M[eҩJ̌u:R=lxg^ePؾdv.)+ __1Fe:ZPm}s%&u^CxM[ TВeL^;U(?:`%J1E)'ۭ<@ w?֪4}zwruNX?{gֆ ݬ{xjK+TYd z\BQXV%ZGQm}RE{Ix##1W}DF?U3L7o/۟1[)3ḍZUJ_f>}zO9^VvWWSuyj~]rw/o(~Bs@HEo62iOe=sk΁Y]reKg2s۵Hm;ˣR8(WKvGs_$U }rI.mQNuu~^9`bcY{g·cd]NN1FbqU^¢+Q/}p} 5>RQ}w>~\V] cd&/Ӷ=;p^hdb cd~J-x-]zK]ٽ:фfiμD͞9:4{S*. w~X|]K:F< νf%<⏮WAKNnлko3&;ZpZW$s=g^?E+߻W 6pz##ΈN=JlmG]wnޮh=gkwg~Km4gy5jKvŸ4}T͜\{Uqnf,wPgW^ԛUUm 6~PIk=[ʭ,UcҔOzlЁ’Z7u|Vf&}s6ݑ*.P-gPx"r,[#7ؾO7x"r,F<N7#Xˆ'"bd{p3%x"r,F<N7#Xˆ'"bp[;m>0ȱ0: ZO7x"r,F<NJMg2J)ODň"È'"bac10ȱ@dDXx 2x"r=⋋slv1ȱ9DXx"g{@ODň rDXx"g{@ODň rDXx"g{@ODň rDXx"g{@ODň rDXx"g{@ODň*5/UL\Q͝'#k= ň'"b蔚j}\;͓vbc1`t g{:#o= ň'"bd{Pb= ň'"bd{L3%x"r,+#JbPHPs}=F<9ߐMVڞ?s'ٴ5t/c`,acMwjg_;Gkm^CϗsfyTAK-QYɓٺmv1ȱlxoE&+-M%!Fdψ0L1ȱ~~uVǦ$/p8nEXz\O32Oo/*ܨ_v/ԧ>%`N8EkCKC/k}IjZt'tEg<*j)wEݮeVNJRZTqkPH-(_u9N+OpR2]t:,ZN`ac9>C7+J+:Ѝ6tz#{ÿ?S:+h#/h`OXtP3ҹ|TkJP[m6&SΥhAGEm-*)ۡWԨ{o7h}V,L|oMG{iK$1 ?x"r,G| ;MN:WwUMn /iS|RsfU/?`}3?4p1+¢Hoأ.%B咮]X,Z# ]Femvɕno04_WڱD]J0ȱ0:3=}@oDXxl߃zÈ'"r|+Uz'c<]O%փEKޖCJ2F$P:zB}|&J%|ܞ('*? 0d{p3%x"r,GG|M)c=iMti֌2ȘJPa-FORӌNT{yY&>^y:~}oтiz=sJn=suחߦ?>V}ܡܖ{F-47soEˆA1Fb։ЌܞF|PAm|$뇛B'#џ,?TC߸d-ã1Ԡ[1F?Yq?4E%MPKw;Rm`̭|7#ODsTFZBظSVcA?}Zr;72QIwH[22fVdV( ==n̬Ot!8{u?<8qJA.nR12QY=vK{1j~=5՞⌑[gcP -dd^ʀjs(E%}] `򨨵B'*TXJ>wPB͒:]"w篯[WUkBqe/)TMk( Y.Ol@k:VF<ODT[|FܤDIIC!|R[P/qR}%}7olTADP0U}w@ު{=XyU]w#^52f*k p`P12TgcP@-yXS*G%2u#P#Di?(dG(ZUZO]PN=N zPxB5u^m)آ}5~j6#>A/WH5>V˪_ h>m߻O[ h7 `dbc9:q?u^<_W5W*7p5}SzZ1 {Z UgW)}A=mYc;K㍌q~ioonS* ,t HEo62iO`a`ω}_ ;emvɕ.uMOX7mמ:S[#u ,ZKX\.%۩ѻ#~۱=k=v p_?? } m+ջvtpޠa0~asY =URn[L$isf ou>~U4ImYnѮ m<ƈ'"r9Z]o'M<}d=b ,~8*伞G|bެүjSJZ+_Uneۤ\}~ҭ.דxdx[23A+Wyuj9`bc9vpZmxwiK{_ōS #?ZTuӛR>.}M7#Xˆ'"bďb\&J%D_͟?VGP0Ȉ'1ȱ0:܌xc #;m}t?H zÈ'"b^{ևj>0ȱ0:UW*57uğOLRjn*+ߧF<9# #DODň"È'"bac10ȱ@dDXz0bc=slv1ȱD`#@lv1ȱD`#@lv1ȱD`#@lv1ȱD`#@lv1ȱD`#Uj^ܙn];-OG^m{@ODň)5/v'c= ň'"b4tFm{@ODňm{@OD5F|s(~%0ӌxc #kD<}lZ;c`,act}fO|F;Jx>ϱQQo-e>DzTgyTR$Osg= ň'"Dz1*Ok*fqqZaj7{cqf\3 Mcy>yTyx#>c6_ڬ= |F?,p31px~ ׆,\^BմN gyTRJTU]˲=*j֏ WYZTQ^/rWq}7>dvq'tY^WoTe+#È'"r|N/SicRPsIj|,tC_;μn|'(0 t'd,gk:ՙ z\BQXV%ZGNT_]R ˣ+yjԽZ >?y&&f`zF<9/.9MYK5z5vVu^WW5}77xUXBm{2åc_\ҵ KQQU}t$.{#^ڢJ;(WKTΙx#TNRMrȧkhflyX]Xzra.8 ~X3%J1E)'Wja]rZ5kqv |];:G2 Cx"r,GGVNtjr2ي[K%>> yKBjN^HR0a@Bh9ڞJݢ]Wwi w#|o*DwqWh/,w6l-F<9oԵo>$cԼ)2|:zQ9oe*G6@WaI-᛺XU+3")|]+Wyuj9`bc'0pp#`#1͈00ȱ0:ӌxc #1͈00ȱ0:3ܙnk.F<9#FԼTi|`#'3&'e&ɓvbc1.F<9#z#n&bIENDB`Plinth-0.8.1/doc/images/freedombox-danube.jpg000066400000000000000000001052341266051671100210720ustar00rootroot00000000000000JFIFHHCreated with GIMPC     C   1  1$v!((C@! @! B%@ B(@1 ƨh3AA"(`D@@!B(I` D @ @@@  xK0!EƂ:`D%8r%b@VPc1e @1lbbO\c8 WdKX^vo2%rC:=*6JA K VPcƟQb$g11nlL1D4r"zī#+O;mٷۜ{_0"f1i =|y|uby{W7LFY>8ޛ]62 IIX}(0̀ :0yaɸ:9:o?^{ޏ/HMJ;ߟq%X?M_7V'?L<jRPL s>K @0 @|޼in p CA\ʕ7{x6zW4˫곸{z͛{yZ~n>Ny Q L,$D=i͊  @qg'Aai4`„Kn=;ޮ[yzy}IP{mx88֋tBhP$n,!H ` с"g+QaqLbccf|}= R@t~zc>wԣäQƝ;"Kqx@2~1 `H Q* ̂ !L|>ם\}݊RW@!H;#st|O_ڳI+ ,2 l}e1H  ̂[׻Kl7;^p 0kf}|[hy4z `^ZLVcǼ'і%Ռ@||̬@Hiq^1 `8/_-OIڳrmU` $ZZ\dDXw=4^NGIJ +3;9wDnZY\ ;崸dD; d3kȟ*aaqZ0A`w뻃yϩGCjCJK56=;*qwJWXǍd s%> Yx@1 2$ 2_-oÁ8>/7Q %v0PЂ0'۟/ͤ>w錩\%; &EPIAR}^A@y"D! &ZdOxu}S4њRj%`)]9nQF:mh1V~v/&! " ,,~zy5x)~G P7:׿u6V?COcLKFo7tY5!T CϯV2EA! XT>ϕ9ht "TW,3+_W.볇cp ~vDr YX/a~v^|/C3jhKRb{1kD"dˌ%JW)^_Q~fS`rf GNQ%ORzGׯg烍y;19zchC:7̾ږ-fAm3uٔ}] ` "eI0COxul叝j9}4owO&g^X8ޛ >~iMOY{yy7Mc|ϣYqdٻ9[xlF"V?>\Q$H.r=c+kɶ񝘙D$>#_+@"EA0 \=#aͲok͝tե7ǮSK1y! Y+.T]՝}hTKcxzΖ@إu[@B S9`$0B"eрL:3B$ܻz Y-.\3<2  %>\SYYQH&DyfMI k{crKԽrS5sS<2ɌG1QYb" >e8@&2C2e0% "hW/Km%)$ u=XΩErd.Zfie8,y\9YY$DD`l"D@!2e`APƒ PEzLkq4 -GYW;JHiqrޙ+eae0EQ$T"VD! `0b$Ue]n:tX Ϣo;&JY-L)r,2K1ZHN|b"@1LbAc D*Mo񩪂#Yvz M"Ul2K8/K$2-r$-,@Ɩ Dŏ"c!d Lbn欤jbw:Ԣ2dɭA^+FQdOj+"" 2"0OPɌcLb$"2F^:( Mn}16ktLu2ir\dAdQ\ZXL dVD@!+<,"d1HizZ Ug]>nLXՑxu$2kq"dRռ2 2S 0G* Db"D@T|sc&LEڗ&2c]>7K=޳#Y&X, ռ2 .-,&H1D 8؁"d1(I^校ͅU"D%2l2K̃ .[˒d @xD(DDXLFyc{J,QPu$12DՙaizZBd$H%C>e+,, $JwuTPVpŝYD1 /[/[KˋKI$0+ I?j2D4]PP*B]Jv2DDKKKKմ/\ޗ-a"dՂ1B>W1IH{y;YDE.]*d%R$L a2l.KoK KI$H`H@H$ ##/wʒ2{k/%`IA&&2E yaqiqaa2dHD @  >Y5 w:J;-gr !&Y,,&La"d0b"!燑[{,i҄:;gaA()$Li%L̙aiaaaiqiiqiaqaqa2d`$|DY,;;og+dck!2DXLairZ$i5Hc @xĬD! Uw=o,p 5(DdL2d--,&Liaaa"C&Jȑ"0G=T1Jj$H"c&Liq2eiaaai2eɒ$2C$ $ DVq1 1&XXL2e K K &H!!%D$@`!1$Ld 2eɖ-,,,-&XX[ IH h+@OZ+ 0 @1c$L"D&XL2e,! xH b ` "e,&XZ2e I,,&L2D `YQ$JDD2C !$XLd I&Laaa2e&H `0- 0@!1PA#2`p-SUPr)9va.oBn"%y,9{8;ج9--ER<ϩ@˹V k^VŚ9WC9Ś>I&Ԣk?7r*V}LiOb[R@(హy9,vB/ 336G2Hi@ԄBp\%v?|fg9G,B)^ˋ'84f@Vkd+m(vQJqNFG=lmzC<'Sg&W"T2yo[3n{ )\sw`saY<̟lRES RN ɱrARw9cm%$gڎ-aP,N|JˉϴX "< { !8.)Ȥy8'e~>}K<)}G䣍~\ZGڍju-=morWʄ&LRDԢ,Srsܗ"p)Xe=IhQGzNwK2tLC" c>P)NU.g|xbԷ'@SOB0D}iS޷@_|;mt(RN ;#bg:%S 6WhEG IP3g(ɝ2L&elVkPyv i@BݚnpӥQYOwX V rp^roS# _,O&-*&?=J!X 'o i5V6WQO ''6# P(xثP|Q pPxAo~4ګ􂉊&~R~={HD'5zqʾF=Y0M>& gXj}(۳Z liI@M{V,o8dyM> rK">M4uO f'd2]x4*l^ڬO*]5ՉvŮMZ,|$]\D(<-*kIxͨc^hm~,'ZxI6.4xYrERY { (7w' .O ) 5|;=Xe^0Q =YT> %[x[>1e3 =B .r2HVԬpBKGflQNH:%^ծ&iU2 -eRIOqX~(LY U{lU.D\^zCQeEh)G;g/A0 >-I'z^B4"PWچ ,nZ3]ܼ Z n"&Y;uqL ْwߦ8C?> @&L1a񆧪/_ '5b'ŋud> IqItaG^lCd=M0@=pR0|a|ɲ(*mK`B ο%~bߎ)],jNO5(] dϞp*[zǙ̸yi@C6Q|̌^i/s-~9kp~>??k+6Ӹ+;,7Be ]r-7(⭍lZ,ȼפfʴ6Ӎ!y+k܋z/^#klS#_\uGȫleQ &ʸ|D^dNzccU};>1/Fl%Mh`IVa֖@CV+ټxjbrsё:DdFD^ר]<xb;Tq1785d/WLC^dNz/Eȹ+2l9PP?q 30b\LoZ9%㵨&&sӜ\(}t>&0P{jwh511115"JY%g!>K I8l*#;'TuUj}0q&A0&\D%mo0'>P S[PQ}ƙuP]P׎  4&[[[Ga(@9& QT٭2:eV5 4&КjQ+}ȱC/su3X{28|TxUu6[ Hc=_"V* H-  HhA7.#@PQүF*MaU &-u@ZZZ@ @ !9>$?ޔ0Ieq⥄mRAG]tZZ@ @ tsW*6,TM4@ A<xK|5140W@k4f @  HCeК"M}*RmF֩5QăFiiiiii{W@- @- ! M#}_cbJQ%zQBZhP AAucԎ\WӹԟqhXJ2٢e>6-x:@u:Ckk}O8(8tI囹]TMtA:mmmmmm{B>-uqU]5٥ ] ZZ@t@-  ]4ڴ~KR3SpZ@ @-- :iiz@tii! AqZZZZ@- ; H:~Ƽ:Z鮚@-tii_៤Pw(0`P @!1B?-+/Yk5CyC<D<,X.Ar>CY D`nA COfƒ{, !fF#B J8BDЮ,ؙdc!]Td(Of"0eQ18&5#$?9#I؄1fLc% 4%B= LkB=nI2=DRdcPmǫc$v'c#z2A%܆e}A=䰎c{#}4$mJd~ك^=SA "I#3e .S_1L~L86?'O8"oȖ:E1{Vkn)WQ8&J?c-3`lBr_q}B#'~UN⋁zJEzY&;jyFCQ|9(b*cK0`X5E02FP+E10B!ϫADA㵗>3 Q#x4H_8_IQE}iؾ _ _Dm_mY|[W+j|ھ [W+nmu|VJڲuïGT|/Gk_(0`P @!1B?Mp+Qh4 {cX(D8i)b#ٌhp%:Ic){}%61f%s,)b_f@QD#R1ȋ$F!.dY{cђ$!(9~ Y#"F4EddL1JM1 d?A1X," C&?+=OɏćiHƊ{OćfM}(#J&O" EF4CFO'$G!gHCRGK.̨HDR'-7D;*6Od=M_RujD1`ة:񩐘ډDp %DXŌ]%"Or2~]5VU%geTRv۱!h4  #C$HocIb:YvoddFfFQM&Nd7Ʃ dfFFfRSVY]xkS5cs5/ފ6Yj5__\!|\\{un%W^pKڮ {un\pKڮ {TW upʸSW }2D!"1AQ #@PRa02Bbq$CS`3rc4p?IWqGh.oZ?>|+F0j2Lb5%iw9ycASGSWMeOTsk. G7ݼx~2M"ăcjh.y'EXw/>^Mƃpv&LL bڳy;=/^*Mqcw{α ySGع1mˉcHث#u1qjʿ׷>Umэ,hǀcﶖ?ښY.{˼TX4r ;dӇcS 8|=s3;iUiS Ʈ4S/MpH;jɘhp;aH'ųh+}&ߟ[Ib!"!5eO,*<''=OΊ6HOGzbbқ$N6xLƃk1 :C2}У>eoLtm|"T194^MoWKKb'b[0m{#ΐ/~KifL9v4s%)4J'عx_Xytʌgh[VT*9`ȹ¾*qtiʚ<$=OFIid;Yd7=z2}݀\@aQkF<7al럝f,y!罇¤-p}B}50#+pKOgW,KrǮy>/i7,98Hrn)ą̹VQ\\ý.Qcّpʆb;ܛ d÷b>ts1h93 ў9338pZ Ƒ Оg6Օ<8KՆI6XoO6 E#5"ʨ3#w‘|^74z>4P9ov^)7xu\ؙ3Ma/ l5|4ƙ͹{RAr3aǩ%fz>OM44ҶnOnEÛI¢}aӼui$1,&Ǘav]/zу# =1f6I4tS%bWlCM dO*,tË!o+nx<= b.IOԦxe7SC E"8N)} ȿHأacl\Z%_1T|G];Gþxs]XXaCwv̹5M.Hos^moNtƮ6sTAG%'wY$^H)z H ̶A]<Pڣ1TAU~>y/4cc/~/ mvK +wkQV+H%dbQlVZXyLޑBZzEZ=Fhk|+F~K̬8x.vk|j:~jNgj$X(MESI;rn dS%4W0L\6Q,nyMыT{լKֈb))ο>XF\o.P;+*Yx>iqASNucL,eT:1(02Yw xVyqcVAsYl5ߕ@O&skl6+Ov"קgbc9Xد붣.S ջܨ*ek4"Ň4n흕GN[han. YB%1tD9]Md˹y4j'_xՠ^S+4ʰ(HIM4y 4V'X[LlPζxz]W/*^w=k$c97K fmO J|'ނDeEkTkDN槉WC{WQeWmvX6"J[(.ڰ̋QB,H EAh,.,EIٝd>e5yEUK֢[Me2ƒ[nAQB:t;FWmEF5A"Bǀئ EUm Sۉ9TnbO$Ѷā`!u5,j7 /C]XmH:) ׬E^Mv*ЂG%y~v4w'u6#iF)xU'KjTʹFӬie&㺮]hNOӲM(ƥ4UYc5coVEe5gZtTyF@QvjcAz)?Z-}Zh$jX5T{Suti5>* (6 āGirHBQ8.l4 ~[jc.oKd k z(]_v*k!чUxo,=ȝ۔ݵ(:)n>* &/ChGxt㳷$ö+>!os7wuX \tcUd<Ъ4?,H](>%ؠTn$Atqj =h͹?;yQK7A'( _c&>yػ9瀬ӞI{,KoZ7F"mS})㧘ѦxF<:~#O @9y8W߂DWxC,}+3qmZ 5?U) !1AQ0aq@?! R~+-b^eTw\0`Z_/Nqzo5.sԻ}KKz@_+*x?u@4f3% oR2Z R0sy \n/E|8/7/AS>Uc~y~臷?x/ tįyr?MƛuPT9io)`Tb%G'Q?hafcC.xNr^rWGsƺ>PjER<~CÇнɿ7g_~,̽ 8xy1eyc+5`Sgz^;%|]7._Hi^g}ڬy]X&Ѯx^}}Ὧ>9B}H@4Lfɱ<$aǡpuCw/C7~ }8ub`p29'ß?S ~4!jQ/6s9[K0xv35j:=9gSdԠ2^/ɝa\a*db~>? -*P*+_Ó&A X ,Щ^m7.Zr"xMɍUPqb9J n_'z6v-/|?Թ̭.^/֑y'uXsS80JbS@X%^].9ߧnju ꘽.^/. #f~y=Ρ"\kY\3+YZ7Y$r~h 9]; ? Vhp%?{n~_Mk0K~o/M畣߯D !u¹&vBO؁R6 31Q+&ˌqmD;!\%IfOYtOqjn=*6mbmrTrTEk]Uݗ]1`k8=N3#Xܻ{VA7W`JZ޵/фyipSu[63UsS۫ʗ0)8V^ 0 1Q3`j !p{\h HC6 STon`]1`qJ΍XY6vQfĬ9Œwz73W3.^y89G]˗FY=S‚KE*V XXֱbpG@7G8rL^({a4Qe_ jT Q S Q䛑mvRs>s sZxv(Q`oUBJ!.^n\s.0)`P\2;TBt>OwcD!}^ YGiqԭ5P6V˗Yv/ ܵVGp{=%ӉKL۵-|zb -'rJK}n_ 2,SByJO:+z\})J^Ϩf+?F t9+7ռamA!ӿ-q3z[G$} TNr Ji@'s%KiTi.\h@EY_P%WxܱdרTCsU*vkijdڷWj3MW (eo <hކw<$ sdڦIco;mxwЀ .TĈnCJpnl ʙX֋ܛ ƇB{81<-.\F%Ͱ|͈iۿ)3;%ַ>ς-%Q2 ~4ÁbG"Kw;: 1ȶze5MԬϰD>ͱ+eT->OUsSvg4q$8/'_V*TR\ߕK_?poE~W.^9ޟL(S +U4T/+F|nW6w5ODArÏAٯfBY2fdq@*.3_ kZWԠ߈0d7#G1_p%kwEve\ ?Ϗ [dJC ꛠ/[|??aXd[1Dӻ@\%A9!->;OYqphn9S7i,ۈ8  :i߁ba9v`pbM~jl֔3h. Ga@@5Gm`S^ d#7T1sg$Iu?pEŮHΎow. \a5,,YxbnG2udGÂ7OlJS^qݾ忮Hu9P \07uk MWF\vx *ܫJ h=5\C;+~W^~fnGo/A1I@nJahfЁ w[ƗC3`YDl# G3qh e-Ksx;_zݯ!kXCBKǮTcaZA+N}}@lx9@hlTf ؄J`ֻEX78c*f(sB6IrÈ'{?ˀ(%$م0`oFa]˗ Ȼ a pۃ.`@V_%N\w:P(!!P!=>pysU.o7ɜ?̀9× b,<+!$0 .X.ouwq`5Wsr0ߝp|@%@ `^S0 `=G'tT[Bӻ]OZe@؄/CEM @**y0`0 A!80e\r e^59]̻J]_0MP!̼%0 JR 2` d ebAVoZ \|+6%*'N'O!*TIPJ**!i2I&3WyӨz^q$6s8+%`2 Q!9  @+YRJl *VkUo*fh@Jd ` AA BJz=A2e\rr: R@AY   @BHfr˗.\Q0bD.\JAb @!#0 4 !`d00Bu9 7  2P P(E6MID4DA`$ZI $2SmZ@4$0! H4%X me4 $@$C`HH $ iIem$)$H$L6a6d,@@@LQh4 2RQe&d`,@A!H Bh`RM4eRi(0 h `` M6%6@DAJ  (H@MXM6H$%Pd$ A$$iYdRh @ H$$KhI)B%D@ @`I A-dX%"h4d%!I@d$l@Y|QoA)mI , iĄ{ . !I-(ZC`-̀Q$ $6M6M@@ $ 1-W2@$ $&iRHhA&IEsx$"A$A6Ml@,8\, K$LMI @%]n8n&$ 'X"G@PBAJm$H$ $ SG`AYdW Q AmM @%qqt ǀmE6H@I"A|tAIUR$@!J" @%rM HAʅAH?ݧ  I$5`$IBYlQ@I9m$C b A$$A y$ _h\ ~ A \!b7PS$$lKal\$50HA DƓs|XbzO(OђH@:k+wO)0R/$n\0h$I #+XYk}+  T 8!4;+A$ H&%KFd0ޅ/ :ֆ $(P3u]fiӅ1v I$I [# 84Lj_4>>&@@ HwDK9wۤDAI DchЩ `$ >IFE H$@i9)@TJ$d$I ]!UP$@A$-( bHSpAG dII*ܰ##P@e7  $@  f}oZcj@ $@ HI PtqL2i[?rAIL̇:PR"I)  H AK!0&Ӛjs(2i*A@ $$IB$'ixH2[Iր` A$A Buf$L6Zi6R@ HH$~pqǟpD LIiI H$t'z i %I$@A H$ LwMx锄$mz  H *d?9 Hm@$ c!8 ID$[m4,`,Ih|A 0ZLmP  [{~ksB$ $$H EEɟ    $ $10H @ K @$@ sà& @@"C Md@$m4K~D@ A$A @ md I @ A$@H$ @P$@ I$lA$$ hJTA H!imA$H$@E H AII$A H AvAI @$ -Kh$AI HI$A I AHHm H$HH$@  %I   $@$ A I$ $H$$ $IlH @  A$@$ HI$$ !10@APQ`aqp?)/g֗0pr]:ӽ9{KUZwO"q|~nAq3NK/Szw/JR p_Z!杋u=_dIBkBnaJR8u_W13Bx.)WGۍ8)Lvtvu䞌x_xYex8y\Q,\O(LY:(\Rh ӌ:9Jijh4y,K=Uu&Q5cf7(&Hf%#WeDtu/yV[&Ls1,F6xCR^ӌqB!=Xk9cƲ1hrx'}Y|8ۣHJ 1*蔱 "m1lC,?c8 ":?F;QQ-.g!d&1{! <)9 n"dh}h;79~җxb|Y%HbYQ!f/Qhα")|hxhKB?nbrlRBPKr'lzoJRC:a ^WrwæEp/8q&/GHB1xARU0.e7G!ɖgA0؜Q|9LB1 0,:gc`Ʊ2k(7k# $BENvF!b^D0ae٣Q̂#jBIQ?hMŦ<Г1lLbHCDf'B!bH@%>n'$BIbBh$9x}xXd%4 J#LbҔlI!BH|w$3 !룟k}%FL C9CI,RDQNƉ@|7ٝh\/xρ"XYE"ͭ{Nʪ1ZR W{9!<p /x%D\@Dx8[bSE&C;!cpT8$9,P՗)NRbGX2FؔK#Glm)vxRLl,Y5}"! EPnQJ\~!TX#EȿbP蘦Qx\уi =l]l!Ҕ{ :)K6%ɝ!~^'?H{X~/xqbIj~螡k?`Ʊ3'p'ې!NjOB''^h|M(! B$؊siNKآ4Cgm)ؿdK{7S1)ݥkm!C&21$};䷽6Q&瓓CxbMWbHc}&>2 ”lI~βm-_ O R.EMySpWS3!j13/76$]B)i'\\%/q_$/*"_ƣd"_ϣYJR/(!1AQaq 0?˨Pn] oe~|Pļri핖0 }EY_fJ`[l3L[DG3$sWGqpj,\#)L Bhe*TH]P&ON]ZGGs^شc/s#ilfS#MKŏ* =I|˿QB6x5 U*8||c**?-;y}+zۨ.)֠FVb4+w\xq(g,5Vۅ>e8?{_0U}2RvlW$}ȶZ"EnJ.13 }ʝ| .( PGpb&0RĻb T^/\LqtYOhe>`bk-E]JI1"cRVz6vj*W'5/ +(3mnK3G)HfX;U烙e7RւTL$eʬxzQhSW$[F|}N c4z>b 1=:-ĭyMJP^n!,Qck1E FEn5.Ek*U<-.PgGþUu7E[ak4A+^ "`~"rqV'_kqsGD@h}m Y.}r.O \3d')$7$J)m#r +Zq10lj-Jppo(-QAG 0ePlUL˸FlՎ5r_r%6 <Kc47 x[Rt &&\8#Mi!+f8U2-ES)n^F2J8c7iD 3r*+3.ȵU7(=K5=ƐĀc83mbc -~=G i7™tS p^P-r$pL6YNW8Â% bD8ĩ4 t7/Ԭʯnm4\[c`=LEw1 l]E 09iK^A* AAlJyZwdGqS"nXWq5h[udgP#q8 .WfEzx[ljGvr1qjڮW_<e[; M7~+y?dS K#IvK). KX|$X=JDJC Ƈ5YeDϨ>eF_⸮H|&e:85. Hq:Gz)(0dXZ Ժ,%3d`eRu.0% DOLR@`Q0u5dJ]%~O JػKd O>c&K} +6ٻVqeR%:L,`>^1 ruPm%W_ݼ;H`mwȪcPS1n5o"P/(303NxLXiƓs(Od-%WrKFau䧸$Z3.H{2мM.Ww27->5If"ȧFqݳF̿qf13k˸2U.%ĻPfX 0+SIܳZ F` (a">!yWܩRXs5,-ep. bf !XcdG b>[ƾǪ: |>ZFZ@@',/UMbZ ]G'njQQ6!e-˖5w.F\x8iv(9xF5.KdWp_Vkjx0pp>f'CUR7f`E|oĥŐazJO(7 !Ŋ]A4> ZRL6is/MJW w.\S%W%,b|1bZdQp/2:N.*sM-\5ʞqh7p A&l4 -ksR![7KE=OXzł&\ J:aqqH >YA]פf8a.F8Ne.=˪$ q.K`Mgm㑗3ܶ_.̲aq au|hEKvʸk d` U{0)˗C@\Ÿ9f,Qa1_EG\ă(fw]KzmLp@]m+: wy3]K3>{EfSKsXpU2%nc3bS a,A`rF\5S9mWKn].Լܾ |adG-5`|]6@5Vʣ U|Q׊߄Zqk1 [_;ħwc(&+QYEQab,i̺ipz5jiG_s)i:q@¥8⸗q0j5i'"a@\~P X2H!y^Ífn4\\UmE|\6%F_W0H`T(5`iU 虳FwrĻbL -$ij<eſ3=;H%ΊWmJqaSe@ -Qz44 K/ZDl5(R-ŊpP+ E&>5Ac^Tp7-)0 cPĻb*hcj\(1 ?~Y*&ҷaqv"v2컘2]08^c@o:yW:P2񨏕UTK)D:Dfԫʕ5+r]XJŠlTIqQ DRG[-[W*q39p%S,Pзtg?EUɡi2ٚbupNZ wZ.ڏ4>*JSf%j2\{í.?dϵ<į8 ))1QK:|߄H5.+&b]5{"p2Mn*B=,qu<&Ab!e? [# s.y|\p(L9u(&}HFDT ;)uµo1$ݶ1K ˷`l- 1Q\ ]XTqڼzll啾+^؋L`SW('ڌյ~C0l4kZPhm2w.qc7ŗnO6He{M7 䪥h5c8̮Ŏ4+]VGx"AGbبep-2Q%6;qx^,xP)\UɄTNZHvpۉה Y*(X?zP%Y 0 G&-% x?GN݈41*5 Tup-a7G~=u*n.Wc P|aNͰQne[[Mͨoq.TU52wG0f JvޏS@/8)+>Ph6HS?>1(wg-h D.=WpiWl|8|%k|<;w18 6UD[>a4]ϔ`bE#,B E 0j֥X<̝\Rp `ˊj˸DJܳᲉ@PKfSG%>Һ>c=Dʫ(tX:CDOaBa? ,.\nܥjET2د W0_,Z`x.,rnJ8u-{|\Qs/5HI>VnhYr?.lAA2ͮXJ{k[+3Pz\?qIG{Q/ f#V( nf75.+nP0[?1 sW>1N\F/3)/|#7*G:/=CQi[qS9?舤տzQ|EV hk? ځk>L>&~1H\zVO a9 ܳVnYy} =KqzJ`3ePi/ n_\qƟ,0,ZJ+퍽nhXMe"3kf.8z=FUL•.&fPTsV/\ 2mL~}OX" 9\ C3 K.7 Ep GQ9lSk&rDS~F4r0`PAyhl+FW\QW_`6)Q039(j! ,6u(Xfن_2 "R?L*k])Zp5g[Ͳ\n&Dhz^f]>1=_bT`tYem~ޠԈXݵ(,z*(p MV[2f CXQc1}O;=1XARJ"R y>ZIuTVDJ`-%))ᵘ oVG1jKBˡ.vEK{8QFWAȳUj/( Y4K̮앆 !Ļ KkR%%Ql5Vq[Ϩ2ʌbXb ժ\zH㩚 ΒQ8 ұ p<[-7ɩYRY5pl7ܦa51Jgq]R-L3K|!_??b$J4T K9w;&M` Kt+`QÉE`A=h:QbCh[:GGZ *Q&5bb&SS 08ܼc1ȯWqfb9*|@uۊP k?ek3Īk>?كqUEeuwFy>c̤Q>5A p[\|yߖy_]mԥۘFhM2%CMĬ8 ũ{-n*%1O 1j!u^V@֥MA+CP.T9Q?ZpX6Șfxu fvTTK>̤!+NCqp>f={{ Xc˹}@*-q6:r ?SfTSGp)j "!}#%*We'SpS*aDu7]' }3;{#%yW+-4;,uh{[3D)q\NS•U=M>&} [a=Rf%d+mbKs +b8, 7*1Ax_d?<"S^Gn.e"hE!ld?/6ok0h:pN`OUJr T7 !(e'c2L|4UEPD )^>&V B<3W{`,?PeP6e.*)Bڌ/u *^ZP;X2\g+K AlUp 1<bbRSXp=?Pl]MWqԴ.1-͝h-PV'_l6oEjRnRXzSH}TNOt}>ewȄ7/jTfl]u C1&%dij)(ŲX~eYR# N%S³*$b39?:S5w [zC 9aH1FA;K J/󹡮2 '$7]F JMgT>2tL>!\,:AoPX]|K|B+--- LIwc*2ʹ@0$V+Hn~1yZCҐU_PΣS@eXjΊLwP-i Υb-$ EB2]8&:aˋ?fZ # {.fq{V'0ij%OF+ 5-,wkGlp"P .Ydq[|2yRn~/e+JR0Z"&gpwK7|˜n>":b;ܯ.X GD+_8*z#xeiQ,kı#H|Q,7n{'gq3cP6K R 0S0G,!H2xPZ'lnB 8` m_~"֦eaI0&]A_p} l@De 1 R:!kȻR3(5- =G5Rl1.Uhl *g* |q擊AE1᫗ʞ DYv\*V;D;$+]jSbg.(]9ZeNU 9!@@\1%3)d!)))SĤ;"\7Lx FEf3HJ@OY{gSQìGAaV7N!D]cR  9cP1G5ܶ K'^^Zu//O%V5.=@.&D K:&iu0gjKz?%&q.ulq/q"1;D_ qKaH01QKBnQާs13k[*O)_*?tu`cp95qtqٚs44 Φ5&sIi ΐSyӏjjCST7}fsI:MYSY#h#NMPlinth-0.8.1/doc/images/icon-error.png000066400000000000000000000014641266051671100175670ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME - kIDAT8mOSasm%@+xij 6X\:8iL q1P$(Ji;&_M{Ua==1DUv \Be3?k.]vͭhRJiY|x23^(X5*FN><}j&1}QPȑ|8v728emZ:M W,JgZg&xccw6ǪG Df8޻w$_r<֍TD"̻w Ծ>Ԗu~ ڷEJJ.hϟ( %BaՑppq]Qpz<8;wu@ y%%}]pzXb1mc6 ;Rww(8vԅB*,e_)D V[Z޺e=gutǃ=<혹Ʒoȕt)冚a ,6\Uxqx4рԝ:iբ)+@[VJ$(~MOnޤP^\$k$oF4|~?%r^S'[AW*gX-kSH c:`C6"Orbizi~inU|^L= 1mv?x.ElBZVO$֧lvƆ(,nƭ"zvWiEay3MR׆IENDB`Plinth-0.8.1/doc/images/owncloud.png000066400000000000000000001442301266051671100173410ustar00rootroot00000000000000PNG  IHDR' IDATxyXS/g>{}>>$3)FePTTeZ`ٶ֡V*uBqe)I# $B4|V7Ykw $@d)^xF~?H?Dء$"""""m dQz-O"""""Oء$"""""m dQz-O"""""Oء$"""""m dQz-O"""""Oء$"""""m dQz-O"""""Oء$"""""m dQz-O"""""Oء$"""""m dQz-O"""""LCQ=Ww^8IC;m7U!]޹;ZcDDDDD홆xA\XT5R2/_DZnEЦjH^_A<4zgki~g=]_a4BuVȝ^SB`e=zebܮYmkWï *޹;ZcDDDDD홆x]C:^uU7Up ֆ[Yc3}v#bGnmuݢݳs3v4~?H3 h78^9j>f{j$1o<*l\>WQka[yGz^s$>t;?c^Kc= 8guoB;1o>@0FLu6n:Wt o7"yUӏ٦;a :3fL5C<o1yT5j1v{=v*G|1+K%"0}'bwV#ܡ! |[-¶ ds 7UC^K7zǒq k[f}?Xsڎ @G2m1 R)IMDDF'tETiODDJA3s`'3xT1<o qA$Cj0Ju9 {цakKZ9 YPzqaǤFc2jB8PY@vg'`lC6!+p7]~!6W7ݖ_<&NoKG#Gu2# 曽x>$Dd6>##]Qfs\5I[.sFg.P qAVs5]8No&vwDmuۢGmAT6h?:`T 3~3'[,7uϐ0zH!^1_f|]pDH)-]n`~i7)2N{:;c?f}~!>gF\ W7|$aM^EIUV. 7]DDGk}7Ы JxsllcBx@U .T}9cB"tu nc)/d ts-7UwT{CgH@֘&M)UWkN܌HR,NǬuҞY9"rj*Ah0q|,̓BS&bmΗB<}"a~v>Y ڗ@,XU­Ѡp|kE|WkS2p_pj&ԟI+2޻ @=GRգOPz`R"`_wNX` ^-cW :CsK1ODdV #j$ޜJ5vy{Kw:|7(G%/>p QA|Ip8AK{ˇoSZnV^(O [P}k_ח۹r[OΰWOOz jn>̞q@yP rVRær Ǭ\F1+ebc^W|RB̌qȒJ!GMe"'=c|qn8g\=q_=2ӳf'c{!I`Q|H e ns/]8/!ֆ' >Aþ\꠿M^w:~3K(lB{G=.ѿ_##Uݎ՟dhv5,5\ӜHqgNp!Z 8aP|b(Z`)ey"ޙ+s2P 슶We)Pm8ЂG<è$7O9לx4$ ɒSYw ~ hYI[99CxGv,CBm \f]9g͂{ c7ճ-8"?O}ߜ໪XA=2\KڹB/Bj}im(5<&4·)d?zK]z +_ ^kB7vT,FJ*ӨTKsY=*MK`gtB;H+~S4B;jxf.T*EZjkr~`/\HBQ#B*P} 8<^a/=! ># m@;ҤfW$K1oǰ (_`?c4j%=_Xy)* //O9'OG;??[oXyn_ yAxb"˜G-X!>>/) lcT?&VeMASQ-C;hhL/+&|r&"qh#־K; .q5{,PMoy]4VlP~C9:`8! 샑H} <26Ap \dyF` q=w<<X4}F/Qv>ȒcNd3ï # wv,=]" Dlj62⽕ [ RJg X_BB) aNئ>~1-Lш!t FrEn2;mo;(dMGήDbZbHS qA?|kEaqL ^H^^l_x!!k!񃇫;|F'!+3AlkE1fφg j mla;BVǘ(y~t>+A#?  `-y AJڡwPy ,r  9zO"]g_&SzIa%͸^a&l.;׽l_ڻi gV]>C &8&B:##"xjVc18O] +6"kceNGH{' RH%}0%[ 4Qn=wBfmGKS Ϟv"N2wg?0)] i6s~}s|~;@ P)~j6<hsIci#@h/g=BMZ&^ :x5nT;/#Kw)ooIYi( LlC0v=1h$~6Տ %g6B41"0Yc;<i_l%HɝHW/ܼDpByJQ${[_c~hDJH5x&dd`om'"kq $ | /W#h]7?>ߛcyŧ ɛ.9[-|9:AwRT"yAz56*G ໡ iM<'3d8?;.Z3uMkN}_Mլ=g6u=IJcfðݦnHׅ+C/tᷥF,3`Ϫn 3bwSW7OQ PڂGߔ?#ī=? ۀ/D==0sݗG:kyx=?L˜@{Y"rxX._υ4|҂#I.5yP_۱(M{xGЮ}{R]zOᅪ(wNo동A[ >gIcPϿm| [r'wo7@qQ>4,6=Ő3ED#.\8um8!99)m?|wyֻa=338iby+-BR=H$CCDWsϻ8$out V{6ߴv!^y_N.eAs2BxMBgx׺P W/ X ]r/}|]ޫ}TwC߇JXD]-4#Pit6ޘ9/tTk1g;H !w4M#Cl)S!X?_ a׃ ??'_^Fퟔ{Tz޿O`w_?[-u Xӫ<[9MG 5wkfw߇_!/s=؏x'մ֞7k1e٧hxtNo&j]D:iH=C|v/ q!&QWhjoYmY Nv AT?5F5&EFBG2RFh''h@C&ffbJ3a}.!#EסhYYYzf!Fu: ׹PckR qq~6^=9wyo!lm3:YY Ay׫'=6B࿺{$sYϑxnB|#}Z _AppW?H =#zgn^8;4_ ]bᱦ{}%֖+?  އKB*\& *Vrݯ@+᳾s}x׮xܢC*BNW2!$q^1x:tsZuN|.]矻U?+B=6,!sÛ 7k$@h MKRN z|(L1[4??GN\]?yru;!={>B@mk0vc䎰Q`?F1C"W:SGp8!v=-fODŽ(?>DӉRX8s/Ř)"hB{oM=e$ gU׷[\fMG.@bzj~VpHC^Ly ^(L~lgaㅄLL 󁻋|5Ew kH<ЂCpP` r7Dᑰu\5!Mp񇭇7Յ`?SH_l} E1vYFvYYz '6>o$9{*?X[poptWIYRHYH'"dZ h:+ј:F` d"xŪF糐h+:PB|c61q HLUuUy$tD`b6U_pKbisS|8c$|J?]{1&|`<Ÿ ENy?j`ui rEjĘ̈́ AXz&B:Z|eM?EQ,=l …sF㵳MxUWOc։ՈW-c! >k9qϋٸcԤ9ʓB pﺘyRHWݤ0gQ>\dΙpߐAN/`qcb3jVnRi:b&5B;k UWAp J;go?e7 ~+kZqa< ]{ R4N yGn٫"I7뙟cyo[[in޶&~#ӷye9\WW}2ȋ)Gӽ݇ x. p>]#QwȻh}xQuuW~k!^ X IDAT@h牰Re/@;[n:G_DNEϟ>?[~v&f!Vm)4L Bg,4wBi?L/a4Q\gHMRAtD5πHD4r h,6pKb㝀̌Y % /l&Y  c9y!f\>Vwy7u_{EkṮnKJx*+GޕӺ˪ *rLZg${wXa횀8X{jxg"gv,agc 'Q`12'NOɟ!8e8Űu8/ct_B=߫ӻa=8vN+Ჲ*ඪ;ЯrpW۪rex_ +a=XD3MS{w>}o Bg!#'_u$k:jcdyl2>Ђb<qR"lSy}~=8¼rRzQzG0}+\W+w]yw^Up|^+{Ia$"""""m= Xwa~]8(Wοv+E!sRj^\wa~Hء$"""""mF #046/{S- ;!t۪֓iv=X/,l{t;ZcDDDDD(!Y1v4~?HCU0/ϧ jO9>hŝzlyI_UbL:Z 2tC<ycWup#蔣f2߾%{g]\B!WX jܺI;]_'7~?Yc'""""2o 8xP'ŭv{9 ntQs zQ:]!9[ndF[Z`K)δS/[Gd≈C|VXu75XoTz\U#m嘶.A`'""""2o e^r[o-s 8vVoA|K |qw+ωO<݂}>h≈C>8{2B Jr jzNɧ1qS1B7f C<yc׫I/*G!ȼ1 A|玾Y1>"/D"%Ep~n}h:Ty"Q*N5͒ D#C5G0M¼gQǼ,)ZҲ!ha7cbyvPÜX.C~f*&hgP/1?K ,DDDD`'A͔VGkqXyeU=6j!9OK ,DDDD`'A͑߿]!5Zd: sb6Zϻ[XRe!"""C<o:㧼U6CyUkIBDDDxC|{.ZIc u;9 KBMsu81Gp|B: `.Ƒi&ݻe.;kay0J HOIb&Ų_^Z=  ε2TN [oht7lNBd+M$ F≈h`'A,6[Qvd bb{4^<| Ptc#^\^z=_d7Nj`Aaqh/8 4݆υ"_dhnl@CC#Zz{y}j NV |>f1O4XfDk;Xa6,b*ѩz~w0Q_;P;^;4+u~fЏsV@ @\Bݬ:]=ԏQtE4 _ Cotm(ݝ/Qb深gjf[≈Ȳ1 e'Pj7zg-Ou XuCۮcKe8|L~DWy{_=V@A"yȼ rFoՇ̷Dz .ܧvtL/cHv˓g'"""O4X^=S\. Z[)vM{SUp';k9eur_}ؽ %b|׬=B|e6y'HBB3pF9gx>7Cюq6u< {2O4X\׺RT U:43ԪFu[~xIuR?GBDD9,|n+?E=Ư_uyxynV@B6m+6ܮY8^/5Oeq0Qݎ5}C꣩3ec'A,.?E8ǕUK#NVC _v]^  (2WH]Kp:O-~XRu>RzM:Gk}ٖQ_0O4 cԧC-?`~sGw≈1 ⛿Af׹8VZuqUy(~Bހ/}U[4)dT(/h[_Aƪ|{C[Qu.^nÀ>joZTt"""" d!/\, w8ڈ+I u0S|e85f;-jD:c!7wF|HrYχ:z ovB@Gw|!eovdy60_؎-ˆC̖Kj8^Mi}W<" a/t?~l7UM7w*+PV/J[ 8*ە]Ŧhcq8Y9ݨWq^}7E#^{6SXYkm!P"o7/wOxL{_υ톥O ӰB`B!GO~takS6lOQW_(g^g;v't?6ݷ,Y}̃X\7v"zLi7]P@V)2 gQ'1]g-άz,|V-gTMʵsGٛn+g}5 KW@~壘_+/5=W(?S&n_ݷ35O[6hC;|Z}٣!vHv2e-?= """4 DfVxSZߕ:q®-W CFHEA9Vty)d5a4^yo97=2>\!^v@7raMa ^K 1J58un<kCqEQv1&/ݍ_}]+(Ab'2›E7KcqZu+PjpT}9@mN<ޣ bXCB6N~S +>Aޛ~TVVynryR;d81~=❟DDDD! oJ{O?_܉xBcҰ0.wNRW8hJථajm%t#r>5e^,؇oZ7okO۫ )c$HaX0.7 lG'pq2*arf Ȝ1SZMi}'""""ì)𦴾4 DfVxSZ߉Fx"3`J+)DDDDD# C<0ޔw""""! oJ;HOdLi7haW+*÷"!,)C)x""""aWrWu-9D`J+)DDDDD# Coa Stuė7WmbLi7ha<^w6& hSWգM_>+\Ìp7""RO+) K#t >tIƧ@Uo‡G#=@]g21vU_\Geڣc=@YoA܀Ϳʧ?+G %WݽzJ'荋GM5tW|H|hHe`8\ 6XbkJ4x܈N#+e+nG'¼CmM=ӂ^Xx{pE8~rC ٮ ` `'2›.o®H s0oL7Y Cgܵ+8/mg^ 6Ekq!>3J$aW͆}mNDt$NX;KТg_RW>Ay{+vZ3?ívVx"iUnڛP#W@!1&5 ks)ި²co՗ZѦP@цSK1/!哪Sz>ۣc^ː%Hx޼R}SH L® ): c!Pm}]~h %=:XNm꽯iǧu, ۨ>U=]? D0SZMi}W(xhxN|;dx? n[K#nMjpt7Y5BIqJ%+֙ZPȪq<+٥2]:Mۆ0DCJ_҂ KPVrJSp U?Nُ{ ^ZH/opAEidCz>oYa8Rח)]˫m:FoX\) o@73x`0!^6ϴ~d:8:&'b߽g^ 6mDD~hQ}A6黯Y.Cù+´7(jD/]cːSdD)SQ- *u*ԠB@rL.Т[UEkEL 1H-ڕvvJ\E̻wjᭋIOZ\_{zN7n} cbו&ܬkEɵJ,V=!S̃":,Cnh>Y}1d߯o=ӵk;nmˀg?"1L$%Qy}m!,y`'2›P(M6sim-ϑ vu):Pǽ! E_46]ն36e/wv;:5w x#d yn7ˠP|M)b֮ATNIo[/`,I59ν0!uDz1(ܽ7 &b9.wqTzGK^fy[+k,Gλ(iWSndw]ÕX2ޓ; gZ ]t4mp |܌]WE5Zj^IrR3!vwdZ7߽ ~1r{;v} G m=n?ֳ^vܰ뙾m`/y 8(jdr<"Sz g &lCc'2›P( 9PIcŅ;Z|]bG3RmO6з{ "!X|Us_4Qhhv0!I"@cVgߢ(}Q10DTP<)Ҳ*+Sfj$5Q9  ywtzz ^.ؙ{fv=JKxAض;:=k?U9s[\}?Zpܢ4=@5v᩶BM?-=L[cTkh_d>GVL8xKN'Q/o)ӅP{ө"~,3Yv]?_ԃMjj/p{_6T}cAsZ=§Q>~{ϡ0_=}< { J#5 :(^/g@B|c3:  p:nLwv4.Mfm34zu|y #jm Sbhߥfݩn sW\}0yPf)_1sh~1gZfJVe[د~IA>$p[,~U+iu4=yMM+4i-Lݕ.=:OqOYc~5r>J׏_ӨsWukߗg'J3uhP_d_4(L-^S^{.Urr0hcvs:c:T*)Mx]MJ^+0̾)7 -ez㲳lM{ϷJ|V/Ԭwd hz|]-_kQ 6}y>뷎F}s^=~Y{Im|R66n++5+XO|lto۵2sns~gz{FR[Kv+cN}pY }K֡?|}B!\N{N]_?Yahjе7d_9˴}v^۩_Jny{&- 0J2;ly_,ifV]e~ )}kqtCg= >>[[^؏fkUI21Ὦ$濯{,[|B;G,C ~8/G CsW]S5N6vJy缶. 1䲝m ?tp9T I{_1379iznbd}xLGQуUГbec[2{F2$U~(5˱gp,TCF@Dهަkڹ"]3F0F+!5M+ve+2Rzf| #N)sҞ_v-{EBs딞+0/mn`D=YX[X.ıp8OvnMa<݃zս|O vُ:-p,s9Ï%I?N6ozk}ilmݪOUbwme5m=InOE<%דu,1:7{AY&1*IsVЍwnuA|gyk]ګ~׏yulJ ~~fu p0L|B|ECӶ yBNRoLCx3WK}ۋ@/F! iť(u3cd:us=b^|/ܭ 0 ""^Bk+xCƨ zvU>mzع MMIJ5g|:ϞG C#Շ'UPgВs5kbF'ѻ~5}իcjU kahģ3l_Z9~B-5{B #NɳiJ־OkJZlX؉ZyAl51>{^{2?܄G϶g]mxlsB?MWj!cx=lZ!WJ_\_Ҳq|zWe-zHVv2kp(_yEPUOgN{Wzk ޡέوiHB|t\-4[)%ȗ~߮uSZϷȒ\kiokV'OkTd)彋51erZM޻:Qťm,ɼ&{8u '04ik+ޗ4ꉏ1?wըXg>+mWoj >*O KtbߚI&.?2]n&{PmtYʶVq,[%2ܦI0R(Us%1zˢ/u!P]>Yʒ=Vmom{g6S OӉqV?6JI^-0\ w܋@pl ~j*=䘑2l)^O[l͖EIixn`;s>~F""Fx(2C2TΪ7YKy4-eU[깼=[˓VfܦLSrL-;43v^3 hM63M[Jz%[ؔՁ(̍I'~='5}Ww`!۬y*ye^ي0o lkV'he|d~_I{Ci:_9ML/mm!Pѯ6Si]|ծC9j Εpǽxzw/YAq:VٚhLeRI}v^ XC_W 諽qn 3!E>!B}4+g;Meݫx9LS,ӣ+{fAً3tE^Ӕ={z`P?¨kͧz\N߳GkaTsyB?Xn >=d7}8535wdž{_e:=kplc(}6V{g\WWAs^s?DmjՇ Z-M-:(A3 1]cR/ms^׺SqWu@E !E>t!~E+k}49k55=] kVGU+iu4=y|Ӡ2xMy޻TZ{Oڔy:ZwYwQ~AYRd-hnR&QP!k!pzFú>WL?cpLicClCui͔-4e&ņQPgCaQ{Oۯje mi9;VMKi\ w܋pއBؔ"In¤9]ݣZ5V5r>J׏_Өs3"`{ׅqn !E>t!tg0_9*οS|Gͭ?|#'^&kv}:pUn)Ӵ+wmӉ,'nN |xkVuR4i;b7e:˴}v^۩_Jny{&-R/к{h[5o4֦%Ɉ~XnJjXMOn/ԗPT@C|_eIӵ6ʯ(eO[~u控6RMޮRcpY8mg!u+oT}fNXt1mU7ش0ιj;{-?ve/ojiT4ة'F2FP5oOZ2RI/lWtNZG!mpA;s"";8t`˩3uG Ӈ/ě2*^9Q# 1JH(>O__헴,/u@1yqFQK34Ɛ1&YϮ DjhhAkjf}a3TBh׷LF բˮ0v*!1%wwꅍz\|Rwmvs2)u]Uu szJ^:{`[mnw|#[B|d`s5h|=ֿT~ٽN/n)ӉW@bӡ#zH}a3TB<""""bdKAxGN*q}Q7íS5?!ӝMנ:Gs߳. Yk JB<""""bdK?'ާrPOo6h\e1ݯ׼L_תv)knzq|7ÙJB<""""bdKW?yzrkW^[Vnճj5}+(u}U{3ngo^Rmf@NHGDDDDl Ϝ^7udfRA`r>Ne+*Q4k IDAT:5Mר@q#[B|/y_ih{~NM/Җ^vF'OY75i}]w7HB<{Uޯu*kJGDDDDl Q$!1%#FxDDDDȖE#[B_Ѯw49ΐaRtޗ&ږj+DDD{%!1|BԡCt:j TYUw3JY,ݭ{/xoe6J 6٫*,_,QX,AlK"""⽔E>!ӝ;w:׭fSKK._tyo} BC*Vu,;1v.XDD[!"""[ Q<Ō ~oT|>pBgВs5kbF'ѻgӫK[pzFF<:Siu`K1*IޣVo:xu`so5AϮTg|2^G q)J[}Xe6LE_2MZgH;Z)[i4~BmLΜzkږ>W5{B #NɳiJ##""bIG"544k=I)y떚{eZ(}D{GkN桶0sۚDN24qAew4qܛm;#VzoF?*{`꽫U\&,RpJKPkmҮuSZϷȒ\ki.mOQǔ?3RF"m6e6ի z-6ڲ()MyCggV\ީ;eVL9'ia!c!KBZO~Y7 Tn4}~eZ(=6Yk s?֔ꊽ{ܖ;[j3ON͙r[~M%O®4-erZM96(5.]ꝲ|=[mӒUWW*s/6ka<k^nACNNѪV:ɚF1$#F[zڷoԤVe]1 JLNQQ v544P^fؗӧtK_dqHkgj9Ǧ?t}J4ZnBBϲ*5W&'hϷt4}M(P~t]xJ0y]O>Xv_&T}תqu7%!1|Bi:{.^]vMŝڵkvΟ?_5xy}޻ݚ&OJ1k8z[;є,ڠ)tuwT7 P7ULם9o䕺j7e6eHҤ[0ivWt<=VkgUCmiWG)qzQՁy5bUyzć['s1:S5SR*ۿ'ޔGKGDDE>!)++K{ݻw^]t)s*~ղZu[uW2c =)SiArcٜe>;VI/%U^=Ue9P7]9t"K k:1INSzb!ct\/k޺@u7jV.>2ž>NSʡ&5X\[::vļ{"!1%CN @|m-,_ t睦|nΜ-Ӝ\%n,jU$7):cxͣkfؖ5ZUƯդJ%={--zwsm֣S];k|wa,!1%?M~O)cG 4;ЮդҡWyz: ^](ִouڡz*OYo_kEn_meӺ JJcѬo{MSJʸ]?qS!EKGDDDDl ƪZ}-ufm+kgUG=T]z;P}t]x;VWO+(4o.yMiKM2F˷=}&kWl)@.>v]j2MZEC rigZV*BM;~ JxE#R{q:,MxEo6y V~hk=B)fQ B_Yt_&嚶L'Z<zӧuxH) ~ZjmOrz ~f5;ZPVx ŭqrBCu9[sYVe:"""bJ~ v/Yǻ9k5~Uzj{e7զ?/gwq64+ͪ˪o:PG%UY}.rr緕>{sTWͷtE?o/kaS7^QܚCP1|\MW\@DDDT ewٴzk^Ь6j˞B%n rR'+|=K=w[@"~[w*lԶv9LӫӅJ\n=жlZuγr~=%:wˮ)us^a #Ϣ>.G#s1R%;!^ܖzrwV4 *<%~r] jmwuNr=InuvTi\=~ʦ>ŧ*-,_syt9:}+EG߫ӅJ\_]?~"-Ǽw~C)ߘYOUWo(e]U=;%p8p z6m"_ x6|q8HGDDDxH[++5gS?Z'KCB< 񈈈Eq8HGDDDx(AB<"""%#Fx.!1$p8p Q$!xDDDāKG" 8$#"""\BSYz~ P2km=:9hs;^y MD_W{ 4O8Z ,+кIڂ$wӫEzK:-}j_k\\U99:yTp\/~zrwY_>g(\%n,K'dqë%J ;iiѻۿ,o( A7}V}SB|?C$_=%\s˔>_/7%zXrLIj_>N^UδCK6Q A2j =›J 7u.gk%Z|!ǪW2( }!AJoxŦCG ؑ&5L.mլcʩs(7\Zt=W)[Ԯ&jyJѻ|MSw}I-М6;pC+me z^_^߇(4娮3U%?]>iWjVNxЏ 4oY} z~o+Nw;8OqWw6ˮM*\-mWstضjR8e $'#"""\B.>^-~nS2kt>ϣjnv{mhn6Y/UWVj֦y w:Ե^OcʶQ}_٨[s5U6 !7ۮ,xq{r8d{C{Ӯ?RZE~mݗR%~a8;:ZU7YM'g'PϥmK?Pj~ʊF]p 'o -p_=!qu6k2iZ8kSf( {ohʦ@2n>QZQin !>X~hY_׺rO%AB|MSfk^?>z{{MK׬FU:zCt7e^m+?w{Sw%1W?_wpNݤ濼SsPh]}jMېz\luYV!~֮w7/W[@%ć .ojr2.6l/Ҧ=UzyUzR#W:ZˮItxupf}uK~dj뎶3T6}sD;Z]X.替~\vIg,׎~UvMeQVugϿO%ZPOTfß]-񈈈RB^'>.Vm+[N7ZuTw ^LʳK43vUЍw{=}+O_뜺]ۢC?i-j>UjѦ %: |Ӕ{@B| fo߲Z:cnVY;Wǥ훮kUuNܪWFgwP?Mr[o Or醶S>:79_uWyzIIݑ띣-׺ nHMvm9XxDDD&!^Nx-齺u͢9r5~K޿ҤC JݦL[Wh޶<%n(3+uv^vS{]--2XmUVuWVZQS+E}t3:}HC,a=n B<"""%QSω^.oVuۚECͦϥ#ohω%C[.!^/=*ӫ5jvUMu>2Oػ%?\J  á-񈈈j~Y7r2m4yk<ר0ϣ 'zAB< 񈈈Eq8HGDDDx(AB<"""%#F[~ƭP;n]F5"""bJG"?eŭ<7nen2"""bJG"IVe)nez䇹(neZ˷\@DDDT QMTAUS7]y|?K)!1|C<""""b4IG" 񈈈-!1$#""""Fx(HB<""""bdKG" 񈈈-!1$#""""Fx(HB<""""bdKG" 񈈈-!1$#""""Fx(HB<""""bdKG" 񈈈-!1$#""""Fx(ȡrCR}}#ġVU6M>o1|lZ^NG:jhhn@DDDD^v{9!1B/IVUWWaX__/:/ 2s,^?͠B<">3 *s,^?͠B={y D6` Dx!"B<@@! B Dx!"B<@@! B Dx! :_ZW]]"ceZދs"AK jiifnG{fSKK_ݫs"Ax**!-ǃX-y@2___/!+'4zp8T__}@v Y'ۭ{u@2x< F#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DSsK IDATB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<#DB<^nݩ_G40dOҌ_nh9 #]g`;"nQ(!@oc>](0G+pùnQ(!g1mA}l>ړZ^ئ3Fv_uAy8- %!~0m}G:_ 8ϖM3{g}[.9(Ex &TU׳# Lm :`R C1EAy8- %0 ^5djkO+9~ ЈdYV [C϶pOR~sW>J9˯9L۴TX[e9IϞ1!#&^OuG (-ˎ2 Cc^=F_mrjǫOk4<]/o}0 d9{ԐO4S FNMʝ٪o2o$yR.ӔiUsVOSJ\ftYg_a5ٻܹڲ5hka0FٯJ0Mz0o c^)0\ z,xFt-  0B=?-D.? NL\ uhyj[=n)gI/TۅŊ iGv~hu!ÈӒ !אto:U՜%+vSfk>-9@oUNu*+$ AB< P莧t^փ\}4a$hE}^KaeOha(,Yq<%jf~y{/i[g6Ɛa<} h `9S62Mg]}\ !~I}!ÈҎZY8Ð1s,nSiץƶZRj=vvۥ{.!cҿU0e^Nk iUq ~gȝO HC1O} j=[>ÐaѢ3n"=B6`xx%-7dsNmo>=e2W[{ RɆ cve-:#2 C5@\gȝMBylC񤾹=6@ @9!I l \O& 0B^1duyOjaȈyAڃQ͏1d\|jJ CuY6Ӧ o0b~^>GL .Ym=o^}n>^^@|j<};6Y_Oӏm! 0Bi=m2蒽_tkc]tƾ-_qÐv}Oy> 04nů6o2}Z*wmGU;zC6`xxWcbmemخ]*l uY:8 cvXFowv_nF0p&|zO5ڞ>ھ?6+tKekR{￞i0Ѣגf۽a!!W1}KG.9od=#UaH}Es2&|'ِaէceqz|KuO2_6Hެu(JY6{bn)wm`=1F/:5=Fwhgvstzwfta$!Y7Vi1mO{簊mHo,ҡxFiʴe띄ǾrV͝mf|sG-Љ $ěGFzׇߞSQM.GrF<wr(w@mCC^ٟklgoռQm'.U1rid?$ R7dtQq#D-;Z9٢uKM׈2=oMӔޙW@&/sz9wCFLHUˆK_ݹ=Yw~ !~8Haic!]4[Ǵ14u:\ivbgnK}񆡙_w 7Ax4et-3Cӄ=JcS_t5p,wmV-3Y2XMD#WK_q^}+?_ZyCیTB< =%!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$!1B$@TxOz'M (%LO}jc=Guz0wpI Z3mlWUXpY'XJY&i,=U#!4;Uq%.F0]B< ۻ۷&EmԂB0! HmjKwtEiZz{b7ڢDA±A!3C IP[B{.$֬ɗL&2j3dF[6:d[}loj)GH}BWKN鱷+]|eU`>wCV`zCg^ 5p%{}.4qՂ;;玢 bi }[Dvv @.( AߋOy @8 Za9ఝ'zdtCVUn+**qƴJXϮZ)}gǼ/>_WBX≈(J܍RݜzZdUVCc8̅(v8%C*!i8kߎ}O\+QJ0s YRGPqc+|C|;e9+y]0jxv$Q$Tu 6s:toWŴr4jhBUe]PODDDDD/w\¡[ynaT.Y`=Ȑ` f_KDa똯|W`ho3s5 .&̂Osιy>AFB!fm*,ī"Uĺ{P=A I-a*Us:e,Nq[ðIA.WUHIAX]ag'""""DWWe3ͫYYii}[U1ymE,bcb~6xNxv5cއP ?KudY!+ _fn. &Pp#0wmfv|օA]^qr,:idc؁[?64[;%ڊT RRu><ແBQ\3{и/W}LKަTT?)/rܽ␘yYODDDDDQVU(A4، aKE3]h?w52n|! 7ī n4|PC<>Ä[0$kB [+yMn{xewbcB$@ۃsw_q_%`c]a5›k+Lf |x/Uyq dl,m@'3\BI!4iCݕ w5U}sf}$G{X≈(JUz19#brP`*\ [ ݦ;0dz?$I@=y8]iJ@h`< K r2F9qMԦ'x+8&/B^NODDDDD/+]|I`>wC|Eۏgdj^73Ph+Ntl8lI5ݐչqv7+bn+**qƴJXmcIX]9+!_9п^}wq \!1,-9W &3pE!5V-G!i1o}E~w"ODDDDD/+cznąKq^ŽD=JNfN3vC&_ }~2'Ǒ-(3H|*TEun \^/[.gd'""""$K3D4=0![Q-%BA/.~"\q3p~3_We+*S5HI!w cG}p_CL^]liitvXJj:e:J `::\Bl7)'dD:9pus Ep'Զ`%X!7*ǜm^-p΢6OLsExd}py/Y_h=Y≈%>pk%6ZEKzNf |{ў_9X/ b=wvZf0zBh+M޸i;Hao-%֓%^(+_33*6}K%Xed7Zy7%Xe] Mr| 'ODDDDD, BODDDDD, BODDDDD, BODDDDD, BODDDDD, BODDDDD, BODDDDD, BODDDDD]'QT/PQ=1?Nt| ml&=˿^+ ,DDDDD]%~aszC[cy5p]{ߜODDDDD,/:h9ϗQx"""""/$!Dl6>VobxŰgOhlF> ^qAUU(.;NW 4*OR/yu6 i8~4n7gx(ZCIAv=wځ/s^AQ;*TحͫBӦ8)KU᝼7q)R x&o"΀}5 _x_ؽ55_xp.4y>B⹏̅ 5Xڀމc 9~)ݾy/\H<-Gu_پфW`H&Gy_-X≈(K|B>Oŵ98昞.w〔C7>6uYiÔ62pK7/FMN Urt_FCc8̅(v8%C*!i8L;!G~23{ f:=Z~t]ąCDsYxC@urjmjS;-8~ʊ_xG7 ODDDDD_ ql>2M836w)2v&v\R@}%vV}<^ʣ6$3ȷO؄ s_&w=( Z `[XwĆ#Xt z$=0qE)q:̭CTCDs f!)9 L9#a'""""Qzrʥ,5IVI \@A |B:=5߁{> 1fAUz: 9Bo)1DW]|`@PdO0R3̯%u ^ZMZ>įsZ?!G4pkj.K8pт+`{$nODDDDDWuhrc:l1g@W6"~˂:m#l2/vK68cJﺎR:N4Wc Ea.$XfƀGl&Uo;C 2ZzٵX-V;-'Q & IDAT~vp@dS$s f!IFom&7́ݭ_Kx`g7{%Ttx/dȀ9K 5 $lh'n5EL?`!"Vur o)E Y`o܉ @~4\F$|E~]y|jeߍ<8C@ox7<ϯ?Xڀ;NwUxèH0U1ۗRnBtH "n566F8{%Tt"s;,#O=.wV"=ӌn#ODDDDD,₵f-t[>5(_z;Aa'"""""Qܿ忶!+1BhVgp/r:Aa'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'""""(*.XHMc xoA}l펫v&}2v! _Ӟzt<\xl^2!Fhw\SQ3&1\[16y_`Kr%sg8ODDDDDQT8/A#6f邥L!;|Zؽcg56ogޗQu8q&,wRfFof'cgBhǾ;shPUxڰM;-r빇6,r%ī|1{{lsz"ެ a?,.\2$sL~UY!)8߄SUG>; e?98%^&rnUœ_ZP*7=P'͆>m:-4tKfe%poH8r5֤7l}:{T4_ V6(Z cmۡIx?;.?$il6>yh1B &)ZnxlGqvb&8]iJ@h`< k?:L01_~ u/?AWZjW1V:z㿳c}tx~/AnBh!00밤e'""""e]%^u:15޴76ǐ}]'އhy+~Q'Ak:s6@n'(DKw,'q [`EJ2֊7W]ry4;z1RW^)~v`[ yiDK!'n+* Ʋ ])ɻ!yۊJ)~ n(1V UW &3pE![_pWVuw Ȟ}d; cv7/ȡP0~:^t |Lfx&8XG|+N+<*x|KS$z/{k=ꅫ ylAAV*8ǜ(*T,96S7kVN0! ]^]/Ó(.C1%HԣIlt:QoqZQ)dDLZ>!waaODDDDD$Ja ƯF(Qiub2Vmɟ 8/k wB@_M836w2~;.O.SBf!{`3=;[yW>5[8.x,)a} ,u@Ͷ _ܒ#ha2͙ 635ƘO﹆ يj)%W7=vV=  >K]_x"""""Z&QW{hx-RQpm8РŦو_;=u__)@˘7`NSOOM~](5@1p`:=:.b^G \0c"GvKU(;3 eE^?3~^^y{ IۭBP.eЭOoaT`?an-]HK??ؼ#CA ?GTNׂx؋iLjur}j,DDDDDLī:!^vO/wĵ]Z!/1 ǎ\ 7ڝ!뿆}H-껡{ګ6ՠjǠ$ʳWn3[-XO~bnu ZGfמ" {ܻS !r`.sjrc:ޮ(5Dsz 8/N|Z6mR**ǜm^-p΢6OLs;?3Wr֞ٵ`G=!/}xw^σ6Az;>m .z/ Dpe'""""e%^|c@>(M {"=yq dl,m@DM*a@h$[ K2i ezlhsUxD18 t44`NC73Or%%O01_~ u/?A\z19#brPnU*$!Dl6>\Air+.;NW 4*O>o7\|}޽uijӱV|_W "Cx'o D\ T4.>?Ě?ԣ8; 1B@Zsr˰V{gi&jfs>D[ k'vwv,³Ǵ_漂vd"趢 `,; ˠߕ˜ rB~/6Mf9k9Obv7DwUURR1o)At7-a*U챇= E<|=-n0Z" [ǂE|4ۯ"[_}%%^TWr;-'Qڏz|,(5Dsz 8>Yiȍ酗*TUF9ڼZ9ఝEmgz%>pN0;s50߀kwpe"pkⶢ2- {nKS)R@?Z,<w/j8$&#xBCيT RRu>};U]H: # M85 U0_tޱR;0 H5`ߥE K<E_O܂c_@!"΀p[vw)w"C#߀= pb 9bBNALL6 xl5 $lh^N//S9yq dl,m@l & F/עP@MPwe4gu&BOœ)؀/O `C",{qnqV#V#%q819՗ox"""""RO }UPa'"""""x&Lx'aТʿJK<3!#wW!C=>+%3 hX≈%aVHX≈%aVHX≈%aVHX≈%aVHX≈%aVHX≈%aVHX≈%aVHX≈%v&}2Dx"""""b+%~E%{R$Mj#QeX+нsS7Q7GlGaVlvokF WaU⹏̅ 5Xڀ oÌP\v4AZ% i0Uݥ,^llGaқhlF> ^q=3ps ?" $!Dl6>@UEt1I9(w,n%,DDDDD]%mE_Ec7NV [Z zkq)e}HF9п^}wq \ArUF_m&hssYlIH݈rn:ۊJ$,vt~W c.s%ؾ9w]~,a'""""*e {ob|Zxs£Jbu^x EuRp*B];5qW2G{P6 7)+{!8r7HY8t_*n"+WV#) 缱5[ :q׆{./T W}:wQP a'""""* :Of[VůFnOPU7k3Pv5(_R\v gƔjgIdU\d =A!ȷO؄ s_fp_2ODDDDDUgoc«+rb$Ct/v@J*-%H*/V( R6xn8ZPp#8rʥ,[uX'+rs%3 2+ "kN~%=JOGٙA8gT(0%}9w̋%ĻLKަTT?9[ݽ␘ VTyLFom&7́ݭ_K/5*ǜm^-p΢6OLs/dU`oG10#m0 x5\ÌIiȍiE꺎R:N4Wc psYPsmmY"ODDDDDU^Eh IE5cˎ[ %X3ÌP\h> "A–f ^}Jl^ !Hߋ-!.g6rp% z;1182N޸i;H0syf_!%ć ŪM_ch0_$wpsYa'""""Tx'aТxô?jP&/k_Lda'""""S*dh[اV8(^8,DDDDDbJ<ODDDDD, BODDDDD, BODDDDD, BODDDDD, BODDDDD, BODDDDD, BODDDDD?َ¤BO/nIa'"""""hrϟ}{x"""""b/nIa'""""*>~0"C' `ciz'^w|u:~k{杼7q)R k_dJ Ǜ*񆤁3 w_#nMz΍ˎӕ&H6 ӰȶG@RSo[8Z sӠզcۧ7B1bAV6 >K:/,DDDDD{phl]hBq0Bu[Qi0eЎJaLޅ9H8 Za9ఝ'zdtC}nq)_W<>)=BGZ-z( "ƿH+d_!t[Q)Wč%0Uhrێ;8t˷^Lh7瀣 <-9s| 'C-Þcy[ x@E7j߁䥭ͼ5R K<-)TB)c \wZp*Tw{mBUp]@) (ӎc⫡o@^fzjߎ'.^?jEPOCgH\98ق271>BUuYin=jl@HAU?v gƔЙ+gCODDDDD,zJelg@} 5&lX<4Kl)^+s/N,(Ihpo'oEۣP qvr8u@Ͷ _ܒ#hퟀ'_{e&v\ ~n3KގB!8eV ϞDwcK`s=Zվ+.KY8t+ܪ:]r'Q{-c^LoDFwu]_ya'""""e=%^[u8gsnw+WArzu|uuj=؄oSOM˛ǎ\ 7ڝ!뿆}H- g?cYuaq~"i12- {nKS)R]p-gK+jS Zv ZN<{^Fysy8ksa;<-2ͽO3rzh،b]z 2R K<-(*;Wl Vv<IDATcciOӧ`o܉ @~4\F$|ϳ8kDl266gNޓsNlL@Hy{p[fisekQ(i &o2]ПcKdU B#T T|`3RD-tE}|=v+7]1\/6 .弰0a'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'"""""xY!a'"""""?"(L*D/:hrg%X˚p a'"""""?UK%,DDDDD{19#brPnvs? qkހr&O»W\׸8]iJ@h`< Ky:cK=#40`&춥;/ZisWMDmzl7ܱ3>>7\_ B-m'` دw@N@ĥ`KE3o%@㿳c}t<]VlvokF Wa׃%HUVTe'aRwCV>8w;Pj oJd; cv7/u2j3dF[6:d9R ?~A8QcZ%0ۖ4HK Fm?R?IΎyK$% \hHwvXEA@E[q8gsa;O Ȩ醬*?_~/:\}z>Au|3<001y0:#}HFz,J׉6sy^@_=ZڛS+piSV< 6sq@¡Q1uYi'[Pf&ƧU1'yifKelכpfL ZI< |(cg`oI:ٖU[r-aK)j D (Xyq筏:NފGWyԆD>dKB@,L\T$~*M~5LVTK(=}Ïʼn x~=X≈]%݃tsF2 laP.e=7\"%VBC^srt*ԙq[ðI0ۖ2%xHIAXſs%3 2"T/j֦ɳ R_}]v~.[à߅#U@k<:/ KODDDDD*(5Dsz 8Uef"qs݊U4w93%UF9ڼZ9ఝEm޹Wao vai*El[ҼVUw/j8$&# "9{u(8ڎGod= i[w{ghᱣ>W vgq_&RK.WU}8`OsÍ{gz,J:{NdhbN0"!S xwg)A@ĭXw\)A4، aKE3ޝ~kQ(i &o2[mK~b΍ޚT*>Y±  F,N1010100100zK    2015:02:21 17:05:412015:02:21 17:05:419pB@ 2 d ASCII R980100(HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222h" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?g[IfNBԚ5?ͥF4`znj_^g"*GGָgEL) y x1(6*|7tg|YϚyμinxUݷo<2}?=9~7JgLP za)R?JoK|o0`tMr U[9e& b$mJky~8 64GMo cM>ymlɂ~ۂe"؇@')s.j;~7H Ò w_NJhpLyaz6{Y![nXʐ^z#u[rɞ#1J_iavl(py{*W[i0?C+JȺcTQ1]y" (+O\xiNT]DuqngZyhB׊u)& q$@ǽz'|=O >\SqWL\J;5Yd,}Wpw~7WYЈRX*,W?ZI.dԥ*#ɍ*d0ݒ9֗hߖ'B<{`qiѤ#]])0JQtawuo Co`3Wuۥgo%#OZiܙ+#\ "d7c= <_QH^H'g8D,ji0@cĎ d$+M[ 3}Frk9hS[ZCgi# :uҤSKg䜁Tzᑮ)Z Iaaj}:҄%|c80NWZdЅY0 xWoI5 ?ʖBтownFO |=OٷXӡk̓\1 O{DPl5j^BW˹p1\}jđi=I21ڕ,4i^DLII9S(@Kd 4Ni-sN-SeUAQn X~ _ e?\~TL^R1؄A^$Iգ< ^]4h rr= v~o9O5Ew ;MEjteܻ?]=fA q+meEQ|g[Y_)ݞ}+{o;MN]B=kka_Z;Ԋٝ"MV&$~VQv8ɔgD @V>䯙cָOu{;dn 7WioǗἱ[ǹVHkM\\#Ij݄ 48ڸ!RPGN*->g\TOSmV!%JFz4!#\38& Mo(g;6z~իږJH q{5^P[SrH㓂H 3+pӌlfE9IJ0BGNwǹ{wd; T-l".Ϲ;5z;[h.Z&98RFc)4+IZ*3͖s0EcQMsw7Sm6\.P;%Q=tzK ;I;uҼK"fop$ct+Y%eRSa,HKrz T1v79.mI\ד~˒Hg\/ҭieAA'g][%=аFIb[Ӧ=M[佻"Y$Fe Q)$t[r3iQH`FzZ}*ss3>q?OjWV46 XH+il̐F#RH^?i$yNB5xOw"Ur+ǹu500?p~fw8Qへ5Se]+L~[iWi r0GNw2 XL#u۸IK{ SUAcE#ȫ{Qo|C`{՞D}ݠ̫ĭ* S';x#/; "J4LcqBrF`Y7-gEa JjkczXJqŭ%1Cmbd\1#e98 Y7 %p!̪!O#?E֭%,rU@>ص@"iN۵:R="ŦcjTۑy'֕<˘$[Xۻ!i$DzQ@<2v?7KgEP 9ǨT(ԫwx?2#z<Hr l\zYu pkq\L ˱x<@G+m ]vƃTTXF 翸]ݒŭ# "[}2X'Szh2g2`pFrGZk,n. &0ۘw{nwӝ8v隗tNY?T{@qQۋ%ij# fû'>⸋/$nrWma9!råZ} ^";ϲ&J$qJ|&m3|Acw\gJߵ5 Bӭ^aX.ujqo~/XK{}W,<'pPif/d(zwFiՌsּXMQ dM gM(sVrw|qU9'P0rql'R 685U^MnfF.WF2*=*{}*oM"݆&H)MY)bku<zf7Ikji\}@Pf,:#>uR+I6eV9\ &ꐫF 3 RL3~^'B^c$;8SӧZKSͫJ5$㶬m bKJtQ˿'2#ߝe U<<ȹn'$wb8f֥ha($a;1]tK1uh Hw ⃹8`XxkkURiI<ҦdU5[5ӮHj9(sƚ/ liW’Ctj嶰ҢdhJđ\_['D@0Ɨ*B#dK]"Gg6s: 1oG#,N+t.x(LSHA/eN7]X$$q\}+ΒSVKCX ҪFѢ"U'י4/=#d8ҏ4#ҮU#ڼ2&ǔO5:IL1]ʨkӴ /Vlc*#]X&<㌐9{trc"O{|<;\0Euio-{ZV5@>EBą-*ayi/A@HϦI?o#8l÷֞Sen8t8?CIykxI$-O9Ϲ/p:X[UFOq]]h3x@QdK:Ϧ;W&>KU[<(89#=IWGyTyn80]x;zWkTdJՓJ7Yj{O-%'+U%U\*o$9̺3e8.0v^R}Ojݵ(K8 GNQYGB[I|n!Q|6t[24QZ(-țt_^U^,\*c<&3)$ C,~vmi ܁Z?!O1qLQd>H/AV,PDƽ(V http://ns.adobe.com/xap/1.0/ 2015-02-23T23:13:04Z 2015-02-21T17:05:41.10Z Adobe Photoshop CS5 Windows 2015-02-23T23:13:04Z 180/10 550/10 35/10 56/10 18.0-55.0 mm f/3.5-5.6 108 2169 180/10 550/10 35/10 56/10 18.0-55.0 mm f/3.5-5.6 108 2169 True True 1268C86E11DFE406E9BB2ECF482365E5 3 sRGB IEC61966-2.1 xmp.did:132B8AC4E5B9E411B2EAF5CC797CE5C9 2015-02-21T17:05:41.001 1268C86E11DFE406E9BB2ECF482365E5 3 sRGB IEC61966-2.1 xmp.did:132B8AC4E5B9E411B2EAF5CC797CE5C9 image/jpeg xmp.iid:FEC41195A2BBE411AABC860AA72DC6F8 xmp.did:132B8AC4E5B9E411B2EAF5CC797CE5C9 xmp.iid:FEC41195A2BBE411AABC860AA72DC6F8 xmp.did:132B8AC4E5B9E411B2EAF5CC797CE5C9 XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmCC   fFcݜo&|M=R}Uxv֧>"-={W8u=غc}[jYs{Ƕ=Sycй9Tn+v[绹 7d9@Wt65t =<&Qg(2lG7}AWJqr};3ekpAI'sTƦbY⽮+#snHMW)9D5h;IUl>nXۨ2\dOQa+I-\l@EFețx0KL-9sRmj[7z[_{DgNC*V;ʩm.̣0`U0~bBae3&Q* aMUs=s+II]ט6Mo KfEg*DW?a\FQh2XLRlr$y+XDČʽAs7H)ctIqy1+V( 9ǩS=:*3g HóM疒 -$[Ұ6B~A5nqW4%繶Ieߣ7E(mf!& 2Gg q|5uWO0GzO;)6p(ټJP`=OͧoGeJa};:WhećȄ/&H9Qh ]^$,SN)B E:v^[8&[_5BNjq_t~F[n6'yZ()X3RhW}@H%KiOYZip}2 $x)i|22p Dhes7'Z{(\l[}mu(cTF΍VfʖQ˞ru jD$fU+) vќXZ,v~56 HÅ<ǮczDQ5Y=\.gbUSuVW6y`zɇvƏayBOG%yĊz}~o_ٝԹ8[@)EX .Kb|Me]Q^2gʧ]@#\Nb i9^ܫzm^[H pQ l y=!x\bu2tu~ Z"l`9[#In-S[ ˓!'[.e~a1z̧lm5t%r3jhv0~]ZԘ:FR`PXSU JҾr̿^4@DX|_:>:{{;T,PJZy EZ1vaU>]ڟ :^)gous?WTCyL|^ޗB}|G}MZolI7 Ru[FB|!ei..'<f&;4xk&tD45-j%DwLn:H!yrqJ]%WR=3qԜWY?^@ϝdjhHdL}˻F_m{|~ߊH߇mbaulx4fn!o $E:Sם"ȒUIڤlłN %w꣕燾wzyRW9b5`B/cּ;!Ͼ<8ԅ0K6°k"Bi@}]m\z#ϥuL:;]u}_&y"C4<ݾ#\PZCQ6&~W)4+DENJS ) )6\]QKユPkhwxk&,FώRJ6+zo|Cz~ylo5WZ2X'&3eF/1ded?n{{" s0MN5Qf'U7GŰc- $~rsaD&hM ])90dð,VfZP_^m.kE3VbnӱNzB ˇqw\݇2';[!HEpm)x6O9MW^[S_YhlS&`ޯm׌ ]?.4ˬUc;i憥U֫o\&:-)ji\O/ަ3kBe[y-nxnVkZhobtkÂ펴妱wIZsH-u@la5g811HֱBEf #|uex,'UhУ-)B[Vt93=D7ǔPvY["}tDA,Ul-ybc~[Z_k'f!umTT8yω9i|܈-Hus6*9?bFI@1\"Qƫƴs*nα\Cv_Mꕫ1D=)mO&&g,r83fM&MW|u{xl>s']^~=PIYoY3)?F"S?z# MVO(TMzlZYsP=f:|S.ojξm)UdbǮ*om*\y~CQ|s{[WazAVkFh$vʊO4hu↙-^3UqQ<:VR ʣp;π8guEM2 Q6=2L3P@Bպ vxgǰ;(3-c-.&<}GÏH(t< jֵNzuahGDeJ?_,2;n'B$tGYb/g0q-P:c0!):60@ҒR5Ov:>q v1acX#3}U#p`VMP,:E~"J$W`[l?C.qCtb~q)Nd_"+( I!9wa:m%2a7UU\݊:ēK%|Ke#(B7G$>_X " [1b\|RJ98DFuhk0w+0|:|DR" 2Fr7{g$,YvQJR~!.YyÎ;>րovZ x@T=#$1&#,%9a;ꪚ h&Jê+: ~򍘖bǠ?WJv"ne q{QKHvowHdLo[)/`\I#t&*fHwnv6#GlTN3St3TS]RS,'>G: N|&s$a<:7\M05Ȩ {p=L2D=X5?Pj,G563)*,G0$pBfd߽};񁈱r,wq+&hZq")0HA(zi(_VRdE=Ulj-3!Eipщ:E$`\, KXn?T!aR0e%*R3yE3{ ]ɕH-)4K]JP,Z%! {/gšX\ْ7rʞ1!BBn#$cJ)1'&:Ȥ'xwtBU`Kph>|Ի0,ar$y*„\Xy0G2%Q8 ]54IV7? 'p99 fiu2-/@VTE0vd)߇WLLe)ͺBqdӫ{ncǦ&'n׃+_:xF1#%f%Ӷ*hf)IUCN37GR%lh%rrR7)t)B ߾=j~B__ĤLX#Ç%M3{Fyj)pখdv'Tڇ:nmhʒohcV(o(򅥛^0aBAy9,Ta$1XBi*]D̠xUz_zEjGjS1Ӭc*{;?H~HG'sLS+  3SКYetls)PDR3ͯ(PSJo)U2?6kv F) h4~DŽ`R4=#)ebHhtKLJF:%*ZX_22rHvcʤ"F$ LG+Pآ vr6au#Zծjy/D+!Z6?|#w4@L*UqmVf*b,th+%C~MZWzD͓1|09P+$;yg6ײ0JD̗I')Zm  }GE$#0U4~ľ\p}GkqF$RwÖ1)% ow/ y+(%z)0UQ}G_(GHh]sļrW>qzSȘ/g)IR=⪦U sTnxEL(#+Ox>ZPc0e&zJ#fmϔS(yֵ+7D)`[EV.No+RHLRIIIIY 5ww=*3TTSαʲ SON_F_gM\3Z'ሚ)~|4|QJ &"L%IOgMD "U,ɓ=7?8RW|-6e7\RPˢf5OY;C= !1AQ"aq2B#$03@Rb?UvIјN53.IOJ$fM)AE2x{@!M4܄ fQx D`۵qca6?+ll{"Botw2U0;QP<0SDtmO#*l[wd d/}V sD52[_&2uVQĀW[ }#X6 A<7corlWo3vr =ܩ 0UgxJsTU~ :k췬IRs}$o"1SvkܮX'ߊ]]k< x~{EݸDEm64MGeEdf@sFs]Dh +.`*8О sYgYT bwڷqycaß8_Y};S (Ln`SXMtT'8{s2on> Ll99OF{,Bm#3oe:Z'u|ӛe:{Bs3B`pޥ2q(]N~mS=50gϿ VWfXVdHC-;6P&P-rCr 6[<&n*CURAU*}a- NK;7ъG`Z=)??ʠlI*P⪱T4+jm;)i$~P +gx7pwXU=KyOC颢5=;N U]ߖ us+$A'mmoM`}5֜&0M~;h{XB"ŭ#ͣQĕ m'j'JBOpM*'+j!vF32mjwfP{Vp9&tBpMA9]7UkmP4L3l#ֱN $nh(5T9n hmEfbe2#BBy^Zf\5?_!PjT|Њv[Ju[F٘b$~׈[goڡ}U.r }:bJn:A"}9oyOOE PAUG Uٮ<g3ܬ1S; m-A9Bia")<6Im'6כ^:jX$C"XB1jfC1qO%Sb׷@t*{<%w˗Xy}rȅ6䞎.~Ph!רM,v$|ޤk7J3m|7[hN`s 6o׳IP-~I^":hYOOP˿+ߜl\IݶTMoOYKSo\zJ?"fs?:1@Haٿ ,&߆SQB[<6kTF:91Q&)yZ%_7 !%w(LsZNe }fVSk ۷m-(sr`$ _כ{}Hj+XxM<ńf/í+({UQCbAp.ahշ nS8e w맮Yk\] 9Sv ;_yc!gë|/X-v=R:I~CG+YX1۩m,1V7dj,{5+ҁBlɷGM *1sX^:/a| z[O&K˹-=kxjhh?v#M9۝M-tϹ=:~H^gP\ OJJF$ؒ68[1P[ږI% ŠtёL0{#·א,p߻b|7l̾bE"==RzSyoo|I&Z鐍NHݯn~=ska[ e$?@IBݏ!\ @fJo"<$@ZQϴ#7/oڊlK0U*DZlzu餆cx2"2KM[ⴜõ/Nr_w5}5%.Xt2>0|xQY<~cr Pq/k!vl?&)HyX+}THihU+;n |ZQ[  /Fu}8U+Z;H kM*V^i;NIٜ|:yi՗FLeb7Rc"-jEo Qy^Xca̾hTȎNRS7(}臘JS}}5hy{=u[j94uEM|c_xo]:Hg{k(fu4>1rYdVg=D8]b׸ $+Oy2.<'aҘj ni@%[kg99kfy*,]7}^Xmۧ qfȨnqkdM*O~Ja\Tx#ICes2/efnkQ Ewr%9T+S%;c\X #d]MLqu8æCi7?Q,r0DEzz겆\^\ a=mS,nLPpSvnD[-4ob7D0gwuU $<}RmF5ɘmkե!ůtuK\tGxlLδӛ4n؏==o}⨩gEgeU " f `Zږj!BPkS+[}]a겾7:q$И6ndacz꿆TU0Fxѫ;yőqm:ikuqgg2dw`c}KQNIMcWSͻX __By.]4sO;9|+]k3dvxY-֒Y%һJ"ī~H?ɮ?7EOc=Oʵ3:jЪT2! _'bW,'[/Mi&kÅ mB,Ryp\\bo~1eq}'u#ls Ho?h-Mˉ2t#6UQK/SW{uSg1"1hqf^a A&tHXK+ v!S60G#>/U4&iNUmf~a?\IiBQ6# E< #u)9gK):*K1^0Yd^m,wž3<C/TCăEJ^]վX"]:=t)eҬ/y ;8e2O>PI\ҤgIdk qCKSVBXE'J?$Uo/990ŲS=FTUH-]ASCLd(O+IʵAONMp8^5 fuqC\d)K 5lTv[qP6;|*8|1' 8Gڞ1ln`%u7Y7 F/E.2*m-:/pmH?$Z(%>p ~% jϖAxat%2FtNqHifgAd_ovױxm2t_9[ [C/\'@Aa+Atϊ̓mI 򻍮_P;RDwXxr=GUk=ҹOé:3N6UZ̢^MDGbXcS!1xoqU53h8^?k6qZRZAӦ/fЛJ(/;&|4Z E>.=oBȿRtrP|$0)[7-e2ղ3FJR,T;D/*1k%9gcStEk.CBxeœ` K" c׾%wjAe1Z9O䪥,9%X́/5~.Ǧ:(uĄq[EI$q ~RGOQj7y)YdF n2o $nj  NH6Ec|tGgVmjVُ!tvmYU2-"b mqSm{ҰR:QP-moM/RMȞ\B:l k8,r\x}ïh3HvyBۧ5~YL@D%$#$ߩias 0}[~WS}CJʽ`\m}{|uB%/!ǭNQ}ߓ=~Ji&QU v\or>:rEqcCQ&0*wa,>:m}TTrkɧ#uױp^Xa{[.޽y8 NA穸3%@ed;6 EŷO}M;-4+UP2jaB((Ī>onJbo2G([$<:Zqlb#|G{j`ZSퟖ}e8oXmmc,iG!*UŲ:K̴4餓}dkoR[ʷ*0ncHXTzPS)企r?k92;UȍYlv wTƎDyn#1߭sE0ɖ~ooa^[T @xCu=mo: K4!Ϊ57c!J8¿}ng2x_G L}V=mJ)PgWf`mn1duۮx5lᖢ"vLmoMH*S2;h*" 9,L}`녇ᨸ-} rZ7'ݏ0`6M pO\iv䈛ڱf:ZlyK>pIhg:!3];om]$8Ibs =:cAIjԷ>Z-big>x-=ŶlIXsU=ճ(z~S=L%ؤʗ޹2WBKt U>*'Hb~޺+[t+}nt46CTS ֥,\vZI%+,#nn5iuQD\7Ot5vj86e@;Wga(a lXH>;U$N^Y!74ӱ5E͚Y |'fkG@:F:7-}Ex)F:鵴*,[5scNt/^g;u374_~`5D],u1pKt#?N(gTBb"m{eg,f+ o-Q\76"`Nfw#Y_[O~PL“ϥՅۦ8KyIP*uR/o{mz*k19IoA3\4I&6bAbokzjsSjV>+̎騸D70풍G㥞ݦ&)+m%\"v7;\RM1lM}`z2v _+^Mqi* 5?]N*̣3)"Kocs c`>ZPn{ 7ʣY2ylU(77 W}2jN! G*;6 :Dl|,.R&3atF%s~wKM t,ǢF +M^xe~wmjEXdlzn}tbᒤC;j9Rʤ@,UCoKƩjeL {-*uMܱo:5Ѿi?LiUfo5*TUU^8_N'Jraxޟ ="ݷQ;/["폠ԕt2ñkSy'q?M,r1Z}u5}lJm/{INVE3]e (Ϧj ,w,cI˜PKS"Qp̢ G)1^\ly 9*3oM[2suqTmZ_T+v^{h<&6 s6_.<=iLXe7Vo^bM`ooXHEG[R H!?(!1AQaq0@?!0T`U犿R8 Ϣ&dfgJo3P>Wup`"nsK)d@/5UN؅5<&b[I%X$V+ dRJd`Ho9е}@oj,|\Ht4HPn0FnHF9[ ym~"X< 4.}y| 8PkskRnwV& 췝q0!e:@4K_ F%qIгX+]5!\Z*}WMST/,MyVh bGnW4P23Ϙhb49JfL]=(څ ksw:b~9t @ѫ:|P΃gINS"63_4; 5[6$ؒ7 "&HR s5YM6'aZΌ%Tj54z!(WSz8h*a-IZ0+,aFRkkjUn Ш nlff?gAJ:A]5bK;4# `',MNz-2 Ћ/FM2LHcڻRy[< ]o30{f^pF+X`hix:zG$RTh7kHYm EIޮ+ȼNh;j;`a##-u͐٧A&*A lώp^]أw>M+ M`N;n+5=7H#78:0軲@c΄B儭8lKll­ӺIY\4O6FV2bO8n(D84. DSx*5/䇙%cO2x|xOl&(7 S}b,86pu.e,>LS+u w[ 9laB޹M'#/Ȳ&Bh.ގv=Od@Vh34R"21<78& @:>RNdD!E[62H~>Lؖ-1%7Y8mRV7& _c"Xzu )!uP#P,~'ҋ&9MuOSEXW:ۊPk_|etx2BqIsC>,ԮԱ^|'S='}0&;&$od6*9{g-- ThPl )7!?Gu(hya7 ;XL< 1$N锲 t` nǠq!8V@/,*Tkn@%:FXiO y߻R}0Aє_R*|*mӶl]4HBbxM`h.HgYB.~WO5gj7 ^̢AWe0j%ݛ p6{Y(D?f`&vB FZXi_&Λ 7 h.zo(iUw|WN47(ii暛|x) ǮLLfUS&0Sݢx6C r* U1B;>FOg* = \_UT޴ٹ)/3Zڤ3D#sSS4ѣG0^``Ii? .VS\ p(bt' ' ѷ .מa׶ 2,%%po%]ߔu uI>JuтJ ֐cF;/.*!WQ amJ?NFD.4y}~ }бh]_R]s(ֿN x'rhdM@R*uo??bj AM.`b;EސqSi/8o ݻ|wG JC;#5a"7Bw]V6Ҵ0JLE6hh'_kvq; )6"H5 "r15nBcЭMsRz<:P^JДrp%2Evg#ݱ2Oݹe`Caߠ/sgic OӒPW~1  }LmBK.lFnbpfHt վ+;(GJ'-C`rlZ)ܘ*eH/rh\% A hIo',YL,=4XܠUEVPkM4yq Pswa̴cTJFqh%7 (Ibתį1fk+~ '|R|rf_逄mk'5CE0:^1_8سG7b5|ڠtC }W Y4Y vHJG.R8$/QQ;3 "%M2S>O~qt]bVf/Jۊ(H>/Gͮ`#\`|{2pB+K ` ;sS 4 zi#WWl؁jp cYI.:xyR/:S 'z Z-t02;o6@/{ћi(< OaUO>t|>ܸ!H-o:Tٱ*5 q^|;fB5|h>0(@pe^,aE9=VtF29]iߌ'tq)|Baa%5I* HOPoZ^ fl?{,,tY7%i`my׀tWhh?g׬ 5ƒ碑R\U$}k5@+&ZFc (է<N'ĵQ06~٪F&-B_>|`ݍ=/. zmDvfZlNx"!zJfl&s_:u{#'m{:SXE|q՜:mݟyTZzsXgk2]W3 Wpr_z<s~;X@$/L_*Eҥ }"u6Řt@6nk'k>/Cgu~4E7=<|0 cˮK© )oIyou;WCFz:;.kP7rvg8jx=u5#lַ-w߾Cϗ{ xx FxQcwewYP!:X T .ͯb AlQ'T6P=w5Nq:Ƚk4PSnzdf$:Jt^*=)g<Ǿ2Kh=k9 dO_P*o %@9-Djo7)1ox@o=?ǥ[A@ D]C^aHpmOۊ,C8^$d\}Ǭoqyn47` |Bd(>ݹ&=ξ0|.yR@GdRT]"ӱ]jTv]NCNeWSAt珡pѢ4t%^oߗw8 !.s^Ys??aBEi>&dL&R7rP P;sY4<*@FDqZS,Vnθf x:r#G%"D.PEoz/GZwá ףh4i [M! Cy :![[hNrd"R݉LJL-=Pgl #kAF9>?:~ l8}K:wM+oDd'XX-l!l<\mn:Tt<'"qE=wWɴ, l[ȴEvM[F+B\/o k>{|gU(*::Nٱ t9A&j(-9DPAӈnwb;Ͷ>Zak6Uk np),s?ns^Q ӓ`y9Ala"RdTJN7=!c-p0oy7JEҀPTQ&4P&#tO'yxA/Suj!m^˧PWqC*Pvg(%`x,UPgUJ 1FD!UϺ-ɯ8(ٵ3 > <qB%a<ޤlj)%D56%;"AxY5˼ո5pL!v_.8tTb[x?AgZ "!/Qrgrthp][JJVX`P4mY t"BMɻ/2P%#/=񈻟Lb @CmmR)Pxun:F4:61|aW68X !;L!HjMxGn&$DC?C?soÆ9@vh?F[odl4VFȃʽ` ItHUcn{On*u]uX [D`T4veb{= e-YRF #R1 T&\aSg-@YqPQ욇7퍼״54 'EmwV9 >߼tO'q8084woQ~Art,:ΉD *bUKoUg8#r8*9fMS\zɳ_?=_g;j" A>jI΂܆(0: XկEUYF{/3z` (lKHX:t]\>%ȂmOJzL†p9EW ^2>1Cc:Ig J{p?q,˱"CV]dmo\At҄bcRO]XІDZ:rNOdE#TJ#zgb;ԟXR/;<8b-^mw{]ZWP;^hR5@g2&^jʀlIbS2ɢmFo\[79V[_A؊OlkAUJ)@TaR I}$ʝJn$?8-D9?xdPlQߞ.tXWupltY؝gX/{0 :(x-W9Vh .ɮ-4{ m*t1wɮ2b% PԐ%#p* owðR@uN7Z+8yc$ :"QT԰|.eodu>3 xfߢW418}8 p^K|SV$ Q8jJqOߌOR76]TS1P$"Ge tlGӔd cO4Fx9bȗDk{0R#D{rv.NDžZyшtofKC 4Z7yťB)({7MsuQ.ёY|GP?4a7^V|yM;qR[vbqqLvd\5z8i!6x߬zF%WO84"I}~8m~2_5:4σ]j5&uUEW8+1.(!1AQaq0@?XQXKbԖG\l١&1;PJ$غ)6f%0f@H2's@rcS3kIB/K `Ljdb ӈ"KI$MeMjQ{ENe.}r &ja >CX0v|_^*.M/8t;X6銺/A.i*>_Ph?Z^DM&_fcLVXu^?kBaf(,gm$Z;)KhG5N@¹ڲk>(%m'fW &:`V ojEC! =xӣ'5:xm'?58DsRO\E c3 9ڢ em.onmD/q擋Ht4h3WԷzњJ/R.o s?O]ʃPF+eTIB, ʺ-4 u⹖ gs,F~5G?{т"C,nX'C}8/4]V'CM,Lc7[[THbaMu6hV6̆4%̓wKMc׭5 (䐩ƺEDD̾koNqqh] 0t FP Нd$L"Aa&p HHZvaecA/~JFf_RLb~֠CM[b}vgML0BtT"3z(_fc}zbL*L 4/B ,1)7]t! !yۍPc. E#%OsC<v,kIkyRyL$-6a2"{:e) ^^JYb}5a\>hB3SKELE'jBAY0:}2mS%sdj'c^UZ[Epc! N^(hMbI_]*J@y67gJegh~|'dͯk9s8 RHb&3r9LP̵hE䡲 RK;G`&{ёJD!1:(Ru4] Nb\!xuډ ci74GBbk^F,_E!kbP@BO@ZF'K("ih4736&'>jRѷK&t ZtEͣ8}ɢ)[g t;ԄXš8Y HH"]ܚvq+Er$lhK{[҂21]<>c"K%==10ELs]k3;Xʽ{Had6II%Ѥ嘶$ .6;U̅]Tf&U1.IO@mnPf f6;P,L鷤Ԛ@ŷL|$3w85pwMm$ 3 abw9m^V{ANpE4$OJU.IfqWUizM=) 'YCMiQJbތQ=8o)u1UaP%K9A8P`ݨ"&{*AGJ ݳYv4e`8jFNG&$ ;;5{Ң\EMU"(JD$iozŢ>zbmy-Ӫ,LTtREQz,¡  NEUTmB ohHY.E&r54~qO+g@D`Kmߚhwy4{\B݊,!8h hm9hd5zVI=(ya(pDĨ&uإY*&֛1j%aL4XRՍ`Qm:6CPx"/)9!$-i"ma--0?x}֤jۿJrn&Ǚjm߯ޕHG6\PeLnFgI9Y*bb̦/;Q:ӱS{֩RdnbH1ӻڀ*MD̉%( Nh2g*5ajÆUmMCy!M£ҶC&AILQ)Yf =Axwm-@ڴ9F^b}i̱:G30BL-zbը[ɭ+n-<"cXOV b Hڥ3>(A$rݫB_O}>* /: (AAzTX&!1AQaqѱ0@?HC5_9\6ڡC51SicHstS>B?#r_N3@m>+GU|c.,vO`pVڏdJ@ يszd i." 38$/ʘɞx3OӄQqGʠ3ǣB.x% RXSP+z`__Ao 1عw! ]u'B~O,r ; 5By\UET~]f;+j[{_̙ |c0H]h5Xs+ Dd2 PLIiPh4\ J$p A[QU+ώ9F $BtF)$vxH0z ow5  ^nŨ3A&4-`* D`X(R"*R?EāT:"H~;Գ*4K) kHd}_X?',/)/6EV1oY°ˉT;ޭ3b|eiѼ"iqXFTKb8cAhhn"e⠣a8q !-YOE#P=tD؋'G$}fVB[ IŦҐH&`H)C$AC.(N[5&z)F<,hJWzIZcTƲ!*@MH1ARftAZA*S[  pWa"CR}D{!)_v@K f:tlAg|A:B"@ţ]rh׷.]C8{MNqQHAS Z$7-f6|@(Htڇ̡"e^RCZK@-7 Ij) B>) ]- |`4:er*3x0Ħ*< +4ST. *C( uP d9p/3 "x2j amXYpS#7Rrܣ0 ʘSN|E"b0tPaT cI?'S(عBqr %4@*]}eV6Q"PLL+#V"(#%0XA>CrZuWyZ?0jPMDd4(H%xlEB`<E zHQ B_TOcj*dRvU 5 jNAuUBC?(+o_Xq^g B W24 D&1k1rvj5h]K !y1*"<"j0jJX *,,j*äsiT>HIgS+bx!hN)Rv=\aB"G EAb, :X`] R'& @@FտljNDdpS 6;DNVEyU2s<"@ϛ/Ӗ-Y@*!8k7*"@CL%2' 4:02 EOL8 -a;cSPD#hSķT >CdfD/5\a`#0[7HMh6SG(%y-R |Nhlp`o L25DM uJ,_#0pIɚV4!9V5=8v 'Ty<%3ėO@$iA>-s  "d4 B]CQ3oEe$:WԑU`!]#d _ EKȩ@v ,f•{R@€ݎa]8Q>'tӒQr2d}@˗WV0)" 0kkA/V RL};$ t,"!>cϮTV4VmC-I4q@@> `[>?я1Xb**X}zMUpw!7连WK]-_KJM0 d~O} f0(h@+xPJ?x0ġxILV/eJ j4ް2 @)*$cU6AϖÁ*ݒArT׌a&i ?R+I]!#䞤{ ٸO`Xc ޡl/]00ל_d HX)Y68 Rs T0莓#|#/L("9tiY䓞?}^ !** _?SX̭ <%J͢r"j_yH8$NT8?&kFb{SNgP6'`ԊRBqQhTs*d-`X)c3ym<:$f'\.E*$w(5d Pn04b V XZ>;B195TǟG8k>nZ %@{(88 d+D ZEq?<1o!ȁi#pG.(eCfsH LRX-"S6X 8 αtAtsl!z^@Tcs>| n؅I@U.Bu8--HLv^h=e߭/+_ x4Q*2\BT}Vfք0@:$+ ցثA l6Qi?ۜ R};J?]Ci}/jݢzxְ0 "2t1ղ(Dj%*(tBD(Lx JT%R&Sr'̈h<iHBM$8A) VD(^#pbO}%c F$wc@"h# -EL?#ubH .BhB|UT l+1g TK%DǢpA߿$QŃmސ(-QOp҈Kʷ\,šA֠@i$+|+°xn^$۷ \MGu TI 箌@a6xd0{*jA\:\ޕGZOJ rӅ16E#=Pgyuxj<12@c}WA&aC .Ʋ4։%k izb> [[@O\ %| $/E44&z*CӚ qhk@5F;su̯p!ǻTqLЗ7&"Hu)LT. :H,hN0Z^B85~V"J'!YP o k6eݸUSXk_Y%u!X/l;*1ܼZ'q.ޣD C89 s1s݀AGwYX~AV*+OG\|_6?oWul=5آW?N"cO@TP\C)]>*vVV(|1m2zH.;XQrJor+. J}Tyh>0oc8"κAPg@Yץ8y!8$wf興" 2F>ٙ@ HnU`;P͉T-E TEfXb1+rJ*f Mm(^'! URY-ZkI":UY=[iDvspE.!zc8 @O }B;D*@S{*>ItB "#I0_ Nf{(X.sH&$Z M$@ꆐ@ w} |Nn8;Nh,?Nߍg1{Hb[ᭂi͐QG!PpPlinth-0.8.1/doc/images/raspberry_thumb.jpg000066400000000000000000000644601266051671100207210ustar00rootroot00000000000000JFIFHHOFile source: http://commons.wikimedia.org/wiki/File:Raspberry_Pi_B%2B_top.jpgC     C    'Eʓz[7@=܉S@O@o&{V^kSX= .9rC/7>w'DfNH$!"T}=&O݃{1=fE[ vyg2~*tJ8-y7'B7b &cEYߤJě%W"F(,122 릦$Y[0 p",&(pJ92<ю8ʚ n#29t^_`5'ea"4uyU#m7P[:s&W:*s+”Ypضh2a"u9|)gΌAYüe|CrlR*Wɼ պ1Wo9wplKRw f_Y AW#STvnQQ̸Zrn϶f/MK~ *ۯ9𧘾bjHLDf)|XSh`YmqZK5bHXiqa\%oX;iE_WA1#=c^LFcG]Ђ%b) XVX]u⸰&CǸ%=kObenSH>fe|+̒5[=%-0O7r&((цMI NSZ="z_:,*جJniydǡhfdIhl,\.[۟R,er]2^묌kH ]^m- _"ؽ˧L my سg7k3(4IϰKA/"ыU`bKW kAʱ=jLJ<=^V]M/O| Ύ@K>̥Xy< A[̒6]0f^,D.8Fm9~.&wמrrVFAVW#[-{+͓ 뤤h~}0` zWɪlHK0,:kŶUpIMe?'UŶ38լjA%f1pԻ^^`#RV>N}FrucSF(=ۣx_Züu~[<딙5V[nzj~# #PGz}u!&AOkb^݇Ͷ ncʛDi6R V {G9چ^ڏ[nJ KU.˟t<а\EXh3fL='zOI"dƏb_bjΉ~'\0OHA.ΦI{̱˟^Z-2][T)`4ש|,hLE_D99S>>JݛB>AtL f)ԨI;y/x֭gW9:N#hyY >\4`}\L1l fx3{HɠyumE=zXn ecFѪo7ڈDem~slzz>HTFuݩ7؄ :ޓXf&6. @#әrtVa3;Lb,ۍVΚϒoΣdk*aU?_3i^)9A]_D%%la0RX۔υHDb.%0;t*OǣY7-\5!1qh՞g֕Oo7ϞY8E/9S_ҚQƢժ'oVS>@iJy*@Q3A!1A"Q 2aq#B3CS$0Rb@r?{6R/e* !OVv}Xb>q}Gi/}3Նb{Հ.5^X!5[CO| CFjLc_I(V {OBJ-c"1]T`؇13&0;/񉋱 ՂO>J7.O h!GS]T8xn:'9YLkr˫_.}t-or.%JsT9E5TxoBX$vy6Wj7Bz@i-> 4+gy ?@Xo57B拃SM^wR5%N7q_#{yTGT{enJ\{s2BgID# ܥ@rP=dϱ9"lnwycW7!;rncJ*v(Ym_5OS% v"#^$B$z `ٮ*}z({=@z1#~!Un`ڨ?({b>U$~cB]p;u'n9Kd[ЩÁu~l^ e?H5O$>nJ\q( "]# HK8MDs,%175 h.\Z<)j醪Ge >=>W.$utkc !Y3n_jh k\r=-l9U]d3by#Dsʇ>U[vsa8HX'nMG#c%ѪԯS褘9ClN )` ;e wUfN qܬ]eHW9*@ѓGuOqbl>7o QnЉ=?9UwBWI,]hgt΄]>n(h[Rrl0RTcPhsi)r%0tq E'IfoUo KMP<̛%t~*a\V+QOuSmv'$cfA+qi;CRD]MPAtlSD3UeyTE3AXsO}hk""F=~J1DPj #8H.WHӵ*toɐI`M T"Z7givx>j=ˠU3GNs2:׽c[mM&]+GW ?Vtj2*zÒ}E {˄{sB'P< N.NGUp6FiMQ 4aPͫ2~lQvE^C^B Ȕ6OJ[\6e†Jc {ZA*^),=J[ ef퓴8\O⪩a։A\͜?jQ4c >E<6?eXj⫦KΞ,s,RNI)N;eu/k% gn7%y-k,y{{^H-OUSUԇGTƖBum)%L Kij=ؕ/D$xk3UQP z>* .2o-A橩j2qJ8ZgEUrd5غC~i$q0i%!}S![}  %fHOWo?5!1AQ 2"BaR#0@bq?ĚÎ> (?x5O~ SjT?? }CT/j}Cx~ԓHݱQ'KՉO XtE~o޹QRTѧPzOɢ^r18U2_cuobZ؇ٝ\6ڎ 0}/$.+rqr{21}٤ nr ?'7Xr]3h:ҿ?J  !1"AQa#2Bq3Rb$r 4CSs%05D?=|,Ml|ddlX+ r-H=i+{JFEӗEJ/ۉ +16aݵF065'G!f%7 2.4Ȃz7ڃ'&Gg 0ڸ'BDDIEWGrтr[stl1z-ڙ)ЛgQ xM1" RKXڅ&O=mF9z]CiX1 JԕѮun_fluQ+}3>9mS>vei2 kG/e!ggWgq8\6J„"NK&bpx2Ɏ3qp-ֽk0!\H-.W| L_޼^yI zɧBc8mpN6:PeTUX|` d間ym'2 X΄9",,,z :>2˝,&K%-c—):'^$.߻X,-}9"` fFWI/h vKڿNϝ)?UO@~W9ʯ~K(2k)js#ZQyGF6Ǡ<* /yV(Ás2ZVNSK%\ڧ|!r,oBi[̀G+Y;$dgۑ|e*c[uԗX ^]0, R]5c =Rer[qYbrMbRtr6ovX"C,SI&\ln ]RøǯL3+ v,piEK_dA4X M.ֿW}iL|e$DǢO:b׼W[ЦI")M0rI&)#2ʤ&h?]Y0;ȉ"l3PT<^$1OL$bq]*?s1(Zdb07c7ѐ]YUG4Hh= AnU\_ GJ-}W[G2eȷQH%[|=TTg"0_Ϳ_S6G:aKxmRΠ|B]z4-ؼ&# n܍J}$%YmXS j19>~h51J  mNP=8!o L37[a^1WYbnWGEQ`~1ca hstM<3]C䍤s]*9x}ϧSF!GIzqV뵪0D1KCu[p! wuQz7(<:"ßEcp̤kJ%#H~jd |L_bz^Q⣉N> *LЄ[߽X jb8q1@F֨G{[}[4LnWiH$.Gk+!3|ރ-o}rD1؋VMے&BxkI-Z?*R7iKoCM}'}~5g$_s^ LΑv~$B 3&{R͘p9 J{OȌI^E:z6')fqrA/ݗPOre6P'nMTvx YLPix% }K{*XULH$(s-ڵf=:A=LbT,'kWOǞESqm4գ}bpֳC4Hn}ju5BAGHOˣnUӅ;Y:eg.*X @R]-jK\k~Gp{Jgѱ 0@^&n$~Z a D|{l/N9loCkuQ̈́FEԽOlOhs&Z3+NGS٢p:=/ڼf)'[57]_la GkD:$7Y$u(u3vxdؔ{9O}|Ŀ7fLmbj_]jrEt-eN[elTN>EǞ־[TCƖшעr?[QaψǷjA}Ϯ}I:hRtNJWjOh=cRr7Z7ߢDžNť.]}%NdX*n~&3xbì}8E;.eNo`PE|S MҨ'^׵|P'; ,ꤢc' wazk ճb;׾qS"qr2_}Oj6ZyGI(RP+j9aI]o吏)4e»_Kouc>KGet"I9U:BFr:OҴo{wmӦ ,>Eq֮2boˤh4Y 6+qzkHu-O:jWa};ϕ aZņq*DX~cA 6Y%Rv7º274F#X iHFNrn4!z>;}>S# y%`HwL Ec%ET ˉ{QUZ9u_a*cMUtJչU:JcDrλͫw&rܸhG .۳ M> USG'_0Gl eD+𥈝r*M!mA̞ުYZVtbt|&FgF/<)Tr":_q{۰֓ES6?G$cΣPcd#^ޯ % ؟ppF6[.qx @яIÐHWuhkj $\O;Z'Ed^|yV¸DUfk?_y5heCmuxAa xZm,A(~O6-췤se܂- *VU֥f/+Kp~?8{U$xa>p,Y/Z /ϰS*r+Kf/Sjܷ_!,|1?Z-#BObo}Kb] hÌWn[zF%Y_vN0{֝fԧ/zԾ%ն"!=Kg򦅴j#*e2rT|O9q""$[ 7$Z\joƁXm~b{V+R ivG=o^Q?n0{_uyGu aIy-{(!1AQaq 0?!OfabSYA>] /!W4,F2xXN?$ VDO/?Np 4?k9󓁢r +po<$/xI֣`L氡׎,3%9',JTr,|NsQǨ5"A?эKy,HY?|duhK QVP)o#9k~6&<siie^\<+Cݶ& zqX!4ux:&>يWioci!)HfqomVZiB0_?z@/,d8@r (V9S&_&%tG/xZ͟$"xA b.Zlq_Б=QjܱPvC۴0Mn%06@`}9v15dP(Id"4my)q8VBGGm|QE7tM>p)A C}c%2DQJT:7мKg:T%\B}xjif-w'@wF<]{gXMT"bNЌ27݄ GZOP dE:.^\pRBNPwA Teb!9 )CD~?!1d~{*YҵS`M :bA]QϦ {0;ky8HkLyV5*4 鷯ǛYz<%p@Lِ `Kb872B0zu3aQ d?IX#kھf!,:| `Q%8H"c/N  AD!\fSZ_z1] ~%tsϟ!/T$Qئo@}8ӥMĢ=.ERHɋ3t,$ 9I&U z&:!0'!ל> ?XK ,q22e,\p{ _d A˗KH$oaP;ӧx?Hiִ0"0E`dHZz@)%JsfP~?ͦW1.-e%QA cb?Lf`"{x>Ă }%uZկj_vn ɥ2˃L+;ZXKg_,'(\soN@rghw6 r)s(20$hxF?c"&QӬPa"mu7@ƒ UñaEKG iӍ&S9Ym1EmʇÚ{$Sy87{Y<'ھrCThPe=99~2]e7\[J_С e8pPMclzIr @ )'b Qr}FK]I7  =H8lKW c8Q?aTxw\FR6A9>xZԜ.>2\EIӓH䰍7z\b=: ` f`ž޴BP-_`ƕh Ouj#)B"^reU*DqNdcجl )7FM|;łOӐWHD2jgŭ2~0憴Q6)>hBD0x8MrǎZ}C| #iAeag,Bzq (8n.H}ӓr2 #hN^(DѰUD}J nUQ0U9ЗCrAX YBbbq/fK g#;YERi7([~xbMbAjTLK]#`b'}~24 1D/CCpa0U2Eq$fl+t˗A`yf w FDяow)I4R1u^8NIL'MAid@a@"1BRO`N0>4'Vb:d~O &_!*ŽEV I!MR AZ7{ӪhV z+6 a|i.mkDti.UW 9b LL&uËXdE ~0%9ɠowC!ix9010ߜ lţzJ&'xA#GB|ux>3&tV69b_ ē[JHN>d|Np2NSZB*H\aJtS%3N cjbN3(v]#ʄ>dTpn@-(|Di &KrCPG dnd9BZ*?VY4L"J;mZS\&a6rqqNrl7L`b_vsLB171J)OK (ACCPoI5dDb|B(DsqW=@W~6oÈ D.̣f M?BQv+~x( lhVG> nL k9*y2|_  蓸dfA _A]Zʫ%{@=}ِ]m1R)ߧ<]a&'&&JX85s*wp4$KD'VVv uo$ rHm,x]M貝n;}*T]INN$}-%D|@ oYK!Vk@L%'^s}Ɓk0`A$I$)!1AQaq 0@?)]-Y(7Zǖ;6eLu{9/ < 4OG[hN3kdتfNX[SAG\@Hs./ޚ@oV7gcv}3; 0q.ڃV!hH* wv*^SPJ{%zjýX85ޯG2AY$OIcD*"C_4L1PћM*z3&F[&ZR 쏟5Y(G2AKڋ*)#%1<ˤ}hn^7j5%l&j.I{UVG֚KQO_]?{RNb7ͪH2o%tsڊM\"^9/9rt/ڦg9Y.Amk ᚸ"x#Ҡ 6׎5>$c FK'LRaƔ c@ҖIԦ+CqH {ߣD۶&E5` 'ڂ jF9K(J9j c憅_DW {N) ;!3J61>+<4rRJc Մ-4JgZ9-cEdclЀ6s~F-ϡ~jC gꒋ>D^p]]kPIbsɆHX[\{E2fՠ`ѶB4|66-M}}00\P47w`BD]QQtGmX B]ζ U03}O'M"fdw6l[Rn҃LyՑjDkR`*t@>^'FSm$qI6Tti4JsDt9D.P\؇j`%@V ֈ23(Јk{{Tr1N)0#LǴT@J΅E fx8u{dUץ3^>h3-$r$j܎v/"$K;N:9_JeCBTߖ}٦CkN6Ik?kV p#,G1 7^2*d|(DD~h]mPTOb1GU}h6y犟 7&&5|&M -ކ6Xңfԩzђ?ҤZK&X؎/JT# t:wI$3M UqI'J# /9H%8fj63[KQ5#8^\7Zwtͨ5 $5G7 N:ڔfE!j!׎vzR LYM>>4QL* 4X9< X4*C ҌB!{$w jvYDB R k"@(IS34q$qZ8w6L[\)kLn*NnqB <(41 cd3EHM x歼I!EdBDgZt[UlmfЗ 7})١Q}Ā{h[i11Z]P:I*V{7R\[K^#Z%s|PEAWp".b-i4YV.q9⢓rM/@+ u[h;.8L5 8*+܍WK%RbE ᔺki .qjr;Ϫܚ3OkO ?i] `]HLw^?EZ7ܼ{⍃& 2- Fqq4hZtˏXK[ ,rLwPnQ0@X,GQQНij_␋IPK>9mEn/r B&@I+2q>@eVovJ&*x*- Ci7V C(kN"Uz"p{T8;nipL:[D(Z+J9f)~|ڀfxEB>4oIww`oG5$1+␅b#jf +Ih:284,{1* LoU(K*̃_upaO#DIץAM0G֧d%)ө:>Rhg*3/J2Q7_GE~0h(!1AQaq 0?]tL/.jtLWJD5ɒ~?=h=_Yh4~VFx"DYeClklV>s*+ 3L^NbHUOGqىE/ f"څR_XYf5 iK(X/ Q׫QF~}˹4fXWW]F+Ch_DST[x,AD̈em2SBMQy+$:Tm3GqdV)He i(yaKDWVQYo0#g #oXUX׃G`??rpb+;. <%Իfج-yEm,{qalep"Ef1Ec6gzyEa,i`»TYLEh^}?nXeLhs2"#AͿzmחX +k5+{:Yxnm1.`Qh=tJ0+-NH!@7ܸ:MS~= eҪ 2ηl @NF2`hmYdO8rr_ lfs{ Pŕ(opwLKrM} .fq*25QEX[]<> V #= A~zMh,`m7ˆ`]2!ce4ElíTki 6LFCZ-N4 Y84En"fWdG p|@@t 4]sTFSR2jcH˽cFg1\Ab5 f8U[)vŗՖ;kse5")ԘKSP *fzK!2w;Jס2ps7 }%VZ\=.l V^q.rXĠS" (`Tij7oHB%qRU6n9{ #SR9<-2KyS QiUMYbD.~+g RsBc9y {BGyxi<3x{'xhp+_XpҠ0 0kq_NI5F͙(iKwwpAe)Y?$/XW &MIcIM =1;"ʗݑ ˺v 4H>?|q# & li^F1D]UfZuiPGϪܣQXx֒)D/xѨl EE?ʩXy<3_0q(kvV Obl `EtHfԈ4KoK#rTa]jBY~qjZ"o_axx`/S>az`#cl?DG5<(!1AQaq 0?2Ⱥ?s\搊?9^y&!g%~lz޸q~fz?BNJ̃Y+S8@#wIP E.ˆQC 5 1H8R=ے\4&0Xs\)j /:+o<0;`&ǧqؾ9o;&p4;t|-DhLU8%7!84Qp8e!$fQ|$A1TTJ/v.F򒆱 EqOz`Ԥ/v C' ;0+7((p!AdSc%+ӱH Ȋ@D ׃}+ةPXK2~0|^NrҶB"W}ͤnzanĥ|BJ iPU.a8wuI=h; _2Jq`\ԵF6^˕7BҮdnp%0HmT|>GXRFޡPbl6! aKp*#1'@:q9\×YP0(_.Cdlb _9)&ӶHi*Vʫ&B%s[BhR#) qW ;xai3`!}mw=y|udD6@%Bt%j " nn=Kdrה'T A&u`חBײ:sS_R5ߗRv~fRąoe`8AGj A C5Ma:8t@);6ZVe3&o~82K;\h}x$Et,$%UGňWbP*2ҍ;!a)$5IÊwzl#=d;TﮈfURaCoUdI8Y$N") VY[ YZ^;F2DJ" \^|zW 0Qܗ&v$F0֢=9/-s%P\I[ׂS L4'QURDl֞vu&@$F@ 4RgNbP e%`x%QP3[60Sõ3HY㯼\V?\V*Ve \@adI/EP^AOabwL :AxpC;JBp 0@T9ѱp8h3 hQ$4+4 >|}s 1 r^.O~VQhoA\ؖz!TUpcݍ*PUJ1XF:B5\Fwc<"i0*Wa "FY}(ӪRb1^rx${}pz"aReZbY|YHdx'1@+KL$j}|>8gw8,+ *WK~$0@Ȉ0i-聹>Ovsp4ǻO $}H#H{(aql&M`:H!#EjxZ?!#Ed".'K( n{I񝓈PIb~KqfQ^TdL!ɀif ai8"e A 拗9rF~GSNzxLj@-u' REP^ d(hHALQ.0JEGŸKDՀ;؆ gB] $P'l `O}Ł%ޮ>'h;#u=+s k=q U deXȉT{ZILUڕ`8+<gFSE{%Ƅ/(*]SۅrI g~̤C V;![2?Z|pmty]@z]7 m&`#^pqg%9δ:o{ۘ%f` C8(ŤZV`!{OP6)̜؂" uIxy!D!j"zieUAc beI.G =i{tr0p!EpY, t -V4B7kaH]r- 0+5dXrNݠ.\O,d-~aQD7]Fӊ Sf8xncCaP4SFv :__Is!~u tnQz}}rU#F@TՕ!ʪKX*ӝ\CF"0#,Cv*{!h N:jp߈1i# /rLsc$Ï%P00.ql43 ߹~ l*]cv`8&*%aflH e*<'[tQA^"BMW )⟷uBH*;W]i=Mfѕ8UA2{c+#0eoYuڪba ^C/C; sYgG>_9W2 >ߟf|F _g `N~F%>HʨM)Bf.c0A0[Sm ^<$ErPKZ+ƻ/U KK,`&enRᧄ/Ju r43-0mD,y;WS`C9rȫsq$Tߟ?7Ұq0&5f`ؔLX5^.pjZ oEBSWiE6,.Պvy\6f㓬:^!@ ) N&p`[xrwFmvd7<0-G tu)>N^[!A5rnBP6|Nj<:(I$,/,Jbi0fʲa@:67@Ў>[T*&E J G@סOX>S@w^p ҟ$f* r@/BAKN8@l@B`c=fC1}1 -!v'$Bgrw jE袺:9ri컁 :p@>$ >m~ϵ<5"l8 1r1N&Rs<;!E@OF)(z¢F{+VB*W`B@{|R?+?$;>85"!r^=X@?y#K \M& n1{$8DJ*Ù5E;!奅@q4X4' 2cdvz-og{-bG~qC! ގ׍eU8 R5/R);GC CJbó1f(i|8F0?q2+ǽr8-N WV1T #m rH m0t {4Zj|ruWe y^' HB 1DL5D^m 8jVjz(Ca1-ܱ _~NYmf8@^($o,-"|p悫faCR?ߌ` f%ЩgL0Iq)h)RTǓw}bFG#YO;ϋ'yL.P K*k] |9 zG剏S?RIp RK(ߗf~?Plinth-0.8.1/doc/images/raspberrypi.jpg000066400000000000000000003566541266051671100200640ustar00rootroot00000000000000JFIFHHOFile source: http://commons.wikimedia.org/wiki/File:Raspberry_Pi_B%2B_top.jpgC   %# , #&')*)-0-(0%()(C   ((((((((((((((((((((((((((((((((((((((((((((((((((( ^  !1AQ"a2q#B$R3br%45CDST&cs6EUt7ueE!1AQ"aq2R#3B4STbr$C%Ds ?@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ U%rI-mپeld@-d=U1.ԈU2+s; `}!U:u+Wڮ6@IQ}#YpEb T\7NXNRyWH-Aj+cfQS8v7Mf_>Yo/:Jod*8]鮒jH|AYغy$clt)B-O0}GYҟ0TR>>ew[H E$``X>@ҿ5]CP*{DSHs;|+kt)MS3OQahcLed8}FY[m~|$C7PR÷?j]uq^[:Jj @}ߣE[ӯJeI4O<̬>O~Q~ogJM)O+`.F[RxCfZC<Jq1?juY}kv$6;s GY[ӯ5IQ-L#;e/ڽ0䊏z7zKK2C[n_rĀI>|I~g:M?BωW_ܪ>1]A;8=.g:խN2?+(gv%)./ś$e<ɀ.yRb?)%}2_qDUY%Xω:ao_jR[LbmɝO$[gC'IĶ/Ap-Ts෕O ,@KY}U#]-;Tل0G%$l K6%o+a* wGܐUI$K>'? rxp?2`Kzy\~We*K3 ȵzgW,)G꘡E2㣑AGݡKTKӷR}u.^*"4eqFlO"ō+ I4y-ثQc=538$1:jX_!K+GE^(u5QSAU270>Y\C3eWn_Shp r xޙI') ]}i=#"{ t\>DV;%fr[F *d{7ix%|?RNIj''N_"tkVoߴkJ_"tKxu{c̤`G 4oStn=Zk+<[IMY%%=L|B;=1c鎔Rɕ_-#F/.ZIgdY'jغD+GJWKMnuGWIg?U8!5|WБ$RVzF>1?]*䮜X7͡ ڕ>)elc!j +3]hߍxtgUo^ Aƺ %>jn^G>-Mtb9zK!}]~.k?OuV*"W@kI`UfV~VFigr2gkddyB+TН\Vg1B,{MQUKUAHɅF0DOdiatZwHM韠bdԲF <>z& ԔU;Όd+ԯOW T,&UtϞDw\$ءy˴n.~V>r=u0X$+uhO&q|ܼ֤z~ԝB˺S~&C"y.і&>9i]\}tE7mi&j"`v09W^0WQuW]|Mծwu]X~@c.Ԕ.V}hVQ[%UN@Jy[׈ CHhT@ zMhjJqRN/f_tL-CY;J#U(b?Tۧlo<=w/Nj^xڋˏo;zMJ6Iezqy**˕2U,0?q'hɭ|pvumNtLAMHuiftgQ[;|m@z{83` >϶(NUd[ mΏE}'=@ E{cnSȑЍ8iJ ƭRFLMx tdկհ E|"wIK*fiSPo_9r]^q lȌ;ijJӋٓR{e˨Wh2cCS' A'P ̓-О.jhVy5 dN6(2H)1Uݻs|~MSYsQ֭xsiбIOMv"&8y <xmB$f:C#'!q  NQ:&cSq:LW,M xQPY-#Ldn?)>$#+/E2^~z&>QH_ $jr{%JMd~?UTtʈm qbN:RN/fVڪ/3]d5&Z n9i9:Y\Sks. ) |I[Jz@iVO`;ƣJsyӊ8jIxsa+8.2Hm^Fh;'[VN<>{N}]T9Gڇi{֦:zUg1]3^-8*kk/C!pg<|Ƅ2U2,pc 1VH?_BJ7p#F yA@4emԐ;6[tlsߜ $ GpdnAX<'9j)j;l8c]HtM$k%Dy }xdJS!QSN4y^"~x{nt4rhw_Mh'䰬ԈтH?܆6_0= >Q~d#F&bF;6[QJCvVc݆"X鈋Q5) C/L>+#hi4P-r}9tgHϮ 2&p5e|O7k=}ڑ(ҁj@G1\z8+3)N]\Rʄ`p}ژ΀{VW^)RDCU)pX'e5y\+ݿeʦIS pNӷ:#%%t Yِ촳\zĕ$A,Xr}ݕؖS&܅UUyid.2Fw=gĔ?ZvƟ*7;~㩑 /}!Yj+mRTHDxwhp@8=t'7NIf U U[)wLt]Ufq Ye! vV" Nk)0LVXA9j3;!79'Yskiɾ&F$`1Q:#M]u>m`^Ώ7P%1ҩe`~^rsMA]shw:1jP2c2*X3BY 5u4ԁ>"a XW8{n ΞOOեL&M[QTN. $\%#F1=in +,s+@Uٙ88ƨu5 qgWٽÙ?p>W]+յ mBDi̘V9TVn! :v>gíDYaY'x\eͷéz 'f,3+ 8FF~eX_S=uΣ+4A$$jr25c%4g-;3HE5Q%K(ue0Ѹ4I]a> rG5X'LCUV;k)*VEJ:k1*. ~0Fu!t<RSV˞šĮ7먬|e,˝"ђrj\,\%7vor$׷뛕cԩo9Y"J$#*oύ!cDY8q΀:PR;19Pgwq8@ Ŝ0ķsmpF8 {4Wkn57 u -E|uer;zK/DH(l{:zkZNݪFI 2ltZ.t o5dĐl!AVpH>jZN/WZ */ iB-̫j~PmѸ*|H~Dz nRJyC9%_v.@y,zDF#dxqLi\k%u!q25<Ԓ NB1enH Q7sj$9*L"XhhP)fiO~mNmzMLѤ8dq#k);gSgѾ#:чJМn;%taUWTE۳C!I&UZMFc)Mn\<*>@Qu*g{#ؘ+˺+eizJ 9,5%lQ,K3 FRf8zm(/s;ӽT)23GqU>jv.?zWvk4'V)C`ц :1)kd .5R/vD؅># K+[oRyɁWԝNŗQߪ TF;T\0Tt+%5tLR2`1u;، Mn6*hc "€J̖~%,SL0;jŦ՗Z :#;I >1P8hP* )t,8}>SHw$tPU[*A1-c܏5EMYRqqMUTw;Bբ qXTapxWpǿR#^ŕwa7JPG*||{EAGa5QR-9/ `;jBrH#օS#ڂ zpGߨuqn$2Ei$ ?~k %nVIqP$$ `翶(Fz WD( rhXzzI+IIJ(B1tRVd#5+w][S]qzId _@ƅD#V$Qܱ3z0?}ͭKx]k7l30܎=*j"z17\^2wb2pGu]XʚmcNHΓ[$UU̔SSxM.zdUTSEakdΓJWfa%^Iŏs񦕉Y.RAH0L]Xqii%fBSjcܪgp$3vS4F*;+Ap >^dc#>9w{\UҠcGm q뤡a!H~}rvv+E JJ9+j!@>n0sFT&W,T36dTϩ=wl)E]\*#η,.XcI%SW:5RϚc#sw'4VDvoY%Rrʞ6F3R؟=¾OQyN3tTv&@J%S 8j7 gv_Xe%|mP䲅1A*ܰ]XHcxnM ΢Hմ2TTDJJTJQOr˓a+T;rnw2}y?JzFۗ>&WOPWHJx`>}@ ~8ļ.+J[枍|5^жi Hfטӳ=gS{2斪HG:*bfU"c9misjЭazUp0*R ce[dFd^>T3knynsXxe?Vcdo #]ytoLj~46ܨUC8)B=8qZznIM㱳T{YizA9C7?Ԏ‘uuU~6-UԒ4J2/dLK\o/*"(4Ou\}M>V VfK^b*vD>Lêr$і I}t x>a 'Nsq7 #E 3q2G8G˵ q$y0[,Yw?; {^;ʲFCc 4tU/qDT3LNџPzKr$tŽwf}ƫ%CL ć81;%e$m΢Ds&!B&r #`Qzܤ~^޼ҢY݊cK #?0leH4iٞ5EGt޺&I%TlO?UlH+-g'K*naSY|wJY;UeN\SۙWH-VΧx}02gX8''auz6QnzǕ[_UcVm=|̎uq}zNFs09:RcMQi:a"U)PТaRIwyYCsӕQgQ';yCO2-96KҠHnÒQѡw%$~8d )_rtkD/WZQy -7(,[H]!XTӨ!6TXͲ[I/B2__2B/JR~.>ݶ8.8'sAbr7rGu!2aJ-\'yIҔQuFT8a\| `G\RweqA M9;#ߦSNih:f =j T`&Y0HߓgEߴW,tY-w J+^I;wKDOwV9oMMPu]`\X-}98%[?ԗ?K\+=jqq8q"n7F>ZtIk/в-Sp=04fLz;iwmT6yコ0GK2\vx<^3:i ,=j#?]JGyngG@."ƿGɥy$ QrO\NĖPSyhjis$UA2Di_.sQbR uo uU/2#r#Qn^zq?^T1OSiF8S'}sXy㤍yRym᷁[:UGٜlʟ<5j{ity_)i*Oy.d&.uNQe:WM]֏p#'VJwZ|}u2=DI&7YscM (:傖!EJ*%ݿBgb*iΊI:xIK$'ƬزINmG9b>lǁ).>{ 6tLv=( S{x g[*X[ ҶYYTTxkY7I$X 3㡭lF}?Sk*#"N! 8-e  kL}C$)]bDLa@ N9?y̛SXvmE]. aU $u'Rk]t?OebYR4v`pO ~Xj^ z8j6:cMR7P]*ᨰtuʭg 6;R0SKVBD%JypHR"P:[{"Z.>!@twKUEyTą)D?3R[ qNnQTnU ?D/t7p;/pIĄ J"Ste{j%Ǝk-x5zxbywjsfyMG'TtOj,Y?H4$X12gJQOs[ ]o]EnVtQu-tV%PqA^㿹U$Yӭ)4졋M^nMOpZj9f1; -Ku/n$A{X06d]qݖ HM %94]\~rmtvS, *Ft29v1Œ`'~EMqYUc:I[G:Q&\[x)N$U!BV1ݽԎSKkIG67TK*Tr>6bw#`ܐsBm+9))BPn6)(mix<Eȉr^EADZcDMy%q(&}w!^.7lI$iS4b?aH#=#K#n6j_!$;w2=4s#R3جFeP"9rxדΔ#Fq0[MRSq909MHOj)3>w{WMQ_!(%3'`%A#F)4Nu5T"epq݊QVK]Q)ix(raID8ilz.Q'@u|5Tgm? K;xq]t.W}z9ޓjmU֖U<^lf~7ooCP O}:KJr~jw XR F$3jM2BK,_ Rא'h{- 4ѐ8eS} vOCbiYq~K,HZHݰNy a@I#qΆ)W8?f?,AӷzT$sݹNt5x蟒4wTY`T?_4 o:2"gŝh~_9cEM~o~9Xͧ'4e*t}vDW|L~KYP>cG4eKI7/JPGfeId3+6\ 8,{g9?#OGaz(KyJđY']#$;G#YjQ0ФN$-Q6O[;%sAԩV̊8JuY-y SG`#֓=MGWPPȡq>M} fvE|=yRC NŤoI'w [QL)隊{W:oqt298/'Qrw~yZ2QxmS,*ʍnn3VIܿ ;h/R^qQd*OG#=iD U}Z6*Tjk 988[\op\${jiXZ'*AƐ/Uy!%/Pl$+\cg-+Jل]x=i -9piKpA՛l |GOQXa#x^w]ս'AMS6i)YZ:H2Hsx =BtYfsX%EM;([  #h,&]-kN_-;i9FfC{aa%κPbG= g3n_lǟ~H^8wP#.{'DUSHo#)TQz)2n_%JVZa>f@J#uƛ-Uꧥ*%h,j2!I ڲ+[1ΓOoЫ(nؿBY \BgdS>+ct(;i%0MI[g 7f`c]IBRd;}UQAӒ)YgRH=N56O MGrqVNҴDftM$*psBIc(Ռd+p;R#:=dvKm^vm'uU}OAcnkZ<A>ELVo<ꢨ,mCi{,,m:ݪ33*m]==ґ'43L4mmހ-5^" kz2S0>R8H0=]9{zF9翯2zrnۭQdI[jI=4$Bjbe5>*8ꊸelR9*>[1Wgf8,=pFKcLtSiUsSN2/U\{cF1 xp8r1iulV20*z wG UT DŽoYooNXSݨI:&kJW6n+} *Hy8@$>֦̏sm|B* %5t &jϖVPOI#jT`ӻf?EFfݾfA0qkcb%F%ˆ@nV6+#ߏ>jQjNlKdfPg=#pNm_^ewSXt-<#r;jtS JfHKKՄMVzwAF6'1rsQ; CսĊHwjwQ~'N!-Ξ0sf<)R8pNpsqEb 4U}OS2,Y A8 p=r4^<]QX: 4T$Y3b(`8Һ0⢝č|Px N" YVE߾OߝC~?]]-GoK\PTUpq㷶Rs'R.2C-mAR2Ĺ8;qgevK랬X*׏"CppbzJuf՗0Kbj:vbS/*r;`jN7֕< t)nH^Z9R*Bi%MV"(IC^O2nq^ ;Ҥo+U먷vWU깥aCT=Gf{ r#UbAV[_Sqi)G6nH(tnN!mv8ϙssp;?^ZNOq%H+< HHY0rJ$'rM[.)PhJhvWʱTl3"XMEi+2-hAkk9ȊX@#V9'uE=AEK5%xIN{aԯ%4^;4f2_?T"u:F̧Gq4 D*/]U\c+֡qϔm<=㧫:2T[)#wo3v?d1ݟǮ]$wrCZKtUyEfVQn,s}䁟lcJEnSn*DMſɩw D=T=<_QT~ԋП뤶޳ӣ4^TI F#$h2˒UlL4Sݶ*ik]Eʆ;Ne#Jn["4ܘة ,ѕ~_`uAI_?{$Ҥq[B o+/29&X)9Cs:}Ugs_7njXyu*#A< YeXSU_E^*SΦK_u{ ^h"-IPRvr{)& i6E m gm%v=PJy֝)֦pbi.40 XpKceGlZ,q5h?FT8׫@>znF Ftô/) :v?h/xm_#J޾C&S ;˳qb@|Ñ{ƓD1qjҾT5PpF']ab1c'>dCj_. ʦJZhx•ppѩ>:Qպj*חqBjڹ %@}412/c/ ۙK 2$Žp;OfV')z:yB*F n] Яi WC<.]0]1En-+O'mJW^:iu# l凜_jZ;P Z1o\H[0y1J2M%e}U&O5qnx񱦥MnñaG?~Y %8|u3 Vqlk3C^P#; Ymb΢_V7*4Juzq%Dcl2w#8p3]\8]CЩmu|,^L"&FK1pzRMOK7S tJk3MdȨQUH\w}v~# id%KQTWMmNH#FW [2MnE] -YZ 뜨?D0SkFZAҽnUFޱH Fg>a۳9m.4C 5Q=wuDkD5' 鐈J+l'~).K֟^gT׹!B6S{j/X2攭z۽DL d('=RأRҲ䊺n|`9μMhѓ wr/M.LNxE?=vPݑ,E=HY*%=@qjsv#yj\tYZ$D)NY-cU)$_ ꤛJn[ ['r,۬ijiaahPG!Fq#TVtr{ۥm;mUTNʨPZ0 s:.axkcjb-@P^ke#|cSƥ-zRt/:kmA®AP)F~Y;9Ɔ'Y֯)*fzLTD#`CHGMIMIIva(j=XIuFS$;@T 0OAO=-?*)T3U3j8$RMK램7y=FRG(32Sv̼ȣݴ)>%tTgYsheie 5z~pyQGmBGFP{7:Kt$JU8%vΌw U\jt54SZ[$ҳ 9$;62&H#n"FfYGP,52.E#af`HW{x:Z~g&TdTֻ(ٺlYieZO[]Ku P35vlXXumY+^n Zvx:wD D^;稧MXjREL%WȩJǹ(@mC{ +[${$SuUxxsׇ؃z5JWli8pb,I'QJЗrPERBz~XQbʟ{'[B-뀤G,?Gz6)]QVޭāQWz*'Sz^ΡUY$WtgrrO:rZbFYZW]jnUwhޮF%S1 n9˥W'.:~m\y_7+2^0#eKQelDj)f:"8(w;%wc^b6{m}HӖ+MÖ8$|ptV`B3I>'% |Gy5/UA28<;gRI-:o Փm5o27ZH\ت;I*632 άW(PᕙTIQGsKrJ4-l8VwY h/p2G RTsvlmޠk3qI%8* y#00Un}#UCpu)~o7&A1U_(m\89>E%M/.8Tq|5<#ː!psGޫV92%8^-r}[x׮oʫ|ajP/<E+b:]\VK[MշJҴqTE !QYd>w'8ݫ#F WMӧekj{2սSn'uY<6ЫH$ 9$t[zN0H\qF| GN\>WY\d4Fev灒g}z: hR92q =4t&ƭ~Z.i 3;A9IA0Rѽ RXTt|[}tK/>jw܋Wiki!Ά3B*"IT~dG}Lw>'-Kb몊 eUb˟ SԵWƊj%M~՚z0LB)ŸwqߎOY+xwMY5G\mQ mhgi+e $eq(\瓩Iہn~WQإ%4tS$, GMh*v Ǧt#SfVoeo~,Զ^FD b[pAVNp[-5=Һ9 Yz9+$X,IkAJ* M؁?MݡV vZǗ[i9#N1}.< HUp;[ETmd^|I#$qNY夡zB1WW GC1\ D#9#Ε!$JrNɕGi>muQ]LF$RV'͌Fx#RI\хHQ :^.FuɧVd ۜ"N3> *]d[MJhuIkt JcȊDNrw6BckEu)Y'}K- |bY2 ぜSQr*WU'~6zvYU.8OyB Gm8ŦBf^޼?*k%UYQIm Y%sK-$_W RIl1j/]+\ѝ۳w12hJ u=Z|m4ҙҼ3`wJnJUޗԓvšܫbEPf |+0pמ4IJR{K/RAdb-#<$jA$pI toUvꡒ[dLC!Aq^ Mꖞd7|U1lvޜr|T!5_QtSHEp+cPrќ:KiFkn{wΙ*K%bq#шzcNM:F4eu^U_Ou婐HUQ҅ӱ"nW~]yuee2E[VSN̟,y%9%ApMtdgSqLU-A= f*Z(8B}4o;W m3.Gukm,A-SeUg=5]Ԏ5NQF!Ptv@TJK} z#jzF0Ρ*'hG os)8HKW6-lnjQtj*䩎FMT0;0l߫;:XArA8 l+ԌuMKSE4CMknMX" XrIMVdI4}Iҵhhib"(ޜ̎(#a@pNM]'N3E<53 1AI|`{6YMÜ| Xdd E5{؊Tg+YWLnJ2L]J8T{ȴӱb)WT=ҽԕ)uVk$ͩ[JeNaN xҒruUedRF;66X*ߘ*{d:IA.&TJ%hu4S)`Srܤm#TIE Ӌ9]*"?5!brF?}JLWDκm!&ScMnuӧ5JM:C(nantl ߠ&;'e}/h0 &^K* 3".qp@܁8ȕN^2gr)'k3@0$`w233 '79+]ǃU8!9ݜr3&Xޛ*$lO<8$1峖YTg#Ch Oy@hnxKHݍܻ Τs|AV5ZbpTH?~CIVUf!G `>4f޲];˓I5D]U ~cK(Վ. gБ3Hn[=}- fERd~S&YqJuWCte= l7 @RcNbf 'E*|19QzvI7jjf(m?͢n DެgyFcL]` cKT1qzӪ(!GG=hZf'=n9@yET>~Mێ1}u=pfyT%_{YC4z Œj*d·r9ΚY-ऻӥ|yrXw~0Xr1ΣwkzⱵxEKGw*hĎIAܤCoM;;,-NjFMGY$ խbսP]# c'1}G)mbUsQ=Q{GLݾ:::Z7>MtbxguMBeC}6NIԓw:u9f x>-2J3 !rbI _@@rw& ~\T>e֞WSFnC^:T6u@=,SntRj_PltI$ j!4: Q|A޺F,GG.vjM:OM^a4YO!4S 2EPUU,7j.ik/n0'IlGᅩ~P̞JISmWVi>%_}Ir 4I| c:c!q9lv:<2)n`-DxcɓZ'qxHo~ёOh?I[ ?+CZ!'4qdd:yY(PME{ i\hT0e33O赸+-uIj )v*GUJω9o$00 ߎĩTy7bU%~v>QI#љpCeb`=9'uM…UD*!(rAeAff)6C&e2q&Wo\e7NV/Sb4h{t?ғrjNxoDk:D"1@QIiGz}% Vbt' }jgtB\Ƀvx [py{w{IUA+ic8?yхR#brvH}'!`"@UI9@ GuQ|ddrGonF?4Jcwc yS[* $!\g8`Q^Zjh/2e)xO$jJm#?KuȽxk@y1`|g'tޕwg.Ԟ8-=4]:.H.\_i=N2qyKVm OF&Q&rifBkzM2E.b;tm)$k.(bR=H7@ @isM kaԌS"YjԊ|5_i'1e}tvoM +3MS-X$ LvPꕞ-PʾJGMܬ2ҞtVGy`Y)MieFč%b?!Sb3GRKcQ;DKT5tURI(Ē#lQ ;I8df65Gh./]-O+ ʞ5#4;7N P *FpA,k` T.+×"tkfjc`F&s}۰vi۳?~mw+(VuhdgQ\hRU(YnMf5+C&R'tjYiYMWmntSC%)OǑjVV#(D蕞}U ȴBQmLsR_:RT[ŦՕ,i[l O+btⵗ $p٬˜5u:J)18ﰾ擳YqS5jTsn޾U="]4ZKT@8pg XlgF] -tj{tO~yJB$䳃xǮ*{&uTQ9HܨYr24qE:w";Zjj0yH,s'm4r;nRJZ!j yn5Im#m#zrI}CQZ%E+I+]RH FCw$ Yٌ7{,V2NbףF>'m[mOP[BkGvg;0:m4Ygi.>  ^JteO=>"Wt|.NKҖZ+2a*2>ClOHNqijjiR噽.q:kɍRGҿqO_>?#͇6;kZZh.&jI+$"(+:>N"4}ƃvs\)nUN$ QT˜sSnvh՞&@}սGzXQWQU>H3vr:v0GUSGEe)I`ke/NHU9;~5:X<'f.o+ P̊.>FRѕ1^?@[:nHƸ=NrA>RL@pfx~AQNB<j i8N2NwzzDNUk'BTߒsێ5&ujT0[p<{t%QWP MҽoƋ1_, ott+EԽʺTX&W# @᩼~k-6Tc j*YIu]Kt/hκB,,Em)Z^L_OFi+< Dp6.$@P{{EJ͔SUUکpB:4@`=qIIܶUqj:N[ʙκbbxAo4*:vG`3=:K;2MwP+h'M=KUȂ4]3Y_ +^ Z 6y aH)ݸ}~4~VARH*s?^;jW JWX54AN0{β,|O3zGVJʺ{TvܤGgβּj*]#غVۺeI6+kR'ΐ$Ϧ$ߌg:~!EZ+[񕡃,7%d kAIj) |*Jeщ֞/nЩ7-4NGuGUYgvV&-q<5q*t(B19 g)$ewEǒѰlq 4cԋڏwy߱K6R.gk۸/SRGBINp<|GI avcm%l~/: hrvK"t#OP(O2$F gp=>nvwBҙ+_P‚nzk$&mP&HE^:%=&λU]*fa,*T>{_zEZ{RDG›z_pX6Ɖ}Pyei$׭I;YtS=騚@ +`r ԧ;7eJm_e[yu)kzō; L+c1{iKV~U'M?p>KKn>*xa)Dݵ7%u3B$~uZg4ԍ_afr32ы*DBJڿ k!HX\@xkЍDvjgWdޤ`{jIݜr,:~'CIU-=<0F[rB<|N)8 Xg"5'L?cLGK% {c: =R_NuWY!iwUNHXԁ pyB<9taW<ۿ5tQGiNYGJEbeėGujԕ0d7)#:qd!S11vN>`Pkmu}yReI*˕k_)Bm][_]M,V JP^Xz™Hn'ϦmܺH-mwu۴E.H)^yiH'px>Qv׮@qjefFTUʯl~ |T ui,$ZU.\$c>^y?܂8 _S=Xuk;GMO#b\.a_*u̯T]8.:FQE|FX!RVpIUǖL:NM|CY›z[D$KEܛEʼn奄l:Y^ N9NtgH[Q.q7ir#syi( a I1WÞ1WfDN=g#'E- "-I(?^3꫷lEMsZ|#\!sC[ZUu__ұ5<?ۢĺ|I]eiࡢy8 v3Nj)=`ԔZDBH" JUFAFb88mYtm.½MnZnUE; [ҡَ0bH$8՗{3KN2U8+:ī祮6V&:8a691uq>W#x9y2oFR֖pxkUs8{H(*[e.~_`˧l}75y:FLgXg ! <餦7QB0Z~==U_z])ᧁ#.O:,フJY߷.ΤD(nûr?e8$-y#BIkq8A;PbmMWo]mu3S-Ί3I^Vij&x&ѺXTp=iAU]d7$ g;4Z^QQ]kHE=ʟM HP1$v)$[SeOk5khCꮭЗ )JjZ!`l%۴nSƴr]]N+=F޹kW5d/ӫEd xq؍MvG٭KnJYYQ$$6 bç9ԫ^R]]t69S׷:vKsC veߕ9]* P^KU3pGfhI4ZE(?N((l4ʎBb Z#5Yէg;)S I%4H])s _)X4+[uE9Ķ}e%WGw: O*O쟘59^Ȫ%Z-|Ue=/+P0~Ա(VFWiZ25̨V=sɫ4-RU;DV9d 9Xˎ>ԚcD! @h7Ձ#ňmI4y~vM ^yU"%f@sFS3 1ؚ[Ew>dZ67!d4jߊ?zG|/VDPƚ-D 8RVGEsD_֎AsP,hAu\fs֗SSt ɍLw0B\E&X]9( E '*i߃2ԣpt̂@ =5\CGs2Vk9xb9x!2F hKViU#Nνx[d0޼z薞_RURnj@&g~J\(ZO -4?3h|}tsj\}B28@j˔q'eJ No*LՈdJ&yHSw8+ vp$葡--1Y7+u(Z`Ӳ 20x YYprĩTQU5$Ry3CbK3ngE)-}q-b*;GSݤI*hSIce$mqϱĠVg{Ri͕f/ [d rPbP Kc*~WT*Xɰo2G-qAs:.yjޥx_]YwiB#={I$-T~Rj禥Z^_ZgD;& 699%< w'VS}} Z2dJ޼.jwVI}ˏ-Gqvy~yM&ԭ%%ʖk^P:TI7sQj2Jg> ֡zZZڶ>VK EI^TtGNZ^.3!*C.r*~YF''+Rz5Apd|5ioVa#KUSSv^ ZSܘ[,EςQ 7$n誓x:ˮ,6ޥQWt}ƦIS*ZRrwFO9>Ut*5]9S\}"GP:6!Qm2&@8Ɏ@;}UE})VIRwKm"ZT4huBYs0 iTmYj5ZyZfv EIjdž3$;;MVǥOZv jqb_љ)*qFfl3χtm?~S<髾&1R.Nm[.zzOnPܨkm`6 OA Wz]:JTgtXPJWh+*1T'88#>mO!]?~1(=1sݚՊx8Td/ dfG{jJm[(v}-9J+l^F~g[Z__z_s뿄S89*wikc‚8#F&18W'8 f X$כ+-m\F0$8Fu5.fƹStA%=MZmT27,&W-j _5{ІUGRf 2ŁLm8oK,9t}ESGTSSdbۘ:#obp%Z?om/eewA$b4K`\nƜHljTIz2irHewǎs)] I2 TցȠܩ᨜U_XGl8V'C^r91sIb>kdt]?t]0p#/;jJ26׸:L-Š&DIJLS*tUNz4gNG̯ .US,T;N1WbI.jm3XhnG%v䃫elZQ>s^VT[ia=.V9Gp vok7/b^wR84eڎ%~Dg(P4Fy cNM|F%{'J͎jCLBs{BXruzFݽ{zjN2_ej g.He39z3QOS|5}/SBɈookU.'f^= qT {!2E2o\׎ue#h,.״Qv4VfK8,}!u.&p޿Eª_^,V2$rNᮜ CbqRVSOA*JU|H*U$G[5\򻇏dNÐd]IJօ횆4yDjh*.DԻl:*~RFmll=q(.QQY)";H ]sbJ]R?``S=>ڼ#b!ߙUzĵWvH vγ=w0ueQKn/XDyI.=T> ;6X kbNkD@:.:T7L8i¨+A#t5z 5%+^|d ݎЩ-}w:C ԝ֩iYHBvϱkBX(MdVŝvsmU E0Ǿq4S֩Eq*z4NcQiLI,yFSYTcQRdK [6A;1%{.Wi{gISp]n imgjJoEAw]W`FCwG9y[Zw(YpYj~PNAub*+N28(m̶T*FŃcd԰ JF 3dyQy<Xaoͩp,w[EAYj ʽ#k|W,ϟ#!0v$goghbId#KjvPV޽hmJze5cMA__N׭o^}x2Ȩ|4zQ?0߾ LRM| MMMKIlmp3*S~TeV_,pFu{jvuj+go o̢E[tMζHV<V;ɈL )aC.iWK!3]՝eYlԇD{q:m%Le*eQ;:3!s5ttp5u;\t/'n$r9=8;n:=S٪:ruT]*^z V"$Ts0nt[XW7gw/M]"PJ#yBBl($ d 莩M.JVۿN}djRj UE7dC rc, xɬ+-۲X92C\̙5# rl "G!'thVUU_TwO `q@0tqaMwv (b?itOx x)Ԝp>U?i*r".:Q*/QopR_`6_-:n+PU#CC^Ʌ$n_Jmwy:đMQ FQQZQPI~񁖫EM:)egFA=;h[=UiCCQvL:Ҫ!?0`h/Ѻyv [anfzKK\uΥY[P8br<~0=(Cø #&rDʚ/P%N#:wWa rOjh (8r~J:*վg;u~ӑVICLIh5DQTO5=LGtsD]GcҒ%t_CS,ݘgGwPCK4u oO$%y,@~>X[;PUQE6 _oKyz,(39:J:Ks}#["ßaa2m\ԕLTD!]8.UUq]gJD(ThƞyorV۾2߮U-RUGB($!;aJlކ+Uss[3YUgѴ#$6G{MdrBf'5#&ЁAcֈ{E}M3:d&ؼc.Ot2Q^Qz8bk93ڼwMV֦|MxIP]uv t/ꊊz>d} OIyfDCrʶ02y M.63A_M)$8ZRȵ1c ''^C4 2NN.Vmw !4;-MeU1TUTr~^5s7;Z7NbLhIL<0N~&NQ`0VKV xqT XC< Xqx#]GFfYYS-v"u\׭_^qᒞ Ȍ1e\~̃lwJ04KStewA#mL&A1N linM||ʾh0]Su]PI2;F%SPPX5Ԧ,j0Q.Tnu&-5y;haT3̻ 0)};+)TSB-u&ؼ_K|-[P|PwS21Ϡq)E)p*Zm3nwn\('G}ѿUc#Cj"˪#T]q^zKVKQo41K@]n99 ]J2Vf\\mn^w+֊klVKF9( e!M$^pH!I';<'dj^qPJ6;`@  E7"DAܻXzF߶::tkZ'/V˄Uq3,S: H(N{xwZFxixywIN/vBsjͽr&TOP:`p rV߱YF@kUE10Fdow#kz/eD)Z2˗u%G!"ME1jIwNKժLjYeݑ|||ӌWoB:7߷wkh?lޘ-UM8,I S}6$.Q̒~u=*Va$QpUw0:-A_5CXϩOfQmY ļ^rs?:[bUnoC]>=Fɖ\M%KK aC}rOO:,cbwʳ 4dX}}4k,􅇩)!UhghܽN;(Q )žcw#b2A$pdŖگ 6A*1 _?Znv)R.wAy\pG Q}snf(a] KFZ޾1<:nݫ*z] RgڋINKn*3TI<}< >WgQէ# {UV$F6USb"Lp=Υm.x<,K5^ʻ[&jZ[(js?U8wP$2zhԔ_f) _*(,9XvΧ=TܕWy))*j5^8]7 蓻>VkcR旻=./n,7/I|.GCn*𞴶;?kwte1Uo!7T_Ml1 v8hQUUg}##MK|ͣ,g/RUI ȿqmg*\l|M}v{uE qqt(nԋI|HJ+ԑLqG IF|8z׽X %PݷP 'q~t>,GUUEO6iF5]tU^o ~ୣURĠWr U5ee zrj*LL Vi8Ǜ,:_tVgJԃ0lOyԜ[zJ:,6/Tm[O$jc0 q I8'Сʺ0{=ȗ[JT^)Tֵ Hc1+Ƌg;@A8 :tz&4k)MQj1cYp==FGڎ޵]"ALnt4ybSKIOnJa-?"9fvIzstՎn4F1m:{6rhKlI[? RG展RVgML&dONI>GjcM]BM Hdž!O릚ճ8JQi&W۪w^I[ ғǚ0ۜm롙+~'VGWme9p7C#m~j7EXT䜗 =m(f  ;rE'ʇ2c(x(#sæ)ɺ+\hR\"5FӐx}ϦkBH frI21dljr,j*awEp̝FF]^k੢Hj aB݆3s3E)4c5 8~W@ZoZ~^ڹ#6vhczh d#%<g2O}gvG̥+CӸ07?ODᖳȚңDH0=N-IIдj{|K|mSTQXjiR!l3m@NsfˢׯZ_ 6KQQӠU$ KOREQٔԡ㤳Gf׫gzڨ㦦]G1w?rp?g??-qY{z\uzhXԤ 9RX9Wg~&ʭG]T0nbE };UvC͞ N8,4TWjZk M H}G`8ΒZF*S{Uzvp[oKeˍepyXja&*FUMG}b O;QWkA#躊Wf'\E`3,ͤ!C2FI5}Ҥ)E>\`Ok|-ZzAzh{LSJ !$'8xYA$9Twrdї{Pڒh'$X1O!p}N3U0צ_:dU^$?CTjVHR\ 21^<\< zWӳ) [l?o9U*c9)UϥXSmnηJ蒛*&cO+[۟@u e۬'Ji(oۗp6d '6o$n?rΐt3-‰k7UM\Inͽvu%'JeOPT](5/O|O(@Sjns5)F@fǶ[ Bw"ff֊gC.A%F`s C<6k+;]Z-^;\ K5WMݥWt8Fg;rOZ33W lRYlddzK=}S_fy$k^տZ@zcb< 5=RcwaIv, UtUFcRYmȼh*3cܱ>]ZݣJ4` :]ӫ-VU)vU}A+5hSzo-YwWt֊x䘾9Ü`p1^ʔi;i[lL'n=Ҷo Sۨt~@ip NO_OR.ra4w 䔚gvFgx#7S4TԖXԞOvzM=HMPPPUA9=LH5kVU_Ƒ28=udW(ê "}@7$ 7 4tU5͊X̮Ҋi9q L|I?QBw!"9 'ܽzR<+1PwlGA0E\eټcs\ƨ1W̗")ڊ>#/UvWW 8RL,MEyFOINݙw)˫1bz&l5J-3|hdl3yl<qӶ}ZrEʜy&e; ueKPLR826Uf#z;r)QoUt+3IEgmú8qG?ڎ޵]!5( <ْ@U˒(;D`pVuz:iFwoig`Hiƥy"c2`̭9#$GMqJֺUUtStWSJ䵕 U -AHGmaI|CMKTZSK4.nNyʻ4T%$3d7< NRn ZH&20D}3ޘskSnֹtբtץ2wd60ng5B5Z:iiԮ<ts3>S5C(+xߢ,x:R|(yWk+CcvGuT{3 WL/Xb>ޞ.~"q}> tp˖8#Oj mZt=+Gi !WqA8N,"'? nw ɞGU Cx/C \wS;$?7tgsկ5J RUvmdpmܑJcTP9'#|TS$)ƑE1t Tk wn;ezNso]+z,WT4 R$(*xrFჍ^ѽZV_f|=[K wqbB z}Pos[.]9/Nxcv()Ybd{p}5= N/7 xjQٮ̱iFgo?Ϩ8t),bΘ;WBQ-Q/C]S$dr1ʸu%$ݖXUۄ^@kׇCtc$ѳњXڸ~W9?)mFQݔпfGZ.3HkUU B@Fd/BSoW3u,l54 ).őWӰ*YJwv=+«VA'0>xΧ;5gqzƊg_5ỊS꽈8tNvS3ё45't-=ygu0! yFsjӢ&q^_A@@O|x1$p=8ʒ)R:pU󁌲Ѝ&tm+*FT~0t[fFaG ݻ'5^0A,S`gߦNсLEKoC;tnFǩ?۪'W~V;e#d_4Ž Zg$=B\gRʎŽ'#FtZPu7U]~$\n=9 kVf"pw)NH8yU-cTVADITQ[y!qp{(ɱ;,Q'eo,>p=i<*(Ec/YD;zՊ[h ~Z0ҒưG)qxJ 1$qw `K4 )+43.TT0iB1ǨڱɢumSD-Ym?)f"PI! wdgj Z):Ksܠd^=2'F0.Mfz,UzDgpCGڌRS{u:7Rt?՜&Dd݇#׍]cXWe/f_ܞq3F{Ð!<Ѩi4n[l3Qwo]Ď 5&ݙ^ :k%i|ޞW457~>ЌPf I qd?v4_[3c#%yU-u˶vqw$}4E}4Wqj 'ihX~p{9YP"O}eS7&e!ZxA_c{0͹tq쭾ᇅ~R|TRR8Ϥ=='VBYz7-VZ_S,wZ5%ܐXF vHlwJw՛Ucmet9t"T9T.ݯ`DTӼUIR.Xq߱ՐtΫMk}z?zk.O~58ǧ {=8\c0oñz.Sl,DyU/J+G֥,>Yѕ׿ׯEz:N CHco}{ɮ&u%R wb~Z3o- le~hrR堧Lh ^eT*UCS…7'l9ƭax[Q[ &f#Ƕ&AnP3_qdr7if۶|H~:*ԯ^YG$|9Rxj]O[䩊F]bv gQrKs=S J_l+in-LUPTfq.ˌu-Qk4Fub_*k*L=,iU|ftFzG>}Ni]+ouqKWGJ!S?.)Ugoa4?zmu1K?STTW1PvHQ*8)zFj6ϓo\bnҼt M "]on%o|pu3J}5UIEgmú8qFZ|U$Y;EK[_m ,QĮN;ety*}GNI7sѵJ̷+UލhUbGr!aF!$MaWY\ rCTSۮ3 $(#xB>PC1hȢ=)*'$KxRܭz51**+Rppn,RooHljH+|4qJ̓|} .֦᫖BR?NNSƬ. ݻIVN}{p4qnxRj*+`bR)9as]ND1M,F ATYn^2rq15-!ILj jQ g\sĮU*RbVo2sΧgq_B<y)YMIUR+.TT)$X}z-VRt͂2SZ,s#HY4]Wd|aYSB~ P<%yI?h𓎫W븃OoZ<'ۄQ)'Ri3ֵһ-GYb4Ed_G(z:~ף,BREB=鳞e ,~>u3Lu"[( :ZQx;OnYn4ZjJ}t#4nqǔ8#EUdf3%^yhW` jJ=sNN=eތ"%Ito(؋p3c݉$ =Ͽ'zqi+ -d+kk 4ΥCW}cSPOo=K~j i#MzwiYSWޫnZ!(T&$}?wmEoc+]h/{+,~,u Z=SFb|U$:j%|-WJ[5D51<їrjTz:jdE'~f> xYMqt삎 &xc6:UvG'5UGCx/o;T֋$Zr33)礧,267NOvm}3Kո5 W@2P1z ղO фt 䎪(f`#of ュn͋U,;>oh9HأߕaR>:8)h۩LJ,IVc1AQkAVtt^ABDI-,F{0rpݵk:̕"gTM&D21.=2#5w.sSUzKUY ܭgT+05 nr1q.>Y ˚e0g>oEF\ZO|fjIR}ɏ~.^OQ>}'p%ч~;hWSV{}P5@p'b6z8z |nwGjYWbUg3˰V xu*N\b*(ֆ *D4yIi8 'RQ\z;k$Wwx~z¼ѨXa)+;sǧݩ&tьԽrة ꧊x#;| W =Lj"Lǡz:Tw#zm acնJ†Znkw,:f#QdX(k&Ww}ݎ3dnNJ~f|puqgs.>EeR<&f@FߍSS{9AC3iXozi"c1PBd^~Sԡq2q>,[=eaOG98?s=B[vMjgi)$k,!W}ѐ qfJ2Enf:; lY^62 zkөl~/tt?2_X5AC#~镞6=Mcp֋[8꫟0a"Gx90=]q63r @SuQz^ .?%G(KbHٽՋ+]Ŷ IJ 3 ϡj.ؕ4HmF\3g:Wac갨oU@vJv3{@NIv8kIh)1'oby琽պ7d^)宮u-22rI]}X=7ZZ՝'EeTF+ L7 M+nxWfFVi2Q]AT* TT{M$IaĮX(PuMVZfj]KxqXUk7)a,pݢQQcEpkRc@3 :^t o4OGrDtj -c?z&3K6߃>rW"om^tOYJr$9'=0z.ea[?Q[5}۪)m{=$hyq="my4ތc]Hy;hZBݨB 2~deVVqNzkE];4Νj'!VEcZFd 1};hg?LT5]5Då62Nxjhd*D!q)wwlXq{ƫ<(U./^D{\3k]_4Xi5mA?>yr:xtEyX,RO_uPR#GI*r9vMWg6Ⱦ{YQQCpSsHH+˪2nI9v1/܅/S;7v~+:d֋Бn;ʲBƫzΫzQEKۺ.k^%-Tdg!Ce#]K5CnWKm穭] aӉfI PȾvO nuR,Sk y^ǎi(i ? 6+q4 cQ}j,{[@-SI#FC1ޫ.;# .@9>R4)N^/QMMk<tZ#Ym  ,O 0-yF_zv["id1RCF,[,D4me :IWOjYGMw~GOd3<4+@c#MKK\K,URA/WEto/+5<G}VEK2xZW\1}IwZ(̖*Y4 daf/I#jmZm,ik**fJ缘|Ao2yW0@$]\l9+۷?vik`y|# zi8&Y'Y<9v>NIJl;'@d=VKH4l c@ g#!#DՓO蹮 Y; cx s'ub KE Ij iF7G?uVͣGol%Xأk+#ђ<\c=#ȏ[#=#}dMƳ.ђ̵.  9ǡ; b$m@|aL@W\΁U#KYk87O$0>8>x?y !?CߎΜ7Dkԃ*&I=~ tx#4yy]y@|,{c5yж𻨮=Ay'JRӅEG;ʎ09a߿JQI:v3Ee:3.8ʁq}i5w1jؤubFw(gM[ViOmW %z"e˩*cG"36~;t_QՇQx_(=ࡊ4kqX=j{iiFoJaUZ~yW$}|*ݱ*..Amm`@ m2g\]HRѤQ?e@\ctQhkuq,w^*&shOCV@\K:ϛad,HnA _şsϮI:@g2-T "l|~=k5Kt}b6fzudQcڧ=GlwwK](^ԕ4<ş}7gUSv-p[]o}AClMzf?I;@}wձ76ZۯP:vXVWf{gF1Mi_1P?h紝6eԶ3+u3OKKwHGrXߪ8Eś0!kd_-y-]r6WQoUnyYX,V\>mCIc_Ws ]MBcQ[hTm6],I= *5N;#w-wj$/%yǹ_d)~J-;'UaRU){324-,jjjY .lU QݳW3gA=- QD iu/38f8e $z58s`[ e>I>$:JRw; ,,D2c؈`~$c:<c{|p.mgW [Y:yesDT2O~9zoikuuZ-rC~,t! }Lظpqߞק7>gZˑ)eP-Nyq뵋#?M:M+d鯖:* e*>Su՛e]-[$siVA٭Iz#ht9V?9:I`<!dΝ9>YXlB-CH:b1&oy8l9G>3]O|lr(ݖ)"S qTݔPs=E2FJe뎛-i+c5>Hh0X!H˅הQtзTTT,nX~x}F͇ҟûKI^Yo5BF>#kpݫUj%CқWAw~ZǪk:Q漱,wuO;GQp7Ȁ.[& fVU#:z>W#UfϘѢ;t8M+ ?N}92RFw8 ,ɵ!k;@9$3G"y gmK pI㏻~"8Oեd 1T%sO?CO[g;Ac `sZ"䒪erqcé3 >-3RXo6mƤIˆ3#= &'4Z*``X&rApdDeJ7𓧤K}IidSIYn7²Y}ͣ qO[uQZ)m5JrN@_ufgqvjȝwVb8sJ=j3pï `+s)[ E I+cHBKvع,ݩZW6CaN_}7,}eWKj|Մ" gVx!Z=M\*z5/.3Ÿ@ᨸ)z(k_ ;fzR zIJ9A9'99:ۊJ134:2JO{хOTL̲ W`9R՞v뺗']CբkvtTH)FI- zg 9ՑCVjm6:OgJy'lHP d;cVr:΍7W־"F2j+ \¾ wخ* fhq(4)vS֥\ +cvu9jOTQ(Ciېv}IJ"t(~?p{acjTLU_ʞq봩cvV`V/R˨~ D8 {}[f+m"|bN#w~lVq:rkL0!+ų'$Om%`+<+Τ+=q AO_M0%K9DR ',=T?~y"zg1XHrH^aCdH~p dˁ'I;XSoKf|9^22"ȥ`wawXuZ8iY.=c%ki(6LcX8 SN׎~$So٤L6'RrB2鷟7][`Gk"MQOx(%\*7wd9 h̟ v:֦qNEPD ؼ)fA=n*:KwLQuurSBKNBe0P$[ܵGbU&Q+bo*R?-.<s:rUV:53*w)l6p@lI]YIf{IE+Lu=tןo4K*3(O%P ?g=U=-XOָ+_}MUSA{B39%IaƛZ]#N'(Si>姼l)tSUQ Js\$0I<#g zsЙz t'OPIQ$vUeBI NtOCC]46wN2Ltq $j Yr}M=M ܢIy{6?e}f[uC%D4,MD6HCx+iu$r:9$4bEVޣqSx,V! y.3B5!U QGoM.!OH~pf0c*|N3cw=?WgJ}iR\H0Xd99zb/zqUi(8 Nv$zXޝJti4L&YG&29R#9v þ:Y|(.sǦ4%c5#?*M,[YϨS+3M Jc,4$+#?ΐ\p \c{NG㡁2!{ GnDS6r?6*&t8-՘\9S02Gv vh: ە#@Ldu |#' n~"m:Z /BΊ%@ȥ1bJM]XVк'ޞ`spnBCYcUNN4)P[?s3(Cc2FTY$*HKECǮOMN,2FRRԱ[ŋwP%¢(%qBZYU++0M%9KȽ"}8Ԕ0Y ʺk7&f,rkVYZI[;w;\~ᤲ#e$J{EѼD|Y 4+iΫv>| |<\ZI];I&>N}u ˑƔ#'w%lK1M? H O9ߩ'Gag.Fcw$.5Tj;r:֩76FP$T@-CUy' ȭB)^CG_6egz:hܟԤ-+2Sl#N ?pլ.ӁC]-[ddA\FH ;qX'qMY(K<(.v෨qΓݿ348,tOrxNp{s(ez#j]'];M<Ш\c@?^/aYn6-Y˸C?^GB>|om$"o'Ҋ0`ԝH* *NYA|Bj$1lYSsy}Y^dz22 _VaD]&$+es{5UObT[!WY*U:*X|hڔBTFH0N8r9|v&]:rqCXt_.#s'i%<I$#(f^ږυ:Yz; <3<"EhQ0`Nz^&Qtu.ӗYYXV*FAG!6GDstU֫,ԀtE;ڊu&*4FpWaBp|3VyRT,fU滾DΩoۥԕwZH(BIdxb.Ww45nYBpZܹ'3nk[i}iKqt\F FH%09tƚ3Hj#p=@g)ERsHO iquη԰誾W/[ XVGP NOƣjGFX=u+;f* N'JrLF$~S9e[熠I^ǽ=_Ӕw^8E;YbI F :J} MSYQ2>/XĘ^I8ps4I} 5j$rFD#sn@ʓ>1ȆTk57Ё2e Vf>O9vW%Ԧt_\OtwVyvAu }ߝ(F't uKW+#j,Ǹ9=.j@4J,3\i:F5c,d6Nb rꄭ[!hmJkUDn6:߃xQEEyjG4QK"U98ݍڨ 5%m k&X0* lvg[-9ݻtB׌skNfJpQ,]|ƺ$uod=tq4(1.w.W;oZ;,bP ?ko?6i,F'E$'`'~C-2дI*Iʿ) n@1'pA RdHՓTQ˹[ Alnޖ:j_⵲Mo^MIoRmrJKV5d &)1el:G]'Ԡp#wFW"\z|1I`=NaDn4X_L/*UA:9$3*dn[їzEWTKWHfCO!LF>%}\-e0b*08}-b3Еd[u5s>srvrs?$)\`H'>@Lsԓ"|pcs|~z4DjJyAΡ'%{"9imV*%tlb>W&%eFTʟ )b-Exy"EU$9ձmF-JY*43}-!z6PJ* s:z*VTɉԜdr#+WV4#6)Ԣ+{5l!Jץk7"R*r>2biΛ+u7[2~>b]- 4*eG?Nm %R)L=Tr9qL(**6*8t(KqQ̖vQOx{um=dWz6a*׌W984뚪^wFUQqJ߫&,v'IɺzhM,qAAW$d=RYOUI++u51 ɰpX.Qؕ,y P4ƖdqZmܒţP/Ώ WaՓwwNG֪.F1F7rHRp>9q:lGo$eu `^}CW,-Z3}S/_I҇ÊmwJQv29 0\A'R-N:t8=5)f-7r*APY?M(YSG@ !M(IRqdrzZK=h- zjM:۾Y*.X/Wyvw]xyTXiC#FB|XF_zT)ZkgCu[%72(y(T (MoEt,vTbic7+us: ?2'@'VUY+bsȝu&|yfm+Sy҆MiC~vn3"l9OnG$jSq $!!U=Nxz)ځTQd YIob$P"T.c|:u55_ bj*pD/./1o[>7Ts[.HU;gփx2lf}i8^ cd{8Q&hT~+QNL{ă.1ټ@m8_xIv̈~ 7O73GY]IE=5-2o PBNTi.3 Ouer(hIxQr3q>+S?״$N84U#*уn:jf2T!bEƞ?v$G#dJ5/ijo7ΐ=MUV@%T߱4Os*0g5s.jԷ􅲊-T=N] ݆f")en#kz~6:!jrru ٵiʮSr*~2̼ȵ,LJQ{ƚv%̼ˎ+OtdPK 2r^2ys3N*6upN >PPI?5q@#l΀=ˁ9@tTʪ9epA8E&'a\QT;d3at˜Ʉb6x U$$L"V-42@z49mAф9/SX' ]In Ii ~r{],J['V5lv :5ܩ'9 Fym'nJؐ1量8KSa*<1sfUo^K0n:QOS3-Dr8 Vij\ krdM=Zܱ*^a#3Im~U,KG}ß3z{{[ XpO&\Q#ԥ$ke\l%):6_::t=hg;}H#k#o1a}Fɥ+NG}:SumX+ YPOcя~i`ٯ.{J6%T iQ+;@E=#Q4 ›g}ֿ{ZZk#Q;'DTj s H$jJW_~㾋=-n)ONŦƈ78!rZL/N;zUt=sS[:N_֚{Ί{2I)0g.6B3iA U,m_m_:3VYi&GY d3-a bZZ>7)qEYw]:Hw;$dg8'E+7cO;تxz*JUx HkšV[,lj+bMjjZJXK8I'HZHΝe`+8)a@Ж|荞kQ!(V̕ ďկs;`UHl|9;+nMt]̦_**&4*%%R} *W(!'L/@ @D{ŁRs~ T1Olp֓K2<-eN99L/ͻ?1A T=I :*D%)Co|z%iKL>(SH£#(%GKQwnu eq$:wf I8ձ&6HX!7c>Q)FղTM[r~#OSp:?u$YK_igZ2˟G=/IhvTrz4aT#RZ{+֙7FxOOT,V>%I!QrpW]~zzMY>L8B猜矻iī3.Y'P2] ? }9ǿYvKO׼*1BC|Zݖ8H#CV'_׼:\&OTu9cgN<2ï~2Pߪd*@QcBg(mW/NN}t陋$$W2bGIU3~02~BjK[hk9WN<2UWGsWcsίd~Sj#7yuGrG} ߆Yr:NvbM?02-]AlFVp"%H#fB zOc.jMB&K73!@׵`ĨսwfDEJN<ʨFO,Գp5:=Dp(cr`woǜ̈́gp1\='$gvը,bC0y`u bP%L`[)\vT'S 1xHR"EEF;N:CeT|C&/b@_~Ɓ M2nT+?9pTdF}3qX@--gQ mcꈉ#LXg98:CI $*cʌ-FGG sJdC'߱Bld?;}L@ @DŕHd?^?jCJ~ w8zqyrSXr1wzXDo%s`u YhZzu\39oPMC<FK:Gr@B=YewMy ըղS4-D %;qMĕ5&\(?_G\%?Z3>BW3ICn*Vϐ:|W>B4u4`GSf|K&%VU~3K:=h->Zؗ?ѣ3'FEAo*h \~oO.A.b|cњ\\> =]Bxhh?љP= S[Un$Z͜S/L~^`r}{;%*UݢӴ]#SK5i:ARE8)13%o"/ "[\luW yjusn 3Rcc?Kw5'c/c~?hsZ_覨<ȭ"2܂v0{g]:{iTmzSwOPt=DVɶ3F.127PU9$sVV⣣/Rv/ҊnbFX rBX )) 9$Bj:ˉRQYYJr$k17$c3haRfJ=" i~ӟ];FZ؃иV?Od uewd!u#s;72Gٞf?$y֜~lWmb7È `˒Lc qնmYc$j,y64ejX&3GjBs髺鞆Eӝ8˚\{ t GP::问:3{Pj:1.1RGb5*Ѵawm@:7܊NrG:zQ:ݠwh :cܞ4 =%•,QpK,\ >QCNjNU=۞`նݪE8KK4$K#ݛmRMu2' kn}xpz_(hk+Z#y1INf7oNxm4qa*/SZw};C ;YbfID4KxԢ4aV}uR :Eg;H#G`ޝ-[ThWܗAcOY2Zmw "UdP>\*C{J sO7YH&bȟ˚ T<'v?7ڂn:0>$* ƣsxHaJJ2Ⱥ;HXEnhFљ#f11v 1F2,ЧR} tGK*x-#̮ #{#wʏ<0l֟-!/_q dLAl_Ɠހމd=M1V=4ԣ%tȹ(3WbORa?zYhInyS+|~+:|Qi<1OFt(N-UIIF:['=g 䈝_j9{\O+8~0a-” {jVE)z.SȧP61q4zA,I$vg'yLLBg$/rTW :VAXIyuYӯ䑂A^:dd'A#ܟ[!+Ns U\6ߔcfV:<5fOrc(i#AIN m$HtΆt/ZkCz^TL\m6H$kGiq.9hA0FdJR&"Qљ~C'϶"⢽FoU44C=ƥ$Z+$C ;ٙwd+`WXlDTKUV@y@=e,03bxQWzJqjuBl8nyg[J[\ p7/ؑU{8Ι㨮) f1 09{|<㦌:&u7U[:Z ᖖJ˱60LFTĐR̓W]ϸI-YoeY+DP/r[vq(R{Yࠆ鲵:b1*Jqs hNVЩ%SI"1%?vH]W^Au1z $X%Skospq7+"aW-v@t'$b}O~c}'FFQM^$Z ֣r0^?=Ӕs k,Q"l~^?Ս@:Y7zjQyYt};Ҧ8蠮I(@RpTۑ)f J~uzl,m\5ѭ[^h<$E!AD@ .ǯW3շ^^<}DDgY|UGpsjX ]&Z/dztMFB"G942Nի,d^ϭYjɄ[WsVSR@9߆ЊʵG+itp| łGM\1k#1UԌR(t宖{1dT|W)ڼ<ʴȩd]'waΈc^Ҵ**h֋?ʉh#+v1'O_z-/ʄ/2dknޥ}8ps'K&ENߖ>ri]xҶ㙍cժ,SyYS,2(, j2fޮZvuֈ֪ ^ ,i*'"H9ݜNNƧi--3?NE=)%*E1by"*^}ѫ89;XrRJle*85˧oSV oS Hמs$ қ4o3hhl3A%姚"*nXRV)PP%m,m}`G6hC;дqTT ^Qh}2`NCB=S E%!_1qwrǧL= w~eUf+mFDf:yiĖǮʶx*&(cY\ :8\\v w#6W7'T|6HxԲ?, 3IE[Nzi(Tu%7z5Us@6cYIc;Ewb5;hA~Μu`6J4)ɔcRi\N侦m|WʪxS)iÐϵ}V NWsySUSK9Uο:4*M&k3p $ߵj)ђSW݁s{æʥ5Eme r0 Ad'bE:dӱQ+hb*43wttfI#d>G -Rt":)i-$D,XZae9]lCGqڑǛHgh$xYXr#cM.=ltW.ڧ{9r]uMukʢ{dt`yX{ gm.!*f21fc=6ُ͟F{qhhhh5XoXq/kT=Ut4ch1\gk{MYgCtvlvYV*Ɉ318:3*SUjO&j%?)mR'kܪm/"—{p[ב]幂n>i)$ruJ+Fryg(޴ݬ˗ ǣJ9i+,0 W,Tv'K;*4enx[TplMzYdpda eN}Gɻi };~앾ǰDhǕ6*o2V8n}O(mu9].s8 OIO#xZs`waFfʎ12'n̉84D|"{?^aRU|o8Q.yD’62I8>ҵF\B`ξ[)grN\WzO%eb^gPZ%|6_px-m)+- Eq'ƻnBrI RI'`^BJ.[UQjNвFヂ) +/0$dEr6x$)id1RdiycuMBW.h;LC_s~oK W]A,7yoOEkċ<ȡ,m3H"Y][fc#9R@sxx$궏+iX/b.4V瞎2aDE G<0Gc'Tm*Iլ +^=bU$sZ|%3I*@>$Z/'1[ i<_͂tQLckv3 태覮ecm,P$ X jyv%W}A<@RjpU.C/U{;J#i ݻ綥(fШT'Q[9_֕4V D" ;9$i4Ӥ4W=AwYJ 7Oh+,O)l3CseYx=487+XZujʵ4mkF NEQPxdz%k2o^U^ umU*jIUx+W#<$q% &Uz}7[q;o%**(NBۏ h*}<8$qw̯c$$ժ\HKwew(n22~c5(2 `԰y[.;0#=1J6mܛ\CD摜 grwʍ9WYEZu\BXsis'BF]K4[(,=Wq,}5cғ+^xbW_ԚɍxWW==ΌSIZMD2@% cc=>.4}Z#GmBRu5Kcdj1a2c$!\Fq̬ 5Ng說Yʲ;Fߠ0[%ROx^(͒pE",5I$FwNnRJUs+-掺[imnf,PJǂO4q z{%UW4HTR" oQt攕;8\tWRu7W\-BOmQ4)U'0~RIҌ4E9o/4^u<A@["OjO͎q^FiZp뉮;h*nJS #-Mc?'23TrTQ/^2[X6t)4aLU8dm :;U꣧-Oq?s lPcwmybn֊ru=t[ 0Wq4 mqxz*qN=~57OC%pC" dd{zQrib1Z̹wp"Qn65IMK}-:#iC@A-]&Ek;nZY|oCʪ+"Z!޿$ڢeg+FepG+ϩSiUuEP])9nA 4H U$ Eve-տ_r[Tm@WW~K_Nj,>kD4Q ̼y5($ޥjqwrW/A%E]LlIBpv`;e |98y/2tA+xo mwGn#*єP Tߤ/2\<f\{\*B_Sܗ)c sONcX 7-MJY[*d.Vo-;}iFspSq{w]MuZǻݔgHiݬ u( zE X7T`g@~j8Iҩ)/e&qIA.NH~k/,IPxLc =qKGm;wypC# o'Nbx!\'[$Ҥ(@mR'X]P0=ҤecSmx=҈\{[S_w:^2vOl[iCh1۔ww$O_2? i %LR9e KQsk3%<9պ/+ζJ|=ư~OI?R> 1ԓ.X {xb=Sm,$ 6OmRK4?}]e]t 4~d1$+">mIKq䤥eۃmJꗠd6޻G~p0=bэ )vQXTZ޷Y Ӳck#{8?VCx.'1 a qFl{}%U9 ҹS@~~L?5+B`MJ9줒EUB-bFUN[ǩOaI oxsTJs4fq+̰pp49?l~Z+DsFwjuT3?rO}y긓mpMJ._d9< yݧ4qGkϮ{jBXQ('--V/7Z |$,5 nI9Κé:0voBꛧ-u4׳ܥ[tBH"xcZS&JBČm+^86Y^ꮙnLtV݌sm9FϊuܵXŚiSknHݖ|g*r6<Tܤ7##=OYKmѣlu>rn#=C*N-_dM^)TBmц_88۞E $/f?D_S޹EZ*-_n tRRF&G(dFc T՜\VW_~ޫ=1ҕV Pe@ v,WBSN6~,"m}GXM~QRGN$|I~l3s f毷>Fg'==8pQ#k {=@ЃRcxI fI(TVa ܁v4af [օGr:6e,2<4(1aʕYN\G:6ounRsL)_8J Br̮L/XOKWm6ȱ&Wni2 +$;d/z>p|].5 ď.%mԅdq(; )8ǻ7Vx u0_*6Pn9Q2XiTYս^tŢF>%bb@v-g A]|[ %GSjJ4Q22Wbd)EgMIe%=5% 8`) JF* Km;W9>IE䅭S;L,H*6(J8įSoV?J;rI #'XG~nL N5(iV]IzLѽ?5B?.@jO"a=ƙ"Δ,qF ?ksmPH*H٠"xXp;?:cP 8&bOGftFp۠*U,1>S#+g>n@OJ;{~'HY!vctNU=%}Z\F9րGXrº`Ck4 + ڒ9?-C^%mWyz9UdbG49YV嬪'a:@t%VI$o~]=NS)Ԉ@5;I;rgƱY:A^5`]]GE%U*"aBU@ԅu}"Lp]Bm6lZt?QuE/H̽+jRpziiE@7888W3Fs{]oVR[ܺrp3WGOhг1%S*Iݫ4)'_Rv/[.T5 TAg5O'QN8PI 7:.%yۻywCmuW[]Hl]#vR(n;}ĝ&6ESIK^u5F3%)>{n1mvKOki+ 壕-]:dx ם SN9(ق9*]w!P{dF}ƤDc-hQv4fM];AW=u}z('JhQg23:U-rՋJIkzJ{@ƪjhF #$*=IZ/<[Vړմ1Q2EE?#wP,B#۱F&} }w.iP[洪p;1ی%NT]jY̰l1֊Y'$(nRjWV4xdk}wFYpo8yRhS#'|y~qߝYr9k `IE aE&+w\ S .@s:[F֦nx/g 4HC|b+|2ћe ӎx]T_{lW7R|,enĆ#ʜ"̞j3CCOOkq7SM(,+;y##DSQWgT.b^!1m۟ wy뛔:qoF*R~W 6J4If LyIdlVI<U'?f.e6ϯ=)Hᨣw,s ?L{iuDS{ VxeYc$x>dH<qAХwbNJ{S"=}46޻_d!n,4kJ4gpyDc=3NVZ,*8&c%[l=žPrIӍZʍ)Ih"X$'$ܭwsJ;h'1s .uUKV{]"2Uejփ5${oZŠ:c?4R~\9ݻU"6.ϪzD5J493K@ΚJ^?5SPeY<`sw5fo~}M*N|NIKztի#<=s1]2e8Ay̱uO-6BԨ/8|ݔ {T޷EJMJVW(rOjCnx1QSw gd󶞄zt"t5R|<,HI>_3۞1V%-D+kf,qƞdD7oWJ)nV䢊Y$$… 1 &C;KcVnO(K L Pݠ,o9 =MUJ-w <ɣpe10q}:oיjq? $MO 1Ȳ,P$~.>VX]?_ (W-^t N}g]>/bnEG?O4[Wuڦ  M5BYTx_c>Jd= U0+84B9 @xnvoCA! ($~b9V#4 !8 D@l1hڮ8<~:p>tFM`60?v*VDZ>}'J+a,iWWZ 1Ps+H4ФnU(%%=Yzꚢ`vLg<|+Jzx{ah:FicZn.}tWXSʌU-7kUʊ4 "9<74p98AH04VBP$2+W?^{9EViCf(eHW=m7 3 < >*{,/kZݞRUT(]颏vI`;QW<*Jv(NU4To+6.~R 9ݝ6W\͟o72:)QIW#m &5 v\ie3f\:M1^ 5{OԕTeP;vfZ%Sy1W DBR_j!<DžU 7nڻy+m 0 J U)=_MWH.6UIQ\XIِ3vhE]"4&KMГT(`^ 9Qt޺3lF;Z={]oz.ߩb.C~\c*'Qwpѧg{oV J+Ds\4uCU-/EVQRR~=RNT[iΊ:XG v0rqOb_LQkSHp7}}}c &{$Wu*vbIHQ6.Ӹ9.(+[?fRu=t/զͲ:ט5\C(ǯ=t۹(;M;odFkTE:ij"M&b$(Ot{־G=.gOyUU9Rgr)8\m_].z+ž*jy:AVXmQ QHp lteǜT(pnNcNck,,r튢%G'׬YcJjfbI[ q$~}042Uj"YX<܎pAR-%<+:č?5ڮ_K$4((f]0Ԁ?7Ρ&M+5+O5 Xts$Vyk,  ryVLЕ_cP(D<R[️n>vԄt5iMMm 4C(ڹ2@Cv-9.ݽ'Q*T _brԴ2;{w硃هkUpQgdb$ ^IYjb'4XZc\OY4TE ܹ+bN>Vm[& U7\iW$Ф"dv=GsiM]稺lax%$+MI/J$9r'r$4;%ӧoRE֞Y$j3cWb{ޤP,5o.;R!Ru_SrNlѻJD)rpx9#9:fMX\Il:^~z~-ݩ䒒Iۿ?\S7T^z*(U+5EPU.`Hk72bг+eMuj.V0Nܨ9aΞL6FTw؉'Ju-7rgp0@p8l_M於=%[}Rʵ"eY7ՐK] )Ctk֩R-# 7:ُ#El-Sr@l9n$yL$]<آfX*eJ9ePr~lc;14w)T( W@D0>hB>@p5f*c;۾MϙWj.òISNV zUZiQ pNuzƣ{+|I^{frƾ.^Br'N 6 VQ ]ժ6O-a.AlNgfYe%ULulRp16%SqR*iDq +swry<s7`"^)Yhiꞹg,R÷k#:_ ˜HOpq'S;˱e/⮸xn;i ߝ̧FMN l}4qp3E?h>>(7O7'Z$2K'5;BTcUcVS䩽WqIOՕ8XMAq+OqAz3j:Xɦչ}4 <-è)zxcZYiwmy=8$z<"uOsacyEJ&1͗2ov{<k},l0ƻQ@uYҎdfO&GmoMg A>ڂ\O?Bq}MGI\-IR{<&NU-q2^ʕMGθ 'ܟ\w bɮR,;}u ;J7Zq; oO[C=#gTG!N8qU Ek0[==nSPIM=D3d`[kDSV^ f]>Z!Գ`e6{'VTk$ILXr̤~3۹Š9<ծWri)WH@J/o(Gהdג_RƵt|.Qrlgw{(dUIgKAP&6u|v~Tއ*1y}]b7K\qV ('I^AW6T׍@*}TY6FAyc~č .Q)!uMlPLttG$[{ CjjN= 2I7NU2ԉJj[P #:R3 tH>Yv6`U *Oُ̮nܢQ<I J!}A%A='dŸ4+GRtuMwOvCÌ?ñ(:y#Sn;tU mQo3΀= K+G 8dcI sx#(qþ$]:@z.Nv<wO't;% '#pw`t{_dzljW=½2"_IZg͚.Rl(~`*L!uZúj(b﷫|PaU$Q Kdg=\'dȼDjG2i>Nt=OsOOQ&L3m8MY+6vpթ1̯K .5ʚJz7/ R$I-5'sQG%d9yXUe 'vkW3.[jZy,Z8ʳŘ綔ѓSI^)'{k/n} UCEpi.6h2TC+mPa?7%sŤft%4ui=~^CO]:I*ApcN;Qs41d%PDTUEpfvkgZ-w4! Yjj#T 8s=Iҋqke+oTO=*A@#`Fጟ5-m>$NiWG5dUm60`ƅhԮQ`LUUkpZ)C,sF6n5'k5;L%KwMݞc RO,:۵o(I jsSz#uNv r\Cm{Iū5eR7(=]It%YU jIV&J,y&l}4G]pu*N3WkUܮK^5ng*+$:9"x9'vU986ԄcM5PczNE\)~%KK8HpЄr1цM'́ҕV_:RUXb/d 拉Ĝ+Ǭizot](DQG=M4uM#Ѱkխ/zSb >"NcblA1C:`:*g%jd5-Q5QXܬACe͓z vVpZm0KEba[w˼xƓ\ךsv4~ 2+Z8*tEv̫8 0I>/;oŒh`6?Vhg}bLQ]zm[U#52wP쟕F_sM;JI~,[W8.f-LPFP$gvژ)WAՙWF5%^]1u›p GQUS#v=\/:c6J kjmQ(l*`w͌g#Zui[6u%d5uZif0H@es]~I%d3w{+*cIՆC)~(Bt\Gq(ԴU+Y#9'$XTI^34>UL~:l+B@Ueb3KaUISᥚ:Hx0L{/ qut$UKց5?cku':K*XTa0:!$і\u动uǙq5")o/O#Oþ5de%}ʱJZ*>䂚8pyk6՘ytFN3Z4}AC]]tRKGĥ`pEPہv$jMjST|Ӝ}~Qm[! 3ێ,;U[v:qQ8lrrs}ra[@|`^H#h &ؔ\߿@omvo8APL@cU1Ǯ4vN_x 0g@ΑYs? :E@NT99R<  W@9 g@,H^]z[*Gr}W@skn YWDZRq1XtRFMRZ:n 7 MBdAl c50+ܮ8hQٞo }+U. V952K#N 04+XGR<ɫ1JK%r$kE4' FrppOcB.(TDTJSxQ/Im9#?bj9nޠ[j,ENl_)JHX;7FϹkBswj_E_h&J :JN~3iiivy#Y%4^QTPY (#'we+;ҲvL6X]*R(jIUuQ`#&3qrW+Oz*QAII-\A3ID0 ,9x4^MfvJ(imC VlqyEҝ+{Jج5P 5Ӿcd>g/ X'sۜ(#>-߸klרV'_(WK#1G3mlqHd>u)Ru_@Y]=Q_jꩤhfe'.Pr$4gdV7Z&Z>Q=ƢAi[ F2rOΞfմ5Z$(+i:fdZZmX<ƒ롚*RlM>7Mʷ:K- W5<1UQv,='<ݝ yYMx*{WHH.Tq!2T&`@fP1QHt{yl\CͲEO%mm~ CNdnd'w4eŏ QujRM[#$r#1e9h&kksފЛOC/lyg?GX{ 4['ݚ)bjH!Ww^s4Xk >k5D*hKWEpm8m&H|N{g h2"t;DU+Fѥ;)%T)ę`xtY,꿢%/}_4wj5T^0ͶV‚=s~q4ުKdeҏh UZu%v7 Ӿ!pF/=R!h9#H[-HjSBHBK/e?vO$؈ny8:Pwd7t$hVWbȿ=JXZ①y];hL?:W~,O^^e,Yue}e5v~^?BzHnҙaJW%]F8vηȕu .*:~io}nnZjf©V w6j[|duQ*KQ5}-,oӤ/@đd-`OԜܤBIm}=Y(6Lb] qy瓝$Dqإ]cn[)>D) XTS w)jINJ[Iu<`acRݨGw7R8cyڪ=uKǕ#Ўq" ͜`lp=2}>>8Dpn΀]@g'i~#@!}pǯU9 tܠ`@!` ΀; g,78<vG N}SbWo3Wv>qk8a I />;򨥵&v2|ѩW>ޚOg/촏F✈dFGж3Ơ!kQ*YcIL16NcǮm{EGv[.:Xh*m5q]aJkR/ 9cSWԩ$}̴rR=]!5"9TY5?bnjoFaUWZۊz=u]Y+hj( B48 !N3zW3tNʽޖDUǨz;ګueIEVWiYp;vϦyںgHmY6.>wQTRe*-|f6^Rܩ-HZi<;NNF;8ca/1ߊ]GY&ii6x]êVJmrn:x38];FUfGQPw<}HPx[m~GpTѶƊ1wp2yZ[?USTvl]ud7Y|N{8+n|*:Z9*0|8b&߂O gI+d%Iq֋ί-_OBs)=5(k燴Tڴ^ JzB6PSN;MDP:$%iۀU ]rOmoqEvG/O'G_m{MK]Ԓm;(2MIv nV|LBQ% ;L a0r@:Vc T7S[3.Ly`J̃m[mljy5eXNăߡF=qm-R[ie2 scbq/Z-MQuuzkcV9 4=mM\?Y,ױfH,8Qd\9\6[EmO-H=3S2dw9Ƥtl/ZTiKOtzzo5NR A&S]Z߁vY+:>Jt=SILEs U<,v]U$zQ h??k}~Z}tQBb.ef# r `Ord=YF sW_\^zys*I`JI2V%9P2>=H@5c y3ڭ*G*-=v Y$cӸa'rO}3%P:Ԁ,4o|F3ϧFdBV }-% ΋y X'$1̻Qv4 'i:;Rȷ|ID#OOrXjyLe9{}3ęt)G*UNK,I /0`,qdI}Eόuk#LFnTJXg(=^3Vc8GY՜N]M/Mak,$Q8nDU$qHZ;9ꬶєVC_iEsHH6!2O>R(WH Eߦk CQ ,O*[|o.TbjRi5^$:jeK=<. i,b !))'A5t ok50M5~/Fqh *߉~4}_sfrGCr7g8?t';Gݠ |c#fhfU[$6H2=4t80;,]@# pH@z>T }@YBh0x?@/8 (vt&6A7~`jqخ{Zh;&)*,5PW͒FDFKdb+#tX%żPAAҐKMAQD3V(+>g11'**(Y}SsU/䍗Y0GgRGcWzsUq,>{ጌh{ԍEU-d^bxxC1o=)92WEyrLaS'lq,%diGmSt,inF=6 j9= qjꉯ̑[%B`9_I+UNJYOeѶm-]=L]۝2ЀQ'MEQNPYw-<'TSO,nhYDUA w);? qx|LMY+klAQQpu[uUtsJ?Z;Wcf)^;MIv| dV\{spжj X\-,asЬQ1Y:r!֝W\2%&Xզ3֥G dmpeO~&HX'i^3L]|1ݵ= 1+2]7T.=aO_Nm~iw0mZRYGU=<̇>!a H"y7T1c9=ƕЎ VfkRI:43UAĜ'L(9K,ud=ʞZG%*ZJ{3{CփjQznk9b$L) #]HAXqN5AWȯ|ZXi->s[ahl^\}!pEH@3Ա- e=w@K|4I 0x FA vSl:2ZDs ?ͨ{I|P:U? ln8>L_զN[gKBT "6lO墥 ?},dn1]M|2$h ;̍P#TSHԥ{:FAOJ]w[=;{R'kzӽ;J H~ڕ KlM!5p7y6T-Spj.lu 9#*ϾYIf򪤡 PH 8ҿ$g*MZ*Eu vb9j*L |QA?Up3/+,iZ+O~f9ǾIeV-kr5Z)W2HpsqL#E0Qެ]'jJ%O.s[v[r:0oUAbZ7u=K)cz?MR1mՒ.hj{Q-]b~Df/9e}K)݋d)(^ =dےXN^@@Fq:J5"y*`W$e:2`HUr;M+ɽpE_=hFa1ǝAKVk}Ivb3Gβ,`y9MA-P7pVMo.6G=52!%xy~:2̗zanK(瑜]E{DU Z$I+j TZ:\J|Ej-+UoMn`)STm$ݾMonad]gHh\nrc騩<]e.{Auʘy"p\66>ny-̵𕪥vU%dTZ(~!Em@9ehs*JjQZVhjddY e}ہ9VW;n$ 'NPVW ٓ~VJ)Je~}+'RN_j_˒8Q܌*a$NS iۨ)k6kʺJ5]*2FTƄvLIWiRD /'iyc#(mv1W*dpxդ1v>@Hƀ;ʮN;1vLU,46b~8΀=swqݸcxUhq@ y~^A R~`nr0? 8mF{h_NNw^tAՠglK> sPzQ*ߛtw~> N;pR"-g~$%WOOK4`d z!^I#sU_}LŪ%(/R)%:'m !p[v֥eHeey-OtX]L鑂3gM;\ R fXF]}=׸cSLQM R>} /SD#Uph!}\de[㡿\!jJS$ Eg9'&ڗXJ##7lTUp*%dV,}}t+nWZ~#t\^MK&frۃFc3%tCiJIٵ +=%v۪xxs񱑉,H8:JɻX58ž]~% l*ZdcR@ 0{gB۹,G :[~u*NH\CL3,0cǾ=48WU{&7\d_nCtqGL, 8(!9:=D؜ZN?u4 (_ z&VPvG4:fS*,։llqR2%-=4U-<4dc=`b}O 닔bvykƼgLT 馞{]}dR16u.>IH )4- F Vqשk\M_hk^DC-|9볞Ux) OWECn;ɄlA,{F Fs4 D.y  aH$EK\cY>np[Z-- V$F̊1Yujg=_RgCzޫ(PZ̳ˣ b_n `}u1oۡ ř4u"K[ir~cd3w՜UuO]:}=8<1y3Ika2̒Q.4Z)Ғf2ƨ l2Q{hPRtMEfc̮(}ONIcmTϜB5,Tuj.uk-Kl1pcZ%'uk%}U&`[V*Xq@sƮktCcVZ8 ?i=@sqؒ>(GJuSX4?~ ;񜓦\v :SA~KZ&X#~אݾ]N/Br ~A(!@u_mw"aN ^=s &ƌ6Hl Xc~,#%7&] :U*ʩ9rsVT:lj ޡU: _ld 'Ϧtr(Օݖ;gH^zѷ\g&aX+ڕ莥NN.Wz!In 0 #vs:Y*]4:| uZZLKMI':h^㑠箢%V~vqD$1@,Al޺+Nl׎`s4q `*@8UZ˭_DM4UW*z*XpRcpW8ջCNB]gIV,]PgjnˏTu4[SZJti ^)Ȕ]Oł't\Nҕ}ޔhVPQdUN}32ΓK*|wd)j5I 6IZ6mc6f=g^zrzc@i| &r9lzì='ն޶RK$гu1S 0.J*J[+.tu+G;̒P PU+,4 XL;Vsjj˗h(٩KRPXwv&[ɿрݪf9>İ))-hZ 4F11yHAj~IU nQ`. ƞ<@x_:aQqva%u5A 9JjV=qvN"{TWimh/RJzv߆l9)dsUq(}KZ_hގ,MäFU%sUT7%Ց+;IJ[/^ϥX5b+#nM;c8ǠX[tZ)دW\/KªH(`PGs/Tfv0fʔܯ`Ҧ,2A[pT.˻ǿ:kF`$̾^ %uIhZm$FT˶82*r'V)8ng_7OV>zSL_>UM.ܫdiT }QՎ`{IbshI*>>cmsDݳ䌃@n `i Ucmd;wD۾81HaZ{X*}? :1~vq@Qav^[8Mv^қ\g׷!FPs?8 9i p#+r(3 -a$H@iKg\ ""_YPU8럋v㠜ԚN#Th5䌈:s[r:ѪWQ\7*Gˋ4:W }KrzjhXr;}GyUtFӓ1tRjKEMBEK&0U}w]|&&Um1+a*=5hTEaK5B$cAMq-3syIpͪ]vxmSQb=t߈CuK=bm7BcȭU5* ~qf9`S=5zxpuDʄ*9%UKlg)(Ն|l}W1VT4ogb;In**I*4w;FM%v .NX][thkd 6AI2oIӝLLھᇧNM&{G$tl0:b9AusS|W9XXp,,R~딜N1rq~M9-Kp#hIasN%Q8+;O[?cf,2߮L{N۝YvUiqYVCp$z$΅F Uzikn} #mheWBVq }YFJXmdοS-NMii1L;$pXgkbf0+^oU|KLǝ]J㿾36. =t+BxX*2~VU t+7~YӷU_VӶąC b~``wMJ0pvaNGEz2-|P.@)A#\}5\ppY*h(斎_:(jPJά]Bۗ9j7e[D{Pӑ9*d1!cKzkƖv3 ێdFz>IuZi-2'-T$o"Uu0ہ F||ri^߭1 1#von85[fkV4 (_>-bN^;Krܠſ{ҵ1Pu%ڪ5V$H#;;QGYnr`֖gĮx?I\~U\ʊ H6) .2ǾRj+3fJ*oDim]`YjܰV1xזZn;XVUqjx/oDi(P1=N٦Q`/ꮒ!o>1P%J.OCu*u'E?7bO>[1j[;tTSܫ,j1ttFT XLDk,<*r֕:Iok4suquhaY)VaAX[6Bie~h&^?66݌(b>P?wS #RA/-Xcp}`p>2{c3i(g cbI6Inc/ɃfMp@'K.pߵḡ㺮:qX3(s,V ©q3!C#>,O'@ę<>q3u?7=8:q|9##+:Jͳ#@G艀'h`3Jqخ{ڑhF$s1B2 UuqιҎM1zuqA辚aQ%\Cl1GkTJ4B-kixbKLTR|Wcؒ?MӪ95F5E6~EDI!yV%9o wC4tj<%Ń~#S7E݇P% xYӝO=q)Y )^G-54;bCc_==ˌ ĺ*ǎ4jV!8䔕v:Rwed8:[k4i%6 |zq9SYveu^XILГYz8hgQ'RmzERywGg/+ OГm˭fZs mk6<1ˣ t5, \ٸ$?uޣ8x3R>V%k\Vl V&[aʂ~c3i:ʌ^Jf%dlTq7?:ob:ۉMҦݟL)?JTFjSZTH)]'L!ڻ7 Fy'$w:j)쾨? z6SUny TP63QPt,/E1ZZi\$r3ƮW69J3n_r4kM GYwIR+*X +A+q i\:W>"%f*v9`OzNDfNq=U%DZY ;4qZ3jVCOm܅]<3 ϧ0ޅXj3U+eU"h.Tsb8W; GbWESU^$'':Q{eQG 2rǩW!a@HM8Kr@<~zЋW)PfZSWS>V `)uV#Ԣjޖz4BgW( ÷7u%wI\n{45/tuTZ߷6VY[U[MWZx$OԔuT̑Fsw31$C\#A`m5قvx 5ʣJ穔[z2'<9 mv5k[$RT̎0puPtP3y S K 0lnR}4`+:5r(B8ve}zEG,6S ZhYhw%ĒO|@5`98zլ7)ٮU |Ίnѭjy8*%Tt qhl2Xi폘6 q@ ǹennܤQ{`ߠ6^Rxœdvq~K̪cӹHTdT)104 IVѰtwqeRsz:AAg$c9:쑹JQ0@q-bjDEJ?cu)FtKCrp]uMJ 1\DP|vPsv2j..a#W rS|Pcd~*`lt[J,ŴIA^ܥoQxAn=MMqFZ:ʇ$wjWKޮ[Y hxH fþPuLJyF {~ xHϟqR{cn==4.` [O]QuHjXjcjs,̍1P2Ar1Τ䶰x%%,$5*U3am0Hc6|+.q%iO~OݬvەWnZeZJx@ 1ݧtzcNm+bS%!Hbjii3Xڥ_le<`4HMiպQ4#eS$:[yvtR,Q9nB7? bpz"jt-JJ"ܾC:Yl0GSI%aQ:&[褯긠(#UcK#4 L4YGtA+OeHwc7=4GVH/{p U8#p{rO.khxO<ܯTOBnd |L?p:͉G;}iӝ53E{e?7U˫SD3 ̐+.KdF:rZ4-#Ot+C},;\iSO݀e,~u;piiG>/jqت{ڑhl+rwdEepcPWuΚt!%%t4C+nRUi՝7x':ye\(*0u5k"=TFOʠ5ue߉w#M Pj?ͨᡞn-J0ԥ^- תGѽJ "DtTDgX`9py91I)fvc#~&TxGy"l=QQtj2vʻETJ%#R3I@ f rsEvt(ӕJ|- AԕR8,pAr#$NjOFՍ,k]%Ҷ㥒)yNEf-ddTt{zAY44P`B$mYJ yKD" zTEKPLS!,7ā魉*r]kܝhu Kg_9%b|*<~Z01[8{E= ]V.q$_G ӺL%e/܀yh-3>TY+Rh;-V\GCszv# setI9>\^FOU!Ek,%`~ڞ YW7y-( i-ϡ/4K{Uk)$ 0dr3Aeg]Bo7ڝ;-R? P14 i2[#>h5F Oh?2햍m0)SZ8JXq LJO1>Ǎ qhppsmxobxO$v$!$zGDX&E :H-n{~Z{X`#'X.8ݒ'h*Gf÷~>@胂22}Ю[dE*2.'PuG2!8fD @SPkVhTn~tMAOq( L%FL?A:JsI~?2mi#~UM_Dsq'Ū;R+C}Uy5҂Ihw3qp3ES[?3I!OR}}N7HԮ00QxՊ\ԏ%r:'$V›u'軄0DnW1f(ԣY#~U\Wۉko zO%Oo(?YI_JbկN$z;[rx֔] thɦ7Ҹjӄ5R۽xMEe,e+| e nwV_"Ԝ~W+DT9j6V?->3K.sII]#1anx,HܾE2F #S+4E8+穧Uh^lӲ*#cbsFxvf/Jmlb +#WF˞;kΫ۟yvOHsQ,f=>m8NU$nBcNW2*8'쏦y7%D 4/}#|U9y 8@kIIP[9i⓷tJzg?5\I;l=sG E);ȈwIƽ[ܾG0έ(=zz  Jdvѹ+n|=Yr<}.8#Ql~$J5BFS `?ͣZpt-j+xq#x.mR;r?`\0閚7IQȨ!ڄ[թi9qi/: ¶I1WR7g(fwZ^J6rsl:jtXz8M_[=wzealJ'A!/N{HrJY~6}Ozlt;N~[#D+%ZۇG?m\db1^;eiHGzb%m%TArnr15i,)44mQ?GCwVa'=x*ޙThWx4tf$'WS:c}O Ay& uP%?TeP'mF1%/It<4rRi>|GqgfY%Xxӣ\79TRowuVr߫ǙZWeAu7V4ԗʵ!]8e$NN8t" GVLq:׮=VCGGjM"-XtmXȿ:?h͏ r:T_֮aKd|\u:1_Gvz)$(Ń&tU5e+xJd]c>mF #+Isk6z':߶eWOEWu-Kd'Z#VY\V*1^)Ƈ_uouԺ̧//:'ʻm RFF毽AYNMn*Ds|vo{1Rfm_~MQp[-TU d8D vASxԴ5m{>bL.w:`I'77 i9j VsqlWaB'O35+LpjL8sOFmc,NvAn,U+ɷ9v 1߂5 teTI=vXM%q 2Ɗnxy|Rv}7;SQ֯VOQWf!Z\ڽK| cAM?'qCOi-9:}T9 f[%Xp#P\+.6͜#:aStiX.tcx*{@"ʈ۔?٣P,dȑOFb[?vu+Xm1U*r4JpWGGmG5#''khtj].>?HGr+J9=a?^aa_:;=aMoC`w+{l?^Ga~mz:r=/?l$4"(WlqEp54 IIC.2_Vj6eW.VQlGp>@$;}uktYԕHjzz}9F0.WUCZA2@B =f6ڨw/!R|-9j2>zKP&kiukgЂէռBxin~tQ͑%5N 3Z>̿ FN, +R61tHqL"ooFoqSt6/|ܹt?avu\{KaRA#MeSG3]N6OXﭟ -(|#x\NuJ>~aX'N4Ky*R)-3~$}XThi4IY W$vM9EIYbpT*e!.=3^`r?=_i}<oKA|cI᩿ݮ^Էq7 GQw(m^V;tpP[Pt5cJgBQl9u;%]74inBtRi'V&r~CIcR MW\]XyYv1P6 5N_~-,0UgQ mUa=1kNTqC;ſsӸ92Lr.Y7Sugv!>dA5Jȹ2 mBQr+ #idf/)SZIb4M\0q$dw9",u$ՙTtU%A_}EbE.8PЄU֫{ᵏ?f٨w%t-~.UJ[htaMFr8?K}(~|)`v$j.$3cа4W5^V%ld9&gᩜe0-ߵ y5gV`yǣ[:? t<_cὗ4}?Ř<s}?jGt~9|W_Y[G_c᭐VEΏ?8// Y=^"gG},|"gG}B+>??8///vep=p "?~Ku9WsY˗zeRqt~l#y9|7.15vF0|c</ <+:Z`T\sN 㷦Ǜ,c 'yNmq1Nq,s +&GҴST;\>?v&S&BΊ6oJ0QC NܝE'FErF7@ , i O@0@|Ny~z[j?ڏWzfD&$DpI ZZZZZZZbBN>]Q:@2Г7t?S`zIrVߑ`9Ǘ i TG#]B6.F11eg14G$\}4<1++ ;4ԬZV\M%)F$Nt=4-Myܘƀ +ƤZZZZZZZZ?4&ai%r>w <  F,N1010100100zK    2015:02:21 17:05:412015:02:21 17:05:419pB@ 2 d ASCII R980100(#HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?k}:\ rIf(]n=?Σ񬊉b|}p+7Q"lU79:ן_R5\!d} O/mVF*z}MⶄI pnLcҼ_XD on:ܮSFvgJ쌜+|E>mL338ɛvg̏n]دO6Ԋm^#-<-%3-qL2T礣w÷љ! fM6S$OXir[\m/8*qcҞRI3ByqYJ6TC!{:R_5C 3)>u緧VoD֒@מsL%c"LL'{ P>`dc;TJ26xZ͕d@CA(=Tvw1HO֯i:WDڌx:%-y7̾XC ]p?>WFLvU$& #lY`o=0) 1LQe~n5vqC zҴl]D@9\dri_,lCߘQ*r32Qa%ef>S{V){2&}P=Nxk1έv[bKPoyPשsֲ~ "Ce,3 5%U-iqu%"LKg5zk\b֎^^)g'=jvJ24@]rv?ιXe,GD.2Oޔ_3µSWX\J|ϹeK;淾zH؝A3ڷa㋵n6˹PEH8Oz`ʅ %9\hQ^6vHeVsfX!eI tceD"3Ф3ӯ^Cu(b<eP&F:nlk# |FI%cj5>XGj;ֵ`m;q)F${]@-㩬˻iLr G''ȣ{ci {X^b!I<5#B.69>i?֭ǹ<':՚Z]ųKwu,s|a .~lZH`AIUns-.&.&&pJBڜհj;TZ@ndsn~P<NZmL,eu9x?ZEҡ!_qœw.隄cMBK lUr9j+!pa'$*ÖVC) u`wW?/O{ $]\M}3D$+23לI.tE ]؁t;UଥE'Vխn&ai>Hq<\ 1MqC\\ڕJBqHwSIrM]++hm)di$Rew9ӯz{k2`QǯU1o5rO"`k%7@hsVᦦ¥4T[b?3U’{G@aHmĄ$)7A9 x$@Lȹ8xx$v 3F_i`|ͤjcWGK95Lc׌=WT$֯$$#tS$]Y_u+6-s>_䁨!(W5n.U$Gkb>I9{;[|k kuk:9O#izo @"|*Iݴt'O](֊PA"Գ16R+`d'kȴa{wg^3g /'Za>6n;loS?:NŲƒI#upK/NҶm4uK=FX *#q3=[Nl*Ͱ1 ey s~սXj0|M<0[YN3=#8k4VMomcR=cg2K 3^krY?ЯE ԟVvˆT?$`.z\s W0&ȥvtLch.8*m2R.Vors Sad. Ö1+O1ҜLy#l\SLM=[I$2C !4y@s޳YP'0VrG#OJNlSӱIlQP؟uBxN,LG̣mo`NAS4y!%̹PH z/bGVch%a#l&B2loX{PuأX},"$# aA+!9_/`#f!E 70aV7&=(W+n'{-5AeGtG8PY X'q ӥe 6;΢C?Jfϯa]1t16 ltJI,qwȪKWȈڜ^Z]*gn~Y/$NT0KQd}2s5m33 cmc'+>|?95VR[XI%-V<%98ۀ1W:`g2`X%rsCȞ7rhjLKYZf8Tٝ!,: P}Io7smmr"zQ$㸫SEy^cCf,r +H ^{Y)rU$e/' 2=8kew2 L'PHdMeP?7 {ӉFSQZlmbIHܙ ,Gʣ} L{-.q3ҩ$֩s-*Fys8Ͻh/f֗}լ33- U- 7=(jp]uI_vWH_OC;+̵K]1RXnrgF# w>84]5Vzʣ=sfwƬ9ܖ a tMg^4# !s.|iy,&BHxV7}TkPpT|gR))5;5 VQ-e4[qsu}vQa A/mjpJ_q^i xg;!G2J>[z+oCv*pq׊),H( Om#&a]OݭȳU2!i<\s5=6b:(9qv+5.0ʷ6?9"3]+Jr=zi5Xl ~Tdwׁ۵uO{x̷mx2 <Һ TJ*Wgf>f $ !~?t{a 2dv TvҊlK~'?ahۙ~YQG}R8/A* Py{WFcr3Y*9,^;'hk# P6Hݫ ԧZljzaEo6g,ӹw?zMBKdSEKs4$ 28C}f=p9s\Ĩd'Rާ/rԟ%nm,N8ubhmFk$DF2{W4$`q[>#nYim"qd'֭J\rV]\k1 UB2T'̛xy]B#p-YUY`]DKpO/kcӔNȗq"r9;s^˪Ia/ekK;Wy_"mRj%v:pxU*z6 sp#_>JFbG9Y4PB3/֖!ēNO>CT.u27>~UD9OQyl2J~UOjZׇ4+HxWp0l#z2 99Q}k{l7V/C'9'"K] [K, A,9xm3K3 |TD;AXpڶ5#ɂ9W8.}qcn1X9`2?*yQRqvmx.L5bP(bbZ]jo 8ڙm I=|yf{L;9L^e<-h&*mujJ*^VC˼;% O{#;9=+~ 9]bٙJ?Nkkn´Yv+#8Ԯt,o#k`੕rWqڶῆ?\ vr7N'n֝ԵR鸅[cH7_]2B1o&vڃšD)?HVqN 穭u-NODp''%b ( ( ( ( ( ( (*63k R TAoɆ8uؠg((((( http://ns.adobe.com/xap/1.0/ 2015-02-23T23:13:04Z 2015-02-21T17:05:41.10Z Adobe Photoshop CS5 Windows 2015-02-23T23:13:04Z 180/10 550/10 35/10 56/10 18.0-55.0 mm f/3.5-5.6 108 2169 180/10 550/10 35/10 56/10 18.0-55.0 mm f/3.5-5.6 108 2169 True True 1268C86E11DFE406E9BB2ECF482365E5 3 sRGB IEC61966-2.1 xmp.did:132B8AC4E5B9E411B2EAF5CC797CE5C9 2015-02-21T17:05:41.001 1268C86E11DFE406E9BB2ECF482365E5 3 sRGB IEC61966-2.1 xmp.did:132B8AC4E5B9E411B2EAF5CC797CE5C9 image/jpeg xmp.iid:FEC41195A2BBE411AABC860AA72DC6F8 xmp.did:132B8AC4E5B9E411B2EAF5CC797CE5C9 xmp.iid:FEC41195A2BBE411AABC860AA72DC6F8 xmp.did:132B8AC4E5B9E411B2EAF5CC797CE5C9 XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmCC   ```````````````````~`Vf< RG y 1`Ed5k%Ҝ#Y:tj %r8Kp85ЬR=|fhg' L-H3_~A ңHR2vL4%G *cN1F-uD\k:ôҘIq^., x٪MˠB>s5R\/"+빩32G @Fڒo >NAn1 }8rwiC 9TYY?Y%zg!Z6W'ԃL "M"B 6Jd J^N6O̯59_5lA 5KA[!4ӼWI;oKK]!Qjôi_cdkB[urҿ[krMIvck(g*k0I?pԛ*\Wz.'{|VC\ʾ1i1oIZ$|lA3]E Jvc~ɥXR'@;N1܏=#4Q;S[JѼ0~kVlO*Ŭ8D凇+݉1'4֖W!ZڇZCr'1|'Yg6 ̂(Q (&IAk/ۏi5W#.lT7V9MQM8DmAm["xaMEYA|E|z2ljf3u܇cgLZkq"LBr/V3T*WZL#כsHʅRMQ+Q "p YsfDepr=1e29B]9 Fs* RYƋjF2+co2n{(%г1Z=p}fV*d)L)l-ԫ5ڥG(54"Qg I\įBV!6!k WboA2.&gWܖM̠mC8( jll@W槄-fOыpك:@K9i&ŻU( x5_eU-v\b/03tO8J-D@Y Ϋxrn0z"ܮNbi7W_CV9Cqϓ"Hz$%V>a2.oRkEW(5C/,׊..f7[B-6)Km3%db!%+AnTÜwhܫ {5AMh{u=lғOL9xvYU̝WhucZ45g5Q+WxyH5:零..Ŗ%kԝiݘflx9QՇnA;ySňtJ1"c@,F!Sqߌ 5`nB1QSJ3>*Ƚǡr61A#R}}Syҁ:eQbCܭa1沶=/B0r5}fs$Įoi d&yc$q4=ө)3a;fkJnHY6m.LyI JF_P%Ý9_WJ?֋XQglݝWD5N;{j˖"RTD(ưđՅ+W^=Eks6ɦ'8zjn2*ɣPVHUĜW=MhJz*|<涜zuueSOOh8>DfGVZeϝ'mNswj@ol62j +J3ڴt#-Ҵ Ngw1uv+Yoil.i#Fh/3y4kyQ -Nhw=vaX_29uy$+f^#jGcvhFߣ=)ZcnF49]?tXB1O兯o-۫`[5nŤO-tM&3~:jjǧIyYZ.\iZ+?SzE^i݊A2KoS O ) <"t۩3]>zUD/7 bCWVxue7%YSY~X뾋T5vuiAe{v.WygF,'ڬdE'ږ C&ˌ7,ц䮼NEL>Nq [)@h68PxqtMG^q@e85:=m V] ~{3L'U̮:`<nj8z?ѧM® Oa>E,%Ȫ*9p:IXE(Xqn YZd} ax5Ȟ^Tr-.BEc!V](KdC%ؖn7CE j.'U'¹Jޏ Т RkxqᄺD9; ޳]X'ou:hqR# bGْa.ˇ"B"$$њV)g}i*#ʳsP?D*cU``piv@Ut6 6? ̊wR^&M+H}g7H?m:9nLآL9)B:4ZL}d $blY>VFbGc<2ާ,b*)b60ݬlG֪-5ݰ_ݑ)%h$Hhܡ:KE宁7RhdFgH)I"@bvߟd6^SUF0D;d)+Yi9rxF^yGX,I+s2u1ݯDÕJR@ J e'3q%]B9+o. ,AFcO][3cTʱtRanKS̢4QRbqȽLh}KmmNcNT$V[:[!I7uL cdTpLut~GIg/*fъ;O` ȍ`Q9 $ ҫDn:@ע"JDAzMĮ@op|,d&Sq ;8y Sz?7jŕ#NeJ!BnZvsNU]Os++.[+k ];(e:r3dIYjJ/jːU[#;1ٵE9; rm]N%BN:;0Ā{^ L5u4%>Sc`}VmQVN41Aق Znx/n%—545]_ 3adk J8ԦYsrTt`@jJm' WHHV_"' X⒩Īd]W7bg3ng=A)Lҥ7) 2OӶ' "RyD؄6U\^cUӃN&00ڜ$/LNҪ0 px:4)L:wW:P/cs;/Op*KJWTm}.gē'.?q~<2h, [z>. 7LٙԶ3dғjbA 2; μ)_o rc# 5kU7)ۘTZny,-*JbT RT!~4ŃӑmT8`쓒i&z?Y6[e 9`7*.l=bri%鰩Rǒ5IWRzM:y Tl,~YΚhtY9'1U&l ҈.͋+CSE+HL,;T]d2!OxU"H*A)٦IE| Kaba -ڔ,9T~l"[YD &{rˠ!jK|!%E5=6Inc[gUCH$ПIZX3xz"{ 9Vǐs\MPyMK0>ayػ3Xn̠ I1DU(t/mLdfmYN8\;-dT ~ʳ Y"}]15tA3b}S3%nY[;{JZXN qH7ۀG6d ):JYr(~#v aU׶Hzd5q-ɨe\m4 du%"✢H8<%,ga~O ֑ސH?`%3i*]җ^TC"BÏکYeKaN =ffWUbsYN #V:O.Fz8߄\oKIi6ryMF n `zx/us" s#l1D ,&ԁ%ym߁jH4٣ qa sI-Rty16fYSl;8nЖh^ &)w1i 0r++;gjzc<7ռ5CBD[<CB7]R%;Yg+0 ~kB4I鳷=ā1VхKݻBLB[QH)DgPq&̈́ƻO #d؀Tl$J) ֗fe}Sm2N>BL+1>KuGQr6&D+l1Ltbz4ݔC$SIKReMK[?L(5+_WrNվR戱8ʼm-#Za)Ki:OkCĀ֒cVnRJ1_`{|;f 4CU,ZVe+آreȋ0LPd0Dz;QlӮ{|uL]};9D~2eZ#:&<HC]^R?~ c*W/ÝB{` $64%Q$24$=TuI7Ph겋d`ybv2+성;u ;|u>MkyV:oOkqku],:<$ens8pgs%kS{ Z)p@|Z_Cܻ:{.\;`Qe[s[odP.E]\<`"b(<5p`'jJ;~Σؤ#Ra:iPFIXXxcZcSF;]1\`9Cŏ^O.vpaʫkH@l^Z[/z%Rg3Қm@4|>9 2eafeLOZiJ%bd+Xуݻ]M]UXĐE C}jPVx."'Ck?C9E $M4nz{ݖ>8j%{HlqP[W-qXDuZ fU>&F2v1jP];J %}}e(YX=Z0Ƽ[IX 2~QBǨ׶nUb>9!2'7.:3rXƎWtvTKbxZng~yDvw:ג~G IXoC/r,8o)$u2}ccV5 'sK&u [,uZKzMMwϹAM+I^{ziNzҜF]:u#Nu9wcXuEy=Wqm,vbPλ9捚SI sӦ96HS u*4q谊sdP,oKI\>3Fxl-b<_ybu` ymSN̏2ZҹoQ;ء[ۀ_^o 1ܴ6{Ԛ Pl3gq{+:>Cr4β3Ul"N]xbhߪ:.t'(<5&FrӦCFO5y)Dv_(r}.JL#OKisw U"ƯV(&gk:Wg{Pns+¬)G2]D罒e^_hEl+MJpۚkON[ {"ܡ%J)X#V˧h-i59cCtH(;2VT4·IcC,onK9cӨ+tcd{jcm%JelZ7r6ր(9:gr*a;ጋ cM}Q[h'u;F)1zYl_s.uSVu|i!:7C][?%IJړulim^¼ŷC:N=4'hZ{+ErιIURz5zD{(ʓ[*@7svGZ>wjIA/gbC"dmCbʒ@6 #ZQ*D뎑8SBj6c6Ն%z2Htpq`݁)HOőکξD:3r$ՌIrse[Jni%Zpu;$VжkZӠҰ+їhj;uG]ssWTŵ21dн4[۟tUe JEPx;?]Mpsۘtnʱ%'rnuҡx0d:.=ZfБy|p?HS =zV,!0[p3g>1oek&a%Xj/e[k+Z5SF"#M6NŠ0oGh*C{qK)5&$2sY-i]O3lc3kWιA{)&k' &INi^\+NQ?R% (2x.S=-9 EZ-}@W}7S{ o9駟=0oDFIoދ򡛭{|sEik57tV@n${ '֍[5Bx2) ݖIfiu`N8Y[JfC,q:4C>I\FVzErTӔW+cﲜSi_:"kSli V䷢v9jK7i&$sEʽ]{GypGȽ6?/t|s[ͧ?7ef'5xH3\bvM}l,xNRϭH{$bUIxD^/zU J(4J$~^'Pr!$vz]js㞸[r?3xOwWJCHlAnW,4ߧx'%]ƾ8I1$(t;LDҹﰐ9tc1cM{^gJ}3bin8jh!1j.8E"rGdފꏱK~U'rY#:%!6akJ.J4kZlh?Mcd%-q6WV_7Wk}[̆k^/{_E{7k~),8ʭ.Yxf/(beK*rw坿bF˜oEp/&duqHE9\=qhyw DJH:+PwBi{=uW楖0GjK[g*̲lD+7=#?iq .>>ɣz_Fqy(=VTѫidž>ckBD urŶ)͝=H 3>-2$h&68Η[pq*"H G\QA3F-7-t/{+u6{Άz= 0lƶ+o )k)4ϣB5o94蒻-3"nCƈT-e*}KYX3)'?>R^IRSQ`?غ::2?]*JĨ4zeYkiL.7=Sr; p[>MEׅ,5נE)UbOLSH퐶!%9tJ,:/y\*cS{ ~6Rmǚ|۝[UpJx)^.wH丢 íRڂN$4 t>GT(fI\n}o\4w,nZ%ո%^ުU:;@)(k_6ֽ?@ 0 % CL`|; 1%(ڛ%ɔwicbVZBPvj-!5WlŘݕ#E]y#ct)}1 0 0 0[|xCi`nLfJ!C/[L>Ȉ``qU7ᓲ|MsRX``````````````````gQUC&;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ?7!"#16%3 $&2450A`7BEw*['4UM8'>>>$␢RCӊTcyq~T}/> 9..s\KN~QN~U噞..-+vFw9$Ud>q݇j<^'?8/fᓟ,pI9Z򝿀WWLEٸùpHܸWq ݫo%ld*N<:btsb9E~LGJsr =A"jr/N N}W!)FÚj~nr$d<%XꫝƂ޼: WkPF/*3blgazk}P{ٓ>y>Å$w՚ zXȗc25jYg7D+Vg>`čC*>wD"E^W;.: Xcis_n]ii~E.t4n!6FAD-Uw;=!BST hV}ֵ֮m5mG#|J6ˍX'>f|$O_ oq~1*5sUl".X9坿HE؛+ *EZ!轐FY$$7DR)|%_i,#J+>=ud*,/8J1Jr>k y}}<_CnȮZ{8>xȟ)h[2B}%O_*UHlFōg!Fג[RksEׄ_$B- zdX*",$zFOГ"UԘ4NU|"mX"\O]REb>z,XkR4%%saTbWjۨH)l>K kJ^UrFZf-$֤![G6C[th[hV+qFu`4]wg_z"a_,׏ +P r>͗4G Eesj}o}?MrQ-\bZ7/% .1F8CnE(>4nludr@$P_f ,\MeHfɶ19.eZhb60kCK aLU4b46kk'x޽X\?Yk++wۓum厯ߥ>)[)kMDN+}v^:z퇩pTvJ3zsZ8%kH3I8;kEì^% 5#bTxsXߟ^ dDGX̕W]>ABV<*_f؍:ξ'&O`nw`n/P5!TYX3U~"&kfBþ/FQ&w';А䇜. <ИgVkmt`Uv>B*z'5ϙ=?HT, KҳœzCF BZ=ZCd@T ZhqjbRpϣc Vdp_;`΂:yyd|c$y~S87ꟇdCߤ/GmjvN˙ܐAD# 0Q=AcU'ك$(|T+874c3m RH4xnmi!/e^]3󡙎g-TXܓ18dfwgǝ:=$w+{k~c_&r&^Ɖv Vjvvw/}&DiR֘XtkT+lYZͿYFsjvގJB8/NR1bnUL0Ķ3e ZJW:v*ݚkSϠuPT6P}l15 :?RWWTs؞gk,cgp`ވcaHwjν9PڡJ P\_y>Nü'/X]^ܮڮ%r4^A%(gѿ͒Vѭ `㓭(v6vvߴZ _~7-WuCh2l͌/:qug/Ԃ.le 6'4ŻNyR=LQ#ZwHD"C6(>qlI+`;|N.}P`ӭX#y$GZ^!eɗb[P$L~1KлnoOG򶷗*:,UTU,_Wuu!!{2{R[=SL98ݞv?&UD&;%keH",炍=xV?8)r=4W;mKI rGv8{iD pYD)ʹh^2-䒤kGG3?% = t}u͛!ؐяP}deX/RHЯ ʯ5+hzװ]A1z?NjoOj/vI1$y,抩+(vW˄KNZTЛ-'M"5R?xt~9{|UU8񵘋ƫs~@T%`s/ zVNW^rD᭵C$5k]fحz`-={[;ࣅ{3S9dUyr"IϢR/ NE-O)%>VeVf.u_=|,ٰf5w1ZܑbkMIF/;X4HѪ^$oE'I\E'o/GˬՊ>wiwwfyu{vG7~GX}>В{VUs]v$#8 ݛ#t_aaj`Y:;COhHho*\/'lYjO pgdetA0!LvчӿG]l- ;䴇jW>2Ƕ9m5ς*0H nXr/=ֲRꔡ*oh~'e_QN}}ک|V_oI{=hcnCM-g9tPj=il}L!_gԮuXVTuJ* ., vjns5[`U٩a{ rd0|DUHՏ9IQ S1PrVgЯ6f$tts ym^ pöa u`~qE$2YjUJZdDc$/X)9VԬbV-i8d._' ҳYc\} Wv_^bM+Z`ڕf.4ֆy-f$V3b4Ud?S|U[VhYK%;}z xb| Edbf(oFv񢯅( r'$.B9r'W>K[ yfI 3ZM /mUAvY3BږRBaP%:C/*oϦj;IcKǽ ?|ŔyRz \&vV YTI$64dnk^b7Khv.BMk7V r 2Gc OnlU.rz+M$dD` "'!#D|F`yC$xՆU,i7#6&XLJszW^W?HSfBE"* !uG/ 7'D_S>o#}D `rTr#SMO.오fQ^ēLهcJހ/Z24k &&jڐ`29L3kG4add_ΊpUu,g[$?gȫ˙h!\V(S+%krcTD"ysU8#"|s|rK,@fJRl7 1K?wgϮy;rXl^hgӱֵNKTl1n%^@1{ K\+#HO+*x>g7=W~=EGv2xU"[lf"z֟kiE7uYD.:}n 6Vslv1y,K NǞiv`oV&D@xnѵj(4+f$׎{F3=E$2+Sw֘guEch,SMhħѬ!(w67N_Eu"zI'R孥84Fi&?FF{RDthV8:sU?Si#"ܫ,,U#4K.Duhw.0d:M>ws3nelQ!aQ`lU9#MZ]aTިJ" M0K 5FS<څю]E/AB f5mmSaiZ5<} V2NGTX9Uf\X pLySgDlKLO Ǚ@eW;4zaփʏlbsѤ/2/)\ZdUgN:Wב19$UaV?F:/| @k┭QYܷ]ԙͮ9?n8vj}'iw*ӣg~gL0VdǮ+Z/B~jm{jյMYvJu݇VzgدƣFi'|l5)Ueq߉㝝͋K,M"&P '\P0+;v&%ݝhmkc5*pa$؛<6dQ `+NBABTI|rԿZ݅}UVJˍ#N?1]O3V,C"2 vWqȑ=d|K#Uj,?ֱWJ^/(n~+zм"b*1V՝u>ڏd9<7>y7;n^g$}$z~}}k3㿷15V!2-[}&{mKV*#vt5iJ$ݐzw Q*+B?UK-&j"^')߹ 'VP$݄Rb!fbjrycg'$Kq?JyKBd퀦K6! *:ym{M+2DV9>QcIG"U3 e 7^p}}"^D>W~~~۽vgpФC3 g'56!x~w`Z]덕"1WkثU:}^[{n~XQ,碕ɑ]G;_wFdkjB B*K,w\ij WWO7jH\XԢ`hmj$a;3o<>+\;N鱯QQ=㚏|ߢ6o)P7_csf_+F{.z~x{x_+jTK9a2we֚)!r|z'ϻ ȞGvu/پSן,^Dʣ+|1'5k=]>s*z=U"H ( k(_fߔ%J_}/j_sSN&1sZ^g"H%K"GYEN}&yxşklUPѭBWv 6X'NBWX;/H٨oY6[v>)vme{@eL4z/i㓯{qS4uY[W8}c{&Atԫ]"'9!"Dw 1> @J_RMFD$;kƆ/HES3S^||/WL9["8=d yL]9,t%촭F*sI'\]9óãSQ5R ~q)'>SIU4OXl0׀=i "1fыWde imbo5GICSq,U|ɬy\ &介rC5C R? O<FJ ^Mede(&]jڮəd"+0IJS=05<*-zaV+Y bҠ<\xw*w0ݠ?V>*cC":ۧ?wo̚2oȁi4ew=3d.]W^&nxeTH$8irő+,vi-}K%FIJ&EQ9P8ȉM1R^l}gMvvKB__4)sG|{"ߡ!n(h)r:oӋrr_q[*InI?o~"qw\mibqqg{c՘sX[5 S|FidDk NņErgk|s*^ƽ JX@eE?ƺQ3uH (D:2)%!PX hɍجǁUl ϥ k>wҽ2hslfUƇBXZLS[T=^)Jn&2 ĭs޹n_O}k\;|i\`k0?^ja"Z||8.{9O5?Xs*aH./g8i= 4ߐ->WcSN* g9:?υq>Ndt д7n2=;5_OZYgnчt!gG>r%hi3Y$N?;]2cR|D޾CvU}WU?Avj B׸םϫK3}W~OOGq䞊D^;<iW,@g'(CXt~S8aGr%O"luAH1%j]aR3hEڹ״jTI^3'ё-Y:NetkXٙu51+LTwS({l -v&4N}zH@q%o?gAݬJn(9 &1{ۅˇ˔2Д$gR5LFz2rFJUW,usY[z`gO~v˰`""!v=l"|ذMst.#`FqZc\*3}W[r'5^oyi6? WǵΛcNcʻZΦ6uK ۟H1𤺺z|HnjlKRhRϦ&3fz ~>T8Oc&"ƼV;^ۓ$~yaqُr j:P* 뽱 S,I[%,8.>g,c9_jIlOٽu[M5 uWfR8_@vw`_K8[B#P2!NYԜF訊3W;媉lVN"qFE?y$/Yg;A|eCZ_6}au Qqbܚ^m/dR/e7D8xDl$Fb P/JfHo[-XLqV,M;-0"y[Y|F͂v2!(>VQR`D䌞w0qղϔLg?I_Bf̰|^d_'誮DOf=UO(x*q|nw|2FeE|A" Azz5Gr;N͍, 7,8UyÕKSo,3Oi}_hDO0Z+.cVQv/ jiYŋ=ebh{xV59jUFGu>M_OT]"i'amhW'=SǪ"_$ ORZZ43@J o\(Z[MiW lTV|0Ī3ێON*zJ89fO%syGmGEtdU>9qGO9փgY<*sO&HW\Aw<Z%- [<## Q+hӴ8 $y sW+k׍ ٰj9zGOqô*$|t ﮐŸԁ:JījvW:d'FbdKa9*֛Q2qGvUFf#l\MQ~sG_{O5^{qU"F_PDBc,֏9yqezzj!GrU?m2=N@Ojgˌye.Oz͍tY1ԫ c0]sKqyW\c'fmy]FȪcjxzkƧNxWs犋k_;:BTz4 CEf͑K@6܌┹eR ljAYaUYn6ރ#h&FZsK] ZpOR}z{vo'<ዴN5xܞZDu `H,U[%>&: @/N"aklVe,Up (ve*a?H܎EUG9ǹ8{}s9;F'r<~onvy 14V'.Rb쿏C N#S .tu3`3 .qq7tY gCvl2ZIVl *hAz\$wJ\ӵ $, EF3$jۖXfd?e8:-6OUwzq >L $KUm[^-MYb-jLFU-ĢTĝX׬r1zQ;X8u%N(G  jv Uk(ƱO잿\f=jxxw5㍍|+SCVe',L^`Tsש-QsT>3ߙ|e6d Z?Ӱn<bOmhX}F:6]?i2.b7ӿH=$G [Ni]K~م]w%_VV KDNP\5a둂֨YꙖꅆT΍:^?FK@2pF|(}L P1 (JNª) ꪞ"w*gW="#Xo~7jqGsDŽjyo\,cr-\Ƞ%͍gt+tu\peUь3:??')uZ R&k%LQJ >{t"%tz\~`|+ҤY*/i&JwYRlBBkY4m02nVҹ" =^Qv kᷨJ!X2D q~ȡAKֵ?X_Te99cήW|57+\rs+Y_mK:+}rX&ov@ΐ˕!V>N#5,oM{Qi G2`@TgQ8/b#-:%]3;_vV?V>KFRױa_7Ofw-Kd$j@YXXsei]*Zh ԿgFQoBAZrݭJj ^; ]GUƻQc+bʔ -F*%L|RoD*Q,b3 QLm1ыHcoaӳTqmV/VX]Jd_aůU|/=y-p]VRi-"lVGA~/-SW|{K#b*YzΦq $ oD5N [tUSB(8+4,M5v P%Kl x?wY5Kb/dTEG: Wd=X7[gϴGKc$&tis湗CJbP!< 9CV֐;v"""`[Oc?,ܩ'_c%Ycu$×^Kקˋ/s Xe3k3is_;ųS7d>d8CmY%}^?19z%` ɺdPsRE(zvEs98 ^?]~yln?2'y[ysw3^ˏ'UiY*}N}N}-n}-eEUyWIWUլչk/>Ϧ AU"jI^#|sמV5[ R7#[P6| e8x<-}e ت2qOmWF9lV3n&w/c7cEωH !1A"Qaq2 #BR034br$C@`5s?ڶWW f 0Y!q[>!qY>!qCh7i7Q}P]/PWld?m?Uamt?mnooP}vWTSm)Wʴ7돽|M/i~DqQp}n폿_.RO|K/~S1y4Q Yr}oJAiIhj%;o3%Rgi|O~y%7 _MOTUN}?;;Vg}}ߪU']~gYedc><\. Z-<8|?;=JH >[PG8U.sK0췲1Nkz:ynS::G.Rqr:=@.$0LI*~[U 3Sf0,I:]7,UꃣT wn;׷Tv*7>*R6GޟFe҈[UQŻB)ƪ!P`t {R=*@;McϖJN KnU,;o_SjWR9+B6E5Ⱥ} *l>9EP7D5;,/Fg}ܙHŀܫpZzg,K ]<Ǫ ӲgWD]?_:!`+Dcng* 4_}WWWWWWWWWWYhT =u'!vxX_VIɝ ǡwAZB.ec¤pۙ\&.7 `h6S PD-辢d ܨoFxܰ$Mq'T% 2m!i[hU8LOE!r *v~cX`mJ/NE0lڶ0m4< `YIkdm >a o|0 y5UCE$U ^C]vFXNQEamE;MSV*Is#*9jt!yU4)); {shg 22)[l[QI|C[۞ G:zl#Pc'? -KU_^SnBT1fG/(# "Av2`7 ϻXHFv7B=dqdoqg}Cl[L#mljM2!$7}긙Yq3ʝkk}wO i ôob;kldl "MAX[Lς&< b5rŠs=F8 58>a/ <ʭ~6?:W rE;V;{\#[ 43(X`k[k>&&Wܸ |0!f8Ou+3 Jƾ&_5ac*9/<zw-T4DhZʖ^&g8!gǻ~2XAE94'KOx㲧 KK`_ތ7UQQApqO tvU'̌YYdEFEb.ʃ.7[a.i ⢦=2N|Ԁ&E$ yC`H&Defʤ5nrwSD毘ܬX9tȮ&<'K`jP`h'B2^7;6(f\Sf24iIro}~g;om? \bɵTuf}}8EpS5?ʢZi24lwO|ovQV!7]YN:M=YɗENe$49}mu=Gى .vl}kRsqܨLuqeT|3{6smC﷚y.;|`vS$ U6Gk@*Bf쟈O a:g~OmXP00 S8pq絯MWÒe3#*lM)%3U xܩۖ sY 6z v6]6>ޏT<]OOFG `={)n UtD~SvX>*C9}nc~_j魔܋Y٭wh!~X͕~)&+:a&S`@FPl֫!Y +|VO4EpUDb$FGMcAUx'#veRF=4/uǒn_^hP>ɸ t:=Es]{6SW0ا+YPȰ_ u1m&M`>6s_(D|N6@/q0-׎.}ʆMl'_KfEktk@ЅcetԐD#dn Һhas!߀BATՎ~f'>*h]S2˚{Y`r>r9Q*{þЫLOuHAs9&RɕQӗGE.h*xo gv*#E&s`x`ͿOLےv[pGđ{#!Pu)2SHFisXI]QAXtQ{7G ݗV#S3mM+LZq0f-?$*Mw߼]5S8`u /Ut m襆#K]BS͜/sv:iWF e3ˎ'9epHYkF ţ+̞c\RAAC\E?I %mm*vyq'3S@#cۊok@7NŜY:]&@TTZ۪ͺ/$@+e'm*joSΊA>9U`6 FpVK!N7>S학?vMlSz7#NUlwk,J lG Oe*R+ist9Mn]CY_e)V-˛NAG-cEM;fvžs?O%[>ݢTlntkl,>\Kr3o1ϹQ6U3!vl6U$TF4NaG& <wE"-mUSJw|,ow/r;&4';PS> 8|hٸe'aEf8ܦvtIw3`aTH! yOV `L{ޱ jbcbfWhg ۪+mӮI7h9 ڜ4GPeq }6WW=!ͯĩ͗P@gwGwL׳N`YU5]#T<XRTmGC~퇹r)Gr.5X&Cd]3ST%xe;F҈uatub8<)O ܿXm kԋYbTjakUrv]}˚0,oue}buf+knyF V*3Y'O](?twV .:,+uXs*u43,MӢ1qYPa+Prsdcܰ}V l<@W~KT`~vdnXcU4yskw*VMA桁fܔ9QhPrõot>qc{YRmv]JlF..m573ېl2X j?l]K&v=ʡ{LbFܗ˲*+:8v+4L,7*]NѮNʈSӖ#%Kj`8pī,esh2Vl⦁ +EBm$M4.%UH͉O]vh p np^Kp5ʰ$n]ueSJ/eR[3ceQb,sc\`t %kv4,<?eW]&4&ЛCtn7>vwUrMP.>lJ/* !śu^47F' β=T$p กɦHuQNX9]q}(8'x\Z 5Rq W Q+JJIDyjG[1VVAi/Ui}K>jO.X.޿zÎX~vEh7{QuY; l%F~qB44=NR(N ܧuu"EǛJ4Dnu9ls${痼?J X䕶:l0g7>EV2=cv0<$YFrf:wtM}Ԅ#yʧh%$|Xj*Ng: ?COcGsyy /[,[CJ0KM8t nc1ۼy_p w] ▍u3r ghQ.U_𓞚,QYQnrW%YeFrm:=t+i\lo<t5 `XrEl3@@eOh7Ās*OahI+Q eܬz& ~Bykx͘4@,+dATYedYۖ[BuԬlܛEw&P\%k 68ְPaMsT7)tnCpbEUI#05H.6W=MSdE]9]f*:5E;+V\oKPDdxUix$z|=UuTYNf?dīKhc}=.H ]84njܥ3May۠Xn`+b-8 іl/u`M%<w5M+phEs'7>*/se;$('hK8ƪ\X@'@t\K tÝ$wʷ4>rCvOt_ RVINHX0gfX){aW|(E M}P0Lz~2kr7MuhDer뛗h8ڲv#/J8n$S*3 d2inp{J Qofb0AqQU6 Aީၔ7U+]$RBͰXdgv@Hr]2!G{ FG 7^ޫR* S;;wRbܮ}蝋{83#Nv33\ ~OY%^Xq =A@ wI=-0릋 T> Þ1P Ӊ-`SEh%X_BESv(_b,o/sAOuY196BrŌT?kX_.7F˵v y#8s{5\F#|W7q⸭\f3|W+o,gsi,卂iG2w:6*ZnJ@*fnGiTa52f^6WT ~g ٶ:eV--kESŚ3&ǓZe}516QAr}Ĕڷ5770 sDQPmYPs zS?]q+o=-$ᛄ:b3>4K3.>HwPbnQcyF]|Ӿ6ɧ~[#96|/NŞM1f4kzQ ť<SBq6:WU2W!$-<`TY#{3TRE;T ʍ5TNmme`4iӱY{7۩im:>:Xegw{*Jbmns77 ,X;dnc 쪌M6YS^КJVRd+)Y VB+W \r ɦvN p y>(QhO4G:ir!SəaqFP@5Qhu%Hl4N}&M$m07⩏єu@trZ0Z݊~#3;̷|uaQ]U|,Ʀ1p53Jb-osS~:;J`{%G SVTЩ/i椬P#z*V+5Mç"O m7PP@x/c{#aS74 `h$ۃ]me$\GeɠU'#mG*HLEElJ~'5(WyZy];-Xv#]lY5@O^2.+ 誛,Q ASScPAeG.DTc+O)湽e{d u5OYTrdK8OW%YdfJXYtgNw>v:mN}B7 cE^ /Ԭ,̫uUE5D-<-uէNv>:j4}YiuU=GB9S׾<؟bMVco<.:ׇ]e G u-j&?uɧlvNX"30SJmd4p$tD &z</kl~eXj {`1]yMѨsS2' "si *(,B66׺}׿ֲs8r⩇y/f'N0َO`]TVf xn-Ў¬KKO &}MR P瑱gi\d8ie?3&*2gײ~a:5`Fp6^ITT=fCQ谜<KNUs֍ ew[ӫeٕKA 'G^ۧ`oi yT}=3}=$- h FwhQJB*"mMTM2*6]>K dNpf{jmb%&Q6ܲ/pyn9_4v)kCMx6k]ܮefe;3. Iz4W8ZE#naTh`FYeg+:+W!\BVr\W!!\B):,}BnZKGS/Ġj>*Hy6+{+~pV{,ZNMQ$ qEVGe76Q%ku6wf7t ^#,׼f'̦${dMddtXsHfKEgq~[-ñy*,NYC-?{jf/ pN [>JHǿV,Gk7u 7)TQN@kNf SAO*n7]̍\lOnv:YQѶy.%+myO4Q(JqЫnBhOH5GB,y:|&RaIW[X琗4ՁR:( ehi%W2l@R橱_ωh5j8ҀuT]uFxQeUӀdv[%G} EA8<ޱLy\3o*&Xt5YN qX8qVin(kiv]LN} 4:* [КCu,{_+"4Ӱo0NUEGϲ%Q6տx|V r5+ | eB~_RX#$Ya_5{pŖ;#@F!Ūr=e/J6[+qf{ h7C6}XF# $&K/?}'0k:I{w}#`3QK˹'+* 1HZ#,|SeF#e8ɏlWڍ#J{)1wބ%W`8?zA5qfvڍ(sTH ";5U6 jqv~m HvyZG3Gngg]^;~(}[;Fv"۬vk\]!,:ELpK~0]hnvG V34s \ X='zy7d #i5Աڜ}krSPF8kkm*ZQ?Qe`c 5Qg'K#@&YܮRO1v+pySWZA6X#sxrG̵? dg9hYfQ᭚KO_yg SQeTD.mF~7ʘQu/b*&k'D/opRNY>䙇|J*xUYN:{&TaJ{_qqw{u@w t^tC*հ저&ᓇflyhlq)#g?.;$i}vr }hk,}|tX[T5Q0ܸ'=d2>+ct"KZ~fk__Y02MCi08E[UTԳGl~}U=+#>ג x;*< 3ُ%Tih޵¤q*k9*$ (,M}6&Q墟O.tM岤6z,JjnR1:CmJG5J0]lQs%Ms ;TpeCgnP󀾁KLzC06X8u 5]8s\-orß9eisfMWYUHS .̈YZBQUs ZN:ܦW?l JnWhuE=GN߫V6 ükҚ:Y%3b6ֈoWWt^ͽǪtU/ F2m:M~w@__@e#~;#gX6,wCɧA~ֱd~;,Gf~K!V](|*dx%aFC.k ?z t RQss`X0vx&]EhEaL1wUq_n?~)&ԏrŸw2>_*X8{#AR9rtdf3 z1)Ǎ;UBu]]WO?4%V:ғ{^tu#dΎj5 sk*^vetrJ -sUt9_O7L]&[rð\U_Fi]!)JtP`Xe˛3 hmƖ]"nWD?ЦêV!)d4$m8V|6{ZUR?I4A~ lSݑHQN]ɒqV0#Hʜr= yN{cD׶_dUR6\)]B߂j9_=[-'oҁz_ GFwVTvV]>gnJsGPb h_:]vOa&kumo~H-!QOd]#/t {,X]Ĵ}UGIߕMMQkAk,#1N c$*MqpE]`0`qج#M#|WHc>ag+0䱉8T>Ja$[eR:1Cϓ Rb<\6Tk&UӱNBt Dh;/tM6TȳUa2RG3!?JgNs9E+9E:,'(u7 x2>XErfyGTd sEr,r>'SӾ_`rejw4l9pHm;U w]d)sOV0X]2#ݻy5RaQe 3)jIqT2AS_a9$xYaq$leS63ܮ1tm789NFbsEn &_81ĉtyFoWDh r{N樛É. =Gp?j*賴Sw{t ,\~6OmUI(dc.**cn, T# RBu,R#+8nMA\4jºDh\s؏\_c_P~`TvW}'`"1[*jI CT3)L!1rQW#siՐu!nkScP +`{ܸ\v'zL&L>NMn~ 2T|Fɽ p_ ZQ9ϗ\Hj`U"ܩi.u|%[k̩*'6)qvSBqTgM]`OS 6^^ȫ.QĬM1܎a~a{]W"룰)ZH2ʉ.ww: :Ux5ǚ:k]M^-d&7QwW%9Au:R82۷U5}ًO.^*.TagZ0AT=7dc{OWLwb=&u}>Lw!GqWwߨB;Qc1ݭx6+UPܯpGR7dzj c NjHئ>iMUKy3gM*ɟYm6zөy߉UWJtIfd (YG/!1~_WVc]..8\pq e[S6?,ugA!1AQ"2a qB#3R0C`br$4@?3!ǹљrdgFtgFtgFdgFts#G̏s6=t{9sCχs>ψs>ψsCss|DOωψEs|DG%┢?GKb8HXz>!|B#Rc3f}^]vFx/q h19gݏ* N8tT̡%J1ȕ#S#QPkTW1C1* \,,Pyv'1 a>-hqahƼ.Տڔl<$nZr[N1Keq%{h(Bja誱V>& :+IV˗ܖʕJbr'R)%Bd%1yղ-ScFR1):ˢ3IPNh#RȎfxUI֞yFbc9r-7㈩ʃ8*݋a|+W0u0_Sño ;2׏PKS/rTr-jVM5o4FcqzVnw +еd1q9["xʊ5v_ךO_|60ttajs [DjJ褮T`cr碊)\gN ȝ^r)ےR= Bke*1JnIfN9,+S/Z&QG%&b$h+%+2M6dGoK+7N~ᐋHF̓8iIhF4hƭTDPFj7%9)yi h\S~MV5v[J.G%h& =YO]/NdDĦf\_s6mIJz%O;WBSOBm r;Mr$x^nBJ+R 6M+Iس9kbSi,ItR^幝MB kةS,|8rNQ#dD9;s,:z9ynF9?+ܕ&2]ɻR,~UGDRT3ȿDNJLPr'aUVL Wf\厁mFDX݉kGҋ]>q""KhȖĩNvbDrZ!MLuc3q;+jGN g1f={W~*ɢ=Ds:E*,rM wَPw rЊ%n, ebR)"jW,(wLLdqDB4k"Zuaͧbu4Vv"orW/bv#+8\UI+mrY%ؚTIZNķOS;G&Jo) Qce!#5*y]ht:pzqlsݬsaJ(g0ԧ,rSЎ Tv%QSEdʲo'63a2>- fyB(IOkq;RN4b)g9C_JnziWaȳ S\kQ}ʮMOٞn؄yX95uleSiַ'waa5ψgL} )CR]&PW&t"T84-^TJO.OG#K;=)(N*[hC}_Bi&}O)ƕm; ܎"Qa -bPԨ|:>J9\X[[Y04k/s vN7FH/WB_!NR_C rmḨ؟[RIFV_bn} lhVknM^-9:9}&+nC2sFR)RR:9sB00⌈d2GGalWӡdRҩQple,;w~SGBЋP"ʔTa1nŬn8KC#O;|W)WUt_3$)m啒^Ǥ"&rd5JmYr!Mlc\ Rya]38qKWbrȈjc:4G©PV~i=xuB:X@ [GRrZ2#*,!;*zYIdޥynBQ:yzs2I;259j TvG6Qe}8QĻDM}>fMVd(Jܧ({jgS}UVNM);JO};p})wv#'cYim=5L%+"B>aD%R;iC-kПq͡ yFM;Rvƣ ֹQMF9V^ftRzrr͊K*{GZ1bIZLuVGZ(M2oR6Rk1іuF?]I~樓!ZC+ڢ#卭RrVE Z% w0 nZ6"23R;hiaAAh!\wqGá#w^KrYeܕXB %RIDQ*bZxC\11rdi] Pӱ(t92K PrؤEXZ%D,<[lNVVSJw#BO:*Е_bRt$ܪ=JS^}XZS)#vS؝8]$b>)2^s҇ Yʊ'eYkgrt\j5r`E8C:5-T(n8#c=꒒Tu]N9U8/FW?6|MQK4{ثckDL)pXn9KBv^qp#d-teh8h>[u-j59Q{CGA7MR-.-(ve';15U} j$KC*/5wyUF7;g$a%ݑiUN/%WzǡOg8`Oqhf.)"k1X,kԯN2Ցbܖ%#Mn|Ԗr޺0e fU8s%SrPqܹJrtKN27.4/}l8?hZbS0os1{. ܕFqbsE{\}vϗzAUnT%=8f"_.a;߂0|,ӍtXm Z7*ITArݑɣ9{i|zƚwN*S/r2?rG/#er/ѹφ}EMSթ X+C[R6K3VE8mԖ΃_D?ګ_Ԗ~&r˕kT>]sݪy3!IK.2ϊ0؈>ǹw/ƿ޼qH.P!Tў0ݐ/'k]f8MI~ +T̚F&:FdfDMWӨ?LxwOZIȨIYY-f (SޝL._-O o2B.-M [Cy/qު򒃵{/ԧxC2{v2CVEFȩB3Ș#DO|4{ |<{ыr!XhvvHŏ (WۍH܎!O*,azQvlCG_Ga=J+ *1_V*ԜL$Wʅiob ,1_Nᨚ(ZNJEeyJI9喣FW܌4Զ[Җ ybå^zn"NEBhcb(] ]~Tv,&["-=~kHMKf^:t9^*ԕpE7db*:fՕ<[Nj5b~ {6J(!OձM)McO{Zw~k_FUF 8ÑxgnC*Qĭœʕ!03\\dSEG;دyd|@yDtlo:B7on\ ӎ#Ba=ʒRw v9įIE_-k=>Nț N*]"%}7dbgbZb96+dܥ+P95\%Dreԧ+R*)Թ2U^aܤ?1 DM8+rm w,ߖ_Bՙ"tC ]J(N+mC 3pNF.%){ۥ#̳\:Z<:Sl&iW:{)Or{K9Rym} ʣU -_:rlT%SV[(Ce'.`XꑛZFĽR+J}JUOGn ǬJM+sZrO e _1~+,6(㵥+}[KR0ފ^2ve; TZHTWeE=W%ȷ(}En6⸣a# OHtSbe']_ЩeF BDuᘜܭiF$QI2RwY]ܦ~4_QpĸZއz3B12ЋRZaQC 7'׍MɎ7ŠDդ7vU1tde $&bf%F.(pjGnݲ++x:k͡/TQUأUfh[9/49LmZ/ԅ|SQ>.%iwCw U6Ћ̴%!,x~#RMy0up*Mjbvc/,g؜d۱s~#;6]jTJORUC'b򢗎)n|1ZJ?R" vI ~\\Ɋl7|M.lj8{e}: O,5R%B97*QܩMXl5q:mcbrȏkN˕=nxF},̥)r<9en[>붥-oy7v'O w%Ga$R-HG!vBЩ~6yˡK+*M Q 'y"XCӂ-\2#v:Z/epTx8֤mء#[70rvG*;ԥ]MuEbp6^7)ijsw!RrWl/yQZXEU{kb+Wm/ʯK9U~BD?pWxD]}O ܢmIEڐ9FUJBpw:-:"5$BR[2!5u|$GB5G$ah QNSNnjUWm{権+Mt<x*B;Tr3HwoMc8!Z)ضsbxxʒiu࣋Z{^?ާ`^Te3 c'GԌn*܍^2Oz#50H ?,%Xh.-Ga;JŋZȎZ2#\{9ht0tj(ſPJ?3 ?L< aY~/_ ]&O|*rrJ]4L{#k,ȇJ/ȇdra2#"2*2*2*2#*2*2"(|crNI9'$3rI9#gɱv3#CA$i7] !1"AQ2aq#BR3br$4s5CSc%t 0DTU`d&?>q>}a#Q|>mQf>G(_GNXFs-qg2N3DOTO1d}O?|~>SL(1D:{?\Fs}hkE:{^}\QXB?x~ߺ?ў o+zG}J~<=F-`2V$[n$;4HU=Nc)}CK3R-ksGYϩ}X߫W~&C a]^wɏe?&=&Fa+fCY(4m}d7HC=΅}>TFoQ 1A`I_;cMIî7T붑|Peu Js1"DO)7]* ÜK3@*i+]"]NN%N%T&V`/}s J M8f\=+<$ҵ @:B;0ZZZ@]y֫M!i\mM -#c<Ъb^MsaߴRH'- 3J hpQ T?zi[_`ިN/8T )B7FG8GN\$֐&q M-#=Xŋۓe6z:i.]ayU\:1o[)JPj) "cn܅\V(H!X[=jߡX:KR-RJmx Ma*Xuipk Lvҩ Ȭ)O:~4٨ֿ.6;!"uR7^*=Cr<"a^()FUJixgU4ٔf~%p*)eyi=hK;a"ʓU:okQ| aҽ yGj\'פJOIK(U Ñ.G8=je)'{yabi)XدqJp{faPAR9.X ʹXs{4T4O;JwS|_K>H _+E&//@H#DarR +)anɫ^UV2?bFfQqrP*S;5`򵋖Q=(3|O0zFu4J:(|jO s[BU0{b 9eE)9WQHQ?@&vmF PxSh(oR ?Ampr0tm=)bJ»  pW!E\aG0 $׀<ɀ{৉iHW";r'k0iT޵\mͰQ3|)3 eҭp1e?5#tziYƓe9 1s@HM!*iBJa%|FTb40ʥod$_+;4%᭒vy]~w @L4LY`o5ܳRb} Z 5a2Sm8(,+N Igw^1U+pi>7Bȁ_l^]yjMT$$ja1FvI{5 MU^}a΀G{05A]pZiqIRR~oJvQ@D7^f Ee@5Wq' !{p'=QiBp|>׉$&I9£RvmmR d!qRڐeЛ=)U"%MY:Ҽ5%˳Y#3EuTB))uH;CKo`Jȩ%٥8Ŀ>N wJCjڭHB/yZ &&Rs.KnX Ͼ%Bq i420x̠X%g@ʬ4>o598%CikMxfHnw0JU-]`yA!iI|chNy{41_}JGbUa(͢OլKOu \60eNf@q\+>Ò5M"f£x9DaHld7 x__m+9 g$8w͂fU@b*?̏U|/{vB&3T`?.+B!9apI־0FIV }F=g Y}F. 䌴ds}0ݤɧm|\JSn=ܪX&d91uxHJզL&@MyOBnQ:=Z}+}N0 [CmWפmeT[pAJB^Zh2ֺCݱuN!5t4Sc%=ZΊ'J+Ji >R!uZgVod.: gRt*+3~ȾI4&v|I=ФWIPלr8\(NQ2 45ڧM=PBi"4'X36BM+*]Gys}SØh'샆 J0BJ><DZ%Gŷ`RM S8&⦛Jֆ9 һ4 bRԟiB*t*beA@DK7KMT3=%)ZiW7]q5S;s9a CB)P)ONeAS~ޯ:F1$;`ӷ8+Bn4!+/C"Tbӈk#H~G=p--YJEL[!* Ζ5`-U0e ;y!l/w)e_ yŋ9+?Ei^1FR+樏] SR+=5<h Z34U,vҫSgߘۉ} (jBj >z=0iN$P0M̏tV1`fC X KgG(XgH27߭"Нl”z+cO_Tz+ =b=EIWb[rc&M_5iꋂWbZFb8z!9,*:R7M>iČL'҈ܣe,n )<(?9|HQv& IU2Wڈ Knu.]AX}]Y尙4T~.N`*[ 6uM`.jQƗL_dleps3¥ 5fI$ F62Rsi9&JMJ5 6h{Qp蚶=qy/K 칑:bsQY? S϶@K̝fR^`<썚͎y5Vl. !ݍ)Vmˌ*WDRq"aY6m܉b=wB8"Ra,V |OLa.]jTcae $o W2#fZbmhS`TD[׎nf+(']bY$Q'sp綏) EҸ{yhV. i a9{~| MKܥ$#cq˶aE͒RJ(pȞ1sHk^ǀ W !N"Mi_*(8TIj8m }ЌMj'@2hkSKRT?ѦܽM8R׀u6)&sN0ʖh]uZR`O qU=TTLs,LzCEdL5Kb3jq܈SJRtskqlʩ+.PөI<+ @-au٬nkPAk vzZTBUǍmW92J]kZ017 lCJ,xq%)W=Q˺[QV_;(;?0A=]"EAJ^ZoS@}S v:vy":xW{T+sO:3썌n2+\EΚZEm-4Ԟ@Aeːt&:,f( Oўs'?Fi7v|t|ߣiUςSU;=C 3J֓kj$ت= EѩwWbRSu#lL\ÏBI4J:I(S78Mͩ7 V}JWΠ(9KN@elNoq.0M$қtp.C8(70PQDW%h6АTT(VX)Wv]PB]cL+@_ʱ8v<J-T9sVO RYr~Tbbngh̭ [T B&&Rgfm!uRram\m,*4=49y)և0S/)Bw!%_qZWEt(wJĥJ}ZHJ# Sh*:mAmնA)>o9F ܲfI-Y-Y~l#q{gd %450usέyZ+\$K*TMJPi^%\IO*GR8'F#SHNI]j<UG5#fげK 詘OO_9?ARTkڨ]:B3)ΧAƼu8E9{g6|}59I4$o􄰆O+vO =\Cب~'\p^P.\%EI`qߜiҼ Kva51}E}Щi@fC(Z(|l7%YUM9;+2€uOzFz'ΐ6A2MmI4lht'ZDKF7Ǯ$%'a6íҔ f-) )l-v.jDvi@U!J%MUW2&g==16! BPՕja2S3Lڳ1%2TVyH ~bAX[ۖc%6$)t[7CR { FJ ?v6’6_9kVJ>ؚY pܤt M4˶\zi-İ\+C[| et6PnjX#q(gԝm<UPamuI*_OXqN^E@JPP)6m56`Gr3S19&Z-*R{r cxN#&+kw8~v~ר]]Og:T߮ߤb]A`da3;2B m@Z-ucsEHEE2|c:mR$YNҙ-!bGA3w[|PHUv`<>Hu0$1d 'ӉP bm3.6*L@p(뼒=,m+t/P<=jp̰4*A,4aN*%jƂ.&[Ni`zb)em"s5,@= T@MZri./_P6I-qA,yV2ʰ12më^F,ع/_1gk$M!CQsL N-QGlipBtSbSt%h>N#/5*$kvZ&֠,"DhmJ(UJ 4˭[YH \ EZ[.mzZhyR&s۩TMڕ)&H˔t6hj ;Fմ20^%*0ǦmP~vkډ$u!jqV~%5ER*kQ>Id%a6$(R(UJv) XtAQh8jHW*ִH[ ms eHy<™cR_ A{+3K;uQkA*i,V+',̘CͰZ,OXSJgNq5L'-ikHtu' F4-qa"5$pGLQ+{6qSџVdS@ Q@ !4 Z8R$]*ֻZuѼazշ%Umhof+쉹V .~0/6gKwۤ`̩Hi:I7XV[wMsꌣD710)FE%5X{iD놉u!#@:Bh>U@)nPIFW5'S̪}r-lʙ\˷(4~a#Xĺl4F#xiD.]sH62º%.'_Do 3[)Y𮰐]UEC['C؂E;QNqr~~yZˁ}&LK:VXla>0k]aĺwQ0i %OIqK3he $B=Wa5+!tE51/ 4ZvČ+ qO R.̣fPY9 fak `)7Z&OC3$v9z' :DN]|8M"+BukZZD6,Jx2ey?O[`OTh;Xۭw!KH5Y1-E8P%RN8U@yƪQ@XI̐Aʄ /]Ǿ|h2-NG.șDRN6O) U4%jU1[AH?hAu7wJٔ͹<ٮYLP;J"T֊$(8jU$^ogl;iKMKtP[JzbU8)3e^mHL5?6(CmQVFXQQ73Eth[s_>K552Z(uuzl(JTd9eztZŤHZR~ea-ʫjRz瑂]gU,$eRu)yhO33 M;u%NTTWuqa 2Ӗ]Qmĝ8LʟeM l“ԦUUwXN -&JE5C)SF9J)H޺7WtnE(NC(Gwi ~؁l[erf+H4=pu/PbU7( d,%-3AAZF@|/${͵.[zTzA]U-*MmSvG/l g[ #BcBRVkh%ʚ iy>"Q m)ȃ$4B]`qNfԴ-If)aShٲP'jf[xlzKj6m(n4<$8Jl-nVTQx7\ik IK:P[qC GzJYW\E}~-0]dw/0SKr(:Rk_KވLEB]SHܗjxU]"iU>rg!!VVxf} BzԔ.5)>ߺ,q&}cG7 zG ~a"beCw-JYqUGCFCo}ao^UOL$Ɍ&GfjRnlʑh&C1s.7)$^؜halUkUBrF0{3v+SeUV EcPR)hHEgpRH?LJ9swHJxKʒ (NP+a\T%ª@P&׌%3nd@w qj5ѕ_MEtH:ylpI RRZry P0~,,I3&9WyEFleYRd Wü"a(Oz5. @(JM@'#t! 3,& MZe)$U}Q1&𠭹%:3/&ˍۊoh)ad$6r<"NRYͫm|%GcL˩m2rٯz*~$ 83CSoYf+IR*_uw 'KW_^la[qeKqA)fOlbۚuax->#V4SG/8υ̮"Ѣr9kWf b8jnRlt*RAI%VRR24*QYoh/Y]BAn &htRVr1,/obe@(]S&1Q ÊJ|j 4R?DJn{=p[k 7qg!^"i URM -r,jUH&Y-h|cojzSW TzIrxddD|Ͼ2p>S슇O(N*m25zR5u#BFȴi yGzu^Vu?tcK2.I(bog' D9-&"lEM \nJʅ\nHY0Rj+vIQgMJ˶ߋp~B"nFIDXrȸ6VUHD/~]3*iGP~|S ˫T"ic ^ΤN>Sa }eU<ҪJ͠ S{D38jhѺMBO11%5LN!Cabmͪ j^M"o$j)M(b9?|y4*Pm Jq諸¦m94 !S-񕍹֐#J5EALl4)TScc4<`(g;5mV-EsJ[Nwد39iNp[Y]uw)ϩnyʸe/=.vZV9GE ʃUvGF FV|/${孲wP7*p"([4a9.QS΀jv(|~VXň˾o[(u(Im&R!BCHhRMieLUW1XC CMD۲NK2{5,6oy4V'AROI( Hпh6bsHפ:,ܶl(s3nXԯɬꍦMi-RmU. *KwT=kR7+,y+SP)@:bUMl7: dTV +W'&J+ 9W!exu6^TQUґlc3h˲nj H9'븄_? q."B|rO!6 ʾbaɹm!t$ L[nhSve y6_2H,@^snqT!xe8ҝ$ ې*λӥ 1p9|S3DZ4K1-:i%nYg ]DujP${7LL/BJ\E4%_(Ģ<&ݖd"15?:mêZ7"$G6e*%dbp4ܢ4[wdܛ(z5.b(~pQJwЋsό R{i$TzR&%%\q֐n=>3hBIU;"i y;LwVѦNQgK t/ Ԥq4dYݒ\-M+]E;c MIeYwKx//^^ 7@jƕ.T !xL,jϔٯАN}!?Z5lgĹsd5bd/lY:Rnpo&Ε#HjK BQVk=E}'1 K5IBLSoseLM=]$ `ܓd]_+.LGYGtQ6HCkـ[ l>̜qT1Ҕx]Hý˃.E6K;Pr8M6re (Mّ^ 2n L%$^7\t(pS dA톰VݶnLt8{t)+($h/2RL%,;0JA9r!Dm p@9OLkUO=?BӃ㯠:T>/BpҞnghh[MT] jP)jX]s#8fWInH(?Ɠh-H_ BpuȓF*l0Fu)2i! z[^5]Cӓ[rpYsXj2|g.+Xbhz(s;.mmһJv1QZ!2F=C½ mmfie0Mp!Y @pMJ}2bF>~I8gez貅NԄMU@8=`T{D͕mNIQq4;*ubA [/K3űM!%Ms%fVr#'m?'e# iGb4VV有;H!zui놧1ۙ,j2쎓jI8J T@*$yBHI٩vEj!Ajߙ:E#*4'CFӹ@̲(xϬ~ȱ1Li>Cu)œ(iڽbd#b΀_f?TCLVݔL἖Z}.5G6™\]/;E(3 L ڠ%$OL*P))hkS>T=T_V'G?gkޘ4ɟz#ϑ+ija$PR:hU)4ANŹC?>8r)þb}4-VxtQ)XOEiT~QT϶9Xy`Mr#(j>6 ;!h}  ݴHILmR-*˂dDZ5'd60 v\RhSQ#O*iR\i'8s@#5%$PĴ۝䔅d)N/h]pJhӌeEsy'\mkmT XM}pCOǶ'|:m+DMz?x}ڍlPCsq8A^N?>ԠaOkh!~M2Ɓ(mU#y<)C3OI4ҽLaNӊ)O WT(py`xCel?1k>DmK(+]+8*O>ضlRi#mL->Ⱥ}76R鎜vw?d |'vQ.fSΙ8{%Jr;_%"ħ@u0^ JNO 5fݒj-A֤TD &.|Nԣ2o8ZyTWV# \mM4M:as2[meE7#RD̸Ґ|6 N1W%#b\&R(z_2 rg zYֵU#p#׉% ))7#PVDp7SsnOqiZhuMup5YRiÿ?LHx?).0mֽn*vŸ]eH`-;!xvB#$_K!EPRMk"t<Fv rt2UBAS{r3~^ZM6LuJ5U6h25=PBe4)I5b!A2uw3a{RH@jwe":Ox !aV/s/դtZgmO'=ЁΆ I): u5<#eHt'T&)VQZ,Uki,$%E4&s0&1J~jS:R`:i -J:IBrU)\dZ ZDNSF1)d(4 2PXrL(m*HO;N.ޜVőBuI?ɇe>b`fJ5ȋU*N?8sB.* Jvg*7 @4 9WU? `Z7a,]]%< j(qANMa.4ڛJp~H?[MSI˰M4Qp8}jʣ!{6Iv^-#Jm%viH^3OxLn~:!/9 WN>ubE_J~DPTm4]9औ/%PFꩳ!ybzIޓ4qB @Vұ2, Ex$ӌ/fgU"Ԫ&p(֖f39iIvu䒪W0ʞ K;sARrii!@9e:s$s';&s,8w6Uٷ~SHo -6},wzS1Yg+ ŝ7+#\>~^md,}ЉyX%7(A4W[h}qHK4` E+8TyvʼnAgײ+U^M+qgM<6Wޯq0f!?1bJ6HQ4fR]6ڒygXĐ!v=( +֌~K},=0NJ BcwQ4˱qKaVJ L/dWSMPڊsL9[N1nHW W4ESHШB=pR~߆r [H׺=/aJcd=n |K )-2J*/>J;i`cuo%2W_ϔKT%5iRݷ&&k-}`9) ΐ0MT)cKLbjn]y-6 "XniЕd cNIvoDVʱ!d˼kN'<jBQz}>*a6RE"IJSAq.ZBk CEsECrYtTeCNYEk"k:RUUiݦt.Vrpt \EjuB73_DU.6F+:qIO0.]AFUˁ5i%\-g57״ ;Xa)צSk-oP(mrGNh!Rku54GW|Ncm˹6[Xy[1JtT>7M˭Tt($ j50JitșSi嗾/ buO!Ina{%7)Jy7TМϮ%q<--޺<>[hۤimR29ƛ6&uR=B2*tKxArzB\J5_:Cb1ENsIJ6E(9i۴BM'0>&?ڗ)TU Q:+oEVKXJ@%&FM0U&ܲGXupJPn/b-EXaŤK~U\Vd 7{e*,R~ r J9WԒ @ʂ,A rֵ& ]AU s k^hʧ*Ȫa}TmAj&)Ϯ8úvVa;!3ZTD1b2Nj AX#Qabtver_*Drj]C={JZ2A+Z6vmn7iJӔ?(.Im+=8D-&aoF.AoTj;sĻJ(I\3'`?<,`%BҫSٕīa+=IGUTzL\G %[U~}8Ό1,Mz [ZVPl[.g(` RUy˺5%)B]Q.GekIXФ*t0'ٖB[:d*a?a0jucRЁU o%RM1M( %ip\ZSX̢Z$0;2JNjɤۈJv73.%Im5"k Bd?;1fִ1XODDoo|ؠ&AZ?8Fx%E K!xCAU%CĄc ai2 -RC?CeFiMHJs6^@0 Zgb> ˥VVVC5&E򵏍d*z]Y՞irIV8e(ACR$DҴ6M YTdi|_*P+#"A&v m|K[Ԯ}\g8G Si]NC2+FQW0%&0wB+E( OOH:YG {&gg\]pPE\Ndou{PʾƋquߔNNxZ1j IB{=,t⎺P< OlOLxZ5jT= Pkm{qC .L֐;i*`I=F.<[K6{y@Dg}VYMeN1iI&bQ\#Ic7aiLQYz"? I.!4 Ǫ2P}zuչ LQ VYR+76Ԅ5i{deQU#*NЦڭˍ7j2_JI4ǥ7ޏ|W{a ɥ4 ^-6)-BB#BDx4[J}`%-np-t&œO+<K!3eYHL_FǛвmU}0IOO)f;eAR'nP?` L,Z F֝j !j:tpNY}mxZ3՟)Jq #F0oBTwSRB*?8UwWG짆0O~fjⷲ7u16@mm"RMBUIJêuYn[H+׍Ø{hZ٦hHpaț9Cs8f*Za+yR%B7AMT^AyŴ[wu[K¼cY+qr{FYiE%jq'%Fo:KjSD >9[Yd7k23 '%+hT tlEU%l(@W?|P \@$3fTJMJ\JE#Tg*ĖxUry=OՅe2!&2D"^+)dׄ=ֆiEh &^Q;1A0 @w8'!wagNzW=tSaSRSCz1qךWnU&6ҎH x6Z  U;!mMH/0hya^LoNRˌ./L杋.`.E]y_Qctre󻵘yi[y8SZRE J1'ˇW$ר}jA6pԤ)Fv8qsKa-0Ģ]n}\FalJ3)ciqvt*dgܥ\v^(]:bk &[u NYq,ΩRMͣ`:$KV~/OXqv} h2\wxePhQ :EA}%WN>߂HM\ܮySMs{CHSBNp]b=ںG.$vIzP&e:Z(s#:/OZbYID-ߔIЊ:obnNdbuR ۖGXKnjxjѴ ) k*ۜ' wTO֝zQUС#dH;@5MhT;'ͤ8$'ۯ\E%(?\E8~:\gY爻?@3P|?ڌrP>ύXNK0/R(=W)񳢵sm:S\<#e956kT7L 7z Z;"ڼE)4NvT~)=c}v͏QF?͊t~c~c~cJ1K/(zm$SN,uY.Ri^mm6խu6)"։mVyCO`:qg6Hu+X!;M+i89,g8&WylӰ-uK5ƜÌTnW!Fz¦f\)œ.&Z% H@= KM6֣0süSGChÎPeUͪFwM`XT=Bvd[ $芧 ?kk#zEF_9 =B<\t?e>2 I=Z0l}R[P0bŪEQFDᑔy˞(l(d]zuVPZMmHrU۝8d^\m.NZGM%IRNKH$*s3?"YknRPxGW qO:T}CfE{ʪD̀b/,ذdt)b@ۮKBRBsj"B̪[nU4my֓ZPW3MUCHu։Tѫ ֙A&kHL pڌA0JL*n>PĬCfjn6f:,+-f瘀,$i\ȥxGxL8xm) $tҾ!rO&ԅZ4)`s=۩e9'YC[7,f@MxLCRp#Bt5:H.dR_|RVݢ.#VC#mӟ6iXQWT'#KTSJ{$'aM$30VoK7(~I՝$}\bjW-%rd%akTU`J( Ę!'T]Z5Q,I-%ɯrJF ӽBԖ[ N)JUZRjZBT2sUU6Ɣ;?4ȭh+RJfU}9bawݲ]M)TӼpI\tII5TWɯTWEnQ{r`kZqB) kRTS4!7;<ɧ={aS٤i)qH.ֆŽY).p!r}ʇ/D"-I"bs߀H tzRM{c`̡2J8[ JO^,=4S[ ZVR^Z{brvN[Ldm P^Z4N,W.T%i]DRu,*ׁvG/O^MuelUI}HeK VZe.I 5wv|eQ9 i>!ލ]!Rldu_vIhP*WO&rT畫K*DRw6a]guMDi2Ď`óSN lR RS4RR{mkuYY!ԍ58+i_Yd|!Β;iʂ14'3.m/Ƭ3x~i?7z򇚓US J4D ubؑFቦ\-ޜ=P诮0ˤ.6$!8Sʔ*t%汇˖7VdZk9( V*$l L›dlRnTdyD1{;&w!5[R9-WIu*WFuʀf)LbMJ7RjW+ʯla%g ih,7T܃`VYngPe;7%.e}s$۞bbUƂٰ tA덋*kc?HZF_11u~KOLh.jO0T~asiVUUj$$EbJ^NMRM^0*&(XF]vV3ht%NoONfvKP7Nj[/$iK(F቏psK키<1Rk?F3>;SgjhP4Tyq$lM*_5s$Ő_BAO?l5ͤF ΧzG}a]}< QB\*@ӓ@s!Go/6ܔfm0#/2꧘XUθJy.8V `"pI0ļ0Io12#D&F.SU|_-!dֳPAᨴt/C*Le'h9G/A%¾_}01 ;QۗzFZU;# }+fuSg^GMUgFKU^cn m$$4BOyjSE90bL㢼Aj: FfU1I\1.Ֆ$bbsS yb4Jrt)@Dvݖ襡hq%ZMnlZD%8j}*W@%`+*1,ml^Bbci4ېP3?Ȳ"K:JN2\d6X]SPNb{f)&]k?-\IRTU)PU(r0"g||ʀ ؜*' |}W6U#wuG|UʓVC!e&r) 1e{qd c`+^3aPm/[K7n+pUiƒ(e4HSO2erWՏWՌW-m(ci)[ 4#M%(*j|pٰB14RV)x2DdԒz„\y(Éu[w;)& QOO6ꪡEwkncz88mrݥ@x̾ 5)lBԥUUQ9S:“I;-:%҇5K:0mo„U9'A Tju7)#p I qarajG?*=1#"QJPp]9H}mcvfVY:6]$(oyeeZ;6<ژ%ԭ4xV Ba]Y.9),Bei{Ǿ)A)U#lG2?gSt\\u2M:3Ai]vCQtQxBZ.Hm%[* !eSk,8"4Rk *[ V+!빕qF30j($ڔ!HN*KKf% j9CPS!ǂJ.Z*+0KCp#}i]aSIS2 8ʼg]RnPx}U)O8XmخUڻJ'xHUHJ)[un*h2 iZK*q t)N)I*EJ•ZsYg;,.{u-|`,ˌbk*o8cHތqSTd"i#5{Q{/U\ա⑽^b]yVr`.(6Exd#pii;@Dѵą4Np'<Z&/tjHT0ļ{햋{"Ijs !TJ[99m;NBf&Zvj 9(얍m:WPIA"M5U#q@KPTmYxL>ꖂOU9DQRAtT)\MLI=%91^Lv*RJ°mBgu%#%]_31聆j &Ԓw]I GVR%T ==)[*_7bTd6.|hȽXHS -8-nw+Q48eQh*tvV \H;D'*J.*5?!XqVe(R.B B7UԠ,^VU-L6;v`SOEB@J6)Jkߖp2˓$[TRGop(ڪ24%$j?PKN#2iJp9|3.-iVU*{b\JQykJ'HOqS-4JTEIO \a/LN&YI&QLFQMD BG"TK"uxS2}ַBI 4W0 ۄ̩Ae( [d+|!xmx퐨4RF㷐TM&#l%TU4Α"f(3x-*/VZS.:De)a7%jkd.4*Ș#/FaP"1VsJ ,oi񺜣8.H%1SF(5 ]?t_&KWFᇧˋ+mM[+Win7lө@^NpqO 2ԔיQ|I̼ҁQt%4%bq'&J< ts#^QLᯈ{6ӂ}|k ۸I@1f.Y!JE^[h#s&ԛj l+q&U 50 MD.$"Ch* 䄆 iW7i(H:2m\|*(y!t)`:P.M2X|̤QB㾕$ۨ t_S,%!%ͮIm(4R5$: # ĬSQIIj}>˜DʺRJM'\P>$ԒѕRꝪr(9 @Thׄ?JD֥%{U 5rͽx֦m@,v-KіI-и#esFԸT1|Lcԯ٥@J;œ8vDܜdlԧV޶LS3 :JIQNg:%Ц i⎯gAyp'gA -^IF,M4'arw,aβQqg];1mY}]diޫ4jLflN'еPN) F3ݭI9WC Wz塀iba҅(,ꘙT"D%YkKvJG}UAHᡐfF4᭵laH"QMajڴ21C)Cy5ˈfL&)nԪԟtx;deSlQkzO| ĝBTũ5*R <(i\nF9(n` @M3n1Pd3# dl]4z4vgRK]v}^F$MWL:Sm2ByD^ԞJ@b3h..*ȪH*c$ˬ`LlJRuI56DmH'4R .eə mG.P#qISn27JһĤ7aRKo(%\m,X\N(@jg8Qy3rGx͝7S1m1' fICHXD?L2HbU9$'`(S&a&'zDӍ/vHݩcMzԖ.8Qq*M*gwy%K{mP|>8wFe?#:C .(v{*CK4=ԜhyJMj#ڵOJR(xnuV1/aR3:Ӯ*ߘ}' D轢Ps uH-aқ#2sΚ^j!6e) 8Ev Bܵ׍5^q/>MU˨To%|J!ML,:R;D7Fs5`ؼfh|)0W$$e6[NGq:RJ9G%K[G\CBV9CD #ҧ扷$s>pǛnQi~a)E\*4!*SHi6x)T*=1'=1:[u*C^ $b.!ZjD-uEcDe%r'ekp\3?bƑ_XTi'lf+lMeҽО/X\ܓ.̐=+ks)ڶ7iCB/CL( Bw2hFa#6yM/Hh]\Q)L[+ ڤjC}zS˔RsmET79zK TjȞaSKnVdVaH-P U:&9,ꖧZ 0.TFh!fA:XN9.(G+ MHy=AJ/jSLNϯWyK~3[E)S^MMt$ ݽV^쉉)8nPnRq4ΙV.Yxmfji-*;V@uʢVrgC,Jے74ڬN2 V޷hhj|p9'Z]>[hߪbP*B+N؝3yZLjSI)*N잺 &Q2y78S‰1%:6l(-fBe10mzd. '(eFTTJs~;a1U9t ,)0K%O3N\uD8eA iQ@5E!ZX))ڀ+$ql}Kem6s'pn˾jM(LΑ=j}/׈vS),_y+%\U9xQmԨIjҠ:P.5J@zVoV=aoSXZBQZ.&oHkؿ-tm>ؙrK/aٸv.iC\!2To%'RxxSΤ;pKp6Ti` FR J^ 8k3KV4wmZAbB^qːRQ@XfbR^SL4vn!I.P2N$PLHh pE=<"[ 키kzߺl!)ziIc1bg{Hn(-g,{"*7b|2 Pi4E3(P+ŭf%{7+uw5:.-/ tW-bb^U;Rnytt/6iEjkk4.,* եWZ {&n-?V`%04tgpbs}L2*؇aRhi^$,BRvapXR!& *8ETxFef'RUK(yp퉣p !kl}ua+:68TVXJ ?E_t+ JNTE)Bq)%4[PqCx2G `+3r:Qۺ0 jN]֙f[u&їbjSm{+MSeʴ:ĺ<uEuRPiM{]u7ETJ`8rWtI-z5&$KҦB=.x om(P@j3P%2鵕SĀYyUSb-{2= v!r\K? ]wx=۟۷+-yЧS4s)xMMK4Rh"d)YWKqAnnNY zhsK*aE':[yJ?U_T7c^.!SU-)mkG)bS*  i j늕q'X.f, f =*][fXڕgax%ӻTa8/8WBi[yva3o8PxZCX-5LLs&9,OF];:9@i!:ҨBM U䋳{5|ETx <$pK[(U$r6Ԯ78s_ɻk aXռHN ' {UuЛRzs` V[SW?bMK=uuIH^.C6TⷵSIx an!OE:PT =}.l%ZN{a-=i_=aM-%'ѮǃOY(֤T)C0{y#x@#-ĭ uPF] hDO2"%E(T D)x)"&<5mva>ZFc>tлJה w,Ơzbe ݱWJ ~(b*MsZX$A.J`L!-R]^&33;3i3DZ0A7oS0Xm*Qi&p ĻLM4Z@A9+H/y'*!"qOۻRSNXbMIBꐭ[NMB)J*O[K-{+hk /dQfY$yDYwqk^qS,O Ci^Xu P@$Auq4#TRP|.t[ZkݒNI~ߑ$AGpzS쾟Gy? )2Eo+3 ]:GXT^YZBiP$1*Qs" $q=ֶ+UFӮ4<8=D.S "㩸eXۮS"SHն S)*ٵ,<*w&fm9nzsC4>azhZSjqRZ )MEkݲNVRT8ĨJqoZ(H cluf^m9QE(r]\)$xP'v=,E4&%f8,4Zu6(up1* ΂hҹRHi'ӤeIj`&~ hmХYtbXԶMQt\nJ[di@U]zaxwA-8̋,%N. 2<+xëJJU&qYD'J0SJחॻkg!M|pjX1Qwf}1=؅?˶K,kĖ"Rw)*ξ&;\+ĺ)PRtRUdJ#>R J%2%QE@wA%UR-'96+axByP۪mSTW5WCh&/-žJJJM}%38.:Zl%؛lݥsF6+-JvL'X4tV-Tz` iEvFQ_QTkZB3L3.j5#-2PJr-}vf< ?jF(꺯(S JW4cKCZ1=P NqFf(}pcXT)(7 | #emc #HDҥ}k5 Mg NDt4 Bi"}'` .IvU51K<^j,7u$dESj/uF0KeTJTE-ոR.șq#S]Ջ# [@FGL/g-]O(S1La[QJ b)l8p5;̶^RPJvdahB-WlPhDHrQPi# ~~[uR 0یKʝγtL%U"I/ݢE5퉹\ս{NNfʩ xޛklN+ yn%0v9u**2&KLۋuLU>{+ ea+p͔Ay`;EL"qo %-o%PԚRpL*%{#Z]&2O[1QREr>REXa)v(%Tpsҵ8f]E涉@+ in<K=[Zj9IԞqlIJm\AJL#@y[A.hM:)*L܇ċS, kٿd'}qh"9EȊіGb7I(jRow[ aY$f4B{WṆ9PkL9ck}ƈ? ar(.NZ ;Y|A'3bM|wh5˴S$,$kzBg}S|(eʰ?bhiX<ū*P߆[dFYԴ$e&keJqQ-5ʉiTzM\0+ZP.4ƙHKCũno9W5b.?JS3$19V64&)opS3 ib<%5(T|[8)VQrbnv\cxiJIf¾jQ((4ںi?*mJCn{D4TuBO,LOpApXH~aN-Hm**^B &騄ײ`.]4\cqxRɰ:!g] 2ŌmvYDt=χ8蘋MSJGXTu{ ! 헟(ֱ2-ieک Qրݯp:4xS8(.Q12"Y ⮪9W֔*"uȷ1e&姍#>UoL `fM#L%W\SMtNPɤ~$@ܺ5pIȠ$ M3QaX~&Z'=+Z>"agHT1j)k}SJ@5΂3QQ닣(" r6I3^_lUYư{!f$!=!<7 6L?MkmyY)ggxS]1.)n(" B-u@g}&0)^^e BJV6b̥5*=EUZׄb &ekJJA42JrBEG8j]ZvD C6z0mB8(!\EG A;XJ΀Vx{mj8qC!WbdߕyRFQ`ƾ1_80ZmzӅUt>bY:_i0|a`Su&BHmaf+=m?ۦj0BlL{@ST2{Kfk{RLeçqB45'YRH}t%PE$zDa8հښyMȡZ[AŅ-N8VrSwXAZTf0g(Nᘉ D51{b$wJzjoVP'erW=6⃙(_ZOk KTt-2}%K,$zLM6|^de'A"Qї9)¡P(G쳚EB^Ӻ2)rT3O&+4 )(WTzc(1j!1w[Z\h0&vzmTC*@UEiPa(]JEIC*jnQ|7DTR4*T֢7;ҶBVPER5Rm>F6&2JWcX}̪PVfbM%shյ$/%r!ĵ]EG@#;ɹk'V'ğj~}9 C4 uDzwpmΏqb}f0rY_3SPڏd3! pUbSM$1Br) l!ʞSg[TzwʖLg Й UmUC e$sM aHqϭþ6h]5 Np4mj"o~̈́Z%]Ý[m%-*uȜCꄾɨP^[Dj^O:N8Nu& Pf4;N-ᚐMȰa?p?[GBe2y!JϲM4sKIK:r1$z3r\mRx#%&[T]j֙ uK{R Zm z$Gbi .6Y:&gI.(I A"('q-[ _tPgM!3v4ѽ4?E~A.V7O/*IlSw(tZyu>;?Ͼ''&Kk#xFijAB١8fղL &xuʝ|ܢʉfRb  $-_hLMK)lڠJL406Rmϫ|8SͼZhzxgm*Z]KSW*r )f+J֝ BO gl!̨Ԍ CJ Frn  $pFg)2 (z'OPD|[R)ͱ% |.NVY-ڕmMTiIF*$#uޑy Jivg/ͅM7(`ŸFpMȺx]ԍ)Fr?ثf%]2JŤk}R4 r:3oq iof164mMƽje/ĥWf+ym;f41$WCTwa+1R騣*p)2ҒL*687MW4Zs)<Rn@ik (eFxvEbU+NՊ9&٧͊46:eSJÔi.s]a4H5ׅ lou gG ˩9fB*d_V?km}XM5c9~QR Xe"],\HUyFzG% 9Ben/UX*{%װ W*(%qisSƿ*J-ׇ}Е 0RP"_ m3`$o NU!#Am<.NTz g,#Vś ԣ.6uBII  34GeL=P߄Ax12B hRn)H:mO4KQ~ȕ1+.,XvKhVߝ))OM~l'TSfTSfTSfPlKB}B)b}B)O)b}QKX=QK)hE4׺2.1kA]+I1펺bIљOS?tPI:ɊܘIij6wTv.D+V?/QJJB]+:{IW"k0.iJcobaSbMM7)!1AQaq 0`?!1Ȳ%ϰ}w7 o.2_y@C8~19-W%;9w>qD8Z,9 aD8Ȱ吇<}6󝉃<هK|d 3_29$ØZ2 !%lB,:P3az| L ,)Ϧ^،3 `X}_PbI?E/I;YYt~}f(W wJ#.>AO͆S???SQ7 {+3)?NȘQPrbdCxql &AeoPb]upSyQS 9P$`";h1Pr!{`. ";ݦd%a%dT~Uي)$/L\ QQ2)X/QBlӎDb8W$Xd fIMt,cpu܁z3ՃsC̛)PI,3XaX'Z]D$W.lSؙ6~r$P+ox RGw}s ՘(F"FY$(C)dɎΕ@ԤP=҂c-@G !=MTAh+w{D1TJ>2 ^&&^RsF4y Ac9;)hIpN9*XP"b"Вx((w ٜ=%MI{$TC=QɢLNsS9JfNDRF;QW1Taɿ* :G&-WFYEuě2-I:X?dz0;q92vN93#B6~BgȵxM=5j!xi$͈2ȦR/B huJJy:ɫ"%ո(>ŞC^1(/*&Y,/S@V͗Q?_㥳olB$~\)LU̜kS514dAOLq9wJk5Y“.]8_l+?a~  EGeX->.1qpH2[Ie8xMōIp$ENoٕ I[ ΗY\yIں+y7N^^$'irFR6@o)~rR֠PX#ȝ`5̑ld4/|>`}y h=Pz!@&ġ7 ]Fdd2~17(0JooΡc_$4p6`&у{)0V$`iJ,/B扁,V96~GϠ&|`Q'[rv"\ ߹R/?6DgK=C'VE42L݉Ö nTxL< )!1/"1#Zxmh']M>WA}օ0sX- NK)bVEk A0UՉ$$>$y}8YHЍ3zjD3{4"~ nO:_In05ɐ, Y3~%%{$%ߜ@8)v͑0/[r|尔j}N6"j#|>f{FL0: ;QFɸ2,C4SjRXd/#ϼ#SJTRHX1J^Ya |k%@ [HsQnBhVkmDz y];%J:*P%<#" 'cV!}2F,I~҃NddX2Duh@̲ uRiN@LKm2?R⦥ NKˊ>Nh1a M_i&;\ \c? go'(K9ݫ PWrc`E#4eH)|g1Q!|Aۯ BK@ ǼmQ+1J哘Vª8Wͨ뗿D<: 7_*ɫh }'$Ðqo\ o%0(ƞ'uS5*Ìh\k)Hy|1);a5{Ʃ(zH\/C vコ92"UgL0Ȕ!|/KI [Vŋq1kL:،I4/k'd#Nz'B}ߌܪqβr6xp;#X27,E-XE 'H>!U" Y2 ``X~;0> ۈ4}OH"Q*rJtt#/Kq7B40^ g ̙pŇ*bQHogd72 8|$* 2%dyu1Xln$+XNaB眡Ԟq=X苉: \ 3`h]VC=A \(x 00ԑXʅ[qC1Fsl ES;,d""0T0Tȍ<`2 Zy[5$btH <ks!3M 3X\"g0@PAjZRaNȉڧI97v$sb7vd)8ɰ#} Ix6!Pv0^4@>< *L V}ƌLʣVw§D@KbVU[!LE` 5#AmHD)Kn$p5X?^D` zXAOw gA0@"B gX8z k/.GOLZwx$~f;R`c'cqJ t |C"IAplRHfa⎀%E{#hbloҲLb^I B(|`2’Jy15X腶Ia䭆w}>kSʼnjk,`Ho:!v\.@4C>¨>0"[ggp E$T% xb aLbEtqsccJ <&tܙDN Bk x)54<Šix9(  7N60RHH'34zh3VKVOEDh@+c$ kt>l#]d"<0/W¼@ 4E+;/ %n7uWBy!dh n ../*:.Ƅ& xx(3*6h} =W3datF/6!ɨe)K@Ðs>)Ee&O4$$c {@=sCYDxIgD gq HfS'"Cs^OS  pn/l.ؘwx&71S^dJ" MhW2 x}0]a$R2)䤚-150%y/*IG#%+#sJaHEfլϴe8+܃5E (X.,_Rd~,o3 $`P a %3hCpNОq%bv )!.cP ؒξiGlKR]2\tPAT× aAa(U1m D@$%T mtDU9[BM<@<\I3rMq(k&q5" yBqX/ ʢV㒎•M/%`C^8%LD=CX"62$}y7Y\LJo<3t5UFKHd\ bO| Z\+SLQ5H$;p&Z~xDU 3 p0w"m8Y:dB!:GMc`Y5(1EHV.t@FKéb@lmDR?m۹]d\ı*p9]2+BCsWom1wчgJS8$?8Y[J ;G&p ).'G 2M`uHOV8*,:X!˾.yA/:hT:kz]T`,BLK7*+"b]xWk\dD%ˆ0"קUGMȘDOSxVʁ "4]ɡCq9s[.ThSPN)Y5V*>QaSȣрOʙ7{3Ts]!,+Fg gJ+댲)E7ȳdC< JxQļ`#"e4c%x.Վ w[qc@+˖熲2/Y|_'ܠdAM-;!6l6)iٿI`QA)mdJD<"BPq'JWl,d)mCm,Ea9[7i'A fkNYŹ"5I("Ҳx #mP=e8)ѧ\S J,pU? {Yq,%2EoN!T1yBEbBkh_䷂Ѓ1cK":#-8k[mK.G2`3T=#5DbN\ħmEʠ<aX0\+%zXڹ0o> ;V,80 wJp,EĚp2D4<а[^ LHcZˉޮdJ7yۡE_8 XKt0LdI1ӓ'ɑ!F8#9#4 àI9=N)+笄"r[B8-\8&r!q6rQ4*V< D{W?u 4菃{޼*[f WKwnN=y0i•FPd6\xΗnduØ ?b"I]D+ETf#,6ѪR)֕;%n~24{"= ϒL0$$FnD_TpS ")V?jjEA /BMe]İQ$!E1xj=: zʇhRpƑea sQ8~OVJ {oGXvMg'}QjW ͈q9u  ,#Hn0jJ*"6> &̾pHn&#1iRuTthCy¹RxntB'^|Q(IŒar#TuK/%Cl \ aU G&(d%4"uNeSu eIvIv[:FNom`$F(QT7 KX:ɢ Êˍ`?/A@ȡq#rby"#J[9{u3wZ|;ȓNr4 uy %<|x1 D+GbNE"0f*:ELNtKAc5{2KYIGH_FEM^fHUo "ZzM]J1pYhG, M.G܍ c`Qw*B $MЪx FB "N%-0iY (iBN]a`'x DJW@pi'\!ZiD%n@a <a3%11 +"lYI0T@=z(YLBl28`l+s 2 r~#x'镤Osm(2^i *# K`UMA:,*+3>A60Z&50%s_w j`$l9ģ ϶0 YDh/ & ^1D(F #h`@<^Lܺ0hXyqA̐Lƹ AgxQ$#Y)d BU";LX'/#P(D*gq8j8fJvLHΕ^Ok)'XIGL>Thhi0( ktDS\ʓ.&IV͛%bb8O؀j|m3nE",P w)B3SeA˼$Ҙ"p4|u眗^cQ YO98UaO2Bd8?)BMO1-K@~$[t ?g@-2RbgAm NcJX*/M}# b_2/&2fZ,Z yUڮɒ7L08 @1hRq5Tgljٖ//i襸I#>6<*ru"8<^L: ݪ䉛d_&,*<g&<Cs2BFc&:one,bxYRI1&S$"'AXbͣH& &nq&' rGRQIwl,aWwFˇsa^pv$p遨$%6CωyI9F}r`fWhO:$^LB`HaTOFAÀLZ͒62=CJwr/E "kEwȻ x@(i+} 7#!/%uc Q  0F ͻ+H9 wZeX5%hS MGg*¡ z!$ȪƇA{9zv> ZD+e# *"".GKo<дB ¤@D>yHĢe]A/G(t?C湵P~"Y >q2->`mFĢnE)Lj겙k| ĵ@8FCMQqIiإK.A%xa@#XrȃP}uOqmN-^2Q@Ѓ!4F"~ YMSѐE4dDqX,~=T8s ğLȿ8Qsy7s(ٙI2MMaJʘѹ2X7bm` +a9Z{INc2 D`0!]Q7vV Y;a3?A|Iӕ80;7#r IU T&jN1.{r?Zd3}=9/Jj#΋n&r `FU>q&C'[L a+ь#@ 7lL1#V|iW-1P=2:9(ńWn-Go_b!&nm㜂y4s7'%DdrUK+?S6ZpD0 $ O$yn=^-* YsF?ø~0\2`$ %AdHE.."DǤƃѲԙNDKTu``Oy` ޔr4PBwZ̘l@/g$|4pdN!8 lٴ#akWI\alL 4>S'A"G5# d`tv^P\Lhۼ\V*V# %/J&? ""UlQEY\:9) z<mXLDdl;D"AhrGXRRZ>;cCz j+%:rraC!akD(%\uD@ֻgbbs<0GmL)ə X=N95pp~Wꒉ$hK`CqQ:#"u`'Ӡk,'>dHz0y()Y2Eߌi.#"?YN$( o@fvGq pIa45%@E A[XW.p? 2#[KB"ubre["J@ |ǬJ4 4aG?s !u)~NOr8UB~iTE * -` n WIFAl0b6K eE 5cMK==:2f{45t/ #LN'X` gi,ȇ, ,F>3cCEbgPi>C!|$GVsX:Bg/rfa0vR垱7 4əEIE.Bd?7A]gKٖ#1oLFˋ,Ay|Qy 8baXTMR /ʍCdZr"H_(M f.8R`ظp.F?s,'/jr`yוOqs& YGA` q~٠16uG$Eq10K[0% '=Ư{ъCfb|NWؼD 'Y7Pv=d')4S=Gk< sM"g2S{G:!!@&y8t'V !;;=vĚx36Gp:SZ%&PԦ.4J@u1"OL;bO* FdPpc$-,!%S(9ī 0/ cr&8\0Dp;qb r7wbֺ:-h̸Fq|d^J0""#p[mɰe`vB*޲% õU5`~LD !Uڡq7'X%ȐMQ_ubv9KP`+6:HQ?&'LuA %Irf+dFT@!H9Km*<%ôi쪓ebsN!(ZNWDcXtX̐Bcpy'&up{d:jqRy[jg_8ͭfX5#=e$I@f$9oKYQ9n9#R$*;$OFx.MBHr@+#Arg(ITr$=O\ ƗLQ߸u,i!0oGM`|+~g,G&=p!6umޒ$PEӼt.oLO8.iv=7*PD<[Z4V.jCo*-g]!a?2bjbiHHPfW9*h2 鶑XR S(#J0N>ۥո[p: c'Cd_Xz!%Sx,y_/!] CӖ?/tg>ZG笈~#9R[-~RO|pZL`nRN^dgtXXO#be-%9爈MP!DDs"r4Al| \&N6}FOD3 grS*rMB/qTiԤ ]&܍TyLbz SjaM H*TM% U}mai{w1ȕx ;,Ac$896j[xS'%`N FD E[8 >4gY2 hܴhZN10?Āu)۝&DIRK 32cYj CTQ11iO m  / \-~0Qv6oW^3o%E>[ZtBm1f!qXܩ_;D q",Kl~;iQY H1Ka{v8{6ٲECivLFGNKWWزM3ȼx}E}b pM y;p|z2Mq#5 (;H l/dƤHq(•o7*޸rUDHBatCN>JO_1&)>:Q=;UتN#@Q6K,R46O5 aBhDڒ4Y:#t8m/{AXQpuXhvpɔqY >W&>$ hdȒg<H" r9bHbho/Hhqs5SLF1MׯX#fA>r$IR_$jv@}x ]PvCVWE,(V3C8QeG8L%`ƒlhR<)[Q..j"DsR kW4}XH0iR[xɞ>Fm|uLN+n"1Z' x+~ "U#F)yV%6"yrGS+ f$bP"B y:.ر`(g5%g) /'Q饿T,7XD$e6c o2MX#^TtB6iF@q KՓbK8 vDdPAAnakC6A 1EǪ,>4V"9b4S+90} CzV(Md Y ,}`!L&SqL`(d)SĕѮ4_J)BmŒA)+e݄wAҺ=0 r?+)0B |[t~1' z##aYph 6gq| 6"ϜjZɣBQ.#9>N2!}\1 V$_`ÊeO;QXw2@=DR*~&2\tI(: G }V@LDT@~պy+6$:ŅGG,k&j~ ' Jn@X 2h|'=1ZQjYt,`98N"m(#ChWwV>7pO) !P!puC)S{2 ѷ8~z>Q,I갩U98q^0]Dނ%> H,+C4^zš iuf48A^+BIy馚ab4,m rsgy}"kWIJ3pL"<Ӑi!Z )7wU49mRPq(DRE%rs:I`ɜNIXN(rmPet3 sjCpIٮ[UtSE 0*l҈`+:4"\E8`R6ۙu4 ƅy[Ԍ1Z7彫h,),;0f/a Lh~3"~pXK\³?32FO'Hpo [^mf':rCP6[B=F&eWy I6<FLA5L>Y}?.3mvu5ג=3l  +.E}Vڏp8H9P ̌ҨUDg- bqsDC L]YlpD8LTevczdj܏E@XJBa</l)ۣ07XWPoԖQn \ 씪C7JAqf=3f`< %1 k$ILHp0%g6m b֎ոHZKq bz0C[ c<4rG*֮l' <8TuBn@H,mNuSo؝x%2;!ٌf=FR| \ 7}/>@t@$5YHQL~RSfx#R2B! WBPFOFu`!Y|sfy*"xP&H?ROZ^6;I1;AL,sHIr K#͙(Zc+jb@$)2lvPbd35x4k9؟?%~[&hw'DI)˶dnى^2Bẍ́9u$_FzlQq+L 0J|YYgB&2e6C_MZyb+{=jsiZdbKu u '_to8n7Y$9&?IVB T> mޠ`)C!Mm /9KD| s3X%t1_L(^ٞQ|%4r6K\X2S^C9oq]KڢݬVRFlk^%sXP'<_'NN' ݹ)@9 bqT)ጤӒ5Z~/*2wIO;R!ϸ+\(ЀvOMgjچxh1Q/q+ !B,JL)&A_7,(PP %sw?y26#ȫi$f=*12Z)S7<,E|2bcX>ZȞAKLf!n4 zH'azn`AXO@bVAmA3Wa80!lK{T:I~ B>:CcXC"wu襅)D <  y 6K& Dd$Lm rfMZ_!&%#t'0Yht,-4OSU.-AF q%zVVzh(M8Yì?`Y4+i%N8 (q_$h* [-M2@dlz1ۉrUߎgiC 6qԋU9^qhQȋBIs]+S4Zl\] Ld,l*ĈPPFa;DaQ_OPd+ 4K^p<YFX 6QAb6c3Pm<=+ y歖E쌓 Yx"BLX)+ޢ'I~JOUfpuoX?lFӬX Ö ܯy H\}sX65#M$_91aiK?  A2yU r!6+d" U?}HM2 DX.hfnYgy!9fn@ É+Чr_ &}ː)- 8G&o<֋*٬Bor}KShdJn #t7 $[Pz8$}\lF]=WqhdN ``4eqlسB[a>'8*aHG1cq řx8FJz "Őj^Gw#bp)&{e̺,QL&;IU)4#̶K =aD$"̠t U=^͍~+D-h}&ky%\'<6HK_e1mL C,f!z@uȗ}Nb[,Q|& .{Ȑs)0XTC&%حVcd`,#y &G[z&g gohCtfό=Gbx 4rs\F2n,0rG˛c) E"?;HViM(XH nrMd%I\$AB o'sVQbQ q*T%q4^кUuZ>q:۸T kx:q<79!+6a5NͧA+QlCY-f*Y1/9"풓&8x`)Hvn:+*>PvМPxV%yPW"g [P =ĺ-<<%H08rR)$ |bBIޚI/(Ș6)bOF<}AUOׁHq"ӄxR8T 4D +dC-JT/{B5 7:Q\DQ'B %%CCbMA0dԃuZ,$$ 8E^ YqE%9x2$lJ#fL}J.LmIzdMqcSI3F!< m rс+.~ʅV&Զ흀3`@}pG_HŢR9RdPo w Z%>Y[ dKhAd5I8vRVs cSb笌] 7 M`&r"X!&QBrQ^bY-X_ ד(*Y [lB11Ir&k׭zЩ(/TKPRML$#r8yd90'0" ҥkQ f̈́*(\{=`<'9^ 8H#rl\18 VzWD@1 *Âg㼝>9D|.XAEy% "v2YKKy ;<4,5-K@IZ-@S!*d 瑰1 R@!՜hؖBNrcS߃VJ)2, J']M~2BQUxS)&Z?g_Xsq?L%{cJc:?A/Y{@0?ۓ",uNpr}ӹdfnCngY!6d΂ǧ'3{ɔKTT0_15o6pH#w;AZ7 ThWQFT")*ALj2i3;륚M 5W>$$! dX/PmLYv.T6)Ͷ'8B&s\ƶڌCw1Y]ΎnXfDM!D 'y\iV!E[m&@("|Q4 #'c L=_o3.| 9H n6`hug%Qr2̉z6\EGc 84Ja߬@o]xsб#VO8[1STQk f5GXRZA=/2kحhtYiik2 fx-&̕>(W凂UI\ Rla@碸lv umhtHQt7A8i_$(/5U,o C=t W2O$$Fh:A"6ޜ\uWFHlg%ĭxry˃#/@8o&ur>1Jk ߼hCn1!Dq#Gg!^lK!>a8?]*eb$IPomN;(T'vy}Ȥ.E!sLǒpE+i,f+ PKa oWt!JZ2QǷ90qYZ2w{X]^+T"S)yHNa8F2t%']C͊vQDDZaB:I[b3t̔Aj=GXOo`i5O)gOChYL7dx`8dM{i2B"&ߌXX'vA,7K9=iAƭPچ Rh8r9N7.0f 0Y#}1c<%~zj!C%j1yQYx|a]!?nڰjocM'#xAP H e32( Yqmk F%a&lz1J>1 Ѽ|}&KȞޜQ&;O7rf`d׬]'40P0yFB:ż ?g8 g~7IopbZ߃5${o:w^KT98%+^ߐ٬Vru{pqr5W$i ŒE05ĸh$5y0x^9),O}fڄ93n߲@222*g}59Ix3 @-nV% '7CaDe3ܼ8&r4^g$;2^_ĺƼbD5O%I;=Na48<£xdz! `;mEuWQo^mxR5X4x0K+:,D"oNӲjr4Qf ۲ԃARƧ*bl`qX(d>Pww3/Bt0v:s$&gu# "f  B.X=DAx (Y9Sb߁i| zOգ "*&)kٵC @sqEe N[?vWT %/,rim'0>TӬ4[ƃPC˂os`-b @c]!kd.r Eu'Q.Lg"Q i_]b@C,y_<q-1 #8,:0$DU;,YFUyCl2 浀%ߔe5 f1O\()ɉ.6"]hC+7S 5 exBZwLh^(8=Q[_'?11) 5B0]87^@i9#s Ym 61qso"sX~ׯY_W%hnF fk;n|d-?x2(q2 |seЅA 1)ecvɫ K>51 hJt@g,E 㪌!E (`oE*F+g*Mxq6Meg5<%mxxC ;dKouo4$x"071W!%ꄔDߠ@-=,f]o\.)U=YwD_7P* eHzæ`LE<"R:-zsE80Oyf 5M5MSKSBT$搡PI{$-$8 NW&H#jqHV$†$/<js.H8.bd?*@FEc)k:$Dg2c{^4?o&`9~$qOްA̙M#~ǧ|?6 (D^c"EtE7ơ٩.to&ǕDaA*g*6n&g,R--ؤP&pPTo[ң nQؘjQ$ $Ĝ:-(Cx/@-CW<:ZM =A(8PM)-yoLLNPN!%iL*~̚K?F131FSd..:Xj;ŕ$h<4U" +j@!F/7 b1bP#k'a<] ɕi`=jeYYKc!BqƵr$DS`KyHMV7~Iۻa.. Q縴8QSŌ b".c-<¾H&RG #~E@mdqq`C3R>6xZ-QxeB34S^0/@kK8V )e)99Ua??Zh>50b"ϳv:x`oX\iQOQvDL:1Dsd]KFs[ɘyZ'3bRfzxZ Z.D"Iaq92^2q8E% ``wxWQ*@.q@,d 6O [%&eCt] T> @cg"spded#%qm>O.@#F0cdlǫYCP$?lDխV4q}7 3`r68Xc3N#,kY#G+ʄx2ޕC߳*yEE&Jk aq4tbOD:`-N7!ߦ@ޡ3YLNB8YfF'3rӀ1V*Gs3xhF ܄g9)/?lS,RWoNodoguI>&= r"^eosM}cLs/9Ns0DH@6vѠƦ$n AQ2/oicaRFɠ@6Y]'DƝ!#!*vs~)͏BP(H{>V;@NMV?gȸ?Gd`T\k遰ӿktr4b&u$9|7%WRYu.>0e@.aYCc8!RL_]B0J ~H7=n܀Oʿ\v <9Gycgc3lG;y$iIMWTXstቲ) v=fWg3h@9Wߜr9X꫞e},#" H/f&|83{2Tw,}%*m0+L1BTTb:24g`i:qX75PpDC;1oÜgLA0s)05Q*#K}2͙ZLLj5AL:˱)q(L(%!Z@`c90fψߤC\`HY3xRLy々H7D(r+Fo wjվ b8 19%Abr3*xLĐx V42aZ\Ζ9Ȱq$d:ć8r}F-2gqox xRRgٗɐr|\h 2I<zѵЙL3 +_^>ͷa`KWɋUAnzuH/oc#Ũ.浇oDT>OxGt ,f/I̐^]cL<ğl(uɱu7{o%,%)~~L?n@LBD u1a'RW-A"Ľ<3^h#D;]*{ɢ`5ÂFbpoXt&>Sd|W7䱠?f/ ֱ[Iq_aV8 ^ܯlK"c` "!KWiE-k "\O$ 9$-@- 1,w )CUH,M0TY.-W&w.qOX0\ma/<\ CI|3Yh5z#8|3HD&(Ʉb0Ƅ2P?|6 0j~z0Dt8"Xf`=xu`]ydJ x2q|04/)U8OyvljB_ mlQ\Ǖs+_8" .k`">$/0%=˥[3 _ܘA Ac7,"$7]IAS!--p %Fͪ3/!-CCG[oKZ7|YjG9Z[DhԘ C;L虁1([Jm`0 N2txg <_ Sokp ة6LvWq{Ҟ:G7BAQIat%u)<;SmȺŽv}v82Bx YP^JAB@>b&4OcHxk㮝!B9¦W @raiG쬠?j* =@YZEҔ-uV|7ZeED[L~k~VcA+,ƚ 1t@%qcST-Dמzx9 vvEv=4wȀ6zJNým frΤþň 5B;ސuVwO![ kߏfUTMAIqW% m٨cMOIC6E3Vs:7q#yK\?(  n]UH'CI `ݯqWϙU` pz՝!݊ʁt;ەc.3}t=߈?̯:k,o9D<F͎pLFty,JO)>\=%8p?9GNޝK}%,?JE'P= M<q0L(VRB<,L%5Y낵GRYJflh&H[UEcXҽT6؎|:Y_FI㱛%&<ЭCSIB&s{4H ;Ԑ^ YA~/yhPDˆ3 m CFg*!1AQaq 0`@?_AOy=p"G'o;%?3b{U䦓ߙO|Ŀ%0oЎ簎ĈH#←omOl'kez5 ւ~Y9g!??tjw}KKϳ4S@iw?Cr|\SjvC0E;6%'W"Uˠ y {K3J;jT>@ c\}z?RUFy (}aå7̸"_wx`ϯo/2:qD+W/0,cPN)kڣODr9~r):3vk ZŰX4 F X{qYY*;0fBv?&=KZ4TkO]]t|D_ L9M =9x&q+zJI6FߚT|u( [XcpŊyP@(Uғw7vB#o +dD*S0 )/؀O;m;њ60j3]Me՚"zF2y@7{#Qرbv`*, VE()K&=2W-p JלJ^#nSP%f~c!ṃHo,E\EBLȌ ͑gd}=V :hGN0X ,]]yEeG5&ȲShňeR,'-}~eJ=bdb~!0{:;N` au4W52aӈ5P6Yu,!Ob^ xoiNjZe\6m+bdJd=Ow!^Ad#Wm 5&91`;}3XMN dW ~H,W/ j[36g~[f)^qZ״ 'HOl@K{]hcQ@H :m#mu\DkA"S8KşwxA(RME0 缾0\1-map^U.]?sf .ט:ijmtl,) "U'heB9t\v3m} kCw6%Z/P[3t[Ҕro KPMT9aPx~ҶGH(}󈘶*aUwS~"Z &2qĿk?HuH6^'D^i0lÇX\QÓ_^k DǓkvmJ4̵y)cNa *)EȺLqJ㦵rYxb*PD>x8r' 0%s:i`ź pF 5[{A+`p櫶f7nrŮ-uߤǭ[(aJW)I+7FGW%;²A4YM@\|@[;=)Bz_?P;m&58E).)m>~3,eq$ `$J7wc.֯ =  Åv6r5ɂ5e#D[m:.K#l~T-6%M>?/;$*d7̰.ULfžRr.ӮsԫDD]hsYSY~+"Xİ!Wk9XlEGL ]Nby@Q.컆_c@RH5Me\B)4TeVb.q6r>"e;g:z n.cPR;RUwhd wu2xvSS9QnzEQ n$8`\~cӭ8Z=srE9m'1WDp\ [3 %mK%9B> ;ǵrێ PBݖߴ2YqQU58Q.ӈ-RqpTA2)0Je1**Zb5a>ѻ)k+p<& .qZ9&7>S1/J؁O O""B7h- Jd_`ć˩n̴gҿ2އsY+`!8cm8bdxۯzϴilkHsuNkVB2xAvjy{_1j.i5ud҃;Ƴ *nV Ț!YK %*+XR%5[PqsIMðiXow*.%%\nX х*n|a5\1w.p 3x)`vЪc&B8]ƴGKR}n(ޏv:)[?xh`ɀ5xl=LdGѴPm vU7) &{FF֊HLYo8W?C?rYr|ʄ+K~̠C!aS(q!\04T)k?/G:y2 JJ`A\452œyᖛa԰k~X8aNVrl  7Tv"[ lҌCU83(m:7}j}{NWV`X8q PyqYlx߂ n -ųL 4H&rXX~ oLt" \j}`<_CZfh<_q4+F]ӟ0Q~mR 4uT [rh 7؇&+4%0d a0 %'#؊UWg3Gßd!-`rR-2f6cXQv  /N1uEaa)b1YJ5әF\c*y_ԫ2K*9KB&KpkqXJuPO[՟\%F&[r4N_9w]T@a.ag0uIz}!.QNh9Z`+ Uayjjϼ4AGz akg@-^Wyc!AP?Wo+S/iCo_`s:x^.ҋ LiF}ءBS1{7Ez6JTB֟[d4=(N,ƕڬ>&k=Բvis?q/Sgh)W()/whaxP%>n3\Efcm-g**Z k>/ ņ \t Kv9ւ6ޛo= V4`1ބNXRrM.Tz3+Kh5~NƋ.bd(!_ ,Z:o]k8 %#l߸l 5 V_3Htsau̸E(Mne \Enyi ]/Kc&"ʯ+* lCR86훨Ō\:ZjkI}gZڽ~w }VSLŔԭG+iG7@iwnWdOeFt}{Ne?"yZ ^f,eZriXeT_0& `?HYe!fu ,Kߵ ɥeN`^pfQ.l:j,VEBv8!1+]0`Xt-C(u QY*Y^3@0NU ^)DN gJ0+}o\D@ؒ~5^p;NBptJ}/@ sY%+EG6>`0 "@꯳Nc7BHrLK]V"UcF{TKYuc>PԦXM ~}2Jᾤu-j!G!ѥMsXhAnUw=aw[[wCP豰]pK\'S@GW3&|CV|aPJTXai>J^!!}(>Hf-Kz~PX۶n /|L $ڟmxV1n*)<4h`̵˛aCO6\xa+V?hSUӱMu&:<%{˽/4BmcR A˨΋7QUeW`Z$4fڢc.{Mz.H UvCPֲ(vapUm WH Ŧ^aD%dRTU;6Vst3%Ս7SYy6(,"hYK^T\#~%hC`U,kA6#鎂{}asvox>dp #׈U|2MJ8O 2v y"JZ;^+,,:@y-Sl"Ě●X8dAqS# x/igQ)pA/ ~x2NAu tsҶ^6akVix+DF9-\k2.׫9UJwmYsT_hӬ#\1W7m<})m @ֽTG(q DQ*`\z`&kB ux=īZM]c1C[>%'˕겾먰,㿿pj9ŶY궙ǻ*@=z ڡU/ˏ8&#Դϭ>SigK1ǀE8L5bX%9:\#)r,<jF?-Q s9Yj#:LzT!v8,[X}H"d[Ѕ55FV9Pdt{o}W rU^>#(d9:qMR—-@3n.۬ P`K˗E1~6KmS^e`kT_Z</04Us8+QP20$@!6j.qsE'RRۃAzêdhU"[B9kS].25-ju`VDP0Oáub#*2}ߴKx1,jQ*_E-bAP֣Ӎ\)b-bdVwft:"%9;k(wZl[007QSu{`v&8%2Bkk/6d9]_/;¨N(.;ET׋kCZoh=MX}+Xp6[%M#V5IAmk!_OH59V.n,]zXfï~ m٣q]<571sM(x5RNP޵fɳMs0k#yHY-™Wڇgg. v cp-atu;S$ӽ2sX㶠]-kێ0 7\"mXoifN}ecu 4Ub_: kA* m*gQыyF$+uPagp"Ak~-KM)Eht6虱0M2p:zF"/RWͽu/YhCljS`m;y[@K&R @BB!0H4@L;S`%+eEym\4Xb\rܪXkJ Ԉ>@Er#lD,Ph 㕯xg $-].ZBvՠmN.&l thm6PE]yd泤L3`q2݉|JexWjg#^c^KlDJEGet>b؋x﫰 ^ Ju1Q+q`rHTaf,1K@y[ %N4Sp|̍vg{ܰ4c_,[`ZtEϣ2) ܻ#VSFw@4֥RuhicN:}qU!kpijwsh(^}]!EZ 87^6"et[hiZDpx Od/Řjs4E2H5pt9rSgѠr~׼ІWB_hR#Î ⲶBBo Xf9@(zc%q tX}qݲ:vAuu&G"(f \V>(X[{Rroag܄qkeXaMU&HQv{ޞACܩg<|6k:j" vC(n^[4 ߤ`?%ȣ.y5!KۀT*Z-Zx8qa^hM߆W&* =0خLڕPHh PmZ Q2#)Qzʜ%=zX +uuxp/{zNj%S߼jY` A#CyWu̢T! +BD 9pG8,YBX#$d=4Ga*&\b/>:K5E"') 0Q}Zǩ@X6{s)TR zx&ɯ_:`—(?eC8W%1h.jcJ -[Јg!OKGX (Ź̷(HbX,L KEB(F[hPk}YzvIzs D $DxEΩ5/ibʁN0\Kڝv!%PBBM0Li7u֋<:/?=Ȭ`Hh%mW_f.qލAq"7a JPxBi?ab2\3:c8NNLl29K-޹]/2Υ̲ N;+G=#[eXKNG7h M+5κJUߤNc5b:vz%-xMY<;6+Z!Uwn5J(M_PM x)֝ 9`HAMJ ^w&s[R4.xo?䬰]{g aW )\ڟ X;&2zb-bu,/\E 'uqYs+)+s 9-T hzy#f- 3MC&9O|3Ղ3&E;2RI`VIt 7b`бAPU=. %zftM%dPhxeNEZb_oM(dB{ Zo}||aUFS骿 s9,bxj?u{f[ 97ԱN7m0̳33fmѭ[mG`FsJ3m<%05oICwU-UwH;$A+b뫌m\9q[ 8EIK ?0" s.'/1L8ms* r+fՌLXhZL5{ ծ2a S(瑕9s(j!ƭDE=LŊÜ740VWA(h(k=-qϤJ==, L;dT1C]\u۷%v%|qPZ!}wyOu,G W+sf=яqq辦|y}qLV/TR nOTY1ģ6]ĀEf3/K|'O5y/6C(Ohq+{=%TǴHj ΠQZƴ1z+.Gϯ1T[OUݛqTA g7YPpܮ7U1--tyIJޡr>r\m)h}0+8KS}ؿ@ Z@]@l0ZDŎDV?F-*(;_T~H(K]n]4cXX #_h[+{[Nj_ŶnNf5fo_[Ǵ=2+J [u   ֮_xq Q GRbWR!Jݾ 3 Lt H)Q/]J[ݎ+b. Zl^Ks1WX̹b_ezu<sA// %eQqخeP6j~,9F J锖Տ~b h6gx&[W,i)auv6WuXUjTs8 @'4+# F :oXޗ?00yPɎ!HVҥMaYrPp.QL?ȗ%|B(ыW=/]_;p? ˔ni:fRXADSpX Qy]4RwRїۤ2iw}4%J UcE2LE' ]Ra} f#I/@ %a.tR}Ӌ#J: (;CÊ!!M0FYTbSVonh~3u9P;C*? )v1H=H$ ! \#5J;4"׎HX}ʢ+`qZ6To .!K_c 'g 8r[)M.UGR Y# cʸk}/_}GSTBQfe\LZgQ,%auUET V23vNF#>z*_gҾaS'"fE #e*1thjS45U(2f f% F(P>b㭰=~GIm~&豋P37 g)5jjbYA:ëe2Ǡa:EسOXZePYqKu#* z!T,,м-4s~b?;\t6_}~5p9<`d=N>'!@_O`Gl&5XP%&y?)0s6,< rtD/vvO!^2i[2Dz!MPo||H%>tѩeJ )6sxڌ')͢p45}|J n ۅh8T-']ZN={/Mxle)3H?-ނ WzEYz=*eAVv^Ŀ؝؀-<(%b]Mw(ss(Pg3-.\rilZ[TqV)noū 3;LN;L3P9.q3T'As*!1AQaq 0`@?j{n/A=p]+Ww_$wI'|]%v.mNvbp'i;$w~ b|MMKR6jpϴ:o>Ӵĸbw^ f W{M/OJ+淓lF~!ռW\E_k%JWCѼF8ޠ%~`^a-%_QeKm.;X-mbo[J%`_}CQm2Ӊ.ޘ[UEJپ)䘁&wD F栁 # ` ŢZ|2JYScΓP_oۄP5-MƊw_5B0`@3 +K( QLABU)l5ňv×CX )h,vG--ND.Ê?>;DiƒU(7z ^[mBtajug(޷/p|UWf1Wx4 ػXn!ОcϢ-PF ԵXTevM9a35P3.\|WM>; w+[ =`|=}"5ebɭ`~cLbf41+jBa%xF QЊvDZ6]gk"Hh=C ]mԬ] u~&te"Abw:]kXMg@ }`qYk}6jZ uyx.r `S2WwCAq lL⦥֠"im.v^r!Qh2I?0WYjYعn V=/YHd{&-O2oHhG"I#1VF kSV]gvj2"oJv1c=:#Ea_pQڵO`Ʒ[io=̫kk3AEK,%_EENwG# S_*FKeKJY^TzS|߬v3&UM*6ԣo$#e<.$m1$-me$|Gt8)‘ R2h=cbQZ {Nml< 0?2 w6le/,|4kp_R pX, OK>ї7ØCGQ\%\JY׉G ]s*+<={=!"Bh.z6]vawd>߸Ire[0"zFu O&EA.j h& |P?m3B60;[ 9^xpMR`/q+_gLIf+Q'],hX@vg8o5 bpܷc;I8"UAX{WM_Z0_=~"e|!U|@Z-5%ٯe~s 3P=͆>,)+ծPH^p}H+l,j!,lSj@Gn!gzCE뀞XfeCW4?~brw9vhzDE<G+no96 Jf#( wW4>_Q UipC[jkNe[w`<VrQጋ0/5RWD6w 1NB_cJ_ada.Xڏ/srFd;ăC1~Gy-՛DIϮH \-2}x1.{Ǻur#gLDvî3eVׯB)C} QuV^6SZ~ W3[ZЊTh%e3>@h)q"ߨ$n#jS9Dǥ)1 E"[ kk8!V:G. wZStfGlgQ1c"1Rdl7YdLwjtX.65Us+1Ljsz#>MJV'BUX MJT%W^/ !ܻ>%gx`6là%GSҋ!d}G6oƘ6C_M:}طq_xH/]GK]VJ8aX*@+f<܉S4g6#{~;Vhn$՞<YpFcVȤ;nq%:,=yb^iYD(4~FkYXj[} [d6U^WLK^ptK6`0[] U#הG(0p4tq+mgXh[ l{2C|AiF>,lNKŏSp͆ݫa(jL0ېٚi/m..9M1Cj^L1! ̯k >q##KXUf%; 5VJNFAzOn}!Q`EpC6Cpǘ ^% e`c^AK讲ygH{}2]j VXMc*J \< ȗ]ʘLVUGCyXπ;DaFKq(Y aU '=PsۼUlIx䱹#MvF^C!3ɶ*J*^zqc.Aϼ>IJ19O1|[Q0>@8ډ-mX% [Jr:n%bYZ-bKQOxZKS]xÚ$gLjo)dv՚ ETW!.[S c#8k,*ʑbR<LYPj~wb.yzK)WVǴ.*N_ᗦ<mq = 97hXj>XMW-@l__>)V̪%rbiTҹN?3_&G/~͞QXǼ-qBB]x\I yTCJJ9Kg 6M Yjz#-QXXHLeqa4S{Y~"U}V}DۙΣF^DWx崜bb Whfm E%_Hs\%A?L5)4>m5y\2g-VJE49yh4˗eW}%tW f qɌ7֠itO\C@5Ʋrž]T{Ęǿ{K1xcM{PN.X-jus bYnҨ`zEz*5-1LTq*D/4ڟɞ]c: ,7ޣwI1;<()m}[5ψN)[Sz;}CҖ%w X08ъ0G̀k:5g[׺"qFab 3H0ENw{Eaiq .ǜ\d[VTi]k~a߹L1BW^%딥Àbhj}zD܅7X. )@5w5P>bbT082Dz;nK^`ЯLCzE\1b}LB-F>"9UmBUv/7VnD1aG0zeP6}AO@k+&:F#{*TT.fTIQWVKslM[PtqSݜ:+(UiI~1Bp[r.=:iJ7Z, X]h͔wus ej6d͉7dgU|*1Q}T[JD7I_R'Ho3 $"gH4>Y/QX֮edaL_EMjv`cg\k cJ,1 h7h< p ݦaUTER4%@A cGJyZg ,ጙ;_IWV;Acho^Dz;I:cS~YbELx f@TJ*tKͽL-MAUh9pF!glKR{V8dX=iܔyW;n`i;Y#bR:eT%!JP%ؿ0vg?q=]Z(EFj 9S)@|VDhrB @QRթE[,-WԚ356ez/U r,?$y9b0`-k_xAQQ J ƿ@:S{Xic> ]zDyC\Pj]]fn0*ZBs7iڒZs _&}f`isAh^#\ICc]e6JDA) G_Kkd&}2匭X[Ӥs-n_؊fmi zLJNЛhZ?t(9e@.9J|Hƪz'˅w5]o<2a`ŧ~߲:~P2#_ (^%a/o_좨S7`=G!=["b Wq(Rׯtt+ΪS,nXejw~d`A:Vr!L4uv?ؙVa-q:C -lۯjE3TJê/$]T*L_Fxt/Q]A9HXFT\zV%B,.0_ w0fhczW)#  Pa JSȌf%/f'K  mL[Ê >hQlnxwBq+Oam;EE·y>LqAAiaO>= K}峡1cf_QapmJmØJ ٺ^2E6m(-J ^}ᬺZW2&o@fqW"1GE;֔zB/R&} "auWE zvjy#]jh=H1]F}Q j8;<\P:qR)/ 7lF8U &{i?20mF w@hߴ%~ 9̺DOQtZ|wxa,A`0zXAVy[u/l< vL&874ـ"vb&}"@@L==^CЈ2 :Y}~WBGNОHyb.Z xCF N&XiU|P3d.˛+0J:mw]s0/iHYCI]G7NB2lrdH/*.ůDi_$:{cHSңMԴUˌA?ـP]T&︠*lEGa}--Ħci;FOW W_A4dlq`'.a 5;J &k :bl0wKtwBEl̮d'8FQM!%60./NUaIOK/:E:{KMmcyoSYRzى'TK?2i\~b%q=FUu:Q]`\̌S Jxg;`q}޶f"'\5J`MJEQ#. }6jv+M_Gi98ECxA7f~k㜹+]4(x(4_u4 `+~h\W:.TC MwmLJ@^tYvw:}3p6Gy/5Ibik>eFTӷ!fPa/eT!F9M)@u/.N3#w +zscSMhnq/ad1312J#uRIQm®Oks HB aĀq Un7LiܸeU^# Q\.Ol5< +ſ-jnjb2fAkך/ ZJ>o*[b.sE*uԬ{ì p;q pFx4Mřn%~h_Ø)b}-<Pz& X`ɾtuUP}:i~ +uPB.9qvv*0yܶ6##lx4ޢ*8+OJqZe)횢|_Lj wPeNث*vwQ6 }ȦWR?h#6Nc_3\/ţcc@Ov/MizҾi q-#1 KH;y\ z"%ˋo'lXnY\⌻zŔْQc D 󈈅9cN舋M\Fq0UĽbZ9ܹWZ`г̬ӦE.;~OT<)HoWxNG gVEyPs^:)WǬ}3ֹn \Jz0¯eǚ4;:"C5Da/.`@ES)1*eApT<PMZ5Ib:z =-mYa3XчUUewA{?93BR 66_WM0}a _|q ?""{%AP#*uJx(U!J(~"Tgi P7[-Q8`*U z \SnSQңb)Qa!/q0fTI MJB[P3>h}!whWY1g24ˎ;Ll=en|C,YӴ%8Eq+0E@y]l t'4ck* ^[L/fDJNܧ!o8.Znc8%XA]Tqh>",teJF_yL\`FJV+VZ̛}vJ+ 4H DŽ(QqbY(#rM^xL?9qlM* %YTVY.;U #flY1ڟ^혲wTQ?iDN7."#šje%U]XA`p'濉+/ 1V' ʊy\rWPɍDYH0G iKKs%QzBt֢wpxzF*-P7%&ЍEff18Qb8jPD*Bi֏4|WEՇ b\4U?EJ[~_kޯ=n (qKZLX"PKnW]AwJXu7\Q3s!S&[3niC=)XN bu8'/l>ٌEXk)2.N]8Xš3x#DQpxԨVUĽiC B{`E5nO`:]O+P+ʼIwnUeGb/bJ&T~12"b eM&hb]fߘŻՌ zy*s  } oD_ xS0rNUG9 fT*fĘel@TRd,C`zToS(e-6GVYGh>|'XZ%~%Bgxk}+2dVPn0s(1+_}ꃛ}" ůq !Xgi8Ve͞ުjHbň)X+sŒCq1p+{ l2YHwZF ܉~\1x4cuo)bB*9B2JnQvJq NvgU ` Te o|}:,Jmߕ_0j-T(\CKQlEjgCAE7*dBN}d>N#cr}O`h )S&ghla/1E=q@^0ԧp6kQz={}sRƢj;W4+_B9Q_]peFowFS:2|v %PI(`鈧Qz@[!%v̨ueX~0g^t$uEKfXi:AE+f >8(m_XzGB!i~xK$1b@W}%<^ݱpKrS@wǴG R]xLk8hSOY"FP@~"ؔ [Ul= ǞNCLtrڢmY^7Oҟ8u* )-:d쓶Ex'i;I=V6Z/$v_B~A;~t/x(SN_'`ۀ湃nvn:ExN-Lbd_/6؊o&*iGҮhN;GӊiT{@Gk_)4w-[X.G3e)3{XKa̠pv-8_}ȼ])!1AQaq 0`?p):}e'}GhnL_a A2S+` \eQ5iCr$e1L$> ` ~ޘt)ӛ$%,$@tXs2 {'yn;hoۮ%{_aeR_Ag]߬!QrmYX10O`y`ky0sGߎ<v^j?0[*_hOmiPPBC(B*J*"m}9tG%ƮK}ПzaV8#:>ƑuT&qrr!GjOsO UXMO(~C9$I 8>I=M=% A"|_>xaIo6ʄJ&:^AJ,"*=]lKTm,ݒ`MF7H旬ZۃIo4He+ڭ:`Y8*PĄtAXx*XEU E >PGӖ# 35 W^at$ Sa1yial1p,wd 3mVAa,$4sCdԜ hhG*7lՁJ @o5kZ|2va 7PgJeg- 2FV5~D1vJ)b.Z¦$K")h:>,K&#$A,sud7SE%h1 6*oT&|:iEF`jGJ[c I8ˡr kzuCRk: 1 " *7m[wNI! #҃E WwVPE-Ujw4\fx(DDO8PДx7N>sDDQ?' buWuZoMVְ=xu/8Ha?|-MQLu AIp@ WbH y@R^c:vUl,M}#L&R$o&1BF :|m}:oٵ|︊kCaKZ Yk0ziC b^}F4#D>Eْz{)bR{^C7l=߄y~Dz>ra/^Oj.N)#{A|cQvyJ_aԭۼ0?O=SR8[ivFo見Dֆ?nPUWj+IU35Ofx~0UbX`  0]%G9TG5~r6^-m_Ղ_Z'QĶ耆QICd2QosnO+%L@H /}d[ "JJ*[ٿ! "bxï߬r!!Qp3e͈" @.*ߗ|Qehzh7jYVO;!t]7vnaQ:`xkNvxJS|XؾXl'O=-l={ ?8@Ѹ-xn i p];aXQ@QLAi͕ĐkbǦ<퐔k@ 7i³HSn/ty2 ,UxËBUAg G(Qm/!t3ϭQwGΊeScIw;rIqܑӻ͸92! ܧnΧ 6Em([lȀw͸z FʪnZ/xk(G0UC#N3 ѪgB:gÂ8o Fa 6BE; k"i, `<2aǃp~O'Vm f%a"0lL Tvy9u2#pȔK &63ZL/=e[_wDN0(T`ACrX\0emIAi9@ˌ!mil((7r~@Y"0dbicyUx jR"5㉡7Pt~1H1m%Fxv"p]?blCf6*4L*faxBrnEF/m AVk~] l1 W%dyh*n9n)hZ95@jqR@BXܳ6Iׇ`zG@ʄ %pp:)!d&*Zjc17`/) UW#Oc@r%J똢B7_8LAJkw1^:.ټ(P.Bwʉ?0wdZ|Oz#^x 7 UKzA.6;RӭE&*~Q=r.-DW,L /j "h7 UX/.HYlS- N*Lh]DG< 7[i|GHji}h!, C|ixHQ16kxIQ$-L4^BD?~ܰ  Js( CvoK:9AP,*DC3Ekg*#^v ;OCcDZID<+-ێEk[fP{qS F`+, mR(ZE\mb)RNdd$Clm[D.z)$v*#(Ѵ,A @@BA()mw^3Ҷrwb!<LvkQB&믢8ړ54rp aPvtG m1MnP شÝI(Ol'cD|f"eNHSHQ'7w$*k ~bsZ]fDM# 1J8d9D*wxÁ񍾞SxѪm_'gI(D`140KXe.5 ~ 3<+϶ .4li6Ҧ%ꜾKiW'iM%5j|vb`uF=hF$ u凗{n€4G6AuѺ?S3@b݅w_SNI*5(Jt)Mpx݀b@Q[& !ZDaTo!D_$Oz\$ikWB&@AH HpZk{w*EŭB劤nPMа]W> S!&೦0 qR(MrdJ8t5{(n404^Qꍹ(B5 h餯kƦqvnq!Y 8lƈӠPԶAWC6m 2@hv]+6*(&1e ,<@qƓʱGDM^`f0_p7*^^p u){ZHcS4-PUPlN;IU6,5"ЦX% @g2EqYbơrTW쮏8"pp'6.<+BzZN&g#P_| `B+-_ʹxa"UCxdVl֥oubV}&Ri*JX5шm^dC1C:AnP1ht~a&U3B%x]1k/865zC-$@Au\FF`%N)`p"̓&ͶT$gd1M##EVכMx :~>X ]);5ZS69S᳉/MukYhbq!e@za|(NVE2DA棿Hpr(_SE:W`a9g󚕪F__C& NLe$ ZYYEr5`Չ:@$ ,A$mo@a*ew(I@aذ9~ нpԖ\Sep5L9PwXq+d:jELbʧiMf@T]0K* }Il.:О.pwPѭrACZKS *<@.6ly HЏG&% |{BZ74,.h4QWeQ\C ݝ$>R30HSW~x`94*t4@d399@m',$Ej+ 0DmӰQZkxQHv`!mQ1D!!LE|"k A'i}H̗A+ĘöUZM+v5"^c9%klml A%J(}1"'n/$d>Va:zM»p_g]k:=tl Ւwx=7þǞtZ4t_q|Kl93UI1@TG:em, o>̩""D[O3Џ28Yz0qGxȔp>5zw$"P}X.,iz6tpAo2\ l,qP P@hi(D[+!f4U 6Hu. 2;j/()#x[jJoXk,eALdhUUH eDd+P UVVMDEХ %B pNJE6k%znc~ZbP&H.SU$YCH$;jxce +Mz%CiY@ #eDTѭ9Sp1pv,挻qAˑD=;"[)$/(HLmqGC74vs;вdH 0RB-4o]p ne{5!VdBAEI-Q] ,vC]gh(D@re?ꅓ%BDv?BHuJaFP%\VSkN 8X i<ZH/ . Lr"U $ȆJ & OƯE/pAQ !"^Sz8_&?_>eÀK<H1!]#ƾF?7@ dbE7:dK]j6!ǁ@ & _Nʥ704{ dڪ>ܵ p.e|J#]uD6Z΍H1]D@~q\5C87#wr+NjoVV*H _.Ngunqi2h:A^vhZYxQى˺e6Tqj5CxTMSI|1i6籅5 NCD7 S%(;rVBgyxE&58L^\/ߒ| QjK5 f)&qlkH*p8@C Йi)`g ΀MKGμXToȕ=&"0'Z.[i5<3>Ζ1xDt@r3^'}}KviԴa@QpCdJ襤$^]7QMHVmq $!m4pފb4B`3[HԠ#JT`r4e֍ 'X+^zšP"­(+m /i @ -CԠ,QBxy s(AI*ljjj6F[w`>D.2ZpƂ^6BS}7<!uK=XժΔw4D49L @MxgSp e;~^e`uDjQl7ѿÄ`-Do>U[|2EᓈwѢuo.f,"pT:d1Zd達Bt7*&`@kN +4$c$L34H_&ĞX_yfh/&{+Hubܧ 4!lVZ瘉pQi+!u?hH*mpkFl(Qt8[ :+!K<{7{cJ-D7 ( j$]Kŵq 1ZtFvjq07h!0@N49(],`$SzۦA^P@ .Ryn\N,y/bJ)A vMMIBw.]Xrtq20  aX`Pڡ ʦLY RA$$ G4=+BRcS.U64LT%*N*eDb(2%d`d'K"xX9a 0HyGUŁVU``=a3uNҩ7u=hbŕMe`h_nIYlMYi]4Аᰪ$Si䭪jQo=.Naɖh0!Q5Է5r֗@B-h07J0j1ֲ 8=h|Z`YPOJ? c(ŹItw zGNM IkʶЅ:ȼǑHTCpp{đ0#1%sjJPL<:t.O7'E{H/4?<(PTѤ5pKxO_&=ELaɈ~= .7]]^G avo~)4w:}S'K`߉-D= )i~gaZth w1Eo?4:Aq}w |JlP PCB$z P PWKj* ɬ3PĎܮ@1t!)LAkqŪER5Nvth8qtN%P-~K-6()Mn²dQVL />aS4J@AEHv nhy+j/(4G8ca}.!ԉ#[lSۏiI"jqwp ۫@,ϛ>^s4_-1@4F,px&0!AAfH7&.Gf)M>#!uf #!'IP i۹)@SC!.o.%( [ ܦJ}4qJRQ q܋{ueVjBEA02]΋1`]5D{IM|qn #As2t^땃 Sǃ|vi\Y1QHQ")UE֊ (٨V zShy Q0X ׸u&eA.d@޿CE]sZkx!]]*Ih F]M*oa3xBbM.Ko1Q'xդhw!_f؊$ `_Ul䪦L´04j@p0Fu2:% Ÿx} @z F YR &K@ʵ * 4Un*_R ACnA+hݚ"!ÁoiB-![syPuP&ʒsClfBm5DD~glh`0]yz>]I)®4`-j pt{ʄhp,O8NgN[xi DOq+FTp46 M79@j -Esc0zlHЏD$R&@K0$Ɏ1XhE.ofx.[1"hJP\: Tb4P1ҨЦil t|5"{ &A児I.IAJxࠇo\15Aɷ?!qƶ`, { XaF@D(w"s $-~l;r CL){ev&&ۛyƀxl_Ic`=W%eJ.ۅG7Dy^X%!"KoƲGfOt?FCM#?P`?ۮ y"-׬E+~_7]sbœIuwH_M0Z׏=-G8xlXq "^=L  ?*huSt-Z nj{3\MjYY)Ŝ9PiQH楆HD(1kdݮK8#@H*vևM6T OMSR3Q^ TQYP7hɄWox#0vA5?jWVa ob$#&Mlˇ  4;aBbr\:XHO2l%{1hΤlihT%4 IkNHOFޅIϚ6>BnVI0X0$P\-*lyAXR e:þER^@Dы8(PuMlBL{!-SgNo9B,T4_[RWV1(44lE" !e!EjQB<:O$J44DYP% 8d!S%@cG KM;RQMF@l "QK̠6HDG VYGx"9X-*ceՀl#pId$ )AK\0#&b\VjGH G@E(،1;8 佺Qm'Ltt0Bc(MIR A'#q.P zE1T@HKIZ1ވ1AD79l - #ʢv[~1i)$ 6 {.kb,=[bN< [ `P9͈;̀,㘍@V? Lqf7V"Vʷ!Mg !)_!v88$ ?ѹ\MH\6|IH!]<<~1mЮ (iEg e~0G΁yڋuA>k7 p7OCT`x@,=(r `ȄJQB: ),kB8(qu0\484P X=&.C ]JҹB dCq-bTJ"M[]pTi7X'hvW "(] drbˌDys uDS,`D Nnbp7G:;ؙm9ٴX*^[~4z=hC]9'BxCnz@,!ᑤm {Xfdu8IG{̓! ʙwB!DK@cãՀ ɻ8lZ7bm1^*;,زk%Llkta.V]HaoCb򂨸!T"#x,;Y;!Pg^fl0DP}dU]a>vZOEHKm}XZ4J;"rMk Э$j|bb($ @$XhCѨL* !i͂)Wͼ eqI&@4HIfR@Eundh "oǧ4eP"nMKZVH]a+R.mk "!5F>ӫ)l3["adc #Tp!6OF TfCԖۦda$ҡ[=BEPT "ߗ2WBA_80 <!B7Nlj^*)(KjZ4zLS8 lě9- Wr]y%;h-RG{#&E ^Jw@ )}Q9CX 5< Cq-R`*0뮪ƕ6?5[8+K70zNELEh$Ab]sjT+͐KWEFs*[)Pū㐐())p6t39@I HV잊 @Q~ 7@"-ŎB])T g܏E!æ HX+)I\]>"D&xbq]  躀yq$5}1ieдzjB>& a c{ 0Xh  L!E+oX\hS[q!N֛:PM"6븪EdY.hYn;$%[ۭ 0{:գsPZhC$,";#&"+D`d/L o*($t$MfzڔC}51~SGlY/ w1摥Ç`fb1i&:T0T"f,uI TaD LxA9PZDДKBt&dJK{ (بz[YQMQ,`ZB1hC  TzcUam{ BUc)KI@mwuqf%b-^WԔpBq -(*`) Qu_&-XI;B# (=LU.?6۽yiu~܆)H$ݫ5% R >H^T 5Kc@1D}l;MԑEՀYShBlZJh Aya$~13aIՀǷ7`+4C_S;lw;IU5@.N^|ċu]ApTyrdb֊{e_>& 5^ސЁ[lBOzkQ6ELl Ik95`Ah%6A4ayAy5MYCp*QiCZ{F%LJ$\kKS4="fNz`xj Pd%1F$|"^ yȱ^DR,l9o0A)Uhm^<24˞:<@) xNlbw;K:=`уzGrߤ :5Ϛ@&Rԁ/Gxx̺HB( + GRFBM bȊFj Y](f yQqK(G-^p-%d|)ʘ& Q1yJpI3mʓӈp-9P rGS_u2Zd$E8m,\@c5^yBc^HԕD4S7= 2R41qV*Tȡg wp*9`!V ]'o;֍!JpF++SW[fWSW`FpmCcm4v~"xKM*F3!G{ 4Zx@5ݟ jQ]Tpp|"o(Wm!0e2W [ .Hj>=Xnf3Dߍ:2~+q@w4 fZLUi`^ [ԕ#ꢛJ#aopL.؛#ZUpll -9/4 OO(E- M4߮a% ȸ}!H* ڙVs$Aocumg*Б'.Pg .LZ(w($Dqذ^C1Z+PXJÌGn&h}SE ;!i'aaeq?Q+`v,t5nWâ" f&`aЧް{zD"mSt}bEyX0Hk q@Šȁ`v[ <1ʓ$"\)É1G9H"[B)h0eٽ@5E a[{.@a4 xw&"(TYQO⎘W C ^ɝ R ;H `I\ltnaK)DE զ,EZ{nBqUrSLCXZ <-} 8v @@l' eK?Qz=CXm de31((# <У-{)-_>`w ̻ I/,#W" VIJ Gj{6>&E2d+ YY9H&)`Che

JPMR}ޅ>Zj,CC*Zqn-U }S!iF:u۔j#M"OxvEiQٮn_P7?>1)NwXnV> r:ew:u&+0 V̎5ش*<U0 M$Uҷ:)~F#k9H DQz;Q,ũd)΋H8)j`4Рcf2i  ~y$*u1Vvoȅ%dMמU5Q:.a8EuIiPU%R9(( Hxh#c4x89p@@UG>үuxX"(c$Pa"CDpjT1vT,7hï  &րUZ05%^Rg N ߌn>C\wYFR+؞20LqDM|RJO\S >MN,\'Z)#CG`6p$EMsZ` {yPDVl 7a0"#+j2JVMXmْ&r* yw@ MQhIsIW^B MtJ4D跢"Èa6vw01 D AP3zƩiH#(D7 PU]xa=odda 皼hn^E!֙#+,.49V;|U0S>D4R T7$%XPpD~, uw87`lXކ̍AbhN&bG`lJꨉI h jkǮ8Po P(T#L'5YH.WmEn؁P~zoXTHhPPT)DX]Qx_NP(' #H B/ly)W(qHh /j )-rنE@vpF HDs,$4jM .`hԔ)HOz RL,@W# ֨O:zQ((3i[l!] ]_pu`CP}x!|XΘ&+;i(#3a|x l;ѺER#"[{n[]>$u,v 6؇xQ#b*P"CJ*M !V0_"k6[D@ئZM|Am@22 ru跜}x2սBeR6 U #EP7 :K6](š%ʼP4U!1k$<sPDCOTp)> #2=T5OjH/ TDU6jX{UҢ{B1wbmn&D >-Mxp H @TÂ!+zF%bj6ј ! *__¬ f,]ztƽaȩu#VizŭX#9c#@7#~>@Ѧi@S`7q gRvt<6haQZctTN>4%M6V赩IpQ-M]ZvG~dŀ34rRɪlh2̢6*A%VC5A-`NE4U4Cu$$%@ADeDxW^|B,{9g r@x +DM%W$:B؝8"tp2Ef;CD R H#pPi~5ƨu#͘-;-4үiH() e*9 =~7OΙ0sY6i/9_M8 #Hf-$9|$TH!t(f.&p/(AmQJʈplZRYV5yr\)b!/gCRsr'e2@ߏ|ЛGMz7[Rj#t!q@YC4."y.0`ťnt!<8V=`Mh 4=$97tJh0 nsV 2VL%Ob) B 4vuV:$ބ_zD*<;رs\ $H(w@ ʠ m NQ{I5 'ʎn? >u$:x$t+m!k(^kRlyZeXbc $bKr1$S֮R  *@@bmwrh0;4€R0;#w? 1Գxӧz iB$9_ӹy1B͒4AJ _56б`""fgQ]`525%L^>Kl9 ƿ ;9JK sI#^|awdB =g9 hIjU: zx=~sfzoHx[Y #=NՂZ] f7U t֩ͻԳ Ry˓P׽@2{<a 9II@-@!Ʊ(P pzhxˆC}aA#t/ϰ}B5uu U/g[e @(|v= QS6/A84/6NI/ dEjA~!z`XC!ŁCYy*-@Q]sa\ڼȐQG']qDJPdmMJ &E|zKT*cx޿^ .ǧlٿ8N;I%A+Ek"Kt"k5Huݑ=tSc.6;BhuJ>TiN/&XGoc|`jJC\5=[;kεNxO Sx[ϑ-3*|?A ymE惹H > XqvJ$L sR1Y1io/!1t+<&Mh_!Fф@an% ɐfPq RVJ6^Y]@@,(+̺d臈13JCfkARRo"kW(ĨYd2+ & Qt6i=c3SU8-xNJ" 5&.ޟ_ k_ |yfn׋VTDYbgPm6Tͻ4u7qDA*5O"4m0vpc'h46e pR2Rρ "6^g1`*S(N؃eSEha_@u #HVy} ]‚ĊngI;Bh-A߸I'<~V6'X@m 뙷Rzj5PjdQ&"T_6 [ YrI?xغ)$@Q?ӌB6e G&б8s&U> zFgTp&yAT>e. Xe>5;U9_*^/xW?.vm *s>2XT8yx@ UBIaT94#@R XbCV5`mKS J8#MV!hR K߄ON*d 4b5席&} 'Ȧm'9]4 KjP|` Ģ-A/s;fE!&WGXU 5}5b.45 \o! !@ 紕4 Fz hlU،*B~G8H TQiA9%f~՝2g&w ׺nBJM & )BHMfDPvT](jN2$;B~ϳ%~aǒ`'!XF7}-&8a,]*2J^҉ 80%B %uG!B^ (y4GcyB=t@"2eppH a@ Y,W($P|w9YJ՘jdxjkDVٱP)v'"Jm80Vrb ATY&Pgwd7`SY8ka d"bs 7_*4hj_TU{28dd&yOd{!,lzW$̲ @#$_Q;8ƘH :zxRyYٔ&\)a*`:,&LN/Q!(Fڈ;<%>TMَB!M@)bO.F;%p N"CD9-[xo". *@bT7'iH'BJm:hP d%$q[&$¯9=bTyA߭h % =DNZUA$\P7T;d"ai`|RkNr3TlaDKC%]hgŵd>^IjEmcT+A;y  @Ao'pX9NQҀ Yp{D,QbQ`dMpibgbd8t6 6oq- ]@t/Ɍ \$ᖎd(-hRE +|e=:M 6f% 1/IG$=Z$ԎnfA+m1Yu$Ri"ؙi`ݨͽPTaȒtDT-4 *&aO gOP@&VWA \t{5y+Vʽpqd^_bHv]>-8<Uu ㆵ[qQ&楝"^Y+7E_f`z)o </%Pױ6c^'*;NcU6`=Saቯ3S7d`btSU ׼th>Ki4j7b@݁"v&qX FC ɀ h!DPRM!1Q.A&E XT+MvrF90jGPibw * kRբtEnra1C@tjFm!˕eN"ɬF1%[Y tBѱ; {1Ha|uh9|AN82) ؤ xD/qզV%"ڀ/831T0sV5[Ѩf(ݪ 5x"ܕ0CC$pT OU$HUH%tYq$mUD[k>8*Ewiօe҉*[`$Ip`9%25j-nEF 0yH0T<8 49֍29{j`eK4as#~@`&˄<  0:qӖ.LVZQAeTQg@we@*C޲G";H(Dޯ8h:^O&#@B; МH\POڳaTCϡTvH .|b|y-g1 -JUyF<׏t+d p0DOx?/}O)2īv&%&ǹ~O+QB)6cH E'6rV8SCACf%( v=mFMKP8dplkXeSe{ψ)Kѓwfke##:Yy"8 õ%tfb 0Iva*؆5)U`t|QhBq5+BbzaRݢ5y]dr/Q$1(2;j"/@h}+B#b`w_.-ViNy$*TB{)J$H9T;]N$҄R,& P Z+ OW1F$A0ܫh /2Ub7*n *%A6 !mH4Z uQ]-mPl &0܊kZk. 8U,&91G v Ü-Cs/y6 Y8x[5/8o$ "n*0@^뢵(UT# +Y=h @]Epql!5 vppƍE`֟K]7M0 <(QלR9}s #[vPMU2GPjl*ԦUnm,S+Dǜ$!!~MFO%i]>O B߂] gqp?O09CԐbS:#a{pC)q[3df.L4R`/wB653#DD 4xV(Ry\~u@{Hw$- ! &gdBQ;!8 K)k;Q_(%Fyw#"3pFB p" `uNB~.΂w2 ɥȐ2#2pXmL{Cb^G؅nCCmdBk\x ں43PV1Od& (&/8ao&6ZY%DFᦴ8G@(l V?o(']M_y3D_k-7> +DX$׼o %e]1aQW^'TUp% ,j2豵_ ȊoB_a;uk[Lժ`ajP*1ʩ$ V.2 ğ+ %YRC<%xĤ_B:XE+iMH5iJUJ!`W8Vh}_8 d` ʒĊ2Md5 ԝrXƉ͎)8Ki"E5˚2u@,9mEDR)lGǰVT$!곾7XuZy 㓯0' D  @WbE*`yS+sל(|9k/Ia^<P)?&WCl2l{)eCpN`xr*x Y xX@6"ğiK Dwcbi=pxtD}t!7@Xc7p7FBJh WA*EŁ4)y8ҕ=-n%G`C~` U2YJR+O FZ%  `VMZ椛0dnSCx8y&%EKTpx1SEAaɚ1:j ;n,LXj4hpKy ";rWGkpY1P :xVE9:>~&!#ʄ_e@:JDvyHv9|ǝVT>{ר lH߰@^YLD1 _*^ :E|Zw"i <):6(VBf+ qB4? ;R0(!nY$@ nA跽RD`PЈOo:6Cq`ӈ4<*cD7oL{;[40Aok5A t#&A Q;RljBL0}f5Eq*q@U3GݛmtY К|-Fk.DnS|bZA(z)nw;rIcѶTZBi#u.9H0~&UɅş̌50ݍ,6`^shd JsS:h k7Am?{H4'ČtMEEIp+"4 qYgM{i$G3C"͎P0,jW igR(MCJ, U]rKwol?y(Gq$2DhHdnP3O4B)xJkj:%H}{nqiuOӱ}O6cSAQcꐛM|o{UZObݖ: ncwn@?l/хSϭc⧷.y,8a|bE.^ 5k @5yUrzf䂌A1:!A,zǤa3A X4\HRQej_%qY@A 4U xspOBvMGYWwyQ&:v -{9pת૬0 %/b&bN8V{Zڞ<`zE JfG,QH!IL&vN@"xr ִCcz&Sid5Q lq|Jk΍٬!fͱP.|FQ ɎElGE.]?tm_ޏ8,u5ji>=qPYaG~68B";3Oq.T=>oa+|8:4Em<_q$"o!r)"84`uD$RZ)UY>ĭDZ!@C9 IydT#(׫|e( aU< FwV%ݣESlg"VaK)U$IASyZ Үȱ˚q!U"@N )%i8<6ZT(E` )p@rz?s2OE" = N&i"(KW`A27F6ڸ\G0L"@a}گ -#f4#[>UB3΢"%* _K9dNR[Knb-!ZNv_ DXz!0 8D{=nB&.:4cjE+j7 .QK[* m]WFR]m.2R1(>L0gֶ?LUb&0uZ)j])\mPɍAU(*TE`I!m|^7ɀ*؋yqUG5FPMIu}aZi>?X56sS*]˪Q Z{ 'Z4TA> j:#8Ѵ?9R<  c+$`[݅!q@OVܣe"RQ YDZ-ͻPPSb%<ݢ|-!@\?)Ry19j?#elD"udsej-IT@M ֭PR$6/r:u cAk`y{ (#*8 ª(zЮby| r|"ZaYK'QFЉ @)ڊ\:;ml DTi>AB0lB8F^o6RRi`J%4(|Bkskn$^;2'O*>jxXrK5H;A c߿XD`HhL"o OOX7W`0 *ڃ }N47MzXB YVA6-݉ u¯3YJ`إ]D:;J@35!wEM$%0 *VeF$KKt l SºrB@vArƀ%CjG_PxOډ&@εɒ M'Ĥ^n7 .$`/gq F?mz h `|? cT([u_Ƙ Af@Z$7qA5zLb"JQ6bE1xcxNH?C MhA60{b0k x[jîB\#rDQ`"TJ6fQw7MkP Y{)*`ܲHA}5N^;t<*qG>r2'p 0a&tRg)Fc<4ّ͕^<4Ч]%*fsC(X`Kp$P6x PcF dAwpB@,`֋MxІTi7vS fwȆy QM߬Z^? W^rWVh/b;i |OC+.ښyڇ(-KC@7Dfn ` wu1 (R6wM`К7\hWεykȕ z52(0m/Q4Cy6F|o8E‘P/!!NFOVnzJ#LM+p.F(<숀:B8*CeX&Aߓ%'[Ȟ8뿞`jW1WПN/5>CG'JUUJ}S7@AP4 *fj6HIP@ 7o# j0| G\ʿm!oM}~R$mk:Cue>O 5q*_w'>:Ȏ*q>|h`$"4V.(T!? gh|Lz0PwP7ۻ|fܹ!xߌJ~?6:ݩ䎷6ER(T8BD'w@uJ׌Yk>DDq*"VCM]Uxxխ"B,mWH M]c> j_ysg#O]mdUj4_b$ƉhOgLɥZCѿO?3! $Yw#1zIR[G*\H8: z.fuP6 ($j z虣\X-1R@|EwPlinth-0.8.1/doc/images/remotestorage.png000066400000000000000000000623461266051671100203760ustar00rootroot00000000000000PNG  IHDR8SaUbKGD pHYs  tIME 9ţtEXtCommentCreated with GIMPW IDATx}w|Tǵ* ! "Qmz1IqKp祸I^bb;ɳ8KlMt1*@ !*Hݽ?̝;ʎ_v>}$2sΙ3Wp4 #@4t]Mvs\s@4\.r{;or;/2Ϧɮ~3 paKonhpAAk47iڠeq^k2W~ 2\ZF"\{C5y | h#{/k43n74Ⱦ~/N?ha? &n񰌃FA*M4iFOXMX4huce,vy̋&*S>.+hMAC`C`AoJ{szf`h\ӛ%f %saUk `^? {We& ?epc*n?x+~Ayޠ' qy''Ӊ|2IŰ;O C#LZb +'VXɅDX̝}{Ro<&5 v*f%8'fryLJ:ٽ'5o!DthLeҬTⓝ׼x;ϳ6V;MyPgy k&.nɆ/ L&01XB-2M < 0gcZƪ^/|0EL'ps豴~"DT?wz\<ϔȓ#xɪRhgK|p|>r(dp&穷͸VeCh8޴%ci.Czu&:eƴ3>1W]gt.\ =#~M0%:>]^i:;;? *`W R*kTٴv}''VjNµ;ĵ Uu'=T<,mBS L33`rDExܑԉpeÀ 4\> qsxh mH'ky:Y2&#Q8UTWez2)*Vt *B\"\2쨏BZ+skc `I fUեJnt~i ::MV]"Vlg :uxbre }-A*L Y2d8UKNTY9UC*T=x`ZEqiЉdN\[ *8DHԌӉ#qmG/(OMթ88 Hth:u|~D\lk;69=lGthx`VqIVlZk8"rUN^$uQI/&cwtJ.ݸ;ԨKlP pzaU4QL _=MMMزe 0tP5 ӦMd҉]Ef:Me6< %X$j;Ԯ Fv6)aGqmu(boe+/&/? U b e_߄ 0y?K};cP^)}~C-q=܌i b"u]O"vx%yaʔ)Xf O=, \yDll,z{{ԄYj7k,̜9C A[[vލ jbu1c`B||<^/Μ9{Aq~~>0rH$$$󡡡8qDyUWYb$kydL4 xLiӦ!33/^đ#GPVV (//G\\VX1c@uݻ[n5v'OFZZ@yyqMj޲C`޼y4i @ Fڵ u񠸸W\qE:ve8Y=/^l%`ј5krrrvԄ{N23%%˗/G^^|>Q6͍U>v 8y]QB@ىp*4Nknm;i͕x/g!nĞ82%g>Ĥ֏Mt.=p3ǥ~?|w czjl5P$SKE#>I&C~~>1n8k\X3g4>|8VZߏs$'Ҙ5\"ӽƼ***oZr%f̘ PPP`"V;Ҁ֬Y'm5k`ɦkSRR0{l3>l0a@LL /_ .`޼y27oZ[[QUUedz5=/##3f ya9-;~gzk1 9pHa:ȸ[LgggoO?&o6$&&PTTx.G'ne׶ҤD^TCL*K `bjDEzM±qq7c~n/z/ L9 -ű .Jֽg4ӧ̭ o뮻)))4i{駟FKK ΝsfΜJ< ZZZ0gΜ{t]Ǵi ڊz gΜARRV\ѣG ´i ۋ7رcȑ#QRRbil@UO4/"UӦMɓqElܸ555zˑsb˖-A' pB̘1]wO-Œ3PTT*躎b梧7ncǎŲeːbܹΝ;!C`ҥ?~09AhKƺuPWW>?֭3mLף]]]|K/d,JKKqq4VXX?CP_{50$5z;8wz{{cC{wpỲDذa*++ݍ.TVVbƍkdk4o]Yf!;;n g:`qP]]mbn+ ~mmmx9995!_z5=>60L^2aT iwþ"N<6BvMgm=l03{%\xCC7Mq אޟG]_]]8ӎͤ&tNOO|_ޗ46@GGN@BBq/avDrKaÆYfyvmyԮwy/+ܹsRd4=իW#---H ⰤSLAjjPWWgO]]]aIs1+PSƮ%u`2ƥaS\r)>nݏ3"Tg7LWϲwBf7CnnnP=fJ5 z6xrq);ҹ*3$[I{4C;Dy餲!E3oYVMM }Q صk:::+V6^tҥKddddکy#«jQ dMÈ.Y82,G1qi bho;4U0k%_~ni޾ y΂*=0|;vg hii1lw٨6---J1;N\199??& G |njc88{Mx1b~i466*WuʴF*s jIKiIޮׇjTWWcΝ;1b)Oîvu 'utߴv!''Ǡ{ML2?z B3z񒌭5P9l.`YM) hL(*T1Wmؘ3@ bZIs0e%J )==vFDGGc+q۷o˗#;;QQQ6N^wӉ@5o>Ik|XBRR`|_SɲepW"!!ٸCK`tPPH#N*Æ fYYY(**Bll,>Xص&mftZ[43#v&w(u|3SSGTL >Lh=G&#_yp1ݨQ.wc!/(Emjj2gرc@ߞ#ЗHjݯM6ѣ(,,DNNrp%6y"9b󡾾A{wFBLL]Hdb7qQL>HHH@ @[[N\iW =:z{{u":7mE #=C0\P9UBigIiW\Tec̙X|9jkksٚǁ| @ӌ>̓\${ۑ@* y]xjժ'Mf4PLNg1mQhKňӈ u)lJ%5TcV 5]V%TϘԢGjU^ee}eC9Hײ V-VmRIZk"p عs'Ν;(;W_}Z!b:/dCP8_7:j.s#+IƁn|N*D|̰K^V_!ދH^@']щH>g8d]yPӉ[\ݓn#-2Rfcrv+˪mBdsSTYWE盧/gΜ1S;ŵkgO_s˪ACUӁHh_ PU SGx6 cH_.IAZOq!f6Q1pˤ'J 4'dJikD LEEl\\xl;s59m8"ˮsY9/b̙@\\̞Ǵ1X,]yӒ*.hd؇M$;*Vɲ^ϴksb&N`u~\V5m- e_l|vqm@՞ k.Ǽpj0 _[:4?J91B&%/g2Mfئ̼|@F{]>Yw/U$lAdViBVRr]{JYz8\xMYX0ipޞIjK(NS`6M .'FnjV;:5pmes syP^iSvh @\leTT~ͅç`kbc-mlD*(JlA>;MnUDk;xxȨ7v; @n;S\ϪIepڮ`q6]wGakbT  NaB!u ƻ+q!6EQHe O ekjkRYMNFԢFVjrt͡+א@,NJT <'KH4bU+8erNUkÑخlʰ$f'7UP,T\`k;**ײtCިO)g|*P!>, Ftr5Mӌ`9)'hFG ۡfzJ+6-Mjﱛή) .ܸvRe0qmDZ%4?\]c̓sp0R3nAA"ߥ6##2";"..99暕HOۍ>>azFofU`+aэjyAuD%-** :***#**h;ȈȰP[ۈaʔO)Wfz "bOOudqsoÁGdx<1JC\xb,;VIDGG#**0yf/Y="LQ2 /N?bbF0!3!hi/0-JiUuzIp.=GmYx<1DFdDF؆'pbh$:\lҥGxU42"#2?t݃Jn4ͷdA\l/TZcu\#xnן`!2"#2maqZ=%~yIHUdDFdFJJ2RC~Ⱦ+qF * vܐ!I`bsٳ0gΪ4'' X`22/v[sϽ (O5"<ƻ\>dd`jz>:> [CzoزlDb$y~V{𗿼[,\8O ++?ѷqE|Bbb>q%x?~lq;u.賂<e8zC#9Y܃<طmXF)<^/شUz>SLDTT*+ĉ=ض cSڹfıņ ی|s=` !JToEVCu*0(Wrsfc{4yX'q07nm34}^:b 111A͹{˫= `8r8/ >>^y&-իOzlQP9k^'O/~q7RJ83ϼ`5n],ͩ6]• _Fj*04ǃ)x55u!hM`n-WZ/n:wquwwcذ4q77cQ(-} 3I>ߐ#GQ\\^z]kOa+1}س{G0o^1-͛VZ8pәh10W}nL8odUT+Dhaƒ}`8ӿCS9\{2Nߍx|*⡇~;:jk)ʕKߍYv0lX`+p- y'1yDIE5رCë{w%jxصEES9j|n#?n78d|a+!>(.q6:F-exœOO?;dfcpCWzgc=7\\x? *_sUo|xݹخZLKl$@ :D^^n%jjv폰eK`Xd6l؊m?6vWM7}LᮻS/~ ²e q #+<}n5:?}ソ0{L m޷ny}{`G{zkƎ[n<ƎuJ$snz7qD V\5kV"--Wf˖2]#3Y#2paP\<7oǵ~qX*_?Nڇ57#G;dfUXLt.zC=dxq͏}{5CKlILu?QXF,_79W";ׂw Ȉ0G}O>_ ~î]O9*"l %m mH409ߏw~--jA/^;F]]Cs`X*z؞##2"RIƍG~({GJJw݆ir'ӮVzۛO Yb1kʚf^3U4Ǔ"#2"#2k{ g΄֜MUS+xHRh6D2DFdDFxrmFllLq#WGVOII @ffjj#،Ȉ WSM FWB"u.Q8zJ$;Ə/`22"#2mL4@~?4F}П fj여zʊ'C^"#2"##;;S7#]&G$G=C CT%%0lXJ1 sqϔ#Ox}/DD&Bt^}>FŢE:9DFdD1exQs|X\V[PKjJKvt烦i3fnѣPW׈ :XdDFdHGll M¸qy8q :;; g85E"P6#pl+؀;gw?oN=Tע;ŵӪ82رµ;?n\U}VfѿY{AjXmC>=Tdz)OTVA sQEV 2r6 .9T}qڊZ,evpmgv`X'dmi ئ5 Qꩡ)eHPRT6Ql ÓyTll+fa*qkCU%.+.ZU# 6" ױ%xA<&haXP!0L$|a'VIx!lҟ!BqqxN?+VȘF$YIlVyvkUm%\D(f#y,oǐL}4U+D@EH{hyjPys* Ń,z&̆ʛ<[`ڮ@v`Zv\⍇k$^]KMsQY=>Y.o!"ZUۏW]`y2Qc\1\;aNlw*kcQŵXvj ׼L;kW9PbsRE$U ׅcS2 ;]3:w;Ia돃!D#T#jjFu_Z&Hlh@ "LaEUQΘخj\ y$%ٻev }usJ͢0F\ˌ2܋ZhO<%`ZƨU)sŵJ$o/~t,/, мU;F] Ė!3Z֬>S9aD*'Th*d/9'kM µԎʓZbyN M? IDATq"ǁksk֤Fx 686 מ+T{Y5)B5:T6 YQSsvV JIT TՎn \J-rRD[Q VEp jEHvVv g=I'"߮M[fQ-Ԯ/Ԙ4UF΍5yi3 —<|ڵRi;,L),[DקdDҤ dɩJ G>6ƛ׼56z *LP&t"5=ПX4{1!qpIu#8 Wba:8֮]vցp2ZvܫbU=,|N'Q^r}Qї.EΫs?n;"bUevNJI"z*J5Q%1*UH1|sk@h*:;*Np-spڜUg3CJXT#E6cǢE}}=v؁K.*arɘ={6Fhb߾}799%%%/Ѐm۶xm0m4 2ػw/:d;֭[QXXhB":txHx &CÃ|̚5 đ#GPQQ{3%%32̞yraGg2"ْw؁iӦ!11рǮ .hxxꩧw,]6m2|/2:;;vZlذ!hoGc8L)*, u?z!Nj̙ؾ};Ξ=h̙3 , ҥKq1l޼~iii(**2(+VǦMvQ\\lٲŸfشiΝ;t,Y31c6mڄfcD}}=9+WDYY6nۍ`֭R~ј1c6oތgFMM :;;ӃT?CŸq ÇGOO:;;˖-3+55ӧO7 ܌ &رcq)`ј9s&6oތ&ddds;uȬ窨4ŋp!-- ӧO#F@qq1{= !!W]ut]޽{Mooo7cǢ&={:h쥼< ҴL`ՅC IOO7h<{ƌ9w\coTl2/ckG "W2;V" ׋.ر999ŤĉùsPZZ*|ϋ/~x^|5=s8}4piag\C{weW&jbhhh@__PVV"㚺:dggD켼<צ^~ /}QUU47Ym?eeew9S]]^.ؼy3&LueeT;v@GGp]NUigԨQ\M68BYYrss AE96|F¡C0j(8pnFm$ZJu\4@Ãr}ZZne  2O]׃hGՖ0#tJ>#"ٿ?Fm]^^nZ_KK=޴SY~Κ{XE@$l7A%ҜE~~>ϟݻw %K eeeM[1خc]ϒ%KpYU'r766bɒ%CFF֯_o HKK31>ǎCnn.0oԩS?~<86 0kr:<ܹӀM?QQQxgCXUVV555fUkk>B;@ii)ncwo ?`'FKX\*hiiAEEJKK/c֬Y { ~A׎1ȑ#qygYYY9װpFFك.{y #G4}CKK qtwwf™3g}wK/b]N ''n =*++tRכdn4عcHHH@TTdсDp﩯Ǽy󐐐ǃl,]t=M?QQQA{n`ĉAnn.V^-dYl06!Y||cvW-GI tx衇BҙXUUE/ckT*k"[l;ȮرcqFK`ڎiD5۩ta|`ӦM7~*텫 5w}}Pj>WCRdZ-Ԯc@!*e5眪HHHٳsΐq&Ϯj![Sf1{lڵK E/*+CfϡZe*eH^0` 8*N ;i7N<;"BN7zΝ;CiiL\Q&I( zXk0谍k+Ifp-™ .ת 奖ޯn[Ĵ]NFd@N:Qdzؕ~d==U_ڊb։v@jTNqmG-Uz ?1Ds:lSwK>2å1YYg\Oy9<2*. gѥGD]NlypiHXC9yɉ'X]x*%ZdjnNBY]N\[ٓ&ez]lM8pN6ĩIlNG4db?onb";]\YFvl4ӟxwC['`'60>v Ah\\.xh/ UUU#jf\%WUMQdU8NG:9*rk'\t,\[yyjh8qMkooўToa~y(99щ<~qZӧ6i{ELLY__***0bc}NW ng4\ƅ ]r0;8 0űa-Rda4*Y; HvIkl7MZbƹhQ0:`N]]]R@XuSu!C`ܹ.V&sDQG%Q<믗"E v,ڌ^og />U֭ilov97Q)j5]UunYo+ے(Qʼn`҉j?+XXl@RҰ0Gt#7GDlŋ.V^o~SH<`{^Cwq~Mn@lS:u峸³>kb`<[_W=ŎPf߲kwk'қU[1x'*n(ݸM\縈@_фct"hN:7ӪUkk{Aa;*PvX=_u:t]GffmByDvjjHӔ(u<wJ(_txAsiFnQQQN):eeeֆ'v#==W_}iȑ#x҃vիWHH!~~\\k5Eax!5_ܮZg޽Ř0abcc Z`;UqpgyeU#yϒy=e%ԝ\ŵlTҲS\vAQADG9([t0ZjUP#MӰsN\uUF7{L؅FP=kΜ9.V555HHH%K/ g6UWWw}3g de7>c{˖-u(Mf(c"Ǒ®ZwGNU¹Y%ѫm0YoU!n+;'^Lk:(PF5!1'׫;<Ö_+װ:Z&dffbT6kgPXW pZvlvTP:{*fY~qC5dp}=psQ '1ѵF2Mط[%K.\@ZZjSj;F!6N졡dxn0ݦuEpbQaz hF6~=Hv 9Q1T^L 7Yl|GA]2AV]ϧNTd:UXٚZj&l+)jّdpRTU ;bZc9ahA" i6٦Ry{b>|lhurة٭4\;i*U$P͎E2NR9O{dpp4Zw)ုS\<>I\6?;ƻ: |sf+xx7&FD42tpEu"Q(TD~τkM:~Pvp-cڊiZcҥI=rdtlHm Ƞ)dYT&bVݰv~ʪW2{UDYHSc>oc YٕTYW݉9*~pma[\D{){GYTƵږq{ %H~O**sU`Z_fOµF*UN 31Pp#\™xډXJEl<rN7.}gUΩN՛f"Ҩ8evUB1c sN9eNʃS%v%+\bt.;B'뺎4477>dbJW+ B1x gh4uJE8Te82 ~efViUpڮ8'j]ў *#Vڞh͍ w#69(ƌsF]^V٩T[UU6j'&ژPm*U\h2&e^zÉk ¯S\;`e c*pQv-vl<#ppCj;lZA6T`5,\:8 Ǿ'&&3fj8F.ZrvcСX|$ENTVݓx2F&Jxx]A*W=êTɭk;7;iAv%c*U;DIme"ف ôCp,N-p ??aBtEg+i] C(ws9@[߭Ek]ּu5'8:6]Gޑt\w?mnQNRT<]zސu=z?ɱv?e,wY굔ACʔS\w$u%aƚι+ejuya Chx\v,W X?u؈(sJL QM*&Σ *IDATNsL~<]")GJֺϜaw$N tzP hq ZLu2)Elͪ^7DzPtMqRҝKXoehuI]+$ֺΊz)_*WHJXwTy鰦쥂֥DR{qzp:ۓZ6=vú5keFK=tY&ޯ tao%KxG玫5⿺p_v()tIgSqTwUa9Sx=nNAYNR[_23:S(H,"K̴4wɁ45!.lJ{5(e} [5HIENDB`Plinth-0.8.1/doc/images/star_off.png000066400000000000000000000013421266051671100173060ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  tIME Y7bIDAT8ˍRJQ=yCDWC"DkP.څ]hݺu'(YTOe EJt]]ju2ͼp;s9Gf)f > ;s̜陛s֛:e!XBX.ŋ 838S,'_L \WFA`llLI):aE6LDf֏R ^6z*h6B@)"BZB03maJ|߇Vm03A)URFm2TX zQaiH$pss_nooWlll|czzZR)V@D8==5O\ą\.W"|V#I@V#"ʷQ)5;44duhǑH$mlfr]ׇJb*I&Ru]0T:iYBݍk^/,,mJ) !.1 mIENDB`Plinth-0.8.1/doc/images/star_on.png000066400000000000000000000013661266051671100171560ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  tIME 6)vIDAT8˕KHaq40q2("V].v]t B,Q6-զ]v t!6B4LiQT +hfr~(EIy{9{ "C',D:=+мeGڮ9H8ɀdDsX6v8v9">oƉe}؈؇E[׈ٸ#5`|kf$H?Y'O b>1?ڔ5`\8M=OjוAҘW:4Hd?ܩ{xsX94ofkݽs7 |o0;ubw  ǎ &Yzh]ԝK:lQ@ .gCX;jwy|DNJ\&׳g@FgsGCUl֪@3\Us7eKosQY2H>n nOJ#$_w5.[BB% .O^YKX-hΣ6˒HX$=3IENDB`Plinth-0.8.1/doc/images/tor.png000066400000000000000000002002531266051671100163110ustar00rootroot00000000000000PNG  IHDR' IDATxgtSg.|J93̜3k2s֌mY1l)+!M !!RHBB)$$Bbܻq4)dr$ْ,cco-.[K~D TDDDDD!LC$"""""M dRzM'ib'kj}5W ;{ @`a9g`&DiDzh@HQ[-| jw.?}^SIDDDDDjwN;0l] ݀ؽ1ԥWk¤1qo#v7 rWw6 X3ĻfKOߡx⭽cὥJtzE] ʞFĽ؄/ neX9 }#b6ŔZb&mDFL0hOml\FǓ4=܁*| HuMzLـݍӈ}M S_nUwt]Wr 5!n_bOة }{ w.1 “b\p DDDDDb-("`{-Z\Ո=}M .K`ҞZĽ؄݊"v#Eu^ ?w,ǘؿ%kH1xۘ] ]1z5ܣ#G"D')6&""y!f"dI$HhV4z."sCC³Zu*Chqw(|F쪁s[ڻ"t׈݈ ABTXmuZ ݺoR272ۻZ~DDxB_d SvBk {y𶱀]`*6 ҁ_=|C"`qo퇔lx""@`%FA. =o>>5Z.G؎zDl@ { ;n/WX m5)Ôgt_WoXIDT ,xDMJyY`  ) zgr9+9~RfW4l 5dzs#]ig'""yc'yV><o (O/CVsG6%ắaQ\/<޻tF}k1!4}d! \=~ ;>\!x¯w[^C2}? lس7Pq~!~f-ł1$Dd4,>gFz2=O6Quf}2c= m൥[^.F=?/t[SV6.HAv|Hu1Ya&tGE`r*Y!GÑpTqm\9,tkⳟDpv/ !o,*#~ 'F.""Ym? ږ7Ыm=|4fj,:->/xW+ݜOZB >_KbDń v#!E^ _ -#>]<.~extB9X DYK0?1^q> {/D'bɲ\H$e:"CF!B1ub,˕@ S"ͺvEbRdI Q\ql,ʃD̅3!iXOFDIZ$o8 Lrj}Έ\If"lF,Q85B|3#_VxyF:oLoC BkS7ꈿ1t]9>-f.CTq_;7 DDFboV=P¨lo︄xEKy{Q8E[sFs4 v`g>E.Ž#v4(|=BO~ kvpdv!".pq6y8=[k7,̃D3= s*ʞPGe m> Q)fLä8$&g //ghVqX,@"Yy 11! $ňs$^2\`ľ7ԉqv4dr&ODɔ@ }@M+C"Yx D=K>/_"iu;L-pI :npW ` ?LKfl ͥxe7,ir;s{cmr"9z r[qH"T9/Ĺ(*x7B.o;!wWz?܂['q4g,ݧ }D ! #$' C:~ $y˱hf$¡Co~H^13 ̋ Bp|2.DL̏q1Ah톰 #$oX!%;a~ј$ebEV8U.$7KBzMDl13Exh/ڶE'"2#B؇=9gƂaF%k{@1Of@"A™ AjM oaH[ $is010 t9~Z>/m߂ԭ| '=c6fʓt>YiYw!>g-xD6N.:N@lZ wA@^!\k_ =9k]bo"g2.!^h Ѻڢxηk1| O"P<{nSSt;#ه7+NWx[P Eo ȶo/K+Tγ)!ȓdcVzkL" 񃍮 m7G֗OmL3 8o$ Ң QHP-CG_ڇIIK7&% Su&$@`銘4 $%< Mt#lCF1x통Cuϔ3w}!7p_ݱV?2ρxs$„e%Y_!>_/c+[}X9}gO}-DxO8f[@`M|<ĆEb󟠥0{-q=XIK u%Q_qqS,pKz MAh GsvXC!ur+ǧ#'m ݝi9Hw#kd+ |'z_ V!l<)Ó}Ț/'Q&f!=Cd퇔< 2g*Y1 ˲fj#q3̚o!E)"2B $ y.6k{1<ٙsgGgEcv HRg=t0pIÊy 򄫳 H^ ?#xJe3nή ̌`55%\v-Db[ Xz^nb`UE)9T}GhNB(.)✡B{k/l>_SDdVlS|^22p!^S1Cs[+\?a[o#Fbf=5{W=l!~$}^XybƲL$_r Gx,Uak>Ncznbg50dG^$5y;iR6|G[.GP:V |xmsګM#&#&,d8/;&V9C=>b.>#nv:nS6dٍmF d7\:WQR>v?}=S7?{O29]f${M>B- T=f|ilay>;Hsq<+Θ[Y:#ӸW*z3zN/lގwg9)緄x8m-Kn| c]_wHz]_#i__r:}B־l k|6ch s{y}h95 s`X:n˶5EDfChФe7%j=|>$g 8;~M=_>xy!# ґ" i>֕!T/}~+߅_[RX^wc7 >#l$Awym{}?0υppR>ԟH7THN Mojx*OA 3ކZɇʯ)8MFm^ _ew~5@ a`! $O*uӔ={kz⳵zg8!^:?/:n֞ H!+KIVlfkOPcs 6uz81 Ȳb}?c{kk| !yloxoX#l;h:^ba:ik }W:Nat|h>Ot y-;5.X:`M$r:m>Tl6i _?Ѡ= }{3!suUOگnX9 @K`D^'^l"KIH}oTA1o%Ԍ rU&l4ԥ'~2ة9ј_giX>q~CӡkO3zS?a[o%FBx|g}^m&vP#kG;&.n}S<6WCRğ>5p[zO u4m[>^ \MUpP]pY $6j a7 iX/z]/̾/kTןG:^X9!#4t"tK@{X L@̋ Dp fOSDp l2l*hk[Xx;` Kp9շ>iY&]l!ɸx۹;Ἦnm]aC-̻^+ᜲ5{nV Upx+amxE)Di \"$'#)TOĤ8L {|+$e|&b6ӏ&gbXƪLD\|"f~XX;N$G,Hr( l fSQ;<ߴǟ@GrJ8#_w`eҊ/Nec?Ź?}Umar7"56ޘww5o b u:`l3T*@bǔך_-%oV|Sx1Uy-M8^8ӊ~.6)(>u~k'~p=Tg˘jwA t<9+;rE'+$7 C;rd\ $yY{o7iǠD<<I2LBWN/`sc u4| LH^d ,!X%b6WH ZQqK ?'_~a'"}Dd%iu)QM^ѳh H4e*=C\y pü+G_,I.2n?<|^GJf.$ r3R;wcXOM%YmP:N)!Ow~n~/|-_" k=Rv}-Xz=~v{>p ![އ|oOp\[ wAEMUpx/cs5\3߁go].T u8 ǵ]pg IDATk!^ @h㎰,Tf-E(:Z>|^NZ%_ҳg.Ar| tNNs_As/A=k&S[YLzv+üJ8Sz^zn8W2N.V;{vjnH2 z&FǓ4{H}6o+۰[SVR< qoV1^n\fmX-9HCߡx& , ISe^u6ʞyշa5g}8r&جW߁KFfB`a=OKߡx&xEߡx&x2)FǓ41ēIw55>DDDDD!LC$"""""M dRzM'ib'kj}DDDDD!LC$"""""M;$nbX,bX,(xbX,bY,bX,2bgX,bX,H!bX,bX,#)xbX,bY,bX,2bgX,bX,H!bX,bX,#)xbX,bY,bX,2bgX,bX,H!bX,bX,#)xbX,bY,bX,2bgX,bX,H!bX,bX,#)xbX,bY,bX,2u>Z[[Q__:"chmm/2m흈hwQ---hkkC{{;6ug{'""""_c~T!@ww7zzzhuwwމX~UGGGR)d2r91LT׏N?_WWn~'zd2QWW7NDDDDc~!G;=ij=NOd$≈C<a'""""2n Df!ȸ1x"""""OdF≈C<a'""""2n Df!ȸ1x"""""OdF≈C<a'""""2n Df!ȸ1x"""""OdF≈C<a'""""2n&kZ !$cip ;91_҅IzaDc!5-]  {"KϽ[aP ސ;1ST7NDDDDdnL.;p= x"#`H ސ;a'2 x"#`H ސ;a'2 x"#`H ސ;a'2 x"#`H ސ;a'2 x"#`H ސ;atG__A;2 x-B /!x ^-ivͯ~уezud^ R{'""""27 )ŧQ S;ȼRM1C|?Eװ/Cnۘ\PO`^n}C?rD2lGS DDDDD&^G _%r@^]:‹ Q ESu1̗!5C<0īl~h|'<ӂޭ^)EH]}o¥z\!Cj)x""""a/AH~)f}փ_\H:%Cå/Âzͷ_KM >hC«|Y_3_Be(?sx1oH흈0 $Iv'hkҢXn/EZTMLT-*6*BG˰'[+m %Z7/#B%/Cjމ C֋XF1qz^Dc!w; R{jߍ[fĽ9ĺ:cԾ~!>lY?垈h\iV ֓qXTgUioh}HÅxi-ޝ箜.F껵>)jޙr})^:bչv2ODcWsu}U [{8RA숈a'2# jھ@jz2>hi]}$睉/?DDDDdC0O>8=D~DDDDDOdF;UOtbj}!ܠ3OdFHkq,Y5]lW^jvGQ3v DDDDp1xuݸ[M ?h܋}JE}≈h1xM᫚g 7_O=ڜ2qtDCDDDD4VC|=zoD} K\xbX2Ż/A5zF8DDDDDc!Ȍ0Bv7JUCCDDDD4Cкj[۞©P. iXYx!C<1ODDDDdC<qc'2# DDDDDƍ!Ȍ07x"3ODDDDdC<qc'2# DDDDDƍ!^J?BE7]$.≈CJg32tC^H≈C V>~ K_}ױ|e_!1īgG9yeH=قFPXub۾RrU+>&Ktv~!x""""" -ۦ} Q]փ3XW6NaxdeĿՀjos 07x~=QeHQϮ 4!RGVe]85L+,AHE,?t!vK1twj@LbGhlFfuwϿqw!b/WӁ_AWC]|@rn_W~KuXo≈C@.'.\GNaU]B́J|r62r~2"TJL/(EHCyG3$XsSƂL}]޽r Zkm$U۶ _z&\ױR+n4tJ5V,AH>C!b'""""2n *{{䥡o1WCXj=FY5H*2>{SV]” |ա8 S&,SmwW V츆#xlֆ-{.b-)djo}S1"x"""""Veh]ev%޾ىۗn j{V;]eXZ|_)tr<{QKh9fю/!&4il`-]Nތ7Jp6cv(8hnFΎ^Ǻ׈tNo≈CJg323HCw^DhB|W6ݷP<- ^rw^&.^C˕(~ =Åx\wQo`kȿͲ=ڶMyg}묹p[^ۚ=w`*{ C<qcWlFA]ݮ/b^O:pJqqO9O[EbK.uX%v QkCք{J1]wW[q[?oCeٶ6Qq5(>tAy 76hk5Xbnиc'""""2n *5+F!/b v:ٽ&m/Aʠ}^,Arm&rHב!{}׆Ѿm2ܽtv"$ ^n5jN)_hq?o DDDDDƍ!^ )G!ȸ1x"""""OdF≈C<a'""""2n Df!ȸ1x"""""OdF≈C<a'""""2n Df!ȸ1x"""""OdFL;wQl,œ)/A#]8~R8DDDDDOdFL6K[q~jj≈Ȉ0 mg/H4GkC] "D|ۦ6!C<1z =DrEuUC.̫[j?t7ݭȚ9a~DDx勛}벾;k K0cb DM}_U2h0 װc"0-zCk]>W1s"wNmVciNH/@q|fy(?qSNh|0 r)_62}8fn+ǿVKKT"Q<}\6Ҷ8j"֣C8&g:pt?dѢ9X,x"3b!^ WkAKY9|>kTC^Eej3k(^!u>/˻0 vS艈C<1/==RV~G2A8q?*զk ֲ{8Q̩FXON򻛱0ֻ6#,)E'*]@DDDD&!Ȍ\o|D؀k=ۯbHR>=o v< )RS=!~(Æ "DH;Ruf\~o=Uđ*!(ǦH5rrzO=NE@ƫ*U듡{W? &d1S r mW!+=3~F4J- Rɳ'Rݸf|{MB”Xx+Cܧ+K_]Z'\ރ2&qbc8m?甧+ A|R=h|0 {wppZ2']Sfca>[=oݸz H$Gx&>Tni}PisW p1=G}- m"q< 'C.kG';@bIu ]׃ 3 a~p Bd}?01SDDDDD!Ȍ07x9\x8 x"""""ٌxk8ݩI x"""""C|GuKt ʐyݪU~u~5cjm>x"""""P{⥸nṧ^-Ezܕ*!Wvf6a Wvun5(\ـƒex2~qODDDDdUx@)ި] 7QZye| uwYKb?`va_4j0Gq}wW DDDDDƍ!^eאָA2d|^̥nH:~jQ)U]օw#:d uXS{טGC<qcW=%^d>oIJ+xCyڽ&@> ҆]cMh8;+x"""""2!^փ3^@H~ B_Ƶ~_t ;qpRv[.CUUĽр!l+Gjk2]yȬ07x~xD|%рKE;7\ؗkp[q* ݐUTy Cf!ȸ1 ũê^#m IDAT ڣ mks%s2]@le+L.ܲFd]XT|rxz DDDDDƍ!~?d+qi>>Z}(W &'Ɖey%r-ƧoaKyu]O!ȸ1 ũ7JwAqQOʿJeL;ъ~׼7^ ȼ=^>O07(Wy52A DDDDDƍ!Ȍ07x"3ODDDDdC<qc'2# DDDDDƍ!Ȍ{o""DE֓H LVoV""""\OdV=KVE***Pqu/(_qudΛ8~8níi[r9Ct]+X^s"›!h<1x5ϑտ4|zO4:/WgK-jYNc݃mc!Ӗ!qSa6c~C<xb'2#!O" =C޿u^,}uYoO.;8 DF¹Nc`yy;b} ჭg$ӵ[[ѱX^s MdO<Ѹb'2#?>ӣ nb`}!/ -bK&n.EhYXɑoq:Äg]v`yQ}86']>^!?Y9*TWk≈C<1/+FG?ݣx"\etk8lLA9#~DZS.` f#Kp,7}yqu@ JEEDJk[ԢbS[y VijEqZQYD"I $3"QB \se2323ɕgҍN`E|Dx,fŅsX7n~&"""  D!d&x+P14yX8iPF"""OBilL޷p~זb,{DDDD4)BC<<eۈ%[Ra)/Q(a' ! DDDDD!(07xODDDDBC<Qpc' ! DDDDD!(07xODDDDBC<Qpc' ! DDDDD!(07xODDDDBC<Qpcw6dľ3-x4d<4C^/̈́.iO DDDDD!ޙŀ#MmQ`3jqkWݍ::MV Z4(7≈C7!^F˃FGD!b@벅[ځ*`nh<يkbAI/z\w 1Ճa'"""" n ބF M&6~shkh_밸z91fǽh pԯǦ:|Avlŧ v~{zm 07xgo3Ļ ֞N?CH:ׇ>6jtn]Z ODDDDMr X^fh5C㽋xjՂJ- .vKmB}9*̯fCuXtހ~7u1v`:_?4HlT7G^߆Ј;mVEu٭f|w Ahc'"""" n  &Z0pB=޹Ї^kсv J 񿓵XqQAX^#܎жQp\6z,<Їi;a >y;C&guX~/%Tv/V lQ90G_8x""""9y.vZMFܩı+/,/j'h^/jYځfe'8Jz3%V}߂wHnLu /cou&<އoao{ M/fMy*'K\R #걷E !(1;{[O;kQnvrt5eVos?|HnMF5??4SR!#WTMUyߴJ" iȂf8֊Zw ~`{VyOtXẕއ9x""""l*C yG=ً#) tWߓux,p-f}WhnE/uXRf2^HܨGZ>]]L(8yFh{Q]ی垆\v7> FH qX-"c]C<Qpcw6!^Њj+iƟ-mIm6}_COz/ZntA_}N]fKKk& xnKdP5PkBsǧZvߌ/7X+o#nNC<Qpcw"22^>z]xz!(1SВ,&|w6≈C<6ún?!X,! D*ډ[aw~@%Ĝx,N[-G0#"""b D!!!#Ɉu+ks{'50{}0&M D!!k'+O/N !aKhگtpz*D !{S^`j_"""OBݒ^ᏵBaՉtل%B ltNLJIN%"""@ D!!k-/p b&x}lW o~q4RމiPnWcG""" OBoCOoTEY]\} ]Os9kH!"-ƚGpkAlMK! UP܂ 0{x "?鬞_7 PV^Q_ 2qLj;cz݃om{Sڏ2̺(ڹMHڜø5yX_u!"""D D!!>? 9`oډXFǎ"TNS#B3,n둁AHĆߢD2D!fagƻ4R>,FxUL.l940̾9[pOMks1V!V%N0+*ҩlyԅh1xC Ͳp,~$)ԍg,Bbwh6d֡FG\S/ܔW@D~hO۟*<4ӎ:.nrz2}l/@qC4}Ane4g~]BDᓛҳx}5s?JWʾ]hoCoĹ] m<M"x7^§ 0 kPwK;Pe}u議} mv Ce- T ` Q{:^}|!nsjH_ wY:Ql0MJѹarS_؇;:K&{e(矔b6W&oG/QyyUGd9ƨ~7+6LZ@9qu!"""D $ ]3=n1 3DK]CsZťO%tنN^Q,67ӉiP3=Gz)p]d*WǾwE:&UB@$@ŵ)^x7GقpvKBM#~'~uX ˙v#qoYu\M#y ٯoct ZʏЁ[XBDDD4]X:ۑ?z֞N?ÃI(sd wAཽޟCS|43?% Dμt_^[sKwXўFG9|;=My㲛')6Pvl76$ȭ}s{uEQMr}Bw*~>}Ĕz`g}ٗoc $bABce>z<4#X2tcc/vXk0H#T?PJAC:zie.7!p 㣫= aPgHr__y=M0~EFgxk ƛ \@ j𰮾+0e!7x×9J8nGXq :'7=m׌yg _p21y?}du!"""D $ ܈ 2&Pw.hȄ,Gu jje?MfYРN"u+naљvTD>;A on6!i ~| r~c6 mR?1M Wa\Ƣ-R! b>CU p"C.>cB~j[X)D7\x! ج;iv}hTBdO㝍.DDDD!ِNC;=xlvN݌VGh7wvbaGqhֆta(qk'auW[/ 8J^B+oAd@S!oT!"vw!jȆ! J]dK^th0 oysF=~$ ᵁjM"Cw9q0|7 Z`k]&C3ۏjQ10o_n`i֟jgb@7F^ǎ4ckw9E@,Ͷ^B+ ^l99  A5й6dq,#u,Г <TpoFLpE{qGϬl! VA':1} zo# D z *]#8fQiu!"""D Ά{͕x_!~Ȅǟ`o %_/3dBt^;+_c|UpyhdCf(7OxqE-7জ.~WCC| g^G'p"aP;=edCB Cgv+= cM+ȉq-2;~(GUc3LCf蛫qP;ʙ}wR Ͼ =mmYB!e;_SdUHVܽ5ۗCtCc$pb lo!nۗ̆j 4|v#F5pv$E"X d$e!)WZfj D!dxki'`ϵdE=<~D&|MVߙ\:Kv&6Q]fZLvgR"Bem^vB*Ҋq Y4V&xώ.Cܦh4;"zM[oIR;Jp!4G\1pИP5/AÈY1p$r`{/y;I u9HKQPehYd;_Q dXvO)?@8g lߐ剑K:֣H: _L^d`sޟzCZ|&XAJ~Ub|-Fm\^̪ORŐ@1Q"<:%ԉ1C4^BشT0!ߴ#8 \̼К<,fT%BUc `]i$ot-;-}&է^q\{jYiIZG.B&^DlgM9ɿz<y^,kϼtey&9=zȽy|w#aI}> gԆ'Oe?!ґ IDAT۟x K=mh; =|fBȌ CZ!@#,,̚:%7V +\@v4:*fhx"}×LE"laWH](ώATA\\áHf$n;g%[v3$n}T#OONA  1)o+i:ߏŸS0 UXcaaV3{)8\?h۔pg1@|(Ϸ{n}c%zK eHg89)#ڷ޶k=ܱ}HY}-6/۝BL CH[M+0]eȚLQ+5'bkF: {a ~7*N!52 ?R_e8s?j®x5v֣Ǫ@-0 n+%*5:PAhBEtIP-AA:jI~l׵ Kz t?!1#3̏v#>f+ndρ[ x^AIH05Tk=_`,IڃZj]}v' Sǃ}lӯҟnuĻWzљ U&ʜ_}/bgfc.X$nyǺG໦swxgSHr[XsDbnsk{ ]/evW$>=RO|<yŅuqqpml[K=>{ec{k=ܱ,% OBf^&?ӷZ9FmDkm@y˽sX|s.ĺ+Me֍~eU_bd̍CZa\j臤V;;\yȹe;?ܮ25ثEέ(˚:Tfba /Ekupz/;+"c}:T~x:Ȍ7yTyPW-뿏{_tWOõQٟuGWzqpwdmt_mC(p*]ZѮ/U(_X9-|nsk{]e~Ѽ,\^M>7sz 4PB|ppEK$BE }{ .FO$M|q3 ~޿ܞx|elOBf\7aXhd^ی9aqͶZ[=Uϙ}~7ڿ_ez+V^փj-% Ugw@ Ƹ-E nÕ/@M.|tܢ+[QfBX;lO/mC*[_KN_.ĮM0=+[8I!w921Pl\(<7~}6axs2Ï}k| >ok9O+u\lx_ UIh}|73=ދ6|qzK$5y?׸ϙpRQ3WaW˕xo{;7(wySP ~ضhq2}.nt[=)1$ZýmxY2K[`Gߏc|tx>vk t^;xx0BK[>jwH;淰 F ZȸptQ{8>IgŢHRZpg>[wC@S$,y:-Jr ?xhy "@yz3j #zM!jtx 3"vG}x7m_r֖b8!ycKQ2 1Q\\FAz׾د23P}وNk*윧 4v[ >|? _uKw)l ئ lE7`0V`iҎ=Š6SeuVٿgaK5Z4U)Xmu,O9m9ȵ?ƽ΀2ڌt7{Zɏ =9=z* $C F/p]TWSϊHDOy}f!!?čӟc,j:y?cؿ={x=ݴ?#ν {11M+a+܇swWOy+"!wN[+ ,nhv*GyX[~?dCd#!@d{(A3oKQ`%A !V'/C^/8g-s8-Fa8zݮr lUeؑAB^k B{S$G Ů85sR؇HzYljBk`=O n v?޷9KyX3?BD!)c'Sg;/y>:ߏkG -'O-Н^UQe(25trmfpw}ܵyZKdφKS_;}z$ozr?̣b:W;<8tRűd >9p̓.C}R1?Bj|@lr&>?]!ˌ!;s|cOazyXM!qZNU5|(& X9O4_߉4o4a2 >hHD"2L&FL ZdHOBy@!k ~yo~ M}Y4; !bC===0͐$/HDc"If3zzz:31S(1?ɑ1HS_&i2o]!Jí:׹&OcnmM ukn::";nN?E'w-V_.fOv}ϲOqHc]V]RcȝضPhpz_Xo*'~A@D!!'N6M!hR l 5ba,U6* C%bs0UPe䣼8ʬ@Q̨+XU(AWW(,ٯ 'm?f{P̃ACc1̊k݉&:,8r5~mXV2Px]I"q67(ClAϐVhu6ߨMM49"܏FS'wРkƒ9HLCx+ "vu.=%{g6x`2$v hΏ}X6J0|ɏ.r[QvK[gu>qKMġD9q4iD4"9* ~JCbv'&GfF|V2ȾCdjt2f:|_`XV&"GoV)Fᶲ#}רP *5:PAhBEtIU$jl(L ?"Uô뿣S9/I7#f~c*Wcgi=z c=_/Z7djIK v\-JϾþ潽O~wkGs˘W?{G_u>iKM㉈h`ĉӤM~O@ csʲccٱXzXKzew5zG&>E0^Yধkx훫v!ٛpˤ@Q;;\yȹeײ2Oa_v&V,KEt"=|vnک&>FM-1xóط1s#␖s!yi?}>zHm7!gߏi_V1]@r>1,~ڏ0}ϱ; ωI&v&T};æt6ZȺ >zd~%dI!w0իN`-<' {+#Vӕ_ Njo`q >~Dz8*GߎK[gT:wci|< 8qm\ٟvG|c3kh?rT._}1O(Kzx1ُcw,7'"!'N6/H]U@Yq Y@8x(p"z@655X0G@QcR4~R2KyX3?d8OC@٩! aen1jTm^ !V'{C}.;O);DI=Fl;+PDVG@bi^\:u7ᶯa٣ȆRGBȤPxϧ{+٤=k# faen1 ~>2+^w5O pR.} nu?t쎡DD40siҦi;4d3tWchpq>yEhzKD9q4iCLeBEP=+-5F`᷵ÿAOD ]"`ωIg.yKCRa<= DD!'N61ϴ/F#z=hzFxqM DDDDD1!EOOa2`6hL&L DDDDD3!h4h4bppV6&jm&x""""٦8z B$2B6Ȳ I088^?~<C<Lyje'zdYj?!hEz1fη۠(2!9z~Yoomaq.V \spz ֿo@VL&N]u}gg< |_Q~T*!\W9=ljSJ/o՝ .Txrڟ9n| DDD!(0ďͱc<ܗ-yYc/'{F̨+XU(AWW(,ٯj;h5$&z@Ќ Hve ڮ~ov+^ qןjH>T#LC>E8`}XB(P.g * jtiX${ lEoYVg:tTO#!Gx8ST>٭F?Ъ_/)nf|mۊ_217n#_3׾~sod7({ų?eJ$<|?>TZ UNYFïrz2å_p0C5܇kǾkQqk[Ƃ!(0ďMII yYěK">X_%I{A\]j,GU"[``lXe8s!Jk5h6IP rY>:L9i{V)F~#}רѶ/I7#n~.&pk[<huU6")%;[c|{ 1Wƪ# X} dEbߗ+.~ӟ/ɟyPE`sx1Oy(ɕ}qk]BDD4 D!!~lz=F-[x_ob@_DfiT(6žɘø62Oa_v&V,KEt"G/U ٛpm7 7ro9Gl7 HoCۯb! 7\Ƕ{eesCQ ˆ|_XY;s+AեnS;1[1݆A%Ͻ@Qpb' ! ch|r!m۶r~_%fI!wYbAC܆;VǞ{:P.ĮM0==oi(Ģ(sn5U{}ޅWmwsͷP6SYGq [! IDAT}5T',Uk-<' ]>_S|[7X|x\)׾P约@DD4F D!! ya.G۫S o DDD3C,݀<==֝!hb' ! DDDDD!(07xODDDDBC<Qpc' ! DDDDD!(07xODDDDBC$3V KgX=F T.# ,Ǖ6|Od#u,̊]0Hro{[p, s\YW?"""!(0ďOee% pQ455^X,Ui_oD!&2 n1FBWPE!5(ۻ }~͈7^1̏Ǘ Z  !;_bODDDOBF#..nT߲eewx=$;qm6žɘøse1?eo^/ٸkV ipN/nuvVRVmzhœ>R yO<!(0ďF!@xx8mۆ>͏[ I![l=h֢_R Puvx T#/~2xm?cU|6+ac1_Fߍ-HkȈp7j!bSzl97\'L? DDDDPx?~0ޯțQ\\FAzi+iUVA<) ;KN\,HJ{LAxG8V:5++)xsqO;Xϓb}??AOx$|vn """BC$dSJ\s5)Eӈӻ?n@QlY,u$Lz|:҆#[,n6PaW(o;]cesۀ*!b֓x4(ͬok>Bfxp ǝh̸C,v4 4ጕ Zx"""I1B' d !|k%iɐx:Ѥa' ! DDDDD!(07$4(d5Ԫ0!R#=;4}'={ZaڋYa#Oyb'"""" n o lx7wBܮ77C940ODDDDgn=':'=Ȋ'8+geLzPh2 AKC<QpcW( @2 7FBzXFW@m5L|B3Ms DDDDD!^QXu8j{F0ݎ(! ROAgu]BoLygODDDD>H$*! ?{ĕ?r@$0@(UDԨiu[REnAT|.Ut,VPQDPE Ʉt{۾?KLHH?<H2gΜsf9{FrOG!B!ōB<σ7P6V }-637 3˽>I' !BY(66ӈ!@D!~=..f\9@!R@t.bԈ=B|,H сP,xB!o I# d}g!Ldg[Ջ%P'ķߦA>|{B!m?.0;="RYKOo6}O!- !y x BQ'$P'ķ(S'B|BxB!B/6la«_F- Gö F BL "xb20F#sϧG-Í[/L/gm'|$[-^}V Y9'!Q׉íXW?s>{{wO"c|w˕F'?1$VGpҥ :(7BWر9 ċ:yG^dĉl)B豽pMȋ_r G]unDYAdI^" D#Z_Z(NulV3XD-RYׁOBoV}i{oϡe7׭}ۗ׆wJ`Ϗ}8Ȃ1P_g`q:}3w.?Ʋb~{mc(B!y @ /_45#<*z2OIHēO?~f9:(CRF'>E[x[q&5e {.@եŃru2YǪ ؗ&P'j!VEFm"YО΀(f+JUxB]{ d:zj1% L{qFݙyLQx+mD y Dk]شxt*ҵE+" m*iNF{t3-y3t\݇'3u+a>]ŭH>iǖW+_Ćw96=F BS "/^A BiZK]x!g+nt굡삷OZ56Z;FĮLC"9 5Ós-#9~/p0;tQLسRd.;ys&DouVTA.}!u^.:܇ 0CxLuZ(J;04Iw,тɩ(jV*U/nǧ`~δC~ +Kqu#xRsJԣX ,^ CuPh v}ǿi#Rg85m?QJ+S`[n K9HQۆFub6fpl:zl/}hzY xT&a뼦/ۀ;1!N۾k}c*nҒ(hK/ Ꚛ{(V c#)y61w<ۭ`->|;{{^҅? NaCZ?^bZԵ ['Nw7_7ß:b;tηB,=ːQk^OlgƓ3k ݊5M=A0E*}u64V@'4m".Ysj' AΩ&?ϡhVÓjgEBoa[(S'B|B`CL$`5tV'e0XBc:-Cm0?8x6\I}ro_v ֟j^U9 ź;l/@#xB|+|m<"5^'Bޖ \3Sq}x"&>Ct] {drl(j_y=jm-0v|tó+~r}K\n7q0A?7B7~r.!uq F!R@t.EByF}O!- 7Uj.y+PHc酖;(ؒXd䔠cl]DAV#kS&$"!0_ l 1A}Pfe2gt^o ˴v_e?/ i F[߆`$BPx yT~h|yhr~Fn'&5ql:t]_|MًjR8<>"& Q \?c:w ~S7ѩ˘+iIF xcHB]SaL][aMjL`Oo`PA s E835ƞ"ș_CADRc, )B!Bf!BJšWn ,$<^mFH>d_g함{a;y+GQڔ H`:Ψ`K "cS!XxsG1EPoȷQ=^<tz~^Ceq;B! <֢eZWZOQ 8@Yt(cYaԽӾ FvHT:QB ,o{ȕ-GaC^w?@偕`l OɖdDŽ!6rUqtZ*r<V#S[αf-Ng 6v/CBn|oɛG9vmi?;!B!'BCb:j]ܷ  ,B+jy|~X4 etmr=m0e#E"]?xDGo~sCHHJ:NEzm^(R.c wQ|  `lN?cyp2;KXh V疢ebuۆƁB!l.ēf =2Q4w~'P'B!dqOH o#'dH[ |[lLB!B! !ގxp]:Q'B!B9r/w{w?!BY(υh\vQ7EġPa^ #t J c)\e I*#SqRhO6.-KyfE}( SX^"'zRn4fXy+F:P'2V[10&Ŗ6Zleq:2ӑ[B!? @SnԔՠ,| M!Yf!C<$. Sb [lYk_at!~B9cY-8'?wB~nJޟ6u{90[qߑKCa \w2#f`,e?;ߖ2d/c]Q e]m||s p$6&v73B!E+BNCW۞QcWARS2=3U e-Zݍ8鎩سWɎXqtk8Ifp^;qGsm}B`NUP$I?e9-xM!jtеՠ0S[vV'OHv02YǪ ؗ&Pxy*\=}7};v qnf<6e҆籙_P20zz#6{v2mx׏#B!V`xS $}x5+po,v;?7wq~OcXYMRG!B\OHplg Wwah|z7K0ݓ!BqD! B!~YQ/^DGݻyI ]WB!(D(/0ؽiQ`,4dUO!B<OHO!BF! B!B!ōBq'CGu6} Ni1wCƒ%E=SꠌVlE>6E`a2d.C:-x:h0Q&alrY%}Bըť| LE%h۶e%EN!BH ć2H QчNԝOxWɎXqtk8Ifp4l[gOχ NkC `uk-\+!#.^nNJo0huUuOk6$=Gax/5ȼn[Ӊsq0QM+V\5hO!|Mzx k@R0I6H uP02YǪ ؗ&P}8|x./A|b>&q8&vr>|YtN|C[2M][ 3H=n\&(Cs8ޯwB!BLp4O}F_՝A(z0a]'P/{6qen:>4O-vVuwt6}7Sˏ {_Bc2+{=ی[]lsG1RJT6٧#>8pMyEz7A)P3[R?#>zeW =kX?#Tʐ2qw6ADAY /'ķ&HN:h;c>6C?CƔ# yT~8ua1 ,Owx !B 2%Y1ajLftKqq;nl2$6.w.k;|9F }k9۽о ެ{lζbWڌCx\oA|3_ wη!J?u9}c\~cqLtOBzfJ*+pqKOm?~xTR]@^Z$Vx3OLĮxBU.w czOjy Z S ,U:Ueu~ B!/^7?Ź!$$ %f!a~q 'ӱ4`un)Z?c]gcs bA׈_,z4[^ :t|>}!~vjPu gv&C t#>O,mdǮC0[YG?bzgF{96yb/}^n1: Ǘmhltn˜9dZHXxou᱉B|h6dp-7v!&$ % ?gP  [չhx، u_a,/Bxl&V`3u [@}~%JY8{6xJб610'm!!$:km޵<3o ,Lexh.þ.S ا'mbb).ٞcyK0,{D 'z| Hyr^9 d Kdq.o.~X1c2* Y)2DIwan}:cxHޯ1kEIXg{Kǽr5W*cz'nǮ]zuuL7E@6σBv fAo\=tϻgsGn8=6x|>@! !ah+bc>Ə'qh+ZBԴkAa5Cw9< yoڳc9WɎXqtk8If ܾotD1[QRcS&c`!#`C`N IDATUP$I?v2vAC[~@O=HK]D?ȗó u~y69.gƣS鐮-ն'xXa?6a$'݁Fg}=+%m꠩B^!cI|C Pui\|b6ޛvP;NC/2YǪ ؗ&PSA˘ǞiF=^5_ )t $zHhtϢ ed};B/6_13^VxYa1>Fv!&ċڠoqDnǽnpy:V9qi:n~f;X1U8+mD W;ah->og}88w LJP'$j1DL-vk>y*O~vx:0qFvg՝A(zcY)2@j-VTA>ʹmRJ7C?A)Qw |IPn{ꄧu<{84)w^kvT#cWe;FyV3zo 2@r*&oq^Tۮ&ƾ? 5(LM铳qM/"{3F6Un+厳7E2ϑwѣeL啇Ǟi;"V ݷ>ākʃ,#[=;󤯝vu4BSF 3:(#Rqkn'"9ubR`z+o*/ҏox~\mPcO*Ocz'ǮvWo1Лe]z|%Ex~$H޻W/hvzf;_(D7C! 7UjGat+nê65 p=:;ln=5/;`SDݽvogyod~utٞ>=Ks)KFl)hVQۮa NiPИUbQP#vdsOeAH}/9Vyڿ<\88v݅c~<&Ͳnp'7ҝ1ĩqPzX=G/hvzϻ;v 9>}B,=ː`f<9ح8^ӄ.^? {yrc"`a)CoPh_>°63]H" ];m9E4W8+ҝz&l#3ɂD@׫[MOlڜǀ=ʖJ0maQp; (kUY(CTR]@^Z$VxdmzjO}ivRgOBzfJ*+p_,T0*޴1c2aIn(K/Z!V#:{zq>ƶc_yss8v]zn6*$qj' AΩIi s]\Ʒ=ބxw  3+xBHxVc*CBcJOG[uKCgޅ{U¾=^!1XBc:-v3Һ}%D`,̝(mv/mMqI_4V~ X!I*;QKCb:j'gAG_W9X%  b ..b҉nu L7 mH1HWagO((i=5L?xHjǞul1HlX;q$Ox788y#ٛ6t3f uPFǙ%  ! M^_\AT,+:S=GҲB{ Q{oAN\"לGݗ ƾ|^H9>,b췱NDz<]ضxB|uA2$g4yk%#Va!~koC3 SP^{69۪G[?/LJEB6^SכB4yO,Sd%I@VE{K6 ~6˭ըť| LE%hV.V3XD-RYd7BWر9 ċ:!ƍmbb).᥅oyK0,{xANF"z3F%hǙ?O!B!>AqUZe)DMfj:ߌG!][mO+ {6aI #! k5v7;8chO!||baH ]&F)v5'˕d};B /_Kzݍ3?E!B!-0CHBk\HߋQ2pgjcJ {drl(j_YHʼn. >>v_q~K8>U"&wŁ@r*&˲ g/g>ʃw]H=+}݇~rb7CmOaG|<5q 76K1:{/Kz݌ޱ}N!BH {ԬUPHↁ$1m3A9 2<9%r\N/=527U̕Lm_,kF\x><{Ks)KFl)hVQۮaM_>k?ع}N!BH /mÜIbMmBUݽˣzx>h;>6C?CErjml>Ą<4q.皐'Ovgc2nolB< GjuU8]z}N?Lw0B ;O`,{Gjī QN{c^f-ޯwB!BL`P5RkѥH86љY">,=ː]H" ]"mRFt:~Q2nhzFRqfjti(SeSدm9-CԺbjtx\HHwO]No_=UXa X(BScY)V0p.Y\aU8S !BY3G+p/ɡ8X ep2;KXh V疢eh^(R.=B&]|e4t~=Μ߇,YX VѴgK !!Eȱ~ԌNVr%hǙ?O!Bx!~!ѳ3 og)|+|;N R^'_(.Զ̵ ܲsVoD c~/8m^?l6[Pfѣ Cݭ}GC>A!~> %~. C$ :t|ht#. ӶSk835gQSVn[nO϶^o} ͅ6c!-ֹ/_n!Bٖ6c>tƜݺ>hgg?dQD :;)c>`CB-zk])Ŀmmž£>  :(7 {ĵ?j C@D*UhQJ[X սK[vk슽,VrTPQ< r$!@2ߋDyq_dfg̬\C<]*[TxX%*1'b=>?+ Nҡ(z;IޤfNa\S+>7DܛT46~YysE2:]2nN ׾'mcGC颷a9x Uu3h*!=n1^SD( 6t{MDZb2P\:@~N) %eGV7S7lِ:r .Gqw0(DgQG*xRL{ц:L%taBeoLN}kd13?٢WPNԥr:/%;c ;Mľ[O5|UwzWOu;5*_i:ؤBNY4m&&ƃqo>`Z\w]45("]>͆,?%7=rwu4{~GkBD}4ByfxAX@K1}=|Ǹ?sNB4>{nܮ ͂H/isE6ś8TkLS6'*(=-CV :Jsdkȏ|G;]XM%H|Z iɡϷ9 QkK;o/]Wٽ4N?"ƽmq4QlLchtrd!ɩ4J[O]^j1Lƽ74uWԵwAu.ԭ.&|v [b)8(NTHN3[D⏹bsn~ZEW\h!15H&@m_Jl*<v'3hM~3bԿ^׋_ 4~BYO3^:Ħnyj{#"^Rkeb(YlwMeA%9vqbc* /͐su7ӘokA3.37烿GAkCgi,zgWPe*nU,]Djx`WFUߤoTEu;ZqfSgm43C]j ?&X'L}ԯ;ۭGenKm.TՅ[bCLEү4= ^S0-u G(rϧ׉l %97o 1C.Zݡ}2iĎ&ޯUI>>E}8AO>[i&!k_(ٹH%=Mv%lIUx?~0j,{#"^ Vs:ݴQh qYSu{sM`U{<&.MxK6 e*:(ivIJ6(:CԶ .njj|o~}G~%y\Eb=xWa]UQ kZ=)x!D|Ku4h=j򗰱zh9qxA#q700xO~6;>VVRxWBw"= (dMC$6?Zaݳg5qxyMp#MGm6{0SD b!xs,խwb:j~-,MeM^R7a`-7YnQ{r ӮLUe7#amط>ڛ T\Nnh@_tFJ[vi*aiڞ/֗`>ࣩuw4;-g:j |~ytv$=fd5B[a4_91SRJ߈#'3*\Sb^+l՟f2½&iU[}pX cK6:ƴ0m3?1N:^w{ٓNI/0g:#m [RSuko¹̴hiS}4q6xk0cD BDlTrN/se]L zݣ%l˺tZ[LZg4}Ng,XRgYiĚpEu\d49n4֡&ʖ6álh85mU׸m1c*"%\nHEKi2ix۞7>["~H`JQrJ/uuw@QVpY^Ll[# tt^Gi^D~r0jE-m PVU.LId:**YDqۥ'eK,G %(}8 ',pQJub\Ct\O]fjIxum|i(?$I1?Za{Gs5~ȷ۰Y,VP"A#O#V%P9[T=)I5((1F.;?m\<+>u\˱uĦӐUuco78a1z.oԡ( Է)4:[:=X:k"^&3G" +Z+'?L&&K:=WA𰶘5K"qj=DDD&köZƐ/Ɨ{7)* 7Ж&7ᠥ$Ey#i?P]^d<=;( _*7Q>>G+tlplFqa'?c8qs}o Yi`y~6bݒ[5?$71Զ IDAT %*O=״hpL6ɬGg/tfPhrç[2e.ߺEAQџ/ǟ4_2 3D Tx;멟3FlAacSbŤ-+f/C4M4]W] a5 tMӛ-z\xZn$wt.9qV&kJ5__p6ptP̖ DD nqj4]OAM%K]_ZoqK5;GE>,g0M">QxU_w|G-F ѿ/ ܸE`oM.?b~uqn$#.3u=!w{_nGax 2Pt))mֶluC!~h4p7&Oj ?~?5|Ö #:!Ϫ- 9~ΚXڬ"]>m] O?dsS翣0;Ekkst[TxX%*15|Q<}*yŧ1OZc6%^ eOn~)'=VAZªJZ]m<\sk  bxG$>8vvK'NZL\Sݿs~ǧJ׏ C mp"4+;R!6n;h8%b ͂H/iD,UEU-CV :JsdkLganDa2K>񟏆Nnfg[rJůG5OXD   ?o7=ȶ􍪨n'^=Y?|{௞(Hg7uDeǤs狱~(YlwMsA%9vo?`e* mf&^L|#N kDҜK3(ǍN N51 yxAAAx"^IJ6(:CԶznڶ >5l۠_8;0~:ǽR?i;6B68G ^Z pvi+;dL'#D  «c}7t1܊9>_o}Ģ 1{ٓNIu/0ȗ sT^)G52QUT۟l+(yyRQ]O9Œױ.fX",~4{f u)VCQ 8\w<1EՎHUPX[_ C%>n~~j-ry#YGtBU[pv>|c%*'Hv.Ld(RS퍡Xx>顩8w{v&ei1%/:AA񂰀">B!*ݸlw8^"ڼNk2Kk`i4GOC G*n9AcGK|`>I<SnPb 8oUQy?+6ώ iH^1W>usE6ś8TkLS6'*(שPW>m,m8@zI#v-%XЩF*$|#NBa!zH78zW(~=ϮaSCU=5&K[:vbGn9yhڋQ.g{]w*AAAD , 楈Ή/;_Rز7ӘLJos||}G- WϠg{9|j{X&[yÎ?Սr6-YSvD1]׆p͐s=F-Geskc*Y5%_w>uILdUK& !"^R댔95!5e7*;V9ˍ挾ϠՆDR~~x8BOz+K)}#^`t4;-g:jɋ.ndi*L_U7rS;v\q?NG䃠u`1>vPQyi*XMf]*.CL'b4~N#ıp}\1k YlK]-AA "^RG(jt~bG_4{YjlqkʩopEg*Yzʶkܶ1UwC '^-&cx>Y/ B8ļqk9NrPvT\CJcdĖI"""C~Hv9{7)<؜OWP< c>:JVgGgGJҡ(1sRy >9,D+(YUTI҇#_TćfcVUd=7<ۀMo`fUEU(Sqw$ AA "~!2[1/E=C w]1ght ""~!2S3- (`sD cns. n\C? ' >""","KF {nudm˯  .O5{5E>[TxX%*1{ͺ4X%j *iXS鶙9]qO%4fߵqorSSe-?otl[!i~j-ry#YGtBU[.Ld(RS] 3Ef9^Q"Eĵ9QՓwߕl^KEяfTdb߭-oRújW~ 'x)N  c~H-'h|l,WuPfv 4bW>2ζ*_"k@SֲeWRjZGi}m1:@~k=ځj*DvJH3|vq~кO7Sv [bwbFxjMܱi?D%+NM%-\;YHrj1M%>R!6n;h8%bz9Q!yO:\oɋ?=@~Sp4&YsM{1lK_fSS(!D  «,ZF%KrTl7^Aa17;5;٢NcƏ ,##uG 5Ǚ^W_ɏͣ7y|Bh sj  c~|Y'~cPS}'d~{<&.>iZw NA xuc}2~,N .'~%y\EbuᬩwдH ^D_/j=t~`;9xAAƼb^Rzjz'ֹVbԛ5toD%vW5fi0u:L¡[l4?>dW3Oɮ+p>v s1i;5pgn=J݉^ebfw,Lʿ;suq:l'هIw>!"~  0?_"^UT-#vɧ*xyo`i;K*˯wq|;K={_< a櫪='T#6gwcs5PUTM3Wzs xp @ "⽄rl(ow_7<>EYDH?@mFdÒmth%R~y&o ZVPMVOz0=GDb?;][{9n3AAɂP}~sT^ۣV<QV/55~@H4ZUUz @*[uXw7jk[,_}JA(nUEuq0Cn׈;yQxj|˂ x/D9X(~X.v#\6jNl1,/ךl3MEO#6:ҳmX5Sg~_R?;h=:ZX`nҕFhH?m& 𒙟">6.n5Wf*u$~P;]ỏORt LD|;K?'t=KG4~!NE+,5t?eftrflF׷(n7LS}GTԱaka>stSgy O݉:Jk5QhļPU\=yk<1m3Ɠ7$Xo[mʯQqTmSykn=5yRQ!ؚB:tsf  /'8Np.bIUE4j$:_f>O3-iS[ySZOII٪1@f2jFf8vvK'NZLxK=?((J:M6ҔHPAzF}a"`y6>qBqְ1qwb yg/SEɁ-d'񚁬Җ~LAa "^ Fi`߆o#)m8noK?].&'V}Qk7c +T5.zH2~ƥ2nzq?=ehg?Oǰn릋p;\RQγ1R!y[5#-\FR9z6{iZIDATAA;3)@p;[IENDB`Plinth-0.8.1/doc/images/virtualbox.png000066400000000000000000001771431266051671100177170ustar00rootroot00000000000000PNG  IHDRf݅bKGD pHYs  tIME4;8x IDATxwxe̜ TADPDDE]ŵ]XV]{Y ׎*ؐ [zrt\W9Ӟ3=(8f֮]Kii)e!B!I4RSSiٲ%ZBQqh4ԩS̤M6K !BQ`0Ȋ+(((x^۶)SгgOB!K@Yf1h \k֬^z$&&RQ"B! dddf5kЦMi!B!<֭['B!B )!B!~0M B!B'U@!B'=B!Bc-B! =B!Bc-B!k!B! R "pi*eb|Q1m1ۃ[1jlR,]t*8&nTۃK܎??O=w%v,,}Bqk!]~[,dنm;4jINc2(xEq[>3{xjJkfvJrLX_wι+*4ws9?>zWXPv%mfT}=Ys+x3iѮG@ Fع٫Tk!Xg֫ObG3 YW&>/;L 7/qطSS"Olg"~@v$T.ʿӯWm|fqP0ce&!lSx eǭO^u`3NӪC)F۶ldg37nqj]{ln{rXr5Oz|k!DT..M:6eb^Yͅۥ* 6frpJl20-~[̥3XjGUsY@]z,/2$f?`z]Z+.&H6cχ%j*#:vWR즭9^u5= 71vlТFV47n-K> ׍Qs{޻ۯ6pllTE-,Tiw*..M#vH؎V瞎yK.8ٶMDyl«|ť<6U,&n?{X !J,{HO6FcGm؋.Z•_Dʗk@+9m8 ivH.=9q:,}>śJiՎgż|4#CH-3fZɔU!uBxL*jlSƇ3Ž w{"dBڴXY"v]߸ʞ+9ڬ#^b>KCj3=,lLsӧi~8Z2ƽw鴎e~cmq;ڳ[uRw`y2g7&(aV)=%6)MZγ3n\ck!%,B\p*]]^]J?_i;s4W>>MIw׬/nG^dҪD=s;‚j~M~ǐɢi 7*Gڮ<-ϿYͲ聆ZaԉMz];H6lL^p!]: ;&9ſݷu]BeP `غn eg 7syg3E>?i:ƴRY? ^ʴ7?bݐ:6q߇~am]AI1 9& yݼA6=;ޝJ9 V&l=suBA^l]뼈FDuwKfql ZO U7^Iw/6{+[9|""$3k QP*vPh2_@ŗq izsJ=~fs!dF/m:`q7e};^K܅s{|ƽ3^a w&:k~u]5{`4:uNŌkUW[g5o]!Jve'o/rO<)nc+_|() r wq唟Xkƞܻݢ噗2EjZ͘ϚpC#_.^̗ )zՌm‰4eŴ={qyK)G˲0LP⯘ibYց B;#WmU!uK ME̳Dޟjuz1l*GLè٢< XzIBu3W=&oxqrDxi=D-4ffx{^]/bjY"4D߽QG[nh(* y ;tf,x3fh8(t4I#/\߲!c}?,\>>rlCұ,ekylZg⨰tj5TO}n| rs?XK5^Z0q:~{g"SeX7v5_0XH7]w&FSճkS0 6'fC{LQh K XoӧUDhs%~ a铺±#u48'M̒oC+CvoI~6J>\?r%ҩb_UWAܸ]mb:$ [6EںzU]5zRTʖ qp%V*IrYƚb !I*(|8(ټ1DSkݶnDKA,)+e]J$ Ǫޞ*I{8Biӯehʸǩ~շx;dT!āPE\ [WIMg|B@~p1 (u_`uBfQw Tw#ف).滧ǣI^bKi7D/]ǤOVWOX7>tHw(+,ğv,g[w]l2mo@^gм{?Zba4:O$X_ۯObC4Қww4kyI,gqUk(i`8)6b[F Ҋo]"~Hk2DF 3KH3e>ι3챽_?ӄaCZ0u|2P'p!k͛n }V3}9!҈S<|Xrc]㮽&iXG\r !b,'WG_ Xi ]dNg0}"n]l{g]jjk9{ //aˆQ8CrKx56ie+3hY;E֠++i:3~]~h܄W.cg[Aikv } uYu,ՌQ̎gd|m{7ٜ2 6L_O rhns=9շD%ʚŋ_r٭{PNkcX8(dԏy_hI˅=(&}Ӳ Ù}ϧ?#Z6\Y~Mw7BFyHצƧ-!AΊ&껯a]>B#UnVdg#~~beĉi&-~j@ux\h8ضikRq >4,"0fչHq(8ؖi` F{=lˆF4/q^W5=LTq{<5Eˈ1vkOW,0F׵{9}EV\^|Z1n%[yzݸx6Z9FuWkOq{'STMCe|pDZ0uݰ##L(j=A8cΟj엮M7d(15 MU0 rՁq_L{/u!8~)JŹ٫ɓDQԉfj`cDBeu/?\A􈉾{`{9}U3JX:P]-]31`µ-، N(ukmZ׼ VfViҨIV!'O4jM:۬cCqv#8 )B.wgu"BB<%gj ͲZҭ@diR!8ZzBiкtZ{(jbB폚:Qi ! c-B!Q B!c-B! =B!Bc-B! =B!Bc-B! =B!BHB!BB!B!B!`-B!k!B!$X !B!$X !B!Z0NED}&B!pSq._#XLrۙ߇R6^6Z[|uN:u?M䷾d8;_yYiG !B?=gB[n}N|AA}o<:{[>`xbXj;P6x7#aleg8T=LB!/k?JA\$$RLR\EtU\$$%Rpz,yUfmpx$ EGJ[!BuPÍWmӭ2~3(oZEa<]}˭\>y*GhyHne-{԰щy+wMAsIjbUl*nnC6`_)8ۮĦ`#~-.Ʊ'哫 !BH%@ А1=hsl.i:xl^׋N\zm?fy& }sp蒸+ߨxic$7͢Ir_G'忓9usHI׈ ڎLu_?C'q„1u˶c6;*<MK¶W]GFUFY)M׏K"i.x^k̫W%N~B!zX+D72^sT9OʚH/䥐rܥ\JxnOYr<6%\mZ:iCh h+&.m\Zg8嬡J}hZ}-; q7cЙCvwpZMr9m _omZ䃤oY{I[{N!0kBr ) 8Qm[|\cBGAK5~W?:k>v"l>E[JYm0SiDĽ+IW>\(.Z{ik`< r$`B!zT:ƑҜKzݎ6<8RRh?g{c_Z.qqS6w|kݶN!]1 E,]M[0}8oyf-goXK)2Kk@4_#ّ2B8hZ| 뢱iޖCt#<Y2:~lӮ/]ꕛ()X># 'G~BuEr9]n`q/7/x4J\F-N8L ;0J2h۳ Y)űn_!aݗ6|$R!BB!b?IB!k!B!$X !BqdpKK!BHZB!B B!BHB!BB!B!B!`-B!đuW0eYô6MP/p^pz9vnTwݲl0)篿J4Uxر#%?G!B`]WW|]{%B4t m SIMNPx~Z1 L=*eh.O׶%7!1 .4^oz{8 /Y-pGe 4]Bqqqn9S!bh}k^!/lct]iŜ}r?TD8fs~ 8hoSغW q"T "\Oyyy~Y `3u]P9wrG#YmEUmlۮ Զmc6ea&H۶}B!QKB)̿3}ⱯҜruB}n].Ux".LjۊuS_v13'\ņ%s1 py1m`#Uَ#!lfǪ_ s?pkL=* \il.϶߾#+/EL?(znT~{L`4.0oB";yV%[J7pٻd,ѝ 2YӨQUR+{+{ Ðj!B`-nD7)vDb>ʤKrQU N;>g)-hBg~.L }PH%>>ue =Mr.!1y ~ >.\vPGضŖU39ihn4j̙GEAUU4M;| ≣eO2ha0~7Ge+(>`Qz0Cz*"(cc>|9@7i;XfL6w~܀A'بv,t~,\79uep ו֖eaYBqhuybM~ sWӿC: _&XOURz l\@8^+QFmqCO!Z f ,l=e^W`!n e;J4;f2#>>^@I,Ə|+_#Wӣ}?ʭrʔ!%J1QPAע:ǎ3p PW#XUT bvPfԄcD!b"7Mi8MT/&ʀ۱ +rVR@&NUIOC>L|?۷lfLnu{s<ό|?:2ue YQBv t,zv퇪u#! סPٳg* IDATݻw'>>FY`Al,ILLDUU B!=Xm=e}Sfܑd7.7܀-Yc% r JE(pl熜z.!zd>F$%%tX2 .72Va 1t0TۍBs2PQP- cۡ!=Ϡ15n<\~pƶ{l=)2'cvpL"岰mc;:穳>: 1gz8̞=nݺ8DQ~7K47%%EµB!j{+=J]Xhn & \[]-TWfE66D 2AR&PV PZF Ho"KcHp(H(BFm8Nl(:6gW˙PR&a n!/ Y}9[ 8qw$h) X. &XضɱZ.Q/\B!f͚E޽WеkW͛W}kUUq%Kзo_RRR?>ݻwp-89C~A>[mA7ti?ФQg֗8Z4MA|q _сrKPVXouĊzP"`[nڸɄwV3ENIKK;uEVp˳b?Lq  Zc`]^-%̘Oo0i[=\MD&nbKCقI!m`T|^N@`96;*P_C `&ca96:f,\keb&;Uf9ІPݫW/իWUCݰaC:ŵ jܸX=XkeY񤥥UذaC:u$Zq/guD"!{?DHՅI Aā ֺiE97*`ر@]^E;vT 8>OIHpzu,O\<8E`l *6ib:a0}R]Hcc'Lpu!J4@҉i INN> WSj.&lXPjڱ1eÔ!f61l qpp01-S0,YN69wG3~ p3gVTW2\wҥ͊ZQ4M#''̪qmێڨe1o<;8%\ !8[mP}XE$a˶-Ł _,,ޏ6۰iBU:l^e9;oVUQmKcp&߈`𣫸cx#N^880~-H!: EcNS71QBђX--lR,r"JQ- gE.g2Oت vµiDmm̊`mca8`*&j(|Ѻj:^~殡q @uLӬ șD"t]u$ qj\mۖYµ∤:NeYl 4k۲M v#*ƬSouAƶ,"z4(,]ˉe-4Q  Ųp*I(Z#Y\ӤYC<) `2M DlLtEPU3HYp!AK'j ֕h;mUr늳MfZ||1K 0nངB!IC4 ՑHɊ2!0{(LӬ:VnWWDz,%BC#[eWys)ݖ7EUc{c L&Y8wm&^ڡ q 'Qi1 i(mL նcz=d>}md'BZ 6MP`(DD1q( 8.@z8r *P 0ti ֪4\.7j,hSq;ǂ6tH(ee9W8~cd!>>PGϞ=1c:uQFDQ è лaYVZ}1 E6 ˲ϧvz,"8(\=8Z4R,|{!gЌ+6^զ>X(ily199C)syWl )D#``Y`9j 4VB i`z$LO=ߝ,2-l+ʧ4&D*ALn7qqq|q=nv"X[A4  l[YNZ呑Abb!OHHG̙30_~چ֫ZGUAQQ`mے=#ߥrnKvdsX|Jl݊h*ve^ʛbrWuV;^qTXσ2EEE"2~~,gA&0}D g {Lx-T<1 dv\#| ɸnnw'zGqq1`p'Z9w ^o(iD"DaW7&rh8zUC?ңGf͚E^^^UǺ]SmfUСIIIzE!đ zv< 2~z=y jإI_z3ۊ}&)In7UV::g5*n͋7-]7Xh+[(/ GlB:|Gőtµihc˲̇rx@-+VkmYmTMǰ0l1`@3~ "]N$!+n7U?M~6 8l -!`"ض[ap!-Iz յ^z1k,rrrHOOcǗW򢯲H$Bǎ%T !3)3T_vM8:fA:Qs!8Ml@2n{W*UN& } QCwT^+ u򹦏R҈Ífʶ1|4- rfh'M 6MAScHj[sy&_EQߕuAf|y4]v&w͑,JBf0BB! VppGn갆=봴ZuP]9<_eԩj!Qesc׾_>ߎjkX8CCv]Lq~1Ґe_8q k6z{nc4I/kUUIHH &&O~{4`a`DAvSZbÔ8EӖi::6Ozhðk{K0! Ftb8auc-,F0m(x\:jbKpѵ&\G}_Qﰔ q-|{ ,,f?h:k([S#'TgΜYs jܸXykܹj!eRpz}u⍏רu֝`nooO_(N_kڬ Mv#yX[=P$dҲ x M92C/}{&zl37go~e6z^}o 7_ޘ?*^zO歧TqzŌa7K8{9X{^^/~2⨟)mJ@Z(jը:~V0Y9i4@%d4KL$))tKE3I͸S \ZBY~9 .76m e[MRHƋ5U+tf fDmGjnք>=wLDh@(DY?@~G\]#55P(T5^e^!Zqt7/&FƳ`u/DW@t3f(˿ ՎNq+:ߘQjɌFTŗ9׌3Biz~-/XeWBK^+|ttZM(k7FUU` AwQO363Ǎt=+6V>G7\Ν; G;af.4q' [y=)+ ٱp+l ڷi@(' 2 CPkNKKw̘1\u!%T !d]ce3秷'k=Pe!\^b<JP=uU ҂I} F|R2>dRӼUK^zw 2do-BGC۫p詶{;c(ƾgMBUnO^϶eE|\_?&-Zgc`6eiAmэXۄ ǟAthDæW9fl%hݻ񧃵Kuwd& q":?߽ #P$ر~gRt7- DUq8 rݴ7[5(trϼQNa#V°ttӢ4`q?%95@y͛QeBgEv %%>@QE^VƏ}k_!cơaWpmOSP][ӧӦMu$''W=AP(D׮]%T !\]ǺdB}U NkסmgYz7a.hFD'/Jĺ%X+USORtrc;>+PMo5I*֯x?(3;9׋6S+5͠q(/^+ {9,n~(Y{;77#gp3v8V, tZ?9f>}c=TU#k4BD˗/>449g?h3nAZZZUm#4檗?-vd5hAzz:zT@JJ {f撘֭[ t҅D|>_UѲ_BQ]qp gamG -.!̙/}^h8/q;*#Q.&EѬx~u$EXq#nIMZ0t, ;ѽ`yG4]CėoO%n[}sswEf'>猗gݬ x@˾qSuaB%Z>ţ/}̰w+%z"s"~/ĭkuStO"|T[W=r;~ /dl9hJF3Fsy˜O7#S.:w.-qE=p:(fCe<[nf?ڎU1 0ɄDb eYp4K$FcAur:qfW-WSq=a„Ɨ_a]nc=꧙;# 9.Uzu5 W]%m{t"ߌ#44+H]+V0fM2n!$$sn gķ۽\\x&ͿɵUL\'ڷ>t>ƃ΢U oHFN g {C2I@SUvt:r"ɤ|W0|_Zp1yeQnK$PW A{ ιO&kޅ*vVw#{[5e66 ܱ8NVk$]׏QDX˲FFFLX7|a8DZ}mp8 fs' 6AVVܻ_U^vAi!ˍomP[L# "uqTbaqmfYK x0\0IU$ID*w £ZUn%{R "0SDGY,C$b1#kt W 9.G'HrJ8p+ oS{WNu.{w֊*Ad&9oc; IDAT(t=;<ƥZ xveO6V=޽#PV2_p8&_0&{$` >ԎxKS9},<׌Lҥ]| f'cL]Ő~c!5a]7+WOr /5^fVAHw<@ h_6o"g x9L~t;w˭=UxpUHMP<*pdLD O4Piָw3 {GL׎!pmƍO×[@r\'H2uR Ͽt? mqǝ\v&WOŻ=wJ8iQo¢T?bmIePXw v; q!@ R.GddmˢXxD8Ft:w8S Z S 9o$$n>}y5.eco7y9‹ۍgXb @ ']}x'd;'\}mO>j7A:YxZ E@ 衯O@kh{)+q∉,e@pZx}^qzbaZW=ÎaRZ~\PfWksH3C9,x}:9 囕4 R!D'_D}ה1t3*}1@pBKQQB.//'..NT k%<0>.ṥr.}$+{\8dzן^p`x9Ike,Q!d".6!Qp7W%1{,wlw=;O\boFw<]8KlCׯ|1̘fVQؖݙ7I OXhqq`0MQ-8 &5߯̀O%5mVooבSc!q4n<AqSSӈW_6o>2`]jwӜpAEKws=Iͯor`eïscn{6sa ?vo*/JD_ι.VvU髷WUP&0lY﷿aՎRܦz$᫓|oJ~x%IL;ɵG==Yr7Uҭ5< 9dCMlۘOmF(jSW_.6 7BxBoFA ]md[A%.DX\/F Ed׺5lɯĭb%cpD,Y-G~A^G&S'Cl.۰^Q4D[# zz2#-]ncW/xXczú*EeݹꮧdܗyɼtHb'_l b|{R/p `Ul%gT|pk2s?ƕaڹq)h:v~R.[e+3M]M@u dٻu旌yrz)7?ƽI2e;ʿs{s_v3OޑSc+eU3 æs˔$xM^|pte!7UqX0e~ iԁ+ĥ4`,|iC?,%ࢺSWǚ+ރ!0c8z145Ir֬JܤD:lj1qPH*.c0 =8*k @ t!%TnYE|]59aB1b"-aLJg 4yL2/h9 É;ho {ƅ͗ydz?Ƶ$g h KrT$1Q#/ɭKȒj& ($"Vm! ֗lf&RwBtb7"C;IBO[l#.>PՈV;W%e zƆᰇE + 8+M3Z~/~GBX]TGof2èqyYZc-'s2㹥sX7SG2a&7JM:-x Pk?N+]e%9\Ҹ[$(1XgJkt3 XHM@ º:%7Vd.$& Hgl-c0%m&=8c|VeSTJQ6JyQsjn>z'q -Ov0aDW?Sܢ9DIt<(vM]UM_o;8sR,YfpWo_?r +\H 9=uJ4O5.͈բ- ޼h}>^^\~_I d-n]US ihJ~_j\^>/~d 9Tm5$ݿn IEI).M44@ ĺp coM%+}.-1'xʋ%2Я D1rB7f]N `Mcbʢ0-)[/xFۃ>#.?!u"4Ιǣȷ^\L.O3LML{<T".rW˷qi2!{%dsJ{]-gȫwɑd@Rhy/A^YwM{3nh u?5 .a #}Xߺ{K(G-+^a^Fd0֭\Hd!2!PM3a~_3HF@ 'ٳ1cƈ8Fkq 9a!@Xt)bc M .@ ] x(߳OXaU#@儵.v8j sY[ЩsR1:@ t1a-8zr?@ k@ @k@ @k@ @k@ @ @ @ @ @ @ @pb5!@ 8q J8i Xs{I ={yt⬭JaF#vG6Sؿ@еm8zՎR*/4z::37Έr 󨮮fcw`4EE 0NB\N'a%t#<"/tm('/4 ;*wn߆k$f .֫}kp5.j\ hjwfZ]Դ^DFEכ5+b虞AYi Zΐ#eEؿ@pp0xV_ -0v +ի#>?AEs HFIQ>ݒD%tKL0?YXqa pSv'KHHh`4 :k#Z@I6`~S]4CU3ftfΜjH 8ʘ-jkk Ǒ 7eɍ7L?}a] u1,ɓ I)RV9}ۂK+b{ .֩zǽkb V !_ 6|;yQW}L?f$GjF&8Vq`Z wۏ*1B 8ְXNv!&/꺎l:3MA]S#[rN?~oæ+lD 8v0M|^aq`ÇDXށoķw*w[!)h@G@6eշkCFz+ Py+/yuz-na\WޑUA:}c՜s>[ٻ)UKG88gX?cjf\4я(mǘ7O{\O<+8T$lW 8TºnĚ ºn <a$^v?\))cdhuk,+\)yU?IlfmFx9E*ZY=%f)嬑%bdҒ/SH(lNS@lہT%,zKJg`Fea.a[e}gL Z^ 8"?zOe6xo'q8F}PE'Gp: Ho9> .8P邂 A02۔qĜsI%5/ӳwHKFQVӶQzЏ ;<_NCHpH:BX?0Wf;Vow~DLǗx~I9󧙷3==~M wqD:/z7W+XǬ7%w([] 3K>ñЈ9VUخA `F:뽯?2&~PQ [vAi9TWԀ C16RX(R߶xV‡\tD:Xk4p92Z7td!&N1z5d`Kzjtq\HI5qaviFL$v7qQP wzRge(dKx,ܥ wU+;_]bïHUcMd`up]YClQ ;Jn8aMʪ a-1eGsS+Z{_.yٳ /Ck<0܁0o-=ۯޏ{Qڇ{?gy<9!ɽgnx'#:?uC''j鞜hl[X7"Tƈus!?}h-!/BzT@Gd$EA2f!["x O+3ZO µSxvU>_fy`y*l0"sx L* 7x 7qv_ Nآ6G[1HA,=@YaR/<ba&wyUX[֜<]/C?  5J,Shߤ>, Kcgy$/yM6ͪJwF it!]b똲Fo[KGm<2e*iviqmϽOCl\sYS)ۮl|csle3U%g{Xӣ,]Gqz:V]G45bYEE1bPL&Sºɋ,;1xuز ={ZqZmA5]@בdE1 Lf b2lɼOlxr$vbĺUjZb}lXۭ{54E%$Τ4# 4 "bbƼd2㝙^fi2u-L<-s6SV!#mGdZ}A/01ӳ[X5>0 >_V}O4+J SH2@px)k/o:(LX^"?cuDf(_U;(kAQ&$YF0S7G٧_s!g~|6%kxMLܥ:( B?Dw+,w|uM8L hT- CՑF[ zxg~?D9r]A~6o /j)S /e]q;"}p}n <oպBH\bgwb"!^P)Z2.K=qg|ڬ4љ =!}LG&{Lלo)ڦzd렳~Sn]o摟+kz_czL>i0&E w6R@rEr{Bܡ0-.P'Mb?y6NBk!)NQgn7ΰ2}\l h&8 rNMӴO`~ݓ<|Re簥 8|g6C,:Xr',-z,D%o^^#FCH'}=7nz.Yl$'Aa9 /Ώבר:,ѵ U|L+6ס8s}26;IMw}BpeF2 \FWR 2OL$~[Hg/vn\ltoUv =QsWv|58kjRn"21XBCn//Ja0 lC&ŚD)53W`]qG\`Wu[ {sx=DEǶ{3fP4M+F Gb3I݅ ]܆×._j1'n냌XYǺ+H͂D!֢zdSq9'ĒGxX;{ 嵙x<^}Zev]H0l4\.Q??u &ơry衇>"@ 8v/?7y1دM]A+69 *QcCҗHB.n|^3`hvNE 8{AFC˓@p r(]AV+;,_ ra ,;2yѻ})ы++n4gu%Q q8 l6SleN_pM%lnb0?lFe@@4cw |7]_H />(al =y!PP^D ᪭F9Î~orڽ,jaa2[e&HF+tIYaՇD AgkmioνZU`BBw|~4Uu#wOjb4%=X(} l@ۆ ,1N_oWԴŮZv8)W5LL;= C "×ra-ߛC몆Ъj|HaFj]Ր*aTߊtÙ%,cӇ`eV)޹&!v$ ]vqRf7lfcc0+@ hօ ]?`aݚm!٬PC!ԁh֒191ðeΣSooyuۡ{.۫2oM^ƌS> NLnO HtB :4CӰ`Ǐ$AF QK~W+,Iuh׋Lg@l? [b>悩g2jP2YqxTn;LG6ē*hs .\AmD ¹-Z;ZomOX)*!# :Fلƅ,H("{8`x ;g Om%&;XFKqVA#:h)d֘1>Z+ S2 G3eh,ǖ-Yd'VA[\P "ڳk"ZUUTERӴ 'nWe]EQj%ٿ0MFP.l(t Pu5lJ5hC6Q]~_͞$TVIƨ됆C d$ 8rގ_>v QulE.O6g&5n\L޹1?âXS%iUXBcNS@Q*MFqoK(_vnv7ɚi6TUm^/ǃ7M@pZeF#& łbl6c2uqHr{uTY{9"t$MM%TA_׃id EV17yY/!ZŢ۰v$]9q.*)*@1MHLtT]|n/FBvmƈza)ٜEWxUڠ}>^u~ Ep8uD8QsgKFhgpUJf!a<~G"L\:с(3Jn"pzG]A#AX~?^Euu5UUUTUUvĵւIX7jшj%,,0BCCl:k0;!u@F-aK;ņI躊31;T ol VI0L s[H?́PD C8T"È "2ìH: 23ۖKj}:P' N;@i@ _G֨?Gymn#aSWW"y@m #5v<+W?~I!g/y ؒLgàpj#zq:QXX`dM 84J!>>F!Qnv'/֊"Յn-TI7Ɇ>{}jnjaw`2$0e"#&ՓO։i`1mԧ5v-"\A ~?nJIKK#11UUq\btZ 6AGvvvuӿGRT'!$׋ҨȈ=dE< AǏ"{ !k>!3nh46L&F#6_qFC z4S:5-؍A\ɼ=Ɛ&{{rYֻd^~ 1YA|Rcuda-f A6DEZ4"МRvtt$z ('O}TYc1+|rR0[5jfeMFM~HӭɊj ]=i~]2EqX?wJ1 ^tUVCck/,(dmNX[&_?2)ՠ#rf+J]cŬj6Y^p "n  !>>׸@ ߏSRRBYYVsf_x2?ddΜF'eWM ].$%%5Nh`IIITVVr|rNI}/yzJ& $ªuE1#N0A,zo%e^z NÑ͠TJJێ3A6̎ [ydb* jFReptP珽-DnrR*2BkS#,@uz<=3]ȃiG4LIeaվ<=OjR]Z`Q9O[^`1J-n墶Y: eYj !GIXY'"u|陎3{ӆbdn0skT؋E0x ̈́#:h5J_&b&Żj)agX(r'Wa&Z߶J_iE䩽4FҀBz(/cF:Hί"r|)8wTJt޺> b#ºA\7 xGAx<܍:A&/vʵ11doH͸\n Uj7Ыh;Єtd9xhVȘ0Vϯbf l)5NTEpF|9E񃷸 q\5\`M %j|>ylZ *֔x q{=S{i|^ۮĤh~JX+1JkeY_wi#8  K `7@FJGMX6y!L6 %~Ɋb`hl̂r*ٱ#lRkxҨVms8y xt|^to hʖܧ8vG\LpX"8tګ̛9ʇw^~0=Q&D>.DZTn@ 8-w'=º*F{8F{xXxkC `a`C.goh6wqϷly˖텂4u/gq'\uNQ뭋uyAC+ %´8{i؛<&fǑG٬:|snvG㜜a'ݻw]a}X k!uK$^S|3/ dN(cDD4х|:ĹzF-lEpܳbŊv4ꦾbZ 8~¢V]O|Ϧ[|yc`ɵ? A]͗)ڵ9Sx9/n؛ xN7"V'JIft"PejsUsϨdѢ,*Rn/l~KXgylM[&87KnS^~{;xO38.Ҵhՙ8<<EQ7hCBw8^ h9TZ{ÏuuyXgZї̖鏆#A< bLn^ѯʹ_G22f߃a~3؏$Tb;'pEiݘLOpɷ =0X:+c$o ھ}<}J2c߻˻2σnK`wQL\7M`8ǁ䧳?JޑjE6`yh})  -Kſqu̹go;״X{ܼ};Jn(7u}RܢAP PXwv@JH'X`-}g5wM4`-uKuO{-ZE8bxpg\Ǭ)kއpOkfg.-D=Y0B;-D6;7pXqC\:T?cpcL=d>l>c㛛yo8LزccÊZ4i.u}3u ܩ L8 ek [7"4ྜྷ.ꎟLJ^՜|w`(UkubjD]Uضrz*/0fi5GLGk8\ ^_“Qs,{.A1y#a:'2QP-e̗/3J\Gݔt:˚x+CoDЌ 5QFG4H5=lZ57QcGgOS9̎D]K,rj*ݐ!C$6js 7_SR Bt)ɔPѦF!--ڵk9s^zQX1^~&MPbEJ%J2GؒT# 5 vTMg\g˳ؚ^Q@ IDATc˲oTV←P/>>͛7Npp0兇6}ܹ_kh7o]GرcgvFAcy}y"ǹ&WR\T?-QUSQd{" 7lgDyϨ=9kAOAp\s 5ReI͉- )v\#eX5j˺9CO ؉>D/ق -і>Lk23&ޑZ4@alK˰wy1i,cC[_,uڢ⢈ 8A Aokڒ4gLMg=ìF[d~w\_ktU' QjA &lImgotaq4BmגluיIZX H* QfkD$֬-fI~ےD;Cf{7}Ėӂ \vA[mfkۚD, !ȷڑj[k0ۛ&b8 m/l)"ւOHZ$ضhImlkے9#Dn[%ܑrTjy1/"P8e`2ږYQ&!Ԃ \vAl[#EG[+ȭyyNΔlG_(|'R P؅ZđuAɵ3kK#yr-"kOGkAI!tf?Ȳ-mkNmMꇭȵk:+BR9$/ 6 Fb`[,kSCJ*BmpuꈭW-<:wQAZDԂ $nmڴGR?r˟> hHAEN$D*㎴h8[moGZ[$jDng b-ʵaW(%1FIEܜ wU7 ;( QyYђd;9sgȵG4:{@[3JY7mnX^˖N{UXRD|XX N^hdvmCDHv϶r.1KM#Wzp%o>G֑D4DqѸ")=vߦD|vKlBʿ̟5'S 8R}\]ѱu$MyJ&;Pʥ ܆’+-b-$׆].&IX0v4 ᙙqZVB/x~BN$&y#OS>0>yaw2-֪;&-A:[X6c0ab/'IC^G $aDd \PTBP||?,s.]?+.Jº'0}fIhػP2Yڥd˥Zeh[ i7:/ۖ`kE~c; - }(Q‰*.5Q*g.SujRrh[ݙգp/$p5 %ŔyԋU+Ҳ Pj6ِ_P2"(3~$Vvg*yyIʞZNZUK?<Ī!cc"g+/]DtԱJsqժw-ظ" "8iMU%76^ᦖmlgi5Z1?GÚm\Q0;X 85Duݻh1OT͉ߵ* qgڤa$e/F|K)7MMe`VDDv%?'cBIpGF1{\^K̔>Xt<-%;Lp^IDL;}=ioN_vD4q|v &;uC3[k?+KQvE5 ryP?Y?u2m. @Óky{d_Z6$uOK*3dž&MxV"0_˷FҥM$ :?{kyfH1-Huo`i3F]aSYGcm,'Ry%]DW'߮bJ[̀{0݆uC^(u>X^g*_v{'<$<>,c#}5Y? ]yTfK7u7aWQtgVFKgpc bkMk[E>ڞqfg5.<)-b-vRUAJTx9| k{w Q@%6kiVJ֟Rwf PizR67גDoGdP*T >&\yоtlP 駩p;@6Dצ3U *WQQ4~%~``.x}'h|Vt55a {Yw<}ۗqStՒ[RWO^1';Pz DPHM0zoI͊!47I Is \\qUذn۸US`ޙٍ훉J5_K灹clTMi\fJϠ̞+EuIZ2׻2}Xen\}LWS,ڶJ- *ʛ/4dʳ6j߹Ӊc-vO1ڍUnׅdz}dpB0" e)3 j~&au"H5.{78rI!(ܼpC1{DcӼ#}_A[6g|CQp)IAOSRoBh_ڕ͔8L\.k.gBYx7F) t J/mCnn`*_IۉU9v8FxiQucYy| _CtjJF-3Ɨm7Xh&QsQf?<ʙ6Kn)RN59w$iͽ.l熭9ʴE!ڰkXӱ/#ȅrY_buNEbz$|+QB h(Ƅx!HHHo4c/Mg|ʦȊKءk[1x=LtZepuzCD4Dz&$tuŸkNKpMx&<3I_S~ͫbnl\mwŽuNy9pw 4P#7J6}&#\ܯP+MmYp$K܅X[!#lv y-ԶJXW;qnU%~ȨWbxDT"1.5Y8$4pu,N_S\߁_υTt.u`ZV 3>7 mT@#KצĒSFhLtjNA á14 w![6ϫO.aDz{rAn&.q/P)BHv.N㩄*0 u֤DvD\u]?@ZʁUZgf|q7hػ+ɗ[܋0]C-BkJM ʵlՂߑ킌p[116~R@hX 85PB3T(BheJ T%NB@Y*maR| ꎟLJ^՜|w`(Ukubjq9N)CYH֍ C\ `_M*زu3]fXЋ!S4%e2롆bQ8bE;q5?>&qe|ߛ$i]i33R6հ}ߙkl[vuI-˿ :zSO?q,7߾sQA?#:,6~7Q$k&f/y7.dGcͳ_^L;ܛ<Ϭ S6.ch9dk8X9֜bKyΔkk%;/ΐ;祥̝$ښ,k!:VZ2dX (Ֆw6jjq106Ewv - 8VlG߼g&޳^o99 kxv?^m j'SIչt)D6t9/fHysA=y7;y^TZ>hHKK#%%vgΜ{+V<~TV wwwQ*(J\]]qqqKjq̉52̖_~M~jFر0&ƢЖmZѣG)Ys4>>[Npp0兇HNI|ܹs'yY;vLX G8Q&Ht^)f:NnW[.m,|gjPqi7 ?|Om͙[[ښ~c0g԰v_3l0?Z%ԋcIoOX b-vbo>GFB\1orjf.<8xuIy)Mt6)0-Avu: li(V/,elSgHͥ;KΔkZ4#«h>0cmNs|QBrA6& 8 {UxxegHt%,'^aXHQSw-4><1!bhXhܚ*͗ ֌㌗ Ey}3=/ZZi2"ւc Ae>w`ߖ,ղ/Y5ߌ7Q(pΞt*NkO*3_g^na޴atKo[9ۓ蹞r9 P 7ǔׯF@@"6KL=k:#GSFLbNd{Nɝ#m,8FS9t_km^X (׆]cT S'HOO&B +גh2#OssPH.6̛6l*?Xv@xcӛZ6E$DĖ4=Tڔ,;On\RABNT=#:HNetΡ6R̥]i#m(gn=r8OgKmukAxW4nʕu&ժWdrAȖĄΞՍ uΏmiQ%ۜtV,7&;[z ƄزEM>7'צ'H F\l :A8QOO'>$!!b.STeˋʮGCcLF 0lJɮ ʻV}D IѠV{-=Zzp(&E`o3KP7ڰ(g>[RAL[(p`mU{O3nA3X^Xz4sTmvz}8n:O[FipϬK~8ƄL+cg*Rz^ }KNhL=Wyt^>eܱ*,nkApP DRb*Jv bJ%>~d_[RIY?B9]-i\y>h׆烿>kSLʸZʷO.(Т6אL劫B*-HBQؘ޾A||<>>T*e B!&)9woDb-U%rpY]a8{,-7nADװBseyzeGS\p-N鐆x?x;,ﻌ+*lI-|Gj5jڠ+ :Й|y>iP4rQbO*ȅstZ*T Gv Ay1VZXgۢ>zIHG!wq[K垗@Zp-^?z˶Ҝ7\J3-Ҷ)It:\\\ QkkAp\vMժ9r !aU(Q2A //o*W΃_o" 8\3XPnfP+"?f4BѣY0nD,|XuNaUTcYnD柝+Y b5$=F1WSs+E!9ʥqYU"U|FҲYU @{3do׏"U =9b}g9 $Wk/ѠfKo)$h4)6ER7,8!~j6 v]!M$5ObXt#FoFõ6YDGoH1Wr5]kDMԺ;Fa߸ly3Z bф58dc>=H|]J`9n|R1ʇ7|xSΨOy p#[*'_1'iqqh*PQ7J{?s+s|pAw~esϹU:Ntz HF>n5GM4Mjqq"AF)޵xyflQr54%C*:tߎgJo[gU[n̥7 Vq%Mc"_:aqe(8N) z6ŅsT O|ՍBx!]L_{T+V .Kg:x}fb:(xR;E^=< -P$⑹h NvW[1nP枹<%_T'dOӹuKZ@cݔ!q{vܙmXv{=gGfӬۺ1M0ۋۺu"1fYF;Ꭓ94x-_3\'V|,a IDATЕgH-ֲ"T|fL|b(.Wٝ % >b'/7K5RBie{.k߮Zƭ+f "ߪ;t:46+D@O*FL-hsB#9ւ@RUx<,^誼89%//i] OO}z+g- J{ezQvo}E;cEO?<3m?}퍌VNhHi^gmf C WN,?9VZ}$gZVVgN6_ k|]iCh,O'5PJqtF:8˨=*k̆j〼(O\v INJۺNGV/WhE:u`BMRRbxq7yxITҧ|=O/=Ǚm;.CdJ4?E:"GFfMM -*Ҫ/[~n?a<$ZFQQVPmJutJqRArWkh-GQf RBERR2S;_m Zuv*:+]:-Ү]:wEgg9g"??q*Q&%5N[1êyeDϽ0?c,^Kt[3kŋRv̈́_Hʏ^͂A/aJH#kAK * Ri݅N% 8ܗT2&]#M P0(9u|E kFIf圍4ۏՇ1wPcv78X?9J(Ɵ Rgd3$!^_eȧ\:]*Qu?g`L5ħyR['hEVs|[6ƬJDm~{J9"*UTT]V~I8V`|ձs%]N2o|aKO ;we=$<2~J@Y+WHc۵]: _.K~7+BaX rmصբԚOnoƳG59Fn?HҸPr!u2b]#ZS₻$&׶hZ~Ke4JAAMr5N+We]O1xX/"C PIp^zF);MDIfV[޳=TE֡M?˲Q9/lN(KgxIjth}4hDY#b aZjxQX.{~ q:{_&b^*1r&3FuQ*JKh3!Vmf fEp%&3ƢW/J>/GZ'aK1ֈuf3+yF #ZLq?\ (_:*Etx8S{4D41N]f̏z:/Ʋ 6jH gb1g쉬_> G>o9Klw`ˊnFHslO&:m&<>:C^"Qׇ{'Ht/zSD ?x/.b-š .fZ w\4U*r enjcJ(6 :ű |aG,}4ڜe˳a卜mhl?c[Z2``H?ABhhQ g˵aE&d퐖ƵkPTpXtqv/{AT+!JP`Xq5~s18R~F>,zk#Y_0gi4j*~>q _vzq#Tɇx빹 iB=9]3ۗھ9t1>j}Qȩ'v3rtJ/f8ڏ"-TҨAW^#>>*W@TX pv*H: ÷dNKHKOOG=2?T0ڟ6pv^߶ri֢ ]:5z@YOg~$>B2e1s|9o=MgS%7\(шcXh ~Tpſj1ɧYlKFgQVL_0Kan5hKo2uС)<_TT'ʵg*[F-52md[F"avwj;qj*F a2RA2w bB-n%opI~Y{_m۴w]mc;9ˎ):vЩpRSHw-Fht L)i^͋vpmن&:b_PIP0bOŖ]q0tynhq%jht˕K(62>^/4k[ٜ@gIͥwJ0ƶ,-Ikî71XkaІ;oAˋ:;2k?z31.Ƿ,dZZNXuN!,^5C_RSIѸRuc[wyԧg}TΔ\1e#>ł٭i ܦڸM\9:tɹ^zr/u:]8$T7Wk^V͑νFMmHtF4kSA^-7{ sFp'%5=jQ9WV] \ JWn]ʃ4@AhTW}/(֦+2/j)rϸ?Eh)%Zz՞(\([ NGW˹\%m49x$ܿKb`[)L sRTԸj"ͶF͕ν"҂ a6욻yY;ii$$Goujt:γ*=#gt<ү$5Ѣk/7:t:OvB/kF)tgf_J{eOs(i,cս4Fwwr6+GvhQ33uR~Md e`a I -..5%"Ŏ- hAZ Ny{V;ꛂktTLm*܋mG`ٕ7e6n %eFág  }=N+V^,/@mA,ۘ7w;g֊%ڪi)}'X B X/5mPPPl{pF U4\)Kj4v#X[Nc9qTϑw6"-X Bkî 5u///z)nN%5vemz4,Kt AO}/tVT˚SQgSmO:IC,%`/L]Zĩ 'LxdOɍJ  Z/ ܒHJ3eH˵I(lX 8*H!ë 9ȂPDK^e KYao;[Z4AZrm5v !ֆi!SBV[ڑ~ަhAZxSAAk*Zm t8Z\7kAxBySAA(Z諀ڑ, X Bȵa Cn zyVY/+_`}F \I|juPV`[#kAI)Y$UV%OHNI.ek4չkuhiAȵaW W0s-֊H X ӐA(,˝_mJmhiA`d 5MGϚsXʈ 摈 8(׆]Ag 9G68 sX"ւ`' AZ I5-B! \vA Z薡jZv$b-v"QjAq<<&\>!6bz'-zcƭ ի, ^Lf+YzA]qwQ>Y6swmQYW't P$ (!b-vT_/Epxcz ChE `k0gǿbO|E^R9JwөR u9h Ԯ\vӁɬ\ s|п%*|F ~*EtʣT_̇Tqw*L  z6:&mܓ^T6'}&xBZ\#Ҳi${2\ҋ&C˦2K+"";o)(=r<cΒ$ҹz=ygDM 37}&_K..ȫM=͂%4nɨ(tjnlK2l^=g|}ĘIUE0aZ˪on?qڋ43tX:6n Gʕ|5ԇ? >v Vuj44-y2k/_?VʒsT:ʖXÏlח]S^4km ?I鞝 Qt֙Jyt2㹙ORB HCc0;j3Cw?T-)aUeŹ& X B~T>'G=[ظEwLc$גDoGdP*T >&\ PtՒ[RWO^q/a}^NW:T_fwY6wt!NȀkJhJ~F-Y1&R5)zNb-}^BͰW{MOY-H ?RD_D\ mJ,I:%nލDg%_cO'PVr (pդ.u`ZV 3>7 mT@WJ{mo~FN0մzij*αjܺ~FuOӢ.LSaZّlZuCKѦ&Ag=U+p)RxQ)L+11KsR>ZQ;So7`d xSw@ʘu2&ǃ>]ךp8AkA(6:DI-%jТ\V W|,w vF4$.{$ !yfXxPw<>LTCZS#kKa yfEs nQ圽ٷ?&47n_c GU\v$s7fogA u+כP3xl˨3X!s]`yV)1\>6l\ >3,?QZJ7d9Z`P[R߼~ O/OT.;,H{:k Br!:dWh_߲]JJ q5Μ9CN(ViU&;_x쉊t">>;wNpp0兇i}ܹc:;vLr yPzO'AɭjK"Ղ B#b-ʵaW(@q:$\:AD Q….,'^aA yyQUAP7dGOy/9 ڰ+ “ ؉  b-N@  b-Nkî  "ւ ؈Dm@Éx]! w--)ٛJ% IDATXq̓pM! b-E׮V(//^n~*.)R|Mnw%*Q2G2kew֌yxxt '|[1.TM[a_*fݳt/3)DmOB4/ɶ B" UU&mܓaQ]5v|<[Ҩ]_F):G}IS9p:DѴkޕ@}ZG_lN=\U9D j@uMcPD4$T' ~Me`VDDv%ɴ}cǘ/7hfS>&ϴIhID^h4~zUYK#ɴ*kvfLRm5ʊӂ_fxm=wT~Z}4O'"%ROS]l\AkA(rmuLmм=cxUpƹ%3|Sfg<^YrT+W/Ovɑm,Du2DV6US.<2eF:ʖXÏlכrni[6)[<;c 6|(576N%r63[x{>b&LaTPaɬg .9K Tq1˦_v}x˄/OlqNvs [d.__ORggB}HvF58t|܃]*i˴bDm-yS/`oSkZ *zn uX |+zXJITygxOB J}k3s6~YY &,֚VKPx^׽[pנ ~*m[/hgݹm_ކ>-*G*uӑxr+GViMi~<4.Gb>4-bADȒw ĸ]=y?ݽ):)%-t*LMڊVr) F'?M*bTL.r5VOC.hߥxR5Tiiq(N w)IAHgS4}BҮuD?ݑvw΁$Nm=k.TuZPզ_sONtؔK[6=Ng#OE b-ʵa :7%n ͏1DwrY1\0{Qӱ/, 鹥ǯc;vǩ&^c~ȁ? >E_c'[Jk+h8H^6fצhn>9@e`ǓŽMs ?vi:->b]MKvKAZ$NOѩH|Gl\\̟5eq xV'jO# Vۂ[oã(67MvlJB E"GW` VAr*UK!ҳ`f!s]ٙgJN:tom\y/i6K̡xEܱ,ėNaxݫ!cLh~^J]Hfߪd4~~umȲ6ڍhչ:?vd{֡CtAƸѰ`G>}7D r 3ժTSHI}c&6ƙ#rhVԉş=QB #0GəǦRS?Wu>x$ʕX?==Nrr2r /ڵk<űvZj׮M jbXh4,:l߾]="rbDAl:N"Faw}ꎽYE{pE)9t(X "/7biG0U_vg0`0mP"q9T)dv\}lJ]ƽ[s FɄ ##C$[_CFɄhGZ=".R/į%Cɝj[0`{xxၗ$%%bQn7^^^YQQZE1"r;jOOO#**X5H.bccooo<==,\Zy*"j6 F<==1sҰX,D էN"66ҥKc6h4 ".R)3Xgj`ӧUe˖UY̩Sطo)))TX`EnDD{0XVRSSq8;vUVa`"x{{SL*WL%Zf͋"7Qv-(#gQ\-(״.%xۮ{Ih4f퍯/xxx`6)[,IIIvRRRHOO'==]'s$^j닷w 6WI=23h:}˫XM?SOtK{ &)k0 fFՊf#554ӯ/s*r̡(===1Lff3>>>d=e13XZ&R)~$ZB=Ƕ4(zV1uI#}\7Kpp8Y9 ;Pv "d~sWf}uCT "rkȵ c/ b~HІ: `ѓ27n9^geꌌ Vmd2a2IZE꥖H=҉h_M n`#a=[B1[w TtDዷ7dˆҷ kH!w1?8x5ٝKA25S-{#I.AVƘ^\DzASՂA{H5\, #3Tg~IB23ǰVI6sx){XtW?b}bܵh8u'1|O-3Av#1y2S<,H<-{[ L&K#xd̩̒sVǧs<38p]V5\=WK?qn$kDrsW," U?`W#lt,VGv:ZKū54瑗i65HEQ#;G#CxnB |^5[#>>տz׉n,r9!Rp<[F&||<=9h,5}oMfCD9M[98RIBL Ϟ9j0olKu'񛕬'%bX0Is43`4>#In\!DnT2^zE\^j=Ge1zx.dM'2>m3^[Fj#/Ks._S@%Ĭ׺RךMfF"G~9Eb[7 g3e3Xm[PK!+NlNEljTx= ,Ve,XӧZU2un QgHKO㎺`"=vi"T߶e#wӶУ l6~τ6 ^!!⎀]ϵ5m".6>a9uIq86ne*Xx⹾^QDۈFB6'l$lD|\F)s5.?6olY5i`&wP3*HaGC~FT 1ٳ{'q1X`6[Ԁ"ט͖L\l,qRtT+X9\;O9*@hfj,[X~G,Vb?JLL )1$55MJ =N5QA4*ȭ|}/yTc-̐J!Uٻ{'))v5-fמT k†kiN4*ȭZ( " "FDӨ"k=Tc- r5 rs^# mQDn>kDQ-巗:7@DDDZJ)ՒIL'55U *""rL&|*Xy9{&8||}b2Ԙ"""HbR"gϞ!)1˔*TK}~ W W(""r%%%r ϟJ "7ddmf*WF%4ܞHX|Z&E 4j [7E 9ٶe3 7 """RJ ^PܺmT[ r~*T`0ZDDb4zRRe>HEJ~JA.DGN%EDDn@J$:<1 }CJAD W;{&e˫DDDn`eU̩B/G=".O)H\\U̖<{_|EcرX,z$fEJ^ IX||]2gΜàA8p)ŇĄB=YZy,1!K>Ǫ -?{LCb!)1QZ(U d*PMOM9>+ҿY\[DDpL&/RRZ3*HACo=-+47ϓ{0+){$muU*u kә^mjQy/^#̧eܠE  )ɩogWzOR`BIķ6GRBFZS@$""`-r1 uJYUψ4p/wΤo1yWg3BU8QV`-"wǚz~FtTz~Mԣs+."ƻ}<yr6xղ2$Yjq_8ǟ+)P=ـvy_0;ٷvIs ""`-r 7&z 3WΚ'{W\JAR=NK]9'ޞ-?![!Hʜy>Э'Ock~XzW.+^OdqN>o5}Ϟ~5h> !ҦF@kB "Eȝ 2=q8ϟsƚ}8PJ8WUB|:5(CߐirJW?p!41ux=v~pi2U@,w;c깖m6#u;lq)X2\;O p'U] ە`}&B7;7U˼4ov[=/}`fk:y`YAFF?#3}U"`苫Hǁaln4=/݈΍08(Wȵk"R}B L&<]FFvNDDD!OxbG82 @]/y7Oc;)i" !kcXsA l[sxPKx tr=0]|8^Z!`O zV:)Xȝ GԩS|gٓRJQlY/ߪg9u'N`ƌ<#)S@58cxx@pw{;sh=Ua,+`S'ri.͙Į |KÙ~<ھ4Fb݈Ëڕw|-e1{egpdf?Ё ?-%i}oUk[;\;OͲ0mڴ|ݺuXBym\wׁ֢=[ѳ_UċߜCm0?LU0ET "RY i̘19r$_)SnT"֭ ޡu~]ȝ , wquM_B pLԤ8*k[?\;Oo{-|(WqP`||'ޙVT"""לJADе(ikkomq2ծ""rSQqѵ(k6\;O`-""rsk5k/F,qJADDDDZčykF)BDT^S%""r;|IIZjE\YEDD`-Rp<k) RDDDDE"""`-"^jQqõTDDDEn^hvntkJA2γj4-g2z-y;Ӥ'gHYr0ċJ!a>1مH=݊а\On  G z} ּڶi =ǒ@<{'/;>|zvy; mח.ѡu8uQ8亾 s84ßr,+h9HZCٴ\3i $YqWӓBԲEDZ Sד?ݛa޻Mzlװ.z{PIDATDpF0,[s&rVH#{m MﷂW&* twt_S鑬`9{P˜i ƈv4nі6=b8jԴ"kQ wT] 7-֓PaŲ9MYFWG'UazQ|ChU8hկ'%w`;k2\«x==~X>[b-yS崏8d8υ^y1C^W YBמ-S2{zAf4a-R%82V[ѬZy;_/GL Qv=NϘ~Uɻy|XCwm?"h ' 5 O5k2KAzharu%o" mBv XNsL9'0 x![ǩt2eb F *>A9oTByeq*yrEd|z27:%!iSƨH<ȏ_>ouU)NƝydv<]CqEDZ nɺ 8bW#lt,MQB`* 1+Js4R~ԨCD% Wϲ]xwYs.H5{汾نkM$Dęݴә7kһOFg޺$6oAT`A{aٴyΎNO_ݩiߥR eKXy?7gPszc,G5<[d≉Bl$p!&TGV> zm w<:jAlL bHws#c8y~ >&E7jDhZE. ][lv#cϛ:OLe|$f<լGߥSKәhy&?û6|B^^F6 LS^1Q44 ]\_ uߋ߷ Ih6M4!/# 9Yѳ#`ηW33DQ3ƨoҷJqv1gK1Xw§CS }QK0T-fU+Jxx|VDDw(W"۷DUעDAlC=FDD1k1rdİˍXu""" "7vvʍMuyKTF-""ךn^qnXkp'|rBDD XH """`-p<k) RDDDDERDңٹq7ڧ:nDDZ^ 'Cƭrw_&gHYp xp{".,q_=:>ڈ9oߟSSJ͘fX Ey52&7l/d8{l;?Agh|7]ۑkdū/(>Hs 6P-vg_1uI#}uk)@v_@ .d -Z>[3œ9 ܶ@JWvhCJĄj.ڎ؎ӁJ ߗ%=T{n>?`ߤ vT "sâN1l;&4>zKi1a=C϶|F|d)&s#?L`h~-Tv1T7e?ꏇR}6ƫ*^Mꬁ}pS?Bmz$d鷬ޝmzPO8d8CLQܣJY twInB1,_< m.0ol3Z&~%|\gL_`Cdys3jfْ/3-  }оcg:tãu8f oH9ʒc8b78C^W YBמ-S2{zAf^Aа^.2rYG@F|.`dI*ToD.u9XE&'GmC~ϒQ,?kw`Ę׭a;={٫2_|4uG]OۙJֲ!U(lūTKU-ianyzUۀ΄y_:mKڶ B(_6{w#$pYS\jcw$ir]8.YFWG'UaTA.)".r άL]:~\<ujw5&8T5,O`ðn,CeSl`r ::x8\AkaMA(a[E|np=rcYk5L=♙X4X` ?Not\Wrehf~~H@Ä'Yt9lRϰe>9Kxcܷ;0xb&Rj K zgqYgNwVN:&"k0[&?3y<ȏC3L~wmPm@P5Oa;xDyӠHFVnԢCl'[0<]7=;fP1뵮ڐrI/s?H r f5e3Xm[#'g`*^}'3O3Ob/[!axm̉/u{gRv C֕奜`5r:?YFͣ=Ge1zxrpsYѸ+\36Ig{),B'2>m3^[Fj#OEč,XӧZB2un Nl1SzM5(a=C/Ss<@RrW$22?}v#`_˞k9(X< FDDDEnqn@t׆H!õTn!~-ǖj7XH"""`-*k7k穈(XHZDDDE+IfݜO׾[8uΈȍ.8ϪawxзɸВKN!f]BIÌ1+np96]aᄆ2yt83$,Pϸr܎x!"R@nOE=ܵ?oѼ{#LcW\gnլOS-1dFx:ѳϱpO>1QUKbq$u g`tǛ$o~hXtݐ1I {gmg0hQޟ  +cUDDZ&Y OX0ڲ 'L9>mhNhX;^ؚGKXϰy 'OcQF *u]$Woʠ 'Ugy/YB8M;gDVs19#"`-R4zâ0]英vx GXlNT;g 3_Ͳ%_0gb?*gOh&c[+sqv~1aOx>:ggǖe_l+zqEP~}w>fB 7}K&& XPo°wxʵhb eٶq-o$IL-oY9+e=~ twt%)ez |3۾%Kvx7 xR&~%|\gL_`Cd8s=gDDE{G1`ߕp^r a= V,~emtyu4}jP\6O⮔,:#ЪJq|*Ѫ_OJ6vd>4,Wz{ }1ԼJ4%mۆz!Xֽr,`#vFq݊T҄lH [k*m@gBĈѐݡmdI*ToD.앿AT+WZw>IZcuΈ.)" BEkk=z0w[к76!\MN,Ir'OaX7^B( #StTUgQW0uO۾x F89=:Vy3""nR]Bk̘ !HZj>#ߌ͇8sr:'\ml|2b>dt.H8@ޕLz} ]Ymɖ}$'R;/ЩS K=kSlwMq\`Tbc'9jf'R&?~uD  t;i|/gزiϜ%1[zR<1οrx y7PH!õ,5:eKm;h-yb*&1o$f=._ D;|0ލB2:Afjw&RALXoO4Wwqx_N8MkswR K{ >_?R}ïloII_E)?7,#>>N%""rK? 0}eME(?}j,|EDs`^J.V?+ CɈH!õjŊc08qR%""r8y'r;ÁCx]ΧqD\T ʶ-)NDDaknB:L{EZ1 jDpρ}{0zҨIs._Z:T 1ٳ{'q1X`6[8"""׈͖L\l,qRt\k 8fS`+ʔy]zX(X(X(X(X(X(X(X(X(X(X(X(XHaxYF-!""""R7:}jIENDB`Plinth-0.8.1/doc/images/virtualbox_thumb.png000066400000000000000000000445561266051671100211170ustar00rootroot00000000000000PNG  IHDRHtbKGD pHYs  tIME> IDATxu|\G҈ -3Sbq&4iBRHMi۴ݷKv64eJ̌b Ȓ,24v{ѽw}{~<@0 ,Ē OA ''SVVf%\RWWiŪXrib"Xri31HOwT|Li) Ita& q2m(v4sIƢD4,7EH*0%c 4q8($2MpISZ:;@ Ԃ `͝=ɧ #iXuN1c8v4]G%Ii2o ðLdO-x5vm]cdl(ȒaȲLWc5ޏf۟y=ٿWy}oc1Ǭ|"dv.7p rsky/LbVyye#ÔQ _zJqf}TMpq)lÁz0&Uаkz!G叿3Wua=NU} ?XzlnCʸL[aF8҅5I^Z|w"/- fNFuVU՝\Q!Ne&dM`Z<*z.f R:(DUUzwPTOMk2bZm2+xWyXYٱs33˲ $9NZep?N[0E>?<, Mg?ɲ `&$a8ʦ8|nӎÙŲk-#ݔCs F~'+!"dZh$1$j" =0vwE*|]̚0d ;iLΗe{e.>s&rK)tZb _=dJ3pAbs G&c 8^d@$A^^v$d,&IPR(F{O,0^]U+&^ xEpc99h=1lDW NAa>؝h@RQ(((eloŗ_D,n*`b!M&IN *"n  ]0QTkkٱkn*sJNe8UnH$S`7nRWZbE';,9gؘYKTJ&& %v4MKDt ɴaVP%@LK,pXbɅ/'  #,{pW ;ڱ4W!% I ȲL"AE荲`k z t#E"Vu$IB%IZA@kG'ӦN%?N}S;hO=0hneK_.ǏϒPMn#Ĕ >4"ĺx$5ch=tt14Vd'@0Dsj~m#%\̚شe+hkq{lZW\ql3vPW_{o|N¡L7)c?͗ߡ'rR:#}lZMwq6Sbϐ뎰~qNQEdti NoK/ 7vĻley?BQ8% }< ]Gپ0FbֲfO= ׇ]IFF* ؾ 0k|.Y$0adUS1.'^LbvXrqo>s̘1 2X`nj9nb%4M0Nk}C# }V!CUUd]S@uMF4@eLDTU;+-"5uijlD5n0Mt]p׸˧m* IR_h'EQDOl:@մ%I&-@Ue9$3tH;ڲ\bV{gLdUUV`%\`UU'&H|pN @@WgWIRK_+6ڒ'wdDXGW9ҡHi!`[ Kl~$"~bn̂T]屝x7Aww7;v//?-l2}BUK#11Çea* tL+d4hD 5ݸdٍ Ɯ6>a>{,.ۧ>mfC8&L-K*f)5]Is(.F,̢[gp L"ԅUKݔ@FҒ$8!,QDhc\2yț\PQ;@(@Q0x|װokW]풉&dl AsO6YFO?".%co~hgj,JFyg-ҘrO]@34Kr= @Wm XPC#3NɎ~,;FEEaBB! ,='_jm潯4j$ s0'+@D t4Ǚ,L4sF?nʃ(J*2KuP(Dkk+ӧO:%s fD*D$AMjvG%I=١YM\H8daƓ_8 m@ w0ov̚d%4Y^)MDRbtFiT]c[fa>~g9m#3 PRRB]]hZ*1H6m4ydÁlCR:i:;WH;>Lv[ zgԔ1"S}'Rf5[b/G{EJ/ ΜLD<|^&m'I( ,pY4pXW3kb7_ZhrtjZM6ۨn|, ; ؁>$?g*cTS 1MX,F[[ӦM#''ByÁs;3'6oIǎgq3:cO /3mrA8`ۑ$ C@v$=$Q`03 3r"ݪ0<"A6f`jS j `4bqi T>BF8p i d=`⏲yNcOۖ0'Y0ӎZ: w:|{mi q!$s!++b,a(RArINƢˮf ٻU]$OSl,m;qiPqZ#/8XG>bc;Gpll_KaYNW&EEvFr#yF+Lcj&|X;$K$P; J,ie_E-2м{sr.ϥj!,ǯ_G>|)sfw*pIDn0?CdGͰa ر,,,oD1o9.>op<'Yˑ7vLx}̺l"*]@~Q fHaA.]dfy6Y^]=`w;əazS[?)a"g#K"]~?d KWO d.݁~mv"A3Q0lxڙI!K(JSH1ʡ5) 4Ȇ1%Y16;b:f\`Ƕ_ y>]S%8GR0Sc^iyH^/v̸Z6>'J_BCvFQEc8~ӟrN/v vҊANnl؆a?'ӸoaɉUd$ gf2KI9\[Kwg3-AI ]&bوD(2J2NSS3+OA$AuTM4MCӴjonYǨtM>+FOD0slv" X_"I@W]WT atKN(k1كr"`G$0:c ;^5("tB;#C>`hEg:G̅hm WsI7I ZAiBɘl ?̚3cLmHFUArsܸI Ɇhףּfg~B1@K*&WjG-fpt:I fl#eBAiCMCœWBДh8]!\n/NM %@vzWT (Db1|Yyl^]'uUu+U24443O~o5J^~Y^m=C==ZFUuJ|T5h:d5`U=r%P t{-e=۷o7 zTz]ӑd ]7DQ46c1. ᵗqGtҊ4RKReHf&jMCz=1t8XbTa:(.&7*ߗ/-!B "`1E$hΡϱՒ Q%W4 )fEYbɩJ 8v`%Z!V`g{bI#3|f"II&Ֆk7D"pB!d͊lir{ei}qLuzzqgdY=Mx,JAq1a*`wF8Pw%/'p(D,CQv' IgAܰa\Ţ2 5ޛ*5u`0@vNIαv%CE/P(HNn^_9K8A@TV~ŋ/=aꆁYEY]DI Է1.}SS.4;DUSQ2,qF|(r#Usǒ%STjYff8RENkW'DQk$"f3$_U*L,td;(%H ٶy3kUToG-i&UݩDS$wLIH?]r"?VO$.6'y&`Mi{!p80 4 C ~0Mۍ${/anDB ^WC+1 x OVl:SJm]*&KeL`ة_믽DCk\l;$΋aKg4ܺesSK8s/§p1f8LɚwwS\?{)=C130?G%ns3_w\ɴƭ%ޟm(6Y&H :®=)k[7"Y w+=i>o" cOF(` %H6 =eeP4DH+)i%H0A3Sv$T^[Y8+L @eB=zzFS$IbϞ=`%Ib֬Y/vkMH* N%`wTA,v! @ vQx K׾e۷'ltmD!I2"覈]c%YF4tII2" &L#XchjnrQQV fp`iE %ϾX^BDGvDbuJ]f8Y쩬HBj#ig:OSO%[٬,uZܜ\7cƌaՕjıtwFb}X zML{yY^9sFlGMUBҭN<{BRѡ_@$ẋ!̡4$Rpda򑻲@B1rB9D:MHM]QX$VIxnRDȲIgOxU#ؐz/ A~E5UCU,9ڀ}'^v *wK 7t^vhՐ#|N~ JDۻvCfRSf* fDiWΡPLnFM謪O9@DJ2zed˱=.:P=p&`5d&*'r-ĝtvvř'y5G@4Y+ˠ;hd(abXM^?ZQ5ƫ9-Jt~ EE8L2uz4wCґavw[^7T5c-4j8w۴O[Sr4)jOe% IDATDM^{D4L<ZR.ѝrIN:/ 3-4t"q UӉ& IAk\?)#CXs.}EeZZZF8SJE0zfo%}Mud0*%bY9D"+Cvd.  К0Evfk&4$Q3,(SpGD7ȟ衶%Ჳ|QI̭3ֆTR@ULS?BE,9wd/9B._ ;6p}; \Բϭ:Le!Ezx7ehDtaɜeѧ zeL@W05WV'gzsx<'B,QNLl<$DA /6M`" N8T6) U)wmRLrJ iY~61iT4]ϐ9e)FNt%t9[h=G[?c&qT7Hn'}W\=)rw77e7w*u1>?Wmau7J:":k2+ ہahI9e 1g5MS0 (e$Pg%3~'?{F[B|oyְ>2&?U#v8f𣿮\α-;vd%){ w`Jz^vw)jțĝyذ7rì9i~Ǎp\ǰs=Z&qpYe*Yu]YJ).McvݎӓIai!yyLh!`6pyL,/fe{l/n\]5̚?5?]K|O@1N26v[ عs l1 ßhmS+ *"p ֑P =숩D}I[S5gjjj̊wdbUl 4 ) t;Z т\y-f\)́&N"Fa?9NKA~_coͻڽs5=Eج;`x(#1Ps$UlJ|3`w{n ed`3X۔O(ZIf/^ȟG7lv ]1*貅T8 Q*El'Ljl\_G]l6}UU\,&r*ȋnֽ&!dʗSo;/anv.^ݷ1ppnL!dz㻔/md-^o Tb*Q|9._U+_%sUud^헖7LPp@9hワ5kV{~/M'Y1P!(2U쮫ָ%!׶h,f/z\ĢcYunM\pǙmCf g2nLM!f[Kgk9\͂ob<G(Tpkd:kj)MKj{ڻ.˂q9?dW?Wt}J>;i pb"@Yj04ttvNᦁ,!0 zϱs[L2}נ P\2i@).,$?9pSp{|ϱwşJxx+Ͼ[n\U7O/7o $fݾ QZQJ]"/+*9~`?AW^A'U(XN=kR" (/).,Y?xǟKΥz*8(cXeJ(_ƂYv;n|]o38M;sG+s6 e'fpiQ+?%Ex3=|kK<_rɝ_dā 7Fݘj$I[pɕkom%(CGQ&M`̙veyz9p#N66gӯ}C}Rkyq#I[nτYvJRWP,P)nw`;Ns-MV3O'@~)Tl =)Qa Br0͚,ȤLF)afv Ur:p#L T4TU:44ʜlY )I^~NZ[}Cvq#vSkJ?ŃO!H6QDQ$Y֧&MDU,]v;ߤ.@US;uMEMk)}l}tC'#Jꀡ HU$Ru]GU>@ J l1>+,5j(]Xsi*M ?~T:^ýKf|` mֵ+9S/(Rwi-YÛߢlnl6o<˘R9ϯ.&7h }ڗd e3ȡx1M<: 9ao|UB yhNC@w,H`E'ז"E%%>9~ux}GUDMUzE2DDURE?-܂,l۶y4ՍiTt o;THnI,m2χt y֜;Fs{BxÔ]dieӜS~f9Ǔ#!;GwhA}p 8Lz^tp `[-ìzo% ~pe6f_MvY|_tc&3Szٕ,Uɧ>91UR`)*p)azHEQ7EQj{!d߂P_$MNyt;Ok|N*<ڎ*P|`Z?(~X`Ǭc=~`=]I$Vi5ِYsp`9-Gjfe5YHWgX|Td$96XGì (/`,m~GJ\,?fW?}|%`;<3]n|@e@Ku~o\yA i-fĬC)_, ۃMo6\65o%p/(4ڵ<(D*hjPV'!.(WOfZvƖY|sǹɰo[iWj}%/}<.Q2ٝ:bcPAH7[\xtu-WL!ZMWgQG[Rcw-_G8ƶmkR"K\͂Yc/y]i rI\3$=f6B$yyy{09>0UIp9m!dÅ-cI&z2D\)ThMu]8g")`\:ZYd8.Y^(9>h"L4Dp؉H6Y6r0dĉx<Ǝ;lQynFdYf,X`ݖ<J2s9D"1w dl3R?n#o1eE J 6-_ N1RQ8z/L]`MGoXV O*Wd=K,ёN|5X5`ܤ9E4~>G&P9Ol;HFX2Ǟ }!3wF)7G ̜Qn̙Z]GaaY`ŸmVL!GaߦL(0mP 8{=۪9-~1УtG5} jflN~?O<(k^{7|h\#:VQĎ=x٧i $زf5Ͼ6co PSSivt]ܢ1̞> ały3پ}'_aC̚gϽSK[o'C"t`Lnlu Yaz#M 6~b3&:z$‘7Y2<9`Dq9F#\p nhƥ3ؼmeع51nJ:]Ncbs+$hQ0j.Ae7us~>AByYٵk ,`̘1}&5u3 f^}?oyQ3/O,=eOugYHY(EMGGG_FӉ[4EEl6(%}?D>tH{Iz3ٟ$XjU|D$n73gv*k.{Z0LgA3DZK^L Ǘ!?:7]5+n!;A$ }Oa"`Qd?p*Nlq:X/.fx؛G,i =u"ʩKxefD3kv⶿dopӕ!_%%DQrQXXƬ6 ~LEQ%e:^}GqscOm^}r&f%eJYsux'B/4OrL&dEÁ: q<':Hh4!3wQFRMBuDX ×,HhJXBtǛ 9|Bs-mNzݔO@6Xo ĬiuF/, r_P]{<1ubUM4Mrr󩫫UlVAa0EIb;q:zJ6UOI&[j Ze:l8E> C0+ǛAk[+$3dt*.vR K1F.eLTn$)$RXT24~zpbQt]d8q,y#'33*n:h_vn_ֺ(Z,9˦< aD<$0 +F{L֩1),+۫Hx\.Lz?k& >lv' KvcȨ. C0i4 /j_sdAucl<$ow8W^Bl=ٵĆ뉊EXh!AB"h)[íx $IϣOsʕs̬,j#-B$;?wG3˭nbydW]dՇoNƑ_~Ȗm!ښ 'r_(tG#u:rm$)gT6*jZY*GQC5ڕ8Ļ2FqW!$1~myΈ).,e%dtN Y9g ty#V?NUY9 )<]>|mX I;VIΙ\j=֗~)1Z/#na:$-$96Fz.yW_ڐ6֔@]iTlX[Pz.~?z99T]n!YaCBY+2Su*/5.^OS17.Xk;˫/HA:sϕ Gu|}K}i pJto>pp:op NÁ䐇KN={-ܓU8+dNthf3q, 5%TԷw~l.ҎɜxyjbL{,0dEE9lΎ)wEiy =}ArOerlwS^ r (@Ei!;>݅u!uZvU)޷eijhȗ,Y̑*h W @ueYȼ (`_M}ٵ~|zf-+q3װC|[W=Le^>mhQ|h 9&(: Tl W/aKNlX0 ӫo H؅^\vAPh(8\LNf.&|*2®=ROBxSp>IUk?^ _? Qe!2\OsC+l㋝xE Crj:`t t6TQP݄Ǘ!ꮙh(jaA plinth 1 FreedomBox plinth a web front end for administering FreedomBox plinth SERVER_DIR PIDFILE Description FreedomBox is a community project to develop, design and promote personal servers running free software for private, personal communications. It is a networking appliance designed to allow interfacing with the rest of the Internet under conditions of protected privacy and data security. It hosts applications such as blog, wiki, website, social network, email, web proxy and a Tor relay on a device that can replace a wireless router so that data stays with the users. Plinth is a web interface to administer the functions of the FreedomBox. It is extensible and is made of modules. Each module provides a simplified user interface to control the underlying functionality of a specific application of FreedomBox. As FreedomBox can act as a wireless router, it is possible to configure networking from Plinth. Plinth allows configuration of basic system parameters such as time zone, hostname and automatic upgrade settings. Options Write the process ID of the daemon into the provided PIDFILE. By default the value from plinth.config is used. Plinth is shipped with a value of /var/run/plinth.pid in /etc/plinth/plinth.config. When /etc/plinth/plinth.config is not available, plinth.config from current directory is used. In source directory, this has the default value of ./data/var/run/plinth.pid. This the URL fragment under which Plinth will provide its services. By default the value from plinth.config is used. Plinth is shipped with a value of /plinth in /etc/plinth/plinth.config. This means that Plinth will be available as http://localhost:8000/plinth by default. When /etc/plinth/plinth.config is not available, plinth.config from current directory is used. In source directory, this has the default value of /. Enable debug mode. Turn off Django security features. Print extra debug messages. Monitor source files for changes and restart Plinth on modifications. Turn on Django debug mode to show details on error pages. Die if there is an error during module initialization. Normally Plinth goes into daemon mode as soon as it finishes initialization. This is useful when performing development and debugging on the command line. Further, this is useful when running as systemd service as systemd takes care of sending the process into background. If provided, Plinth loads modules, performs initialization but does start the web server. Instead it runs diagnostic tests on each module and exits. Configuration Plinth reads various configuraiton options from the file /etc/plinth/plinth.config. If this file is not present, then it reads configuration file ./plinth.config from the current directory. This is mainly meant to make Plinth work with configuration from source code directory for debugging purposes. Examples Start Plinth as daemon with default options $ plinth Become a daemon after initialization and write a PIDFILE as specified in the configuration. Run Plinth for debugging $ plinth --server_dir=/plinth --debug --no-daemon Enable debug mode and don't become a daemon. Also override the configuration file value for the URL fragment to start Plinth under and set it to /plinth. Bugs See Plinth issue tracker for a full list of known issues and TODO items. Author Plinth Developers Original author Plinth-0.8.1/plinth.config000066400000000000000000000027601266051671100154550ustar00rootroot00000000000000[Path] # directory locations file_root = %(root)s config_dir = %(file_root)s/data/etc/plinth data_dir = %(file_root)s/data/var/lib/plinth log_dir = %(file_root)s/data/var/log/plinth pid_dir = %(file_root)s/data/var/run server_dir = / actions_dir = %(file_root)s/actions doc_dir = %(file_root)s/doc # file locations store_file = %(data_dir)s/plinth.sqlite3 status_log_file = %(log_dir)s/status.log access_log_file = %(log_dir)s/access.log pidfile = %(pid_dir)s/plinth.pid [Network] host = 127.0.0.1 port = 8000 # Enable the following only if Plinth is behind a proxy server. The # proxy server should properly clean and the following HTTP headers: # X-Forwarded-Host # X-Forwarded-Proto # If you enable these unnecessarily, this will lead to serious security # problems. For more information, see # https://docs.djangoproject.com/en/1.7/ref/settings/ # # These are enabled by default in Plinth because the default # configuration allows only connections from localhost # # Leave the values blank to disable use_x_forwarded_host = True secure_proxy_ssl_header = HTTP_X_FORWARDED_PROTO [Misc] box_name = FreedomBox # The danube_edition changes the firstboot process and offers entering a # voucher for a freedombox.me sub-domain. This functionality requires # additional debian packages to be installed: # # pagekite, python3-requests # # They are not added as dependencies to keep the normal installation images # lean, but make sure to add them if you want to build danube-edition images. danube_edition = False Plinth-0.8.1/plinth/000077500000000000000000000000001266051671100142615ustar00rootroot00000000000000Plinth-0.8.1/plinth/__init__.py000066400000000000000000000013551266051671100163760ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth package init file """ __version__ = '0.8.1' Plinth-0.8.1/plinth/__main__.py000066400000000000000000000266321266051671100163640ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # import argparse import django.conf from django.contrib.messages import constants as message_constants import django.core.management import django.core.wsgi import importlib import logging import os import stat import sys import cherrypy from cherrypy.process.plugins import Daemonizer from plinth import cfg from plinth import module_loader from plinth import service logger = logging.getLogger(__name__) arguments = None def parse_arguments(): """Parse command line arguments""" parser = argparse.ArgumentParser( description='Plinth web interface for FreedomBox', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument( '--pidfile', default=cfg.pidfile, help='specify a file in which the server may write its pid') # TODO: server_dir is actually a url prefix; use a better variable name parser.add_argument( '--server_dir', default=cfg.server_dir, help='web server path under which to serve') parser.add_argument( '--debug', action='store_true', default=cfg.debug, help='enable debugging and run server *insecurely*') parser.add_argument( '--no-daemon', action='store_true', default=cfg.no_daemon, help='do not start as a daemon') parser.add_argument( '--diagnose', action='store_true', default=False, help='run diagnostic tests and exit') global arguments arguments = parser.parse_args() cfg.pidfile = arguments.pidfile cfg.server_dir = arguments.server_dir cfg.debug = arguments.debug cfg.no_daemon = arguments.no_daemon def setup_logging(): """Setup logging framework""" # Don't propagate cherrypy log messages to root logger logging.getLogger('cherrypy').propagate = False cherrypy.log.error_file = cfg.status_log_file cherrypy.log.access_file = cfg.access_log_file if not cfg.no_daemon: cherrypy.log.screen = False def setup_server(): """Setup CherryPy server""" logger.info('Setting up CherryPy server') # Set the PID file path try: if cfg.pidfile: from cherrypy.process.plugins import PIDFile PIDFile(cherrypy.engine, cfg.pidfile).subscribe() except AttributeError: pass # Configure default server cherrypy.config.update( {'server.socket_host': cfg.host, 'server.socket_port': cfg.port, 'server.thread_pool': 10, # Avoid stating files once per second in production 'engine.autoreload.on': cfg.debug, }) application = django.core.wsgi.get_wsgi_application() cherrypy.tree.graft(application, cfg.server_dir) static_dir = os.path.join(cfg.file_root, 'static') config = { '/': {'tools.staticdir.root': static_dir, 'tools.staticdir.on': True, 'tools.staticdir.dir': '.'}} cherrypy.tree.mount(None, django.conf.settings.STATIC_URL, config) logger.debug('Serving static directory %s on %s', static_dir, django.conf.settings.STATIC_URL) js_dir = '/usr/share/javascript' js_url = '/javascript' config = { '/': {'tools.staticdir.root': js_dir, 'tools.staticdir.on': True, 'tools.staticdir.dir': '.'}} cherrypy.tree.mount(None, js_url, config) logger.debug('Serving javascript directory %s on %s', js_dir, js_url) manual_dir = os.path.join(cfg.doc_dir, 'images') manual_url = '/'.join([cfg.server_dir, 'help/manual/images']) \ .replace('//', '/') config = { '/': {'tools.staticdir.root': manual_dir, 'tools.staticdir.on': True, 'tools.staticdir.dir': '.'}} cherrypy.tree.mount(None, manual_url, config) logger.debug('Serving manual images %s on %s', manual_dir, manual_url) for module_import_path in module_loader.loaded_modules: module = importlib.import_module(module_import_path) module_name = module_import_path.split('.')[-1] module_path = os.path.dirname(module.__file__) static_dir = os.path.join(module_path, 'static') if not os.path.isdir(static_dir): continue config = { '/': {'tools.staticdir.root': static_dir, 'tools.staticdir.on': True, 'tools.staticdir.dir': '.'}} urlprefix = "%s%s" % (django.conf.settings.STATIC_URL, module_name) cherrypy.tree.mount(None, urlprefix, config) logger.debug('Serving static directory %s on %s', static_dir, urlprefix) if not cfg.no_daemon: Daemonizer(cherrypy.engine).subscribe() cherrypy.engine.signal_handler.subscribe() def configure_django(): """Setup Django configuration in the absense of .settings file""" # In module_loader.py we reverse URLs for the menu before having a proper # request. In this case, get_script_prefix (used by reverse) returns the # wrong prefix. Set it here manually to have the correct prefix right away. django.core.urlresolvers.set_script_prefix(cfg.server_dir) logging_configuration = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'default': { 'format': '[%(asctime)s] %(name)-14s %(levelname)-8s %(message)s', } }, 'handlers': { 'file': { 'class': 'logging.FileHandler', 'filename': cfg.status_log_file, 'formatter': 'default' }, 'console': { 'class': 'logging.StreamHandler', 'formatter': 'default' } }, 'root': { 'handlers': ['console', 'file'], 'level': 'DEBUG' if cfg.debug else 'INFO' } } templates = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.request', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.messages.context_processors.messages', 'plinth.context_processors.common', ], }, }, ] applications = ['bootstrapform', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.messages', 'stronghold', 'plinth'] applications += module_loader.get_modules_to_load() sessions_directory = os.path.join(cfg.data_dir, 'sessions') secure_proxy_ssl_header = None if cfg.secure_proxy_ssl_header: secure_proxy_ssl_header = (cfg.secure_proxy_ssl_header, 'https') # Read translated languages from the 'locale' directory languages = [('en', 'English')] locale_dir = os.path.join(os.path.dirname(__file__), 'locale') if os.path.isdir(locale_dir): translated_language_codes = next(os.walk(locale_dir))[1] all_languages = dict(django.conf.global_settings.LANGUAGES) for code in translated_language_codes: if code in all_languages: languages.append((code, all_languages[code])) languages = sorted(languages, key=lambda tup: tup[1]) django.conf.settings.configure( ALLOWED_HOSTS=['*'], CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}, DATABASES={'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': cfg.store_file}}, DEBUG=cfg.debug, INSTALLED_APPS=applications, LANGUAGES=languages, LOGGING=logging_configuration, LOGIN_URL='users:login', LOGIN_REDIRECT_URL='apps:index', LOGOUT_URL='users:logout', MESSAGE_TAGS={message_constants.ERROR: 'danger'}, MIDDLEWARE_CLASSES=( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'stronghold.middleware.LoginRequiredMiddleware', 'plinth.modules.first_boot.middleware.FirstBootMiddleware', ), ROOT_URLCONF='plinth.urls', SECURE_PROXY_SSL_HEADER=secure_proxy_ssl_header, SESSION_ENGINE='django.contrib.sessions.backends.file', SESSION_FILE_PATH=sessions_directory, STATIC_URL='/'.join([cfg.server_dir, 'static/']).replace('//', '/'), STRONGHOLD_PUBLIC_NAMED_URLS=('users:login', 'users:logout'), TEMPLATES=templates, USE_L10N=True, USE_X_FORWARDED_HOST=cfg.use_x_forwarded_host) django.setup() logger.info('Configured Django with applications - %s', applications) logger.info('Creating or adding new tables to data file') django.core.management.call_command('migrate', '--fake-initial', interactive=False) os.chmod(cfg.store_file, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP) def run_diagnostics_and_exit(): """Run diagostics on all modules and exit.""" module = importlib.import_module('plinth.modules.diagnostics.diagnostics') error_code = 0 try: module.run_on_all_modules() except Exception as exception: logger.exception('Error running diagnostics - %s', exception) error_code = 2 for module, results in module.current_results['results'].items(): for test, result_value in results: print('{result_value}: {module}: {test}'.format( result_value=result_value, test=test, module=module)) if result_value != 'passed': error_code = 1 sys.exit(error_code) def main(): """Intialize and start the application""" cfg.read() parse_arguments() setup_logging() service.init() configure_django() logger.info('Configuration loaded from file - %s', cfg.config_file) logger.info('Script prefix - %s', cfg.server_dir) module_loader.load_modules() if arguments.diagnose: run_diagnostics_and_exit() setup_server() cherrypy.engine.start() cherrypy.engine.block() if __name__ == '__main__': main() Plinth-0.8.1/plinth/action_utils.py000066400000000000000000000255041266051671100173360ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Python action utility functions. """ from django.utils.translation import ugettext as _ import psutil import socket import subprocess def service_is_running(servicename): """Return whether a service is currently running. Does not need to run as root. """ try: subprocess.check_output(['systemctl', 'status', servicename]) return True except subprocess.CalledProcessError: # If a service is not running we get a status code != 0 and # thus a CalledProcessError return False def service_is_enabled(service_name): """Check if service is enabled in systemd.""" try: subprocess.check_output(['systemctl', 'is-enabled', service_name]) return True except subprocess.CalledProcessError: return False def service_enable(service_name): """Enable and start a service in systemd and sysvinit using update-rc.d.""" subprocess.call(['systemctl', 'enable', service_name]) service_start(service_name) def service_disable(service_name): """Disable and stop service in systemd and sysvinit using update-rc.d.""" try: service_stop(service_name) except subprocess.CalledProcessError: pass subprocess.call(['systemctl', 'disable', service_name]) def service_start(service_name): """Start a service.""" subprocess.call(['systemctl', 'start', service_name]) def service_stop(service_name): """Stop a service.""" subprocess.call(['systemctl', 'stop', service_name]) def service_restart(service_name): """Restart service with systemd.""" subprocess.call(['systemctl', 'restart', service_name]) def service_reload(service_name): """Reload service with systemd.""" subprocess.call(['systemctl', 'reload', service_name]) def webserver_is_enabled(name, kind='config'): """Return whether a config/module/site is enabled in Apache.""" option_map = {'config': '-c', 'site': '-s', 'module': '-m'} try: # Don't print anything on the terminal subprocess.check_output(['a2query', option_map[kind], name], stderr=subprocess.STDOUT) return True except subprocess.CalledProcessError: return False def webserver_enable(name, kind='config', apply_changes=True): """Enable a config/module/site in Apache. Restart/reload the webserver if apply_changes is True. Return whether restart('restart'), reload('reload') or no action (None) is required. If changes have been applied, then performed action is returned. """ if webserver_is_enabled(name, kind): return command_map = {'config': 'a2enconf', 'site': 'a2ensite', 'module': 'a2enmod'} subprocess.check_output([command_map[kind], name]) action_required = 'restart' if kind == 'module' else 'reload' if apply_changes: if action_required == 'restart': service_restart('apache2') else: service_reload('apache2') return action_required def webserver_disable(name, kind='config', apply_changes=True): """Disable config/module/site in Apache. Restart/reload the webserver if apply_changes is True. Return whether restart('restart'), reload('reload') or no action (None) is required. If changes have been applied, then performed action is returned. """ if not webserver_is_enabled(name, kind): return command_map = {'config': 'a2disconf', 'site': 'a2dissite', 'module': 'a2dismod'} subprocess.check_output([command_map[kind], name]) action_required = 'restart' if kind == 'module' else 'reload' if apply_changes: if action_required == 'restart': service_restart('apache2') else: service_reload('apache2') return action_required class WebserverChange(object): """Context to restart/reload Apache after configuration changes.""" def __init__(self): """Initialize the context object state.""" self.actions_required = set() def __enter__(self): """Return the context object so methods could be called on it.""" return self def __exit__(self, exc_type, exc_value, traceback): """Restart or reload the webserver. Don't supress exceptions. If an exception occurs restart/reload the webserver based on enable/disable operations done so far. """ if 'restart' in self.actions_required: service_restart('apache2') elif 'reload' in self.actions_required: service_reload('apache2') def enable(self, name, kind='config'): """Enable a config/module/site in Apache. Don't apply the changes until the context is exited. """ action_required = webserver_enable(name, kind, apply_changes=False) self.actions_required.add(action_required) def disable(self, name, kind='config'): """Disable a config/module/site in Apache. Don't apply the changes until the context is exited. """ action_required = webserver_disable(name, kind, apply_changes=False) self.actions_required.add(action_required) def diagnose_port_listening(port, kind='tcp', listen_address=None): """Run a diagnostic on whether a port is being listened on. Kind must be one of inet, inet4, inet6, tcp, tcp4, tcp6, udp, udp4, udp6, unix, all. See psutil.net_connection() for more information. """ result = _check_port(port, kind, listen_address) if listen_address: test = _('Listening on {kind} port {listen_address}:{port}') \ .format(kind=kind, listen_address=listen_address, port=port) else: test = _('Listening on {kind} port {port}') \ .format(kind=kind, port=port) return [test, 'passed' if result else 'failed'] def _check_port(port, kind='tcp', listen_address=None): """Return whether a port is being listened on.""" run_kind = kind if kind == 'tcp4': run_kind = 'tcp' if kind == 'udp4': run_kind = 'udp' for connection in psutil.net_connections(run_kind): # TCP connections must have status='listen' if kind in ('tcp', 'tcp4', 'tcp6') and \ connection.status != psutil.CONN_LISTEN: continue # UDP connections must have empty remote address if kind in ('udp', 'udp4', 'udp6') and \ connection.raddr != (): continue # Port should match if connection.laddr[1] != port: continue # Listen address if requested should match if listen_address and connection.laddr[0] != listen_address: continue # Special additional checks only for IPv4 if kind != 'tcp4' and kind != 'udp4': return True # Found socket is IPv4 if connection.family == socket.AF_INET: return True # Full IPv6 address range includes mapped IPv4 address also if connection.laddr[0] == '::': return True return False def diagnose_url(url, kind=None, env=None, extra_options=None, wrapper=None, expected_output=None): """Run a diagnostic on whether a URL is accessible. Kind can be '4' for IPv4 or '6' for IPv6. """ command = ['wget', '-q', '-O', '-', url] if wrapper: command.insert(0, wrapper) if extra_options: command.extend(extra_options) if kind: command.append({'4': '-4', '6': '-6'}[kind]) try: output = subprocess.check_output(command, env=env) result = 'passed' if expected_output and expected_output not in output.decode(): result = 'failed' except subprocess.CalledProcessError as exception: result = 'failed' # Authorization failed is a success if exception.returncode == 6: result = 'passed' except FileNotFoundError: result = 'error' if kind: return [_('Access URL {url} on tcp{kind}') .format(url=url, kind=kind), result] else: return [_('Access URL {url}').format(url=url), result] def diagnose_url_on_all(url, extra_options=None): """Run a diagnostic on whether a URL is accessible.""" results = [] for address in get_addresses(): if address['kind'] == '6' and ':' in address['address']: address['address'] = '[{0}]'.format(address['address']) current_url = url.format(host=address['address']) results.append(diagnose_url(current_url, kind=address['kind'], extra_options=extra_options)) return results def diagnose_netcat(host, port, input='', negate=False): """Run a diagnostic using netcat.""" try: process = subprocess.Popen( ['nc', host, str(port)], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) process.communicate(input=input.encode()) if process.returncode != 0: result = 'failed' else: result = 'passed' except Exception: result = 'failed' test = _('Connect to {host}:{port}') if negate: result = 'failed' if result == 'passed' else 'passed' test = _('Cannot connect to {host}:{port}') return [test.format(host=host, port=port), result] def get_addresses(): """Return a list of IP addreses and hostnames.""" addresses = get_ip_addresses() hostname = get_hostname() addresses.append({'kind': '4', 'address': 'localhost'}) addresses.append({'kind': '6', 'address': 'localhost'}) addresses.append({'kind': '4', 'address': hostname}) addresses.append({'kind': '6', 'address': hostname}) return addresses def get_ip_addresses(): """Return a list of IP addresses assigned to the system.""" addresses = [] output = subprocess.check_output(['ip', '-o', 'addr']) for line in output.decode().splitlines(): parts = line.split() addresses.append({'kind': '4' if parts[2] == 'inet' else '6', 'address': parts[3].split('/')[0]}) return addresses def get_hostname(): """Return the current hostname.""" return subprocess.check_output(['hostname']).decode().strip() Plinth-0.8.1/plinth/actions.py000066400000000000000000000143021266051671100162730ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """Run specified actions. Actions run commands with this contract (version 1.1): 1. (promise) Super-user actions run as root. Normal actions do not. 2. (promise) The actions directory can't be changed at run time. This guarantees that we can only select from the correct set of actions. 3. (restriction) Only whitelisted actions can run. A. Scripts in a directory above the actions directory can't be run. Arguments (and options) can't coerce the system to run actions in directories above the actions directory. Arguments that fail this validation will raise a ValueError. B. Scripts in a directory beneath the actions directory can't be run. Arguments (and options) can't coerce the system to run actions in sub-directories of the actions directory. (An important side-effect of this is that the system will not try to follow symlinks to other action directories.) Arguments that fail this validation will raise a ValueError. C. Only one action can be called at a time. This prevents us from appending multiple (unexpected) actions to the call. Any special shell characters in the action name will simply be treated as the action itself when trying to search for an action. The action will then not be found. $ action="echo '$options'; echo 'oops'" $ options="hi" $ $action # oops, the file system is gone! Arguments that fail this validation will raise a ValueError. D. Options can't be used to run other actions: $ action="echo '$options'" $ options="hi'; rm -rf /;'" $ $action # oops, the file system is gone! Any option that tries to include special shell characters will simply be treated as an option with special characters and will not be interpreted by the shell. Any call wishing to include special shell characters in options list does not need to escape them. They are taken care of. The option string is passed to the action exactly as it is passed in. E. Actions must exist in the actions directory. 4. (promise) Options are passed as arguments to the action. Options can be provided as a list or as a tuple. 5. (promise) Output is returned from the command. In case of an error, ActionError is raised with action, output and error strings as arguments. 6. (limitation) Providing the process with input is not possible. Don't expect to give the process additional input after it's started. Any interaction with the spawned process must be carried out through some other method (maybe the process opens a socket, or something). 7. Option """ import logging import os import subprocess from plinth import cfg from plinth.errors import ActionError LOGGER = logging.getLogger(__name__) def run(action, options=None, input=None, async=False): """Safely run a specific action as the current user. See actions._run for more information. """ return _run(action, options, input, async, False) def superuser_run(action, options=None, input=None, async=False): """Safely run a specific action as root. See actions._run for more information. """ return _run(action, options, input, async, True) def _run(action, options=None, input=None, async=False, run_as_root=False): """Safely run a specific action as a normal user or root. Actions are pulled from the actions directory. - options are added to the action command. - input: data (as bytes) that will be sent to the action command's stdin. - async: run asynchronously or wait for the command to complete. - run_as_root: execute the command through sudo. """ if options is None: options = [] # Contract 3A and 3B: don't call anything outside of the actions directory. if os.sep in action: raise ValueError('Action cannot contain: ' + os.sep) cmd = os.path.join(cfg.actions_dir, action) if not os.path.realpath(cmd).startswith(cfg.actions_dir): raise ValueError('Action has to be in directory %s' % cfg.actions_dir) # Contract 3C: interpret shell escape sequences as literal file names. # Contract 3E: fail if the action doesn't exist or exists elsewhere. if not os.access(cmd, os.F_OK): raise ValueError('Action must exist in action directory.') cmd = [cmd] # Contract: 3C, 3D: don't allow shell special characters in # options be interpreted by the shell. When using # subprocess.Popen with list invocation and not shell invocation, # escaping is unnecessary as each argument is passed directly to # the command and not parsed by a shell. if options: if not isinstance(options, (list, tuple)): raise ValueError('Options must be list or tuple.') cmd += list(options) # No escaping necessary # Contract 1: commands can run via sudo. if run_as_root: cmd = ['sudo', '-n'] + cmd LOGGER.info('Executing command - %s', cmd) # Contract 3C: don't interpret shell escape sequences. # Contract 5 (and 6-ish). proc = subprocess.Popen( cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) if not async: output, error = proc.communicate(input=input) output, error = output.decode(), error.decode() if proc.returncode != 0: LOGGER.error('Error executing command - %s, %s, %s', cmd, output, error) raise ActionError(action, output, error) return output else: return proc Plinth-0.8.1/plinth/cfg.py000066400000000000000000000070041266051671100153730ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # import configparser import logging import os from plinth.menu import Menu logger = logging.getLogger(__name__) box_name = None root = None file_root = None config_dir = None data_dir = None store_file = None actions_dir = None doc_dir = None status_log_file = None access_log_file = None pidfile = None host = None port = None use_x_forwarded_host = False secure_proxy_ssl_header = None debug = False no_daemon = False server_dir = '/' danube_edition = False main_menu = Menu() config_file = None DEFAULT_CONFIG_FILE = '/etc/plinth/plinth.config' DEFAULT_ROOT = '/' def get_config_file(): """Return the configuration file to read.""" if os.path.isfile(DEFAULT_CONFIG_FILE): root_directory = DEFAULT_ROOT file_path = DEFAULT_CONFIG_FILE else: root_directory = os.path.dirname(os.path.realpath(__file__)) root_directory = os.path.join(root_directory, '..') root_directory = os.path.realpath(root_directory) file_path = os.path.join(root_directory, 'plinth.config') return file_path, root_directory def read(file_path=None, root_directory=None): """Read configuration.""" if not file_path and not root_directory: file_path, root_directory = get_config_file() if not os.path.isfile(file_path): raise FileNotFoundError('No plinth.config file could be found.') global config_file # pylint: disable-msg=invalid-name,global-statement config_file = file_path parser = configparser.ConfigParser( defaults={ 'root': os.path.realpath(root_directory), }) parser.read(config_file) config_items = ( ('Path', 'root', 'string'), ('Path', 'file_root', 'string'), ('Path', 'config_dir', 'string'), ('Path', 'data_dir', 'string'), ('Path', 'store_file', 'string'), ('Path', 'actions_dir', 'string'), ('Path', 'doc_dir', 'string'), ('Path', 'status_log_file', 'string'), ('Path', 'access_log_file', 'string'), ('Path', 'pidfile', 'string'), ('Path', 'server_dir', 'string'), ('Network', 'host', 'string'), ('Network', 'port', 'int'), ('Network', 'secure_proxy_ssl_header', 'string'), ('Network', 'use_x_forwarded_host', 'bool'), ('Misc', 'box_name', 'string'), ('Misc', 'danube_edition', 'bool'), ) for section, name, datatype in config_items: try: value = parser.get(section, name) except (configparser.NoSectionError, configparser.NoOptionError): logger.error('Configuration does not contain option: %s.%s', section, name) raise else: if datatype == 'int': value = int(value) elif datatype == 'bool': value = (value.lower() == 'true') globals()[name] = value Plinth-0.8.1/plinth/context_processors.py000066400000000000000000000030721266051671100206030ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Django context processors to provide common data to templates. """ from django.utils.translation import ugettext as _, ugettext_noop import re from plinth import cfg def common(request): """Add additional context values to RequestContext for use in templates. Any resources referenced in the return value are expected to have been initialized or configured externally beforehand. """ # Allow a value in configuration file to be translated. Allow # the brand name 'FreedomBox' itself to be translated. ugettext_noop('FreedomBox') slash_indices = [match.start() for match in re.finditer('/', request.path)] active_menu_urls = [request.path[:index + 1] for index in slash_indices] return { 'cfg': cfg, 'submenu': cfg.main_menu.active_item(request), 'active_menu_urls': active_menu_urls, 'box_name': _(cfg.box_name) } Plinth-0.8.1/plinth/errors.py000066400000000000000000000016401266051671100161500ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Project specific errors """ class PlinthError(Exception): """Base class for all Plinth specific errors.""" pass class ActionError(PlinthError): """Use this error for exceptions when executing an action.""" pass Plinth-0.8.1/plinth/kvstore.py000066400000000000000000000023471266051671100163360ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Simple key/value store using Django models """ from plinth.models import KVStore def get(key): """Return the value of a key""" # pylint: disable-msg=E1101 return KVStore.objects.get(pk=key).value def get_default(key, default_value): """Return the value of the key if key exists else return default_value""" try: return get(key) except Exception: return default_value def set(key, value): # pylint: disable-msg=W0622 """Store the value of a key""" store = KVStore(key=key, value=value) store.save() Plinth-0.8.1/plinth/locale/000077500000000000000000000000001266051671100155205ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/README000066400000000000000000000011041266051671100163740ustar00rootroot00000000000000Plinth translation in your language quick guide. ## IRC Introduce yourself on #freedombox IRC (irc.debian.org) and start translating the PO file from your language directory. ## Other translation platforms Introducing yourself is important since some work may have been done already on Debian translators discussion lists and Transifex localization platform. https://www.transifex.com/freedombox/ https://www.debian.org/MailingLists/subscribe ## Wiki: translators landing page For more information on translations, please visit: https://wiki.debian.org/FreedomBox/Translate Plinth-0.8.1/plinth/locale/da/000077500000000000000000000000001266051671100161045ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/da/LC_MESSAGES/000077500000000000000000000000001266051671100176715ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/da/LC_MESSAGES/django.po000066400000000000000000003642111266051671100215020ustar00rootroot00000000000000# Plinth - the FreedomBox web interface # Danish translation. # Copyright (C) 2015 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Mikkel Kirkgaard Nielsen , 2015 msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2015-12-20 14:43+0000\n" "Last-Translator: Mikkel Kirkgaard Nielsen \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "Lytter på {kind} port {listen_address}:{port}" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "Lytter på {kind} port {port}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "Tilgå URL {url} på tcp{kind}" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "Tilgå URL {url}" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "Forbind til {host}:{port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "Kan ikke forbinde til {host}:{port}" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FreedomBox" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Apps" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Applikationer" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "Tjenester og Applikationer" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" "Du kan installere og køre forskellige tjenester og applikationer på din " "%(box_name)s. Klik på et af App-linkene til venstre, for at læse mere om den " "enkelte applikation eller installere den." #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "Denne box kan blive din fotodelingstjeneste, din instant messagingtjeneste, " "dit sociale medie, dit nyhedsmedie. Kender du web-portaler? Sådan en kan den " "også være. Mange af de tjenester du bruger på webbet kan snart være " "tilgængelig her og under din kontrol!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "Tjenestesøgning" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "Aktiver tjenestesøgning" #: plinth/modules/avahi/templates/avahi.html:29 #, fuzzy, python-format #| msgid "" #| "Service discovery allows other machines on the network to discover your " #| "FreedomBox and services running on it. It also allows FreedomBox to " #| "discover other machines and services running on your local network. " #| "Service discovery is not essential and works only on internal networks. " #| "It may be disabled to improve security especially when connecting to a " #| "hostile local network." msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "Tjenestesøgning gør det muligt for andre maskiner på netværket at finde din " "FreedomBox og de tjenester den tilbyder. Det gør det også muligt for " "FreedomBox at finde andre maskiner og tjenester i dit lokalnetværk. " "Tjenestesøgning er ikke påkrævet og fungerer kun på interne netværk. " "Deaktivering vil forbedre sikkerheden, specielt hvis du forbinder til et " "fjendtligt lokalnetværk." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "Status" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "Tjenestesøgningstjenesten er aktiv" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "Tjenestesøgningstjenesten er ikke aktiv" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "Konfiguration" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "Opdater indstillinger" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Konfiguration opdateret" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Indstilling uændret" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Ugyldigt domænenavn" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Værtsnavn" #: plinth/modules/config/config.py:97 #, fuzzy, python-brace-format #| msgid "" #| "Hostname is the local name by which other machines on the local network " #| "reach your machine. It must start and end with an alphabet or a digit " #| "and have as interior characters only alphabets, digits and hyphens. " #| "Total length must be 63 characters or less." msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Værtsnavn er det lokale navn under hvilket maskiner på dit lokalnetværk kan " "nå dig. Det skal starte og slutte med et bogstav eller er tal, og derimellem " "må kun være bogstaver, tal og bindestreger. Den samlede længde skal være 63 " "tegn eller derunder." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Ugyldigt værtsnavn" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Domænenavn" #: plinth/modules/config/config.py:110 #, fuzzy, python-brace-format #| msgid "" #| "Domain name is the global name by which other machines on the Internet " #| "can reach you. It must consist of labels separated by dots. Each label " #| "must start and end with an alphabet or a digit and have as interior " #| "characters only alphabets, digits and hyphens. Length of each label must " #| "be 63 characters or less. Total length of domain name must be 253 " #| "characters or less." msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "Domænenavn er det globale navn under hvilket maskiner på internettet kan nå " "dig. Det skal bestå af ord adskilt af punktummer. Hver ord skal starte og " "slutte med et bogstav eller et tal, og derimellem må kun være bogstaver, tal " "og bindestreger. Hvert ord skal være på 63 tegn eller derunder. Den samlede " "længde skal være 253 tegn eller derunder." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "Sprog" #: plinth/modules/config/config.py:127 #, fuzzy #| msgid "Language for this FreedomBox web administration interface" msgid "Language for this web administration interface" msgstr "Sprog i FreedomBox administrationsværktøjet" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Konfigurer" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "Generel Konfiguration" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "Kunne ikke sætte værtsnavn: {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "Værtsnavn gemt" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "Kunne ikke sætte domænenavn: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "Domænenavn gemt" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "Kunne ikke sætte sprog: {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "Sprog ændret" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "Indsend" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "Dato & Tid" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "Netværkstidsserver" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "NTP-klient i kontakt med servere" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "Aktiver netværkstid" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "Tidszone" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" "Sæt din tidszone for at få præcise tidsstempler. Dette vil ændre hele " "systemets tidszone." #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- ingen tidszone valgt --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" "Netværkstidsserver er et program der holder systemets tid synkroniseret med " "servere på internettet." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "Netværkstidsserver er aktiv" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "Tjenestesøgningstjenesten er ikke aktiv" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "Kunne ikke sætte tidszone: {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "Tidszone gemt" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "BitTorrent (Deluge)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "Deluge BitTorrent" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "Aktiver Deluge" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "BitTorrent Webklient (Deluge)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "Deluge er en BitTorrent-klient som har et webbaseret brugerinterface." #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" "Hvis aktiveret vil Deluge web-klienten være tilgængelig på stien /deluge på webserveren. Standardkodeordet er 'deluge', men du " "bør logge ind og ændre det med det samme du har aktiveret denne tjeneste." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "deluge-web er aktiv" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "deluge-web er ikke aktiv" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "Diagnosticering" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "Systemdiagnosticering" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "Diagnostisk Test" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" "Systemets diagnostiske test vil udføre en række tjek af dit system for at " "afgøre om applikationer og tjenester virker som forventet." #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "Kør Diagnostik" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "Diagnostisk test kører" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "Resultater" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "Modul: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "Diagnostiske Resultater" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "Modul: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "Dette modul understøtter ikke diagnostik" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "Test" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "Resultat" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Om" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dynamisk DNS" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "Variablerne <User>, <Pass>, <Ip>, <Domain> kan " "bruges i URL'en. For flere detaljer se skabelonerne for opdaterings-URL'er i " "eksemplernes tjenester." #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" "Vælg venligst en opdateringsprotokol din tjenesteudbyder understøtter. Hvis " "udbyderen ikke understøtter GnuDIP-protokollen eller ikke er prædefineret, " "kan en opdaterings-URL fra din udbyder angives direkte." #: plinth/modules/dynamicdns/dynamicdns.py:80 #, fuzzy #| msgid "" #| "Please do not enter a URL here (like \"https://example.com/\") but only " #| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Her skal ikke angives en URL (såsom \"https://example.com/\"), men blot " "værtsnavnet for GnuDIP-serveren (såsom \"example.com\")." #: plinth/modules/dynamicdns/dynamicdns.py:84 #, fuzzy, python-brace-format #| msgid "The public domain name you want use to reach your box." msgid "The public domain name you want use to reach your {box_name}." msgstr "Det offentlige domænenavn du vil bruge til at nå din boks." #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "Aktiver dette hvis din udbyder bruger selvunderskrevne certifikater." #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" "Hvis denne option er aktiveret vil dit brugernavn og kodeord blive anvendt " "til basal (\"basic\") HTTP-autentifikation." #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" "Lad dette felt stå tomt hvis du vil beholde det tidligere konfigurerede " "kodeord." #: plinth/modules/dynamicdns/dynamicdns.py:96 #, fuzzy, python-brace-format #| msgid "" #| "Optional Value. If your FreedomBox is not connected directly to the " #| "Internet (i.e. connected to a NAT router) this URL is used to figure out " #| "the real Internet IP. The URL should simply return the IP wherethe client " #| "comes from. Example: http://myip.datasystems24.de" msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" "Ikke obligatorisk. Hvis din FreedomBox ikke er tilsluttet direkte til " "internettet (hvis den f.eks.er bag en NAT-router) bruges denne URL til at " "afgøre dens offentlige IP. Denne URL skal simpelthen returnere IP-adressen " "hvorfra klientens forespørgsel kommer. Eksempel: http://myip.datasystems24.de" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "Brugernavn du har valgt ved oprettelse af konto hos tjenesteudbyderen." #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Aktiver Dynamisk DNS" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Servicetype" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnuDIP Serveradresse" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Ugyldigt servernavn" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Opdaterings-URL" #: plinth/modules/dynamicdns/dynamicdns.py:135 #, fuzzy #| msgid "accept all SSL certificates" msgid "Accept all SSL certificates" msgstr "accepter alle SSL-certifikater" #: plinth/modules/dynamicdns/dynamicdns.py:139 #, fuzzy #| msgid "use HTTP basic authentication" msgid "Use HTTP basic authentication" msgstr "brug basal (\"basic\") HTTP-autentifikation" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Brugernavn" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Kodeord" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "Vis kodeord" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "URL for IP-kontrol" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Angiv venligst opdaterings-URL eller GnuDIP-server" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Angiv venligst brugernavn til GnuDIP" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Angiv venligst domæne til GnuDIP-server" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Angiv venligst et kodeord" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Konfigurer Dynamisk DNS" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Status for Dynamisk DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 #, fuzzy #| msgid "DynamicDNS client" msgid "Dynamic DNS Client" msgstr "Dynamisk DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, fuzzy, python-format #| msgid "" #| "If your internet provider changes your IP address periodic (i.e. every " #| "24h) it may be hard for others to find you in the WEB. And for this " #| "reason nobody may find the services which are provided by FreedomBox " #| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Hvis din internetudbyder periodisk ændrer din IP-adresse (f.eks. en gang i " "døgnet), kan det være svært for andre at finde dig og de tjenester (såsom " "din ownCloud) din FreedomBox udbyder på nettet." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 #, fuzzy #| msgid "" #| "The solution is to assign a DNS name to your IP address and update the " #| "DNS name every time your IP is changed by your Internet provider. Dynamic " #| "DNS allows you to push your current public IP address to an gnudip " #| "server. Afterwards the Server will assign your DNS name with the new IP " #| "and if someone from the internet asks for your DNS name he will get your " #| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" "Løsningen er at tilknytte et DNS-navn til din IP-adresse og opdatere dette " "navn hver gang IP-adressen ændres af din udbyder. Dynamisk DNS gør det " "muligt at opdatere en GnuDIP-server med din aktuelle IP-adresse. Serveren vil " "opdatere dit DNS-navn med denne IP-adresse, således at hvis nogen på " "internettet spørger til adressen vil de få din aktuelle IP-adresse." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" "Leder du efter en gratis dynamisk DNS-konto kan du få en gratis GnuDIP-" "tjeneste på gnudip." "datasystems24.net eller du kan få en gratis URL-baseret tjeneste på freedns.afraid.org." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, fuzzy, python-format #| msgid "" #| "If your freedombox is connected behind some NAT router, don't forget to " #| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " #| "your freedombox device." msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Hvis din FreedomBox er tilsluttet bag en NAT-router, så glem ikke at " "viderestille de relevante porte (som f.eks. standard portene for HTTP 80 og " "443) fra routeren til din FreedomBox." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" "Din browser har ikke aktiveret JavaScript. Dynamiske indtastningsfelter og " "hjælpefunktionalitet virker formentlig ikke (men grundfunktionaliteten burde " "fungere)." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "NAT-type" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" "NAT-typen er ikke endnu detekteret, hvis du ikke har indtastet en \"URL for " "IP-kontrol\" kan den ikke detekteres." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 #, fuzzy #| msgid "Direct connection to the internet." msgid "Direct connection to the Internet." msgstr "Direkte forbindelse til internettet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, fuzzy, python-format #| msgid "" #| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " #| "URL\" for changes (we need the \"IP check URL\" for this reason - " #| "otherwise we will not detect IP changes). It may take up to %(timer)s " #| "minutes until we update your DNS entry in case of WAN IP change." msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" "Bagved NAT betyder at Dynamisk DNS-tjenesten med \"URL for IP-kontrol\" vil " "tjekke din IP-adresse for ændringer (vi behøver denne URL af samme grund - " "ellers kan ændringer ikke detekteres). Det kan tage op til %(timer)s " "minutter inden din DNS opdateres hvis din offentlige (WAN) IP-adresse ændres." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "Seneste opdatering" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "Firewall" #: plinth/modules/firewall/templates/firewall.html:28 #, fuzzy, python-format #| msgid "" #| "Firewall is a network security system that controls the incoming and " #| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " #| "and properly configured reduces risk of security threat from the Internet." msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" "En firewall er et netværksbeskyttelsessystem som styrer indgående og " "udgående trafik på din %(box_name)s. At holde en firewall aktiveret og " "velkonfigureret reducerer risikoen for sikkerhedstrusler fra internettet." #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" "Firewall-tjenesten er ikke aktiv. Vær venlig at starte den. Den er som " "standard aktiveret på %(box_name)s. På Debian-baserede systemer (som " "%(box_name)s er) kan den startes med kommandoen 'service firewalld start' " "eller hvis systemet bruger systemd 'systemctl start firewalld'." #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "Tjeneste/Port" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Aktiveret" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Deaktiveret" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "Tilladt" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "Tilladt (kun internt)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "Tilladt (kun eksternt)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "Blokeret" #: plinth/modules/firewall/templates/firewall.html:103 #, fuzzy #| msgid "" #| "The operation of the firewall is automatic. When you enable a service it " #| "is automatically permitted in the firewall and you disable a service is " #| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" "Denne firewall er autokonfigurerende. Når du aktiverer en tjeneste vil den " "automatiskt blive åbnet i firewallen, og når du deaktiverer en tjeneste " "blokeres den automatiskt." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "Kunne ikke oprette LDAP-bruger." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "Kunne ikke tilføje ny bruger til admin-gruppen." #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "Brugerkonto oprettet, du er nu logget ind" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "Hjælp" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 #, fuzzy #| msgid "Start setup" msgid "Start Setup" msgstr "Start opsætning" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Administratorkonto" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" "Vælg et brugernavn og kodeord der skal have adgang til dette web-interface. " "Kodeordet kan ændres senere. Brugeren vil få tildelt " "administratorrettigheder. Andre brugere kan tilføjes senere." #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Box den!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "Konfiguration er færdig!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, fuzzy, python-format #| msgid "" #| "To make your FreedomBox functional, you need some applications. " #| "Applications will be installed the first time you access them." msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" "For at kunne noget nyttigt skal din FreedomBox bruge nogle applikationer. " "Disse installeres første gang du tilgår dem." #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "Gå til Apps" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 #, fuzzy #| msgid "Network Configuration" msgid "Current Network Configuration" msgstr "Netværkskonfiguration" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 #, fuzzy #| msgid "" #| "FreedomBox setup is now complete. However, you should check the network " #| "setup and modify it if necessary. Do not forget to change the default Wi-" #| "Fi passwords." msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" "Konfigurationen af FreedomBox er nu færdig. Du bør dog kontrollere " "netværksopsætningen og tilpasse den hvis nødvendigt. Glem ikke at ændre " "standardkodeordene for Wi-Fi." #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Gå til Netværk" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Konfiguration Færdig" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "Dokumentation" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "Få Hjælp" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "Dokumentation og OSS" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "Om {box_name}" #: plinth/modules/help/help.py:73 #, fuzzy, python-brace-format #| msgid "About {box_name}" msgid "{box_name} Manual" msgstr "Om {box_name}" #: plinth/modules/help/templates/help_about.html:30 #, fuzzy, python-format #| msgid "" #| "FreedomBox is a community project to develop, design and promote personal " #| "servers running free software for private, personal communications. It " #| "is a networking appliance designed to allow interfacing with the rest of " #| "the Internet under conditions of protected privacy and data security. It " #| "hosts applications such as blog, wiki, website, social network, email, " #| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " #| "so that your data stays with you." msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" "FreedomBox er et fællesskabsdrevet projekt med det mål at udvikle, designe " "og promovere personlige servere der drives af fri software til privat og " "personlig kommunikation. Det er en netværksenhed designet til at være " "bindeled til resten af internettet under forbedrede forhold for privatliv og " "datasikkerhed. Den er vært for applikationer såsom blog, wiki, hjemmeside, " "sociale netværk, email, webproxy-filter og Tor-relæ, på en enhed der kan " "erstatte din Wi-Fi-router således at dine data bliver hos dig." #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" "Vi lever i en verden hvor vores brug af netværket er underlagt andres " "regler, andre som ofte ikke har vores interesser på deres dagsorden. Ved at " "bygge software som ikke er afhængig af centrale tjenester kan vi generobre " "kontrollen og sikre vores privatliv. Ved at opbevare vores egne data i vores " "egne hjem, opnår vi brugbar juridisk beskyttelse af den. Ved at give magten " "over netværk og maskiner tilbage til brugerne, bringer vi internettet " "tilbage til dets påtænkte peer-to-peer arkitektur." #: plinth/modules/help/templates/help_about.html:56 #, fuzzy, python-format #| msgid "" #| "There are a number of projects working to realize a future of distributed " #| "services; FreedomBox aims to bring them all together in a convenient " #| "package." msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" "Der findes et antal projekter som arbejder på at realisere en fremtid hvor " "distribuerede tjenester er mere udbredte end i dag; FreedomBox har som mål " "at kombinere alle disse i én letanvendelig pakke." #: plinth/modules/help/templates/help_about.html:64 #, fuzzy, python-format #| msgid "" #| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "For mere information om FreedomBox-projektet, se FreedomBox Wiki-siden." #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Lær mere »" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Du kører Plinth version %(version)s." #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, fuzzy, python-format #| msgid "" #| "The FreedomBox Manual is the best place to " #| "start for information regarding %(box_name)s." msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "FreedomBox Brugervejledningen er det bedste " "sted at starte når du har brug for information om %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 #, fuzzy, python-format #| msgid "" #| " " #| "FreedomBox project wiki contains further information." msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" "FreedomBox " "wiki-siden indeholder yderligere information." #: plinth/modules/help/templates/help_index.html:43 #, fuzzy, python-format #| msgid "" #| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " #| "problems faced by other users and possible solutions." msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" "Ønsker du hjælp af FreedomBox-fællesskabet, kan du skrive til postlisten. I listens arkiv kan du også finde information om " "problemer andre brugere har oplevet og muligvis løsninger på dem." #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 #, fuzzy #| msgid "Wiki & Blog (Ikiwiki)" msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki & Blog (Ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 #, fuzzy #| msgid "Ikiwiki wikis and blogs" msgid "ikiwiki wikis and blogs" msgstr "Ikiwiki wikier og blogs" #: plinth/modules/ikiwiki/forms.py:29 #, fuzzy #| msgid "Enable Ikiwiki" msgid "Enable ikiwiki" msgstr "Aktiver Ikiwiki" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "Type" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "Navn" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "Administratorkontonavn" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "Administratorkontokodeord" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" "Når aktiveret, vil blogs og wikier være tilgængelige på /ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, fuzzy, python-format #| msgid "Delete Wiki/Blog %(name)s" msgid "Delete Wiki or Blog %(name)s" msgstr "Slet Wiki/Blog %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 #, fuzzy #| msgid "" #| "This action will remove all the posts, pages and comments including " #| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" "Denne handling fjerner alle artikler, sider og kommentater inklusiv al " "historik. Slet denne wiki/blog permanent?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Slet %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "Annuller" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "Ingen wikier eller blogs tilgængelig." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "Opret en Wiki eller Blog" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "Slet sitet %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "Gå til sitet %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "Administrer" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "Opret" #: plinth/modules/ikiwiki/views.py:73 #, fuzzy #| msgid "Wiki & Blog" msgid "Wiki and Blog" msgstr "Wiki & Blog" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "Administrer Wikier og Blogs" #: plinth/modules/ikiwiki/views.py:132 #, fuzzy #| msgid "Create a Wiki or Blog" msgid "Create Wiki or Blog" msgstr "Opret en Wiki eller Blog" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "Wiki {name} oprettet." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "Kunne ikke oprette wiki: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "Blog {name} oprettet." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "Kunne ikke oprette blog: {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "{name} slettet." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "Kunne ikke slette {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 #, fuzzy #| msgid "Delete Wiki/Blog" msgid "Delete Wiki or Blog" msgstr "Slet Wiki/Blog" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 #, fuzzy #| msgid "Domain Name" msgid "Domain" msgstr "Domænenavn" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 #, fuzzy #| msgid "Security" msgid "Website Security" msgstr "Sikkerhed" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 #, fuzzy #| msgid "Applications" msgid "Actions" msgstr "Applikationer" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "Ikke tilgængelig" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "Tale-tjeneste (Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "Mumble Tale-tjenesteserver" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "Aktiver Mumble" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" "Mumble er open source software der tilbyder en højkvalitets tale-tjeneste " "med lav forsinkelse og kryptering." #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "Du kan forbinde til din Mumble-server på den sædvanlige Mumble-port 64738. " "Klienter til computere og Android-enheder " "er tilgængelige." #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "Mumble-server er aktiv" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "Mumble-server er ikke aktiv" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Navnetjenester" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Bruger DNSSEC på IPv{kind}" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "Forbindelsestype" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Forbindelsesnavn" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Fysisk Interface" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "Netværksenheden som denne forbindelse skal bindes til." #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Firewall-zone" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" "Firewall-zonen bestemmer hvilke tjenester der er tilgængelige fra dette " "interface. Vælg Kun internt for netværk du har tillid til." #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 Adresseringsmetode" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" "Metoden \"Delt\" vil starte en DHCP-server mens metoden \"Automatisk\" vil " "hente en konfiguration fra en DHCP-server." #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adresse" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Netmaske" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" "Ikke obligatorisk. Hvis ikke angivet, vil en standardværdi for netmasken " "baseret på adressen anvendes." #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Gateway" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Ikke obligatorisk." #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS-server" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Ikke obligatorisk. Hvis angivet samtidigt med at IPv4 Adresseringsmetoden er " "\"Automatisk\", vil DNS-serverne der konfigureres af en DHCP-server blive " "ignoreret." #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Sekundær DNS-server" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Ikke obligatorisk. Hvis angivet samtidigt med at IPv4 Adresseringsmetoden er " "\"Automatisk\", vil DNS-serverne der konfigureres af en DHCP-server blive " "ignoreret." #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "-- vælg --" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Netværkets synlige navn." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Tilstand" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Autentificeringstilstand" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" "Vælg WPA hvis det trådløse netværk er sikret og kræver at klienter kender " "kodeordet for at oprette forbindelse." #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Kodesætning" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Netværksforbindelser" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Wi-Fi-netværk i Nærheden" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Tilføj forbindelse" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "Netværk" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "Kan ikke vise forbindelse: Forbindelse ikke fundet." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "Vis Forbindelsesinformation" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "Kan ikke redigere forbindelse: Forbindelse ikke fundet." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "Denne type forbindelse kan ikke konfigureres herfra endnu." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Rediger Forbindelse" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Aktiverede forbindelse {name}." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Kunne ikke aktivere forbindelse: Forbindelse ikke fundet." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" "Kunne ikke aktivere forbindelse {name}: Ingen passende enhed er tilgængelig." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Deaktiverede forbindelse {name}." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Kan ikke deaktivere forbindelse: Forbindelse ikke fundet." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Tilføjer Ny Ethernet Forbindelse" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Tilføjer Ny PPPoE Forbindelse" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Tilføjer Ny Wi-Fi Forbindelse" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Slettede forbindelse {name}." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Kunne ikke slette forbindelse: Forbindelse ikke fundet." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Slet Forbindelse" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "Rediger Forbindelse" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "Rediger" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "Deaktiver" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "Aktiver" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "Slet forbindelse" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "Slet" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "Forbindelse" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "Primær forbindelse" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "ja" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "Enhed" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "Tilstand" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "Tilstandsbegrundelse" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "MAC-adresse" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "Interface" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "Beskrivelse" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "Fysisk Link" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "Linktilstand" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "kabel forbundet" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "kontroller kabling" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "Hastighed" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "Signalstyrke" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "Kanal" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IPv4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "Metode" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "IP-adresse" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "DNS-server" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "Standard" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IPv6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "Denne forbindelse er ikke aktiv." #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "Sikkerhed" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "Firewall-zone" #: plinth/modules/networks/templates/connection_show.html:280 #, fuzzy #| msgid "" #| "This interface should be connected to local network/machine. If you " #| "connect this interface to a public network, services meant to be " #| "available only internally will become available externally. This is a " #| "security risk." msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" "Dette netværksinterface er beregnet til at forbinde til et lokalt netværk " "eller maskine. Forbinder du det til et offentligt netværk, vil tjenester som " "kun er beregnet til at være internt tilgængelige blive tilgængelige udefra. " "Dette er en sikkerhedsrisiko." #: plinth/modules/networks/templates/connection_show.html:300 #, fuzzy #| msgid "" #| "This interface should receive your Internet connection. If you connect it " #| "your a local network/machine, many services meant to available only " #| "internally will not be available." msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" "Dette netværksinterface er beregnet til at modtage din internetforbindelse. " "Forbinder du det til et lokalt netværk eller maskine, vil tjenester som er " "beregnet til at være eksternt tilgængelige ikke være det." #: plinth/modules/networks/templates/connection_show.html:319 #, fuzzy, python-format #| msgid "" #| "This interface is not maintained by FreedomBox. Its security status is " #| "unknown to FreedomBox. Many FreedomBox services may not be available on " #| "this interface. It is recommended that you deactivate/delete this " #| "connection and re-configure it." msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Dette netværksinterface vedligeholdes ikke af FreedomBox. Dets " "sikkerhedsstatus er ukendt for FreedomBox. Mange FreedomBox-tjenester er " "muligvis ikke tilgængelig på dette interface. Det anbefales at du " "deaktiverer/sletter denne forbindelse og rekonfigurerer det." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "Opret..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "Opret Forbindelse" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "Slet forbindelsen %(name)s permanent?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "Internet" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "Afstand" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "Ekstern" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "Ethernet" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "Wi-Fi" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "Vis forbindelse %(connection.name)s" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "Intern" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "Vis forbindelse %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "Computer" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "Slet forbindelse %(name)s" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "Aktiv" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "Inaktiv" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "Virtuelt Privat Netværk (OpenVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "OpenVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "Aktiver OpenVPN-server" #: plinth/modules/openvpn/templates/openvpn.html:38 #, fuzzy, python-format #| msgid "" #| "Virtual Private Network (VPN) is a technique for securely connecting two " #| "machines in order to access resources of a private network. While you " #| "are away from home, you can connect to your %(box_name)s in order to join " #| "your home network and access private/internal services provided by " #| "%(box_name)s. You can also access the rest of the Internet via " #| "%(box_name)s for added security and anonymity." msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "Et Virtuelt Privat Netværk (VPN) er en teknik der på en sikker måde kan " "forbinde to maskiner, så ressourcerne på et privat netværk kan deles. Mens " "du er fysisk væk fra dit hjem, kan du forbinde til din %(box_name)s for at " "blive en del af dit hjemmenetværk og tilgå private/interne tjenester der " "udbydes af %(box_name)s. Du kan også tilgå resten af internettet igennem " "%(box_name)s for øget sikkerhed og anonymitet." #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "Profil" #: plinth/modules/openvpn/templates/openvpn.html:54 #, fuzzy, python-format #| msgid "" #| "To connect to %(box_name)s's VPN, you need to download a profile and feed " #| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " #| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " #| "configure them." msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "For at forbinde til %(box_name)ss VPN skal du downloade en profil og " "installere den i en OpenVPN-klient på din mobil eller computer. OpenVPN-" "klienter er tilgængelige på de fleste platforme. Se mere dokumentation om anbefalede klienter og instruktioner til " "opsætning af dem." #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" "Profilen er dannet specifikt til hver bruger af %(box_name)s. Hold den " "hemmelig." #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "Hent min profil" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" "OpenVPN er endnu ikke konfigureret. At udføre en sikker konfiguration tager " "meget lang tid. Afhængig af hvor hurtig din %(box_name)s er, kan det tage " "flere timer. Hvis processen afbrydes kan den blot genstartes." #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "Start opsætning" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "OpenVPN-opsætning kører" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" "At udføre en sikker konfiguration tager meget lang tid. Afhængig af hvor " "hurtig din %(box_name)s er, kan det tage flere timer. Hvis processen " "afbrydes kan den blot genstartes." #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "OpenVPN-server er aktiv" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "OpenVPN-server er ikke aktiv" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "Opsætning færdig." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "Opsætning fejlede." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "Aktiver ownCloud" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "Fil-hosting (ownCloud)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "ownCloud" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "ownCloud aktiveret" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "ownCloud deaktiveret" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" "ownCloud giver dig universel adgang til dine filer gennem et webinterface " "eller WebDAV-protokollen. Den giver dig også en platform til nemt at se og " "synkronisere kontakter, kalendre og bogmærker på tværs af dine enheder, og " "giver dig tilmed også basale redigeringsmuligheder direkte på webbet. " "Installationen sætter minimale krav til serveren, har ikke brug for " "specielle rettigheder og er hurtig. ownCloud kan udvides igennem et simpelt " "men kraftfuldt API til applikationer og udvidelser." #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" "Når aktiveret vil ownCloud-tjenesten være tilgængelig på stien /owncloud på webserveren. Gå til denne URL for at konfigurere " "administrationskontoen." #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "Aktiver ændringer" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "Offentlig Tilgængelighed (PageKite)" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "Aktiver PageKite" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "Serverdomæne" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" "Vælg din PageKite-server. Brug \"pagekite.net\" hvis du vil bruge " "standardserveren fra pagekite.net." #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "Serverport" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "PageKite-serverport (standard: 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "Kite-navn" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "Eksempel: mybox.pagekite.me" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "Ugyldigt kite-name" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "Kite-hemmelighed" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" "En hemmelighed tilknyttet denne kite, eller standard-hemmeligheden for din " "konto hvis der ikke er defineret nogen for denne kite." #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "Kite-detaljer gemt" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "PageKite-server gemt" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "PageKite aktiveret" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "PageKite deaktiveret" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "Tjeneste aktiv: {name}" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "Tjeneste ikke aktiv: {name}" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "protokol" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "ekstern (WAN) port" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "intern (FreedomBox) port" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "Aktiver Subdomæner" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "Brugerdefineret tjeneste slettet" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" "Denne tjeneste er tilgængelig som en standardtjeneste. Brug venligst siden " "\"Standardtjenester\" for at aktivere den." #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "Tilføjet brugerdefineret tjeneste" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "Denne tjeneste eksisterer allerede" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "PageKite-konto" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "Gem indstillinger" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" "Advarsel:
Din PageKite-udbyders frontend server understøtter ikke " "nødvendigvis alle de kombinationer af protokoller og porte du kan definere " "her. For eksempel er HTTPS på andre porte end 443 kendt for at give " "problemer." #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "Opret en brugerdefineret tjeneste" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "Tilføj Service" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "Eksisterende brugerdefinerede tjenester" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "Du har ikke nogen aktive brugerdefinerede tjenester" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "forbundet til %(backend_host)s:%(backend_port)s" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "Slet denne tjeneste" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" "PageKite er et system der kan eksponere tjenesterne på %(box_name)s, når du " "ikke har en direkte forbindelse til internettet, Du har kun brug for dette " "hvis %(box_name)s tjenester ikke kan nås fra resten af internettet. Dette " "inkluderer de følgende situationer:" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "%(box_name)s er bag en restriktiv firewall." #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" "%(box_name)s er forbundet til en (trådløs) router som du ikke selv " "kontrollerer." #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" "Din internetudbyder tildeler dig ikke en ekstern IP-adresse, men giver dig " "forbindelse gennem NAT." #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" "Din internetudbyder tildeler dig ikke en fast IP-adresse, og din IP-adresse " "ændres hver gang du fobinder til nettet." #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "Din internetudbyder begrænser indgående forbindelser." #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" "PageKite omgår NAT, firewalls og begrænsninger på IP-adresser ved at bruge " "en kombination af tunneller og omvendte proxier. Du kan bruge enhver " "PageKite-udbyder, eksempelvis pagekite." "net. I fremtiden vil det måske blive muligt at bruge din vens " "%(box_name)s til dette." #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "Konfigurer PageKite" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "Advarsel:
" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" "Tjenester du gør tilgængelige vil kunne tilgås og angribes fra det store " "onde internet." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" "Aktivering af SSH med stadardkodeordet for brugeren 'fbx' er en MEGET DÅRLIG " "ide." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "Gem Tjenester" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "Webserver (HTTP)" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "Siden vil være tilgængelig på http://{0}" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "Webserver (HTTPS)" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "Siden vil være tilgængelig på https://{0}" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "Secure Shell (SSH)" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" "Se instruktioner for opsætning af SSH-klient" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "PageKite" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "Om PageKite" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "Standardtjenester" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "Brugerdefinerede Tjenester" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "Strøm" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "Genstart eller luk systemet." #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "Genstart »" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "Sluk »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" "Er du sikker på at du vil genstarte? Du vil ikke kunne tilgå dette " "webinterface i et par minutter indtil systemet er genstartet." #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "Genstart Nu" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" "Er du sikker på at du vil slukke? Du vil ikke kunne tilgå dette webinterface " "efter slukning." #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "Sluk Nu" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "Webproxy (Privoxy)" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "Privoxy Webproxy" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Tilgå {url} med proxy {proxy} ved brug af tcp{kind}" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "Aktiver Privoxy" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" "Privoxy er en ikke-cachende webproxy med avancerede filtreringsmuligheder " "der kan forbedre sikkerheden for dit privatliv, modificere hjemmesidedata og " "HTTP-headers, styre adgang og fjerne reklamer og andet vedderstyggeligt " "internetskrald." #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" "Du anvender Privoxy ved at konfigurere din browser til at bruge en proxy-" "forbindelse via din %(box_name)s værtsnavn (eller IP-adresse) på port-nummer " "8118. Mens du bruger Privoxy kan konfigurationsdetaljer og dokumentation ses " "på http://config.privoxy.org/ " "eller http://p.p." #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "Privoxy er aktiv" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "Privoxy er ikke aktiv" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "IRC-klient (Quassel)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "Quassel IRC-klient" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "Aktiver Quassel grund-tjeneste" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" "Quassel er en IRC-applikation som er opdelt i to; en \"kerne\" og en \"klient" "\". Dette gør det muligt for kerne-delen at forblive tilsluttet til IRC-" "servere og fortsætte med at modtage beskeder, selv når klienten afbryder " "forbindelsen. %(box_name)s kan køre Quassel kerne-tjenesten og holde dig " "kontinuerligt online, og du vil kunne bruge en eller flere Quassel-klienter " "fra en computer eller en mobil til at forbinde til den." #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" "Du kan forbinde til din Quassel kerne-tjeneste på standardporten 4242. " "Klienter til at forbinde fra din computer og mobile enhed er tilgængelige." #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "Quassel kerne-tjeneste er aktiv" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "Quassel kerne-tjeneste er ikke aktiv" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 #, fuzzy #| msgid "Server port" msgid "SIP Server (repro)" msgstr "Serverport" #: plinth/modules/repro/__init__.py:41 #, fuzzy #| msgid "Second DNS Server" msgid "repro SIP Server" msgstr "Sekundær DNS-server" #: plinth/modules/repro/forms.py:29 #, fuzzy #| msgid "Enable Quassel core service" msgid "Enable repro service" msgstr "Aktiver Quassel grund-tjeneste" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 #, fuzzy #| msgid "Quassel core service is running" msgid "repro service is running" msgstr "Quassel kerne-tjeneste er aktiv" #: plinth/modules/repro/templates/repro.html:66 #, fuzzy #| msgid "Quassel core service is not running" msgid "repro service is not running" msgstr "Quassel kerne-tjeneste er ikke aktiv" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "Ikke-hostet Lagerplads (reStore)" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "reStore" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "Aktiver reStore" #: plinth/modules/restore/templates/restore_index.html:29 #, fuzzy, python-format #| msgid "" #| "reStore is a server for unhosted web " #| "applications. The idea is to uncouple web applications from data. No " #| "matter where a web application is served from, the data can be stored on " #| "an unhosted storage server of user's choice. With reStore, your " #| "%(cfg.box_name)s becomes your unhosted storage server." msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" "reStore er en server til brug for ikke-hostede web-applilkationer som " "anvender standarden kaldet unhosted.org. " "Grundideen er at afkoble selve applikationen fra dens data. Ligegyldigt hvor " "en web-applikation indlæses fra, kan data gemmes i et unhosted datalager " "efter brugerens valg. Med reStore bliver din %(cfg.box_name)s dit unhosted " "datalager." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" "Du kan oprette og redigere kontoer i reStores " "webbrugerflade." #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "Emailklient (Roundcube)" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "Aktiver Roundcube" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" "Roundcube webmail er en browserbaseret flersproget IMAP-klient med et " "applikationslignende brugerinterface. Den leverer den fulde funktionalitet " "du forventer af en emailklient, inklusiv MIME-understøttelse, lagring af " "kontaktpersoner, mappe-administration, beskedsøgning og stavekontrol." #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" "Du kan tilgå Roundcube på /roundcube. Angiv " "brugernavn og kodeord til emailkontoen du ønsker at få adgang til, fulgt af " "domænenavnet for din emailudbyders IMAP-server, som eksempelvis imap." "example.com. Vil du bruge IMAP over SSL (hvilket anbefales) skal du " "også angive protokollen således imaps://imap.example.com." #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" "Ved tilgang til Gmail skal brugernavnet være din komplette Gmail-adresse, " "kodeordet dit Google-konto kodeord og serveren imaps://imap.gmail.com. Bemærk at du også er nødt til at aktivere \"Adgang for mindre sikre " "apps\" (engelsk: \"Access for less secure apps\") i indstillingerne for din " "Google-konto (https://www.google.com/settings/security/lesssecureapps)." #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "Bogmærker (Shaarli)" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "Shaarli" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "Aktiver Shaarli" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "Shaarli tillader dig at gemme og dele bogmærker." #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" "Når aktiveret, vil Shaarli være tilgængelig på stien /" "shaarli på webserveren. Bemærk at Shaarli kun understøtter en enkelt " "brugerkonto, som skal sættes op ved det første besøg." #: plinth/modules/system/system.py:26 msgid "System" msgstr "System" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Systemkonfiguration" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "Her administrerer du det underliggende system på din %(box_name)s." #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" "Disse muligheder påvirker %(box_name)s på det meste grundlæggende niveau, så " "vær forsigtig!" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "Anonymiseringstjeneste (Tor)" #: plinth/modules/tor/__init__.py:53 #, fuzzy #| msgid "Anonymity Network (Tor)" msgid "Tor Anonymity Network" msgstr "Anonymiseringstjeneste (Tor)" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "Tor Skjult Tjeneste" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor videresendelsesport tilgængelig" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3 transport registreret" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4 transport registreret" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Tilgå URL {url} ved brug af tcp{kind} via Tor" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bekræft brug af Tor på {url} ved brug af tcp{kind}" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "Aktiver Tor" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "Aktiver Tor Skjult Tjeneste" #: plinth/modules/tor/forms.py:38 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow FreedomBox to provide selected services (such " #| "as ownCloud or Chat) without revealing its location." msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" "En skjult tjeneste tillader FreedomBox at levere udvalgte tjenester (såsom " "ownCloud og Chat) uden at afsløre sin lokation." #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "Hent softwarepakker over Tor" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" "Når aktiveret, vil softwareinstallationer og opdateringer blive hentet over " "Tor-netværket. Dette giver en vis grad af privatlivsbeskyttelse og sikkerhed " "under hentningen." #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" "Tor er et system der muliggør anonym kommunikation. Du kan lære mere om det " "på Tor-projektets hjemmeside. " "For den bedste beskyttelse når du bruger webbet, anbefaler Tor-projektet at " "du bruger Tor-browseren." #: plinth/modules/tor/templates/tor.html:54 #, fuzzy #| msgid "Configuration updated" msgid "Tor configuration is being updated" msgstr "Konfiguration opdateret" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor er aktiv" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor er ikke aktiv" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Skjult Tjeneste" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Port" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Bro" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" "Din %(box_name)s er konfigureret som en Tor-bro med obfsproxy, så den kan " "hjælpe til med at omgå internetcensur. Hvis din %(box_name)s er bagved en " "router eller firewall, bør du sikre at de følgende porte er åbne, eller " "viderestillede, hvis nødvendigt:" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Tjeneste" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "En Tor SOCKS-port er tilgængelig på din %(box_name)s TCP-port 9050." #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor Kontrolpanel" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Fejl under handling: {0} [{1}] [{2}]" #: plinth/modules/tor/views.py:148 #, fuzzy #| msgid "Configuration updated" msgid "Configuration updated." msgstr "Konfiguration opdateret" #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "Transmission BitTorrent" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "Aktiver Transmission" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "Download-mappe" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" "Mappe hvori downloadede filer gemmes. Hvis du ændrer standardindstillingen, " "skal du sikre dig at den nye mappe eksisterer og er skrivbar af brugeren " "\"debian-transmission\"." #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "Brugernavn til log ind på webbrugerfladen." #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" "Kodeord til log ind på webbrugerfladen. Det nuværende kodeord vises i et " "forvansket hash-format. Indtast et password i ren tekst for at ændre " "kodeordet." #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" "BitTorrent er en peer-to-peer/P2P (decentral) fildelingsprotokol. " "Transmission håndterer BitTorrent fildeling. Bemærk at BitTorrent ikke " "anonymiserer trafik." #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "Tilgå webbrugerfladen på /transmission." #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "Transmission er aktiv" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "Transmission er ikke aktiv." #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "Softwareopdateringer" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "Aktiver automatiske opdateringer" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" "Når aktiveret, vil programmet unattended-upgrades blive kørt en gang " "dagligt. Dette vil forsøge at opdatere alle tilgængelige pakker." #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Opdater nu »" #: plinth/modules/upgrades/templates/upgrades.html:65 #, fuzzy #| msgid "ejabberd is running" msgid "A package manager is running." msgstr "ejabberd er aktiv" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Automatisk Opdatering" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Opdater Pakker" #: plinth/modules/upgrades/views.py:96 #, fuzzy #| msgid "Upgrade completed." msgid "Upgrade process started." msgstr "Opdatering færdig." #: plinth/modules/upgrades/views.py:99 #, fuzzy #| msgid "Upgrade failed." msgid "Starting upgrade failed." msgstr "Opdatering fejlede." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Pakkeopdateringer" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" "Kunne ikke konfigurere automatisk opdatering (unattended-upgrades): {error}" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Automatisk opdatering aktiveret" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Automatisk opdatering deaktiveret" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Brugere og Grupper" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Kontrol af LDAP-konfiguration \"{search_item}\"" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "admin" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "wiki" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "Grupper" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" "Vælg hvilke tjenester der skal være tilgængelige for den nye bruger. " "Brugeren vil være i stand til at logge ind på tjenester som understøtter " "\"single sign-on\" (SSO) gennem LDAP, hvis de tilhører den rigtige gruppe." "

Brugere i admin-gruppen vil være i stand til at logge ind i alle " "tjenester. De kan også logge ind på systemet gennem SSH og har " "administratorprivilegier (sudo)." #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "Kunne ikke tilføje ny bruger til gruppen {group}." #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "Kunne ikke omdøbe LDAP-bruger." #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Kunne ikke fjerne bruger fra gruppe." #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Kunne ikke tilføje bruger til gruppe." #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Kunne ikke ændre LDAP-kodeord." #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "Ændr Kodeord for %(username)s" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "Gem Kodeord" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "Opret Bruger" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Slet Bruger" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "Slet bruger %(username)s permanent?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "Slet %(username)s" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "Slet bruger %(username)s" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "Rediger Bruger %(username)s" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" "Brug siden til kodeordsændring for at " "ændre kodeord." #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "Gem Ændringer" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "Brugere" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "Bruger %(username)s oprettet." #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "Bruger %(username)s opdateret." #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "Rediger Bruger" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Brugeren {user} slettet." #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "Kunne ikke slette LDAP-bruger." #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Ændr kodeord" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Kodeord blev ændret." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "Chat-server (XMPP)" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "Aktiver XMPP" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" "XMPP er en åben og standardiseret kommunikationsprotokol. Her kan du " "aktivere og konfigurere din XMPP-server, kaldet ejabberd." #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" "For rent faktisk at kommunikere, kan du bruge web-" "klienten eller enhver anden XMPP-klient." #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" "Domænet for din XMPP-server er sat til %(domainname)s. Brugernavne " "vil se ud som brugernavn@%(domainname)s. Du kan konfigurere systemets " "domæne på Konfigurer siden." #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "Kør webklient" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "ejabberd er aktiv" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "ejabberd er ikke aktiv" #: plinth/network.py:39 msgid "PPPoE" msgstr "PPPoE" #: plinth/package.py:156 msgid "packages not found" msgstr "pakker ikke fundet" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "Installation og konfiguration af pakker lykkedes." #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "Kunne ikke installere pakker: {string} {details}" #: plinth/service.py:73 msgid "Web Server" msgstr "Webserver" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "Sikker Webserver (via SSL)" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "Secure Shell (SSH) Server" #: plinth/service.py:79 #, fuzzy, python-brace-format #| msgid "FreedomBox Web Interface (Plinth)" msgid "{box_name} Web Interface (Plinth)" msgstr "FreedomBox Web-brugerflade (Plinth)" #: plinth/templates/404.html:25 msgid "404" msgstr "404" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "Den forespurgte side %(request_path)s blev ikke fundet." #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" "Mener du denne manglende side burde eksistere, så rapporter venligst dette " "som en fejl i Plinth-projektets fejlhåndteringsværktøj." #: plinth/templates/500.html:25 msgid "500" msgstr "500" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" "Dette er en intern fejl og ikke noget du forårsagede eller selv kan udbedre. " "Rapporter venligst fejlen i fejlhåndteringsvørktøjet så vi kan rette den." #: plinth/templates/base.html:49 #, fuzzy, python-format #| msgid "Plinth administrative interface for the FreedomBox" msgid "Plinth administrative interface for the %(box_name)s" msgstr "Plinth administrationsværktøj til FreedomBox" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Åbn/luk navigation" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Ændr kodeord" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Log ud" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Log ind" #: plinth/templates/login.html:35 msgid "Login" msgstr "Log ind" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "Installation" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" "Denne funktionalitet kræver installation af yderligere pakker. Ønsker du at " "installere disse?" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "Pakkenavn" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "Pakkebeskrivelse" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "Installer" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "Installerer %(package_names)s: %(status)s" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% færdig" #~ msgid "show password" #~ msgstr "vis kodeord" #~ msgid "The following is the current status:" #~ msgstr "Den nuværende status er som følger:" #~ msgid "Congratulations! Your FreedomBox is up and running!" #~ msgstr "Tillykke! Din FreedomBox er nu kørende!" #~ msgid "" #~ "Please provide the following basic information to complete the setup " #~ "process." #~ msgstr "" #~ "Indtast venligst følgende grundoplysninger for at færdiggøre " #~ "konfigurationen." #~ msgid "Next" #~ msgstr "Næste" #~ msgid "FreedomBox Manual" #~ msgstr "FreedomBox Brugervejledning" #~ msgid "" #~ "Many FreedomBox contributors and users are also available on the " #~ "#freedombox channel of the irc.oftc.net IRC network." #~ msgstr "" #~ "Mange bidragsydere og brugere af FreedomBox er også at finde i kanalen " #~ "#freedombox på irc.oftc.net IRC-netværket." #~ msgid "Create Wiki/Blog" #~ msgstr "Opret Wiki/Blog" #~ msgid "" #~ "Select Automatic (DHCP) if you are connecting to an existing wireless " #~ "network. Shared mode is useful when running an Access Point." #~ msgstr "" #~ "Vælg \"Automatisk\" (DHCP) hvis du forbinder til et eksisterende trådløst " #~ "netværk. \"Delt\"-metoden er nyttig hvis enheden skal fungere som " #~ "accesspunkt." #~ msgid "Tor enabled" #~ msgstr "Tor aktiveret" #~ msgid "Tor disabled" #~ msgstr "Tor deaktiveret" #~ msgid "Tor hidden service enabled" #~ msgstr "Anonymiseringstjenesten Tor aktiveret" #~ msgid "Tor hidden service disabled" #~ msgstr "Anonymiseringstjenesten Tor deaktiveret" #~ msgid "Enabled package download over Tor" #~ msgstr "Pakke-hentning over Tor aktiveret" #~ msgid "Disabled package download over Tor" #~ msgstr "Pakke-hentning over Tor deaktiveret" #~ msgid "There was an error while upgrading." #~ msgstr "Fejl under opdatering." #~ msgid "Output from unattended-upgrades:" #~ msgstr "Uddata fra unattended-upgrades:" #~ msgid "The operating system is up to date now.  " #~ msgstr "Operativsystemet er nu opdateret.  " #~ msgid "Show Details" #~ msgstr "Vis Detaljer" #~ msgid "" #~ "This will run unattended-upgrades, which will attempt to upgrade your " #~ "system with the latest Debian packages. It may take a few minutes to " #~ "complete." #~ msgstr "" #~ "Dette vil køre programmet unattended-upgrades som forsøger at opdatere " #~ "dit system med de nyeste Debian-pakker. Dette kan tage nogle minutter at " #~ "gennemføre." #~ msgid "System is being upgraded." #~ msgstr "Systemet opdateres." #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." #~ msgstr "" #~ "Du kan installere og køre forskellige tjenester og applikationer på din " #~ "%(box_name)s." #~ msgid "Physical interface" #~ msgstr "Fysisk interface" #~ msgid "Delete Connection %(name)s" #~ msgstr "Slet Forbindelse %(name)s" #~ msgid "Bittorrent (Transmission)" #~ msgstr "BitTorrent (Transmission)" #~ msgid "Delete user permanently?" #~ msgstr "Slet bruger permanent?" #~ msgid "Edit User %(username)s" #~ msgstr "Rediger Bruger %(username)s" Plinth-0.8.1/plinth/locale/da/LC_MESSAGES/terms.org000066400000000000000000000033551266051671100215420ustar00rootroot00000000000000List of commonly used terms with multiple Danish Translation candidates and the one used for Plinth. Generally it has been sought to use the "less techy" option with a good established meaning in commonly spoken Danish. Also with a preference towards words with Danish origins but avoiding the trap of Danishifying too much making the language incomprehensible. This list should be kept in sync with the actual translation. | English | Dansk | | password | kodeord | | hostname | værtsnavn | | domain name | domænenavn | | create | opret | | enable | aktiver | | disable | deaktiver | | running (about service) | aktiv | | not running (about service) | ikke aktiv | | (network) interface | netværksinterface | | (web) interface | webbrugerflade/brugerflade | | firewall | firewall | | ISP | internetudbyder | | download | download | | directory | mappe | | setup | konfiguration/konfigureret | | bookmarks | bogmærker | | hosted | hostet | | upgrade | opdater | | character | tegn | | default | som standard | | Wi-Fi | Wi-Fi | Plinth-0.8.1/plinth/locale/de/000077500000000000000000000000001266051671100161105ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/de/LC_MESSAGES/000077500000000000000000000000001266051671100176755ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/de/LC_MESSAGES/django.po000066400000000000000000004006411266051671100215040ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Dietmar, 2015 # steglicd , 2015 msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2016-02-12 18:31+0000\n" "Last-Translator: Dietmar \n" "Language-Team: German " "\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "Gebunden auf {kind} Port {listen_address}:{port}" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "Gebunden an {kind} Port {port}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "Zugangs URL {url} via TCP{kind}" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "Zugangs URL {url}" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "Verbinden zu {host}:{port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "Verbindung zu {host}:{port} fehlgeschlagen" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FreedomBox" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Apps" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Anwendungen" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "Dienste und Anwendungen" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" "Sie können verschiedene Dienste und Anwendungen auf Ihrer %(box_name)s " "installieren und verwenden. Klicken Sie auf einen App-Link auf der linken " "Seite, um eine Beschreibung der Anwendung zu lesen und sie eventuell zu " "installieren." #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "Diese Box kann zum Teilen von Fotos, zum Chatten, für eigene Soziale " "Netzwerke oder als News Seite genutzt werden. Mit dieser Box ist es möglich " "Dienste selbst zu betreiben und damit wieder Kontrolle über die eigenen " "Daten zu erlangen!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "Dienste-Erkennung" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "Dienste-Erkennung einschalten" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format #| msgid "" #| "Service discovery allows other machines on the network to discover your " #| "FreedomBox and services running on it. It also allows FreedomBox to " #| "discover other machines and services running on your local network. " #| "Service discovery is not essential and works only on internal networks. " #| "It may be disabled to improve security especially when connecting to a " #| "hostile local network." msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "Die Dienste-Erkennung erlaubt es anderen Geräten im Netzwerk Ihre %(box_name)" "s und deren Dienste zu finden. Zudem erlaubt es %(box_name)s andere Geräte " "im Netzwerk ausfindig zu machen. Dienste-Erkennung ist nicht zwingend " "erforderlich und funktioniert nur in internen Netzen. Es kann deaktiviert " "werden um die Sicherheit vor allem in einem unsicheren Netz zu erhöhen." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "Status" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "Dienste-Erkennung läuft" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "Dienste-Erkennung läuft nicht" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "Konfiguration" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "Installation aktualisieren" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Konfiguration aktualisiert" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Einstellung unverändert" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Ungültiger Domain Name" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Hostname" #: plinth/modules/config/config.py:97 #, python-brace-format #| msgid "" #| "Hostname is the local name by which other machines on the local network " #| "reach your machine. It must start and end with an alphabet or a digit " #| "and have as interior characters only alphabets, digits and hyphens. " #| "Total length must be 63 characters or less." msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Ein Hostname ist der lokale Name unter dem andere Geräte im lokalen Netzwerk " "Ihre {box_name} erreichen können. Er muss alphanumerisch sein, mit einem " "Buchstaben beginnen und enden und darf nicht länger als 63 Zeichen sein." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Ungültiger Hostname" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Domain-Name" #: plinth/modules/config/config.py:110 #, python-brace-format #| msgid "" #| "Domain name is the global name by which other machines on the Internet " #| "can reach you. It must consist of labels separated by dots. Each label " #| "must start and end with an alphabet or a digit and have as interior " #| "characters only alphabets, digits and hyphens. Length of each label must " #| "be 63 characters or less. Total length of domain name must be 253 " #| "characters or less." msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "Ein Domainname ist der globale Name unter dem andere Geräte im Internet Ihre " "{box_name} erreichen können. Er muss aus durch Punkte getrennte Kennungen " "bestehen. Jede Kennung muss alphanumerisch beginnen und enden und aus " "alphanumerischen Zeichen und Bindestrichen bestehen. Jede Kennung darf " "maximal 63 Zeichen lang sein, die Gesamtlänge des Domainnames 253 Zeichen." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "Sprache" #: plinth/modules/config/config.py:127 #| msgid "Language for this FreedomBox web administration interface" msgid "Language for this web administration interface" msgstr "Sprache dieses Web-Interfaces" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Konfigurieren" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "Allgemeine Konfiguration" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "Fehler beim Setzen des Hostnamens: {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "Hostname gesetzt" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "Fehler beim Setzen des Domain Namens: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "Domain Name nicht gesetzt" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "Fehler beim Setzen der Sprache: {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "Sprache geändert" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "Absenden" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "Datum und Uhrzeit" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "Netzwerk Zeit-Server" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "NTP Client ist mit Servern in Kontakt" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "Netzwerk Zeit aktivieren" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "Zeitzone" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" "Stellen Sie hier Ihre Zeitzone ein. Dies wird die systemweite Uhrzeit setzen." #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- keine Zeitzone gesetzt --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" "Der Netzwerk-Zeitserver synchronisiert Ihre Systemzeit mit Servern im " "Internet." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "NTP (Network Time Protocoll) Server läuft" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "NTP (Network Time Protocoll) Server läuft nicht" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "Fehler beim Setzen der Zeitzone: {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "Zeitzone gesetzt" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "BitTorrent (Deluge)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "Deluge BitTorrent" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "Deluge einschalten" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "BitTorrent Web Client (Deluge)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "Deluge ist ein BitTorrent Client mit einer Web-Oberfläche." #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" "Wenn aktiviert, ist die Deluge Web-Oberfläche über /" "deluge verfügbar. Das Standard-Passwort lautet 'deluge' aber dieses " "sollte sofort nach dem ersten Anmelden geändert werden." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "deluge-web läuft" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "deluge-web läuft nicht" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "Diagnose" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "System-Diagnose" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "Diagnose Test" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" "Der System-Diagnose-Test wird eine Reihe von Tests auf dem System " "durchführen um zu überprüfen ob alle Anwendungen und Dienste korrekt " "funktionieren." #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "Diagnose starten" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "Diagnose läuft aktuell" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "Resultat" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "Modul: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "Diagnose Ergebnis" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "Modul: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "Dieses Modul unterstützt keine Diagnose" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "Test" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "Ergebnis" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Über" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dynamisches DNS" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "Die Variablen <User>, <Pass>, <Ip>, <Domain> können " "in der URL verwendet werden. Beispiele sind in den update URLs der " "vorkonfigurierten Anbieter zu finden." #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" "Bitte wählen Sie ein Aktualisierungsprotokoll Ihres Anbieters. Wenn der " "Anbieter GnuDIP nicht unterstützt oder der Anbieter nicht aufgeführt ist, " "kann die Aktualisierungs-URL Ihres Anbieters angegeben werden." #: plinth/modules/dynamicdns/dynamicdns.py:80 #| msgid "" #| "Please do not enter a URL here (like \"https://example.com/\") but only " #| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Bitte hier keine URL (wie \"https://example.com/\") eingeben, sondern nur " "den Hostnamen des GnuDIP Servers (wie \"example.com\")." #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format #| msgid "The public domain name you want use to reach your box." msgid "The public domain name you want use to reach your {box_name}." msgstr "" "Der öffentliche Domain Name unter dem Ihre {box_name} erreichbar sein soll." #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Verwenden Sie diese Option wenn Ihr Anbieter selbst-signierte Zertifikate " "verwendet." #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" "Diese Option führt dazu, dass der Nutzername und das Passwort des Dynamic " "DNS Kontos auch zur HTTP Authentifizierung für die update URL verwendet " "werden." #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "Wird dieses Feld leer gelassen, dann bleibt das Passwort unverändert." #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format #| msgid "" #| "Optional Value. If your FreedomBox is not connected directly to the " #| "Internet (i.e. connected to a NAT router) this URL is used to figure out " #| "the real Internet IP. The URL should simply return the IP wherethe client " #| "comes from. Example: http://myip.datasystems24.de" msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" "Optionaler Wert. Wenn Ihre {box_name} nicht direkt mit dem Internet " "verbunden ist, (zum Beispiel über ein NAT) wird diese URL verwendet um die " "öffentliche IP Adresse in Erfahrung zu bringen. Die URL sollte einfach nur " "IP-Adresse des Clients liefern (zum Beispiel: http://myip.datasystems24.de)." #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" "Beim Erstellen des Nutzer Kontos sollte der Anbieter zur Vergabe eines " "Passwortes aufgefordert haben." #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Dynamisches DNS einschalten" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Dienst Typ" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnuDIP Server Adresse" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Ungültiger Server Name" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Update URL" #: plinth/modules/dynamicdns/dynamicdns.py:135 #| msgid "accept all SSL certificates" msgid "Accept all SSL certificates" msgstr "Alle Zertifikate akzeptieren" #: plinth/modules/dynamicdns/dynamicdns.py:139 #| msgid "use HTTP basic authentication" msgid "Use HTTP basic authentication" msgstr "HTTP basic authentication verwenden" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Benutzername" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Passwort" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "Zeige Passwort" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "URL zur Erkennung der IP-Adresse" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Bitte eine update URL oder einen GnuDIP Server angeben" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Bitte GnuDIP Nutzernamen angeben" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Bitte GnuDIP Domain angeben" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Bitte ein Passwort angeben" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Dynamisches DNS konfigurieren" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Status des Dynamischen DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 #| msgid "DynamicDNS client" msgid "Dynamic DNS Client" msgstr "Dynamischer DNS Client" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format #| msgid "" #| "If your internet provider changes your IP address periodic (i.e. every " #| "24h) it may be hard for others to find you in the WEB. And for this " #| "reason nobody may find the services which are provided by FreedomBox " #| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Wenn Ihr Internetanbieter die öffentliche IP Adresse zyklisch erneuert (zum " "Beispiel alle 24 Stunden) dann ist es für andere Internetnutzer nicht " "möglich Sie im Netz zu finden. Aus diesem Grund können %(box_name)s Dienste " "wie zum Beispiel ownCloud nicht aus dem Internet erreicht werden." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 #| msgid "" #| "The solution is to assign a DNS name to your IP address and update the " #| "DNS name every time your IP is changed by your Internet provider. Dynamic " #| "DNS allows you to push your current public IP address to an gnudip " #| "server. Afterwards the Server will assign your DNS name with the new IP " #| "and if someone from the internet asks for your DNS name he will get your " #| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" "Die Lösung ist, einen Dynamischen Domain Namen (DNS) mit der IP-Adresse zu " "verknüpfen und diesen DNS Eintrag jedes mal zu aktualisieren wenn sich die " "IP Adresse ändert. Dynamisches DNS erlaubt es die aktuelle IP Adresse zu " "einem gnudip " "Server zu übertragen. Anschließend wird der Server die aktuelle IP Adresse " "mit dem DNS Namen verknüpfen und wenn jemand aus dem Internet nach Ihrem DNS " "Namen sucht erhält er die aktuelle IP-Adresse." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" "Ein kostenloser Anbieter für Dynamisches DNS mittels GnuDIP ist unter " "anderem gnudip." "datasystems24.net. \n" "Aber auch andere Anbieter wie freedns.afraid.org können per update URL genutzt werden." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format #| msgid "" #| "If your freedombox is connected behind some NAT router, don't forget to " #| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " #| "your freedombox device." msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Wenn Ihre %(box_name)s an einen NAT Router angeschlossen ist, muss " "zusätzlich ein Portforwarding im Router eingerichtet werden (zum Beispiel " "Standard Ports wie 80 und 443)." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" "Javasript ist deaktiviert. Der Dynamische Formularmodus ist damit nicht " "möglich und einige Hilfsfunktionen können nicht funktionieren (aber die " "Hauptfunktionalität sollte gegeben sein)." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "NAT Typ" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" "Der NAT Typ konnte noch nicht erkannt werden. Wenn keine \"IP check URL\" " "angegeben wurde, dann kann der NAT Typ nicht erkannt werden." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 #| msgid "Direct connection to the internet." msgid "Direct connection to the Internet." msgstr "Direkte Verbindung zum Internet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format #| msgid "" #| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " #| "URL\" for changes (we need the \"IP check URL\" for this reason - " #| "otherwise we will not detect IP changes). It may take up to %(timer)s " #| "minutes until we update your DNS entry in case of WAN IP change." msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" "Hinter einem NAT; das bedeutet dass der Dynamische DNS Dienst zyklisch die \"" "IP check URL\" abfragen wird (aus diesem Grund wird eine \"IP check URL\" " "zwingend benötigt). Nach einer Änderung der IP-Adresse durch Ihren " "Internetanbieter kann es bis zu %(timer)s Minuten dauern bis die neue IP " "Adresse dem DNS Server bekannt gemacht wird." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "Letztes Update" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "Firewall" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format #| msgid "" #| "Firewall is a network security system that controls the incoming and " #| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " #| "and properly configured reduces risk of security threat from the Internet." msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" "Firewall ist ein Sicherheitssystem das den ein- und ausgehenden Verkehr der " "%(box_name)s kontrolliert. Die Firewall aktiv und korrekt konfiguriert zu " "halten reduziert Sicherheitsrisiken aus dem Internet." #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "Aktueller Status:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" "Firewall daemon läuft nicht. Bitte starten. Die Firewall ist standardmäßig " "auf %(box_name)s aktiviert. Auf jedem Debian basiertem System (wie " "%(box_name)s) kann sie über das Kommando 'service firewalld start' oder bei " "einem System mit systemd mit 'systemctl start firewalld' gestartet werden." #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "Dienst/Port" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Aktiviert" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Deaktiviert" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "Erlaubt" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "Erlaubt (nur intern)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "Erlaubt (nur extern)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "Geblockt" #: plinth/modules/firewall/templates/firewall.html:103 #| msgid "" #| "The operation of the firewall is automatic. When you enable a service it " #| "is automatically permitted in the firewall and you disable a service is " #| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" "Der Betrieb der Firewall erfolgt automatisch. Wenn ein Dienst eingeschaltet " "wird, wird er auch in der Firewall zugelassen und wenn ein Dienst " "ausgeschaltet wird, wird er auch in der Firewall verboten." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "Erstellen des LDAP Benutzers ist fehlgeschlagen." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "Hinzufügen eines neuen Benutzers zur admin Gruppe ist fehlgeschlagen." #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "Benutzerkonto wurde erstellt, Sie sind jetzt angemeldet" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "Hilfe" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 #| msgid "Start setup" msgid "Start Setup" msgstr "Einrichten beginnen" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" "Um die Installation Ihrer %(box_name)s abzuschließen, stellen Sie bitte " "einige Grundinformationen bereit." #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Administrator Konto" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" "Wählen Sie einen Benutzernamen und Passwort um auf dieses Web-Interface " "zuzugreifen. Das Passwort kann später geändert werden. Dieser Benutzer " "erhält Administrator-Rechte. Weitere Benutzer können später hinzugefügt " "werden." #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Die Box starten!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "Installation komplett!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format #| msgid "" #| "To make your FreedomBox functional, you need some applications. " #| "Applications will be installed the first time you access them." msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" "%(box_name)s Installation ist jetzt abgeschlossen. Um Ihre %(box_name)s " "funktionsfähig zu machen benötigen Sie einige Anwendungen (Apps). Die " "Anwendungen werden installiert wenn Sie das erste Mal auf sie zugreifen." #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "Zu den Anwendungen" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 #| msgid "Network Configuration" msgid "Current Network Configuration" msgstr "Aktuelle Netzwerk-Konfiguration" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 #| msgid "" #| "FreedomBox setup is now complete. However, you should check the network " #| "setup and modify it if necessary. Do not forget to change the default Wi-" #| "Fi passwords." msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" "Sie sollten die Netzwerkkonfiguration überprüfen und gegebenenfalls ändern. " "Vergessen Sie nicht, die standardmäßigen Wi-Fi-Passwörter zu ändern!" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Zu den Netzwerken" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Installation abgeschlossen" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "Dokumentation" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "Wo man Hilfe bekommt" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "Handbuch" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "Dokumentation und FAQ" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "Über {box_name}" #: plinth/modules/help/help.py:73 #, python-brace-format #| msgid "About {box_name}" msgid "{box_name} Manual" msgstr "{box_name} Handbuch" #: plinth/modules/help/templates/help_about.html:30 #, python-format #| msgid "" #| "FreedomBox is a community project to develop, design and promote personal " #| "servers running free software for private, personal communications. It " #| "is a networking appliance designed to allow interfacing with the rest of " #| "the Internet under conditions of protected privacy and data security. It " #| "hosts applications such as blog, wiki, website, social network, email, " #| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " #| "so that your data stays with you." msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" "%(box_name)s ist ein Gemeinschaftsprojekt zur Entwicklung, Gestaltung und " "Förderung persönlicher Server mit freier Software für die private, " "persönliche Kommunikation. Es ist als Netzwerkgerät so konzipiert, dass es " "eine Schnittstelle mit dem Internet darstellt bei Beibehaltung der " "geschützten Privatsphäre und Datensicherheit. Es beherbergt Anwendungen wie " "Blog, Wiki, Webseite, soziale Netzwerke, E-Mail, Web-Proxy und einen Tor-" "Server auf einem Gerät, das Wi-Fi-Router ersetzen kann, so dass Ihre Daten " "immer bei Ihnen bleiben." #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" "Wir leben in einer Welt, in der unsere Nutzung des Netzes von denen " "ermöglicht wird, die nicht immer unsere besten Interessen im Sinn haben. " "Durch den Aufbau von Software, die nicht auf einem zentralen Service " "angewiesen ist, können wir die Kontrolle und Privatsphäre wieder erlangen. " "Indem wir unsere Daten zuhause behalten, gewinnen wir Schutz über sie. Indem " "wir wieder die Kontrolle über ihre Netze und Maschinen an die Nutzer " "zurückgeben, bringen wir das Internet, wieder zu seiner ursprünglich " "vorgesehenen Peer-to-Peer-Architektur (Gleiche mit Gleichen) zurück." #: plinth/modules/help/templates/help_about.html:56 #, python-format #| msgid "" #| "There are a number of projects working to realize a future of distributed " #| "services; FreedomBox aims to bring them all together in a convenient " #| "package." msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" "Es gibt eine Vielzahl von Projekten die an eine Zukunft von verteilten " "Diensten arbeiten; %(box_name)s zielt darauf ab diese alle in einem " "praktischen Paket zusammenzubringen." #: plinth/modules/help/templates/help_about.html:64 #, python-format #| msgid "" #| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "Mehr Informationen über das %(box_name)s Projekt finden Sie im %(box_name)s Wiki." #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Mehr lernen" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Es läuft Plinth Version %(version)s." #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "%(box_name)s Installation" #: plinth/modules/help/templates/help_index.html:29 #, python-format #| msgid "" #| "The FreedomBox Manual is the best place to " #| "start for information regarding %(box_name)s." msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "Das %(box_name)s Handbuch ist der beste Ort " "für erste Informationen über %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 #, python-format #| msgid "" #| " " #| "FreedomBox project wiki contains further information." msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" "Das %(box_name)s Wiki Projekt enthält weitere Informationen." #: plinth/modules/help/templates/help_index.html:43 #, python-format #| msgid "" #| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " #| "problems faced by other users and possible solutions." msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" "Um Hilfe von der %(box_name)s Gemeinschaft zu bekommen können Anfragen an " "die Mailingliste gestellt werden. Das Listenarchiv enthält auch " "Informationen über Probleme anderer Benutzer und mögliche Lösungen." #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" "Viele %(box_name)s Mitarbeiter und Benutzer sind auch im irc.oftc.net IRC " "Netzwerk erreichbar. Treten Sie ihm bei und bitten um Hilfe im " "#freedombox Kanal des IRC Web-Interfaces." #: plinth/modules/ikiwiki/__init__.py:38 #| msgid "Wiki & Blog (Ikiwiki)" msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki und Blog (ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 #| msgid "Ikiwiki wikis and blogs" msgid "ikiwiki wikis and blogs" msgstr "ikiwiki Wikis und Blogs" #: plinth/modules/ikiwiki/forms.py:29 #| msgid "Enable Ikiwiki" msgid "Enable ikiwiki" msgstr "ikiwiki einschalten" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "Typ" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "Name" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "Admin Konto Name" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "Admin Konto Passwort" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" "Sobald eingeschaltet stehen die Blogs und Wikis unter /" "ikiwiki zur Verfügung." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format #| msgid "Delete Wiki/Blog %(name)s" msgid "Delete Wiki or Blog %(name)s" msgstr "Lösche Wiki oder Blog %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 #| msgid "" #| "This action will remove all the posts, pages and comments including " #| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" "Diese Aktion wird alle Posts, Seiten und Kommentare einschließlich der " "Historie löschen. Dieses Wiki oder den Blog permanent löschen?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Lösche %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "Abbrechen" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "Keine Wikis oder Blogs verfügbar." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "Ein Wiki oder Blog anlegen" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "Lösche Seite %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "Gehe zu Seite %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "Verwalten" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "Anlegen" #: plinth/modules/ikiwiki/views.py:73 #| msgid "Wiki & Blog" msgid "Wiki and Blog" msgstr "Wiki und Blog" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "Wikis und Blogs verwalten" #: plinth/modules/ikiwiki/views.py:132 #| msgid "Create a Wiki or Blog" msgid "Create Wiki or Blog" msgstr "Wiki oder Blog anlegen" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "Wiki {name} angelegt." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "Konnte Wiki nicht anlegen: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "Blog {name} angelegt." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "Konnte Blog nicht anlegen: {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "{name} gelöscht." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "Konnte {name} nicht löschen: {error}" #: plinth/modules/ikiwiki/views.py:182 #| msgid "Delete Wiki/Blog" msgid "Delete Wiki or Blog" msgstr "Lösche Wiki oder Blog" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "Zertifikate (Let's Encrypt)" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" "Ein digitales Zertifikat ermöglicht es Benutzern von einem Web-Service, die " "Identität des Dienstes zu überprüfen und sicher mit ihm zu kommunizieren. " "%(box_name)s kann automatisch digitale Zertifikate für jede verfügbare " "Domain beziehen und installieren. Es tut dies, indem es gegenüber Let's " "Encrypt, einer Zertifizierungsstelle (CA), nachweist der Inhaber einer " "Domain zu sein." #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" "Let's Encrypt ist eine freie, automatisierte und offene " "Zertifizierungsstelle, zum Nutzen der Öffentlichkeit betrieben von der " "Internet Security Research Group (ISRG). Bitte lesen und akzeptieren Sie die " "Let's Encrypt " "Abonnentenvereinbarung vor der Verwendung dieses Dienstes." #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 #| msgid "Domain Name" msgid "Domain" msgstr "Domain" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "Status des Zertifikats" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 #| msgid "Security" msgid "Website Security" msgstr "Webseiten-Sicherheit" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 #| msgid "Applications" msgid "Actions" msgstr "Aktion" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "Verfällt am %(expiry_date)s" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "Kein Zertifikat" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "Zurückziehen" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "Wieder beziehen" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "Beziehen" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "Zertifikat erfolgreich zurückgezogen für Domain {domain}" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "Zurückziehen des Zertifikats für Domain {domain} gescheiter: {error}" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "Zertifikat erfolgreich bezogen für Domain {domain}" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "Beziehen des Zertifikats für Domain {domain} fehlgeschlagen: {error}" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "Monkeysphere" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" "Mit Monkeysphere kann ein PGP-Schlüssel für jede konfigurierte Domain die " "SSH bedient generiert werden. Die öffentlichen PGP-Schlüssel können dann auf " "die PGP-Schlüsselserver hochgeladen werden. Benutzer, die mit diesem Gerät " "über SSH verbunden sind, können überprüfen, ob sie mit den richtigen Host " "verbunden sind. Damit Anwender dem Schlüssel vertrauen können, muss " "mindestens eine Person (in der Regel der Gerätebetreiber) den Schlüssel mit " "dem regulären PGP Keysigning-Verfahren signieren. Siehe die Monkeysphere SSH " "Dokumentation für weitere Details." #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "Veröffentliche den Schlüssel beim Schlüssel-Server..." #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "GPG Fingerabdruck" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "Nicht verfügbar" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "Generiere PGP Schlüssel" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "Schlüssel veröffentlichen" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "PGP Schlüssel erzeugt." #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "Schlüssel-Veröffentlichung abgebrochen." #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "Veröffentlichte Schlüssel auf dem Server." #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "Ein Fehler ist beim Veröffentlichen des Schlüssels aufgetreten." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "Voice Chat (Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "Mumble Voice Chat Server" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "Mumble Daemon einschalten" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" "Mumble ist eine verschlüsselte hochwertige open source Voice-Chat-Software " "mit geringer Latenz." #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "Sie können sich mit Ihrem Mumble Server auf dem regulären Mumble-Port 64738 " "verbinden. Auf Mumble finden Sie weitere " "Anwendungen um sich vom Desktop oder Android-Gerät mit Mumble zu verbinden." #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "Mumble Server läuft" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "Mumble Server läuft nicht" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Namen-Dienste" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Verwende DNSSEC auf IPv{kind}" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "Verbindungstyp" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Verbindungsname" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Physikalisches Interface" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "Das Netzwerkgerät an das diese Verbindung gebunden sein sollte." #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Firewall Zone" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" "Die Firewall Zone steuert welche Dienste über diese Schnittstellen zur " "Verfügung stehen. Wählen Sie 'Intern' nur für vertrauenswürdige Netzwerke." #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 Adressierungs-Methode" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" "Die \"Shared\" Methode wird einen DHCP Server starten während die \"Automatic" "\" Methode sich ihre Konfiguration vom DHCP Server holt." #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adresse" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Netzmaske" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" "Optionaler Wert. Wenn er leer gelassen wird, wird eine Maske basierend auf " "der Adresse verwendet." #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Gateway" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Optionaler Wert." #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS Server" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Optionaler Wert. Wenn dieser Wert eingetragen wird und die IPv4 Adressierung " "\"Automatic\" ist, werden die DNS Server die von einem DHCP Server " "bereitgestellt wurden, ignoriert." #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Zweiter DNS Server" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Optionaler Wert. Wenn dieser Wert eingetragen wird und die IPv4 Adressierung " "\"Automatic\" ist, werden die DNS Server die von einem DHCP Server " "bereitgestellt wurden, ignoriert." #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "-- auswählen --" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Der sichtbare Name des Netzwerks." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Modus" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Authentifizierungs-Modus" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" "Wählen Sie WPA, wenn das Wireless-Netzwerk gesichert ist und ein Passwort " "für die Benutzung erfordert." #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Passphrase" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Netzwerkverbindungen" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Nahe Wi-Fi Netzwerke" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Verbindung hinzufügen" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "Netzwerke" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "Kann Verbindung nicht anzeigen: Verbindung nicht gefunden." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "Zeige Verbindungsinformationen" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "Kann Verbindung nicht bearbeiten: Verbindung nicht gefunden." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "Dieser Verbindungstyp ist noch nicht bekannt." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Verbindung bearbeiten" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Verbindung {name} eingeschaltet." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Fehler beim Einschalten der Verbindung: Verbindung nicht gefunden." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" "Fehler beim Einschalten der Verbindung {name}: Kein geeignetes Gerät " "verfügbar." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Verbindung {name} ausgeschaltet." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Konnte Verbindung nicht ausschalten: Verbindung nicht gefunden." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Füge neue Ethernet Verbindung hinzu" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Füge neue PPPoE Verbindung hinzu" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Füge neue Wi-Fi Verbindung hinzu" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Verbindung {name} gelöscht." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Konnte Verbindung nicht löschen: Verbindung nicht gefunden." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Lösche Verbindung" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "Bearbeite Verbindung" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "Bearbeiten" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "Ausschalten" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "Einschalten" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "Lösche Verbindung" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "Löschen" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "Verbindung" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "Primäre Verbindung" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "ja" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "Gerät" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "Zustand" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "Erklärung des Zustands" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "MAC Adresse" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "Interface" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "Beschreibung" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "Physikalischer Link" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "Link Zustand" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "Kabel verbunden" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "bitte Kabel prüfen" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "Geschwindigkeit" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "Signal Stärke" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "Kanal" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IPv4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "Methode" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "IP Adresse" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "DNS Server" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "Standard" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IPv6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "Diese Verbindung ist nicht eingeschaltet." #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "Sicherheit" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "Firewall Zone" #: plinth/modules/networks/templates/connection_show.html:280 #| msgid "" #| "This interface should be connected to local network/machine. If you " #| "connect this interface to a public network, services meant to be " #| "available only internally will become available externally. This is a " #| "security risk." msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" "Diese Schnittstelle sollte an ein lokales Netzwerk / Gerät angeschlossen " "sein. Wenn Sie diese Schnittstelle mit einem öffentlichen Netzwerk " "verbinden, werden Dienste die nur intern zur Verfügung stehen sollten extern " "erreichbar sein. Dies ist ein Sicherheitsrisiko." #: plinth/modules/networks/templates/connection_show.html:300 #| msgid "" #| "This interface should receive your Internet connection. If you connect it " #| "your a local network/machine, many services meant to available only " #| "internally will not be available." msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" "Diese Schnittstelle sollte Ihre Internetverbindung empfangen. Wenn Sie es an " "ein lokales Netzwerk / Gerät anschließen, werden viele Dienste die nur " "intern zur Verfügung stehen sollten nicht verfügbar sein." #: plinth/modules/networks/templates/connection_show.html:319 #, python-format #| msgid "" #| "This interface is not maintained by FreedomBox. Its security status is " #| "unknown to FreedomBox. Many FreedomBox services may not be available on " #| "this interface. It is recommended that you deactivate/delete this " #| "connection and re-configure it." msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Diese Schnittstelle wird von %(box_name)s nicht gepflegt. Sein " "Sicherheitsstatus ist %(box_name)s unbekannt. Viele %(box_name)s Dienste " "sind möglicherweise nicht über diese Schnittstelle erreichbar. Es wird " "empfohlen diese Verbindung zu deaktivieren oder zu löschen und neu zu " "konfigurieren." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "Anlegen..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "Verbindung anlegen" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "Verbindung %(name)s permanent löschen?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "Internet" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "Abstand" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "Extern" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "Ethernet" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "Wi-Fi" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "Zeige Verbindung %(connection.name)s" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "Intern" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "Zeige Verbindung %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "Computer" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "Lösche Verbindung %(name)s" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "Aktiv" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "Inaktiv" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "Virtuelles Privates Netzwerk (OpenVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "OpenVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "OpenVPN Server einschalten" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format #| msgid "" #| "Virtual Private Network (VPN) is a technique for securely connecting two " #| "machines in order to access resources of a private network. While you " #| "are away from home, you can connect to your %(box_name)s in order to join " #| "your home network and access private/internal services provided by " #| "%(box_name)s. You can also access the rest of the Internet via " #| "%(box_name)s for added security and anonymity." msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "Virtuelle Private Netzwerke (VPN) ist ein Verfahren für die sichere " "Verbindung von zwei Geräten, um auf die Ressourcen eines privaten Netzwerks " "zuzugreifen. Wenn Sie nicht zu Hause sind, können Sie sich mit Ihrer " "%(box_name)s verbinden, um Ihrem Heimnetzwerk beizutreten und Zugang zu " "privaten/internen Diensten der %(box_name)s erlangen. Sie können auch auf " "das Internet via %(box_name)s für zusätzliche Sicherheit und Anonymität " "zugreifen." #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "Profil" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format #| msgid "" #| "To connect to %(box_name)s's VPN, you need to download a profile and feed " #| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " #| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " #| "configure them." msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "Um sich mit der VPN von %(box_name)s zu verbinden, müssen Sie ein Profil " "herunterladen und einem OpenVPN-Client auf Ihrem Mobiltelefon oder Desktop-" "Rechner weiterleiten. OpenVPN-Clients sind für die meisten Plattformen " "verfügbar. Siehe die Dokumentation zu " "empfohlenen Clients und Hinweisen, wie sie zu konfigurieren sind." #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" "Das Profil ist für jeden Benutzer von %(box_name)s spezifisch. Halten Sie es " "geheim." #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "Mein Profil herunterladen" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" "OpenVPN ist noch nicht eingerichtet. Ein sichere Einrichtung dauert sehr " "lange. Je nachdem, wie schnell die %(box_name)s ist, kann es sogar Stunden " "dauern. Wenn das Einrichten unterbrochen wird, können Sie es erneut zu " "starten." #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "Einrichten beginnen" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "OpenVPN Einrichtung läuft" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" "Ein sichere Einrichtung dauert sehr lange. Je nachdem, wie schnell die " "%(box_name)s ist, kann es sogar Stunden dauern. Wenn das Einrichten " "unterbrochen wird, können Sie es erneut zu starten." #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "OpenVPN Server läuft" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "OpenVPN Server läuft nicht" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "Einrichtung beendet." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "Einrichtung fehlgeschlagen." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "ownCloud einschalten" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "Datei-Hosting (ownCloud)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "ownCloud" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "onwCloud eingeschaltet" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "ownCloud ausgeschaltet" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" "ownCloud gibt Ihnen universellen Zugang zu Ihren Dateien mit einem Web-" "Interface oder über WebDAV. Es bietet auch eine Plattform, um Kontakte, " "Kalender und Lesezeichen auf allen Ihren Geräten einfach anzuzeigen und zu " "synchronisieren und ermöglicht einfache Bearbeitungsfunktionen direkt im " "Web. Die Installation hat minimale Server-Anforderungen, braucht keine " "speziellen Zugriffsrechte und geht schnell. ownCloud ist erweiterbar über " "eine einfache, aber leistungsfähige API für Anwendungen und Plug-ins." #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" "Sobald aktiviert, wird die ownCloud Installation über den /owncloud Pfad auf dem Web-Server verfügbar sein. Besuchen Sie diese " "URL zum erstmaligen Einrichten des Administrations-Kontos von ownCloud." #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "Änderungen anwenden" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "Öffentliche Sichtbarkeit (PageKite)" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "PageKite einschalten" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "Server Domain" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" "Wählen Sie Ihren PageKite Server aus. Setzen Sie \"pagekite.net\" um den " "Standard Server zu verwenden." #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "Server Port" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "Port Ihres PageKite Servers (standard: 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "Kite Name" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "Beispiel: meinebox.pagekite.me" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "Ungültiger kite Name" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "Kite secret" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" "Ein secret assoziiert mit dem kite oder das Standard-secret für Ihr Konto " "wenn kein secret dem kite zugeordnet ist." #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "Kite Details eingerichtet" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "Pagekite Server eingerichtet" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "PageKite eingeschaltet" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "PageKite ausgeschaltet" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "Dienst eingeschaltet: {name}" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "Dienst ausgeschaltet: {name}" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "Protokoll" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "externer (frontend) Port" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "interner (FreedomBox) Port" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "Sub-Domainen einschalten" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "Spezieller Dienst gelöscht" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" "Dieser Dienst steht als Standard-Service zur Verfügung. Bitte benutzen Sie " "die \"Standard-Dienste\" Seite, um sie zu aktivieren." #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "Fügte speziellen Dienst hinzu" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "Dieser Dienst existiert bereits" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "PageKite Konto" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "Einstellungen speichern" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" "Warnung:
Ihr PageKite Frontend-Server unterstützt möglicherweise " "nicht alle Protokolle/Port-Kombinationen, die Sie hier definieren können. " "Beispielsweise HTTPS auf anderen Ports als 443 ist bekannt dafür Probleme zu " "verursachen." #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "Speziellen Dienst anlegen" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "Dienst hinzufügen" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "Vorhandene speziellen Dienste" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "Kein spezieller Dienst aktiviert" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "verbunden mit %(backend_host)s:%(backend_port)s" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "Lösche diesen Dienst" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" "PageKite ist ein System zum Exponieren von Diensten der %(box_name)s, wenn " "Sie keine direkte Verbindung zum Internet haben. Diese benötigen Sie nur, " "wenn die Dienste Ihrer%(box_name)s vom Internet nicht erreichbar sind. Dies " "umfasst die folgenden Situationen:" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "%(box_name)s ist hinter einer eingeschränkten Firewall." #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" "%(box_name)s ist mit einem (wireless) Router verbunden, den Sie nicht " "kontrollieren." #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" "Ihr ISP bietet Ihnen keine externe IP-Adresse sondern statt dessen eine " "Internet-Verbindung über ein NAT." #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" "Ihr ISP bietet keine statische IP-Adresse und Ihre IP-Adresse ändert sich " "immer wenn Sie sich mit dem Internet verbinden." #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "Ihr ISP limitiert eingehende Verbindungen." #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" "PageKite umgeht Einschränkungen von NAT, Firewall und IP-Adressen durch " "Verwendung einer Kombination aus Tunneln und Reverse-Proxys. Sie können " "einen beliebigen PageKite Dienstanbieter auswählen, beispielsweise pagekite.net. In Zukunft könnte es möglich " "sein, die %(box_name)s eines Freundes einzusetzen." #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "Konfiguriere PageKite" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "Warnung:
" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "Öffentliche Dienste sind zugänglich und angreifbar vom bösen Internet." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" "SSH mit dem Standardpasswort für 'fbx' exponieren ist eine SEHR SCHLECHTE " "Idee." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "Speichere Dienste" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "Web Server (HTTP)" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" "Webseite wird unter http://{0} verfügbar sein" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "Web Server (HTTPS)" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" "Webseite wird unter https://{0} verfügbar sein" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "Secure Shell (SSH)" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" "Siehe SSH Client Konfigurations-Anweisungen" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "Pagekite" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "Über PageKite" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "Standard Dienste" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "Spezielle Dienste" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "Power" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "Neu starten oder das System herunterfahren." #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "Neu starten »" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "Herunterfahren »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" "Sind Sie sicher, dass Sie neu starten möchten? Sie werden auf dieses Web-" "Interface für einige Minuten nicht zugreifen können, bis das System neu " "gestartet wurde." #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "Jetzt neu starten" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" "Sind Sie sicher, dass Sie herunterfahren möchten? Sie werden auf dieses Web-" "Interface anschließend nicht zugreifen können." #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "Jetzt herunterfahren" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "Web Proxy (Privoxy)" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "Privoxy Web Proxy" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Zugang auf {url} über Proxy {proxy} auf TCP{kind}" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "Privoxy einschalten" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" "Privoxy ist ein nicht-Caching Web-Proxy mit erweiterten Filterfunktionen zur " "Verbesserung der Privatsphäre, modifiziert Webseiten und HTTP-Header, " "kontrolliert den Zugang und entfernt Anzeigen und anderen abscheulichen " "Internet-Müll." #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" "Sie können Privoxy verwenden, indem Sie Ihre Browser Proxy-Einstellungen auf " "den Hostnamen (oder IP-Adresse) der %(box_name)s mit Port 8118 ändern. Bei " "der Verwendung von Privoxy, können Sie die Konfigurationsdaten und " "Dokumentation unter http://config." "privoxy.org/ oder http://p.p einsehen." #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "Privoxy läuft" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "Privoxy läuft nicht" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "IRC Client (Quassel)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "IRC Client Quassel" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "Quassel-Kern einschalten" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" "Quassel ist eine IRC-Anwendung, die in zwei Teile, einen \"Kern\" und einen " "\"Client\" aufgeteilt ist. Dies ermöglicht es, dass der Kern am IRC-Server " "angeschlossen ist, und weiterhin Nachrichten empfängt, auch wenn der Client " "getrennt wird. %(box_name)s kann den Quassel Kern laufen lassen und Sie " "immer online halten und ein oder mehrere Quassel Clients von einer Desktop " "oder einer mobilen App können verwendet werden, um sich mit ihm zu verbinden " "und oder zu trennen." #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" "Sie können sich mit Ihrem Quassel Kern auf dem Standard-Port 4242 verbinden. " "Clients um sich mit Quassel zu verbinden stehen für Desktop und mobile Telefone zur Verfügung." #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "Quassel Kern läuft" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "Quassel Kern läuft nicht" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 #| msgid "Server port" msgid "SIP Server (repro)" msgstr "SIP Server (repro)" #: plinth/modules/repro/__init__.py:41 #| msgid "Second DNS Server" msgid "repro SIP Server" msgstr "repro SIP Server" #: plinth/modules/repro/forms.py:29 #| msgid "Enable Quassel core service" msgid "Enable repro service" msgstr "repro Dienst einschalten" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" "repro bietet verschiedene SIP-Dienste an, die ein SIP-Softphone nutzen kann " "um Audio- und Video-Anrufe sowie Präsenz und Sofortnachrichten zur Verfügung " "zu stellen. repro stellt einen Server und SIP-Benutzerkonten bereit, die " "Kunden nutzen können, um ihre Präsenz bekannt zu machen. Es fungiert auch " "als Proxy zu verbündeten SIP-Kommunikationen mit anderen Servern über das " "Internet ähnlich wie E-Mail." #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" "Um SIP-Anrufe zu tätigen wird eine Client-Anwendung benötigt. Verfügbare " "Clients sind unter anderem Jitsi (für " "Computer) und CSipSimple (für Android-Telefone)." #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" "Hinweis: Vor der Verwendung von repro, müssen Domains und " "Benutzer über das web-basierte " "Konfigurations-Panel konfiguriert werden. Die Nutzer der admin " "Gruppe können sich dort anmelden. Nach dem Festlegen der Domain ist es " "erforderlich den repro Dienst neu zu starten. Deaktivieren Sie den Dienst " "und aktivieren ihn wieder." #: plinth/modules/repro/templates/repro.html:63 #| msgid "Quassel core service is running" msgid "repro service is running" msgstr "repro Dienst läuft" #: plinth/modules/repro/templates/repro.html:66 #| msgid "Quassel core service is not running" msgid "repro service is not running" msgstr "repro Dienst läuft nicht" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "Unhosted Storage (reStore)" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "reStore" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "reStore einschalten" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format #| msgid "" #| "reStore is a server for unhosted web " #| "applications. The idea is to uncouple web applications from data. No " #| "matter where a web application is served from, the data can be stored on " #| "an unhosted storage server of user's choice. With reStore, your " #| "%(cfg.box_name)s becomes your unhosted storage server." msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" "reStore ist ein Server für unhosted Web-" "Anwendungen. Die Idee ist, Web-Anwendungen von den Daten zu entkoppeln. " "Unabhängig davon von wo eine Web-Anwendung aus bedient wird, können die " "Daten auf einem unhosted Speicherserver der Wahl des Benutzers gespeichert " "werden. Mit reStore, wird Ihre %(box_name)s Ihr unhosted Speicherserver." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" "Sie können Konten im reStore Web-Interface anlegen " "und bearbeiten." #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "Email Client (Roundcube)" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "Roundcube einschalten" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" "Roundcube webmail ist ein Browser basierter mehrsprachiger IMAP client mit " "einer Benutzeroberfläche ähnlich wie die eines Email Programmes. Es verfügt " "über die volle Funktionalität eines Email clients. So zum Beispiel MIME " "Unterstützung, Adressbuch, Ordnerverwaltung, Suchfunktion und " "Rechtschreibprüfung." #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" "Sie können auf Roundcube von /roundcube " "zugreifen. Geben Sie Benutzernamen und Passwort des E-Mail-Kontos ein, " "gefolgt von dem Domain-Namen des IMAP-Servers Ihres Anbieters wie z.B. " "imap.example.com. Für IMAP über SSL (empfohlen) verwenden Sie " "etwas wie imaps://imap.example.com." #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" "Um Gmail zu nutzen muss als Nutzername die Gmail Adresse angegeben werden. " "Beim Passwort handelt es sich um das Passwort des Google Accounts. Als " "Server muss imaps://imap.gmail.com angegeben werden. In den " "Google Konto Einstellungen muss zudem die Option \"Zugriff für weniger " "sichere Apps\" aktiviert werden (https://www.google.com/settings/security/" "lesssecureapps)." #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "Lesezeichen (Shaarli)" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "Shaarli" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "Shaarli einschalten" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "Shaarli ermöglicht das Speichern und Teilen von Lesezeichen." #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" "Nach der Aktivierung kann Shaarli über /shaarli des " "Webservers erreicht werden. Shaarli unterstützt nur ein Nutzerkonto; dieses " "muss beim ersten Besuch der Seite eingerichtet werden." #: plinth/modules/system/system.py:26 msgid "System" msgstr "System" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "System-Konfiguration" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "HIer können Sie das Basissystem Ihrer %(box_name)s verwalten." #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" "Diese Optionen beeinflussen die Funktionen der %(box_name)s auf grundlegende " "Art und Weise, also vorsichtig benutzen!" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "Anonymisierungsnetzwerk (Tor)" #: plinth/modules/tor/__init__.py:53 #| msgid "Anonymity Network (Tor)" msgid "Tor Anonymity Network" msgstr "Tor Anonymisierungs-Netzwerk" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "Tor Bridge Relay" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "Tor Hidden Dienst" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor relay Port ist verfügbar" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3 Transport registriert" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4 Transport registriert" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Zugangs-URL {url} auf TCP{kind} über Tor" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bestätige Tor-Nutzung auf {url} über TCP{kind}" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "Tor einschalten" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "Tor Verborgenen Dienst einschalten" #: plinth/modules/tor/forms.py:38 #, python-brace-format #| msgid "" #| "A hidden service will allow FreedomBox to provide selected services (such " #| "as ownCloud or Chat) without revealing its location." msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" "Ein verborgener Dienst ermöglicht {box_name} ausgewählte Dienste (wie " "ownCloud oder Chat) ohne Offenlegung seiner Position anzubieten." #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "Software über Tor Netzwerk installieren" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" "Wenn aktiviert, wird Software für Installationen und Aktualisierungen über " "das Tor-Netzwerk heruntergeladen. Dies fügt einen Schritt zur Privatsphäre " "und Sicherheit während des Software-Downloads hinzu." #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" "Tor ist ein anonymes Kommunikationssystem. Sie können mehr darüber auf der <" "a href=\"https://www.torproject.org/\">Tor Projekt Webseite erfahren. " "Für besten Schutz beim Surfen im Web, empfiehlt das Tor-Projekt, dass Sie " "den " "Tor Browser verwenden." #: plinth/modules/tor/templates/tor.html:54 #| msgid "Configuration updated" msgid "Tor configuration is being updated" msgstr "Tor-Konfiguration wird aktualisiert" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor läuft" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor läuft nicht" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Verborgene Dienste" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Port" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Brücke" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" "Ihre %(box_name)s ist als eine Tor-Brücke mit obfsproxy konfiguriert, so " "kann es Zensur umgehen. Wenn Ihre %(box_name)s hinter einem Router oder " "einer Firewall ist, sollten Sie sicherstellen, dass die folgenden Ports " "geöffnet und weitergeleitet sind, falls erforderlich:" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Dienst" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" "Ein Tor SOCKS Port steht auf Ihrer %(box_name)s auf TCP port 9050 bereit." #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor Kontrollpult" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Action error: {0} [{1}] [{2}]" #: plinth/modules/tor/views.py:148 #| msgid "Configuration updated" msgid "Configuration updated." msgstr "Konfiguration aktualisiert." #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "Ein Fehler ist bei der Konfiguration aufgetreten." #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "Transmission BitTorrent" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "Transmission daemon einschalten" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "Download Ordner" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" "Der Ordner in dem die Downloads gespeichert werden. Wenn der Standard Ordner " "verändert wird, dann muss sicher gestellt sein, dass der Ordner existiert " "und der Benutzer \"debian-transmission\" Schreibrechte für diesen Ordner hat." #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "Benutzername um sich an der Web-Oberfläche anzumelden." #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" "Das Passwort zum Anmelden an der Web-Oberfläche. Das aktuelle Passwort wird " "als hash dargestellt. Um das neue Passwort zu setzen muss dieses im Klartext " "eingegeben werden." #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" "BitTorrent ist ein peer-to-peer Protokoll zum Teilen von Dateien. Der " "Transmission daemon ist zuständig für das Teilen von Dateien. Es gilt zu " "beachten, dass BitTorrent nicht anonym funktioniert." #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" "Die Web-Oberfläche kann unter /transmission " "erreicht werden." #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "Transmission daemon läuft" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "Transmission daemon läuft nicht." #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "Software Aktualisierungen" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "Automatische Aktualisierungen einschalten" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" "Wenn aktiviert, wird einmal am Tag überprüft ob Aktualisierungen für das " "System verfügbar sind. Es wird dann versucht alle Aktualisierungen " "durchzuführen." #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" "Upgrades installiert die neuesten Software- und Sicherheitsupdates. Wenn " "automatische Upgrades aktiviert sind, werden Aktualisierungen automatisch " "jede Nacht durchgeführt. Sie brauchen normalerweise den Upgrade-Prozess " "nicht zu starten." #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" "Abhängig von der Anzahl der zu installierenden Pakete, kann dies eine lange " "Zeit dauern. Während Aktualisierungen im Gange sind, werden Sie nicht in der " "Lage sein, andere Pakete zu installieren. Während der Aktualisierung kann " "dieses Web-Interface vorübergehend nicht verfügbar sein und eine " "Fehlermeldung anzeigen. Aktualisieren Sie die Seite um fortzufahren." #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Updates jetzt durchführen »" #: plinth/modules/upgrades/templates/upgrades.html:65 #| msgid "ejabberd is running" msgid "A package manager is running." msgstr "Ein Paket-Manager läuft." #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "Letzte Protokolle der Aktualisierungen:" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Automatische Aktualisierungen" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Pakete aktualisieren" #: plinth/modules/upgrades/views.py:96 #| msgid "Upgrade completed." msgid "Upgrade process started." msgstr "Aktualisierung begonnen." #: plinth/modules/upgrades/views.py:99 #| msgid "Upgrade failed." msgid "Starting upgrade failed." msgstr "Starten der Aktualisierung fehlgeschlagen." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Paketaktualisierungen" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "Fehler beim Konfigurieren von automatischen Aktualisierungen: {error}" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Automatische Aktualisierungen eingeschaltet" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Automatische Aktualisierungen ausgeschaltet" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Benutzer und Gruppen" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Prüfe LDAP Eintrag \"{search_item}\"" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "admin" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "wiki" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "Gruppen" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" "Welche Dienste sollen dem neuen Nutzer zur Verfügung gestellt werden? Wenn " "er in der richtigen Gruppe ist, dann wird der Nutzer in der Lage sein sich " "bei diesen Diensten anzumelden indem er sich einmalig mit seinem Passwort " "bei dem LDAP Dienst anmeldet.

Zudem kann sich der Nutzer per " "SSH anmelden und administrative Tätigkeiten per sudo durchführen." #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "Der Benutzer konnte nicht der Gruppe {group} hinzugefügt werden." #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "SSH Schlüssel" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" "Einen SSH-Public-Key festzulegen erlaubt dem Benutzer erlauben sich sicher " "ohne Kennwort an das System anzumelden. Sie können mehrere Schlüssel, einen " "auf jeder Zeile, eingeben. Leerzeilen und Zeilen beginnend mit # werden " "ignoriert." #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "Umbenennen des LDAP Nutzers fehlgeschlagen." #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Entfernen des Nutzers von der Gruppe fehlgeschlagen." #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Hinzufügen eines Benutzers zur Gruppe ist fehlgeschlagen." #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Ändern des LDAP Benutzerpassworts ist fehlgeschlagen." #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "Ändere Passwort für %(username)s" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "Speichere Passwort" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "Benutzer anlegen" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Benutzer löschen" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "Benutzer %(username)s permanent löschen?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "Lösche %(username)s" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "Lösche Benutzer %(username)s" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "Benutzer %(username)s bearbeiten" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" "Verwenden Sie das Passwortänderungsformular um das Passwort " "zu ändern." #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "Änderungen speichern" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "Benutzer" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "Benutzer %(username)s angelegt." #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "Benutzer %(username)s geändert." #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "Benutzer bearbeiten" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Benutzer {user} gelöscht." #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "LDAP Benutzer Löschen fehlgeschlagen." #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Passwort ändern" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Passwort erfolgreich geändert." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "Chat Server (XMPP)" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "XMPP einschalten" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" "XMPP ist ein offenes und standardisiertes Kommunikationsprotokoll. Hier " "können Sie Ihren XMPP-Server, genannt ejabberd, starten und konfigurieren." #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" "Zur Kommunikation können Sie den Web client oder jeden " "anderen XMPP client verwenden." #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" "Ihre XMPP Server Domain ist auf %(domainname)s gesetzt. Benutzer IDs " "werden aussehen wie username@%(domainname)s. Sie können Ihre Domain " "auf der Seite Systemeinstellungen " "konfigurieren." #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "Starte Web client" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "ejabberd läuft" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "ejabberd läuft nicht" #: plinth/network.py:39 msgid "PPPoE" msgstr "PPPoE" #: plinth/package.py:156 msgid "packages not found" msgstr "Pakete nicht gefunden" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "Pakete erfolgreich installiert und konfiguriert." #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "Fehler beim Paketeinstallieren: {string} {details}" #: plinth/service.py:73 msgid "Web Server" msgstr "Web Server" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "Web Server über Secure Socket Layer" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "Secure Shell (SSH) Server" #: plinth/service.py:79 #, python-brace-format #| msgid "FreedomBox Web Interface (Plinth)" msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Web Benutzerschnittstelle (Plinth)" #: plinth/templates/404.html:25 msgid "404" msgstr "404" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "Angeforderte Seite %(request_path)s nicht gefunden." #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" "Wenn Sie denken, dass diese fehlende Seite vorhanden sein sollte, erstellen " "Sie bitte eine Fehlermeldung im Plinth Projekt issue tracker." #: plinth/templates/500.html:25 msgid "500" msgstr "500" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" "Dies ist ein interner Fehler und nicht etwas, das Sie verursacht haben oder " "beheben können. Bitte melden Sie den Fehler auf dem Bugtracker, so dass wir es beheben können." #: plinth/templates/base.html:49 #, python-format #| msgid "Plinth administrative interface for the FreedomBox" msgid "Plinth administrative interface for the %(box_name)s" msgstr "Plinth Verwaltungsschnittstelle für %(box_name)s" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Navigation umschalten" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Passwort ändern" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Abmelden" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Anmelden" #: plinth/templates/login.html:35 msgid "Login" msgstr "Anmelden" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "Installation" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" "Diese Funktion erfordert dass zusätzliche Pakete installiert werden. Möchten " "Sie sie installieren?" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "Paket" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "Zusammenfassung" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "Installieren" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "Installiere %(package_names)s: %(status)s" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% abgearbeitet" #~ msgid "show password" #~ msgstr "Passwort anzeigen" #~ msgid "The following is the current status:" #~ msgstr "Der aktuelle Status ist wie folgt:" #~ msgid "Congratulations! Your FreedomBox is up and running!" #~ msgstr "Glückwunsch! Ihre FreedomBox läuft!" #~ msgid "" #~ "Please provide the following basic information to complete the setup " #~ "process." #~ msgstr "" #~ "Bitte geben Sie die folgenden grundlegenden Informationen an um die " #~ "Installation abzuschließen." #~ msgid "Next" #~ msgstr "Weiter" #~ msgid "FreedomBox Manual" #~ msgstr "FreedomBox Handbuch" #~ msgid "" #~ "Many FreedomBox contributors and users are also available on the " #~ "#freedombox channel of the irc.oftc.net IRC network." #~ msgstr "" #~ "Viele Mitwirkende bei FreedomBox und Benutzer sind auch über den " #~ "#freedombox Kanal des irc.oftc.net IRC Netzwerks erreichbar." #~ msgid "Create Wiki/Blog" #~ msgstr "Wiki/Blog anlegen" #~ msgid "" #~ "Select Automatic (DHCP) if you are connecting to an existing wireless " #~ "network. Shared mode is useful when running an Access Point." #~ msgstr "" #~ "Wählen Sie Automatisch (DHCP), wenn Sie zu einem bestehenden drahtlosen " #~ "Netzwerk verbunden sind. Shared mode ist nützlich bei Verwendung eines " #~ "Access Points." #~ msgid "Tor enabled" #~ msgstr "Tor eingeschaltet" #~ msgid "Tor disabled" #~ msgstr "Tor ausgeschaltet" #~ msgid "Tor hidden service enabled" #~ msgstr "Tor verborgener Dienst eingeschaltet" #~ msgid "Tor hidden service disabled" #~ msgstr "Tor verborgener Dienst ausgeschaltet" #~ msgid "Enabled package download over Tor" #~ msgstr "Package Download über Tor eingeschaltet" #~ msgid "Disabled package download over Tor" #~ msgstr "Package Download über Tor ausgeschaltet" #~ msgid "There was an error while upgrading." #~ msgstr "Es trat ein Fehler beim automatischen Update auf." #~ msgid "Output from unattended-upgrades:" #~ msgstr "Meldungen der automatischen Aktualisierungen:" #~ msgid "The operating system is up to date now.  " #~ msgstr "Das Betriebssystem ist nun auf dem neuesten Stand.  " #~ msgid "Show Details" #~ msgstr "Zeige Details" #~ msgid "" #~ "This will run unattended-upgrades, which will attempt to upgrade your " #~ "system with the latest Debian packages. It may take a few minutes to " #~ "complete." #~ msgstr "" #~ "Hier werden automatische Updates gestartet welche versuchen werden das " #~ "System mit den neusten Debian Paketen zu versorgen. Es kann einige " #~ "Minuten dauern bis dieser Vorgang abgeschlossen ist." #~ msgid "System is being upgraded." #~ msgstr "System wir aktualisiert." #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." #~ msgstr "" #~ "Es können verschiedene Dienste und Anwendungen auf der %(box_name)s " #~ "installiert und betrieben werden." #~ msgid "Physical interface" #~ msgstr "Physikalisches Interface" #~ msgid "Delete Connection %(name)s" #~ msgstr "Lösche Verbindung %(name)s" #~ msgid "Bittorrent (Transmission)" #~ msgstr "Bittorrent (Transmission)" #~ msgid "Delete user permanently?" #~ msgstr "Benutzer permanent löschen?" #~ msgid "Edit User %(username)s" #~ msgstr "Benutzer %(username)s bearbeiten" #~ msgid "Scramblesuit transport registered" #~ msgstr "Scramblesuit Transport registriert" Plinth-0.8.1/plinth/locale/django.pot000066400000000000000000002410601266051671100175110ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "" #: plinth/modules/config/config.py:97 #, python-brace-format msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "" #: plinth/modules/config/config.py:110 #, python-brace-format msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" #: plinth/modules/config/config.py:125 msgid "Language" msgstr "" #: plinth/modules/config/config.py:127 msgid "Language for this web administration interface" msgstr "" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "" #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format msgid "The public domain name you want use to reach your {box_name}." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:135 msgid "Accept all SSL certificates" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:139 msgid "Use HTTP basic authentication" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 msgid "Dynamic DNS Client" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 msgid "Direct connection to the Internet." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "" #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "" #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 msgid "Current Network Configuration" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "" #: plinth/modules/help/help.py:73 #, python-brace-format msgid "{box_name} Manual" msgstr "" #: plinth/modules/help/templates/help_about.html:30 #, python-format msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" #: plinth/modules/help/templates/help_about.html:56 #, python-format msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 #, python-format msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 #, python-format msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 #, python-format msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 msgid "Wiki and Blog (ikiwiki)" msgstr "" #: plinth/modules/ikiwiki/__init__.py:43 msgid "ikiwiki wikis and blogs" msgstr "" #: plinth/modules/ikiwiki/forms.py:29 msgid "Enable ikiwiki" msgstr "" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format msgid "Delete Wiki or Blog %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "" #: plinth/modules/ikiwiki/views.py:73 msgid "Wiki and Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "" #: plinth/modules/ikiwiki/views.py:132 msgid "Create Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "" #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "" #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "" #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:182 msgid "Delete Wiki or Blog" msgstr "" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 msgid "Domain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 msgid "Actions" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "" #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "" #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "" #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "" #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "" #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "" #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "" #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "" #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "" #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "" #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 msgid "SIP Server (repro)" msgstr "" #: plinth/modules/repro/__init__.py:41 msgid "repro SIP Server" msgstr "" #: plinth/modules/repro/forms.py:29 msgid "Enable repro service" msgstr "" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 msgid "repro service is running" msgstr "" #: plinth/modules/repro/templates/repro.html:66 msgid "repro service is not running" msgstr "" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" #: plinth/modules/system/system.py:26 msgid "System" msgstr "" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "" #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "" #: plinth/modules/tor/__init__.py:53 msgid "Tor Anonymity Network" msgstr "" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" #: plinth/modules/tor/templates/tor.html:54 msgid "Tor configuration is being updated" msgstr "" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" #: plinth/modules/tor/views.py:148 msgid "Configuration updated." msgstr "" #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "" #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "" #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "" #: plinth/modules/upgrades/views.py:99 msgid "Starting upgrade failed." msgstr "" #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "" #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "" #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "" #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "" #: plinth/network.py:39 msgid "PPPoE" msgstr "" #: plinth/package.py:156 msgid "packages not found" msgstr "" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "" #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "" #: plinth/service.py:73 msgid "Web Server" msgstr "" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 msgid "404" msgstr "" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "" #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" #: plinth/templates/500.html:25 msgid "500" msgstr "" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" #: plinth/templates/login.html:35 msgid "Login" msgstr "" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "" Plinth-0.8.1/plinth/locale/es/000077500000000000000000000000001266051671100161275ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/es/LC_MESSAGES/000077500000000000000000000000001266051671100177145ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/es/LC_MESSAGES/django.po000066400000000000000000002411371266051671100215260ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "" #: plinth/modules/config/config.py:97 #, python-brace-format msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "" #: plinth/modules/config/config.py:110 #, python-brace-format msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" #: plinth/modules/config/config.py:125 msgid "Language" msgstr "" #: plinth/modules/config/config.py:127 msgid "Language for this web administration interface" msgstr "" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "" #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format msgid "The public domain name you want use to reach your {box_name}." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:135 msgid "Accept all SSL certificates" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:139 msgid "Use HTTP basic authentication" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 msgid "Dynamic DNS Client" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 msgid "Direct connection to the Internet." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "" #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "" #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 msgid "Current Network Configuration" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "" #: plinth/modules/help/help.py:73 #, python-brace-format msgid "{box_name} Manual" msgstr "" #: plinth/modules/help/templates/help_about.html:30 #, python-format msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" #: plinth/modules/help/templates/help_about.html:56 #, python-format msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 #, python-format msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 #, python-format msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 #, python-format msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 msgid "Wiki and Blog (ikiwiki)" msgstr "" #: plinth/modules/ikiwiki/__init__.py:43 msgid "ikiwiki wikis and blogs" msgstr "" #: plinth/modules/ikiwiki/forms.py:29 msgid "Enable ikiwiki" msgstr "" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format msgid "Delete Wiki or Blog %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "" #: plinth/modules/ikiwiki/views.py:73 msgid "Wiki and Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "" #: plinth/modules/ikiwiki/views.py:132 msgid "Create Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "" #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "" #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "" #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:182 msgid "Delete Wiki or Blog" msgstr "" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 msgid "Domain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 msgid "Actions" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "" #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "" #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "" #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "" #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "" #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "" #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "" #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "" #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "" #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "" #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 msgid "SIP Server (repro)" msgstr "" #: plinth/modules/repro/__init__.py:41 msgid "repro SIP Server" msgstr "" #: plinth/modules/repro/forms.py:29 msgid "Enable repro service" msgstr "" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 msgid "repro service is running" msgstr "" #: plinth/modules/repro/templates/repro.html:66 msgid "repro service is not running" msgstr "" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" #: plinth/modules/system/system.py:26 msgid "System" msgstr "" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "" #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "" #: plinth/modules/tor/__init__.py:53 msgid "Tor Anonymity Network" msgstr "" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" #: plinth/modules/tor/templates/tor.html:54 msgid "Tor configuration is being updated" msgstr "" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" #: plinth/modules/tor/views.py:148 msgid "Configuration updated." msgstr "" #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "" #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "" #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "" #: plinth/modules/upgrades/views.py:99 msgid "Starting upgrade failed." msgstr "" #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "" #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "" #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "" #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "" #: plinth/network.py:39 msgid "PPPoE" msgstr "" #: plinth/package.py:156 msgid "packages not found" msgstr "" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "" #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "" #: plinth/service.py:73 msgid "Web Server" msgstr "" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 msgid "404" msgstr "" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "" #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" #: plinth/templates/500.html:25 msgid "500" msgstr "" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" #: plinth/templates/login.html:35 msgid "Login" msgstr "" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "" Plinth-0.8.1/plinth/locale/fake/000077500000000000000000000000001266051671100164265ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/fake/LC_MESSAGES/000077500000000000000000000000001266051671100202135ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/fake/LC_MESSAGES/django.po000066400000000000000000003475411266051671100220330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Plinth 0.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2016-01-31 22:24+0530\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Plinth Developers \n" "Language: te\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "LISTENING ON {kind} PORT {listen_address}:{port}" # LISTENING ON {kind} PORT {port} #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "LISTENING ON {kind} PORT {port}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "ACCESS URL {url} ON TCP{kind}" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "ACCESS URL {url}" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "CONNECT TO {host}:{port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "CANNOT CONNECT TO {host}:{port}" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FREEDOMBOX" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "APPS" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "APPLICATIONS" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "SERVICES AND APPLICATIONS" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" "YOU CAN INSTALL AND RUN VARIOUS SERVICES AND APPLICATIONS ON YOUR " "%(box_name)s. CLICK ON ANY APP PAGE LINK ON THE LEFT TO READ A DESCRIPTION " "OF THE APPLICATION AND CHOOSE TO INSTALL IT." #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "THIS BOX CAN BE YOUR PHOTO SHARING SITE, YOUR INSTANT MESSAGING SITE, YOUR\n" "SOCIAL NETWORKING SITE, YOUR NEWS SITE. REMEMBER WEB PORTALS? WE CAN BE\n" "ONE OF THOSE TOO. MANY OF THE SERVICES YOU USE ON THE WEB COULD SOON BE ON\n" "SITE AND UNDER YOUR CONTROL!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "SERVICE DISCOVERY" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "ENABLE SERVICE DISCOVERY" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "SERVICE DISCOVERY ALLOWS OTHER DEVICES ON THE NETWORK TO DISCOVER YOUR " "%(box_name)s AND SERVICES RUNNING ON IT. IT ALSO ALLOWS %(box_name)s TO " "DISCOVER OTHER DEVICES AND SERVICES RUNNING ON YOUR LOCAL NETWORK. SERVICE " "DISCOVERY IS NOT ESSENTIAL AND WORKS ONLY ON INTERNAL NETWORKS. IT MAY BE " "DISABLED TO IMPROVE SECURITY ESPECIALLY WHEN CONNECTING TO A HOSTILE LOCAL " "NETWORK." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "STATUS" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "SERVICE DISCOVERY SERVER IS RUNNING" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "SERVICE DISCOVERY SERVER IS NOT RUNNING" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "CONFIGURATION" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "UPDATE SETUP" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "CONFIGURATION UPDATED" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "SETTING UNCHANGED" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "INVALID DOMAIN NAME" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "HOSTNAME" #: plinth/modules/config/config.py:97 #, python-brace-format msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "HOSTNAME IS THE LOCAL NAME BY WHICH OTHER DEVICES ON THE LOCAL NETWORK CAN " "REACH YOUR {box_name}. IT MUST START AND END WITH AN ALPHABET OR A DIGIT " "AND HAVE AS INTERIOR CHARACTERS ONLY ALPHABETS, DIGITS AND HYPHENS. TOTAL " "LENGTH MUST BE 63 CHARACTERS OR LESS." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "INVALID HOSTNAME" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "DOMAIN NAME" #: plinth/modules/config/config.py:110 #, python-brace-format msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "DOMAIN NAME IS THE GLOBAL NAME BY WHICH OTHER DEVICES ON THE INTERNET CAN " "REACH YOUR {box_name}. IT MUST CONSIST OF LABELS SEPARATED BY DOTS. EACH " "LABEL MUST START AND END WITH AN ALPHABET OR A DIGIT AND HAVE AS INTERIOR " "CHARACTERS ONLY ALPHABETS, DIGITS AND HYPHENS. LENGTH OF EACH LABEL MUST BE " "63 CHARACTERS OR LESS. TOTAL LENGTH OF DOMAIN NAME MUST BE 253 CHARACTERS " "OR LESS." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "LANGUAGE" #: plinth/modules/config/config.py:127 msgid "Language for this web administration interface" msgstr "LANGUAGE FOR THIS WEB ADMINISTRATION INTERFACE" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "CONFIGURE" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "GENERAL CONFIGURATION" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "ERROR SETTING HOSTNAME: {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "HOSTNAME SET" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "ERROR SETTING DOMAIN NAME: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "DOMAIN NAME SET" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "ERROR SETTING LANGUAGE: {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "LANGUAGE UNCHANGED" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "SUBMIT" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "DATE & TIME" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "NETWORK TIME SERVER" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "NTP CLIENT IN CONTACT WITH SERVERS" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "ENABLE NETWORK TIME" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "TIME ZONE" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" "SET YOUR TIME ZONE TO GET ACCURATE TIMESTAMPS. THIS WILL SET THE SYSTEMWIDE " "TIME ZONE." #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- NO TIME ZONE SET --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" "NETWORK TIME SERVER IS A PROGRAM THAT MAINTIANS THE SYSTEM TIME IN " "SYNCHRONIZATION WITH SERVERS ON THE INTERNET." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "NETWORK TIME SERVER IS RUNNING" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "NETWORK TIME SERVER IS NOT RUNNING" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "ERROR SETTING TIME ZONE: {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "TIME ZONE SET" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "BITTORRENT (DELUGE)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "DELUGE BITTORRENT" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "ENABLE DELUGE" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "BITTORRENT WEB CLIENT (DELUGE)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "DELUGE IS A BITTORRENT CLIENT THAT FEATURES A WEB UI." #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" "WHEN ENABLED, THE DELUGE WEB CLIENT WILL BE AVAILABLE FROM /DELUGE PATH ON THE WEB SERVER. THE DEFAULT PASSWORD IS 'DELUGE', BUT " "YOU SHOULD LOG IN AND CHANGE IT IMMEDIATELY AFTER ENABLING THIS SERVICE." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "DELUGE-WEB IS RUNNING" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "DELUGE-WEB IS NOT RUNNING" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "DIAGNOSTICS" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "SYSTEM DIAGNOSTICS" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "DIAGNOSTIC TEST" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" "THE SYSTEM DIAGNOSTIC TEST WILL RUN A NUMBER OF CHECKS ON YOUR SYSTEM TO " "CONFIRM THAT APPLICATIONS AND SERVICES ARE WORKING AS EXPECTED." #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "RUN DIAGNOSTICS" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "DIAGNOTICS TEST IS CURRENTLY RUNNING" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "RESULTS" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "MODULE: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "DIAGNOSTIC RESULTS" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "MODULE: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "THIS MODULE DOES NOT SUPPORT DIAGNOSTICS" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "TEST" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "RESULT" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "ABOUT" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "DYNAMIC DNS" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "THE VARIABLES <USER>, <PASS>, <IP>, <DOMAIN> MAY BE " "USED WITHIN THE URL. FOR DETAILS SEE THE UPDATE URL TEMPLATES OF THE EXAMPLE " "PROVIDERS." #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" "PLEASE CHOOSE AN UPDATE PROTOCOL ACCORDING TO YOUR PROVIDER. IF YOUR " "PROVIDER DOES NOT SUPPORT THE GNUDIP PROTOCOL OR YOUR PROVIDER IS NOT LISTED " "YOU MAY USE THE UPDATE URL OF YOUR PROVIDER." #: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "PLEASE DO NOT ENTER A URL HERE (LIKE \"HTTPS://EXAMPLE.COM/\") BUT ONLY THE " "HOSTNAME OF THE GNUDIP SERVER (LIKE \"EXAMPLE.COM\")." #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format msgid "The public domain name you want use to reach your {box_name}." msgstr "THE PUBLIC DOMAIN NAME YOU WANT USE TO REACH YOUR {box_name}." #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "USE THIS OPTION IF YOUR PROVIDER USES SELF SIGNED CERTIFICATES." #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" "IF THIS OPTION IS SELECTED, YOUR USERNAME AND PASSWORD WILL BE USED FOR HTTP " "BASIC AUTHENTICATION." #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" "LEAVE THIS FIELD EMPTY IF YOU WANT TO KEEP YOUR PREVIOUS CONFIGURED PASSWORD." #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" "OPTIONAL VALUE. IF YOUR {box_name} IS NOT CONNECTED DIRECTLY TO THE INTERNET " "(I.E. CONNECTED TO A NAT ROUTER) THIS URL IS USED TO FIGURE OUT THE REAL " "INTERNET IP. THE URL SHOULD SIMPLY RETURN THE IP WHERE THE CLIENT COMES FROM " "(EXAMPLE: HTTP://MYIP.DATASYSTEMS24.DE)." #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" "YOU SHOULD HAVE BEEN REQUESTED TO SELECT A USERNAME WHEN YOU CREATED THE " "ACCOUNT." #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "ENABLE DYNAMIC DNS" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "SERVICE TYPE" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GNUDIP SERVER ADDRESS" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "INVALID SERVER NAME" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "UPDATE URL" #: plinth/modules/dynamicdns/dynamicdns.py:135 msgid "Accept all SSL certificates" msgstr "ACCEPT ALL SSL CERTIFICATES" #: plinth/modules/dynamicdns/dynamicdns.py:139 msgid "Use HTTP basic authentication" msgstr "USE HTTP BASIC AUTHENTICATION" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "USERNAME" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "PASSWORD" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "SHOW PASSWORD" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP CHECK URL" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "PLEASE PROVIDE UPDATE URL OR A GNUDIP SERVER" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "PLEASE PROVIDE GNUDIP USERNAME" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "PLEASE PROVIDE GNUDIP DOMAIN" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "PLEASE PROVIDE A PASSWORD" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "CONFIGURE DYNAMIC DNS" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "STATUS OF DYNAMIC DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 msgid "Dynamic DNS Client" msgstr "DYNAMIC DNS CLIENT" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "IF YOUR INTERNET PROVIDER CHANGES YOUR IP ADDRESS PERIODIC (I.E. EVERY 24H) " "IT MAY BE HARD FOR OTHERS TO FIND YOU IN THE WEB. AND FOR THIS REASON NOBODY " "MAY FIND THE SERVICES WHICH ARE PROVIDED BY %(box_name)s, SUCH AS OWNCLOUD." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" "THE SOLUTION IS TO ASSIGN A DNS NAME TO YOUR IP ADDRESS AND UPDATE THE DNS " "NAME EVERY TIME YOUR IP IS CHANGED BY YOUR INTERNET PROVIDER. DYNAMIC DNS " "ALLOWS YOU TO PUSH YOUR CURRENT PUBLIC IP ADDRESS TO AN GNUDIP SERVER. AFTERWARDS " "THE SERVER WILL ASSIGN YOUR DNS NAME WITH THE NEW IP AND IF SOMEONE FROM THE " "INTERNET ASKS FOR YOUR DNS NAME HE WILL GET YOUR CURRENT IP ANSWERED." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" "IF YOU ARE LOOKING FOR A FREE DYNAMIC DNS ACCOUNT, YOU MAY FIND A FREE " "GNUDIP SERVICE AT GNUDIP.DATASYSTEMS24.NET OR YOU MAY FIND FREE UPDATE URL " "BASED SERVICES ON " "FREEDNS.AFRAID.ORG." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "IF YOUR %(box_name)s IS CONNECTED BEHIND SOME NAT ROUTER, DON'T FORGET TO " "ADD PORT FORWARDING (I.E. FORWARD SOME STANDARD PORTS LIKE 80 AND 443) TO " "YOUR %(box_name)s DEVICE." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" "YOU HAVE DISABLED JAVASCRIPT. DYNAMIC FORM MODE IS DISABLED AND SOME HELPER " "FUNCTIONS MAY NOT WORK (BUT THE MAIN FUNCTIONALITY SHOULD WORK)." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "NAT TYPE" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" "NAT TYPE NOT DETECTED YET, IF YOU DO NOT PROVIDE A \"IP CHECK URL\" WE WILL " "NOT DETECT A NAT TYPE." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 msgid "Direct connection to the Internet." msgstr "DIRECT CONNECTION TO THE INTERNET." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" "BEHIND NAT. THIS MEANS THAT DYNAMIC DNS SERVICE WILL POLL THE \"IP CHECK URL" "\" FOR CHANGES (THE \"IP CHECK URL\" ENTRY IS NEEDED FOR THIS - OTHERWISE IP " "CHANGES WILL NOT BE DETECTED). IN CASE THE WAN IP CHANGES, IT MAY TAKE UP " "TO %(timer)s MINUTES UNTIL YOUR DNS ENTRY IS UPDATED." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "LAST UPDATE" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "FIREWALL" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" "FIREWALL IS A SECURITY SYSTEM THAT CONTROLS THE INCOMING AND OUTGOING " "NETWORK TRAFFIC ON YOUR %(box_name)s. KEEPING A FIREWALL ENABLED AND " "PROPERLY CONFIGURED REDUCES RISK OF SECURITY THREAT FROM THE INTERNET." #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "CURRENT STATUS:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" "FIREWALL DAEMON IS NOT RUNNING. PLEASE RUN IT. FIREWALL COMES ENABLED BY " "DEFAULT ON %(box_name)s. ON ANY DEBIAN BASED SYSTEM (SUCH AS %(box_name)s) " "YOU MAY RUN IT USING THE COMMAND 'SERVICE FIREWALLD START' OR IN CASE OF A " "SYSTEM WITH SYSTEMD 'SYSTEMCTL START FIREWALLD'." #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "SERVICE/PORT" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "ENABLED" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "DISABLED" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "PERMITTED" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "PERMITTED (INTERNAL ONLY)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "PERMITTED (EXTERNAL ONLY)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "BLOCKED" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" "THE OPERATION OF THE FIREWALL IS AUTOMATIC. WHEN YOU ENABLE A SERVICE IT IS " "ALSO PERMITTED IN THE FIREWALL AND WHEN YOU DISABLE A SERVICE IT IS ALSO " "DISABLED IN THE FIREWALL." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "CREATING LDAP USER FAILED." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "FAILED TO ADD NEW USER TO ADMIN GROUP." #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "USER ACCOUNT CREATED, YOU ARE NOW LOGGED IN" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "HELP" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "START SETUP" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" "TO COMPLETE THE SETUP OF YOUR %(box_name)s, PLEASE PROVIDE SOME BASIC " "INFORMATION." #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "ADMINISTRATOR ACCOUNT" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" "CHOOSE A USERNAME AND PASSWORD TO ACCESS THIS WEB INTERFACE. THE PASSWORD " "CAN BE CHANGED LATER. THIS USER WILL BE GRANTED ADMINISTRATIVE PRIVILEGES. " "OTHER USERS CAN BE ADDED LATER." #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "BOX IT UP!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "SETUP COMPLETE!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" "%(box_name)s SETUP IS NOW COMPLETE. TO MAKE YOUR %(box_name)s FUNCTIONAL, \n" "YOU NEED SOME APPLICATIONS. THEY WILL BE INSTALLED THE FIRST TIME \n" "YOU ACCESS THEM." #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "GO TO APPS" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 msgid "Current Network Configuration" msgstr "CURRENT NETWORK CONFIGURATION" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" "YOU SHOULD CHECK THE NETWORK SETUP AND MODIFY IT IF NECESSARY. DO NOT " "FORGET \n" "TO CHANGE THE DEFAULT WI-FI PASSWORDS!" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "GO TO NETWORKS" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "SETUP COMPLETE" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "DOCUMENTATION" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "WHERE TO GET HELP" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "MANUAL" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "DOCUMENTATION AND FAQ" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "ABOUT {box_name}" #: plinth/modules/help/help.py:73 #, python-brace-format msgid "{box_name} Manual" msgstr "{box_name} MANUAL" #: plinth/modules/help/templates/help_about.html:30 #, python-format msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" "%(box_name)s IS A COMMUNITY PROJECT TO DEVELOP, DESIGN AND PROMOTE PERSONAL " "SERVERS RUNNING FREE SOFTWARE FOR PRIVATE, PERSONAL COMMUNICATIONS. IT IS A " "NETWORKING APPLIANCE DESIGNED TO ALLOW INTERFACING WITH THE REST OF THE " "INTERNET UNDER CONDITIONS OF PROTECTED PRIVACY AND DATA SECURITY. IT HOSTS " "APPLICATIONS SUCH AS BLOG, WIKI, WEBSITE, SOCIAL NETWORK, EMAIL, WEB PROXY " "AND A TOR RELAY, ON A DEVICE THAT CAN REPLACE YOUR WI-FI ROUTER, SO THAT " "YOUR DATA STAYS WITH YOU." #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" "WE LIVE IN A WORLD WHERE OUR USE OF THE NETWORK IS MEDIATED BY THOSE WHO " "OFTEN DO NOT HAVE OUR BEST INTERESTS AT HEART. BY BUILDING SOFTWARE THAT " "DOES NOT RELY ON A CENTRAL SERVICE, WE CAN REGAIN CONTROL AND PRIVACY. BY " "KEEPING OUR DATA IN OUR HOMES, WE GAIN USEFUL LEGAL PROTECTIONS OVER IT. BY " "GIVING BACK POWER TO THE USERS OVER THEIR NETWORKS AND MACHINES, WE ARE " "RETURNING THE INTERNET TO ITS INTENDED PEER-TO-PEER ARCHITECTURE." #: plinth/modules/help/templates/help_about.html:56 #, python-format msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" "THERE ARE A NUMBER OF PROJECTS WORKING TO REALIZE A FUTURE OF DISTRIBUTED " "SERVICES; %(box_name)s AIMS TO BRING THEM ALL TOGETHER IN A CONVENIENT " "PACKAGE." #: plinth/modules/help/templates/help_about.html:64 #, python-format msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "FOR MORE INFORMATION ABOUT THE %(box_name)s PROJECT, SEE THE %(box_name)s WIKI." #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "LEARN MORE »" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "YOU ARE RUNNING PLINTH VERSION %(version)s." #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "%(box_name)s SETUP" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "THE %(box_name)s MANUAL IS THE BEST PLACE TO " "START FOR INFORMATION REGARDING %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 #, python-format msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" " " "%(box_name)s PROJECT WIKI CONTAINS FURTHER INFORMATION." #: plinth/modules/help/templates/help_index.html:43 #, python-format msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" "TO SEEK HELP FROM %(box_name)s COMMUNITY, QUERIES MAY BE POSTED ON THE MAILING LIST. THE LIST ARCHIVES ALSO CONTAIN INFORMATION ABOUT " "PROBLEMS FACED BY OTHER USERS AND POSSIBLE SOLUTIONS." #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" "MANY %(box_name)s CONTRIBUTORS AND USERS ARE ALSO AVAILABLE ON THE IRC.OFTC." "NET IRC NETWORK. JOIN AND REQUEST HELP ON THE #FREEDOMBOX " "CHANNEL USING THE IRC WEB INTERFACE." #: plinth/modules/ikiwiki/__init__.py:38 msgid "Wiki and Blog (ikiwiki)" msgstr "WIKI AND BLOG (IKIWIKI)" #: plinth/modules/ikiwiki/__init__.py:43 msgid "ikiwiki wikis and blogs" msgstr "IKIWIKI WIKIS AND BLOGS" #: plinth/modules/ikiwiki/forms.py:29 msgid "Enable ikiwiki" msgstr "ENABLE IKIWIKI" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "TYPE" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "NAME" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "ADMIN ACCOUNT NAME" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "ADMIN ACCOUNT NAMEADMIN ACCOUNT PASSWORD" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" "WHEN ENABLED, THE BLOGS AND WIKIS WILL BE AVAILABLE FROM /IKIWIKI." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format msgid "Delete Wiki or Blog %(name)s" msgstr "DELETE WIKI OR BLOG %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" "THIS ACTION WILL REMOVE ALL THE POSTS, PAGES AND COMMENTS INCLUDING REVISION " "HISTORY. DELETE THIS WIKI OR BLOG PERMANENTLY?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "DELETE %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "CANCEL" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "NO WIKIS OR BLOGS AVAILABLE." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "CREATE A WIKI OR BLOG" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "DELETE SITE %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "GO TO SITE %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "MANAGE" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "CREATE" #: plinth/modules/ikiwiki/views.py:73 msgid "Wiki and Blog" msgstr "WIKI AND BLOG" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "MANAGE WIKIS AND BLOGS" #: plinth/modules/ikiwiki/views.py:132 msgid "Create Wiki or Blog" msgstr "CREATE WIKI OR BLOG" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "CREATED WIKI {name}." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "COULD NOT CREATE WIKI: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "CREATED BLOG {name}." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "COULD NOT CREATE BLOG: {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "{name} DELETED." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "COULD NOT DELETE {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 msgid "Delete Wiki or Blog" msgstr "DELETE WIKI OR BLOG" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "CERTIFICATES (LET'S ENCRYPT)" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" "A DIGITAL CERTFICATE ALLOWS USERS OF A WEB SERVICE TO VERIFY THE IDENTITY OF " "THE SERVICE AND TO SECURELY COMMUNICATE WITH IT. %(box_name)s CAN " "AUTOMATICALLY OBTAIN AND SETUP DIGITAL CERTIFICATES FOR EACH AVAILABLE " "DOMAIN. IT DOES SO BY PROVING ITSELF TO BE THE OWNER OF A DOMAIN TO LET'S " "ENCRYPT, A CERTFICATE AUTHORITY (CA)." #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" "LET'S ENCRYPT IS A FREE, AUTOMATED, AND OPEN CERTIFICATE AUTHORITY, RUN FOR " "THE PUBLIC’S BENEFIT BY THE INTERNET SECURITY RESEARCH GROUP (ISRG). PLEASE " "READ AND AGREE WITH THE LET'S ENCRYPT SUBSCRIBER AGREEMENT BEFORE USING THIS SERVICE." #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 msgid "Domain" msgstr "DOMAIN" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "CERTIFICATE STATUS" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "WEBSITE SECURITY" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 msgid "Actions" msgstr "ACTIONS" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "EXPIRES ON %(expiry_date)s" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "NO CERTFICATE" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "REVOKE" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "RE-OBTAIN" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "OBTAIN" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "CERTIFICATE SUCCESSFULLY REVOKED FOR DOMAIN {domain}" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "FAILED TO REVOKE CERTIFICATE FOR DOMAIN {domain}: {error}" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "CERTIFICATE SUCCESSFULLY OBTAINED FOR DOMAIN {domain}" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "FAILED TO OBTAIN CERTIFICATE FOR DOMAIN {domain}: {error}" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "MONKEYSPHERE" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" "WITH MONKEYSPHERE, A PGP KEY CAN BE GENERATED FOR EACH CONFIGURED DOMAIN " "SERVING SSH. THE PGP PUBLIC KEY CAN THEN BE UPLOADED TO THE PGP KEYSERVERS. " "USERS CONNECTING TO THIS MACHINE THROUGH SSH CAN VERIFY THAT THEY ARE " "CONNECTING TO THE CORRECT HOST. FOR USERS TO TRUST THE KEY, AT LEAST ONE " "PERSON (USUALLY THE MACHINE OWNER) MUST SIGN THE KEY USING THE REGULAR PGP " "KEY SIGNING PROCESS. SEE THE MONKEYSPHERE SSH DOCUMENTATION FOR MORE " "DETAILS." #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "PUBLISHING KEY TO KEYSERVER..." #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "GPG FINGERPRINT" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "NOT AVAILABLE" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "GENERATE PGP KEY" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "PUBLISH KEY" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "GENERATED PGP KEY." #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "CANCELLED KEY PUBLISHING." #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "PUBLISHED KEY TO KEYSERVER." #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "ERROR OCCURRED WHILE PUBLISHING KEY." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "VOICE CHAT (MUMBLE)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "MUMBLE VOICE CHAT SERVER" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "ENABLE MUMBLE DAEMON" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" "MUMBLE IS AN OPEN SOURCE, LOW-LATENCY, ENCRYPTED, HIGH QUALITY VOICE CHAT " "SOFTWARE." #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "YOU CAN CONNECT TO YOUR MUMBLE SERVER ON THE REGULAR MUMBLE PORT 64738. CLIENTS TO CONNECT TO MUMBLE FROM YOUR " "DESKTOP AND ANDROID DEVICES ARE AVAILABLE." #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "MUMBLE SERVER IS RUNNING" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "MUMBLE SERVER IS NOT RUNNING" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "NAME SERVICES" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "USING DNSSEC ON IPV{kind}" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "CONNECTION TYPE" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "CONNECTION NAME" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "PHYSICAL INTERFACE" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "THE NETWORK DEVICE THAT THIS CONNECTION SHOULD BE BOUND TO." #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "FIREWALL ZONE" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" "THE FIREWALL ZONE WILL CONTROL WHICH SERVICES ARE AVAILABLE OVER THIS " "INTERFACES. SELECT INTERNAL ONLY FOR TRUSTED NETWORKS." #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPV4 ADDRESSING METHOD" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" "\"SHARED\" METHOD WILL START A DHCP SERVER AND \"AUTOMATIC\" METHOD WILL " "ACQUIRE CONFIGURATION FROM A DHCP SERVER." #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "ADDRESS" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "NETMASK" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" "OPTIONAL VALUE. IF LEFT BLANK, A DEFAULT NETMASK BASED ON THE ADDRESS WILL " "BE USED." #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "GATEWAY" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "OPTIONAL VALUE." #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS SERVER" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "OPTIONAL VALUE. IF THIS VALUE IS GIVEN AND IPV4 ADDRESSING METHOD IS " "\"AUTOMATIC\", THE DNS SERVERS PROVIDED BY A DHCP SERVER WILL BE IGNORED." #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "SECOND DNS SERVER" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "OPTIONAL VALUE. IF THIS VALUE IS GIVEN AND IPV4 ADDRESSING METHOD IS " "\"AUTOMATIC\", THE DNS SERVERS PROVIDED BY A DHCP SERVER WILL BE IGNORED." #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "-- SELECT --" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "THE VISIBLE NAME OF THE NETWORK." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "MODE" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "AUTHENTICATION MODE" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" "SELECT WPA IF THE WIRELESS NETWORK IS SECURED AND REQUIRES CLIENTS TO HAVE " "THE PASSWORD TO CONNECT." #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "PASSPHRASE" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "NETWORK CONNECTIONS" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "NEARBY WI-FI NETWORKS" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "ADD CONNECTION" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "NETWORKS" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "CANNOT SHOW CONNECTION: CONNECTION NOT FOUND." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "SHOW CONNECTION INFORMATION" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "CANNOT EDIT CONNECTION: CONNECTION NOT FOUND." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "THIS TYPE OF CONNECTION IS NOT YET UNDERSTOOD." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "EDIT CONNECTION" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "ACTIVATED CONNECTION {name}." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "FAILED TO ACTIVATE CONNECTION: CONNECTION NOT FOUND." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "FAILED TO ACTIVATE CONNECTION {name}: NO SUITABLE DEVICE IS AVAILABLE." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "DEACTIVATED CONNECTION {name}." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "FAILED TO DE-ACTIVATE CONNECTION: CONNECTION NOT FOUND." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "ADDING NEW ETHERNET CONNECTION" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "ADDING NEW PPPOE CONNECTION" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "ADDING NEW WI-FI CONNECTION" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "CONNECTION {name} DELETED." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "FAILED TO DELETE CONNECTION: CONNECTION NOT FOUND." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "DELETE CONNECTION" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "EDIT CONNECTION" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "EDIT" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "DEACTIVATE" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "ACTIVATE" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "DELETE CONNECTION" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "DELETE" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "CONNECTION" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "PRIMARY CONNECTION" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "YES" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "DEVICE" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "STATE" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "STATE REASON" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "MAC ADDRESS" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "INTERFACE" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "DESCRIPTION" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "PHYSICAL LINK" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "LINK STATE" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "CABLE IS CONNECTED" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "PLEASE CHECK CABLE" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "SPEED" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s MBIT/s" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s MBIT/s" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "SIGNAL STRENGTH" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "CHANNEL" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IPV4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "METHOD" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "IP ADDRESS" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "DNS SERVER" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "DEFAULT" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IPV6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "THIS CONNECTION IS NOT ACTIVE." #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "SECURITY" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "FIREWALL ZONE" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" "THIS INTERFACE SHOULD BE CONNECTED TO A LOCAL NETWORK/MACHINE. IF YOU " "CONNECT THIS INTERFACE TO A PUBLIC NETWORK, SERVICES MEANT TO BE AVAILABLE " "ONLY INTERNALLY WILL BECOME AVAILABLE EXTERNALLY. THIS IS A SECURITY RISK." #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" "THIS INTERFACE SHOULD RECEIVE YOUR INTERNET CONNECTION. IF YOU CONNECT IT " "YOUR A LOCAL NETWORK/MACHINE, MANY SERVICES MEANT TO AVAILABLE ONLY " "INTERNALLY WILL NOT BE AVAILABLE." #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "THIS INTERFACE IS NOT MAINTAINED BY %(box_name)s. ITS SECURITY STATUS IS " "UNKNOWN TO %(box_name)s. MANY %(box_name)s SERVICES MAY NOT BE AVAILABLE ON " "THIS INTERFACE. IT IS RECOMMENDED THAT YOU DEACTIVATE OR DELETE THIS " "CONNECTION AND RE-CONFIGURE IT." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "CREATE..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "CREATE CONNECTION" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "DELETE CONNECTION %(name)s PERMANENTLY?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "INTERNET" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "SPACING" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "EXTERNAL" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "ETHERNET" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "WI-FI" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "SHOW CONNECTION %(connection.name)s" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "INTERNAL" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "SHOW CONNECTION %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "COMPUTER" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "DELETE CONNECTION %(name)s" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "ACTIVE" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "INACTIVE" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "VIRTUAL PRIVATE NETWORK (OPENVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "OPENVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "ENABLE OPENVPN SERVER" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "VIRTUAL PRIVATE NETWORK (VPN) IS A TECHNIQUE FOR SECURELY CONNECTING TWO " "DEVICES IN ORDER TO ACCESS RESOURCES OF A PRIVATE NETWORK. WHILE YOU ARE " "AWAY FROM HOME, YOU CAN CONNECT TO YOUR %(box_name)s IN ORDER TO JOIN YOUR " "HOME NETWORK AND ACCESS PRIVATE/INTERNAL SERVICES PROVIDED BY %(box_name)s. " "YOU CAN ALSO ACCESS THE REST OF THE INTERNET VIA %(box_name)s FOR ADDED " "SECURITY AND ANONYMITY." #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "PROFILE" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "TO CONNECT TO %(box_name)s's VPN, YOU NEED TO DOWNLOAD A PROFILE AND FEED IT " "TO AN OPENVPN CLIENT ON YOUR MOBILE OR DESKTOP MACHINE. OPENVPN CLIENTS ARE " "AVAILABLE FOR MOST PLATFORMS. SEE DOCUMENTATION ON RECOMMENDED CLIENTS AND INSTRUCTIONS ON HOW TO " "CONFIGURE THEM." #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "PROFILE IS SPECIFIC TO EACH USER OF %(box_name)s. KEEP IT A SECRET." #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "DOWNLOAD MY PROFILE" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" "OPENVPN HAS NOT YET BEEN SETUP. PERFORMING A SECURE SETUP TAKES A VERY LONG " "TIME. DEPENDING ON HOW FAST YOUR %(box_name)s IS, IT MAY EVEN TAKE HOURS. " "IF THE SETUP IS INTERRUPTED, YOU MAY START IT AGAIN." #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "START SETUP" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "OPENVPN SETUP IS RUNNING" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" "TO PERFORM A SECURE SETUP, THIS PROCESS TAKES A VERY LONG TIME. DEPENDING " "ON HOW FAST YOUR %(box_name)s IS, IT MAY EVEN TAKE HOURS. IF THE SETUP IS " "INTERRUPTED, YOU MAY START IT AGAIN." #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "OPENVPN SERVER IS RUNNING" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "OPENVPN SERVER IS NOT RUNNING" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "SETUP COMPLETED." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "SETUP FAILED." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "ENABLE OWNCLOUD" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "FILE HOSTING (OWNCLOUD)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "OWNCLOUD" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "OWNCLOUD ENABLED" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "OWNCLOUD DISABLED" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" "OWNCLOUD GIVES YOU UNIVERSAL ACCESS TO YOUR FILES THROUGH A WEB INTERFACE OR " "WEBDAV. IT ALSO PROVIDES A PLATFORM TO EASILY VIEW & SYNC YOUR CONTACTS, " "CALENDARS AND BOOKMARKS ACROSS ALL YOUR DEVICES AND ENABLES BASIC EDITING " "RIGHT ON THE WEB. INSTALLATION HAS MINIMAL SERVER REQUIREMENTS, DOESN'T NEED " "SPECIAL PERMISSIONS AND IS QUICK. OWNCLOUD IS EXTENDABLE VIA A SIMPLE BUT " "POWERFUL API FOR APPLICATIONS AND PLUGINS." #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" "WHEN ENABLED, THE OWNCLOUD INSTALLATION WILL BE AVAILABLE FROM /OWNCLOUD PATH ON THE WEB SERVER. VISIT THIS URL TO SET UP " "THE INITIAL ADMINISTRATION ACCOUNT FOR OWNCLOUD." #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "APPLY CHANGES" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "PUBLIC VISIBILITY (PAGEKITE)" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "ENABLE PAGEKITE" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "SERVER DOMAIN" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" "SELECT YOUR PAGEKITE SERVER. SET \"PAGEKITE.NET\" TO USE THE DEFAULT " "PAGEKITE.NET SERVER." #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "SERVER PORT" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "PORT OF YOUR PAGEKITE SERVER (DEFAULT: 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "KITE NAME" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "EXAMPLE: MYBOX.PAGEKITE.ME" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "INVALID KITE NAME" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "KITE SECRET" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" "A SECRET ASSOCIATED WITH THE KITE OR THE DEFAULT SECRET FOR YOUR ACCOUNT IF " "NO SECRET IS SET ON THE KITE." #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "KITE DETAILS SET" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "PAGEKITE SERVER SET" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "PAGEKITE ENABLED" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "PAGEKITE DISABLED" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "SERVICE ENABLED: {name}" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "SERVICE DISABLED: {name}" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "PROTOCOL" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "EXTERNAL (FRONTEND) PORT" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "INTERNAL (FREEDOMBOX) PORT" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "ENABLE SUBDOMAINS" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "DELETED CUSTOM SERVICE" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" "THIS SERVICE IS AVAILABLE AS A STANDARD SERVICE. PLEASE USE THE \"STANDARD " "SERVICES\" PAGE TO ENABLE IT. " #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "ADDED CUSTOM SERVICE" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "THIS SERVICE ALREADY EXISTS" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "PAGEKITE ACCOUNT" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "SAVE SETTINGS" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" "WARNING:
YOUR PAGEKITE FRONTEND SERVER MAY NOT SUPPORT ALL THE " "PROTOCOL/PORT COMBINATIONS THAT YOU ARE ABLE TO DEFINE HERE. FOR EXAMPLE, " "HTTPS ON PORTS OTHER THAN 443 IS KNOWN TO CAUSE PROBLEMS." #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "CREATE A CUSTOM SERVICE" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "ADD SERVICE" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "EXISTING CUSTOM SERVICES" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "YOU DON'T HAVE ANY CUSTOM SERVICES ENABLED" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "CONNECTED TO %(backend_host)s:%(backend_port)s" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "DELETE THIS SERVICE" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" "PAGEKITE IS A SYSTEM FOR EXPOSING %(box_name)s SERVICES WHEN YOU DON'T HAVE " "A DIRECT CONNECTION TO THE INTERNET. YOU ONLY NEED THIS IF YOUR %(box_name)s " "SERVICES ARE UNREACHABLE FROM THE REST OF THE INTERNET. THIS INCLUDES THE " "FOLLOWING SITUATIONS:" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "%(box_name)s IS BEHIND A RESTRICTED FIREWALL." #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" "%(box_name)s IS CONNECTED TO A (WIRELESS) ROUTER WHICH YOU DON'T CONTROL." #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" "YOUR ISP DOES NOT PROVIDE YOU AN EXTERNAL IP ADDRESS AND INSTEAD PROVIDES " "INTERNET CONNECTION THROUGH NAT." #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" "YOUR ISP DOES NOT PROVIDE YOU A STATIC IP ADDRESS AND YOUR IP ADDRESS " "CHANGES EVERTIME YOU CONNECT TO INTERNET." #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "YOUR ISP LIMITS INCOMING CONNECTIONS." #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" "PAGEKITE WORKS AROUND NAT, FIREWALLS AND IP-ADDRESS LIMITATIONS BY USING A " "COMBINATION OF TUNNELS AND REVERSE PROXIES. YOU CAN USE ANY PAGEKITE SERVICE " "PROVIDER, FOR EXAMPLE PAGEKITE.NET. IN " "FUTURE IT MIGHT BE POSSIBLE TO USE YOUR BUDDY'S %(box_name)s FOR THIS." #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "CONFIGURE PAGEKITE" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "WARNING:
" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" "PUBLISHED SERVICES ARE ACCESSIBLE AND ATTACKABLE FROM THE EVIL INTERNET." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "EXPOSING SSH WITH THE DEFAULT PASSWORD FOR 'FBX' IS A VERY BAD IDEA." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "SAVE SERVICES" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "WEB SERVER (HTTP)" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "SITE WILL BE AVAILABLE AT HTTP://{0}" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "WEB SERVER (HTTPS)" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "SITE WILL BE AVAILABLE AT HTTPS://{0}" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "SECURE SHELL (SSH)" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" "SEE SSH CLIENT SETUP INSTRUCTIONS" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "PAGEKITE" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "ABOUT PAGEKITE" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "STANDARD SERVICES" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "CUSTOM SERVICES" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "POWER" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "RESTART OR SHUT DOWN THE SYSTEM." #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "RESTART »" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "SHUT DOWN »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" "ARE YOU SURE YOU WANT TO RESTART? YOU WILL NOT BE ABLE TO ACCESS THIS WEB " "INTERFACE FOR A FEW MINUTES UNTIL THE SYSTEM IS RESTARTED." #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "RESTART NOW" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" "ARE YOU SURE YOU WANT TO SHUT DOWN? YOU WILL NOT BE ABLE TO ACCESS THIS WEB " "INTERFACE AFTER SHUT DOWN." #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "SHUT DOWN NOW" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "WEB PROXY (PRIVOXY)" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "PRIVOXY WEB PROXY" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "ACCESS {url} WITH PROXY {proxy} ON TCP{kind}" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "ENABLE PRIVOXY" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" "PRIVOXY IS A NON-CACHING WEB PROXY WITH ADVANCED FILTERING CAPABILITIES FOR " "ENHANCING PRIVACY, MODIFYING WEB PAGE DATA AND HTTP HEADERS, CONTROLLING " "ACCESS, AND REMOVING ADS AND OTHER OBNOXIOUS INTERNET JUNK." #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" "YOU CAN USE PRIVOXY BY MODIFYING YOUR BROWSER PROXY SETTINGS TO YOUR " "%(box_name)s HOSTNAME (OR IP ADDRESS) WITH PORT 8118. WHILE USING PRIVOXY, " "YOU CAN SEE ITS CONFIGURATION DETAILS AND DOCUMENTATION AT HTTP://CONFIG.PRIVOXY.ORG/ OR HTTP://P.P.\"" #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "PRIVOXY IS RUNNING" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "PRIVOXY IS NOT RUNNING" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "IRC CLIENT (QUASSEL)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "QUASSEL IRC CLIENT" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "ENABLE QUASSEL CORE SERVICE" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" "QUASSEL IS AN IRC APPLICATION THAT IS SPLIT INTO TWO PARTS, A \"CORE\" AND A " "\"CLIENT\". THIS ALLOWS THE CORE TO REMAIN CONNECTED TO IRC SERVERS, AND TO " "CONTINUE RECEIVING MESSAGES, EVEN WHEN THE CLIENT IS DISCONNECTED. " "%(box_name)s CAN RUN THE QUASSEL CORE SERVICE KEEPING YOU ALWAYS ONLINE AND " "ONE OR MORE QUASSEL CLIENTS FROM A DESKTOP OR A MOBILE CAN BE USED TO " "CONNECT AND DISCONNECT FROM IT." #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" "YOU CAN CONNECT TO YOUR QUASSEL CORE ON THE DEFAULT QUASSEL PORT 4242. " "CLIENTS TO CONNECT TO QUASSEL FROM YOUR DESKTOP AND MOBILE DEVICES ARE AVAILABLE." #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "QUASSEL CORE SERVICE IS RUNNING" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "QUASSEL CORE SERVICE IS NOT RUNNING" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 msgid "SIP Server (repro)" msgstr "SIP SERVER (REPRO)" #: plinth/modules/repro/__init__.py:41 msgid "repro SIP Server" msgstr "REPRO SIP SERVER" #: plinth/modules/repro/forms.py:29 msgid "Enable repro service" msgstr "ENABLE REPRO SERVICE" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "REPRO PROVIDES VARIOUS SIP SERVICES THAT A SIP SOFTPHONE CAN UTILIZE TO PROVIDE AUDIO AND VIDEO CALLS AS WELL AS PRESENCE AND INSTANT MESSAGING. REPRO PROVIDES A SERVER AND SIP USER ACCOUNTS THAT CLIENTS CAN USE TO LET THEIR PRESENCE KNOWN. IT ALSO ACTS AS A PROXY TO FEDERATE SIP COMMUNICATIONS TO OTHER SERVERS ON THE INTERNET SIMILAR TO EMAIL." #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "TO MAKE SIP CALLS, A CLIENT APPLICATION IS NEEDED. AVAILABLE CLIENTS INCLUDE JITSI (FOR COMPUTERS) AND CSIPSIMPLE (FOR ANDROID PHONES)." #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "NOTE: BEFORE USING REPRO, DOMAINS AND USERS WILL NEED TO BE CONFIGURED USING THE WEB-BASED CONFIGURATION PANEL. USERS IN THE ADMIN GROUP WILL BE ABLE TO LOG IN TO THE REPRO CONFIGURATION PANEL. AFTER SETTING THE DOMAIN, IT IS REQUIRED TO RESTART THE REPRO SERVICE. DISABLE THE SERVICE AND RE-ENABLE IT." #: plinth/modules/repro/templates/repro.html:63 msgid "repro service is running" msgstr "REPRO SERVICE IS RUNNING" #: plinth/modules/repro/templates/repro.html:66 msgid "repro service is not running" msgstr "REPRO SERVICE IS NOT RUNNING" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "UNHOSTED STORAGE (RESTORE)" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "RESTORE" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "ENABLE RESTORE" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" "RESTORE IS A SERVER FOR UNHOSTED WEB " "APPLICATIONS. THE IDEA IS TO UNCOUPLE WEB APPLICATIONS FROM DATA. NO " "MATTER WHERE A WEB APPLICATION IS SERVED FROM, THE DATA CAN BE STORED ON AN " "UNHOSTED STORAGE SERVER OF USER'S CHOICE. WITH RESTORE, YOUR %(box_name)s " "BECOMES YOUR UNHOSTED STORAGE SERVER." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" "YOU CAN CREATE AND EDIT ACCOUNTS IN THE RESTORE WEB-" "INTERFACE." #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "EMAIL CLIENT (ROUNDCUBE)" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "ENABLE ROUNDCUBE" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" "ROUNDCUBE WEBMAIL IS A BROWSER-BASED MULTILINGUAL IMAP CLIENT WITH AN " "APPLICATION-LIKE USER INTERFACE. IT PROVIDES FULL FUNCTIONALITY YOU EXPECT " "FROM AN EMAIL CLIENT, INCLUDING MIME SUPPORT, ADDRESS BOOK, FOLDER " "MANIPULATION, MESSAGE SEARCHING AND SPELL CHECKING." #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" "YOU CAN ACCESS ROUNDCUBE FROM /ROUNDCUBE. PROVIDE " "THE USERNAME AND PASSWORD OF THE EMAIL ACCOUNT YOU WISH TO ACCESS FOLLOWED " "BY THE DOMAIN NAME OF THE IMAP SERVER FOR YOUR EMAIL PROVIDER, LIKE " "IMAP.EXAMPLE.COM. FOR IMAP OVER SSL (RECOMMENDED), FILL THE " "SERVER FIELD LIKE IMAPS://IMAP.EXAMPLE.COM." #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" "FOR GMAIL, USERNAME WILL BE YOUR GMAIL ADDRESS, PASSWORD WILL BE YOUR GOOGLE " "ACCOUNT PASSWORD AND SERVER WILL BE IMAPS://IMAP.GMAIL.COM. " "NOTE THAT YOU WILL ALSO NEED TO ENABLE \"LESS SECURE APPS\" IN YOUR GOOGLE " "ACCOUNT SETTINGS (HTTPS://WWW.GOOGLE.COM/SETTINGS/SECURITY/LESSSECUREAPPS)." #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "BOOKMARKS (SHAARLI)" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "SHAARLI" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "ENABLE SHAARLI" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "SHAARLI ALLOWS YOU TO SAVE AND SHARE BOOKMARKS." #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" "WHEN ENABLED, SHAARLI WILL BE AVAILABLE FROM /shaarli PATH ON THE WEB SERVER. NOTE THAT SHAARLI ONLY SUPPORTS A SINGLE USER " "ACCOUNT, WHICH YOU WILL NEED TO SETUP ON THE INITIAL VISIT." #: plinth/modules/system/system.py:26 msgid "System" msgstr "SYSTEM" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "SYSTEM CONFIGURATION" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "HERE YOU CAN ADMINISTRATE THE UNDERLYING SYSTEM OF YOUR %(box_name)s." #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" "THE OPTIONS AFFECT THE %(box_name)s AT ITS MOST GENERAL LEVEL, SO BE CAREFUL!" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "ANONYMITY NETWORK (TOR)" #: plinth/modules/tor/__init__.py:53 msgid "Tor Anonymity Network" msgstr "TOR ANONYMITY NETWORK" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "TOR BRIDGE RELAY" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "TOR HIDDEN SERVICE" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "TOR RELAY PORT AVAILABLE" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "OBFS3 TRANSPORT REGISTERED" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "OBFS4 TRANSPORT REGISTERED" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "ACCESS URL {url} ON TCP{kind} VIA TOR" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "CONFIRM TOR USAGE AT {url} ON TCP{kind}" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "ENABLE TOR" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "ENABLE TOR HIDDEN SERVICE" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" "A HIDDEN SERVICE WILL ALLOW {box_name} TO PROVIDE SELECTED SERVICES (SUCH AS " "OWNCLOUD OR CHAT) WITHOUT REVEALING ITS LOCATION." #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "DOWNLOAD SOFTWARE PACKAGES OVER TOR" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" "WHEN ENABLED, SOFTWARE WILL BE DOWNLOADED OVER THE TOR NETWORK FOR " "INSTALLATIONS AND UPGRADES. THIS ADDS A DEGREE OF PRIVACY AND SECURITY " "DURING SOFTWARE DOWNLOADS." #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" "TOR IS AN ANONYMOUS COMMUNICATION SYSTEM. YOU CAN LEARN MORE ABOUT IT FROM " "THE TOR PROJECT WEBSITE. FOR " "BEST PROTECTION WHEN WEB SURFING, THE TOR PROJECT RECOMMENDS THAT YOU USE " "THE " "TOR BROWSER." #: plinth/modules/tor/templates/tor.html:54 msgid "Tor configuration is being updated" msgstr "TOR CONFIGURATION IS BEING UPDATED" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "TOR IS RUNNING" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "TOR IS NOT RUNNING" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "HIDDEN SERVICE" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "PORT" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "BRIDGE" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" "YOUR %(box_name)s IS CONFIGURED AS A TOR BRIDGE WITH OBFSPROXY, SO IT CAN " "HELP CIRCUMVENT CENSORSHIP. IF YOUR %(box_name)s IS BEHIND A ROUTER OR " "FIREWALL, YOU SHOULD MAKE SURE THE FOLLOWING PORTS ARE OPEN, AND PORT-" "FORWARDED, IF NECESSARY:" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "SERVICE" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "A TOR SOCKS PORT IS AVAILABLE ON YOUR %(box_name)s ON TCP PORT 9050." #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "TOR CONTROL PANEL" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "ACTION ERROR: {0} [{1}] [{2}]" #: plinth/modules/tor/views.py:148 msgid "Configuration updated." msgstr "CONFIGURATION UPDATED." #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "AN ERROR OCCURRED DURING CONFIGURATION." #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BITTORRENT (TRANSMISSION)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "TRANSMISSION BITTORRENT" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "ENABLE TRANSMISSION DAEMON" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "DOWNLOAD DIRECTORY" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" "DIRECTORY WHERE DOWNLOADS ARE SAVED. IF YOU CHANGE THE DEFAULT DIRECTORY, " "ENSURE THAT THE NEW DIRECTORY EXISTS AND IS WRITABLE BY \"DEBIAN-TRANSMISSION" "\" USER." #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "USERNAME TO LOGIN TO THE WEB INTERFACE." #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" "PASSWORD TO LOGIN TO THE WEB INTERFACE. CURRENT PASSWORD IS SHOWN IN A " "HASHED FORMAT. TO SET A NEW PASSWORD, ENTER THE PASSWORD IN PLAIN TEXT." #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" "BITTORRENT IS A PEER-TO-PEER FILE SHARING PROTOCOL. TRANSMISSION DAEMON " "HANDLES BITORRENT FILE SHARING. NOTE THAT BITTORRENT IS NOT ANONYMOUS." #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" "ACCESS THE WEB INTERFACE AT /TRANSMISSION." #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "TRANSMISSION DAEMON IS RUNNING" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "TRANSMISSION DAEMON IS NOT RUNNING." #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "SOFTWARE UPGRADES" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "ENABLE AUTOMATIC UPGRADES" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" "WHEN ENABLED, THE UNATTENDED-UPGRADES PROGRAM WILL BE RUN ONCE PER DAY. IT " "WILL ATTEMPT TO PERFORM ANY PACKAGE UPGRADES THAT ARE AVAILABLE." #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" "UPGRADES INSTALL THE LATEST SOFTWARE AND SECURITY UPDATES. WHEN AUTOMATIC " "UPGRADES ARE ENABLED, UPGRADES ARE AUTOMATICALLY RUN EVERY NIGHT. YOU DON'T " "NORMALLY NEED TO START THE UPGRADE PROCESS." #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" "DEPENDING ON THE NUMBER OF PACKAGES TO INSTALL, THIS MAY TAKE A LONG TIME TO " "COMPLETE. WHILE UPGRADES ARE IN PROGRESS, YOU WILL NOT BE ABLE TO INSTALL " "OTHER PACKAGES. DURING THE UPGRADE, THIS WEB INTERFACE MAY BE TEMPORARILY " "UNAVAILABLE AND SHOW AN ERROR. REFRESH THE PAGE TO CONTINUE." #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "UPGRADE NOW »" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "A PACKAGE MANAGER IS RUNNING." #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "RECENT LOG FROM UPGRADES:" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "AUTOMATIC UPGRADES" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "UPGRADE PACKAGES" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "UPGRADE PROCESS STARTED." #: plinth/modules/upgrades/views.py:99 msgid "Starting upgrade failed." msgstr "STARTING UPGRADE FAILED." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "PACKAGE UPGRADES" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "ERROR WHEN CONFIGURING UNATTENDED-UPGRADES: {error}" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "AUTOMATIC UPGRADES ENABLED" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "AUTOMATIC UPGRADES DISABLED" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "USERS AND GROUPS" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "CHECK LDAP ENTRY \"{search_item}\"" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "ADMIN" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "WIKI" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "GROUPS" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" "SELECT WHICH SERVICES SHOULD BE AVAILABLE TO THE NEW USER. THE USER WILL BE " "ABLE TO LOG IN TO SERVICES THAT SUPPORT SINGLE SIGN-ON THROUGH LDAP, IF THEY " "ARE IN THE APPROPRIATE GROUP.

USERS IN THE ADMIN GROUP WILL BE " "ABLE TO LOG IN TO ALL SERVICES. THEY CAN ALSO LOG IN TO THE SYSTEM THROUGH " "SSH AND HAVE ADMINISTRATIVE PRIVILEGES (SUDO)." #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "FAILED TO ADD NEW USER TO {group} GROUP." #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "SSH KEYS" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "SETTING AN SSH PUBLIC KEY WILL ALLOW THIS USER TO SECURELY LOG IN TO THE SYSTEM WITHOUT USING A PASSWORD. YOU MAY ENTER MULTIPLE KEYS, ONE ON EACH LINE. BLANK LINES AND LINES STARTING WITH # WILL BE IGNORED." #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "RENAMING LDAP USER FAILED." #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "FAILED TO REMOVE USER FROM GROUP." #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "FAILED TO ADD USER TO GROUP." #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "CHANGING LDAP USER PASSWORD FAILED." #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "CHANGE PASSWORD FOR %(username)s" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "SAVE PASSWORD" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "CREATE USER" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "DELETE USER" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "DELETE USER %(username)s PERMANENTLY?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "DELETE %(username)s" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "DELETE USER %(username)s" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "EDIT USER %(username)s" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" "USE THE CHANGE PASSWORD FORM TO " "CHANGE THE PASSWORD." #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "SAVE CHANGES" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "USERS" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "USER %(username)s CREATED." #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "USER %(username)s UPDATED." #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "EDIT USER" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "USER {user} DELETED." #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "DELETING LDAP USER FAILED." #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "CHANGE PASSWORD" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "PASSWORD CHANGED SUCCESSFULLY." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "CHAT SERVER (XMPP)" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "ENABLE XMPP" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" "XMPP IS AN OPEN AND STANDARDIZED COMMUNICATION PROTOCOL. HERE YOU CAN RUN " "AND CONFIGURE YOUR XMPP SERVER, CALLED EJABBERD." #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" "TO ACTUALLY COMMUNICATE, YOU CAN USE THE WEB CLIENT OR " "ANY OTHER XMPP CLIENT." #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" "YOUR XMPP SERVER DOMAIN IS SET TO %(domainname)s. USER IDS WILL LOOK " "LIKE USERNAME@%(domainname)s. YOU CAN SETUP YOUR DOMAIN ON THE SYSTEM " "CONFIGURE PAGE." #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "LAUNCH WEB CLIENT" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "EJABBERD IS RUNNING" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "EJABBERD IS NOT RUNNING" #: plinth/network.py:39 msgid "PPPoE" msgstr "PPPOE" #: plinth/package.py:156 msgid "packages not found" msgstr "PACKAGES NOT FOUND" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "INSTALLED AND CONFIGURED PACKAGES SUCCESSFULLY." #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "ERROR INSTALLING PACKAGES: {string} {details}" #: plinth/service.py:73 msgid "Web Server" msgstr "WEB SERVER" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "WEB SERVER OVER SECURE SOCKET LAYER" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "SECURE SHELL (SSH) SERVER" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} WEB INTERFACE (PLINTH)" #: plinth/templates/404.html:25 msgid "404" msgstr "404" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "REQUESTED PAGE %(request_path)s WAS NOT FOUND." #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" "IF YOU BELIEVE THIS MISSING PAGE SHOULD EXIST, PLEASE FILE A BUG AT THE " "PLINTH PROJECT ISSUE " "TRACKER." #: plinth/templates/500.html:25 msgid "500" msgstr "500" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" "THIS IS AN INTERNAL ERROR AND NOT SOMETHING YOU CAUSED OR CAN FIX. PLEASE " "REPORT THE ERROR ON THE BUG TRACKER SO WE CAN FIX IT." #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "PLINTH ADMINISTRATIVE INTERFACE FOR THE %(box_name)s" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "TOGGLE NAVIGATION" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "CHANGE PASSWORD" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "LOG OUT" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "LOG IN" #: plinth/templates/login.html:35 msgid "Login" msgstr "LOGIN" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "INSTALLATION" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" "THIS FEATURE REQUIRES ADDTIONAL PACKAGES TO BE INSTALLED. DO YOU WISH TO " "INSTALL THEM?" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "PACKAGE" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "SUMMARY" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "INSTALL" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "INSTALLING %(package_names)s: %(status)s" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% COMPLETE" #~ msgid "Tor enabled" #~ msgstr "TOR ENABLED" #~ msgid "Tor disabled" #~ msgstr "TOR DISABLED" #~ msgid "Tor hidden service enabled" #~ msgstr "TOR HIDDEN SERVICE ENABLED" #~ msgid "Tor hidden service disabled" #~ msgstr "TOR HIDDEN SERVICE DISABLED" #~ msgid "Enabled package download over Tor" #~ msgstr "ENABLED PACKAGE DOWNLOAD OVER TOR" #~ msgid "Disabled package download over Tor" #~ msgstr "DISABLED PACKAGE DOWNLOAD OVER TOR" #~ msgid "The following is the current status:" #~ msgstr "THE FOLLOWING IS THE CURRENT STATUS:" #~ msgid "Create Wiki/Blog" #~ msgstr "CREATE WIKI/BLOG" #~ msgid "show password" #~ msgstr "SHOW PASSWORD" #~ msgid "Congratulations! Your FreedomBox is up and running!" #~ msgstr "CONGRATULATIONS! YOUR FREEDOMBOX IS UP AND RUNNING!" #~ msgid "" #~ "Please provide the following basic information to complete the setup " #~ "process." #~ msgstr "" #~ "PLEASE PROVIDE THE FOLLOWING BASIC INFORMATION TO COMPLETE THE SETUP " #~ "PROCESS." #~ msgid "Next" #~ msgstr "NEXT" #~ msgid "FreedomBox Manual" #~ msgstr "FREEDOMBOX MANUAL" #~ msgid "" #~ "Many FreedomBox contributors and users are also available on the " #~ "#freedombox channel of the irc.oftc.net IRC network." #~ msgstr "" #~ "MANY FREEDOMBOX CONTRIBUTORS AND USERS ARE ALSO AVAILABLE ON THE " #~ "#FREEDOMBOX CHANNEL OF THE IRC.OFTC.NET IRC NETWORK." #~ msgid "" #~ "Select Automatic (DHCP) if you are connecting to an existing wireless " #~ "network. Shared mode is useful when running an Access Point." #~ msgstr "" #~ "SELECT AUTOMATIC (DHCP) IF YOU ARE CONNECTING TO AN EXISTING WIRELESS " #~ "NETWORK. SHARED MODE IS USEFUL WHEN RUNNING AN ACCESS POINT." #~ msgid "There was an error while upgrading." #~ msgstr "THERE WAS AN ERROR WHILE UPGRADING." #~ msgid "Output from unattended-upgrades:" #~ msgstr "OUTPUT FROM UNATTENDED-UPGRADES:" #~ msgid "The operating system is up to date now.  " #~ msgstr "THE OPERATING SYSTEM IS UP TO DATE NOW.  " #~ msgid "Show Details" #~ msgstr "SHOW DETAILS" #~ msgid "" #~ "This will run unattended-upgrades, which will attempt to upgrade your " #~ "system with the latest Debian packages. It may take a few minutes to " #~ "complete." #~ msgstr "" #~ "THIS WILL RUN UNATTENDED-UPGRADES, WHICH WILL ATTEMPT TO UPGRADE YOUR " #~ "SYSTEM WITH THE LATEST DEBIAN PACKAGES. IT MAY TAKE A FEW MINUTES TO " #~ "COMPLETE." #~ msgid "System is being upgraded." #~ msgstr "SYSTEM IS BEING UPGRADED." #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." #~ msgstr "" #~ "YOU CAN INSTALL AND RUN VARIOUS SERVICES AND APPLICATIONS ON YOUR " #~ "%(box_name)s." #~ msgid "Physical interface" #~ msgstr "PHYSICAL INTERFACE" #~ msgid "Delete Connection %(name)s" #~ msgstr "DELETE CONNECTION %(name)s" #~ msgid "Bittorrent (Transmission)" #~ msgstr "BITTORRENT (TRANSMISSION)" #~ msgid "Delete user permanently?" #~ msgstr "DELETE USER PERMANENTLY?" #~ msgid "Edit User %(username)s" #~ msgstr "EDIT USER %(username)s" #~ msgid "Scramblesuit transport registered" #~ msgstr "SCRAMBLESUIT TRANSPORT REGISTERED" #~ msgid "" #~ "Your domain name is the global name by which other machines on the " #~ "Internet can reach you. It must consist of alphanumeric words separated " #~ "by dots." #~ msgstr "" #~ "YOUR DOMAIN NAME IS THE GLOBAL NAME BY WHICH OTHER MACHINES ON THE " #~ "INTERNET CAN REACH YOU. IT MUST CONSIST OF ALPHANUMERIC WORDS SEPARATED " #~ "BY DOTS." #~ msgid "Hostname is unchanged" #~ msgstr "HOSTNAME IS UNCHANGED" #~ msgid "Domain name is unchanged" #~ msgstr "DOMAIN NAME IS UNCHANGED" #~ msgid "Delete %(object.username)s" #~ msgstr "DELETE %(object.username)s" Plinth-0.8.1/plinth/locale/fr/000077500000000000000000000000001266051671100161275ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/fr/LC_MESSAGES/000077500000000000000000000000001266051671100177145ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/fr/LC_MESSAGES/django.po000066400000000000000000003743261266051671100215350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Philippe Baret , 2015 msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2016-01-15 21:18+0000\n" "Last-Translator: Caly \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "Écoute sur le port {listen_address}:{port} ({kind})" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "Écoute sur le port {port}, type {kind}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "Accès à l'URL {url} via tcp{kind}" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "Accès à l'URL {url}" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "Connexion à {host}:{port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "Impossible de se connecter à {host}:{port}" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FreedomBox" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Applis" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Applications" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "Services et Applications" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" "Vous pouvez installer et utiliser plusieurs services et applications sur " "votre %(box_name)s. Cliquer sur l'un des liens à gauche pour lire une " "description de chaque application et choisir ou non de l'installer." #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "Votre serveur personnel peut servir à partager des photos, à échanger des " "messages instantanés, de média social ou de blogue. Il est aussi possible " "d'élaborer un portail réunissant plusieurs services sous votre contrôle." #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "Découverte de services" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "Activer la découverte de services" #: plinth/modules/avahi/templates/avahi.html:29 #, fuzzy, python-format #| msgid "" #| "Service discovery allows other machines on the network to discover your " #| "FreedomBox and services running on it. It also allows FreedomBox to " #| "discover other machines and services running on your local network. " #| "Service discovery is not essential and works only on internal networks. " #| "It may be disabled to improve security especially when connecting to a " #| "hostile local network." msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "Le service Découverte permet aux autres machines du réseau de découvrir " "votre FreedomBox et les services qu'il propose. Il permet aussi de découvrir " "d'autres machines et services opérant sur votre réseau local. Le service " "Découverte n'est pas essentiel et fonctionne seulement sur les réseaux " "internes. Il peut être désactiver pour améliorer la sécurité " "particulièrement lors d'une connexion à un réseau local hostile." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "État" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "Le serveur de découverte de services est actif" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "Le serveur de découverte de services n'est pas actif" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "Configuration" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "Actualiser la configuration" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Configuration actualisée" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Paramètres inchangés" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Nom de domaine invalide" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Nom de Machine" #: plinth/modules/config/config.py:97 #, fuzzy, python-brace-format #| msgid "" #| "Hostname is the local name by which other machines on the local network " #| "reach your machine. It must start and end with an alphabet or a digit " #| "and have as interior characters only alphabets, digits and hyphens. " #| "Total length must be 63 characters or less." msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Le Nom de Machine est le nom local par lequel les autres machines sur le " "réseau local atteindront votre machine. Le nom doit débuter et finir par une " "lettre de l'alphabet ou un chiffre. Il doit contenir entre le début et la " "fin seulement des lettres de l'alphabet, des chiffres ou des traits d’union " "« - ». Sa longueur maximum est de 63 signes." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Nom de machine invalide" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Nom de Domaine" #: plinth/modules/config/config.py:110 #, fuzzy, python-brace-format #| msgid "" #| "Domain name is the global name by which other machines on the Internet " #| "can reach you. It must consist of labels separated by dots. Each label " #| "must start and end with an alphabet or a digit and have as interior " #| "characters only alphabets, digits and hyphens. Length of each label must " #| "be 63 characters or less. Total length of domain name must be 253 " #| "characters or less." msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "Le Nom de Domaine est le nom global par lequel les autres machines sur " "Internet peuvent atteindre votre machine. Le nom ne doit contenir que des " "mots ou labels séparés par des points. Chaque label doit débuter et se " "terminer par une lettre de l'alphabet ou un chiffre. Chaque label doit " "contenir entre le début et la fin seulement des lettres de l'alphabet, des " "chiffres ou des traits d'union « - ». La longueur maximum d'un label est de " "63 signes. La longueur totale du nom de domaine ne doit pas excéder 253 " "signes." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "Langue" #: plinth/modules/config/config.py:127 #, fuzzy #| msgid "Language for this FreedomBox web administration interface" msgid "Language for this web administration interface" msgstr "Langue de l'interface Web de votre FreedomBox" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Configurer" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "Configuration générale" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "Erreur lors de l'établissement du nom de machine : {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "Nom de machine établi" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "Erreur lors de l'établissement du nom de domaine : {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "Nom de domaine établi" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "Erreur lors de la configuration de la langue : {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "Langue modifiée" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "Soumettre" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "Date et heure" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "Serveur de temps réseau" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "Client NTP en contact avec les serveurs" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "Activer l'heure réseau" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "Fuseau horaire" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" "Paramétrer votre fuseau horaire pour obtenir un horodatage précis pour tout " "le système." #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- pas de fuseau horaire établi --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" "Le serveur de temps réseau est un programme permettant de maintenir l'heure " "du système synchronisée avec les serveurs sur Internet." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "Le serveur de temps réseau est actif" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "Le serveur de temps réseau n'est pas actif" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "Erreur lors de l'établissement du fuseau horaire : {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "Fuseau horaire établi" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "BitTorrent (Deluge)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "Deluge BitTorrent" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "Activer Deluge" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "Client Web BitTorrent (Deluge)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "Deluge est un client BitTorrent avec une interface utilisateur Web." #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" "Lorsqu'activé, le client Web Deluge sera accessible depuis le chemin /deluge sur le serveur Web. Le mot de passe par défaut est « " "deluge ». Vous devrez toutefois vous connecter et le changer tout de suite " "après l'activation du service." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "deluge-web est actif" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "deluge-web n'est pas actif" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "Diagnostics" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "Diagnostics Système" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "Test de Diagnostic" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" "Le test de diagnostic du système opère un certain nombre de vérifications " "sur votre système pour confirmer que les applications et les services " "fonctionnent comme prévu." #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "Lancer le Diagnostic" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "Les tests de diagnostic sont en cours" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "Résultats" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "Module: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "Résultats Diagnostic" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "Module: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "Ce module n'est pas compatible avec les tests de diagnostic" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "Test" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "Résultat" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "À propos" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "DNS Dynamique" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "Les variables <User>, <Pass>, <Ip>, <Domain> peuvent " "être utilisées dans l'URL. Pour plus de détails, voir les modèles d'URL mis " "à jour pour un exemple de fournisseurs." #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" "Choisissez un protocole d'actualisation selon votre fournisseur. Si votre " "fournisseur ne propose pas de compatibilité avec le protocole GnudIP ou si " "votre fournisseur n'est pas listé, vous pouvez utiliser la mise à jour URL " "de votre fournisseur." #: plinth/modules/dynamicdns/dynamicdns.py:80 #, fuzzy #| msgid "" #| "Please do not enter a URL here (like \"https://example.com/\") but only " #| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Ne saisissez pas une URL (comme \"https://example.com/\"), seulement le nom " "de machine du serveur GnuDIP (comme \"example.com\")." #: plinth/modules/dynamicdns/dynamicdns.py:84 #, fuzzy, python-brace-format #| msgid "The public domain name you want use to reach your box." msgid "The public domain name you want use to reach your {box_name}." msgstr "" "Le nom de domaine public que vous désirez utiliser pour atteindre votre " "FreedomBox." #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Utilisez ce choix si votre fournisseur utilise des certificats auto-signés." #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" "Si ce choix est sélectionné, votre nom d'utilisateur et votre mot de passe " "seront utilisés pour une authentification HTTP de base." #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" "Laissez ce champ vide si vous désirez garder la configuration précédente de " "votre mot de passe." #: plinth/modules/dynamicdns/dynamicdns.py:96 #, fuzzy, python-brace-format #| msgid "" #| "Optional Value. If your FreedomBox is not connected directly to the " #| "Internet (i.e. connected to a NAT router) this URL is used to figure out " #| "the real Internet IP. The URL should simply return the IP wherethe client " #| "comes from. Example: http://myip.datasystems24.de" msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" "Valeur Optionnelle. Si votre FreedomBox n'est pas connectée directement à " "l'Internet (si par exemple votre routeur fait du \"NAT\" Network Address " "Translation), cette URL est utilisée pour trouver l'IP Internet réelle. " "L'URL doit retourner l'IP correspondante à l'endroit où le client se trouve. " "Exemple : http://myip.datasystems24.de" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" "Vous devez avoir été sollicité pour sélectionner un nom d'utilisateur " "lorsque vous avez créé le compte." #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Activer le DNS Dynamique" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Type de service" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "Adresse Serveur GnudIP" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Nom de serveur invalide" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Actualiser l'URL" #: plinth/modules/dynamicdns/dynamicdns.py:135 #, fuzzy #| msgid "accept all SSL certificates" msgid "Accept all SSL certificates" msgstr "accepte tous les certificats SSL" #: plinth/modules/dynamicdns/dynamicdns.py:139 #, fuzzy #| msgid "use HTTP basic authentication" msgid "Use HTTP basic authentication" msgstr "utilise une authentification HTTP basique" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Nom Utilisateur" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Mot de passe" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "Montrer le mot de passe" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "Résolution IP/URL" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Fournir une mise à jour URL ou un serveur GnuDIP" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Fournir un nom d'utilisateur GnuDIP" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Fournir un nom de domaine GnuDIP" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Fournir un mot de passe" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Configurer le DNS Dynamique" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "État du DNS Dynamique" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 #, fuzzy #| msgid "DynamicDNS client" msgid "Dynamic DNS Client" msgstr "Client DynamicDNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, fuzzy, python-format #| msgid "" #| "If your internet provider changes your IP address periodic (i.e. every " #| "24h) it may be hard for others to find you in the WEB. And for this " #| "reason nobody may find the services which are provided by FreedomBox " #| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Si votre fournisseur d'accès change régulièrement votre adresse IP (par ex. " "toutes les 24h), il peut être difficile pour les autres de vous trouver sur " "le Web. C'est sans doute la raison pour laquelle personne ne peut trouver " "les services fournis par FreedomBox (comme ownCloud)." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 #, fuzzy #| msgid "" #| "The solution is to assign a DNS name to your IP address and update the " #| "DNS name every time your IP is changed by your Internet provider. Dynamic " #| "DNS allows you to push your current public IP address to an gnudip " #| "server. Afterwards the Server will assign your DNS name with the new IP " #| "and if someone from the internet asks for your DNS name he will get your " #| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" "La solution est d'assigner un nom DNS à votre adresse IP et d'actualiser le " "nom DNS à chaque fois que votre IP est modifiée par votre fournisseur " "d'accès. Dynamic DNS vous permet de publier votre adresse IP actuelle vers " "un serveur " "gnudip. Ensuite, le serveur assignera une nouvelle IP. Si quelqu'un sur " "Internet demande votre nom DNS, il obtiendra votre IP actuelle." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" "Si vous cherchez un compte DNS dynamique gratuit, vous pourrez sans doute " "trouver un service GnuDIP sur gnudip.datasystems24.net ou un service d'URL mise à jour " "sur freedns.afraid." "org." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, fuzzy, python-format #| msgid "" #| "If your freedombox is connected behind some NAT router, don't forget to " #| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " #| "your freedombox device." msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Si votre FreedomBox est connectée derrière un routeur réalisant du NAT, " "n'oubliez pas d'ajouter la redirection de port (« portforwarding », par " "exemple un réacheminement sur des ports standards comme 80 ou 443) à votre " "FreedomBox." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" "Vous avez désactivé Javascript. Le mode formulaire dynamique est désactivé, " "quelques fonctions d'aide pourraient ne pas marcher (mais la fonctionnalité " "principale devrait fonctionner)." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "Type de NAT" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" "Le type de NAT n'est pas encore détecté, si vous ne fournissez pas une " "résolution IP/URL ou \"IP check URL\", nous ne pourrons pas détecter le type " "de NAT." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 #, fuzzy #| msgid "Direct connection to the internet." msgid "Direct connection to the Internet." msgstr "Connexion directe à l'Internet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, fuzzy, python-format #| msgid "" #| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " #| "URL\" for changes (we need the \"IP check URL\" for this reason - " #| "otherwise we will not detect IP changes). It may take up to %(timer)s " #| "minutes until we update your DNS entry in case of WAN IP change." msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" "Derrière le NAT, un service DNS dynamique sondera la résolution IP/URL ou " "\"IP check URL\" pour vérifier des modifications (nous avons besoin de la " "résolution \"IP check URL\" pour cette raison - sinon, nous ne détecterons " "pas les modifications de l'IP). Cela pourrait prendre jusque %(timer)s " "minutes avant de mettre à jour votre entrée DNS en cas de modification de " "l'IP WAN." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "Dernière mise à jour" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "Pare-feu" #: plinth/modules/firewall/templates/firewall.html:28 #, fuzzy, python-format #| msgid "" #| "Firewall is a network security system that controls the incoming and " #| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " #| "and properly configured reduces risk of security threat from the Internet." msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" "Un Pare-feu ou « Firewall » est un système de sécurité réseau permettant de " "contrôler le trafic entrant et sortant sur %(box_name)s. Garder un pare-feu " "activé et correctement configuré réduit le risque de failles sécurité sur " "Internet." #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" "Le daemon du pare-feu n'est pas actif. Activez-le. Le pare-feu est activé " "par défaut sur %(box_name)s. Sur chaque système basé sur Debian (comme " "%(box_name)s), vous pouvez le mettre en marche en utilisant la commande « " "démarrage du service pare-feu » ou « service firewalld start » et dans le " "cas d'un système avec systemd, « systemctl start firewalld »." #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "Service/Port" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Activé" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Désactivé" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "Permis" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "Permis (en interne seulement)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "Permis (en externe seulement)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "Bloqué" #: plinth/modules/firewall/templates/firewall.html:103 #, fuzzy #| msgid "" #| "The operation of the firewall is automatic. When you enable a service it " #| "is automatically permitted in the firewall and you disable a service is " #| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" "Le fonctionnement du pare-feu est automatique. Lorsque vous activez un " "service, il est automatiquement permis par le pare-feu, si vous le " "désactivez, il est automatiquement désactivé dans le pare-feu." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "La création de l'utilisateur LDAP n'a pas abouti." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "L'ajout du nouvel utilisateur au groupe administrateur n'a pas abouti." #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "Compte utilisateur créé, vous êtes maintenant connecté." #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "Aide" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 #, fuzzy #| msgid "Start setup" msgid "Start Setup" msgstr "Démarrer l'Installation" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Compte administrateur" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" "Choisir un nom d'utilisateur et un mot de passe pour accéder à l'interface " "Web. Le mot de passe peut être modifié plus tard. Cet utilisateur disposera " "de privilèges administrateur. Les autres utilisateurs peuvent être créés " "plus tard." #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Enregistrer et lancer FreedomBox !" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "Configuration terminée !" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, fuzzy, python-format #| msgid "" #| "To make your FreedomBox functional, you need some applications. " #| "Applications will be installed the first time you access them." msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" "Pour faire fonctionner votre FreedomBox, vous avez besoin d'applications. " "Les applications seront installées lorsque vous y accéderez pour la première " "fois." #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "Aller aux Applis" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 #, fuzzy #| msgid "Network Configuration" msgid "Current Network Configuration" msgstr "Configuration Réseau" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 #, fuzzy #| msgid "" #| "FreedomBox setup is now complete. However, you should check the network " #| "setup and modify it if necessary. Do not forget to change the default Wi-" #| "Fi passwords." msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" "La configuration de la FreedomBox est achevée. Toutefois, vous devriez " "vérifier la configuration réseau et la modifier si nécessaire. N'oubliez pas " "de modifier les mots de passe Wi-Fi par défaut." #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Aller aux Réseaux" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Installation Achevée" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "Documentation" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "Où Obtenir de l'Aide" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "Documentation et FAQ" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "À Propos de {box_name}" #: plinth/modules/help/help.py:73 #, fuzzy, python-brace-format #| msgid "About {box_name}" msgid "{box_name} Manual" msgstr "À Propos de {box_name}" #: plinth/modules/help/templates/help_about.html:30 #, fuzzy, python-format #| msgid "" #| "FreedomBox is a community project to develop, design and promote personal " #| "servers running free software for private, personal communications. It " #| "is a networking appliance designed to allow interfacing with the rest of " #| "the Internet under conditions of protected privacy and data security. It " #| "hosts applications such as blog, wiki, website, social network, email, " #| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " #| "so that your data stays with you." msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" "FreedomBox est un projet communautaire consacré au développement, au design " "et à la promotion de serveurs personnels utilisant des logiciels libres pour " "les communications privées. Il s'agit d'un programme réseau conçu comme une " "interface entre vous et le reste de l'Internet afin de protéger votre vie " "privée et vos données. FreedomBox intègre des applications permettant " "notamment de publier un blog, un wiki, un site Internet, un réseau social, " "de gérer des emails, un proxy Web et un relais Tor sur une machine pouvant " "remplacer votre routeur Wi-Fi. Vos données restent donc avec vous." #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" "Nous vivons dans un monde où notre utilisation du réseau passe forcément par " "des organismes qui souvent n'ont pas nos intérêts à cœur. En construisant un " "logiciel qui ne repose pas sur un service centralisé, nous pouvons reprendre " "le contrôle et notre intimité. En conservant nos données à la maison, nous " "obtenons une protection légale utile sur ces données. En rendant le contrôle " "aux utilisateurs sur leurs réseaux et leurs machines, nous ramenons Internet " "à l'architecture pair-à-pair qui a présidé à sa conception." #: plinth/modules/help/templates/help_about.html:56 #, fuzzy, python-format #| msgid "" #| "There are a number of projects working to realize a future of distributed " #| "services; FreedomBox aims to bring them all together in a convenient " #| "package." msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" "Il existe de nombreux projets dont le but est de développer une architecture " "distribuée de l'Internet. FreedomBox vise à les réunir sur des serveurs " "personnels." #: plinth/modules/help/templates/help_about.html:64 #, fuzzy, python-format #| msgid "" #| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "Pour plus d'informations sur le projet FreedomBox, visiter le site Wiki FreedomBox." #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "En savoir plus" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Vous utilisez Plinth, version %(version)s." #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, fuzzy, python-format #| msgid "" #| "The FreedomBox Manual is the best place to " #| "start for information regarding %(box_name)s." msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "Le Manuel FreedomBox propose des informations " "de base sur %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 #, fuzzy, python-format #| msgid "" #| " " #| "FreedomBox project wiki contains further information." msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" "Vous trouverez sur le site wiki FreedomBox des instructions supplémentaires en " "plusieurs langues." #: plinth/modules/help/templates/help_index.html:43 #, fuzzy, python-format #| msgid "" #| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " #| "problems faced by other users and possible solutions." msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" "Si vous avez besoin d'une aide supplémentaire, vous pouvez poser vos " "questions en anglais sur la liste de discussion du projet. " "Les archives de la liste contiennent aussi des informations sur les " "problèmes rencontrés par les utilisateurs ainsi que les solutions " "probablement apportées." #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 #, fuzzy #| msgid "Wiki & Blog (Ikiwiki)" msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki et Blogue (Ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 #, fuzzy #| msgid "Ikiwiki wikis and blogs" msgid "ikiwiki wikis and blogs" msgstr "Wikis et blogues Ikiwiki" #: plinth/modules/ikiwiki/forms.py:29 #, fuzzy #| msgid "Enable Ikiwiki" msgid "Enable ikiwiki" msgstr "Activer Ikiwiki" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "Type" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "Nom" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "Nom Compte Admin" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "Mot de Passe Compte Admin" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" "Lorsqu'activés, les blogues et les wikis sont accessibles depuis /ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, fuzzy, python-format #| msgid "Delete Wiki/Blog %(name)s" msgid "Delete Wiki or Blog %(name)s" msgstr "Supprimer le Wiki/Blogue %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 #, fuzzy #| msgid "" #| "This action will remove all the posts, pages and comments including " #| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" "Cette action aura pour effet de supprimer tous les posts, les pages et les " "commentaires, tout comme l'historique des révisions. Voulez-vous supprimer " "ce Wiki/Blogue de façon permanente ?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Supprimer %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "Annuler" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "Pas de wiki ou de blogue disponible." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "Créer un Wiki ou un Blogue" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "Supprimer le site %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "Aller au site %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "Gérer" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "Créer" #: plinth/modules/ikiwiki/views.py:73 #, fuzzy #| msgid "Wiki & Blog" msgid "Wiki and Blog" msgstr "Wiki et Blogue" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "Gestion Wikis et Blogues" #: plinth/modules/ikiwiki/views.py:132 #, fuzzy #| msgid "Create a Wiki or Blog" msgid "Create Wiki or Blog" msgstr "Créer un Wiki ou un Blogue" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "Wiki {name} créé." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "Le wiki n'a pu être créé : {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "Blogue {name} créé." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "Le blogue n'a pu être créé : {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "{name} supprimé." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "La suppression de {name} n'a pas abouti : {error}" #: plinth/modules/ikiwiki/views.py:182 #, fuzzy #| msgid "Delete Wiki/Blog" msgid "Delete Wiki or Blog" msgstr "Supprimer Wiki/Blogue" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 #, fuzzy #| msgid "Domain Name" msgid "Domain" msgstr "Nom de Domaine" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 #, fuzzy #| msgid "Security" msgid "Website Security" msgstr "Sécurité" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 #, fuzzy #| msgid "Applications" msgid "Actions" msgstr "Applications" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "Indisponible" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "Voix sur IP (Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "Serveur VoIP Mumble" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "Activer le daemon Mumble" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" "Mumble est un logiciel de chat vocal de haute qualité, open source, crypté " "et à faible temps de latence." #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "Vous pouvez vous connecter au serveur Mumble sur un port normal Mumble " "64738. Il existe des clients permettant " "de se connecter à Mumble depuis un ordinateur ou un appareil tournant sous " "Android." #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "Le serveur Mumble est actif" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "Le serveur Mumble n'est pas actif" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Serveur de Noms" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Utilise DNSSEC sur IPv{kind}" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "Type de Connexion" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Nom Connexion" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Interface Physique" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "L'appareil réseau auquel cette connexion devrait être liée." #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Zone pare-feu" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" "La zone pare-feu contrôlera quels services sont disponibles via ces " "interfaces. Sélectionnez « Interne » seulement pour des réseaux de confiance." #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "Méthode d'adressage IPv4" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" "La méthode « partagée » démarre un serveur DHCP. La méthode « Automatique » " "importe une configuration d'un serveur DHCP." #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adresse" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Masque sous-réseau" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" "Valeur optionnelle. Si laissée vide, un masque de sous-réseau basé sur " "l'adresse sera utilisé par défaut." #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Passerelle" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Valeur optionnelle." #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "Serveur DNS" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Valeur optionnelle. Si cette valeur est renseignée et que la méthode " "d'adressage IPv4 est « Automatique », les serveurs DNS fournis par le " "serveur DHCP seront ignorés." #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Second Serveur DNS" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Valeur optionnelle. Si cette valeur est renseignée et que la méthode " "d'adressage IPv4 est « Automatique », les serveurs DNS fournis par le " "serveur DHCP seront ignorés." #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "-- sélectionner --" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Le nom visible du réseau." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Mode" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Mode Authentification" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" "Sélectionner WPA si votre réseau sans fil est sécurisé et s'il demande aux " "clients un mot de passe pour se connecter." #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Phrase secrète" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Connexions Réseau" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Réseaux Wi-Fi à Proximité" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Ajouter connexion" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "Réseaux" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "Impossible de montrer la connexion : connexion introuvable." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "Montrer les informations sur la connexion" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "Impossible de modifier la connexion : connexion introuvable." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "Ce type de connexion n'est pas encore intelligible." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Modifier connexion" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Connexion {name} activée." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Échec de l'activation de la connexion : connexion introuvable." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" "Échec de l'activation de la connexion {name} : pas d'appareil adéquat " "disponible." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Connexion {name} désactivée." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Échec de la désactivation de la connexion : connexion introuvable." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Ajouter Nouvelle Connexion Ethernet" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Ajouter Nouvelle Connexion PPPoE" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Ajouter Nouvelle Connexion Wi-Fi" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Connexion {name} supprimée." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Échec de la suppression de la connexion : connexion introuvable." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Supprimer Connexion" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "Modifier Connexion" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "Modifier" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "Désactiver" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "Activer" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "Supprimer Connexion" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "Supprimer" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "Connexion" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "Connexion primaire" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "oui" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "Appareil" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "État" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "Explication sur l'état" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "Adresse MAC" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "Interface" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "Description" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "Lien Physique" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "État du lien" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "Le câble est connecté" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "Vérifier le câble" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "Vitesse" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "Force du Signal" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "Canal" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IPv4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "Méthode" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "Adresse IP" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "Serveur DNS" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "Défaut" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IPv6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "Cette connexion n'est pas active." #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "Sécurité" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "Zone pare-feu" #: plinth/modules/networks/templates/connection_show.html:280 #, fuzzy #| msgid "" #| "This interface should be connected to local network/machine. If you " #| "connect this interface to a public network, services meant to be " #| "available only internally will become available externally. This is a " #| "security risk." msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" "L'interface doit être connectée à la machine ou au réseau local. Si vous " "connectez cette interface au réseau public, les services destinés à une " "accessibilité en interne deviendront accessible depuis l'extérieur. C'est " "une faille de sécurité." #: plinth/modules/networks/templates/connection_show.html:300 #, fuzzy #| msgid "" #| "This interface should receive your Internet connection. If you connect it " #| "your a local network/machine, many services meant to available only " #| "internally will not be available." msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" "Cette interface doit recevoir votre connexion internet. Si vous la connectez " "à une machine ou un réseau local, beaucoup de services conçus pour un usage " "interne ne seront pas disponibles." #: plinth/modules/networks/templates/connection_show.html:319 #, fuzzy, python-format #| msgid "" #| "This interface is not maintained by FreedomBox. Its security status is " #| "unknown to FreedomBox. Many FreedomBox services may not be available on " #| "this interface. It is recommended that you deactivate/delete this " #| "connection and re-configure it." msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Cette interface n'est pas maintenue par FreedomBox. L'état de sa sécurité " "est inconnu aux yeux de FreedomBox. Beaucoup de services FreedomBox ne " "seront pas disponibles sur cette interface. Il est recommandé de désactiver/" "supprimer cette connexion et de la reconfigurer." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "Créer..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "Créer Connexion" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "Supprimer la connexion %(name)s de façon permanente ?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "Internet" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "Espacement" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "Externe" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "Ethernet" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "Wi-Fi" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "Montrer la connexion %(connection.name)s" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "Interne" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "Montrer la connexion %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "Machine" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "Supprimer la connexion %(name)s" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "Actif" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "Inactif" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "Réseau Privé Virtuel (OpenVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "OpenVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "Activer le serveur OpenVPN" #: plinth/modules/openvpn/templates/openvpn.html:38 #, fuzzy, python-format #| msgid "" #| "Virtual Private Network (VPN) is a technique for securely connecting two " #| "machines in order to access resources of a private network. While you " #| "are away from home, you can connect to your %(box_name)s in order to join " #| "your home network and access private/internal services provided by " #| "%(box_name)s. You can also access the rest of the Internet via " #| "%(box_name)s for added security and anonymity." msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "Un réseau privé virtuel (VPN) est une technique permettant de connecter deux " "machines de manière sécurisée pour accéder aux ressources d'un réseau privé. " "Lorsque vous êtes hors de chez vous, vous pouvez vous connecter à votre " "boîte %(box_name)s pour atteindre votre réseau privé et aux services privés/" "internes via %(box_name)s. Vous pouvez aussi accéder à l'Internet via " "%(box_name)s depuis votre réseau pour une sécurité et un anonymat accrus." #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "Profil" #: plinth/modules/openvpn/templates/openvpn.html:54 #, fuzzy, python-format #| msgid "" #| "To connect to %(box_name)s's VPN, you need to download a profile and feed " #| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " #| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " #| "configure them." msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "Pour vous connecter au réseau VPN %(box_name)s, vous devez télécharger un " "profil et l'accoler à un client VPN sur votre mobile ou sur votre " "ordinateur. Les clients OpenVPN sont disponibles pour de nombreuses plate-" "formes. Voir la documentation wiki consacrée " "aux clients recommandés et aux instructions liées à leur configuration." #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" "Un profil est propre à chaque utilisateur de %(box_name)s. Gardez le secret." #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "Télécharger mon profil" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" "OpenVPN n'a pas encore été installé. Une installation sûre prend beaucoup de " "temps. En fonction de la vélocité de %(box_name)s, cela peut prendre des " "heures. Si l'installation est interrompue, vous devez recommencer." #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "Démarrer l'Installation" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "L'installation d'OpenVPN est en cours" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" "Une installation sûre prend beaucoup de temps. En fonction de la vélocité de " "%(box_name)s, cela peut prendre des heures. Si l'installation est " "interrompue, vous devez recommencer." #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "Le serveur OpenVPN est actif" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "Le serveur OpenVPN est inactif" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "Installation terminée." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "Échec de l'installation." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "Activer ownCloud" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "Hébergement de Fichiers (ownCloud)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "ownCloud" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "Activer ownCloud" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "ownCloud désactivé" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" "ownCloud propose un accès universel à vos fichiers via une interface Web ou " "WebDAV. Il fournit aussi une plate-forme pour lire et synchroniser vos " "contacts, vos calendriers et vos signets sur tous vos appareils. Il permet " "l'édition basique de documents sur le Web. L'installation est peu exigeante " "en matière de serveur mais ne demande pas de permission spéciale. Elle est " "rapide. ownCloud est extensible via une simple API permettant l'ajout " "d'applications et de plugins." #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" "Une fois activée, l'installation d'ownCloud sera accessible depuis le chemin " "/owncloud sur le serveur web. Visiter cette URL " "pour une configuration initiale du compte administrateur d'ownCloud." #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "Appliquer les modifications" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "Visibilité Publique (PageKite)" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "Activer PageKite" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "Domaine du serveur" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" "Sélectionner votre serveur pagekite. Établir \"pagekite.net\" pour une " "utilisation par défaut du serveur pagekite.net." #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "Port serveur" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "Port de votre serveur pagekite (par défaut : 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "Nom Kite" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "Exemple : monpc.pagekite.me" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "Nom Kite invalide" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "Kite secret" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" "Un secret associé à Kite ou un secret par défaut pour votre compte si aucun " "secret n'est établi sur kite." #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "Renseignements pour Kite établis" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "Serveur PageKite établi" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "PageKite activé" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "PageKite désactivé" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "Service activé : {name}" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "Service désactivé : {name}" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "protocole" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "port externe (frontal)" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "port interne (freedombox)" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "Activer les sous-domaines" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "Service personnalisé supprimé" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" "Ce service est disponible sous forme standard. Utiliser la page « Services " "Standards » pour l'activer." #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "Service personnalisé ajouté" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "Ce service existe déjà" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "Compte PageKite" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "Sauvegarder la configuration" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" "Avertissement :
le serveur frontal PageKite peut ne pas être " "compatible avec toutes le combinaisons protocole/port en cours de " "définition. Par exemple, le protocole HTTPS sur les ports autres que 443 est " "connu pour causer un problème." #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "Créer un service personnalisé" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "Ajouter Service" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "Services personnalisés existants" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "Vous n'avez pas de Services Personnalisés actifs" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "connecté à %(backend_host)s:%(backend_port)s" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "Supprimer ce service" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" "PageKite est un système permettant d'exposer des services de %(box_name)s " "lorsque vous n'avez pas de connexion directe à Internet. Vous n'en avez " "besoin que si les services de %(box_name)s ne sont pas joignables depuis le " "reste de l'Internet. Cela comprend les situations suivantes :" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "%(box_name)s est derrière un pare-feu restrictif." #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" "%(box_name)s est connecté à un réseau (sans fil) que vous ne contrôlez pas." #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" "Votre FAI ne vous fournit pas une adresse IP externe, plutôt une connexion " "Internet via NAT." #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" "Votre FAI ne vous fournit pas une adresse statique, votre adresse IP change " "à chaque fois que vous vous connectez à l'Internet." #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "Votre FAI limite les connexions entrantes." #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" "PageKite fonctionne malgré un routeur NAT, des pare-feux et des limitations " "d'adresse IP en utilisant une combinaison de tunnels et de proxys inverses. " "Vous pouvez utiliser n'importe quel fournisseur de service PageKite, comme " "par exemple pagekite.net. Dans le " "futur, il sera peut-être possible d'utiliser %(box_name)s d'un ami pour ce " "faire." #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "Configurer PageKite" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "Avertissement :
" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" "Les services publiés sont accessibles et peuvent être attaqués depuis un " "Internet mal intentionné." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" "Exposer SSH avec un mot de passe par défaut pour « fbx » est une TRÈS " "MAUVAISE idée." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "Sauvegarder les Services" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "Serveur Web (HTTP)" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "Le site sera accessible sur http://{0}" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "Serveur Web (HTTPS)" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "Le site sera accessible sur https://{0}" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "Shell Sécurisé (SSH)" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" "Voir comment configurer le client SSH sur le wiki pagekite (en anglais)" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "Pagekite" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "À propos de PageKite" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "Services Standards" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "Services Personnalisés" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "Alimentation" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "Redémarrer ou éteindre le système." #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "Redémarrer »" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "Éteindre »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" "Voulez-vous vraiment redémarrer ? Vous ne pourrez plus avoir accès à cette " "interface Web durant quelques minutes, jusqu'à ce que le système ait " "redémarré." #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "Redémarrer Maintenant" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" "Voulez-vous vraiment éteindre le système ? Vous ne pourrez plus avoir accès " "à cette interface Web après l'extinction du système." #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "Éteindre Maintenant" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "Proxy Web (Privoxy)" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "Proxy Web Privoxy" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Accéder à l'URL {url} avec le proxy {proxy} sur tcp{kind}" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "Activer Privoxy" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" "Privoxy est un proxy web avec des capacités évoluées de filtrage pour " "améliorer la protection de la vie privée, modifier certaines données de " "pages Web, des en-têtes HTTP et pour contrôler l'accès et retirer les " "publicités ou autres éléments nuisibles de l'Internet." #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" "Vous pouvez utiliser Privoxy en modifiant la configuration du proxy de votre " "navigateur avec un nom de machine correspondant à %(box_name)s (ou son " "adresse IP) et le port 8118. Tout en utilisant Privoxy, vous pourrez lire " "plus de détails sur sa configuration et une documentation sur http://config.privoxy.org/ ou http://p.p." #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "Privoxy est actif" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "Privoxy n'est pas actif" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "Logiciel IRC (Quassel)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "Logiciel IRC Quassel" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "Activer le cœur Quassel" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" "Quassel est une application IRC divisée en deux parties, une cœur (« core») " "et un logiciel (« client »). Cette division permet au cœur de rester " "connecté aux serveurs IRC et de continuer à recevoir des messages même si le " "client est déconnecté. %(box_name)s peut utiliser « Quassel core » pour que " "vous soyez toujours en ligne. Un ou plusieurs clients Quassel basés sur un " "ordinateur ou un mobile servent à se brancher sur le cœur ou s'en débrancher." #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" "Vous pouvez connecter votre cœur Quassel sur le port Quassel par défaut " "4242. Les clients destinés à la connexion depuis votre ordinateur ou votre mobile sont disponibles pour " "téléchargement." #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "Quassel core est actif" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "Quassel core n'est pas actif" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 #, fuzzy #| msgid "Server port" msgid "SIP Server (repro)" msgstr "Port serveur" #: plinth/modules/repro/__init__.py:41 #, fuzzy #| msgid "Second DNS Server" msgid "repro SIP Server" msgstr "Second Serveur DNS" #: plinth/modules/repro/forms.py:29 #, fuzzy #| msgid "Enable Quassel core service" msgid "Enable repro service" msgstr "Activer le cœur Quassel" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 #, fuzzy #| msgid "Quassel core service is running" msgid "repro service is running" msgstr "Quassel core est actif" #: plinth/modules/repro/templates/repro.html:66 #, fuzzy #| msgid "Quassel core service is not running" msgid "repro service is not running" msgstr "Quassel core n'est pas actif" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "Stockage Non Hébergé (reStore)" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "reStore" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "Activer reStore" #: plinth/modules/restore/templates/restore_index.html:29 #, fuzzy, python-format #| msgid "" #| "reStore is a server for unhosted web " #| "applications. The idea is to uncouple web applications from data. No " #| "matter where a web application is served from, the data can be stored on " #| "an unhosted storage server of user's choice. With reStore, your " #| "%(cfg.box_name)s becomes your unhosted storage server." msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" "reStore est un serveur pour applications Web non hébergées. L'idée est de découpler les applications Web des " "données qu'elles gèrent. Le serveur sur lequel se trouve l'application Web " "n'a alors plus d'importance. Les données peuvent être stockées sur le " "serveur de stockage non hébergé découlant du choix de l'utilisateur. En " "utilisant reStore, votre machine %(cfg.box_name)s devient votre serveur de " "stockage non hébergé." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" "Vous pouvez créer et modifier les comptes sur l'interface Web reStore." #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "Client Courriel (Roundcube)" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "Activer Roundcube" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" "La messagerie Web Roundcube est un client IMAP multilingue fonctionnant sur " "un navigateur web grâce à une interface similaire à celle d'une application. " "Roundcube propose la panoplie complète des fonctions attendues pour un " "client de courriers électroniques, dont la compatibilité MIME, un carnet " "d'adresses, une gestion des dossiers, une recherche des messages et un " "correcteur orthographique." #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" "Vous pouvez accéder à RoundCube depuis /roundcube. Renseigner le nom d'utilisateur et le mot de passe de votre compte de " "courrier électronique auquel vous souhaitez accéder, suivis du nom de " "domaine du serveur IMAP de votre fournisseur d'email, comme imap." "example.com. Pour de l'IMAP sur du SSL (recommandé), remplissez les " "champs du serveur avec par exemple imaps://imap.example.com." #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" "Pour Gmail, le nom d'utilisateur sera votre adresse Gmail, le mot de passe " "sera celui de votre compte Google, le serveur sera imaps://imap.gmail." "com. Noter que vous aurez également besoin d'activer « Applications " "moins sécurisées » sur votre compte Google (https://www.google.com/settings/security/" "lesssecureapps)." #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "Signets (Shaarli)" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "Shaarli" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "Activer Shaarli" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "Shaarli permet de sauvegarder et de partager vos signets." #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" "Lorsqu'activé, Shaarli est accessible depuis /shaarli sur le serveur web. Notez que Shaarli est seulement compatible avec un " "compte utilisateur unique que vous configurerez lors de votre première " "visite." #: plinth/modules/system/system.py:26 msgid "System" msgstr "Système" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Configuration Système" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "" "Vous pouvez ici administrer le système réglant le fonctionnement de " "%(box_name)s." #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" "Ces options affectent %(box_name)s à son niveau le plus général, faites " "attention." #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "Réseau Anonyme (Tor)" #: plinth/modules/tor/__init__.py:53 #, fuzzy #| msgid "Anonymity Network (Tor)" msgid "Tor Anonymity Network" msgstr "Réseau Anonyme (Tor)" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "Service Caché Tor" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Port du relais Tor disponible" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Transport Obfs3 enregistré" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Transport Obfs4 enregistré" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Accédez à l'URL {url} sur tcp{kind} via Tor" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Confirmez l'utilisation de Tor pour {url} sur tcp{kind}" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "Activer Tor" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "Activer les Services Cachés Tor" #: plinth/modules/tor/forms.py:38 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow FreedomBox to provide selected services (such " #| "as ownCloud or Chat) without revealing its location." msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" "Un service caché permettra à FreedomBox de proposer les services " "sélectionnés (comme ownCloud ou Chat) sans révéler votre emplacement." #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "Téléchargez les logiciels via Tor" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" "Lorsqu'activé, le logiciel sera téléchargé via le réseau Tor pour " "installation et mises à niveau. Ce processus ajoute un degré de sécurité et " "de confidentialité durant le téléchargement des logiciels." #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" "Tor est un système de communication anonyme. Vous pouvez en savoir plus sur " "le site « Tor Project ». Pour " "une meilleure protection lorsque vous surfez sur Internet, le projet Tor " "recommande l'utilisation du Navigateur Tor." #: plinth/modules/tor/templates/tor.html:54 #, fuzzy #| msgid "Configuration updated" msgid "Tor configuration is being updated" msgstr "Configuration actualisée" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor est actif" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tot n'est pas actif" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Services Cachés" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Port" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Pont" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" "%(box_name)s est configuré sur le mode pont Tor avec obfsproxy, ce qui peut " "aider à contourner la censure. Si votre boîte %(box_name)s est derrière un " "routeur ou un pare-feu, vous devez vous assurer que les ports suivants " "soient ouverts et réacheminés si nécessaire :" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Service" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" "Un port SOCKS pour Tor est accessible pour %(box_name)s sur le port TCP 9050." #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Panneau de configuration Tor" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Erreur sur action : {0} [{1}] [{2}]" #: plinth/modules/tor/views.py:148 #, fuzzy #| msgid "Configuration updated" msgid "Configuration updated." msgstr "Configuration actualisée" #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "Transmission BitTorrent" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "Activer Transmission BitTorrent" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "Répertoire de téléchargement" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" "Répertoire où les téléchargements sont sauvegardés. Si vous changez le " "répertoire par défaut, assurez-vous que ce nouveau répertoire existe bien et " "qu'il est ouvert en écriture pour l'utilisateur \"debian-transmission\"." #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "Nom d'utilisateur pour se connecter à l'interface web." #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" "Mot de passe pour se connecter à l'interface web. Le mot de passe actuel est " "visible au format haché. Pour établir un nouveau mot de passe, entrez-le en " "texte brut." #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" "BitTorrent est un protocole de partage de fichiers pair-à-pair. Le daemon " "Transmission permet le partage de fichiers Bitorrent. Noter que " "l'utilisation de Bitorrent n'est pas anonyme." #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" "Accéder à l'interface Web de /transmission." #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "Le daemon Transmission est actif" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "Le daemon Transmission n'est pas actif." #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "Mises à Niveau Logiciels" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "Activer les mises à niveau automatiques" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" "Lorsqu'activé, le programme unattended-upgrades sera mis en œuvre une fois " "par jour. Il essayera de réaliser l'ensemble des mises à niveau disponibles." #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Mettre à niveau »" #: plinth/modules/upgrades/templates/upgrades.html:65 #, fuzzy #| msgid "ejabberd is running" msgid "A package manager is running." msgstr "ejabberd est actif" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Mises à niveau automatiques" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Mise à Niveau Paquets" #: plinth/modules/upgrades/views.py:96 #, fuzzy #| msgid "Upgrade completed." msgid "Upgrade process started." msgstr "Mise à niveau terminée." #: plinth/modules/upgrades/views.py:99 #, fuzzy #| msgid "Upgrade failed." msgid "Starting upgrade failed." msgstr "Échec de la mise à niveau." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Paquets Mis à Niveau" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "Erreur lors de la configuration de unattended-upgrades : {error}" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Mises à niveau automatiques activées" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Mises à niveau automatiques désactivées" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Utilisateurs et Groupes" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Vérification de l'entrée LDAP \"{search_item}\"" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "admin" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "wiki" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "Groupes" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" "Sélectionnez les services devant être accessibles à un nouvel utilisateur. " "L'utilisateur pourra se connecter aux services compatibles avec une session " "unique via LDAP, s'ils appartiennent au groupe approprié.

Les " "utilisateurs du groupe admin pourront se connecter à tous les services. Ils " "peuvent également se connecter au système avec Secure Shell (SSH) et se voir " "accorder le mode superutilisateur (sudo)." #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "Échec de l'ajout d'un nouvel utilisateur au groupe {group}." #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "Le changement du nom LDAP de l'utilisateur a échoué." #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Échec du retrait de l'utilisateur du groupe." #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Échec de l'ajout de l'utilisateur au groupe." #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Le changement de mot de passe pour l'utilisateur LDAP a échoué." #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "Changer le mot de passe pour %(username)s" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "Sauvegarder Mot de Passe" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "Créer Utilisateur" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Supprimer Utilisateur" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "Supprimer définitivement l'utilisateur %(username)s ?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "Supprimer %(username)s" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "Supprimer l'utilisateur %(username)s" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "Modifier l'utilisateur %(username)s" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" "Utiliser le formulaire de modification de " "mot de passe pour changer votre mot de passe." #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "Sauvegarder Modifications" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "Utilisateurs" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "Utilisateur %(username)s créé." #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "Utilisateur %(username)s mis à jour." #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "Modifier Utilisateur" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Utilisateur {user} supprimé." #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "La suppression de l'utilisateur LDAP a échoué." #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Changer Mot de Passe" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Mot de passe changé avec succès." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "Serveur Chat (XMPP)" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "Activer XMPP" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" "XMPP est un protocole de communication ouvert et standardisé. Vous pouvez " "opérer et configurer ici votre serveur XMPP, appelé ejabberd." #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" "Pour communiquer, vous pouvez utiliser le client Web " "ou tout autre client XMPP." #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" "Le domaine de votre serveur XMPP est réglé sur %(domainname)s. Les " "identités utilisateur ressembleront à ceci : username@%(domainname)s. " "Vous pouvez configurer le domaine de votre système sur la page Configurer." #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "Lancer le client Web" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "ejabberd est actif" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "ejabberd n'est pas actif" #: plinth/network.py:39 msgid "PPPoE" msgstr "PPPoE" #: plinth/package.py:156 msgid "packages not found" msgstr "Paquets introuvables" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "Paquets installés et configurés avec succès." #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "Erreur lors de l’installation des paquets : {string} {details}" #: plinth/service.py:73 msgid "Web Server" msgstr "Serveur Web" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "Serveur web via SSL (Secure Socket Layer)" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "Serveur Secure Shell (SSH)" #: plinth/service.py:79 #, fuzzy, python-brace-format #| msgid "FreedomBox Web Interface (Plinth)" msgid "{box_name} Web Interface (Plinth)" msgstr "Interface web Freedombox (Plinth)" #: plinth/templates/404.html:25 msgid "404" msgstr "404" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "La page %(request_path)s n'a pas été trouvée." #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" "Si vous pensez que cette page manquante doit exister, il est conseillé " "d'envoyer un rapport " "de bogue à l'équipe du projet Plinth." #: plinth/templates/500.html:25 msgid "500" msgstr "500" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" "Cette erreur est propre au système, vous n'en êtes pas à l'origine et vous " "ne pouvez pas la réparer. Il est conseillé de faire parvenir un rapport de bogue pour " "traitement et réparation." #: plinth/templates/base.html:49 #, fuzzy, python-format #| msgid "Plinth administrative interface for the FreedomBox" msgid "Plinth administrative interface for the %(box_name)s" msgstr "Interface d'administration Plinth pour FreedomBox" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Basculer Navigation" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Changer le mot de passe" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Se déconnecter" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "S'identifier" #: plinth/templates/login.html:35 msgid "Login" msgstr "S'identifier" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "Installation" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" "Cette fonction requiert un paquet additionnel. Voulez-vous l'installer ?" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "Paquet" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "Description" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "Installer" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "Installation de %(package_names)s: %(status)s" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% effectué" #~ msgid "show password" #~ msgstr "montrer le mot de passe" #~ msgid "The following is the current status:" #~ msgstr "Voici l'état actuel :" #~ msgid "Congratulations! Your FreedomBox is up and running!" #~ msgstr "Félicitations ! Votre FreedomBox fonctionne !" #~ msgid "" #~ "Please provide the following basic information to complete the setup " #~ "process." #~ msgstr "" #~ "Cliquer sur « Suivant » pour achever la configuration en enregistrant les " #~ "informations de base." #~ msgid "Next" #~ msgstr "Suivant" #~ msgid "FreedomBox Manual" #~ msgstr "Manuel FreedomBox" #~ msgid "" #~ "Many FreedomBox contributors and users are also available on the " #~ "#freedombox channel of the irc.oftc.net IRC network." #~ msgstr "" #~ "Un bon nombre de contributeurs et d'utilisateurs de la FreedomBox sont " #~ "également accessibles sur le canal IRC #freedombox du réseau irc.oftc.net." #~ msgid "Create Wiki/Blog" #~ msgstr "Créer Wiki/Blogue" #~ msgid "" #~ "Select Automatic (DHCP) if you are connecting to an existing wireless " #~ "network. Shared mode is useful when running an Access Point." #~ msgstr "" #~ "Sélectionner automatique (DHCP) si vous vous connectez à un réseau sans " #~ "fil existant. Le mode partagé est utile en cas de Point d'accès." #~ msgid "Tor enabled" #~ msgstr "Tor activé" #~ msgid "Tor disabled" #~ msgstr "Tor désactivé" #~ msgid "Tor hidden service enabled" #~ msgstr "Services cachés Tor activés" #~ msgid "Tor hidden service disabled" #~ msgstr "Services cachés Tor désactivés" #~ msgid "Enabled package download over Tor" #~ msgstr "Téléchargement de paquets via Tor activé" #~ msgid "Disabled package download over Tor" #~ msgstr "Téléchargement de paquets via Tor désactivé" #~ msgid "There was an error while upgrading." #~ msgstr "Une erreur est survenue durant la mise à niveau." #~ msgid "Output from unattended-upgrades:" #~ msgstr "Résultat pour unattended-upgrades :" #~ msgid "The operating system is up to date now.  " #~ msgstr "Le système d'exploitation est à jour.  " #~ msgid "Show Details" #~ msgstr "Montrer les détails" #~ msgid "" #~ "This will run unattended-upgrades, which will attempt to upgrade your " #~ "system with the latest Debian packages. It may take a few minutes to " #~ "complete." #~ msgstr "" #~ "Vous allez démarrer unattended-upgrades qui a pour but de mettre à niveau " #~ "votre système avec les derniers paquets Debian." #~ msgid "System is being upgraded." #~ msgstr "Le système est en cours de mise à niveau." #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." #~ msgstr "" #~ "Vous pouvez installer et utiliser différents services et applications sur " #~ "%(box_name)s." #~ msgid "Physical interface" #~ msgstr "Interface physique" #~ msgid "Delete Connection %(name)s" #~ msgstr "Supprimer Connexion %(name)s" #~ msgid "Bittorrent (Transmission)" #~ msgstr "Bittorrent (Transmission)" #~ msgid "Delete user permanently?" #~ msgstr "Supprimer définitivement l'utilisateur ?" #~ msgid "Edit User %(username)s" #~ msgstr "Modifier l'utilisateur %(username)s" #~ msgid "Scramblesuit transport registered" #~ msgstr "Transport Scramblesuit enregistré" Plinth-0.8.1/plinth/locale/it/000077500000000000000000000000001266051671100161345ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/it/LC_MESSAGES/000077500000000000000000000000001266051671100177215ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/it/LC_MESSAGES/django.po000066400000000000000000002411371266051671100215330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "" #: plinth/modules/config/config.py:97 #, python-brace-format msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "" #: plinth/modules/config/config.py:110 #, python-brace-format msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" #: plinth/modules/config/config.py:125 msgid "Language" msgstr "" #: plinth/modules/config/config.py:127 msgid "Language for this web administration interface" msgstr "" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "" #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format msgid "The public domain name you want use to reach your {box_name}." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:135 msgid "Accept all SSL certificates" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:139 msgid "Use HTTP basic authentication" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 msgid "Dynamic DNS Client" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 msgid "Direct connection to the Internet." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "" #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "" #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 msgid "Current Network Configuration" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "" #: plinth/modules/help/help.py:73 #, python-brace-format msgid "{box_name} Manual" msgstr "" #: plinth/modules/help/templates/help_about.html:30 #, python-format msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" #: plinth/modules/help/templates/help_about.html:56 #, python-format msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 #, python-format msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 #, python-format msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 #, python-format msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 msgid "Wiki and Blog (ikiwiki)" msgstr "" #: plinth/modules/ikiwiki/__init__.py:43 msgid "ikiwiki wikis and blogs" msgstr "" #: plinth/modules/ikiwiki/forms.py:29 msgid "Enable ikiwiki" msgstr "" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format msgid "Delete Wiki or Blog %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "" #: plinth/modules/ikiwiki/views.py:73 msgid "Wiki and Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "" #: plinth/modules/ikiwiki/views.py:132 msgid "Create Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "" #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "" #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "" #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:182 msgid "Delete Wiki or Blog" msgstr "" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 msgid "Domain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 msgid "Actions" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "" #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "" #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "" #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "" #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "" #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "" #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "" #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "" #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "" #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "" #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 msgid "SIP Server (repro)" msgstr "" #: plinth/modules/repro/__init__.py:41 msgid "repro SIP Server" msgstr "" #: plinth/modules/repro/forms.py:29 msgid "Enable repro service" msgstr "" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 msgid "repro service is running" msgstr "" #: plinth/modules/repro/templates/repro.html:66 msgid "repro service is not running" msgstr "" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" #: plinth/modules/system/system.py:26 msgid "System" msgstr "" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "" #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "" #: plinth/modules/tor/__init__.py:53 msgid "Tor Anonymity Network" msgstr "" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" #: plinth/modules/tor/templates/tor.html:54 msgid "Tor configuration is being updated" msgstr "" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" #: plinth/modules/tor/views.py:148 msgid "Configuration updated." msgstr "" #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "" #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "" #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "" #: plinth/modules/upgrades/views.py:99 msgid "Starting upgrade failed." msgstr "" #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "" #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "" #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "" #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "" #: plinth/network.py:39 msgid "PPPoE" msgstr "" #: plinth/package.py:156 msgid "packages not found" msgstr "" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "" #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "" #: plinth/service.py:73 msgid "Web Server" msgstr "" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 msgid "404" msgstr "" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "" #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" #: plinth/templates/500.html:25 msgid "500" msgstr "" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" #: plinth/templates/login.html:35 msgid "Login" msgstr "" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "" Plinth-0.8.1/plinth/locale/nb/000077500000000000000000000000001266051671100161175ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/nb/LC_MESSAGES/000077500000000000000000000000001266051671100177045ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/nb/LC_MESSAGES/django.po000066400000000000000000003443371266051671100215240ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # abjectio, 2015 # Ingrid Yrvin , 2015-2016 # Ingrid Yrvin , 2015 # Ole-Erik Yrvin , 2015 # Ole-Erik Yrvin , 2016 # pere , 2015-2016 # Petter Reinholdtsen , 2015 # Philippe Baret , 2015 msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-02-07 11:29+0530\n" "PO-Revision-Date: 2016-02-13 10:11+0000\n" "Last-Translator: Dietmar \n" "Language-Team: Norwegian Bokmål " "\n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "Lytter på {kind} port {listen_address}:{port}" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "Lytter på {kind} port {port}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "Tilgang til nettadressen {url} på tcp{kind}" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "Tilgang til nettadressen {url}" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "Koble til {host}:{port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "Kan ikke koble til {host}:{port}" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FreedomBox" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Apper" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Anvendelser" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "Tjenester og bruk" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" "Du kan installere og kjøre ulike tjenester og programmer på din " "%(box_name)s. Klikk på en applikasjonslenke til venstre for å lese en " "beskrivelse av programmet, og velge å installere det." #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "Denne boksen kan være ditt nettsted for deling av bilder, for ditt sosiale " "nettverksområde, og din nyhetsside. Husket webportaler? Vi kan være en av " "dem også. Mange av de tjenestene du bruker på nettet kan snart være på " "nettstedet og under din kontroll!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "Tjenesten Discovery (finne tjenesten)" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "Aktivere finne tjenesten (Service Discovery)" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "Finne tjenester (tjenesten Discovery) tillater andre enheter i nettverket å " "oppdage din %(box_name)s og tjenester som kjører på den. Den tillater også " "%(box_name)s å oppdage andre enheter og tjenester som kjører på det lokale " "nettverket. Discovery er ikke avgjørende, og virker bare på interne " "nettverk. De kan deaktiveres for å bedre sikkerheten, spesielt når du kobler " "til et fremmed lokalt nettverk." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "Status" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "Serveren til finne tjenesten (tjenesten Discovery) kjører" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "Serveren til finne tjenesten (tjenesten Discovery) kjører ikke" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "Oppsett" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "Oppdater oppsett" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Oppsett oppdatert" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Oppsett uendret" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Ugyldig domenenavn" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Vertsnavn" #: plinth/modules/config/config.py:97 #, python-brace-format msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Vertsnavn er det lokale navnet som andre enheter i det lokale nettverket kan " "nå ditt {box_name} med. Det må starte og avslutte med en bokstav eller et " "tall, og inneholde bokstaver tall eller bindrestreker. Lengden må være 63 " "tegn eller mindre." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Ugyldig vertsnavn" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Domenenavn" #: plinth/modules/config/config.py:110 #, python-brace-format msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "Domenenavnet er det globale navnet som andre enheter på Internettet kan nå " "ditt {box_name} med. Det må bestå av merkelapper atskilt med punktum. Hver " "merkelapp må starte og avslutte med en bokstav eller et tall, og imellom " "bare bokstaver, tall og bindestreker. Lengden på hver merkelapp må være 63 " "tegn, eller mindre. Lengden på domenenavnet må være 253 tegn, eller mindre." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "Språk" #: plinth/modules/config/config.py:127 msgid "Language for this web administration interface" msgstr "Språk i denne nettadministrasjonens brukergrensesnitt. " #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Sette opp" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "Generelt oppsett" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "Feil ved setting av vertsnavn: {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "Vertsnavn satt" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "Feil ved setting av domenenavn: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "Domenenavn satt" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "Språksettingsfeil: {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "Språk endret" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "Send inn" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "Dato og tid" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "Nettverktidstjener" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "NTP-klient har kontakt med tjenere" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "Aktiver nettverktid" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "Tidssone" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" "Still inn tidssonen for å få nøyaktige klokkeslett. Dette vil sette hele " "systemets tidssone." #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "– ingen tidssone satt –" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" "Nettverktidstjeneren er et program som synkroniserer systemets klokke med " "tjenere på Internettet." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "Nettverktidstjeneren kjører" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "Nettverktidstjeneren kjører ikke" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "Feil ved setting av tidssone: {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "Tidssone satt" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "BitTorrent (Deluge)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "Deluge BitTorrent" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "Aktiver Deluge" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "BitTorrent nett-tjener (Deluge)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "Deluge er en BitTorrent-klient som har en Web UI (brukergrensesnitt)." #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" "Når den er aktivert, vil Deluge nett-klienten være tilgjengelig fra /deluge på netttjeneren. Standardpassordet er 'deluge', men " "du bør logge inn og endre det umiddelbart etter at denne tjenesten er " "aktivert." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "deluge-web kjører" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "deluge-web kjører ikke" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "Diagnostikk" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "Systemdiagnostikk" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "Diagnostikktest" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" "Systemets diagnostikktest vil kjøre en rekke kontroller på systemet for å få " "bekreftet at applikasjoner og tjenester fungerer som forventet." #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "Kjør diagnostikk" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "Diagnostikktest kjører nå" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "Resultater" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "Modul: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "Diagnostikkresultater" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "Modul: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "Denne modulen støtter ikke diagnostikk" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "Test" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "Resultat" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Om" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dynamisk DNS (Domain Name System)" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "Variablene <User>, <Pass>, <Ip>, <Domain> kan brukes " "i nettadressen. For detaljer, se de oppdaterte nettadressemalene fra " "eksempel-leverandørene." #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" "Velg en oppdateringsprotokoll i samsvar med din leverandør. Hvis " "leverandøren ikke støtter GnudIP-protokollen, eller leverandøren din ikke er " "oppført, kan du bruke leverandørens nettadresse for oppdatering." #: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Vennligst ikke kjør en nettadresse her (som \"https://example.com/\"), men " "bare vertsnavnet til GnuDIP-serveren (som \"example.com\")." #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format msgid "The public domain name you want use to reach your {box_name}." msgstr "Det offentlige domenenavnet du vil bruke for å nå ditt {box_name}." #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Bruk dette alternativet hvis leverandøren bruker selvsignerte sertifikater." #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" "Hvis dette alternativet velges, vil ditt brukernavn og passord brukes for " "enkel godkjenning i HTTP." #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "La dette feltet stå tomt hvis du vil beholde ditt forrige passord." #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" "Valgfri verdi. Hvis ditt {box_name} ikke er koblet direkte til Internett (" "dvs. koblet til en NAT-ruter), blir denne nettadressen brukt til å finne den " "virkelige Internett-IP-en. Nettadressen skal bare returnere IP-en som " "tjeneren kommer fra (eksempelvis: http://myip.datasystems24.de)." #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "Du skulle blitt bedt om å velge et brukernavn da du opprettet kontoen." #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Aktiver dynamisk DNS (Dynamic DNS)" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Tjenestetype" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnudIP-tjeneradresse" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Ugyldig tjenernavn" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Oppdater URL" #: plinth/modules/dynamicdns/dynamicdns.py:135 msgid "Accept all SSL certificates" msgstr "Godta alle SSL-sertifikater" #: plinth/modules/dynamicdns/dynamicdns.py:139 msgid "Use HTTP basic authentication" msgstr "Bruk HTTP basisgodkjenning" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Brukernavn" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Passord" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "Vis passord" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "URL for IP-sjekk" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Vennligst oppgi oppdatert nettadresse eller en GnuDIP-tjener" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Vennligst oppgi GnuDIP-brukernavn" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Vennligst oppgi GnuDIP-domene" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Vennligst oppgi et passord" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Konfigurer dynamisk DNS" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Status for dynamisk DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 msgid "Dynamic DNS Client" msgstr "Dynamisk DNS-klient" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Hvis Internett-leverandøren endrer din IP-adresse periodisk (for eksempel " "hver 24. time), kan det være vanskelig for andre å finne deg på Internettet. " "Av denne grunn kan ingen finne tjenestene som leveres av %(box_name)s, som " "for eksempel av ownCloud." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" "Løsningen er å tildele et DNS-navn til din IP-adresse, og oppdatere DNS-" "navnet hver gang din IP endres av din Internett-leverandør. Dynamisk DNS kan " "du presse din nåværende offentlige IP-adressen til en gnudip -tjener. Nå vil " "tjeneren tildele ditt DNS-navn med den nye IP-en, og hvis noen fra " "Internettet ber om ditt DNS-navn, blir din nåværende IP besvart." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" "Hvis du ser etter en gratis dynamisk DNS-konto, kan du finne en gratis " "GnuDIP-tjeneste på gnudip.datasystems24.net eller du kan finne gratis URL " "baserte oppdateringstjenester her freedns.afraid.org ." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Hvis din %(box_name)s er tilkoblet bak en NAT-ruter, ikke glem å legge til " "port for å videresende (dvs. videresende til noen standard porter som 80 og " "443)." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" "Du har deaktivert Javascript. Dynamisk form modus er deaktivert, og noen " "helpefunksjoner vil ikke virke (men hovedfunksjonaliteten skal virke)." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "NAT-type" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" "NAT-type ikke oppdaget ennå. Hvis du ikke gir en «check nettadresse IP,» vil " "vi ikke oppdage NAT-typen." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 msgid "Direct connection to the Internet." msgstr "Direkte forbindelse til Internettet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" "Bak NAT. Dette betyr at Dynamic DNS-tjenesten vil undersøke endringene i «IP " "check URL» («check URL IP»-adgangen er nødvendig - ellers vil ikke IP-" "endringene bli oppdaget). I tilfelle WAN IP endres, kan det ta opp til " "%(timer)s minutter til DNS-adgangen er oppdatert. " #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "Siste oppdatering" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "Brannmur" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" "Firewall er et sikkerhetssystem som styrer innkommende og utgående " "nettverkstrafikk på din %(box_name)s. Å holde en brannmur aktivert og riktig " "oppsatt reduserer risikoen for sikkerhetstrusler fra Internett." #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "Nåværende status:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" "Brannmur-bakgrunnsprosessen kjører ikke. Den må kjøre. Brannmuren kommer som " "standard aktivert på %(box_name)s. På et Debian-basert system (slik som " "%(box_name)s), kan du kjøre den med kommandoen «service firewalld start\" " "eller alternativt i et system med systemd, «systemctl start firewalld»." #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "Tjeneste/Port" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Aktivert" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Deaktivert" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "Tillatt" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "Tillatt (kun internt)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "Tillatt (kun eksternt)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "Blokkert" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" "Driften av brannmuren er automatisk. Når du aktiverer en tjeneste, er den " "også tillatt i brannmuren, og når du deaktiverer en tjeneste, er den også " "deaktivert i brannmuren." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "Oppretting av LDAP-bruker feilet." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "Klarte ikke å legge til en ny bruker i admingruppen." #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "Brukerkonto er opprettet, du er nå logget inn" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "Hjelp" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "Start Setup" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" "For å fullføre oppsettet til din %(box_name)s, trengs det noen " "basisinformasjoner." #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Administratorkonto" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" "Velg et brukernavn og et passord for å få tilgang til dette " "nettgrensesnittet. Passordet kan endres senere. Denne brukeren vil bli " "innvilget administrative rettigheter. Andre brukere kan legges til senere." #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Pakk det sammen!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "Oppsett komplett!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" "%(box_name)s-oppsettet er nå fullført. For å få din %(box_name)s funksjonell " "trenger du noen programmer. De vil bli installert første gang du åpner dem. " #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "Gå til applikasjoner" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 msgid "Current Network Configuration" msgstr "Nåværende nettverksoppsett" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" "Du bør sjekke nettverksoppsettet, og endre det om nødvendig. Ikke glem å " "endre standard Wi-Fi-passordene!" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Gå til nettverk" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Oppsett ferdig" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "Dokumentasjon" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "Hvor kan en få hjelp" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "Manual" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "Dokumentasjon og ofte stilte spørsmål" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "Om {box_name}" #: plinth/modules/help/help.py:73 #, python-brace-format msgid "{box_name} Manual" msgstr "{box_name} Manual" #: plinth/modules/help/templates/help_about.html:30 #, python-format msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" "%(box_name)s er et communityprosjekt (fellesskapsprosjekt) for å utvikle, " "designe og fremme personlige servere som kjører gratis programvare for " "privat, personlig kommunikasjon. Det er en nettverksanvendelse utviklet for " "å tillate samvirke med resten av Internettet med beskyttet personvern og " "datasikkerhet. Det omfatter programmer som blogg, wiki, hjemmeside, sosiale " "nettverk, e-post, mellomtjener for nett og et Tor relé, samlet på en enhet " "som kan erstatte din Wi-Fi-ruter, slik at dataene dine blir hos deg." #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" "Vi lever i en verden hvor vår bruk av nettet er formidlet av dem som ofte " "ikke har våre beste interesser på hjertet. Ved å bygge programvare som ikke " "er avhengig av en sentral tjeneste, kan vi gjenvinne kontrollen og " "privatliv. Ved å holde våre data i våre hjem, får de nyttige, juridisk, " "beskyttelse. Ved å gi makten tilbake til brukerne over egne nettverk og " "maskiner, er vi tilbake til Internettet sin tiltenkte like-til-like " "arkitektur." #: plinth/modules/help/templates/help_about.html:56 #, python-format msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" "Det er en rekke prosjekter som arbeider for å realisere en fremtid med " "distribuerte tjenester; %(box_name)s mål er å bringe dem sammen i en " "praktisk pakke." #: plinth/modules/help/templates/help_about.html:64 #, python-format msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "For mer informasjon om %(box_name)s-prosjektet, se %(box_name)s Wiki." #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Lær mer »" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Du benytter Plinth versjon %(version)s." #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "%(box_name)s Oppsett" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "Det beste stedet å starte for å få informasjon om %(box_name)s er %(box_name)s Manual." #: plinth/modules/help/templates/help_index.html:36 #, python-format msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" " " "%(box_name)s project wiki har mer informasjon." #: plinth/modules/help/templates/help_index.html:43 #, python-format msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" "For å få hjelp fra %(box_name)s community, kan henvendelser legges inn på mailing list. Listen inneholder også informasjon om problemer andre " "brukere har møtt, og mulige løsninger." #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" "Mange %(box_name)s bidragsytere og brukere er også tilgjengelige i irc.oftc." "net IRC-nettverket. Delta og be om hjelp på #freedombox-kanalen " "ved å bruke IRC-nettbrukergrensesnittet. " #: plinth/modules/ikiwiki/__init__.py:38 msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki og blogg (ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 msgid "ikiwiki wikis and blogs" msgstr "ikiwiki wikis og blogger" #: plinth/modules/ikiwiki/forms.py:29 msgid "Enable ikiwiki" msgstr "Aktiver ikiwiki" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "Type" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "Navn" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "Administrators kontonavn" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "Administrator passord" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" "Aktivert, blir bloggene og wikiene tilgjengelig fra /" "ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format msgid "Delete Wiki or Blog %(name)s" msgstr "Slette wiki eller blogg %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" "Denne handlingen vil fjerne alle poster, sider og kommentarer inkludert " "revisjonshistorien. Skal denne wiki eller bloggen slettes permanent?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Slette %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "Kanseller" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "Ingen wikis eller blogger tilgjengelig." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "Opprett en Wiki eller Blogg" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "Slette nettstedet %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "Gå til siden %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "Håndtere" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "Opprett" #: plinth/modules/ikiwiki/views.py:73 msgid "Wiki and Blog" msgstr "Wiki og Blogg" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "Vedlikehold Wiki og Blogg" #: plinth/modules/ikiwiki/views.py:132 msgid "Create Wiki or Blog" msgstr "Lage Wiki eller Blogg" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "Opprettet wiki {name}." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "Kunne ikke opprette wiki: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "Opprettet blogg {name}." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "Kunne ikke lage blogg: {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "Slettet {name}." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "Kunne ikke slette {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 msgid "Delete Wiki or Blog" msgstr "Slette wiki eller blogg" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "Sertifikater (Let's Encrypt)" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" "Et digitalt sertifikat lar brukere av en nettjeneste bekrefte identiteten " "til tjenesten, og til å kommunisere sikkert med den. %(box_name)s kan " "automatisk få, og sette opp digitale sertifikater for hvert tilgjengelige " "domene. Det gjøres ved å bekrefte eierskapet til et domene til " "sertifiseringsinstansen (CA): Let's Encrypt." #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" "Let's Encrypt er en gratis, automatisert, og åpen sertifiseringsinstans, til " "allmenn nytte, laget av Internet Security Research Group (ISRG). Vennligst " "les og aksepter Let's " "Encrypt Subscriber Agreement før tjenesten brukes." #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 msgid "Domain" msgstr "Domene" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "Sertifikatsstatus" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "Nettstedssikkerhet " #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 msgid "Actions" msgstr "Handlinger" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "Utløper %(expiry_date)s" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "Sertifikat mangler" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "Inndra" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "Gjeninnhente" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "Innhente" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "Sertifikat vellykket tilbakekalt for domenet {domain}" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "Klarte ikke å inndra sertifikatet for domenet {domain}: {error}" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "Sertifikat vellykket innhentet til domene {domain}" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "Klarte ikke å oppnå sertifikat til domene {domain}: {error}" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "Monkeysphere" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" "Med Monkeysphere kan en PGP-nøkkel genereres for hvert konfigurert domene " "som tjener (server) SSH. En offentlig PGP-nøkkel kan deretter lastes opp til " "PGP-nøkkeltjenerne. Brukere som kobler til denne maskinen via SSH kan få " "bekreftet at de kobler til riktig vert. For at brukerne skal stole på " "nøkkelen, må minst en person (vanligvis maskinens eier) signere nøkkelen med " "en vanlig PGP-nøkkel-godkjenningsprosess. Se Monkeysphere SSH documentation for flere detaljer." #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "Legge ut nøkkel til nøkkeltjenere" #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "GPG-fingeravtrykk" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "Ikke tilgjengelig" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "Generere PGP-nøkkel" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "Legge ut nøkkel" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "Generere PGP-nøkkel" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "Avbrutt nøkkelutlegging" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "Publisert nøkkel til nøkkeltjener" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "Feil oppstått under utlegging av nøkkel." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "Nettprat (Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "Mumble Voice Chat Server" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "Aktiver Mumble-bakgrunnstjeneste" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" "Mumble er en åpen kildekode, rask, kryptert, høy kvalitets programvare for " "nettprat." #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "Du kan koble til din Mumble-tjener på den vanlige Mumble-port 64738. Klienter for å koble til Mumble når skrivebordet " "og/eller Android-enheter er tilgjengelige." #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "Mumble-tjener kjører" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "Mumble-tjener kjører ikke" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Navnetjenester" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Bruker DNSSEC på IPv{kind}" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "Oppkoblingstype" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Oppkoblingsnavn" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Fysisk grensesnitt" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "Nettverksenheten som denne forbindelsen bør være bundet til." #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Brannmursone" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" "Brannmuren vil kontrollere hvilke tjenester som er tilgjengelig over dette " "grensesnitt. Velg Internal bare for klarerte nettverk." #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 adresseringsmetode" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" "«Shared»-metoden vil starte en DHCP-tjener, og «Automatic»-metoden vil hente " "konfigurasjon fra en DHCP-tjener." #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adresse" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Netmaske" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" "Valgfri verdi. Om det står tomt, vil en standard nettmaske, basert på " "adressen, bli brukt." #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Inngangsport" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Valgfri verdi." #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS-tjener" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Valgfri verdi. Hvis denne verdien er gitt, og IPv4 adresseringsmetoden er " "«Automatic», vil DNS-tjenere levert av en DHCP-tjener, bli ignorert." #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Andre DNS-tjener" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Valgfri verdi. Hvis denne verdien er gitt, og IPv4 adresseringsmetoden er " "«Automatic», vil DNS-servere som tilbys av en DHCP-tjener, bli ignorert." #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "-- velg --" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Det synlige navnet på nettverket." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Modus" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Autentiseringsmodus" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" "Velg WPA (Works Progress Administration) hvis det trådløse nettverket er " "sikret og krever at brukerne har passordet for å koble til." #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Passfrase" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Nettverksoppkoblinger" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Wi-Fi-nettverk i nærheten" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Legg til tilkobling" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "Nettverk" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "Kan ikke vise tilkobling: Tilkobling ikke funnet." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "Vis oppkoblingsinformasjon" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "Kan ikke redigere tilkobling: Tilkobling ikke funnet." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "Denne typen tilkobling er ennå ikke forstått." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Endre oppkobling" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Aktiverte tilkobling {name}." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Kunne ikke aktivere tilkobling: Tilkobling ikke funnet." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" "Klarte ikke aktivere tilkobling {name}: Ingen passende enhet er tilgjengelig." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Deaktivert forbindelse {name}." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Kunne ikke deaktivere tilkobling: Tilkobling ikke funnet." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Legge til nye Ethernet-tilkoblinger" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Legge til ny PPPoE-forbindelse" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Legge til ny Wi-Fi-forbindelse" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Forbindelse {name} slettet." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Kunne ikke slette tilkobling: Tilkobling ikke funnet." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Slett tilkobling" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "Rediger tilkobling" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "Rediger" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "Deaktivere" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "Aktiver" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "Slett tilkobling" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "Slett" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "Tilkobling" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "Primærtilkobling" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "Ja" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "Enhet" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "Tilstand" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "Grunn til tilstand" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "MAC-adresse" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "Grensesnitt" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "Beskrivelse" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "Fysisk link" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "Linkens tilstand" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "kabel er tilknyttet" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "vennligst sjekk kabelen" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "Hastighet" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "Signalstyrke" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "Kanal" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IPv4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "Metode" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "IP-adresse" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "DNS-tjener" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "Forvalg" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IPv6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "Denne forbindelsen er ikke aktiv." #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "Sikkerhet" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "Brannmursone" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" "Dette grensesnittet skal kobles til et lokalt nettverk/maskin. Hvis du " "kobler dette grensesnittet til et offentlig nettverk, vil tjenester som er " "ment å bare være tilgjengelig internt, bli tilgjengelig eksternt. Dette er " "en sikkerhetsrisiko." #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" "Dette grensesnittet skal motta din Internett-forbindelse. Hvis du kobler det " "til et lokalt nettverk/maskin, vil mange tjenester som er ment å være " "tilgjengelig internt ikke være tilgjengelige." #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Dette grensesnittet er ikke vedlikeholdt av %(box_name)s, og " "sikkerhetsstatusen er ikke kjent for %(box_name)s. Mange %(box_name)s-" "tjenester blir kanskje ikke tilgjengelige i dette grensesnittet. Det " "anbefales derfor at du deaktiverer/sletter denne forbindelsen, og " "rekonfigurerer." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "Lage..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "Lage forbindelse" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "Slette forbindelsen %(name)s permanent?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "Internett" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "Lage mellomrom" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "Eksternt" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "Ethernet" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "Wi-Fi" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "Vis forbindelse %(connection.name)s" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "Intern" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "Vis forbindelse %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "Datamaskin" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "Slett forbindelse %(name)s" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "Aktiv" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "Slått av" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "Virtual Private Network (OpenVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "OpenVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "Aktiver OpenVPN-tjener" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "Virtual Private Network (VPN) er en teknikk for sikker tilkobling av to " "maskiner for å få tilgang til ressurser i et privat nettverk. Mens du er " "borte hjemmefra, kan du koble til din %(box_name)s \n" "til ditt hjemmenettverk, og få tilgang til dine private/interne tjenester i " "%(box_name)s. \n" "Du kan også få tilgang til resten av Internettet via %(box_name)s for ekstra " "sikkerhet og anonymitet." #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "Profil" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "For å koble til %(box_name)s VPN må du laste ned en profil og legge den til " "en OpenVPN-klient på mobilen eller på en stasjonær maskin. OpenVPN-klienter " "er tilgjengelig for de fleste plattformer. Se documentation om anbefalte klienter, og instruksjoner om hvordan de " "settes opp." #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" "Profilen er spesifikk for hver enkelt bruker av %(box_name)s. Hold den " "hemmelig." #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "Last ned min profil" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" "OpenVPN er ennå ikke satt opp. Å utføre et sikkert oppsett tar svært lang " "tid. Avhengig av hvor fort din %(box_name)s er, kan det hende at det tar " "timer. Hvis oppsettingen blir avbrutt, kan du starte den igjen." #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "Start oppsett" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "OpenVPN-oppsett kjører" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" "For å få til et sikkert oppsett, tar denne prosessen svært lang tid. " "Avhengig av hvor raskt din %(box_name)s er, kan det hende at det tar timer. " "Hvis oppsettingen blir avbrutt, kan du starte den igjen." #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "OpenVPN-tjeneren kjører" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "OpenVPN-tjeneren kjører ikke" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "Oppsettet fullført." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "Oppsettet mislyktes." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "Aktiver ownCloud" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "Fildeling (ownCloud)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "ownCloud" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "ownCloud aktivert" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "ownCloud deaktivert" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" "ownCloud gir universell tilgang til dine filer via et webgrensesnitt eller " "WebDAV. Det gir også en plattform for enkelt å se og synkronisere kontakter, " "kalendere og bokmerker på tvers av alle enhetene dine, og gjør grunnleggende " "redigering rett på nettet. Installasjon har minimale tjener-krav, trenger " "ikke spesielle tillatelser og er rask. ownCloud utvides via en enkel, men " "kraftig API for programmer og plugins." #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" "Ved aktivering vil ownCloud-installasjonen være tilgjengelig fra /owncloud -stien på tjeneren. Gå til denne nettadressen for å " "sette den første administratorkontoen for ownCloud." #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "Bruke endringer" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "Offentlig synlighet (PageKite)" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "Aktiver PageKite" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "Tjenerdomene" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" "Velg din PageKite-tjener. Sett «pagekite.net» for å bruke den forvalgte " "pagekite.net-tjeneren." #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "Tjenerport" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "Port for din PageKitetjener (default: 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "«Kite»-navn" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "Eksempel: mybox.pagekite.me" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "Ugyldig «kite»-navn" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "«Kite»-hemmelig" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" "En hemmelighet knyttet til «Kite»-en eller den forvalgte hemmeligheten for " "din konto hvis ingen hemmelighet er satt for «Kite»-en." #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "«Kite»-detaljer satt" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "PageKite-tjener satt" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "PageKite aktivert" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "PageKite deaktivert" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "Tjeneste aktivert: {name}" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "Tjeneste deaktivert: {name}" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "protokoll" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "Ekstern (frontend) port" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "intern (FreedomBox) port" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "Tillat underdomener (Subdomains)" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "Deaktivert selvvalgt tjeneste" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" "Denne tjenesten er tilgjengelig som en standard tjeneste. Vennligst bruk " "\"Standard Services\"-siden for å aktivere den." #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "Tilføyd selvvalgt tjeneste" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "Denne tjenesten finnes allerede" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "PageKite-konto" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "Lagre innstillinger" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" "Warning:
Your PageKite frontend-tjener kan muligens ikke støtte " "alle protokoll/portkombinasjoner som du kan definere her. For eksempel, " "HTTPS på andre ting enn 443 er kjent for å forårsake problemer." #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "Lage en selvvalgt tjeneste" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "Legg til tjeneste" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "Eksisterende selvvalgte tjenester" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "Du har ikke noen selvvalgte tjenester aktivert" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "koblet til %(backend_host)s:%(backend_port)s" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "Slett denne tjenesten" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" "PageKite er et system som viser %(box_name)s tjenester når du ikke har en " "direkte tilkobling til Internett. Du trenger bare dette hvis %(box_name)s " "tjenester ikke nås fra resten av Internettet. Dette inkluderer følgende " "situasjoner:" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "%(box_name)s er bak en begrensende brannmur." #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" "%(box_name)s er koblet til en (trådløs) ruter som du ikke kontrollerer." #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" "Din Internett-leverandør gir deg ikke en ekstern IP-adresse, og gir i stedet " "en Internett-tilkobling gjennom NAT." #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" "Internett-leverandøren gir deg ikke en statisk IP-adresse, og IP-adressen " "endres her gang du kobler deg til Internettet." #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "Din Internett-leverandør begrenser innkommende tilkoblinger." #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" "PageKite arbeider forbi NAT, brannmurer og IP-adressebegrensninger ved å " "bruke en kombinasjon av tunneler og reverserte tillatelser. Du kan bruke " "alle Pagekite tjenesteleverandører, for eksempel pagekite.net. I fremtiden kan det bli mulig å bruke din kamerats " "%(box_name)s til dette." #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "Sett opp PageKite" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "Advarsel:
" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" "Åpne tjenester på Internett er tilgjengelige og kan angripes og skades." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:58 msgid "Save Services" msgstr "Lagre tjenester" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "Web-tjener (HTTP)" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" "Nettstedet vil være tilgjengelig på http://{0}" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "Web-tjener (HTTPS)" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" "Nettstedet vil bli tilgjengelig på https://{0}" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "Secure Shell (SSH)" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" "Se oppsettet for SSH-klienten instructions" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "PageKite" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "Om PageKite" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "Standardtjenester" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "Tilpassede tjenester" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "Strøm" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "Start om igjen, eller slå av systemet." #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "Omstart »" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "Slå av »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" "Er du sikker på at du ønsker en omstart? Du vil ikke få kontakt med dette " "webgrensesnittet i noen få minutter inntil systemet er startet opp igjen." #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "Omstart nå" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" "Er du sikker på at du ønsker å slå av? Du vil ikke få kontakt med dette " "webgrensesnittet etter at systemet er slått av." #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "Slå av nå" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "Mellomtjener for nettet (Privoxy)" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "Privoxy mellomtjener for nettet" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Tilgang {url} med mellomtjener {proxy} på tcp{kind}" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "Aktiver Privoxy" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" "Privoxy er en ikke-mellomlagringstjener med avanserte filtreringsmuligheter " "for å styrke personvernet, modifisere nettsidedata og HTTP-overskrifter, til " "å kontrollere tilgang, og fjerne annonser og annet ytterst ubehagelig, " "useriøst Internett-søppel." #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" "Du kan bruke Privoxy ved å endre din nettlesers proxy-innstillinger til din " "%(box_name)s vertsmaskin (eller IP adresse) med port 8118. Mens du bruker " "Privoxy, kan du se detaljene i konfigurasjonen og dokumentasjon på http://config.privoxy.org/ eller http://p.p ." #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "Privoxy kjører" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "Privoxy kjører ikke" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "IRC-klient (Quassel)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "Quassel IRC-klient" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "Aktiver Quassel kjernetjeneste" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" "Quassel er et IRC-applikasjon som er delt i to deler, en «kjerne» og en " "«klient». Dette tillater kjernen å være koblet til IRC-tjenere, og for å " "fortsette å motta meldinger, selv når klienten er frakoblet. %(box_name)s " "kan kjøre Quassel kjernetjeneste, og holder deg alltid på nettet, og en " "eller flere Quassel-klienter kan brukes fra et skrivebord, eller mobilt til " "å koble til og fra." #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" "Du kan koble til din Quassel-kjerne på den forhåndsvalgte Quassel port 4242. " "Klienter kan koble til Quassel fra din desktop og mobile enheter er tilgjengelig." #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "Quassel kjernetjeneste kjører" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "Quassel kjernetjeneste kjører ikke" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 msgid "SIP Server (repro)" msgstr "SIP Server (repro)" #: plinth/modules/repro/__init__.py:41 msgid "repro SIP Server" msgstr "repro SIP Server" #: plinth/modules/repro/forms.py:29 msgid "Enable repro service" msgstr "Aktiver repro service" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" "repro gir ulike SIP-tjenester som en SIP softphone kan bruke for å gi lyd- " "og videosamtaler, tilstedeværelse og direktemeldinger. repro gir en server " "og SIP-brukerkontoer som klientene kan bruke til å vise sin tilstedeværelse. " "Den fungerer også som en mellomtjener for å forene SIP-kommunikasjon til " "andre servere på Internett på samme måte som e-post." #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" "Til SIP-samtaler, trengs et klientprogram. Tilgjengelige klienter omfatter <" "a href=\"https://jitsi.org/\">Jitsi (for datamaskiner) og CSipSimple " "(for Android telefoner)." #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" "Note: Før du bruker repro, domener og brukere, må det " "konfigureres ved hjelp av web-based " "configuration panel. Brukere i admin gruppen kan logge seg inn " "i repros konfigureringspanel. Etter innstillingen av domenet, er det " "nødvendig å restarte repro-tjenesten. Deaktiver tjenesten og reaktiver den." #: plinth/modules/repro/templates/repro.html:63 msgid "repro service is running" msgstr "repro-tjenesten kjører" #: plinth/modules/repro/templates/repro.html:66 msgid "repro service is not running" msgstr "repro-tjenesten kjører ikke" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "Vertsløs lagring (reStore)" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "reStore" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "Aktivere reStore" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" "reStore er en tjener for vertsfrie " "nettprogrammer. Ideen er å frikoble nettprogrammer fra data. Uansett hvor " "en nettapplikasjon betjenes fra, kan dataene lagres på en vertsfri " "lagringsserver etter brukerens valg. Med reStore, blir %(box_name)s din " "vertsfrie lagringsserver. " #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" "Du kan lage og redigere kontoer i reStore web-" "interface." #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "E-postklient (Roundcube)" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "Aktiver Roundcube" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" "Roundcube e-posttjener er en nettbasert flerspråklig IMAP-klient med et " "programlignende brukergrensesnitt. Det gir den fulle funksjonaliteten du " "forventer fra en e-posttjener, medregnet MIME-støtte, adressebok, " "mappebehandling, søk etter meldinger og stavekontroll." #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" "Du får tilgang til Roundcube fra /roundcube. Gi " "brukernavn og passord til e-mailkontoen du ønsker å åpne, fulgt av " "domenenavnet til IMAP-tjeneren til din e-mailleverandør, som imap." "example.com. For IMAP over SSL (anbefalt), fyll feltet for tjeneren, " "som imaps://imap.example.com." #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" "For Gmail, vil brukernavnet være din Gmail-adresse, passordet være Google-" "kontoen din, og tjeneren vil være imaps://imap.gmail.com. " "Merk\n" "at du også må aktivere \"«Less secure apps» i dine Google konto-" "innstillinger (https://www.google.com/settings/security/lesssecureapps)." #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "Bokmerker (Shaarli)" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "Shaarli" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "Aktiver Shaarli" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "Shaarli tillater deg å lagre og dele bokmerker." #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" "Når aktivert, vil Shaarli være tilgjengelig fra stien /" "shaarli på nett-tjeneren. Merk at Shaarli kun støtter en enkelt " "brukerkonto, som du må sette opp ved det første besøket." #: plinth/modules/system/system.py:26 msgid "System" msgstr "System" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Systemoppsett" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "" "Her kan du administrere det underliggende systemet til ditt %(box_name)s." #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" "Mulighetene som berører %(box_name)s er oftet på generelt nivå, så vær " "forsiktig!" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "Anonymitetsnettverk (Tor)" #: plinth/modules/tor/__init__.py:53 msgid "Tor Anonymity Network" msgstr "Tor Anonymity Network" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "Tor Bridge Relay" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "Skjult Tor-tjeneste" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor relay port tilgjengelig" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3-transport registrert" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4-transport registrert" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Adgang til URL {url} på tcp{kind} via Tor" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bekreft Tor-bruk på {url} via tcp{kind}" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "Aktiver Tor" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "Aktiver skjulte Tor-tjenester" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" "En skjult tjeneste som vil tillate {box_name} å gi valgte tjenester (slike " "som ownCloud eller chat) uten å avsløre sin beliggenhet." #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "Last ned programpakker via Tor" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" "Når den er aktivert, vil programvaren lastes ned over Tor-nettverket for " "installasjoner og oppgraderinger. Dette legger til en viss grad privatliv og " "sikkerhet under nedlasting av programvare." #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" "Tor er et anonymt kommunikasjonssystem. Du kan lære mer om det fra nettsiden " "Tor Project. \n" "For best beskyttelse i nettsurfing, anbefaler Tor prosjektet at du bruker Tor " "Browser." #: plinth/modules/tor/templates/tor.html:54 msgid "Tor configuration is being updated" msgstr "Tor-konfigureringen blir oppdatert. " #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor kjører" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor kjører ikke" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Skjult tjeneste" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Port" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Bro" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" "Ditt %(box_name)s er satt opp som en Tor-bro med obfsproxy, så det kan bidra " "med å motvirke sensur. Hvis din %(box_name)s er bak en ruter eller " "brannvegg, må du forsikre deg om at de følgende portene er åpne, og at " "portene er videresendt, om nødvendig:" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Tjeneste" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" "En Tor SOCKS port er tilgjengelig på din %(box_name)s på TCP port 9050." #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor Control Panel (Kontrollpanel)" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Handlingsfeil: {0} [{1}] [{2}]" #: plinth/modules/tor/views.py:148 msgid "Configuration updated." msgstr "Konfigurering oppdatert." #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "En feil oppsto under konfigureringen." #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "Overføring BitTorrent" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "Aktiver bakgrunnsprosess for Transmission" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "Last ned katalog" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" "Katalog der nedlastinger lagres. Hvis du endrer standardkatalogen, må du " "sikre at den nye katalogen eksisterer og er skrivbar av «debian-" "transmission»-brukeren." #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "Brukernavn for å logge inn på nettgrensesnittet." #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" "Passord for å logge inn på nettgrensesnittet. Nåværende passord er vist i et " "kryptert format. Å sette et nytt passord, skriv inn passordet i klartekst." #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" "BitTorrent er en like-til-like fildelingsprotokoll. Transmission håndterer " "BitTorrent-fildeling i bakgrunnen. Merk at BitTorrent er ikke anonym." #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" "Tilgang til nettgrensesnittet fra /transmission." #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "Transmission kjører i bakgrunnen" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "Transmission kjører ikke i bakgrunnen." #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "Programvareoppgraderinger" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "Aktiver automatiske oppgraderinger" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" "Når den er aktivert, vil oppgraderingsprogrammet kjøres én gang per dag uten " "tilsyn. Det vil forsøke å utføre de pakkeoppgraderinger som er tilgjengelige." #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" "Upgrades installerer de nyeste programvare- og sikkerhetsoppdateringene. Når " "automatiske oppgraderinger er aktivert, blir de kjørt automatisk hver natt. " "Vanligvis trenger du ikke å starte oppdateringsprosessen." #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" "Avhengig av hvor mange pakker som skal installeres, kan fullføringen ta lang " "tid. Mens oppgraderingen pågår, kan du ikke installere andre pakker. Under " "oppgraderingen kan dette nettgrensesnittet være midlertidig utilgjengelig, " "og vise en feil. Oppdater siden for å fortsette." #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Oppgradere nå »" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "En pakkebehandler kjører." #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "Seneste logg fra upgrades (oppdateringer):" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Automatiske oppgraderinger" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Oppgrader pakker" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "Upgrade-prosessen har startet." #: plinth/modules/upgrades/views.py:99 msgid "Starting upgrade failed." msgstr "Å starte upgrade feilet." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Pakkeoppgraderinger" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "Feil ved oppsett av unattended-upgrades: {error}" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Automatiske oppgraderinger aktiv" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Automatiske oppgraderinger avslått" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Brukere og grupper" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Sjekk LDAP-oppføring «{search_item}»" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "admin" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "wiki" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "Grupper" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" "Velg hvilke tjenester som skal være tilgjengelige for den nye brukeren. " "Brukeren vil kunne logge seg på tjenester som støtter engangspålogging " "gjennom LDAP, hvis de er i den aktuelle gruppen.

Brukere i admin " "gruppen kan logge seg på alle tjenester. De kan også logge inn på systemet " "via SSH, og ha administrative rettigheter (sudo)." #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "Klarte ikke legge ny bruker til gruppe {group}." #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "SSH-nøkler" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" "Å sette en SSH offentlig nøkkel vil tillate denne brukeren å logge sikkert " "på systemet uten å bruke passord. Du kan legge inn multiple nøkler, én på " "hver linje. Blanke linjer og linjer som starter med # vil bli ignorert." #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "Klarte ikke bytte navn på LDAP-bruker." #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Klarte ikke slette bruker fra gruppe." #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Klarte ikke legge bruker til gruppe." #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Klarte ikke å bytte passord for LDAP-bruker." #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "Endre passord for %(username)s" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "Lagre passord" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "Opprett bruker" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Slett bruker" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "Slette bruker %(username)s permanent?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "Slette %(username)s" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "Slette bruker %(username)s" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "Endre bruker %(username)s" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the
change password form to " "change the password." msgstr "" "Bruke change password form for å " "endre passordet." #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "Lagre endringer" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "Brukere" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "Bruker %(username)s opprettet." #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "Bruker %(username)s oppdatert." #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "Rediger bruker" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Bruker {user} slettet." #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "Klarte ikke slette LDAP-bruker." #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Endre passord" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Vellykket passordbytte." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "Lynmeldingstjener (XMPP)" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "Aktiver XMPP" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" "XMPP er en åpen og standardisert kommunikasjonsprotokoll. Her kan du kjøre " "og konfigurere din XMPP-tjener, kalt ejabberd." #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" "For faktisk å kommunisere, kan du bruke webklient " "eller hvilken som helst annen XMPP client." #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" "Ditt XMPP tjenerdomene er satt til %(domainname)s. Bruker-ID-ene vil " "se slik ut: username@%(domainname)s. Du kan sette opp ditt domene på " "systemsiden Configure ." #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "Sette i gang en web-klient" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "ejabberd kjører" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "ejabberd kjører ikke" #: plinth/network.py:39 msgid "PPPoE" msgstr "PPPoE" #: plinth/package.py:156 msgid "packages not found" msgstr "finner ikke pakker" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "Vellykket installasjon og konfigurering av pakker." #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "Pakkeinstallasjonsfeil: {string} {details}" #: plinth/service.py:73 msgid "Web Server" msgstr "Nettjener" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "Webtjener over SSL" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "Secure Shell (SSH) tjener" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Web Interface (Plinth)" #: plinth/templates/404.html:25 msgid "404" msgstr "404" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "Forespurt side %(request_path)s ble ikke funnet." #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" "Hvis du mener at denne manglende side skulle med, vennligst send feilen til " "Plinth projectet " "issue tracker ." #: plinth/templates/500.html:25 msgid "500" msgstr "500" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" "Dette er en indre feil og ikke noe du har forårsaket eller kan ordne. " "Vennligst rapporter feilen på bug tracker så det kan bli ordnet." #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "Plinth administrativt brukergrensesnitt for %(box_name)s" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Toggle navigasjon" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Endre passord" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Logg ut" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Logg inn" #: plinth/templates/login.html:35 msgid "Login" msgstr "Login" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "Installasjon" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" "Denne funksjonen krever ekstra pakker installert. Ønsker du å installere dem?" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "Pakke" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "Sammendrag" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "Installer" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "Installere %(package_names)s: %(status)s" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% fullført" #~ msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." #~ msgstr "" #~ "Å eksponere SSH med standardpassordet for «fbx»er en VELDIG DÅRLIG idé." Plinth-0.8.1/plinth/locale/nl/000077500000000000000000000000001266051671100161315ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/nl/LC_MESSAGES/000077500000000000000000000000001266051671100177165ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/nl/LC_MESSAGES/django.po000066400000000000000000003661011266051671100215270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2015-12-20 09:35+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.5-dev\n" "X-Language: nl_NL\n" "X-Source-Language: C\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "Luistert op {kind} poort {listen_address}:{port}" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "Luistert op {kind} poort {port}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "Gebruik URL {url} op tcp{kind}" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "ToegangsURL {url}" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "Verbind met {host}:{port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "Kan niet verbinden met {host}:{port}" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FreedomBox" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Apps" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Programma's" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "Diensten en Programma's" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" "Men kan diverse diensten en programma's installeren en gebruiken op de " "%(box_name)s. Klik op een van de programmanamen in het linkermenu om een " "omschrijving van het programma te krijgen, en daar kan dan gekozen worden om " "het te installeren." #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "Deze box kan je online fotoalbum zijn, je sociale netwerksite, je " "nieuwssite, en nog veel meer. Veel van de diensten die je nu nog van anderen " "afneemt kunnen nu thuis beheerd worden, en onder eigen controle staan!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "Service Discovery" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "Service Discovery Inschakelen" #: plinth/modules/avahi/templates/avahi.html:29 #, fuzzy, python-format #| msgid "" #| "Service discovery allows other machines on the network to discover your " #| "FreedomBox and services running on it. It also allows FreedomBox to " #| "discover other machines and services running on your local network. " #| "Service discovery is not essential and works only on internal networks. " #| "It may be disabled to improve security especially when connecting to a " #| "hostile local network." msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "Service discovery maakt het mogelijk dat andere machines op het netwerk " "deze FreedomBox en de diensten erop herkennen. Het maakt het ook mogelijk " "om andere machines en diensten op dit netwerk te vinden. Service discovery " "is optioneel en werkt alleen in het lokale netwerk. Het kan uitgeschakeld " "worden om de veiligheid te verhogen, zeker in een onbekend en mogelijk " "vijandig lokaal netwerk." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "Status" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "Service Discovery draait" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "Service Discovery draait niet" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "Configuratie" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "Instelling bijwerken" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Configuratie bijgewerkt" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Instelling onveranderd" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Foutieve domeinnaam" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Hostnaam" #: plinth/modules/config/config.py:97 #, fuzzy, python-brace-format #| msgid "" #| "Hostname is the local name by which other machines on the local network " #| "reach your machine. It must start and end with an alphabet or a digit " #| "and have as interior characters only alphabets, digits and hyphens. " #| "Total length must be 63 characters or less." msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "De hostnaam is de lokale naam waarmee ander machines in het LAN deze machine " "kunnen bereiken. De hostnaam moet beginnen en eindigen met een letter of " "cijfer, er tussenin mogen ook koppeltekens. De totale lengte mag niet langer " "zijn dan 63 tekens." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Foutieve hostnaam" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Domeinnaam" #: plinth/modules/config/config.py:110 #, fuzzy, python-brace-format #| msgid "" #| "Domain name is the global name by which other machines on the Internet " #| "can reach you. It must consist of labels separated by dots. Each label " #| "must start and end with an alphabet or a digit and have as interior " #| "characters only alphabets, digits and hyphens. Length of each label must " #| "be 63 characters or less. Total length of domain name must be 253 " #| "characters or less." msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "Een domeinnaam is de globaal bereikbare naam waarmee andere computers op het " "internet deze machine kan bereiken. Het moet bestaan uit namen, gescheiden " "door punten. Iedere naam moet beginnen en eindigen met een letter of " "cijfer, er tussenin mogen ook koppeltekens. De totale lengte per naam mag " "niet langer zijn dan 63 tekens. De totale domeinnaamlengte mag niet langer " "zijn dan 253 tekens." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "Taal" #: plinth/modules/config/config.py:127 #, fuzzy #| msgid "Language for this FreedomBox web administration interface" msgid "Language for this web administration interface" msgstr "Taalkeuze voor deze FreedomBox web administratie" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Configureer" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "Algemene Instellingen" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "Hostnaam instellen mislukt: {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "Hostnaam ingesteld" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "Domeinnaam instellen mislukt: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "Domeinnaam ingesteld" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "Taal instellen mislukt: {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "Taal aangepast" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "Invoeren" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "Datum en Tijd" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "Netwerktijdsserver" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "NTP cliënt in contact met servers" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "Netwerktijd Inschakelen" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "Tijdzone" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" "Stel tijdzone in om precieze tijd te gebruiken. Dit stelt de systeemklok in." #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- geen tijdzone ingesteld --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" "Netwerk Tijd Server is een programma dat de systeemtijd synchroniseert met " "servers op internet." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "Netwerktijdsserver draait" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "Netwerktijdsserver draait niet" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "Fout bij tijdzone instellen: {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "Tijdzone ingesteld" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "BitTorrent (Deluge)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "Deluge BitTorrent" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "Deluge Inschakelen" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "BitTorrent Web Cliënt (Deluge)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "Deluge is een BitTorrent Cliënt met web-bediening." #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" "Indien ingeschakeld, is de Deluge web-client beschikbaar via het /deluge pad op de webserver. Het standaardwachtwoord is " "'deluge', maar dit moet zo snel mogelijk na activering gewijzigd worden." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "deluge-web draait" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "deluge-web draait niet" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "Diagnose" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "Systeemdiagnose" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "Diagnostische test" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" "De systeemdiagnose zal een aantal tests uitvoeren op dit systeem om te " "bevestigen dat de programma's en diensten zoals verwacht functioneren." #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "Voer Diagnostische test uit" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "Diagnosetests worden doorlopen" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "Resultaten" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "Module: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "Resultaten Diagnostische test" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "Module: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "Deze module heeft geen diagnosetests" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "Test" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "Resultaat" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Over" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dynamic DNS" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "De Variabelen <User>, <Pass>, <Ip>, <Domain> kunnen " "worden gebruikt in de URL. Zie voor details de update URL voorbeelden van de " "voorbeeld providers." #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" "Kies een updateprotocol zoals de provider dat aanbiedt. Als de provider geen " "GnudIP protocol gebruikt of de provider staat niet in de lijst, gebruik dan " "de update URL van de provider." #: plinth/modules/dynamicdns/dynamicdns.py:80 #, fuzzy #| msgid "" #| "Please do not enter a URL here (like \"https://example.com/\") but only " #| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Voer hier geen complete URL in (zoals \"https://example.com/\") maar alleen " "de hostnaam van de GnuDIP server (zoals \"example.com\")." #: plinth/modules/dynamicdns/dynamicdns.py:84 #, fuzzy, python-brace-format #| msgid "The public domain name you want use to reach your box." msgid "The public domain name you want use to reach your {box_name}." msgstr "De publieke domeinnaam die gebruikt wordt om deze box aan te spreken." #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Gebruik deze functie indien de provider gebruik maakt van self-signed " "certificaten." #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" "Als deze optie is geselecteerd wordt de gebruikersnaam en wachtwoord " "gebruikt voor HTTP basic authentificatie." #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "Laat dit veld leeg om het vooraf ingestelde wachtwoord te behouden." #: plinth/modules/dynamicdns/dynamicdns.py:96 #, fuzzy, python-brace-format #| msgid "" #| "Optional Value. If your FreedomBox is not connected directly to the " #| "Internet (i.e. connected to a NAT router) this URL is used to figure out " #| "the real Internet IP. The URL should simply return the IP wherethe client " #| "comes from. Example: http://myip.datasystems24.de" msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" "Optionele waarde. Als de FreedomBox niet direct is verbonden met het " "internet (maar verbonden met een NAT router), wordt deze URL gebruikt om het " "echte Internet IP adres te vinden. Het antwoord op het aanroepen van deze " "URL zou het IP adres moeten zijn. Voorbeeld: http://myip.datasystems24.de" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" "Er zou een keuze voor de gebruikersnaam moeten zijn geweest tijdens het " "aanmaken van de account." #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Dynamic DNS Inschakelen" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Dienst type" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnudIP Serveradres" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Foute servernaam" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "URL bijwerken" #: plinth/modules/dynamicdns/dynamicdns.py:135 #, fuzzy #| msgid "accept all SSL certificates" msgid "Accept all SSL certificates" msgstr "accepteer alle SSL certificaten" #: plinth/modules/dynamicdns/dynamicdns.py:139 #, fuzzy #| msgid "use HTTP basic authentication" msgid "Use HTTP basic authentication" msgstr "gebruik HTTP basic authentificatie" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Gebruikersnaam" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Wachtwoord" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "Toon wachtwoord" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP test URL" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Voer een update URL of GnuDIP Server in" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Voer een GnuDIP gebruikersnaam in" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Voer een GnuDIP domein in" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Voer een wachtwoord in" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Instellen Dynamic DNS" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Status van Dynamic DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 #, fuzzy #| msgid "DynamicDNS client" msgid "Dynamic DNS Client" msgstr "DynamicDNS cliënt" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, fuzzy, python-format #| msgid "" #| "If your internet provider changes your IP address periodic (i.e. every " #| "24h) it may be hard for others to find you in the WEB. And for this " #| "reason nobody may find the services which are provided by FreedomBox " #| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Als de internetprovider het adres regelmatig wisselt, (bijvoorbeeld iedere " "24 uur) kan het voor anderen moeilijk zijn om deze machine te vinden vanaf " "internet. Daardoor is het gebruik van de diensten van deze machine (zoals " "ownCloud) vaak onmogelijk." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 #, fuzzy #| msgid "" #| "The solution is to assign a DNS name to your IP address and update the " #| "DNS name every time your IP is changed by your Internet provider. Dynamic " #| "DNS allows you to push your current public IP address to an gnudip " #| "server. Afterwards the Server will assign your DNS name with the new IP " #| "and if someone from the internet asks for your DNS name he will get your " #| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" "De oplossing is om een DNS naam aan het publieke adres toe te wijzen en de " "DNS server iedere keer bij te werken als het IP adres is gewijzigd door de " "provider. Dynamic DNS maakt het mogelijk om het huidige publieke IP adres " "door te geven aan een gnudip server. Daarna zal deze server de DNS " "naamswijziging doorvoeren, en wordt iedere DNS request beantwoord met het " "juiste IP adres." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" "Wie op zoek is naar een gratis dynamic DNS account, kan misschien een gratis " "GnuDIP service vinden bij gnudip.datasystems24.net of gratis free update URL " "gebaseerde diensten van freedns.afraid.org." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, fuzzy, python-format #| msgid "" #| "If your freedombox is connected behind some NAT router, don't forget to " #| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " #| "your freedombox device." msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Als deze FreedomBox is verbonden door middel van een vorm van NAT-routing, " "vergeet dan niet om port-forwarding te gebruiken om standaardpoorten " "(bijvoorbeeld 80 en 443) naar de FreedomBox te leiden." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" "Javascript schijnt uitgeschakeld te zijn, Dynamische formulieren en sommige " "helpfuncties werken niet, maar de basisfunctionaliteit zou moeten werken." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "NAT type" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" "NAT type niet gedetecteerd, als er geen \"IP check URL\" wordt ingesteld is " "het niet mogelijk om het type te herkennen." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 #, fuzzy #| msgid "Direct connection to the internet." msgid "Direct connection to the Internet." msgstr "Directe verbinding met internet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, fuzzy, python-format #| msgid "" #| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " #| "URL\" for changes (we need the \"IP check URL\" for this reason - " #| "otherwise we will not detect IP changes). It may take up to %(timer)s " #| "minutes until we update your DNS entry in case of WAN IP change." msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" "Achter NAT, dit betekent dat de dynamic DNS dienst regelmatig het IP adres " "controleert op wijzigingen (hiervoor is de \"IP check URL\" nodig, anders " "kunnen veranderingen niet worden ontdekt). Het kan tot %(timer)s minuten " "duren tot de DNS wordt bijgewerkt in het geval van een IP wijziging door de " "provider." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "Laatste bijwerking" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "Firewall" #: plinth/modules/firewall/templates/firewall.html:28 #, fuzzy, python-format #| msgid "" #| "Firewall is a network security system that controls the incoming and " #| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " #| "and properly configured reduces risk of security threat from the Internet." msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" "Een Firewall is een netwerk-beveiligingssysteem dat de inkomende en " "uitgaande gegevens van %(box_name)s stuurt. Een goed geïnstalleerde en " "geactiveerde firewall vermindert het risico van internet besmetting." #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" "Firewall daemon draait niet.De firewall staat standaard aan op %(box_name)s. " "Op ieder Debian gebaseerd systeem (zoals %(box_name)s) kan het gestart " "worden door middel van het commando 'service firewalld start' of in het " "geval van een systeem met systemd 'systemctl start firewalld'." #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "Dienst/Poort" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Ingeschakeld" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Uitgeschakeld" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "Toegestaan" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "Toegestaan (alleen intern)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "Toegestaan (alleen extern)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "Geblokkeerd" #: plinth/modules/firewall/templates/firewall.html:103 #, fuzzy #| msgid "" #| "The operation of the firewall is automatic. When you enable a service it " #| "is automatically permitted in the firewall and you disable a service is " #| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" "De firewall wordt automatisch ingesteld. Als een dienst wordt ingeschakeld " "wordt deze automatisch toegevoegd aan de firewall, en als een dienst wordt " "uitgeschakeld, gebeurt dit ook in de firewall." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "LDAP gebruiker aanmaken mislukt." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "Toevoegen van gebruiker aan admin groep mislukt." #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "Gebruikersaccount aangemaakt, U bent nu ingelogd" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "Hulp" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 #, fuzzy #| msgid "Start setup" msgid "Start Setup" msgstr "Setup starten" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Beheerdersaccount" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" "Kies een gebruikersnaam en wachtwoord om deze website te bereiken. Het " "wachtwoord kan later worden veranderd. Deze gebruiker krijgt administratieve " "rechten. Andere gebruikers kunnen later worden toegevoegd." #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Zet 'm op!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "Instelling voltooid!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, fuzzy, python-format #| msgid "" #| "To make your FreedomBox functional, you need some applications. " #| "Applications will be installed the first time you access them." msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" "Om deze FreedomBox functioneel te maken, zijn een aantal programma's " "vereist. Programma's worden bij activering eerst geïnstalleerd." #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "Ga naar Apps" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 #, fuzzy #| msgid "Network Configuration" msgid "Current Network Configuration" msgstr "Netwerkconfiguratie" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 #, fuzzy #| msgid "" #| "FreedomBox setup is now complete. However, you should check the network " #| "setup and modify it if necessary. Do not forget to change the default Wi-" #| "Fi passwords." msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" "De FreedomBox installatie is nu voltooid. Het is aan te raden de " "netwerkinstellingen te controleren, en zo nodig aan te passen. Vergeet niet " "de standaard WiFi wachtwoorden te veranderen." #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Ga naar Netwerken" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Instelling voltooid" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "Documentatie" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "Hulp Verkrijgen" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "Documentatie en veelgestelde vragen" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "Over {box_name}" #: plinth/modules/help/help.py:73 #, fuzzy, python-brace-format #| msgid "About {box_name}" msgid "{box_name} Manual" msgstr "Over {box_name}" #: plinth/modules/help/templates/help_about.html:30 #, fuzzy, python-format #| msgid "" #| "FreedomBox is a community project to develop, design and promote personal " #| "servers running free software for private, personal communications. It " #| "is a networking appliance designed to allow interfacing with the rest of " #| "the Internet under conditions of protected privacy and data security. It " #| "hosts applications such as blog, wiki, website, social network, email, " #| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " #| "so that your data stays with you." msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" "FreedomBox is een communityproject om persoonlijke servers met uitsluitend " "vrije software te ontwikkelen, ontwerpen en promoten. Het is een netwerk-" "apparaat dat is ontworpen om toegang tot de rest van internet mogelijk te " "maken met bescherming van privacy en data-beveiliging. Het biedt diensten " "als een blog, wiki,website,sociaal netwerk, email, web-proxy en een Tor " "relay op een apparaat dat je (WiFi) router kan vervangen of aanvullen, zodat " "jouw data bij jou blijft." #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" "We leven in een wereld waar ons gebruik van het netwerk wordt geleid door " "anderen die niet altijd onze doelen voorop stellen. Door software te bouwen " "die niet steunt op centrale diensten kunnen we controle en privacy " "terugwinnen. Door onze data in ons eigen huis te houden, kunnen we " "belangrijke rechten erover behouden. Door controle over hun eigen machines " "en netwerk aan de gebruikers terug te geven, wordt Internet terug geleid " "naar de decentrale / peer-to-peer architectuur zoals die oorspronkelijk is " "ontworpen en bedoeld." #: plinth/modules/help/templates/help_about.html:56 #, fuzzy, python-format #| msgid "" #| "There are a number of projects working to realize a future of distributed " #| "services; FreedomBox aims to bring them all together in a convenient " #| "package." msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" "Er zijn een aantal projecten die een toekomst vol gedecentraliseerde " "diensten; FreedomBox probeert deze allemaal te verpakken in een enkel pakket." #: plinth/modules/help/templates/help_about.html:64 #, fuzzy, python-format #| msgid "" #| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "Zie voor meer informatie over het FreedomBox project de FreedomBox Wiki." #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Leer meer »" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Dit is Plinth versie %(version)s." #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, fuzzy, python-format #| msgid "" #| "The FreedomBox Manual is the best place to " #| "start for information regarding %(box_name)s." msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "Het FreedomBox Handboek (Engelstalig) is de " "beste manier om meer te weten te komen meer informatie over %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 #, fuzzy, python-format #| msgid "" #| " " #| "FreedomBox project wiki contains further information." msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" "Zie " "FreedomBox project wiki voor meer informatie." #: plinth/modules/help/templates/help_index.html:43 #, fuzzy, python-format #| msgid "" #| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " #| "problems faced by other users and possible solutions." msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" "Om meer informatie te krijgen vanuit de FreedomBox community, kunnen vragen " "worden gesteld op de mailing lijst (Engelstalig). De " "archieven van deze lijst bevatten ook veel informatie over problemen die " "andere mensen hebben gehad, en mogelijke oplossingen." #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 #, fuzzy #| msgid "Wiki & Blog (Ikiwiki)" msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki & Blog (Ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 #, fuzzy #| msgid "Ikiwiki wikis and blogs" msgid "ikiwiki wikis and blogs" msgstr "Ikiwiki wiki's en blogs" #: plinth/modules/ikiwiki/forms.py:29 #, fuzzy #| msgid "Enable Ikiwiki" msgid "Enable ikiwiki" msgstr "Ikiwiki Inschakelen" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "Type" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "Naam" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "Beheerdersaccount naam" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "Beheerdersaccount wachtwooord" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" "Indien ingeschakeld, zijn blogs en wiki's beschikbaar via /ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, fuzzy, python-format #| msgid "Delete Wiki/Blog %(name)s" msgid "Delete Wiki or Blog %(name)s" msgstr "Verwijder Wiki/Blog %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 #, fuzzy #| msgid "" #| "This action will remove all the posts, pages and comments including " #| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" "Deze actie zal alle bijdragen, pagina's, en commentaar inclusief revisie-" "historie. Deze wiki/blog permanent verwijderen?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "%(name)s verwijderen" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "Annuleer" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "Geen wiki's of blogs beschikbaar." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "Maak een Wiki of Blog" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "Verwijder site %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "Ga naar site %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "Instellen" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "Maak" #: plinth/modules/ikiwiki/views.py:73 #, fuzzy #| msgid "Wiki & Blog" msgid "Wiki and Blog" msgstr "Wiki & Blog" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "Stel Wiki's en Blog's in" #: plinth/modules/ikiwiki/views.py:132 #, fuzzy #| msgid "Create a Wiki or Blog" msgid "Create Wiki or Blog" msgstr "Maak een Wiki of Blog" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "Wiki {name} gemaakt." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "Kan wiki niet aanmaken: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "Blog {name} gemaakt." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "Kan blog niet aanmaken: {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "{name} verwijderd." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "Verwijderen van {name} mislukt: {error}" #: plinth/modules/ikiwiki/views.py:182 #, fuzzy #| msgid "Delete Wiki/Blog" msgid "Delete Wiki or Blog" msgstr "Verwijder Wiki/Blog" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 #, fuzzy #| msgid "Domain Name" msgid "Domain" msgstr "Domeinnaam" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 #, fuzzy #| msgid "Security" msgid "Website Security" msgstr "Security" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 #, fuzzy #| msgid "Applications" msgid "Actions" msgstr "Programma's" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "Niet Beschikbaar" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "Voice Chat (Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "Mumble Voice Chat Server" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "Mumble daemon Inschakelen" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" "Mumble is een Open Source, snelle, versleutelde, hoge kwaliteit " "groepsgespreksserver." #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "De Mumble server is beschikbaar via de standaard Mumble poort 64738. Zie Clients (Engelstalig) voor informatie over " "programma's waarmee de Mumble dienst gebruikt kan worden. Er zijn " "programma's voor zowel desktop en Android machines." #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "Mumble server draait" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "Mumble server draait niet" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Domeinnamen" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Gebruikt DNSSEC op IPv{kind}" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "Verbindingssoort" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Verbindingsnaam" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Fysieke Interface" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "De netwerkapparatuur waar deze verbinding mee moet worden verbonden." #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Firewall Zone" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" "De firewall zone controleert welke machines beschikbaar zijn via deze " "verbinding. Selecteer \"Allen Intern\" voor vertrouwde netwerken." #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 Adresseringsmethode" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" "De 'Shared' methode zal een DHCP-server inschakelen en bij de \"Automatic\" " "methode komt de configuratie van een DHCP-server." #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adres" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Netmask" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" "Optionele waarde. Indien leeg, zal een standaard netmask op basis van het " "adres worden gebruikt." #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Gateway" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Optionele waarde." #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS Server" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Optionele waarde. Als hier iets wordt ingevuld en de IPv4-" "adresseringsmethode is \"Automatisch\", zullen de DNS-Servers van de DHCP-" "server worden genegeerd." #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Tweede DNS Server" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Optionele waarde. Als hier iets wordt ingevuld en de IPv4-adressering " "methode is \"Automatisch\", zullen de DNS-Servers van de DHCP-server worden " "genegeerd." #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "-- selecteer --" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "De zichtbare netwerknaam." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Modus" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Authentificatiemodus" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" "Selecteer WPA indien het netwerk beveiligd is en gebruikerswachtwoorden " "gebruikt om te verbinden." #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Wachtwoordzin" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Netwerkverbindingen" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Wi-Fi Netwerken dichtbij" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Verbinding toevoegen" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "Netwerken" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "Kan verbinding niet weergeven: Verbinding niet gevonden." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "Laat verbindingsinformatie zien" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "Kan verbinding niet wijzigen: Verbinding niet gevonden." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "Deze verbindingsmethode is (nog) niet bekend." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Wijzig verbinding" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Geactiveerde verbinding {name}." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Kan verbinding niet inschakelen: Verbinding niet gevonden." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "Kan verbinding {name} niet inschakelen: Verbinding niet gevonden." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Verbinding {name} uitgeschakeld." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Kan verbinding niet uitschakelen: Verbinding niet gevonden." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Toevoegen nieuwe Ethernetverbinding" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Toevoegen nieuwe PPPoE verbinding" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Toevoegen nieuwe W-Fi verbinding" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Verbinding {name} verwijderd." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Kan verbinding niet verwijderen: Verbinding niet gevonden." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Verwijder verbinding" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "Wijzig verbinding" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "Wijzig" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "Deactiveer" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "Activeer" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "Verwijder verbinding" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "Verwijder" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "Verbinding" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "Primaire Verbinding" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "ja" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "Apparaat" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "Status" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "Reden van status" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "MAC adres" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "Interface" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "Omschrijving" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "Fysieke Verbinding" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "Verbindingsstatus" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "kabel is verbonden" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "controleer kabel" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "Snelheid" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "Signaalsterkte" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "Kanaal" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IPv4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "Methode" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "IP adres" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "DNS server" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "Standaard" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IPv6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "Deze verbinding is niet actief." #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "Security" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "Firewall zone" #: plinth/modules/networks/templates/connection_show.html:280 #, fuzzy #| msgid "" #| "This interface should be connected to local network/machine. If you " #| "connect this interface to a public network, services meant to be " #| "available only internally will become available externally. This is a " #| "security risk." msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" "Deze verbinding zou met een lokaal netwerk/machine verbonden moeten zijn. " "Als deze verbonden wordt met een publiek netwerk, worden diensten die " "bedoeld zijn om intern beschikbaar te zijn van buitenaf bereikbaar. Dat is " "een veiligheidsrisico." #: plinth/modules/networks/templates/connection_show.html:300 #, fuzzy #| msgid "" #| "This interface should receive your Internet connection. If you connect it " #| "your a local network/machine, many services meant to available only " #| "internally will not be available." msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" "Deze verbinding hoort de internetverbinding te ontvangen. Als het verbonden " "wordt met een lokaal netwerk/machine, zijn veel diensten die alleen lokaal " "beschikbaar zijn niet bereikbaar." #: plinth/modules/networks/templates/connection_show.html:319 #, fuzzy, python-format #| msgid "" #| "This interface is not maintained by FreedomBox. Its security status is " #| "unknown to FreedomBox. Many FreedomBox services may not be available on " #| "this interface. It is recommended that you deactivate/delete this " #| "connection and re-configure it." msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Deze verbinding wordt niet door FreedomBox beheerd. De veiligheid ervan is " "onbekend. Veel FreedomBox diensten zullen niet beschikbaar zijn via deze " "verbinding. Het wordt aanbevolen om deze verbinding te deactiveren/" "verwijderen en opnieuw in te stellen." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "Maak..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "Maak Verbinding" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "Verbinding %(name)s permanent verwijderen?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "Internet" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "Verbinding" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "Extern" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "Ethernet" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "Wi-Fi" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "Toon verbinding %(connection.name)s" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "Intern" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "Tonen verbinding %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "Computer" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "Verwijder verbinding %(name)s" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "Aktief" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "Inactief" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "Virtual Private Network (OpenVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "OpenVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "OpenVPN server Inschakelen" #: plinth/modules/openvpn/templates/openvpn.html:38 #, fuzzy, python-format #| msgid "" #| "Virtual Private Network (VPN) is a technique for securely connecting two " #| "machines in order to access resources of a private network. While you " #| "are away from home, you can connect to your %(box_name)s in order to join " #| "your home network and access private/internal services provided by " #| "%(box_name)s. You can also access the rest of the Internet via " #| "%(box_name)s for added security and anonymity." msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "Virtual Private Network (VPN) is een techniek om een beveiligde verbinding " "op te zetten tussen twee machines, om zo gebruik te maken van diensten die " "beschikbaar zijn op een privénetwerk. Terwijl je niet thuis bent, kun je " "verbinden met %(box_name)s om zo in te loggen op je thuisnetwerk, en gebruik " "te maken van de interne/privédiensten die je %(box_name)s aanbiedt. Het is " "ook mogelijk om de rest van het internetgebruik via deze machine te leiden, " "voor meer veiligheid en anonimiteit." #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "Profiel" #: plinth/modules/openvpn/templates/openvpn.html:54 #, fuzzy, python-format #| msgid "" #| "To connect to %(box_name)s's VPN, you need to download a profile and feed " #| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " #| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " #| "configure them." msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "Om te verbinden met de VPN van %(box_name)s moet een profiel worden " "gedownload, en ingesteld worden in een OpenVPN cliënt op de mobiele of " "desktop computer. Zie deze (Engelstalige) documentatie met aanbevolen cliënts en gebruiksinstructies." #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" "Profielen zijn voor iedere gebruiker van %(box_name)s anders. Houd ze geheim." #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "Download mijn profiel" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" "OpenVPN is nog niet ingesteld. Een veilige installatie vergt veel tijd. " "Afhankelijk van de snelheid van %(box_name)s kan dit zelfs uren duren. Als " "de installatie wordt onderbroken, kan deze opnieuw gestart worden." #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "Setup starten" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "OpenVPN setup draait" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" "Een veilige installatie vergt veel tijd. Afhankelijk van de snelheid van " "%(box_name)s kan dit soms uren duren. Als de installatie wordt onderbroken, " "kan deze weer opnieuw gestart worden." #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "OpenVPN server draait" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "OpenVPN server draait niet" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "Instelling voltooid." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "Instelling mislukt." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "ownCloud Inschakelen" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "Bestandsdeling (ownCloud)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "ownCloud" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "ownCloud ingeschakeld" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "ownCloud uitgeschakeld" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" "ownCloud biedt universele toegang tot bestanden door middel van een web-" "interface of WebDAV. Het biedt ook een platform om contacten, kalender en " "bookmarks te synchroniseren op al je apparatuur, en maakt wijziging ervan " "via het web mogelijk. De installatie heeft minimale vereisten aan de " "computer, heeft geen speciale toestemmingen nodig, en is snel. ownCloud is " "uit te breiden met een eenvoudige maar krachtige API voor programma's en " "plugins." #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" "Indien ingeschakeld, is ownCloud beschikbaar via de /" "owncloud link. Bezoek deze link om het administratie account voor " "ownCloud in te stellen." #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "Verwerk wijzigingen" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "Publieke zichtbaarheid (PageKite)" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "PageKite Inschakelen" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "Serverdomein" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" "Selecteer een pagekite server. Gebruik \"pagekite.net\" om de standaard " "pagekite.net server te gebruiken." #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "Serverpoort" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "Poort voor de pagekite server (default: 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "Kitenaam" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "Voorbeeld: mybox.pagekite.me" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "Foute kite-naam" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "Kite-geheim" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" "Het wachtwoord dat met deze kite is verbonden, en het standaard wachtwoord " "voor deze account als deze kite geen eigen wachtwoord heeft." #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "Kite details ingesteld" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "PageKite server ingeschakeld" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "PageKite ingeschakeld" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "PageKite uitgeschakeld" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "Dienst ingeschakeld: {name}" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "Dienst uitgeschakeld: {name}" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "protocol" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "externe (frontend) poort" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "interne (freedombox) poort" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "Subdomeinen Inschakelen" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "Verwijderde aangepaste dienst" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" "Deze dienst is beschikbaar als een standaarddienst. Gebruik de \"Standaard " "Diensten\" pagina." #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "Aangepaste dienst toevoegen" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "Deze dienst bestaat al" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "PageKite Account" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "Instellingen opslaan" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" "Waarschuwing:
Deze PageKite frontend server zal niet alle protocol/" "poortcombinaties die hier gedefinieerd kunnen worden ondersteunen. Het is " "bijvoorbeeld bekend dat HTTPS servers die niet op poort 443 worden ingesteld " "problemen opleveren." #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "Maak een aangepaste dienst" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "Dienst toevoegen" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "Bestaande aangepaste diensten" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "Er zijn geen aangepaste diensten ingeschakeld" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "verbonden met %(backend_host)s:%(backend_port)s" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "Verwijder deze dienst" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" "PageKite is een systeem om de diensten van %(box_name)s van buitenaf " "bereikbaar te maken, ook al is er geen directe verbinding met het internet. " "Dit is alleen vereist als de diensten op %(box_name)s niet te bereiken zijn " "vanaf de rest van internet. Dit is het geval in de volgende situaties:" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "%(box_name)s is verbonden achter een beperkende firewall." #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" "%(box_name)s is verbonden met een (wireless) router die niet onder eigen " "controle staat." #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" "De internetprovider geeft geen extern IP adres maar maakt gebruik van een " "NAT verbinding." #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" "De internetprovider geeft geen statisch IP adres, en het IP adres wijzigt " "bij elke verbinding." #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "De internetprovider beperkt inkomende verbindingen." #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" "PageKite omzeilt NAT, firewalls en IP-adres beperkingen door een combinatie " "van tunnels en reverse proxies. Er kan gebruik gemaakt worden van iedere " "pagekite service provider, bijvoorbeeld pagekite.net. In de toekomst is het misschien mogelijk om de " "%(box_name)s van een van je vrienden te gebruiken." #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "Instellen PageKite" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "Waarschuwing:
" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" "Gepubliceerde diensten zijn beschikbaar en aanvalbaar via het " "verschrikkelijke internet." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" "SSH van buitenaf bereikbaar maken met het standaardwachtwoord voor \"fbx\" " "is een HEEL SLECHT idee." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "Diensten opslaan" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "Webserver (HTTP)" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" "De website zal beschikbaar zijn op http://{0}" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "Webserver (HTTPS)" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" "De website zal beschikbaar zijn op https://{0}" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "Secure Shell (SSH)" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" "Zie de SSH cliënt setup instructies (Engelstalig)" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "PageKite" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "Over PageKite" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "Standaard Diensten" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "Aangepaste Diensten" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "Power" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "Herstarten of uitschakelen van het systeem." #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "Herstart »" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "Uitschakelen »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" "Daadwerkelijk herstarten? Het is niet mogelijk deze website te gebruiken tot " "het systeem is herstart. Dit kan enkele minuten duren." #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "Nu Herstarten" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" "Daadwerkelijk uitschakelen? Het is niet mogelijk deze website te gebruiken " "als het systeem is uitgeschakeld." #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "Nu Uitschakelen" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "Web Proxy (Privoxy)" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "Privoxy Web Proxy" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Gebruik {url} via proxy {proxy} op tcp{kind}" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "Privoxy Inschakelen" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" "Privoxy is een niet cachende web proxy met geavanceerde filtermogelijkheden " "om privacy te verhogen, webpagina data en HTTP headers te wijzigen, toegang " "te controleren, en advertenties en andere rommel te weren." #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" "Privoxy kan gebruikt worden door de proxy instellingen van je browser te " "wijzigen naar %(box_name)s hostname (of IP adres) met poort 8118. Zodra je " "Privoxy gebruikt, kan de configuratie en documentatie worden bereikt op http://config.privoxy.org/ of http://p.p." #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "Privoxy draait" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "Privoxy draait niet" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "IRC Cliënt (Quassel)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "Quassel IRC Cliënt" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "Quassel-core service inschakelen" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" "Quassel is een IRC-programma dat is gesplitst in twee delen, een \"core\" en " "een \"cliënt\". Hierdoor kan de kern aangesloten blijven op IRC servers, en " "berichten blijven ontvangen, zelfs wanneer de verbinding met de cliënt wordt " "verbroken. %(box_name)s kan de Quassel-core service starten zodat u altijd " "online bent en een of meer Quassel clients vanaf een desktop of mobiele " "telefoon kunnen worden gebruikt om te verbinden of de verbinding te " "verbreken." #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" "Verbinding met Quassel-core gebeurt via de standaardpoort voor Quassel " "4242. Er zijn clients om verbinding te maken met Quassel vanaf een desktop en mobiele apparaten." #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "Quassel-core server draait" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "Quassel-core server draait niet" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 #, fuzzy #| msgid "Server port" msgid "SIP Server (repro)" msgstr "Serverpoort" #: plinth/modules/repro/__init__.py:41 #, fuzzy #| msgid "Second DNS Server" msgid "repro SIP Server" msgstr "Tweede DNS Server" #: plinth/modules/repro/forms.py:29 #, fuzzy #| msgid "Enable Quassel core service" msgid "Enable repro service" msgstr "Quassel-core service inschakelen" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 #, fuzzy #| msgid "Quassel core service is running" msgid "repro service is running" msgstr "Quassel-core server draait" #: plinth/modules/repro/templates/repro.html:66 #, fuzzy #| msgid "Quassel core service is not running" msgid "repro service is not running" msgstr "Quassel-core server draait niet" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "Unhosted dataopslag (reStore)" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "reStore" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "reStore Inschakelen" #: plinth/modules/restore/templates/restore_index.html:29 #, fuzzy, python-format #| msgid "" #| "reStore is a server for unhosted web " #| "applications. The idea is to uncouple web applications from data. No " #| "matter where a web application is served from, the data can be stored on " #| "an unhosted storage server of user's choice. With reStore, your " #| "%(cfg.box_name)s becomes your unhosted storage server." msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" "reStore is een server voor unhosted web " "applicaties. Het idee is om webapplicaties en data te scheiden. Het maakt " "niet uit waar de webdienst vandaan komt, de data kan worden bewaard een " "unhosted storage server naar keuze van de gebruiker worden geplaatst. Met " "reStore kan %(cfg.box_name)s een unhosted storage server worden." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" "Gebruikersaccounts kunnen worden aangemaakt en bewerkt met de reStore web-interface." #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "Email Cliënt (Roundcube)" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "Roundcube Inschakelen" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" "RoundCube webmail is een browser gebaseerde, multilinguale IMAP client met " "een programma-achtige gebruikersinterface. Het bevat alle functionaliteit " "die je van een email cliënt verwacht, inclusief MIME ondersteuning, " "adresboek, mappen beheer, berichtenzoekfuncties en spellingscontrole." #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" "RoundCube kan worden gebruikt vanaf /roundcube. " "Gebruik de usernaam en wachtwoord van het email account dat je wilt " "gebruiken, gevolgd door de domeinnaam van de IMAP server van de " "mailprovider, zoals imap.example.com. Voor IMAP over SSL " "(aanbevolen): vul het serverveld in, bijvoorbeeld imaps://imap.example." "com." #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" "Om gmail te gebruiken zal het gmail adres de gebruikersnaam zijn, en de " "server wordt imaps://imap.gmail.com. Let erop dat eerst binnen " "het Google account de functie \"Less secure apps\" ingeschakeld moet worden. " "(https://www.google.com/settings/security/lesssecureapps)." #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "Bladwijzers (Shaarli)" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "Shaarli" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "Shaarli Inschakelen" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "Met Shaarli is het mogelijk bookmarks te bewaren en delen." #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" "Indien ingeschakeld, is Shaarli beschikbaar via de /" "shaarli link. Houd er rekening mee dat Shaarli maar een gebruiker " "ondersteunt, die moet worden ingesteld bij het eerste gebruik." #: plinth/modules/system/system.py:26 msgid "System" msgstr "Systeem" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Systeeminstelling" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "Hier kan het hele systeem van %(box_name)s worden beheerd." #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" "Deze mogelijkheden veranderen de basis van %(box_name)s, dus wees " "gewaarschuwd!" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "Anonimiteitsnetwerk (Tor)" #: plinth/modules/tor/__init__.py:53 #, fuzzy #| msgid "Anonymity Network (Tor)" msgid "Tor Anonymity Network" msgstr "Anonimiteitsnetwerk (Tor)" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "Tor-Hidden Service" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor relay poort beschikbaar" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3 transport geregistreerd" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4 transport geregistreerd" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Gebruik URL {url} op tcp{kind} via Tor" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bevestig Tor gebruik met {url} via tcp{kind}" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "Tor Inschakelen" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "Tor Hidden Service Inschakelen" #: plinth/modules/tor/forms.py:38 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow FreedomBox to provide selected services (such " #| "as ownCloud or Chat) without revealing its location." msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" "Een \"hidden service\" zorgt ervoor dat Freedombox geselecteerde diensten " "(zoals ownCloud of Chat) kan aanbieden zonder de locatie te onthullen." #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "Download Softwarepakketen via Tor" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" "Indien ingeschakeld, wordt software door middel van het Tor netwerk " "binnengehaald. Dit voegt een mate van privacy en veiligheid tijdens software " "downloads toe." #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" "Tor is een anonimiserend communicatiesysteem. Meer informatie erover is te " "vinden op de Tor Project " "website. Voor de beste bescherming bij het websurfen raadt het Tor Project " "de " "Tor Browser aan." #: plinth/modules/tor/templates/tor.html:54 #, fuzzy #| msgid "Configuration updated" msgid "Tor configuration is being updated" msgstr "Configuratie bijgewerkt" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor draait" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor draait niet" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Hidden Service" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Poort" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Bridge" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" "%(box_name)s is geconfigureerd als een Tor bridge met obfsproxy, zodat het " "kan helpen bij het omzeilen van censuur. Als %(box_name)s zich achter een " "router of firewall bevindt, is het belangrijk te zorgen dat de volgende " "poorten open staan en indien nodig worden doorgeleid:" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Dienst" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "Een Tor SOCKS poort is beschikbaar op %(box_name)s, op TCP poort 9050." #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor Controlepaneel" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Actiefout: {0} [{1}] [{2}]" #: plinth/modules/tor/views.py:148 #, fuzzy #| msgid "Configuration updated" msgid "Configuration updated." msgstr "Configuratie bijgewerkt" #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "Transmission BitTorrent" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "Transmission daemon Inschakelen" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "Opslagmap" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" "Map waar downloads worden bewaard. Indien de standaardmap wordt gewijzigd, " "zorg er dan voor dat de map bestaat en schrijfbaar is voor de \"debian-" "transmission\" gebruiker." #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "Gebruikersnaam om op de web interface in te loggen." #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" "Wachtwoord om op de web-interface in te loggen. Het huidige wachtwoord wordt " "getoond in een gehashte weergave. Om een nieuw wachtwoord in te stellen kan " "deze normaal worden ingevoerd." #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" "BitTorrent is een peer-to-peer bestandsdeling protocol. De Transmission " "daemon voorziet in Bittorrent bestandsdelingdiensten. Houd in gedachten dat " "BitTorrent gebruik niet anoniem is." #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" "Gebruik de web-interface van /transmission." #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "Transmission daemon draait" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "Transmission daemon draait niet." #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "Software Upgrades" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "Automatisch bijwerken inschakelen" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" "Indien ingeschakeld, wordt het automatische updateprogramma eens per dag " "gedraaid. Het zal proberen alle beschikbare updates bij te werken." #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Nu bijwerken »" #: plinth/modules/upgrades/templates/upgrades.html:65 #, fuzzy #| msgid "ejabberd is running" msgid "A package manager is running." msgstr "ejabberd draait" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Automatisch bijwerken" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Pakketten Bijwerken" #: plinth/modules/upgrades/views.py:96 #, fuzzy #| msgid "Upgrade completed." msgid "Upgrade process started." msgstr "Bijwerken voltooid." #: plinth/modules/upgrades/views.py:99 #, fuzzy #| msgid "Upgrade failed." msgid "Starting upgrade failed." msgstr "Bijwerken mislukt." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Bijwerkbare Pakketten" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "Fout bij het instellen van automatische upgrades: {error}" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Automatisch bijwerken ingeschakeld" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Automatisch bijwerken uitgeschakeld" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Gebruikers en Groepen" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Zoek LDAP item \"{search_item}\"" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "admin" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "wiki" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "Groepen" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" "Selecteer de diensten die voor de nieuwe gebruiker beschikbaar moeten zijn. " "De gebruiker kan inloggen op de diensten die single sign-in met LDAP " "ondersteunen, als zij zich in de juiste groep bevinden.

Gebruikers in de admin groep kunnen inloggen bij alle diensten. Zij kunnen " "ook op het systeem inloggen met SSH en kunnen systeemadministratie doen " "(sudo)." #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "Nieuwe gebruiker aan groep {group} toevoegen mislukt." #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "LDAP gebruiker hernoemen mislukt." #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Gebruiker uit groep verwijderen mislukt." #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Gebruiker aan groep toevoegen mislukt." #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Wijzigen LDAP gebruikerswachtwoord mislukt." #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "Wijzig wachtwoord van %(username)s" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "Wachtwoord Opslaan" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "Maak gebruiker" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Gebruiker verwijderen" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "Gebruiker %(username)s permanent verwijderen?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "Verwijder %(username)s" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "Verwijder gebruiker %(username)s" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "Gebruiker %(username)s wijzigen" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" "Gebruik het wachtwoord wijzigingsformulier " " om het wachtwoord te veranderen." #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "Wijzigingen opslaan" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "Gebruikers" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "Gebruiker %(username)s aangemaakt." #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "Gebruiker %(username)s bijgewerkt." #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "Gebruiker wijzigen" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Gebruiker {user} verwijderd." #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "Verwijderen van LDAP gebruiker mislukt." #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Wijzig wachtwoord" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Wachtwoord succesvol gewijzigd." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "Chat Server (XMPP)" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "Schakel XMPP in" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" "XMPP is een open en gestandaardiseerd communicatie protocol. Hiermee kan een " "XMPP server met de naam ejabberd worden ingesteld." #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" "Om daadwerkelijk te communiceren, kan de web cliënt of " "iedere andere XMPP cliënt worden gebruikt." #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" "Het XMPP domein is ingesteld als %(domainname)s. Gebruikersnamen zien " "eruit als username@%(domainname)s. Het domein kan worden ingesteld op " "de Instellingen pagina." #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "Start web cliënt" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "ejabberd draait" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "ejabberd draait niet" #: plinth/network.py:39 msgid "PPPoE" msgstr "PPPoE" #: plinth/package.py:156 msgid "packages not found" msgstr "pakketten niet gevonden" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "Het installeren en instellen van pakketten is gelukt." #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "Fout tijdens pakketinstallatie: {string} {details}" #: plinth/service.py:73 msgid "Web Server" msgstr "Webserver" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "Web Server over Secure Socket Layer" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "Secure Shell (SSH) Server" #: plinth/service.py:79 #, fuzzy, python-brace-format #| msgid "FreedomBox Web Interface (Plinth)" msgid "{box_name} Web Interface (Plinth)" msgstr "FreedomBox Web Interface (Plinth)" #: plinth/templates/404.html:25 msgid "404" msgstr "404" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "De gevraagde pagina %(request_path)s is niet gevonden." #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" "Indien deze pagina wel zou moeten bestaan, is dat door te geven aan de " "makers van Plinth door middel van de issue tracker (Engelstalig)." #: plinth/templates/500.html:25 msgid "500" msgstr "500" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" "Dit is een interne fout, en niet iets dat een gebruiker heeft veroorzaakt of " "kan verhelpen. Fouten zoals deze kunnen worden gemeld op de bug tracker (Engelstalig) zodat we deze kunnen verhelpen." #: plinth/templates/base.html:49 #, fuzzy, python-format #| msgid "Plinth administrative interface for the FreedomBox" msgid "Plinth administrative interface for the %(box_name)s" msgstr "Plinth Instellingspagina voor deze FreedomBox" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Navigatie in/uitschakelen" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Wijzig wachtwoord" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Afmelden" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Aanmelden" #: plinth/templates/login.html:35 msgid "Login" msgstr "Aanmelding" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "Installatie" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" "Deze functie vereist de installatie van extra pakketten. Wilt U deze " "installeren?" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "Pakket" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "Samenvatting" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "Installeer" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "Installeren van %(package_names)s: %(status)s" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% voltooid" #~ msgid "show password" #~ msgstr "toon wachtwoord" #~ msgid "The following is the current status:" #~ msgstr "De huidige status is als volgt:" #~ msgid "Congratulations! Your FreedomBox is up and running!" #~ msgstr "Gefeliciteerd, De FreedomBox is gereed!" #~ msgid "" #~ "Please provide the following basic information to complete the setup " #~ "process." #~ msgstr "" #~ "Beantwoord de volgende vragen om het installatieproces te voltooien." #~ msgid "Next" #~ msgstr "Volgende" #~ msgid "FreedomBox Manual" #~ msgstr "FreedomBox Handleiding" #~ msgid "" #~ "Many FreedomBox contributors and users are also available on the " #~ "#freedombox channel of the irc.oftc.net IRC network." #~ msgstr "" #~ "Veel FreedomBox deelnemers en gebruikers zijn ook te vinden op het " #~ "#freedombox kanaal op het irc.oftc.net IRC netwerk." #~ msgid "Create Wiki/Blog" #~ msgstr "Nieuwe Wiki/Blog" #~ msgid "" #~ "Select Automatic (DHCP) if you are connecting to an existing wireless " #~ "network. Shared mode is useful when running an Access Point." #~ msgstr "" #~ "Selecteer Automatisch (DHCP) als een verbinding met een bestaand " #~ "draadloos netwerk wordt gemaakt. Shared Mode is handig als hiermee een " #~ "Acces Point wordt gemaakt." #~ msgid "Tor enabled" #~ msgstr "Tor ingeschakeld" #~ msgid "Tor disabled" #~ msgstr "Tor uitgeschakeld" #~ msgid "Tor hidden service enabled" #~ msgstr "Tor hidden service ingeschakeld" #~ msgid "Tor hidden service disabled" #~ msgstr "Tor hidden service uitgeschakeld" #~ msgid "Enabled package download over Tor" #~ msgstr "Pakket download via Tor Inschakelen" #~ msgid "Disabled package download over Tor" #~ msgstr "Pakket download via Tor Uitschakelen" #~ msgid "There was an error while upgrading." #~ msgstr "Er was een fout tijdens het bijwerken." #~ msgid "Output from unattended-upgrades:" #~ msgstr "Uitvoer van automatische upgrades:" #~ msgid "The operating system is up to date now.  " #~ msgstr "Het besturingssysteem is nu bijgewerkt.  " #~ msgid "Show Details" #~ msgstr "Toon Details" #~ msgid "" #~ "This will run unattended-upgrades, which will attempt to upgrade your " #~ "system with the latest Debian packages. It may take a few minutes to " #~ "complete." #~ msgstr "" #~ "Dit zal het automatische updateprogramma draaien. Het zal proberen het " #~ "systeem bij te werken met de nieuwste Debian pakketten. Dit kan enige " #~ "minuten duren." #~ msgid "System is being upgraded." #~ msgstr "Het systeem wordt bijgewerkt." #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." #~ msgstr "" #~ "Er kunnen diverse diensten en programma's worden geinstalleerd en gestart " #~ "op %(box_name)s." #~ msgid "Physical interface" #~ msgstr "Fysieke Interface" #~ msgid "Delete Connection %(name)s" #~ msgstr "Verwijder verbinding %(name)s" #~ msgid "Bittorrent (Transmission)" #~ msgstr "BitTorrent (Transmission)" #~ msgid "Delete user permanently?" #~ msgstr "Gebruiker permanent verwijderen?" #~ msgid "Edit User %(username)s" #~ msgstr "Gebruiker %(username)s wijzigen" #~ msgid "Scramblesuit transport registered" #~ msgstr "Scramblesuit transport geregisteerd" #~ msgid "" #~ "Your domain name is the global name by which other machines on the " #~ "Internet can reach you. It must consist of alphanumeric words separated " #~ "by dots." #~ msgstr "" #~ "De domeinnaam is de lokale naam waarmee ander machines op het internet " #~ "deze machine kunnen bereiken. De hostnaam moet uit alfanummerieke " #~ "woorden bestaan, gescheiden met punten." #~ msgid "Hostname is unchanged" #~ msgstr "Hostnaam is onveranderd" #~ msgid "Domain name is unchanged" #~ msgstr "Domeinnaam is onveranderd" Plinth-0.8.1/plinth/locale/pt/000077500000000000000000000000001266051671100161435ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/pt/LC_MESSAGES/000077500000000000000000000000001266051671100177305ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/pt/LC_MESSAGES/django.po000066400000000000000000002520421266051671100215370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2015-12-15 01:08+0000\n" "Last-Translator: Daniel Sousa \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Aplicações" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "Serviços e Aplicações" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "Esta caixa pode ser o seu local de partilha de fotos, o seu local de " "mensagens instantâneas, o seu local de rede social, o seu local de notícias. " "Lembra-se dos portais web? Podemos também ser um desses. Muitos dos serviços " "que usa na web poderão em breve estar no local e sob o seu controle!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "Descoberta do Serviço" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "Permitir descoberta do serviço" #: plinth/modules/avahi/templates/avahi.html:29 #, fuzzy, python-format #| msgid "" #| "Service discovery allows other machines on the network to discover your " #| "FreedomBox and services running on it. It also allows FreedomBox to " #| "discover other machines and services running on your local network. " #| "Service discovery is not essential and works only on internal networks. " #| "It may be disabled to improve security especially when connecting to a " #| "hostile local network." msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "A descoberta de serviço permite que outras máquinas na rede possam descobrir " "a sua FreedomBox e os serviços em execução nela. Também permite que a " "FreedomBox descubra outras máquinas e serviços a correr na sua rede local. A " "descoberta de serviço não é essencial e só funciona em redes internas. Pode " "ser desativado para melhorar a segurança, especialmente ao ligar a uma rede " "local hostil." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "Estado" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "O Servidor da descoberta do serviço está a correr" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "O Servidor da descoberta do serviço não está a correr" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "Configuração" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Configuração atualizada" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Definição inalterada" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Nome de domínio inválido" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "" #: plinth/modules/config/config.py:97 #, fuzzy, python-brace-format #| msgid "" #| "Domain name is the global name by which other machines on the Internet " #| "can reach you. It must consist of labels separated by dots. Each label " #| "must start and end with an alphabet or a digit and have as interior " #| "characters only alphabets, digits and hyphens. Length of each label must " #| "be 63 characters or less. Total length of domain name must be 253 " #| "characters or less." msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "O nome de domínio é o nome global pelo qual as outras máquinas na Internet " "podem chegar até si. Deve consistir em etiquetas separadas por pontos. Cada " "etiqueta deve começar e terminar com uma letra ou um dígito e ter como " "caracteres interiores apenas letras, dígitos e hífenes. O comprimento de " "cada etiqueta deve ser 63 caracteres ou menos. O comprimento total do nome " "de domínio deve ser 253 caracteres ou menos." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Nome de Domínio" #: plinth/modules/config/config.py:110 #, fuzzy, python-brace-format #| msgid "" #| "Domain name is the global name by which other machines on the Internet " #| "can reach you. It must consist of labels separated by dots. Each label " #| "must start and end with an alphabet or a digit and have as interior " #| "characters only alphabets, digits and hyphens. Length of each label must " #| "be 63 characters or less. Total length of domain name must be 253 " #| "characters or less." msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "O nome de domínio é o nome global pelo qual as outras máquinas na Internet " "podem chegar até si. Deve consistir em etiquetas separadas por pontos. Cada " "etiqueta deve começar e terminar com uma letra ou um dígito e ter como " "caracteres interiores apenas letras, dígitos e hífenes. O comprimento de " "cada etiqueta deve ser 63 caracteres ou menos. O comprimento total do nome " "de domínio deve ser 253 caracteres ou menos." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "Língua" #: plinth/modules/config/config.py:127 #, fuzzy #| msgid "Language for this FreedomBox web administration interface" msgid "Language for this web administration interface" msgstr "Língua para o interface de administração web desta FreedomBox" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Configurar" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "Configuração Geral" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "Erro ao definir o nome do domínio: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "Nome do domínio definido" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "Erro ao definir a língua: {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "Língua mudada" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "Submeter" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "Data e Hora" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "Servidor do Tempo da Rede" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "Cliente NTP em contacto com servidores" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "Ativar tempo da rede" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "Fuso Horário" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "" #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format msgid "The public domain name you want use to reach your {box_name}." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:135 msgid "Accept all SSL certificates" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:139 msgid "Use HTTP basic authentication" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 msgid "Dynamic DNS Client" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 msgid "Direct connection to the Internet." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "" #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "" #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 #, fuzzy #| msgid "General Configuration" msgid "Current Network Configuration" msgstr "Configuração Geral" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "" #: plinth/modules/help/help.py:73 #, python-brace-format msgid "{box_name} Manual" msgstr "" #: plinth/modules/help/templates/help_about.html:30 #, python-format msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" #: plinth/modules/help/templates/help_about.html:56 #, python-format msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 #, python-format msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 #, python-format msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 #, python-format msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 msgid "Wiki and Blog (ikiwiki)" msgstr "" #: plinth/modules/ikiwiki/__init__.py:43 msgid "ikiwiki wikis and blogs" msgstr "" #: plinth/modules/ikiwiki/forms.py:29 #, fuzzy #| msgid "Enable network time" msgid "Enable ikiwiki" msgstr "Ativar tempo da rede" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format msgid "Delete Wiki or Blog %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "" #: plinth/modules/ikiwiki/views.py:73 msgid "Wiki and Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "" #: plinth/modules/ikiwiki/views.py:132 msgid "Create Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "" #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "" #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "" #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:182 msgid "Delete Wiki or Blog" msgstr "" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 #, fuzzy #| msgid "Domain Name" msgid "Domain" msgstr "Nome de Domínio" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 #, fuzzy #| msgid "Applications" msgid "Actions" msgstr "Aplicações" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "" #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "" #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "" #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "" #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "" #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "" #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "" #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "" #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "" #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "" #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "" #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 msgid "SIP Server (repro)" msgstr "" #: plinth/modules/repro/__init__.py:41 msgid "repro SIP Server" msgstr "" #: plinth/modules/repro/forms.py:29 #, fuzzy #| msgid "Enable service discovery" msgid "Enable repro service" msgstr "Permitir descoberta do serviço" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 #, fuzzy #| msgid "Service discovery server is running" msgid "repro service is running" msgstr "O Servidor da descoberta do serviço está a correr" #: plinth/modules/repro/templates/repro.html:66 #, fuzzy #| msgid "Service discovery server is not running" msgid "repro service is not running" msgstr "O Servidor da descoberta do serviço não está a correr" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" #: plinth/modules/system/system.py:26 msgid "System" msgstr "" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "" #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "" #: plinth/modules/tor/__init__.py:53 msgid "Tor Anonymity Network" msgstr "" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" #: plinth/modules/tor/templates/tor.html:54 #, fuzzy #| msgid "Configuration updated" msgid "Tor configuration is being updated" msgstr "Configuração atualizada" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" #: plinth/modules/tor/views.py:148 #, fuzzy #| msgid "Configuration updated" msgid "Configuration updated." msgstr "Configuração atualizada" #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "" #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "" #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "" #: plinth/modules/upgrades/views.py:99 msgid "Starting upgrade failed." msgstr "" #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "" #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "" #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "" #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "" #: plinth/network.py:39 msgid "PPPoE" msgstr "" #: plinth/package.py:156 msgid "packages not found" msgstr "" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "" #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "" #: plinth/service.py:73 msgid "Web Server" msgstr "" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 msgid "404" msgstr "" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "" #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" #: plinth/templates/500.html:25 msgid "500" msgstr "" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" #: plinth/templates/login.html:35 msgid "Login" msgstr "" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "" #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." #~ msgstr "" #~ "Pode instalar e correr vários serviços e aplicações no seu %(box_name)s." Plinth-0.8.1/plinth/locale/ru/000077500000000000000000000000001266051671100161465ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/ru/LC_MESSAGES/000077500000000000000000000000001266051671100177335ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/ru/LC_MESSAGES/django.po000066400000000000000000004166511266051671100215520ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-02-06 14:44+0530\n" "PO-Revision-Date: 2016-02-14 08:36+0000\n" "Last-Translator: the29a \n" "Language-Team: Russian " "\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" "4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "Слушать на {kind} порт {listen_address}{port}" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "Слушать порт {port} на {kind}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "Доступ к URL {url} по tcp {kind}" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "Доступ к URL {url}" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "Подключение к {host}:{port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "Невозможно подключиться к {host}{port}" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FrеedomBox" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Приложения" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Приложения" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "Службы и Приложения" #: plinth/modules/apps/templates/apps.html:28 #, fuzzy, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" "Вы можете установить и запустить различные службы и приложения на вашем " "%(box_name)s. Нажмите на любую страницу приложения слева, чтобы прочитать " "описание приложения и выбрать для установки." #: plinth/modules/apps/templates/apps.html:36 #, fuzzy msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "Эта коробка может быть вашим средством обмена фотографиями, обмена " "мгновенными сообщениями, вашей социальной сетью, вашей новостной лентой. " "Помните Web-порталы? Вы можете быть одним из них. Многие службы, которыми " "пользуетесь Вы, могут быть в этой коробке и под Вашим контролем!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "Обнаружение служб" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "Включить обнаружение служб" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "Обнаружение служб позволяет другим устройствам в сети обнаруживать ваш " "%(box_name)s и службы, запущенные на нем. Это так же позволяет %(box_name)s " "находить другие устройства и службы запущенные в вашей локальной сети. " "Обнаружение служб не является существенным и работает только внутри вашей " "сети. Она может быть отключена в целях повышения безопасности, особенно при " "подключении к вражеской сети." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "Статус" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "Выполняется служба обнаружения сервера" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "Не запущена служба обнаружения сервера" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "Конфигурация" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "Обновление установки" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Конфигурация обновлена" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Настройки без изменений" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Недопустимое имя домена" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Имя хоста" #: plinth/modules/config/config.py:97 #, python-brace-format msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Имя узла это локальное имя, по которому другие устройства в локальной сети " "могут достигнуть ваш {box_name}. Оно должно начинаться и заканчиваться с " "букв или цифр, внутри так же могут быть цифры, буквы или дефисы. Общая " "длинна должна быть не более 63 символов." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Недопустимое имя хоста" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Доменное имя" #: plinth/modules/config/config.py:110 #, python-brace-format msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "Доменное имя это глобальное имя, по которому другие устройства в интернете " "могут обнаруживать {box_name}. Оно должно состоять из меток, разделенных " "точками. Каждая метка должна состоять из букв или цифр, Длина каждой метки " "должны быть 63 символов или меньше. Общая длина имени домена должно быть 253 " "символов или меньше." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "Язык" #: plinth/modules/config/config.py:127 msgid "Language for this web administration interface" msgstr "Язык для этого веб-интерфейса администрирования" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Настроить" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "Общие настройки" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "Ошибка параметра hostname: {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "Смена имени хоста" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "Ошибка параметра имени домена: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "Смена доменного имени" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "Ошибка настройки языка: {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "Язык изменен" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "Отправить" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "Дата и Время" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "Сетевой сервер времени" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "NTP-клиент в контакте с серверами" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "Включить время сети" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "Часовой пояс" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" "Задайте свой часовой пояс, чтобы получить точные временные метки. Это " "позволит установить общесистемный часовой пояс." #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- не выбран часовой пояс --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" "Сервер сетевого времени это программа позволяющая системе синхронизировать " "время с серверами в Интернете." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "Сетевой сервер времени выполняется" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "Сетевой сервер времени не выполняется" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "Ошибка установки часового пояса: {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "Смена часового пояса" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "БитТоррент (Deluge)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "Deluge БитТоррент" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "Включить Deluge" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "BitTorrent Веб Клиент (Deluge)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "Deluge это клиент BitTorrent, имеющий веб-интерфейс." #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" "Когда запущен, Deluge веб-клиент доступен по адресу: /deluge на веб-сервере. Пароль по умолчанию 'deluge', но вы должны " "войти и изменить его сразу же после включения этой службы." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "deluge-web выполняется" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "deluge-web не выполняется" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "Диагностика" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "Диагностика системы" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "Диагностический тест" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" "Диагностический тест системы проведет ряд проверок, чтобы убедиться, что " "приложения и службы работают, как ожидалось." #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "Запуск диагностики" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "В настоящее время диагностический тес запущен" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "Результаты" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "Модуль: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "Результаты диагностики" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "Модуль: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "Этот модуль не поддерживает диагностику" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "Тест" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "Результат" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "О службе" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Динамический DNS" #: plinth/modules/dynamicdns/dynamicdns.py:71 #, fuzzy msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "Переменные < User >, < Pass >, < lp >, < Domain > " "могут использоваться в URL-адресе. Для примеров смотрите обновление URL " "поставщика примеров." #: plinth/modules/dynamicdns/dynamicdns.py:75 #, fuzzy msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" "Пожалуйста, выберите протокол обновления согласно вашего провайдера. Если " "ваш провайдер не поддерживает протокол GnudIP или поставщик не указан, вы " "можете использовать URL-адрес обновления вашего провайдера." #: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Пожалуйста, не вводите URL здесь (как «https://example.com/»), только имя " "хоста сервера GnuDIP (как \"example.com\")." #: plinth/modules/dynamicdns/dynamicdns.py:84 #, fuzzy, python-brace-format msgid "The public domain name you want use to reach your {box_name}." msgstr "" "Общее доменное имя вы хотите использовать для достижения ваших {box_name}" #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Используйте этот параметр, если ваш провайдер использует самостоятельно " "подписанные сертификаты." #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" "Если выбран этот параметр, будет использоваться имя пользователя и пароль " "для обычной проверки подлинности HTTP." #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" "Оставьте это поле пустым, если вы хотите сохранить ваш предыдущий " "настроенный пароль." #: plinth/modules/dynamicdns/dynamicdns.py:96 #, fuzzy, python-brace-format msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" "Необязательное значение. Если ваш {box_name} не подключен непосредственно к " "Интернету, (т.е. подключенный к маршрутизатору) этот URL-адрес используется " "для получения \"белого\" IP. URL-адрес должен просто вернуть IP (пример: " "http://myip.datasystems24.de)" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "Вы должны выбрать имя пользователя для создания учетной записи." #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Включение динамического DNS" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Тип службы" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "Адрес сервера GnudIP" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Недопустимое имя сервера" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Обновление URL-адреса" #: plinth/modules/dynamicdns/dynamicdns.py:135 msgid "Accept all SSL certificates" msgstr "Принимать все SSL-сертификаты" #: plinth/modules/dynamicdns/dynamicdns.py:139 msgid "Use HTTP basic authentication" msgstr "Использовать базовую аутентификацию HTTP" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Имя пользователя" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Пароль" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "Показать пароль" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP проверить URL-адрес" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Просьба представить обновление URL-адреса или сервера GnuDIP" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Просьба представить имя пользователя GnuDIP" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Просьба представить домен GnuDIP" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Введите пароль" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Настройка динамического DNS" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Состояние динамического DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 msgid "Dynamic DNS Client" msgstr "Клиент динамического DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Если ваш Интернет-провайдер меняет ваш IP-адрес периодически, это может " "стать препятствиям, чтобы найти вас в сети. И по этой причине никто не может " "найти услуги, которые предоставляются %(box_name)s, например ownCloud." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" "Решение заключается в назначении имени DNS к вашему IP адресу и обновлять " "DNS имя каждый раз, как будет изменен ваш IP адрес. Динамический DNS " "позволяет вам публиковать ваш текущий публичный IP адрес gnudip сервере. " "После этого сервер будет назначать DNS имя с новым IP и если кто-то из " "Интернет запрашивает DNS-имя, он получит ваш текущий IP." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 #, fuzzy msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" "Если вы ищете бесплатный сервер динамического DNS, вы можете найти " "бесплатный сервис GnuDIP на gnudip.datasystems24.net или вы можете найти беслатную " "службу обновления URL-адреса на freedns.afraid.org" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Если ваш %(box_name)s) подключен за NAT-маршрутизатором, не забудьте " "добавить перенаправление портов (например, стандартные 80 или 443)." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" "Вы отключили Javascript. Динамические элементы отключены и некоторые " "вспомогательные функции могут не работать (но основные функции должны " "работать)." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "Тип NAT" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 #, fuzzy msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" "Тип NAT не обнаружен, если вы не предоставляете «IP проверить URL» мы не " "можем определить тип NAT." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 msgid "Direct connection to the Internet." msgstr "Прямое подключение к Интернету." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" "За NAT. Это означает, что служба динамического DNS будет опрашивать «IP " "проверить URL-адрес» для изменения (для этого необходима запись «IP " "проверить URL-адрес» - в противном случае не будет обнаружено изменение IP )" ". В случае, если WAN IP меняется, это может занять до %(timer)s минут до тех " "пор, пока ваш DNS-запись обновляется." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "Последнее обновление" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "Брандмауэр" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" "Брандмауэр — система безопасности, которая контролирует входящий и исходящий " "сетевой трафик на вашем %(box_name)s. Держите брандмауэр включенным и " "правильно настроенным, чтобы уменьшить риск информационной опасности из " "Интернета." #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "Текущий статус:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" "Демон брандмауэра не выполняется. Пожалуйста, запустите его. На %(box_name)s " "межсетевой экран включен по умолчанию. На любюй системе, базирующейся на " "Debian (как и %(box_name)s) которые вы можете запустить его с помощью " "команды 'service firewalld start' или в случае системы с systemd 'systemctl " "start firewalld'." #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "Служба/Порт" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Включено" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Выключено" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "Разрешено" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "Разрешено (только внутренние)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "Разрешено (только внешние)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "Заблокировано" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" "Действия брандмауэр автоматические. При включении службы, она также " "разрешается в брандмауэре и при отключении службы она также запрещается в " "брандмауэре." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "Создание пользователя LDAP не удалось." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "Не удалось добавить нового пользователя в группу администратора." #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "Учетная запись пользователя создана, теперь вы вошли" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "Справка" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "Запуск программы установки" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" "Для завершения установки вашей %(box_name)s, просьба представьте некоторую " "базовую информацию." #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Учетная запись администратора" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" "Выберите имя пользователя и пароль для доступа к веб-интерфейсу. Пароль " "можно изменить позднее. Этому пользователю будут предоставляться " "административные привилегии. Другие пользователи могут быть добавлены позже." #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Box-it up!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "Установка Завершена!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" "Установка %(box_name)s Завершена. Чтобы сделать ваш %(box_name)s " "функциональным, вам нужны некоторые приложения. Они могут быть по первому " "доступу к ним." #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "Перейдите в раздел приложения" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 msgid "Current Network Configuration" msgstr "Текущая конфигурация сети" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" "Вам необходимо проверить настройки сети и изменить их при необходимости. Не " "забудьте изменить пароли Wi-Fi по умолчанию!" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Перейти к сетям" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Установка Завершена" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "Документация" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "Где получить помощь" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "Вручную" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "Документация и FAQ" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "О {box_name}" #: plinth/modules/help/help.py:73 #, python-brace-format msgid "{box_name} Manual" msgstr "Руководство {box_name}" #: plinth/modules/help/templates/help_about.html:30 #, python-format msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" "%(box_name)s - это проект сообщества для разработки, дизайна и поощрения " "личных серверов под управлением свободного программного обеспечения для " "частных, личных сообщений. Это сетевое устройство, предназначенное разрешить " "взаимодействие с остальной частью Интернета в условиях защиты " "конфиденциальности и безопасности данных. Он содержит различные приложения, " "такие как блог, вики, веб-сайт, социальную сеть, электронную почту, Web-" "прокси и сервер Tor, на устройстве, которое может заменить ваш маршрутизатор " "Wi-Fi, так что ваши данные остаются с вами." #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" "Мы живем в мире, сетями владеют те, с кем у нас не всегда общие интересы. " "Путем создания программного обеспечения, которое не полагается на " "центральную службу, мы можем восстановить контроль и конфиденциальность. " "Сохраняя наши данные в наших домах, мы получаем полезную правовую защиту над " "ними. Давая обратно власть пользователям в их сетях и машины, мы " "возвращаемся к его предполагаемую архитектуру Интернета peer-to-peer." #: plinth/modules/help/templates/help_about.html:56 #, python-format msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" "Существует ряд проектов, которые работают в сторону реализации будущего " "распределенных служб, %(box_name)s стремится объединить их в удобном пакете." #: plinth/modules/help/templates/help_about.html:64 #, python-format msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "Дополнительные сведения о проекте %(box_name)s смотрите в Wiki ." #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Подробнее »" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Вы используете Plinth версии %(version)s." #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "Установка %(box_name)s" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "Руководство %(box_name)s это лучшее место для " "получения информации о %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 #, python-format msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" "Вики проекта %(box_name)s содержит исчерпывающую информацию." #: plinth/modules/help/templates/help_index.html:43 #, python-format msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" "Если вам нужна помощь сообщества %(box_name)s, вопросы можно задавать в " "списке рассылок Архивный лист так же содержит информацию о " "проблемах и возможных путях решения." #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" "Множество разработчиков и пользователей %(box_name)s так же доступны в IRC " "сети irc.oftc.net. Подключайтесь и спросите помощи на канале " "#freedombox используя веб-интерфейс." #: plinth/modules/ikiwiki/__init__.py:38 msgid "Wiki and Blog (ikiwiki)" msgstr "Вики и Блог (ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 msgid "ikiwiki wikis and blogs" msgstr "ikiwiki вики и блоги" #: plinth/modules/ikiwiki/forms.py:29 msgid "Enable ikiwiki" msgstr "Включить ikiwiki" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "Тип" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "Имя" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "Имя учетной записи администратора" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "Пароль учетной записи администратора" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" "Когда включен, блоги и вики-сайты будут доступны на /ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format msgid "Delete Wiki or Blog %(name)s" msgstr "Удалить Вики или Блог %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" "Это действие приведет к удалению всех постов, страниц и комментариев, " "включая историю изменений. Окончательно удалить это вики или блог?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Удаление %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "Отмена" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "Нет доступных вики или блогов." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "Создать Вики или Блог" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "Удаление узла %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "Перейти к %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "Управление" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "Создать" #: plinth/modules/ikiwiki/views.py:73 msgid "Wiki and Blog" msgstr "Вики и Блог" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "Управление Блогами и Вики" #: plinth/modules/ikiwiki/views.py:132 msgid "Create Wiki or Blog" msgstr "Создать Блог или Вики" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "Создать вики {name}." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "Не удалось создать вики: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "Созданный блог {name}." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "Не удалось создать блог: {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "{name} удален." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "Не удалось удалить {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 msgid "Delete Wiki or Blog" msgstr "Удаление блога или вики" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "Сертификаты (Let's Encrypt)" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, fuzzy, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" "Цифровой сертификат позволяет пользователям веб-сервиса проверять " "идентичность службы и безопасно взаимодействовать с ней. %(box_name)s может " "автоматически получать и устанавливать цифровые сертификаты для каждого " "доступного домена." #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" "Let's Encrypt это свободная, автоматизированная и открытая сертификация, " "запущенная на благо общественности группой nternet Security Research Group " "(ISRG). Пожалуйста, прочитайте Let's Encrypt Subscriber Agreemen перед использованием этой службы." #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 msgid "Domain" msgstr "Домен" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "Статус сертификата" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "Безопасность Веб-сайта" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 msgid "Actions" msgstr "Действия" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "Истекает %(expiry_date)s" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "Не сертификата" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "Отменить" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "Получить повторно" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "Получить" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "Сертификат успешно отменен для домена {domain}" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "Не удалось отозвать сертификат для домена {domain}: {error}" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "Сертификат успешно получен для домена {domain}" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "Не удалось получить сертификат для домена {domain}: {error}" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "MonkeySphere" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" "С Monkeysphere PGP ключ может быть создан для каждого настроенного домена, " "доступного по SSH. Открытый ключ PGP затем может быть загружен на сервер " "ключей PGP. Пользователи, которые подключаются к этой машине через SSH могуу " "проверить, что они подключаются к правильному хосту. Для использования, ключ " "должен быть подписан. Смотрите Monkeysphere SSH documentation для подробностей." #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "Публикация ключа на сервер ключей..." #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "GPG отпечаток" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "Не доступно" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "Генерировать ключ PGP" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "Опубликовать ключ" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "Сгенерированный ключ PGP." #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "Отменена публикация ключа." #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "Опубликованый ключ на сервере ключей." #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "Произошла ошибка при публикации ключа." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "Голосовой чат (Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "Mumble Сервер Голосового Чата" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "Включить Mumble как демон" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" "Mumble это шифрованый чат с высоким качеством голоса, низкой задержкой и " "открытым исходным кодом." #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "Вы можете подключится к серверу Mumble используя стандартный для него порт: " "64738. На Клиенты вы можете найти " "клиенты для вашего компьютера и Android устройств." #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "Mumble сервер запущен" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "Mumble сервер не запущен" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Название услуги" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Использовать DNSSEC на IPv{kind}" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "Тип подключения" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Имя подключения" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Физический интерфейс" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "К этому подключению должно быть привязано сетевое устройство." #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Зона Брандмауэра" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" "Зона брандмауэра будет контролировать службы, доступные через этот " "интерфейс. Выбирайте Внутренний только в доверенных сетях." #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "Метод адресации IPv4" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" "\"Общий\" метод запускает DHCP сервер и \"Автоматический\" метод будет " "получать настройки от DHCP сервера." #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Адрес" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Маска сети" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" "Необязательное значение. Если оставить пустым, будет использоваться маска " "подсети по умолчанию, основанная на адресе." #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Шлюз" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Необязательное значение." #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS-сервер" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Необязательное значение. Если задано это значение, и метод адресации IPv4 " "«Автомат», предоставляемые DHCP-сервером DNS-серверы будут игнорироваться." #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Второй DNS-сервер" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Необязательное значение. Если задано это значение и метод адресации IPv4 " "«Автомат», предоставляемые DHCP-сервером DNS-серверы будут игнорироваться." #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "-- Выберите --" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Отображаемое имя сети." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Режим" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Режим проверки подлинности" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" "Выберите WPA, если беспроводная сеть защищена и требует от клиентов пароль " "для подключения." #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Парольная фраза" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Сетевые подключения" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Соседние сети Wi-Fi" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Добавить подключение" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "Сети" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "Не удается показать подключение: соединение не найдено." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "Показать сведения о подключении" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "Нельзя редактировать подключение: подключение не найдено." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "Этот тип подключения еще не понятен." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Редактирование подключения" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Установленное подключение {name}." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Невозможно установить подключение: Поключение не найдено." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "Не удалось установить подключение {name}: Нет подходящего устройства." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Разорвано подключение {name}." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Не удалось разорвать подключение: соединение не найдено." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Добавление нового подключения Ethernet" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Добавление нового подключения PPPoE" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Добавление нового подключения Wi-Fi" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Подключение {name} удалено." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Не удалось удалить подключение: соединение не найдено." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Удаление подключения" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "Редактирование подключения" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "Редактировать" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "Отключить" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "Включить" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "Удаление подключения" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "Удалить" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "Подключение" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "Основное соединение" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "Да" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "Устройство" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "Состояние" #: plinth/modules/networks/templates/connection_show.html:93 #, fuzzy msgid "State reason" msgstr "Определение состояния" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "MAC-адрес" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "Интерфейс" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "Описание" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "Физическая связь" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "Состояния связи" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "кабель подключен" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "Проверьте кабель" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "Скорость" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s Мбит/сек" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s Мбит/сек" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "Сила сигнала" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "Канал" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IРv4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "Метод" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "IP-адрес" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "DNS-сервер" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "По умолчанию" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IРv6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "Это подключение не активно." #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "Безопасность" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "Зона Брандмауэра" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" "Этот интерфейс должен быть подключен к локальной сети/машине. Если этот " "интерфейс подключен к публичной сети, внутренние службы будут доступны " "извне. Это представляет риск для безопасности." #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" "Этот интерфейс должен получить подключение к Интернету. Если вы подключите " "его к локальной сети/машине, многие внутренние службы будут не доступны." #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Этот интерфейс не поддерживается %(box_name)s. Его статус безопасности " "неизвестен для %(box_name)s. Много служб %(box_name)s могут быть недоступны " "на этом интерфейсе. Мы рекомендуем вам отключить или удалить это подключение " "и заново настроить его." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "Создать..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "Создание подключения" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "Окончательно удалить подключение %(name)s?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "Интернет" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "Интервал" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "Внешний" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "Ethernet" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "Wi-Fi" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "Показать подключение %(connection.name)s" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "Внутренний" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "Показать подключение %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "Компьютер" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "Удалить подключение %(name)s" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "Активные" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "Неактивен" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "Виртуальная частная сеть (OpenVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "OpenVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "Включить сервер OpenVPN" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "Виртуальные частные сети (VPN) — это метод для безопасного подключения двух " "устройств для того, чтобы получить доступ к ресурсам частной сети. В то " "время как вы находитесь вдали от дома, можно подключиться к вашей %(box_name)" "s для того, чтобы присоединиться к вашей домашней сети и доступа к закрытым/" "внутренним службам, предоставляемые %(box_name)s. Вы можете также получить " "доступ к остальной части Интернет через %(box_name)s для дополнительной " "безопасности и анонимности." #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "Профиль" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "Для подключения к %(box_name)s по VPN, вам надо скачать профиль для OpenVPN-" "клиента. OpenVPN клиенты доступны для большинства платформ. 2documentation для инструкций и рекомендаций по " "настройке." #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" "Профиль специфичен для каждого пользователя %(box_name)s. Держите профиль в " "тайне." #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "Скачать мой профиль" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" "OpenVPN еще не настроен. ыполнение безопасной установки занимает очень много " "времени. В зависимости от мощности вашего %(box_name)s, это может занять " "продолжительное время. Если установка прерывается, вы можете начать её снова." #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "Запуск программы установки" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "Выполняется установка OpenVPN" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" "Чтобы выполнить безопасной установки, выполнение безопасной установки " "занимает очень много времени. В зависимости от мощности вашего %(box_name)s, " "это может занять продолжительное время. Если установка прерывается, вы " "можете начать её снова." #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "Сервер OpenVPN выполняется" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "OpenVPN сервер не выполняется" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "Установка завершена." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "Установка не удалась." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "Включить ownCloud" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "Файловый хостинг (ownCloud)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "оwnCloud" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "ownCloud включен" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "ownCloud выключен" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" "ownCloud дает вам всеобщий доступ к вашим файлам через веб-интерфейс или " "WebDAV. Он также предоставляет платформу для простого просмотра и " "синхронизации ваших контактов, календарей и закладок между вашими " "устройствами и включает базовое редактирование онлайн. Установка имеет " "минимальные системные требования, не требует особых разрешений и быстра. " "ownCloud расширяется за счет простых, но мощных приложений и плагинов." #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" "Когда включен, установка ownCloud доступна по адресу /owncloud на веб-сервере. Посетите данный URL для начальной настройки " "администратора ownCloud." #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "Применить изменения" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "Открытая видимость (PageKite)" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "Включить PageKite" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "Домен сервера" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" "Выберите ваш сервер pagekite. Введите «pagekite.net», чтобы использовать " "стандартный веб-сервер pagekite.net." #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "Порт сервера" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "Порт сервера pagekite (по умолчанию: 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "Имя Kite" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "Пример: mybox.pagekite.me" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "Недопустимое имя kite" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "Кайт секрет" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" "Секрет, связанный с kite или секрет по умолчанию для вашей учетной записи, " "если не секрет устанавливается на kite." #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "Kite изменить детали" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "Смена сервера Pagekite" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "PageKite включен" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "PageKite выключен" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "Включена служба: {name}" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "Служба выключена: {name}" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "протокол" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "внешний (frontend) порт" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "Внутренний (freedombox) порт" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "Включить поддомены" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "Удалить пользовательские службы" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" "Этот сервис доступна как стандартная служба. Пожалуйста, использутей " "страницу \"Стандартные службы\" чтобы включить её." #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "Добавить пользовательскую службу" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "Эта служба уже существует" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "Учетная запись PageKite" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "Сохранить настройки" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" "Предупреждение:
Ваш PageKite frontend сервер может не " "поддерживать все комбинаци порта протокола, которые вы ввели здесь. Например " "HTTPS на порты, отличные от 443 могут вызвать проблемы." #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "Создание пользовательской службы" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "Добавление службы" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "Существующие пользовательские службы" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "У вас нет включенных пользовательских служб" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "Подключен к %(backend_host)s%(backend_port)s" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "Удалить эту службу" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" "PageKite это система для предоставления служб %(box_name)s, когда вы не " "имеет прямого доступа к интернету. Вам нужно это если службы %(box_name)s " "недоступны от остальной части интернета. Это включает в себя следующие " "ситуации:" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "%(box_name)s ограничены брандмауэром." #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" "%(box_name)s подключен к маршрутизатору (беспроводному), который вы не " "контролируете." #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" "Ваш провайдер не предоставляет вам внешний IP-адрес и вместо этого " "обеспечивает подключение к Интернету через NAT." #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" "Ваш провайдер не предоставляет вам статический IP-адрес и ваш IP адрес " "изменяется каждый раз при подключении к Интернету." #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "Ваш провайдер ограничивает входящие соединения." #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" "PageKite работает вокруг NAT, брандмауэра и ограничения IP-адреса, используя " "комбинацию туннелей и обратного прокси. Можно использовать любого поставщик " "услуг pagekite, например pagekite.net/ " "В будущем, для этого возможно будет использовать %(box_name)s вашего " "приятеля." #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "Настройка PageKite" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "Предупреждение
" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "Публичные службы доступны и уязвимы из злого интернета." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:58 msgid "Save Services" msgstr "Сохранить службы" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "Веб-сервер (HTTP)" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "Сайт будет доступен на http://{0}" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "Веб-сервер (HTTPS)" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "Сайт будет доступен на https://{0}" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "Sеcure Shell (SSH)" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" "Смотрите инструкции SSH клиента" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "Pаgekite" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "О PageKite" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "Стандартные службы" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "Пользовательские службы" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "Pоwer" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "Перезагрузка или завершение работы системы." #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "Рестарт »" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "Выключить »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" "Вы действительно хотите перезагрузиться? Вы не будете иметь доступ к веб-" "интерфейсу на время перезагрузки системы." #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "Перезагрузить сейчас" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" "Вы действительно хотите выключить. Вы не будете иметь доступ к веб-" "интерфейсу после выключения." #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "Завершить работу сейчас" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "Веб-прокси (Privoxy)" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "Privoxy Web-прокси" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Доступ к {url} с прокси {proxy} на tcp {kind}" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "Включить Privoxy" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" "Privoxy это не-кеширующий веб-прокси с расширенными возможностями фильтрации " "для повышения конфиденциальности, изменения веб-страницы данных и заголовков " "HTTP, контроля доступа и удаления рекламы и прочего неприятного мусора в " "интернете." #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" "Вы можете использовать Privoxy, изменив настройки прокси в вашем браузере на " "имя хоста %(box_name)s (или IP адрес) с портом 8118. При использовании " "Privoxy вы можете увидеть его детали настройки и документацию на http://config.privoxy.org или http://p.p." #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "Privoxy выполняется" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "Privoxy не запущена" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "IRC-клиент (Quassel)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "Quassel IRC-клиент" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "Включение службы ядра Quassel" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" "Quassel это приложение IRC, разделено на две части, \"ядро\" и \"клиент\". " "Это позволяет ядру чтобы оставаться подключенным к IRC серверу и продолжать " "получать сообщения, даже при отключении клиента. %(box_name)s может " "запустить ядро службы Quassel, держа всегда онлайн один или несколько " "клиентов. Для этого могут использоваться как клиенты настольного компьютера, " "так и мобильные версии." #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" "Порт Quassel для подключения по умолчанию является 4242. Клиенты для " "подключения к Quassel доступны по адресу для десктопов и мобильных устройств." #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "Основная служба Quassel запущена" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "Основная служба Quassel не запущена" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 msgid "SIP Server (repro)" msgstr "Сервер SIP (repro)" #: plinth/modules/repro/__init__.py:41 msgid "repro SIP Server" msgstr "repro SIP Сервер" #: plinth/modules/repro/forms.py:29 msgid "Enable repro service" msgstr "Включить службу repro" #: plinth/modules/repro/templates/repro.html:29 #, fuzzy msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" "repro предоставляет различные услуги SIP, SIP софтфон можно использовать для " "предоставления аудио и видео звонков, для мгновенных сообщений. repro " "предоставляет сервер и пользовательскую учетную запись SIP. Он также " "действует как прокси-сервер федерации SIP сообщения на другие серверы в " "Интернете, похож на электронную почту." #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" "Чтобы сделать SIP звонки, требуется клиентское приложение. Доступные " "клиенты включают Jitsi (для компьютеров) " "и CSipSimple (для Android телефонов)." #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" "Примечание Перед использованием repro. домены и " "пользователей необходиимо настроить с помощью веб-панель настроек Пользователей в группе admin могут иметь " "доступ к панели настроек repro. Аосле настройки домена, необходимо " "перезапустить службу repro. Отключить и снова включить её." #: plinth/modules/repro/templates/repro.html:63 msgid "repro service is running" msgstr "служба repro запущена" #: plinth/modules/repro/templates/repro.html:66 msgid "repro service is not running" msgstr "служба repro не запущена" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "Unhosted хранилище (reStore)" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "rеStore" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "Включить reStore" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" "reStore это сервер для unhosted веб-" "приложений. Идея заключается в том, чтобы расцепить веб-приложений от " "данных. Независимо от того, где веб-приложение выполняется, данные могут " "храниться на сервере хранения по выбору пользователя. С reStore, ваш " "%(box_name)s становится сервером хранения unhosted." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" "Можно создавать и редактировать учетные записи в веб-" "интерфейс reStore." #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "Почтовый клиент (Roundcube)" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "Включить Roundcube" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" "Roundcube webmail это осованый на браузере многоязычный IMAP клиент с " "пользовательским интерфейсом. Это предоставляет полную функциональность, " "которую вы ожидаете от почтового клиента, включая поддержку MIME, адресную " "книгу, управление папками, поиск сообщений и проверку орфографии." #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" "Вы можете получить доступ к Roundcube на /roundcube. Предоставьте имя пользователя и пароль от учетной записи " "электронной почты с указанием доменного имени IMAP сервера вашего провайдера " "электронной почты, например imap.example.com Для IMAP оver SSL " "(рекомендуется) заполните поле сервера, например " "imaps://imap.example.com." #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" "Для Gmail имя пользователя будет ваш адрес Gmail, пароль будет пароль " "учетной записи Google, и сервер будет imaps://imap.gmail.com. " "Обратите внимание, что вам также нужно включить \"Less secure apps\" в в " "настройках аккаунта Google (https://www.google.com/settings/security/lesssecureapps)." #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "Закладки (Shaarli)" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "Shаarli" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "Включить Shaarli" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "Shaarli позволяет вам сохранять и обмениваться закладками." #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" "Когда включен, Shaarli будет доступен на /shaarli " "на веб-сервере. Обратите внимание, что Shaarli поддерживает только одну " "учетную запись для начальной установки." #: plinth/modules/system/system.py:26 msgid "System" msgstr "Система" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Конфигурация системы" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "Здесь вы можете администрировать базовую систему вашего %(box_name)s." #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" "Параметры влияют на %(box_name)s на основном уровне, так что будьте " "осторожны!" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "Анонимная Сеть (Tor)" #: plinth/modules/tor/__init__.py:53 msgid "Tor Anonymity Network" msgstr "Tоr Anonymity Network" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "Ретранслятор Tor типа мост" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "Скрытый сервис Tor" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Доступен порт трансляции Tor" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3 транспорт зарегестрирован" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4 транспорт зарегистрирован" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Доступ к {url} по tcp{kind} через Tor" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Подтверждение использования Tor в {url} по tcp {kind}" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "Включить Tor" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "Включить скрытый сервис Tor" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" "Скрытый сервис позволит {box_name} предоставлять услуги, (например, ownCloud " "или чат) не раскрывая его расположение." #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "Скачать пакеты программного обеспечения через Tor" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" "Когда включен, программное обеспечение будет загруженно через сеть Tor для " "установки и обновления. Это добавляет определенную степень безопасности и " "конфиденциальности во время загрузки программного обеспечения." #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" "Tor-это система анонимного общения. Вы можете узнать больше об этом на веб-" "сайте Tor Project. Для лучшей " "защиты, когда веб-серфинга, проект Tor рекомендует использовать Tor Browser." #: plinth/modules/tor/templates/tor.html:54 msgid "Tor configuration is being updated" msgstr "В настоящее время обновляется конфигурация Tor" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor запущен" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor не запущен" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Скрытая Служба" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Порт" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Мост" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" "Ваш %(box_name)s настроен как Tor-мост с obfsproxy, поэтому он может помочь " "обойти цензуру. Если ваш %(box_name)s находится за маршрутизатором или " "брандмауэром, вы должны убедиться, что следующие порты являются открытыми и " "проброшены, если необходимо:" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Служба" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SОCKS" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "Порт Tor SOCKS вашего %(box_name)s доступен по TCP port 9050." #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Панель управления Tor" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Ошибка действий: {0}{1}{2}" #: plinth/modules/tor/views.py:148 msgid "Configuration updated." msgstr "Конфигурация обновлена." #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "Произошла ошибка во время настройки." #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmissiоn)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "BitTorrent Transmissiоn" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "Включить демона Transmission" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "Папка для загрузок" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" "Каталог, где хранятся загрузки. Если изменить каталог по умолчанию, " "убедитесь, что новый каталог существует и доступен для записи пользователем " "\"debian-transmission\" ." #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "Имя пользователя для входа на веб-интерфейс." #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" "Пароль для входа на веб-интерфейс. Текущий пароль отображается в " "хэшированном формате. Чтобы задать новый пароль, введите пароль в виде " "обычного текста." #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" "BitTorrent является протокол обмена файлами peer-to-peer. Демон передачи " "обрабатывает обмен файлами Bitorrent. Обратите внимание, что BitTorrent не " "является анонимным." #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "Доступ к веб-интерфейсу на /transmission." #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "Демон Transmission выполняется" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "Демон Transmission не выполняется." #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "Обновления программного обеспечения" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "Включение автоматического обновления" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" "При включении автоматического обновления программа будет запускаться один " "раз в день. Он будет пытаться обновить любой пакет. который будет доступен." #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" "Обновления устанавливает последнее программное обеспечение и обновления " "безопасности. Когда включены автоматические обновления, они выполняются " "каждую ночь. Обычно вам не нужно начать процесс обновления вручную." #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" "В зависимости от количества пакетов для установки это может занять " "продолжительное время до завершения. Во время обновления вы не сможете " "установить другие пакеты. Во время обновления это веб-интерфейс может быть " "временно недоступен и показывать ошибку. Обновите страницу, чтобы продолжить." #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Обновить сейчас »" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "Диспетчер пакетов выполняется." #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "Журнал обновлений:" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Автоматические обновления" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Обновление пакетов" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "Начался процесс обновления." #: plinth/modules/upgrades/views.py:99 msgid "Starting upgrade failed." msgstr "Сбой при запуске обновления." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Обновления Пакета" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "Ошибка при настройке автоматического обновления: {error}" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Автоматические обновления включены" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Автоматические обновления отключены" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Пользователи и группы" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Проверьте запись LDAP \"{search_item}\"" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "admin" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "Wiki" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "Группы" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" "Выберите, какие службы должны быть доступны для нового пользователя. " "Пользователь сможет войти в службы, которые поддерживают единый входа через " "LDAP, если они находятся в соответствующих группах.

" "Пользователи в группе администратора имеют доступ ко всем службам. Они также " "могут войти в систему через SSH и иметь административные привилегии (sudo)." #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "Не удалось добавить нового пользователя в группу {group}." #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "SSH ключи" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" "Установка открытого ключа SSH позволит пользователю безопасно войти в " "систему, не используя пароль. Вы можете ввести несколько ключей, по одному " "на каждой строке. Пустые строки и строки, начинающиеся с # будут " "игнорироваться." #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "Переименование пользователя LDAP не удалось." #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Не удалось удалить пользователя из группы." #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Не удалось добавить пользователя в группу." #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Изменение LDAP пароля пользователя не удалось." #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "Изменение пароля для %(username)s" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "Сохранить пароль" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "Создать пользователя" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Удаление пользователя" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "Окончательно удалить пользователя %(username)s?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "Удаление %(username)s" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "Удалить пользователя %(username)s" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "Редактирование пользователя %(username)s" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" "Используйте форму смены пароля для " "смены пароля." #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "Сохранить изменения" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "Пользователи" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "Пользователь %(username)s создан." #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "Пользователь %(username)s обновлен." #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "Редактирование пользователя" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Пользователь {user} удален." #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "Сбой при удалении LDAP пользователя." #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Смена пароля" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Пароль успешно изменен." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "Чат-сервер (XMPP)" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "Включить XMPP" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" "XMPP является открытым и стандартизированным коммуникационным протоколом. " "Здесь вы можете запустить и настроить сервер XMPP, называемый ejabberd." #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" "Для общения вы можете использовать веб-клиент или иной " "XMPP " "клиент." #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" "Ваш домен сервера XMPP имеет значение %(domainname)s Идентификаторы " "пользователей будет выглядеть как username@%(domainname)s. Вы можете " "настроить ваш домен на странице Настройка." #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "Запустить веб-клиент" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "ejabberd запущен" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "ejabberd не запущен" #: plinth/network.py:39 msgid "PPPoE" msgstr "PPPоE" #: plinth/package.py:156 msgid "packages not found" msgstr "пакеты не найдены" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "Установка и настройка пакетов завершена." #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "Ошибка при установке пакетов: {string}{details}" #: plinth/service.py:73 msgid "Web Server" msgstr "Веб-сервер" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "Веб-сервер через Secure Socket Layer" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "Secure Shell (SSH) сервер" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Веб-интерфейс (Plinth)" #: plinth/templates/404.html:25 msgid "404" msgstr "404" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "Запрошенная страница %(request_path)s не найдена." #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" "Если вы считаете, что эта недостающая страница должна существовать, " "пожалуйста отправите сообщение об ошибке на issue tracker." #: plinth/templates/500.html:25 msgid "500" msgstr "500" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" "Это внутренняя ошибка, не Вы были её причиной и вряд ли можете её устранить. " "Пожалуйста, сообщите об ошибке на bug tracker и мы исправим " "это." #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "Административный интерфейс Plinth для %(box_name)s" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Отображение навигации" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Смена пароля" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Выход" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Войти" #: plinth/templates/login.html:35 msgid "Login" msgstr "Логин" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "Установка" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" "Эта функция требует дополнительные пакеты для установки. Вы хотите их " "установить?" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "Пакет" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "Резюме" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "Установка" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "Установка %(package_names)s: %(status)s" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% завершено" Plinth-0.8.1/plinth/locale/sv/000077500000000000000000000000001266051671100161505ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/sv/LC_MESSAGES/000077500000000000000000000000001266051671100177355ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/sv/LC_MESSAGES/django.po000066400000000000000000003170651266051671100215530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-15 19:42+0530\n" "PO-Revision-Date: 2016-02-07 20:49+0000\n" "Last-Translator: Caly \n" "Language-Team: Swedish " "\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "Lyssnar på {kind} port {listen_address}:{port}" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "Lyssnar på {kind} port {port}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "Ansluter till adress {url} on tcp{kind}" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "Ansluter till adress {url}" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "Anslut till {host}:{port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "Kan inte ansluta till {host}:{port}" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FreedomBox" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Appar" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Applikationer" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "Tjänster och Applikationer" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" "Du kan installera och köra diverse tjänster och applikationer på din " "%(box_name)s. Klicka på valfri länk till vänster för att läsa beskrivning av " "applikationen och välja för att installera den." #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "FreedomBox kan vara din sida för att dela foton, din meddelandesida, din " "sida för socialt nätverkande, eller din nyhetssida. Minns du webb-portaler? " "Vi kan vara en sådan också. Många tjänster du använder på webben kan snart " "vara på din egen sida, under din kontroll!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "Identifiera tjänster" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "Aktivera tjänstidentifiering" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format #| msgid "" #| "Service discovery allows other machines on the network to discover your " #| "FreedomBox and services running on it. It also allows FreedomBox to " #| "discover other machines and services running on your local network. " #| "Service discovery is not essential and works only on internal networks. " #| "It may be disabled to improve security especially when connecting to a " #| "hostile local network." msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "Tjänstidentifiering tillåter andra enheter i nätverket att upptäcka din " "%(box_name)s och se vilka tjänster den kör. Det tillåter även din " "%(box_name)s att upptäcka andra maskiner och vilka tjänster de kör på ditt " "lokala nätverk. Tjänstidentifiering är inte nödvändigt och fungerar bara på " "interna nätverk. Du kan låta den vara inaktiverad för att förbättra din " "säkerhet, särskilt om du ansluter till ett osäkert lokalt nätverk." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "Status" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "Server för tjänsteidentifiering är aktiverad" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "Server för tjänsteidentifiering är inaktiverad" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "Konfiguration" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "Uppdatera inställningar" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Konfiguration uppdaterad" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Instänllningar oförändrade" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Ogiltigt domännamn" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Värdnamn" #: plinth/modules/config/config.py:97 #, python-brace-format #| msgid "" #| "Hostname is the local name by which other machines on the local network " #| "reach your machine. It must start and end with an alphabet or a digit " #| "and have as interior characters only alphabets, digits and hyphens. " #| "Total length must be 63 characters or less." msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Värdnamn är namnet på din {box_name} som andra enheter i det lokala " "nätverket kan nå dig via. Det får endast bestå av bokstäver, siffror och " "bindestreck, men får inte börja eller sluta med bindestreck. Värdnamn får " "vara max 63 tecken." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Ogiltigt värdnamn" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Domännamn" #: plinth/modules/config/config.py:110 #, python-brace-format #| msgid "" #| "Domain name is the global name by which other machines on the Internet " #| "can reach you. It must consist of labels separated by dots. Each label " #| "must start and end with an alphabet or a digit and have as interior " #| "characters only alphabets, digits and hyphens. Length of each label must " #| "be 63 characters or less. Total length of domain name must be 253 " #| "characters or less." msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "Domännamn är det globala namn som andra enheter på Internet kan nå din " "{box_name} via. Det skall bestå av ord åtskilda av punkter. Varje ord får " "endast bestå av bokstäver, siffror och bindestreck, men får inte börja eller " "sluta med bindestreck. Varje ord får vara max 63 tecken. Total längd på " "domännamnet får max vara 253 tecken." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "Språkval" #: plinth/modules/config/config.py:127 #| msgid "Language for this FreedomBox web administration interface" msgid "Language for this web administration interface" msgstr "Språkval för detta administrations-webbgränssnitt" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Konfigurera" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "Allmän Konfiguration" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "Fel inställning av värdnamn: {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "Värdnamn inställt" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "Fel inställning av domännamn: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "Domännamn inställt" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "Fel i språkinställning: {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "Språkval ändrat" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "Sänd" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "Datum & Tid" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "Tidsserver för nätverket" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "NTP-klient i kontakt med servrar" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "Aktivera nätverkstid" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "Tidszon" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" "Ställ in din tidszon för att få korrekta tidsstämplar. Detta ställer in " "tidszonen för hela systemet." #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- ingen tidszon inställd --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" "Tidsserver för nätverket är ett program som sköter synkronisering av " "systemtiden mot servrar på Internet." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "Tidsserver för nätverket är aktiverad" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "Tidsserver för nätverket är inaktiverad" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "Fel i inställning av tidszon: {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "Tidszon inställd" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "BitTorrent (Deluge)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "Deluge BitTorrent" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "Aktivera Deluge" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "BitTorrent Webbklient (Deluge)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "" "Deluge är en BitTorrentklient som inkluderar ett Webbaserat " "användargränssnitt." #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" "När aktiverad blir Deluges webbklient tillgänglig via / " "deluge address på webbservern. Standardlösenordet är \"deluge\", men du " "bör logga in och ändra det omedelbart efter att du aktiverat tjänsten." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "Deluges webbgränssnitt är aktiverat" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "Deluges webbgränssnitt är inaktiverat" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "Diagnostik" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "Systemdiagnostik" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "Diagnostiktest" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" "Systemets diagnostiktest utför ett antal kontroller av ditt system för att " "bekräfta att program och tjänster fungerar som de ska." #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "Utför diagnostik" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "Diagnotiktest körs för närvarande" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "Resultat" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "Modul: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "Diagnostikresultat" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "Modul: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "Denna modul har inte stöd för diagnostik" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "Test" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "Resultat" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Om" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dynamisk DNS (DomänNamnsServer)" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "Variablerna <User>, <Pass>, <Ip>, <Domain> kan " "användas i webbadressen. Se mallar från de olika tjänsteleverantörerna för " "information om uppdateringsadress." #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" "Välj ett uppdateringsprotokoll enligt din leverantör. Om din leverantör inte " "stöder protokollet GnudIP, eller din leverantör saknas i listan, använd din " "leverantörs uppdateringsadress." #: plinth/modules/dynamicdns/dynamicdns.py:80 #| msgid "" #| "Please do not enter a URL here (like \"https://example.com/\") but only " #| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Skriv inte en full webbadress här (t.ex.: \"https://exempel.com/\"), utan " "endast värdnamnet för GnuDIP servern (t.ex.: \"exempel.com\")." #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format #| msgid "The public domain name you want use to reach your box." msgid "The public domain name you want use to reach your {box_name}." msgstr "" "Publikt domännamn du önskar använda för att ansluta till din {box_name}." #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Använd denna funktion om din tjänsteleverantör använder självsignerade " "certifikat." #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" "Om detta alternativ är markerat, kommer ditt användarnamn och lösenord " "användas för grundläggande HTTP autentisering." #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "Lämna fältet tomt om du vill behålla tidigare konfigurerat lösenord." #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format #| msgid "" #| "Optional Value. If your FreedomBox is not connected directly to the " #| "Internet (i.e. connected to a NAT router) this URL is used to figure out " #| "the real Internet IP. The URL should simply return the IP wherethe client " #| "comes from. Example: http://myip.datasystems24.de" msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" "Tillval. Om din {box_name} inte är direkt ansluten till Internet (dvs " "anslutna via en NAT-router) används denna webbadress för att hitta korrekt " "IP. Webbadressen ska helt enkelt returnera det IP som klienten kommer från. " "(exempel: http://myip.datasystems24.de)." #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "Du bör har uppmanats att välja ett användarnamn när du skapade kontot." #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Aktivera Dynamisk DNS" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Typ av tjänst" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnudIP Serveradress" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Du har angett ett ogiltigt servernamn" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Adress för uppdateringar" #: plinth/modules/dynamicdns/dynamicdns.py:135 #| msgid "accept all SSL certificates" msgid "Accept all SSL certificates" msgstr "Acceptera alla SSL-certifikat" #: plinth/modules/dynamicdns/dynamicdns.py:139 #| msgid "use HTTP basic authentication" msgid "Use HTTP basic authentication" msgstr "Använd grundläggande HTTP-autentisering" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Användarnamn" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Lösenord" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "Visa lösenord" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "Webbadress för att kontrollera IP" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Ange uppdateringsadress eller GnuDIP-server" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Ange användarnamn för GnuDIP" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Ange GnuDIP-domän" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Ange ett lösenord" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Konfigurera Dynamisk DNS" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Status för Dynamisk DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 #| msgid "DynamicDNS client" msgid "Dynamic DNS Client" msgstr "Klient för Dynamisk DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format #| msgid "" #| "If your internet provider changes your IP address periodic (i.e. every " #| "24h) it may be hard for others to find you in the WEB. And for this " #| "reason nobody may find the services which are provided by FreedomBox " #| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Om din Internetleverantör periodiskt ändrar din IP-adress (dvs varje 24h) " "kan det vara svårt för andra att hitta dig på nätet. Då kan ingen hitta de " "tjänster som tillhandahålls av %(box_name)s (tex. din ownCloud)." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 #| msgid "" #| "The solution is to assign a DNS name to your IP address and update the " #| "DNS name every time your IP is changed by your Internet provider. Dynamic " #| "DNS allows you to push your current public IP address to an gnudip " #| "server. Afterwards the Server will assign your DNS name with the new IP " #| "and if someone from the internet asks for your DNS name he will get your " #| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" "Lösningen är att tilldela DNS-namn till din IP-adress och uppdatera DNS-namn " "varje gång din IP ändras av din Internetleverantör. Dynamisk DNS kopplar din " "nuvarande offentliga IP-adressen till en gnudip server. " "Därefter tilldelar servern ditt DNS-namn med din nya IP, och om någon från " "Internet ber om ditt DNS-namn, kommer han bli skickad till din aktuella IP." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" "Om du önskar ett gratis konto för dynamiskt DNS, kan du hitta en gratis " "GnuDIP-tjänst på " "gnudip.datasystems24.net eller så kan du hitta tjänster baserade på " "gratis uppdateringsadress från freedns.afraid.org." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format #| msgid "" #| "If your freedombox is connected behind some NAT router, don't forget to " #| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " #| "your freedombox device." msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Om din %(box_name)s är ansluten bakom en NAT-router, glöm inte att lägga " "till port forwarding (dvs vidarebefordra några standardportar, såsom 80 och " "443)." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" "Du har inaktiverat Javascript. Funktionen dynamiskt formulär är inaktiverat " "och vissa hjälpfunktioner fungerar inte (men alla huvudfunktioner bör " "fungera)." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "NAT-typ" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" "NAT-typ ännu inte upptäckt. Om du inte anger en \"IP-kontroll adress\" " "kommer vi inte att upptäcka en NAT-typ." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 #| msgid "Direct connection to the internet." msgid "Direct connection to the Internet." msgstr "Direktanslutning till Internet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format #| msgid "" #| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " #| "URL\" for changes (we need the \"IP check URL\" for this reason - " #| "otherwise we will not detect IP changes). It may take up to %(timer)s " #| "minutes until we update your DNS entry in case of WAN IP change." msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" "Bakom NAT. Detta betyder att dynamisk DNS-tjänsten kommer att fråga \"IP-" "kontrolladress\" om ändringar skett (\"IP-kontrolladress\" behöver därför " "anges, annars kan inte ändringar av IP adress upptäckas). Det kan ta upp " "till %(timer)s minuter tills din DNS-inställning uppdateras." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "Senaste uppdatering" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "Brandvägg" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format #| msgid "" #| "Firewall is a network security system that controls the incoming and " #| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " #| "and properly configured reduces risk of security threat from the Internet." msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" "Brandväggen är ett säkerhetssystem som styr den inkommande och utgående " "nätverkstrafiken på din %(box_name)s. Att ha en brandvägg aktiverad och " "korrekt konfigurerad minskar risken för säkerhetshot från Internet." #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "Nuvarande status:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" "Brandväggsdemonen körs inte. Vänligen starta den. Brandväggen är aktiverad " "som standard på %(box_name)s. På ett Debian-baserade system (till exempel " "%(box_name)s) Du kan starta den med kommandot \"service firewalld start\", " "alternativt, vid ett system med systemd \"systemctl start firewalld\"." #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "Service/Port" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Aktiverad" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Inaktiverad" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "Tillåtna" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "Tillåtna (endast interna)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "Tillåtna (endast externa)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "Blockerade" #: plinth/modules/firewall/templates/firewall.html:103 #| msgid "" #| "The operation of the firewall is automatic. When you enable a service it " #| "is automatically permitted in the firewall and you disable a service is " #| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" "Brandväggen är automatisk. När du aktiverar en tjänst tillåts den " "automatiskt i brandväggen och om du inaktiverar en tjänst, så inaktiveras " "den även automatiskt i brandväggen." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "Det gick inte att skapa LDAP-användare." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "Det gick inte att lägga till ny användare till administrationsgruppen." #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "Användarkonto skapat, du är nu inloggad" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "Hjälp" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "Starta installationsprogrammet" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" "För att slutföra installationen av din %(box_name)s, ange grundläggande " "information." #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Administratörskonto" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" "Välja ett användarnamn och lösenord för att komma åt detta webbgränssnitt. " "Lösenordet kan ändras senare. Denna användare kommer att beviljas " "administrativa privilegier. Andra användare kan läggas till senare." #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Starta upp!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "Installation klar!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format #| msgid "" #| "%(box_name)s setup is now complete. To make your %(box_name)s " #| "functional, you need some applications. Applications will be installed " #| "the first time you access them." msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" "Installationen av %(box_name)s är klar. För att göra din %(box_name)s " "funktionell, behöver du några applikationer. De kommer att installeras " "första gången du använder dem." #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "Gå till Applikationer" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 msgid "Current Network Configuration" msgstr "Aktuell Nätverkskonfiguration" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" "Du bör kontrollera nätverksinställningarna och ändra dom om det behövs. Glöm " "inte att byta ut standardösenordet för WiFi!" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Gå till Nätverk" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Installationen Klar" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "Dokumentation" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "Vart Du Kan Få Hjälp" #: plinth/modules/help/help.py:38 #, fuzzy msgid "Manual" msgstr "Manual" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "Dokumentation och Vanliga Frågor" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "Om {box_name}" #: plinth/modules/help/help.py:73 #, python-brace-format #| msgid "About {box_name}" msgid "{box_name} Manual" msgstr "{box_name} Manual" #: plinth/modules/help/templates/help_about.html:30 #, python-format #| msgid "" #| "FreedomBox is a community project to develop, design and promote personal " #| "servers running free software for private, personal communications. It " #| "is a networking appliance designed to allow interfacing with the rest of " #| "the Internet under conditions of protected privacy and data security. It " #| "hosts applications such as blog, wiki, website, social network, email, " #| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " #| "so that your data stays with you." msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" "%(box_name)s är ett kollaborativt projekt för att utveckla, designa och " "främja personliga servrar med fri programvara för privat och personlig " "kommunikation. Det är en nätverksenhet gjord för att kommunicera med resten " "av Internet under skyddad sekretess och hög datasäkerhet. Den har " "applikationer såsom blogg, wiki, hemsida, sociala nätverk, e-post, webb-" "proxy och en Tor-server, på en enhet som kan ersätta din Wi-Fi-router, så " "att din personliga data alltid stannar hos dig och under din kontroll." #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" "Vi lever i en värld där vår användning av Internet förmedlas av aktörer som " "ofta inte har våra bästa intressen i åtanke. Genom att skapa programvara som " "inte förlitar sig på en central tjänst, kan vi få kontroll och integritet. " "Genom att lagra vår data i våra hem, få vi användbart rättsligt skydd över " "den. Genom att ge kontrollen över nätverk och apparater tillbaka till " "användare, återställer vi Internet till sin avsedda icke-hierarkiska peer-to-" "peer-arkitektur." #: plinth/modules/help/templates/help_about.html:56 #, python-format #| msgid "" #| "There are a number of projects working to realize a future of distributed " #| "services; FreedomBox aims to bring them all together in a convenient " #| "package." msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" "Det finns ett flertal projekt avsedda att förverkliga en framtid av " "distribuerade tjänster. %(box_name)s avser att samla dem alla tillsammans i " "ett enda praktiskt paket." #: plinth/modules/help/templates/help_about.html:64 #, python-format #| msgid "" #| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "Mer information om %(box_name)s -projektet finns på %(box_name)s wiki." #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Läs mer »" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Du använder Plinth version %(version)s." #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "%(box_name)s Installation" #: plinth/modules/help/templates/help_index.html:29 #, python-format #| msgid "" #| "The FreedomBox Manual is the best place to " #| "start for information regarding %(box_name)s." msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "%(box_name)s Manual är det bästa stället att " "börja för aff få information om %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 #, python-format #| msgid "" #| " " #| "FreedomBox project wiki contains further information." msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" " %(box_name)" "s projekt-wiki innehåller ytterligare information." #: plinth/modules/help/templates/help_index.html:43 #, python-format #| msgid "" #| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " #| "problems faced by other users and possible solutions." msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" "För att få hjälp från %(box_name)s användargrupp kan du ställa frågor på " " e-post-lista. Arkiven innehåller även information om möjliga lösningar " "på problem som andra användare haft." #: plinth/modules/help/templates/help_index.html:53 #, python-format #| msgid "" #| "Many FreedomBox contributors and users are also available on the irc.oftc." #| "net IRC network. Join and request help on the #freedombox " #| "channel using the IRC web interface." msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" "Många utvecklare och användare av %(box_name)s finns också tillgängliga på " "IRC-nätverket irc.oftc.net. Gå med, ställ frågor och be om hjälp i " "#freedombox kanal via webbchatten." #: plinth/modules/ikiwiki/__init__.py:38 #| msgid "Wiki & Blog (Ikiwiki)" msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki och Blogg (ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 #| msgid "Ikiwiki wikis and blogs" msgid "ikiwiki wikis and blogs" msgstr "ikiwiki wikis och bloggar" #: plinth/modules/ikiwiki/forms.py:29 #| msgid "Enable Ikiwiki" msgid "Enable ikiwiki" msgstr "Aktivera ikiwiki" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "Typ" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "Namn" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "Namn på administratörskontot" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "Lösenord för administratörskontot" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" "När aktiverade kommer bloggar och wikis att vara tillgänglig på /ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format #| msgid "Delete Wiki/Blog %(name)s" msgid "Delete Wiki or Blog %(name)s" msgstr "Ta bort Wiki eller Blogg %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 #| msgid "" #| "This action will remove all the posts, pages and comments including " #| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" "Den här åtgärden tar bort alla inlägg, sidor och kommentarer, även " "versionshistorik. Ta bort denna wiki eller blogg permanent?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Ta bort %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "Avbryt" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "Ingen wiki eller blogg tillgänglig." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "Skapa en wiki eller blogg" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "Ta bort webbsida %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "Gå till webbsidan %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "Hantera" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "Skapa" #: plinth/modules/ikiwiki/views.py:73 #| msgid "Wiki & Blog" msgid "Wiki and Blog" msgstr "Wiki och Blogg" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "Hantera wikis och bloggar" #: plinth/modules/ikiwiki/views.py:132 #| msgid "Create a Wiki or Blog" msgid "Create Wiki or Blog" msgstr "Skapa en Wiki eller Blogg" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "Skapade wiki {name}." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "Kunde inte skapa wiki: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "Blogg skapad {name}." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "Kunde inte skapa blogg: {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "{name} borttagen." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "Kunde inte ta bort {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 #| msgid "Delete Wiki/Blog" msgid "Delete Wiki or Blog" msgstr "Ta Bort Wiki eller Blogg" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "Certifikat (Let's Encrypt)" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" "Ett digitalt certifikat låter användare av en webbtjänst verifiera " "identiteten på tjänsten och kommunicera säkert med den. %(box_name)s kan " "automatiskt hämta och installera digitala certifikat för varje tillgänglig " "domän. Detta sker genom att den bevisar sig vara ägare till en domän för " "Let's Encrypt, en auktoriserad certifikatutfärdare ." #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" "Let's Encrypt en är gratis, automatiserad och öppen certifikatutfärdare, " "använd för allmänhetens nytta av Internet Security Research Group (ISRG). " "Läs igenom och acceptera Let's Encryp användaravtal innan du använder denna tjänst." #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 msgid "Domain" msgstr "Domän" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "Certifikatets status" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "Säkerhet för webbsida" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 msgid "Actions" msgstr "Åtgärder" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "Giltig tills %(expiry_date)s" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "Inget certfikat" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "Återkalla" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "Återfå" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "Skaffa" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "Certifikatet återkallat för domänen {domain}" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "Det gick inte att återkalla certifikatet för domänen {domain}: {error}" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "Certifikat erhållet för domänen {domain}" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "Det gick inte att erhålla certifikat för domänen {domain}: {error}" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "Monkeysphere" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" "Med Monkeysphere, kan en PGP-nyckel genereras för varje konfigurerad domän " "som erbjuder SSH. Den offentliga PGP-nyckeln kan sedan laddas upp till PGP " "nyckelservrar. Användare som ansluter till denna enhet via SSH kan verifiera " "att de ansluter till rätt värd. För att användare ska kunna lita på " "nyckeln, måste minst en person (vanligtvis enheytens ägare) signera nyckeln " "genom att använda den normala processen för PGP-nyckel signering. Se Monkeysphere SSH " "dokumentation för mer information." #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "Publicerar nyckeln till nyckelserver..." #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "GPG Fingeravtryck" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "Inte tillgänglig" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "Generera PGP-nyckel" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "Publicera nyckel" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "PGP-nyckel genererad." #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "Publicering av nyckel avbruten." #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "Publicerade nyckeln till nyckelserver." #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "Fel uppstod när nyckeln publicerades." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "Röstchatt (Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "Server för Mumble röstchatt" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "Aktivera Mumble-demon" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" "Mumble är ett program för röstchatt med öppen källkod, låg latens, " "kryptering och hög ljudkvalitet." #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "Du kan ansluta till din Mumble-server på Mumbles standardport 64738. Appar finns för att ansluta till Mumble från din " "dator- och Android-enheter." #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "Mumble-servern är aktiverad" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "Mumble-servern är inaktiverad" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Namntjänster" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Använder DNSSEC på IPv{kind}" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "Anslutningstyp" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Anslutningens namn" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Fysiskt gränssnitt" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "Den nätverksenhet som denna anslutning ska knytas till." #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Brandväggs-zon" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" "Brandväggs-zonen bestämmer vilka tjänster är tillgängliga genom detta " "gränssnitt. Välj endast interna för betrodda nätverk." #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "Addresseringsmetod för IPv4" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" "Metoden \"Delad\" kommer att starta en DHCP-server. Metoden \"Automatisk\" " "kommer att hämta konfiguration från en DHCP-server." #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adress" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Nätmask" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" "Valfritt värde. Om detta lämnas tomt kommer en standard nätmask baserad på " "adressen användas." #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Gateway" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Valfritt värde." #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS-Server" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Valfritt värde. Om detta anges och IPv4-adresserings metod är satt till \"" "Automatisk\", kommer DNS-servrar tillhandahållna av en DHCP-server att " "ignoreras." #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Sekundär DNS-server" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Valfritt värde. Om värde anges och IPv4-adresseringsmetod är \"Automatisk\", " "kommer DNS-servrar tillhandahållna av en DHCP-server att ignoreras." #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "--Välj--" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Synligt namn för nätverket." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Läge" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Autentiseringsläge" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" "Välj WPA om det trådlösa nätverket är säkert och kräver att användare har " "lösenord för att ansluta." #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Lösenord" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Nätverksanslutningar" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Wi-Fi-nätverk i närheten" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Lägg till Anslutning" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "Nätverk" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "Kan inte visa anslutning: Ingen anslutning hittades." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "Visa Anslutningsinformation" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "Kan inte redigera anslutning: Ingen anslutning hittades." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "Denna typ av anslutning är inte förstådd ännu." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Redigera Anslutning" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Aktiverad anslutning {name}." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Det gick inte att aktivera anslutning: Ingen anslutning hittades." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" "Det gick inte att aktivera anslutningen {name}: Ingen lämplig enhet är " "tillgänglig." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Inaktiverade anslutning {name}." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Kunde inte de-aktivera anslutning: Anslutning hittades inte." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Lägg Till Ny Ethernet-Anslutning" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Lägg Till Ny PPPoE-Anslutning" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Lägg Till Ny Wi-Fi-Anslutning" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Anslutning {name} borttagen." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Det gick inte att ta bort anslutning: Anslutning hittades inte." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Ta Bort Anslutning" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "Redigera anslutning" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "Redigera" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "Avaktivera" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "Aktivera" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "Ta bort anslutning" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "Ta bort" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "Anslutning" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "Primär anslutning" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "Ja" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "Enhet" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "" #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "" #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "" #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "" #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "" #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 #| msgid "GnudIP Server Address" msgid "SIP Server (repro)" msgstr "SIP-Server (repro)" #: plinth/modules/repro/__init__.py:41 msgid "repro SIP Server" msgstr "" #: plinth/modules/repro/forms.py:29 #| msgid "Enable service discovery" msgid "Enable repro service" msgstr "Aktivera tjänsten repro" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 #| msgid "Mumble server is running" msgid "repro service is running" msgstr "Tjänsten repro är aktiverad" #: plinth/modules/repro/templates/repro.html:66 #| msgid "Mumble server is not running" msgid "repro service is not running" msgstr "Tjänsten repro är inaktiverad" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" #: plinth/modules/system/system.py:26 msgid "System" msgstr "" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "" #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "" #: plinth/modules/tor/__init__.py:53 #| msgid "Go to Networks" msgid "Tor Anonymity Network" msgstr "Tor Anonymitetsnätverk" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" #: plinth/modules/tor/templates/tor.html:54 #| msgid "Configuration updated" msgid "Tor configuration is being updated" msgstr "Konfigurationen av Tor uppdateras" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" #: plinth/modules/tor/views.py:148 #| msgid "Configuration updated" msgid "Configuration updated." msgstr "Konfiguration uppdaterad." #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "" #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "" #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "" #: plinth/modules/upgrades/views.py:99 #| msgid "Creating LDAP user failed." msgid "Starting upgrade failed." msgstr "Det gick inte att starta uppgraderingen." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "" #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "" #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "" #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "" #: plinth/network.py:39 msgid "PPPoE" msgstr "" #: plinth/package.py:156 msgid "packages not found" msgstr "" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "" #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "" #: plinth/service.py:73 msgid "Web Server" msgstr "" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 msgid "404" msgstr "" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "" #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" #: plinth/templates/500.html:25 msgid "500" msgstr "" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" #: plinth/templates/login.html:35 msgid "Login" msgstr "" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "" #~ msgid "show password" #~ msgstr "Visa lösenord" #~ msgid "The following is the current status:" #~ msgstr "Aktuell status:" #~ msgid "FreedomBox Manual" #~ msgstr "FreedomBox Manual" #~ msgid "Create Wiki/Blog" #~ msgstr "Skapa wiki eller blogg" Plinth-0.8.1/plinth/locale/te/000077500000000000000000000000001266051671100161305ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/te/LC_MESSAGES/000077500000000000000000000000001266051671100177155ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/te/LC_MESSAGES/django.po000066400000000000000000002755241266051671100215360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Bhuvan Krishna , 2015 # gvsgiri , 2015 msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2016-01-16 02:37+0000\n" "Last-Translator: Caly \n" "Language-Team: Telugu \n" "Language: te\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "పోర్ట్{listen_address}:{port} పై ఆలకించమండి {kind}" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "పోర్ట్ {port} పై ఆలకించమండి {kind}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "tcp పై {kind} URL {url}ప్రవేశము" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "URL {url} ప్రవేశము" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "అనుసంధానించండి {host}:{port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "అనుసంధానించండం సాధ్యంకాదు {host}:{port}" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "అనువర్తనాలు" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "అనువర్తనాలు" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "సేవ మరియు అనువర్తనాలు" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "ఆవిష్కరణ సేవ" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "ఆవిష్కరణ సేవను అమలుచెయ్యి" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "స్థితి" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "సేవ ఆవిష్కరణ సేవికను నడుపుతోంది" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "సేవ ఆవిష్కరణ సేవికను నడుపటంలేదు" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "ఆకృతీకరణ" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "అమర్చి తాజాపరుచు" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "ఆకృతీకరణ తాజాపరుచింది" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "మారకుండా అమర్చుతోంది" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "అధికారక్షేత్రం పేరు చెల్లదు" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "ఆహ్వానించువ్యక్తి పేరు" #: plinth/modules/config/config.py:97 #, python-brace-format msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "ఆహ్వానించువ్యక్తి పేరు చెల్లదు" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "అధికారక్షేత్రం పేరు" #: plinth/modules/config/config.py:110 #, python-brace-format msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" #: plinth/modules/config/config.py:125 msgid "Language" msgstr "" #: plinth/modules/config/config.py:127 msgid "Language for this web administration interface" msgstr "" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "ఆకృతీకరణ" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "సాధారణ ఆకృతీకరణ" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "ఆహ్వానించువ్యక్తి పేరు అమర్పులోపం: {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "ఆహ్వానించువ్యక్తి పేరు అమర్చు" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "అధికారక్షేత్రం పేరు అమర్పులోపం: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "అధికారక్షేత్రం పేరు అమర్పు" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "సమర్పణ" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "తేదీ & సమయం" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "అల్లిక సేవిక సమయం" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "సేవిక తో NTPవినియోగదారుని సంబంధం" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "అల్లిక సమయం అమలుచెయ్యి" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "సమయమండలం" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- సమయమండలం మార్పులేదు --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "అల్లిక సమయం సేవికను నడుపుతోంది" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "అల్లిక సమయం సేవికను నడవడం లేదు" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "సమయమండలం అమర్పులోపం: {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "సమయమండలి సమితి" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "బిట్ టొర్రెంట్ (ప్రళయం)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "బిట్ టొర్రెంట్ ప్రళయం" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "ప్రళయనిఅమలుచెయ్యి" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "బిట్ టొర్రెంట్ మహాతలం వినియోగదారుడు (ప్రళయం)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "" #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "మహాతలం-ప్రళయం నడుపుతోంది" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "మహాతలం-ప్రళయం నడవడంలేదు" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "లక్షణములు" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "లక్షణములు వ్యవస్థ" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "లక్షణములు పరీక్ష" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "లక్షణములు నడుచు" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "ప్రస్తుతం లక్షణములు పరీక్ష నడుస్తుంది" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "ఫలితాలు" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "అధిభాగం: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "లక్షణములు ఫలితాలు" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "అధిభాగం: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "పరీక్ష" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "ఫలితం" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "గురించి" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "చురుకైన DNS" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format msgid "The public domain name you want use to reach your {box_name}." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "చురుకైన DNS అమలుచెయ్యి" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "సేవ రకం" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "సేవిక చిరునామా GnudIP" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "సేవిక పేరు చెలదు" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "URL నవీకరణ" #: plinth/modules/dynamicdns/dynamicdns.py:135 msgid "Accept all SSL certificates" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:139 #, fuzzy #| msgid "use HTTP basic authentication" msgid "Use HTTP basic authentication" msgstr "HTTP ప్రాథమిక ప్రమాణీకరణ ఉపయోగించు" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "వినియోగి పేరు" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "రహస్యపదం" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "రహస్యపదం కనబర్చు" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP తనిఖీ URL" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "URL నవీకరణ దయచేసి అందించండి లేక ఒక GnuDIP సేవిక" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "GnuDIPవాడుకరిపేరుని దయచేసి అందించండి" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "GnuDIP అధికారక్షేత్రం దయచేసి అందించండి" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "ఒక రహస్యపదం అందించండి దయచేసి" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "చురుకైనDNS ఆకృతీకరించు" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "చురుకైనDNS స్థితి" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 #, fuzzy #| msgid "DynamicDNS client" msgid "Dynamic DNS Client" msgstr "చురుకైనDNS వినియోగదారుడు" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "NAT రకం" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 #, fuzzy #| msgid "Direct connection to the internet." msgid "Direct connection to the Internet." msgstr "అంతర్జాలిక కు నేరుగా బంధం." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "చివరి నవీకరణ" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "ఫైర్వాల్" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "సేవ / పోర్ట్" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "క్రియాశీలీ" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "నిరుపయోగ" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "అనుమతించబడిన" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "అనుమతించబడిన(అంతర్గతంగ మాత్రమే)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "అనుమతించబడిన(బాహ్యం మాత్రమే)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "నిరోధించు" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "వినియోగదారుడు LDAP సృష్టిస్తోంది విఫలమైంది." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "" #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "సహాయం" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 #, fuzzy #| msgid "Start setup" msgid "Start Setup" msgstr "అమర్చిపెట్టు ప్రారంభం" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "నిర్వాహక ఖాతా" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "ఇది పెట్టెపైకి!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "అమరక పూర్తయ్యింది!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "అనువర్తనాల వైపు వెళ్ళండి" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 #, fuzzy #| msgid "Network Configuration" msgid "Current Network Configuration" msgstr "అల్లిక రూపకరణ" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "అల్లిక వైపు వెళ్ళండి" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "అమరక పూర్తయ్యింది" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "పత్రరచన" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "సహాయాం ఎక్కడ పొందగలం" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "పత్రరచన మరియు తరచుగా అడుగు ప్రశ్నలు" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "{box_name} గురించి" #: plinth/modules/help/help.py:73 #, fuzzy, python-brace-format #| msgid "About {box_name}" msgid "{box_name} Manual" msgstr "{box_name} గురించి" #: plinth/modules/help/templates/help_about.html:30 #, python-format msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" #: plinth/modules/help/templates/help_about.html:56 #, python-format msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 #, python-format msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 #, python-format msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 #, python-format msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 #, fuzzy #| msgid "Wiki & Blog (Ikiwiki)" msgid "Wiki and Blog (ikiwiki)" msgstr "వికీ&బ్లాగ్ (Ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 #, fuzzy #| msgid "Ikiwiki wikis and blogs" msgid "ikiwiki wikis and blogs" msgstr "వికీలు మరియు బ్లాగ్ లు Ikiwik" #: plinth/modules/ikiwiki/forms.py:29 #, fuzzy #| msgid "Enable Ikiwiki" msgid "Enable ikiwiki" msgstr "Ikiwiki అమలుచెయ్యి" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "రకం" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "పేరు" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, fuzzy, python-format #| msgid "Delete Connection %(name)s" msgid "Delete Wiki or Blog %(name)s" msgstr "అనుసంధానం తొలగించు %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "తొలగించు %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "రద్దు" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "వికీలు లేదా బ్లాగులు అందుబాటులో లేవు." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "ఒక వికీ లేదా బ్లాగ్ సృష్టించు" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "ప్రదేశం తొలగించు %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "ప్రదేశం కు వెళ్ళండి %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "నిర్వహించండి" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "సృష్టించు" #: plinth/modules/ikiwiki/views.py:73 #, fuzzy #| msgid "Wiki & Blog" msgid "Wiki and Blog" msgstr "వికీ & బ్లాగ్" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "వికీ మరియు బ్లాగ్ నిర్వహించండి" #: plinth/modules/ikiwiki/views.py:132 #, fuzzy #| msgid "Create a Wiki or Blog" msgid "Create Wiki or Blog" msgstr "ఒక వికీ లేదా బ్లాగ్ సృష్టించు" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "వికీ {name} సృష్టించంది." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "వికీని సృష్టించలేము: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "బ్లాగ్ సృష్టించంది {name}." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "బ్లాగ్ సృష్టించలేము: {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "తొలగించు {name}." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "తొలగిమంచలేము {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 #, fuzzy #| msgid "Delete Wiki/Blog" msgid "Delete Wiki or Blog" msgstr "వికీ/బ్లాగ్ తొలగించు" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 #, fuzzy #| msgid "Domain Name" msgid "Domain" msgstr "అధికారక్షేత్రం పేరు" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 #, fuzzy #| msgid "Security" msgid "Website Security" msgstr "భద్రత" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 #, fuzzy #| msgid "Applications" msgid "Actions" msgstr "అనువర్తనాలు" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "మాటామంతి గాత్రం (Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "మంబ్లు సేవిక మాటామంతి గాత్రం" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "సూత్రధారి మంబ్లు అమలుచెయ్యి" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "మంబ్లు సేవిక నడుస్తుంది" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "మంబ్లు సేవిక నడవంలేదు" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "IPv{kind} పై DNSSEC ఉపయోగించు" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "సంధాన రకం" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "సంధాన పేరు" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "శారీరక సంవిధానం" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "ఫైర్వాల్ క్షేత్రాం" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 చిరునామాయిచు పద్దతి" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "చిరునామా" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "గేట్వే" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" #: plinth/modules/networks/forms.py:71 #, fuzzy #| msgid "DNS server" msgid "DNS Server" msgstr "సేవిక" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:78 #, fuzzy #| msgid "DNS server" msgid "Second DNS Server" msgstr "సేవిక" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "--ఎంచుకొ--" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "అల్లిక యొక్క కనిపించే పేరు." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "విధం" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "ప్రామాణీకరణ విధం" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "రహస్య పదం" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "అల్లిక అనుసంధానములు" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "సమీపంలో Wi-Fi అల్లిక" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "అనుసంధానం జతచేయుండి" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "అల్లిక" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "అనుసంధానం చూపించడంలేదు: అనుసంధానం దొరకలేదు." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "అనుసంధానం సమాచారం చూపించు" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "దొరకలేదు అనుసంధానం: అనుసంధానని సవరించడం సాధ్యపడదు." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "అనుసంధాన రకం ఇంకా అర్థంకాలేదు." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "అనుసంధానని సవరించడం" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "అనుసంధానం ఉత్తేజపరిచింది {name}." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "అనుసంధానాన్ని ఉత్తేజపరచటంలొ విఫలమైంది: అనుసంధానం దొరకలేదు." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "అనుసంధానాన్ని ఉత్తేజపరచటంలొ విఫలమైంది {name}: సరైన పరికరం అందుబాటులో లేదు." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "క్రియారహిత అనుసంధానం {name}." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "అనుసంధానం క్రియారహితం విఫలమైంది: కనెక్షన్ దొరకలేదు." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "కొత్త ఈథర్నెట్ అనుసంధానన్ని కలుపుతోంది" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "కొత్త PPPoE అనుసంధానన్ని కలుపుతోంది" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "కొత్త Wi-Fi అనుసంధానన్ని కలుపుతోంది" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "అనుసంధానం {name} తొలగించారు." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "అనుసంధానం తొలగించడం విఫలమైంది: అనుసంధానం దొరకలేదు." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "అనుసంధానం తొలగించారు" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "అనుసంధానన్ని సవరించు" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "సవరించు" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "క్రియారహితం" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "క్రియాశీల" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "అనుసంధానం తొలగించారు" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "తొలగించారు" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "అనుసంధానం" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "ప్రాథమిక అనుసంధానం" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "అవును" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "పరికరం" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "స్థితి" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "స్థితి కారణాం" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "MAC చిరునామా" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "అంతర్ముఖం" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "వివరణ" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "శారీరక జోడింపు" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "జోడింపు స్థితి" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "కేబుల్ అనుసంధానించబడిన" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "దయచేసి కేబుల్ తనిఖీ చెయ్యండి" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "వేగం" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "సంకేత బలం" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "మార్గం" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IPv4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "పద్దతి" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "IP చిరునామా" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "సేవిక" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "అప్రమేయం" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IPv6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "ఈ అనుసంధానం చురుకుగాలేదు." #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "భద్రత" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "ఫైర్వాల్ క్షేత్రాం" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "సృష్టించు..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "అనుసంధానం సృష్టించు" #: plinth/modules/networks/templates/connections_delete.html:29 #, fuzzy, python-format #| msgid "Delete connection permanently?" msgid "Delete connection %(name)s permanently?" msgstr "అనుసంధానం తొలగించారు శాశ్వతంగా?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "ఇంటర్ నెట్" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "అంతరం" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "బహిర్గత" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "ఈథర్నెట్" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "Wi-Fi" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "అనుసంధానం చూపించు %(connection.name)s" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "అంతర్గత" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "అనుసంధానం చూపించు %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "కంప్యూటర్" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "అనుసంధానం తొలగించు %(name)s" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "క్రియాశీల" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "క్రియారహిత" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "స్వంత్ర అల్లిక వాస్తవప్రతిరూపం (OpenVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "తెరచినVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "సేవిక తెరవండిVPN అమలుచెయ్యి" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "స్థూల వివరం" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "నా స్థూలవివరంల దిగుమతి" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "అమర్చిపెట్టు ప్రారంభం" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "అమర్చిపెటినా తెరిచినVPNనడుస్తుంది" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "అమర్చిపెటినా తెరిచినVPNనడుస్తుంది" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "అమర్చిపెటినా తెరిచినVPN నడంలేదు" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "అమరక పూర్తయ్యింది." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "అమరక విఫలమైంది." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "ఓనక్లాఉడ్ అమలుచెయ్యి" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "దస్ర్తా ఆహ్వానం (ownCloud)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "ఓనక్లాఉడ్" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "" #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" #: plinth/modules/quassel/templates/quassel.html:55 #, fuzzy #| msgid "Mumble server is running" msgid "Quassel core service is running" msgstr "మంబ్లు సేవిక నడుస్తుంది" #: plinth/modules/quassel/templates/quassel.html:58 #, fuzzy #| msgid "Mumble server is not running" msgid "Quassel core service is not running" msgstr "మంబ్లు సేవిక నడవంలేదు" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 #, fuzzy #| msgid "GnudIP Server Address" msgid "SIP Server (repro)" msgstr "సేవిక చిరునామా GnudIP" #: plinth/modules/repro/__init__.py:41 #, fuzzy #| msgid "DNS server" msgid "repro SIP Server" msgstr "సేవిక" #: plinth/modules/repro/forms.py:29 #, fuzzy #| msgid "Enable OpenVPN server" msgid "Enable repro service" msgstr "సేవిక తెరవండిVPN అమలుచెయ్యి" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 #, fuzzy #| msgid "Mumble server is running" msgid "repro service is running" msgstr "మంబ్లు సేవిక నడుస్తుంది" #: plinth/modules/repro/templates/repro.html:66 #, fuzzy #| msgid "Mumble server is not running" msgid "repro service is not running" msgstr "మంబ్లు సేవిక నడవంలేదు" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "" #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" #: plinth/modules/system/system.py:26 msgid "System" msgstr "" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "" #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "" #: plinth/modules/tor/__init__.py:53 #, fuzzy #| msgid "Go to Networks" msgid "Tor Anonymity Network" msgstr "అల్లిక వైపు వెళ్ళండి" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" #: plinth/modules/tor/templates/tor.html:54 #, fuzzy #| msgid "Configuration updated" msgid "Tor configuration is being updated" msgstr "ఆకృతీకరణ తాజాపరుచింది" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" #: plinth/modules/tor/views.py:148 #, fuzzy #| msgid "Configuration updated" msgid "Configuration updated." msgstr "ఆకృతీకరణ తాజాపరుచింది" #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" #: plinth/modules/transmission/forms.py:40 #, fuzzy #| msgid "Direct connection to the internet." msgid "Username to login to the web interface." msgstr "అంతర్జాలిక కు నేరుగా బంధం" #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "" #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "" #: plinth/modules/upgrades/views.py:99 #, fuzzy #| msgid "Setup failed." msgid "Starting upgrade failed." msgstr "అమరక విఫలమైంది." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "" #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" #: plinth/modules/users/templates/users_delete.html:29 #, fuzzy, python-format #| msgid "Delete connection permanently?" msgid "Delete user %(username)s permanently?" msgstr "అనుసంధానం తొలగించారు శాశ్వతంగా?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "" #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "" #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "" #: plinth/network.py:39 msgid "PPPoE" msgstr "" #: plinth/package.py:156 msgid "packages not found" msgstr "" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "" #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "" #: plinth/service.py:73 msgid "Web Server" msgstr "" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 msgid "404" msgstr "" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "" #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" #: plinth/templates/500.html:25 msgid "500" msgstr "" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" #: plinth/templates/login.html:35 msgid "Login" msgstr "" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "" #~ msgid "show password" #~ msgstr "రహస్యపదం చూపించు" #~ msgid "The following is the current status:" #~ msgstr "ఇది ప్రస్తుత స్థితి:" #~ msgid "Next" #~ msgstr "తర్వాత" #~ msgid "FreedomBox Manual" #~ msgstr "ఫ్రీడమ్ బాక్స్ నిర్దేశిక" #~ msgid "Create Wiki/Blog" #~ msgstr "వికీ/బ్లాగ్ సృష్టించు" #~ msgid "Physical interface" #~ msgstr "శారీరక సంవిధానం" Plinth-0.8.1/plinth/locale/tr/000077500000000000000000000000001266051671100161455ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/tr/LC_MESSAGES/000077500000000000000000000000001266051671100177325ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/tr/LC_MESSAGES/django.po000066400000000000000000003775311266051671100215540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2016-02-02 19:24+0000\n" "Last-Translator: ultrapeer \n" "Language-Team: Turkish " "\n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "{kind} port {listen_address}:{port} dinleniyor" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "{kind} port {port} dinleniyor" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "tcp{kind} üzerinden {url} bağlantısına eriş" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "{url} bağlantısına eriş" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "{host}:{port} konumuna bağlan" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "{host}:{port} konumuna bağlanılamadı" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FreedomBox" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Uygulamalar" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Uygulamalar" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "Servisler ve Uygulamalar" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "" "%(box_name)s kutunuza çeşitli servis ve uygulamalar kurup " "çalıştırabilirsiniz. Herhangi bir uygulamanın açıklamasını okuyup onu " "kurmayı seçmek için sol taraftaki uygulama sayfası bağlantısına tıklayın." #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "Bu kutu fotoğraf paylaşma siteniz, anında mesajlaşma siteniz, sosyal ağ " "siteniz, haberler siteniz olabilir. Ağ portallarını hatırlıyor musunuz? " "Onlardan biri de olabiliriz. Web üzerinde kullandığınız servislerin birçoğu " "yakında sizin evinizde ve sizin kontrolünüzde olabileceklerdir!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "Servis Keşfi" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "Servis keşfini etkinleştir" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format #| msgid "" #| "Service discovery allows other machines on the network to discover your " #| "FreedomBox and services running on it. It also allows FreedomBox to " #| "discover other machines and services running on your local network. " #| "Service discovery is not essential and works only on internal networks. " #| "It may be disabled to improve security especially when connecting to a " #| "hostile local network." msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "Servis keşfi şebekedeki diğer makinelerin sizin %(box_name)s kutunuzu ve " "onun üzerinde çalışan servisleri keşfetmelerine yarar. Buna ek olarak " "%(box_name)s kutusunun yerel ağınızdaki diğer makineleri ve etkin servisleri " "keşfetmesine de yarar. Servis keşfi mutlaka gerekli değildir ve sadece " "dahili şebekelerde çalışır. Özellikle düşman yerel bir ağa bağlanıldığında " "güvenliği arttırmak için devre dışı bırakılabilir." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "Durum" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "Servis keşfi sunucusu çalışmaktadır" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "Servis keşfi sunucusu çalışmamaktadır" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "Yapılandırma" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "Kurulumu güncelle" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Kurulum güncellendi" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Ayar değiştirilmedi" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Geçersiz alan ismi" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Makine ismi" #: plinth/modules/config/config.py:97 #, python-brace-format #| msgid "" #| "Hostname is the local name by which other machines on the local network " #| "reach your machine. It must start and end with an alphabet or a digit " #| "and have as interior characters only alphabets, digits and hyphens. " #| "Total length must be 63 characters or less." msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Makine ismi yerel şebekedeki diğer cihazların sizin {box_name} kutunuza " "erişmebilmek için kullanacakları yerel isimdir. Bir harf ya da sayı ile " "başlayıp sona ermesi gerekir ve sadece alfabe harfleri, sayılar ve tireler " "içerebilir. Toplam uzunluğun 63 karakter veya daha azı olması gerekmektedir." #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Geçersiz makine ismi" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Alan Adı" #: plinth/modules/config/config.py:110 #, python-brace-format #| msgid "" #| "Domain name is the global name by which other machines on the Internet " #| "can reach you. It must consist of labels separated by dots. Each label " #| "must start and end with an alphabet or a digit and have as interior " #| "characters only alphabets, digits and hyphens. Length of each label must " #| "be 63 characters or less. Total length of domain name must be 253 " #| "characters or less." msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" "Alan adı, İnternet'teki diğer cihazların sizin {box_name} kutunuza erişmek " "için kullanacakları global isimdir. Noktalarla ayrılmış gruplardan " "oluşmalıdır. Her grubun bir alfabe harfi ya da bir sayı ile başlaması ve " "sona ermesi gerekir ve içerik harfler, sayılar ve tireler ile sınırlı " "kalmalıdır. Her grubun uzunluğu 63 karakter ya da daha azı olmalıdır. Alan " "adının toplam uzunluğu 253 karakter ya da daha azı olmalıdır." #: plinth/modules/config/config.py:125 msgid "Language" msgstr "Lisan" #: plinth/modules/config/config.py:127 #| msgid "Language for this FreedomBox web administration interface" msgid "Language for this web administration interface" msgstr "Bu web yönetim arayüzü için kullanılacak dil" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Yapılandır" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "Genel Yapılandırma" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "Makine isminin ayarlanmasında hata: {exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "Makine ismi ayarlandı" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "Alan adının ayarlanmasında hata: {exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "Alan adı ayarlandı" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "Dilin ayarlanmasında hata: {exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "Dil değiştirildi" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "İbraz Et" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "Tarih & Zaman" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "Ağ Zaman Sunucusu" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "Sunucularla iletişimde NTP istemcisi" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "Ağ zamanını etkinleştir" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "Saat Dilimi" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "" "Zaman damgalarının doğru olması için saat diliminizi ayarlayın. Bu, tüm " "sistem için saat dilimini ayarlayacaktır." #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- hiçbir saat dilimi girilmemiştir --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" "Ağ zaman sunucusu, İnternet'teki sunucular ile sistem zamanını eş tutan bir " "programdır." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "Ağ zaman sunucusu çalışmaktadır" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "Ağ zaman sunucusu çalışmamaktadır" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "Saat diliminin ayarlanmasında hata: {exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "Saat dilimi ayarlandı" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "BitTorrent (Deluge)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "Deluge BitTorrent" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "Deluge'ü Etkinleştir" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "BitTorrent Web İstemcisi (Deluge)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "Deluge, ağ arayüzü sunan bir BitTorrent istemcisidir." #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" "Etkinleştirildiğinde, Deluge ağ istemcisine erişim ağ (web) sunucusunda /deluge yolundan mümkün olacaktır. Varsayılan parola " "şudur: 'deluge'. Ancak servisi etkinleştirdikten sonra giriş yapıp onu " "derhal değiştirmeniz gerekmektedir." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "deluge-web çalışmaktadır" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "deluge-web çalışmamaktadır" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "Teşhisler" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "Sistem Teşhisleri" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "Teşhis Testi" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "" "Sistem teşhis testi uygulamaların ve servislerin beklenildiği gibi " "çalıştıklarını teyit etmek için sisteminizde bir takım kontroller yapacaktır." #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "Teşhisleri Çalıştır" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "Teşhis testi şu anda çalışmaktadır" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "Sonuçlar" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "Öbek: %(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "Teşhis Sonuçları" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "Öbek: %(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "Bu öbek teşhisleri desteklememektedir" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "Test" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "Sonuç" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Hakkında" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dinamik DNS" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "<User>, <Pass>, <Ip>, <Domain> değişkenleri URL'de " "(bağlantıda) kullanılabilir. Ayrıntılar için örnek sunucuların URL " "güncelleme şablonlarına bakınız." #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" "Lütfen sağlayıcınızla uyumlu bir güncelleme protokolü seçin. Eğer " "sağlayıcınız GnudIP protokolünü desteklemiyorsa ya da listelenmemişse " "sağlayıcınızın güncelleme bağlantısını (URL) kullanabilirsiniz." #: plinth/modules/dynamicdns/dynamicdns.py:80 #| msgid "" #| "Please do not enter a URL here (like \"https://example.com/\") but only " #| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Buraya lütfen \"https://example.com/\" gibi bir URL girmeyin, sadece GnuDIP " "sunucusunun makine ismini girin (\"example.com\" gibi)." #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format #| msgid "The public domain name you want use to reach your box." msgid "The public domain name you want use to reach your {box_name}." msgstr "" "{box_name} kutunuza erişilmesi için kullanmak istediğiniz herkese açık alan " "ismi." #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Sağlayıcınız kendi imzaladığı sertifikalar kullanıyorsa bu seçeneği kullanın." #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" "Eğer bu seçenek seçiliyse, kullanıcı isminiz ve parolanız temel HTTP kimlik " "doğrulaması için kullanılacaktır." #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" "Önceki yapılandırılmış parolanızı tutmak istiyorsanız bu alanı boş bırakın." #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format #| msgid "" #| "Optional Value. If your FreedomBox is not connected directly to the " #| "Internet (i.e. connected to a NAT router) this URL is used to figure out " #| "the real Internet IP. The URL should simply return the IP wherethe client " #| "comes from. Example: http://myip.datasystems24.de" msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" "Seçeneğe bağlı değer. {box_name} kutunuz İnternet'e doğrudan bağlı değilse (" "yani bir NAT yönlendiricisine bağlıysa) bu URL gerçek İnternet IP adresini " "bulmak için kullanılır. URL sadece istemcinin bulunduğu yerin IP'sini " "vermelidir (mesela: http://myip.datasystems24.de)." #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" "Hesabı oluşturduğunuzda bir kullanıcı ismi seçmeniz talep edilmiş olmalıydı." #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Dinamik DNS'i Etkinleştir" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Servis türü" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnudIP Sunucu Adresi" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Geçersiz sunucu ismi" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "URL'i Güncelle" #: plinth/modules/dynamicdns/dynamicdns.py:135 #| msgid "accept all SSL certificates" msgid "Accept all SSL certificates" msgstr "Tüm SSL sertifikalarını kabul et" #: plinth/modules/dynamicdns/dynamicdns.py:139 #| msgid "use HTTP basic authentication" msgid "Use HTTP basic authentication" msgstr "Temel HTTP kimlik doğrulamasını kullan" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Kullanıcı ismi" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Parola" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "Parolayı göster" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP kontrol bağlantısı" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Lütfen bir güncelleme URL'i ya da GnuDIP Sunucusu belirtin" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Lütfen GnuDIP kullanıcı ismi belirtin" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Lütfen GnuDIP alanı belirtin" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Lütfen bir parola girin" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Dİnamik DNS'i Yapılandır" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Dinamik DNS Durumu" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 #| msgid "DynamicDNS client" msgid "Dynamic DNS Client" msgstr "Dinamik DNS istemcisi" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format #| msgid "" #| "If your internet provider changes your IP address periodic (i.e. every " #| "24h) it may be hard for others to find you in the WEB. And for this " #| "reason nobody may find the services which are provided by FreedomBox " #| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Eğer İnternet erişim sağlayıcınız IP adresinizi periyodik bir şekilde (" "mesela her 24 saatte bir) değiştiriyorsa diğer kişiler sizi ağda bulmakta " "zorlanabilir. Ve bu sebeple kimse sizin ownCloud'unuz gibi %(box_name)s " "tarafından sunulan servisleri bulamayabilir." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 #| msgid "" #| "The solution is to assign a DNS name to your IP address and update the " #| "DNS name every time your IP is changed by your Internet provider. Dynamic " #| "DNS allows you to push your current public IP address to an gnudip " #| "server. Afterwards the Server will assign your DNS name with the new IP " #| "and if someone from the internet asks for your DNS name he will get your " #| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" "Çözüm, IP adresinize bir DNS ismi atamak ve DNS ismini IP adresiniz İnternet " "erişim sağlayıcınız tarafından her değiştirildiğinde güncellemektir. Dinamik " "DNS güncel genel İnternet adresinizi bir gnudip " "sunucusuna gönderir. Bunun ardından sunucu DNS isminizi yeni IP adresi ile " "ilişkilendirecek ve İnternet'te birisi DNS isminizi sorguladığında güncel IP " "adresinizi elde edebilecektir." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" "Eğer ücretsiz bir dinamik DNS hesabı arıyorsanız, bedava bir GnuDIP " "servisini gnudip." "datasystems24.net adresinde ya da ücretsiz URL güncelleme temelli " "servisleri freedns." "afraid.org adresinde bulabilirsiniz." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format #| msgid "" #| "If your freedombox is connected behind some NAT router, don't forget to " #| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " #| "your freedombox device." msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Eğer %(box_name)s kutunuz bir NAT yönlendiriciye bağlıysa, port yönlendirme (" "yani 80 ve 443 gibi bazı standart portları yönlendirmeyi) eklemeyi " "unutmayınız." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "" "Javascript'i devre dışı bırakmışsınız. Dinamik form kipi devre dışıdır ve " "bazı yardımcı işlevler çalışmayabilir (fakat ana işlevler çalışmalıdır)." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "NAT türü" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "" "NAT türü henüz tespit edilmemiştir, eğer bir \"IP kontrolü bağlantısı\" " "girmezseniz NAT türü tespit edilmeyecektir." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 #| msgid "Direct connection to the internet." msgid "Direct connection to the Internet." msgstr "İnternet'e doğrudan bağlantı." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format #| msgid "" #| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " #| "URL\" for changes (we need the \"IP check URL\" for this reason - " #| "otherwise we will not detect IP changes). It may take up to %(timer)s " #| "minutes until we update your DNS entry in case of WAN IP change." msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" "NAT arkasında. Bu, dinamik DNS servisinin \"IP kontrolü bağlantısını\" " "değişiklikler için yoklayacağı anlamına gelir (\"IP kontrolü bağlantısı\" bu " "sebeple gereklidir - aksi takdirde IP değişiklikleri tespit edilemez). WAN " "IP değişikliği durumunda DNS girdinizin güncellenmesi %(timer)s dakika " "alabilir." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "Son güncelleme" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "Güvenlik Duvarı" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format #| msgid "" #| "Firewall is a network security system that controls the incoming and " #| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " #| "and properly configured reduces risk of security threat from the Internet." msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "" "Güvenlik duvarı %(box_name)s kutunuzda içeri gelen ve dışarı giden şebeke " "trafiğini kontrol eden bir güvenlik sistemidir. Güvenlik duvarını " "etkinleştirip gerektiği gibi yapılandırmak İnternet'ten gelen güvenlik " "tehditlerini azaltır." #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "Güncel durum:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" "Güvenlik duvarı servisi çalışmamaktadır. Lütfen çalıştırın. Güvenlik duvarı " "%(box_name)s kutusunda varsayılan değer olarak etkindir. Debian temelli " "herhangi bir sistemde (%(box_name)s gibi) güvenlik duvarını 'service " "firewalld start' komutunu çalıştırarak ya da systemd bulunan bir sistemde " "'systemctl start firewalld' komutunu çalıştırarak etkinleştirebilirsiniz." #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "Servis/Port" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Etkin" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Devre dışı" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "İzinli" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "İzinli (sadece dahili)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "İzinli (sadece harici)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "Engellenmiş" #: plinth/modules/firewall/templates/firewall.html:103 #| msgid "" #| "The operation of the firewall is automatic. When you enable a service it " #| "is automatically permitted in the firewall and you disable a service is " #| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "" "Güvenlik duvarının işleyişi otomatiktir. Bir servisi etkinleştirdiğinizde " "güvenlik duvarında da izinli hale gelir ve devre dışı bıraktığınızda " "güvenlik duvarında da devre dışı bırakılır." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "LDAP kullanıcısı oluşturması başarısız oldu." #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "Yeni kullanıcının admin (yönetici) grubuna eklenmesi başarısız oldu." #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "Kullanıcı hesabı oluşturuldu, artık giriş yaptınız" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "Yardım" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "Kuruluma Başla" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "" "%(box_name)s kutunuzun kurulumunu tamamlamak için lütfen bazı temel " "bilgileri belirtin." #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Yönetici Hesabı" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" "Bu ağ arayüzüne erişmek için bir kullanıcı ismi ve parola seçin. Parola daha " "sonra değiştirilebilir. Kullanıcıya yönetici yetkileri verilecektir. Başka " "kullanıcılar daha sonra ilave edilebilir." #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Kaydet ve FreedomBox'u başlat!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "Yapılandırma Tamamlandı!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format #| msgid "" #| "%(box_name)s setup is now complete. To make your %(box_name)s " #| "functional, you need some applications. Applications will be installed " #| "the first time you access them." msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "" "%(box_name)s kurulumu artık tamamlanmıştır. %(box_name)s kutunuzu işlevsel " "hale getirmek için bazı uygulamalara ihtiyacınız vardır. Uygulamalar onlara " "ilk kez eriştiğinizde kurulacaktır." #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "Uygulamalara Git" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 msgid "Current Network Configuration" msgstr "Güncel Şebeke Yapılandırması" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "" "Şebeke yapılandırmasını kontrol edip gerekiyorsa değiştirmelisiniz. " "Varsayılan kablosuz ağ parolalarını değiştirmeyi unutmayın!" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Ağlara Git" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Yapılandırma Tamamlandı" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "Belgelendirme" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "Nerede Yardım Bulabilirim" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "El ile" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "Belgelendirme ve SSS" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "{box_name} hakkında" #: plinth/modules/help/help.py:73 #, python-brace-format #| msgid "About {box_name}" msgid "{box_name} Manual" msgstr "{box_name} Kılavuzu" #: plinth/modules/help/templates/help_about.html:30 #, python-format #| msgid "" #| "FreedomBox is a community project to develop, design and promote personal " #| "servers running free software for private, personal communications. It " #| "is a networking appliance designed to allow interfacing with the rest of " #| "the Internet under conditions of protected privacy and data security. It " #| "hosts applications such as blog, wiki, website, social network, email, " #| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " #| "so that your data stays with you." msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" "%(box_name)s, özel iletişimler için özgür yazılım çalıştıran kişisel " "sunucular tasarlayan, geliştiren ve kullanımını teşvik eden bir topluluk " "projesidir. Veri güvenliğini ve gizliliği koruyan şartlarda İnternet'e " "bağlantıda arayüz görevi görecek bir ağ cihazıdır. Verilerinizin sizinle " "kalması için Wi-Fi yönlendiricisinin yerine geçebilecek bir cihazda blog, " "viki, ağ sitesi, sosyal ağ, e-posta, vekil sunucu ve Tor aktarıcısı gibi " "uygulamalar barındırır." #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" "Ağ kullanımımızı sıklıkla menfaatlerimizi gözetmeyenlerin aracılığıyla " "yaptığımız bir dünyada yaşıyoruz. Merkezi bir servise dayanmayan yazılım " "geliştirerek kontrol ve gizliliğimizi tekrar kazanabiliriz. Verilerimizi " "evlerimizde tutarak bu veriler üzerinde yararlı kanuni korumalar kazanırız. " "Ağları ve makinelerinin kontrolünü kullanıcılara tekrar kazandırarak " "İnternet'i amaçlanan eşten eşe mimarisine geri getiriyoruz." #: plinth/modules/help/templates/help_about.html:56 #, python-format #| msgid "" #| "There are a number of projects working to realize a future of distributed " #| "services; FreedomBox aims to bring them all together in a convenient " #| "package." msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" "Eşten eşe, dağıtılmış servisler geleceği için çalışan çeşitli projeler " "bulunmaktadır: %(box_name)s kutusunun amacı onların tümünü kişisel bir " "sunucuda bir araya getirmektir." #: plinth/modules/help/templates/help_about.html:64 #, python-format #| msgid "" #| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "%(box_name)s projesi hakkında daha fazla bilgi için %(box_name)s Vikisini okuyunuz." #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Daha fazla bilgi edinin »" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Plinth yazılımının %(version)s sürümünü kullanıyorsunuz." #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "%(box_name)s Kurulumu" #: plinth/modules/help/templates/help_index.html:29 #, python-format #| msgid "" #| "The FreedomBox Manual is the best place to " #| "start for information regarding %(box_name)s." msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "%(box_name)s. hakkında daha fazla bilgi edinmeye başlamak için en uygun yer <" "a href=\"%(manual_url)s\">%(box_name)s Kullanım Kılavuzudur." #: plinth/modules/help/templates/help_index.html:36 #, python-format #| msgid "" #| " " #| "FreedomBox project wiki contains further information." msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" " %(box_name)" "s proje vikisi daha fazla bilgi içerir." #: plinth/modules/help/templates/help_index.html:43 #, python-format #| msgid "" #| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " #| "problems faced by other users and possible solutions." msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" "%(box_name)s topluluğundan yardım istiyorsanız, sorularınızı e-" "posta listesine yollayabilirsiniz. Liste arşivleri diğer " "kullanıcıların karşılaştıkları sorunlar ve mümkün çözümler hakkında da bilgi " "içerir." #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" "Birçok %(box_name)s iştirakçisi ve kullancısı irc.oftc.net IRC ağında da " "bulunabilir. IRC web arayüzünü kullanarak " "#freedombox kanalına katılın ve yardım talebinde bulunun." #: plinth/modules/ikiwiki/__init__.py:38 #| msgid "Wiki & Blog (Ikiwiki)" msgid "Wiki and Blog (ikiwiki)" msgstr "Viki ve Blog (ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 #| msgid "Ikiwiki wikis and blogs" msgid "ikiwiki wikis and blogs" msgstr "ikiwiki vikileri ve blogları" #: plinth/modules/ikiwiki/forms.py:29 #| msgid "Enable Ikiwiki" msgid "Enable ikiwiki" msgstr "ikiwiki'yi Etkinleştir" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "Tür" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "İsim" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "Yönetici Hesap İsmi" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "Yönetici Hesap Parolası" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "" "Etkinleştirildilerinde, bloglar ve vikilere erişim /" "ikiwiki adresinden mümkün olacaktır." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format #| msgid "Delete Wiki/Blog %(name)s" msgid "Delete Wiki or Blog %(name)s" msgstr "%(name)s isimli Viki ya da Blogu sil" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 #| msgid "" #| "This action will remove all the posts, pages and comments including " #| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "" "Bu eylem revizyon geçmişi de dahil olmak üzere tüm mesajları, sayfaları ve " "yorumları silecektir. Bu viki ya da blogu daimi olarak silmek istiyor " "musunuz?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "%(name)s unsurunu sil" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "İptal" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "Hiçbir viki ya da blog mevcut değil." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "Bir Viki ya da Blog oluştur" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "%(site)s sitesini sil" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "%(site)s sitesine git" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "Yönet" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "Oluştur" #: plinth/modules/ikiwiki/views.py:73 #| msgid "Wiki & Blog" msgid "Wiki and Blog" msgstr "Viki ve Blog" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "Viki ve Blogları Yönet" #: plinth/modules/ikiwiki/views.py:132 #| msgid "Create a Wiki or Blog" msgid "Create Wiki or Blog" msgstr "Viki ya da Blog oluştur" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "{name} isimli viki oluşturuldu." #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "Viki oluşturulamadı: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "{name} isimli blog oluşturuldu." #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "Blog oluşturulamadı: {error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "{name} silindi." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "{name} silinemedi: {error}" #: plinth/modules/ikiwiki/views.py:182 #| msgid "Delete Wiki/Blog" msgid "Delete Wiki or Blog" msgstr "Viki ya da Blogu Sil" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "Sertifikalar (Let's Encrypt)" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" "Sayısal sertifikalar kullanıcıların ağ servislerinin kimliklerini " "doğrulamalarına ve onlarla güvenli bir şekilde iletişim kurmalarına imkân " "verir. %(box_name)s otomatik olarak her mevcut alan için sayısal sertifika " "edinebilir ve bunları kurabilir. Bunu kendisinin bir alanın sahibi olduğunu " "bir sertifika otoritesi (Certificate Authority, CA) olan Let's Encrypt'e " "ispatlayarak yapar." #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" "Let's Encrypt, Internet Security Research Group (ISRG) tarafından işletilen, " "kamunun yararına çalışan ücretsiz, otomatik ve açık bir sertifika " "otoritesidir. Bu servisi kullanmadan önce lütfen Let's Encrypt Abone Sözleşmesini okuyup " "kabul edin." #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 msgid "Domain" msgstr "Alan" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "Sertifika Durumu" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "Site Güvenliği" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 msgid "Actions" msgstr "Eylemler" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "%(expiry_date)s tarihinde sona eriyor" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "Sertifika yok" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "İptal et" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "Tekrar edin" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "Edin" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "{domain} alanı için sertifika başarılı bir şekilde iptal edildi" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "" "{domain} alanı için sertifikanın iptal edilmesi başarısız oldu: {error}" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "{domain} alanı için sertifika başarılı bir şekilde edinildi" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "{domain} alanı için sertifika edinilemedi: {error}" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "Monkeysphere" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" "Monkeysphere ile her SSH sunan yapılandırılmış alan için bir PGP anahtarı " "oluşturulabilir. Bunun ardından herkese açık PGP anahtarı PGP anahtar " "sunucularına yüklenebilir. Bu makineye SSH vasıtasıyla bağlanan kullanıcılar " "doğru makineye bağlandıklarını teyit edebilirler. Kullanıcıların anahtara " "güvenebilmeleri için en az bir kişinin (genellikle makine sahibi) anahtarı " "olağan PGP anahtar imzalama süreciyle imzalaması gerekir. Daha fazla bilgi " "için " "Monkeysphere SSH belgelendirmesine bakınız." #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "Anahtar, anahtar sunucusuna yayınlanıyor..." #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "GPG Parmak izi" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "Mevcut değil" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "PGP Anahtarı Oluştur" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "Anahtarı Yayınla" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "Oluşturulan PGP anahtarı." #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "Anahtar yayını iptal edildi." #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "Anahtar, anahtar sunucusuna yayınlandı." #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "Anahtarın yayınlanmasında bir hata meydana geldi." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "Ses ile Sohbet (Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "Mumble Ses ile Sohbet Sunucusu" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "Mumble servisini etkinleştir" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" "Mumble, açık kaynak, düşük gecikmeli, şifreli, yüksek kaliteli sesle sohbet " "yazılımıdır." #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "Mumble sunucunuza alışılagelmiş 64738 numaralı Mumble portundan " "bağlanabilirsiniz. Mumble'a masaüstünden ya da Android cihazlarından " "bağlanmak için istemciler mevcuttur." #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "Mumble sunucusu çalışmaktadır" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "Mumble sunucusu çalışmamaktadır" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "İsim Servisleri" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "IPv{kind} üzerinde DNSSEC kullanılıyor" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "Bağlantı Türü" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Bağlantı İsmi" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Fiziki Arayüz" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "Bu bağlantının bağlanacağı ağ cihazı." #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Güvenlik Duvarı Alanı" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" "Güvenlik duvarı alanı bu arayüzlerde hangi servislerin mevcut olacağını " "kontrol eder. Dahiliyi sadece güvenilir şebekeler için seçin." #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 Adresleme Metodu" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" "\"Paylaşılan\" metodu bir DHCP sunucusu başlatacaktır ve \"Otomatik\" metot " "yapılandırmayı bir DHCP sunucusundan alacaktır." #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adres" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Ağ Maskesi" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" "Seçime dayalı değer. Boş bırakılırsa adrese dayalı varsayılan bir ağ maskesi " "kullanılacaktır." #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Geçit" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Seçime dayalı değer." #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS Sunucusu" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Seçime dayalı değer. Eğer bu değer belirtildiyse ve IPv4 adresleme metodu " "\"Otomatik\" ise, DHCP sunucusu tarafından sunulan DNS sunucuları görmezden " "gelinecektir." #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "İkinci DNS Sunucusu" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Seçime dayalı değer. Eğer bu değer belirtildiyse ve IPv4 Adresleme Metodu " "\"Otomatik\" ise, DHCP sunucusu tarafından sunulan DNS sunucuları görmezden " "gelinecektir." #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "-- seç --" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Şebekenin görünür ismi." #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Kip" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Kimlik Doğrulama Kipi" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" "Eğer kablosuz ağ güvenli ise ve istemcilerin bağlantı için parolaları " "olmasını gerektiriyorsa WPA'yi seçin." #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Parola" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Ağ Bağlantıları" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Yakındaki Wi-Fi Ağları" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Bağlantı Ekle" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "Ağlar" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "Bağlantı gösterilemez: bağlantı bulunamadı." #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "Bağlantı Verilerini Göster" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "Bağlantı düzenlenemez: bağlantı bulunamadı." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "Bu tip bağlantı henüz anlaşılamamaktadır." #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Bağlantıyı Düzenle" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "{name} bağlantısı etkinleştirildi." #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Bağlantı etkinleştirilemedi: bağlantı bulunamadı." #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" "{name} isimli bağlantı etkinleştirilemedi: hiçbir uygun cihaz mevcut değil." #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "{name} isimli bağlantı devre dışı bırakıldı." #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" "Bağlantının devre dışı bırakılması başarısız oldu: bağlantı bulunamadı." #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Yeni Ethernet Bağlantısı Ekleniyor" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Yeni PPPoE Bağlantısı Ekleniyor" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Yeni Kablosuz Bağlantı Ekleniyor" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "{name} isimli bağlantı silindi." #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Bağlantının silinmesi başarısız oldu: bağlantı bulunamadı." #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Bağlantıyı Sil" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "Bağlantıyı Düzenle" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "Düzenle" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "Devre Dışı Bırak" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "Etkinleştir" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "Bağlantıyı sil" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "Sil" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "Bağlantı" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "Birincil bağlantı" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "evet" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "Cihaz" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "Durum" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "Durum nedeni" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "MAC adresi" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "Arayüz" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "Açıklama" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "Fiziki Bağlantı" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "Bağlantı durumu" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "kablo bağlı" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "lütfen kabloyu kontrol edin" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "Hız" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "Sinyal kuvveti" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "Kanal" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IPv4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "Metot" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "IP adresi" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "DNS sunucusu" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "Varsayılan" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IPv6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "Bu bağlantı etkin değildir." #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "Güvenlik" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "Güvenlik duvarı alanı" #: plinth/modules/networks/templates/connection_show.html:280 #| msgid "" #| "This interface should be connected to local network/machine. If you " #| "connect this interface to a public network, services meant to be " #| "available only internally will become available externally. This is a " #| "security risk." msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "" "Bu arayüz yerel bir ağa/makineye bağlı olmalıdır. Eğer bu arayüzü herkese " "açık bir şebekeye bağlarsanız, sadece dahili olması amaçlanan servislere " "harici erişim mümkün olacaktır. Bu bir güvenlik riskidir." #: plinth/modules/networks/templates/connection_show.html:300 #| msgid "" #| "This interface should receive your Internet connection. If you connect it " #| "your a local network/machine, many services meant to available only " #| "internally will not be available." msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "" "Bu arayüz sizin İnternet bağlantınızı almalıdır. Eğer onu yerel bir ağ/" "makineye bağlarsanız, sadece dahili olarak erişilebilir olması amaçlanan " "servislerin birçoğuna erişim mümkün olmayacaktır." #: plinth/modules/networks/templates/connection_show.html:319 #, python-format #| msgid "" #| "This interface is not maintained by FreedomBox. Its security status is " #| "unknown to FreedomBox. Many FreedomBox services may not be available on " #| "this interface. It is recommended that you deactivate/delete this " #| "connection and re-configure it." msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Bu arayüzün bakımı %(box_name)s tarafından yapılmaz. Güvenlik durumu " "%(box_name)s tarafından bilinmemektedir. Birçok %(box_name)s servisi bu " "arayüzde mevcut olmayabilir. Bu bağlantıyı devre dışı bırakmanız/silmeniz ve " "yeniden yapılandırmanız tavsiye edilir." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "Oluştur..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "Bağlantı Oluştur" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "%(name)s isimli bağlantı daimi olarak silinsin mi?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "İnternet" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "Aralık" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "Harici" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "Ethernet" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "Wi-Fi" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "%(connection.name)s isimli bağlantıyı göster" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "Dahili" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "%(name)s isimli bağlantıyı göster" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "Bilgisayar" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "%(name)s isimli bağlantıyı sil" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "Etkin" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "Devre Dışı" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "Sanal Özel Şebeke (OpenVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "OpenVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "OpenVPN sunucusunu etkinleştir" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format #| msgid "" #| "Virtual Private Network (VPN) is a technique for securely connecting two " #| "machines in order to access resources of a private network. While you " #| "are away from home, you can connect to your %(box_name)s in order to join " #| "your home network and access private/internal services provided by " #| "%(box_name)s. You can also access the rest of the Internet via " #| "%(box_name)s for added security and anonymity." msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "Sanal Özel Ağ (Virtual Private Network, VPN), özel bir ağın kaynaklarına " "erişmek için iki cihaz arasında güvenli bir şekilde bağlantı kurmak için " "kullanılan tekniktir. Evinizden uzaktayken ev ağınıza erişmek için " "%(box_name)s kutusuna bağlanıp %(box_name)s tarafından sunulan özel/dahili " "servisleri kullanabilirsiniz. Aynı zamanda ek güvenlik ve anonimlik için " "İnternet'in geri kalanına %(box_name)s vasıtasıyla erişebilirsiniz." #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "Profil" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format #| msgid "" #| "To connect to %(box_name)s's VPN, you need to download a profile and feed " #| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " #| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " #| "configure them." msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "%(box_name)s kutusunun VPN'ine erişmek için bir profil indirmeniz ve bunu " "mobil ya da masaüstü makinenize yüklemeniz gerekir. OpenVPN istemcileri " "platformların çoğu için mevcuttur. Tavsiye edilen istemciler ve onları " "yapılandırma talimatları için belgelendirmeyi okuyun." #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" "Profil, %(box_name)s kutusunun her kullanıcısı için özeldir. Onun " "gizliliğini koruyun." #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "Profilimi indir" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" "OpenVPN kurulumu henüz yapılmamıştır. Güvenli kurulum yapmak çok uzun bir " "süre alır. %(box_name)s kutunuzun hızına bağlı olarak saatler sürmesi bile " "mümkündür. Eğer kurulum kesilirse, tekrar başlatabilirsiniz." #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "Kuruluma başla" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "OpenVPN kurulumu çalışmaktadır" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" "Güvenli kurulum yapmak çok uzun bir süre alır. %(box_name)s kutunuzun hızına " "bağlı olarak saatler sürmesi bile mümkündür. Eğer kurulum kesilirse, tekrar " "başlatabilirsiniz." #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "OpenVPN sunucusu çalışmaktadır" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "OpenVPN sunucusu çalışmamaktadır" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "Kurulum tamamlandı." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "Kurulum başarısı oldu." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "ownCloud'u Etkinleştir" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "Dosya Barındırma (ownCloud)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "ownCloud" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "ownCloud etkinleştirilmiştir" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "ownCloud devre dışıdır" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" "ownCloud ağ (web) arayüzü ya da WebDAV aracılığıyla dosyalarınıza evrensel " "erişim sağlar. Bununla beraber arkadaşlarınızı, takvimlerinizi ve yer " "imlerinizi tüm cihazlarınızda görüntülemek & eşleştirmek için de bir " "platform sunar ve sade düzenlemeleri doğrudan ağ üzerinde yapmanıza da imkân " "verir. Kurulumun sunucu gereksinimleri asgaridir, özel izinler gerektirmez " "ve hızlıdır. ownCloud uygulamalar ve eklentiler için sade ama güçlü bir API " "ile genişletilebilir." #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" "Etkinleştirildiğinde ownCloud kurulumuna web sunucusunun /owncloud yoluyla erişim mümkün olacaktır. ownCloud için ilk yönetici " "hesabını yapılandırmak için bu bağlantıyı ziyaret edin." #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "Değişiklikleri uygula" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "Herkese Açık Görünülürlük (PageKite)" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "PageKite'ı Etkinleştir" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "Sunucu alanı" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" "PageKite sunucunuzu seçin. Varsayılan pagekite.net sunucusunu kullanmak için " "\"pagekite.net\" değerini kullanın." #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "Sunucu portu" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "PageKite sunucunuzun portu (varsayılan: 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "Kite ismi" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "Örnek: mybox.pagekite.me" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "Geçersiz kite ismi" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "Kite sırrı" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" "Kite ile ilişkilendirilmiş bir sır ya da kite üzerinde hiçbir sır " "ayarlanmamışsa hesabınız için varsayılan sır." #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "Kite detayları ayarlandı" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "Pagekite sunucusu ayarlandı" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "PageKite etkinleştirildi" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "PageKite devre dışı" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "Servis etkinleştirildi: {name}" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "Servis devre dışı bırakıldı: {name}" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "protokol" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "harici (ön arayüz) port" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "dahili (freedombox) port" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "Alt Alanları Etkinleştir" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "Özel servis silindi" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "" "Bu servis standart bir servis olarak mevcuttur. Etkinleştirmek için lütfen " "\"Standart Servisler\" sayfasını kullanın." #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "Özel servis eklendi" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "Bu servis zaten mevcuttur" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "PageKite Hesabı" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "Ayarları kaydet" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" "İkaz:
PageKite ön arayüz sunucunuz burada ayarlayabileceğiniz tüm " "protokol/bağlantı noktası (port) tertiplerini desteklemeyebilir. Mesela 443 " "bağlantı noktasından değişik bağlantı noktalarında HTTPS protokolünün sorun " "çıkardığı bilinir." #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "Özel servis oluştur" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "Servis Ekle" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "Mevcut özel servisler" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "Hiçbir etkin Özel Servisiniz yok" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "%(backend_host)s:%(backend_port)s unsuruna bağlandı" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "Bu servisi sil" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" "PageKite %(box_name)s servislerine İnternet'e doğrudan bağlantınız " "olmadığında erişmek için bir sistemdir. Buna sadece %(box_name)s " "servislerine İnternet'ten erişmek mümkün değilse ihtiyaç duyarsınız. Bu, şu " "durumları kapsar:" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "%(box_name)s kısıtlı bir güvenlik duvarının arkasında olduğunda." #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" "%(box_name)s kontrolünüzde olmayan bir (kablosuz) yönlendiriciye bağlı " "olduğunda." #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "" "İnternet Erişim Sağlayıcınız size harici bir IP adresi sunmadığında ve bunun " "yerine İnternet bağlantısını NAT vasıtasıyla sağladığında." #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "" "İnternet Erişim Sağlayıcınız size statik bir IP adresi sağlamadığında ve IP " "adresiniz İnternet'e her bağlandığınızda değiştiğinde." #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "İnternet Erişim Sağlayıcınız içeri gelen bağlantıları kısıtladığında." #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" "PageKite NAT, güvenlik duvarları ve IP adresi sınırlamalarına rağmen tünel " "ve ters vekil sunucular birleşimini kullanarak işleyebilir. Herhangi bir " "pagekite servis sağlayıcısını kullanabilirsiniz, örneğin pagekite.net. Gelecekte bunun için arkadaşlarınızın " "%(box_name)s kutusunu kullanmanız mümkün olacaktır." #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "PageKite'ı Yapılandır" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "İkaz:
" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "Yayınlanan servislere İnternet'ten erişim ve saldırı mümkündür." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "" "'fbx' için varsayılan parola ile SSH'i açığa çıkarmak ÇOK KÖTÜ bir fikirdir." #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "Servisleri Kaydet" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "Ağ Sunucusu (HTTP)" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "" "Siteye http://{0} adresinde erişilebilecektir" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "Ağ Sunucusu (HTTPS)" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "" "Siteye https://{0} adresinde erişilebilecektir" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "Güvenli Kabuk (SSH)" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" "SSH istemci kurulum talimatlarını okuyun" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "Pagekite" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "PageKite Hakkında" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "Standart Servisler" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "Özel Servisler" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "Enerji" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "Sistemi tekrar başlat ya da kapat." #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "Tekrar başlat »" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "Kapat »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "" "Yeniden başlatmak istediğinizden emin misiniz? Bu ağ arayüzüne sistem tekrar " "başlatılına dek birkaç dakika boyunca erişemeyeceksiniz." #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "Şimdi Tekrar Başlat" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "" "Sistemi kapatmak istediğinizden emin misiniz? Kapatmanın ardından bu ağ " "arayüzüne erişemeyeceksiniz." #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "Şimdi Kapat" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "Ağ Vekil Sunucusu (Privoxy)" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "Privoxy Ağ Vekil Sunucusu" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "{url} konumuna {proxy} vekili vasıtasıyla tcp{kind} üzerinden eriş" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "Privoxy'yi Etkinleştir" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" "Privoxy, reklamları ve diğer istenmeyen İnternet içeriğini kaldıran, ağ " "sayfası verilerini ve HTTP başlıklarını değiştiren, gizliliği arttırmak için " "gelişmiş filtreleme özellikleri bulunan ve önbelleğe veri almayan bir ağ " "vekil sunucusudur." #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" "Privoxy'yi tarayıcınızın vekil sunucu ayarlarını %(box_name)s kutunuzun " "makine ismine (ya da IP adresine) 8118 numaralı port ile ayarlayarak " "kullanabilirsiniz. Privoxy'yi kullanırken belgelendirmesini ve yapılandırma " "ayrıntılarını http://config.privoxy." "org/ veya http://p.p adresinde " "görebilirsiniz." #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "Privoxy çalışmaktadır" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "Privoxy çalışmamaktadır" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "IRC İstemcisi (Quassel)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "Quassel IRC İstemcisi" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "Quassel çekirdek servisini etkinleştir" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" "Quassel, \"çekirdek\" ve \"istemci\" olarak ikiye ayrılmış bir IRC " "uygulamasıdır. Bu, istemcinin çevrimdışı olduğu zamanda bile çekirdeğin IRC " "sunucularına bağlı kalmasına ve mesajları almaya devam etmesine imkân verir. " "%(box_name)s Quassel çekirdek servisini daima çevrimiçinde tutabilir ve bir " "ya da daha fazla Quassel istemcileri masaüstünden ya da mobil telefondan ona " "bağlanmak ve ondan bağlantıyı kesmek için kullanılabilir." #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" "Quassel çekirdeğine varsayılan Quassel portu olan 4242 numaralı porttan " "bağlanabilirsiniz. Quassel'e bağlanacak masaüstü ve mobil cihaz istemcileri mevcuttur." #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "Quassel çekirdek servisi çalışmaktadır" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "Quassel çekirdek servisi çalışmamaktadır" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 #| msgid "Server port" msgid "SIP Server (repro)" msgstr "SIP Sunucusu (repro)" #: plinth/modules/repro/__init__.py:41 #| msgid "Second DNS Server" msgid "repro SIP Server" msgstr "repro SIP Sunucusu" #: plinth/modules/repro/forms.py:29 #| msgid "Enable Quassel core service" msgid "Enable repro service" msgstr "repro servisini etkinleştir" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" "repro, bir SIP telefonunun hem varlık ve anlık mesajlaşma, hem de ses ya da " "video aramalar için kullanabileceği çeşitli SIP hizmetleri sunar. repro, " "istemcilerin varlıklarını bildirebilecekleri bir sunucu ve SIP kullanıcı " "hesapları sağlar. Aynı zamanda e-postaya benzer bir şekilde diğer sunucular " "ile SIP bağlantılarını federe edecek bir vekil sunucu görevi de yapar." #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" "SIP aramalarında bulunabilmek için istemci bir programa ihtiyaç vardır. " "Mevcut istemciler Jitsi (bilgisayarlar " "için) ve CSipSimple'ı (Android telefonlar için) içerir." #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" "Not: repro'yu kullanmadan önce alanlar ve kullanıcılar ağ tabanlı yapılandırma paneli ile " "yapılandırılmalıdır. admin (yani yönetici) grubundaki kullanıcılar " "repro yapılandırma paneline giriş yapabileceklerdir. Alan ayarlandıktan " "sonra repro servisini tekrar başlatmak gerekir. Servisi devre dışı bırakıp " "tekrar etkinleştirin." #: plinth/modules/repro/templates/repro.html:63 #| msgid "Quassel core service is running" msgid "repro service is running" msgstr "repro servisi çalışmaktadır" #: plinth/modules/repro/templates/repro.html:66 #| msgid "Quassel core service is not running" msgid "repro service is not running" msgstr "repro servisi çalışmamaktadır" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "Barındırılmayan Depolama (reStore)" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "reStore" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "reStore'u Etkinleştir" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format #| msgid "" #| "reStore is a server for unhosted web " #| "applications. The idea is to uncouple web applications from data. No " #| "matter where a web application is served from, the data can be stored on " #| "an unhosted storage server of user's choice. With reStore, your " #| "%(cfg.box_name)s becomes your unhosted storage server." msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" "reStore, barındırılmayan (unhosted) ağ " "uygulamaları için bir sunucudur. Öne çıkan fikir, ağ uygulamalarının " "verilerden ayrılmasıdır. Ağ uygulamalarının nereden sunulduğuna bakmaksızın " "veriler kullanıcının seçtiği herhangi bir barındırılmayan depolama " "sunucusunda depolanabilir. reStore ile %(box_name)s kutunuz barındırılmayan " "depolama sunucunuz haline gelir." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "" "reStore ağ arayüzünde hesap oluşturabilir ve " "düzenleyebilirsiniz." #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "E-posta İstemcisi (Roundcube)" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "Roundcube'u Etkinleştir" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" "Roundcube ağ e-postası, tarayıcı tabanlı, çoklu dil desteği olan ve uygulama " "benzeri kullanıcı arayüzü bulunan bir IMAP istemcisidir. E-posta " "istemcilerinden beklediğiniz tüm işlevleri sağlar ve buna MIME desteği, " "adres defteri, klasör düzenleme, mesaj arama ve imlâ kontrolü de dahildir." #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" "Roundcube'a /roundcube adresinden " "erişebilirsiniz. Erişmek istediğiniz hesabın kullanıcı ismiyle parolasını ve " "ardından e-posta sağlayıcınızın IMAP sunucusunun alan adını, mesela " "imap.example.com gibi, belirtin. SSL üzerinden IMAP için (ki " "tavsiye edilir), sunucu alanını imaps://imap.example.com gibi " "doldurun." #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" "GMail için kullanıcı ismi GMail adresiniz, parolanız Google hesap parolanız " "ve sunucu ise imaps://imap.gmail.com olacaktır. Google hesap " "seçeneklerinde (https://www.google.com/settings/security/lesssecureapps) \"daha az güvenli uygulamalara\" müsaade etmeniz gerekeceğini unutmayın." #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "Yer İmleri (Shaarli)" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "Shaarli" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "Shaarli'yi Etkinleştir" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "Shaarli, yer imlerinizi kaydetmenize ve paylaşmanıza imkân verir." #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" "Etkinleştirildiğinde, Shaarli'ye ağ sunucusunda /" "shaarli yolunda erişilebilecektir. Shaarli'nin ilk ziyaretinizde " "ayarlamanız gerekecek olan sadece tek bir kullanıcı hesabını desteklediğini " "unutmayın." #: plinth/modules/system/system.py:26 msgid "System" msgstr "Sistem" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Sistem Yapılandırması" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "Burada %(box_name)s kutunuzun temel sistemini yönetebilirsiniz." #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" "Seçenekler %(box_name)s kutusunu en genel düzeyde etkiler, bu nedenle " "dikkatli olun!" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "Anonimlik Ağı (Tor)" #: plinth/modules/tor/__init__.py:53 #| msgid "Anonymity Network (Tor)" msgid "Tor Anonymity Network" msgstr "Tor Anonimlik Ağı" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "Tor Köprü Aktarması" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "Tor Gizli Servisi" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor geçit portu mevcuttur" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3 taşıma kayıtlıdır" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4 taşıma kayıtlıdır" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "{url} bağlantısına tcp{kind} üzerinden Tor vasıtasıyla eriş" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "tcp{kind} üzerinden {url} konumunda Tor kullanımını teyit et" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "Tor'u Etkinleştir" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "Tor Gizli Servisi Etkinleştir" #: plinth/modules/tor/forms.py:38 #, python-brace-format #| msgid "" #| "A hidden service will allow FreedomBox to provide selected services (such " #| "as ownCloud or Chat) without revealing its location." msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "" "Gizli servisler {box_name} kutusunun (ownCloud ya da sohbet gibi) seçili " "servisleri konumunu ortaya çıkarmadan sağlamasına imkân verir." #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "Yazılım paketlerini Tor üzerinden indir" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" "Etkinleştirildiğinde, kurulum ve güncellemeler için yazılımlar Tor ağı " "üzerinden indirilecektir. Bu, yazılım indirmeleri sırasında bir derece " "güvenlilik ve gizlilik ekler." #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" "Tor, anonim bir şekilde iletişim kurma sistemidir. Hakkında daha fazla " "bilgiyi Tor Projesi sitesinden " "edinebilirsiniz. İnternet'te gezinirken en iyi korunma için Tor Projesi Tor " "Tarayıcısını kullanmanızı tavsiye eder." #: plinth/modules/tor/templates/tor.html:54 #| msgid "Configuration updated" msgid "Tor configuration is being updated" msgstr "Tor yapılandırması güncellenmektedir" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor çalışmaktadır" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor çalışmamaktadır" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Gizli Servis" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Port" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Köprü" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" "%(box_name)s sansürü engellemeye yardımcı olmak için obfsproxy ile Tor " "köprüsü olarak yapılandırılmıştır. Eğer %(box_name)s bir yönlendirici ya da " "güvenlik duvarı arkasındaysa ve gerekiyorsa aşağıdaki bağlantı noktalarının " "(port) açık ve yönlendirilmiş olduğundan emin olun:" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Servis" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" "Bir Tor SOCKS bağlantı noktası %(box_name)s kutunuzda TCP 9050 numaralı " "portta mevcuttur." #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor Kontrol Panosu" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Eylem hatası: {0} [{1}] [{2}]" #: plinth/modules/tor/views.py:148 #| msgid "Configuration updated" msgid "Configuration updated." msgstr "Kurulum güncellendi." #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "Yapılandırma sırasında bir hata meydana geldi." #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "Transmission BitTorrent" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "Transmission servisini etkinleştir" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "İndirme klasörü" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" "İndirmelerin kaydedilecekleri klasör. Varsayılan klasörü değiştirirseniz, " "yeni klasörün var olduğundan ve \"debian-transmission\" kullanıcısı " "tarafından yazılabilir olduğundan emin olun." #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "Ağ arayüzüne giriş yapmak için kullanıcı ismi." #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "" "Ağ arayüzüne giriş yapmak için parola. Güncel parola karma biçiminde " "gösterilmektedir. Yeni bir parola ayarlamak için parolayı düz metin olarak " "girin." #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" "BitTorrent bir eşten eşe dosya paylaşma protokolüdür. Transmission servisi " "BitTorrent dosya paylaşımını idare eder. BitTorrent'ın anonim olmadığını " "unutmayın." #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "" "Ağ arayüzüne /transmission konumunda " "erişebilirsiniz." #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "Transmission servisi çalışmaktadır" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "Transmission servisi çalışmamaktadır." #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "Yazılım Güncellemeleri" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "Otomatik güncellemeleri etkinleştir" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" "Etkinleştirildiğinde unattended-upgrades programı günde bir kez " "çalıştırılacaktır. Mevcut paket yükseltmelerini uygulamayı deneyecektir." #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "" "Yükseltmeler en son yazılım ve güvenlik güncellemelerini kurar. Otomatik " "yükseltmeler etkinleştirildiğinde yükseltmeler her gece otomatik olarak " "çalıştırılacaktır. Normal olarak yükseltme sürecini başlatmanıza gerek " "yoktur." #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" "Kurulacak paket sayısına göre bunun tamamlanması uzun bir süre alabilir. " "Yükseltmeler sürmekteyken başka paket kurmanız mümkün olmayacaktır. " "Yükseltme sırasında bu ağ arayüzüne geçici olarak erişim mümkün olmayabilir " "ve bir hata gösterebilir. Devam etmek için sayfayı tazeleyin." #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Şimdi yükselt »" #: plinth/modules/upgrades/templates/upgrades.html:65 #| msgid "ejabberd is running" msgid "A package manager is running." msgstr "Bir paket yöneticisi çalışmaktadır." #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "Yükseltmelerin yakın geçmişteki kütüğü:" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Otomatik Yükseltmeler" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Paketleri Yükselt" #: plinth/modules/upgrades/views.py:96 #| msgid "Upgrade completed." msgid "Upgrade process started." msgstr "Yükseltme süreci başlamıştır." #: plinth/modules/upgrades/views.py:99 #| msgid "Upgrade failed." msgid "Starting upgrade failed." msgstr "Yükseltmenin başlatılması başarısız oldu." #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Paket Yükseltmeler" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "unattended-upgrades yapılandırılırken bir hata oluştu: {error}" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Otomatik yükseltmeler etkinleştirildi" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Otomatik yükseltmeler devre dışı bırakıldı" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Kullanıcılar ve Gruplar" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "\"{search_item}\" LDAP unsurunu kontrol et" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "admin (yönetici)" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "wiki" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "Gruplar" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" "Yeni kullanıcıya hangi servislerin mevcut olacağını seçin. Kullanıcı, uygun " "grupta iseler, LDAP vasıtasıyla tek oturum açma desteği bulunan servislere " "giriş yapabilecektir.

admin grubundaki kullanıcılar tüm " "servislere giriş yapabilecektir. Aynı zamanda sisteme SSH aracılığıyla giriş " "yapıp yönetici izinlerine (sudo) erişebileceklerdir." #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "{group} grubuna yeni kullanıcı ilâve edilmesi başarısız oldu." #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "SSH Anahtarları" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "" "Herkese açık bir SSH anahtarı ayarlamak, bu kullanıcının sisteme parola " "kullanmadan güvenli bir şekilde giriş yapmasına müsaade edecektir. Birden " "çok anahtar girebilirsiniz, her anahtarı yeni bir satırda girin. Boş " "satırlar ve # ile başlayan satırlar görmezden gelinecektir." #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "LDAP kullanıcısının tekrar adlandırılması başarısız oldu." #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Kullanıcının gruptan kaldırılması başarısız oldu." #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Kullanıcının gruba eklenmesi başarısız oldu." #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "LDAP kullanıcı parolasının değiştirilmesi başarısız oldu." #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "%(username)s için Parola Değiştir" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "Parolayı Kaydet" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "Kullanıcı Oluştur" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Kullanıcıyı Sil" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "%(username)s kullanıcısı daimi olarak silinsin mi?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "%(username)s kullanıcısını sil" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "%(username)s kullanıcısını sil" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "%(username)s kullanıcısını düzenle" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "" "Parolayı değiştirmek için parola " "değiştirme formunu kullanın." #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "Değişiklikleri Kaydet" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "Kullanıcılar" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "%(username)s kullanıcısı oluşturuldu." #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "%(username)s kullanıcısı güncellendi." #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "Kullanıcıyı Düzenle" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "{user} kullanıcısı silindi." #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "LDAP kullanıcısının silinmesi başarısız oldu." #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Parolayı Değiştir" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Parola başarılı bir şekilde değiştirildi." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "Sohbet Sunucusu (XMPP)" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "XMPP'yi Etkinleştir" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "" "XMPP açık ve standardize edilmiş bir iletişim protokolüdür. Burada ejabberd " "isimli XMPP sunucusunu yapılandırıp çalıştırabilirsiniz." #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" "İletişim kurmak için ağ istemcisini ya da herhangi bir " "diğer XMPP " "istemcisini kullanabilirsiniz." #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" "XMPP sunucu alanınız %(domainname)s olarak ayarlanmıştır. Kullanıcı " "kimlikleri username@%(domainname)s şeklinde olacaktır. Alanınızı " "sistem Yapılandırma sayfasında " "ayarlayabilirsiniz." #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "Ağ istemcisini başlat" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "ejabberd çalışmaktadır" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "ejabberd çalışmamaktadır" #: plinth/network.py:39 msgid "PPPoE" msgstr "PPPoE" #: plinth/package.py:156 msgid "packages not found" msgstr "paketler bulunamadı" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "Paketler başarılı bir şekilde kuruldu ve ayarlandı." #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "Paketlerin kurulmasında hata: {string} {details}" #: plinth/service.py:73 msgid "Web Server" msgstr "Web Sunucusu" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "SSL (Secure Socket Layer) üzerinden Web Sunucusu" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "Güvenli Kabuk (SSH) Sunucusu" #: plinth/service.py:79 #, python-brace-format #| msgid "FreedomBox Web Interface (Plinth)" msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Ağ Arayüzü (Plinth)" #: plinth/templates/404.html:25 msgid "404" msgstr "404" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "Talep edilen sayfa %(request_path)s bulunamadı." #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" "Eğer bu eksik sayfanın varolması gerektiğine inanıyorsanız, lütfen Plinth " "projesinin hata " "izleyicisine bir hata raporu bırakın." #: plinth/templates/500.html:25 msgid "500" msgstr "500" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" "Bu dahili bir hatadır ve sizin yaptığınız ya da giderebileceğiniz bir hata " "değildir. Lütfen hatayı hata izleyicisinde rapor edin ki sorunu giderebilelim." #: plinth/templates/base.html:49 #, python-format #| msgid "Plinth administrative interface for the FreedomBox" msgid "Plinth administrative interface for the %(box_name)s" msgstr "%(box_name)s için Plinth yönetim arayüzü" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Tarama Geçişi" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Parolayı değiştir" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Çıkış yap" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Giriş yap" #: plinth/templates/login.html:35 msgid "Login" msgstr "Giriş" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "Kurulum" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "" "Bu işlev ek paketlerin kurulumuna ihtiyaç duyar. Bu paketleri kurmak istiyor " "musunuz?" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "Paket" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "Özet" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "Kur" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "%(package_names)s kuruluyor: %(status)s" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% tamamlandı" #~ msgid "show password" #~ msgstr "parolayı göster" #~ msgid "The following is the current status:" #~ msgstr "Aşağıdaki güncel durumdur:" #~ msgid "FreedomBox Manual" #~ msgstr "FreedomBox Kullanım Kılavuzu" #~ msgid "" #~ "Many FreedomBox contributors and users are also available on the " #~ "#freedombox channel of the irc.oftc.net IRC network." #~ msgstr "" #~ "Birçok FreedomBox iştirakçileri ve kullanıcıları irc.oftc.net IRC " #~ "ağındaki #freedombox kanalındadır." #~ msgid "Create Wiki/Blog" #~ msgstr "Viki/Blog Oluştur" #~ msgid "Tor enabled" #~ msgstr "Tor etkindir" #~ msgid "Tor disabled" #~ msgstr "Tor devre dışıdır" #~ msgid "Tor hidden service enabled" #~ msgstr "Tor gizli servisi etkindir" #~ msgid "Tor hidden service disabled" #~ msgstr "Tor gizli servisi devre dışıdır" #~ msgid "Enabled package download over Tor" #~ msgstr "Yazılım paketlerinin Tor üzerinden indirilmesi etkinleştirildi" #~ msgid "Disabled package download over Tor" #~ msgstr "Yazılım paketlerinin Tor üzerinden indirilmesi devre dışı bırakıldı" #~ msgid "There was an error while upgrading." #~ msgstr "Yükseltme sırasında bir hata meydana geldi." #~ msgid "Output from unattended-upgrades:" #~ msgstr "unattended-upgrades çıktısı:" #~ msgid "The operating system is up to date now.  " #~ msgstr "İşletim sistemi artık günceldir.  " #~ msgid "Show Details" #~ msgstr "Ayrıntıları Göster" #~ msgid "" #~ "This will run unattended-upgrades, which will attempt to upgrade your " #~ "system with the latest Debian packages. It may take a few minutes to " #~ "complete." #~ msgstr "" #~ "Bu, sisteminizi en güncel Debian paketlerine yükseltmeyi deneyecek " #~ "unattended-upgrades programını çalıştıracaktır. Tamamlanması birkaç " #~ "dakika alabilir." #~ msgid "System is being upgraded." #~ msgstr "Sistem yükseltilmektedir." Plinth-0.8.1/plinth/locale/zh_CN/000077500000000000000000000000001266051671100165215ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/zh_CN/LC_MESSAGES/000077500000000000000000000000001266051671100203065ustar00rootroot00000000000000Plinth-0.8.1/plinth/locale/zh_CN/LC_MESSAGES/django.po000066400000000000000000003040771266051671100221230ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2016-02-04 02:36+0000\n" "Last-Translator: Tong Hui \n" "Language-Team: Chinese (China) " "\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" msgstr "正在 {kind} 侦听端口 {listen_address}:{port}" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" msgstr "正在 {kind} 侦听端口 {port}" #: plinth/action_utils.py:287 #, python-brace-format msgid "Access URL {url} on tcp{kind}" msgstr "在 tcp {kind} 访问 URL {url}" #: plinth/action_utils.py:290 #, python-brace-format msgid "Access URL {url}" msgstr "访问 URL {url}" #: plinth/action_utils.py:321 #, python-brace-format msgid "Connect to {host}:{port}" msgstr "连接到的主机 {host}: {port}" #: plinth/action_utils.py:324 #, python-brace-format msgid "Cannot connect to {host}:{port}" msgstr "不能连接到的主机 {host}: {port}" #: plinth/context_processors.py:36 msgid "FreedomBox" msgstr "FreedomBox" #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "应用程序" #: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "应用程序" #: plinth/modules/apps/templates/apps.html:25 msgid "Services and Applications" msgstr "服务和应用程序" #: plinth/modules/apps/templates/apps.html:28 #, python-format msgid "" "You can install and run various services and applications on your " "%(box_name)s. Click on any app page link on the left to read a description " "of the application and choose to install it." msgstr "你可以安装和运行各种服务和应用程序在您 %(box_name)s 上。点击左边应用程序链接阅读相应的描述,并选择是否要安装。" #: plinth/modules/apps/templates/apps.html:36 msgid "" "This box can be your photo sharing site, your instant messaging site, your " "social networking site, your news site. Remember web portals? We can be " "one of those too. Many of the services you use on the web could soon be on " "site and under your control!" msgstr "" "这个盒子可以是你的照片分享网站,即时消息传递站点,你的社交网站,您的新闻站点。 还记得门户网站吗?我们也可以是那些之一。 您在 web " "上使用的服务和网站上很快都会在你控制之下!" #: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 #: plinth/modules/avahi/templates/avahi.html:26 #: plinth/modules/avahi/views.py:53 msgid "Service Discovery" msgstr "服务发现" #: plinth/modules/avahi/forms.py:29 msgid "Enable service discovery" msgstr "启用服务发现" #: plinth/modules/avahi/templates/avahi.html:29 #, python-format msgid "" "Service discovery allows other devices on the network to discover your " "%(box_name)s and services running on it. It also allows %(box_name)s to " "discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" "服务发现允许其他设备在网络上发现你的 %(box_name)s 和在其上运行的服务。它还允许 %(box_name)s " "发现在您本地网络上运行的其他设备和服务。服务发现是非必需的,且只能在内部网络上运行。可以禁用以提高安全性,尤其是当连接到一个充满敌意的本地网络。" #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 #: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 #: plinth/modules/repro/templates/repro.html:58 #: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" msgstr "状态" #: plinth/modules/avahi/templates/avahi.html:45 msgid "Service discovery server is running" msgstr "服务发现服务正在运行" #: plinth/modules/avahi/templates/avahi.html:48 msgid "Service discovery server is not running" msgstr "服务发现服务未运行" #: plinth/modules/avahi/templates/avahi.html:52 #: plinth/modules/datetime/templates/datetime.html:48 #: plinth/modules/deluge/templates/deluge.html:53 #: plinth/modules/ikiwiki/templates/ikiwiki.html:35 #: plinth/modules/mumble/templates/mumble.html:59 #: plinth/modules/openvpn/templates/openvpn.html:130 #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 #: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 #: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" msgstr "配置" #: plinth/modules/avahi/templates/avahi.html:60 #: plinth/modules/datetime/templates/datetime.html:56 #: plinth/modules/deluge/templates/deluge.html:61 #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 #: plinth/modules/ikiwiki/templates/ikiwiki.html:43 #: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 #: plinth/modules/mumble/templates/mumble.html:67 #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 #: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 #: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 msgid "Update setup" msgstr "更新安装程序" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 #: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 #: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 #: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 #: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "配置已更新" #: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 #: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 #: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 #: plinth/modules/transmission/views.py:111 #: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "设置未改变" #: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 #: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "无效的域名" #: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "主机名" #: plinth/modules/config/config.py:97 #, python-brace-format msgid "" "Hostname is the local name by which other devices on the local network can " "reach your {box_name}. It must start and end with an alphabet or a digit " "and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "主机名是本地网络上的其他设备可以到达你 {box_name} 的本地名称。它必须以字母或数字结束和开始作为内部字符只有字母、数字和连字符。总长度必须为 " "63 个字符或更少。" #: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "无效的主机名" #: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 #: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "域名" #: plinth/modules/config/config.py:110 #, python-brace-format msgid "" "Domain name is the global name by which other devices on the Internet can " "reach your {box_name}. It must consist of labels separated by dots. Each " "label must start and end with an alphabet or a digit and have as interior " "characters only alphabets, digits and hyphens. Length of each label must be " "63 characters or less. Total length of domain name must be 253 characters " "or less." msgstr "" #: plinth/modules/config/config.py:125 msgid "Language" msgstr "语言" #: plinth/modules/config/config.py:127 msgid "Language for this web administration interface" msgstr "此 web 管理界面的语言" #: plinth/modules/config/config.py:135 #: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "配置" #: plinth/modules/config/config.py:176 msgid "General Configuration" msgstr "常规配置" #: plinth/modules/config/config.py:193 #, python-brace-format msgid "Error setting hostname: {exception}" msgstr "设置主机名错误:{exception}" #: plinth/modules/config/config.py:196 msgid "Hostname set" msgstr "主机名设置" #: plinth/modules/config/config.py:202 #, python-brace-format msgid "Error setting domain name: {exception}" msgstr "设置域名错误:{exception}" #: plinth/modules/config/config.py:205 msgid "Domain name set" msgstr "域名集" #: plinth/modules/config/config.py:213 #, python-brace-format msgid "Error setting language: {exception}" msgstr "设置语言错误:{exception}" #: plinth/modules/config/config.py:216 msgid "Language changed" msgstr "语言已更改" #: plinth/modules/config/templates/config.html:32 msgid "Submit" msgstr "提交" #: plinth/modules/datetime/__init__.py:39 #: plinth/modules/datetime/templates/datetime.html:26 #: plinth/modules/datetime/views.py:58 msgid "Date & Time" msgstr "日期与时间" #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" msgstr "网络时间服务器" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" msgstr "NTP 客户端正在与服务器联系" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" msgstr "启用网络时间" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" msgstr "时区" #: plinth/modules/datetime/forms.py:36 msgid "" "Set your time zone to get accurate timestamps. This will set the systemwide " "time zone." msgstr "设置您的时区来得到准确的时间戳。这将影响全系统时区。" #: plinth/modules/datetime/forms.py:47 msgid "-- no time zone set --" msgstr "-- 时区未设置 --" #: plinth/modules/datetime/templates/datetime.html:29 msgid "" "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "网络时间服务是与 Internet 上的服务器同步系统时间的一个程序。" #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" msgstr "网络时间服务器运行中" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" msgstr "网络时间服务器未运行" #: plinth/modules/datetime/views.py:93 #, python-brace-format msgid "Error setting time zone: {exception}" msgstr "设置时区错误:{exception}" #: plinth/modules/datetime/views.py:96 msgid "Time zone set" msgstr "时区设置" #: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 msgid "BitTorrent (Deluge)" msgstr "BitTorrent 下载(Deluge)" #: plinth/modules/deluge/__init__.py:43 msgid "Deluge BitTorrent" msgstr "Deluge BitTorrent 客户端" #: plinth/modules/deluge/forms.py:29 msgid "Enable Deluge" msgstr "启用 Deluge" #: plinth/modules/deluge/templates/deluge.html:26 msgid "BitTorrent Web Client (Deluge)" msgstr "BitTorrent 网页客户端(Deluge)" #: plinth/modules/deluge/templates/deluge.html:28 msgid "Deluge is a BitTorrent client that features a Web UI." msgstr "Deluge 是一个有网页界面的 BitTorrent 客户端。" #: plinth/modules/deluge/templates/deluge.html:31 msgid "" "When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" msgstr "deluge-web 正在运行" #: plinth/modules/deluge/templates/deluge.html:47 msgid "deluge-web is not running" msgstr "deluge-web 未运行" #: plinth/modules/diagnostics/diagnostics.py:45 msgid "Diagnostics" msgstr "诊断程序" #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" msgstr "系统诊断" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" msgstr "诊断测试" #: plinth/modules/diagnostics/templates/diagnostics.html:37 msgid "" "The system diagnostic test will run a number of checks on your system to " "confirm that applications and services are working as expected." msgstr "系统诊断将运行测试程序检查您的系统以确认应用程序和服务正在按预期方式运行。" #: plinth/modules/diagnostics/templates/diagnostics.html:50 #: plinth/modules/diagnostics/templates/diagnostics_button.html:27 msgid "Run Diagnostics" msgstr "运行诊断程序" #: plinth/modules/diagnostics/templates/diagnostics.html:53 msgid "Diagnotics test is currently running" msgstr "当前正在运行诊断测试" #: plinth/modules/diagnostics/templates/diagnostics.html:66 msgid "Results" msgstr "结果" #: plinth/modules/diagnostics/templates/diagnostics.html:74 #, python-format msgid "Module: %(module)s" msgstr "模块:%(module)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:25 msgid "Diagnostic Results" msgstr "诊断结果" #: plinth/modules/diagnostics/templates/diagnostics_module.html:27 #, python-format msgid "Module: %(module_name)s" msgstr "模块:%(module_name)s" #: plinth/modules/diagnostics/templates/diagnostics_module.html:32 msgid "This module does not support diagnostics" msgstr "此模块不支持诊断" #: plinth/modules/diagnostics/templates/diagnostics_results.html:27 msgid "Test" msgstr "测试" #: plinth/modules/diagnostics/templates/diagnostics_results.html:28 msgid "Result" msgstr "结果" #: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "关于" #: plinth/modules/dynamicdns/dynamicdns.py:45 #: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "动态 DNS" #: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" "变量 < 用户 > < 传递 > < Ip > < 域 > 可能在 URL 内使用。详细信息请参见更新 " "URL 模板的示例提供程序。" #: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "请选择您的提供商更新协议。如果您的提供商不支持 GnudIP 协议或未列出您的提供商可能会使用您的提供商的更新 URL。" #: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " "hostname of the GnuDIP server (like \"example.com\")." msgstr "" "请不要在此输入 URL(如\"https://example.com/\"),只输入 GnuDIP 服务器的主机名(例如“example.com”)。" #: plinth/modules/dynamicdns/dynamicdns.py:84 #, python-brace-format msgid "The public domain name you want use to reach your {box_name}." msgstr "你要访问你的 {box_name} 想使用的公开域名。" #: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "如果您的提供商使用自签名的证书,请使用此选项。" #: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "如果选择了此选项,您的用户名和密码将用于 HTTP 基本身份验证。" #: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "如果你想保持你以前配置的密码,请将此字段留空的。" #: plinth/modules/dynamicdns/dynamicdns.py:96 #, python-brace-format msgid "" "Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " "Internet IP. The URL should simply return the IP where the client comes from " "(example: http://myip.datasystems24.de)." msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "您在创建该帐户时应该被要求选择一个用户名。" #: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "启用动态 DNS" #: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "服务类型" #: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnudIP 服务器地址" #: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "服务器名称无效" #: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "更新 URL" #: plinth/modules/dynamicdns/dynamicdns.py:135 msgid "Accept all SSL certificates" msgstr "接受所有 SSL 证书" #: plinth/modules/dynamicdns/dynamicdns.py:139 msgid "Use HTTP basic authentication" msgstr "使用 HTTP 基本身份验证" #: plinth/modules/dynamicdns/dynamicdns.py:151 #: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "用户名" #: plinth/modules/dynamicdns/dynamicdns.py:154 #: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "密码" #: plinth/modules/dynamicdns/dynamicdns.py:157 #: plinth/modules/networks/forms.py:149 msgid "Show password" msgstr "显示密码" #: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP 检查 URL" #: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "请提供更新 URL 或 GnuDIP 服务器" #: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "请提供 GnuDIP 用户名" #: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "请提供 GnuDIP 域" #: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "请提供一个密码" #: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "配置动态 DNS" #: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "动态 DNS 的状态" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 msgid "Dynamic DNS Client" msgstr "动态 DNS 客户端" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 #, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " "may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " "Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" "If you are looking for a free dynamic DNS account, you may find a free " "GnuDIP service at gnudip.datasystems24.net or you may find free update URL " "based services on " "freedns.afraid.org." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 #, python-format msgid "" "If your %(box_name)s is connected behind some NAT router, don't forget to " "add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "如果您的 %(box_name)s 通过 NAT 方式的路由连接,别忘了添加端口转发(即转发一些标准端口像 80 和 443)。" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" "You have disabled Javascript. Dynamic form mode is disabled and some helper " "functions may not work (but the main functionality should work)." msgstr "您已禁用 Javascript。禁用动态表单模式和一些 helper 函数可能无法工作(但主要功能应该工作)。" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 msgid "NAT type" msgstr "NAT 类型" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 msgid "" "NAT type not detected yet, if you do not provide a \"IP check URL\" we will " "not detect a NAT type." msgstr "不能探测到 NAT 类型,如果你不提供”IP 检查 URL“我们将检测不到 NAT 类型。" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 msgid "Direct connection to the Internet." msgstr "直接连接到互联网。" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" "Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" "\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " "changes will not be detected). In case the WAN IP changes, it may take up " "to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" msgstr "最后一次更新" #: plinth/modules/firewall/firewall.py:39 #: plinth/modules/firewall/firewall.py:49 #: plinth/modules/firewall/firewall.py:57 msgid "Firewall" msgstr "防火墙" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" "Firewall is a security system that controls the incoming and outgoing " "network traffic on your %(box_name)s. Keeping a firewall enabled and " "properly configured reduces risk of security threat from the Internet." msgstr "防火墙控制你 %(box_name)s 上的进出网络流量。启用并正确配置防火墙上可以减少来自互联网的安全威胁。" #: plinth/modules/firewall/templates/firewall.html:36 msgid "Current status:" msgstr "当前状态:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format msgid "" "Firewall daemon is not running. Please run it. Firewall comes enabled by " "default on %(box_name)s. On any Debian based system (such as %(box_name)s) " "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" #: plinth/modules/firewall/templates/firewall.html:56 msgid "Service/Port" msgstr "服务/端口" #: plinth/modules/firewall/templates/firewall.html:67 #: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "启用" #: plinth/modules/firewall/templates/firewall.html:70 #: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "已禁用" #: plinth/modules/firewall/templates/firewall.html:81 msgid "Permitted" msgstr "允许" #: plinth/modules/firewall/templates/firewall.html:84 msgid "Permitted (internal only)" msgstr "允许(只允许内部连接)" #: plinth/modules/firewall/templates/firewall.html:87 msgid "Permitted (external only)" msgstr "允许(只允许外部连接)" #: plinth/modules/firewall/templates/firewall.html:90 msgid "Blocked" msgstr "已阻止" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " "also permitted in the firewall and when you disable a service it is also " "disabled in the firewall." msgstr "防火墙的操作是自动的。当您启用服务时它也在防火墙中允许,当禁用一项服务时也会禁用防火墙中的相应服务。" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." msgstr "创建 LDAP 用户失败。" #: plinth/modules/first_boot/forms.py:56 msgid "Failed to add new user to admin group." msgstr "未能将新用户添加到管理员组。" #: plinth/modules/first_boot/forms.py:78 msgid "User account created, you are now logged in" msgstr "用户帐户已创建,您现在可以登录" #: plinth/modules/first_boot/templates/firstboot_navbar.html:23 #: plinth/modules/help/templates/help_index.html:25 #: plinth/templates/base.html:102 msgid "Help" msgstr "帮助" #: plinth/modules/first_boot/templates/firstboot_state0.html:45 msgid "Start Setup" msgstr "启动安装程序" #: plinth/modules/first_boot/templates/firstboot_state0.html:49 #, python-format msgid "" "To complete the setup of your %(box_name)s, please provide some basic " "information." msgstr "要完成您的 %(box_name)s 安装,请提供一些基本信息。" #: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "管理员帐户" #: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "选择一个用户名和密码才能访问此 web 界面。以后可以更改密码。此用户将被授予管理权限。其他用户可以在以后添加。" #: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "用起来!" #: plinth/modules/first_boot/templates/firstboot_state10.html:29 msgid "Setup Complete!" msgstr "安装已完成!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 #, python-format msgid "" "%(box_name)s setup is now complete. To make your %(box_name)s functional, " "you need some applications. They will be installed the first time you " "access them." msgstr "%(box_name)s 安装程序现已完成。 若要使您的 %(box_name)s 起作用,您需要一些应用程序。 它们会在您首次访问时安装。" #: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "转到应用程序" #: plinth/modules/first_boot/templates/firstboot_state10.html:44 msgid "Current Network Configuration" msgstr "当前的网络配置" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 msgid "" "You should check the network setup and modify it if necessary. Do not forget " "to change the default Wi-Fi passwords!" msgstr "你应该检查网络设置,如果有必要可对其修改。若要更改默认无线上网密码,请不要忘记!" #: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "转到网络" #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "安装完成" #: plinth/modules/help/help.py:34 msgid "Documentation" msgstr "文档" #: plinth/modules/help/help.py:36 msgid "Where to Get Help" msgstr "从何处获得帮助" #: plinth/modules/help/help.py:38 msgid "Manual" msgstr "手册" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" msgstr "文档和 FAQ" #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" msgstr "关于 {box_name}" #: plinth/modules/help/help.py:73 #, python-brace-format msgid "{box_name} Manual" msgstr "{box_name} 手册" #: plinth/modules/help/templates/help_about.html:30 #, python-format msgid "" "%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " "and a Tor relay, on a device that can replace your Wi-Fi router, so that " "your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 msgid "" "We live in a world where our use of the network is mediated by those who " "often do not have our best interests at heart. By building software that " "does not rely on a central service, we can regain control and privacy. By " "keeping our data in our homes, we gain useful legal protections over it. By " "giving back power to the users over their networks and machines, we are " "returning the Internet to its intended peer-to-peer architecture." msgstr "" #: plinth/modules/help/templates/help_about.html:56 #, python-format msgid "" "There are a number of projects working to realize a future of distributed " "services; %(box_name)s aims to bring them all together in a convenient " "package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 #, python-format msgid "" "For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "有关 %(box_name)s 项目的详细信息,请参阅 %(box_name)s Wiki。" #: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "了解更多»" #: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "您正在运行 Plinth 版本 %(version)s。" #: plinth/modules/help/templates/help_base.html:36 #, python-format msgid "%(box_name)s Setup" msgstr "%(box_name)s 安装程序" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" "The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" " %(box_name)s 手册 是开始了解 %(box_name)s 有关信息最好的地方。" #: plinth/modules/help/templates/help_index.html:36 #, python-format msgid "" " " "%(box_name)s project wiki contains further information." msgstr "" " %(box_name)" "s 项目 wiki 包含更多信息。" #: plinth/modules/help/templates/help_index.html:43 #, python-format msgid "" "To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " "problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 #, python-format msgid "" "Many %(box_name)s contributors and users are also available on the irc.oftc." "net IRC network. Join and request help on the #freedombox " "channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki 和博客(ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 msgid "ikiwiki wikis and blogs" msgstr "ikiwiki wiki 和博客" #: plinth/modules/ikiwiki/forms.py:29 msgid "Enable ikiwiki" msgstr "启用 ikiwiki" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 msgid "Type" msgstr "类型" #: plinth/modules/ikiwiki/forms.py:39 #: plinth/modules/networks/templates/connection_show.html:78 msgid "Name" msgstr "名称" #: plinth/modules/ikiwiki/forms.py:41 msgid "Admin Account Name" msgstr "管理员帐户名称" #: plinth/modules/ikiwiki/forms.py:44 msgid "Admin Account Password" msgstr "管理员帐户密码" #: plinth/modules/ikiwiki/templates/ikiwiki.html:27 msgid "" "When enabled, the blogs and wikis will be available from /ikiwiki." msgstr "启用以后,博客和 wiki 将可从 /ikiwiki 访问。" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format msgid "Delete Wiki or Blog %(name)s" msgstr "删除 wiki 页面或博客 %(name)s " #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " "history. Delete this wiki or blog permanently?" msgstr "此操作将删除所有文章、 网页和评论包括修订历史记录。 永久删除此 wiki 或博客吗?" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "删除 %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 #: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" msgstr "取消" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." msgstr "没有 wiki 或博客可用。" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" msgstr "创建一个 Wiki 或博客" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format msgid "Delete site %(site)s" msgstr "删除站点 %(site)s" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 #, python-format msgid "Go to site %(site)s" msgstr "转到站点 %(site)s" #: plinth/modules/ikiwiki/views.py:38 msgid "Manage" msgstr "管理" #: plinth/modules/ikiwiki/views.py:40 msgid "Create" msgstr "创建" #: plinth/modules/ikiwiki/views.py:73 msgid "Wiki and Blog" msgstr "Wiki 和博客" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "管理 Wiki 和博客" #: plinth/modules/ikiwiki/views.py:132 msgid "Create Wiki or Blog" msgstr "创建 Wiki 或博客" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format msgid "Created wiki {name}." msgstr "创建 wiki {name}。" #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" msgstr "不能创建 wiki:{error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format msgid "Created blog {name}." msgstr "已创建的博客 {name}。" #: plinth/modules/ikiwiki/views.py:161 #, python-brace-format msgid "Could not create blog: {error}" msgstr "不能创建博客:{error}" #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." msgstr "{name} 已删除。" #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" msgstr "不能删除 {name}:{error}" #: plinth/modules/ikiwiki/views.py:182 msgid "Delete Wiki or Blog" msgstr "删除 wiki 页面或博客" #: plinth/modules/letsencrypt/__init__.py:43 #: plinth/modules/letsencrypt/templates/letsencrypt.html:38 #: plinth/modules/letsencrypt/views.py:45 msgid "Certificates (Let's Encrypt)" msgstr "证书(Let's Encrypt)" #: plinth/modules/letsencrypt/templates/letsencrypt.html:41 #, python-format msgid "" "A digital certficate allows users of a web service to verify the identity of " "the service and to securely communicate with it. %(box_name)s can " "automatically obtain and setup digital certificates for each available " "domain. It does so by proving itself to be the owner of a domain to Let's " "Encrypt, a certficate authority (CA)." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:52 msgid "" "Let's Encrypt is a free, automated, and open certificate authority, run for " "the public’s benefit by the Internet Security Research Group (ISRG). Please " "read and agree with the Let's Encrypt Subscriber Agreement before using this service." msgstr "" #: plinth/modules/letsencrypt/templates/letsencrypt.html:66 #: plinth/modules/monkeysphere/templates/monkeysphere.html:70 msgid "Domain" msgstr "域名" #: plinth/modules/letsencrypt/templates/letsencrypt.html:67 msgid "Certificate Status" msgstr "证书状态" #: plinth/modules/letsencrypt/templates/letsencrypt.html:68 msgid "Website Security" msgstr "网站安全" #: plinth/modules/letsencrypt/templates/letsencrypt.html:69 #: plinth/modules/monkeysphere/templates/monkeysphere.html:72 msgid "Actions" msgstr "行动" #: plinth/modules/letsencrypt/templates/letsencrypt.html:79 #, python-format msgid "Expires on %(expiry_date)s" msgstr "到期日期 %(expiry_date)s" #: plinth/modules/letsencrypt/templates/letsencrypt.html:85 msgid "No certficate" msgstr "没有证书" #: plinth/modules/letsencrypt/templates/letsencrypt.html:102 msgid "Revoke" msgstr "撤销" #: plinth/modules/letsencrypt/templates/letsencrypt.html:108 msgid "Re-obtain" msgstr "重新获取" #: plinth/modules/letsencrypt/templates/letsencrypt.html:115 msgid "Obtain" msgstr "获取" #: plinth/modules/letsencrypt/views.py:55 #, python-brace-format msgid "Certificate successfully revoked for domain {domain}" msgstr "成功为域名 {domain} 吊销证书" #: plinth/modules/letsencrypt/views.py:60 #, python-brace-format msgid "Failed to revoke certificate for domain {domain}: {error}" msgstr "无法为 {domain} 撤销证书:{error}" #: plinth/modules/letsencrypt/views.py:72 #, python-brace-format msgid "Certificate successfully obtained for domain {domain}" msgstr "为域名 {domain} 成功获得证书" #: plinth/modules/letsencrypt/views.py:77 #, python-brace-format msgid "Failed to obtain certificate for domain {domain}: {error}" msgstr "未能为域名 {domain} 获取证书:{error}" #: plinth/modules/monkeysphere/__init__.py:32 #: plinth/modules/monkeysphere/templates/monkeysphere.html:35 #: plinth/modules/monkeysphere/views.py:44 msgid "Monkeysphere" msgstr "Monkeysphere" #: plinth/modules/monkeysphere/templates/monkeysphere.html:38 msgid "" "With Monkeysphere, a PGP key can be generated for each configured domain " "serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " "Users connecting to this machine through SSH can verify that they are " "connecting to the correct host. For users to trust the key, at least one " "person (usually the machine owner) must sign the key using the regular PGP " "key signing process. See the Monkeysphere SSH documentation for more details." msgstr "" #: plinth/modules/monkeysphere/templates/monkeysphere.html:53 msgid "Publishing key to keyserver..." msgstr "正在发布密钥到密钥服务器..." #: plinth/modules/monkeysphere/templates/monkeysphere.html:71 msgid "GPG Fingerprint" msgstr "GPG 指纹" #: plinth/modules/monkeysphere/templates/monkeysphere.html:83 #: plinth/modules/names/views.py:45 msgid "Not Available" msgstr "不可用" #: plinth/modules/monkeysphere/templates/monkeysphere.html:93 msgid "Generate PGP Key" msgstr "生成 PGP 密钥" #: plinth/modules/monkeysphere/templates/monkeysphere.html:101 msgid "Publish Key" msgstr "发布密钥" #: plinth/modules/monkeysphere/views.py:58 msgid "Generated PGP key." msgstr "已生成的 PGP 密钥。" #: plinth/modules/monkeysphere/views.py:83 msgid "Cancelled key publishing." msgstr "已取消的密钥发布。" #: plinth/modules/monkeysphere/views.py:120 msgid "Published key to keyserver." msgstr "已发布到密钥服务器的密钥。" #: plinth/modules/monkeysphere/views.py:122 msgid "Error occurred while publishing key." msgstr "发布密钥时出现错误。" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 msgid "Voice Chat (Mumble)" msgstr "语音聊天(Mumble)" #: plinth/modules/mumble/__init__.py:43 msgid "Mumble Voice Chat Server" msgstr "Mumble 语音聊天服务器" #: plinth/modules/mumble/forms.py:29 msgid "Enable Mumble daemon" msgstr "启用 Mumble 守护进程" #: plinth/modules/mumble/templates/mumble.html:29 msgid "" "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "Mumble 是一个开放源码的低延迟、 加密、 高品质语音聊天软件。" #: plinth/modules/mumble/templates/mumble.html:36 msgid "" "You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" "您可以使用常规端口 64738 连接到您的 Mumble 服务器。您可以从桌面和 Android 设备连接 Mumble 客户端。" #: plinth/modules/mumble/templates/mumble.html:49 msgid "Mumble server is running" msgstr "Mumble 服务器正在运行" #: plinth/modules/mumble/templates/mumble.html:52 msgid "Mumble server is not running" msgstr "Mumble 服务器未运行" #: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" #: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" #: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" #: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "名称服务" #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "在 IPv{kind} 上使用 DNSSEC" #: plinth/modules/networks/forms.py:30 msgid "Connection Type" msgstr "连接类型" #: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "连接名称" #: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "物理接口" #: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "连接应绑定到的网络设备。" #: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "防火墙区域" #: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "防火墙区域将控制哪些服务可用在此接口。选择内部只有受信任的网络。" #: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 寻址方式" #: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "\"共享\"的方法将启动 DHCP 服务器而\"自动\"方法将获得从 DHCP 服务器的配置。" #: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "地址" #: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "子网掩码" #: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "可选的值。如果为空,则将使用基于地址的默认子网掩码。" #: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "网关" #: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "可选的值。" #: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS 服务器" #: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "可选的值。如果给出了此值和 IPv4 寻址方法是\"自动\",将忽略由 DHCP 服务器提供的 DNS 服务器。" #: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "备选 DNS 服务器" #: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "可选的值。如果给出了此值和 IPv4 寻址方式是\"自动\",将忽略由 DHCP 服务器提供的 DNS 服务器。" #: plinth/modules/networks/forms.py:89 msgid "-- select --" msgstr "-- 选择 --" #: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" #: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "可见网络的名称。" #: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "模式" #: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "身份验证模式" #: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "如果无线网络安全的和要求客户端具有密码才能连接,请选择 WPA。" #: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "密码" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "网络连接" #: plinth/modules/networks/networks.py:38 #: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "附近的无线网络" #: plinth/modules/networks/networks.py:40 #: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "添加连接" #: plinth/modules/networks/networks.py:46 msgid "Networks" msgstr "网络" #: plinth/modules/networks/networks.py:66 msgid "Cannot show connection: Connection not found." msgstr "不能显示连接: 找不到连接。" #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" msgstr "显示连接信息" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." msgstr "不能编辑连接: 找不到连接。" #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." msgstr "这种类型的连接尚没有引入。" #: plinth/modules/networks/networks.py:139 #: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "编辑连接" #: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "激活的连接 {name}。" #: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "未能激活连接: 找不到连接。" #: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "未能激活连接 {name}: 没有合适的设备是可用。" #: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "停用的连接 {name}。" #: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "无法取消激活连接: 找不到连接。" #: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "添加新的以太网连接" #: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "添加新的 PPPoE 连接" #: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "添加新的 Wi-Fi 连接" #: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "连接 {name} 已删除。" #: plinth/modules/networks/networks.py:349 #: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "删除连接失败: 找不到连接。" #: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "删除连接" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "编辑连接" #: plinth/modules/networks/templates/connection_show.html:43 #: plinth/templates/base.html:123 msgid "Edit" msgstr "編輯" #: plinth/modules/networks/templates/connection_show.html:50 #: plinth/modules/networks/templates/connections_list.html:78 msgid "Deactivate" msgstr "停用" #: plinth/modules/networks/templates/connection_show.html:57 #: plinth/modules/networks/templates/connections_list.html:86 msgid "Activate" msgstr "激活" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete connection" msgstr "删除连接" #: plinth/modules/networks/templates/connection_show.html:63 msgid "Delete" msgstr "删除" #: plinth/modules/networks/templates/connection_show.html:66 #: plinth/modules/networks/templates/connections_diagram.html:73 #: plinth/modules/networks/templates/connections_diagram.html:76 #: plinth/modules/networks/templates/connections_diagram.html:105 #: plinth/modules/networks/templates/connections_diagram.html:127 msgid "Connection" msgstr "连接" #: plinth/modules/networks/templates/connection_show.html:71 msgid "Primary connection" msgstr "主连接" #: plinth/modules/networks/templates/connection_show.html:73 #: plinth/modules/networks/templates/connection_show.html:217 #: plinth/modules/networks/templates/connection_show.html:256 msgid "yes" msgstr "是的" #: plinth/modules/networks/templates/connection_show.html:84 msgid "Device" msgstr "设备" #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" msgstr "状态" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" msgstr "状态原因" #: plinth/modules/networks/templates/connection_show.html:102 msgid "MAC address" msgstr "MAC 地址" #: plinth/modules/networks/templates/connection_show.html:106 msgid "Interface" msgstr "接口" #: plinth/modules/networks/templates/connection_show.html:110 msgid "Description" msgstr "描述" #: plinth/modules/networks/templates/connection_show.html:116 msgid "Physical Link" msgstr "物理链路" #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" msgstr "链路状态" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" msgstr "线缆已连接" #: plinth/modules/networks/templates/connection_show.html:128 msgid "please check cable" msgstr "请检查线缆" #: plinth/modules/networks/templates/connection_show.html:133 #: plinth/modules/networks/templates/connection_show.html:149 msgid "Speed" msgstr "速度" #: plinth/modules/networks/templates/connection_show.html:135 #, python-format msgid "%(ethernet_speed)s Mbit/s" msgstr "%(ethernet_speed)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:151 #, python-format msgid "%(wireless_bitrate)s Mbit/s" msgstr "%(wireless_bitrate)s Mbit/s" #: plinth/modules/networks/templates/connection_show.html:163 msgid "Signal strength" msgstr "信号强度" #: plinth/modules/networks/templates/connection_show.html:173 msgid "Channel" msgstr "信道" #: plinth/modules/networks/templates/connection_show.html:181 msgid "IPv4" msgstr "IPv4" #: plinth/modules/networks/templates/connection_show.html:186 #: plinth/modules/networks/templates/connection_show.html:227 msgid "Method" msgstr "方法" #: plinth/modules/networks/templates/connection_show.html:193 #: plinth/modules/networks/templates/connection_show.html:234 msgid "IP address" msgstr "IP 地址" #: plinth/modules/networks/templates/connection_show.html:209 #: plinth/modules/networks/templates/connection_show.html:248 msgid "DNS server" msgstr "DNS 服务器" #: plinth/modules/networks/templates/connection_show.html:216 #: plinth/modules/networks/templates/connection_show.html:255 msgid "Default" msgstr "默认" #: plinth/modules/networks/templates/connection_show.html:222 msgid "IPv6" msgstr "IPv6" #: plinth/modules/networks/templates/connection_show.html:263 msgid "This connection is not active." msgstr "此连接未处于激活状态。" #: plinth/modules/networks/templates/connection_show.html:266 msgid "Security" msgstr "安全" #: plinth/modules/networks/templates/connection_show.html:271 #: plinth/modules/networks/templates/connection_show.html:291 #: plinth/modules/networks/templates/connection_show.html:310 msgid "Firewall zone" msgstr "防火墙区域" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" "This interface should be connected to a local network/machine. If you " "connect this interface to a public network, services meant to be available " "only internally will become available externally. This is a security risk." msgstr "此接口应该连接到本地网络。 如果您将此接口连接到公用网络,意味着只为内网提供的服务将成开放给外网。这会产生安全风险。" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" "This interface should receive your Internet connection. If you connect it to " "a local network/machine, many services meant to available only internally " "will not be available." msgstr "此接口应该接收您的 Internet 连接。如果你将其连接到本地网络,这意味着很多仅在内网可用的服务将不可用。" #: plinth/modules/networks/templates/connection_show.html:319 #, python-format msgid "" "This interface is not maintained by %(box_name)s. Its security status is " "unknown to %(box_name)s. Many %(box_name)s services may not be available on " "this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." msgstr "创建..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" msgstr "创建连接" #: plinth/modules/networks/templates/connections_delete.html:29 #, python-format msgid "Delete connection %(name)s permanently?" msgstr "永久删除连接 %(name)s?" #: plinth/modules/networks/templates/connections_diagram.html:65 msgid "Internet" msgstr "互联网" #: plinth/modules/networks/templates/connections_diagram.html:70 #: plinth/modules/networks/templates/connections_diagram.html:102 msgid "Spacing" msgstr "间距" #: plinth/modules/networks/templates/connections_diagram.html:78 msgid "External" msgstr "外网" #: plinth/modules/networks/templates/connections_diagram.html:83 #: plinth/modules/networks/templates/connections_diagram.html:113 #: plinth/network.py:37 msgid "Ethernet" msgstr "以太网" #: plinth/modules/networks/templates/connections_diagram.html:86 #: plinth/modules/networks/templates/connections_diagram.html:116 #: plinth/network.py:38 msgid "Wi-Fi" msgstr "Wi-Fi" #: plinth/modules/networks/templates/connections_diagram.html:89 #, python-format msgid "Show connection %(connection.name)s" msgstr "显示连接 %(connection.name)s" #: plinth/modules/networks/templates/connections_diagram.html:107 msgid "Internal" msgstr "内网" #: plinth/modules/networks/templates/connections_diagram.html:119 #, python-format msgid "Show connection %(name)s" msgstr "显示连接 %(name)s" #: plinth/modules/networks/templates/connections_diagram.html:131 msgid "Computer" msgstr "计算机" #: plinth/modules/networks/templates/connections_list.html:67 #, python-format msgid "Delete connection %(name)s" msgstr "删除连接 %(name)s" #: plinth/modules/networks/templates/connections_list.html:92 msgid "Active" msgstr "激活" #: plinth/modules/networks/templates/connections_list.html:95 msgid "Inactive" msgstr "未激活" #: plinth/modules/openvpn/__init__.py:38 #: plinth/modules/openvpn/templates/openvpn.html:35 #: plinth/modules/openvpn/views.py:62 msgid "Virtual Private Network (OpenVPN)" msgstr "虚拟专用网络(OpenVPN)" #: plinth/modules/openvpn/__init__.py:43 msgid "OpenVPN" msgstr "OpenVPN" #: plinth/modules/openvpn/forms.py:29 msgid "Enable OpenVPN server" msgstr "启用 OpenVPN 服务器" #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " "devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:51 msgid "Profile" msgstr "配置文件" #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "配置文件是特定于每个 %(box_name)s 用户的。请保持其私密。" #: plinth/modules/openvpn/templates/openvpn.html:76 msgid "Download my profile" msgstr "下载我的配置文件" #: plinth/modules/openvpn/templates/openvpn.html:85 #, python-format msgid "" "OpenVPN has not yet been setup. Performing a secure setup takes a very long " "time. Depending on how fast your %(box_name)s is, it may even take hours. " "If the setup is interrupted, you may start it again." msgstr "" "OpenVPN 尚未安装。 执行安全的安装需要很长的时间。 根据您的 %(box_name)s 运行速度,它甚至可能需要小时。 " "如果安装程序中断,您可以重新启动。" #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" msgstr "启动安装程序" #: plinth/modules/openvpn/templates/openvpn.html:104 msgid "OpenVPN setup is running" msgstr "OpenVPN 安装程序正在运行" #: plinth/modules/openvpn/templates/openvpn.html:108 #, python-format msgid "" "To perform a secure setup, this process takes a very long time. Depending " "on how fast your %(box_name)s is, it may even take hours. If the setup is " "interrupted, you may start it again." msgstr "" "若要执行更安全的安装,此过程需要很长的时间。根据您的 %(box_name)s 运行速度,它甚至可能需要数小时。如果安装程序中断,您可以重新启动。" #: plinth/modules/openvpn/templates/openvpn.html:121 msgid "OpenVPN server is running" msgstr "OpenVPN 服务正在运行" #: plinth/modules/openvpn/templates/openvpn.html:124 msgid "OpenVPN server is not running" msgstr "OpenVPN 服务器未运行" #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." msgstr "安装已完成。" #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." msgstr "安装失败。" #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" msgstr "启用 ownCloud" #: plinth/modules/owncloud/owncloud.py:44 #: plinth/modules/owncloud/templates/owncloud.html:26 msgid "File Hosting (ownCloud)" msgstr "文件存储(ownCloud)" #: plinth/modules/owncloud/owncloud.py:51 #: plinth/modules/owncloud/owncloud.py:80 msgid "ownCloud" msgstr "ownCloud" #: plinth/modules/owncloud/owncloud.py:97 msgid "ownCloud enabled" msgstr "ownCloud 已启用" #: plinth/modules/owncloud/owncloud.py:100 msgid "ownCloud disabled" msgstr "ownCloud 已禁用" #: plinth/modules/owncloud/templates/owncloud.html:29 msgid "" "ownCloud gives you universal access to your files through a web interface or " "WebDAV. It also provides a platform to easily view & sync your contacts, " "calendars and bookmarks across all your devices and enables basic editing " "right on the web. Installation has minimal server requirements, doesn't need " "special permissions and is quick. ownCloud is extendable via a simple but " "powerful API for applications and plugins." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:41 msgid "" "When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " "the initial administration account for ownCloud." msgstr "" #: plinth/modules/owncloud/templates/owncloud.html:59 msgid "Apply changes" msgstr "应用更改" #: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 msgid "Public Visibility (PageKite)" msgstr "公开可见性(PageKite)" #: plinth/modules/pagekite/forms.py:46 msgid "Enable PageKite" msgstr "启用 PageKite" #: plinth/modules/pagekite/forms.py:49 msgid "Server domain" msgstr "服务器域" #: plinth/modules/pagekite/forms.py:51 msgid "" "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "选择您的 pagekite 服务器。设置\"pagekite.net\"以便使用默认的 pagekite.net 服务器。" #: plinth/modules/pagekite/forms.py:55 msgid "Server port" msgstr "服务器端口" #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" msgstr "你 pagekite 服务器的端口 (默认: 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" msgstr "Kite 名字" #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" msgstr "示例: mybox.pagekite.me" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" msgstr "无效的 Kite 名称" #: plinth/modules/pagekite/forms.py:65 msgid "Kite secret" msgstr "Kite 密码" #: plinth/modules/pagekite/forms.py:67 msgid "" "A secret associated with the kite or the default secret for your account if " "no secret is set on the kite." msgstr "" #: plinth/modules/pagekite/forms.py:83 msgid "Kite details set" msgstr "Kite 详细信息设置" #: plinth/modules/pagekite/forms.py:90 msgid "Pagekite server set" msgstr "Pagekite 服务器设置" #: plinth/modules/pagekite/forms.py:96 msgid "PageKite enabled" msgstr "PageKite 已启用" #: plinth/modules/pagekite/forms.py:99 msgid "PageKite disabled" msgstr "PageKite 已禁用" #: plinth/modules/pagekite/forms.py:135 #, python-brace-format msgid "Service enabled: {name}" msgstr "启用的服务:{name}" #: plinth/modules/pagekite/forms.py:139 #, python-brace-format msgid "Service disabled: {name}" msgstr "已禁用的服务:{name}" #: plinth/modules/pagekite/forms.py:150 msgid "protocol" msgstr "协议" #: plinth/modules/pagekite/forms.py:153 msgid "external (frontend) port" msgstr "外网(前端)端口" #: plinth/modules/pagekite/forms.py:156 msgid "internal (freedombox) port" msgstr "内网(freedombox)端口" #: plinth/modules/pagekite/forms.py:158 msgid "Enable Subdomains" msgstr "启用子域" #: plinth/modules/pagekite/forms.py:191 msgid "Deleted custom service" msgstr "删除自定义服务" #: plinth/modules/pagekite/forms.py:225 msgid "" "This service is available as a standard service. Please use the \"Standard " "Services\" page to enable it." msgstr "这项服务是可作为标准的服务。请使用\"标准服务\"页启用它。" #: plinth/modules/pagekite/forms.py:234 msgid "Added custom service" msgstr "已添加的自定义服务" #: plinth/modules/pagekite/forms.py:237 msgid "This service already exists" msgstr "此服务已存在" #: plinth/modules/pagekite/templates/pagekite_configure.html:33 msgid "PageKite Account" msgstr "PageKite 帐户" #: plinth/modules/pagekite/templates/pagekite_configure.html:41 msgid "Save settings" msgstr "保存设置" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 msgid "" "Warning:
Your PageKite frontend server may not support all the " "protocol/port combinations that you are able to define here. For example, " "HTTPS on ports other than 443 is known to cause problems." msgstr "" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 msgid "Create a custom service" msgstr "创建一个自定义的服务" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 msgid "Add Service" msgstr "添加服务" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 msgid "Existing custom services" msgstr "现有的自定义服务" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 msgid "You don't have any Custom Services enabled" msgstr "你没有启用任何自定义服务" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 #, python-format msgid "connected to %(backend_host)s:%(backend_port)s" msgstr "连接到 %(backend_host)s:%(backend_port)s" #: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 msgid "Delete this service" msgstr "删除此服务" #: plinth/modules/pagekite/templates/pagekite_introduction.html:26 #, python-format msgid "" "PageKite is a system for exposing %(box_name)s services when you don't have " "a direct connection to the Internet. You only need this if your %(box_name)s " "services are unreachable from the rest of the Internet. This includes the " "following situations:" msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:37 #, python-format msgid "%(box_name)s is behind a restricted firewall." msgstr "%(box_name)s 位于受限的防火墙的后面。" #: plinth/modules/pagekite/templates/pagekite_introduction.html:43 #, python-format msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "%(box_name)s 已连接到你不能控制的(无线)路由器。" #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" "Your ISP does not provide you an external IP address and instead provides " "Internet connection through NAT." msgstr "您的 ISP 没有提供外部的 IP 地址而是通过提供 NAT 连接互联网。" #: plinth/modules/pagekite/templates/pagekite_introduction.html:57 msgid "" "Your ISP does not provide you a static IP address and your IP address " "changes evertime you connect to Internet." msgstr "您的 ISP 不提供你一个静态的 IP 地址且你连接到互联网的 IP 地址每次会更改。" #: plinth/modules/pagekite/templates/pagekite_introduction.html:63 msgid "Your ISP limits incoming connections." msgstr "您的 ISP 限制传入的连接。" #: plinth/modules/pagekite/templates/pagekite_introduction.html:67 #, python-format msgid "" "PageKite works around NAT, firewalls and IP-address limitations by using a " "combination of tunnels and reverse proxies. You can use any pagekite service " "provider, for example pagekite.net. In " "future it might be possible to use your buddy's %(box_name)s for this." msgstr "" #: plinth/modules/pagekite/templates/pagekite_introduction.html:78 #: plinth/modules/pagekite/views.py:36 msgid "Configure PageKite" msgstr "配置 PageKite" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 msgid "Warning:
" msgstr "警告:
" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 msgid "" "Published services are accessible and attackable from the evil internet." msgstr "已发布的服务可从互联网访问并受到邪恶攻击。" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." msgstr "将 SSH 暴露出来使用默认密码 \"fbx\" 是非常不明智的。" #: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 msgid "Save Services" msgstr "保存服务" #: plinth/modules/pagekite/utils.py:53 msgid "Web Server (HTTP)" msgstr "Web 服务器(HTTP)" #: plinth/modules/pagekite/utils.py:54 #, python-brace-format msgid "Site will be available at http://{0}" msgstr "网站可从 http://{0} 访问" #: plinth/modules/pagekite/utils.py:63 msgid "Web Server (HTTPS)" msgstr "Web 服务器(HTTPS)" #: plinth/modules/pagekite/utils.py:64 #, python-brace-format msgid "Site will be available at https://{0}" msgstr "网站可从 https://{0} 访问" #: plinth/modules/pagekite/utils.py:73 msgid "Secure Shell (SSH)" msgstr "安全 Shell(SSH)" #: plinth/modules/pagekite/utils.py:74 msgid "" "See SSH client setup instructions" msgstr "" "请参见 SSH 客户端安装 " "说明" #: plinth/modules/pagekite/utils.py:276 msgid "Pagekite" msgstr "Pagekite" #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" msgstr "关于 PageKite" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" msgstr "标准服务" #: plinth/modules/pagekite/views.py:40 msgid "Custom Services" msgstr "定制服务" #: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 #: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 msgid "Power" msgstr "电源" #: plinth/modules/power/templates/power.html:29 msgid "Restart or shut down the system." msgstr "重新启动或关闭系统。" #: plinth/modules/power/templates/power.html:34 msgid "Restart »" msgstr "重新启动 »" #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" msgstr "关闭 »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" "Are you sure you want to restart? You will not be able to access this web " "interface for a few minutes until the system is restarted." msgstr "你确定要重新启动?你将在几分钟内不能访问此 web 界面,直到重新启动系统。" #: plinth/modules/power/templates/power_restart.html:42 msgid "Restart Now" msgstr "现在重新启动" #: plinth/modules/power/templates/power_shutdown.html:29 msgid "" "Are you sure you want to shut down? You will not be able to access this web " "interface after shut down." msgstr "你确定要关闭? 关闭以后将不能访问此 web 界面。" #: plinth/modules/power/templates/power_shutdown.html:41 msgid "Shut Down Now" msgstr "现在关闭" #: plinth/modules/privoxy/__init__.py:39 #: plinth/modules/privoxy/templates/privoxy.html:26 #: plinth/modules/privoxy/views.py:59 msgid "Web Proxy (Privoxy)" msgstr "网页代理(Privoxy)" #: plinth/modules/privoxy/__init__.py:44 msgid "Privoxy Web Proxy" msgstr "Privoxy 网页代理" #: plinth/modules/privoxy/__init__.py:86 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "在 tcp{kind} 上通过 {proxy} 访问 {url}" #: plinth/modules/privoxy/forms.py:29 msgid "Enable Privoxy" msgstr "启用 Privoxy" #: plinth/modules/privoxy/templates/privoxy.html:29 msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:38 #, python-format msgid "" "You can use Privoxy by modifying your browser proxy settings to your " "%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " "you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." msgstr "" #: plinth/modules/privoxy/templates/privoxy.html:53 msgid "Privoxy is running" msgstr "Privoxy 正在运行" #: plinth/modules/privoxy/templates/privoxy.html:56 msgid "Privoxy is not running" msgstr "Privoxy 未运行" #: plinth/modules/quassel/__init__.py:36 #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" msgstr "IRC 客户端(Quassel)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" msgstr "Quassel IRC 客户端" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" msgstr "启用 Quassel 核心服务" #: plinth/modules/quassel/templates/quassel.html:29 #, python-format msgid "" "Quassel is an IRC application that is split into two parts, a \"core\" and a " "\"client\". This allows the core to remain connected to IRC servers, and to " "continue receiving messages, even when the client is disconnected. " "%(box_name)s can run the Quassel core service keeping you always online and " "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" #: plinth/modules/quassel/templates/quassel.html:41 msgid "" "You can connect to your Quassel core on the default Quassel port 4242. " "Clients to connect to Quassel from your desktop and mobile devices are available." msgstr "" #: plinth/modules/quassel/templates/quassel.html:55 msgid "Quassel core service is running" msgstr "Quassel 核心服务正在运行" #: plinth/modules/quassel/templates/quassel.html:58 msgid "Quassel core service is not running" msgstr "Quassel 核心服务未运行" #: plinth/modules/repro/__init__.py:36 #: plinth/modules/repro/templates/repro.html:26 #: plinth/modules/repro/views.py:55 msgid "SIP Server (repro)" msgstr "SIP 服务器(摄制)" #: plinth/modules/repro/__init__.py:41 msgid "repro SIP Server" msgstr "repro SIP 服务器" #: plinth/modules/repro/forms.py:29 msgid "Enable repro service" msgstr "启用 repro 服务" #: plinth/modules/repro/templates/repro.html:29 msgid "" "repro provides various SIP services that a SIP softphone can utilize to " "provide audio and video calls as well as presence and instant messaging. " "repro provides a server and SIP user accounts that clients can use to let " "their presence known. It also acts as a proxy to federate SIP " "communications to other servers on the Internet similar to email." msgstr "" #: plinth/modules/repro/templates/repro.html:39 msgid "" "To make SIP calls, a client application is needed. Available clients include " "Jitsi (for computers) and CSipSimple (for Android phones)." msgstr "" #: plinth/modules/repro/templates/repro.html:48 msgid "" "Note: Before using repro, domains and users will need to " "be configured using the web-based " "configuration panel. Users in the admin group will be able to " "log in to the repro configuration panel. After setting the domain, it is " "required to restart the repro service. Disable the service and re-enable it." msgstr "" #: plinth/modules/repro/templates/repro.html:63 msgid "repro service is running" msgstr "repro 服务正在运行" #: plinth/modules/repro/templates/repro.html:66 msgid "repro service is not running" msgstr "repro 服务未运行" #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 msgid "Unhosted Storage (reStore)" msgstr "未托管存储(reStrore)" #: plinth/modules/restore/__init__.py:41 msgid "reStore" msgstr "reStore" #: plinth/modules/restore/forms.py:29 msgid "Enable reStore" msgstr "启用 reStore" #: plinth/modules/restore/templates/restore_index.html:29 #, python-format msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " "unhosted storage server of user's choice. With reStore, your %(box_name)s " "becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 msgid "" "You can create and edit accounts in the reStore web-" "interface." msgstr "您可以在 reStrore 的 web 界面 中创建和编辑帐户 。" #: plinth/modules/roundcube/__init__.py:36 #: plinth/modules/roundcube/templates/roundcube.html:26 #: plinth/modules/roundcube/views.py:64 msgid "Email Client (Roundcube)" msgstr "邮件客户端(Roundcube)" #: plinth/modules/roundcube/forms.py:29 msgid "Enable Roundcube" msgstr "启用 Roundcube" #: plinth/modules/roundcube/templates/roundcube.html:29 msgid "" "Roundcube webmail is a browser-based multilingual IMAP client with an " "application-like user interface. It provides full functionality you expect " "from an email client, including MIME support, address book, folder " "manipulation, message searching and spell checking." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:39 msgid "" "You can access Roundcube from /roundcube. Provide " "the username and password of the email account you wish to access followed " "by the domain name of the IMAP server for your email provider, like " "imap.example.com. For IMAP over SSL (recommended), fill the " "server field like imaps://imap.example.com." msgstr "" #: plinth/modules/roundcube/templates/roundcube.html:50 msgid "" "For Gmail, username will be your Gmail address, password will be your Google " "account password and server will be imaps://imap.gmail.com. " "Note that you will also need to enable \"Less secure apps\" in your Google " "account settings (https://www.google.com/settings/security/lesssecureapps)." msgstr "" #: plinth/modules/shaarli/__init__.py:37 #: plinth/modules/shaarli/templates/shaarli.html:26 #: plinth/modules/shaarli/views.py:52 msgid "Bookmarks (Shaarli)" msgstr "书签(Shaarli)" #: plinth/modules/shaarli/__init__.py:42 msgid "Shaarli" msgstr "Shaarli" #: plinth/modules/shaarli/forms.py:29 msgid "Enable Shaarli" msgstr "启用 Shaarli" #: plinth/modules/shaarli/templates/shaarli.html:28 msgid "Shaarli allows you to save and share bookmarks." msgstr "Shaarli 允许您保存和共享书签。" #: plinth/modules/shaarli/templates/shaarli.html:31 msgid "" "When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " "account, which you will need to setup on the initial visit." msgstr "" "当启用时,Shaarli 将可从 /shaarli 路径访问。请注意,Shaarli " "只支持单用户帐户,您在首次访问时安装程序。" #: plinth/modules/system/system.py:26 msgid "System" msgstr "系统" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 #: plinth/templates/base.html:109 msgid "System Configuration" msgstr "系统配置" #: plinth/modules/system/templates/system.html:28 #, python-format msgid "Here you can administrate the underlying system of your %(box_name)s." msgstr "在这里您可以管理 %(box_name)s 的底层系统。" #: plinth/modules/system/templates/system.html:35 #, python-format msgid "" "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "此选项会在通用层面影响 %(box_name)s 所以要小心!" #: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 msgid "Anonymity Network (Tor)" msgstr "匿名网络(Tor)" #: plinth/modules/tor/__init__.py:53 msgid "Tor Anonymity Network" msgstr "Tor 匿名网络" #: plinth/modules/tor/__init__.py:58 msgid "Tor Bridge Relay" msgstr "Tor 网桥中继" #: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 msgid "Tor Hidden Service" msgstr "隐藏的 Tor 服务" #: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor 中继端口可用" #: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "已注册 Obfs3 传输" #: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "已注册 Obfs4 传输" #: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "在 tcp{kind} 上通过 Tor 访问 {url}" #: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "确认使用 Tor 通过 tcp{kind} 访问 {url}" #: plinth/modules/tor/forms.py:32 msgid "Enable Tor" msgstr "启用 Tor" #: plinth/modules/tor/forms.py:35 msgid "Enable Tor Hidden Service" msgstr "启用隐藏的 Tor 服务" #: plinth/modules/tor/forms.py:38 #, python-brace-format msgid "" "A hidden service will allow {box_name} to provide selected services (such as " "ownCloud or chat) without revealing its location." msgstr "隐藏的服务将允许 {box_name} 提供某些服务(如 ownCloud 或聊天),而不暴露其位置。" #: plinth/modules/tor/forms.py:42 msgid "Download software packages over Tor" msgstr "通过 Tor 下载软件包" #: plinth/modules/tor/forms.py:44 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "当启用时,软件将会下载 Tor 网络的安装和升级。这在软件下载过程中添加了一定程度的隐私和安全。" #: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " "best protection when web surfing, the Tor Project recommends that you use " "the " "Tor Browser." msgstr "" #: plinth/modules/tor/templates/tor.html:54 msgid "Tor configuration is being updated" msgstr "Tor 配置已更新" #: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor 正在运行" #: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor 未运行" #: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "隐藏的服务" #: plinth/modules/tor/templates/tor.html:78 #: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "端口" #: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "网桥" #: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " "help circumvent censorship. If your %(box_name)s is behind a router or " "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" #: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "服务" #: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" #: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "Tor SOCKS 端口是你 %(box_name)s 上的 TCP 端口 9050 。" #: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor 控制面板" #: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "操作错误:{0} [{1}] [{2}]" #: plinth/modules/tor/views.py:148 msgid "Configuration updated." msgstr "配置已更新。" #: plinth/modules/tor/views.py:150 msgid "An error occurred during configuration." msgstr "在配置过程中出错。" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 #: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent(Transmission)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" msgstr "Transmission BitTorrent" #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" msgstr "启用 Transmission 守护进程" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" msgstr "下载目录" #: plinth/modules/transmission/forms.py:34 msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "保存下载的目录。 如果您更改默认目录,请确保新目录存在并且允许用户“debian-transmission”可写。" #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." msgstr "登录到 web 界面的用户名。" #: plinth/modules/transmission/forms.py:44 msgid "" "Password to login to the web interface. Current password is shown in a " "hashed format. To set a new password, enter the password in plain text." msgstr "登录到 web 界面的密码。当前密码以哈希格式所示。若要设置一个新密码,请以纯文本格式输入密码。" #: plinth/modules/transmission/templates/transmission.html:29 msgid "" "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" "BitTorrent 是对等文件共享协议。Transmission 守护进程处理 Bitorrent 文件共享。请注意,BitTorrent 不是匿名。" #: plinth/modules/transmission/templates/transmission.html:37 msgid "" "Access the web interface at /transmission." msgstr "通过 /transmission 访问其 web 界面。" #: plinth/modules/transmission/templates/transmission.html:47 msgid "Transmission daemon is running" msgstr "Transmission 守护程序正在运行" #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." msgstr "Transmission 守护程序未运行。" #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" msgstr "软件升级" #: plinth/modules/upgrades/forms.py:29 msgid "Enable automatic upgrades" msgstr "启用自动升级" #: plinth/modules/upgrades/forms.py:30 msgid "" "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "当启用时,将每天一次运行无人值守升级程序。它会尝试执行任何可用的软件包升级。" #: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" "Upgrades install the latest software and security updates. When automatic " "upgrades are enabled, upgrades are automatically run every night. You don't " "normally need to start the upgrade process." msgstr "升级安装最新的软件和安全更新。启用自动升级后,每个夜晚自动运行升级。你通常不需要经常关注升级过程。" #: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" "Depending on the number of packages to install, this may take a long time to " "complete. While upgrades are in progress, you will not be able to install " "other packages. During the upgrade, this web interface may be temporarily " "unavailable and show an error. Refresh the page to continue." msgstr "" "根据要安装的程序包数量,这可能需要很长的时间才能完成。升级进行时,你将无法安装其它软件包。升级期间,此 web " "界面可能暂时不可用并显示错误消息。刷新页面后,可以继续。" #: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "现在升级 »" #: plinth/modules/upgrades/templates/upgrades.html:65 msgid "A package manager is running." msgstr "软件包管理器正在运行。" #: plinth/modules/upgrades/templates/upgrades.html:70 msgid "Recent log from upgrades:" msgstr "最新更新日志:" #: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "自动升级" #: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "升级软件包" #: plinth/modules/upgrades/views.py:96 msgid "Upgrade process started." msgstr "升级过程开始。" #: plinth/modules/upgrades/views.py:99 msgid "Starting upgrade failed." msgstr "开始升级失败。" #: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "软件包升级" #: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "配置无人参与升级时错误:{error}" #: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "已启用自动升级" #: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "已禁用自动升级" #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "用户和组" #: plinth/modules/users/__init__.py:65 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "请检查 LDAP 条目“{search_item}”" #: plinth/modules/users/forms.py:28 msgid "admin" msgstr "管理员" #: plinth/modules/users/forms.py:29 msgid "wiki" msgstr "维基" #: plinth/modules/users/forms.py:41 msgid "Groups" msgstr "群組" #: plinth/modules/users/forms.py:45 msgid "" "Select which services should be available to the new user. The user will be " "able to log in to services that support single sign-on through LDAP, if they " "are in the appropriate group.

Users in the admin group will be " "able to log in to all services. They can also log in to the system through " "SSH and have administrative privileges (sudo)." msgstr "" #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." msgstr "未能将新用户添加到 {group}。" #: plinth/modules/users/forms.py:92 msgid "SSH Keys" msgstr "SSH 密钥" #: plinth/modules/users/forms.py:96 msgid "" "Setting an SSH public key will allow this user to securely log in to the " "system without using a password. You may enter multiple keys, one on each " "line. Blank lines and lines starting with # will be ignored." msgstr "设置 SSH 公钥将允许此用户安全地登录到系统不使用密码。您可以输入多个密钥,每行一个。将忽略空行和以 # 开头的行。" #: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "重命名 LDAP 用户失败。" #: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "无法从组中删除用户。" #: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "无法将用户添加到组。" #: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "更改 LDAP 用户密码失败。" #: plinth/modules/users/templates/users_change_password.html:27 #, python-format msgid "Change Password for %(username)s" msgstr "为%(username)s更改密码" #: plinth/modules/users/templates/users_change_password.html:40 msgid "Save Password" msgstr "保存密码" #: plinth/modules/users/templates/users_create.html:42 #: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 msgid "Create User" msgstr "创建用户" #: plinth/modules/users/templates/users_delete.html:26 #: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "删除用户" #: plinth/modules/users/templates/users_delete.html:29 #, python-format msgid "Delete user %(username)s permanently?" msgstr "永久删除用户 %(username)s?" #: plinth/modules/users/templates/users_delete.html:38 #, python-format msgid "Delete %(username)s" msgstr "删除 %(username)s" #: plinth/modules/users/templates/users_list.html:46 #, python-format msgid "Delete user %(username)s" msgstr "删除用户 %(username)s" #: plinth/modules/users/templates/users_list.html:53 #, python-format msgid "Edit user %(username)s" msgstr "编辑用户 %(username)s" #: plinth/modules/users/templates/users_update.html:39 #, python-format msgid "" "Use the change password form to " "change the password." msgstr "使用 更改密码窗口 更改密码。" #: plinth/modules/users/templates/users_update.html:53 msgid "Save Changes" msgstr "保存更改" #: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 msgid "Users" msgstr "用户" #: plinth/modules/users/views.py:54 #, python-format msgid "User %(username)s created." msgstr "用户 %(username)s 已创建。" #: plinth/modules/users/views.py:78 #, python-format msgid "User %(username)s updated." msgstr "用户 %(username)s 已更新。" #: plinth/modules/users/views.py:79 msgid "Edit User" msgstr "编辑用户" #: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "用户 {user} 已删除。" #: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "删除 LDAP 用户失败。" #: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "更改密码" #: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "已成功更改密码。" #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 msgid "Chat Server (XMPP)" msgstr "聊天服务器(XMPP)" #: plinth/modules/xmpp/forms.py:29 msgid "Enable XMPP" msgstr "启用 XMPP" #: plinth/modules/xmpp/templates/xmpp.html:29 msgid "" "XMPP is an open and standardized communication protocol. Here you can run " "and configure your XMPP server, called ejabberd." msgstr "XMPP 是一种开放标准的通信协议。在这里你可以运行并配置您的 XMPP 服务器,称为 ejabberd。" #: plinth/modules/xmpp/templates/xmpp.html:36 msgid "" "To actually communicate, you can use the web client or " "any other XMPP client." msgstr "" "要实际沟通,您可以使用 web 客户端 或任何其他 XMPP 客户端。" #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format msgid "" "Your XMPP server domain is set to %(domainname)s. User IDs will look " "like username@%(domainname)s. You can setup your domain on the system " "Configure page." msgstr "" #: plinth/modules/xmpp/templates/xmpp.html:55 msgid "Launch web client" msgstr "启动 web 客户端" #: plinth/modules/xmpp/templates/xmpp.html:63 msgid "ejabberd is running" msgstr "ejabberd 正在运行" #: plinth/modules/xmpp/templates/xmpp.html:66 msgid "ejabberd is not running" msgstr "ejabberd 未运行" #: plinth/network.py:39 msgid "PPPoE" msgstr "PPPoE" #: plinth/package.py:156 msgid "packages not found" msgstr "找不到软件包" #: plinth/package.py:263 msgid "Installed and configured packages successfully." msgstr "安装和配置软件包成功。" #: plinth/package.py:268 #, python-brace-format msgid "Error installing packages: {string} {details}" msgstr "安装软件包时出错:{string}{details}" #: plinth/service.py:73 msgid "Web Server" msgstr "Web 服务器" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" msgstr "Web 服务器安全套接字层" #: plinth/service.py:76 msgid "Secure Shell (SSH) Server" msgstr "安全 Shell(SSH)服务器" #: plinth/service.py:79 #, python-brace-format msgid "{box_name} Web Interface (Plinth)" msgstr "{box_name} Web 界面(Plinth)" #: plinth/templates/404.html:25 msgid "404" msgstr "404" #: plinth/templates/404.html:28 #, python-format msgid "Requested page %(request_path)s was not found." msgstr "找不到请求的页面 %(request_path)s。" #: plinth/templates/404.html:34 msgid "" "If you believe this missing page should exist, please file a bug at the " "Plinth project issue " "tracker." msgstr "" "如果你相信这个丢失的页面应该存在,请在 Plinth 项目 问题跟踪 报告 bug。" #: plinth/templates/500.html:25 msgid "500" msgstr "500" #: plinth/templates/500.html:28 msgid "" "This is an internal error and not something you caused or can fix. Please " "report the error on the bug tracker so we can fix it." msgstr "" "这是一个内部错误,不是你造成的或可以修复。 请报告到 bug 追踪器 上这样我们就可以修复该错误。" #: plinth/templates/base.html:49 #, python-format msgid "Plinth administrative interface for the %(box_name)s" msgstr "Plinth %(box_name)s 管理界面" #: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "切换导航" #: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "更改密码" #: plinth/templates/base.html:129 plinth/templates/base.html.py:130 #: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "登出" #: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "登录" #: plinth/templates/login.html:35 msgid "Login" msgstr "登录" #: plinth/templates/package_install.html:35 msgid "Installation" msgstr "安装" #: plinth/templates/package_install.html:40 msgid "" "This feature requires addtional packages to be installed. Do you wish to " "install them?" msgstr "此功能需要安装额外的软件包。你想安装它们吗?" #: plinth/templates/package_install.html:49 msgid "Package" msgstr "软件包" #: plinth/templates/package_install.html:50 msgid "Summary" msgstr "摘要" #: plinth/templates/package_install.html:67 msgid "Install" msgstr "安装" #: plinth/templates/package_install.html:74 #, python-format msgid "Installing %(package_names)s: %(status)s" msgstr "正在安装 %(package_names)s:%(status)s" #: plinth/templates/package_install.html:84 #, python-format msgid "%(percentage)s%% complete" msgstr "已完成 %(percentage)s%%" Plinth-0.8.1/plinth/menu.py000066400000000000000000000063031266051671100156010ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django.core.urlresolvers import reverse class Menu(object): """One menu item.""" def __init__(self, label="", icon="", url="#", order=50): """label is the text that is displayed on the menu. icon is the icon to be displayed next to the label. Choose from the Glyphicon set: http://twitter.github.com/bootstrap/base-css.html#icons url is the url location that will be activated when the menu item is selected. order is the numerical rank of this item within the menu. Lower order items appear closest to the top/left of the menu. By convention, we use the spectrum between 0 and 100 to rank orders, but feel free to disregard that. If you need more granularity, don't bother renumbering things. Feel free to use fractional orders. """ self.label = label self.icon = icon self.url = url self.order = order # TODO: With an ordered dictionary for self.items we could access the # items by their URL directly instead of searching for them each time, # which we do currently with the 'get' method self.items = [] def get(self, urlname, url_args=None, url_kwargs=None): """Return a menu item with given URL name.""" url = reverse(urlname, args=url_args, kwargs=url_kwargs) for item in self.items: if item.url == url: return item raise KeyError('Menu item not found') def sort_items(self): """Sort the items in self.items by order.""" self.items = sorted(self.items, key=lambda x: x.order, reverse=False) def add_urlname(self, label, icon, urlname, order=50, url_args=None, url_kwargs=None): """Add a named URL to the menu (via add_item). url_args and url_kwargs will be passed on to Django reverse(). """ url = reverse(urlname, args=url_args, kwargs=url_kwargs) return self.add_item(label, icon, url, order) def add_item(self, label, icon, url, order=50): """Create a new menu item with given parameters, add it to this menu and return it. """ item = Menu(label=label, icon=icon, url=url, order=order) self.items.append(item) self.sort_items() return item def active_item(self, request): """Return the first active item (e.g. submenu) that is found.""" for item in self.items: if request.path.startswith(item.url): return item Plinth-0.8.1/plinth/migrations/000077500000000000000000000000001266051671100164355ustar00rootroot00000000000000Plinth-0.8.1/plinth/migrations/0001_initial.py000066400000000000000000000024301266051671100210770ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # # # Generated by Django 1.9 on 2015-12-04 07:27 # """ Initial Django migration for Plinth to create database tables. """ from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): """Initial migration schema for Plinth models.""" initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='KVStore', fields=[ ('key', models.TextField(primary_key=True, serialize=False)), ('value_json', models.TextField()), ], ), ] Plinth-0.8.1/plinth/migrations/__init__.py000066400000000000000000000000001266051671100205340ustar00rootroot00000000000000Plinth-0.8.1/plinth/models.py000066400000000000000000000023501266051671100161160ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Django models for the main application """ from django.db import models import json class KVStore(models.Model): """Model to store retrieve key/value configuration""" key = models.TextField(primary_key=True) value_json = models.TextField() @property def value(self): """Return the JSON decoded value of the key/value pair""" return json.loads(self.value_json) @value.setter def value(self, val): """Store the value of the key/value pair by JSON encoding it""" self.value_json = json.dumps(val) Plinth-0.8.1/plinth/module_loader.py000066400000000000000000000114161266051671100174510ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Discover, load and manage Plinth modules """ import django import importlib import logging import os import re from plinth import cfg from plinth import urls from plinth.signals import pre_module_loading, post_module_loading LOGGER = logging.getLogger(__name__) loaded_modules = [] _modules_to_load = None def load_modules(): """ Read names of enabled modules in modules/enabled directory and import them from modules directory. """ pre_module_loading.send_robust(sender="module_loader") modules = {} for module_name in get_modules_to_load(): LOGGER.info('Importing %s', module_name) try: modules[module_name] = importlib.import_module(module_name) except Exception as exception: LOGGER.exception('Could not import %s: %s', module_name, exception) if cfg.debug: raise _include_module_urls(module_name) ordered_modules = [] remaining_modules = dict(modules) # Make a copy for module_name in modules: if module_name not in remaining_modules: continue module = remaining_modules.pop(module_name) try: _insert_modules(module_name, module, remaining_modules, ordered_modules) except KeyError: LOGGER.error('Unsatified dependency for module - %s', module_name) LOGGER.debug('Module load order - %s', ordered_modules) for module_name in ordered_modules: _initialize_module(modules[module_name]) loaded_modules.append(module_name) post_module_loading.send_robust(sender="module_loader") def _insert_modules(module_name, module, remaining_modules, ordered_modules): """Insert modules into a list based on dependency order""" if module_name in ordered_modules: return dependencies = [] try: dependencies = module.depends except AttributeError: pass for dependency in dependencies: if dependency in ordered_modules: continue try: module = remaining_modules.pop(dependency) except KeyError: LOGGER.error('Not found or circular dependency - %s, %s', module_name, dependency) raise _insert_modules(dependency, module, remaining_modules, ordered_modules) ordered_modules.append(module_name) def _include_module_urls(module_name): """Include the module's URLs in global project URLs list""" namespace = module_name.split('.')[-1] url_module = module_name + '.urls' try: urls.urlpatterns += [ django.conf.urls.url( r'', django.conf.urls.include(url_module, namespace))] except ImportError: LOGGER.debug('No URLs for %s', module_name) if cfg.debug: raise def _initialize_module(module): """Call initialization method in the module if it exists""" try: init = module.init except AttributeError: LOGGER.debug('No init() for module - %s', module.__name__) return try: init() except Exception as exception: LOGGER.exception('Exception while running init for %s: %s', module, exception) if cfg.debug: raise def get_modules_to_load(): """Get the list of modules to be loaded""" global _modules_to_load if _modules_to_load is not None: return _modules_to_load modules = [] module_directory = os.path.join(cfg.config_dir, 'modules-enabled') # Omit hidden files file_names = [file_name for file_name in os.listdir(module_directory) if not file_name.startswith('.') and '.dpkg' not in file_name] for file_name in file_names: full_file_name = os.path.join(module_directory, file_name) with open(full_file_name, 'r') as file_handle: for line in file_handle: line = re.sub('#.*', '', line) line = line.strip() if line: modules.append(line) _modules_to_load = modules return modules Plinth-0.8.1/plinth/modules/000077500000000000000000000000001266051671100157315ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/__init__.py000066400000000000000000000000001266051671100200300ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/apps/000077500000000000000000000000001266051671100166745ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/apps/__init__.py000066400000000000000000000014501266051671100210050ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for Apps section page """ from . import apps from .apps import init __all__ = ['apps', 'init'] Plinth-0.8.1/plinth/modules/apps/apps.py000066400000000000000000000021531266051671100202120ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django.template.response import TemplateResponse from django.utils.translation import ugettext_lazy as _ from plinth import cfg def init(): """Initailize the apps module""" cfg.main_menu.add_urlname(_('Apps'), 'glyphicon-download-alt', 'apps:index', 80) def index(request): """Serve the apps index page""" return TemplateResponse(request, 'apps.html', {'title': _('Applications')}) Plinth-0.8.1/plinth/modules/apps/templates/000077500000000000000000000000001266051671100206725ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/apps/templates/apps.html000066400000000000000000000027011266051671100225230ustar00rootroot00000000000000{% extends 'base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

{% trans "Services and Applications" %}

{% blocktrans trimmed %} You can install and run various services and applications on your {{ box_name }}. Click on any app page link on the left to read a description of the application and choose to install it. {% endblocktrans %}

{% blocktrans trimmed %} This box can be your photo sharing site, your instant messaging site, your social networking site, your news site. Remember web portals? We can be one of those too. Many of the services you use on the web could soon be on site and under your control! {% endblocktrans %}

{% endblock %} Plinth-0.8.1/plinth/modules/apps/tests/000077500000000000000000000000001266051671100200365ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/apps/tests/__init__.py000066400000000000000000000000001266051671100221350ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/apps/urls.py000066400000000000000000000015311266051671100202330ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Apps module """ from django.conf.urls import url from . import apps as views urlpatterns = [ url(r'^apps/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/avahi/000077500000000000000000000000001266051671100170215ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/avahi/__init__.py000066400000000000000000000032061266051671100211330ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for service discovery. """ from django.utils.translation import ugettext_lazy as _ import subprocess from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module # pylint: disable=C0103 depends = ['plinth.modules.system'] service = None def init(): """Intialize the service discovery module.""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Service Discovery'), 'glyphicon-lamp', 'avahi:index', 950) global service # pylint: disable=W0603 service = service_module.Service( 'avahi', _('Service Discovery'), ['mdns'], is_external=False, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return action_utils.service_is_enabled('avahi-daemon') def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('avahi-daemon') Plinth-0.8.1/plinth/modules/avahi/forms.py000066400000000000000000000017531266051671100205270ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for service discovery forms. """ from django import forms from django.utils.translation import ugettext_lazy as _ class ServiceDiscoveryForm(forms.Form): """Service discovery form.""" enabled = forms.BooleanField( label=_('Enable service discovery'), required=False) Plinth-0.8.1/plinth/modules/avahi/templates/000077500000000000000000000000001266051671100210175ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/avahi/templates/avahi.html000066400000000000000000000036351266051671100230040ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

{% trans "Service Discovery" %}

{% blocktrans trimmed %} Service discovery allows other devices on the network to discover your {{ box_name }} and services running on it. It also allows {{ box_name }} to discover other devices and services running on your local network. Service discovery is not essential and works only on internal networks. It may be disabled to improve security especially when connecting to a hostile local network. {% endblocktrans %}

{% trans "Status" %}

{% if status.is_running %} {% trans "Service discovery server is running" %} {% else %} {% trans "Service discovery server is not running" %} {% endif %}

{% trans "Configuration" %}

{% csrf_token %} {{ form|bootstrap }}
{% endblock %} Plinth-0.8.1/plinth/modules/avahi/tests/000077500000000000000000000000001266051671100201635ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/avahi/tests/__init__.py000066400000000000000000000000001266051671100222620ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/avahi/urls.py000066400000000000000000000015441266051671100203640ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the service discovery module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^sys/avahi/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/avahi/views.py000066400000000000000000000046621266051671100205400ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for service discovery views. """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ import logging from .forms import ServiceDiscoveryForm from plinth import actions from plinth import package from plinth.modules import avahi logger = logging.getLogger(__name__) # pylint: disable=C0103 @package.required(['avahi-daemon']) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = ServiceDiscoveryForm(request.POST, prefix='avahi') if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = ServiceDiscoveryForm(initial=status, prefix='avahi') else: form = ServiceDiscoveryForm(initial=status, prefix='avahi') return TemplateResponse(request, 'avahi.html', {'title': _('Service Discovery'), 'status': status, 'form': form}) def get_status(): """Get the current settings from server.""" return {'enabled': avahi.is_enabled(), 'is_running': avahi.is_running()} def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' modified = True actions.superuser_run('avahi', [sub_command]) avahi.service.notify_enabled(None, new_status['enabled']) messages.success(request, _('Configuration updated')) if not modified: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/config/000077500000000000000000000000001266051671100171765ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/config/__init__.py000066400000000000000000000016451266051671100213150ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for basic system configuration """ from . import config from .config import init __all__ = ['config', 'init'] depends = ['plinth.modules.system', 'plinth.modules.firewall', 'plinth.modules.names'] Plinth-0.8.1/plinth/modules/config/config.py000066400000000000000000000233431266051671100210220ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring hostname and domainname. """ from django import forms from django.contrib import messages from django.core import validators from django.core.exceptions import ValidationError from django.conf import settings from django.template.response import TemplateResponse from django.utils import translation from django.utils.translation import ugettext as _, ugettext_lazy import logging import re import socket from plinth import actions from plinth import cfg from plinth.modules.firewall import firewall from plinth.modules.names import SERVICES from plinth.signals import pre_hostname_change, post_hostname_change from plinth.signals import domainname_change from plinth.signals import domain_added, domain_removed from plinth.utils import format_lazy HOSTNAME_REGEX = r'^[a-zA-Z0-9]([-a-zA-Z0-9]{,61}[a-zA-Z0-9])?$' LOGGER = logging.getLogger(__name__) def get_hostname(): """Return the hostname""" return socket.gethostname() def get_domainname(): """Return the domainname""" fqdn = socket.getfqdn() return '.'.join(fqdn.split('.')[1:]) def get_language(request): """Return the current language setting""" # TODO: Store the language per user in kvstore, # taking care of setting language on login, and adapting kvstore when # renaming/deleting users # The information from the session is more accurate but not always present return request.session.get(translation.LANGUAGE_SESSION_KEY, request.LANGUAGE_CODE) class TrimmedCharField(forms.CharField): """Trim the contents of a CharField""" def clean(self, value): """Clean and validate the field value""" if value: value = value.strip() return super(TrimmedCharField, self).clean(value) def domain_label_validator(domainname): """Validate domain name labels.""" for label in domainname.split('.'): if not re.match(HOSTNAME_REGEX, label): raise ValidationError(_('Invalid domain name')) class ConfigurationForm(forms.Form): """Main system configuration form""" # See: # https://tools.ietf.org/html/rfc952 # https://tools.ietf.org/html/rfc1035#section-2.3.1 # https://tools.ietf.org/html/rfc1123#section-2 # https://tools.ietf.org/html/rfc2181#section-11 hostname = TrimmedCharField( label=ugettext_lazy('Hostname'), help_text=format_lazy(ugettext_lazy( 'Hostname is the local name by which other devices on the local ' 'network can reach your {box_name}. It must start and end with ' 'an alphabet or a digit and have as interior characters only ' 'alphabets, digits and hyphens. Total length must be 63 ' 'characters or less.'), box_name=ugettext_lazy(cfg.box_name)), validators=[ validators.RegexValidator( HOSTNAME_REGEX, ugettext_lazy('Invalid hostname'))]) domainname = TrimmedCharField( label=ugettext_lazy('Domain Name'), help_text=format_lazy(ugettext_lazy( 'Domain name is the global name by which other devices on the ' 'Internet can reach your {box_name}. It must consist of labels ' 'separated by dots. Each label must start and end with an ' 'alphabet or a digit and have as interior characters only ' 'alphabets, digits and hyphens. Length of each label must be 63 ' 'characters or less. Total length of domain name must be 253 ' 'characters or less.'), box_name=ugettext_lazy(cfg.box_name)), required=False, validators=[ validators.RegexValidator( r'^[a-zA-Z0-9]([-a-zA-Z0-9.]{,251}[a-zA-Z0-9])?$', ugettext_lazy('Invalid domain name')), domain_label_validator]) language = forms.ChoiceField( label=ugettext_lazy('Language'), help_text=\ ugettext_lazy('Language for this web administration interface'), required=False, choices=settings.LANGUAGES) def init(): """Initialize the module""" menu = cfg.main_menu.get('system:index') menu.add_urlname(ugettext_lazy('Configure'), 'glyphicon-cog', 'config:index', 10) # Register domain with Name Services module. domainname = get_domainname() if domainname: try: domainname_services = firewall.get_enabled_services( zone='external') except actions.ActionError: # This happens when firewalld is not installed. # TODO: Are these services actually enabled? domainname_services = [service[0] for service in SERVICES] else: domainname_services = None domain_added.send_robust(sender='config', domain_type='domainname', name=domainname, description=ugettext_lazy('Domain Name'), services=domainname_services) def index(request): """Serve the configuration form""" status = get_status(request) form = None if request.method == 'POST': form = ConfigurationForm(request.POST, initial=status, prefix='configuration') # pylint: disable-msg=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status(request) form = ConfigurationForm(initial=status, prefix='configuration') else: form = ConfigurationForm(initial=status, prefix='configuration') return TemplateResponse(request, 'config.html', {'title': _('General Configuration'), 'form': form}) def get_status(request): """Return the current status""" return {'hostname': get_hostname(), 'domainname': get_domainname(), 'language': get_language(request)} def _apply_changes(request, old_status, new_status): """Apply the form changes""" if old_status['hostname'] != new_status['hostname']: try: set_hostname(new_status['hostname']) except Exception as exception: messages.error(request, _('Error setting hostname: {exception}') .format(exception=exception)) else: messages.success(request, _('Hostname set')) if old_status['domainname'] != new_status['domainname']: try: set_domainname(new_status['domainname']) except Exception as exception: messages.error(request, _('Error setting domain name: {exception}') .format(exception=exception)) else: messages.success(request, _('Domain name set')) if old_status['language'] != new_status['language']: language = new_status['language'] try: translation.activate(language) request.session[translation.LANGUAGE_SESSION_KEY] = language except Exception as exception: messages.error(request, _('Error setting language: {exception}') .format(exception=exception)) else: messages.success(request, _('Language changed')) def set_hostname(hostname): """Sets machine hostname to hostname""" old_hostname = get_hostname() # Hostname should be ASCII. If it's unicode but passed our # valid_hostname check, convert to ASCII. hostname = str(hostname) pre_hostname_change.send_robust(sender='config', old_hostname=old_hostname, new_hostname=hostname) LOGGER.info('Changing hostname to - %s', hostname) actions.superuser_run('hostname-change', [hostname]) post_hostname_change.send_robust(sender='config', old_hostname=old_hostname, new_hostname=hostname) def set_domainname(domainname): """Sets machine domain name to domainname""" old_domainname = get_domainname() # Domain name should be ASCII. If it's unicode, convert to ASCII. domainname = str(domainname) LOGGER.info('Changing domain name to - %s', domainname) actions.superuser_run('domainname-change', [domainname]) domainname_change.send_robust(sender='config', old_domainname=old_domainname, new_domainname=domainname) # Update domain registered with Name Services module. domain_removed.send_robust(sender='config', domain_type='domainname') if domainname: try: domainname_services = firewall.get_enabled_services( zone='external') except actions.ActionError: # This happens when firewalld is not installed. # TODO: Are these services actually enabled? domainname_services = [service[0] for service in SERVICES] domain_added.send_robust(sender='config', domain_type='domainname', name=domainname, description=_('Domain Name'), services=domainname_services) Plinth-0.8.1/plinth/modules/config/templates/000077500000000000000000000000001266051671100211745ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/config/templates/config.html000066400000000000000000000017621266051671100233350ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
{% csrf_token %} {{ form|bootstrap }}
{% endblock %} Plinth-0.8.1/plinth/modules/config/tests/000077500000000000000000000000001266051671100203405ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/config/tests/__init__.py000066400000000000000000000000001266051671100224370ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/config/tests/test_config.py000066400000000000000000000061751266051671100232270ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Tests for config module. """ import os import unittest from plinth import __main__ as plinth_main from ..config import ConfigurationForm class TestConfig(unittest.TestCase): """Test cases for testing the config module.""" def test_hostname_field(self): """Test that hostname field accepts only valid hostnames.""" valid_hostnames = [ 'a', '0a', 'a0', 'AAA', '00', '0-0', 'example-hostname', 'example', '012345678901234567890123456789012345678901234567890123456789012'] invalid_hostnames = [ '', '-', '-a', 'a-', '.a', 'a.', 'a.a', '?', 'a?a', '0123456789012345678901234567890123456789012345678901234567890123'] for hostname in valid_hostnames: form = ConfigurationForm({'hostname': hostname, 'domainname': 'example.com'}) self.assertTrue(form.is_valid()) for hostname in invalid_hostnames: form = ConfigurationForm({'hostname': hostname, 'domainname': 'example.com'}) self.assertFalse(form.is_valid()) def test_domainname_field(self): """Test that domainname field accepts only valid domainnames.""" valid_domainnames = [ '', 'a', '0a', 'a0', 'AAA', '00', '0-0', 'example-hostname', 'example', 'example.org', 'a.b.c.d', 'a-0.b-0.c-0', '012345678901234567890123456789012345678901234567890123456789012', ((('x' * 63) + '.') * 3) + 'x' * 61] invalid_domainnames = [ '-', '-a', 'a-', '.a', 'a.', '?', 'a?a', 'a..a', 'a.-a', '.', ((('x' * 63) + '.') * 3) + 'x' * 62, 'x' * 64] for domainname in valid_domainnames: form = ConfigurationForm({'hostname': 'example', 'domainname': domainname}) self.assertTrue(form.is_valid()) for domainname in invalid_domainnames: form = ConfigurationForm({'hostname': 'example', 'domainname': domainname}) self.assertFalse(form.is_valid()) def test_locale_path(self): """ Test that the 'locale' directory is in the same folder as __main__.py. This is required for detecting translated languages. """ plinth_dir = os.path.dirname(plinth_main.__file__) locale_dir = os.path.join(plinth_dir, 'locale') self.assertTrue(os.path.isdir(locale_dir)) Plinth-0.8.1/plinth/modules/config/urls.py000066400000000000000000000015641266051671100205430ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Configuration module """ from django.conf.urls import patterns, url from . import config as views urlpatterns = [ url(r'^sys/config/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/datetime/000077500000000000000000000000001266051671100175255ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/datetime/__init__.py000066400000000000000000000041211266051671100216340ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure system date and time """ from django.utils.translation import ugettext_lazy as _ import subprocess from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.system'] service = None def init(): """Intialize the date/time module.""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Date & Time'), 'glyphicon-time', 'datetime:index', 900) global service service = service_module.Service( 'ntp', _('Network Time Server'), is_external=False, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return action_utils.service_is_enabled('ntp') def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('ntp') def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(_diagnose_ntp_server_count()) return results def _diagnose_ntp_server_count(): """Diagnose minimum NTP server count.""" result = 'failed' try: output = subprocess.check_output(['ntpq', '-n', '-c', 'lpeers']) if len(output.decode().splitlines()[2:]): result = 'passed' except subprocess.CalledProcessError: pass return [_('NTP client in contact with servers'), result] Plinth-0.8.1/plinth/modules/datetime/forms.py000066400000000000000000000045421266051671100212320ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring date and time """ from django import forms from django.utils.translation import ugettext_lazy as _ import glob import re class DateTimeForm(forms.Form): """Date/time configuration form.""" enabled = forms.BooleanField( label=_('Enable network time'), required=False) time_zone = forms.ChoiceField( label=_('Time Zone'), help_text=_('Set your time zone to get accurate timestamps. \ This will set the systemwide time zone.')) def __init__(self, *args, **kwargs): """Initialize the date/time form.""" forms.Form.__init__(self, *args, **kwargs) time_zone_options = [(zone, zone) for zone in self.get_time_zones()] # Show not-set option only when time zone is not set if self.initial.get('time_zone') == 'none': time_zone_options.insert(0, ('none', _('-- no time zone set --'))) self.fields['time_zone'].choices = time_zone_options @staticmethod def get_time_zones(): """Return list of available time zones""" time_zones = [] for line in open('/usr/share/zoneinfo/zone.tab'): if re.match(r'^(#|\s*$)', line): continue try: time_zones.append(line.split()[2]) except IndexError: pass time_zones.sort() additional_time_zones = [ path[len('/usr/share/zoneinfo/'):] for path in glob.glob('/usr/share/zoneinfo/Etc/*')] # Add additional time zones at the top to make them more # noticeable because people won't look for them return additional_time_zones + time_zones Plinth-0.8.1/plinth/modules/datetime/templates/000077500000000000000000000000001266051671100215235ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/datetime/templates/datetime.html000066400000000000000000000032421266051671100242060ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

{% trans "Date & Time" %}

{% blocktrans trimmed %} Network time server is a program that maintians the system time in synchronization with servers on the Internet. {% endblocktrans %}

{% trans "Status" %}

{% if status.is_running %} {% trans "Network time server is running" %} {% else %} {% trans "Network time server is not running" %} {% endif %}

{% include "diagnostics_button.html" with module="datetime" %}

{% trans "Configuration" %}

{% csrf_token %} {{ form|bootstrap }}
{% endblock %} Plinth-0.8.1/plinth/modules/datetime/tests/000077500000000000000000000000001266051671100206675ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/datetime/tests/__init__.py000066400000000000000000000000001266051671100227660ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/datetime/urls.py000066400000000000000000000015411266051671100210650ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the date and time module """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^sys/datetime/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/datetime/views.py000066400000000000000000000063171266051671100212430ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring date and time """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ import logging from .forms import DateTimeForm from plinth import actions from plinth import package from plinth.modules import datetime logger = logging.getLogger(__name__) def on_install(): """Notify that the service is now enabled.""" datetime.service.notify_enabled(None, True) @package.required(['ntp'], on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = DateTimeForm(request.POST, prefix='datetime') # pylint: disable=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = DateTimeForm(initial=status, prefix='datetime') else: form = DateTimeForm(initial=status, prefix='datetime') return TemplateResponse(request, 'datetime.html', {'title': _('Date & Time'), 'status': status, 'form': form}) def get_status(): """Get the current settings from server.""" return {'enabled': datetime.is_enabled(), 'is_running': datetime.is_running(), 'time_zone': get_current_time_zone()} def get_current_time_zone(): """Get current time zone.""" time_zone = open('/etc/timezone').read().rstrip() return time_zone or 'none' def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' modified = True actions.superuser_run('datetime', [sub_command]) datetime.service.notify_enabled(None, new_status['enabled']) messages.success(request, _('Configuration updated')) if old_status['time_zone'] != new_status['time_zone'] and \ new_status['time_zone'] != 'none': modified = True try: actions.superuser_run('timezone-change', [new_status['time_zone']]) except Exception as exception: messages.error(request, _('Error setting time zone: {exception}') .format(exception=exception)) else: messages.success(request, _('Time zone set')) if not modified: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/deluge/000077500000000000000000000000001266051671100171765ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/deluge/__init__.py000066400000000000000000000040101266051671100213020ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure a Deluge web client. """ from django.utils.translation import ugettext_lazy as _ from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] service = None def init(): """Initialize the Deluge module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('BitTorrent (Deluge)'), 'glyphicon-magnet', 'deluge:index', 200) global service service = service_module.Service( 'deluge', _('Deluge BitTorrent'), ['http', 'https'], is_external=True, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return (action_utils.webserver_is_enabled('deluge-plinth') and action_utils.service_is_enabled('deluge-web')) def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('deluge-web') def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(8112, 'tcp4')) results.append(action_utils.diagnose_port_listening(8112, 'tcp6')) results.extend(action_utils.diagnose_url_on_all( 'https://{host}/deluge', extra_options=['--no-check-certificate'])) return results Plinth-0.8.1/plinth/modules/deluge/forms.py000066400000000000000000000017271266051671100207050ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring Deluge web client. """ from django import forms from django.utils.translation import ugettext_lazy as _ class DelugeForm(forms.Form): """Deluge configuration form.""" enabled = forms.BooleanField( label=_('Enable Deluge'), required=False) Plinth-0.8.1/plinth/modules/deluge/templates/000077500000000000000000000000001266051671100211745ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/deluge/templates/deluge.html000066400000000000000000000035531266051671100233350ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

{% trans "BitTorrent Web Client (Deluge)" %}

{% trans "Deluge is a BitTorrent client that features a Web UI." %}

{% blocktrans trimmed %} When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but you should log in and change it immediately after enabling this service. {% endblocktrans %}

{% trans "Status" %}

{% if status.is_running %} {% trans "deluge-web is running" %} {% else %} {% trans "deluge-web is not running" %} {% endif %}

{% include "diagnostics_button.html" with module="deluge" %}

{% trans "Configuration" %}

{% csrf_token %} {{ form|bootstrap }}
{% endblock %} Plinth-0.8.1/plinth/modules/deluge/tests/000077500000000000000000000000001266051671100203405ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/deluge/tests/__init__.py000066400000000000000000000000001266051671100224370ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/deluge/urls.py000066400000000000000000000015331266051671100205370ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Deluge module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/deluge/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/deluge/views.py000066400000000000000000000050741266051671100207130ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure a Deluge web client. """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from .forms import DelugeForm from plinth import actions from plinth import package from plinth.modules import deluge def on_install(): """Tasks to run after package install.""" actions.superuser_run('deluge', ['enable']) deluge.service.notify_enabled(None, True) @package.required(['deluged', 'deluge-web'], on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = DelugeForm(request.POST, prefix='deluge') # pylint: disable=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = DelugeForm(initial=status, prefix='deluge') else: form = DelugeForm(initial=status, prefix='deluge') return TemplateResponse(request, 'deluge.html', {'title': _('BitTorrent (Deluge)'), 'status': status, 'form': form}) def get_status(): """Get the current settings.""" status = {'enabled': deluge.is_enabled(), 'is_running': deluge.is_running()} return status def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('deluge', [sub_command]) deluge.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/diagnostics/000077500000000000000000000000001266051671100202405ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/diagnostics/__init__.py000066400000000000000000000023731266051671100223560ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for system diagnostics """ from . import diagnostics from .diagnostics import init from plinth import action_utils __all__ = ['diagnostics', 'init'] depends = ['plinth.modules.system'] def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(8000, 'tcp4')) results.append(action_utils.diagnose_port_listening(8000, 'tcp6')) results.extend(action_utils.diagnose_url_on_all( 'http://{host}/plinth/', extra_options=['--no-check-certificate'])) return results Plinth-0.8.1/plinth/modules/diagnostics/diagnostics.py000066400000000000000000000077061266051671100231330ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for running diagnostics """ import collections from django.http import Http404 from django.template.response import TemplateResponse from django.views.decorators.http import require_POST from django.utils.translation import ugettext_lazy as _ import importlib import logging import threading from plinth import cfg from plinth import module_loader logger = logging.Logger(__name__) current_results = {} _running_task = None def init(): """Initialize the module""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Diagnostics'), 'glyphicon-screenshot', 'diagnostics:index', 30) def index(request): """Serve the index page""" if request.method == 'POST' and not _running_task: _start_task() return TemplateResponse(request, 'diagnostics.html', {'title': _('System Diagnostics'), 'is_running': _running_task is not None, 'results': current_results}) @require_POST def module(request, module_name): """Return diagnostics for a particular module.""" found = False for module_import_path in module_loader.loaded_modules: if module_name == module_import_path.split('.')[-1]: found = True break if not found: raise Http404('Module does not exist or not loaded') loaded_module = importlib.import_module(module_import_path) results = [] if hasattr(loaded_module, 'diagnose'): results = loaded_module.diagnose() return TemplateResponse(request, 'diagnostics_module.html', {'title': _('Diagnostic Test'), 'module_name': module_name, 'results': results}) def _start_task(): """Start the run task in a separate thread.""" if _running_task: raise Exception('Task already running') global _running_task _running_task = threading.Thread(target=_run_on_all_modules_wrapper) _running_task.start() def _run_on_all_modules_wrapper(): """Wrapper over actual task to catch exceptions.""" try: run_on_all_modules() except Exception as exception: logger.exception('Error running diagnostics - %s', exception) current_results['error'] = str(exception) global _running_task _running_task = None def run_on_all_modules(): """Run diagnostics on all modules and store the result.""" global current_results current_results = {'modules': [], 'results': collections.OrderedDict(), 'progress_percentage': 0} modules = [] for module_import_path in module_loader.loaded_modules: loaded_module = importlib.import_module(module_import_path) if not hasattr(loaded_module, 'diagnose'): continue module_name = module_import_path.split('.')[-1] modules.append((module_name, loaded_module)) current_results['results'][module_name] = None current_results['modules'] = modules for current_index, (module_name, loaded_module) in enumerate(modules): current_results['results'][module_name] = loaded_module.diagnose() current_results['progress_percentage'] = \ int((current_index + 1) * 100 / len(modules)) Plinth-0.8.1/plinth/modules/diagnostics/templates/000077500000000000000000000000001266051671100222365ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/diagnostics/templates/diagnostics.html000066400000000000000000000047601266051671100254420ustar00rootroot00000000000000{% extends 'base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block page_head %} {% if is_running %} {% endif %} {% endblock %} {% block content %}

{{ title }}

{% blocktrans trimmed %} The system diagnostic test will run a number of checks on your system to confirm that applications and services are working as expected. {% endblocktrans %}

{% if not is_running %}
{% csrf_token %}
{% else %}

{% trans "Diagnotics test is currently running" %}

{{ results.progress_percentage }}%
{% endif %} {% if results %}

{% trans "Results" %}

{% if results.error %}
× {{ results.error }}
{% else %} {% for module, module_results in results.results.items %}

{% blocktrans %}Module: {{ module }}{% endblocktrans %}

{% if module_results %} {% include "diagnostics_results.html" with results=module_results %} {% else %}

{% endif %} {% endfor %} {% endif %} {% endif %} {% endblock %} Plinth-0.8.1/plinth/modules/diagnostics/templates/diagnostics_button.html000066400000000000000000000017201266051671100270260ustar00rootroot00000000000000{% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %}
{% csrf_token %}
Plinth-0.8.1/plinth/modules/diagnostics/templates/diagnostics_module.html000066400000000000000000000021141266051671100267760ustar00rootroot00000000000000{% extends 'base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

{% trans "Diagnostic Results" %}

{% blocktrans %}Module: {{ module_name }}{% endblocktrans %}

{% if results %} {% include "diagnostics_results.html" with results=results %} {% else %}

{% trans "This module does not support diagnostics" %}

{% endif %} {% endblock %} Plinth-0.8.1/plinth/modules/diagnostics/templates/diagnostics_results.html000066400000000000000000000032211266051671100272120ustar00rootroot00000000000000{% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %}
{% for test, result in results %} {% endfor %}
{% trans "Test" %} {% trans "Result" %}
{{ test }} {% if result == 'passed' %} {{ result }} {% elif result == 'failed' %} {{ result }} {% elif result == 'error' %} {{ result }} {% else %} {{ result }} {% endif %}
Plinth-0.8.1/plinth/modules/diagnostics/tests/000077500000000000000000000000001266051671100214025ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/diagnostics/tests/__init__.py000066400000000000000000000000001266051671100235010ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/diagnostics/urls.py000066400000000000000000000017211266051671100216000ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Diagnostics module """ from django.conf.urls import url from . import diagnostics as views urlpatterns = [ url(r'^sys/diagnostics/$', views.index, name='index'), url(r'^sys/diagnostics/(?P[a-z\-]+)/$', views.module, name='module'), ] Plinth-0.8.1/plinth/modules/dynamicdns/000077500000000000000000000000001266051671100200625ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/dynamicdns/__init__.py000066400000000000000000000015471266051671100222020ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure ez-ipupdate client """ from . import dynamicdns from .dynamicdns import init __all__ = ['dynamicdns', 'init'] depends = ['plinth.modules.apps'] Plinth-0.8.1/plinth/modules/dynamicdns/dynamicdns.py000066400000000000000000000337341266051671100225770ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django import forms from django.contrib import messages from django.core import validators from django.core.urlresolvers import reverse_lazy from django.utils.translation import ugettext as _, ugettext_lazy from django.template.response import TemplateResponse import logging from plinth import actions from plinth import cfg from plinth import package from plinth.utils import format_lazy logger = logging.getLogger(__name__) EMPTYSTRING = 'none' subsubmenu = [{'url': reverse_lazy('dynamicdns:index'), 'text': ugettext_lazy('About')}, {'url': reverse_lazy('dynamicdns:configure'), 'text': ugettext_lazy('Configure')}, {'url': reverse_lazy('dynamicdns:statuspage'), 'text': ugettext_lazy('Status')}] def init(): """Initialize the dynamicdns module""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(ugettext_lazy('Dynamic DNS'), 'glyphicon-refresh', 'dynamicdns:index', 500) @package.required(['ez-ipupdate']) def index(request): """Serve Dynamic DNS page.""" return TemplateResponse(request, 'dynamicdns.html', {'title': _('Dynamic DNS'), 'subsubmenu': subsubmenu}) class TrimmedCharField(forms.CharField): """Trim the contents of a CharField.""" def clean(self, value): """Clean and validate the field value""" if value: value = value.strip() return super(TrimmedCharField, self).clean(value) class ConfigureForm(forms.Form): """Form to configure the Dynamic DNS client.""" help_update_url = \ ugettext_lazy('The Variables <User>, <Pass>, <Ip>, ' '<Domain> may be used within the URL. For details ' 'see the update URL templates of the example providers.') help_services = \ ugettext_lazy('Please choose an update protocol according to your ' 'provider. If your provider does not support the GnudIP ' 'protocol or your provider is not listed you may use the ' 'update URL of your provider.') help_server = \ ugettext_lazy('Please do not enter a URL here (like ' '"https://example.com/") but only the hostname of the ' 'GnuDIP server (like "example.com").') help_domain = format_lazy( ugettext_lazy('The public domain name you want use to reach your ' '{box_name}.'), box_name=ugettext_lazy(cfg.box_name)) help_disable_ssl = \ ugettext_lazy('Use this option if your provider uses self signed ' 'certificates.') help_http_auth = \ ugettext_lazy('If this option is selected, your username and password ' 'will be used for HTTP basic authentication.') help_secret = \ ugettext_lazy('Leave this field empty if you want to keep your ' 'previous configured password.') help_ip_url = format_lazy( ugettext_lazy('Optional Value. If your {box_name} is not connected ' 'directly to the Internet (i.e. connected to a NAT ' 'router) this URL is used to figure out the real ' 'Internet IP. The URL should simply return the IP where ' 'the client comes from (example: ' 'http://myip.datasystems24.de).'), box_name=ugettext_lazy(cfg.box_name)) help_user = \ ugettext_lazy('You should have been requested to select a username ' 'when you created the account.') """ToDo: sync this list with the html template file""" provider_choices = ( ('GnuDIP', 'GnuDIP'), ('noip', 'noip.com'), ('selfhost', 'selfhost.bz'), ('freedns', 'freedns.afraid.org'), ('other', 'other update URL')) enabled = forms.BooleanField(label=ugettext_lazy('Enable Dynamic DNS'), required=False) service_type = forms.ChoiceField(label=ugettext_lazy('Service type'), help_text=help_services, choices=provider_choices) dynamicdns_server = TrimmedCharField( label=ugettext_lazy('GnudIP Server Address'), required=False, help_text=help_server, validators=[ validators.RegexValidator(r'^[\w-]{1,63}(\.[\w-]{1,63})*$', ugettext_lazy('Invalid server name'))]) dynamicdns_update_url = TrimmedCharField( label=ugettext_lazy('Update URL'), required=False, help_text=help_update_url) disable_SSL_cert_check = forms.BooleanField( label=ugettext_lazy('Accept all SSL certificates'), help_text=help_disable_ssl, required=False) use_http_basic_auth = forms.BooleanField( label=ugettext_lazy('Use HTTP basic authentication'), help_text=help_http_auth, required=False) dynamicdns_domain = TrimmedCharField( label=ugettext_lazy('Domain Name'), help_text=help_domain, required=False, validators=[ validators.RegexValidator(r'^[\w-]{1,63}(\.[\w-]{1,63})*$', ugettext_lazy('Invalid domain name'))]) dynamicdns_user = TrimmedCharField( label=ugettext_lazy('Username'), required=False, help_text=help_user) dynamicdns_secret = TrimmedCharField( label=ugettext_lazy('Password'), widget=forms.PasswordInput(), required=False, help_text=help_secret) showpw = forms.BooleanField(label=ugettext_lazy('Show password'), required=False) dynamicdns_ipurl = TrimmedCharField( label=ugettext_lazy('IP check URL'), required=False, help_text=help_ip_url, validators=[ validators.URLValidator(schemes=['http', 'https', 'ftp'])]) def clean(self): cleaned_data = super(ConfigureForm, self).clean() dynamicdns_secret = cleaned_data.get('dynamicdns_secret') dynamicdns_update_url = cleaned_data.get('dynamicdns_update_url') dynamicdns_user = cleaned_data.get('dynamicdns_user') dynamicdns_domain = cleaned_data.get('dynamicdns_domain') dynamicdns_server = cleaned_data.get('dynamicdns_server') service_type = cleaned_data.get('service_type') old_dynamicdns_secret = self.initial['dynamicdns_secret'] # Clear the fields which are not in use if service_type == 'GnuDIP': dynamicdns_update_url = '' else: dynamicdns_server = '' if cleaned_data.get('enabled'): # Check if gnudip server or update URL is filled if not dynamicdns_update_url and not dynamicdns_server: raise forms.ValidationError( _('Please provide update URL or a GnuDIP Server')) if dynamicdns_server and not dynamicdns_user: raise forms.ValidationError(_('Please provide GnuDIP username')) if dynamicdns_server and not dynamicdns_domain: raise forms.ValidationError(_('Please provide GnuDIP domain')) # Check if a password was set before or a password is set now if dynamicdns_server and \ not dynamicdns_secret and not old_dynamicdns_secret: raise forms.ValidationError(_('Please provide a password')) @package.required(['ez-ipupdate']) def configure(request): """Serve the configuration form.""" status = get_status() form = None if request.method == 'POST': form = ConfigureForm(request.POST, initial=status) if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = ConfigureForm(initial=status) else: form = ConfigureForm(initial=status) return TemplateResponse(request, 'dynamicdns_configure.html', {'title': _('Configure Dynamic DNS'), 'form': form, 'subsubmenu': subsubmenu}) @package.required(['ez-ipupdate']) def statuspage(request): """Serve the status page.""" check_nat = actions.run('dynamicdns', ['get-nat']) last_update = actions.run('dynamicdns', ['get-last-success']) no_nat = check_nat.strip() == 'no' nat_unchecked = check_nat.strip() == 'unknown' timer = actions.run('dynamicdns', ['get-timer']) if no_nat: logger.info('Not behind a NAT') if nat_unchecked: logger.info('Did not check if we are behind a NAT') return TemplateResponse(request, 'dynamicdns_status.html', {'title': _('Status of Dynamic DNS'), 'no_nat': no_nat, 'nat_unchecked': nat_unchecked, 'timer': timer, 'last_update': last_update, 'subsubmenu': subsubmenu}) def get_status(): """Return the current status.""" # TODO: use key/value instead of hard coded value list status = {} output = actions.run('dynamicdns', ['status']) details = output.split() status['enabled'] = (output.split()[0] == 'enabled') if len(details) > 1: if details[1] == 'disabled': status['dynamicdns_server'] = '' else: status['dynamicdns_server'] = details[1].replace("'", "") else: status['dynamicdns_server'] = '' if len(details) > 2: if details[2] == 'disabled': status['dynamicdns_domain'] = '' else: status['dynamicdns_domain'] = details[2].replace("'", "") else: status['dynamicdns_domain'] = '' if len(details) > 3: if details[3] == 'disabled': status['dynamicdns_user'] = '' else: status['dynamicdns_user'] = details[3].replace("'", "") else: status['dynamicdns_user'] = '' if len(details) > 4: if details[4] == 'disabled': status['dynamicdns_secret'] = '' else: status['dynamicdns_secret'] = details[4].replace("'", "") else: status['dynamicdns_secret'] = '' if len(details) > 5: if details[5] == 'disabled': status['dynamicdns_ipurl'] = '' else: status['dynamicdns_ipurl'] = details[5].replace("'", "") else: status['dynamicdns_ipurl'] = '' if len(details) > 6: if details[6] == 'disabled': status['dynamicdns_update_url'] = '' else: status['dynamicdns_update_url'] = details[6].replace("'", "") else: status['dynamicdns_update_url'] = '' if len(details) > 7: status['disable_SSL_cert_check'] = (output.split()[7] == 'enabled') else: status['disable_SSL_cert_check'] = False if len(details) > 8: status['use_http_basic_auth'] = (output.split()[8] == 'enabled') else: status['use_http_basic_auth'] = False if not status['dynamicdns_server'] and not status['dynamicdns_update_url']: status['service_type'] = 'GnuDIP' elif not status['dynamicdns_server'] and status['dynamicdns_update_url']: status['service_type'] = 'other' else: status['service_type'] = 'GnuDIP' return status def _apply_changes(request, old_status, new_status): """Apply the changes to Dynamic DNS client.""" logger.info('New status is - %s', new_status) logger.info('Old status was - %s', old_status) if new_status['dynamicdns_secret'] == '': new_status['dynamicdns_secret'] = old_status['dynamicdns_secret'] if new_status['dynamicdns_ipurl'] == '': new_status['dynamicdns_ipurl'] = EMPTYSTRING if new_status['dynamicdns_update_url'] == '': new_status['dynamicdns_update_url'] = EMPTYSTRING if new_status['dynamicdns_server'] == '': new_status['dynamicdns_server'] = EMPTYSTRING if new_status['service_type'] == 'GnuDIP': new_status['dynamicdns_update_url'] = EMPTYSTRING else: new_status['dynamicdns_server'] = EMPTYSTRING if old_status != new_status: disable_ssl_check = "disabled" use_http_basic_auth = "disabled" if new_status['disable_SSL_cert_check']: disable_ssl_check = "enabled" if new_status['use_http_basic_auth']: use_http_basic_auth = "enabled" _run(['configure', '-s', new_status['dynamicdns_server'], '-d', new_status['dynamicdns_domain'], '-u', new_status['dynamicdns_user'], '-p', '-I', new_status['dynamicdns_ipurl'], '-U', new_status['dynamicdns_update_url'], '-c', disable_ssl_check, '-b', use_http_basic_auth], input=new_status['dynamicdns_secret'].encode()) if old_status['enabled']: _run(['stop']) if new_status['enabled']: _run(['start']) messages.success(request, _('Configuration updated')) else: logger.info('Nothing changed') def _run(arguments, superuser=False, input=None): """Run a given command and raise exception if there was an error.""" command = 'dynamicdns' if superuser: return actions.superuser_run(command, arguments, input=input) else: return actions.run(command, arguments, input=input) Plinth-0.8.1/plinth/modules/dynamicdns/templates/000077500000000000000000000000001266051671100220605ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/dynamicdns/templates/dynamicdns.html000066400000000000000000000044761266051671100251120ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

{% trans "Dynamic DNS Client" %}

{% blocktrans trimmed %} If your internet provider changes your IP address periodic (i.e. every 24h) it may be hard for others to find you in the WEB. And for this reason nobody may find the services which are provided by {{ box_name }}, such as ownCloud. {% endblocktrans %}

{% blocktrans trimmed %} The solution is to assign a DNS name to your IP address and update the DNS name every time your IP is changed by your Internet provider. Dynamic DNS allows you to push your current public IP address to an gnudip server. Afterwards the Server will assign your DNS name with the new IP and if someone from the Internet asks for your DNS name he will get your current IP answered. {% endblocktrans %}

{% blocktrans trimmed %} If you are looking for a free dynamic DNS account, you may find a free GnuDIP service at gnudip.datasystems24.net or you may find free update URL based services on freedns.afraid.org. {% endblocktrans %}

{% blocktrans trimmed %} If your {{ box_name }} is connected behind some NAT router, don't forget to add port forwarding (i.e. forward some standard ports like 80 and 443). {% endblocktrans %}

{% endblock %} Plinth-0.8.1/plinth/modules/dynamicdns/templates/dynamicdns_configure.html000066400000000000000000000135531266051671100271470ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 http://www.gnu.org/licenses/. # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
{% csrf_token %} {{ form|bootstrap }}
{% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/dynamicdns/templates/dynamicdns_status.html000066400000000000000000000031631266051671100265050ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

{% trans "NAT type" %}

{% if nat_unchecked %} {% blocktrans trimmed %} NAT type not detected yet, if you do not provide a "IP check URL" we will not detect a NAT type. {% endblocktrans %} {% else %} {% if no_nat %} {% trans "Direct connection to the Internet." %} {% else %} {% blocktrans trimmed %} Behind NAT. This means that Dynamic DNS service will poll the "IP check URL" for changes (the "IP check URL" entry is needed for this - otherwise IP changes will not be detected). In case the WAN IP changes, it may take up to {{ timer }} minutes until your DNS entry is updated. {% endblocktrans %} {% endif %} {% endif %}

{% trans "Last update" %}

{{ last_update }}

{% endblock %} Plinth-0.8.1/plinth/modules/dynamicdns/tests/000077500000000000000000000000001266051671100212245ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/dynamicdns/tests/__init__.py000066400000000000000000000000001266051671100233230ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/dynamicdns/urls.py000066400000000000000000000020151266051671100214170ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the dynamicdns module """ from django.conf.urls import url from . import dynamicdns as views urlpatterns = [ url(r'^apps/dynamicdns/$', views.index, name='index'), url(r'^apps/dynamicdns/configure/$', views.configure, name='configure'), url(r'^apps/dynamicdns/statuspage/$', views.statuspage, name='statuspage'), ] Plinth-0.8.1/plinth/modules/firewall/000077500000000000000000000000001266051671100175365ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/firewall/__init__.py000066400000000000000000000015331266051671100216510ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure a firewall """ from . import firewall from .firewall import init __all__ = ['firewall', 'init'] depends = ['plinth.modules.system'] Plinth-0.8.1/plinth/modules/firewall/firewall.py000066400000000000000000000111241266051671100217140ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure a firewall """ from django.template.response import TemplateResponse from django.utils.translation import ugettext_lazy as _ import logging from plinth import actions from plinth import cfg from plinth import package from plinth.signals import service_enabled import plinth.service as service_module LOGGER = logging.getLogger(__name__) def init(): """Initailze firewall module""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Firewall'), 'glyphicon-fire', 'firewall:index', 50) service_enabled.connect(on_service_enabled) @package.required(['firewalld']) def index(request): """Serve introcution page""" if not get_enabled_status(): return TemplateResponse(request, 'firewall.html', {'title': _('Firewall'), 'firewall_status': 'not_running'}) internal_enabled_services = get_enabled_services(zone='internal') external_enabled_services = get_enabled_services(zone='external') return TemplateResponse( request, 'firewall.html', {'title': _('Firewall'), 'services': list(service_module.services.values()), 'internal_enabled_services': internal_enabled_services, 'external_enabled_services': external_enabled_services}) def get_enabled_status(): """Return whether firewall is enabled""" output = _run(['get-status'], superuser=True) return output.split()[0] == 'running' def get_enabled_services(zone): """Return the status of various services currently enabled""" output = _run(['get-enabled-services', '--zone', zone], superuser=True) return output.split() def add_service(port, zone): """Enable a service in firewall""" _run(['add-service', port, '--zone', zone], superuser=True) def remove_service(port, zone): """Remove a service in firewall""" _run(['remove-service', port, '--zone', zone], superuser=True) def on_service_enabled(sender, service_id, enabled, **kwargs): """ Enable/disable firewall ports when a service is enabled/disabled. """ del sender # Unused del kwargs # Unused internal_enabled_services = get_enabled_services(zone='internal') external_enabled_services = get_enabled_services(zone='external') LOGGER.info('Service enabled - %s, %s', service_id, enabled) service = service_module.services[service_id] for port in service.ports: if enabled: if port not in internal_enabled_services: add_service(port, zone='internal') if (service.is_external and port not in external_enabled_services): add_service(port, zone='external') else: # service already configured. pass else: if port in internal_enabled_services: enabled_services_on_port = [ service_.is_enabled() for service_ in service_module.services.values() if port in service_.ports and service_id != service_.service_id] if not any(enabled_services_on_port): remove_service(port, zone='internal') if port in external_enabled_services: enabled_services_on_port = [ service_.is_enabled() for service_ in service_module.services.values() if port in service_.ports and service_id != service_.service_id and service_.is_external] if not any(enabled_services_on_port): remove_service(port, zone='external') def _run(arguments, superuser=False): """Run an given command and raise exception if there was an error""" command = 'firewall' if superuser: return actions.superuser_run(command, arguments) else: return actions.run(command, arguments) Plinth-0.8.1/plinth/modules/firewall/templates/000077500000000000000000000000001266051671100215345ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/firewall/templates/firewall.html000066400000000000000000000073201266051671100242310ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

{{ title }}

{% blocktrans trimmed %} Firewall is a security system that controls the incoming and outgoing network traffic on your {{ box_name }}. Keeping a firewall enabled and properly configured reduces risk of security threat from the Internet. {% endblocktrans %}

{% trans "Current status:" %}

{% if firewall_status == 'not_running' %}

{% blocktrans trimmed %} Firewall daemon is not running. Please run it. Firewall comes enabled by default on {{ box_name }}. On any Debian based system (such as {{ box_name }}) you may run it using the command 'service firewalld start' or in case of a system with systemd 'systemctl start firewalld'. {% endblocktrans %}

{% else %}
{% for service in services %} {% for port in service.ports %} {% endfor %} {% endfor %}
{% trans "Service/Port" %} {% trans "Status" %}
{{ service.name }} {% if service.is_enabled %} {% trans "Enabled" %} {% else %} {% trans "Disabled" %} {% endif %}
{{ port }} {% if port in internal_enabled_services and port in external_enabled_services %} {% trans "Permitted" %} {% elif port in internal_enabled_services %} {% trans "Permitted (internal only)" %} {% elif port in external_enabled_services %} {% trans "Permitted (external only)" %} {% else %} {% trans "Blocked" %} {% endif %}

{% blocktrans trimmed %} The operation of the firewall is automatic. When you enable a service it is also permitted in the firewall and when you disable a service it is also disabled in the firewall. {% endblocktrans %}

{% endif %} {% endblock %} Plinth-0.8.1/plinth/modules/firewall/tests/000077500000000000000000000000001266051671100207005ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/firewall/tests/__init__.py000066400000000000000000000000001266051671100227770ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/firewall/urls.py000066400000000000000000000015511266051671100210770ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Firewall module """ from django.conf.urls import url from . import firewall as views urlpatterns = [ url(r'^sys/firewall/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/first_boot/000077500000000000000000000000001266051671100201035ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/first_boot/__init__.py000066400000000000000000000013411266051671100222130ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for first boot wizard """ Plinth-0.8.1/plinth/modules/first_boot/forms.py000066400000000000000000000054711266051671100216120ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for first boot module. """ from django.contrib import auth from django.contrib import messages from django.utils.translation import ugettext as _ from plinth import actions from plinth.errors import ActionError from plinth.modules.users.forms import GROUP_CHOICES class State1Form(auth.forms.UserCreationForm): """Firstboot state 1: create a new user.""" def __init__(self, *args, **kwargs): self.request = kwargs.pop('request') super(State1Form, self).__init__(*args, **kwargs) def save(self, commit=True): """Create and log the user in.""" user = super(State1Form, self).save(commit=commit) if commit: try: actions.superuser_run( 'ldap', ['create-user', user.get_username()], input=self.cleaned_data['password1'].encode()) except ActionError: messages.error(self.request, _('Creating LDAP user failed.')) try: actions.superuser_run( 'ldap', ['add-user-to-group', user.get_username(), 'admin']) except ActionError: messages.error(self.request, _('Failed to add new user to admin group.')) # Create initial Django groups for group_choice in GROUP_CHOICES: auth.models.Group.objects.get_or_create(name=group_choice[0]) admin_group = auth.models.Group.objects.get(name='admin') admin_group.user_set.add(user) self.login_user(self.cleaned_data['username'], self.cleaned_data['password1']) return user def login_user(self, username, password): """Try to login the user with the credentials provided""" try: user = auth.authenticate(username=username, password=password) auth.login(self.request, user) except Exception: pass else: message = _('User account created, you are now logged in') messages.success(self.request, message) Plinth-0.8.1/plinth/modules/first_boot/middleware.py000066400000000000000000000036031266051671100225740ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Django middleware to redirect to firstboot wizard if it has not be run yet. """ from django.core.urlresolvers import reverse from django.http.response import HttpResponseRedirect import logging from plinth import kvstore LOGGER = logging.getLogger(__name__) class FirstBootMiddleware(object): """Forward to firstboot page if firstboot isn't finished yet.""" @staticmethod def process_request(request): """Handle a request as Django middleware request handler.""" state = kvstore.get_default('firstboot_state', 0) firstboot_index_url = reverse('first_boot:index') user_requests_firstboot = request.path.startswith(firstboot_index_url) help_index_url = reverse('help:index') user_requests_help = request.path.startswith(help_index_url) # Setup is complete: Forbid accessing firstboot if state >= 10 and user_requests_firstboot: return HttpResponseRedirect(reverse('index')) # Setup is not complete: Forbid accessing anything but firstboot or help if state < 10 and not user_requests_firstboot and \ not user_requests_help: return HttpResponseRedirect(reverse('first_boot:state%d' % state)) Plinth-0.8.1/plinth/modules/first_boot/templates/000077500000000000000000000000001266051671100221015ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_navbar.html000066400000000000000000000015731266051671100263410ustar00rootroot00000000000000{% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %}
  • Plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_state0.html000066400000000000000000000030171266051671100262630ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% load static %} {% block page_head %} {% endblock %} {% block mainmenu_right %} {% include "firstboot_navbar.html" %} {% endblock %} {% block content_row %}

    {{ box_name }}

    {% trans "Start Setup" %}

    {% blocktrans trimmed %} To complete the setup of your {{ box_name }}, please provide some basic information. {% endblocktrans %}

    {% endblock %} Plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_state1.html000066400000000000000000000033351266051671100262670ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% load static %} {% block page_head %} {% endblock %} {% block mainmenu_right %} {% include "firstboot_navbar.html" %} {% endblock %} {% block content_row %}
    {% include 'messages.html' %}

    {% trans "Administrator Account" %}

    {% blocktrans trimmed %} Choose a username and password to access this web interface. The password can be changed later. This user will be granted administrative privileges. Other users can be added later. {% endblocktrans %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_state10.html000066400000000000000000000034561266051671100263530ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content_row %}
    {% include 'messages.html' %}

    {% trans "Setup Complete!" %}

    {% blocktrans trimmed %} {{ box_name }} setup is now complete. To make your {{ box_name }} functional, you need some applications. They will be installed the first time you access them. {% endblocktrans %}

    {% trans "Current Network Configuration" %}

    {% blocktrans trimmed %} You should check the network setup and modify it if necessary. Do not forget to change the default Wi-Fi passwords! {% endblocktrans %}

    {% include "connections_diagram.html" %}
    {% endblock %} Plinth-0.8.1/plinth/modules/first_boot/templatetags/000077500000000000000000000000001266051671100225755ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/first_boot/templatetags/__init__.py000066400000000000000000000000001266051671100246740ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/first_boot/templatetags/firstboot_extras.py000066400000000000000000000017641266051671100265600ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Template tags for first boot module. """ from django import template from plinth import kvstore register = template.Library() @register.simple_tag def firstboot_is_finished(): """Return whether firstboot process is completed.""" state = kvstore.get_default('firstboot_state', 0) return state >= 10 Plinth-0.8.1/plinth/modules/first_boot/tests/000077500000000000000000000000001266051671100212455ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/first_boot/tests/__init__.py000066400000000000000000000000001266051671100233440ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/first_boot/urls.py000066400000000000000000000023131266051671100214410ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the First Boot module """ from django.conf.urls import url from stronghold.decorators import public from .views import State0View, State1View, state10 urlpatterns = [ # Take care of the firstboot middleware when changing URLs url(r'^firstboot/$', public(State0View.as_view()), name='index'), url(r'^firstboot/state0/$', public(State0View.as_view()), name='state0'), url(r'^firstboot/state1/$', public(State1View.as_view()), name='state1'), url(r'^firstboot/state10/$', state10, name='state10'), ] Plinth-0.8.1/plinth/modules/first_boot/views.py000066400000000000000000000042421266051671100216140ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django.contrib.auth.models import User from django.core.urlresolvers import reverse_lazy from django.shortcuts import render_to_response from django.template import RequestContext from django.utils.translation import ugettext as _ from django.views.generic import CreateView, TemplateView from plinth import kvstore from plinth import network from .forms import State1Form class State0View(TemplateView): """Show the welcome screen.""" template_name = 'firstboot_state0.html' class State1View(CreateView): """Create user account and log the user in.""" template_name = 'firstboot_state1.html' form_class = State1Form success_url = reverse_lazy('first_boot:state10') def get_form_kwargs(self): """Make request available to the form (to insert messages)""" kwargs = super(State1View, self).get_form_kwargs() kwargs['request'] = self.request return kwargs def state10(request): """State 10 is when all firstboot setup is done. After viewing this page the firstboot module can't be accessed anymore. """ # Make sure that a user exists before finishing firstboot if User.objects.all(): kvstore.set('firstboot_state', 10) connections = network.get_connection_list() return render_to_response('firstboot_state10.html', {'title': _('Setup Complete'), 'connections': connections}, context_instance=RequestContext(request)) Plinth-0.8.1/plinth/modules/help/000077500000000000000000000000001266051671100166615ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/help/__init__.py000066400000000000000000000014761266051671100210020ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for help pages """ from . import help # pylint: disable-msg=W0622 from .help import init __all__ = ['help', 'init'] Plinth-0.8.1/plinth/modules/help/help.py000066400000000000000000000046201266051671100201650ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Help module for Plinth. """ import os from gettext import gettext as _ from django.http import Http404 from django.template.response import TemplateResponse from django.utils.translation import ugettext as _, ugettext_lazy from stronghold.decorators import public from plinth import cfg, __version__ def init(): """Initialize the Help module""" menu = cfg.main_menu.add_urlname(ugettext_lazy('Documentation'), 'glyphicon-book', 'help:index', 101) menu.add_urlname(ugettext_lazy('Where to Get Help'), 'glyphicon-search', 'help:index_explicit', 5) menu.add_urlname(ugettext_lazy('Manual'), 'glyphicon-info-sign', 'help:manual', 10) menu.add_urlname(ugettext_lazy('About'), 'glyphicon-star', 'help:about', 100) @public def index(request): """Serve the index page""" return TemplateResponse(request, 'help_index.html', {'title': _('Documentation and FAQ')}) @public def about(request): """Serve the about page""" context = { 'title': _('About {box_name}').format(box_name=_(cfg.box_name)), 'version': __version__ } return TemplateResponse(request, 'help_about.html', context) @public def manual(request): """Serve the manual page from the 'doc' directory""" try: with open(os.path.join(cfg.doc_dir, 'freedombox-manual.part.html'), 'r', encoding='utf-8') as input_file: content = input_file.read() except IOError: raise Http404 return TemplateResponse( request, 'help_manual.html', {'title': _('{box_name} Manual').format(box_name=_(cfg.box_name)), 'content': content}) Plinth-0.8.1/plinth/modules/help/templates/000077500000000000000000000000001266051671100206575ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/help/templates/help_about.html000066400000000000000000000054071266051671100236750ustar00rootroot00000000000000{% extends 'help_base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% load static %} {% block content %}

    {% blocktrans trimmed %} {{ box_name }} is a community project to develop, design and promote personal servers running free software for private, personal communications. It is a networking appliance designed to allow interfacing with the rest of the Internet under conditions of protected privacy and data security. It hosts applications such as blog, wiki, website, social network, email, web proxy and a Tor relay, on a device that can replace your Wi-Fi router, so that your data stays with you. {% endblocktrans %}

    {% blocktrans trimmed %} We live in a world where our use of the network is mediated by those who often do not have our best interests at heart. By building software that does not rely on a central service, we can regain control and privacy. By keeping our data in our homes, we gain useful legal protections over it. By giving back power to the users over their networks and machines, we are returning the Internet to its intended peer-to-peer architecture. {% endblocktrans %}

    {% blocktrans trimmed %} There are a number of projects working to realize a future of distributed services; {{ box_name }} aims to bring them all together in a convenient package. {% endblocktrans %}

    {% blocktrans trimmed %} For more information about the {{ box_name }} project, see the {{ box_name }} Wiki. {% endblocktrans %}

    {% trans "Learn more »" %}

    {% blocktrans trimmed %} You are running Plinth version {{ version }}. {% endblocktrans %}

    {% endblock %} Plinth-0.8.1/plinth/modules/help/templates/help_base.html000066400000000000000000000027711266051671100234760ustar00rootroot00000000000000{% extends 'base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% load firstboot_extras %} {% load static %} {# Adapt mainmenu-links during firstboot #} {% block mainmenu_left %} {% firstboot_is_finished as firstboot_finished %} {% if not firstboot_finished %} {{ cfg.box_name }} {% blocktrans trimmed %}{{ box_name }} Setup{% endblocktrans %} {% else %} {{ block.super }} {% endif %} {% endblock %} {% block mainmenu_right %} {% firstboot_is_finished as firstboot_finished %} {% if not firstboot_finished %} {% include "firstboot_navbar.html" %} {% else %} {{ block.super }} {% endif %} {% endblock %} Plinth-0.8.1/plinth/modules/help/templates/help_index.html000066400000000000000000000037321266051671100236710ustar00rootroot00000000000000{% extends 'help_base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

    {% trans "Help" %}

    {% url 'help:manual' as manual_url %} {% blocktrans trimmed %} The {{ box_name }} Manual is the best place to start for information regarding {{ box_name }}. {% endblocktrans %}

    {% blocktrans trimmed %} {{ box_name }} project wiki contains further information. {% endblocktrans %}

    {% blocktrans trimmed %} To seek help from {{ box_name }} community, queries may be posted on the mailing list. The list archives also contain information about problems faced by other users and possible solutions. {% endblocktrans %}

    {% blocktrans trimmed %} Many {{ box_name }} contributors and users are also available on the irc.oftc.net IRC network. Join and request help on the #freedombox channel using the IRC web interface. {% endblocktrans %}

    {% endblock %} Plinth-0.8.1/plinth/modules/help/templates/help_manual.html000066400000000000000000000016571266051671100240430ustar00rootroot00000000000000{% extends 'help_base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block page_head %} {% endblock %} {% block content %} {{ content|safe }} {% endblock %} Plinth-0.8.1/plinth/modules/help/tests/000077500000000000000000000000001266051671100200235ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/help/tests/__init__.py000066400000000000000000000000001266051671100221220ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/help/urls.py000066400000000000000000000023401266051671100202170ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Help module """ from django.conf.urls import url from . import help as views urlpatterns = [ # having two urls for one page is a hack to help the current url/menu # system highlight the correct menu item. Every submenu-item with the same # url prefix as the main-menu is highlighted automatically. url(r'^help/$', views.index, name='index'), url(r'^help/index/$', views.index, name='index_explicit'), url(r'^help/about/$', views.about, name='about'), url(r'^help/manual/$', views.manual, name='manual'), ] Plinth-0.8.1/plinth/modules/ikiwiki/000077500000000000000000000000001266051671100173715ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/ikiwiki/__init__.py000066400000000000000000000032751266051671100215110ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure ikiwiki """ from django.utils.translation import ugettext_lazy as _ from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] service = None def init(): """Initialize the ikiwiki module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Wiki and Blog (ikiwiki)'), 'glyphicon-edit', 'ikiwiki:index', 1100) global service service = service_module.Service( 'ikiwiki', _('ikiwiki wikis and blogs'), ['http', 'https'], is_external=True, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return action_utils.webserver_is_enabled('ikiwiki-plinth') def diagnose(): """Run diagnostics and return the results.""" results = [] results.extend(action_utils.diagnose_url_on_all( 'https://{host}/ikiwiki', extra_options=['--no-check-certificate'])) return results Plinth-0.8.1/plinth/modules/ikiwiki/forms.py000066400000000000000000000025671266051671100211030ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring ikiwiki """ from django import forms from django.utils.translation import ugettext_lazy as _ class IkiwikiForm(forms.Form): """ikiwiki configuration form.""" enabled = forms.BooleanField( label=_('Enable ikiwiki'), required=False) class IkiwikiCreateForm(forms.Form): """Form to create a wiki or blog.""" site_type = forms.ChoiceField( label=_('Type'), choices=[('wiki', 'Wiki'), ('blog', 'Blog')]) name = forms.CharField(label=_('Name')) admin_name = forms.CharField(label=_('Admin Account Name')) admin_password = forms.CharField( label=_('Admin Account Password'), widget=forms.PasswordInput()) Plinth-0.8.1/plinth/modules/ikiwiki/templates/000077500000000000000000000000001266051671100213675ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/ikiwiki/templates/ikiwiki.html000066400000000000000000000024121266051671100237140ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% blocktrans trimmed %} When enabled, the blogs and wikis will be available from /ikiwiki. {% endblocktrans %}

    {% include "diagnostics_button.html" with module="ikiwiki" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/ikiwiki/templates/ikiwiki_create.html000066400000000000000000000017701266051671100252450ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/ikiwiki/templates/ikiwiki_delete.html000066400000000000000000000026731266051671100252470ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% blocktrans trimmed %} Delete Wiki or Blog {{ name }} {% endblocktrans %}

    {% blocktrans trimmed %} This action will remove all the posts, pages and comments including revision history. Delete this wiki or blog permanently? {% endblocktrans %}

    {% csrf_token %} {% trans "Cancel" %}
    {% endblock %} Plinth-0.8.1/plinth/modules/ikiwiki/templates/ikiwiki_manage.html000066400000000000000000000040771266051671100252350ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% endblock %} {% block content %}
    {% if not sites %}

    {% trans "No wikis or blogs available." %}

    {% trans "Create a Wiki or Blog" %}

    {% else %}
    {% for site in sites %} {% endfor %}
    {% endif %}
    {% endblock %} Plinth-0.8.1/plinth/modules/ikiwiki/tests/000077500000000000000000000000001266051671100205335ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/ikiwiki/tests/__init__.py000066400000000000000000000000001266051671100226320ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/ikiwiki/urls.py000066400000000000000000000020731266051671100207320ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the ikiwiki module """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/ikiwiki/$', views.index, name='index'), url(r'^apps/ikiwiki/manage/$', views.manage, name='manage'), url(r'^apps/ikiwiki/(?P[\w.@+-]+)/delete/$', views.delete, name='delete'), url(r'^apps/ikiwiki/create/$', views.create, name='create'), ] Plinth-0.8.1/plinth/modules/ikiwiki/views.py000066400000000000000000000147041266051671100211060ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring ikiwiki """ from django.contrib import messages from django.core.urlresolvers import reverse_lazy from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.translation import ugettext as _, ugettext_lazy from .forms import IkiwikiForm, IkiwikiCreateForm from plinth import actions from plinth import action_utils from plinth import package from plinth.modules import ikiwiki subsubmenu = [{'url': reverse_lazy('ikiwiki:index'), 'text': ugettext_lazy('Configure')}, {'url': reverse_lazy('ikiwiki:manage'), 'text': ugettext_lazy('Manage')}, {'url': reverse_lazy('ikiwiki:create'), 'text': ugettext_lazy('Create')}] def on_install(): """Enable ikiwiki on install.""" actions.superuser_run('ikiwiki', ['setup']) ikiwiki.service.notify_enabled(None, True) @package.required(['ikiwiki', 'gcc', 'libc6-dev', 'libtimedate-perl', 'libcgi-formbuilder-perl', 'libcgi-session-perl', 'libxml-writer-perl'], on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = IkiwikiForm(request.POST, prefix='ikiwiki') if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = IkiwikiForm(initial=status, prefix='ikiwiki') else: form = IkiwikiForm(initial=status, prefix='ikiwiki') return TemplateResponse(request, 'ikiwiki.html', {'title': _('Wiki and Blog'), 'status': status, 'form': form, 'subsubmenu': subsubmenu}) def get_status(): """Get the current setting.""" return {'enabled': ikiwiki.is_enabled()} def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('ikiwiki', [sub_command]) ikiwiki.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) def manage(request): """Manage existing wikis and blogs.""" sites = actions.run('ikiwiki', ['get-sites']).split('\n') sites = [name for name in sites if name != ''] return TemplateResponse(request, 'ikiwiki_manage.html', {'title': _('Manage Wikis and Blogs'), 'subsubmenu': subsubmenu, 'sites': sites}) def create(request): """Form to create a wiki or blog.""" form = None if request.method == 'POST': form = IkiwikiCreateForm(request.POST, prefix='ikiwiki') if form.is_valid(): if form.cleaned_data['site_type'] == 'wiki': _create_wiki(request, form.cleaned_data['name'], form.cleaned_data['admin_name'], form.cleaned_data['admin_password']) elif form.cleaned_data['site_type'] == 'blog': _create_blog(request, form.cleaned_data['name'], form.cleaned_data['admin_name'], form.cleaned_data['admin_password']) return redirect(reverse_lazy('ikiwiki:manage')) else: form = IkiwikiCreateForm(prefix='ikiwiki') return TemplateResponse(request, 'ikiwiki_create.html', {'title': _('Create Wiki or Blog'), 'form': form, 'subsubmenu': subsubmenu}) def _create_wiki(request, name, admin_name, admin_password): """Create wiki.""" try: actions.superuser_run( 'ikiwiki', ['create-wiki', '--wiki_name', name, '--admin_name', admin_name], input=admin_password.encode()) messages.success(request, _('Created wiki {name}.').format(name=name)) except actions.ActionError as error: messages.error(request, _('Could not create wiki: {error}') .format(error=error)) def _create_blog(request, name, admin_name, admin_password): """Create blog.""" try: actions.superuser_run( 'ikiwiki', ['create-blog', '--blog_name', name, '--admin_name', admin_name], input=admin_password.encode()) messages.success(request, _('Created blog {name}.').format(name=name)) except actions.ActionError as error: messages.error(request, _('Could not create blog: {error}') .format(error=error)) def delete(request, name): """Handle deleting wikis/blogs, showing a confirmation dialog first. On GET, display a confirmation page. On POST, delete the wiki/blog. """ if request.method == 'POST': try: actions.superuser_run('ikiwiki', ['delete', '--name', name]) messages.success(request, _('{name} deleted.').format(name=name)) except actions.ActionError as error: messages.error(request, _('Could not delete {name}: {error}') .format(name=name, error=error)) return redirect(reverse_lazy('ikiwiki:manage')) return TemplateResponse(request, 'ikiwiki_delete.html', {'title': _('Delete Wiki or Blog'), 'subsubmenu': subsubmenu, 'name': name}) Plinth-0.8.1/plinth/modules/letsencrypt/000077500000000000000000000000001266051671100203055ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/letsencrypt/__init__.py000066400000000000000000000031001266051671100224100ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for using Let's Encrypt. """ from django.utils.translation import ugettext_lazy as _ import json from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module from plinth.modules import names depends = [ 'plinth.modules.apps', 'plinth.modules.names' ] service = None def init(): """Intialize the module.""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Certificates (Let\'s Encrypt)'), 'glyphicon-lock', 'letsencrypt:index', 20) def diagnose(): """Run diagnostics and return the results.""" results = [] for domain_type, domains in names.domains.items(): if domain_type == 'hiddenservice': continue for domain in domains: results.append(action_utils.diagnose_url('https://' + domain)) return results Plinth-0.8.1/plinth/modules/letsencrypt/templates/000077500000000000000000000000001266051671100223035ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/letsencrypt/templates/letsencrypt.html000066400000000000000000000106301266051671100255450ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% endblock %} {% block content %}

    {% trans "Certificates (Let's Encrypt)" %}

    {% blocktrans trimmed %} A digital certficate allows users of a web service to verify the identity of the service and to securely communicate with it. {{ box_name }} can automatically obtain and setup digital certificates for each available domain. It does so by proving itself to be the owner of a domain to Let's Encrypt, a certficate authority (CA). {% endblocktrans %}

    {% blocktrans trimmed %} Let's Encrypt is a free, automated, and open certificate authority, run for the public’s benefit by the Internet Security Research Group (ISRG). Please read and agree with the Let's Encrypt Subscriber Agreement before using this service. {% endblocktrans %}

    {% for domain, domain_status in status.domains.items %} {% endfor %}
    {% trans "Domain" %} {% trans "Certificate Status" %} {% trans "Website Security" %} {% trans "Actions" %}
    {{ domain }} {% if domain_status.certificate_available %} {% blocktrans trimmed with expiry_date=domain_status.expiry_date %} Expires on {{ expiry_date }} {% endblocktrans %} {% else %} {% trans "No certficate" %} {% endif %} {% if domain_status.web_enabled %} {% trans "Enabled" %} {% else %} {% trans "Disabled" %} {% endif %} {% if domain_status.certificate_available %}
    {% csrf_token %}
    {% csrf_token %}
    {% else %}
    {% csrf_token %}
    {% endif %}
    {% include "diagnostics_button.html" with module="letsencrypt" %} {% endblock %} Plinth-0.8.1/plinth/modules/letsencrypt/tests/000077500000000000000000000000001266051671100214475ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/letsencrypt/tests/__init__.py000066400000000000000000000000001266051671100235460ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/letsencrypt/urls.py000066400000000000000000000020421266051671100216420ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Let's Encrypt module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^sys/letsencrypt/$', views.index, name='index'), url(r'^sys/letsencrypt/revoke/(?P[^/]+)/$', views.revoke, name='revoke'), url(r'^sys/letsencrypt/obtain/(?P[^/]+)/$', views.obtain, name='obtain'), ] Plinth-0.8.1/plinth/modules/letsencrypt/views.py000066400000000000000000000057141266051671100220230ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for using Let's Encrypt. """ from django.contrib import messages from django.core.urlresolvers import reverse_lazy from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from django.views.decorators.http import require_POST import json import logging from plinth import actions from plinth import package from plinth.errors import ActionError from plinth.modules import names logger = logging.getLogger(__name__) @package.required(['letsencrypt']) def index(request): """Serve configuration page.""" status = get_status() return TemplateResponse(request, 'letsencrypt.html', {'title': _('Certificates (Let\'s Encrypt)'), 'status': status}) @require_POST def revoke(request, domain): """Revoke a certficate for a given domain.""" try: actions.superuser_run('letsencrypt', ['revoke', '--domain', domain]) messages.success( request, _('Certificate successfully revoked for domain {domain}') .format(domain=domain)) except ActionError as exception: messages.error( request, _('Failed to revoke certificate for domain {domain}: {error}') .format(domain=domain, error=exception.args[2])) return redirect(reverse_lazy('letsencrypt:index')) @require_POST def obtain(request, domain): """Obtain and install a certficate for a given domain.""" try: actions.superuser_run('letsencrypt', ['obtain', '--domain', domain]) messages.success( request, _('Certificate successfully obtained for domain {domain}') .format(domain=domain)) except ActionError as exception: messages.error( request, _('Failed to obtain certificate for domain {domain}: {error}') .format(domain=domain, error=exception.args[2])) return redirect(reverse_lazy('letsencrypt:index')) def get_status(): """Get the current settings.""" status = actions.superuser_run('letsencrypt', ['get-status']) status = json.loads(status) for domains in names.domains.values(): for domain in domains: status['domains'].setdefault(domain, {}) return status Plinth-0.8.1/plinth/modules/monkeysphere/000077500000000000000000000000001266051671100204425ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/monkeysphere/__init__.py000066400000000000000000000020551266051671100225550ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for monkeysphere. """ from django.utils.translation import ugettext_lazy as _ from plinth import cfg depends = ['plinth.modules.system'] def init(): """Initialize the monkeysphere module.""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Monkeysphere'), 'glyphicon-certificate', 'monkeysphere:index', 970) Plinth-0.8.1/plinth/modules/monkeysphere/templates/000077500000000000000000000000001266051671100224405ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/monkeysphere/templates/monkeysphere.html000066400000000000000000000070521266051671100260430ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% if running %} {% endif %} {% endblock %} {% block content %}

    {% trans "Monkeysphere" %}

    {% blocktrans trimmed %} With Monkeysphere, a PGP key can be generated for each configured domain serving SSH. The PGP public key can then be uploaded to the PGP keyservers. Users connecting to this machine through SSH can verify that they are connecting to the correct host. For users to trust the key, at least one person (usually the machine owner) must sign the key using the regular PGP key signing process. See the Monkeysphere SSH documentation for more details. {% endblocktrans %}

    {% if running %}

    {% trans "Publishing key to keyserver..." %}

    {% csrf_token %}

    {% endif %}
    {% for domain in status.domains %} {% endfor %}
    {% trans "Domain" %} {% trans "GPG Fingerprint" %} {% trans "Actions" %}
    {{ domain.name }} {% if domain.key %} {{ domain.key.pgp_fingerprint }} {% else %} {% trans "Not Available" %} {% endif %} {% if not domain.key %}
    {% csrf_token %}
    {% elif not running %}
    {% csrf_token %}
    {% endif %}
    {% endblock %} Plinth-0.8.1/plinth/modules/monkeysphere/tests/000077500000000000000000000000001266051671100216045ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/monkeysphere/tests/__init__.py000066400000000000000000000000001266051671100237030ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/monkeysphere/urls.py000066400000000000000000000021761266051671100220070ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the monkeysphere module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^sys/monkeysphere/$', views.index, name='index'), url(r'^sys/monkeysphere/(?P[^/]+)/generate/$', views.generate, name='generate'), url(r'^sys/monkeysphere/(?P[0-9A-Fa-f]+)/publish/$', views.publish, name='publish'), url(r'^sys/monkeysphere/cancel/$', views.cancel, name='cancel'), ] Plinth-0.8.1/plinth/modules/monkeysphere/views.py000066400000000000000000000071621266051671100221570ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Views for the monkeysphere module. """ from django.contrib import messages from django.core.urlresolvers import reverse_lazy from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from django.views.decorators.http import require_POST import json from plinth import actions from plinth import package from plinth.modules import names publish_process = None @package.required(['monkeysphere']) def index(request): """Serve configuration page.""" _collect_publish_result(request) status = get_status() return TemplateResponse( request, 'monkeysphere.html', {'title': _('Monkeysphere'), 'status': status, 'running': bool(publish_process)}) @require_POST def generate(request, domain): """Generate PGP key for SSH service.""" valid_domain = any((domain in domains for domains in names.domains.values())) if valid_domain: try: actions.superuser_run( 'monkeysphere', ['host-import-ssh-key', 'ssh://' + domain]) messages.success(request, _('Generated PGP key.')) except actions.ActionError as exception: messages.error(request, str(exception)) return redirect(reverse_lazy('monkeysphere:index')) @require_POST def publish(request, fingerprint): """Publish PGP key for SSH service.""" global publish_process if not publish_process: publish_process = actions.superuser_run( 'monkeysphere', ['host-publish-key', fingerprint], async=True) return redirect(reverse_lazy('monkeysphere:index')) @require_POST def cancel(request): """Cancel ongoing process.""" global publish_process if publish_process: publish_process.terminate() publish_process = None messages.info(request, _('Cancelled key publishing.')) return redirect(reverse_lazy('monkeysphere:index')) def get_status(): """Get the current status.""" output = actions.superuser_run('monkeysphere', ['host-show-keys']) keys = {} for key in json.loads(output)['keys']: key['name'] = key['uid'].replace('ssh://', '') keys[key['name']] = key domains = [] for domains_of_a_type in names.domains.values(): for domain in domains_of_a_type: domains.append({ 'name': domain, 'key': keys.get(domain), }) return {'domains': domains} def _collect_publish_result(request): """Handle publish process completion.""" global publish_process if not publish_process: return return_code = publish_process.poll() # Publish process is not complete yet if return_code is None: return if not return_code: messages.success(request, _('Published key to keyserver.')) else: messages.error(request, _('Error occurred while publishing key.')) publish_process = None Plinth-0.8.1/plinth/modules/mumble/000077500000000000000000000000001266051671100172125ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/mumble/__init__.py000066400000000000000000000037211266051671100213260ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure Mumble server """ from django.utils.translation import ugettext_lazy as _ from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] service = None def init(): """Intialize the Mumble module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Voice Chat (Mumble)'), 'glyphicon-headphones', 'mumble:index', 900) global service service = service_module.Service( 'mumble-plinth', _('Mumble Voice Chat Server'), is_external=True, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return action_utils.service_is_enabled('mumble-server') def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('mumble-server') def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(64738, 'tcp4')) results.append(action_utils.diagnose_port_listening(64738, 'tcp6')) results.append(action_utils.diagnose_port_listening(64738, 'udp4')) results.append(action_utils.diagnose_port_listening(64738, 'udp6')) return results Plinth-0.8.1/plinth/modules/mumble/forms.py000066400000000000000000000017221266051671100207140ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring Mumble """ from django import forms from django.utils.translation import ugettext_lazy as _ class MumbleForm(forms.Form): """Mumble configuration form.""" enabled = forms.BooleanField( label=_('Enable Mumble daemon'), required=False) Plinth-0.8.1/plinth/modules/mumble/templates/000077500000000000000000000000001266051671100212105ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/mumble/templates/mumble.html000066400000000000000000000036221266051671100233620ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "Voice Chat (Mumble)" %}

    {% blocktrans trimmed %} Mumble is an open source, low-latency, encrypted, high quality voice chat software. {% endblocktrans %}

    {% blocktrans trimmed %} You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your desktop and Android devices are available. {% endblocktrans %}

    {% trans "Status" %}

    {% if status.is_running %} {% trans "Mumble server is running" %} {% else %} {% trans "Mumble server is not running" %} {% endif %}

    {% include "diagnostics_button.html" with module="mumble" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/mumble/tests/000077500000000000000000000000001266051671100203545ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/mumble/tests/__init__.py000066400000000000000000000000001266051671100224530ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/mumble/urls.py000066400000000000000000000015321266051671100205520ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Mumble module """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/mumble/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/mumble/views.py000066400000000000000000000050561266051671100207270ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring Mumble Server """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ import logging from .forms import MumbleForm from plinth import actions from plinth import package from plinth.modules import mumble logger = logging.getLogger(__name__) def on_install(): """Notify that the service is now enabled.""" mumble.service.notify_enabled(None, True) @package.required(['mumble-server'], on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = MumbleForm(request.POST, prefix='mumble') # pylint: disable=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = MumbleForm(initial=status, prefix='mumble') else: form = MumbleForm(initial=status, prefix='mumble') return TemplateResponse(request, 'mumble.html', {'title': _('Voice Chat (Mumble)'), 'status': status, 'form': form}) def get_status(): """Get the current settings from server.""" return {'enabled': mumble.is_enabled(), 'is_running': mumble.is_running()} def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('mumble', [sub_command]) mumble.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/names/000077500000000000000000000000001266051671100170345ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/names/__init__.py000066400000000000000000000067651266051671100211630ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure name services """ from django.utils.translation import ugettext_lazy as _ import logging from plinth import cfg from plinth.signals import domain_added, domain_removed SERVICES = ( ('http', _('HTTP'), 80), ('https', _('HTTPS'), 443), ('ssh', _('SSH'), 22), ) depends = ['plinth.modules.system'] domain_types = {} domains = {} logger = logging.getLogger(__name__) def init(): """Initialize the names module.""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Name Services'), 'glyphicon-tag', 'names:index', 19) domain_added.connect(on_domain_added) domain_removed.connect(on_domain_removed) def on_domain_added(sender, domain_type, name='', description='', services=None, **kwargs): """Add domain to global list.""" if not domain_type: return domain_types[domain_type] = description if not name: return if not services: services = [] if domain_type not in domains: # new domain_type domains[domain_type] = {} domains[domain_type][name] = services logger.info('Added domain %s of type %s with services %s', name, domain_type, str(services)) def on_domain_removed(sender, domain_type, name='', **kwargs): """Remove domain from global list.""" if domain_type in domains: if name == '': # remove all domains of this type domains[domain_type] = {} logger.info('Removed all domains of type %s', domain_type) elif name in domains[domain_type]: del domains[domain_type][name] logger.info('Removed domain %s of type %s', name, domain_type) def get_domain_types(): """Get list of domain_types.""" return list(domain_types.keys()) def get_description(domain_type): """Get description of a domain_type, if available.""" if domain_type in domain_types: return domain_types[domain_type] else: return domain_type def get_domain(domain_type): """ Get domain of type domain_type. This function is meant for use with single-domain domain_types. If there is more than one domain, any one of the domains may be returned. """ if domain_type in domains and len(domains[domain_type]) > 0: return list(domains[domain_type].keys())[0] else: return None def get_enabled_services(domain_type, domain): """Get list of enabled services for a domain.""" try: return domains[domain_type][domain] except KeyError: # domain_type or domain not registered return [] def get_services_status(domain_type, domain): """Get list of whether each service is enabled for a domain.""" enabled = get_enabled_services(domain_type, domain) return [service[0] in enabled for service in SERVICES] Plinth-0.8.1/plinth/modules/names/templates/000077500000000000000000000000001266051671100210325ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/names/templates/names.html000066400000000000000000000031541266051671100230260ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {{ title }}

    {% for service in status.services %} {% endfor %} {% for name_service in status.name_services %} {% for service in name_service.services_enabled %} {% endfor %} {% endfor %}
    {{ service }}
    {{ name_service.type }}
    {{ name_service.name }}
    {% if service %} {% trans "Enabled" %} {% else %} {% trans "Disabled" %} {% endif %}
    {% endblock %} Plinth-0.8.1/plinth/modules/names/tests/000077500000000000000000000000001266051671100201765ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/names/tests/__init__.py000066400000000000000000000000001266051671100222750ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/names/tests/test_names.py000066400000000000000000000073651266051671100227250ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Tests for names module. """ import unittest from .. import domain_types, domains from .. import on_domain_added, on_domain_removed from .. import get_domain_types, get_description from .. import get_domain, get_enabled_services, get_services_status class TestNames(unittest.TestCase): """Test cases for testing the names module.""" def test_on_domain_added(self): """Test adding a domain to the global list.""" on_domain_added('', '') self.assertNotIn('', domain_types) self.assertNotIn('', domains) on_domain_added('', 'hiddenservice', 'ddddd.onion') on_domain_added('', 'hiddenservice', 'eeeee.onion') self.assertIn('ddddd.onion', domains['hiddenservice']) self.assertIn('eeeee.onion', domains['hiddenservice']) def test_on_domain_removed(self): """Test removing a domain from the global list.""" on_domain_added('', 'domainname', 'fffff') on_domain_removed('', 'domainname', 'fffff') self.assertNotIn('fffff', domains['domainname']) on_domain_added('', 'pagekite', 'ggggg.pagekite.me') on_domain_added('', 'pagekite', 'hhhhh.pagekite.me') on_domain_removed('', 'pagekite') self.assertNotIn('ggggg.pagekite.me', domains['pagekite']) self.assertNotIn('hhhhh.pagekite.me', domains['pagekite']) # try to remove things that don't exist on_domain_removed('', '') on_domain_removed('', 'domainname', 'iiiii') def test_get_domain_types(self): """Test getting domain types.""" on_domain_added('', 'domainname') self.assertIn('domainname', get_domain_types()) def test_get_description(self): """Test getting domain type description.""" on_domain_added('', 'pagekite', '', 'Pagekite') self.assertEqual(get_description('pagekite'), 'Pagekite') self.assertEqual('asdfasdf', get_description('asdfasdf')) def test_get_domain(self): """Test getting a domain of domain_type.""" on_domain_added('', 'hiddenservice', 'aaaaa.onion') self.assertEqual(get_domain('hiddenservice'), 'aaaaa.onion') self.assertEqual(None, get_domain('abcdef')) on_domain_removed('', 'hiddenservice') self.assertEqual(None, get_domain('hiddenservice')) def test_get_enabled_services(self): """Test getting enabled services for a domain.""" on_domain_added('', 'domainname', 'bbbbb', '', ['http', 'https', 'ssh']) self.assertEqual(get_enabled_services('domainname', 'bbbbb'), ['http', 'https', 'ssh']) self.assertEqual(get_enabled_services('xxxxx', 'yyyyy'), []) self.assertEqual(get_enabled_services('domainname', 'zzzzz'), []) def test_get_services_status(self): """Test getting whether each service is enabled for a domain.""" on_domain_added('', 'pagekite', 'ccccc.pagekite.me', '', ['http', 'https']) self.assertEqual(get_services_status('pagekite', 'ccccc.pagekite.me'), [True, True, False]) Plinth-0.8.1/plinth/modules/names/urls.py000066400000000000000000000015371266051671100204010ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the name services module """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^sys/names/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/names/views.py000066400000000000000000000032431266051671100205450ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for name services """ from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from . import SERVICES, get_domain_types, get_description from . import get_domain, get_services_status def index(request): """Serve name services page.""" status = get_status() return TemplateResponse(request, 'names.html', {'title': _('Name Services'), 'status': status}) def get_status(): """Get configured services per name.""" name_services = [] for domain_type in sorted(get_domain_types()): domain = get_domain(domain_type) name_services.append({ 'type': get_description(domain_type), 'name': domain or _('Not Available'), 'services_enabled': get_services_status(domain_type, domain), }) return { 'services': [service[1] for service in SERVICES], 'name_services': name_services, } Plinth-0.8.1/plinth/modules/networks/000077500000000000000000000000001266051671100176055ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/networks/__init__.py000066400000000000000000000062511266051671100217220ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to interface with network-manager """ from django.utils.translation import ugettext as _ from logging import Logger import subprocess from . import networks from .networks import init from plinth import action_utils from plinth import network __all__ = ['networks', 'init'] depends = ['plinth.modules.system'] logger = Logger(__name__) def diagnose(): """Run diagnostics and return the results.""" results = [] interfaces = _get_shared_interfaces() addresses = _get_interface_addresses(interfaces) for address in addresses: results.append(action_utils.diagnose_port_listening(53, 'tcp', address)) results.append(action_utils.diagnose_port_listening(53, 'udp', address)) results.append(_diagnose_dnssec('4')) results.append(_diagnose_dnssec('6')) return results def _get_shared_interfaces(): """Get active network interfaces in shared mode.""" shared_interfaces = [] for connection in network.get_connection_list(): if not connection['is_active']: continue connection_uuid = connection['uuid'] connection = network.get_connection(connection_uuid) settings_ipv4 = connection.get_setting_ip4_config() if settings_ipv4.get_method() == 'shared': settings_connection = connection.get_setting_connection() interface = settings_connection.get_interface_name() if interface: shared_interfaces.append(interface) return shared_interfaces def _get_interface_addresses(interfaces): """Get the IPv4 addresses for the given interfaces.""" output = subprocess.check_output(['ip', '-o', 'addr']) lines = output.decode().splitlines() addresses = [] for line in lines: parts = line.split() if parts[1] in interfaces and parts[2] == 'inet': addresses.append(parts[3].split('/')[0]) return addresses def _diagnose_dnssec(kind='4'): """Perform diagnostic on whether the system is using DNSSEC. Kind is either '4' or '6' for IPv4 and IPv6 respectively. """ kind_option = {'4': '-4', '6': '-6'}[kind] result = 'failed' try: output = subprocess.check_output( ['dig', kind_option, '+time=2', '+tries=1', 'test.dnssec-or-not.net', 'TXT']) if 'Yes, you are using DNSSEC' in output.decode(): result = 'passed' except subprocess.CalledProcessError: pass return [_('Using DNSSEC on IPv{kind}').format(kind=kind), result] Plinth-0.8.1/plinth/modules/networks/forms.py000066400000000000000000000177271266051671100213230ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django import forms from django.core import validators from django.utils.translation import ugettext_lazy as _ from plinth import network from plinth.utils import import_from_gi nm = import_from_gi('NM', '1.0') class ConnectionTypeSelectForm(forms.Form): """Form to select type for new connection.""" connection_type = forms.ChoiceField( label=_('Connection Type'), choices=[(key, value) for key, value in network.CONNECTION_TYPE_NAMES.items()]) class ConnectionForm(forms.Form): """Base form to create/edit a connection.""" name = forms.CharField(label=_('Connection Name')) interface = forms.ChoiceField( label=_('Physical Interface'), choices=(), help_text=_('The network device that this connection should be bound ' 'to.')) zone = forms.ChoiceField( label=_('Firewall Zone'), help_text=_('The firewall zone will control which services are \ available over this interfaces. Select Internal only for trusted networks.'), choices=[('external', 'External'), ('internal', 'Internal')]) ipv4_method = forms.ChoiceField( label=_('IPv4 Addressing Method'), help_text=_('"Shared" method will start a DHCP server and "Automatic" ' 'method will acquire configuration from a DHCP server.'), choices=[('auto', 'Automatic (DHCP)'), ('shared', 'Shared'), ('manual', 'Manual')]) ipv4_address = forms.CharField( label=_('Address'), validators=[validators.validate_ipv4_address], required=False) ipv4_netmask = forms.CharField( label=_('Netmask'), help_text=_('Optional value. If left blank, a default netmask ' 'based on the address will be used.'), validators=[validators.validate_ipv4_address], required=False) ipv4_gateway = forms.CharField( label=_('Gateway'), help_text=_('Optional value.'), validators=[validators.validate_ipv4_address], required=False) ipv4_dns = forms.CharField( label=_('DNS Server'), help_text=_('Optional value. If this value is given and IPv4 ' 'addressing method is "Automatic", the DNS Servers ' 'provided by a DHCP server will be ignored.'), validators=[validators.validate_ipv4_address], required=False) ipv4_second_dns = forms.CharField( label=_('Second DNS Server'), help_text=_('Optional value. If this value is given and IPv4 ' 'Addressing Method is "Automatic", the DNS Servers ' 'provided by a DHCP server will be ignored.'), validators=[validators.validate_ipv4_address], required=False) @staticmethod def _get_interface_choices(device_type): """Return a list of choices for a given device type.""" interfaces = network.get_interface_list(device_type) choices = [('', _('-- select --'))] for interface, mac in interfaces.items(): display_string = '{interface} ({mac})'.format(interface=interface, mac=mac) choices.append((interface, display_string)) return choices def get_settings(self): """Return settings dict from cleaned data.""" settings = {} settings['common'] = { 'name': self.cleaned_data['name'], 'interface': self.cleaned_data['interface'], 'zone': self.cleaned_data['zone'], } settings['ipv4'] = self.get_ipv4_settings() return settings def get_ipv4_settings(self): """Return IPv4 dict from cleaned data.""" ipv4 = { 'method': self.cleaned_data['ipv4_method'], 'address': self.cleaned_data['ipv4_address'], 'netmask': self.cleaned_data['ipv4_netmask'], 'gateway': self.cleaned_data['ipv4_gateway'], 'dns': self.cleaned_data['ipv4_dns'], 'second_dns': self.cleaned_data['ipv4_second_dns'], } return ipv4 class EthernetForm(ConnectionForm): """Form to create/edit a ethernet connection.""" def __init__(self, *args, **kwargs): """Initialize the form, populate interface choices.""" super(EthernetForm, self).__init__(*args, **kwargs) choices = self._get_interface_choices(nm.DeviceType.ETHERNET) self.fields['interface'].choices = choices def get_settings(self): """Return settings dict from cleaned data.""" settings = super().get_settings() settings['common']['type'] = '802-3-ethernet' return settings class PPPoEForm(EthernetForm): """Form to create a new PPPoE connection.""" ipv4_method = None ipv4_address = None ipv4_netmask = None ipv4_gateway = None ipv4_dns = None ipv4_second_dns = None username = forms.CharField(label=_('Username')) password = forms.CharField(label=_('Password'), widget=forms.PasswordInput(render_value=True)) show_password = forms.BooleanField(label=_('Show password'), required=False) def get_settings(self): """Return setting dict from cleaned data.""" settings = super().get_settings() settings['common']['type'] = 'pppoe' settings['pppoe'] = { 'username': self.cleaned_data['username'], 'password': self.cleaned_data['password'], } return settings def get_ipv4_settings(self): """Return IPv4 settings from cleaned data.""" return None class WifiForm(ConnectionForm): """Form to create/edit a Wi-Fi connection.""" field_order = ['name', 'interface', 'zone', 'ssid', 'mode', 'auth_mode', 'passphrase', 'ipv4_method', 'ipv4_address', 'ipv4_netmask', 'ipv4_gateway', 'ipv4_dns', 'ipv4_second_dns'] ssid = forms.CharField( label=_('SSID'), help_text=_('The visible name of the network.')) mode = forms.ChoiceField( label=_('Mode'), choices=[('infrastructure', 'Infrastructure'), ('ap', 'Access Point'), ('adhoc', 'Ad-hoc')]) auth_mode = forms.ChoiceField( label=_('Authentication Mode'), help_text=_('Select WPA if the wireless network is secured and \ requires clients to have the password to connect.'), choices=[('wpa', 'WPA'), ('open', 'Open')]) passphrase = forms.CharField( label=_('Passphrase'), validators=[validators.MinLengthValidator(8)], required=False) def __init__(self, *args, **kwargs): """Initialize the form, populate interface choices.""" super(WifiForm, self).__init__(*args, **kwargs) choices = self._get_interface_choices(nm.DeviceType.WIFI) self.fields['interface'].choices = choices def get_settings(self): """Return setting dict from cleaned data.""" settings = super().get_settings() settings['common']['type'] = '802-11-wireless' settings['wireless'] = { 'ssid': self.cleaned_data['ssid'], 'mode': self.cleaned_data['mode'], 'auth_mode': self.cleaned_data['auth_mode'], 'passphrase': self.cleaned_data['passphrase'], } return settings Plinth-0.8.1/plinth/modules/networks/networks.py000066400000000000000000000336541266051671100220460ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django.contrib import messages from django.core.urlresolvers import reverse_lazy from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.translation import ugettext as _, ugettext_lazy from django.views.decorators.http import require_POST from logging import Logger from .forms import (ConnectionTypeSelectForm, EthernetForm, PPPoEForm, WifiForm) from plinth import cfg from plinth import network from plinth import package logger = Logger(__name__) subsubmenu = [{'url': reverse_lazy('networks:index'), 'text': ugettext_lazy('Network Connections')}, {'url': reverse_lazy('networks:scan'), 'text': ugettext_lazy('Nearby Wi-Fi Networks')}, {'url': reverse_lazy('networks:add'), 'text': ugettext_lazy('Add Connection')}] def init(): """Initialize the Networks module.""" menu = cfg.main_menu.get('system:index') menu.add_urlname(ugettext_lazy('Networks'), 'glyphicon-signal', 'networks:index', 18) @package.required(['network-manager']) def index(request): """Show connection list.""" connections = network.get_connection_list() return TemplateResponse(request, 'connections_list.html', {'title': _('Network Connections'), 'subsubmenu': subsubmenu, 'connections': connections}) def show(request, uuid): """Serve connection information.""" try: connection = network.get_connection(uuid) except network.ConnectionNotFound: messages.error(request, _('Cannot show connection: ' 'Connection not found.')) return redirect(reverse_lazy('networks:index')) # Connection status connection_status = network.get_status_from_connection(connection) # Active connection status try: active_connection = network.get_active_connection(uuid) active_connection_status = \ network.get_status_from_active_connection(active_connection) except network.ConnectionNotFound: active_connection_status = {} active_connection = None # Device status device = None if active_connection and active_connection.get_devices(): device = active_connection.get_devices()[0] else: interface_name = connection_status['interface_name'] if interface_name: device = network.get_device_by_interface_name(interface_name) device_status = network.get_status_from_device(device) # Access point status access_point_status = None if connection_status['type'] == '802-11-wireless': access_point_status = network.get_status_from_wifi_access_point( device, connection_status['wireless']['ssid']) return TemplateResponse(request, 'connection_show.html', {'title': _('Show Connection information'), 'subsubmenu': subsubmenu, 'connection': connection_status, 'active_connection': active_connection_status, 'device': device_status, 'access_point': access_point_status}) def edit(request, uuid): """Serve connection editing form.""" try: connection = network.get_connection(uuid) except network.ConnectionNotFound: messages.error(request, _('Cannot edit connection: ' 'Connection not found.')) return redirect(reverse_lazy('networks:index')) if connection.get_connection_type() not in network.CONNECTION_TYPE_NAMES: messages.error(request, _('This type of connection is not yet understood.')) return redirect(reverse_lazy('networks:index')) form = None form_data = {'name': connection.get_id()} if request.method == 'POST': if connection.get_connection_type() == '802-11-wireless': form = WifiForm(request.POST) elif connection.get_connection_type() == '802-3-ethernet': form = EthernetForm(request.POST) elif connection.get_connection_type() == 'pppoe': form = PPPoEForm(request.POST) if form.is_valid(): network.edit_connection(connection, form.get_settings()) return redirect(reverse_lazy('networks:index')) else: return TemplateResponse(request, 'connections_edit.html', {'title': _('Edit Connection'), 'subsubmenu': subsubmenu, 'form': form}) else: settings_connection = connection.get_setting_connection() form_data['interface'] = connection.get_interface_name() try: form_data['zone'] = settings_connection.get_zone() except KeyError: form_data['zone'] = 'external' if settings_connection.get_connection_type() != 'pppoe': settings_ipv4 = connection.get_setting_ip4_config() form_data['ipv4_method'] = settings_ipv4.get_method() address, netmask = network.get_first_ip_address_from_connection( connection) gateway = settings_ipv4.get_gateway() dns = settings_ipv4.get_dns(0) second_dns = settings_ipv4.get_dns(1) if address: form_data['ipv4_address'] = address if netmask: form_data['ipv4_netmask'] = netmask if gateway: form_data['ipv4_gateway'] = gateway if dns: form_data['ipv4_dns'] = dns if second_dns: form_data['ipv4_second_dns'] = second_dns if settings_connection.get_connection_type() == '802-11-wireless': settings_wireless = connection.get_setting_wireless() form_data['ssid'] = settings_wireless.get_ssid().get_data() form_data['mode'] = settings_wireless.get_mode() try: wifi_sec = connection.get_setting_wireless_security() if wifi_sec: if wifi_sec.get_key_mgmt() == 'wpa-psk': form_data['auth_mode'] = 'wpa' secrets = connection.get_secrets( '802-11-wireless-security') psk = secrets['802-11-wireless-security']['psk'] form_data['passphrase'] = psk else: form_data['auth_mode'] = 'open' except KeyError: form_data['auth_mode'] = 'open' form = WifiForm(form_data) elif settings_connection.get_connection_type() == '802-3-ethernet': form = EthernetForm(form_data) elif settings_connection.get_connection_type() == 'pppoe': settings_pppoe = connection.get_setting_pppoe() form_data['username'] = settings_pppoe.get_username() secrets = connection.get_secrets('pppoe') form_data['password'] = secrets['pppoe']['password'] form = PPPoEForm(form_data) return TemplateResponse(request, 'connections_edit.html', {'title': _('Edit Connection'), 'subsubmenu': subsubmenu, 'form': form}) @require_POST def activate(request, uuid): """Activate the connection.""" try: connection = network.activate_connection(uuid) name = connection.get_id() messages.success(request, _('Activated connection {name}.') .format(name=name)) except network.ConnectionNotFound: messages.error(request, _('Failed to activate connection: ' 'Connection not found.')) except network.DeviceNotFound as exception: name = exception.args[0].get_id() messages.error(request, _('Failed to activate connection {name}: ' 'No suitable device is available.') .format(name=name)) return redirect(reverse_lazy('networks:index')) @require_POST def deactivate(request, uuid): """Deactivate the connection.""" try: active_connection = network.deactivate_connection(uuid) name = active_connection.get_id() messages.success(request, _('Deactivated connection {name}.') .format(name=name)) except network.ConnectionNotFound: messages.error(request, _('Failed to de-activate connection: ' 'Connection not found.')) return redirect(reverse_lazy('networks:index')) def scan(request): """Show a list of nearby visible Wi-Fi access points.""" access_points = network.wifi_scan() return TemplateResponse(request, 'wifi_scan.html', {'title': _('Nearby Wi-Fi Networks'), 'subsubmenu': subsubmenu, 'access_points': access_points}) def add(request): """Serve the connection type selection form.""" form = None if request.method == 'POST': form = ConnectionTypeSelectForm(request.POST) if form.is_valid(): connection_type = form.cleaned_data['connection_type'] if connection_type == '802-3-ethernet': return redirect(reverse_lazy('networks:add_ethernet')) elif connection_type == '802-11-wireless': return redirect(reverse_lazy('networks:add_wifi')) elif connection_type == 'pppoe': return redirect(reverse_lazy('networks:add_pppoe')) else: form = ConnectionTypeSelectForm() return TemplateResponse(request, 'connections_type_select.html', {'title': _('Add Connection'), 'subsubmenu': subsubmenu, 'form': form}) def add_ethernet(request): """Serve ethernet connection create form.""" form = None if request.method == 'POST': form = EthernetForm(request.POST) if form.is_valid(): network.add_connection(form.get_settings()) return redirect(reverse_lazy('networks:index')) else: form = EthernetForm() return TemplateResponse(request, 'connections_create.html', {'title': _('Adding New Ethernet Connection'), 'subsubmenu': subsubmenu, 'form': form}) def add_pppoe(request): """Serve pppoe connection create form.""" form = None if request.method == 'POST': form = PPPoEForm(request.POST) if form.is_valid(): network.add_connection(form.get_settings()) return redirect(reverse_lazy('networks:index')) else: form = PPPoEForm() return TemplateResponse(request, 'connections_create.html', {'title': _('Adding New PPPoE Connection'), 'subsubmenu': subsubmenu, 'form': form}) def add_wifi(request, ssid=None, interface_name=None): """Serve wifi connection create form.""" form = None form_data = None if ssid: device = network.get_device_by_interface_name(interface_name) form_data = {'name': ssid, 'interface': interface_name if device else None, 'zone': 'external', 'ssid': ssid, 'mode': 'infrastructure', 'auth_mode': 'wpa', 'ipv4_method': 'auto'} if request.method == 'POST': form = WifiForm(request.POST) if form.is_valid(): network.add_connection(form.get_settings()) return redirect(reverse_lazy('networks:index')) else: if form_data: form = WifiForm(form_data) else: form = WifiForm() return TemplateResponse(request, 'connections_create.html', {'title': _('Adding New Wi-Fi Connection'), 'subsubmenu': subsubmenu, 'form': form}) def delete(request, uuid): """Handle deleting connections, showing a confirmation dialog first. On GET, display a confirmation page. On POST, delete the connection. """ if request.method == 'POST': try: name = network.delete_connection(uuid) messages.success(request, _('Connection {name} deleted.') .format(name=name)) except network.ConnectionNotFound: messages.error(request, _('Failed to delete connection: ' 'Connection not found.')) return redirect(reverse_lazy('networks:index')) try: connection = network.get_connection(uuid) name = connection.get_id() except network.ConnectionNotFound: messages.error(request, _('Failed to delete connection: ' 'Connection not found.')) return redirect(reverse_lazy('networks:index')) return TemplateResponse(request, 'connections_delete.html', {'title': _('Delete Connection'), 'subsubmenu': subsubmenu, 'name': name}) Plinth-0.8.1/plinth/modules/networks/templates/000077500000000000000000000000001266051671100216035ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/networks/templates/connection_show.html000066400000000000000000000261141266051671100256740ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # # ToDo: if connection is disabled, no information are visible anymore (Bug) {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% endblock %} {% block content %}
    {% trans "Edit" %} {% if active_connection %}
    {% csrf_token %}
    {% else %}
    {% csrf_token %}
    {% endif %} {% trans "Delete" %}

    {% trans "Connection" %}

    {% if connection.primary %}
    {% trans "Primary connection" %}
    {% trans "yes" %}
    {% endif %}
    {% trans "Name" %}
    {{ connection.id }}
    {% if device %}

    {% trans "Device" %}

    {% trans "State" %} {{ device.state }}
    {% if device.state_reason != 'none' %}
    {% trans "State reason" %} {{ device.state_reason }}
    {% endif %}
    {% trans "Type" %} {{ device.type }}
    {% trans "MAC address" %} {{ device.hw_address }}
    {% trans "Interface" %} {{ device.interface_name }}
    {% trans "Description" %} {{ device.description }}
    {% endif %}

    {% trans "Physical Link" %}

    {% if device.ethernet %}
    {% trans "Link state" %}
    {% if device.ethernet.carrier %} {% trans "cable is connected" %} {% else %} {% trans "please check cable" %} {% endif %}
    {% trans "Speed" %} {% blocktrans trimmed with ethernet_speed=device.ethernet.speed %} {{ ethernet_speed }} Mbit/s {% endblocktrans %}
    {% endif %} {% if connection.type == "802-11-wireless" %}
    {% trans "SSID" %} {{ connection.wireless.ssid }}
    {% if device %}
    {% trans "Speed" %} {% blocktrans trimmed with wireless_bitrate=device.wireless.bitrate %} {{ wireless_bitrate }} Mbit/s {% endblocktrans %}
    {% trans "Mode" %} {{ device.wireless.mode }}
    {% endif %} {% if access_point.channel %}
    {% trans "Signal strength" %}
    {{ access_point.strength }}%
    {% endif %} {% if access_point.channel %}
    {% trans "Channel" %} {{ access_point.channel }}
    {% endif %} {% endif %}
    {% if active_connection %}

    {% trans "IPv4" %}

    {% if connection.ipv4.method %}
    {% trans "Method" %} {{ connection.ipv4.method }}
    {% endif %} {% for address in device.ip4.addresses %}
    {% trans "IP address" %} {{ address.address }}/{{ address.prefix }}
    {% endfor %} {% if device.ip4.gateway %}
    {% trans "Gateway" %} {{ device.ip4.gateway }}
    {% endif %} {% for server in device.ip4.nameservers %}
    {% trans "DNS server" %} {{ server }}
    {% endfor %} {% if active_connection.ip4.default %}
    {% trans "Default" %} {% trans "yes" %}
    {% endif %}

    {% trans "IPv6" %}

    {% if connection.ipv6.method %}
    {% trans "Method" %} {{ connection.ipv6.method }}
    {% endif %} {% for address in device.ip6.addresses %}
    {% trans "IP address" %} {{ address.address }}/{{ address.prefix }}
    {% endfor %} {% if device.ip6.gateway %}
    {% trans "Gateway" %} {{ device.ip6.gateway }}
    {% endif %} {% for server in device.ip6.nameservers %}
    {% trans "DNS server" %} {{ server }}
    {% endfor %} {% if active_connection.ip6.default %}
    {% trans "Default" %} {% trans "yes" %}
    {% endif %}
    {% else %}

    {% trans "Status" %}

    {% trans "This connection is not active." %}

    {% endif %}

    {% trans "Security" %}

    {% if connection.zone == "internal" %}
    {% trans "Firewall zone" %}
    {{ connection.zone }}
    {% blocktrans trimmed %} This interface should be connected to a local network/machine. If you connect this interface to a public network, services meant to be available only internally will become available externally. This is a security risk. {% endblocktrans %}
    {% elif connection.zone == "external" %}
    {% trans "Firewall zone" %}
    {{ connection.zone }}
    {% blocktrans trimmed %} This interface should receive your Internet connection. If you connect it to a local network/machine, many services meant to available only internally will not be available. {% endblocktrans %}
    {% else %}
    {% trans "Firewall zone" %}
    {{ connection.zone }}
    {% blocktrans trimmed %} This interface is not maintained by {{ box_name }}. Its security status is unknown to {{ box_name }}. Many {{ box_name }} services may not be available on this interface. It is recommended that you deactivate or delete this connection and re-configure it. {% endblocktrans %}
    {% endif %}
    {% endblock %} Plinth-0.8.1/plinth/modules/networks/templates/connections_add.html000066400000000000000000000022461266051671100256270ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/networks/templates/connections_create.html000066400000000000000000000053011266051671100263350ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/networks/templates/connections_delete.html000066400000000000000000000024031266051671100263340ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "Delete Connection" %}

    {% blocktrans trimmed %} Delete connection {{ name }} permanently? {% endblocktrans %}

    {% csrf_token %} {% trans "Cancel" %}
    {% endblock %} Plinth-0.8.1/plinth/modules/networks/templates/connections_diagram.html000066400000000000000000000113651266051671100265050ustar00rootroot00000000000000{% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load static %} {% load i18n %}
    {% trans
    {% trans

    {% trans "External" %}

    {% for connection in connections %} {% if connection.interface_name and connection.is_active and connection.zone == 'external' %} {% if connection.type == '802-3-ethernet' %} {% trans {% elif connection.type == '802-11-wireless' %} {% trans {% endif %} {{ connection.name }} ({{ connection.interface_name }}) {% endif %} {% endfor %}
    {{ box_name }}

    {% trans "Internal" %}

    {% for connection in connections %} {% if connection.interface_name and connection.is_active and connection.zone == 'internal' %}

    {% if connection.type == '802-3-ethernet' %} {% trans {% elif connection.type == '802-11-wireless' %} {% trans {% endif %} {{ connection.name }} ({{ connection.interface_name }})

    {% endif %} {% endfor %}
    {% trans
    {% trans
    Plinth-0.8.1/plinth/modules/networks/templates/connections_edit.html000066400000000000000000000052771266051671100260330ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/networks/templates/connections_list.html000066400000000000000000000066311266051671100260540ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% endblock %} {% block content %}
    {% for connection in connections %}
    {% if connection.is_active %}
    {% csrf_token %}
    {% else %}
    {% csrf_token %}
    {% endif %} {% if connection.is_active %} {% trans "Active" %} {% else %} {% trans "Inactive" %} {% endif %} {{ connection.name }} {{ connection.type_name }}
    {% endfor %}
    {% include "connections_diagram.html" %} {% include "diagnostics_button.html" with module="networks" %}
    {% endblock %} Plinth-0.8.1/plinth/modules/networks/templates/connections_type_select.html000066400000000000000000000022461266051671100274170ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/networks/templates/wifi_scan.html000066400000000000000000000027471266051671100244450ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
    {% for access_point in access_points %}
    {% if access_point.ssid %} {{ access_point.ssid }} {% else %} -- {% endif %} {{ access_point.strength }}%
    {% endfor %}
    {% endblock %} Plinth-0.8.1/plinth/modules/networks/tests/000077500000000000000000000000001266051671100207475ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/networks/tests/__init__.py000066400000000000000000000000001266051671100230460ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/networks/urls.py000066400000000000000000000033051266051671100211450ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Network module """ from django.conf.urls import url from . import networks as views urlpatterns = [ url(r'^sys/networks/$', views.index, name='index'), url(r'^sys/networks/(?P[\w.@+-]+)/show/$', views.show, name='show'), url(r'^sys/networks/(?P[\w.@+-]+)/edit/$', views.edit, name='edit'), url(r'^sys/networks/(?P[\w.@+-]+)/activate/$', views.activate, name='activate'), url(r'^sys/networks/(?P[\w.@+-]+)/deactivate/$', views.deactivate, name='deactivate'), url(r'^sys/networks/scan/$', views.scan, name='scan'), url(r'^sys/networks/add/$', views.add, name='add'), url(r'^sys/networks/add/ethernet/$', views.add_ethernet, name='add_ethernet'), url(r'^sys/networks/add/pppoe/$', views.add_pppoe, name='add_pppoe'), url(r'^sys/networks/add/wifi/(?:(?P[^/]+)/(?P[^/]+)/)?$', views.add_wifi, name='add_wifi'), url(r'^sys/networks/(?P[\w.@+-]+)/delete/$', views.delete, name='delete'), ] Plinth-0.8.1/plinth/modules/openvpn/000077500000000000000000000000001266051671100174165ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/openvpn/__init__.py000066400000000000000000000036231266051671100215330ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure OpenVPN server. """ from django.utils.translation import ugettext_lazy as _ from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] service = None def init(): """Intialize the OpenVPN module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Virtual Private Network (OpenVPN)'), 'glyphicon-lock', 'openvpn:index', 850) global service service = service_module.Service( 'openvpn', _('OpenVPN'), ['openvpn'], is_external=True, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return action_utils.service_is_enabled('openvpn@freedombox') def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('openvpn@freedombox') def is_setup(): """Return whether the service is running.""" return actions.superuser_run('openvpn', ['is-setup']).strip() == 'true' def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(1194, 'udp4')) return results Plinth-0.8.1/plinth/modules/openvpn/forms.py000066400000000000000000000017701266051671100211230ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring OpenVPN. """ from django import forms from django.utils.translation import ugettext_lazy as _ class OpenVpnForm(forms.Form): # pylint: disable=W0232 """OpenVPN configuration form.""" enabled = forms.BooleanField( label=_('Enable OpenVPN server'), required=False) Plinth-0.8.1/plinth/modules/openvpn/templates/000077500000000000000000000000001266051671100214145ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/openvpn/templates/openvpn.html000066400000000000000000000103311266051671100237650ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% if status.setup_running %} {% endif %} {% endblock %} {% block content %}

    {% trans "Virtual Private Network (OpenVPN)" %}

    {% blocktrans trimmed %} Virtual Private Network (VPN) is a technique for securely connecting two devices in order to access resources of a private network. While you are away from home, you can connect to your {{ box_name }} in order to join your home network and access private/internal services provided by {{ box_name }}. You can also access the rest of the Internet via {{ box_name }} for added security and anonymity. {% endblocktrans %}

    {% if status.is_setup %}

    {% trans "Profile" %}

    {% blocktrans trimmed %} To connect to {{ box_name }}'s VPN, you need to download a profile and feed it to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are available for most platforms. See documentation on recommended clients and instructions on how to configure them. {% endblocktrans %}

    {% blocktrans trimmed %} Profile is specific to each user of {{ box_name }}. Keep it a secret. {% endblocktrans %}

    {% csrf_token %}
    {% endif %}

    {% trans "Status" %}

    {% if not status.is_setup and not status.setup_running %}

    {% blocktrans trimmed %} OpenVPN has not yet been setup. Performing a secure setup takes a very long time. Depending on how fast your {{ box_name }} is, it may even take hours. If the setup is interrupted, you may start it again. {% endblocktrans %}

    {% csrf_token %}
    {% endif %} {% if not status.is_setup and status.setup_running %}

    {% trans "OpenVPN setup is running" %}

    {% blocktrans trimmed %} To perform a secure setup, this process takes a very long time. Depending on how fast your {{ box_name }} is, it may even take hours. If the setup is interrupted, you may start it again. {% endblocktrans %}

    {% endif %} {% if status.is_setup %}

    {% if status.is_running %} {% trans "OpenVPN server is running" %} {% else %} {% trans "OpenVPN server is not running" %} {% endif %}

    {% include "diagnostics_button.html" with module="openvpn" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endif %} {% endblock %} Plinth-0.8.1/plinth/modules/openvpn/tests/000077500000000000000000000000001266051671100205605ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/openvpn/tests/__init__.py000066400000000000000000000000001266051671100226570ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/openvpn/urls.py000066400000000000000000000017371266051671100207650ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the OpenVPN module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/openvpn/$', views.index, name='index'), url(r'^apps/openvpn/setup/$', views.setup, name='setup'), url(r'^apps/openvpn/profile/$', views.profile, name='profile'), ] Plinth-0.8.1/plinth/modules/openvpn/views.py000066400000000000000000000103051266051671100211240ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring OpenVPN server. """ from django.contrib import messages from django.http import HttpResponse from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from django.views.decorators.http import require_POST import logging from .forms import OpenVpnForm from plinth import actions from plinth import package from plinth.modules import openvpn from plinth.modules.config import config logger = logging.getLogger(__name__) setup_process = None @package.required(['openvpn', 'easy-rsa']) def index(request): """Serve configuration page.""" status = get_status() if status['setup_running']: _collect_setup_result(request) form = None if request.method == 'POST': form = OpenVpnForm(request.POST, prefix='openvpn') # pylint: disable=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = OpenVpnForm(initial=status, prefix='openvpn') else: form = OpenVpnForm(initial=status, prefix='openvpn') return TemplateResponse(request, 'openvpn.html', {'title': _('Virtual Private Network (OpenVPN)'), 'status': status, 'form': form}) @require_POST def setup(request): """Start the setup process.""" openvpn.service.notify_enabled(None, True) global setup_process if not openvpn.is_setup() and not setup_process: setup_process = actions.superuser_run('openvpn', ['setup'], async=True) return redirect('openvpn:index') @require_POST def profile(request): """Provide the user's profile for download.""" username = request.user.username domainname = config.get_domainname() if not config.get_domainname(): domainname = config.get_hostname() profile_string = actions.superuser_run( 'openvpn', ['get-profile', username, domainname]) response = HttpResponse(profile_string, content_type='application/x-openvpn-profile') response['Content-Disposition'] = \ 'attachment; filename={username}.ovpn'.format(username=username) return response def get_status(): """Get the current settings from OpenVPN server.""" status = {'is_setup': openvpn.is_setup(), 'setup_running': False, 'enabled': openvpn.is_enabled(), 'is_running': openvpn.is_running()} status['setup_running'] = bool(setup_process) return status def _collect_setup_result(request): """Handle setup process is completion.""" global setup_process if not setup_process: return return_code = setup_process.poll() # Setup process is not complete yet if return_code == None: return if not return_code: messages.success(request, _('Setup completed.')) else: messages.info(request, _('Setup failed.')) setup_process = None def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('openvpn', [sub_command]) openvpn.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/owncloud/000077500000000000000000000000001266051671100175635ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/owncloud/__init__.py000066400000000000000000000021451266051671100216760ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure ownCloud """ from . import owncloud from .owncloud import init from plinth import action_utils __all__ = ['owncloud', 'init'] depends = ['plinth.modules.apps'] def diagnose(): """Run diagnostics and return the results.""" results = [] results.extend(action_utils.diagnose_url_on_all( 'https://{host}/owncloud', extra_options=['--no-check-certificate'])) return results Plinth-0.8.1/plinth/modules/owncloud/owncloud.py000066400000000000000000000065161266051671100217770ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring ownCloud. """ from django import forms from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext_lazy as _ from plinth import actions from plinth import cfg from plinth import package from plinth import service as service_module service = None class OwnCloudForm(forms.Form): # pylint: disable-msg=W0232 """ownCloud configuration form""" enabled = forms.BooleanField(label=_('Enable ownCloud'), required=False) def init(): """Initialize the ownCloud module""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('File Hosting (ownCloud)'), 'glyphicon-picture', 'owncloud:index', 700) status = get_status() global service # pylint: disable-msg=W0603 service = service_module.Service( 'owncloud', _('ownCloud'), ['http', 'https'], is_external=True, enabled=status['enabled']) def on_install(): """Tasks to run after package install.""" actions.superuser_run('owncloud-setup', ['enable']) service.notify_enabled(None, True) @package.required(['postgresql', 'php5-pgsql', 'owncloud', 'php-dropbox', 'php-google-api-php-client'], on_install=on_install) def index(request): """Serve the ownCloud configuration page""" status = get_status() form = None if request.method == 'POST': form = OwnCloudForm(request.POST, prefix='owncloud') # pylint: disable-msg=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = OwnCloudForm(initial=status, prefix='owncloud') else: form = OwnCloudForm(initial=status, prefix='owncloud') return TemplateResponse(request, 'owncloud.html', {'title': _('ownCloud'), 'form': form}) def get_status(): """Return the current status""" output = actions.run('owncloud-setup', ['status']) return {'enabled': 'enable' in output.split()} def _apply_changes(request, old_status, new_status): """Apply the changes""" if old_status['enabled'] == new_status['enabled']: messages.info(request, _('Setting unchanged')) return if new_status['enabled']: messages.success(request, _('ownCloud enabled')) option = 'enable' else: messages.success(request, _('ownCloud disabled')) option = 'noenable' actions.superuser_run('owncloud-setup', [option]) # Send a signal to other modules that the service is # enabled/disabled service.notify_enabled(None, new_status['enabled']) Plinth-0.8.1/plinth/modules/owncloud/templates/000077500000000000000000000000001266051671100215615ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/owncloud/templates/owncloud.html000066400000000000000000000037111266051671100243030ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "File Hosting (ownCloud)" %}

    {% blocktrans trimmed %} ownCloud gives you universal access to your files through a web interface or WebDAV. It also provides a platform to easily view & sync your contacts, calendars and bookmarks across all your devices and enables basic editing right on the web. Installation has minimal server requirements, doesn't need special permissions and is quick. ownCloud is extendable via a simple but powerful API for applications and plugins. {% endblocktrans %}

    {% blocktrans trimmed %} When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up the initial administration account for ownCloud. {% endblocktrans %}

    {% include "diagnostics_button.html" with module="owncloud" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/owncloud/tests/000077500000000000000000000000001266051671100207255ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/owncloud/tests/__init__.py000066400000000000000000000000001266051671100230240ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/owncloud/urls.py000066400000000000000000000015521266051671100211250ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the ownCloud module """ from django.conf.urls import url from . import owncloud as views urlpatterns = [ url(r'^apps/owncloud/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/pagekite/000077500000000000000000000000001266051671100175225ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/pagekite/__init__.py000066400000000000000000000023321266051671100216330ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure PageKite """ from django.utils.translation import ugettext_lazy as _ from plinth import cfg from . import utils __all__ = ['init'] depends = ['plinth.modules.apps', 'plinth.modules.names'] def init(): """Intialize the PageKite module""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Public Visibility (PageKite)'), 'glyphicon-flag', 'pagekite:index', 800) # Register kite name with Name Services module. utils.update_names_module(initial_registration=True) Plinth-0.8.1/plinth/modules/pagekite/forms.py000066400000000000000000000237331266051671100212320ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # import copy from django import forms from django.contrib import messages from django.core import validators from django.utils.translation import ugettext as _, ugettext_lazy import json import logging from plinth.errors import ActionError from . import utils LOGGER = logging.getLogger(__name__) class TrimmedCharField(forms.CharField): """Trim the contents of a CharField""" def clean(self, value): """Clean and validate the field value""" if value: value = value.strip() return super(TrimmedCharField, self).clean(value) class ConfigurationForm(forms.Form): """Configure PageKite credentials and frontend""" enabled = forms.BooleanField( label=ugettext_lazy('Enable PageKite'), required=False) server_domain = forms.CharField( label=ugettext_lazy('Server domain'), required=False, help_text=\ ugettext_lazy('Select your pagekite server. Set "pagekite.net" to use ' 'the default pagekite.net server.'), widget=forms.TextInput()) server_port = forms.IntegerField( label=ugettext_lazy('Server port'), required=False, help_text=ugettext_lazy('Port of your pagekite server (default: 80)')) kite_name = TrimmedCharField( label=ugettext_lazy('Kite name'), help_text=ugettext_lazy('Example: mybox.pagekite.me'), validators=[ validators.RegexValidator(r'^[\w-]{1,63}(\.[\w-]{1,63})*$', ugettext_lazy('Invalid kite name'))]) kite_secret = TrimmedCharField( label=ugettext_lazy('Kite secret'), help_text=\ ugettext_lazy('A secret associated with the kite or the default secret ' 'for your account if no secret is set on the kite.')) def save(self, request): """Save the form on submission after validation.""" old = self.initial new = self.cleaned_data LOGGER.info('New status is - %s', new) if old != new: config_changed = False if old['kite_name'] != new['kite_name'] or \ old['kite_secret'] != new['kite_secret']: utils.run(['set-kite', '--kite-name', new['kite_name']], input=new['kite_secret'].encode()) messages.success(request, _('Kite details set')) config_changed = True if old['server_domain'] != new['server_domain'] or \ old['server_port'] != new['server_port']: server = "%s:%s" % (new['server_domain'], new['server_port']) utils.run(['set-frontend', server]) messages.success(request, _('Pagekite server set')) config_changed = True if old['enabled'] != new['enabled']: if new['enabled']: utils.run(['start-and-enable']) messages.success(request, _('PageKite enabled')) else: utils.run(['stop-and-disable']) messages.success(request, _('PageKite disabled')) # Restart the service if the config was changed while the service # was running, so changes take effect immediately. elif config_changed and new['enabled']: utils.run(['restart']) # Update kite name registered with Name Services module. utils.update_names_module(enabled=new['enabled'], kite_name=new['kite_name']) class StandardServiceForm(forms.Form): """Creates a form out of PREDEFINED_SERVICES""" def __init__(self, *args, **kwargs): """Add the fields from PREDEFINED_SERVICES""" super(StandardServiceForm, self).__init__(*args, **kwargs) kite = utils.get_kite_details() for name, service in utils.PREDEFINED_SERVICES.items(): if name in ('http', 'https'): help_text = service['help_text'].format(kite['kite_name']) else: help_text = service['help_text'] self.fields[name] = forms.BooleanField(label=service['label'], help_text=help_text, required=False) def save(self, request): formdata = self.cleaned_data for service_name in utils.PREDEFINED_SERVICES.keys(): if self.initial[service_name] != formdata[service_name]: service = utils.PREDEFINED_SERVICES[service_name]['params'] service = json.dumps(service) if formdata[service_name]: utils.run(['add-service', '--service', service]) messages.success(request, _('Service enabled: {name}') .format(name=service_name)) else: utils.run(['remove-service', '--service', service]) messages.success(request, _('Service disabled: {name}') .format(name=service_name)) # Update kite services registered with Name Services module. utils.update_names_module() class BaseCustomServiceForm(forms.Form): """Basic form functionality to handle a custom service""" choices = [('http', 'http'), ('https', 'https'), ('raw', 'raw')] protocol = forms.ChoiceField( choices=choices, label=ugettext_lazy('protocol')) frontend_port = forms.IntegerField( min_value=0, max_value=65535, label=ugettext_lazy('external (frontend) port'), required=True) backend_port = forms.IntegerField( min_value=0, max_value=65535, label=ugettext_lazy('internal (freedombox) port')) subdomains = forms.BooleanField( label=ugettext_lazy('Enable Subdomains'), required=False) def convert_formdata_to_service(self, formdata): """Add information to make a service out of the form data""" # convert integers to str (to compare values with DEFAULT_SERVICES) for field in ('frontend_port', 'backend_port'): formdata[field] = str(formdata[field]) # set kitename and kitesecret if not already set if 'kitename' not in formdata: if 'subdomains' in formdata and formdata['subdomains']: formdata['kitename'] = "*.%s" % utils.KITE_NAME else: formdata['kitename'] = utils.KITE_NAME if 'secret' not in formdata: formdata['secret'] = utils.KITE_SECRET # merge protocol and frontend_port back to one entry (protocol) if 'frontend_port' in formdata: if formdata['frontend_port'] not in formdata['protocol']: formdata['protocol'] = "%s/%s" % (formdata['protocol'], formdata['frontend_port']) if 'backend_host' not in formdata: formdata['backend_host'] = utils.BACKEND_HOST return formdata class DeleteCustomServiceForm(BaseCustomServiceForm): def delete(self, request): service = self.convert_formdata_to_service(self.cleaned_data) utils.run(['remove-service', '--service', json.dumps(service)]) messages.success(request, _('Deleted custom service')) class AddCustomServiceForm(BaseCustomServiceForm): """Adds the save() method and validation to not add predefined services""" def matches_predefined_service(self, formdata): """Returns whether the user input matches a predefined service""" service = self.convert_formdata_to_service(formdata) match_found = False for predefined_service_obj in utils.PREDEFINED_SERVICES.values(): # manually add the port to compare predefined with custom services # that's due to the (sometimes) implicit port in the configuration predefined_service = copy.copy(predefined_service_obj['params']) if predefined_service['protocol'] == 'http': predefined_service['protocol'] = 'http/80' elif predefined_service['protocol'] == 'https': predefined_service['protocol'] = 'https/443' # The formdata service has additional keys, so we can't compare # the dicts directly. # instead look whether predefined_service is a subset of service if all(service[k] == v for k, v in predefined_service.items()): match_found = True break return match_found def clean(self): cleaned_data = super(AddCustomServiceForm, self).clean() try: is_predefined = self.matches_predefined_service(cleaned_data) except KeyError: is_predefined = False if is_predefined: msg = _('This service is available as a standard service. Please ' 'use the "Standard Services" page to enable it.') raise forms.ValidationError(msg) return cleaned_data def save(self, request): service = self.convert_formdata_to_service(self.cleaned_data) try: utils.run(['add-service', '--service', json.dumps(service)]) messages.success(request, _('Added custom service')) except ActionError as exception: if "already exists" in str(exception): messages.error(request, _('This service already exists')) else: raise Plinth-0.8.1/plinth/modules/pagekite/templates/000077500000000000000000000000001266051671100215205ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/pagekite/templates/pagekite_configure.html000066400000000000000000000034061266051671100262430ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
    {% csrf_token %} {% include 'bootstrapform/field.html' with field=form.enabled %}

    {% trans "PageKite Account" %}

    {{ form.server_domain|bootstrap_horizontal }} {{ form.server_port|bootstrap_horizontal }} {{ form.kite_name|bootstrap_horizontal }} {{ form.kite_secret|bootstrap_horizontal }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/pagekite/templates/pagekite_custom_services.html000066400000000000000000000071221266051671100274760ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% load pagekite_extras %} {% block page_head %} {% endblock %} {% block content %}

    {% trans "Create a custom service" %}

    {{ form|bootstrap_horizontal:'col-lg-6' }} {% csrf_token %}

    {% trans "Existing custom services" %}

    {% if not custom_services %} {% trans "You don't have any Custom Services enabled" %} {% endif %}
    {% for service in custom_services %} {% create_pagekite_service_url service kite_name as service_url %}
    {% if service_url|slice:":4" == "http" %} {{ service_url }} {% else %} {{ service_url }} {% endif %}
    {% blocktrans trimmed with backend_host=service.backend_host backend_port=service.backend_port %} connected to {{ backend_host }}:{{ backend_port }} {% endblocktrans %}
    {% csrf_token %} {{ service.form.as_p }}
    {% endfor %}
    {% endblock %} Plinth-0.8.1/plinth/modules/pagekite/templates/pagekite_introduction.html000066400000000000000000000046501266051671100270050ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

    {% blocktrans trimmed %} PageKite is a system for exposing {{ box_name }} services when you don't have a direct connection to the Internet. You only need this if your {{ box_name }} services are unreachable from the rest of the Internet. This includes the following situations: {% endblocktrans %}

    • {% blocktrans trimmed %} {{ box_name }} is behind a restricted firewall. {% endblocktrans %}
    • {% blocktrans trimmed %} {{ box_name }} is connected to a (wireless) router which you don't control. {% endblocktrans %}
    • {% blocktrans trimmed %} Your ISP does not provide you an external IP address and instead provides Internet connection through NAT. {% endblocktrans %}
    • {% blocktrans trimmed %} Your ISP does not provide you a static IP address and your IP address changes evertime you connect to Internet. {% endblocktrans %}
    • {% trans "Your ISP limits incoming connections." %}

    {% blocktrans trimmed %} PageKite works around NAT, firewalls and IP-address limitations by using a combination of tunnels and reverse proxies. You can use any pagekite service provider, for example pagekite.net. In future it might be possible to use your buddy's {{ box_name }} for this. {% endblocktrans %}

    {% trans "Configure PageKite" %}

    {% endblock %} Plinth-0.8.1/plinth/modules/pagekite/templates/pagekite_standard_services.html000066400000000000000000000031431266051671100277630ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% endblock %} {% block content %}
    {{ form.http|bootstrap_horizontal:'col-lg-0' }} {{ form.https|bootstrap_horizontal:'col-lg-0' }} {{ form.ssh|bootstrap_horizontal:'col-lg-0' }} {% csrf_token %}
    {% endblock %} Plinth-0.8.1/plinth/modules/pagekite/templatetags/000077500000000000000000000000001266051671100222145ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/pagekite/templatetags/pagekite_extras.py000066400000000000000000000031421266051671100257450ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django import template from plinth.modules.pagekite import utils register = template.Library() @register.assignment_tag def create_pagekite_service_url(service, kite_name): """Create a URL out of a pagekite service Parameters: - service: the service params dictionary - kite_name: kite name from the pagekite configuration, not from the service params """ # add extra information if it's missing if 'subdomains' not in service: service = utils.prepare_service_for_display(service) urlparams = {'protocol': service['protocol']} if service['subdomains']: urlparams['kite_name'] = "*.%s" % kite_name else: urlparams['kite_name'] = kite_name url = "{protocol}://{kite_name}".format(**urlparams) if 'frontend_port' in service and service['frontend_port']: url = "%s:%s" % (url, service['frontend_port']) return url Plinth-0.8.1/plinth/modules/pagekite/tests/000077500000000000000000000000001266051671100206645ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/pagekite/tests/__init__.py000066400000000000000000000000001266051671100227630ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/pagekite/tests/test_pagekite.py000066400000000000000000000041461266051671100240730ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Test modules for Pagekite functions. """ import unittest from plinth.modules.pagekite import utils class TestPagekiteActions(unittest.TestCase): """Test-cases for the pagekite action utils""" _tests = [ { 'line': 'https/8080:*.@kitename:localhost:8080:@kitesecret', 'params': {'kitename': '*.@kitename', 'backend_host': 'localhost', 'secret': '@kitesecret', 'protocol': 'https/8080', 'backend_port': '8080'} }, { 'line': 'https:*.@kitename:localhost:80:@kitesecret', 'params': {'protocol': 'https', 'kitename': '*.@kitename', 'backend_port': '80', 'backend_host': 'localhost', 'secret': '@kitesecret'} }, { 'line': 'raw/22:@kitename:localhost:22:@kitesecret', 'params': {'protocol': 'raw/22', 'kitename': '@kitename', 'backend_port': '22', 'backend_host': 'localhost', 'secret': '@kitesecret'} }, ] def test_convert_service_to_string(self): """ Test deconstructing parameter dictionaries into strings """ for test in self._tests: service_string = utils.convert_service_to_string(test['params']) self.assertEqual(test['line'], service_string) Plinth-0.8.1/plinth/modules/pagekite/urls.py000066400000000000000000000025411266051671100210630ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the PageKite module """ from django.conf.urls import url from .views import StandardServiceView, CustomServiceView, ConfigurationView, \ DeleteServiceView, index urlpatterns = [ url(r'^apps/pagekite/$', index, name='index'), url(r'^apps/pagekite/configure/$', ConfigurationView.as_view(), name='configure'), url(r'^apps/pagekite/services/standard$', StandardServiceView.as_view(), name='standard-services'), url(r'^apps/pagekite/services/custom$', CustomServiceView.as_view(), name='custom-services'), url(r'^apps/pagekite/services/custom/delete$', DeleteServiceView.as_view(), name='delete-custom-service'), ] Plinth-0.8.1/plinth/modules/pagekite/utils.py000066400000000000000000000224661266051671100212460ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django.utils.translation import ugettext_lazy as _ import json import logging import os from plinth import actions from plinth import action_utils from plinth.signals import domain_added, domain_removed LOGGER = logging.getLogger(__name__) # defaults for the credentials; @kitename acts as a placeholder and is # understood (and replaced with the actual kitename) by pagekite. BACKEND_HOST = 'localhost' KITE_NAME = '@kitename' KITE_SECRET = '@kitesecret' # Augeas base path for Pagekite configuration files CONF_PATH = '/files/etc/pagekite.d' # Parameters that get stored in configuration service_on entries SERVICE_PARAMS = ['protocol', 'kitename', 'backend_host', 'backend_port', 'secret'] # Predefined services are used to build the PredefinedServiceForm # # ATTENTION: When changing the params, make sure that the AddCustomServiceForm # still recognizes when you try to add a service equal to a predefined one PREDEFINED_SERVICES = { 'http': { 'params': {'protocol': 'http', 'kitename': KITE_NAME, 'backend_port': '80', 'backend_host': BACKEND_HOST, 'secret': KITE_SECRET}, 'label': _('Web Server (HTTP)'), 'help_text': _('Site will be available at ' 'http://{0}'), }, 'https': { 'params': {'protocol': 'https', 'kitename': KITE_NAME, 'backend_port': '443', 'backend_host': BACKEND_HOST, 'secret': KITE_SECRET}, 'label': _('Web Server (HTTPS)'), 'help_text': _('Site will be available at ' 'https://{0}'), }, 'ssh': { 'params': {'protocol': 'raw/22', 'kitename': KITE_NAME, 'backend_port': '22', 'backend_host': BACKEND_HOST, 'secret': KITE_SECRET}, 'label': _('Secure Shell (SSH)'), 'help_text': _('See SSH client setup ' 'instructions') }, } def get_kite_details(): output = run(['get-kite']) kite_details = output.split() return {'kite_name': kite_details[0], 'kite_secret': kite_details[1]} def get_pagekite_config(): """ Return the current PageKite configuration by executing various actions. """ status = {} # PageKite service enabled/disabled # To enable PageKite two things are necessary: # 1) pagekite not being disabled in /etc/pagekite.d/10_account.rc # 2) the pagekite service running is_disabled = (run(['is-disabled']).strip() == 'true') service_running = action_utils.service_is_running('pagekite') status['enabled'] = service_running and not is_disabled # PageKite kite details status.update(get_kite_details()) # PageKite frontend server server = run(['get-frontend']).strip() # Frontend entries are only considered valid if there's a ':' in # them otherwise, pagekite refuses to work, and we only set values # with ':'. if ':' in server: server_domain, server_port = server.split(':') status['server_domain'] = server_domain status['server_port'] = int(server_port) else: status['server_domain'] = server # No valid entry exists, default to port 80. Hack: Return # string instead of int to force setting port on save status['server_port'] = '80' return status def get_pagekite_services(): """Get enabled services. Returns two values: 1. predefined services: {'http': False, 'ssh': True, 'https': True} 2. custom services: [{'protocol': 'http', 'secret' 'nono', ..}, [..]} """ custom = [] predefined = {} # set all predefined services to 'disabled' by default [predefined.update({proto: False}) for proto in PREDEFINED_SERVICES.keys()] # now, search for the enabled ones for serviceline in run(['get-services']).split('\n'): if not serviceline: # skip empty lines continue service = json.loads(serviceline) for name, predefined_service in PREDEFINED_SERVICES.items(): if service == predefined_service['params']: predefined[name] = True break else: custom.append(service) return predefined, custom def prepare_service_for_display(service): """ Add extra information that is used when displaying a service - protocol is split into 'protocol' and 'frontend_port' - detect whether 'subdomains' are supported (as boolean) """ protocol = service['protocol'] if '/' in protocol: service['protocol'], service['frontend_port'] = protocol.split('/') service['subdomains'] = service['kitename'].startswith('*.') return service def run(arguments, superuser=True, input=None): """Run a given command and raise exception if there was an error""" command = 'pagekite' if superuser: return actions.superuser_run(command, arguments, input=input) else: return actions.run(command, arguments, input=input) def convert_service_to_string(service): """ Convert service dict into a ":"-separated parameter string >>> convert_service_to_string({'kitename': '@kitename', \ 'backend_host': 'localhost', 'secret': '@kitesecret', \ 'protocol': 'https/443', 'backend_port': '443'}) 'https/443:@kitename:localhost:443:@kitesecret' """ try: service_string = ":".join([service[param] for param in SERVICE_PARAMS]) except KeyError: raise ValueError("Could not parse params: %s " % service) return service_string def load_service(json_service): """ create a service out of json command-line argument 1) parse json 2) only use the parameters that we need (SERVICE_PARAMS) 3) convert unicode to strings """ service = json.loads(json_service) return dict((str(key), str(service[key])) for key in SERVICE_PARAMS) def get_augeas_servicefile_path(protocol): """Get the augeas path where a service for a protocol should be stored TODO: Once we use python3 switch from doctests to unittests >>> get_augeas_servicefile_path('http') '/files/etc/pagekite.d/80_http.rc/service_on' >>> get_augeas_servicefile_path('https') '/files/etc/pagekite.d/443_https.rc/service_on' >>> get_augeas_servicefile_path('http/80') '/files/etc/pagekite.d/80_http.rc/service_on' >>> get_augeas_servicefile_path('http/8080') '/files/etc/pagekite.d/8080_http.rc/service_on' >>> get_augeas_servicefile_path('raw/22') '/files/etc/pagekite.d/22_raw.rc/service_on' >>> get_augeas_servicefile_path('xmpp') Traceback (most recent call last): ... ValueError: Unsupported protocol: xmpp """ if not protocol.startswith(("http", "https", "raw")): raise ValueError('Unsupported protocol: %s' % protocol) try: _protocol, port = protocol.split('/') except ValueError: if protocol == 'http': relpath = '80_http.rc' elif protocol == 'https': relpath = '443_https.rc' else: raise ValueError('Unsupported protocol: %s' % protocol) else: relpath = '%s_%s.rc' % (port, _protocol) return os.path.join(CONF_PATH, relpath, 'service_on') def update_names_module(initial_registration=False, enabled=None, kite_name=None): """ Update the PageKite domain and services of the 'names' module. - initial_registration: Boolean (optional): Register also if not enabled - enabled: Boolean (optional) whether PageKite is enabled - kite_name: String (optional) """ domain_removed.send_robust(sender='pagekite', domain_type='pagekite') if enabled is None: try: enabled = get_pagekite_config()['enabled'] except IndexError: enabled = False if enabled: # Get enabled services and kite name services = get_pagekite_services()[0] enabled_services = [service for service in services if services[service]] if kite_name is None: try: kite_name = get_kite_details()['kite_name'] except IndexError: pass else: enabled_services = None kite_name = None if initial_registration or (enabled and kite_name): domain_added.send_robust( sender='pagekite', domain_type='pagekite', name=kite_name, description=_('Pagekite'), services=enabled_services) if __name__ == "__main__": import doctest doctest.testmod() Plinth-0.8.1/plinth/modules/pagekite/views.py000066400000000000000000000115471266051671100212410ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django.core.urlresolvers import reverse, reverse_lazy from django.http.response import HttpResponseRedirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator from django.utils.translation import ugettext_lazy as _ from django.views.generic import View, TemplateView from django.views.generic.edit import FormView from plinth import package from . import utils from .forms import ConfigurationForm, StandardServiceForm, \ AddCustomServiceForm, DeleteCustomServiceForm required_packages = ('pagekite',) subsubmenu = [{'url': reverse_lazy('pagekite:index'), 'text': _('About PageKite')}, {'url': reverse_lazy('pagekite:configure'), 'text': _('Configure PageKite')}, {'url': reverse_lazy('pagekite:standard-services'), 'text': _('Standard Services')}, {'url': reverse_lazy('pagekite:custom-services'), 'text': _('Custom Services')}] def index(request): """Serve introduction page""" return TemplateResponse(request, 'pagekite_introduction.html', {'title': _('Public Visibility (PageKite)'), 'subsubmenu': subsubmenu}) class ContextMixin(object): """Mixin to add 'subsubmenu' and 'title' to the context. Also adds the requirement of all necessary packages to be installed """ def get_context_data(self, **kwargs): """Use self.title and the module-level subsubmenu""" context = super(ContextMixin, self).get_context_data(**kwargs) context['title'] = getattr(self, 'title', '') context['subsubmenu'] = subsubmenu return context @method_decorator(package.required(required_packages)) def dispatch(self, *args, **kwargs): return super(ContextMixin, self).dispatch(*args, **kwargs) class DeleteServiceView(ContextMixin, View): def post(self, request): form = DeleteCustomServiceForm(request.POST) if form.is_valid(): form.delete(request) return HttpResponseRedirect(reverse('pagekite:custom-services')) class CustomServiceView(ContextMixin, TemplateView): template_name = 'pagekite_custom_services.html' def get_context_data(self, *args, **kwargs): context = super(CustomServiceView, self).get_context_data(*args, **kwargs) unused, custom_services = utils.get_pagekite_services() for service in custom_services: service['form'] = AddCustomServiceForm(initial=service) context['custom_services'] = [utils.prepare_service_for_display(service) for service in custom_services] context.update(utils.get_kite_details()) return context def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) form = AddCustomServiceForm(prefix="custom") context['form'] = form return self.render_to_response(context) def post(self, request): form = AddCustomServiceForm(request.POST, prefix="custom") if form.is_valid(): form.save(request) form = AddCustomServiceForm(prefix="custom") context = self.get_context_data() context['form'] = form return self.render_to_response(context) class StandardServiceView(ContextMixin, FormView): template_name = 'pagekite_standard_services.html' title = 'PageKite Standard Services' form_class = StandardServiceForm success_url = reverse_lazy('pagekite:standard-services') def get_initial(self): return utils.get_pagekite_services()[0] def form_valid(self, form): form.save(self.request) return super(StandardServiceView, self).form_valid(form) class ConfigurationView(ContextMixin, FormView): template_name = 'pagekite_configure.html' form_class = ConfigurationForm prefix = 'pagekite' success_url = reverse_lazy('pagekite:configure') def get_initial(self): return utils.get_pagekite_config() def form_valid(self, form): form.save(self.request) return super(ConfigurationView, self).form_valid(form) Plinth-0.8.1/plinth/modules/power/000077500000000000000000000000001266051671100170655ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/power/__init__.py000066400000000000000000000020231266051671100211730ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for power controls. """ from django.utils.translation import ugettext_lazy as _ from plinth import cfg depends = ['plinth.modules.system'] def init(): """Initialize the power module.""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Power'), 'glyphicon-off', 'power:index', 1000) Plinth-0.8.1/plinth/modules/power/templates/000077500000000000000000000000001266051671100210635ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/power/templates/power.html000066400000000000000000000022401266051671100231030ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {{ title }}

    {% blocktrans trimmed %}Restart or shut down the system.{% endblocktrans %}

    {% trans "Restart »" %} {% trans "Shut Down »" %}

    {% endblock %} Plinth-0.8.1/plinth/modules/power/templates/power_restart.html000066400000000000000000000023511266051671100246520ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {{ title }}

    {% blocktrans trimmed %} Are you sure you want to restart? You will not be able to access this web interface for a few minutes until the system is restarted. {% endblocktrans %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/power/templates/power_shutdown.html000066400000000000000000000023111266051671100250350ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {{ title }}

    {% blocktrans trimmed %} Are you sure you want to shut down? You will not be able to access this web interface after shut down. {% endblocktrans %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/power/tests/000077500000000000000000000000001266051671100202275ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/power/tests/__init__.py000066400000000000000000000000001266051671100223260ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/power/urls.py000066400000000000000000000017331266051671100204300ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the power module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^sys/power/$', views.index, name='index'), url(r'^sys/power/restart$', views.restart, name='restart'), url(r'^sys/power/shutdown$', views.shutdown, name='shutdown'), ] Plinth-0.8.1/plinth/modules/power/views.py000066400000000000000000000036631266051671100206040ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for power module. """ from django.forms import Form from django.core.urlresolvers import reverse from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from plinth import actions def index(request): """Serve power controls page.""" return TemplateResponse(request, 'power.html', {'title': _('Power')}) def restart(request): """Serve start confirmation page.""" form = None if request.method == 'POST': actions.superuser_run('power', ['restart'], async=True) return redirect(reverse('apps:index')) else: form = Form(prefix='power') return TemplateResponse(request, 'power_restart.html', {'title': _('Power'), 'form': form}) def shutdown(request): """Serve shutdown confirmation page.""" form = None if request.method == 'POST': actions.superuser_run('power', ['shutdown'], async=True) return redirect(reverse('apps:index')) else: form = Form(prefix='power') return TemplateResponse(request, 'power_shutdown.html', {'title': _('Power'), 'form': form}) Plinth-0.8.1/plinth/modules/privoxy/000077500000000000000000000000001266051671100174515ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/privoxy/__init__.py000066400000000000000000000052341266051671100215660ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure Privoxy. """ from django.utils.translation import ugettext_lazy as _ import json from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] service = None def init(): """Intialize the module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Web Proxy (Privoxy)'), 'glyphicon-cloud-upload', 'privoxy:index', 1000) global service service = service_module.Service( 'privoxy', _('Privoxy Web Proxy'), is_external=False, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return action_utils.service_is_enabled('privoxy') def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('privoxy') def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(8118, 'tcp4')) results.append(action_utils.diagnose_port_listening(8118, 'tcp6')) results.append(action_utils.diagnose_url('https://www.debian.org')) results.extend(diagnose_url_with_proxy()) return results def diagnose_url_with_proxy(): """Run a diagnostic on a URL with a proxy.""" url = 'https://debian.org/' results = [] for address in action_utils.get_addresses(): if address['kind'] == '6': address['address'] = '[{0}]'.format(address['address']) proxy = 'http://{host}:8118/'.format(host=address['address']) if address['kind'] == '4': env = {'http_proxy': proxy} else: env = {'https_proxy': proxy} result = action_utils.diagnose_url(url, kind=address['kind'], env=env) result[0] = _('Access {url} with proxy {proxy} on tcp{kind}') \ .format(url=url, proxy=proxy, kind=address['kind']) results.append(result) return results Plinth-0.8.1/plinth/modules/privoxy/forms.py000066400000000000000000000017201266051671100211510ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring Privoxy. """ from django import forms from django.utils.translation import ugettext_lazy as _ class PrivoxyForm(forms.Form): """Privoxy configuration form.""" enabled = forms.BooleanField( label=_('Enable Privoxy'), required=False) Plinth-0.8.1/plinth/modules/privoxy/templates/000077500000000000000000000000001266051671100214475ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/privoxy/templates/privoxy.html000066400000000000000000000042351266051671100240610ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "Web Proxy (Privoxy)" %}

    {% blocktrans trimmed %} Privoxy is a non-caching web proxy with advanced filtering capabilities for enhancing privacy, modifying web page data and HTTP headers, controlling access, and removing ads and other obnoxious Internet junk. {% endblocktrans %}

    {% blocktrans trimmed %} You can use Privoxy by modifying your browser proxy settings to your {{ box_name }} hostname (or IP address) with port 8118. While using Privoxy, you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p. {% endblocktrans %}

    {% trans "Status" %}

    {% if status.is_running %} {% trans "Privoxy is running" %} {% else %} {% trans "Privoxy is not running" %} {% endif %}

    {% include "diagnostics_button.html" with module="privoxy" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/privoxy/tests/000077500000000000000000000000001266051671100206135ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/privoxy/tests/__init__.py000066400000000000000000000000001266051671100227120ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/privoxy/urls.py000066400000000000000000000015351266051671100210140ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Privoxy module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/privoxy/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/privoxy/views.py000066400000000000000000000051771266051671100211720ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring Privoxy Server. """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ import logging from .forms import PrivoxyForm from plinth import actions from plinth import package from plinth.modules import privoxy logger = logging.getLogger(__name__) def on_install(): """Notify that the service is now enabled.""" actions.superuser_run('privoxy', ['setup']) privoxy.service.notify_enabled(None, True) @package.required(['privoxy'], on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = PrivoxyForm(request.POST, prefix='privoxy') # pylint: disable=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = PrivoxyForm(initial=status, prefix='privoxy') else: form = PrivoxyForm(initial=status, prefix='privoxy') return TemplateResponse(request, 'privoxy.html', {'title': _('Web Proxy (Privoxy)'), 'status': status, 'form': form}) def get_status(): """Get the current settings from server.""" status = {'enabled': privoxy.is_enabled(), 'is_running': privoxy.is_running()} return status def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('privoxy', [sub_command]) privoxy.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/quassel/000077500000000000000000000000001266051671100174065ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/quassel/__init__.py000066400000000000000000000034161266051671100215230ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for quassel. """ from django.utils.translation import ugettext_lazy as _ from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] service = None def init(): """Initialize the quassel module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('IRC Client (Quassel)'), 'glyphicon-retweet', 'quassel:index', 730) global service service = service_module.Service( 'quassel-plinth', _('Quassel IRC Client'), is_external=True, enabled=is_enabled()) def is_enabled(): """Return whether the service is enabled.""" return action_utils.service_is_enabled('quasselcore') def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('quasselcore') def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(4242, 'tcp4')) results.append(action_utils.diagnose_port_listening(4242, 'tcp6')) return results Plinth-0.8.1/plinth/modules/quassel/forms.py000066400000000000000000000017301266051671100211070ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for Quassel module. """ from django import forms from django.utils.translation import ugettext_lazy as _ class QuasselForm(forms.Form): """Quassel configuration form.""" enabled = forms.BooleanField( label=_('Enable Quassel core service'), required=False) Plinth-0.8.1/plinth/modules/quassel/templates/000077500000000000000000000000001266051671100214045ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/quassel/templates/quassel.html000066400000000000000000000044631266051671100237560ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "IRC Client (Quassel)" %}

    {% blocktrans trimmed %} Quassel is an IRC application that is split into two parts, a "core" and a "client". This allows the core to remain connected to IRC servers, and to continue receiving messages, even when the client is disconnected. {{ box_name }} can run the Quassel core service keeping you always online and one or more Quassel clients from a desktop or a mobile can be used to connect and disconnect from it. {% endblocktrans %}

    {% blocktrans trimmed %} You can connect to your Quassel core on the default Quassel port 4242. Clients to connect to Quassel from your desktop and mobile devices are available. {% endblocktrans %}

    {% trans "Status" %}

    {% if status.is_running %} {% trans "Quassel core service is running" %} {% else %} {% trans "Quassel core service is not running" %} {% endif %}

    {% include "diagnostics_button.html" with module="quassel" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/quassel/tests/000077500000000000000000000000001266051671100205505ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/quassel/tests/__init__.py000066400000000000000000000000001266051671100226470ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/quassel/urls.py000066400000000000000000000015351266051671100207510ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the quassel module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/quassel/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/quassel/views.py000066400000000000000000000047171266051671100211260ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Views for Quassel module. """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from .forms import QuasselForm from plinth import actions from plinth import package from plinth.modules import quassel def on_install(): """Notify that the service is now enabled.""" quassel.service.notify_enabled(None, True) @package.required(['quassel-core'], on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = QuasselForm(request.POST, prefix='quassel') if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = QuasselForm(initial=status, prefix='quassel') else: form = QuasselForm(initial=status, prefix='quassel') return TemplateResponse(request, 'quassel.html', {'title': _('IRC Client (Quassel)'), 'status': status, 'form': form}) def get_status(): """Get the current service status.""" return {'enabled': quassel.is_enabled(), 'is_running': quassel.is_running()} def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('quassel', [sub_command]) quassel.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/repro/000077500000000000000000000000001266051671100170605ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/repro/__init__.py000066400000000000000000000040571266051671100211770ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for repro. """ from django.utils.translation import ugettext_lazy as _ from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] service = None def init(): """Initialize the repro module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('SIP Server (repro)'), 'glyphicon-phone-alt', 'repro:index', 825) global service service = service_module.Service( 'repro', _('repro SIP Server'), ['sip-plinth', 'sip-tls-plinth'], is_external=True, enabled=is_enabled()) def is_enabled(): """Return whether the service is enabled.""" return action_utils.service_is_enabled('repro') def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('repro') def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(5060, 'udp4')) results.append(action_utils.diagnose_port_listening(5060, 'udp6')) results.append(action_utils.diagnose_port_listening(5060, 'tcp4')) results.append(action_utils.diagnose_port_listening(5060, 'tcp6')) results.append(action_utils.diagnose_port_listening(5061, 'tcp4')) results.append(action_utils.diagnose_port_listening(5061, 'tcp6')) return results Plinth-0.8.1/plinth/modules/repro/forms.py000066400000000000000000000017051266051671100205630ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for repro module. """ from django import forms from django.utils.translation import ugettext_lazy as _ class ReproForm(forms.Form): """Configuration form.""" enabled = forms.BooleanField( label=_('Enable repro service'), required=False) Plinth-0.8.1/plinth/modules/repro/templates/000077500000000000000000000000001266051671100210565ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/repro/templates/repro.html000066400000000000000000000052731266051671100231020ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "SIP Server (repro)" %}

    {% blocktrans trimmed %} repro provides various SIP services that a SIP softphone can utilize to provide audio and video calls as well as presence and instant messaging. repro provides a server and SIP user accounts that clients can use to let their presence known. It also acts as a proxy to federate SIP communications to other servers on the Internet similar to email. {% endblocktrans %}

    {% blocktrans trimmed %} To make SIP calls, a client application is needed. Available clients include Jitsi (for computers) and CSipSimple (for Android phones). {% endblocktrans %}

    {% blocktrans trimmed %} Note: Before using repro, domains and users will need to be configured using the web-based configuration panel. Users in the admin group will be able to log in to the repro configuration panel. After setting the domain, it is required to restart the repro service. Disable the service and re-enable it. {% endblocktrans %}

    {% trans "Status" %}

    {% if status.is_running %} {% trans "repro service is running" %} {% else %} {% trans "repro service is not running" %} {% endif %}

    {% include "diagnostics_button.html" with module="repro" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/repro/tests/000077500000000000000000000000001266051671100202225ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/repro/tests/__init__.py000066400000000000000000000000001266051671100223210ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/repro/urls.py000066400000000000000000000015311266051671100204170ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the repro module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/repro/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/repro/views.py000066400000000000000000000047261266051671100206000ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Views for repro module. """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from .forms import ReproForm from plinth import actions from plinth import package from plinth.modules import repro def on_install(): """Notify that the service is now enabled.""" actions.superuser_run('repro', ['setup']) repro.service.notify_enabled(None, True) @package.required(['repro'], on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = ReproForm(request.POST, prefix='repro') if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = ReproForm(initial=status, prefix='repro') else: form = ReproForm(initial=status, prefix='repro') return TemplateResponse(request, 'repro.html', {'title': _('SIP Server (repro)'), 'status': status, 'form': form}) def get_status(): """Get the current service status.""" return {'enabled': repro.is_enabled(), 'is_running': repro.is_running()} def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('repro', [sub_command]) repro.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/restore/000077500000000000000000000000001266051671100174145ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/restore/__init__.py000066400000000000000000000026521266051671100215320ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure reStore. """ from django.utils.translation import ugettext_lazy as _ from plinth import action_utils, cfg from plinth import service as service_module service = None __all__ = ['init'] depends = ['plinth.modules.apps'] def init(): """Initialize the reStore module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Unhosted Storage (reStore)'), 'glyphicon-hdd', 'restore:index', 750) global service service = service_module.Service( 'node-restore', _('reStore'), ['http', 'https'], is_external=False, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return action_utils.service_is_enabled('node-restore') Plinth-0.8.1/plinth/modules/restore/forms.py000066400000000000000000000017201266051671100211140ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring reStore. """ from django import forms from django.utils.translation import ugettext_lazy as _ class ReStoreForm(forms.Form): """reStore configuration form.""" enabled = forms.BooleanField( label=_('Enable reStore'), required=False) Plinth-0.8.1/plinth/modules/restore/templates/000077500000000000000000000000001266051671100214125ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/restore/templates/restore_index.html000066400000000000000000000032431266051671100251540ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "Unhosted Storage (reStore)" %}

    {% blocktrans trimmed %} reStore is a server for unhosted web applications. The idea is to uncouple web applications from data. No matter where a web application is served from, the data can be stored on an unhosted storage server of user's choice. With reStore, your {{ box_name }} becomes your unhosted storage server. {% endblocktrans %}

    {% blocktrans trimmed %} You can create and edit accounts in the reStore web-interface. {% endblocktrans %}

    Configuration

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/restore/tests/000077500000000000000000000000001266051671100205565ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/restore/tests/__init__.py000066400000000000000000000000001266051671100226550ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/restore/urls.py000066400000000000000000000015351266051671100207570ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the reStore module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/restore/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/restore/views.py000066400000000000000000000044271266051671100211320ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring reStore. """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from .forms import ReStoreForm from plinth import actions, package from plinth.modules import restore @package.required(['node-restore']) def index(request): """Serve configuration page.""" status = get_status() if request.method == 'POST': form = ReStoreForm(request.POST, prefix='restore') if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = ReStoreForm(initial=status, prefix='restore') else: form = ReStoreForm(initial=status, prefix='restore') return TemplateResponse(request, 'restore_index.html', {'title': _('Unhosted Storage (reStore)'), 'status': status, 'form': form}) def get_status(): """Get the current settings.""" status = {'enabled': restore.is_enabled()} return status def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('restore', [sub_command]) restore.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/roundcube/000077500000000000000000000000001266051671100177175ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/roundcube/__init__.py000066400000000000000000000027731266051671100220410ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure Roundcube. """ from django.utils.translation import ugettext_lazy as _ from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] def init(): """Intialize the module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Email Client (Roundcube)'), 'glyphicon-envelope', 'roundcube:index', 600) def is_enabled(): """Return whether the module is enabled.""" return action_utils.webserver_is_enabled('roundcube') def diagnose(): """Run diagnostics and return the results.""" results = [] results.extend(action_utils.diagnose_url_on_all( 'https://{host}/roundcube', extra_options=['--no-check-certificate'])) return results Plinth-0.8.1/plinth/modules/roundcube/forms.py000066400000000000000000000017301266051671100214200ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring Roundcube. """ from django import forms from django.utils.translation import ugettext_lazy as _ class RoundcubeForm(forms.Form): """Roundcube configuration form.""" enabled = forms.BooleanField( label=_('Enable Roundcube'), required=False) Plinth-0.8.1/plinth/modules/roundcube/templates/000077500000000000000000000000001266051671100217155ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/roundcube/templates/roundcube.html000066400000000000000000000046361266051671100246020ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "Email Client (Roundcube)" %}

    {% blocktrans trimmed %} Roundcube webmail is a browser-based multilingual IMAP client with an application-like user interface. It provides full functionality you expect from an email client, including MIME support, address book, folder manipulation, message searching and spell checking. {% endblocktrans %}

    {% blocktrans trimmed %} You can access Roundcube from /roundcube. Provide the username and password of the email account you wish to access followed by the domain name of the IMAP server for your email provider, like imap.example.com. For IMAP over SSL (recommended), fill the server field like imaps://imap.example.com. {% endblocktrans %}

    {% blocktrans trimmed %} For Gmail, username will be your Gmail address, password will be your Google account password and server will be imaps://imap.gmail.com. Note that you will also need to enable "Less secure apps" in your Google account settings (https://www.google.com/settings/security/lesssecureapps). {% endblocktrans %}

    {% include "diagnostics_button.html" with module="roundcube" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/roundcube/tests/000077500000000000000000000000001266051671100210615ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/roundcube/tests/__init__.py000066400000000000000000000000001266051671100231600ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/roundcube/urls.py000066400000000000000000000015411266051671100212570ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Roundcube module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/roundcube/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/roundcube/views.py000066400000000000000000000052641266051671100214350ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring Roundcube. """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ import logging from .forms import RoundcubeForm from plinth import actions from plinth import package from plinth.modules import roundcube logger = logging.getLogger(__name__) def before_install(): """Preseed debconf values before the packages are installed.""" actions.superuser_run('roundcube', ['pre-install']) def on_install(): """Setup Roundcube Apache configuration.""" actions.superuser_run('roundcube', ['setup']) @package.required(['sqlite3', 'roundcube', 'roundcube-sqlite3'], before_install=before_install, on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = RoundcubeForm(request.POST, prefix='roundcube') # pylint: disable=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = RoundcubeForm(initial=status, prefix='roundcube') else: form = RoundcubeForm(initial=status, prefix='roundcube') return TemplateResponse(request, 'roundcube.html', {'title': _('Email Client (Roundcube)'), 'status': status, 'form': form}) def get_status(): """Get the current status.""" return {'enabled': roundcube.is_enabled()} def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('roundcube', [sub_command]) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/shaarli/000077500000000000000000000000001266051671100173545ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/shaarli/__init__.py000066400000000000000000000026271266051671100214740ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure Shaarli. """ from django.utils.translation import ugettext_lazy as _ from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] service = None def init(): """Initialize the module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Bookmarks (Shaarli)'), 'glyphicon-bookmark', 'shaarli:index', 350) global service service = service_module.Service( 'shaarli', _('Shaarli'), ['http', 'https'], is_external=True, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return action_utils.webserver_is_enabled('shaarli') Plinth-0.8.1/plinth/modules/shaarli/forms.py000066400000000000000000000017201266051671100210540ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring Shaarli. """ from django import forms from django.utils.translation import ugettext_lazy as _ class ShaarliForm(forms.Form): """Shaarli configuration form.""" enabled = forms.BooleanField( label=_('Enable Shaarli'), required=False) Plinth-0.8.1/plinth/modules/shaarli/templates/000077500000000000000000000000001266051671100213525ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/shaarli/templates/shaarli.html000066400000000000000000000026741266051671100236740ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "Bookmarks (Shaarli)" %}

    {% trans "Shaarli allows you to save and share bookmarks." %}

    {% blocktrans trimmed %} When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user account, which you will need to setup on the initial visit. {% endblocktrans %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/shaarli/tests/000077500000000000000000000000001266051671100205165ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/shaarli/tests/__init__.py000066400000000000000000000000001266051671100226150ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/shaarli/urls.py000066400000000000000000000015351266051671100207170ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Shaarli module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/shaarli/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/shaarli/views.py000066400000000000000000000046571266051671100210770ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure Shaarli. """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ from .forms import ShaarliForm from plinth import actions from plinth import package from plinth.modules import shaarli def on_install(): """Notify that the service is now enabled.""" shaarli.service.notify_enabled(None, True) @package.required(['shaarli'], on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = ShaarliForm(request.POST, prefix='shaarli') if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = ShaarliForm(initial=status, prefix='shaarli') else: form = ShaarliForm(initial=status, prefix='shaarli') return TemplateResponse(request, 'shaarli.html', {'title': _('Bookmarks (Shaarli)'), 'status': status, 'form': form}) def get_status(): """Get the current settings.""" status = {'enabled': shaarli.is_enabled()} return status def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('shaarli', [sub_command]) shaarli.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/system/000077500000000000000000000000001266051671100172555ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/system/__init__.py000066400000000000000000000014611266051671100213700ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for system section page """ from . import system from .system import init __all__ = ['system', 'init'] Plinth-0.8.1/plinth/modules/system/system.py000066400000000000000000000022121266051671100211500ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django.template.response import TemplateResponse from django.utils.translation import ugettext_lazy as _ from plinth import cfg def init(): """Initialize the system module""" cfg.main_menu.add_urlname(_('System'), 'glyphicon-cog', 'system:index', 100) def index(request): """Serve the index page""" return TemplateResponse(request, 'system.html', {'title': _('System Configuration')}) Plinth-0.8.1/plinth/modules/system/templates/000077500000000000000000000000001266051671100212535ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/system/templates/system.html000066400000000000000000000022101266051671100234600ustar00rootroot00000000000000{% extends 'base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

    {% trans "System Configuration" %}

    {% blocktrans trimmed %} Here you can administrate the underlying system of your {{ box_name }}. {% endblocktrans %}

    {% blocktrans trimmed %} The options affect the {{ box_name }} at its most general level, so be careful! {% endblocktrans %}

    {% endblock %} Plinth-0.8.1/plinth/modules/system/tests/000077500000000000000000000000001266051671100204175ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/system/tests/__init__.py000066400000000000000000000000001266051671100225160ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/system/urls.py000066400000000000000000000015341266051671100206170ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the System module """ from django.conf.urls import url from . import system as views urlpatterns = [ url(r'^sys/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/tor/000077500000000000000000000000001266051671100165355ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/tor/__init__.py000066400000000000000000000227051266051671100206540ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure Tor. """ import augeas from django.utils.translation import ugettext as _ import glob import itertools from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module from plinth.modules.names import SERVICES from plinth.signals import domain_added depends = ['plinth.modules.apps', 'plinth.modules.names'] socks_service = None bridge_service = None APT_SOURCES_URI_PATHS = ('/files/etc/apt/sources.list/*/uri', '/files/etc/apt/sources.list.d/*/*/uri') APT_TOR_PREFIX = 'tor+' def init(): """Initialize the module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Anonymity Network (Tor)'), 'glyphicon-eye-close', 'tor:index', 100) global socks_service socks_service = service_module.Service( 'tor-socks', _('Tor Anonymity Network'), is_external=False, enabled=is_enabled()) global bridge_service bridge_service = service_module.Service( 'tor-bridge', _('Tor Bridge Relay'), ports=['tor-orport', 'tor-obfs3', 'tor-obfs4'], is_external=True, enabled=is_enabled()) # Register hidden service name with Name Services module. (hs_enabled, hs_hostname, hs_ports) = get_hs() if is_enabled() and is_running() and hs_enabled and hs_hostname: hs_services = [] for service_type in SERVICES: if str(service_type[2]) in hs_ports: hs_services.append(service_type[0]) else: hs_hostname = None hs_services = None domain_added.send_robust( sender='tor', domain_type='hiddenservice', name=hs_hostname, description=_('Tor Hidden Service'), services=hs_services) def is_enabled(): """Return whether the module is enabled.""" return action_utils.service_is_enabled('tor') def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('tor') def get_status(): """Return current Tor status.""" output = actions.superuser_run('tor', ['get-ports']) port_info = output.split('\n') ports = {} for line in port_info: try: (key, val) = line.split() ports[key] = val except ValueError: continue (hs_enabled, hs_hostname, hs_ports) = get_hs() return {'enabled': is_enabled(), 'is_running': is_running(), 'ports': ports, 'hs_enabled': hs_enabled, 'hs_hostname': hs_hostname, 'hs_ports': hs_ports, 'apt_transport_tor_enabled': is_apt_transport_tor_enabled()} def get_hs(): """Return hidden service status.""" output = actions.superuser_run('tor', ['get-hs']) output = output.strip() if output == '': hs_enabled = False hs_hostname = 'Not Configured' hs_ports = '' elif output == 'error': hs_enabled = False hs_hostname = 'Not available (Run Tor at least once)' hs_ports = '' else: hs_enabled = True hs_info = output.split() hs_hostname = hs_info[0] hs_ports = hs_info[1] return (hs_enabled, hs_hostname, hs_ports) def get_augeas(): """Return an instance of Augeaus for processing APT configuration.""" aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + augeas.Augeas.NO_MODL_AUTOLOAD) aug.set('/augeas/load/Aptsources/lens', 'Aptsources.lns') aug.set('/augeas/load/Aptsources/incl[last() + 1]', '/etc/apt/sources.list') aug.set('/augeas/load/Aptsources/incl[last() + 1]', '/etc/apt/sources.list.d/*.list') aug.load() # Currently, augeas does not handle Deb822 format, it error out. if aug.match('/augeas/files/etc/apt/sources.list/error') or \ aug.match('/augeas/files/etc/apt/sources.list.d//error'): raise Exception('Error parsing sources list') # Starting with Apt 1.1, /etc/apt/sources.list.d/*.sources will # contain files with Deb822 format. If they are found, error out # for now. XXX: Provide proper support Deb822 format with a new # Augeas lens. if glob.glob('/etc/apt/sources.list.d/*.sources'): raise Exception('Can not handle Deb822 source files') return aug def iter_apt_uris(aug): """Iterate over all the APT source URIs.""" return itertools.chain.from_iterable([aug.match(path) for path in APT_SOURCES_URI_PATHS]) def get_real_apt_uri_path(aug, path): """Return the actual path which contains APT URL. XXX: This is a workaround for Augeas bug parsing Apt source files with '[options]'. Remove this workaround after Augeas lens is fixed. """ uri = aug.get(path) if uri[0] == '[': parent_path = path.rsplit('/', maxsplit=1)[0] skipped = False for child_path in aug.match(parent_path + '/*')[1:]: if skipped: return child_path value = aug.get(child_path) if value[-1] == ']': skipped = True return path def is_apt_transport_tor_enabled(): """Return whether APT is set to download packages over Tor.""" try: aug = get_augeas() except Exception: # If there was an error with parsing or there are Deb822 # files. return False for uri_path in iter_apt_uris(aug): uri_path = get_real_apt_uri_path(aug, uri_path) uri = aug.get(uri_path) if not uri.startswith(APT_TOR_PREFIX) and \ (uri.startswith('http://') or uri.startswith('https://')): return False return True def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(9050, 'tcp4')) results.append(action_utils.diagnose_port_listening(9050, 'tcp6')) results.append(action_utils.diagnose_port_listening(9040, 'tcp4')) results.append(action_utils.diagnose_port_listening(9040, 'tcp6')) results.append(action_utils.diagnose_port_listening(9053, 'udp4')) results.append(action_utils.diagnose_port_listening(9053, 'udp6')) results.extend(_diagnose_control_port()) output = actions.superuser_run('tor', ['get-ports']) ports = [line.split() for line in output.splitlines()] ports = {port_type: int(port) for port_type, port in ports} results.append([_('Tor relay port available'), 'passed' if 'orport' in ports else 'failed']) if 'orport' in ports: results.append(action_utils.diagnose_port_listening(ports['orport'], 'tcp4')) results.append(action_utils.diagnose_port_listening(ports['orport'], 'tcp6')) results.append([_('Obfs3 transport registered'), 'passed' if 'obfs3' in ports else 'failed']) if 'obfs3' in ports: results.append(action_utils.diagnose_port_listening(ports['obfs3'], 'tcp4')) results.append([_('Obfs4 transport registered'), 'passed' if 'obfs4' in ports else 'failed']) if 'obfs4' in ports: results.append(action_utils.diagnose_port_listening( ports['obfs4'], 'tcp4')) results.append(_diagnose_url_via_tor('http://www.debian.org', '4')) results.append(_diagnose_url_via_tor('http://www.debian.org', '6')) results.append(_diagnose_tor_use('https://check.torproject.org', '4')) results.append(_diagnose_tor_use('https://check.torproject.org', '6')) return results def _diagnose_control_port(): """Diagnose whether Tor control port is open on 127.0.0.1 only.""" results = [] addresses = action_utils.get_ip_addresses() for address in addresses: if address['kind'] != '4': continue negate = True if address['address'] == '127.0.0.1': negate = False results.append(action_utils.diagnose_netcat( address['address'], 9051, input='QUIT\n', negate=negate)) return results def _diagnose_url_via_tor(url, kind=None): """Diagnose whether a URL is reachable via Tor.""" result = action_utils.diagnose_url(url, kind=kind, wrapper='torsocks') result[0] = _('Access URL {url} on tcp{kind} via Tor') \ .format(url=url, kind=kind) return result def _diagnose_tor_use(url, kind=None): """Diagnose whether webpage at URL reports that we are using Tor.""" expected_output = 'Congratulations. This browser is configured to use Tor.' result = action_utils.diagnose_url(url, kind=kind, wrapper='torsocks', expected_output=expected_output) result[0] = _('Confirm Tor usage at {url} on tcp{kind}') \ .format(url=url, kind=kind) return result Plinth-0.8.1/plinth/modules/tor/forms.py000066400000000000000000000033601266051671100202370ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring Tor. """ from django import forms from django.utils.translation import ugettext_lazy as _ from plinth import cfg from plinth.utils import format_lazy class TorForm(forms.Form): # pylint: disable=W0232 """Tor configuration form.""" enabled = forms.BooleanField( label=_('Enable Tor'), required=False) hs_enabled = forms.BooleanField( label=_('Enable Tor Hidden Service'), required=False, help_text=format_lazy(_( 'A hidden service will allow {box_name} to provide selected ' 'services (such as ownCloud or chat) without revealing its ' 'location.'), box_name=_(cfg.box_name))) apt_transport_tor_enabled = forms.BooleanField( label=_('Download software packages over Tor'), required=False, help_text=_('When enabled, software will be downloaded over the Tor ' 'network for installations and upgrades. This adds a ' 'degree of privacy and security during software ' 'downloads.')) Plinth-0.8.1/plinth/modules/tor/templates/000077500000000000000000000000001266051671100205335ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/tor/templates/tor.html000066400000000000000000000076271266051671100222410ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% if config_running %} {% endif %} {% endblock %} {% block content %}

    {% trans "Anonymity Network (Tor)" %}

    {% blocktrans trimmed %} Tor is an anonymous communication system. You can learn more about it from the Tor Project website. For best protection when web surfing, the Tor Project recommends that you use the Tor Browser. {% endblocktrans %}

    {% trans "Status" %}

    {% if config_running %}

    {% trans "Tor configuration is being updated" %}

    {% else %}

    {% if status.is_running %} {% trans "Tor is running" %} {% else %} {% trans "Tor is not running" %} {% endif %}

    {% include "diagnostics_button.html" with module="tor" %} {% if status.hs_enabled %}
    {% trans "Hidden Service" %} {% trans "Port" %}
    {{ status.hs_hostname }} {{ status.hs_ports }}
    {% endif %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}

    {% trans "Bridge" %}

    {% blocktrans trimmed %} Your {{ box_name }} is configured as a Tor bridge with obfsproxy, so it can help circumvent censorship. If your {{ box_name }} is behind a router or firewall, you should make sure the following ports are open, and port-forwarded, if necessary: {% endblocktrans %}

    {% for name, port in status.ports.items %} {% endfor %}
    {% trans "Service" %} {% trans "Port" %}
    {{ name }} {{ port }}

    {% trans "SOCKS" %}

    {% blocktrans trimmed %} A Tor SOCKS port is available on your {{ box_name }} on TCP port 9050. {% endblocktrans %}

    {% endif %} {% endblock %} Plinth-0.8.1/plinth/modules/tor/tests/000077500000000000000000000000001266051671100176775ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/tor/tests/__init__.py000066400000000000000000000000001266051671100217760ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/tor/tests/test_tor.py000066400000000000000000000033501266051671100221150ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Tests for Tor module. """ import os import unittest from plinth.modules.tor import is_apt_transport_tor_enabled, get_hs, get_status euid = os.geteuid() class TestTor(unittest.TestCase): """Test cases for testing the tor module.""" @unittest.skipUnless(euid == 0, 'Needs to be root') def test_is_apt_transport_tor_enabled(self): """Test that is_apt_transport_tor_enabled does not raise any unhandled exceptions. """ is_apt_transport_tor_enabled() @unittest.skipUnless(euid == 0, 'Needs to be root') def test_get_hs(self): """Test that get_hs does not raise any unhandled exceptions. This should work regardless of whether tor is installed, or /etc/tor/torrc exists. """ get_hs() @unittest.skipUnless(euid == 0, 'Needs to be root') def test_get_status(self): """Test that get_status does not raise any unhandled exceptions. This should work regardless of whether tor is installed, or /etc/tor/torrc exists. """ get_status() Plinth-0.8.1/plinth/modules/tor/urls.py000066400000000000000000000015251266051671100200770ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Tor module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/tor/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/tor/views.py000066400000000000000000000120161266051671100202440ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring Tor. """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext_lazy as _ from .forms import TorForm from plinth import actions from plinth import package from plinth.errors import ActionError from plinth.modules import tor from plinth.modules.names import SERVICES from plinth.signals import domain_added, domain_removed config_process = None def on_install(): """Setup Tor configuration as soon as it is installed.""" actions.superuser_run('tor', ['setup']) actions.superuser_run('tor', ['configure', '--apt-transport-tor', 'enable']) tor.socks_service.notify_enabled(None, True) tor.bridge_service.notify_enabled(None, True) @package.required(['tor', 'tor-geoipdb', 'torsocks', 'obfs4proxy', 'apt-transport-tor'], on_install=on_install) def index(request): """Serve configuration page.""" if config_process: _collect_config_result(request) status = tor.get_status() form = None if request.method == 'POST': form = TorForm(request.POST, prefix='tor') # pylint: disable=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = tor.get_status() form = TorForm(initial=status, prefix='tor') else: form = TorForm(initial=status, prefix='tor') return TemplateResponse(request, 'tor.html', {'title': _('Tor Control Panel'), 'status': status, 'config_running': bool(config_process), 'form': form}) def _apply_changes(request, old_status, new_status): """Try to apply changes and handle errors.""" try: __apply_changes(request, old_status, new_status) except ActionError as exception: messages.error(request, _('Action error: {0} [{1}] [{2}]').format( exception.args[0], exception.args[1], exception.args[2])) def __apply_changes(request, old_status, new_status): """Apply the changes.""" global config_process if config_process: # Already running a configuration task return arguments = [] if old_status['enabled'] != new_status['enabled']: arg_value = 'enable' if new_status['enabled'] else 'disable' arguments.extend(['--service', arg_value]) if old_status['hs_enabled'] != new_status['hs_enabled']: arg_value = 'enable' if new_status['hs_enabled'] else 'disable' arguments.extend(['--hidden-service', arg_value]) if old_status['apt_transport_tor_enabled'] != \ new_status['apt_transport_tor_enabled']: arg_value = 'disable' if new_status['enabled'] and new_status['apt_transport_tor_enabled']: arg_value = 'enable' arguments.extend(['--apt-transport-tor', arg_value]) if arguments: config_process = actions.superuser_run( 'tor', ['configure'] + arguments, async=True) else: messages.info(request, _('Setting unchanged')) def _collect_config_result(request): """Handle config process completion.""" global config_process if not config_process: return return_code = config_process.poll() # Config process is not complete yet if return_code == None: return status = tor.get_status() tor.socks_service.notify_enabled(None, status['enabled']) tor.bridge_service.notify_enabled(None, status['enabled']) # Update hidden service name registered with Name Services module. domain_removed.send_robust( sender='tor', domain_type='hiddenservice') if status['enabled'] and status['is_running'] and \ status['hs_enabled'] and status['hs_hostname']: hs_services = [] for service in SERVICES: if str(service[2]) in status['hs_ports']: hs_services.append(service[0]) domain_added.send_robust( sender='tor', domain_type='hiddenservice', name=status['hs_hostname'], description=_('Tor Hidden Service'), services=hs_services) if not return_code: messages.success(request, _('Configuration updated.')) else: messages.error(request, _('An error occurred during configuration.')) config_process = None Plinth-0.8.1/plinth/modules/transmission/000077500000000000000000000000001266051671100204625ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/transmission/__init__.py000066400000000000000000000041101266051671100225670ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure Transmission server """ from django.utils.translation import ugettext_lazy as _ from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module depends = ['plinth.modules.apps'] service = None def init(): """Intialize the Transmission module.""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('BitTorrent (Transmission)'), 'glyphicon-save', 'transmission:index', 300) global service service = service_module.Service( 'transmission', _('Transmission BitTorrent'), ['http', 'https'], is_external=True, enabled=is_enabled()) def is_enabled(): """Return whether the module is enabled.""" return (action_utils.service_is_enabled('transmission-daemon') and action_utils.webserver_is_enabled('transmission-plinth')) def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('transmission-daemon') def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(9091, 'tcp4')) results.append(action_utils.diagnose_port_listening(9091, 'tcp6')) results.extend(action_utils.diagnose_url_on_all( 'https://{host}/transmission', extra_options=['--no-check-certificate'])) return results Plinth-0.8.1/plinth/modules/transmission/forms.py000066400000000000000000000032031266051671100221600ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring Transmission. """ from django import forms from django.utils.translation import ugettext_lazy as _ class TransmissionForm(forms.Form): # pylint: disable=W0232 """Transmission configuration form""" enabled = forms.BooleanField( label=_('Enable Transmission daemon'), required=False) download_dir = forms.CharField( label=_('Download directory'), help_text=_('Directory where downloads are saved. If you change the \ default directory, ensure that the new directory exists and is writable by \ "debian-transmission" user.')) rpc_username = forms.CharField( label=_('Username'), help_text=_('Username to login to the web interface.')) rpc_password = forms.CharField( label=_('Password'), help_text=_('Password to login to the web interface. Current \ password is shown in a hashed format. To set a new password, enter the \ password in plain text.')) Plinth-0.8.1/plinth/modules/transmission/templates/000077500000000000000000000000001266051671100224605ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/transmission/templates/transmission.html000066400000000000000000000035531266051671100261050ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "BitTorrent (Transmission)" %}

    {% blocktrans trimmed %} BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon handles Bitorrent file sharing. Note that BitTorrent is not anonymous. {% endblocktrans %}

    {% blocktrans trimmed %} Access the web interface at /transmission. {% endblocktrans %}

    {% trans "Status" %}

    {% if status.is_running %} {% trans "Transmission daemon is running" %} {% else %} {% trans "Transmission daemon is not running." %} {% endif %}

    {% include "diagnostics_button.html" with module="transmission" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/transmission/tests/000077500000000000000000000000001266051671100216245ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/transmission/tests/__init__.py000066400000000000000000000000001266051671100237230ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/transmission/urls.py000066400000000000000000000015471266051671100220300ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Transmission module. """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/transmission/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/transmission/views.py000066400000000000000000000075251266051671100222020ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for configuring Transmission Server """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ import json import logging import socket from .forms import TransmissionForm from plinth import actions from plinth import package from plinth.modules import transmission logger = logging.getLogger(__name__) TRANSMISSION_CONFIG = '/etc/transmission-daemon/settings.json' def on_install(): """Enable transmission as soon as it is installed.""" new_configuration = {'rpc-whitelist-enabled': False} actions.superuser_run('transmission', ['merge-configuration'], input=json.dumps(new_configuration).encode()) actions.superuser_run('transmission', ['enable']) transmission.service.notify_enabled(None, True) @package.required(['transmission-daemon'], on_install=on_install) def index(request): """Serve configuration page.""" status = get_status() form = None if request.method == 'POST': form = TransmissionForm(request.POST, prefix='transmission') # pylint: disable=E1101 if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = TransmissionForm(initial=status, prefix='transmission') else: form = TransmissionForm(initial=status, prefix='transmission') return TemplateResponse(request, 'transmission.html', {'title': _('BitTorrent (Transmission)'), 'status': status, 'form': form}) def get_status(): """Get the current settings from Transmission server.""" configuration = open(TRANSMISSION_CONFIG, 'r').read() status = json.loads(configuration) status = {key.translate(str.maketrans({'-': '_'})): value for key, value in status.items()} status['enabled'] = transmission.is_enabled() status['is_running'] = transmission.is_running() status['hostname'] = socket.gethostname() return status def _apply_changes(request, old_status, new_status): """Apply the changes""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('transmission', [sub_command]) transmission.service.notify_enabled(None, new_status['enabled']) modified = True if old_status['download_dir'] != new_status['download_dir'] or \ old_status['rpc_username'] != new_status['rpc_username'] or \ old_status['rpc_password'] != new_status['rpc_password']: new_configuration = { 'download-dir': new_status['download_dir'], 'rpc-username': new_status['rpc_username'], 'rpc-password': new_status['rpc_password'], } actions.superuser_run('transmission', ['merge-configuration'], input=json.dumps(new_configuration).encode()) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/modules/upgrades/000077500000000000000000000000001266051671100175435ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/upgrades/__init__.py000066400000000000000000000020261266051671100216540ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for upgrades """ from django.utils.translation import ugettext_lazy as _ from plinth import cfg depends = ['plinth.modules.system'] def init(): """Initialize the module.""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Software Upgrades'), 'glyphicon-refresh', 'upgrades:index', 21) Plinth-0.8.1/plinth/modules/upgrades/forms.py000066400000000000000000000023361266051671100212470ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring unattended-upgrades. """ from django import forms from django.utils.translation import ugettext_lazy as _ class ConfigureForm(forms.Form): """Configuration form to enable/disable automatic upgrades.""" auto_upgrades_enabled = forms.BooleanField( label=_('Enable automatic upgrades'), required=False, help_text=_('When enabled, the unattended-upgrades program will be run ' 'once per day. It will attempt to perform any package ' 'upgrades that are available.')) Plinth-0.8.1/plinth/modules/upgrades/templates/000077500000000000000000000000001266051671100215415ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/upgrades/templates/upgrades.html000066400000000000000000000044631266051671100242500ustar00rootroot00000000000000{% extends 'base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block page_head %} {% if is_busy %} {% endif %} {% endblock %} {% block content %}

    {{ title }}

    {% blocktrans trimmed %} Upgrades install the latest software and security updates. When automatic upgrades are enabled, upgrades are automatically run every night. You don't normally need to start the upgrade process. {% endblocktrans %}

    {% blocktrans trimmed %} Depending on the number of packages to install, this may take a long time to complete. While upgrades are in progress, you will not be able to install other packages. During the upgrade, this web interface may be temporarily unavailable and show an error. Refresh the page to continue. {% endblocktrans %}

    {% if not is_busy %}
    {% csrf_token %}
    {% endif %} {% if is_busy %}

    {% trans "A package manager is running." %}

    {% endif %} {% if log %}
    {% trans "Recent log from upgrades:" %}
    {{ log }}
    {% endif %} {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/upgrades/templates/upgrades_configure.html000066400000000000000000000020271266051671100263030ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {{ title }}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/upgrades/tests/000077500000000000000000000000001266051671100207055ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/upgrades/tests/__init__.py000066400000000000000000000000001266051671100230040ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/upgrades/urls.py000066400000000000000000000016371266051671100211110ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the upgrades module """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^sys/upgrades/$', views.index, name='index'), url(r'^sys/upgrades/upgrade/$', views.upgrade, name='upgrade'), ] Plinth-0.8.1/plinth/modules/upgrades/views.py000066400000000000000000000107321266051671100212550ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module for upgrades """ from django.contrib import messages from django.core.urlresolvers import reverse_lazy from django.shortcuts import redirect from django.template.response import TemplateResponse from django.utils.translation import ugettext as _, ugettext_lazy from django.views.decorators.http import require_POST import subprocess from .forms import ConfigureForm from plinth import actions from plinth import package from plinth.errors import ActionError subsubmenu = [{'url': reverse_lazy('upgrades:index'), 'text': ugettext_lazy('Automatic Upgrades')}, {'url': reverse_lazy('upgrades:upgrade'), 'text': ugettext_lazy('Upgrade Packages')}] LOG_FILE = '/var/log/unattended-upgrades/unattended-upgrades.log' LOCK_FILE = '/var/log/dpkg/lock' def on_install(): """Enable automatic upgrades after install.""" actions.superuser_run('upgrades', ['enable-auto']) @package.required(['unattended-upgrades'], on_install=on_install) def index(request): """Serve the configuration form.""" status = get_status() form = None if request.method == 'POST': form = ConfigureForm(request.POST, prefix='upgrades') if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = ConfigureForm(initial=status, prefix='upgrades') else: form = ConfigureForm(initial=status, prefix='upgrades') return TemplateResponse(request, 'upgrades_configure.html', {'title': _('Automatic Upgrades'), 'form': form, 'subsubmenu': subsubmenu}) def is_package_manager_busy(): """Return whether a package manager is running.""" try: subprocess.check_output(['lsof', '/var/lib/dpkg/lock']) return True except subprocess.CalledProcessError: return False def get_log(): """Return the current log for unattended upgrades.""" try: with open(LOG_FILE, 'r') as file_handle: return file_handle.read() except IOError: return None @package.required(['unattended-upgrades'], on_install=on_install) def upgrade(request): """Serve the upgrade page.""" is_busy = is_package_manager_busy() if request.method == 'POST': try: actions.superuser_run('upgrades', ['run']) messages.success(request, _('Upgrade process started.')) is_busy = True except ActionError: messages.error(request, _('Starting upgrade failed.')) return TemplateResponse(request, 'upgrades.html', {'title': _('Package Upgrades'), 'subsubmenu': subsubmenu, 'is_busy': is_busy, 'log': get_log()}) def get_status(): """Return the current status.""" output = actions.run('upgrades', ['check-auto']) return {'auto_upgrades_enabled': 'True' in output.split()} def _apply_changes(request, old_status, new_status): """Apply the form changes.""" if old_status['auto_upgrades_enabled'] \ == new_status['auto_upgrades_enabled']: messages.info(request, _('Setting unchanged')) return if new_status['auto_upgrades_enabled']: option = 'enable-auto' else: option = 'disable-auto' try: actions.superuser_run('upgrades', [option]) except ActionError as exception: error = exception.args[2] messages.error( request, _('Error when configuring unattended-upgrades: {error}') .format(error=error)) return if option == 'enable-auto': messages.success(request, _('Automatic upgrades enabled')) else: messages.success(request, _('Automatic upgrades disabled')) Plinth-0.8.1/plinth/modules/users/000077500000000000000000000000001266051671100170725ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/users/__init__.py000066400000000000000000000036651266051671100212150ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to manage users """ from django.utils.translation import ugettext_lazy as _ import json import subprocess from plinth import cfg from plinth import actions from plinth import action_utils depends = ['plinth.modules.system'] def init(): """Intialize the user module.""" menu = cfg.main_menu.get('system:index') menu.add_urlname(_('Users and Groups'), 'glyphicon-user', 'users:index', 15) def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(389, 'tcp4')) results.append(action_utils.diagnose_port_listening(389, 'tcp6')) results.append(_diagnose_ldap_entry('dc=thisbox')) results.append(_diagnose_ldap_entry('ou=people')) results.append(_diagnose_ldap_entry('ou=groups')) return results def _diagnose_ldap_entry(search_item): """Diagnose that an LDAP entry exists.""" result = 'failed' try: subprocess.check_output(['ldapsearch', '-x', '-b', 'dc=thisbox', search_item]) result = 'passed' except subprocess.CalledProcessError: pass return [_('Check LDAP entry "{search_item}"') .format(search_item=search_item), result] Plinth-0.8.1/plinth/modules/users/forms.py000066400000000000000000000163351266051671100206020ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django import forms from django.contrib import messages from django.contrib.auth.models import User, Group from django.contrib.auth.forms import UserCreationForm, SetPasswordForm from django.utils.translation import ugettext as _, ugettext_lazy from plinth import actions from plinth.errors import ActionError GROUP_CHOICES = ( ('admin', _('admin')), ('wiki', _('wiki')), ) class CreateUserForm(UserCreationForm): """Custom user create form. Include options to add user to groups. """ groups = forms.MultipleChoiceField( choices=GROUP_CHOICES, label=ugettext_lazy('Groups'), required=False, widget=forms.CheckboxSelectMultiple, help_text=\ ugettext_lazy('Select which services should be available to the new ' 'user. The user will be able to log in to services that ' 'support single sign-on through LDAP, if they are in the ' 'appropriate group.

    Users in the admin group ' 'will be able to log in to all services. They can also ' 'log in to the system through SSH and have ' 'administrative privileges (sudo).')) def __init__(self, request, *args, **kwargs): """Initialize the form with extra request argument.""" self.request = request super(CreateUserForm, self).__init__(*args, **kwargs) def save(self, commit=True): """Save the user model and create LDAP user if required.""" user = super(CreateUserForm, self).save(commit) if commit: try: actions.superuser_run( 'ldap', ['create-user', user.get_username()], input=self.cleaned_data['password1'].encode()) except ActionError: messages.error(self.request, _('Creating LDAP user failed.')) for group in self.cleaned_data['groups']: try: actions.superuser_run( 'ldap', ['add-user-to-group', user.get_username(), group]) except ActionError: messages.error( self.request, _('Failed to add new user to {group} group.') .format(group=group)) group_object, created = Group.objects.get_or_create(name=group) group_object.user_set.add(user) return user class UserUpdateForm(forms.ModelForm): """When user info is changed, also updates LDAP user.""" ssh_keys = forms.CharField( label=ugettext_lazy('SSH Keys'), required=False, widget=forms.Textarea, help_text=\ ugettext_lazy('Setting an SSH public key will allow this user to ' 'securely log in to the system without using a ' 'password. You may enter multiple keys, one on each ' 'line. Blank lines and lines starting with # will be ' 'ignored.')) class Meta: """Metadata to control automatic form building.""" fields = ('username', 'groups', 'ssh_keys', 'is_active') model = User widgets = { 'groups': forms.widgets.CheckboxSelectMultiple(), } def __init__(self, request, username, *args, **kwargs): """Initialize the form with extra request argument.""" for group, group_name in GROUP_CHOICES: Group.objects.get_or_create(name=group) self.request = request self.username = username super(UserUpdateForm, self).__init__(*args, **kwargs) def save(self, commit=True): """Update LDAP user name and groups after saving user model.""" user = super(UserUpdateForm, self).save(commit) if commit: output = actions.superuser_run( 'ldap', ['get-user-groups', self.username]) old_groups = output.strip().split('\n') old_groups = [group for group in old_groups if group] if self.username != user.get_username(): try: actions.superuser_run( 'ldap', ['rename-user', self.username, user.get_username()]) except ActionError: messages.error(self.request, _('Renaming LDAP user failed.')) new_groups = user.groups.values_list('name', flat=True) for old_group in old_groups: if old_group not in new_groups: try: actions.superuser_run( 'ldap', ['remove-user-from-group', user.get_username(), old_group]) except ActionError: messages.error(self.request, _('Failed to remove user from group.')) for new_group in new_groups: if new_group not in old_groups: try: actions.superuser_run( 'ldap', ['add-user-to-group', user.get_username(), new_group]) except ActionError: messages.error(self.request, _('Failed to add user to group.')) actions.superuser_run( 'ssh', ['set-keys', '--username', user.get_username(), '--keys', self.cleaned_data['ssh_keys'].strip()]) return user class UserChangePasswordForm(SetPasswordForm): """Custom form that also updates password for LDAP users.""" def __init__(self, request, *args, **kwargs): """Initialize the form with extra request argument.""" self.request = request super(UserChangePasswordForm, self).__init__(*args, **kwargs) def save(self, commit=True): """Save the user model and change LDAP password as well.""" user = super(UserChangePasswordForm, self).save(commit) if commit: try: actions.superuser_run( 'ldap', ['set-user-password', user.get_username()], input=self.cleaned_data['new_password1'].encode()) except ActionError: messages.error( self.request, _('Changing LDAP user password failed.')) return user Plinth-0.8.1/plinth/modules/users/templates/000077500000000000000000000000001266051671100210705ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/users/templates/users_change_password.html000066400000000000000000000025131266051671100263470ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% blocktrans trimmed with username=form.user.username %} Change Password for {{ username }} {% endblocktrans %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/users/templates/users_create.html000066400000000000000000000024651266051671100244510ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% endblock %} {% block content %}
    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/users/templates/users_delete.html000066400000000000000000000025331266051671100244440ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "Delete User" %}

    {% blocktrans trimmed with username=object.username %} Delete user {{ username }} permanently? {% endblocktrans %}

    {% csrf_token %} {% trans "Cancel" %}
    {% endblock %} Plinth-0.8.1/plinth/modules/users/templates/users_list.html000066400000000000000000000041431266051671100241540ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% endblock %} {% block content %}
    {% for user in object_list %}
    {{ user.username }} {% if not user.is_active %} {% endif %}
    {% endfor %}
    {% include "diagnostics_button.html" with module="users" %}
    {% endblock %} Plinth-0.8.1/plinth/modules/users/templates/users_update.html000066400000000000000000000031241266051671100244610ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% endblock %} {% block content %}

    {{ object.username }}

    {% url 'users:change_password' object.username as change_password_url %} {% blocktrans trimmed %} Use the change password form to change the password. {% endblocktrans %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/modules/users/tests/000077500000000000000000000000001266051671100202345ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/users/tests/__init__.py000066400000000000000000000000001266051671100223330ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/users/urls.py000066400000000000000000000031411266051671100204300ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the Users module """ from django.conf.urls import url from django.contrib.auth import views as auth_views from django.core.urlresolvers import reverse_lazy from . import views urlpatterns = [ url(r'^sys/users/$', views.UserList.as_view(), name='index'), url(r'^sys/users/create/$', views.UserCreate.as_view(), name='create'), url(r'^sys/users/(?P[\w.@+-]+)/edit/$', views.UserUpdate.as_view(), name='edit'), url(r'^sys/users/(?P[\w.@+-]+)/delete/$', views.UserDelete.as_view(), name='delete'), url(r'^sys/users/(?P[\w.@+-]+)/change_password/$', views.UserChangePassword.as_view(), name='change_password'), # Add Django's login/logout urls url(r'^accounts/login/$', auth_views.login, {'template_name': 'login.html'}, name='login'), url(r'^accounts/logout/$', auth_views.logout, {'next_page': reverse_lazy('index')}, name='logout'), ] Plinth-0.8.1/plinth/modules/users/views.py000066400000000000000000000136101266051671100206020ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # from django.contrib import messages from django.contrib.auth import update_session_auth_hash from django.contrib.auth.models import User from django.contrib.messages.views import SuccessMessageMixin from django.core.urlresolvers import reverse, reverse_lazy from django.views.generic.edit import (CreateView, DeleteView, UpdateView, FormView) from django.views.generic import ListView from django.utils.translation import ugettext as _, ugettext_lazy from .forms import CreateUserForm, UserChangePasswordForm, UserUpdateForm from plinth import actions from plinth.errors import ActionError subsubmenu = [{'url': reverse_lazy('users:index'), 'text': ugettext_lazy('Users')}, {'url': reverse_lazy('users:create'), 'text': ugettext_lazy('Create User')}] class ContextMixin(object): """Mixin to add 'subsubmenu' and 'title' to the context.""" def get_context_data(self, **kwargs): """Use self.title and the module-level subsubmenu""" context = super(ContextMixin, self).get_context_data(**kwargs) context['subsubmenu'] = subsubmenu context['title'] = getattr(self, 'title', '') return context class UserCreate(ContextMixin, SuccessMessageMixin, CreateView): """View to create a new user.""" form_class = CreateUserForm template_name = 'users_create.html' model = User success_message = ugettext_lazy('User %(username)s created.') success_url = reverse_lazy('users:create') title = ugettext_lazy('Create User') def get_form_kwargs(self): """Make the request object available to the form.""" kwargs = super(UserCreate, self).get_form_kwargs() kwargs['request'] = self.request return kwargs class UserList(ContextMixin, ListView): """View to list users.""" model = User template_name = 'users_list.html' title = ugettext_lazy('Users') class UserUpdate(ContextMixin, SuccessMessageMixin, UpdateView): """View to update a user's details.""" template_name = 'users_update.html' model = User form_class = UserUpdateForm slug_field = 'username' success_message = ugettext_lazy('User %(username)s updated.') title = ugettext_lazy('Edit User') def get_form_kwargs(self): """Make the requst object available to the form.""" kwargs = super(UserUpdate, self).get_form_kwargs() kwargs['request'] = self.request kwargs['username'] = self.object.username return kwargs def get_initial(self): """Return the data for initial form load.""" initial = super(UserUpdate, self).get_initial() initial['ssh_keys'] = actions.superuser_run( 'ssh', ['get-keys', '--username', self.object.username]).strip() return initial def get_success_url(self): """Return the URL to redirect to in case of successful updation.""" return reverse('users:edit', kwargs={'slug': self.object.username}) class UserDelete(ContextMixin, DeleteView): """Handle deleting users, showing a confirmation dialog first. On GET, display a confirmation page. On POST, delete the user. """ template_name = 'users_delete.html' model = User slug_field = 'username' success_url = reverse_lazy('users:index') title = ugettext_lazy('Delete User') def delete(self, *args, **kwargs): """Set the success message of deleting the user. The SuccessMessageMixin doesn't work with the DeleteView on Django1.7, so set the success message manually here. """ output = super(UserDelete, self).delete(*args, **kwargs) message = _('User {user} deleted.').format(user=self.kwargs['slug']) messages.success(self.request, message) try: actions.superuser_run('ldap', ['delete-user', self.kwargs['slug']]) except ActionError: messages.error(self.request, _('Deleting LDAP user failed.')) return output class UserChangePassword(ContextMixin, SuccessMessageMixin, FormView): """View to change user password.""" template_name = 'users_change_password.html' form_class = UserChangePasswordForm title = ugettext_lazy('Change Password') success_message = ugettext_lazy('Password changed successfully.') def get_form_kwargs(self): """Make the user object available to the form.""" kwargs = super(UserChangePassword, self).get_form_kwargs() kwargs['request'] = self.request kwargs['user'] = User.objects.get(username=self.kwargs['slug']) return kwargs def get_success_url(self): """Return the URL to go to on successful sumbission.""" return reverse('users:edit', kwargs={'slug': self.kwargs['slug']}) def form_valid(self, form): """Save the form if the submission is valid. Django user session authentication hashes are based on password to have the ability to logout all sessions on password change. Update the session authentications to ensure that the current sessions is not logged out. """ form.save() update_session_auth_hash(self.request, form.user) return super(UserChangePassword, self).form_valid(form) Plinth-0.8.1/plinth/modules/xmpp/000077500000000000000000000000001266051671100167155ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/xmpp/__init__.py000066400000000000000000000074371266051671100210410ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure XMPP server """ from django.utils.translation import ugettext_lazy as _ import json from plinth import actions from plinth import action_utils from plinth import cfg from plinth import service as service_module from plinth.signals import pre_hostname_change, post_hostname_change from plinth.signals import domainname_change depends = ['plinth.modules.apps'] service = None def init(): """Initialize the XMPP module""" menu = cfg.main_menu.get('apps:index') menu.add_urlname(_('Chat Server (XMPP)'), 'glyphicon-comment', 'xmpp:index', 400) global service service = service_module.Service( 'xmpp', _('Chat Server (XMPP)'), ['xmpp-client', 'xmpp-server', 'xmpp-bosh'], is_external=True, enabled=is_enabled()) pre_hostname_change.connect(on_pre_hostname_change) post_hostname_change.connect(on_post_hostname_change) domainname_change.connect(on_domainname_change) def is_enabled(): """Return whether the module is enabled.""" return (action_utils.service_is_enabled('ejabberd') and action_utils.webserver_is_enabled('jwchat-plinth')) def is_running(): """Return whether the service is running.""" return action_utils.service_is_running('ejabberd') def on_pre_hostname_change(sender, old_hostname, new_hostname, **kwargs): """ Backup ejabberd database before hostname is changed. """ del sender # Unused del kwargs # Unused actions.superuser_run('xmpp', ['pre-change-hostname', '--old-hostname', old_hostname, '--new-hostname', new_hostname]) def on_post_hostname_change(sender, old_hostname, new_hostname, **kwargs): """ Update ejabberd and jwchat config after hostname is changed. """ del sender # Unused del kwargs # Unused actions.superuser_run('xmpp', ['change-hostname', '--old-hostname', old_hostname, '--new-hostname', new_hostname], async=True) def on_domainname_change(sender, old_domainname, new_domainname, **kwargs): """ Update ejabberd and jwchat config after domain name is changed. """ del sender # Unused del old_domainname # Unused del kwargs # Unused actions.superuser_run('xmpp', ['change-domainname', '--domainname', new_domainname], async=True) def diagnose(): """Run diagnostics and return the results.""" results = [] results.append(action_utils.diagnose_port_listening(5222, 'tcp4')) results.append(action_utils.diagnose_port_listening(5222, 'tcp6')) results.append(action_utils.diagnose_port_listening(5269, 'tcp4')) results.append(action_utils.diagnose_port_listening(5269, 'tcp6')) results.append(action_utils.diagnose_port_listening(5280, 'tcp4')) results.append(action_utils.diagnose_port_listening(5280, 'tcp6')) results.extend(action_utils.diagnose_url_on_all('http://{host}/jwchat')) return results Plinth-0.8.1/plinth/modules/xmpp/forms.py000066400000000000000000000017451266051671100204240ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Forms for configuring XMPP service. """ from django import forms from django.utils.translation import ugettext_lazy as _ class XmppForm(forms.Form): # pylint: disable=W0232 """XMPP configuration form.""" enabled = forms.BooleanField( label=_('Enable XMPP'), required=False) Plinth-0.8.1/plinth/modules/xmpp/templates/000077500000000000000000000000001266051671100207135ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/xmpp/templates/xmpp.html000066400000000000000000000046011266051671100225660ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}

    {% trans "Chat Server (XMPP)" %}

    {% blocktrans trimmed %} XMPP is an open and standardized communication protocol. Here you can run and configure your XMPP server, called ejabberd. {% endblocktrans %}

    {% blocktrans trimmed %} To actually communicate, you can use the web client or any other XMPP client. {% endblocktrans %}

    {% url 'config:index' as index_url %} {% blocktrans trimmed with domainname=status.domainname %} Your XMPP server domain is set to {{ domainname }}. User IDs will look like username@{{ domainname }}. You can setup your domain on the system Configure page. {% endblocktrans %}

    {% trans "Launch web client" %}

    {% trans "Status" %}

    {% if status.is_running %} {% trans "ejabberd is running" %} {% else %} {% trans "ejabberd is not running" %} {% endif %}

    {% include "diagnostics_button.html" with module="xmpp" %}

    {% trans "Configuration" %}

    {% csrf_token %} {{ form|bootstrap }}
    {% endblock %} Plinth-0.8.1/plinth/modules/xmpp/tests/000077500000000000000000000000001266051671100200575ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/xmpp/tests/__init__.py000066400000000000000000000000001266051671100221560ustar00rootroot00000000000000Plinth-0.8.1/plinth/modules/xmpp/urls.py000066400000000000000000000015251266051671100202570ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ URLs for the XMPP module """ from django.conf.urls import url from . import views urlpatterns = [ url(r'^apps/xmpp/$', views.index, name='index'), ] Plinth-0.8.1/plinth/modules/xmpp/views.py000066400000000000000000000060371266051671100204320ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth module to configure XMPP server """ from django.contrib import messages from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ import logging import socket from .forms import XmppForm from plinth import actions from plinth import package from plinth.modules import xmpp logger = logging.getLogger(__name__) def get_domainname(): """Return the domainname""" fqdn = socket.getfqdn() return '.'.join(fqdn.split('.')[1:]) def before_install(): """Preseed debconf values before the packages are installed.""" domainname = get_domainname() logger.info('XMPP service domainname - %s', domainname) actions.superuser_run('xmpp', ['pre-install', '--domainname', domainname]) def on_install(): """Setup jwchat apache conf""" actions.superuser_run('xmpp', ['setup']) xmpp.service.notify_enabled(None, True) @package.required(['jwchat', 'ejabberd'], before_install=before_install, on_install=on_install) def index(request): """Serve configuration page""" status = get_status() form = None if request.method == 'POST': form = XmppForm(request.POST, prefix='xmpp') if form.is_valid(): _apply_changes(request, status, form.cleaned_data) status = get_status() form = XmppForm(initial=status, prefix='xmpp') else: form = XmppForm(initial=status, prefix='xmpp') return TemplateResponse(request, 'xmpp.html', {'title': _('Chat Server (XMPP)'), 'status': status, 'form': form}) def get_status(): """Get the current settings.""" status = {'enabled': xmpp.is_enabled(), 'is_running': xmpp.is_running(), 'domainname': get_domainname()} return status def _apply_changes(request, old_status, new_status): """Apply the changes.""" modified = False if old_status['enabled'] != new_status['enabled']: sub_command = 'enable' if new_status['enabled'] else 'disable' actions.superuser_run('xmpp', [sub_command]) xmpp.service.notify_enabled(None, new_status['enabled']) modified = True if modified: messages.success(request, _('Configuration updated')) else: messages.info(request, _('Setting unchanged')) Plinth-0.8.1/plinth/network.py000066400000000000000000000407131266051671100163310ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Helper functions for working with network manager. """ import collections from django.utils.translation import ugettext_lazy as _ import logging import socket import struct import subprocess import uuid from plinth.utils import import_from_gi glib = import_from_gi('GLib', '2.0') nm = import_from_gi('NM', '1.0') logger = logging.getLogger(__name__) CONNECTION_TYPE_NAMES = collections.OrderedDict([ ('802-3-ethernet', _('Ethernet')), ('802-11-wireless', _('Wi-Fi')), ('pppoe', _('PPPoE')) ]) class ConnectionNotFound(Exception): """Network connection with a given name could not be found.""" pass class DeviceNotFound(Exception): """Network device for specified operation could not be found.""" pass def ipv4_string_to_int(address): """Return an integer equivalent of a string contain IPv4 address.""" return struct.unpack('=I', socket.inet_aton(address))[0] def ipv4_int_to_string(address_int): """Return an string equivalent of a integer IPv4 address.""" return socket.inet_ntoa(struct.pack('=I', address_int)) def _callback(source_object, result, user_data): """Called when an operation is completed.""" del source_object # Unused del result # Unused del user_data # Unused def _commit_callback(connection, error, data=None): """Called when the connection changes are committed.""" del connection del error del data def get_interface_list(device_type): """Get a list of network interface available on the system.""" interfaces = {} for device in nm.Client.new(None).get_devices(): if device.get_device_type() == device_type: interfaces[device.get_iface()] = device.get_hw_address() return interfaces def get_status_from_connection(connection): """Return the current status of a connection.""" status = collections.defaultdict(dict) status['id'] = connection.get_id() status['uuid'] = connection.get_uuid() status['type'] = connection.get_connection_type() status['zone'] = connection.get_setting_connection().get_zone() status['interface_name'] = connection.get_interface_name() status['ipv4']['method'] = connection.get_setting_ip4_config().get_method() status['ipv6']['method'] = connection.get_setting_ip6_config().get_method() if status['type'] == '802-11-wireless': setting_wireless = connection.get_setting_wireless() status['wireless']['ssid'] = setting_wireless.get_ssid().get_data() primary_connection = nm.Client.new(None).get_primary_connection() status['primary'] = ( primary_connection and primary_connection.get_uuid() == connection.get_uuid() ) return status def get_status_from_active_connection(connection): """Return the current status of an active connection.""" status = collections.defaultdict(dict) status['state'] = connection.get_state().value_name status['ip4']['default'] = connection.get_default() status['ip6']['default'] = connection.get_default6() return status def get_status_from_device(device): """Return a dictionary with current status of a network device.""" if not device: return None status = collections.defaultdict(dict) ip4_config = device.get_ip4_config() if ip4_config: addresses = ip4_config.get_addresses() status['ip4']['addresses'] = [{'address': address.get_address(), 'prefix': address.get_prefix()} for address in addresses] status['ip4']['gateway'] = ip4_config.get_gateway() status['ip4']['nameservers'] = ip4_config.get_nameservers() ip6_config = device.get_ip6_config() if ip6_config: addresses = ip6_config.get_addresses() status['ip6']['addresses'] = [{'address': address.get_address(), 'prefix': address.get_prefix()} for address in addresses] status['ip6']['gateway'] = ip6_config.get_gateway() status['ip6']['nameservers'] = ip6_config.get_nameservers() status['type'] = device.get_type_description() status['description'] = device.get_description() status['hw_address'] = device.get_hw_address() status['interface_name'] = device.get_iface() status['state'] = device.get_state().value_nick status['state_reason'] = device.get_state_reason().value_nick if device.get_device_type() == nm.DeviceType.WIFI: status['wireless']['bitrate'] = device.get_bitrate() / 1000 status['wireless']['mode'] = device.get_mode().value_nick if device.get_device_type() == nm.DeviceType.ETHERNET: status['ethernet']['speed'] = device.get_speed() status['ethernet']['carrier'] = device.get_carrier() return status def get_status_from_wifi_access_point(device, ssid): """Return the current status of an access point.""" status = {} if not ssid or not device: return status for access_point in device.get_access_points(): if access_point.get_ssid().get_data() == ssid: status['strength'] = access_point.get_strength() frequency = access_point.get_frequency() status['channel'] = _get_wifi_channel_from_frequency(frequency) break return status def _get_wifi_channel_from_frequency(frequency): """Get the wifi channel form a particular SSID""" # TODO: Hard coded list of wifi frequencys and their corresponding # channel numbers. Search for a better solution! Even 5GHz is # not included yet. Only the plain frequency will show up on 5GHz # AP's. channel_map = {2412: 1, 2417: 2, 2422: 3, 2427: 4, 2432: 5, 2437: 6, 2442: 7, 2447: 8, 2452: 9, 2457: 10, 2462: 11} try: return channel_map[frequency] except KeyError: return str(frequency / 1000) + 'GHz' def get_first_ip_address_from_connection(connection): """Return the first IP address of a connection setting. XXX: Work around a bug in NetworkManager/Python GI. Remove after the bug if fixed. https://bugzilla.gnome.org/show_bug.cgi?id=756380. """ command = ['nmcli', '--terse', '--mode', 'tabular', '--fields', 'ipv4.addresses', 'connection', 'show', connection.get_uuid()] output = subprocess.check_output(command).decode() first = output.strip().split(', ')[0] if not first: return None, None ip_address, prefix = first.split('/') netmask = nm.utils_ip4_prefix_to_netmask(int(prefix)) return ip_address, ipv4_int_to_string(netmask) def get_connection_list(): """Get a list of active and available connections.""" active_uuids = [] client = nm.Client.new(None) for connection in client.get_active_connections(): active_uuids.append(connection.get_uuid()) connections = [] for connection in client.get_connections(): # Display a friendly type name if known. connection_type = connection.get_connection_type() connection_type_name = CONNECTION_TYPE_NAMES.get(connection_type, connection_type) settings_connection = connection.get_setting_connection() zone = settings_connection.get_zone() connection.get_interface_name() connections.append({ 'name': connection.get_id(), 'uuid': connection.get_uuid(), 'interface_name': connection.get_interface_name(), 'type': connection_type, 'type_name': connection_type_name, 'is_active': connection.get_uuid() in active_uuids, 'zone': zone, }) connections.sort(key=lambda connection: connection['is_active'], reverse=True) return connections def get_connection(connection_uuid): """Return connection with matching uuid. Raise ConnectionNotFound if a connection with that uuid is not found. """ client = nm.Client.new(None) connection = client.get_connection_by_uuid(connection_uuid) if not connection: raise ConnectionNotFound(connection_uuid) return connection def get_active_connection(connection_uuid): """Return active connection with matching UUID. Raise ConnectionNotFound if a connection with that uuid is not found. """ connections = nm.Client.new(None).get_active_connections() connections = {connection.get_uuid(): connection for connection in connections} try: return connections[connection_uuid] except KeyError: raise ConnectionNotFound(connection_uuid) def get_device_by_interface_name(interface_name): """Return a device by interface name.""" return nm.Client.new(None).get_device_by_iface(interface_name) def _update_common_settings(connection, connection_uuid, common): """Create/edit basic settings for network manager connections. Return newly created connection object if connection is None. """ if not connection: connection = nm.SimpleConnection.new() settings = connection.get_setting_connection() if not settings: settings = nm.SettingConnection.new() connection.add_setting(settings) settings.set_property(nm.SETTING_CONNECTION_UUID, connection_uuid) settings.set_property(nm.SETTING_CONNECTION_ID, common['name']) settings.set_property(nm.SETTING_CONNECTION_TYPE, common['type']) settings.set_property(nm.SETTING_CONNECTION_INTERFACE_NAME, common['interface']) settings.set_property(nm.SETTING_CONNECTION_ZONE, common['zone']) return connection def _update_ipv4_settings(connection, ipv4): """Edit IPv4 settings for network manager connections.""" settings = nm.SettingIP4Config.new() connection.add_setting(settings) settings.set_property(nm.SETTING_IP_CONFIG_METHOD, ipv4['method']) if ipv4['method'] == nm.SETTING_IP4_CONFIG_METHOD_MANUAL and \ ipv4['address']: ipv4_address_int = ipv4_string_to_int(ipv4['address']) if not ipv4['netmask']: ipv4_netmask_int = nm.utils_ip4_get_default_prefix( ipv4_address_int) else: ipv4_netmask_int = nm.utils_ip4_netmask_to_prefix( ipv4_string_to_int(ipv4['netmask'])) address = nm.IPAddress.new(socket.AF_INET, ipv4['address'], ipv4_netmask_int) settings.add_address(address) if not ipv4['gateway']: settings.set_property(nm.SETTING_IP_CONFIG_GATEWAY, '0.0.0.0') else: settings.set_property(nm.SETTING_IP_CONFIG_GATEWAY, ipv4['gateway']) else: if ipv4['dns'] or ipv4['second_dns']: settings.set_property(nm.SETTING_IP_CONFIG_IGNORE_AUTO_DNS, True) if ipv4['dns']: settings.add_dns(ipv4['dns']) if ipv4['second_dns']: settings.add_dns(ipv4['second_dns']) def _update_pppoe_settings(connection, pppoe): """Create/edit PPPoE settings for network manager connections.""" # PPPoE settings = connection.get_setting_pppoe() if not settings: settings = nm.SettingPppoe.new() connection.add_setting(settings) settings.set_property(nm.SETTING_PPPOE_USERNAME, pppoe['username']) settings.set_property(nm.SETTING_PPPOE_PASSWORD, pppoe['password']) settings = connection.get_setting_ppp() if not settings: settings = nm.SettingPpp.new() connection.add_setting(settings) # TODO: make this configurable? Some PPP peers don't respond to # echo requests according to NetworkManager documentation. settings.set_property(nm.SETTING_PPP_LCP_ECHO_FAILURE, 5) settings.set_property(nm.SETTING_PPP_LCP_ECHO_INTERVAL, 30) return connection def _update_wireless_settings(connection, wireless): """Create/edit wifi settings for network manager connections.""" key_mgmt = 'wpa-psk' # Wireless settings = connection.get_setting_wireless() if not settings: settings = nm.SettingWireless.new() connection.add_setting(settings) ssid_gbytes = glib.Bytes.new(wireless['ssid'].encode()) settings.set_property(nm.SETTING_WIRELESS_SSID, ssid_gbytes) settings.set_property(nm.SETTING_WIRELESS_MODE, wireless['mode']) # Wireless Security if wireless['auth_mode'] == 'wpa' and wireless['passphrase']: settings = connection.get_setting_wireless_security() if not settings: settings = nm.SettingWirelessSecurity.new() connection.add_setting(settings) settings.set_property(nm.SETTING_WIRELESS_SECURITY_KEY_MGMT, key_mgmt) settings.set_property(nm.SETTING_WIRELESS_SECURITY_PSK, wireless['passphrase']) else: connection.remove_setting(nm.SettingWirelessSecurity) return connection def _update_settings(connection, connection_uuid, settings): """Create/edit wifi settings for network manager connections.""" connection = _update_common_settings(connection, connection_uuid, settings['common']) if 'ipv4' in settings and settings['ipv4']: _update_ipv4_settings(connection, settings['ipv4']) if 'pppoe' in settings and settings['pppoe']: _update_pppoe_settings(connection, settings['pppoe']) if 'wireless' in settings and settings['wireless']: _update_wireless_settings(connection, settings['wireless']) return connection def add_connection(settings): """Add an connection in network manager. Return the UUID for the connection. """ connection_uuid = str(uuid.uuid4()) connection = _update_settings(None, connection_uuid, settings) client = nm.Client.new(None) client.add_connection_async(connection, True, None, _callback, None) return connection_uuid def edit_connection(connection, settings): """Edit an existing connection in network manager.""" _update_settings(connection, connection.get_uuid(), settings) connection.commit_changes(True) def activate_connection(connection_uuid): """Find and activate a network connection.""" connection = get_connection(connection_uuid) interface = connection.get_interface_name() client = nm.Client.new(None) for device in client.get_devices(): if device.get_iface() == interface: client.activate_connection_async( connection, device, '/', None, _callback, None) break else: raise DeviceNotFound(connection) return connection def deactivate_connection(connection_uuid): """Find and de-activate a network connection.""" active_connection = get_active_connection(connection_uuid) nm.Client.new(None).deactivate_connection(active_connection) return active_connection def delete_connection(connection_uuid): """Delete an exiting connection from network manager. Raise ConnectionNotFound if connection does not exist. """ connection = get_connection(connection_uuid) name = connection.get_id() connection.delete() return name def wifi_scan(): """Scan for available access points across all Wi-Fi devices.""" access_points = [] for device in nm.Client.new(None).get_devices(): if device.get_device_type() != nm.DeviceType.WIFI: continue for access_point in device.get_access_points(): # Retrieve the bytes in SSID. Don't convert to utf-8 or # escape it in any way as it may contain null bytes. When # this is used in the URL it will be escaped properly and # unescaped when taken as view function's argument. ssid = access_point.get_ssid() ssid_string = ssid.get_data() if ssid else '' access_points.append({ 'interface_name': device.get_iface(), 'ssid': ssid_string, 'strength': access_point.get_strength()}) return access_points Plinth-0.8.1/plinth/package.py000066400000000000000000000270001266051671100162250ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Framework for installing and updating distribution packages """ from django.contrib import messages from django.utils.translation import ugettext as _ import functools import logging import threading import plinth from plinth.utils import import_from_gi glib = import_from_gi('GLib', '2.0') packagekit = import_from_gi('PackageKitGlib', '1.0') logger = logging.getLogger(__name__) transactions = {} packages_resolved = {} class PackageException(Exception): """A package operation has failed.""" def __init__(self, error_string=None, error_details=None, *args, **kwargs): """Store packagekit error string and details.""" super(PackageException, self).__init__(*args, **kwargs) self.error_string = error_string self.error_details = error_details class Transaction(object): """Information about an ongoing transaction.""" def __init__(self, package_names, before_install=None, on_install=None): """Initialize transaction object. Set most values to None until they are sent as progress update. """ self.package_names = package_names # XXX: This is hack, remove after implementing proper setup mechanism. self.before_install = before_install self.on_install = on_install # Progress self.allow_cancel = None self.percentage = None self.status = None self.status_string = None self.flags = None self.package = None self.package_id = None self.item_progress = None self.role = None self.caller_active = None self.download_size_remaining = None self.speed = None # Completion self.is_finished = False self.exception = None def get_id(self): """Return a identifier to use as a key in a map of transactions.""" return frozenset(self.package_names) def __str__(self): """Return the string representation of the object""" return ('Transaction(packages={0}, allow_cancel={1}, status={2}, ' ' percentage={3}, package={4}, item_progress={5})').format( self.package_names, self.allow_cancel, self.status_string, self.percentage, self.package, self.item_progress) def start_install(self): """Start a PackageKit transaction to install given list of packages. This operation is non-blocking at it spawns a new thread. """ thread = threading.Thread(target=self._install) thread.start() def _install(self): """Run a PackageKit transaction to install given packages.""" try: if self.before_install: self.before_install() except Exception as exception: logger.exception('Error during setup before install - %s', exception) self.finish(exception) return try: self._do_install() except PackageException as exception: self.finish(exception) return except glib.Error as exception: self.finish(PackageException(exception.message)) return try: if self.on_install: self.on_install() except Exception as exception: logger.exception('Error during setup - %s', exception) self.finish(exception) return self.finish() def _do_install(self): """Run a PackageKit transaction to install given packages. Raise exception in case of error. """ client = packagekit.Client() client.set_interactive(False) # Refresh package cache from all enabled repositories results = client.refresh_cache( False, None, self.progress_callback, self) self._assert_success(results) # Resolve packages again to get the latest versions after refresh results = client.resolve(packagekit.FilterEnum.INSTALLED, tuple(self.package_names) + (None, ), None, self.progress_callback, self) self._assert_success(results) for package in results.get_package_array(): packages_resolved[package.get_name()] = package package_ids = [] for package_name in self.package_names: if package_name not in packages_resolved or \ not packages_resolved[package_name]: raise PackageException(_('packages not found')) package_ids.append(packages_resolved[package_name].get_id()) # Start package installation results = client.install_packages( packagekit.TransactionFlagEnum.ONLY_TRUSTED, package_ids + [None], None, self.progress_callback, self) self._assert_success(results) def _assert_success(self, results): """Check that the most recent operation was a success.""" if results and results.get_error_code() is not None: error = results.get_error_code() error_code = error.get_code() if error else None error_string = packagekit.ErrorEnum.to_string(error_code) \ if error_code else None error_details = error.get_details() if error else None raise PackageException(error_string, error_details) def progress_callback(self, progress, progress_type, user_data): """Process progress updates on package resolve operation""" if progress_type == packagekit.ProgressType.PERCENTAGE: self.percentage = progress.props.percentage elif progress_type == packagekit.ProgressType.PACKAGE: self.package = progress.props.package elif progress_type == packagekit.ProgressType.ALLOW_CANCEL: self.allow_cancel = progress.props.allow_cancel elif progress_type == packagekit.ProgressType.PACKAGE_ID: self.package_id = progress.props.package_id elif progress_type == packagekit.ProgressType.ITEM_PROGRESS: self.item_progress = progress.props.item_progress elif progress_type == packagekit.ProgressType.STATUS: self.status = progress.props.status self.status_string = \ packagekit.StatusEnum.to_string(progress.props.status) elif progress_type == packagekit.ProgressType.TRANSACTION_FLAGS: self.flags = progress.props.transaction_flags elif progress_type == packagekit.ProgressType.ROLE: self.role = progress.props.role elif progress_type == packagekit.ProgressType.CALLER_ACTIVE: self.caller_active = progress.props.caller_active elif progress_type == packagekit.ProgressType.DOWNLOAD_SIZE_REMAINING: self.download_size_remaining = \ progress.props.download_size_remaining elif progress_type == packagekit.ProgressType.SPEED: self.speed = progress.props.speed else: logger.info('Unhandle packagekit progress callback - %s, %s', progress, progress_type) def finish(self, exception=None): """Mark transaction as complected and store exception if any.""" self.is_finished = True self.exception = exception def collect_result(self): """Retrieve the result of this transaction. Also remove self from global transactions list. """ assert self.is_finished del transactions[self.get_id()] return self.exception def required(package_names, before_install=None, on_install=None): """Decorate a view to check and install required packages.""" def wrapper2(func): """Return a function to check and install packages.""" @functools.wraps(func) def wrapper(request, *args, **kwargs): """Check and install packages required by a view.""" if not _should_show_install_view(request, package_names): return func(request, *args, **kwargs) view = plinth.views.PackageInstallView.as_view() return view(request, package_names=package_names, before_install=before_install, on_install=on_install, *args, **kwargs) return wrapper return wrapper2 def _should_show_install_view(request, package_names): """Return whether the installation view should be shown.""" transaction_id = frozenset(package_names) # No transaction in progress if transaction_id not in transactions: is_installed = check_installed(package_names) return not is_installed # Installing transaction = transactions[transaction_id] if not transaction.is_finished: return True # Transaction finished, waiting to show the result exception = transaction.collect_result() if not exception: messages.success(request, _('Installed and configured packages successfully.')) return False else: error_string = getattr(exception, 'error_string', str(exception)) error_details = getattr(exception, 'error_details', '') messages.error(request, _('Error installing packages: {string} {details}') .format(string=error_string, details=error_details)) return True def check_installed(package_names): """Return a boolean installed status of package. This operation is blocking and waits until the check is finished. """ def _callback(progress, progress_type, user_data): """Process progress updates on package resolve operation.""" pass client = packagekit.Client() response = client.resolve(packagekit.FilterEnum.INSTALLED, tuple(package_names) + (None, ), None, _callback, None) installed_package_names = [] for package in response.get_package_array(): if package.get_info() == packagekit.InfoEnum.INSTALLED: installed_package_names.append(package.get_name()) packages_resolved[package.get_name()] = package # When package names could not be resolved for package_name in package_names: if package_name not in packages_resolved: packages_resolved[package_name] = None return set(installed_package_names) == set(package_names) def is_installing(package_names): """Return whether a set of packages are currently being installed.""" return frozenset(package_names) in transactions def start_install(package_names, before_install=None, on_install=None): """Start a PackageKit transaction to install given list of packages. This operation is non-blocking at it spawns a new thread. """ transaction = Transaction(package_names, before_install=before_install, on_install=on_install) transactions[frozenset(package_names)] = transaction transaction.start_install() Plinth-0.8.1/plinth/service.py000066400000000000000000000051671266051671100163040ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Framework for working with servers and their services. """ import collections from django.utils.translation import ugettext_lazy as _ from plinth import cfg from plinth.signals import service_enabled from plinth.utils import format_lazy services = {} class Service(object): """ Representation of an application service provided by the machine containing information such as current status and ports required for operation. """ def __init__(self, service_id, name, ports=None, is_external=False, enabled=True): if not ports: ports = [service_id] self.service_id = service_id self.name = name self.ports = ports self.is_external = is_external self._enabled = enabled # Maintain a complete list of services services[service_id] = self def is_enabled(self): """Return whether the service is enabled.""" if isinstance(self._enabled, collections.Callable): return self._enabled() return self._enabled def notify_enabled(self, sender, enabled): """Notify observers about change in state of service.""" if not isinstance(self._enabled, collections.Callable): self._enabled = enabled service_enabled.send_robust(sender=sender, service_id=self.service_id, enabled=enabled) def init(): """Register some misc. services that don't fit elsewhere.""" Service('http', _('Web Server'), ['http'], is_external=True, enabled=True) Service('https', _('Web Server over Secure Socket Layer'), ['https'], is_external=True, enabled=True) Service('ssh', _('Secure Shell (SSH) Server'), ['ssh'], is_external=True, enabled=True) Service('plinth', format_lazy(_('{box_name} Web Interface (Plinth)'), box_name=_(cfg.box_name)), ['https'], is_external=True, enabled=True) Plinth-0.8.1/plinth/signals.py000066400000000000000000000024361266051671100163000ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Plinth signals """ from django.dispatch import Signal service_enabled = Signal(providing_args=['service_id', 'enabled']) pre_module_loading = Signal() post_module_loading = Signal() pre_hostname_change = Signal(providing_args=['old_hostname', 'new_hostname']) post_hostname_change = Signal(providing_args=['old_hostname', 'new_hostname']) domainname_change = Signal(providing_args=['old_domainname', 'new_domainname']) domain_added = Signal(providing_args=['domain_type', 'name', 'description', 'services']) domain_removed = Signal(providing_args=['domain_type', 'name']) Plinth-0.8.1/plinth/templates/000077500000000000000000000000001266051671100162575ustar00rootroot00000000000000Plinth-0.8.1/plinth/templates/404.html000066400000000000000000000022661266051671100174620ustar00rootroot00000000000000{% extends 'base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

    {% trans "404" %}

    {% blocktrans trimmed %} Requested page {{ request_path }} was not found. {% endblocktrans %}

    {% blocktrans trimmed %} If you believe this missing page should exist, please file a bug at the Plinth project issue tracker. {% endblocktrans %}

    {% endblock %} Plinth-0.8.1/plinth/templates/500.html000066400000000000000000000021271266051671100174530ustar00rootroot00000000000000{% extends 'base.html' %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% block content %}

    {% trans "500" %}

    {% blocktrans trimmed %} This is an internal error and not something you caused or can fix. Please report the error on the bug tracker so we can fix it. {% endblocktrans %}

    {% endblock %} Plinth-0.8.1/plinth/templates/base.html000066400000000000000000000213041266051671100200570ustar00rootroot00000000000000{% load i18n %} {% load static %} {% load plinth_extras %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% block title %} {% if title %} {{ title }} {% else %} {{ box_name }} {% endif %} {% endblock %} {% block app_head %}{% endblock %} {% block page_head %}{% endblock %}
    {% block content_row %}
    {% block submenu %} {% if submenu %} {% endif %} {% endblock %} {% block sidebar %} {# this sidebar should contain help texts but no menus #} {% endblock %}
    {% block subsubmenu %} {% if subsubmenu %} {% show_subsubmenu subsubmenu %} {% endif %} {% endblock %} {% include 'messages.html' %} {% block content %} {# main content goes here #} {% endblock %}
    {% endblock %}

    {% block footer_block %} {% endblock %}
    {% block app_js %}{% endblock %} {% block page_js %}{% endblock %} Plinth-0.8.1/plinth/templates/login.html000066400000000000000000000024451266051671100202620ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block content %}
    {% csrf_token %}
    {{ form|bootstrap }}
    {% endblock %} {% block page_js %} {% endblock %} Plinth-0.8.1/plinth/templates/menu.html000066400000000000000000000023241266051671100201120ustar00rootroot00000000000000{% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} Plinth-0.8.1/plinth/templates/messages.html000066400000000000000000000016421266051671100207570ustar00rootroot00000000000000{% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} {% for message in messages %}
    × {{ message }}
    {% endfor %} Plinth-0.8.1/plinth/templates/package_install.html000066400000000000000000000050651266051671100222740ustar00rootroot00000000000000{% extends "base.html" %} {% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load bootstrap %} {% load i18n %} {% block page_head %} {% if is_installing %} {% endif %} {% endblock %} {% block content %}

    {% trans "Installation" %}

    {% if not is_installing %}

    {% blocktrans trimmed %} This feature requires addtional packages to be installed. Do you wish to install them? {% endblocktrans %}

    {% for package_name, package in packages.items %} {% endfor %}
    {% trans "Package" %} {% trans "Summary" %}
    {{ package_name }} {{ package.get_summary }}
    {% csrf_token %}
    {% else %} {% for key, transaction in transactions.items %}
    {% blocktrans trimmed with package_names=transaction.package_names|join:", " status=transaction.status_string %} Installing {{ package_names }}: {{ status }} {% endblocktrans %}
    {% blocktrans trimmed with percentage=transaction.percentage %} {{ percentage }}% complete {% endblocktrans %}
    {% endfor %} {% endif %} {% endblock %} Plinth-0.8.1/plinth/templates/submenu.html000066400000000000000000000022531266051671100206250ustar00rootroot00000000000000{% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} Plinth-0.8.1/plinth/templates/subsubmenu.html000066400000000000000000000017201266051671100213350ustar00rootroot00000000000000{% comment %} # # This file is part of Plinth. # # 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 . # {% endcomment %} {% load i18n %} Plinth-0.8.1/plinth/templatetags/000077500000000000000000000000001266051671100167535ustar00rootroot00000000000000Plinth-0.8.1/plinth/templatetags/__init__.py000066400000000000000000000000001266051671100210520ustar00rootroot00000000000000Plinth-0.8.1/plinth/templatetags/plinth_extras.py000066400000000000000000000036651266051671100222230ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # import os from django import template register = template.Library() def mark_active_menuitem(menu, path): """Mark the best-matching menu item with 'active' Input: a menu dict in the form of: [{'url': '/path/to/choice1/', 'text': 'choice 1'}, {'url': ...}] URL paths are expected to end with a slash for matches to work properly. Output: The same dictionary; the best-matching URL dict gets the value 'active': True. All other URL dicts get the value 'active': False. Note: this sets the 'active' values on the menu itself, not on a copy. """ best_match = '' best_match_item = None for urlitem in menu: urlitem['active'] = False if not path.startswith(str(urlitem['url'])): continue match = os.path.commonprefix([urlitem['url'], path]) if len(match) > len(best_match): best_match = match best_match_item = urlitem if best_match_item: best_match_item['active'] = True return menu @register.inclusion_tag('subsubmenu.html', takes_context=True) def show_subsubmenu(context, menu): """Mark the active menu item and display the subsubmenu""" menu = mark_active_menuitem(menu, context['request'].path) return {'subsubmenu': menu} Plinth-0.8.1/plinth/tests/000077500000000000000000000000001266051671100154235ustar00rootroot00000000000000Plinth-0.8.1/plinth/tests/__init__.py000066400000000000000000000015431266051671100175370ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Module initializer for Plinth test cases containing test suite """ import unittest TEST_SUITE = unittest.defaultTestLoader.discover('plinth.tests') Plinth-0.8.1/plinth/tests/coverage/000077500000000000000000000000001266051671100172165ustar00rootroot00000000000000Plinth-0.8.1/plinth/tests/coverage/__init__.py000066400000000000000000000000001266051671100213150ustar00rootroot00000000000000Plinth-0.8.1/plinth/tests/coverage/coverage.py000066400000000000000000000065221266051671100213700ustar00rootroot00000000000000#!/usr/bin/python3 # -*- mode: python; mode: auto-fill; fill-column: 80 -*- # # This file is part of Plinth. # # Derived from code sample at: # http://jeetworks.org/adding-test-code-coverage-analysis-to-a-python-projects-setup-command/ # # Copyright 2009 Jeet Sukumaran and Mark T. Holder. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 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 General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # """ Support for integration of code test coverage analysis with setuptools. """ import coverage import glob import setuptools import shutil import time # Project directories with testable source code SOURCE_DIRS = ['plinth'] + glob.glob('plinth/modules/*') # Files to exclude from coverage analysis and reporting FILES_TO_OMIT = [ 'plinth/tests/*.py', 'plinth/modules/*/tests/*.py' ] # Location of coverage HTML report files COVERAGE_REPORT_DIR = 'plinth/tests/coverage/report' class CoverageCommand(setuptools.Command): """ Subclass of setuptools Command to perform code test coverage analysis. """ description = 'Run test coverage analysis' user_options = [ ('test-module=', 't', 'Explicitly specify a single module to test') ] def initialize_options(self): """Initialize options to default values.""" self.test_module = None def finalize_options(self): pass def run(self): """Main command implementation.""" if self.distribution.install_requires: self.distribution.fetch_build_eggs( self.distribution.install_requires) if self.distribution.tests_require: self.distribution.fetch_build_eggs( self.distribution.tests_require) # Erase any existing HTML report files try: shutil.rmtree(COVERAGE_REPORT_DIR, True) except Exception: pass # Run the coverage analysis cov = coverage.coverage(auto_data=True, config_file=True, source=SOURCE_DIRS, omit=FILES_TO_OMIT) cov.erase() # Erase existing coverage data file cov.start() # Invoke the Django test setup and test runner logic from plinth.tests.runtests import run_tests run_tests(pattern=self.test_module, return_to_caller=True) cov.stop() # Generate an HTML report html_report_title = 'FreedomBox:Plinth -- Test Coverage as of ' + \ time.strftime('%x %X %Z') cov.html_report(directory=COVERAGE_REPORT_DIR, omit=FILES_TO_OMIT, title=html_report_title) # Print a detailed console report with the overall coverage percentage print() cov.report(omit=FILES_TO_OMIT) # Print the location of the HTML report print('\nThe HTML coverage report is located at {}.'.format( COVERAGE_REPORT_DIR)) Plinth-0.8.1/plinth/tests/data/000077500000000000000000000000001266051671100163345ustar00rootroot00000000000000Plinth-0.8.1/plinth/tests/data/__init__.py000066400000000000000000000000001266051671100204330ustar00rootroot00000000000000Plinth-0.8.1/plinth/tests/data/django_test_settings.py000066400000000000000000000025141266051671100231310ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Django settings for test modules. """ import os TEST_DATA_DIR = os.path.dirname(os.path.abspath(__file__)) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(TEST_DATA_DIR, 'plinth.sqlite3'), } } INSTALLED_APPS = ( 'plinth', ) # These are included here solely to suppress Django warnings # during testing setup MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', ) ROOT_URLCONF = 'plinth.urls' SECRET_KEY = 'django_tests_secret_key' Plinth-0.8.1/plinth/tests/data/plinth.config.with_missing_options000066400000000000000000000000611266051671100252740ustar00rootroot00000000000000[Misc] box_name = FreedomBox [Path] [Network] Plinth-0.8.1/plinth/tests/data/plinth.config.with_missing_sections000066400000000000000000000000641266051671100254330ustar00rootroot00000000000000[Misc] box_name = FreedomBox danube_edition = False Plinth-0.8.1/plinth/tests/runtests.py000066400000000000000000000027701266051671100176720ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Module for Django pre-test configuration and setup. """ import os import sys import django from django.conf import settings from django.test.utils import get_runner def run_tests(pattern=None, return_to_caller=False): """Set up the Django test environment and run the specified tests.""" os.environ['DJANGO_SETTINGS_MODULE'] = \ 'plinth.tests.data.django_test_settings' django.setup() TestRunner = get_runner(settings) test_runner = TestRunner() if pattern is None: pattern_list = [ 'plinth/tests', 'plinth/modules' ] else: pattern_list = [pattern] failures = test_runner.run_tests(pattern_list) if failures > 0 or not return_to_caller: sys.exit(bool(failures)) if __name__ == '__main__': run_tests() Plinth-0.8.1/plinth/tests/test_actions.py000066400000000000000000000116321266051671100204770ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Test module for actions utilities that modify configuration. """ import os import shutil import unittest from plinth.actions import superuser_run, run from plinth import cfg test_dir = os.path.split(__file__)[0] root_dir = os.path.abspath(os.path.join(test_dir, os.path.pardir + os.path.sep + os.path.pardir)) cfg.actions_dir = os.path.join(root_dir, 'actions') class TestPrivileged(unittest.TestCase): """Verify that privileged actions perform as expected. See actions.py for a full description of the expectations. Symlink to ``echo`` and ``id`` during testing. """ @classmethod def setUpClass(cls): shutil.copy('/bin/echo', cfg.actions_dir) shutil.copy('/usr/bin/id', cfg.actions_dir) @classmethod def tearDownClass(cls): os.remove(os.path.join(cfg.actions_dir, 'echo')) os.remove(os.path.join(cfg.actions_dir, 'id')) def notest_run_as_root(self): """1. Privileged actions run as root. """ self.assertEqual( '0', # user 0 is root superuser_run('id', ['-ur'])[0].strip()) def test_breakout_actions_dir(self): """2. The actions directory can't be changed at run time. Can't currently be tested, as the actions directory is hardcoded. """ pass def test_breakout_up(self): """3A. Users can't call actions above the actions directory. Tests both a relative and a literal path. """ for action in ('../echo', '/bin/echo'): with self.assertRaises(ValueError): run(action, ['hi']) def test_breakout_down(self): """3B. Users can't call actions beneath the actions directory.""" action = 'directory/echo' self.assertRaises(ValueError, superuser_run, action) def test_breakout_actions(self): """3C. Actions can't be used to run other actions. If multiple actions are specified, bail out. """ # Counting is safer than actual badness. actions = ('echo ""; echo $((1+1))', 'echo "" && echo $((1+1))', 'echo "" || echo $((1+1))') options = ('good', '') for action in actions: for option in options: with self.assertRaises(ValueError): run(action, [option]) def test_breakout_option_string(self): """3D. Option strings can't be used to run other actions. Verify that shell control characters aren't interpreted. """ options = ('; echo hello', '&& echo hello', '|| echo hello', '& echo hello', r'\; echo hello', '| echo hello', r':;!&\/$%@`"~#*(){}[]|+=') for option in options: output = run('echo', [option]) output = output.rstrip('\n') self.assertEqual(option, output) def test_breakout_option_list(self): """3D. Option lists can't be used to run other actions. Verify that shell control characters aren't interpreted in option lists. """ option_lists = ((';', 'echo', 'hello'), ('&&', 'echo', 'hello'), ('||', 'echo', 'hello'), ('&', 'echo', 'hello'), (r'\;', 'echo' 'hello'), ('|', 'echo', 'hello'), ('', 'echo', '', 'hello'), # Empty option argument tuple(r':;!&\/$%@`"~#*(){}[]|+=')) for options in option_lists: output = run('echo', options) output = output.rstrip('\n') expected_output = ' '.join(options) self.assertEqual(output, expected_output) def test_multiple_options_and_output(self): """4. Multiple options can be provided as a list or as a tuple. 5. Output is returned from the command. """ options = '1 2 3 4 5 6 7 8 9' output = run('echo', options.split()) output = output.rstrip('\n') self.assertEqual(options, output) output = run('echo', tuple(options.split())) output = output.rstrip('\n') self.assertEqual(options, output) Plinth-0.8.1/plinth/tests/test_cfg.py000066400000000000000000000151471266051671100176030ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Test module for configuration module. """ import configparser import os import unittest from plinth import cfg TEST_CONFIG_DIR = \ os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data') CONFIG_FILE_WITH_MISSING_OPTIONS = \ os.path.join(TEST_CONFIG_DIR, 'plinth.config.with_missing_options') CONFIG_FILE_WITH_MISSING_SECTIONS = \ os.path.join(TEST_CONFIG_DIR, 'plinth.config.with_missing_sections') class TestCfg(unittest.TestCase): """Verify that the Plinth configuration module behaves as expected.""" @classmethod def setUpClass(cls): """Locate and copy the official plinth.config file.""" cls.test_config_file, cls.test_config_dir = cfg.get_config_file() @classmethod def tearDownClass(cls): """Cleanup after all tests are completed.""" cfg.read() def test_read_main_menu(self): """Verify that the cfg.main_menu container is initially empty.""" # Menu should be empty before... self.assertEqual(len(cfg.main_menu.items), 0) cfg.read(self.test_config_file, self.test_config_dir) # ...and after reading the config file self.assertEqual(len(cfg.main_menu.items), 0) def test_read_default_config_file(self): """Verify that the default config file can be read correctly.""" # Read the plinth.config file directly parser = configparser.ConfigParser( defaults={'root': self.test_config_dir}) parser.read(self.test_config_file) # Read the plinth.config file via the cfg module cfg.read(self.test_config_file, self.test_config_dir) # Compare the two results self.compare_configurations(parser) def test_read_primary_config_file(self): """Verify that the primary config file can be read correctly.""" original_file_path = cfg.DEFAULT_CONFIG_FILE original_root_directory = cfg.DEFAULT_ROOT expected_file_path = CONFIG_FILE_WITH_MISSING_OPTIONS expected_root_directory = 'x-default-root' try: cfg.DEFAULT_CONFIG_FILE = expected_file_path cfg.DEFAULT_ROOT = expected_root_directory file_path, root_directoy = cfg.get_config_file() self.assertEqual(file_path, expected_file_path) self.assertEqual(root_directoy, expected_root_directory) finally: cfg.DEFAULT_CONFIG_FILE = original_file_path cfg.DEFAULT_ROOT = original_root_directory def test_read_fallback_config_file(self): """Verify that the fallback config file can be read correctly.""" original_file_path = cfg.DEFAULT_CONFIG_FILE original_root_directory = cfg.DEFAULT_ROOT fallback_root = os.path.realpath('.') fallback_config_file = os.path.join(fallback_root, 'plinth.config') expected_file_path = os.path.realpath(fallback_config_file) expected_root_directory = fallback_root try: cfg.DEFAULT_CONFIG_FILE = 'x-non-existant-file' cfg.DEFAULT_ROOT = 'x-non-existant-directory' file_path, root_directoy = cfg.get_config_file() self.assertEqual(file_path, expected_file_path) self.assertEqual(root_directoy, expected_root_directory) finally: cfg.DEFAULT_CONFIG_FILE = original_file_path cfg.DEFAULT_ROOT = original_root_directory def test_read_missing_config_file(self): """Verify that an exception is raised when there's no config file.""" self.assertRaises(FileNotFoundError, cfg.read, 'x-non-existant-file', 'x-root-directory') def test_read_config_file_with_missing_sections(self): """Verify that missing configuration sections can be detected.""" self.assertRaises( configparser.NoSectionError, cfg.read, CONFIG_FILE_WITH_MISSING_SECTIONS, self.test_config_dir) def test_read_config_file_with_missing_options(self): """Verify that missing configuration options can be detected.""" self.assertRaises( configparser.NoOptionError, cfg.read, CONFIG_FILE_WITH_MISSING_OPTIONS, self.test_config_dir) def compare_configurations(self, parser): """Compare two sets of configuration values.""" # Note that the count of items within each section includes the number # of default items (1, for 'root'). self.assertEqual(13, len(parser.items('Path'))) self.assertEqual(parser.get('Path', 'root'), cfg.root) self.assertEqual(parser.get('Path', 'file_root'), cfg.file_root) self.assertEqual(parser.get('Path', 'config_dir'), cfg.config_dir) self.assertEqual(parser.get('Path', 'data_dir'), cfg.data_dir) self.assertEqual(parser.get('Path', 'store_file'), cfg.store_file) self.assertEqual(parser.get('Path', 'actions_dir'), cfg.actions_dir) self.assertEqual(parser.get('Path', 'doc_dir'), cfg.doc_dir) self.assertEqual(parser.get('Path', 'status_log_file'), cfg.status_log_file) self.assertEqual(parser.get('Path', 'access_log_file'), cfg.access_log_file) self.assertEqual(parser.get('Path', 'pidfile'), cfg.pidfile) self.assertEqual(5, len(parser.items('Network'))) self.assertEqual(parser.get('Network', 'host'), cfg.host) self.assertEqual(int(parser.get('Network', 'port')), cfg.port) self.assertEqual(parser.get('Network', 'secure_proxy_ssl_header'), cfg.secure_proxy_ssl_header) self.assertIsInstance(cfg.use_x_forwarded_host, bool) self.assertEqual(parser.get('Network', 'use_x_forwarded_host'), str(cfg.use_x_forwarded_host)) self.assertEqual(3, len(parser.items('Misc'))) self.assertEqual(parser.get('Misc', 'danube_edition'), str(cfg.danube_edition)) self.assertEqual(parser.get('Misc', 'box_name'), cfg.box_name) Plinth-0.8.1/plinth/tests/test_context_processors.py000066400000000000000000000043401266051671100230030ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Test module for Plinth's custom context processors. """ from django.http import HttpRequest from django.test import TestCase from plinth import cfg from plinth import context_processors as cp class ContextProcessorsTestCase(TestCase): """Verify behavior of the context_processors module.""" def test_common(self): """Verify that the common() function returns the correct values.""" cfg.read() # initialize config settings request = HttpRequest() request.path = '/aaa/bbb/ccc/' response = cp.common(request) self.assertIsNotNone(response) config = response['cfg'] self.assertIsNotNone(config) self.assertEqual('FreedomBox', config.box_name) self.assertEqual('FreedomBox', response['box_name']) submenu = response['submenu'] self.assertIsNone(submenu) urls = response['active_menu_urls'] self.assertIsNotNone(urls) self.assertEqual(['/', '/aaa/', '/aaa/bbb/', '/aaa/bbb/ccc/'], urls) def test_common_border_conditions(self): """Verify that the common() function works for border conditions.""" request = HttpRequest() request.path = '' response = cp.common(request) self.assertEqual([], response['active_menu_urls']) request.path = '/' response = cp.common(request) self.assertEqual(['/'], response['active_menu_urls']) request.path = '/aaa/bbb' response = cp.common(request) self.assertEqual(['/', '/aaa/'], response['active_menu_urls']) Plinth-0.8.1/plinth/tests/test_kvstore.py000066400000000000000000000034221266051671100205320ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Test module for key/value store. """ from django.test import TestCase from plinth import kvstore class KVStoreTestCase(TestCase): """Verify the behavior of the kvstore module.""" def test_get_set(self): """Verify that a set value can be retrieved.""" key = 'name' expected_value = 'Guido' kvstore.set(key, expected_value) actual_value = kvstore.get(key) self.assertEqual(expected_value, actual_value) def test_get_set_complex_structures(self): """Verify that complex structures can be stored and retrieved.""" key = 'compex_structure' expected_value = {'k1': 1, 'k2': [2, 3], 'k3': 4.5, 'k4': 'Hello', 'k5': {'a': 'b'}} kvstore.set(key, expected_value) actual_value = kvstore.get(key) self.assertEqual(expected_value, actual_value) def test_get_default(self): """Verify that either a set value or its default can be retrieved.""" expected = 'default' actual = kvstore.get_default('bad_key', expected) self.assertEqual(expected, actual) Plinth-0.8.1/plinth/tests/test_menu.py000066400000000000000000000154701266051671100200070ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Test module for menus. """ from django.core.urlresolvers import reverse from django.http import HttpRequest from django.test import TestCase import random from plinth.menu import Menu URL_TEMPLATE = '/a{}/b{}/c{}/' # Test helper methods def build_menu(size=5): """Build a menu with the specified number of items.""" random.seed() item_data = [] for index in range(1, size + 1): item_data.append(['Item' + str(index), 'Icon' + str(index), URL_TEMPLATE.format(index, index, index), random.randint(0, 1000)]) menu = Menu() for data in item_data: menu.add_item(data[0], data[1], data[2], data[3]) return menu def dump_menu(menu): """Dump the specified menu URL hierarchy to the console.""" print() print('# # # # # # # # # #') print('Top level URL: %s' % menu.url) for item in menu.items: print(' Item URL: %s' % item.url) print('# # # # # # # # # #') class MenuTestCase(TestCase): """Verify the behavior of the Plinth Menu class.""" def test_menu_creation_without_arguments(self): """Verify the Menu state without initialization parameters.""" menu = Menu() self.assertEqual('', menu.label) self.assertEqual('', menu.icon) self.assertEqual('#', menu.url) self.assertEqual(50, menu.order) self.assertEqual(0, len(menu.items)) def test_menu_creation_with_arguments(self): """Verify the Menu state with initialization parameters.""" expected_label = 'Label' expected_icon = 'Icon' expected_url = '/aaa/bbb/ccc/' expected_order = 42 menu = Menu(expected_label, expected_icon, expected_url, expected_order) self.assertEqual(expected_label, menu.label) self.assertEqual(expected_icon, menu.icon) self.assertEqual(expected_url, menu.url) self.assertEqual(expected_order, menu.order) self.assertEqual(0, len(menu.items)) def test_get(self): """Verify that a menu item can be correctly retrieved.""" expected_label = 'Label2' expected_icon = 'Icon2' expected_url = 'index' reversed_url = reverse(expected_url) expected_order = 2 menu = Menu() menu.add_item(expected_label, expected_icon, reversed_url, expected_order) actual_item = menu.get(expected_url) self.assertIsNotNone(actual_item) self.assertEqual(expected_label, actual_item.label) self.assertEqual(expected_icon, actual_item.icon) self.assertEqual(reversed_url, actual_item.url) self.assertEqual(expected_order, actual_item.order) self.assertEqual(0, len(actual_item.items)) def test_get_with_item_not_found(self): """Verify that a KeyError is raised if a menu item is not found.""" expected_label = 'Label3' expected_icon = 'Icon3' expected_url = 'index' expected_order = 3 menu = Menu() menu.add_item(expected_label, expected_icon, expected_url, expected_order) self.assertRaises(KeyError, menu.get, expected_url) def test_sort_items(self): """Verify that menu items are sorted correctly.""" menu = build_menu() # Verify that the order of every item is equal to or greater # than the order of the item preceding it for index in range(1, 5): self.assertGreaterEqual(menu.items[index].order, menu.items[index - 1].order) def test_add_urlname(self): """Verify that a named URL can be added to a menu correctly.""" expected_label = 'Label4' expected_icon = 'Icon4' expected_url = 'index' reversed_url = reverse(expected_url) expected_order = 4 menu = Menu() actual_item = menu.add_urlname(expected_label, expected_icon, expected_url, expected_order) self.assertEqual(1, len(menu.items)) self.assertIsNotNone(actual_item) self.assertEqual(actual_item, menu.items[0]) self.assertEqual(expected_label, actual_item.label) self.assertEqual(expected_icon, actual_item.icon) self.assertEqual(reversed_url, actual_item.url) self.assertEqual(expected_order, actual_item.order) self.assertEqual(0, len(actual_item.items)) def test_add_item(self): """Verify that a menu item can be correctly added.""" expected_label = 'Label5' expected_icon = 'Icon5' expected_url = '/jjj/kkk/lll/' expected_order = 5 menu = Menu() actual_item = menu.add_item(expected_label, expected_icon, expected_url, expected_order) self.assertEqual(1, len(menu.items)) self.assertIsNotNone(actual_item) self.assertEqual(actual_item, menu.items[0]) self.assertEqual(expected_label, actual_item.label) self.assertEqual(expected_icon, actual_item.icon) self.assertEqual(expected_url, actual_item.url) self.assertEqual(expected_order, actual_item.order) self.assertEqual(0, len(actual_item.items)) def test_active_item(self): """Verify that an active menu item can be correctly retrieved.""" menu = build_menu() for index in range(1, 8): request = HttpRequest() request.path = URL_TEMPLATE.format(index, index, index) item = menu.active_item(request) if index <= 5: self.assertEqual('Item' + str(index), item.label) self.assertEqual(request.path, item.url) else: self.assertIsNone(item) def test_active_item_when_inside_subpath(self): """Verify that the current URL could be a sub-path of a menu item.""" menu = build_menu() expected_url = URL_TEMPLATE.format(1, 1, 1) request = HttpRequest() request.path = expected_url + 'd/e/f/' item = menu.active_item(request) self.assertEqual('Item1', item.label) self.assertEqual(expected_url, item.url) Plinth-0.8.1/plinth/tests/test_network.py000066400000000000000000000241411266051671100205270ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Test module for network configuration utilities. """ import copy import os import unittest euid = os.geteuid() if euid == 0: from plinth import network ethernet_settings = { 'common': { 'type': '802-3-ethernet', 'name': 'plinth_test_eth', 'interface': 'eth0', 'zone': 'internal', }, 'ipv4': { 'method': 'auto', 'dns': '', 'second_dns': '', }, } wifi_settings = { 'common': { 'type': '802-11-wireless', 'name': 'plinth_test_wifi', 'interface': 'wlan0', 'zone': 'external', }, 'ipv4': { 'method': 'auto', 'dns': '', 'second_dns': '', }, 'wireless': { 'ssid': 'plinthtestwifi', 'mode': 'adhoc', 'auth_mode': 'open', }, } pppoe_settings = { 'common': { 'type': 'pppoe', 'name': 'plinth_test_pppoe', 'interface': 'eth1', 'zone': 'internal', }, 'pppoe': { 'username': 'x-user', 'password': 'x-password', }, } class TestNetwork(unittest.TestCase): """Verify that the network module performs as expected.""" ethernet_uuid = None wifi_uuid = None pppoe_uuid = None @classmethod def setUp(cls): cls.ethernet_uuid = network.add_connection(ethernet_settings) cls.wifi_uuid = network.add_connection(wifi_settings) cls.pppoe_uuid = network.add_connection(pppoe_settings) @classmethod def tearDown(cls): network.delete_connection(cls.ethernet_uuid) network.delete_connection(cls.wifi_uuid) network.delete_connection(cls.pppoe_uuid) @unittest.skipUnless(euid == 0, 'Needs to be root') def test_get_connection_list(self): """Check that we can get a list of available connections.""" connections = network.get_connection_list() self.assertTrue('plinth_test_eth' in [x['name'] for x in connections]) self.assertTrue('plinth_test_wifi' in [x['name'] for x in connections]) self.assertTrue('plinth_test_pppoe' in [x['name'] for x in connections]) @unittest.skipUnless(euid == 0, 'Needs to be root') def test_get_connection(self): """Check that we can get a connection by name.""" connection = network.get_connection(self.ethernet_uuid) self.assertEqual( connection.get_id(), 'plinth_test_eth') connection = network.get_connection(self.wifi_uuid) self.assertEqual( connection.get_id(), 'plinth_test_wifi') self.assertRaises(network.ConnectionNotFound, network.get_connection, 'x-invalid-network-id') @unittest.skipUnless(euid == 0, 'Needs to be root') def test_edit_ethernet_connection(self): """Check that we can update an ethernet connection.""" connection = network.get_connection(self.ethernet_uuid) ethernet_settings2 = copy.deepcopy(ethernet_settings) ethernet_settings2['common']['name'] = 'plinth_test_eth_new' ethernet_settings2['common']['interface'] = 'eth1' ethernet_settings2['common']['zone'] = 'external' ethernet_settings2['ipv4']['method'] = 'auto' network.edit_connection(connection, ethernet_settings2) connection = network.get_connection(self.ethernet_uuid) self.assertEqual(connection.get_id(), 'plinth_test_eth_new') settings_connection = connection.get_setting_connection() self.assertEqual(settings_connection.get_interface_name(), 'eth1') self.assertEqual(settings_connection.get_zone(), 'external') settings_ipv4 = connection.get_setting_ip4_config() self.assertEqual(settings_ipv4.get_method(), 'auto') @unittest.skipUnless(euid == 0, 'Needs to be root') def test_edit_pppoe_connection(self): """Check that we can update a PPPoE connection.""" connection = network.get_connection(self.ethernet_uuid) pppoe_settings2 = copy.deepcopy(pppoe_settings) pppoe_settings2['common']['name'] = 'plinth_test_pppoe_new' pppoe_settings2['common']['interface'] = 'eth2' pppoe_settings2['common']['zone'] = 'external' pppoe_settings2['pppoe']['username'] = 'x-user-new' pppoe_settings2['pppoe']['password'] = 'x-password-new' network.edit_connection(connection, pppoe_settings2) connection = network.get_connection(self.ethernet_uuid) self.assertEqual(connection.get_id(), 'plinth_test_pppoe_new') settings_connection = connection.get_setting_connection() self.assertEqual(settings_connection.get_interface_name(), 'eth2') self.assertEqual(settings_connection.get_zone(), 'external') settings_pppoe = connection.get_setting_pppoe() self.assertEqual(settings_pppoe.get_username(), 'x-user-new') secrets = connection.get_secrets('pppoe') self.assertEqual(secrets['pppoe']['password'], 'x-password-new') settings_ppp = connection.get_setting_ppp() self.assertEqual(settings_ppp.get_lcp_echo_failure(), 5) self.assertEqual(settings_ppp.get_lcp_echo_interval(), 30) @unittest.skipUnless(euid == 0, 'Needs to be root') def test_edit_wifi_connection(self): """Check that we can update a wifi connection.""" connection = network.get_connection(self.wifi_uuid) wifi_settings2 = copy.deepcopy(wifi_settings) wifi_settings2['common']['name'] = 'plinth_test_wifi_new' wifi_settings2['common']['interface'] = 'wlan1' wifi_settings2['common']['zone'] = 'external' wifi_settings2['ipv4']['method'] = 'auto' wifi_settings2['wireless']['ssid'] = 'plinthtestwifi2' wifi_settings2['wireless']['mode'] = 'infrastructure' wifi_settings2['wireless']['auth_mode'] = 'wpa' wifi_settings2['wireless']['passphrase'] = 'secretpassword' network.edit_connection(connection, wifi_settings2) connection = network.get_connection(self.wifi_uuid) self.assertEqual(connection.get_id(), 'plinth_test_wifi_new') settings_connection = connection.get_setting_connection() self.assertEqual(settings_connection.get_interface_name(), 'wlan1') self.assertEqual(settings_connection.get_zone(), 'external') settings_wireless = connection.get_setting_wireless() self.assertEqual(settings_wireless.get_ssid().get_data(), b'plinthtestwifi2') self.assertEqual(settings_wireless.get_mode(), 'infrastructure') wifi_sec = connection.get_setting_wireless_security() self.assertEqual(wifi_sec.get_key_mgmt(), 'wpa-psk') secrets = connection.get_secrets('802-11-wireless-security') self.assertEqual( secrets['802-11-wireless-security']['psk'], 'secretpassword') @unittest.skipUnless(euid == 0, 'Needs to be root') def test_ethernet_manual_ipv4_address(self): """Check that we can manually set IPv4 address on ethernet.""" connection = network.get_connection(self.ethernet_uuid) ethernet_settings2 = copy.deepcopy(ethernet_settings) ethernet_settings2['ipv4']['method'] = 'manual' ethernet_settings2['ipv4']['address'] = '169.254.0.1' ethernet_settings2['ipv4']['netmask'] = '255.255.254.0' ethernet_settings2['ipv4']['gateway'] = '169.254.0.254' ethernet_settings2['ipv4']['dns'] = '1.2.3.4' ethernet_settings2['ipv4']['second_dns'] = '1.2.3.5' network.edit_connection(connection, ethernet_settings2) connection = network.get_connection(self.ethernet_uuid) settings_ipv4 = connection.get_setting_ip4_config() self.assertEqual(settings_ipv4.get_method(), 'manual') address = settings_ipv4.get_address(0) self.assertEqual(address.get_address(), '169.254.0.1') self.assertEqual(address.get_prefix(), 23) self.assertEqual(settings_ipv4.get_gateway(), '169.254.0.254') self.assertEqual(settings_ipv4.get_num_dns(), 2) self.assertEqual(settings_ipv4.get_dns(0), '1.2.3.4') self.assertEqual(settings_ipv4.get_dns(1), '1.2.3.5') @unittest.skipUnless(euid == 0, 'Needs to be root') def test_wifi_manual_ipv4_address(self): """Check that we can manually set IPv4 address on wifi.""" connection = network.get_connection(self.wifi_uuid) wifi_settings2 = copy.deepcopy(wifi_settings) wifi_settings2['ipv4']['method'] = 'manual' wifi_settings2['ipv4']['address'] = '169.254.0.2' wifi_settings2['ipv4']['netmask'] = '255.255.254.0' wifi_settings2['ipv4']['gateway'] = '169.254.0.254' wifi_settings2['ipv4']['dns'] = '1.2.3.4' wifi_settings2['ipv4']['second_dns'] = '1.2.3.5' wifi_settings2['wireless']['ssid'] = 'plinthtestwifi' wifi_settings2['wireless']['mode'] = 'adhoc' wifi_settings2['wireless']['auth_mode'] = 'open' network.edit_connection(connection, wifi_settings2) connection = network.get_connection(self.wifi_uuid) settings_ipv4 = connection.get_setting_ip4_config() self.assertEqual(settings_ipv4.get_method(), 'manual') address = settings_ipv4.get_address(0) self.assertEqual(address.get_address(), '169.254.0.2') self.assertEqual(address.get_prefix(), 23) self.assertEqual(settings_ipv4.get_gateway(), '169.254.0.254') self.assertEqual(settings_ipv4.get_num_dns(), 2) self.assertEqual(settings_ipv4.get_dns(0), '1.2.3.4') self.assertEqual(settings_ipv4.get_dns(1), '1.2.3.5') Plinth-0.8.1/plinth/tests/test_templatetags.py000066400000000000000000000044571266051671100215400ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Test module for custom Django template tags. """ import unittest from plinth.templatetags.plinth_extras import mark_active_menuitem class TestShowSubSubMenu(unittest.TestCase): """Verify that the highlighting of the subsubmenu is working correctly""" def assert_active_url(self, menu, url): """Verify that only the given url is set as 'active' in the menu""" for item in menu: if item['url'] == url: self.assertTrue(item['active']) else: self.assertFalse(item['active']) @staticmethod def _verify_active_menuitems(menu): """Verify that one and only one menuitem is marked as active""" return sum([item['active'] for item in menu]) == 1 def test_highlighting(self): """Test detection of active subsubmenu items using request.path""" menu = [{'url': '/abc/123/abc/', 'text': 'abc'}, {'url': '/abc/123/', 'text': 'overview'}, {'url': '/abc/123/crunch/', 'text': 'crunch'}, {'url': '/abc/123/create/', 'text': 'create'}] tests = [['/abc/123/crunch/new/', '/abc/123/crunch/'], ['/abc/123/create/', '/abc/123/create/'], ['/abc/123/nolink/', '/abc/123/'], ['/abc/123/abx/', '/abc/123/'], ['/abc/123/ab/', '/abc/123/'], ['/abc/123/', '/abc/123/']] for check_path, expected_active_path in tests: menu = mark_active_menuitem(menu, check_path) self.assert_active_url(menu, expected_active_path) self.assertTrue(self._verify_active_menuitems(menu)) Plinth-0.8.1/plinth/urls.py000066400000000000000000000016041266051671100156210ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Django URLconf file containing all urls """ from django.conf.urls import patterns, url urlpatterns = patterns( # pylint: disable-msg=C0103 'plinth.views', url(r'^$', 'index', name='index') ) Plinth-0.8.1/plinth/utils.py000066400000000000000000000025131266051671100157740ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Miscelleneous utility method. """ import importlib from django.utils.functional import lazy def import_from_gi(library, version): """Import and return a GObject introspection library.""" try: import gi as package package_name = 'gi' except ImportError: import pgi as package package_name = 'pgi' package.require_version(library, version) return importlib.import_module(package_name + '.repository.' + library) def _format_lazy(string, *args, **kwargs): """Lazily format a lazy string.""" string = str(string) return string.format(*args, **kwargs) format_lazy = lazy(_format_lazy, str) Plinth-0.8.1/plinth/views.py000066400000000000000000000044211266051671100157710ustar00rootroot00000000000000# # This file is part of Plinth. # # 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 . # """ Main Plinth views """ from django.core.urlresolvers import reverse from django.http.response import HttpResponseRedirect from django.views.generic import TemplateView from plinth import package as package_module def index(request): """Serve the main index page.""" return HttpResponseRedirect(reverse('apps:index')) class PackageInstallView(TemplateView): """View to prompt and install packages.""" template_name = 'package_install.html' def get_context_data(self, **kwargs): """Return the context data rendering the template.""" context = super(PackageInstallView, self).get_context_data(**kwargs) if 'packages_names' not in context: context['package_names'] = self.kwargs.get('package_names', []) context['packages'] = { package_name: package_module.packages_resolved[package_name] for package_name in context['package_names']} context['is_installing'] = \ package_module.is_installing(context['package_names']) context['transactions'] = package_module.transactions return context def post(self, *args, **kwargs): """Handle installing packages Start the package installation, and refresh the page every x seconds to keep displaying PackageInstallView.get() with the installation status. """ package_module.start_install( self.kwargs['package_names'], before_install=self.kwargs.get('before_install'), on_install=self.kwargs.get('on_install')) return self.render_to_response(self.get_context_data()) Plinth-0.8.1/requirements.txt000066400000000000000000000001361266051671100162470ustar00rootroot00000000000000cherrypy >= 3.0 coverage >= 3.7 django >= 1.7.0 django-stronghold psutil python-augeas pyyaml Plinth-0.8.1/run000077500000000000000000000013671266051671100135240ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # import plinth.__main__ plinth.__main__.main() Plinth-0.8.1/setup.py000077500000000000000000000176201266051671100145060ustar00rootroot00000000000000#!/usr/bin/python3 # # This file is part of Plinth. # # 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 . # """ Plinth setup file """ from distutils import log from distutils.command.build import build from distutils.command.clean import clean from distutils.command.install_data import install_data from distutils.core import Command from distutils.util import change_root import glob import os import setuptools import shutil import subprocess from plinth import __version__ from plinth.tests.coverage import coverage DIRECTORIES_TO_CREATE = [ '/var/lib/plinth', '/var/lib/plinth/sessions', '/var/log/plinth', ] DIRECTORIES_TO_COPY = [ ('/usr/share/plinth/static', 'static'), ('/usr/share/doc/plinth', 'doc'), ] LOCALE_PATHS = [ 'plinth/locale' ] class DjangoCommand(Command): """Setup command to run a Django management command.""" user_options = [] def initialize_options(self): """Declare the options for this command.""" pass def finalize_options(self): """Declare options dependent on others.""" pass def run(self): """Execute the command.""" import django from django.conf import settings settings.configure(LOCALE_PATHS=LOCALE_PATHS) django.setup() # Trick the commands to use the settings properly os.environ['DJANGO_SETTINGS_MODULE'] = 'x-never-used' class CompileTranslations(DjangoCommand): """New command to compile .po translation files.""" description = "compile .po translation files into .mo files""" def run(self): """Execute the command.""" DjangoCommand.run(self) from django.core.management import call_command call_command('compilemessages', verbosity=1) class UpdateTranslations(DjangoCommand): """New command to update .po translation files.""" description = "update .po translation files from source code""" def run(self): """Execute the command.""" DjangoCommand.run(self) from django.core.management import call_command call_command('makemessages', all=True, domain='django', keep_pot=True, verbosity=1) class CustomBuild(build): """Override build command to add a subcommand for translations.""" sub_commands = [('compile_translations', None)] + build.sub_commands class CustomClean(clean): """Override clean command to clean doc, locales, and egg-info.""" def run(self): """Execute clean command""" subprocess.check_call(['rm', '-rf', 'Plinth.egg-info/']) subprocess.check_call(['make', '-C', 'doc', 'clean']) for dir_path, dir_names, file_names in os.walk('plinth/locale/'): for file_name in file_names: if file_name.endswith('.mo'): file_path = os.path.join(dir_path, file_name) log.info("removing '%s'", file_path) subprocess.check_call(['rm', '-f', file_path]) clean.run(self) class CustomInstallData(install_data): """Override install command to allow directory creation and copy""" def run(self): """Execute install command""" subprocess.check_call(['make', '-C', 'doc']) install_data.run(self) # Old style base class # Create empty directories for directory in DIRECTORIES_TO_CREATE: if self.root: directory = change_root(self.root, directory) if not os.path.exists(directory): log.info("creating directory '%s'", directory) os.makedirs(directory) # Recursively copy directories for target, source in DIRECTORIES_TO_COPY: if self.root: target = change_root(self.root, target) if not os.path.exists(target): log.info("recursive copy '%s' to '%s'", source, target) shutil.copytree(source, target, symlinks=True) find_packages = setuptools.PEP420PackageFinder.find setuptools.setup( name='Plinth', version=__version__, description='A web front end for administering FreedomBox', author='Plinth Authors', author_email='freedombox-discuss@lists.alioth.debian.org', url='http://freedomboxfoundation.org', packages=find_packages(include=['plinth', 'plinth.*'], exclude=['*.templates']), scripts=['bin/plinth'], test_suite='plinth.tests.runtests.run_tests', license='COPYING', classifiers=[ 'Development Status :: 3 - Alpha', 'Environment :: Web Environment', 'Framework :: Django', 'Intended Audience :: End Users/Desktop', 'License :: DFSG approved', 'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)', 'Natural Language :: English', 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', 'Programming Language :: Unix Shell', 'Topic :: Internet :: WWW/HTTP :: WSGI :: Application', 'Topic :: System :: Systems Administration', ], setup_requires=['setuptools-git'], install_requires=[ 'cherrypy >= 3.0', 'django >= 1.7.0', 'django-bootstrap-form', 'django-stronghold', 'psutil', 'python-augeas', 'pyyaml', ], tests_require=['coverage >= 3.7'], include_package_data=True, package_data={'plinth': ['templates/*', 'modules/*/templates/*', 'locale/*/LC_MESSAGES/*.[pm]o']}, data_files=[('/etc/init.d', ['data/etc/init.d/plinth']), ('/usr/lib/firewalld/services/', glob.glob('data/usr/lib/firewalld/services/*.xml')), ('/usr/lib/freedombox/setup.d/', ['data/usr/lib/freedombox/setup.d/86_plinth']), ('/usr/lib/freedombox/first-run.d', ['data/usr/lib/freedombox/first-run.d/90_firewall']), ('/etc/apache2/conf-available', glob.glob('data/etc/apache2/conf-available/*.conf')), ('/etc/apache2/sites-available', glob.glob('data/etc/apache2/sites-available/*.conf')), ('/etc/ikiwiki', glob.glob('data/etc/ikiwiki/*.setup')), ('/etc/sudoers.d', ['data/etc/sudoers.d/plinth']), ('/lib/systemd/system', ['data/lib/systemd/system/plinth.service']), ('/usr/share/plinth/actions', glob.glob(os.path.join('actions', '*'))), ('/usr/share/man/man1', ['doc/plinth.1']), ('/etc/plinth', ['data/etc/plinth/plinth.config']), ('/usr/share/augeas/lenses', ['data/usr/share/augeas/lenses/pagekite.aug']), ('/usr/share/augeas/lenses/tests', ['data/usr/share/augeas/lenses/tests/test_pagekite.aug']), ('/etc/plinth/modules-enabled', glob.glob(os.path.join('data/etc/plinth/modules-enabled', '*')))], cmdclass={ 'build': CustomBuild, 'clean': CustomClean, 'compile_translations': CompileTranslations, 'install_data': CustomInstallData, 'test_coverage': coverage.CoverageCommand, 'update_translations': UpdateTranslations, }, ) Plinth-0.8.1/static/000077500000000000000000000000001266051671100142525ustar00rootroot00000000000000Plinth-0.8.1/static/doc000077700000000000000000000000001266051671100156402../docustar00rootroot00000000000000Plinth-0.8.1/static/theme000077700000000000000000000000001266051671100202052themes/default/ustar00rootroot00000000000000Plinth-0.8.1/static/themes/000077500000000000000000000000001266051671100155375ustar00rootroot00000000000000Plinth-0.8.1/static/themes/default/000077500000000000000000000000001266051671100171635ustar00rootroot00000000000000Plinth-0.8.1/static/themes/default/FreedomBox-Identity-Manual.pdf000066400000000000000000046661441266051671100247370ustar00rootroot00000000000000%PDF-1.4 %쏢 1 0 obj << /Type /Catalog /Outlines 3 0 R /Pages 4 0 R /Dests 5 0 R /AcroForm 6 0 R /Names 7 0 R /Threads 8 0 R /PageLayout /OneColumn /ViewerPreferences << /PageDirection /L2R /HideToolbar true /HideMenubar true /FitWindow true >> >> endobj 2 0 obj << /Creator (Scribus 1.4.0.rc2) /Producer (Scribus PDF Library 1.4.0.rc2) /Title <> /Author <> /Keywords <> /CreationDate (D:20111116144707) /ModDate (D:20111116144707) /Trapped /False >> endobj 9 0 obj << /Length 46439 /Length1 89916 /Filter /FlateDecode >> stream xw|<սNI'Yݶ,w[&1`1L BJB a`zI5@L !8t=$$<<}]b 'Y} 6u..~A'j^={ə&DUKuyeԍfMP_ذc6ۛI)s5g(I̪(PozΆGgCO yfmL=NY+oCp/O SydӶjSKU󷞶n/gp!s9ؾf)]_~L{ oqڙ;,23N!fo' ]ej8U6!/rJ4>8 S=Z\ERJ-U%F%YZ5a{0D&\(V+is5iYXمQn{9H!_=̵GD|ܠ8vE'/ˉrH+#Y]Bz!w1%d=,y?Ig@VBJ!A&zp^dgr;]<Ȉ2x+d~Ohce4}NqOn VY⾏4CGي|p ^ >҂ҡ*NZlߟB~EYK e:ЏE.Hꌴ)">d~/Ңktf[J!<)a|,PZTgb[倫Iz xXh񪘉2 Zȋ _oVLj|,<,3z Ҧ%U gWAQmc(l5rs'il~Q8J%ct| >~:'~p~3-X"LHɈiqk,<: ry4?'Jnljv^9o4=FДű7;'MMc̒$]'?EmNω|.5Q4D P p4D8 L-RXډ8 D(}E E\ C<[_#>~ A,}IB$0L#$0Jc$V'q $I)&ҿHd֐Y##uI=<l I#iX M `3i8L(`iNvgt"]''Id2n p Jidd:dd&YdVd6slsdnod8G\HJ%B"KbKdiS\N\A\IVBVWUאג5בOz)d= ҟf d d p;4rɎҟtg3$g<x69Ex p9dOd/9yd/y/ >$ ^D.\b~rqK^N.x9@x%9*r%UߓkEx-ȵ'ו'&|w o$xr3[)RzNnx vEx./w~|=n='> /|F~ pO-@"yK/Ko_  _oJW(ykN3oK__|7K,F"6-ߑ#o|tK|}.ߓ~@/7=H#!?||L#? _'FS_K$ ;?' /OC>%^&_5_+Eu%R"C ]5z%82BQdrB&%$ LP*RPT2RAOx:x*J.((V-rhSb# R) BET*JZ xRPT41 U+krzYx&{R+TtPx*4Ā˕JJ!tPPA}kN0T ZTPEx B rl^)rlQX9T2 HRą H>;<> E1 (@ q|,Sq5ؠSY~ : qhҪGަm)j5MҨRj9Zq8C- Tj9T(ġkU< IFQX\@Z%TAo p!LwI "pOoR q7!.uf E#WFhZƠ @Fͫ:TTKZąVNGAQjt}$KbRi,XK T%C=0T ʑUZp]giZq0p qUc)=(QzX4*pQ5Z9E \V+JWt".@KЦM(:9\MqB\Бk .ĤФSL0"C:PEZlQ+9&pD*Pg#;i$>hTV6u NmziqU(6X]n]ߠ4(htЦNɨH1iXLɠ*@S@3)EY1H8΂4@FRQ;J".8F…QZC܄Aۈ #J Nm-00>+ ! ZAVp/BMG7h-Hƀ:` u͘DDž젣JU2JqA Q Fqd)UZfrXm2uAk8QgD\z=TWCU u(QKq)iSZ*@cўB j:r01iG:  . QM(jmE&9UP`'i @BVO*u#AK;p @8hJQk6&άP DUP^ C)ՙ (JRTZ茨p0f5LEf20LX L"Ӕq:ת z8>4HP~80Qg2t:8<6pMj=Ĵ@x+SiL:+x`2MFzVT!z56W@$68㡢f7.T`:rG1y,6d֖qzBa+Ũ7+ sFxQCo2F"ą5 *@zXIJ%qf7a, (s&VmԨ FѨ1`uNk4ߠ5*4X2-# h]ØfBh1[0-ċ2dZ:A#tFIS+P8F#/d2Ej54.zsXh~@8ęL$ ^Vb-F&jZ̜ZtgLZTrjާC&)X8k֮q9+8Ƭ4#NY8;y7B;Wj+f脦l͜=c}AcB9qLFM(ulPA8My`X78;im&aqX8f۬f^o9z= <.aƤuhMΡ@/PڠL6`m.bv&ށVE`EW'Ԝ VԩVkA( <lVV=l}\J2X,fM- 2[.h'.oq!ݪ5h-o,f=oѨk1f4*Υ,z`zYn  䳡`ǜ jA\Yb֘!o[MYP, -Tqp`iQ>uE\JN FomVixHeSiSfz dqܼP{=>L6;A'~3BV6fJa&` @@odsmfwr>0!.Ry!j; ZGz8)t: _`ぐ;q8}e otVaC>f^pTPsXd& y%v6OSCkA BbP[bzWu=.P1/n!JDZ$^}.w)2ق ouAfl rt@k,\`d p;=P]1ZLn鶻6܆8Rb5Q˭7 p r`JGJP0VDQL#H~IS̎qNNNcwN ݑdvp v>TNBכѲ^b2ؓЫq+KA/-DB~nu]^kL}6Iz=<ƫ`N%[`tg$ӑGsA$X7#@PtJN4f_J4p כlFFFY#E e`~`(2H8Œ#'ӡt'Zb g6?gs9.炡V,b eSј8ZO*Tvxx @xR(eP(Ebro7V; ;.Xl_S]&Smpg.DuujkV5GxTǡ xG hj N, B(l6,v Amm H U|c)^tM B:G-Qֈ&S9o*vxf]}<Y/W%bf'teޗɤәt&lL&TWלJ5NxτڶdM1u3dDnK&ЗIP8bVW,iu23M6kll 6Sl*uBLb$_[/Pgx(Td:iKyz'%l$C>3$iO.Ԕiihd\:I[cdbfH;t" bư(9:fYfgg_`_bߑ X6 CX )C9 Bд)їclDh r9Ϭ6σ66 mZB9aL|U6h)}QCu}3KKJK-EUQ9g#?=3~}c}.ڂ_cv 9@4K15K%8٪5S6wdV Td@AYgz֬?(_pʁA`f}K+,]ȱ9mRha40 XyK^>ս <һnwpR~,H}VA)8P,Xr},=p@< ^xC: G0dlATe)̅҅ p\d 4q&,aaBI8?GpN'J^,znD $E|JTihV7I2r}&;[\N jA?"|vX"K&(#axVJr oC'qBNBy:䥐7C>oȏC~ ap|KG! Jx2 ntC,MYg9ؓv*", ]ʏ $4i X8i U0,[8i u f-|Yr76tl8d4vUd 퐵 32-k% Qa&XRtZδ[cnkɎ~Kd_b^>ر\x\8mڟK%2|bwٹac741^,}&^qXaZ,Œd,&j( 9D2b R lj1j)V*eyYC+eYrbѮZ+ʹ]ӕ+mHGvD"Y+Iv٥2=CKl=7@@2 ]#uJDqT7(B3dʘj8 ' 7Cy MwC͐'/BFUFHCΨ2{=lcM^a,)?0aBN7r.Jd2<v;Q5 d F\*0cYhMF ֣6JtGE\菊V ùC$us2~[,!_46,aQf,-8dM -(AF%FӌJ(z=ZajSb5%rR/I s 4E6TQMZD26@fg΂<j>Ds8lf2J_'0x$⑨&Up`UH:dN"b/x $DuzP>")LHdeN1Y6.)PM RiejwX23_Zt=5iל1Gvd֭faK6õΞN=^ddf/7+,&_;c-,Թ78'ℌo=e4냣Q *Ʉ1U,骂Z,a4S=fP˳xb sB{Nh 9='D)0܇7'&crr䩐Cy ~ȏA~&|ZBF7bOMBh!*-B 9hl8klRdTY}pRd?mY}YhhXqYhK Bq $}<;`?QSMcwU{\qe q\Y{:d^/T+KіdK()IN&qnk+vQz1|bA#Xu7TT?ijLa+#0Aj5b Q {6^T)>6klQ/PAs1W\ ߿79cc{.5a-N>x)xjŠ=] 4\fW߶~xs 4iZiwt) ӯ4_vN?`l ~!;y.c'BHr+F|jC&şf  5`P.+8tЙ*-(:D,KQUD lrGĤe>0}$ҦxJ3ֽ@W| /ޫ9t.nϼqa\4n&4U8qwF{?w8v3ϱ*z!gRj?pE]w2&'8_/=Υs@>(JX*o/be9# ;/=\X}>R yU(G^9U`'#c6( v&`:[gpqazJC|-15fsР\j8ZF,55^xJ![lt._ص.S?ov{td eEd"HJ%"A㰐8XׁNIlEA'eMcbmc`wvqY-|GBEO]2pN6[)Q|`w.^`jqLHhbcdf+HU}>:EB߅b]U Aa@PgV",zY1WϿ;v޼k۹:{ɹhd3ƾdFxIFXt7==M79-<~kǠ: CEPg-HoaԆ'jMGYhSoh*[ &m!FLv-^ aǜu}$$[(}:( IQd>,U`AMU8‚qLF:&阐EeAhR/%˗p) "Eb փ t3`bH2v:dlևLSs W2DsO`a%ru)C첇OumEZ7Ԝ0;2uَv뉨پYS6.jVݰYt fz"Ԣeяok A$+_^ŐUrTX)vBQ1A;R` }MAQ~oG9eI?S(0ÎP37EvȄ祇()T@I2Ɓ?}i20}+XEUDG$%)Se_8 H/_8p |)S NR 8s$PK[(ĉ^D/K /ʗBp)B& h=e3U}dMI&gE<} zM cIs+e?QT=|oYO]5ۗj ɩ [N6o+^жW zA5%j 7M;^E,-hřV 1@c-F49gwy}i%͌ثh³ km rs&d5lwdžǮ}ș~%tXl,,F:7/i ;WvP8K 8F('DI$(@EL )UU2",D4{@+VUDH2ό Scל9meOњz OsFz֏c 9q\)i|8>L+0RN7ƮXm=,P=vT<-dǏ!ȓ嗁X.ߠ?vr0;>d)UKz}oq-F p1 s?p/s\+{:&KMD{욡30egGy<)W i?5QGL;ȕCo Agk  7W-߸7%ГX3 F6uFȡdۛ8ٗ3f,h'2#gYcmK%] gN^yӖ 䕞7 ѕ;qj>fI6[ IG{goPJ23):mm~Q٭Ed`+YpG@uFC\PV&ld#lx\;9HqOW1k~qQW m-][$~uj8^at*]9]@)mV{~BeP$V.GG%&ֵ˯ 5 mfN\;)mYiM޵=㊧ξ跷/^ÿ\1}>%lL՟s˟(>7];<~'ݢ=P|JQ7\ӻ}ℳR-%Xϴ?p߻ǻC>5؜r6S8߸-ӷ-GBe󷵷 Bςc:(TM u#.zt0͕z*zIP<[*3AhEږTK/^\s!s!S2P,zj2ߊmlknx <4]8C ~E|M纊ڱ3NAADT&+* 2iQ 7qimkL kͶ|_ק;‚ +5onYD!|ǹ+5RNNteDOcÔ)WAwՓI /k1VZHsMFMp @NTMOPHҠҠlgrI̅H F>S/.]RWx~0$@$:q7_՛5է0htWy/0]c{Sӷ&;ա]Zo)1@\9q.%Ƅx0k FoPw bLCAoC`, ,\N#{0e+| `o+׼5|[wxf_ܱs&-xe%ё_[GO:S(g+{4C;pXd`^.ECC*[CCf@|C? !=}ٟ铿Uz%;AdTPqH 8Os 9JM]C}qa_\U㰀;tp'umbο$!#1h}13Ab^FIC<++,ֳ@U6smK*/1ރlGf-+@bU7um wB÷$[cQ5LK}&X];y7|d2(vPH\2P (^W50% OYJčrLTA!qPL y͊CŮ>賌ĝ.Ŧ>\| ZtN츶QeQnˆN(h#%z tbTAs?63 3zsݹaYV\ mt#rFNr0V*`g$K#px2b)703_.{Hujab8o} (]Vw=F! a=C3c3l|N Wyd)86}Ǚ&ݷ) o/ bA*\/epEOgʑ[:a€jh1" `Áj`dkQY6Wΰ7l\+dX{e2[cәq}M~5W>uDSCX2yB\2FK<ُbEKѨe+H1fq:b܎1 #蔤S WE"/I;#3)OGr&u0^pϓ~8$Ye ?,ɔ+_Z+WIESS/l#>n'mkc?,`C7/nf~;f}oe 1 'wtYe%u?qђQqdfɾaZDa޾󽫻b3M ڙBՅϸt|Stxλr=Gš;\1S|}bw,]Uqjtp~q((]t:12z8(҉6E% ES]MxI]Kj'[/˗p)N(pH \Zb,{LAqU+e=<;u }ܳsY |+ΛiI--;3=f{,$ߕ 'rL%'DD~[Ud]T㬑a"CUf>hGGf[7eÜcGtxWe׵hIO7K;F }g<u.XSgę?{3?>TFWwl٪^w)=5Wa fuR,3\#K/a/Ѡ+dLqY1jfmK1_UJ>4iw^|5%Dze@HbAۀ?8*GQ08)bZƓiռ*SMkj}fQm)F[(ZʤO1}܂(&Vdz xj=z9..dIcS\ӑYu2Q_WMׯa(p||PV%(_τuљfM̯1x\e>[6``I L aJ8VyV&,I=qSWx ~('-S|x84p:S)%RismLM ɦd%%Ez stƅL?V7a"jc*/h T zn4>휑}xxW}(W稱`sO. ZyG0 *={|Pr]Ȇg3_%3]@c;d s.:ngߙ/̷tDxIo'"[>a+ɤ푦cReҋ , CPQ27v0G]b//(~xXƨ.I4,Q#n")>tGt{yNw뢾̾emkm a1VEˬ҅[Va 6ʬCn}img`5 FxY.XaN=rYᔣ8x`Tq F /MBzC 7%W 8S="n 5xL8$UP;J~XNi9$B}qP?@CYK )(LJ&S!/RC\J}lrd։n.<e6]֝1f/ns^'?9!14+o\4gWq 0vjOU]̲yO;,׾ƥû]+"Ywc-9pnMC+"9;=W'BtTm4r0naiW<SM,}RrcS Saȃ* nOGf -^7 ޺SE}L&ԔKXk}BM\yg=|s0n݋B7o\ҟ1 |HiW UU^舟SrE  V(]Q"zKpD 3O)tfvi;W=t?u2o9O]}ZӔi/^o͟3sbc4rJ*9ƷA'rHȍ'ݱ9ٞHF@g"ր'?ҌW κg]i50QRIkd^{\B6ɹk*AeyXx'Bj-".D/r&D1J%ƾ2@7Gt&Ľq;HAbhNR|,UAQF#TA؆?xb<OuaG%m )-n~\rpK`&ULg'~뒺tMsj[1ۙƩ󗤽QKɋ֏fO2{>$]>5_S;gr942e̞K7ufgmf5+眷8gVe kq8O3sڴN_}6Na#倲axDCO}A`r'qN_u ] lx T @7AbVŃ|g/tUںoZ{81{Т\\<9*o,R 񝾓Qu$ӹߘWbLaJ<6)'S|rOtb[713Ih1]qoڍOr͕>[G]g>ʱ\sHCقq舡D mtAjY!nC4k4߳Y|Bn:D<xK w؈|R~7o\q^%4{Ƿk-eG dҢ#p7>"Ud"ŏyYV|Y㜍\ .\^4#=#W=T}I\5WU["߾9ZiRPtqLZPYS(C$HYW2cw~D=6 ]^WtDKE] zY$C;l H[QnG]g֬<7xM+j/\!53(7\eͼo@%sgX`\ .r7&B5J(WcC8C]5ꤽ[Sv"t+Uf_U ZNq|d!~r*ޱyQv]@gQ;]~:٬'n;J8j9=s{eٞr+>{3WϞ}3N=So 8ܹ{_r+_{sf =~ӭx㭷$';+T?ـ3(C8o}<ڲ'ć"ʓ)3贕h)hMQYF1y87eByN>o{ͳc&\Y0ÔȳOǑϜ~G5s Rp(ne}ӂ4qHW 5N6W䩐Cy ~ȏA~߉pW@o9+P%X<?f+7|sejyRdk$7Lr+^@9e[ZX*YXZRՖ w86pMtB.XlxOܠ=5K6>}>Ke: 8h".0\xủ:f,* a<Ѷ`[RmZy2^JN6A y1䍐UfTqS+f钊%mg]dEӾq˺>4CNOG}Tݩ[76o^>+KY8RƼ@s Vau ~]HWypT6Y9iǡ!Uqɻ燝9AnQ,nGd0:Sr a>q!topw&׬lK1sõTimts(!=+*`TU0NHoשO8'zBI"J D7UB`Za5kyN0ߨ%7܄ kI\xRLJKuԑ먦:x%:'_Qme誉Lf *6jߴO{^aخ>-|Qߠ5TFSuu ?"۸>_yM}O*ݡpCywܺ7oM'ڤyqaUc+;?fRAqYpqQ}3.~ 9dRt3P,ڂ?v~6oK[ p JY^GX.`Ld>~1GV 2U~/s{qbGG#};w>j U>C ʧKq &-6e \q.CY;e!uob'mOtLK2o p3b/}^d#m28_QQ Oa|0(ls@ \Zd(|h_ZBؕ' K0|ζNgݼh;[5Z5%pک[ [n^jm뼙y_ٍ9S.[Ri3S5Km2GesWퟗ]|s Oh{1seI2GWھ~/0!qoIq?tp$8Fmcw% ̞=$;kQ&ӐQGBJF4~2%iz4~j߉"K4HKo'Tj?E>vٓH[Hɼ'NHڲ"YE֌^_EPduaCө|2ɛe~ŋ$YRX \dΰo6|UwUm /_wx:xw;.>7[IT뤛[q̘?h->1EFi+V<|AMň"R ;p (:wo\F t7hI4]AGʓ}ZpIܵ ߧdXO뜼I `btKMaj%\WO?K7umӶEʫ?ͼYk(nQwj=iβoo&Nގ|䁑lU<CbO^ӏn'}' `p ;*˄7@x3'tP'Cs~3E)]Ѡ tYc {]?3s{l4֑7kp-ŷkb5Y_Po'؞fJvNN_7a5孳Mn5){68t%c; yV~9>÷q&t7/˱ 8ĸK->?.,H&DˏA&o oϗ= )݄#/7L/{>*..,,md~ z{y%C#WE꫿F/qh*hmEF<ʗCPޜURI2,wNj4\#Ï|C_E=.ͧ[\+uHЬVzRfnx7j@t'󏟻+֞hqK#uoq}Ҩ% --ZЂԒP#BbGqZHxӲd<mY&i=ZxɓyvKlv2qRS[ԩAVhV m/:rVݷU9+kg-/Y"w;_[]3gϵ~^y*HeDhxL9חtf߷fw?77 sffT?i_H-m6%deDƖq)KIuMAr왳ԙ$ ._u7f~ ^OeIj DegLΎmMYmS63EySf͉3&̊UR:;.nvi-C_ߥY-ڝi5YDjz,$M-LeWkjMM7xkr2tAtO{euU/,jY\{,eD\(vkP\%2)@I.΍:93$hVi6ik=zo(P*:J!kNWrQ(!D(u Q]*,SY1ↅr)l:0m䪕̘O&eʦ`n5)n"^a7Rv#E؍45UF!6Qf`)VJ=^S)lLTb2U".Fq=$w2w}Z|1,_k;+7uN䬅ىaU' fՍ]a's]}gڒ V/,4xnygX6NoIQ!{ФƗs*/n~iu:oo-Ns:ߴodDw)T|BߥPWBE_ }**T|Bw)T|Bw)T.=R.) 'SBR0dZ"JqmCR5&GV#իURի;/y?:8%83߽+۶lk[YmV/KΎm 9(SZM_ߟĨ6T2?+!?'굙~Zۯ5]UtDߡs?%ǂc'6nH hCoJU&ӕT6o*Y>2vۂ&͚7KR-/E^L I _Sikg-(Mz>饑9oFfGĦGFG#oNgnW=*(<1lljGCd) z'Ka>s|962d;қBp0 n:E&{mɹVnFo5d'͜87=snB`drl\)!.$^RR+6G,.j(nέe%G&%~` =)~=#ALHEZLV.sN᧞/Op;[CyZ&74_jZRt?V, 5 c K]V ~9|bbԿ߲ Yd9942kT.R-E֙y3CYt}NJeu.>~~|jTPB\΃sA߄VLàe2W3o0o1EJi2Yn Qf̃;6 -lYCa%o;lju}x9ߔk]{Zo fo`~w<$Rݔ飽9FuH٧/I1 9&aXS~ۮo:Ky헙ĦkWGfFNIm]Ie~Pcks< u_ q;VR+:TFo֔Y5HkRU.e)R'Uqxݖ8Ҽ?OiT~Z. zP\O[\:& T0G89&=CchPTWAS2~j,2Z<!lд~3nqB;A^T޹L]ܱzL]r+#B)7̑7/IiGR]qN/W=_)?}[;OşeR4{Y\eA{Yْ(=B4V}|Se64%]')#DJq(”$T7JͰdוvR[US몉v=N]FquOalg6L<$UЌ=W'o WO>R^?W~[^3712,Doӫ9^tAZK8HѮ< VyEυ}e}*m>2G47P,W%+^/+S7Ǵۉ2a7׫sE ݰP8)S*TKjVJ2M͞xK^.6̗h/PbŕI=I{t'M!ba )NY̰p4/^tLqLn)(YfK=%b*yN^Al>52N }B[e>$f)SSM F|T|sI7vx~O>9( ZEI %]?UI⍚-jBeg:J]u~=#5:),^&%yO.8RlOLA˧*;m&lYxHEUUY䗸9] -NxPt^,;j_WW-.Llٜ@ꥋVG sŕlY$s*ySio4˄ >Ʋ)>FWi҅Ҥ2Ns !e5dEє O}dR% Jf@0Sq(2 X\ˉ^f "S8¡Ep(2Cu(2C![VZeֲEk٢lZh-[-ZeֲEk٢lok٢;'JݒfDGK,ջwij*n9AwrGwڤj5e՜1䛼aȳ]Tس[e_nWR Ce&z)+7NCJ[} Tsu򍐪o,X|U_(T_P,g kJڃ1bVkeyp{ܜ+Z](4?|ȵ<5Lu;\+~ƳX?U[HbtUVErK%Iژb8sL w'70kw"s"3gXiBŴplՋwm\꽽ٵ 3Y7$1d_jT9)(:8;-6A߹aN LyGuzlW>]nN{..o3~j57U&?@jUvoW߻%_ò^|j/ᅮff]_ e=%h9wT9Bʘ .)ސ̀hD2HD[MCjyO57^{J*8+|8¥iEH\߆{Ꝅ|κ%ɭq92;|Ԑfpo(Vi4FԭÚ2M+ s ީm x+NT(dSL_176Nx\,Lb[%kuTyDjKk/EP|#0vL7?~S˾_TaS<q&Q9bz…7F/[XN.L &v|Cz);nfo&_;ԬMV3gܖ7Ě}{ҌSsX&dx)gO/d0Vs;U $TXa l'5kE)qsz֬FI*iՒ>9n2M-gJ 0<@~b)XmugBRsZ G> |?}b ];%=_(`AF)@ RƥOc.p4A.#qAn-غ0@yX|J>qw;D""i'ISü:zrM3'E:Ǥ|%ZV,Ø}z3wzFW^6\5S SϏx+l(A5c\ yR#qmxX_x/T!jXrʪyǶsm֭D<-O &iԜ9뽙6[0-J YK.PHdn|KScʼdo^+mvJ7|Um5'iM&CSm1x0M.y"޾63D_4b?BbtU3U ^R|6%J={ٕVϽ)?1ٝ_d֚ti|a{9Ɥ LM~kǞU7'TsnPNleTH]z'<)xm@}PJӦ=?-l ֒GӬjNaCD͗33O7O?<%hе;\1<-6_5^yuzijDi6ܜk{QʅMyo;w+7O*ݭ]];+^<7;u朸UOu筱OJ 0߾&O<~  "MɓUͧ}2bg^wn3j8C$Ɗ [p[.{ aBo_+{ 5Bp[h?x ahTU;"R2"x ;W۷8[hcK33nqQQˬYü53fɟ{OɌ%MN͘#g=GtkRH@?~ SoLd-jiLߔԓs12).sNrR*NS℄cMQk7G2buz=~{u g残,Sgs /H9S߼wOB}%6ԊsgcV6/}lwfX3=&A*-f9[yʅ\Ve{CSԠ{}v٩O?27W3ƈg$C'yl]1|OS&Y[ UFyQr<~201O„Au~]ED3JTiP$&۲Ǧ*sk<#$W>.cӬ@mezZTФ?ӓ~/ɢ5s̑Dg_չ︯鄾/un>Î/ӟӞϗsdl ܅+ʍ9$/`:Ù%ĚQs֊]WakMI (V{?(K9'*ܻ.v?N_oFEu+Woq ww]'tZ_Л^5}}o{^˳U/IWds9[uw _II2Z@i-\~υ<9]e^;:2 +xk`K*s C_cT_κ<9 +޳^IM1G(X")y.YjIήML]tAbzqٳ=Slu\NZ1?OL9sگ""##ė.o j~!ӏO=$UͲ"U [žr̓@%d;:#|T_M@rYyH% *s4jIf,uWi&rjz{ͩ .OUemI]dyf}_lK払~'V'9\η}\vWWw}pٮj]3Vu3mV.C/ VoL5eʡb3ނ[8-L%¿H?6) 32!߷b݆=4YQ,+'5xG=2ӲLMK"ʛ[|ҿ.Zs}֚}}ߙKȿ/AIjj6i5-{MJH=y51WGduz2JOvJEi^M c Ӽ oa3_2녻k5޻{Se'+w]TӞMVɊt ʊ{=*؉nԝ9gJU)zH\Oku\\k~!.Vof9ugEf7YY1fD\(urTCZ~*A -PPe [Pe 5O[\:& ߲,^LzA%lǚu^ohhihhh['ܾu߾,c4!#O-̞(}Ý۞Yꙭ[Y[ Ŝ4+66szXYIfPo:7ޮ[jj:-,{[QѶřaa de,~˜"k:卝we,S=]9OO"d矙ÄvEI쓜uwAe#|c^-5?dm>OݛnrgV?{Rجϕ.1Nen4˹H׼,c0ze20;`َdf)gAS20Q05%L?.[Y&l,grd5/ S~9,EE'昖2gs3" 61 ݼ9oOҫZc{w.v%uOwny6;zONk^9%A ضN3%F*xwk9dFFF$^N 9u.}`F=Wc7aK^_n.h'꿌־{s#xF)dx{:pʺ )[`(2On)G-8w[Xwe6!K-2{.zz. Z y}%-g ckZj!10LPâY̓j.^^aa4 OlFF~̋&ߙn.μs)sN9WMn(f綽>a2?)'E(ɭSԅ7v1vL+b#)afvcw_|k6%lOy*ܓE9q}y]x5⪙b4|Ef )/VvNJr(m$.E2e5 F5m[#0o`&I*&Rd H?">jeO[RrmH⭹~o\%-<<͒! ɳdʟ2-sdǗ<\]_m/ϙ?sU[%_D'&E$fd&x֋qye23_#. KQ;JX"d,o_iV[ix&dr!Lki[+2GݴبY3Y9|dޣc @¼L.}ڏ?zM/y~Ypoҽ}Ui <<2==E=)CԳ5zF%~5 r6+aAzФ8seg@S`\֢3õJr!X?I cx|T^1<ĭ OûѽȜrOO(8uvꟓT(SG'ge'Tڡ,krU(w$ϛ3k^ %[.Ǚ:O[ruz?TI9ɏ"?z!1?Ƨ!F?EL!.J#H픅;X&~h_Ӗuz.;vm$p.kS:vV=B:MoᏺMfAޫ[vTtu"85e?5% oXt[Z L5,<ۺuQxA5u(ĹSmyӧReԓљ9ӧTLSjÆtsɵV CϯSkKO̩ ?SUXT3gE+xÇn%WzKc|Ċ\5A5'ΫVp"i^u,4:x颐.LzSQ^Aa1"g>͚㌴=_&=cJ?9?ǃF,+~hh@?c)|EbznM4w1S[d{Tzߪʻ\2g.' ̩:??h4*ii_u3۹sS~R~Fʂš³EEy7XRx$#[_=W_v쥲Ke̯_?v?2GFH##}d>2GFH##}d>2GFH##}d>2GFH##}d>2GFH##}d>2GFH##}d>2GFH##}d>2GFH##}d>2GFh0 OCӐ4?MHXrׂ^Ap"x< Ogsy8o.eBLh 2 2 Lpg;eBLh 2]&˄v.eBLh 2]&˄v.eBLh 2]&gBz&gBz&gBz&gBLh 2]&˄v.eBLh 2]&˄v.eBLh 2]&mBLh 2]&˄v.eBLhWAvi9x`7V 7XNnf3)i@5-[)^Ap۔ݔGia  !1~~ ~&Ä &!&0T&Vb8RaB^Ӕݐi.WS i_8@'F ` v.np6)OTW(^3ʟ5ӿfL_3k5ӿfL_3k5ӿfL_3k5ӿfL_3k5ӿfL_3k '$&.hC =u :koLg <\H-iA9 ғBp.`%o _(zp@f#M7d(!p!yY*p^ tP'5;.^Apx'?GcqEx<__R>/C0w||=p=# xBC*5s'g*mfxSś% *tIb8Š,*ީ3Sc6:@'=` v.EnpqZ?ٮPJg?a7Ұi؍48<'{2,0[|x x ײR!4,MB{ӄ&KS&AM e'Vʻip>p?袵Myqj&+ )(mḲ&lG1cStɂ.Y% dA,]Ktɂ.Y% dA,]Ktɂ.Y% dA,]Ktɂ.Y% dA,]Ktɂ.Y% dA,,6†H &_@icg d}6,~9X րkZ\ 7Omv` _Ix||< σ!p| | x  B> `8` v.*2%HАJBpw.+9sey-A9m=#p35i l[ݴ 8_Ix|< σ!p|.QOOo x3Fѫ@ʑ\!33,0,)˖+,,hFeeeeeBO L;60 cy/y/|l`>60 c|l`>60 c|l`>60 cw|l`>`>60X [/0T[1ԤBg ĸ/Bs$VZ]AZ;GcqEZ>OW9Lhok1cblh]1cblBg+4P/+75`-uR^Gy,oy6qNYXOVi>-[6j]npCax<_Ix||g)σ!p|;_S]Q?rP˜ww1C c %J30f(aP˜1C ]>0f)[xV~S]!xS3~\Z/P/P/P/P/P/Pːsr.(Ceȹ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ !2Wʐ^+CzeH !2Wʐa@@@@@9Y+G?rx|U˱u=*0 ZP+S(S(ZPP.4Y \V+i6׀Q^Ky79)򗸅zv:y{ZqRJl;N wpCax<_O'SiU,sy8qO7yK3 a^BC*5s'g*|!o 0dg%k>+YYɚ/`-\7 /Qb#-7-`+z>=|< Ogsy8o%ʣ<1 $P*@@xxxxxU_U_U_U?[?[?[?[?[?[?[?[?[?[?[?[_6f;mvژ1icxHHlN6lvژ1'`㝵ژ1iclN6f;m+l+l+l+l+l+l+lvژ1iclN6f;mvژ1iclN6f;YhM&!%^`=e; C3KE{A.-˲UI I#FynBq)>RAW+ !JVBЭn%t+[ JVBЭn%t+[ JVB]A< "&VB|qv 4vj' |&UNSETUN\ET;UNSET;UNSLl53V3Zͼk5s̝V3wZi5s̝V3kZͬi5̚V3kZͬi55< _5< _5< _5< Ͽ6\Ckhs m56\Ckhs m֢9hN-SԢ9hN-SBͩb-SԢ9hN-SԢ9hN-S:AuЭnt[:AuЭnt[:AcNd~/ x< +9F$Z{R6Ԥo&FlIU=` v.E?OW9ZGhy-}>ZGhy-~ZOiy?-~ZOiy?-q1 "Ex3.m\Hqo"E9 6.m\۸qo"Ex6.m\۸qo"Ex6.m\=\۸q1qobf̆x6.f9\۸p1b\s.:\uqo"Ex6.m\۸qo"Ex6.m\۸qo"Ex6.m\۸qo"Ex6.m\۸q1bEx6.m\۸q1+bVŬxs#EEEEEhlllllllllllllllllllllllllވآآEEY>jAV{ꃬd Y>jAVZ}ꃬVCy6!c);㑲Z);섖dNh)K섖@>)@>)o)Odq);섖c)?|ZNh);| fh5CZjV3 fh5CZjV3 fh5CZjV3 fh5CZjV3 fh5CZjV3 fh5CZjV3 fh5CZjV3 fh5CZjV3 fh5CZЪ#G 82pd#G 82pd#G 82pd#G 82pd#G 82pd#G 82pd#G 82pd#G 82pd#G 82p'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~'9~Rw]yWAUw]yWAU *Ȼ 򮂼 *Ȼ 򮂼 *Ȼ 򮂼 *Ȼ 򮂼 *Ȼ 򮂼 *Ȼ 򮂼 *ȻJp*UW \%Jp*UW \%Jp*UW \%Jp*UW \%Jp*UW \*pUUW \*pUUW \*pUUW \*pUUW \j<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3k<3<3!^ܕOʻ]!ݕO];]rtӕȱ|(fs.^Xuvx-7\{~MQ/mo\ Ʊ;ūn,.;W7t rF)ѶƭPwߖ%mىӍMAY`GglLÐ>APV#$.j2{ВUvgm88 iZ3v4:q 6Fc/R:6xrieeggGo r?LJ+4F81~Oh9Ars{qx{%I `! F__/T#kZkJ2*SңHneO}=cՑG|C٦#W1==#ڣ--ӿzQjȶma5Ebkht h؎<ƾbQq!"p+KwM}O5C[ܯG׉dL{Qsm.2kZ86#zs/?Ւ7K:"Qoףw*ܾ~Z{V_'&vsm{9oPØ-籸76ޕVmkη墍L5{m;#~ܽ}TΘ}Ȑ{wSqy\cJx'\8fwN_~xiVc,Ιuػ|e,SOZW]6VU%ݹqfbANy;,m [Xg15Fm{_=ӌ@NC38F\fьh"߫C/NGZ\=v>"q{v'/u#x{uU@ϴ3sW8nlwشT7ͳ-("BEH+1b7d]t}.s`ivgt|ޖ:USۮ=)Hfʝu\UeVf9cZw&H&+g?˝S:,6#t꽑}_w|sOùW#mgc9_~-]kևrt?{Zɷɻ)~z ~;! rD19.'䤜߲%g,[-ϑ=Q(d6\].?.%)-?(?)/+?R˷P =yƟ˟ʟOk? *%!$5~zRc8񢻭g}2ARJZEUJ)OQ~TF 'L|S_ߖQ^N~B~G%!;"hɿɏȷ;[c=w{V޳{=wW_0v/}}Wyjb3]%\Ћ^: 0v[mc-w'6moiV:t>h/ݽZkuujm p['Ιx ;o+r{Q''CK endstream endobj 10 0 obj << /Type /FontDescriptor /FontName /Lato-Black /FontBBox [ -166 -357 2334 1904 ] /Flags 32 /Ascent 1974 /Descent -426 /CapHeight 2400 /ItalicAngle 0 /StemV 1 /FontFile2 9 0 R >> endobj 11 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 376 445 580 580 818 723 245 300 300 400 580 236 370 236 400 580 580 580 580 580 580 580 580 580 580 276 276 580 580 580 441 823 737 656 657 742 565 557 712 756 320 430 714 519 939 756 800 638 800 665 542 599 726 737 1071 712 677 610 300 404 300 580 394 330 539 580 486 580 544 362 523 580 285 283 576 285 861 580 580 578 580 413 440 400 580 553 813 573 553 477 300 300 300 580 193 376 580 580 580 580 300 507 330 785 353 506 580 370 785 330 405 580 334 334 330 580 729 285 330 334 394 506 712 712 712 441 737 737 737 737 737 737 938 657 565 565 565 565 320 320 320 320 792 756 800 800 800 800 800 580 800 726 726 726 726 677 638 658 539 539 539 539 539 539 834 486 544 544 544 544 285 285 285 285 581 580 580 580 580 580 580 580 580 580 580 580 580 553 578 553 285 558 355 1068 881 542 440 677 610 477 580 330 330 330 330 330 330 330 330 330 668 580 861 236 236 236 415 415 415 580 ] endobj 12 0 obj << /Type /Encoding /Differences [ 33 /NULL /nonmarkingreturn /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /uni00A0 /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /uni00AD /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis /dotlessi /Lslash /lslash /OE /oe /Scaron /scaron /Ydieresis /Zcaron /zcaron /florin /circumflex /caron /uni02C9 /breve /dotaccent /ring /ogonek /tilde /hungarumlaut /pi /endash /emdash /quoteleft /quoteright /quotesinglbase /quotedblleft /quotedblright /quotedblbase /dagger ] >> endobj 13 0 obj << /Length 1144 /Filter /FlateDecode >> stream xenFỞBa`S`W,%K90d(WMw> endobj 15 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 580 788 1192 326 326 400 580 731 734 580 767 688 688 580 591 688 425 580 580 580 580 580 629 638 330 330 330 330 330 330 330 330 330 330 330 330 330 0 ] endobj 16 0 obj << /Type /Encoding /Differences [ 32 /daggerdbl /bullet /ellipsis /perthousand /guilsinglleft /guilsinglright /fraction /Euro /trademark /Omega /partialdiff /Delta /product /summation /minus /radical /infinity /integral /approxequal /notequal /lessequal /greaterequal /lozenge /fi /fl /commaaccent /grave.case /dieresis.case /macron.case /acute.case /circumflex.case /caron.case /breve.case /dotaccent.case /ring.case /tilde.case /hungarumlaut.case /caron.salt /uni2669 ] >> endobj 17 0 obj << /Length 379 /Filter /FlateDecode >> stream x]j0{"EQuD`n`fh/|圔6Lbr?Xaed+iXpr r-v|Sl cee{* Ϟ;Ѓ1:Ͽ0ZY97[;lWwf~Xyf`ơ #[u/ ̓2O͋Ԗ{j/㸘<̍Ck ZEStl]r_EޣCgjM{hs`MK }$dM+k> endobj 19 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 376 445 580 580 818 723 245 300 300 400 580 236 370 236 400 580 580 580 580 580 580 580 580 580 580 276 276 580 580 580 441 823 737 656 657 742 565 557 712 756 320 430 714 519 939 756 800 638 800 665 542 599 726 737 1071 712 677 610 300 404 300 580 394 330 539 580 486 580 544 362 523 580 285 283 576 285 861 580 580 578 580 413 440 400 580 553 813 573 553 477 300 300 300 580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 376 580 580 580 580 300 507 330 785 353 506 580 0 785 330 405 580 334 334 330 580 729 285 330 334 394 506 712 712 712 441 737 737 737 737 737 737 938 657 565 565 565 565 320 320 320 320 792 756 800 800 800 800 800 580 800 726 726 726 726 677 638 658 539 539 539 539 539 539 834 486 544 544 544 544 285 285 285 285 581 580 580 580 580 580 580 580 580 580 580 580 580 553 578 553 ] endobj 20 0 obj << /Type /Font /Subtype /TrueType /Name /Fo0Form /BaseFont /Lato-Black /Encoding << /Differences [ 24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39 /quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron 164 /currency 166 /brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior /ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] >> /FirstChar 0 /LastChar 255 /Widths 19 0 R /FontDescriptor 10 0 R >> endobj 21 0 obj << /Type /FontDescriptor /FontName /Lato-BoldItalic /FontBBox [ -219 -500 2098 1874 ] /Flags 32 /Ascent 1974 /Descent -426 /CapHeight 2400 /ItalicAngle 0 /StemV 1 >> endobj 22 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 334 392 580 580 741 658 220 276 276 368 580 225 332 225 362 580 580 580 580 580 580 580 580 580 580 225 225 533 580 533 390 745 641 600 603 687 525 516 663 696 290 401 645 476 857 696 732 577 732 604 494 548 669 658 966 630 606 566 276 361 276 580 363 295 519 540 437 541 475 320 487 544 259 255 511 251 792 540 512 532 519 365 394 356 539 499 735 505 499 440 276 300 276 580 193 334 580 580 580 580 300 465 295 791 321 450 580 332 791 295 392 580 333 333 295 525 700 279 295 333 358 450 737 737 737 390 641 641 641 641 641 641 855 603 525 525 525 525 290 290 290 290 727 696 732 732 732 732 732 580 732 669 669 669 669 606 577 581 519 519 519 519 519 519 732 437 475 475 475 475 259 259 259 259 524 540 512 512 512 512 512 580 512 539 539 539 539 499 536 499 259 508 319 990 780 494 394 606 566 440 580 295 295 295 295 295 295 295 295 295 597 525 777 208 208 229 363 363 363 534 ] endobj 23 0 obj << /Type /Encoding /Differences [ 33 /NULL /nonmarkingreturn /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /uni00A0 /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /uni00AD /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis /dotlessi /Lslash /lslash /OE /oe /Scaron /scaron /Ydieresis /Zcaron /zcaron /florin /circumflex /caron /uni02C9 /breve /dotaccent /ring /ogonek /tilde /hungarumlaut /pi /endash /emdash /quoteleft /quoteright /quotesinglbase /quotedblleft /quotedblright /quotedblbase /dagger ] >> endobj 24 0 obj << /Length 1144 /Filter /FlateDecode >> stream xenFỞBa`S`W,%K90d(WMw> endobj 26 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 534 580 758 1083 306 296 335 580 669 680 533 680 686 632 580 581 631 384 580 580 533 533 580 558 571 295 295 295 295 295 295 295 295 295 295 295 295 295 0 ] endobj 27 0 obj << /Type /Encoding /Differences [ 32 /daggerdbl /bullet /ellipsis /perthousand /guilsinglleft /guilsinglright /fraction /Euro /trademark /Omega /partialdiff /Delta /product /summation /minus /radical /infinity /integral /approxequal /notequal /lessequal /greaterequal /lozenge /fi /fl /commaaccent /grave.case /dieresis.case /macron.case /acute.case /circumflex.case /caron.case /breve.case /dotaccent.case /ring.case /tilde.case /hungarumlaut.case /caron.salt /uni2669 ] >> endobj 28 0 obj << /Length 379 /Filter /FlateDecode >> stream x]j0{"EQuD`n`fh/|圔6Lbr?Xaed+iXpr r-v|Sl cee{* Ϟ;Ѓ1:Ͽ0ZY97[;lWwf~Xyf`ơ #[u/ ̓2O͋Ԗ{j/㸘<̍Ck ZEStl]r_EޣCgjM{hs`MK }$dM+k> endobj 30 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 334 392 580 580 741 658 220 276 276 368 580 225 332 225 362 580 580 580 580 580 580 580 580 580 580 225 225 533 580 533 390 745 641 600 603 687 525 516 663 696 290 401 645 476 857 696 732 577 732 604 494 548 669 658 966 630 606 566 276 361 276 580 363 295 519 540 437 541 475 320 487 544 259 255 511 251 792 540 512 532 519 365 394 356 539 499 735 505 499 440 276 300 276 580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 334 580 580 580 580 300 465 295 791 321 450 580 0 791 295 392 580 333 333 295 525 700 279 295 333 358 450 737 737 737 390 641 641 641 641 641 641 855 603 525 525 525 525 290 290 290 290 727 696 732 732 732 732 732 580 732 669 669 669 669 606 577 581 519 519 519 519 519 519 732 437 475 475 475 475 259 259 259 259 524 540 512 512 512 512 512 580 512 539 539 539 539 499 536 499 ] endobj 31 0 obj << /Type /Font /Subtype /TrueType /Name /Fo1Form /BaseFont /Lato-BoldItalic /Encoding << /Differences [ 24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39 /quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron 164 /currency 166 /brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior /ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] >> /FirstChar 0 /LastChar 255 /Widths 30 0 R /FontDescriptor 21 0 R >> endobj 32 0 obj << /Length 44979 /Length1 84140 /Filter /FlateDecode >> stream x}wF#ͨwi%m}׻^e 6l0`TL 6N@cC@HH@% IH BWz;#i^C߻ѝssνwF& !!S&>l$!wE7O?FjBlcWZ+x0/D<.Zz\P/l;^F y|%Mui] aO=F~ο//ɀ5;̇. !g!&Opz[&2%cP7GPhZ :Bj{>g? oqߦ$4& e,<~8^M汵dW>&w*df)Y8 1kZV\+٦%;45{ymDD_"ddx}-}'[Oq L! fvݕ~J \R2yh#d$kgfbb sDuaAӨ.@K'dxVgZS] $EK1v60@Z]|Lbr.KÙDm:Duqmq?;ӽEjcf,'PAk @KA57#72 FۚbԎ6OJiBvٖ/#w+|Qb3h6!GX-՚iՌ"4tJ A߅| 3j;wSaAQzh&_DO|H>b"&p31[\ XӧHDpۉ\"R$ p'q M鯉x #>p?H $A Ix)/$E(%)&%W JR ^EIusRCjkI-x' !/HHx3iB?I+iJ6vҞ #;Hp2|I:ӟd$(2 |4 >KƦA)|<>H&N&]dd>LJ?!Tn2 |:!{IOodIf"3gY鿒9d6\2| >_@BBd|)Y,#Ke+9?dd%*r.j | Y25Zd|#ِl"7M[y[ɖ6| |;9=r!||'~ ~1({\ ~ ~)2r)d7 Jrrer~5 r5^r do}rzr z 7}&d OKo%FNnܖ~In.r'{o{ .9H?D?LG"Ga@O~<@~~ y!ra` C#aG##G''O ӯ' '"O?M~ y*1y'gɏJ~y6[<)s/N~ yEs__eU2+%_oȯӿ&%F~:-kWu7"oM~K>yK?H~EL1/O%N| _A)$""N>3 7+ȗ韓ɿOOSd& .aNĚY|,Z-4Z^uokx VGi8j4 t78^rNi*W:Z V͉Y~`!g1-v:r? ڋlE,4Z R,ky  ]-AV-΀j4(XW$uWz|_eMGXh[PHFUNL¨Za@,ZV\FA,XHX u*V3 et_z7:j) 9Ri(jjߴj.q+: 5j T.Z )S;k9bBKbȬ`֣,AX-*E,:W ֨7Puz^Wx T4)#UҌhQsz 1Ao0`6̰*:r},,t (˺AXX`Q ':FaF ,L z3FaʰaeӁeP MҦ` FVQ3ZјI1 #-z#EDU!L>3ІHV$AR\Q "rba &#s!W`}b4MhhRy ̓Z(:vna f܇7@7Ro5LZV \&HbȪŤbPІ ZCoIu$ ..T< f`aa2к .Y/̸w0Z4 `Q22vÂ07Q(tfYXQP>l2b0+2hώOϋf\x1(Ng6&èvOo8-Q,lv Ѭg#ݘ+O a9f^g fQ$R0Oepz {IC Q ,Gb0 X,Z L~,bTPuI{M˜iuF\ߌ p3N+B͙Ia0l$#dBgu\hN,F"`l1MRx ZD1Vq M[z֊ ^uѬ "XZLL,V zmHV֛r}35:ALlfmd44 l 413тk6EdZVb[fwN TQH;!Cǐ:<ڠ֨]$*tժ(nQC1dIGx!tTBYqP :iW=m=-4S,^ !nAJr-` V,tFI`VU^'tIgZ 3r-&$4 \v%,™vݠv]RDOvE1Y n,&YQ%200,h׊ Q*W(, FQ4} bh(eh.M6K2ڵ<T f=֢uЎ b ׉Ҡޢw̢7<!hehSFH},ɴ@"jU"+(TpJ'}Ib. 2O#:.TvImfU?P,!+!ZfsHۀEF8Z`6iehN֛Gv Jv.6jX- 9u.dXU*@$m`ѻ .* mv8& ;"!;hD(6QTaMf .Xp ٖMTBȱAlBeq X͒r 2KLR`% M9m6`>DCJ`2-ҋưG4KvA%vѭ\QD 9dWT",H,;t,쁨.2Xܲhw:B$XT,S-Dq&B9i_T.MvoD9,26+)mƈWH,$Gq0:}HPSs< D,8>7lVp +8r! ~h+K겇>i=0Z$6M>  $aKv.b8tt$8JfaOPvQDhy}8|CVv#5+dc7 8$?|3,;|IZnLͅRM ŢAbu>՝+o6C@Vjv8N";Fq:(8,z m"5n8VaB!W)y^j?!Z!?R+օiq;d mmw3Qp:ݡ?n2, !L| D_a;Hg2F}NO(Py-Ň6scƎ?a⤮SN;cs#\z}=?x>='{k.Z;Wu͟%^lŶ߱Ͽ<;w^_>G/=fU7H?p-?oּʯ_ 3"C OtYl'iig&3vZypщpy1~$ID٨6jѢ˾I6V@0m1]\y>|mmJaw+m6Ѧm@ 3m2hI}u%IqƔ.???~{Ͻw}ݷ~w{wy[wT?op%)s&Na9Ƥw#ljpsf#Lq8<|YQf.`QQWq pwxDx鼅G5q') %/2=rth/whh;=hayJ hcG铦wthG/ ?GEzzp6')>_ȬBV&O?:wޭpnn#1 9bhHc̅S">Z"6<}8$P̋q%ls.T9x }SD+cćJ y _JFZ$E,)$Q\$e/:Q!"HEGPw2&r+aMD~?_C}~_ t438riN:U(Gv)G 48jͨj`6y*5Fz@@.f#yƟ#v#ˠ24-44 t 0 XȈHӏ2㤔Zz2 `sByWAX#sGU6Ш&.Pzjb>/`l% ^kL,YSݢ.ecQk*1Ƣ 'VsM}ͮڶōGG*㜥lx #ŭE>d\YH$%_oI7#EZMl.I&ݫ6CeCCUyDmM2Y X-lM5g! d9l"@yF鯄J评b-\U΢s,DټxvijR-Ej-J"%Sͬ9mj oqV)t|&ZaT@7*nP>%/Syu0R./ 8b)-!·0#T 25#"+S SV$TZB+,8$KeӊO >o#8vۍ o7zޠ+ >KkJ|Vq\!Z[9T`TI1N`)meX] HqUb:JG/T2q\ƙ//{4k^o*"r}2qFcI`ws5_s?*YNC>`ffnC:2©!l2"g/`ƨggڦ]L02A#޲ctkǽVTIxq2:sT^2ɺZj.Øe[w]q)S& GPjZ1216h"Em3;lоU~MPXruUiⵣ*g ݾeOlj_^7  Ռ,yNgl7f'QQgRŘU]o#~zyMڐf󂛗[5b-_=rd3:zݤ%Hf.ٳe\\BvR\8r2jHy?H1R~?IuqQog @4+T$.x I2F5R~0 `u8fڮftZwAsAUWSi/4vi8;Bnyvt]6f#eקĆLshDuk㗷pZ^bHğ6askjINsݻsSfYҽbI03~ak-'T69 0)q AHIAْzSLj7u *,c|><)aO~C,^;y|wT0UtL|n޲V7_̼v_.>Gìerj]1]^(P1HNZT% MSP$:JduY%tQ:J@G (%td (1@G0˪H&PǴpj)C{74̿htjRAWׯauFXjGPkZָ)nςKq%ۇ6~1*4 D楶 6oXp3u=B~08#dql4 V|vZaW#]tv1Q(FL#&ňbD1b1Q(ňbD#&͍6j6jhڨ6jhڨ6jh6jNêQNW(gb>rq+m:g/qy8i|X>?:mR@s&~:4t7tQmnY[Kg^9'@}ڦIMѭ[.XݸhXY87e:ZSv&eW":bX: ƣƥ4)3&F=oTe}(1kg,;Lb:mguj[ܟ W2@ZwiK2q2)RڔF&x`QXG۲[8alA`alA[alA[0klAڎp#Sf3 DRhTúU3ݺzmnh]=g|p/ 3l F;r]ǒwR^>i/. vE{5gRVS)+@hnT:~s-'F(?R'\q/lCw3sZܟKuu,:a׼d碖 ϮVTݽGWNl>9-;8WOUyHӂ5/;dx Q_ ϑ J/,8L4hdbx]u:bcMIUg֐g9Op.fF [BwEz;q ӻQJݙ ^63Q-Bq`+7]pږ7oG^Kot o-/}˜ o3h4rؤGkҝ?/H\;5CglqяJb7oXvhS]G m45>T=yqUhإEaCMJ+ϘL3F> ̴O֌9}`Ӕky6?Ry^fbcN㨭U6OSΎ+kʲ.ߴ#߸=@y㜎xevnT}+7'V0j缆Mk*o޾a~_̡' Ndϛ׍m)i$sȮ90t}l1εWjI3'La65Z JN!qBX1+Hre}B9pϏ;v!}T ׋/,?mO$yuyqd1b 8r>٤R)&Q3HWС=),d7"&Qɝ.4eQᇬy>R_'>]Y_]Tn~ \cW_W78]󂝷A&fߔ9''43YOǑV-,)1LSڷ9%!KrescZY/cTQj|H^+B V{r/ݎH2v]uv]]W+` uv]T+v`@w7[؊:?,?];aT^y0yX ꍓq3s{F`5c뺚V L]0I6&Yq-ʎh)fMk~}$rJkhFՌ!.֡*qNsÓO|'&'&<^շw>{A8d1Y {[*V1Cx N'ӟry'YCNr N֬Xa-VXbXa-VXbXa-VXbXbXss5%Pӄ:sVHz*ӆ[V'~`-a2YVκX1y uŧD: >ՌQ24kV7Ru=V`>uo{1sNf֦.E&\l+] 1o_h5ng߹ٱ ߿1~3 2ꕪ2'w$InML.^T].O7Nm=} 61m fLns)%5\Yq嬆𞣳]ASM 哏 $e۪Yȟ~JNϳd>|>X|>냏c}>ÐTp<;%QǨcT1q8Fu:N1̨cTQYiN̽v99zÄ/0ҝ%7Uڕ^ǯ_Z?G?TmΡ?Yඎ9Gsʣۆ~?_ ` M.fϊs4qϔ'hry+܌9k]Ggq4⼵WTv05V8RDeMSrlOA~yo4Yv&g5A[ݛ:Wˌ[ BNf{HlГ~MzAbzJUgխuz\PCz[un=ԭz[8b>M9kʿ:P' t)&AcA{M^@΄biV]tL`K4Mipx^EK/q֮w Rq1W+,`قC7ŹG4'k ?|fMugUrыli=&xQDo)P{ӡcs$u^̨3NBwc2h˩%~'5Sk~ڿA[`#.2QX$$ʖ+bn譼q}u^ +,15_=9ocP ӊCVe7NMG9u'v\ r70F>] j浬fd%=r,T!~G>e%+徴pQ 1! JMy:РuLVxkiL<1dF2ɡA!VGCvC fa}&eb]zcj7?HvKڷI]c O'ߘ3KB:kxKZ|)s}wL]rǫQs)⾅~zlW}@&_}v;rsX!W,8g͆S׳ʧzdV4 .YsCfI}v8] J;V]rSq{L :n~Űæ>ic6`S^]{fש>UQ"=lRniN ͼ#X?}zy4.`mSV2=8H.:.l_f1fZʶe촹Z$zF/{,0s]E?3Q)HCS.k_phzԍ\܁n$ 5Mn%;EOC~9 dq٪2+K*p\E$.DqLލĩ< /)yӈ^ /q‹8E"Nx'l"Nx'L56b6bl#$fzHtRfe}CchrQ4:"d^QA㐹1=ou'J&޶}V̞2_,r4?!Хf{dS YqC3#歿hgۉ#`[Lp`X͢ , ^ ^ ^ ^ ^ <@\3bT AS1h*MŠ4bT AS1h*T )K; lL*̘PgLb4 .qMg#&]Th{Ϙ'U\?W=dшt}Î9m^/yݩԖYnkmOgκ:lgw:U+&36_,ՇzE/Q6n.^k7 [g'Ֆ-Y(~aly[?ig0EIKZ_Ԧ)6]HNR[:6Y02+q~nKRKu ]OdyDsv^Ex4P>oƄ@$v=򼯶-SqZMNc5ųo8ֳ|fZu!i BԏVxHov٤,%AuNP7h hRM@σ2]6N& J i=2EK4!z+z+ފ"z+ފ"z+dV'ro]贲bvS> ɭs̆cJan-xs#364nXW˻ś/ z߾]69LlSjbBNR5i3&MNS)/H4q+%cuG 4nHjsӟ-:J&c{D#3bO_euQT.BkOЇ.3=֚5q́181ZS_ y)+do)XƜ69kGJ( ݪ7L-Xyq5 D[X79=2|>XK7v20?\u6.:z <0N'4ٺP6c帬S%:YLJh}pPx&lp_m0s"k=eLgI;v| Rb>ku_;ݤױ&imW47p_8}F%+E);6z.GVTd6py1#iXy8%3GgǠnEٝ[mӵKx1{26ZvkO~aRv+ay.}!{U}c𰘊G}@ 0t0tw-6۟J>-}:J#sQ[-ͼL_6}IGrgFF]v2R3$2AHbAE^1跳6|p:eCten-3Q9x-kuOuoЁ^ Jkk/dw;(D?1[nk7c>j ̎I6Ga)&%m{W"ß"Ñ4)KmrQ TM9w]e-]rQvwi3Nypn ]$2zq%=O0!=^eUMXpbVS9|0;Oۗn欩q۷n,$76K㖴Etkmh1jwol߼n ?:}xn _tbGvKԇTpqF 2>ADRJfWIYkf~Fy+%Ks#-ߠ"eHXMH iEת?o}9P"ؿ.[=W._+:Zo! Z(: j#_~mʍ5m3G_L&֝ӄ>ks6c]h.w}[4 R6.yY}[PSdJIRypڗ0ͼȼS38S?U^)wEw]9eY{^s&UB*2Ԗ N5 "6.-0-#3jfW'MX=<4Pe9PٰRT#}Mfw~Gi./ mгMNЗܔ=$u1* s`\s`U 0W*\sDUd[Υ.\\. OUwƛ6?⥍ Ff+^аxPXˤCL.+cȜFq՛fRtzRiYWK,҅oM>\~7c2虹i12oJN/>Q= L>F"": L᥺]Lm׸WF%3sLQԚR-4sʡ%u]%]rO"~Sbzc˨տF(h:QST$qdZ3w (V^8YRЗYe:L-`xQiuw6`x:`x: lG0E ߠsa)sVOg[9C?t)? 벺1w̉.n)XnAԞK]=ʲV5VN]R1A/DKG/9Ԇ;uԶ[?P5qBiLYdEl=شtiV+(,8U75-1狭g_/2%}d!7v~֔yM館6A1oN\'w~3 廓3pPr搩N2 !//fOl!)>sw":!@`8d#9\nh* GYbr%i*јiXQ9)iަMU2*\X"I)K,sT<[JpҦdySL;Jb~Is#eU9"=g~sG~wd 6Z>.<:]c?F**s^pfRRAw]4WeKܨ~>^>I^aYHIvGb9g>.>%TDG!5=`V.֗7SUOXl1ezdޡ bfYYИ!YQ^%49?d2sfk̜ESCBpE6*&,JL$7}!v8 }_zG(~ǤAzq@/"9x^uӭfUuFl[.)~fӓǕ s=TLP7\/U+o.-j|.ࢮH:v]t/7z6\%_mqюO#Tn*Mj&͚]ԀKrjuKs >r1 4'NtɗmRv>eؿ267=rӦpWޒV~&N [ӈi..ό2 g̜,ʒ'[`wL;#yD)7( hN9\ `KcrJ}^dlSekJ%1!~"jqW^a WD+\s,y6!ͮaNWs&/oOu^xPt|a6mʋy7ϿkΟ$[9P}3.co̜[s=TS]IicոlAb́e喵o6/=T{]Z:kUЩVr)b9?1XNޜMu8˙y#B9!Q%8g5ޣAsR)]ca^ -k s49ufq7Bg-RWox;&f>Mʕ姤 +z匰rg3MNNpNsѕnfWPiڲti䥗t{ݕuۂ%ԽR{`jDŀE1˿~PFoGϤ>?Wсʈ3--!y.xvY71kI媇p-"qqs#•*݊iE*뢼rO>,ӿ6 9W\㳞"tk̢#̢#hYQ_3#HvGH`g֗.L]~MG܃EE91D OSbHb]fd>$;k9 ""&'uS&(g_Ik~YeFt/NK?>n+x?PhyEP:5,件M3]K1]vSʞˈ?1(ZujL p{3!Yޑ9Ÿs HOu7nq\o]TM5+W+7hX&7,sڔ0iԔME JM9_M98⦜@8/N'@pqb ''@pq ''.2N88fZ$MQ{ZmKRlO~^Jp(}=5xdɍ+뭛QooInܲwݛW]=3tɵy.[nǧW6fa:,Z!)*]wCq|A;ۿv=Lܛ%QpyqF5)m˙EO ,646X~Dcz6^_1wlv/Uw^P>IAn˗Si+| S y헯jnw\~q]ȟ_ak'z̜ʭ{C!%zHfImq4KYw:u["=x&twYxaU'mSsAͨ)_vcRoTɕEw1ӻS!Yx)ϐ,% M!YxdgH!Yxdgܘ,r s.sJ|@eFI,^ ˻c`QD|!/_r>f/0 eݶoi]H^"Jwl疭w|غV:7rnڎ"C$$Ur2=5]lo,H\ΥDj, & _}|qUg_ک١huJD{c_ą7|7̱/gO<]3 g\;~s+!;Xw[V;yqrU\MnDQE)|U|ݹ ń\]2uK+N*N*NW08a^q¼y '+NW0)4/WoN5^vs=ÚaNW)G7>RZTZ` yry s%-OH),-LYrE+LuuS;Jpu>򭩅gg%Ħ_]/\-sDs8O5,ݙz索+]C|tOO`D\w`D0Qȿ_|Nϻ_}KL 7oHV^fY'$Nﯚ冫vWRtYz?A]{$?!=\:'9!7<=[-xf38(rYӂ4r}8(cCݕyC˽}ѫVUK6[jיUݮM46Ϛޑfp;3?\Zr뺊Rc2nq,Κ!R3d?nXf<֣+ rC<ϸABB9Z2Q\ Yb/M_.4o"%^5՘3=0ou?/!ZQ~Q&M5OW|Ce`UiԽ;}2>TnoѾ]t{#>v|}=_svn3ڷ.<;wlK#o/ky㮈/ugI;M/F&u+755o(\QpF 0 '`N8u+7 '`t*0H),8;_yu8M%+寥 *co5ǻJ"V|YZwm/)W~;~CGB:˪e 敫k<4!Hwqz׻ϯj,5=j;+ք{*]mE"|oqK\M&v(T:f}[EfEsNdPw~/>]q 1TR H3^|ݽnt?{>Kol+ݫ);uSkyimu'ڊ?n|# ˷Z%mͅwp9ڼ㗙N~M":)cd[g͋xgL6lzbo8uWS((rk;iEE]YT쇊)&7ey$I &'L"OD0\:ݳ55߉e݂ͷiސRUsgI׳NOSZ7d_4'-AyDm^ [+7yi'߾O)%T^)]ꗞ]aM0:p-5GLLo+g ~zMkyMPSK9yN9R&r6sE~[㰩+U^d(FCӕO5zhȉam׎?Q?}TѸxHZw'{⻼fEq3UyVǕWR;Îr=!O[iݵ?uw|bZ}\3'BKnWrV3!/7% ̮k[ҽURc͙!Jeʴ$136@[²OdߔOϷd޶bBo)}5g\9nSO~D:̤\K=S\+5ʕ(c zfV:nP+;Khs+V̟Wlޒl6'fjb aa¤iaaife-Lʒ8$=[suͨyjJ̜](]\|֋]C|ħ_|)ymbsk]%"X ^*ȍiRǯLNkEsg^1Iщnr%կ+h:E/ ^3p*!;qϧu> )}V}6Ƹ$>:#y~`<6S< 7kM^&K>m |rO-WMYF\|.LNTտ(~{n?(!U_/\ LUݧ"FŬܯ~gڕ1wұAwD D/$:6Htl ѱAcDMul ܨ[g5tˬUSj|sW m=RؽчD99kKa^zB]^bOd]|̪ ˿)}T'?#Q'[iotfygU_Jokc5ҢWFO~?,nl'M >۪S<<}cB :*Re-gVGyݽ,fkCէTIh~#G.MMLD*K N"[eg-ܐ-9(ulerd?1Y6v3"HWR7/y_7醼+}}2;sRaߠceOz_瘝2}5}x4spe>/w{7؃x+9uJW׼f5#◟Bup82L?{'~7nS~GNs-I%=b<]aRw Y;?==$nՊItf ]`x0ѧ:*I r,TyM][rrt?kOFō@ 3rJaqo9'?zR9E#GWfdhJ̬r̓rԼFE1)YirC xg4Q zkӲk307Ԡ+RY'aPjulgtOS"u"RYB"O\ ='Wߍ-ms׾3m韝O~ȹ[YK37[n [<#J3"'uhٷ6dmv0yz(O)ʈ eFm7ݱ&kbcqJܕ.Z>i'+Nu<%pEEƲ{>Y^Oד7x\WcOS%?Mr_yVY(T8;Ĝ:9훴E +l&p~]js H׆p-ը][D\6Gu=rȰ .`jba ]vba ]vİ `+UB9L b-X .t֋]C|ħ_|)y0a ,/mʛ yiB^J)/?ȿ輡Pk]MF7ρ3n c؊bv|7rzy{{%dLig}E2Ms+RsSF;~Eç;=_Wʫ]ط;/r 3{[iprfڽp}e|˝{T+4†" umpU£A8CO*QH/:f#}uZXbD܋?XI84`zݫY^UW&_Y#wV5)?0ZRY~A~_C9%aԸzXTVxZF,߭O14/qˮ S)lsʶ=,) s<$>;g@||Sloڈ`x_cA۟H V|'kq[XRɿ#4(P4:9Yۉge%s&Eo}Ɉs{4Lb8p6 `$܃Ip&L={0 `4L={&Ξ4;@d͆\ 7lJM\ySEڊJs}];*RJ[=}Wcs5*jkUR|=8-!)+2V}*Sܬ%{gվxG5tnxwJGYBL/w5&/N̯]}WB_T#7|;+EaU_HS0zk_^~RTC<5_M~lk}'5gJٻ.ݮv/~z8֬y{oޛM?^n?; }~Nt>"oyknLWax[.U}=wS#F/irr*r`M([9zZa"Ɣ ꘳ePwsV~ٌ鑳Uk99sК9jw?/e{C%Jy;* CR@qy _\}QK-v\Ju+O;%:7oЮZ9<T%GZu;TW³{~'~eqKj>`gmZysCI_3?>0ij.59f^>pݴc. :5)5W5ڤS2?=q{vu5r2$yqtVM]Ui7R} \7z/W>q6Jy@ٿ~`!<>0 67<6 0> m [j _3}9ڧT:vZwOWe$q.*]u0'1/W_zs] zw:J"P:w͗ʳ B{TIT5 t-s]ݏw/Xfmክ//7??T-8J#& Y0dN@j1Be\fd鿹}HSaMB)rԾ[r]%  ,}w */䁛.=kS[9_SLɏ2F&jnDbaaIѡ۵- fY3xjzEЀCbtȀgGj?D`zvSfHp9Ug'uZKOq^!5C>:]zE^*1/# 9&z?{j/^nL鿜KǕe?>S74g4pm /#]nbϗ=^&M^zMoo>Y>>|_  ~J~{~Z௃ |.0dM#!B>Zz)xCF*"<0jg_lObstq[HHx9a"qM݉ o715)!夷 ,xOK2EeW#-L{!EݾE?1j 3&ߌ={2dI̔LYg25E2sG柛̿3avd鲊,і,KRe9]-{{vk/d{{^Z^n^q^Eޭyy=__k~mC#}[ߴg]%ƥKYiK>RU_^Ze#EEEGu%˿_.P+LZհUWqg7ծ]k=RIgid˥+.T6P-|t""@uuZ7GQBX炓{ & 'w@~ǁElysDϒZi)|U`, `" l;N ƽH{ Cax|<O?c?Ssq:nup[V:nup[V:nup[V:nup[V:nup[V:nup[V:nup[V:"vrD`AX8"p9X ` g6p/ || (x<O3;|yqǢXcQz,JE(=ǢXcQz,JE(=ǢXcQz,JE(=ǢXcQz,JE(=ǢXcQz,JE(=ǢXcQz,JE(=ǢXcQz,JE(=ǢXB3Sԃ9'$@d@ˤW=,0ҲqQI?(m U:άhof[8o{^@C;iGQ䏁GS\?XLʕ ͓-s&̝\,0O\`FnEB# m`;v]NІ4;xHǹ ??cs!@_k}m 6@_k}m 6@_k}m 6@_k}m 6@_k}m 6@_k}m 6~ޕ)ci:S?R@~1yX`$8Wx?< 'ɓ4rl 'X.es\:o|F7NNVE/\W^6H$4LK ǭ\v`܅p/ || (x+? $x < r[ \ p9=)8 ?c860|ęs ǟ bŸ +F|%7VA؏8w n}i#( #~ (EF|c9F|c9F|c9F|c9F|c9F|c9F|c9F|c9F|N}& 4~āɢ҅X`, v^ Cax|<O<8v1я&D?GhM~4я&D?GhM~4я&D?GhM~4я&D?GhM~4яDD5k54p7"2(Gf\f\fd4~GL)0brq6$0yR~3cX8)W*er*des\:o6lw:xz&-rr*s-k:ZZvM\yv`܅p/ || (xk> $x < r[ \ p9=) 8~~~ ~~ w,Yܑ#gqG⎜9;rw,Yܑ#[ZZZZZZZZZZZ/FQcaNjaX;ƣ999jaNjaNjaNjaNjaNjaNjaNjaNjaNjaNjaNjaNja[Fna[F99999999999999999999999999ocaNjaNjaNjaNjaNjaNjaNjaNjaNjaNjaNjaNjaNjaNjaNjaNFuA@?~1H0dke X.Gp~)XF{9C7p\˷7;hi渕olw{ || (xk8 $x < r[y~:8~HB\Yd@zgRc+8㜈ɧFsS$gT@Λ+M`†e\+!Wذ,, q|38,z0W,KzFwp~ʹp5` v;]H{>_rW x< oǸO,g  U0 p2~HG1ǟp)'Oas3a&I45`׃ 4q~p||FOOs_玜9{q>|vg/]|v~3^>w|zs算.^>x峋.^>x峋.^>x峋.^>x峋.^>xs/gC+VZY?~heC+VZY?~heC+VZY?~heC+VZY?~heC+VZY?~heC+VZY?~heC+VZY?\&8@%X]&s\)21/kioQp ?Xbd#,Ff12Ybd#,F × ԁzGGV-c--`38 3|,pڟԁzpU-FC(-c5bĽ/\e`| Cax|<O-A-A-A-A-A-A-ARd",Ef)2KYRd",Ef)2˰2 +*Êʰ2 +*Êʰ2 +*Êʰ2,Gf92ˑYrd#,Gf92ˑYuh 8]']`1XV{W}k~x<G7 $x < σ\7}m~h ''\e`ʙm`;v]Np/__!0x< O'Si xGlV2m`;v]Np\W*xJ<@%PT*xJ<@%PT*xJ<@%PT*U{v[VU{^EWU{^EWU{^EWU{^EWU{^EWU{^EWU{^EWU{^EWU{^WaUX{^MTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTMTjm 5ְZ[jm 5ְZ[jm 5ְZ[jm 5ְZ[jm 5ְZ[jm 5ְZ[jm 5ְZ[jm 5ְZ[jm-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՒUKV-Y[dmՑTGnRIu&ՑTGnRIu&ՑTGnRIu&ՑTGnRIu&ՑTGnRIu&ՑTGnRIu&ՑTGnRIu&ՑTGnRIu&ՑTGnRIhTFhTFhTFhTFhTFhTFhTFhTFhTFhTFhTFhTFhTFhTFhTFhTFhTFh(n`70 FqQ(n`70 FqQ(n`70 FqQ(n`70 FqQ(nd72ōFFq#Q(nd72ōFFq#Q(nd72ōFFq#Q(nd72ōFFq#Q(nd72ōFFq#Q(nd72ōFFq#Q(nd72ōFFq#Q(nd72&l o曰&l o曰&l o曰&l o曰&l o曰&l o曰&l o曰&l o曰&l oZfkiZfkiZfkiZfkiZfkiZfkiZfkiZfkiZfkiZfkiZfkiZfkiZfkiZfkiZkiZZkiZZkiZZkiZZkiZZkiZZkiZZkiZZkiZZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeEVVZYjeE                           ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                           pYʻRE.w,]d)"KyYʻRfͬYO7nf=zt3fͬYO7nf=zt3fͬYO7nf=zt3fͬYO7nf=zt3fӃ=hу=hу=hу=hу=hу=hу=hу=hу=hу=hу=hу=hу=hу=hу=hу=hуhыhыhыhыhыhыhыhыhыhыhыhыhыhыhыhыhч}hч}hч}hч}hч}hч}hч}hч}hч}hч}hч}hч}hч}hч}hч}hч}hчhяhяhяhяhяhяhяhяhяhяhяhяhяhяhяhяh1h1h1h1h1h1h1h1h1h1h1h1h1h1h1h1h1Mnnrvܼ&7o7yMnnr^D‹Hx /"E$"^D‹Hx /!%$^BKHx /!%$2^FHx /#e$2^FL662mldȴic#FL662mldȴic#FL662mldȴic#FL662mldȴic#FL662mldȴic#FL662mldȴic#FL662mldȴic#FL662mldȴic#FL662mldȴic#FL662mldȴic#FL662mldȴic#FL662mldȴic#FL=================================5`{k>^|5`{k>^!2!2!2!2!2!2!2#02#02#02#02#02#02#02 2 2 2 2 2 2 2"(2"(2"(2"(2"(2"(2"(2pc-#oy [8F1pc-#oy [8u:sǹ\q8y9<|!!!!!!!!!!!!!!!!!!!!! >-';k?8e`NJM %WuU=HKplC 5i#(珁GS籄Xy,ܴwg5ra炸¦W.:Դѩ~y`o䊝;YvB|Anɮ;oM{>}WӞKh;6itʦ=#9ڴwM{\5󅦽ggfj{e~{>r}@7y ]֡a¼a/k-WutOk {֋לu-.ڡwm-gVsN.Zaݻ0k 'CvΚy21Xuc [N9ACӳ}M+pBHݝn`V]g`|^qM.19rc-au]* >:]q+7TX=,9wZUKE[yjcq_Ќ3caٌMNjOKnUOL3mo0Wdt=.L l'^;Êα3|.AG/Qmm۬xnZ?֜ό7hzc2nOy,[c_?ǭpjk xu덍z&cЬefx]X|^n}b7;dOX$gMDjVGzz^ɐjl'mо{nL51Bg.{.w6v|YKȬ7|kFK[̅W?O&ʝ4lUepV&zDΐutd;Ĝ_٩Cf=o@wG|9}8cu2:@,GD~}s: Ylry#_>ʿ֌\vȔi][^' X$ȓ)r\&S y\)OgR, I)<[(̡r(ߑ7E3mGަ%|Uw)ߐ˿Ƀb^ܥدOP? aT9jͻS;UyNO.N$G$B\G"(.I,1|RLEuky@>+%o6^y/%$)wɧs֞־ցօZԺSZ.řНq{|z`wけy>gLtrMN<ǝ~hէe.{V|{ig܀G{kk؝qXw`S؛|1u녵}In'tݺŽpǃ=ϴЬ5\++TIGdprST endstream endobj 33 0 obj << /Type /FontDescriptor /FontName /Lato-Italic /FontBBox [ -230 -500 2047 1837 ] /Flags 32 /Ascent 1974 /Descent -426 /CapHeight 2400 /ItalicAngle 0 /StemV 1 /FontFile2 32 0 R >> endobj 34 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 317 368 580 580 726 648 213 276 276 368 580 212 320 212 347 580 580 580 580 580 580 580 580 580 580 212 212 533 580 533 368 748 618 595 617 692 533 520 674 696 283 408 628 473 848 695 732 564 732 594 488 543 671 629 941 596 582 574 276 347 276 580 363 284 506 526 434 527 462 303 465 531 244 238 480 238 784 527 503 519 506 352 390 343 526 477 710 469 477 430 276 300 276 580 193 317 580 580 580 580 300 463 284 798 316 429 580 320 798 284 386 580 332 332 284 513 669 273 284 332 352 429 737 737 737 368 618 618 618 618 618 618 852 617 533 533 533 533 283 283 283 283 726 695 732 732 732 732 732 580 732 671 671 671 671 582 564 549 506 506 506 506 506 506 724 434 462 462 462 462 244 244 244 244 511 527 503 503 503 503 503 580 503 526 526 526 526 477 523 477 244 500 301 1005 773 488 390 582 574 430 580 284 284 284 284 284 284 284 284 284 572 513 758 197 197 213 338 338 338 534 ] endobj 35 0 obj << /Type /Encoding /Differences [ 33 /NULL /nonmarkingreturn /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /uni00A0 /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /uni00AD /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis /dotlessi /Lslash /lslash /OE /oe /Scaron /scaron /Ydieresis /Zcaron /zcaron /florin /circumflex /caron /uni02C9 /breve /dotaccent /ring /ogonek /tilde /hungarumlaut /pi /endash /emdash /quoteleft /quoteright /quotesinglbase /quotedblleft /quotedblright /quotedblbase /dagger ] >> endobj 36 0 obj << /Length 1144 /Filter /FlateDecode >> stream xenFỞBa`S`W,%K90d(WMw> endobj 38 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 534 580 727 1063 299 291 288 580 663 686 533 645 684 630 580 572 630 371 580 580 533 533 580 528 548 284 284 284 284 284 284 284 284 284 284 284 284 284 0 ] endobj 39 0 obj << /Type /Encoding /Differences [ 32 /daggerdbl /bullet /ellipsis /perthousand /guilsinglleft /guilsinglright /fraction /Euro /trademark /Omega /partialdiff /Delta /product /summation /minus /radical /infinity /integral /approxequal /notequal /lessequal /greaterequal /lozenge /fi /fl /commaaccent /grave.case /dieresis.case /macron.case /acute.case /circumflex.case /caron.case /breve.case /dotaccent.case /ring.case /tilde.case /hungarumlaut.case /caron.salt /uni2669 ] >> endobj 40 0 obj << /Length 379 /Filter /FlateDecode >> stream x]j0{"EQuD`n`fh/|圔6Lbr?Xaed+iXpr r-v|Sl cee{* Ϟ;Ѓ1:Ͽ0ZY97[;lWwf~Xyf`ơ #[u/ ̓2O͋Ԗ{j/㸘<̍Ck ZEStl]r_EޣCgjM{hs`MK }$dM+k> endobj 42 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 317 368 580 580 726 648 213 276 276 368 580 212 320 212 347 580 580 580 580 580 580 580 580 580 580 212 212 533 580 533 368 748 618 595 617 692 533 520 674 696 283 408 628 473 848 695 732 564 732 594 488 543 671 629 941 596 582 574 276 347 276 580 363 284 506 526 434 527 462 303 465 531 244 238 480 238 784 527 503 519 506 352 390 343 526 477 710 469 477 430 276 300 276 580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 317 580 580 580 580 300 463 284 798 316 429 580 0 798 284 386 580 332 332 284 513 669 273 284 332 352 429 737 737 737 368 618 618 618 618 618 618 852 617 533 533 533 533 283 283 283 283 726 695 732 732 732 732 732 580 732 671 671 671 671 582 564 549 506 506 506 506 506 506 724 434 462 462 462 462 244 244 244 244 511 527 503 503 503 503 503 580 503 526 526 526 526 477 523 477 ] endobj 43 0 obj << /Type /Font /Subtype /TrueType /Name /Fo2Form /BaseFont /Lato-Italic /Encoding << /Differences [ 24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39 /quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron 164 /currency 166 /brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior /ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] >> /FirstChar 0 /LastChar 255 /Widths 42 0 R /FontDescriptor 33 0 R >> endobj 44 0 obj << /Length 49449 /Length1 96512 /Filter /FlateDecode >> stream xyxŵ6^==l=>F}˖,˲-x& 66  ,7!$ p -`ުɲ!7ϗ|e355Uԩ!0 Μs!B8ӔU l}p]6]m]5!K-u86%DxiyńdWDHrV,ٴxp[>Dmڭ˯l )kyu[5oB,6Bg/Y~Ҹ'tw2|/Yny ף5g>QG8EnXO~F8cll(D[p]d?XjDu_'޷qæ7ok/?瞽u黓џ8\Be8KY>&> 3迵r*@x${"7E|+?F4$q:Z~ ё w#ZM8"koeU>d ^"dBݛN% Nm==%T}Bꊭ}V=/"ӹ| Db X?>w cJZPIi=wNA7$]KfSQ\2W|< ZO;a~9yIBY< D>L˵md,hn%Aqr>!%]׼Ifs.PLQw YH x.rVGj/N߫]MT|!Ev]E6!$! "/ n\7 \={A v>9mз.!2_8Ȏʞ-'2tMu'A3Qzmd8:Ds I,gtLg ]g !/uނ@fHmA b1]@ggQ*3v1>.OoKkޢLC `:'ե4u_yc3To&o ] heRk | hͥ'y*&}[^Mid |q#0GA3l#ȷhf3k!~ʿ yO!N6FH>G=SRх[,B 5qgJþt ZKUqMT|O`*߾\wb&DOĘ &b73X%"[5؈ Nwg "E\nx<@AP$L(x8'H'ILH&d$)d2T2%>FO'g3 Ydfd6>#sI\ҟ#sy |dA"|1Y,?,_JʿKge+rdE/dY _CV%kud-z|Yl?l9ȹ&瑯D'o!o%[m? /$_\~1(\ l\\\Fv"&=^r9d/ ȕߓ}*>kגk#$דo ׃Hn~3)On?@7ȁVr mɭී #w"wMMrw5r/&}^!}WɃ~"?L|| 0wȷ%?F y< ]q'w'&GȓGacSh1&|8y: y<9,9"?$σ"!ɏ/J~ 3"?9Y/_DNKWௐ /oUoG^͟ {[ o '?y/O?y'3 _ɻ!ko}A> cO'?#|1|  $'y֢ՊZpڢ(jZV':ъzNÏ:ł  q*) hB823=ߵ:Mz-; I$qveċ  ;]\+xZ?=IgWA4iB!FiYVk'kJ  У:Ѡvku:#=@#hiuO rAȘU!Yh!XHktA$YM‚BGwxvL PR75,Ld31{WdaDY F[3(R36CaSeASY :kY@^}VeahhBh2ߵa6j⋸jI AgPe+BTea,D(-]11&Tl hd0v z3ZNo*: UV02|Yh@z* -,*001P FtF*}QEe&0bƫEuFEq-0thELM!,,6B1,zAmM m2uFŠ3z|,T&B:dAPY@ƴ*^chQڦ(2 mF%YP-d*)B_TN#uiIP7m2Ѫ鋲UYXzȂl>@ڦ Z Zf2M&LfV4jH{טӦN~"(R)u&It]b]>l2ӄ!Q-ddPPa Ej`Nf ~*\)3NT6AŤaj #0! -F da6P7@ef@* uX!0PY2V%@BB%B2L "DDa;DF8 6P9'DkRgAmHݧI* &0g(8,($ddQd3:`.QO V&"yh+$ɄLz)cgb"dAef5xfCH6j$f4KX0p1f΄M5h)Zf0kMZh9p,BFYP ]v&&QQk`2MIq (( ٮ8N8Ն&^=(* oB$94|⨲L-VK*۬6$:v8NErؼh*AJ",fZ w*ie:N֛$6 0vƒƎBr:4IN4]jж+8HCiZ@&Ifu:+3 5׳;$ װK TYL6I]?TZ$NawB7;$춻Mv< 6^ZA:7÷Hq#}lUoѻ `[N`dG!d7M6d۔-Xdc\J:!@ حn-r׳ɲ µY&&z9SYbVBFT1*0k(KծQze'`s/58A*7A+~\cw͎By49T"TP=*8r0r6ݘ%Y(;aCӓx0 t8CE,eWe,Y ɃNhu>E^wjSdagv} . ( 7{-")SeErɲeawS dr"@Qm qEN4Y$˝,V+G.Dv\ְ ]sƃaO+1Ift]N; aKvh\ΠICZ4,v%`lp Ɏ>[},}T"t4$ǭ=bbZv IPA6dFz\aH zs|VD)C3EE^{0)h5ؠ% ̞CQ78Ct4ܾH<[lLnSٺqG]n:x%E0DyYlp8bb8Mx)mYyeq<ʤ$y-i|fڊHċx!5_XRYT6z1@2p0ڌv7s#h"'$9$dG¡dw6lSh)ބNjD l>#%m-ج/bZX,戰TeG!$4T"`HzE{@GWńƽ>g-ʡ⁠?8NopH$8IDc:*!F;**Mqrd79Chb,L<O%);LFJp2^N[HB v5> >k"p$\RR"3+(tP)Pv15ܑnO$XB8PI2hCqYa:4QY4 zID`r$Vt$0WE2,Devo2X[V+OdɶAG0,YRں#e [Ur/,"pypR YKHy)1=>uǰ"A)do yq_^Hp] 3ݎHii$EEt+]E˘!&UYd-McdSNf_nV&*x&ݚ,)q# Dr8jQ$ gCʸivTʁ\e#9@YY'Rc)= JDBcUv08huJJqG!D`Pg[9wœdO {#6GV<H{O1K(cFS O42A@ղ KYSe)gwzGi*Reїlنl}]].L-(K\ukMݡ7sm=<9- :D<1j;`(≒d*]Z)VTVU746hnim>jtG瘮zO;iӦϘ9k/XhkW\ws7}?Ǿ|ƹ^-wn\y7}{mrKӿϺ :n~ko|r?7;W_so"7z7K~"ݜNFP[H:n wwCEw3Q9ƣhu%}(|\ExO|qS>y >gB(uvpӹŨB5tF yX!u.SP'8vK+-9]N;ـyg|ͧ|߼7^xy^/~׼mF{#\aBԾpܾ\ä+thaaeѱ EA&v?"$%{{/펮\M}⇳WE!3V=2?P̞߂z4 go?jXְՀ p}DHM#Xt#L{䙮@Gi-煫juh6^eF#{o# E?3 82`ZIX$b߅kgEKcT(; 2O#EF,˟&RFbOJ8mk )*$C$@dbV: +]9.H-q:rGǑOM<@M (<'B tqcviʏ&jX΁\ qi^tAAU äv^ā\'@U@˹A)P#4tH A)X ږژ/ˎ*uTCC*U/|E;_x]=4"nآTejGg#u%NmR r߸_Bg1E%E[d| ~QE"^01WQ! H!*#*'Dh ,D`yU0D%=,h ڭ +Ng~Ɯ⁁T̞3~ޜ|¯_ I#qY0н1G)J̯-Έ8Ve2-IUEZru6!6BN<{D" .>S"FzN:7 ,)rRZP:`jD $SF3ӆF|zgJ§'[kolr&+Q\3εrNʄ:'NѣV.i(Ǎt"4eu?E,Iіt_ELv<[?;4:-yYuOxn.woثsM rG=!ѤmCS]O9L&_&S੠)t xhjj.fB3A37Z z.z.L]L]L]Ivt8g,Rb=Wp7V][ݨٗ;7{x7 ]7x10Z|q(dɐ0Ј|֪!棎iTEGQ.4QUz\E"#рDx"w.\dTlHduK`2tnBsl]]Dq70G8ɄSBTw $L,LD"FRMšͼO֟6B[?ԮUثk:YhctaÞ2_Iþo>GWsVp$})} Z+Tp4A>Wu`J1z#t A;_<Ӝpf|[4R8 0d.Yd B1̅8Aks B˶/p^l`jEm߶&IoUlO@pDP>zAt7 N~߾{e7kh?`j+ SIŹ޷֕|崵6A|w͏D~qnxog~DT_ "m/A E"dbd#TQ7dIA]A4`2-,A%̠fP_m8:mSv5bqu6s)c+-S*FiK}ҍJK=3L]?cdccLGsؾ$3`'vmPB%d}!gbIET6peg,p"g,p"p"$hpkN%Y.PnCnnn.WV)tWU$:aјKv9zpj=\ej28əRuk|e䶾P/sv#R/zeke55+^شʇ^X;v.jZcMWNpn]щu_2[WkJ˯c?ɵu=~ݏ}ɛn|r'wnkgwpiè;a0"Ȅ毺]=ҕ$eJvm33{:Bm=0r։oG.ܥnG>2~8lōCw}2{jx`rݹ5_{ Ib賉RV%ėh ؜DñlW,94|/GN^%8+ٟdlLuz;P;s¦R "=Ku6}XltǛFUNaհji5vZ ;.i5촚蹂/YW5-ʭ@M'L\&E`R&EfVpf!ГtPL=h ^S/a0rz9L^S/l5 ]%Al:*ZMpv[s'Ziz߬.\]d؜3`IW>s6mo-i'3{8j_՘L_$&S%{~ud/t|Xv5aY[[$Vb1C>e,aàbGYeoJrsv?.$>s  %~fv8k"EO=0 @znȯ=ҳwߍX%ȃt,]{ eK w;ߢ=(ު/] ӂ5ت_l^yA,L2]Ֆs4]T9a2GKdzkp`gqu$N )c/ \ aWA.T傆]tvA.h ጛI+Q)\塏DqH+k)_/=Ύ??͸xv{|2ߢb8k-$ܔäUGPG!(TQ= G!(УzBB fU@: *pNi`8 40.`8 `X]6ቄ#$[\,0\sY`. e,0-`. eq)x!x"Ⰸx"hAEaqXDEaqXDG=rVT_lnn%#<'/a}mm}! x+#Mw~Tl'҇rxڧh7f!Г ՆӰ2n( aiTuT[\? cX6&޺,i}c^i#8mӌk'.O[[7~s͖&hXxmZU۔e٦~s[ٳ盬[;fH5ޱw%n u[O|Tc)Vft=̾TEgsU⁻0j>] G1ktԧ/tRF/`׮JO/ { h6__޹[r-mko+8y//[޴v$8W`JPh[@v5>tyHd%G܍dpIց哖q+=]m9ZBk#j\.j =_Cñ%n.!kRE 4m7qS֨Ą\ùM􅖹f=Q~V?&ֆ/ fc#erű4@2KWO[i_鶖B1p[\Ks$ne=Krۧmיr{ 2Ǜ%G]΁KRl]. _:<~lQJG`p&_"a9D{8+l&47{# _5SƄ-;ft M j8'x*2ٗ{ˉo*Tc ).Z3 B(58S}7tn?y //AqcF`b{cbhE<~'5GǬ]M>8 k. ʺϤpVxdZYUZm]±;ێOg|n :%Zk6qwؽX:# l%nܕ-!5&9?Oku e +MiCBGke}:f[Pt0<^`kUj̪&Vgg{U߾emܽ 7mΥM_ٷ?ѹX<>pK_Uz槄Ϲ;|lyoO]X# W܉[rjLb8ë($t.7NfcT08l!czp@=8{}V :z=8d$4xkWGx7J2`]-c658iĄs'3:f(qxL/_t>i=5,7%uT1mbe~g2끮Wo7J R4{9Y}hqT1ncm A16 A1Erթ7TeOs jSZAހvn= iM{;`^RF2:Ì v? ڸ}㝋LY4gapjk?uܻ ~{+!\>ң+*蓛"KO("\q Q g0tf-%%A\%A\%A\%A\%A\RA\%gg|Պ% NBɂuNBI: ]'$tuNc!h1f`q'n8XW3fIwm_iwvtl{78tsF}"%֔s?tݓ.qgeɄ7r)u XJ_,,>auuW+CwXp-+.D e ؔ}=Uao< ~t+pGͼSZ4\4Ⓓ ,K֜ ~YmXNmzu$1sSh@nLW!,ׅ\͠c7 ?"Ï#2L,g#5ֆHVmE`c| ق˷`o[i/}Zg*9u(9u@3P 9u(ُ:vFڋ~_unAkӂ8Q} 5H^㔮b8r)}!xxxxxB&@ '` JA#@=>J~r+ )+V׽n/RBݍ;ϝ8gfS+f,v- oZ4Nռ*L•kk%zM9wJ&#]sNht6lS'l]i+%Iض9;aIUywUeƖb*x.U3Z}`rc''V,X~Aư\G^1!yԷ/RW1*ڒ!wmrR`$i/x=;PjCmv١6;f׳hy!K_h3.}t) {h쌦lŽn/=tB[|f۰ {dwk KlfI$P=[WHrLObY"|GXdQ܌D ߕ<##1 :7t ]a *,h)Z`h)Z0Y0Y0Y0Y CC2o;>t!7UL<|xfFb?M3tYq>} aW0lSi;C]P«LgؠL nbqa]+pWHǬpc񓷙d9{nwYrA4`}"%«UM]{T1韊_/ƹ  ^ /x@^ /@x}!ǤذOC9C_)auhq]cg/zGW.NiK؅c\؆ ]ucnᆛz7NL&'nԈ?3{Ə̖prˋg]=w%X5:6?=5*ksdɪWb_wOŸP]bM@h?u5Z:67xqv65F{[,sl=97Z_ף`wUY^{mCV:Ǚu}cO]hjN]xw*puy٘ˊ)kǟ?u:G)ɓWeMee?gzvҔ:&oS6 zTQu@: \pu@\Q܅QMsGZ\>v>i\bڷcCo𩾑L@ş]7f ?3g?3s6e5 >>>>>>>>|jl";=f}"4t?ѧLtR)9^D7tkr2/&] t)twG##2J~*;cRl?}8 ݠA@OR*N)cgM5W*&,\pBEY~-w;FOULXtф eSIקBҶ9#ϟS;"@e[<ӔEuV=Ieb;:}28D {B} q< Sb<ՠlb/eOun-;n\`YإLv]įu\\ՙ{ۭ}Vy 6ǸԋƗ:ga;e?KӶ} & ;U-I1i & Ĥ4b@LISbRRqǤ/J7W\v{[e1=g\<\x`ۦ&tsҔ\7iپ.*ЄB.W1 a8stzi;۬KzJ뤩OC@T :D cFSGB.R̥՜seW͏BVЖsҕ,#$_zfxA :w_7I:Q)Kx|L U]XODG Ll /AOa1 _ 2aq6*T6܃ego܃>}^'gȷ:}ɒ r%{.8G yr W$XAn7 ~MܧVGr o`~"6dߗzKY'/X g]=+L{V$VݳB_fIbo ;@ JsoD$JN]gcGݛU]zZmٲ%yy,˖e;xK$ޝqBpV(DM ]h]C(KX( !I )] t @a J;-{O^t>_{={n)fK>99 ϡox ϡox[!K0`V)Yd'K#yWx%BJ%ғQ_&'S ȄPh2J8UpGr[IJ=Yxq6ZӶlUDTDl=-͞KUb %{r *  WDm,rkVuqfhh*Ӻ-e]Q1jm^=1nhH8*D|S?ė|#~MOZ:D|(!*l2/l"_8 DEŁU4](.M EӅBth$vSF7%ZH>[F}&} Lʅ" n-dJ5](ٗ2 j>ТAF .Įik.#]XjnK3lY`iƨ6XkǽGE\@y HJ}+1} ;pάTe۴3cc5Cn@s~)*i4Woh蚵W$Hfo|G_-v}i\727ĿG $O?&M*ٺ: ~/błٳr=%3GALc/iSM¸<{e9!םFq fP\Ͱ0"8>Y,&uukgw!u0$2"/ @r+Vܕ~XmdqrQPBn%\ay膅x8XxnW(O`*qD3P4:QnKM/= j:"!,&xQk}U*X5ɑ,}0,u$=+/1S[ J2 3l6VZ0Q[¼:⋹Ĥak%~m G4yҮsOL]6Y[HLQs11*=!i w7s\?e 1SH/OJ0JKu˯nںWy+|:=[.D(fMJ#?a߾.'0")9O+],BOYB=e ҵbێ%SPOYB=eSPOYgDO3Eg>SD}dLWD}L"iy>:ENH;-!}+5 Ww\ՊYyXD?spx|-3_YB~Hک؃uk3a)LꃙbVF:h3F:h33Fq.a]b"zuQօءUTR"f RSJgPÏrűt\:-N b.TT/8 ҿ`kVsJiҠUROf*r*U[*L:-{CG=t=_{PCkw?ܰ[Օt39KsDUKH S(:a;\7>(Th#RMuׯk,d^n?|nXƍX7+Gk Zw|さBTV-ZRsލث[ w7.l B7`lͶ~{tU~C[A_; 7~.C撶+#use2ő=0J):*T6QIEb+e.B&#updȯW`,\$_hD)Z"V^_h-3fU[du,kf6"Fk\R^xiF56YCXT>5ٕ9%LWe^-*4VU[@ia߉$8arVř(3鹒h~Rw&؛GDܫPs*1*V?D? 1h U~@nNBgE9,LH`3KDP'ـ&e*$A" DJaNQ. q |SBR*֌ZVz@h Y4aEɢd@he@hf6ilQkf#EE%TVQJe ϻ$#EB_qLWkLWk5՚jtfZ3]:8\y*̥DTೖŮee:^L]L]L]L]L]L]L]L]ͪѵb_QֵT M1lW'= vlebX~h;ŵ<)RO<|6]B;iBo/3l_} w覞urdW˳22xx_yȉ:~:I`66qf|]5jzH)!)r|ELgQ__݆ sεZ+wZiZr܆҆%-wvY];/jjMIaG-ؗW,7OJ%j?gW'>>"vb6ɞH~ҿw^nL/#Qir@r~sP`M;Dr,tTUߍŅX nqmilqf8?#!?5*#oSnL.]fήu'? Y1`+)YPlFh9.|6<2PrCH/([> ftrS <=9T[N0i6?@}L2{Wnd܆֊]jskX "IaʨsVg6w՗[,]$m*]1&N{#)ӤcRy.fDÒ% xyҎ^aҎ?D,oHKU#5:U$7KaP3.on/=Oϕy{>'EwR{rJSʲRKs-3_^?M$>(o`!l]NCP %9rB⅔LSEe3]T|TS9B a裠Q*q`fd/)=Ʀsbs*W:-9KStQl-M-ΈE؅n5uK\{++#gE\BSދɦBb̜XWO{#BMo[eqgVF=3uSe \Dbԯ08I$X$"I4IHEh,Dc$q,DcywOܫV\w}s~~uO}{[[{W[X^zL^ ;󦦶nۻ{]!,J L+uK-Ev]j2ɨz?j"#Uec߷qDNџ=qqq=W{iD*QIEt5%~Dhfl!%pNiT$ajІY̤b-Cf*Ӷ5M+4䲆;[_{\ "u^W CUsu ,b A^"9(lvY""/B1J/UsO1URهF'5ɬQ˸׆;T}F۔XEwR*Boo htSE4!HMi=<0zUt3hced`4XCݼ լ8d8-IV j-)ڗyectM_lLzY`ҷhxv|!}K%=~\ M+#a*7]X\!\~{s6}g/jkY+Y7_s`̖):T嶠ܫHWʽΫ"^EXEʽnUEʽ{)*RUYYXZtvNR5svˆKb%CstT[&+HA,aPo1/-3 .1-LZN:75,FfAL0O@s!h${8Έʤ)+\}c~öoشRvHxjlȯ1ar>!ʿIkJ wݼS//lVG?ٮ*/v0ޗH93,)~'RK[l*l]".L#+qsJlj*Rjzg˗~DXf$w^C1 9)|nF#&e[x36Dӌ MTɯ` HHHHHcTGWWM+|,U,J|CWfVPؓRR' C0-EZ6KԲYt\EZ6li,,ҲYeHfeDz]HײlG#[-zd =BlG#[-#[-Vs W Dr3m2 ,qo&jpX;3qψ}G}{_g :}jV`[4`|{W1u]):DS|{OԾ2#jߍJytʿa4OXj ;f2$-l:GItbQQ>%TVQJe 1>i@E04?r2K?TovZIvY;X!1R{O9,n?uDzp7 ]-WZ_]W^)ʠ}XYS/hIll(xsuL,=/f YBPC9?G ZVq+e߻{=˭Z[Iwo+.Hʸ|4_ޡ.`H4>1545N6N6# #]#b4$5Ơ;'aY= y۔mnڎ*S PA*Ui >G|//7py'E`2|O2_ԬKv?wtFGOvQu*8fגyKj ,. yy%s/{_`kjٚ+sZ'>'9|1Id=b܌y#-xO!x?;]|?;NgGޡUTRzOQ}9t~x~ؾK y< gϳy:BY< g,t_Au#iyX4=Db{Q1"e}1~ʠ22/fP_̠A}1b 3ľA}1C.37D" TzyUUy%kK#K7,^ lER8onnnnnnnuWgؙ7ѫ7խn͓/Oe.Cz&}o~ss6ae[kfi#洮kn}A׶]+>yGYBǵKrQqS*䊪?Ʒ:?)#)4d!Kx Εe u*o讐[wޜ֬<"!9cܟ|Uȳ!/e_Kf9xKUY5bְda 4,?g&g}"D'2 :.D '2OdPȠ>A}"^8}\XGNJTvQQO3TG.G.##RtbV1#eA>#P5j}{MBXetJkkt΃a+FO_'w64aiHQ[oKx=}O}uq\称wni@=}'xKq}/oS{Ϸo{+4oN%3.e_b {yA,Y.Wn2HMqn\+-T Bf }v|"5MFX2q:b&J`"Ԙ~$$$$$$$8PB_B_"J| I| ?b\&bY*xfP6b(rE悍ES-GCbsfC {ήR(u6^d*l*Qi 1łrC..s_='zܼk3U({?ŕiU&c|H6jA,=#dUOm9`׳3}O}kaRiQ~ IXk"K:d *R-s}97nCt̥is=<>v]& Y¬R}_jl&#'-\|7SNI$뜽OS.&]6=b.+ssӪwBR $)I$@b I1HR $)IAIAHϪY,I,5ze=ɲdYO֓,I$ze=ɲ^L/f}vn֍M,ipZxnb  r<3G< Kqͬ{|dHG$| fC.\uir% DsJ`S|/aB-SRbe]1we.?e֤5_RFwd'!Z1gVyM4f6 ) ZPcdqɨ?:wdx?H8OmU6mM ~ {|b|:;~J*O㧦w as|Wgl~5s/nŠV1(BR-j(_{ 9yD6gSp뿎vwooul˖cwwUg{Kr5bЉE{(8)Wv웆,Ms r>Gȸbㄼ,_i\\Ĉec\HT$F*#HEbUHTHTBr;i!R_3^bü|4sp3Y^^z?ŕ.\4Trd_ǑX]#)M^rmHK,_[sV@"{e_FKOof)E&XڻK}N{26|'ffE("um{ j!R'dg UT(vaAb(TPˇ3> kJ^mZf_|O^uu=ْ"`KX+PDJuٖjFG^qzyK6qqَ4%yyOɟ~`CnTk4T^oI<+R+ʃ 1.&T& $&!NW$fTd.aX+fmE$H[,V"ʷb"VQg$ei$|G %R 1Qbi#p[!;gIYjjْ{jon/0*sk Xkrsj, Xjr qqC-l'#7OO<=i1==#=}Ӌ<=}Ӿ1Χe0@L<>'-OZ&Lasthո(E% &,r<Kq[2}0\$VG4wK5ϻnY巤Nqvɋq岏9L$>}NGvQQQQQӉ}NG}N9%Vs/G`O'if{BMS-}lƲZ"\/*MN W#R;N= ~h8%#زKWi9Jvc% jTcYoY#>`taa#W'+|>~_>.Ho;15Nsp-bdno3;φLOs5 pAcsoegoA!槀sqb)B"ϐ/(n~q˿`J\JwB.$OtaӕtDHN:::SaO4 KW8Ze~kZ>^d?Cq$*eG :*|v/_/OFC;Qh",1H=gĠ-= :eI0")99;0[f֥3657KYq˲dwLeqqxU"gI?qqPlf+9BiEpasAŌ#«Kr&-#8oί9p).AOSڤ,-B6H e{7VTlܻ[!mZFѯ̷2SGK*Y\͒&ˑI-BcSE̗ńRk'NE4 n%u_|h/3H`󪙟ʹk_䊹-SSs[ϙ~[9Kh)䇊#g>}[=/BEe3*Zhj1aj]Uನ0LDe'e* $bƴd:#H3d:#H33d1O@HqA/aǭT| ZYgl6}tH3ݷLmLmKK}{龽t^o/ݷ?6"!*tv:c;Ngl3cqU `|akX;4K6cA3ѯ yWd9YJTPMe/TR!y|zx-H$$X5:H:: :: ::D=pjVYp/C5-nv}ޑY[ K玚7v}PTY,}oA:j? ѣ[׎o6pٖϽ>bY39maY uW$&Vt/^HHp4OF5Z}8c:-OL,_z5;puξIn^C0!Y2EI}kuBv)]̞{wzisP銃Ե26wܙBg,,arcCtb=7Yfm/Oc$Y{Z ٪4._\׫.|瘳w 1f1K\#NEjDzz,W!nnZ&&NCiROf*r*&%M J!Cѵb%Q\ @˧*>v7pq|7fl,ҍߍYͳgh#tk'~*M_s mOV&4]s{}y{SʚPMValJk#tI/OLիTu_ݗG6E&kcrbg-Ql3I;ҕHk3O fo|]͌\!3vg[d/ aaiFղ_&5vp7a XƧsPd^)ܯEZ&Y[5A<1!INzYe\r,Tݶ=&%*%lmO|JA̚ǹF]isF՟VhYqLbÎ-c|!JJ+ůj,(m"JֽE---[K:@K:@+--$(x|nb uG{obt6ͻ_<ےk0Iia,IWGW0a_èQe8 5VH}O){2]w_8]1UgD.$i{vϱc{jC3宸~G߿܃ͷ[{HtCcq><[6>w}ctEnU%5Fd\K?kC~Qw\.'Zˉrr9q\.r\>#*ٟiOW.k`M!FFbQdi$FFbi$FFbi$FF0 Du0B;z*]T6SEGe?#TPm<>Sw6F:wNx:F47۴dyg-%}c;[ʛ>5Eͭ/ՄE^k}}:U> CXkX_ s\w`ݎ_Lv\/cb£>g8#*wGWL>O5 'b*o_X=%b.-37LKhLhht'(hq)ax?,|N>JWYxzVvE㘲xvzFr 8zaD(ܯ4N/b~߿QpY]7N}=,n>Ua8X.J4I7+F|JcN~E8v bj=Rak* MO#9 ňbmt<ƗF(F,-\T&>3*BchBB 诤l]WVG<´4>!(-'ZR=BhNyه%̭*RbJ!9'BȍRNid]i%i;?xn|述ou.\:~e.f!9SaF&KFׅ]lʊd.CI2*__Xhs?LLI%I _ _W|<>:3 A`O"DILi) a/0lA_(eqKcNPkA{ӧ?sK`Kj%W'$ gfK lz=hY XH sгoxtG֊$4&:,>K{Oek5 }̒w 8)#)z3$S?".kN罅bF yz$IC7ώ#ԁ݈-(m[6, )m?H*ETyx魗\̯wpw1s"2/cK]NrK\"2!Z,jև n9Q)Fg |cI ImqZ_)&SiԿT~2VS7RLz w<*9;6.;YKΎNRǚ_Xqו93QFwpo7>TK'cr^ )YtQe6*N۫!TkT2ytn%$r!Pc7[ܰ8ˤݾpCpjJJN.WJ)U/;^DprvMIB dR]3D*gUt)]S#4X2" XE"pip)1*\LcVI1V}k;nWO…[t߳*i1Ƃ| ,?><@İٜR>w*~}*@Lψ l73B`ԧ"oNz};Sk?jSV}=ED"SVs8DeS219mn#܆\gvzU-ޘLU6r2JS2ؒ,'Dbܒ$.2( !;`$[HS/%?cJU~|ɘ5OF'ߘ^Ye4 4SJM`*ԡxthZECяc'*ʊuR\񓿿/㚹o)ە vês!C4Y  5UyQju9DZ񱕱i~ߞPp::p_Rbw%"MINiMٛrw3?K{8)S  +5י?Z.Y>)yo)?e;WRU.}ƞ]vcEo+**K+_\Y8wv>油vVeTm\dY&&fKͯuκuuT7^Z__V_S\]~𛆷%;]:']6,]\޲.7\Ѱ}W"mhIlj8[۴mvDu$wvv,XqY켳][_rOVE2ھϭvwwVuֽ^욛7_+m꽧ޏ7nt|sf7_V[o}uo+ֻmnuw^VKȷHqX PXNC= 遗3PB=hڀ,BRϫBB&cº, lApwǀ@p/paxN~!xx> << <'<|x($IiY9s󨿀gx*uPMhy.zG5x<|xx $4 ,9\yk ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]Hҥti ]HWD`3 j f @+8ae` -^Ձvƕp~-{QB}? x'p?^9_@\UkE%;wS谜mu 0ђ2¯@F-Qۄ$ZI谞p!EK`q F18 W{ \5\"u<%QuՁ:W_ux;uՁ:W_uՁ:W_uՁ:W_uՁ:W_$l5lJQ#UZTqգpLRR$82Egf , +6`Muz`pI? ͸r ގzꝁ; ehY@wF}m1B7oeD-CF18 ܇{M <<<' !#cG'OBIiY9yi3TW֯_._/M# |~`)',]ըW/GĦ,11@{B=U: ^ླྀ _ .MQA_ z;0Cb#3/cЊ h'͐!)KU8AX&teIoI2C7҇=hD݋pI;wwx/9ʯ_ý./_ |ڳ2A%4AL%dY2AL%dY2AL%dY2AL%dY2AL%dY2AL%dY2AL%dY2AL%dY2AL%dY2ALz;/a$};r]F%)3 ЈMY2^`,aj=،#[hiCWwq(p 8 ǁO>kBIiY9yi3DF^$ВGcq:}d0$z+\h.\{B0Ro}p5܍zʓ;wǁO> < << <|W{W |7ւ(o`PKRg*D3i ID7@+ ̤ή|BZU͠T5fL$\tƓ E}}8kxN~!xcq#G'OO5G\<ϫP&ZƑOZЁV@+t: hBZЁV@+t: hBZЁV@+t: hBZЁV@+t: hBZЁV@+t: XLov QhӸE8K1I`+8G18 <=|aQ1\8 S'gg_۽ _km 6_km 6_km 6_km 6_km -7~1J(We8rZ&wޅ~xYv|UIw1ОD6 Ӊv|[􄬞 ,ZQk,f.K5͸Z mށzgp%<7 vem`/a]8~!0v8 }}xI;v>|xxx otQIxS? < << <<#> |y U7o dc20f(Ø c20f(Ø c20f(Ø c20f(ØKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKTNtP'"ԡc_9IXzrx.dVہr/kz2!ԇq(p 8>|0(|QI)3s灯_'|76|.}El *` T-PQkFVصc *` T-P[@l *` T-P[@FV`ZjFV`ZjFV`Zjl T+` T-P[@%g2ahPI(PzI":Wcd6B%I,5 \ V^PI| aYl.%;f mށz'U W$\C_JkqpV?Ѓ]8k-^ >'ǀ@p/pbxN~!a<3><|xOOȧO>zǼ|p:| 7om]BsL$\8&wÕ> < <|xxxx<^ |.3NT:1SL3Np't: vb҉J'f*tb҉J'f*бNX't: 넎uB:cбNX't:։J'4 N.x;]vt邷o N.x;]vt邷o N.x;]vt邷o N.x;]vt邷o N.x;]vt邷o N.x;]vt邷o N5DjhXCτݨz//OXK|P +ҕYAcZ̯ Y U~F؍zq|>aۀ6 oۀ6 oۀ6 oۀ6 oۀ6 BjY&-"us 7o}7;N#4;N#4;N#4;r?#6[cG'OO>O،o7xf<3ߌo7xf< قk-f قk-f قk-f قkBrZ!9VHN+$ iBrZ!9VHN+$ iBrZ!9VHNۆmoۆmoۆmoۆmoۆmoɧPoA}>|aQ8MU4z0u0 -:zU$i v0ǀ@p/?|x($IiY9@_MSBukS֠AOY=e z5)kS֠AOY=e z5)kS֠tݠd7( Jvݠd7( Jvݠd7( Jvݠd7( Jvݠd7( Jvݠd7( Jvݠd7( Jvݠd7( Jv=3`Ѓ1C =3`Ѓ1C =3`Ѓ1C =3`Ѓ1C =3`Ѓ1C =3`Ѓ1C =3`Ѓ1C =3`Ѓ1MnD7FtMn݈nr+W ^A7܈nr#ɍ&7܈nr#ɍ&7܈nr#ɍ&7܈nr#ɍ&7܈nr#ɍ&7Ct ?~H7nD7FtMnD7FtMnD7FtMnD7FtMnD7FtMn9݈nr#ɍ&7܈nr#ɍ&7܈nr#Q=}CTOzӇ>D!q/}.CTOzӇ>D!Q=}CTOzӇ>D!Q=}CTOzӇ>D!Q=}CTO?ޫՏ{^x~W?ޫՏ{^x~W?ޫՏ{^x~W?ޫՏ{^x~W?ޫՏ{ ``3)Lf 0S0 ``3)Lf 0S0 ``3)Lf 0S0 ``3)Lf 0S0 ``3)Lf 0S@ox7< z@ox7< z@ox7< z@ox7< z@ox7< z@ox7< z@ox7< z@ox7< z@ox7<  y!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟy!{^Ȟ A {C!do7 A {C!do7 A {C!do7 A {C!do7 A {C!0|, 2 0|, 2 0|, 2 0|, 2 0|, 2 0|, 2 0|, 2 0|, 2 0|, 2 0|, 2 0|, 2 0|, 2 0|,𱌀V#h5ZV#h5ZV#h5ZV#h5ZV#h5ZV#h5ZV#h5ZV#h5ZV#h5ZV#h5ZV#h5ZV#h5ZV#(h5 ZV(h5 ZV(h5 ZV(h5 ZV(h5 ZV(h5 ZV(h5 ZV(h5 ZV(h5 ZV(h5 ZV(h5 ZV(h5 ZV(h5 ZVch5ZVch5ZVch5ZVch5ZVch5ZVch5ZVch5ZVch5ZVch5ZVch5ZVch5ZVch5ZVc8h5ZV8h5ZV8h5ZV8h5ZV8h5ZV8h5ZV8h5ZV8h5ZV8h5ZV8h5ZV8h5ZV8h5ZV8h5Z@+h|V>Z@+h|V>Z@+h|V>Z@+h|V>Z@+h|V>Z@+h|V>Z@+h-----<h G&`M>}4h G&`M>}4h G&`M>}4h G&`M>}4h G&`M'xI$q8w;N'xI$q8w;N'xI$q8w;N'_ugu+{{g !21! 8&b F.F-uT 5h-K酭W|hR R _xSub?ߝq8qp88q8qp,±"p,±"p,±"p,±"p,±"p,±"p,±"p,±"p,±"p,±Kp,Kp,Kp,Kp,Kp,Kp,Kp,Kp,Kp,Kp,ñ 2p,ñ 2p,ñ 2p,ñ 2p,ñ 2p,ñ 2p,ñ 2p,ñ 2p,ñ 2p,ñ +p +p +p +p +p +p +p +p +p +pM7n7n t&pMছM7n7n t&pMyȓD$$'m>5T3J>(3J>(3J>(3J>(3J>(9t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C58t ]C5pר...........................................:u֗/Y_\g}r:u֗c#q|$>S^%ȽB>S:>>jęn/Aȹ^yCIk)yW;I[GrױwwȩcW;F#rX+>>&e||\w]rt||'Gw:>G.\O'>%oMychΤj^xAr]5IfդГ~Hic5=ze-䈮rFJϚB65kXeQ=?;>N=ovqࢺL]>T$A _->wz;7]xuiN)u@|>Ԭ|2$Wxn0T4FrTLtm09bdki4jl| ##dL=p%b|niy8pmDW0~QHu9|v@{R y}QW36e$R`HYFvHa/iùB&FP_0,n5hYsTEZa݂٧t%VҮ,m+ӆ9I^CF6ް[Ve<2I4R|n4Ts¶TIu ӸF0:Sɨʆk:etKU`.?ba$*\UC hoŒ2FT6͌_L.wUI^U_3jH%::HZrK;J9uh04 o:ds6drcnT6 <1k?>bô9RHY nDCWXQ fV7U:-kcccqqHF?k{sT3φp#Hf*oZidr=|8<Ç&h{nbȐ %U_T?w.5goJRV\\Uߙ!j>;cꫥjzTgh򰊔QaDi1˩Gqtu_U99m:Sܛcz\ms{Q!]ѽ)ghEtӘ>9twu'EsOSjȊG%i7p u1\Udss}5ܯ%.2QE RQF4w6"ѻQ?uH<~WI:F ڏrky8sKk`D}>hFS#TkcNqo?1ՙgmTY<<"E ⳬb*<}KܥEaYk0&Mޯ3+-;k~_QqӱЮ,fFa{Xݢxσ_eLF,=g|GccU$:|&~7 qoтrHE8]2<}-7L-V:VyՉ1tX377Ё^G##U?՛V$S1vv,QPL7g8}KEԾ"R'ցbXT^}z[{s{ُ23v.j#u p&{ 3>+_;-rON+O0LF%;迁Xot@mF۵Tݬ}I&Ya7S2%$s#Q!97w7Ǥ%*Ӳ,)!%3&۔}BjGI{&"*_)s |>9*U&?a5Oh/ّ_ȧ$t+)+' ҐOS| ĕ uY-ٖ[)'?(+?*+/ߖ%~_"qʤ,O˸7dO~'q"qOĩ}%xAⅉ%^xIG} Y…7^>tl$RѨ/LIzO|k}HX{T{6LSN #?6a=hH VRF>UJu%ǡNsV?>ޝWnȤ<J #d9X]?׼VEK$ȝ}+` endstream endobj 45 0 obj << /Type /FontDescriptor /FontName /Lato-Regular /FontBBox [ -188 -365 2233 1837 ] /Flags 32 /Ascent 1974 /Descent -426 /CapHeight 2400 /ItalicAngle 0 /StemV 1 /FontFile2 44 0 R >> endobj 46 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 343 397 580 580 786 703 230 300 300 400 580 212 347 212 373 580 580 580 580 580 580 580 580 580 580 252 252 580 580 580 398 822 680 647 685 753 581 566 734 756 307 444 681 514 920 756 798 611 798 644 530 590 730 680 1018 643 629 624 300 375 300 580 394 307 507 559 467 559 524 337 511 556 256 254 524 256 821 556 556 552 559 403 434 373 556 512 766 504 512 462 300 300 300 580 193 343 580 580 580 580 300 503 307 798 342 463 580 347 798 307 397 580 332 332 307 556 669 273 307 332 381 463 712 712 713 398 680 680 680 680 680 680 929 685 581 581 581 581 307 307 307 307 789 756 798 798 798 798 798 580 798 730 730 730 730 629 611 609 507 507 507 507 507 507 816 467 524 524 524 524 256 256 256 256 553 556 556 556 556 556 556 580 556 556 556 556 556 512 552 512 256 543 321 1096 867 530 434 629 624 462 580 307 307 307 307 307 307 307 307 307 618 556 821 212 212 212 364 364 364 580 ] endobj 47 0 obj << /Type /Encoding /Differences [ 33 /NULL /nonmarkingreturn /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /uni00A0 /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /uni00AD /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis /dotlessi /Lslash /lslash /OE /oe /Scaron /scaron /Ydieresis /Zcaron /zcaron /florin /circumflex /caron /uni02C9 /breve /dotaccent /ring /ogonek /tilde /hungarumlaut /pi /endash /emdash /quoteleft /quoteright /quotesinglbase /quotedblleft /quotedblright /quotedblbase /dagger ] >> endobj 48 0 obj << /Length 1144 /Filter /FlateDecode >> stream xenFỞBa`S`W,%K90d(WMw> endobj 50 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 580 727 1153 316 316 307 580 720 747 580 696 684 684 580 573 684 400 580 580 580 580 580 570 594 307 307 307 307 307 307 307 307 307 307 307 307 307 0 ] endobj 51 0 obj << /Type /Encoding /Differences [ 32 /daggerdbl /bullet /ellipsis /perthousand /guilsinglleft /guilsinglright /fraction /Euro /trademark /Omega /partialdiff /Delta /product /summation /minus /radical /infinity /integral /approxequal /notequal /lessequal /greaterequal /lozenge /fi /fl /commaaccent /grave.case /dieresis.case /macron.case /acute.case /circumflex.case /caron.case /breve.case /dotaccent.case /ring.case /tilde.case /hungarumlaut.case /caron.salt /uni2669 ] >> endobj 52 0 obj << /Length 379 /Filter /FlateDecode >> stream x]j0{"EQuD`n`fh/|圔6Lbr?Xaed+iXpr r-v|Sl cee{* Ϟ;Ѓ1:Ͽ0ZY97[;lWwf~Xyf`ơ #[u/ ̓2O͋Ԗ{j/㸘<̍Ck ZEStl]r_EޣCgjM{hs`MK }$dM+k> endobj 54 0 obj [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 343 397 580 580 786 703 230 300 300 400 580 212 347 212 373 580 580 580 580 580 580 580 580 580 580 252 252 580 580 580 398 822 680 647 685 753 581 566 734 756 307 444 681 514 920 756 798 611 798 644 530 590 730 680 1018 643 629 624 300 375 300 580 394 307 507 559 467 559 524 337 511 556 256 254 524 256 821 556 556 552 559 403 434 373 556 512 766 504 512 462 300 300 300 580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 343 580 580 580 580 300 503 307 798 342 463 580 0 798 307 397 580 332 332 307 556 669 273 307 332 381 463 712 712 713 398 680 680 680 680 680 680 929 685 581 581 581 581 307 307 307 307 789 756 798 798 798 798 798 580 798 730 730 730 730 629 611 609 507 507 507 507 507 507 816 467 524 524 524 524 256 256 256 256 553 556 556 556 556 556 556 580 556 556 556 556 556 512 552 512 ] endobj 55 0 obj << /Type /Font /Subtype /TrueType /Name /Fo3Form /BaseFont /Lato-Regular /Encoding << /Differences [ 24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39 /quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron 164 /currency 166 /brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior /ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] >> /FirstChar 0 /LastChar 255 /Widths 54 0 R /FontDescriptor 45 0 R >> endobj 56 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /Fo0Form 20 0 R /Fo0S0 14 0 R /Fo0S1 18 0 R /Fo1Form 31 0 R /Fo1S0 25 0 R /Fo1S1 29 0 R /Fo2Form 43 0 R /Fo2S0 37 0 R /Fo2S1 41 0 R /Fo3Form 55 0 R /Fo3S0 49 0 R /Fo3S1 53 0 R >> >> /Length 114 /Filter /FlateDecode >> stream x+2г414P@ҹ @@+:V@!@ <CcK3= ScKs =33C#\}0:PI,IL, SU;+M+ %e% endstream endobj 57 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 58 0 obj <> endobj 59 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 57 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 60 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 61 0 obj <> endobj 62 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 60 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 63 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 64 0 obj <> endobj 65 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 63 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 66 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 67 0 obj <> endobj 68 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 66 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 69 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 70 0 obj <> endobj 71 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 69 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 72 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 73 0 obj <> endobj 74 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 72 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 75 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 76 0 obj <> endobj 77 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 75 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 78 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 79 0 obj <> endobj 80 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 78 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 81 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 82 0 obj <> endobj 83 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 81 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 84 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 85 0 obj <> endobj 86 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 84 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 87 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 88 0 obj <> endobj 89 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 87 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 90 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 91 0 obj <> endobj 92 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 90 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 93 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 94 0 obj <> endobj 95 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 93 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 96 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 97 0 obj <> endobj 98 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 96 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 99 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 100 0 obj <> endobj 101 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 99 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 102 0 obj << /Type /XObject /Subtype /Image /Width 992 /Height 736 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 780 /Filter /FlateDecode >> stream xֱ C ˜%IFHoݍ$K~/l}\"@r!K;R"@3("l6xq endstream endobj 103 0 obj << /Type /XObject /Subtype /Image /Width 992 /Height 736 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 104 0 R /Filter /DCTDecode /SMask 102 0 R >> stream JFIFC     C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?/_E7ov4 43NX4P }=K$I5QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEg1a| Ú۬C  AQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W5}+CSֵ;{;h2]LR@wS&yz\c\/q/IdTaq?|{W29}LȄu>eW;mQ-U~['V?>|B2fvv}_3Vf}o#TH8oZ?io^b>6ZwsU @ WsS?J x=rb}O^)cFޯ~Y6wGtI1ftxLDg$e &暒_~_|[=;WÛZ<x@u~|z;j? ~!隺 4ckYJ(J+mOZOQEQEQEQEQEQEQEQEQEQEQEQEQ\~ SLidycv1e~-.S޽(%SQդ628;+ʸk<Ο I6x+wjTW:| uy 4UG=+[Ci<=hůu!W^6|kKV9uטqW8:<^"0rjYM5 O͵?ֿiOó/ލ2>7SLfmb|)$i_¿%j=r늝¿/'Ss]aoW~֓z^J3Ť$n=C) ՚ua5߆^">oEwxVo[n(̏B((((((((((((((((((((((((((((((((((((((((|~7ouu{|E7v26 0Tfe5~qs|s@voA\FK_[e ۊpz]SI?#x0pzԝes4MMgi݋;1bzjU¡N@2:&gq.:}͔$wwbSOƳe|wIuMPTu).m\[Lct>*vSg4ˋqwGӟ³㋈aG7tdzq_j~ &ħDe 3zG&vIϵ~J'OƦA<{UچLМ;KWu~nSzE~UοP?G5v.ZŞ4^Y=W߳SH|# =`&gu&XT(3Ws~-pN<;/-y]veSe{?j(<(((((((I+lOm~_JQ14ޒ>vG'>ƾ)P~(GT]snNmɯe%rORjY?%:YQ|s8KP}#[^C_VumwTKsu3I#RI5AT֡prE}RR[&$"21S?JheyF*NbNQ$/5HfFGF H<{T5 ȫiO7xvojVlcɌ} __B^/|BQ67U_7_9e q(BIvJVM+f|9BWyYW (H`(((((((((((((((((((((((((((((((((((((((? >x3⭬$#S6\"hH+mAϞ&U$H_NwwQ$-:O#} fɸ c+K2e&&],#(_?ӵJ K;>K gx%1 Uc?l<]tNtT2*d0*dl*vPj:-ݩ8P4g³{D>{H-PU浺p\[QaЫA1攕qmI4}'PM6[_~V$̱hQc.h%mjWQ -ez2J+ڿd;Ϯ%]SDRBd$8F؏ü>22eiBF^~G|5u8|ŹC}{U|:yKy0 E~# ]5~Z\=YS'f3 UiצSi٠+3@(((>*|W7]x$qWs\֔UUSݒZȫVnFV6gI>jpYYdGH:1 su?ٶO&|Q4sOϠkk[ư\KZ IѢ6NAÿ^ ~~a8)u 3y/Ĺa NwޯڔƷOyws!RHǩf-jvL1 ,1X~I):y w/r_/oge+)ȭ OSjgb>hTS-lLpjT tT5)'J3ҡN,gkd?5OULC)c8pjlS)Ȭ١g+ٯ_ ]ge]WHϓwy\G$<V< m bKdF_+++>4O Xwvn[O +V' ӛ՚ѧџp(aETQEQTG/|MLc^ 8SUw?< yǚڡ#̸Qv8?i5}ķ-o[.ʵ'!``VwRx5`8x㡑t"c~ Yī$/>.⪙gûQw|޻2N']PH?J # O#qZ"MB*G<Q9W6FqQ9䚑Zs5̉~5 u?ZCPբY <]ZH_K)gM[XtoF5+딒/#_3 K>[M:2'+}<! ;y/ Tv_r??G6P\:)|}1EWQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETM;ĺu{eK{\d,b m8%_x?tLF'/])~(~RWXp~?'N4gJVlXC*Tp yYiw_QB>{E~H2W8X9Ke_33[Þn oig G>W?g[ \:xnoJ/T_T|>z(Ҿx^8&t u˫q ; +^!+:pgN_?Zȼ?a-W|+׬x7<[ium*/''z֝WMN1"dQRPQEP@`U Ax ."-Gp`OV\\e_l eœɶX̖qt[ _US]tO3>#mc)qkw9Ox6mJFKkVYޥ%KGUg~#* x־.+]MgWRG"G_4 6^-M>;kXP`$hUG__L/?m r;l?؊ s9|G?kW5/(xH(((((((((((((((((((((((((((((((((((((((((+ ]3þ D^@͎_οO+ μ,u+ye}Uя)*-V_dSt=h5][TyǭP3TT+6E=T9JҦVAd J}j6JڳhXC_CJj < ƇKI6k#\uJ_~? >=(=om5W as_zfähZ0Tp~[\,,꤯)|*5e^g)+8;+wggw]yCf'omA?F:ƣ U?9oz ( |]G9>Kdx-ᠡ~vޡEW QEQEQEQEQE|[#㟆#m`Nର1(\2溺+Z5a%Nz4gV*:R5tG9,!q/u˾}'7'|{muaq%)P#<_W7VVwyq1FW RI |y~!G(b;:TD0c_?gY"8?hi5o7>}9DESaSv0ؚo +5_=G?7|GX5M? myL_WW}W?~P_J6x{ |QY^Z$0!h:+)ʓ_+Ƽ;U<_je}9'IY|O cܮ,b=Na~&k<KrIS=] ]7 .{5>`: jq}&OɅQ\'`QEQEQEQEq>>|''i& mۮ.v8ȭhPQ+FUQu*F+vݒ;oW!6˦ڸ<@Z i_>_~ӿT_K] x>r\q#s|wwqypWSH夒F%$zs<.[m.Uo>"ҥz9b.O&{+ron%ӵg+@-V;y?qx6M t;g_`r[T0 %]Oɱ^>Wi͞j6n~|Oqzo}BЮ=$l޿ԧ^j2I=QRTpNvz}*T~ \m#lgUJ","qUTJ>0NƏDJEh`CZy)FY(<}'O*5/RZ=8CT9U.ԯF?-Jܞ=o(2.<7§8vW-\i߲6[G'jO_Z 5wψl8JJļv/sې~c_|E:\8ӝ:JpJlnT4xo0?;{{Y4|<~xN:fj'!?u )؁_wCρ|[i$I2"/P}'7*+Ji/vj-ϹG\7Sy.unV"V"VҿTjذLUUh@*Ds]$h`!ßYxMycX㙃eaGk MwG Է'sK x{s"O^9첕пE}_''gY1~ $WA_EjA+WOۃ#q^̿|!o }<ˇ_\9if ]Ik;2꼞bz_C>)xj~56C_?P[#9񴁰51#Z,5kfU*ίjpP7MpkYD{ս 3Gq޿l>M^ wKMlmc5=3W-ov> s_`i/#-*ggF|UO?N_xB\F~Wv~~ {ůi֗\-{\IT1$'kuig|[^~L˹W'?֏r,&4Ҩ[^^Yh]ts UL M8\/W ~iǾ"jo]O+%ñېb\f<i( tχV;,ta}Z9ix [8 _?-^p^OcCUc;UdC-1X*r J6򳶯ϲԐsHd; B6g{7v4w'D`:k6y4tj+>x0z$&1߰hw/ U$C $TN:Z&oΕZZ.#a_qfxPK0Ӵ4{/ķ1,#%x'|)~~?(xEccVUO$~|&[>ӅZ6NGw?r$~'U,.WBWU{09lkLv=f5o[;߽Ί((((((((((((((((((((((((((((((((((((((((((((' >(Kwi!/mq= K Bj+l>"kQѧeZM)R(Yh;۝s\0ʖtҠ&9YrN\g;@9)Ak#GvAeaOkUjgG[EoѯC 5jy}^KjOtS? ձ۟-?f߄.<5ڭht /N?k# bo3y$WZ9+ '`+ I]gy&+ Ŭ>"queJŅ|tR֪wW&}e{~ֲ?{w|gVmo⧉uկ^Ji%SɨNH#5s]uq%͗˹$`YN诽#u_O^.D?cVֽK +"ǦO'_$lZ?z?mF?cto19a+rpMXw!OcV!<. ~b~>ӖL5mU[[?^c!mGg[:0ow ?݆55= Σvpoe5S@v4'}_gXwWq޿Rw3 2ږoi?/|I_^6}7g~*c= sS&\Z޵,y^++ Wn {۟YuۀcZ3ںY:ǟꡲ&= <W\_{R] )Tٍj'H\f񨋃թ q\)2T; L{Sji=ɦ+$I;O]FgT#NDϏ#?aLf֩+ 6>6>3cֿC`ZsW֬-*_}y2 ׉K Iڲ}[$19-󊕯6N?~͞ m-c!d;ecWmE#_ZUIrwmԨPT$IQXQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Cj6:>>]$ְHpYK ?gtm/Tg)VGb )ҽL+p4e%vyپcK(jmW|ݑgTj_W[A?/O>X GC_4e>q$ǭ}BeA=]3T=3+_7)[sN%S3ڿSH߲]X|M| 'Z}~0~- 896'W֤?ú~Sf~sxW}o_֤u䳜OqG+HF)-𲓓m$޴M2wuVK(Mi1Q44OJiLi?w9'Vdzc9?Jip:SN¸~£g)S Efֽw"_W㮟4ޑg+4}!-Sɏ6S&ҿ^]42;2I++㇋n8}CQ޾V>RO Ԛx4a@s=4S ❘%xӮ4vgC_g|l:g,\Ie+ԊUV"Y3޿vhd֜z=*ZhN}sP4L845QJv8_]F81-sR$)Ih5=z4U|úmJu+ǃZ<{_ x/NiR2.aoM_ՆVE//90ßg,>"i߈Zu3׈_|k4o?[wNm\^ڵ'I?ɫ{zU~yy!cݫܲ]|-y- ]-~W_g 0h=~˹4Fg_pge+[,ʕ7xJ=7oY,#RjҪ[GWQ_xQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE m[ߋEΙiB9ǡ=(9ҚwOD +^G_G>^ۭ|!LnaxSщ1L>v`õy+ =i¯j 񮀏.vQrZFuZGw 45->lc+$2)+Ђ+JRvן%_?ÆpdWgw~*̉d*ET9y+CUSLZ,RdӃt =yB_zQ.jKK(qPdsY?}'3ޏ*q %* I3UA>&E$,@UQIO%?/'|Ce~m2;gn¯q5Z.u>8zfoY˷_7>xi|!M.2ts&s)铂<\??_T?؅ii؃? [YDm Ն 'Gd~AOŴoqG$lVDuVz\x'f׶Einkjk*I~Zv_ZO0vf=+,ϗ%2Z\3 u4֎VԄL).{* ZL{Tm&;dBl'Q44 Nkg~t_>.el,bz|?~,l1*{B H RIٿ&5a |+7*kaʝVՈOP/8 e.QiךjfGv]Oyag7 !d-O8(ϩ8=&hTYݷvN%]QEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|ixc&-Z,:(npvr0G4WgG/>Ykk}WyW0r>w{'}瀾"jH6]G#)90q޿yjWmᱢVkxywD8˞5R#i_2\ώ<9,<;y-N+_J3F*J~vd;>qf4L<]Z=W殻ct4qQA=kw,lVHRu; "ZN$4'W;pF`, {n =zCdKZB+$y 1!fv'@Oj?ٳj[kIw=C<ۙ5}1 Im]W3E뷐ш[I Ϩ+x2>(J~ҷHE=u=5(ǒYioӻG4??n?m Y=ỀXypemO~lڊ+?#%Jd] Xuoy>V|%/aJ{_ (԰9,{)d9cÙqx9ZKF]S]WZ9ɰ9 Q{5_t{3ؿfu+Ym-hhʼn <5>;f4> Q\x12| rܐ8[0w b/i_C'Gr Yp_1ǹӌ:a'׺GpfqMR8-~zvl'Hej.{ Bk)SLTev;)1>)[kX^Y$`jYӵ V~⧋ wZKXǹ>c$;\I~HC6~2w} s1#xp <2>q]K^o2~g<*5d,4jIiW}>87ΧT{5N'O;_>ã =%g=4%%.?2ǖ+o}[Q^aQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@i$~څC4m-H}_ T~Gj1SP$>3_@^&cWE+A|R<#ytuO&n!viinE(*(M((<]B0ȥd`zQN?L}Ě#Qڏ&6ndOݱ*O| g. rRYR9# .n*ʢ˕tJI|;xo1|4nj3%)X|o𼱃4H8։ pAI\?E~^Sm< )_?_|);B+|EB ZAO?Oe \|%AijґҖq+h3S_K? lk!ʤ-u+p((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((y$2HT c+>!~ۿ7K5߉7QJؘP~PQ_1Uf~%PxB.j=#!j+{/|G|Ca%B/gG_uiO~q|?e%a&H8=(((((((((((((+~;~_Ι:hׂ$ a).-*+{|G|C׹ Ǟ[[\X&PQ$te A;:( ( ( ( ( ( ( ( ( ( (_| \X">Wo?{ծ|9[h!B^(<<: wϵS@,BI=ix~t}x~uW$݇<e><Ԭnﭖaa$l}xZ=~{x~t}x~uxZ=u#_\!湛⏋6nF}x۟|nk_3_GhfoVq9{ {BQ%t3'944W +8]G 1,HSMȤdb qx2q\VwYnuwp6VD=PF+a?n SqH:5t\*\Mo_7x )xj4{Z+ɥiCf~+{"bxgMlZp?t«}D(M{bNW~8m 4yX&dnA}WW~^,׼1Zj63۵hUА܂8=??:HK M~s}z@KOA@YE:Eyr=rw~*i2ْ Oy&q%xŗNHtQ7@RQ_)W<rO[gQN^$EcRf`oևq@?*Z)p-ͬ,nI#`֟@[Zth^ o⵲yg}h؞Mx]=?c=g"= F?dkӾ# yO {.IN+G[-[OeFSVW|eg/%> hF>m'O?h}ExW;&xHGY?m ?߲t}/GI;b+3' {R:HH2ʲ(kO+Ԑ|2BB.x$BpSu*_+ៃzOϵSZl|EfXQUlG@]ɤgYܴ7oΏοJ_o5\$=_7?}[G"fςGppAJ`e?:d-4 H̐~F~<3_ӵ/ 뗞`0X]Iou9"1V}zxb>ROԭR3ã GcZ5g;M k~nOGpe v\:(O>!izFp\6OcvutW>%ʚ Z=\/ӴOi#?b`?gwρ|`K;f??}aExটWX.x?|IZOn[{)gdF2_?cGsW|> |wYW]Ydp}wTQEW|`| M3W;K;]O4{10J؜gp_k?_.w|.񁼼M=@Y8ܡ8^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|'$+M5}}_h]&?;>kGs.eܒj0+PdPk`~aZh)W ~W߂_HS-?x[t>/o.}o/$~)]}EyZ|)1u3]A=jQ\[V!YS=bO$w$9Z?.P}{O~Ͼ ·iJWz|Wd! 9D\dAI/FiݎY$]2|Sb|/NTڦvC dŽN=#H٧zLqZ?};hEՍ~hC'1%s9^!^Dק7?Ʃ4_GKLdfH331 (?nۯK4xĶ9)W^jY缝nNv<"0aU.|X׾1J~&xfkbKdDW =sNʰBG$4~iMĊH __wWg>">\uw7jqGe8V![OGiaVl1OL;~]$(,Os@Aa|5׵ 0fa>9FHH?h?_Q/%Wr`2گ"8Ai? B37 t{eû+Dϻו}{/n+ |:gt{}gS:F$?>l@p3_`offϳgEoLmی{Pu_ >;|M|[W:}N $pXS k(2;|𽾋qcNӡ]ZLa͑TO~~/j5G]5BZBII=^=?Zi! ?AE~,sij2>?uWWulm,рs"@zzI_Wa_L5\D{a \Orwo|#?ٞUtVdI؆=Kf_/DuoYgC%֮$w XGثSVfW 6y#{1~;_^2doڵCG-Ml~" ៅ~~'[u\Ķa$<A`ys:cZk{/?xO%z)/%J?ހ>Ҭf;i'g bxIͿc OozO.jΧ R# z{/ +nF%@4"¿1=RKfFfcfbI>zWW3|i?O sn/])kltcwb~||СL,Mw9^V.ԃsI_5#.&Zo"Lg7!R ~aC?doSy|-#~sn{YSfyXgao&6j#K7ۣY ;4ac<%"<3|9G~, |! i{zYw$ ɼ5 /yM!fv=I'}?[ xr x*ŚF $ˉD_A}I+{|!Om_YxZ%n!(ԳbA6Jhgdt5;⦷-曨od,ܳۢp_lgE%M{Ixnnc HXЂ* 9/_DW? ]ݳY-oK _#k%|,Q=Aq(f?D[%q_lmZ;;!1VF!9ޅ>W4OO-^.Ž'Guf.[ nOӬi..Su'SEQuO?b/YU~Z} >;cľ;ӡ1:*JW7Yl]}⦑M45;RX{?}PrǏz]N70:ZjZZtҾԮ_O i|0e-2!<^WVfc~'/RUt<>7<=̄G>s}o(MJ?mו :4|NBz~{,SˮxZ/gb]49=1$F oSu['湞FI#ĞM.m&j^NBF`ܒZY7.3)'<7#W0 ɨjZΐJFJ@@795/hvλ^LaU(f/?O~' |Uqff3[]/t6Fo_{s )^'şY^ =y6;H#!߆>(澦 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( g'­SxY '=P,Gf}ޯxbY.]B+8S:k}W?9oGsoÖd6@k}W?9oGsoÖdx6@7@{~&xDWBGfmoֿG+ϿgهY'@;חsn. q Mz ~hLP}Vƻ|epQ%si%iO7L h]́XU^{+Z%o ްu{S?xW+b,ƌ?&oxHk>lAw?4!Z^5|]xN2 'XV)d gs_iKoSѴft$UG$ \€_~Toq@| iѺxt@GX k/>`{%IyOQ־=XP)2|MkpIP\pT+=׃xv)|3y48/-47is:ڈHI݋t2O`kcVޑ%l ~$}γ>G}iS!e>zt6ױ+ʟ?(St}_KA=+5dFt@Kx Gx6~aմcn!8W?k?m/7O:Tk5xρEypwKV9/'1>偯Ȼ_'wp4Ɗ3kp/~x:[[^MDp#=@|SE\2*;+X6|qͷfA\}M/V,q(X%Jrj ~u|w/){/_E*WWWg'ݯC_U8o8(~+':3Io_i!gSIm@)M)xdO2yd}}O};mlt~u/}"5/>;񔱃.BH'Fb=?~v sHО@%L$UZX:+_,/-5E$Kh!7#w_UWWfJ{I چ0K2 XUWskpc2=VfC_>?Փ_oÛL8Ks&x6P5~&}W3%|J>l>@-:ͦ?Wf kOA\ϟzBsٟuAj3PX{Ƥ~ƿ3?<32P}H6{q kO_C|ώ.+/%~U?[Gy9T`GPPW*qw~SFȆw"X|KsC5K>}Iȟd<+j {/7"m k_.t_o_\XZ?0wQX ;Q"]?+gS{:Sm_uD/uҊ^~?J"ͯU5&5PeRLɯ:(+\ӵ ILWVwqUe`#x fVGF t VM*(.* H3<lIU~@J/{ⶵ%ٛSt6<3\5΍3h-Ax? Wu+>H,O̳W۟\=9|𞲹ſMf9~t^lh+%+A0A,b>KvK| RK SŶƀ?eh=Z|]Kȕ× 1 -Xzz܁"Я'T؟ҿ@߼R,9VR <;~o%$<5cr-zglG=~[X ?T[;p`(/i8˙?S5_>|L~xܔ/xJF\0>{5Xt2ol,Q %mڦy+ҬeGb!Kbp:P}QYi>o߅]>ҙK;eo@__ ~xC/ᧁtmiV(zı=5!4ix$޾! -JLeyI~zikEW6P8deYHs@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW_]9ϏtAv@ Q@Q@Q@_SF2W/Z#?4JPoXo⾃~Xo澈[ R%y} 0(4mJHm^ Y$hRC)(˽Sd54-}p~)^Z?tX=]91>2+d{.-WEMJ)Z4mw 6q#^_ϗm_=@a>P:Cq5P`?oxšlwƞ_Dׯ į^#MҬgݎ5Gͮ,5Eb""wO=2h=N-['ĭK^MwNI$ (+~~ɿVߴ7_ /ekuGHQ%Q)_wÏj&^i Ap89W_WJ Yn9b9o>e^l^I"FI'u=|I.350U5+I,cvz>¿?~7~ٟb։&Golt>T*HHy=JY7o7^?-b;85aF DnHkOc)jOYi º:}bmœդu 7a@T߅ l?LV!h}:L|,<}%~O?b Zׂm񏅖YXnm$NOF15իjqk|֗4WV1'SA@}j x#Ěf+4 wMJd'Ρ 䌔# 5!o:9 AAV`xWEOh__a6Gj,3h777&xO4.(<_?p<]CڝFyhEH##88@-|KՎ ƚxsRe8Êg@k5.R}Տi!Odo>5Xk?nwgnЅB::%zw4+Y/qhWG#EZ.W_ I/_m<|G_q ~#z/ bh?|?['>  I xIhKxNkgG=J_*jٟ_l(g@??*kGuQBNOTO#ҏ{aLYs,LvۥkT1  $q_8g=JSYCz ֩_̱Y@^I\}S@A/<|I| QnC}^~KcW@?~k' xK?⾱ecfpqk6c';5=S΅kyg;umӡå:[j di d`K8ʧ+p$0{@kN?eρ6??O|R] ѣ<0\N+(GD r eaVzWȿl}s⟇MvC,ps9$$6Ak(SBOڣFd?' {$#YkEۼb>Px--E~Ex_Y^j/$)R>?Z oo~9|Lx-Z( ÿCo/T sVyi5y%o##o7{]Ϊ.CxVzԴo Yg-."fè,ۋ㟴ʿp_-_E}*%?mCűZIjW@cdhG$bIp+?~|smǀ>,:[nH/kvaєFH#ֺZ(gS֣6Ƌ䦍Y,ec^?mM2g]&:jNƇ[xه$nM@XxZgx7F\Q P_|kko3ItM)P]_4P/ODI7즹@/KZk~F}L-x¯|.kHI.KM @#$=:nm>9U |Xb@S_4Pcx㎁r.g;U7PHx6Qn *ؖ~YZQ@2!Vǡ@j>8hW7Md:#1`233Ҳm?t[~H1'"ThOO›5LԤú<"TӔPB;w6N2qW q~^Íc_H.>`ptތAW@= ElK[\Gm7_P_8/ ߋ"p_-_E~Q@࿏[%~.㯅cNȨuE~v8xZ;+Zᇧ#־?c[Ӟm>h];Owp8ҹ-@;W PEP}WJ56}ZỴGe_k@/֚ExGXrWѐ?:?UɂmP(1{C?:vI`Rg?e{oZ d7sCqp WP_ߵB'6kb-u&2||PQq8 ?+b|y2(㏄ mI鷚`2/z(VɆ {Bw  ((ۓ 7,<q/NjO:Q D 9Z_<$Fx&:(W CZύ1ɥV4 ]bh\nݎrTt_yQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW/_Gᆋߌ5k隞pG,nXt*pTWQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W/?ᆵ4h]zph 2X$ endstream endobj 104 0 obj 42786 endobj 105 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 106 0 obj <> endobj 107 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 105 0 R /Length 3745 /Filter /FlateDecode >> stream x훻$ ~8/̱8؉_?ŋJRzaOX ,目jD?)?_rrW߯?}>j)}r_?^ rfNIU+9?9c:vhUzT}`Ɠ}@n>%.-6owWAttr;*H!M:Y̿0xL8O6.\8~eM0gnǘ񆕫`D5m. =Vc[cVNIs]%:86r:crwH.ןۋK d~[%$XIuIfu =/+>1mB3ؓlP%~qL-;W}[-'b[t,ѥJw2;1dQW ~},j;,x|] C %u;K OSIW@Ss@{yIhعO˘Ls0?9> }ҽ\w#&%T6~cв,^R N}gfq8;ɕdwR~.d+4s$<ȾdY,U-tIg VI2"``1Lkmm5MbR_3ƐeuS'T_b#њ_һ$Hd;ťxqk'H%5W4.!P== $s(:zurU'3~"zBrS+MCL@()2I)P&@A}^@^t5`G~w B+')8)OTX-e 8tވ/f"OOd;L<|8W,kDd#v;!A QecHVC;,'D܄rs*'QAHCo ,PxI[Diج fq};jpp-@$Rr9ٓ4\Hq M&b.5jm'E?̵љW{5tLD O*"Y1"]|Su攤ol(c3S$4dnlnX#|$iet't wn*ܭg#@'>Fm~dĎ@A2x3ou'{SXFdwdAH(^Ճ NH[ZD*"bL#D]܃W 9\PҚM.ZGܙ:l>CT&&W鷐;'Ig*B7d뉠@U%ҳV ēgކ:hQޏ6HKrHOPߣ+o@e.HTIo{-%/上b*RJK;)AdVZXm_w"`,y[3 ʳ~u;Kr="yI%^6$$}!R!?$z/TdO5i/xٕ ؝!$(qRg:Y \ŒƘL ˼ ~NxKlį|Xމӝv2؍u,=I>Lx~%h2*ٝYL4BgzYΰyy/Ȏ(xz Ʌ_-Z6x@ X=^}-N4M <(խU.:PV 19”:vhC& -*(zjY$/iҁP D 3^]:~:O  2|YXdsRr@PjgZa+X)]|9lX7rxM3i>~K s VDɋNB]-Zl[tg9 [ ~#HGz?jwKҴڊ<%Fu#P`UHN$c6Wt]{dXvBMRcH/v޲(aZۭx2 "}v Y-&=F6`ơlP׆Hk\þ*R;pAs ٛ&U 5Ydž)Ibn%c@+m l]Euà9ΨY$DXsFښ3*knZTT?)Ŏ7 M^&%H*UݰiԖO Q;wրoDSM-% %juv]^TNdܖX12I,pOսc+ڂs2,KaZנ Z;eO Q)^ISnqŽ6- 1 4㸡{[Q~iV6 *z5Ekݺ9o/pڝK\@{q`؏h 5l-+cYr]69awyQ5u( 8(y |`S!˨ R>ew•J+I);Z9(4> endobj 109 0 obj <> endobj 110 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 108 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 111 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 112 0 obj <> endobj 113 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 111 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 114 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 115 0 obj <> endobj 116 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 114 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 117 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 118 0 obj <> endobj 119 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 117 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 120 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 121 0 obj <> endobj 122 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 120 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 123 0 obj << /Length 1288 /Filter /FlateDecode >> stream xŘM6 >/0(=E{K@AO[$AMDzI8i6d6̐$&4G Y_OC!' QTwq1zV>ƯŻ7qw{< 1 PO,Kg.!/k&\S><)Z ;-_nm<|W(Ri<~8FBJO%Qnܚ9Ɗδl'n۹}w w P+yGZ6MP$ )Gڒ92=A"ƭ#nXYȒY!kI` |9#nXYeU,%xdێ0+.yPSLZ;Gر`榦J2Q* <!1 iesĭ'DŽbK (O͕ٻl8U=]{ .3h.ƍGhT3[+NUd^ -W]c9q d>l$ÙF5$O6W6`.^/~ЏG-V=_:K}2{un.J˥9y~byryu+(fKѪ_zbo~m/_n_@x#SLo_<3wZrn ^?̿ -0j׳7-Ab59$\D\J4ه;DJtÒkNK _g#Zi{$꘴ORiZ$nH Vr1h6mHTD`ZoL梕ɬmf?'BIl j5 HuZ-g:n>Ӧecf;"6Mt%uD6 kylvUktK'KHgj,\Ƃ-qna:iŢۺ稽X3XqzW+jkf/1碩 Z㏱Tū6F3q'ϱcl8U1Tig|2*|Sk`6V 28Uyc,j~uZw3Zqz5W endstream endobj 124 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 125 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 123 0 R /Group 124 0 R >> endobj 126 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 127 0 obj <> endobj 128 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 126 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 129 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 130 0 obj <> endobj 131 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 129 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 132 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 133 0 obj <> endobj 134 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 132 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 135 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 136 0 obj <> endobj 137 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 135 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 138 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 139 0 obj <> endobj 140 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 138 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 141 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 142 0 obj <> endobj 143 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 141 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 144 0 obj << /Type /XObject /Subtype /Image /Width 551 /Height 285 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 175 /Filter /FlateDecode >> stream x  o7n )c endstream endobj 145 0 obj << /Type /XObject /Subtype /Image /Width 551 /Height 285 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 146 0 R /Filter /DCTDecode /SMask 144 0 R >> stream JFIFC     C  '" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?((((([ TΨLۭxϏng>uN8 ǽ{CiU/ᶉ~Qm~)ٟN|MXKe[t+Lr:w=KOĬr< 9P"=^~xspl7!OU_DZ e?A~t .$?@ҿeπZ0eie!IWf~<#-5+xf4٭X ~*.[ :0lֿ'~!| _xz~^Oo'ӑ `IPHSeܞ5KNp𧈲.S׍7)[Ĭ9ͱ')ŧnOſ ] olz5~?~svXI8#,oRMloMO&HYxZD~4V?g(dS:ڹB=Hu93? /o48q_6Yb8#3| M֟4(qU9^"iW i>/kp-͈0JKHtikm{i:nu9YI{d+)O_5o[Yݓm1>)NYf!,ky_X5‚hhtGW mڻw_ `:nc' O9 ?n(76JR=8DQٯZzv~GY7yrW翪;(d(((((((Sd0hgezoЭ/=6`M=XWNTpQMFVEկ5i/Y*| K?NѴfo1B'/qُlz沉y01b%ÿ~7_7~/J|GzI).~*OsjU3 {|S_koOn:j^-?+I4_x,R?R0VjwK-IӗuI.>_N_'VKG}韞cJkj%1_Sx 7˺|_aw4;h<꼟9Z_~Ӿ;1⋨}(V{ 9~~0!5&? ࡾ)Uྲྀ "CJ?5IOy{z>t'|I֝~!klyui'빍P_u훼7\-FX³ &!P~_5Lcѭ.%8IMVH?hO~&*WĽ+{nD O$s]}͵+qip+$nOЊ gT12?q_?G_ԔHnd C!RQ_+/ം}Bk@=;z7 Yn4 y">PQUWL֬c}F iW1Om(tq85b ( ( ( ( ( ( ( ( ("Z?W}ur7ͳV>h|M 3I]Voaiߞ@>ɯ~"~ۺƻ%#]\L".-H}b6V+/w9㟋Ο7n(y0H&蟆>(Ӿ;ve{<梞*Y܅?;!8{W`^{@ygWuE:QEQEQEQE"u `2) ȟ#osPӖOz^1x*RPxތ1\6.%x)Ǵkgo7}S|jizbО$e{!i%1>,/ UTIȊ=֊%[rRZ\pbџx?z/|.E~xQk7mw7)8 __TZީO<4!)Ǘ>ORyWdAqytKM۳ tݾh_7XygRZrNwѾ<y{6w>x $qGD =^ ɯ_+g㟇)ִ}B!%\J̧GPAxxGKռ7~7?  :d[6_XԪ%[ /Rmz2CW?P|^'p<%:~H|95d HU^.Xl]7 ?U٭C\; ᣈMNٯG=WP+ ( ( ( ( >2oQ>7/ZE\^Ih2ҹ^S~3x7BXs!_b>&֮Lw 4ӹK1>檪DRI8/obikΫjMglpT*9,? [чV)?%DZMƸ_z-#yώkI,qS_P~HOY?E 5O[3'[37QTzYe'#Cu7:iKE(S4w|$O~f,:~5P dOq6iO'd q(Hyo'[c^E~OqO-s9'/.̏)KxŮ'wQ^Q@Q@Q@蒡D 0 BK6]I'>RH>Tտg_+";+5mCe#=-+' >ܺ]sM7mn|nJ>|_f6"وKL$铌8`G(ҵm/]մ]F Yt7G X5O?&=EO+hh}>n?iogKyFfm*ASEGp(Ѩ((((()7VV^^\$QDF dO me.G&W d'V?~l*?OWGI⟉*˘eTnq8=~[\$H7uOžsLQ95PӥQ@Q@Q@Q@Q@Q@Q@Q@$4mX CKE|)xtW\IU٥oHa=W$W6Z}W㳣 zRTA5*W7K-:Ǩ[؞# 6CnVbg8QfmաEvzKqgX,2S[F_Z>xǞ3a>-揬k FbB#=9 __L*k[;o_~"!DvHA&e'TbόWĆ74MetY/Z!.?y 27F~e$uXNjzo躄,ַVҘE9WVR G 8o"̦5#$WV:j #ϳ NQi'iӖ'mN4WJ?*MAEoOŎ"xA./5䙇3#ikf?cz}S] ( ( ( a>M~Ͽ߉uH%46DXvb\r]?Sf MHv:IIG͒%Iÿ 3L^Қ=wzh? K.%-'5Ӽc]6Z5]O\Ԯ5kQfS$H,If$Im:j8-K],<'8韰6h ӮU5MT OAPXlgٯæXE/e G>8P}xx&*maۚ{EkLgIb-‡?ߧy?¿H_dV~90xQկͮ'qk p?dlZ+5,8ڎs}y%^KC-Fa"uovQEEPEPEPEPEPEPEPe)hg]Htqw:~)=xq:v ͥ/Ýжvo?g{kVoMFۋ؅e<Fyk |_ `j{sI'i c_BmF(׵ \|B<=. ( ( ( ( ( ( ( ( ( ( (8zWO|0K{Éiafx_E >&>/F/X*d<ʲם_//↘$_25~t"')=:2 _qLbUa|U2?9DW.ݗ?+{?gWtJ]r_K(nj/>;nY_­K893P~_?dߌ._}j|BՉ"'0: H o Cm"EF'˹$uʑw qt$DMmoe׳c> wgP-HuӪ_i=h~t_ٵ86Y3%-+w%*ÆUb'B\gOt֍ӘzqT#Z$k{0+`_R:f_:էM+Y>m b>Ċ~^y~|A.C+\`9;;.Aq_7񷊾$xR5-cWQlҹ10~G9jcczߺӒޛ&˼De8$ZkkxERN^I$4fbK3Os_O6>2vu{:WF`ܑ!܈ԂrJ`؟?Ƙ<ZRZL~+/X~&Q4 |=h +HG@9.ǫ1嘒y5/zv0/kW>w |]/E违]_][O῁x'Ns6>[l48j;X$I&袿TYͶޭ[ogL! pPZ$H((((((((((to^7vKgT{'>]wWγ ٖoiwg nkOyƿEcaa^qW^܎=1cI◇>)^Ңw{7{Q@Q@PHPYMq_.|}sI =GTeR+co||yJ7#,I.N{JW3ºT̞lgn<هSnciiZeAmm1*"@QEQEQEQEQEQEQEQEQEQEQEQEQEGm_C|9>8S9^``[ uM3Q5+Xw2C"`AW__]ؒ?xylEp.[{~?A$+ 8XlO.*^[KuxC_ ~:TKvR#Ǵy\Oez};`>[>V s_@2 0}f<7Sg/Xi2\?f=dRO%cU F<=Sn6Q]?Qۗ}eUukIw{PK˩*C)gv' 'U~R3Oc-x/T?2Ofc¨$+ X߱$~ \߶+ B8gJj椂D[wp5()Ǽ_񔟯S&˱gV&۔=Hzt>d_~H/ <>z7{ڋTw$]Ac19*xD6op40#$$QEsEPEPEPEPEPEPEPEPEPEPEP_,~,~<|6CHn,g(ǮE}OY~5 xCe9u=z2}@ |N]4?sy^"r8x~vW|YϨ -wn\cr/2g}Q@Q@y_yQ|*M٩kd8dB?{ /\WW?^_7"oJT#obXϲ? 5+m>v ڽ 1[–FQ`()QEQEQEQEQEQEQEQEQEQEQEQEQEW->>|&MMZ"3º̠SEiF\=Xզ([OEZTS:i=|nEπAsVNKK ,NRU:u=Յ{W|EfƍP̈́[yBL݇(G'㹯ي=;[a<*jt?idV{Y #$8~iW.OqU`5[JݬɟNIJJP}㺿G?xEoY=B;M;LSл>A?; ~ԿO>6O M_Qoiz'o: XM}DFe¾[f>טI*ckX2֡~ޕ__ U~GҥyJK%>Ď&6 wʪ?Y-aًWi_IV^  3#/B>4_ h6^ZGmcgmH!B(Ҿ~Q?^ 66KiTy'E+oxY%7=/37ȖWME~QEQEQEQEQEQEQEQEQEQEQEQEQEQEk&dҝ!.-㺹~&Gcᆛu_j(p7º?x{Mg|3$x'_X{|.ˮ ȰCWڴQ@eznje`G7F*?rKm|S{m4HV|N}Tַ쯇ojTB2H_r͗бvQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyoqM"'=5_f ~ ^>q*ndgO]ǼY_ٜr\-7|ݑ.K6ͨaےOӫ+?|%q|0𝰋Mo >\Qܒkv+Iը7v! pPZ%䂊(((((((((((((((+He(G Qԕ?oNJ_^y㽈Pv?hӴR\ҭ6Q%ݺMFPF_ Ӡ]i2a.O@2㌃<-t%Z2e!{O_RP0G&߷K&yta((((((((~/._|5uƚ Lpr3ր="((lE6U]w62O@=ꗉՁ?mٻ5˽^\}6yQ ( CY4jq:MQ_>y<_R?M|joTnd[m9$?h2ԏޠh+> HҟB'oڐ-?;+ R=GLd HOB)?icմk&Em*}ȸժ>6?h7M7;znkpPbᴑ=Æ>ryqkK{?Uψ2J(4ZodO]|[oh'` BRnMr~iky¾b c8.M>fץ:(zt/ iR#խ \qs(E_M~6~\ywinG{xvW7?mߍ#:wI>}<ǘGWڶSiT5@|@I䯍YWZ]x~k}4VyLtZEi'8 zLa3(]fu(h\o $iq>WzE7VӠhn- OE6)Mz26AE: ( (2i+Msm,uz g:EQEQEQEQEQEQEUpx:Kn ZE|,5/x*R2~)hiQT ޽;"5^[!EPcB|,K?]|x72e?<* ( ( ( ( ( ( )c '#mCS8?.o^>xAj0=ā#$Rǀ+ ]{x+is[xA]0UU.s?ٶFsHKW~OxÊh_ν_Q~_S?e]gF~˒Dlq#db/(%jH"!fB>9nvA˻Ok4.[+{x#.EQHI5X߳,֟wR^im.Y! ~eq4c(r2^Oyw ӢҥRTVORoGgvݟK)MԄ]KuU?~ح; Sl-=ľ A]MWYQEQE|W~ZKWF[-Iɪ(Iw:H?^ -sxf\٦n qj$n4-{N3żɹ]Oc=Wŏ_x·Bu=]5|4#D}4aV%vM*ޠ鯇&=e#knKF,u@d9'6E_+oĚ֯~?su#^7>{VbY?>Ӏp#G6Se>Oѽ_J #y(ǫZ;:?੿cைZ>_ݖӦ>kb=Ifcx ;[j.j~h3wr8 _}|~|P։/A5̟.|UbsdC2ZUM?,7׎]HWW(rB+uo'; -c]6f "1V sKa⛇t:ds%p9"=6(((((((1ޟ~ْ$z̡TVwa.YX#"J(z)ne'yبcro+m0 _tQEQEQEQEQEQE#ּeس|7$zk W[/~Ԟ 49oŵJ ``M}_.|Wwx_O[drxkt/rľ,6֎^nfbg t'ڙqq]J*O(_/77i߲uS⨅E'<DJCN~0wpoΚJV1~@R}XWaٞ|3qQ\\O->c,Ofk'p}R/[/uz#cOqVN(Oh(˯p Qknʩq,ݼZ袊(w4Oxj~#BcQ ؁_1|1|{Eۖ:Fp3c+zw}x75Iӭ4YDwNs\=5{W2qƅw8 d}1_%l!4+Б[y[]_&m_E"?:Unv?~$۟^ 3+MF LG!~>0qƀ=;NӬt42 b @5PEPExOï^"Vkt+$P((-O෉~OSd㣨*][/ u߄;O4lcrp{2ڿ_G> 5ϷUV%\{0 wKJ(l\^sĞfjUu3,~l)i١< UE|?}OAϏ=SzgqoHmm?Γ@3p_+((((((((np"N@W~?Yגh1 2Ej.#VI.uz=_(}I_,:= {)擠 ?}MץQEQEQEQEQEQEQExO}/~%_Un5I 滚(P;'Ɩf ,-%SYnmP3>oM~HkO`;8{+;pt$RM7'b1U+z٥5|Þ>MsyHWH\\sK_Q>{xV &jWӐ>7rD"AWgxBT8嬟c ppqDg%8J_=#XQEITR_9oaVU]w k=70ŷ6~Y 1?{Tzo`4iQץVg7i j~lebGܤ Ӣ?<|S~8<9'VǮtWdCm[[8*"`_#|+_֜Wv2.=V_ԏʾ(*=4u 4=|x.+=708|\"+Z-(j*=70X%qWMMEP__p7~ͦۄ>0^_wf /:Lc{Iš<azTM;3B•Z_&67Q}_Lx.mgI捰Ѻ kK/+>Ք/jKI1W[_J? rZ KC A_xل.*n?)FaxG2J _ }\f:ovcXIGkcˮqkŠ(((((((*[hEֵzay>X>blۧXնX^=F8H~Zeֻ?|ALFo=iG?:(k 6kt;׶JG{/h~+=ޝlV<>!&<-[ɤŔƼԼoiW~}1ɗGV'@EPEPEPEPEPEPEPEP_4% HGmvd~u|ǎ^3{(ϢMeFc'^8n,N[{H>{(ʿ bܯux-'gֶ|1I˨\+c!O심|9Mυ|Y0XƒǼ1a_#R?b[jQż+BӒ^_gTQE.A^ _+ S_]Feqjt<"7y?w=;׽@1ü/+QyJy%$!oIgz쯗|])_#ZZǩczjI"- }9E6$X4(+ S|I;g:5CRԯ.4ME0CĈ܌9r K,ޖ_E)WmoCzWSY7[EKOpCjz92?C_UؿP?-N]vEݾ0o3Tb% r1_EşdMC]=⛻KZ.d@~rxp+|߆2Uh=wK!̖9ŸyYj}.GQE~v}ЎЮzWOmJ{|Xorn2}5E|ԿEf~|Z-iQĴ]xۼc9S_vW˿'?JҀ%yj_V3>~> i~7Dw\ >R18^EQE [[~ƚ.~ ZmҾ8d"k2/usʨ  ~ì4\gzIF-"8~J]ROAOgr2[_HV U9_7+_OŲ w1i!Yd {ƪEU/d<$)g5T?EWaQEQEQEQEQEQEQEW~־/5,0c) : Ѷk^_F %>Ljte_=|_R% 2O1J?_C_iZjލ}-OksxF t A `kfVqpw8Q^Kytn!ĺZ oGBQ2˜x 10 Op&OtaEWZꟴ 4.l! q5PEPEP_V6EhmhDYݛ͐4)u]scdo@0[E"6z}+aOyzl~33wbI9$I߼Ẑh4O_z_*?W?SIݧ?/wn_shomzE@V y!7'u߁_a/WDԯ粱"![U28>$<;cSR"GSWWMZii'dו2lƾGQ$^骊C>t"XZ76wx=,N]Yך}Vaa.hM& (N"9k &k9A%# 8e Kuo m_xP|YKeooC*"2-ݏUs%?Wˍz齡-lh\#< H޵5x[g_`|F>3|S3I9%+hNZ6G*ø,m~՟ +|! ^Y\[G \XO'cFIR sXޱuw7W-JGV 1]U|k~ 'O,{ /fe98u.rk:/QX3PEhE+~鳺> \G x|Brޫ_W|{FtW_shm|3KQdnRt& ®ODks_}msm{nvw ,Rx+GZcr\#ĺN֏=Mйnmfu[UN>[U~M+=VMkze.XGVfbsM&ݐI]+ɿl?#_%Udд yT]jpE#rBl-^˪׊DeTVXͽZw}cV|`>2|PԼmi&I$$|qcZЏu>]C' I| O|NxvVu[84RII k AѵO-~> ">Yǟ-N 7EP?d(˸#%T$5J _ݯx_1_:iޤ[d _'c?__a+oIx~fα _PE[ 6 l玡eLG#UM3j:] &&IE*}$OiϤjZ\DRHdRC#)XAEzG^|p|z=bOsy{pEIn&Ujg>~ %RWFOxj ԦdJp^B0*O? [炿fT$ cOM{x W_?h/|N kY?a}A(zW\vcU+4AkS޽U)KITֱ얝Gk|cWUvȊ!pDI$w\|wVn~ S錴v̷csQ 5 xjW{21{*pI_N¿–R񮸉'rȅyW3%Uǖ-9)X-]Z$Roߕ?ײ~W)о|>>ikh{gcݘ(jի^wmzOTѧtգK[ +2Š((((((꺦έtZBM!DQO _7BE;ak((`kuoB|0 oj o98.@!LᏧ꾭iqkQZD\A*dF |\~2x*iΠGn[MT u?4~~Io<3Ўl&=^Jq}?kW[[=<JT&1-Ŝ=_Fվ6~l[%<)뛭.kyeOr4OU#>?žm;~t˄8x5)!u>\+:|X> {6J"kŸu|oMn kxݭ<)x7@l~$YƟڷn ~3kfMeuzVmlIQ\.jڽö /N ^&'}_k gTW=3,g50ڨQWʥo17x7*蹜~ihxz{d1nj:bqE˶>U5o]~))'xPӬ]d~¦u1vw$|?wo^'ß FOӭ( 9'c|b= k8]Z:WNhpm2O~ ?XJbI~;,SmWǹ'?l.O5zm6g %usZX?g_ YKuxcľm?ľӮ_Z<.p QpV"^p׳i}ɤL8ۋh.OK{Mlx n𭗃0iz+(nes_{/>$ޖx \GEsq Ƿγ;,:V-ÓI~ !ow|NFCS=D4_ hF]_*c KNO# ; þ)WYe!u]w1B0 1 Was\\XԖZ%-C cAB/Wݽ_P+ ( ( ( ( ( ( (S %l6\p|I|w-k)c\VM.ٹ\p?A%u ϥ.ObO s?ϤG>a`B\I,GqƑ"U*Ҁ(((( ?=ׅ|Q͕{dٔ`yէؓ'l5qqṇ2U xƚdžOyerfQ ur Rw_|73|{7m(Ϯ݋BT&Jq{h2 ^cclUU숣1|{}76QIcN$cCMItIwzƷRi)S2@ᯇ_ǻ1{Q{ 3𦞰Zۯեn?( ( ( (9_/rxkPr7Ƞm&8eЏ~|K!|L@Ry`O ?ZW7GW>.i521Kl=CPvjzua}$r/X=:Utu7G]YNULz'Qiw j#zɛA^ Udi 5u׷סM\jT[DJ$gGQAFQpS((((((((򏏟OA.= t}/e$0s8#}E|<3 @66-cQ6';[LP߈UQ'|a+NP qd{WOrԥ/\jvhr!+h~t+iWJvI}hn+|5 O!?<'}vO^]αy>zھޥ kB"RO+_FY'j^\+Gn|Zt߃3ERgt2W[sldw4|\e> K}y;yI5l X˟v=j޳=S5&ʒr!?⟩^/ß|/od>wOQ(Pֻ:NO!@ TQh ( ( ( ( ()kG^KXzn mxMRSm+>l}r{ͽ ui:K9#` }BڳT@o1zH>^#'j/Bg8{mބѠgp5`O񵼚`%>eg+Z]/Vҵ$Դ]JA継dF̤@((((((|e?Y(7>f?@hja G}{ITuc5nNoৄo!,+qeSTXO|{MդOȶ@%O;U~ݠ|D>"`ÿB'ʛOWahJ>'e-_Y-%;ۮNֿT 4x+@2 b;XzvoPQEQEQEQEQEQEQEQEQEG l+F.k{~#~!x'Q> %O19H\$O>V -}g=?S _ u5XWOK-C[weWR0AVҰ%e74)6?"HIXZ f@UWPtM! kj\\*_h:g0`YL_G#c%WJ(7wi|LT7j~ tx-OU}u[xķ;Sh?W-8ֱj,>DE=]gς+&M')5>|@/!S|bse ao!.Ghgj+lēw{nF 4 0F6|,T^K7PDŽ]PEPEPEPEPEPEPEPEPAE_e/?|(V\oԿd_ oX-ƺLɂѕ+Z(O[2}Tuhֲ?_ƻ 5S$?}C,[k%92q'>_b`ٳ4oA_ā%qv!ciT5(ĺvžFC]_u=9~AkϼmIt/aĴ'|)3ZB0<#zOZ=I@UCSO4D2k>#P2MFE|9 xD zw+ e>-Oq`Z,~MM|9pkx;5>y;#%?ZSJ(O -/mhq%I?Lں:(((((( endstream endobj 146 0 obj 26702 endobj 147 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 148 0 obj <> endobj 149 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 147 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 150 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 151 0 obj <> endobj 152 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 150 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 153 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 154 0 obj <> endobj 155 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 153 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 156 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 157 0 obj <> endobj 158 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 156 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 159 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 160 0 obj <> endobj 161 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 159 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 162 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 163 0 obj <> endobj 164 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 162 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 165 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 166 0 obj <> endobj 167 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 165 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 168 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 169 0 obj <> endobj 170 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 168 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 171 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 172 0 obj <> endobj 173 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 171 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 174 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 175 0 obj <> endobj 176 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 174 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 177 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 178 0 obj <> endobj 179 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 177 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 180 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 181 0 obj <> endobj 182 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 180 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 183 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 184 0 obj <> endobj 185 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 183 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 186 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 187 0 obj <> endobj 188 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 186 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 189 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 190 0 obj <> endobj 191 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 189 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 192 0 obj << /Length 2292 /Filter /FlateDecode >> stream x\ϯ79S%Q!`Q I6@EO]E"a<֌8S!gHJS:GCl~87()bc|r77_r/xT)s'PUY%/ !QbÊ:+Ն[V%b(QNxbXIgU7VI8D!J'W) a@QgAn0ވa*P܈>lxÍG ˝lb%%9_nS)S<]'0 FV[DO$ Sv. Lۿ~zHՄ~@="ey[P ySS%b)p}-:[߂mW5~UStOBWN=zM)'_C*?PxrozKFH‘Tƕ*W[_0:hӟ_G"/~T]?PerU?[N!xM ˝zWC<>'Zh+|~⣤>~P[cޏWEŏ? [VG$_K8ğ?@+kԳWMЗ^rk>F?y>P^?g/N+#^4~w#^p2^:/$yGS9uk]˄򫆼,@ 3엂[Dy2 kh xNǬRmX/3[QA kuk! إt-Tn[q k xj D@^ߋCrdЂf𪇨|  Hx@=$)4yC£Pf,pj ), NpA!1{v*HnP(:9$d:Z 9 ĐdLNQ(DZ  Cvc[5 K[&h'{;lJbtU&hlYx-Jr(0!vJ$K_,@~+LGV.nzE^,9юJTt\cXki9T׾2 ,ݮ*Ik{f%p@IZuث$M15icg[Q ^@R4MrZEA#~7lH&#yxʄ Єhb;9?_0@'Nx L#i*VzUZ(@"z)HYx}hg7@=!fmm {v|`]2p%#p rfndyݨPIB6AFj C; U ѽ f gxU @doxx+rp{.` ~g0Mm,bMB+#nuBkE}`#=P-lPqf{1*j*"P)^[e-'_,^9dmcuV|ĪaڹX -6)U `l ƾ{u*8(U )5$/ 7jjCkZGQX"\ nBc"yٳX,ujWB-~1xQGa1zsH91 +ў؆Il#|cujV.m 8"FuݕX-)(ed9ziѬ4Ҥr!Lbf>G)Uw{ݞpj(5v]oR[2z^eQ!ݝGwX[5RZP zPXt0GG Nwr0eBJ:oUEǤ;F1Aa=o]f̄ ua 1knM84G)#+.ɲ*7q[g]ԗÃê{ax鬤=~18bêau;cʊke_,ztuկbê{0 endstream endobj 193 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 194 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 192 0 R /Group 193 0 R >> endobj 195 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 196 0 obj <> endobj 197 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 195 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 198 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 199 0 obj <> endobj 200 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 198 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 201 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 202 0 obj <> endobj 203 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 201 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 204 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 205 0 obj <> endobj 206 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 204 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 207 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 208 0 obj <> endobj 209 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 207 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 210 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 211 0 obj <> endobj 212 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 210 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 213 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 214 0 obj <> endobj 215 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 213 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 216 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 217 0 obj <> endobj 218 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 216 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 219 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 220 0 obj <> endobj 221 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 219 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 222 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 223 0 obj <> endobj 224 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 222 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 225 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 226 0 obj <> endobj 227 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 225 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 228 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 229 0 obj <> endobj 230 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 228 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 231 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 232 0 obj <> endobj 233 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 231 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 234 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 235 0 obj <> endobj 236 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 234 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 237 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 238 0 obj <> endobj 239 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 237 0 R /Length 17181 /Filter /FlateDecode >> stream xɎu<܂w^^}FZ7}A/H$:d@UOK2tLFۼs_wӿ|=k_?c+2zg7#~Oo]R2}0@5' y(47@tm"ܧ_O2/?CZ_~KcY#?<~e?sn^(~Zl\ O \|A\ܿ^?lJӯ_NX2`c&wo3<~} 5,R 7yiPxPX1O?e!k3O/Tޙ{1 rqԜ3V?k=fl9~‡ǍIq?xB/;?A >sK']ks5?s" FϷ.fyщڧmv׻3-wiɋ gE}j<4^*uc'q,10etQ. 7N7@;>Zx|5Z8/拲^[˓0y|ҼfkNj 5|45';y8T? ǽ j .D_oIZױ *}q<:o$* >wG ӐSQ7/*FHbYFGn.:I< 4{ԄdoXFeX>W)7IXJh[u"/δrs !7 IEwCv(snTmM~A:eySn*5lI]Z?HF>-B%P|eoB˔9&X )m]CVKdY RzøI AtPG>)>[r.ct!|Osy@ *R $Pc@E^d˗4 I&hY@/O0NىH:"K.>ԵhKwwE9.1M{!:0zGgFyA .jH$R'2[5 ʴX~+y!2oxpds8sJTSs "{dl\~: n)VAo7HύHUR55<ʤtz3?XTJAȐkua|_% . {Q٠JE$m_&+c*qN_ǚ&-^m7ۉOS7*T-c u.D.C fݏ`\R8A;tqş6;^Dǭ8w͂hEJ9UZiIeq<:\ ,[# "Afv2zo7)_,/Fc҃YF7lhC?+T(WscX{Po!FTf{~^ey_ySm^ 7H\h r)Fh0I e3l_F>5NjΕ e,m$JD$b*Ada8W2H >pʼT3Hmy7Ԝ\!'^ȼu~" ]$Ni pᒞ5QP4¼g~&PD۾*5FLNl #7DH⤘O}@QB hY-0=5Ix1Vd( ˺[6T<6 kb_k.\q "QM/x!յaVumzX<l^M__d< L)mmpWq{F2(h$e5v>TG ^T8NۼCڳA3aNfh+B o4TNo7l.HCIgEϧEF)g cc]Bzk*Ùڀ|6mcG˼zү' $/2n.Ӕk, R de{*ZAQ8Y M/%:$hԁFrh $`9q"Xݜ3ϛvD8H5B>9BMr78;/ıu)/YRvuKh;,/8+ב=e=,XYyP,&gM̡qYZE8y0HS/PIF,$vMWƇH\ZmiEfyE Q?WEENe=' fL>\MB3HAyˊw~'R<".l ݵ?$g{-%I&kOzc;i QӴLfp<3~4"%ߤ 2lWh47#"C/Ƭhدyt xkhf,˒lzY 3+3D'ԴHApg" ; ^]tW7+Ò3k%쨕x.Z'1/{CZmȤ5JV\.cXc*l=aUҦeuZE`"e\qu3QN5d$:F4C ޽!kY 0&m ĂP(%)y$#;¯l鸋Lq LA^5n G.JeN~d'XƤ hlwq [{vDie6!i+=$ʓ(O<$?*Q8?'~*~W{{{{^"o@⢸ A"E1ֻ,뿓ҲWQax_0{$Z;a(b/yTF˴܋ky_SP`Ijw\+-qz+tn6f~|"P>?Yn2GҺ!\ ;5s1')]seSN6HV(H,4*3W#l R 8qGH:-B$$.ӉkK>F͉h^ ҳ "y)=zΨ2}-{uDF,X6q 7Бy'ca ;W默`Pc"̲*.ߛEO*IH@S0F9p\IB:Qvs)ofLf"K8l(9Jʛ_]"Suĝ0n E85ԐȟVOaиܞΝWdJ |ڨ5o\Uï35SFDG'"Uً.&c|x.nʤ9Dy"@6 Ҽ)L^R*īA^k_fkc롺f+ $$ 1ݲ5a>s#r ,Q1gcY__d&Gj3[G^6Do;z㓀OG3( ]lź d^ +edg]H W #y"]HӰ]]v!MYҘ3 HOkMN/PteXJ?an(T,Ւ]VN3:腴 цUj~S=6>:ڋ"("("("X'pn!gcrvti7~2ʐeJ_AtC'3zy-AE׋vK s'Ą\!8=C/03e O ?^OgwJ*Ghc>e` '2";u] ꟭gS)"G(ѰB hʘnF)Nl&ed`%ֈpYatiD,Vz'= 6e6P@V1R.4ֵe Or?&oV# 9H[qFk?zm#o @ SlQv.Eҩ"ʚ u5Db^ iO3xYY_78.-;8 K@:A;Fy4Vp"Ԏ`&IxVq9 %ϱ;hL:ޢ[HDIߠ힂]h|C=ScMKDQM;;F-5ʹw xRy+a*{xTQ02vZ73O~HNl1b"m|qLZd <$%#㽫v67/2T^(Hxͷz8eڱQB%p֬) P'no[ew+N^eƣϜuCi׻-@V# " j Z Z]btw6H] Dx9AB!.+G=pg,}Q|8jG C"5Qݰ7|L qO U?rM=jcJ/W?q73S?Fu#$8>7stg@y^ ~NZAv"PBWoM(v!9LAkM['Hä3,Iu:B\̄kzX3p2g:+GAc*2pDsE v*MN ҜG _ OPV%B.w-{#jcd *x<զ A #.{iSϠޗ}",\1 ̚+ۑ %-̵E,(/ ƅbpCwIFۮD ^K\~/q%.嗸OI\!-D/Y #Z ' !q4){hN茚oo! mK5Z@< sNnJԳЈt$7/Ϊ{21D#2?NC'Mx1xYgJb/ޏiAEk/1|(ԗ$ӫ.FO%}t'3l'"mng  7O/zTם Tnx0j6|#|adIuAS|B7c$Dԡa\ϓi3i/1`4.T(J;f7L%q3&5qV%+AfhD4j&8m]3Cs&R< y6!>!G =]"ȊŐƑ2 M#[`ʌ9Qj l9M1\u.nAW.~l9KH4nB<0בi3@:q%cmux^w gUF*FXZG,+ qIF-JEg-,NTf˃URL62ݫge:]oLgshȪ\hogj:3hN!*J6|H\9ۜPK%":#+Djb1~ٸNDK*vFڛbimMk42kmi15 UU1ˤM& t-vS}hf1HL3nt})Gu VnnhQET"u`ׇ7PؠUf)#Djflpy eW]Hn`Cl˨47@HB@+Ns OTq$IB{m=~p/ߝ?Dz5Qwy Z{"(.2e=KfhcβLNtH<- akT趒59IV!>HgOHꜫy" 6"̦ o pϑcq3Ͽfm~jOY.~|B(^!+xBWoW*5xqxqh<ٜ8өA$9 kxwn3\t%D$YCR Ygj# RHҼp! gגB$A&Ҭfr"HhʶGge:$K}dS@9!R$B:0U6 #t]H*LEi:vKS5ah L m7I"qD G'_Tx{U r!ݑº1EI4j:) $eI%3jy8KE2tScrAu'tq{YͲ刡Jea6WUz"&!E=8ٝ8e; &'^huyI&\f$7 Ҧrz. o7[M@Gc@=eHVl!˜a#18(dI.":C2S؍^q'_h5q|=t*.ؐ2dAzAwhYOc ҧ, +ċA:.s(|ﭖ3x!5cUg9xZ@(l Ѝw3t"UbL4ʬz ,R\-ƭ|BuEWh_KU瑟~_~a9999o_ѱkukZǼ1u^WZ^U˫jyU-UWP!K ^ ^ ^(G  ]WgU;C3`2<kxA <0S1gA y2 &bvy $cc׹'RcVu*7B$üc.)ILrh!js4AHv4cB|GXKM~Sߔ7M~Sߔ7M~SmTEwoJkNSTǽY)v[kokoƿ`>[OI|||||cuRA~}si|}½T""i aĭt*.p:"'"+6H@(P5;:=F[i.qj|}MGșA{NG/ PWHLrGެQvyhe%1j7ǩr"o}e[7coTh9# iAlNq5J 峊{3ufsB""ZFM2'knƉD),]ԉW9uB?=ѽtN҉_:K'~/tNN3h ?'VF?p |C7_i g V"A&dR!-^6W ) K'! S+Kdaajq9X*#^xHݲL ^qk2f WfY {W,qe1 0m#f뷛i<^Q},9#dkFQk LHlٳnR-."hfq3&\q*q݈is ^E1#!bk"Ͱ9,A 'BffХrBG5<i:?;({ w&Gx$VoߕhE=c%U\?aYDq ]2[[yp Ge:V( q1`Q-IxD,2B XU2] Ӊ"s>P1 `πt~zY9i-։.C%I{>h.DG649oygDjҴ8\d^H:D#6cq^R/K;Z$w(HzZH2%;6^n7?e@{s-9"f oR]fóNЃ;W HW׆=1@yOq|ߦ-2leâZ~q-x":΀wYbDǦauJ~yP> R)ai=r|Kr4m~ R :+}l1kpWpu'9"p,;8_7B)9em(s>g*fRK̽HlMZR8H2<<ڙL.etl@W]rVU bm h9)D=^_ǹA!%YIZy"UBɻ /ڞ+9q ^ϻKϻKϻ۽ϋ|s87 (;!&pC}}P8|7E$XƇ"Iϰ$f2`B݈dr͙R1q f' c_VJ=fQ~Ky4 '[%y#i^ta<>P9'*<*Xn7v\vᰉqшYptz5/̎ϹϹϹē+}e 2W`_+}e.e!{n&aԃҏd* $ wNMzk7y  B$fF;> Ϊ 4^g|f~y=<$z!;z.녢d? g~.4t? t<٤={ +!y<5Ԓ,<6K;jƅÿNF"jKECc(#5HA(n2 dP%9'R[ϠD(Ӌ"c 9/{;< 7z H6(",JH$u<ˁ"ܰ +HEivCmb`(Bwƒ8cSǔrtHw&qLg}n|?E*Ծb~݈NjhFӌ ג =WܙwT8 i3lV1! bo 4[ 8y"6zpDNzlٷI ֚&)jO\gsO٩~k_h^¯E|Sx,7@ˋ%?ZcJ2T2ˌ8޿-EdK8k-ǎY6I ]t|=-qL rkWX 98SH @oԽo|oQϞh[rZ=dBq<}~<)ڶfxevA.=1sgCEa/#OF[[ŏ(u>'|>dE*@ ?9,a҂?'a ]!znNbû bm^&:Rۚ*'J| s:EA^dPB8.=xj/eB\jZRd*%#~"U¸K? 25My}?>III'*r$R IqDYgD?13l8ƉFZz& f&a㨏0 ǹǀɨߠ#eśkՔm26DuF)ϡeUtrf?ß| jJ)+dbP梅ɠˏ>6W|eyQn6(.`4w> 8K=e0&ob>|'8\屪 AaC>1hà"X>LESd>yMe c! ٤$.60kՠF_NrX_\w>|1 %6X&U 6Bh(;TiMR%A7H`׭T7h J{uAذזuiXV?4yA&8t^Fj8/뷟EǿKL9EϋZ9Xer%YeZA~Yn W`&0#b`뇬FˉOWN=8{Z>ma;ZpB4 g.RF/@Pm0۠m$Z,?LSB]4b  +[#䑥b1G Xг"Aa$9$Cy2h@9 /?UjB۶k/"cGi2?}EuMt(_e""E籠  qKgt$f1|֘4}"B< 'F6@j3eNc"A_HGaj=验ug$Ȼ+_hMFYT; " alM5(@^ 롪OD$ żZOa،K4 (AMIz n>QDn(TM1@ף$.)zA;+Ȇؠ %FC7!V".>Q KǕ;P˅@ YRfs(fၶ<\lr!|6bv89) 2rN Bȸ@sm'1 ~Ss"a*X,x/?R>+ BVbeYш UH $B'(A^5C@wg$3yKFtT0*Qp`?QT@3cr.̓2kje8ODj9摰afh2I5]Ѡs9+mN,ZSe_F5MX(Së[ӘA V.jbS u"T h$MsqܖoP\ ɩ$&PXfK*oTU.'jq}2t&ք}S_uW ^oK endstream endobj 240 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 241 0 obj <> endobj 242 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 240 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 243 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 244 0 obj <> endobj 245 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 243 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 246 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 247 0 obj <> endobj 248 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 246 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 249 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 250 0 obj <> endobj 251 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 249 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 252 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 253 0 obj <> endobj 254 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 252 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 255 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 256 0 obj <> endobj 257 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 255 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 258 0 obj << /Length 6160 /Filter /FlateDecode >> stream x]]%7n}_ , x&@؇ 06 g#\ުa+Q<3Ǿۧ_=WO?OO??we?hO(4Ĺt^wO_})S~=w4ZUpW0u7‰uOO'9ǯ5~9GML6sǧaE5/A/秒돕Jj*?=~Ֆz/rTru~JnHjY8ro$I5+[z!DF_3~9&s5`m f~N1/ӵRe p h@AN'ځS0`)-(0K8 3T>9t]Sf1TIUA1 T::!cB .*=B1Y&*8QU1pl488gWVgQ@zX,?DCj11DyĎ_U[eQLLTw8f'.xt~FO-2QV`DہD*P:RFAi55Pqa)+QV*R KQa,ԁR!jcQ"/m%m&d vH䎕v I)0SU!z ܉uq`ū' \<2'T .SY/xd) +!]:m Dݍ+滋aF.V VxgLt`[i $.g{ ui'.fZ|6T;aSߔIX]8MÒ}@/Ջg+iŏUb=rZfct4Rj oX4f \[+ڿu7 P# A5#u`8Aau0]FZ,t: u=͢Vq]KXj_9."KqMa\8YMyWE6"U3л ;r[˵]JD(=(LX +zkb6?ك&tW:!AUJPrlr@5qT7CIpGX}W6:&H-x^ü7 8o*!0VRQ+I@]/dӌ3)t0r ,xZ,abs^e2F%{vGFÚAHX3gW"a0%qOi.HTb-#jN:"+`Lg-Y1W"qI dBY T\\[ s@#+v m֎DiZqNT|Eq`4k! jٔ j`uFdoeP3{uraij‶dE<+ y zp@ "V Q[y;( Ew~J|;6)gm4> C;#-wMA,v1{uAAi #Iݬf(=&aQv64 =cIj`ڡg%czfc:2ݙ?bKRC' #W`9$ Oa\l/qC*UNd Rݴ1vU-bQVV2Yv-a Z품Yep\kiPL ,Ь; 6ZQ"(ԐVJ=x)1!fyQԌb7 łB g^RӁ:]1\P-kC@-и'/~AFFi C&^;,3c ˦#&7ih-΁9<,%ڕ(aݽEz@cwÕ KuځP:@ V X$ NPH"BBE(=/4 `|c8=Ku$H[yXy]gaBe"hE2հcRiGLUqE7h\k1: 0| @w˶u\{NAXyi= h||%] Kugɻd PRRU&d4O4 ,`‘[WT%rٍ3S"c( §E.hq%eN4 27kҁFA0| [b5.Z*dh_@a\8ڭApQ w 8urHL8L^pNm jWwc;IU(>.< v54NtXRծAwacgjWRw,"iv(ϤͿ(đI 5 (=mW|#O8,~$G}ȂO* *dL>4[,-T)c4Lm(߫q@$>V@t_ EbX&@/SPO=\e4DJ3q91#`Oq:d/t1hkB`d-YCN+0㷭#n7v@wc-PLbBC,,X$bC 1R,)fAYU1YlrH/a״|_0@KP LmcX`)iɨd5#ORym CʛίdTüz0/#`@b%."e!I^ :+R!PTJ\^#vu=IfUhf4v[Z˄Mt (=kCcx-(fSZ&51ݰVS03mM< q\ق! Lj0Rwi~ouCP`CV\ZFwvw :w.#}A;$8_ur1U($[ i( XZCTWrO1rVcIE2+&@1|%ԊJjC{ BGA;EFZ :7VAsCFݑ^`ˤm΂4i(81&+[](vǹו5sX0ݙq? q4g\> ռb4X0 Ib:JtۂG]O[.V ڂj0'ƅ=0ܑ[kEw  #WuG! ["6BcZ_#ĥM8^+TxXܬz OYR塃,҄&axIGAwFff1#Ml1#Y#5Ze^ d_hbk^o(F/]hz7 &2 pATĒ/1jD] E1Ŀ\,r:? PF\w[{sK@[0m߀opOA뎢4/,qX.]7IwqI\Kx7O:'~#7n2X\7zn2eIaqNr1G݄Lw^J_KZV:׵TW=qOPs5hl/Z_DZ_E[/^'.shBJֳh6~Mk7 'shMe.$}$Z[y.sMMq!X~!EJ|j9Ȏ=umTMyl/k~9בdb5ᇧ3@rK7:mgrG0r_s1~`?b)G ѩsP׃91TèH,|p(<= D:Z/Ҏ/a9xxCRӃ/Ĕ4)ohzTjmm"jnE|Sr:?\]ME+0rc\ ?<(:Qs-H0r/4=]O9e .Vn'JF` `~xQ.zv\Uru|9^/Lǧ2go` endstream endobj 259 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 260 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 258 0 R /Group 259 0 R >> endobj 261 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 262 0 obj <> endobj 263 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 261 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 264 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 265 0 obj <> endobj 266 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 264 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 267 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 268 0 obj <> endobj 269 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 267 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 270 0 obj << /Type /XObject /Subtype /Image /Width 607 /Height 451 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 318 /Filter /FlateDecode >> stream x10 1 LҢT Ÿ'{as5IVzdh}<%jA endstream endobj 271 0 obj << /Type /XObject /Subtype /Image /Width 607 /Height 451 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 272 0 R /Filter /DCTDecode /SMask 270 0 R >> stream JFIFC     C  _" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?𷅼7 x; vu (R4E*t_((((((((((((((((((((((((((((((((((((+?/#s E^4mu6)qo)GUa ܢ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (_T߲w˜-?HA T2ڢܲw(Px,9 Ewn/77e䖯qlğ* q޿o?Ƃ&n}yTRT~EK*"43#?_O,Rg- KǻpEv}zW|RA z/ -$K_:ZEiӛ\zܪ?/0qwj2z!&/e.+Y ;!~>|998Y5=FW'{W >7|'٣ swb߽=~2'E2?z2!U9+_s:( ( ( ( ( ( +K|ϊ>?t6a)#z_jM>6qr">dy`=E}My{g+x%ɮ5W7e-v>wH#Ufcp^3f=8^x4٫+7;D?ďơ &]G?FG5V_qO״#K>⍥l&Nظ߱LBh $9^W1z>&|:m8Γ nJuR{6vc_Sck7_xᏋ/4JZBȠddCX}+TSfܓ^OB.ynO?y%j 'c xuH$6^ [ny= z~2\86_֏C"$OɅQ\@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWm]idOl77 E_KO>7pq|3[K䞿r~jڭUHU~,*c'ZZXDX:|Smn7W^n۠hO) bVW=HF\dFtR%(4}3Xu5)Hܐ]:&tЮVLX^ 񯄾!xvž ݦ.B:y+&߅zoL|RL5jLܒ׊;2 cz Wqѕ|*u7W駒^?K^+?f{3}Tj-Ï:k|^/ %CF~dž#Z-SAEW9QEQExke_~(MSptH K1r<-up>SZ.\f7 _%-}_>-|;3i|e+6U\y[r4iuA5g+Y㇟?l֖rV+_ξ`Mp_>j'Nj$ĿI}rr-,6E3cpp\3S~[M~ (#邊((((((((((((((((((((((('=>,|<־ޝ-*H?SVtNERNkfEJpMj53Su߆=>/P5)t/${d{T =+?,/Ko\>*e aMd>OzjZ31g߯Uw?|JOKӧެ\Q8DzW‹Qz՘N?:VbozF-j,*mj+)#h65[?Y{=B#ގEÂׂً1?hmȋYҚLQ*A3/Eÿ ;Ynio;*7K/E.u__Zo +p !3>rE~?\v)}j;(}U}WEf|?{Jp4_{wǶEQE߶ou~^ MuHh{Cq(➃I^x11@tp` K?bMk˥8v7gjʇFzpތ+572^xD:LF{r 0qc8nӕ2oٯ-գ>gq?.wr]<~vUe=jiJU{!SګJzF2dªV&nZS[DEYw_;ˆcj"u?N|`?"INM}?im?|]m]8f2JGF3ּN*e#1/u}{96hae]j~}i+14P +BJ(C ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (> n9<;) $.<~{@܊<i?l4MP/6^3;\/~_?g[)EMLjT.(1*_z6}*M*/V!nrGD~b'Sx޲4:|qKĐxC5mFEو?fO% j7c"3J0d>^:QO/Qߋ~Ku޿{ai{?&qf_|R>/{=_M0:WUy%TF2pssmZpw \T:$v^O"`|7[XX8vUPn+iJRrwl-%eQEQEݝk%s22 A(64>K>".ưvItdu/|;į_>Ү&&sEȾN;gI7D/5M7OM7qƾ+ۇ M?o|,&Ky6&6vS\ļU/u-.?,N=WV_Y.WJW%|ub۹ 5ZwM#w=kf~5&k$[w7Y8b ?kV?%x0u8l~|YpbHI *E)NOO袊m?| ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (>kzMs%Q:^aw ?#"lܯڏůƟ.uOdgZ/_K71ȥXG ?*_(~1g(O8^JŻ !~j?qT#z eo֧AY4ZgǍw_H FGѭ%F?f -:[[+(Y+׺DgdU4_0πs''UQ|h8 A^DaҩOu{^tTc!,30wPt5v}uEs !Z|Oc|KEVm$^j $f*ڭ*jʜ՜[On}:MNף( ~:kIڣGAȖoC FTuOTps%veaT]jQݷdz{2b$g;07?q SZO2 '9Bi Ia%zO7LQ?=kד5xZ;Ҥ(GyގXǠ{>2~ѺK=nZJv88cܚއޡy+<. 4 J֓$WNJGMv$s62g<ԓI#T#<='dOZLИRvB9d<]WǞ1ҼBd5(,P I\"+:9kO\AXkH Ƽc8L&=\/$gxWbq(wv(OŠ((((((((((((((((((((((((( ?ƣ:#_ xK"hpLtހ?ˎ|ss{f.9[Y;&'H?_|Q>y&Mr-ѯ4]S8YgH?}X7gVPn|_rƋld8@@dk|476Wiyo$2ؒ)P) +/2{zvg7.u,U7 yךйI1|r{Ո5r}yS߁6l+Hk^-s漇#bus}'g~9SLw?V;XVKX /ҏᇹ߱}ϕW=|e ֽs 1c[HBM'q^%"j?g(J*j[8, _?9Nyt+rpmh7P|^$?'Fxú41H NA۟´)|eg<9/SjÒ&sxN#fܯ'Y1 dy[A_QbɎxCx BM4q cQS$KI$kbq>q,\.[|ޭ dT{+.O%AEWQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW_V/ 1q3@|e;)u-* %Τڟno"R8мT  ;>>?3Mz,dD Q{p{R~m1ѷ+u> ''P%[uIvn=I*dIڥI=qzLߎ~!gŸZ |OG}^(u_F?|u}g篙}_=x׋D5V~fs.?-u_ CS~`:NJ ?J^RO{ _>SkM-% xMҘ.d' %XJ?g#,1MGSz\>Enj5&FUL1NX{*ڋ_|[ tO_K?_tbI6=|O][HH~K]ᾈ.y'C/7%MnfTֺo&Fަk[;y]c"+|];|u6bx ?G|-O#M+ı=ɦ*QHn~~wRi(M@m7R7&yfyI^٨Q5I '6-np A{*'y=EEu /BмC6[(eXb9,;y_B UW^]VGl.I ˰dWZ_$gQsOo+mds%7/>QE؅Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@MuVSys&8*X{.GҿOU~SoaepH{'䔎 F9F+_g~lJuFEN7)_EޥI=ԫ/|5GJEŖt55-ݎS\s?/5]}mj}0?iI틘dxZm{i}ZѵymZW?IyX0U\:åu|[M:${G|-'vy*co?ٷ|>!J߈#𯁬7²[N'|G\54Pz؟wu|/L[z/UU& ~) _k2_O|;KI4PqMis4D+KTm/FTƓj$y?UMy1Q<"'nu9Y!N >W6F薷^ͅ_f-_Λ0|;x'KWS:WƊ4M&$~=Yk14+(((((((((((((((((((((((((((a4mo÷V='1 ¿'K),N0;x袿>ώ&P5 $`ݓ e|zg~KSRaM_ݗ'0㡩Rj{0=k A4ˋ/HRW?=f#CWe/8Kk0ޗ+1zKɦHXSdc?tn-͉ksþ#_G :C=B삹a({_|T,\6pG>X|Di*.UQ^oDjM7'Kwuk/}!~֗xwX5>[KuʌUb *{VѴr]/\=i0'6 JƘDFgSQj'ޭ!7cam_ĭᮁ{wW 3$w` $_.XF4ȶ[XonDP? +,xMA0+ÂK?W1$8،zQT<^㳪xNwuI|G~e50yMLeEgY7I0+3ࢊ(((((((((((((((((((((((((((?g/~u/>l7j$s{H# z_zqZi[3F*֊di?iٿ: &/ao[ 4MJ{rWZfτ?${rwq626(360+:~?.|A~wbgǍF=$tڽ+kZ>Mnך)gSQjfj2qewHve`?QP}i+5/ J%_Zz_ HjjZ.d*Rc%`k躸EnK19Imм#33*$_J/V~?_>,-vilVn% : _k ?or2 -Ub?a%ad`1*}}_Ͼ G4,+zo} ZuXa/e}~z{wWbc].r(_" H2Uԣ GZ[9gَeavB Mvp|&nm+F:BDF^KhkkU5ewQ귱~e_Zi ~0|Ym][BHQ%>Dwerub+i}bi*dM4?JV.2[ɖzz˟z :^_}Bv:e,PkY8.RvK3JSU)bc/W/yl)G1YBO\T8PH7w5寊iKFMNqշ8u |8{?? )kK[e2;p2K&/쮌TZNe!}%ug_ y*ӢzJ^V+v}T? [ZFhZBHcNK3K1=롢kVjQ);m:tPRKd(Š(((((((((((((((((((((((((((((k_-ůFcIԕ,?pnbrEK|~Wl 9p؉v4p2.j!7Q c){<V>zjV J8a*RQXble7Rr6HЧ/ + (+j. >M'^mmf7Xkf:ƀ=1u*ժMj`g˝C7.Yf,K;t$z(((((( d_u-!Ƽ+ _[߲N-;[kʗBGcq__PGAO_wDͧ/Ti@ViZG*z7 ?Jt%j.qgqsѺPAMg> [6?'f"V*x \BH0< : ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( +Id^Tń4s:ťfF'I'5?i*O X}̖;7n@^1ӭ{xI7F"Ri53.eM.cր?Y?X5>)o' aki7﫟9Bm~6nP|4)2Xc*~~տQ?o x#Z~mkil4{yNn-"3NO\sf?ߴot'dd!9^'2qЌ_V"!GI}'; x+3sYY n;Q&CkT\&Rı#>վ1$D]KFv؟|+d]k4 "] 6$-(l??+0Ҵ뢀חٖCvJڀ9%ϊ_~x◊4b8ng-I@\iQx&[,ݡ֯j9(#~߱Gkw#i7ۖ8x_^wpЍJPg'>׿v-{Ec o/yɭ_Q?k?ޤ5 =7D_rϟC jzڧ\@CI| 3|Ӿ7/VU1v?w򷗸Ę2Al{{v|=-$о8<˽Y ?ddsr}קZ0Gw^?/Dᛓ揨Gp1E獽UƿT_j^8a$6EʒEg!yaWѾk>iVzΡg#C{ޒ֐ ĪA!r8+ s ?_kmrg [ċ13_=M>je0Nf o`%+ xw5=cR 纛;|\8   XB'|ggۆKM_L ;q?m{(|iL &qT?g!,O IF5kMWpJv1| 9>(+\-WBۆK#PIT83YOPONgiX'>~Ϛuwe#C{^$ `񼝹ׯ@~8M?|im@w[aܮAi 3pD>c؁__yZQ~opۄV6ȃhԾ*~=g*k~n!{5#0\h G k/# ]TL5->+V\[I?n (L2H$p1ojω>?:Ƒ`X0PfE9HʣpǪjfff:x|!4u=E~ &'Ij|< d (K5^O-K ~h  ۙجci\O' |O)g{;_OFƊ=([$2O+O<س1%I_?C{w _wt_ Y%@Ҡq AO@>*N KMX{" }a"P|/ ~.z}k!䧤9- ‚X1 |V=>xKӥ &-gK2H͒P&"$E :0eeb#?t~* G=.8HnmQi"C*3_/GYj QY{s}_'%M^'mK h]ϻ/1(O]~>zC,nm ?tPXEg,C&)fmҾl |QNwFι>^&[HRF/Y*03T?_ ,6|.U5h;]&Aoq [L*CB_ĝHotU] EH>`I+0^;@[&WG gbjW5a? GWn`VeO'߅>+ž$YuVn-,@T*F9<|c)?yIuZ|FwMmxo֟{ťxJ_R#18ÞJgI'*V?Z4zf9]2 9 ʇhqp8o&;>$jRq9uꢀ>M~rgc_WUkr.Bj?ke?Ngy<3?4,bm"+Km_M/i6Ŗv$6#8cPQdTO UF|r?Aci׺]b֠J$IV Gn Vo;Ugv6p=?ٺिCAjK{ARNr"'ْm^skCN3ݟGϽy_/~ޘ _-XeL9FsW#> _~-hfṵ+`@^ x*P1ğxZ/[;5;..$<+f?4Wϊn{_V 'm]61H-p$Pj 3@#uȯ;xTe͍Ԗ "1V5'_EyKt+չ]{u5p~T_|Uk}+UTf-։$Q~;OS|OLwM g_=Mʓ^7)x}|F5߂^0?FK-cW5[Dh2"0X d g8/N55?kPrbʢ%'Y^]j^廾yfr4řI$5?ÑGǚ^X*u$<3|' QF$mqQOҖ(((((((((((u\[Կq\_}&F;[~iK]A|7k vǷ1R޿N7hGO=P:f'iWRڙ x(m~Q@gSo绵ѭ~ryFG p2foŸ_dJO(=k|JwOO(!5_tЪ_<]o+f>BExd6ܟ.Z46J lwrK"Č2?~~M)R+BIL.a,9='kź/<{xGN4˧MC*2A(! Y_vFWҟfKrkL]gJKo(H@ g 9|!/e]R]f:cEh8w?Q Ҁ>s t18;0?f⾳xo~~h:iim|CqO5_(<e%|Ckn|edyT:X q$ kߴ_R$zݪhҹ-,$z+?-fYF2x׹&FGzW^%|C^S:UƟOo}er$T8e`zE~͟[߄|<|5Dk\tDմdb.23̟ۣQ t*Ŀ/fRf⾇^sRuk!?E_ ~Z |1E1=oPlXЌ2#P+Uw; S ~?? ~.jѬZ8xÇ $<.}>+ǎ$/.7$Sl+kKw=?ÿ+ k t"#"E&;Q e]C 3_ jZ|\i@УF_?^:Afӵ"頽r:z2VA"xm+]AKM/^!IĶ6ƒ̤2( wnd ~&7jzYٺT%_}le<#>u붯ikڼ)$HVbJmA8 |9o-xLsER5{r{T c€IP7*J\i>"{| 2V˿ =a>ieA=Nmeid`3=Kh|?|zRy_6:0$`z_[q\>_'֤MoNҁ@o?xX:q_UPi@v',2־IK؟ w_|W_+|1笺򵯏`3f?J2?f; W¿Xy-OК ڠ/_kE2|;߁>=χI{HئY$y${ 1ѽ/ _"8~l~%)_φ]hVd7Sj3+̐B`!r@[/?g?PA4o4ihtvC,142*'o? ᦥN^-bjWvK-0 UYGAS"?hb]BS>01bofHUX~ ~5Ux{nwԯ;)DtI&Y$n˹70`r71Y _?5~ukTİ# G\.$ j?si)<k "A1?ȓū\qmb-2徔׊u}F5 /,;aU@嘱7KO1`m_}k _֑He֧qE٘db6n/O ~YA_&-w< reWj|{qET~-|@/)#.pF;"䜒M}kh_j?h qk6YxRqIQ' H̟/į2|P4-3Uk<>ؓam=k'~#м_/xcTNmR$:WSA?j~91sg7NT";F'˝= $'AcZۢ';8sͩ'r1Hq|~EQEQEQEQEQEQEQEQEQEQERIKE ʰ!?>[ {S iz| %qGpNByd@v};>'MG횞y epR5$"$Ny{=QEW_oŸ6-ǽCE>!\qВE)Pkɕ$g5x{zgk[cq=ł$)brI2$ EW~OoV>&"utY2fQ8$ +(Oo/d~Vn[Q~`{LA?_onaNB! 7Ǧd#~@ &9g/ Oi7zx]eH,J=Ѹ ^E?r94,B8Ir}Ք)0>pHZ#ğoZܷR+9Kh ڕeM<2w>Mw~Οͯx GC$&)|GJܪUHڹ#M{Wο;~oźw>OFUpln_ ̹hӍ$ Ic?޽+duas?MsUqg,xomj] ˮr ܊2o7&bPj=)Ǧ~oi >_ [4{m:k G K`5ExI ?ޟWTe*A w+($ Ǟ/kח_Ks_Û{`hW7uI~`oܺ?l?[-JӜƤ޼SŸ>5w CX>V 9tJ(† q_W/ඥc:ՄE5dm]C]DpcO[.^MHPȘu @9<19"#['<[i|D۫MI.oǐI#=€Hí}ߤ:fhz& a#5UGtX}߼HKdgrA,IsҽB(((((((((((((((((((((((((((((((((((((*~>,lt1,(YoYQ#Q@ endstream endobj 272 0 obj 22398 endobj 273 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 274 0 obj <> endobj 275 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 273 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 276 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 277 0 obj <> endobj 278 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 276 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 279 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 280 0 obj <> endobj 281 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 279 0 R /Length 254 /Filter /FlateDecode >> stream xŔJ1 yi" t&\dugHן2 b}_0">{򯈄d)DRSTA_'fGP\7˒EE ~݁( ^Z\59R'IM':' D{^7CҺ}(6\s)I\7> endobj 283 0 obj <> endobj 284 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 282 0 R /Length 248 /Filter /FlateDecode >> stream xڽj! y@m&*t Բ2{7ӁY5w$g'`2bZ|AIV`]M,äQ_lJ6_/_(/&%z@\?tgiKNtV',kJ'g|/̛b1s:AP(Ws;EbI}拸%,rFVg2@b7쌿J8 endstream endobj 285 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 286 0 obj <> endobj 287 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 285 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 288 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 289 0 obj <> endobj 290 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 288 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 291 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 292 0 obj <> endobj 293 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 291 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 294 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 295 0 obj <> endobj 296 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 294 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 297 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 298 0 obj <> endobj 299 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 297 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 300 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 301 0 obj <> endobj 302 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 300 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 303 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 304 0 obj <> endobj 305 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 303 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 306 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 307 0 obj <> endobj 308 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 306 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 309 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 310 0 obj <> endobj 311 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 309 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 312 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 313 0 obj <> endobj 314 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 312 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 315 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 316 0 obj <> endobj 317 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 315 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 318 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 319 0 obj <> endobj 320 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 318 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 321 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 322 0 obj <> endobj 323 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 321 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 324 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 325 0 obj <> endobj 326 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 324 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 327 0 obj << /Length 3035 /Filter /FlateDecode >> stream x]_\; Oq+m;H \ZU-m83L2sjwu;{wv6/_O>}??}|z.ß,? }#D(?nju?-4?xW<gboO>oɉ{pyx<~oOuطGGLJ?=?*=Jwq?(?ZQd?Ǣc跇tnǙ+p쐇Q>nlӷ wPW!r.iKA̾.Hp'z*}f<2Ž+,qX(|Jq3!v(3q+  r8[p]0ЎEs> 3pTDdڦQΤ޾=<<"*(d2)u5GL?t.cH>Gƙ]e -Sr < M!~EɅ>Gƙž"8p(hM 6NZ:tv_yiXDIt|Ğ^(/3%bq! JQL/=OQqTg%!J# I?4>mbOϕ؋ݏ%}`G1X)1hefZ/J /'-{-%]?-0?Ve gR~^hkL؟?(/B_Z?? ZE$N!H C'XVBr  DmdÊd)#eHO &%,jKl\tģ QƐI: 5GD&@q'ljks%av(3Ҹ2HPbԫz`&Grm͊grcM QW|?.;?Z&L>@5&AfT]i*kzRLHJ~Gq0ʌ+< _OTrdT\[@?Nrzܙ> CGqu<㊗ES.֌`gzW(3T&\.*鎋S+lj@b :6ye•gp]DzqҒ8ӅCFqu] 2k endstream endobj 328 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 329 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 327 0 R /Group 328 0 R >> endobj 330 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 331 0 obj <> endobj 332 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 330 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 333 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 334 0 obj <> endobj 335 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 333 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 336 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 337 0 obj <> endobj 338 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 336 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 339 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 340 0 obj <> endobj 341 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 339 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 342 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 343 0 obj <> endobj 344 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 342 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 345 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 346 0 obj <> endobj 347 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 345 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 348 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 349 0 obj <> endobj 350 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 348 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 351 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 352 0 obj <> endobj 353 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 351 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 354 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 355 0 obj <> endobj 356 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 354 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 357 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 358 0 obj <> endobj 359 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 357 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 360 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 361 0 obj <> endobj 362 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 360 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 363 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 364 0 obj <> endobj 365 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 363 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 366 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 367 0 obj <> endobj 368 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 366 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 369 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 370 0 obj <> endobj 371 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 369 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 372 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 373 0 obj <> endobj 374 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 372 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 375 0 obj << /Type /XObject /Subtype /Image /Width 772 /Height 573 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 489 /Filter /FlateDecode >> stream xA 1 A"-M<a%n32l v% |5"lz' z@ endstream endobj 376 0 obj << /Type /XObject /Subtype /Image /Width 772 /Height 573 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 377 0 R /Filter /DCTDecode /SMask 375 0 R >> stream JFIFC     C  =" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{ <|6mkA,ct6a*"" ٢(((((((((((((((((((((((((((((((((((((((((((((((?O?؏|H07ŚXօ ʅr@.^EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEAjnk:677(eOLW?o{A??gìAKw#?bCֳ/xGRx"MC b 8>#_pngn}a VߢڻOxӍLl|ytw쯵Sm}zv? HEUQ #}I5s@~Z<%[+^_h[QDWͱqV~.NOҷ#Gk~oTgl]!G9-_SeOO xV\'_ev+_1a:f>p9?gMҗx7;#q稪.KV{gމh~&"|9ZλYcqI7jCUeTeݹ9?ߌ{0"  hO&sBAzHs?5svsN J{|2~xc..jjgW7j . &ïԌc_WtEKt՚3֣R^;AEVFEPEPEPEPEPEcI'pu)q|+u'5f%+|+⿎Rw,YZx_J||8nlq tWr=7ܗySpS]#_?I.~[&tʻͺq ys+OZO3zːzD}¨v#붿22a4{@W2*x~ ϕļAZ\TIYX|7~A?CEB}¼8P~kC9\hMklu(^ zHqz H  St$Ad8R= |xoIKMQ[(g${v&1ui7K{vz?-j+ODB~Ůp@uS>C_iTVT(֍4B5R髧 (,(((((((((((((((((((((((((((((((CEpx ^w/D=S}9ug |y͵hڔrhKV:A:~5qXXNق+|[LL'NK^0a>WUGϖ"<}OzhOǵOP_§V5_xz"y_۾/,n)2kٓ 5i <x%A4KÏVLM|CAkθ{)Ϩ{<]4I-$k)3,>v]V~|-]{9}Aw*iϊwM\]k cg~Ӟ5[dTЮd}H_Q8Pez`تR+/GuQE|QEPEPEPEGuukcm%p Y\*Ğÿ7Yn"]_xG[`zi1<2 WmKwsa&^o']wiLZ߳ψP\YGw|_3c{nM %E#_~BQ Cw4?'MT+مQ$ev`i:pV=%YI|՟ɟxѥkr^XȺՄV#YC+I"_֧VUb#g54MYDˑ&+Cq ~jã)<yz&ȩѱjNX8M&=ͩԝ)٭S[W>/NTpXxOjaq΋_>"x_l|wY->`ʇч)z_H<%$ L=602*2yʰAxEd5+ O>σT^h-wk(>>(*CPl&5Kȭi'g $j v 4 :o.^[ NNHU^f<5L4QK{._gY<.*QruokO7o [exF J\\+&~wg{J'5ON &G h;y36%/R O?WV$"g";Ts Vs6@vKҫJi2_[gY_~/kv[ۉ-˯X?=;Wok?dYYZ!Y dl"%Ǩ>$gO(Ӧ:ϑz?z}+39—W¾~L(O萢((((((((((((((((((((((((((((((((~MCᇃ~%n<3Zy@doPOBq񯸫*?71m6{+9R1#&rqV5=ŘUU7_Z j-޿2"-ڧFUPY2Řj6ZqJ8䋉f6S`:|M}r.=FX۴H}AGþ巶uk+|i$+"gӔm٧gFkpѺFE䞘QEQEQEQEyY|uo=֚%%gS*хb<I]bq8|VbmH$RޙEԼ5*F q.1^9NG5|}7[reNN| uU9_:HF$⡕ h J8^FFPߥj WkuL H(1_?C|i񟈊Zxf(3eVQ._N-_SÚ^φc/攟o(((((((((((((((((((((((((((((((((mco4L#m;i5c7'g].4^:d?ʳZO)ۏ7a1KMzT,g|}%¼"7UcENޗ&XY`3y-a&ZҬ#dbݳ㒻9Qn76yAҳh]Ǒg|Q1Y_Mw|xYp2Z %ϑO3P]X]Ÿ-6Gդ$i`G8_J'߉#g|A\^HdV=Y$zܲnʲMGO6]kYoie^oخTNjj'νďj_ҖI=nHvU|)PHⴊ!vT.ݿ:t]V~ #$dBR㯕5kJ asM[E4l83uUuʿԣӼ# ԤnQ_,}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE`~Ot6ő5ͧ72}Ll)-<,ȥd!Q_?Q_&߈> kw^:FPmc-&Qɷ#t<O^%˯]\=o{ݮ>RpK}6}~bG8*USX2RTRG52Kk6:/"hjĪk-&Mwz\͏O2AJ7>G./bo}9}?kf?`M/ԯ̨sN}F' cctCcqgU?7W~Zyۂ>"W1W]ş ks^F#\qȟź#z_+B}ڌ/U+ OY?C?iMެ텰դ'(/_6wrLs_~~ZGZA}3lU~{<=}[52v%~7X:OkeWn粀s7Q_?+jO*>xŒjYC2Ojє¤ن#kd bK ٮF_GĶHGM'Q_/& ~qi/8WdvՂNkfu^aNm&grnϾLߊ4GUSiVony,yO5H~?i{-bxm8se1v'$Ӫ gƽqc&w6mc?_ =o:C6n~ ClzG䦾Q{Ͻy03k1F?TO+?uA9-qx''홢?妕/KW};.ngu?J뢟υ'ec+r|?¿+k>52jZK -#?$23p:>2x/ #ⷁ WM#,B\G|uG\WDً݊DF蛣$p}$YVp4*Z+7=C.g8(bhWg;W7 +Z5`!i/!bqE~ ^|MWVmM4p:QQ%d (4 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (2> xDomc'4]6k$.q~|Q/,2j:-ݐ!Upv ~^"OUm$+75[M00=4 !_ОePW$ˑ)7QYfp)3_-+R+UU_4~Zn vJN0Z7~{L]d?H%$[5S_}Tjٴ_o?/3y=Ο6yn7ks͏a5$|-*ڵE}tԯ̈́OGZG Tᮾ2FU]9^%E>Oai'\\٧@RKqe4/?'/̫*-8_U O>$ϓV#iW!1 ߯>3_ۆ?: }zn*2<zn^ 8ocZԟ} Zӟ=?osky;5?/|&s[<ܷ>4$C7Rm1\7{ ̢p_tR>g3fUw&NeM2P=4rkѲ8nZOʚ\5ϽRBr$gi')'MDg5?Tm'Z(Z ||K8뚆A";18s_{G, lk !^MV:c2f3ڋy}gpe_\CK !Kduepv$kG Y5owC<0:?28v9`}2?JV 7R:SO?H3obץ[GU^ƥY=G&YW֫,4 TReѩOQUNzR>gK w[s|6ɟXCUćJ$)*iݿudV|CGN_r[PLhd8933Z_xx^Rwr}ᲂ#vψ|53oؤ>mf5pn-WQ4{8LRӮޞ/'LcnUf<#73ڡ(3UBWCƔyv'{ n 4֐5ʚdEH_Ҙ=ri''T-g?FMi*'Hl{WGF_,>)𰹌*OZ#ڇ.|_`e@:Ɠ:\B_VsFM$Μ %SJ)}梊+x ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (<7?ǿg -!-uDW(vF*#_w^Q.fR&x_RɩhFHfcAF@ k3tVjsiZK?DpW<1Q%RozS,HUYt5.#- )BzA)0R;DҜ%j } 8K)r!xgċY][H?6 3K{Vu)%V*9-֤Ϡ}qZ5q߇)I ]鋮iQjZIMi;%_ca=8UiNsKjϳИu!{_zVG1)LƘ+4F]zip;ը{HM1ƛңisީ$t=.|S\|O-a&IҹjV% ̞U˻2I= -O.~~Mx}Kg5m2m%O64aaW4֯܏W[gx$i$tF~%4ǯ2"z678H qNA {5VSN{Ҳ־n:aj=gĶGG6rBݸ;rS=E]kp뷶BArO_$߇w/ z~òPeGny,y$ &6"Z6ݗMDI ׎7P?˭s %տVp[(eYWhhOEW W~4jfj&a5 խe$E$22AECW ~ ?σL0[ iTp :veO8M/V'x?=vm jGٯ%Ӫt/i Ws4=ׂ#UeՅ9P{k W%NS?eNn2VktDSLõ@eM4U؋4ަFC֘{杅vHzˆc-may%jYIjAxƷ?jm3DFY<#:p:}|\?s8t_jOW_uiMf9-aEwo&E^AIB)2o7º}FOOX#+ٜsPiniiE6V(aUTpJqSK_H{y~VKcr ' GWOD/;+x(((((((((((((((((((((((((((((((((((((+ǿ< K> ; kJ\\X6,mpz،tT5865Oɓ8Bfπh!o*2Y$t;OlamooDUQv5WͶϷI%dQE!mD~_jM thPn|\9Wg*{_|wS&U"qhhGe JB!N"Ʉ$h,bi{%~x >ܽg?LMZoZ7|~x89hx՘WԿ3+xMK$#?e녷 >H5?o!5{o~.k?,X{y@,zWM1q&Zpg' 2*RTO+_?s 2 kQ Ipƽ+~eq.7N%y-аX [AQP蕿ߛ(:Š((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ր +~/ߟ tKM01Y6CHYcvGq^O]|GFX{V8Bc:Gzf{ΑDF(:GzjiӾ Gۋ ܰfܤ0ᕆpx9( ( ( ( ( ( ( ( ( ( )ko%̧ cM|{\3on{d6AኈdشW~_?i_\|?_ב=׫:JI ON@Q@Q@Q@Q@Q@Q@Q@T:gi8y["XWE}yfTXZU(&t"3}E|gy?4t"3}E|ucv5/ѯ9b3okky}\vr"ס[R>V=lRx WKu w+!*[`͎H*:ٕM1fmJŧc=too xr<^𖧪Mr]q\ۇ~~~?gӢI|=isrѠidF=f=}j#׊(#׊+.t#׊+% ~Z˝%B1$`]˞_3>Dz~Y 21a^q~Ag=͵I˭0 f b0h~?R٧pjf$Wu+ >6(ED7/(YOYs;a^mr3zo8~ _|~ڳK}2@$492L@=+ϿiO6񷏮ٞf1ize ;՘4W_O)+KP4/ iOA|k_?INs~;]8/:RkoTx&6^[{m\ڐF̠&7'}[3~ԌZТZKyk'KUl̨݀dzP_~_V 7^,-59흢ꗷf 9|ch~Ӟ:7|d"kT_ôPMmE#rrΚ'^ ;S5gaW~ @tW~7ÿگO}+Y_hIHeޙ##\1}F^(WWn_ڦ:߯[ي(U\⻿c 57nouB:LӮ_y.@ [s?NɿP3&43_In|I8]{žо3x  S:P1++o?nmb# ]IaUc2Fj~UKo f^;̢HUNc~_@>ڢOQ~1T_M+#D`]/QwO5;dlɧk2% ~7?j~՟ĺ,Ve[@o! lAWa9'zmy x>< \zamceYvvڣV?@kpqn]K72wID)(N?x2~@3ޖu|*״% ="F#C¿iaeGz"l%]An@~񍹯mR5;ص ꛎt?gӯsgZʊX P#_yWwP=$1I`m}2 +l/۷h<>Y]KM)6(rpplv?Gīɝ#͢ZH~K  3!Z?Y[.7?|Pܒ>?x7 pƽy mY /Zg5_~к}ytlԥ!'y 9i/⮵/u,|J,ĺl$}B~:P}Hր;+-.㯊c')$rj.AA^K#h mh:jתm>V8Wgn<6쑜AY]C  xo._"E˼[ T}A;F zyoof,~=Ra_O|M{kWmy.wO "N=QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWEo=?m_Jn&c7Mn >7ց K+J-l$ܣcoӵ{tG2!G`28[߶[l>"?KWFxQ>!&v&.u!e#F0džc8l$>zx6Oz|6ƯH& 2;>as+jsp[β=հY9̐8B+j(, h^myO6=Bqr;}#=DiFIcs^O$ Yfb1i  {nv?xͤvƒtUʒwt_ S_?!-Oy-K +8,۲Au? xC[Wu=*Y; Pπ|axvU-` #rdp}+$ x|"/]Fam)mwkQ}B}WUfy <,ǒI$kS mϧy$tap t{%i}[${K-2f3u!jFI0s-$| "-G(gOQvwo̺i2}Jd/#b[x'Ӡ`߆?G(KoW{[k{#I I^p2wy_ߊ%C I džHI* ?4m˕#c[m~*ɤѤN`P @mHFMkKNv3¿&_׮E㶓]Iho%8XL g\}0 Hp3U*x C=}@\!@ |5_<Ҿ"B".-XP oI ~7صQ82I)B+zvO[\1^鷲E,nQ`E~W/{k4[pRh|Z[[/O^E"?P}࿋I_?Χ$ÓPBk/O M%~{Ï3K;/_uӵ8lǾ6W (9q_onًߴ= ൿJ}m߽"򭥟nϗ@0\0\׹Ïu8o'Q=mo=@7|E?j?~9é]i+Y_ck~=gXt$6{ ދ$Hǰ,1\⇀aw?V.L7p ">DZ}/-w6-%[\g!^i$"[ҾLK_GBgx`Q Ո =~,~fϊzďR*2`ﭳc:W|_ۖ6:Sʼf`q/$]S0Rկgb~f?tg¨p+a_N6Gnu|yYN@w ARpxۯҿ"jc%Qx8YG+~tz/;4a!*֞i˳+_(< /eȺއ-L#U&rXROWp^k>o4rGP= €?>=? ]Aj_?go^U}ؼ՗t I'-/!'?=j X6iSU6dƲ\87Snj ǚ:&᫉PRw'`\_kږu$+yYI$M`>xXCB[[뚌vw(HybI'pIOG toruH-Ka kZ8$X@UzW';׃|0Ҿ"˲` e<{6I h(((((((((((((((Ư*{x Zŏ+Eً /Mv_nOZ>o_K?_o?·wFnPeEP^YoO[ @j:ۥ~j9rzߟB).2jyЏ e?9ƙɨ(o,'/|%k{balpUanߘ)fZM!Ý8OeEf2ۯzǻnnd),RVFyաc_~"|W)c5rFX VʟG 5#߲_ Ngxn-#A0xF:Ј5 fK㯖ǻj'`/q40+r̄gMn|ShwQEa-.WF `P ~TLό>5ijꚶ1U@(`WE0wZ4yFΏsvo,czr_Ҁ>x>\4YŹ|?yvcLj~5Mo 5f:KY.Z"G*Ǻ+>H~) %i դ^*&~IcAPN f~Mk#]}3R8@W,FU璦$_=~l~o/3~n_"ǪeI+A2ᔂ2GBA ӂ͖-vĮ {dhu#_:M__m!_4\՟[ w4"/i(<}|=\?l=b I2;o,YRĞ|i#:5U+ujs\"Hdaߟ hwšgny,tmؓ#$j=I#5mu?'TuvO6e2_&o+OXHmofdFU!x'+uYK{H4nAV :_m-x{ZB"T#.\ =9428Ŕ >R'dga7|AHMpVmÑh_2H=m>o?ozeJC +/xǛ[2NG"ȠDMyO.i2/8+Sk_Rqi$kvη0p{+h88'~~__*G4;3V.Z ʼNz# ׯPύΝih o|?nǙ)$d @Ue_]#]u[cM(2\?8^ޕe~鄹$64-} _ _Mu}AfUppP'~:}؟Nɮtvd<}-~W~_lv$2m.xh[ZcE]v(ڧ5'p?#WGҐj&ZzSn\r([?!M~ÿ]?IY+*O 17gۓֿc?$<֧ Zy$4o 3TӅ}/_ڧ)I;_=Oj]CGm·j7T,`ُGoO ?K%~)~WlI`ڿo7u/%?~ܞd|Re|[_)xO,ķN6Z$[hr4 _/sG??"yG#@Vׅ]k E!XO]k;$ xta o_ Ǟ!Ԯ'f..Š~_?E5^񵾌xxҮL=Ŗ$;zhq?k(ƯZi[ K!IǘĴ@' 4_nOZFYG>>+*B>O/hW\VVYr@:< $_'/>dil4Y5Ojㄒ/<,h:MmߵdOw5Ϋso,kˢ89:>(=K8eյkǰ ]w`xwY-K[xsIgȳc>W{៍:|I~|<U.63V,ǰk×~/ЮҬn"#`@4w X#`:֛{]ż$^7SG l~ˏ.,zY2,NVV6.:Ww6xHѨ|+`y& fv V_e#А&cW|0o񯍼;GHj=F +z~~{KIQu .p6'˹Tu# h?4=ncryI8a@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|o##]|YŻ jC8Ă46#lUS 7J-|YQO{$v>ʀ#]HܣcҿC LƅeCeZGmi9E@n(+J ɭ3"VNXqh}BLpq#O?@M6[߃? 3M(JQ}.c?!k#m{ %Bv}+??fOῆfd˟Ěܢ{§ r8$⽶*|5h^m麄 "H P ]\xs_9UkT'roFO%>7F+}aGǮҊ3J(_{=3/:pc%$sĬ'=Ou5|nxwWMoǾuk繇BYȹɎ6Ksl57!?c]&K ;h!e+##;ft c("aO[>?ڐBc/{"EEe85񇏿] hy bv#+ؤ!(BIpR_<Yid *[$ '}E|%4l>p={]O {o[clnɅ @\c"4m7z-燵a5PeA"Q@(~{zņ$֖w2„*FعBNҊ(_!S>7v :J(ͻ7A(7d#> M^e/"[gx?φ|? U{-l4e(Dz'=I֥P=G?Ï^ Szޑv?}g{@=XafRv5/ j2~Y hf_B"nk(BK?~,$#:>5&Y)ѐ uB]|K3ٵ~Q@M2~Ŀ쓦/yzB;{QϾQ@*j'Ke|s፺7/Xan0(<⽎_7pZ3< :?b[[@.uj|EBsCȉ Y,@}Eߵm~o=ݓ>a\FF܇x 4P)f2~E`=Ƚo'oZĶdO$R[78-pΗsc>(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((-hL}Ij^E񟅬YnlDȮUKIR(((((((((((((((((((((((((((((((((((((((((((((((ž>i~Q[ Zj휼΅-s( endstream endobj 377 0 obj 30631 endobj 378 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 379 0 obj <> endobj 380 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 378 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 381 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 382 0 obj <> endobj 383 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 381 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 384 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 385 0 obj <> endobj 386 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 384 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 387 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 388 0 obj <> endobj 389 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 387 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 390 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 391 0 obj <> endobj 392 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 390 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 393 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 394 0 obj <> endobj 395 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 393 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 396 0 obj << /Length 2649 /Filter /FlateDecode >> stream x][[7~sQDRW`Q`r+ڷ(v"pMZ`R%Kgxv$6(8zo?:O/5p?ȟo }~8<}8]PӱR뫯v=|Hb;BpJ_E7ww,#=# CͿ٣|hwhv1*-CJ?ft/|h4Ahg 80ƞ\_C#dª3JOVz~$Ax+Gr-mŧ$}vG3jg_]?.x>YGE|z$]NH%D凪$MsԒ_?GhTz2?G-ե(Z'"a'J3>B$xqE^[~Pп>:*BT--["d5e=ux0]Z( QKp \K+r MbrheK3L<&dpr:fi>$Ku$uA%I>"a(?vl$EQA~-8ȓ _k:FՁj] Cܝo2)-/TEkbOy#j3*?vUlb\1^+&9DWacqQx~5Cm}GiL=}1x́hgϟ sjWEhAOp -}p[,-ar,| jX_+.16DFr@~ FhTԬ ɮXO2QF, 4F4DŽ%[*arRB-)` ѧG,  8 6*7ҧeY/1}l:@q]jP;;]<+JE4x@ PCԇ<ʏC@;--u^/Ee,ǂd+[%}V.hDHkZQz4`F7juxASœ;, 8$cvP,D y284'j+@o]j}-"O41ƞ4ꅘ{jpxƛN She hbi}ՃnRX/7PM>bD}?@Kۅ(\pFܦj6,%I UJRn+P-sjP\J+):[֚,]qtpH.P[,ԷW%xB x>Zja @ogC0B1*492QnА!A86d. ?ˣ-42Ȇψ^(`:.d]z!v ʿS=Y6e͒I 1SJ&C|E<0+$PL6=gu,hA,[E܀atZ@&׭H]5Eq ܆NyK%lR%O0^ vyoI&sĂ聑8{f Z%%i8T$:)ŀNEЊD6@?F)wLj4QñedjCđ0 Vz4kºQy.yĊ*B>-bF'&kEQwLuF)r;‰bfTO3+})$&;ɊjT,SA\\;:$OeN%Jo3}GFReh.xlBƕ~Z3J7vZ+@YƒdhԖ\0b@7Z,l'>+a5x3n B @ Vթ]g6̠7SxJ[1kMļO+=!5_`C *+Ml=l9ok+RtˈcL8|Zm>]3dm4vFijs?!r|l:X!i2V!Z-/OJ/Th> endobj 398 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 396 0 R /Group 397 0 R >> endobj 399 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 400 0 obj <> endobj 401 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 399 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 402 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 403 0 obj <> endobj 404 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 402 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 405 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 406 0 obj <> endobj 407 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 405 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 408 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 409 0 obj <> endobj 410 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 408 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 411 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 412 0 obj <> endobj 413 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 411 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 414 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 415 0 obj <> endobj 416 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 414 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 417 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 418 0 obj <> endobj 419 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 417 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 420 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 421 0 obj <> endobj 422 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 420 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 423 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 424 0 obj <> endobj 425 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 423 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 426 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 427 0 obj <> endobj 428 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 426 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 429 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 430 0 obj <> endobj 431 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 429 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 432 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 433 0 obj <> endobj 434 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 432 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 435 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 436 0 obj <> endobj 437 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 435 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 438 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 439 0 obj <> endobj 440 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 438 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 441 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 442 0 obj <> endobj 443 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 441 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 444 0 obj << /Type /XObject /Subtype /Image /Width 782 /Height 580 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 499 /Filter /FlateDecode >> stream xA 0 A 566*UBȑ)$i Fئ"|/-p endstream endobj 445 0 obj << /Type /XObject /Subtype /Image /Width 782 /Height 580 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 446 0 R /Filter /DCTDecode /SMask 444 0 R >> stream JFIFC     C  D" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?y |5k[A,ct6a*"" ٢(((((((((((((((((((((((((((((((((((((((((((((((+h_Wt<5e;߇e_cX'ɽ7vzנQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r?>;|&s~5ؕNťp2R(/#c~&CoğZvwtéU =YQ?hӿ%Ϛ4ooo%ol w"E߁'IE׸3~ȟ=ԘE -g{y=~?5b1q%?bIvW_tx8vEg&iŌz մ˺yCPGҦį2 ">[t$)n&?⦾M?<  ƄS;S_x%Z+/RY_F2Eҗ?z_3 ~ ҟ=ᇏ [./|0W6# Uү-M?yCCIT%(w_z (6 ( ( ( ( ( ( (ּo9|Y 6K$𯻸ا|m|D>=n9+Ǚ 82 3LRSTeK_{?=Jp v?~HȞKM+ڏ.#1Zs2$$W }ix/E.8+G_L0a_`0L4W>|F/>%?4bcȿ=m(VXW| _^Z!iVEȯ̙zW#e+rTnuQ߯ xÞ3m|S-vSoX,LE^&/훭gŚ|OzK }ېp+Z+>-|O fW愕-_~w@+叢 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (>]zʚcmvWyni0}F1o~~ߟ $š} ;4&{*Yox3ʴFog5?:XgKM~7#=j_֬ڿQ؞!V#cޫj_ֲfbtS:}*JeĿ(uU<V4rFúAWֿgWl[R? /賀;z=+(TukͲ<;챔>Y9Eoit~f~%㗆_ |Ymp&Hm 2EuU⏏|9=֗~$\u=Ձ!!C|Z8V$?6mE?q'''>+Š(((*+=6]CQ x#2M<#@2Y9ɦnI]הGO٦ŢamiOB8}؏`zW_R?fߊ9=SttjZuMwQXֵ\qss)y$brYOxclF9Gt-͸`ۡZs/?џQ^EuSm\zU _Z}W5Q_Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@蒡E 0GWoLz]qU6~Yρ1ྗIw U.Oɼz D;yWF߹_|A?'Z ߣ/k?3b?άڪz Z,Ej| h5b3fń<⧋ҫyќYI\b#3U8Փ6EMYGXܫ+ުBb3H} BotVė/˞ FXFA= ~#܃ lQk֭GVP8W[",.p]?~_*+'?>Ȣ+0([딆ci&W d'4$۲E_Avw04ww#@9$vx7.n4& S $>N6w~?ܩS?y87"t#oOq|Ӗ +RZJKy/~RVj1U9X2)5]SJz2~UDw2u?JCPHzA7O TSZE"OҫpsSޡ("K3@V͟mg/mg֬gN3 y*F{W]ym.q6Rs߼';-z}$qv!cLd* {sKOWhAEWFQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|k{cc~j0#ִ[Pѐ=m#WOEiFJVҋMzQZPJT殤~淚KK+$N"Ѓ?1R~|+km|Ux`Lca\M_xZ)׎ӊk?q%Nkv-#ҫ!ȩjf1ҧy}+91CSd}*gM?dՙ^ҬbxcF/ migI${PIfo%&~ѺX[:xoOy=&pS'5gYUQʉv[/nr2k{<,/M|Kᯆ^ԧyOI!P}O=_x~̟M+ŋn4el$ | _ ;='N"7vcݎIkb /<ۚTo7}"l,j'z.AҊ(O ( GD r eaVzR@4~MOlj~-ɗd/+n1'⦾ ?Ya|La[o ;_uWǚ 񧇬M:vg}{z.yKwhh~tU++k :oשg5)H&odW/| ~K-mŝ9o~s8)*]_?,%ɊI-bjC۩$aWē#Բ5c"NMC1\J3qZDC!^4\x'Wu22+eiʟc~~O0k⻈cxZO%dhA^cep*]{9X EG Q_QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEEB`0/Nb,tu>ZX肾VF_'Wp_ I~ -tq|7%XėwHGW>:_j2U𥎨Zb.쀊=*ppyW׾N 3-cݔKE"RA|+030RSnN{?6cTG7k;^S~Q_>{aEPEPEPEP\7 eB-uwulOxʞֿߋ?~xjO|Kmcq%ԘiveA5w=d>/]MlJ 5B=oM}O fӇ+%T~}_>w3̓,:xuY6]/ ;t?C_ ]_e8/?^*)?f(,(((((((((((((((((((((((((((((((((xr[O^ pwԿC>0P?-go r}n##?q~dF K4_MǏp Ir|Zub'x n6N1UKɢ-vO>>5?w^l}a#WB?~.O!fndO*7ϳn'/%"~՚3K~+\3/^'?χ|_i0Ip]D ޿%%k] lMw>}wk\W 9kԊ>ev#{cWOJ_gO⧈4;}wQ-l5.?]J(>1?Ĺ\+Ji.<{RtNJ*"~5>>>ټOyfwFAz ahq A[_Nmp+dU89*/{kk-J+?csߵwZ~HdRc|R nk~_rb8ft} pa lŠ(3(|}xıEao/+zviT0/ͽzx~-bf[ZnͫkPƣ35;`_/-S\JE 1 9/++JjOItn?;wX?¯{9\|3:\?17z_|=ѺE"6ɫ>x, G&άP_{H2uGo[ot;m_rxj}GM̳49GCF6#&[q^&n>0Pdk~f~AL۬RlNQIC({~W昼hO~դr5([>+aDwl900# k?3stα7ŰJZLW'#] %nݿS5flUG)y켒/BC'Ҙ\YN+Q!ιpi.XK藒OL)殭V%}[mt (P(((((((((((((((((((((((((((((((((4)P2!AAx3↧uVίpK}ÞIB2Ŀ?a?ҏ|淈E۠n?Ǿ+<@72qƥwlP2I=~9M(ЫjZ.k%Ik|&oGuޔ~|hӵ="|Ҏ\D` 5_5_ʺ-ɣ^o9q$,i|{݌/c-_<^WbuT{&쵶=3\&:tp="k_ޗ]I!w-Ɖ)S1ºt@%_R\Gk _m0=J*XU>(oa{NЫy" }BO.u\Q 7}3Fk0.ܟ`qqm˗jՒV8Vh{;vCa3l\E_fvE=u| `|[K_ 9f(@E~N_r'C[eׯ 2ϖBĖ>WдWxAEМ:Oxm4O?v8#%*NEgoD^0+Ᏸ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ? JMg}_h;بA?}a_VwlMcḆ:Uº1=+<8ɡq=?h K?;[M?4|{K*7i|{?>oWE|R+5TZWw o/iu"2$j+WEZ!ӧco$ncB5ˉQdtPfI}z^_'3}/[?ԝfAdvC?B3оzW6o)_Ճ4C/7~GtY5kfZ)lx7Z 8#k<+?m:@vۋ]~ j;H0=cA*~n#W*/:VK!OJoC?er7osIč_s37wk?zh_#a`N+g#Wk.^iY,Ė'L2e_wE~5?o O_OϿcxiJ;5PG{ǡ~kID|TpgLPlBk0Nc:B/:x> /j) &@)_ze2־ǔbvztƔ%n)Av#Ic?)')T%Lg3VM;Ug$|# /xwPM&E*0eaA֣w#(]1)2vh8韴g]ӕQ;':=]|1q}|ܶ3ëʬۖ#c_e "F? ].hRh󜎆*_Vj0+Ot(((((((((((((((((((((((((((((((((((++㷉xV%eGZ}*iZh5e_wSh~E̤EoI=?*_Q%zdkTK')OZz*EYY87:p[[-(wnj})CpL&-si'nc9 ~8k|gn$.I{*U3+2̝Q TW^Iy;YrkOM}?VOOOhCOf+ᧈNsc!gu?_>񞙿mg3bi>gz巈w+~.!_UM2L{ǡL짊UbC6a_J+ĪzRڨ|P\rELSM2թASQ!Қz£g4I {H}qQqM.>?HǴOOΚzUOJ[Ϥ~ٱ.vP ߪp#vuoiwp.RA&)~W7x[wN7K~>i+}nQE~\~QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEo7¯GZ+BV̑Gtn=3/n <]j-Ynm dZ ]3MVL7[ Gh֋k/6~FY<:IۻKGڸ= =d"\kdI/֬kWVԮ&F#B=T׼fθck6\O)&&-mM/QE'ӅQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@b|Iy_>վxM[+Z1{08 շE]:QNN[2'UѮ韁WG>PfuK6'˙~a;Y=:bٟ חcs^%#lr6eOԬ+f;f:68#@^4qNS{ۛ}WGfDŽ;s'~ku{sk/R,SY=OYq_z|ebE4} TY})oΕ;ڜ%=Uj\, J_7=WG5߲G#<fX@&K0ig*g,}$r1Xl iN.$<$p6b ~ xH/uwNLOt 9lbXI "OIۻk~T~Ɏ1SBo쬹|Nf~)yRyk|Hw_~4{÷^bL{0=H 2 XFa_ӝ:$Z3j)MY{Jd'HYzMiOWE)`:kJJ{S_ʪ¹3Ko'|fCLi?v=+o$UwD`ߍ '&~hxe^$`~q~?l ol'_I^ ,$t^3G7>=>|6*9cդs՝YIHY>ynwMZM}[_*8TmF?ڞn+ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( GZ3U!wtJ %݄^Sl עQ[X"5MqwM;4Lqz2Z*Q5toڳ E|[j^+mH^U'OSM~$#OYznc={xFI>¿Y=7t'ּY_oyG-C?_Egp|#Ѵi1̹a4?WxŐaЏSxYVx+&?4d#όW)ǂ4d6Ҩһ_g>H#5g?v xZ +Ky nW ~~M7kYq|G`.sHđq#i+jO&/0꺇rb 0ь' eVR9u~?a*0~ҏK^WϏ. 8^ίǯ~gpApiC+S"|sRM/侥&h > x'3_1ҷ6DR[ܢ{ ĭ'޿ax8/tNei%G ߰*/^W=?~RsHd;O {EȬ-ѿ2B{Z4wZʄ5dlܷX$f#Ş SʎZqEYZQ<ܗs3 =v xچa-i{/%c6'tۀw*a_PT51O'¿Z?Ҭ'2bMtf/7yGw٣2? 2\|ZC_;./–^=#HX8:y$I$MkE~C9άޭ[}|! pQZ$AETQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEKĞ$|:} 5ÅHu$ GS|uu=梨yQBEw_wڔ++(ؠ58<ɦGPznqk#}KVmo ?1myۇ{W|KmU4["mNYˀ#E ds@o*iYO<5s=o?G9]kko* O|ch^+֣iz͵ N1OíxO7i 9׿?rd8͆q"Ѷ:+Iw<oƳ2Ftu8de` C]#2f'-m/كԚw/ki`u*0a WT/|}D/:(8m]~nӼoJcne6 (R~((߈?(]KG'ϔu ōeRr y6wvUMP@Ex?.dz|m{-A{*gwMKMS_TO~'~e}[ RH#D*2:WWKcjUI͙\ RׅU>,7?ukPzem6%18)뎔>\'U~~~:7ٟ-%<$s\"==ۇ~:|$wRQEs?U?yh>|^$fLuI~CEx1tsvP6z5+} @*] Sk)j>&fqIGն?:z++K-7Y mJڠ<#W>1׈-2Aj&H{HI5_-3?{?~)x\xM/{#^[I/V 3+L&Q#GToJgj*L|?^ X` л *eu # րK{?4ם_ܪϰ׏\Nck߱_H;rP( +SD|7~,i[H)f?E;سdӿj|a>f.h-BdTAeksj?$O;@*M||U7Xk"s5I~!;[D_~_I7}&>cqaJ!zD!6ђA(?'iNĺnB"B]}+< V=} G"W# _?nᯏ2.ΛkOv(dW(#PPH$ +~"W»t|^b[+YM} DIwUЮ6sPдWx+{pz?M6g`hX3*׭[\@V ,R(h䍃+Ђ:}x7ᗆ.WK@/x;/uk-'Oeƀ'}&oA9=~kUNվxZQZ&# 2dg8>((((((((((((((+ CpauFѩ_0D"E@}7?-ׯSG(~*o_7#/ᗏWOҢd:lByH[_7G=# m~_??? 4-?'4{N [)tbo.GY5Rg#8W5~1~~Ҟ< #ŗ9^ǚOO -^բܡh̊r7A#"ei.i{᷆^!kVvy(,{7_K߉^.oebC\ID?5Pso| <=nMw0oRd&zϩ5u>A%(%9}A֐6}p aPɓ s5^~q.S54sj#Dg18 ℟d]KLpB<їWO@kRFд˛ˇ oki I${*$a^s!~VQ֧nq#KrҾ;-.T㮽ֵ-NK dPݳ?w{ $~'ķz}C,dE*< }mEM6]C7-x$bnsC9)A"_ |j4u>{V [DX}+϶@`2 |<= `LWu&$x$0݇Rjo56 c}4,[Crj,ko?hmbh4&16(?R}h|Y~wr妻=vZ`־|#K&{OI5о5}iW>>Œci2{n _Z~&/Ktkkx8-4HF? |44߉>մIĺ$]7Mk|*>*? |K- >էKݯu<ᾣ ;_ߴßkIyLV263NIT9!Ө$ 9n^Z'nU8ه=O)osZ@/=!ooᯆ Լ{ @ZMFv;_Fϋ7ǽ[mZ+$i!cN}{_k> 4ƉMm(}!o|Wڟi6&ahHDh^\dEW<3-O$QI,O`Zis :xVlߴOh.}Vk}y Khdv8'W1;I{kj+p|=r##vW1s%͔kyJUzW|!x Sm㹟PY#D! $O_ZOY2y+ >*ydx5/?jO3> 1-ՒTޚm$ Yz3j8$0yk^! -=#'=OAj~o~2~+szE{̶%ܶF) aY~CjD4JJP}XP| b>kŲugC#n}U"|aZVڅn}`k@]ÞҠa"D0U_x¿'}h隍Cum:z @㟅$Syj.-%+ã=~߶Y tT_kXWlwp [؊;|KvY9Xs$jcrO]w ?,\(*/#qˏ{COSakF?HомA%5(NQc<`yq❧-mѧ[}aM}Q~KS8It]PYeA`!nAֶg=<.'@UGL{P?۽}?2Ns+^T# qwx1OЁ(mជ[_|-h-ϴEwcn'%(3;+2HB`77Ah*?xC .g | |-Ji3XXiKq*.TU O''CQP۽}%6?ڮ֖l|9cqw}>/EԳޕO_I?MxCI}A ֮҇}]s,R`d(xOP3 sq*qi$¿2n?(0x-v}3ҘZьsN V"~ drRߊ d_w$:Ec,P\^\%RK,8RO&"Cu=,k6P웕Kub?`<;A~^%"na,Fâ ޵~k^]Vm -}ngh2WٗV[seu!dٞZHLp{*A/,iq&/.;@kBǺ`Bu5eP<;$ӭuqxLY/\#j qf;&N*˂}\{O(Sַ28Qw`ñS_xXAtGWgc_|C>:M7),I-Kg?*˄ =xn: 5l rzz(>+ZmhS\NBYu$+i$z}/nOZNW *&bنa9-'S%ۅOcg,{{%PEPEPEPEPEPEPEPEPEPEPEPEPEPEP_\ˏ'?FqG%~g?rP?on_'9/u/GMw-.8obaNk__F|؛O|*CF [_g93~ggzS?6~=h4OSo-]7Qtga4HOIh? kݟ%z7 vs?+ov~_WO?Po~&0т?r袊 5? ќB|Vofo_on\_ ֭hO=a#11G&9n9ne]D=U ϴ'?ík\Q㼍7]Ȋ$D-2n*9޿xkOlϴћjٷA徱J oonX%:V*wba|ܟ[ٌƺw,"$\nI/Y~qRx<_Pό 7&}?_j{q_gΈ?OtsIӄlo"XGjB>??i;x"֦N8{I l`3(K%medԙiٮ9ס %31Uꡢ߶Thd}}=|;gX^³Z^ZE VQ(G7/4f}f{nIKM&O85ff#޾5Dn4 |#uX$(VE>Evߴ,PJk/.{k׽amDm]z]IlBl_/MOun/߂/GE)nX\  81q\/#ߊe|-4WΣU҅.}_u#{y?aMqs_onN5τ?nAmhZ571y̒ QO>鯃 vsꚇﹹ{(ԴHU@I<_Ycʼn|%ᏏlK>lGl'~2_;/f|m>?Zau={ 7>a_M!tV~+KG+ngӃi# qceGjwz)gP.:fSH$ʭ#E~T<-x~,m麄 5d0"I௄^ >!B'Lin8UrIP'?n/{pndz^gF4xAlxǏֲ9[n:qy-(D?+ 7t,k=R]gSu,Pڑ*iiq@Wfb}fC:Ξsm_X& kgiɤֿ~&g?6sC_gWCIٷ͜bM}@?W+Sv?Io?z7 u~ڲnH_-#@x\ ~;|WKa+s߁~4>ԿJ u'F5ݟgҋzٿC۟;vqໃ6/O+ #_W~BsI~&|CNҸH 5|^NOvkgŞQH]ƾ|-կ#W >2U'@mqߤ $hRp ǵ~hr^ Š ߱Z_'?sM } ic,W8kyb8u*pH</m#K_Q[U(?m/k&&t/y"$Y$8hW>|[>MXۏ5QWlU|O|G>#x^ѵ(`qkT "rq~+][}f{ŷ-GrU3 VW?|@oBf5(,"$Gh =I&xoWKZOkK5} QN;kosy{mJ(akĘ~4}w6m7y),~kNOB}{ov ֧|Z@q)@@ <"2|5~ڏm%<c?o=Au<'u-cC'|`cX 2[,Uc=K>۠/!<}o#2k!C@;⟌: W-*h(.V=ƹG 2߁m|W~z^WfiiDӚ3p&Mǁ`p ?B]`:v'8~*w|-i vv+Okp~_i:=BN,Xڱ=BrH~QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWG ou#y4{b>R,D}@`7c: 3:zKo[ <1z` ? 1A ivs2Xczywl»R,5|9~ {/<9hVk0,6V0,P P( (?l8#ƺ?Ƨ9 [wu ^4,;cǓޥm~ɟ<[o㿇?t-3XMB8Y䀑PpMzQ@_3iMoqE<2.VDaRPA"!ࡿL?ufVYlc@,b헐p["? {Pүbtm`p6 q^ayؚf4/_)S@Ē?:3^KФ_i=%F}&O#O ec"b'?93׊kRƾ(յ ^Wo4rMw~sd'AdӢ'ylg=zmg5w_]::1^ xs<>e[.{>!!言* n7-[AXC kdQ_5L>_xD1ZlSٝ+$fU@ߏ<㯅'_O _hڭm)AFAks=|elXkjOS~|O%V7ů'ϒzf>A ?߰;ܧ˛v,a/b{(WGIA|_W#-Jt>^vi6Ahz|2mbi$UU>fto#./A{K_LE{'٫Oe)4Ѧ ƀ>yG>5~=5<\ГHyaiI#fe6 }E#>,xVm4]:Ջ@N #`pA@=n2?b__ǎ=.o?0~T%r9t/dh4SC!VF#k,thNgiqohfC]aE|?$]FMZi]^1$(_|r4h,-N@Ů4˹u<~Ӯc4cxfe_~Z_S~X_N6yq~y?|(iMž;<+4k}APi1¿lxFK36zMP6hb|// Yx7ziltDqA誣'4 ߵ`:ѭRy kUr:E"8#q _%s?> |%ͥcᶉ+haXc'B>AφǟetysiԠ;sU_'ƏrG'Op?_Z׮$沒F?7Ѩ'T~Cw|l뷳l?Ÿ8x |}.BXF v4وֿb?|;ē}Mu9[h*  'GFӣ [1~~&Zdy|T#x^Y-ޟxЂrWôa?6P$if_GHEwO|)x*Ac[->doݘrI<J =r~t351`7woG\>mn &HBAe2q9:b?7u.YX^EWSv8#<@ǧ+  _PIGR%u$D+$n) @/})ijtu7|WMbKf˸9rNxUp{v_e|3Iơyse e@rs<_o.?`gnyt\Ay,}_ў%|?-&)aGV2߰45xxbHEG>? (yܯv'F٠~s??f( hm7֟7>ۼv"?|A<3jW- 2ϲ&PL-wVo|ML4=e]7r+ 6 )!'$߲|>;=nEҡVLglCs \DUC0A~KE> QWǂ.3ab-ΌrP=gh᱀qb.m'Y6+5o^i::w'6$c^_@Ų_?a#ubv>9߰B>1xa-㎽:˭B\^_\}Y؛ 54NS%%H%a_#Q7?bICx4sk^fQB>A#{tCk [[B4P@A@LniGǤxCF5F) i+Oǟ^RDK>dʤRI '5PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP;=x~~M{~ua@gg(TIM{EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_p_k 8x?ϯ\ZO.$Q@ endstream endobj 446 0 obj 31569 endobj 447 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 448 0 obj <> endobj 449 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 447 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 450 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 451 0 obj <> endobj 452 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 450 0 R /Length 7968 /Filter /FlateDecode >> stream xɎ$9r@y/観S @:.}B3iY (zFӊ UF8Nm?;S- >~ 6gQbI|,78? njO ȡ ֜_>ڿ/菞lJl yz+ϣe\EX=XvC GK-/3XɌaG(1 >XJ:}m鰢i\=jKOSQP`ѥ8C==2`Z3f=rP{ٍsY30t6oD{qZ[‚Fl~h!G `a 9|}6Pzt =؅!&tI;wHVN,}3c̴;$܀2bG‹PIo0`B Rh\`U`o>r:pd5Tq]De_Ι8R6r&pu souW 'AK} "8J=~!Z*-ѦmOT pӷA ` >L' :C}@PBy\Y(#A6ne^6yHatX{`p"3JKG( n# 7j!\8m9Z0`BCR)3S rk,ڶ<_~?=aC1#J4jCp4H +  xҥ"]E"f\<.ECl xA[1'۠U( q:Q.Aj&4RZfu\QG]'RB  .D }( GFO`a+W (ً; iμG@4F0MD Zcp&Jւ${WZ3_~UM!P*` FqдaCPL!Ƹ 2ȭݶʒBAɸeS pH^Bl˅n`x=a'뚽I,@iQf uJ YT3CEuZmW vcyލ- [h4n=7žs2RM=bXIeF: qE`05)Eд/gڋ RN5N#56Xӻ/>&'PC%w' 7`m$| v兌Ge PPAKm9c&Rq3@[j5vJ FxjbOx%Ѕns sG 4c@'Bsb)>kxl,HAف7W*`9x.nKcTH 9}kjG_WL8^FQɸyzd@I"E\p7{H)&aT<]XaU@GS(U== ~ /ѕzω"n;4ka=iNd2)"- Zi.~ h#nVik:[Kvf4fAd;JF$ 7a)vѮAoynix&dӃ17x=]ȈT6˭s)ӄu׀/o<8vzp"1 ɽ^QLm9}sh]G눎)+] e:uuyN׈rI P  zzg<`AϡSc:PyB!Ņ@a^.Dj^2/[j^$0RJ#=hK~GO4/[!0AjQ.f˲y/R>@MTi`h`<1rhN:T- )vY‰`eI$DƫVs6cDc|$#?)8 4_8QA*B ZyZYzEp9nKJo7pn=D 7~r;d 4o ÐWb0$G l־.,Lbڂ DJeCVD&xc: .B"&֚'*V@$^؁) sdx!f6ĉ pndrXBAːMX|>4TȄ=nC ‚߆ <a[b _JxX[.߸?jNJ&PG+'iT 6 qwx_TvNCxɆUe {!t㙀?Z 9a)DqېqAZ?9NGCh9w!P+:Bg"]j'"}ň#äE T(@(;4ʽ@@'B'GN3̺q!IOplC @] G~- $[JR!`)|1\ot*i$J8u ~$"J1{zn`v[pC GfaD0> 5s Am҇gQAOT2⹂UrqtȈ=adwSDu[8U;&ㆻQ` aEO'j@rqإd9БNX%HNN7T?8 ´ԛ Q(-ah;d@n,P֕0d/.H[QH߮WIf%~U*NskF~NqQ*YWI@?s<}dsHFg q_U"~_$GW;Z{ӈ;]׊J kbXt"0q^&Џ+9)2<R _+Se$Hsm \ Dlp=W)pDonL.xjM<لrY3E':NV{Tx!\L:Rk ݎ1R8c2e^kxT3D |J q:OG@o njM Žn Ł@CTHJ`3cb-ƣ‡)6>3 z:˱@<,_Ts v21RUd F+υСE6IQмDr-(=ZdkB%@`j&k)TPh"{2U+%uM#j4R&@C{2hpeE)f@a'lBA!y|zpBUOpuP(Z,IZrX@bF IbJ+c4EFgZ؝0+Zi9)IῘ;M؝#wȤM؝d2)0\Zqd H-s?¡sozO̚:}7k}e<ܢvWI9 gZ  +*l2;aѽ:OR r^^ՉuD *j,0v8x\H53eE?$vJ:d@+`^\>! BG乜Hss9 jMDLˉLPFv˅tћ< <EX ʕ\6#R.D+5c !gB)?a%Tّ'8)s]#,Xj+ʵPm J6犈=W|y*Co_1E;|8aoӑ,)9# p*B7kRjmbH+*2_]|S}y0Fo,gfs!qpDWL#}+?*8K#H[rd=9JxEЌ|:ca?G̊C$"㩄-~진DȐ~ pm,p!pɅ,\6?b@%. 쨏iᐦmÉϷ>*9M2p+.)O^ ,P3DDܬcڈ -(?,3 E]Ղy1c\9rssZ[F;!8!6!ujɞdKwHJ )-e1(H"G "% dr'쁜 ,] Tmk(j &ݐ C(0XQJELYFUȘB6˯wO\0k2Hj2sjL9$>}Vey`~1, QYZd$0).qH;Jkd"L C2yhE\!}Ljxܯ3pݿk\5w_5L+6UvU與eikvղx$x{:6CGxJGz˨%L^!8,&g@߉0i`݋tNKPÈAS"RK V9a䓜r;6IGd}=aFy(a`DIyrc]qæ̊ez zzM,%bҖ^1@2ɔ<=R A<:1<AQX @ϱVcLri*'h?0ª}ZXPn_i@)rCZAGӞr1Y)J~V)QnC+\kFYyؐ$7:8]G;t$U30s_FYiykfFlyczP]mze{\Hw{\==–DiZs==ךl2זtsHKb%)>)^-ͣ2ZY@6r!-(ڱQ*`eAC;N`@_~OB6GZ o /7{U2nw`;SY1Ѕ FKq`jUg`療oJUNPtKt[s&YC㎲*_l-qBbiKl*Y0arF PFx,03w! ~j/ ׳˚+9D%:GsGˁ} ɈN_@[wdH.'nTF"GgckB&S2n )b=1v L(:dY =ٶB+ w*)lTA1Aҧ#rw \w J3lIY?ZuZ,*auEgx/7G8&T}Qs :&N`,jlU0ǜ;aQs!P:h37;Qh!8O,>>P2vGCE;p+Id]!Ɉ))hG u!DGlϓjgޏ;@xwxl!5»1˻1˻1˻1)]p6yKV1Թ,śkG~ʸ_@Dzw2- v:ו#D<LzO3Jȅ 8d/v{1• ԊܠعyI̅`ùK%ONCPf2kQzhȀݾ8<..HG,:vOH8N*uȜ¤UPǨ༐ȾwUZIhK;(|ʿ;(AW{4Qv0o;8`)8nsU}EkF1 { } -H%,d4[_suɅ"ؤ4J~1z夀F#NͦvM:D5<Ӊd`9dD mFw>ZMrȼXL,!b=sHKš搀ZT*7Iy;R쫀}(C_ 2]Mf]:U,]!ZGWA}c!0(r`v!M]]~z%r c@ хtc_^(pHT&H O.[хLW=/T2Y& 贽4$;.+`gdj}v!Z} ,dŔͫ|R!.=+"6 iO"o02Vu%6:WtԠ11`HAD?1cLBAF0gVVϐn0bYr+@":&1 dAuuQ$%)SҮJuHG,ޓ^ai{~\4:ԞP. m?Uktubd Uic0 SP^i>4&~}mn"5Z"Ⱦ_=x{H rJz@~7(K km@ƘwRH'z ?xA>0FVgss+چ#3<{CVۆp>t"L؊zgqc;̥Hc>A#,m.:PD#r7}r7+8'_?xMNSƎ9-wNdg:opDَ'l6?c>j:ajM5Z H%4qȀL1iV9됪cNB-W q AhIa!I~'vq:`sR"ӝV$qPye,S@ 6ʐ}>kEJ SL #Jڄ,\|")kݓe@zh`b}v~d'2)E֜!5aQ@61bf5”>SY_(> endobj 454 0 obj <> endobj 455 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 453 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 456 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 457 0 obj <> endobj 458 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 456 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 459 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 460 0 obj <> endobj 461 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 459 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 462 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 463 0 obj <> endobj 464 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 462 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 465 0 obj << /Length 3288 /Filter /FlateDecode >> stream x]ݏ ߿b ,R-~#MR^\]iF nq튿ϡ8p-;_Ϗ˟_??~z?߿ŷÏ_{G o(oat#a?_51Oç3t~ <___}NxrptP׏J]J`>Qd_?m].u|<`AaK?D.fg߅^#O ] *xc2Sr@\R*}5y=ʀ }Å0lek"xG9 zv\aLs r/(=|șDP+y=y5Ȉ*vTi 3;`((@> dg|%!Q厊V́Gk@^c80rܾ%UEm_'\ar'T.Cx>b_16eOJP ؓx)(ѥo7O/caH}j>Tb/ 7 ٯIW/[yjQ\ %-s6~='/OѽO?; ~@,CO-,gʟSt Md(<~5e/q/`sT  Nf<@q,U`D`3/$i70dVR)']$KED&8x-M(p0?43j@ mAOG5{ԲeI/&'M(&8"<JxrJ6't~?'Pj:h"^:h՜@~q"Pi8ϲPFKPcs@GW@.eC SLjAH-C]"C!Z,@gn^cK= RF{ %d)Ke,fP-+JK[~UG?8,Q ZbiC+Ѱф=#&lt{e9 ˈ4+W)Q+Bo^ DIK~CbdTOZF8S ؤ@ edlggO+#Xal(yA1# @ȲM$ Mi((RLɉEjKS[-9 =Z4B+ֵ E!crbX3lzbHz(*sEyD*[ӔL܄e')V&abPK^^NNVᯥK 7Rks J3jYt\f:`s8T;Zf v|h 姹YB#)$,)Om-RH3[F{].VT 7[.AmF#xxLb/n1,qc % `--,h6;a^hheK 13Fi-cEt ,Z;Q)8,äzu>zŴ> n6N6xAI-wnESGB;wh嬞>Fh%`jZ^I dm,3z3{@ׁw8[55VIAv7}3/ҷ%Huj7CqK-AVLΤ@-F"cH+l4!rjd 7m4aFok{1B +q ,kA I'a^,ԇLS F {:]X\)qPX@dEePjptA-|Dn4H@F~LsuT>XR6{P0jYSF͢Noet*36OmAv!L^4 t->=9ѤWcL=mf43z&~l8~r_T^+M$S/7z v8-:d0wng׺әA֫7nڬV "ִa6jdijk#x|%[δRl4݉yn0H!QUS1v B6]s9lRvZgmŦ+ϭU 5}hE^v'eCT g(]Dy d.qJ^ C^ͳweϗՇ+*[dACȧ\SV׃W o,qG_dpKV=֞~!ϏɗuK-c%14cg"]>޺Br}JXk ^. ľ>H !93d_s+w] ޽Q̔>8J%L4OM4?-M nP3WN^e?FqᣇD;h=c(M6TiQ~;?3D^tP$AIh*!H? t 8{8c = K 7 ngh5w!H/G#nWbВ8^bGh)Dm WrF;иNxBZ3z 9@2-5xrmg{ brw"2\74ЫP!GquaJ:.)'mz$AtІ!Gquk"@p)ϵ8?s'׼H>9N,Bc̩!FH}GD!j+{q Ko23dYnӊve sJ]~K[>ͳɕU"Xء(R8Z,P+8Uhru@DK> pN5ȧe*Ådde'dGгDQ,9b#jez!PS#.1i%1ѷ{̫|U<2[/+i ;/0;(#.1)uz_pap4K (#.6\ת!Q~%zzcE?  C^2" .꧔WHgSЇ!Fps 7 endstream endobj 466 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 467 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 465 0 R /Group 466 0 R >> endobj 468 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 469 0 obj <> endobj 470 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 468 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 471 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 472 0 obj <> endobj 473 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 471 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 474 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 475 0 obj <> endobj 476 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 474 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 477 0 obj << /Type /XObject /Subtype /Image /Width 551 /Height 409 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 262 /Filter /FlateDecode >> stream xA001%z=A/%,>PJ|I  endstream endobj 478 0 obj << /Type /XObject /Subtype /Image /Width 551 /Height 409 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 479 0 R /Filter /DCTDecode /SMask 477 0 R >> stream JFIFC     C  '" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?th^kmv~c (R4E*8U(((((((((((((((((((((((((((((((((( ?/ x'G{G(n^.-(дn 2 ע ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?|4L(f!uv88U®**t'I]䈩R(9ͤ藫7译ޚ״/߷}kEyd$vɣ\\ˍ7s[>935`2 |' TxrI4{x|VO-5+((((((I# UQf8z^I3I%4iRGzK5졿Dd0h \6!ow{><<0k+Kݑ⸏"K& oWgWɾ+ԣ1_QxSžׇWYe{o.X_PH:ozjQ_5{o^%'۫G,1dG<*XWǗIfJ~[#OB9>o6OobB*CTJG-B+ؾ ۿ >%\c>hW$?+^=_Ƭ9ڼn 48M~'vUyKm~G//+_¿ƭO : gv'ϸ`;}_k45 oeUVRAJ5z_w鬍KNJ$I^iDiu;=@?{yp=$O`9=k_(>5ǂRlf>{w|dS㿈<_sL <.`S1F>TAܓ_pׇw_kޒ]Iqth/kUtO^} -пg6pUhmAD1$ƿk?㬒G~sg#*ODžlz'޸Y:5~ےpA$SR#߉ݵ^QXoRqU.jO¾'=S -PgNj?Z$[[*w)?tWSuk׿ |wf?4o-u5)G 3}XW\&3qT*Pi6M\x{y߽IFOEWLQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE ˦|vѬxA zx#?d,]մgBݣG|Y'Qݡ7/O_#x*YCV^W<}c⮾gTE\UO5r#>a#!ըOj qVb=+ ːTj` NCiW\Ȳ[A!G2{ o+}]B8HGυMS?e~nl[>ѼQ/h /o5If_D1pr ӭ|p_][80 X]jG HrH/bh}[:\\;uOgV(F+2NYkQEt_Pn/> |֌{ CF݇OF}g;1WNig &S[w#vn8'G' /!ž<ޕۜKk{ FfSنAkx{*̫^&q}%v3EaqSa]HIc$MRYǭTb?oR ?:7z1ƷjJ9Ҷܩ7_ƿBZH#YIuJCH=f>mlo5Kt>er ܒ~S1ᯅ:\hDbgq,̲}ZB$b eP-$ ?`Z'w.}> +اJTW4_cmb-Mdì'2#@jwyxV('t w\bK#8;Fvxx$WGPr_Aƴ)t_>~vH$l#(TwtKQEQ@r_|,ᯉav]1(2+Zad%Nz4gZ,E7NTM]?N.(|2*54*.JB}q0c|{ֳ/Y#He CH$?Rzv_ eቒ4&tck;ͳDp8.xW֊zz6~Iż`0ak$~QzkUn,U|cs(3!!mƿ4ϸwqjtgmNI;~縬,2$lV2R6Oއ (?mksNkh~1t{)U$uPH>^08}vv u#Yz$#{WyKɪB6: qwV_} (~#|O}ROl}>y(A'ҼtVN-WoJAm$oDfy [|?/j/M o';3)_rxi+O!s'QҼ+g \YLT4tu;VB<};sZu i~ڞ*es U8΅98 %f5g,mHpjmJXCcGGt+]GW׮կ\&*/+cg%|QޭxIp)9k} nCJ6ܑ |$f+|#T׵mld-:o_78.wRvƗBzΣyuJ2KSRzIQ%JU4JI Cx^Y.C,4fYXPN J7dmErQ{%,>.xLq-K[VX,Xf?ª2ǀ'{%&x.20/|AzȽ e'uЏS h]hωa^#+L&| gzF|~e>} * 2-hČ.%E|g8Xp~pMϫK+WZ2Tm0*NOzcM_L|d9SQ4VKxG~$x?WTE"=}PN*AJU%NJQvhh|WӒ8n6H-x<:睎u=s|S?MoKl- VL+ƿx#l-?e_-WLYGK?0+口 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?jn[#jɼq3 @@p-z໏_o\|Qs*Ҙ(%IHko):Nt5#fqO3 $y-JޤYR4Q?;}kM%< ibH֬M]E{WS$H?Y#Qf=+ӥ*bm[iJZ#NKvɺ"1 k!STc>o*7+zKa9x:H^ z7Z/_v+c?M}nܵ{dE8*A}Wpe|QVӓV{ݒ]}/#w5|-E}9%eL2 %,}4= hzGt[OxN- M HQvҭWg>oE-"I/2Y.UKO^EޭŠ(B(((((((((((((((((((((((((ߎmsjZt4LN٭e 42cq ^kQviLʵ8RV*Qj=S^h??۟|^R]>ҶOn9ދ9UkBRѯ}>{[14rFèe`>ƿJ>#| +z//oI""d% 9أ@E<ײWSu2:?{E}OxsrUit ;|p:~~ؚo$1̾;,Cop|\#OFؑ?D_)xV_[4>L,)Af? hأub9X1 ń3yL{ֿI&dԫCz_{oY$Ysk}Y}~ӕxΣMG1^KS{۲?%̼(nekoy'Kj<9_k{/mh!T@I~iLKJv߳@% UO]~9м?h]*`_-FOCNW oY_q9,/#u9?Ǘ?2?d"O־2$š+ С[R^[[e#r~8m_^ {FEX&rI嘞K1%$MnQ_q'\SYK;A|0_.ͶZd1',o'>YQ_0}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|LG>< +]zՌwǗki ꣃ`AuXhKySRf_I7+PXoǫ 㮯D*Mkyam } \Ǒ:{? +٣ AnoOkwl#/sz"bH*(((((((((((((((>0S=qr[ꢿ5ᤖW/$,{k;m_76NZM?@c'?t5fkr7NHb!#"ff;rN@8OuG|:YK~j ukȖ B$INlFGޮuvHuGm|` #F.u 5Siiduy^Y%ebO{w`9ً kZj|34Rh2*v+pA8<[|o txnk7zo ƀ/ˌ猎)_%ˣ-m LT;f Mܪf8 I~?iR꺭ExrI< < P{⾬,Qw@&?ϥzIs^~濡j_d8]H9E{9i/wIv.<[tNi !b9 wc7xG_յk1IhzYsLs=s^({RQ5Ly摿ĀA6 5 }U ]bӾ(84u y{Gںo?J٧>lɫ\AJG̱$(<'8߲?eh˧aܾcUԮrx`I'[xvŞm-6!%휡}؎5/|EKD/m?Owyw08ufc}/&ZKwA#[D`0Ž_zњľ9g]Qx n8B|wX/ԥ ċmth51v?~[46BA?xGпk;þM])o.-¸G,G<1~))f2Nsۿ + F-Zt@D3e't4~ͿwZ|=Fm'^aRI@b`Jˎv9*{E~Cxō~_.{y o?{ƺXɸ Xd(мH*$޾\_V/<_un$`8纩Sؚ?6ᮍsOǚMZXdbhvϨB{Qq~C=%֭{ZbT A cw}~~N?J/U5h<=*w+ٖ{2nj4N{ȭN< +oןgf=}.qjOyi%֓{"id`8d8$q@O )sm29VS Bl_Zך5I^ćx0O%29Ң@~кğ/sq)!}.Y/)<HW?i1|e?B_u?vCRY<#9b' )2]i,"̷H<@|_W>?`=7n>+|Nm3mxֶ:t̀,.5sdH?a_? /.5ӵ6hp|W/ />(1Yi1`]aM xş,/k2 >x\vm"63mڿ><kK? gVKss+j!HAֿF> ~M7GKAi#19P{I끜 ?SYy.i{#$v+_`_j0zmw,Dae# + / |\N\KjZ]d(Jv~$(je-Zur|2 5z|_t__Z?-+ҿ߳o?Z_Mh;;N1^3|"禸ZV'Oګ|#քPF3fpRt3aT_ ~οM xhlf7X Af;zhSȫZY/2 KA%^!bSرq_6kYoR, 19 9e#{|~^3zN%|aqQxᏊ-K Nh &9az ?Q'?DŽ-~2|k4fKMWHi8>\e6Ĝq?N7X1JhWش^դlemGM#K_+gB;'PQqnJ1]| ^)~? j"O ZOjnӨhײ+HvDeD'z~/O H;j5? -g >l8}ۃü,wM6ң6 7 EU} Q"_ Kݢh|;m:|yDzz jZl5"m>k(2ٝnRp}]((((((((((j0GOk$/7m}@u|Jx;N^Dv2HЍ,$NÍuG?/?yÉ3AW?mݧeGuaXYiMi%,7]0sWg&_`q?N{7{k?syk>v-0nj$65^^j[he[}$sk_g_|&ץ1Lo2Y[ku "tt[KvL&6Ђ(_d)9o:I $T׼'h;fP G~8PCybbFzc#'OOFSI=7N+B (mz@~ w5^/Q>FἽ\kC^ 2_?矰OػUߊ-4ִmbm yM"X+-fdཟS࿊.uSm >8";3Pʓ>nK$F-$<$9&?>-7čM/YGWx`i̘mJ8޾O.5{?z˃}/G8aƻ 8 ǹ&[ceĒZZKYLa_ c @_Wo;υM{r ? W?[ǿGŽ[' "?e(Dw.x#/>*yW7~g-;'_!CFK g_qJ  2@>M~>g26eCAwuΔ?n*m*WË^ѴY&BIڪ:My7싨~=_|>IykO,\q\˻+YDRſiZ2""Ԑ?_H]eП|wK> ks%唊z W H{:~ў4~2_|IyJqctHReIXP~[l[t+Kw_:/[FnJT?^?}~xcMݿtnڿ>h'ƿMWcDզU%-P(S<V9=M}9g猟h^8nP_4~7OY,jc&d_$ou~"YxƓCs--,V#pyW>doP@*k?ؿ0~ݍ:_yz78Mɟ/t,{x̵_7?b⪿T-tg U?;dDQCr|wrWE_T)~?"mH+!ɸ'312WS0ƥm௲Wiv'8dc%R>D_8t׏J$O ,᤮tx<4o|_;Gu"=Lje7<~%'yS>$f9?g"c>sg9:P;.~ﹿdx xG[mOL%\`Ҿ#KX=~^24SC{w-6B0Z3$̪JvUwҵK.IgCb2=|)xzt%W*D`T~w[IO'_ ~&i2ZOw ?$1Ð{r }1pt|1| ίEZír4PeVMX1 y(+7⿶2NKl?! i~/,R ]M/%>M:m½JɷEP̈́9$U֝Zf^ [{*w0O*ؑ(~x^xQl,Q G*lx_W_C|)Ц9w.a;塀*?8 ~'oO/'փh5T|u&iz~=.'Z#%ϊ5ym礘# ݀ SiGwzZla4Ȯ-bYm 2J28 #55QEQEQEQEQEQEQEQEQEQETxALjl#ԭ$|C"t>I_&\bI8ch[ˉ,Ė=$I'[4Q@yA($ iַgcm,Sd8 zUW%>Q/x&33$7ddUQr@cgq_JE|{~Zhk+m篕2k>$׿߲nzZ7iퟳ&i,h=o͍j+ub/5x)[jqDWPoxN a61XMǫǻ1$5,QOCe_"5RG?e?WtP~M/ q`W>CZ`ψ.hXttVqJ׽Ey, 74UK}XuhN2beFv _1_> Gl[wFdq ms۴P^\~ s|9~؛]CZyu o'*aA"GG=^o[CAbZ&2j[ pqG-W~_MG6\kg÷&ywP r7L׽@ÄeO>!yBwO^>5?d_ٿW tujك[^!7sãF"^Eo$/>GK^$Z CUbbN3x⾣8owm.1M-.[&iCvlx~ԟ OZ].kUn2,duly#xoo@KEj!pmU3ǿOtPǟا{j[/"/Gk8{\<70O__Q@m#B?f;H=jD4r/RyKI</zMPn#Hu|3݆oo:طSCNv a'F^C񷎴vȵT$̷gP ?W(Mrľ*h: aD9m;|#O@K"NA1QS Ң>?p 0ܱOHNq3z;Woam{‘iZ\RdP\J@ ,1,@$;*(#ǾwmWG-7i?PA0AX"~ėWr\Amܕ|z ԓ__Q@ >xgÝoRtO]d`nc+~((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((#%A,NX ZZo3L/HY(((((((((((((((((((((((((((((((((<&H~hിo֓;Z( endstream endobj 479 0 obj 20469 endobj 480 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 481 0 obj <> endobj 482 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 480 0 R /Length 136 /Filter /FlateDecode >> stream xڽ A > endobj 484 0 obj <> endobj 485 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 483 0 R /Length 135 /Filter /FlateDecode >> stream xڽ Baw9HT^9K]~9z>3gNaC0/ 1 J6d2pSQ6n])2t2gg8.`c|w-\㙽i/ H endstream endobj 486 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 487 0 obj <> endobj 488 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 486 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 489 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 490 0 obj <> endobj 491 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 489 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 492 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 493 0 obj <> endobj 494 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 492 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 495 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 496 0 obj <> endobj 497 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 495 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 498 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 499 0 obj <> endobj 500 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 498 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 501 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 502 0 obj <> endobj 503 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 501 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 504 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 505 0 obj <> endobj 506 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 504 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 507 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 508 0 obj <> endobj 509 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 507 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 510 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 511 0 obj <> endobj 512 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 510 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 513 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 514 0 obj <> endobj 515 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 513 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 516 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 517 0 obj <> endobj 518 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 516 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 519 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 520 0 obj <> endobj 521 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 519 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 522 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 523 0 obj <> endobj 524 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 522 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 525 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 526 0 obj <> endobj 527 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 525 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 528 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 529 0 obj <> endobj 530 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 528 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 531 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 532 0 obj <> endobj 533 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 531 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 534 0 obj << /Length 4888 /Filter /FlateDecode >> stream x=]dm+ـe( (gѼYA`Ԇ1kwtqMb=;"EHQC?l?Wx}%^(#d_,0}._9)^.10oG|/2)}B~0q|[?\!B?FRp?3{>Md24JC'#'g+kc@*$vp!~[>wÜpOo _Z{QH"TP,tA)!ւ+[,0'(+]yUT(fb끮 E$1b+g(+]4])|-D@ ғ-8 YDbv &Հ۷| rANwbHd->`[oRf,La\YA"]99L:ҳ@ `R>}h l ]0$oxD]vA;Ճt.Ԇh[ImAлEf91~eX3)/V\m<2[hܿ٧CG";e5-`Hvt` 7weвn3lInȻ%Ɇ#D>"B""9d6mam5Vt 7idWTXZ!kz|I\)\2(෗Zľ8vytBhSK f==;~΍v=~m<&A{3}MFEe|7QT?OYV9+vZ&ef>_Fk 7/}[Oh\_s¦}?7:$>G * ?H ~+'gTY+J`XOTFd+56F)ɑU~/c/GYfC+PBGC@0BXVJBT`Vdq5C5EW + ⋁&$ C@:̼GLՓx?v<ŐIx$ UL5ߚ96SD=ㄊ PH}BK;f`:|A fqiv\tp?L#܀GT\/:EOmą}䯟qTWEBy[KD8֐72r>ǽi8rh54vOBW7@إ&@u]X:*AHQ%N n 9г]O<NbX`xmF Q.&JU=큚G6">p yQ$,­8JP4kX-3$'c: c\T}(J}@L7lB}9~;Y䓫 ^ 0b4L0$aXu.&Z$@q ~M0&[g~gqÐ#[BrнAuW;*s EO'G;DH9@Qr 8B!=ެ(L0F DS m B % [T7GԲ?"e*"0WЏ,CC0E<lWON%hBV>yj:v8N{ TuZB#] y=.8XU)(vAu R&gV)k؁Vb(NXU7+#B} 0Dؚ&l+1Qbt\\=wFAvg騣GN5fBGV`WHkuH55`"Mc.CFvƞK@8kҼD1FUl15T=ed;##i RǕ# fߕaeȤ`w@I>` +f=45?J&ϧBm R |ӧ=H]QE>esI}OO)0ﰜ LGKd=U;-A˺9+X"'2 *e$f4s'P:B=+c:(Q(d^5eJ* OͰ-VWY1EO'EdU91~.LfN`@6ؒ*E* Yc)Q[lׯU]sv)]Ќ%bw9 -ft@3ݧEPs, w҄9kD>KMUWDf񌗓?Кn F1 .dţq08c>qvQ=Sv18 9p9-pk,'Ҥ.(%ԅ22~* +RSD[Bь.`C4V ]$tj N`v88ЫmHӝ#dO (r^ԑ^-3p4.TFK}VtF"1/0'>6*ݮC4,7WG蚶ByY=WLlt :F4vV<^8p x4G?,څQ){u'Efaw$=^Մ/r^xG8lAO~ob'O1l8EiuQs=Kv ]eej REmFbN;1HpRGfm>5zei%x&=zTYȆfWTVNuungu:יH^^lЧXK ٸTiHwL3vL.NI8mB%!}:&kU)xi\@B3FvwiF}:lܑ͜g^SgةsIL3xW&(fѮ^aBq;giLD.4 g:zu$]#y8I/ fnq'gW9]2y_n{6YtZ?U=eAZȮ-v.CL ~39hD#mmޢ8+4Kq8DGrIY8Yl<-ͮ^5i;6 y$a>$47eq2r2F3]NPުYe(r&R'3 :QA>2,+1&,\'&ɰ#WAN BؤEUzP=^}Tg >["*3 ǺlǛ^ֹeMν8Ǖ=Mi0'p2im`cl$`]㰲2l7qL {EUYR39&'f:Q]uϰIi/F0Z &F{hW2"2ǩuD,xatRDm6K>mZ7YN{5y<jzZs.ˢs2;LNzU& vQ/B'famtaxx0z:Ȇ%͠iodtLD#8H)>j)qSUlp%N?EU#%ÖS8LZ7._˟,BxpAXmg 1S ' ?\7X_U~PT(_+* UpHo{pk rREQ5˟" <^ҿAlRSA]_s5/rOyfi>ogΡ7#0+ɳz9<,2VG+{PjߋQO5̊ؕ(5Z g qqVSMZ 4;i, ۛS 8 ii3Zp%#iƑʁ3~4%4Ν) ~ E*Dž;YIƓNZ(&H_Ik4I8YIwQ ╤(#v;,A pq&jf0'(+]S-tZeO|yV{+ւ+{kR'0'( ]m @ ^&K5 +WmN OVc+IsƯ|דŁNSVm˶ dj2u <zI>:o 3RCXI{zpwˎDb/ ekVht ~[KF@mn=]2؃a+nt,o+< Üwt+-tiqk%goIe+OT endstream endobj 535 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 536 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 534 0 R /Group 535 0 R >> endobj 537 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 538 0 obj <> endobj 539 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 537 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 540 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 541 0 obj <> endobj 542 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 540 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 543 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 544 0 obj <> endobj 545 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 543 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 546 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 547 0 obj <> endobj 548 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 546 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 549 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 550 0 obj <> endobj 551 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 549 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 552 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 553 0 obj <> endobj 554 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 552 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 555 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 556 0 obj <> endobj 557 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 555 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 558 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 559 0 obj <> endobj 560 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 558 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 561 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 562 0 obj <> endobj 563 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 561 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 564 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 565 0 obj <> endobj 566 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 564 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 567 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 568 0 obj <> endobj 569 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 567 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 570 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 571 0 obj <> endobj 572 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 570 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 573 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 574 0 obj <> endobj 575 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 573 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 576 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 577 0 obj <> endobj 578 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 576 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 579 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 580 0 obj <> endobj 581 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 579 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 582 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 583 0 obj <> endobj 584 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 582 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 585 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 586 0 obj <> endobj 587 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 585 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 588 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 589 0 obj <> endobj 590 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 588 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 591 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 592 0 obj <> endobj 593 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 591 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 594 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 595 0 obj <> endobj 596 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 594 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 597 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 598 0 obj <> endobj 599 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 597 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 600 0 obj << /Length 5229 /Filter /FlateDecode >> stream x]߯\~bXII@ߚC6A0n6I9Gq|]_ Ofnu~DJ_oW_~__~o~>rwy!i! &11 9z{x1gY?{*3||AA?oz"V!Q=Oi=Š?4uh~y~!ɨ 'GCgu3V Ocy]-?)=m[{5_`Ѯ r3姡S P[yW͍⾖Q.YSD1R+Q RQ}-\6!J)p Z BDD4c cm}%7JFpRVD95 ,<B(*JTf!:ӛU9aItLw.œeݦψA$]3 /oE.c{ld7xy:Fyї|ye[N*|—Phd)@g+|Y&F8M^IFq^g5jl}sUn~4/9dTsSx!M?3 G@Աcn% /<QMh6k<uh6HIL tAD !H*y@SOJBV0 '=` KzCv89AP{L&s@ՕЍhXQG3%|#i"|.f$! >Qglb R&κ'73CK^,qq⍳,|0?V_V|*g娀 6` rR zfZP (ʎfh"z!iHL1l%O_ ᤌxۑ\gHȞ\iC5ɦZQ"j1 C4QyevQRj6\IY.47e _-l+`: 3̨Y^!ڇ.'N N;o7vኗp+,s6E,&h!ӝ2f(.U`I&F,ѝW=`#“9qƳ9RL.!WPH $̩27 Lf=`f(**(3jI\&Ns@x (.V03|5`\40<-!F܁B8|ZzKlHErTs'wqO\@Ld(tLN 5xfa5xjY(j#MׂݡV%'i?8=̢caGCvՍ0/aHAAj׿VS_L:Yel]%7Jק{Zv e2P(I{ZTPAOC1q;Vr~aFqW(7. ן7v,QMLHC?ޖFM%mE-bqXwl.?X~a+zʺ V2;716Ri+Z>߾wمߝ5ܖm.mܖ&z%O<*B{fi'i8GF? >#?_OT.|Uwds÷Ԭ=|6W(~#N#xos× 7{xO~;|f[[VeaIֿW8z[/det&L3dN-PUt\2-ƆfF|lZ{3lW 4;R;tf>.3:[4s:O:XyAOsk9Ff625,#ú+um3KOk9F/)MY+h[Q-$^Su-wf\h ѥeH7+|S2roouGk}n7Uqk[aqk[njoӭ>>bRx$#^tlWUȼ;EF&H+'Nj٣g3UJvkUz]%<]%X#.f_d{q @10c^ !IufӠ7nw>w1.B_KȳjFF3nqrΞuLW:!.SĐ3efo%H*~qϸLNzMv٢M/.C92PnQXܨ^vBeY;.Th Ѝ M ^?M^o=D4`[ ީ;zBroPK Bɗ / ;T(REP%QG.4/.\9Α M^8rޑl׉:nk}^\}Z_TQ'vd!pv39p%[8#ކrACvoT.#uГbu %|٦/{9٭w3{.#G<戓o8戃gxE,G<;p=i'/ODySHY9v-'Kq-3GO2@$# 9#NxC2R79} >KAnoPĭY=ouU@o~9LIP1~I^~|/ygߗKޯ藼|_./yY"U4閈&4iӤBҤMD=C?mFF@1MCLb YEm42Rcv DK22gd>Eݒ_`WZ٣eα98So #Gb_:ߓ=iؓ='ݓ0 t!#^d}@F&fؓnehFdCddOF:<ӓr}+JFR{c1Qĺi}i(VSR|.*QUO__0'8~Da8K%OCq-AowR*MUhjKFJX]i,/I˻zF*Z!Zm} UE[GuRNWCvg\4Ⱥ&)kѶ+D;nw*ZDYQ $<Ɗ'`X~KKέFq_ ӟ`K]I4("gOcyp(Z͍⮖QuPt1rI(njKHS_ -ⵎyi_(:O8LɺԲΔi)e.:ˮ?\eq=Q[;^WF-}`vg::٣_αpE]uZ.@sY5IY?~! K{Z\gFu>7nްj=P ^c:Fx [iz+hn nmzMOeesoiUk\[Q/ *9Rm cjqG_%6W]-r~=(=OjnbU7r>9(*mã5#Q-#T$,Wŧ8[qWǼbiZ`yL_Hpm"C׶⭎yi_ RZH:uP+ItU|k7ҮQ՟K4DEv2p]~9 R͍⾖QթKy+K)orq 5]rE Vseki< ԋ endstream endobj 601 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 602 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 600 0 R /Group 601 0 R >> endobj 603 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 604 0 obj <> endobj 605 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 603 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 606 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 607 0 obj <> endobj 608 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 606 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 609 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 610 0 obj <> endobj 611 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 609 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 612 0 obj << /Type /XObject /Subtype /Image /Width 336 /Height 249 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 121 /Filter /FlateDecode >> stream x10 0*`/g"!cѹ U*vFlw endstream endobj 613 0 obj << /Type /XObject /Subtype /Image /Width 336 /Height 249 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 614 0 R /Filter /DCTDecode /SMask 612 0 R >> stream JFIFC     C  P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?lӴHX¤h :TQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@E{egY˧j6\[DцIYOH h(((((((((((((((((((((((((((((((((((((((((((((((((KQ~>tկx'w}W>ѵ)t-dLQ'2XFN]c h.O1Ӧ ̳-gh,~j?k߆RcNޚXX.- s"_|~?U_wzCSWG3.Nx9uEQEQEW?W\%'EUo:Ȑ ־&K5Ë7k$zE]=`y#4!E93h6Ϗ>1gfϙw[0> G+V?oxZԡԬu׹}=epq鰐0v݆QEQEQEQEQEQEQEQEQEQEQEQEQEQE=_w}Kp!xK4 -Q9f'( I_ۏ O» (/54wSB?咜`U/C?XO5]E'OnmNң;w9Nx_Xt{>SݕE,.:#T@Wɬ;U2{צ~/??++f{W#>tD(Gz__o=;QV?iRhqqf2[dh((((((((((((((>[{Rh6iwqЛ'ug/~Lq HLGy/rO.n:ÊٷC|j}[Ӯ/>ᯅNj4+YkN{_s~xu{Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@j^iw:.fռ7Rw??oث+uľ.dBc-nt`uk)?U`|JY'7_ .H2рa 0Gb({UO>]&Oo@ISe/}Oe>uſŗcX\ȡ%n!naϋ~-G㧆#^uk?,j1+GnϖS63^&Ѹ+{;p5|Mx-}5=[z=|I/}~5Ͻg=߽}=?jqŻwgXQm*PJ~mo?`oا;Zu^cB# ni*$U4/NmHK{K;t%(UP;d|5W߄/¯-1iMՈQ1,rOrk~ ( ( ( ( ( ( ( ( ( ( ( ( ( ( NJlcƺG/)m#~kR>+xJ_.'!#z98 f~=׾#xWָR{Bv<44ߋ1^O[Y6șQXw\h\(E"1VR;A>zMSAu)U2xni r4;HC-ܟ1^kUQBB.''<@G6h}hO.WkVoxBid!,nP@+7i=U^[CT^Ѫ/=~c;׾xIZR58/Ȳ#~ jcmkzڽ.ZIܒ@#*ׂ4oYҭRs%FX |#/>xosHM0QEQEQEQEQEQEQEQEQEQEQEQEQEQEQE~#t?`?|{R|?87ǕuieGI2#7]yӚ|kGOrWѵ[ftB,70Y[?k`W:ߌb߈ZOCW;}jU2ej#Y4L4H7$6{sO'ܷ+ֿg7?q}|Wl?ʸ=(/_d{Ѿ E[֨LR<8PH9j-2ռmUhǩ1>Uv 2v޿$|:>38Z^r8i\6"d.b?ßW<>%gѵr2F`Q22{2^_u~ПoU~A7m_G_+쭜t+ȴ#O]Ԇ}lKa4bO}qf>j_+/ڏ$^5<.Fs&~BؕE-ֿd7&YkH]d;“)UV%$ċ_ G>xKO|7gUfx$ɠ J( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( +,u{C:l>eŒ%P $M|,K NKյ+TbS՜zTs@hQ_4/7˟)Wj?+?K@sYOp&9Ww{r;f=&(((({ՒV+ s$3` \u]iυXx"m /rn "c?*( ( ( *[Eֵvby2J8tJ1Tď~f>ᢾZ<Ϸ8:=z0%vo|5޾5H.=#IW9W'HmQ@Q@Q@Q@Q@Q@Q@Q@Q@$gu#K s[8 q~t?$SW,cNJKR"_CKN cw`3e^}=Ѧ݌@'{_";z/UyеH]-.߸q-k {^EX\ yX4;cIS_c_ ßfcRmHZi:5_2̮N2O5A0\ѺG2Š: PVHCX_|*Ul&O φ߶/}k ̷'IFYUO}1v`I…Qlnq?6+Sfz?d-"[Qjh:.#FϘ۶r%dH$ԑrȚb?wc'נ/z֙?*Ӯ4 s|ZA$t_WKCgrm#eUbʌB3vo?>/6VНb[=?Xm2^G6 U2!R.g)O>GӼ/uҴH/eKfUee ONٞ^6Y[ N}CIhU,%FI?QZ^k 7m,*$p3!UY@8 ӌW&૚DŽu ~۾Dӥ]Hxjё&m6(NI8h?7xsZmtKճȆݎ:)$ 6YH?6/ uB|`ckKCOciךLbHQdLo`h_ۓ*x7b|?cm?mႫ\̤$OEO?QWZ^Bj6h/cBAJ#tܤe@_v_|K#Vlf'YJ ,9xWUt.pkͭ]]Emu *} zWl)9M%Ig{Xf1\`"Ee ô?ׄ _O.!jeMyuO=d_.]bsdx iDz% 'HLb}5'w싯K8v?JʀЁ o ol-}y$ S獕F3t8+ |0w>_xiǯ-7n}s@M )"5r!BgD ~u$WO|?l-kßWfOng.5#+\I#ƓKItAO(d M[<֫z N; fʢU?._X_>Wu4Z}&K[WZ8Lav|` /+MG'|qW]wNrjiW|pԏSĞgxRtSm#!BHTw)5 "&,z^[ nDq*UHQH;<mx㿍ψ ym-aMSNvgYXq[8"*|Eqnm>6$s6xQ)Wj ^xJj0JlCi1C@Zr~UY7&?K>-GV6bIP;ch/gKX/W4:փȟQ1$5*Hnx(?d7¹~Nxs}Jլ} A bE~dXmo]_mRGn΅z3p?f6_>-|Y>*IX46Nfwvgf99 c(O 6.Ē_6g]u$WnRI;YX2?x`e0~7 m{I<("]%mMc/+ _'62'5=^[QoEbCf*bI,K:cGL6/"štn]Rv{;x焳e`X h_ wJZiw~-KIDf0}Q_P~V#x Z)Q2)ʤs1^E|r6Z8!YtZqNw瓎<|7ufqoK} v3s# 9ɯ*(!G)u'?7'Y =/o"&y Ex(?ǒi#ˠz)˵6ڻ;AH|WmQ]xkkዶaqcg1{hFIAcZ;>B'Ŀ_MG/4.IyY˂S*n9/D_^iiHTmKUm[Xcr9Qm#* wiz<1 | g>lsm2)RT!o=e߲{τ_0XMKᴵ&mX;\UKw=((((((((((((((((((((((((((((((((((((((((((((((k طc]-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\#+nIހ? endstream endobj 614 0 obj 9388 endobj 615 0 obj << /Type /XObject /Subtype /Image /Width 336 /Height 249 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 121 /Filter /FlateDecode >> stream x10 0*`/g"!cѹ U*vFlw endstream endobj 616 0 obj << /Type /XObject /Subtype /Image /Width 336 /Height 249 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 617 0 R /Filter /DCTDecode /SMask 615 0 R >> stream JFIFC     C  P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?lӴHX¤h :TQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@E{egY˧j6\[DцIYOH h(((((((((((((((((((((((((((((((((((((((((((((((((OpgZ1Q>sx_\4-+:kKo#DVI̥Z!Ago/]u? wP~`ހ?*+M??*7um|sԴmԖ1;ESzx5G_݇oMǷ#¾>8`"rIURd((:uM'/\jIcuhlr؏PE|_Я%h>CrhjGY+74K;aCz=; z(4~ӟOm[I'KZσJn,on|_Ð 3s$J?Vم6Pc9|~ Xx^#:VɕupȌ n)V+-&h$ ON$-† ׂT؃[:mAFL2?/2Swʕs  Sn.{.#ug8mC#͔)# oLz/6sJK +7/WQEk?EOkñMojrcy]Jk@}[U%~|;Ͼ mZ2m+,v8(((((((((((((Ef}oi^ڕw 9 f[kCk_ ~ /yi>i yO<;{0_mn1ku /K#O:LU?  CLxwlc xgo~[/<%s Kc5=J+K JYmՊ +On7ex^H<$dI6E?B?ok-v ؤP> L<_S'~!k6}cYrIVTEPE|gx_犠Qo^hBcqt`lX|yd7@<X>my+ūX486Z+G lͼ=z7CeiqZXYۦ4쪠=s_gëOm%oFsY$]QEQEQEQEQEQEQEQEQEQEQEQEQEQEWoŸ$k? hڃo=C[? mZDr1VsR?~*/I5kךƳv&ki[wcX^{&cY KծJZS? 5<$q+2ěclēgkf?[/ ]A_ >1}~/Lco>nDUJ3`+h(?<]_⇇>0S{-wº]d'[t-_헆|=Kwkciny"(Ib??Ӿ,|,=2%jlw$3߇W!>:_|%I'!H!8IvW_@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@˯YoRꟷ ?Z]YJh 9p>H_tѹyc 6 ~|h*7^׬^Y5{Edt`AA ~F?[CWl-lndiÏ]J'>]ל*N>i?hQm+?5^cS\A t+d3 W_ᏃަHuPq o:c=JK 03/|%4nVIF_x*2G  w ]_eߢf.e;S:}Ņ1q˻PH2a_G |;,mHX- ADE$rI4EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEq_OgO/П,5 XwKUUPZIQ#@YٕT@??{bxIVH5M{VC Cs,1HGNGL<1`b|3`xFЯ$dR?1%CA0qQ@Q@Q@Q@W /c-{=R@Vɧ{3G&}9oUx Ɵo L)-Ȗ5eYv*z((((N'uo6=@G m#N~K dH̹s88=h_>Ko&Ψy#gq+?4_Zx?U?v Ȉ),q8T,)0((((((((([45=3 5+ "Qգޢ6 ?T#z2(ҾZt#֛⯌चI__ŷƋ){X5WW?*BRxK˞^*?@?bxWi]Wx7VdVw[)r4{H0S_|GZA/ $DU bHI W˿s_DmoA%U~\߿!_4 J\iP_xxSʶA/3~O,fDxN )7?k6ѼQi:7oO}EƮѮMk!/T 2}NxgŰ~cu W~,dWٶMozPgOQc o<ӼH]M"vB-m 4aՑ^vsC#kK'7Lźs{)ǧ^C[s4xU[~&a?c+7|=CxgÃ:/E Z8X>V,Fs"/p43߉8u/B{&DV5)Y,oeTF@~t_n~*nb{{WEנ-FD< E`A m}ۓg?g/uVDѴ/iVnbFW`)q(*Fh6 |͉Ik !#,k-ug7F3(f8@"O<+ig,/-t-rѵ 3hz\ڭ;$67f)a`_:?ko?,s[eДHL^@M)%{ ֿ&| ? 5 Y; YVpYE~M sA K ~,nnt xFOb>jofFDeU~ '|1w]xCKImx1+*FѾPǏ9wZ }h-}f єY zo5"Tw.h3xbMS6s '5iUm|A⿈m[Eu kEIsyn$rqXH 5~_o)+X{orFU,8~j+ T`{aQ+ x3IմwWc$2MaqP¾d7K6αoC_4GghZ ,n8ee`AjEQEQEQEQEQE s[ck?ٟ<i~65][. ];@1H?Go>x῍6XxSҴ(I؝Od8$E#x #.GTn5vΏ-^فPAϙc:(%GK9`/{k{[ uYY5W/u^1~ӳ$8O)wGsS?- о߉4U/XbCQ@UgK߲z=Zƹ5#n魬X .s? W'Ox~I<=i:Kwr#w YV0w ~Q@Z/7yɧO_|>ia񅖜pjYܺB36yzGռ + 5O oIb S{ ݁_e;[/gxq\eo%-cM)Big?k WbZÏxQmG~4_MPv%̵g|&Rٚ("3 W^3pi(w{D[q Q5%_3_ƯZkoKkk6c&fD0 s:(;[S|pa I}+F7)|-;'`=xig3/?Q 5}[GRDQ[t)Di9PÿV#|:/Ξ,> yKml%(s֧ e$g셬6xY爟R-afn-8:g?ߋ?wRit S??(y %L,@_Vok\~;5-sZw-q k[^aFV!2h"7ƿJ_~J4Ż{;ei-Ɲ6>k1d,rwqu@~Is"~> !<FeqS_ѝ_gm|WJd~2|SżgfF kwY.JoRT@)X?W2hzf4ѢFUdM#!$nІFPNK 4G*RA}8Ùl-H=ɯ*G_ ?n/lB5M|7,вyZ Yckh"~џ?_Ӿ+)5vz+'Yd[x_,lSwE~~p? YW#&쏴AwIƬKgHvD'_I/ً;G,asH"kvs\oؼM)"63KEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW5cH?[t ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (k?ط}@ endstream endobj 617 0 obj 10904 endobj 618 0 obj << /Type /XObject /Subtype /Image /Width 336 /Height 249 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 104 /Filter /FlateDecode >> stream x1 g O>< endstream endobj 619 0 obj << /Type /XObject /Subtype /Image /Width 336 /Height 249 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 620 0 R /Filter /DCTDecode /SMask 618 0 R >> stream JFIFC     C  P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?袊((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((s?f¿>8|k;zEj^'cIidKKXf F%`(J؋56 OoZmu/c)hЌڀ? +kO&kq|>kxjsK;adWgCa;i~wI' Mk}Ցt K2 "P9>h((uࡿEoO?x)![ <f%~~ʿk/~Uk|[c dėg,vv/3I0j|%Ɵ >4kU]VŖ>$X?"KΞ)?࿉5MRƛZB#Z]CX2YHޏ*((((((((((((((O~Z/|3ѧ$xr 7 v-U3"!E}7g+ K_|Puk{6p;^`w.ٟb}krɺs@6]ZXǭcY?Jճq@W6lt}S/ߧi /{[ZOv_Cr1~X^1|1~π<}vN !(A%;2]KR&y"F2YOWLJoEfiVͧpA򲑹b%?(O|\>||U+mi|yyf' j"*b&$?m7>Ӵψ%|;/]P1,Eݕ5ߛl ^xoƾ0[{3ۧhe^`ҧ1S!E1c~ [|=f蚥i}ͭMH匕u>@8V䃚ɽ~{+_*C~'ߌG{'|?amJM-H$`?7=/Xs_wo5\} 6l- WiKK=ñEa@QEQEQEQEQEQEQEQEQEQEQEQEQEQE}_ [$~܁}[)+|$FV ੟|]}p"_å =G5hZOӚ߳5]ؓRS ^^ >.̑tD;|‚@b0{KIs_/rcw;<|BҀ??Y(}>6&_'tIos<ME ~䑹#Jb}߲τ>0+b~̞8dGԯ_ ;y S=X r"LqyΟۗ[?uSğfo 1O ~$r^*m7R8 |=E+JF4po I~, gċj &5OPq)`)&,T^l?lۓ?gƋY|8*: ɊV&a q_߰0o7٧U=WVX$HϕH 9C~$k+=/,Ěǃι1+?𥳐?Nsf/,ěOT-EEl q6PTQEQEQEQEQEQEQEQEQEQEQEQEQEQEZ5[z՟B[K lm ! R_Q٣K5m!Ma| *So)qP'Uzկ߁ k`5] P{yee*4cX9%M*2KA݀W>.AhTňOż?igrlfG7 |%#+exgvQ۷᭽ xF h?5_/ ­oK]|zcQ> gJ~4+|Z-8zKVo]O'Gg8_~ѣ_OENmfzb(?%T=ꤗ^k@\\Fk:ޒ޾ |ZavgWa79 )$ mHJ~7fSZO]Zk_xekYY:x# uE5[ĺB[BK۩/4ŝ%$ 㻯%^+)rv .z+((((((((((((((x/PAw[ZӭIXl+~:woL#"xwF;~;/S=m4o h^lX_TVcmٽ{~:_kOhwY_Gqgs nIu *AެNռyxe&e?#J/Ӭj:\Of?vt'y"+Hۤ }2@VH.?ŷu[O_wy_?voqӵo81Vr1Ǧ؉D4m8 ET4P9&%|>şZiwxF[WKmF\D9ر9}U[>㏅6>$|4ehujeC=rNA`x5/ v:? on E[M8sd́[<-O-~_wEH]^/O2ڏ5H&CUy?W~?tD|Q6f-t8?5P?܅󎣭}~?f~.`0xwEiˬjnȵue5w<-3 q|0漁mI,ۥ4Qڿ|;dq࢟gAx {ZbZv JA$l.і¨ =#$~ ޤ.¤;-E*E~e~˿t _D.6yiXFLg^8 !yl->[i'ϠE?`P"P|35~Zgđ6ֺv]@VgvK )cHa7xO]h7|-!ƿfU;wWsW?/~9mOO_xZ\LǗwc{zP5Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ c໯x7gҴLffbQY؅URĀ /hW r CsORm;FƦ&W$t8R39 WA?}; _S'߈_w$YxUl̆s"xYc#i8 [T܎7E~П3X;om4pÉ?>a_?+PE#6{A,l\Mk 9w2A`EPEPEPEPEPEPEPEPEPW\%qh젘7tE#э}%/b'O ?-/nEqS ȱw*_gշڿ^)]TOIӯ.HϊuK~/ƥ-d6)[/ȠĽcC?~ٶVPfjOrە̗ $-J7 q*9eu O}*2orI!ɑ 7r敘E.bvp=I8?3V>|l𕴰mxL?9Dg}h#? >2$ӖE|!C< ͕};Ccj Oϟeo'vtӬ-Mw=T 3Z]$Gtwpc%՗fo(m)%~!י?JƒI."HA]W-%W wKh? uW/m>ɬ$7Kvꖨ^0C x@?k~Zx kˈ|-v].;u$V6F-uUIcԟ-c_-ZΗg,+H3.a D &]ƿC7ZoTוּ]5yokB$"W?m~&ho$g-|[hٟè2<]K% p ]"Ko>P~xydJޑ}s:w&+ y`_;ĺ<A#mC4ڂ g`\fʪOj U^1Xi3xO[{`fZZF 0PN2HM~KuO xG#<_,Qi-1~qÞy"܊/_GٯKKkWԵI7 6Z}0 ; 3-ohNך4׺Dҫ{ rcYN08Z~p5oj11CyqfKkWsWHtտ:}%Kљcb@Cp#5O,?q!gukskh$C^b###l&Ӧ|Tld,"+o|.Pu'qI%) u /<+t i6zDr>!Fv~e63l&kcUua>gZ(%+[mBtAaܯ OrLu;~Qkx`_lȕC~¿8?iU: Q? {xUӵ > {=R81FWJJ]J~П/>ZΙW:_#iGjOe19Q_vN0MkSH?~o~%֓!C+c6WWui::Ow<#_*ִ"-U]z$D1!\DYHk.tvcy~sYjZ+$3ˡ4PڸnV@En+3bt=3ίi_^ZxsUVkjİf`2$RgY[(Y?? G6>R 4^[bvsxHΟV:ğ~߳|$xTuTDmb$Hc-HYFѴɺ(#weu1/yE'`wDYUwXHM+FTjFyw$~c3|NN_nM~Q@qh?෿?௞,厣tyn& sspR1#EUUETX}MK%|e?}_xsO];þ%5RdvD+(V~jw?x?٣ Pkàx6}Ok垛yu#˼yHe _?Y @|6_v֐Xki5 иIxU|񁟁w> CO eZ|G 5ZKoMO$Iɰ+ u Cv_O eeI?ut6W3 ;O]?C̨2w} ~P~??Z4 R^h58..m䳡SBFP+3 {>h&|axɦꚔwSL]4ţU ڶg<|sE~~?s_?J;d:Qx@Owrޱ%PAWg$015:5m{ &1*EGUlr#=Q@F5ьx ?7_9xo OfocPEv`%&V`~5Q@R+wU߃pz'!> du⍙}C il{+D'tDW !;_Pw;<>Y< ^=r5;UPʯvbTFUd dظ N(<cGe>M ^(Y>aZt/x>ǿ<['ڵ k}{MDFPE , k\ /Kh73۽(xMCVuڶ"E * nc%8 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (? endstream endobj 620 0 obj 10593 endobj 621 0 obj << /Type /XObject /Subtype /Image /Width 336 /Height 249 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 104 /Filter /FlateDecode >> stream x1 g O>< endstream endobj 622 0 obj << /Type /XObject /Subtype /Image /Width 336 /Height 249 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 623 0 R /Filter /DCTDecode /SMask 621 0 R >> stream JFIFC     C  P" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?袊((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((~ƿ_'xߊt;m_]|]GeiĬ ;;E VA-m6:c- *Gb0GjF_eα/N׾ @υoMiy,nـQ$W_ V=Ҽ_YO&<dĀs (֊(((Я'GC%x-Y#g n<ﴱϜAWaNW'o/gKkmc㽞i'EX .WPEt`?_N_nh<øV$k.~ֿnj~,ϟ|9/~u} U:[ҽc*E(?((((((((((((((`6KLIu |+ox%a ZEڰDdPzzkz_XoZԞM>Jƾw`";k#޿j(߳'#Iվ6~f##++H$'eG+zw剑e 1kh_cž6ڮGFꮬ2FC$J:e$kÿf;ȭin.'"D2xP$: SE{||-į 4cIm>kwe#rKI~$E~Oڛ/Oދm'Gӣ1噉.9@fdfo'擤n+gED[;GܽvYC IJWvT.w~b_U&!Q>7f흵ɳO4O6/0oiSYĘ||L>.5U[/Yѯ㺵K({H Z( %_h?SǝR"#ƕᘙk6(9 }9_WZj^;ChǧiS6,$V[cz=b((((((((((((((O43xG Y-9'3 2Qo vjb kXƺ $h_Oa}C;~^<|W ~7ۥѴْ9٥Hʀp!X+8FogoZOhmট;E|/sihVz:-@jHU$WXd?gE{.^vf}=.d_ 90GC~f~D? b3'c~){y/. '`#Mj9/Q6ěTNQJE*pF4pI(?S)g;LO+~']{QUϧϪܧ[8̰AJ5~)|p=dɬxOcj;*Xtb P  >[-gƚۭkU3\P yMz_'ßi?GᏍ5+!&࣯C}Nψ;oLnAF+("n5kyc AxMYDr z~A3kǵ|EPEPEPEPEPEPEPEPEPEPEPEPEPEPׅ5oSQo"}A4n$Sٕ UU/HkV?l5,n 2LUF Bw| 8_m>-?5xowSpѱB78 +?.Vq"?h=*$5w`x{ gSƧgw. _4͕XB_Im~g )$FB[R>| ;>?=%ʸh(;{ۇ XCCzǗVsNz'k?93&:}?~A_J?mٓFx>|jegXjo?57_&Sf(^ 4x ux|◄.\[m3?ؤ6[YCQؕ#,g߲7~7_,/z4so%=żsV6F\;*J>xO >ЋgSx FYT[[ X@TQEQ_qO)ړ /xV}͕eD)<*BE ~I|Wm#Sɚ\e=_ 4ԵVf+ 2|C^+SMNkGRI<9wvf$kAq"\,k3- qSrrvF;Qp8 ((((((((((((((~Ծ+|Ox^ҭ[8ˊ s ? MFK-s||Uᯃ_ųм'Y5 mmHb_V֫kViA~S4 wGNeoj]j6XhdPGPTt \L 'u:o_ӮjEb>i~ut(ZW!6€?;~2| GmSy];~|Uk?O;?~/n~$5 мkXl$רPEP\~ğ i{xB5GZʇº ?+xPNwڐwbz}'_ā5iWN7Io;CX~a1jZqU`EPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_|%Wz_QA?nw`x~yml2 H:>McG_4Լ;M/4moHh.lCtu ЂA$W9Ӽ;a _z5G Ln1]<O "GE4St{y?(r= x}5~ ~^jCटTo |\aX "DŽh  [Yfڻr>aUUM*c~/~1HX/uUiv +A]ͲT+"nm0`Ҋ&Z~Ԛ/Q}.mgJ/qf1q_Ax\$x[DmnoۗK7%m^w> @uo[{,꟰E?zSZk Ip~InSty_O(uxr?mqB>#%.x-4g^vB¿~'|O[׍5/x_{g[{݉$ aQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ];f3;ןf{-`ٙ4EgyEVf k//LڟƟwզ^}/Bή3[n#‘?zI52ο,L(?ke_V>l 5. gux`;6|EPEPEPEPE}z?T/;AtOYӯ$X BGP}qyj!8WgMkݗ񗇧-|Yu(N-\Y;L2CK.Y־?,&7WoF@={=Uw^#KỈԕ3s7 f]"U_~-xᯄf'Q÷:z%kVq@ E~kZwgccnw/X1l* $&e?bO ?ď)c|7eҵxU<ܤЪf  E|w ;E%iyqi$vW>68de!]\A*sdu ov\$no"p?(?ho$w_~?sEu߅zA,1-L,ܹvIC^~dnYLNLC#mbT7?ss>9,ӻFؿds_d%?km.<0Kg"@}|7BO;o߱w+xLH"6ZiJ\Y 2$ v?-xw ~ wQ&Nv4m[>}ZMFm"aMKOTH:H Lά6Iࢿop|DOc&y*9fTݸh8c_m_}J4Vvs*AZcº]OkC^{m٣WtV Irk  KNu_v1~s ͽ繞X"<E? 3Y>/La_O5yz!wMDXyP)?mgtRUIn]Y^(x0wo  im7pYxH?jtiH$uaħn;b;?Jwiw( m^~ =« g:qq}k: dy O8FQr ȇ;ӟ7N];O4m:f5OY:ߑ%e-v!P^5dR&^S39Hw@+g jhR2J?5 %9|5/kP>xY5> n\X 10FW&9 <i'OW?,|DLy:nśhS7W_x h?lOPsk-HοI໿ UKR/:tO=N=. 5 is2Zo :>Yk׷TG70$B$U[x?m'G"zZGy7yfi3~2/x# Qt?$yLx-ߌS755%{[ѕ{TRNr=_ ,?|HW;i ĺdvs->Z*@O hD[7>?xVB۝Xɯ $F]csm/[ѿ//þŏlC[mNUPK}~~2q4ߴogY{ScO cؖVh& C) E!FAeo\= //UUTU@X|ŋW՟I;Kş~ʿC?<5.hICǗtE}E _PxN$3'{-6-1F%yV$Ue _Z' C|3[fᾎ]]k5 ظIxU|D*A'w<`g? l?য়Ġ-#UtQg5^LO$HH d[i|X|1s ,NⲰӴ\`κvf~Pd v '?`o(?o+z[^l@j^^ܵgBn(0 S<'roK_hi47w&bѢy8@#|POmOJ u/ `, i,$s1Ue,O$ˢ7o~%w EnK巚n<>n23Ex+ /$K=[w'Qk9)@3Oxygf`$0fH]hꭎ@c$g gWEFF%*|?hV8X59-/gGTRDHbL˜_ K$>7_|Q+gfW[Mb(ٚ7ޟ43^O.`1WV*W/;; SO^Ӿ2tP^j?6:Ɠ:cBA1 }ӯ+s a $HKx[K׼WđC2=ىR5w$kU+bn$:?cGE>MÚ߈!<;b#Ey{ #80h"#^"|E|5|k|+y5 :@I$ 13 qয়Nomw.p[{"b7rNX oh(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( endstream endobj 623 0 obj 10773 endobj 624 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 625 0 obj <> endobj 626 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 624 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 627 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 628 0 obj <> endobj 629 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 627 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 630 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 631 0 obj <> endobj 632 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 630 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 633 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 634 0 obj <> endobj 635 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 633 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 636 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 637 0 obj <> endobj 638 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 636 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 639 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 640 0 obj <> endobj 641 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 639 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 642 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 643 0 obj <> endobj 644 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 642 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 645 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 646 0 obj <> endobj 647 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 645 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 648 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 649 0 obj <> endobj 650 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 648 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 651 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 652 0 obj <> endobj 653 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 651 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 654 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 655 0 obj <> endobj 656 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 654 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 657 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 658 0 obj <> endobj 659 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 657 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 660 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 661 0 obj <> endobj 662 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 660 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 663 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 664 0 obj <> endobj 665 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 663 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 666 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 667 0 obj <> endobj 668 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 666 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 669 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 670 0 obj <> endobj 671 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 669 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 672 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 673 0 obj <> endobj 674 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 672 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 675 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 676 0 obj <> endobj 677 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 675 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 678 0 obj << /Length 3284 /Filter /FlateDecode >> stream xێ\}bX/$(8vѼ5 0$u`:)/5;9Ѥq%/˝!)w]·~ۿݻOO}~}|_p̯~/ہA߂o)0rƆW/#uuFrlowəg0i;>ۏ$_|DiGaПFÇ:?O?O1>ɟ`-6E?0_ׇǀ62V =ԳH|o8=_}rI ?}Sm큥*r*PRV s~5D" Gs2b+/C,IO3\8]hGeUUQ:XtR-;i{ !ýۧ<|3(SޜjSJ1D dcdS1iLJ*bCx#ɟaPԿ``ͣ2g,4O{p%wHH&!G9ʒWu,{i'>ƬUaNtCxV"+ ?I VBDДP-y)FUR,}MYng3./Fkq5·Wg#*o~D Ȅf0Ԍ~ϵ["[_+Q?rڛhA>yE]dA?Zѯ[[ydȁ`1lE_s|^ִO%p $-ofMϬKiEZgo3hh,/Z/Zn/F}*q=+-2:9,.zHc-gqD8EsZ_þt]Zl4+qJsa p>pFbsgK|.H0(룄S4ֻO+26XA`El=|%$ Iqmbx,SÓ䚕7/E @ް_hbVA^(}e'W20S6Ena20-dxRF:;uMPټeW/lZ2CX"Wr4O5 xxWRO_>'_~_ª΄ʁuAEV>xxd UQYB=MT)IS.;gڔLyOovhHP?>iH7c:xM~ LtUvόȷtᖼXoɋbaE^[/WL _DKRG>R)us@P!7H\ۻCsE Osc$񛭂JkbDs{f[[v+b9Z7󖼕8 *f&|~<,@4:'&**<0C e&pбT>wHwH<0Ǟf' I@ |:0!#rI+)aҒ+jA7&6UnSŔ!EK8&M\E MvV C14tt]+QB[Yj+iMañPL,աf` k+ ͚6[&.7R;JY*պO8SNXCw(f4tY*KW' kP:ƽ. endstream endobj 679 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 680 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 678 0 R /Group 679 0 R >> endobj 681 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 682 0 obj <> endobj 683 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 681 0 R /Length 8573 /Filter /FlateDecode >> stream xˎ$q6/׆Wc؂ѳ7~}gVQ3s` AJƙTY$GxRv-5~<o·_[VOG-o|HW=_g||=)*,u9]&wLˣ҈,’c1׋0dhuȦfA㑱qvMßxkU&A1w1c)"o8L\dx.R/m#crk$`{J, P~ ʼ'dP/G c 1b-ϖs- t]4;WCqѵͫצlGTz]tmE aymIt_{^IdcVfK"flџ1p.tVc !~̦D0dXI湩( ,CQ}I6 GeO:GѠ,6b0a*#*mvd:[U~l ^s;1J~hYJLL}ȳvL% c@׊\ E=֡[daTCS|I/uـ_ Y'c3q 039T>|dE]./l3"? z*T1-rIF]N^]:3a:t:āXlw(eخnM]֥7[2i̘ԡw-#8De$Il// uF X')?2B֢,s4H57Qw 2{@!rvDD6__,ЗPR+BM q1D{)AQYK} O w(|4*%Fc aIVu3( ^}[ O(:;A]OU9x<44bK@ zѐhB)aCСE :bJY̺OͱS);ӟgB7ޤ$sU4@rWLI-">9˱D)wEm. s=A53h $CAơ!dLNAԲL7@R`:$*LCiGC1PVP7rWhH"immM1Gi.*G_l(f 8NΟPRs'$&h|8 HwsBB$1d lJ ȍhȠ [B pYn/5b~^dDg&& :8:"}Lƥ䜦A9rF-H}gwNU"bheQ-k;XX[;PŕgG`#9 l5Oa[6#q;zEC 8dYzA?e(랔D;Lpńm٠Q@ wjux2(qba=T 9GTe8Y(TCQ!Rrw&39CK/=)/e fAD}_ 6;#3\423z;Y8 տYl*3Wn-W'w3-.peYdIz#k.QwtuGGQwt{;C9T/K_`'N\Aނ/e,Aw>ws/R,AIheb(meTDVbP \b%iwm=dL}":/A hi EYj AhV־HL_J:k2Att1/:鬳-8bhczwW4uuL(RT&AEPz>kΠdP (wcPҪӰMxkrkڄٷc<%XhϲE5xώ:tIrڸAhp:V]_։m;Rg:%=M: +KFvA'eєD-H& eؙYx'ҡDHl@;AKLrem h3Vn}fwާzBS} G8[[[[[G.謳ZFɲF۰ZQrD,k YIddDg Rh{UfY? =+PW"VCf_B3?/e+Y\FA=V ,, Ӥ<ťeE# Vf{Z kSގҧr6͞5CIOpX7AEf 9:vOKpdTEAoLe8TF5l3Ԫ^agu| }e%$)p:l-+<;VX Y= OE2v76(9FЎ m}8TVvqn|V Yq~eαy:24'9v&.wy)ILoLI KuA~촂0#cukC(CPiUlbJVNiM[(2"K4h0$-#kF]U:僧kφd*̒COR|j73 Z!vJjf,a\Y%lFn}sڵ6YaĈeElHT5WBPهYOV˘l>crL0jrh0P b  z$G(M)NOqؓNo~}+U8"z>!,)CLaAC ̕>m|!إ$3"xDw H۠A3E:|9iq+dw)>O[|4\S,.fh .r3AS1* -(^x-UI@^沉ޱݵƻ p 4CTrGuG/YoG6/y"X(h=Ia񒒱dsL ChY"(D6똗zK٥8DZPгUvc+]T˞2˳=1o AHB`vll-nY%a45E$ Uq̌rłxT,Z5X^1]h,2xѠ6z6gR{ jK=2M:] l6qּf4e8'=!w R]M [>V*6t9TRo`-E`>&P0hѹ phjVr#J-E=0WvEpV6hb+Luo!ѡi+b& .q\hjÖ:Edh*=PG<,&6QwgBf[1i]Y]*gf#!⌼,7۱![.'*m~M ."2b2.YyFb6w5ea%=I˻tu'h8 0 0 0[aN!JrƦ0' ծR(EwpsȐ5!X6\@dA @{D9֝sGI۔ L LV hf5k.fV%Dbc~6^a8:/Y[| l>ٷ :7j@eA+ksgZALDMsiCqEr؋·+аV&i3U R&{9Mw7,.SW{s) ZM1MDk:ƕVEHыآ;%r` 7b>,?6QAbCU6J%P')I9TPddM>6|X8KB쨡lՇo$At8lWGB7Ak4 n-VɅtTN ct=2v,<;KMy AXT=G{)JVy/ґ_wםug_w?ZW =W8,UƏBb`%q~f# x@Ml5֬ jTZkՌmG N\PDc b7눳P^#u5Cَ,- pMDa#8${4'Ysn;Z΍=3( 7Lc!2gPв InoP[5(jk{.q;u(ΥȖQA1n4G[ A]uLph搧4C#>6(C=;ç`:'(jo~G!_P"ӹLY-ޛFХ ,4]s1N]#:Y IAngbCF²'ZRp5, Kxc7?2ٷCAWeS` fġw1x ×GY%HA4jS&G٠V%fMbGD4B"OPZ-NS=j_M1lʬP!ZG'phؙ5@+Ե~}A:gae6<9u,:(/u%ZAβߥn-cy&i|e*L21dD e-Dڭ"xFKdqwvt yV؃r!;[F5.j\ S# VۃH\YBmgZDf70*IT S7%:VL<w5NAGZ33յgB= ѵ!WD,j%Xqgr(!Ƞ5o Q<_ 1p(hM95Q1^U%cN0h PJΆ1tm9ݎ }hteY'o-*<+w4yGcјw4h̆_tEENad endstream endobj 684 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 685 0 obj <> endobj 686 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 684 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 687 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 688 0 obj <> endobj 689 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 687 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 690 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 691 0 obj <> endobj 692 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 690 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 693 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 694 0 obj <> endobj 695 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 693 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 696 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 697 0 obj <> endobj 698 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 696 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 699 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 700 0 obj <> endobj 701 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 699 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 702 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 703 0 obj <> endobj 704 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 702 0 R /Length 236 /Filter /FlateDecode >> stream xڽJ1 ym t{O ^|}apGR)_ DFUQK6FkpLo %<,2":Q&O> endobj 706 0 obj <> endobj 707 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 705 0 R /Length 231 /Filter /FlateDecode >> stream xڽj0 z <ɲlvVN+^Bhî1e}@>H{['`2J DP-"x$oXд$&e|{#-9ѭl繕OPduDOYVkyA/q%.[ C˿/#~k uV%ZSPB"XCN pPBnsgwy&=MN^ endstream endobj 708 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 709 0 obj <> endobj 710 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 708 0 R /Length 252 /Filter /FlateDecode >> stream xڽJ1EI4tW`#=J68lnuD 7<`7g#r*(Ɋp&pJ{O KK]*ޗ4zp`=[ش!FzЁiC҉i-=&A7W1S v)P^ ާV$x3hz ͣZFBY]Nzs#9J|ޑ endstream endobj 711 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 712 0 obj <> endobj 713 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 711 0 R /Length 240 /Filter /FlateDecode >> stream xڽMj1 :.Pն$@($)dƻUC !Clzt v;'׃'~;:<Ýx[90#,$ŏzT~rczKs MSTmiҶizZw8jCt8](䏷o{TfSU94_ 8{(W|>pƙ-9ؓݓb3`﫷 endstream endobj 714 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 715 0 obj <> endobj 716 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 714 0 R /Length 260 /Filter /FlateDecode >> stream xŔJ1 }i> t&8^kC4R1ƺ3<=C)"p"df`NMLecr$1[,epExRQ;lR~́y)e~^dӊ•?5+2m҈9o7 ސy}+|ȶͧVxCemKIkE#wu̮Dǘ!E , լ:fj0Tq.C`BGIp  endstream endobj 717 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 718 0 obj <> endobj 719 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 717 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 720 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 721 0 obj <> endobj 722 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 720 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 723 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 724 0 obj <> endobj 725 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 723 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 726 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 727 0 obj <> endobj 728 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 726 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 729 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 730 0 obj <> endobj 731 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 729 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 732 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 733 0 obj <> endobj 734 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 732 0 R /Length 8683 /Filter /FlateDecode >> stream xɎIr< +MgAP<.z}EDYl1A 0 uFf/_#>J,5~8S ۿ·Ϸx+| >Q|QJ-G'= zOvW#2Ogo?_OP#8;9<'QP~& /c=Ay|!Jn |9Ԏ7y_rhb0"y9`7b^[{3\GK1U@UРhAۚi2︁Mϋ2?N2Q"g/Z kzL YӾCXǟ :c4nDYG1=Y.  (]@̡I21>gMly/bf-'I>܈ϋ :.tB9 208I<”¡)~&_ܣ'7S!yx (UH.-k؆ResgZ*,2מNnY)@rL{ʘd%|ӔW(pPx LM%ʋ2~u;߱}9DPdb}6+.2()bP`ٹiUȠtLREu:KO\2\$`fnQ*G2GHnj\lPunC;ih*&pR'5Q0d?ex <7 kQаfaP!\eP ΋ "T, b{L S5K0{ p p p B}!A>>>>|Gu!lsPs[ԞuY+)ϧ?(xe;~N㓔߃Kkr<CaYƨoIlT x0˲,pC] }k?AѐӐѐwɒ:JKsh`x?qdX2 &$D{WLqv뙒&j~wg`gsl.TgL+㐝JC0aWsvU\,+%j~ϳags(jD0:*.(.+.).s% 84S(āXe2KvK~dMG 1ai`PWHPjt8~-嗀x{I쪞l@0aL` :z0|\Xysjf z J=]@E3ѭnS-%Y"4p9 e1xK oPĐpjZXkTHoO -ɠ*ꈮl5aiba ڊAHG@ЇpAN P&̤灀'óm()NY9DԾ1P#6 سSJr0l N^V2eQUzϟ@\)Ib>zM((;q.8b ;-RȽ`t-  (cPOV4PQUΈ,g rGfO'Ko f29Ӫ4Yt{]uc Hm0\^]fq,.$=;`d1#K1%E^QApaMp8wQ u4>HgF .@ALw̰Sehc 9]0{ rKy۳0b\,ΙE3h,cZi_/VR3Ju*=X>-j췷̉h9Uof j+Y_ƿ_98=뼃(S2 yֱvR%gɤ}}@PynVѡ C]7`C;K,EwZE wyʆ>=S@boPS#3}:;"a|b%ʒQj9x-DeuL,z;/1;jK{cwTq~%:\rOo@xwnmMp81p̌*&Sъ%ȧl2>߂-0N zyIaZJ F>e! *dAX߀3n|NR?=Bh r 9 b/9)\ƕpܑB*IR۰*Nkh@wyDGDnW5>q1ױϧGJX$>P˲DD'j-p䭉3"X[6e[6e[6SȦ)E-#Kf O[a9ɡ4U8g@En xQO/0@X~@V!Cy53*8+̖"~Ϡ_]8g;K3p^-AYVkDӌ\4$BfYbX=0:0e;;i'e7pA< i-2ޡH]Ah CջM`RdN?SqO)2"sb;o[;o[RmL+]uFi4i.a=> C5wƸ5Y ޞ.>Sp~Ocl*@x #\eXY&}0e:2n \]J>'WQ(7bKm/ak ~="Hbp"" K%f\̌3(i_ɲ;wD+Twf C{Dsp{Pɖgr(hu-=VIqnu6hm=x{A U|uu:M6z$ҷƞWК";yn KfC:)0Χ;B ;6k,wR`knTbТuxE&6y 4WIU=ܝ}U'ՈUL>95VY{UG4!75Nu%\ *aj7/j|DM5Vskuz^dP~voT#rFl5h Z}Pvi`a<D kP (7FͰN`hS:AHt1|{wXX TL>dP>T1>yiHz"1͠GC [)Ѐ.Yux+.[A2QcD^T4/>C>kCtM qpRȌ1T!8\Ͱh5RL4CAjCvyQwԴsj\W-# wVb$Z8uF;%1V;Z`Y9( 7,"L")x,8n)ɧ Zl#Ȁhޘa 16ƴAFǃH[%UyJhe GG]_*&̴2.IfDl1uPP@hP t|0ԏ]-R4 Z=H)ЎdP6 R? ԫwW#1kȰw2]%@`ȆlqQCXr}BТ=.vhU:IܽjD5K|.B"hR&eHá4~O}tkCHNuʉխd( LX~2",j$;ZJ Lhsꚬ:ƪ3򖮖ԒΤ f{JӴ-QLq18Tub ڛ,  W0[HtCyUmp!ʭʭʭʭ+1 [|n|n|n|n^9}Yh:;Yv-?YhՓ$D#3:hHtb'homro1R꒍D,[y)V%jgZYa)Ol4~ $.=X\4{HSoX`Di1l25J+i @ sy>ff(h*דq(jFm Ry&(9W]Yysh ``04[9ij2%Sˡ3*\q.у%#kE:O8&361 KY@!;btbĽǛCK_AJDsLt^& >mBfQD"3#ypTC $eG/ zGkMA4M)GjeVq(hNa:&2Da-ἣbbܰzmb)NфJkxiZNyGA2HmDP)'KzphQ1 2x&`{9yAbi!%GeR~A3Zͫ%$8%$ВCK -i6$(7o7rfmCr*zp`<6 eKbڱAea =fggekyo{ZQ5LydұTGe ~ijI+Kyga!滅7-5FXʹ #`<MX181hέTRf8kEѰpfαC,3)jBc'P ;3 ;3RFۦ8 TqxIY[bM=fe ⤡ToY,8MB̺6zcb"xF#{gSU6_Irǰ*ϒZIre|7!6LHUxhѥwIE3O *Nw8^hT;|G&΁#j]u-8lf+ >]fnsaS@Xw:z04ݠV?~MWjZI βL⧏TQCTΪ8 [zژX,0AT =9'ϪDcPzc83Mz@Es}읎m6Qd3񫎴Əh@} !ȯJPͳT 805ȮQV:-HRî4/W(`J,m3}V'^0^=d8lbS3qo ^"gPІبYXk *^X]v:شu;fں ě =+5C->([7Ez*ߐѣ}RCtG08MƲk$Jpz?%X`"V_kg=y׮Q^H+g*NF~ Ri؜󌉦._`q\{V KƴgØL-,]ti~J]=c{ J̔D~Sf'u"3i> endobj 736 0 obj <> endobj 737 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 735 0 R /Length 8815 /Filter /FlateDecode >> stream xˎr\ /ւV {+"͒dKS>M~>#}oR8}?} #|# rD91>J<^_gzڏP,.VG]oW_>9H a9+zң>z }@?|pr>mJ 8C4*iGKudCȤ;ŨܗCEkMavtCد{Yz=:d&paP˴ww򟂧]=zҔv6 JzHEX7 ^N$ ,yl˯Ҡ&=׻AVDi6s*ݠ IggfL*AxG Aݰj9WEИ_PvF±cn$(Q& /=PvxuP%.o:T%e!-UUK`/뼟RoPsA>]*GUEkСuh *6U.IDiWme/(xVP`J7wKAA X7v<z p p p |-o~[|#qF NPgduȧ[}=5T=M,0:}=̐YVgYsZvfIbDƲIp_' ep}$KX g(qR5sn4JSC\! R-5!'n4[v)=;VBkݘ \4Rx<0wy5a6Q/ǠD8y^2i)yʢr N8C0(AHtPƒG!CiB(iǾ.ˎ+,x[SK, ~(42̯ůg9麙UBjZĝo6c;Duu&b8EA rJpLgcJg~|/q|MLQaØxk#$sߌ(`#qG[`2-zoz+):m&]xĊwO]<.)~$V0aA1,3$9Ô!bOl! p&"XMMفs~s4p5: DHo@0ruq"O Y6>q۹naxxjl}i~U"S6V%5 itFAwaJ˲K||ҝexo~β#jeC-&>a!gF BxSR"Ň _[TSj|-/?lQ-Xbv,;(H ےߴ%pgLy@O0J.vmݮ۵un_QC9ìȚ0;XlxM?'InC>a1A||8'd3c ̠ w }AJ Uo!zΡ55Ppi\P@xk\m8G`j4AV_⑅yfoW<&A39 `d/%SΣ eiqp$æG6W)M9wۯU ]D` ` ` fHi)9E2M2"'*;M@&y;TS>Mk6ݣs0깴Zu5$5)tԭp -Ҡ?q2wGeX23 B /}ezβ =ezg D)332R-,MYr!{&Ɖ6vhvAD}^_3"qCtGbE":A b'fDu bxzA\QZ\b]V|`vC}yзNhgtBG@J7CCC!hۛ)jKnЎM'4 vBӐq!cJskޚ-ЀFkؤU / K#҈4.K#҈vι˓B?+f,͂2*4UNɅ: ?6N!*<$CMbYYO[=2%˨D(iU-c.+p,.D,I);ɵh-m[}vFZ@?0'VvUh,6(Z}CQ 2P1W6R1e+"Hhq Ь ֦Ax`)t^xGGAWM?QֆIu΢+C $1НKKQ.go;8_]?mϠ <Ϡ4}mfc9$7%.LTj+wR)i4o1#l{y9 gzEUI0!+oox z*P/N:QpDxBb9~P; c۬V&R-x*A7&s:(˻cKCI{޹BZt зPۭa|%5`7L22:zEJpEw*r#BAnـbc3y1iv}gX܂1hV,^8K*KO%'?DT޾C;VV^2( +PfD ۩F UJR R#]itd"wuf~{r!= -TNV_PnymY 3}n6yWq@gpǃ?BiqbgzQ;z"9ϐ~ʚ_2NT=Z6䭰QBhcCd1R:1ƧGAB3:T6M)U}ԈM MP =CfU5!.!\ޏC\1.g}r-"U8N@͝ufݩYwj֝fm;Ď;N[N((ܮa)TۼPeUTլ YDn L{e_5Zj};$ϨAT`jTdѐCmqnx7)uuL(@fC"Wʱu;U$D1Єɫ% ؞-> ):hzr;?dPfMMIAAl%{:'iUZZ#+_3tnXue8dIliqDX5ݞӤLh˖i@{Ӡ߃=*' d>P #;P)j؇m 3S~5͕ D~wABr" kS1SN@H5РV1BcM̚a AMghVOC6kIR4`XFn}8*Gf O ^ΔPP >ȤᣙF2S j luZ̐ZC_!ddȿ@P@t ЇkF0.`(=vc٦DѮ)/@Y[pc :6Ur}8TM n4ӄiXUz F;BgbhAEC"QeMi y}?,DM<<<<ÿ10(oVnUVnUVnUVnUVTjl.v+i2 _Xekn=XR4Ѱ~;NrÖ,s0vBv,qH̝WߣeY"by _}DH|D5 $%kC])PtD> kP_v"5(a EQ DʽA}VVzi9%8RȣܡqEN0Qrg4Y _)itODX,$SչL;bke3 6GF'~ɨ\Cw+оw|Զ,xC^elV'3ȳbH٠nVzV-D1t*,$Y@%;J"͘~1HFٕ柖6-ZjvRXE֠Vn3-5h#lr  F*y,+N:`=S`cM.SXP[m)]ߒ K!h_&nI0-9:u n ܇| Ѵ߄c9xNSv4)sV$pDWvvO䎪М̒%9,(^LNNk04‰Vbئֶ١mCi;v:UF2-qVHաch!ak[iy͌kmxvAbT N9u4no2Yd+">&?<,蘗e0۱]zы@NyVXPV)Amw*}ťE`{`ATw4"%t&6nXDmgb1Ѡ3m"i9*Pσ o&1 U t6|C3qNqnP}v-m;Դ$tBe}'g&**Z6]q-#CBlHv/ePvy g` Z~ly說k :1tEcDP S g'D6Jw =ghJ&a†';yg~ah{&%D=UzAM@=PґdjL Kc[=j~Bʡ1J-K7%1H,k/#ϏP5g74AT?OY]I瓞ˆMSDKgY:{GAcΰa#0uhR~K7dokKf70A9f 0zLb,Y7 9UG·hP_,%j^b/mWva{;l mC3Sp&3NKӦm4I1Y/o:T5h\f7$Ŵt8(S 0R;Հ 1h:"e3ݡ!Z5Q4"16JTZtXu*;e)S[e3 sMO*hfjDzڜz%͟"l&0Ʋ &6W)?&vݪjߪjߪj v MA'Y69PҤ[3N>UPjH̭5 {'eAI;NNu[yZNW&h4s$wv&ҙx Σ*;Xfό!͗( ԁ*I!JQ՞Q@㬔54ӠE͕6 ;E65*iR%&αo^9T5Kr^֎8zYc"l6LޙlTS0qrPP3,!e@TrXƲ}V6L9R*W-2CzLL XS?j: Vdɺ3ҟa:E#Ireĕ+&I.%}іYZ[gȊ屉iG H^PѦKUR6l'Rj[}*~SZYG}94u*h6 &V֙aZYgb+kdWeۯY'f<jztj!AiC [*PY?)tC sD^6ľڙ2A7evlLqgr} bFR0 NZ3^K ̥5D; ]PGT$fr 4V9l}қCC ``bF|^lQP}B!l6;SS"8y`V^5C0s>=j0Z6A4A.J.3e{8H=Gl%8wD$ rIhaah> endobj 739 0 obj <> endobj 740 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 738 0 R /Length 8912 /Filter /FlateDecode >> stream xn$IrEZ `ߏ_NkA+ @`-F""^s7KV @=BwanoG-?(g?pߏy~[[<+?JxzDQK)ϷsU!}bydU~K _#?_:0ayZ xG G+r/QS=A97\Oyr}x|9T90r=oG fy[C1[?rxĉs=K@UAQU;͐1,hPga=A]9X!p_ RòKPu'2P>NJcTϏb*,)="r{?pxEwf"i9vQ冬ym>=]=yl=U\ ﺊTqQDX/4A8xSN "2@PUڠ:8K&˙]lmmmmPC"*­"*­"*­"*=p]kgwB"H&5hc4lx,+xy~rXpD[K<>3uG,9.` MXĠCB)Dy(ʷ9*CAߖAWlP r ':Czw}Tɚ27kv^m& ^$)~bXi>ȘۗQ~3AH8P3UdմK(kJO1;pAVqBҴ/P6AQv;RpN-W -?(UDp:w4>a ~S5Z-BI5qcu+4gP$ :oEfL$иWp~*2AvSt7xaHSjʏ.B=.V=fUkE*YzlO,5Ծ Z*}W-cq߾?ش\*aU=Oχ;Os?vDI ġFk$ț4< B$eߤ?ŠyEth_r%՗lP~H!.\* :%",19SxPXg<YIMX=Vl`=tpm/{!.6,JwC\r wxKh)&4@kiw(, Lp(H_pn]ٖ)V#ߠ5t:Exbq~\!5 -Ö5Jr+\A~{ ~Iu$/޳#'+sG}Th2SWWΒcS2)ֹRY:v^dCHѴbBQ,҆gpz C2[eP7U!?vhP$`uϛBQ'"6b<u15XFItF;Nvaެ.+w3[Z*[}[}[}_ ͈ۦ^ET8?="@5IZtjPzR$5!`>WT4NϪ$jUd}LiiC ukp~db2/ &_|kgQt)?{); ZJpxu^;Z$8 h g0:vA1PyJ/h悎ؓř:eF#0YAJɋu~eΞw3|QN:uLܳ;HBudvbQ}t EI>q^hPs8dOD8 EA؃HZ`'0GoAT/U 7r-!j3:!I 3`FtkS͞Q@lr+^Z8OĈ!Sox2cGM2Tcdg4?=Bw&UyD..lZ",&^CmP3@AA]L,$?s;94)A"?dP8h5uJĮexjUN+3aPj,g&IXF+JVnprWݩ!bɝE;Z_άA+evkL7/PKϚ$z(QamZWx @2M@MXU_Eоb+i\6}Z#8Kآx YIK%2,/Cnwr h*wKݼ-cJD^L+ܲJM;[uĖUz~ֱtv%j>'$ץLbZxY\0JH^+%;n, rNFtP%.KV(Po{TjP\:'b!Z4헢$0EEm wc7E-p֏ \0?>JȂ_r( W l sH]|/͡] 8Tm%ֈ6/A+a0Y7{ 0,-ibh&-1PUjfqnƠL1;h9'=o՗Q;θ3;θw$;INێSܦ`( k CZfw݁iDOM U\_NUR=c>%@Xm?e8w+3bzWOP-UpmѸ KNDtEAųn XhA- EEն$X& `:gt;4Gwt9%޶~Sܕ׵#Mh |#z L/YBd l)4uv9jݮ86yDo0A[&SxfJA08F%Wй=?P0 .y`R`C Vy Y; b)dvV~Ƞs!^5f:8vTuTf~ ϲ^27Ž=gPP-P* F#ip$ruͰAA= ]P`];ODM]sFMbe->dPKp~|/#x'gHUKuJGQT'MI7`͖20'32ud'PKגj4o(Wcv;j5#hC6 }Zcd臗O#v: *`9p_ vdvrMޑ6%eWEhER2`vhCn!q!  : נJ2%m V0&8uazna^rlb#bjb'-+9jCk̃xH9/`KﴣB{볷>{볷>{볷>{볷>{>}6!gkZk.$GWaʾelU RN#NXig v+>-,$=l0f0SL=B}hk]= hٸt!k*,g:NtyȧԳ,Hf_{5%b B4bnFy@5<:;&^1!&w6|x7DX 5W}G 暲yGRvsc "@PPv;H :.̬3Lt܃cW2׈Fle֖kC.ԭgn ,U*Q9h K>kg"s?=SـK٪횙P[X1P*`;TѪ39 ԑy]1mҧ$WPka$ :jEli}ڳjGKPQJ +f46$.u͖)I"-Tv|Caj1q &EkutЙEˎi_dՎӤt ӥ lr1h3p6T ?PP;a|쫪eB1;2w-StjZܚ(APYe0>i W%ѾDK>Wq7C_cV~7tVOo'w/qH0s b'0|L}7,3ZGހLCeACfRK 5zGSӈx,“F3 ܡӅ 6Z-|$I:N+„E haX'>E$[g6Uv#A˥<ϳ@&IǾsNf1D;u(ki?V'W ߱|ӳ^i_ ΥgJ?ES2粳KkK-.aǂh3H<6yዏwJ =ҰvĹ #uB Q,һI}ѡzlql{`zA8E!t]kk5lz,}ջi7hϫ!{B0A nF?|M EGﬤg2}.4dːΎ\536V -7ra0+ d:Z@%4"fi, @㬷Ek4c.ȩXZCc Ca|<&CaD""˲AzӜ҈.:̨Hshaui&ЕV/jCz9⻡bL!aHd[:;-}245kI, aWT;b|ηVqC1i|4ȶP_4-h,``~Gc eɛ4hؐeAk3AygB)3у-mcZ:''#*jno?<z|tMoH2uI1C9ʆ"O"? VGKd|zAMdCTw4BXڎ)0PXb-<}qdV'uNjױT8輗>Zqwtkκ1~m|d+BݿKWUoŻ5XoVoVoVD/Mr2KT6Һi6ЙPв7eRvM86iDgAǴG/q /yY*gWP+vjHϣcS3kXtޗ e+0nA]F *?n"gYqo7A!w`b&#x,~Aj&R5ϰÈ$H#֡eovSuxS5? 4BvH`K Bcwhh~NOc '*'pa_X[UCm\a$ݾ2HaKФ0hǠ0PݽVY 7EVg-%M>wTYngt@z㹢; NJ6@}Z TDan;( bdHR!P峊KeF9Z /gCh><5IZS7p?-/1rT.ĺ 4Jʁ|%5 k>LA)eO<Фe8ʑ ]X^l !&Eλk;λGL s/çYh;|V$0ӎL6 Q>ut+oB84o*pEGCttՆvvHF8CYÚŞEQRAREAI ˞i Z%gXf x0ڋ@ z 94y>gY_A% h im#78z9-mhKh&*)x郙mmIcIOhHXO0 3{?_S8`6]L`f:T4E, 6z;FCrecCM N4`cN jC]tHG7?qt Fӂq&_1r"4?RՠӗCۄmf.`TT-h2 ch&":Ś)ynGaKf$qܢFK)^DV,vm9#ӹ=,.y K[L8M@m*7VNeKb\P7W,׉|'f_g1%zЙfc|šVQ8UC9WE%00C3i{cYcJ 1=QDKN,RiۙRC'˴1qb;-eX Ibd<2=MS*DiL9=Ce-Jr%+;eZxlLf rQߌhY8TXnX(sm;xLfgzl^{D)x{DITTGiix`7G?o{.կoCe~zDy]6 Xr2|}%u֣rF1 E.Î"|k :@x> endobj 742 0 obj <> endobj 743 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 741 0 R /Length 8914 /Filter /FlateDecode >> stream xˎ$YRFй_^k*P6>vYT0d0#&#\naԿ?Kߏ)?˷_·ԗ%Td;~G_ |i{ DUҠx$Q̠A/Gg:d ϸsOdPx.`kIr^vd+h&,QlHc?,9z'$fɚj*xNıf*Pz/Ю8XjPǸgy"!VY'i 2-\K9qBۆ>= , t-fV\)Y6gu(୺,}l: qNNʲp!s/tlj@^s9XE>T9`91ˇN,o=OuCXa5߸ rEze`'?Ey aao Ԡi2\0m8A/=2x"o\EY$~Iݯ:~1WO:Ⱥ0vtL(p׽v"Ҡ dnr;41prCÞCO旀wCȞ*XN坼ǖeB EW8r(`A8m2W-L/pC+ݡlbT1tU 8aS'3Ლ_`w@`rt;!W{+_uif?fM`4Ƣ[yDplNT6`xBF,\ 4+]i`AȵMs3P7#l: :*Yαq48Ls}Y2>g8IiV)7O u$藉-2%DpHXKC)g_1%e-'_|GbXrZ;t\4 $suđQY0&mQ3h\;jY60O#]xt"HbeA$F T1vUlٓ4iCEAaW[Ck\P^% )C ]x&y?5.(,3NWYS6MKF7DŽhd m Fȡ4N( f,w; Y F[CU^]BFsCU SDnxu thqC̔àk!8NYo Dᙒ㜍c׼H'g$ByVh޶䉙Xx~˻kpGMWBhY$ FΈhѲNCv[D`=@ZT.HAY!:ˇ =5h^ 3Q4&.6FmѧGҖ@[HE[lxG"_J98Gb Q!P׻q&֐ĸQ [Vս26~y?o/^D8/ -4#N9Bc| Cmp(&-n!zIOie(uENqe!̫yX [ vq ƤusҢĆ=}a; hlPe Kk·AQ X$R@h1(K'3(,{ i[*f|;+НSj&[e[e[e[奙7&J|?V! 'M}?/" Z/EȳAp8sYP>"2Bevt:ju2p m#!PSg5C4T^aZOp9&]/@+ϟL? HZyg#=y8T4캢N0QQ76[6m 4Cԧs؇d_-«~Qc7R u)"· K"ݘePx,N,yC 6ꐪ(+ Z('ܔ'ȋK<۰H<"@4!Ը*$gྗKr̠E~ LhJr-`%xFݹPw.ԝ uBݹP^.rn"*/"CHz  !HDCkPP r2bʢDvOZ[ޓ4`>we' #+M1Xzj~vnNFy":-22M埞!?zFmbv@TO\D0>ʠw [M,IH5-5;4E {g4p;k%aTCCu ܝJl JsjAM&9;&KC%ZʪoneM0/xiTfPTq(MS=;ǫK"ԲH,iP􏂘x,;b(X}, :9 b>@ @Tp7K])Pb:AΙ)sftv8ɀVxiG h'Aӣ u{⸃ Z&` Z$۬ P`PVyP U \Zzۭ/&$ꩼiF߲DeA 3=1.ơWcZ8+僦(˯d<DĄ8mJkH6Ȥ(XGKĄ@RXT4,vxeV T 3%W˨ qǛgBXA Cs=*Kda&m%ݒiXhyE!yJ*g^`t3ˠ>Eܺc&"WecXq;,JŔZh_zrV3^ 2}ǭ LSOYYbs̷DߢƪUQZ@h/t(+ <f&gbsd軝0C Vȯ/h/GZIŠeјLW-qRw.uKRw.KCc/؋;!QN]. ;6OlL961]$eWSe6I<-sw/2G-#  aS2Tu: J"rҍ}S,k efAAa2BŁGvPG@i-mLiZ(TdPW([&=H ZA]롷`@|")ְlcrGM;oٲ -S "z҆dPV0յ9}4BvwQAZ]wԫ>y]]U [qOs;˽PѺq{Cs3.2'J;x:4V)Ũ@cR>ݰݚ ߚ ߚ ߚ ߚ ߚC[H[H[H[H[H[HeѷK1%Z!Y =;䭊DYhB>XLKݔ ,#9bRr+IrJ&hfʇi;>,C1~cEwXIMÔDYke7bl$3rL IOKҠ2'.`bCyE}qhӰ6`thh!&jUpuhhʢf6 Tb3}>mePd YGC5$&r+AO[vvȾV3*]KTliY\Xv9u${8Y$ERP[礙jrH{Gye@ɚ`Ծөʚ` u\" bHwmG n샪35HАJ7wz9Dk۟-A]Zϡ3攍(DEتLXKȋH9{$: + +>%e},6G3D[BkMٟ O=}vۊ9Iq)- hVQ+W p~oXU :_:l+m{E#ѧG6)k 0L4EdcA{u8)fT ;K14aU jvɢ?eZa~ޏq{?nC NсE߂iuzK"Lg||N}'Aս#C:*Z1#uu"}xwQC)= _t޶}QF}2%Bl@i(hbt`רy!;ZLRm6LGFY_%i<»k[-Ւ[-Ւ[-Ւ[-Ւ?T-`Ԓ>/dn2+N M0`yuZ(jFO[ygp44vzr>w掊!}0š]5<j曦}bΑ]L>"ߡyXǏSv!FG5+8şq@@ʙjBgA~HLzr5-u244s(/YE9Vj-}ssju oJgB:C߶Bhm!mMR.}h:Ddm/fwZLՏiCYE  G51$|ljbQv 1~*Q^1UTR  al9q1fK9nG8Yi?Q׾ewp ZQTq! 85'0R֎\)%>yIjk"Cl7舤JC BlJŸ[sX3;o-Img C-߼Z2 [~>3o&NBODz @s Ez90= , IhOe*Ѓ4H<߀q(![/@V6%6 l3fnnZs5%]7\U>gx"G .F.3/f!XW|435D:+'WܠIJa;$-e+a$Y\DJ4 **O&e]%k:vYbicgMJl񀲁ekwin;2/q}IYF?J =A?]bYf>f+oy-Y4`nNscV` "[|KPѨI_˙Om/5x.*B`|QlPd(]mz/쩟:~ɡE[@u۠HM /E򔽔 ]$Ҹ )hD7rZ;g3x/Z0; ýp0; ýp0T5^v`;O v endstream endobj 744 0 obj << /Length 7425 /Filter /FlateDecode >> stream x][dq~_DK@`fw&$/ۑ JY)~C>Ձ` sbS8O֯|?~?}O_N_Naw~?Z_HJTr7?st?ɻC+kuݿ=_>fr!>|H. ϧzםF¢/O凶_@Q_%~ 'T+t唼z]K)9~4:z:sw/]׆0Φ[>B ..|Bs&9&Ʃ/rc|5Du^u^1W(yR(ZWh+jZJ8S}E>\/EW|bM a ?`x9fY11:dob#w*kV,Kg~Z>pMk*"窹Viwf:Q#|s DqI D?-3|jO )9"oz |"q,}˼~ {gy"$AL?7(+~u%OѵvI :!hD+ͮVK + 4 o)H0- Ʃ#!y4j@anAnSJQuXxH`r^2ojTǨVW jQ7HDq+F4|Q#-:YCB!(H1Fjb#y\~jE| oXڄiFIY?,Lp6 ?RMRrEɶ~,LԻ O.&>&]?8Xh&jjsA0Vȿ5,gi>A"qQ2Y2!%WaĨa\*R 5$؀Vi| ˆ`÷0t02Z. aY˷>v@ "\jR8eف i;3 `'UOhItd5e۴B(ql۴B(?#՗Ht@ e_U8'R`ͯ<@WA1vVUwڤFvDSrda.ptj) 0j3*6E܊JT5Kڧbz XMe(8,1}-dk.XͪC-ϗŢϩQG54>Qg$õV8G ?O_%z/۬ec={eB$pL#w ~*۬bȣQs alUƚoѪeGv_Gw_5N(V 1]vkLѷZk>PZڄpdPmt?k,ʚyQZ pgM(&귃mTLw%MH}ALSӎ])\(LkYR8sOC;˱- Y.9N=;ߊӻ,$Sn ^$ M7;48q٣Ra~gH%ȗ(fH8< &bxE>MO DFJ2w@V_GQNWxukFeAu-ihvr&gq"er^;ߦs>dցu!CWX?|KN}H=!trԇšwW26#/. (g!@] ޑ:wJԥSFqD}SOD4ܠw\cЅj>]ߑ: *At]9Q Ώ~xA[d%mZ#%I^:6T͑aeQ\V}|8:tXPGxA2'DZ|͜,uGHxJ\ eoqP]]Vv-ɣi3;Ór$ʧ}FJCy2hA0$uy2h1I\ [$8%g+j$cUI"j[V${6$W'cK ?u,tHcmQ<*~+~XrWߚH+1Rr2b{r*[A>r2J(L>6{k5H2^<Êkm'Xq\}ת']EՕ\<'W sx3L`ŵJ5]ɳ@ :ӑL.^1Hz(';֤^I˻vg_W%ׂ ) ې_FL~m&? (7飒і> eTM/$SO0k NQBojD38]g\?Y aMbx'X[L@IZonūM.^36Dtjgٜ6Ϙ'gX [ *܀5 S1z#VOyQQ+Mx`9dg`m@fBk[ծy|6f!κ~w+}0[kM+~]IGWu03EQ 7* FOlSoԦ_?=6N>wKr? 8׏ `?~6r(wqqAQ _.(矁;Gq;^/om8;q?T.T'>bm?EGϸ?Pg ucrOH>'oߕOgU? \Kt-D;egOߢ.aO'EyQ ~r#X]oףA)/dǍ%}ſin~}~_oIp/[<hwJ'~ٿC9owo 8{MT [ǿQ0O&%ڝ?y\Q?4/G(MK>+q\/6D*XO/{rҌaoA?1?r P5__?Gϸ'_ՋqO^5o4CٿW4Y?ſ-ƒ<_P?-D韣 5j%մop-e\v%}?U3s96\ -EMG՟)SI#?)׏?QO8˰T+;Z p?KBiGc9?1{}X_o!8/ugczRοJ_^rK'/Jg?6æx._qVh#+/ߨ~?KphyfkSzZPYy" .k?S ޟ̸ 6m;y0'wߨԔvonIIa6ׯI˧ӷ/LҕfOt)ߚ+71}+?N^߮珿[iXlI >.\o裻O)5|R,r̵%e?v*2pW!z^GS*kJ_)Km{)wqobrG >"gU׬mV}~1gcp7&/=#7'ĔS6];KR,gG 9-}uupr6cI~ļfѢo4Wҍpz8y91|X5 GvZ8lKGI^9fc~ӈu>~^fr\ endstream endobj 745 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 746 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 744 0 R /Group 745 0 R >> endobj 747 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 748 0 obj <> endobj 749 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 747 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 750 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 751 0 obj <> endobj 752 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 750 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 753 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 754 0 obj <> endobj 755 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 753 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 756 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 757 0 obj <> endobj 758 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 756 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 759 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 760 0 obj <> endobj 761 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 759 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 762 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 763 0 obj <> endobj 764 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 762 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 765 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 766 0 obj <> endobj 767 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 765 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 768 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 769 0 obj <> endobj 770 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 768 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 771 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 772 0 obj <> endobj 773 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 771 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 774 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 775 0 obj <> endobj 776 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 774 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 777 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 778 0 obj <> endobj 779 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 777 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 780 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 781 0 obj <> endobj 782 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 780 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 783 0 obj << /Type /XObject /Subtype /Image /Width 343 /Height 229 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 784 0 R /Filter /FlateDecode >> stream xt#Wݱ0c]Eԡ24Z?Ddls,vm\<Ǿ몲-:Ird>I=/")-ڕYZ˙[L1mv}/48J(IgyUQl[>H?^Jituwc}<][uM7y_g}ueIM6mEz.hiɫ:C44 {V@ JӧiVDYLb?L9+6Oꔦ~Ls2׫=v 4dh&z仲)#,DϕΛA^o}U89;Sw?~BkT)+ۮڂgr'WŭB y!䄀 ǼD 3n2ٌ_6y9~|tw7fޭVboWkUQ4mg;|D$Γ?/.?}yy/w-ϭEqZ=+l9 )n'_\]sV9Eu]ML܈<`Uq&{BVVr͹d./{yo,xͬx3ǣw?H&z޲oV20?rf~?[shxALz5&!)}S48u=]ӗąj8KBNh_6u6p8@imE^PmeMT(-AHh4fy$ #t/ˆRJHy?űnNݱkaXvem1aEH̸L8i֖稐%Im!ٲ:͛@yٕqIWe@量^zYqPA͊?+!DlqMC8$p6o_C8G^YMQq^5aE8ȍ!۾`hκ*m@gU y49NRCZH3C\+,/hHQp,8 `2Љ=;q̱rۭ;^ukʾ):m֑<?|r9`;],ko!&BW\]\__|M58f3UW5Cӱ5j0t͒Xϣ v{YMtCT\$;]B rHwnDmD"9tښ_^>?| vTLvۧ|+8QZ~OWqL~gqwtx}-/2 cpL&6L Ad 8TMW6Mմ i];T(Tʄǀd:vJ꣕xïNxx>-%1ϘPh"+ʼBl˲mĥ`qt؉q h9Qz[z@`8oQ኶(5Pxc2^1=q @G~h$K' 鉺ZZ>80hGi5dEPyWyс$/6}|:((FCtEjd{D]DJƁ+ mՈ:/ ߖQ^&MPڶ%Vl:'Ȁ4 (I8е!㸫Q ƀo9`SZni6IҪ !8Ȳ K0cHX G5ǪlڲmprӠC@(ˁz #Y^58-iUzmo]oo÷׷5rku3 ]]Uo'SAyݓ*,풪6N$9mIFAj͡,,d~ey:x84uD,2J)1|Mՠ0= u*Kjȗ"kvN0,vo6l  VQPF^;UbUfN[:-MY P4S5mLnhjSEҬ  H)(Pr\T\8PRf]9WXt'!oksTgM0q+(ᖤ BL,c+ah%)r2p8{,'eXJ zN"?C$i%ZIh+{</HV%|P;ٓ$X[f> :k=aq/RD%'9k]QlowOoyן?Mgsn6-It}o|P l7EOOwhKDYU[a_//ߏ1̕ Xa䝮򶺷E'e@]oGEjQ敝fn9J0LgAM9HO_>x<[NǓaF8_~ TBTv, =E ɑd.knl͋>cؼv3qގߎ-bwf6-0~I"s`rjI%VR|h a"3?pLQ<@\iYd컡E ; Ix)%"DiH2P JPhXX i\6YGTg& aU)_{$kZIJbX @ TTjd]E-,3-ׁ "I 8v4B8gY t9QCT= \ D7ˮϻ>! _6>9#Β(O3@B? ! wEV) j "~#E>@woA¢](#SݯM@uCB;)D^V8^A$ ۽d]Л|_(kaYUY12gq` @ô_oVT((uiO" :<9o@8U98p :a_r~}y?~_-޽~p_?~/?w6r]Vv[j"%Pba[('ʼr6rsqqb o+/j>ۭ`727%i`x/^9lkg{RЯay&;ьl6ډckYYKZ'wr<^-GdXV5a4r}TnjB O}Cw$0Ee W-χqhE ϜQ!o_ x;xC{Sl 3@QR)rogڮfy& p !CyW =`#K a0EB$ 4ngfpHȊ4ˁs,ӈZ4P}[L5 cЂ@ˤMCtz};o+kzl}u<6X'e 'Aѷ>4b$i^AI ?@ QC'DzD~F$1EKb3' J='X7h_*L 'xj9 /y/*;QٚK?m]QVa4^xl\IX7u?xqRQjP= f=r-O a.V"<~<{܋ 2A/V:3_<^ʢA5Ηlz& @S4>Uu>$KIQt'J(j`㚦P ¾A@B0]P :hZĕ+_s<[TdِC#M<` cD ˺jfZ&@ &n@B˜h9}ݰ"Rw"@~-νCd${"C"{fyhe~ӡ{|lmїAW]CۚݖNc+<#A3 Ç@"14:t@Za&eZe=P8C MA.R@ I &d),FvL}Hvn[g%^d{NZH/hq!?ů]@*sh{N0KTiղkp/+$gbWqn˿~ؖcAC&pGmWd|~ӧ{ǟ'??0_ۛd㍰]VgE~$MF7l׆ǫWuSçkn7LwӵME(*Z ?@B?êÖ ;˛oh0&:R.߭t]}}^nW$m0g]Kito* E54a_$ɳ3,OQ\ea 29F 8A~k:5mִWִܐYd*B3Ē 3L%6q,ϫvhAyQ"ie&Er4T$ԧ*"2 3!C?pAyE\+U.[Jh:My% w|:! N}ݦ̬ .27\J21#I0X@E|EuvH$@A H2N9LiGƁsWay@qHi@I'NX,o[{D>q|j9N*@-yb24 %;ygDz/o8tMU^v#֚Y5tP84x&+;S`¯_9$iI@,*+.cNEIeQإgM1'.v]@tc6V&IELsq֤u`M] gT d@x bNг\QTs? h (ԇߞC 'xS57$j)f^FN (˨2sUpiJ(c- u#z9)U>|AYT?A<C1t"tPaSvQI@ɠ]"YTf8 /6芲gEq,^nzxMF vR0-h;ud>djYls U!AԔAO9dc=9:z3LYGb]?<<^]߿a??|\zGJخDn#JSY87;e&{nˋܞgJ1jxuuvq˫ɒ鬯(aUz&t{?Vf !ΛhMd+9Zi;Z.g9ŞSl+,=Ⱦ40IڄQ週d!}ZFuJUn*$-a|{q(jL0BlCBq"6mQ <3oaqOen=O7,<3~@0QY2=P0vTqH"W%LDzar S&EWx@fk̲5}Gfh6DL9Ȗ`p OI|1MoIԩWN ;MFmz XuIA@Bt 88(xkY8b׆SȇQ]I- n1!e]4C46bʼ t<_sinIU]w(lW: ~=AcyH۵Pg}q$EO ZCGo:$(|8x}U%bw&Zb6r-?8hNж "ݻz_Gz2?|}zy~zxi$vM5ů]R і9`EuA׶ KڈܴC(7+nJ]7=|E`KFNZƎ [[Cg[6#q~}VzҒª* -Ѫ8=gaA'P6 ~s 4@+rFa.yRqT2hQk瘂cb` cWJ]>ȕ^%6A[5\@dUvI±:u@kJc _Co |=ěOb/d+"H9n懾f+E ࣒>#@i]Xg?#{(wݣN=hQ$A|OqPb;.b` (6=<__}]SmEsBǬiICS촨aV9@aaTh=Hd!j `vUkQy9CCMH̀GҬҚƈ6 OJ?-XeC8q&ԍqRWTsT@"CC%·>(@2Y) 6<6*rDEnX-gǟyxzy{pl||O~\&@*ҬR6fZX-ff۰dt Oh߮-/EI^9&QX2,q`]w~ni K$ղd@u925%y-B2 °Wxw09n>u69DuYitH"!GIl8\yy}ByCl>iSXvg6W# R"_~;50aUPWP>('PNX5OA- a_C71v{0uUوCmAHtKRL 0lj{0BK(`zb+8>sp[h\mu5zPM=F*>QC 8ih%og#[V.VLsL`!*^8XXA@d4¸Q'MCn8mu@ mYp'I$|DҾ:tE﫦'I"rj>[ /w [*,an9l׏~z~y|y X-盿r׫j[$nG+ri۩1i\} */ϳr^vb';qvԝ$ui7nlf|v6[Y. bZ.,%4C]T̒MkX]\q/ Uv5 p=*UW‹m ~gLWn> KD9Z"iTCqkQ%@D&@isG[WM[E4MDZ7I q[&i3C`B#ulj [ aX 馁?A}M -6eKs!TCׁI*غl*! &M!JZ4A,PB33c⢡-n {JJdm' XEd}Ju⬳V@TEZmfbgCF?<__\<L/_orA?>|]LUq SY&l Mw)TGzh _P+r^AlGfg`{asD电l b2YN.^^&/h[zv[X[ME6Y#~ lS;SW ƱLNuID2ǫ~ZN//v v̲]@&l9,E) a v%$rb{Cu`|sak3KjꝮphDm$p f)BpՑ$2cɩ<_mnwPp𢶋 Y)Yl%r2$g8ˤ"0 2%`eD1?֑;Ā0@@bJ"%z955HbN65+o&.a+Z6IkaX<* .5eMš Qz&@cY9n]w@A€0RCYڌlgqbq蜩 $=]5l Ô ƀ۷WQte^A$HfD: 0$l;i)[;N_r2/Gϟ/r}?L7UfyS5yz7$"l,jmpP+CAEV"w4]aA<=~ex#A{iIB<9ǜGb-QW#S_ =|!36Օdް$+HEye71Da`j(RRf!bikgǎð. ̺@o3kk[䁍+?omٿv`Q ] 3zi9$mڦsmx\slp?G 2R/Ylϓq|B61t _&#(RZ&aDDw-U7&BԜ٦!U> (i4Tm_`\񡽫9KZ4˭4̢3<2HGV%Zu%TqhaQ{C5kxѶi•g!]N+UBM=4Mb%EC!UӭaU-bXw.o@T۔b\R8]0lG` $>[֓7 lBPh_[k­34'!@kzxYು<վWniFJzb}T`JjobψO~*xx6{L4eq^ N-|cLIQn=pt]YzLS5շEnkFodD kďJ$aPAqΖSȶq3􀨁/|`.ғ,ܫ g#-K$ ؍#(h &N2ƶJ34ה1-Sff!z;}G#p=Jķta7."ni>؛(P:t ͬ4usyVZ]hE.U5=.^mIZq$0ˡdhĩ>Ԣi2( Ywh1 Oa];м:x'Յ]LMRĉ n S*6s86g%p!@2χhF᪜= ^ᆡ0WÔ畾_:Y h8ɇ{ QP7"FjC3w+\zA8njR?4@M(MbBTdtbL^&yvsh8~yru˺>_^^w'_ >}xb5݈i)F1,Nw_/|KFV[(}2M"afbg v_m'j\\~q(+q\柃M|T(4HQx=`OtK W fr"C|1yh~;<-Ie @Zgi#Iڗ?\J;# G/O/_/n~F_/n?>?C0S0_޽dj3="fOMtOח׺RH(}Rb2[tx^l^fWţfiVٮķ]0Udu[Ei:&ϵ_qMV*tώi!H963I4PM $ NPϟ! oW绻+E#\U Jne5rx0kߕ\w8G[i 63fʴgFzH4& T¯b6:$RH2$tU4Еh+ s}5UeZuޏ|Tӈ埯ƳhxӧˋO7?}?|݇_P?●},lyw!N*(( hssǡ+A 1j{hǑ$Y-Ȣ&@jZG{xh:j<@MOϾ"Y`2"ڽf*H|·OgNe"t7r\ <]d纵5r,VUma+é!P2ϣhs~geEvD72vXǾ9˩h(M4 @䀹]M nE!`Lp<nOK<( r`gfY179Ҕ5 $5|>m6+kSEfAe晕ffy"]8! y%Lwmf@]#!-)8 Gf,Aq/RȀO L"X#Eě45wCrXohYe镥Sy׿@o绽ubDzM q])@e}B_qѰ)m:~Ve=Bx`s pFiM8U\! :3 8p7@qq],l@PLx<a׻: RU71)xz>?kk^`Qφ;w4;al:vAL8 eCD^e 7ku2Yfo~l8P E%͚|3ms~tx?ox>>f+˕>og|.-tzxݍF_~߬CwL}x6w%rV@Շ0zz1?H#H#yž9vU&}B?Vi) Z.$R-[7̭-tu[RG Pu ⥭!2 M{DVמ QpwlJhCUޘY.)H;wmjeD4N¢LC_SD$ș'^:WCuFE^4 9-gtN~˰B} %jQW U|r>By?\@w/n3cp( s/=$.rļy;tGO(Hz*8qi/QbXc@,w/TYuAVzYd]z>!}b}QW 3Ш.`]$ l00: yhᇥ_:ž&"/FaÉ?yQk*A8gm_vy->(xc y.IO\좤/CV NˋH@_ei41#~}};G8Xo lSyL'n뚖jMdY˩(2)@A8MEgJy(:ph2\.O @}mD"2rİ&CjSt40T`z]W^IUewF8A3`$]3 5<0zHrp`-]eUG׏~_om Y6e !oUmkEh &xJ F{i皜Kv.ʓB=}[~׷{tف$}>,07u[WdGW yw>H,O]E|po!fݦ`b$ 9eL0 r/N W009 2ZVA|85eX*hC}/+æ yP%N&<ѓX"(aJq8]a㹿ܮ >d>YΥ ? B n: a_]y 3i>!:,QR FwOI懑P =TPm([Ʃ^YmHK/-`In'Y5yw(wt}Ja5UTa"F0543B J>/jߺ6$o( p8AX "-^E%n1]ydןvXGugȾq.R) E1.7'68 ;$Xi,b~J쌚>ᦽɈC' } 4q'$6ǎ4EITHz"VmcwmyB umܶIkS=wMJ& DQ [wO_F}e_x5'YРQhFa!d4Jto|,4Q|Mڧ/҂Ĺ];hy/EN n N( @<ԋ/λ0iԲg8oeC pG1@JL`uuLþueMhx>PUvn\n34m<'l| a&'7_~G7w_on'G)cDSa7VV!7z20Gcp  7[MUMCsA O\Z7&-jSߏ࠵!"^r_Wp52^xn(/R/JD@|@\@`nQ5hj{-uS-c;ci$).#uY`@7x bxT41fwr5~ _}_ kCVxz˽`u藌 #xR=H>mY/VT V2f@:Fw?FBl4E2u20||ڮƐY UrFz$"B24)rL(pя|( iW x4lj cXCmJV DyW;S,r8f1@`~ vvy%^๪V,+)'ly: -q 4|7q (+eDJ7 z L, b3h`f:M=˹V(EU0B *ǥeJԫrʽ$ 6r>%s?K;Ȫ"A 4#m13.}M2,yC@T8c~F0@A3C,& Px!A+)5"&I j$UiDO-gU PR4C3CKud^uӷ!Nl{tnpR^gnUWq4J$ .oeKCC[!>' *lC{>}=q.#VT "rRDY)2kHWW0!>0KLwxdq|zsS^sNB&Tdk10M!aĊMI$ 37GMwTtCj1@ߕEkJ+?MS)г 5<Oq.o xy}YͅP@`L?X $rަ6Jkz~ k^pZR:$u76 c)-]kZ1<6 Z @JԠ8ֆi;kɬr i DY7z}9orcݜ+/{(nC8SܪGlbOcj3_[.d9r]Sw]U70o?kNTx s Lטap6d p6 *1r ' 㑣ڛtOW߾|_OZv.v4hAXc8 j.Q (1X_&?A@ҘG$nt_}pw 4P.I|\L ^tU ű4ޖֳVmY.ƻoΖj 4/'^@16%)A {D,.4@3$qq@ȾG o霃p梌bAh&Xn>X3]Mu ama6gDLߕUrk)5Jc` N_%O=:l7YfW@@H (AF%9 hT)N l2 h,@A mG"Ǵy2#i d x Գ[ЙǢ @A쓕-F?U:0R&,5@YO ~v8 d{^$z, ma(+G ژaŶ [8d( elEݗT`;VM=8jV} }O  1Cp g&hhcq۝ˇi vcd$BׁZlk4ۇ =@e c`ogd[6G `e)x[ڶ&Ĝ"/r @< @\żN"|=wlxb *wA@q'F  A@4b4 q"2' <_rnm(wYő9?@QE,Vƞ>C(,ҨȒbbnhfg؝pDeC4Zh6cCO?p!(dn~&'b>-x2JqJPK,<QJξpwtA uփDD_ ZG-,%#т@ϥ?@itt8 0?ӗ>맏/mt^6.X<)}͍rU%ͷ_OwOl1NO?n'XR6]BCJ=x:-'(=Ct͉й .2/@ *@w@ @P]Q6Uڷ/UG0O 7W\D"qeL[l- &]@H"Vp'(Þ@XЅb`WѺ́4"aW @=[,"M%#ۮKZq@f _AT?a}{RN?qsOX3.v/[(p#2`d#:^@^k'exY.κqC`U-;zfrrqbT6%KAI):!ZH-vA&mddOsVvO&dL6C^ؾg$p9^/>gsj2"~ +Ha^rh@C_ 8Bĵ<o,b|믿Çw_巏/֧+ =԰2KOCL[^ >?Z e#ʔ)"Ґp!.GXy$0R"#fqg;϶`sG8Q x+<[/kVQZ #N1*9wJw<l C4IW_=0M ,fS؀FI+D&k69 `N!7ۗo?7߾|O_|ӧ}݇>&5p0[ ޾<7ۏ__}80Z?/) |oAG @͗z MqRgY>v2ۂw+vƋïG拍jв\/vrZO!?I' !3| *,IZv8g:t ^EtwE9Q]}{?' 4,aD9Krgkխad"t;"6 D]ϵ¯B S4Eȳ$Jt@LoV  b:$ 1%\uUᡏڪJ'=1Dj C7u[DDZ>ommm7JH61[Ei4CO.7EEi˲.L;*jAXI/2P س# iEf"V{GG[&r,л[܏wKcUZugD"6E DZƅB#=LE^aOx`|}&lwI~eJ]Kˁ$`yAT܍1ݾª}w>p~}~maԕ,uyckfeA;o ϯ ltZɮgX>$8\Q [U(VUTl]4TWQlUVuAg,;+.I=>^+P( j-UHЗZZ'o R0t edhĶ)bBs@ 85|y[SơzlM6aY:&KDi#La:rIh t7y_)$$ĶT1X^\(f6lQ9ލn~|wO1戇ֲ Hʽ .#w|%֮kA Ow]ω:V>suj)tux[ U6mCFC5~b / 1@<.Acq`õ/qU7)$%JSP j)!CNUp 4V tXlKXa6ͭ )hqW TFfe"@}A Rg8S,,wObqmN$8-Pm[h+xE^?WWk}5t]'eEe⤡.|54ATw,IYt[>(Ksc1sG^SC=+ ,Z³cy +w h=Zrw>^OPV?g`Nsx.` THS^D.4E zWBam/_AÏ]cVl8?<@&|ٖ!?ɱw<C<^G3FTζYdB޸%/}{_*PX|ųQis-oHLJ+EpF~S#wuc℞ < 7LM;v-|9˲W 2!=XَSr=v}S=#?X\8adfTt].gM"JasF:襓iC>'E-J0) Hh0;qx+alguV Һ-"MP% >NqcN6C kAI`y Cr$KpB@e-l=4`\ mI3qMaШ _l u| VWgl}S 'w#:Jh2W+BQ__^/펧#ГTd!Ff%W2"+xig @rQ_r ]jw*$=܌M&ww7XH ٥ V4/=ˊ(4YnFK !0 9 p+f#vW@vO6[Yίe|m UQz2M; 5ȁ)OGQ\=; tˮty>o5`xX;S0ec\N+:!Gu3VNcYaoa.ϸ6Pp:]N K% HIBhJYjbYsmWWr7J)B8< ۙLP%QYq_4]Ug GFBJy$ [ÍNiWyfh7@=5||7zwmr{.檼U䭾6TE咩OmoM^Nq0o7}w[xmq VLskXY±VkR~뗏Աq,ue_yx\` {w'}rQWgS\Y"U^T2 5joA X&v\s ;VHk傕e$|[[6n  EPKÁq @QDˏ @aYێW+yX0c"ACn_]^I[1Sm`\h ,Tʵzt_|5zYId屛'^E` @`W]kiW#OLX61mb,r'Zv|3t@3ѩbJf1ݍ>~w|ba醪"hJSv*?Յx\~޾57w6Wm usx|-pslNo>3A(Z/$ł)9ɾԙNuQݎ\P33R@á; H27R tc;+YmҺ莗hx N\nA5"͖I<'Y֨vE U(hdmvz9dUjh4|LƖYz @XѺTqKr_EQ͘X-.jaL@pSNWvgg@te"2Zk:,{mB>:dm&j <+rPo :ja*%iۂኖ'hSf;A(@^G]h`ӒKI&%e8]Qӗ^E>AQ9'y?ЛVTyL"f\_2=Z+|h4+ zq qEBV%\hASht08<{N"TSL$yK]:t71OP۱_!ݞ^/<j%ճrLMez*!2܊ ~|g%vt ES~kZ¸e&,Nj6( ]0wBNB'EI:MԉWGn'd<|xcKk(*K`go{KP J& a·QTc0G<Ӿ\iŦ[xW_!^_phtZp[q@}T^$\s>Bōv&tJQqY!DeIsFœmǨ4u C;Զ61n[ L60$ǡv[ !TZ 4WjmqTChP5LVYA5:yEJ5(Jوz9h&0 E] hW^JfM'>e*$-i"eעB#詷ݮ*8'eFg ~0[UY>Ie@Ȁ# ׷,]Ɨ3qGUo|W!nU_#Wq(ӰFN稽oV^9fi'rD6hlvhJM,>"8 Zosqo`7iL"C{g<;L:@T_nS<0>NO߿x_÷o>|6z~=`J[L!&:(2hϗcfry۟_W͆◨|y^b4Sn?@t}Pz h:gks;Sy4uU B䡉t@^ye62H I ׾%8%A6'׊&Eye55˗KZW$clA4~ws&Ӯ[_@]1̒)7vB3l8I0\DAӺ$)$Q8W=mò petnj"ɛ$3𥃠]$1]n5CQYQ$E "YeDP"qSGe6~d@׺@ ,SWR^4iRp~f8?Г8Z=<.f{R\YR,/'ypR$(rQ~`+m@ =0BG'钮, v4{6㮻]{z2$7 x} h<toӟhCHm7Qg()T\Kci+_5CI fPƴAz@OP39: > PɴhP}4A?fYN_IXMQB O7/o響PP8t\&d3l5߬'x5'FfIx~N9ESM Pvh&(|=t*2H0n{=uʁ/_EVg0&!:gn4A9MEJ04'&g@im|Jpp] U<˼hjӹ?Ҫsc%5o))lU'9j戝h(?iign` jYC1Իіy!U+/Bu+/ƃwm &jVnZIUDmSe~ R M"]S4UF۬ - [ںPT@R)IliQtU?HArRzIO:COٷ[e hF!6ܚUaqWS\Y2qOeSȚ?ͮQP;o{=WIUvqYQ@Ⱥq^cDy8_,'EhR|>^k19>sG;p]VIKOSBˌ}:pނ)E!:itЅ*䆚"} o|'v¼U5TKѿEy! ϩm e;uBGml\34x]E$@fql~h8}@Di|P~o~ģ~n9& C}>Zx9{m5|ePb1dqJ8SlI48FnضQT{TE(jbp“2͜ (fFSPkHT:o julo0WNc=OͲpulI9$d@ 4VBJAJ7@[P œ`CE)/#0@hSیS99lY]ɆJȷk+@hc?jbHՒʼi_GiWN/4& 0ϡoQb+(g2%--&a!eVԾKQ }.]]D**(cUk;Ɉ,krʈ %)`75]}Rc ]+In`9i2*O+Ƀ\`> .XEo0S>O^P!@Pۢy@NIU78 /Z0&''kXEnDi<&Xz@Ќ zaefA炷վT-=̕sײ%86Zlprz'Ȁ[iOCGn4>D2@|5K"3yV]\18DLJF0l-NF`SX;0ȹ#T}Y4sKr T9*Е" V@Ɗ#AgdD72t;WW쫠J2͓XmJtB6%'vE $+ۮTeHKgLK0,A59I- b?ʼ(sڗ9I۪=PAp  $LV-4w*)iLAE}$c2.*ȍ͆- N-4HQذؒ8Ak(ݜNe{ҟ/HIfWWC cK,zh:&.i$tdAE d~BT ȞbQOR}x[h8^40RJ}:t`kq웬ϳ>/…oh}DA"Dm 7Rc $(- vY]F~O2jTyV( i_!L^.$3hGh]9Nrۓ>8;lX 4+tBA"~eEr\}qiy21%N4qxBJ 6|}}4V'|4Şd>h}a4 y@,Hq>o0xjh"ݶL eTR`(ttc˒_ڡ?]suQϐGC-̢ i36!b\jAe#hִ@fZ^y=BH>MϬ*qŒ% 9Bbqd-QBE Q#zYy(2S=2i}-;w ҒUI7Qjiޖ#*U%u5LASP wA 4ۋ}\f$>IgxGWXdiv"HdR4*@u׀I!6y-5!Cf]XӋfjAown~>\. EE=ܤu:t[[%Օ!xSv Ja\N4v}x<_~~1s{Y==C|^U,; |> ͮ缀#>)L۰=UIE (0C %-ȕ]3eLq& b '{^65O™j΃*/3#$#Xp%fAnڕ~R2Vf~v8t I( fp\m?pa+A0Qea8ā*D9=#GVXEoi*I* TJT90wXH|E?hS|'͊N֓ DŽm%8.&ɛ8uZwrNx١q) o- yB A`OOgZb/nҰ^A\N\\:0~d8Z-wC3Y\F MC{y`Ov"n2Me-PZ8TRvQr[0'l+t2B{m)po7n%R p@T{ZYxmtGhgo;6 {-ri@06q 3c jd9JeEG{d6~O aϞ$x.J~zN©K[z2߬V$c@P0^ 01Hoz߾y>|w|])} C)~h1*2CIrUWkitV^A|d*|-")sD_Ȁ-(p>wXI[LY2Mi1_Ԏ~>NvCBi!кZ `ݎDIE@v|A ]M(ww70ľۖF"ڛ'$ؖB'322-[$ j,G/bz7(bChOh><-(fUJSr9& -+PcJn|mfO' |$|Fxwӷۯe,[lsrKJTd:A_ vx޶VWh[#=>4Uc" 6A`;ҎG!:DVT+NIzIk|μlh<=󤳘Yj=jF]56C|V)!9^t2@o o<O uiQbC7J۶,ˮ99 teͲ4,CEhuzn{fǺ.\%ۖ+ G  "`ig(N"hiJpKUxîeSn)5QlĎ*h 's [ Fۣ=h "=*h al6f;~` vidy>@>Q$ 5ސ=-Bz^=?/.>K| *w/&UێE Hx4FS|1?Ï? 7of4-qġՔ>8 Om13T= n&0UwУ(,jnP_;\rI̥)< sTW<4t 6nUnZC 5ƱGQE} |uRlwoFs|%(K e?1Q&ed瞚Rf&` B{TyeoAhQ)B`Qp[ݸ&xLE]'2 cfFeZbIaE%kҒ oӺofM%e2-咜g+zͻzڅ]]ziTߡ|LI_W " SP SgF9Zi/6jmmE'}%7bnAo=#蕨p늞k (`L'La6+zfeU2eqCi|CS`@ 0"ܶl&I~Okq)bO1W<6sr!o}m"Eu%gkGq T(?}ٳ>tRbͮ_wվ]#{EPL)(pgPIzl.hg724P ?i+(?!G3Y6L?tC SԗġƁ`n9EClM l; b*K)h \em\>4{x&pz؝2ס=tSwztxqe}PA@5H DN0HsOS?Y3`b7 y53QJZL_ -/jRtmw\MqN%y=MOw޾8_8+x 0Fٶ-"02WN !R@ 牊;lV~jQ V6q-:(.=gCv"Uӭry(+Khz`hFEf9&QfCTqaD_42SB1XUfUZK#F8F&=_²6R=%)!Ǧa[`/_4\rkRxӄCp4ƭ!K'y'WYK Op"#)$("ui ݪV EDMCŝnۊz@0 4ah"R$)M8.qnasiÐE/Rny@PJenf{.%qkb =g͈f:T/ɮ"vtܞ/m[uxʛ f7Ǫdas7(QN9gzi//7%〤g ķa﫚Pi 7\cs0L6MJaP8zk64Qfyq_Nq۞:4׾:ued|i0n&UC; @ p $;(d1_S8.qzI@Oh3O1ZF<iZ\_\-\ytM8plm٦a>WO_gXa )A[P4 b}nʴJS5.TyKܣٛV -:TPq$ }) KL8rHYUpY_ڋL7Ji^E 53 _~az.7*#po@u44zh'&jk ]x|MM12ɳqrʬbd(@j nKV +`&#87d%I7+"B? aݘ(;d]X/37`@I#)bJm0pR\@43xjìp*a+j,p.= 0N yZmYSʊ s5z:z|gW]}%ZΤƛ;~}9pRɎeCٝ꠵.tہ(z VlWYMg/XbV,lcʭά Nt@S fsm]M]bpTM۲5s?Y0DQ%ZiFAg()7xroPv_DT`wٶmss^OmˉZMW;aMp< t^ A TM$i|ojׂfla$:hQ_-ixOwuz !T0 Ja?&3b5ZmV@Od|~ qs#r[ x~ű*ZQ RSHt\In ,Ӕ殱%dKCP@ < R犹XP\ղ9ȟFS$sl$(j;#Tc9cYNbİ%D5%@ƃS-rT},Ι"hj׋C&윷T/%%Vnr(#/)GDNꄦ:q!m0Ie(A&:7,C5$Q8^x8A/6N, 3RJŸ铜@ 6ØDBnݒ%YTjYc(KT@?,bM5x?廃zpʲ&-}btLG9 zO#9Tt2N8vWۢܕQ}̈S[$pwY]A#|>I.O՜'wtRaYWTl۬(v=߰5:9wE"~򮇞Ձ^xBI,yPYMe w;P%2Ktʑ*O-<ĶE弿9K[ZunS[~w oscD~CTsVc 98ᇟCĆ7ln@?FVgxןT87Ҽlc]yz}QVI0ZO(rFb9μ<ɆXX}o_uXy3G(FW5W )P.0 G_=r>eJ =MQb1T?ys]S7vlPjaciYX0? kY>N=[A*=>ݏ'5 hX+|ÒX0#2bYˡ7H9*9b^ |^4XKT d2Z&O1c3B"J"R(+SVM-RY^TE KF8@zA)7*`YqX&b4hCdSWj8x1x@W9yy vO‚zhG6ףųx/_~I#y($[RHsE[`ӄ$<ۗFlQy9U ɑTG۟Pkq!<ƣKb?5q)s39{ >Bxl6) 2e:e!%*פi׀v̀N:NGYˬq8͒q9f``r+lp5B^dk۪|y[_%ֿ@*v~mK[lp]!B A"^U~:X߽a OO0671Mt;/:~Zgz<Ѐ[ OКj_"wU6SøFV}8qNohlV'YxhEh)빂$6 d >P}4sa%]YUdEC)ސh8l 1XsxvŴ}wM?8{`5Pob 9!B8á(㚪PGYf>OAP(m5Z(2[G BK :5xp%%Yo(7pڶ0.SP.mq>h|t@z  W@Qm|D[a7|[PO9V"8v7Z q&|؟wi׿ؖǶx%4x2vmax189[|~Z?A*dPJjdD|h!ժ¯\ikBnmA @|(O}`r؍>$Q?ow)Ɗ3NT8߄4(KvU$(FCSk*~m/=@`[E 9+(z4<,|REcKgiHTbEm2[ F 8wВ\R ѹk_9\Րّ]{z7,۶Бm fQj =MxfZ0MՋ,Ox&rE4xRZiEhi:VKŅ8FһקQB0O`Kρܕ(LˁDS$J@@\PIB4ϠLe*Bj4CNgTXyi"c*H'R$itҡuʎMꞶkW (Р+_ PuA|@›#`D_ y!}Ll薺\><V--́BGkCy哯:|y=^P#vdZhSa%8 ^,|(oRl0qw!oo[z&=χ_xi%$5M$J2m ŎX]|MҚ1! N+\]+^ >hh*Pgh&LVu)bZ]c V@dE9ex=^NV T@c /:-iaAԟ 2̀2Rמd?[jݧ` vAۼ-4}aYv'gJjNb𺮛j1ƁEoBj'wۤf沆 ;4tflV9 +N$1cq5]ȣd~EЁnX9AْU7;U,tSzY?~zLj7#XF1]RiU=M};r`1+ <꘾Gp[nGfZg,C%/L7Pi8H)"NX?B-]Ȗ E*27 u!$s45 4t>Mp4pp1n]fy`V8<̗nuW1rzkmJW9z j.Ѵ͜jou]5+kճ, 茨``m P+B"90,ǟxP ch[VHhlli~\YUѵZөc)(֮v+>-4]mbcIey+VgB-#=* ~iKӞhNMsl>Sw>wq& ]!SE={p#m 8}*%(~x p羿O^ rܢִ:Xtl C]}N0­8xՌn Q}m=ݩo>VE5d[O~$9Ɨ&|);Ԇm S7LCȈ>]㻥g\K8V(]Bw,,0,o<0qQH U*[9ezce@4N$56/)[(uC# RmSTJ-RdJIKrK(bu}3yKbbx즛M,H\xma , K DVhY`Y / $ءն~Bz3 04g"] 0#B?l B&o껐N2y}P ׻OWǒ5 t֤t/xn rC5PTf1#Y&֚9nM曧~c):v鵏_2 yN5* ("yV{EJ%*c_?e@O@ Lui>hhAu&i´Dq:ÛiI){#qBӫ=к4ixVhͳsv˺?[.,y)ӰxYX yiGXߣ It} C(ɊLQ6-'4QԮf0Y;fhMQ'.j({$ <۷K܆x :+ -Rp.O`6 ]܍4ȁ{EqD˹}rHv5I,;冐]ϝ |EеO;n״_،97N1\2Z^Eñ@Ͼ\//4Vݘ'i+MlJ$ECp: )jVjp,IbF 6m]!Y* sJ p%@R?΢2KTe5 h-r:<.0tLE:wp@?fpA”XgTRM{S^NhmW@}} }=@= m໺Jv,˵HoHu#Lw~ZG`׷~ݷ׋c_|9ׁ:Xghfʄ=Am@:K9ew`Wj9e'!ڡni0r|m% @b؀fh{BbM/$v/55Ӭ84LcOpo^mw=BՐ [QDa^dD h$"+Z{ 0-o;u5Ke%G]hF!S;ב/*ؒdm?c+7?=ȴcWT_6[ ̢3&J[FY/eү^jQX':[f3)F)׼p~$7GO.*w2VhѫjY [Kl1j9\c_\`6s+ ]PF1& =4 Hj!\/A-p~D @s?zA,Қܬ`5qo>-w ,ɆnϏgHbXSiN]Y⧁:d]j_=w$DT#}V-KPQ&Ph@unPm 4/ǡlRL8MsEiEe.hǴm2#z`A)f˳80MT)mYL AiAުN4mi^͊iN3(u)= q\ӈ[fK3>|YPQqvOpVByӎm/ IfϰS +zzUPNQ=/*^8Lj-*r/ߒ~L~|ZW$5*Էp#XlfpsȺG=,4,x^1~kkO St @^YWEQiE^ <,#yZ ",[g.b](pkMubN,az#Vd#b3kx̞!6a) @t8~; 9Go-x[_CG Aס>n=U=K:vP3põmY- r:c(LI8"-`uNlj[$j}[H;۬g/ P<ہ{lwyTzce_h\kzjɬ ,zBXM @@PyYU=7ψF0 Ǯ:ɱ}`( W+(Ei{EU<)=Ұ$A+x e8MhF@:ɚ˫dXk.{_Wֲ7;io0\%#~i[]]$ 0nqA 8/n5/~?n;ImO7\T{J|'QaZQĎ%fClK`juf:ZHՙ%&t}KˆY0= +#kb7}#/WpCoߦ#ȗs3 yΙ{gl‡Y|~tCUUSe% aa ~gw [$gl~>"Ͳ8-2Q0ЃSU5MEx;%e}m804M`$}Z—aI;Ҩ_f2e^ MяȴeՖ)Ѯ!" P:8ryߕpS?@`3.8@3i"HUm6 Ђ'mVݤivm廞%mvfi^qdS̞6r`E1* _U~Deet  H|tY-_ q$@PϪz7%:GӿԅS\N~Q.$!Z+ti脷_H8/^AA}teVx(Pij~}/1 eYfun>{PeKb ,U4ӱrVuY>x3J)fGm(lKB÷, TM3 ,ioXU$v;ϲFOxy~?@Gֽ<^o#ԡ}_ǃ@x?ArQ =2ˀ%AE?[a*36*b0\tT j>5XK4&M"28ȵh0 q\We=6 e96* ]8Tq^i}`G+*89]ao1L0v:z jYժ9lf@ k%8ϡdH: @^V(RLL=0 :Bݔ#4P0VsP[Le%"O B 1mn=}^`OQvH;!&&0>wRpm9ȼ!nl<槣_&.U|y};~:?Ʈ x4hs_/- ͫ5 IFO2?l'oTDl ez=<P僝p " 4jܠ >/:t;gXBE EM%$*㰀ے]um6p@eپ5yޱ~ToCm/]y/7Q-w 0A jɔ,F{w[ɀ׶CUQ'뱝jeF`~v; 0Ӗj>6 f p4_ӔĩbUNd lZ}`yyΊZjGph5@ llcitԼ¬$8 (|hݠ K lTO ØU\㝪 u7^$04DZ9I9 0Pe3 qjI A)kNb4%Y1t2-]-nsGa (m[W:ӹ:_H \.AƶJ0 m|^/n'6°6ES 7aurQ54us3aebmI~.oZf[܍˵K!oѹϦm.]X':#5S (ˬL"<OWՠNu'q^i6}%?`-p'|Xo7:lZ~wV F܆yb 5mYݯǏ_?O?Ϟ7Q,߶x+L>v4?n Pm7ԕcWH$@[dAc\pd6X+yˤ4B(0m*H9eERqڏYEua-^:I@2G[~o68\0q;ɀ^ C6/O- H"gKFb%c9qSC}ai:qWi:^P; CjH8FL}e4-d^6nc+ HwYs8iùzV;ic@z~EM_OqӘk"gɮe^u lb^$ t<@G!@18Y- m>p]^ǤU@byR8=f!j@]q@קwڮ\_TPE^byaɨ`I{yp|+ZʫBf~_bk~c'ySp|iưq5~;yLArRu PEH%'UWZNXlJ!$"h\qvpl={\>]:oYH`X ;En8a$΢>H,AIf`6oIXqH Xtg.Aa,rg~P|']EG .ط7?~x<|:Y)µ,[i n$5mL:K u _Redq{ނxĶyu͉vȢiľ{+K,`_׳׏_>>Vܷ/]:H0ӀVLo УlhPÛ"QƩ Uꆧ۞$V Vq#J@IVC>@tAYi#[zmDꊘ۟_dX,'l6[VMB|VHdUoj/BGbMFhXQ@C7M `sw[QQDձ܍e'c+ 3tуeDurOT.Ѐ[ ~1Efnz`Ӈ oqr{l}7%pA'pGTꡆС   n-R .U5q9\8LP7xPx0E+h¦ =_v\ YEinWQ?ԧ۩l6$bTU})j/ۇ~hE"'tDvK^&{l?>,ȯCE]YcNe;XױC}A_{H ˭FwBS Hʃ@@A!˓ѩ2.ď"$͑s\=櫻iߑJg?}ǿO?ݧ/Ǚkz2 7(mʇ,RSolPq"FYG8u.xbtI4EՕu_K*;IAUIqPyIHV)^Ç/~.dEjMzw;8`=ASiWlENQҢ;XPU/Vv8E!-(i+)v|?|}x__/7ar$Kjt,Z2ie"\C3]]G^#w 7n 3fȪR)Nd?45֔1iz ox WNHvYTǫ"*u7ڠtu"@-Te힯j)j+-\ }WLݷ+,Ȣ(OAYa5P7Oݱ :\٦灯j/|> A9떇ąʇ(` dD ռq$q}}O4bp%$<%3{{5EiQtڀr=y:z%+,p-鬡3B+)2$ON1ɬ4M1oҢI&NIbhw݇ax%3BP ɖI'Z+81 7t wϯҎ9TO*,(+BeYK܅YOɔS@<[49Uu\a!`Y^<UIO"l F5 p%1T$ miE@ "l ĬSa&2poiqC[3o@ED9ȟ/ϾzZO@7-:S&@DEE 2,X6 kw`8IBWX~ O?:|~8[GN_l"VV^+]pA! ȮlJ_ekEI=wo/ ?d`_;dN5VdSRLMw^H&۪쨲.-!O&`@t{#BWU+W_f.h%d2f>_i+$]@>ԛv'ԔDR^hflл|||z=w^SoDY֜O/uDŽq|x_ @`U&K h/Νߞ( L3o|EY Q/*g@ଢ9P}ϭc!`ȒJ"`oX`6O0X"|.ZOF}q \ ̨RL <'ӌHIEIQ3ȝXr\N)X'j,/<LХ*Mڜ^v {u 2й{z?=Έ)p `U SŎg7^m.5U Z0J(rp6kJb_,o6YVM?Zm}j6FSvYAcG[2IAçx:DŊP,ܤIHb9a 2 4G1 8~+'YR,жW /wcoN=j+˺-Z˒}fIF거)hiCĪ"cPUsЀ!߼m6|8X&%- m >DN dJ&@gSXK#8hRSMoj4^;x)p* ;TfY0=|F/ib2: p֎g>ji*#yŔDbSrxܘf0erNz|>m!mۅFG;SVy`5DVYl8 oVaKҊ1f Íh># - ]@lS6tpixXBjWM7/ ׁw Q-xchdѸ7 $.M]e'L ]ph0'8rգ7kEAA@ P`zUdX.Tg.Nf7qYW|lW& g,^UG- GqW p8<˃hmA`v 7B@`/8Z ?E@J^PgsvFr$ͳ8O8~O:'co!At͈7pMSMloϳUFۨފ,rj@*di*Hs )[в-K,.Ol^BEW8rHɳ3G5x/jZ@ "-p/w<YXk薃|@9UGKpYHn8vݤ* tĮAjLI t0*(t]y8mm9ܗ$b;ck&!떨G TMGez\iY=|}7zl~O~l:MV;دA#՗3N)Ͱ4WeN%P9c8맾vX-uɕ$G-Ft $ß g(ʊRټ^lOw|˚-,YE < ۆƤBBxIxz8"lb7<iۖ0TU]THj@]rr2O{d,= Q - M^@hqmeJu^9ڱmqW +8?(ʼ/InC|` 0mvwwr^ DPr ڞAMݿ\xz?~Cuќ]EVR@dр@ y+Xo71|3 IJpPXO%` UھӁf,16BPG: $ݚ5M'd<# ׈ tc/y5epV%g;@3VlÍ bAL[Ib:Mh27OSjB:N NLBSz2;.Z+pu)flgG.߽{߽{`0"9:ϵ35P tWfڦ@*J"R"@X9hՒtWUDEEYM*m&zty:_ *[iM1fl0W+[z4@1謬r"OG9 #c6]5,IY@$;YyBfdfXM- 6YFX@Y24 ,)(K"ZX-2;Nc}O%UGa\{SLN3 dp+;}öop'oC/qn\u6ϫ -5@\ PكGk*t:]`ݏwaxix8@O)eo =v [DTy 9s!E&[(R7I ٍ |x)2$NSXchY;Πº'WQ w14=/?J;Tw{xqirу9'$ѝQ#%(V$ALBxJ јW\Xm&iUkaz4ÑF釧LJhBPeVxBS:N2Ke)p߂(n3,=ڡtf@ 8HF盠O-2pq4DF(vJq-q%[">"3F$j.񬶀 ~ΐ?eVrlm\ҬN7U|hg˕oyjYMcey.Ix!}TͿ_;54S5X $?j >͐4K3\L'$Bt8>?_~ W veWr KZ?yln}} Y_P>^6Nz;?4݂;-CqÁ~ Ђ@k гkf|y+h;rmۢCv,oyE@ u7f2Ch 4xj?><<{ﺟQ0X8~Vb{0EEEv%`q( <!,a!(򀜤: ;6_%F8 i|$qg8ДR*yKfg^iE <^컑 є$K6t>qG6h+M\OOyĔL8ӹH劓*϶ẜ,Aw{d@ e t8NB/_uiȟ/'lowp8$c | &AU!o Qg+T(M].ĩ<#HnF`ǡɈ1CL( Ԝx8} R;n;)rr 3(ifF\ |H( lDfee*mi'&ɨ}FCٌ̀A|QԜIap;@ql.uy>H J3rσT%Q^I\%uj2L'ga30 :tcL/PoA` ߽g( ͢Xh87^ּ@RD#jR 0fGxAg A?߻3sV&aomZn/p3l 4 Ad?CЀ)~}|Xt a <fܤieu*XB}A}7y5h;[`{Ż%, 7Wbk]G-Zp |V8Fa)pp> p|8t>&`4?F~8 ;`2}|JשnVAt,ݶdɐ`:q>|?P3f!9 HNn +ҜL*]z=t_?cS,ArO7hUI8 *ߔYa3r<:+#KT)r@zLrڝ9T_{:vhӗis9]C; ̷ ժ0 tnbEiMa1 gD:`ܛޘO!O8%&p@5hoA[XSug e*$n+Ɂ/1N>KR@OGI튮ɋ\sYk-kZip֦9 hCwzľ s Ve]hIjãfWmG=aXGyAɣteqc, MXv 3QIꌓ)A%yiƂ<7e;15")AiHefK1 >"I)0 O$^q4xePpG,I -[iRv/ߟO/D끋6q }LK;*t|^eɒdq1%N4X>^_LԹ]skX,p+#z߂m],fXmͪ>p^.ח*gÈCp?fMqCuaOYz@M1MXxN~F6||~~YA ݹ h9`B_"Q Ԡld27u0OZnj$ ðU)Z,7 UpkP t^hP%pTUIRp ĴSDZ]gڒuEpBI|Fg܌Iײ!Dq̶(F/(VvhwhbNP )Aѣ>@x n`KIx8 ɉ[vZ~>>lSN%gfDׁ>~1 '}Օ2Ow72= @@f&Tu/ |u՛@`v~  o|[,iU@19///x4GyO@.p'fMVnU: "i|:02% xB꧟~"b,:|}>6k˱i@uC[F_׫l+ `2 p]ٗ6s$fq" nޞ_q3o 0 87W#=?$U}<TTS,vl˱e]5J3dgMfHwDQQlS"e~{p9NaOeI, Ų=-,ﹾ/ΧOݰ?'7̲,'p iIu~_\(W7&{vDyymi; ͏xj`r7^bI/,lphݚ+:pVzzKX@88 8Q꜕{^OI>gv{Bh mv[I @cEWW x @>&X~Ʋ n @"͡^_~K#MԸ!;Y^5|;A/]FvuM@N:eK7Mחyh_ p5`xHSD3 ,u.xb$3;(PbhWbeCx|&H fUIfw{g3?=un3h$2s OrͪH<63g~#ϪfҨcTaTFq B:<5D"^m"?^˥aȢ[+adOEO:ӧ~~}!3$ 2jg0ˈcgZSeZDx}nKO8 p[^kKU5工XӶEFMH6`g ?,/R uzM7`Ol 7m?ۯb30x!c {lwTnrpTDY[[m-՗r9 ;a œO_(6D[(Au̚[6=`@Hl<)L!|u3l.<X<ĴZG+4U]zsa.yds"߲YeWDNH?Đ H^ +.{8ajT)D dbxO];Q%&z) ,ql̇:#Y QfR7ncd@)PMUNd7pt>^F*I?ܔdxQtMwƣ'߽'_x7tGx:O{p4] 7`m<57EvZilm+Klcm2+X"-$ @w^rz " ! -F<60zpqGî|pG T,AsVTD, n2:@eqteߟAZ8C4za(]]Qyѕe7YVfu/*lk7Vw xW{LN1*!o#nk쭔#FGKrNm62x^qY!(˸F_Xnbk=-ܣφCNm#q->EYcAr`0uwHu!} _MJ2M? 1Oglso|T!l׵]\,Yl KQZSLS-`ԓ;㧧I;G?MfA8'6֘b顝m0!O_嚌hb"Q$HaIM߿V<'p=3=%u -h2\&>bEX& \3ʢS%2.Ar?޽h0[fNqݻn2FCxp2'!V!@HYA{Ea#$2؈"#PWV1_4@αնI[F(([US%Y&`~t׾xv ` ,e0 ֵ3h*f~9\'>e.uO[.[Ђ'`$~wL%m.`Ҫ&bb2kc WLO2<ٴ,>bCG[<&VPX6H/]2=wZ+ \ m-(>>p2& AHaΨά ZxyVlRsMl psSo vCQ v72W4cئFw9,!W.2 Xҵi 6o9~Yϧ=v-8Bnn5[Ү>)Df p| P 17[Wc ж27&+[o@RZM*?ݲ c$?_o_韾o9f*7^_I.uD2'6]bDvSG `ǹ]D?nȈ SE7 F1{`G"0zFL0ɏ8C9E`SiX㼶Aꤤ.igٴd,G6%bsQgC]M&M* hi ' ~g~[vV8&]^,t (baM`29[JR>:<""3/(Ccf?q8tU}amxܬrȉ{m(q 7iDMPZK ,@``0\]GҬ1F妔Lr:śJ`+N}>e6VϗvvkuBϯU[ۓ& [T5p'K5E`[ B` 0K5n$ur8Órxm"e VT-Tz9PporCo9yd ;ܡ=W2ڄ8z~U Q>bB gmNcMȃ3KZQ8ОT-lݜwѾpqMc`Gli؟>}ݟwh@&ø8=8d#%'q8F_bx23)5iFC|QiTW2=/LlV*Mh>reICr0$Y!\楨^r<\|)֮ p*:.׆<:s]@mgeõg>+9dZ ߳S~QMg;{@`2"ƃѠ7xtqIO97@ce AS|Az_:q,_鄟Ϲ9 å6J˖s-W*S3{ 3er ʪX @M\ lYSczrUKSC pkިV"fE ȴ_Vb/NToQתP-W1yaI)iF[+ )h*ҊȢ@ASgB4UY,Ht׌Xxv;* 4*e !Y+,@b醆O E]Ȫ, C-VjBU1MwOuw߂7~8-+M)y+&pٟ?_^xjg/ p؟ReKyjz?@X==zɨ7#$9d 1z]a} zd&@5A el+r ]_\&GF|Ng~ϡSO!}#>Ne?+"{:ﮗern^ 驊jy/e`Y~aN s!XJT'6Wu/VRlO3հi5 ]O +BcuJB򢲎V}m@/LLŔd-M3fXHtq|>^/g؅k<\؎0TDž!隨*>i*ks@$1(>Cuy VPYzv9kkzV&976;:x|>_Cƒ$K* "AJ`3~J?=݇?<}GKw_@D7/"\Ds7f#e߼=ϱKy}I s.p <NZU`@ 8f$n6v[)EY'PW>-AMa'2Yڬe'[^Х <#2wm]: p%&:ٱ.wL ރ9r4!BRēBogggV.L @&iy ݋dٽb9$=ﻦ5ܞ0]6ժIqGEpy ے N4D+- 65L$O@Xl90H}ZOOGj j}g5futF6$ WӅ{㔥KZj"43njL%„%bv<\LhFi)-b ~GU](|Un8U`VUG1u<85饊L,,t[ L-XW+y$ Aw$6~]b5,dF/n~Ųۇǻ_|Y6X]f1 s>HUS4ݶbO}L?Š8 0uC?UvlD\[[ pY,1REM8e7K:M>@ cTRpQ?x>*3pCdx9U3֛(#愭#f=c7t!75"PtUM.sm1aGm|0hMlEUW O3CM]'ݽ$8+v3 7\s%#'v>}ZzoZm6Og09_l6~ππGŹ_씺ulTDaĕo m ) )4{v+L]MTfx. l\ppwp1< pv70ziEE @Ԃ) }*2@Bjir>.S p Mf#c Am_,uoG[?4n+wU?8 qHwnaRW_GҸJwH cTEՎ<|UqUQ`䁜bIƑ l @{z"vI-q~bv 1 ECqE ט3ϗdB0eW!Z8^6l8lg;irп;f  p׫ [-1 blTE;i4ΫȭBD* @4aV'|1md󏥧KTژ̂?ǝVQXC(ܸv$Z(uz\Keb4[N Ϟ*`kꑆ A8Tmtx (^⵩^5UEUA6XAcDͽdТN -eTZwr6 ^[]n~mss̀h8kh|Ⱥ)ϑ{N6 8ݷݼǵ*%Ilvf/?z{s8 x<>=?lV~? @Â@< NRmMĭ <+CLX%Q`t\]es}]Z"| 5HJ#\]OƤ6xRLⰩ<@ASݒ ib.`9NKϋ"S3M|9cq^Nj~XHXNB,Msp^oAX3t" c@fG)&.Yb*8}<&͘ pkf; /ƫ՜ vfoޠ/n "@YhYGfzyTq:%rK.]5օE$(:7ҷ Fڡ"P[\pC+|ΡIcgTFYhiia&QP_'`AKGR) #J8d;:Ⱦ af.M]Gj/lo9x%tEŷ/;ۢ}]7,*}3A~~؜eA?/_?Co/v;=կ_mQvc4d "X׎ahW ^7YflGjy\Vu+0Xע2 $lZ:.3 @'s:5FGhz Hvam ۦ9qq`xbG)2/OOT$Ak QRh$WkGۃ%\9,#rp|#<ϲ< Cŷ90W]1DMgEݮvyιۀ.K^/0 B߇؞eba*K|6p]jC.@`v2/ p gyX>0 w`=s.8P{w#q=|O3M(xM W 8TCO?Gm{r9(,5lߟ_-+P;rh٭v멮Y;Yv;5CŹ-|b2P3O},:f޹`P4.\KmKB6$UW dl3Yd% U٘f()'cH"ARכd4 n!;T(H+5:U˱ySbc%B—a%15Ijh:N n>uΠ?>G\<yZx?ha;mݚA:Xҟ#Z yT|UV9.Hlmr P+r-?9sִ)<_w} Xsz>L7'-|y*Zպɋ-RQQ@mI*@ 8{G@/_Bp =.ȖBG\y݌F@×Ԗ1a=>Nx8mp3M<8"˃.@h= jB]LWnE wcf1Vckdn bp1r8` <+ ,$A7]9¾@Reg f|< p)N4ղߎVnjYѠy~};, 28ݢ?Rhб6/=m*rr, <02_P4b_ \wlyV1M`}WFN8UdeGn䛑8m*v "|r?e'3o3;/n#o pu|'S^Ks48vyN)J~y,.EW(Wh]3o{`aQe6,EA3%ÔlG-rXv: "@kq)[& ^RX?Lxn^ w2A^LtemC8@3BЃf$W[9Pp-JJ$i@ _Kq"*NCKAڴR}䨼J,o# ڳn8/'wbԗYaв,Zpk %/":7;p p_oYr"c_>عF&v˱x9%$<ޏno^oΞ>I*ma˿5+?C%Wsnu {ɆhZ MS\m%>v% *Я# W G $ǓB@{cAmwջq?JP 0fI 2XKҶc b%xirŁP^4~2k83 [s5&dK-$6rEьp2֏* 4!;R%?tm㵾./M[Q8oxdS{u<")L7:;1 ֱx\-:G&X_cM u.u  yo|V?p;R@>-Wl_/Q:|6dtccBx_h.j0g}ٳ/—xJ#;Fd~) .ixɢ<~/ @T\K]laI2ާ8j;XFa(|]jV:M?Ҟ=BIi^($ w7 I8IyeeF+ f1(:v/X; J<{?2#p>ywJ&J0K$dMo>ǿ4cQƟŔY@z5<}2ݎ` 䗓f>7vEo6?wT3vߴ2?1?5R#* {=q v*j;܊ga&H(R av\|=ْ3m=S8.ן2}kC-Ey&kƜ05kyJ& !^z8X}OAm10<"@>#t8vOb%y\a Vq*O* @ӺO<. ԥ k3}Pu:Q@e{Ddoe=xlb'v!BA,"H +^4m_-H0({7x'84Ƿ}, 8-_<+mq&rrUڔ2 ReIgiu9:x*zdDpN[W]]5eVrd[4lpz-8y܁'a >\Lr:hzC^c toY~;blz1c_nނVTus)jYn#r;nXVlfd (pe]"D(4`A[}z`?LCؑca3lnΟ6In^v8}̟VͨMv X;Dnf/y0|"Szd B,mQ v<r' Ia f?dwϮ,C}L ׮6ƒ K]]99+p7# @0 bjߙ[*lp]6&1[lXIƘ /}Ft?WØ?ɡEvm: n`!~Ja ΪnU`&{u5eMWki Mo]x8AjLl׬2Ҷ\ vc`GIQ}(ĆY s$>) vL@v{091~\dy~!XƁ]Oa&po Mduys[zOΧWu]lWN 6ux96u5Ɛa'R<O.*=% :cd<g@ @I '1@z:@+۫8Trqm(M R/mf\lǖ''L\C!vr7|ajMv䊤$w-ݢ,&xH)b}y5}-zl1h/.];anf:^cWv> W+z)U MCu7&.5MW th@+DH 7@2@tOijF49" ͺ%8f4vv-5Traj Aƒk8<}Olj}ouI&eTA\W=Zd[ c#r,\]2}vpi; , (;t9ROzX6M.B-hYo V Z0,@@1h[89%}7,9`A_ ܀橪o۞.8Z  ɮSGuEBeVtVm)_u)uD,*@Ö9l_m\Z5nXiBЍC& K邫nfQH] ց,t)lK]/q[>gAk?l(u3 z~KI rBS#4%{bKn֛bM  nq 8 l'Q$Wy=]O-Y@\SWdYN:bҙzˏO-<)hAz4Xc}8 jlvx*b(|:;m|;"`؆ozzr-ݘ"ĦYy ; [ʐJ]F(·YZ0\ƗdBtV>w@iӜnM=h͕ȜID2+ҏ 1 hwEv)ANdsZ"HWD4y/VJز`֢l֋?]lA')6>(8f>Gl>|{x;|t+Ib4[O[/X[b,[pM'O(Oe6θev (݆&V܁`hP=5f=5mA Lhu@)$L!FDZjJ-W6Aq)S԰{ν2A5c!X  > :<⻍.[ܲ7כ3 k~_1wb-WLW0lp(æjN!㐑]D;^S*"P䕢ezkdcQ+ء>x` !"8w ؘt'H~gWAQ\EE#DYYpAS- K\ Go.y[]#p usww\4i1z v!π 8^DndzȂ-rAMTQ1PFy=Ȓ^f&IĆڭW Ҭq"/],FhKW]܎2Jenw2w$ fSP(hP\vi))]1!,]ѮP4epX̖r5}7@ 6uA`4Oj` a?}o|su ~ȿIJy>- |F.z-R^6if;>5D,Tb )ވ'6( ~DjLvc%SN"Ä́mXf"!<^Z᪵#-544&Dv;:.I5GYX>I xu} qdAPzAa[+>5"y릨> pv u؉6\nn3mB3)PEk4hYEBЂ@]OS UDI-OkAq \/ \(pBy<\c~!Pc[QfGtC0\?vBR xb X;xA(c7O|ڴݒ)@KЀ},`%F}bcs5OdCfnI%+L MuY4RU]5IRDISaϓCnߎ<+6+6Eq@>J8/yU`9zR~q3s`8B;bj'mqnK;Slyn,6/0 px>G[G l<·)‘Hlb[NOH1&gPԁgxf o ;7#FdG5>vfbل^,Jm%zgv*mK&F拱weZc2-p5H=$i2SLiA׵`GV v>$ycz_q[v< nE;w*/,6s*,yKMIڮ!D7DFiz#bYe-]A"r8wkq:1Z0.`f1'ZjNh9x aqլx&8幖@Z 2 ӗ@|+ɀf8_@5kS3WuGa#q<߃f,ݧG9ID z5M~GYYYa#IR'mxTD[-M%pbo {}&dsOcaKB@ YE!5`ӥ\S H(JC8wFH̞(֘D&qEK) nԺk/ Rt2MG x2Lhh:EQ]{b#Xj|܀O+/?|wǯ?wnOub4?M{~w5o&c8Xɭ'e2%q`r,6ѠjN5 }q9.۩9! SQc!.-x97d A4i JĢhLж0 y)b_^` +$3j-dnsbkm2 Us5 0\S7}8R9_^^^_^vyy41nf ~fߙW>ub\+y 3 M>\c"q3{ a:>=>=YUIs ?@ֽݼ\u6v)}N`w*]7 B,+jCA@Xz9b,X$+2̞Pe6"h0s.eqƸxDXnq" 2vŃ(˸D!JO)@4f OR&ߊ'cEn(v^v>[ ~oN+jY@zן_,"l6ȉ$E'_/_?=~dL'h1My3ï>ߩl4M/J>}ۛ_:XDߴc}JӤ۝ mSr6~//1a3-ihD6)lz#n'Mm@v D2 Pvak.EkK[kec)APY׎Xȵ˗@RlPpJ@&1 vς½؆Wk:]װ0Zp ֵ(ˢ Kh@o^) )xeՙ_^y5"ԅ&?8 8uèɚy!^}8;[>clvA,x"58P7'I`ʫTQeP Sû/v~^ nn1Y$'?_IMmD~K@FPCr{XrXmWf CNQ><q&a?h'7WT=ˮy➚O7?GQPoyO'<5c!Ji<ߎO7yhS~GCsyx|=<|tכ/wo~uq؆v̌sbcHuh AC_O~{{{ 1pFUqewP )j*B麤33liFT+POޗ)dйUPaX0Z'Pl: Y!$;ږ\of ̦/oɨ/JVUZ6$j1;_?لiO#5@~_OTifcl]M?/?>|6 5_D̓Jrd˕9rv-Skufh7Um#nmwZ~{W*39Y n4ϱSKOt-%Wl lImـ'@ m*Ҋ5I`wTi{ԙ="<C IG `5$ RR0"&a~lJ('z:$W?/ D.T[,YcC1{rLp@BBX^ 0,PaFir>H/x|y}hZno2Q@ pCbE b*jadA(~QWqhihfkJs8իRhb+=V9f;ZgRmO˭q+[S //>>rBT*<>>}|ϱcj8M_ z777nn @TJZn]xXgq.)͐EaVTV& gAӰWfRS~.nj9{89쒣o]B#Q-lhjId&<}0{87?(޶pD10y8fRS+ dQ+i$a;ٴ'U~ >b]@^-=h蚙E2Ȗ¬݂,vv;źjiʢʻ:GXWĸ&ZGԕ&tUAiWNlna+>?B<N_m:kB?\|$:<" Pyi 6 Gk3cC &.6ʉ+ ,( kvlz^;$F6<:_& ~薫h8i 1pa{|I\F~ 3ד@pȤ>G9)vI`+`vkSPd^1vzD;tC `{nW0 |nxjźj,jb9d¿%_*vk6YZVA f^.5rV.Vl×n=tޜNN\ש7r}.+ǟ~}z|{mY܌"}sɟ])u_JUsF<2Zo^jJc6۲YYEn>eTQ [Td (tZż1ExɿJzHz<9NJe]ko|-Y8$)_ XmftMVh>ZaKWh<[m ŶñѠըFdnyWLa[`Qǝv^ɷ@zf9ca3ۭ@^Ӡt~#`(fcņk@\EU5Pd_}Mp5',{:~(Gc,6TZiFqOͿIH|+' d>;r=qWGEe"+$iEl;wrk!M`LƂv6]Pn!D 銙Gcogo:ybI%>lYeiA8 @8D!X\K =r5 2Bk$H*<19NjjX1ݬg=œAjExKlMTg8ь.FrVҫWڰVvZcmv;ӵ03ΠVBP~(K\.;p֟񓕹u;bT}Oyo4-?|= Cx|wwC\hT}vZK㤐oKh0[+s8P*b-_oןds" oo&l2l2P*D=D-nXviT[M9&죩f>oV>Y l)JzTZ;gwCa2M_t:Sj9,:%4cGI,5"+IWTԁ"*>.4K,3E\L ʱAkQl~?h6`l D$Jv):/輤 3E?5R7̓i v \;vߟO;Aω6#_,O1=^hd!s "#a9u=⎧9vl!c_c0N3ǣ=h?g)goԳMe_g|tI&zئB,ېvaT<ݬP%b*~0rJuX+U `-mYx{_mW+VoprLW5rᱚo"R[k ;]*ZTVjc0Z'MҼ{|w݇7o r}{<|xZjuϵ*zoqtTz̗ jX/zTNXQp&Fq YMtQI8]XxͿ??woZZ -3DZ#;gA܆ijDU^)zCV4@lJ&fz]#LWZ45 f=kT~{1ӫ@oul v6̻i&>XTR%רv9KMDf*3V 1ENؕMiC1v1gxjbk@ $sÊ+x* .2C[,)+Cq 6iˠMC< %;cwsT";x 0Nw]v}^y ;߈2-,+ѐzϧ$;吏LzBHJ 02Q8֗H -(v8N옡_rmM_7}qEIGt "'[ɎY^F'ƣO~S N9Ru5I*uqm%1Xp ?2/ p ӽ9LRtl_~wϧfN PR Q7@ يmeoV7͒89g'h#< @Wƞm.TcK5S%_r "x*kls!aC%FRh!p70t>F؈2B$M7䁔B`%yNj;옵_'P.ޅ7L #%¿Pcی ̳SuAdǔS$jf p@|k ⩚#ؔl = !lz5216Y~vϬn_:{G6,zN`| @n_^]|W7]lv\3銁c/Rr6&t|=^?~kl?K2vN2riZ1PnJZliCYP?}|y皥?}:PUkf۬w:kjT4v߭d0.b-J|]ux)TVJ_wo= RSG|vpP2*iT/~G)"ˑ,SO52WzbaY~UaȰ9>7ohڃjܴ*"I@2?dᬺ0 2LUyp@خ OZBFٜ1x*;w!I K,]iz u7\JZnXL@,j\6ϯ3Y TJS h"k(<#q1ΠFm[UXgr ^m0OS|]>ɲGDu>ֹXgc„N|,ǔ>{}yXȰK UM[Q‰YR–x}'K05#Jf \A2,6!~2-&Tk+"> M#⫚+-Y;PMJ@<^5|kq0i`[A_ 3~U #Y_r=eX @h/ʌCc`p7'[@!1{mqǹ@y:4`<\4@V*rEvOZtFIX%yrU4=19f:=Ni!^OKש栾VE[@Utٟ'KvMٮ=zgCTr/޼}|Z*Vo@"J͛wUI U<oojq'nj < w?_@imVl2f*4 zXsl<1U Nm Q1q͌A[&Em1@ת لJ,lLllM̯)f[60v6ޮ͒@#P4ǶzXyZ9Md?+fc<^V25SKfy~>@+_sZ >Q|B1ԅ"@Ą ldp op-xry94ęJm$tO+Ɂ-CܦH c)kqî)nǰ4vv1Q@ 2H7b@ HLaVl\q hz`F%i-# #6*) Nw$ r}컮6~W(%aC= 0s <$$B+%[?@p 7x3,<dŢc쳁lǽrڿ/ tê4:vѬכZ Z);-l_lPĀS\4+FH mTit>'p|z97hXyY+WF,[\XnTm@ڠYoMfԨVZpTk߿ݕʵ6_~ .]@!_W* x_T8mĖd)Sz cSm 7a_{HKC`x85nydڨ5vež5xw㘀yؼ"zn @pAv iWj k[%mZzUnX,fd:<+(,%3t+:*=I,pT $SvO4vAp E$1|_u)B*D+@$bd&(]d-%R}`%>w6t{ur>ܼB2zQF)528 l '9tc% sH@`]- {"c&2H@0gGjh葩iאU$؈N+p" \7k;^_V*Cpn 2"PBBWHe_y>NUb*-o,Ka(6<<d;^z_·6mW!jxdPoIsjp<ݿ0j%w \M;q4T&hLDP2Y(4Zk( Ш;ڠ'ٖm#v,Mt]w[(<]Lڕ]P,E %aG׳ٸ; S vmO~;(,h !npM(CYHwWOڀj`dYd@tRhHbc/8Ƞi@H< o@2b2]A/svƹI '!^͵v> fP)e{nZwja=mVkeQ#IﶃAOGt|6[N3j̱-y0귇jʚ*Ⱥ$ˀ$ Aj(dTT 2ȴ-QD1YAmE`BUT2}D1 Bhptl8UN<f|M-'֭HA Z?1 " 82€}6 >-ǎ45 0, `Pu42|23YWG]U3 3TxKL5$J[oܐ=P_3keG_.)O#oz@;`痏DQ.ԪJT. CYj[N4>GAc#7x9r[,jn1L{<+77˭aZWK@Nhu5R=۩;s7߽-Uz{\/Ow7ˑVu+ ڭ2%40TIq /xxfd)h.Щ;+Z49>Za,7'veٶA tz-jKzLgli V47':],Mnk4o׫bh6ێd m6G۳7v=Vt*Zk*&»9ʰ%nv ^e[$Å:$c4[OеЊ#laN|;v&H9 XVbZ£IǾcuu9Mb5/)uu/Mv-hTkjU{Knm4̦f˱jNM'2K?ق.Ѥ7c8z`2Š#lD7TEulyXJ$QYV5-:nĔTx!Z븲or$G2+r2S 1K WD&[3Ԥ= 4#T X =uOʘ"_x犮1V!4 ]5tS}[AoYDkn Dt3j<> :G8{q;!||O'Ow9$L})1Sv:'krDb 5 xKlEt0G[vD:A@FF-h_kd pÏm?vuC\Y }l5'3TꞜN' &( ! l*@xl8 `zQk6XW00gpH 1N-NJwc}mdCZtagn#ܶVYBҜSH`dQBg#&.ԣ3vcOwY/KNt5xH|)օ@Bdup%On yZgi&#C,eѱ ptH#$!0rhu6GlC C?pd{8G'N0͚`ItB_7wوu=NOp*v3gx}[H&/qXu继Jzט@?yU*:bR+\驜Ԟj|]husn5)wr\]*vq?C݇ΰH m;7d[|!jAteNBLѳCpCv˳mH.;YX z5*Ne.ZZ )=#Pkhc*{t[y5tZ-n߽ej0pp `^韁@gL*P@Y,L0Y%"tTpj -ÍY@FT86o'"Y&oii;_]{@:DIqDo,'tvt e#B9m x[)b BNu$$, RSF }g&<9Wk7ݟ!HxVj#t[M(Zb14֚o4n23i7evK_J!;B@ŏJz0#62AhBdיCX8i&|`9%xřD_@ 2Vlj]'Χ3uzVk06upt-~`ar>vP>*5ۍ:W+kPqO;C][FZUOz>v4|x+>v=7{qy5^ᚺ-ɖ6wnaQC5&>`kch蘞|L]64xUl;MۭVFlijhk ^fc $~/?}x6w{[N?t_bqCnmt %|ƉS |`2$(ؚ@W7ϐTt} 5[[ő#[mĖqTӞr噯K$SJz:mz<lUZA֭7ampq@DCmǪbCC @  QDlCVĝoXfYo{~+=v!DWQ=];CLOT@. h)7޾?f Ͽ?~?KZNׅb_Up1l [A(t$2:/~@48:%[|NJ$5|  ɇsepKdS؝R ph)bӉ>y;Ӈk-4vLG&f_updUÔt V#ӪOtٶ%B$8L^a14)N  quu(=L ܾ' ?ci1c?FKS ʺ> $ުR45%`)[S2P@x@Ɓ%9$~6 čt72p\?`RL(OjSIfGMZv8I(p+зvz}}}&yH p͒·-$x~~H]nJZ;vO펯Tͻ|m74Td&OkTf?_MO>\;R:\>(FuhJhy?F.C!&;#e&G] ]2 $Qc6"0. 6l(>Sϟc0ߵ342x| B9gAhe%`^ /TP˸N!h[P~JXwC!"*E EJ0Ycx8JG@'l"A8&:c;jbf8ik HH_&/V˕dV$>UMd,"Sp4|Tn ',銤By)kDoDF54'SmǣO/ϟ_.πJ$AAttyUC* ؾ+ Z*" ˊP[n\Np_,=dX(<<===>hNm8Ɛ8JE4YvEVo~Xy;];yw?ӻFc< ΰt5yo`nCJ~`:A HCjss`̚1ʎQYTylW@%!n (V b^?xxf=22坦[ڣFMTvv'q %0$y~~$*DB`$Á g Rp X+?+)R[kI^KLh_~7?cUnJUv އ4yAe^Pncf9b[qz>|}vXSp:ǎٰ%wUMPTAVI!!YVQ ,vs/FpûJ[oM;en2ݎcX]*J9UfKa0e~??}˵v=BV:֊q˚j:K.bv8 \ 7-#$w %}\'Ageÿl쨠nfm>6MP!Ihk+I$ kw =*кJ˜gټ/`ي /h6d} ]CpgA(if!tSǦ"ėW@0%^ha_A vA9Wä: O@.ϯQrhv۵N1=dg>ѩU?_ (<@@t7KfLhc꿆ܫK%jZ|^lhfWIx |5Ոȡen/2862+J\]i<ط8p5YW$_GKS@!Tzz(w[Ucfhls囷w<'r r- TL?K\Zmv 4:F4hUai3^ ?ӀPWCdfL@%EdY-RICM!P)Eu%eWVd3Y2FeuV D" Br c:h8Ɯ $p[Q׺T5Jk2Yf8u55[b_hJ1X`v\ 0[j!,o pf[$Jv";u/ 2W%n8ޱyC"d4A M./KZˡ8E E5 Ct88{OS,c=mbG; Ǟz/7B&'G)G|ClɵDpDည1}I8tz]|_NSg ߵc ϒ x6dfi[q<| ,3 ˲uHMkhxcE V2']Xּ_AB3*ǡ?Tt\Wmp L P3>5Mbyq 9=>;)iIJDZmӲ384p|4o PZssYF k Z֍xѶ|^& / /} ,m.k`Pm #A8_V,;'84晑6Scnv ɕޤ=cF;9뵦dԂEG,3ԝkqBh5wぴ^vLXGӫ9°Tĵ c:;ڪ6{5g"/FZ.!#1T\p8hh2߳Wpo YU/Eו|c79DoGLt<)NKM16F&s䳫C57C;_Ҽ%G\C Sȇ~>&s&dcbS%I__O!8ѷN6P@bolЂbX?FS8۲ :j2۽}w x7޽d=G;I귺FМh@@5i8Nwc|'4JZbZnuZcTnlh:\Lv 먛ץr薧HJȡĀU͗OR|{VvYɢ%sۂ@pʭf^o7& Ⱦf9P`Y p-px=e%ۦbp,C4Pa,k#cY^`7cy٪r $6 >ʺ(iq"uYujDFwM(vPq֧cQ#c, PS-U *[Meg[S]yGdjÉbA7FrF%]+U;[y~ %a67hYaj,[Cn463YmcǤ|"'^{3\?q:ޭGnf"ZȌؼAЪC>QvL;!"|hq˫,-mǩ*;6TXFbPNPdI|JC`J3(\tl/%9i69;$ EPp|]﷪zQ+V˹R5ǓRџnVӬv a_Vu"&<&^O 6$/H͗$Ǫv::I|NP jԪOn}oL΂4p\ÇBВj<(a, w[Lʑ$u]| ($8>zȿv^ gj͑$IprNNFfdvIU% 9眳p2{VN-P]{hTfn=37yF@qm 70C Ț*g.f@u4 [EQy6lSipX2mm #0B;W~/a,U^X}1e*N.CSmNNՙEˆ}[ݿKbp#} dn0s~6 *4K/@Za)[d<]M֝~?HTjkiiJ[%IFd$p&Jб*Pf=@[x]50K/ ]v8vmMɁewC )Ëm4ہ$Bu4c;ڳkK+p/cQ%Elyahߜf]߳98 @Є^[Z뱻 -6@bBv 'kbl(𪢠7 ]V4@QRxAxCn(zM2_o߾o۟/o5}öTPmW+b R` zqQQW81]-/ifo"[ђ&gO7Ѱ=U1a'cH~~ќH2zVFD]APa* 4$ڬVzq~<-(/-/P,[!Hp8%ugeZyŀlyh=A}<8jӸ+3e8vz>wd֍ |Twխg?ގ! p> +XnYz%M(br[M6> V+Rخ0S0z`n{Kp=[/G%P([,0*dYb1N23|?eN^J CmhvI0_~N/ߐ)>}/>тyKN\' C?'")QuR-jC@~mr?g1S+=8qIcS|@`=`_GG˫tg=<W0IKÎ&3Z8j Հ_Ni Xň^l @$A0CݷUdep Oo p;>Q%MtYeAxYfDܤh`"neZ (cG&p@͓UD A49VdKRs569:qy8d0;Em5Qt~u"7zHjEb$$M,I -P$C:?nX*Q<ԯv4=DֆiZ(SP"--30uO\q~ՁUDXWoOy{"d5ydƆnFu)ي萢VXP/z~7KTX*b35Xf# ACS(Ge&RG :PDk;f&<9z7Þ(z"lRpuµ~ G쉳¯Xht=[.<Ѷ%miD3)37~$uZ W;EW4[W-Cs_*-u֡s@eZջ?q ,'sRjcdٗծ|, !] 8p9$ 嘦]-$+0KUގ۴WxYD yDg6ec1"@{N˷ Qjx>m0TnJ2EiAgYƹ$Cbl=7;ǐ=C2o+J:ri I*|07< Yf ,'>n _b^ &N0*/`d]}.O( [ܡ7zI)(ak!oxZ[ddiy1$D-̌ ]wQ5`?7c=vvbk5&qo =%d@8p9Wq;Ji"oזCObHVrS(H.⦭ZhYf{Au=|'( M*˽2C>ҧYd^xMg$G-NTmWUXX2rIj`,f1d_o_iaϙEӠn0\4oa lX(PsC^I./r"u+d6dt?(V چ>ꅞ3A$?#ף5/n[W_瞗&+*sotq|M @},T 4-']l68&5\+ $SE$%2L32II!mA6 oǔC;L|LKU M=c(BIQdT)BbW*)G-7]|QѰ5 `&g&FDuo'%ɔjq!,)P= n 1*8HUiFu?$ɽH|y?_^_ 0k)rf:&ߖ%o$=pM'p"\&"k3>[ Qu߯q!ЄmБ+!iJ$0DS1r:* =M׷eS:3Ss<v!@ lJ"2(SǾ4 pCÇ# ˆp!dEuISB}G& L~Y¨h9d^yP(2:apJfM@ -&][2 +:&QQ% L-7u#6ee>@@!hC@mMe"q]vyNiza4|"zE~M rb&quFfO/1bYj3#Iw_a4<{O.zZ85;q=G/V iʪmWUQzM0}ZkF7m`vC7:D@zn%=_qjIҫ[ QxZ) "5AI8%p ~aջE k&pD:Uw9Uah.8ir|9ro,ρ$ ;/eίPPPv GNWUߎFu5-o8"R<)[3Y = pK5.֤›Q@t^Ootz8]+S7m i RqC=]Wfm P;x=<o~/m2)p exv|:6鰖%OĄ6x/W6\a,D =:.$o 4|6]O1l5@ f6L^?\K9j#7T^rW7?cp@:3xEٖ)9BX`ƻ蘂gˑo|@hnm?"8^aUTIVTVUiEc%;۪[lK y@-[| @TZnh+lX=Og&ө{  E6>MTP5ˎl yxuᩛm}+noN@@$,⠈#"f萋Ѿuʃ~{=Ve[9٬g_>=Ͽk-2*U^e / $0y#ZEGWmU eSgĘ~mbY$CLIthɓmFa(˞8b~[m7_VN:owo:n} fBm\I@$%mUޖ {P Y_e}۹QڗŰ+{H <c6 ;sL 9OKaRX8PR-MPi-ph=_Fpnخ =t|>AX U5jn6  5=Fnn;L;PP35Hiqb'hI{P n`GP6jM-q&˴@ pUB'@r~DRiaeEF(J:wm!ҮHw{]*+sȌxNYAڮf.IuX n'/O&;j(}%=~>O_lK ci͙z=]?h)Mhy[@~tGւrE݈b|6#sxxY0n8in=yiyUUi˗_VF`E8x?;N|kZ]:~ߝ޷7Ika_H5I|5K *jH8CWEY/?'P*"D}ŊBh@Y$vG4 7y%>&(m$vvÐe'tvIϩ<[Tvu -E :NDu=XD[Fr^N}o4kB"3 ݀6|ZWdž9\Ϡ,vGTV9OnTnj81RFb!2*:zYqa'nZy J^ߕSlx:xI'qQ])k]EEvأ$-k_=Y]'u`T~7ti>K)fY>_-Y$\ Me,s-w<Ȯ$C/A}W$F -QVURV0Q@{ۢ*=.eeYQ&[LUAhQݶiaxXiE] @@EgiA 4D׋Xo,_چg$5)fI $ 'p'8figGȂ,q[]v,66r>Cwoo-SNRTФ ˜nlrZ`,;')x;aݒ(=ɒ9Ŀ?.f3AkSRBjd] yCkCrx~}pw\W8!IIy`D1INfsIqʫkQ_ϴܭ)eNJS4%0΁eX+]%r;D(xs(D=(@51B|2-a(JY:ڂʮ+ۮb9婖[ ܊64HLTBV7,ay5m^فn=W%mOf{T隖g#DKMK*ۡRii[SC")df" /?480pTYC4CX-o(fq2tHq" @4۰9_af&'@]thX6_ X[1 .<0 Zr֚Ie!EE}] д?o_}~%AI c Dr&آQ ;mw]Z\Sw &Y ,RȻi)̞C8KfAUՇc&6M zE K`|IYj(a6A5׿GY%jrX9 Sq^cL$8dMfɞ[)" G{gOӇ燗/ 1d2S ="()Cdh6My\fb̰  #8" ϳ,1,r< ذ٬Qǧa:yLǓ݆ X)^ꂔg.pjNf!Xݙ.>|{Xr(2L NW1XTErqE|hCU|IU=Gx~?8B 3+8✵a\l`'9T1/QzHc{]P&/#ڂ#2$ Z>vU%0fE]ǶՀ:s$P`S_ƱkN2U Ysp<\yTt0U`!LК -bII5YUd\9SYAJkj6Y}} L%O.xȿԌ#gfJ-'|-7Ihv \S 9@])@A׻}=59Hs/h󠫃rhQ z4[ȴpxdFюQe41yLY=M==4u @Ƞڶ,(&:oڶxZ*0IțhWWPawU5ĵ0ЉJAc еC0^y:Eew`)Eqi3َxaCě>jB[e}ߝ 5/a!4 +d>@lEp"Ir*h-Jd-`yUo6mYAZ @MUP^XT9>C//: @l,V# a+-Zgx4Adh}4:"EheYqFR|>]&nj {Is'OƟ9a}OٔV<*sWҌvW\xhFa^6$.FӻX4 FR"YcTxs4ݭ${WKoo,znQfO(RţM!hgU`gxtMRUE4O혖)F,uՀY~~ @]*,% *AZ22Mr [!2T іKDc5,Fkp c?7p!  n0 +oyM؞ޭb4Nyѕe_SBK}52s*DM~!FGӶϐ^$ a# UY ]R7""1{~Y% r;n jnUfi?Z7t7q JPe l&G]5 ͮGa8u[UY<*a40DӔlKs]5?rf+J -Ʋ8-WT Q]`q´b 1e9q(LvIaL'^=aJV0H-FVxջT4^kx!σ!xuyAQaQgYM4q8m9懩l̩0BInQNTun8.[MxQ]* @{mؚXg@`9c a^Wcm $yA/6YLcK6'œӲj9tj==?F/// ĩ `bcAv!  V] sk_*; <; Z=_e4f|v[r}?  x4Q%]RtKu/&d,hm )~E-ˆ 椞9kpB)s;lmUe "MKG jA6von# qtԞEVeD-Xh~K KQf` #jhP܎#^2l Kbޗ1p<}ӏ3~ڡgx+˗٣{LGmS@e30s+=NKC~y<[B.y߆-zYF զsq~4#fنu_|^.6F2TI:iNmt]P?_0551+ϮBwa*eF*HivMOu{S7Vig !x]l [ &A`B @Ik%\Pə1 C,#єP<1 53loHX G,U E&R`p Xud\fF0OzLLgZ0\POzY>{ۃ^LPs+c ~"a'u:hڬ튾9\O?†w 3h]lIe7_@ pÁ4Q+AhsuCHQg~ ^mM,Ӱ-p0!hC 8@^nOϦ;3mH(Ϟ^b>'qRöqǝ[$j ͂t[32 ~39EL՚'7J ΋ W@y &jrVI % $RyEO`F@DvгQ6xCl7Be~{V^D7Ldk#/)(͵m]  7,I |Ff834- DOs n$4Yc#,mbDiws+ y?E4w6))Fcˇor Jdh}Cg:EUԠ{]W6WN @ u@%l?VP1\s}((z'Fdgʋ6j] 0q~q%5{Lm`Dn 08vv57\VgbiY'D<9EgS3Pd84q~F0f{xk`T)j6OgsZ@ׅƉ5>Qٍiw3RS e# Ow"/sӭ 2X>!6x6.`jì] °Jg&g ؝le{Vٮ%҂mo[mD{2 Ө)wIMMR^{j:dV$)Ak9 2U5qQ3JDNh%xk-5dmAZȦ*4SRMӛ)GY p;Xi._OoE}/ TD8|Bx;(pgE;z=`/i߼!IO\md%T9 }i 9ηt {)4Yր &3@J+0cSݝMǴ M|)d7%Mja9HYlWVvצ=릻VK D3af A!u 8Ob*P*qeغ J|0FNdz^Ti P5uu:bî/gEWT;{eB֬m׿z#!IQU5ET$v+pȋc/=Թ&[Ap='+IK 3D2~tm[|EV$;A3ɄGm o6jCCJ64 w(B 04{]1{(I$ٖ ;=Ӽ% 99 YJL !0ӣfpd:L<6 ``m{ ߦOb0|^Ɍxo2Y3fH9e5U7X6SYKuS}^d+nہbINbCY5V(F/@0Aн0doPTwvWKVm'dHmmw].OvW$ЀE= rmw4v0ܥMrJƃð$G B㲥!8.D&!wH qH!,;򶿼1nj= 1z?~yuA=T8+=<=<<}Y 1Y7L :gzdlvp>^K{x h ,۪նEo;͖ qe)`L 2НoɶfLC|^mTs.~@[^@ r#$eegxV8|wen+fZXXt- ǭUVvex۱dY 6|{ٟe=8aJx.G ER"OPm+te Se6,|SH2%,Hn B;(h f9.@T1\O<S7~jJm6|&{{.rmKEqGs Aa<0cfEiqAK X9J/.Vz“vW݃>8+Vt7u`y9])euؗQVhd= +?JJ7]iʱu'`H @QjNf[`īD]8̀G.` Jc^%٬cxn9Soi>=BZ2~zz4VY sowmoR^i&:zv]^p}^<#͇^\6K{;}cCkHf8.;@NTIt-3q`eBGe 9`7pNyya\fK!66rldz  $86nx;#Iߛ쒼ηvx{69zIYZ&q]7sw׷q/Ch@W)%MT?0T`ȳoOfz Yvި"i)l :~\iP5@skǡi v18&nyI沲*Bקo(8J^]x_ʁkzBD)h[z:iUm+xI4jя8!cQB"E3B=ŲK PqÁZȗ/|qM84Ga]Cumpk-0tnmW0J n!kyjZTAر0% oFFؗmNv}VH ڨFBaęgA ^$%8ÐۋNەT[ N<(2w]搥gIV8Znwil͚n )q|O" ,C;/ %V xR kX#%_kd A7, WC#z=1[at9{~|hUռq_&cU{~8G}{{0} IfԩU5E OotcsF4}O/?pBXq,G]fX[ÂaV9 Kr,ٷRF`sb2 Mޞݥߪ?^|MFH*>5xg $HGJl2L 菡Z8F6;VBsk g_A}Y^n|᫶k:nXIt{(ݶqRYmCQoEi!Kiz8ϠGPd <ǺBUnFI<KvXA;fxF*NSŦa/\KbGb8s}/Mk?/>U;f+v5Sj ^7+bO|~{_L?YP4 z=,I\; U#>,r}TW O7oo}'qMm؜tE_gO  9Uu0(>}?\^`"YӁ[vYַekMq"-iI)ˤ*+ar^dgQz?)u9M-S7+yIeA]i[︑E( xs?nD%D_7K?NTÕTKQ8y#:wլI +gN;㖞 >N!U^49D4XeN`AևEUN+NXOYeզ<gj:[mnwұئ$,7ibʼn釚h-J#h$#!4(l}߃8z{giB@1n0@U7#Qy/i^X>{KBЍ:4Ƿ,zc_B)Nyi{SDyʼn:X0j_yQ䅑.8˷tP@ebeLsBAK8нFP x-`UU|RpQpkP57SJB/Qn D!4Z J`z@ ϊj|n翁X D`ه0>+Z]q {JEpYbӐ1ȥ+0`NыlFɐ]@"$5i\^tDAr-BhLkh&qr$2c6}9oCu=^%Bi7~{E/x)c{=W R =% 2Ql.p EmC`߸==Tj=G_7ܬ$4CeIR1 Ӱ]ëV@ZNSAyxLpL+gJVK2KǛh2;5 *'(Q3Y$4L%n@%&GPKND}\0e;0?YhĂV$hG,qS~U>вiC{n_WE ]c' 0POBPF\1.ceTavo77]AXa܂30+hu` ˉlm"CE7Ǻ 7i*(H@NSL[6,QX CaIj\x;I, j:(+ێdpL&K^s3 F}9n{;ىnVxJ6.[0f3ǵɚ1aJKLxuVDo$@ A'TFиۗ~?< I4՝]`I{RWA͠-j73/X.WUܞҢ 5C-H lxle/(جdh`{Ͱv Cؽ=Og5r.(b͑X,Z1|]|\B[XBluZZA߾fALV<%EZw/C~44Ʒsm0DL2MXۜ14Д5 Kɦ+2M{S\vn_.cNU\ 290QHS'bopNj$5M,r,>0\/9x2|4ǧhS({N"[șmH9ZD(8[݉ w⭟Q VxHtEyagQ˸{ݯj( ,aQ #S\mm v:A`F0@}@@5AxZ LOM2n˺jr/' r=5dLuU(]OU?N<=}{.)񾽿K7%眣I-G>r*HyRryC> ܘ5gۊ63-!Q y^lAͦhz8oo?v0mO 4?1fXQ*6ZqMRf_lųf#߭~MkV5R̂՚uP1oU )Jdri>~Q$ #$YbXnzay>%+P,Tjp8S;$U&l5͔~ 2ˏGfkAF %d!ڸkԋ(+mWueC T!D0w8*Q*(^}߳f܈3 IQ!9EZdIELa7Dzn<ײ-0$ "iĽa$cO}橪+t?( EyIs=,;d K^zw93X03y0v餻rx+zZs_*@)DR8E {ߥKwx,I3oeo+ (N$gX-P| @@5~Gpr6]}y^? w;\G2/#I$YȒ!&j0\I izXFyR\ f] 5?9>n̞1N,6/6?,'!p(AFJYFB,ɘ~{$W,L1VK 4W+(B ,h ?H]lU)b8INWEoW6Ekr7]Fy%FFfU} d,&o ӊ]2\x{y^'vT5Fp]h/"݈R ;u{Ϋ'rdyYw1*+T3FYmv~4fuAvL'!ky11T7vªUxqgW84 .E; ȉ Ԁ޿~Isr  Zq(Ł{ىNB^1 ˆ&xKgB yV@>i;NP]lj‰k3LɊOw4ad6㱪a쟬XN(a܃OG2ģYc񀋰|ڵo3,/n:3A&vNa3jD芆75f*ocpHi doJQAFYaA 8ST=QB`d-\4 uj,(M*կ8˂' 5<g$ 50D Wߦ5*NJfc%-[[ W`]@-}#4 @ ōզ38`G8@ T*]j9kݞaPX`% 68 H)`D[b-0PGi=ǖMzvyX^u˔d燯e)MƆXcˑl_uF7KPUύ'P(ZƢrdq# b6yuޏ7BV9F9a~F 4,'+؂޻|o 7mŰ̸v,9UEBR@c FIk8;b!ۢsK͛JFlePt ҊWd,5dBK)~;)gJ$qf*5"N=`aOZ %gjWAt!^ۏ8\r2ٍ`__ ,m+1碲uc^`/Nƻj{ERϟ>}{z40$-Q,/WbZ. UQQV!$園DslN| }AKd7YeUD?'J8G:QPߛ~V%1k3pKRX ]s$Ze.y~{|_/Ov~zh)|г%Ҵ a%_5h$xqA(h9JIj&N`'tAҌ䋶X۝l?!%(0O=<F)Ts k!MpfWz.ozq&m۟LCyc58+g̐}R`1ƌ3쀵BZ~JIsBfCɫRz?~{|Ode0}ĕ;ǧ_14Ci>LZ?:c`xe~U1/z-~l~;Xv8^9NG1`Pr\3p 2'ч9gi]!%rw__b= SKiiׇo+| j퇞ѦVnB>k\ۼt;nE'Gt|Y郵f|6DX%rΫw.̽'lҮύ'^ nZ^F !C-(7J*+{=]ی/p!Iqe26?fٗ% Kw'/Zy9Xbv zLœ ;{.v/i{VÔ H",;L3pMTu83ۥX7I]㝨4/1ˎߗחht LXB+t&kJan~wuVfڕd! S۲]ߺ%A~jZc" חBCmZ* sk۟t"re"v~azFo\_ކy8끠 e(@@Li$('. SVUN)A"xd8^.q4t*QH#/i Qy%{3(U'PδDJuL*!i`V%85Gjez `| ݭkZgmD0%f[hI=ᘐW 7:zw6h`A8mY/?Puw50Nc}$|(i%kd:-V )XBad)(6 /ov-( R!`H }}a0^Qih\<i> ^bsg4KiwT}&VyN?{MJ:P9ð &EQeC1\[Tՙ(ж͆ Ҳ T}p,FkaG3a(>R \V矿Lfa2{z>MfV'BR(hOWs$eaG~Pw{{O$("_4bE@qay\VͨY쒥E$}{siQH(#$!kOIӢ)b=]kA,'0Vx}[FNcfA1QT]8v|nf" @EMgHT- $;47mFp$`Vjێ^n<K23J-XwASiU-Wp|7ӯyA)z޾W绛o0A\sx{<M SQuQiN3&5Aؔxav݊L0C ػi';cbf?5hIf*&J"أX rLגfFƯL )ؔBFepP+᷼ ;6?Ͽk& Y:4 !\ǚF4w}e]`;eNm .zJkqı++KvFJ H]؜ imnUkVs_s|:[ɵdAD{q>nrޏNfB)b4g*d*"*qsw\>1N9K\pkf$iМ_%$pQ\ S|6 RDG0֗Zƈ*#f3 z.Vݿ~/fd6y<>bF t 2Y,A8UveGZs\0fBNKωozjLPv Q)艳f݆`h/Iծ1vz^+XьbcXλcsOlp6#۱u+xv$鳟xn@2ǧ ʶ23p tX 6-@yc1=4+5B|\r8uL24hvg'bp#<(*k*(IMˈ3))}K89b4 HX˔i~_QUa5?ܓbg[ >V;"s`3 !b z5PJ'J >&p`tz2w]9Px7n;ɞ73gjn[Mg%Yr|j0o謠`AKٶ$ᗟJo?ө)H(^സ&QC%/HFtb9(ʪFw<@όIZ%d5]XJ;9JRJQdl{15Jf,U-TArP6>=I;;wRq~T#j^w-!j)u#Hz;;;mfq2Z,!ɤ飈C_B:0Q @ dym8m9ld?L!LO3t:u$ KNN EwƒB񟟦_yq=:} o)xB9E_+iwf+.s/E cA0!Y i]vw'Mh&bbJllxl4?{c0j+[eP3У9L93qI4|SW]7?(t92f?M3!e$ (==WbYW揫YaFkjޝa29X_\f%&@T^sIYg<0  U ZhYa ")q,9;9Lb[3mlzmh_; "(w > R %p9n=&\F"&7ny,>n>=-FL1b9⑵j5Ug  SUx~_~r2H̛vqhrWUDIk1du $8 c83AŸ)i3<_-'3rJ2zS0hzA)Y.jACƗ5u53|%rf kIww⚷iLovBKUSuxM7)(^(J))%3=!hegFQm'9Zc7.ILMq$;yxB7#ۭL,WzMwOϓ)؁ta"O O4B`pբi,.џ6)'(-. :yzX/ =:r9YPQ ~"L %b&YkRpvI挦ռ])3L|MH nv@ ˺_צkW 8t_><=N&K%qY9X}slpcSr\-̵֢j:_| |FzlM ,e۠fLƚL4M+dgz4:62%H "rn?]^HZHlYwǶmtBEov~޿~~`t>2|5t5Ӕ3ߪݔn8=F_O#Fxi|HD>もdVGmwpAo" &jdnmNٰӢ8}IA}C9|gXC'[]tjZThجmwX5 2Ï'3½=A)s?F*H0XM"%!y< Um¬(r-g.Ԝ d7'$l\pI10á?9=NZ9d_0b[^! AITs3Be3=+hvUӸ臟im\m.x=Nu?7 8S _`41sdG N[7]FEG~۠<ʩ+"%M1Ia3rDp)C-/O9{c";_dŪסBlNNt^b)֓S>؉vI4padSja|m^(AK=e^"Գ|W9|^v @Ntigى3)~I ;l$;;woBD+WopYЊ8UD)f&̛edRTɹ I sFh!!3j? bMQyO{w8jF Z⦪^2Vs$prmqzB_j͝?@`puE}yoQ\5硻@sy?y+~EWt}'W("4%vKlc8ى%X~}iUYQn=Dz Z|ղ$ˏG˾}["4Ḫ[?!-_ԖԨlڲ 5đf'H|@_n78-Ӕ0^ƇU0~6ێpILͼID@ ÿE@ GZSrilr 6T˫`:: -ّ1*#E7n~ӂUCL?xmů,j`䤰%-kil3N}[r˩8YF]iDf P=Y-3Eo22 䞟Iyק/vy8Ov9=~#WL3Mr<'M(ۺim'lsvjGErv<9pך<;UW~NzK=MJm-f=λgb k/F#T'PT[|ܼ@8(Vpjn$虼0@,%aWhI"7d?  ,gNAX 7< ۠E6c$nuJ+z.(Y'YQ=8@ Q>H×FKwWTIHa_v5S_,ypC `QI @B*-;:ũ>?^ )co**eH#۾&}@Q秇(=4@˓e fAdřq;-(jء^6ݍ\ Oʱ;27Ȳ:?qVR=8we$fhy'ߒn-&'ԣ.M4lWa&`0B7ė߿,8*Tq,N0/|=ٺ*"`~]̳0<Dx;]é-%EQܓmqc'&aEYWMu:U-~e~z߽YKd0F+{j8 ~k\3P+-en9lA`xپ YTN!eBIp-rARx 5B Uo1ʴ&X5PuBAפĥ5!## (A-cRH(퍨EQQJ2#i;0˪Pdp%'$,μ " 5צ_4)za؅n~: ^ kHh/o|{t?/YyI3@\5O\暤/^W5Šlhv`Mt kBHD`o(I?k-j GAWSbKg  H~t<,F1*Լǻ+JzQ+` 0|}cDz@QҨ(GH˷Ok2hn񇒌 \Z\v E1Msr)D.+iXdK-%"0퓪-dE$IU;(oQZ&U/af}=с|!atvnLW gJT74upΚ%FND 5r#YLjN\x<yY,7Ͽ:PեP5xw"p uc Pgq2Uanxs?{`Y81[&XA`&^^-S^CT%ay/WUyuNK &Fš.X )g;ZE]of\S/Z# $;WW^w'$MGP=Aqӓ'"Meܴ{]I6rڻwckfP"¨Iѭ?*9!F g{`U!;;0Z:!ɩ{6~ي uW6= Kn,:85n/5E)LW_6^[ ̍%~}o_$9O0>1xCN].% @!vv+)(sDҐC nS+Vfu{zfKFW[C88hgP/8l2VggyFӟWF`dxsF$A-NP>lxB iߖkr ,[~Ǡ/: ,GR C4Op>WV'x{0/8Ni6dIyߟ^?ExuU,KNr|AW!hBKY 3aU厡y~fuXn\>#-znHe elwBYA3E*4ti83hA vRơ#]d-̭nx:v|$(aXL(M[]͆DA1-7CK:4lt @;a]҆%>c9UԀʴEǤӽ=ڍoA;5xYz9Y;6e-Ёυ蟮_ ]zy~襂Ҫ]3]$t$׌7fG:>6G7^Itκ5qkQM Jp)ѡg=< v J,p${V5|ssQ67 IM#,ng.hB_N`(fYZ48!,A~ʓ9+fc*\ 4%Ȳie^`usH # `59ny+vK^u6[jẌ ڬ^u_j UvYqcLam׃*G5"H9D4֌9;(Crl|(>xYoTí/?y!d1>~. *j-j~0]eZK Vf4X~'Em5tGxMW4S7:4q1v=m34{IwݰHU9^3}/፳3k»5"k+%U;9R|[;!_<vkZA&~J{NJ4@w0spuqn:wI>N8k$9k:PMcLm&vmTik0bYVu~+ ` :'hr[Ql/g.ꞶMڕySs8zEeg5g٤&IVCڍtN|{==7P=`yFYϫ?j h4NXaA&`( s vy+ ecG+fE}w?"({i-D$W RHŤi`TPh3AIn҂UAsR!l:v(zc$qOI}^iLUVۉ$&8 FھfyT}EI4rasf |N%ʐG)yt Jew|0 ,9UKMh+G坏:p. l *gٟwS-HAX$J!)@A[W=nfp57DрI4.anꦨkinbwG}7Yy>$)V&ő3<5|J1琉nm9vFV.XřJ:YI7p|$o F h`-e+?E NsKNXiFc l.o8 8'G}׆:Q$̐0=:Kڲq{tMf]YN0H8tlN&XvfeeQ%w~\Y]v=ͤʫalѝn`H|iAi'Ʋq&iE.6:o@8ØIg5 aɍDl1**@ A=$O. z0Qq)dռ\5JuW =5nY31#zwÉߵl=pP^pēLEOo[7tn``VTÇW ^?#k-؇5tnz:?;?[t^*fN?-W Hj,'GӪZ"(6wQ$0!  V'cCrB<3M7]މr=)JJ\dez[QVzy@}>-L! Lc|~8C󔢳"I-9 s䄹j'fQ¤3/'pg7,,R\M]r)Viȝn,iQtZhU;J#f.QT n/_v 8onf*Ƙ(M4%V}[ovv|c/MO3}CY DLNZO{_D7~h *v <= NVț7ʇE|Cp 熯s˄(fDˮQuKK^\yQwC:Ǯ =N&vrBQD@liAfvq0 "W!:N\`< fw6/@t8:Q4U=ps%gXD Auggʌ7$oa7"ǗͼEDyE^5?٨U a!PZϭ7;pqU1N$LɌE+S>CjA)ywwTQ;c8E4]S?Q%A>6xNC3ꪭiLnnZS>a"{ 1dNO)Fy*9X߁RHNt]b CLKƈT͚ ݒ4F ÊjK/uV4ym{jipx<#s eK- `TETXDE @V}59:V_Vz+<RhQELK0Op047p_℺A H'VXSdž0/ Oj =Ლ`x & rm9uP\J1hdEcʩAFs[ mqs5!ZvD=İ;7Aa1 F"y+c:^!EgK)/pE[4jCv(c} pb۷& ڙOPm^l)`S+4Q UlL|H@9> /ʒ8w!v"o?oO׸eh.e{-K57>:e-pAf=V0Iu^\nQ(y|,OQq:~6Ñt@s35b2 i.xQϮIꗸ)ACjV15k`#mڸ,9D.8}_!z~bkfCyNrpTJssҽv q#Lqq+8p)ʱu3éq8^\v ; sH"zVaF%YQtx1(~\xBI^8h 㶴MMgw_LJkaQ֎i`n !`nŒjz*N;HGNaYoeƒb?=~U:AKO :d \v3X%3{ 5dZ i5])U۱`,*<-;Vc~C_?4gwq7(t{8gVp͎s.h&Z6XQE!-G͎MYN`NjL=`c]Gܭĩ 뀬3/2N|{T\Rh.yu.sݜǺ7~?8wx{||^q\.-|*1F} DU7ESyf1,?b*Bµ-gU8f,9rzxKI ĹrzKJ8e??ЖE_6~7i8kx֌U(`zف &ż;u'8/8D>=,H`^]uv $Z9%D^ vrMtzϋb9Nnyݮ0Η\c Tu"Ssi)iCDTmYHv<j5KzRhNoc\7@:LYGq \$L&anno~T4;Tt{ֵGUe('TSD4e m>$Kvdy60 ]8=`BږJ1NrlHQ"x0ْfʆYtIt+L )B&a4V=o-C5V㳶1 f A"#vkd nasQ.#0GK`Nt^'&8~q=[4Up;uҞ@لdU/-DVwٓLju}Bq#s ZMuk&ͥ0V;f~#))Լ`$! ǓIzw{NhyA ^MQwlI4gF&-NzР a,Ou}n>ENu5 Sup\^;$n \=QNA7R4$q,% j>yW Il4iY%CeLv԰2LFqʙ,$my1讒_sf !;m>8"z>;E[!fg3_Pf5[#BiU%]InW3΍!4?]Q`GOvp *0eB4&ɹhʼnOQv*.Ӎ@ jf]Vc_o -jI'݊@i:c/NJAQ} WGf^J. $)@ N&ɋ/a6~eUDI5Ǽ=4ia9j FI" yrL˳еe/AkAVm/ nc\~y<}P+Rت'L~KՍebX 50 +#zkaVY]EaZ`A,p1Â5BJ oV>l*n"VF>Q$Y2 ;cu|X=9w1ςeyVݡ9)?Nƥl_dcFTQ5r>j nHf`8A)ʂX#n_1Y>/HT`#KփϛHv^z*⶜\kںȚijQ/pԶ+O6M[y{T |@&? !$MPܟWn| E / !A͛yLWe8 !5RݢO%:A j啐# 4/4^/yy^O{ rE6(hyڿx@王QV67׿9F(kt8hP08c\_>PqZ$HO5Ԃ>Ar̋xE vxuM]ov{=^?t3~Z[X+ኃJNԤZōIE 68GՉ@; g^A\Ӆz;E\^4gr“}.I?*ZVOq9ñ nF9"*@L<-2 U KmpMNaN;`l/æȏm}noϟ%L+Ͳꪉb=.Ҫqyow0M'ix.>?DhyK8;?֗# $vvC?;=\?׿^Lӻ M7Ԫ]I&+;jj8 9lv1 ߜf鯋v|)~ݛT'z6Y/\GUWR|ˎ1,6+be5 1R6; 5A6#0T2nU"9 `ѧ'`UBgx̚cAYwټȦGUش~>=N|<>nIm6+ f F̕mb+@Q;HN]RH+_m ֥f$0j=/(awbAX Is VXvi~可_;n6K A@I_/+j%8؂t1ƄD4b@+\98HTygj`Q}_^znv8Q<(kS)vq8{p̋4]_~bNEHe^^?ozA V1h8CDCx<}oUY G' 8P'n0dZͻ&9 f)C?nMCPI>EC$ڜ`G/:8n6gQWjF2IՏRMVES>EXA$j5 S(vc"qC)L۹]K?]7D<˴1'4ȫjMDow@w6Yt8K뮿>rq:y~Oo_>M|Bҋ͠4Z5SVv2Ìk1+FFH3G ٺ|#9 귴EJ%+krNeh'fkTYy˘&_KFx(C=8N|u`_2`IAR,MOm7Fi%C88)Ji25/?Svt馽亟kL}r3t d#՘B -I5dL1! zڟv!$;ZSq^9[]|OA #`mUd<)Vr57}ET5% 8ANUo9f߅[}P5Hӂ(xz^JVXWK(BprE5 ҍ'QSx'-KUy.CӜ:oC {bƐD1QXw|hdr^q&X40/hvLKljz?{ߍlPJR0 { 7-~1a (b ~LztRz sck(4N8\jb-ZhQ%eh = YaJ 1bJ5\1ɘT墨j'wq:R~a06iv|^K^\BcPtC%Z+-x=8:8Y`M;\"1T /V7GdDxAT9lAEҽz@v؛v3O{\4ᘺj&,"4œ8 [cFVyՔ$KаM{Qd|O=7 48 O0M@sؒLA'H󮨏9r* D<(*b<_EW ÜM43ӭJsܽaU,`cpȚV:1}x9ls;^-֜a <4vFzN+jAG${?XI#,(A7V  #QZapFp? uH}^"c|8 PMu$o~&y>e٘0|.GI65Q"|af ROA~N=*Ķdqj+ ۂ9 G7V[t2oAp:h fAk!k _3IiomI!H~[ k4dۑ;(UV 0#`)#ư #j0`+y{y~^/-ƠH09R-sPFewi< \v?8ݬ9Zut=~loe+cykks bFԃΚ7BPr$DS*jkfO,ocÙ58ɲ"ʟ`'j^rNAנ:avK`~@(/<D$0?&[v17W7$ߛ2K?Pߍ/Y ˦a"s2\ontWa:$@fk/=\pUtSWSOLoWܾip8 6A" m8is-h岉\Hpx5Us7(I0yܜV_c{h`(BY237tC1OavLjt>?__oaCQm] ⦩O=mJUfy9de _˷gM\"Te>yLw]E7\v+_sTLCL.Dr)K8eEyaEz^6`?Ir6߿_jG}xo!Гe>?YD咊 )^^(vb)CBBC̑޽7k7H;x\L~ViX*dDK:t{؞.Qc=DMy^ߦ|Y^Bf(,h4Yɖd8D8Mc`Ix~Aq s.o{KV#~,״>XX8g/yE4 {Yp@ɦ#c(Nߦ[l u2=蓪bɦZ %rkiϐs(ZdG"vTۍ J0Uk"/L>6)Kvrl۬& C6n.OFCyX5o pii#. 0k,0ֶO$ bK+16=p`8}t\Cw[Hվ})MuhgmO1LHQ.f~8ӸPLHpL[?+͍+=9` 5ձ fX7BM[zr˴R']98hWPkV XiY&Qiْ0 l1+O?q_ٹ\Y˗AAyI9|f4Ht@&9)q9v< Yjz'-S?MTe)`yJ]Ck0g;B>$Q$ }9O~ %a܍#YJ 4jrKEnIG~r0ăe}5'4Xpzd*YZG~)߆VF#Juᚂc,A uʞrfͮL7@M !`J1Pa8 4 ,c p~0;>{ x>YzuԱ̰-g;>$gϣlky.59ќft@|th:)S)Uh YT^m^pNuTS+Wz:Q 9/rBDrB'ԛ` ڋqzݬy:~///La="{A&n3n@骜l ׯF&5"p1p m, eVmC8 lK'}HF T:{fdA}#EQ4[] SjY.?^~??i#{.dێ.i6Rޠ eFq1KH A4.N&>QC7 A%& L 40GA2wEfI G9j_tٿ~nxja X&HDʰh?Pru5kVZ9A5vgAel@\ +"G I x^R22gYI"Bi)jQ0M;@sp]>#ƖH1 MStȳqY#ls92!;4G(Pn tc Ǻ*vhyEd rZo8^$k5dĆi17-Vq!w0lj (hHM\V֩t84F}MDM[ aRl7AI%7\7v=%-6C&8+a3J\[ӕ.H`46mxkٞS92.2pXbḷZ¨ZgjF24@`ȗUp]yI0?&%6_c:u}eي2iR |?^v{}~m۪e0g`I^@r]5mj$!EɢłFai*\$LTp!\ d\!do7jr47!̴A_l]sb&}Vj&iZϑc:X.,)|.Ntiy_'Dc@&r*4?q\@xkݞ?LMAVrdfs6A SBX 1ulHSl]wdMH CJ$;&6IӡiEs.X7OTmg`<X9諓soQA$Ȣ T@#8\p9]xRAh @ `~.\\{KWx@@+marl7Rg\$9pAŦ 3NHӽ.b/C' qjHYPu = 4mp`"?],z,l]gнw{d#C@j '28H7x{zx/e>[ t@>> 0k~ 4,P=|xF9E%'Zd\G3xYiJG`42Ju݆i@2\E1z];Ӣt>VH jM$KgE y<&E=˫^ OV(Xzi tjf3a0I1I@d>b) 2,$f&vmO^Fy}~?PL\Qv:AjDwp^ˣFA6+zϲ*u߱rBM\\(eGXxzу!q,8yle\骣 tSÂ["]DC1 ̣rB@Qu{Ӂe9H9"zKfOǧjCA\aB_">1BeKlpF0y^[^n &7va`g<]izYp48UM8š.(T]OGS;_ͫN# "-rcOD5| F3Ԭ7Ͱ%ȕ"D ArC"'<ק̯ݗ/?t*|=+t]ow@{$^J"=WunCUNUqXx7߾C H5@Q%#B!@BNE†F3ob?;=Π E,ˉ-aB^^Oۯa6]L&r4RdޱlTcc)_CG3[ѴnhЃu5ms9MipJxYxuh_~hC(H.6HUet冇l6׼,*+q9.Q,DތvfqZ,O[f(7d3!Pm8~T] . M>oo[&1/E5Λfu{ Ye]M"vx~tXfHcۆlNM$![4A4&H13YA94Ħ > stream xwɕO{=gY7RlZjFꮙJ*TRʒŢ'!a/EZ Hhen{ވ|s'Odddw?7%7ězM=fU-}qA_\/RJREJŃJ\eb;,wKCcV_R=q/4*y?U4 lh-*PJm32 zͶvzxh}(;#h|z*>6;㚡xz-zSwleKJ.ӠH! jb^mzuTkuJSC'UhGd;Un0Dmv$k[#> C}?H]GDk-`ڲsуEcc`zuh}gZ[VoEJږخi~$VfuSvUS[Z/l|qs˟5,}?o>k/7H2hDhTba@5 >0M  &H eV0F9>" ("0P 9R *RA RKE` Q`@vĐ޸b )X88M{G]j!j#̈́x#gHNсrX):"@Dd'r zu2` BGʣ1s bϑ,ao!c صc]{ڮkՀ -YɊf * `@`xz p(Ҹ[ ڃဩ@ccP< |GSS PhQXo@@Q& X BF7.>٨Wꋷǵ6[K)DHJ1]ne] ] ( (Dn)[`"[P1nU9qA z@["w1Pppa ]j#?a()[Cf!n-+/!EFPB"WJ }@~DZ&'b(yv"4a8@ ?pC$&`fG; h" PCK(D, L7>jN{ٗ&mb1 NZQ2Šn8)V$1boXQ46#9 mN0_ Dضc8+`ؖ8tPMI8F4+Cޡ09άe !=tDIK0p70E[h7f"1+1Vd=Xi01#I=Yxq9X@GDI+k4 >dԠ F⦬K|*(!؆^`P,Ҳ4(">ą}dX(,4Ak~)#\zW) sL.3@ NB9YI ˁ=6a)C@a(:TlpБ+4t(A 4pF:e Y*ǰ5wmj@@Of1٪ˤѦ t -DsqܤjqzNFV @>呏͠H$ 7$EFRR됁S B9~>3B[-`$6:6C걩ۖ77fb Sۛ zMaʓ!Ј("TK .Z:9z(A,]mؔ0L "cHhA)AI؉H0LA4K osb; RJ>UN@ۥQn0( ) q0"g@I=W0ëy&"(QП(:jbS^#!r ^" Q8 ij(\Dttشv#@0QAJ`FDB11!! `@ !|`iCֳj ZvJt ͪDR5,֐rLU5% 05Ɍ vTuİX8a@|ﱳ'0~M#14C(fRI0d6IG!)PtE͜A!0j]T8ZbEЍP8`?nN׼z'J*;̽CwD4GkГa}7K%%KY2Ho')LMp#|&T ʭC >Q3+`aNa6\⹑$asnxld88[\ Rx~}ؕ^=)lL 4lf9Hpu-\]g5m2сt)alP g" 09;)6wZ KN \- ":ۈ4pklE(huB0W7Ci;Uf /2?@X# [[٠~Cg( I1xCgrI 148!wu\(=R(`F%r4+)K%rhN q*ɰMN Ot`2(sl%da<%7 $8(J*PK H:֎B!bI:_ޔ*v2 ·$i2P>iT_Af~TmlLT SB2zpRJEilUaX-h'bkv;eB~"F!mjvE6I w!nCxN;F%f/2h!PD$l!rt(+ p[bb@u>ѷ&1NE zHP DB"!H Q$DaYzPzGcR"J 8ldE1n 4$E@p8X@\VE\IR QV$벢$q|rgb!gK/zcW҅1HBGڀB" J`A(N )mQB$b\MlХWXmn^B(h> C?̝mSbĽEPHB7SwSȢc،䔳ge(qts'N6yW5!C.vKAt̥;ҧhIe' l26΂Nz+`{-6T6ß^֠@2@[ 8KBI73i2QrOd-]Vkk;ѢC%(t%*2T-UAIr`n.jYƥxP:=K"B*EG.3i\ D)E ]JR*4 +̘~Ӱd]\J-B;.?++DCZ z|Ad 6w1lQn#ƞ$D)# [,Ł.ص :ٹb$yT 1ju[:10eLLvXJ2ŭy_e!15pBމ1)QTg@N&aN E5`@%zj,aɯQ'ᅝZ0wQ=F݆-Dx +]Z^bHmA/^H"GE"Bv%RAWXթedTmZ+Q M cR. F-FYt|*%a=ƨeYG<3 Nʐt7kL4|DXAh!gC t")Ll8+`遣=Q8* 0)0hB!mhvnaH>p 7T2`䠀Mf!~~DkFB7*I n%V*Ň1ئ@t%Z; -th+Fxfʯf@R bRŸ1BWgRS*iW U߼ XC-tI]:Dc0J eìQ:d<#m9o@j . J(IEJ~X^:LP[P1Hƴad1bI19QWmz">DhpJ. NܙQ.B%r[x]4" 5jSCMK=lId(= p1!ёb0L{1CV3N+@çY>; F.͇D; C5>q>Ģf¤SS࢔2tv~Or=dڼܡIbA`k;)%=ҋƾ<[eQ2OOu1JPN;3.6)hU`LvZv2lعQע8I"j0#[ՠ2ĊrRIx@^JsއͶLY:͑r R;(te M|ĎO FWU+Ѓ2ܖ RXb^_t $^ U~%d0'RR b'BPV8pK0$blth;“p6C-@PPK(QCڵ:^VRDqCNį&Z)%tßo建w+q2^r?)rGY"0 =R1AI\ &C(pd<>1|-X@-kz,F"_\6 #]oK|Ώ<V\9" %uRBa~:VkD#ˡA-4~;1) Z3VԌORj U6.dJ.KR$˃N9,YO&$8JR|nJ V$z 2ؖpQ6FJJ:ri}vT<OORYyJ0$O0.clc O,!@U֢4h GM(Ԉ舋 ("-mOΌsHszmKd4'Q U6+ /8ᆇHC#=x(g+?QIV4 P>w)Yƈ9c~wz7) > Ng֯kƐ/ 1D ej[,` ;.CD>e%';":ŽP]l%%hJb">ȰC)'=(+4(x /=ӖĊ3E'hy _PIxDZ0!@"F0Íatb8"4u! TAFѝFI~2p{o™ >"@y}~u.>Be鉬p;PLJ)71tILm&R-V*P萠;P'8ݛ4qT̩(LܮMOyc<UV$AN-pS,v\VΖ$ДD2d`P=jF`DRm K@倎rc0(7ʈl&B,Nppk\r.f~KR0 AW^uDҞ4YPtIIDtDKEV41wNH12xcH1'I%LX|UJ9sgNa202V \Jsq,Z:Qe;+=Qd9)$ It X]6,AMw+Q[hP|>Aanc'IXtǨېAvT>"qtJ)D@ޡ@pbgp;u"S3)qRzMُ$Uްj*A*ϙ :4=,%b+ƈIR*G,=JR\4„|xd2,w RQ_") xp0 HXݖBq"E憴j[DQG>î1 ߥ;; 饌g+%ĔU.ϒʭ] A1ƃb+*G0َXn` Geŀ Os}ǫ~%ٙ˜PhQ>`<< F߸Y\, )JNAa'R80h+ ܸ4y+DYpY3azm3mkRב2ATHqWiI m|Fe IF`C6IfESH:o ҃v@\IDK%5!JS>`Pyus)[tZ;@V彄=tCNH#AiD!B ٍ=98L .wdv q턻MR8 U1mPL0\~>'@1FCsm̐lp#d R:`KR%'QtШP :ѭ<`!( zHB>Bg1+DŽM^B8Cm2Cܓ%ÄK$bNrsm 6OqҖ@hVB5&#v0!D J͊Aߑ6'N㶂 AswKTr_!pJ}VHԣ=G m*zR "v+I<'~WQD$9],[BV$LJR?Kh(U+PTFӨ!A:CI}DPl菷 lJlU A: G: A\h_!̃GNDfDWg*RѽB~=*G&kK<,02*QIR4MBk?so$GR 8|=fPpR.8ШV):3fv#aFZh8ū&+K1FPSmIX:ichCw4 =;PI4 Bcj0@I= 5F.P>DThYiO-Qd DH4g ڣV 3?aHR#D0 6ң1RM7 ;.L).~J~?Ν2 id 7а Ve0S Dt.R3 r 7Fڌ4\K `ưaB6h?(aQʼn|Q[ +_ _JÁk|ETWB gd;imfI,)aO;C|!W(}ȔjLX~&Ԃ@blgF{51i^a,D YaaBAQ;N/>I4 --! PN$Ս8zz*B GB @ۈHsTqM!JсAЁd8/Nv6SI=E]9?#yI$ :(Ocx3qD#PQ%C q c"Ų% Æ ( :0IVl#miBHTgqp""i Iy< 7rFB`cH)1%aPsw6jK|+%i;>7&u/ap"t#hDhV6zC-bd`dv":~w=ħ1$@dh 5 U )`1ÿj&x?SpݎMK1VLё&.F(18BʾPCrTFzMb7!t{H?q'm4MUF FcŸ FAQC:pӃ: {vxx6:pMH:+ "n C2]M1 .(:h%DA4*85Lbe0''A}P',8EǴ2^ #A8m3۴RL(Jh7;Cmӳ;|H ̜$p ) l@!IѨ%֢d1B2Ȁ#duD{YE Bm%TmӤ:\vFf5*2fwmtg6$fڀc##A!NOdδ=1|*Y1F`.,z9k|V6 @͖{G`-m|wwI>CgJZi6UZ`}H SoAf̮R=Rx' -'MҜ|JiLd("O'aX6c`R$Pʰ%:||ӃCvA0A+@E]anFbh> S P sQGd:6 qA0qGtx L"'7$)ØM&uXF(؝-bćF&5*I~cԸ]R;ZH;FlL1Fjyv5 Lwbwgl>r/]g%ĝM14!3&ntrKcS$:Llf&y9S(.M%>=(Fp#3[܀c9dG41B¥S}S,آ$9ġJN9W9Fbj~8=G@۞]4ۭnPQ ݽp) ?TzPV$g 9Lj$ V049 Tu$9܄d+ΰHC2.&ű'lP2^410/&額\rK8 Czp\@ Ixj {z܊9a a{4(%b8W{ESNdunCߓKCL̓3$ѻr'/adOb_D11AC 3 5#)c9i@zf46f;`O*+-:vmd+.4~$J}Z8 J!vϫإ GlPd8gDg#'؞e_TvQ:PMY{;tW08puMN7h`*Ch}yLGJ^_@9כ6SBSEn3b_Ӄd?`H LHCE@.zק~s!8 yא`Bq[Ԥ]:kSU)r|N>l^pz8_lI33OpI[p0;O?IVW|z$vcz4;ݣLIȊ<&XA_^aH]In,dK7`rr&8;o ?I)89u7),IN݃i؟Ր1g貴cG34b:Ku,5[\'1T} l}Ct9nha?5l$O4:t 2 %l(ϽZ+f+ @-ٙ3&5>7&{`9ONǭS?I $c%=]cvwl9-?@IEٱ^9qp-"ڬ`qI2=Ć*S`$Q ~@:wBറ']B1'fL,R nO^ŷ%o鉳Z,qV.YW~6TY?79-K+:Sf%#'GHX?CXsb 3ʹvș$"ÎxEw(Iv!3>A3ĥ E+C,&Z̈́E3R,0wc(U?#иɇVh٠38ͶF B(4S3+e@44] tZp8i6DZ3IHVCgZ YlxBkt3rlZsD mIџ?_}7m +fR4(|Aui[Bxס:&lrʇ˪&7I.he 5$ie+vYUx$}8aFfM,Dž t{4BzR84:ں1PU.nqs\#ފi.÷C#3 i hh7wBv}kQА#$Qe1X[a=r6J!Bat_ v)(|t\%L5W(p m~Kg  d{7 f$,3˹0uŋW=yrڛ]qlyϩ3sV/BThjc2b?_$@'] ;D*6YHGn*C :]8 Lm):ppAA!Xt;iL0 E׷\Y䙑G@eeOl{MmXoaj>]}$YbT41hRssADh}7kH 0>Nv89Br<ұ`OLzx$AqDIUR 7Y>Pv <0bTSbdj$,ʪLRp , sVZ`Ӈ8fĕ-"|6N+Mָv>Oʖi#诏sꄒ 1@C}8jx(% Z7=]O3!F mAIl\~Jq)$_O\ Y)DYd,ٚ殥)1QeX i,9|k7Őg |pbBN"Nɐ+H_ #;REi?z` YAPhDx8:qMhEPlb9s+ƅ〥sVMbk|9e!vD 89 fZiV8@⚓t"~ 8M穙4Ia'H'?zM7=G?tyNHzJҥpO%uN`CVIs,?K[^"bKM݀./Đj Ņ@.qqG! .p|}bxG D;OC@ Oz0jT@hzd:ut$C&kF\V_9 |/tX䚗ʊ'e³]ZaK.1.a-9:uj@zvέ~G20GDkϖ9.B+}5t7aTDž_kԁ$w])pϧdωt!:,W' gtf+.fm!S0u8l92f=qF40@ro@8(HN GᗾCg퍿}@MjۨTYB^hZ#\A]bl)F,Ui[*lozW鿻񪑔ug@9XI0r"+pwt71cZ*5?`8ס'6S`ww'ga8m6J{|MͪѬBں zZ(P-3^dy)y^0瑡Y5~ dMJ֫C,eaYP>噼\f?sg:'ɬ9@zxF~7˧oWaIPKߑ!G2CE^:| ww-f- \M>I͜N̈́ottd '!cÓ$|!= B#`YrJ}or >Y({_ 2Enj'+`vbWC!On8@\Yx p))sf)hx,Xd*&{(LK}5QGNh=[A:[݄Sn(!y.D\f,N8(2ƙxjhx40mv偁حq^Y߄nmT=͸P&M7wr9kdןq"aY)(xV{g yj][i?Sg͙llG[Cm'JNv.zwSN4V1 '1 8=kv{+jH2_BFmc(PW9447pt8Rٞ(RK󉮃Cn 9χM`B^F҃L?;;jXtc;+x>Wt> m g(x)1c$.xM4lF Ӭv;OcJE&huѠdӓE4#=\e{J!YBqCΓpL .h8`x"LUnνpnt^à tŧ$^s/׷sZ`'i僌٧&re dAc~_[e5E=Y4y?{KyHBCAӦ@!=>d6*arCpqu(6[!;p6KOc^g]?ueպ|\{&hd1ϤhO{/B%|'Vęw s5~E/7 Wr֞qG˸EܭYlE권n5R[튭>*"! 1:^Exl+.^/WHKV )?ӄ)CB#i- jBLܑL#uyDW0(I'3ozysH492!z*d 0^]խ"R2cp {n`NRrژ6r[wh,>y ,~ Ɩѷ૨OCD>5faȀW䘗+yTtױ3:X3L݉L4&Xzng윋e?dNF^ tD}">% 7ZUҢԤ  VX`v D<$60!]%x_fM!s57q22(tݸzO}hɁUɴ|R3W8GcY-m(a&_0u6K]G/ԡ5;#|Jܴ1xFŝ=Mf$+DxW bu(~0@@+$p;Fم8˭mEY XJ6h!2|HYz_DSg:  67/eYhf]5"hե@z\Mƽ,f{ v|)!0|01ktϞx$6)1<]G-!~hإ=]-ލn 2w^ɭ<t*gf Cʳ4a4/'D,ĸߍ$+Fѳ,1Z A)4$M(H8Ɇ@v6ΈgKHibQj 7b,DE %4dZ^˔dpьӬ8"Q5,~C#u\Ä\!%x/KL{vb<1Ihkpvz[@o;~! һ!|BPu:#z%CvV|`e_ٷ2O~ak?hxҦ4=Y]ħ͛uq %`a~7U.nz+@wDC`dZ pO J^b;zw @$īxT5NtԣL(hou#z3Jr)(^QzkpO@H$݀ÿ!D"5O4эt1^P_:mDd!՗KrP>oO0!thEпnDD,P :~#s:*_1dzPę8+r'f']1u*'3 ŒG^ɒsc$[>Dqpč0Lx\t\'=$$.Ma$촞''Y;|C2">oukQ>㧘C=Æ HƩgzCtES-!8xNVYEGi2D<者½zt _Jds*_P2JTV!ړL-_Rm%9 2AFDvRNeNU06MMt(ɋ9 7E\_4 Nų050oMu j7B<!'xwy[MgFr@SKzG%>9 H(@1&z+k˲:1ԍ^nCC#1d+nD<&5&T=s\b ˙PYW%P9QgOډ^]t},kZՂmr遲fX1BY I?(*~@%\fKO,:Ecn;́NҦTʊ60E4?4$ q 1 [DH۾o7aN̒jrOk聹&jH:Alcw?{ǽJ}O'xi<4~ƤK>0x479: isP4z$Eë[C2d HA84<&Q$HBԯiԫԗ.`EnCYDѡ᠙ v h8yRaRfH!@&0fK$ْ6qޯun~v$ڄn=:I!Q}n5"aB:@K|}tPΐcLɣA 20ĸh gh6 o`Kbdِj%)B!%糬mldaԹ-!Ѡ릜4\f π5s $iVжT(\mCVt/GP}֊8Y Gɑ9iU~d߃qN/ػ!{<[V?>6yPў.CoQ2z#'DJ;C U0d Ca#-H#!H#)!vG/4h|J%]"s4v y_GcJ. )̐.7lCn~bd@FJ7zlKd[1C B6<= ptCwpuBW~LnOh?Uz[0n^/oPq1\LM*sMp5VʲkА"  "Gt(2]L4F6ڑ(lGymTh,+C,.((CcEqDu6! !C+=3L@a]?5xkWD?>7@^4D}-`T }bEG'X0'}S^/cw7r|0³ wy'IЬ'YĘG_d܋ ]&6b2tjDdxt9[k0A: :1وjV7F6?xA9IŌ<#rwQ=pF;w@X:*<NJ'1u/"C5+(vB#3%/;QbW#L迾KW3~> ==:V"  R~*0>E'ľO48-/K 3)}XB$bs\  |"ߌ} >QߟH~_3NXc!% )kn&6mPWH⬔lv1{M5j^])kcag }c|w-Qţj; 5K!c~16_9ACȬ^Hz?@ RJFY4 n"PO}3CA/'i0a *Y>5u)AIPGX9RoOӫ%  ?.B4b75! K Ҡ2lш4HL`o"Et=`ġP|J!3wCA c ^6#G17,1"VB5 QBV?W?U\O^/L}j@P} -<3Q?@r #I?A\8aT# ? LR >u/ V v$GrLDi w" }AUţ[Chq=%8Q4g'#%@DYkE@T;cm;c>lba(k^~b QdAzX,x.?dġ1f!Ezy87x)FQbhIՠ#D& ٌan G.|DtWm;Z]WRB v ֨r 2xa,þ̴ _i (/]30 IK) JSd83mb7:3(pC5H<+ĩǸ((&cbה@kDӑ4Y= WL#Z9d=cKŘ` =^1\)b aeIYz8(ȄAz$4y1RC4ɠ|敥a+1 (}HqRwFŎoxlГ5Q? h wBSRheTO6Ѵ%mҸ@MѡރOvLJBůiDz4HM ם6V~v i e'V W!la97]m _8oL5==6#-p㵑Fi hHP)̈]x(pQ>@ <ƃSl'_@fH.eƄ7&Lj-tCH+U~1{Z"2 "tj6;ޛ ca2_GbgXMV7&3iA=E$;Gcd$!4V>j*x#5)ލ&^G6|O)]9u4%FT"%݈dCJK+i}yt6n!b L!o^GtuyqrW0 dHTH:%(a1Rt`2?P3GxunIvY{'6;q]"g5k~%Y{x6?Hb^E~cm?= 9+`Add MF89 TqpRȺ$)^n/G3R̒Pβflt/-)L4f˱. z;ʭhGwƠoa}kso㹥x^V${HWI`F~ӛc$W0*B,:~3h쭅3c#oFbB{nSaRqYNUk6XdE~뼃}DOY9oW0zuBNt:3s\E#P܉036#dnOpZ *rc#Ϳm]Ps^ %1O1ϜȑzԬMCth(hvNֶfb5yBV>ga}gWzv-+P_d{YN+:!% P %."EpCa Q"b K" ۴tV,Ů.*aG yzȸi$*Gf3TBk&f(`f9 TgcUkc)<#7kr͉ҲwC/q7r<`u<|XCYV!Bj 2ܸ*D`ΑaQ)siW/\r+|(zEG($>(b(J01O,=7v~ b^a؉7ЂÁP uK($C^C^m ( 2ro6jonllomiiimklhlk7zmpɖo놦䅂;6A_x?޽d":3 KV`-PE ) (g$ YYAnP8oH&(1D26Cаv9 6Hދ"!MeY%yfهQ \_ BH8-Pi&Yfo9n砪i_vB)`tA= 2fo"=$:Z|~yp偉K& Mw?|Z굯7n9֎֎׮=xm-M-7oݺz39sй+2 E$}$$d1=OwLn~4G `ֿ,OgC$7x 9ܰe4 2i v+4f3Zl bRE Yu` BCr1S hZD:JkzňW隍VHɣGoޚ~pzVoWk7j\?>W}k>zݧ~ן~X5|U /7>[_tOV}5z͟ZMʫl]_^fӶwܷmѲ] jv_.^{7KKw5dpL>u~7A?$!,%$y,=3sO$6ß> Dl}cE?<Gs0~tZe@GYX²4,dt[BZp5L#w[)s$94@ٞG [.>s/l?= ]8s/xu]t+u._ ՉC֝?w/^prb /TwW.\trU+\9ʹ+WO^xs9O.;Wc~A}2U7,"sZ7 ȹ,dFBa"4%N,0ZoeH۽^#|?09@oE򏢓@zpo;aiajxʢ@dXTZXKٿ/J,ZD룔Z -οp@a۔ږڦ}NYSPNyЙ 3/lC_Wn Mjmu6|&~{}O}Ukݼ~֍[nP55 5حWGš斛- Ad:hvTݥ7:|Vs)qd ͊o}Eb&۽O&h]$/͜ErW01'Ĭ)}#[InU" V+2RF`zh6@ &\@wKVD24X\jF5wھfk;*kwTݚյ5;*wo.Z[TY[&%%]ZSh0nv{:;[z:š[^p]_ṅ 3AA)pD2Dd^g BI Oȃ(QGIٕQQ>DQ@uo9t悏L <3qc`4fEC)+(%saHt*-+޽kʯ Jvܼ}N;pcQ>u]o_WSjuMS'Z.}j_я꽵;Qu^Sqh_kWKSJ/>m-MOh?[ᚵڸ'Nt+m ;(o 55ߺPZmoy$#4N0"`H#r4)C ˆC7^$.?"E,I?J ҙM& 3<@Qۃ{CU`Y 7C ˞=Xƌ TI% ba|'Me jY:z<,$]<)gBB7vژcwC9@C)25\j}[=யo+*sI{jW]ΓgU?uEՕhygʪֆW;݁췿ӿ|_~e_?G">XV'n:q}uErsn-?b}o6H /ֵt:sC7o]il9w\kWבkW_kyxCsS}uήޞ7Ie>y"7"P9C{+WxdK6e$(yЃ y̲`g:'`?YKݾ'W;5nd\JM_{ѹ%lɀ4uQ2H% )wRrc,zL^ln)-dk%%ݻa'w74tGpTku"_pgootU1+;ze\ZUлU{^ja!,NP?4^(Ċ#KWj}5MF܏, _`*s"r$HEsx 1! "Ѽ oa|5$>=5QNr"(%;XaV#_ xTC+@P5% 6g-BZU__/foWtú>>/??_}Rյjw۹woۿ~?/?/??U_Uo_k]{-?tVCvܰg׾36z]e?n oVظP7:xx׉o鏞ζCu/_k-]v`Cөaqw`22l1WJtXơ pF d~oy 2! 2Ȼu'GY>N|;G =p,iX |Yý*)T''q9@SY a%g+RÒSTd kh80i0容KG6{.%@LrY 1Tl ROvh 7q7kWm8w]ێpuwO߰/ݸzߞ[u n5߸r՛6~'}ɓ_8=%Ǐju};ڻȾO56jQk/>䧿~(mN55hQIAiyIS˭ζ_jh.ƶ/],C7|ykﰷgx8$)ɢ,@Nӯ[L v}?3cyYމ?")Y F$0e2Iqh*1}iA[D8ɈR7!8rb" PJD/VS&2>hDq憍Gho^:"\{~mkϽqwCnsNAP99'!(爄9#rm*I5fZU*z9WIU9+}s?o޽\;Y"Dn6."& < {d9wڜu짶J ~ "t]$;>n~N?lk' !A?=>9>GVm>8>B/EI4xe` wmgO&O?NQ'W&|T&6< ' W'^I@+8!ĿtN|Mee) ;?%XL n_9C$'\e*XVŮ*Ĭw?PC@!Z3ˆKh=F~~&_ˢݻGw&MIyP//KyYP\9 F ~y2GvJOqfI;2jk[&cqb=(';Kvn9Ve%LtFp<AB|?."g4!f# vEqmR跐㞰G9o>v/D/"?9L+h ʗ䏤+HlOps9#3V,GcU>S-a7o=||G=r:]T[R"**d?шĢ\\.tĢb䇏fde"J8%2\\][ӦPv)5:ar!wp؝nF vCovٝvn`Yl&֤VU+v" ?X5뱳t;3O氚/{h?okP==%ͦ{z!n=- w]#1/1qY{6,tqԉM>?/@wa ajhޏ? u?bZFw;z뉇=i5[ϾvD &9˯>W"egSƱ-@9X_Ejh>twA:AF_gf=)2?W]x)GEO2$<( )tT"-E̬t:0sssq9ɩI=I{}ZX2|I *U ȵjGqBE,H%e--*fKTx-nњtFcе+Nzh@x~ 2hW~GRAO-FE}eGWSV#ktk>團C+Cqc<<;!ZcF;6ld/W>&~IR̭T֐G j'!QQP9鳞ao\~ mE/( fŜ3z>F^~@xaHLg(/P6>;cY[`ii8.w(Q=O .tپ|XPYө54ХemCNY}t*YO,ElYsjf=&O;a\QenjO,FڊyaGGK/?/o~qF+!,⋟?.##D?U<'G^7تOgabÊB⯑cpbG⏥cGľGY|['t.[@`X +k˸Vv-nvzFm-j{"֎5-"#-;u ĕp'o~AZXݫjfq19; oL 8+~_}/߭c5q&c^=2蓜ᐐDu9zO\>sS:682`hj)H66`ݧQ",S46h"DǙ*l fK?-ZD[Y"Ī< y:sD1J>[`3m_ǙAzz grWBJ|3( &_LLl=x\9 ?x>,2ؿr]>tGC\SS r$AR"&>K |!'Prs|&M,pL,*_fiy46Ăt0+1(4&53'IfLOTR~A~jFZ!l.ͥq'VdҊIU#UP|1L.$ `"+*U2imsJ!YzGF,++I.V\LPGlj0;<:mnENl<_=n=dOuOv1s@|G)tr/0e}81ωf]}wTmߢjbXK?xIBh'8&W(zjXxOa#1^#& }{(w0[/@ 0)Ap7C_>) 14FmQ֟EDX= k> -ᥑOYS Yl"Bz#L"D)Ix<>&3s"')eR\0qJ*Ek$Q y++4P/g&gfHyPIbrIUHj*k+lNBTVsyKh Cޠ5.,OpBKHdˉ]TnXE[}Zz~%/ڧ~ij)<X^gn~=]=<ꁿ8TTaL>swGrlm#'67X1Ql?ĉ.wgX GWr~P HŅ(` f i_OC/g콄`z+Bl$?,<@eq(<ã4*(RAQqxBWP SȤ<xXZ*TZ*I!RF(,ʥ"ߒPD !׬rQvnfJbܓ'EL6/v C eިҪ#.81@XY /3jbۏm{xfǕvb[C@a ZJhuk5/h=h.NJwGذ'VaN`O'vb0:߁r_D{>g 枿bAt1,ENw"_8cكW(|u# -6G@ w^'/:'g'6V'ַ&7wvVW1>E5r1#`} оU7aCa{2O3x/xO\3T<πwvӷ1ʛߠ8cDcTobAb7X=ĵ?D'P8 W !xxM*gTOc&8G6Nxeaes.N^s/v={΅=nrG=#@08)x\fD%%q$ ^VY DRVU!iL: BL% ,r!H`"3>O`q*'/WX\*RBЋiL0TZ/-K;Z͢ ԛVEo`Ao~W(i_G;^"=ߗ^XXnR>a$Ʈul,b+G׶&aȀ(KGP#5rѵȱA(#bbQ?Aw(Qw(1?{_sQJ&7S1L~Wh6OSPǘ{+_ƅv"LCI 8Iv^`D*z(D!Z l>M ~$G+«XVBA`e?\{} Ҿ{q߁]@x/+k}uZYΤљtC1TaId%x2%E<"*57W[ĥ2TV*.A\]W[PqE%*. &B 'ExJ ,2!LH.NMKfu u5e%B*|!TimkTT (˛j Q3=@n].A#^wHaV|D^A6,"(Gb;>Dw#5q9\^< mpeVE;|9ߏnc q0X#Ďo= x07Ӂ7s7QP?@@Th9D/z :x  >OT?&ϙAcO<I埉}"&v x" =_ ~jx{h_?l&TzOQcq']QF`@`ޥ=}v6i݆yiz4 Nlom3hƷ5[-QH BT LϦ)bauD&B\*oi*drX+KJbQ^aO$2'\:%A ተO\fزҊ2b A'iEb&v(2)>/bSh!,o4Mm}*UTzo`׏M.x]LH _|ocA.Fx]| ^{ۥol!%4朘]ݜ,؞vċ>?v`X'2~;Σ빧oQPi ,Z ir,,)4UwQ],D3kT/P^@2ދD=lO.XfL3YCh6` MNe|NS0ft`lg _z:c5'&tqcpJ3Inj)XeLF&Eu#1،:(bO Bk? -va @f"IP# Uoy80 9f[ޅm&std-:M,va65ܶuf2 sn۳YF7PB0`[mnb0,Nnf>IO~ %QrC%߿{7SgAOj=hdel_PD8EyF28qN~M<0`in_wVfVA%KeEٙ<2!E{hkPdc=}7HSdC|3d0yʷ 83b :P9(؟0jE [B-2 2M#y8AS;S;t&vv<gc"qܸ<iTϰ ǷNl`q4٩7;M6w|kts|clpt0,K@gm(QB:[ 䑵VUв:jUUYݧ7kTFvSOeVkي*겮~Z` v[;tE,;m*Ȟ=1@dJaw|r{R7 *KmV5JciZ2y; ^U!{0]GPo{&>2<2k2?|::~q(mM,CZq. .\.,mjk IM\`q+L ̎aW?a7 E=q, {V ®eq.l }PglyhȾkyFX.6Cօz#Ɉge߳r^9W+p{!X=N ## g8=^kF{ *X9Ny&F=cqLV@zT"( ky74)U #JzMez@#v[C[Ў_>{3_EWxX=(RmV0 @3DZk^SfK;sqGS(Ђ~] m ׸:0j ێ1xa'":s nhoLN/jVRף[l7"琫Hy`"7 g #?J[2lF#aA^#.BPc@ f kq@n*زalU?s`:\ P+R@,dX\UH.PBFK%dEZ*erXD I(QTYeKt#hD 0h ;߾ jj%ZXLd0p8琙x0s[PB+! edd9ؓFV&zp`1Ca1ZI it qQC8> 񐸟`YmܖvqWTMZv0'A= pi ؃:M)7^ޅs*X'-DmsYgW#6I1+1z CmEUriS*u:e_ɨPCYpyVv ȶoe׳Z^%*(3RUUSY^S%J -Iګ촆7b -cӞg`vvBщ/D6֡nkYC\Ռ-=}mV?"jp|m1{1;wt"[`i)v= y)}Ӷ-zvq=j(-<ی>s\mV0A!u"]w}kX֭MWK4 ^Em_;ºKg?q$I`4o5$Уm``Qn -Ph! 2 C!@ V׿t/u!D:K26<9 x\aL64HcP1(,1XHx@*1xBTXTwLح74*+BB\{-h1(v}TBfvk4Q6Uf1NY*-ɵJD -YB#H%?(]'&ִ8)ׇ A:6}hYY+h&D݈WnD%[@@(=Kޥ.bgó^l\Bchr7 uB~i P%5Օ5]WWȝNNm0).mOOmudU-FY9p=16;=fn[⭦A #eڦ^ycx e[em%Mm5!Qnp 0HJm*j5[7+`X5\1f4Rj Q ;4nQE+zw`f6 ^Lq׻7pD;Сh6zt"|hy Zo9XouUjg~xhlIc ؚ:t@= k_wn`6 M_wIu:c6@:(} @25 ƴ7w ˛]Ήv\wtzmSm6F -t.بiM7gA%'d~g^lp2]cʆBURu㡶s)mVurC*T'h6D jֺzTH(4J]c}]c-,):RUSQV)cr\>f%MÃĬ$Q bBN.==qrדn޾YPW"s[wnx!#77&'ړB~y+L'syD6;WPd璩 %H$Dhhw*`WoB?hliUTʺ;}Ke Љ|N;Br)F[XVt+*J1w`hw>7 `F6S@h.wtT4S"/ִ`xQ;GN-Mv&tWX+R:]+c:+7*''ڲ;99>4 Fu eG0MFʘ[Τe?Vll**ip.ZSi--ݍ6O^-L55쪺Uhm3nE?81f5;`ҍGk鵊>W|Co a]3 y5$h4M[Io1ZNqLcNL NMw'EU(fjshq܀,4H6F:LvsP#Jc^oUyj4^Uh)Z`xU )> e|}9fwZJMZPaVv9坎qA#OZ3赀 5}pW"U;:-vsY7dBm=Y)=Նf dC6ǔIisL7'-zh6(2)vr@^Y H|NM<ȑ)q;҅] ~G+ݒ)hOe7r[h=je!:bQu ^R,<&ɂT,XXNcL*q6N/g9<_L,Cn/(JKyfjʝG7oܼrZғ|\vrC /N|RD(*d%%D:-5#O*$R܂\#b2A(jY}cm{g۠f$IGoSks}[{I8Za4MUti>j ɇz\[#Vyf]T,9K@;sF5uUv)FIN ffl+x-p28's- GZKmKzmF-u /v Cn(gB=lW tVQ*%2~ooP hUU5I]EES9LkoryLNqf`2 \>$.55 wt56՝p0+JuCbXFum& Lʪ˻I%ZFPh"URJ"k*QdjL*3 :ĽZJ$7{BZnQq;tz kr3QldjURMg(A^סwd2|SvU zdn֠ZEFnZ/-V]Q!iaUuSkbUc%V{*+^*t YDnhBje^(*{PO+d*hEdIf6 mK;Xy|.]Ŭ0j $mn~Bai1K۵jr\ueJj3ZHD*;e4N *)Kj,.%KR:]$IxzAzA~!+f VWN=NJ,U)݄ҶvM:Y&iSժ!uPj'jzLNդ2Yuy8Q:RD^euyyTHg1YȕI*tzѹz1'rBDܢRI"'+ E'dr!zJ Ri G lTD%L+)%t&O($I1Axe%,YVZum}2[M~ywنo: M!R٩3k!y Aeт>d;Vp^ `@b4[F2ijXvG5YP76uv š>!3)vrR-CdBLUhQB4%sޏA|z:-G$PdyoLlko,&dpO}]S'0%o,e' ɦS8=&_RmpQ|>KmQdu3rKK%]=uevU]Î.)F2+r']bI%m Os/OI_o_N\~'?|w;뫫)Ǖ^a]MǕon=%=y9k~WSy5R;WWRq9S s)?V3ݝonf}}=_]Izg~5+?\y{Íofzz[n>NϷNJV|w7Iۍ~׾p+ps7= ~NSҽˏr9{\{6kI3.J8QZQZ6I:OM~K%N/Jɦ}BH ^{Vdf&edTe ?$޸{zoi[)2]ܺLsv5dΕ"2[Bb%2ՠB3¼BbNAq0 tTV(U%O瑟d?Hr!VR X|!Iz*L%"HƠҙb(1YXIBZpTZ&pi)ɢ'B񐛗I )4:gAL"L*0J\QY)TX4%!." KK6IJERqKRY֧VVVrΞچJPaf d=ힼ/9mn ͕רcV*ʙn _y}@;Hr &MRK]ޥ5Fڤ5;M+2*T)^w@ե<֪ZT"ng8JOqUT7P7`duvEuz vWtbK65J$<"TJU֖8T`r,VroJ:*jZk!{o5YXZ\6B9ݙisfvQj3ٔb&\X?Uw4@-aQ(Z@GOih 4hvZfqquz?~ߟo~v_ 7| ׾x 7~zkIu/^ƃo/.繫^O}t绤^%oWD:o} \߮~sֿҝ/ݽp?7S&%^I?s;ɿ\kn<=8/)w|ۧ/_/g=s~rKw~v7N_{߮ʭ/8nn;s֩[^}*՟_={;2 L}\v{p*/]8wIgnr /}_~pt_.ZyoU%W?I{Xv&!;we$b9X\/,2yi"|0G\-e3h<?&rr " K"++$0L!WLbU,wD[@gY"rk%g74וI`q{!8Bar2 `#) tJE 'WEtɢx ((4LGxx He22LgұGUP4" iBX WUʕJE?)j&mWw[nfWTiF{f' Z׾1^8uw_u΃7:t\rM녫I7|ʍo>ƹ˷%ApIR Sޢ=I>yDxxp6΍; _Ϳz wo޻IŤ '|OK/(K2 dh4l0uMzQo0fd0F3 iuZN"@.,qYG[p7ٞfu*teKѶ̔XPt"su^gB;H:.I$Z/WkbbGoDIvXBewZ[Ao F`- uzR%L*"zL|~0ZpRjZc82 w|MӴ#lijځ0ɊDUnSz$,_+ڑɕ%6ZNb2۶wGtkmJ#Sn0 yK</e6V<{qlWO/c~WXָ+T 65{j=T׆ׯ^+xQJR7 hΓo*\!/e˖Rr: ׏,dfzqynvj g'PW3pԣ9ד_Lݛ^nţEvatq A᳧KyȽN|3. `V.+SK%`9( de~<@?|6w<<[\qO?{ON/ޟx,a C%ed8}:X`rPE_=Y|0{obs~;Oh~rirfSij)tn091TTNh g{#gl"N)v!pCM!4 !Ҥ ŕ19J._K6OLJ:2q{Vh3yPRvs%ZWzyucp;]6%.ݠuq3Jjs˦k* <`:-Lh^x쟿r,jhL.?2_`7{.Bj4Pz*I*T Dh:HHil5J, azNӬ5k;r+]5jېڬ,["y1xN/]RJ܎-U"09 KBd/W\ nG#˦2kknx!np;ՍQYy~ws׌*'ҷ4}anWٖWOXE3vS`΀XSVY~9y ZLaH{NNw:1٬`VAW08,^{~.wv5 n[:r"NSH67T]]^\Fow(5F\0h7x& /$trZ#7_<'f栰e'3_?|:05010 ~nG_=A~l髧f'fN?^x)N</=?7rXloߘGЄE壇K3P6 C<|6O|hnqrqi`ݓ٥ez=SGS,O̓e Ha84咘|"! H%Q` h2Ʌ s?7͓g_lj76BBLjz nkSjKJ5zh_/ͫ/ [dJ3JZRnv;VTn7B9*VK< l2ICy^*I-$],&@&l CPp Dť '<|35' 5Z ,>+4bRs3+?~LIapdJR`ȩeGCg?9 1x:8p-GqDl~ijayxN?bFD`gvKL.b0t:æhx%b.ä3(,.KckaC0e2dƗ.xYg,%t4_stKy'jm{8j4_߯W\MW3sND5Q}#_/e#{ZRqSv`Cݣ뻋Z4Y!p%8;mnn쎀o4OW*P-tQ]9.P)3nemn ILR4y^WU^s+W|f#wBQS7"2 vzp|oq1ãÍjkh'EV ;6Wkhz~sm) #uu8FDYRX\E {+|+Vz>p"l8ư'Ja7 9s06"㽾>-: QJ&-,N<|41<9|A@ip  y< /a:آXHBEQ"%ZVΑt)P HHS(DxV ?LZZafhB:AcLXu'4!S 0Kf$Mc$2a e &tF`Wem6GG{;''gggGad%3$|L"2 1%"&4'Aa MͭL.þyjœ/&\zrnza 2mE H`ER\4frx<.eXR)ϮuB@JD|6Zn EեP :R `Do'%lYgp Ad,ːJ<])O&AGAgL2OG+UbҨtF8*oJMZbK8J%w%_Nx@6o$=qƲ*g@ g;=2LFөaY?>=h:ѩ0wn\W 2/,9VDW7NU͖gWg'E0^, ۾onmool`b9:=:8_VhX'ڹy)+k5z Z AFXoz))*깰r)\Hʧܪynj͆z3{폸 ^3WJC:;lTx6xՌ1^+=qv;wAOBd4Ih:MFRȕ6E@ch  DdX`Й͆CaO*:>ZqBG81ЉF*k"fȆT<Gc3"T؝Mx#!iOj5Vvrǩ V[m ,d(u}րPähF FCp+|iuD(wBos{ms`x輽:owcC_$Ev1L:+,ސ7DBFw8b[4[l/onﮟy1>Z7?<9hX?xի/o_^\?|~wa\rSn2I8'b$Db<囉_Mgs(2N$2NcfHFa2Pt!1(.,3[¹tXLE(xH&/,B-*m6ըVDBZa֨6tx|2Ld8,K!!iT,EHr1AFTVp%$U V×JJ%O.H*U/'6^.rrxu./4{TV9C*Oeu6Yz6f2zJkTFKivGH"OBQtxz7+\>]eWyιkGuvi{ȕk;':Vy fYUNhmk8Z?~k{g-R5%p4v9=?^FHXs=_gZs5݃s[B߿Souꥬy7a:ޅs. @-jqLLcR]^CVSךٮU4fTsCkˣ\1K:e0깾=;>ٹ;;"ǧF,z痗GG'gg]\vT"J6iR{`ȚfݽO}Qv ?ڃa?#T0 xR*T</pt sRM!Qp:G@BSI|]ᑱt"A!d"FJfҨ( IdcXRDEq\n2VǕ,&b33DZ]v'bRt:?lm=::n[cZkw/v߾{˟??ӻ?/ǝ՟7oʸ!fx4a@JTaQZ,ZC{4Ͼ}8g3/9"T"V)"T,)"RnIBLT*drgtR(#oR_Q r ܘN q8R"s9LHB8vGBj].4i* d:2Zvhlf R>iܷ^N2w P2Ţj3|)soi1E*]t[D3>g$P)8:x4@/F/a8"F $JFq@!cl2[up$b/ o4?hSz4*/.BC_k?v_k{w7+mn^sIw}t6Nkk7gkN+KzhIp9% QUuj7e^{5 W`ڔ [ﮎ3WcYLn^G'Kc,qXwuzujHX:zBRZ&I/&|a23uOk=lPmB%`憢7ءz)iՍB9?~_~_?ۯo/~==Gl6)Ȕ|OY$[$ґH"H!WZʵWׇ|J!ixBD&u"Xջ͝͝QRؼ W ŸoV޼ ?!ϯŸ-۟^]ߜz}ͭh0G^t@F咨L-P29bB5,U.0( `ytQ[')z6kPR+=I*VXDZ%Fb%ȧV"HHSۃFu>_&-rkhf˕@(TnͪY$iULR]pkШVZ,jt @ITjaU:FV\2 \Xh4H C %6 ZA"PE<2=1q%WVWVH&2Uh4J\nDJހV2J toPLowC5mu?wz8yg_;~?6{zt՛7wG'Zqϓ}pwos{gtrvP5ۣӃ˳mPApwuumgg"^ vGõmhpgF'Qutpz-r؊粞l gU_ {Y;P(k Owk^ލt)]m%J|6crлBXoۿ?_>~/~XO>}/>z6Wj9Q!\Ni{|.fC4*U+x,a61\_+:=l7p08wϦW!Ofa tF?^@gKXD#V T#Yk+B9Ǣ!xOA 1+0WpNs,bB*Q% X)F[|763N2^*T&$FZ|xTZ]Bb/\ԇ~z<?w_'"ٹ{~bNojjl̖U&sw+Fw[~k]aXil!Ch,WwW?+Vh\Sυ!VH\FP1ap %⧡PdS2 bd,z T4bNgku4U,f$T*U(fUL,*=Hp ~VàFZ6 fIUp<&r:-TJRD \@ ZiVVGfrx @EH<rU$"FI7%:=;^ɹ\ q$2iL*q{!qjI[.xY(5[T6]3VHVjl1Qi^VV$kFw9'PB ޾)WKBޠ6zo9nwI{GϿFnmm7NϏvF65j;{[[j3ʥb[ҍ7]2v7^nZF[Lhuc78ڑIe\>QoVʍJ^.+tRppBJ^^讂6|W ݁ptӑ,x?/?kh{|mlv& j+mQܶDv ?`NwԠ5\N*'QH(y bz lFcqGXde A >Ap<٩7v`4MӹLY b<D%ՊM5j#+FHIb([vEs@pLk1'qd,u M~o*?́׃ah{@ SۻϷFvJ%zt2ժ@2TX.1@͹{.t:?AfJ`~A(\.ӬV|&,6'LhZEU HRQt`}$NW z-ufRrh6nѨ3zn;&S\X2Zm0SPș|>_"h2XL $HB!CE8>t9Nn4K2S&f7..Aŗ˯Q,]XB BIf*^S:QzGlJ6 oZ&ˑxqF>ZoZw;;;;;k{;śo~z{훷of*4$h:^= Q?_Jy|@Ó˳ӣӋ7*>\b S KZ2ہJߒ(WW7BF9ȵz7 4ۀʆs$ԥR2 Y|32BkL+J\UJbOkDrrZ6oӯ\\6n|a `|xG66hu`w0Z\\ȶb~6 {\+Se/Fp<Cfb$Qn Ga}^r:N H< H"MZ\h0f˘$q( w>) 66F#`x6!G`h+X*¡ HW)t60ֺr]iw V)6j#-L(Vr*_ ƳXϔ;rg::9>^66{7Gw'`˫`nnOhkS4*3̈́ /p‘p>llA;HS&VIQ)IJ%<͖ghTխ`s+Q]I"dX< Zb!J,fZ=J%Y,ADFg0iLN^'\n2)L  6; ٢`X-RCg*@$Tk`6{~N#&FapdC,O($Sd:;Eb$G9n+XM5ȤjRR/{-t3in3XhQ'oN |ȤʍZ^zZ5{]ǻwl߽z>/_}q{ׯ^ݏ㇟>O.WC~PSd:m<uwtkD|y|yh5I+H"||v||voOOLSvo0Sk­@g( -!rhR(ɵ5`s"*Rgp$) tb1 veIDs'|&bg-o$>Jcr9:+RXX]N7wWnBD2tt6/oo/^\^N؍&cT" %)0tuv{}}m{;_*9F(21k$ptkuoԨqqcgwriQ0( *A"8)/cdL"P:dbMBV@l kNh%XƠ%?pv]ciG U6̎'N;ZTȧ`cRϩλm͟*+V:Wm^\VBL FϑHX@gh6E@b+H2 J["(j lK {FmwVۛ[{{GG[JU __ ?«O@?}oo^Kx%/߀ӻ.nNOϮΆ$lolBpW3KK81v7zu{减we2Pak]`sD,'3K6J|f|ۊg#j.J oaLsVJII01 '!%WX88f<  # x$Sb ^ t2h df%| W "jDZ@J3D @h*IB:P|AH^ƒA}:œ{SsX$a?(ެwz,|_FVp(N.MNLMLH(`lsqHn.")Hfb<@,Mp(+VZDo(-j~rsY(;k"O(>1;'eBK²&YKX8ict453&:Nec<b!,1D-Q XW<˙RPo!I$ rӱL.f`09?ӛ5) <;_,/xpO>`%a!ddLΎHYZ0!Y(RV>,ҹljcsIeHk.&el(g # db}BXH e%*a%L#kCb3R #y)Sl<0pV6!圠^a7MjชPj-P-DF1F4ı$BFp+I>MЧ}pu5"&+r6iek5ɗ-KUԨ%2RcT\]d:YILNS* _&j4 @&#Y` jҊdHe]NZ7"dA`00 9vB%Ri+@sP&#Rh-6!ybQ(&SfSP9<@xK ^y?;?wn_89>j(XjFX\[}y kn*z"K5?xnfv9X힝6Wk[N{kgYb0*6Z5)M(4bӋ ːH̏#7w:{GB9!WwZJwzh<2٢9 SbV\]cʨ9E+ڪL.KNFUdI8oe\O J a99$!D|@Ja5G*zDE (!91"#$S#jZDEdTRbPBa-(P㕑 ONI>11$$.}"xX ,# ^C;;k#hI+Kfo8j}`;N8V#W)IueFa?0VJ"%67#·)+h@=z'f&'MTMs NO>~~5,d(h'37_LE|WoJ[[mvygDBF*<)SZdb4C[#4, cǿ%*J y+0 vDnyAT ++eTP(,t f]N'Oe*okcDPL%5F!Diz63qLV# QhV?~|FdqK+Ee"i(?oN*sd4Y- EHE ˩Q9%*"䘊ڸ> >,#FecVRR_ lFR B,ݬ[BŦ>T⚓,{dH #*NeDB[a?LE|x~{ob||Y&4RTk|!fw}a7*htX.U&pnݥ1u&JotEcXAaRER?ޱP,j,6{FRǤ$|@JY$q=7$U>5Hq =ŕꗒ!g2" ֩e47 ,e䴊V3:V\EGPs 5 4*E9 b&nJZ!9a$t`dɨq9,#EƓ deIL&Ԭ3*,( YNhI58x a! EϠd93#G'.o\(_Vnz ԩwV]GX.`(`b>a3$UVMԦ 41&1 RKcV?iLeDMPh}W$aGd$Gh,Aԩ`O V)K"X(#v i&IF 0:C } n % 9%rT- PH=3SHZLBIc$zFt]Gܳ.K !BVBB{ B^aLYޟr#EuM}j+Vd(J̌hhn;;[;ڽS3P7\=?,L./k7;?5ugncmxf] wtc}chXYMJ(\!(&K x\)TJd L2O|ۗ/o>E+X٭ohn w׵MmCdr./8i -!@6]JfQY< A ۢ p2 > _iz~#_$bEUKkMZ*mJ-><mPq&9d4FaAIKg l6|vXv3^[9,,#&=\$#v%Њ TPQn4bVQI~@۠c+Y$ OCv&S*x8RHOy,(ñ%N {&&ח76V677W7Zh*mR07*DaJssS0Fu bZ%Wh5R_JU]Wp}bW5rVס3 JJd ' $r5j[\M`/mjvlz}nY4*2LrWVo7n6&QөtZ'Wkd* Ckt2D\CN5,NQZ6$MQSerG li)IA72!,gh |(uVږמ3mrJK)[ _W*REeGԒ #H?TϳRXRE'QK<)¡ qX\Y!$d sGb+)BcYHd~Q 5 =ǷxYkBꆠ@k{}K - ޏso"G#3X)K a%t! Uť46P`2[jkC1օ,C[ғevk0=\ꫨ DU&*d*JDTꢈmξѡ>hU_CLk+VJ@Al))+q<}T"e.ʇf  E#0& ]ˇS9),TbFv! ϕ6^]Qdhj M]`$#-mttOd"-`044U5kZ=MA{}pekpApuUFAQilZ?_^_o v .-G#u-_s[}[kdeq`ln W6smGm{TTW  _MggK|@$KWΚZd;½}{wgt >|>]ݜ.^]m mlF~Ӧll}ߴws9V1bm.-f'p3U"zn>YلP;vqp>pQt:>4i79fQYdL/"N/Պ|BV8Of*-а@c( +;4K[v˂ܖrn| pu(hz0:٨gXvQs9Xd0l>V' vM5<YBB# y*I)JCPRJ7FI>J%Lqrrf\\j de KHBt32Ld6!#D;dbQiqoߪrIGieyY1$JWi48<JA Fqa@(B"%% l{#cj&XTj!ڶ0t= ;b$ HT<-V0 *TLb Il)UjeR+IRAV;|(XCSRֶљ'ثS" ,EZ* t [ZgW/ozVXbZ$WL-%_HTL&P2"KFfqr1Ԭd,T:2/a٨\laJ&<墓4t)tGwmϔnj D4u鑎pS@KcCg bk:M5&?`  Ζ]= Ԅ%|um#++WWWwWn//O,/̌ln/DHb<0{vBAcsJ eX!fvy,N`FB㳑󋇏>}FgD|WZn9vc jdm{s6"qfY8v}ʪV+(7r[I2rr~t,BEuG@ZuTNNvnD.gq"H"n^o9>U|r5NAW\?,Dn;D|:?9=\^z ssCsAih?omddť#ަI_De=42U2tvVmxZŮ.jt Hg9@PwWH"d[=%Ut$bj**(+l\62""I]VQB00l鐂nI jf1FMitEV!euV+7xLFYa)&VIWzfQK 9p h|"\:sl L ?7qR̔*9[[+D3yda.CeEd&2!a]'rJaI)P D!(T.e eE 2^L+,]ͦih8)DN%rt&.gRUZ[sWy | SPXB 2}͏-E@$W痧g'gGIigH(1ŗO??=W:i,Ld+wZ: QD|ڲL&h yچ*5M2_⨕تZWY2Ww0~JҶ AvZ;! h7Mv3Si4<6dCf6*vE.Tl䖚88#d$ y?#$!Bl d"pn*챋b%y!#Y6 K/Ơ*ŤJ )$EdʤrPF>'yd6(E)Bv!QX.1IL$ʇaұS1o2! 0dabJvrZv|<9[ʔQjl %s3SccSR23ҳy9(zIXD,|AH.J%$"W & %|bS᪨j7((L+#Jt6-@ sed_(KJ4:PeeAktUk@d:2o>Eqzh}v\=f?G=: ǯxvt5x5x9ڟ.AeYg.f?^Fw{D5rbsQ]E恶 {GG@'ǧg \^_\݂<6Dtjp}<::9Q .|M +;ǧ}Jg;GWz\|/i]@o #Ho_xyyB+oX\8:[^YXFܙ]Z-<>񞞁ށщƞO=]Q߮svvNNk؆#W(;]C9tS8n-h%V)*.Y]RYYN)+ >E#exDQ#T<|bQ IA!) ICa6W1yRja!>!@k_B'FNS19, R+T2AF y$1-!bq"GND$OIBf11əi77Xx+X~jVD1D6"05#')='9=HG@D XvRRzj*MM3= z#T =>}o=n_+7\{V?:Ak={J<߰^-N#g2\ə_2p;{+'[ӳۻ MϿ}~&j{{˓KKKsYH#`sokj}qhgxwhx`)KzN#Tt:%]Ni$)4~:tROr1[/LNmh26Vc]˕˵JcKWT8Օ[Y2_k,i׋ʵ"AnJJ!G, XzB#&Ьp%" JN!bs8t>[a4)ȂLx*2'>SOBedƤ_$!>d_'f% PT,)UB3rT dcKؔtd|< "#  dG`);pX&c AG[oh  o, ]O<^AD˓˳Ak677:j7Vw7G6w7wGvFGwF@::;=;>8?:78{twP,%p܂NU(]t]M oG c7?oI7mﳌK4ӧ N@珿}*?Wk#c=($yha ?<־w~x97?ztwp s?n #=+s@ =k]lTxnuusmse&2 Ա<ݶ4ۀQa=C-6q[n[a_e jrAYJNPfZV-U.s趛<KqVͪr:Tvi׹{i1MfQfVLZEQb2 F1:#]k`<3`$KY 8Z[e& >%o.9&G`ψMKM)26uJ.WOǖ}O%gbba$Xķoa )9)9?;{-4ݿCrckxX@4>}=(?yVSz=ϗ 0E1_ASGg80[@fdAopd%ۧl loƵřΝ!mH;+`zjU[y!3\^!h2{ 4TpJ[vȯcXxէ6$hpWTY-i5:*tvQa[ Pe(feY d5F٨+iY0e&l!pt: 2z=P|bAb4 T.d(5\xA2 p̛$8@DZNa\e縴Iz  R뇿!+۔w%fMOz>#>} q qYIY4,3+qx| @(+..D&$Jqb2\Ѩyj*:O2xY#)8J86<Y쟚imnh7xnDBӐ?OH#PH,." ibQ zB$zkZmF] Q"#PPg!  *Sp*>^sT9jAi*^z`+-By~bnY bKFbKbTGD48<4=!籈9@z'[;G'{ /<_GTlߝvS<{ߏ9|+V~HwН뛳˓O_G!pWg ij'wvSӅRyms{gL? _~ qt>=ֶ0804׷8<88:߷4;3޾<׽зз6i5һewO}bjtjf|.2L/EgfgA#ӑũ\d?ҳo{qe&04<$0]3@ϛK3Q-,A+s+K˳+sKɅɅ)@  SKFFgFgf!EP^҄ѱɾ١ə݃'/X>}jik#LZduc#6!ERlguus5Ov6x<&חe1f vFwƀVWGf'"[EE:vUPnҳZ&T:עs+  /h涚yA='0,RQ2*bJx \ #)-r,//@ $1efc!JsflAAe1BKD:` AdtZ@Ԩ9 OjBCCk`i %e4[ē tVQ^qYQT]VHr1&>=MrdDrNqbNOI?뛸c~۸11b/}zL,,.]7ɰ̜ظwMHONJ@2hB1آlTAyLEIA~qQH뼕ETz!GL6).%t!*BS zHܵ~Tf0j5N7񡯥=W+m UhԘtd~\:A1T- -.Rcz%HK%Te>MYLWYZ G+X9+(>cSsksk{kGV(BU۠wԊtV2XIr\ӕhr)Ҋ~JKj k8M&abvz|fcS@S3ӓ3ٙ>f^]]Z\rmcD !p{wohxdd7ZC9yt/ tzO@{$;1xtyu|u}r}{v WX7)5UonWpswv88/NeãfSaQuHpXNïPMƀ+2r~Vd4‰JAjq5 7#傚jJUF憻+A9L +9.9;ֿ&HMǀM*E!223 PhuꪚJ_` nr")(LN1lR$|Hָk:Or~hsd,? [^oUi3W%GHg 29$SD,K.KC Y8~bR sfKxaÉs)\M*[ʁJJgPm đqeu!yP?.5xr~J)5ǔ0RT˛+[ַww@}tzz|g]\_#P_NOv";{ǧG'WPy}*W@g_us( s%g=zq@Yg&< ӕQ:>=|pLo@ѡ{`H~ d3BgS^;;BmM2Db~ooh>28$h@ DYTV@39aL\ h@I]ch~iqnddP{gzfjyi~q!244826Y\_hhlllfj426:?R?09yPnHr\2;;7 Z9N477xxrlSNE恍o`s[[;{щщ1z%~;չ}*om 5#>/oS㗷_߼ۻؿe̫Č7_ߥz& "ͻ7obcS>|HOHJ' R?gŧ'&r(\M?F 1yh<$ݻtX!V)}U_f80Vة,nQ)bN@D3Ki ]FcxH=5~":6zýΞֶ`qU- Y+TJLdJV6,''#;UP..yVrVRnQNam3 ׸_3HBHE|ȡTi*bJ9j*O#Rr`Tf{UYӤ*}NH 0&]- qT4%6{Oq9/qe1m@@f"˫Omnsx ԡg.ώO{j:zuu P@7ɹ݃r*Zkh tٝV\Xgq6{K{5Ld|zOD&@9Ydy60 pk  +s [ [Y]r:v !:0x߈wɩ勛'hOQ.w%nnG@~om|- w0x ¢tcm">586ĠwRf0ꍂ:xj0ZL0C{}:^v7:[:*VNVW]S(s[YYXZ_鞜DNO*=T&] vE&..ί/.<8nmwZ|tu{tx|uc* 4MqxbT,bT"yBO,A8H2T O10rrK EH,6,Ɉ¸Yq q/~}wbǦ&QD YTn.}ۿl8@#'++' ]?͕˥52A`r p l+w.—$*@F_RdV& j#؊~VU:5 Kr_? VJ5iSKdY9T=FhBC1MʕjE:{z'eeiY[ŠzĿB k۫[-.^gayiie X]Z⸲730|~u ^vk|Njq;-= =9=? y"D.قu K}RΡ[]vPHmU+ A2At,G 8:98<:>=;?<><_.Fn"">6o#M@ Z\ޜ^w|$x\][ni XtDSz:B`W X_PJrWW. K>jmTp6%c:]MPOMtwOL6ipx`zgrcl5`HZ"[+Ǘ#kG= DUCS/@h\Z^;X_Z;?vr3yrsvs~wyuztqzyzuzsqyzsywyvtxrxavs%kuΠzNVK"ҫ lL6> yM~(Tu|Ƈ"9>:>?ۯ]|.QDĿ]HIcr%>$'ɀeg#r$ /^d(d23P"CxAdJo[iwDr9[ brr+@KX \X.&OcJ)t<Ֆpt [ad) rPòv',; w z:5U҇_b_ͫ)wFX`#%Q:cfHFHXrdBVc+2YR%X; 6b2m,H .Ќc(<%S` !2ha-ɥ3KY)L("1dXY]|$YRbs{}~qw=K#2Re6ڃOȑ($ 6&+}uө1UGg"c@+k3+@K{[G'gψ898<)l8BZ}E|[o^XZxx@@#Tt,EY7k BD:t}Y6 sy֦`cs!hhЉjv[ɕ*qok訪m tK94>4V1dƾ);Cs}Д}c }U֦KP.v74u5>ou]m}-; i kNg 'f7%21kWV4je$X!; A,d (Y[L^ħy_?1/& %f^&022޽Oy.))='>..5! } $fbň<;OOAa d6Y t{Dљ+lt6/ʭd`YN_X &'ec8zKYR9C!%0"ͥj *<[EXbGJ[b @Tk[EAK/Azf@DH_%<0tqvtЪlnk[WH+}C =3 fgv";rRԩZ[ zR,ӨrEM<=ݐS98'71p{G(v<BlU[=<>̄?zouvC78=D+y|0pr0`B}Th*UΪj^AVVZzz;z 3dgApn^W[nTjV4f_]'H+*Fϲ  QGckE}[yP[:Ħ|]* O/>?OU_~wߥ%Lt_D' _.1%=t8,`$p$pYH "= |GL8(%R㪮p,N!20Ta:rhѹ I_rMdd\V0t!L0mw^TuS"ÇXaJ)Iͧd$׫19 A7b|.14;+[dCC]owxldt|tie~`1rC\겵;N;>36531=; imn@.\est6[P'4k;n/0H:6w1_D=WD@75%@]io`d{Q:wE(~wz|6#>^,.|qrvwp9x3.nONvO7Ʀ'nn{z">bi!芘 Pk"L!.P+]=ΞήbҥRD"eT ZzFݡ_HMXUHEc:q4:]溎^Hptqt1R=M-pUB[=QV}"W*H,z{G'Ʀ'f'"-Bv6ÓKc}3m}m[g i{'\+ 3c"=D&<~\m̞w ߦLyYS,eL2K$c_?ĤNjqůrx_b~7ɯަĦxB2IV?&.=16&!6. TX~嫘Kff2;ˀ_RШpst {t}xhmJn@YA}{oeswa}{>8uH/D<1*wz}=OA?;p줽g=:-Ww'gC#ڪ*dTj:F d6QԴwtt<)J"t3"@JbQdUU7 Gf Eo8#4hhSԁ~~pv`n`v$O{x%,}9;Mp d% sq9"P0d8y9aϜ}{ESݠcy,ͽKȤ6Z*~tY]6Gk).NCS#Hjh[>mxK}է/kwv;ᚪ:fAZV$+ծ[]'SiϢJ$ P"QHhY+Rpd,5!gptA2iaXRn C#qYTGΓT2+ "|b>C?KH/,($ytDT,6FY֮ޞޞvN%*UUcL%@ZeM]RVj0Ah{, VbXjh2Uj!$)k* jkݣm0v/ b\26Np"%SjƐȼbd#@Xrz6)5̇gPi4cmokWeX@d*+Yv\f!&$xPh1E,jGgr3IY`dm$> (M{$%f.޾[˫j'KM';ͽ.|o-3S^[:<+z2|nϯE߽{x\x T_=ۓ3S3CcSc3mݽcS_"}ɋ`{zv yeuguk^^<Ϩ9 7 76vgkU5m-';Q C"37V?[9|ۏ}w7񼾽us3eo/޾YM84?ljlfUZ܆ov[?n[׎:W:㫶YMPEߌcwvvffGQ'Չ5"gwvbr`wy/VGDeA\`kbnyd)t|p13<<2$ {B孃лnWj:ae}qɿ9PFYA e (ei\[}iDd>_V L#!OUV (,%&b aD+Dd2a0Lb&!/-(itvaSY8 cN%3Gp RԢTģD\#S'٘8fSGwg{Ow}[ha $B]W'U0<&]jakr&_yuًˋH'/._x۷ﮯGqs{>?|w7` @]_uxylhwױ_Թ!:cl'h4O>?|ç;OP?F|:4`q;X4." =GC ?oap ;`E?, ߿_o?}& uu}~u7/GeV9E!B*RHH?KTD4.ɥR&疮XkeյY\Q"*j:XSFgYsOrk-.[U^[+IBxZJP$fB)R+mx Vdmw4M@s)]yXm+,)|DVA ,;!åNYv'<[[(4E ͐`l$$y<$qQ qFAp آ"KYTR%tQFA"NEī/.^^^zyՋ7_AC_^ރ&|㇏?~6QPST!VlzOC>|C.ڐb|>G-Mc-=3*:* P^~Q;Ŀ?0bdWO+z'} ͍߾>~^];]]sU VOWוA7;h|OΑ~ 4s m]L9@iokWu -,cew`~ixG|Ai.˕ck۔_/e=)sۨ],jwYvas k]SKKi O \n\n_l]Ry1tv9CPطw "CPĖ](-Fƶ)Ys5mnR R!#*chd ]4='-4Cd8)ٹG"Sr9D-sTqTw U5jT&#nn{: *o-suvutt7,vDѕUժ&:*%jm/T&`e+,1*]ߪ,m>MD129(B@h KZ74suBs-T%0Jʺ4MNWX:K!63h$Vj8ufhU~C]Е b9*+\I=ˢ@>2Դ@kXAX}}?9] z+ށ>\?T ?OJ@!ʄE?<|vp{wW77?}w˷_O_Ϧ<5T6OԑX\pU5[,ejQVQרZ۟ PX|R)Ġ<;"[׼cwm}M{gb\jodm{Ի=݂==nm]K'G?˫uU6lNSRj:h4Z,c +c T`oj3<<:__fxneiswp>_\kx>7szq"Ǜ@F>Y -D6#pv9[礥{AV7m7X2Ió2H"g_O@!KAh\)ǧid, F @Ҩ4:T A1O\DRy9O"K\YTROKNIѱxBJZgTj8L M]0ybTQ%FOv.Sj%+؂c!#EĿ"~:G߾~zŧ/?|x]'g%pqapBe .VUU5&g)90(Uk^*W2وtJxluXZ[WVǖYY뛣k[#k;#azhX ,LlシV6; mYeϤw|d%yE%fhq'{w{2}:?mvX8 &X81;2nZy>9C |䏜nDbx ɦf ])%bHK"+OEN_Y\쟘[t N O-{f=eʊwyplkp=}׳ UUuc mM]}]={{As/sUe$t}fm}]QU5k-ΎN6W7VF}to7{ol EvwyU,S_lnCΝݭn0Y x߼׿8xC?Cdt\·/^o^ -z[aeHܯjiFj,fH\PHVT((\\ z&xKsCScU]]5Jpkѿ9AGǁyhŝ՝z:>/\GcRx1tw2yqdp}{emi~z=V7<7Y3cSBpbjhͻyK~f|? xC'sY6`g`a34ߛؙfheqxX487^SW*u˹J="̠Jx>;F?E`<YȋC` P9"\рgH F P8,< iى0RRC$>"F3RMh8jwE T,xyy>17sQ]_Pt2I6] ]APE]F_O:293`4kuzU]CeGWPDKo^--TהzD-U[:ڢC#K+]eU:oh㗏 /noonnDllmz77V7| _з.cDON#mv6@}&8[[׷oY"~3D-zC{?|T~uwwū Q8.L{:6_bEE, N1X6cY,3yrw%CskKCSSMCcׯ"KhCi0zQi(V> m]!܈|<:ٌO3 #go{dzۇSȤ?<l5OzKzF6#G;mߺ[\^G@*;ޘwkpug`ucnz|Cm}}m}]]c}T kkr]}j6 F) @rp$X: 0dzzF:, ]b*+tVTqEB6ڜZEk5@[R@hH4yd|!w.4EY,)m<毉3~KDh4+1Gzn*I:NE|"/hPXZk;յ#i{rϴś7߾{?;oO_;dmxypa3<LyC+{ASjai3)򓗗S ]M5m"Iϟ~ӇO*|w"x|9Z?]܎,/#Ӂ/4ݪnd*L+fUITԼ2Ecs\Mn7W cnsz\+~ |@{C݀>r/ @?< ? mD@千#m3(?z @8Z;8Y"Dk{+;=K`h+*pzk[A?x>\?BGӕ1ސwoumq2\3ZYZQt\2?ϭiwMUh&=KYdBt+WΤx>ELƱ`X#\op"=SY,&4TXf|rzf'%~1rSO%#9<<39HIC#09Dj[ LW(dtyBå5LUh @HL.s5L,Re,d>CiO[2פ̴:CLˍ>OGhJ'D\(1z@UؖgnDhi:Vyyf}l՛ױu{Gۇޝgs1?;;9^=rJ:K:M/.O{z*kۻDjUSgsזն,!4(BDm}UWowcarf~loxgrzUVj;啡H׷:jfx a`hhv n}Ԥ{cs7[^onxW?rrvl m#{' S}!,{?i9| =F;?ܞ}| Cz;wlF ۫7wo*eVN75k끯ohoh}^Tk'&">|Y@X܍`H@TYmGB?_?w@27w >="||»:2;}8W>vrw_J4%FWRo; ˧:J Ӏ=lv"{!ouЮA*Cp#ڌ (ރ#Z(tY;\ٍyv3}lvxi ѽQOsdvpzaq ZۘXZYڄnnr4nO>^o߬X*zGcOusΠ3FS7u&sLz(_ujR*_P |*R ("&$ ^Z;CIJВPD8;f{.#' )YqibII]`sϐU 5 5]ޚ~g]䪑 9d C9@Ht^~ȇ<ɆgEzCVb(4&ͫm4\bJk%:68:648 -{9pw7Q$t>{q>@~`/|O/NcawtᣃQ8rӣI$|9:;@ G/??}O_>>pu{s5g%Jh* F&|c6{{5gYoek@") VQ D:*31EZY[窮nno{wA^ك01@?8|p{@Eɰ:WCИZpmBDT Qb1DB,d7F7#ᵝEjpi?vÐ|aX!VMWw[Uc^knPZ80(JD"dYsMWIyR[$*PsL"WyP"rq9:;퇇W;αQwq;2¡g102W=6oN7ud 2'$ijʣG O&%yvgiM}cCKKs[[^X٭4H-( b'Y~>> @"ћ̓i~}wwB՞ޡg` ELΥֹ`FH'cK+{>>>:Gá`ät`6V5{XGg²1HT&"##BED2%OԊ}VrIWQ{Th'˜d. GSBzd܌c2 &/\WRjS]E`и"/c E/rDL-f4 LdXMAb 5Dv̀\^1"s )ZKjƳTO`yS(B Hax4YHW8HRE^JUQedy)C?QI&=A=E䓅F$ԯ_b0E24}˂SD9l Id"K- PF\Z]WV]vwT^m,,qVrKftJu6Q2UXB`+4a&$ffD7"s=:ptvzzyנۛ;h45"_C8{O,GK p5X!"*>g?!Ɩ2?"۴߿|q廷'Ӌzhxm߳ӳ<1ko]hZoՏjZ I=Kx$9 yȣJ*[K:^ mS KKEhk+#@ kC +㋫˫˫3enw'ffV֦V@ZY_^[,,zGրW|ӞnިkZXOx6W6F}YoZ=P1,7zCj2 LFW7GV7GW= pځn/$&$e(T*P)X \BPIzy DSDآlqB3 ElzFNALZ.3!EK3TE|KAAW 8cd!4~|1,ȏ=Mω夠dj-Q8. b∕R14^$QBLfDZGXH+1j" l"C(V5{s4z ϧi9'f&aȹl5Y+ˁG*J"+Ji'H4q%f I,#+( DdeJ.kqw6u9mu6sUA]ZtTJ,B2z2Og3"dWA`!I,ÐD..";;k[[^̀wkӿ}G~h`x=C{^ 1>|!f!|0Qo_,/M?>,7;g Ë#MSku+5ce"C%shBѓ_"~?JLyGq,W)MfFR(&>6 @ 6:3cZK*FF[v:S: tc:al ~uxpY;Q43LNK;{-bV\zf`GS*rìWVחz:VCcsd:V|7o.OϏOǧϿFCgGgh‡O`bBWa|=ɠ,Ѫt[GyrM q>@L?}/@z՛յVxO>FC11k4MՌ,W,˟/,J .C]_>KF$ĴLܓdxȂUdTT LR %6GAV 4Mmgs XƳMFSF Xbl!XᲂL.rP,A(](%,2TXMiDbNRѯ'luib[ jJ$ @ D0P@ HE!gөE Ss*]Ƒ ^ @ d1|~C&?-~ b<:?![ \4&I{{2Iyܒ -&hMb4LL$(L^: zM@R?IOI禦cQ\+Tj9;quZ~.} onv5u(ssD\297sLAЄQEO> :}ЬwoC[izhheoi{a{\_ Vv3Ү1{p[u[:gMCWZ OCH||)ْ<TDbX)AmP.HEb5X"N䱔)8xFH@S3$^(K|l%H$Y)U]EӀQPG&˲hgȂq**xC+M5햺Ncmug#~C`IG"oH[YǕdiLmA233332bff4ɶl˖dɲb2C 3''Bt_o\Oƿ()["y-*Flùg^L.tݻqnw>oio9<ۅp}}zw/\]Y[hh(.OPmuCpr%Ϟҿ^.,/& W{Vw/m?^l;5lRϓMgoQs0S>iғ0zOrT6*PAVs4vNL)&ER!D9h6 F#TjB"RDPIe )as,`:;zb\wD*0,ɢBff2β'09FyqʙN8>SQn9ӉߖI|]*aGJjQ2Ec4bB)˥^~F^[*נȼkYQ:`6NAd2)`Wnېpnz]gsK*&qBr|p1)ɕlC ÕV$#T8[V)--,t',1&j?E!)4p4nk1;@.9j"S%PX2 Khxđɜ,O"Ɠo`$:%#rBDci, R;L*\ UD#e5Lq S$UfI$!k胥H`)B"3jV1uAĜl1EVNs̈1V'f)r-p8uCYhq3] JKO3oy&xM,5 Q3"Eۡ|\^윞L>\\~21iɾ{?z40ٳֶʦvHwf,t]G @? w 4*+kv|/v7VUvue +V'{09^~ue]W WH \pz~D]nSwM޾7v;<^pEMeMC/osq}Ïï_@5} :)ȥʞSO;-5ߟm7Sw{jyȳ*Sپ'=EwDF/^&tW,VʮiM%mVͮ4dfRKBV! !J8ad1L:MQTBR3-5`iYdM*_6alƢtZDZO:mԗjǥ6dvhTKeQRK&R% ]Ȏd$+N+!*c%Usu-TהfIiœ^e6e4p 8,ْ,s4FDyQ/hryN∵ +F 3_ WF)RGJ,WʤcIZ:pFj6M3 GCttA0,RgJH]E`Ν(oBJ[ Ob |\!` .SXRҡ ̑|JɪC5`%f+Fx̓ydawrT:PYH"ᄑ;"h5oI-a7_V,p4`SbMֻKZ @lHuȑ52nb8:XOhr zb WTj ~Z=*tÅGKC:x?1xqiaOKkS-ۇGo/O//B榶Li6NcU5Cx#tEm/Ȍ;;2x2hۂ@eMiUmi]SC`R%T6™_|D2tӃ[K+w'{'LTT5w4www=}~ԋ;-,}Gno?>|_\}xxvvp~8==?:*'H89<};|`f87o7`֯_? / ,~_spן}x{Oom >[Z\h}0xovljy%aiYdQQQDq4T?tE<ӹ&D) 4'Qt&Uq/$$ ŪY5XC-AEȕ"/8<bJIGID T 72Bd0)erO<+W Rq٬O&qxo.ǃʬ4J*raId\ -6gӑpf]%mT@m(>^_~'d g/_@|'O_W}ϰ+o 3C |C^op]+U|?E*|~_ l嗟ۗo_?|jdegnsic3/ֺ-NfgCJ8t~ 5 ׏h`,#0J"K9B, =Wy=NhDDXJ|B%V(D)hj `,JG(0T8m9<6Lre2W2jr9ҺRgU#0d.@D"CTLMUU]Hx8X #(% FTT HD' 8<иhxy4>/]GR"KQ/ b\.Ǡ zN VDe*(\>ͣp4NQXPj||h3@ W^fEޣG{.. R#uh]Gr-| dߏ-?}>Wnmn/և~/|ŧO>~|~G';5tj嶉{su_T=/*s45h?= 4U(,a;rsMng& X%ՙxdk2 R)VerX*W( @ x\>x @L![8ˇl3iL2O@Ѡl,0҅}zUv[ZM, W&1[[ BV'k fc,A3d: G$4 L@I<@. B (PKREB 8A͛1XBL.Ҕ&\OÑqX4E&3d!T5 |`,.Ηi\b_J T.#GZ]VR7:Q EYcȄzHel PT$PڱHI>ƃ0D,NPxJPA!Q@qvLOeq ҂!3JƟ\D&!\p)Ce$3L)`(lnwǕjV9SC`B C"wDr!ܠyz=Qv l%X ˔"{ѕmwvěXCo3T!QV3UޢJw-qE2H#`1+rG5.\잜" ,V@e8;;Q DN(qvzT@#u^<:E=x~44L#C?^X 旹#*Y pۯ?_!ӗӏO<~/޿?z ݙ'+[g̽{`L%/LϣDǽhX]ݘבl9Z7_+"֮*;CgJd %j`$ѰFB "ɬFV2 U2IlF }hKJ_Jr=EeCa1*gHoRy"K&䱌ObK_("Xz/]A D ]q52Mih"KH8j!Laq Cce *l-Ӫ}E<Gfvmq _vg-&CB5$e}pXb<Thb-dB-@c .{ QP8 G;SuX}W+Z U˚|:_ʟU89JIK aǡ4F +$ޛ{LL=]=1xCw=}ݩ/vNV읞,?1>΃G^ܟ|r'ONM=x [-"O B4槛y(l> B qx\" %TdzA,a q| !XWle P9:%I74uq#LzAK5N.2xJ%дM/O M>{+`4`x0RKr4^Cfb-.qD:GAd&E<"A` t:@C《@ \z-3Hg,@Vh哹"ehKp5*O2k6OB*\qS*Rd2"Aq6{RJC@B`(l@g+d1Rovݙ:9Dz'X00eKf!P(2'tUڗ_2:zGc`*JWnp(n'=2͖EG;GhI4Fh&*&RMhO6Ϯɶ8Zk>wT5HZit-.!Ϥ_o<{15; [N<zыϞ{:ӳwWTzBsG[]S}mS]}kS[o؃{뫳s+ ;[gG.>~p÷s|x{zu|ytxvckɳGˏW6m<_}>1rgq|ndvIUqu5٠p2WEdJ4Q]ƒ1$d">#Z^')\+fp,#pb6WDc( .%t8EL:*cd6҉U:R -X yZPhXVA(TR&GaqY|1+ӛ/~DȔD::\hL.ZT 9b>ϡ2L^OPzQ뤨D:Afhl6Aer (L>fp) GeA4!H$$2D"l/UPP/2$:NaT44Ţ8Xǒ,&0 KBcmPrK1Xlmc[?!$pu@,SYr3)厄B"cXh 5*GS%0 (DgRyl, #( CTz<+O' 6P !eXB.qO("#JE-X:Ro*pU ʺM:c!2́J=ZwaR4r04.e) T!T WJ,[z@/ 2Pd6 8CZGp'r厐Uz2Wt`vm#/oh $H:*ՌL<.oTm>:Q,]%U ⊺&_9/ %ںgVv$Sio0*-.W]sCCkc8Z. OO=~d`P_pXZ8@<:~{qryNgaeϧf6G2QRRRSbe9çOo_j)vkcO?[{`qӕ-ws|LM݋4yʻj#7\@Eᩨ)'pZ‘pz!0Ka$[u걻<!Rh2K@1g4LbYVQ)֒&Zr%Ȕ' "SĄ1XVty|.rBPFG`$ zf̑"]#x -2:Ԍb#^b&lMds[}P0\Gx2-Ek/)-2x2_4e2)LqnvO?(dqt6O TX@ x 2mE1x ٜHU[jRHxj!<)01:_p0w.nl~2hnyګg˯F&g&'=^z11<>w Y3gǟχ<3`zydbg~ԴtM/d3p֫xIY?l0ڜfNNO^nmNx:9359tzс;Nή.=z:.,+S3#UV˖F3tE͋ե+ ۛWȥw?|<|ͻ{Ww.]m\lm.n8<]}xݹ !m=02U98(x\5Sz2|sȞ kiS,A>ׇ,$r LX+إz 4F Ժ5V;\6+C%RDvb36r<ݮԪHpr+tףFЄL&4$VB5yqpzsDr[P,G"NM$6fDIB3Nh5"DD%fk|p(GAdN#/Ms݁pCBB 8yh4BL.LŒpl!'x–$"JFrhLVd Ma+1J;S5÷%FWkFWиzTfI-d'xF"πH 0l6QhnVN"lYhJtK)e Q8 gX.Pi<"K tBS)x\W`X,Fx$\254'}!P@Yb,G}tG0 Kd21 U"H#ve{tJꄯvrgc Cstpmʶ`e[՞$ 5V!,\IB,Ki.7F5]'NSY?qOP~9-8P^~~ɧo_~9YnlEBx \D#3HBhXCR#{<˕+}E o*49 mL$H74Gb bu%X]9e2[V:S9.be΢ZYK5P(oq$+ir-0:\ɵ@AH d,Ă =;rT ;JNo?N~g~o>ߎ>gXqt{2rwjmw=_[9|{k um]wv`AU]{vo;ڦf-gP[G/Lܻݙ9`EH P O?ljʚΔUU$KCLIu<z`1ur b 2̛ dZ̉ō;/ǦW.vޛi~ieÒ;tc5V.D_Nrձ|wUJG0!BC*>ȍ.a91#as~;ǧ7d1mf "TDjTi| + ~h#ua\&xŎ4Y@y*,KFSEHȟAOMCA_Ca+t0SH&MŊҾp2~0+D"LbX&Sdm6 an7;=oEΕΡ掆ގ᱆ֲ֊vUۇk:zFWw Q,.uRxwb?fJIT6Rg`IXr3Pi)CXm(^dԲxx:$7 q\ C qO“i"MAҀ D.4y9-"&O+\ '  ~&C%@ Y K.0&-v H.d/!֣`q !GS`g"%RLZM&Y5^Np\-Bh*@ih2Ec,ͥt0=vU(]i4t\fL=j)i(Nu$ce PI}>^:xo8??et@ESdz{{[ۯ^WY[#+byba:e*\mT#,, v w?}36t{t`ld{N>75v bh~uyzqچPbЩՕ(){=[[;Cnۿܿ|sn볷\Gg`^n?\z5~wfuJņ'MSe=#Z_p@r2^qb h5Zvu 1G'bm IcHDNޮhuv Ă s@^jN76Z/[J4LѠxzCȄ^֡fȂZ`4@ס7[pCu=}-}-H 5Cspkh1,ZnhP4P"T: y5:IQƯbV}`ihlmnmkϭjljhoi삵}}}-}KK@sw_E]#$Qc98܆]֑F6hnkhlrbJPDF"S5./)dC`b(U::@|}*4Ga @ ,M(H08 tD^H& ' KE`TygK.ѰT.H/&g |%Vnh5juDSoN4,1_ 0T% TH#Y(i 5%uX)Yj BC|&Dj!ZH`zCZo$7; WH2vg)P*, g*Ùh2Z\VK5HYR(K뢥uXU[+98\|Տ"~o~\qjqicw륕ՕW3 K˳/7[ZY\>89xzeWP}֖Wa+5֫W4|wΎ9nb\9];^9||},ƃ{sk_ O-?Zly^}ԙil0)&bZ/Oldi=x]c,!]L#5%&ԌPB`ʭ,[b֛3$ 9=^$> ZAT*N WQJ4__ Bp3B#Aff\E -` fhNT\Q{ VȸaO681<K I:{ U;;{FF{{4 Y v z~!%b:JNJFm==9> Ct u uC wBCtv AҀ:ðphX``sw/D+|+:Grx 41{[+Z;5Db)1|6Uv9$V8H"+o"Q9*ʒ;nX( Md`1Q@D!R* ^L" <<`j^@ a3NL@)xSZ_P84&@^]G8EbSzͱZCƒl5 h\Xe m2_6XR/fk,, "DGLDH(&5ސV{# ;$sGJ#`OH Ciu)lP"fk%uơ oO]o׻|ޛWO/mZyqۯW_{dmX33++!iq_ê[;ۛ{;z#D~| u::=|em{{+;g;ȼW;~Ƚ1l̫ݩխɥs/̬>_|pyIlXSNdV@I5UjRO "0,ǔB*3!0{$f2WjtK N!;jVWkk 65X;'2lw &JTZpVթxb!Kp|5q| J t8Vapjk^n6L#ך:Ѫ֛A?8=_ZU =2;vsNXXUsG}G7t}mHoe;轑eH ۚmjJgZEc" G!N@IEHg"!wG[ZA:[454[5_/{+r$x"Md& QphBr M EF9$~>YaxP%"?VB4 G!Ѱ . DR0|b }"K.1R TO%$Ma9P`2GP@ah|koG,6wY^*FX 9J@.P\TB KVHHl44&d& "Mev-xJWX )\Q+pGx:\fKXUbRbp1 T !.3ptGf]2CY|3%7P(ɶʛ5IXRcTiMJQ3*4K jX\$QdXX"2[FH`:@Hp(Ȁe)P,9TdWjX%dbZmjv8J nnmiaD@vhmj1ԌPbܡᮡ!\{ǺG:֮ƎΎΦnkk\COswii{6`h uBю+`iJBX1<:0RW^S߭S k^\fh",U 1&D,Kdn`n`(KfcT4I@Pf qǓ LH*I|-,Edb|Dv)|2wj#"G˔(4v-X>`D.s5Yåh υ)RbJ B"͎'J RTly}Sn0a9+*uFi*G$T\V#3T4U6Ec%hIM: ū;,/|o|>K?\#񏷿uqs5mɲXq6-i@އT NTQVw||mg{qcGO^,..~r"(a>poo}woacsn}cek{ek (bo>ͫ]0, K6@m"S]-omxdu;3k+]z?];4lt*EU gT` %]f/ ie`hr Ǒ&NB+1yGm$Y՝B(JgT }ޤ[1-yX2@iX DG{O| )%%\@Cat,FS8Z!L(QdA(x 2Tz iCbYlu}3 d<ڣ=w $چF {;{[uw #IucCZz{t5w7AZ!&d̡0>yx?|$>Hk#%Fc;m ;GZ`뀦ckb3T֗hLW602w>|qgTqI&QVN/NgTz+@YY@Dhth p0^ЈgI| HwBOy|,Gg)<,!`oȍܹ(t2Ogs Fe ,ܝ"<EdhLI.94fu`e3fM4MX.Zg*nwU y|%@IC)Z/487y^$06) 9\~?%r/wf;ɤ4{zycYkePy_lcPYw.In=$.[S=J[iMB_ުeּ۫$fflYX- L$K2333Trqwu_EkcȔOʌ4ə;s16^cIE+5`^cӿyӛ?SBV^)*hF- NIh2">:yr($X ʤl̖bMLY[won,mowWW0aYI`9wwuuZ;}nPL.գG]搻VLmM<[EóyRZ{"<&82^0v!F\˷sBԒFVH$SVN-AkMPpD&TԑG^69,.M`Ŝ +:ZIG,h-G DG&+G&D#l`j:EQ" UH X O@EA$6 lL4+ KK.L/(oH)r9 3rlٶشL{Zfa}𡤩bڟ |zPChi --%!hes}`tvgU5^"zv0#h"46VTՀj kZ tUSa:kۻ9ʦ&@DU+"*5w7A`ihhF<9%)#ٔP[^!㉌@UE'S\lL-˭IXPak(24BSb*}Ea@$%"%, Yb $q@<EaICH_"כS>'%J!~\KtBDbJC3eTYYK*"w)eVd2ˣ3RsZITj)ȔRlJ. wCX68ry]\vb{ҜujJ, 7/ k/5ZeMc;oN{yr׀ߕg/7ψx#^~tl6XrDh `,PthM)ؠ9%Qy\D"P˴~R7>hrqaraqfiu~mc~}sackqs{qsk.dve; D瓙8>O.JrP*NUU՘S\Б[ߞБ]ݜZTeM,K),N-*/ilh-kpUvZ+ں: } ]}Ăڂ΄⦎֬ԒĂ*Gn-8:%_xʛ[KkҊJ22ʓKERKk*r*5 šƢ֒ƶrtV Ct46ɩmvv@ n>@,nC] =խ]區殢֒Vx`ImcfJVVVA٩kDVRє)zIMfIY3ʖb!f0*c%6Ef*X<["%b4pt6; 0f_D$Xl`h,,W"4 THи,:HWF;Iޟ%pA >U /j)\ [ IiƤҨ䢨]ljHT _@hlr] ?eHor1fYUIqo`K-7z?}ӿv]׫O%BCye*-2!ݞSTݰBhy+Š־ƮƎ֞ެNwiKOY+֞)tlɯ4ZIvg!:6dKlNNpV:*ZEu9e]m-==*ojlEZzz75uuTuUT"X, g[u:ܠԫ౭=ŵY5`3jںKk[rJKO 4& Fj5C&Tp,EaT.82lQyXbȍHhMa &1q4? T *#@`1X4&@ 3x>"58\rYbO*(b?T)b5+bD2OƑxWmofיӞmCJ.&l$D2Gfa 4b)5\j &D:b+$81NdxVx":%=.2qhqN?t7"΁ ៿pӧ_P?عz\S"B PTeD82ydl$8HB jtVkammpnye(Z\x*)ȩZ"buPLJ|-C& ƤGgb? I PV &0YTM!CiD TrY(i k2kp2-d bZ$U1BOX<+ t4E+juVQA$,ǐqP⩄@,e ¡d&)4ž[Y_nrw ].$Fk-.ocvk4t{:\5.حc{Ot֞º҆ꦶ@w35V׷gf92MxTXz;jJ+Jʫ+KjK+**ۻ{ako7~/<5<70FC#ޑqؤ{p7 {;ܾ^O[ o]R30<63aOyfAEBr &R( !E)t6FT rVs`3/1 ( 8"XHGEd+pt AT6YJUD0#i .<H2Q0;U3(,Ja3S"2$:k,8@^xʖRbN1eX*ȴrszɑGa\, "Y燄\Eᑌ&G h<'3$*N28sQNaD{qihy? 7~< u o>#E>8<kbF&PPHb%P.  6:RɑʐZ8\-Kôr^iI9ó}>̌w|b`jfv}YT1g֧VV'6:7oAu򎏁:;BLFMrz-_3;11h2\/ UM΂t\4[my)u|A 4]4fkhTC`K@lϧ %ÐI$ Ot"Q|P V[JztCZQͪdDDFԉMKa'YIJmMOd&{la&1$RX m@b  )(l _2Z]#@]ĸor tr̕ori,O MNLOL!?'G&'Gٙɹ)*յͥ,Kh 3*w6v7w6eKW7v6]Ynomnv6}k{ƃÝã㓽gOAGnoæӃ#tzqM{&}3㋋ kGk۝>_ja)#œ,D,F^p4Ml$8:r@1j6jadK, Eх!l%Gyc#vN256*RGVvh,[m$~?\>K Q-B" '3s2bFKڠgsdQ]5G%@>" $ %ĕ0:mBvxrqdjiDr0̊a*АnpDtP<N@%qD,6#ejk(9un%b|knn'@s#~8}8w^\)CB8@ఙ"_!(4>!(T:' U<G[^7<<4570025NL Ӑ/WE//MM.O :=Ow?P  G+**TŚpau`9M*e4%WDZq4P|Rl X2 C$ FMojx*D&a+&d-:)i4""p 2)D5*2$"4ŘTlL,2gTGWRJ-EmAgӈ]ҙT1e7Rkj"#2j414Ml&BgI6.[cO;r4]lF5YkKW[bRtIx,UF3#n<&&!g|=:@(@L c@`ذgD u'PbuȰ^ ZjiKFa3vw@%l=7nonNOW:Ggȍ\]iAtvt|~]qgwO Wk޵ѭ%-+ NHeqhCa"0(<㏗?^ Syn0쇣ci8*"UnJDEgZr )5*[> jG$ V`9 4DLTj!>0Tf`!~S~Aף]ÃsW^=A q\}yqz|u'ڑJ,@k4BCaH8N |`4$ ,TȘ|J:ܔ_o{x3>1<cumju’ormwF(n.ٗ&e@`WLUH)<6Äe9,,g1iBHR\lԓ9,8*  \X9Іq$ HbXLpx:f/1T?2qG)l&* ɐcɩ+t% nCn>֔]TŎ*wTNkB/2UnJ-$5+*{+zS*{zzU=QUQj{v{swvxrmSPߑ[\Ux=Kmu꾡Pc? omw@c`k=`=4=8];twz|cSÓ)Eq9eQwr79?ebtvvtvfɅى++77767fV`s>HY};՞ۘ:59=~(_;d)D2Ƹ&!^8*3U$Hph|H" Wm!$^8,{r+#$>ϳڹ4eD)IlNaQDW:4HT`3% x"fOq(!qJO邹Y)y9YE&k,hv4[ӋMylGa4<D$acX3eG0UZnhPobqgGt7_o~=>7O?7\׋TJ/ rXLĠIxQ~#)dT &34ˀP.+胰#16;7?73:8蝙^XLLܭ}^WK_siu@`H4!L0E 搀gА/|,рNexqx,F˅*Gp 9쌥P20TZ:h ΁e*,Ri$̗Ɣqgèkme7ekӫÒÒJ#3k*Rk<&_RߚPlǪȨNH*kjֶ wC=Cޡ>oircmKWUS{Ys[ySkUs{uS{ecRiiimkE {z^.mJ*luo[M.Uuu7t{; ]NwUkoM); .OCWj+j谤%4M,mUWk]ͽrG~Emw;Cwz:5]UmVo~;52NQS7קwkjs;ʺ)TeDP\Ap41&P828z;4$ P1l sTw,c% d?Qu _[F&Www6v&׷|90cM] Gݍ ͽ}.wov$U2 -CU>C%IDLEPaR4 `t*8*T P HI`*%#UѨ("Cn'A$LEί|V'b[YQP,焥%i KmzmTQc)&+CgI}`/n!N/L-,O˚ M/L͎Lv^otlw$_?'g)ޞg>Oox{tܵm\\Y{ F:\ͭnZGGFF+3[F&&F'!LOOON OL ֦_\_>4wk;ݳoO2< yGܾAwh72><1 ox;M/kN*m4g׺2Z !R+iuRsZirIkxB>Eb@3~FIeW,DzTH`ي*KPIZ\L^1ZmSr$)1%1jƲxxx)y|K\L|J">X2 :22|AUbrpuv S fHcE;S:66C,0;@-KB֯ RAh<9 A.P pwXb`j,LQ P~9Y;|tpq{w󋝓ս݃̓㍃ō확M(Vz}sK|9:;]]\^Z\[;_k>zfjqiq}}tO;swqpwws8yZ9zu˙ս{gw^׫ww.n__nzbrjjW<\;z/[jx_X,'uh%CikҜO(mzD31<"0b?h7*& En{qlՀn4zPZ+JE`DrO(&b*PHaqID &SrzmCFQyPXhݞZTpg~x|&E&82YiY'bS5Qec ?ҕ&ZAߠ_O<|DLS}xLJO?{ӇLjy ڿDso= ]uD@ (Leb Yrth!pBhWH#{Jj[\mn_{;>坜Mz:> iszZKD<p%Iq6K"3`$*S" t!&@IYb6 'd @G`2!h@08 $`0h*#AB`lSaGR+C ɥQ9Mֲ{xbZ{;K_0\_K{pznvhsvb΁wbopl`|f|v;:7nlN.M.oMlM/oLlήm/nm]=|>}>\~c÷ߟ|@t Agw_]_g8@Ro?u~Wgw[_ox~~zrӁcґk{vulʻ߻dHlI),bS"2&3IJ(dNTgq0TCY5Mngq9єP!3gH"S$NX8 Vu >^29Xudg0P$2D!k W(.^ch"Č("߈p2zM28* Aߔ'GbRZZ14vD߻+\>o!Xo^?}3~"wػsmYrVM1K|> `Bz0">2'STe!֝ɠ >D d8YeU%SR%9ohk`5:tMux=~Gkw[K/dAs#KylTB (<6dpDehp,Dd2JFf2 $h"M$4 `hdp/0X<ųYd ̧P 25"J5,5;QhL6vE4rkxLJ|ײ6^ٟ6jS4 RK',I "*Z>R3ztq}qg|.r;#KlQ+m9u=S+O<|qq w_}@÷o?|D M qgO?Ƿ_]=\ d| pX;\?9Xv̖Ե'eĦfWǧ3 s꠽7́&gGV'7Ɨ6&Ww&Ggz|ÝQȌkxf`rit~clqkzpr-<@yݷ=b%vl_}ڼ姭7w.?>l]>8OkW{H 8;x7w=s=ֵַuvUg'ٔ6Q1\.Hn3TV,U(| &`H/G Q3<]" #K3e 1Lm ]e`v6]LoS-I6G,C (E.%Stn|e::Z1/asl)T*s.>טorfsz"KH`L.$8x 3HtBG"E i lRY:@~_F诽?@?~:}u !?o~l]GteqfʻS7+58r͢q0(UF ~3>F3B@J.d8ΔDgJ#%=)#+JMKufdǦٓQq ѱHsRц##"Rl21Ed38R j,YGA@aAeK#0àh44,81/1<%I"" mx9U,6u]6MZ-KU%Յ%ӚtiMa-NS7<fjhh\:8D_?~%>:}=r78px烛O}ܱrw/w^zu }z 1W7)ȅi iyiyeսd5c0V^/"5{jίOV/NޮvrzeB՝ՑU{dlnpzepfmpvcrhjO_|yo>l?\|A;@ @ԁWkg: a@bvfͷk׭5ӯ<ݑYMcJ!xؽ%9$^ H2"rp,FT.3aҟ( bd6YL*/eAD.Hd4rc3+:rZ913hᩴ4 3"UPYWH`FnCӸKr.UY:GёM`J_^a_Xh 藁h d?h*2p50+/Jj7ܺ?A;ݻ?p Y<6~]8w|3z3\7/XbyIb)P`^Vm R0$2d+\5 L}qd; 22r4dt3ɞhu$F;QlILv ńDP  i |C(|ERTL4YfM1SF^QX4 "p20|T— !/PhX?GK"-*%LjqN MeƲAMn&^ Ii&k34RXMCeQm:YNҦs,y¾wwᅵ~<%#3"?r=?#+8v/} ~oO!\="k?[(!ClyY\cH]@]3>4>jqxo߃PWO[N.6o.Q^!:aIL&gX3Ig51=&%;6-'6=7!06-f,TKB눌ub:CoulcLbd| r?XgF h>S*(H2HEURoT5fѱIס?4@"0(4Pz{**V7s!4DB@~変5tF{ٳj2gl͋i[2 ZXph$#ŠRk"mgbO_NNnF 썯MmNnMl#X?<8<>>8<^>y +O?T@7|u ]ja+(,nOVg;M}CɎ靳ͳգùW ofqdn%<Ń7K.`]__/.=L/w6{:s2hqGZrf m'O IA=Շ׏ϔغA1 k0ȼ=b'^:J=,MNNގn߸7/j&Os#ZMY CŒ kv!S)l\m+8:""jy8<(P(&TSxMUBLĔc +$ĤB%aWhˠMd02U ^ 5XS$К$:d!XJ MIK2?C 2јh tݯgAYV9Ml#c'6~uugj*plU(K6;3q)JE?"Rjl Zokt&8`DV5`K0&1渔F{RlI2&l:ܪ6YuqD Ζ'Փ8\XHa2bXKe"X9hk%(%m+pұ$ %6B ,r(tr]irS QI9(4;H@ #"sJLTk3۷ѿX2 8;V{6]붖ECb%H#!Ӥ4Y MDW* ',iܻ|pry77>3:=23250oMt&:㝃SócK'{o L׃Ln/nzƻ|c=C]]юvpk=?i?t մ:|1<#ޱ&0X&pK07G[=cQakw7VPg{xs`;mqv[ήzfV7GwgwΗOnmytp'/q?6/> 2gnk`iϷ__ O{\ es]3ymS)ּ𴺨jGy_aTo132P V2Ql]^' Yj5Z 4I8SFT`It% L]ֹ'{ۆ{'z ,=-;Q$x*=W¤:Z+P* GJg"PQLsikcxx 4=EgKڒumLJ{dMZ,ũJ>)!Pkڒ9QfS4ÌpICɂ.Ŋ q}@gh,EficDzD]13:n)dKa\Y' Jk!B'3Y25D%X2X~GbrJRjrϪb8f,w=ٵеjk5N9Ad:Ie)UKThcK˭onO=SKc+;; #c}s]Ck3[ H?^<9nV'zFG|c-V8һc;> xg;@ʑ6  ִZ#mޱfP  $yAk;kl Z\6`S 4x<]^4B/]Y9n֎w^?Ju3@D9#3 ȑ$ h[-a<όgl˒}ܻ^g 'ؿz:UܽzYIE~Yj(4U: JC"}%DꢝiTs٫|z{P+m:kJlw*1c>;F3XD`aų0BF8W̳L&"0>EC,pqΣ+MbDSS/֘Ԏ0ZZ~&<W_WOR{i_sq=b%M(!Xh Z@FcA cC8.caDuhҙIQ8p<͛_oA???X5oӛ??|5?.q)\Z/Ο6n5o[VZ& 1¥p%,)Q"62:NapG GcL@jYRq*թTV V:*wT㎡pt)gRC2,iK`3_)gR)Q5(2:'Wmk<j'An\oA/\sЫUlk[uu^|o~fg xWWRY <u_mI~ 򨱾/ P+Úwjrp} > 6`5hAoW%]@ {f:YX6/@}NWmt_ɏL UZOWB-U.s|sR2ARSw/.x N|Gq꾌ZT{Nf3{]hmD*[ \sI ā);w^گL{(a j]QCʉaI5. ]po3T}@Rp$,%҇p8#R,@<#.Ibxʂ8/՛3뛙(*ѕm%ךB%&hl (xpFx'DoC"R|JUTrB!7fx&OPjw ;p kh3O$ 7oFz'UUb2GXf7H|#b[Xd , jk 4G "5ijDQ6%"M2Makο'*W\aqz2Y'K T(5ĆQ'4quk`+GD&5nOrޭw,'J?g___4?=7Ͼ_/.t>.^B@Ckܡu+_@ ʬRmkxy_yQF{@v$ReLt)?/ˋ_GVNWI˻`"FI,(36#~43+8Ž}2˓xR>fZ TqH3Ĝ7,47J߬?D$,Rc2gXB|gLf8 uJɏ\Do23Kjl[j=8zb(LclUjb\p -4kԮ1uB(ii=IFXbA襹\5°CL[IR9Al!}CbƱ^r7۝滟U^|{4yxrN_I^4]塀oA94jB?w}\*iyTHDX۶s|ob"q컗S}{| `QEa!Yرum[ua׈0'}amq$:G(Zۜq,".J4C$UɌ$*sS`nCdQ(3X*mB%<"b0?:?F ޹1GÐнA 126ƒZ@M_O(."x\~~x[{?O{X:̶ߗ_pi2CFXx" vG "'PW&fR=T<4l4J>~"7%s`af=S, %̩jrgLh h|3JJb_SXrKHl MAPX*1@tǔcR&4l8_A)bMfH, 8 GB+EZL3R32wO)L&ǒyF? bAA*F W*F8r G1Ė 0,Ÿ;TQ#\5MgO,Kyr!zvP}"yl5Zwg3Gm6|X(LFѣVZ/v-C1AK4>(LF}@ 2 Jb$;lov7Fz-S_NjⳅlV}6_x+L^_"hka}P<7Nv|Xݭ/a^Z4J&]"9wIX:]pzw*N]].JAa1Y_Z~v{>oޕy{-+gWW硵cz޲Mck3̑k9mbGŞ1ϻi߾^K =1-iٯ?m_3_,ziYs$(WLe Gaq?T6[ #c4̡s416! |YVh&; ۣ:ό֋^%ԞYgZQAxfP' 'q#ͪS [XjKL~#҃0p1v*4U P3͖[- B51BsAP1hALG`, 9a%DH 㴱q6.Ė0 Q#)#C%dH^/u ҤT1Q]ԑi!gY-^-U?.=+L]L;f MyY⫙/#σ/Wۇ'RPdɢdA!ʝkpnjssWv@j(Y 75'Ů.[o,sˉuro6w~:Ux˽INٷO _Z<ٌ"ǭTg*u~ݏ/x_ۯ~7qblZ'7o2w$s"$*z6UY +hl! 0y)rJi5N(qF¦j[PwT퉂aL2{Lj`<|s@l QoVj:Ć@l*1 WVrU4(e@as&JMBT8$Ei`U7Ξw.O6kFz"4HpX鋵_-^|9U=A"-Fwm q>vQhe gsҙ!,.־GrOf.ͼfrJN˨tuT VB>]r'ݛ/K力3үwSi:Y>;o.ɜ7!A*{Ip(i-q\-gbf*|2|2l&rt^|8+-IԀ)5 6~5w[CK|/[f-e_a8zs#lQ80<ܿe< 1='#=]bײ *!Xbtz&~'Rw?B@Hd.?<|׻_o}[S0!y duwrkGQƌ(m~ūs4VXm)|F2Huf;Uv̬1\*^j LU-=&]yWdY0s=g-XF?M!%Nj}}rFv򁵔oĻxh.TX˒Z_c<%J Oj@mItl |p4!Іp a"O3u3GaOW2OH)%fHAx& )~hgREdwT# }0$ʟ$2M5Fvj`3oof/ gۭo.>*}Ͼ6t)YA X͠ wy6xh= \wG jv;(A*Rq@HDZ܀/w)eKʳg_^}x\]8*x<|ت<.֒,2Y,f{.Jj>Y-7rSd6}h

    dҽ~a_̑%8gx)Tj-846FNA*:"[l21=gplԈ,MpA,z0^ w%YمA*7L}go~|C20;* Q{dRq*m:^vZ!ܦ#_ddk=iol_g XB8 @31!Uo%3QNOlC;z!-Fq(]F)<WƖX-D'!x+]<_'11:ntSyD$1 ~@>6*O%ƨSHGR<ǔ`@Tn?Kd=1GXG'#!nZȳ #{fAp//"oƊMWR嫝t xT.[Gw {)nLtt]ݪ2t5QWF/AO^N]#Slg`/7iW3g3_gq߬g 'K!s5&ɾ2wsO?HtG~K0[4 {.(tC7@K: j-SW'ᝒsԚ8 \-h}b/ُÙW݋gR-Uiz)iΛrspSlmQ!Sz3϶uP2&Rw8h<]z< R9^E>iȱ~ި2DPCxJ@, |Cb1P9rNKPbи‘98+C\ @&sTb2GBd t>šS8"T= YxQ@w+~x]P|w_  ;G>5_7b9#x,P#et)rDy %_k2Mf1LrF*0h~?W'(9\5EjVA 1SpZ}SH3Liƀ>NFϤ|Y6׭=wޝ8O3;R0:ȱ.KYK烳 dd"P uv5(wD`T#cto0aO&Dt& 2TAl,^82=_mrq6-Ʋ%Xaa* )A2w%rA;,vVML^/_(hA@|Pjldj󩽪w2xƗyNwOV6Q~|:Wy}\Iߜ 8,ldN..[̾mtv3I fγ7p}#9s@vPW..ZB9w˙w%;$RӻV_/7^}JQxuEIR8!3׋`^Sʼn3>0Fv~:sL 8)CQGq2ߠ? 2+敪moq4\`B3.205A[2ڣE;˳Ǚ ɯpFΈ8pDF?O B!V-bGf J-4A{56ך9*[Kj^Ԣ`QX"m@X|mx/ۿ@_;Kl7?S'qd^A+t|8S2Yat(MN.7ڔ&lS[S^S(bNcc(dN9t>hbH6ȭro FC [tZDLDgH(RWC }0a BYim-pD0I79*Q"<& 1*ѳV IoKj*A+1dFKbcǘ "S2BbHl ,Kjb|cHbPDZ-\‘P|[KbYab,w0@"9=N/ߋ4?O>D 쫍ꋙݜ-S;cmZ1ktN\qkl|ROVSA; bk ggh`!ߍBy 4~ِb9!S)V#@]Jy||rb=g9\ܽū/~_ۗ_~_=|ˇhxw\VDwXqz^~[_~yo~qˮ`l.Hu[܏Z|( 3@Dx@fxZXgOKمܳ{M黟5<zZ:Οd{q8k[Z]-_U&ֲZՁUôNf#9G*U³4dq??J%p?w1, gڻy>Ռ4OES94dPha(ӗNΧwU#_9/T/ \<](務rg_Rh{,_L H,g?y7oǯ_yzYG<:h]4HE&.K6P=*77[Ft=Mo.}ׯ_{>ݧA|?T "83A uJln63kyp#;WM=sl6uJ/8\cdz~ AͫS7TB눌dJqD vKW 5HD 9EjָmԺƟPyEfS8C?kX6̑U}pAQ8\}#$qta E|^6z9tƉ**|b̹*Rϊһ (ۺ}ā6"X43DeoN8bz_BV8bGT늩A K%х=d́={=Qham0_ׅ׈:SbyZ^$ GQ~>Lwӏ^ GCOwɇýQmp[]sIc<?=h'(SGO߭ݪwuOPH~'}p>xb\lIi| ?0CN_~gz^<C=;oES'l}p=ow3٭~f8ovS\|;=[~5]Cс|OCMoϮOk;SݎZ )PI!z~apCϵ>HNs!z2va7U<,ր-/N7gX>Rp˜^_>/\ԲZ]~EW)=- (]=vdj&r5䒲*;1B};];| y,_ⲥ*^v'dM6\nߞT;G^^O_O곇ѭg6-~rw)w߭W?@cibCAnT9y!ޮ.)$.V]iiLb!߽=p X˒-tO*2Go BKȊ>`.j Sx^վ9ڍdaslQ5f; dS܋A .}} rԇeQv/Xz??P1> fv`jxg`gt-r [Cx:0t80ʔB'/ͷg <^&&fQФ> b#C#A}(N b#2+U'Q}y}^ø>G[4l c=lǂ`ᑾ!90#+} WbT_03D R8l86ч㩽ã9#;ܭsٽ'>~a\:./VNA[9;N/ oShl!$;Ԟ^ݞve)УeqhgN@WG8Ի|ݣ H]:wp4:Di!;M<*֎A4%@yZAs?!ߏT5Y_;LWLy8yJ uMW=$.Eug[\vƣ|-N$J0_\'}.t8w~a=$A~Tlw@Dc'!rZ[N.wTX҇7 @rv>yM; 7H}c>" d8xOը40ȶ܆3~#{[/No%-1C9#dMMSUwɕ84Mnh}:w<8f-Q3Ηc+в!Xބ:l+#1"BT* TaD8bCOqOC7tt3θ*нTr>Ӿarn 5!1 ˗_ۿN3H\hŬ6yCl_2Eg1]AJR]ZFX 2_ |V HT:Dt Ptyaa #V*Hk I6IFF&+5BF jv%SZ\#R&:BQy2c/Sr%rDJ(8I18#6tI7؃c!KDn? ."b#^!< Ks釹ڋL}*s\>,TՅBrvmknqPIVGJFuz x@Þ`Ј[hS CBw4l!T Hc".;I)d=$arX8̪4a5Xvv{m<{ShTE66ɡ j}$G,)!Qu BuZ4vuivwg\A%0ayNMf?GG|@ `r#YS9ԆQ&|gW^5Qp'%Ć! o/f:3ti%"#4 D I<"qql$ܼ_i= *Ui2']d"2$j1c\,Y했3\!wԞĦ)X5%u` 4:Sd:n cjfrqe16=9576j{,`ã.f4,^% % z|ODO@㫉< 3JzOРk<T ,^~Y<6G7MeupZ'b XP11] (}Kx#*W2fF"DZ+_mkbQ4(39;=4^YVѬ1k--$ڥZDk]%\S%zPc,"v.Ҙ%ZXg C v(MH& e.7dF`6 JoG]<~ #TIP$e=^[E(}XRHQy`L[{Ff5uzvB4X=m7skZo[ۅNWVM|86Hr g%(s>t2t6]{8.u}4@>om@z!y@Tt˩NY|8Ap:nfxs\m?g[ݻh E&c% StC' *; * cǩgg]\tjP%"Oq\x쩸"҆=yHJsxsTnn72WosDGyXHBs~u:v lA\Bӂ+voa5 9"ۣFwWp9Ig?Otr|ATZh'HC$A+>Zqݝ<շ;NW#yo"imhBƮMuRwv3W9.S$0]G<~(|ָpbKڒ  {Gn{G(#$0I8D"fR8QdJV]/ݮ[zn|^ۨoT6wPlov*>!el7/PH)_r8Tvw{ջmhK͝rdm[FۻPJvf|{+To&oTVQutXn|cxWl()KT"GB=I9(5<0y.jCܝ/VDB[a' /ջ^73[˽\}'[_o;R.s% ݋BQh;Ff=]xZ??m )hMMx[ڊ3w*Kc=t!HQf1@ M}tݸ2hY;Lw\`$-d,4 8{KŽHИ\A=,4  mtUb!.(Dθ9)&4u2! x&Hdpct(yz>KphA;BL=a3w 9D(1x°} s9厰w';_~w ~~j뗟M}xQ囑"BWh" MtA>1  l!KLbClp N(MltJPg,A|mH5.o,̓h<_V03e&WY* g#&P.J:q&Tdz+>8#[iq)M"֘CPfjiԿ;2 ]܃aQ |Q|w%%ciR=ZBKX`xvl1՚ORK\*jΦnJn1Z).WEZ~xl U6Y`0dϮ3ͅrv1)޽ݽۮ>lU6*@fv,'[Ef[D'b V+mWJ3bUlf [셮 FsN Qle@VQ,"ml'A6| /a'jz+ :klQlnАȮG?в{#J -r j ?smGN/2:ak3 Fm pimqx,Ld:h Md[15l-Cs5Di#z >S 4D}"[b` +5@Bp:ʁ&PR _jXR=AlL. BaEO#`\/WK 6̈۷YiҪ˾81JcԁG=.jGPw9"GLl˦}nRdKNfncS"ٽ 5c'ɳ60BљNw2w3T{: (!͹Ral!w޿UZH7|=n-dogS! ~\g9Y)/]=J~1^ݭd;ɫ *w˅;,W`G6Bs,p0^vr,+V"YO5@…3hKSH۫tc joO_*O` HmI}1Y[HG`g/G q/?\5OaM1wr=wT8@BTr7>4Fu=8QcJaDzGD~#p3E 5#uh.uI ag> E1^X-faL;7s'+W+cDl <`7fko }رq39BfDG(QW+]a=(wNXpF9F_\h=1/D5ި' O8c"<*?]xY?ݏ(~c\ɿO~r ͪ'{Į oJR%:Q@?Gwv*ڤ;Rd(! !Zs,QopʔB -3P0/Oed*T"]_>+J-^'TWۼ7Foi B,Loit>QPNeEC؅("m?qE i]:wރ4#Uy(t˛saf'N;wo/C"pp vU(HJe.[b׳Үz{ul0VZJak'~V>p>," \rQG*+X%u0V k5L-Ŷ]sr7śMmMu鎺oiY_S_߯߳򛬵`,ß^c}غz~.[͝ڻ:i_{unYC/FA8Q,wYEQeFID=X\U8)H1F IJH3BSf,X"$!jlQS ^xoXe͛`58ƍH-՛ jIb5zS0_PG[rs4:JSOtf_o뭞Vo zw^ :ZC3ouVwh_4K`WU{~9\k.7 kF{qCitr{i]]uw;77nlnY^ܹ=p{osg~NgVg^;݃;wa¨3usVC\gV-ޅ{ok ;[FٝfΌ;<ycWKs{_9}o_Jʈ^G7*L|$]rEw*- 'Rw,]?.dK]mpo0r!_-QYRp'J 9r5 QHɖMåҰf.eENOVV%;OBksi'qfw~6pa.x9;:5f.XFt{ky:QqioQ*v.MGÄ63^ڇ>_|'+uH~OYjleLv [qE=Oq jL"$)eh%HXUӀsРjiF˰FfX=]5^/+w7ϾxēW?yW}ǟ?/7*Ӿiя7N_W!S E,~p| ©NFp*\fbx5N 8=_o b:cnT)Od*^s~8XZYY-, W78U%AIR25@<­Y!$5ݗ^쳛/^=ї=?g~7;NFY!%} N?u'H¹J5B]'*bb#y\|]:/M^>>pqqώ8*s'\I&9kċ<%$Ofi E0XFqREzFKvJK$r(Rъ) ڰ~+gyJs`ۤB[T}lŒP%mKm1-B76BݕX |ȑ|ŝ7TN ȱLN;s#(^F|QaBQDLЎjE浑SO ' 2GTQ`UU?NE#J2#2/ ps8025 m.x M1ӂ"q3)S#>@;@0PKF|@9[UqC U84k!I#"uf G!#Hu(XZ6+R^$f0}K)Iiii_}8 p,ٰɪ6tg1o6DXG7i{Ko[k d&7wmlmoWn[qAA9'b$%h|d V. (OO˿o՟ h,|px/SڈJsn ?;}箌\0 (1'm PV'SeجʴʴtBl$.P|EfSM<1b&B֛*7Up6hSl }FoI_4%#uyrBb;7:[oKCwKͶv0ySYyAZFzzQ9[x1g##r<"% $ꌂ rds$ _b|-mtg"8%h01W$f)\P@$""% 38bUYFN9+#(sQp&S?!sS)GhC (gk*9"R4e,$E#J8G9ΡJյlYB}=F|9: m ؂$X-{O022$"waEjڀm܏H U_Aqax?78;>7D\?LK~`Z^Yv^y#ת R1O<' w:K*z"fʜ/5370ݰ:&G >TbZG_tBG"h-͚"d JhCyc_o~u꣏V~nV6}ާˏ>]yG,҃_=Dk7JE3)҄{tMp'Jh?U&T9"@7wO}rZLr,(xh@vL/Seq<$|ф7qc;{{]鏧macۼֻj8WW*xՎ8kǙzcF4%i6Me)Hs(bT@l 8 9Ѧ z "S6qX4,5JtPhi,C͉DX.%DL܄))Ys+i?5emiҝ$t(>=v&VbW@W'—ccx1(c0ݩp<F v*Jq endstream endobj 786 0 obj 152393 endobj 787 0 obj << /Type /XObject /Subtype /Image /Width 345 /Height 231 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 788 0 R /Filter /FlateDecode >> stream x콅wU_w.prwwҬ"DH.,o}{71,aWe}?sl{=c5V{kW>,Z\\語niz5lt*}yN,gk<.(%MfMIRjU)6ڨ֫JI"6Q-UB _)LjR$d2T!V xb\f2B eBD&QJ G(ɴj.g,*J |RXIxLrT2@eXLFmsLFfyRDͦrb\T4:Wa:Y7a "y.epY (="̜gDE%8##Ĩ'3ff?MKKUycEImׯ+ߴTmh_ϰO|_e7xݭWE9 1.!dLw VQ)sش"៿?w6|6.ݡŇrcm /vd}(>^_bjgi{`d8|8Y.}xX_;ڲ3Ҵ5ncnf '^TwdWg'&8鎰q'vCFDX#,;oڔNԩ :R&|H|+ ZVHbHg9HRHΠ n 0hL ByL>ЀB< y(K "J&TIos%*Ma)DJ>GLf1 A%19 >TRL$B@.Z &ht`44Te5]V{p gÑc4]QOcb3OS/S_dg'?-쬮yYTWVRU(訯miy> ^Q_oaF O[g GtxxDf˥Āǿïw^#ܽUVil2~A2Nj+ʟ/Zjkk93YG=C/>0&N>؃?8ڲn~fthlhMo2]T4%,5iΎ4?hs"MYX*bijK6J/*D!A ej>W4OajNaZ.[bpa60LL:G,"!DR(霠\H0 yRS'Nah\ڨ+e)̔<$4$w< .iAG( *njN*V)Qi Vc8 %&a 4[bmvAB 5bd$$)&HӛƲUku ';;Ng:/ft_|, F}kc޵1V[(,>[Q_C$&iD%\|+UMo4FxNQK ~=)2psLtblvC#P4;9)/IqfFYnNag/5~MK]/@_]_B{g(7YRBJtdÖt>v Yt({= ܿ ~lSc D*'*YlwiX}bOʇ8GSg s<}~ҰwyԷ2]Oz7OzV/F݋#Cns>LuBi>V|n+m-ØP>",yYJda37֞Voɲ]Ƭ(KJlp\ZE.2IqzR J5p Je l)_ĥ3A4 Wrʠ ~B%Ј$2Dg`Hxar /|O-[vNW&k|1{~|4 4 7w]U|lUWy㊓sߤG 㭙]q492ި ,&Rc´JӤP ajb4taB6_"1ڀ#@"P4vh0A9H-حNΤ1X!Axa0> ,./,-B@ -`TR5pC\Z d> TA40kzʬ7j>,lKpFE[m r;qWRdTrTd^jJYVF/U|]YY_]MCEikƾ֑(/ >*_J%:Q0T:ӏ?ݻyPt&=1pGD[+3ʳgZ4}|+C~CJ` A`ok@Oޭi۞q(sLt7J4w쏵o6/,^쮚mR6\7<*IUVb̆MeQD{Q+bMZR1j_3\VMZz](9t„4=0A!U  2giTGqc "q*B^e|X&RB) æqAHR -d2L!T(EJ@R$vU7:j4ٍv <HH- 6!7ΧQ%UeJgV(|"͋Mo*_w6t4}?;/>F_v^0Ӥ$#2<,-!:nI6r.o?aНw)$`9޽ɳ@GJڔomܳ2z8x>w٧;GmխY |jo()x[./6+9?0eFUzty4%$5&i6QiFaJRl`uaFF`KLJœ! L&iHP$3,ypO1HDPHgPؠB(h$T bnL,Jb•I@`FVrTE0&\f %1v)4C5$1ILt˕H.I}b 3pi.!>[ƪ= szZǜFQi, I * 3l~ 6#rB,p< ` aO!h"` )b` "P_id&$pyP4@@PB `0Y:\Wl6Gx#aEZH>q:Sbc\ѱiio ˋʲ,d=]uw]We C=c}]>7Zsyf(+-iI Õ+\+4?ÿoWj8X<3R[0R[noh |^@,Mo 0q@`ފwwٷn{K pDT&|DvcEWƼˣޥ\{~ #쏷퍵n7/Q9tdcEԶ/ڋ5<( $:J`8tťIZX$ &ҙ 2Cg!LC A/Q N{q`%@E@EHx2@ B_. <+bPL: 8"!U)$J.$H(TRT(VzʬւM1`@i̠ "DW4P(t'\IJ355|U]_>|?B\jQne6?OAOuaCphm, >L?{w/Mڇ;7}  boսYroy8`!Y^Q rlS.Z;bO\WdSEWif[QZwx2*3.3R H0!Lh5ZRV rPW*T*Jt<Ģ `P@`8 @wXLH8``J'>*RX"a(DC/hJ^eJ+S)5V[F:=`60`MIpE$GEf&&d$%W$H%jjV 7Rc#fU7i(lhZ@]V{͖JI~ ;Iz|lvRBQ7yٍeoJ:4ϫ.nn~W==q”tP' P$hmPwszy-FʢE|;wo}|?]zGO^۪[3Kם~D_5JP6U`q[sw9Agwv{v9 Nv}{>eowٷg}ƽ6V@ }xx l]j,j,+,(*80-%\a _@g  !F P%BCBT&#sܬ7I` pC L.)ĦR \{ <t2䃏A1y* ~܁`BΤчp3`0iuv`*pYmO\N))q9O2Ⲓ3j Vl,}]}C-WϛޔNwtԽhY>m<ϋ=F_Eqlm,e$8LN!5&2Ld9\o޿wڕ?~߹ ~cTdX S?-oP% |ލ)p2s/X/!kp(Gv<ދcʼnQS'2x1Y" *QXfčh0 ~tntp0ykiwusiWU/At7&gE lS!x4':Xȧ3D, €B a h@$O9t6LRYRȨӈT*F"Px!lǢ2 PT_ (@Ky _D%ӀT2\ "J5z1(u7,($Ikpcn2G#\Q1'ѩ1IOa$ǽx ]ɋ774*xQ]rDwK_Sϣ_./{+ gGK\Q8IdCY2&%\Ƶk|n]<\Ҵ9 /F>wTb3߇P`c_@ooѻIpC }? wm#xOv>ފ{{ѷa޳g)d{2v0t a~dtwomco}kFƲ7]%%CU-/e8!#ͪA]NKQSǁ|08rN pA82f x%dry4TU( !D"|a>JFf~bAa)L#㋔J,,LH %+@#:p4:PVAj0ECn` "\ O# g&祦d&%$'g J[+ +Kz޾}YX]\d}XgxOP'/(,=z='o#N:%6*f4"G՛W~o7~%mjgT_g=)p񽿷ȻmL*"Bۗa!6 #7O0a8/@ Z0a^ck!7g|YM^,^,bm;>nYz_;z\goKkf9",)3i5HE&G& 4FH(58K񏃈A#_1 ʔp U惞p$у H|4 ?R :J.B2@K*1O+5ɀZ"h눈9"Lf8.nqZlpe'GEǥ@$?JJ?T[Cͫ"MEMճͫssM || 'G=9 zUa(|ڣkܿz?`߿GxxOv(ivWľʼ ]U= 51ekC CB;|k(5p8pEG^^x\"&c {H`d<+e/E7{`p·j߻Wy 3h?aL0۔R#P$ J#"88ѝ{!: N71O#eƐ %R$q0)8PIcHT |1Ƣh, CFe 60mf1 _ P4@.\:aYo16{|ˉ:# `95.6=.Pz iʳ)M%ݕoJ[k+^-k,h|;׾8ܳ2ѷ25ibw^js(K\w5&HƢ>~kw׮>u+;.=ި̋I,Ϛz5Դ/N|AAp3Hl}̢ *I` d7=$8xNb4P>C}r @x60G V)l Dl$],<ap\;jW>ͶQ[YQ]a91({Hp8Q`B?~{4Ia0t2Ȧ1$!F*pA8\AP@(>Ȣ4|%LcҘl*Gi :R!RA`y)z2 @2hZJrLq( 87 h=%:*-6:IbQf PbyNfCa^kiaoڮ75/_4ԾnZilkvd}wv#';  ~ngg}os4+1Z|I r聻W޸( \ yةeFY^gƷg|l{3Ҳ5AgJ'J`_xw5oxG;SP ACU"yw <) >yHX:/OA@NN_F(S7$$YUVbVԪOta$&'f2 : g Ǡ ? FHL.DJ"4 P e x @S`TAWd H!U~C!@.R(%*N@(0]fScѱ1vG3"56:#>,7iSSJ綕֔U7Tk*}W4Xߚ۝<ݘĿyw;1Ջ{IiUL9gKi?rڍ>}'={P4E`mJ56ܴ?[xPsv[2YepKUQ痋SH`7;gܧ_s ]10]bʠ n˽jD1 m\s/~Bh@`rO򇆅w-oJ@4e$Hs|6RpE bpl<|> 0#8,*J$ @$E:ȩx!(àP"gN#ѩDL(Un0p<ӻ;ڹHjboRﻑ e% h4'gPZR!%hA`q@ȣB0.a k` y,(8Wƒ{t6Ha@0)4&m BPB! dSDxp綐F6* ] +{3 }~7/_QJ 8;`o Sރ5 *bGW=UyHQ6 m `OxWc@ˀ$NyW&P0ݛ-@u W ԕHR5 P.%p> r‘P"@)T Ũ҈Tb(1!PX:)J" 5b/F5Hx*B@ 4rBkT *A5>l;"]QVk=fKbTT(wcc S 3I&[ jG64)*./-n[1ݸidoaj2/hwwX(>k-J^ :Oyt' n>yb┨W7GZO>?x<ޕQāe|2{G]Eb(xd˅C pcHA8UV୛o |;oP9ƤKtvV.|l<w0Qq>AGcp BaAB3.;ޓ].J#Dz?e0'{#u+ _QYW&؈? (Y剋P=;և[?wly5T[UZ,7Ҙ +OOpid"BRDB!Hq$8PG`CJ< HI9<.E$,+˔FR)b&e8[[&]X3:[X ,.SXÞm&duڜW#")2*-.6%:YbBD4(;,'<;0U`}ɎƮ7*uí+գ ThR?x};x.OKrHT/b1$~ȣ{߼]\ ;[{{\S,#~rHT'聭4xa$=h3(s%? 0+*2Ds 񎭱ƕw]UJ'^Uf% "EZ|DI" Mqxt!(B 34|`0P\(x@<ܐCLM@U%Q*bFUBP0PHj 00٠wN)nKXnwXQxgd' RA$&d\A aRAz sWZ?6hct{ϳ47mG3PeA`۫>l8` =7D㯪R `J>3DՆn(Xl6fv}[a as֋>~A`ҳ:c#N?mnYh\x_;lpmqOgiV5DAb(d> 'kl!QT) b@9(KgCp)8"H8 @fj6zHćh2I. X*@1b?L W,hz %F@BWJ% b1V[j\bVA8@NtEǧJJ~yze^f]Wzg7Mt6Wn*x??Y>Z|;?ĹBCJ|^w7٩($T"..'7!?߹v~I TRAYW>zCHx@{׻MLz6&}[X3eP? Mޗ3Tf8ucƗ M(?Pp>|;nTTpI6k2&+X!"f.V&DN890TlUot"kJL"`s| )1Oc %&WNϪR^SGXڹukSg'KӃI:N;jaJFl1i(q/?ݽ~Ͽܻu;Q)$' U3Í{ck} 6`k֋ɻ:P4~p D7`km WU%]OGk Iѩ2]dȘD>€A0 dBPJS EJ@)LJq!D0GJIġwe k7ޭ|9Yǽ$ؚF5EX2&"?㿏EQC&6x{9څ}qCG6:Fl҂f ^r`_k9q {# V, < #  9 (u~x;^9\?P*EjUfb~3!LcDdp@Hd>H ?`i`i8"D%DDrϠR(T\h@&(͗s".ɗ5#a: ,!m+f96T*pKnNtD$9#b(pJ)Z.T`,!<+$A̦mJ וm22մ195=x*~W'Up,) eLVC]@ 1 xx1E >yΕydbI*'yRoroh+Mah[x籓5h^}A~' O JPqw_SC(n?j>νۿzN f5WvY;r{Wh z  V.pm"@`CΑ:ka!Vn|aE mk P!Kⁿ/ UؚFbIhg==l:wY:_;< PDX'`cPS3vdM-iUblpJKb\f(zF f)tph,o!$lRK%F`X<&[Ȅ "cPʝa&!lAoKOATvق4Yb-DGd|Ddta[Ð0;] P<{VTd]T{扞νiΊ`=>𯵾 5z*UBFay||ݻu_@޹MZHNLQ7b|wxt7^ITl_4^/l|9D<" /~jO~k5Ba?Keu؀6y{%Խov;tvǝsF9"r`r9 @HH"H D99gw?NZ>kYjW=WC(H)JKNo((/l//D]Mƾ慁&dוcmܶLo SK-dǓ <i\,K"DݯO śO_x㓯`s(Ӈ}/1'mIY7{bvLLx!2%@Bj;Rۘ- }vxpai^p \{P1 p;wL|.?q66Gi:WH WP@C+BF]# =uґʼ̸̸T`DJhdjhHW 5V]Ͽ"!%,Ϗ| @!ӢHԨ6J&ÉK'Kؘ F%҈1)@€pcHq(] UY"ի4XBPR4zXI:БbAjJyVz[;@weIW廉p@PmhizfpOZWUӅ[U zښ2J%"_Ͼ|oݿ'|7_훇߼x. HXݳ!s&G?5$&64! I> z㕄أ+FUF/-Kޣ >P1Ȧl"ֻkv-lǶ .$U7yoF* |㋐?%G>?/ 59?q}G 48A(:@Px_&:܄Bf,><ۖQ"9`&[V϶etBpl8NZM#s[3i]j֙:g[g[+ۋRkjʍ FGQBB^x&Wz6WhbH(#:h e4*F {7h`") 1&FԊD Ѡ h*P 8 X|.(D2>jU #`5*%DpTNŅAZbJvJjN2*4-)o)*+l2v7;6 CWk=}~ufdox=~'` Q]KrӒb.!w/^"!O~gCp_=zs_1qbYDap:zȞmϱ =xb(8Ӄl6`\v>֍wj҂k|N 恌7j 9?"C@M>z_@Fk4cI;XwoͿs;ntP͖fcrx;,NZ'v燶fק&:틃MFcgL[tKPMa}NbۻhF[Vx8;:~1$$=*O(d"S Fx24m% QRT BDǰHD,d(t4sN&qX TWZLP2PpTu҆@TsKħħd&$'&gVu jJ;f;Z6g/#<4wZB4WVel?ןΎ7W3Cۗϟ~=~t=g/Jskr7;ލ9̪޽7F9:P?$z{hp{ŗ'r 1^\)KWgx|QkN<V KX3;A2F_ovirg+3GIX=Ȏh0t ZL5枺w#ur3Efx7:O$#^514,9yFP#±Z,!fsC# DRc(mH!L"4@Đ,K&Qxb&йJ,J*8^ Mu 9+eJ8>AOJOLIM-LO-NKF..no0י{7f,WN3`em7f?B ֺcqސU \R4_< 1O߿[}OrO<уߞ} =W͛n)>X]ZQGݱ+3ƞAؑAwyAxNWԦ&ho-XHY;Q3^=P^ޔT>!GbF"ބ#_& ȡ06dDG0(B:eHDh4@%G3tu.3H&4b/7%"NfHce"n,~ceXel,x$ JeZA$Pb(@ƃ6HOMI*LMj)-l,.0t4z[V'smٱYlM 0b;~~Ë?/??{/԰ͩ t`o $!ocQ/@9stLI)u~a/Xb valzag"?Aō莿*D dd+p |+ P]> :-ntdXᶥ6`iV9X]Y+8!@Xm [RX$-p q hT*M yB#P(h2" "(JI4 LD @ IQ%jR-SA#s3duK2 ӊ3K2*[jK,6@a2u߳PpeGV4ՏO|fջ,ˣytV,?^|oу W~"MƜjywhmqIq`w#NQ1A9M; _#&hb z!Xf|>/%1S#^t6;t'x˳S.%O=Wl!֏*9{ݿ^lXD<GI!:8N fƻ=+@vPu]7\Y[0u':I|-9<A g 4D X,W!o"T:[MPc $Xb6A1lR `1Qug(h%bL HTT:+!I%U d#`@(HOHKH(v5@t0X[fi]@4pMX-s{#s4BCP}9txXe T9FpDRث?<Ӌ'sTlyxP0N`\ -cЄ۾(&hKOvnwW={k׻ŋ-`w=?:;<_J9GR@jy>fH+<uvth莙" ms w܀mཇ:#=:uc6yl?M#g8 kw~t{nxsf`0>]]m0in_:kǚ;JsB%(a@ %`Az"!ޕ@ A҉T&"QidZ4 tb19:#1/LyB8V/%jeR/e%%\)GX}|Zb -$3&?{nb`@`eƹpf>w.6WV-He],F8/Ou{y^FR*qt*9 %"6^/_|Oу?K|۔5u㜻C`5pc3v+l͕m"<2.v@u<ް/_8OVO7+ //wWqŽ|X0= lm .8(_Cjp`W};Ĕ[AGӖ15ݻqYs~f]3];+G cXe!$؛3vG3違ѮőNZWԼL5<6HCBcކ)a/XD&# m9>IaHV *Gcr\b4L8B!9b*?a4Ilz|D ZB)A*ZƫqdT]((E#3kƚƚ**MF;'++s7۫g +4A(>iQ' ⵪X!Jz Jd=&"З?>o=|O|)Q#u':@w8 (؟90 G;ѭ X3.C0X9` u7LVdZ>;NeDFP#F ?MRl"G!K,7bb¢D LY(LDdD=:ɣ X?D`S9"bLb 3>.I,$k5ZF&WI,s(HKJedfeegVLգB`px(8ϝY |g}@4x/?LEI q: N%2i,R4-m_@~oD1[{GṊ7~f;S=euan-w>X{?{FCQ=X1RU l(\X} 8LB5 o F@b4at4 ؆1=0c0a2(ilˈqb!̌aIjd=-9" T΁`@!Ylp6Al2AF pI!"Ec*`"Xs*IBD T8<^Hke B P: Yɀwe9 uH4V.v;{&sGg8&%SO|}i9xN  B$o~雟㻿 >?@D;^<;/wװ\WYNV ٦l{{sq\>r.mY㶉©Φ.X ƙ֑¡҉jSKk{:rUu-@oڀ r[g%HTc BbgŷYbG7[je:qf<{sC{;ơmL #[a ,1ջ:ջ6=hO/v[Glbkc]^ĉ$գ#hjD$14oT*@=(e2jLH94&ɦH,l$b6;1yP|0й*[*UŊ(FHTPL 1BFUhjF-WB>>%>!3)0=$+4'27 0V(o/uڦo7m{txti(73C%٩)EN-`Ӆ,U@{go~{oӯ?|uǖ)?PqkGbclzryGUmnuv|irpmZТݍZ*{ jM׎TWtdw/Y?C,:4l?x/9X8BA/ Vlؼ. 3u-{VfǦ#஡85ݷ=3>ճi(_XkK{gadDe:=<4QWW^q|@ 0!kj&+Hr)Z ǐ9Tqxt"Iy@*_) ,HB"PT@<) "^&OT*S4J+4qzR*\JP쬲Ҭޚ2 W۴<ڳ:տgt&G8]ݨoT2&*7#tC~g?sYN'kÕsi=]7-q|erpmi20Q7Qojo-5\cmj(o3YWST>TUQ.cd}w{v:3mfuz̈́P=17c'NvxwޝΊsiZ5^;M7ũӅپ]CDZXXxn> gh vX;aۑ$U3ej(.T3łX: BXL yF`$J(`DGX #(1|IrL*01Ak G#&A3l K8,INjTV&hzu܇Aҡ\NOOHKMUPWVV8T=R;T >ѷ>3e9Y9Z9 P0Z(39?-%QLTJP7/gO>[OϳUN ': Pq՞|sjq|||u}n2aljuZ)U;P:Z5^ck5 t5VwW6W46WLW7uUu4wU 5tT-Py|i|y1{`sNSt!gcdR۳c>+@ 8nx٫ùuLTkk}1ұ4bkrv,XM= U3 sMc-ULu4Lu6N7֏ 5Vl/mk--fUf*% F$HX!1M-&C$ TD)ͥTәB&K$^sB$ G1q|&K c5"YZD%k:*NբAW%''0NI-̬ϯkzWS]60PSfi^s6glӗeoٯ3Ώ?]~gǹPQYY 8&p('<<[C^{q n!+)xP.~f7NQ&=Xٯ6ǎ}ۤ6808ao4t֌44Xۍ}ͳͰL-ӝc-ÍmUm5Of:aK.G: ~wF-c{9ܿt?fo{][D+3nX'ChHc]jcWXc`w9 Y噩%iIRRS˳S+s+s2j2[J +R*RRR (3,M (ѡQ!("DXX&C`R""8|:g9TƆ_JJQl P:dF#ū@4OLSSRR22r N5 ֕O9{&{v#{떓 r0/_~Ѯ]nsmeYQ~YANZZ'UhPO}C .7,Wb₻ @pp_AL'jsn1:MK w[7h:}v4erLXZmm!$Ǻƺ=3uV smem߼:޹k½Do]? Dݫ^ȼtѻ߮_-`82&]cV[OBw`vLOE^wy~saFeFbN'ϋWūr*iFUeՙ:UVzX'饱d4GҩsKeJ V4CEDJ1u(5Єt:bI 4jU8K 8T^Dz  N2X{P b X @F'$Zu++q*MR\qp?Zڜp}Qtoesq}ieTsgiue P6-Nn@lު, ڼi\,NNƀv{]ckmK}֞w3m3UCE=y)iiyq,C%D E5:uv|\^R$(d:W-hbIJyZV:GcIt>&X2%"M|N QLAIJX!<Kg"{ B8,2MDj%R. X?>ǡy *VRuTIKIZZ*%(PːQN!#)9;5]vNE~^ua~㻂RCWXsB_kzG[Knی[#|L;\~:3ZS7RWQSV(d#߼gO/D4M2O6WcX$؃7 ~ž-)_U_}X?aY@g(\ك,Mczqցur2kg~xknp}C-3 q߀a 4(=; [K Pa p p`^9V_4R>RWW8P_-M+N)BX@t$I*HSSb 4P IT"q ++PP'&ũ2R J A%SN Pu%SMM5 namȕ˂jw7#7 "}^l9:*{ۛ:FzںZRD\ozpѽOCZ˶-$r If>Ap:e›G}P4̷r 4^ : A$Ko {~y2sy @?ښE}'BS]{(BY$o] Eln,(q, ]hbT£1dX!ǦahgB6_!$TԗDVz2^QKZ*YQj )iIyEٵE9uj&  3۳-X쩳v՚ګ۫pn)5T dsTKhcP]qoe~_U> htp}P;*@20R4R_2R9Vm謟kj((+WhU:8 f016J DD >OH\L& Y\ *Cl X6OR7 $XL:M`w*D*A. LiJl| A 51);-PPW_]Znq׶9;;76OWM^v;ޓ=ɝVWg33]񑑞ܴDL '~( է[K#4sDw-M+FfȤn+t(8F!ҐɞMJŇa1n?zݨȿmo[h"* Jo67"p \.OP3UjYC(PId:=D&*H'$$%%geȪ+*.k*+iiGnh֩e-ᶴ˅^htD@?}ό -N:py/`Y aC wc,7~neD́wMFukPq7osvmn{\yXkF `Y7ap0ݬ0ak>0{7-?p9$kG̠s$. ( FL>@-˸h# 6*4&T~m?~8zb2:2p2$ |[V`(DU=qPpZ1{8uf?6 zB!%!PR]]U_]R^:X74n9_1^9LNf^ESi~\>x~W$NﹽY[F;+tRt' Ex9P:.P!ɦ^*`?7'Wx=['+ў֪dFzkCiS8 aˍ .I{Cٮ Qk1hUʍx8oHITqy:Aߒn(؜h9=ٝnߞh_VWׯ40&lMwÅ#ÀP1(4_:\8}{vS'P$q>ذWk6w,]+MkmAx['NsM+XEXX85? bm1V'#@L{hCi_e~[azI&SzBac- ,Cѣ*Phuhp`l]giNs~Zy.S.TI\Lf\ C xdQ`w $@NJb. d|>FcU 8t.)_(UbPT0;,PȵԴ씴wYEEŝUm-Y 6϶j{ }>? ՟xaO; §[{˳-iZMIFz Z@ !Vuam{.7$93~_~/>×_?|/5ZVLgq!ؐkn354ZK`.׭79aNtnM. /];~ 9mɎMC:ѣ|r뜻XLw o+5\ @2؈`8o8^2,ճA2k[biaݶnn6- NӉc`iʍRMv[@*G닻Z2rSP@#M Rt6J$T9 (PDb6ED$&>leL"b9 G(1:;`rL@T)2\ 9>!=9-#)-+%0#$+tykR(כ߮|}w~ӆ .k65UUUPMʊ3qarLM:>_vhe6:ҥ_^Ὧ?w}159,{GEV~g>}v/u/_oL{ '*ҧ3'2&krlՠCC7{bO^x%tzx/p[fP)@CHߎfmPpbޛAĀd>rPa3Xz}WNsƂgˊ` ٚhp`ؙ-֘Z.A'B9) QQP@"1bAJ$WF!G3(Wl.,(ЉEZH/QB !P*D Ԁ1Ph? 39CAPM%]-f?qg~1w2{wW7X~)O#4Y\A@}di*i+Lm}SWտYP1vCxqm, а3 jOFnĹ0Qb^G컇_DB%fʋXtWx*ṗ~oyO{ӿg_?iP/z7\S;C"2?|O Lۧo3"M/>o_-2&2GA!Jqm2Pno3t.V&a'C#'Jv d;AÒv$׌jKG>o48y,b_-dr8!?%h:ft2s:{圻j8OɥαβƼʴwIdueF\SAjoUdk5BjsRt4O`dr PnP#F(x<* $1ؘ|lSX6Cc `P)VJZ,8 9&(4q ]jB *4JFU5ݵUƁ敱ف+Fio_nEc*]ͳũ< 3;* [ZkFk.w[0=W8 pC!j+8\1T_n$=]Y,ٚlI{fz:I9s9 A I0@{}{|VҜ.]N5ѷ(:]*h(^...G?w??7?ɯg/)G9Uci+1[K=UK+CMkgfXPDq"fn{Gp۵=.M=ٹW?s:s4)On7.. 3WScۆٞX1y󯃟= o_0^KC4lFVӘќc3R㔙JqL( 2&SbsB%l7 פY|!28 P `q9Q X"p+b2pd:R%XsHӀN/ 4iFE ^Ҫ5q`ZuL*FA*AAz"dedV kIQwmLysy/]P%I >,|{`Xmm,k55Z_ ?%-#QZ \ym(%I~()}R6?|ˏ?'?????ËJE8G |g܄R}usu1Ëlv8@[=EXoO֨=ͲiڙX65U & NZKmukcI,5%eHHUAyէŗ>/>`g_xЗ"^dy03L<'NHS!;^WR&&asѬP8R68q#$<"(yQ G?BV7'S\R]4VC.Pibc;Sq=JJf 7-47FACiIwmDgHhu "e P<(.0[ul}3\ӝ&PPp#OP/(PK}8:0u rݲ<֚"Oy/V}Sj:[͵ݍ5_}OO7?~O^}ۏ"䨥PϋUFGO|W@PH0 Ϟg[(pPXxJ]P^@:Vxw)6GmeѲ¤D϶;ǻăq,-O-.MgnXϖT!o^~񗯿 )EW/B|>y_|~/gy kVItN"LURD'Ap*.G`G(D2C# lP4;7"*"(39\@ʏ9XL'(Dl}0ar8^HPAT8&NM 1XM\61=1AFJ* '5$| `uAupKHc`njńYTDsyy%F&6kC- CkucPcro=r$ 8pYݎcu,&ES[(/hό槎Օ7 ֭ũ!QD_׿W_G?}_oDX.Wd+ɬVDw~x`hX ptjQWqj.Nps({n±l ,o[]Ձ:+x#@XENPk:&Ozlg6Z'WTF)1iˠ__|ן|ooDO>ӏw?_|#K?ۈWooeLA'iEl%Ōh%h~&2b&N4R/2*u#A \.fB@L V*@I%2~<_+ u"&1V('( ҲSsҋk 氬fv1ڻ53|0>l׼W~Pu_>G{mxesmcomw4s%b/;tg"tsiN6m{Ӥoڙ2Zz'K*rK3Ǫ۫#ݶ1dgU<24٧Ϳ_" #|Oe֦h3Sc $yRa\T#uWLo7o5Ms#w2YK8nߝRy䡱{R4Y1XЗ }{ÀCh8_^跊9qʊ¼<6ş_WO>?|>='?_4^بS4.]`;L&ޝd]8NnL]..MNq{fdnrsztcz>;nklw7Ϗ ̍Mw4f禗$Ŗ%ǖ'+S59̉bcSlklkT}DMxeAQzGnBOQ:th5ο޶dt q'-`Ɠ58yrnޟh_ꮞm/K(it#iXT::8__ϸMgSݹ)__8q̾1}B|jןǟ1gsO?}g?OD,o}/% #:ϖ3"dH9Jb4 `!AFh))Ч,` 8 4"T(D!mr'cSZ5}Ihqq Ii$:Y((./-+)hY?_2VfoG2T"-c{dǯW̷+7sw}}I8e+:m{Vv|qL+5ksbq vfX5MM~I?4?en5{j-u: -˃m-K-}˃5ƞSK|~zIٚ.̢=){nh\cX'*`aͳcu9KUѲ-x+(Na}< f:ɥ>ѼzʎΑ3Zj탦Ǝpfˠ7_>{ŗ|'_ٛ/|>^~՛cBHaA߾y%#(Ha( fRpy̷aB&7m 4"h~fXt0N/`ٽpa=_\\,\o/?nzNv6\;GKʼnޅѮn`m4 hi\wv͉i깰$vrs[b>(؝s-i % 'ݵ{ƁS޵fٰ\cTGf\\׺!2891vL8̹d"pMRb[$N +]˅}@߱[c+O.I*M(N)O76-4훆QrtU@cE3+A_[:\khli([^NNdr~X0$ K֛ܠ ~p/8EoAA PScDQtmp7oճ/Z, Ss9H%'b f0*IűbaBA x 6AM,b25fFg*BiD:YNPkޡ `8]|.H(T6UULtL Ǝ۝-S/,[Cǫ~wfڲ?-WoKc̡Űoؚ\\\h]o4̵w:z{׆wG3p N{ò=  8(_R8QW3\+%ر i$e4u:^0иgcemq/O{w~&.&_T?hG=WzX ⊓-d(= בx mѽp9+s &Ͱo2 lLt,.,4;zlK= ]ՎJGW@xDd9s6?zn-.)xop;3tvW@x 5'K]cdر:Pkj*L*E`:KߐoXjޝA\ǖ}܄nX `imĪ~>gl*m()IIHWɒx!'NN 34L&S(Ԋd4Y.щE* >Eԋ #Jd#<'$6 $"% D h3#08JP%:P/W ( NFDABI@\HF r3 22 3A`aiqkUpsLOco0([_S8t }Ӌ R/0ڱcZ3Q{K>uOw+ x]>8zc>u;" qɒwo~{vrjZ4\֕&x/:+eBsS`.Xcm)o+wU4;w:٦bǪ6':8 T>ǻsuI/f#3]Cu}(̘14uU-L \k 6u:?u4{0{d5Ogix>֩ce<("34MWP-MN(KAV&kԊ$Pb BA(QDEHvH$mZP x(@Ax4;"J+ LU  rF JlDq@"B$V.īTr%RUZ ӌ̂̂zcwmg{z|<~ixUI5_@ nQ+zcڜP;K'xq95(P@M htNpb:OMݬ1gomsafQjm-4ksk)ecSUYse޺偆#}ס2CKG|nO|NnvhӄSv;t<. +Ֆ̩|{wh۞i|Ɉ#/#u<{4tL.-`N<S{Ӄ:cwhSyOe~GYv[IvKQfsafkQ6XsaVC~zMvreFba"HEDȢ#(9haTE !8*a46 18 PMIBF$eIjUJ> Pb_ɄB"Dj$V*18L# 1qZM;UQ((ƚjSo@ib{vlLn^i Ƈžc(83˜ByWN,%;((>fd#/ k|%,]>X{mC+U e֖BscL]&[_9Q6r,m2s\jЍ0]̏=;uJ1hy[1Sp(]kp~`ݻ7vƛ+ͅɪ kgp˞i_,\.# axjN4 #ԡu 84ؙOn }㝶S7CWd{hsP}@miwEAkqV]NJUF"ٜP˒x!We,It- VH݆ efPw^x4x r`L%EbD Pq H'`<(HP4 @Ml*lCHgeBʙ6kqt4v0uncc͏v&_x@ӻc[G&n+C>}U{Nf<d3 :Y%YԹud`csVBl^n免wU/֭4ovOL#sK1uݐȀK%6 ܜJA.N=KLDr_d>P[m]C3؁`qԁ 'v'6áelwvl{fd4 i2 O.u- [,= 鞺ɶʱ沑ƒ֢ڬTmIbl~*[#KWIDX>[fʙLQ6*enSp &m@wnXp@@("P*?^&Ug\-X:ZN6͏= .~(͟hcqٶޭ\gAhN={ 0ЉyfY2,͸î$_PGNߜb?-i?ƒpܢEFznǏF{Zgu9f K ƞSfc@+r\2B8鏬`ovؖaP6ѳ<ڹ8nh6{fj&[ zʲ rj3u)qɱʼ8E^eXGd )z Qrq1l6`H3"&G˸|x׃~)d JN>B ( P>XBjDW]P@fd PtU:@,dtl]$Msnp1(? w wOu}8̄zq~;Ϲ /z=s {|:}f]]3߮WfHnrlzXޭ.&o7vsyed}i=Q@< ?uF8a̳-Ѳgr8~:ۻ3޺ԋhți76ͶwV8zk:O5 0';SNd~2~`ۙm1 o66'z7&zǻWG;Z־swB\6P2RS0X]VҜTIז$ueZD|yt 4lI(В 2P@ňqu@KKRP)\4 h@ td1P8Koqcz{6ѿ/?G&l۳ef{+}Q@@=.(9nN7)P# (Gs`Bӹ pp-w ^snE!X'|ק=-pw:#\t ʄ:ZroY\3XRo|{ipo*0ٻ*=ի#{3NRxE昝-@cylwz<@d88m` C&0p]g5̶VZ*euţy%%]řE-5*p98#(6I c1ya6  6+f,P*1I)1BJ$l/Q2P" "1 9&w"`'mL|BF9Kǰay^>8uEͥEΥ㹉hR_8n^ޙţ '{5I@ϞػGz.U$ÐOw4GhKr'|]ɦh{pn?;lw@"6MN{Xu9Z~瓤Yfn.6XZZ 偺^ulA+&2H688[gGgvf7 }k+)6X:kp7wT۪L-`3円馲rD]1 P'VVgJÈhaxbX8D## ܰHMDE rpZ( ē=)thRWHUb9 b$PIj5:phj,4( $rQ] =' ?u!7wI:Q!|?=M y< ae$/}}8 E,# s9h=?[18E`v} {&(8E;1XUp9XK]+ ֶ{gP:87axYd Hytwfp4o1l6z:A 8}ZK{5̈́Z+ e :k]uc{fr2M& <%!2P ($rfQ,# xh8"&ncW 0LV" rR V DF ŀv$( ]t.&FA.!-1iYY5eeMau*_7z71@1x1ߟC@{4! Hzߟ3.:wBLا@|8񺜾p鿽_/ ;2 d@H\ᔳ5ݺt.Vε"@fHR0@Dtcj $n48M<8hmLtmN}u`Uk騡h6;hk鬝l(ΎjQ|IIPby<!e` Ed ,DNT+Uz|VHTȱPBڔG͐B`i|ABL\"qީ`U[[\T[XU]=PW=պe9]Ov]'fzp]>忿_y|6PީYr+O4 @_QwA 8^աrju濹ĭ+]h 迹xwM@_^$?Ptٵ߭\FKXj8]  hGwcX޵Jnݬ[jT܊h=0 Gw z]ޗ ~buce=΅6`|\_HCiq:nj籴|$2\d" >ObI0C: F3,~S(7!ĿJKRkHh/$E G/QR'jbPhbcP 33KssuU5~g~su|}~ ?~hG[0u] Q@Yx_|@;O]r, ~gBo yc$ZwsO''ῡ#'hlZlƘɦhakjqԷ;(0!m@ VU,լ 7n:vx2a۴eu K3։ѣ4 h@LiQ!vNvw--;jҴ NSHёh~h$**N (&7,F (Æ _E|H&Ă_4u,?Vj!ذ4P( *-)@TYؗ^]WR\_TQQSU>?`xON1h!ԣD=zw.Mg, h%@4)P`!@@{ @W#&xo/nՃs+x@+7{܍3;IQ]@ 8r[{MD *tZ'N'"mf Yq㹱#+ipwv aAkaFJ㳒%BEtQDˁg\@ Q[ P@lRu \$Mj2LJauH#*P GPkg$iu $i¶R~uy8pwqpN{Qt!>H"CN ;yq~_ 0ۄv(Zp u X1x{- |Y+pS mt2p3"}W޳-uFj25b(F{wP@LCt]6XAt/n6L.S%,[/Ȁ Ams:pnol^xg@e rxn׃H G:3j3XR~-cDqJ"co"?IƜQs Fuw=GPO(Afy=0G5sh5#!Gߓ'!h@NdIc@<͹eéyP6X^LS@@_gϟ/x@v3Xcph^~˾@wF-xv<; |l=[MPbۆ |,pQpd۟A7am"1;%UAÌGG޼GFhx\Qx$ B؜ eaJ1G U^z:;AR|3>/W(1Z(c$ $E4$ @ RuN̬2@Awmղep}{uFy(CeO*JiLv vge HMD7+ lS;񺒦4 _W3#h櫗0 +DFiܐ0nxd`FPNh$v%pr.'F$HQ&gj_ˤ.8 @% ` ^HP**\A 1&$@mB:YUy]5 .IO+V@u(>p0H>\޾|FMp :@Ӏzxy?KF%sRLg ISs=?9o97`P=ֲ_Ak&k9\}m6.3UcD=[VjF4G+85xzx p%' ) gG00ٻ>5P֜*"㹬@@aK##A рnx A7-JXl)+iɅiəR)*B9w$($ I JsK;*zG:Z}1/ ~<:V@PYGJzpۀ0^- -z%t~!~M5}wdY@crWDT)N8C],<ـ5Uӕc ^-LޭN7<t hU@ Upx "|8w U0nG͎&zV;͕L fq9̗/hYT@  GF | >I( F3$,MW+J k rR(Pr>_-|F,A+A'H@zF={J;ʻk*;;_?* o;]}7OnS4@=x{Wo^LQN*D8@?{$(4xԕӏII|:4xw3衱gwmP`lȧV u9 hB NˀkqzIa}Eh'@u@ V:t @$Ns{iu%;5C̏gEŲ\phQX(<󂃥pvphԫ7w%*Yª̞XF"r>M$RLD$U9D '-V- Jzj*ۚ6s+Y{ڥAQ]JSGwwE^Зd&}$c{CE'aC72'Gp91ryH*| ũ}-U0VbH)I)M.M)K-O@m% ՠ v&F6Ǹkq Ƭgsam/P`6?0 9 @BВ`޽8p2 (\0̍OmO 'Jz SD>KÈa1xAoDɣ!}9aD$7$ P:P &2&#'>(8w#7%)AR 1>Q@ATdJKO%' SsRӊ3+ssAh/+髭2u-Zݮ3ϭ4}}}/?HHq}t7 ~WR@:S@ZP0 [ 8 O?&ck|;k@#*0 G``7y[ 0-fz@,T٣iđҤT8HB[WPDl߹mPn@<-hᲟ8ޣ`$ڈ  <@BH:ܮU;35ջ>m46f)bˎI"yoJ# 7oe`2WAHpƛQTPbkTɝ5eSNRn]*0@c%x\+W$(AScc㵩qip2SrSR22˳A(l2vm[#;S}p8'{)V.8h9ÉC2\?,Dˍ~DD4UEƒˍ$JEGةD]Pg[٦ t,}ع€ .7g|`~m~pj<  zWۭuS%}9yJQCP 1_BCoY^ C"_f e# ᑢ(qTd\Rk,^5 dFp~;q!p y;RbPŧŧh鉉YIɀҬ"@pcXkݲaƹ}y5/" <>%@=p{I\oXpCS8x]xhPw`k-3. W*888U۹݅8bv`q +p6ob}kС{o}zH_5RҟdCv8y):ʖj{.Ͳk#XrO[- )t8p9D,P\5E ̣8egi^+,*HXV$@& e~ \0Ytoo A0A J*h)+X.ȕs8dQ@%cA xD@ڸT@A, %6.9>AbbNrJ~ZzIVf}QA[yPchK}b(^ # p7 ! (uO-KDPtrh@* }7tE13 KOb>ǘIhO~'  }@ Ѐ!'}{γ6?U7(o-Otgvetevg@ }udT oOLY7 Kvp94( %Wb !ެ`ݒ?3&iL+xv::\" e<V6H(䭂b_޾e !5*RkS#%J.GK$j_H@)@ ˤ*N.KTb2b2 @0%d'% 33j +JkSCƍ?lB1_%X|Ibl"PR".>\:{)8#Ne!šgˏGdשC 4$t ৡw9Lsˠswcaj!"PHW*S5m)ꎴԘ P:1 @2pn0[q[-;y U?pvGgyva~:``ozP>(0TWeW&hрED,,D-sޛ7*"l, k!7o!̠`0~xDTpK+S%*.Gflj@% *@,E관x$p`"%tZ; ѥxr8lǏb`:^©M/L/N^7Qv]=n(RF f1x»1^3\ǎgz:FWk-tPБИ(Kk$ձJ 1Qڛa`(i:4tG^߯-0'˙/5.PFX|jPwp0!p hv-{g+* y`UT4,koY^ ~+R3"48 %Hcћ0#:Q*nhj+ΎD26W%3QA?uj82w}cXk }4S 4a79/_IBl#"^aFm: PrRܴ@b8TbW :"[KU+bԅڜԙ|]z.'%(=2'V UF}? Ic>`8x@ qȴ3?]@gǨs9ݥNIB`ˋykml'mC.Kemt.-*0x}M-(mJݪ*X_4NUd&zbAtʼnkcEZq[r ?A_]=r8݇-5gc]oo.xwԓYftb^qZNx8HZ:m :Su#y ҴflT<$ ŷAp^,I78(  ɆPܐ Q[m+21 rK'X,< U~rrRHM,hm(/N%&$\(m+/.n;Zy>خ䆁{LݻP~2QL<ƽgwtiЩat{pOb5Om] ]v_t]\sKS~8q5sTd;|N\|q:pWfy6 (88X[0厗 jb3c3;Ӂ 1B}>^ܨte'͵5{N,C9\_uoa_<$"U;&kf,.l82`P0Y[4R)->K̍g+Ã$9/G}F,4Xc0#W<; h??=ANB'Nå'$率 [x*-+i&qL穾~1u1Ỳ #(?W[ou=}O>vr6$2(眅( B"J  $!9猂\{1^cw2~5ל+Cxk#jbq[X}gki @ܩ8^ GH(v)2I="Zj*ZV.&$H;&#\ow+ԽCp Hl iiwtmv7G+9TդmVMQS$d|(˜_,|V9YG/ee*Ox22RFh播2A瓊IT*_\D(rD$NjNy ^װ0`LCF"iiWy~u{qbiß(ZD`'0:J J;h8\ $S; j]Orw@DASQ<\EnP'EF2zn:yVrxv I^aqм5j?8"yR~5}P5%hBA )qoxz; `Ճ$er~ $3 ^@$ XgIoQL FA)8Z|9OX y.2i *3j笴?}.*YB,,TU$<.fkxjAGɅrTZL,ѫ*:ZڬQז/3IXʧ3tTAH^SZd|;:g/GX)cגQwԵK#uS]ޚIn"7WhϦ˲<SPi%o_0 3e"ny1>'+;-8=2'韈E8vUye:%*ΡhZaQA.p8Fu^.+[ԵGۑ1P@̧PTu"!T`r|nup!n?+ iy;Q<"&lAH WX>f h/`N{C'skea2nZ#wѱH $PRF uNlķbmٶ0 XgxN9 zE.D+3PK4t8慬[ðt{97zj oGwX-f . Bg>NJČ5aI`;,"z(.S??(y*Ӝ/߼.z]%,W*yyoO,*{3< >Wdes=hs[yq v\TL-*Ɍ 8=tbc*=/19|?+{:/^~N+-VJwYY)}[3P##U6z!VM!4hb %l"àWKa`k}g}yrlĬ4%F)|Y  Lu~a-2vDpCf ooATn&bˁ|Ex${vseٮl9]cӉ{@̣2q9_ -N]E违\M;#Pb 5 RK D2-g1< PP\D 5 +SAK-ޜ,OmZ}vD̥R *I8*^oQ)+!*jsp' CSMpu8 ֓G_Y2Qpytoh~;sG59a{n~6ɸ} 2`,vkm-eo$'B`s)vw3￉.&껞AP{ݾoER_Чh O­ 7!a%_Fr=@)ieTuHuQS팭yٹ2S.& QYuX 1e CHVՒ9*$ P/a!|z[P|Yŧ7\PJRuByyVVazzIF0!Fi DN6(Jpg@#pŤR WS. V hXyn/NWG Ҩ44bA[}퐥yk7N&~YaU^`#|+ )Z_bsiyx6,=OpےM?^?Ѱԣ[7F> \MӞ{j{:9;=5ҝ٤p=뻙]z#Ç6e9bmcM-H> (KF"_FSqi.x6 @MTh*սr tꗆ<ݻ\A .fW7عBK^aXoQ1ҷ4ܵ0>2NX$8T.)A3RlNV~V _=-V*8ܧ'OrrR UlNICS8\#ˊr!+9kjd.<apyzdn֏y<2Ki(mǬFӍo)7BAX ak9d "I0h/##37r9Wsϊ˶84t<wl{=˃s=)käY5ntBW=q /(c'fFW#B(@A 8N^O(֓JVf'x%a놯ggo?8p>t @<߳)I4Uk@Aa2E;bT: n]P@"p 2$% =O{ZKQek`t"ˋyo^A@_H}c4q qsyKm^>B*8.SJ<;==޻<<뱘Wg$b@(h 5"an䷵]m-7UEW.k[YqRbg1zw[,kK `Kǘ$v[7[V{3ZQ~q~)r KiعjiS W׏x~e=E~;^ۦsu-kԆͪvT/E )-.[ZV<7rBō"QԡhrfXqobCGa%޳b1ѳi+(8^L7&jΥ7zʧD P *g*߼{8/@z*(TiD/Wf|˗ׯP ä -/o1 3)FU5D#TKE!pkc*r*G8,5KW6֛(Ca5"[  r\L9&N&z}]ۮ>p`M1m]y;CQJlEU!q;?~v5T~nuVRm(j% mk_Xo SY5aTd#Z^h fx3n ާ4ާ/iڪ!OJV*W]D*A%F* SqԲM`:oZuulb4-69rG'&(Xok[qu- X&;)I0fRy :I(i&.Pe|@$ëgi _~8TeTLE}Pxcz/-چP Qœ}}Aċ4[[+F*.DtZľ>;\^X>1鵳 !!yTT)Y zK㮠7~w?J5sx ԉt5n -|E-fc ' Wv^L ece8kU lgF`|u/؜IXGs:3b3FLausmi]n0֎5w[@VJU%Yʢ,.S].˪/U h&9wJ"&z%H3ʮrS'oSM4. 7}=A29Iq$lzS`icat"`fX% }*~&b( hUJ|xi/|\i9O~rrBMQ0Hչ_2?O杅͕"/$QU|E-TlT w'sqcqQ@sHD<%X`7f'ށOP kS,.X:! 񵉛Q, FA\N$8펴#Ih^Z@l7ٮ=7iBbkṁ[tuwg-6Bi6jj1v4N&ʱ&QI105ViQh̅.Ϯe >*>7T%Բ̪V6z$ԁz(;.+؄ci#?0.L M ;Fuoϲca:c7M4$ojQ@-~GIb@^U@&|~{s`!*7 B0%߃0`UUdg*(ʬ y!r<%㰻db-whd7*XEuǮϓ{h0<6&b2<*BŨQ;F?z@ P|8ZCG{lr3_ VƯ|7T\E}Ә5:@x냦%~Kԣx;/'@ 5u j1B(ȃ=oφkսmX͚`C+6rIJRY#f~ZRD,UP1YS<>XN䀣RS೶.'O(**>xl\%bwᐶN` Yb4MRAQ3Ӻԟ(V2u#9FۉeatCpPBՀ$# 2|? 9_ǖm}yWlmCs{`'gP_&@l$PMtr~6X.HcYWJ/cEd Xʁ /zR=T#7T嫫5BMMXO5SPFE ̮nT[8x o (ZG'3)@D[7F:6q>,^ lm{7|6@cq2h3NvT$o崋f!62jԔ:BImu"WIX1G_=eek5rbK6׊>>}X*(=d=x{qrRh%c<*G ٺJeeMQ~౒˳Dbd*HuԊF.[S[EΫeaΫW˿h[+-P|*MuJJȸ"VU'f (ӓcpG"x.@af ׹;(DM@sh9jVM%Ut7xxP{0(H!q،XCcр8t]mF@@PF5:9 Vݘ^4pn>*3̨jU@i2 M)@ĥ>xb  0aP`!t IbJ6b_tnKkZ4k5oĆ1Pk`5Xv$hu"`v\ 3LTA+&`B/U+ Eǿe?}TI'_3ӫ@A{!F)*ΰAퟟ@X5$WM*eB(*D<}`pggsdjS}PA92lFk ޽TKa\XԦxlmn |Id0{0awx[p~y<FEԩ? 4*FfaI5Bжg 4-uSh̫+BS^͛ejkߢ@ d@H"rb) N:ݭ+C-k.˺nvB{:6GR)KNPHpPn( +* 7#Ye8(ǯ9/z2 {5O?-]YUŗτn. ֨ȤZX\,emfcI~84ltr&S@!Hx6P@sj!A=>Z>T{h ^PpTj (2qPp9>@h`${5_VlmЍf2dM8FT!˹DtN4o7DL~ IifoִUFFZD)mK iD9$p$)6pYu^dEh썋(i4ܺjXvWݖu w  {'{)UPg+e TA-@ *yǧ_޾NUG.od8d\P뒏+23_.I/F>1wwnK)h2N"cj}}|{qtv(XmVՉpT (`.Cd: P_q= {k PgTmajs9::?)ۮf7 x!j57zS}TwSԵ P_Da!l}uoz:֜a놫su5-j_lPŵBO4+R'Zy P)* xx @RQn~K=g ƥ!ӊ hж4GMaWIХ -uZ^6 mBj P,̓Wr3O/YO~y{FCiWK_{* @AW Ooy 8>r|RV갶9{VG{x,:ﴊd!W@(y&)fT,FV1 ?P CA: C@p 8ѡ;Pz in9]N@ Iy"Ai_=e ~ǽy^!ME"|P_>gxQ]nZZBRdiDPKJՕVjU9De';'BcmB9$:MN#|f84휷aZg@NOE.&wH)$@80XV P0֢Lv t),8  9)ҍ8l` ZA6$p] Lfhx§tViL.. 0?ӆ?z?-X9Bv`);oN 0S(.W' #F(NA# وє/Dw|K$>8#ı 񍩻ыTp6徜V&ќ4 LjՍ(F؏ZhP-PT>%4lT|GACjްn$~4`VuS]6HaW1c6M4Fu), 2PRÔ*h4*T2T"GP.,| P_po _>)\E,kP& &SۗYp|cly6rvt*5JeLX#G NQ@DJF ߢQ_(QZVh4o{t {1*8I08w .\_lm"66!E;UĎ q'h>R eVRѱ$6gbˡB 8G7X=F`@;V]؛!;Aw@=0|w)0@tdUnW6  M?8(Mv肖U0bT|GAguX HM,VQG.MAY<97/ ˟@xU鍎GA@V*j}H+Hmj&N$HSɴ"ZY)rڲ8;=Z^oŮ/-#R85|Ab(>=;ދÿlE?J$P2~y8Es;SI@ R Ϧ\@ j~~i<ZO?L9AɃTCݥdjb1.#}4pu=.N-SsS)Aov/ a]P;|>A2@^@Wa*`gH =z i R kMw릺Nmت 5G2=\@PkQW E~i&mPV1MN.g~$e^QKĵu*m ++| XD#q3՛S?7~dWC5*6(svvYmíK$wܴ}9<:ߙJlGHUyKl_;,\-/3c4@/7sXl%Xō4i%(i{~c6 B>ob]]I-B#̦c gS͑ak<*xSujjSb XÁz6f1`{4V`$ jJN)e~GQB2P/ba/J/ rFN7r):ze YK{-csr,'g7Wq,8<pZIiWG77+^+4 O‹zת_>;;='~\N!_'ܴf`17.'n"Up2z4ż3:p_AiŴ`5GmOBI 0]FꅙۅYլzwM{0B0^46+)ah^0XRJCP2{k) 8|w$(<<Bz쯨( |&I ( n9ChP[x׫%B\& ^=M2~s˧/|02USKVr2^޿1gB#8ں'n#դBveP۞ m^_*X|q2\cHx>r$FHVj|ssuqv7]GZ3 @C&aIˣVp9~.Up:z]]/zs>BоP ]̺.ۥ p|5[&צW" iྯpq4vQoÁyyr]N͏ΎL/&=#wü۲`3wY[L~K7=dmUc ݍ&['F7J n D|QJ!~A*` XT)5 "0YB\& (ëϿo^yǤ̷؍f@BVTP5.èX<;toSSbTX& B|y`lsl3͍Mx5 Jr%ol 1*y{pKڏ&AlGkcw@K hז}׹vlx׽֝Hbw8N𖿋A=מk{Ѷ[Ӓ>YÑHߪuL ڐ.hPB[Bm a"ҡlZ[F>(Ay`jY@)GAJ!e^% FI8" Z)`(uֺ rܬDR^J bF+UjJy(e ؅yo_d=5_߾~+$!X5bIƴԉ2?xW<}Y"~s:zRR@.ȶE@ES/"W >Zet#ށ㝣 0q l; 'F*sܙJlѻe(/fuox,.`BoL7hT6:h9@M=g޳)/FƆFv]k΍Ra84mʹ"-갱~UizM1M tN䫗xE>ԯzcz_/3Ԏ&O/֊\!(@ et@)vJi]2Z-ֱa-/% v<8L)f8H(0HVVXK'4K8ӣק}pz\^dPq SqɸMV]P!8JuyfFO"jUwsft*qO'CAzMUeV&0V6鄔{8Cl{Z_'&԰Ej,gdlVWV7WPG;t!Hr=  ,]p& $`|#.p'ÀmcAP`h9z ݣ~O!?ǪG6Ԕ@҃kFDz~Q׀PTbOȫ;ea)w@JM"rUKMi+Jl#TtӉ>G=JM2=MrRG,Sq,꧴T{$}Rq&^U$`KI*Ԧ ʠnU9fR|GZ  PPP*HK~L ygߩlfTW}[SˢIiqjI*)ɦw4S-V?[ingUsj9,kyY0y}}q%~{$vC*yu8n$_wgnM} '7񻕑EL Quy7tԅLn^ymtmiVm'ѧj\^ jP.kcQ['kP 8:l }MS=ey/w2 mx]}>ވ{׶nj} _.jkw}sR +Rc &7C#xOx"yZ69<^=|{cƓ?(B}+o?~%_T˿/תǿoo^WתmX'5KK%Fa0  P-Q5^Jղl2fjiubP)> >U}|oQ,7ƛy=Ӈvre:p;U9:pXEw@wilqRNuF2fLk%Qwx >AšZD]X?43 ;B|{:1_ Nn)O:_dž lºņ׺?{q^/Ǝ]}4滛|U8x:t]۲7m+]֦ZL8ȢuT)>:NQHtJ/<;>Ep0iMb DEYCA~mV79 3hoqH/~||)yWh31+xtE. u[9uaI* 40+Q(&wUg`.)8@,S[Qry/g?t(8{uz,v{M'>+HoUzwF=m˖۲:< ѱ=> ||lmlr*9 ^ofng.CM8x?Çۊe͸޶d5wvn,[ږ-%iyںn̵4/MamèRjwXJEmc(5FBE]qѦU\oNrIZ^8SL%_]d#{~?L[~O3vm~5N-7;l! ag 8(V1}h#j&3}xۙ_N77_{0_7ޗ꽥 Jmsuob~'jU0pj\(,L$geZש|F/Uq4ݍޡ=55t43p'wbaQg3؁bgS8UQ(ڥŽڭ PPj7[(HY,n& pQh⍡0d.2$$I1ifX׸՛&{up 5+^ <^tjvGt]6gRj܈L1o^й-/(g'ţ^s_OڋW^~B{~xϝzʭQqI `=p7ߞmM c! @4'>$ #Q0 }ij/FmߗOÉހN~T#ʾ{o5UZU+j5S*z߼*ܵ{RHRT^86q7G_|7Hly EU4);;:5n UR8]7:mDջ__Ѡ3\rf>钛g"@Aɭ@ O[E=Ot.of.1("FQ+3V{WQnWe3g4J'eŒi ^7JUL!O"׫|Sskݶ Io_l3xdk[dLhB2 _l.fH,\͚1 &c1|IBTA^D{m\lw3xwa_?|?W~샧Q/w/?x׏,B谚{'>L9@TQɇ&?,um.֯B^|VFDvD;( *yPjnUʙi4mU\Q2A\*Ia1ͥbQ+ DA Tp^p+U*\I3&iB/I$i4' ADʋ$q,oe !kesNR* ]GIroO#u}Ѹ0@6'}{y+n[{۳'}/z~<{|q23|5h[Ovnq-nrH~wm/}H&G_oX~oϾ@?Kϕk(3HIE/A=JBXڲE&2el˩D-W jR2T@mjKÕiS+" `N訂HU5\qo-h 4ҬCD *wRҍFf,RAR3IJ/Nha/H0s:UT.$p}ysyxv;kΝuƊum0;UO'CDD#݂.;{x7o|KDC/φ_<{ś|KP Y(Va? J li6GڭQaVKtiЀ?w>s2hkgFw/vod1iPTUZpKF(T ^J!v{{jle!`5KF@WHQB[ .qu--O[Uv6\TP#EL193~z>$M|z<Qv*^<t=%ђJu.u4'D1/%t^CJ6(&UB'iQ9{wšd˶bY^à|_>3 NI&{E=wܑ(^8}_N\L@PLp` xf=NWKʐlyX\ZAP4@ DGE҆$sXryBMQ=/> 8w Nr{]?NmܜNKEyoδ=mXЬ!^lx=h`bw|-t3 `xlWPXP,D"I 7,bDc&pe1 lР`Ӊݡ!9I&|V+g A=qR![gbE-ԞG<9ЈYƬM.Ȇ3TKchGW0`3s׈+<&82" Leͧ%W7jH%+t(j i8#vse֤acܸ9q3i936tk#ڕ! \ }0%3 p`-=NG_Õ; ( Nu/I+!RAXX'f \t@4XV m0XEM˨hi??x>w:s:s:<=T,\ L:^[]LGBo!#Ne+f}!ID~ # l"ժZPtq]gÁ|<|G茿p)>Ջ }Hxe\Jr2Р] yT @Sb(RlrkA NQCT_#<[^L7T01z]©.[!xìl]?sۋ7(F^ O[@ `=x- { 0`0>\IG$+#Ұ`qb~7ϝlNDGĝ٨ΥzIm }0H6/fj8[T\jT1(,V"^N6+j!{pY УAAgUI|jE .5|k,((@@Mr ZC"Y@ڠ 2 c<[G#ʠ`}bsB>!YM\r*n*}7pj-LS`>$bbOLO @a#@  XKDb&J>,S4]m^t_7>jdjSk%ZW +wW%S~K (yTe!i(qŏ΃P>bqhڝnh3tp $Hz/N F^ Lg<{K/ X1 ` `1 RL0D< ԛ㪭)zgF3ڞQiW+g"#6;{omI|* \M3=Tq킍`J*w,]FI=yKgthSjTt)Cbո.Q)0fs@Y(@4hqTA::I[鮇a;]_Oc!sp𼆉aa&5hx#A@ e1_c>I WrCB; (@P6,cF;3YpAt}ᒞr>w>8a7r)QQɀ ȥR8k<ӏ~lZj @t|<ٟ~9tkݢ™|S]|- @f`!ܳ`CI0(XRG՛c nohdli*%~kmbjBIW+ d>F߃5tN"g:uTV FRt Oc1 0fFsT1NNJV.KŢG'(`҆2T` ރil@ʜxO.bAqp' 6n%ɂhv<髽)B>LB27!0IeE"ٵBVlOѮ>EY>@yEv80e:Z5mZyn޽_7|؝][L @^. JJ`">[6:wƟD+%[E rR #U@Pb CJ#`@PPlEΎڞ $QiDs4HwoEދu4 @+; Wqָv}DasD*J)6!@nOQ2, 65;S٫EٺCV>DbБTX4E*Hc1\)455IO;ύ6 EXKT (@J2\I/sU   y(yKtےj%RhpOca@l >Kvo[@2D_WEEOF6&Uk2Q`K~nդ)5:=.&H:~CTVUbQE@P@VS@ӟ& p<EdB ןug!уtp'ޅ+wd/ 6=Jh`|0Lm @'R"/p-D6ȦYF:L$,nWrȞrr^]D%L~ }? :O ,=tDU Jhai$OQT"+h]х C'%EmtZUPA(ȣIʶE-?$BA>_)o,"y+܋! ps-J_DD́xGa |y/;Hnŀovh?[rLm[ hB`xcl__ :@4 C:=?:]unƩ]{["˹J _5mSI T-khJ%J8Sh[+Un4t9EBH$= tBeΥD4`$tg!dz*zAJS| 'vFg)YdLAnBzT!N3j Vd*/74t5K$I7w1+P3*t92V#/gAór.YF^(J& L`QP$[8ez u׼G[r%)0JAAAg|jOCQTdɻZH|=y ]Jӥ$ULR4UNW*"%%sK'o褋N88Ј\CeN@Iρ*(^e Pet>@`ZF/}ɥf`J,YE ELpOpsWKiZikLN0\W.a~ `j dA.y|GܯBTÆ]s(w6FJ'a/TEcw9jz!J!g#ᣳbYJ gڛs*C}ᾘ@d`V<@ ApQqQQK#| jƜGqHNA thQ@#Tou)xU$@@ }4koy-@hWJE1rfRȚE(hOC mSRdY3K}^0%xjKq5vwn`Dw.+׆5c EکɸuNɑgXw 6,VRQ;r!ޤj# :,>X Z6 Xf*FBGElʆ\EA0hPJL,^;@(p6bv:f8KKY< hsn9$ pYrbƎ5V=[[Uo0 슬Yrג2W¼Y Nê{~@opjd#@@E\( @B (FHr{ի *4/^qVwz~ceɒl_Hv:N._U# Dj5L<\Ԩ~ss8Q Z,dI7x7QД/PDm$d\~щ:UJ^Q-a^$]# Y $y G 5%U `aOe;;ஹWg+daP`jq#z`౾OP80E Rh2nwĀ$9ί81.v {y'o+.', :;s &Ջqp΁$x+ ~ʏ"Ӡ(] )Ұq3@(0kHavlUI3@ l# }٭S`Gv o~$E(H/@ [ dqa=\L6F5+DS" 0oG/P jpS5g.ؽsfYRd<^RmMۓݩ  >}#~C׋xӸXM5lН=L|s<{Oe hLT'l@yX'B5/JM 訽+%  *HX@vU@UE ƚA (슂EJ8 i՜ ܄KCOus9h;M0g7|c$(?@; p`uH>ܟ~كQ|8UmO)(Q8~|yE!-'<::q\o"nR Wᛔs=@('ɔOx9@8]ӥ$=K**w$~g(y5(e[kz5%yJ8-PZvJ%`;s @15'(?l!w8a?Z\„3X @@Ph0Ztx-)*#ڰ1sGzPs\gE1*Y/ (˃ | l#܌h8Y43j2=Rg[OPPoZIGcs?BY}3sm9d^B.Q!7f%A#pIP@AXhvI>]dt+I2i^;W=K]v$@QE~@H\ D3P$OQ߉w-HPD \n +dѐ>U(hwdKr_: 7}ulm^Xx;it|c#D(`E~ aC?r~fRGgjBßAQX#A-%SStP@#0 +:rҠ`dQP (t4mdSh5@Ck^J2^1,PPjͨ?K@Az|` t_P-VHS] @ @8 l\]AFև[b'sduT8 "0Kt |'ގNq)k :3 u0 RNUX9@ w P@lg !PàW  .1 )Fˌ+7& Q @ }%`Ib$ e@bYv/ڏA\N7ǴCB/I `os%X0}ϴFYA@*XwzSߟ. g=\ԢQj$;`1 v"]Vyz}3> EQ\٤:5Qf>HB] @B$tʏ  _3i& $`%聝qᬕzdxiP8s1߶gq|+(p*j{- ÁEU Q:ilM|(@Y^~*Ǖwx߁% qw3$(hF5484p 9sBJYdkaďɞD L!ل@Hdv8o=ޝf^7μ192v1ІDffgt!ؾUrl[)bto o䛋'ca@:SyW6e<خag|Au 2UP( ?$ HP)4(HDOpo!ToWs)I%YȮlrtR|$gfEdOALǠp<[q.;8K֣y,prk` $Ġ'WtN'D3Jzcذ7i Gv|}.ZMN9zs>|ww%w w ز ȡWv_1r +H3Zkz! +:{ CAZ `LMsЃQ—I%$nƜtFE, PGP@WGUJ36DڂSfIZ4 ?fuYTwVsxt/]lFkUj7mܞЯֆ˃tT e]X* ,1OVcx~)]v_/F_;S`T#˃)ʃ(ruQ [Z 3>Ϡq]@ǯG]([ Fl(7H !J@8pޠ@ߢcLBYG(`9$]P!5"ĵ(e$bKAp7]D !iX{Rd-g |s3W{ӨڈfeH|`?)b>5 u0@TjA]y.ў|]2t>n|9j=aE@Qʵ!֨p] *Nbq~bgbg| ȾTF})P-2(`rG =P(D7sQ1g3|BAԞ"`, ȶ6wc¨D3  b '#hhYd;Ya_0NP,$( ;؂Ctꀺ2(> rl]Wlx]x/Άyq:$ hx憿q8J-M;3>KiF)ߛPxDAh RT?H,A Ap 8o|8E6$l K^,딃;^ Ƌs^x7!yX iσi@q|+? @!|=7} 6Fa.4u0Cam N{e ,߰b}X;qy[RoMߟOvqK 8B . mA6ۙ0%;@Mt̙Iv7f!(h?&@(9ТA4l1m ( `#R6q,\;Ń뽆ܫN#Ozy!Dᶋ8[/\̚@ ^v&u1 βV2<#epdڈ I-xN3.Z=xs e )JbzrG(Xa, TgXI7αybAw)N.- |ˁVTqk(hZ+APϦ% G@ 0 ȯ8Hwo$;>ٞ_z%7]`r6\pupWKׇs#LiEd7gO17 87ߞ`Up{Wk_֬hBchgB2,={u s'~8~GA '{^*%MtxY :_9ZNiT6T]4b*&\i0d(&[I.2অ7xPH" uQ+AN^H*j@[CꝾ e|@V.y!MXQEH's7+b[AFd>Y48>#@؝1SX9@$QJ5x+cpU!񏾅:l@ L/r'ޜ挾:~~< ?;gGpDWro90|Lpx[ԧל~<h!F ?[F? C?"+>`dGү:HvVQ%hnsrfj2dҍJnw^bwk"0( 3LE4VbMI&U 2=KP^(?8Gp +`Xm(ל7mprty<ݛPn7Ga lHwdDַ |%K 8._ yMPh0a߷*@?Av(V[9l/RQ<iv?錟c0(ZʠQ+rK_ Z*bcā , hL!FA&CsbT?`{ǁ!pp . (>B{ %AA@uDьfwP.[2 ['[T$'7@ Cȗ n{[k$^+_V}8=wm!G2 a #/Q @P.4L1g֟w0HRYTEn׃ *sa%n8BӦDh0uD6M;AA@AK)8v'(Uxn񦃿Fn$jcD:}-y'f/ýWO0y'Bb o5w$Hy9E '?8zv8;~G c $A0E~gYSn/A5n3C{ubn9+Ywj2 =Rj P1ib8x9,tDNJ4"@T1:^\g "M! HٽH|)<[=TP/4f:j":3ވn mbBzw31݌+sNVeM{'߿q|h:3(ׇX`&}eL0eB %q/~L#+" [Uv!=u)IΗj?t@o_~L&@ժ!^=PI> Dg - pI!%Y3BAFࣧ`=(KPA@iI!ؼ** A ! h .ѦSNѬao<Q f0 &>BG?Sup|$ @uK |Ҁ_|CP $m4{P>4R )StFKBorMQ@TAK {iT&7$mnϠ֓6) 6*+::ho?۴%n)2md :l1+;НSaL( ?DTSQ+#A)| P?C?~1tfJ k%ܰs_W5TЋ>-+ `@4d!ǨH}tؔ4rN9ߛt  -Tc~@*}"9c n.- "A2&?dP=Vr.4/-$px6ǣvFk!8 }bσQa2[!J?FC:$N:xV@ԇ80$oK?]Dho*Ҿz~h:GK ~n@@L}%_I,kׇ/&aq"* h7_O_1dň&-<\KT@ZTd y@ˣBJr|VTTA֑(mFI?c7M(@M FĢk* @4Qڥ@ `{C!9Yj8:M-Z _1ОhvUV'MHT *0ϖn%;!a~{I3/ٿl9 Q.ed'q9B @P ]ֿLF\f3DLUFLQKbsZUqzmhaH uK9qюwƒO. T<`= t&YyR_@Y)Cg(÷@E[첔U5@6H'[ZGo"YzsT2n5i-)-@FsF~<~v pl4`leE&H ڳAQ`ܝr\[fHu\tCE+YD(DĮW~لԁP *РR?@Rj-+'X PPE7v!S~`WB6>A7hP/&  B@ѯK;УhO^[,!: ''iC ϧ, ps|F6XrW̜˃8)7"B7l%giAv4th5. p5m+,lqK$c&S A؛>̻o%[ih$ɦtN9"c~q_s7x ʹ\n$EzTdRxZ>¢enO0m ŌAO;, *R6 DI! AK0n9:r%HZELO^3 QB @A*>hQ;tɎ[(/ L6@-y EN;dGB%A[1Q_`; X@mi߳ю; v'.,'3 ? *ox+)Rгӕ|%jIכYb^z__d˙LTBuA (ZgӥD,d#|2]-_| sRp ,Ir3yKAkfhm(@H& u Ns\TV](x4E)4eJ5[`ZA3GZlѨNe1 &m,8-5Bm0V,Lθf7/Hz)\LNG_fD33[+( 7~g+ T#5kCQl'Hu+gΰ=*|+|a4(WKbTi/&TVb _V'H$XPE,2RF!m~I)PI; Z ]c0mN[(aETC"F6()Px 9 LOS_oO|$ x%W ˈVd=z֡@(HV#h ¢E6 FFtT'FpU a ؊Ѐ@π¡ (HDU3 lb @AHFٶ k Tchp0UІw<|Y[BNi#dOPо.pڰ'KD: Dfcд7a9^Nw$>|wfBfe֑ F.v_ɺ endstream endobj 788 0 obj 95159 endobj 789 0 obj << /Type /XObject /Subtype /Image /Width 308 /Height 231 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 790 0 R /Filter /FlateDecode >> stream x@[λNnܽn]Y'ֵ]vURN @1  @B .G$@P{4y~2=!B$)&%_;*fؔVfs?k7j56͌~V:$A:P/WiD&UVgɩtJz2!58]P',=엺W|a7}4H4Ϳuǘ&0C)0W.EU>Vki&u~6A= tS85c\hffBhwKgg[wk@uC7=/AOOgg0S3R"/Ͼ;v}}/lNSR?6a^"1`MlTN/1ly9 l.R$#\w]|(`Ll^!AQ^MӌM=HgԊl·ȭNqy:4nW9 R-ĐhLh ZV̈œ,&[U_1VSMO&S$2=@&9 IuZzc9pߜY77S9ٽb#X,.!ӯ"-/k1M4ZRYd~LT*fikV+MT^r59x-YЊYQysa똂JXeRфnhoTWfTfeq$LTQW''Gy&c< AbBb"GX?#H723)=1ĉJ J\fĐbFlZBGNL5hXG`bBoiJ B AVQ5 N ͇ĦFnђ&a[d߸|lF;499F?4-E`{&g_G6pƖ !fxQyy143)YȧiOMc}dmhW>ru-:VUr }:r64%]ie[y^ؼ,s.|M˄Ad3"~oegiQ{.|j+awadMşc\${Pb!d\$)2*&4 m~邳whB~oVi!C`Et#ʎֱ-=,,&48"eg?WDg}@r}aPLruӸ ja Z/AB^xyCGOEKԴ!cY Ohz[GG%jf:<75=_9 BPC6cqظX|DHO``|6?٣:XeC:?dГoj#8bU^502 AƠczV!͚Ǖ&%OesVGMS kX1! 5Anocz>#ȋ{"m>ڽaipx1婸"FU&5'9>O%BAP 0 ]j,mmwolx8( i`P0(@TV1X͟U'8:`,Mh4*Hoʽ=2cÑQI ڔtTO%Dn J%(g:{]oqZsf"VoNiliD,$hfrtr?V ݄<Œ4@c"lslJQ(E]M?ub}fH(`&hbǘf1aX3|ejfzs^YWH?/:陗-%pR%)̄X6O '}DW&ܑds[…[Z;[/7C&ζ%`A O&-hȉfG C -$dZ5 "~.z*AЄRʬ/LFSl?iߩYݾ^y=gy=|NV7_;Qs At2NkfǤrnyEMSLb }MSR44hw? Vz[i&(!.yē1NXT^3*14xd=/>gvNZϜj^?bR$ 4 5#0,3 L >qÖ v{7m^c,k@n"%PID"58X >vᮭN֋c{>M:٢D(qgSH-3G6fLZ |BEtS'e,?a$ӓҘT[\靊+8)Ď͈c&FВ1D?|H!'^ =wY?!yCٵ~X`qdVk0O%<_DyfY\KEIofbvӃ&4Rxâ䰒Yi4jK@PQT@)fZz*k{ZŲYCrDR|9+k[7rGyRLv5{0Wӣ_S 2-ݱa]6}릻6mkݷ9G,:x$^[-fGн%&B2H /,o(WhfoVu / 9):r0冎YŒ5&Vvj\.D`46hL-"MTy]-\ + +ѥIsHhiЪ?z3[i,-S:@r/!oY: T g _jʋ;uǰɅ1t\>r6㛠ӯz(? eU_:2:ࣵ'oC piT^}:ղ̷ؤcfźX9 Yt*)fS,3׶uNMIjX,S2P'5zN%))!ְSbZЪ-ZX1H9D=e4u4#߆mp wltnݲiOϯ/RhV @hb)΋6 s;I^q|2.qh~ltf$|R?UaʎvҎo9i4hf79S|;7]h3-/asA|,rgE+ifgS. y|B*l^A+\`PtyMؤŵr: 4ؔuF#ԗL'dGGBՆ}}Cv̥$''-u-i԰owZnAÒe;X=bqye7VL{ e؞'n:deۃXuE O,E)ߐ1b)O)0Idz$ě-JM,JMfgr٥ee 3j8憖ֱq^pZ@ :>4ԛ=UG.Km+.A,7 YBF/6؄ Oen[ܱm[y5N'OM\N27B0<&U"?dz>sPiu:ZPɇyo ПJy`R.6w-F: }~J!T)fT66Wqbu7qvbv+Ҭ&j@ ֨@||hfMP$ObO~]}sz{iFdy~LOBI.oބqMWZ it"Ww,C[=h2bUE7kNl>`eћ$J:Erc]"\hTeZKX&#/?AMSYNAJ8.Ѱ9]rȇvyx2\ EgdV 'Fyc"$f!CI_:?u7rmuw cGk ^ up318jdP(muĪe{IM+dtdTTtuvv7:54H*| n?IK'e : S=H]_fS1Jr ogj gǚ+FAG/DoqxwM6ft+ !uvZq'n'kZ>- xقek1[n{!g-6듛-[7k)^PI{:#+5! EΣf'G%bѡQ~O)E準ʜVUfxɛJ:qQ/3HtZnZFynIMqucUwSHs˨hD5%ֈ'3Rt!b\"~ GU#i[޻a?v+>ksœ"4Sf`s6u:]Wga*Y"?{:apXXL$E9 V+h{~$~ʃ#;zitSvzvʘDL 2a!}>t 144et_al.iR6 aV%3ʰi24ͺd44 .WdseNu*s]=+ĘZ E5MC)ӤU؄#IYqĮi Aä:gl8CˢU FSME#%)}q^iQ'rb.ԧEƵ* RZT-2.~/W+w1Z>XU̗!/[>f CVZ=nK,,}Zz_ !ȁBx'Dc"Bq)MAT hI)yLfi~VTK%:ru@iKNIP1QXZ\l:̫(im혘( QB ^fĚ1(drXk!ANNO=>;?_0[Xld4ACݻCu#܎檖NCaS!-S]k K~-qLpT5床jADa$fgQj3;`h15ﱜ3 Ө+M,ˆMCl(J>/uj&i204 ^Q+zV^e滂fWYf:+ڿ9D~TJlF*ԈЛ:"(5Rf'h7$uk I\r_CJO#ZU&:drڼocׅ}dUޏu{ %7Ox>f}V/!Jw߽7ȫ:^,ǸGAP'| ' _'RaZ)*d9L|3!fD ԔR @{bSƾڲ.VF1&@ONdPr $RPg& %q̄\"V SE&7k5z uM֕7Vs* +Z85%ٜ`(Uڍ CwumeCt=03} JzpT 1|-he溰2^jmn;g/Zb=>,ĥYĄT|ˑ/~>?Ҙt~;Kٜ6ą0: DzQ7&`ki`&dͦ\ڽyi:ͬT" C].̬ wlR'Pֱ'K(nF4QS&, v tudv5etr$jR~6yu;Q[Xw[DeE{-^xQOQK,pnI:zұ!Ǟپa^nîK_F9|{dDu@%e Bif"77&d'HLjCUN:b1*HeE`0~@<6>)1/_2DGU0yPu^!Ƥqp|\0>&Ic3c©qH7o~[@hMuSȗQDsB?ӡ,ɥ 1ueNNZ.-O I>%s$ow3nX3-G w$mGLgsس/F&|!PUCjWs(ɩim54ȣg&ҸkG#&ulj&i: *̡ie2&B\ʚtM6 BLi`ҵeWΰٝZVWUTԕִ6t O(Rȓv5*YDݧ.k$vq `9]<ؖoh]h{K>7EJ8P~}QGߞᱰoaF8qa_l ]|% ;m ki؋_bEK Dː q#qdr;%(;(KBJL'Tw ںJJⰑa~a^^oHߠذS)Nh _aZ%3!AOHh7:>4)O%cIᤈ?1=PWu@6Haöb'::9NˌflЋe1[jըG5 Z=J@@ld<rXM ”xv'>Mza3K>N=1].>TjG *5Z@#s$B%b!JO'}ZXr`cX+YJ)51we ͥljy!!d L@WceWHs0a]F 󴏙\5Ê T42aN 8B9#qON>!^؛hMÞ8ݘal>aa{#>ߋu*0o1'3se.@=XӔ6W^)K$6-8'$?SHLooiٜV{x|~=g:t$<\}s%w{;3rlCDK%R>1TZ?Z]֍jgtKE6.lƥϘ\jcwP ll"?֊2VBJeʋ *; *D#y̡>GY26X5:\;ί Վ 669~OQo\K5Sz}~߯L_hݿ&}nGoaϼ$ɗ9 fEIh?οb.a+{8׃1>gJ d:o|&ǓY&V]ZN-).*DVjuaӐU t F%9}JPickӍ:J茐7<%JS23abxtjrdbjRVi +)湄E<,3XsSKJģH;,H"8Ɍ=ee Sc JRb"zD![H'a#s,w !rdr,3MK*-dMK[XW:Shu*S4\=PЌts qu rw X)鍥u.8z|Β7t+4dR1/qJ8"̢evZ)CVh 2mTf+7VBka7ɯh)*o/(L$QcX N6PB (8j -ƕH`&z2)8nF\EvlK[l/IiVgaX+Uf1 Ftfz*ML&]tr pqǸz|B𑔌:N_9,ްC׈o/Tj`|B"zFxoD ɧӠwZSmaN"d{Œ٦"/cIQdN6ۢ4H!ɜNQ*$yOd<]DG}o^&?WVH}.6~n^mch{pw5O>hN#TrsAC 9bI3rt|FٕmJ3ol3Й+&` J!t^PڤqIgelVZ-Z WcӬ@oڧ|:F>;;%9m`0n_H"hԘiLܩEˇ6J:k Wɗ\%K z>iE.۬ݟ :-s]~qsa{پ{a]QN#}F8}(Hׯ=?:Gy=M8ʯո8zrv?882!⏈G$RD;|k;-0h!eK$ٗAp=.]Sb&{aR[ekI G 9ȍ]18$^qtEn>!䡄?jA knM~_@gVokjg,kG$~fV1>v{i套n :VHL* 1Dc8wc?~En?|^~i쥯~L=N =O\G830ZkYzIс.1nnn.{xDD&iDδd /"T9m+*++ii@NQFubn: =CF<-ija@@  !@˩np.uE>Qb-M-ؗXN)p7/ԗ+N㍘p5m%~"'J 71ҍ)5:E)7̦h&EV`q}g仚ӃJ@3˧gF&fKV +##!~h lwfב[*Krq9T׉?gV׸QMuTkE>RDs֨X,^3H~a7aKGmnxo_\ђT O:}]U!/_'4 6m?nw0m3b{.gSQeӓR2,ͻty) 慰 D,+'4g6~JL|B R֞feJشrdH=ѷ {[ݿ=8"A[ _ʦ~9O Cc czoȼ`MHJӳ*jB1\⾚`+ .<Dsylsi~9<:a7gB BJ 6W0ڛr5rQ턀)&GcRjkeHoD4 (:!eW/ jECcš:OPTC5"nU\~ofWcJGuRk90W)`9ǝ"IH%^fٔZX!3$-$V$6Q(ܔ p}t_TWV2Z2\;XWW]SS_P[[l"ΞD]IIlZd30%AϦfS2J ʊs8%eʒ̚2vMEAuYaE Fs s?{ݹΟ98籓O;g{_6̟dsjʚjK:Z;GۧƇ\T*57vH=v:r>?czܒ}:uOYǶh~zR/=9E'JXskoo.6eğou5T%RɱiqJ_ o_0laӜ$-&1馰 ]ђ/i[\O^%gDzAqO9ݫݘ[áTU0{z:ۊK줦ʌb @ݭszڡP0:<hvdSjI필&NLm>2?$J >S^8_Blm1v8gjB MM˦F鱜r.7?a\0\S__YUVr9̒RNIaoh]u]mY]L$&&+yٕyM\Fi4-TC-N/mm/kkqtzBUn?)QZӒYALgtsܚ[%׍|D;P;8cnLM/0ZD?qY{/m]w-!kmlV-=YQgi?zd$nv@tgjZԬYػ` REyi2$4jˊ#K}Z01>>j^cLCen4,B126HؘJ4|mh:t5$}` '\f(YՐ'm56Wuuwttq;[rX5Me<7'WZm`UU&fX4|9vcc鰣A7 >}pNrɠ\fR|3I9I 0ƝbG >O #Ąz00(/r/N-e5kS+YrVZ 'Nc2TV-SVN8fc&!(W͢U由3JE줢\r%X 6OOO hЫo~m6]v%Z1$\Ϻ#௧b/A)'H!xS@ W9B:pOYќWS<> ֣l#n)rxgcMSVحNkz8\6ߦ[<,:y?M,MGO `X$U<6+utONM*RPBh- u>?b_9W4\U65\HWv_MWhWc.eXK ĘAZtuhh&ՂRMB6KH08 GxOs30E%25g\RYPUXVج\vZ&bq|JICasuA]d+[c(|w|?_=]os͆۬6au5o嶻7q{zŏSݎy p"_v6Pw_Xw8*M%'$,6%EFh$9.LfЩ Jj-#F1#:8%.2BgRYv0pfSVQ9XwEVrqmgusuR[7{5V) `T6V4J395]#e>N|.&R)t"F:;]LIĊ9>褿eG'['$|󅠴*^Q[sNi/0냷O=k/鞳={9o_D§w_]t?u=FER}}.O{ 8R2.2=1*Gc'de,:MOaS\VVifͭ,`dr 9 nn:''^ֳ$qݏá{᧷?}㾰 1C^pKNl|Ásgθ\9{΁0;B=k?X\[*o6^C8yٖ?;+G^b\mpoߥ乇qdgfݿ!y~5snI1Ը4_VRH&987%$ _^VUYaqشJERZX͑.ɤP25.jT5Rt(u:nfz)Em-Ţvcz&hp~6݀J݁}s?*bޛw|Zrk[gr`k]u>dwwo#jL9nuWئ;@V_FoJm%nof9Eoes4<4&BkͣMSְb^pˡ+og3`ǕkLʗSi Ju31q%&pl.^e^C 2\c>y̯%`L{%q6:]&GVBP 1Q8k v8 \C;4AggOGwsyY&Q;3v=_?}׎_;|zӗƗ|zjP\{_ݿ|{w~ѫo;{{ey^QmQi5!?>Xfz+u1hn;o=| \bD.98!"wzL31 !'|"z%G3cTmߍ=RܹOkw0!G:D N%@K>#d=_I-0ݵnX(ȑ_ hm. 1>ksmN-e"lPfzH4153cEY_F2r 7yضKϯuXjw{݄oֱ[ R_|6`scZ ;\menjiܚ筛-=-=k;0kFeRMP78UXzt/oWTKahTX\ؔ5U %N6HJMV9(m?\qU4oL .2KQD Z`S" z+q!V 8o gzsn'^t^LTK4*_HV7p*cN wm|mg-Owf7}k,uӏ/Ԅ :=yckgoG?xSws7oݾm}o)jn"dGT&ie) ޞpb:څtۋ^F*U&cϨޙuqcO\puJ<+♇c[έs{ <;틐^9rք?n9^~.-Wpŏ׻-ܖd{{[g؋oS"~LID(hɚSZqI06Щ$B&^St!?OBLgvz]!ԢB3*Tց2*ZZ aT_Y\MUVweb@ /?)Mݱw*sPiۂ?m꿮Ue6OVKE4zD /Mzzqn 6kb9~N^(> i\͏]Ves6f6a`G=V )$h2iKGކ?n u\d;qaZI R>\DHbةDs_{oÅ_O|.|f--o{/|'|!?޲8vדktϖ>-[|wm[޹Mַ\w->{)&I.N袾N:Q`Qd[޻:349 ` $JPTrN"AQ1D#ƬHHՍ93wϽϽ,kΘ!5O ^UD TOcQx5WG=%N€iw-9W0"r05ɱ._僟\ OPTn=Z}?W$ՒDҖ_.XWjD4+CթŶjx"э7=81<6:6uGQNݹ͟?l20Ow-Ϳuw46v4u N"@ojljok>6ÎQiԦ].D2Eb=g:POyOxM? (_BMt4jLJ? K?zI9ׂG;(eGzos[9 L['?AlΑEnp}uWuu4d=#64izI[xoXWmsXḥꨣŷXU_sv|ܳ]7TS:s.5X#siwGg:a^wDaX.Eվw|s~x4 r<lFZ l|J+VH퉚^5gWbksP!5F{T 3,a|,OC.K~`s{ng4>JZzv֮K[q.:wve{ogxdxQ2Gzz߿{ᕾOsx}"u&#y.3li)OW8~,S$|tԕxtL3؃T|0z$ow 7U?<L\dVl4!5|6㷉ON'oȟl΍??ĉ$O_#Cc A?)W0CapgxҜn:{z>t7vwtvwpMGFqI;?c@ήcO-nF9З㏯0q\kwklL7Xa(v{wqwikP=.1}Yth+p=l1m9^wwW']ؙd gLSJ`X<8Ow'<Mn ٔ3^P=R_8knqj֌~sS7mouutuwt|Lm}k뛦O<ͿՅ[+4߷z)L5輣_%p7(=ℽݧSTl"n2E|OτӔy㏲GЕPYֿ}ɣY?,2Yᮭ4YӒ?# #GG5>Vmķ7>L|<ϝld[p9/UG `G[udxlx3'~+>ۿ55~'/\?rrU͡C쫽Pqч? qV1Bf18샿OsHC#}Í'ܘ-ߖ49r)jsd&L'D|>aIdz7_4wxOo]W˭՞ښ>.86ky ;JwY&. 4F ǜP"8B"6:(u~衇ϔAb1aхxY|,?/8!Jѐ 2g%i Ci؅tT},Wfh`+:&YMԥds5swc#l5Kk>Օ /"Y4rMAC]D۫W(3Zxd.˗#gm)⴩Zy<;^>K"Y4lPt7mm~総Z -k"|>31Py\f\OcOD_Su׊omw|>[PգXp+WH)W6&0qъK'ل :D dY  F |t 0| SA0*tVM2ҔAJh@25Q!(tVF Fdkr`=m#2 `=,_\Z&h(ӻC%("LP'6sjZUJ$^lӵg5 QL1lnP=4%i&anܕ Y)Su9G.h>@zuvtw|eo_\}}/{'ZxUw/}-_{{>\r4h?X:]=ɾZ/ZVc?q7M_XAY"}.,ǓN/|r%v3J ݪL\GܥI9SS8͑12'SNFn>vl`kkˋ/U_;\^Ws[o\x#UW.~y+GL;Ҿ~;;;sW:F:} xzj͎ڲ̭kfOMݰC%J &w9a0Hk^syƐkGR˴#yk=oW;%*Myѫ'[7t hE,a꘷B, 1b)#D%G?  oBx@eLG"p#gP JR R71ȗ4 6J8ARh:H6"IJS5T NlX@)FɤbZX!h;Ų4a>̜=>[eD"@.H6UM).MeaRX4@Mp?k_!E( XZ3RBFj դ]ozscլ)^8œqEngoM:>t5t5tvwwvu}iljkohkmmܵsax1s)֧\ay0eo~iʮbW{u.S>O*W逿)_B:(U_Y#_{<ˡ?ɤc)nT8k}c_^}>';:$l .k.ɹvdp2\11>2Y :2u彧W^X~S7?>޽qۛܯjqwʜ|\;1?tޝO:^u}+^]wgYvag8{]Ei;%n+ؽwwlyTrՉER]EOrưJ L]t$vb+j>', s+I{Wћ[W*leu? ?;$sW60l˒NucG}`:d+k|ѝ'zx[W>{Cz}"%η?s,0T,Iە_RkϞ8wᒚv}{^糋o/Z;Җvd=bh[kSႀk-Yk歟e/ } )j)oS?&yx6vx7I>o֭|S`/i]q #-Qڄ$ Y_KA7DI3hB8DH iY 4 d0p^&&3~e 8؏wLTJ ]b˨[i (]| sf܅ZdUA LgmV/B d @4TZ&JxY5ATݗb@!*A8ٰᒵ- I*̅#L pLa:@D#(I>p1 Ġ/= ̕y\')^N̮ܖWy0sxSg-:Z>u6tvvuq& ߃|AFwo׃/: 7p6W S44(^ \i KW˞^p`H~=vXH]J.gʍxAwtu9|kt}Aƕo=~Wvܬ /Zħ12͝ndO~œ7E;K _B łA^ 3[R#0ZI?oh0mi q- ckpr$[0WbI+Aˑ j["_%hl'ylokh"i!{R)oI6;:cw_盷s9R)smKAK@2k b'B鷓e*v;'}ӡ]梦jjVQoIl>? WAP"hQU!>C`-CIZ"D8x)7&8x9= KdaroZiJ yft*A0UnP飜pJ3q*V=/F!5i i=ݝ_twuu_==$" %/C ]S"Hק;&W~m-o.|C䠧Ա $v3xEŽrk-ƛ2t&ؚR -%NV;9o6W?x^$clߵ|??j- 62mxd|ס/Co_sZ:d|%K\4N#F>¹Ӵ$gɮcfa~Y HAb?C31%/>& "!r]ʣE>jx]sU[rDfD^|-ƛbW冯ͺ\8eZhߧW^N ~ifcE6\ւ 2:6$uoْݸa{2ܐ2#IZ qtXm2U[Y1 BS@B~(1\=DM*XNĵ],`J0]ꃍh 9Z*ցp3o6(c nm&N%H%)4e,UkDʡ`H~JdʹV dLP! tb %T]wAw^— /QW/lcIZn!JSsk ans@%F,7M5J( I*hhEnӃ#}?⻭#_ %3+},|vʹ`S.ԆR跭^V%KE/%,ZM97v*L` C=?mztˇ4v}jn2:mphOCg^l OǾ}keӇo^l&5(dZ75c 99)Z2n&Au&&2p(sq Q>Q+3bWu uh2,6cM. dX_c6J[=qh_YnBÛ̽yoU{Ł۞o{u~۹m/K^x^iILiv’3MM,U"8\,P%0IW !bh!RI$&&iPlGKu;%ul{b)Jx2т6 JRa) 5jD a 8+ćH݌A )k>"x ! "D.LBނ`?cr$H65Ej8"\!tD_bIX|t9AS:zH6R9)<&a;UI6{z;{ڛ_ "TFA.!') %l%wgDI6QnO֋/{Us'{w216pVa8 !'!! ( 0$вH<˔H8&MPȬxH[KL+8@T YaE`4LW,ŋelVAy` rvV9p ֬bkupR77ص4Q? V˃D5+iaB$ \Dˁe'P"aX€<Z"=,7U8l`jB"s1"'\p< WJ 9SD{rZ[z{8՞.n0 '_@\69wlvvwVzk Sm3uE]E]S("B7Q `,h H!ɦ0'$)8 8!Ȥ@&D4 ~IAh*?s%jI& `QFТ&b 0OC;RgVl!F >\/Cڛ'!zη n=1u7ȴ[di1{{Nر=rgG,v ;NWf?؜le魿kh`?rr-1:<~}no7JXf[[^}oe-ޑ+-"~}⚭EŹ: Z]l %bȖEqA29 (.!*)\6'+B8Sh DB|2ۄyD, ,R+u )5RxUSx Ȑ{ѱ% eqfggdZI@rd:G9{N/|u! ooe?W>{{Jp)~7'O2h}6Z-~- U1*ᅼ--tgWjoȦpKY?bc&~er?csddT˹p[c˛Ξ<_yޔ==!/92;=.C]E{vɏZgoc>HWEMOXDS,-kFĜ"It&Ʀ) }L9m-)#=EL5?ҕUJl c 8%1""*PJ#/c}Q[2"ã#"B# "I &O"#b"b"¢Ã#y8:8΋q\RX>3=&:-@Ցb.j@BMMcH&F5ysœZ1P:v!U@q{{K[[$b/ȧ:ȯW2.d$xg.FVؓ|v^3n*oo'_6܌G]ЍPeWY*aN;צJ0ݙs񆃗ZV緹879Nz]pv¿c0:џ`,54EZ{O;UvTٵg:ZyrOс%5{O>p3Gg-Vg8et=EmBj4y)̽h Bp Jɋi#%94 өTi%"S%bSҴl4 c X XfUO4tEQF~Td\xPxDpDDpddHdX0'C"b"C–y9:37fZܖlRXVCێ-jx!p/Ua:pfѐ&[,5厛RAҦ2HG7}NҨg6!ɲs t !/eȣe3m D1r FKX#$%EtpV`Oݾ/Q KGkU`V`RthQ @&Ț=hԕd3 IO bt!3p@W:X \X* R㲩 c8s؄Nb%* QED:@6'OeTʭuLTwGz;\ Ӯm` lN9 ] e;Qw1 > /}0ov!"y[7Oַ1YKoCc_sd=8B9iCos'/P}?sG?RqHE]m#%+ o u2SSTV*4[MDM`&c )%.,J Ix...-GUQ䕡S˘MTdT1Ye1)aKy6KAn)M3#$Eդ`m_8wKP8<6=W]ʞ9a 8@A^N`B2dd "I  &C7'٤A #\2!B!ӬdCl?ɠL%i̧ha0sVH$b$P X sjp8$@6̟`FD0]QXRx ݋#GHxyi`F+.<, SP&B\ S8EGQ{ "tbqEN2Q76576A%~b'ݜ䑼AF[{g[{WkGwef<*(ng/iVCD */!wx98ތ.'b"oqr+}뮖8>ΝoOUzo[y7jn_Ln{h́l) _ SN$}Z[xM5gN;q*(ۖ)'19v2υ&:,Z$8[[HNz$0YJ95B$Hh0* Ty%LC,#"-& %*#a(HGIIVG~l8O:SrXTdOJH  DHPxPP˽W8-:T]QS[Fm:IO>~ҝovy撩"⺔51*C{^$LB1gtriȊ4C8l )'A I(AAd[tS܇ qDC&sN$(;+H8ApN->R%KOX%*u؟|jjֶI:[ q^jh\'!-]DK['t˝>Ie<*6i I\<8{|ڪ=Ԟ;}3(ڙ|ti*2&s%L$ٲ)i)E)ee ~i)LHI:MBNWE#JtEYj쥺b~EBli qA#Q>SaKC$TA,/D4Ш*{CFJvPphp`hhpXv f2WQQҴҝ/# tSFΑ|iݓw,TZw* XQ3RabF07?Yà%#A$rM!W68icE`0Bx)"t% bQ(Hxl%.bJAI("Q yR3|Sl xC!J+uoIXYKE rdN;-WyجuU*"o_?scsƖI'ƦMMM-mmm]$䱥'M-mݝ]&8vv#p9Qjj|$MĚ]pƫH*]ѹ2b帘lr_h{H@Ek,/.wtEo:Y_dGo_]A1͎-\+z(gp& ONoo}w5O={JLrr3 }}3})}6vtq [?K_GJ)"%óP#/, .M> 5&Ty %P]44C)In"[ [IEVZ h`YP7vllz(#'?kcHXhrgG'* b3T-[Wj=?hmol~?X{;/r,RŮg cVz)'?5q@]Q@2iH#qAqq:q`AlB0 DL߼XSa)$)c A! O!66}nn$ClWLI$/A k'f2~FzڞgN/UxG] p-Rv'ԆU4^ DaGl \3zEns-w?siCwv>/(!f^yk͖ |cC#]#G蘝%Zdkj7x~o@ggO~Rq֚qXo2căx.(1SgV2&2H$uæ(ZM:irfAc6 nBT#vl{ܬ]Jޢ0T M  PKPS1'XB>ַ]YPa\&lyq(iBlǤ_k͟~kGN^PuEաE336FF$ZoRً fH͘cgBғ䷒.-'(`RYB B &"5&D|! ɪQ @SE03&fEMEąp)0# % c^$hFG޸yl_k}r#RJOwqgS+8'^B#ܟ<te%)pf+)8resq(0@Xр'=942Mct9".2BH[LRML^c) ,)4C_B h9p.%UUBT,{*\!:R3 ,Ht B]s<F~ ,`%܆.KCrұ3; JahT0R7uHC &LgIHtR  S`|*,!?755 DRNFsKdpR.`EGPj+QQlR*x҃RDTbYbH.P@31Ap ЯfFK s,-Y.L3Xp?MNuߺFzF:ZzG?76i7#6Zwz?@O[N_Y^^kwAԌ蕞~6f,6pT0!8UEwB)c} )BIIˋ*PD0K])c!A%-iMć,LB<)IqY\X"6S.Oylm낭Ώ)I,S|H) .m&<29% )hӡ}hkjֽK<vz<ߢW,y¾j/*v[bRDAthO )n1sYFj"N,&lrH$OqPxRw* &IlF@<Z%OVGrth<Xc |YӗU4682Cu m1C$8\1[,aؾyh>Z hz\XȍlTliU:S iPCK&0`4,m6,%sr`9? E G" σWnmHύ?P2X lvsmMmRm劉GծjᬋFqĝVH? {S{Gp*(X@ NgD%4soI=_ JBBoI^i{_ReGMTu t}}ãu5?bsg6GFt7;D2NΩ?l>3x5;zЙ8;{̎6k w`G0x'X8kŖFlx~9Z&~-3u{xë/4r̯?v._q_6:%x;44Ӈe$%ĄY{:FzV̉w,-Oઘkչ ?e1zޑ{ E7b$&1XhL3bC:'}װ0\s]eMRۼ 2UИf-2dHX -!:kfzZ.V&D]S~vqÇ4V",)EpЊܔ 7ݺ7ŕk<Ꮟo~=8Y̤_}ZLm_|Wz(Zqc>̍(qmo3!oH9~b1@#x؉J @L4&UAR-ˤ8lBșPb&ƒd!΁_H5!%$LAI#{[Ch $]h'tcZ͹bNwFyJl ] ЏDj s&lt!|wH 6 o>i}̓'O>k|p'<~Bzdtq}@?hnA B: 9-C3tzz oo#m]߅};mӛYG^% fY=Ϻ/g]]]>&z#}=∕@{r;_Uo.JUؤEǝ5ǥaɜcSh L\:Fv3b&A(l:Lr'˖snr n=0Xi !.5@KԀku"Ќ#MhH 0'99`_+L׿GgxP2H%9Ra ̰`5xdq=L_d Kdق> [n fpb+EC (0CGqrcPD|/Mj&5­Cp/.w{}N>r3.&gKw Cj8Ihp+ĸM;]d?R[ rzۗzw=x*߯xg/|g<}MC#?.OS/gF+Sc7_/ب@O!"|@w)aķ;ɫ8DhhΔi/:r雗/{{?|/_>+jz٭;WW?xӻ? INW!wS/C|5hqN֗&+\M-B ȕʿzĥe%9'%ƺlO* $` E CgIfx)&`%> Cϕ`` AW<B x"Y݈KUC$Tڒf0C 2 i,ʈ$=.dޗ)8G $n*;X{C|4%] O%Oy۠j %0fԆ0Ta b bN9sd3 H !'_$1V}NYD>{w<{T>'q_5`,<[_yQ~'Yl6HSyj|j t"  )ߑ)5~ߟ񦻃$ˮdX٣oMjjNU`%XΞ'/[<}Í_]XxqUk3ίNbmCwL㭈73MqrTw~d2w)ޚLө 88!K JYdobMAF#"921FDS!@֟ڒE bABPrVK@s*bAEYޔB%HI_.G". !Yv,/ՐB@,oH=o;jc% nA $'`dxYm!B2B!8'#:qAB0Maj i$\&ڡF>*u;=2'ĥzA|SJYe=yՎс'GKՂmiU_3[s}ْ])kֻW[nәm71ݣ7=)WO π^+4`$9~o` L.Ҭ7ä?AˋS}7{ۺ0 ΰ?޶viG]tNGno;6xc럱=;{9km{VeFD'FL(73~f喖2J/I%ZFE|V (׮^Uiw3iAЧCo5^QtkMND 6#r/B`xv} +E#.q+<~yɞǯKR9YaF]WдLݙO?U[: q)ӄβ-v[P8#֐$T &Z封1XB4ZಒU,1)&3HVahKZ{_,~a'vCvTYK5z@ PrJ[M& Ÿ;f4 H QY< GPģA` Db|$eSL.#Yl"t`"C4`6BXj~GwgiO tyOQ뛶cboʙϋ*G>m~4b[eUg4[U߯Y}IOK egvsP ""%&lގ)]tܔ_p;߾{ͳ7=rsoyOo߁ɺAxUz~ӧOZ2g5[l=zNٵsꥫLo84+l\vrIA_:qm9ѡ%r6Dm ]xzϣM'wzNŅ[?zzz돮GÕ7mX3f˜ԌX/Ggs9b+t`[)""DISbD顚i/֒# mJa9s10ڈЄ'f E) p/0 OJ7y)0mMAm %0LG ?mΪ"&Hu(a#]2{!ԧZ4:{w¤DkRI'.Q'0)(0֠LZ09>7.g f52g'1K,cA,3RAp5 V`>d-`EdUєV$s2&CR9y`/8B:MR<xƅF# ` sIs yhB\ !;*΀ MXjs?~pyXgNEx|c>zˮ϶Oe,k,q8~2S T2m޼#"w~2]ܴꛭ.l\y/7o}/_s2zKG4 ޗ[X80]>{o߾xӎg޼qx˭OwttsSf?b+ {ZZ )k\>k挵+߾}+]lzajR]^: lS뮉.>1;9l3 ;~dOνO<ͽ翻th-gVͨ*?,?;)!6*CID׍mN{9v}T7ztqɺp ô{V-7Ӳykw/Kgի~n=\o'{8jsKG+(I,I X76?tˆҜ#ƏMeq5L֕+smf_Y潾zžRቖk6~eK{h#Oq-\4c3ʧU/m-0x: 0#f191{5?6wxȞ}xzqۃg﷽n}ų;7]Zt|rv;b{L]_LPm/ȑlr7]fn u\mbيׯ| W~9勿lkgָB o.XۗQ2y/5x틎:n\W'~[ߵ=k[ moowGۏOgDCs"C3탼l|]lNV:+Z-9DJ4Ը-j2\35?guKU7ڶ=>x̡GطsǶm\b f47N2n) LiU=gZuS}Yäڱi1)Æ٩\1l0`wt  4ײ['iHXHG p s@@]a } '%[kIT HȓI.2MP[Cxb.:~ U |I-$QQRy!ᓒ#f 6QC*49-E^bcTU2}lfKbk1#d#$89uΠ4 XC #O=q$'+ B\\KI=J:YeQ@C!JL6C@ F,zy3E`?1c舑6%" XoKahNВ i~l9Q%@k}L^%رpևO޹ߺ?.Kۦe$D<F2˩3SO'ʈcf6F(Kߒ {c@ݙq~rɞ0o3o;p<<z9wEҷfZϬ׾tuUݗZrw};+V_v6yW{~Oα~`K{w/^0hp7Z[hMurD';Ry#Pk.[k?5qEcYBꚚ ݴ}oDZMwYn圥_0u֜ɍsgULQ_3zISUO*;)?utJtjXhאp]>f0u\Up Z,HD"x1R+d=M^ _d2p@##>1Yg. "LRçJR(  p טX795f:v4N|뤝&YgYk6ly m ܇yIW, Q'х6B&K$D`+Ӊu\" /VC".saƠR H2!N2ST%0ˀ-Øa,x"DEs[$H$ 1t' ==aFY5H#9@ʁU@ISr,#-VD"9"^JDsd=y\;4.kS-Cݶ;}ۗx才T.Yoг⨖alt4 9"bX8rpfe*:'S0sՎV[=|7”ʫV\^k]nj8gW[zyjWӂcƺgή}S3w]jpDwz{v/gݹI_'_YbKʾ?{'EZ**L+b`N @ I4؄䠠%\c]˷ZcmmX׼rUō M3nzeI UՓ++j+*F.O)ΌΉ uw0Jl\}"(ݸ6;ۣhRJMI\kIFB 4Bƙ/("rCx{$n749@}4c|wt܀hkPsqâc`1|=OCSxjBx,a +EַL5*zo5l.H<<$\!⑴e@):BqW (z WRdt+ķ'YjQW͗S&0f\gg;B`+gWjlWl[lW fآvQDK `թ-\f !"(Ke O2RK0ՃXVyDZ<9%3* _dKP@%"0р?\0 \=0 @ *^_ x(HMhg AR.$EcVYK` R=Cxk"nd!j #,(ݬ\ aFs\&a cBƕɗjsEIԪfQ*<٘@lкD& M)g}Ϧ$*lF۷ fr;61,#ױ{ʄΪYs\5ͭ~7e{W: 4S ="6"bdpk^# $0OVt#<} |?܄KKW֧m9- V"R1!W"H%DE^?4dxƭ$m>s&c*}"y*i&~:4|rwm&f7yQp࢈n v*-WpB9/ 08!S2$[W@6Ù>pP<+rEA&"$%$Ќ-c!^  jg2L=%N"E\TUeFWLz  ҐE/ X-Q҉H3y-NrA$P2V+DB=_1cĤE,`Ym@Pg+$(> %< t F"ޠR0OcZ1kH][ɂU+3dZO/(BM婄7-en8WkW>mew7wg{zzk}]},rM{:{_vݼۑ%M1RDMS`772Mp p~ǁ*-+w,=hlTnռ?.}rns7[f3WjZ~ޒs+jK'L-PX<%.n6ޖ.T$R0Ixha2r1"{׌ڕ'*wt 0@J !;xږ8S S`t0N^ O^Sϳb(Pe-O)tjJ%&R,d"\Uzl5 22fhS樓f(Jcu0 (L*\d\d0iƫF_J0p P,yhQCqX Аv2D̨)")₀ !qMRVR>Y@JQ4Be%.g3 =y(M q?$@^ !4g,I6h 208K+_Q"5i-wZ,j*H.4*%%ў: L r"uCI󄂵ڵGR-$[o}hN(mː`Nx瓟[*鈋nS6&f:ޝ?~p'>??n{P_X@ F7Onve@۞o3۴VwyzMg}H9xvq~pq~aǭ?zUq AN-w0Ce87{*h)DP|) ϞR^]b?NF{]$Q))èi sMՉ"tYYgh#Si@Hx)GJ1C0@h ²KFNn0s'5C$L }0@E}ZW,q}s6!xD 7ύUk'rױ/A%U "A8K9o7N0N;*kIletMlUB0!p6`#%c%XLP3R-M,thOaz8|ckIuOLsYr34:M<:w)ϙ$DGq ! b BV0+ZVEZ瘨2/*/!8藙 V(lup pI{RW{0 g&7}Sv3zusᔥ9?,yR]#G~j\a֓[[3ޞwNa<ojI۞v兯O]/={'=}2+6YֹPW.]흯};O~^'rQ~ uK&5ϫiAi 3 LOS34}w^i}2R¼R3R \LI|i am#($axMQ i)2'8YM k'cT^h-]%Ek/ 렏7;XL 2TP@+0c2|HO)sR](ʁ$1 I{y6$6N_?z\fOW߿']=6/nceWsWTu[ߎ7mmqXf.x<1&OBBȄ"/7㢋0{EK5=#y9E =;#onR)a<}s]l̍.*S\o2u3;F[ VeZKw6117իYSh9*NQ`> W,ٶ܅1S;x/n"GXP8lEY#FƧj>q#ACz@R1 W ЇpA D}& Kw5QO_h9DbZ8싅|OE]L],]ty qTyL"pXb'pʂ%<d!#xjVS ?UŤ9 Au8iZ ݀<&v" !Ct$PH+yaBGyx[wb?gOc6ƛo_vΕU'w:1?|*oJk^cTJ2%SM|V1̤Z3\/77[ۻrLT7tlztQT\UBZmLr}xBchlCHLm`d{'x;7{/7 _بpVuup DҨT*T.x4O)c(qn^9ܕ$mK1'o^sϘ|ruSMicS+4MYWV?xBcɄyMyVZ Q#ȴBV@FnW*HO~RŴUI9^`rg0jM0Ce6\Zm@6,q:q,q*\9$N(T"VZLn ӕyjr72 fI/*L!oA"hKXZH@]k@+ZN-QAjKyAh]dQT)#%=TwdJRaZUՖ&,jy~;Ω*7KJK-U+F$ Kvs9"lD@C~Lsa6ZgYTP8KD2C |TJt23hVژٮ \-!j1SNoתfmr#"τKH 0mgU5)o'>hsC/l_FRg>6zpJխp?ߤ:&WuUվ)/xRq^w)9;ֺzZۻxs헿:q߮yu 7{;7yY7,7m]YGi[HbmfǺhUZ'Z-drVh RSkQakYl̥VzldDHCVtyפDI3-?~VΨi&e7:sE *gL[[X:dxTlA*4PF)KeFNdߒ9 I7 #0U>">L3c*@i+Z{ĺ Wegn_@<1wu;z~ô n\ak/]9{s'U$HdJJȄHI5Fr_(ORO /j> C/a7VZ;ZWo9U3ѴM.iYL9fCKe>6n,)jERp^*CiF`f&):'D 2|LA7`hR026\%^R!)R;"R` *ZXyٛݗ;~ۗd WxwyeGGϫW/xkj^FLKu}74!7[} F;u>̴!DFY+19,e^i :]"7,ߘm笖Zt1v1qFeYsgIx!Ċ/(1i51#&$M#eiFh?܀xtg27!f-f:8{ 6-r柔雚84?ѿN fd) -3X[OM l rNG8y-s\ 65n 6Ck{)/V~pKvg`EKeZԑǬ]h1⨿S+Nꗓeeު_KX?}hμ̋-}87]oL#w;~6>=C !nKd!@J:ʯTc\F'b-b>?I7L4pЄYǓ'XFR¥!. R+xo"L !*ɴqzgRnJ dbEb9I(jv;dB ѢזݖvB3ϽG(2IYϲM1r-}8,H B!8Z(Ph *P[wPjPZhq-)Ҿ~{{9wE`02͹ |{ݠyxP h4<@/dMM܄HlKFQG)%94fj\$f(jmWpR CtX^`SZ2ƨʕ\dO !g.ҢEP+7]5IZ>;ܱ4."!I 1 d3|~HZ^+UG@9Z7L[ -NNQIL"6+K wi2 I$KYIOu |@"pg[_]GW2PH zYYx^:#(05$*'{UiXcuJZx+,hRڐWTTuTR#c; Yio~Mn k~emjq~jyvvmmni魾G_0^o5Ck=gOU-/~=~Ƚ9^5齋a/CU6]끓5W)]./$=9@C pyAy0k\[[TY_QWWa=)&$=7s[Mi A@м|<|" 0L7VK2r BbH 5-sKUjz= T&GHCQBA8ry`>P ‹WO qe0H~d/C_A"̑@ CrP%& .Q^٧ 6:xCOz('e" H{mxVη7B1 $2JTAKS!mS#jgd Ôfv|G ,D(-A4$ s1Se2֡QQ0zpu䯿{im{z旹oz;35niyngBC4k67sbc7r>gH9YW^žˉ1PRXٳ#ݍYw.\޴ j H|@ fY x [!.YL8Y`6VHQ+IIsKU5xT(]I終+5I.|Vwe[d~[QsȔtZ ~z4 \S"ڂc`6j)\ dɪ6r2(k(Y '@E^?`!iFEJFERDQRDF -@K"bBP1<_,?B%4t䵔 U ^͔lA1 pO21̼@gHov҈D)`DqHDL RlFkVHTF;/$E* h9Jp{l~wC. -\R>]n16NZWT/_[V`-q& \E8j 3Ӵ"dGyIˊjjA%3e]k=}l9xOZu 1 kd*)Hʑ \h>:h_~`R:[W6U֮ f9x=Zq =GS5a 8Twj'N)p&4$DMQ,# O=/+dG EYXVXET]2V%%Y-'%gdCc5EQvw5+t~&*F51d(8,=BOl T<"u!An+ "=GN>4 zc"&ta$:1h25`͡}sk3#3 /Fo|:}z)/v'w2e}azcc{[\Lܝ]168;}aaskg߿8eB^N'st}MEҧJ SW=Y PD>H ~P$e~Tΰ7+U{5EN?KGx#c y ]W#芒<l$ ۈDDɂƐR@ li#th ZPXRHBRTBIJVS^ECQUCIM_G]EA@0b4B#V X ݊ekAc-px}C>ghF0̝u4y(*ʳ9'.ƍ@jt#ٕ;u48FZ 5$Z -K5|01/'RhG. Jf⋨%xdFEcb&N5M27ъShJ;Q{WY( #$ete*C3#C춢|/x(URYT\YDUS$\A%/ *`Ւ_1-+I,d27R⅃ HX@;AP $6ꅄܲ|NO$(VPxR.6q>:s;vǜc)v# fC~ +CΡV{Ng)c.I1^ ߼}֯퍿̽J_ks?'-NϮ~_}ryّၫ&Oomm :HS_{X@|Lߜ'[]#&q˳d'`Ԩo9s^fW )K|Id~;zPr +f;YRj1T,*OЗn[yA p>ZXHRHňQh% EJ"y$ tQ*D=<Ȱa8K #`djihJ4`$kambF2 pCýeb#I|h /՟Ӎ^kW տLIp$^9PkUNJ8iˊ^q! 6a;m}m_eE12I%G ;jJ".6,7*+$9:#\QB>6bUf;D48v0ʫ%=hgolƲq3V=SWeS@;| &&@[jH/vvc)Tni62a!ӨӶ9&THSLL4x$d d{JyZYmQuḘЊx_OI!aa0&v-b(!5<2\HTӍT3rtd LUk 4+( AVXWp, @N@;-u*s" xCvxybD+[ %"LAzD=&AӼl;dUMK #&ؿ}WSp }<`֟lcŁ64r2Xs^Y9~b|Ə͝ȟ' 3a揍k+S33?VyI3ck?vw늕}R(i>3~*C {89KnФԐ 33BܯfE]*Ⱥ_[S6yE7rI5is4+GK'^ >PPtaZmA8iFI 5J Da< /?TKFBLHHT" hBR!#*$QTC+#yőNn%,h^dgKj., T!hۤYבqIGÅBzD?o>&Z sGGV~ģ5ά߲͒\ߧS3{Y{}e_l6c{wfyN/-.Mx9<1V_<Ȉ[m𶵾r@pe`zн(x┋ i_oLVΰ !pNd+;2ڔbfd$V6^4{ Bl~FAPG(GrC vYK$^4]6,?`.-޻@ 2q(hk*HIvzbha4\G%`P~40*(A!:(UֆNٲh:ņLI&DC3k2Zq$ ddA2'XXZZi+Wdz cؔib269`"[lѤC})+оԗdCqk$ `0ADCɴ0 90"-) ǷE|s ω#V$r%-N̎}uzG[G~ lW`{mROX := CYd7=@}I^VFhi魡 %,))NM^6>fz i`ˊ1G5G =) /&/{Xִc{$R'Cʽ:cWATg{ӚڛkR"&\]H~tov AN3+Is5ѽ\٠nn@,y3. Psx4?J{EMasN“₫Yޓt}<943Ar1Clwl0[?q?}?~8߿[n{]W'f-..~[-.o\^@'l>L /~yB'Fnxsl.VvfsUWqVcJ|KQmc?%L+bceg5VŨɢ%ks }B /0gdX2 }%{) yy.sWzG);`z ^P ,RZRꆆ %yD0$_" * P5 .ڞN"ɤ4k-ޒhbJ012l-[-ocka&K4'D #Kod72YiPHX1H6L[BWJ6YSSƷF949 JcZ<5da0>HZ\<ŏUTc/n}惌Į {M~iU ٖc?{kթ[R2O&=/,%tf&感ݗUTi(=Xb/fnp2#UU -ʽ**30$2ɡ4ij&5MvITńT{1Ndue]M.E65N0k &K4Ax@!zSNMrr-hf]&Х́V&8my &=ѵ3p pHM5U[@01ޅRAoq7 @k X~ E(N S u)dy,0طrGc-} zşF-:@Cr+;d~@vdlk軻O<} vvv 7|Y7ɒg6+;;W..N~__Y[X}te'sVVܛ[ ==Ƕj({~~Wx#7߭:g#tޭh-JI pf83ȎtGmK6Uň"֡USp7͟( H; %0qߠKUIU#E Gt Gax~ %jG2(1-b17|CyxaB(' tD=mueYth o YXXP*gQ)VWOś8.xckc1hZM (њM$9, kd(-%Bk?FoЏh  Oc1}[4dQ V#b 0,`=X}W+I1~No) [5ab<'>?3?^\U~dH钻xvpzԷ׏glۻ;;{ʷwgcckf שw:zG]!tW"L04;М“â==|X:ӊpbRXZjj($ZNBJVDJC/{2r GKԻHt Kg:F6zpoﶌ=<8өB_HĖ-c=2z !/Ab'P凉il{CgNfF yR̵h-fGٗW JuKfGU ?$HYB4"I,BRQ$ ]|}텨7 8 }a} $uN pܫoE);P(tgIqS"#c#Xdǃb8it{ icG'hD5]ve:zYk"hnCY'zs|Yvn>tӑefǠPiFC;X}%/-mtlS6yyM#_{|'?>:91hnv˟wŅ d}XǨ;pΗgK˓{{/w{ss4V^&&8=|[NUw 6̳1;x}]MJZ{`<>zkl꜎ֆ n֗VFTTd^?/6++/ŗn{|muQh`{~L6r}`o߹S&IAOmw?199 oplKX]- u3U6WV [)қrOTT/Bjk E 0$ ,Gi- Ғ;~8Ʈ~U ZgR:NVH$XR G*Ùʴ0-͉ ZVAQ1殁Onr7,-sB"7*!?TRaq M!oA n(:>GH%ۻ;N /_+(;@bV.oTRy(62>ՎƢS8Y))q- Oq vt2AbI4G9AZ%-ȈKEutlXN4q*aU0[>5ֱwO 9n''G^~p1ˎv8=sr|jΕ""[j 2tz͝﫿vu^]~rhoyΝ蠋 w2$:23V(°皊#".Vgzi)(b Օ+<|=<rJq l+西1Yf/V|^X]cqsss{{7&O#\6쵙_}}G/z}}iŅ;WglbH3ZDNgMuJn{ =D+ӑϖƠh1,B93 ]sXbKU)GXH9l9L̠Ь5U41Q EKl]}$xOgGW'ږfdfjrP4&?8BZL86Ħ4;{ФĜ$g'G7}e,&'(<+1=!=3&'!52*!F'(Dr>=l719}㓟{8kߣuA~}ą~Urw3_0mdYS]u=>\U"~ yHE[55,g'iBRҢhQH]`{s3I//m14?dBskzdKa\NciJ|z^ɺ'yc_qCbxV]_Mm t+ NsZ t7472t6) w[UM0m}IOxu =BѴY0+Z.xaCл|zDDgrPrvve84".'}6́㏳Gc.k`G^8zY:b!4DǞHc}}?`ǶTt{{$k;KpZfM^A5Š:zq T JD!I1Fh@xzZ8=?zPSKzM~yboZ7u!;l@׏&,C=)X[vwW~̍x4kbq߳?_).[]rh T_Y/xvr}չrc} 9ymI)Ua,/WWO?WHDp}yD\QV\ۛnԜ¦skܺŤH,M c-N8Qўr"HvzAva#B<8uMv ik2_76'+;o+`* <ޛ;t=k_C!!( 4V[W(AHj˽GcjhnTLxw<CJ~s7hS>r 亲[[?77666ۿ-,|:;mҗއ>:3fyqK_i 0gI<`'ھ E%vl{伢Jg7G?ʖ⚨';75 !1$+E#ۓb+rs*R jBL8J)AతM)'NT4Clտꊾ=ɞ##/w~{IxoDݕw}b uXHC7td>hh=s%>b-|dy~w-tv~MOί,pٕ͟[{׏tnln,}_63mf|j⏍O_4xufdg~ڏwgl83ى㊢ߥe'9C%/}cm%(ωICY/LLƵG0>e'U&'lt>9^!QM4FT'.sec)-׍_9#,`arNpx]NֱƊoiS1 1 m$R[HHJeew6#yVo/1\Xl;7GബU"bmm"b2|" b="CJ3k2bRCS ŸqtWG'&ŁIquqnZ/$)ɟnLua]\9V4$ZE02΁.F%D5U2x93=Ӈ~X~Ntoǿtw|_[UӐ9Sx<˫W㉁K?W2oo,|~8ַ4z۵?V77VvwV`0,$|~"+$x`f0:9ݯ$6;۽.+eG<|0D*j[iԱMj9VO%z3Yfj>=V@Y G |凶s.B!|~HHNO^@r'uUq i/ӽ:jOU6"` 0x ~ -xΧC-jl*BqMi)m!bޔBw]5YƖCF=J}"ԏ.%}_]yplط]]/ۛ9_?W&'g'lM,N4n#oL|\ZB_ b?#4;qVbj`_U.-x\eIܿ7ڌgKǜ̚8Vؽx1{9}-<&RcJI"AWEN+$ׂ"B* 3C*)Aޱaީd*FP(#aJ}ч@ٹۻYLwnHX}S ]y(_J[gj\.֥y݊VNKu3.Y a }[ҝrO=T ☻s7LF덲N<吥~|r!=fV2̙DH)uVJ j.mvQ8N$o)Ic\XFGgd @TZ *~xO>rmjjftt:vvETcwqq!i 4_ȡ?kI?PFӛ7@i#7xPI;Lv?N\?wN}kog q!,@7 ݸKNCK3gNS{fWҕ׵ֳ{mnv7нml盧h?wntcwoXct}SP=Ss1ɪ,yNȝJ^*m9-%&ƮڵJtd <,{OvYڨ2?'eg@|DH}p+ n0ov1T<= $wt_{:8t!$Xδ,C *$ JHU¼#t TUutlSlݤ@ puNv16q3q%%@d)./!"`*-,,!%)'.!/-*"EEJGBL(D޲$AѡibbX|zߔڔp8q}ַ`ЭC:l ?J+[[ݙ?;?gO)Y?_e_\_igRҝw2ljpr/WsE8Bnp޾Z}K2iQIjFQ+C1D8BGdBQzP`^:h4d .:'hJٿ5X++)[%* K0yK\˼}dE%H0X,# H #bnfoK"3tqV2sr 42wEZM}{u3iҸj( $Eej yiYM&3+' 9!1LBJ2<>6!BpdeP]dAJICoLVVC(5K<ʶ6ޭ9=0"#6#,+*;۪:+V@DCDoXgpK`C`CHSLWPxh%tq}virom qtt||xvy ?Hj銜n o[hmsLI3Gli/]O.0H_hXKrK[NbeĠΪ_sAuSVUr'xRHMOzaM݄'G[^X {T*    FS6WlBl4xX4hبЙh1iQd%f3aaG{z2 w*)|f+2r3,L= (`oK'1# g,dlO%?di٩,Lvo\O.yKHdQ8Y]>^Ey߆Nm s {ݫ3 ;O% ?XLoo wDX?XU~6ժd-T,ح !9aƾ{rxE bQ婑jj#o d(n.'f.Q i\NѾ /;pH.˸UYnzP|aBYvxj$D(@d%@Y"'%' @ JʈH ?re$PQ[FNo"D,$PVW3q6to#.,SMC4 3)9#tUk9T$& N.++69?4+@G ,aR^XRQ*4X7 D{ /g7ߔk3+]-e5Eݕ9CEmKUSkS]s  ^ΏFJʓbH2$b=PL{ꅁ#ʰі6OS#{QI-.4$(:6{4; Oh6J?0ND9j * pS=cҼ桕~fr05(xj 8_^# R4/;6x8=ކAEsotwz/iadshT"zz )=)同`N v1Wn3˛/gj"NzQ)ޥi>2\I̔`tTc!fq>=sSU?C= 2,]4 "VM H*$! 92VDRI9@VFBZZ(-.$I"i R*bƦ  5 HEXnh!gaj`QTSմbyEKEMEAKBDKNLONH'd eboj975>8na&CcaVn[GDSXWU.VVT3XI\$N?R3F+>J!Nrvx|vo*{z~j*a9}`wad{`seo}`sno}6ssœD[W/QP1_bIX,ߔ\"#"4",*lS\?b?<F6lV677ᰝgw?HO[q|݀.lx'vf$we;}zwss|_ J?d((!D'D!|rJH=aR\PW\S+/0KұZ/,6heSik3\gҀ>~IGXYK%D0奶Zfn1Pk-mS#!R@*@)$`ģE<`ť%Ғ Ƕ-,)*@tU~K4A`0@IAZKG'.63@QLB" TRSU6!&&&#%'% eVU0RUU2·Hg7 v'F}fc[uqube'j9ב3/n^2&Y֦y96^C}ݽS=}M Փ]s}ݫskkp tyj{ir{qjgu9sqqzhUjn .1P&!CGO@L. x3)f>F1 j>j4H٨h h#eTp㌿4h2B{0G7ZBvNIĄ=HĜ{)J!ɟ%ij   %*%; [t^,jKZhGX.f;XǣOrTd,h!JN.uY}qP)ݥgK.X5@q@= +yOl mR!>Ҝ 2!U?]76gu-nA/y#WȼFRx\zrw{wvr݆mnlagW+9Ӄ3uS'';׏n{@ AXۮ9U5[F+ҳ :1>.ur:1`ke$U"ΝmHWk?<[173RVUY<>ۿ00:657XYCٿZ$9>H~+XkgSd`,9Pab*+-; I>A\'9(hXY(hiBʩV_" k,ӝ\mβԾ1wg6/_``M?yvhMӺO^bf<}ZV~@GFDw+GcV3;aKn@ nֳyw7wwW7'g{W'ۋGg-t݆o{:+Fz*WwOE*Riw>7+SS$hụ̌5n"qyi>)u'댆M;>fBV&G& CF2}A@uWV**0!A"Ztހ] /.gz2mK@iuI<@V$- ME 2F `JH$%A @NU$2!'TCJFA[I*?*(0u I+EM HEEHBB- %[0P/EĦ\LT9UQcyfvJKV"),xqtlil<3<92ݲ>!=Gիy98u-Ճ?,r1 YoJ͏4UXl(Il+Ι[Z]֐962)HB7F7G3{(-/1Y2VJL<Y?( }wT㏰'Ȧ1Q 1Qk^xQݜYlE_+~,%sleBKONڧ&dgiWVg'Doqo X_a!Dzʹõμ! VFR>ZYq#@-Je33[?]3Y},%/UԶdNBLCJLEFL*ڶq.2Qa鍝3#m5ueU 51 Yэy)EXEKA:ui:gD?Di6ߞX(H, pKHsxkcgEf]NxKD{tW|O0tn 2̙U}T̍١ՙᝅ@C؂q_(K'Gd VѳWѲW64<%F' .Fy`LU4 DTT:u{893Ip5* )gxkΪ]aCbS74KtS,AA'eB;l'|B{y"Yߏ ~\KTK5Z$ϺOi/ҙ3kTփ&"1nwl>0a!Jy?n/?"_Yy~guW3TmUc_wrs}ps$q?>څl7Wwz:&RW`;g׷_+@#@WS(/%"ʦ'v6vM=u E_,l``Woo̙˻(m%qZ5_#w-u;jY>b:Eˀڋ<rb*V*Z"<|@$W.@iyPN + KM)hH"uSJZ$XB[C YXEFZI^VSaif⦥ecghl &')Q3SѓАPRPq E8{%*팍޽б u ɈL-OKooݒאT[Zd Ӗkݒfm/;Z )a?M_.c)!ZoqpSvULv757wW74uLvtu, oL. Y^FHbOPPdDhCtp*$X1/~;;c:imnfjbbcn`jmKlbTŠߋ0\!I[ E?#͛MH1f_>7`}KHw瀫Չ)~/+;SRLVeNE]HIt~jNeAW6Z| jF:"z"*bZ&d Gє# K#inl%`*@r Eyyiy)%%=w@wPo`,DQ /" P'%`$#A֗d)t <2[heEM],\]|R B#ª##""j"k òbd>YTGG;*̵5Uu4@aXjmLʘnmnilmjmjoihk^[ޙ.@rfdufxef DdTdoo*+jkp8 M{-;--[=MkU9=]eCuY-uc%--s5%]-u#y%#U-cms[]w ݲTъؠS/.z76fK!&JV5Zb , =t dz`WBb ,FJc}* 6I5J\4hj~*oy n$MWm gRJW. 9O 9ΪOŎ ~?'?9.p봨=5˫+,K|ߖ| yGr~.t /^ͅm!ΏWH^]ݝ_ y_]]]]_@w;HC};ώe gVmoMl]\\}ɿLdhJ"?>031`1=}MP7?8TW[R\52qs;<=Ϋۜ0K(Om*J+om-M\9R.!q:`Q[5/s mG PK0d/?ʐҨ☐̈P_grR_>i}QQP񁑑+:ZMMzí}MÍ#M-c-sgmd:;0 ]ZG<5490ѻ0371?Զ0Ժ>_/ i9lj|RX: *"}k(mm`mh먥inhmafiimakcman-||UVSl~5.5XCѰ(6-: y>ŀ?CDC>cab_>~rC1ͱ˱S#|8>tHJ^\w]t@:!җs<0q YYϓ"ɫ rcƫ|4f.p3's sN\h(aˡ;=FFsm5WgЇKbq}%'q{yuwBv`[ۏy[=-3Uеӣ[ģYo􉆖-{VQA֟d|TğXU$]C]"A܌\Zjn]#3cխ-dZfJjfGl !:ʩ˯#$Wbd۩ 7YOGiPSSQ1%!##f ƧEJNDCIBHYT@ $. >me!o"ٔ+˂A :XVCV^[S͌Ww'#%1KRBgktN]Ye𰽊WdPMMc[ogyh@iD`qTPAxPvdpbXP1QѰ$z 3:V* J2ZxAYy_ObOzIJR4OFeAA9 ӻw8o.ԅ[OZEsqL ||CfF}UZTTޚV-#%t qtgGНݽ2scw=ݙ%]_ͼ'5o676n:jr:bzzJjBZ7`+\gh׸]>aWW* Z[;_Q]r;9hNkqZmk )+[7d\3"8o!y1YK! vqޞ^!nnWg{;G[1tcwewoovv-}f$ky5qqvr~s}ͻ[_&5dbTV$|Aa*dln`mjbdhiaДY;& $#(&0.5>(NI+?W`LohBB|6-Lz VnR5[[KP('(gb|2R:=ރmomö7=i+OZ^^8;g¿d?!O9[Гڎj[I_yyul-#,\= < l*Kr#SCCEx)+ *OFJhdW]eaZNck>  nDcjfsWGr||l7NNVSK H w3R4|LDGGGFD@MLJ"$iHH((i記?r HAՔu @2 ((hRRR~ `` 讫qH18?$a=pDD@Bfm0{:ژ3T|9{quw}vy~?;> NώgG[-|ds{{pЃti EkmЙ+d}8@ ?A r\OO%j^QYE{fxPZRplR@PwWl$wvyn>eIMg[첥!8tfyq<>&1:Dz)ۘZ=l[<-. ( $WRзuq\_&cdddflÈ  k*b\J7dĸԤDD,䬌o?qSR2QR0P1R"%f$Ֆ-Jbi8\qOpWGW]$ӻg[DA+tAAE:.5*;9:%1n8'7?..$.K%UT\S>}vz} (h}7t(.vswV+͉QT6HҼK   [q%e"gcfedyKJF44\&gW,RӲ"+3&Gkƚ Um!EW''캜暓K^L21`g2̮ˣ'/_XM%5:rnv-%9+|JBoH¿PZggcbZ[Y4TP;0&>28"OJZVQWSTPWR֪ΚΖѾι晎檡ʢœ jgca/6v~Z~ކ.VFƖFvF&:&..&ffֿ,| } S2~˼+isz~^3^WT:=h;XV妻!|z)`H0QP0QOQ0q t4} <5,ž:QeZ6ךߛd2V$q/;)P>.ޗ4Y[-\n^%~r-;5ᔗXDBTj2e3S~ n[jh^L>]}6q~w{yom6VufGKDgTZ!l~q~q(wWXfjU̗?;*,'*{Z*B,-%4r|Rrߔ-C-|C}C|bC\|\|ݼS#;[V''zbr"â"b~G^F~.U]JNon\ eԅ!jVNF@eJnHmRgO;%J|Zh(H#+ zԔo Ii MJY%&tL,t5U v. uεWugFd6wA걾n&RJ?xE?s5LBfvRVwcmiFF,doI7˪̴5&e;8Fk;'y8u 56e'geWV֖ j~cyksiv( TG>4N5ǕOMg ߆F^nfn&vfnFΖ6&~^F6`E]FJT>>AK'GYqLͅٻFg iP%ŝw ;qC-;s G8X =6SC,48F =f&V4]ih*o,ka.NPgsnqI,;q!@p2:|\q*,ۙ J|s0Ϸ#;?gcS+4n 3\n:Bxssv{yv5p:u3{<;;9_^]X^^چ^^ v.L̷@6- $tH_9C+ӖE_%@RCX`C}hni[rbNHU|sdp{/+GKk? ܘ֪Ԥ_AQ~A|oy -RbV;ۚ%,]!na9Q\ B2`3]ZjFN~ڶ6aT,)l4ĴTLTdxF:kY-rl 8|bҪ;ʛz3 zG3RzSjSSk\-?0[X8{yZkjjJ!'-7%2͆9\KXHK]Dh78/7U6DZ~+E: w-KJ/KO/JO-ͩ)*j@YZQY6P=4ݺ>2\U0X7Xb5WS9ȴ4<@ 3|BW9 킴- LLMmkejh0HGFNK,']~EDMvqUf >zfrzQEd#AC{ýH=- ?Y]8׸dؗ$hWOo|r>﹛4/Đ̄OM_5m3*U?8Z儞 _.zab:;Gt}L]̤\}|Zyd`bj\[<[J77wHYܛlݨ+=-?<^}upy#u~t|ciuu}akgagou}{sq{aq~"tq$kqbgkp?⟿WB?k__]ki6UH[ s~`ITlJjRATPCl|Ul|/'`_Hc=++_PO??oWw]+S-m+y@Њں܂_a~A[*YؘX鸨 ?#NŴ̌Ҳ4muUP@JEI h 3zMY{`k4ZS:TS!?5(w`yzpt[K|ukW1"r_r%4 JnqaɹIiE%Yi]IIm)1IU9)ƌ4L$tV2*:߹Y11='yKHGGO !dbU#ť~MC.Zʹ+)sɢ E 'J7k{k)Mœ_eYUyy%=e-u3MsM BИM&)⊲rJψp0QazA DŕT\ ]u< },oOtHEJ>6mct7B0a%H$J@rfl8RM͝`*.`*rTִ+Bز?phThw7IXjO/\¯n.no/ '+;K텭ՙ͝}vOK`TB99+6N.U5łMPJYD[QwpX6`+/Mkg #K PUJTJSX$GVjDNEfqMvQYrjVDD|po_E[|nA$!@.A?sܙ[sV]Oݽ6~AY- 5S-uUŹEU>nv)fzFV6&66V?J}W|^H櫼ڗR*ZJ. 1%Ee{C\SRe% E;߿K7fϰpN6-Elg`XjT|Uv^K~A{NNGVF_VhnpvfoVR{Fb[f~}bh;dL4d.\2UZ |7H8 `sҲӳP1q2r0ՖPqu -nilLKh"H櫍L+w2וv7KYrsNxX^bbIfvyNvmA^KiQ_MlkrwbGXgYɎ6)mhԒcGO/Llrt|2t|R|RD|bD|RdaӋվ嶫ǍU9Cp8 =Y[Y;\?8^=\;8][Y.:ޝ~;}~WAuQ^S2QতSb!njFAKMK@DBLA(&'/Ig寢15K- zbJf_s#3vt(EV7'Ŗ9k:0ˌmパphoƬ̶޴Ԕ*- Y*B7ȸH " !cr1rqq03etvlۛ*fq~"9o?S%.*Zivr%Üt=mB~Fj)'HxijFԦ%U϶Lw,[͊.GFVe8k 22&Jt$|RT,t4LR\$ ll!ZzfvM|B\"bRֆ?/Nfz5~z0SoNH[W&ef^4GǤ+)Fqkzmo4ԙN Yu0wP* ]svn'JsO~-BSד^ґP\RXM%NAw4knciqCH`4k"4H 5)PEj%é)egc%M<`.tct | =W0Wӽm?ۇ+gwky+ٿWgO~?\_%2v@/2wyħxVlo^lΉ"#`"[#฀l?0S G#cKk[:_9'E%76嗔z{Tf'7tL 5 77Ugd&ed'fĥ'x{FX vtjk!NWCmkc}ic207񇳽RLzt2ژjO;=!-/(5"<)>99)+1#1=9+)7)-)1&"܏NG   1JsȘ*?x|8>>LSnfoaU}H@€KFGv|x`A'R 觯rn}onn]TjRTԼyqѪTmPsar߫Ȋ'" &CyB_E2%a xz ^ΨW:5APvhjngclF򘘞l\|tquvsRcJ a!}e΅+kHG`,d!Q`^2Rq? ߃o_`0֟?kۻsǧGG' #y[ GGg e?DZy5]U[UQ8j5UFXGQE:!>"66:2-")2'8 %9)%:@Ġ옲ʜ􌤠PW֩ye٭Mc3cMՕ ey)Yq Y iyFzn^Q1q! |]~j~7eD㭹?˳K 6:^6T<5= ~Ώ]]6G:Ǵ5xgTD%8DGxfGF4GEF5ƆDGwEF)r 30b! R#" c`qcIਾ{5;zeiXݨ$ȈawHX7&8 "2-6OF_nNDY{ikX*08Pwn6* *ɷF`MUwv wqTSVЀ0|݃ o#6XP刺0_7' :dOnkyvzQ@4ɿflZJZg_VNʭxX33 v\x|In&%#39b вs%fQv32Oѐ x'+/`ogl-B:]dқP>碌J3?-&UwWk*39 6+7~ kUBwcr_Kg0gxoD_o0BB۩ヽ?;k{{G7;+@_?ƕ!+߁migAM场d9NtcyVVk*?1631z' 5&:+;1:2*6?hX*I) ayiQ^޾V^z!F!%=M}}=u-m͕Ul&fDe&gI7RF0Цk}HwN5N5ri05jqacqj4*\RkULTMRxeh@azEjKEeCfjfb;pߒȸР@؎0VĴPUTP[4boPf@{gKvO^dmZ\Rwm"E!Z11j% ZBr3]; n6_Zq%Ù{=wJžm66.+vl;Q_ ;-$zA⦾f9rXk+ (gE/nCGkDlABĘ͙Q/[$TYk5_7wgct{y}a/g}<{btp }WO`s/$1v7b` f(v$ j_ԭ|||GFBK@AKIW=Gցގ^6?@뗇SHwxV|nyn]SY{oC_WM{guK[eMSYieNv~rlvlXntLRt\KXa녵VKp/$sڔ"?uSK 3c'jVgn,L̔W6WeyNjIup`ұ5qsO ,)(ˍbb"&M嫕nR0ќSy%!{SD=5فinBWlKJglpDJddQ Śl[;*>r\^z#˲ l̾sҫaye')fH2,-MLF@HӔQn8p|#Aí҇}9AAŷ# l/CNCkй3- a/P5{B0ɥG[ڥ,_)jj?uGWdM4)Uz &ywPX{/s"|8k ֭ZCf@pxa ޸LhdJQ|EtoQy氋G-YoÈK u%yy:B3)D+޺N'@OχWK+}uu֩:\>_0=czFڒU$m,m0fղ;}p@W{Ww׻O֯.R8%cy;"ʃjQNi,Ƚ?"j$:k534* ͜exO:g ,B$,\2,t||\jRpӾrJ0 E|HFp pSk]yZ O5a;EY$CSPϵi唥±թ?mW7ǯ A^_3ٜZu,H;!620`UwѼ~p5ܭ5+)%!Z_MZ8:xuߜWeD{{Iv21^R+I;7ѿz ~evUwTpP˖ Z{C2"nXR}Ȉ?@u&+)`퟾բ뵜ݿ^!UϬV抌7..̏v %Nn,4N^_^L_Nb?S[~z,?ɲ"_ S9%AE ^mۘaYXgob*@o NL鈇GNHa^ )84<4'(5=7,$/>xxWUIey i$`8a>OzxXIMT85esvo|m"(g`0g0?+3<#R ^Sկ<+ %270'8?77#IEJI_SP]z`E~UR#. *“/ԝ݄쳆{mG0>3 %v*բnO* }u!NmnVYr}y;|J AE"b{I9 ~v `P߀АT0a[Ը]Kq$'ݾ}沈J;OՕtLYmtxz\\5`p  Y$ ~7GK#U_G6/flΖ:;Yk[ewAf Z縯wGLg<;#1  94b3\$ osІⰨ_y(ߤX1Ɉ1 h)HX hp 񈐈%$5u 3 2R}wֶ’ Mv^J~&.&V"ljytBx\IɲHToܝG7vNa7%;6uGZ'3~Dƍ7杵f3)*ɡ=vfg?O#V׼ qzuwL܏8=KneU y>NnAg`\l@߭Ń_6 @ZP l?|ston>_Zo+nI/ϭ 61]I.ui54>>z0qYh| %r!BPNZ03&5 0?phP`w%q'r+&5(1A fa}1^jao>Bߏ;% )OG}-8yG8thKPLG`|b#z?t+&߳v/8ᜪ}lnJ5i\W0`:ЃEJFlz3z>Ii_阸pȈ1)ip9艙IHpi0etDU9"+c32B~v/((X髉#V$keS;σ9#zҲkrk*;z꛺*ڊ ; s2{rsRB+"bLq 41( QqhYHq0q IDhiXX%%xdhHyߚ:e4V}8EA`°P X 4'NSӀԧc3ʬ8_dz&10t?B:Kƅ'0Q`vRNnLB猁}6Ikl:ssO=y@缡^%oVYXw"?{75݁^ɿA_ړzaw5WH!a ՟A.TW4ŧkm:kh_WlcZ>zsuٟ9;{70Q2rsx[p5p1~#  yBFjtpV=_McaptuEGU{y?05č*.(RW_I=ZLmO`#pp28^ž[b-{y eeEH(4zI0Π!AB|3Z4Io:WdXM]Q[Eԭnowthu{kh",8+=%?.0;k)"{Nv_>Q.! 9a~ yu--55 ՍMy٭YɝiI] Ej"zj)00p1pQp  !aңӰeacc pM)k.[YrszzG }AA|4r>8y$ JQ,5V}>d}gG֗۩æ\NN/xyrc/!h2MYfn:m=&Er~xP]u{iIZ~(ݵ >;LW~3S ; } l-t/g_i(\=Q?Pb_n$o)*ȦEfdX${LV༱J+<"*2 Z#&YO)UH,TK  ǥ'ebC#aAFKBM`Wz>w29;;+;9%.;q"bnbjLR/?=/Xn\׃\ܼ"BÅ)s3+r+^ll.)miLOmNɌLh HuOpYY@S;?,2?H(XD-2_YJ`]oYJht{UUB-t/mzX.#9òSk[f~Gيђ"C< RȆ `2c5~k<FCi x^)R bL( ̋3Q"d #elh郮_B!//8 NTnZO M>ZY?qN&^_UVN9ጒૡ^p}v<חPnA+)c1Å!0!!n(L&.+Ke¥^$D_$ 0/*pM-\A( S. XmzPaQ|a?x }8̀G7ݳW!85?Tgbwk|~ ec mEk}ٞ?09?8n]>mن:X}/6^HEE&!&FA`Lti.k-qm ΉN x+g,GD:u4ĕD\%8):ُNC->?i-)yaG4Ϙ̴܎3_dxHL>n5U U5 Yi I 1a5AQVEYqH: X|FEzb$@ _㋺A t 6LE!@c0~_]4xkk.,4]=6t:yq$Q^*jLyd]-ZKy+}Oаh; h0,NK=%&.,29A]HP^wY)Cv*l䥼 [+@3/0G3-u+MCkV~{L$g,t>1co0 ^M6^8TD&6v1/2rЁ9aT//p~\E-?\CI1[8\FE^&&-IA_aj 20r0/jp]]\DT۳Ubķǻ?(_nݭ> eT$ :L}[m^T{~R_SNmeTXFJ@Ȣin'0'+5 OR L\d,¢?ThN/<}n]skj}^=fe>|osig{pltlp~kkpx{r B0ҍݕK#ccE=D4 *g.|Bwy:V%بca0ֲ(LreEf.YrPT:tRߘ!'59:9.%9> ;nVi!~qJnl*i,<^"/) #6F;~& &Y)k$+ ! vzVG'eE&D9YXږDԤ.5Ve[SR q'23&['/E뀙N;'!FnZZVYѶJuT @46jx4&thP+ d 8V^oUm Ɗ `ysxvy~lП@_V+֏uwؚ_!>0LZ&- ~Upwp؇ NA/AO_?Ɋ9&`5S[A{if^aWw &y|{|^m^l[88\ݟ?<;)* v`JHn?%= /[a^YI~A4V`~3Z[k [+̤7p/Ĩԡh_euREwwkmCezb^Hp7'kˢW%26YgLI(LL̃O重O̳4!Ÿ.xlh~Ӫn Kjp $d<>8{+Z);!7D]b!:eÄc98#O4CYh`oH R,UR6G|i#wdnz u;l2h6o_/COuQYc[P;Zs{WԄ$Ԅ&f7eVVL6u6u-5w65=T19R1ZW3^TwX4++wHsG ÇRbsJpNW^8h,vN:ku@c"a0)<.vz8 rM(LJ./]`Z\=I IY_L-OPUֽţ/gT-TChasi2jjn.rpt]m/G3۫íS;{{{s[+s =,_n=?]/'ͫ˙ ǚ0lܘzIZJ9W.a2\?8eeO/-33_'=pMiii ou'V.WI\_]Taj&!,-,DlmK88gHoիpXѼ>,cdfr#6ե:䣐\Ii@`o`kO{`wGSU^WX !'1  y k&K҇(Ho "/S#" !""<#Cp^`d7'YY5eֺLmWh'8h䘏h[a􋈰{ g(9"iӝ!].Xx8TbMEcj^r.4z;bZbYVXTVj2bu, - O|͡qiəmYyEӕsU]+E+}y˽9}]s %ky[gkעBV%0nu I@Dp 8N}y~z!xP/txpfr' Cދ xz"-"/  s% (,^i~}}ҁj}~2%?I~Y_Z' ݞp ;>_Na>p a/@ X_Y3;gpc`gj5c6m<^l>ߝAOqgc$3߳!<-- '!r>lWw䒗*bzBnqSk{qDAj;-5-MT`n_|gcP{EY~ڷŬzmߡ ̫x4 º[K2j[˭|~*jh-^q<~5Jbem0MK,ol֔^u8Rim6 AWZVg]IwRzFWu 6 *2zfL2L|& jb2T4_x[֎eq80D"("<)'&2"2# "e~VMzF`BQmkemFL \%$2^Z>RU\IHpi{k"6N $C%EITlvjƸcS@pEiuE{iO0ɰ rX4jsyYaQlFX`JZhHZL\'k'|7b"ʨ؄Δ윑ŶŎ셎̅܅;"$HNBoTH/4(/pZ85 % )" U_0>iptx/L/lt`^>!A4\F Nder@5  >D,o Px~ e+B4<~քML\{\.7Vsn3W C0owOF·AW?'[6Yٝ;?>9^^=h=?9^~KlƆuD45TDV\a^)wWY&}TQY[kRλozp<=ȷ2k(:;K[^܎pmJ}FC]A+u]Ypt< ޲Srh/o^(TpJd8?(+.' S.?w, S-;) 腑B[oJB/TyAj*0O@ :#*#Ƿ1*"2l7TQty>r` 6q00N^N´ x}ay(`-%cf %O&* ͇B\T;Q鄒>kI>T7K2 X8STc_).1&&0=aհxYJDg0FR]QS^_T^SiHDx[U!*b2-((( d {?0ҽUXy!d'7&9gHhMNXojNSaWNABiH뗠NIP~ Ju뀙gMiFldlfnnae?}Pc~5f{Oɚ|PZS@X MUmpm(aJƗ 1 Z˘4JXtwOtNNN4O/tMMwO#'W{[sDN0濬 /+Կ(,QT0PVbo~N\|3/.VMZj$)STԔc\\,߼IO痏u-*2MGMABֿ?+y0ASw^PXIYMMu' 8~n˙A_+S s_H+Ms%)w>$y` gK ?CʉKT&9!9=>UoeKZ09}sn%UUo^d qx<ϑ?G9n^<ӣ$r5BS:=83Jr(˒*R_%igʳ k_OU߿տPKPm&G-&yHޚBf&l"`Եə%\ow+`aimq`B!inC vxe{r0d7[ LŚ$E;wC:W$y؃k>! hIM76K}օךtRSzfzL:݀>k=֏V_ckeO5ʂ\hgi?3^9VyboYт l E. 8&$vt>R BG ;.t蜴N},̨{4*#wVx[iAJtx~UnĀDgbk}ծtrvshĶllh pӶxo:ӠS uɤqlȴmJ_p'tm3;ZO>hq{"n/P|䯻iE+w48B;˷T@J/D쏼pxX<22(ю4bfX@l`vYv966yΎ(7Rb/MEr/h &F"麇s_|].q(ǹ\lJ1^8yEϯvѾѡ I!ގ!.V~Z1-H.N8%P]z`[uM5ҳ/z7+_сŤ<@fxc42 .9&EffxIK-%v \] 44tOv t5AӖg:T2pYc%.!%/0;\f'ܵ?$L/٭- Kغbf6^SFp%ܿ^fg,{5􄲾ANgvUUB#r 6@ؔ鞹O;;)"B[ OhKDcOj<"Lgվ*C6Gr %섪 &(#-Y 4klo|w= Ru t E2mkU 㗷p Cv/|%YLbyD&%̔Ko4 GNt*PC-585)Z3곫; gv}6t3 p6vq @.?SH{+wn?!+2n354)CK1KO߭ާG,pv[[k+q RT[=nnŝѹqjt΄MmNКɚY5EL^&mj|* ֛O/ `kkCޏr-wWCAhjٓ${ `u[Z]=ӤHWg_#=\?jhӰeQiXY]E]zvU}f iaC > G͕畧ϟn~:W4:Q'FI;6o=T6vBFϯ~y#/ܴ^Ya Sp'/orӚTBĶzj7G[,Ifr)M ԍVSFX5I#ucӃc-SK}]]-9sk}"?~F {:%FeK d^R1281|԰2[[K/,\o't5? }pytգ7QōeX;';Eyנ3B8N-Eĩ޿}z7u}FGg`Ǒv,GZcKB94${m?txr#,/jt"B'9Ogqث,u< 'ϗSV&kgk-bӱцL_HXtT4fh:ۘmNPIYߍL L~YFڻ'z3E.a~AVI@rK Q UY92 }kWYOpGJy6[ߨt S>Fן8a]I˂7pM54om ߗ7a"S!οԞ~~ۏW*޿(rvcahy2{S߀{1eYIvg jWy_ӮS)#E%qZ~vڃGwu^ "vRKPn%=ZHV`6s-%78E&q*W\5DS7$/&u{hlގ&^%݉4*]K=c1xu'yoӽ-9qjf̧݂B!IҴTdv~KyyMvFc)'fFeGweܼ5ΜCS "}Bx=c?O,GR;t責M;r<:+j74T ,XWh\T;/60X:4ش f [F^FR4\`XLRoO@HLlXg}`ctba :M/Ш$ށ&FoIv&@ SmswNH"0r.C!nI(Ҫ4d7RDaUi~$H KwR=.ўt].cK`mZBX_r #5ջnσ ~U蜠œܬM~t$a>YWeƩ=G^6:R?21Rlt"^E)̹8irE}`3b5'5sU *a~}[ʩ 𧠀t )Wo3𡤀+hDΕQL^it`N%`x6c%f Oɧq& AՃ͠ok&f=|#*zlkG5ĵ ]_31̝6X:O{{5J^iO Z@原;\$뒨ԵWD!sC_&GCԌԼ,DAVfVzZR,0%!>9hgw,Ԭ>^}Ug*cgb|.Bc,9aͳcg囌#M"l #B5.ޖԖaЗ}{?Wn;xHT> oRpy}/<.{^'Q?Rl Ь$zC/wm(J'ͰDA':3ډLHXTtxK{eoCxgHB'7d3ppz"XddXq\ ?+<3 Lsƒ/v:Zo> -%Wmt eЀpj>-X'nwG=$tNY@%)~vS.X l(/kV^ UU,/oe[/.Ş[ st+|l_W4zF4`9Ύ KEdH֝Uj{X`%E,@ח|Ȯ/8_,'fmZ5\HeI)(V \8L;I2db3xfu⾍a8,Οy@\ޘK.$ef+vt\^tB),ޥACg6kpeؙ2'H+:*.Sx+,B#@ܬ ީ\~|U֥o(^yg_~jj_ ~vw5)rC"c\X.{e8JRʒ?ɖUצF0:檌rbtK kӔrXPWqo {/!e{ǣ^坞~ᚗJѮ҂rӜQ>t"8X0Ƥ,* W t7 LL4MMwafz;RƻR'g7V0ĭ<ϼ5$Dad4 N&PANHlbThennZnOkv}\+UQxSGcNʉISmgFVWj~ ɂzbZkC SQͥtwDȏo/WKw+Ȱ0K&!] c^UϛН.)}Rԝ ]Iی$=[!!Fo @U CY3[Ddй7Eآ-D"kJas,T3pCs7%\urZ* rpΟz\<&n8ݯdm9t&Ʀ{K6Ev+}v^]eK)̿sNq%yɷ'Ws;}v}F'wӓ4?&j,>ˋyw_z>W<_ 2Urx:%\3  1-Ȱ/ .On-LOu 4 ԏ5OLvOMMf1 ^nJ,6{ !iQ1!@8,**3.inML '66MA~F=yu5%~]5)ȥqt{LIA< MJpY^iUKx)f3# Mز \ϛ獄U2#k lyA, 0* [Q4ؔDKO_|PT{io MMbی4|ӹ2Zl𳽆jɸ`c|95uL,ٶ3?aigh?ћV﵌`ϋW4nUW}eVî.hŠXLI9`؏L?WM-5NJ\xLa8T`I,z3ڴX:7di6˕ [Z?~yD 8GО#{v%(o?BOW8%. .s;8(qʉ+7HI(jQzb5-oȜRVI(7z a$?GJ%+⮱O.(zwW"ڼl iu@#{@ CimH#<_:=?R푼]iW\8`}{w) ^euۓ^j'(E(MjFJHԻtD$ T&:װiوvdU4LNLw`F:S2g*:t Bɿ?S߉LFF£@yEU-crg䒆D0ٗ\H*诇YA~H{6l\Ƭ\; K}O*RϽ6JgN>({ oV] #-?, PCaL]itead{9:_ t݌߽y+O]ۆ~qefb0[ ,%26ZQl-渚ޭ rHeSA[pHjU1qe=pF^pSEϯk_nzsTU.{G6RG 8_ ^tcy 8tkqj) faX_T: T&ٺ s49g>`b<'_bULbEß ޵὇%w=Oj;v;kq yq9 {%Si#u7wraF;GrdfI_h2¼\Yyiq)|ǘץ7d[u1u#^ӭ~= LX4bu*ky!K JSi4Ddwaw8M9zJQs"7/6%He%&6L*N:}Sz⛛߽Ony0,bu1`:G.})pT\Z]F1&E^XdJD:kebOSY ; þQ-8Թ-W%W;^#FPف/;~kW#.sH꤄YGGܞ{=?z'㬮xK;#0T6U>~+n "aU}zSf_`@8&n5Z\_cg8?ad%@`O]UWQ^<)ܙ9PPWȃ@;eJLu>̝𘐏!..Nx۷++ݔĜnx5C9KJ>ihc+ѦcL[\|;~ "qajIқj6Nw:6ޖᦰ.ޡ\6ˤlq,ntp"3ªBdVOA' &;-]KENTyewɒcx/[ao9jy h~" PVՌ.)߻>J2_?cZZ`J+/BQ(` 3e2}ӮTڻvEvZZnV1 d__ИD ō-IQԢrRS @F~w:_LU]#xWx$C|C&:[E!OXBxsr޿R}T{|G{.$?8<^[Z7120785;jkk@W4ULPLrxHbXhLP m@V,$_ 2h/*+→$6{ѳ,i7Gyopbn{[VXY^\(RD#zho'3SOd,0~r=H`w AwdAA9|q>ڥۏJk_;eZc6Y,V\`6Zϴw.8 8c\6G<6ƼqS`\B"_!.W+U0i=6dl&l/oMק&gjB}5R>xIv},q}3ߋyj@uTzU,fY{cwP3p3mfpeis_S)\\T_PDHPGqhX (M&$πfRS!)}yEicai]CgDOhnY.φNUg'{Z^;oBLiY=,8*ϿrJB-#@gc -_9~Nf8Ee *D:XJ.)עs;iɘg 'MXevff$/mimQ9ر9KqaC$iy])T! YK-TQ-G7EWD/mЕO!~ڔ!rbAթΆɡ񅙱i8>/ "1YQQ)qA>~P[Yj ,2A09\g0W?6ᬲX3LvNg$)ʟN'}c9)0.wC#L eOEj Xtov2i~I 9|| ~mei鋒u@e_jzzzzvnq}qōaGݰ3sA[!HE\& zi=%mdT-#ȸzz)< kX+?J/Ή%;sV\ׂoqJTMrڐe5ȱ`db7K!4^Vpt[UxSk"*b`00a:. ْV8^0f6||=NܱtjwI?vyc$ΆZ; **ۊ.^T9!Uc  r 03Dir 9!(SQ_2PZh{VVgFWzsm6݉]٠dL0 %f+241w_;[:2]dxg[gt~̦fʌ CxE)~1@>4O7ƌ8DT8 Q\+.nצ@X$0YȎF'|}=<"Qq`/:tm I]8&Leo38T6WH+XPt_^'1Y:MWiLYMM<;۰{kGl_~nήozNm7\st,~Q6?).|c;~~2ߏj?fV( &vn.iڭ;n :\7G=p ϭi_~>H\ ^ %V·W#IkQu e="ot NPp\[+lHh9Wg8VB)ve)6e`RWTsݴjVeӘRYSiH䅙 *iA??1u!uo~LpqzlQRzM"Kɨ K[Es_ŜY8qvTRL>Zgˆ_"G!JɊ+KϝET$I nI> 9$@?xHF\N`|c7K W1plp^f|5WGn' ] uKFW[St4k*K+&[J"vyt.}z+fdFC'5tTz "tԏ;ٌjN:PvrF~F~if^uNac^Q-,IT'%U&ģbрL.0Sb==]\}\|#8/f/h=|DMGUGpvzyNyu:ɋ2ݺ~6L`yfHrZ˅&Vv~Anukskks?M%.HK Jy5F[GQ7Tl<DťppV.mp{9;G466rݧ!ǫ!ǻ1׻)ϳȳVUW1X=Җ4ݟ97R:׊]"W4 _F:V BB #@ѨPT--IώM=)r'Lci|́aBÒ'&l6B{k A6+HKjyqw3 i qʱ=rRöžG*ř!9fa!LHR0J 5f_aP%V-` OgjS,^nG;c]wh*&me]STo+([$Ryj$‹b @4(a6;91+$.NBfd2ٕPxe: .O cc2"#1~~~>~>!.>)і&OL^/O9e333$nI01)`ˣʿ(^މ)BMβ3 wQ([V56\ Y_=t' 򱹐c 9;XB)~(Ghׂ۠VC<ƬjmZlZ^ZLQ7;~ckƃ0=MZ%-|I~Jm%B[G7(. mBhL:5 ITEeܱ,4,W*"{+##1M# cSY㥫3M+x fMFTGK4^ *H u F%7M6g m]--3e͐>%DtkrέSƛ$WΊ̟=&-8%-ƕ b,)A [\qL ό`*HcN֐po{V߿8V"3`tpӥ41Ai}}+QE[*E/v0RsDz@Zyg5zi /2uĨ2{?q_uc$zZ?v9gKl<RR"4$R9TXqjFi:, ZcbXH/ 7wo{o;OOKS XCWW\~X_퍱KO>>yb]5T/}'mD`Jc4p2{7_x#˃,~>B¤݇)bL~|n~~WJYʒ疞=4eLVywU_%jjzjzzf L[,79sOn6?/yɗG]Vkad*6!, qąNl{T x9i1q4\0R ԁ#!q4֜< H̏Lm.mc)5&1PPLGAiDxu& 7̧&&: ,Iiޘ)w%֏,Ç* a @%x3{f ;0ʻƔDgvlȉP2O ѥ I1Fk%lMN/Ocu \LMՠQ)UN<[徶 bbzv7]V~_t^ sFИ YaֽGeKiaSOn\ϯL4k>7R@匿\ﱣh BMq|`,mQG^"NDivO`(?"4,(귮 0Q-Jdbrq(?&6L y8Y[hva쟑# Y Ѯ;}cO0s+/^Nٱ9sY2ʠ2xhTa09?1SP_#Tap!-,` p]{c 1q#?feg)\:ݯ[EqKUOE%brrzjzf nnsqk̕G.6ܶS 8^-N7n,tTF&pB@VkEuMt֣crӪ "! 8%U4uV嵀q(?0kpY>0vr~;t13~R^bJf d%X?Mhb޺վ _oߴDB!@/Ufth}9Q ̥WlUL䢠eNLiwG0ʙ=rd;Hk?5Oo)+\vmaezf+Y_qIX_5 fFX9w~nnB 09$eƀsR AiŠ(Xhxj@pOooM>j{8!M]ypzUNNC9 -J9@C\2₊2bk3GzZ7I8#O/6LuVUg导K`` {(GeL6?.Ykg7 [9w<5c M:͇Qh .0,[-Wyoal6m..0' \A;N$/p݋E]-җMZ8m-+n)1U0~>9g#׆ W1/W4XeLP šձɚfRqcFXfR)iONoT*BF6aj@pRm) Җ)*ƩlW!v`LuiSVZZWW>Y\;W;uk | ؂Sr(5H5~rdf0ZɎ LFBkY5蚪g/ҡ$V 09}}t}|/-w}`-*zն5X7159TP`=Gn <#z~W/ݻwRRJry_Ύ+G/JL@->qٓM>o^<|z{G5w; ر}ٗ.˲#"t{)H( JBhܱq=;1w|rʊ‚Ȭؤ䂰,tOO_su~Wo޹rCo7V ]X^]h@P8<ĤQt2a(Bww!>,bs%<\*c f;TZrB ijKK5׶? >1}TNĔ5TA;&V Fv^fٖhߙ=t@F0<*~qF0dwSERӽ5 o {x^zwG-0`l9E#0(TO35'RASb9JN$FFZFB$f1IBj) "g@.LLޘN59>?ӱN>x% S(.o/V7@sSsJ1ڈwNnC ,֑Llks\bN:l{-HfgT'YEk$nIo Jj.ϭ,}XbQ7{v( щOvLlL-:b-RȲrN/VĘre+W[pņuY.Xb"k>_?ܿ~ӯ/^q;}R۟LUv_V[JzJm?xjϱc{mXXw";079)="2=,2%$6'8[//?|Σ7=u?>矕WZ .'E&VeK jխ=$RzId?эvHrw/C"^ 4>mE;)VF DeG>KfkNl֔w1059}rWij29db~1yc;-*m]_ovĿAd;]ծf7Йqu8nWQ&(S |R?+)J75cg0)bsDaN" 2 U3U rZV(UJJ 4ʩMFɨ ILnPTR2XN)*vb^Mz`? j^pWBagI?l|FVԴa%y:hK $.!:ȘWxrr/ *o {sv5ڦ?|X$ , @c9lS5ӛD8E}`tiҁKMN^6o+/5lgf~kg߼l뇳m_3n]5Zؿ}`1jB@ĸ]<^}u{SWso&%gdAJs+urpw%U BW5M}@+IF2p\cN#9A AQX GF%|~*3ޓ?eXM66}|NM&N=yt*-O7gd3u`u2`X[=X7Q2Jg]M:&f~z;|Fx~#~L D q4(>>g}h9jFQd4(Mr:@No3Z E69]fJzSj.F2F<>z^?+-*O',ܰ~D =?zK &152 ]F 2#r#kZpĦ@v5:Ҡi Z%b8u}΢` •f-/-@ {Xs\S3P)Rb,R &TQ(1 ~n ||X >~+RBVKSuUyڕ3˦Y.) r"ܜ;tiMzzW-=zywO}vŸWO>8uƁC6rԐ fTD7m]{nÁC~g{C/+ Pҁuv»N(PU^QRXP[SX=7-=sfO|ybnSFvKfnkva[N ,QPUT,-n@74ݓڃe8&$ ]`- ҍ艽oUx'Ol%^a!Z6Cc>ucerfILN7g:i1kfhVn7ZBDz^dG6tc>>JdC 졦xhh_4t(='J( P/: Ӳ'V+9Mj>D˃jyp-f#T,c4JN!g+Xp%+k8h-oX8 2Z4񳚝55uUm,'>[Ey pnj!x0'-ʃaңKc+ҡr\h59j|bD?ꕒaPDkkъʻkN}-M}rvnl[+'*15%[jT[nYG~9ZRYQ]Ӏi B`DD7Q1XJ % zA%KHK._8Sxz,dvl䌟9dbvdPkA.%K<~$ 0>/]Y}ጦ"y_4O#*5esrSv3:Aٌ40 +A@%:5JxpX<0,D!4BV 0j^߫a~O#Љ:1Y'hL^˦YQ'+I(5EYdYf&w?0U$i1xhTAe?RF 69>>ӫZtX&(:rTHErRJHj^bZ6xŞcOA.1&Ša+3۵)*ET-t~HTQ #%>;p~R :o0yWu[Y*4i5z?o056{ ,qc6{Yl\itm7ml;=ՑWk}fǮ;vܾcwoYt͊nnU0D?$!1CT>ZV y'bulձ=nolsllVn:ן:}Nl(l.唁 ymeHa QQmB7::ݸ.w!Ad~NOAB ^A!B`fIV6_0}r #)*Fdxj^%=/`MN+^S µanʋRDMQ땔 ˠEpL#6ZlP 7"cdcIz#S>"c(8`{jbl,!yڒr]a2%Uf/k굀 }m*?6AOwt1!j6*4)t6(`$lMTq*!C6UZ]\ȧpQo>anlub}|&E<ا-EF#V3$CO͔Rtkҫrcji=w.r#J.#_u^QumGfZK(5MȰӳnb%.kp m~rb.th[ںkۦ-66;-Wm_8r%ӖY}܋;OKBbZvTBnx\UlZ}Bv]jaSF1 UܜYd4 pA%XZ ,d7%'rRɭRC7lKrۜyS3VQ-L&FZ0k2ljv1~R䃣^ ~xf9x{ʓmş*Ĉr =鉚R~70Aot0cs踁l05`8" "ƎE4*IՋul5/Q D7%堃ļaqNJ0نaըax|L?6M'y0296:5al<e<ԤAK#'&3!-[G2UR'Q792*r>I~+ =|:O:t R||t~?ϼL$F :PQPRúDR>9_u1dg0"@-Wʃr݊Ƥs#z䓞C J>֡Gޞ=x_]RҦJo9[x6~Y`uԣ#LMM/Nm6c-V@~#ͷτ랙9kU+-7[juKY|< v;m}.}6hy,y_?k.>?}ݶo/))LKύ-N.J,O+O+M).K)M.N.ʉH MN^V9 94B#J݃}ڴfC6Rv]¶-Yo2dV3'l6uۡ4c_Oe?ٟvg]w+슱jk; >%?fky:a8l\7"OIF$ S!vQĨ lb!SyQI4nD0"53,H& (JG 9Aͩщz I/jQOԻ@Cxs91$]Өä*kI J_#zR%y$>OH3G6\\YpRW'=V\<\,Њs9%͌~b-]׋=Aa|k܎}z hIԓyZX0'hwyݍ~N 9cgƦ O+E41'`\zǣcyt lR;T#tc}o[x]ڽ8fп#AFp;,Q^}ffu [k-S> 2y7 D1CV?ޔ ۝  9LPxeN>iu"b[[W/]0.sNn{meN1qIY=w (|֐:wauӮaWجNx~Wl_]bmWYY gllu#V6jj۶[2_g1s\+EXzЁs:ȶ \އWH{kk{s+0<7+7)1)4"* 0?;{XWjRHYI&7Šc3_sZy3fv0.6ni:trO\1mr-mk[tS9ޞOu4њK.t_f Oӛw/`9B9:zA迡z'cWUGG'& :Z˅T1O{9t 0FqsMͣ4Ė}f;J?6•h==>zb,|J,uR]Tp;09lj+x#^Wm)AFGdJ }O~+WN .4;SH$4uė ު_( <eyUoFKǶĿ4:2úk*3CRK3">߼u讃6slt6;,/^f&s|:cow:qh;cϲڑ]($ލ":u'54ՔUUVUה555ZApH=0`eIη_9|AsulA,5/11R9dbY'kV`.okx\5ŹWgϤ<ٙt} M[a;;wDfA뫼2p}& |q-BޗaO4ԧz+qqTmL;. WEMhǵi1uxL^0"S#=HA R4aQbhTө ѿ\lf:޵e|y7\;QȰV|]2$ph$u3HCCsF0x.KE ({@c"ZY\VxkWoN_ h`auǒT x4t40AiNeS (25j vCFW}VIV':zdFKg K  @ھ:` ĩuc?uI7 CE^F/j:]ƋqC%1 Ȇ PAhYjTqVAjjWw-׽nfp׭O?9m%/Y6cVׯ]cwǷ9>k.kX4qx"B!3x 5D9l65MȌ G^ag,]4i:n>gr6s͋[/m1KV:XSZU}z-4,Bg֥k؊[5wMhmX8|#qcYc/%0vbɾM*&qu:wTQhfu$-/ZÉT 53m La^7c[eg:fd9f8{ò EKjD! D"3S^6 "hC0 JA=oR0<Oc"RʘS,MĨT0[?\[ʁ榶?;Tk31]H$UIpP88k}T}uGЗ!(K {A o2u\9R|/ae}L͋ srVj)=\^FM*%]dcmݍ!qe^xUFJSAYL`qF~ZzWGoݸΉN>{mϹ5k996CjȎF*ǍnO0vXlQ>٬g}H÷ߚ~\lM1V u-{z_~B\)N4{:̉t ]8Hg^$x'9J젥f3??!`=/@Q3~h8Z~N6*SӧN1;s>١1ms)<]Z9QLt]1 ipmD,<'DcZpfR~}Ǯak.܂@@v@Qw縛^g\Lޱp}0*:{u^Sp>߇ڣ͗Mf0b.^ΙHxĞ pqG_rk ,֮زq6U+mXi|߸h[=͡='[} =<- [恭j# ɐԎ@:, `v8~n_n*|}{IpRUN|S3|EÌPtF 596*bWŽMO~ۘԜ%tg=5ӯ#'(VXV u=}hNl06H'L,A ]RG# bRkgr $fu#.}m;2_t>7 C ځC2eU{N)PV5;⥔߳cÿI٭8G!"u̪2Ad %5*ޡv޽S]>v}F|xω[l؟R"UxW>N `{<}%w&E>Q?n;r7()e(&9mr4tltᙋN9v%'-]as-oضeӁmw[Y٬ܱrv֫m׭Zfݦv캶oәZc7>hmwv-{[vXxrWʯ!W~jca;aͲGwYvoc-`S'+t<]q( 4) 5aHZ{4#ft0BEQHno$'堃9@no  E~b #( z(f;5dQaBǛ0(&LJ~Y6m}SS Ylg`;c NwezB ) ll@:plc&20@7uб$N1d$AR}B_8o.nu05EPGT4aO IT%7ys;?;.1=-&)!82@C Oz>޻;c9˷[}-+~ޱnm[ ?<}(I 榅bC< O)pdPT$6zcS߮3Oϟn"1Rrt+43Lm_oW._?}ڃufcv'nݵvMG۷i6v[{Cu؁uut[m__gg:mx<]FWnX1qέ Wʾ=:wFޅE UGۓEǫ<6?E9# `* a$@CoOd@TfWBgƜ@%)L*ʛR $rq\l / D0 !RJRbX9#^PsJu&9i9c/6(~Qbjuvʸ7o787P@SK#0sr. = CK(RQkE+mFucxtA.AXS9T )@`T6WniЮo뜖\W[]XR)Q)iy:N"JbW>"1y]9.Y_zeU@"J8"RUlZri/g|{Ы[g{ݶVftɓB)oQAaXd= 7zfߕ;ȠXdz&(YK?G|czˍ[7ٲ|͖+/M;c fB71(vV!҆jZ5[d6kM5NA1V<\4}.},֌iEyPn;zS#?;';'ң6\SQR\SX?M4kf-VVOf,9oVvsݙ$m._ 9"Bh(S4!!)!gIyRZe^+F5ѸA=W:7Ⱦ(Ծ$uI̋ר׿.'OqhL{ۜ9TxۜHL Jgrڊc;*S;s{5xx+}րBk{:L\B9Qe~Tэh LB*<|~låݨN &*͉wo\B3D蘞˦ D-Ƥ8~N+$d%LwrC׳ʬ|Z<; >ܴYrdڂ->1sƇ9ߤsy)Nlr=>u:R.7Di3μڨAN^Eqy٤ڗr:E6ŶĂA ]I 9RXMqazznv^|Rϵ[gV̛zH %qfb|al6/Ĕs>.{Jz|Ƹ ]u% RV NFƶcMn*>5"kOy`_mHӠ9ldL_%TK𵲡z^NnSz9^A?ϵ2j\)&VbbT"&?sbTV.gVI*n Ԍ xrTm4Mc)__=٧8d89)~Y9e/+cMI)o5oN3ɈRSZ݁i^(hY2؈iv5gw7@*R 75"b;. +,9f;H_?zB߫¿D7ʋp"+>6K՝K @>|q}EۧuHLM'MgNxMG_jxNAk!<57S^^շ;Mq9^!xRk*dx*ahAoR"@N)F*zQ3LfC4,fToVQ,VpjrX<`P1ƴqnbttr|_1DȻO"?>&c۬Wya/"3eEgUj$7˜ДhtҟOv36΍)Z=>Pn$Rk#t eU%p ! 3%;"0 앎-#Q[-_)v71ZQNJn_4s`̾V0gtJ<9ǽ|1s3t4y#KM'ȗNk_KM|zGwk8_X~xFNɪ+n Cx/p_|Gq~?{m{]b( ;*9-s X##aa=Q_o^aeN'LיO75}L<ߠeAl/dUXTR2q)\:{ -^)[Nf{3'x :SF]9:r+:2!:c[W/b> @G}ed|ɧV %+fL751}|Lͥ\ud[=3Jn {z nW>o yJtE94x%"01!vJ Kr:B@pdSYR4ӭ1jK?! p`jԘ|=Ϟr{ĮO8qқ/tyvV:fSCm=k~zm]Րp73ϔFA:['0ia}Y+K^~7KܯՅG7'Me/^>bު;gGXt"|){!1p8-DOASSr ;Ӱ0(k6 J6sh#=׏F?h/O.m IRx5澘ke3+}bxlrahoubwmB-ړNj08jZ8jҿ׀ncP fQ>dTL6Lc-O?@⠗`RBdFPXdOЄgx<$O-$ S bJH R ҃1M9*r0/^ 14gnnOq ՕeR2$-uy®Zg2Lj|kEUQRJ/ppG'ǸQ] ~ck. tAҫَlR6[@o.\-i5S |`Qd Xûvxꍚۋ]STy۫_;d|_Pc.RP`f7~P](ꋄϼͯ\P)M~~zї{g3ᗇA>>/άzԴɌ>oR/]äet% S!`Hszܙ.[CG ƉX-7^5:.=I+I3f[zdryjwuNV kzVu+e֬%| &1ncP];I7 'C|¸5eYu ioj1ۅ{ w 9 8ȕ$M|ུЇhl囋&>D[ A$$fCkКlMZ` -^B|mVxsI[i*/5OF֗+e őζQ+S/ wK%=YI=SՄ͟~jj^7Z7j|O,+͟nԵeRZyPM1;W@k+ 44L =;~XC?ۺ;_|?ov=&L4󊌌cY^yVo|dz[og$G![ m>-<6JL$.SPMhtdt 3cIEb"k:Գh6ϮU #Z=zw%aqfW]#5C:95ٶաƭ~juVƝ-j۲c1){reWWK&łq{θ hoR1tXo 7Q|$2mϚv5Fp>dاsn6Q>'g~NN..a S=3}q~t? Ke@J2!eLO@hJTQb*:;T 5:F@#K*;i8ϊ섮Jx`eyuusvtrc]i4vU-+[5tnK\[+V4> a8=OzuxbU:5 e4U͎Mj4>Db_tk jf[fgQkrm*+296$mo=k{pÎWΑ;yMa}up.}-KOXR'A#+C0Ô9`|5JXB`wڢMWը77ͳѬv4|Těn*m*B. NW4 SSaxIƨ3^<(Yٕ:LRTfEhծ%qעUY*KĪ޲喽M˞ԤZ5* [9ZN>ߚFiOfłEb[j߬߷Yl*ֿiu&TO>#|N!".} 70䰇hj'@ `>l,%JI2 $DԀ*\\_ÛvWM Ύh+% 7tVTW䵔Fzf囻*tݍlm{qT2<Ә-fQkQNKh]aǚ?sOvioqeino;2'35G7[*{K\ˏEs1slDS2ॡQ JF??GkLÞc/O_eJg}[淿~ۇ~thC#/yxG^=v%\&od C2L)Rۭ_qEUmm5a}cdK.+d?28+M ECu {^_=B{7xg*\v1=ԑ&Z{ɑ(_N/S9iw/E)7_0֑CGw^Ţ8omM1<d~>-SzDızDOMo!^xKYΆhmڂ~[nTU*Vg3퀸5{Ym.Y];wlv v@0F@NT@vS;wY*c^ia%x{ J | :u6*vRÔpOB%@sTI/&ADA bo!5N<#Yzfl#ޜi)HnGV3B*) JpwC82]5\/ kF淶 |qpsr@>?\MJZlլܙjhU+ z]>2ӝ<5!쪷gVKrÛMXk[ynEVw 1DCj2ͥ)3WU9,7|ӊn4K4oދ1C2f&+iN@a䗮I^~kxcGU}fÍ~WVngRKnqǫY/nV=x\5$HLNv(QM,l{%y6[^~1V6ܶ57\[lm;1MUorm6__M_=;\w~KRf3l7[f`fsu'Fp؝?=eR .6'>WQnIwӢI M  0Dr |$W1BjϠ:f ϰzVd=;TC5%td Cy3jf##5WWOJ֗f%rI28+]tf(i~ۢket/N4++6 [Â).F nvFw^LKpbVJj TTQVo9 E¤s=ޭie2q>Skُ:3}hzi%1)x闗t|~}zWUF-MmH㨒xCA=eoxοL߅ni?:U5P3jR=0ia”jBH++1*fͷIG#ELR]&?6jzp`s mMdmvf6uas,9_g_^4 3qǧLp{|f'$8Az}w {b9y@>V $>xhR@E 1-VMa:o oɋo)vybZ#[͎ouU0zy]͒ɞΥq̠STɉMvG +krn?NU * za}`qxY;,+Wr%%c6yPiޜ7LFZ. 6fG拰#яܙb9.jXKRxWhŸ~fx[ZNG0/mkH_?x G}9k7|ãGM1=;\DAo`{bPIK *H ,̄ ▀K>xjJJ\,B@a'C@-u3;P5B@%_m*mZkjinUi԰l~V+#5Jn+{kY,ҁQagw$jNZ)ӉtIg|zfoiM95\ [/&sG|y/TQ<*0al~yqfLLSG@Ο|[WQ;upן7~qokzF~?|6t?t[Y<Ǎ{`'DH|'y/*2r|`9ƻ‚g&LW)Ege)߈B$\‡@O A=| 8`3Xc 6}~~g (&v?9##ʛ|7-0#TB(%Cʲ|$rfx( TD C@4iD53ӐWωeEsR_sM8-l T嶗15US+ʤlsj\!YlKkSjʦtvѬk[ԭ^Se4C,-حkm5/k6z7f ]\Ylmd>f-]mioЗY&t7R]<ڋ׿^p63?&E~ak^}꫺V޲sx ǻ/_Z{H Bpc#|HOq:-&Vε %#y\6(ac:lS01Lv>% N<=@zkA4D6DH),r sK rO $D ::K -/"gf$ȁ@ TA UfU҂+NBkմp1=Q g7r>!stWh/(l;+ÍDnOn6&GW4F3 El8+4uxU{\e >'T BNW2edVSH\"ܒ* lZYhRus,A37ͪ6n7V( nv>M yγַ>|~O'kkk ɯ޵͘9>oj-й_6`/*"J@CHRCQ*ΝiɜßLQgւl3[eiо_`_&_N 2%<r㼫"?}N$~N߳@Hs@(h 8`?R< '夆gsa𒬰Rr d gOnZprJTW/U/TK^~;o^x0z)+˂S o`go``Yp8{w }w7O^}CqRL)^P^-E<@*t`yisf@zLeM=h՛&۾nXN="|c̫i!BA?A<~ӉDS.6n }a@.9匵'~N!O|Ϣ!Q h%>=93=J "˜NjtNFL!(9L@P(CD\ APNVdCԯ cEճc8myHoIؤdCbWBhS0XhP[rʊkڪzZ%=oowXL&J^ lB폎[ۿⱉUfiZCG wh(56 x/paYwD\>XK9>W 0!<>]P9# 9!7+v ,TrbBGb[>|q7&.)jy209P(G 2b+2c:UЃ/6s{yfwcMeҨ- =u SHHi "v :)@@&I'DcJ12jP9%P-hB~$$( W@VˊjdG7[8q-96.(O@-l(UI- NQg6 Fa$f-N2-j4 6YZb=As`Gj[d5o Ү:Ӯj:rZ7cw7,S; DcX]q/6V\۾U^FRQ_1sV V^R,f ,?E^q}h"|\+W$TfF]C왖r`ĹVVPj載iu5O&v p p;r'#>)9ڍ~t. r &8fAML'S@.6b/`!qkIn!" 1Adx(Nˈbj&T* ,!ȷ@!1D\*laz'(h3'-K.&Q!m# (1#WJI/$7۫*GG{JAk6h :tmlX,O42Ŏq}ޞozڦiG0\5wfl*ߛ=h[jB1soV)jJf:J7mk<>9eiw 9P/ɯ_HIwJAD39¬brl)%Z@N)Ar@V_P1-DLaDױb8Ot'%MuuZxH1#"rd%TDduT JjZf7Wv777&zf*rDff@7m؜$VŬq87J*\wŃ5o_/Js~dɲ ^xaL`$3)iklż}N[b/s -reό^)xW~Wc} ` OnNo1>#T̴V,lL)Z¤ր?OVjԐ)!7Ro\8z ^O r@ wH2/ΠN#"|&$ ''Q~'·@c/b!0Pe\MqA@". YHN,&e BzX9-H@0*SܠH-J̈e5pg'97ف⺊!7th1#^Fd6sIec"X|ilcg&dv fybCޱjUug͢S; gu]O~klϝk' Vd0no=Ҿzv .6Ncog/eQ5{h?XǭܺE/x_,bFe>cCoF%Ց":#Fb_ҼJVv&j1zQ7҂ϧ_N r+-FJu|5lUtUZRݴ8O*1~pu9-B4z}}6~}HFCNr =]Boܓ7.f$%! Ot1 [B Xp!3ZI v] *Q"FL50Pv\'1ޔ؜hE۹n"r-\LwYz98)wTȦe#5-BVm U\:۲<=.,VU*FeM}+כ:\\Tx_9?XUJMlj%S0^(h̯dSy4'֦Vrz`1+4$Zll/& =q"Q~5Л΋#xeQeӍeKM.0Բ-Jc֙,,bw}e="^ z##-#fZ؍kIWױ0ibp/ZC.5&1RJI4s(t9rUAEA΢s9…\CCOjdD"NrB^&GI*KrWI<:ozTA\^AGV3kٱz1 |T[ YO-#H݅)Xs=%ZF:ڴ|' Oc`0P/q@w|Gj!6b$%d$l[ )ÅJFt%=^*)!"jx-ʈa&<rM7Zewۢ5mK,EBG/->O,J)V&m56BcL=$7=t ACv">EƂ]/'Nܬ1wU:%ؑmʴ aWcZ&6'Ki˔+Yn7B[f;an)FCno句ψxI%x1fΊ| =A\@_"|!@؄B.Ы8M,6tA*6fy> Y@ F\9=JH"r(P 4; eوF69ݒi`Z ɝ䮢a{h?$.g5 3k9<|6ެO֬]嘎~fǾlYUrԲnQtźb/͊Žѥ.`RB KJ:.9C+$펟'>@ǟn_T@0"PmLenrWCVTw~pylSC65X^`;]Yk>o?UѣҢQSoB"oQnnniSo'‡J Ay 0;vV)g1A?p>r -'000/1X$d*ǠuRf8i\Sb BF|=";!\7@EP1-_˄ײ9 brPFMv^J'?衳 $ņSxNjbA&GSqNmb E)]%2j'o*_HeVo}3ZFk].*$V'h1gـ6giP@MC D /UHU`?5/㿭|"گ(1%VhˌR1!ʇ%Ï_V' lJGR"jҢȎAa\hM>9XY ;ZL+5t-3,N!֝vE=Ag'c2PceŸg##ĸGOtO wOvM$h70ώq#]J wZѳO$$KX $ Ouz n2ArWZJA0pTlAFZ&T281 UL3Ŵp15ēUM36䠀sQ͹Ht[ xY]eɞQpnҵ7:]mUm<ǂ LIJ5 Z3dʲ:e]ITZ_`98\@d/l}wM?}M)図T\7á捋*;:VGV-I7,ZͰo7}X]H'-%ܧ9Nqw}ЁN 0=;+@QyP z5 LD&<(~|/$]L\F.bakx-5C@22+U$1YnjGU0QP(+]MɎ'40f6nb[XY-bJm9&|g<]u E`۶VV0 1Vyiܲ4f_ݟq48 [߸qq2ki ?C>Cw;エqC,RY "I{l~M%U4V3>e.%6 endstream endobj 790 0 obj 152406 endobj 791 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 792 0 obj <> endobj 793 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 791 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 794 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 795 0 obj <> endobj 796 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 794 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 797 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 798 0 obj <> endobj 799 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 797 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 800 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 801 0 obj <> endobj 802 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 800 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 803 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 804 0 obj <> endobj 805 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 803 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 806 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 807 0 obj <> endobj 808 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 806 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 809 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 810 0 obj <> endobj 811 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 809 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 812 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 813 0 obj <> endobj 814 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 812 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 815 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 816 0 obj <> endobj 817 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 815 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 818 0 obj << /Length 4378 /Filter /FlateDecode >> stream x]]d _1Hb'qnAW!D@hP$Y y;8O݉QCϿ|~W~߾O~8;;=}?NB&+\y4Ӈ4)y|gzW?~$L\?_$DWoOH/x~~ksg/6L}kgd?;/1drDg' zsT;]dAb)|~{!'S+ҍaSM|{^tE%Z{9șCX ȗ=Y;0<[6uQ$^"%K$=TIY"mH"5Ҋ?8HeZ 9ecҁ|ٓS-y򾑣TT 2S|9z{},^WIs;?{o Wh[?w=_"C?; @uFPr@GkecbB~ q` 0 A2) t(?ى<҃p3t !@baP-@wZ 9FZ^Cfđ)psH8꙼c J0Q /LR 21 (w   $ 1~(O{w$gyTҀ_8$s@$"w/9dcArUU n7HoOeC(ec -"=@ZN`B:-4nd !L: 'D%n^1tIjhP4@1SM:0&" Z-ۛńfRG 0!Q +fz6VTf 6 Z| 1|̡u[.>12Aʷ0Ǭ1比 6H|1Gd1Dnmݓл%PK,-S:e19 ~Y-LlrJ\: AWQ])P=M7jrm"Im[eXRf˃&c0uǎՠءG5R'1qjZ3Q^Z}" /muDž$#KzHq-d16Sܴ;` ounS _8^ ڒr̾ wZL|20&ʹ7Fx9uC\LF2snrZ uL ҁ.?0MKe%yM 9'k ^æn@;b0([W@v@/[p)Hcr4!kOvCؒ}a^W<"xgk_pIhX-`G,PՈP+1.Gh%ATfA$@JL*(qBfSڨ gX$'WACrB*l4ye`Zeu)#1Mcf"T5"g&#ƼMUlk?¼PN<{fԣdxSd4m^`NJ *i CXd[Z¡vkJBuсv^P~/ex\naAJ8_2EDLRv Ԯ.4 fY{Wvn>:&كޞ6QX7(z 5w( zIk!f)XOAaUgPZ}0OŹ#ݭV)) Jfʪǘ4B}}qbZae0BOk:eC0@ʟ!؎m $~j#Yg]#GNۧ)/ղC_Nt4Wlx$VGNEh/F4Lϗ1۷=}U^ERens2I*YkQ>1Ե&7ƱK _wd5.#>*IMXC]c 4Wo3Y-['W/5u,j;LF;%P 5<It @Vߜb]6uJ,* RȰ4$wb-| _dTXnm}2uoN)]~]}+nu$_aX[7jæ8li{:U;&2d%kXˁO ;_,ꉩH!b;@翑wm]G~)07=LGY Vۘ矣8Ԗ7:tKEB$4r ܲ/ k("Y/7n"YmGQļ3}Gzޟo endstream endobj 819 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 820 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 818 0 R /Group 819 0 R >> endobj 821 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 822 0 obj <> endobj 823 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 821 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 824 0 obj << /Type /XObject /Subtype /Image /Width 242 /Height 180 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 70 /Filter /FlateDecode >> stream xρ m2(=܅=Q$ endstream endobj 825 0 obj << /Type /XObject /Subtype /Image /Width 242 /Height 180 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 826 0 R /Filter /DCTDecode /SMask 824 0 R >> stream JFIFC     C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?mKkhV8PƊQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEgO \7>ӤF-$efbrI$rMEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWu~2O |C<7xs[L 'Wr쥰N|2ko7iqpcR Z&&H>ŒAJI>W}.i={o3%e41ҡ2M4M4W?Þ xr"Lu/?Uh6(kiבﶽdEaDZ8!ɍ}~i ;3|JVlתz/E➰QH̨݀dxf_ Mq@1%l.Y@<;0 )G,3,pt{% 3eT=*|~wGTW)o6D͓0hĴ+|k~_ UO&Ci^[\ E+2=3Gb55ʸ~yքg:vN)=^W~\ 378CYFՎ|<)&g+*ҝ5gZ3zu!ZjA4aEVeQ@Q@Q@Q@Q@Q@Q@Q@Q@V+oiV4[Ap0xKRck#xz>i,|V֊,9_ʿ80puenL n3ѡSK#hUaGHJ()9eo?`^_|W|H`x^Tn;e1 _9?@: xQwVQӕ8 |?.o|;k8q"E? Ew)9Ig2J*`) ((((((((( Qgiv<ԭuc -M~JY\㩯߭GNV+[Zy FS=AO O_ū V1̚'# 3Fɹ"+(?MkYnm$K'#pADOMcԒm&3h4E>4]\hɫ#kԊi:=Wh|1T%gZo*+L+Y_|<~"SBDžḾ_*YV m.~VxVZ|tu(uuco.=#bUxko#P1Jsv/?q?γYCiKy~+s&C? p`1y„(ӴKɽy}'ql1[E[m= |j.<7𷆤ʝ3M)< W63_6\:2{\c2ST0"uovl0w[Q^}=y  qQ>,jioG$H&AQDE?`2;Z:Vk$zM~+ B6Co8*rT|};5YK6uJyl ǩ?:'re\n쥣\ZoD}_8q yUjQ=Vdګw_EWQEQEQEQEQEQEQEQEQEQEW_]O(t.+S#@>yҜz=c WYg |lЬeڰrR )eeWxy<->1:]qj?5c%Qɿ'/?64VkkvN1]_ÿ> #=ɨO/nOpV#W´Z8ҒiWO=S1k_6fɓv?܆>jǏw3"Z}̍k֥&BRLr>&Z׮Z|1&E/ Њ㧁[zVM}׾B4'P 1;UG兟.B xuh=D'=> _FO:ھ?&<a5_,{$W5x<,1*qR+_+cDxrNIN\QE~Z~QEQEQEQEQEQEQEQEQEQEK^м]^[LvjWQxJ2 WhJRBc$WL~>&e|,-bܸ_H!pn|6w+yށ/U#E}]*pI7o4k>r Ίyx[kKci][*O2Iyh\@_BEPEPEOoZCouFw'D`wRwR+Pø-QEQ^S~>SxO\]qX{[Q7'*J +xV%2|F.0kڿfگo= 8tB5Y 򒬇܁@EPEPEPEPEPEPEPE-ڱ4~AZ!5|)d5?KwKw&awA/ }=~~x7? 4uKN{LqwUTC +|`fnϊ_pV2Lmc3@߶Iȿ<_5s 'begG D!g8Ny w>jQFΟImm G\iۯKfe m& }?wf|ZAg"Oh(/(-4(@* #<&u(PMTC⾅xmǪxB4t:&1|ssq$FsV!Q#TTyɩeRO?O5}B-u]ʥ$o2 F6jC8}]_ j!& KD,Ђ2kI?d?SŞ ϋ^"ÞmV;kWa݉]A#U7I~ejWzWg5ALݏ2HfY"*63nI>|ğSj>$:Ey{:łbb9y gį~3%eK_4RK1v{$3*v 2Ĩ/ ~~|~5~]Sv< e/9J((((((((((((((((((((((((((((((((((( ~&?cܪVqK"!C2q\((((((((((((((|rn *NӚ;[b W g9( endstream endobj 826 0 obj 6866 endobj 827 0 obj << /Type /XObject /Subtype /Image /Width 242 /Height 180 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 70 /Filter /FlateDecode >> stream xρ m2(=܅=Q$ endstream endobj 828 0 obj << /Type /XObject /Subtype /Image /Width 242 /Height 180 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 829 0 R /Filter /DCTDecode /SMask 827 0 R >> stream JFIFC     C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(a5DE @N((((((((((((((/i-݋;$*`0/̍_n{8kWFJqR[3\dQT (((((((((_ۏO3{(. :eY+-9+(:5ҙ{mm HYC`~qB8|q__̪eouӶ p_untN۴r/_}GxYGI(5)'bIp Wf ĉ{o=EXQr N!H#;tr/YN_˹ePU^?Lgm :|s$4KqGpT?dU(k|X~^(յφ:WZfj;֒6[9zHE~DU_zgg8 ]'4>_᷋<-]rsܐ^|VwSԗ4^-o])0p_I5mF"EGcV\K#JSo]2l4[%"!QXe:Of:*EO>4-MtV$0DP>SE~JQE(((((((((/~&qe o(b_A.Ӄ_vۤG4R(eu#H=Ah_اEF-lte2+2NqȡUg=k8,ZW\0JSK>}5ŷ ^,Nk |PQj!P@n9z+¾ Jԋc&~a[a9 3pɫ](;;uRO]Y~ G~ _̑iK]9nnˉAm6t=|SiM&`m?(it^)Wn~ʐ6~к_oTMnxr-{u3I9i!Q"͵tWO.tM ̙餜ּy/N棒v?y n;-|#[>z>drZ_x CgRû}&翳7幽ǖ6N{j"y.UHʰ\a; _>9¯x/f+K`Ig9g?zG={YZxd<|0 {uM(((((((((((ा05YYa{˥aR1?xJzp|=5hvhwRC|rͰ>G+;UWSN|ӳ|g<cm mx[ĭj<~.=9hr(5"ãW.;=3]x<)ay{&r3Ǫ:5L6EƵu.stsP3DXߌ!RjS VX.B4eXgr 4Q.zE%ʯCUf=Zi.H?{7>X[OgtigE ⿍#}öM,~S4Ɵ\3毽S9lsGt( ( ( ( ( ( ( ( ( ( ( iZn\h͌w6pW6.`QI՘iq}xB մSΩsl:VrUCv<&o% {!cs#o%v jqEh29dk61G R 9s.Wh⓻ K i$אi" y/F9*pEwɰto{<#JQIc'_|l u,(w\JAR{ 袾8R :raEUQEQEQEQEQEQEQEU]s[7YL@&3}E{i Evz}#Ix7ğ>[J1kn,~c,nbpؿᇎ#aa65ۋmJ hٗ׃n+MtakarUog׹Bk~|?6J#Y.Z'9F LZoĿ~3j~kIk #71bX|Jy䟣~4{Yo?xcö{ 8 d 2x W |._g_OKqjlaCnzqE\%jPܣn^ߐSҧ:IF\FnsC-L _ivc"lu(VZG2LAbFߺ;:yFgNr\VBuhT\*F0Qi>kyuS^iw3,e# VFma7qxGOUxG⯃,<%incEx9 W*( =zlE ŮWIld18j~"̟7+֬7gz`# 9}}w߈^o aYo~ I _| C⯅G /g7E>O Ml6)ӭS\~Vo20tiG[~ᯈ?VxKW}[X61q܍ApxeMf( Cptk?no~/h^iᱩKcw;ݧabS]AxB[ Ag|o:H䋸sdqKSXT'q0b(MЩVqR/KOwŖHn7FFL689WA0ƽ2Z^5Z\lWzv`yaQB\.ɪ_B񮛨Ɵ!KVOck2/rO`*quMTm_Y]|!5-H^BWne|'j [Z }W8ST wg^3|}Wƞ5Es,MHGsÏ~?| LV{u[@C2#)*rG0υh?MzׇmujJN!byyFr22214aU{?ϝ_6՝7=r$֏K?+uĿsf!}I' n?}%Ye鴜5Gľ6֯nmeR+[GR1 KSg߰]/x֢3it{ŕa62d<sz쓧y$ƿ TF < ;tp#.[>Kˮ Ʀxi*=zQ_P|QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE_HJT<#TάQE%ESQEQEQEQEQEQEQEQEQEQEQEQEQEj5 VKB> endobj 831 0 obj <> endobj 832 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 830 0 R /Length 131 /Filter /FlateDecode >> stream xڥ QFwU hh)!",d22^@p "WIPH4MEg>XyzY vԾJ߬k9` endstream endobj 833 0 obj << /Type /XObject /Subtype /Image /Width 86 /Height 64 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 37 /Filter /FlateDecode >> stream x1  t*z,)#Rfk endstream endobj 834 0 obj << /Type /XObject /Subtype /Image /Width 86 /Height 64 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 835 0 R /Filter /DCTDecode /SMask 833 0 R >> stream JFIFC     C  @V" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?0AEPE#ß+=?CӚu. $"f '5tTQB\I]DEJAm$oDfo;񞙭sޤ;O*SJnM5z48N t%~<Yv|b#WҼA[kOiwk(x20ᔂ# \؊tVpj2ٴ̈WR'%M]z(5aEPEP_5X5u\Mׅ MNŗʶҾ^iJldqRѸ UPG {WzmNq'ͰK1+a-+kGvg7EK? Km" ϗ:y<$`NY"1 'p8ԟv&Wxc`_!=~^= zΓrKz#pf\qdK8%sPhx&[Z+񬃉|?V.sZMNv#BS_K4/[][o8 #&mGcDs"Bҭ-wu)jRqk }OOڒAiGXU{yc;'K2A)q_~,cpj|Jޖ~`ݿxWVvuQ_Q@WfܟuGk8b{̚ULă9g< vWK%nuh<-|uo"G-̗6p; $:u %[o\[[Wn{u lȮ":%u(}uǻ}N;;Co,'  (okφ:6*W5K"ֺcJۄ0_#9}!?۷ঃ M&dwma΢kPn$1>jJ|F;֦h7a[ h>EfX.E6cB{ PJ1.cJIV~ϓ1ZZëYi}~ޛ675xC~,>o"0[Ĥb̪Y(WNאk;M@[I}=A uh ݥIhKT†@rD-tOFYk `jLaO&T5uȪs5q6XdKmJ%{n[paaVճz+5_Wľ t㺚K=CCu# gt6D ?.pq FlpˑWw(o|b-|5{Y-58f{iVXcQ2+rCErw^;ufb@{t}c<*-q޼ ;X]%qg6j5!r6𲺓 rpŰ14Pj7cIE{v-|C2iOu!Iv\cI~د,u85lgLmrSm˅6,('!vE{='~ x)5=I+jYsuw:b=8 پjďuCZV{n#Q8aP꿰Go_s{-f3(2G i`b}ZEh2LbP1'⤢ )]@ endstream endobj 835 0 obj 2471 endobj 836 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 837 0 obj <> endobj 838 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 836 0 R /Length 132 /Filter /FlateDecode >> stream xڥ1 BA D"ؐl'R+o,,DAx[I"jg6+Fsh~Cot<[R&5.-h.1w>/y.კ^bȇn1@;ZRuQo:ޝWW9x endstream endobj 839 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 840 0 obj <> endobj 841 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 839 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 842 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 843 0 obj <> endobj 844 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 842 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 845 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 846 0 obj <> endobj 847 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 845 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 848 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 849 0 obj <> endobj 850 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 848 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 851 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 852 0 obj <> endobj 853 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 851 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 854 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 855 0 obj <> endobj 856 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 854 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 857 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 858 0 obj <> endobj 859 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 857 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 860 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 861 0 obj <> endobj 862 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 860 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 863 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 864 0 obj <> endobj 865 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 863 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 866 0 obj << /Type /XObject /Subtype /Image /Width 331 /Height 194 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 97 /Filter /FlateDecode >> stream x10  WLH`8B`Ej endstream endobj 867 0 obj << /Type /XObject /Subtype /Image /Width 331 /Height 194 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 868 0 R /Filter /DCTDecode /SMask 866 0 R >> stream JFIFC     C  K" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?8a0CTP0qRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQExZt1\\H2pAZPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEX6ꚥVдTOLSId&WdW??ൟ <1 O /Ao)RP[f Ge=*j/-T}b2~i4b+H}|xAUXGg.oyq Ƴ*M}[>ᢼO_7MZi oe Dlo1W56p%դ,R(h䍃+Ђ:n]˪{|5Hu+ ( ( +F| ) 'H.i5 nko?Y_Ó=/v;8]b3)a0kGv_c,v׌_k>QꟳmvimRHSlm_Z͟Ÿڧ_ u9 CױlBH2 IAVa/v-l7a+)K.d=(=Т((((((((((((3{Xߑ{xvBG0@5[aWh|QiTQ"Oi&V?GD4]^KkI yk"6FG] k kNgN} a/T\/s?''Hƾbbe<)E;v}W9_S)̪&ڿuՙkڽC?-r6{kjtTY_* ބWH=jf W^bkjd%;? o|W$7i۞,OErG@J #{+*hl6 5va~~? |wgm}*O\̖xX*uS_Y)7+o4d;pnstyqZT֗zR0%H ~x}ߴ;m>!kS:~h]s?ho)oOx;So诐<]HϲlO?|U|R]dPu 'U;J'u=Lm42Vxs%xN8ۻH=UՏ8=Xtg P䟭}NKۙ%W-$fv'Iz˻rt?Jz?/λ+Cĺ7|eSC~1i$ExD[+حmP8Eᯇ~4RGar摿v,M~itYp|ky\lceZyI+EEWQEQEQEQEQEQEQEQEQEQEQEQEQEg/@2x[ߋ.-B. ~{ZL:fbࡿMZ/]ct(XOzQ7wi躌Fc5ݬͭe$E8ee<A_f41|0^)I5nI;g#`kaj]%UZz ,>&_ėzea2ʝ̱̭s^6xt߉0> ^zckJLE*qѴ*OU+BgIr&&zhgگ_ xW⮵{kK_Kejh."y#0Sm鑎8Rϊ07%WA]F5͏ -<_r|4-Ύ<>riQ%H9~ WWegj(=i)kK#uU`ɮ>~.h> X5?*OX,9bTm `s_3|}|E_~lյKa^N]Gc'.Wi94du{Ӳ;VjI;vvm ~ g_|s>_u2e_c/x#BQoVHxpǺvax\ľ5-N}y]47$t58s\(F"nXbN)ʅ*tގk:p;}g:rsT..3kDR=?*Okχ:@x.ur&o3_pM/MMJDЭfmbvL6鹀c¿Whc8)J~RmJӡ \U+{I]y$P+@(((((((((((((?bK|W~<[[KVvW-g:EWB@:ve~8|xtI'/l2JAeBȯo#У*S(ǚ-i=.KO(WMT"in%o'c1oܤ3 mPx. P@$GG2cXic?{d_^m Q_Hi  `|[iݾMO߷D6DZ.S>#x^k/xZO:ү1<*gZ>;%5akJkŵt$巟n a#ibiFj>[I'fj:V[oggkkik (UTU(ܝI+ ) (((((((((((((+?l2EyY 48X"uOe.^Eta1U8x.ӃRO;NUx4דVg}~5|aiڦtW)HeCR>Uj?lhxDv$?aR,2\`Ow$W_O[OB|CWl!IAX{x{sO\o xjMR.-`.q)hI3)2zG<ףeO_?'[Hwj.Ygi`A#`@$2kQgv_ k2rHPzF`lv1/.[kt[{[Y袊$(((((((((((((((((((((((((((((((Nͬ뺥c%Y{K`Z\LG) xoc$Vs%*YZ(f\yqjآ $W|GK̫m0&ͫ (;NM}שxKž߆aZ;7PKgw;dC;#[?8|)wKPaW]ҀXO_D~ 4M;Ŧdft 3>qI$WO#8k/iDѴ7xvʂTpִi(ߋf_ xw4C\?ӧxWlM,V S+77ŭW@𹳶7Z]6BT9~1]%k'Wt}#:eڞ+I FB x`A<F_Rό7_tK{m[Rc]ya̠QA}Ā;j?ߵcFSYЯnŹ!d*XFZ"UXU=zPtWx3Mb.-t.'MWM,h/`x Y="E'o |?kj64>M %4u%v;m8&>H|Ziuq} KkM)tt9u^&YxZ\Y\%22B/? ~6m?jM GԡҜii!K<Öm06GEw5_5ķW^-K󼵐%v"4ܹ$P1+_?OI.m1t%.w GO)ğ|n_=~u5ӥԬ֗ @C*ndxزHl0>ڢ_?goៀE]:MEdviseKKt? Dׅ!'m6Hv ,+C8 @9*&>ܢQ$i ρZuߍ#F}cV6 f3Wzg2/ºE)ymkG!sİKln%J$}Wo߂:]K6ZHdd7Gp- o?x/#7_ k]ȒkiGG ^/*|`#ә69TعIu ۽}cy~hVcgxQ Ͽ,k xSė[ |?mw,q,#*1 c,Ozo'?_x;L?)~gcIwLѬ(Иx{vnvKL,ⷶb0(ª@ ^&}%arn,h_FG0mj+?oOP[%gkyh͟;wJ~~=O>٭2}- q.e\ ǰ$c/N| xn&۷E<9_ .&;&;xT#G@/l~?jwľQt+qeXEsH\$$8^ПMo ^9ml~:Yr98Ksө_)`_?Ɇ-oJFORbb #7|2+trܡ]p~o?g/PG?4$j6®!XWV)ԳzW)?n_?<0?ǭrm 5i[OeY"#"Č~`Gˎ8Ak [[B4PT +w&G>)tڅ)mD+9M|Wuohiq}qb4)ݬr#U@_O^Ү/x*(5msk[s1tz&-~ƅe}WyEΛa?mfphcڹ + %t M[{M>cUvh >$ge|=<9nnnt;$Ql 1~YB?7tKtgY t~eo0q|W+WM{iEԍYφդn嶠}k 4>?|=f4QDj>?)oAc>!+;ӜA x䟻y[?Wm~HT,CQּ9mu>"\O\_Ě^۴}0сVR8 PW7nf3!ֆ\0|f7ygw3\)I Izh:%CwI=2jo^ [ž#A kR ńaF!Af82ؿd?qľ ρWᾟW ~ge"/l韌|$O @_sKʛ 7WѠت_.9a~Q08[<Uu]ic {O"߁i;=.o`Jf]w5Q\_仱+-ơ6ՄghK 7%q#+yc/|=T9I#me>\WXvqieVH`0Tp_#㾑 ךMiWI\hړde*|n@ds^LͿ~|"+Q=BZhᴆ%s28GG_^v֏ D?i?߲ÍZ={߃[t7D}U_Nen~"s-{z˺O"(ѝO1']̪~\Y.?n_e bE{rϽ,8s~|CGW~Tc0]ߢk_> stream xѱ 0 ð=k^0@ M2վ#[Z}n=8 endstream endobj 870 0 obj << /Type /XObject /Subtype /Image /Width 443 /Height 329 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 871 0 R /Filter /DCTDecode /SMask 869 0 R >> stream JFIFC     C  I" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?t+@ҭ=MPD**@8U(((((((((((((((((((((((((((|kO𮫩]mMyj]Yd ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( +w_>#jJ!+bpƿ=Oa_ubX=]01>wt1WDRz xK;E)`ɻFߢvxe qS)]ۿ_E~`[ +O !DŽHsiB{2K~kݾdxX_O J {e(_ (c9 _v$y>;d}#k}"b[Ia3[ g=ތ0ZjШՋ5ҭ:rROfQEfXQEQEQEQQ_vr:Vy@2Oe[ 'P#K>ڽ *̳ZJU^qcs,[OV0^n[M-oś?t.y&;Ġ`ekm?P[7W$@Gp%~fҏYV3"9_U|Eu9T%E+؋ /+ h-4w#X]kz,eaqppwOMhf< FjP}FOɅQ\`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE/[ zIwOzaG}_نOxeO)?f+'<;%hm+nÄCHQ6p_¾{922gn23sj8[^w/|/xVӮqjúw_?h/NjşqQ}K[^ܑ3|0.x"Of_{_߂G1'uPhH r~7pvpN3ezuGzas*^{EWß`QUgJs뺌6Vp4WWHQf'rv[waUK1Oj/=-τ[~,G.,-_Ѥ^e#bWP|dqKEqy1j,x1{'V{+'dS{۫Ga_z^c8Wgj ~σtU*P$>+_Yԭ7)>ݔgq֯Ҩ\ƽR=7Cdn%M_[9_mp 7h:o,ٝ}:h=;=k&|ZE 4*pJOͷ$I?v ZE:ڤۊI+kQE~X~QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE$4mHeaA ~"? !Kxᕔ]i:-M 9s ~o1hvѬxFiX"MxJW%AiB.qcQݘ=kJt TV%F+MB KVNAsL|3Ix-SQfXId27Yr1f 2)|/Ao#QZ59ifմT Ą`|'0c$tjGc`ڌ>WwšLJMiRHѕ"gl_?ff'%FVWwH# >j&qoE'<7] ?jOm + (mFU_F/}9SzW_cکbw9T ~|$VvMQjM}yiV8wbpkx+O_&o#kUK@uFLrpE"%Ǩ>G5xfXk @@^S2̫b- B)}(;B(((((((((((((((((9?:9GKc#W|K,? C/-gp?sr}¾ìDparzK?|dcxꄱ-Ku& V`$k.*弹&$N:WJO_kf#3 Rܺ2+eEc~4f -";j7,NA*M_tV >+>w*?[_P.ԼgoWZ^Eͳ~yKs9 N}^ B ~r~zG+~ 鎀i$cס8~5~nVϧ]^6Սmcq-K,N+~!R+`ӫFo^t?Xȸu(aibn_rZ>ۢh|P9+D/QHué : z|+ b%B\gfF}CB5˚2WMuAET5Eƿ=^3%Q(@_~ӿVhhۧ&x2xPhLJ}Wd}_`w{Ez[w}*]~_ύ ~xiWKUn QZFPqWoGas?Vx[F|j7 -g-_1|C㯊$i}u#ndo|>7x;ê>o54N .-?T:h¹\DpyUzvPΌfTh8~E\XQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q'3". jܛyԇP;Q]\-xV(Ӻyj4eJdkz4~ S]_u/4y,u].ZFSOt^Zs>tN X`GZuOY iÐ]fplsO#o+M/oð=v%}fw8QuX?J_ܪsG~ ;& Ϣ95&7Bm1Z򏅞"+iL}ľ놻i~_O~}$ gdUy.,]'q_ Y|[?3o<:ԉ HQѥ0A+ֿd o?u))sJ h^̈́1#^HlE}_Ww.vv\}|UTf){SQI#;͍~WK]ҊQstZTepvUd!c޺3guk֬.v1^.7\sz&*cR6}C*u\ךՏF:&Zg]Hm?c_'wE窋-Ek`'IHSb(E[v#k|xnzp\&/^V':Ȟ g-(|xKߏRc#=@+s>#[%4&>vg I`'1\xg_nR%n_ߘvM3oԯ|Le('Ce%y^ƹOMi,=='ޠi7Q${կ N_ jrYzUwV7Q4RVN{MVBqqz5ЅRP]~0i~ kkZO4N2E$W_ vu3ŗ̺/n<0MC5iyt2 /uXql>*_Š(((((((((((((((((((( w0˹$R=A5DU ]h͍·ᕣ?!_Z?sQk/'zk[SR4mu4L0ltWpylWom(]~aYWRWM2&|q?Yqɩa٫=3E'n3ҳr?r;em=/s*Z۽'Y7 'R.wE?qu~G7⇆|IofPӼ!hE`lvMq!Ԫb۲}uPzpVjiozZzW!Zi7ޫ5=*7jy<Ij']~2?EM+qkwo^W#"v=UjRҕZъmKV¥jM^Ri$?U? l|Cy _HS{}nOxb5#g_ 4^B,4 .+va"do叻3%gxjڤץ,Yd0xE'mQ^9Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s_xíSgĭ/}Zs 8d=VDou`Xt WKEiJZcRekFٯ4EZtSt$՚{4LD?_?c{wc>#KM`R~Xϓ/n~V_цޝ6i]\cdT#YXƾUk>+ͭxWLԼ}1,\/Yso(eQe~~/`Ԗ*;ߖGgW*qbNy)l׭ݟrGzzֿEo?v-ՒG<$ }E  ?g ^G|N|XѶMlل{؏..xWs}'E~'P*6[;~??j//RoR̳Izr͌('?dx~=BK2xSner,Om_Ï hZ\W77"DJ:V +濏JxFšZ[ ʶ#z $JkxSŨrT.W^$UIF=y={h~1xFֿG 5>S\AnO߃WݖEu?4+'|`Mk̯_yW Kbe _:tTWw8[mO?>3x #{l@z" B"_O 9-5{`C1iO$dj/<|<>|3gΛ8{řeɒSq]~?ƞ$"P{_Woc.CQb2U+-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE妟i-pm$JV4%<5g+ 3h </V(ڭ٠r;ƻY}(/3xTn)ݙN?w5Q~53?H¿ |C1 (= F{f>o+< 0;fjO{_%M_Fab-h/ ?SS[OEk!qX]en?hZ*4Ѭ 0yJ<7on9LWĿ' ;N+Y6pLQ#+fa4W楷gQLW0u6?rA@i?6|#oWԮR;{ %y8xyiw h^++bJK!|2wnm9,GW]oCF|/ f\UϲǩOO7T֮1upR85R$Pख_W#Mپ|QK4a\G PX )g/>qP O{_%MG=/ &>_7a⧈_~խ-<>''#+bց}7@+o$?>*Z%ΑntȎE}s~02ǿoF}u<k ]gϊFe-l]gJ2%mIB˜z(8?׈/_ Մط 6U?El?(w?eG]I SB$nѦc_'ȠҺ+X˛nEk(,pxgvrԫp{OS|a@Oþ׼5qW:6L<㑝}E|M<|FO_?i:J2$3|Y]f*w`#=xQXxOZMF? ֤t+ȕKD# 0#=E~W?ٳit'F'>H;1lGf{?פ~ȟO &j톧Ao𺵳0eڙmm5??*(_. <=CE^S^77(U±Y-&yʿCŸ9_^{x/7j7kvh-?=&PxrgeQeHE~1~ӟO?/g]<]EeQG 5j/Z('&4]Nlqёjo;1GmᏅ~0,#Sf.{mE.vVUB=Yg#/>-ztI5*!_2U!`X23<-kI<'G񽽺qks3X2ݰzds@m@/#KꫩIinWɿoτ_ 8i5^Zh+h/s3,UIת_[oCxjGI_|5289΁"8Sշ'N$x_>=hҾS|[mZ9RCbBO2}2X?cό u'W }NHb2 ʧ'k#a+ٻveݴrxԹVEI#2f5o4"|#?g,jk2aIw=0@r5㿳Dx_ῄ?`TcMeמvܒ m q ?Z߈ڔ-,, b ǝ<=vE1!^^۫VzĞ }6v(by!fHA^u]i9K[7}6I:%꤬3,D.ɏ_(?$_[ৃu]ήuMSF0;3ծIo|EtSsgdK!H{**Q_o |?šTZiHg( 9&f$:+_1K2{~|bj/閺=n~iHU!ՀmI$ckq:MG_߅%oMD=~.~̞/h3I4WՇ }¼'v;h1M_yzn?8ݨ.ڀ>B - |zg$[g20תîn%RX/[⧈Y-Kլ,Le~@< )~PǯٛlItu&eKn!W|N[;N +#5x*vJHkwж5X,>j< S(ڟ~,6:و+ $q>k$ m\g'|_~ح$6mn.q;ȳIFz7-gcź=潮33v%;W蠀`? <#gïZXi Qe`4Gv9,ǒM~~_PX 7sjz3UK[uQR@~?|_||#bD<9Ddع0˕OL28T>-uռUJ8YD@Qӄz­c]x_Hگ]%Ȋ;(ceBNNsOVA5Gxov*-ftqʲ!7|M]E}^I ( ( ( ( ( ( ( (87W?iov~i%Ջ(d7]#BA٧uѢg_sXOg149\p18?cQ@Q@q~;~&֥&{Q YY_R>s_gw9|x~%q,+hULLOaP^]P~?k Ey.,fk:|"|0AS2@54PfxvmA?[ږ!M"B:?]/!Of kĭwn/!_eu FIд=>K++t0(UEQ¨@+ڇ 6>%}x/^QSɑ1<$s_WQ@ֿo֚{j?v/St@ <~z񿆗Q׼L!huQXaǸd$(  մmN/.rHFRVR  ^9(h?u}zD}5`Fo[1(=xP~P?2\Yl%olu&*z`Hy?mh[1"wIE~@|( oFG [o >Wr}'Ÿ%nuM5x#1 1+>1? g[_Z?~oa6 I+e] 8:4>Cii:uԶ 9hٗ 1# [PĿ ~[x8k `N5H\:+0$p2FzuCx@Ym3Fp W(~ ~|>~;xhŽvo@iUP':g{ 𮋠xږq=I"ȎjA5P8_OG8_O_TP ~>~,Z6 l-Of`?>SZ> endobj 873 0 obj <> endobj 874 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 872 0 R /Length 132 /Filter /FlateDecode >> stream xڥ; BA E"$Y`bW}ca!"r !9+0ڑɦJeo@K'dEΤ nNg&"^+ϽYx'p{wj_oV9 endstream endobj 875 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 876 0 obj <> endobj 877 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 875 0 R /Length 132 /Filter /FlateDecode >> stream xڥ1 BA Db.K$'R+o,,DAx [=̤d~CRXoƅ[b\, v7yɋ&>y y>4FlS*U~z9z endstream endobj 878 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 879 0 obj <> endobj 880 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 878 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 881 0 obj << /Type /XObject /Subtype /Image /Width 443 /Height 329 /ColorSpace /DeviceGray /BitsPerComponent 8 /Length 183 /Filter /FlateDecode >> stream xѱ 0 ð=k^0@ M2վ#[Z}n=8 endstream endobj 882 0 obj << /Type /XObject /Subtype /Image /Width 443 /Height 329 /ColorSpace /DeviceRGB /BitsPerComponent 8 /Length 883 0 R /Filter /DCTDecode /SMask 881 0 R >> stream JFIFC     C  I" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?t+@ҭ=MPD**@8U(((((((((((((((((((((((((((|kO𮫩]mMyj]Yd ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( +w_>#jJ!+bpƿ=Oa_ubX=]01>wt1WDRz xK;E)`ɻFߢvxe qS)]ۿ_E~`[ +O !DŽHsiB{2K~kݾdxX_O J {e(_ (c9 _v$y>;d}#k}"b[Ia3[ g=ތ0ZjШՋ5ҭ:rROfQEfXQEQEQEQQ_vr:Vy@2Oe[ 'P#K>ڽ *̳ZJU^qcs,[OV0^n[M-oś?t.y&;Ġ`ekm?P[7W$@Gp%~fҏYV3"9_U|Eu9T%E+؋ /+ h-4w#X]kz,eaqppwOMhf< FjP}FOɅQ\`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE/[ zIwOzaG}_نOxeO)?f+'<;%hm+nÄCHQ6p_¾{922gn23sj8[^w/|/xVӮqjúw_?h/NjşqQ}K[^ܑ3|0.x"Of_{_߂G1'uPhH r~7pvpN3ezuGzas*^{EWß`QUgJs뺌6Vp4WWHQf'rv[waUK1Oj/=-τ[~,G.,-_Ѥ^e#bWP|dqKEqy1j,x1{'V{+'dS{۫Ga_z^c8Wgj ~σtU*P$>+_Yԭ7)>ݔgq֯Ҩ\ƽR=7Cdn%M_[9_mp 7h:o,ٝ}:h=;=k&|ZE 4*pJOͷ$I?v ZE:ڤۊI+kQE~X~QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE$4mHeaA ~"? !Kxᕔ]i:-M 9s ~o1hvѬxFiX"MxJW%AiB.qcQݘ=kJt TV%F+MB KVNAsL|3Ix-SQfXId27Yr1f 2)|/Ao#QZ59ifմT Ą`|'0c$tjGc`ڌ>WwšLJMiRHѕ"gl_?ff'%FVWwH# >j&qoE'<7] ?jOm + (mFU_F/}9SzW_cکbw9T ~|$VvMQjM}yiV8wbpkx+O_&o#kUK@uFLrpE"%Ǩ>G5xfXk @@^S2̫b- B)}(;B(((((((((((((((((9?:9GKc#W|K,? C/-gp?sr}¾ìDparzK?|dcxꄱ-Ku& V`$k.*弹&$N:WJO_kf#3 Rܺ2+eEc~4f -";j7,NA*M_tV >+>w*?[_P.ԼgoWZ^Eͳ~yKs9 N}^ B ~r~zG+~ 鎀i$cס8~5~nVϧ]^6Սmcq-K,N+~!R+`ӫFo^t?Xȸu(aibn_rZ>ۢh|P9+D/QHué : z|+ b%B\gfF}CB5˚2WMuAET5Eƿ=^3%Q(@_~ӿVhhۧ&x2xPhLJ}Wd}_`w{Ez[w}*]~_ύ ~xiWKUn QZFPqWoGas?Vx[F|j7 -g-_1|C㯊$i}u#ndo|>7x;ê>o54N .-?T:h¹\DpyUzvPΌfTh8~E\XQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q'3". jܛyԇP;Q]\-xV(Ӻyj4eJdkz4~ S]_u/4y,u].ZFSOt^Zs>tN X`GZuOY iÐ]fplsO#o+M/oð=v%}fw8QuX?J_ܪsG~ ;& Ϣ95&7Bm1Z򏅞"+iL}ľ놻i~_O~}$ gdUy.,]'q_ Y|[?3o<:ԉ HQѥ0A+ֿd o?u))sJ h^̈́1#^HlE}_Ww.vv\}|UTf){SQI#;͍~WK]ҊQstZTepvUd!c޺3guk֬.v1^.7\sz&*cR6}C*u\ךՏF:&Zg]Hm?c_'wE窋-Ek`'IHSb(E[v#k|xnzp\&/^V':Ȟ g-(|xKߏRc#=@+s>#[%4&>vg I`'1\xg_nR%n_ߘvM3oԯ|Le('Ce%y^ƹOMi,=='ޠi7Q${կ N_ jrYzUwV7Q4RVN{MVBqqz5ЅRP]~0i~ kkZO4N2E$W_ vu3ŗ̺/n<0MC5iyt2 /uXql>*_Š(((((((((((((((((((( w0˹$R=A5DU ]h͍·ᕣ?!_Z?sQk/'zk[SR4mu4L0ltWpylWom(]~aYWRWM2&|q?Yqɩa٫=3E'n3ҳr?r;em=/s*Z۽'Y7 'R.wE?qu~G7⇆|IofPӼ!hE`lvMq!Ԫb۲}uPzpVjiozZzW!Zi7ޫ5=*7jy<Ij']~2?EM+qkwo^W#"v=UjRҕZъmKV¥jM^Ri$?U? l|Cy _HS{}nOxb5#g_ 4^B,4 .+va"do叻3%gxjڤץ,Yd0xE'mQ^9Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s_xíSgĭ/}Zs 8d=VDou`Xt WKEiJZcRekFٯ4EZtSt$՚{4LD?_?c{wc>#KM`R~Xϓ/n~V_цޝ6i]\cdT#YXƾUk>+ͭxWLԼ}1,\/Yso(eQe~~/`Ԗ*;ߖGgW*qbNy)l׭ݟrGzzֿEo?v-ՒG<$ }E  ?g ^G|N|XѶMlل{؏..xWs}'E~'P*6[;~??j//RoR̳Izr͌('?dx~=BK2xSner,Om_Ï hZ\W77"DJ:V +濏JxFšZ[ ʶ#z $JkxSŨrT.W^$UIF=y={h~1xFֿG 5>S\AnO߃WݖEu?4+'|`Mk̯_yW Kbe _:tTWw8[mO?>3x #{l@z" B"_O 9-5{`C1iO$dj/<|<>|3gΛ8{řeɒSq]~?ƞ$"P{_Woc.CQb2U+-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE妟i-pm$JV4%<5g+ 3h </V(ڭ٠r;ƻY}(/3xTn)ݙN?w5Q~53?H¿ |C1 (= F{f>o+< 0;fjO{_%M_Fab-h/ ?SS[OEk!qX]en?hZ*4Ѭ 0yJ<7on9LWĿ' ;N+Y6pLQ#+fa4W楷gQLW0u6?rA@i?6|#oWԮR;{ %y8xyiw h^++bJK!|2wnm9,GW]oCF|/ f\UϲǩOO7T֮1upR85R$Pख_W#Mپ|QK4a\G PX )g/>qP O{_%MG=/ &>_7a⧈_~խ-<>''#+bց}7@+o$?>*Z%ΑntȎE}s~02ǿoF}u<k ]gϊFe-l]gJ2%mIB˜z(8?׈/_ Մط 6U?El?(w?eG]I SB$nѦc_'ȠҺ+X˛nEk(,pxgvrԫp{OS|a@Oþ׼5qW:6L<㑝}E|M<|FO_?i:J2$3|Y]f*w`#=xQXxOZMF? ֤t+ȕKD# 0#=E~W?ٳit'F'>H;1lGf{?פ~ȟO &j톧Ao𺵳0eڙmm5??*(_. <=CE^S^77(U±Y-&yʿCŸ9_^{x/7j7kvh-?=&PxrgeQeHE~1~ӟO?/g]<]EeQG 5j/Z('&4]Nlqёjo;1GmᏅ~0,#Sf.{mE.vVUB=Yg#/>-ztI5*!_2U!`X23<-kI<'G񽽺qks3X2ݰzds@m@/#KꫩIinWɿoτ_ 8i5^Zh+h/s3,UIת_[oCxjGI_|5289΁"8Sշ'N$x_>=hҾS|[mZ9RCbBO2}2X?cό u'W }NHb2 ʧ'k#a+ٻveݴrxԹVEI#2f5o4"|#?g,jk2aIw=0@r5㿳Dx_ῄ?`TcMeמvܒ m q ?Z߈ڔ-,, b ǝ<=vE1!^^۫VzĞ }6v(by!fHA^u]i9K[7}6I:%꤬3,D.ɏ_(?$_[ৃu]ήuMSF0;3ծIo|EtSsgdK!H{**Q_o |?šTZiHg( 9&f$:+_1K2{~|bj/閺=n~iHU!ՀmI$ckq:MG_߅%oMD=~.~̞/h3I4WՇ }¼'v;h1M_yzn?8ݨ.ڀ>B - |zg$[g20תîn%RX/[⧈Y-Kլ,Le~@< )~PǯٛlItu&eKn!W|N[;N +#5x*vJHkwж5X,>j< S(ڟ~,6:و+ $q>k$ m\g'|_~ح$6mn.q;ȳIFz7-gcź=潮33v%;W蠀`? <#gïZXi Qe`4Gv9,ǒM~~_PX 7sjz3UK[uQR@~?|_||#bD<9Ddع0˕OL28T>-uռUJ8YD@Qӄz­c]x_Hگ]%Ȋ;(ceBNNsOVA5Gxov*-ftqʲ!7|M]E}^I ( ( ( ( ( ( ( (87W?iov~i%Ջ(d7]#BA٧uѢg_sXOg149\p18?cQ@Q@q~;~&֥&{Q YY_R>s_gw9|x~%q,+hULLOaP^]P~?k Ey.,fk:|"|0AS2@54PfxvmA?[ږ!M"B:?]/!Of kĭwn/!_eu FIд=>K++t0(UEQ¨@+ڇ 6>%}x/^QSɑ1<$s_WQ@ֿo֚{j?v/St@ <~z񿆗Q׼L!huQXaǸd$(  մmN/.rHFRVR  ^9(h?u}zD}5`Fo[1(=xP~P?2\Yl%olu&*z`Hy?mh[1"wIE~@|( oFG [o >Wr}'Ÿ%nuM5x#1 1+>1? g[_Z?~oa6 I+e] 8:4>Cii:uԶ 9hٗ 1# [PĿ ~[x8k `N5H\:+0$p2FzuCx@Ym3Fp W(~ ~|>~;xhŽvo@iUP':g{ 𮋠xږq=I"ȎjA5P8_OG8_O_TP ~>~,Z6 l-Of`?>SZ> endobj 885 0 obj <> endobj 886 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 884 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 887 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 888 0 obj <> endobj 889 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 887 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 890 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 891 0 obj <> endobj 892 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 890 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 893 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 894 0 obj <> endobj 895 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 893 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 896 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 897 0 obj <> endobj 898 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 896 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 899 0 obj << /Type /Group /S /Transparency /I false /K false >> endobj 900 0 obj <> endobj 901 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0.00000 0.00000 708.66142 708.66142 ] /Group 899 0 R /Length 9 /Filter /FlateDecode >> stream x endstream endobj 902 0 obj << /Length 5348 /Filter /FlateDecode >> stream x]]_1" ؎hEQݶ 8NK͌zĢF;c)z_:8t{\|> ;KN!?o-O{dž)SvaտM4l4~Ic_JSv)JSrX_=}ޟw\.m,SJ|~wӁ<%8W5uď8P߮?ѯ,[㨭9&$GSIdP}w_~& 1S0~ˎjdXo^))^EE?qx:;r}687rtM>@͟p+Rn6佁7|G6]Oq=uYMP:v/WHh ۗϩw/{^unѨ{|TWʢV'UtQ4QqWۻLVW7?/͏'(iѿ eg+ɥ3Ɏ'D3/~x fgĖZ8>׺<[FFFJj Tdxs`v˸ɁDXZfPb\-Hy.1cZo& jlNrL#)@@2=˸bs(FSIk wYTfQiܢ6eDaay@Bti|⤬w%Hd/a5TTFDfS5C!.^\Ks ]>AWK+]`Ɏ r+JPIj] d".Dy<] {.Y>.]?EL!eʵCIb^K \@=(Q뜹]rYs`oD ]JеD ]LD S@F̀iR>gS&niq`f ^= SEMA!Ӹ`]|.HES{hsfOlQ*FE_ s\i1znAJV~ zĔnIa g-Bq))2ȭؼ= 4\F P[Ŧu_~ĆŊ-3'RnajǍH+ vmr\R۽i9 }Py}\ uT'yVnIh #eyIH؅eL9 J;(%c5f[©2h e!2bLI ]E rmƔmѯ)iD@ W@H Q.+B.A1k!%hyBMK14%$xe|vԏA4^MdHC}UsP#LPb!L3Tj8꠺e'BJ lW4P^(`P RzE*Gh<]ȌzzH'2qw!>szCSPU!uUDd3Bo3W;%ЂtN@t l!C  ܊Hv!y5v1eqaٴfn-ŀ8/Ef,1g 2c"H[PjvXdW?ڋf,sGa2{4HAK׳ymٯQa s`v(292;p 7@%j[Zv!SOan[U(vlL|VL00#_Qi 3BҲV"`+Q/Ϙ mh㱨F^-z( g Q\z~a ˢ\b&6  j [5 |.)es [Fê )CWA}`< 6 upV!J=̠\XFf^=VE.Wj^uJBVnkGZhղ>mv́݋QThFH ]0)A?$$^8ŀ\~`PƈA@Ud`H.l$`LlovG>: &,Ǝ  {ݻm⑊( dfj . P&xH&i)·~ 'I&I'I'f`KN~B03) UsL!8S(.,\lGdD <ؗCQ24aQ0/Bh @RJ,@/HpO+䵴Gvpz-7OJ\utE\I9s3Aذ5+wlr/0)XD)HLIz| j7<TȋvN= vזTC *AR%$YoIzv㼎IGSx3)めmv{P0Yy=1)"pKLJdTqVD# LTDV-]@5ue _E*ks/ ! p zהBOTȈ6FH%820PsxNj&X~ar1.: n4R1T#ګsjBHCRdH*WL )!ģhHpy ̂J/!U &NQQ\ɀ]i ӆ1  U@)X3YnCXҳV *֬cRLV=f)v' @+1ҫ0zLDKcB%Pǃ#Cq ZW"kvcڼd Q.֬CeUgRp9M&9;1JL%M=YG(Ri]#F~<go^G~$~qUuRU'DFw\UܸMؐ[U͕FK]WLʾ]#3Wip\qutyGZU\WT[ t A<1z@52qEsEʷUrj'JnKUTFf,*͎SWyʷK:rkdjH;W,PegO'jXM|;?xlߝZ,L{ўj;Ζm8|jET#L40Yw~jBs1ߟ"62݀Ju4]ep?A{v/iv7@n4H[\O*p kr))0;mv3;jSi$P<6č\ nyO}S/.Xµ[K37c~ӵdIDwR3${r;mvGk꾉82:~^0/ۏ,.xy-\VBIWIy!~(dkwR@- r0 X0*6x~0譔 =Ϭ#)[7N%R Ov1ioS7#0ܯ/ YbWv5ћ78"#oT^)a.?t׻k9h"ї=uoOo ɡ]^"zR.譌K=juq7p7RQsz /5 whSVM}vh9{5(sNs:slԱܮ땼oydso.P[Y e_} ?Odpbm]kꮉ%~zuv歺sRJX|ޑ'NW5up֋,%XF;2:S3KY/qb m,__iؑ䒹ݤom&fM䉥ER7p#?O 輷Y-C>?oHN endstream endobj 903 0 obj << /S /Transparency /CS /DeviceRGB >> endobj 904 0 obj << /Type /Page /Parent 4 0 R /MediaBox [0 0 708.66142 708.66142] /BleedBox [0.00000 0.00000 708.66142 708.66142] /CropBox [0 0 708.66142 708.66142] /TrimBox [0.00000 0.00000 708.66142 708.66142] /ArtBox [0.00000 0.00000 708.66142 708.66142] /Rotate 0 /Contents 902 0 R /Group 903 0 R >> endobj 905 0 obj << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /XObject << /REI136 270 0 R /REI137 271 0 R /REI204 375 0 R /REI205 376 0 R /REI248 444 0 R /REI249 445 0 R /REI268 477 0 R /REI269 478 0 R /REI30 102 0 R /REI31 103 0 R /REI354 612 0 R /REI355 613 0 R /REI356 615 0 R /REI357 616 0 R /REI358 618 0 R /REI359 619 0 R /REI360 621 0 R /REI361 622 0 R /REI464 783 0 R /REI465 785 0 R /REI466 787 0 R /REI467 789 0 R /REI488 824 0 R /REI489 825 0 R /REI490 827 0 R /REI491 828 0 R /REI494 833 0 R /REI495 834 0 R /REI516 866 0 R /REI517 867 0 R /REI518 869 0 R /REI519 870 0 R /REI526 881 0 R /REI527 882 0 R /REI56 144 0 R /REI57 145 0 R /RE1 59 0 R /RE101 215 0 R /RE103 218 0 R /RE105 221 0 R /RE107 224 0 R /RE109 227 0 R /RE11 74 0 R /RE111 230 0 R /RE113 233 0 R /RE115 236 0 R /RE117 239 0 R /RE119 242 0 R /RE121 245 0 R /RE123 248 0 R /RE125 251 0 R /RE127 254 0 R /RE129 257 0 R /RE13 77 0 R /RE131 263 0 R /RE133 266 0 R /RE135 269 0 R /RE139 275 0 R /RE141 278 0 R /RE143 281 0 R /RE145 284 0 R /RE147 287 0 R /RE149 290 0 R /RE15 80 0 R /RE151 293 0 R /RE153 296 0 R /RE155 299 0 R /RE157 302 0 R /RE159 305 0 R /RE161 308 0 R /RE163 311 0 R /RE165 314 0 R /RE167 317 0 R /RE169 320 0 R /RE17 83 0 R /RE171 323 0 R /RE173 326 0 R /RE175 332 0 R /RE177 335 0 R /RE179 338 0 R /RE181 341 0 R /RE183 344 0 R /RE185 347 0 R /RE187 350 0 R /RE189 353 0 R /RE19 86 0 R /RE191 356 0 R /RE193 359 0 R /RE195 362 0 R /RE197 365 0 R /RE199 368 0 R /RE201 371 0 R /RE203 374 0 R /RE207 380 0 R /RE209 383 0 R /RE21 89 0 R /RE211 386 0 R /RE213 389 0 R /RE215 392 0 R /RE217 395 0 R /RE219 401 0 R /RE221 404 0 R /RE223 407 0 R /RE225 410 0 R /RE227 413 0 R /RE229 416 0 R /RE23 92 0 R /RE231 419 0 R /RE233 422 0 R /RE235 425 0 R /RE237 428 0 R /RE239 431 0 R /RE241 434 0 R /RE243 437 0 R /RE245 440 0 R /RE247 443 0 R /RE25 95 0 R /RE251 449 0 R /RE253 452 0 R /RE255 455 0 R /RE257 458 0 R /RE259 461 0 R /RE261 464 0 R /RE263 470 0 R /RE265 473 0 R /RE267 476 0 R /RE27 98 0 R /RE271 482 0 R /RE273 485 0 R /RE275 488 0 R /RE277 491 0 R /RE279 494 0 R /RE281 497 0 R /RE283 500 0 R /RE285 503 0 R /RE287 506 0 R /RE289 509 0 R /RE29 101 0 R /RE291 512 0 R /RE293 515 0 R /RE295 518 0 R /RE297 521 0 R /RE299 524 0 R /RE3 62 0 R /RE301 527 0 R /RE303 530 0 R /RE305 533 0 R /RE307 539 0 R /RE309 542 0 R /RE311 545 0 R /RE313 548 0 R /RE315 551 0 R /RE317 554 0 R /RE319 557 0 R /RE321 560 0 R /RE323 563 0 R /RE325 566 0 R /RE327 569 0 R /RE329 572 0 R /RE33 107 0 R /RE331 575 0 R /RE333 578 0 R /RE335 581 0 R /RE337 584 0 R /RE339 587 0 R /RE341 590 0 R /RE343 593 0 R /RE345 596 0 R /RE347 599 0 R /RE349 605 0 R /RE35 110 0 R /RE351 608 0 R /RE353 611 0 R /RE363 626 0 R /RE365 629 0 R /RE367 632 0 R /RE369 635 0 R /RE37 113 0 R /RE371 638 0 R /RE373 641 0 R /RE375 644 0 R /RE377 647 0 R /RE379 650 0 R /RE381 653 0 R /RE383 656 0 R /RE385 659 0 R /RE387 662 0 R /RE389 665 0 R /RE39 116 0 R /RE391 668 0 R /RE393 671 0 R /RE395 674 0 R /RE397 677 0 R /RE399 683 0 R /RE401 686 0 R /RE403 689 0 R /RE405 692 0 R /RE407 695 0 R /RE409 698 0 R /RE41 119 0 R /RE411 701 0 R /RE413 704 0 R /RE415 707 0 R /RE417 710 0 R /RE419 713 0 R /RE421 716 0 R /RE423 719 0 R /RE425 722 0 R /RE427 725 0 R /RE429 728 0 R /RE43 122 0 R /RE431 731 0 R /RE433 734 0 R /RE435 737 0 R /RE437 740 0 R /RE439 743 0 R /RE441 749 0 R /RE443 752 0 R /RE445 755 0 R /RE447 758 0 R /RE449 761 0 R /RE45 128 0 R /RE451 764 0 R /RE453 767 0 R /RE455 770 0 R /RE457 773 0 R /RE459 776 0 R /RE461 779 0 R /RE463 782 0 R /RE469 793 0 R /RE47 131 0 R /RE471 796 0 R /RE473 799 0 R /RE475 802 0 R /RE477 805 0 R /RE479 808 0 R /RE481 811 0 R /RE483 814 0 R /RE485 817 0 R /RE487 823 0 R /RE49 134 0 R /RE493 832 0 R /RE497 838 0 R /RE499 841 0 R /RE5 65 0 R /RE501 844 0 R /RE503 847 0 R /RE505 850 0 R /RE507 853 0 R /RE509 856 0 R /RE51 137 0 R /RE511 859 0 R /RE513 862 0 R /RE515 865 0 R /RE521 874 0 R /RE523 877 0 R /RE525 880 0 R /RE529 886 0 R /RE53 140 0 R /RE531 889 0 R /RE533 892 0 R /RE535 895 0 R /RE537 898 0 R /RE539 901 0 R /RE55 143 0 R /RE59 149 0 R /RE61 152 0 R /RE63 155 0 R /RE65 158 0 R /RE67 161 0 R /RE69 164 0 R /RE7 68 0 R /RE71 167 0 R /RE73 170 0 R /RE75 173 0 R /RE77 176 0 R /RE79 179 0 R /RE81 182 0 R /RE83 185 0 R /RE85 188 0 R /RE87 191 0 R /RE89 197 0 R /RE9 71 0 R /RE91 200 0 R /RE93 203 0 R /RE95 206 0 R /RE97 209 0 R /RE99 212 0 R /master_page_obj_2_0 56 0 R >> /Font << /Fo0Form 20 0 R /Fo0S0 14 0 R /Fo0S1 18 0 R /Fo1Form 31 0 R /Fo1S0 25 0 R /Fo1S1 29 0 R /Fo2Form 43 0 R /Fo2S0 37 0 R /Fo2S1 41 0 R /Fo3Form 55 0 R /Fo3S0 49 0 R /Fo3S1 53 0 R >> /ExtGState << /RE0 58 0 R /RE10 73 0 R /RE100 214 0 R /RE102 217 0 R /RE104 220 0 R /RE106 223 0 R /RE108 226 0 R /RE110 229 0 R /RE112 232 0 R /RE114 235 0 R /RE116 238 0 R /RE118 241 0 R /RE12 76 0 R /RE120 244 0 R /RE122 247 0 R /RE124 250 0 R /RE126 253 0 R /RE128 256 0 R /RE130 262 0 R /RE132 265 0 R /RE134 268 0 R /RE138 274 0 R /RE14 79 0 R /RE140 277 0 R /RE142 280 0 R /RE144 283 0 R /RE146 286 0 R /RE148 289 0 R /RE150 292 0 R /RE152 295 0 R /RE154 298 0 R /RE156 301 0 R /RE158 304 0 R /RE16 82 0 R /RE160 307 0 R /RE162 310 0 R /RE164 313 0 R /RE166 316 0 R /RE168 319 0 R /RE170 322 0 R /RE172 325 0 R /RE174 331 0 R /RE176 334 0 R /RE178 337 0 R /RE18 85 0 R /RE180 340 0 R /RE182 343 0 R /RE184 346 0 R /RE186 349 0 R /RE188 352 0 R /RE190 355 0 R /RE192 358 0 R /RE194 361 0 R /RE196 364 0 R /RE198 367 0 R /RE2 61 0 R /RE20 88 0 R /RE200 370 0 R /RE202 373 0 R /RE206 379 0 R /RE208 382 0 R /RE210 385 0 R /RE212 388 0 R /RE214 391 0 R /RE216 394 0 R /RE218 400 0 R /RE22 91 0 R /RE220 403 0 R /RE222 406 0 R /RE224 409 0 R /RE226 412 0 R /RE228 415 0 R /RE230 418 0 R /RE232 421 0 R /RE234 424 0 R /RE236 427 0 R /RE238 430 0 R /RE24 94 0 R /RE240 433 0 R /RE242 436 0 R /RE244 439 0 R /RE246 442 0 R /RE250 448 0 R /RE252 451 0 R /RE254 454 0 R /RE256 457 0 R /RE258 460 0 R /RE26 97 0 R /RE260 463 0 R /RE262 469 0 R /RE264 472 0 R /RE266 475 0 R /RE270 481 0 R /RE272 484 0 R /RE274 487 0 R /RE276 490 0 R /RE278 493 0 R /RE28 100 0 R /RE280 496 0 R /RE282 499 0 R /RE284 502 0 R /RE286 505 0 R /RE288 508 0 R /RE290 511 0 R /RE292 514 0 R /RE294 517 0 R /RE296 520 0 R /RE298 523 0 R /RE300 526 0 R /RE302 529 0 R /RE304 532 0 R /RE306 538 0 R /RE308 541 0 R /RE310 544 0 R /RE312 547 0 R /RE314 550 0 R /RE316 553 0 R /RE318 556 0 R /RE32 106 0 R /RE320 559 0 R /RE322 562 0 R /RE324 565 0 R /RE326 568 0 R /RE328 571 0 R /RE330 574 0 R /RE332 577 0 R /RE334 580 0 R /RE336 583 0 R /RE338 586 0 R /RE34 109 0 R /RE340 589 0 R /RE342 592 0 R /RE344 595 0 R /RE346 598 0 R /RE348 604 0 R /RE350 607 0 R /RE352 610 0 R /RE36 112 0 R /RE362 625 0 R /RE364 628 0 R /RE366 631 0 R /RE368 634 0 R /RE370 637 0 R /RE372 640 0 R /RE374 643 0 R /RE376 646 0 R /RE378 649 0 R /RE38 115 0 R /RE380 652 0 R /RE382 655 0 R /RE384 658 0 R /RE386 661 0 R /RE388 664 0 R /RE390 667 0 R /RE392 670 0 R /RE394 673 0 R /RE396 676 0 R /RE398 682 0 R /RE4 64 0 R /RE40 118 0 R /RE400 685 0 R /RE402 688 0 R /RE404 691 0 R /RE406 694 0 R /RE408 697 0 R /RE410 700 0 R /RE412 703 0 R /RE414 706 0 R /RE416 709 0 R /RE418 712 0 R /RE42 121 0 R /RE420 715 0 R /RE422 718 0 R /RE424 721 0 R /RE426 724 0 R /RE428 727 0 R /RE430 730 0 R /RE432 733 0 R /RE434 736 0 R /RE436 739 0 R /RE438 742 0 R /RE44 127 0 R /RE440 748 0 R /RE442 751 0 R /RE444 754 0 R /RE446 757 0 R /RE448 760 0 R /RE450 763 0 R /RE452 766 0 R /RE454 769 0 R /RE456 772 0 R /RE458 775 0 R /RE46 130 0 R /RE460 778 0 R /RE462 781 0 R /RE468 792 0 R /RE470 795 0 R /RE472 798 0 R /RE474 801 0 R /RE476 804 0 R /RE478 807 0 R /RE48 133 0 R /RE480 810 0 R /RE482 813 0 R /RE484 816 0 R /RE486 822 0 R /RE492 831 0 R /RE496 837 0 R /RE498 840 0 R /RE50 136 0 R /RE500 843 0 R /RE502 846 0 R /RE504 849 0 R /RE506 852 0 R /RE508 855 0 R /RE510 858 0 R /RE512 861 0 R /RE514 864 0 R /RE52 139 0 R /RE520 873 0 R /RE522 876 0 R /RE524 879 0 R /RE528 885 0 R /RE530 888 0 R /RE532 891 0 R /RE534 894 0 R /RE536 897 0 R /RE538 900 0 R /RE54 142 0 R /RE58 148 0 R /RE6 67 0 R /RE60 151 0 R /RE62 154 0 R /RE64 157 0 R /RE66 160 0 R /RE68 163 0 R /RE70 166 0 R /RE72 169 0 R /RE74 172 0 R /RE76 175 0 R /RE78 178 0 R /RE8 70 0 R /RE80 181 0 R /RE82 184 0 R /RE84 187 0 R /RE86 190 0 R /RE88 196 0 R /RE90 199 0 R /RE92 202 0 R /RE94 205 0 R /RE96 208 0 R /RE98 211 0 R >> >> endobj 3 0 obj << /Type /Outlines /Count 0 >> endobj 4 0 obj << /Type /Pages /Kids [125 0 R 194 0 R 260 0 R 329 0 R 398 0 R 467 0 R 536 0 R 602 0 R 680 0 R 746 0 R 820 0 R 904 0 R ] /Count 12 /Resources 905 0 R >> endobj 5 0 obj << >> endobj 6 0 obj << /Fields [ ] >> endobj 7 0 obj << >> endobj 8 0 obj [] endobj xref 0 906 0000000000 65535 f 0000000015 00000 n 0000000258 00000 n 0001254345 00000 n 0001254391 00000 n 0001254559 00000 n 0001254580 00000 n 0001254614 00000 n 0001254636 00000 n 0000000461 00000 n 0000046988 00000 n 0000047182 00000 n 0000048164 00000 n 0000050010 00000 n 0000051228 00000 n 0000051416 00000 n 0000051661 00000 n 0000052157 00000 n 0000052609 00000 n 0000052796 00000 n 0000053715 00000 n 0000055167 00000 n 0000055349 00000 n 0000056329 00000 n 0000058175 00000 n 0000059393 00000 n 0000059586 00000 n 0000059831 00000 n 0000060327 00000 n 0000060779 00000 n 0000060971 00000 n 0000061889 00000 n 0000063346 00000 n 0000108414 00000 n 0000108610 00000 n 0000109591 00000 n 0000111437 00000 n 0000112655 00000 n 0000112844 00000 n 0000113089 00000 n 0000113585 00000 n 0000114037 00000 n 0000114225 00000 n 0000115143 00000 n 0000116596 00000 n 0000166134 00000 n 0000166331 00000 n 0000167313 00000 n 0000169159 00000 n 0000170377 00000 n 0000170567 00000 n 0000170812 00000 n 0000171308 00000 n 0000171760 00000 n 0000171949 00000 n 0000172868 00000 n 0000174322 00000 n 0000174848 00000 n 0000174918 00000 n 0000175023 00000 n 0000175204 00000 n 0000175274 00000 n 0000175379 00000 n 0000175560 00000 n 0000175630 00000 n 0000175735 00000 n 0000175916 00000 n 0000175986 00000 n 0000176091 00000 n 0000176272 00000 n 0000176342 00000 n 0000176447 00000 n 0000176628 00000 n 0000176698 00000 n 0000176803 00000 n 0000176984 00000 n 0000177054 00000 n 0000177159 00000 n 0000177340 00000 n 0000177410 00000 n 0000177515 00000 n 0000177696 00000 n 0000177766 00000 n 0000177871 00000 n 0000178052 00000 n 0000178122 00000 n 0000178227 00000 n 0000178408 00000 n 0000178478 00000 n 0000178583 00000 n 0000178764 00000 n 0000178834 00000 n 0000178939 00000 n 0000179120 00000 n 0000179190 00000 n 0000179295 00000 n 0000179476 00000 n 0000179546 00000 n 0000179651 00000 n 0000179832 00000 n 0000179902 00000 n 0000180008 00000 n 0000180190 00000 n 0000181142 00000 n 0000224116 00000 n 0000224143 00000 n 0000224214 00000 n 0000224320 00000 n 0000228242 00000 n 0000228313 00000 n 0000228419 00000 n 0000228602 00000 n 0000228673 00000 n 0000228779 00000 n 0000228962 00000 n 0000229033 00000 n 0000229139 00000 n 0000229322 00000 n 0000229393 00000 n 0000229499 00000 n 0000229682 00000 n 0000229753 00000 n 0000229859 00000 n 0000230042 00000 n 0000231405 00000 n 0000231460 00000 n 0000231764 00000 n 0000231835 00000 n 0000231941 00000 n 0000232124 00000 n 0000232195 00000 n 0000232301 00000 n 0000232484 00000 n 0000232555 00000 n 0000232661 00000 n 0000232844 00000 n 0000232915 00000 n 0000233021 00000 n 0000233204 00000 n 0000233275 00000 n 0000233381 00000 n 0000233564 00000 n 0000233635 00000 n 0000233741 00000 n 0000233924 00000 n 0000234271 00000 n 0000261161 00000 n 0000261188 00000 n 0000261259 00000 n 0000261365 00000 n 0000261548 00000 n 0000261619 00000 n 0000261725 00000 n 0000261908 00000 n 0000261979 00000 n 0000262085 00000 n 0000262268 00000 n 0000262339 00000 n 0000262445 00000 n 0000262628 00000 n 0000262699 00000 n 0000262805 00000 n 0000262988 00000 n 0000263059 00000 n 0000263165 00000 n 0000263348 00000 n 0000263419 00000 n 0000263525 00000 n 0000263708 00000 n 0000263779 00000 n 0000263885 00000 n 0000264068 00000 n 0000264139 00000 n 0000264245 00000 n 0000264428 00000 n 0000264499 00000 n 0000264605 00000 n 0000264788 00000 n 0000264859 00000 n 0000264965 00000 n 0000265148 00000 n 0000265219 00000 n 0000265325 00000 n 0000265508 00000 n 0000265579 00000 n 0000265685 00000 n 0000265868 00000 n 0000265939 00000 n 0000266045 00000 n 0000266228 00000 n 0000266299 00000 n 0000266405 00000 n 0000266588 00000 n 0000268955 00000 n 0000269010 00000 n 0000269314 00000 n 0000269385 00000 n 0000269491 00000 n 0000269674 00000 n 0000269745 00000 n 0000269851 00000 n 0000270034 00000 n 0000270105 00000 n 0000270211 00000 n 0000270394 00000 n 0000270465 00000 n 0000270571 00000 n 0000270754 00000 n 0000270825 00000 n 0000270931 00000 n 0000271114 00000 n 0000271185 00000 n 0000271291 00000 n 0000271474 00000 n 0000271545 00000 n 0000271651 00000 n 0000271834 00000 n 0000271905 00000 n 0000272011 00000 n 0000272194 00000 n 0000272265 00000 n 0000272371 00000 n 0000272554 00000 n 0000272625 00000 n 0000272731 00000 n 0000272914 00000 n 0000272985 00000 n 0000273091 00000 n 0000273274 00000 n 0000273345 00000 n 0000273451 00000 n 0000273634 00000 n 0000273705 00000 n 0000273811 00000 n 0000273994 00000 n 0000274065 00000 n 0000274171 00000 n 0000274354 00000 n 0000274425 00000 n 0000274531 00000 n 0000291890 00000 n 0000291961 00000 n 0000292067 00000 n 0000292250 00000 n 0000292321 00000 n 0000292427 00000 n 0000292610 00000 n 0000292681 00000 n 0000292787 00000 n 0000292970 00000 n 0000293041 00000 n 0000293147 00000 n 0000293330 00000 n 0000293401 00000 n 0000293507 00000 n 0000293690 00000 n 0000293761 00000 n 0000293867 00000 n 0000294050 00000 n 0000300285 00000 n 0000300340 00000 n 0000300644 00000 n 0000300715 00000 n 0000300821 00000 n 0000301004 00000 n 0000301075 00000 n 0000301181 00000 n 0000301364 00000 n 0000301435 00000 n 0000301541 00000 n 0000301724 00000 n 0000302214 00000 n 0000324800 00000 n 0000324827 00000 n 0000324898 00000 n 0000325004 00000 n 0000325187 00000 n 0000325258 00000 n 0000325364 00000 n 0000325547 00000 n 0000325618 00000 n 0000325724 00000 n 0000326154 00000 n 0000326225 00000 n 0000326331 00000 n 0000326755 00000 n 0000326826 00000 n 0000326932 00000 n 0000327115 00000 n 0000327186 00000 n 0000327292 00000 n 0000327475 00000 n 0000327546 00000 n 0000327652 00000 n 0000327835 00000 n 0000327906 00000 n 0000328012 00000 n 0000328195 00000 n 0000328266 00000 n 0000328372 00000 n 0000328555 00000 n 0000328626 00000 n 0000328732 00000 n 0000328915 00000 n 0000328986 00000 n 0000329092 00000 n 0000329275 00000 n 0000329346 00000 n 0000329452 00000 n 0000329635 00000 n 0000329706 00000 n 0000329812 00000 n 0000329995 00000 n 0000330066 00000 n 0000330172 00000 n 0000330355 00000 n 0000330426 00000 n 0000330532 00000 n 0000330715 00000 n 0000330786 00000 n 0000330892 00000 n 0000331075 00000 n 0000331146 00000 n 0000331252 00000 n 0000331435 00000 n 0000331506 00000 n 0000331612 00000 n 0000331795 00000 n 0000334905 00000 n 0000334960 00000 n 0000335264 00000 n 0000335335 00000 n 0000335441 00000 n 0000335624 00000 n 0000335695 00000 n 0000335801 00000 n 0000335984 00000 n 0000336055 00000 n 0000336161 00000 n 0000336344 00000 n 0000336415 00000 n 0000336521 00000 n 0000336704 00000 n 0000336775 00000 n 0000336881 00000 n 0000337064 00000 n 0000337135 00000 n 0000337241 00000 n 0000337424 00000 n 0000337495 00000 n 0000337601 00000 n 0000337784 00000 n 0000337855 00000 n 0000337961 00000 n 0000338144 00000 n 0000338215 00000 n 0000338321 00000 n 0000338504 00000 n 0000338575 00000 n 0000338681 00000 n 0000338864 00000 n 0000338935 00000 n 0000339041 00000 n 0000339224 00000 n 0000339295 00000 n 0000339401 00000 n 0000339584 00000 n 0000339655 00000 n 0000339761 00000 n 0000339944 00000 n 0000340015 00000 n 0000340121 00000 n 0000340304 00000 n 0000340375 00000 n 0000340481 00000 n 0000340664 00000 n 0000341325 00000 n 0000372144 00000 n 0000372171 00000 n 0000372242 00000 n 0000372348 00000 n 0000372531 00000 n 0000372602 00000 n 0000372708 00000 n 0000372891 00000 n 0000372962 00000 n 0000373068 00000 n 0000373251 00000 n 0000373322 00000 n 0000373428 00000 n 0000373611 00000 n 0000373682 00000 n 0000373788 00000 n 0000373971 00000 n 0000374042 00000 n 0000374148 00000 n 0000374331 00000 n 0000377055 00000 n 0000377110 00000 n 0000377414 00000 n 0000377485 00000 n 0000377591 00000 n 0000377774 00000 n 0000377845 00000 n 0000377951 00000 n 0000378134 00000 n 0000378205 00000 n 0000378311 00000 n 0000378494 00000 n 0000378565 00000 n 0000378671 00000 n 0000378854 00000 n 0000378925 00000 n 0000379031 00000 n 0000379214 00000 n 0000379285 00000 n 0000379391 00000 n 0000379574 00000 n 0000379645 00000 n 0000379751 00000 n 0000379934 00000 n 0000380005 00000 n 0000380111 00000 n 0000380294 00000 n 0000380365 00000 n 0000380471 00000 n 0000380654 00000 n 0000380725 00000 n 0000380831 00000 n 0000381014 00000 n 0000381085 00000 n 0000381191 00000 n 0000381374 00000 n 0000381445 00000 n 0000381551 00000 n 0000381734 00000 n 0000381805 00000 n 0000381911 00000 n 0000382094 00000 n 0000382165 00000 n 0000382271 00000 n 0000382454 00000 n 0000382525 00000 n 0000382631 00000 n 0000382814 00000 n 0000383485 00000 n 0000415242 00000 n 0000415269 00000 n 0000415340 00000 n 0000415446 00000 n 0000415629 00000 n 0000415700 00000 n 0000415806 00000 n 0000423951 00000 n 0000424022 00000 n 0000424128 00000 n 0000424311 00000 n 0000424382 00000 n 0000424488 00000 n 0000424671 00000 n 0000424742 00000 n 0000424848 00000 n 0000425031 00000 n 0000425102 00000 n 0000425208 00000 n 0000425391 00000 n 0000428754 00000 n 0000428809 00000 n 0000429113 00000 n 0000429184 00000 n 0000429290 00000 n 0000429473 00000 n 0000429544 00000 n 0000429650 00000 n 0000429833 00000 n 0000429904 00000 n 0000430010 00000 n 0000430193 00000 n 0000430627 00000 n 0000451284 00000 n 0000451311 00000 n 0000451382 00000 n 0000451488 00000 n 0000451800 00000 n 0000451871 00000 n 0000451977 00000 n 0000452288 00000 n 0000452359 00000 n 0000452465 00000 n 0000452648 00000 n 0000452719 00000 n 0000452825 00000 n 0000453008 00000 n 0000453079 00000 n 0000453185 00000 n 0000453368 00000 n 0000453439 00000 n 0000453545 00000 n 0000453728 00000 n 0000453799 00000 n 0000453905 00000 n 0000454088 00000 n 0000454159 00000 n 0000454265 00000 n 0000454448 00000 n 0000454519 00000 n 0000454625 00000 n 0000454808 00000 n 0000454879 00000 n 0000454985 00000 n 0000455168 00000 n 0000455239 00000 n 0000455345 00000 n 0000455528 00000 n 0000455599 00000 n 0000455705 00000 n 0000455888 00000 n 0000455959 00000 n 0000456065 00000 n 0000456248 00000 n 0000456319 00000 n 0000456425 00000 n 0000456608 00000 n 0000456679 00000 n 0000456785 00000 n 0000456968 00000 n 0000457039 00000 n 0000457145 00000 n 0000457328 00000 n 0000457399 00000 n 0000457505 00000 n 0000457688 00000 n 0000457759 00000 n 0000457865 00000 n 0000458048 00000 n 0000463011 00000 n 0000463066 00000 n 0000463370 00000 n 0000463441 00000 n 0000463547 00000 n 0000463730 00000 n 0000463801 00000 n 0000463907 00000 n 0000464090 00000 n 0000464161 00000 n 0000464267 00000 n 0000464450 00000 n 0000464521 00000 n 0000464627 00000 n 0000464810 00000 n 0000464881 00000 n 0000464987 00000 n 0000465170 00000 n 0000465241 00000 n 0000465347 00000 n 0000465530 00000 n 0000465601 00000 n 0000465707 00000 n 0000465890 00000 n 0000465961 00000 n 0000466067 00000 n 0000466250 00000 n 0000466321 00000 n 0000466427 00000 n 0000466610 00000 n 0000466681 00000 n 0000466787 00000 n 0000466970 00000 n 0000467041 00000 n 0000467147 00000 n 0000467330 00000 n 0000467401 00000 n 0000467507 00000 n 0000467690 00000 n 0000467761 00000 n 0000467867 00000 n 0000468050 00000 n 0000468121 00000 n 0000468227 00000 n 0000468410 00000 n 0000468481 00000 n 0000468587 00000 n 0000468770 00000 n 0000468841 00000 n 0000468947 00000 n 0000469130 00000 n 0000469201 00000 n 0000469307 00000 n 0000469490 00000 n 0000469561 00000 n 0000469667 00000 n 0000469850 00000 n 0000469921 00000 n 0000470027 00000 n 0000470210 00000 n 0000470281 00000 n 0000470387 00000 n 0000470570 00000 n 0000470641 00000 n 0000470747 00000 n 0000470930 00000 n 0000476234 00000 n 0000476289 00000 n 0000476593 00000 n 0000476664 00000 n 0000476770 00000 n 0000476953 00000 n 0000477024 00000 n 0000477130 00000 n 0000477313 00000 n 0000477384 00000 n 0000477490 00000 n 0000477673 00000 n 0000477966 00000 n 0000487542 00000 n 0000487568 00000 n 0000487861 00000 n 0000498953 00000 n 0000498980 00000 n 0000499256 00000 n 0000510037 00000 n 0000510064 00000 n 0000510340 00000 n 0000521301 00000 n 0000521328 00000 n 0000521399 00000 n 0000521505 00000 n 0000521688 00000 n 0000521759 00000 n 0000521865 00000 n 0000522048 00000 n 0000522119 00000 n 0000522225 00000 n 0000522408 00000 n 0000522479 00000 n 0000522585 00000 n 0000522768 00000 n 0000522839 00000 n 0000522945 00000 n 0000523128 00000 n 0000523199 00000 n 0000523305 00000 n 0000523488 00000 n 0000523559 00000 n 0000523665 00000 n 0000523848 00000 n 0000523919 00000 n 0000524025 00000 n 0000524208 00000 n 0000524279 00000 n 0000524385 00000 n 0000524568 00000 n 0000524639 00000 n 0000524745 00000 n 0000524928 00000 n 0000524999 00000 n 0000525105 00000 n 0000525288 00000 n 0000525359 00000 n 0000525465 00000 n 0000525648 00000 n 0000525719 00000 n 0000525825 00000 n 0000526008 00000 n 0000526079 00000 n 0000526185 00000 n 0000526368 00000 n 0000526439 00000 n 0000526545 00000 n 0000526728 00000 n 0000526799 00000 n 0000526905 00000 n 0000527088 00000 n 0000527159 00000 n 0000527265 00000 n 0000527448 00000 n 0000527519 00000 n 0000527625 00000 n 0000527808 00000 n 0000531167 00000 n 0000531222 00000 n 0000531526 00000 n 0000531597 00000 n 0000531703 00000 n 0000540453 00000 n 0000540524 00000 n 0000540630 00000 n 0000540813 00000 n 0000540884 00000 n 0000540990 00000 n 0000541173 00000 n 0000541244 00000 n 0000541350 00000 n 0000541533 00000 n 0000541604 00000 n 0000541710 00000 n 0000541893 00000 n 0000541964 00000 n 0000542070 00000 n 0000542253 00000 n 0000542324 00000 n 0000542430 00000 n 0000542613 00000 n 0000542684 00000 n 0000542790 00000 n 0000543202 00000 n 0000543273 00000 n 0000543379 00000 n 0000543786 00000 n 0000543857 00000 n 0000543963 00000 n 0000544391 00000 n 0000544462 00000 n 0000544568 00000 n 0000544984 00000 n 0000545055 00000 n 0000545161 00000 n 0000545597 00000 n 0000545668 00000 n 0000545774 00000 n 0000545957 00000 n 0000546028 00000 n 0000546134 00000 n 0000546317 00000 n 0000546388 00000 n 0000546494 00000 n 0000546677 00000 n 0000546748 00000 n 0000546854 00000 n 0000547037 00000 n 0000547108 00000 n 0000547214 00000 n 0000547397 00000 n 0000547468 00000 n 0000547574 00000 n 0000556434 00000 n 0000556505 00000 n 0000556611 00000 n 0000565603 00000 n 0000565674 00000 n 0000565780 00000 n 0000574869 00000 n 0000574940 00000 n 0000575046 00000 n 0000584137 00000 n 0000591637 00000 n 0000591692 00000 n 0000591996 00000 n 0000592067 00000 n 0000592173 00000 n 0000592356 00000 n 0000592427 00000 n 0000592533 00000 n 0000592716 00000 n 0000592787 00000 n 0000592893 00000 n 0000593076 00000 n 0000593147 00000 n 0000593253 00000 n 0000593436 00000 n 0000593507 00000 n 0000593613 00000 n 0000593796 00000 n 0000593867 00000 n 0000593973 00000 n 0000594156 00000 n 0000594227 00000 n 0000594333 00000 n 0000594516 00000 n 0000594587 00000 n 0000594693 00000 n 0000594876 00000 n 0000594947 00000 n 0000595053 00000 n 0000595236 00000 n 0000595307 00000 n 0000595413 00000 n 0000595596 00000 n 0000595667 00000 n 0000595773 00000 n 0000595956 00000 n 0000596027 00000 n 0000596133 00000 n 0000596316 00000 n 0000764717 00000 n 0000764745 00000 n 0000917313 00000 n 0000917341 00000 n 0001012675 00000 n 0001012702 00000 n 0001165283 00000 n 0001165311 00000 n 0001165382 00000 n 0001165488 00000 n 0001165671 00000 n 0001165742 00000 n 0001165848 00000 n 0001166031 00000 n 0001166102 00000 n 0001166208 00000 n 0001166391 00000 n 0001166462 00000 n 0001166568 00000 n 0001166751 00000 n 0001166822 00000 n 0001166928 00000 n 0001167111 00000 n 0001167182 00000 n 0001167288 00000 n 0001167471 00000 n 0001167542 00000 n 0001167648 00000 n 0001167831 00000 n 0001167902 00000 n 0001168008 00000 n 0001168191 00000 n 0001168262 00000 n 0001168368 00000 n 0001168551 00000 n 0001173004 00000 n 0001173059 00000 n 0001173363 00000 n 0001173434 00000 n 0001173540 00000 n 0001173723 00000 n 0001173964 00000 n 0001181018 00000 n 0001181044 00000 n 0001181285 00000 n 0001187647 00000 n 0001187673 00000 n 0001187744 00000 n 0001187850 00000 n 0001188157 00000 n 0001188363 00000 n 0001191020 00000 n 0001191046 00000 n 0001191117 00000 n 0001191223 00000 n 0001191531 00000 n 0001191602 00000 n 0001191708 00000 n 0001191891 00000 n 0001191962 00000 n 0001192068 00000 n 0001192251 00000 n 0001192322 00000 n 0001192428 00000 n 0001192611 00000 n 0001192682 00000 n 0001192788 00000 n 0001192971 00000 n 0001193042 00000 n 0001193148 00000 n 0001193331 00000 n 0001193402 00000 n 0001193508 00000 n 0001193691 00000 n 0001193762 00000 n 0001193868 00000 n 0001194051 00000 n 0001194122 00000 n 0001194228 00000 n 0001194411 00000 n 0001194482 00000 n 0001194588 00000 n 0001194771 00000 n 0001195039 00000 n 0001204648 00000 n 0001204674 00000 n 0001205029 00000 n 0001220688 00000 n 0001220715 00000 n 0001220786 00000 n 0001220892 00000 n 0001221200 00000 n 0001221271 00000 n 0001221377 00000 n 0001221685 00000 n 0001221756 00000 n 0001221862 00000 n 0001222045 00000 n 0001222400 00000 n 0001238059 00000 n 0001238086 00000 n 0001238157 00000 n 0001238263 00000 n 0001238446 00000 n 0001238517 00000 n 0001238623 00000 n 0001238806 00000 n 0001238877 00000 n 0001238983 00000 n 0001239166 00000 n 0001239237 00000 n 0001239343 00000 n 0001239526 00000 n 0001239597 00000 n 0001239703 00000 n 0001239886 00000 n 0001239957 00000 n 0001240063 00000 n 0001240246 00000 n 0001245669 00000 n 0001245724 00000 n 0001246028 00000 n trailer << /Size 906 /Root 1 0 R /Info 2 0 R /ID [<8833003FD2FFA0ECA8BF3BC8BC8BAD7D><8833003FD2FFA0ECA8BF3BC8BC8BAD7D>] >> startxref 1254654 %%EOF Plinth-0.8.1/static/themes/default/FreedomBox-Logo.7z000066400000000000000000006460121266051671100224060ustar00rootroot000000000000007z'*XK$hˇf{3(1v%f M* mj)p8A[KR}/Y0]" d[r8KD`[E:CAڸ)?ɸlhOZoו$>7%~pɹ T1r@+NT#oR!x2#`zj'W.?yKzc1M+M uMa_uH vQ'о=)_V.VUq'C;[rYT(e44LR0GsB85f 2HTO[QKF\ uaxR6>N`@`D5$2%r'"4ȅ Iq;yHI (E0 5tpSqH2.1>BFNh&1{Ճn>!QWIHiGT + ӐAŒeT^7z?֍wJAչoXvfsDuΌm.FOOMRSO?`teKG;\&Zre;0/xƛc5M2*qWh!i#*CDm[o?"Dgλk9 d#vgR;%]BJAODmBTĴߒQD.0;5x(P곥@5nRƟbNAO H,nR*_8m&N2#dn.rJjM,oSLa5A^};~$Ndx2[uݛU˰aڇͥߣ)j77#%B%^ȷ@t]GT@\`\q;mԾB7W1:v AVΝ◙(U=g`pu7>__ 8_9i;*Ah{PDSH ;6kP-:7Mwd 2g (1BSS @%ǥIҔ M!&YD#Pj))&|~Ι%B4Q2eePgvҢձfP%yGf.轓N~'4[2tJ& RRW{}mJ)BBCd( ?=I/) z|MddA7TnܹT0X&3cCyY`k_0icCEDO|.EC YѰ 1I.Vka"kDy}Ө|3p%/[Q"H_d ;qL2nA `쨴$X cJe$W3Ù Z ɧSI~DŁ<x 2db H2~Z\Q{ Scrk }dLhX=Q"Ø%|6 GAt=8UᏅ{(bֈWa<)F8ćbx#-HJIr[gS$bgY\mчL=CRڹ u?`%n{g ^a"p?;5yä!#K5m^ƺJvC-/MACf5,qzY?OB (hbC<jǙRئ1]1ً8]&2i~yHdu T@eXѾI{.1 Yw<ȦwWtɖnŨSv) {> ! tN58׿H@^hמq:x6O=c,nQr #7;}!G!! pjn- ).zv=Y:ROddi!~[.*B?֒@O"|vϻ^ aM/N{LCyūYQ YZ 0DiV4в4.*96ȚZ<>2mkÆ~`zVc>v\_?MydSCBH6LO4^f|.pO}}G\w~]{3{Q*֛*6KQBPM K-iH W}Hs;aR>ЗMLŹz8̿iYugR&Rԁ2! gj.OhVSqQ6kbk$Ax!vz-m(ќ, hP)G>}hizӱ"\Ը`Ԕs;?_HOdteMKsIvZkȽ\|`:+ӱohdJ{e*DwLC зG836MۦFL^kn=,YqJUT0ٌPȆwg!cbW[jNi:)2_ATb]q4܆Vj+]7;:89tZ:(>Qq|k)X~p=BG'k47qHݎm)lCQSwS䥰ۦq3q{|7r_kvnVaةWC߮%]ʸ‹ɺ{ؒw,O]T7"Tz\0{`!0 {4nfM3yspEV?53ZV8H G^Hs(Đ-nN$[6اFUDn p HCfשjI(wZLQ{ɲ.v'6~5nߊHL#{n\8N maUÂQw#/- ]`$9Jjyަ˘J4P|qec=:cof䉫N:C:6U҃L ƧI^TLom/Cs48#8 v~ɧҾ1Y@x녞1:8~''\z7苵U&TSۛCoPe#d *BTK7-nBu2mM_*NLI͢t-:9t/jznI. $sA@iPZPE}M0g@@\Qk)8O-f.[gɻ"piAA0|H-/"`܅0FZއa/t2TF ̑gǕ!(Ung)^wHPVc(>%KZfw*pTx ,ԜwN""i= ط$OJl) fEE1V|UX4p4Mc_G.r. /BI{b+G a?a_]wfVAy SEש_dmi^V pC`p\ H3ya] ۗ\ϔ(ߗ/Xw03F=!/`f[[ {,(C-͎Fqn|XpzҲv`݉JhLhT'0C,"#r^.f(H3IJ6d9&G#/]$gMʹOؿn۪kԾ 6r4*Kq *77X# [R E6?,A1م2^O*UТG!]/bdF=xQK*LL0@nq3`z:6kȻ*:_d;Acb^Ze[nJ6p;g*͖/WՑ(p砗 prxmP4d'͟LF5Ӵ)N dU0gp@b6d)/wTdh:( dȦSSeEjϝc|Γ`98%]Y ߖu} Z[{K>,|̵*-۔/1&,YgRS< s6&GI4DzZ05.᳐3dlkhMA=ȕMfٓ) zatf-O[Q2 *b 3f9{; (LR&hCGe ZCΩK asL bAIvIˁ\Tm$>żI[Ux/=9EA~Y4ޛl*hYUgk*%ܠ VOY l|c[b[|U!/oCXAnٺX"24 !g@-G4{n2s~wta qA{V@?7nmUi=5N1Cs*53ĄuۋopDJ{]MS#|!Z^N'?{흯:s[PG>2¬ˢ4Dxx/wH; =YCPǀ7eBag*E>Y8p`jG-R@E?nL)T:rHEdTy}`+dq.V2zO/+Ap}xiP~yެ~_WgN. w[T e0wl詌{B&v e0ثNk`&<ɳZrzU4glIQpє7ͷ)m" Sjva=tQ~ \fmRsHs.z# T:VS |M~)jAOZzNY©o6QY-N/B~Q!"*Q:YK耮֫!fÙ >Q4d*I+dY cN 7ߥI,ul,y i2x]n+/5A_ej>+6HU1A P #%)9uR -l|qrG("/Uc";&b1FQȎPֵYܡ4JwQd RePzf(VPfh)SPܟ~Fn2sI'`%_NĘCٹ8Ώm QD&f*B+٨񷜃MDrm&ZPh8 s9g;B,ZElw$08Y:g ^ؓLFa^G sZb}-4>${&㨋*Ely~mKڔiorGX5#@sež[յ+!mGuf6W[k"gn77v7υ̿ӬY+~RpIT 3iO-H Pi1Š.9 OLp:I/2w-s=ه @桯6vv5ƱF @Þ܇! \SڟNAeЙ,0f VF%-Am6SfK&äu;T-53jV!wpu#.Y dYI'R5u-gG͸t'ٟߗlyLIDᕌ_|"_"3[-hһICЉ8-NX9<ͽ8.JaL{3T*z1b?`N>D';6ή]~b4)6Q?>֘[yo#:TNbx(NuWv!iڢv1?DAK '"`Xk4^iA$.%Ai‡<Ӆ`.;Qɤ.65ӝZ nRLAO|Z}fg~e0q혵 >4D.ӃS3#qwJn<$n';UsE\IZ$ڿ3Ka'4`k ">7M>Jm,s7FmfnMU.!SEQSuzNVy.]wU,xn Pf*1RZE~J%.7C ܉UR 2|͹^d(|يH ԕ oN7h=99rͰT;hRniDi*nMD/h&g;ψaF3n^E?*6wk 4-יoApC R6_DRR]MaݩNAuEЕ BcΕI/913o#0F%]Ƀ OZD ,p^<ݢݤmquqK"!C`6p@R"bAeMI|THl .7k0(N>U Lޛڸs)ڲᠿ( o-9x9& 9cFoHOz*`wa^lD?ތ"3ؠ>$O1ime%ϣi֛-⁲]_>VCଶ&g] ':Y<\͊xrTcGaGv=1jjX{1T℺0BA,r 6ڰ-6&& ^E $ȕba|{Fd.~BpҷlkW"dZ"ܲ~Zӎ༭7p0>x{WrC QϩmӘyK@~OpW;ׅ1UNҟ6E߼,gkO 2iex1I˨j?I'$|ΑlF fA+)]0ȧ1f6 @ Zb;CP}y>w~٢x]2XsubQja2SAؘHOߛߏ&$LX#Lπ xqe"cf̄·Γڽ07(hX ;#̍x\p ^\l,r::4Fyj &,@S@4w!˟,&&YEՁv-7Z&j9;C?.6wp|]E )ijbk+3Wse?/QDm0]R1ٍxqh X&֘cSNl ĘfRxui4AW2i ؞Ϭ m<yqBRMxrE\9[ӲSdMuY>FtW%ɸNH!Pi_fR"DTnLݩ> |F5n=5)^E&E"d +JztU#pxm7s K+mƎ>L"CșJL` ZQ-MQ:\7Ua-NeQnI9-~*{]tː9e *\PÁ !$FBsz%z) rhXtwf}zX8++SKf j [rL5)Ұy13˙(qMu%KOM\@:Ĕd;ّ(C 1ڳƇzrR徤 `G7ӆh9*] 5/RMвނT7< *Jٳ4 a}7;IڳcVF;_o6f0& =CI|I3?tSdhQ 9]s1eyRCM:NЮͅ`{A%s]paQNLo!wXq/ydNKaͺg$:쟙[H; }uGx\iX^.k0q76,V.r%hBrH~O/K#(g0v<*Dm7trc̝)!X>V6 6Y${|r~ƋG$eߊ[LT6 J1bSZ;h!׍`>_Xc{E畊$%!4+S˴cܢiVթqKk@z! @NND,Qq>D=䟐NfjB7JeBKIo)bKZPm_*CXlg'.:(QziwG+YHubqϜXGT/Wːw+{By Rs9LCLپ |NXfb+(?JeѰPzxtz{/`'4= oD DJ eݸɖnљR4O(y0[KDOnUjx!4G2)W iEad f|6slK"|||UUF&A w 悒vPT[MНQ`ZoFHHP<]qa]>lGae6@Hd6T%=ho|8^=Mex I,ׯ Y]S%+ ( mHmyJcxbE ;&%;Wv@9v.4# Y3~ԄAp<\ M)FK1*Ϭ3 b(:RkT?ڏ=)}p#HmteT+)l A(0\OW'ҥx4h8L (#S6LbdsN*% psĝMT_ޙh$i1}c@um‡|8w'HP8c^v{ ~Kcv>i"ilfh ]B_!SD~77ϚQ' ĭkV:U%ǩQBl2,(!1ވsbw,Z +]517T-;=z@U $mhc_]y^ cuy?_M P:F鶀a15sB7Aқ]Qwc[@zW&(pⳀ=1m*W;h]veb:H\u%/.cr4qT {܃8 iaY.mQP9@: Q&ih_cF(RMΩ!>ЍA2j"Ù J(f`='PDuTo0Pn,/jz(7Od:Kgi*UD" S6NX.zF:}(>pLQ9(jɵ,&>xS L3B$[u4=2gGдQaodd{jtlM*|B:YZd!A(0% 1:*mkyIܧ?/kԨ)V]=Ξ]&JZikJ'OёAqznwb4 Fbʁy1l5Q;0.+ɹdL$ߤeLuܹ Ul|6Lr  ba顳X!g{o2 v#Xd*'%I[Y;a5ڶz ӚOIܱyGoRLFqN/LoMe~}5b|X څT' 0x_>`4o.CVv/c۵^KM0e&Jϳ>BE:~7N\*[| [pϮȒSZ2.afRO:l֊!+fSDG(J 3 @{IYMdG,m3V0Z SPTWNΰV3lFFk)RWg`UX[+GR 7'i1Kgl'0"R<j$uRDPb*3n@Q##':} }a6"\k&\1OޛYOM٠';/!'{K9)t*X h:H ވ/'UZզ~8ob7Ea a.'b 3]WShx:Si2&yc%Euc_W,V{;t2svnj荐 '<^5mJ^QE߭/\hb=mu$Q+}tr :'JF2d(Az7P̿FA.?Y^ (z9 ߜ2̝2Ԥ)M?Soٌ?XŠa)#ɐU>#>#!Y ՔUefFH&¹Td}1'ZNP?)AR7Qa/ݔa9T&_\KOF0h#J;J6]ƣX7 |Vg-SH۷y<Ľ(;^«VO^Q~+MZCBs1a˙gn%Ե/&"x0Ku@O h"t<,~ MAfi6 Ykq5gLŶ,^!~fGdL}qX:`$>6剥WZ\;K7_QpG2n#J'ޓUHQצ 1 ?V  EcJEUNCϢa7.FVð-b*{[(:"ֽD!%HűVub/MQUZb*SIq7PqZG|Xء(oI'.%9)H~-}y\ocܽ? )fz75[ɜm[iu1E^kv~KX[^h{(n+R{rGA5"zR⤨aG2N0\8\B~2T4'.mtyl+X˓1BHX8<n.*WfYΚA}vI82߻h$܎CaK2LL0Ň|kc3;C|c$5H+H}]F6NA .?~Q65>W#ZΤR;1hDJn(X[^*>8JoD wǗCt=+`l%eoz&(e/jK;[/8>W~j^yfEMəZP Q۩@P~ʑ2H%w7ZC1g(^,$evfr?( Db܎)1R)p IMK!"ĔtUݧ@ 6ϖ‘˔H>m!KK=`!̶*66xihsEx{>?Ffw:9#_rNfoNUfp`{ݶd㘝mkW\F&#vZ᷃l]ߡ,|j/(Z&bJct a&iNc7"cDOO5ҧO<@Z@5 #\m ET9' 4x4=:x[y#o@ed5už13;&z}sdmyK ElSk#sՍ?jzOaPǑz1 dm=ٹ1x貰\-{)lNݼȈpջTQu bJ$^'qǓ&- ދuT]{|0E%$Vq]4GëǀB|;dn+x!g]5 tM03y^C21ldZ2)d(a-sٞ DV?YQ4`Ntm|I3ak@;1O+p1zgÈr3SmCCT `ݥ^B'Ǿfi \Q29 +K?8Jd;;C/]-Ie]݇uQh%%^';'~w"*+oִ_?\3}dSw;YR4kyq;^?Z'=+Ε5A]gpeOq \ D:m[[2G69Dr >: 7LIMϫpo'w.xMx gؽL6߆"~Zt%T2UX1+̍bR?OH]r i' ֥'+SP[e? ںOM:lF?:zjTk6G|&0;Ar/c'tHǽa‚80#Δ/.+B,#3q&>@Oq#Mfl`U Y&^kwQi烈\lݽk!$Ŕ~6 G䖎q+WS!uWuavi.`p_&['Jޙ3H AR&-9}5i2硨l:EdDisNq;_'mظl1^ ]o"s̲Ic)>-{95SF+zRʓΧyoKC4C2w][{@A*Uu.]ɱ:yE;#K 4cWek#\ n})ި.^Đ!V1%dî]қ@Tj~gؿxJz5"gHv[\]>ܨ=CŌIO;ȧ8rz~8[kDYx"4WzwujE* TxͯB?{koAғ75ji_udjCqQs!Ce_] wE]CйO((nmxql[H4}E|z= huy$aA6x̒"bhԧo1ok/8'ߺ Z ?#V ϤJ0Ass6e!E: A1蟰+mxDѫFke(;2@1\[Cm6]׫K. Ԕ]gݔOxSve(V>vMjk+^\bNX9 ҇ Dr y ׁ6aM/j J_za(т..x}5 ~.y riLn+K9A+H.ߝdK]`[zzd}Rn{ hB Jy|a㏰X=f\bwF!UcCY6?w&[mhgBĶ XC!qSdNT3E\FDyStfpgդL9t }ԧ1^B@c IBZY8 W ~d#5F<2<N^<ʏ@4uA@BJr$99!d?-}x`3 ݹ#le~"4ɽv˓}z,f,F9aN&: t==16=k,x֔_qHPހewl2\ }oԦ*%6wh\rHk+kc2p{%Kbd,;2Fddc E7v?qman9ٝ0Zc&_ e͚_T ]sg[=}!nAF͏*- `6`QvCo-DZdξdm((b f#O^~H}+wm9Gzb{nIahC ANR 7P#Ϥ L=]LF-yv=7sq!j&q@1*Z4<]uj,zpX Hע0VrLJgsZ}RihV{2H_jyjBR %,) -`>NpÕRΆ4f6S1/TyZe8m=BsūsaRxw+}C`G~D#3̸oJGz<#L۸(?he9ބ40&"BG;Vuەys5Q 0z{ucq`.b}OK.z7xnk&S^I.d?\C\)^4nC[L-.F]ئr ^l y%>@_l9he>ߟLƊՠH* Hߵ0ndm u X9jϵjcEy ,@#B0&P_~ <#hYHM JKN VFQWpCq){PEOnE @o@u^2(Z<ɥXEe COxɶXvFl:q'E(C/"QN%ͅ&-]]0B/_}`ol6<>1%  "ulHp` 7U.ݰQVteZW5W5w$K6 ͓$j;vu63Јa\.9qru9̐uÚ|)7֍z0O:j ryqVؘ^ZBwmեD/HKBi7Lձ">f'7:WbBsr2Ƣ'^g|QA_:f]giekzDSr!AE3 U; >z̹rGn5kW4YկW)d,/2NkħPq<\x|jٌCmg-%fO)Xi=nҭ,NLt>,Rn8\Ľj@ی)Q4Ϙ8GsJiezʋ'kALG[㥭R$3nZ 9CJc e/djTa1Djܖ t2j$?acg'ӇghfppXHյ TA\|* :t8dG0^t:Vg>yo qd^!\W4Ir٫>峢Ai8{/㩒١kYqs¨~Ճ^fPfF. Fpo(k0[ qa=kp^ӛ6(KhaA/v^i8c:\9BYկ0qMP)Fg*UځGQ;BU­>QiaғL=Xݠ6}RZ7&k $Es&xE46lcZg1OKO*y~,AX@-wӅ#clC@sKG8]k6D84Xa kڮ7GUGPA9J'up;0]^%ed˿ŝtXW/R#T juD(@:\^a+6wj)(0, |P3a%1e,֝$!.RwFܷBI۟]ܙroQGMWTG,OO}E~>Y Ax37,ⳛvnT6"bCm^c">kvf6@-伈xK-YvS;ggA`ʇ~*o^2t`UmCT });% N|r,41y6UꃵOObZ|_o xYK&Z%C0LK'sσk} 4m4!!ch-L܋c@`㾩WX([6F?%B̽-#{.' gSSkZr6(n=%#abK6'?زc$ZԳPth8JMzvNm;%2c_,a0ŭk gHUe48kZ0ͬe@HIlhS>aM$nՀ.˫;RKEZ3 2s QxX Q?rŹHFX, UZneT7Qj3u>o&'l#L-Ν Pzz-v4SK݉Pcވp+ԧ~sf'o$W R̲jЉv}AA;CmÆ19P5hxnsHrʮ:0QyV7AT-ǗdN8/Ꟊ ݎV)qR}yL{% vr> ?v+6zޛ:j7Hxbq15V[xi/,ZIwD4bFbﮱҘAGї-cߋH9 (k'BlHT}:&@%03U "lBze#$?Ii_ @ʇRp1uy[x^'ZGG6' ^]MD}]7IȵDw3έDz}i, >ZfTO>謮?Ɉ^zyqORΨB\Nv247U/xX{,Qd,q5AZ;5PE5@myvE^S 0YO }_:VizN(pی>k,,U)׶ƭУd lnVbBț }rjo΃VpgYsnmTtP=\$`LcA +>~F׾OravB7[+@ص=?qL=r/X1L)TcƟ0ħx.rxXU]YT~#2Cm8o܄p!xF ]a.n~v+"pR<Fܮ7f~OQ1{lޑ1isVȉBԍ p!A`.) CsmP.& YmТ|ׯWgFdmwij2@tڠ[C&#0g̗]=РJp3VKUAuR1h,VO3ꟺԧm\^ז5[}Llns>ĉDK.l C)Vӄrsj~< Q+[ Jo}:6{OTc[hz%[Ю.Pۿ&@WϛNj,r+h[Pq*b>~Mwc_9;C fd3wgG~{0ӭo"a@>8ӥ;&ەP0A4v4Y^{w;tYӧ)J BqNSK"+و!΢6!ٓƏzyJe͢S&Roa'ëddjr!!+"K+f#_"W{w *#HuEe?+t#=B(E+!;A>=RCT02gl2UZCnp9p$۸y;Ls+±'&@BQV xokA >'qEf+>1Z<%US5Hb k,y 5B3wV-Dp=>fdlTv6 ~}&D.푒mBdZ[bLw,HSt9.L[gRX<  <9 谨 =p?`*#NsxݗRn8 oeKjb Teضb\\A@MQxRΘPFo9`ENW\Hj}% vfI29s{SkPZʙ-[E`CGf>@tNhk 4{ gr۳¯7z]G ީR:ruGhN,.@k^;nE=X(%6G *WT`:٠&x*&τ?ϖ9]^`Z ?TFN INDsR0u}. 15Sl{m`J)_4GiFMgb%j!-TJ;??V#0Od!Es)mM>m h;[' )lCSVl'jXnjWf'TTh9qO |Id#j, IZU<&W8\t+/kڔo(*0.?240\fSRz%ӬN*HoNJUeM_X# <~qXS$f![3s)}Q]<>)u6//ˋ.Wn2`Z@y,7D.C6 ,)IrM8;O7&\6/bckAe $˅ ' RX2g4w d3+X`>/9XEn2Yݘx;)ݬn{i|d8 :R3>¿N.m3o؝gq4pVlR6aoHo{ +K@`J>r.*ۼ( !\DKn:Oy;=ߑرHM?/`}XOYK;$Ij5:t ~*g9pPIF"Q"~&&gZh'X7o SO<$"vs^%r/  H0f٣ClƘbNgO9$=+I3ٰ/{4hHZ Qv0MupěɰmFO;jve%vuXd8Ej`8V" 3((1 /v\. ]rC&s|\d- QIdJnAՐfm}V<}c&n-tf>+NyI%~3z2_"q[\Yi!^9(^Ӕ, pFe `zv]Td$@Zz_v_Ϥe8f2]F"k=Zy7]0'[끕:ep iA\Ҟ^U0+3A3]PMe;2\hd31qDԣn$zNYQ^VgH_g`)TPyNVuA K';)aiޞNK5J9^?Ru\ ?GEF6 ;<ߚztLTPbj6]_lβ(~FVT~79L9'r'w ttM+(z|d>'8фmxx{.?j8/0 'W`ZB G-Gz6ߺ/0*' Lf]\@p#2Ӿd!;|=XG@}G'H!m.y=DcXHwpA++ReC;y@SEY,g}Bu# {?qKjl %B*??фv lC#}n &?hJ3mm沲XcUfklHc pТٞ (7v#Ďrcfi=+e6oݒs5^،8)[k#9R&}_"c"ǿqX̕8m-^IR dWi|)dhS4lElHJJD0# 2&-)z7 #lέSSB:P&|ʡV ӨS2@ɶMdENiFPu.ݯJwo@f,_ȕîF3Me {kQ hÁ@FXu=g.V%]AuH Zr;ZĜQ™4Qs,JPBcWZk^ i4l?-rhގY#|T"P>N!NLP54")lMIǽ÷Ӫ$O[L.'Ya_h8|uRoq&aї)IW <cpa;⠶#Nj_Efʪ8N6tTU@-$tń A^$OI %j0W S`L,IkWdHȮ28nj[҆9̕ۯ %:2!t?h=p3js{3DW*D۟}t+\57KC %Zq{ѻMYWWY|9:e4k oj5 3%S_kӷþe!eʩ;7ʬ4MM5 .C+rocNkQ-vi? UH3ycAĦ4$嘵~>G!?ZYցzȟj|y-a A#@FWuBxJźAg˕2t:ivj:&}3Wq{>|a?r0_A"@ZI\4JʅofdZ`akc]wZUq)l'jXߚnca= "qe QvF: AEVpn11e$xVHwKu'#(Ff]UXf{b_J]kATJWe~K50zP;p\%f&~C_e$VG1yw ^A),iyI@k!lInWOu 2'8Dua&xJJXBRxjٷR=}|驱^7Dzv>0[FS^cB}!FXFZ?LN+%ysz½wjU* cAZWSYgWAOpRSdve.[Ťb_WMd,b9J1sz[^aO([%+k"?Eť!D^䙨A;̦gx {}ߠ9xZoP#Óf4',BYSu./)c4ը(#!tMgy-3jQ)8AgJ,ܶ$Մb<1MtV~~b)Q+@]´K@ss;%1n)%لrJUECeqX$V++O"3x Z׹kzNOl@2o뛎MqA8CcRyT>ߐ;hϱBH;}KʸT@d?ayšS t"V5 Iץty"+-tN MR .缧!Y-|-YL【JI}ڀP Nʢe+'hw  "zCUS?$:ֿ49Ag>vr)bE QrDuz9yoH.s~Q XT CBfDR' %ue|Gvj*&O@c7 Mi^D7p9Oz;`VK>Fti1O>sN_][Etř[iڼ]ΆZ~؏?.7 KBUsUgD6ڶ9vEi݃T ʐ5͈ؕ\5o@e֖0}6Zt#Jm\׀ko4?+m,f5h盂e"~/P )3mS炏&Z} v,$ @~@+lׄ]bEDB) u:u[?ˌy,|#Ԙ3V 0Lybut{/jOueP-h[(rߥ .C{BxKq(YcJ^Qn D4 .NE"` T48T%ҩ ;Q{kE_@N͘ Dj 4SCi`9v7֊oNޓiB;é,Cf2-$%^{Z=ЅCg!L{:VJ;=ql_[C]?z5&zcD(P_iQTڥ_©h~yJw}j6[V6'js<|:9~xVmzXETu2j!`t-xHsmг㭟H@va' o(h&=!(7|-;?&.jb ۳KSZNIʼn5qnpmG~p&E$8%VĝZ<}\mϗ_ݷAYE%/[ ǡ~FE{ۘo5XJS4u&Zk['Z/%u; p|@Ihh=D`ŷ͗|€&\gO駾 nHZ{Vay)2>ʏ???zLjGuNe}pcX7 vo4N/u$lN-#O<*,`4M^u*dz<݇\ʼݡ2;&ڏTiY31uXJbԈ_ΡBg)aG q-k# Q2mu ǟ G#>!M($Y8(LV\&ȣ%[]ʫp5T [Dq7 Kyx< T7Lj ߫Iʬ$-~JEY3x y: $ kzaBMYK@#uYt6EbrHI67KvhIl 3*ȺxU:@K AYܟ0{GwÅd$&)yR]C}B+*0,z)s~ +-J14JJmy" pd>n%O8&b.Go,]*N6?o }7wI ɠ}X 4mC\:'lW~嫘Jܤ$fP P4Oyا0mh,) .fuo^6QHꇏ4.-DJ jt)Q^%ɌDɬ QosGf0\㮝Y!j?BhJAJ \f2Xo_'M`I@6j:Mhvb/ cT^0sl̷.]f1#_6RQLxH`{vН&=SG>Y9e+e荒2UT0qw0jJ9wp$!D+BA`l^o `nM :Pb vGm~B.~?{5gS̤eѢhpksޠ/4kcqS]AUc%*zNl^u؊OGBC?mkCAk#+ܮ~o"Ŵya"3?pņ\x˞e-.ؘ#F* `ûfo b2'i!"DB'GP2_e kr1]:Gc(AP|Kva#tȊXȬ'h 6/sƄRR;רFOR̵0B}.H=7DJ*<"YQBGt #_t(=b/]2gD6S J2ϕO@7a `6&K3`3{CS@2F;+̋pB5 15\/!>-p/R~]dث^dyA%! Hp|l7e=-d{B@ Hnx]md{=vJJm6=@\?(x;4FU?ȯ)!1hluN{=݌tZjz`IOZdcV@Z e8 cJ&9/LrG9Y ͳrnr-t 6y5BԈ"Jp|{'M<D@o 㝨rVt΃]xi|Zchd@uri8YP73@1QaTP!!IT}??H)YzF`N#)Ĩ6 ,hf2o0\%@%KG]ή]f-v_gNr|% 1W=&.B e}'R}ө"z Cv0<oL%ϮuW .. Z76څM&^+t3Ќ8ڮJ&Ll-v{x;V[!h Թv ڭB̏Wm5`M2Sl'Rz ]6?P/SWkZR\2et @3bUYq+t0' o1 +ӐwR~b(1455bfJ܄fMX_+\(6kA_vݻBe+bq S 5!O$xp-w|)L׏&[Цm|/gDa( LԝK:$eԓ5/Ljxϖ}LniZ?o^' z8Oߜ޳׿uHEpv'J"8(mӽp`–ֈ㾃giȘVG{C& 衱O᧳-st 'Dut,LCD C &fD8V]Shv4wҦ|4@-P$}|oy,)dQǀ|+ա,r݆;6&OF kٻm{mt,H]Bk/5{Mwu%}%W6u%K.珣o(mçr6Fh'`vg:&A3EQמ =l4LmRB̜AaoL ᦍvj ̿4IHa h12Ṙ$d1_fNɑ՟}@d%ݪ`[79qǣn|[?O1n{bb񋖵j Jޫd$0-*ytm&{"_]gh*EŗoxW{Kom-heG0n l2[tZwӼ-j$ЧF mvJV=/(t.~L띛2~`NXX3HW 䑈u2ܾ"jV9 +|Т2h@^j}pKNB>GUa\ؙ{5TsalbǿpP:Eי 'Vգ5ô͏8{8r:ѴX/JI5K^1i껺=x$]'xɗiQyWEN}{rvOv;M5z >SodHA"s2; @^s} /3e7 "6Ϸ%|Áe!@Wm%v9\`ã=9ڤfcD~Q7ɉ8xWB *R#'B}KDٙRS^rż(cj\ȓ>u-e7F'RZQAZe$sozE}Mbc𴥑4A DٹgKPI\5\…/3*}~r&#O͡hT3lcf^ab 9d {>h7u Mͪ^Ju *RB#9bgBi?rH=+y,ÝÇP(2&'R Kgcט2΢B~y?0oui"bĺœɓ 1+:Z^/Z}{mtz*А(~~ .d1-(öHpe9r2eځ%<(n5*QR/DVm"w *%4sS_RZ%M1m dO2T5U4Beax1M^NM;8SH>]&-k5`\JRڀ .ͶlcA@L { n,~C"pGs>`Z=A~+GUOr̵6[2l`}b[ 1wZ9&7BU>oy]_:3R4{GCzxtbVb/ xv2 _]A?̧h~.4hZw6cvav`9?b1w5%y0j.1ǵ>{=Jě[A Y&i˽"S`@FJE"@Y3HHd?PϞ8W>짣,@`I7p2~ LpI"@:uv{2VgSnn|+Ә%jʡ7"9dh0_ ezJDׅ}䌵vWm *"G]z{pNIL1]qKg7R0œ mydec:}h+oFhh+,+w;0l5lOji-W<T= t8>+-;N3y_o]6v0g mja[.V2(`l&sݨ*\"M|(|()}Aˎ QnMay Z>uΖ#@lAwO$mGrWхmAEiZ@7` 9 2jn*-Ur,sPJRZ;l^>%QK'x=~7K{ӹwH*`MWoZT(}DПVvƤ$S犦(&uFo& X򘈥)H ѝ0?@T3%S8m㝮Ѕ/VY=A,9 mP|0YÁ:i:<-~TqcАGaݱd?ТDdc'9QޜN{n=(*NJ %&!Ra-l K }6m3i=_GEEB/%3FLoakr܅AeXyi nCs&EZO}w!}CrFlk7n c#AǑE\%?QP0DMMS~pP/c=uL^qP`;DۦG3q'ĺtFN䞨cTG5ë::/$Dtyxc'/^)=Ϊ2륂/E|0܏ 8NȻ0ʵ܋}@lG6NgCb&7;U[pv0]yl\z7jşd K_ e0Dx?R#nUklVTKԢ:^tbqؾfɝ"XȈ XLk gKa{Cx@s~Zak 9 `nH`Q9{ɱc]HdtwX]g$+599oYY[kD.QC =2= _&P~܀+ 0WZkUbk_꾔HN8n0d%sow,yg`#0Rieږ Vk97heJ%~r>]iXnu p;kʜ-T0>Rj^e8fz!R2NvX|חH3X}?w"Tz1^fs.e{1a,!O"%9V֍[CpF|LwJ]*5[ 3s1"f”w>±=Y}ׄz0o;u]LVjiYHcwLлΨAd!I٧y뉷0۴#%.v2kqĚ97TNg\=Hp.}u^wJ#_~ }}U@HhER}$Ci>Eo40mx++ G +`.T2kVbM#&Tx L((5h!<ԠߺaIJޔh%#K@;{XȕH FU%Tnqsv$qcFB@f)JnSdL$` ۪ia81J@(ʴf{j5iVVs5VqjAmgy1 ۂdq@N\8ѯM_uF=߫J@JH8O+:%݁~No$r "P "x"d]uYo$\xIKVNCb|CHXw$n͸ J>=P"[.)uW >,:XAFH :"IBH)d6>=ub ko֐~5:qD5c+X'[5H,XĆl+YfZؙ_G-Dp)]{ߠos(S zTѴutfzd{ <6BYL1\rsOD7҉U $~K>issop7T^'~`9%"i%t5X]]K^1Vi@[ݐH 9OEi8;HC,kDyR/-w*NMٚ̔m0I##65tTTdhj g\}ҭ >P< 3.#\t}we3FVܘ,ёStz|Jf]F'Y ޼m5S `dPftRGUmнz6k-fYvHD*++E4ib=,~QAGЮ5O"w/iүJ$4@=dStsQpJ2ߍRe',mPîzHEˠ+|(m`Wr&P PE'}֡;[cqa^Bx!-Ҩ-p/ v"#zW=X)QY|oX{4P#vUc]3&}bӨxIot%{[ي^` ̶_hBhF37лk {hR^([U_!aL8I#$YTLaG){[tUM@ i^;?F3uA~ho$)#UяY䉗 XSycfYNMOhsa Kb[EO1&f=A!l) 6,N\prHE/Ά(2Ɉ Wk`XI[wHho ҇RWJ G#eD`P^k(w! OKq"jY ˳Epe/PO`0}rrN!.7`>F#s*KuT37L%a }uI5-; ZWLfX ~xd(YX ;KqE* j( ;D6*sF?r@7tub鹐S yc_w^%"KNN'lG]{I)ݽw/4Q܁jKxsqZ.1s0zl&ȉ4rmu@xf'㵷 5L0eb0 ӣ jXI 5+zG)t*jBX㸶t4Ia /R/9KYsyޙ)ˣy+A7Vbo϶'o{n*3jPma}=t{t62C xe$m- > Ʒ][I ߿&M|V4\~#y L(.[:|~gU?v\~h*m\:z*uC>C" ɒCÑW0 %k1 9Q[ت /QǗ4q/gtk$.`>8v@׮cZ])/stKI'KXC.6B^B(coGNo\g]:4ma#S e?SW>`QC5 RA:#|r1],gNg_sYykB9Qfy$'׏^2gҷDlrneQ22j4d,nP5z0ߴѯ3}99{TJ%v盘Ո4sU@ c[5%Ԝ rƣzނfIE涁onVZf4ofc)#V(mǗN~{-ޕ{G':y/a3$CC8Vt ZM mO`{*)ߞs(Yla{;O{tϘC CR7~B腬G"AJJtNB$K=+e) _h8a{ Xy:9ٞ3}܆!H{$?p, Ro$i/oEsKb뛥Q'7YwM^͐}@_r%˱|V\GԤ= ]tesY|%JN[}0QL{ƾ5kbVPZ5Ԝ<"M(6½TC SB7ZN}Jup3tڜczqn'd_G&MEPyr #ub?oDk`uҊ,o抉K;&ZyI1UY, 9aR 3^?/Ake M^1utGzINTݤl"l6s.N08\bӌ}c8O;.6;^TDJN<*"uĐ&&U'C}|1ܱڀ(TH[>8~(vA8Z{;ϻ]Zwgdcrk1 J4-Ăuq/V"6B TK|޹dCc_q:k=z/J'5wr;F)vJ$OkF( ɖJ 5+de/kYEp95lG+O8 7@Q\[l A q }~f;f+j&诠TtR˴[] ^ y8ՠN[ioS*rۜ[Gt+|1gFQIeC0%"A"v@@nf#ٛL(Z& S]@_ۦO:!.w5 Hscp/Ej)n[YMe+p>}0x ~ݔMma~>҈|VqtuS@Jgi?kyiJemDzD%ॅypeZ, 9 jjPm0$xLGN4}0L>~ä.>b,-#YMnH` tK2%%S*ˏ.i8(@ΓCTsk̰(L]YxKWI/s3=bTDI 6VJWMm7 ?Wch=sk+dCVחċ~^ \<&fv}m8u*q}޹Tsq[Y<#YS"8p=D ZC$@@4GWm5MaT@:k'z̹a2+: l!d<̨C1esvas0 W=֮垇]=s;WR.vՒε ɟRcI -^=!>_ZJWN; QHvȇ N"a^^咅 H7?@'Yp6ml5FS㕋ikԳ}wb-[te`NJ՘%ϴb['!x ,~% 5lNK̭:˶s{حHul4\d>ƾ8ᒞv:,N} \ ;03KHP)a^g/^ pt;&8*E˞#JT}5Vn&juI!%+5;!kr}Ma}[odg+GL'KVYZ C$c_S"z~gZDCUN]ȟg7wHx t=֭RIYQ`ksZOG׿W GnL?єO@t-&!ӕX[yqwY>4։a^8h1RSJIcqUz."pѲm`"{ir(zc$2U-E? 6_Vf -Qu20D]MKGa’mƤ]7 Z19_FDd2"h5ރFz`Έ2>Y<70dvgF-tmK#į 3P+aH*8jHo4bCZgeep3X͡4Q|'ncy3m q~Ad;Nf9M:W: z&,X(:0'_ݹI&W=VY!CVZP5$.~*Zvya,PQD*'QB S˘.5]x||HMWw\|9Qr=u.kϙ!`Xi{!?&#>߲UPClGlыҷ;igG` rH }&^yd=Ow_@ScukVQx~U` e%Gٰp4lR=':;\POn`ymڛ_cMt` Dy:dW4 "$M*;6ܜn}ڏ*1 6nRzޡ-Ωk]Rg^DZ]щ^<#>!y57q/X#%py>4ᯄYUVuDnԠGkZ1-(/"+TkT0sVsW^e|iE;bBXYat7X%)x8Sk0I!=)XHsXKgf'yxI ߘ\;+"֐-Ќ-Z*?HM9gn>/7o.R+w<}ż*/Xۃ4'dr1hRe6WOZYGw9mσ&r<ޖoxL "oIɶj o:3^@]/:AmbUc;M&f"rHV)4_9^b a $ӂǂx!>u+B\.08~tYl!XY۹>t;s0Yѝt3 ʀZKUQDZC#Ğ@%vOc+וP_:i\`W0sLm,p 7ӕX5G<6ѷ]]:^M$GwAnޠaij@ygV MjLS}4quRW.+j*rJ59yE+n-IL }+Gfmރ'޾~Wy ė?P=rrM'႖='ku:Wa嵛/TWVF3л)E43.s~Q++DoD8%RH HTX( 4V\L'3\Ǥedwc"K:h"R*#lQR>\|s9܉&2(Bk'vݒ9, |j=bF}I.Z8$T2=(qkLȰ~sf= A]jSt4-6C!_h:} R?W\ʩpFFZ{n{ў(9 ! Իl+0KH!f7ݲ(Idqk(*[<2XY p3ooDžoѦ9%圚f49;+su+4sF혴:xQer5iyJ[Cjn$?z*!`4,_eO9u($æTuWuTǮ;g 3$:>W1eT/}0-NjWExS$[iflP*Tm'8ZG'ҥՊAx\e<^--|7"/Dmb{j!ڜ8ux,8ş&k԰HLCȺl=Q^Ak<fBDEfunUj G"`BIvQ\5RgY 4iloi'ϛ&{T 'OuTEyQ]d_lC޵h=Br|qƥpb9x2H_ *l7v2 eq`Yș 6$O\LKnjZٟ |JBq.8_m1~76iJ-EQ"<JFK{-,{Rkx0-"iMq=v0P[?ɞ_sS!x 㥹]}fOX( eiPm>,I(ji_p"R/(bIEbhBZ d9Bh cX@sh#z7uJCf1K$.S\L3Ҥ(DJ0C`& cm|b[ mZ+Id8X>ӷHnI$},V$4 ^W-fL࢘ZW#`52Ȗ+s>Nb=9ϖU ;KO9~գ(kW`5^bgj]Q׳ [vwnt܅R%Rܸ(yX//FesZB^kbmBD5&4!MLE+<558_Nw Q5r× n_Qş%$0X` fōnCVΐc9M$5P߱éi:kq'>fȟ~)⥍#)fiF9jPXqx1\>47LKy(T#P6ƿ#6Lz>"5,m"49 k|]})Tz770!œ3tiu`:Pdg~ G{WudO!d&{q氶5_xe´x+bp h\i&U 7̊TP,Ϋ.>|eLrwFtoFHͮÒX2t?Md{:8foR;uC+从7(9Sz 1|o?sigJ͍}6B] D!Rzb'zshs%:9ۙJQ_ +kM{R .~wPyʚl|U{lxflTOG@D<|fPW?@O“W &QN/_R;9tM]qh;X毣L @3E?8aQ~E[`~vrM26^ Q9ЭvŰ<&5HIwpug"8|?whUg!I¥'PzuK.\c|DqeH75uD`)3dUll?AK%餄;!&]?Eh Gg0x4Pme#QA P`)ACm*be*RNBj YɊ1)P }h#pY8/{eFKx! pOՄ!6eJWS/BL V݌Ha.=hz:ėa b0EamRS=v;AuY}&qQ:,Xo՛YOQxJpjȹ堹Z^RsӆIHNHClriqbu8S'';3"?8Ll@|`KCIL|Iz";?&DUB<0ɨk#fKBU:o%@>t|ilsFg^< a ߈M22#݁aJxY?u+jXz(ϣ H?eNαk[=r-WuhCȰc߃cwߚB#7߬ě%ȦҮQZNs3iJnV-[yLYpЃw嗲-Y'R{%Fy#A :,/gnMzEx P35 q9t1~mg"(ȽO|f%(k< R۱ $\Uf:/ƹ` /:2 *h 2#?/9Sntt"T Gdgo#VL/Sh=)3f֜?]0wR8lŒrpIY>-|}䡡_Ǵ8-rA-†Bʥ0m:lwML(3HuVWY AttMx!MynTdه[^ajIpITx-\ p] k鬰T7e|fY+04kz┕P-Kq =&h^r.A~8[ǻc֪d>{0(GDj |U,:/}f-5*FP{aNV^S2lTR'!K:_Q́`op Ѩԑls* NpSIN_>z_B-r@k1x Òmݶ]|B HŒ+AcSPbu,^#6wZ֏ǺƊ+̯^s Ϋg8hո eh?g)1Xu٦+XgtdQAGϊ)x^;ydk 6̇e%U`gFRL!W! 0{oqZ3SQE*;z c ڜ۝;Qj26'EyXDmx\-g 1r@v_.w*&P`) ڟm]PgO^ {8A_Rڌح<>ȻNV$" Mi )P eC#hk-.8=9=Q,̢e;E D'}80 yMQ)kYLصQ37{xvtݻ͞!0Nyq`IQq\2LR;, n'N|638ٵS94(4XCo%OQ ذ]! N^ W]ЫRSA6HFOݲ R hP8=|7ׯx>;z-"NRB2cd4wnw .%XniPu[pC]j\`}ɲ+w &܂k}_.) 8>)wYt*Fa˝,rc^nST\ɯGNn-#vYLCEtJ6L݁Ng'd^b&dG Ne{*ZT_@MIPWRms0Lcͮ\HI; 9!S9wtZ O_ۢ%ҭ5P*lNޙ SSAx- FacB>MKFojиO{y!hlbi:õjWN)RjWHkr\sNI/roMkum&p]DWul N}$ץ'dQR"nA8'.aJڎ9y1'w. -98nnm-(~lUUC,cBvd!K Pl,gx T۴Wعg^\;,]Eg ׋ӞT Ò& /'RXcj,P= NC3#]㎈E_j@&Vk n#ur%m|3 UG1Nn̒欙V YIճ!%ȻN)#NOow2W9s%gHeq5M|[!4"`bȦ_\P_W\jlGfaչs)Һl^WtG6ְȕ6Dil uv86}uu R07ʥt2o :7b)Ciq_d ~<3J6U\*'B~aT{OCKrյO@o>JUķ)C/bW,:&Ygӿ| [ET]J"Oc^{6HOuN%Tx'Dff t6!s߷C͑JG2 *! V0Q!R$h^^Xi}wH: O,?ԍJِC=k22_1TvSp9kӃ'Zϲu!_vA%qy3 Ҥ;hfv[ae4 uwrR6F%x&mS-;NQ彐P)&ٙ)qӿ#b=:jX57O7cӫvL+ʭsWCxu/fJ!@Jn̒0BӦֽA>pt"ops 'g^Skxh &Ƒ1=_힘QM Eg>A3#,rjKKڣ*H$ͽ;rqL#;!.1|3A6hZ2uu5<+Z_2$r]wc tu:SOK[Z\8fVVacثRw#?+a Y#w WKnNo,rB..4TmU[OdvY~I-ϲhJrta`H6~꽔%cjT`2crg}bӐl6VG&܆ j3iC@%43||a! %)Tė)x|ʔYH"H\"XWM5=}T/HI@;`&|GIf%Cl8aš){h3𼨂U \kM"o ȁ0YRԴy!Y]a%n꬜K~ΐ(Qv??6NgwutmA 캎zOyq&#&qTu}Y"~ hy/E%/ d3. aiۼW''X ,C`5UӤBbz>쿤rtL1=]0v ФᄝFțT Co=V3V[)'U-5gexT굃ZXbaͥ&v_`ܽ2pK`.KΥ3!L`REÞBQ^E!ѿsm} t%#H8Id-쭸I$viC<`;O~P樃D#2oW8-JLPsEΑ!l<ILez0LUVYĀX'S!&_ݛ`a|zn]9`^EI%"D@*x: sPȲ׮?1<)'(cD$D%KVZ Ux[fքe~ DHru ƭ"w7;wliwd僛01WYk` T=[i>Ͱ!>"ޱ11b SUJ) zJh*,&>D? \nIoCbȆEȰpul+ɫae(+wyUF"h\cnh[T>|kEQ*vOϱ،h7= TE#z!=P#%h&+r$; @"l[~9@rM l/ ܾ;v}[f0UʹrbjCgkOߍjvyͥoJ1{1ksINfAroF$MkRk+߀Gྜ:q*;8Vdvō{ .Ph 樸ηw!yiOW1^{bpF8\Kǭc`  5q1*ҢS>u`TNfq*}ufUy$dچUHOaxn#0:C/ā"\mTTm(]>GD/Bb 'ӒorkN!;8 )Œ &1|~#{d;1Bn kSc\ҫYI-jKt沩[,\疴,8ULZE%Q?B9:2=ɲaZ d:h&)nR'_JTr" t6׍pT]) ,`AƎP3@BfGElI,g!(q:1/[vC(Vq-]'▤JVM&k+ 'Ay1jmL͊vYxpǜnʙ|)hl ddS _,cGsJUhȒ=5a:ïؾj 3X<|>,2@.w9rvElUwR OROf~ HeAҟt# F15㢥~M юˤ}. *iB yZ(zm:vpbR qGEL/,uk1r[ MrSFkwc ѽ7T]=0ˌ FMRhbIY-~L^jjX;Do+k]cK=#N̋25j}fl㖋"}ŃvaNrC߰gpo=FONܢ/6Z;-Ov^W] `p߰/,~s`J_vv/V +s8+~d^DX[:Ɛ_QW I疴ḯٰ=dgG<#U?cjH.~x{VΈJxj$Kh4Ў[,v/#銿[(_FŕJU;@p{քsbIwum? ۇ#:R&&߱ %{w2pM4[_voT y$˿ک2S[^"1ǹ_*~U}b]Qɚټc>@q3?8 A-=T2~asgXr^5#D]kǁ ZݮiwjK$wvz:=-/v6rD0EI +?FQ>zc,ȇL.@Ϫ^IJ {:X=xXV7jl8ks kʉ$FEۻ9x~]481 7rzu3:9rM@|)"v q sh?V R:MdPPTR~Kc .@' 7D9;42BuLKѣZek }fȒ?RP[~wسU_ʘóTu2J& f<@ΥhҟB#xə1AP۽ sâYp̵u<#Г[?^}Haq߶gKG9U+L.r ~Y8kwv4|8zY_&fy8q01cpxeӤׅ,Ui/B: RyZbp ,96qIpU.|iZү fNGF$;+yn |d`^>p'&/#ڻ NɁǾ@=3u '됽>@U2jeGf{}2xK0RoY]Eu ]_qnҶc]:aЩ& !Aj!˕S +(C*OSw0DM]￱d63-VM쑥n.=U VćO.s$z !QpK J0{R$(K݇+?9E5up(ZzjC:'XVn_vMl>RX)uT&|ܱ:pVc Fǀe&ڏ n tϬf tqybO/Kcl2Fm '4z,KXiU`:f,C)Kbλݓ{`n{5m>z}ZqÐT]DqmRuxTcuzV- H"n^GHCE˹" .IQ S Q1֌2Rq=׼ wA-nk7Nq6c+^b'V 3 zmQc4Df~3Y+n(3>sR,&0Gv:\)'" dq6e~R Ci >k n~.l_Gm3:b!6qnlEgnfg(ز2%teܬ7㉙Gc _Z` wBOPgl;6Vff_ !I3%UNQc؋a'{_:ފ(ݮ]_q>[9Z|X`(Ü`Zp_W>+C-eke@xTҫ\s,ppk Xp*A$9԰:=Qi{k}WD*`]U$nz?_d/кXL_I7KϡE'Zxg5G>_JkHz*i.KEa/#>_ A-ԯh0!7*?̛"~H!РL'!͉eCv5B^/M#tf z-IUʹ%EP6#0j{$g|Ӝ*^7 w#n%!3jzhQfteZx&ÎpE T.!?| c/7+aA!j%Օ(_=RG$2ӊ5y*Z)@ .<%Vbh=cYFT(eXoL~ y/ KǭY(fV?X@CmyߑR5HlmmgDqj8 1-.m&@ UO8w(<8Ay[ apW_I.+I5jRt91:#!s鸀吸 +5(AXgϿ79hufKLtXjhڌ(D=GfMl9O<,2-@˫X_Æ mUf}t6 1~wx9=>gf4 %? 9 |DZKŝ F4bw&x@_!m:Yt?zPX*:sLI]Z;`ڌ@ Ъ0(B>I ۟b[b~C\O2wڄ'2ijەRYBbөꪼQ3EzcۈtC^T^AXU,757jk EZ04µP:d3HNMu2qptEO3d̗1==Ħr. J°qц&Pg"@Tm&lB٤&\u>Q^xw6mv񄎻6WccFRG?n4{i9%j:9PlxL3B*æ!+8Wr%tHz#6u,Pjm8^)킟(etBO z<'wN.DvS6N Tq4hU-o!1ć:T!^oشt[ܡYczqb7hJlGIBC*9+:9fl@x b*~,Չ:1 Ƴeё1p=Kru:#"ဍ%uqb~qzGV^{{TnV5uCOٗoLod䝷Fs%SlYB9ڄ3㲀Ӆ`-. L&!%jj_A}vROY/Ы jHZ=e~z \fVUX&!~r Dh p*[ 'D_3X@*5۬&6ܿ5HV^α -{jRYII>).CvGpzď/iq};%=" 8&8z/F { e*6$`H%uH)|\Q뗅{CiƗ\O1l6l3$O Q-h;)Gס-1]BL1hF*PΡ|f$PM *O >;]kW*4lϙ9tjCI/ހYuAy}\Xc~0;By#L"cT;|-ΫDE6#2"=Ԏ𙘰}#dO / `X "ޔ{q9*C bܘͭVG4eAsN~I>IX5N:^iEH(w1З st"#1=Pg Xb?YX3ʘ/4M8[G6/ԝzY|D3+rjyJ&PXD"~p*sƳSd5N_Zc?:oyĭ)Wgf/+dJG1qX"4Qԝ䐞|Rs+ %cEwtAW(QA4Mie~ ^W LKn2b&tO~`+yԄJ3j@+MC 2ߎܩ?.thx wMo-䕲&({B tw }T m -}ЋG„P{v*(yWg\kbP;pnZX2dxd=+0q>H_Aw_w3ٳT,8iy;fEA*::yh^E><Q}+Cjϼ83=-C0d(yl$|j%D2P7Ł\H^]ir߄FqkuWz`ރ/qВ"Vn^'5qU Na( Qt| fc_Kkʮ,/bݟk1ۢתhx9%/Fs+_ *ۂWqIvs^ɪ{PW U;_@ poTVJ[+jsH7+A+<06 ȬW؛CY 5?/ۤ "9F.FB 3Y{$R96k¤s^xZ cl (2&7ܝj%u s(vWݢMLfYHaPp6.s>*igxA s_R/BoK؆|xmp^v;+h|"qy`ݼKJM:M &.327e>ԗzV1%hE-qׇ֦()sIӲM$|m~K~9jFN7Jw9ٕL aM[{KMmXDQ+:=U <%=acy)A0&$ow87G8%KqZ+mCGa ,Uy SD^^NUQ+~&Y 4Cݾugᅣt~otUHrAz\r%0T/Es" qSvk?O+)>}xsNK7tm'T,gd+-z/fl}#'_ x/["WȺ| V 1mӷhl:PCJJKU/a$^rD 4 "I/ ;iR\[%FR_]:j/F]ij/8y`/C6߅\2;/;g$PaN}<&4Fx?M8O6Т&Kyowh>+th<$B|բ"%gaLd!<V*0 Ouv )v= HՇU˗Ā N1s/λx̂]ǂZ}hN9}YV&#[Z U@ )#iֲW"NP䖌7{Hȥ.-*zbƀj[O?*?svJs\qju_#s#fUxR-CcT!q\q9Asեx5iK/2b9FEb /-8_艵\:!qܥ/cV~ cbխ4k}fŴ9R? ݷW܀+twX b:>K}\eu&8d!7eY|S`MBE3Ob?oToeV.f7h*U+ٞ\NC^Ѵe#-R\+;)>V"8yTڥ3zB.#,$Gt߳0RA"A\SX%r0ĬW~~RH9 !ĕw邈 rG3P7.M ĚEL!T{#ה%?{4дZ-c7(xz]z i(U(C7~rI((c1)#+Ю; 9~z268)CSj҂W~PG푾3ʿ^ײ_'`XcK>-mAtڣ 3UѵO{n׹0(&6LUݐZ+@z$8XdWo䳞? 뼥Bs,| +7-QtIkgb%J󞖟bT^.̦U-PRAP3NǴHEf~+rZ&jk8t +iEW~A$ LExđ@k3yј!j`%R:W~jS]*yqx2")Qՙ{'8WoOPYbj[~Q$@5iԉ2zEꭠ4`Ȗ6c0sHn4P՞(3vXYtb'iğ}EK>dzV~9#AO!6June]X炃4F^5~m9HTAV $ q\y~Ob+1@锬ǹ~otbB?beQU@a\K&:AXxKYoO1z|oL?&"`EfQp9m3M }1t&u2:߉M[ XfΤۖfztE3u3( ӑ%ϚݳmJLVYh[lr200u ii:ux]?OgCT, I mN$E[Rd00;k 7lee7sV/)) J.5:!mt+@QCNއ&@"& "X>$8ed>\F?k٠ZO@HKp/d@ɨWTqOUu3= .;&_]$]Gg.8duO-v?  &U[e\ .W{~rZ|u\4rZ12PF_wzxUvRc&$ TY$qD>uqbK]!R݅`Xȏqfk('1!O8N[Z^Պ4NVS #b#@~NQv&^{37tY Ύy ):)zfAQͻ-9 w>V5҃p})eb$;Eo>L;Z] =Q!]FLtR1)Hvqkr'gy, 19+re!>_hwP?vD4 <]wVIo~N_{DJ,7_XqVm\h#AXrhr~WhsCY7FQik9s7vuݤ]f{^ "„G(fn\xqdOȪmᫎL7KOKh/} VOX(ĤF[J 6FZyVH]LSȔo kyU'&Uq;*%Xbwͭx{R##{""[ĐG:eB*EwґMKeoC"oO ͡<A{#K;V['ls 8x?d44DYĽU7"F+<PJ4V3kvΜc@J jEDm,7INFi8P&}2o?TnQ;] LlIc'ç/QRa@M(7tP1l}ғ{|.4;lL1ܐ_d8f2Zu&\rQclcd}) 73MrKt&yc{񹕹J*Uhy,:%[nw'!MBWTzl}"V:PW \z_*ԟ &"$!K2- ) rUa=ji fPd)g,ArT-DVB~xm{|v2?Y&A{ɞfk" 0KJ9'ZaDYe2nۨ0"O71j#MB(! oНh՛Nu+q ]\d ؒs΢t@^C&ެ_JJΜJ]˪3u:ɗuEpc*u΀zՓl|jn8׋GNm}| :Gթ2/9|Je1dj}˗Z:lL^m>S/QTeP{wP}R4z>-C 񢐊ޫ4WF (mւi(>{ѩ4 2[ܹ{ Dl1n" (BK_YH?.CP< f19&7  8Ic7y'eF _[Y_jXetI5lo# қqo90=^SOd߃]̀p<&9̞SbU@'ƧxbYE(ctQPp\`9U$!~iKa0,M_&~jRT*gœWϲ ltxx򐱝ёJE]_ן&op'[&)J@/  WlG5Km"@N^&44 ~| T#LN[*!ͱ枞"gLh"M!yyrt|:8(Gcf?0 %{@PI>aPT Y 1{`9JD0d8[)T^'mf_J`t'z(麅uE)rUBT8**02P߄T,_ IxĦUqQV-r|jJY8K%|ro@i6< 5w .ˇi-~Hأ=.o惵 ڛN]cCKѩTY> 3kE$Vz=s*"6U ۋ3jɇmۘ$'h9nأf4zF"˺P07XVkc ͬ# ӷq.4v]ʺx5uץə7_V̍*=E$+3Oo`<̐IՆR͟ 35% ( `qL Tna֙O)ep+`K(wH{ *+QA%ۺT`qf|sЁ.fKbm+?l)[ urFKJ@Ě+H*JUbonV+8^{W_,Osk˖MM6@![eT8NiՉ4[rkr^%" WH~EWDq!\0Um<Ic+bQg8795BqNl(T'sAH<(M{.Zao"h#`"ss>y 5 O#Z':I!O9?~mrE|sKxq-RB2^1wat,EkvT2(}9iMLƫ#_ =Nq(p/s3 ̪25NS/DSqyK0YrI΄x'F{C$*bļ]1'vb;b ֲJߏRħ; 婢$ w+KBg^ ^LˣAԗkj :֏=բ;*>_N"+ k/%x LW٢!5d{3=;{r>ꫂ[~Fn4iYj^/ʒ 54+=9Y\o'=Y/gdJc[ hظJq M]KQqre`\Ayf_㯇̶ۗP %]'4w?;;MI_gk? ċ.SL6l?/Ҍu(tU思'pcYIQ0ЀP"Xӛhcd2/"e_JLـ_k0(Gqvw 5խȀ &oGs[ϑ:FiI 팡Mx4;w@.Ċec'4 /?A` `gP8[n~HW+YrbPK+l;pj{ 4ċ.B< MYllG+b~{ݐ]9I#6l.Wu匊Q,HT Nbr |m|ZW֍QqާMu+IBtkL-A]@H"/ Q{Z@j 3ŇS>cazѢELȓͬi"rHd1Ϧ?3+ mLb+CrOwD4S 'x[&=;+Q 3~5O nwъM WNt葎 +?/c$nXuc̯D/zj#rLJNђ'U myWusº< ɄImhJx[,zx#*/M#{P2p 7 rGv/#_s'3%X0P4T./)Ǽ]#,{O312WiT6 %2X+|;X\SJHZK,1m3MdƆ]l$}&TJf1r)4pN'כ27NY]u io@(udňc+$ <ނIk[4kMľ $O'${tg,,mף,8ꖤ=xG#w 纯Jr6IJބlֹHw*g<9Y8E7ae=cTS; ~=Y;Uγ "$(}@L FI離3zNcfMq>Lwͱ%Tގg*:mU]Lz0A Q Q's>ILػICJ!w:-">|wRcVVQ9ʲS}?RPۻyX%S0Jǃsw֢ǒ#]֮归hP]Hxm4)4lk~Ǣb0KF߅T>rFJYDnFd34M*6}mmsTXI&XHi\ zYH%nk?"l<Fy֧"GtsJ۲߅iYe1PټƳ75)ՍM9 LU. ,QXN X"څdy6PGv +.Oڐ0IP671? ,yEǖ-ܗ&j 8THUv\2/+Fy45D~,\Wl#K{ʝ94\ 8^ۗ(PL".BE7%,q8&ۦ :3y*Vx Z@.D ^tT]Ⱥ6Nėo??*sV&0b {yYE^׊K`c,*L d =[f( TޓAdK?ZbzO!G:"k8]פqsU0 *6E"̙564.O,pLX貾 {dmEs>wO`mf";AJiL? D{6k>'vEh^A26u~Uk{VNgUhe;$&o>N7)8..J,?5,CxJNpɃ&EH4 ws񭮷cوG*.ITdsh=ϟ AI,, 秣t_׫C3C,iɣvKYߒ7NS6(S_pU:0H\F )uCyf(sz9QeqT|a@>!B#IiaU b3hVg?_yzܯ)389ܦ̚4[vv[{:[v3B,_o~"LTЪ'kQZjܴ^nI*0ʹ{ˊ BXw;d"z|$pQȰ#~⊢fVtxҠI<{╌ }mVaB'x=eE78Q=d4/ڧW6 .VwwlCde(&37NAY" UD@v'4!/p^URMi,GbCtEDsB+BzPsd* ΦZSkP'+SB7g:q>|GݱJ*ǠLzy # -4ވ,X#l?0&lʓD]rҵѮ%^<!LzJPv{nxHwmD\ bx~C &5B5Ři{]vt8C9q+p:+W޸m}OQ&SP W1b#k?N`wf>hC63X<]>oH<*@ٱP aM(F1p*:)D3S vSӹI l@$48 JD"i|,cKenӺDj_]8g.F/wiYi$ʑjY%^䒥m?Q}Ģ+[|3HL^N&UYQ0j]Pa6ipa*<8@~]"%1 ٪$*k`4U-xg@m@*L\̙m$Ľ+PHb#sBh ;-fp~gmqQ`єIgZg'Иqv\XnɁ/~솙Q$o'֍& xIq0^=hͧK<\Vqe9(Q%,S뤋$6@c *Gz$${ |.nj8G5ƃ aߎ[lk_ʥPN_,IN iJʻ2|A:,#U9[ʸiIg\5>ns+IQ6 α "q7Պ·[9m~['&Ľ/KlUVc"ƻO` oyGe\đ{ 3":[x[LXlĨOfZآ+bZ0UAewV+ FFYjn#}1IY]o6C?/qfld:aAtsK*cd ,=f8ypNJ&,Wb4dP\Փ%!rU&>UF>GO$p<ԄA:W,IoFZOSCXT6)]#b#3& Կ[)dqq\nᦣS 7 !N~غlɠp;n3$LABs](sWFvZCztlcF~_B\#e2:6$o_Ba+A& "PP՛0RgL=N3*'#4p}3Ƀ8Om!\.Q`Y'c@md49C9'DxhTt$˜עw^ccQڵW gwVE͈pRh9s;89qM3fnWDC2I6YT e+Gdt}WXuDh' qyKk OyBDEzs1'fsں*Ǘy{˻j(r ClCB""V=ωq&1oN>= ƅ@hY'Ϗ 8Mx ߭s/6<7?|Kz]<.uq^@:7(P7cApF"2{!~6^\=\qKJ5x18V+b=UVZE#ixpwVh?x2y ( #&X&sD t/YhZ4aFyhY;3hގn j{!e|M-U>tCV)>8a έy/JнRD8P-b⹹K0Rlf_rk F/ӏp YsCwƋĨh}M[!.ߋ#pC-eQ, e}E\=\I%s>2Rq_aH'B"kz8%kchlqd L^Ҧ3ApͥۢbqAWrB4dg5*VR/dHy1C0M)O$ V7nEt*coN >h: ʡm`c }yq<4& cBAX =ouy\^YW)MsZaYLZɎN&݆Cp|QYq,NEn{P<aLWsSuYX<٥?|R}bp`B?9Ϙʖ[k "DJ֕1FZ #*uWq]:յ -g)\'S4>uӌdϫc#i}MP?>!y &C-TS(^Q(_"d)AX|?P (m!of aS代0)-lMٍogY'vyNeDL")0Rȏ$C.USz9ݩ~F?|پ"5j9iwt0/դwqU0Ah v_i8ɍ8?`?_|xHC0vI^" kt!QfaYc?EpktI} ;%  Wփج MZfٟ+JlNOŲ]oe†iNACuHپA2P.j:3\#Yh:vC,Ew^QմՎQlѨAl]1.H"L'mҋ0i2_ofU:h?,*lZn u/)H$gn*xj޶Sf-WA7,J 嗘zZd,t-d7 AKmgڳA i6u7BV Tܱ9}3@~J[E~{*u3YXr$l$Y&̜ ߮ 1Y|f='Yv84m7e >Rd#+1PVҐ(F Z)יoRcKCK(lC0vj T3dkxNa~N Ah+YsJ?CDzBC]tT=!s@XMcY-_qB''~齏1P AL X|;2lNԫi7_Rǘ1Nq >,~G,78%gk@B%^Tb~r)R ߎIƣZQ*!դ}q_f]]_*zhhؓ n5ٕŠuc5D@v ͶH>Úr:cJ5LX! uM3CĔX+<|mx^ F4P?9F% `(pT.!j.K:2tbڎ&#OR)pScH/fRTʆ[\O|8&G*0Reo+pi/vid?6%,".;,=oԤiMNi+[4{\%yH(lյ"@zČwCxѓlTTWy[{o->Xh;ϝMΙ~=JLg(ن#VH?@IzO?1ٵݢ4یhl׈so}L"'5Q^s]]x4}o)]< D)rhF}hl⾼w P5BݘF#4"I'hT$Rz,ebXړt|js+&'Z!a!`]SAbw S!vV*z%(t/0h*Ou2Ix<Tx8_cؓmbۥ klϋ32GiDJ5&W\Vea'mTVA;= \eJ+X`o jqV"QAQϫvLZ[<_´Fi%w~fGV) D .2b:h*~mH mЪCά: ~~_CqE% ҈38E=܊14 1M̈́(ҴbuP;-1UyD ^VCr+6JlZc9S 2 h$0{=,,:TJFF$@빱&G\aEkbA /QSPG=[wi *vuQXn"cRe-oqQ4׋B1v{% Eމ"̉DK.DƦ#;L aw3@ LRp( qMz&)bQ/Gx!R|H)dbH-EbYVJ䯖 )sCe1us N[$m$SR,Ӥgwt׹Zؕ8KnsB_Jωmpkq[Z[|a;M\x$ZuDr@5<!qs8$:>AA:Ó KW"`##Ae-&n,X1o1j7Z!a|WNUIq)|$C@:) i.CvL^ 9x{K[sHG'MwrU0riЬ÷WQĐ 4qZ > f` pή*Yh+P&eCҸWGRJ1>Q;t}BЭfC4O9! L$ؾѨȝ|FIU gǛu5/7Q+L{ɾ^B\2# Wo&/ڶ6be$+WI5Kԁry_rQ"axzXUd@y C%AX*qru\[VLNG(UbB.({kSSwJtE aFF= @:|~eb?-&keFPBB\7&e )ЏEGڿ 8ס/T,EX뭅Gol𘛔Dڷ:č˭% pOh#~ .J}  WK<={]cٝMOyY]zL=wٕop wcm00Ph..,Ax9IӚ#)^/& !^)X!ڊ{wRVa]0[rV<^RG(Em|D%`~9l E6]G/u JICMZF Y5DV@S!l+΃9ExZaB{EաU p ]pe.N:!Vm" XT=/g둛ﵞ3Rd>UsMrbseN6 ,NQ'??؄^۸ sS9BiE86XH)/L,_ `b@7ms. iFczsTU+t%"[r F)}7x }p 43<+?"Mp^= J`lF*nȦ,׆7(xCh ;.LJUgL5(] Pa!"M!NkЗK[6 5|msB$;U 2w%W"=@\q^bw8cMTOCB%)^ 7v}:cRiI.=ru͹1|EҞ!E2ّ¤(y`F)mbNh^+N%fUBr5^%wC_eMQ59ӌnp_SDItIsLⓚOKLkO eU%m>'HQ۪~gž"(˘y~\{fOׄE}B@HQs^NdJ?e(nA̜f1qvmLN;S2i0v"BD;8fX&ЀWbMZ* =Z[X!Խft L^-#gDYB9#fd#sxU5ncBeeFe RµF //jiW@6_>).P3֘Aű'D/ݷ|22s}c ?,mV}@/c^g򭏇:n1t*z8hqk3+{7th ;>b|i;ʐ׉lDH 3v(Q c[pSh,Nΰ0cT ˔de\x!\3"F$8ھK77)F&)o (&WAJ H;?v ]6y Y[HJn:4ģ!~vk=IngK0:Fؚ0)y5Z0NֿcqIgϋRZfV`“.G13lđ3Gu N d_[8bjF`!3/Ʉ+AЬ#}N &/VD /Tk.)Dp|,WS|hIn$Jjʢa+Q˒==9cUy/\^o+or_hYGw lBM^4'58\p&}Թ"cݎ*`Q`rXiPv|e5KW㙰X'QZS¥kmKhՕHh= /Vbפ[ylY+yrEۊ;],Dbiaef4qg9c÷iU>`G5\ E~v@-yq#@,}5xޗAHEKS4Ṃm .K@ MvT;!{{5>'}|+F>xww]nI[/U ( "$ܞ tۣsъ7T . Ʈџj*T? ~xYSsD: gnӑRzَݢvѴT2B˸ 9S x~)g{Iظ>4֐T$V)ĬҶ <]Ezo{í@>kycwemB#4=ħJ HN0.!7-j[qx΋Ln~,&̲ RPJip8H֊٢JrN(pD XkJc- ѻY@vԊ@=F>jixd:es(,M7>HTA`g> 1J!NEgBM؈̽ԍu0U8Afm5!Iݬ,uT,u>ڧ |"wQy8QX2L_vZՎ0H=\l@Hh!BȍD<'9ZN]Lա ,>Ӭ)}b+P͢kɼaخ)^1.$yyQ ݍQ O_R˳`776#sd;A'X$x#@Wr$>"R )mIZr!Y7Uhؽ^< "#P d~{btIQ:mk<em UHח.tlj xLq)] F9dg#ՒzZ:(RC(܇PӶn_F_HȔ1(fGr_a WPXtb=faY{+n:܇hm\dէ/ZMd:f,v)_ q""~0#>F"Wh? R@ 9h:n(enGu/)C͓fLwS~ v 4>)+;2gжXN򜫜~pm0lGJdA2u0_9 2AcKAx_ .u'2Һ%<ٰma֮cձ:Z ?Ai9ArwD(*9B [c>s;K-(T);Z/ D:Bn|(b#x+ SПWD|1~sN>"x)[p˵&LW33DxctZk32) DEP[⎸sO"t G[~ҡWkx0l%BdsXe,FPBNW.))׾b`<*ؕfoaDעŬڝzij/Gdp9E[tҔoiCRK\:,׾2^;i]RC҇1,ӕ/bMaMvqY> 3VZ0pA,&wK8xU01?<-PTW&BMw-  Kj@JbRi%edl{TNn1=Zm $~كLTh>%̔9lnYX bŃzչQ$}qI( =)@VސsUk< D:-ۅU6 E^6n5UIyF zƲYNBWޚx J~laSCɆ#p2irs!R61o]f1>cm{JTCQCuџo".?Ȓr@s; 3N䴡5g7qK NLaV- =D"yu- szaږ^U,#I)u{f;t>#y3~|:ob+pXJ*)I/R :"33|.3aEx̱}.7C禂bȃD ]A[ڶvᝆ!_fTNWa=(BY: œO5l͝i l! boX2,1x?4)ɞ=`o,G~.(a%Z/('d9feD;v]rK='c^ĚUeSb|T ^.}źO>RW 2[]_Ey=t|227|[B4R say˜yDtv+M 19yۛ@^K's/:Jk If\4G:~Xak?Fdsrhi !S%+*e q>vٜ`  &k >~e_۩~0w K-43VmKM($$* O1RI6-WEKM{ҁz.3yA?_\-v{ # Lv Q. z\+1ffʍШblfSdB;lE4@|2Iܸ`jo 'tXW]!ME [*86A''e,[_$,8gp5(˭p]暈$aP궮#8,wLCɳNJB+. 'U{3c)Op}4Q-f`}$XWlO,#诬bG/񕷱MU.╠nzЇzeX.R&i'fnҵץS_G@ ,#3@]wq[z-{*xGz/ڄ)_zݭ2?kXTܷmHzwYӠh G2JiWaW>5LG*7wLb4hPSy=푥uuC7c//Ȉ_eVi5@>XS繤t^ ؼJs7~iPS՘uG9qTQ3Ѓ(bx|(Vu۫.*EJ] K =}H:}[q3JU Hk E&շJBh ;m,2Er$.D FVmW[:|CN%(o#W*;`ӻ^Le)_{͜SgY" ,:1*/tֳ"a (pjXvMJT"D$~<ٶ1Xc 4p$!aW6_k U`0ah5: ;{o'rx.s!5&0/>d[-X0'{QNUωÚA?4}h0KQ(ZH J~9nVץ\C0VDp&*s־pWD 5G1ktfL.(HAb'oJ$ }oEI @ Kt}[kfm#V ;vJmH(x˥&FyJWD2\y(b14r' K<׃X}6/4p4[)zlb̳K{8W1]}epqWH-Ͼ_# N-H]?,8>17f Y3̱0'REhQZNu,?5h@i7`pG5ÿXeGXƕHS܈o 2<->,-w@lN=LAxwZS10Vnb&o3#B7݆\wD1ʊ!$f:SPօHz&ljnhA&x '8\ o؆fvm68'eL7fF3f}adNmik-jH=ew[t|rx-3 -[`[^oyS]Pa<se\ 8SapD6_,?])WI8=jHab`?y81|eώʌyY AHK i=-%q]~7YӲ2ma nx_a m4`S 0@`x/IE͍k&%~A_ j ~KlݰXVgw* lsՐ VE 8V*SP8 űLT~F5-*ڮۡe{IX@@Iƭlc?9JkC3-Χt,'~!F5I դ6(x^l>7.)%B耘Օa\i_TcĪ/L)a[J\M?!<: }\AdŽ2-nIfi;Vb IOc^>z؛NFhKq1}x.&.6RbÏȐ_|R Ӓso!wy!&0 A)Q$" %2%m=#m/*Y#!K\tӸ^O 9%CzǼxnxEp#eL$- J5 :pe?*ZM]bM&)LU劰 .<.0c>*週#ݺ+KwFEwF8$65J"ʙEgOC(qojgѶʨc6||,p+M2v=Of5 rMt?/+{ ϟe8oTymvШAj 񑨓iil5]"4YiCRb^DGsb(Œt<JA8 y˰ў"p XQ&*VpKX?m A7j}-G}EM9ZO,nC5 YK  1lŐfx͡ 6?qv͞1`^Pfs raI,f,*[A21׈3{gkZkybv1&pCP&:k?:>0鄩QkG9Nw 0>P"]H߿X]u$qZUߒBcWGP_&˱9go$'!u I oHschHjID"';-C닆ܩ0'e@MrИl!sFd`BE + YZtˣ f^tT! VePu8)< 5B{(!T%_%Bc0pٽLu4? x_! yw@ɠ~~TRϫR_՝K>j3ZcqZqNk`'\x٨?矔f8?|S0YD^K+*0*]F깁=E?PE㪦cIPT$$Q w3Uy[1DdD؋ut)XS jMK,!qbT&x X+>Wo/`B➥zZDؿ"VpeglغV:Ym 2w[Uo{u=|5#{|eY0qFhg%ch*/Ar. IFm+ʍ]?'gGԑ^|>aF[\`<cXBP?Ry£jQniUxLC&ET7Kmc䡣'^I.h$i} z_t;3)C@|QvaQ"ń`̡, Q޼7 t|CrH\gdi/;Ը$ˁ9fsTJ\$wYNr/s:41.X kDe&/ц:xv4\^ڡ,km01Io~?oʷꞄ|W(7a^iMǏtZ[[ WmVVڅ">4r1\jq<ؚ$i ~l$. ,&TLL<-l,~6F+Ğ(%: VbMa‹&e?6׾CSEiG 7,C%C28qIxuys!F9dpt?K@hPTBii=EN]kb#$8|},l-d$3|+tAXK(f-ݞS˽A}Mw(ϦHuR#~.(.~;*Yus5$Ovs[x#5.Eas! &cfD. \tX({}%^x:GAw"戙i stz^k =jKQO$&Cj!q _B3bV5^ay1lXEe9H﬚5$F3'ںW򔠎nY/vsj4dH`nDӏA : sYq,?;nº`p/SU(Eޓ zSB\]c̓=KTX'Գ08ZR|qs@DfY׼n\Δίy9 pO!wc3Ӽ*\2@*j pjhD=Zs? $!6n‰:L'kH-qu-m~ho:O9 yl.[r%YAr .{q'LS~]m+` S4s^0}J5ϔiʱd0 IəyZPᣁòM3h]G"sS]_~_/ζ Is~t>/ ;M؛Z m|L E۱:=^m=|vHeu =V9Zy+C9ơ- ~v]]AsmӮ ٰp@jЍGΚ;?BD/" ^@?M}>^3:bU$΁n;1GGaFv͂ gGyLEːBŬè6* \p׸rJ CDZeÉY VEU;`>礴6WF{ޛpԈ|c'QfUnF V{3@so&v,zg*G)ufFQ &I: )Լk|8Z ӉJYݳ =qJ,澻ϜsRx?c[ܔK&D7FXiٲSͫ4mڍCAE)x4bj+c}룰d*Jn$W c㊛r$wz9/xQXh{)_32NN,Y!̟u79s!drRAfIT.$K)#1e mıP ҍl1šfNA^ɻÒ w^[nG^h^{.϶c?`^^'lm"r} E#J𜱧{)",He1Oi%worKy8K ԓ]&y|Q$|1{CdXqm IZlG}th{(?")͎|C@ qpwה & ".hw7++pjц j43{C'B⅃e蹃5 U:ai`ی(l`񖝶WskeoXab?#t. 8G6!j]DG}~, PFX}oT{gؗS|ggW)YK=ز=f[p;E99\9v?,m-g. BϵU^Z5/w0=9~m'-3k*S1_紐y/%HVӢ_%ct BdQmZ}4.m' t05aL&B-&]'xNŚQNUI@{4v(nFyD@h{ԎeX6#䓎A)z<ʧ&Hϴj|-ckjq8?Jwmצ$*Gڐq j{5Ϛ4oxR.U%GNAaRpUfHq33pGWO'(:oxUcKwQ>u,,x 䠎6_X9_z,Av(xf3)82yҶ!'sd2jp70dAL^X4AQ9 `lc+h೅a8f4> b.;)M.ijǚbFFG,r/k1)b^IN*l1Q i lqC,NXR2C(gS^,6Q+r+X]UVpv1H:аM%|"F&(,!Wֶu9ga~jXc[P"EzI% BmRZ?Hm-sÛt1?U5%}O urb,\,[4H-A*~>H66PנĎk.3~eWHYTЂWx,',c^w( ݽ:w3@H>i nҤ]akU}/9b0|B,5mj I|(;XȎ. ڧNի7i?8mv;W2V +qV 6x@.A);/ G,)“6Q؟.p tK.7w]Kg$:w=?cr*N@(~% 쵻.}7 z,<` &GoqcҝeXga5Lcu̿@D _ds]{t2]F;i<W)x璺_Rz88 }jLA)ArZqG}Cyx }psQ)MqbR%}j9g x|y;&lYu'$hVI 9z_?GI#EQs&EqΚL-;GuJEF϶=?_l6 Hf3wHNcO4pre@(sm%C fwp<')f>{٣ȥA/C E7vJc(OciUf#OOqc@DI*96:gԉQ0Մ} plrJ.ihGf8;n&p~ᇙ*EůW7=}?1b[#1fAB5 i&|lNvYېn9܁yJj*n"-'JֺpaMkpo R wfڕs;@:8o`;?9E- ^zlffa"\ۃi7K2"󴞟#}n,oӯ6ߵ7$uIYIתg@jW9 ! MsVsQ6b0/T151Pxz@0D8 _;f$<Ն5{8ޟsbr܀'rtm RZgOlnPb>&@ץo&rv)-UXS3Z`s\ZKA򏲯)3iH~f'y; Ec5hIi.ColĔ vmV h>]y\tD(f7nTfʵ$BN P"RuMAvaF w8WDaey̅̈́jSMHt`c+IlBRBH}Bs.p\ t<!6fY)yVlՂ^d:ug33h[;uV-~i3Ao0Z<,7;0pta6taFۅ_vѥMFxe3A6(w!)f?">~ZRPYc%nlKO "LVĮiAxx )%.= 6=$,LFEm6Ê5HETH^c͢')?) sd[ErK2ׁலң!6EHIt?<#-:ѺRR;qi;f/x%\C tGҿ?2hs*\5hyM%W7޲`g'bZRn p1iuB~Nsz}o_PoV)s\&ZxZ|S1nl'Tgے3FnOa)SVdґ/fJr4#w-? QnD ʡ:v`~%y:^`.umpnɉ^a1 H^_ܵ?p!yoA]'P~F0- XmXpM|@Zէ҅b~ @HݚWZ(.;i7z&!V)3?9"lquMVԣ47ZA嵱nv1>#ye6?jklh(MeT+>:A?= 8Euz-V΄߆$|,B!< B DkG}d6JeD끲4%B5|1YZ]o!G;WQ=;Pt5siC0Kkwn@"l iPk5H}#v9Ni^#dPJ͠WY5.حO!Y![,4G5i>eOWM.RXW>zy|u\@ai&_h}Da vwYU 5O#4dO?i:wp}ǞMS@s. 9^B7Rz} zm@m`SkA%zZ+v1I D\ ѨKVi᪻ECOǘ 6H*CWۢq y{"rbΞK`MY`ΏՄ_#>R|XCY"mtQ\'+H̵^2Hf]'%DU?$/ †d;ꙓ~r>.1~ {;~ Yh,1pz&,D[F(_|ET&6XWv@l@zU|pNpe!CqЯ͒!2h4kI=4D^v_uw;Xpu>ZV tfz`lw3V,bR<kUӦaOȳɏ~~)\̙У_6Ҧ [I Pxuace˅WpjХ蒢 ,tcEGgAKjg/K@'2YaɌұc{B %BMr!9bM`}M{daC iҝľ4Zc1cB/&|oHZbCܯyq+xt;Z-Ь$QF/Aapz^U]|.Y{zp#SȢ5?]LGaٔ=-B|x&7!5SkY<5 &lYfo+UB8Ro1ѐvFJzuGtu Y'`Ԑ%,ROb9: F@9ln}FevK[/AUC2tzm.=Qw}al~a5>)V{25p gQi:8ؚoWaG?TŒ kcCp.K,5<<~=6&lºz~}1/A0(IMV;߰i0l :휩aK|Ȩ}R9} pNSӏsqMiF*ONso6|Kln)Sqb1y3Nt.ّƑF3D>ia't=-5AI-_FoZl_$'H@<4X!A\1lo/cy`}% y8ύ[3SJ-?m-pGm&ę矸%1XS̴'ϛ%Gt*Wcvg4p .䋰.3P&z 1PU^iyغ䎥%D蠝>?0I|BxT( `)8 spͪU=?3Ӌe}[UvdĤH, ay+^9Gf hf_7pF+A酄G3kZ[R8z#ᇕl Q)Q7-E ϖpNO~6[F, xQUS"GƉ 6^-E 6~5s 0 tǼ$Z,MQ^;k7C xU&K;?3?ztf.S&]in5CC Z!"5dUтa^JmmlÝu5хq-D9ՃD AOƺ)0dq(GiϸϟE`@n:W }WHP N´ej ""J 3r^ "ţ!"^:qC0P`醙Uec }3~[-UHL٘9)( =|֗6ǕΞhڗһs <{[{K'%ᯔׁf0(H5^.$Bl"],aj1Ӽ( Ϡ@;/°J8{ஸŪә[D:t}%}a)tdyD$(c[aLEy7pBu4J O^( kStWw7~ ԾG*A6j0$J 3:)\ȑΑ, m k> ObLN@._ľ#9B}tHreePX]gm{5 O .}œ g1$Bפ]n4ݴB*W%c[+3<sx4(a_@zqYSAgC=bJ][tW>IzkӪ hecBoNG`u<اlѝXžVlxTWrfڠcUrF=v@3j92|=C/X:T>'\S7EW?^1iRN6k}vږ_z`Ϭ1# G􆶯A@6o]4P,=.K, T#!0.Vz4L"i|LH vh@*{M1E`#"SKdB"Ә<݋p4O*F5f0r5'2 QoU] ro/+r%?~` ~tGH/dCC[1)[&7ЬjYmfxTiQq[3#eIf- vGA٤2|<ޫ:[ Qy7U_X#VJS.*XWp&2sV;8Y=Q-Οyu7/~LT9>bay#A:I{㩐>8fѯw]hkL^nA-kx}%![-!BFzAC4pF&6=~tsԐGCk0vd6BKŽ[']Xv^Q7Ǽ(:H2h(9Ǎ = 'ܢڳ]uICT̫oK?Wkfe| =jY 6Y*$r}zꟳVPI*t2a_zʹh Qpk:jMNJ)yYC\h4tl=$-ՅD\m}aP6Qq,vǩd g  G$%?1TCvޖ:r}wCib;xњ5t*f&~K"._|ur`Aj7Y (ȑ}*XS*P#y{So4KӜ%}Hi#ő"KqsC9@\=iU`uDts&V) JקGFj6  cs>NINUPE7+kVCf4g+/zکi1SK[{ J ~vVrUq! }A1E.=0>nnDB<1s-st#ԐpZr<)+n8\״/)To^d#!$Rb˴G$@H]Lwzb'uD$>7 qy!!\=X!^lv6њsJ#-"PJx"QޘfXh m}@ 04HD9\HK8j[s‹0"JK aPke~*0|Af Yhl1;䢼 ﵥV B *>}şC/£5'=5Z D}]?@\(&?'hkWl|+=C5 xqvEYA!d-9)/L&(\TˎZ̽KaSufާ ƿd,䩬F[eA~Sv7k^Z=K $|{T]8IZ?$4ʭͩosL4EKbxѷ`U^iᓥ2/22ɜQ//Z򬏹ʽ-,5s"i^!?/=-%|ė?LK3 lFjZݙ3PFXl#`I|}ZR(lT.Qk:N=+D(tܺGR?Nj(GLbH=Pn+P뺼Պo?d]&h?UpEfE,fꇇ [csrKz>3$ QK7>.QY PBU%M$AV'vqV;ԫn$bP9+{P=r(vbG|5Xn'{<_f[mNvT,wd3hXa[Yw9+.q!s7Njqlg)-9<7} s$&V<4wFߗ' 7TYVƧ_ N$Um᯺O}f46IDqy?ʤT\u_džBX7s0Dȓ̚ѓNTqUNS ;zrUxi4#8du=NP,*s92K(Qa=e`Cy4CdP\9 7bLS'jSuk&)ce> Shm> wquZDzAn\V͜\ yCL IS~-pO=Yor_(),[&ã^SA5Y9GN; }-d_(pq;z#&m 0lo%&P$`8'?3hYBɩj$(3N-%|Ey8HO]*ϑ'Vc#G!AXGf{Z[A1u*7el(.xƘ.{_Ciw:^ D5v[Q?6?|A`Y@B,ލFmBbXgcu!"kEʩJ0{e;z$C_wUb9=7bM @)GS?_XTBP##C_ r3g[: kvL$U `݅MܡՂGh_[Gz%kƀ?\Ʀ}85DG.=ь%@8 e_/ 8ZwqgG`YvIHG}IBJ?36, ~fiJ3}Y<3.<RK";mLp)^x<ȵTMwX>?iyx0g~bi3艓#ŋOsEz>D*`앮Y+KV>m-q,Dx?il3rfq(&ZmZ$ĽXik1Z}0{@nCBc>8#1TD/eHj[sy2S))W[hwJ:ddXwD:uqS'\)'Fhj#9] !VTdc-g%4dj6C^ <:2v yNa |]*5=:K ʰ5])@1@ژ2XUәj-hm'^>s= +q H+bQϻF8<`1x9JB1F\YhBZF%4E^@.̹Y~mk}d vq kO:zG@Fv̥:پŸ2\e/*ӣ#LjaN-:o)Ԕb?+떚$b6?4A` +8L%`\ Q\2M 6mwO.= Ok?C gcBhE||q#۾lK'<,1 a$iRK'Ѥ`l!m'iCֵ]V9?i! ok1ѝzrtr¾!U+o$/g[Svvu >BW˷zws{^ 0d3rUӶ+:4̝i+@Wsx5/eY8VBVʟWwS끸zCNh('cJmnDuPqEJrAxGE}B~bqrs7jWI%&fq]'a9>- `S/q3^Vn#ޑ<ΰݞAOjK$ٓ3WB($|++ē@"^<8X:u VtP/e_Yel^8 Y,!Kt 9̋3{o<lB&BQȇŭ%~FZZV )i ; KZ[Rp:mP(i9Z+tyy;=xwb$.fev6E`t3zfE̡L^8y*.uN[7- bw\ zk .@l駒;H[a8IHfP3Ytc-z@,us%7pSGtK~1f %FՃ[]Q4ʑkpeT,. SeNjF!aӤ"[\_uyc'O}"Ee?WI%u v+s}J睵k!7m5U5+]"V\3sp6p-?4wn'[_X4ģ+Vkk1v1mR [;\͂ fsz9F@2a+E(LBRb)vw 4/T>` ,$J.cS[XאTPI-K?h{*ܓSC'Tzc20eZ5iKcynk] ^VƘSHM |F C"ɗ(zاp{WEP( KC%HtR܍Q@:[x~z_=LM'"~/y:{;76^Ag{"f 72E8M~( 54P`|l|{2i?r*)$%}&̈[ T5Y؃YTNh Pݹ ́ځ+OWm[U'/7?Ӏ#hseuȜP՘P1^-U􊘮Vjq* a :)6O}MJCy{겖KPӿKx^?2aCɢt\J#nPbE8?? |r %(s!/i2#,|e15+b|56F+7LnA݆.SŅ׽堨-[$@XtI }4_-adk$s937Z?Ӕ;ԫħ-KԱ'>J]IH&Ƴ'_9p؁]Z^fT" |V5wo0y'l.ssBAС }ւoLH8h-WnӍNx V Ka;qF=YIol`-x{FW$4fH{nRWgɔ40dir9=m.T4o0<5O҂"}b#pz†!{Y2_2ew WH|3,tȚ+.kUV.J2ZwMJn ̔-cbH̖!4yx +o2h!˦_ɋL (b 3F?UA]aڽm'8fC'|Mp祐m 9}u'AE\7>} S|Fke%L| j^0MT[s̭}2*Z{T0# #_Å삺wlFi"vtV<Rgt𣌝%^[$3_|У\P~x8b"k5XK@ä=8]D#h>fwWz/U&uͧ?VVqjl)kb;~2GbP[΅rݨ$jnҩWYS$F~[KV[%ĝȮ-#pg`:8%'1 *Qh֘O+1/%FH+(}Eg=oDO ";?_[?D|DTo>uΦ9f([a+W+Bfk"=8D46PIj\x),DDYRGڇJ9.RaΩ >VE<, tmOY#q9#3k+ys4 V6eډRR"RhU1gZ̑?4;;cb $d?B+?x0sT1(uAFR,J }qa."e1@?AxP*Y. KVZ];z}SzA aNc79s[+,3zF֎K//dYaDr aUCx']w[?hA] T)akKAͥKB吺kcwXg0jf# jV+Ԃ+>̄hE$&kd2v?_bnOY0 zgl!arUt?#>v2% &H%jЦj sClTΛ!=jMF|;dHac̗0',i>&u{\&R?ZmYZ ^? H*Vf9cF7Зn3 SqniĽUh-9HSBd4c2k C!$/J7/5rjߺWs9M9b:|ʪc4x"D(N/`WΆH*^E,W#`.}F``WaRwTϫ@BeiC#]wZd_R]{*_;I ,5t 9OR4C*Z*zۊ ă'NBL93E:<25$!>hKNౠX>or $i )T$iz*]&Nm]dc'~AM2J9E'\,ebcu+F9gr&߽`ٶzWwF̛c ?Eu4Jj 먿jJpСhǰ"-FL#SmƄyEgT2xSBy Mxz)@/`bj@A6lڳ$|13I:@-6qN6i̾|_FI"Oߎ/vu'e!ԏ{PĝmW KI@#484PmvLLV)H92[*sꈾf@4ɠ-((22jikJs{ yDeTÝ.8JG*C{'&?YJ,euN U E9" !P _P% J>  Y:Cc 2ʖ/hdriy@WE0(5mםnQlt97AkYVxߡ z'7GS͂ʫ(UedI0)S1dUTCU$ƹ!r!`PfQ!SbP[Ŏ!X+=MZ^ rCJ<_{L\`Y]S]w\s\Ukta͓+OH"'yK)ߘ{Fuy+K?7fH(s-_uT HY h3?xS\2gcʴٲ[{}"&jL=A@1qq,D G9ow$1lEpI.dյ4`/ft`RiQ liSqʀ u{ߒ}'@LAfpXUv x'g\EhGt;M@d,;DܾC+|UBCk6.zWiD0Cxξ_w}fd2|s}w DH#\V*' զ;uf?t%Vrش+O$}UnQ'~yp )$W+0e-09lOJIf'/?')߿ImAmRll++c6@% ZD,$Z47q`,#f&,EY Bm&ȯHDYyD m,$J@y% },E׭jLCCri@z-hMtm!Ȓeqmr嵌{~Q-Z?TDwT? l?PWҡ(5K[$>CU5lj1?`4m8ѭh(k֫wj ׂ.'24A)+' sz_OwM*7rnΦxJco9$~DTmz8!úDn8(%eg٬?tDT/ IJ6'Mg|Wx3U@ovFN9s5OI KO g@DyrɃňjîɈL߱m[dzawyO ML6=NA..ze9,|34yMssNͬCOhByHz$cA8uq06H4#GϢ xA v89E9wLBo@>rdgxurJ6cX)Dݴ! OR"fytf"5_ G"6Ix3@!A0@@PGVjzwO!IR֮NR%2[5g2nc^k(2e&"?_>"[@+B"ˮ4Y[<*u8` S ~s2V3 k! $N+FfzU@^ l CETuC GPQ[-CvNM9'\~~Vp ZΝ-s#T"82Z+LX^֘Cs@hX=]h?6U޽~l)xN\{ W/ DFnuA\9F`24!|˕vL%1}ORk߄-ԴݮNkqγ,SiYXI,GS@ͻ&*n&{dwuDrw`WH1lQu^eBZJgٿQM S>]?~ 0?5!e8c݌J+-cYn?d"rkhbX}>ύ8 չЀϲKbD2HR%^"m?fD,~0?ߔɂCy̢J *۠ր֥%Me;s k4l=;!^#vtwnW(U֘7YgMGF7=FLn!Uƿ%*y~\~Ƨ6OoAe;|$pߎ&<*!uWJ6fu넵V?xC]f>_ 5 Sn%Ptq(<P :eùݒ7[,s Ӗ+/VN0b'jO߮xM|%MJlgٍTTH%k?pBJ$?ȍZЍ"2H?_ʑ[5|_ o~iCWUF&BX}ӭ(& ˇ;VNk̠-FWEp~; @KE?#~ѧU-hY+ ߏcDԤcAüo6nGYoGh2dw,/Ĩxtdz{ꛧ5 ɺxjՔwQ7O8P 15DqqA lt# R~U8LthV|d뿌MufC4 g-zǡ1?IlQ--eh2,guaór e+DK%<3lrUsT`5dQhLwAnK== e4ho%EZ5c7$W9/#E4&x!d )  fKZА $ fͿ4KNdYUel@MZv(+W=͕ Yݰ)AHgo؇Z-'mb%7pcM|B7޽.N|@& 9)!;`NIzpUPq TLyVfʂ 7";Ս/%?&HULe{c1qހjmz)թ1ᳳ6X"?o.HJ>I 狮MTs ۤԿx,D(|4fm>Y59|o~'gowj#ÑtKd#"H#rj*FNFo-Sˢp4X[bb1.{uzhɲk^\2բPH^ϥCLZ}6sp:je;PT8Z7^wqkQ.k7 vx4;COz~] 5#3&2-:$t)}K } "n~$* 0OHE1صTAt:~ۏzGZsz ]RW.`%[ !.:˦ } m+ ~X}zLA~T7sCȯ*vj%UߖÐ;g!Í3gf9sM v妇Hklc8n,7qwE\_u-(#2`ILj(BFO+a-hS$Yb+bQXXk2T[$,V_7]=kTat5խW\2 ս\~Rx`5|ІJal 嗷&p@4]RU5=~Q[+jB׫W]?1{-q^%7YU&/m ݍ6[Wevl҂fR>_v.Q_7!"xu z:Qޛ GSEiҔW,>xqN3v/uu,й>,W>d@_zБ|3Nlލj.6Zh =dE.%e6| 6"$~Sfk9K=Y}רGRjVBz damj0ǥlT6=IrhԬh`nSKo:ΠfL۞n0erl^<7D' }w ۧf(b}~sM_gw߮S YOf-`}JZ쮰 { FӠyX^4dfAq{.>i:;(g%)6 ,,*\[ySoKV@vTz^{s7Wch5pW87A#E]>`6z5r׋-t26Ly`hET{ /;yDJV=&r 0l_,tIQiy% * ]ԯn0{5H Vra v雩6ъ_;}Dw~X3|:`Fܬcj <4kfeUth>+%񛍰&Cp@@=n2 8x Pٷe2EGe1FR.|?5 zJ'\aD!G^9,RǏ~#<1.ɗN+~֘љS#)LNPvnqnHIP<5vw;VfLw\-(:ż$Κ|ip 83& FΦaK>\' 938f?MێVx1ߪkS=7Qj@1] {c~L+,Uzx&"fGTdd c'$:jVSXfџЫUٝEwebs6`{j~$vWfn@Sqs6%G$Fs! x|clV/ٷF%{WІJ3Ygg 2,>5cb )qkh|K _ZH(fA#bZC РvdfLs7 p<#^Ljaw6 0[xX)C?ڍ@ m_0dWU֒,z|*M?L$`P{x|(nkEGJED.QzBk2AdW )s< tpGV۹su OJG2+O\i\X45𔴹mI/mqQ~HDNꬶJT؝_ }s>gzIuASHG(C͖^F7r0;kl`Ck)A^96+ doHQ '2Vu8Tܵ{"Ѝ}zʛՊ;؈ h!dXYGT0ij |ؓ#HQg?t_<ҋCNx 3P0T0[@%X+-Z@v!5+_!FX&3Z81so5DP7r4!]0z7HO|v8qwzEmkVOE\zVd35#f7[ i3H#^cC>Gl_`IP˩V.MIQUO5#p@S!'I]VPUXm{Q.8*|1f:g 7P7 q_ÁʔǙ'ŖPO ;sjj|qg2I7 4X@AKYOo‰݉ͯ) Iy)^<}:=v ^4ѾnAM |4F%k.:Q<Η.طBI*m6#A!m^'F9ɒ׾:JYw[yg4|AMz{9 uij"&Q`ET 6voh>jn.CP\^1]VO1mW@ҫfn/@ TgUŝя0djxf*s19s77OZw\ܠf` u9U-ŏn-PQ|R+$LNW/ ' d@! rqg8un#?Z6X9(*)#P4E0f݊ǐAV}UϧTɮzBЋ y ʇgd\ʋOh Cnz^V/C>O#mn]JHIZ5E0}iGPo` R s]w꭪5˰tpa933*ݬ9{fC<=Mg;g'֞Ԙ@XiByKMW_KOq2@7x7CuO2.=W3Bf<tm\였T.pz:+0 W![R кoUؑ 'YfCpoX ɧSW)3{Uѧ9c9¦и~J)K8fpЩ]5iuĈIb^neEh7~[gȅCTQ}4Duhc%9J{ʽcwٚjpgn"H)TeDA4c! r\-m 0WwR^.JoyRAfmd=QX4Xoe3XmBsW=rOk [ξ{QȃxF-[8@DkhW Lq㊎Qf7ܕA`l78cLŹJS?ueyGSͣ &3 ;jF>rV j 6%p5N>h@ })K/j`ܿ(@Ƌ;-r" +QKդ2 zHwI(aV+n;X)YExl!Ea;%!ezaDx)xK,E$שޮK G~sr{;$ BUb`|rg=]4#FcFnnwKY-NVlb"䪣j^ys^V_L9t "~)0<2ZVoFΗ[lB*F [ܥnԮ? okv16e8|fѬeɫn!`,xpv"lUK)6%BE? U?8N'lo`SѬDƬ֝:"/WUЛ{m>L4hq?P 'ZceoD5DJvu&a=hlYؤ1YGF#A-R~?C hl}b?~$DMY@+o['$mY2#}=c>XF{a dQ*r`1{U޷TYDsE]%Umkթ0\vGlv'J [Mj:4WE:HFgp]t8qVEge awM(dnj1 v,]tL=A~X[!a ,?Gqiz]d6ljh,сlF B+\Ϡ!~|cַW}hA0|Ga Kgx _׸Vu a qDH2Rct޻68RzYJ$V%y`İkU ܢFuʛ5?s*]D?q{52o(rM阽f`åǭ06C 6ayX} T-]f͚?"E_̖548t ;ǩ-F]%\jZeѺW)vn]VeǽWf{ ydNE=; 'el :04pK|RS~^mςU0i 1ʪ_RK)]`617;wx:oߘ("t7͟EHr}x5wqu;;I)0n>J$VG0#hZqZi6FM4>HFsҰv({Eh?2sH1ͩbwL{+c횆Fb`WdȈ]QF#}.c'$mnOͧxtG-1tj2ۿM%o .AUTQw)hO ;zEob>ݻK!l=6UԦV~~d=6iU _.mK`o1HJdlۇ`;㽩(K,u<*S&5OEV7,>p"M/3 C|c$-̹{d4܁uH7ol %.жMbjޗ8O@ER}<=U$W/ n&j1u'g#d*e} # 9a P65<~k| 1§)ZajUc54+-<, $0 7#"A¾Ge7Obt*ԥ\+IyW#@2Ű4R?QqJ2Za<+:—7-lO;{Cփj1PEh:Ϛ0CL+hJjJσ`V33KK-i%oy dcɺqPvR@+M'_0yt1M+VXk:c)eIVp/o|μA~ғJQ#خRD`Gs:lKSRtEc-/N- r$]EQrO[ G!mH&,yˌuYFG:kq}Vx:tRor[Cnn%zZ9U[7t'&^r)Z'(7`4 Jد]'Pߍ Lb9M@-GJt15?&Yڷ내za7ap h9>֦wx΢(mo岯NAT%*p$D()C"O5?0STq(ſq y* [}{;;X7.D82f]@؟x B.c3R˲d&$ .wn{f2{zUt9SeAT!xPO!/O0[ƕ2VAqyR(Lf9wL;9[Zıɯ{m)3U|n[¡2™e KD]kT吊 l;A%h(wX-}b|}saAPryj7p4l:0w5+/4m$~AÇ͑ G/Yӑl'k]BΩZWy]ȞpLY=Ddոrc&}R3NԐ ӝ! V[}F0BR%Df> 8|. Y$ UT728R&}Assʍ.ߓ{;u7嶈 om J }اc>0ג{w&C=E8;]EF#vJ},~sr&P`^-sDIεF6lay2bNi}.r?}_0s=Q"ruLU]鳮ϯX7/.#)|=0QdXaHoJ-GCp\ECns"Q1q+Hܸȩw/Pi: aS ^2IIμS:` llwsJ]._eR҇fEʂ0t;V#Q}1 ]QDaL>2b J>㉱C֑QDK4/#"7 :Ρlm]VڂZx9P$'%[ PTSQn ~zlo*;6%%[#C$=MjLv$V RjwOod_{6nzT}v*\iMHoT_2#fyy `\q6(R ElzEeN AB~V΀6|+{Wϻu+WKbmQd"+66G j0 !%лjV@ީP afvlF8d3"`Y5lYLFD#0}lA£?>flQ鵍$f~掏\P ,}IK$!T M#=f3V1\  ͝ݹ}zR,/1"3=(I" |,o_Rx@f<{w$[:,˛<(l'%q6}ee%Jz(t 5?1.Ea5b 0 +7^yVy{6GEN8c\rmhP}o2TT0 QwĜ>hdd}x^W䩎v4_F&&V{{2>Z+9V_gU˴0HmcFRc#ol*K7CI-S 0#pZ]وLX \;6u@a ZkPɱC`ڦY+/5m \ eJcTrȂ$ۤGdxY;{3D=K"^.,!Z8y1sJuY?A?6 0o'h7 5%l>zOUЫ b ,,].0[ -b]ה&UK zTS*Zu zEHi[Wy%˼VgۄJY_<џ㪆gJk>?ߜ&؆![7P =pVt&iE(}pdfFndVR˛';YBs X)-j=[,F>'R26,BiҗKCxzYLoXBQIwtx ?P}J֡bm ;PLI$l,Kb{X#2%p71f'CY]{ 8|Ee ~hjn%f w9JcghFf]HȠ2r}LY lfpJǖgw+k)'Cҥ/{kfhg"D[a[\%n]/7т.ũWFjװ׫ J#qhj-s+*Tq´y&6BXq~b(`2".jrʚkŪ&Ҝ$RT5 Ԩh[.kAn]̣ Gr &hY|@m#\~ e=_Mҟ9l#8tD0PiJ!BoRezB:@ҙ[?> vC,N\&R۵v6K0Q7u<ԫk\NG\x{uPyv.?=U8RA*ڣ Ъ&3l{{V[,jP4 5PZo59W='^LA}͊ܫ~ه-'"_j6K2"^(˝l Y? >ފ L{\Ĭ gEk#ٮ¥i{2q3Q @qRo6mM\!=+K€[&re[kv> SU+$\C곜9sڰ`*mx2a'J{3XIg3^a? -JR/ߗ:P}j;h?c!s=?pONGOb 0qȕ B.9f5/Erc .cI/Lm6Oi4-&y,*bP(\S?-%WRe,9mɕeOw/vex p@Mm:AgW(i Z1YB73B1%FwTrE3fRW[|E<+@c9>2y] Da.i )Y ^&bI4='&u-n GҎix b h>c Jl׍S` UF^۹ 0Vz]&xWZ˼dMgq8s!OFWeMԕ2eZޞSƵhPC0Ueb_-$]| ټgze 5#hvUv (\-փtr4?yGQQz݊ds%AQd571=8[.<ЊuPo:nZotxc֎?%ɟZF&@d%2amJ g| % alnn!/8}: M&]=B6apVUTn毥j̘jX-ʍ*KĕoU iuvnR@K]1)Hk8e!O4һ2r,m֢ rkUٶ(vkQA%[;jNkmnKB=i>s9`~S<Xxny刢pQÁ܂UoJkC-Ѓcf <[ؑڂȦ"0TS("1^go艶bZALƗ8xVJD)钗y(̛:lСKqWTߍYiðDIeLQޜRD3FcJ㥇4r[xgRN^)%+P۲)GQIP=ҼΆ3MkEÊb+^1ʻCqגAArJUsmL%?\=srzڭ"蔌 }ւ<9Fyq)dl͠ӎVkQ܆TCW*1,y>O|ӈ բ?Wy/|峛sjp*ڿB]x@ؕk6Dk ʢӟлN'_,> BP:d ϪH8՘8{-jȬç;'Eiؔ<+bߤ͈ `]dIdwlޑXf u'Q MI2imɿ9`!mHNCGKKB_xfMoyCԮKv0q =M(\Y7p4Rʉr~f>PfAy<ќQ,*ꌑ"\ :;2'IJY?Cp3Wc3aj@0}Dǜ]7hO-I~^[Ƅ\J5|sk nl%uNЕXtmY-uַա\lԶ4O(-|AKګ;u@6R F])-A=iF&Xz zujscэjȡo1x6tWͼZ ޸_?df!hdʥqym*iFp7_v'Lj1{,!1ݫ lm"3^/ ʃjA Kn\g,J[r P8eU} ʃ$a„XG軐:!R#Gʝ, ;i`_vŘ@U/S3w_b2.vor#eCjs8 C[i5gw!ȸ&u݉J#k5([u4!~E!ysz*n`I-S%_f.i0Mr`":|_C*d|r Y=S(ZB˘O'vO{qC-FjvdQ)QJ "Vo-1:>rtTg.w3rfV+&[/2hDl߫X]ϻHά1Th7ZF_m/l)V$fҿ ?Fݛl18Q#x`㿐.7qǗ>~'/8/BɖX(c{eB*-j#ܥ#bVrOSʄ ܋Ovy]hq0N0?ޱ.E8,I+ޚj7 ?ƻk,PYv̱ "LYVzky*3»lOEΚc=VpPx $'!0LcÏs'kdddЏz238=7};ʃlSͧiXkzz=d: c)rdڽ(Zf'bal%8](:GT&fZs }NT O9':1.K$,Nx!L6 N!NMC2vҨ4E]`oC3f,1rP_ϐ ;AStx48=X+SZ tqڗ^7iCig$ AfygC0VNQ -MV)-{N)`K{{{LP0˖# /QҐouSgMVLHi>lـ(![`MW j?Ev$%޷/i/;}5ǷC pXK69U\+^ s1EƔ2.P޷iz.uIM("8$kn/1VEN fV2'cQY7Bb+3Nb: ]U37"'f%FVf HB D9]ìxHϞB)c&E 2Zi\F92 B9{V>Bi!/,a0q8/iFv9Pib/ODЁ^a[摏LL l a|blNyM1DYLgc;^ձ&Nd3k34{I ;#kcW8'K>`x"g&xByӨjfl~%<&~xt ]01?m7wpg^$^%+ApidE17mdVuqFA ']Z`ãܨ纫͗]?)~)H)"z[um 3$?Lq?@Gfoԝ2P̙vUQ|qSߒO@wC,}hT*B=L?跜D0VH{JN:FܓĸNJߚ-W0K{ѩrQA3\MWx,DŽDNغ5ʹ)^2==@1Y#lfY~F0<S -N)(X*:#J֚@HJKudC2 ٙwTi(F fRRf1gqYr! jFTQXv諝>FI`?}z.Uhu Pf$W j0zxzD R1b) wlYbMk&_TYb0}*"2+4eזWgKZ$I%-R8kh@cQH|Ŗ;-(nTYFLZXS&1OSɊ*א@{+jKJdʗ2~I8d1 *pp J/ yR@?уu:7\j'̆8モJ/i 8kU:fP Ɲ>!U +ҭYSM-StAor:Vtk䒢.<^?< qSK^Zŧ"U +PA/m9PI^ww3;N!0os]"ѳfʢlؾ?EhsZ~*o-\iϡ!WpMZDutEz#ޫ/@2yt0t$CEniV}.XH!| ݊ebQ`VsYdS:\}fc Ni-w#q~@ ja!ܯwN=zgӓ#tMZd hl'Af4u3 +u/v6?$I:,'+X8Yܳg#"4w0Fx>J:OH3)Z#@1$gx"Su`K*HZ_ilAx&$ xAF,IȈ1DRs:E<^!wvK=P.2eaQ&_lw&oGGP|) _.x?~T&@ 9r%WSԳ4fԗ \lPEW3?xs[QWg.MEm@ Oӱ_V&y{moڹKj؃%M%H2CD$tJ(vq$n]-#ՋUm<3a &xr:0 z7w'u"'jO4[S;9VQzQ(İ{~qW槃U餴 Me X;%b.nӗ-.v Յggi09m}MhyHrMCЊ\rw#dsWZ+Ckub(n#(GʠfQ5j\kVԣse ]!Y V?XYaY,Le{8ˠ$#N4+ݛ>A|[٘ zcȳY$AM.ZIݬWsĕSM[{ 6;UMG@<"$j2:F}[KW׬mxXEIЫ3Qu^} gDT!U Li! cs&$7Rg?G֡p([6&osZ?/+.>DXf%#nr=?:Lf^D5N N;LuRldN5_12fg7tJ Zf'Z] p@?R tH_o;~IkLPNun7ˏ_[jiW~`7i}U/]9p6=/ g '0w* x,\kڏڑꦸꬷ7ۣD|}]d`öyt!@Qj0T'F@D.KURӣg`0"cz/;z EGЌ$Xڌmڮx[! M@JAsT#*l`o/AtB}鿉l)P7Bj C'7W5^F41UenN<3cE~f/Q{dv*<|!+vfa0~ON w)/!wcfk{T3=,&Qil0}}sdBr9`yo wKm7;H&P)(9yLAxg5'z xN~P ڃ0^Ɣv%ah"`YɵYGLz星r![냘kmx$3 xE;4榦:0|b;Ϲ,MZ+WyDVFk4TR$ֿ^!;|#šea Jh0kDM8KKВ b9);MFIMCm%Ehؕa7$ʤU(|#Um=%OF%$T[f-PİkH$لKB"^_#g6x؟_QMǧ,n4.j; \~ծg XP5)ݯ2gqܧ ΟH9M44f\ 2Ln!6/?Lq})^"q,eUW8"0ژjճ߱of.%e9KइǶ}>t4$G<34J<5$Z蛫Ǹ ?eo@V{cǀmfϫ|T;^#Inն7lZu0R|6m(''(9uRxZ[\@lZ͓:Kg^kNjK<TnNۦS 'OqyN7 4!0(7\%~Jƥ 5C0NQ`ơf~*ς8_q;u+)/eXeQear+wDcAf}ZD|0%-)%1.y+&qXp${u8r %wY]^J=cXX~~6۲X mo,PE g`U]2EfDzVƠl?E )Zr>zrO$Vs2?Pm%Zɾ+ИzS^)vlLJO gj}ǎOڝ kt(HeI`]BrH@mG#ȱ?BV\^"PLb>A?Se=_ ܞGV .ϼ vcXxw6kBEň!O?<3kPEo;+;eH0&K.Pp&?Fˏ4aEI pJȲHs|Q}ܜP_9Gn  @jwD]\M\DoN|CH12'rFgQP'^Wa VGoNj3a]T0_5xc{M$th:nTbcgX N}eek-P{]Tx ^eg%֌ Y^[ pGAqp Ck)^?-z:AdQ^o(XGUXBbs,M%.G;3X!L#1" ,Fe %'PH rM|-W3'||TӾ`{!Let] 2"Q+_읧}pzKVr*% B$0R'4nxZ=Yusځag0YNg&ȒL/nʆ0p0U^B[!ȏ5q s jw >䧥 I䐐wzzgjn?Px^Tˊި #E"l`ߣš 눔R;CW>0XdWjƚcvŋ~;U$e^̡7{>nMK i{_3e䐌\>e0C+ZS~SijFg!^Sds0ڸ}DRjH 4¡WJق|qtboii9n<۩Ӵ׬˟wr5e Bd ;MNMM}}'[k:ΟJQ'FWc+Eb6@|v֋s*D8u)+`?NG@bBqח$4G`& iK4Lb}4_5ً †Ə߷f3F;6;牅/j DHWx&C- dʋQ= U1Ǭkm4ϼ쉠70eFsK6,Jܑ(D/`)j~[$M -1VJG畎gCl{rHN *l[!hНR12SAfJ#TFOm@8L u] )=Sޓve FM7#_sH `g2;ݿK{) s;P)*aq5uښ ).(]]e=6:}Rbj*$"aOL{Ak+c<)3Bu1cՐVg } `7gZA-qMqPsIDy8]X@(<\ϻs;1$^ ѕ5Ynaa.7&ҭ#@[ĤWt#4)ݤb@+`Ők/ VCDc!=%Z| ;&1i݂b <7%@PjȫQJ&+_Wq؈OްU'∪!IśmMO}3`mxxfU58Y{|^H ccv6͌YeGXNaOԗJZ%1UXW.{ :\#Wv!C.dQ1V s֢.s%;&ػ쬔'w1cE'IgОMj7h6GMULh*\ò!Mv~|#6,'Y[F>E-koMfu E'^m;:m +rK!gK}]{J"jK[o;:]QU41U!&<5`Rnt_u\s=)8I.@Ec&ݠ\>:}4YT~c+ _u@g˞kQ,jV KmG4BǘA V;Êrx%XN;Dѝ#ܯ,<|:ptˈv6XeIWǍVi_N'B DR(8v卄Y`&ͺӨl"wCICHlkŹmukB Jʍ\f<KѕF}Ք Xʻ"5Qΐ#fEPSMg}$=GKO73> `V n=z{9xW(jvK (YȄ?䨽\"e:%V\tt+XLӇ"X$Ikh'ӒnO'WSxg?\Htd?djEԅiqnC2*%|d!£[l ;ApYkmM7mږ ؆ Kr7E55k0_ ;-&9۟2Ԝ"> }2"H3 M 6Zk*3*␝u G6'XaƍtjCCY}vb%D|m7)`Ȼ {Xu$?#^}(i 50zgjŻ]m:zp}OK{5bYm~6vKBikߔP\{[tmя*Җ<{>f!Iq;E+,5@ɺ1)hP2~c @ L tJۤ_Tt3RȨ8⡐5 z x*_4O$)ngA+`^3zl ?)2g\|w(6ѕ ׃er_S 4B;0N(ZqڪpD[)YZL^ߛ,WRaspRKRy~4sJh[Q# s,lE#6~C0k _Dy/4}ɗoAT:6!Nh5LrNd/}JۨN;;?}x!X yFhoX~;]n6H=1D2{S簴e ҹs, $R9lYbTݾUl3Ɋ.! eY9S#l9_;WN[ͩ"7J.ΟcW[bm=p<RX})IOJ ȐGF @R8 3*H-.Eۻq9G@==n+}oM[v6/ W)`rk40ۮT?6<4hg nZ'e lklAc~d=/ZSk Omi,俐yBPFÿ@JC3{S\OCPOZK`K1:Dy){q {oyWYcpCa\1CL!d2#̗(ijh4I]w3^\I|`?2u^xcLr.3澏` @ F&򉥆\Lcì>*=ʪ/;t3H%\"Y7잚%'a*.E9([Ei4 '~sT [4U;=8Y}|m/1 #U|3 =:ѝֈ9"1AP|5Mv̩݁9pBY(/b$68PM~4[$%1/?Qf^Y9T(`B*Mxs CiV).+xl$8 F]mW`3 K?9CwmowLcazmiMLB>+p'/ <簅^Gp )YDj.htLGV+$[_.~ v)WA-;MIS鶎= 7 da,G81~[2uMRl<)vfPDTQazLg*KKy:lFł';a~;w`pbhXaax%g85vY.$m¸HDOۓtNy}NLQ#\q @J]ӲNfCQgwڸEհkpEwY+t@p I2z?2~ ʤyW17t +|)،9KyE1&gdrX/+K~Z X XB}N6~k; pU= ^?uP1'H&le˿#ovX嬜=;ٝ5u@o0`?p!7sJÈ`;[V8xsѱ |}3~arHS/+S0ߣO$lL G/R[I< o&Y]&@xyd[$[,Cy5wf n@A鹄a{U@N wzKR0SN@,ΰ35*@[+9"MFkmHCD.\bok9Njid/?Oj }1 cb}|͌N|ch͆7r6S adJvD-=Xic> l)AI˓46_?2|eLõ%뚂XcKGEJw\Wsݝh ৪w>RKr$IRU5nC(@.!inܕ]nI(qN<)Iģ{7J,iӌc՚>XpEB`7eCk0.]{*be)QXrK+L`̥xC6N參<~32G])!Yz~kr}a`6l f= EVf 1_+坬wd1K7 ]dx eNk rZ3`ʸ,O:#]-6;g<~<S+UU 'r3xӳH"n`cwoLFlMkNxTKdA9R*eэOyάmY\ Eby\UU7Y#G$𼫽2ri8,Ą sG2DHhlO; r˺V$;]M|ag9 i;h[Sox2j\uC04¤fHoKh_K@лpE7֘gi|@h7ZY4!s  - uao 1}!-w$.(Nd,cEpu+8|r'z*|eE1 KL]RV61$D?4VW:kr^Q(^rZ+-#;P(GB.&y{q{@=j7_s ̎.%asn*- tԵs2*Ou/|I`tb뇚Rvz1 ʤay#4(X?Q1lhA}'4#;m aPf^AG//=hʔT1{~/ij%R{+ 2VlOuJ \ >)i%aLb+oMqʂݨfnaͨlj0)п:f $w2fùp.Qvq51 >ؑ5@k ʆP*.d)`"gN )%o.P5tHʼnGH f:+U%[dhfŸQ'aQ1'D&cg2ځ;KqIh.EU дڈy\mB^"C_1lW3P3xT@FZQ\q I&U)\ _H9"63+smN";5eެ%37n*O80]> ͷ=vT!Md-&[ֱl _R_ HLIWz&OV.f'_}MC\AWsX =z*C/mqԳ Jc)UJZp4l Vb!_ ꡹?p 冢۟֐4k߶b}lr%H/H*4Q-'bBП9q{mrL"||Aѽ"ɝB@" SH! 99a~oacƤgN^yxL+f.gu!|^.':=5zpSAj}Q=ý8OS5dGHH-*^b-3b=;ikW+^q^:>lDNS?Wl ]x̄@|t.gG&T+bF 9*>K$qqi1=6ig FOw("/cug"?*z\q\$m,$ӒYl^V}Fq M!_itzjSH[9"C= 6g¡< o. 4noaiɆfZS=v;]Az0 52Uԭ4&] :~N=; l̅DlECc^(MG˪E=cJe$"ZbʆHgNQ[ZJTP:WT9/i (XntJ;Z9u鄁A Ezuw*k|mkP#xYzEL!!`OΡV'L.ڛض=s^4 H(ݼvԑ/ )m2uӞzi ;F{u#'#8驭4giA]uVqʰ\2]cVņ(@_6HRD! +xLEd˴Ti,iԸHla 0[?}|e*s,2<7iU?qcsiɆ$gq1vtuөV.b' ?T@v4AͶ9cz%In /YY[""uq$I (s\%lQ}2}ûta*MM/of mpnp9<NGBb|72:stvpa b@;=hMT#mcH6Ԁ2* 7 PjWH-*8?vʔ1y_@!i!*D7=*з馟Z3 r߻XȼM&FgiwuQ n6LK.CX8,"#A;g!d.8cE3RY̶͞)f$YziJNjlEB#(hw8УcAfVIm{[l2sJ#uL9﹚#"Oj}Yg3[?YrT Q]B&C_*Ӄ"jKX!vHT]HB?QyG1l;w3L$wfrG6p|^0XO[ߖV{ ]߿H@Ҡ Ƿ1l>Շnm3oWs/ HP܂i9ݻ]OtEOwo~[NQt~R^Õ^1=nw Z foWT%.׊cfy끉<.9k+:(?G&2^iIRE::+zU+]<bnd vPi j!3z`̐ J8+[r4rlEo^qA"&[]q(|cOþ1k|sШzZ 9uG=N J,Q] PJw\8q7d~9Z.R)R < Q}%SD DxV^^6XvX(Vha C3 ;h$q֕=ZZ* Yh[M.@bN66seTLH{@3X3iI㍖!2^M3_n;ȵmٔ[))pZ!I'A2aQnzz#*3IT*[`hPS"kc uő/60BP'O*;KV B\Jɚ6}M/DT~ tԯ=(Y9RK\|/y~OHF3 D; oqq $%TlyS xhze;L%Gbs*D *S t)5e4zBFh$)a^=7bM( 2G&>9( |L CϺ[o|9eu:X}V} H/ut(qcG/@"d^y|Q*1"AX]%3;+Vpty'm822]nĠ hZ 0}@ rHlmeb{滽XɫB~g\-M^ߎGEfGj6ZEXl wCɰ@tb5rVpBV~^&)^՘Tvz,8\D:j?/6 T]D6taԤiR^u1j02{_e[El.@en)+YdJ\7%V>Q)<3zi}| ڗ 8VdݭsOZ@X܄7.SIaݕ2YˊX[gVK$ɘGx|TDii?堍s/RF:0,A.Z, 8)*W1>K\UikUD (0;-̚ H^3jKf} ].\.+D6`:IËI5c/aĦԫc^52e}2%tmQՁm{>#'"o_Sfh-ZQȬ>푘$Jƺy$zY6"+96Sр*idPyP1갶.&1FQ)}ǺD6P9Ncp9Mzz:N{݈V2U_zVmp0hf|N%KM@ TCx~@ (E{ 8 -l v|rwμ nÁˈa@'|"d j⤙Z(g67'A|FڧoYoo-N$U.~?z'mgPa"6KܩϹ 'H2Qkѣ<W0@R . ~)WS\EgRZ <:B!YƣbSr| 뾯3Rw@j8WKPeB`(kh)lq WbCoR#'S9ssx5QXC2ІiQZr1xWEVJ7E}7r@P-P#Brh /N.S2 l'l<5xVK赟zNS K@dA{F$(,zO{fw.(cɱ3' ȡ !Lkd}:"OG W:͞RRS5Cȵ7 EoӥrMsch2 R61<蓧N\0*=W5 tI-$FF䋁WW o-%_h q_hԌ@V(15.E". P>|"x`tKRJC| a*UӁtݬ_ɜQƥQD:◂Kj/tz4t(D aO*#% *A;Y̸:c ٦ *ClV[w٘w5E5(߹ fU@wn)p q|ݼJy̕f J@4ﹳa m{@-ky{#TV疪ߕr>BFeOYܮQs+D==XĮOf}ǯ ml.5"UR䷠g%6$\شt!jwy_m7J2d=:qT9 wIDV&e{W; L-I r Fg]+&ޛYuX = S lXbEka@EЭ tқc&#zBu^aW`_&M@Y[; &#"!n1 1 AvaiܼCKn{ KQb pĞ@tĕh0Mr1$NhY BvBLtT?#hw.غ$^LҦ]uk~+f qѹo1߿pn-K[}@]"2S ;WmB368CpTCq:I'.r Z 90F\$,}5}~%}Dc(z._A+M OJ;RHNnné\u)) %93lo WFh'tbm8Z<)ws`G1uecj\:!{@hThHW&pDNmlxLΠf LRG@UKTg8KK#tXwEh{/+]B .'K KN~s˝H[x\8Kpf"TCkH'Zvy/|Gp,ߛq&d> ]uQR@\CC?:$QBqiXԖΗrHS? U*۠.fAO^*K_-j.)Qtqa B*+|&{"7#NA*jIq&QgBt/θr4|6,Z׌Ÿnrb ~E|@.@O*zsRts-2tFl=T\ <#0w y4-Y#XۋgvX(wg޽d=m]G(mkIn\ZmwdՀ!q6&m6:Kj>oTz0ۙ9Y*Hn/&_I5+7'C]{齝·njQ"e+a;$^13=@G/ICUo\)2 v&L4& ݐLE`W5FK8h:6y9yVS|땑GDxδg-)}qC[5pX|{J'B&VhE<E]x817q$D%욹;1_~F rB_5.8nUGBhD.+iQ[bHa61d}y0bd"zzMX -M\X W; PBJ9M3ڸH|}mV>[;Nk3|ǣ )/#I#:Y+/vBscNctWU7 hս"D8GP9{(cF*8~ZыJI!TF|? @gD%xnxQ%C""ZIe>.rWI1(e"nhgUULG:DwEۉ[2gp` ɪ*=@,m\G^/`=OUqdez}Nh TWzmS2<74 P#I ƲN `ݵ)>nV/]XAIeu yoyUL xbӈ^-IiDOFG?ϱP_=󮔧(̔ =8iIZqVȿ<_ 2),]ÈH zLȤW0r/3j zfJ3e_? 8JvWSm[Gm9x5b/J`!p _1ʺ^Ӟ-w[fѮHRg Ť jVٸņ8nMJ[S7 ykUGÝxAuB'OCbw*SD.}COrAA#w!ޕԉC$JFWgbګ9V'3(8q9El48r{j̅xbKCqx}R=ەv`Bzpр"oR" ڀPSehyfzFɬ`XuWhV=وiO$3Ңn"XzwY֯Gs-cKݞ,WfKags"LJfV0"}\ݨݧX. Y2"^zAۙ1zE UᐐX.e"Z Ai!ԃ#JHE8O14ٽk +Kjdz\&zBf*y Wp[}Or`r[T?qUr: _v>4pD]qfG=Q­9M$hV!j gC meDTpٝ3"-TQ0$V|ysٜx}m5J~iv!Cݝ0⭞9 MݵNНL}p"y&4іߑl2}vC8&ij80(M~m,%si(@5X}0Z)^GHP'FR}{Ƃ\&a\GP&\"1?fZM]Q,J5XfxO[5]!j+P=,xBop|w#c+lǶ<8|RAq#7j9#.ΠBO0 bTT ځ<d\Dfixǩpv.!KJd 0?~af c x<~~bs?ѐC($]X~)M P=\-ߩcT ^aq1)vw:})"OW xSN\2F &.'(/+йӨ  X!c- hHH&^sN-K~Qؽh[ Rkxs"b-,)9c|Y!.5m[V[I졣-i#PrWq˳{"@~we pcبBlC) #+cAנ.+U5+kvEHEŅV4v{R:nG<☂vߡDƔZ|įG mV?zp>7a(%ݘ2tL"(Cn6e4{}1:+^߯Lp4;W>ЖJѝ^€x<[ 6Cň?X)Ȉ=loanzmˑm>6(9!):N$ph |IZxƒh@ x+^dkCV"NXRuCt$EEiaAC,bh=J_IHij׽Ȝ\Kte*D:; X8IMZJ]ϱ(lDc^dܒXe̘tNT͒;.AXJGӒL(TܶZf1ߌJF6*/ RQ]?5֬D!h%OŖYe`I@o;@SΓ%6rXJo!}CKm΂6.9M8Z鞱"($L\`^*K NZ'eD8t[И|p8qyc?|Q|A*wn]l˂by$$úS^a.Ax],W&&VaXb5&e]B,oxz#yvhHa- =A@SuQ SC<C,ի{(J%PhPq_"8K(k2Ҹ@HGn1'_[5S19qϪ';DϽ7jI`{sG 0gngԢi)c[s}"Gy+#|vz03dW{5%|2YNs& D{ߧsŹC,h T5a5MTk+2G.8OűX0N !p;OQD\d#aL4!j}B'klq`ڜv… 7cL:MA7MLp@;5Wi@k-! #V qsR 32z3Y^T!cRg RA ;ZvQZ|@f11x9% ƫPFYP9K&Ln;__uT] {*srkasnT䅕L])z$I˛M#&M~umm8H b>/h?B2Jak܉bFRK:dt6cE~GpfHo\MM ;]~OxBKDd^b[/=P_bqd@ 4?;oK5xnj?3aVs)͞>H F_yэc@0ٕG C1J׻x/~۸OL_g@w͡S:3ˣvxa2NxbЮ{y#܊hv#j.eAaKAEC Hzj˔*rﭛ.it`"wvQ)s:y%_!"`z2rF\65p>60/\WH0Q}?׾ᐡ9;u|y|I;{]Tdaaj7Z^p;-^Lڸs[r<hӼX P7xTA裪\͙z} &4ͩ IT:_1 N4).uxtR,Ud&xu-.Ѽ7j? E6n3h% )-.$9uV \N z\,.M{3%}$< `%n7o{DzcPHԇ}[UXn\e#2F)+lL?P5Fd5tIbk~uEV 6%DfY B/pOb600Iaԏ, 1rۑݶ+d3"ZBߟUKG"% ˆ8؇XAw966͎P*, Ŷ\\&2J|RV FhqRQEFYIWi6g+4w(n# Ƌg/g<7.O|L7?Tz}a]TيL22YQ|: B.բT{S/ rh~6HpN<ަwؤv׬M,S u)&32ms'k)|u2YwuK]|O_ٱ&C:01'$5敉idRu ?|_ɫ";1vRপc=nAD؁- V_ylނynf"p᫁w;w@97S>^b7, &,1 ^A7A/$aj`S}x-w +<ƨ>jTG /J>ݔb%⣑DL7bHViwgz`7g4sgoEeL![F6bm|Z2pb|pW1*n ~k_aJ8IYTk & K;YܯJEr j 5(9ҧGâVIƋ6lM}1GdE(nl`?[)4[J̧U2ca#ᨈ?bF_qiP[Oll_' ɇzqK=!p Rӯ1OART@(Jg0Xi;Au))MíVy{tW0 dLU SJ Rz[-|JQzn,^POu W]TnDXr\+D4$`6/bКvc eF&-E|T(moUMs(tA b=߹x[v /;nM99?ԽGjomc:SBU}%o>RPvHOW~}8ļWcsz2hZjRb>ݷe O/(#k!$C̃:YAh1|b/Jժ4.%' 30 / Puh1<'klp?ijC˖Ǿ]z1XTglpͫ[5t@>ZD8I*o0'_®=$G ?*V M+JLM7ljVu|1z&lD" sWHд4]pgyFZc/5F!~ 5A*ftw,isP]f"6knj<1AՖYUq;Тt@. y@˯Y LgP^p"+ʮZR >*yy|&Yz8CV;-|&9ƓK疑,R>s8(TcXͮK5/{y(|?mv=kLQr%l as7#V[ htU7NMx >8(؇Tb`9=-ES8nn NP]^ES: }R '0䏻Nw&'ck/+JwD \^#'3G2)E\+ittx~zy]6*ʏ(\1(r,xa88j{u}ĂL@{XOu좤Fƾ| SљO^SD{|]Θ.[OVY`IWs+V٪Pٕhіu)KIΣ /'%gLqװ{BVKܡ#S S-u7 bO?+rvsdo겦ʚHH)(YP %^s y3<mL+NuhY[Aګ@Q[Ų,k,zxP̛QAt3}훔}a>ڜo=k"/laöKC#+(3 221x':w<;T:$ 5H9θA%۷oJ^ V+uYJRIojIg܀;_fd6 RBK#8-d,4r^J9A)7S '<~GϜ.C7B+`ӽ͝D݁:Huu<MĬQ{jݜl5KAg`%d-dCZDh>JipaqC33p}rhzARY`m0ʇ4O, {On(dm@| 5gclBK8 _܃f?JEqRu>E!Ma]ή= pQ &iWg-N 0]WgZoEeX>UDz;BUa^[~F={v@ݓwaPžmT y*MG2Ց&hoD_$( I0 hq1ɲ:'vyG1HKyVz OY*l}|4(Mo_x I(>ضCkF M.G=8)PzgQ+4MLrnkshp@۵~ʶc~^|V=ڍPržKRN ZШL3!{kPB< k6`ec jV P5Zޒ~U 0FqRImIQT-у3}yw ;D܈h\U΍ 0&3(tA7ԂOyT%hYzLT Z *z1!8{:Oߵ #}->&z Mq칙\飷]Ej exkFd\pc[?սep:nm0R`Wn|WI{O&Ca6t(v}U}Υdio =WuQa|ky)mD&Z+UM۵;L_qrQ[fȩ[}k Ǯ]3yO-'kO#F!U (:V9.ɴ}u.)d$v*=.B ZHG3w5;IFr7˴b$uf3xÁND9`3$ *.v:f6+Xq\0?S) g̪#vs7_/.y!L 5tH;^}3 )cOƚEsoA9P1"=|qe8sL"y_߲# ОhޤԨ;$>ٵyzɊkPcܿbu'(fV}12O*N &ZšfAa:>y |SMaV?ʴAb9B)/͐S ,fjgt9, e\{ 7^.өJ3 Iv +sl|)(ld"{h<\Dž%'ؿ} ( !lyr`ƹ]خUR228>bӲoxXokx5f #gh0YVbwLlW2Yi!웃$Fg[-YC2u-}63f4nyvֿt]ڢ8K"wM4â6.7sE(`En52Q /*]a=ڌ.`9y ?{X;=|}zyOF|#!T\Wh>Sh+J NgmɅY3H7Qxve֐Xmiώ540/ǦQͅK2^vC%LVPbbN|$$dDgua\DNCyb{/@yghJI?dMq'u_3-8zFM;5V?3{5:la{UkLǵ&'lQֵ[ ZFnxo@"Q>HV^^L:[!6@ldֈs@<DFU.Tuܑ,OڡGu`&J,ɦڌ idr C]M*3C_}UE+kS <1jrmEx SHM+ FksLj9B"_Q>`锊g;)@Yf0 ̰uLW$I-4a;&H٭Y;+>"jViѝ_9β:p m?XdkK I "^2>s CvI(dliYY8؂ݷ-+0(J.NAdIBo=ի `]*d*d#{tCYۜOwT?g&7թf_F4j9 \f{-+Dx* Wn_9 B.p'=]l^tvҵ/V)!/  /|wO[z-MtK]#>*bInY,#k X/&@Kr 7;CCWگ31զ+]]HĪvŪP h6#cpġxI^pⰥAwAe݆} xB*~at6rpٿC'&YwnQl9ބJvsd.>FSs˵aT^dQ@hf/c_:k;ApWg{)m:]!pr~:΋hc0ODliOz/ *_5̜% ?FضlDl4U݋Gґi54SIE\(MLa% *4gthLVJVMzL_ңvSƬ@qJ)W:wp(WKF 䄼$}\.%ಽz),gi&E%?ga'k3CYJܐ \NPv-6`&B=7vز0`l>=?>+%2 .d/>)p˲`$ @YFgTָPY~:ʦ3 `-aT,lLb0P~C5e`1|-58aȸ=Sj(eԋL]ȪR}zoFDv̯5$fF{WXcn%S~9~/< ~se;c`zA@gv&Ҏ\ySB+bk%6Cv:2*b"k]V%|~K%?l-B0v,=̰jGp1H^xLVan6h p'5"AdLв0QO%{|Ʈ<8O . y$^NjB]eJW!|E,Žnh4k%v[Pd0p`32t";cNCi԰ox8q*|DaMvy$Hf jCs)"0j, F}~ A󸰏N~*?YrR%/KERh<1-CODbv*hɅ߾|%%IDoK@Sߴ*_iLz:yNJMo *( 4!L9pKʍO\Y&VQ^ -eBrLDAt=7[r~H@&{h|4jc0JW$΃1C<̶BGiZ`V\N9iOh4D(zABT\u;@"ܔ:-^x9 b(kUܤjNcFl\6R/n;Բ ,P `DQv-WBYC?dIBU&s.pGyh~a2bDMw`UBRm ̗s*Q" *Sd%?ej+p׉FP{wATf]Ai,V2~@TL;E]keQO3wP ISߚQ˭p{ yǓ;NAf˃hel6Q`چ}_ TE!I`r;ώu?!-]Xql`8RB{32,YY($>74*eQw!٧<Ƕ+mv6b{oͪe{)|Kz÷!U7봿\7dV{9fU$O"~΂A o=y#o35յvWMm.!886Ҭ]8pW "zsj;}kPy#؅?U B;i>N뢺-y+2p&=qܑޓm1A3KRܾYvOэL>,/wFdq-,Yg- ?wDZ{*?W8Ea*}+~eB:Z) iX)4# TlS2g:A߭>6Sb+YgR}C ID -ܕK+1JHB˂'QÃW`cezm"&=gl%b/R"wfdy{p>@"|8Y"vm-A26i4scK*m:)ej6A-vټ@}: u%uʖq͌lՄ,IZay_K<7C㓒8noDWIhDh7ozb[הMxzW>S}mRF"p+yWcZn>F_PX^y$Tb8pk 3wK.t[ rk)(;!uղMygG`L 9x (ӽ.2лvK@Qo͍(""Zm ERT*Y/JT$n)_͹zV|6~FǬfq5kv&V3Uԍ)TD@9:uyI~ؚӽ!pW>ꪉJV MᅷqM]ݳ¹P ,OE l^Jׄ]0i:˲G 46խQJ ))$ CKI+lH/e:;r=[6[Q)O& ɾzrM.>IbaMgBTV9^ꝻK4-YOFN\1c կ%0G|1[/(x2Dryّ,8}԰T_ګjlǬ 0V΄eD: HՉ&c{xQ7<t=ܗhC!)v$;83?, WJo{)Se&i~_e g3[MǣgKsˌמQ'AGb(άp*rh ˣ*R$̰ #? nswl{*,{~½*5[Q2$w(h.πNAmL@3 U6ͬ3(ݛy5NmOig1TF_Qhjq`$Up'LqynAvSɱTRA7Z,2[ uR :u؋϶g1(Lx:k}lNiQ6];{v嬝Ҕt+qPu@QϜUm#3د"5Lh;F۷J,ڨ5;8wS{jJ,}u=\ԧ`KۣPº휼&c'8t1-,E>f78d* >G*u/Ct[ҭ'+yi➶i֭|Y"m-tIOJjÔP#0qxν& bטgC 9Yk׭\|mTUҝ=BjC4?[{Yd[zكnh/9U7=a Z92oUԧ;EW%竡&}4} K!A녪L[Z|)|_77B~I)ijf B|`c'N-$!TM7OӓtLvJVZ9_D<;#ٽG}>; $$'ڢv 8/=?/BPLYm#K E7U1Qq/>Ѵ~w~KBj2 nے_O@:R1Vgdk%a5,fd E-hIrEEaxM5SDnfycvfq5'{ZP|t)1(7+iS<8[7YT䶡 'PJ_no}:%np^L=*cpj Z =q){ʜ|(8;(]AdP^}Y 8 -?{FD̸17&teT_^mYo`zq"tW0/.@z<*5$K%4Yh-hQ*#MW&%VLZewU>7Y_4ZAyZ@v/ {1m ae+eymhr-.(3{VC,5}mq^,!%̴ŰA[O*޻"|}AystX_jvc"?^׷4hkb7o(<4:`JcWjz?-3AWNZ5|ac5PNB| '~BOwrA5XSʽ-6A:¨溓]Fsl8CEs<56)^փv,SGv3 VJORWճw|O, u= 6;2u@SyGi318Za6gW<_i+UR+߱4nF_\J?Hw0ܰ + ܏k xaeʦ$SjP'jT%w*xq^BS޴*׽:݉`*$u140.2iҟkJSV1vNja<^EgOQ (N-w`QX yҊLZǿz-c/zG*!0wLWShi"6Z|7L{%i>D)XG?/o=&j J#zC1|uD'go޽ȯ`)EQN, xKCuhb՝`~u7xgf{!2T۩TbAqMan "g/d? dUu-{ɲb b̿߁e_S՜r%pTr:\3r~ԩ#1cH0;Pv,M C-&|fqsS7Xb3XFzDkMY'}yk?;i{ f u&P r|V/:l $~De=yE nd6jhpR("G\, V&)+'tVpi#.G]d;S8dܞ8X"~ⅬB) N Qs%iCaԶ6O.~Joߑ|BO^aV:wS9W>6GG&j)=e~~{z*i.9ImTB]Q tR)֊ۛ&K&Jt,ogГ,ո->B[1XT6k:=qQ R,Atjޅ]V}Tq4d#-M7m؝JaX%ud[Cꉗ҂;U"#HԑALj!۳{w#q œ3b;>nIs-ռwOvw߳#tlmB"Y45(p\RZIYFxJbz癵w0*z\zrM üa}Q1_R)PxW3ПT K\u3m«J~VH_,jGr7j `@ }\Av^Bt:sKL*XtaAa ݬ?Q ʼM%X{9d#=x*]з ٫xcy.b1]GS,ij"88n^"s ިaJ?Hrԉ,9Ӧ{&}1#*#U!O-w޸^t6K omRP+ .YxddD4u_t~Q?8yfF{?\p$c3@u>"DmX#1;9o>MTqrRG10T w߻=pli#6Ӗ1g9D7`F\Z -}zb 'SI9M.vJ4x-`d`{ă[j\*q/[__: Rv,%vX xpY6, 5R>h|W"r/U{g[jc.j,)*G39, }~Kcc胻^iw PhzҍyhOiBS9)o\`X+vό~&e13ڜlH9x.XdX+[Xyd2A݂vk&-o3C? ~5ʠ2~Awc|S8|=qM@zՃjC&̕mζD]A箎S&T$Af1m{@c;ж !NzgJ9! |3nƱ'-hTzFc`VWU T(   P<>N3# ]bd{1:bY"LJ ǰu[q[G.WX` :YLsya?T%7}0d0ur< Ka7:Op#RXH7(cߤ=r&.yv.~4NU4ڰrC~cޡءAJWX p&{t _l&'vYOY$den$=;]_ĭRnv/^j; 8P^l3wJ1û,U2L:I9O36j/z;D[nS2H;?\*.ZT[=u]#rD5K-h*lD{P-BBS5`,0,]C*~`3~Kᮎ!UXEi?ߦMO_+1Hq'du&T¢K)ÃWeugq Tw?)"MƺOˎP5T ĕA{iBҙ5!|XTEX`_ڹn͐f@}uIퟙv;X 砉>Hbq Ao' Jߢas qd;`m}>,8(T{uD莮!6vbW!!L-E?LxAԁNS>-~YR[͘G 2a2^sS2h%X>ϘX>Y3xV1T(+=48)3L8 &ʙ] 7]\I]W'Vyaɔ^_/OL$ mz> "tce>"#^ptor__X rmC/4OpPd6_ ]4 N4i@ۆhJ ©L_+VfEϯ) aObQ^Ѐ'϶ *8hhb% , RxYegSoq!Y&e2niUh*p Bt,uRͳ2)/΁PYE_FO<2L\My ϲ^pZDKzV b=fsPhf/;IDgs&kE9ɴF!- E@<3H8ϱU N,1o0 .DZ55U\(x{E8Ժ E/.4"6LG$_XЀP^hš6́}PBBN![[1UQ\qX]e{7APN(ϫc5 8ŋ#--$ AV9r 8hbJȱ%mXu_ј?#ε>U{ $Xhjoz86]bNm#P^5h'U `RWF eTS0%=HHrycI[9Z[43,`jch9y|ׂ-W8YRGd"cYk% 9Ӷ7A=d +t'dpSzb)LEemԸUd~8%q1?DSgHtS!6;_E*"k>JVϹ3%Մ<@\i2÷:xԝmw-=[ NY^|j65^xQ|wP6| cc?hX@a\͏ oݒ#oX6w3'T١exCʙc]]hAnsg?ixk%"Cr^~h#g:5*kY@Ѷ<91r)[xb!3hͼ[(G4KnM@SLe,gu]2Ņb(ţl6gcQ'kz^ ڝtytX:q`qqʖOW`faUB ƌ# T:Wo#1b[56br?"$t)mD5< o B]\ 4RԃRq Re6Psfw{PY񳼸\fGex: /IqS0_jh8<:eGNz)95jwjkH;fx)$)/E}E>I~^(W: Bȷ_f^NgD28^qR>6mDTH5G2KOe~;:5X&@TNuTn׆MKoH4AhPp: ^ϳ*D>U,^|z''5z@jyvV5ז<Э4ׂ5‹Ct&zGaOrSAON{0 dGzՐK ⡻) )jO0M)q4t;4n:/+!˾BWh5D7B(ߋP$V1m tc|ZN_*ͳ1¬[?J;a dGs\c|{O'\$"'V+j'V2H8;_uq[ g:\}S6IJ9trE$/.]j(D YՁg |JƖZI2Yx>‹}w}X{ xQ4HoQY@vc g`~5 b ,r1=rM0>i푔(+PkIu..-ީ5Sc!)23(-NxvPګ#r)?;<ޱ Lƒ60o1ҲJ}[M}M᩹6t^\7BiS"2C?|:ԮԠtn\?&$`\7j0ů}Ch^LgeaqZ1NF9u HG S 0ƌoQǤU0޵3S3!]-;\D`3IO|Or0@/4!Ĭ&W)[n/{D(:>+A8HA cw.\^x m,Eo_&W" bI2?Ō]%5 1>gmx:`Zt3[okJ >`^T7}|mo𥭷ؿPTaK'! J2T8dOj-,iW3xYIA1]y D%z!6RvM| rVk]0+}@ c"iHZd#zjf {G!OZ#ZK#L0+F@%"ȗPK4rS,ܔljiC5Z|KBLSdT2 <$i&,Vf+6";JO3J nFrt|fd+]RZDe6&bՍoh]{]t|ӒGr^B.j.Ja:T\RHU[9nGZBCRf>s:AE45 BuD/""7Y|)8^sYι\UZZk*l'h̩<{'7t?uWP!!nj`^Si8c8- ZSb 핟&辛$M)^ :sL+ǽ!YbIUh2<;6X} Iy5#@E E.DVhNjdr3v)_{ Dvq1ms?{s 5䓝eIElq=̙q^'t5rAIu៕>鿴ԝ}%C5B'=8kKw]y!,Y>u\ێbIĔ3o%~XYREA.,=l B_/'q b-ic]8*tk~?+!~m#p߂y}t0lCľ]9 !+XK3 7'Ps!8ƄKseќK# qLeYww~ nmW>F&2$C./X:6R,z*of?w;/;n]?g%s'IRNxv [NcYh'8$G=u6d[_B^!DD?윮 lF^{o}k+VyϺWԓZ\8qU| Uj #T.9‡nhڣ] ,B3 7*\3.#It00z3$9I7?5]H[*tqY(wՎEvEO %'U=F= 3&rv!+EgڑDcww͵U gj@dѾfΤ;gX\!:ǙZ(?UdSjM¦X+ḄXџ$b"t IaSNPW(siAT-rոicoMXd7iIN\B{'Q`WH SUׂ^>B.S?N` :O~ $%&>V j|4VuO,e\7K4 `7xCCSm`ԏIc$5IQ]\E'lܝIn.awSY6HȦ{[@iW5RbigCٝrٷa5!.~IaV,YE,J;v3+ـP#qzlRc?K:0c#9:lve?"F_{<1a&aNdp[g-YOIkzZz2meGI^"2y۟=SRYɣܳgDР7shL_Z||Fwowe$lK)de]. : 9v@PGRJ+ y g󐔟S&:jLq!i21qђ.۝`zSi=sG*'7ѧxOZrL k-I"muCN9++1:Vrf ur%'k'l~XJk!'w/`upp-*~\ e콕x> ?y6Z-Ƥ=o"bQj*YH_S A#G2) '< ~`+R:%nDMBW05?G{j91Ϙ]AlG Tf5$tT8A+Ȟ d/T'ow0#ŽIZH+7d ,OK%\= ^ڏZ@*'5_kBA(V~$-΂,Ѡp7m3a&c՞R$; ʎxhIVŢ.qC\Ox ƪ'n3{FAI1?nk#0!ߣhE&7~||ciFME2՞BQ9ϊ+ Uh,Ci=CuxrpElOk!")،M|LOÀxg;֪%&l J/ D' =`\!P+ WJF?~ꝷʀ ~g|/omQk=`I'fUN<;p\6 *`Wd>Ƅzw'?+U9qNjv:/HbRP"奬4"\Tq(F(?AmU&7/EBx W5s$7).<Bör8XM:|jP#ˈXH/g MzAݮ$:6|ZiC8hg3MZ[vTT]~_9& UNj}P|exQ?j$G#AypjZؽ GU xܨg׏:ԓx [)uǰ5#0mr!iJʅ<:#^ *P7x8zThV?bv42%CbfIƋWqL]HP޺PQMk%&O;h#qzWeRq w;[w~[ C`W{CqE]o+BI(CbY홳[&天"(TF,̌Sۓ ? Xw7MT;lPb'dLbbv}'C?L&(δL r70B]r~p]2"z*U"taNm{4eIK]3;EZ9ReQj#rzϴnbGCW]0\qŶwF7˽7eυe=rw9rxLo)yJY@7іc& g~ \ѯUkQQy`&eRpO=68h6#Q7$n| Tg͔l>1m_64ZH7=qouj4YrV3ji`[?_2Fk^z|4X~؇~e弧]bǹYnL Hq5$Xzj5& lDU2)rÛF_ˈP>`ݓ^Z1ѥ*,4ĭ'_;LvQW>cR9?Տ^J|,y,]YS`Ҡ\Mlh9;a0ix 1YW??"q-3xUdf!=G '޳eh[_oIL8Q=j{(xAWQ0NJ6A.|TPk0w{^%8*͔LJE]؈x׾X"_-jlD%7 d=qSE2fD~F񻇩?3cNGKҢKBDrJ\()/>Ue]i%j|4q+fZMKrr<$ts)?ʺb- VFg֣Jat%S+ʍ3HWGo)CLi K̬0:n:q&~Ej fcڭ=˩āuw7\]clnl0Gg|[玽aTAd8%cZR-:ƒYCYw 6tp[](5 SXjF,+mx z)1Eo]B/rBwf?*7#oe%㽻*ҿpH<S=.@=byciTmZo OwUv(ߓi6?Q^#L y=8Uk hC^46,i˭@0]stU5IJ>9g:Xyu} ܂jiY>J''e+bJJ)1O_NJlA8w8ȼFi,x_fƒcu!c1 lC>P ե`<;x,^h н`2.{\Vz`qD7)W(es+ **AЁY '& ׆$p|vi5xZ07.zOȣmW:-J[u=AfseRWN+RР@pdc_6gPqKK)XwwO3)l6P1Rd.{*ƹLqq.կTcGCMm9D ''"OzcD%! nyi ,/6oNUHq)b82[ᾨ@uN_5nU$PjW:i+oQ̵Bg)iZ *E&d&Wcq4Kλp3ܼG7O(ghRؗU*ԠltӕPύd&ҷ` /b$-B4Ӧf ^鐞KY"$]2,@xڣ\jdtxѢ:%tXFJ֛Oc ;N$=- aTztս,{J E#?~C>kԮZ3/ *r1K~2bg^gsE&p̘UQcd"@O tr(s\!#S3 *C>J|U2#0υb4s|ݫJ_0BAysU9Pw[~}ˈ?$_&66xd8h\ ~F2B?8S]j_E/XۈDrۺS0t+[Yv[Y-MK4qs x^饩Xm" }R4AQ ExrNFrNwɋH9J҃l,r#t,5Jn!}.G:V. E# %[eh(S@iX )g6M3nL1`pC9ޖltCsZˍ%Qftp%tYZSVĪc9 ~+jfW;_ԙI!Nz= 3ewG]jAepлrx P<%iohp횬v56:]fȔjX?rd=G LNC[N]U1>Vny2rc7UWӸՍ]8ibҢTLnbgf5`w=S{)Rq ãg(yŗ"y~փ}k HK \mΞV.oSݙ=fBZE(OU3?ҌV&pWI: ](TmbX[ (V L84Љ["@m`ql+Vxt+ִb;P\ch |?#[jweEcYSz mњFBMp~mã!5ꮰMxtofi7m`}[ZR:4clu}~EҒ]?Orɒ™ʧ\;.|R(ht㶔V]JI ^o~F=#&:%'G*~Em'2@hqQ|xWQ=6m`2_ QOjXnɢvU@RJ͡`$eXNynlǧ{4B#>ܮ@3ҡEr(a὎}1(@*f< @Q 5wSBt2Ιl G11ǚI5r{3zgT]BgGsW( qw҈g6֠&/da5oo"\#8tk^j,G{eHdegVM+.Y7r6maHRR/'P^YԨ3 kC}g]7KW j87[`FoDQFf bq]/Ae?"ӔӘqE9#3 <—W|aʲ"^Hf]Jlj-W!>d vhGW#MsS$;GLU+ ˬGg,z嘮ɳXd#)@OL8fuG@lf̣(:W̝݅'w}B#53HjO-TXA3B~q7n#{~#zk1AXB9?4M 9a:N!b8C CyS`oJ e<slGңq؉wX~WxΝkHpGB+Sbbs'\%j miSfXR}$ 3Ejn4&Yww@"-P0ԡ!)J/.QF`=0wD~^i!Wfy^7|{I=BcV>r+,,{I|'j4h\ئ+I&,FzAzӛ@UY܊Nx@`6$|}Hr r $D+WV*Fq؝Rf}'~G `o6/Gk{Jn4n(8ʉ7dWA$jZ*bLe&Ai fDRpO]_o&S)1JsHAk :;")AƯ]6 m!dTW(qj@>&;]=MŚ 3zq9!cLP"YwYHj:uGք B*_W >1kKI O[Nڗ"Lr @>,[[ zsFZp +@报'Uν<@yZӎK.eokUuBsC^:bC`薜[bx|C9zM̫"Ta ">M]a{cV:`Rw/. oD>FJwIo \ɗ ށ}a0ٰxy56oS垈I"24"35?5iX>V4xu?f?YtoX e[{>tK0 +S"o?:̟lh?v>0,eޠSBȈ-5R"e+'e!eofŴ xFIQICuÛ7t&h" 1M!^"FPXapM'*;&e+ۘۓUxgx4_v߶;:7v9 f&o*x\Oх`!ݙpiQ>Fyk㔺ZK#2T7:TH3[sl@&s"$$)U)J;ibd$ow9/W$JԸm(7gͧy}3]U=ِdIikxvGiF+4s*~ES&˜ Nd͟_F=kH?f)$E涼cTX:w_}*)`Gc9y$hkGRޖ;tp~yQv3h3 r!(y &źlo.2`7}v ?i*_Ӿ- ?R&CsB=@;& ݝ2R'_ۊ :*JPe4KQt3&BMXP敾|GQ'< %u6) vec9\I%lNk46qg8֑4I1 -w] ln SטU-:Qai8cFim^=O^AkuɃV_H,5Wqнg}0H#a-[J/5z Ik{HOJH.͝V/%ִB;2!@j2(qʎth%sO$uCAij|l!.QtHMrYGoeЄ'*jx%dz`*ax!j0`:!$x[Hķ'Hm`Zq4*$[DAHԘOd)PzZ `@ykױ`CR"bvLwMqrsgLG6~$H.MGPiK󑙭&]0"P0,Vw'7W@Hp$8'~qZ]1]fu>LNAM~b@tV,ٗ{+ Qqe4a:_G3pھ9f<^^h[x$X}ƺ} #C@}FNWz9Zg?A"K8 %{krU.%˨u!]m lpS&`[*@bxaK7)6'\׋@J.J́dfSyO , T7slaXi7Yw64hTVq.gNAk>c;\BEw,3<ivvqz6_)'g8Ud S k#\3[~1ShRnGujwjAN!4ixLr YF|R]=OR1n1qdݩ;dע#ŰiĽyH2} Z<61 uҙ<{ݘe(muL xZ^T2pt[3=)0 6Ʊf# zJY,9WuRP79\fv-dh ڰHA2JapUeׇek@+T.;3G~[#Je쯣*4n?E8plBfWK n |ݶdo&|cr4K͘Qdo2 j{. v%!tH&jj9Lӷ&n_nRDB@mIidd"|ȳ2F uqCfĶUdL'Sj:?a/kV_ %2E4*d4ZOb`6>@`1|-6OP}-ϗ6|MA؋!q͟ WRcnם~c#}Vā NJf^·I%5Kdb D.uH w.qkA*t6LN<QP3!"<9"N|HV."TMz !Ǯ}.+!pe2za$I' X5hxIO. g`6_r)Ie l `t`sߙ[3"/#bhS?f% HN)iԣGO0'3T@'FҚ<4/Bq p;c \/ݑUsۙ䡴E.XZ8d8//Vq{Fx3ț88\3Zzg_^ҥk,(Sn\a-gh&7,bqh^r"֨zi{FEO;w(n޸z\$RE#_8Uz mUЯ#(Et%)替 #AI3;G0!QTܞi6`>KcFhcӐ6^՛O asO?\ s<@^W T߭bqRhI]ϊhouC׿b/Sng=Sb ;Hx]K]E=PIAޯ#APA>6Oe"04R#[q1d! "OSx9MrzxDy1gF!b]w@I+/Tb΂>gF.Ij6LßyHgcRњ1&dh`Џd/.Xf$krpMݝqfO~mfy KW-qKoAU;gqjmO7n{Tg3sK6n<~!>[+QQQ̧(ΝO,|yGJoCcܶK"=o33a8 x7T85?g,ӥG TS6_8bNs7iט^>u('A,I J8]$@u֣>c fIN~XD$Y0y MVl'qN@3'v؊r9mZ%@bΛX"u-Yrԅ( nafSWdvw'N4vnk$S7)yABmdI×F-̃ mD?Ps;r6իwgZOC/|tZwY߯L٥+yIuj|TIEg`r4&#)$^1ĬrbZeMpZ%=]n#;Uɭ/d9p}xz xŤ7'B V|{7]e^-+G+%JݰFe9_+dFsuBl_~ WMx5@ lݦbO`Uu];"Gt0`vG`?f!nx4ɋuUsf eJ%V)ߝ~]Մp}D&$Ԏ_,~ә n=S֫fi!"',wiC:pyXXf/9f؍<ǝ0*u!W#J631StwN.7y*S>3Τj c,a T6\Uo y~- 蝭LQ+f0IK: e<<-3MaK Z C8ՆV2VLŽ{ (d?i$)_5w6KvH'y\* qQ Œv x2|ڮb"M#Ijns ]7w}s}->P h1aaAƴQp ,E!Nݛh31 ^}y{xf-HZ *dGoGLc-|m@ZZ6Ω^EhLP[w VZHZ^ efov] I1 pT {~mnK)lB4/'"ubYA:u2rbuseV(Ca֭pMP2U_l.ZULDc(uzkΐUO2Ͽ|FA5]UfK=[´Z(AѮ>nK+w%|V4<$!4W_yuS.fVIx=|q7e ou7G㯘{w+ Ᵽw5g 4 V7F)25ǐ''5ewx1Y'g9E(9rVT)/X! .9ڰbڃYږ+3kK9 2o0"_MNsDo kiVwŴ#r+ɩ9g{A4dT#ύIyd0fKoXCPuf֢D*r63.@ tbz #߁UyxB!TAoQQ"MFD %;2;ІS%?IxR@]UNd\,IY8g5bqNhu,d{_AwiI=k xO(r YbxV{cAk#> PT;)Ys ݛ_j蝟'N׳^]zX̶ RRp6>Ll/-+ƒRQ& B EM(I,,bV?$'>%FA@js>-2_qbJHVA) ?Z w-#dWQ>5.0,~5;I[0kɉ4dڨ_ExYŰ]LfSP^O92]"r hQ!BpS57h_։'mUQ1TxPSgPElHI cRaLB~^KL@rrYQ/~ʋ>%7B 4ܮ[{c+Q@1у, pFAqIGX 8UfIQr+יlF$nj",MXRo@ )^}/d-0A}j;n gkS @qIBjD |Cъjw&^|Ǎ;NdUyշV+B9CBEP/}Jx+|.w1,`K~qKm{DCחV4r%8zNT[о} sE8j SG+03L،j>B;շn/Y{$q9zcqX>ͷܑAk &ﳬ9[")&snq4 9A5u3gQDN)GT29u!R>c[Ϳ^)OE|a6,~ 7F0 &hrt>")4`|E@5j@VV\ &XkqVJ83Y3nj8M o5׌e ր{z%7CW_ "*d݈IQ'b Qh*E:O Tp'Ÿ0`('5 i\7>J6ˏCp|Qü'fKtzTцFa_?lE8]vA|vvu]K[Q~4Y\1g!bY^C0.A/nٞs<` ro ,ŵuv2 ݛ/0໽H)|I.v٩LR=,}"8?P_Rmk`JǗ\ 9ݙ  ow5ƯA JԙUG%4 <ΰN- vh7@ܹHb(j1\ggB*5Mh\pATzpcOыBA< [$ d Syv$j X<?R@;kq9ԜZu * P'o?01KF~^et0ZAxu&HS5a:ƋN6aZ<{m\V5m1ܸ){ @誱)|uM&^Fvj+F}Ah:K Zhβu0]; Jwaleߘ4 %MeS]2,EC0XC`L@LxzGT8 sc|{C%_ױ$uwI:B?/Y%BNyQ[&,ǥzZlz|p"eKb9L(AV&,RݸU:AS>(f e1pP!}>Τs^ LLg3ONqzmaï9)6}DDVt7Euq$]RtF_́}M};`6$[˜SŇyК&2xX!OM)e-+%#vae#4%(ObvZi%|b6}*j!B:6 [$– _zW3[F9UU :5Wwx ;ެ0p geW@sS6IXθ"f"p.I[ON~Q ƓdX  NjJ|.cиA¤^usF]}!6UB#{'Q^~gB|h,OYE "(v_)Gi -;,TNK}39T(d޿S4#ڥlHf%'wN0dɮص\0> _uEh=3J?!({A~֪"Fbf 1jewxM&n~ܜ(Du{O Z3<v_1S_3 J]ܵJydI_aq)h='txT NQ4F4sҮ68F6axqHkT^vgl~!*wܥj!6!j耞"^.i{(c}j0;@G/r dNE5 X-2E).⨐+9y9F$n ӲcZ;AzDhyR$f?LoǪEjέ &Fn|wh{= + ${Û BLϝBTΝ[53mCD¶{xOYw17rf`DBPLg5NQL$v? [0<.2dޘӔ6U٨e`D"UWId(- S%2L"mSa0!CXΊz-4GkU|tU;:Ӏ?h`Q'M\O $Df=`B j-aܚ|5[~-^ZK\[֝ϞR*pO'Y)>gM-VL?}]ݍx1OAuز]}_Xח Ko\㏉+(M#RTrNdR ( UL ngyq:&}(D .t<ʎ ps}FSa7:$Hƣ:aPH_ UΏS$1c%MiG}b||[̖j++'κs,5jnº_Y>{ApxW; 6DdAI"pG#eKP j~Nuoex̛&3]>˩ Md[/v\踞8ˊ(B/AUurSow֧ͣ'as F? %k Ò:<ժ @sҸ^ l鋞1]zt/H"gjiang@{ `pvfvZ\!-m)D~G=JQ|I(@Sa舐44<ߖ͝'ރx\(Tqk3vP_&AޤfGR۔+މބ [/n~^.y4iU+ If}~o.*dJ'Z_ ߡdF̢8j0aMd7M*0x9r*Pl+9=bQf@Ԙxr̭Q"[=SaKPlh| @ZIfHqs5G{q^ F{3ЯpvwB-::6@Ŷ$~(Qnkʃ+Iʾh:sD)cqiyԬF6}cԬύۢ0_ Գc ELO7mFôjMMs}%[9MDdic,Mw@#sWB\r.z.E^`'ň f鑐[:rX)g"|ڪS2rkmD71@#rP Ь>=J'쐷G9({v.'|*LL~cz0Z2BۅCzz-j_K_49 |y8<]hB]u@icQK)D(6==;T<4gQ:]=30&{oH7,p81H}=89b;W#T1 |6QOnų'sN9V/G36S0͐CL!mF겱Uieޠ?IU&r/3XLy^$DAlC"4l -D3 ՗T"ʢSj;w\v{XeZv#g&_tF[^:`pXgDQm3B_#V'ƹ"JQ!d%fLXemV : :3cU8nXAADsnYñQWt {\2lځ)W¢984]QIF;++8}mЮy!"[ѓIG0)-#t]ݠu~UqJuZaR"IбwϢ߂sK/Hњ @\]Y5JMWXYqr&mS001LHȎQOpa>u !?{IZFq$|񌧉I+HC:3R.4s߸Č}Qj?B§|h)r#0A=ʣD-Sbm:B/sj0 v-ݱϽCUmБ: ˞{/R% ]78$*8!kۇ<7tyy*d. Hn]gw,4\xi*ՄP@>u&e:' :RЌzD5id@M\VȅEEҢ8JY~8C:FN$@i0Imrxۉ\~DNC!\3ѱ]En̫U;9ᎅo}JMt[{p!1tרּW 9(ZX8.T6/vF "ӱTT iiWw 8*U;:˥,9Mُjj~&E3Y:q#v~VP4rAc;DN}|%gHr3vdBo}Wa ))uplo^=1L5m4y eJ%4m; eAaݠۍ.o.(eZks|U)ثX"O 3JӦ7QI ؛:~> %lT;x)#ցa9Jm?t!O$XIg?"Bه>g̷ i(.F:8 %g\al܁zp͢"2d.r|"Fu$-C/ϪJDL1c}Y|SY8L,;Rc8R>)4).&@ jA+eH=l,@#* uQXx:'K·< wR&K7͔XWw%&|pz;Iq-BcciR8MjEFla.Nb^F=Ǡka ]rɎZ.Cה.gMExF;IWRQ^}!4k`! Z/jgx1Uj0in22ML1O.Sk2i:_9ryq3>مnɮˢb[vtn2_*J?;5+S޲_J M({/G:Ru!s kƜ>q-Ҧ< DE En|#_"u `GC>ּU{q]fДӍz5Cu'\!nI}Ԉ&?E ] ZuТusbX6?HPzC43>@U7cGF|N޿S$s3w,+ M)3kLun_Er2' EmY&ClCnEZ\R@7um-|*ƠߩvR5{bnE2Q#%aS>!w=D|=ٿ$&]r%4?ey̘+3?QLJKo)dx8k^kM-mRJ~*e9.5Z@HN Ox'`1n}|gisrfԊ|AjlNp,h,ghfc|N<Fo9fbMzE=>8cz1Rn?o>Roi%;# 7I,60,5V$I0!j!*EGg! 7] H E#ɽ.|,0VzӮC'\<ZX"}CtOC4rdG }px<|q Ȟ%靌`A@\S]5mJnК;(5wpT#p/7]$<&»U"! &I]LHY܏0 }M'.fEr<7ޚf9rLiODKMN_#+86r?-V{%lok1 [ V#j4 t*Ju bg.9 _~K{ՠ]g imݳ]EJdz͆X,F&w]% `C!D,e<%P7ftBg–ha$3F \W,RV T݈յZoHM:1(p/A"2ICiY)ǁw'R^!$K-!Tq&;SBM:Gэc:aue×ɛ =u*u(iw3] ЊSF319ec#kz.CFl&Ffw9 i+y+ww\gQզJm-YgN70Y7X۽.HuhwZN1آעP=B$GJ$\7Β~Tew WPЉceDͼDQ2jF,C mA ˜m"6l=xR wް)Rx6} V̍7S=?/gnҷ͋ c|׹9JzJ`u .$&tÙJ - #] T;Plinth-0.8.1/static/themes/default/css/000077500000000000000000000000001266051671100177535ustar00rootroot00000000000000Plinth-0.8.1/static/themes/default/css/plinth.css000066400000000000000000000015531266051671100217670ustar00rootroot00000000000000body { padding-top: 70px; } .nav .glyphicon, .sidebar .glyphicon { margin-right: 4px; } .navbar-brand img { float: left; margin-top: -14px; padding: 8px; } .nav-tabs { margin-bottom: 20px; } .running-status-parent { display: inline-block; } .running-status { border-radius: 50%; border: 1px solid black; width: 8px; height: 8px; display: inline-block; } .running-status.active { background-color: rgb(0, 167, 0); } .running-status.inactive { background-color: rgb(228, 66, 66); } .form-diagnostics-button { display: inline-block; } /* Hide log out button if user dropdown is available */ .js #logout-nojs { display: none; } /* Hide the dropdown icon when javascript is not available */ .no-js .nav .dropdown .caret { display: none; } .diagnostics-results .diagnostics-result { width: 60px; } Plinth-0.8.1/static/themes/default/img/000077500000000000000000000000001266051671100177375ustar00rootroot00000000000000Plinth-0.8.1/static/themes/default/img/FreedomBox-logo-grayscale-negative.png000066400000000000000000001434571266051671100272230ustar00rootroot00000000000000PNG  IHDR[csRGBbKGD pHYs B(xtIME 3e IDATxylg]'O'ޝ*I@#"0ʠ2.:qTFgAdQE|1HM keM ˽uz&I}ܾS+>˷9]z9S^/ppw(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(Jt7N%9?I+RLMMu${^_T5$L$z}VQ5`z*}뒴Z [IpK阚mw$IO򙩩$9&Y=yL/| KI.JsQ׻ϭ$gƲ܍$zy}nVy ip I1<>W|/饶=/I>\p^!uM7-&yhGzG$'~/a>Hru+9s!pNN'$,;_?/wn#ɇ|ؿ PC7t|I~ߗg[9ɛ[罂i߯ >|bG^m:I>855$W%yoxNI.r,\?!n$/OVuW=HÇ?:;A7ff-ۓ%[?O{o>##<*Yn7Jպ+&ÇyIx_5sԾ>䪩$;`nvKrɶ0$[֚V~T%I3Ios^w?iw-|e$$lX67eCjZ\wD~|WgYwDHR[n u>z펖Mdeee*MMMBNк6@v$zm+=`z뭗$yJ{Jrlns=n\%p rfW& ~s%yO?Is=Zdz}<-;3L~i-?oҒ`2 `'>mI^=;. n$ON$ߘ1az-t &p[YY9#}M,MMMAWs9ҀqtȑzgG\ Kn#t %p[YY$?{f6w$*˓sVّ#Gd3mnMvCY who(wMkpm7eg鞗s9:9reY2)I;a@oZ L;4EI>zI* 9眫F`T9rV&yV:h K`2VVV%yWGoVcI~=ɫ> ѣGII~O0}o2@+++Nz?䷓g}V ѣG'|DP^_Ov}V &pYYY4Gyқ}l&yU_??%=z1I~2ɿLr'(͇ oOZ0+++䟟o:S/ɕSSS/\^^k-WӹG{Jv:L.uh\whoJ]o8H&y J9;%^wj$v84bee$L]om}ݐ䷒tyyV8^$?ߦ}hx*4beeI7~72ɋպau:YI='Ϟp%Z64Jt%KryOu:* {TUN$_[%'xxee2I pן]J}!IVUՇzrUUS*UUtUU?:#j4&Q)4Ij⅙Myfgɠ<4KUUgUUCHehOgGJpj^}UUox;t3\wG5 pvoy0殿ũ9v hG'w>F9`QU&d'hc0}lqz4CH'ccuu-_PoSOM򉩩?Jr?U70wSzь%7>ԫ|$k<@E&W_g*4P^{H?\]]*譮>|uu]I^ w+g&>x{p c*ӓ\Souu^I.SNJ"pw$kkkOTCkkkNr]}09oN 8ammʵ ڷ%DdCa"Y-k $[[[e]Y[[tmm-I^~Fc믟J2$?ڵg}`mmܵL$S$p ^SI^kkkUӳN$=9c /=*QcÓ}}קpz9&9w}BcoMf;=l?Z9קC'y #pwPW%y{6g}}$䷒,*ʻ@`Ǯ1v 'm}}%$Z__p%y~sZkI2@`MMMMTJryollXqh}}yI> 3{$_.۴h;%Y/O捍Wlll,)M$JsIRkp(v.4\%yJ0?6664Əgg Ky\˳L+4a&yOmllx!i{nll)ɋLu[j*4: YI~%;K9gǞO$: +wm@ 5I>_sLoIQTemll$W&v%f7pLrImLSBܳbaT$ 677CIzF: oUFInss󻕂uuzaZvI2ecތZMj'ɇUbswsnLvsIޔեmk(CYv@J(Of֮NSI~~n;IaZܒOdzutfCI^v˫Snw*ɫ|8:ZxER@jm$q8Ip]Q$vߪ|Gګ\ $ @"pI$ҕjwHj]v0Oհ M{r\jI;LVu]Tb0-_=n޸}/n|Wv3}Cp_ /; `+B ݗ'yW/MrEvqoJfe$pI:Пj$=Ŏzޛ,4VuW&XNIquo}_S,hrP>_G7c.^IiBVu2oN Op_}2t/zO.N&aзrN zm^'kZITz0}ajכN4T%ގ&5c~ޖF$ < WI޸=C.W%5ީG $yS;c҃aguk@H:݇gzzzkzz?ɫq,4ZOFiZI2aVhghI]:toј^$%~Dxo4dwux LpPeےFwzz]|ߓQI M9wzC/*YČ擸*ɃbzzZ/wLOO~׻8ɯŵ7jZ$I:MYǥZ^?$oFjff?%y`+N=Q,'JMl5}3nG8}-szޥO|k'&vm}^/}8 ;pÄ=nl|vk/%dff333]]x|̼)W'yvjk`shc}8ui0)1p|gffnaff333^|R9z*p*w.Vk3էm{cO虙i433g$yTF>7Gʌx^+Y>333R 0;;{u˒|oujusE{'(BސٟYU2;;ۛ$$$A:Aa[`i SzI^`$d~뚓mvvv}vvg|U?҄a57 IDAT:xiZ}$D f:&yVξEx8;;^I>aqC_jmeD!8/0`jTlI~/%/5]u$$Gخ}iB ~;pZwdGu}^ᳳ?<;;{.^677I.N;Intۯ4㼜8g1;p2}nف꾖t5ړsIknn1sssʳsss$Kqoo9{"pNfbfMAL$]>:77IuLkOíVv 8;p2IQ'i)!Wd'h ݍ4W&$%{Sx7s}߬VڠVjӽn${gr K$[o4=k6_ӗ( [3$'y;t-i~~sOK$W0: sGpD| MqnvnK$Ͽt~~nj;<"%vFO w`7N'!0$rU݉:c~~e^$/·BOy LJseeF{n~HoF7: J$5̾R\w`77$kF0}0XzIru§ےcf['jnKr㨎?)6a쳗UI.YXXx|Wa,,,!ɥI~:j}ify<pL@f,I˶Ou ߷p8[XX^XXxAK2;&1oBy3=Ҙu';VqOa59[`meeWQ~}v<+ɃJWdqq=>'GѯG{n9`X Aqf_w$yY_hf'`ii-I'?ic>SS!;l߬>^=w&y-..ޤn[ZZ$'~~C8@_ZmIny=չ7$XZZzᥥoH]^M0p_"pNg߳ ӺyE\ZZ XZZ$H|U1)Ad}8[>?KKKOYZZ -//o.//Bv+WnH28'㾬LsDTx$=lii5 gI>2qoft C:/+ӤNq-%$///tyyvMkyyyMt\Zֶ C8Y[OhPG>OI&'ǻ!~sJJ-AT-/nVzAmߣB=zt.O'yv3O՗#]nb~ 9 s鰺A総k9KӅz9zw%yA/+9L!_@IrGjݨQrt:C{Ãݐkb;7kjzIn=~(mpt:t:zWganA]pf;7'9ŌQJ#pt:g%$?dyӔ#X]ME}MF|wN$w}d{1Y~u>&0DN$/Lj?c -Q# wopⴡ5ڇ{{o_{ӹoNs_;NI>}&@^ kMX#xP׼Gp ɓ\t{UU =Lu:Ormg'94ovPkcIow:ZKm |(tzVU}UUM:Σ/$wMǧQ#<@^ &p(o~zW&۪F:Ϋ'#GX#_TvZ=/;Z}¥Bϒ2';G%yoUU>Lw:$tI25` ƚcpKMMYS}\O(Ag$ߗڪSUմ.t:OJrM_NPjlò3Y}nw؋~2 q bq_NxMUUO-hNsiӹ*ɟ'oǫ:op&z{qcR{5.K3pl7ɟWU֪.=hNsNyq'}3ᛶ<̀js8v3rsEp?|SCht:'.ɏ&Ǩƈaug >"paL (fk2k0zlP$9oP}s }{uCҜzCSتꢪzoKAI5}{l^ ;}{^ ѣg&9;vNwNUUsI~&ɳ{~n]ob0?<D]Cy s'?/~jOuPUw%yA/OX< a8|h }{5Vø<~pwBUUM$_g[Ocay@] lKJ7˽xm/8ܩ.HKIcϰc>{i]M6l8~st)zV`r\˶u]w{ubTGmL}~f$UUuyUUgZVU|4 ,dlAi;;ow`j@zFԠ d?yPK|^PUUU!ɕIp|;nB>ŘZñWثv4}t۞fp9~r2J򶪪O7c?ZI>%Ɣqj?l} /;'v$_ƱF:ʻl_,p?9;$'{"w$dUUϫjNc/\9ao;ʰ67;Џ`Vs8E9X3I~.ɧzƩTUIޗI}b[s^: ~\;4#Z.f/p?N8C}^uaWWUqZUU*ɻ_L,\'{ IuV?ϱ.K򁪪^^U=uVUtUU9;a$KdV{]jzm{IDX}([g.82}g$yFw~'e'$'k\Bf?7Gnl^}8e2555}^۱9rd.~ u-~K(7熼H]}t@?1Vvny { [*d迏}AI}},orTUuN&|, X7u)}I%e=k۷'ԩiow>ݮ4=6_UUgVUuyhdva{}~ #Pϣ_0}^ WUc|(K[%dܿza  Яӆ\s{snj<]8R石L{%^ W^}PA~qtA?טaK3I] 1ʠ ?;)a^!u8K}zqA{CphIN:XUU}EUU3zmTU$N_"l81cr}^w%pI6KpԡM]d,2r=Ng6~ SUU}n[UU=w&yu lḳcO&pr>mG8G.?sh?~uV?{˳k.JrEUUoAzhTUuϪ^I~5 ݱ{al"pLHCa"-y# Պ-)s;ѣ{]|YI>TUK:OΪYIM̓( j˽ h;Asg/P׾k}O3\亪~*bcI^dymv(&%l1vw$ ؏8uZAޞCaf#ϒ2'sN'pUUߤ;UUUU1ɕI׼d~Й^Na$} /pCJǻ䇝6[wZ0w;= Kʜ̥IZU몪n}0UU-VU$e$[Rl˖-B %6`aa1\Ć@ {11BH ! =6ClLh,if/SMؖrU]y|i=oK׷N fOs]v~1&WX7z^?2ͽ~gC^vMˬL{ܧ <֌$tҿtU\tiҥKߘtdO##D Y/c p&])qzD?:r䪽moW&$[.].\t%nc]^Wv5S'y+(ALjـ]myvP맦+13};`nȾ<֥Kntk%g1}xM-H]Xz}l+`BoMr)UUeiiiz,dfUNv1ձ9Vdbp&>wvL3s15^cq֑m@0WUEa{m.gf^W8PD!2ӽ~mw*ʔۑ1^;M_=_W%i,A#lO{t;0_Iff4tP?KUU];92u [~~$H꺮Jmj: }"p&LI5s}׏M#7J@}Mwۘ0Ы̝~yQI^}*j24M?anOz% i=*P.!MJG WFh0MGݠ~IWW&dۥgOxo˥gꞩ>cT0;0+ -)S|(Aj]cl+SX3AƬ^~Xl/ɥ:.{}f/,PJ{__t ;j),̴cUUpam]}Y㖔YII_?ɻTgiE ۻrB98;PcBy)9i-f#p2|:pqS#$pINE:ɩ$ߛq%Bh{Cgvï=(M[I^ZvCH gS9dH3X}*&yw~.~~I^7Xg~J[]_Tk}tLƣZ{(OL,ΰtM-|XUAJp41kŏ_Tױ$Gm_~i~g-N~x[o닪rI^ A$"p~Pp\((?b\x)IigIu߿ /H d)"}7u2? pzl1kex}x`KLO2er3<ɷ%9_h_Ox'^7kmZT׷|P ;PiRkfc5DjrڷY{z<bz]IQN}\Rf0t |bh$/)}.VUgUU=wı4~w5hY]}8ɏxZuh}+ܻ8m2%ejIigQRfP\ꢻxŋQ#]) =l{ejsiNw^$?tMZꥪp?Is*)3E[zR tŧ'$?亮 Q߅Y[N@@3}(3;XRČޝ WFl0^GE`G޿<ŋoxk%gvolMɠ5>3^gnw^wos}2fEj'/^, NbŋW^xl%$Km^M]ڧn5ls쇼B 4A&ySӝv-\j:t߷ȋּJ}8ASL=v~g'yw6.`-O}zz{^@@-z^$Рr.9pLO8A4' I7y-7y;ެ,hC^^W<zw'a׾؁3]\3_qՆ)v,G8έSW{I^i 4IM{ tޫ3c|H;+Υ"5 Y|vȱX1E^O{ޭ@@zރI^%ZݱkO#z x+<~a!ar-hEªm,!~#= z?NþߕpұL*5M#)P_diӠ2 އY8lZM.-ܫO'D%p^_ ,ir1NZ4uPt28 ~Ir,^uBd>%dڦR2K^ A4InM{햇l;U J kg̀rze}d{h*d/~[4MuۿhhLHLrD{Bk1RI1wo_P?UJtqqUa{peO[MwQ^$_AZ3 +RK-:q>69}Krӵ7]_$) ^5 IDATM4a/MA߯;m>C,OOU~Lj] k^g~}MI&pZސyI>0usd ݇}OUe_[lSx1^XIzhm#l/~$zd@1sڶ-t/TbXpZr98.6+{ę!^ Aa1Ƶ20kUXP>еv]I>I th]{s/NriVGx>Z ' ] 4^-V}~F:ԋju:v\l k&^'(5wz%$^AP볗~=,'yJG*)S d]a+%^dc9 K_"hװq_I^/<9.ޚ3 ' 5 3[ ]\\Z]ܦJI^> t^w[K7O{C mx80(׎ծ_Mj֬9IŽ^_z*&p:}(fT̔j Ǟ~H{ϣm?VSDzz] ڧg>26^$;Y^]bM>X sUreZ#,2A{vX82>Ks$rⴍhkA:ªMi7|_gzs]V@gC8ýD#3)oMSۈǮt_61FSާߐ/zP5w`&zW'L$ռg)x:ýĘghӝ1Oj{mdmCZB;M3R$_f^^w|RTUqiKKJ  +<9P|$aaDzkWxM3w^!w$Yzi2;0sz޻z'Y'3ªs(aZRPCڹoS(G:|-VgÎ,ª˿ I9ɉ^z=Y'pfV׻ݪnLI9vP*P07 )wXhZ_UJ |SgE@W-jS5ׇzUU_{Ϫ̓+`z{,.\iI^k\7l4I$l;q>WWW%iǡ55l8}>poj}~03:5I^=z'0\9zۓ… /IYI>7%$},Sn;QIacH Who} p Kr 6]fiH~&ɛ9ɛ=z Xw`.=z$s.\^ݓ4_ pcI fOU}k{ggQ'>Kic{8ɟd;\s7=zNO"` p*ɻv^$.\$WUէ/--Or,$׌fav䳴'&r2+c#_ES K8ͅX\` @*ɝISU{/5rѾ' X`G=;_۟w>7S}m˯R/#!uz?2h{w)JM—i3Xoj0}m$oK}_p zz 'pn'yWo$?ݏ$>Ix!P_2V gw%XorLO!=nᆋ!8Ό_Na&y۽JgWYٻ㬪jX@]:iq *O3bCݤclLc*%ښvV{ed'y߾"p8'9y؋j&voZG; hYٝ G='ZkZ:/fm4 %.p$ɗM[>bXRsyWg&M]k_> .|'C\pUU$۶QbfH#S25yd ]Z4u&gw5h0$p…=F#p… 'ebv#<*8ʀˑKL9K3WgiM]} ۼLuIÅ d8` .\|Z辻+Ss#` Qc _Wi=[='pxJVUpFT!c9,^t?4{LBm/Zg%m{M.\  p3dg,DUU)M2$kmT ߿ دd##2mchY l.\x'pw.\8䧓,fգf, =B_C ~[>(To;\<nj5I~`8;G4'6Čry睗g;,Qg21+)3qbek QMt꽷?lu.\ ?~- v tg¡cw33a}!_#:J?+aǩ~^[ڧٶ:%pʪ7Ɇme#nFry_uAyL@}wIruP?u MRA{{G[gl$.  _ 4YQָ{q a0E~=1iC2+=EM,Irlx"~SeAȳ -fdIf-z?d/B Hн;mLh ))3JfOo#,.ڕ2 ܻ8k]}ڻp?qK!"pۏ%Y:Em̄y$8뮻.Kq۝byPz_ܕm^ ϗƯokbfKRmw`!? <}׷U}w,Q,$aF59B:(#^>`Npb>yQ95[ϼܹsxUUM4M;i\#TLWK?&^u{)ɵ7E`]k>GktS,$ߓ@,s=;M,lǔ)d)XI`þ~u|VQWt6s] ,:;F}Ck ܇SgÂՆiXvB!{W+!3h$y B9w&7mhjpyO{5G ܛ_G?] ;s]I,2;hnoLLCaw$Oy<g7?ve_pmr>=T56ɋ>A"1X_?m.:)])Ac[N;qIX9K3lIE@a_G?][\#>>=~E#pm$m-i2 p踼J͡}X)=2QƦA{kZl p$WFw\4``m0u !cHK]w5ܔiN|]}v{n1,;0o Fh}[SQ{}ϮQbu86~fgkv5hokV^k<E"pmv"꺗~6)|Sඟtm}(<A۵٧5 {Z 9ȡ3k/4;su`}s6ۮ>v_q,+`zdciiim$ns}czv됯c~rw^5FI>+w] λ8wgUO%`QydDp>Mh^0x_-Πkw2I: <[DMbr4]ig>[o}ҍ7^&`))̫g :vꚽ%e駪t%Wj/_3yGc XJs[o=dmzmRefJ㑒25=eO(?+D%e Sg_i~| vz w`=k7,PbRm:{<{_hSWM`6:R[_Xny<Ṇg-tLodȿ,~@c[Xd{m_D^=y'pѳFyQ۳ջlo9#g6NR^|kmcsO w`z'%jw.{wE&ucud翵{H~w\HMu;5ý !zWX]h37Ϛd.)Y#y}C}]RfB{ca$}ihruSrF뜪~-5?sOM&]bzfnk6o(אW&춱Z.{ovW%9䔧0pͱdPhDsv 0H LOOuV3kq}133yslql6x MUU-w}1%egBm.hB=13;0oCۡ{RfACh{o$OܻO ,)v:Z^A.3&p-$iBuWڨ^9 M83 c>:Jzl+p'9mv/FAm#30oewquՕpt1h/NaiY'pɱ^0m螤3efJSkkИ>>g|ml9M(h> 0.s9rlUUTTk%eX{@I}-{d?~6Kж7r-3/8a;0Oy^:Ǯ5pϮAdX]ۇ.h/V ^=Y<ظL[Wkug5x!-+-:AoUǴs}u-h)1w`N QUՍ]^g^Qg3o+<~Xq-WsnS%p-l축țd~wk3b})ٵp{[n>m8+`^ fm.vb9'|͑}^]kt^cq.SL9%pR+ݧُv]q$fu8]X1k>mP/8\kL _S#p9fM޵puBm9s3ڨl>&^4uX8d\mp_jQ5Am[w`!]bT61e?+ylH]l\{,|IY)8ŶsK,y^G{uyP?u}C8q^V|n+xsO`^ y2TBٻ6۽6]Wx%h&udM s\jml+pUUݕWefjsPuAG%e23ܻRoqt5h/N'Iگ;>gqL8 .<1ɕ5u-:!{v;{<y%p#!δr1%:$kؖL,)ӵ` 'ھJr0Rޅ ڋm 0<(13{)093Y{ա~2Sc2u-h/ vC̋'NܗDԅ6loPM{l9\^N33Ηh\[^w%/V{\^`T8loXm2nt{Bqw11;0oF=ٕ7a}70K'ϟ*bm{~!{~h;0pXaNZ겗¤]XtPWh,Mp])8+3ڧlC5;0o& s Ku,X"]e15:ýZ;2.ښTUuc gw`TUIRݧml~k1up.\Km(?'O|ȓ gw`޼.--M\ DY K{X_M7X^ZZZˁz+h<ygT`?)SKhou=JM;L\mXw߮h/ξ6N&g00p{Y IDATX~}7PRW7XJs4L.;sxx9*)_|45.)m, ;0ޚI:vm#~^ݶvl{udW&y]d/ f9d/nK3, %eSWG}}ZȥUꢩrReP.l~б,&9 j(<{te:n,Y?,p.?7tqfI㮳9 ړO<GPRg$׍Q.KYZcw6~;gv:[Eb;0N pBf!h/u$,;^JYfVt!~.gzOvb?] _{kkk&yV~qosAcx,_cp۸nAd$pE^WWg dօ8fMξi$ ~=ɟ%ߨ*KKKSwA{M g7"$w, [49=pN,&y٤.܂xzg}I^*'kҍg,L,aa|6Ă]kv+ YXTO~jij5d]~n>/u/\6$O;N>$_[*@N߭>~FKɇpQokX'io4ئ Q~jBm,Ȣs94˞WUgTU'~Q][Zm&pI7)tBm?$ߕ$ǎHo_хsgឱI^)hwI޾h3^رcرc5]z g!hhw`᭯?ے<*Q}AcI~z߿4ɥy.M_O]oh9 IgJcO9 $~ررcw&3C9䘚Z>E{r<ࣾ#ɻ}tP6/v9Eݱc~d?gx7=YGlq0`|e{,M?.ÂbvJfgw=ALÞ X__$jV>K%^ kܗ=vءP;vMI^>{Fݑ r1$p)>}uIfVCmž;I>رc-r}?Oru,mSZn$_~p[lfB}@UU/5lOcǎQUՋ&@/l`el7~ p8l܍?$?5+m;tI~S`4w!8wLm"0!?~Sl<.m\sk$_'hX__$f;MW9 ߑ=" <0b@&wzNpoMk4Pw1POǏ?8mCǏ%7$Nw=jcL3p?x8׬`<wC?o&yӴm5bv=xǏTcǏI^sco[__O`}}z?.^{A.?(nh/?~xa/&=v]U?[__>dt)Zlmm}L,--(R?~W>^g?~#u=yIޞqm/;kSN093ưqg/fԵ9y:O#|uIr;7hY]`:fL`kkSܔI=3ޕ8~[<ĉٳJߒ<~^h>41:qS/ ww)?&$%5pUSpH{Rlgٳ_ד\9KYKCA{]y |Lnkk듒fC M3c]IuĉSmt~eT.~>=Wmllĉ Ξ=7B˻vYɱ58}666r(E0%I>m]sߌ䯝8q⏺p<Ξ=$?3+9!dO򒍍 JuuK4{$yU}g6rО$ߵ#5}lCYmۡ}KO8qSٳߞ'\6aB1(ɷnllwj?Oں<ɿN#@6g;䯟8q]ٳgIyL־5}/ 766~ wzlmm0O%j <$_yfa7|'dڼml48 Pzlll&g%y(ꑯ4(}5"sf%lO'O;g'y.SM^c7I>[3j$L cЬ>YN'OY=7o+$/vKSc'y/h3[[[ߘ讅 I'Oi͛o[d.k}+%d ;@s>)/%[#$_z[ܼ曟?&Yi.~.izL{ug*wfmmm]䇒|{˧a%_j ɓso$J ٓ$/DЎvSPB>K ϓ'O"7| ]Im- \$?;766gkklt$O*^KA-x:?eIɓH7$H򕃾?˟#{~ߙ[766N СwmmmM%y~Z g9$kmm|n9s˒2m~橡&$?awOntsdck9$<ɏ}Y9s)I~<ߚ3ɷmlluVtc%IVj!wG7%S:s$$'4.|y H666~Ymwzb=N8~7w3g\I;ZwKcyG^Uկmnn0Ttoy)3m$3&?4>}_KI~kssag |̙SN}YG[!q}}gCw>}z=e;|?tm~O:ɫ777sL0N:)KKKI$HK=jd;diz>}d;|Դp˟s[U$}ssw`1ĩS߿$ :]6[v~w}}t+|VzFNG>Ӽw777?X<w)ISv>1Ztp$oGݛ_;gQ'G>\L'IwdYضuy$~MԁH InMr[w%y?Y^Iܸ֒u]5x8ظ; wlWf;8hkE>~ݖC6cW&|41%$I.b/={{ܱ PeLO; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@;pC sԩ$I>~$W:fxߛIWyYPy$WOyVLI,ɿ| LyZO$^5>ޝw߿TU>h\!/'$9ܭI~ssM/O54_%yw9˒$?qH>vJ6<<C|qIuT$߼sDϚ&_t1MKI~#hLwCwX;_I>ussC03|5wOw1M nKI;,*;,Ƈ˓͏8IedI~dssw ESammm`iiGs4&y[[[OxC0kH'p{_ _䋷ޚ(.s`>mmm/I~)?%`}CШN֭Wlmm]p0g3;c!>!3c,ɋ{kk枒20GN>}ү%,GMKKK{sC8}&u 0p9qOOnZJI~W9#;́ӧOE7'9h$7>}Z]wN3̙3ߵCٞ- !>3>s̗}`^3̙3__F̞g&3g7{'WU7~s3[ӳIv@A"bA}QTWP UGlgAH v lIdv6q'>1r̝Wy9gsϹwM!I&ܥ*uoKH$Ibα$I%e*t}5DQt9FCl $i\Ac&諾6$9]NM I$w\ATLKU[hK p I$M Iv&ܥf`k6$ITVw} jR(z-:-6$M$Krl$ IVpˀE6C0s=m I$)H3ܥz [sϿ$IױXd7H wJXbFEiZAxɕҟkO]m˖-nϓqIMܿlٲTB`_  VMp$U)RhpƀW,[lаH$IoٲeWX-qN׊+:-[md$IƄT=pg.[PH$IkٲekWXqp93p$URr2ہwvuucjʕ+g󀹥Ϝ{ NWWST'7/3^loT,aݥ*ᮮ1[vB1M,ΟΟmݲw=v΋uuumu toUr|%Rs?`.vuu>941˖-+W<l**+fM`8SR|16=T%k]]]42u_3)SKÀ ~𦮮理VA`ہ{/=!cVJx<0#"wĠm]]][l(h Ik7/9p#%W\tsWAl`-]]]Ua?<*| X5@ځdlV3g]]]R 6ɱ{%[7oVo]W 宮'V}wWWUV].`9pˎ>MV\94~ϜWmJ_m`2ut^JDŽT=?ijBؿkM)Ljg$e X!@&mkڼa@cj'}w| bNq8xt*ln)7wuuf1h ~ijm=p#~]]]t +Wf Ug3]]])ϳӁw%<fm IDATo$~o^ t~LNcxjʕ{3I~ Iۡ$}wɼezImNi|eq~sX\p(]]bkC'<,&ه,;ozpDwww𛦾<[pZ8Ikn L|x]m^ 2) =ě]Y>_P_zہ+/tvv|o%y*@cG~-@e\46l!^˝w_8].dQǀ> |}xl p ΪO7sBZٹ:e7p*񃪆k#p)pNgg_˕\L/ί/<4drZD8JpvWCwvv2[|οNOdg=;;;; Pb`* 3pXoN&~^U=p57O;LOwwwM93@z⇅WUěVfX 2sl|8aB:LO.#.GK@TtW_tvv}!{NowwL{P}{.U7M yqyFYKu}7~G' x|c1^E}xݗguvvQ7̓ 33)WDfgghǡZ;dqĉ0v,7\ ʘC='W[\vww/^]V_<ݝ{)YUV2UKoxw,*[ń˙^,~N2pg#j̰ PW׈TtwwFA1ШY&rxĉۻ~la~wwěཏJlOz[zSMq>x tLftwwx) dκ\www%Y= 1ݗxO{.g$_OJ;k>4STa$ܻgvwwx QR(=dLDgg={RYww܀bl)`NHJ(*qYr|(Nz^k}D|bj3;[.]U'GQ`I a.9Y|KVAGQt%\#&(]:kQ^Zti^%ό 7{p.|>ҥK1p~EGxl>ҥKgdo*Pl2/;T羅G.]zBMSCzpy>ҥK8> <1tҥÎBRpzl"p [#pi>f>oLy,Nn;{|>tp8[ dΞܞO X _WgLNDez|Q2W[V^^<XZ{ě{v4rWf?Ru1.8=|>m:z4m|)CK>xY56||~f c&Ց/s ѡ7+|Wi?\Du|>q'7F7q})J}*PfO1!_x,-]t  i|ie,]?RuqI TltŦ(L %{zzzf}L ܰ%K\X_ZRa:0|8%K {_譎{Ӹ^ s%Kn,oj{.*%===[dɟa0-sĒ%K(c?s`|Ub| ybEߥ6iOy%Kn,]枞Oo>{dɒMe_W .qFS~ \Fm%7z}?+پC=p~OOgS0;;qES/볿ڞP eOOϜ X=R+ K,Xq5ކG73 _'G^ dz8qɒ%cvMpɮ===JGZ 9iV===-Y3=%R3N-%^B===C%8.陱S_]@j煞n.6_cz # cepyOO&K,FL? Tn)7-Y.)U'lӁW/^|MB{{{ۣ(N>%i_c/^-p, z{{[(9ZwU.^8dXEgvEQ+15vxnRsv__q~~iktC 8?4/Xdɽ O\xE/Ү(U/gK}p-of?}l8d1^+6}jƨ=7xXmɘ愿wM;np3l8 UÜqch(l}X]W'e(sh{'q ;Ru3.I yv-3yooo l?蜘]mS\6n=~ooӄEk1>цn_@ѷ/^Oe o#{2&Sn? XU)9y6ŋ2R5Q꫱IM}}}Q]G㾾gvttl-W!}}}6#:ގ1QE3R]QlKsDCȄKoNڭ"a(>U (q}8q{%'/^u ;f&;'M:\vR3.I{ys31u^o7X '^x>0XH!XsM򾾾cOT߬bb+2v__ߞTƻ8C__ߓϧ*c߀A`M鳺_P)w)PIo뻦 ^"88x)J  | )hq~4磝?ʯL𑾾k;::&PGGo&2)g h$p$M^V#^ZƎȞY|:r ;::֖F,*ϵK\16."~q4pγ*MnYDm/GxFox~14~4x]/SM^r@5?ޟp=,1l'~(\.w>8xPFe\nu±x ہ;W7r-L܎3xx47˭B<^zo> XzYH4h]ir59s\{*'Q=rC[t8$cq]juՕNˁCs >dzsܶ)ɥ_c9:]3diUV}ơ&]/R0\B$܇`Cv,Ź\qѫ(k;sܦcRb"Ta3 %TKkWr&gI\.ayYq`;[rx qRH`Vj']g;p>2#˝йq&}帎[jac\.wE-)=*=mpsVZPg3prO̰ $BX>nDeI|v\.x&2!eժUSNؔnnNT<++s;:É%*p.^8K{]J7/looO| rE<ۯUX.I7#ۯB8ߊ)8x]Q7xK%e*_%eTy o xk{{-e%T~I1s߾,PطN P`Q{{{aV~|q4(b}%^</.GcTop}{{T@׀*'Yooڹɾk75‡?Sc{:p]cyL{{?uL\pR Rě>6p=Kӽd9]ٗpKJS2L ϤM @|>t3ěe\N$I}hoo￈0? L:߿-HWYs S|Se>'o+W//'嚅NdN2_ J0>xwՎ_?T//%SCmxWˈ5(Ol,$|}#pvp&UOkkk뮑x][[5(!¯##0000p $QIֶBcY[Ye.MO 4綵8߮(!̛緵]cmoo_700!⍴C8 l1 mmmcelT 緵]蛄K 5KyEbg_qo``\JQT<:00p<񆶳6a׻ 67M4,.;ˁ1^raf|mSʙJ+.z`jKCL>B-1X\D&J6 Emmm!6:_@d2̮q~+e m[[vO?ܟ/>#S~ `xTr~^Ƀlkkb6~&ﺶ _TA>"`{|֖ЪqꦶU>ضS޶[*mmm-rت)400P΍CnkkP-WUog7W=eoԗ&W46W/omm} }6 Z`y `@76ߛ`+PoR&`KEl &#rQ]NY;[[['XP ϶!`x0K& ommx| TT`:6z%/NkmmMlO(ti6@Qkmm]7/jkk>88xp롒^ں^.i::pppn^ں%͕'^ܮimmMfiNuuG<;881½4^FqZ; &3ӇC6z)A/lmm h78f-_5鿁w>0 ?IQ[^h<=qx?Zunkk/=եÄ訲:/' lPu[J@5ᾱ/bB.'sekk냨mAPzHsAs nOW8]kkkjp+j-mmm).M/.)#U_}M067,ZhJkoDòEk(.qgNn!פ$iBmwg ΀DV (B[0{]]fbѢEbCֈQ-'̲2(CJPg--M/p$%IEwѢE@&w#z=){})CCC3v+T6}:uxhhh@uK /T744Ԙuj獧-Z.Oii1.IJ@C%z Z)luZ8_K EB/2Ǘt\tN,(Ør#ÿ,MO.)#IJ@|ehh(-TmCCCCW$ SC8[hQa(5H]}ѢE뇆V+&ܧnn 3Ip>"⡡/ZhuJEǀp!̞2|GgUi]nѢEcd]Mך46UbuQ5*ӰOoJ*>1h9QJ -\puJRp55 \8|… S;mE=zo¾{… <%e$IIgD^۝osMfՍ)=/Vc m*;ѥjy@̪sիWOtEk[Zq[p?wVa… +Mo^H $ozXst7ddsn9#)mvOՠSs܋O;ki,q~B.\xիJΟw8I2.U_}M\R56&ySrSc,Ģ{ /)*iQ2EQͮu[ t|Ȃ ~Y]fM888B8p͚5/Z`U)Iq?{XX{m)?]Y`$i ,ppI o4Ǣ.΂ 6/X ,x2*88·''oRf_`-6A^t۾Ƣ ca}zS)n4a ,&p,?u͚5ypF٩ 87{vpI lI|ؔ-Ƣ*c17`\Rf3.5`لKXZ`׮]nCr\R&zDQ~hdxt3%M'C ^ UMP0? IDATZvL|,JBbIM< .UTb]kpO8?~3m 92Hڙ wIŏϟO6~t/gyQ7Ul8P9M)nPu[7o]@iq7OڵkONHa[|!A\RFz.`e7`87oj(6ikmTŢіHE,,1E=ј>mKx|ֵJ̟?u ؅֭7oަ\6ruES|Juݺu7̛7w޼yγƋilc&KE,ˇ,&bRU-aK﬩ [n]pE\\nݺ;͛Ւ\RFT]?EU"d½=P9.50KHեL&u 8ׁ}|h._n]֡A3ܥ*૯Ʀ$oy`,Rq3S̴2vK-+pL82e~1<<(^[E9I wIR\tOs>k,R]s-L~1` 5}N T?8 wLiM8?_M;<<|ܹs7:LHӏ w ֤6YK{~Μ9Wncrϟ3gwZHY=G75jxzȺ֜EQ)x3{S X27GQt\ "_^h!M?.)#IJڊ@<ڦNE֯_;vMoΜ9[7i@lz'o.U= S[s)m}R}SLfOήsןP!M?&%II6P9&٭YWu`7cVO8{q9s&:pK%| sy0/[~} ;O~!iZqFT|TYJd9̙3g n(@=qT՟aÆٳgoMѱk'Q5<x=d]k1Hn>Goذ!={Xq~7xT * 6l8h٣ wIRn%~ŴܞaÆ6#&P9GԻe=kÆ <l< 6,Mq;].Vn$jOI8`j-ݰaۀ7pC4}p$%jۀ5x-Իu;9PY3lG{Y@[2J&ܥ*aÆ =ٳqP_:8k6ٰaÛ=%e*૯Ʀ Ze-e e---+lZ(nt||] Y---C%~ҲysIϺVO;~x&PkWK »ZZZRP [ZZ8$PqCؗsh;G989p=^922rCssY wIRe387-K$ǧwj,p,IS= FFFrSzc;Vu2.X*q~_ X%͓]RJl possd6 9Ο9222M 677MY +'pwGFFttj wIRY477_GDGFF^_%įT"^w9?iP,>BX̔I{ ,GDXKUP5z!4?/%B3CԒ>&ܥi9jdd###W ~jt$9@uldd%`,0oK+ЇNjnn!Y6G'\^z`"ƸT|TqI T+555bgE=-)MMMM~AssubrbMMMŇ(xw_bx pTS`X|gSS}B(^mcTssby|puXU'qܷ\R,^~U,tT;\RFTng,+|xct3X,@IJnjj1`,*o,NGI$_+p.>X^,?V,M@/9?NSSFp`oX4&xN*6S^2{8/ߋ⇋b6q>S,?HWʑiҳۋ{9 i8[Jm!R0.I*Rw=8um)A85bCX<p!zsfBX,~> bbxqR1 crgtbx{X@X|NXܿPbSX|LX,(fX½鷣#g XYCNqh)+ԕW$xN|$1y(O*}vi8!ihȵwA:gttngNk5[JEYT:EA@%.jllKp wϺjghȵw7::4HwuiZ3;E+sM l1::!ۘ8<'6JjLV_:<.-)lU$r}0y;2p%'ltt*P15_=xqzpttݍgyK%e$IDMoa FZiKo#^21*l1cVWc vY_=oJƍIfҙlq03.i'<Ώ)<ҙl_m?/544\0qƣ@<R> \]y~T\RFjljMCCU6m0)[!mN -6mz p+.puX`ӦMGoS3N}fӦM^ok뀓2uS__/|x42xϤ.`7mj+-%zr10iӦ?m6mFT].IOg]'(1_mEBy'=U |f끗?P@nl/]~2 Ǜ6mIIjk;W*;5ަM5b]T1gl@}}V/0[Wfi?x0:A_WrLKp!pt}}}E6T__bijc'ҙ W~SkM6KHU cc#$pyg1͛l6 ax͛o8lvq>yеVǩon޼f7MuI/D]+ofH85}Y, *Nz͛EQ%>&~(j၏:2:6./6Bf7'eٓSCK7__R*o?nL8ҹit>t><7V *jlӒli8hR)&Jm(l6>`yxSX}t͇9HT7ۉl?f? F`l6{an8|axs6=&SgP嫰= kfoqjK6};b`] ˲p *cWJ4움W?lqz`q?H<+y**3)b&pÈTLK˺.n%ԌҠlį~NZJKw8dW~[7)=/P=k/qBl6-Xg٫qHHJ$\9 ۷x]wj!^ۙLPE8x/r6n g2[$]'W#~pL&󻇨wL % xGrYAh8l`[G7d2@?)?d2/@>ApĘe˖Mx2LU?(]8w߉$Ɍ&>/FL&sIJӁˀ@En2tW &ܥ;h.əL[{1YH2Rr`4nˈOC NT"~Jo8d4O><# |#ɬ|: Ey6N=!|;%98!|M/?d2S~}kX 3*q[l98Ed2WW"~XR_bd%Pgz5qMkxvi6{Pc¯K/3XskrxE&k|oݘdpτT}zKgT?'^>\o+O8&Z} 2r[_},{n$Nf8#NCFyԪ?tu[z|p?GJ LoڢxRq 4-[<x+xpP&q5 p֭[&NrH dfX$<'uuu8X8ůKq9n-Nxj'PYo4|#${]]4,7vp`~;xgϮJ-3Ko~\_WWzu}j'YMĉ]]%98lO.#nn+VA 7sM͗kuuu[*|l3t{1Poݚ=xS)v]J]]HETxgN=La֠}8hq>:ۃ;nT6؋mԣ$1u>7^e 8,}:k+'UZiBsK;VJh'mϾZON0ƷO%N/%r4ۀR?d,[$NC4Gk38K`0-%NZ]>s}"vN19!6H܏E*3Y7xq~wIm<V$ wItgg;x>͕ YñϤ5;A[nJm>x]kF@\6mR&=9,r$wv狶$U'$I$I$%`M I$I$Iԙp$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`j,gIDAT]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I$IJ wI$I$I`]$I$Ip$I$I$)&%I$I۱cA֓Y00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>6P۵IENDB`Plinth-0.8.1/static/themes/default/img/FreedomBox-logo-grayscale-negative.svg000066400000000000000000000347011266051671100272250ustar00rootroot00000000000000 image/svg+xml Plinth-0.8.1/static/themes/default/img/FreedomBox-logo-grayscale.png000066400000000000000000001476641266051671100254270ustar00rootroot00000000000000PNG  IHDR[csRGBbKGD pHYs B(xtIME 2: IDATxydw]/we`@4qA燲xQvS/ ꏫ=LWdl/E"(H"{A ,PYB3q2RUS^Iپz׷>UUU9M ; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@34PӟV#]|5W[WO^MЋg<gUUuVuҿ?~V3ܜS]wOЕ=iߗG|WV{$GպGJpZk1jUIV"?E/Ug>wMr$IyGL_J򩪪>Ŀ<~ߺY!p6ԧ>DǵZ&UX#XU}=VInL$y _uzֳun$yxUUOY v ֳg5VUՍI^ Is!pVԧ>AIqIwx|)jޛ /x PC\p]-/zDW{0MlINr7|xۺu냓M@i^h[HrCzc?~9wys|ˉe5+Sr[Hc_ ? ` KKKزeIcWV돒,\y7\r%g&$UU=t ۪0@g%VCkJX<7L<ɱ$/+wp%=3\a-//o=O 411qeg@L 111${7!foz_JjXXX mrr&LIPLǗg@3 !&&&^nbl{mUI^daaa-z9v}F_J} G///]O@LLL|kVʑy|^XeK{ jg'yfI*3xh44/夰}=RcddЍSSS]s@LMM955$ʜ6ғ'&&yگ 7%y:zhMMM+ѣGߤ蚚:#D$߿n>Y)JEIq&B;$M(='Y h155uZ$ٓNkMh3`*p {ݾ}KL9r3ZkʍPu,t|aCA`ESfG++7a|Ž;%÷!0X;v.K%~]<+}0wh(Cqn˓Ŏ;9`0vq֎;v$xzj|A(; W`>I^cǎر~^-;v\Vf,ʗ^NhSR|Xo|@?_@rޏK;v츺j]zС/>PΝ;PUձ$?=>r~wh;V;93ϝ;w$Y#yk g@LLL|6+z)ݚ=tW*XΝ;EI{k}*xS1cF4o`}'e@dj׮]]vv$Sv?=Heq_}׮]Gwug=Ӯ]O\F"Fg jݶe妪ڵk׏{Ewv:}׮]|0ɣ]Kpt ,$o޵k׵f]v=(ɻLr'¾h;7kRxJrA~Wq1==}$M0Oo ,w}f lL맧ui%y$gj-G#nyyJV-lMGh hzzyz3k^oޢUyoNqnItzzzj>p@e1ꦧ-b ȿ'yf1u6?3Iް{o*0v$ʈ %pX^^)g)N$:XHٽ{Yw>I|qĠoтLwhoKݻw޽{L2v}$JNfjW;x%px&`HZI'yݻWsPgw~z'y`Ho@sI0dO򁙙h fffw~U'9G0Do]^^ff@C,//uwh $=33833sgA`XggglRlVUkPCQUo0L/Ml E_3gggIkYw}U}|;=xkh>;4I~_KIfggMJOfgg3ۓPKKKU+m! }$oMz䏓|_;\r_`L^z>#b\Cxp}j枞dֿ]ko.--}I3@Z;?Tkq=Y7Mί1nM|Ƌ?Xӷ%yO͝>77$s b^YZZE w^;&ù'k577w$䙮Y[f] ``<K)>+Po?ssswOrC7~\F;U#p1$㱙ڿ}l5uZc~~IޔQ3h5cJcن=nkn~~W9<}u5|#Lj';W3LrS暟[?J𦌏e\K=5KKK00&/֙cD7]!#=Vw1}%u^_w/%E3N_6y.9J}m}/--}ި%p1OI^}r<usp~~~Ҩ}ߔI~Dk^4x&ps&ب[=6b? [G]aGm\{n4` `,..#ɟmv;~kndsAZoIfwSBVWat9fD>֤y4`K xzY䉂ckwyl%~~~ o%yiV?v אF~qq+Z\\R%-7;n{ӓt~~g;MsM8o}ܖ6`],Č:.z{Aû=Aݺbw]k/..$w[OrX[];Kyܪ^gϞo׃e~~E Amq]b wo} 죣e^{&y͞={={< ɫ+Q>5  F9p&BpoT8Wn쇓,ٳeמ={?Hr¯8یt;[K:~)ٳgϝ6ɽF0 ^ @-%b^uY{zuoWUC||-q/Ɲ/..h'oH=Lmm90]gϞGw'B_n,v׹ sTws_NAo>{~UUάP]~kr27`˺4ii?-??s>^z髓$s9W4u 7馬p`[NJ$$J ed_o\p饗~p{~e޽/?i֢_,..{7oQ-+ o$JK/Oػw?ݻ)IUU\C}93dU 4)I۽5ɕIwݻ6C|$H$Mþt`nN <`U-Iuֻ'l:s?Z"V֩۲$7Zm{Ȯ&ٓ$gvP`갽4i5un~V'lݺ Vk $Nk:I{߾}o4UUu,Ϭ:|k=u!`?X2@=TխI˿dwGϾ}r?I>VW0Q IDAT\ZnlɌbsWY%yI۷}jAH#ɿm4{Ӯ]#-..bk9C'$_Orz7+UUaalk_J3exOnö9$Gfgg_䲪&io=]V}{Mh1◓yq8 :?S}&ɖ$ܿ?-#vc/cj>#X8Umgb&3%I+?.<*ɯ&T٠{BfRR8ڪDL=5|:<&i߿ seUI~{ffTU5^X/JkP/ keĺHɶnI޵V^:u֨3k)?de]F#v}$GSm&P/]}P1|w-..QGITLr vD`ڦk$ś䧒|}r%z0*ǩlHWNդAük-oVUu..V#8p<8IeX S }UU=hjQfʲ%fѩܚ%ٛIN1rH?l#jnLa@: $;8 Î^XzY?7^ sǷ冩@GV,qer  {ߗ< ):xO$$?=iП-..~(6"pV$_[k(Mku_|dQ''$_*2}{&tմ?2nV5XzEΠ_cq\ra ʮ]'ɡ$|ⱍ>t妭u(,...QFpr㸔{9Q}UU]av/_+I~,Fe,5k=h:!pAHlnMrU^~/|_#GTI^}W'M2Q]z(Qrb%tՀ?>ٺu듓"ɺZNݏaė}4ɶ#G۾}VUV[gA{@s : '2vXqȑ>z'yl ԺM%pэ)u{,mUU8}9rő#Gf=zId[+nԥJ;Og~md&Xޖ䒣G~@ׇ=z$WNMM'yz/Q>7b3k֭î^ \$;=r=zn$?v u1\\\<RRؖiĄ I.Mra;lŸ-,,x_N^Cu5SI+w`#C9}ov:B5$8zts(caaIyI<אQwFu;;륶y7^zpʲ%xaa᭺6—$`;vǎ{r$]W^f@O@7Fn֎k/r&:}^u]رcoM$TUusϵuv_-z0 %e|C8IJ2k˺<7%vر0\ǎzn۶I٧~S׽vۻY%p6UP0_Awisرc/}^Irɶm('9ĸu @F>WjC&r/pu~mvN]Ivxɘe y{cn uUUujpK4}&FPUՙz/˶m~9ɡ$sx^р_:f]$>`gP۶m{H99yVu497|KrfśuA{HwkwV_zcyʺp?_hZ?n%ٿE]V799J2@8yn4N{]ޔ<ͧ;Љug%Xi²vw|L'Xv&''IsRؾf2}t;ЉMxeM7='m;,'yWaC{LNN4; uSf;XߖRRĆ?zu_hݮKʬ#n4§ M>v$ߴָh\nz؏uXydtOY;M UJkY)3nmH0./TUuSҧ}ku?@/@'2)5{=M}SVBǛ/4Y~@ݾKr^p]o:=`))t3'ZNU^e :7{'vI1ChwO$TUuFs{]/ dSVz$jvv}A'ha{?n_e{w'wSMU9Berx|gv$Ormo-qMTyv{6=QRԧ.kIA/ylfk,ﺤLkv}$G<~xak;;Щg5^{.wo۶$wv}N$;r3Spz Щo $ݲVSwkV~svI>d> ۇu]jU:a;Щ‡Q^3w;#n?$UIZdnfykUNZm/(dyNrV=; ܩv}~IU~;7QmYZZBt~u^ǙY=pܧ~==z_ +n$nNfƨ;Б>β^7e<ٯu;X> 焩$`jjt|(B1Po@]w;3;Щ &:c8yf|~VnzmOMM=v}v$Or^k_4MV})pz Щjuødu}\ .o~nOOraWz`7OMMnG;Cns'$ܿDH^9 Zhv{=K:a;БےZ=n3pl]1Dv$i'&ީs8:n[v{k%ّ 7{u+3h@@7>]z2&?nޝ%˩_1XO$Nr}X-lMTGc5虒2@7>ak-t캅|.˜e3w'ys\|zn$OIX_u26:[nj4WwNff~[xyρ{t;?*{=z 555uvUUSIfܥ1鵠.ϩMT2&Ɉz Ѝo:oTZSIn۠M`ߧ%yZ~nBUU7%ٟ nJۇ{=m~byyF+3n,~Lw_r%$sI5ܫ:6?eiHrE yK\(>?l!p7I[iq h?'c۞e6v$OrQ:2u1 w`S@6Fԭ&n4Xb:: t?kԼMS;3n?'6ɷ7\usMC()taDJeX57w<ý68y ܻطIn\Za.]nJ ;Э"Xtyׁ{7mtz.)65ka9I8 빣{<^>WY6CI[7Mosv.2nа NnNMMɐv+I2|:ۻ)X[A} Xۼ6Kto|Ć1r&.i{qm۶;WUuN7'RNMM=ɰvv$/K=b/a:ӏmz M]Y^^-GO}7XCYy떛)5znz3h-M:-B99uW[io{{{t.kooc~,ɏ'iA{[KnڇS]7`>g00/zڪٍ\4lll4Qi}ּ]g1mӷvFvsoz8nIШ|٫^w8{\Nr{k66oW\E?˸jK+_,Jm0'/]irf/}ES]?4 GǞs%}\{{{aoo1z6nJ$/τj!lWJܜI~ pu mm9L ƍSdƱw`?Nx~IL;{{{ g߾?SjӒ|clLzޚm)}v/S)6 ܙ p$M:2ޠM %e<5ݷ[v.IrG.knjẓ^jfUW1JytyQA mMwyMmUU]Fp>2)ufh3-8ޮ{cM o$M;׮^1o0ۻ4$yqUU>a{cY0Gn;?  `0xW֮,OЇp@Z5너Cmg /MrQ3մցETU^Z*lL~um[z!Ws$;0JY.@^Ԇ7ghU 0ݬwkα6Vd}VUU;3_$K@ut܆a\5kuKl%ߒ~IJ$oKryB9_ ]^MT;)%('@`hfpBVñ3};7CŤKۻ_>MI:#W%BF֥2| ~2ɻYDp KqJzǪz|p2Sw:շ꾶u뒼mwwxwwI~$ߟq"6Q]T./{? Am0ܟfmv5Ƒv㍻ Qgoq̳˓ܷwww?ywww'/'Y!sѾmc]UdkhLI\?666 4q~{1Lk7)8ު;y3ܷoI.n+܇}N7&+[ϻ<1www7ܖI0qoC3mY}duV`03m VE B>6WO+·y\k֊OUUM:ڿeqn0EI^/d&yKW l^^roQվtLa{_(SV$8u|K^JGR/[jPRcu G1Kʌ }ioOgu":ucO:cUUxUUf>5'RePtIQsbUU//}:uN$䋻8K} ]~FKTJ$j I woNrs.ИjzP6Jʌ/,g xMN[aBH@۬p$g%,J$ؘXR )m[>S، S IDATO֜ORp?urMEmwA2j{Mߗ]. V $:|5g"v[W6 k1o $p:5 ޝ$8eݧY`qƕ`ٞcQk#P-:n-m{#.j1\a|,hwsW$yџ/:4_zSڍ+Rsz뭏w{tzU3/1_6뽗fu-Ͽ!UWX`B %$+9fKzcx{yJ<;̷񲗽[+)ՆDi6_R3-?{]Y> 3 ~:'ß-z{cXĪۅIu/ ypLm=gHUǷ`}ܜ%i뼟gEu_*'B '$N\MR"~L9qnN($slf:^| k1+Džc89nc#ծR]YƚM n$_2 J X`$"_lYBus}oLklf=Xs86Y^T^y*w{iڴpM3 > `I ɟlBl0/~f's}2BԙJԽnx!JTﴤL)mB>mȺ}ig\1 ֕#;|z_:}vJ |kB/c>=WTry+KmEU뾤aI2Ճ\12 g'y}V1t/nTUj).8p/}飓}0# @o ӹPb ]m:%m7-sc̜W 3v2ysڦ3O6X@W$y`0CWD`Y^ o LrwOj{p~DQavq묤?o{M0[oݘekX ?Mی~Q!zUt.eU{!= _ת,; UU$ce `5ܛ3|%Ӄŏ= ZRfeuLg$ b0+ 1 ^\U'%$nUCƬޚgܡr-'y~MYpQ}ǩE6tݮ'TU^ wbl[xĉNeIQGTULkSbY۴.SJʌ7ɬc3.4,F&ܧC%7=6CSowyuQ̗^)e ?oOMUU VXZO$8qkܔ$xx{B$]y{c2Oj7^Vn4OԒRc=ODzE}_t޴o+ڮI~}\U%pVӧߔM'Nxy䳪썍 %NFZ=nh=mݱGuP߭&VIPsչ_5y JA{]qM$oLӧO Xw`%>}$[N8I>볒0<;W |<+i׺cn oBƪxwHӧOWIz$9yGB|T˫KǍS2(/]}Dۇ7|c\p,7h-iAxKY}DuJT+;ޑ ׾qk쵯}&+{Z}Tۍo>,=my'96/yK62dPpDLWu7juG$שׁI~ﵯ}\= 9X惯$M7I~EiXh#ڠuM7njwE_Svc=,j91hvR3'y+@=LvM7=!}I9|[=n>#}&6_s85ǫ;C9[o(ɥMHc[9Iߦ}Jss7}TM7ݴjLw:Gq`dY͑@pUc Gz*{@vlpԺo1㲪6fkagg5f8^f/+#pɓ/jgZEnrX#ު:γReP&Y+MS\i#/1a|6%ɓOuE`'O$w&}>Cp=C&s ϓEɑW* 'ݷKt}{BejJ]}X^\՘6OIrɓ'/veN0ɓ%+mЪqö"|kg88*qG86W k&mm$\<'y}/1sdܩ{sL}kλ9f [nڨ9h{^$w8qJG8qUU|}/1svlIqc7 g^>SK '0 cmoǡ]Kҡ|'Nx+xw'N8I6ꔅM%f3Vj7Z=C8[{wR^RnZ.h5ݨ_ۨ^ͥI^j0þ<JjIࢪ.mqPRZ񇶛 Ou˒gc]>sx1m?q?wMĉFVz, v? tt_KǮp/ Nkp1Gm|oLMWi6Jx'N\pw 3#ݸ K= tF/,N-)S(}X@XǗ|1LG޷f~_:d_NTU.'pލ7xmUU?"Vh;6po2 ڞַa09bZ7'vP}ћo.7V]_I7 uXg7x*"mllLl?K65i$v'shN1frl϶Ǫ18V7~'rˣ<| F}EE+[ /ɅAV<5?bԙܣI5O()SU"W7q.z6Vލ7x u7~fϥ"ɓZq>m{I}:aZe_z#ծeU{M<%ɗ\ p 7yI>cR66fa%eZ Ǘ=px:*.JOz½6%wucJ8KoK]YzEǫ@kWݔp/,t41G/zы6`@}Rm.×Dv^n}f%e@nYI>;YlHjG3VYRx\$O?5%e8ֵ1"V7p w֝XG82l~:GX7v<[+p5wZ+ .'3tlSn9Dq?[w1v]E9f'&y Z>+ |Q٤@wq97gSvq%^z[}tMTFESp q֙X7t"뵷}y{ޣztAyV_δ½5Kl~=-)ӕ.Vaծ-t]` q$?2Xa,)S*R*K Kהcj{Qu믿Q8m݂nfh<~K RP|͏KrI 1VGj=p_dM&˰6OIr Z?5~_tL굏i3cB̛nR@cKʴiUUOg½I;+)ӷ VۘF}ȶ }ڵ^8%`Xg*6V/pFyoMS1s;m1O^Kre[~3}חV ]3KpV3l]߽pڛ6\|D}{ڸsEט͹:R)޾tB.K:X9^{G$QͺzuWXwdځqf<$7\"7M^r4%tݷm/N+Ui Vy{>s<+gXtyVX9UU=kv)ٮI 7o'&thY:#k/jS;V߃nwI Xuw`=sVzӛiˮlͽR2KW(=fXVv2SX)}s$Un EjLkh ; v:R3Um g;jV}Ww}Jߧ?G9L+[[q>tX>kK %gla]xskQ?C:m)x?iƘ5 {mT_HI6tGR/[mw?&GL`\>YK-1F&PSe80V1s-2puU&}==oTJ'ؗzm ޟVVf^d$8uྨ57]Tu۷Pjr)` RU%vss_;O-0I=$mydxZZR/K"W7v+xs$O/z{efWSlsݯYPP˴j_:hooV+MVd }VgǑX(^}5yZ[K}u N4;J.?MazAj_VpI63%64u{OĶWٯB}5Dr*`=CG3m}>0\ʇƚdj>mrԭe:G5;ӎgĘYoQ+{/.MTW#$tVX%Ozm&3Ƥ1lnllZv`#?d›̢7[su#pVXUU=}Qڛvo;<Ƽ ٬! Γ$7tI0~M3ñ}!m!{kTƩQuVzg.d()3<$6(qs~kOeHuY6QK#]U%pV΢Wwz}{4k3Sʮ Γ_۫p. ٛ]U+1y IDATJZz˴IjR1 VK+ B4cL ڛoc<*+/Wi{XIs j{Em̻. x)<CBU$ub7;r}sOk_{ޤςV %pB%ffI3<}/q SAH]r&lN8+ܗG[Ǻ̛A]w;ZiLqi_xW1ɟ:nB*ZRfB`~ɋo{w`e U'?haۤ1]nZ*4o#|wc,)S'l[] Tym'.W䝣~X̬m۷/zl:mdĉMrIc7ϑ[pG>_tVX%Ce_^OɾM5ִ ͳnJLZaߧTW{ m$r*;Jl{{)hy5Vf\fӥ4,sDu5=+`U QU;Z޷1}$ Rۮ>.1㷌s&}iN9` UζVuŴw}ڼ*)qL_6Zm8lZ}öw`=C{ϓunhfy䕨[]bIv?dqj8ϡVWxz\sQY#M7l+pV$23Mi~G6_zic1J4T7Z`]7QmO22+UՓ˼ڽ1TqZ= 퇔ifx㍏IU=1XE_rcyE{mpV$5iw{ۯ|bis1WכKm#uDuw` U36i3Hry5[rqsֹfɆ>8o]S(LL7Mkj:߼}ǘwǬ3$[GoW/rնԸm_[]U&pVJUUL16I}%ǭa3,aǶazՇ}} 붯Ri*R﾿ھMO0q~Fm.6}.9S<]u`;^sDz1\޴q&[z0JZXާ T:>fV^v`mUI7vQ6Z틮f>WCa2} rW/A{>3UXw`UbIq vo}~MXos6 ݇KMy8:ۘdMT9sW\u ~2ɟTU>YMRKoYTmIJڜI]G;sNpV%9uMUU[G385m:if8.4}k6QΜ9{.C:XigΜ$o;9g:3,+gZǤy0V׵ݻZ? F5al.8y*]>Gmn1OhwIu֍X? !K?uNE=mUr5{qW̙3;Μ9I8ͪ}$uax˰\LԢö-}t} ]1r2Zi*.^T}\λhV'[z&[f}z,VxJ Ej| OUU?#;эLI3MMXncyg>V׾C}A{>UU}ٳgw֑2Z8{lUUwQ6U$"˶95]-}x&_׺J{nj7oߒc vljsEѴoAᷯ<{yJߐ$1s񋱈砍j ?Og$7t.pAj=mY:d__yٳ֙X+y},0oK3iE\|6n{7_'vW` u=It}\otCUٜtOa}&xٳgXww`={Ii i%خf/kY)9"gߛU.w`}}[NjE>Ij/˫箯&ٳkٳLrvX}mmj"eH˾f.$>+$F_)ѷDt5nǒ/I>؇Z}DH~UU=c&X,{jIjaїy_ӓƂϓ^&+;Pf(6΍EK%ge/wx(;@IUޗMRKh;]쳆5͝w9ΟKϳ esX_.%pI^Jyx އk3]Qߔ#~IjUdctٷ uk` $}l/ێ`jiIcv/K!뮻~aߑ-}/mK[5ѿ?NrmP`%Im괏{|JPߜjsdһǷ92^kߟwBL&pEI~gZE\c.ug{]wqUUk/-&_z#7` j; ^7v$V/"V׷1n߫:W${u,V\ywKK!ɿ:~6S]yJ?Ν{w~ps>_&dy7ImsɶUu_U:l?㫪z2>F]>mn1 ';a;@sw;w=I0;fǜ6ϒ?#K{O$mY6Rs{ j8@ 2j&," y$Ws=jk{珓OEE>}HuqZ{&KG w?I^ #Z`5۬ޗ%y=]Lg?I~<ɣڜ/%.AӗqOΝ[s~4sH_\:$`ϛyl a;>/N#I?K~^hV$d?$7?wh?Gڱsw%yL_0|j~jcc{_,^} >f,}H&oIrۻ2@-$nll|\N{xCoOw}}h^W_}ܓst\]~>Fk_Ο?~}nkggI3ɉd7I:_p$w}߳ͫ$ߚ䥋EHIr;0@ٹ)Nd=6I]T Nr}Uxm^}7'$mmݗ}oͅ2o "w|R{!Y6>)p dUzm^}Hr&V}\qi#1}myCЭ$$&!h{u=~cz ¿f_W_}G&yM/8>$Ο?wX,ΧB%go?<̙3?ͫ\~YkJI»* hgg\XuI_l\C>䛒|͙3gv^W]uՓ|{g/b.?,Y~跒??=IS&|z7%yޙ3g޼ίͫxLԶ3IuXzI6ɷ?=E#;;;_;\>% uea $>ɷ9sC^UW]$LyYg]@}HϿë=$/KrG-A؅ In>so{%>UW]yI^ǵ6aA9ɿ;yB~c43]Qnll|3g^7ٕW^yq|e1f5ߜ }pXw'_kΞ=3^i\y%6W%˂7R,);C֘ r!hW|G$$&'Yc `/L8We9oWRYW^yF|uOKz?uI+-hXnw%I +;/+Ayߛd?ɷ={ju$yQKrpE}ikކAOϟ pX޿4ϨKʅU?qٳ*W\$Ir]p&9{*X-w bybNr+$Bmg9$${]0; GI33_;X^`ͅY+Bqa]|cNIkv?;yBυ Z1%$wq?wqrT?IH [;,.l ;zEQ8C IDAT$f2B&3*saȾ'!@ Q}~PuyNz)EWD8>}2pHƨ(ZXϾnz 33EAD#~Tgݩ""2ߗ+K̩H ƧT l=M*'E*"cK$k)xE?ΫLotěn]]m4 8Y77U!Q]/0.+ol;R(DD<[7E[D06M.V$Y@G]]ݣ T*E*bp*^Ed "2ߞme6>0n.")uuu)""RiT27womƠ=wܭMB!"?f6ѦF[⦸/"CvNN;w}@ʹiTHDDR.RΝ'Ё֦,aA H;X!pྐྵsviӦ-WHDDܩ.RfF-QDf_Tp7-[("!Ujkk;. ]٨^lA)"""s:]mmm)W*C  a@m!""HwE9s7.""!%eDDclĩ̙sӵp9sAvC_Ι3gB!""D3E"LE,R$p pMkk7f̘!""@3E"u?[;X0HP]$Z[[Wzѐ;+K -)#Af8@pO Ȁ~$Q={3g\PHiH̞=CيSX0HiHĘD`"ԍ) ""RDDc ,O wiiiH8RDDDDDQDD$Tpo;* μ [__B!""""i---Ғ2"bf?T8{֬YO*""RDDc!a lLcED$Tp!jj9%Wx< <0k֬5y""""25k֗"r?p(0>朇 ""Q*Dlt3W ""d֬YwwrPsr(3""5*DosJHgrW-;Q ""9*DGPɬJAyr#qg> > ۻz>DZYο/ވ勺 *[7-։X5=q`9oYje%ϾW*E$lwcaqϲ>$xӏ%"=Fy3{׎D`?~ D⃈+Cj?[Q]$:?.r)D"BEj HN)ׁD";O6/BI$ n- u܌k?oX>y8&쓇?$%1x7>7Ԗw ,N$):Tl=n̿^v9ҧ0@?noK!׿+php?i`k t/g21wf77VXhI&/nq=LF!'s\1L8 LƻQ5&ZXL&(._/fZ/-xJid2p"H4Nn7{t%vO&/*͡%XD2|m08[(`:UGX7gA2|x7v@H&k(k ߍݍ Lx):Tw,>$| ěYL&l,0%L^Y]`Z@vTpl~7}{\}Ѿt7ɤ(>\^o&dk.W}d2yEA/MqlA NF-&N+JpǗ>>5əLj`^2|(ػfg \d2NBZ[P2hLBݍˍ3ɴd2f@m96[s3I2cl৙L{źqdv #/d2ud[D.0 79_5,~L&.vq__g2/!d{1yD$2Tp3 Uk/7s n'Noʡt:-Y#Ex76+l|7NT544<<f=2=*¹ot:n644X0q F4d{"$NdCCw@|u tzev/Snb=v!ocEt`jCCjLcW1t:=wh\cB NنL&Ovɡ= K_b Jp@$9LaAm'NoNL.b{:N'Q?P:>+B o628`t:SD;ދI'b{Xr+p3J]i㰫x/<(dW No.'\jN `'=R>uc>N]]|:Nh~M)E"̂=d+Jlf23P),T*bAO ?cǩTT*56:JM6;CeT*u|p=hf./*թ,f\ܷ~("Jr`VDUTj$VA4Ro J}?P>8J i?PHRA0`"\hHȕM?OlrYơilf3^'h3njjj 755}5Tr$ǘCMMM{Z"&YMMMۇ춦o7Ւ2 fvFs]Դz3Ύx?yu8vo466(o9о#fOfv_eKGN5o?ٍ0Q]DDJdrڙaJ-ӛ&Cd;jjj:6C"4xOߌU4e㦦Kfp>ix=T'I?kjjЍ{8%ާ^JHꦦUxK˼@455}}d<-%s^SSK"ѤHhrSnJ,if+~t666666bfřfV7qk3خ(o)lf)ifw/?,}rV&缋l DZq~Ɣlmf76668BSf6977/Rv `?MMMj[Dw^|hR$HƏ;n 9ke666~ov KT46hgƭk~766| oޚqLѵJ?fDݠ=AIRqvmb\k466~`ޝ7`H.""./~b#wjlltBˀjllƿF;p°IjllQT-.e'766~Tm6`*c;ng+r~>bm!mE{pf*zGO$6SDO˻(7!nÆfTahhhb:~Tihh|Wިy OKavp!p"o_EMU]ux8 3Q4W2og͸N/R7~nF744|z0f65x7DOwyq3ۺo3 `;lyQ,ŗ744d7K~}?k?=ONKJ j Om!hO}{?FFޚ[/4NÆD:~Kp2[J`\!`> dB58?{ ~eDCCmtt:}sCC|/r ON ο{rIDʀ "8M]8}82-[6L&lS!L/4?@$Lb~i2#%}n[:L&chx7 tmibq2ԇX+WH/GhfMRM&yh޺_[gߔL&q ލٝccr8nH?W k+L&yGv?smOܲ/L_>[z|=3Lo&y o!זd2,R&Tp2'f,^adb&Y <%cvt`F;+knʴf2d2ĀIx\L&/d2{'=Y5MݙLf&xC/:K&rMR**!ެTׅOd/ c&esg26{Z,uU@1ލٷkSM&Cqx7 ,{gW&Y5q5'Ofx˞5pd2y\&T=ɬL&g[8lHd2yX??#~Rd/R>ivH$ q٪L&HdnER5y4zm~_,d2|?cJXF\ Ld29  {wk??oI L&sK0x>57\T}??8祐d&yH3,^QXpץqC L&o>kn7sx7 5JQ4L^Ix/k d@Z +d&yj7I0/>.Vcv$|Vf2Njdw e47G/-=XL&s> 4˶L&Dێś)e2/R^4]$tcLW :fK\7 H Dk`f6-̙LgD :|7ýH}4f.AH$'s):Hf)gL.>Z䜼-q?8 ]qp7}F.{aޏO-SJ[-2kzv/ss,ۺ#97J.%w8[ v`J.[S_o{Ar"x<>~l?a|%˽S;ܗsw`ćzrxpp5syxKɸnTp wKU\nYe\.wsvrؿx/ۼn? xQL|!I @w{++."x<>ͭ& t`mwr/ WRݔ <`/rK4ǯ[߅]orwK~1+ Exˈm`[r[C9exsQ \ D))2-)#z̴(cfpf0g͚5̎vWͬ7}r/KuC;j\.21r}`?5k֬Σ\JD7ם *\nrgqy. \Q3[yBw}rvyԖ9qh>2(3rp2u33;m~ttsM5kafV@߿0=* ""CfVr5Bھq3æbG9~8{* .KЖ8aX9 j I.zD sl]pzss^@o[~ ,wOѰUV ئLw ڥp%k借#on"Ow(jL1?ǚY,܏Բi IDATܼ:}8W濚?;}]n~晻~q8NyY%vxŠ5fvmgziJ3Fss󎎅k5ӚW9W+.kW+f 8̮z4rFGoe3ꆈ ""&ഖbV!hm0 rk5o4[LJ Wh]e,j{kKK}7R+---KߟmgrxJQώE}2*pv߮_Ҳ8 wÖt؋TE ;o s#G㦐u0zsԶNBKK _l }w-aG8Ԍp=R*. fq5,FboiiqbQWOp Ulh`3m!D7|g2---ѡ.R9Tp=rZf[r̾Ҳ"^P@H8ѣ+ZZZ\lm.euvoBKK3! 8\R&GUfM&}9sfH8{KK˲OFjYWٕeطdfUQ]Dl9{"VW *5s~/0s̱̋Žq[Rp0?)>j27m5|@HEwWUJj2gΞ=="EwЌnZ{;I( g~t{ GJɃ/-3fnf9/߮U>}mƌmV3_toەafFmlgP3&63fv?p}?`ƌc|^f͞=QU4DTpm㕇 1[;ǟBmafo/ R).1c)CvUscMۗ`L h->| peʴB ""E6vΘ1cuHyU>7cƌBB]8}m CG f̘"k܇n\@hI1 (̘1\Ԁ'B8??cƌtOiiNh]t(T&E" Jˉ(7m飀-m+蛮?Cx2,A hf 1Ι3結qBXp7-K6mM奩;y!矛3gN(or_6WkkӧO?o=1ϙ3"KKʈH1m@pӧOJOhrc;Хy3O*קO>I΁^ q:ۜ9s L`|Μ9l:a)UyKkr3. oh}ӦMk'˵4JZ.">!'l"]iHsf0ഐiI4u=f i7w!Dd-p)W͛Z)Y_JQ(&ՍF+\?.\}v&Bԉ7Pb KnK9O>œ WO# 7Aw7olCnv{7$a~3t8uuuwΛ7*"*DB@.)M㡂{i`.PB56DAS-;\lTZywD^wԖB)_xck^_'EDKʈHN+_He}RIZj]Z wh ؟΁4|.`[W_x[hhpQn"yKN" ^f|^S[ 8%1usG8XBiD椻hU.BK.d{qJ&mcટh wV3qߦN `aNzʦR@SNJ_r%,Q؊np%\Rqǔsԩ4:ڎ)c\r ǛOL:55W%ԩSFG:u%D*=DkՔ)S8,/eϟ c@ca5O?\{qxGôSL鰟hI 9_В2}.n2mra `o੐[\6tU7cLrWh<*H)N]ܟ?u )SL -D*3 #Mb򴣘|T=0ysɺ\,37q c7*3{~m[S~9uQ󾷙 wϗ1/7%ڳ_󲿣}OL;f\\SS3flfIf 3}lf!ћa3 CٯnIf)3n"wǍkjj (ٌۙ0ϛoO31M3;Ѿcf ђ2ZRFKʄXMM(3}!k8?ef9jfV5fv}}4ľt =df#ט٢qFMMMETp(Wl!555[ReL` 3/XpcBqQMMb*-n:\,re555I߀ "0N8 7y… ? w9`^ … N|f|hq… mo57YpߧЧ/9DHyR]$4]b>.\x(>XAg,?R̀)B?mrqfvC,P.fvm^}̾T\s<kf?b3{.H3ghX3U,1]ϰw+ͬeLJfkfD,)&b d{-qX,<5_Nq]<3.\\gfgOhlfvu,);Z]DDJ).bE·f{rَb-;::6zGGXNa9X,vzGGj3ħa~AGG#XV8+XljGGǚ"}85` Zѱ"m6IX,v|GGDzk/; ioGG C.hX,v]ڻ-p}5{GGX,vs>&Qҗb~wtt,ߟw 㪍'bX pvS5TEDd:::nbw9/^Q)eX .%ޯExy2H/]Zۂ;$X,vNGG_q3CU'pUxDxG)㸒/im |]attt<4oWO :1ěw~ۛeX(9G`r?[bsܾobI tE"@˻(7Q s/WWW:;;,G/K!踵G/~A rabBE:&~ `quuΧ/_›52ѱ,wÀ'w oK/ (~ӹ[$]4q~yuuYkσnuvvWq~sB`E:&b?6m$duuCx?^| 88Fyr=`s[;;;1p207cv;hIOwvvo,w,0z69 J zv{uu0࿁hwugg8G{ ɕQUՇtvv.a/}*Df(7e&z:TUU= <<< ,/W"0 ޣ;>^h[\@>~~wuu}'.}r{@]"?r-5J:;;WTUUnxUUU7wwuuQx*o%؛!]]]/ w*}-bEWUU֞"`QUUb xF]]]}޿s wuu-1Wtk? ⪪i@{ HYP]DDJ떪 cRYr*kV-Ƨ}pZ3?Voh fMWWªo8nת꺺 8r>^7[=bb*.f [kgu a~Z/9ތ7 xmE8+vuuRS]Dr9οop&eW /VUU7`6 5<@gWUU!@$Tp3 #Muuu4oٳA~zf)/2Q1Fvuu=kf_7w~zÚrM-(ퟎH|لK&?촮' .`v ݓ &C+K~\33 .mEDD6iѢE_V4ViYh%J4t$xK\h/ hѢp KٸآE$EWk~| S7&.mܔE=6q ؗ=|EaK|L<5q U uhƩk&N8 hQ49%TZ T7hѢM8@¾^tww /N8x!6?E nY+pp9Vwp纻 Lq7 f}ʨwr?yZrNf+v}p\>GF /N8qg޸5.E0xN8huIQ]DD4˺ 8ԳD/ oiWDJ_ND߯pLww E^)_=xĉ#^SWF?8q"ѢH襩M棻;ef'٫z1տ>3u'03o_׺uf3cL3;ީ63;{I ST4U/M/7:}fVkf++8مfvJwwۃb>6$y 8hv9ޚyz%ϯ7%e|< \翝:>)x>_CA>_,C;nj;|~q}Ed\ǥ" #"ѠHtn+~q5bi4HSޅxR]'o_n)nw3|><<| H<2?ϯr0V8/e6N ,Z "҉.\ D|q~N/;'SwkOwy;jX h0V4%ޗIDAT `"XZv &Lh[B`2ٽǁ.'#0a!E84 . CE&Lrwaan\{{{qmO 2I~KiB{7foOQnM'L֙lInz{{{#y#Ͽ̘0aB >^ay߈I".gW+B?n0a OmvHVu;U O/QK8Wtwa%p ^qbO c#zQoo҈@4yrnG g$$9 $ kB́;p3w_b'L _MpRooM>x.f>ۻf}ͦ~"|4 da!oZ2?G/ǁ{{{~1/z{{p#~*D̹瞻ЍC1= P(ܡ(8'W[_Z(+qxqS~P(^/~n>Lin4 jBhcw6/?T( h߶+^& BK;(? \(T{D((WyP(?scn|  'b+ HZYعeo}Rt8P(]k"HtO+r`fX< ;;v𒟗B7] $*]B H'(`|@y]ÅBaU 8kxXJw O\m`A] "C#|vux<=Bl\-o~:.֜{Át0P~R(A> n|rXX(*QĻy|?6{R?/{am"uyWlgxP(@ {x6 }zY(X8ٍݐy?P(ܧ#N$Tpr,^wO`;`4+۲B>9[{xP( image/svg+xml Plinth-0.8.1/static/themes/default/img/FreedomBox-logo-lineart-negative.png000066400000000000000000001102131266051671100266670ustar00rootroot00000000000000PNG  IHDR[csBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATx{@`3D6[5&tiDH*!W=Jݹ]:`-lM"Oc3T cfez=>^5>s4zG۷/`g=ց3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w3`;@p0f  w38z`Q}QuĦ_oY]R]\]X}>1h#jvҦןWZ}|F`CvܤMa߮9>ջw]ۿ̸p|u˛^wnժs^_UΟi;طo Zun]^Tu^ Yh0kUo^:za;-ꦸ~ձc\VgWpo0trLuMICG7U;X;pEw~ʘU}~w `/Nm 뷭Ni*f|zBowۦ~Cf}⻆XoGV__}k'n}.>]QM'>ܪ=F#m /^t?<MW}ku;'߯Q]0x Dw\7~W{tsW;`eܪ[tS_GMGW~wPwfBܪKT^=psTe<Cw,GTTju._V]:v0WXݹ:j윥v^F`sU=t"[iMoo GTwh:Y)4]C1w b<ockQ_h씕&`YYbUmϨ>:vX}_i ޲NDwP;߬~q5vqWMޟ_}f:[ӽ;gm}:z!`ݽzA}쾏WZ^w/M'[]gMޜ6՛k.k:ꕃ+~-1Տ ӱM~!tv#w:)~-mz֜QOP)VX_7Rݿ:~>ST.[FJ} VUu`}|s3M{;s{._U:z[7Mͼ2`QTi UGGprꥣGӫ?.;Xת~7UɛwXGVS߫'T7x |nRt[>_ kLpճF`VgT_9x 07WYmU7=~っ0t]8o$3?ۏ`p|Q꺺c"c*OUﭞZzvFvcF`WݪmM^:Ul 포lvٽkj?z{+NtBs:=գ덝fG`]칛VOn U3j~)^] nغN^/WUplջGW7;n5z0?V)Nir՗WBV5?tWZ0X;;>ZzNu)@\Ϋ/CsR|`^;=[y)Nm;%uy N=udM_xݱs`cܤzvO_3x k8V ~zOsYAꞃ`aZ;MWeX'GW??7:fwXmGTǏʹY oUw7]]{VkFpvdoVwUV-j鍫39/.=v|kMwN- ~:;W3s=_G`-ܸz^iݛ ꛪT{ڙpX3;Z{"LN_;`.^`cn5}su[`k7}Q5k8Vߏ:zCM6^P=[XOT8z0/VG`U=opT9շ z{MuwX}_?zk9zi?珨:x `^9zai7;g \+^ʦS+Y}תU=>;l X3;vTYW [=vXS;sFMFSn^1z;wX=uoùYg#oasb`w>\+hl5}1)kLp:銙j) {eu`}z4zR&ݸz}l`^ph:Fs?=.깣GGpG)x~!l^!pTF+8zF[| m+eՃόZ9)xck4Ɯp# W!;Tg%n zzpY2^7rX^ʕowXOew=FafC`=_=o8Wϭ~fVMWt2^Vd`CTX_wzآUUJ8[pNupKsG-] |Q7Gk_#`t񣇰K=M߫lS~؇UՋwݪz]uC`.=;; ~؇Ur+C=zKNի/=pIǣG{KpM?*uz0ܷWO=zY`sjN^to7ۚu! ={;lGtWž{vV7=6ÙM?*A2[uFu!MN`sUvM'YowzF`s`U]zYkzNuC`/+%渤zC7j:~;ߝ&.0z0 ţGݬzIuC7Wϫ=viGG`|z0[V/>z;Yzo]Eӕ@.X]4z0OG=zc3ߣGApj0?8z+3{aGApu^#`fTϪn6z__=vcF9ճG]6P]$C`fPݤZ'`U#`ܸzNu!t'`]t'Y=!K5z\w@,`ݷ#6QMo:zUg,xQ#`^Gl߯2z3F|z˞TYxW:z-_n_-0 'N.UTIu9\u7}Ãv7_}vK~[BU͐?ȿwX=ϩ.=XN;Ǫ=v=wVwD?[T/aA r؆ U'WŽ{u]\7C5z,`_gMߩ>3v;WUm:ţGKptve5Yݮz`[gozMo24pH;pOkn[qvчz-p=Xn;pENﱌ.~sySUݾ@yCp=OWyӛ-ǧ+rzeqnu;wx~كR]2zwF!-yo՝f 0w.Jb˪5]ȼáUoa3pX;pecGqIGI.;58,2NW_ݧCu-T?ZRb֔/LDpS|OWVݼz-Vwz- ` wʼg4_.;5+_?c'-+|q*{KujuNa|7w6x '-q_Mw&["4;uIuzu걹^]ݺoa\Xc`5uVK~-e㫓G6)alG`%gu[`>^=E׃[&c.V\=wتwTwz-,=X;p0T=zJ=S}fؖ7Ys'oa8lS}ʙ7ThD7y7 Cq+Am7 s`M|qB`wP@ӜfYݮz`>[&"2;D?wl˪=X;p(>F;UQ{aMo:=oևώ8'7ǫTzX奄ku- BwPpx 84X6ë[W?\-.u;8K{u G^5x 8tͫ ꛪT4x ,Dp+_.ӛ7Xm^8ݷ^ZZݻz)>]jSx)@`!;p8:zHuZuJ[`SSӛ[Vo;mj9vꏪVM_zZJ>Q]Ǫ38Yv^ |duWתgVG ¡yvso53zS=Cwp>V]OƭcG4'8}GG`aNxשWؾp&[!:9zHu^CkUyJ`+|~0ݪGT7=,I `+[=;쭓W/Ll_^ Vg~ٗ'uW^-k0 _=TΩWuz9]Cca7x&[Y4y\MMQ|X=[=^ Vg}UOPfE_=z]u>Q}v`VXΕ2W7h㪇UO~l{V,l'tD2jmwmnMu؊ ]):!a\zvu[{^m,l+e̍"K.Xv'VWgWwq"[qQ#Xnp;Uѧ IDAT'a05F`"o9NUrlVv2;y,VϨ^lV9Z GW܃8Uoa9yEpJ|X-kUGs`ܧzxeԼ"[%>EBvY90TW8z+k-p}e/L]90uUg%5>3zw`[-:qτ8zHu^?s~aV eM<n[?1x m;UjYש]=zsu:z~惷&[u~ulٲdnYzfu`]zx|g m;UU=-;vw/VuĕS[FuYTzhs;m;VDzp?TܿJK;n{v'V_2x km;w-뗦n%i5) /b]zJoa=yMpزe=ȳn_zBu9zj"ة}9GKp!e ? q{6Eߪ:x ퟪ FVѣ+Ep_[ W߃ݸmqGVw=u'Ehd!|'yNsXm'VWg'w`Gw`V=-Y/h7QiyO=X}~Ns0VoS]{68`Gw`QbjX}ޱX~7Q-l}չGG4E aYvOu9Uo>5zڜpulɺ])g}yBo 1X{Oa- N5ų%3)իV_:x \Op;&)bܖ18M~p՛oFpvLpCX~{u[}G~A՛T!ջ6`Qb  UGUUU?/bmw\V;zw`;~k/2^_S?buzuvu-ʜTzau[`[]8zw`;^S]:z8}d\W\:qWV}-W؎Wg!w~X[}wUTU]ug0zZ;vlKFփl׋GNXwEB-Ϗ~=oȨ w7ߞX}-]U/=X;]N.^ENo7_?oTn=x ԛخ7V=CګxN5Oܯ:Xu@f#uI#8M;9M/_9wݳ\FpvBXnlVgT7uGCpv#8}^p?w`'>Xljfuz^w`ĊLWe}]*~~sp?vw/O_1_ͦS߳S/Fyz9\Z>z_Pxd9~D;ϝp?ЍgVSb{r՛oF#$syL#< s]'skVGs;_]T?Szp~W';}\'tTyՏ7q?Gτe٦;0GVX; >g'U/^XlV=X_;0UO=L'Jk;z6OUom.~w` ~KTo^pi;yΡQ=Q;sw7?TO=jy9n?geRf'9UgVOx?'˪=X;~, }o^4_zJ;s{tw'* W?;zJ#us_h>~M//l-O^5zĆ[+e [|/O_z;귪ni~fݲoţle9>W_+evVeτM#!F` ޣz_)}O&TGEpvoV=bC,^9:iNvXwRo`nWu!`AwhLWS]c^pak^PF@W8~M%w`t![lFLٕ#eށxpiϮ,`qw`IϬV҅lu)3enY3U:HhqXw`iIw⪬Cke˜.g|.獻&֊Xϫz҅l )3禩s1R?kbm`uꋪw-]9Z{ju #ejow+,]u7T/^-q09lSu?z>^}u pyKuꗗ.d -]Eh{y#ejld:Ze 坍c.\ CgC8Zv]:ܷy^|pg7Kw`f#hyulup3p5{ ܯoN գWo]=uTo_MSwJur܁ɰKG20w`SNuql~)3gq2삷V_Uݭzµ;IW}[u |<SsfZ{m .\ MW?[}pr#eGLVMJe^2?s6do^_}oEY?Kwoc̰a:szVOTQݬV T'A뱂tyu^ vc.\"8e&Cn^ݶ]uƈ]2Hk6wO2l7TϭwMP pǫzd Fv nsu^3z Vlo_"]qzǯzuͪ6f_:wV03U󏔙3psI6:xc-XՓ=.]2?muΌGr,\]4Ƞup7R9zIowp1wK{_CnZprC. mMLa:fXwB6IK\au҅sss[۞1GlVոs p8߬t'*ǒm˜ݽzEl;˗.bp3pb:1Npuǥ$wvǖ.bvN~҅l ;}B6F_̼_}U~XQ~.N~o:Wfůb=pV?t@pi?V}ELd}U]03suW-]\nFʬ*$^2S;^VփK9҅LhFʬC>Z:$V?tLpnt;VaEAl;,]80:KٖyG OK@8V:5W]ta[-p7Nms F׮>e"v\k-9R8 w`n.:ݼ:c"VMl;,]:::eJKjw`pߩ/Ak)62Vzw`\ES/$>9;Ͼغ\0l#;ݾkδ#eVy1AήuX67]vY"p_ZFʰ+P]"VIl.`> wlO^U an L X%;m_6ggX0#e`:&pə5.b'p&e5R_주469vy3Dq2l.`69v܁2ɰͮ;8-&pK,]6;ĥX;M_fqjpH9Dp? Ým\ l-;M\f1w~^O/pgלt"p`=Rfkv)ö;t"p`Ӝּ^K;l ;f28kt[K;pHZw6UtH Fj%p`\su)sJuΊVDL,~^u`t[Kwdw`k 4.pg%pg7\euN;v}%p;.Y5HX j`k mOKV9bu &pg8W[Kl!S:yF).9Xy"VEl;S:y:uKE&w$p9O[MlAS2R< l5;M]}`":azw` m `kazoZUF$S{3gX l5;m9Lewh` m#a*sw0mwA֥X%;m^tl 0WW_UG. pi=wVMl7Bwد3̰)Ձa=oVMl#]LF>SsnFB6i n_EF/.X8f 8`'m.]6h w`[ w$ws2 ` ՛.`w`[=E^]e"`E`"pՇ.]ܜ '6ݥ =CfϨ޵t\XN.@;J;팕apgzEIlUo[8;Hw;s;Їg `{K07; ~ζK07; ^[=}"rt0Y%8xPT=s"vU7ΝEgU/[ %pvO-]귖.`)w`tKK>'K~X5~z"_ ]w/]҅.{v+..Ƿ'lpv WW.]ᷫV4B-[\tD;^_E>\=П/`-p4u"֍`oXm>iH.~"MK1R`u a[x WT^\ҫϩ>t!F;F&,t^w8Ǫ'l8*9zqYK..<<1\Mfl{[q_R=}auXgF\ҫG-];;:v^',]pi'Uϩnp쎧Ww=vՔүXu.lMK1{+[Q}y a='W>q-p'VOXMa W#эZ ;A#t amuV 卪Txc샑n IDAT2՝w.]_#VWc3vلV_P{BX{|vcsJwꋪ.]k냍 [,.7,]61`n^Yuե a|[xX3 yrǗ.`pؿTjvoZ:l1!N+`:WZ~BX;^t!Gt.ژ uZ>K"s _ט~҅0Tll nGV^vo^^\n`t}-]+ &YK=K to7:߸t!S9a{6j~҅R`6wzq-]@_oa|z@`)0TZT]<҅ooK EwyݨK {n#l҅L.oTt!W?S=µ,#e/.]'';}a{5oR҅p^S}^] %p߇ozµ7ј~µһl?k>tl Xiՙ ¥lYFKWF4oo^t!\D;>Zhc,\ 6۽tWM%lX3:ݪ7Yh|>p-Zc,\.{F.3cf:gZvW^҅[7.D|҅gUp`}]F|µlUbB6ck,[{Nn.\{$pXgWxµlV?^=pZ6ٍ BV]mZ_5:ڟl/;Rc~wV-\˦{V#h˥ g56e= 6#=\dR6OA,\6:V7\Mr3-l[7ntsiTO[vZv+fl)k oUzӲ0;vruF ײVϯ~ߖ-gg}Z^˖[~ l[U^]wZF[KyN{Up-sF7Ӫ/[$pn޿EuҲk!5tnE6n%Sޱl9E;^}i#Su地5qzF#pgsݲqA]WXs=Т;n:1_gU-YQ\PToY"VVttz^#` pͫi:թ+^cz]#\q{uF~Ezu?^s䛫75'_U]@wꚍ⏫VWgO>RG޾b`r|\]7$}]ՁG~uQ~ߧ`+`'-]l;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@0;L@NY`Z}juCON?q>H@oT_qK7~WWWOc|jufMsDu#^>P1wZ`Vw^WC>k"ط^so^ϩVFPSo prՏWg-\˶9e7sOG6 $pq%͗.(T?{ykvyյ.Q='sBw|0#d\6W D`ܾ}"vk.s.K:.b|zEVK%pMKcEK!prZ1t#u`?YY]}"vȇTt!#U]c"Dtq !/j`s}zEY -]!U~xBDasTj".cz>PzEe`ýأU7>zDuky`w66Ǎ+.\Փ?l76;:g.ᓪ7->03asrx{WzWݪ.TmZE;l oUs=ι؟ W6rxՁFW9#Ï?SqΨW9q?l+7\qM~?L.yǁ؟S}tObG]]k5F(w9Nh䋽Z]n苿}[%e }wXwJ~؜Gf 5yտTo9GuFzܺ:84z>z՝S?#nWݶf*Vzo_57i;o Zݩsy0ŦÏ56 /ﯨ_&k ;66s\~"7UϬq;)=3wg5B)}zY~\NmO1.l\6Is_vmy8xPl77Ɠĥn#o~s*諭} '[T5:oVnc3 n|szk#=xu>^>u?R/hF^ո7mVh_ u8w곻d o]2yi r,VioZ=8ޙWTHm~)l\Z9CsyE㼼n;X usy_"甫VOl!ʅ /~zz|.nQ=M{ս66+ͼC_yMWxG7n=^׭Ǝxz}.7 byfUm|hZtaO6^pnk7.=q߸q8w3Nom{WiFNWб:Pc|̪JB^>F7mG'5]Woaƅ|q!՗x5٫/iV3O;4f8o;ظ:.:ϭ^j_~17Wv6:{V6Two``?9k.\^FMw]x7߅uݯj?'_U=ekqQQc[ygI+:]_jnPl9 O4txT_alN>Eå~\H5\ _]LkI/`M9d^}/dq,wnܶFڪ/ʁ˺hTȗ/nnt~c#0Ī]Mke~hڵ]ca{GdEyjӞ_~Ghl;ϰ9]yꑍߣK56%FSzwҟ\^㎻ltk~ӂupbn5ܓDոی磇h\ ?߷TW\:s tq_8Wָ{Y=^؇M{Ajf `klmUk+aVލWju^[M; 6II/kT?@n'4Fp~㎐U?2gsqߩ7nKƅcĽ'8T[i`ܸ]7\)ݠqmHiCt~c9Nj\K3ԔDl;l) ҷo)79u1fx!o6~ܱ1Krnz` m^]cZ>yF7bԋ<<#~Ac3Ϛi:'߸?[K|k aOq5h<Ƹi;W4^C\o܄ګOiYc[X8Awp$yh׭{Yo܁ˢ}=])g.K|Bfp,\ќݸ]g|B E)ş]W9< T?VzIx~?Gr&wFMmwuujv뎋Ff>[ xxuBKxDc?"`܁ R1.dB'W?^=eܨ=jk Njt>!:8W۞Q>Ջw~lEU5_~FʹTX}SwQ},L揄mɖcָi9gXk]ݯ1/h\̜ہ@ . #p ht\uB&tfc!֙.]H@qWo} qjc].򹍱*7]5p=W\ft;zY?gA+pƌd>5x ק4/q~X2Omݟ=Z9k$p shta2lG6.朱` QMg/XO76od=\߭ s:-VtMrOi/:;uHE˖.Knu\uw ?ʦwjc˻X.hI*:>o\y-7JAտ.6OwC XiuiJ7n\b} 7?aBЙNUŷ7w~Пϯp<䥋~/?g>q}Fٍ߁W16DZ9:գ.b͜Z=<uE?+X'WW}҅Oh1WsnH.msncf2+:i]7'"o4væyq;o_`]`Bwo3ۏF\2Fu4iܒWm"6M\<1{w1KBwmdfY7n<ۋWؿؿw&y_&|w]sk:FSղ _=yJ_{kltkԘ|}KmKAR̄sq.];˫-VtGV[ѱ46A=QK ;1ZDSTuٳGW/Y`]`bK(`{F|r,6}s 6:ϫxAypt!;Ƙ5 XjvWpuawտu.:_Ѭi-(ߪg7'sIF8U8}9׍;- p`?Ǐ֫,21}սZf#7^{YbϳSqc/NWo\scS+r];vF.>x_kz\_ң[./WŹ`.&?mzMc3+5՘u6.Hz_#F#p‚u] ְ_˱j\V^漵?6:Ϧ𖙉{؅6z~cf3^hmo.g5;ycIni^۸@Nqeտ^\}]=[ G 8OoYuoSp}N:饍& &>ms{O/o=. Ng4ƥg#ƾE{ƿӼсf'97vá?h:w'm IDAT(syRo^ܻy6gcɿMtʍ&:ޱ1Fw'oM-3b]ycY}^#CuԉW ܟZ}DO3~ yCW5.\œZ%ޘ[;AcwȬ z/6;5sWSv~F>w)}׍;Zf|ۣ:H;4`a3[կTzUs/I3ua#d+\c>ik\C=W6ZOn_Fд1rFGܞ~zŊ׹BcNݛoEX:wwnT.nowN?W_]`Ǹ^#$Me{p4?w`ˣ#-ߧ6wwXl]4pŜk7Kcf^Xm ^,>-Wݳy!W*?in#A㍍~ik\Y9S[~~"ya{31ixwrZwec_hl7޺q[Ofΐ)s~M7Kٸ_>}G{4ߋW/ion-߯T7875F\k=dߤq8QKOkJjҫOt)jLton xݲ6dUmQ2m5m4v껎4sX2)397z<#e6GU[*K!=$4 HTZHTPl  "EWKQj@pA;*@HР  FI9s8Usy֞k5ך97mClj}aV/Nu$iv,J"=Bާ_Σjc2$yƒxWGh/oN#<&֢-e.5;}ZcS .5_{;1u}cٖ:n=wm?՞ۦP]RfJNN,Sbw끬s wږ-aT+oRwܶ8>$5s7!;1/Sa2gLez) ΓRaIo7O$w=twO Dz;_H ԌE$ܓ-Er{;;cEZ~XsM*pZrD*Sxxjq!ua_/ޓ->=|mԆۛŁIsͱF p6^ /#p ݦ;;Y5WbhShkk?,z S{ܻS1f7_usǼzK-vܾ(d^ԩ^O:gi* ~uyh6l\MI5Czl{w2И،j7VY zm?;Sz{iNuԬΡ60ټ~-:^{wOrP:2Z01gj {uީl Me?$"'=^w]t3W;5&~x:k\`E6>I~/mB^|[OHv(޺r} hL%,g_~˘y(#/qn<6OM-nޑcǪT` #LO;ՙ53| 5ks9I.Xozo$ b.MݙrtZ'2?0}+Kr$_g{%xZ\Xo'$w`=\'@@K%9Sw3%@ yac3r஝z1_NVX}S^͒{^f? Z_}~z1ɴM:RsnYgiŧ:ZUv^M6rྵSkwJτE|c"zǙI:$; qlVW= J;)٬nZ0w=δ!Á.Tgf;$H cb7J-y'=+?|$M]xYg'y؃'p6K2WwX阧g}Zz71zݲ]mcb $y@g&Hc8!Ìwq~?fҢN] W82ÚbjIz1Sf;+S q._㹎=/$~7{0 w`3z̪!p_]f>NwIjk[\INTk%y؃Cl6Ecb9k_ k}q`Z b͢=6oe$=/W|cY]j%sCl&_L24C׌'ɁCEw_lXkUԩ՝,jxEK3>q~e\I{܁@t؃z/\hY߅ҩ"zmZwFy8?215%y؃e߱L%؃XyV2 W]A'z|OZ au}IֱMR{_QZxBSA+?`as{In5@k_\4(}}10wo$G'9sc qO| wR-oQ h)@Sa1saͳ/z֮^AVfj#Xe2A@}>S(:Y֡I&c:yù8ɇxbtg> az8O8?%kt$/{$ΙI~$k^)^cƶg;Z)P0.;-]=xOI9~BũVzԱ֪Rn^'Z$w9K8lL8?CRYhC{eۍ=`<M\c$~'NrMOo]{^{c;՛>wb;l|o;Yfn:6IToVaIn;ж{88uIy,vAIuVU̓b? #?ڽSQP^~l;՚RZKrT_9=?Xkg$/Oر7۟X]T;YU1q=*a[]=CYݡS|nΟ1Vm?S宿K|,%ɋosL6;SgºoPgmKױ֪uc:,r jy3>AGq|?%uX+7La96 0 ; ݳIS-b}X:ZUSK\TgXe}umzZcJ|ߓW'ۜ!}:F&pLb:zU{T灝ꬲw_U+9,?I۩";^3ךZ~$TkߔΝj$l]W=;]uIuVYꬲ'S|[Z$gv,FII~dIrYcJT$j&yAmMُ'y؃0^ީΪ@jᰡ6gku=k^jWsZ$pTf ܷ%yY22Ncu_(k&K`Dwsf ;Zީ7q`פߢaNqPfsI!^IS=}tk('F{Fk[kљF{$SZ>C_q&m<.u˝Zu $ws$OPg&yl%Djũ4<.OrVO})_V_NrHZ:!ɋS^Yũw%[~Pӱ*:9y/Iwp+c, s>w$yaXJ͞ksAIޘI~zߘ µw ұWR:&ɃS3vm%Wc<-yِ_Y$/vۧf ɓS vM~h׿%vf3ϑI~uڳRoǤc}yyXg0m%Nȼ$م;&Nv1Iީ|tm#e^H5飒._ӧ'eZԌ{7I^Z n'3.싺__Jݥs.UkZyyg Kw㓼#,"tɟQC~# ;4ƇR6֬ ց澩Ix=lI$'vwT&pZZr0lD_ WōRQz^ŢE5,~X䞩u|ҁk-I;pNr_OKFcǫ ?I^g8_u݈?й.00;CzWSD`$oOI 7wN$_7pIhg.z&QK{N8pN[xAIP{%X) вNJ{9S;BH-6#S36weIEl&y؃XqHͰ_ԋRW;2]T7OI?weIeZg=AI~||O}\2 k~rj&ICI鴹xT˽W*]vݹuK=i5mBy3w]7MIϥUۓft|rTpV3܁]{O٣@p$gk=h$SmzZfveOSmo~;s?zOjJ3Yl9'yY*{Q5}pVl/"kퟺ IޟԬ뛦zR'?BI^; bHCL?ֱۛp*TCD|O]\_֋NY$?_?j6>%~ң2J"RbfuY΄- gK9s]` Z3S-z+|0u;S3/L<\18$xюL>>,ƹ;R!z/zvDl;ŧR$W}s~ԬbY-<;r[?ֺ6sBF^kI>Zpݩ _Jr~;/5KƩoMԢ=ݝ;p}_Nؾ ^eWI}}E?:b;osqfw.]Gi^+o^zNpLT/?1RSwKlS֧xV=!ɿ̨x.-L6-\ @[2/npRj #__0Κy|>,;֯1$ɏw8~cg.w839;>"jeSw.e~f83$ZXa ~&NީL/l:ﲥNlN11kja{RTZl7aKDwkYiW$$5K8NMۼ4Ó\x-0 /Nf/7MM,اT˗|f;:&p-I/|q]UoH-Nڛ`{ȔZj1Ö׀T3qjKLeVjʿ~ގNs}` wzpjV`eNKx:Pw8+5xcj7v5I?v]ŠC%yN:EYσVñ s!yI>v: 0Hcb¾vh ICNG0秂e$?7жy}4cH}s}oNV2-IaܖI`$.$;cyNgFkS,שyI3:[%Nzyj*xg:~.ɟ= ywHr@yRmdй$?Bykb}Rެf]Sdg祾'&&K0g%yp;iiy=g$[t_$Hreǚ[pvɞ]$<1]j$XG˶Tec˞|%&f5/%yX_kYIj@s$'v;->;X)ްnlN$= 81.'fy=>}C):?7K#ޖ$WP(INHrg?f@\N׌=^SX8eIyŋK\/)IDATNf#ݧ's1/'yL'<$yu{N6Jr$gS"zIsE:ұ?~U3[.r#Z$$IDz+?8ndoOr${ ?T\gc$wLYP.KawJLz~-+jI xw83qX/NF|rRw%壩%ߜ䦝k x^r"2^wS8?3*5hH$$y,TȻNzbCJ/=Rߔg_ QiؖpqZd8_Lr=:?v d_NPԢc~Oc}_=V]g޻ g[%9*u|Y$ԱSUuF'~%lmlwYj11. I-}C^}l{m6s6`7NH>?toKB !T$uwkZTt3uwjӲ $yC?8 -ttj&p,X$:璼6uwۥãn޲-Ė$ɛ2v.n>`SRi"-ݕtljbȁ@j Jj Eٚ:ο-&R'ogq%2TĀwGfz0.=j~KU!Tw7fԬ!sRFXp{f/G˞=/oksԬT+7ޱCSw$9cݫcjeS'7h8?L125I-v!.4,T`SNrR*|ocXw(}m_7SqI^1 OjMɰ 6Sx|(ۥ>Zl}qUW&QhjP}ߗLoRw>4\t**QV׃RNHݪ KS_? {Hn }Kz_ƶ$_H=q}S'XN`̆<05τf7i -;$9lm|% ]Vc}RZEvZ*XvqZzRa{SaI:^/@] _?V ߘI\r[Rm/NO-p۝cRNHMXMh5$.m8(=}^;ƟގM-,7 c[w)iu폣oL]Vl ䷥ϦBOdㇺ]*Pԅ$/ͫS}?^ M 78<8{m U.L\Ԟ vT s>:|Ǎ~{ugkRiX_ۤwu; aή/|]LdԬ᩠l+ image/svg+xml Plinth-0.8.1/static/themes/default/img/FreedomBox-logo-lineart.png000066400000000000000000001131171266051671100250750ustar00rootroot00000000000000PNG  IHDR[csRGBbKGD pHYs B(xtIME 4 + IDATx{|']*7aRK*%u4J eZԪZ:cJ/)E(B rFJ" Z5 BH?I爓s<{YY:<~[vP w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0P w@(`; p0EHUUIHrP}7_o*IKrM+\_;9wvI]ܰy|1*kzmRVwQu$?[]f%J\|1ɧ\7,ݬ3I~ ɝ76ϞJ쾊k|f-g|<S0 w` U{'yp<l5I̬d?2!sϽ2{2+O/8vww\T=8ɟfe"B%U3SHrTfIH(N$ݗ9-^($#3+2IޟBg`fɭ7#2Cޙ=8{J3寒Ew_u=p%g?I%?Y$w7 vj|of[="Ò?ג j߯UwL?\t$g$yk7t2V4Cy~<".Rf_Z}pzxe9V!INM$okDvI~!ɓC"$ODK~ͤp%UqhW'9)}H%{&yL''yhMRE&(`$CjSd:<듼?*` E%yPf+dI,鵔`+GdfOw8͊C[lۘLr+,KP14Xx&cS&9WU ,ڥPU$@G6T &NՃRUXU L|$I$$=I0M wO&IޘW \VfE|T&qU`z|Pix3[zQU=6WU^UOK$/Nr;,$)1(`U>I'shdV?V3pݻWodV ,L=([!Iސ\WWUUկ'T$Tz~pw:8N#es~LfEKA*Km ӣpŧpgKG%9RU6VUݪ$PHrW1(`؊G'^SUw:*ɹI^?H`Z۸{RتH`U՝$'D0`>m/%yZOWVn"6U|"c$G>J5puL"` mJ$MU$& >׋E\!aIδڝ)CIn-Eӣpݝ`ܴ<ݙzjxm^/;LmeXOwlڝEWUU՛"V~bQ4(Yo<+ɹUu7qǒ\g:;L&/LI~09U$Q(jת$%DL|xu$WU^`U]|$KRFRtV$gWE<_GH dv0;Li"`3On]UoL$`}oL&?Ò`UaUILXi0'N0] ws2[n6DU=49I! ėU 0] w7&Z ̑gV(XOU_d?i0Gӥp ^̙PU/ ZUYUM$$œq'LzSUGf_1̣&yjwK'yK#:L01$J9INۊAI΍eu;,;L+Eʃ,~-iI|üFlKAt|ec1ɇQ`gT՟&yY]{cw] 0} w"$'[wDjU.U7I~`A\sU%pi;~}XHrJU# TUL$JF <0a?\,%y_U/ |4X 'y`(`^C?,{'@UN˭~2;EbpaM`䃛f UOl~M, E:8Uu7Q,zd7Gb:,;,>;ə`A>eKNrbݥ|Ep`Ӫ`QL[U=FR8qs $ﭪ;bǓ%`=/ Nt(QخMJ1RryeKSj?QLCUX%S,wbp%_Lr$ÓRUbU}e;RrS9NL}b;'y{)8,7;,p%D<(IU(}OIr4;,)S$WUb1Tխ3[`" b^b`BybUK7f%LūZ1 wXB}MWKyvU=E seI)&$[ @pev\U`1̧$, &]b;,4ɩ`bvM檺(KUr?t(`)7;Q̇zxf[sSDItpTX6xC]op;,.%D= ߊaTm-Hz-)eSz_Umle`>ؒ8%791$yEܜ\w3ɻ$mU&uuFfr]@4`NrRU!'&{?h˒|X )$yGk},S|u$wI:0!'vw9;zH "NrDw86=ߺ< G%3 *;pSr}'9o'o&DXPW$U w&''SPw?*7v$9$zKw `k@}`}:ɣa}8=k_#ɻ$qGp!I~8Kw_ݏL$H9wm|9 lҹ"`tKrhwywK$ |2ߑ<3$œpKOb_ZIO1 ~AC*/U`b&;I}<׋;psKP`#}53[t$yhOHu0`wkbcܘ"+I{{3o%DXKlU|3pwZwIDw_$; Rl6X/K~Pw/vDw=I/ր+p*>7<'] `I>+:Alؚ%X#'dVqw_#F7%[?J5VD|V<8>~\w8Xovs5%Nr" wX(W$9&~@\w?!ɃD0pn|~H}F{'$_pMOX ;pK.;$?ݿ_oW$9$ɋ2R0VJܒω$u`uU$Hn`([rY+X<;aVq}tJ)p R['\l勒iHXw|]"܌)mm9;ɏt2qȺ~~C&/,VElU}lI8)ɑIΒf! w`[cK%y~fǼf$O̞iY] w`[ mkB]fy(X>7&R6z>8XF}uw?;M"K m1+p uUg$9-H$OrDASb1+/[w'I1np XIݿ_ܲ_$/^9YVpnQw_rIL<(XkI~8?Hdr(q;t}3sܵ_/q}~wh'WrRcu4nG}8`~C&yNf_jaKDl}rAqYqx̊$bClE0 _NrL#‵ݏKrTId!]&`5\!v}JrHwo _rpf_zyO]_:-=+‍7t˒̾ &Fla1=?! $N;=_B`T^U$oJI"0-+Ӯ"RUO$/ &;=_Irchv̇Wf?P w`|p;ɕX8VI΍}YX Q]I.M+>w} n_< wUut&4>`(o(aU!I2ɣa˭J(Ϫ :NE٧Q}S!^ IDAT+ų&yL T"[V3$LT>;V-lI䒪zRU(;UՑIJIO"fMJ(ώ7]$HUOTAUu|'D&km1pVmgGٚ&9^SU+˨vg'8/&q燹U w`%$+ܷTI63Ϯ˲$0ɟ%ls`J\&3pޙn.!a갪:5II w`%.䤪:5SRUVձIOP{pMr$Zp$yTU$4Ӓ"pvH`.O=bXQq`TQI^piX5+bY-ev807UuBӣlX)ˊ%m80/j$J${H3Ea/Iq`Uv)]>UuX%y40E`;IrJ8;{]QUVձIΏpvX!'%p?pMUuLK<-e)pVKVZPNǹlUU$%_"q"RX SRf7tUuBӓ.6P'H p&Z 0-e\NLUYId0!`gXօ"XSR&U*T"wU\l|&Dg|S soVW՞IZcm$rUuDUuI ;pVoLII̽yRf#V1 UuzU|TmII@0NS;B)1kK]Vw7G%9[NY*U{U^Kb  d`;C$Kb-s~:giTO'0z`" F %|g갪:-ɉI$0'&A sk{]UUI_ soUU`3x+*7?t> ~;%ySU/mU"9I׃%vM(%ʶ8#"6IvYg{pV"]w\>@^WX .!JwRppQ+ܷ)ɯ'~vY@U?;첫weJ*I&! PCH1@@ XPP*%/(]PH) aRL&Ӟ}9g<35{g?|:Χ}H@.<LlT1O;ܗ=pd]&dkvӚڵ[k$yGQڪ:Gi$yJ̍y>dK]9'yrZۿI>~2.Mr2$pI.Q-e6 4ۚ&uO%Yk張> 4 ^UWZ%\iM<ٝqU[%HW$9IJ436;0 OMey~qo22e֮Z$Hr3EUIeM)*1sRGNu-ܳ'<8IaOW&9Mfj.Zʤ}gݸ^qZCu}-q)XU?Q`w`*~ UcfeVhM~7-miT՛:+ߪl/=xqvϒI~S5=ZkgSVmjpyKrR@LU'=L5bZʬh>۩w}k 1xw{T7n!pfNMr$v'ov9δzriZIYUZsE\UW*p^hIWVEXxUzNU M&vL_N pXUeM&9pVMv'mK2n:2HKI>__mw-Lvj~rHn x8k|4wIo+^~nbq6Ý1$qUuRJ}''kЁ-e4Nى*isbzL>9 vI}@wmIe ӵ|2{&9^VF'',wohۙ];f;*lCkvIfCK~{<;lUm;GC>Zʬ٢~f:=%pr?!IZ[;&p&KrgV;ܧ5m0=Mle1;MۏXfohi g=@;I( 63LZdz!<鳎kwRy`I^Rf3ļJKmw_xJFvLkKnlf-e"pg=v'e:;@ڵɽ ؂Iqm t4N<I+=Δwu 'p^kwHoV-ehiEǭk+e Z;0sG| ɴB[ ϴm>I3'،Xv'$9d72Sk^Z<BLZuG0Ё-e̻N>)@r$m8xKI8 ~Ls$y2tRj%ɭPg}3PwǴ)X^$9TL7 p<l{k%9xLؠoWH8eKv$,R& gR$'qXvw`,Zʌ9p08hޠ/&y2N,mqy;ܧ9ڭݐ=4δƃizbkm_eX6dǻw}=fLk<[ʌ%p\Z[djREwڕX&w`?}C醴Ý1e`ZkHr%/-e6 4&Cp_~0 KE=}㌭ڼ k)ܠvce3 +&Y58c,L``T`YQj]%uT" 4Φ>'=4űfپfZPcu{%H2\[Y9h׳ᮥ c˭+( XA $mqfRf,/&P2Ze pa }Ukmӛc06S`iZ*1!ǚeKd;>ep]wtkm/eN`pkZk&Y=XwX{&2c'pp!,nК k)i+aI[BⵓpoٸSg3v3Fw`>; 4,Zlh tl0 jV`X fJ3}@l cok*0fw`lPz=܇pg 9B ff;ܵhcs`;[k{&ol2;QZ;!*13CY?8&pD3[CYavd{kml=i9'p%g;܇l) JJ0SmqRF;J5FKJƾ]_^Y1_JdCpR-;0&B0$L{s5c,[lR`,[L{[YKƮ+;fm~q2xX4C08;;h܇ᮥ c'pFKYˇӠ L-;氁LkmuM1,&;J3'i-;f;ܣ AE3w-;0&Bp@㬝|2p`zqX\w`LKaZʀs51У59q6^s5c"ġOk2L-eX&k;}Zav2VUmT`VD >i)+"pF~'*AOp QcU%'wpX;06vOҗA[ʴM s;n9` ЗoꆩIQ`|B ЯT%$@uc'pF6 awYZkR;] cd%}80Ihձf'pHâY;U]eNI.VȚh)øi',;0:U$W P7hY#`)H8'+ DKU5ew'2 Lr20RoT`YQIޢ,+6g^pQٿ* JJH}> c$WaJH,;0ZUuqU`;c%p;meXv3F(L؝3FvKGZUU>?-e7X6w`"]w]Ue\wsl02W`S#iNIޣS$+/6%d;I>Sa;2{%%y2J,'9G柪|eXUuqU`*~,3;l1Ow/o*RUuR\"9)N IDATIÍ?2l'[a.Jr`pta$Ir#`F5wP*fUe5`ncѶ᝗Uu%yr1'W`۴LU}:ɟ35\ I g;H$ǨyGU}k$K1'UUg;$Orj0sIU taf>_)xuG+@p ֎N$U$=%y` O򠪺D)c;n&e/?JrYtaE0vuaAIޒvԾU9[Kt.NzRL[Ukk<ɃUc)}+ɝ9]5IV$P)GUuaU=$Uc霝y '$Ow3WYIn.l>;uڃv_$RUg/ڼI%9ԍ;vUg;Tտ$9&ɗUcޒE 'kIN7jMrOa;pSTUII^sq'W}1Ьo%}L\UD9 P^="ɉIQ$UUdm>-34Sw `֎JTca.lݒ"ɡx!]I~ $H.ɝO;0[Ml[W fwY]+I^:1~QU%YO$vQg'yfU]sp--pXkk<9Ӓ"sҵYyjU`5s[[sI^Ug*R`ª$G%7+g&MUladm~9<5O-1'`0Og#ɉI3$ĪD9ڕAI̻<[)Y0gh핮"zC'T7bkVj I^U+_3 Ba'$Y"SuVWջb%96ɳ"SujӔ`As~InA*ҫ%yvTեʱuh?U):Y n]!c<)*[ޛUJr$MUUdnG`A v~Zz<* UdUKX9z_kTITSuUG9XsM,IQ8IIN)dKZAEKI^䟫0a;.>8]K*J$Kƪd]^7#?*s!ɫ 5`dx23՗?.dCUc5պ<:'1jKt'ygoV{#k{%y=FxMdb]<x |4ɛTU1Kr+pX ֮wJד1y>kvz]"BNrt}0O$M]%,E`k{$n]GO(9{'93Ϩht fkS=7&9=]_Uu@@watInՒ\%ɚ)QgOO7;K.7 oMO<%Ik5$_M$K~ n7ad-n~m 4&_KbLV.Hr"b6I'9`{%iI.ɍI~>"PkIQU4+NC ` wz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwz pwzZ miIr$GNWK[|I>MUuU%$כ'LW{Tӵ-Mz:G-|_7UuU;*U/4VM^d\?׏Jr,s_KЪ: ح/'%yJ:^]8? Id/)%`w'$V3/2KIIV˹4#JKk)zj+87$$j'y_U%;, $yb}O١%qU}I)V;I06s 05WJ"e` a^U0Sj2TNk"iMH$K<v×Ɔ$Kr$'Y?çs\,(;,%oϡ$'WM ,^'ykI^wftZ;jfX4zŌyV0NUzP{$9FO6fEd;,Y&yBUh Ʃ*AIMn8ɧ4;Zkm|coL??Lh\AIڢ[&QUʮhH`[$N߭Ur*szmsǹ}êPu>w'R÷x\)]oEiWZ[*Ij}0YoO-~fuKUINI?WYyVp_wX7Ѹ' WtQ}$k$߬sJ'[%{o%9Ȫz}gvIIrɋ\ZLL$YUg[[C'spd>n~?Q6V*9XNI.IӅ_JZIt͕'M9`.n}*'U,`HrUaIInst9%)U9wKr$Nʹ$I$(a=7Ƀ.[odM\ZDm:ӛ]uݹN$X7&Mdn59;^$ kv KInTU盁H$nwJ_䏫e\o od$7fPӽi)`U}~ }7=>MMp$)\c򪵶O72y8ni;7M򉪺d+a]U;gg_e+|73I>VU?&ɟ%ybs<޶ o~#N~V*ǓcTkNvTw&yἄFS'CC9n<5HrFmK{i=SVM8:C7\I^ QkۓkJͯ5h-<ɣmxr}3IXU"$WxGWKTs$O܅u$OJlJ9`Jt7sΖ9n.OUu$]I>8y8<'yDvrœ. Uu札뷤 aUx{L?' xky&o~ XxVU}kkwv?u{yDk$KF>s:]'yMO+5P]ޚSINZ$Ja6B\ܮN2G*ɕs<77K)X( w98S?ۚWMm<%= vyv83ſ )0'y˘>}Y~\mpo!ng N>s&=6= 9^Ϝ%^MrwҼ7KZk'Nv&pot8r$[^49?})^Tg'Сo2IPbt-n7,&`Aa1*NY3qZk^nP7ez;&Ch.nnqI֎d%yNwYyr>.yCv#~Ik1^bNf7s;[kŵzڻ23%Mځ. f0&.y7֍pHIvX}yJ:nh;#%_,ZwLG{F:m&yMkڤ$%HWmis&kh~)'t5`NMs:k+Wqz'9z $mpaI>1+&yWkΠtA 0{Nqjߖ}v@ٿt9mI擄+}w:ݍQ^vdaӇ tNgF ,Ow߈Wno Ƀ\2x|k)+k-4 W~`܁mH dYI4cZZ{ve stGsq$K4{$$m>'󰺵$YԑI>O[27ə 3& JIxU$l}׷քy5>gp%ۇ[m*$3_> 47_׻B$<5bn s0.P\֏.]#f<kҵ<t}^#Mr[Uei,΋h$JrS֎\,ݛ9{-<[k9] d=v/?nswNz $ysܔ|sk݄TZt[FZ,[S7yzs gt۔zmŷs/'k$Hw1yUkjz$ÿ9':S{9'9eҷ|NU_J׊mh{$yek7Q^38Z jҎ*qkvatW˸k9RsԪ$KKM c{֎OrF֥|48WLx֦~-MG{sudWL<#xZgfs/&y%w\u+ @ MoH% E@Q!H/ W@:(% Ԑ^b$9gڳ|ÜCezTkU։iփ[kTU..Y9(:˚r S{MNg3|9.ϷmgXY@?j}޿/^Ӥ %5'wJ%2lw6-;{K(߉@#9ɁInYBtkh4NF,cJd:I>_UbwLrH=;rI 3C>7!Խsl#'%yww&yWU}}2̫|$wy}fkm;r^o|!ɱ^y<7ex $?])C˵Wѱ/[ẽFkq d9Uu",oZ{K;zZؿ'y^3&s,>I.'m,gNmSIޛ=I>\Ugm;g.Jx]v@ώ^UM?Ir ,ɥ:F&WVW'me  9\6^/$ZUYC[/2!3W5OcװL:IPU9<IWp3꤉e S>퇪 1YmOgml07To:as*9ao$LI]<ԗT?;eaas'yJU$oKrNUzDe_0l{U;'y^uڟ32ןkwH]zC[kKr,qI~cq s N^bIܹϨgNtn\=sFفG7[f2< s>1}g齐6T 5OcGI=Ipa{TI~!=;F O(,\S2-\mzLMw s:\:k׌6.I$asl0?-Uu2 9}KU=dž?<0CphɰF';$^7QKrTm=v ΋$a$W^kq{yD} o Ij\pU_Ӧ|co9ۇc F{N%sH}mZk2wp4/uyz{NUMz V"XƔ2_L3Lƶ9,˟R<7܄踽O\I7a$\r HqUp$_IGEU=u@y{yG}_BwܺiS_TVNN;Zg9_a^:_ޟa}e^#<}];˵ }xL)3''F$w/\UZF%v^Uu 0$V՗2\:â\OfX]lNwXu9f?y9, ܏03ێc_3 (8s۸u-(ec_s\?봹v2aݩޣo䱭&y ܁I^Z }ߛ2Ùf3|=/贝wPӒr7Ncԝ!z'&s%5Gͤ-^仝~G'gUXTMKh%yT{S:u[J%L:;$n黨$Gv$\b܁WVoNGYkz Ţw ú6h]6-c$괹7hi;sU9Uю7eI<}vgbn6雑D?0lp2>>$F/˃gv201;7lGdw֜ 9.Puzxlsz{ie78w16uqaU|_pndf$?at9ﴹC?;W)eu_o'Lkm'٥CN{:q-)VULM|TClE{%ꊕ #X*n';mgUEm]=y̧^ |||4 cu쵉-I}mZLrDki+>)Ʒ`߱ߥU$߄S;Ub=N]UogZk?Z#}^m̞ܾv=d3Fﳉ-Y",I5Q+pOI37l-wvNۙE;.kLrfi+_*U[kWYk^x#ܷg?n@]1u3Y>>㔆GԮi;ߙ> z+ڱ [M1 Ku5}{U(Iep:^Z{e[9pO/O92s61$/p*ִ*`buZks3^pfW1sqUunhF2 Nm};gXgIu2}hIvêLJi>b$&+zƵS-HtwFdN@ yd~LKN{᾵\)ɡI5~3~$7[Ԫ:v ツCh:П)eҾ`~kav[㜥=ϋohٜϸzkj`3gwΥ60ܳA͸ﰪ:&W۪zS6,Vu*X!|W[,ݞd\ȩ3^e3%y w$Orke_󛢟_zUkI"W;5CE+O(pM6ݒߦv==Kg\G%sp;|4 Uj_toa+t,}> ƢT{SiI_~~# 3Tyzw`+AC\ -^`7vNrյl5vi;θzmǾV@U"2U9~S3o&9NlKlUb~ fq#|^ĖYUդ]H̪-P pbmiSs~gֵVDUZxvZk3+ϯKkI^>~Dk툪zH{({ ;wmq U68c1krxJ@Ir$lwNo{75ΡOyHL)]toq_+=5v bL56V2LH?;I^IZ0%!b-f$^5)#M)2ϯt?&$y $y2[1IR[Wթk>g6ƜbֵVVᮟ_`]ne+x^nkL餘w-'kUNNufڮ^S\6~nu-pRUMrzHޫVkm\2~)eVxek:z غ, 7^NIr{j/m*=%um]M'K$_=~sn$I9|kmljә^\3ɱ3ʰ*2ɵW#|73tXąw[U6սݵv_km2;9C;lzYZIvi? )X!]\f8k cg4]%Mp _%yS0wϪY5/ɝo/^UUouugX봝s|gc;kݷ{l+M}}ZQmsA*`0tڎ},IWXwI3o+t lp{1[kwX-˸;ΛZk0o7yWRLWe%u]TlێS.ɝf\wX-wt]^[kM??W'_<=ɛ[k{2Lc^1]SݗsU]=_lʻrI~q.;Zrga\o ۜ[~$Q?sIXڣw+I ]lw&UU&9ævNKjύvUUo'ӶHisѮߧYY4JwX$%lzG'9a i;'%DM< 6h;kTU%dS:lڭ5_qw=vz uڥfϽj=:Ne6gNIzOvR>/i`FV ,VkmZk{eUE~mekm5pᎻ[!,'ɯn[ϼna Z;0TZ-5a'}&2m<$ɽv/M$ Xa;M݄Z{pk]eF #ivڱl]z"|BkmϙA֎n(khM'*RywOGKtxϙ|ވw_oc;0KaJ&Q}Q{%S,$t.kqA'ϼa9~{['dM{U}1:IyPu|a͓c$oo n r$[kW|qǽW:4qGk]9[daYX#ph]vcZko026K,қw/HyM/=jIidq둿Kr%C^=O;g _N.zf-LW"l_[k{q HZ;"m;TˁIokE[{Ӳv6Uܡyx$o=~iz%ɯfvU렪ڳ&o佭;TՉ >'vߥc6Cf3c`*0=gVuUuRkIS9o];Wթ wOI/} ϫꍗp|$۹\0uX@kN7&yOkI7ux79$ygZ~ >IlrQ#&n2,uD ܓ1InZ{HU}iz7C<2ղM$W2l[y_wXݞ[zl{ ZU}r{WL6+'yCulnus}a;&y@jk1U:l`ўq[fG tsk7ŇI)Tٱ-n3GNŵO' ۓdpIsInzSm]&NpuTYIy&bkYtSj=6wO X2(O`?ru.|)Zk0f6unSyz_붷l̩uI>ZPk<ٽ$$ #zrleH$ǵ^ZD7>Cs':'*}nIkO֞ZcZk{~v1`nk$Ǐ!I.ɺs_I!ytk8'4c R9ݞ܁UO|΋2ݛjkzV/~o#֮Z O=;˺G,!#kF;-T|gu.IZ))eI޻zyEkSD$9qy8} @/)30Ef1qnd{U_l$KW6-1)Uu66SInM[,kT?^ϓ\qǟm-8 c soI^%'>IDAT NING_0/ǟ+]3,ܖXh;gتǭd\b=zLm~~m+eXnIni_׮X9%\䰘 6; 7M%a /j.[k%97è}7;="Ȩ \k߅a3kӪ ωSaf~<4Ƀ2`yʅ΍S3o~w3]%p$Or%ӁυNtWtSU?HINS; ldX{zn6wJr S0~S[ szկZanV1 %U5PC'Cھ6U% U~^XUgPc)I%]<١I@wUI&.֙IۡL}owwhLr=~I^&ÓSL +EI/v:|72,^SqUcfNrk+$T13h&9esInMT-Etg-InTUiWTүyUљMr$B$md:ڮce?-ɯTZџn pո??ChI>|WUOMr$?BInPU7'yjSvUm|4vxO[g5=%ÜUզy{ή'{7!63K؏GVտ-B{-/߭+V`:>H{{z3[RꄪzFk$yDc7}>#\^mSu-ڙIKrSU}kmpRU=)ÃgnTW8 UuUIaU~3IjUke|~9}_;m_03Nxw7ZUO'g<^U_I򨱟bU}{9iI>>>Ms߼MsM `'lk%9<^ 8~*3j+7_fIrV~렵SQ$OLsI^q.E3d$]W$SeL7NM޲}'&yMU}| A (!hx~rVc`I^Dݑ-ú5W^fH+UB谹#궺X ;܅52/M_OI=kkeu$ g\߷J$Mr$Jrd0M0Ing$﫪#7Q5CxIvsK޵ekM&,_W#g6[I:N0Uywΰğf 6&6?Ώ:^d >Hr+E$ s>Zkwf]$ɸ0 ;E>x=zI~;{Oza8AcylIuUfxI$/STi image/svg+xml Plinth-0.8.1/static/themes/default/img/FreedomBox-logo-standard.png000066400000000000000000002034251266051671100252410ustar00rootroot00000000000000PNG  IHDR[csBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxy%g]/ʄIAw?%IHBtQ2YAѫ&L2tzB&ҁ@@M"3Ykq>һ_jV0#=w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(@; pP @w(qO-?O$ǥG$j+j:J7[OǤcCs?IrL;9&$K c. L}姿/QIKr\k߿NrthC;ɗgJܗV>~7u=L|gv$O;~>.ɑi'~m/Cvr$~_t\ l-3=X*~8IIY|i,dKCwW {R+X{G|_?3p''yJ;9>/>?u>O,w}s{;p_y3i$I>J';ɎQOg#O'9z=P_o'm_?˩$H+?ջ>1tuy؆/&y_Zyw+y{~Qԥ}v#iSJPa uIhw ,cwXN'$$&poչ/ +ߝG}Ky*}QI~6 m~|g.ҍS$*ɫbCeHӯoM+29YznRL:KnNfɀLrO+5ɍw˩8ϼN&9;.߽KԻy;}+ͷnZ~9\wX~}'%UU>1p$ɍInpeg^e!d?7@$Gj4}{չ#/X?.˄_u_+o&yY# ܇ԿoI|ܘnzLfϾ}d(ǽJ_c ܓSIڱ~,wX&~}G&yS߿SP>ۋj'ٞiwq{zz?v~.ɹI~c=O/<;U2+;2>aޣNu|lKr]w뗎{KYrHIo]<8[;,cwqO#9a{ASFu:K|:ɖ$Kۥ0s {0ݭdSZ.zHs$?x瀻a[QqS|I;7̹) ˈf Wwr+#^ao_r>5>zq#7$IZoOσSoH;ѝ֥0c0N5Ic;^N>xP^2pz:uIJ^wwovr^'yҁH*Ay2SO;7Rr :{IWIGzL9|C@ydj9o:i;]J7$%y~;yԒ2}c=IڹaR!wA'\yk -SӅRۗ K u|'b]J W$'%]-pXk2#+9W'ܰS]3B3+}|'#^q,=LP> _n%oIw\wx礝#.xC{JuF';79KY`F`ƜpHQf{kxw5pvw&y;Xwdm$yr8P0p_2`}_aI;7@  9{*{jU\y}p8r}TgW|* w^k]N$9]N.MI}=}b^e>^1pHܰ/00#N#|4+t}bH>;/_.Ceꔍ7 ΅a, Dۇ wN1t00#N޳rppdj9Ek0Q5nխ$oJ;/_]S6$/Nrz#Vf؁5I{ҿL~ Oܰ.)'pq•ޞ䴃[+nk3}v+ٖU._.3ԍJrnv ܫ9Np߽N|}8=I~t5Rbw'\yw%ٕ[B{LP^2p|d:Y_'yEZml3ԍ$|OҰL}ɀI~pTܰ.)vĸ'q^t3#?Yhts}pNs}J.L߻zzSR&O7{pOgb3s+-cqyu[fB@'_,,e&ĔhpC;5=` 43᚞oϸnv/|R0θnɫ㑩3|g!0s0Şv彭V(8`9;=ߙI.OrԤ|u{X4,g\I>LeG&oI[G~'/wbڰI8|kar,7O_Փs r{/N$O\FkG` `vg`yk%OIl ,v潏<7%.C=ܰ0w;7$='s6r:@y&'9 $y' fs~2$ߩ?c/L;̮ø'1=8 k.S8;]km-{O5<$}e=LdFG3jdžv׎{y 4_'햽=&-{OM$U= :+|,wmo/5cU*>!nR-k8mYxԘ淜i{]CkwpJH3l/׎{q[k*pN^/=o:o'yW6oUk}_h~S=h;yX9,SwX&1nLH84!ӨoVןϯuOIwG$+S ?l/nntI;JM0>wX^6%ڠE9 mx &f|:㽠uWF1Fcg!l?ցZ؄_`v'&;+ IDATiX}j>mqY1mv$OTaT0YHj=ᨴ E^nح:$Hvcy 7@ 1қsȎs:;0l_?=ߌ{gYdxzFo&X5{#7hol-7 JVwX&:v<4 FOZ:h%f_,;ioM-OtSg) 'cV|.[WwX,ɿW=!aʸ;Bsߞ#l^u~]1 mo%yKgv{fXgonÛ}e&羔dQʸ;/h}ܫS;2[m?y1d߷FvUsIS\~;b&zܓ&7RYPClu=Q~IC9* `2$]4|XjOHD~ԛ;ff>~QTJt Ll.$m_Y ߺ?}IX>6/{>qRRW饼`#(3}皴:5Jl+3*$KrҠCnܔO!_{cajRp&vbKM':$w$_ܪ'RU79*$yZIݚ /Mژ*&3/rn_?ЧL ;,c}-ɶqaZO}n2jѮrO󒼼A) Yu[ܑdmWWYq`Ӧ$ ?!eY#plRB sVWw[bp>]I~QV<97o}d7<Nrstw%qO076im:2Z^Eڴn38Yn'7Idn#pen/'yN8d!0j`R>$m?jMA%T ˭nNf`t^괣;W•ƿh',!p}AvՌm˰3n/47Vk{$ֽi! A7I{̠)}cb>I3sܕdHL;$w&JbS80yʡ.3bAʾdOr =E ?ca;ǵ}ȟh IdHTVn_?7W sv=y,6iH9ʈVim%o͎$'y gz?I>Z+l)5gut{d~eƒIk10u*G7%7<}k F=S\do~ }+Jtj} HNG=N[i:uу9E:\o:Fw*[׭s.לqasZz@ZG~;ڷ׻;ɋzzcv#o'yA^'poRMk¿i{:0%:kTç`uo)v6m_?wI!2'p8JNo:.{㠼,&s:[޼V瑵C6 %Kzo:v&yug'_TE'4US%%v:tkk^3p߮b^{`>u}]]˜2nm f5 ;Glq1iZ;y}x''95?')sԤTc9]^?T5 xԸv$>SGqO`@胸>5| -tv7'9 VՒcn`ŝlH7]^cSoؚ7* ~F4ڷg^ؾ~k,WG{io79`=\J)5|d m~K]7Sqεo߇ V|Δl7]I:w޷$$$i53o qPo>97M܍i`X}ܗ~dDchH՘Ҵ& =Nr~;9A>npŞ.\qQ&Q YGMKWSzwN;-T Qw`]kkwQ=lyגQo`śn`1j7]v$;**g(Vc;ГX죽C!mjjs*w8MjkqMw$yM՛.\̴/\IOiS69𾀒7J́ߊ)0`kdg٭$i-ݻdK,=Q%ZǷz ?|N=պ%-)Rz_ezKG:o$/T>:Ũ[;kNZnz}o\;moP݅E o逎7l̩ˁ;t]$X'F:S栲FV9JS^׀ߓ8 YV/ZqVNu>?21ۇ!!h4ҿKf$ SqEܬLGT^h}&6+^s+̺M$/HoI jիPLZ&0z5ʖ:u[v?;qb2udp镺N2ɓohe7_bni[.Z[.Z$IruoƜKjNzKt2YFViV~ѭr]O'u\oh8 墕墕K$[. hqO ޷څVGo“h+SʽO$/O[.Zӂ%nh'nx3~{K gu{O5h䶓),7}sܓ&IsD0yKI\:s_޷t67e!h-R#[/^ysO;dXV2MEGђ9@Ew`羚~Nb @_C !WUdZ>'ox[/Zy_i@^˷^w<. 7FcʬnoZDZ9J@7bUwe"k;*u~\ɷ^%╟~+.ɏ'~k@qqUvdOS|lB w;ٔq/C 3@߿^2H'Ioxnj.^i)I.m'=|hzy~6% }SRDjwxpWwbZ`muھtp:Vst.U{NJtʢ}ԿB:|p׫_Aw'y.^.9=ߞeI䨅W^LzUWW[{Sk^yCTTЍWea^;IZwnoqҚԷ\hjMOa@c:fn Vҷ]^t%+g\$I'٨R/8S9C9Y WLՊPZJ͑SVɁN_o)ѻ7qz[|1ɯ%y.3nd?vg%9:6PVWgwA >3ЄeEt}7$U9{rklծt_;[%+KV~abvɪ;<>J# jcn|&Ԛ[2_H$?$lolտq٪ӓW-S }(atv2U{v2 @/ + -Rd넁iwrZګc}\1otk~*+;a;.[$?EInp{;<0EK]Y_[&}2h7sUNVuBUA65vm-I^xe`UH\i'/NʁV^^mK>TW[b;sH{ף: qDզW]z{2Nsw\DžPz`e.K;ONCY^mdi^Xňt pj (Z(ٳЁ>_n'qw\ꆆl|l|O$Y侮K@MN֭(t82@-wF%CC hʽ1]])olq٪/UoMv$_>lg)V._*v/'y)wmNrUskIIXSCj@Lb;P@?$zSʽE_^{%"ɓ0w^;/_6OW:ÛVvRݎG[1q]#850C@?TmmeOZ*=1UK;dH$v._ʧs&ד 7:6|C݅Zj>]ÖZU4ccU8 -e~C *RÉUV=qq e߲]՟!ޓEw^{;X$Oz[,xػrۖ78 BGlUM$Ͻo.0=w\ߒw+ۓvJчܻ>7J~Jh+@mwqwdĵ궻񼺌+ʽvz%`TNzCJ It|bV-x *[:裝uW'mb2q]$MUI`|d.;ɫ۫-eڎs߀FZ}VV]8 iI>j>u_*ֲMT@2H5nP7`k>N$;Oݸi5kL:eNٸ-I'z,ڥqn 6T[݅C6ǎs__pZUX}ɖ*}kppdV05NYxzz4i)өS8u!dmU.LS6zH$$v`GLp+Q~J)X>xdFpm :6UM_!ZLWzV_B_;u!|eᔍH$a{ݎQsǃJf1W7;ϢG&phUp>/5J50tr+^^wmY?yB 3ԍ]w'y[GF~W>?,5=`Rb_tkRLcd˛ uT}WWj[d!||۩w7]k &֩w=2RŰdPU;7;RV}X?$_9RQ/Un-xZ{{zq*/9LS7:ԍHv4lﲥ_^LsVw$pUU &pbczYM'02^ޯvuԍ~2ǒ|WAu?;4АZ1eh)?{oUVE.!k˥bkmՏAހ앣VNOjT٫6!V@>b[US[+f5A ;BvBXK?M$y{/w~,2;<Ϝ{|'cI?{R~Lq*cj%pGx7.}ij,w2,;{ےnriyk=`OvܿS{Tng@wbK${ANNE?-; ӧԆaן?R5=p;xtV#C9SK:Jƻ#36a_ߊb@ $Nv//-ˤ{,vdHw;)v[%}aaSMe۳6מno-:o ;Xɒ+;n͗9>Db&%ٓHz5ח$n(Pԕ4nփ9CiN䟭#a;8)$ IW4Ƒ,8QɅtÚnwE&bS$g ;p祇jOQ*m{;7p'mϮ3 oGrX;ؔJI$=+"yع{?ӯB`WC$D=`[vxG9YGʔ˿ .\~ ._Y K%7d{oy?kֵ P \.bB;c rk3WjS]ɑ20[;餛|Q~ _΅;9I wח%ǒϞ!7y#4z|w(#e#i3Jq e$3 !vʐ>yLqg +%]"I|ÅZҫ~۟t_N>Iڹp1rfIߩl/DŽa1 IDATc%Sw=;YVن`+$&ȝgX\|)^аeJm$)c^Iz(sot );.o\869>Ig퍿c~VDEd=|0$^-&;d'ckyYL\n0lpCJRfpw"Hڵ\>Bҫ% .cf^8f\|ۗӏIz/&)WHg3掉dٝi|1  !ߘSi#%NgNG-o MқvIozÅk΅OٹpV9+Nl45_pco5Y"!cfr ;._s+$~91nG24%ۣ5Kd{gH&Lw8,e⟱Yu[Mwrˈ" K7k9sVseYtjUTJƄs$[r9]5IWgEd{*T E; #e hd; {ѳ/6{-'OcTbaф']@fhYZA);.oKv9<;uĆlI缛9k֜?Ӣ{2Seb  *id8Æ^l<%Hwv 5by"M'7]i ncן?xGev%{ÅɣJ`9\8x;6I5_e_m?(v3tb>e8A@w~Xҽ0r.r@ȸbKTb.^0f޲ ̑/h {+sO:iI?sÅ˿|Å_*sw~TN!y>W?3\CGH%̝aP~ס`]B@PWJdO$k(n$'yJ5l&ռ#e2x/_3D99EN k@1;{;{_N7fq^(}nkO_Oxr$um`>0;d0r)c1"wl9rS*[L ׶N9M'eݕ^\;.E#wRII ea/udHrd]L2cN༛2?%]t%ݜU+9 SHpto,gO's-l2NrɽI;.efNHwy;{?/$}~(Tj=I,/K%v0{XOeT_Іte0I4#k&KkNdۆݐJ闼ǫ(Uk{7d~ps@޹poW?c$,;JnZezUhOͬ񛑣vܝg'ѧ+U'ot(L@6g?*._X% @5O̸ZjrHӥy"QIxBgnV<{˹{v~`3k{v6vM%G;u֎ k%onHz3Kc'=v 8'ms^4!72In#v$Z j[?UzF)ʙ&G{i*Hܣk ;{WKnI7J+ɻJwho ml`L&Cr QStϐvQq줭' -z.9 M[`5SЯ(g^$$!ZӦ{!r[Bw'ꢵ"O,"dBxF5~f$[%rzy/Ɠ,׺xKbq? I0Iw&R4 ppxr͌K/M]L^քQ "sْ~O;33{:w}.Jzy0ЩՐ<' ᠜>{W[lyӉ;^d:wDZ0W0 8:$gyR/..ӂڅLhe{~p͒~Mgg;FI#fI^={y>Sd?d#/۝EcJEnfd @wtYD%2<՘`pHŁb/(XʴD؎1ψx9[=Kw 4%cI|Cicqfg)m>'}do%G$ |$6~u綧7%6ޚQ 75dKQf-{XPG&/zI[=њS"N[i4I?{f࿜;vpg9r 9=/%knօpDo\$gO_#+#I{ Gdmk f@@-ǒ#+-2!1q}13m3ԋM쎃Ly%g{5_,Μ?x˙236Ϝ?.I7tXr}FP{E{xPΞVB21E.2Z;Gw( ;TawH Co++stc7;%a4hR(ޭ"|#d pϕN+Ϝ?*Fן?x;qz<~wvdV}>K*U@@M(S a22rEy';vtHNc$mt'}OE%ʓC45ޙt~Iw_u\?~AU&  *7,=X~עgpy?͋⼑t?Pߗr+-ֳ$L޴jY%)u%NH_d_ޠbmV~. 7*"Ig Ec?pH:S;2Hh*V s>'y1^Q銹1AKz]A,_ecm+%MdF(^^:ik=_k-X^r@VFNLx&vP2!Z)N3vz&r.5X+ol8cq5!{owOoh.Xl/ׁͅ;-{M w%xi1Ǩ*$>3Q4,aXHB'I'b_pcL\ZƄTI_:I.4@wߕ}SfJDڏlO5;aIߟQ &` tNu7=A}ᄝ' 1|=ݟ|O<9I,+3ViwiC.% 5$kEepy/3^ ~hr<7[9YroSIHtKM# Y7r7nmi `L@uwHn02z ,2)i>u)qt+ '3pHvRœqp L)ן?7Jzcx ?7$E"KQg92iάlw d<=GzPҫ-[pgѽu!4XX_^X4ޭoi½Xp{J"tg@/rE'}=uߎ,:KvKjӢl c9k?謼wP;w$}z~1)z;}{t{$}+nzι7 wo,ZMi!ݖIw_өLO˗뾝Ҙ^VN 𸽮p}6Hޟ7pݾ(E !b|ww\kn!R7%Wv*7’˛<V, ^r ZM|2KC%M̺GA~/HKAcIۺb0&ic^d$[K_+DWZh.6EűO[F1 j'<#³; @w'hjrݗBelOǬl/=,K@nJ%}(i?6\# IV:B;yB:IA|*Ik5p7}mBd=S𷩧#×ӆ/w{qʲ_=lKRr?7$Fgw]VbRs2y8F/OCZ6)/&J長v)ڞ*GdԫG qM^*ړ.:7F }=w{B/D $PY/I.Kl)33j6e}ijxtN^\HYw|;DaC{I*)ΰw;^\3Hl1I_ь@2ٕ#SQ.3]W躘$.Y½[*KDxHLO Iw.&vߜ^b.%7Fo"=!W8?ѓEo~e; `inF_bR MU)VTg]+)IKQw:9< OGz m2f^kjV荻!=)2 UG>'{nl1ARCIIҧ }MKtƅ`9i6aN[VMIA_: q=fBFOcu_~awhdEFG>'o_tS9AMI_+K1 T JiUnF}gvPՏ?(3>!]I~l$eI/X5pCcw$(iU{5{Z~qBgOX -!{]vm/yˇ)Q9[˔ejxq0Y?ߖcPj=6YҙOKztbRŏmҰDޮ|j'#oy}Q,ܻۭsJLd,Y%x/1v(f%ه3h|98l_Yq^P%w?ٍ8LpnSK$$t-CѮ㽚u3$2'A1i MU9fopؔ-ٛrKSE{T7!.=JOu;ۿ*k$$t*yJ5u™_'s_ڔ^)oM=y.NrͦӟyˇC_8ۤ|^P|b=סvWK횇;=Y{8N=V%H?Ip( `eޗLI.`tOvO^y!cfn_9i>};~"ܳ~do(mfq'Ruc3Hvd{0CnO'Z84Rn/f:fM{EYܞ ɨx.N^; o~Qʑ)"KOΗ4洿ʁw I}@uMXz/ߌIz$dk/nfwR@ʱWHr>RZ;M/sǠxe$y'>,BW)9m:(-"'ao}X_ă{ v;H[|UQ]+$Kz/%X \ IDATngҲ$%tgtOwӄ{0g@KWǏ Trڕk 4LkI v:A)sE{Cck]m?,f,.SJ-^@bʀpfw $aJutϨӮepL4^ yp#խQ&Œe~ijZ * nΥisv")ۣ^rEI_G ; wBN/K4 ,tw'\=_iW%,4\ϋf _궺Uaj~>>T?D^m`^3~ o~&ZXIpd#/:魒>ӏjȣҽ]/\#2wzJn|ӃWIz5Qƚ~/W5)a M;WW| _h}f_v>=$S AI%vV\n#[}ۥ7WIp6z 0IpHOp4GZZIWGdmǷ7{V0ozxo]ŷDΌ1/qjNn GdyqU/gF-ӛE[{֍pW+Wֽwҭ~b,Gzp#K9]>I&[%}di# P'tWjIF~74S7_K㭅۰؛|M }+oFEW IOK#e )ʭh_T|q ,T/H pj2%ysn%E7I"-djO{sjwIW/9uNvwOqA]4vO'H^ExҙJD{Ay~BOyv -IVyv.Iw=Kg%=KrsxrvmOG$jw{oJ Y„T\@- c11zFAQϜb0nZ;.Tߕ;$S;<Ci#֒;n?$Ϲ /%=OvsO].)pzUXoןvOOMI\܊fvVί35{Y09CfB_TO,Kqړ%)NzgzP`@γOu\ns%=_3$4'ڐ%ȖHR.{v^ɵd ϒt|X??!ƂƩ{!D|<%16On[ jH|*=GHetY?ګQC ǖ_{SϜnqS?'?Nӆ-Ue$9}oio|Q/=I#sExkdMS'|;MnHY 3|JxBty%'u<Ra=)}Ky'K -ګ~Xp0Լ{#Iz_ٷF,|SsSz&NHte$m=xzaS!A}_b))Y/M-`o=^Vurlo?$o꫞? )ŌIՂ ilSnVTxWZ ͏K:ݻZ$PVfJnNP'wԋWJKZ'uΥO \ZQ9">rdwDj_vt!]aIcH N`@tD%Zt1O' є/GXRdwvBۯuk`'sc~Lڇ/wr\*gKؐ \w/Avbs-V*:5sg{mjJ6Kio=A&{7pIKYV=aCZ xfo^{h.gvi?}?ِpr?IҿTKkIE#fuBd+W%C~Cv3xUlH5Op)wӟpw!?YU23'|H{?Xfo^ҟwR3%(_]wW u'uעl?iӦр@Ηzb 6x˸/H@Ί׋egY:a~8?7Y8,,ڭ=ZiIGDd{$$P ؃p&ȼXgL.WZW{NnOC\o×_W%}^pw(T%{3GIƾʀ֞L࢓9 %5wϹ $(L,{|G2__Y|Ց5${3OBJQQol ];ZTF -[ v%J=C-ݔo)IDe}0m͔!Ab`M[w[ %V_OA=SlK/dmJ/9n .3snV%wIϹҟtSřiB5 w0>Op&t{6;6Iv!GR|h21I<7?[w"]M`oZ([=4 (ȖԆh"&yٷ] IwHzDh*jKxO؜lU~;R&NGF|jOP?tBcsJxjD6LO&?1_՚u0ubcϧ;$}5c=Ͼ7I{VZySN/TnPM26.}ڜ2"UC?}ߏ{y -KX7'C4h}9}>KlpcͳoxIoI=SzϷ$ ݓR|qGd[{UM7'Cr:EFWC(s-}5z V+vg9T{l.ӷ* w8N%%BsDW`sIٞpU#e,`OP5 pg=."GH( (,V^St….ꡤv}|y¾jo;[}J[&>J9aԮwWZXgplx.=GW[i4ӈ*̵%M&·Zmx:舗|j5@p!O&L~@ͻ/]ϕ햍ϤgCٞZļYha5lj5eSZk1?dS#^F q/|tu?:_wv 6 |~`r{c,AeAk.IOߎmXgp,xbɽ{t ^puɖRQ H!Lslv.jvi2 Cq(ĺ0+݇,=9(nm[thSP}po,g{Ԯ{|Mgcwy*I؄5>LH翦nRudo2x|Ѯ][M'*O|oX7<=]җ{HIϖ#͏F~i|mGTƾ^L7 ~_ 6V,ӫ!ړaψtrk/8{f+ ;3b(R˦ʎt%p|Hc綌_k'A;e/1 w7_%in%oQ}&ڧV][̐LӀp\_|53_{wXgIJ&}RSp%6X7B>IWw9{r. gڈl1ӹ?@iz U!z3`/ibc$Ed~rl6օ4m>Wҟk^s6|~LnD&jvUZl kWnO4?|~bLo5shP($"-nJR'GWL&26}yEwzw 7ӢeZ;V &`]ybt=:ᝐOm|Lk*<ݓKSSN%S\M9l]> E ==\^lM7{?11:EkOCzIno %|}. `=qzQx)/S,zoHPxK~ij%>Nڪz N~6;[*ι'_C4z _h,uY}Yu/&ZM38g\*A_)鹩;+/LMb*Lz-9}Ϻ,YpO+W> n">XpVOEd5\*+Kf_&sKD{!tDg|A,`] wX;?+I38;܅);[qĉᬽ> 5v[plJ>哀74OR~LeQ~-xls{ ݻ~b; pu䅳P4>-S^]-fheN {ۜs}b=^$ "|'7MoY2[pRs]3>Oޓ) ~$%Yx}mXd\XifgFd`,ϽKm ˉݜ>,pp Fd ^F/Of:=a}nagǶwXG^ؽ`LsZuԘoc3dkՙ__p/?Rf >^ dV"x!s%PWHT%>#JX8p;x}O|kNs]x_m&O 276iFHUjJNLKFm(6{t"`+/ ‘QK (Y;+kRx'T;=L^]՚Lo N}ZB $Q Mn8b w'm,yOrF-K)k'Kkf|/XkV8=:qŰ_ɩmﶔC{#) lKS9[7Egԑ2frXd&YJ~rE{琥H/KK-t2tO&hc!3[Tzt?M1Gzck_^YSiZ ,)퓂hZSƗlMnjc@-.4Vmrў\6IT1m8 `pzZt9"^n_ROpoȕp/)d*"ܹPcp0zMhǏ4Ȗ O3m8 `xZW:ԙ8OH1Wӭ,]c@ *}si_Ւ>+'mA /hm zG ˖*hO.[O#"u0wX?HIO_>sL4S{NxO4Wx7O薌67]gΠyZF(/ܝ:~"=DC+01߄pD_w\SL/eڽbbǴsۢ@KSURfsLQ^?pϐ-寿k} D{|ψS퍀J]BpIOLڲi~e}fLV*75|48z4(36hOvSMϖLpӢSq!eؔh=CC&d+j×;?cp%$,Swrnn IDAT0M({5w]R[nfȑ^eN/{KgkX[%$|c&WNާ1/͵${h7W2&>5 =#Mw^!sL )ffr~L0/LI 7YJ#gt<ЉMlI3S򗴮đ2Y7h~F MiLQ^E{NQM,=-郦RG ; Ag9S[ߖuuLϖ|:SxnJso*IkQFp/#I%F])!{W+vS4jlTXcN&k{^rG^]銽J~&¯U_)lݛ YL>-T:͞]$ AVўC4#L% wX"v;ytq6| ٝ37@1^zL^o|粙M%]ɾ ?#^\NC9R&U~rɞI_S4h_mAza8Ԑŕ 3-ާ /pBS~&ӕYӑ >.dɕd{8 `m/#2k'wr3[K77L7Փɑ2΍ 2V^.HGbK{WIO7`mAZђՎ9i`L^,Z(Gdt7gqSbp_2Kb7CARўgD(Z8b `߇=ĩLz[HjgD5VO4 HrcKΆ^{ C'J ֖jGLv7&K{N_F~ѳw3 W=R&bJk[:rs!ًh7O#Gj8 `rLgo<*!ĻphpoƖ)+Q o04Zo'D^WAh7kO\cڽ13p}LtspBϓ˾"~ ߪ߲9~rdFjUf\dlJxg N`h/ok  cM/Te̵{Wr!)KW"~1nՃeb~=SuNp%y@q氣3՞ਂpu,=$,SK6ߟſys iήn%xiąpwu΋~t ^h/=fi=y>Ipk}i#)ys,>fՇ|h/el9r ^qN|qS<4ʄ{<Rݳqd^]8q  }^iڽsLk,8P&]3[$DC|m>K,ltwͅ{ljG${I_]qBF_nX<4$`fm#gQI~ \;nf.]#eF䥌rSF&рyPl7vVC2R9VƏxq_*U1 nrˉ]?st9W}٭6GʘǑ??Y[m!+{k?Mϒ&}lpSI14v,w!e^~PLv&%|U0W(L߳rݷ0rd/]DEMCKz<#e`p-ǨR#`&󎙙Mc Z<5餙](1`SWAP nXpB-3ҋƢ *P{ )(GhOnwVwXGɍ9T/U]Ab|lY3t;}@+^Ogqo,oL- ,ͦ÷gp$HX;sDҝcg)؎fX`sXจ!ޯLcW3k>e˪޼)-s ~-I2&w hg)s}.OAoh „;+obi"|Zܥ1iFk5Rz̀m͝>ٗN! l갏f1}v !70yXoc֕7ubG|'Y13xj[f|&$)ePH* , JQM/vn<@v86 `]ٗqIn^>.'m,fW]w?l꽻`?'0 cZ$ȣH/Z|M>,_@g$]Eў KJgZ2=Z =x4,_.za@_E,ޔ,DN,{%w?Rsp/e' "ޙ6'Cz;3?[ 2kl4ƭK^XQ/3:S/a፫j4-Jx\z=7?7aG:$'fz{dŪm{Ly'5ȑ=>9KUnxjj}ZЛ'#yV^Ck=d4 Ou wX[sӖ؜)UT<3kdr6+tnj8~ `qOfȡΉE]IOcJ{ }U;O.Ncv&\T>3SN/~7?mG;5M̩EQZْx/u{}(+7yr$_9b; JuT}2V6O6}[IdYH%ޗ k΄(WSK+1.jJ-S3] ~?-g2w8KiO =@r[*(AG1<KS{͂Yٲ˗o0Ooyt7罷<#i;=%ɽSRozJO(x*(߻~d#*YIN_S#\ziLL }Yun-$q O:$ÍX cVa9dž̘֞,pG\*^5d -b){U1ܔp0A^=7Ji9Aރ֓ߓ2SLq?HzagDD9jM̑31~Uuukr:ƹv>1m sA+9z*OwJ>rk崓+~T, {mXBDZ{d_ַ& B/GKJѿA%{h_ʬ?huaI<#5Zpc]Ay}xӔ'w! P+E2~|;@/Sn:طў׿ӟHV p-rk}^EIF0˒a:.Vqj?/e9D-ճi$La^{>g^.dX;px>N yCORՒg缷R%/'|x }{vxsRAih/k%4X{/~ʛ3Jw8V396)&D*MYYNM>pkWC(GC[ȐUa|jnOvsJrk #?*fOBoWWO =nn ^W"O~$2z*c"WO7D{n9̲krnm^ *m_i^ḙhRxd|wp~ŷ͜i Yho}.%2L2K%w8I=݋&I`Kםzwyk$)܄|2#{eӒ왢=7Ivo;KJ{XIg$*[iC+ *;ӡcy}e_~$%{4{sn`}f9) eùUIIوfH=4cL]k^*aH*RK UDժ㺏2g{nһ9f sYZ„;o^%CRч x?h/6K> 1??l o-_3u_|=B`h`zdCϨ\#Kj2=}Y2EgZ[;@NGwt#f&ߥeLKj$TK(;$~.m d/Wa]hIrXA.;O%ͷ k<~h򽕠>#[=?t>#xOkeHt#%!It?8 |˻'"ߋh%8lGfo'$}7zȺOHzBƳSݼC6'[h}ϝ~%5qB=HvgJ<]l ;@NKwFހUDlTb&YOO hKo#v(z]>TO S~_7_3xMuNU{;owRT+It8=-K V%23tpn/vIF >ޝQEU1rzxz_^D!3d&!DWQ]EWXs=AP!  ,CdVxTWOM׻;ACtI'7;m3=w,U"FT<$wW*zY;i0vx^;)6}#_v貛lZ$I-$I]:lOuZ jˆn1k<(g~FĀ}6K;|+dC2]vCK$iwI6zQ?i.J#|N{ig-ˆnY$Su_OCEٻZG/rtM]v!IK$ѫ> ,HixQ;xe#)uu-ˆ s-/K;Qr wvŴ6x핣n+I$m]$)^u0)!w)Ng^9|oINlxwǬrlWrgmuUh;θrtyI]$)%^? EYL7ec]S# OS~0Vny= (@~b;X)RW.;I$턁$IRݼ~X򼝾0NwX?]mq7/eK^M.tE̳^9Jm5np zV$I0p$IJaL IDATw6o7jlb][`xzj%cGL}ũCgs!ן?hS6.%I4wI6$`#o}9O{wns~0^['(yoyQ*`cT  7.c $Ij$IR|8p826aQ?禃z?Yzkfd-w8a팡}WοrNg͛FR$I&wI:y|mIs=7x#Kߞw!:j|n:kNVR;WNg``KI$u]$)CG7dn&`{ wjI{Bk\>+yƷ8=:bݭRnNA;IaUI$S$I:(B0>@?}6zlջ9 x#Kl5xA1.\?uh_dd_zJ$I2p$I]{GeiiN%)[IP(]>6] Go6i n[Hi$dofwiF$IwI:a$f{Fﴭ\6N%] _ltHv?pv8(;R\s o/;6.$I*wI:yWko;xY?5~ʾn5,Q[xQ+>=nl( FosM˿yU$Iʊ$IR:9wߋ^.ZK/^}VJ:r|{wFsJaC;p'FQa$Iʜ$IR:y!sw({eZ WZzk#l^}D&g&nȾͧ7.n$I]$`ݼ`8hu5}/ W_j٦\8\sՓzi'3H&d>0it I|K$ԡNaݬ:켋WZLY\snI@Xf~'Fiv:ǀ7.M$K$\';?|!bղ/ua8rUmgA$IR2p$I;V<XU;#\ b`8"wrLN!;l o3h$IG$I}x-mOwE|$hFWkkNGj |`89q{~:\u+K$7wI>vא0ޯuz xyY`/`W-v%iV\ ݀Rg&9?I]Ɩ%ITD$I @kI]/VR] \CIcW 8x $+u-|vT I2p$IZ`|zo'vyV$dV/&^cW=xI,ػn.#=Ɩ$IZ %ICG7 <(vI$$IZݼ+p(p IyO!sCW^NqUw#`9rOͳO=\ t򟷷$IwI$Tk*{n9x'Ip~mߓeɶW.-f6z՞=p^vvm-Yo-n MoY$Is$I$I$` $I$I$i!0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$IK$I$IwI$I$IR`.I$I$IR %I$I$IJ$I$I$I)0p$I$I$)$I$I$]$I$Iwkƍk-nc/ɥt|၁rG7xp^{MqOJ:Ǩ~n˫HIŒB5Hƍw%98Á, s?^>00 ~>E4遁-i۸q. `-W[o> |^;3p7<xL|+*ޙw!ԏ6nx&0q7/@}HZ@6nܸ8ksHn``9#IR!Kƍ {\N?3.Dƍ 7n.xh}HZ@6nܸɻ ]$Iy1p-' s9+ϻI'7n+] w``}Is7n| CF&kw!$ŶXf?@8$R?|7]$؏8ᾤ>Bx1<x-O>;y$IR,ul)Ӱ8jޅH$'ɻEQ?'|CI5wiٰa$SǬɹ0 %mN[(B]" p O6lxݛʻ IKHJφ  | İ=m^$I~}oذaÆ%y#IRV ܥbÆ  <"Z$I$ik 7lذoHK yOvIRA8"Tpyp)8$iAq;50l$I?|;B$IJ#ܥ>~ZuH=GJ*"MsB882:+.@6H*"Mv{[.D^8]3{W]"spYEH$I }.B^9]3!7]"SO=~(RIE䱩s9SOVޅH-GK}sx]u,2y!I$-]$I0p .b+SO=y"I$-/]G], r֟ɵi5z$I߶viO˻v}ʱa.ISR!%2>bŊ\$.<6N2u+p9sȺubŊԿ$I]3p#s`lŊȹI$IZb׭[^Bigb{,`.I;Rk:+VSغuvZ6[ˀXyێu-!;X7Lm~p+n úud^~~ŊOuJ2-mo_nŊƯ|[nne Ŏ?u+V[ Y֭[?p-!y/wvŊ}1]ݺuvx?Ay=pv ϊ+kݺucTMMg|-Q7Dԑ%R'o̧ك+r/<gWM033Ƿ〽;lFuL<8x Sb+p9Ui:88_0fffEG?vIi֟9A'K{l2i6_!r9ÙCv088H}umffHۖ{Ͷ h-*>2733 ޏ`xr.ɳb>||ppW֕%W;Ew>|~ppJL̗HrG/uYeF'}-%7i skff=4p`_]\h^e*I]333?#]f~jZ'o֐NI;zidfff_/G{^7Q mudfffo}# wrDžui~8xPn냃E!W333\dzrk{Yߴ.mV]=pr*w f 9Zvjfffw`$/S?a={^AK|=駱YFm/'@rFݙyuҽ>˪u|xw<+r~M"+SZ <3f\vk#ד x;ҽr9SlSR ܥ>l6o CSϾl6eX+5C|{144ھfy8pҸh_<\CCC7]LI$s.g{[7.&Kf@ x ɔ`hh{\؛r34 ]w15͏Yyлۨc?z-ؐgld4?$jCCCߜ旈 }l6KrgNL Nfyp*ɅI`Kj޽f^A1w,5%SI=&%9rhh(lbyo6kIιb}^444ta$ȇJ!iJl^4sM=i6&9|#qFz8C֝(*4裠}"T8$hfN"6Oz?T ?8E2M^?cl6_1 f`li׃I~Gl -zԙ+s3gtuG+YK<q<ס?]Sno>.i6O}Alޅ9ﱤK} /WkCFQ+y~x駟^j4$ٷxk8XqG;BX4{XIr(OYx0pPm4gkO?Th|S|hF#~LRvWi1X!i>~~Fc=ɜ "lo4{4HPsؾ'm4']HƣKHFSs>4FqϼiG;a{!4X8al<+Fp;wh4L0Ȣ@rzu7+7eFs(V>ۛj4w˻>hܟd,}6){nmk9paш<+R_'EI0p@!_mOf!\B8%$H!!ޔdBxO^W^77.zWB+!Wt^?6 ~OB4ļ7rL;zQ\ 5^&] h=pA^佬o ! pBa)!ov m\(B:^aH-FˣBT!| 9l !4agBg}7f>I2p4GP^?^; yדz,{#%W߮G]zC$ƺ{#/>SzX^/F/tz}z~.Q࠼hmzCz=(hmKczv^X׫$F;ےRuz`,Py}}ہ yb?zz}^:3n^D"jj^L<<3~Sߒd.i.]5G$[z}$Zp[1GΧ^ |h+Y v/] @^߭^o3O_"bz>piaFK}/$!'G[Ǐwȣ IDAT5 z}_gy<44L^{@ͺ{9pI^i38D:%ud pA^BF33UK} 55!dzzzBgi;?Bfayޗ${H8I-GdZc޾, !|qzzDRfUxO;] !\4==}ѷ.!u<:P3E_߻k8㌿dMOw {YBSzyOCkBʡ֦fzz!=!3X8i1p-E3==x7|+)3sQ5==p$#>{?s_LOOߟB?s!]LOO?2cp里VxMOOD23r*]CɻF6J>sM33穩Co.{зKc'B{ Bxjj*C"!gBüJsy>gї ^߻/g=SSS8@>E[!||jjn3<55uh. 1wy99Y^E ԋIF\tYgu+wͮ&''wBOektʕΡ_I)3p$v^499+~ٖS[Ipp-Ҟ&#9f>fv.!׶He-yɥ+W.>ggԶ:4990w@~ \HS9¼LNN~aʕI-wmU+W1B]Hyw~?F'''nGr|v_H~(L0<99ŕ+W~W\ɳ?MQ0&'':v$w.IZ ܥ>Hrv^Bx p\Ƶu$S|RVjh>x!L+ܱj٥R4jM$S|T*S&qp_]Ӂr j}Rnw-7i-IfB}ד/SRwT W$+ wnV]?WI.ދgkJK }G$wc]w^V9|wV{wN;7Ih;[Bἦ5=iWAr|Zσ2pƀwB1UԞZ?KyqV ɔCT*6KR^ y#3I JRGs JۀﴖfV{1t88+v_BrBV2SR黝 ? |VU7o![jںRtMΊl|,RtVh]'H2k V= xV]HT ֱU$RcWĠ$\R*~jܭr9xɅAVۓ9+'}sV@r@XvZ1n בѿmygRZ2-x'T*=|;jKIXaßtO+8|OkJ7]V-! j$wU 9JTՖCT*FCZK$wxn^*ښZ3?NJ2ں8Zv7L߷]*zzlV{ pNJtbT*tJ /.Jܧ9]^+ߒ:6桞.d4lVL`.J8#_%>Fc!/l x^\ߴ.JNLL<hNhߦX*˗h[ % OI,LLL$kb?"));$-bN_.W#loypDJY۔KHnGc2011s`311x>~EؾM\\.6fv!13Sl]o1}GgHu#xUValr $u_now~ n0)Q)$p|7alry%tJj[SQ\_&#叒coVj1j޶;In4CBωX{R~T.ھs7b;Z>Bx\\Nersܞ !<\.) !1piS /\|-rEjS"nI1mGC/}W'XoBsSVBxsL^J*.47W]D~CPT*mڇ~F*-y3" 2T*VsS#tj:\T0vT՘ϪT*߉Joj&)x(ۉ=ck*WQwى/W*FT*Vo#-iJ%+ʇIo+dV*۪lw'^VTT~?%YJwQ;rqR@T*V'30*_T.V>7ZV/T*WTսH=ĽNRdr+JC 7IJsyOR2bC$3~$yǺ\3_yWWwS!V yh,7".juw鑺 xKvdxp`^V]T~źy|V/$9 )\z4XT΢Jjz1BxNVa{k_?6giV*-Ym|*!Hۺ[js;©k׮}Da(`Rٔ~T\^vmgB]I63;QkL~܁ x[~vhxx@Rw!V!mFŚ#P};Qb97scb|溾B8>R?<<Z8_ewdxxxkE9 zsyÿL}cbۖ^8<<|k6<<|sHF*خeiy_̽<+礱_ױtϩxqmNm@Ga2ߑ?{߄^& %-Fϻ|xH1Z ==;Bv]m0>>?plʵ̇#w"!sUǻ-oE yc޾xa~_w)vc||<;#[="6wHFٛmddd+pFU###E;YR %-FevM /y+r$r522r5]:>>~.{ n[=Bs;iY WIROcz0@###,]#^\:>>|[oG#Ӯ prZO]x ܥ>VŰB&0s\BxHf{BxLo罭!F t8Redd$Ɲ*9E###O9q{ )e"lBvbP!l !|4ҶwxSdηmWGڶ,m#kulYBʚ5k*)}.c422n'cl{;FFFBx_>i/WLT|#^UVݘwm5O0k֬i{5k <*z)~xzsuE? Ej=.]KY5 HwؗXR8_ ,㓁en^jժ.DR\R(U۾!GzO Z!?FCڭ+p\aŲ (C:klll#"FaSFoqG"n/!t<=}/2ƞ/(\NܚJիW70v9<0woS*H0[獍>Ou˽"{k?EO^:}oc8z_?? ^ccc:}ޥNV {ǔ2ЏS,K Ǝ^z5;PWV^˱t8lY # ڎ:W۔%]!{7w4::_"i2ěV`ykYL::/ 1 BnttӐ(LuS=`¯#uK ھC"tCS7 x^'+Ew"mN6=GGG;4O#կbDNX;Ƀb=R?ۋ}[|;:: X߁bKQ|FGG Ȫ ktty!)_~a#q2qKo(∢ŪlF^vE=>F(̾^H]9½?iˡ-bwڃGG\FƀBf!vbK;V|FGGee?) xKEHʟͥfs/VY(?ں 1JqllSyѭիW<S]zs.n6pnIݺxؘ$~Z1O2} Oky_Ī͇J}nll즱O=x5)%څ^dx%ſ(;>66ͼT p@?ݦ'>VC;r9LqP#lv{QpJOOػVZK"?VZu5k{j|aG8߭OZj=ŝ@5"$#%-6]fțvZE:dVŝ&p/0G |hYt6<-KES|/_n^f͚.DRq8]IS2侹]a[΋FFFvθŮ}B/*15R? !Īj-5kּudd"wO9(k7׬YsH[$?λIwIG$B?]uQY,B1.2#_~:| ܥhm}:=t|bׁT,p4K]D~KV,]ϵy! (vEFw'ǿmЈcdddXG|ggQ]9.<22]b0p@Nuڵoͣ~mwB0pV۷3ed_Q  yz|x*̾^:zCQ?4)XSEBRv,p. /GKdțS}jzC~k"ӍXp>½ȿszo[R98/3JrbEHʗ$)MK'T6[u.^]V/p#կb1T*=#թ"2VVvXs/T*ETb}佮T*{g~oT*~J* 措r+?On~811NWx;eH}6ur!ŏE=>FۗF-ryw}NR?iZAF;r;wH\.߅1d^Eۑ \X.5110p$Z?(B?*>y~`\>pbb)ȑ,pN?&R){5m&#(Xrn7GW]zYB,B=yPZd!R ;BCڈNjBy|911¯#uToqWBGF[C찶E? ub֚>!=L7%("#H@AĀ ;A^@RtU988#9}+"/7qFFA|@ 2݇Bӧ{ծyn7p4?k ڻw]RoRn1)eR+++礹!ݶ?jSQ0 `FL) `̶C\oo7c~)RYJR͎x)ܽ-|7*~c)S|F߿gwi9rRʉ;8J)]/UJyw)-^7g2O?qWWWw-ﮥNǖRNkX/-',Yc[kiǕR8# WWW?UJvRֹ?RʓJ)lXXJݴ?r`Rz۱RgЎ3w0-mMf<½Rw}R8$ӜT:=ii;f'JWiҶ,ɋvٵ~~Z[uw-;G$-|5T?)[2RS"m^ob$I߿MZ,NR?14kmorq38p$m-IOA]wX3R8Ӥ?߁^JyGK~e400mc)7[ەR^jtض^_K)륔pl-nXJR^>H{t)㥔qvҌk,Y;ҩv_JyMiFطqWRv#l,dzޝz)^oIiF?tok;d$Rʗ[j㉥z[nYJRʝZ:ƋK);)}3x =v8RyB_J^@K4=;-^`Ζ}^Ӝ{{ޭF ozLu}NJ^`<^׳˧^`0H{kS*gH^g0TAn1II3WB zAAK%M^`iz%yMfky`0.~wF?d֍8Mr$wuCeG`02h7zG.5ނI2 _wB`pOOz6%,S&p`jziqIb+x] SR I{u\ yvmI 0B[8,zQ n$KI< v;zK$OOroƞ;[wrkgQ>˒}힗d;v'973ܪ>dmmmGۻaϠ.Mrvi}Pjݠomm-DT+C[,{j0I^5kkkWfnI~%͗Ws4nei]v'y$YJ_nܴ$Jn4$5-~INKr$S ~F$ߑ/vWvmmmG#޻<*I?=5qjnOL)|׮ i{{=Iv'ӵɎe%ӝxt{=&'i}$O_[[vxmmn$M-%ye=ymm a3lro3=[ 2ɇ|(_%r/ov&ai >)~>Zྶo~$O郃}4pp8(~$5}1/lIž("o݀In2emr?{AM$H$_JpxE,//f^;y<4MfȋᮧM0}q--R[IQcGkkk///=&y~///_:A/pxe,//kwJΣp8Rʾ4OǵeGKkkk.//wLЦr$/) p`[_3j-Lr]ө|cyyIJ3E̼mT=={c}k;cyy${˖u8_p̿:Onta!3l}g/I3yXI ܁Wf!ISf$A'mmbyy47NOhE4S6%yNl'5SB&mc@e7/Uiiys4!։4]V3?<[Gu[؞$P{ӌxc <_JE'd>˒p8Bu Y/pxIJn ۿgW3c]pQd*Ϡ.P@)e&?o8^QJyl)峳zM/pSוR9Ƿ([)l$)SJo5 ϖR~rgRJyp8*'?͔2z9c[||sޱ~Ce8~4GR/mρ~й{RR{>{kn_+R~yhᓥ)l)nWR~rh4TNv,Ƕh7'5[)rh4?^Gl4]>~)\1dVەsK)F;ZkRg?FگkFo.vR+9,oXX WHjr#$'%y2~occ۱q<5fц9rQGoll|eccc_~SS666^Ijm&yomllL{dY7$ɅI񴍍/q~ߥƎjs9L̺ږLFwXGtPJ3ͬ{'G)RJ9492R6665/ŋJ)*Ylo*occc~xT)98'>VJyX)ijO>Qsp^^SC+Birlmkfa9xoݘ+hx_5-<98Omm//X>1-Rc766RupC666.^J;ֱ#p0c-FX2L$3yxFޜ?κ!&Wκ--$ɯGXDv<)C^fNQx8-4W&t6I9S_Mr~͠cYM=?/u|5- >ՂR$g/̺A1_: G$&x<~E}]i?Gbx<~ &ǥ[Ζk;pY7؞Rj_LS.uY_rFioռ_42f۪j>wbss1Gl<y?_ZZ:9I/uٶӌ̺17dkqoiiwv_Nrl[mJ|׷R>Sכmx<|__ZZ$OHH3YJikR>fD洯3Jsxd䥛UoRR<{YglnnŚi<yii${Z*{U'/qL)Gp4 ޞ)(I~msssFyΫ;w)y}`ii$Oى+:M;YZZk ONrٶfG>qܗmnn.䈵'$Y%?'yIonn~~hiiiІ3777kەS2?xII^9\O$52L8ޥK)(I)ָNKKKwO3wL̇^ZZI?OSn]:o¢ZZZ:&㳷9o7$47nnnN%YZZ:3}<雛s퓼4i`ss'ZL$f!ɯL&wTQ<:Hr)sI~n2>?t:eI6ܐO%yW n2|i霘&8zD%l[t.K4drSMyT>8-'y}oL& .;Ifd=M<,I΍:M($/L&sT93 ?"#'Lt:M>p :ɳ&ySt:''$7?Qkfd7 VNCL&El:=\"}3?\;`2|b; i Mk&y^9ϯN3If~itzL&kÂt: NNNFX\#izd2iuܣIӹKg$Iݕ$;ML&G4CyfTi [!d2 1Nfi<8Ir5KIޝ/.Hdף!YӹyS<&ڏ5_fd7;&ɿdGN>iWW= Nd2i}$ꟓ<-R&d2xStM3mw&}_43 k:M<)MHwԥI:+&̧t:?inJJra'%ut:wMs4צyA6+HE[W,m nt:[$y@:<_5&d2ߴuIN!4[;'ɇvl]Sn\L&ﺁ@+5:έXINLr#? 4)Mht:ǤYi;[l:|1yξL&m-7:i{N[r7gkB/'\^8Lryڃ84}sv>*١|({'ɧ~nXӹ[䚿׾.*}I>}~vGYguLQ7ۥ f.O?n]]dguq"ߑf$оz6=:uY7K3Ni_&\(ɿ3ÛkuYʷ3QTFЎ:|u[sDMb[8;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;=2IDATT p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@;T p P*@w@ E!ɗIENDB`Plinth-0.8.1/static/themes/default/img/FreedomBox-logo-standard.svg000066400000000000000000000337251266051671100252600ustar00rootroot00000000000000 image/svg+xml Plinth-0.8.1/static/themes/default/img/apple-touch-icon-114px-precomposed.png000066400000000000000000000233421266051671100270110ustar00rootroot00000000000000PNG  IHDRrr݅}sRGBbKGD pHYs  tIME dYCtEXtCommentCreated with GIMPW IDATx}{fUuo=_4V ݀ "3(H`P(g͘,'LLbL28.@VbA0(>议{8gϭ:VuW}_⨪P8_'1"2cU8l-[l9W{Di2 Lf>@Dp-Jf/3CD@D  sh|)"'2 ,Je2aI7sn"kAAV/ jj?R 9w=}o)"29P./^ꢜsss)A "Tec ((PsSz-"'[3̨jQpΡhd>&D6dkE ,Mh6ѯaN8KD!H`?+&zE!.a:f>M"䏙O(ąyY"r3,0hNM"̼> KÓRUUUr 2„*W0s 9'TEYlɷB4CG@. 2iǒv-ԟ)FOA&j{IP#8T`>007WIH.L"DutM}yu3 `Ӻ~M}=G6ɌPf׳7mC=>z^0#ܒ^nb]]ynf4x6 Yn8Q;n=h %p-Sǽ'gW|e =WծYn]iWY]`)nm ?>~J2L{$3^~5p 쬽pOfĦq}_ ; v/ [ܗvbOV.?0pIuN_zPɟ,6)x[:x|T,?uV;%ߚGQ,W]Y~[_ކ:j$4p욢AU6,׾Jf~)rT}M@W'w~2|.ɑY~1gcEI7飒2[Oՙ[?Hq5$5%# ɡ;dsY%ڷCv}@b8]e4)IpPqqfUdf_jsSp-,5B.Do K$P }pGaGBG AyW$^1)Y*9EOf T_5;zb)"pVdVH}kF:$A o5&7;-8JK}5ȗ ;L 8AoX7R`I 33f}sb i @V&ky O?ѩEOS68Z7#.I)Uٗf̴6\W@7[gaY_Yq9^ȾGI8E qǝפM"5ګ 39$QZa19ܚ6% ޴q vujs׷"&k@CK2 gܛME6"yh/TS6D9 \@yp*k.iT{Xl:\npd>MAp_x-,kSvuY5o?ɷ#4 _B&B'!(fDiĥkjBA]4a{!}\y8\sW7Uʸ{]Lv,ִ$ *6KnVm.\=2 >װ\ѓacAex+}x_p%c!6!lҭ%joͳ& 0I ڻ!xg>r6$֟=HhV2kv?j~̇2>wo/khP⭺U8GpnZg[ȑ!Ipp<2 aKHHBdjʾB>LJcD . Y-fmbM` 2FUUbƅRI%WĂ&T (Zzt ;zh_p{a c蠔IO@X ` Z , p̌^7F^B>7)xkyo)"Rfų`'X0׻ Vew~ㅈىFBQKU$ƹꙩ eYzӪ 'idR;5.CvʈZi:bsSօl(öiݨ1C`U,ly$dG+xT#`!oU;!^@KRa4r`RȡAMBj^BdWr?X,S |l:OYU2RTگ!.J%D\xL KXk.K8~=TT5tƓ!<=50F 'F+}z_S_̗0.\xo~ ! ,J}0$ l ǥz^buj+٢!('hֶD&ֳ bmqQ-ޖ /.|٧F^`8g/XpsOY[ȳ=J*I*iYr1 ‹?SƒØcA0L]pȰ= u؇.eP4k/AcDmQX 2]M8%gn)_w48b0"jS K"Wد>o̹9Ǿ]8|0UsZSs:N?5t& ;9Q Unr_bn% KM)严8hIZS]"Y|iJ$5:d81PӚIİ\wوE7OJ Z^La1ᇿbؽkɻ7=$)Z PJPߙ"x*C ֯IXgD)*FL)}9Y9ۥ 9KC% pTTkeUA˶W/f ǜSD0]BXᭂ+7TxԭpHTBRԊhϢ—:%06sZ4 S}$b0%*c̐bX :jb/ҔtD rʘJz UIS㶟3.Pf.3c. .԰JNL5EU f7oHsRe3}*K7YGr8rEM%%\tΥ=JKo#KǤ2%||AX;.)y9R9$ kA;]`Rߝg'a+]2joy R6R"2&8Dp0DXQremtTiDk02B;TXAX+*gjYƢ^bƺi$HhϧU63xE ,`:JMPJ6B[Px'ĻSq.$TPtZz x7Cbh!A8Q3UbL"|-B6ܓ*[Nn`ZƟ|Dm &Vq I<t+¶I]ةbPȨ=UN3b)45iɔg:,5pxXP) Z/=@o\ŷ4qsp&Ie8e#oޜ >#qlJk)GA`G`{xSDW#R!'s ,ZB DGKOt8%#{e ŢQ^y8ýs~`3/L nzDbT: =j 2aٗKexS SblDi13H;IJ({kT˃D.&S|pK ]jWׄ6uظ"w)L&ل~:uf!2,򖝩lIIKoiՒ"TյrrD-ͮNxD,M ׻}2tTjo}OK}׉ϭBK<=|.dOE/6k0xcƒV(\J9i EfLD?E@0U~}Cc'*;IG. S Sӡ<7?aB/E6MD!y#ȟI‡0sDRAE' 6k9KspATQDX'|ZO_ۓ<Е RDc "=Ǝ)"&6R³cy;jc9dQ$DFR.Uqɿ1_~UAK%BJLR5ϧD53U Z>; 2єWy`5]KS=NH>1:m* H*%swq;li$JJ$;u$cfH`RLӼQ璋mY'?+.QrY8-=ͭ{Ɏ%j!( sN)sc:P [YMkX+>pykkg "^٫=rb a;{Ąj鸂 iq}r%!RtJSq <#4X‹ # & q^mB,'%JeG%HN5tBrogPXa-=-S_, yaoa! %Pǣc`qZi?Kdwy#` !0ՊFGлfӎ.jɵ Nt-r3:P|t2Lva pnt^?fL]Dx|, Z8y#7려sqV'S5%F\aǴ.@ؿw,aܝR0 }u=Z zN |7R_mOlcZ;P2s y"Bz-<'DSa`+6DB:?~?÷H#u Lq BGvjwz<8 ARTcZO%Jr̯.9<[9ѡ<9BeIf6AhWqBiS!6eƊwJ8qqf.㛊)4+ϔLlh}-OEB# 6<3 J3+B2(HPJ \iόqlmVٱ,j-/1%-~ߦVjH!S (2VjڑPeZY ]&b4vT>I)}cb,hQL Ti>ɸM^ir’:tݓBP@43ml9lH) 4mRъHԆ7Ϝl}yH(P1nHY™y_4(_L R -1l۔DЉ:IKHt!Me*NX3s`vk hޝQx1@ݑ0L_ωCF RPhi{*-)TpaquGͨc_NV`ɧdB*eW;_?lhj@bm!;򁽆:]6?yI?Za٠K"WbQðM!YPBM7T*w7!T ha22!$ptv例h-t /12s)U}-@=5S$\P!RS1q/L6Gv**ƦiH͙#O"yf_/, (F ՔmQ7#j[ PBD¢ q܏?}^ĪL$DRB(?u ]X+X "‡i\,#@L `#-ި>DPy H*+"75T%6(n2 `HQJMZ`_8n[1IDAT3h.A"s *Ǝ=UrvT|}bwOUxqYͨEAUm:9N}Qsۗ={sͥh魐B0{C#f$wSW$- {Z|KOjbp٭,lc?0/N 7 nZyOnϸ]&{{pEdŔW߅3n<5V4 [Ƽl^C'?t ,E3RLNR!։Z!gKX2V/tmh͍]?v>~6uCp,_W# AIE{?=/bRNX(Es+F IƆVk*_Ӟݥ CG47 2>S\(KFm㑂a6[z%%̂uAMArz&gMK778[>]| |0TsBRDz.-}Π0`O '/YG:arҐ7M[ R3C `f"VZ{i`_Qrj!o]sܡ@+ŻD/.gܯY㻆&>!\ XڢȷQʦZK%u"Hƒ[l]h_&O"sR73.qcH#ozBDQ/$b?z^gQf6)SxaƼ\x-2ʂHA8ggCk͛7 s%<[܌Mu+mdk o9ЇT< ] AÄwkbx!B[l"r`B{M{-M~ADQMLLВ%K;w|{* Ehf###`+͘K'"NseY^."5. vЙL5rQiZ7Ndm#"NOOot:QeY 9wSlݾj0{,H# *rLMMUE|6b$EqKպi``7r./bz$yIENDB`Plinth-0.8.1/static/themes/default/img/apple-touch-icon-57px-precomposed.png000066400000000000000000000074331266051671100267420ustar00rootroot00000000000000PNG  IHDR99sRGBbKGD pHYs  tIME qtEXtCommentCreated with GIMPWvIDAThݚk]Uksg<8!8u1}UADTE-"!Z"Tߐ JB[J! v4{b;ax{^{sIm]Ϲ瞳^keYkeYn2.!"8FsY4<'θ4zEn3u`pR1pAy95=H3[]"(TUWvƂ\"Fy.=Y}VD^&nfO]fFY y.1Ch49'>=ιCêJ3KKԃg5̤lZesA)rhf늢03:GEޗ TU~VFr3Ցr ѳJt/ۣr<;CLz: oUΆe5K2z'k01F][ߚGD\X'pMWX5vc=?ƾ6s`>^3 w6/"3#AֈPA\=ꁌ4|s_cɖ j!8rJ1 10IxdF ,if 9c"8`H#D9;[|xcO`= xf/t!sp a5'a#&c3tb !QShΫN(Tڸ'9VΨɁ?uCI[ "Rԉ >r75O:\wJf @%>;)  E,}C3%O.KN? Ug<:s.O<H 8aeyVY-\j0 F&OfNiudBzNK.MM+na)~[>@>^|s.T]7bHui W9 ElMyaJ ! 8K;F4z|)R?@PF3ŰjabǪ[>Gtfq%suCB3;?fN>+O|m_'__nBcZ7 tL'oH50':T c /ߜsux*Y>~CƝw[„x γ8&vcE͓33VH%Ab^DIa$aUE [ݵJz;<}d[c=a-1Y\ yϯ<ʬCS_80nqkܼcǰcǰۯ{}ch u)K{UxtCb:k]3'x۴ʱyO-M_\ԚiRJydMyYdYVqՃYpHLPUpǂh·60ƛ#/#埡(.-zq,q8r{O*Y#Z5Qi3T E.;VNX{ųmceŃ1Ϟʿ1jB$ Ps Kt؉n0kjUڵ,ԬeZei3 D8t Zq|2NxWRxO_/vi|RDVi6 |DU}JQ99WiHP >IXaڭ̈́3aѐe >bDq^9w`7j j|W8"MY@WUT;R,1J4]5"zZ抷Lrqq9yw ʼf>6BԔ %FGAN2 JQ4 TZj KyqlF#gڱ'aBۃBUPJ9 S`082T]db(ԙ<]Iek~!m  UiƧ>.x$\)q:.3¼޹Nb_T vӧΟqbvSNkqCIb]f[iN΅rL&rOҚgV!KW3>Xo RG/x>eq*4H1 FSmI16c_j5(UPD"~lA`#\cp'P =״' }>4mj('g&շlB}vt7-,n:-s$ao*/}7pѪ EPEOT-(r([~bJt"^'ʿ~?G!Z3u,KԶa~`wK>ܬ}+IjTiksy^ιF#>s[W)#'#̧f "C6Aጝo: 8ގ Coap;w ]59^nX-0vDrO>!!ܼZ{k7 .6bTT/ɻ$4~sw^}e3#^;<۽ݡ]8A skܹۛ1g贕nS.gĕB=~ljf9dttI3 33{Ag|VyuHɳ#} gܾ>g59[fZ|IQ^<س󍂙"DGo\sn\qŀpSLN6/0D.:9De'"V'ιpY}GDFsR{C.Wcʅ0 nY}YD4ZefpJ<-ZtΙvy YeC~Oķ~J蒳6/We˖tN\t~{yyڍ.QDUv,˾lٲ/mn.oZת'ʲ%`RLdYWιsS=e>ulIENDB`Plinth-0.8.1/static/themes/default/img/apple-touch-icon-72px-precomposed.png000066400000000000000000000121121266051671100267250ustar00rootroot00000000000000PNG  IHDRHHUGsRGBbKGD pHYs  tIME -tEXtCommentCreated with GIMPWIDATx\kuEҮVXB (ȈG0ᑤTbW*/y8eW?8~@*qؕر)\Ą!`" hiW{Y ȱ ]53==ݷ=;ΝgJEX+Oj-AaHWUaQ[<[>!+I![4HBDIN "7:z@p#I7aPDDUTdDc}̮ u3VUE'l>,BʲL-z^3d?VU%gyuYfCZVUy6ɾ&Nlv;U UaN`nWU_k[ەvMjf_%yl ! !@VD̒I$DUUi8܈QU[.*IPY3\^Nl ilx]K,_X K Vq1>~|UU>Q:DV‡/B NGPS@(04PX1T W ( Ȟ={6ilƵ7"J?@PQ8}yVpI*\Ou`Q!QwB?Txl*sGF6l xhkۏWg^E{9]B@RE( q?dS@?=8sWDdQCӛHڛ0w7=úO8[Gi<# qZ%y&<3$HLM4Z`4,ay}`x^q{&q[x67UF| _Z߉7&"U6ZiZZ{d,uTR/?w%ܷ)>ša[&Х{ A~Rp-m XsLBB2KV1f+jQ/&g uScϱjA',)0v{ /Ho,g0> wn ћ'5ka{ɲ9|h_i8"W)Pn؜-c,K=~$5ZAǶvw/Oҋ$(id} [i[EA#"X}4hzda>;n"M>?iv_ܲ7Dz(E;~C DH=s;\SSef03\])T!HfS&3yB<L[wpCҌtCdgfF65xӲ2_/E"9xkt)]Q拐 1jg5DA%5Z8nWؼ131oVڗ Xz4.8U+ كf2oXDsiM,,""^*[X>(y8HGէ1{JF2B>XĂ89Smhy*9R>M5dpOH׬+nbm'8X]O|ccUO` eHU5,ilpf'*]zKP{Fi=_Ϡ+|gz|3m/RsWas$Lh>6AWz2r.FW#Bz{(mciC6b1z9D5y6H]AXđȐX%':/:.In+_6&;SX}oJafĞĨQ" ?pQ9n{+l+ƀB\i*IE0HD7TڥwLKraut1<`K@|b$l~Sd!^=( *="P4jnI!0!2FnpIwyǧmDH`Z99?R %'A`f3vA XܟN5YK C&B.k26#/G=e;6TT9˿)RyaF5v ꢜ HòbDŽ3iq6L0ZASIςnv _zwVxE&Cd!f,͜ %`Q?BQ YZvt/9h2R 05)L;cm6@CTNGJaъSPc+qvGs5%`VLRzOP4WYYt>qYk-; h,yu2"^ FNA݈ Eeqfle䮈6jG$A,>ʡ>g8k̩-3SGL摚L :yڀ{g  Y˞"c͖c Iu5Ԇ^]S e}Aw3O5|檊aհ{s34w*ө+8Kӡ~v&4LVn/o0]A bCkٖ_jsvMI*]'e"Yfۛx򀁘͢4Y%gD 5'O =.e)îI=t$Y3.3EM44d֝)D$t2 a(kP|T 2dc1uGٹ$эU6Lݐn4qx&: g3^sU$'ci{%Ut.hCa#FHz(EĕC91åcZ1;&4wD?7hdhnPE@yLT ʙv3|ؑZ P %-. M`t R`̯zըWWw5VI !-2~=tY7ZP1>SLquMˉF8 3DH]%RH0\3X3;r!: Avd4I1:Y:]J>@=k,G6\s=繬e R(ͥO.-i ̵UH,ىc4V&TK{I(3k8k0ƱW<^lkxݠtE,oJFJJ3 XY!nFg!CN@( JVcXG7V׀F wW-? #r>I#jQSL:+\ƅnEǐ0mT!AnSYC8EG­Y $"Jq@\/s%m 30KO!r̫r, h 䰆umi3%.?oV=h_UcyB8"o+_z#U@."!W"meyt)8xR6|纘C3-sǕxxy H(۶mgZmSUxHE{, _iUY#ƼFCUQw… wEYk{7 K,k٘Rkԍ!ɉ.˲Ցv:Ψe6j6GHY7~I nF(jǤ0qT/^YECݾVD&LJ/*~8$_X,O/]7Dd ufmrrr $/Dn<x)e4+{[k``[2d?nB{?S<\ 3,yW__ߞَ_@#IENDB`Plinth-0.8.1/static/themes/default/img/apple-touch-icon.xcf000066400000000000000000001110071266051671100236100ustar00rootroot00000000000000gimp xcf filerrBB G gimp-commentCreated with GIMPgimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) XtlSfreedombox logo     blSzWlS)&GEQ;9899;;<=>>@?A@,68899;;>?@ABAC+66899;;<=<>?@@BCCDEEBH&67899:;<=<>?@@BBCDEFGHI$567899:;<<=>?@AABCDEEFGGII$6789:;;=>=>?@AABCDDEFGHHIJKM 6788:;;==>?@AABDDEFHHIIJKKM 6788:;;==>?AABBDEFFGHIIJKLMMOP5788:;;=>>??@AACBDEFFGHIIJKLMLNOO5788:;<<>??@ABCBDEFFGHIIJKLMNNOPPP5788:;<<=>??@ABCBDEFFGHIIJLMMNOPQPQ4788:;<<=>??@ABCBDEFFGHIIJLMMNOPQRQT788:;<<=>??@ABCBDEFFGHIIJKLMNNOPQRRTQ8788:;;<=>??@ABCBDEFFGHIIJKLMLNOPQRQSTT8:;;==>?@ABCBDEFFGHIIJKLMLNOPPQSTSUV878:;;==>?@AADEFGHIIJKLMLNOPPQRRSTUT8979:;;==>?@AABCDDEFGHHIIKKNOPQRSSTUUWV799:;<==>?@AACDDEFGHHIIKKLNNOPQQSTVVUV899:;<=<>?@@ACBCDEFGFGIJJLMLMNOPQQSRSTUUVV:9;;<=<>?@@BCCDFEFGHIJJKLLMNOOPQRRSSTVUW7899;;>?@@BACDEEFHHIJJKLMMNOPPRSTSU899;;>?@AABCCDFGFHHJKLLMNOOQQRSS9::;=<=>?@@BCCEDFFHIIJJKLMMNOPPQR9::;<<=>??@BABCDEEGGHIJJKLLMNONR89:;<;=>??@AABCDDFFGIJKKLMMPP89::;<==>?@A@BCCDEFFGHHIJJKLLQ 79::;<==>??ABBCDEEFFGHHJKGK 9:;<<=>>@@AABCCDEEFGGHIII"89:;;<==>?@@ABBCDCEFGGHJ!79:;<<>>?@@ABBCDEEFGGIIN!788::;<==??@?ABBCCDEFEGFHIJK 8789:9;<<=>??@@BBCCDDEFFHGIIJ!7889;;<==>@?@AACDEDFFIHIIJ7899:;<<=>=?@@ABBCDDEEFGHHILJKL67889::;<==>??@@ABBCDDEDFGHHIJJK677889:;;<==?@AACBCDDFFGGIIJJMJ767889::;<<>>?@AABCBDDEFFGHHIIJJ5676889:;;<<==??@@AABCCBDEEFFHGIIJJK IJJ6789::;<<==>??@@AABCCCEEFHFHIIHJJ IIJH5677889:;;<<==>??@AABBDCDEHGGIHHIIJJJIIH567899:;;<<==?>@@AABCCDDEFGGGHHIGGIIH567789::<=>>??@ABCCDEEFFFGHHHJHHGHHG565567889::;;<<==>>?@@AABBCCDDEFFHGGHGGFGGFG45667899::;;<<==>??@@AABBCDEDEEFFFFEGFFEFFE6456778899:;;<<>=>>?>@@BCBBDBCCDDFEFEEEEFD 5789:9;;<;==?>@@@AACBBCDDEDDDFFFFEDE55567799:;<=>?>@@ABICCDCCCDDDDCD 57677889:9;:<<=>?@ABABBCDCCCCB 567989::;;<=>??@ABBCBBBBCBB78899::;;<<=>?@ABBBBA6779899::;;<;==>=??>=@@AAAA@?@5676889:<;;<<==>?=?=??A?@@@@A??3656678898:;:<;<<==>=<>>?????@>?3545667678899:;:;;<=>>??:??>345677899:;<;<<=<==>=>>=>= 3233445566789:;<>=<==<==<122324456767889:9:;;:;;<<; <;<011223344556789:;:; ;<;;01123456567789:9::;:<;;:9: 0/00112233445656757768897899:9;::9 -//0011234567898899899:99:99:99 .0/0011223456576778788 -./0101223434456787887 -./011234345545665667676,+&戋$󈉊$󒓓 !ጋ󑐑얕䒓咓֋Չ󙘙񗖘鍌󒑓 ꊋ 󓒔"!􋊋󒑓!䋉!!쏑  ܌뎏 􏎏璔  팋򇈉      ,+&$$    "!!!!     c         ;{ü|a01Lw%-pS )Y&7$_q"b 3q&87WLQp"!# {,E = y"u$cL%KW>!3` h!p!y(I61W_|y[1 p wv?2e* &%(N/ +% 9 ".9 | D+01N > M;9=4] JIVXGG7o>st_uTf:̡iv=gr@}CFI  J  K* ,T=0]/SAgF kTp^ (myu 6 6 4@AA?>>=<;;:9:6ECBCA@@?><=<;;998GEFDCBBA@@?>==<;:9976FGEEDCBAA@?>==;:887JJHGGEDDCABA@?>==;:8875LJIIGFFEDBCBA@??>=<;;:8876 KLLKKIIHGFFEDBCBA@??>=<<;:98876 MNMKJJIHGFFEDBCBA@??>=<<::98976QONMMKJHHGFDDCCBA@??>=<<::98976PONMMKJHHGFEDDCCAA??>=<<::98976RPRPONMMKJHHGFEDCCA@?>=<<::98976SQSQPONMMKJHHGFEDCCA@?>=<<::98976UTSRQQONMMKJHHGFEDDCCAA??>=<<::98979VOTRQRQPONMMKJHGHGFEDBCAA@??>=<<::9887NTUTRQRQPONNMMKJJIHGFFEDBCBA@??>=<<::98867VUUTSTSQPPONLMKKIHGFFEDBCBA@??><<;:988WUUTSSRQPPONLMLKJIIGFFEDBCBA@??>><;;:878WUTTSRRQPONNMLKKIIHHGFEDDCBAA@?>==;:8778VVUTSSQPPONNMLKKIIHHFEEDDBAA@?>==;:87UTTRRSRPOONMMLJJIHGGFEDCBBA@@?>==<;:997?`SSRPQPONNMKLJJIHHGFFEDCCB@@?><=<;;9:RSQQPOONMMKJJIHHGFEEDCAA?>><;;:987ROONMLKLKIIHGGFEDCCA@@?>>=<;;:98 ONMLLKJJIIHGEFEECBB@@?>=<=;::98 PMLKKJIIHGGFEDDBBAA?>=<<;:99 NLKKIHHGFFEDDCBAA@??>=;<;:98IHGFDEDCBBA@??>==:98HGFFDCCBAA@??>=<;<:997GHGGFEDDCCB@@>=<:;:988 IIIGFEFDDCBBAA?>>=<<;::987 JJIIHHGFFEDCCBBA@??>>=<;::9976 JJIIHHGFFEDDCCBAA??=<;::988 IKHIHHGFFDEDDCAA@?@>>=;;:998776IJIIHHFGFEEDDCBBA@@?>><:986JJKJIIHHGGFEEDDCBC@@?>==<;;:998676KIJJIIHHGFFEEDDCCBAA@??>==<<;:99776KJJIIGHGGFFEEDDCCBAA?@??>=<<;::989766IJIHGHGFGEFEDDECCBAA?@??=<=;<:998765IHGEFDEDDCCABA@@?>==<<;::9886654IHHGGFEDEDDCBAA@@??>>=<<;:;9886765GFEDCBA@?>=<<:;:99877655GFGEEDCBA@?>>=<<;;::98876655EFEEDCBA@?=<;:876655EDEDCDCCBA@@??>=<<;;::99877656DCECCBAA@?>=<;:9765645EDCCBA?@@??>=><<;;9:8:8876653CBA@?@?>><=<<;;::998876656BA@?>=<;9:998876645 ABAA@@?>=<;:985A@?>?>>=<;:986@?>?>>=?==<;::98897765?@>=>>=<=<<:;::98977564>=?==>=<=<:;;::998987765534 ><>==<<;<;::987654=<;:98876554433<;:9876543422 ;<;;9::99887654321 :98987876766545443322110/ :;998:89788776566544334231100/ 9:9979886875765654332100/0 8767767655432101//. 76543210/. 76543210/.- 565454432110/./..-- 􎏎𘖖  󑐑쒓򝚛𑐑ߒ˓ԝۜן㘙ꔕ 얕p 񑐏     󎍌􌍋                              "OwɰTG" I1   A({9r !!"!p; 6` U <f=" by /aDK "H #~!n l zX  i| /   4 P u    -,,--/.//0131223345 65 +,++-,/-//01012232423344354465544655445+,-././/.00121123133244*++,-,--./0//001123233433 434 )+**++,,--./012322 323 )+*++,--./01211221*))+*++,-./0/0010 )(())*)*++-+,--/.././/00'((*(**+,+,,-,..-/.//0.. /.0'(()*+*++,-.--../.-.-//0//.//-(!(()*+,++-,,-,..--../..//.&''(()*+, -1---&'()*+*++,,++,,-,--,&'()())*)**+*++,-+,++&'&''('))())**))**+*,+++*%$%%'%'(''(')()*((*))**)*)+*)%&'&''(&'(()* )))%&%&&'('&) )'&$%%&&'&('       z~}~~~}~~}~}~~~}~ ~~~ }~~~          b  ["+NqX9KHMU:  P    t  2[j$ ^g Wg&6)rr button gray     XrrXtrrXai6o+,-(.0245678899::::;:;;;;;;;;;;<<;;;:;;;<;;;<;;<:8541- )%$;;;;;+,-(.0245678899::::;:;;;;;;;;;;<<;;;:;;;<;;;<;;<:8541- )%$;;;;;+,-(.0245678899::::;:;;;;;;;;;;<<;;;:;;;<;;;<;;<:8541- )%$;;;;; .W{+ @/,s-n032D3:5!97?8 829<:=G=q================================================!$%'())*++,,-------.......////./-././.....//,+((#   %-----!$%'())*++,,-------.......////./-././.....//,+((#   %-----!$%'())*++,,-------.......////./-././.....//,+((#   %-----kA "ܣ^$  D#<%l'(},]*-* +2.,/J--/.;;;;;;;;;;;;;;;;;;;;;;;;;;9:;;;;<<:;998876542u0.;++/;;;;;;;;;;;;;;;;;;;;;;;;;;9:;;;;<<:;998876542b0.&++/;;;;;;;;;;;;;;;;;;;;;;;;;;9:;;;;<<:;9988765420.x++/==================================^;(= ::;;9J8:+6M8]4W3D1(r/9-  "`.///////////////./..-------,,-./.--.,,++**)(&%# "///////////////./..-------,,-./.--.,,++**)(&%# "///////////////./..-------,,-./.--.,,++**)(&%# "p0/--S.,+>+*;(g*''%o#H  R!̈́899rrbutton     urrurru~ſ+,+(,.0456678999:::;:;:;;;;;;;;;;;;:::;;;;;;;;;;:8530*)" );;;;+,+*.1344678899:9:;<;;;;;;;;;<<<;;;;<<<;;<<<<<<<:9741- )"$;;;;;+,+*.1344678899:9:;<;;;;;;;;;<<<;;;;<<<;;<<<<<<<:9741- )"$;;;;; .W{+ @/,s-n032D3:5!97?8 829<:=G=q================================================!#&())***+,,-,-------.....--../-,-./.-.-.--Ž,ż+(ÿ&"¿  )---- "%%'(()*++,,+.---./..-..///0.//////-/..///./,+)&#  %----- "%%'(()*++,,+.---./..-..///0.//////-/..///./,+)&#  %-----kA "ܣ^$  D#<%l'(},]*-* +2.,/J--/.;;;;;;;;;;;:;:;;;;;;;;;;;;9:;;;:9:ÿ:ѿ9ÿ8ʿ78ɿ876¿5¿42u¿0.;*+.<<<<<<<<<<<<;;;;;;;;;;<<<<<<<<<<::;9878876542b1/&++/<<<<<<<<<<<<;;;;;;;;;;<<<<<<<<<<::;98788765421/x++/==================================^;(= ::;;9J8:+6M8]4W3D1(r/9-  "`./..---.----,-././..-------,,----+-,¹,ź*ͺ))**)(&%# ]"/////////////////////////////.--..-,*))**)(&%# #/////////////////////////////.--..-,*))**)(&%# #p0/--S.,+>+*;(g*''%o#H  R!̈́899Plinth-0.8.1/static/themes/default/img/favicon-32px.ico000066400000000000000000000064421266051671100226600ustar00rootroot00000000000000  ( 2 }$~&Z&'܀(܁)܁)܁)ہ*݃,܁)܁)܁)܀(܀'&~&j|''&ۀ(܀)܁*݁*܂,܂,݃-܂,܂+܂+܂,݃-܂,܂,܁*܁*܀)ۀ('ۀ(ۀ(}܀)݂*܂+݃,݄-݄.ބ/݅/ޅ/ބ0ބ0ޅ/ޅ/ބ/ބ.ބ-݃,܂+݂*܀*ۀ(ۀ)"܁*܂,݃,݃.ބ/݄0ޅ0ކ1ކ2ކ1߆1ކ2ކ1ކ1ކ1ޅ0݄0ބ.݃.݃,܂+܁*ۀ)8܁*܁+s݃,݃-ޅ/ޅ0ކ1߇2߇2߈4߈44ވ354߈4߈4߇3߇2ކ1ޅ0ބ.݄.݃,܂+݃-ބ.ޅ/ކ1ކ2߈3߈4߈5߈5߉66ߊ7776߉6߉6߈4߈3ކ2ކ1ޅ/ބ.݃-݅/ޅ0އ2߇3߈567888989998876߈5߇3އ2ކ0݅/ޅ1rކ2߈46߉688::;;<}<;;::987߉6߈4߆2ކ1܆24679:;<===>k>>>==;:9864ކ26ބ0߈568:;==>?k@AAbAA@??==;:86މ6478:<=?@tAAKBCC^CCCBA@?=<:87566މ58:<>?AAYDE,EFqF[FFFECBA?><;8߈64"߈5߉589<>?ACCPEGGHDH<:85߉779;>?BCEFIHLJJ^JHFECB@><9688:=?ACDHHIJJJKJIHECA?=:868699<>ACEFIjJ.KJJIGECA><97\ߊ8U:@CEGJLNLUTTRNLJHEC@>;89<>ACFHKNPRU>PRPNKIFDA><96 9<@BDGILNPTUVVSQNLJGEB?<9ߊ888:ACUFLLFCJA?<98 ? )+++/?Plinth-0.8.1/static/themes/default/img/favicon.ico000066400000000000000000000020561266051671100220630ustar00rootroot00000000000000  X&~( ܁*}$'}܀(݁*݂*݃,C݃-9݂+݁)܀('~%܁*܁*h܂+݄.݄/ކ1ކ1ކ1ކ0ބ/݄.܂+܁*t݃-ޅ0߇2߉45666߉4߇2ޅ0݄-ކ2579:<<:975ކ1߉65K8<=?@@@?;95X߈5߈6k9=@CEFFEC@=96z68CHMRT<T*RNHC>:x8?DHNR?R2NID?99=BHVLQRL HPC>9( Plinth-0.8.1/static/themes/default/img/freedombox-logo-200px.png000066400000000000000000000501111266051671100244020ustar00rootroot00000000000000PNG  IHDRXbKGD pHYs B(xtIME ) IDATxygEu-ֹC7 M#4 4h8h~FzL{ZH "  2I@{xם78n᯦l }|'Bi[-@)$XD6bGy+[I^#_;wS ـ/b ϐ'jX=P(P+$H]jRo#QZcD-߰akdk G[QkBK5"j{D|'.nֽĝK8"WvV؃??:}z j ~\4myl_zF -3Qް>ɲa| ko{r[G/F`FHQ;Ea \%1[+ȌG~I8$n+]pO@^pe-ƀD k ;ҤP!Y+eqS% "nK{ͅzPl "f$OL8((t-_d3۞Ih0>K@I1_4$&(4dk""ZG2s'o{x]/t›H^ ߸a0^15 {%[vJG֫qv@7~0zc#iZ@J@Si@,GkkDOb']vyx$<Զa23ApGLb d"5^sq_ "ۄj eXaހGkyx_3= Zc:1KIg$-ˎ~mFl6_*7H'3eh&6Xb!~$ Fzf$.oLdB%Үo_ 4@_ ۬5)t s~KnD>ӟ"Tl'ɄYaV4vW0 ) O@k | ~ glPd7lHBaX4)V =J.\rԼ!g ^iBKΜ›NV>JaVyg! ͅ4e> L'?1>Lrg8 }l+ozŲoՍ`V"৐4S7&=Y| :h}.Ne.vv+̿dHD),RϾ̕p_y߾fz֊ '(s}@L9M"b݇؎fH. a ~07Px4dz7#ؾ~&}b~+V58kŋ%~f2p::C=ĞAYLĤCx0>9C`r?Y5  c^z٫gou_<{GSS8Q oȵؓV#0,Lb'GU15 h.)1()W=9^us3#feg^&ڇUt?փ9#Z1NHF* <x9֫Yágs(лɸjN\5CUSwu+[xW@|(~JpVS;^zD. /Z˨ο͛qcz~gFP6&x;1YTNW5W.`ʐإ:URp Usu7N98|n/Xm&^WnqiW;)\(+y9lUV &#{6!Grq V 5q~ ޝC{c>ՙʍ˪rj׃_xw/$!SUp`7f&԰%A 'n|ىxE=ߢ)*OA҅o8?٬,<ߴRC8s[c'{cs2|$bŠA@я\154I'bӐ8)OKhcѪʌa$:ґ˶FL!c r[ZdϷIC>:)⸅TT o&`Rn-rZcqlYʈe3H;a߽IspMM _hK mT+v}nd`ҋOn7IQBɩ!'<0)~k^+F60X(7|x#\3]y>}w)Ő'r, E}(5v, X @)+80u-iJrq otc$Ҽ`GA&7 j"25E풪(J;;mbaUC0l؂ї1KD &S|·<Jԫ_' O8*=gTUlQy4 BZ^u䣛_ #E նA,tv;k_dYAYqXqe)&_0kvd;0 `E*'ŤnE48D jL+n)̫J'm"}"3д+be4ke,אg$FiM6(iq=QFDRM YLI9Fqj{u>~cZy+,xI _%V9S/ (9A*'LA˯eGB.͉^"~_J' ^q1  _({ V~?ͦ|Ҧ:-Æ!.1!A2C|vصk&N)<;MU$RZ MFZpK;bPC8W+.8b;ȝܜJ!9xDAYY- dtD FQ'WJ(5]a2~s з|pj30 ,{^WEIƳq(r Y51!-Wo?)/8|Ͻe#9$[m&LuJqQ\yl\!P$ɃO"!0N<6)EЗɗ .yM{_"՗"Io.9[VkY:5  є ח4M2 *Oydoֿ |o拎s?uёsbq#SK"o'D@Ms-sd49#R2iok ^ Hȼ@Qju@}1T"Fap˅0Ey 8#~[=|[~P;K Y^ާ}dTK(2T+N鋰\ `BUI5FCwj&1@99KZbRn[gòA,smv "b8%#.|5гV&S;P31cQE(Y>Q*M\ ;0D!\v&Lh|@5r +޵u஠N EMRMqdPRJd3D_`#@B6G-s[ eaT uWݣNY\M,1T`, &ea-DϭtC}[57_{rOn"< r=𛖒LBtIj022Y]V Wx-^c-[~& fdٳd_lf, -n[z xUxl,D8U!tɅ5jYA)@%j:Q=鄞$>s_[ln:x?y#J+ EdTr[{xyQ&ĪQ_4ge~1xI/l"dي,^bl4e^׋84+/A=́Ik%ZI5+UC >X_D׆1ڲQjOCMYI٩҉mu.~o YZ7bvBWhB;{G4iO,MXPbIcV>(Әjj#>˒j T )hWJ#@SQy7d ~?:tș+w @:.t5a~ܟ:GP90%BejebPЩhrp%nȕ-m8T (sRF%3*+e27cT1aTM*asdOp1SҴIE ~$O`YQd@E%㜝$ C[ٮq0Y)Kچ8`$ Xh^btSlU/tzp]cϲH3.n8賮^$0gZ4SY&w!>nj&;W!Hv{ ;ҙˍyYW]zG0f8һc5z䔳a6AXj]hȢ@<ªab ""ggMYLӫ˩^fmn }TQJ!=8lb嶬$hn:ӽ7ofRs2*K(<QgJfɔJˆ(~ySg,+sH@M53⭀\XWnX J#ǐJy  1&ZɔD$ ./[@^~AcAV6_ӑB5ړ;GIJJe>>@Zv!BU^dQml> k{Ad}aa 7#^r?p'Ogx#.t.ъHGP1פ8#MjF51Ґ:G8-K>Z5.V~*e~><nի'@Żj*YtnԪuO66j|I登LYz<63]ijbHC$9I'sxx3?堥+.3_n3PǓKVN tIբ:m*? 52fI޺{!11xՒ76_kj_8cl [p|Jj*ڴcHy+\a=ʈ(=B߻DjĜ|ȞoqF,LGL cp9o goWN.uqL3 I/{pd1C xF .hゐ3B %pW ^g@0 QRL/JM)vn4%\!ܵkAZ#9|ETir}Ft2ţ<  qu"T,]jg=8Fbn mZ֬ QRgx@g>L<` ,yo@ !Lq9 s-'08F?q| HY2ceہLSk0hχw4;JF7-'vQfϜ($ HLA#y^h M-Pca!̀H) (;ن>.W;Eg~@ĞTB9l¥ʤIȃ ߾jSe\d"6f5vĿl;EP71S4kxR6~"gY,mƒ>*Nk+rT0&4˟G31['?^4@޳ n=NCn[k\+9swZ4bQscS7h R. lQYt] YC e ss^w<G)Tjdν/Թ`@GpF ְMǷwirZ^0$'S֌!!z$ % @!}Jl1@LB"2*"^PA}=UH|Rv cgs&9#0Vb#]!⨫~@'-c$|cl)g.Obaz&*xY@49z+ZYFXr.e*ya|f3Lgj"aB1A(~wEo`<kUw;:<8`4UrC/z>zq?o9N$Ð?g殤1,^DUd ©Yr;zn=λ@|DJv .Ю"uQs$ ~{0 Dc80懭֖CAFc?1qzSfw :t[^UuX0a ǕH>齁oߛұҕh :qJ ' ܙ*ML'̠TPIT[iDY.b &cIޏEMr`o -䉇(9[e7e0~FRPtR]QtF&!1DK7Em(~y|{i/?|qjԔԿnQ1)Ҏ̸ CUI\R@ۇpj@?MV!mL&,C'l[N?[tdnEQe:s$Uj#-fE.PF6&+#IOޟ[so8 v4SM#z["0ӕze&^xi+L%}1BfdٹZCI.a4vgjv}N}ϭ@t&cԨ4\y@mOwI9׮hIb\8 h:8 rx($I8ށc__9iSɟz٭}M1Mw ]12FZ;ڞpc*H\F=+g;O} YS CvTheLކ]APCi6W鏏-S*%  mQHbR.KRBhZVc$gtW`4p!Jb}W.3:%O8@&H:^=_SoVg ;K6J!P.`fnhwf#eb\LKq?.0 ~s57 R 3DtvX"N.lxPv8:F1p]O`bXY[8hÞ{#[!^wʞr;7 Z|؝IYHmi! ' mI10*//!s+vϝEg1Q!:X`Cޓa])%AF+(z& Wlk瘖i/QN]y!D1zy98R& Ǵ#đ|.gS2:-Y,Cխ1OaΒ$~cQ]fPM4LC&"@g@5MkE^RtdA+.`[P?o}AȷeC8i$S1'("!?)5*3:R4֧n!Wu{I)U3 :H 1 "S4cmͦ8/N|ζm*5^Nq\5ͳ@-?DLPwBPE=3ʺƪm(ڤ4mnsk! XB*%C aB11BQ` ' 1Zx5|KkTjٹ<,) ;\L9Xw4vdƁ"UeeeAsd0 '{Q.Dla!Ȋumَn 9||а3EPܐQM}=[c7ITC`Kh;I$X41*h: 6̖⾓ ʖ Owg-~IB]xu!FR86 JUCcwA(ո WJ#܌k4G1R]*ab#PЎu|+qN7Fl^&QPFtzi\RiIx|]R`USC\q('SY4$:ZaJ3~Ez{0f o 3c1;r3aQDE ɝ Q,-;;M|qfGMP$D N , TMr=^UsS;afp;-@=mƲ< 夬ȇ89ZH"s9FvUONH'R(hӉ!MvQVyf2 gݲ4#"I?952uU I, C6৥Hu[PJ D{bOi"7<5ncGfĢBG;QȞ}䳮Ipk1f-iոN&y7ȥh@Y(":vݴ}ԅbчC5a ̘ ߹:Z[9-FKt;n!0B?g9TNetLΤa\F x@d6Q,O ٔ'AVSu#4BbE pU^x0R0k(OcE>9ijhbV`Lc*Fkdx$~[$cV"F~TOYfT9XT4 KefH,U /{I(&OL(I1sM ̖21ktuf^K6Х -@ ؍s~SM=.eĂȗF1rx-vyUHI"h ̼U )E na%9ȓ;ϲm/U-B Ĩ4`B4i2; q8 V9\+iv=ʳ΂&/7aAFV]⨗uf*y9Qzf[7|T=FGK^\>'6u .(=qe[ŊUf5XEY|z@ܨ4B% RRDPRicrG&ECIPdQk ߕiЧ&h h@ʄ"h'aNW8&4cH@o ě#]d@ ĎFV(T #eѺ{hTdCT^FDri*c wfqPF7O,j)^Tkۿ0l-ɌwN53 \(){,vAŋ1@ cW΍$bBCu/0 뵅r߭NfFQfd@bha ׼v|xA5D>]+)uOXQ.qE. <4\(@޿=?F-tB\˧L ],Oa~, 5RMښl@VBk'|RTLByo ;b\EćʪػZ >U A%4L8OLYa ZF&ҐZ9碞`J1HĤӼF Ő iFiu8ɺj0?=: D%ox1q#0YYC 12Y9kzN괩l:u"6 nX *A*SmiO^ֽ!RA1-%әhg%Rݔ5[vtثEz'-o]ȶϙR~&iBΜFG]4!HyQ8i%fopNI9D%tGsu~TP0 S[J"]?FIaj=暵X2 yq,dzp9̉DȭōW7hzEke\c U%EQ2,YT9I헟O~ p)=m)`,& 6dQ{(n3S%>¨ [_gѝ/lG62øJ?4f"\phi`J+דҼI4"ӐSHI%&椐b)2vC +Rb(N)yW* @\pIlU=t2ȿma{qPI)= L3DqQ*Sej@& ~Ay;!A'Sx2P4Mr>v)sneRmVUQy5 |rcэ: (\A'HA"={|LmdSÛ"=ѭϒ AKZZ#7rźL9SbvV(SAtu[gqkUK5l(VbH rrG_BQGAo)׿gg}ɇCl1d>WݎLj!%|3]Xrt%@Sչ;9fO$9IxC,,Fϕk R|Mmè\$O$(^ hm]ןꍹ?G),8PRReUR]wV-Ui n͢j+?HWOF+k'U9KƑppTYRU˜\ zO^tޚͦ`ן: 'A\#i3o)\934[Jqtl&v O { ?9ahp> afvAvJ'j1\eRG؆H"޾)M@-qJ1O+)9G!B 3bXk* 4Uv%1"E,ܨ*pOa':OtW[@n#B?g.9 A E 㮜]jE-zW ƈ0ED"ɇ{{H7 9ZmBKsQ@Tyb6^($k!*7WJ៟hҧ3{7 9;{+YW9&0Q'/V2P(Q}>̀QȌ[a ,ҟPM> _r2|Q23WC1YD*YZ9c6uab5$dZ$!=G_nx-PdXI徵m.M86ib­߅YYtk^߰’<"nJ.3aĎks-[f8+|Z_ʠG <Uvݐ&1 i?"x '/6yOi' gxk90,â2Mᓑ4ĦA.hL[=qѧZ<[PP+KZyq!{ VsB׸ UwvڎK2 %%!∛NÞ۬ 5^MX֏0ͷq}\t6pl)ُ/NZt{xJ jEW0?(o3Qa8馓ysox# ԟ8,冒MBuN',xvsWڧ_V@z]{➏nko#[ v =}O^*Z{EsgW*NmN{m4h('ݴ+IeM$ؚW)EK> Jn9_ Sni'saUI<(|D(Z%c)덧}6k1 ~7?m)5VL:j`֪jOZ|c]|> bo3AGyTD}-a(f+׻?F,}ᨖ?C$Orw=EHX^&Zp~(V/yn(%+i?% ORяg+a=c D:T+sH #6(AD pfzQ5aDSǢU_EIA/?@ Y4!H a$EAzR;f-aDѷHNPG$DtG("5"-r $旤k~sߍc "9 _0@R RDHd t`DlIxRD<{ ks:Մ)R,0"7HN+y=:} w7Wϓ!F2ȈxƲ[&ਟHx"UDA%}cؽ_ 75RiFBP*Q!zw#VAHEH5^Np4^KBDXƴ c qIrDww'畎X>v}awMcoׂ<"<":Dg<%'/TzוGo<~]M6/;{$FbrGk@ꌋ8EtbIHMwfqR `VZUu{)^&{ewek!5 |93<νQ 2 ,PY2[4;4dg|Om3.t$:n &_B?{;+זPo@qݣ\\W=}e1oHEQ>uLKqpp'5l .Hc WwG彍ß 36}q77:S%])#,;vħ߉\m  @ yꂶE"wz9@c[;/jwI^ 3{Tj*Jq&곮z&ͯ|~&@|I2]dH߯YSw3fD D*3v? ̹IOœ(WWM.l4b" W=6˯\w&Jnad'$x* vU۠0߅YSu;nBRqN$|w[;0ԥ5r28 GOJ‰{8}i O :Q> %$䉕9XJ%z=Ɗ r=4S>dH@ $T'Yڵ3YҍbMEibAhm |> . I<H8Ku(EI{˹?3'DR_;^~LQ.:{Zx0ѷ.'f|3MR=!sudT~y<^wlW(KWWttTc&Qc#t1&=^7p DDnXmRaCDV0LJoYO(z&'^w@vU%r-öI:e!p],8JZ.ID"4fJ#=c vܱ:!j$tɟ]*)NJ:FΨb? U9rцek%4]Б\bCH`ڧrH "rѷUxF[y Tua7砋%HRNÝ]'y)lHATLUdﴬK#-AsE#ƽžM'Sk2{M1ZcIH5h'"z̆K?g;.I~b Iz N]aFJjQKԎ~8-Kd gd X]GH@WCqkx)j޾CI4) }WL:IS.]S/]gV eJ4dIxB%yllL^z"oO,8ӯX?U)N&xđē\GFIvR/HsN]mg;u٪OSkDp댔͕ʕȡX8scAfZJ䢐e z vTݣ*{ƂDU[(IrN:=$kwtO]e߳v.xbRGDT71>eѷ߽$dht;0ѷn* Gq&E& /Δ ]yT XuS!+M/ ݷN^jS^(I }_ٗ'eiʴߦ9,;|]WA-53r0!= n\q6I}LXrM7Mh~mmSeV}FBK]vOvn/ɑRZɑW눗4\\fa v}ㆯx\OveJmW954ʓgUgD)|5!3:gġdDܳ5~o;eɪkOYpsO.Y%cbc40A0WU܄v$O"5M$M+'i pMCmSC_Hq4;_c` JTCSNcHA ]%D)U.Qv6h5Y(5۲))H].㥁¼hC.-1ػ}5z1 [} \-vT<<puRċUQ IC`6Sh %<.\E6ZE:JMudhvu& sδ={{sf5.Y>n6JuGnHOM N+2w"'m*\K)Akz,@wӐXmTB)(l%(Ih!RC֑xսbvIO[o:7A a_%t;gf?\\mi ɑ.lE$Ok-ʒ}c0~)d=2JȞҮsZ$:RWQIUv'5C]T袆& *Œ9sےFdvBJ)3$Gd{%fA<#+"^&| a Hg PEv0#PaO^2VKsAx*ŝ*šqMD {R3`ڶY̤3 58О䑳Å/0mᯇq{?/qHMN GMQRڕN"%"=uUSU %.U Ѫ)F#fr $3>Tm{' #y>(p_>~amBxm[}M<}.`+>s(xrpC 5;iڒJ.BSuáLu ]/$Vs= V&6ٍƘ¬Xv6NK ! ^MqRıatȬF*0/RkK+204'4 `P7LQ*&iODlf%v2!${+#[uS/ <~Hʗ^"N>Z2R8Q5!֝X=JKK2ڻnXpIPv]g'uIO9$Fఙ *9U-n,ilN@044X3<5vU4QAJ *Ve`?uC&Qqyܕ:DRfqM\(C_KsH:鰙 3(}ycϵ%^m[hm I:'m$̬ %f W#0`(3I%3h_ZA0ҟq-* ]`J%s*%~9"iȾam[8vSMJjRSjbp `2zՐ+hT8X@ q#ƨ,◲ X{@W^_[4ND$!Ds{f@n!gE;4+o,3KNjQ}Z0'w,8`(U`dRD}v^V.ai&~5Y1$ȶyJtSR+[.<fRPwtq>@W׻W =J8,kjf^]C%!OD/E#ە! gCnikVIBLJ/ |C^^ 7cu!3Vz;ޛN[B9eHVb.]S* 5r䠆2`?@~V7\{k,v[nE&@w|;tu|)E7Gm:Ot?ާ+Yeܿ#{D%s]զjw҉?^uUD L_׭4{ n'd[4~N;KE:im^}NrkA<)K3TtdIi#K/P \7S-$I迊K9'4d@@&5%`g* ť=x{!Mj` izzg4cw2'un9Hf.Ԗz3{gTxwf ғ٭jwLg4d=&;ӭ[uǀ;HCSLޓΡI̦$~ z;TRҦny.+M˟gl5HǃD߶q"O;ǒfKTxJ{|}zf<)PIP{Kd qzߒ)'>~8Վ燛 LD߱}^K.aѢA~Uv8`%dJSĥa Rhe"s"Fjս\J:d $uu߅, !)<jyoz!**UۓM=ҨT&L^M%I;nfVݎi+MH2xQRtH7H4K}DG&<}gA=s*n^!HLuNZ2$~;NmimcKc%%$XM~|-1XTn~q84k|){Vw"1aTx|ʾ/JTtSMOhR',L;*1S{TzBIeI00Ʊޮ-9{lfqK{ }&!mWė''~-kDA <ܾޫ(O(u4% LIw"acSG(̖ wZ%!`^<1᨜DҘҮc5%<}8IDAT9)aנlO9OgqJIڈI%a}T*J~#tUrڸT N8yܘ?2O8Om9|_ʴtOjOnv'*{P5O ;Փ$^+=PIk 5Ľv첐ڽ\,=,2KMwP{㟘o9_V,1f%;DXJu{L-P>+'tN߹6sYz'^'fE (ٟx+8(9%zK6C-Fh>厮+sHEq+󕾴I+[X37}'=ѿD4Cĉ/ȥLY'#y^ӁSW4 {{b93(o3cԧUmT+Axb~WˆIOD0 %1sNfY/FAt>wm50m!uk׆=&O 1N3iEu:P<⧓<{#$D7~6n58e0 hNf[nCuŴ'`Ua 엺jOzW +"~&ݫoxj;-1 \.BjBr ?k,Yrȑ#7:w8Ywp6" 5`{1ݻ%јȴ26$dɒ9r? hѢJT{+C<!{T{kw0dfck77>hѢs_uJ[ ~n0fVef03lOثt4~1(̳-wg(i.\x\=lZ' @_ٽT;uʝ=AxͿ[ܼ_qvs@~fǓ#A[orefcI眅p%u̘1wt---v2vgX'斖cƌY{I_*qz|9fpRs}o Ɩ'GOpVKK1c4o޼f`߂OpN[[۵yށBu]'[ZZ&W+h'V1u_njs7^GΝ̙s+_]+Hz83ȹڶ$kͬ^3[,i][0>-:Igـ}$"'g|5kLI 83>T7엳gQt9slkkLx3ۯ NͺJ,S$-4YmJ^.̞=ogIif{T_!f2k֬3JffV7YIm޼yq72r7AM?Z%}Ǜ=Adf?={gf?](ѧOJ]*i0$a„7hOj7IxEZ_$.o-%H@I9'$}RON:BIMMMM*}xI}s}Er$455%7~IC%Eoԩ)SI^|ܛʑܿJSJRY_Hz.?fvoZU_H &G 9eʔ=0͟g*:uj]I:877 MMMT*KS `f'xdI/宩JɒI#'M0k L''ՇXӉ7quL2r,iɓO,XrC$_YI:&M= V*I}:8}s ioVhf\i H(|K`'0pP^5lĉ>}˒TxOw2^sƒSN]>me%ytj .^]4/w}5mpxEqm ['M)&*hiV7ǖh \=}]HQ4?6^E ] h_x'ԩS_8q❈:2mܖ48U+g̘mԶwwM. ;ozZpf%2z")NT^9 /N/{Od8mrAwDu(KzHT+&L3:㢤zۈJ3fZᵭEL& pLI~= ?lk+d N-]λ=Z%iODnmFT;G1cԶl pFF}<ryKy3{D_'#\eܸq=,yסcǎzΜ9_{%NmI8W]Iiiiy644d{޼yYf;v3Vcfs]t+>$DQvMՐ<ޓd{xΜ9!ב<$% >%KfRTD?aOwOiX_3f---?xwvR70uyX@ā ೞd}}g[[[8˝7~% OFGϛ7o:̙3Ƈ ^&wUR}13gΆ [%iTGM3;ӯ%z @]h1Ucf/w?zQI1=y@(iT/IIJk`s.ɝV􆆆͛sν~9" B~ @ѣ( v3"/PICT@D+uæWW/HV:%yσ0۝?0pQ|@]GIp;#B:~]B5z/J[{>;D2oZ%IQWͩU79;>=znl{z)紶}$5|Bo[[[ xC,5jg/:*a&δ>%7ĉ JPO$̾, imkkkmmm]#Io,cIWI^]vrI󯵵~I?d뭒EwK$};'D>#iD9OwY5t+^!iUتRbʶx]=:IJK*$ύeW%}'w]7H)7p뿑 7~*.I'xcWIK`ԨQuf6>\Xk%Mr},^xav#s߭Y!?f3{4.I$2>V.fXpX3{=w^He~M_ef-fvE.o\޹Hbn ߝ1rԐ4eP}m6rde_Vwd(?HRwXuY>~Zfߞuf6n͍etgϧ[Ϗ|Ս?q{}!hse}iȑEJUzI\f:or`$}.5 SC-M6][tލ7.t+lrQ,XH .|@1E[/iR} >mf7vzaf) .|u-Wx +g篷+xz&G̬VۿUNr`+ˣ7g0`fY/-X~8t%扤o.X΂f̫^ƕJnIS|{߫5/"*6ƺa+8Ovv/YwuY g_OxwxzѢEvr5$)l6w/J:0WLrETf-1Xw|\.tR+| mo&dѢEV/#*,{sJҽ\r ?'?x; lEUI>(ퟋ-؅YKr#%<}vy؍],Zh5/_/^\ \SQ7.^mNt9r$sڀ,Y^-YD[q|mG8wR\e F/Yۭku`WyvUn)Zl+i)ǣ8?pgk>-ekL&9IENDB`Plinth-0.8.1/static/themes/default/img/freedombox-logo-32px.png000066400000000000000000000026351266051671100243350ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs B(xtIME3&ik*IDATX_]Wk L%s;f4M'*VP 6tRh@ Zc}RUii(T431im4Ц{:3TA9soxg/myNRGxSt#7@>șUls-Ռqvi˾?-E;Et"Db)a!5ֆjS&` "ZҶʅ폝g={eI;#B@ 륁AҾ'>{5+sß9p-` A$y۽9J4H/z7w8,rϵ^ih_LN.;|#}WJ!1?5;FOPCBg;EVIp $‡v+੯}iٟ;ܶf dGB<ӳ.n{)ɭ aOIp_r0'IF'z+mVON~;_;IcJBN ݽZʭ1CYe?&g匣]զBh3r0R$Tա *w%65#H8: 907e6 i1OpKBjꥸ-$WLٺ*{)Nnt2fM;8j܀%F5 ̈́{FoI.~_: &UGaTs]5jV7jդޜTo<4qdOTwh0Gt_nw>[)Aae bL]Rǀ56M7qnY=s,道mployg}uɻxܜk cn^7;lC k E#f< w3oIjfRD1Au3L>+\s龷SU"rJ\z;O'"BRD@?Q 1~饗*Ԡyb d}!ys8Idɒxd\굝؞3G_3疗|XN\]|9@Dp4ɣ%"G`7AZj?K/jM [@r|@Rj[k0}aʕ'L8n{CFV\> NyK,yƑ)p:nbŊ#I^p,S8IqƦY"0=vɒ%ըP,[E-d'vCD,'7|98CG5fIAV#|/7M})ewHr.HޝfԄ˗Ud2hnnFSSn~.BYd_{nPJ@ZfkP90@[6= Yjd:\dBwE #BkST]m$od2ha8M*o=y'@Y5A v-8D|Tt4H.&y4n_ m5ՠ:Mlywu---H5MKpde`yKKjלN U=R}7[ZZjLhCrf9\fH^S;$GHrW\H&FoiڗjD5t*8}Lg*hQ{ gw%-{$%"@< h?Rԅe8 #6H4|a1/zc!}J&ȡ搜k7]`p-ƼhmmT^iL&#"2` US%1ER(z&dX8۠ԑP(Dh[|ND^@۠/6c`Ro"K e\!@(r|w.gm /Eq? BwԉDEhK+YX|VR/"򰈬3u:@>!H%| `v Z\<ޢ 3`0DɊBH:@$ mpp~0SViؠz@, ] ?ǙA$ɽI6ȹ"rnw1ͫ $_!y3P(Ջlxr: 4 /0+[0<@p1ɏȱ:0'[ϣ $* PU"2Ȑ$Rd6yuG"829JDG2WK"4 B)v8KƜo Bs=HE-o BϻȏāLmpP(X4R u}7P(sC,C[[[%\ `9+kQs9 ,F U~= 0wc"rκ.r6.ReG 7H6|; )>{v:PU1#υB䦧d>`~ 7P%2CNBW||zX_z^dɃ999<$Pjj'8čbsx$?I\cû |=_Z[[Fiڊd2x<~z<$7b<9h4/x|a<OHX1fFkHv5jgH>ǯb婌/,ns>$&y9.I'$y>';Ǐ 9l?A*x<>u;4SDta,x|x^?1E&H.}m>f1e: 9Ղ>X,W{{3mmmHRi>X,v&&bg)3'hpJ CX,vkdap\ђWjNq]v#"?p1!~;h([U @䕎A,%;ԓ!9ں@hGm4b%Z[[J2겑%Wsb.9dnӤ? yEkkJ^T}o!y)attt`xxx_aWk[A/$S0xmv 'P^7A'kC'۴X83<< %'dGh8B$?silhh~xx7HUDf()DQ(fsB5RpFEFyv5zd܁ = }rxxB7bxxd"aqmmmv^l `0PLO-CCChooG4żajmht M;D+GQrxFgϵCaZ) +.( Ir2Y.x\DtBgd]FO,%7S mǣ"uwBmGQE俦@Չȕh}l!m.]!tMDh͎tk"EIH-gNp! J344T '&'^6/E"7?}[u<;~Rm9Ypx ]cIx`0=kD3t:A8mNѿq"~ mY+Nw*$yhka~&pr8:00˲^b3W^E*9]T!JM;Y=SeCD8n-!^ ^ctdy賑HD+D" }P+p2v<C\M D_ɗ^=/}\.Gqvxra9'૟[Tk< /!7J\`M,C'OoD"/c|(]y"HuCsH6qp%# 7źuRgg<;y, ~ Qm8 vU] *np%-R'.vka'ݏ|闛e&-[:%ߦ&ؕnl*=t>}ppMH_깈}d (!nr0irL`W]gHuW-'yGc?66[__!["ҡɲkU,7^3猀 ztD"X!"(^3w4"ܢġ:\D}}}|DӆIH1ww~_h%u *DE"r(ʲL{{;fppmЂ]. 3:;;_v?002i2t؛!"2|]hZ}R$ύ^244epxnZvE֭[/DINεdEXV[|vH> . {<dY֟R^2Ƶ޹RQ*|N_D"̷s`ɵ$uvv>H>z'<{ `oÈ xq:ujU:>ߵ,b7 Ltxg`]!gVl7c``؋b˲VBi|̠?8˲W >m-D)=00O q -^~rb;CCC ^֘:˲h0q9:04$i--ZSBwB빩eљu<&^q```W9SEem*KOlζ,Od+AC:.e-j.iM3k h'fe+`xQ)5K)uR*\+NVJ+Z?(ekY:/i{8F__RG+,tRer"b^)ZW)5=RgW>l˲nPJ|1:7(o>)ëZ8|y ~?J'ǣ u_AZGMRR,k+ /˲*nQJm63RJn˲VYN{n:rAB=ZԕemrwR Cl-e%R/i达FrܯRv J+\F6(-ZNgk&:bCMvuu5k!@gg9˜#|R(sܲ<~oOS'I>[`ƍN5q^ihMЦ7( tyt9ڤKa*_}zSdiׄNtwwHI>l(u(=[ڔ$U纻@oo/ ͇z-h(}#-ߧ DdAw7tz鸾?<ŨW y!~֋ )o~]jw:0_joo^ LxD\=g,=> )V9q9&[zn^l-aK]<`e }{.0]׊v#~pG"F7===s=Npm݆q{zzHyftwwW< E6p-'xp6lz%`{^yS}:DYv ===s#.:L5#_[{zz"~2iJF;QLC|~q8.B#d)SY R>=7lT}Mn0ӝtuu_/\ /+׮9;~qRu6xdAQJ 0?wǶW:J|x vAH%h RK?d^)5ЁȊaVoo/Rٺ]s)ɠ9u*VxD4M}}}Kv.HoEVZeSF$ eYNI]K8ͣ>,`L#~9YNUggs@<$u!X `-[ohhP|Xn&z? e<00I;v\\O}ZM^ڱԳ5k8}t;ӣ ઱[Lw"p{"":3Ix=T'.nI+Z3&<Sao߄͆|.GM&?K$BZm; xC@Y>鬯 qK{+ĺtggg' #z?u{I^  $,]O圮&ζyo"rT o<'*Nu[0әiQU߿ڲkaV 쟧ATC2}~> 1`Y 變{ v)xKohhj m$S=礔z0ρuE3]88Znk<<;D<=y*ۡGx13:3ï`oTo9H4;ӑ/g9y*4|URmmm `o4Q1H8>gppr;{ә{pppDhEa$%xcɀOK-߁m=v<$M+^1MrzO%]m'm4r:Lg+px+YkYQJ"b*p`||ܡeubQ4E{{I"rɞKl){Q" x; $0-"Teæ {UOx~xxx{5FMC102YmJ6ojmmbiWlU]Į*ΔT'"PJÞ\^{#ҽ 2+o/bـC`pQ i*PBVJl@;*UJ=ѯ {*wՉkCssϔُyJ)QU['SDD[sRp9(^rOۍq=(> 022R7羶\.w C@Ix H__7dxG u~rC |&uh hjtn-c-әp5 N [&Ϻ6P(te"lg0\Phk" 'r BNjH cr:x gdTQ)Ղ7< Q[)#?Ki !SRuf*a) `IDAT)@ m8 nGuh'sREL8|2x >yu$w'r4nRm Lg=t`o]3`>g5+™L&~'(d6٪ ?3:~!aG ؍|ܜGS@?ߥ'yG  LngxD;r֖#RԶe˖attKeSԽ---FKŸ""NDt۶ɕnP`+ mmiic?Ǩ%6π[F@<{Jav,*cHR/i} lw"2*"aW myC'>t琞+3ei|MDF{[`okb7bc[ZZN# TD:Vy---_mXV"r(O9t @KK .GRəك$ ySH}8| n;NnjuQsHNxyߋ 7qDmq"^~;HN~u$ߣ"yɹy,qR(is8oWH_L3G9 q$Oպ \z`"[8?~?.]Q,]tQr @s:^T*kD٬Qv뉠"әj3VO$otb'it:}7ď$Ōf*B[[RzIn1"!JObt(L*OR1BNe~2mOC R\KKKA9ߥ韓2UPD {Q:Ckzְt:} TDNAn?&˖-{?`3\W,9]Q\. 5.ZcozY)<,[$n:V)uv"~:-JSFGGlٲF39iJCROV)^+s=KɃB_M[w9sɣ.]ZvZHIjZzV'0-ZFRUJJ#Q)R_tvy9JRo-]J= +ߙy/DE*-8W꧹lvK&2?E'0bwyd&yˡ.s=kMR6䱙L沸Le=T#<ҭil@Q/M$o'Jsڸd \f7f9w3 =dʣJd:ϒ\_NU+vɫI/do ˁKA$dediٱwg2'wz]L$orQWn&iikǷ>?][B{ʕSt 'ouf8 Q'}f  QDfT0vY BGQ|+Q|.>ԄL&cӇl6|Q"t+D'Dcl[#QaOîLZ_f_|fٌWC#~א< Iw.>ZWS> {}5> /ȿ|^D'd.fe_~yy'H6"r+9˜d?n"$K.A]]\Q]<Wg̘=Sg)ѩj'`dY|Ă f.}Dl.iCwmT] +VT4!zMp]Es깽g1s`ozWl^|Cojjq > {__՘vk+M˗/3m۶v/|O:C9ڑ޷ا~.p %]>?O_|B1y[PNDf4-ExXDf9Y؋+'=vY/C.ImLLq#m6lz5x]1pV|@qѲ>VaEdwQ h.)=`}^}>MU.$KIENDB`Plinth-0.8.1/static/themes/default/img/network-computer.svg000066400000000000000000002342111266051671100240100ustar00rootroot00000000000000 image/svg+xml Computer Lapo Calamandrei Jakub Steiner Luca Ferretti <elle.uca@libero.it> Plinth-0.8.1/static/themes/default/img/network-connection-vertical.svg000066400000000000000000000155321266051671100261230ustar00rootroot00000000000000 image/svg+xml Plinth-0.8.1/static/themes/default/img/network-connection.svg000066400000000000000000000403031266051671100243060ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz server daemon comupetr lan service provider Garrett LeSage Plinth-0.8.1/static/themes/default/img/network-ethernet.svg000066400000000000000000000610661266051671100237760ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Network Plinth-0.8.1/static/themes/default/img/network-freedombox.svg000066400000000000000000000136271266051671100243120ustar00rootroot00000000000000 image/svg+xml Plinth-0.8.1/static/themes/default/img/network-internet.svg000066400000000000000000002404201266051671100240010ustar00rootroot00000000000000 image/svg+xml weather-overcast January 2006 Ryan Collier (pseudo) http://www.tango-project.org http://www.pseudocode.org weather applet notify Plinth-0.8.1/static/themes/default/img/network-spacing.svg000066400000000000000000000032721266051671100235770ustar00rootroot00000000000000 image/svg+xml Plinth-0.8.1/static/themes/default/img/network-wireless.svg000066400000000000000000000274741266051671100240220ustar00rootroot00000000000000 image/svg+xml Jakub Steiner http://jimmac.musichall.cz Wi-Fi network Plinth-0.8.1/static/themes/default/readme.md000066400000000000000000000011161266051671100207410ustar00rootroot00000000000000# Plinth HTML5 Bootstrap Theme by Sean "Diggity" O'Brien (https://github.com/seandiggity/Plinth) ## Summary: This theme is free software offered to you under the terms of the GNU Affero General Public License, Version 3 or later: http://www.gnu.org/licenses/agpl.html It is based upon Twitter's Bootstrap (http://twitter.github.com/bootstrap) Bootstrap is licensed under the Apache License v2.0. Icons from Bootstrap originate from Glyphicons Free, licensed under Creative Commons Attribution 3.0. Refer to the Plinth documentation for information about editing themes and templates. Plinth-0.8.1/static/themes/default/screenshot.png000066400000000000000000003501351266051671100220550ustar00rootroot00000000000000PNG  IHDR jsRGB pHYs  tIME %ZtEXtCommentCreated with GIMPW IDATxw|lM! ^C tQ Xkة*!HBH}3cȦA~~N9sΙ93C`[F.ܵdPpΑ BXxh(x xzSAPU{!GEٜu7C V|p=#g^RA읎PMj&2=kjueGŜ_q[AeDop,$'EͶ}P*PyN H^+Fcj6}+Z'ApF}kA0i1"N2bA((3gF191Gn\V ү,ɜs1JDr9\H;k (X)z+e^r""Ƙ̏ŖTOp;DĝEA ( VξmsFD9qĝ(#Ju5n-4go=Ĉ;_yQ$LĉdQJB@Y=l#1g83"N)b_ۖ7ZɆо$(eY8q _-ܒ[zn\2Z[|O[ߺM?yO*wCnjJrt3Nޣ27/}[i&9q w]3WvuakD}FJ]}s$|}|*V{8R)1Ή$ \-㏕uvI=+A_(ɲ9Γgv/9}u!['xhI&"&(u54n?>D=p#DDOPhh6Mho<7cW# ..\$ι,s&0 #fJH_5Mf?' DU+;X?$qN~{ +Jba'9E7ve>/z`[mxh=۰ԬMsggN3?4^U9ANT:{͛#7!!!nnnǏvmҥ7vmQ7 nNLfM5 \gƕ6+9qsd8qٔ(=y c~Hc|ڮsϩ/jbĶ;:m۶=zŋ?Z[l)kG9*h`.s,se"Y&I9'.p[Gi5tǰ/ 4󈧖&ID_ѭUj-ZV4zwj$`q|߮LF1׶iH&ڥsG7~,[]C:u|Քkf~My߄Rm/nBq>0"MC^cŤz nC`eꐋzJ(;r*{Nx>Yq8Sx ˯4teuG?p]B=7j>e4`ɚxЖHVΝGMo’x;1C/zc<ݶk߉ZUeؿETs׿HػʐZ78KYNO-Zw֨cpo\l +L}"w.2^O\\9#&rǎSiR8}'F7,=q; CCCK>{8V^7OI gn=ga-su~qD 7%sqhh+M{ʴ%U][+՘{bi(ǽtx;pUs怗F6V^"ʽt7%{wyJd[ܨOrOqɴ}^(Ȏ;?=& N"m8_T8lq  kOSbBA,3F9ڃ%W]WЊ6{vyED&2ɅI.ꉕeΉٯ(BWImUE{Dz~Ԃt;+_<_=FD$xGҺA_]j?l#(gLJϾ:Ipoy,j^fIΓD.71ڣݹ*i鰉[TK^\]n?_2q{ 7O}]GORѠIc?Lzwc\M[.͝67z}6dBI_o9?1.R ~>~{PQ̩ d=>E6}yt=\DnO }C۲ t'?S"`Oûhy{{F< 21mY0^Y13 ][A ]Vm )W6mڴPܹs)̃^ʗv?|hۮ۹d̙ **B fpV-2Ae*)"f9dNLP*d"+UdɢFW.Ϛ5+44t׮]III5k,jڵ5kVE 6qTꍺ{|Pg7a&h _lr(Z@f9$Kv\sf9$3ATIVEe7%evmϻ͚5~[Qha.$jv;b(_(Y&̙P \\:R6ĩxq.٬VęP*]RhOoU'[QE[ b*QWRj"s]TUyo֭wT2QGs"G:A8/]9OQQQSLq^ 3  (3[һ ۭlJ;d*(mvPkDW/n!a'h㺀Ch!.;v, P(1QT*FarQZV,*HrȜT !I2 eQ,vI.<(Ed9\8 YșJd;$I9SJ nlV-wbT <4_iXgc#G]bwu+|L_%ni& z2:*hиNq*xnjnLW!MM+0ujeU %bp/R/s9"q.z_.R˴ޜ3wd7XL&Wsb$1Hl'R))L6CR//7疢%}=m~F]Qk3.|ӻ[Z q?[},I~̳StmGsO:HݿW>`x'~~p3ai+暅Yo=I۾]|9fّvP4XHպsv#EXBś&2i~Kƽ; I.K5Jaۓ6}1HiR|֔W(TU0IUDf7fZKQv^ "} [X;Ete%""n^ޝ۱_Mp+H!wUa*({7Liܸq , Mw"('3l1d""Scۆѱ,zۡ}h9 gvo9oUv?c"ѻ^{ftMM_4[=Ҩ'ۻi͸qGj^[}Xĉ¢Nzȑqƽ;zr~;gΜ &|eIVdDV[qƨݗkݷp'pLĴ͞ϔ{ ެ[bnv:e}VҮ޲|" ;dF̽ O-^y*8q1c3fLXXkVb~LR]{={TP<;D ЈC;1sVzgeRy`sճ?hoݹQMw~nǚ1f+kuһUm7{C<:mU+Jvȟ;w.**jĈ lUv~^[-i\4) >aorp #[]M*>i%ј9q~FFF&%%]K3p"m4PYU D&Y""^p!GGȤ'B۵j^QYz7"oWg{haoȗ_ ӝwy9\73(s-_׿H*͑saIotڄwo䭱\ppkB4bfݒOx͕HtױOf{ZTd{󿭸bs5Ѣ֤[v ҡ/eIڵwF5̫gbԬ&:uX3.۴RTsoɳkeWǒ ()#n,YWy ͻnk?qQ׷L]R_kK*>4mO+ڐe.Ɠ$NLlj1CuG/Y&^ԓ%s"Ν2IlRutH_艬޼+ l)WB`3T5DL\rcHMsv*=/#HcE)o>˼Ĕ[N)=zob뗝z+47cy)u3+wݰ[=@K i㜋>ƽn-݈ 1r@Pao#?x"x|$Gʲʔv5&}],rsʴʔݾJ٤w3Lj6̳'8O~+ߴckntDZg"s9'nL ѵc΄<Ѧ.&:ɹs Ę:~… DԧO۷5O&MdJ}.\(<uԵ]ժϖ~3fL6ỾOH?/4䵗e]v:3it{_⫦2љSGDۤk'ZOĤ%;ܖ&1w{ozBjd^-.pђ ֏X(6'nڹgT76^)(jj2ChVC_x?~?j:rr"w9۪5ib"kYzâ5v9AvիYUy17Kdw]|.Fo:8?V=J_MG&vy];k&Y-'%o].p]XZy.zgTZld@_ҥKUDl1ZeN>'f!\p!D:_\=doLP+Y3TUɒ]{\3#޽yfV?m"xk#} lBk@#5Db^t:w :7US8_ r]"~isB2sk't)򆍔u0_M,~2c $Ҵh{U֚t`sеﰧ &#}s SW IDATY "Td8*JTLbƌš΅ kuxWpؔvf ԖiUyh.`Sv@T4wgTA;n ,p/,6f̘I&9ۻo5sj*:\%ϧl_DTf)'9;M7'snUÈHzimY96^;}lS(Ez"<Ѕz7]7Ҙ1cƍ;wܵk9#y"Zf_|Q~saɌ?$"QW=e/Zz<“@,;KTVJ#s"t[f0[_΁? HyZ iU]}HP(&^'eD$2 8R,]\Ld;Vh٦WrbN:p,FU22]ْ=*:*]uN{=鼀U###+rQNϱ8$U7{_Mpۖ]eBsQT͔gqd{~m%H]M[ug^tLT{ݔDd˼Z,Y*G x-}yVUPV.*<]CU*rοkO 6D-jlrLQ4zKc_˥^^4qJ8~Ja$z7.=iַuD{xOtÈPXjMؽRtj辶yL9sʲɔӾ>!.:j5ֿ䤼g_˽lj_d8Gwʻ{z9KnbT]P Wb., 㜸ڃD̙[MsAKj7Y2c=q2$\QsK:Kc-\ lcOnr~ nъf8u>7ҩڦuE)\Ky8cB`AMtt36euѲʠ -?w V_طfپvK^f⢰n%ND{rLѱ V21h%}*H!wQa슊>bJ6W^=m4gwСCS9wrsFFc| ˌqIzYVRoe[MvIV0ul`pɚrᆪGH9X/TuW^s̹h4~k֬pquАsyg.xt\77vΫGbѦё]E&sNwƎKD .`g{l6q"bǞjtιp$$@\z rRƨ# G6ZwܑKxbG%/]ϋKVrUdZ'<<[S;v]vS;֨Q R9>ɔnJSUٸ߼dOƒ8+>.A/q=lsUuMqEIY:8 ˜d;GY JԜ?,qR o䫂(?s )o??.#/tSٝ 6(NKƨ0i'"#/|l *w}5.Imγ:g9L'1g鉤v)FoY)J(scQo7yٔ] 9#SnX JNٶmԩS+~& 1^‘hEIֻI/3D)[et[O]Rp%^{Ԓd.sdb9ɜG)@z?I&Ι,KL2Oo[I烷zUwƒLxc)kNJ `Z1Tߝ:Bpk>qJu_x\37gF]^HǙ*~07Po [NHشGӻj4m3sVmW[/~F$]D^mƽ[OĜCԵ#O4nQW飛8S˴çNI1+_UЕ >:t3hڴiWvƴwr\3^{7eְ[Z v J6FnZg0FBZ%n?ѵO*bvßP8ycFEE:G;⁅wkfN<ַ! hR ٘k,vU*dKs5{tko~[5 ]۾m 瓫aե#بg}2"]j:kT|99v^ G = t./\p…@4oO9_PPPPPs6Yڲs"AՠOվ_Ӊb"S= dw2/^xb͚5/J2Gz^d۲u{-N۷7n\;vر—><5wS^reeZ ZV>Am}pfԅLm:LOO^ŵ_m޻D~ $$au$Y#Y;`>OL(^0 vLFeeI.1CqLrh+TM 7j&lɷ)ܽJ7/9ܣR&S]Vx)H{i"nu91bO۳ſ/ߓkz[Jﳛۻᄏp€.\9 TxPuBA"iӈU;D29߲bLu~̖+TxO,7{Tiǿ~U9Æ'.22Z}PJͯWf˅#ק|$)n]WwJ`'m|ʏǏǘthӿ,dz1ܨϾXwP:/6-VݴL咅xڏ}b;c>{ioΗ`Eg􌃈(Ѝ(qG]OkZh݉te&]t\@|5?n^ZOZ;X ɫan) bWOf|ǰ'v˶|ogz%+Z$0*$Dr^?Зe_S`ɥȘ 2%>jra=o#f/:=5jς[?1xR*gS-Wk]VC$ǜNԥGQں]4ߗjD7i\*-չsÌ֝jtrd^(=Lڳg=zoaܰpQݻ5;gjڣwg[ZuqWӭ$Zg}W^})ŕ:IU ۴L &>V=xQ|2-_xdFTW.Tj钯7󅇊m3"A`1bqEqYf(( Qg I[^kۖ=sxbwg2/{<"0In=tl8ۑ{zg>+Uzѻͨ^ҥU7[?.nw 31u@q kZSpZz<ӹ].q$;esy:Vj;VvL$^cZBO:9RږiYNC&._3AwC墿FuxzߺE?~fkQn[oݬt%h{U>i]yǿ `w#/%?t8ORX3ۨUv_YmsCl8ͫ)r9k/xX\V @.} vܰ?zp&3/ nA U_%r"B6 7*2 F E },8{\0ݣU]o=7ܾbr0~7%<6όk6A_z)Rxt׭YM)̱ԺsT)uץq #3ik8Y=^yuVό >X+1 "+Qu/Zt(_K.UC5*;eOc,٫j;T{OjR ƋVOcìE|v|ǠkVwmpjglD7/^^. 11ƈ;LjdT4h$7se2/p鐹j#o#,p2m5ٞmxM,Xb£FQonLl5Ÿ ;c9gDLJ:͍IbD/ ĊfęgD02Ârl;b4H?{'tSqKu;cnNp&حp9px?=Ѿ_;dFBI[mԺ]ٷ~) SDgYۑBBBjvP cĈ8c81Ƹ9۾y g 5cW9yzx^n''}x9dKP U pxX(p<<Рx'C=pCX@ P0nhB x41ت'/j~z!)Et};E]wuⱓ1H^I-)%;ҴZ(VJ%J@.3B$ᐙB!.;$R8痉Rd$;'b( cDĹ,Kf$f??{ɄNEqO,vS|(H.9%,ax8 @ b bXwEq6sԩ+VDGG֭[1UV}#s~G iZQ+Ȗ-[>&FDDL:,If=݊dBVK"|8S>3^?u}۷o̙z~˖-GĮXLҪU+g]T޷~iV\q7XqoISf[Ua~u~̻i3_\[KQKx)MMryTB%%Q=.Wfls6j2 DTDZ111姭yC6'YV&$k6euϖjc *^~2~{*$%9hʻe>ƻ^ֽGKnٔ%9˸W;m) "m[*o@Ɉ8me+JDDWEW}k޵ɗD̎ rnl3$˷Zu&f\rs,S6}ԲW ]i nݚN:UrbLLLLLSkxˇV jx>DoO4F9Ȟo>`Q )*TqMn<Y俶6->ىON$sbr~{QʷyUgr5CQƈ/TSl817{eR]U^uk_"0INbGHLdNSEOM)'I2*8 #΁SN-cSRR߿)zU&ś$XGˆjmmryNz~sj{6 TψܠJSS!pj!I5O'캋77eĉ$I_}ԳT(%:ca*}qU/g̾V*1/\Z~_ȉ[J;5Pȵ}g)B{خ]FDDlٲeʔ)DT|+e˺vXzu'iQ OUs IDAT|oiT 月8wmLi~p$dS(C5̹2Ґk4nJ/✈d-v"M̠W&kD">ְD0"Rʾ|X~ ~,AgyeT1N |92 NL:u˖-s_lYAAɓgϞ]Nr XzQvaĨKf霥vު@$="45O?ȈX`3u=Cit- LY&%}Ee =;I7wiTӫQ~J^,egkZ VH(g&KDQz DDD̛7e˖=sg86%%%aդ gՂ5"b~A䩇Tx*/BLʰ%q_g3W8|'b}:䦿}ޜl.\N{/I\c|.; =/v#ϲbʈ+w[K*Ta%yMkS}[}PAlvƱ5jpss+s>&th!RFQ8;?0/"/.2,#h ?Gh˕vkuͭOpUl銘qeh/K Ja}{٠EIcņ8=N|mxڢPֶJEUQޣ){Ђ6ۍ5;}_O@G,ð➾JJKKj(VSRRz}yI dH !OdwiQFD\$IjۂFQ! Lvإk\]\BA`Ι,K$( QuKET*薉LT(lwT^Fukd=$Ifnd2!tߛ ߲CD\v'.K[tۊJp[hfHr/c\oSvsq\p  Nzp5XxqɎO A, @ <{blٲiӦؠADDDHKKj(V~ɓ'6=88xz If=݊dBVK"c8bbb&Ob%ݲeKv߾}+nٲ̅% ywg)[ʞmӴk^ H͹f_/L;[bNnK_8I)܋6m*[nݺu+9ee/by5uq7, ޻Ϊ=o먣κ[TUALY7$$ž9nI|o'NSgd4OP!:LJZV.m ȪU > k:C\_=_48QqJ>8~pJ{߼KO?lD&. .l"ۚ{c+EΫN:]D]]2i[vp4P`c(+$,I@V&LMx&ˍCQ4 km6'.({{FMdug)/ }!҅kL(T(!{(`85I3pTߎ 'ծT{ywG^Gzh/ANP\H'prr T?6te!eYFM1@]R$J#:Й^-FiY @( Y)Gh). Tjg`HEi:-W^E%|I+R&_wUfG~GE7xGk- S\M|;1Q$).m-JF4I+hշ#{4Wj}lpd1 N+C ɀS&W8r*/(-*:ZkKFE冊`Hc#'k%$;+?Zr#)Ҟ:L ̣cv^|*S~XtS˗'䷝mp-  <,zb mCF3t2zw֞~5 4ZܹVlCfQZI)]|#ϛ;v!KA[p< eˁdЪXuؔDl05n7Μea8zeUWM,NH? 1()<]MJg%b̾z###oB{[}) o;FiV|˂=Ug^;6AN/b՞G+e UۃVykYeYo<_wpT+g?^yEaIIV  &$A Iet׵LVQQajjڦN6僳y^_sMm_=u:q3$4_0o|3U.&3{p4S~ܱMk9k7UjN'ϫ(V_Vol |5[r p0QXjʾCqoӉZN\k&@a1{:6kjcg-kb -zӉ5)Z3UO1 8"a~'+.Np?VzpN\{91-E]_g=45haGf4ӿq^pd4{\T  *? W5L*5%%R ɐtPiTQZ&֤Ew;'Tb87K +WWS.pR>7nۧC蒘׭L w{#JW/Hs#w\{. [61h1.cꮟYR{G}Bu*mO?jĔڼ苐\{i|@e= Ya_?##J2qefM?v]?;}sALЅE`;?=xVxRIjj*|h5YTq5})i Û[[q'V,Jtu ֒8BbʃS7KK_RG~eV#aȈy}vˮ2yM@  )t a[UvLK@[ŷW’Jɪ!ZiEnoI@9KZ=׬%&}|5RŧEͬfv5b˴ϴqvU$7+QN#} yN^)i%}:e崑q㦫eCzR.ܭP-0g=%n ivQ-c  N>dE0M z*,)W a?p6Lk ZEvκ(aA&@6ہ/E䟁.:YVG0-͹0׵IzGzVO2zl iv+Ic/֣$ԣKդEog6xEٚ4N-yTmo);L_>y\i%@Z҉ "AGeJإ=Fv5,ص)POɒ|㡟.WHXٰ!lϥ_Q̎1Lz-L;5LT,Qa]6u4V>jFD`%M|4tO3뗞#|A>ڠf0؏-: I֨( oV?VT|-KO_3{"<=P" .'F!N zeH2wLdj:7|suoןh<|~px%0w=dk~z-)KjfU5 ^#j3}?Np~GM Fp=o4GN VRV4(ʶ|s;uUsʳQwwB²|ivޞr\T  Mk`0wd2YEEiR^^]Jo=xYq?ʳ^>y"%DL \vgJcL}8&>%mۧ3="qø2g.v< 5 "QGc } k{z6?41W2rŐJ_Ll! ?֧w'bCCCCBBJKK eE  m_"V(.[,!INNN;vxXrX  Xux{bk+X'''ooo ˖-bCAAAԤLV+9s6X&%uYx=hkP7QC]8Q9ј;S'-}   "V5!!!?N>$*6ǒ9صF$-"`{^l`ШT̓ʾ=,pIio&j})XAAA6_N/#!!A >}T(VOVh 6 t?*sR oin 0)TWZRPs 6Z#}:7eRX   (bU[e|||mV}8=EKBUxxK$reQ3@F4M4EɴM>&+AAAg|9yVVV>^ggg ~XnK:ռ'$%pe2 գ&tq.#K()8   X 6,**cxx8TF@x;rbe)A&L ŕˏZEM"J[񏦄.gS`^@4VB-,,pAAA6_NTQ VNNN*Nu!;Hki#;p 2oq^u{=g ؊2|ϲ2nxP>5օGAAA;vֱ;Ԉ0Dw#˔ l0b=ZLyXr;_QA}r1M   ~|ixb IDAT:;;59ԃ%95>X{H͐3:uqxinG,)ifqY]m6X1P"  Mf0<IP)U*I^%,- I)Ң-l,q ***LMM4rt5  nrl9eRW))v]S   3EAAA ҪHOCk-9A` iWp83C`AA .a{bpeuЀ\:k!H_(kO-m(OO*_&Ӓ&,ZH2P࿴V\iY+4:NZȜ6,_ :yaҕ_̙0@ 4r;B*e#\cA`t</dQ']:m >y=MR,c}:̪ڸbƨgxEҽg'/6"@?tҊk9q?+Vro_' WF k1d`yx:R};U{aSG F\?:Y e&lK2_5un:7gi1ߍZ-jIAԯMVFgշZ-˽~@0,D5I4X 0z=s+Kr!Q6'ִdUhw( XA5вё%/H@}? ☈dIz9@X2,Ϡ35͸w7^AlEXtL/Ho_N][4=3G,X2{m_}{2= I?j1<͘7w NJ7TH7}(I@R*. L.r~=cki̘A7ӗzU3\vZo܍= 7o?Q@O>>!`ڢCm f1Cs]k5*]F3.|!Qq,JN/yf}LXz xAӑx$n I_x4hԖC+0{f脞+: a{,@GȲ#ClR3i-?c̙҉"r0'G/iqI`yvD?͖:n,{t7<|^Lt[:<Ȝ'b +NZ.;U}$=sev5藑f~{gHiz` z,vo,7. ~YEaնD~)Ќ@,*nlLJe9ZvBr)ޤ+iv٤[jAḰФ΂k]oEMܻx=;um@UhRUGU*Qy2ѿZs.soGU-hN)/&@槟z+iNTT!{IqE`?yF'8# Kb_80 ^qX2gF5&\[O R(=0sR2)%-LŁWc/ˑQͷQkBT ʱD+tԨ!59zݺ? h,5,wV/o9Juvd7Ԕ!]IUT!"ME% /bBe233w% H]/W֥'^'47]c׉ףV"Q)p^q.eٰNzJ\pZ`j_:%ΖOh>#r?)O&bW |k:i@y-nxe(}G*qqx7:r!UQ:`hVdEvvL >ճ\b呔=X T8CL묿D[Jݧc~mYq~3?LL&055mT  Hjz;m&X]-_~!'byn}^䍻V)mvm2@ZV GRw$bߤSͩ"A2$I@S2 HI)&$MSLF$I$2Za$2&YGYJaRVNK2%g.L&dk,!,(BUGD;  ҌW켻""AAAZ(bI   "AAAA    (bAAA b`IK˒{KS%o~$ =L>H0|3M- |h@j!~T6Q A]gGJi?hXCi5ia'脶>5;vo/6e1ޫ$ft(Sٚa 3(,7E}8 )bA pdh δ vꁫS3~hڡs]p H{!C$qZA8 Jt (bAEVuӆf 1 i_` i۳0@@w#GWm?;~ٴV츞QY'oN5@?l¼Ov^OUJb/lp`ШkѢ;??a@8~(=&<3G ”k S _>TT,|ym [JfURe5]7&*I=:jOSO(lد׫TW6utzfgcIw m 믿o"3kZ|ײMHɩfw|r~=k홗!=[ރY$"ʬcYww5f]{`aXu%$J`&_?/bHo=c 4ОYg/nG5}D׺}`WϮ=gU];״W#|`a 80o0M3cj&m<*^*g bn3tG==*_߸z{dKVٿK;lMH3/oj)CDyɟhVsxeӥ/<_9MпmT,XfiګTq?hOrԆ̴~<_ְ_'L~JUOׂ]3NZٸ% tuvĩˉGzT(#Ѵ ,9jv jb4pn?Q;nez$lV|v`Ͻ ~r/?,+7s㌾fuu6qԥT(q?1aeVݍ-`"z~pǭb~?'cO,ȶA4ʎ#5ybW-<|O967ʮT@ IDATz$̞}n;:JwN.ڲGwM5?#̙w+{%ҿ6\e`.>1Ow_3Ǥi&WQxdwN\`Yݡ,3tda]ܸtկf}l5d(9g( Mma'mi#M4[ú4yY@eG&٤ gNnhR^4t,H9Uuʮ^K=|"ʃʺiv̠"#=|pvӻ,|˧:E8/ظ‹[7!ME8'O߾%v2n",#h>X-4%ݪN:ؘ J0t[&NDnZb&]~C?mޖTݦ=܋ѕr_ ,o?%w+Y,Pm'A6L4]CajVfֲ^?dU@<3+V?Z3[ #"vf' ZIJҎ7}̥ti^\:Q%)PZ蘃PTR \3m6Hr!O@bI(*pdۂȎI,*| =- 8?zc[.+[܈Yv$!@SDs6 e[~; ןÉҀ:+W8oFg X@;|x%l+6WSpZ=!oiҢ76Kسtᜯr9;ˢW?+H?JFիg M%bumOP=]tq& obwԖ1MFsg\k@r#No-qKxd%Y.6:hjE{y2 #N8]CP#76e?$Ό+dT"EӲT۩ īXZ~BY%yQ7f*|v+XAZw!RJ*}yuo}zZ7S}S^=ʥY~&%㚺NKh{c(Ht:Y]&%ĺunѶ^>;iX?7cK>ɫyHOJm(oƆOH|2=}oY3 ӌC@{bזKv= K pU}to[ziͤGX)_ֽ}P|?Oc&I>CWJS[ǼUfҠ4fO; f?{vFF92h~Z6}_t<3ȹwj @y2V6GJjjf] >3Ʉ>fg!uZ*;U56۫ͯ~ Yc?U!5zw::]&ks9;6Ƣnݝd9qwo<yTo^' V׋7SK|-2+v$=̭BFiI*^QBae>>z~T.>M_Fg A?6pE]<|K썇h.Czl|4;\ض7za.lwG.o&|ۮeٶo1κ}C;hNZ@u[y+ȱ ZˎF8w\{Xk0=}?/5W2eyLӬ(O݇>髕x䱳=o0ʊh-qFUnQC?}.MO>w0$Rjtՠ,5rjoxwOm[eSehW[2U!5-qSU:*KRaiS.:Yř"R<>ڷ}[NAFjvQuÏRLJ;}6~?;J +v+RR$9d_rR*2ӯtN^W6%_OvÉY?ogyNaÙX@ҥM///w:*|Swa=BNA.-n&V~.׷yzvim45;՗{c8y<3 _TmSQ2 Mr*IHq`TQ *meBBB@HQ%RW8h[ YN~q 0 g#e އ^| xzX~-I6BCi  )4 EAW^(ErABByz(AjHRIs?ffw6P zJe<3;=mLmc:?nhVxQ: zl8\|2={E&շ-IJO2m_ O" 4^f|r =i AE 6oeiW\Q]Xr޸YgrܐŖw;[w]zI0{z2TW{S?"}1E붣QIږ'|wjeA<0Hn9PXYc{= "ڒ㙛l)M6<5Mu&ԟ=Ul0F>5|+m\Հ&WS?H[:!ܿX JB9AdEkKZ2 "2`x{2VKhԫmVK&L=lONr< 5sVେ`MVukiDN,}AAA ޶"0V,Z6!~ϋuk,T񩶽ln,! Wf3T́ІVR6ON۩.$b  ~SAɻʔCV>*qvۊVqIkͽ"1oR (H 0E2@Tuj<΂9!KAAĽ'9KE 4V搲Ly!2iy|UG4[xh̓4{-O)źMvEv@p:"veǃ:%  ^"Jtٖq @ UlS"iP'X2M6o٫G5CWuY\?.wHvEb+:jqO0$DO+D,AAAҩSvVR2gW\ZEuY}p5ZMՒf_^aD%bع=Z !VᕖG#{.Zi9cIAAqEdRWч٢Jǣ &OlS{4oOCE4V]z8晁<@F[sȾ{CGW5 E=LZ6ǃ5,롄p-s f>ouQ};4m5x&Uй뭳 aJ9l,SF.<Ř==͘t=)]~=Fc/}Vߝ2fpOcT^ vO> ?y[W9vUS ~7a8qܓJFh{ƘUir q탅 S|ʸރƾEBYt8cד2RV6GT~\>Q}z3K9,!>fy'̞:f`wcT/~aFRܛ8WfT\Ύ,$CGWYR2|g|h[.q:n򏮘5^T7Yύ{h܋sV˟C*iRmXAy–=bcY^ƨ) Y*35R&ru弾KDvA: X׃tEbMUXeEu :^.Nn=',9d lR>K==Y:7ADE(d8K(zxxڦ4A7̊yie[3(Ls>j}.m9{n9;iޜ4I=fk+RꏯZs֨]BkgG JߊpukS?a_o^Zz enw̴ۮVkDCk;y3^:?z^3?ٻ:@QۡS0M>!X3@ٽ7igĿY ]|9??Vh%nnyE ] RLΚ}اL߲h;WT[<@qo&.YwѻR[KWqM8v문@Y_#yuGѡ:B1#q߉츈ԟd؆^ ni1RNi{~9%{ޡS&:z$B8]y}?5;t}5A!۵9"th@@vZWcSnH:;n0faǏemb#}4sɲk >6z~|N#o)<#9 U `Src#!HoBgriFL#jtW`IX\AEgAbu~Ֆ'XS̄1]BJ۹sytž.*Dž׉M vHnX:丘HC*fR) yF \H}yu4K壸~PXDI !>fRb*ԙDh]ޞ qcbdm7>,zF)šԄDQ@H*5qˮXꈚx9;Zz*+< Q1x-n=1(Dc35hpJ9# put%tr>1@fFy!=iK >̰ +4H7OX?T| ̿UtĔ{EQL[M|tqNy&J 2f%GEڕbU2}s-ɏ&5ԓxֶQ bye)bVt|_čN2^>fj$*%b@whF4W*M̹p>U}/H.A'5+4hIo,vV2CkƳ;^ZˣoN]{@Ⱥm9.̻nZ]~ݰ{҆8/^E$SQ< p{q\W#PrâFD јY;JMk3 ]2g"Kܩtg? x4XcѬ.&i9cPɥS\])BݩibN IDATW f?O۰ μ8n?x4s{}/@gz5qNyҴ!sjE,ET)8/SWSR#ܶIW{UkCW!2y0R6=hWN~/,YZS/2@,XMyXX cm\J~Tb3L(#34gٽ/_mZ}RX4̭y/{C8tصkD_6a!j}n=za=}=/!{~ώzOb޻Yѭ9Gتh6wh>H*7q.X1MY;;^]ߔP,]k*9B7+aWd*$hJݬ[YN6z+ugcz@+[ΙچO ve%BS37sVtS1TU!0tpPUzFA۱>NLVZp!k= dLQbUU7ze.{ip:|5|t-) KDU&|ްrOsΞʄjjoṋjؘz R S dJTpPڀrŌuv,oj1tZF]6:tZw}>_n%Fp¹lMrF"jj뻠 le 8m_KپûBo ~4fbɤ6u,q:܊J}jKM2K6@*Ӗ y54'hϟ|oz֫/ϖS+<޲ž_ b )[f\ڼvt:HQѶ~][_T3Dl&,=ty}+K_@Da K( k291M,ɿ1)!coQw<~Cq~8nn6qWuNV|C[W,O3,~[4~~ӏոwwm<!}[3=²_jEMK.˰+?_ @߸cmOm [+ylHf}z{#\ڰud́xvek ~/iސʶ}9#qr&ε]٩PCU| yPK?VV䴬آpqۊew^gꗟ6aVdU|sVfjm[j: yZw[6rBZ/qg@"n7N@ 9ؑ-k(Vc"3D*iƶ+X?O6(G #= z՟p2GC21Bu`hQa j+D/CMAm1LdZ3/]jP7@(t?7`|@}|ɷOwt9YW-/7"ԃEƘߕ)~V4 j9nZZ7wЇݏ5"r3'SDl1"0#Q8y% Gd\v:Bs^]fx{{W-%pL @t~,!@!;k$z9^)/C^NJH>PnUg~{f,ck>3QӰ5;z*ZѫY)ћǩcM?ZD%G& pMjiA Wjۍ^OW~[衭0l쓑? ֡[ӷ<5XZu`(-s:p&6v1"q/ZE"cĊS#V~Y*%df$7)A ]Ǻy,;f}I1!`9UE*uuyr"/ᆕ7C" KAA5A޲a%9r_X3fe8IVQ5`Qp\{Sm+- qٷMN.X#V9fV&vaQNL%  jZT*Rΰh$eGW$DAr|~s@݈VHʦJ$Y)pYE8Wڪ-vՑ}Uɑ;ɇX )XD,AAAT  ,G 3팢eRHI-e,Uk2L6.Jc qooXi;GB3&b)2UEŝ*qVV*vRs`mFX  h %E9F@vK*99ejb%XX%.+?DȳM(Hhߑ,5u-nsp(R5X #V:msTT%U0Vf10 Q!A[KFmibƉ2ޓh9',)m,JT'kL3zqgϹwիƳ'*e^WvcJ'&,EM)Qɒ]yz>S*M객  N QY,iA U6 R!HA+AWerz=m4>5i >-1bĈÇFwkw/~ir8ٶq'?V;"2)#38*]ձ""E$%V.ddfm$~۴)Zh2>}CX4oHgP#QPX:*Xi91Vu* %KA}ݧl}@SP&Q1=UKj˶}e|a:-C5t p rfr%$p4aȐ_Z&)R.$r@Xd 6a:;1',:A?B1+XTj+;N=xpju#J;d JxEk62A ִ}XD2>RdJ-$Y.2PJ *SBJEɦD*68WBI)7\/l=g}; 5@B9~Xڋ8ZUk E)X%XͅU`ѡAI>M HA<HهznnC^H S|ʸރƾEBYI4}7n3ip1ߨwk?{=bW6qx?1SϽsbڎ;\1˯ L|WA6H9ɫߝ2fpOcT^E!pƆq=. pAQѳ[J7Ew͝L.<Ř==͘t~ᴘyq+'ּ;aPwS__W +yDu xW{$d96-3˜!u(qWz'Ƹ5L;//l\9{8hVb˻g˱vŖ˓ߌ0FMWhn:mwAgw1\le-OkƉ;Ck) 萃N}h*疪J.CG$E_&]o[9 @:"Z>w]%.s~|.r63fU,U`Qž,rf%xcOZ$X >⍄cf,ޕWۨa}SL0 B=m?f{7aϏ?xŴMoN_^Y3e},KADֵ 4,<5)ѱOuewrGq5;zxߚّ=c+r҅)̭`j퟈#rh;c'/;c.]f~8wuڣf͝=G)(ep)_?7~G퟾8gm;zG"f*OWmi%KQ_ۓ_'o710!ͧcqTx8 Ѽ 02ĶJه>(:TZ#f$;Rڇt~)~H xul#7?_>&ԟd؆^ ni1R3 ҕ)Z_XŮ|czj>r/ZhЮCj 0%]L;v(cT5n$|FU\o :+=Q/HC>)~H\XJLpŮb[E'K8Y} 22 ׹Gu~Ֆ'XS̄1]B;}yݗ>dԇS0} oof+2[>uޡ)lJO9,tBr4.@z񱍠Tk#rFVĔ)ַoG9w2=t3-nq\Lܙɚz4XɄ֭[nwiGәXyZΘ52VnYۍ]IT/ҖtZYl:+zWRp/AT45tiUC}2 8,tT)h,* D 8m`ru<_+qYHW/Ҹ3SqĘ|rG+(~bGTe:圩m `j0}w5ὺT_)!97]Y6;Tۋ|B xq桽ܸk*q} _yK +gyg憵X\ryUbݼe/ - =+u) at/wtWArMQL vX]ǂɊfBVBn[ck99fQATAqΕDrUͪ8/L2muWrU"+X"sG5<ۓV-A" oP/8p6̈́J8Sj7f;r=h'͐wޭ8]PxuҤE=5M>}u>k!%=ZO~s IDATeIUem>h|:@D; רj0H=Z80Oyq*=R.jT-= >B cـZ}p7g3rj: {XƄڕo#w&{CRD' *Z࣓'>`l䛛c]{ٺc~oĽwn䗛:#}jKM2K6@*:.B?ٿ{-k/+ fz-/GNh=6z(wKW/d9vp9Aڐǧ%Oֱg r~O}zDf߶TW϶g5m6-uoQ -g-ʞK}:a3߁I70.Ze8oZযt'nA ?VMy-aY/_GonB j9%;oWjwdlejyq뚕͛38ÆrJkۉ_VۛQnNv-^07ho.V$"rD $6Qvr(!DD $f!Wb90 hWd;`S,8T9#ҨV%(ΪAͲWy6 )XBtc2wf^ՠn꙲t?7`|@y:rN^NGΰxW|tObm:!L1O=d0cck7P,e^3>w03?Z ϯfCem-HsjXXd:h$k[NȪUXսɩOۻoECw4uAr!n:cn  ܽ-HltDU"vݖ$D|#se,c I*!*hxRXQ"b(q|+Wܪ !$,_: *-qXQ)F1F{i\LX!yԈJ@9A |4~P?6M3`_VmޡԈ@-pS6HÃq:󿣦$drU5 &1DA< [0&jخ,,-(zM$^j)XIU+<1wJNJKXyjKYY"Na4X ~nՒM?b޸[O?VY)- 9kl}itDjU1"ԦLj6e 5so @٩+0ȷG&!ZQۇ$\_f5mT-7dml㼵Qۃ.DX;C9AeLddLVJVMªNXW;${+[.fJ20OfoKY҂}9Nk=)9\evQbѩ=A (\k\('   dHVj6,2*rDU XE3K$1I#="/!"q]$Dc ܞjU ۟D`jXCL \\ޏ}r[4 ҡVA"A"   d.dHf""r] 9Xs-eȁs&Jm"D!DŽ#rsdCAr99p #pdZe܁G3p{'T-p%#vbHAAQxK,ʹÌbcJb`` S,rLkBDPc,\9pd=אsn#EkϪE%?r(-S\=g=EU2%ߋpAAD"5 ^XI$~.l"YtDfLdLgV8E@jQQ0hM v, U~nI'HAAăJ_d궴7QL#J1%b2+JمsB+/:L -q̑ {*uwòEGƫfAej&,: >C*7KAAD"bf@Scujejpv!!mA#kR s0""B:NQ< JIv4w RIEX  xo#CUmvTȘ"R& *D*K(pYpBPRƪµKYgcVFU" c|& KAA*ˮJE*JVִ.Y5TS| *eHJ [U>;D2}R_Q-AUKLTʉ%}ngnh4p+2ۚSunkm4{+ŴU1FM"OE^Q_r|v(Q2fY#\À+ +e82D8 r]p8(3 $9d暹 qJCM68B?qrYr%7Cd=r9EҏG,sʇ%HANyoO$&/ >1 A =m4>5vߗu^ c>bĈ#F ݭ߽qϙ5Zى3@\i[]L e] #rEd(粀,`P +v\p09I,+o1{ذ%䘹 PhC)" ja'r8۔fʀAŠP{xc@ В%܇<Aiv!N^1jXMҷcy=lS+* uvwUڅ)"M͂ҁEs?e9 @*XnA+:x~OF.~Vn8hI{{ƘUi͌ƾo,,o%]1qzG~rқv]<8;8f 0u˗޿h=h_$*G)\Y>Fͯʾg7̙4o;K=.7#Q:l8mwA) vO> ?y[W ۋ۸6feb[7'orbͻu7<5E{o(;gzRF׆W@KWa\ϱKzoPTH>|st3GR<;eew5%!+3!nOX1+ԥ1_qz'Ƹ5bNU KSTu6VkXU}>\UuUU J@`6Vʪ/EpZ ʩqElڕYP(U}d.k}I%&m/p1sw^_*H[3m?3GКwN^v!:ӋpZqcLZ3cgn07<~␦¹f%Ǿ&E2:6.5ӷ,9~,uMOۧ~zirn5v 5Y+\N:s ~ ty{ AyWf9lkw.!׿5#v'fc&w}LXaBLLN߿n5^[Z;^Wqqh?z}P@7>hbSY.y7W˫gN#wL߷7~f6-エDk]۠){jwj5wx#w6*nX{Ԅӧ,LNmYSڨP^_x:xŌS!ǀ7Έ,ƵJ//գ\ٶ:K[v܄vax0duRv=XD5@+{e#=\٤,,XhB[Ϣpud;C']Pr)J(E56 ӤC{ $ooFHܟl9]y}?5;t}5A!w,~5/.^o~݇.EJi?]~>h'˦?y_;Motk/Đ|cO;tUG^D?ԱCo7$[7NłBuYdmtVF=3#l% 6bqCMu䧳'>BsF~qXضyuGѡ:B1#q߉츈|)fmksE6D­Z\Z(!b ?o$.X|[ b#}4XZhЮCj ī.xy{|&;s7~GnGvƹSptp蓎%,ngRƾT!GKس,Gp1c˾̋vk2)m}v߯ڒZZkꖝ4KHrNUQ0lp#T,P{Us4UI`o f_DW{*Y;:$uY rb[~<{yk\R!IMQwȅQ1 8荧W?_kd`j neS jHGn&%BODz6f 2E7@}fzc1z][L#G&x399£Zj\6Ml>b?|ˠ7mo+&7S<8(X,"$}=b+$f<@ ua ],nLy-jw nO*(.{Gd9Tm;TY 1 .j52ֆ͖R ep po8nc:~ݺu֭[q535xf [`35\U*pPs(kVPE@ȕ]aPRN9ZŜVX(RX} JcE*s=U!|]1"cjQe@d{y#%JR#fYۦS]e-ur>i4 <|j億s]\|Y^3o_xtڣg[x7?_ =Ѯ}`8|r(%{\3IW!tt]9{/zqsf;gB`*Jo}ݧΜ;w)Z"T.I\}*rhw{e%Yj% lQ]0c3i tPy}̧Aa ䷖i%wΝ2ֆ^ZGo9gΙ͙s-~uƑBx>ї1sSۿ^"w|=݇ )qۻ?JqwROՑKİ]^(Ӫ%;xq r , APt?,#i"}иc`0ձVk2qǷ>nKmX(I~0L+y/*ȅכb6bv5tytJz-Y"  yo_8s:#}1kua "WЧ~((Dh,~?VkxIQUאoQdİq/~ݿnͼj,>*4TrgcšQ6 M\%(mfi˩k2(@gFm|9t 51sRZ|Ѵ>л8|.}/'+eG uwh4;T=߲.fnQ]\YUXڒz\ ))SN 2..>1A7QGlGpb9tĩ@ccæ`}h'p"c}zmXWEtbAE#! !q p+ ~7RJ _m]]qOچgK/K"z(N/Jmjp W:3>.@I**уԗ6}ȋ\8D8۶ck\ 'r5 )谴}`KؒXU&1>L ֎M}CCEP=,(/c}Z0Crv!+P@8Č~B?v!Iz#_zo$U&/<۹r%)NUSz_ɋώ 9[oǓ|@O뚅r+K/M-$z-ԓLye;K7(7Ӯ :Ѱ768 "9 w Y}ovɒCXYGηAx~C8LZ>.ޟHd7olj8:uo1D(8XsoBrhs閦$*k}+$_=v캔GLSpeDq˖Deۼx͉{iΑCيe\HܗNx\;۶ҹ߄RAr-6kT5),Xw>IggթkVVDn\tHƂ^cbV)Qk˗IPIUX;_k#k5DLH`YKDTIGO[ܱQ\61=Jt<^hq1[}M..E{bBxGۿz>>k]pcf7 F:ƬܲIa[b#!z q:r)W7JjiӴ*;{pBXn8<M5owErٱ=7#@8\ūl'SrNwS?\z .]p2w/{^zKcӡYʥ[=i׿=n?݃ .[2E b>ĠG|=PBLǠ^}鵵x̔wֳڻ27¯XӨ&z5;Mr1:Ɇ(ă,KX 61%@?_1w@GKCXq paoy̓ wuFttR@oχjϢ@(`zN$o#WuUUw`Va9|9CX3׉%ok 7&GR;ÓUp9A0bC @Od">(!k~y\uIa1{`OD?_g8I}؂NA,B"B1sbUٕRULů1u( DEXCۮպ}a+Š o bB"BO,ʸ*V^*Qe{K'xq.mۨԺVmF=evMS̩=Âo^\  0EaB!*n7jnUoWkիk۴25= w{O }Y|΃OԤЕ4hknToh*5u::؁ dpb8c+ !A,B!L4LM):4$@q$CtmJBC)5ZKQ@P@YE8Kp&A,BXB!A,.ЄB!B豁A,B!B! bB!B! bB!BaBJT"C{ӕ]|'Q2m-%V1bdAJ⑬dݭ%0>'$?U<_@! bBI.aD4]J?Ig'`SQw>Y'B=NpaBQ%}!'!B!!09?~iD𒣮(m f.H'?EW K_3מdD2*㱷e%{>\4yD2o{1g/͝2R?~Ƣ77/UPyD2y5o'J$yY$}B(=3I$cyjYh+~/vfuηf$'*e綔\hrO*, =,;i$~ܬ뎗:rQLIʌOn-|>_2gHD8%ͧ+\mXL̙dfoĿt^gTSgD2_W@ZsۇDZ+Ȩ) I+7:#2xt gr^W6 mhV 7.+zż)#%#_:F\j.$~UFK$#&l9wK#Ӄw w5urz0On߮/@ !Z2$m@ת={uo @]oU{sY-Z8'zۋ+`ުIDٞ\ E2 e|}ges_LxY*ԥ?wc'/znL֌x[ r62!"'R7R6碩>{\& ; |g='-Y<_zy{o*#2?703s_jMb%Pmy߽pW#Oڣ+>=bv?G.X6/^殿?8y) O}J{WNOh..@zXУH I3-x'u˦̱J.IOWN \4kjM v>7,- Y_~̞Y>eVR:+@sv?q"g?K{#/SM @%M۽%>=4-V?6\!@õr8sw8`kmXHʦ!#'rRZ)V;z|Ǝ B6P7Wr:&$d3 UۚgUI^7囀J5^=vFP!-[<|t 3vr7zZ;o`7ZGCޚ:;=}m^z`O,BQ$˩㩗% 5rBFo߸WֲV`ؕ 9=@PdvR=twTrλ_CM PR-W _kݓGxF bE?]VQ װVf)x>#f6euok_,RۇgU]-IdS[[GU6!Gzī>{c`F s6׆l Q WRo3BE6UUAaeFBdv4_` @v~\ ƒzAvr<#{!9ICp $IXS*&ӣڗa}"!=d!>T PɈa^ݚyN'|O\X/jۖPZuEQC؈^pJvE+uGl? fygRQCzp4:k3ǜl\$m4g9332/^FZ'βfǨe=-#|88Ƶ;̗`ٺ3Yi͹gZ`j&`!oM־im"!`ir?o_X/獇*]'a'۟H{/O>d.QAN,5{룗:q̧D\צl߷J>bѱ.I^i~^-E<~ \)o@)Yqn%@@"%)#"btٛ2a$l@Fܻo@{m=~#Q7EzPNfବ-n4BM=lJQ~jw۔2shXHjI0Ǧ!&Fr޿pvq#DkOt{u%!Zu&?عg2Ye; Xr p#JQ$w.E0RY5 k}"c"ETs[bmQ|msU [L-@Sen=pGƇif$ 063,Gdai8:uo1D(8Xso >}kƯk.`,t4`ROa))#.kt7!T)'&y[{a*YݍQ4:\Y֜ɖk2\`u,-e~y/KwlY;nX.;-U{[ KY^me+ Xy|!XX#dz+rڟY-I^1b8pN>៟lL!~f;Mp |scwغdטL {] Jv9Tnn Xi׿=n?݃C9_=Sow13O {A}A<[D;sIǘ[6)s35>V_|u}ol<vrJu,[)tܽ_{{B~0g[ٟؼ MOaͼ`͵a1)ffH"XS0J~32-5gM瞥˰R`mvu|k/޸ywwIןNy[ӾJjiӴ*W!<)Z=B#ɰlEIӗM1iB艸5nkkiB>Ph.B!$SV=0E=.0E!zbOS9mABqB!Xd'"WcbB!У "B!+ !B!!B!!B!X8;1B!+j ---*JYjmh4 ("IW^:jk6Bwww W> !BGJ)++jFu EQ={8p_5ڑdN2]'aaa!9sƦHdX#"" bB!z={VRٺrT*U(vvvjѶc!CqKJJ !BGݻwO8akJǝQcwEt:k͒ǎ7n7^)18Bn->j.HTi!1ͯHfo)Rc=5O&H&~EO.Fju( AQ$lP(4{[[]l6VzG!M BQPPPZZ\*VWWѣQTtӿ}$ryJCPUUUuuuJb 8ϯA&T*: "r,RUUUSS#JrZ&Iٹyxx΢;Zuuueeemm-='3ۻuTWW766S IDATE"H$2K._vwss+//w^]]L&' wuu5[UUUQQQQQ!t:@ puu7y$Izyy ((h׮]MXNW]]]SSܬR4 ۻbCpׯ_3!88(媪dVdztXB!ġfb} E>Deeeknnfn`b\RQQAG}8g~:u֭[Qh-M7P՗/_.**JX.[nݾ}Ӓ:ӧ3kjjtsc$srrژ߻w`j:77֭[MMMFA͛7CBB br,IF 'ˍ6JF[2=zDFFbC/WVV8q¨Qq~ %ʟH$W_ӏk=vD"~}GW"d(E o-1N"̋P][Q7?\"$N~uG_smO%ά֌$:3iwmUʂm) \Ug$~eF|z|˧[&=XFFOLIH^D9.>}lX0=1>oKԝ L^bteiFHZ8#e[fyFVj]׏1g/͝2R?~Ƣ77/Ud3|ʜI#%I┤7PYL:d^1oHȩWN|Ӡ}HӗJ$Kr|hd3lʌl:I4֜V7Otcß('OHƔ) ]'JeqqqjjjAAiO,7o:t4/]cuԩRdffܦYfRe(b888aZ@ɀY5zr3 E)rCMicՒuK'y[^Z&qㆆ4>V8Z 4.yjp4apcGO5DM% nU^pI`?au6Oy\/Iؖ@è9c?q9)%5M|[o{ˮHe~ުǎ:|بbRi6I!w^@@s!W^|(P, (pft<[חk233E#j5z:Fh4¡/-P*Ν;]lQh4---Fcb`ĈҦSNUVVmZVRՋ|GGG_%Rdgg߸q@ ‡R ,. NzcރlKɼ.}ߝ]Gz ݕ %ǑДXuʚ+84녯_}F0!HKGoR?>Zw5Z?qj ˒7L #4Oâ#/8Gr&@]uG3q]-@%7w~> @M쫙*5#a~tNto>aeEE[6>׋O̟?QurE}ϿX1 W;kUad16IGSvux_- DϗrB;!RRnUGy Jt,^ 5P;V8䳟%=u÷p2N.OjM KPekWgo:::QѨj>߫W/8}4sU bcc`ZkΜ9Ì~3gz5RɌs$IHH!=q۷ 444\z5::Ϫ*ЎBR,///((7.CuMfJdddd\\=If@p…pCiZi,\.ۿ;3 BK@@jjjN8|[R]vioKKKJJ4$""9lٝ<~xwwwW.=z ^rE"̙3׮]c |^#0, ʀj+,!5;ӖwB Fښ"t_C+NWkM^#}ea)Bjt㟟-n2FV I#n], B"C$*ZzMJNHLտ۾߿͛&%%I$ <_~̍CCC rI&۷oDDsz#:f^}ݻ7َ%$$0S8wo===LNς+ccc_UUUo2C"lzz^=z( >|x\\=1r޽*1e'''$===ccc9[FS[[ˌMSP[dq= k455a5n8z,$  SNgse: ݝmkkÇ_.J 2z{~|.@tt(\kXr+<A]_ вyFշiMnn$Wȑ<}V~~Og6&n?o2s r"-2FzB >{ oNZ[[GʄAlnl5u}q= u8TB5 )}ԪNi볷9;,a0w5vcvr 5Hٓ9]Y!ujtjm'h…tY>64xv^XFKrӷIۛMbĘݷTRr~~~F}' ʕ+Fz{{$R rNb^7;҃(^KV _|P%B%#{auk}TscMʦm޽0Q:M=)6iNi`^,IZQ:ff(AΪnͅD'[XAȳ_x™/Ox`[#YbOпG<@\}R:@ݶ$aWtgύq. F]NWkmjj2F)ٳ}kjjƲJ{1$YSSf[VUU@KK =3Ԥ1AWEEX,nkk#b7NR_X,S(SգG φZM`4J9ha+27_޶о.NF߿ĉO=]F33Lb&mTYY@HHHyy˗- 鉏u"(R2.JY|/KΟ)FJv tkĽ?ir-q5.;P5?G4gS5 fdSw)h7\*iNp\Ja~,%+έ𓼦\2lZaӖPSkۦCsur p#JQ$w)^"e}ͪ+l҅ Ղ]Xx )k;% `C錖oe`9*̍e2ӧ-Dˆ*JT2Shii9p@ C@no?MSp8f%(LdZp>dvb"Rz.3tSF=|>?**mkk+,,d iii|>_Pkmilllluuuii/<|yѯ£kڶ&G[>.ޟHd7oli@cC!˻,. )0(>!J7Q"Vw:&G,oo,ɛ84Uu|,s/y_戇9:imL۶VseY*XDKC~r1#g~;WVl8Ǹffܱ1KGS ^ &Iuh1XfG<;,I7,DXzO*> e׼oerј0ǎ]WHXn?Iqg"X:C&PhhG(y!M+S7v]r\c$IlWyM2/l#Z[ AUUU}1l1B:g'F5\__ W(' ?(/Ym _-"jG2%cVn Χ8MX)v!8pr~d?84݉|SG$x'n6B;[aF/_mG1/ L =uHoa޳{.jBFL?XQ]kϴo;ظЮ [g_[Plb%ѱwD2JAY2\.scP(H7~\.bHυk9eX;,˨ LH:f6x̯T*F1Υ(h-0ƾ.nde67m_k?SeTE@w |&Bx,P(dǎ":7_~:u*^aB= !txeݻ,`/gk?bsUlGI۶/ `? Nj}ho^V:5WLedd:u0hb9266h]8pիWO?h9Jȑ#m8رcgommƍ 2dȑj̙3Upd2C1ܖ.] [ne^8pرc"؏?I޽'M$:99͜9͛)))\fϞm:֭[?lذ#Fe>cwVVֱcǘ)̙30י3gN{Qs8mǸ ##-4hP(dʣ;兗j !D(.yǪo;y]ǪF3C=AchS9uǣB!jچ𜜜 Cv999O==KFijjJKKcE(  4i4˗/3w7oooѻw믱\. JU\\|Ai=PKOLc|hhh0L=eD!!! Ł&LF7_[[[ZZZSS3Cҙ?~MĖ"f⭭5kCXB:F/_7[2Ms 9CqzZtO!1192++իGV( hI{{{ØU_НP(RSSϟ?J\.4ʔtw߾}R{U;;jwvv)//7{Z… ׮] I({Լ5;Y\4MMMMr'Ol[n><==T*rA2f͸;88H$z_÷;y1c 0E!da\zOToN'bQg.N/${xxL<_3|(ˋ; ƌ***J.1Wmijj23ptt6l!C455]thKz-SH>}G2&nkkcv'IrȐ!d.H;mUy̩3Fa ?(=ZV3LOSNg:{lNN`l)S K$2|EOO~YXaB!"hQ>oӫ,KVMeϞ?ҥK%ѣŒsŧOflVxxD"1ʈ7F҄BalllEE踢222,-;dȐz EQFf$._'5*ҏkŦ[q}brww6mZvvvff&ˍ{ѥRijj6ӦM `~#Jw'JɓՉCى+ىBi4WuVQQ!ѣGTT5;T*TZTTTTT ɴZ-"+((MgJ.(N IDAT755r lo@@37VJ7nollt|>+88gϞ&;;R:tfB!J KJJr9EQ|>? ӓ "''$ɸ8gggij/-;w~ 8p|[[$ F'L&+))w^EEEkkJp8BP,;88Rjǎ3++BCCMP%%%]:N,GEE1EF` !ГhiV^5Z + )л;$i8f'Ԍ`MzYniMmcְ4`6mA,! bB!_6şB!B=60E!B!A,B!B!A,B!B! bB/GW{pD ~[gK$/7v!B"У yv6.aD4]mwB!cc P9[`= B=V'!B!!tmEiX0cpD8-j+~/vfuηf$'*^|vpI+>}^HNӔs'ďbrKϕH^LoT,ܖRMU(=3I$cyjiQkfJWf|c/B!!hQ[\VyI)ӕk L5iE[TݸMy#澘<ίO辰tڿ_KtOJesDLHJzfGyڷ-dtc/B!1GћϿ~`E]ͮЁ_qYIav$P>L߼Hg峫1{g+fPjgJ='M r7Hpâ#/8Gr&@Sz`)kH@r҄+\l9??uuA,X@S|xr BazԐ>< @uL+~F (Hle[9-D@K;;{/F%ŋYt*ښ"[t_=NӕZM`]W9ڄq, ;6B!G/ 9Ͽ}Z^yx27ҵG .x`-ȭ^šAZn6ƭMm)G}jDZXWwlB! bB]C/}Dƽ0u5>֥_tZ-I'HmOt@%WD O*G1f|@! !QxuVBOv0^|Ⱥ]&(YޏkG/yi v tkĽǎچgKβlE%˲~_\̮cu耎9R4) b~ B(+o| *U<}pG#vcY{@'&|>|rأ_ò=d"1ȣ2"5ٸkgY{>%?3jdnc}zTk #XU36&4;~rHWv/̯}R}8m͉5~EqiW&oSofD.-_'Y\'A;}~ϽxuiavG=wp|1Nre*i$r`ɢ[ > v? gy_@GLx/}0]ϧ|%Kӵޙ! DI{3{ /Z6:WsDk޹H3rbHzW>CPRV(#j(/<"zqOD|դZ,Qmډ퀎9RdUsVL"4UW{u\7uXvBƎ +|g6T=5{FJi&Qhֺ^m@o#v~:a\Mƌޱ@Y4^: gb*l:wǏ2"O3ЙQi.v%\snl\y湕߷uAwM Yey~vO愬=f*!uy;.!Ą!R [92(|;d}efQH1[uHnG+1ul~ɔȲg5ʉ꛴e+:r >L=lf?A.$ҶM#nfo˧޸AIޣJrԂ kѭx9:SP՚͜?c⚯1ʓ}z[7UvÖ3F^"uB> ]^&By$/s. e5'3l`ؤFx?boj]&N,T]| &ر=Z.u+! <ZfUu]F/ХVnl^\NLeGLob5u2y5dݎN5\ƛ3nEy޽{wo݈N&"{3YEe^H$/6-Myh]3ʙ]N]NcN՛#R.*2? )ͣ9,bm}g~xjlʫu]ur5аغ( sy2ҚGǢ=HjK20}wHqbVa{/XRD_  CĿ٫_0WdsOh͋ߩd K"- D2Ri R#f$2X.-ljN"ƬO^e<I˩'Q\4KW%&2QM[:ؙM{c |;֕8Y:_|s1-G^cW-xqzȆm?mY>=K~⹳.ժy>R ˫yK[k>yWQN4ЏƩ&]jP9\J_uJk:0w5.yu2f\ue5rUvM9jVE<ȲVcQLMaS\ݛ)T]mcrԲCV$zBd]ƣGNlօ<͈뤁Tx^H9&Yg|$b::$">SgeP?']IPpr *> m-m3 r+?MM|[$ݛPw/H9wq'(_hk>[:]Qz􍈈ڸ+*\ZwȢP{fRE? ˆ2e?Zk=#Bc^ I+ION+nO(;tr_Q(P2;sMαCFI:Dֵοf=1&A3gyld_9OޭS&^ȮK ٚ޼3q6oM& 䑮yWA[4!@ÝXxxLt~ё9A={xƜG0pFO;i6ƇDjZ;&2 81!hjyk- WR)у{S[-VcߧYdLxiZ#6?>O'i…oJq; ujmq(ls65ʑ} ӈ:t$ WjiЎ9C:){"E:k@`= AIԭv(,wI:{ȈȼqG'Kn(X*Jb:cX>5M 0ae>uFu~s+$.39,c1L}h$i!q=^?qf,`w~%jIC7k)N@XxHz~ ]R/ݺdא/2=+}ܚMs2 ۽ceUi+8|kƆ wشSVN0W: lcO&/l!=ھpReVegq:&{N]Ո6Oe70kjXKVMiuxmpE呮yWQ[pVLF7@ @+Rַ|y*O>᷇t4C*㳾x>{:]A>#lro҃6o&&&:wbe~֕O]U&s?с-IL% gbU~f7M5_k[+wxbmw{\CUƥeG-L .USW}gˆC~:khܸKq#:sjlkv"qXw> > 2"E,@ "PrhˎD]GV>4e'Hx9?eL;UE!ElQ*=)'>#lˎPYEw\H ~?Rλ*[C<2e'eoPCSc#g$3v (:># -4-YxC{֓#qפ@Ve9;rͲbLّ:TD"g,BՔ a#*PF2 <#dbϚ_-RvRDVOȥ&_[JDBu;U GDL "mS??ۨ n~S=ڽhȾ>waWLu"ώ;j!,۽ߨW֑,;1,]%<}pG#vcY{@'&kx|rqCz w\Ly@+ʸYvGww,;A=]_OЍ=d'+4-Ivy낉v<}+Z|.8w/Еe{ TB>yv/=X* U`\pf}?H1oHW?βl%˲~_\֣Q?)ʍP{Fx=4e^ke')Ʊ]?>w~a=X[9kϧgFb,-`CU NSֶ:=r)#=TBZLʑ[gz'=~>,sO֝R++&uvϐ1D uEgcۑ6gQ=f?^q%>h`PxGR]CzKWS) Y'J;p^}ײyMh'̛`EA!cGlYu:s7LhPN=fNsυZ;zwMN5`ރ㧞RLˠ)a_N[sq tuQ\ըɛU˩"p3 ewl͌)ksDGh һ~ƕ mS2[B?YŪ#}k ofD.=>:H+V|7/4uֺ^m@o#v~:a\Mƌޱ@{I˜xYkkX?ؽ p֞:Uͤ<}=5{FJi&*lU!,Vq?~ώȾ?8oզrl@eغy6dJdгM qDF IDATDnNJn63 [J|6o;55&"y찕ׯ%Z+e c3DA`Ɂmׂk#t_6G{ߧj`Z[#Z0Dcqd7̿ KND2'd 7S )h]M\0FJ0/ i`w && jT؂oΑmSs7=ce~ke(⮒\6`%]WkH+ ){Zz]7^({Y?ݘ!ugV&5|wm% ج`+ }MW5q4A?BB>F-fMuXBIrdZputt/K :w!Ys/3$ E){iNĸlNBTl*r4g]K Z1vhRHRD+>ݸzIP* }y܄(FxdB.GDr:kqT/`*?????_eظgJz-E%sV uamK8"RĆNa`m;{xB9lkUPȹքv#dC#-$.:mGv%Xt )3;6'R+<1[#Cx"R'}, !ntZ̢"Py:\wL̮˘A4r”byoˉJR=L'gVkT4XW(_pv4&ρi;4!R+ns_v,ZwJS N`3ʓb֛{HOl?&ȕ.˫<,0Aٵ6g܉[gI Dq+;ݻ{FtB6ٿWl}g~xjlʫu]ur5(2^ ы~K&5[M$`+X=Bezc|[k~eT2kϘMg=LWU3$8j5u1uXƴaA (q,|IWa,[_z'QrrQN.""k`Ϭ2. ΋T?J%bz70H""2i&{}8ϖ~ t{Kr_jj<8%ӛ?u= b۩C"3넞Iܦ^0D|j']1E>.c1p\{ OY^]T`^&\i-cӈ.]De7m`g֦6 yV'aTUsĬ]ûX2޶lONSe>_^L|37HN6%ci'#WSsvIsHd|3^ XRժ|kL7c3F6߽B56[;dJO3Bz{k\ƽ2mng,4,0AAZVp!9[3PYE|ƵYfJ)dͻvʄ BÕ1kR(/;3k@OPXd\[+F {T^^"4Ы_+KFĠ {;](8;t65mnY\`ڽa~Ħn@+368eWsw'ütޫ;/^MG&{5Rm=ūW{޹&Ռ!#玍$gv{"sDF+bb'E"TYHeBضpqB|WBN`t9|]QY"6oC|t;DZ;# W~ad$鹢xljwbaRG짶]=jXSkCa\۷YֿW OgF!ЯEClT#s٘Q~^Nfy/ a۠ԧyCfuq{w5ψ<׵zu Vlgq$49ߘ haΈGȔNسMn̹~D g,ǷrfG_S8M\Sbd)tNFKfȽBھz#pԺNcl^`jWkЅp+x]i#Lھa|HTή&ϮcR8+# ;y$a##"Z\.us/X6Z2!;OOMv̙NqM(ZD$uwFhtWi CBzwib,2dtEcEkG2~Pw7yá>Rb9uW#:<9ǖ\|p 6=csOZ9ÔsVL\{1#2mCc [rPRlyBW {<k5myϤtcOlߴtRSWjDqʬb[{Ho]kW¥g٪ouyQ &lۯal{/M[8HF.͌:Im<4E8^3&&=h1$UOXG잋jJ[RManƈKy Nj`x@uXXx(bE,X"E,|F$塲B`pW-wC)\,ElQw('J^,?`ĞonP&~?ڟe{}~)>U >lA>-c Ų~'.q1Ee_5g]Xo+lˌ>},= gHq8ˎazew' FmxLt~+^)#޽cEoS>:lCخsŸݿx|@W5|S ]-C}E ںJ|N̟KtcdLNUЍƝ_;sX?d)Q;?'v Plć#Ň]{0IDryCzWiZF5)}D/rͲV[0A4θC2_4&: eggN촳Y-vH3SjM@Uh'_:;gw:'"̑jmKa97Vaao>q{oznO3zPwLEȭZgS8J:pYcOZ,빥f??Ӆ>0x]WRUbNP/DUJeEܑ]g< ?v.Ϋw3gnŷi )9]qyzuryȡ=X'R/S ?XG?Imߧ[;wN;֢_/?%O:N=}v5,{TWߦ"]K8{xS" 26M];fσu¾ Y3틠v=ZKv{~ྫS{Χ\?xۇ6z)o5sM_*j߁#x/1CDJ:l%I:[g2zrlAgۢfc<ƿM-`B]}r]@f2S[YH=?tŬi%[[,4BWhCp3*~ .qGMFu;lkɪV.L7UvÖhன!k,_Ng/񣿽L5tfhxTZ,0d'.MA4tɱw<]B~% C sdsC$zf$wcԝ- [u6b]Dڮvu& Y{(TB%"nfNLo$MЌM@-JY:f\MUEʴ=Zv`{EjسMs"ƥeVvRgiNZh]ViqþK[~i.S:, Vh0vÚQL \Mt5eFpr*j9Rq؍,ւ!R'#au21MMg|kߵIhqaXN ,ԺØ WRDUFQnF|a)굔o`mGln\xQ**"$&Di7#r9";\ב_]Dtg)bCO0Muն=<}!*x(cw k )]| ^zdj^%|!>o8H]үK>߸̮˘Az4$P~\ ^/pv4&ρ;4!R+P00TDG,kOMLm3oVCuUR ]jy"b3RQmh.'s{Z];w bPK]Crn0lШ`7;&:皨|)jƢKy~dhtOD俏ŒsQ+FdI[ , 9INчlI)b^;P5kd))R[347Oz/`%a.)SSJU!RgsC_j?H]U?J%Rr (R׆U$0d`$ .^{n`Dh]Ӈ޳, pv $Hn}-3gVCuUJąYV^cψZ"6eIv*1 +xk8dGvMC1vtjrMK-*Ʋ ūwr{%! /M.+qjinP]x(b*!H8%ӛѕ1W~0O'Uc֧s\ٲo<%~w/;q_NK_c+%CgN5:]'L65E\-e.ax^̫RϭCIA*\0oHCD|oA]&e C\PP /' Zg\ϬOq*^RUYǦ*rBČ<7\t叛AYNOs(^\&רYBĩե6F"!R6fbX4X\~{99C 8^/ h )#mE,.fl&Ȧtȥ߽B56[8$U5iu#ZKyAdZϬp#T%G1)F/}Z.cdȥQ^v~AhovEhWVZx""m-m3 +?MM|[kYrDbѽ eߺ} ':hHC î yXt˽TZ=qRDΖK&!>):)JRLg >ݾLo-Ip_n:ocf Ϲ *5`{4*7W Ƿy6]IbC~nkvO+36lQWN,TFٿO ݥȰљ0%"!3N:}ȸ=ڻgDZFa :שš_.,+G3DO# }PO?d/?cܨg;#l@ sM;Fj %zpt~jݵGȔNسMn̹~D g+B]U퀏Аw$7?wJzLy` Czuv5yv-zY7TC%*:]8fŗ.k^K]ehP0"FI?2ԍ֖j%rZԔyzZo:c|后vlbEѺsU66P&cؒ͵%BTIG~XeuxO CsG_{miV._[{mX7~|tN.҄ GyQߔiOu@xCߡreO^baV7v,#k ɝkJ5Zb>V- IDATN,TBL6QD޹/"dW1 6=csOZ9ô/x0cfY.GWhH]n`#US5͓lY Z,kמm̈LxF2N:+.X%Iz~ ]R/ݺdא/2=2uXTC ՙ1qf~ cv{Ynڊ r7rv1,tּp]LV' bfFy.E*Eo2w:&-$jϚ~9pNO? _;*h>^˃o-~d5YS:XIuļ~J͌<u`c:,זHn\;;ZPŶߺFمAK-8MN'9uOAFZZNXR,A.=y"[ Y>/Ti-_ O>᷇t4C _bA~zv|}p}X#A!ZYWN?uMdV8>Rɩ1Sm3:>snnKa7yQ Xo=A!XuWkyT#U>rx'vLJEQ_v`Tt~ +CB5b-< vt<ƹqFtwV#L,  wX@ "P@ (bPjB@%B91 (b*|lĨ|5bR&uͦ84F) 7:a999Uy;um,M]܄Ԍ'Ccu,T&&&>wbrdbdJFvIG 5^h+)ØJ]j׺/}p']V܆uiB;Ud)[ǘLώ뉛PyN,TmIIf}~Hjk1ɪe'R^.1FdV͊?K5Rv)IfA5)?'!c-EIC$#TÁd-!a(b*b(!C}61}bT2Y0w@{ mc_۽b~'=` ?/&yzVfǹ&"0k5QÂ/[qY5}l3SE0xDJ|T|[׬'˿sϛo[euX^C<)HnTP3P)X^}ڳWfLSfK&~U6y$17wygkΙۈ'Hbξ/fz"t7׷"Q]ÔlEb:f[8Eq[z,5o[gv̵a 귬 -|ʄ}w.a,bo*: *fz2t Xp'*/9|<)V$pDtKCft1,.J&evTB0 J #9Od(# F>r&QO6}ςMKч +X~"}Y;"zMZ2]yc .rBsw_.֢MJ갾9SJv߃[򏡵n@ PE\Om$hy/6C,K"a-ݝ&qnڧemI˛կߍVdVeypD<TrD+8Uf֣\"Hex"b8Ʀn ώ= ˽3V466XE29cae^6hR[ӽOadRR%rJ-!"s)39d˸Q=:c|duv_xs6~G*ϥ'=nlۓ1wSYp˜/, $4!!_%EJeziR+6Y~cl޹EojvmJ.MH-_^u`gH`l>cE'XVoO5!F$턤$PI')czdgdGqՐi=uuJ|F柯[co<G_,5+(PAcωbDNԱ@DDL\T{ ]:D0=KL"\Q NL\$NgRQTޯ0I47(Uxa2ܧ891I 3rWclHpd10I2W}س׭4<tn'8N?)j;nx ł7xx; 6 =rB|݁GmGvb@ "P@ (bPLx|of/[w)~ϧO7/I7:>RJ}zOJV'/x䃜}6zW퇟`Iz3gNFeϷOcT:iJigH]yCy yw88K "bƩsfN#"RZ2 8c(vz$;o=Eߟ'}-nZtpccrekSzodbSτFDt$D;iʂZǛ;M:L 9p(O2g /Fм<٪勔;y1bL0QWTȰȌqb߸a=T]o.qHSW`e[|uh)z`Ryu=zzB˷ԪƒW|wSҽ{N9%.8p:੯v<95op3xhJ9Tk{?YNҦ?E-L3᝞ܳ>h&o5E#b6l=٬@]Y;]DjeWޖm5\ʴ)zC3,((Z*mpJKcA mfˎgZy{&vKw&LiTǑ?3C)krdV:i =0&urHttyIΠ%,Eko9_Íξ9:_}F\tn'cW .Hh5q̽p5Eը[`=)ч6n]RbUxլ괞t:w*ǎ'V<%\3rU~Qu 3^/jIL"vOϘ5=zf<ۺa׆7o%*VQx궙oHvyȧvKbN챪Rw옰9+/{qyh&om3ߘdp˳ [kĘDLf9:UeQƿ7o}<8Z/3f5ҫ]N+.qImx0itp1,mpG "Z""\uuȳKD$bRR_S2n҂yo /oE@~ɒZކV78v0xө9԰1K.sLJG$Kb9tzJ ՞]Y;]/9n₻&&榚1mZMp`#DG̳O;4'v; :RU/)59R:knӥ:IJͱ%ݕ1\sOzwŨ p֒IG&dG ew3 6ɚ9Yq =@N0'>0;X%.|"TrLJ>#)RLD}UCH{pS!щL2+K?hEiIO\#Ņ 1T|U"5{o$Sr;t{չ.9ҶcZXZP\?>G pBR D_urt z9r^;/2^e'}DZ\}ME@))vUK59 Źf描&~JIR+T%>=!sĠIV7V`juf: U(u>/ \ m:r wzti6˝iC55mZG{|.:.(hyj7PvY{T4ryI'ZIMU{Y1K|bvOurI'vu{eJgA?eޅ# JN,t5JD1v|G;t}UEr"3%ǹ+N\ tZЧ IDAT_46!1ZKO'B XC)r!}Ɖ&8dL)1p Ukc+qHeQzS r5 U f5b%Gsi(y`_ 57f==_$J1&'rrd@ڛ[GL)wX6+Ԏx*8QY71}DCɢp9aƦ97$I!'h۝ZBEN\1Ew}:[ӥ(.5<֤q2Z[ᴡi gx;=j{ᅈPhd}aߣ?:4HmWZզ1D~8>3yKNzuu{ei %[]x1/ cӵX cD$܍Zl8]xBеx^1ilNj_x'BG5[IUz8k̦;EVD^fIh? -2nJv'Z0v(HDC&S=v[LѵWx)JODcA\OkS'UB"%)jbxxRÕ~;/RD*_0(}ߚͽ[X#Ŭ:QJDΏdzۛZ흙NDKbw)Nюɵӥ#t:­Dz[|bhgfev;/m{;ᅊpPū08qKAږe XMiZmUXC/S2⺽4Rr*ObwVW@'~g= ^-{j%+O &8F"۵yGNQ锶Hg07nU\}gG69rѷm䆢,,Y"e1=wA3'BCI۳_\~.l'?ع.ͦ/,0D?dR+,7ƈ3G]Ŕп6_XӮ=^n5ԉ]mOU¢5haJ/9{o3vLJ~Ksge֑ڪI=^n O~"ҌǦfqS28۽ԕ]o4E<NJ/s IDDʑ%KoH}aO\՞M`wv6G/æK j)VsͫyN/(QS5ũBGx c̴ɭ"Z*YsY񚃹oW?3:ĺΰtgj;JcgOեe>//FvJ g5zCWt6L22O "b&lPJLz  SKIQ&6=S -A2ˌ+\d~OF/?5ϖ񘌺z٪c%YP"L22W 1I2I gf0 -.$b Bd+7E=uuf#+٦嶭)#|Zs #S'ɒU/ !<~=AS R̚ ޶E L( 1I2J_!z0({J$)(|[HM:[Mz^+N%ŝAkUOp,B#syU2"C~l\m94(opta6,KVcKȹ]ecGDZ+Ԃj^c#5t#9h&yyv^ah%fimq~VSWJӝ2z1D~\SV/}bNFBW9[o8wlHZWugGw?1l >3ID.s'  _V9g˾x߭,QWj$n 8+~1:/C{(>8_,jWTG@5:l1#΅7,c'9>8٭)8{zo8EmT0fX ;"E,@ fl??~Q))QLc|/w:r %r>+U&N c21]W#=;5':c21I4+[oCg[9(cc23ZU|B˰w 1tk -`9?i#b&:'=LOH:w#{Jm,ZaF 6 j"R+|%x :*Ӫ~|-kքb.Q~osYf_S^`=33GA--*@a++|65<.iքDJ6|cH8̒##pqC#Ԙc$N2>zA9{J?sebu s %+44.vZG'Jwn3F9:N NJw*ǎ'V<%?3vUSC:ZY,e~ώ Y+G毩L7i7" K$ l3_}h%˂""] ^YtpYqT"1WŒU/ ИDL""UEy=7XxMK.Zu,jMYsF rVHԗU)i%D![eDF&om3ߘd}.7q\uuȳKW)P@{}>Igb*Cx|\%R#Ņ 1Tƒ#UɃOd1hNcƼa!Y2; M>gLr$<2!;R8u#@)l#-f؞9*% 4:ە.W$EueIIi=\C"싿P;H'2:)Iwfsv_2PkVmh理TVvv,::N *˂F2$F\uk t\p"RYx)i\p" aR9qWPYѠJ28Ҷ]NKOAn=BZٓt.pNz#ڼ#Wtp"XTz{6_Vxpqyڀ^z%V}pGQD>y7s ZyI-jJd:2{V s->2%ΆCU._ٗvkѮGm,J SF Rkve% _̞AE;r,t>ceRrHg+rʹwlJ/9{ݩ?7FM9(R^ý덃(ڞ'12%b;v>'̑ƎNUO45/BTB(:,C_[ӽkkg #EY]3-:qh/!b7DM#G)Zݿfh.iܔ>2f]3mqށjT{ ,3¯pE-b`.`Rjc0V}$Id`$G~GMz^+N%QfdKH]M )>/AQ*iŤ(s{ܕcѶ|ɨkj^7zydɪDY\.ep~"=Dm1(ysՙ}L¯p"D6]fev/W$EOqqÏVm3I֫jc/E?4<tǯzN%""[ ~9o[|5L#gQŸѿHpMKx}ʱ%ͣ~"'o^*!Dm;ι~u'RCZ J+Em~. 6Ebk*]t*Xx"Θ-&C/s?D_1;kA1݆ۉf]4:٢c:F o^\{I6F/W1(N pWHV63jz;"E,@ "P@ (bPgRTgK6~hXԐύ4Ia* O|esYoN=)L76Θx]A0)'IN6P~VsΐvS?&wh _L}}ljg^@]j:m%l/d+11C4,-9Kؒ9q&seǯKНU÷˿>~=%"RX{ҦHT(EWx.mѲ 6޽"|p&3)cy4I 87O_u)r =POSLH:LZcL:|1A3D',w=8;u$T{]JXS/r9)S2X}v{~~2q^qOW. |rYb^{2K[/?O檑dZL+=MD*N{Q>5U"y>}b1ƦS0IXN.@ gY9_ ADc~*0FL=tNzd?7ΙiV[֬ W6_%g;m[])G>1:}k0]ǭM6n ^i5R?vuw?6=[.zfgBﶮp뵞魳{!Rhk7Z0me aYCf5Nn͜x9AVm"#ťsDzr~ڴ*&[Y}7_s=͕cG8)6y.([#Hٮ"#s{$SWNClY,8Bڻh_S!"L*"b:YL"&']t'@Z,-:Kwlz{':\X@].aCnɊ6;9nu\q,fYOFkZ],6 E'#,S9Ĉr/+?,}$:w]~]^PLy$HDB T0]#' I~K{8V?ݶx^VsYuW-ܒ-Ö`3^+hՄFkd`"E>zדfV?Ԋ#&ÏOԀ,&/:/2D~@+ :GVKY߹{crhD*}ILN7*mٺ|my36m^Rvau l3_}h%UJDLj>WQ0c5".OtWL{4C;\~]߽{U;lX.3f5ҫx0ja"mw "ي7O6]9$bK=czex76뿮{` Ɍ,:Fڎ2=C:>ղhKk{ɿIJa:WsH^{r?¨ݠ̺+mꮟ;Uj5Ø&om3ߘdlCf1f&UGʢFo{x>[q _ 1X-r]u62^>oOMs@({tasS):OOw 09lGmLgDv>yH;]^d}$3o$Sr;t{չ.9z8V&K KByNH 9X-N[/GNxkŘO\]LT6ۉsd4?Ș$D+qHeQzSDLgJғIz"N1Y'D gtw9}>[#nz.M y) L%".#ZmE;P?eAc#u.B|0ڍ0drX*Tf5KzFJj+dc)0DĄSo;C 85TܪkRU8Svw[e";R! .'=v >fEhdN3 ",fQunH3¢L N}ͪ*T2f==_$J1&Vvw6*?s9yEr9TzXOHfikU?>UzWl;>UCDmW]j5rc;L7KLoRˮ[?w7&Mmno`{PFo0?GB[RID6̱zxqU:jYSBkz1"F{d6s_X'#~y+& _ u\D}U(@DjmY"W]1=xo3Cw4|tvp+b''Qkc4MFd{ ѠP^aX?96m7U6@IF"⵵2$n3!`ty*=^X&vp p#zsu?rNMfP|g=E5ٔ- MeD$2Igq{ IDATe X!J7[W\\s2gEJwܶx$'1R*2_-:Ȉ=/"kD!'̑ƎNH,"} E9XXD {czYWff~=KwqdN4h1v[u4Wx/YN6d$"|<m" SyFƃ2_/g2Ȼil.:X㉍Okv2 #;vC Pߎ*}C#OozhHB/,iYGuW/u4'C_[ӽkkg #E V{ӏw04VNsoq)2>y:Rs<5s@\_0=cWf'36+lllgR%w)'̣-Lǧ?,d\z#Gn_X 3MhʧWVixK2LTLM7լRXQ("۬A Bw?|y@cǖ-M?;pЦru*8kPd}@ila$Id`$GIQ&V[HL22W 1I2hIU/$"!| wf[e2 bW$_i]8Zf6Hf~+lxK*3OqGuدcLf gf2>^/[uL"r$xx-C˰ݾ(7AC͐N 惲,Yr/1#獊xȴ),`˹To9 HY4J$H{yS9nz>F& WSi=mUGFkW%^3BxΌa`Xl2Ha2c-<9` K WB =Ird>1'UCD$h=c߰efFj.HrAؽ\%bi>-cXL^UUi?51y@ '_"9 ]΍_o܁ݻ۞{rvUXg7bP@{p W{|YEs{wuU2ՏT{'g3| НFI6ƦS;{e:M| pI,@ ޮ<^~;"E,@ "P@ (bP(b43Ha9$4m]pP6XP`xHD]@g5"'4g3 XĢ VIH(b(bE,X"E,X@ "E,@ "P@ (bP(bPX(bE,X@X"E,X „H*vb@ "P@ (bP(bPX(bE,X"E,X@ "o_KR?) =\8i;D =Zɿ yjE۱{n9W\q5\_;tcGMg j?re%c7͞=fu,ȉHx?{۬ ٣οů~tU/wv\_,ڑY'8-4֜=TtaLG+|h Y/~j6vVSB Df#o} MFs2!)ΆO2Sk̤Յue찅_Lp#"Enp_ 9칝ߝnE ˉYv睯yH =cԞ^=A*5R_9=O?E) ٩L{/U=OÞ;gWťBd?\nUn݉-~rm/a/qzO%D'fc^?}\vv }'1g_ݝ|>7[m֖k]H{z3%ϿfA҅zbo_/_HW{nGnqT 0ꑕbUHq?Ɖ]NJoks|sNpBG:6שU%7/~ =|۴(s(nB=V)_,b,^jժ-3?U ry<|MmKwFYeDJs~zߚoL9=Ik{~G?\g&Wu_WԖ,f9߻ϫr"ޘòw+~MB֫hO'()k= S Ct1.il㚒s^z/u#9s_i ЮCG9a6OZl< [ޑ{ɜ?h8ʢNg/i3uPսj:tKգsw+'o ~'_^3q'^xժ_&\ti/r 7{jɚ[7}3w[fzժUV}ys_ZjժկLb'iϞo؅kПfDRxߩ-$dɨdhrlݐ-'.|;{N D)gK~I_?|FNt'"IwCkVs+_;C_e:kTTtttL\7c(Tdos>2/9MWwtW5\)]x%O~_vK5GN /}ɤcԒwMcMx5*\|KH3w򗮴{o2o_zGpbމW3t򛻤rr/Y/Hi~Kyesw;?>9ܛr{ɱӓLSz|se=)zc֬,Hjך^V]ESO_+K>ϝ~ YWrW? ~;|_Nm_i~ý%Ş5웺BU-"V5vv.>Lcm|}ߔm;=‰H/V3Gr%?9?FڷEeq=#+μOοHq=g{?xS*-=r>N,em҉I{ '_xzsDte:X6oZ^h7K!<*:::::* A :Z3_vwS+wٶ)%]}TYGZx;1Q;j3qqow~.¨'1>WUcW<~Nu`5+!??)|{[JIѴ]Ch<ȍuwn?{I1MGt]Sc`!M0]0WC}rn ǯ; r6/-mv[=xwo _o|R#"stXiܟn~so޼}-?$oק~ ? ~[ ~`Eij|Jo^K?-sպޞ>,+^jͧOWϜ5~W!@'^77?uk?=:Xoy5&?*3Ǚi45}P3ߗ88Woʈ #X2ox}Aapd m51#TIS7Y?>.omd;}6W!i'eE}{o ,?(xTm(*GzڡGV{Ng ΍k7x{gD33dOK6](e)eiAAWPċ\@EA l-tM,mfyBd{|?g>3yy~sΜpq3t k1+;n < uˊѻ[8͊ k}4ymƅs߾wsüOnU׋$sP칩4kDd‹IBU'HB{N gϔfg,=$Mg?EkQw܁wvMA c.h{wLf.Lhi骜 i =!6*jhKZ%'nC;%5oP|ب>jkI#A͒lQsٚISNthݥxƉ+XStg7hW>|Z)Aū%:Jgc &?IS <3ᒲyө^UʺEoeѢ?=eN..fܨ&ְ CGR=anBN\E\ط /?{!w'4K!>]uy(ÎJdTk:^lԏ%6{7sȤN?_վ%k{vmҦ5M-,1?<^q ="Dvu&VK H5WE0B4ontUS>6<9F=?B;Is2.jW mE @=*"n(+S&))'<ȧ!ɱ|anP2}W{k'%&&&&&%_}=:mh`3G8mR)mF_10K*eQ^x+CWsx}'C˹-/qzsCڴefBJ!d\ot(=v<`NJ'cWҳl1:ۯd晁UvE@MǩЬgϟ7 W:m@̫P^@\!Μ;1J> [O±,؝mQa-xXfB6KkQn AE;ngIP.+&J-nEPA /p]J#O V tf41/g#E⬟_^tJbX7TS9+].ZG=Wi>\Ebn#_Ϋ5i1,Ob-ӇmY\\ vǷM#/\}xć:_x!,%r_PzcnŖ`R?S'~L&Qv8tϽqmM]K;]:)Tg^en/n ??l/&N`tK7XET!hE3 MܿS rt Ch.R# # |[Gq RWmG\y%NkR"¾@}/Xis2NL4+rMe(@P\'b#uܕ{S L%e7A:¡K!N5mN&QI1/wAIGvjL5:QpCOUGAaYaBcI4BE7c+na gӸOk,E @pH Ѯ+u~2v7OXM"0W  ;G=YlX9!sOg,H%ٗY (O@jv; aozJ ' B~6RLYaӗT MmI#{8Nr ) Ft _}dɓ1鏲V[Wx Isxc5,>B!D)m\FwbNh{kv8Fʫ9"ZKoQx51w@BRhƌK^ޡZck Vz5n=7@o.!,vV;>܆h/FoSH}%O3>m{Ga`,VF\e}q5"IDAT4VERޖPN?9 ;@4UMs?ccŚP4a('ۆP6yfB?Z7Y⃠v|ᝰxbɳ\^;evoS'~c"9uozيlֵM/ٵn~)dYK}mĢPD!B^Bkr Gi7ױu&ᇡ,/Eep^jB,g=bcFlK'EネE9AEA<ؗ#Oj#'զ߾Zco51*2>zǖoswdMM3&ѣ_Ot{nw9ЁXK  [ 6BkV]@~]6Q8,1AMRNQ\0oUג\k͛m#>9쩛ާP-.0>f4)norlo1=x8 "<}ڌzTA'c-aBΫJ@Vkk Y\RWk?9K%ѳIͧھLUő7FHnh uf;xfD l ` ?v/GX(ſ^ 3GH5ٰ65x̅vEeVDKQjZvޫЄ$m=)J3aS3_|2~v X(fAsS\93Wɚy|`_n2l;Pf):_0aJ0KV/u^%{IOfS[HZ)DXsBtťM1&Rҍ8_y?=K՝ @|M6;P}B9ytR<ߟ$LջȄ\>6."cr큑H;]EUǁ^R1mYQXvҠ._ٗs>"DH !7<Fg T 寲^k0W͵|6_o:tz{Eo/7{=o`yO]3CLJ{-sY˿]PZJƺ>>cD {7ͮ0hsOoi4p$ o;ĴƉ|iֶkJ~N3d͵]{,^g(}ӧ%j5boTYjN<4j8o'~ۋ*w# 6A1 ?J3kO/{le& /(J=\|ntBRdR̲0[P0KH6=5;w_;ijr~ܾr0&_x,,BI*]ޥx'~#츐g}$_ m0"0G'JF[nxN)_r[ZCkfV-:0`]Ɲ;4./U빬$ES 壐XpÑA(e2-݋wăѿj/WX 5Ɠ7 zmBW5=^!+Mi x.Ң 'uH{͛+r 7&u1MUtYgvlJۣ69%4rɗKJ\V8x_lm&Lܶ[`*oZ8j^pu[m倣xi(ypްU܈ڏH.1rxĔMi29eoicehv&aVUm}FvnԔ *3N{(?$E-;Z4tf*|1:L~OLni(&Rn)~`߭I(]?*(rޡ[񃞕8fFѠ3c:-J{0E‹H\٬!}cm}+Q")*7!% bۡ[ 'DP[i-xߺSܼ}G=Ih @18`U5ۧ^ˉ3e =JfF Z<*ƽ1'ͪv9Ѵ7RNƑj%o"Mjb46Cſ'abq:+&Ɛe.J.|1gIxO>v8PY+Al~:)=u~VdO B)emo7qwn_K(vX< K컵n=,Njbupu'8d>Y6`g~7wm,D2c#3??IWRrh‘qNƳ͜ss;{DGSmuxz(S~q^)19u(Q SM{ӆ,UI>쇝-b`TY^ՃT]LJ[R94)䯙&l`ÖjQm} *ߚz V\!f'fx׋_)8~:yw2pPgA@ Zi՗;"2:!ꌷX}AO4KBB  @ ?3 Ws:Fu?P;wM0HqX]2`[ R{g*ƾZ,Êo5m